<?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>MCMedias</name>
	<version>1.0.8</version>
  <mincmsversion>1.10</mincmsversion>
	<help><![CDATA[CjxoMz5IZWxwPC8zPgo8cD5UbyBjYWxsIGEgZ2FsbGVyeSwgdXNlIHtNQ01lZGlhcyBjb2xsZWN0aW9uX2lkPSJZb3VyIENvbGxlY3Rpb24gSUQiIHRlbXBsYXRlPSJZb3VyIHRlbXBsYXRlIn0uIFRlbXBsYXRlIGlzIG5vdCBtYW5kYXRvcnkuIFlvdSBjYW4gYWxzbyBwYXNzIGEgbGlzdCBvZiBjb2xsZWN0aW9ucyBJRHMgd2l0aCBwYXJhbSBjb2xsZWN0aW9uX2lkcyBhbmQgdGhlIGNvbGxlY3Rpb25zIGlkcyBzZXBhcmF0ZWQgYnkgY29tYS4gWW91IGNhbiBwYXNzIHBhcmFtcyBhbmQgcmVjdXBlcmF0ZSB0aGVtIHZpYSB7JG1jbWVkaWFzX3BhcmFtc308L3A+CjxoND5UaHVtYm5haWxzPC9oND4KPHA+VG8gY3JlYXRlIHRodW1ibmFpbHMsIHVzZSB7TUNNZWRpYXMgYWN0aW9uPSJ0aHVtYm5haWwiIHdpZHRoPTE1MCBoZWlnaHQ9MTUwIGZpbGU9JGZpbGUtPmdldFJlbGF0aXZlUGF0aCgpfSB3aGljaCB3aWxsIGNyZWF0ZSB0aGVtIGluIHRoZSBjYWNoZSBkaXJlY3RvcnkuPC9wPgo8cD5Zb3UgY2FuIGFsc28gdXNlIGFueSBwaWN0dXJlcyBpbnNpZGUgdGhlIC91cGxvYWRzLyBkaXJlY3RvcnkuIFlvdXIgZmlsZW5hbWUgc2hvdWxkIGJlZ2luIHdpdGggIi91cGxvYWRzLyI8L3A+CjxwPllvdSBjYW4gdXNlIHRoZSBzaG9ydGVyIHZlcnNpb246IHtUaHVtYm5haWx9PC9wPgo8cD48dT5PcHRpb25zPC91PjwvcD4KPHVsPgogIDxsaT53aWR0aDwvbGk+CiAgPGxpPmhlaWdodDwvbGk+CiAgPGxpPnNpemU6IHNldCBib3RoIHdpZHRoIGFuZCBoZWlnaHQ8L2xpPgogIDxsaT5tb2RlIChvbmx5ICJkZWZhdWx0IiBmb3IgdGhlIG1vbWVudCk8L2xpPgo8L3VsPgo8aDQ+Q292ZXI8L2g0Pgo8cD5Zb3UgY2FuIGdldCB0aGUgdGh1bWJuYWlsIG9mIHRoZSBjb3ZlciBvZiBhIGZpbGUgd2l0aCB7TUNNZWRpYXMgYWN0aW9uPSJ0aHVtYm5haWwiIHdpZHRoPTE1MCBoZWlnaHQ9MTUwfS4gSXQgdXNlcyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGFzIFRodW1ibmFpbHMuPC9wPgo8aDQ+RGlyZWN0IHRodW1ibmFpbGluZzwvaDQ+CjxwPklmIHlvdSBuZWVkIHRvIGRvIGEgImRpcmVjdCIgdGh1bWJuYWlsaW5nLCB5b3UgY2FuIHVzZSB0aGUgVVJMICcvdGh1bWJuYWlsL3BhdGhfdG9feW91cl9maWxlLmV4dCcgZGlyZWN0bHkgaW4gdGhlIFNSQyBhdHRyaWJ1dGUgb2YgeW91ciBpbWFnZS4gWW91IGNhbiBhbHNvIGFkZCB0aGUgZGVzaXJlIHNpemVzOiAnL3RodW1ibmFpbC8xNTAvcGF0aF90b195b3VyX2ZpbGUuZXh0JyB3aWxsIGNyZWF0ZSBhIDE1MHgxNTAgdGh1bWJuYWlsLiAnL3RodW1ibmFpbC8zMDAvMjAwL3BhdGhfdG9feW91cl9maWxlLmV4dCcgd2lsbCBjcmVhdGUgYSB0aHVtYm5haWwgMzAwcHggd2lkdGggYW5kIDIwMHB4IGhlaWdodC4gVGhvc2UgdXJsIHdpbGwgZGlyZWN0bHkgZGVsaXZlcnMgeW91IHRoZSBpbWFnZSAodGhyb3VnaCBhIHJlZGlyZWN0aW9uKS48L3A+CjxoND5EaXZlcnM8L2g0Pgo8cD5MaXN0IG9mIGZ1bmN0aW9ucyBvbiBhIE1DRmlsZSBlbnRyeTwvcD4KPHVsPgogIDxsaT5nZXRGaWxlU2l6ZSgpPC9saT4KICA8bGk+Z2V0RmlsZUV4dGVuc2lvbigpPC9saT4KICA8bGk+Z2V0RmlsZUljb24oKTwvbGk+CjwvdWw+CjxoMz5TdXBwb3J0PC9oMz4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0IG9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAxMCwgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxhIGhyZWY9Im1haWx0bzpqY2NAbW9ycmlzLWNoYXBtYW4uY29tIj4mbHQ7amNjQG1vcnJpcy1jaGFwbWFuLmNvbSZndDs8L2E+IC0gTW9ycmlzICZhbXA7IENoYXBtYW4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD48aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNNU0Zvcm1zID0mZ3Q7IDEuMC4zPC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjwvdWw+]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgJmx0O2pjY0Btb3JyaXMtY2hhcG1hbi5jb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS4wLjg8YnIgLz4=]]></about>
	<requires>
	  <requiredname>CMSForms</requiredname>
	  <requiredversion>1.0.3</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAQAHNwYmxvYgAAALBicAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAbABpAGJid3NwYmxvYgAAALBicGxpc3QwMNYBAgMEBQYHCAgICAxcV2luZG93Qm91bmRzW1Nob3dTaWRlYmFyXVNob3dTdGF0dXNCYXJbU2hvd1BhdGhiYXJbU2hvd1Rvb2xiYXJcU2lkZWJhcldpZHRoXxAZe3sxNTQ4LCAxOTF9LCB7OTY2LCA2NjN9fQkJCQkQhggVIi48SFRhfX5/gIEAAAAAAAABAQAAAAAAAAANAAAAAAAAAAAAAAAAAAAAgwAAAAMAbABpAGJ2U3JubG9uZwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAABCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAAAAAAAAQAAAIAAAAAAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/.git/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/branches/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/COMMIT_EDITMSG</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Tm8gcHJlZmVyZW5jZXMgYnkgZGVmYXVsdAo=]]></data>
	</file>
	<file>
	  <filename>/.git/config</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W2NvcmVdCglyZXBvc2l0b3J5Zm9ybWF0dmVyc2lvbiA9IDAKCWZpbGVtb2RlID0gdHJ1ZQoJYmFyZSA9IGZhbHNlCglsb2dhbGxyZWZ1cGRhdGVzID0gdHJ1ZQoJaWdub3JlY2FzZSA9IHRydWUKCXByZWNvbXBvc2V1bmljb2RlID0gZmFsc2UKW3JlbW90ZSAib3JpZ2luIl0KCXVybCA9IGdpdEBnaXRodWIuY29tOnRvdG9waGUvY21zbXMtbWNtZWRpYXMuZ2l0CglmZXRjaCA9ICtyZWZzL2hlYWRzLyo6cmVmcy9yZW1vdGVzL29yaWdpbi8qClticmFuY2ggIm1hc3RlciJdCglyZW1vdGUgPSBvcmlnaW4KCW1lcmdlID0gcmVmcy9oZWFkcy9tYXN0ZXIK]]></data>
	</file>
	<file>
	  <filename>/.git/description</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VW5uYW1lZCByZXBvc2l0b3J5OyBlZGl0IHRoaXMgZmlsZSAnZGVzY3JpcHRpb24nIHRvIG5hbWUgdGhlIHJlcG9zaXRvcnkuCg==]]></data>
	</file>
	<file>
	  <filename>/.git/HEAD</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cmVmOiByZWZzL2hlYWRzL21hc3Rlcgo=]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/hooks/applypatch-msg.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGNoZWNrIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UgdGFrZW4gYnkKIyBhcHBseXBhdGNoIGZyb20gYW4gZS1tYWlsIG1lc3NhZ2UuCiMKIyBUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuCiMgYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZSBjb21taXQuICBUaGUgaG9vayBpcwojIGFsbG93ZWQgdG8gZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UgZmlsZS4KIwojIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gImFwcGx5cGF0Y2gtbXNnIi4KCi4gZ2l0LXNoLXNldHVwCnRlc3QgLXggIiRHSVRfRElSL2hvb2tzL2NvbW1pdC1tc2ciICYmCglleGVjICIkR0lUX0RJUi9ob29rcy9jb21taXQtbXNnIiAkezErIiRAIn0KOgo=]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/commit-msg.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGNoZWNrIHRoZSBjb21taXQgbG9nIG1lc3NhZ2UuCiMgQ2FsbGVkIGJ5ICJnaXQgY29tbWl0IiB3aXRoIG9uZSBhcmd1bWVudCwgdGhlIG5hbWUgb2YgdGhlIGZpbGUKIyB0aGF0IGhhcyB0aGUgY29tbWl0IG1lc3NhZ2UuICBUaGUgaG9vayBzaG91bGQgZXhpdCB3aXRoIG5vbi16ZXJvCiMgc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4gYXBwcm9wcmlhdGUgbWVzc2FnZSBpZiBpdCB3YW50cyB0byBzdG9wIHRoZQojIGNvbW1pdC4gIFRoZSBob29rIGlzIGFsbG93ZWQgdG8gZWRpdCB0aGUgY29tbWl0IG1lc3NhZ2UgZmlsZS4KIwojIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gImNvbW1pdC1tc2ciLgoKIyBVbmNvbW1lbnQgdGhlIGJlbG93IHRvIGFkZCBhIFNpZ25lZC1vZmYtYnkgbGluZSB0byB0aGUgbWVzc2FnZS4KIyBEb2luZyB0aGlzIGluIGEgaG9vayBpcyBhIGJhZCBpZGVhIGluIGdlbmVyYWwsIGJ1dCB0aGUgcHJlcGFyZS1jb21taXQtbXNnCiMgaG9vayBpcyBtb3JlIHN1aXRlZCB0byBpdC4KIwojIFNPQj0kKGdpdCB2YXIgR0lUX0FVVEhPUl9JREVOVCB8IHNlZCAtbiAncy9eXCguKj5cKS4qJC9TaWduZWQtb2ZmLWJ5OiBcMS9wJykKIyBncmVwIC1xcyAiXiRTT0IiICIkMSIgfHwgZWNobyAiJFNPQiIgPj4gIiQxIgoKIyBUaGlzIGV4YW1wbGUgY2F0Y2hlcyBkdXBsaWNhdGUgU2lnbmVkLW9mZi1ieSBsaW5lcy4KCnRlc3QgIiIgPSAiJChncmVwICdeU2lnbmVkLW9mZi1ieTogJyAiJDEiIHwKCSBzb3J0IHwgdW5pcSAtYyB8IHNlZCAtZSAnL15bIAldKjFbIAldL2QnKSIgfHwgewoJZWNobyA+JjIgRHVwbGljYXRlIFNpZ25lZC1vZmYtYnkgbGluZXMuCglleGl0IDEKfQo=]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/post-update.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHByZXBhcmUgYSBwYWNrZWQgcmVwb3NpdG9yeSBmb3IgdXNlIG92ZXIKIyBkdW1iIHRyYW5zcG9ydHMuCiMKIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwb3N0LXVwZGF0ZSIuCgpleGVjIGdpdCB1cGRhdGUtc2VydmVyLWluZm8K]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/pre-applypatch.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSB3aGF0IGlzIGFib3V0IHRvIGJlIGNvbW1pdHRlZAojIGJ5IGFwcGx5cGF0Y2ggZnJvbSBhbiBlLW1haWwgbWVzc2FnZS4KIwojIFRoZSBob29rIHNob3VsZCBleGl0IHdpdGggbm9uLXplcm8gc3RhdHVzIGFmdGVyIGlzc3VpbmcgYW4KIyBhcHByb3ByaWF0ZSBtZXNzYWdlIGlmIGl0IHdhbnRzIHRvIHN0b3AgdGhlIGNvbW1pdC4KIwojIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInByZS1hcHBseXBhdGNoIi4KCi4gZ2l0LXNoLXNldHVwCnRlc3QgLXggIiRHSVRfRElSL2hvb2tzL3ByZS1jb21taXQiICYmCglleGVjICIkR0lUX0RJUi9ob29rcy9wcmUtY29tbWl0IiAkezErIiRAIn0KOgo=]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/pre-commit.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHZlcmlmeSB3aGF0IGlzIGFib3V0IHRvIGJlIGNvbW1pdHRlZC4KIyBDYWxsZWQgYnkgImdpdCBjb21taXQiIHdpdGggbm8gYXJndW1lbnRzLiAgVGhlIGhvb2sgc2hvdWxkCiMgZXhpdCB3aXRoIG5vbi16ZXJvIHN0YXR1cyBhZnRlciBpc3N1aW5nIGFuIGFwcHJvcHJpYXRlIG1lc3NhZ2UgaWYKIyBpdCB3YW50cyB0byBzdG9wIHRoZSBjb21taXQuCiMKIyBUbyBlbmFibGUgdGhpcyBob29rLCByZW5hbWUgdGhpcyBmaWxlIHRvICJwcmUtY29tbWl0Ii4KCmlmIGdpdCByZXYtcGFyc2UgLS12ZXJpZnkgSEVBRCA+L2Rldi9udWxsIDI+JjEKdGhlbgoJYWdhaW5zdD1IRUFECmVsc2UKCSMgSW5pdGlhbCBjb21taXQ6IGRpZmYgYWdhaW5zdCBhbiBlbXB0eSB0cmVlIG9iamVjdAoJYWdhaW5zdD00YjgyNWRjNjQyY2I2ZWI5YTA2MGU1NGJmOGQ2OTI4OGZiZWU0OTA0CmZpCgojIElmIHlvdSB3YW50IHRvIGFsbG93IG5vbi1hc2NpaSBmaWxlbmFtZXMgc2V0IHRoaXMgdmFyaWFibGUgdG8gdHJ1ZS4KYWxsb3dub25hc2NpaT0kKGdpdCBjb25maWcgaG9va3MuYWxsb3dub25hc2NpaSkKCiMgUmVkaXJlY3Qgb3V0cHV0IHRvIHN0ZGVyci4KZXhlYyAxPiYyCgojIENyb3NzIHBsYXRmb3JtIHByb2plY3RzIHRlbmQgdG8gYXZvaWQgbm9uLWFzY2lpIGZpbGVuYW1lczsgcHJldmVudAojIHRoZW0gZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgcmVwb3NpdG9yeS4gV2UgZXhwbG9pdCB0aGUgZmFjdCB0aGF0IHRoZQojIHByaW50YWJsZSByYW5nZSBzdGFydHMgYXQgdGhlIHNwYWNlIGNoYXJhY3RlciBhbmQgZW5kcyB3aXRoIHRpbGRlLgppZiBbICIkYWxsb3dub25hc2NpaSIgIT0gInRydWUiIF0gJiYKCSMgTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYnJhY2tldHMgYXJvdW5kIGEgdHIgcmFuZ2UgaXMgb2sgaGVyZSwgKGl0J3MKCSMgZXZlbiByZXF1aXJlZCwgZm9yIHBvcnRhYmlsaXR5IHRvIFNvbGFyaXMgMTAncyAvdXNyL2Jpbi90ciksIHNpbmNlCgkjIHRoZSBzcXVhcmUgYnJhY2tldCBieXRlcyBoYXBwZW4gdG8gZmFsbCBpbiB0aGUgZGVzaWduYXRlZCByYW5nZS4KCXRlc3QgJChnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtb25seSAtLWRpZmYtZmlsdGVyPUEgLXogJGFnYWluc3QgfAoJICBMQ19BTEw9QyB0ciAtZCAnWyAtfl1cMCcgfCB3YyAtYykgIT0gMAp0aGVuCgllY2hvICJFcnJvcjogQXR0ZW1wdCB0byBhZGQgYSBub24tYXNjaWkgZmlsZSBuYW1lLiIKCWVjaG8KCWVjaG8gIlRoaXMgY2FuIGNhdXNlIHByb2JsZW1zIGlmIHlvdSB3YW50IHRvIHdvcmsiCgllY2hvICJ3aXRoIHBlb3BsZSBvbiBvdGhlciBwbGF0Zm9ybXMuIgoJZWNobwoJZWNobyAiVG8gYmUgcG9ydGFibGUgaXQgaXMgYWR2aXNhYmxlIHRvIHJlbmFtZSB0aGUgZmlsZSAuLi4iCgllY2hvCgllY2hvICJJZiB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcgeW91IGNhbiBkaXNhYmxlIHRoaXMiCgllY2hvICJjaGVjayB1c2luZzoiCgllY2hvCgllY2hvICIgIGdpdCBjb25maWcgaG9va3MuYWxsb3dub25hc2NpaSB0cnVlIgoJZWNobwoJZXhpdCAxCmZpCgojIElmIHRoZXJlIGFyZSB3aGl0ZXNwYWNlIGVycm9ycywgcHJpbnQgdGhlIG9mZmVuZGluZyBmaWxlIG5hbWVzIGFuZCBmYWlsLgpleGVjIGdpdCBkaWZmLWluZGV4IC0tY2hlY2sgLS1jYWNoZWQgJGFnYWluc3QgLS0K]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/pre-rebase.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBDb3B5cmlnaHQgKGMpIDIwMDYsIDIwMDggSnVuaW8gQyBIYW1hbm8KIwojIFRoZSAicHJlLXJlYmFzZSIgaG9vayBpcyBydW4ganVzdCBiZWZvcmUgImdpdCByZWJhc2UiIHN0YXJ0cyBkb2luZwojIGl0cyBqb2IsIGFuZCBjYW4gcHJldmVudCB0aGUgY29tbWFuZCBmcm9tIHJ1bm5pbmcgYnkgZXhpdGluZyB3aXRoCiMgbm9uLXplcm8gc3RhdHVzLgojCiMgVGhlIGhvb2sgaXMgY2FsbGVkIHdpdGggdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgojCiMgJDEgLS0gdGhlIHVwc3RyZWFtIHRoZSBzZXJpZXMgd2FzIGZvcmtlZCBmcm9tLgojICQyIC0tIHRoZSBicmFuY2ggYmVpbmcgcmViYXNlZCAob3IgZW1wdHkgd2hlbiByZWJhc2luZyB0aGUgY3VycmVudCBicmFuY2gpLgojCiMgVGhpcyBzYW1wbGUgc2hvd3MgaG93IHRvIHByZXZlbnQgdG9waWMgYnJhbmNoZXMgdGhhdCBhcmUgYWxyZWFkeQojIG1lcmdlZCB0byAnbmV4dCcgYnJhbmNoIGZyb20gZ2V0dGluZyByZWJhc2VkLCBiZWNhdXNlIGFsbG93aW5nIGl0CiMgd291bGQgcmVzdWx0IGluIHJlYmFzaW5nIGFscmVhZHkgcHVibGlzaGVkIGhpc3RvcnkuCgpwdWJsaXNoPW5leHQKYmFzZWJyYW5jaD0iJDEiCmlmIHRlc3QgIiQjIiA9IDIKdGhlbgoJdG9waWM9InJlZnMvaGVhZHMvJDIiCmVsc2UKCXRvcGljPWBnaXQgc3ltYm9saWMtcmVmIEhFQURgIHx8CglleGl0IDAgOyMgd2UgZG8gbm90IGludGVycnVwdCByZWJhc2luZyBkZXRhY2hlZCBIRUFECmZpCgpjYXNlICIkdG9waWMiIGluCnJlZnMvaGVhZHMvPz8vKikKCTs7CiopCglleGl0IDAgOyMgd2UgZG8gbm90IGludGVycnVwdCBvdGhlcnMuCgk7Owplc2FjCgojIE5vdyB3ZSBhcmUgZGVhbGluZyB3aXRoIGEgdG9waWMgYnJhbmNoIGJlaW5nIHJlYmFzZWQKIyBvbiB0b3Agb2YgbWFzdGVyLiAgSXMgaXQgT0sgdG8gcmViYXNlIGl0PwoKIyBEb2VzIHRoZSB0b3BpYyByZWFsbHkgZXhpc3Q/CmdpdCBzaG93LXJlZiAtcSAiJHRvcGljIiB8fCB7CgllY2hvID4mMiAiTm8gc3VjaCBicmFuY2ggJHRvcGljIgoJZXhpdCAxCn0KCiMgSXMgdG9waWMgZnVsbHkgbWVyZ2VkIHRvIG1hc3Rlcj8Kbm90X2luX21hc3Rlcj1gZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgXm1hc3RlciAiJHRvcGljImAKaWYgdGVzdCAteiAiJG5vdF9pbl9tYXN0ZXIiCnRoZW4KCWVjaG8gPiYyICIkdG9waWMgaXMgZnVsbHkgbWVyZ2VkIHRvIG1hc3RlcjsgYmV0dGVyIHJlbW92ZSBpdC4iCglleGl0IDEgOyMgd2UgY291bGQgYWxsb3cgaXQsIGJ1dCB0aGVyZSBpcyBubyBwb2ludC4KZmkKCiMgSXMgdG9waWMgZXZlciBtZXJnZWQgdG8gbmV4dD8gIElmIHNvIHlvdSBzaG91bGQgbm90IGJlIHJlYmFzaW5nIGl0Lgpvbmx5X25leHRfMT1gZ2l0IHJldi1saXN0IF5tYXN0ZXIgIl4kdG9waWMiICR7cHVibGlzaH0gfCBzb3J0YApvbmx5X25leHRfMj1gZ2l0IHJldi1saXN0IF5tYXN0ZXIgICAgICAgICAgICR7cHVibGlzaH0gfCBzb3J0YAppZiB0ZXN0ICIkb25seV9uZXh0XzEiID0gIiRvbmx5X25leHRfMiIKdGhlbgoJbm90X2luX3RvcGljPWBnaXQgcmV2LWxpc3QgIl4kdG9waWMiIG1hc3RlcmAKCWlmIHRlc3QgLXogIiRub3RfaW5fdG9waWMiCgl0aGVuCgkJZWNobyA+JjIgIiR0b3BpYyBpcyBhbHJlYWR5IHVwLXRvLWRhdGUgd2l0aCBtYXN0ZXIiCgkJZXhpdCAxIDsjIHdlIGNvdWxkIGFsbG93IGl0LCBidXQgdGhlcmUgaXMgbm8gcG9pbnQuCgllbHNlCgkJZXhpdCAwCglmaQplbHNlCglub3RfaW5fbmV4dD1gZ2l0IHJldi1saXN0IC0tcHJldHR5PW9uZWxpbmUgXiR7cHVibGlzaH0gIiR0b3BpYyJgCgkvdXNyL2Jpbi9wZXJsIC1lICcKCQlteSAkdG9waWMgPSAkQVJHVlswXTsKCQlteSAkbXNnID0gIiogJHRvcGljIGhhcyBjb21taXRzIGFscmVhZHkgbWVyZ2VkIHRvIHB1YmxpYyBicmFuY2g6XG4iOwoJCW15ICglbm90X2luX25leHQpID0gbWFwIHsKCQkJL14oWzAtOWEtZl0rKSAvOwoJCQkoJDEgPT4gMSk7CgkJfSBzcGxpdCgvXG4vLCAkQVJHVlsxXSk7CgkJZm9yIG15ICRlbGVtIChtYXAgewoJCQkJL14oWzAtOWEtZl0rKSAoLiopJC87CgkJCQlbJDEgPT4gJDJdOwoJCQl9IHNwbGl0KC9cbi8sICRBUkdWWzJdKSkgewoJCQlpZiAoIWV4aXN0cyAkbm90X2luX25leHR7JGVsZW0tPlswXX0pIHsKCQkJCWlmICgkbXNnKSB7CgkJCQkJcHJpbnQgU1RERVJSICRtc2c7CgkJCQkJdW5kZWYgJG1zZzsKCQkJCX0KCQkJCXByaW50IFNUREVSUiAiICRlbGVtLT5bMV1cbiI7CgkJCX0KCQl9CgknICIkdG9waWMiICIkbm90X2luX25leHQiICIkbm90X2luX21hc3RlciIKCWV4aXQgMQpmaQoKZXhpdCAwCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgpUaGlzIHNhbXBsZSBob29rIHNhZmVndWFyZHMgdG9waWMgYnJhbmNoZXMgdGhhdCBoYXZlIGJlZW4KcHVibGlzaGVkIGZyb20gYmVpbmcgcmV3b3VuZC4KClRoZSB3b3JrZmxvdyBhc3N1bWVkIGhlcmUgaXM6CgogKiBPbmNlIGEgdG9waWMgYnJhbmNoIGZvcmtzIGZyb20gIm1hc3RlciIsICJtYXN0ZXIiIGlzIG5ldmVyCiAgIG1lcmdlZCBpbnRvIGl0IGFnYWluIChlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkuCgogKiBPbmNlIGEgdG9waWMgYnJhbmNoIGlzIGZ1bGx5IGNvb2tlZCBhbmQgbWVyZ2VkIGludG8gIm1hc3RlciIsCiAgIGl0IGlzIGRlbGV0ZWQuICBJZiB5b3UgbmVlZCB0byBidWlsZCBvbiB0b3Agb2YgaXQgdG8gY29ycmVjdAogICBlYXJsaWVyIG1pc3Rha2VzLCBhIG5ldyB0b3BpYyBicmFuY2ggaXMgY3JlYXRlZCBieSBmb3JraW5nIGF0CiAgIHRoZSB0aXAgb2YgdGhlICJtYXN0ZXIiLiAgVGhpcyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQKICAgaXQgbWFrZXMgaXQgZWFzaWVyIHRvIGtlZXAgeW91ciBoaXN0b3J5IHNpbXBsZS4KCiAqIFdoZW5ldmVyIHlvdSBuZWVkIHRvIHRlc3Qgb3IgcHVibGlzaCB5b3VyIGNoYW5nZXMgdG8gdG9waWMKICAgYnJhbmNoZXMsIG1lcmdlIHRoZW0gaW50byAibmV4dCIgYnJhbmNoLgoKVGhlIHNjcmlwdCwgYmVpbmcgYW4gZXhhbXBsZSwgaGFyZGNvZGVzIHRoZSBwdWJsaXNoIGJyYW5jaCBuYW1lCnRvIGJlICJuZXh0IiwgYnV0IGl0IGlzIHRyaXZpYWwgdG8gbWFrZSBpdCBjb25maWd1cmFibGUgdmlhCiRHSVRfRElSL2NvbmZpZyBtZWNoYW5pc20uCgpXaXRoIHRoaXMgd29ya2Zsb3csIHlvdSB3b3VsZCB3YW50IHRvIGtub3c6CgooMSkgLi4uIGlmIGEgdG9waWMgYnJhbmNoIGhhcyBldmVyIGJlZW4gbWVyZ2VkIHRvICJuZXh0Ii4gIFlvdW5nCiAgICB0b3BpYyBicmFuY2hlcyBjYW4gaGF2ZSBzdHVwaWQgbWlzdGFrZXMgeW91IHdvdWxkIHJhdGhlcgogICAgY2xlYW4gdXAgYmVmb3JlIHB1Ymxpc2hpbmcsIGFuZCB0aGluZ3MgdGhhdCBoYXZlIG5vdCBiZWVuCiAgICBtZXJnZWQgaW50byBvdGhlciBicmFuY2hlcyBjYW4gYmUgZWFzaWx5IHJlYmFzZWQgd2l0aG91dAogICAgYWZmZWN0aW5nIG90aGVyIHBlb3BsZS4gIEJ1dCBvbmNlIGl0IGlzIHB1Ymxpc2hlZCwgeW91IHdvdWxkCiAgICBub3Qgd2FudCB0byByZXdpbmQgaXQuCgooMikgLi4uIGlmIGEgdG9waWMgYnJhbmNoIGhhcyBiZWVuIGZ1bGx5IG1lcmdlZCB0byAibWFzdGVyIi4KICAgIFRoZW4geW91IGNhbiBkZWxldGUgaXQuICBNb3JlIGltcG9ydGFudGx5LCB5b3Ugc2hvdWxkIG5vdAogICAgYnVpbGQgb24gdG9wIG9mIGl0IC0tIG90aGVyIHBlb3BsZSBtYXkgYWxyZWFkeSB3YW50IHRvCiAgICBjaGFuZ2UgdGhpbmdzIHJlbGF0ZWQgdG8gdGhlIHRvcGljIGFzIHBhdGNoZXMgYWdhaW5zdCB5b3VyCiAgICAibWFzdGVyIiwgc28gaWYgeW91IG5lZWQgZnVydGhlciBjaGFuZ2VzLCBpdCBpcyBiZXR0ZXIgdG8KICAgIGZvcmsgdGhlIHRvcGljIChwZXJoYXBzIHdpdGggdGhlIHNhbWUgbmFtZSkgYWZyZXNoIGZyb20gdGhlCiAgICB0aXAgb2YgIm1hc3RlciIuCgpMZXQncyBsb29rIGF0IHRoaXMgZXhhbXBsZToKCgkJICAgby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tbyAibmV4dCIKCQkgIC8gICAgICAgLyAgICAgICAgICAgLyAgICAgICAgICAgLwoJCSAvICAgYS0tLWEtLS1iIEEgICAgIC8gICAgICAgICAgIC8KCQkvICAgLyAgICAgICAgICAgICAgIC8gICAgICAgICAgIC8KCSAgICAgICAvICAgLyAgIGMtLS1jLS0tYy0tLWMgQiAgICAgICAgIC8KCSAgICAgIC8gICAvICAgLyAgICAgICAgICAgICBcICAgICAgICAgLwoJICAgICAvICAgLyAgIC8gICBiLS0tYiBDICAgICBcICAgICAgIC8KCSAgICAvICAgLyAgIC8gICAvICAgICAgICAgICAgIFwgICAgIC8KICAgIC0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vLS0tby0tLW8tLS1vICJtYXN0ZXIiCgoKQSwgQiBhbmQgQyBhcmUgdG9waWMgYnJhbmNoZXMuCgogKiBBIGhhcyBvbmUgZml4IHNpbmNlIGl0IHdhcyBtZXJnZWQgdXAgdG8gIm5leHQiLgoKICogQiBoYXMgZmluaXNoZWQuICBJdCBoYXMgYmVlbiBmdWxseSBtZXJnZWQgdXAgdG8gIm1hc3RlciIgYW5kICJuZXh0IiwKICAgYW5kIGlzIHJlYWR5IHRvIGJlIGRlbGV0ZWQuCgogKiBDIGhhcyBub3QgbWVyZ2VkIHRvICJuZXh0IiBhdCBhbGwuCgpXZSB3b3VsZCB3YW50IHRvIGFsbG93IEMgdG8gYmUgcmViYXNlZCwgcmVmdXNlIEEsIGFuZCBlbmNvdXJhZ2UKQiB0byBiZSBkZWxldGVkLgoKVG8gY29tcHV0ZSAoMSk6CgoJZ2l0IHJldi1saXN0IF5tYXN0ZXIgXnRvcGljIG5leHQKCWdpdCByZXYtbGlzdCBebWFzdGVyICAgICAgICBuZXh0CgoJaWYgdGhlc2UgbWF0Y2gsIHRvcGljIGhhcyBub3QgbWVyZ2VkIGluIG5leHQgYXQgYWxsLgoKVG8gY29tcHV0ZSAoMik6CgoJZ2l0IHJldi1saXN0IG1hc3Rlci4udG9waWMKCglpZiB0aGlzIGlzIGVtcHR5LCBpdCBpcyBmdWxseSBtZXJnZWQgdG8gIm1hc3RlciIuCg==]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/prepare-commit-msg.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIHByZXBhcmUgdGhlIGNvbW1pdCBsb2cgbWVzc2FnZS4KIyBDYWxsZWQgYnkgImdpdCBjb21taXQiIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZpbGUgdGhhdCBoYXMgdGhlCiMgY29tbWl0IG1lc3NhZ2UsIGZvbGxvd2VkIGJ5IHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29tbWl0CiMgbWVzc2FnZSdzIHNvdXJjZS4gIFRoZSBob29rJ3MgcHVycG9zZSBpcyB0byBlZGl0IHRoZSBjb21taXQKIyBtZXNzYWdlIGZpbGUuICBJZiB0aGUgaG9vayBmYWlscyB3aXRoIGEgbm9uLXplcm8gc3RhdHVzLAojIHRoZSBjb21taXQgaXMgYWJvcnRlZC4KIwojIFRvIGVuYWJsZSB0aGlzIGhvb2ssIHJlbmFtZSB0aGlzIGZpbGUgdG8gInByZXBhcmUtY29tbWl0LW1zZyIuCgojIFRoaXMgaG9vayBpbmNsdWRlcyB0aHJlZSBleGFtcGxlcy4gIFRoZSBmaXJzdCBjb21tZW50cyBvdXQgdGhlCiMgIkNvbmZsaWN0czoiIHBhcnQgb2YgYSBtZXJnZSBjb21taXQuCiMKIyBUaGUgc2Vjb25kIGluY2x1ZGVzIHRoZSBvdXRwdXQgb2YgImdpdCBkaWZmIC0tbmFtZS1zdGF0dXMgLXIiCiMgaW50byB0aGUgbWVzc2FnZSwganVzdCBiZWZvcmUgdGhlICJnaXQgc3RhdHVzIiBvdXRwdXQuICBJdCBpcwojIGNvbW1lbnRlZCBiZWNhdXNlIGl0IGRvZXNuJ3QgY29wZSB3aXRoIC0tYW1lbmQgb3Igd2l0aCBzcXVhc2hlZAojIGNvbW1pdHMuCiMKIyBUaGUgdGhpcmQgZXhhbXBsZSBhZGRzIGEgU2lnbmVkLW9mZi1ieSBsaW5lIHRvIHRoZSBtZXNzYWdlLCB0aGF0IGNhbgojIHN0aWxsIGJlIGVkaXRlZC4gIFRoaXMgaXMgcmFyZWx5IGEgZ29vZCBpZGVhLgoKY2FzZSAiJDIsJDMiIGluCiAgbWVyZ2UsKQogICAgL3Vzci9iaW4vcGVybCAtaS5iYWsgLW5lICdzL14vIyAvLCBzL14jICMvIy8gaWYgL15Db25mbGljdHMvIC4uIC8jLzsgcHJpbnQnICIkMSIgOzsKCiMgLHx0ZW1wbGF0ZSwpCiMgICAvdXNyL2Jpbi9wZXJsIC1pLmJhayAtcGUgJwojICAgICAgcHJpbnQgIlxuIiAuIGBnaXQgZGlmZiAtLWNhY2hlZCAtLW5hbWUtc3RhdHVzIC1yYAojCSBpZiAvXiMvICYmICRmaXJzdCsrID09IDAnICIkMSIgOzsKCiAgKikgOzsKZXNhYwoKIyBTT0I9JChnaXQgdmFyIEdJVF9BVVRIT1JfSURFTlQgfCBzZWQgLW4gJ3MvXlwoLio+XCkuKiQvU2lnbmVkLW9mZi1ieTogXDEvcCcpCiMgZ3JlcCAtcXMgIl4kU09CIiAiJDEiIHx8IGVjaG8gIiRTT0IiID4+ICIkMSIK]]></data>
	</file>
	<file>
	  <filename>/.git/hooks/update.sample</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL3NoCiMKIyBBbiBleGFtcGxlIGhvb2sgc2NyaXB0IHRvIGJsb2NrcyB1bmFubm90YXRlZCB0YWdzIGZyb20gZW50ZXJpbmcuCiMgQ2FsbGVkIGJ5ICJnaXQgcmVjZWl2ZS1wYWNrIiB3aXRoIGFyZ3VtZW50czogcmVmbmFtZSBzaGExLW9sZCBzaGExLW5ldwojCiMgVG8gZW5hYmxlIHRoaXMgaG9vaywgcmVuYW1lIHRoaXMgZmlsZSB0byAidXBkYXRlIi4KIwojIENvbmZpZwojIC0tLS0tLQojIGhvb2tzLmFsbG93dW5hbm5vdGF0ZWQKIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgdW5hbm5vdGF0ZWQgdGFncyB3aWxsIGJlIGFsbG93ZWQgaW50byB0aGUKIyAgIHJlcG9zaXRvcnkuICBCeSBkZWZhdWx0IHRoZXkgd29uJ3QgYmUuCiMgaG9va3MuYWxsb3dkZWxldGV0YWcKIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgZGVsZXRpbmcgdGFncyB3aWxsIGJlIGFsbG93ZWQgaW4gdGhlCiMgICByZXBvc2l0b3J5LiAgQnkgZGVmYXVsdCB0aGV5IHdvbid0IGJlLgojIGhvb2tzLmFsbG93bW9kaWZ5dGFnCiMgICBUaGlzIGJvb2xlYW4gc2V0cyB3aGV0aGVyIGEgdGFnIG1heSBiZSBtb2RpZmllZCBhZnRlciBjcmVhdGlvbi4gQnkgZGVmYXVsdAojICAgaXQgd29uJ3QgYmUuCiMgaG9va3MuYWxsb3dkZWxldGVicmFuY2gKIyAgIFRoaXMgYm9vbGVhbiBzZXRzIHdoZXRoZXIgZGVsZXRpbmcgYnJhbmNoZXMgd2lsbCBiZSBhbGxvd2VkIGluIHRoZQojICAgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhleSB3b24ndCBiZS4KIyBob29rcy5kZW55Y3JlYXRlYnJhbmNoCiMgICBUaGlzIGJvb2xlYW4gc2V0cyB3aGV0aGVyIHJlbW90ZWx5IGNyZWF0aW5nIGJyYW5jaGVzIHdpbGwgYmUgZGVuaWVkCiMgICBpbiB0aGUgcmVwb3NpdG9yeS4gIEJ5IGRlZmF1bHQgdGhpcyBpcyBhbGxvd2VkLgojCgojIC0tLSBDb21tYW5kIGxpbmUKcmVmbmFtZT0iJDEiCm9sZHJldj0iJDIiCm5ld3Jldj0iJDMiCgojIC0tLSBTYWZldHkgY2hlY2sKaWYgWyAteiAiJEdJVF9ESVIiIF07IHRoZW4KCWVjaG8gIkRvbid0IHJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIiA+JjIKCWVjaG8gIiAoaWYgeW91IHdhbnQsIHlvdSBjb3VsZCBzdXBwbHkgR0lUX0RJUiB0aGVuIHJ1biIgPiYyCgllY2hvICIgICQwIDxyZWY+IDxvbGRyZXY+IDxuZXdyZXY+KSIgPiYyCglleGl0IDEKZmkKCmlmIFsgLXogIiRyZWZuYW1lIiAtbyAteiAiJG9sZHJldiIgLW8gLXogIiRuZXdyZXYiIF07IHRoZW4KCWVjaG8gIlVzYWdlOiAkMCA8cmVmPiA8b2xkcmV2PiA8bmV3cmV2PiIgPiYyCglleGl0IDEKZmkKCiMgLS0tIENvbmZpZwphbGxvd3VuYW5ub3RhdGVkPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3d1bmFubm90YXRlZCkKYWxsb3dkZWxldGVicmFuY2g9JChnaXQgY29uZmlnIC0tYm9vbCBob29rcy5hbGxvd2RlbGV0ZWJyYW5jaCkKZGVueWNyZWF0ZWJyYW5jaD0kKGdpdCBjb25maWcgLS1ib29sIGhvb2tzLmRlbnljcmVhdGVicmFuY2gpCmFsbG93ZGVsZXRldGFnPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3dkZWxldGV0YWcpCmFsbG93bW9kaWZ5dGFnPSQoZ2l0IGNvbmZpZyAtLWJvb2wgaG9va3MuYWxsb3dtb2RpZnl0YWcpCgojIGNoZWNrIGZvciBubyBkZXNjcmlwdGlvbgpwcm9qZWN0ZGVzYz0kKHNlZCAtZSAnMXEnICIkR0lUX0RJUi9kZXNjcmlwdGlvbiIpCmNhc2UgIiRwcm9qZWN0ZGVzYyIgaW4KIlVubmFtZWQgcmVwb3NpdG9yeSIqIHwgIiIpCgllY2hvICIqKiogUHJvamVjdCBkZXNjcmlwdGlvbiBmaWxlIGhhc24ndCBiZWVuIHNldCIgPiYyCglleGl0IDEKCTs7CmVzYWMKCiMgLS0tIENoZWNrIHR5cGVzCiMgaWYgJG5ld3JldiBpcyAwMDAwLi4uMDAwMCwgaXQncyBhIGNvbW1pdCB0byBkZWxldGUgYSByZWYuCnplcm89IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAiCmlmIFsgIiRuZXdyZXYiID0gIiR6ZXJvIiBdOyB0aGVuCgluZXdyZXZfdHlwZT1kZWxldGUKZWxzZQoJbmV3cmV2X3R5cGU9JChnaXQgY2F0LWZpbGUgLXQgJG5ld3JldikKZmkKCmNhc2UgIiRyZWZuYW1lIiwiJG5ld3Jldl90eXBlIiBpbgoJcmVmcy90YWdzLyosY29tbWl0KQoJCSMgdW4tYW5ub3RhdGVkIHRhZwoJCXNob3J0X3JlZm5hbWU9JHtyZWZuYW1lIyNyZWZzL3RhZ3MvfQoJCWlmIFsgIiRhbGxvd3VuYW5ub3RhdGVkIiAhPSAidHJ1ZSIgXTsgdGhlbgoJCQllY2hvICIqKiogVGhlIHVuLWFubm90YXRlZCB0YWcsICRzaG9ydF9yZWZuYW1lLCBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkiID4mMgoJCQllY2hvICIqKiogVXNlICdnaXQgdGFnIFsgLWEgfCAtcyBdJyBmb3IgdGFncyB5b3Ugd2FudCB0byBwcm9wYWdhdGUuIiA+JjIKCQkJZXhpdCAxCgkJZmkKCQk7OwoJcmVmcy90YWdzLyosZGVsZXRlKQoJCSMgZGVsZXRlIHRhZwoJCWlmIFsgIiRhbGxvd2RlbGV0ZXRhZyIgIT0gInRydWUiIF07IHRoZW4KCQkJZWNobyAiKioqIERlbGV0aW5nIGEgdGFnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCgkJCWV4aXQgMQoJCWZpCgkJOzsKCXJlZnMvdGFncy8qLHRhZykKCQkjIGFubm90YXRlZCB0YWcKCQlpZiBbICIkYWxsb3dtb2RpZnl0YWciICE9ICJ0cnVlIiBdICYmIGdpdCByZXYtcGFyc2UgJHJlZm5hbWUgPiAvZGV2L251bGwgMj4mMQoJCXRoZW4KCQkJZWNobyAiKioqIFRhZyAnJHJlZm5hbWUnIGFscmVhZHkgZXhpc3RzLiIgPiYyCgkJCWVjaG8gIioqKiBNb2RpZnlpbmcgYSB0YWcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5LiIgPiYyCgkJCWV4aXQgMQoJCWZpCgkJOzsKCXJlZnMvaGVhZHMvKixjb21taXQpCgkJIyBicmFuY2gKCQlpZiBbICIkb2xkcmV2IiA9ICIkemVybyIgLWEgIiRkZW55Y3JlYXRlYnJhbmNoIiA9ICJ0cnVlIiBdOyB0aGVuCgkJCWVjaG8gIioqKiBDcmVhdGluZyBhIGJyYW5jaCBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIHJlcG9zaXRvcnkiID4mMgoJCQlleGl0IDEKCQlmaQoJCTs7CglyZWZzL2hlYWRzLyosZGVsZXRlKQoJCSMgZGVsZXRlIGJyYW5jaAoJCWlmIFsgIiRhbGxvd2RlbGV0ZWJyYW5jaCIgIT0gInRydWUiIF07IHRoZW4KCQkJZWNobyAiKioqIERlbGV0aW5nIGEgYnJhbmNoIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgcmVwb3NpdG9yeSIgPiYyCgkJCWV4aXQgMQoJCWZpCgkJOzsKCXJlZnMvcmVtb3Rlcy8qLGNvbW1pdCkKCQkjIHRyYWNraW5nIGJyYW5jaAoJCTs7CglyZWZzL3JlbW90ZXMvKixkZWxldGUpCgkJIyBkZWxldGUgdHJhY2tpbmcgYnJhbmNoCgkJaWYgWyAiJGFsbG93ZGVsZXRlYnJhbmNoIiAhPSAidHJ1ZSIgXTsgdGhlbgoJCQllY2hvICIqKiogRGVsZXRpbmcgYSB0cmFja2luZyBicmFuY2ggaXMgbm90IGFsbG93ZWQgaW4gdGhpcyByZXBvc2l0b3J5IiA+JjIKCQkJZXhpdCAxCgkJZmkKCQk7OwoJKikKCQkjIEFueXRoaW5nIGVsc2UgKGlzIHRoZXJlIGFueXRoaW5nIGVsc2U/KQoJCWVjaG8gIioqKiBVcGRhdGUgaG9vazogdW5rbm93biB0eXBlIG9mIHVwZGF0ZSB0byByZWYgJHJlZm5hbWUgb2YgdHlwZSAkbmV3cmV2X3R5cGUiID4mMgoJCWV4aXQgMQoJCTs7CmVzYWMKCiMgLS0tIEZpbmlzaGVkCmV4aXQgMAo=]]></data>
	</file>
	<file>
	  <filename>/.git/index</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/info/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/info/exclude</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBnaXQgbHMtZmlsZXMgLS1vdGhlcnMgLS1leGNsdWRlLWZyb209LmdpdC9pbmZvL2V4Y2x1ZGUKIyBMaW5lcyB0aGF0IHN0YXJ0IHdpdGggJyMnIGFyZSBjb21tZW50cy4KIyBGb3IgYSBwcm9qZWN0IG1vc3RseSBpbiBDLCB0aGUgZm9sbG93aW5nIHdvdWxkIGJlIGEgZ29vZCBzZXQgb2YKIyBleGNsdWRlIHBhdHRlcm5zICh1bmNvbW1lbnQgdGhlbSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlbSk6CiMgKi5bb2FdCiMgKn4KLkRTX1N0b3JlCg==]]></data>
	</file>
	<file>
	  <filename>/.git/logs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/logs/HEAD</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA0ZjZiOTA5MzRlZjE2MWI2ZDRkMGQ0ZTFlZWJlMmM5ZWEzZjgxNzVhIEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4gMTM2MjM5OTYyMyArMDEwMAljbG9uZTogZnJvbSBnaXRAZ2l0aHViLmNvbTp0b3RvcGhlL2Ntc21zLW1jbWVkaWFzLmdpdAo0ZjZiOTA5MzRlZjE2MWI2ZDRkMGQ0ZTFlZWJlMmM5ZWEzZjgxNzVhIDY4ZDQ0MDdlNmQ1NGE0ZDAyYjk3NWE1ZGFhZWFjNTZlMGI2MmI2NTYgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxjeWJlcnRvdG9waGVAZ21haWwuY29tPiAxMzYyMzk5NjkyICswMTAwCWNvbW1pdDogRmlyc3QgdmVyc2lvbgo2OGQ0NDA3ZTZkNTRhNGQwMmI5NzVhNWRhYWVhYzU2ZTBiNjJiNjU2IDhmMWFhYjlkZGUzOGYwMDUzNTQxODJmZDExOTk1MTI1NTE2ZGEzM2QgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxjeWJlcnRvdG9waGVAZ21haWwuY29tPiAxMzYyOTk1Njg5ICswMTAwCWNvbW1pdDogUmVhZCBtZQo4ZjFhYWI5ZGRlMzhmMDA1MzU0MTgyZmQxMTk5NTEyNTUxNmRhMzNkIDJmZDE2NDNjYTQ3MTNjYTM3YjJmYjUzMGRjZDEwMWVhZWFmOGY0NzAgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxjeWJlcnRvdG9waGVAZ21haWwuY29tPiAxMzYyOTk1NzQxICswMTAwCWNvbW1pdDogUmVhZCBtZQoyZmQxNjQzY2E0NzEzY2EzN2IyZmI1MzBkY2QxMDFlYWVhZjhmNDcwIDI5NDFjNjViMzVmMzkzZjRiNDY3ZDhjM2IwZjBjNzc5ODhmMzE1OTEgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxqY2NAY3V2ZWxpZXIuYmU+IDEzNjYwMzg3MjEgKzAyMDAJY29tbWl0OiBNaWdyYXRpb24gc2NyaXB0IGZyb20gTW9kdWxlWHRlbmRlciB0byBNQ01lZGlhcyBmb3IgZmlsZXMgYW5kIGltYWdlcwoyOTQxYzY1YjM1ZjM5M2Y0YjQ2N2Q4YzNiMGYwYzc3OTg4ZjMxNTkxIGQ4OWRhYWEwMjk4YjA1ODVmOTJhZDkyNjI2YTUyYjVjMGU2NDFlOTAgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxqY2NAY3V2ZWxpZXIuYmU+IDEzNzEwNDQwODAgKzAyMDAJY29tbWl0OiBObyBwcmVmZXJlbmNlcyBieSBkZWZhdWx0Cg==]]></data>
	</file>
	<file>
	  <filename>/.git/logs/refs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/logs/refs/heads/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/logs/refs/heads/master</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA0ZjZiOTA5MzRlZjE2MWI2ZDRkMGQ0ZTFlZWJlMmM5ZWEzZjgxNzVhIEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4gMTM2MjM5OTYyMyArMDEwMAljbG9uZTogZnJvbSBnaXRAZ2l0aHViLmNvbTp0b3RvcGhlL2Ntc21zLW1jbWVkaWFzLmdpdAo0ZjZiOTA5MzRlZjE2MWI2ZDRkMGQ0ZTFlZWJlMmM5ZWEzZjgxNzVhIDY4ZDQ0MDdlNmQ1NGE0ZDAyYjk3NWE1ZGFhZWFjNTZlMGI2MmI2NTYgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxjeWJlcnRvdG9waGVAZ21haWwuY29tPiAxMzYyMzk5NjkyICswMTAwCWNvbW1pdDogRmlyc3QgdmVyc2lvbgo2OGQ0NDA3ZTZkNTRhNGQwMmI5NzVhNWRhYWVhYzU2ZTBiNjJiNjU2IDhmMWFhYjlkZGUzOGYwMDUzNTQxODJmZDExOTk1MTI1NTE2ZGEzM2QgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxjeWJlcnRvdG9waGVAZ21haWwuY29tPiAxMzYyOTk1Njg5ICswMTAwCWNvbW1pdDogUmVhZCBtZQo4ZjFhYWI5ZGRlMzhmMDA1MzU0MTgyZmQxMTk5NTEyNTUxNmRhMzNkIDJmZDE2NDNjYTQ3MTNjYTM3YjJmYjUzMGRjZDEwMWVhZWFmOGY0NzAgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxjeWJlcnRvdG9waGVAZ21haWwuY29tPiAxMzYyOTk1NzQxICswMTAwCWNvbW1pdDogUmVhZCBtZQoyZmQxNjQzY2E0NzEzY2EzN2IyZmI1MzBkY2QxMDFlYWVhZjhmNDcwIDI5NDFjNjViMzVmMzkzZjRiNDY3ZDhjM2IwZjBjNzc5ODhmMzE1OTEgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxqY2NAY3V2ZWxpZXIuYmU+IDEzNjYwMzg3MjEgKzAyMDAJY29tbWl0OiBNaWdyYXRpb24gc2NyaXB0IGZyb20gTW9kdWxlWHRlbmRlciB0byBNQ01lZGlhcyBmb3IgZmlsZXMgYW5kIGltYWdlcwoyOTQxYzY1YjM1ZjM5M2Y0YjQ2N2Q4YzNiMGYwYzc3OTg4ZjMxNTkxIGQ4OWRhYWEwMjk4YjA1ODVmOTJhZDkyNjI2YTUyYjVjMGU2NDFlOTAgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxqY2NAY3V2ZWxpZXIuYmU+IDEzNzEwNDQwODAgKzAyMDAJY29tbWl0OiBObyBwcmVmZXJlbmNlcyBieSBkZWZhdWx0Cg==]]></data>
	</file>
	<file>
	  <filename>/.git/logs/refs/remotes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/logs/refs/remotes/origin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/logs/refs/remotes/origin/HEAD</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCA0ZjZiOTA5MzRlZjE2MWI2ZDRkMGQ0ZTFlZWJlMmM5ZWEzZjgxNzVhIEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4gMTM2MjM5OTYyMyArMDEwMAljbG9uZTogZnJvbSBnaXRAZ2l0aHViLmNvbTp0b3RvcGhlL2Ntc21zLW1jbWVkaWFzLmdpdAo=]]></data>
	</file>
	<file>
	  <filename>/.git/logs/refs/remotes/origin/master</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[NGY2YjkwOTM0ZWYxNjFiNmQ0ZDBkNGUxZWViZTJjOWVhM2Y4MTc1YSA2OGQ0NDA3ZTZkNTRhNGQwMmI5NzVhNWRhYWVhYzU2ZTBiNjJiNjU2IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4gMTM2MjM5OTcwNiArMDEwMAl1cGRhdGUgYnkgcHVzaAo2OGQ0NDA3ZTZkNTRhNGQwMmI5NzVhNWRhYWVhYzU2ZTBiNjJiNjU2IDhmMWFhYjlkZGUzOGYwMDUzNTQxODJmZDExOTk1MTI1NTE2ZGEzM2QgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxjeWJlcnRvdG9waGVAZ21haWwuY29tPiAxMzYyOTk1Njk3ICswMTAwCXVwZGF0ZSBieSBwdXNoCjhmMWFhYjlkZGUzOGYwMDUzNTQxODJmZDExOTk1MTI1NTE2ZGEzM2QgMmZkMTY0M2NhNDcxM2NhMzdiMmZiNTMwZGNkMTAxZWFlYWY4ZjQ3MCBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgPGN5YmVydG90b3BoZUBnbWFpbC5jb20+IDEzNjI5OTU3NDUgKzAxMDAJdXBkYXRlIGJ5IHB1c2gKMmZkMTY0M2NhNDcxM2NhMzdiMmZiNTMwZGNkMTAxZWFlYWY4ZjQ3MCAyOTQxYzY1YjM1ZjM5M2Y0YjQ2N2Q4YzNiMGYwYzc3OTg4ZjMxNTkxIEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8amNjQGN1dmVsaWVyLmJlPiAxMzY2MDM4NzMwICswMjAwCXVwZGF0ZSBieSBwdXNoCjI5NDFjNjViMzVmMzkzZjRiNDY3ZDhjM2IwZjBjNzc5ODhmMzE1OTEgZDg5ZGFhYTAyOThiMDU4NWY5MmFkOTI2MjZhNTJiNWMwZTY0MWU5MCBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgPGpjY0BjdXZlbGllci5iZT4gMTM3MTA0NDA4NyArMDIwMAl1cGRhdGUgYnkgcHVzaAo=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/0b/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/0b/fecd50ee9f5bc5828f0c0745aa3e0effcbe250</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBywE0/mJsb2IgNDUwAIlQTkcNChoKAAAADUlIRFIAAAAQAAAAEAgGAAAAH/P/YQAAAARnQU1BAACvyDcFiukAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAABVElEQVQ4y62TP0gCcRiGXVsLg5ZwqZZABJtc5GiIhhRacjCMBiuShqCtpaYQypDA4Nyy1EiCbEioSIvuvOAqJDrU4jIswhrsxFOSt7zhICr7QQ3v9j3PB98fDQDNX0JceB/TN6XDlqek11pjPAO49Otvb9Z62ogFQtCK68AEyiILOcchuUIhPmeIkHaHlNqALJ6gkjtTUk7vg/VYakSw/JyAfBdENjIJiQ8oqQs472CZCH6TdlASxvDKT+Hcb0N2cxrssgUNh/gJzjggXfWi+rKIfNQOYcmEhlsghb8VHHq6iOEvgr2FThTzB8SwKvCN6nR1WOS2wYScxLAq8LraURQZVB8usDtrRGLVgMyxCzzdj9N5I3495bqg8nFdhfAIHn1mxJ1ahB2tiM50g+gXbFQzUrQdJX4dBT6EI3cfEawKhswtGKa0oMc7FDDmNm39+zf+lHdVXPcmHB+dAgAAAABJRU5ErkJggv1nwKs=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/0c/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/0c/4dab44e01e0671f75101966d9fa58f3a885e43</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUrA0M2Nw93SzsEwUYBBg+M4AAgIczwUEBCQkgEhCQlFCkeOcosR7RSAIuqeY/VzT8LkhEPzXtFQ8ZgkETtecgt47rb3nVfzeq2evV89zr7Xvg4q/RwFB8r2o7L1Ra78nJ5/LLt5bnHysuPhcdcux6jlrW6Y8b9l7rWfO3ilTjk2Zc27K2r1T1p5bunXr2r339h47d2zrsWvX7oHhtXv37r1//vz9++f/R8FoCNA+BBR/sjAyMPAy6IBzAjBPMHAsZpBmcGhgaDjYzC6tIWLx+GBPu0A6w4QdBQpNHQLqQSkvPrCycouaHJDICFh4VEJIreKHAtMhHhYmhhk5HUnM3ZKKViwRBxMWHxUUTJvD8FHJkZPJMN0uwHDh0cMiXEFfpmhOWNDDze3RMiHhgGvjEpn0EycKGJjY2dWWzVLpEFTyWcXxWO6LJbPz3d1l8U1XK8yV2LbyvE0SqPm+1rOZRZBH4IBF2skGBgZrANzb9xQ=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/00/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/00/835f5065b354c5ae8de118e9cef191488ffc07</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0smBw93SzsEwUYBBgWMTA8P///3ncfAwMDFd27Vickw5kQIDiTxYwQwdEgtQyMLtyeN1ZJzBBonPBZL2CxGtOGiwpmbMOc7AynNZKebXti8zqD7vYiryv7Zv9Ol37pN+J2e7CnrrsFzREHtwxEA3tLOF+6+HyoICJwRoAeF4sPw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/00/f85f88f95c78bbcc22917016f4c873cd6ba53f</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/03/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/03/0a5987c60c5c1f45380626b82825fa85f618cf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA2ZzA0MDAzMVFITMnNzNNLLi5mkJtqbKj+9qWhc+mvz3mzXutdFLCcCQBHjBDI]]></data>
	</file>
	<file>
	  <filename>/.git/objects/06/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/06/21a45ccc8d909cda7f05e114d2d69c9c3ed36c</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0tmBw93SzsEzkYuBm2MzA8P///6qqqgsXLnR3d+vr67948eLEiRNXr151cnLKzMw8dOhQfHz8mzdvbt68OW3atCdPnij+ZGEAAR0QATKDgcVcwMO8aYpyNq9YdW+CxiklgYxZXA4BLO4JLEyvDxnp3v14Ztv6eXwTNFT4OJ0fLXewmOvskKulwaDEYA0AzrA5eA==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/07/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/07/c5c82fdbf84709c1bf1afcbe5f45402451d9aa</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEV03GIFUUcwPF9dcajw+OBl2km+UCIZ6f1ouAW/7meceErRdc8Y4W4bsmCPXzFWgrLXdkth9UGWdNlsMFZDHWXkxoO3SUTegdDUg0e2XAlDXr9MaDQEJJTSP2a9+XDj98/888wMzTcGlpXf6j+sPfE1v5e/7mKV/Fsn5d6HnLKXhaW0apyXq3kzVoe1FBYS6IgjqIkSYIgrQaZH2bNZlYN82qIamFeczNCtRjVI1SPkR/lj8YoCLKBfUeGWvnBNEuzbGz8zWpU1Jy4qEeFH6PHXkLhPjSQuoOT945c8NNiywjxxsxdE38+/sHvYbEURSiKiihGzx+aiOMifuWTOJscPfJRcpDEY6fTdOqdiS9Gx2lW0Nc//ObtiR8AoMC0IDTDLMcMOYQVhGWEI8xRewpEBKIixDLB0semgXVAdIhNjFWEdYx1RK/HRCfEpESn1KTMZMwgIhGVFQrd56FGwJ+BJoNgFhoctgsIZyFmNmIQCrdAwmzCHUgEpNSmzObU5MwUGN5lNxCziN/KBCQScmUTBcjRNtWAg4aOajSt89xX2F867Wvma+6rokGDpiZNQ5osCEgWM5RhjLXwjSN9o3zb1rDat7phjQ+mAdYD64NtAJQBfIAGJu5yeEE5ppy0p8BMECaow0VBZEEddfzc4mfnr0xxQ7miwtGsnWCcMy54O8GF5FIJl1TSpbRSquAWYyAECAUiDKUwy4BzoMIQYQsBTBoiLZWWSYslEAnUUYYrQ5VlynJlqQKmgCsoNBANTENhgBhgBrgGboEDCGGFAKGMUFZoBwSAVEZqx0oN0oAEUNoq44AC0MZqA9pabcG0s8Y6YNuBdU8HoPpPR8nz+rwez9X+E155wTtc7pjLFx/Yc+Lp+ta5aHL+tcq/f13/unVf14auZf/duP/o0rdp73czq/5ufb+mt7Jh9MSek8+cWnZb67fp3Z35TG3ltQuXf9lfWtfft7o6jZc6pj/+49fje899/v5Ppbd27Dy1Y/uzwYEnVy9fvHP3hp9fbS4cjq6dWXFp1909T3V2blqz68vb7zj63uTA8N7hztGRxctX5+95+cGeMz+OLz/JN+6/ku2sf9p9dW5hsKu42ZrbPLiif/Dsyo1fbTmwvrHt2MX50gsvXlzf2X3rUPLIpam1m45tO3vzjbWlkrf5fyasay0=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/1a/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/1a/5e0c246d670b8788aa3fc04b2117276419dd56</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/1a/dbfe3c9c06df0263fa9a0eb376b0560c5fbab9</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGVUUtLAzEQ9ry/YoSFzUJfih6qtVLaqodSEEG8Ldlktg0kmzXJ9oH4353YVr16CENm5nvMTKltCVfDy7PRfbNukkRVwM6F8cazPAfcqXCb9PsQXypLuIM0rJXvjh8xzEqWfxdTqUSg0hK3Mx74jH7K1tztGUGoJfFbFcSaBddiDh8JgOAeYYPOU18hrGm4Q5ZaLY+5DmSD3jCjMMryGwIARAP+XUcHUa47nkg5tbo19cvzgpHjQpZF47BSO5ZDDzJjZauxMKLiIli3Lw4JH1krpQOpw1tG9k7sB9r5DkUbkEgnznEagUSPTcfRSXi+wTo88VpqdCybOltH1hgvro2Kn4prj//APdnW6f0f4GeSnPRaqQIbdE6rX2F4cApJfL/kBln+U1nwesWytlk5LlES2e+xXg/LpqOSqS8+apsE]]></data>
	</file>
	<file>
	  <filename>/.git/objects/1b/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/1b/7b42543323ec4c5f9f8c6b0d54817d9680dc58</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBywE0/mJsb2IgNDUwAEdJRjg5YTAAMACzCwD////awsKjAACvenoAAACQV1fHo6PUuLjm1tajZmbgzMwAAAAAAAAAAAAAAAAAAAAh+QQBAAALACwAAAAAMAAwAAAE/3DJSau9OOvNu19FKI5kaRIfVQBs677wWwxoCsZ4zhYGba+6oKug6NU8QKFwVfQhlUpg87hJQnPJacd6jVm11a7LQC6bQlSBes1uu9ssw6EsDwQM9nxa8Fqz1H98Ln4AcmRzAwcBBy4Be4GQAICSgpOThgYJBwcDi42PlJGWlaRxCAYICQgDCJ4tjhSTLYSDgrOXpwMJu6eMr6BuoqRscWQIqwk9viywE6PEodHBhT2qqoefscOEo4HQeJkJrANy2c5v6OmCeAPj5OW/YWJxefV35hlJnfsB/P7FdOjgw8BlXpBm+QxeQUiwhb9+EB9KjDjwQkGFOBhaxKhEowV9EW9DThxZ8SNHIR4rXDxZUqVDkTBHUoynYSVLZlQ23syY0yQLmUBFtlSxk6e8oi9SEv0ZsylJmgmRJu3pUurQCTaFPMV51CoApVi9Qm0o9ivVpWLBSsjKUi0Ie3Djyp17dgKBu3jz6t3Lt29dG4ArRAAAO0X2xXQ=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/1d/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/1d/39039f717678fb156482cd71193cbf123279dc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/1e/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/1e/95333127ede9314375faf36e9aeb2ed1103999</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFljk0KwjAQhV3nFNlVC21EXKVL1z3EpJmmg2kSkqkUxLtb6kZx9+D9fM/4aOTlfD20aInBeNRTfGAWT6FqKRNYS8E1HkfWWy6tXa2ElAaGu8txCbahGRxquWR/rNQc7eKxqP7Wb3tQ1O4WlTAM5NsUXHXqfvsZEwLrEJuP6nbwFwCYYZhmDKxHWtH+PUixEFMMOpObuBOvN3TgSH0=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/2a/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/2a/4ff18df914afc359ad0453576e8c9c8d060c21</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVbA0N2UwNDAwMzFR8HX2TU3JTCzWy81PKc1J1SvIKGA4eln6As9eVZnqhQ3fBJkbGDPnrBeCKg9ydXTxddXLTWEocF3y9kDIAoMkFrvbV7N3nLHzWccOVZSYXJKZn6eXmJKbmeeTWVwCNtRc/4386/m/XCI8DjFOtU3NNprl24hFfUBmcklpUSpcm8nSqk0Ptz1+dz/tqkTzLuMpPza6KKBpK8gEW/BuimLBP65OKz//jGVJH/Qzpl4SXoOqMjm/LLUIrHbS7c9ZhotPymyUDzz5fWuuTf+2BGFUtSmpaYmlORCn31pi+1pwlla4iHtY94OLEndOhZ8pwKoa7GOwBQuvW6S4hi55aiYU08RWW1bYbHxLG11LTmoJJLzvB1jYCNutqL0iXTfl79xWwf9WuU9QFQOjqCQkswQaP1dWJk2cstPynlbasQ96V2Knc1V4hKCqL84vgjg99/PFgwUJC6cEbEhk+dHbsf/CjZvMqEpLUnMLchJLUuNTUuEOejxHcftd+e+zjolcTfv6TvCD3UYmtKCE6wK5DOzj2j8K6U93yH+J+89/W2GZ7aOTGyJWoNmUUZqblJeYmQNWXyiibuvPEHdaysL5pG7jV28Hq/jDqOpLC3LyE1PAisuF/UJqF85yVrl4q23C8tMHmP4y2poYAIFCZm5iemoxg9qTgGO3V6312JD9cZXvKuNnkukdWyEKchLz0hlOlR354RWrvjcjLebRlT4xP6dTPEVQ6cwkhoOCVxIiP04Ld8981lWrFSKybN8MHqhTclNLMvJT9DLziksScyAOvykjdVh85k3G17b+jVqVy2rtusw5UVWX5iGr3xof/PrF38JIB/7JMXoq6guY5s/wRFNfkF6UmAJJC1K3/9nMYbvPlPxrFt/msg1hPPG7dkJcCgvyYoYfrYJHEt7u//q+de13vs+qhZ4VbbYAjrOFdw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/2a/e7493c8bd4b73ff06384f66947338c15a6b608</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTAyNmcwMQAChbTMvNTSgpz8xJTUIoZ8s6enulUmvs9OOrw3Qvnkkm9HaucbGhiYmZgoZBWWphZV6hrqmesZ6eVm5ullFTOcV8ooaWzuSDH7fTRv+lZZ0U37JqUClZubmiKUW+gZg5SuyP4+fcX+0m/R7MGPl326OVdnicN6VKWlmUDDLYGGJ5cWl+TnwuwwiS0y2xf7aG/NZBWdmaZhUz/MblZAcZJeVmpKZkliUk4qTIvDrUzPc7uvpOy4zsZ3w34ZC+eEE2YAuDFgAw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/2d/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/2d/5d70c30a4e8f15c5ba423e23c1fc4c2b15442c</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBMAHP/mJsb2IgMjk1AEdJRjg5YRIAEgDEHwDh6PCSrcv99MXM1+RukbmmkUz6+/zkyVWixOKFkZ/z9vn23Wz5yJPQsHJ7nMHj9v7szXXY4evx1Xrq9f/q7/X231327uR3WCXu1X/VlUPEyMtylLvT3+vZmU3///////8h+QQBAAAfACwAAAAAEgASAAAFpOAnjmRpnmSHop2QiYETzHTdYcLyEsPARQCKwuDx3HISTGbTAwqJRtxCIlExncPicQGpWj4bLLQjEVQqVY1oE8waIWZ0J6EGP7WNeJXDWysURQUMDAcVEB0eHBsUa1AegoOHRXwea0VFF4MMiJMbBmsUHhMTFxcZDRaXip92ohMPl7GroAYPtrCxiQSsBAEIvwgcwsM/DqwBGw4OG8zKzsoclR8hADsonI0V]]></data>
	</file>
	<file>
	  <filename>/.git/objects/2d/30ebd71de55a5c5a13f92c352a8b6d0d980054</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAHNkc9r02AAQL+2mXWyQrp1s8p+NNvURic2FUvjnNoq1mZNYb1tJ7ueRgUtuTi81BrLNmMOo5QhIyKs89TgJbulTCnpQUxEpPWUMQ/L8cODfHj6dP4Vvj/g8eAtP3y0HIpFoyCVvhdn8yQgwVEWiLuGaeGCYiKEdAsXV7abFqZLDUG1cwtio+PQVVO3HKGqBeMF/QCbDqYUh63bWg9yKkxa+Gm1mcyLrGzSdYdR4PaebUMMEaZlw4Go2IJMC2kWTqqYW212IWYSRaMHDQcJpYYEMSWbjGILCNda3aLcZFdqTGKJVZxCXdN7SOhhB2H9ANH1v0rMqojehbUOpvcQI9vUqs6UtEK+xtQho8KmBYUezC1IhoOXFiV6UcrJuqR2hZKA/wH+P6jfhAuALJg5Tjt+AryfytnKvPhC9FXWn/PSK97n3njJT1wQh3xEdHPezSkcT/XtjKxz3MXLw5SbD02wxEgme9UdvjM+7p+d5sfGCFrjPMB7ir81NXhlNEb0ZQwwdykQuHl2anpg9GumM+xPHzmRgXOTiQy45j2TvpH6lSLvkpP3vw3+jN8OzASf5D/6Pf1b74Plw/IJ6vpGee3wxwePmCHBg632s37v6diXk48jb4eIsCf8fT+079t0Rc4nK+21z6/jxS7X3nlnvZnzuMDsH2Sn4Bk=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/2d/bc7b105a6b0c6fae0eb13bdb9b4cafeb91be93</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA0MDNjMDQwMDMxUfB19k1NyUws1svNTynNSdUryChgYPgR3/EzpmL3GaWJBWJfThSfzV5qD1Ue5Oro4uuql5vCoFEVZOr8yuzGLqXeMxv+7XfNstq+B6ooMbkkMz9PLzElNzPPJ7O4BGyouf4b+dfzf7lEeBxinGqbmm00y7cRi/qAzOSS0qJUuDaTpVWbHm57/O5+2lWJ5l3GU35sdAG6H+x0mDUFmWAL3k1RLPjH1Wnl55+xLOmDfsbUS8JrUFUm55elFoHVTrr9Octw8UmZjfKBJ79vzbXp35YgjKo2JTUtsTQH4vTGTX94oy7VZoYHefqKZdvrslsskMSqGuxjsAV9eUc6FiUxf1UKNKpbc2ZF4M+HK3aga8lJLYGE9/0ACxthuxW1V6Trpvyd2yr43yr3CapiYBSVhGSWQOPnysqkiVN2Wt7TSjv2Qe9K7HSuCo8QVPW5melFiSWpvhFgxyT2V3/Sa1Di3FTl8ia1l++++jVPXVT1xflFEK/mfr54sCBh4ZSADYksP3o79l+4cZMZTWllXjLY1PwHtmv32kWpTGC3YPVelv3VVrZvMarSktTcghygM+JTUuF+fTxHcftd+e+zjolcTfv6TvCD3UYmtFiC6wJ5GmxT7R+F9Kc75L/E/ee/rbDM9tHJDREr0GzKKM1NykvMzAGr789vMGJe7X6WRXCd9V/2rKL16y6eRFVfWpCTn5gCVlwu7BdSu3CWs8rFW20Tlp8+wPSX0dbEAAgUMnMT01OLGdSeBBy7vWqtx4bsj6t8Vxk/k0zv2ApRkJOYl86gpit4cqH7XvdJ5z0/LthoITb1T24fVDoziaHvrchLq4zay0/vrcpT+bHj277PwtOgTslNLcnIT9HLzCsuScyBOPyj46lpPZ8XvXx2M2T31PJL6a8274Mldqjq0jxk9Vvjg1+/+FsY6cA/OUZPRX0B0/wZnqimlxYAE0IKJJlJ3f5nM4ftPlPyr1l8m8s2hPHE79oJcSksyIsZfrQKHkl4u//r+9a13/k+qxZ6VrTZAgDqQbPu]]></data>
	</file>
	<file>
	  <filename>/.git/objects/2f/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/2f/1f83cfba5f49bcbf916332b099b80cefa17f6d</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/2f/d1643ca4713ca37b2fb530dcd101eaeaf8f470</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGtjkFqAzEMRbv2KbQPLZY9mrGhlEJ2WeYGGkvuDMRxcJ1Ab1+TM2T3efAfL9VS9g6OprfeVCGiJAq0ZI85rm6haQ5WJBKlJGNpZEGxwdy46bVDyMi8RhH1IVtLniYMLgtijISOCGdh78XwvW+1wUn5+n7c2v7b621TON4fetm1wWf6W7X1+sTfP4X3y0eq5QvQz264lgnhYNFaM+hI7uPzApk5KwsUNf87EVIw]]></data>
	</file>
	<file>
	  <filename>/.git/objects/4c/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/4c/80bce1e0fe400bd79f7814c0cf3631666ce325</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0MrdkcPd0s7BMNGAwYPjOxAACyQz///8vLi6eMmXK1q1bz507d+3aNaDIKBgNgWEfAoo/WRgZGJgYdEAZAZQnGDj+M7ByyHhsWHCwmUNYK+bEhoWHGQWUveZ4bFRiaGdl/3P7xMbFx/vl2AV2dAQucJugEfxPOiAhxZNRPfTUE4sHDt6T+NNfxfw8v+z0HOvUeV86ixPPLNBIFsqtCFFjZPZf7HS3ouTlAYaIzVl3T5Wmu3ZY7OySlb7ScHNz2mE2h1/82tH9bAwiAi/EMu9ul358TvRBWbb7/lxmEQmfHRseHv7/5VLsbdMN13pLuSum3Jlo5H6y66dRmU1Z7oPeaY7+cnN36j0+J6Pcv84n6t2jK3Pkl4vV7Ch7e2Sd6f/et5XbMq4d0H98r/q7cdbVg/Xc+nd/G0Y+OTT5/+E5t7fcPxaRm61v8+dr8c0LU7vvzL8X+73w+TznydP95v54+b728vq+fXuq8ifEbs6/H7dvx7kPry+qSxXnMK641/i3dNmCmnzD7Q8i2pYekXWfqVgi1HSpNuQAo9nRkIeO4ufM77VIl3kk5on1aTwqkRFbENipN29HeNflt+43UnX3zVjcw9V64l6KrtC25DiNphVK1daHXiROZPupkdCwQNUypdLkVkXyFDWtk8lOfnKdydOC624smX4q0nPmDMmJnE/DRQIzU3rDNrWqOfo+XHppDvPVTHWvilkt1+Y3sGm9mO8jxnJgYYfaqheLesyiMhzT3LJmMzAyMlgDAKyf5Ak=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/4e/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/4e/51d77b830fc4d423e2ca35681e3e279f69154c</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0Mmdw93SzsEwUYBBgWMTA8P//f2dnZwYGhuPHj0dGRgIZEKD4kwXM0AGRILUMzC4cXnfWCUyQ6FwwWa8g8ZqTBktK5qzDHKwMp7VSvLbp+bJvsp5envd6r2CBhPC8vh19LsKelQzNK0y4QutmnDtaIr21a98DFgZrAMEcKZo=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/5b/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/5b/9cb60e4126ea0b6731d3fc06defdbf4cbba50a</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/6d/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/6d/f3d1c17060a19450b06104f88d88bfd0d8d903</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF1kU9LAzEQxT37KUZYullkKUW8rLaiVW9C7yIlzU7dsbvJkklLF+l3N5umfw41pxB+8968l0VtFnB/N7p6fGqr9hqgQlmiFenUaIfa5a5rsQCHWzdsa0k6zR48RUsQN6rhhkWWAW7JHV8TVxHnk2mFavWsFHJAfv0QgEW3thoi8krsJbs3a42dyW8UQXrnyeAgiBmdSFppZcOfaYMlyTmV6VcGgwEQz6W1srsIZF5hb7k0FqWqLlEgGZLWMDkyGsYTSA4W/fhBAGA4BFSVObF9Vn+SJdUIY/iYvvtLUfh0lnCDL91sJU5a53Q+8ZFm0dLvFG+3oxD9oOkpuYl1AOx8H8EwLPHDRs9RK1Oi2OdPeR1qTvsIzq4xi2L93vFnQqWx2f9ksP+Hc5E/FZSihg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/6f/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/6f/36e5ca8b2491ef6b62c3bd5823c9a4f6c47d9f</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTCyMGcwNDAwMzFRSMvMSy0tyMlPTEkt0k3LrNBLLi5mSF+/5F7KvE4TLW3PHwHOZXZvlr/ahUU9WK3aVO//PdaS26tkjok3OcXKbA7l2g9Vm1VYmlpUqVuQU5qemaeXVcwgFcejkpvO3d6xyv6At6K4eork3TAUtXoozjHWMwDpkrVknl9YVvFbNKXpbKGkzX4ho8o7BHTlQuxL3nQpoHA+u0jVj4quwq05rJrmHU5QnSAfZ+al66VnpjHk7ypPmHeUf9Zmi5W8qX1iu1l3XGIDAG/lauU=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/6f/ba77609ec50f9ab338a90d658e16bb05b8d206</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGt1G9MG3UcBvBf/3AtbaGlpbSlLeXaUiAhc/CCYHSm3F3ZsXSESAcFK25QpyHNRFc3XQipWBABFbcGl6XZkD/bYtA40+lYiGkY020hi8xmmYYsTokmk6jRhsSlUZ8bEBeNb9zu1SWX3N3v8zzfb0fouY7iyuqaGrK9vq7m4T1qoibThHCPPTp1cqrnUE/qeirQFlj9adXb4B15cyS4N7gwv5C5k+HquJVvVzJr6fixeGhfaPHK4sjQSLA9kF5LB5p9ob1Bbx23enuVY7i583PRvujyzeUAnv6a9jV4Y4djC58tZP7IrHy/Ej8eT11dDHWFvDu85MFd9J/KBo+via1t9FRt2SoR4c3079JsitCkQviKcExCHUyOdvMVCvOR4AVe5a9QNj2T3rNVTZITkyK/++KwLPLVkP3pH3+RfBFUZdFPsE5STQ8y/uTRNaaA8lqIjs03dr1MW3u5PJLH6nNziZhTuYw2Ay1vNUo8xUqiHW9Vv+ZRFcppvTIR9jI66+z7n3hrN/7F9fe/9K+Dh18IC+DNPoDDGaRggXPio0RPb88G+81lcKWupeJjMd/jvpmTUxu2a2mkAF6wRweikEd8y18vIz6wAxzsCBHmiY8TSAT+yAj+M+/N3D88dch9pPGl1/MHLq2cukVXHr7kPS0iz44z8gnFjUjZO0FK4o9UKwd2f+ceuDIvu5jeQm+LzJY7KkIavtTu15MCVmp2MD0uW2kOLyMyl0o9XEYsfLZcW6AjojKz2VpfrHDYA2an3+U077JIzrSq28+xKqeofpNT8w/OianwgTCchP7eFvoLANQTWigvPGAASGD7mn3AgAqMARbsCK73FDYoOMDgBE44bQxEuzAQsbEYkhGKPxAN7wshCuTzoFpMHXQPdteoIoO8vSSWX8BI3+icrHfKykjyw6UDo1lKd8c2Ui2TLlWYxqTHvxzkb/j7JXSWJ2U8ZiNdTK7LqCnSM3pFIafUm5wFQxoDeYqztOZo9AazWcdb2sy2J8159cbTCqLQ6kp3OhRZr+5kDec1m5bGf1uimtdSOCVKKXDu8Apad6caEsLYtwXgJCiu167ZB2/UETzrcw5joZTI5HoK5NgmYEYsyAGQUEehQYh9cf91vPcN1H73CMa88K26CxO3RsPM0Ug/1h05ofqm8bK3n1KQt5NRRcvP3VWusUTkobrJiMKhmP/BUVrJO9neCGe3SC0lbFGWrk/aouQMRMONEitlLDKYTOY+i/iEyd5mUnt0quxiGzHJ3+UZ1dlz7Kaj6T8cIYjigRKnBSUcIQhH1HLmgxnIopmwBigKCSbsTmhiJQAUmqBEOYU5vjvoAEUhEQBM5z6dE6Ycu/lOBrt58eoilgeI7xX5f/fU/uSG47w4vzzKfy4SE+OLRD689BtfUuVkT0msFDWtPSPu3t1oulzTbxrjIs9PO8fFbq1JJ27ZZbN3khwdqxM15ZjsWguhPSVGZRfjbKJtfYUaWZ2q05rfYjVvzy53+HNf4RlF/OxsLXnkL6GSJQk=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/6f/e03dadbd3e5a24900738054ba66bf53d1d8ea3</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF9VMFq3DAQ7dX7FZNgsE3ipCn0smlc2kBKD4XQNqdQjGKPs2ptaZHktEvYf++MZHsdtlvYgDOaeXrz3oweWv0AF28v3rx69369Wi8AZAPpUdXZzqZZBvhHusvFIpJNGhvstMOyNy1cQexW0ubFJ3S3Bhs0qCpMkyHlUbQtmk1yCo1oLWbZInpeRFH802pFtY1ssXxEV1ZaOVTOzrGzS8qkH9/o84+uqMLDUJRhorjDWgpLSJxQ1ljpGkO2r6YURmAIaS26dCjIC4O2b51lQgNWFGOLHZMguNd8N+H361o4nAWksmjcLnB+Dk/ClHXfrffBA0ijDYpqtXcMRDzw8SRCR3TnSOPkJNRHsRVPWK6FER1zE8aITZo0xmtWJ3BVgDM9nkKidOlkh6VUFRlAvUyHoxz7fLNL7tTL5IWKW12JtvTK0m1frm/IpOXSoDMSn/Dj5vbX0EpeyDoIOEo4wmy9ehGS5eHLu8WCvgRX+Hu4YIKsNE1M5STZSeiDAi/q8oKc/FxPFfO0mVL3CQlfsRbsWPKDemGVBsSBYWDHEzYjlhc0knfe+fqDSzM4oin3euRFGIi6FC6YNro2G7H/cKA9eoY4MCJ7YQssEccCro8FTvstX9MYOWRGIxkymSNM5qBQuz7GqlkLB6tutZXswXTVeggcvui7dC3t3qCT4/8o+Z/N9OtWi/rG6O7OtFMJPwZK0PTSu3I6Ca6NfJSKBnI83h2NkUOcaGvS+e6MecH7bRh5rFYakm8bVa1ooaQV3DbYvqrQWqARgvvkbNrJM5qjcT+XMGi7pBQ4Gz2kL0rK4bOfO6zH0+Hl4NOEVo6FYSL8N+zJM8cCnzslHloEp4FeRkX7wJ9uhUDaLMHftnuE2UWCoV8AYhwPc/zVP9QwvMLQqxobqbA+ppLtX/kFvIM=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/7c/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/7c/99504e10b085b4d083e7473df26e4e1f4ecf18</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/7d/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/7d/fc2067e5b81ff45eff0fdb20a63de2c9b058a8</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAHFVm1r2zAQ3lf7VygQKgeaDAYbo10yujQthWUradnYJ6Nal0bMtoyktA1j/30nybLT1oaNDfbJjnN67u557kU3ubwhr16/ffPi3ftqU8VinQyyQhc6GY0IPAhzjJ9IMiBDsxF6PJtvIPt+kmWgdUKXkov1jlxDUeXMgKZ45uVLsgJtlMgMMZIwXoiSVKyEnLCSk60Gpcm9MBtSgSqE1kKW8Y84UmC2qgxuToVGyN1CKaku2S0kQ8EPybBiihUaX7w1fqvD+sjK24QyFxeHUgDHWI7jyGfwM46Ha6kKMiUl3JP58uoMfyX12XMwn1gByQhxrRdq6nxS4MLQw8YZAjqY8UyD+bA1RpY6YUqxXUL19qawxpRVVb7DZ8bKDHIXRXtoCWYjeUIrqQ19BPdV8FswSeMbEQw8IGCNf8dywZmRSlMynZH6aylNisGanfto1BZGNu3WYYDNJAeKqdknU8C6nSsUTipIGwLWShb2mIYcMgwm+MVotih3E0lagEKRAhfe2v5bU5w7eTwKkSUgLYfL+RL5ZfroaIhuSgMlbxzrnjQ4rNk2N41diqr+v/h8Z9Rko3qB7EAfHY1nQi+sPthNtshtKz23d+Ls25KDAzKo7YS+xGIBbhEihIj6z2NVfnHChMrGmEJvdrjdDxMt3VH0YtvmZxzF0ZBlBpsTm6ZWUehTz/+fgyJmd+6dij7lIgmhDKZTsma5xjLvI6MPcI8cn5fPE0fDXmD7ZCPX2PmuISwFdn6MZ3sqdzcLht5yGbIOMIMpobSO3HoVOl2LHBIuVGknUJqeXXxcpOmITMjpxWoxv/68+pZeLS5PVif4il+b+YDN12sT2mlCJ00GeHRiKjuPsIQwtT+qo/O2js5wIpzZmGmHF1c7Xci9XLWqIDFIl608X3ye70pJt2rsf7aEktAWG6bdcrB7ypdCVFfpVRvsbxc9Tv5n+oaubOV0AWIYmGHbGs/O9RVgi3McWwxXdgEHC6OesZhNLVBIaAWFvIO/aT1HaxQBNk6Lbt+CixPOn+H70LqY6RkcVr4u8fsIabWv6fT8ovyRI/lRX165/RrmYGDoya1hhQtF4aLytwVaO3ZXENwSzR5v1phN8Q7XHbtxq2yvuepKdtX4dETM3WbP/Uh2rfT47vJvo7B3F3/10gVTZjeeMbwz3ZYJFdwmJTjS1mNha9Pa2CdaxZBtZBjml76zmlFOHU2ToK27+/iJcfwL/VlDCA==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/8a/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/8a/69c27842376015e21fe05f3e49c10657b8019d</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAG9Vm1v2zYQ3mf/ikMhhHLh2Fs3YIAbu9iMdS0QA8WS7EsRCLRI2UwkSiMpL8GQ/97jm17y0g77MCBxFOru+Nzdc895V9Y7ePPzjz99d/auOTSTCcDiNX4AbLYX72tVwUfZtAbei5Jrd+4+Lg9CQ15SrQEfGNdiLzkDU8OBSlZyqNrSiAYfCusIOueSKlGj8+vFRBSp8834ndBGpyTc5a76IBjjkkynk3/Q2t8xfO+QAL8zXDIdUQ480ck6AjTtrhQ5FK3MjaglaG7aJk0Em0EiacVncJIUmCH+W9WsLXnmTxM0NELuNayAKkXvU8RiA/qwGJgqLs1y+TTg1+NN37owAOFPYrCKp2sMc+FvTAnjBcXKZUdatpzMYLux6W7qsuQuieUyV5wafiXFX+3g/CNDkDH8M3Hbpqwpy3atMbXMDFYPg5MLbsOGFmHvvBXpAr2Mk7JKyKzE7mXUAbPh3OE5ntkIwVdh0ZUEB8nje3Bv3EejxBGTAW2oGXYqb82VKtOkVmIv5Lj49s40aVWJbcMSqPsptonfYX6Mp+Qd4ohusRwxi2ZoeEKr5q019jGibYK9pdWg8/FFCIJ84TQ/pEkDVENypB5czw0AD/B2lhxHyFYET2hXWoBw1efk9hqBJcd4k69PR5JQQE9EsqOaE1itwVeAeLj+xD+HG4ZVfjQHe27cuKShsJbaHSWFm/ZVx/HeOOJL8o6NmWAWuqcxWv5pWZt2OcbC++lCy7zSWWtEqZdLtM78eUq2my1nguqeeMmBU8aVDe6NTteWvx/caX9B4gk7Nvydm60b56s/zj9Rc0inMAeyiKZzVDkSc4kIkU54l+ZlgQMWyBcv3riBOxfyNg2ZooKQMCozQuxP6M6oMr4po6MpDglyzqiWO1COhLptGsW1rluDQrv6wR8e6r8Nr5oSx2P1fV+YCDiC0xVV5v50jUKMCpwSrKOdbG1Upjh65zgTgerkxNI9Og6zsvlYx0thShSdYUr/HfFjFiwWgMyRhdg/JYI/7/sas7SjNOTAb3ccu8N/cYoTu4FM6uTzqSxhAn3XgpyTUVOe61MHPrEQAjueqSm8XFQ/FG7ZdPPxdZyWGvb3fyNTP/WRFY/pNC4UlnJ00FfpJX9c0U0tpKWkFazPXr+uv+0Yym79wuO3fYIWzuBG447jMrcbwV8bXl0PduRLkP1g/+oW5aXfk73AdQ30VqN9+i9iF61d7ILhtqulze0pMwbvMaCT5qjNcSpu7HrqBvmTqnNUj8sgFimx9ZrfDMS0b/PBVFbnorrOfXGtPIbYcMbEEQRbvSqiXmZkPu76nLxany3Qbt056VyJxqzR8kbPydki/B/eP1ZbVIIjVRlrK/w25ke/a25wid8a/DZCnBa5F2272B4mD18AGBE/hQ==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/8c/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/8c/291bc0f7818338f165f92e21e1c6bf5b0397b1</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBEgHt/mJsb2IgMjY1AEdJRjg5YTAAMACiBgD///+AgIAAAP8AAAAAAIDAwMAAAAAAAAAh+QQBAAAGACwAAAAAMAAwAAADzmi63P4wykmrvTjrzbv/YCiOWWCeaGqSSwC8cCwHA2u4cg6bNYnruUCB5gPqXMNe6GfcvZIiZhNAG1ity6mxoPT8VOAYN6vVjUFfcErc7UjLhHi8rUmrTy+CYE+gl8oyenx+GHZ3OIICfR9vWomLXjuHJnl7ioQXjVOPmBaGd5WDjIAxnKMvk5QAppGkoZenVKmvkG6utJ0Vmk2stptzuLFGggPBrbx8xm4FzM3OzI/RuRRX1dZWiZZzNhEDcnLTLNfc5OXm5+jp6uvs7QsJADuyAHn3]]></data>
	</file>
	<file>
	  <filename>/.git/objects/8e/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/8e/2c6f4216f994fe8d4358943c4bf065af109fa4</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/8e/6ec488a26203f52251327eaccca851f9e1a8b8</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGlVmtr40YU7VfnV8waw0jgB6G00KytZcmmdCGGQAxdCIsYS2N7GkkjZkZJTMl/75mH5EfjppuAYzm673vPfSwLuSQ/n//620/TT/WmPiNErEj0ISt1qaM4JvxJmI/t24HZCD1KLjc8u/+cZVzriM5lLlZbsuBlXTDDNYXQ3xAgRHHTqIoEoS9Cg2F7pZRUN2zNo9iqfT7DF882smW7NUyZBVv+wVnOFVywXAcMfEeOqOnMDlsN16xag8CW6Y4YD1es0PwVZbI2QlaavqCqJcXDSGjNTTSomWKlvqOeksIe/R7Hn4xq+MXLxq6q/Diw49hC8JeyMrwyPnjw4DOZkMXV/Ob68+Lq9oTUfjYQKbgGhdBmlwYy63KE913FvJlBly2wMaXY1r9fScVZtomOdTENZSH7vuK9gZKPnTDM93rUCFPwQlT3lMyS1volNBp+jbfRQORD0lUx5bkwNv0eOpbW2RgGpzrmoLF1AWog6TLfPWhWMK1nfQFHrRN9Gg+9XzkvuPkBxzz/oWuhR0bJmpv0gSnBlgWPKMtLUZkNLzmNR0mA/dfSQp6KDPia6K2GQxOvc7wWq2PEBWuxj8nGRb2MlUcMr6Yi9FzhWoEpTrayIboJPx5ZZYiRxJshtqlJW0q0b0iRrcV7Kvfe9Fj7XXJCld+YkNgW3bdEz463kB6hv/AVa4quFUBo4UQ+zGYeTU7YTrSeA/gdzb0Q/b7rJ5/oQOhySdA7u9L+lzU3mHrP1gjHnLLPUxYptRMRvPa781ffOW/QgJZqFYUYdYl5uh0l6AOxrvZHxF5vaWf/hATL890ISR0iugH5Y53slocfz1DapQmQ+//2XQe8yf578VjxR7n8i2c7UJ6M5wRMbZiozP42u1HSrtFFgF2YHuMWhnps6oK67OxL+U1i5/ORunZ7RmEtYRtbPFg4AIslAIsoyOX89nf8h919OUeXMbfx3CAOCHYjbH/YHWgZJViAf4ocY6+149Yfot6IPOcVJP0CoQ+saLgb1Ocu+J5z40BBUxeS5TqtmdnYQWf4k10BQUGt+IorXmVeCz3gDir1tsrSRhWIrjdgtQi/A5wxMVdiDZO2EVIlpbH0KCZjQidlVroEYCRX2YQVhWuufzupeCkNT9fg4Gr7upsv8Itau0TQKSMbRDXr0/GgdX1M+ziX8A7Bc1Wxok9wCiDBs36KivWTW/g3nbAEvYKivzlMZGdib4ITYfLKrrAUXDbEzJ55S/l0uhqH/ObFEENBXo0Q2ehYu0gddMUqChUR+kZideY4TAFpOyEDsEdJ7RvJ3yz2iG1lKulOTi/SCtl7yknbSWn/8PENZttklABxuD69so7kj9+93nuRsne7nWHZRBg7aWNEoS8u7J1QyryxVwLOZjy/4cyDIVT1DAO/13M+0GkuHog224LP+kDtWlQjI+sLcv5L/fSxn0zrBMkKp/jxKVWKtcJxNf+Gqu2dUXTu3xO0gz0tyUrJkhw60TZdODvCKWUPWoCBhFOqxh2zZNk9acRIG1gatVsPLzKpKq5G6BJcWmM6ndTJdIJgEuCt9/wPSHv45w==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/8e/ed14e93a687dd3e5deaa6e24f8b8f6bef31396</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTAxNmQwNDAwMzFRSM5JLC7Wc/YNdssvyvXMKygtccvMSS3WK8goYPilV3l4c78N69S4jDiuh+/2aZ9oScGpzTM3MR2q71uM5u2FlaZ+q+cecj98l9+g03G2PYo+X2eQJWA7nn89zx+8dlV8b/faGmXulefzs3oUsKh1zs/JSU0uyczPA+tKCHEyWaX7Xyw+7fRH/sBYIY+ukksougoLQTaEFuTkJ6akFoH1FMtv+5P2V0vMKv378bsFRkU9e0WOoOmBqk8B6QWFB1hf24rbCpFPiub5Hfc7rX7lo5/AmUX1ePRFZECs25IY3iP4dZfS0yuaO69GSPuVbWAKNDEAAoXk4mIGZq7I9mM8MfKuFmxqOzRUf7V+kzgPkc0qZlDOuXr6YGN588OePq5mJfWWRoUOewCa5qim]]></data>
	</file>
	<file>
	  <filename>/.git/objects/8f/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/8f/1aab9dde38f005354182fd11995125516da33d</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGtjkEKwjAQAD3nFXsXJU2TTQsiQm8e/cFusrWFxkhMBX9v8Q1eB2aYkFOaKxhnd7WIQGjs2EVNLrYUmTtjWsd+9FqEI2HwoyE2ZNWTijwqYBet1V4wOks2asO9d5tNJBQcimY0jA4VrXXKBa5Cj8MwlflV83MSGNa3LLMUOIUPS6n5hy/3RPNyDDmdoWnR9L3Droe9brRWG92W6+b8IaZuQhGSqC96flPO]]></data>
	</file>
	<file>
	  <filename>/.git/objects/8f/6f803203ab47cd0411ae3bfd076a72afaed1c9</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFdT11LwzAU9XX9FUcotAHdFN82P1AXXGFa6TKGiEjaZmugaUqSiiD776bVvQzufbjnHM45N691jquLy5Pru7ZqA0BuEZ8WyiobEwLxLd3Mo34mE3xx81l2qo3DlhuuLPmnws7UuEHoKmnPb3fCsapTecNlfayU21haK9wBf4+MKKURhYs+CPEpP8Fo5JNYOk+neNE40GdwWqPQje2UbHZjLwUqwUth4mipC+6kbqaIMEbfhsz6vvMko49s+YZ0zV7XDGxBkTzfP1HvPxwPWbpZ0QybhC2Q0T+9t977FbUVQ6E+SRSVHoz7j/fBL4ANV9k=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/9f/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/9f/971b3bbfc6f6837809d7af0ae65d7e84ed1796</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA2tmRw93SzsEwUYeBnuMrA8PXHzw9fvz979/Hxm/e3n7+5/vj58RsPdpy7vvbEldXHLy09emHFoTOLDp5ZdODM4gNnFu4/PXfvqdm7T8zceXTSzmPTdxyZuv1I36YDfRsPdKzb17F2V9faXU3r9jau3Fm/fGv98u11y7ZXLt5StWhT+cKNJfM3Fs9bXzBnXfaMVelTl6dMWpw8aUnSxEXJExfH9S0IbZ/1//9/BtKB4k8WRnYGPQYdkFaQnxjYChymF3joSPXrMTGe5HEQYHx2ceIBmyWuzks+/ZTY4NTYyqhVzPLA+7BxVr/ejcNPg1bd5j/D+DLx1e/fzO4MiiJK6u0d7YoMbtyykpoTJ03mdmXVFtLSmT1nrg6rM4MGl7D0suUrlmn06Enprt+wcZOuVIKPI4M1ADhFksw=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/11/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/11/a436a06d003627a3141f9081519a3bf1a72dea</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAHFV21v2zYQ3tflVxANCsSp6OjFjh3nyzanLgYU24Bh6GdKom0itKhSdF7R/74jKUqipCVtUWD50uZE3j333HPHS8pFipKraP7TxfkJOkdrUT5KttsrFIdREqBPLKcFel8oKkvJKlohVmzFL1tW0GPJBcmpnGbiAFf17Y8so0VFc3Qs4AP68Mc/6MNfH9EdOKooRdx+nqoHNYXjFyfTz5+xc4OeTxD8lKJiiolihSTlRLE7em3s9yxX+xWKwvDt9cmXzk2cHpUSRX09Z1XJyeMKpVxkt72r8/LBWkqS56zYrdCifEChtSn6oDDhbAehIQtI2NpTkt3upICMVuh0uQzhp/4gJCSJUwHhD4AMXFWCsxyd3tzc2COZ4ELCtc1mMwoa78Ud8PRsMvQCrdc20EimeCuyY1VfEkfFoRY2fA5QgPxTfVWj9C7nUpSYSEoC1NKOIWlJcPNtUASSQk5HVRdBiXLl+OJ0q5pfvOroMu6pFpGrl7YcWIGdNQldJZ4wA6k8rFA8wvZmc7W4WtgPY+UZzw9VJXlJDq3CRpKba3lpuIOMDkTuIAVDAV46/FtRKFyxJ12BS230ML3Gri/xboR5w9AggkZXC9iiadl0/MbN7S7rM2P1ADaFxyTTvTYmxc1mES2iXmacVao+bGE3Umh6q24TfRJX6pEDRYUoQEkeAuOIs1d8XTm+tdgbGUVNQ4+S1DYU7jRi+Bs0pwdhyzj1mqIqWVFQ6dugxp4hI0VGuWeSVMlHz7Il4DvHWry+nRWs2tPcM+aUU+VKUIvBzGLQVjzQlkYNrHmZ1MBrMptZyApDW2ckttSs0FHyszd6lMNEnO7Y9s3E74CGZKeulnYYXoplhLu5aZrUDkTHsVFYKUVGqwoC9KF1FdE7ir8/mzbeSELxzInJJdRaviIh+15heAFNBXsJ2XzaAdJyVQdrDb1YI9zVoYay8pTSlLmN7eQ++hCMCLfx9/OLNw0QkoLuOi+IMfZYgCVBK85poM5Dj0lP8CNIXsm12+emJTTTxnhfPziFkAfCe5E7bdhH2pJmfdtBxRRsApntA899Kng+7pxlgyWk9W1fk7b23y8GnUqX/hdSGy2CIVg3YqeEX+FD8+y0cXM5sl7Uc7zjtTpmuulrwtuJ0wzj+c2vSbi2JDvfsCkNl6Whb8PCc29tahw7gF3QvmMYEDsJ4HBKxtYvfBBPWCuYSLyTMBlhHzyDlz9ASO5ScpaEwXIRRPMkiCYofBtY6ywKomQRxNGlNsMmUduTOIjiWRCH8C/YI2eP4nkQLedBrA9MzGo7uUYX52izSaaX7/SCrDNomVshfE/TW6ZaUBZkgPQ2hgxC8z87gwNbMnh9RXkGcAbYJ94Jjdgc8RLpnQH01k03Kf+M3tHtIT/Dic1uvZfiQIO/yZZINnsxzW8owRC4qcAQqymAMfvoOvxbhFH4rgY5n0bjMMW3iORHIvyzpJKgKJoCyFGdHKr/C9rv7/8D07CYyMl0vKt+JGGfkrXjqd7s3aLvloB2OKf2Dzvd98dqhcxarxuxXsncH3yJWyN6D/CXk38B4ByZnQ==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/12/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/12/49e66753d69711809118abd2637e020dbe2943</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA3NmcwNDAwMzFRSMot0EvPTGO4HvxVYNuu/2tNDX8KTdCdHx0vaFkEVZKSmgZWsldIf/LqVIdytVksbzYlCFSdYkk6CFOSnwxWsth58ak67qAlZ84EO7npy+h9XnqjDaoktaAYrKSzb0phXFZcZlXy9Kj5p4o+i3yKOwBVkpaTCFbiVnvpwDn+bX+e3NDeWjk9f0L184yfMCX5OSmpRWBVEk97K98KFc5PPxbXXBzI43XDsv8eVBXQQ2AlzeXuxn5BNz5mnfrfUlE9p7ZRUYYfpqQKrIL96An92z/cOQ/ul/qzL97VQSXw5iqoioyS3BywGl2D19dln0bFRAn/1DHV6s7lncEQAlWTVZAOVrJsyfNuJYNP991e3874W37jR5DHf3mYEoi3//PlmK3hF1ZKY38/LfuO/5/7v0U2Q1Xk5peBDeHxXe3yQI6t8Hsg47Tc+Uv7rTrinKFKClIgHip8wDptieGp+bN5yrZWffcW+P3N6j5MSQYkIhma4wNSN4ccXdf7UOLluY8TPfr/sMOU5EFc+ynD61yVUdV3WT29mRfq+6bt/1zeAFNSUAJ2y+fqDfP+zTKw3zt/UvfMSyclhf9+fg9VUpQICf97H14vTAvnVYw2DH1+pG3freT4aimYkhKIc/Ekh5IKiEV+gderm/mPXFF+dMo0Q85OfX6mqA/UlIocSNCZ1PCYndW+/9Bt/7pc03vZvNfUZOygSqoyIZ7GFo0ABOUoeQ==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/13/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/13/922530e58c1e12375427b762f2ea01a9f68f21</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA2tmBw93SzsEwUYeBnuMrA8Pzdh0ev39178fru8zcnHr7ccePR/os3dl68terCnY2nL689dmHdsXNrjp5beeTCyqPnlx48PWfPidm7jszedXTilkMTNu3tXLu7edWuxpW7mldsrV26tWrRpspFW0rmbyydt6Z4zqriOavzZ67MnbUmb8by7Bkr06cuT528KHXykoQJiyK75oZ3zApqneHTMNmncZJrdd////8ZSAeKP1kY2Rn0GHRAWkF+YmDLd5he4KEjJT19SdHJPSZtYk6MjmujVoo9Sii+UbDvgUF6QIiPwsItVWsNdpn08WT6zc++s+6ARuGr378ZK/R4REU12jt4mpzk+dW0JmjJdzsxKQhpz9RkmuLELSGrq8s911lOUEdpqTODqgjDamc2to2rHRmsAWNqi/8=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/15/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/15/a2e9dcd2dc2f49481b290a2dede25a46ce6284</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/18/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/18/0ea1cc66adc02fa6ae8b99ef428f63cb1acbe1</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBFwXo+mJsb2IgMTI5MwBHSUY4OWFQAFAA5gAAgG00/+yG7NlhcXFx2aof//Wz1tbWZmNZvLy89/f3zJkA379T8teV7+/vmZmZ6cVo9eyf39/f2L9y+fLfqoQSeGxF6dKN+e3P8uZ00as5/8xm7N+50Kcr//6jiXlJ//WP8tWC2bNBhISE//fnr6+v6t23/+6+3LxdsogN/+mSzZ0O/9Rv///M/+aBoZFilnkk2bE6//++//iS0bJTbGZSzMzM//Gu78BL/+B7/9p11qwx//Te4syJ///mo6Oj8uW85ubmw5QF//73+eh99d+o5sxw8s9d49Oj/++J//+Z5rc5fHx8///F///U6c9U2bMr3rVS8t2ejXMnjIyMtbW1//+ssqyY//LXxMTE/9dy0qEP//rv3tjFnoU5u5Uj0qUf9ejE3LZH///u8uaP4sVEcGdKz50IqYcd/+em//jN1rlk5r9a5sx+tp9d4rIw2asp78hU3MN2///eZmZm8t1s//+1/+N+inMx8uau5sdI//DG06073sV4//Ke////AAAAIfkEBRQAfgAsAAAAAFAAUAAAB/+AfoKDhIWGh4iJiouMjY6PkJGSk5SVlpeYmZqbnJ2en6ChoqOkpaanqKmqq6ytrq+wsbKztLW2t7i5uruPPxs8cScZHApfXAm8hydfISdsFj8XghZeNcjJgxMqI0JCPT0sLHVMQlAuEYcTP0d8YRkKCjNA163OWx1J+fpJTSMcViVKANvDgdkDNkR+CBEjR4UPIK4mfJnAZJ9FOWBghHkWbcsWOWmY1KmSBAkGBV04yKOH6gSDERYtVhlBs4nIOklkYBDg5MkTeCGgsMGjo40BlqYUjIgR0yK+ITx9wtMRgk2UH1sEXREUwgOVBqoU7CDZdJ8SFVWhTejWTYxbtxr/uqmo8DXs2LL6yGxb6PabnL+A/8YVomAOFqSlMlzpI6OxY8cYnKgAI6aJ5cuYMWsQcyHIAAOrFPf5QHoInTxPCChQAYVyk3CwY8vW0AMPhSWgVWUggobOTxUwHljAs8PjFibIkytfzoS2BQoi0OlmgMbMiQse/1pmEaO79+/gvWuQU0TKFIiqQjAAsY17nffw48ufD19DkwV3HKBPJWE9jBFVBCjggAQWSKB9MFRAAliqxAECCDA00cGEFFZo4YUWasCCCjQggFgpcazxAAxp4GViUxowUZg1q4S4RhglnihjPhpA4FluqhyxxhpFpPHYj0AG+ZgGY9wmnSol7FhE/wFCNtmkBkW8EB0rJcAAw5KkZanlllxyqYETUuhH5RtvsGFDl2imSZoGTwDgA4NIkhmFDUjUaeedeOaJJ5sKwplKAnKmEMCghBZq6KGGaqDAAR628oYZUaTQwqSUVmrppZYqOkcNrsBDhKSYhipqCzeg8FmnCuiRgh2sturqq7C+eoORrqiQKg645qrrrrzmagRqZrwwxZGhKWBCDsgmq+yyy8KhhGpBvHBHGQMs6EoGKhzL7LY5aHCDG18ogMILANAwxxIOkIAFEEJcq4MJWcQr77xZGKHEG1ooQIEUFRwwgAgOUIGFAUA08GEqGeiAxgoMN7yCswSYEQQF087xr2oPCNQQQcEHs6KGwgx760a+45Z77hQ+DBxBA37WEgcBD+CrL7n+oqsuwQYnE4cKZ/BrMcBUaMwxNoM0QMUUKCNgwMYNtEu0IQ1EsHLHT1dt9dVYZ6311lx37fXXYIct9thkl2322WinjXYgADtRnpvj]]></data>
	</file>
	<file>
	  <filename>/.git/objects/18/e58d79ed12719f67c65e8373510c4ad8398fde</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjAyNmFw93SzsEwUYBBgOMLA8P988v/vc/7fr/7/vmVppcD/70u/X295vi/o3jane9ss723z+v+95///Kf//f///vPr/85b/17P3zjP8/3/OnEqJrX0S/4ES378z4AaKP1nAkjogEmQnA2v6AtW+FEu3jJRpgU/NXmVtDdINDZknnL7hj/30CepdPHK7lhSpLQiRClhx4cICHyWBLt+gG0wq1zgcTmvMluxm/mE1zebeh+MOgRzbZX/scW6I6N4q0NjUyMkYJubVaSWsJNzXP6HfaPIUNUUGawDHjmR6]]></data>
	</file>
	<file>
	  <filename>/.git/objects/19/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/19/40cdf895a7390e168941114f679864b6029a98</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBYAGf/mJsb2IgMzQzAEdJRjg5YTAAMACiBwD///9TU1PExMR4eHgAAACioqLR0dEAAAAh+QQBAAAHACwAAAAAMAAwAAAD/3i63P4wykmrPSHrzbsnFxMAZGme6BkMYIilcEwGBeuOcm4GRt1aOJ1u1LMBhUJc8TcJImPBZcX5TDmlzarMk2E+qFqdwOsIDgTnNHqtbrPRpnE2/JRLwPSYPWJ+u/9+cCV7EHh5KYRfh0KJZSWAkIFpcWQNhouUc5h6lSKPkqCQmXebMo2WpZyakax+o3ypMKeesSizC32tuq+FtbaduL4ntwq5oceTg8DFwrzFXNBcSI0ZKNUA19c7AaHOGBozGzPY4uTaOdTg5uod4eemZOXt69ka3cpl7OI4HO6Xw/H01fNHkFHAegPX+btHIl20h+rELHvRrOHEf5uIUayoERwjpo4CQoocSbKkSZMTCahcybKly5cwJ7qYuSABADvJ4aVq]]></data>
	</file>
	<file>
	  <filename>/.git/objects/22/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/22/5287850ab038d210db1afa62f8db401bb4d428</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFNTr0OwiAQdu5TXJoOdDDESQdgdHXyAWhztJdcIQGcCO8uGIeO3/+3cFjgdn9cCjmglDCLaQ3MuGYKfq6D+rAZAIoLEe26g4vh0CfL1WyYn8SYxAyU8dCugdoiiskoC3tEp8cydfpnfkcWcx3NiXpF2shb7j3eHth0Ja1RslX0cflfb3dk/1MkufoFKbw+ow==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/23/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/23/6cd5cbc1817783e18c8e0a832227848120883f</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTAyNmcwMQAChbTMvNTSgpz8xJTUIoanLe2f78Sc4Nt/viZBdMlfA/vIF2KGBgZmJiYKWYWlqUWVuoZ65npGermZeXpZxQznlTJKGps7Usx+H82bvlVWdNO+SalA5eampgjlFnrGIKUrsr9PX7G/9Fs0e/DjZZ9uztVZ4rAeVWlpJtBwS6DhyaXFJfm5MDtMYovM9sU+2lszWUVnpmnY1A+zmxVQnKSXlZqSWZKYlJMK0+JwK9Pz3O4rKTuus/HdsF/GwjnhhBkANNpfTA==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/25/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/25/5946ad1902317cff341b290982a2534d486fc2</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTAxNmQwNDAwMzFRSM5JLC7Wc/YNdssvyvXMKygtccvMSS3WK8goYOjKPFThZJ4g+kj+Qbyd50G28B2Mc3Fq88xNTIfq+xajeXthpanf6rmH3A/f5TfodJxtj6LP1xlkCdiOayy6POt93C0Ecnbryh24lxP/TkkDi1rn/Jyc1OSSzPw8sK6VMxMf/emYpmp1cvGetMv7V0c9KJiBoquwEGRDaEFOfmJKahFYT59OvpPYzyn/ep0jpth4f0hdLzB/CZoeqPoUkF5QeID1ta24rRD5pGie33G/0+pXPvoJnFlUj0dfRAbEui2J4T2CX3cpPb2iufNqhLRf2QamQBMDIFBILi5mYOaKbD/GEyPvasGmtkND9VfrN4nzENmsYgat55423Ve2239IbvmW6W7cI7psGwcA4G+nvg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/26/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/26/2d11c9a147bd4792cf49f1a0b1381695fc6d8e</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA2ZzA0MDAzMVFIzYsPDdYryChgOL+o7jLnbf+rDco5mZUez5I2uymcAgBSoxEI]]></data>
	</file>
	<file>
	  <filename>/.git/objects/26/954bff8c3b19b77a1cc61782425d1cb3550abf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAHFV21P4zgQvq/Hr7AWrdRCXJKU0lI+7ZXraiV293Svn53EbS3cOOs4UED3g+5v3C+7sR2ncRNYISEdEgKm45lnnmdmbBIuEjSeXsY/nJ0coRP0VbI1ywlHd1SWTORzFI1C9O8/KA6jEH3IM0nv0Z+EV9sSDRAxfw+IGt4Z0ygVWzTUcRaVlDRX6DNhuYJvKtEgHoWnw7mOFAfoV/KAvrB0I3ilI63ApSq4IBmVOt6ayFIRQNCE1FFvWErzkmaoysEPff70O+LWFKCPX/5AH3+5QTESEnGiqLS2m0NjSak7NVI7NYLAZ0ejb9+wy4+ejhB8FaJkylAgKcRjd/TK2O9ZpjbASxi+vzr6u3USJ5VSIq+PZ6wsOHmYo4SL9NYePTsBbCznUCw2ZsisUzUhJ8XOehYky1i+nqNpsUOhtSm6U5hwtgZVgAeo0NoTkt6upQBO5uh4Ngvhq/5ASKAJJwJgbQExhCoFZxk6vr6+ti6p4ELCseVy2VsM3gjohLokL9FiYRP1MIBXIgVVn0xtolK6Xps+Aygg37E+qlF6hzMpCkwkJQHay4GhaElw81lHHJJATZWqxVGimDu+OF2p5o+GYq2a5nxD2XoDn1sdtWXLcuys49Ap8YgZNNsO+rYmtc32cnk5vZzaD/rk6a8PlQV5qU32nddT3MQV0KloSyTMLjYU4JnDvxK5wiV71ApcaKOH6Xvs+q3fzjBpGOpk0GTWDWzR7Nl0/MbN6Tbr58bqAWyExyTVM9jXisvlNJpGB5VxVqra2cJuWqGZrXpMtCcu1QMHinKRQyd5CEwgzr4T69LxbYbblRk1A91L0n6gcGsQw59gOD0IK8apNxRlwXLYqb4NNPYMKclTyj2TpEo+eJYVgdgZ1s3r21nOyg3Mqp3iWnm4HczMxJ1G0hDB14Ndo6xDNAuxvQC7M1VJPninLwJYf6M1W70bWh/X7g2jXY5hUymWEu6WpJlIu/06hHrVOWhWfd2+NttevjrZ3nCQ6/lUhvJDCvaJnO69G9EqCId/fNHNpCAJCNDam715LfUHZOjl4Gn/XOPUVbRb2TSCJswY7+udmgu5JfwgTavTnqfDxrazyBRcdqlV3wufCJ71B2dp5/7dU/12mupS2ly/UFov40Yb6O9XxtA8u0a4vui5QetV1eqCskpTWrq7uGffTK4/jMOFJdnFhsdA9z3QjW1YeDKXaU9gB7AN2g9cSLGWAA4npO+FgbfiEettSiReS9gH8OQZwOUWICTXCRmMw2A2DaLJOIiGKHwfWOt5FETjaRBHF9oMl2VtH8dBFJ8HcQg/wR45exRPgmg2CWLtMDSvgeEVOjtBy+V4dHGq34a6gn2Bc4TvaXLL1B6UBRkg/eBABqH5zW6ewEoGF4woBgCng33oeWjExsUr5MAH0Nsw7aJ8H/2ssU5+hUNb3WIjxZYGv5EVkez8xTJfIUEXuFGgi9UIYMw+uhb/FmEUntYgJ6OoH6Z4TZO8JcKvBZUERdEIQPb2ybb8v6B9+vkZTF0xkWvT/ql6S8L+Gi8cT/Vt7t6y3bs8sf+76LmvyjkyL1c9iPVDxP1PM3bPLneFNy+4/wCEmWx4]]></data>
	</file>
	<file>
	  <filename>/.git/objects/26/e450c6dbaaad48b06bf1aa4daa33e6196788b5</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA0sWAwNDAwNzVVSMrMi0/OyS9OTdEryEtnWP9Ie+W8Fw9V3st9a2XzNuJXeyMaDFRpZmKikJmcn6eXnpnGILro5Z1Ld/Q9PaQ1uXTfPopyO5fUYmIABGAlxQwewnvP9Uw4fUqbM758UZaBp8zDnFiobQWpecmZOWCbuP+dDXg3P/poUz8Pu+sqO77/px8FAACz8Dw3]]></data>
	</file>
	<file>
	  <filename>/.git/objects/28/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/28/7a523543ea36d8ba228dccb0febf456a3ab7bc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF1kbFqxDAMhjv7KQSBozdcAuWmQpfmOOiQ6bodHRxHVxtsy9hy07x9nQTaplBPsn59kvjVW+rheHy463YtdDgYmeBGEdruAp0cEC7GBYviafOE+FVuEkgP+MnokyH/jZ8pugQ7mEvPUjHFCZhAWktjgony/FMRJSO4bNmUOXAzFmcoGMU5lnBJ1PDCBUz/0Kyz6700NkGZz7q0sROMhnXZbPrpZVaxycGSHFIDg4m4LCZEVVXQxmIAJyEOcMIPtBQceoZ+gusrMQWNb/eaOTw2zTiONa+5WpHbF+Q5G7sWdxRjcWUHrZbBSb+h3CIe1Cpt4dn56x/rN7ByyZWrpOUoNcX3vRBfBcqYoQ==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/28/45b96ac1329039bce1b1a2fee1222c16d9991c</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBVgSp+2Jsb2IgMTEwMABHSUY4OWEwADAAxB8A////M2bPMWPDS3fRcJnnjK7p+fn6TYTvp8vz//7y8/LxHVfN7ezrXXm9wtHuHlS81d7zDUnCwff/8/f8DEeyvcjW6fD64uHv19HG/ffz8OfX/vjllaSzvbOkzsW2AAAAIfkEAQAAHwAsAAAAADAAMAAABf/gJ45kaQJoaq5su6JOQQyBIAQDUTio67cAByFQqEAMKYABUpkReL/oB4AYFCDJbBZSGCAA0pbDOklozylDpusIlwAyBXqetejA7smgQu8nEwgNE2EWAxdzExKKigiLcxcDFlF6FmeLi40ImpoFX2eFgy4ADYdZEpmnBaoEOqoIq55ZFw14LJ1am5w6mxWaBAeqMgdIWa9iBMQpBJsFwBjP0M8MEL+sv7HKbSeRWcCrwB7JSQYaF9W/BzxJCgO1I6/d3wcEGGZzGhADB/sHAeJwCN4MEGeN1YEGHeyhWFJq4YYCAfj1y5KhHYkYySzsQxeAg0I4CyIsaJCBmAIIEfX/0SiQZccIAE9STJjHb8AADwqIFYhwI0CEBvYSMKCxT9+CCUmo4QEwQKEDif0aaNCQ4sGCADUCLMCAQk6DBUSxEsgyUISQJBJt4mB1hcDVnlr5pKBhs26ALE9EqEoS8YBarFYfiMSKVcCCBVTnYlU7IAKWFBUKiCDwmAoOvzQIa94cAGgKCxE001jAMgW1KYJSQOyXOfPmG4alJiHwgLMAWmnaAbirGIdruJt/ck3hIDSO44sByEHBW0ASuq0J9+w5Mpxpq5wH3FCSwjkA7yhcawaOdWSHpNgXH7fRLpl33swJ032tVUCHZBAGc67xoGky3gMgBUACBAggXlbAcZAY/wAXpJedDQEkQIwBFlGmHBwP9HRgVgtwkEEKWo23mHYCPECAhCic9sFeBiRQnIG2SXcfCqDtV5gNEVSAIgCRmVVaixneMN90V51Ho3GFjYcjAzmhQJkIFC4EU5A21sCBBYcggORrNvQHAAPElDVFTEhAQIENMNIwXWELkJdVDWhSUEEGYAKg1AgxLJTAV2j+RthhIrkJ5w39JaAAA0q49JJuajBwJpqctdkJAVveCJucQoVpQAmRoQBmARQMCpwAHCiRQQU8WRrnWIei0Mk2SBjAQAIDBInmDeaZYcAGbonKnwAbHIqEHu7gOdaXCiRQImxodmidq7aimWEGQiEKk8k2K+z1JbUNPApbdTkhwSezZ25QrauSAdEAFrIq8BAFVNqg4IBa3voABSfKau0sxZqgBxKHJgtBt7aaSEC30lLQgI6HWkthKD4UUgqTGijgAMEPZKzxvQrPySQD+0YSxgQNIIAEk4dmgAEHDTTAXgMEVJCsAhc07Kogbox5LLI1M4CBBuZuIDTIPVsLE0s542lFCkLlpMDTUAesEBtJlwBIDpX8MeDWn83wRdUruFjgEwImMYEQAjyRANiiBCGDmkLqoA7bbmjBdggAOyt5zeQ=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/29/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/29/41c65b35f393f4b467d8c3b0f0c77988f31591</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGljs1KxjAURF33Ke5elJukXxNBROhO6N5ten++RtqmJKnPbxHfwM3AwHDmUN621MCheWhFBEgGO6OKYyKnAdEQ801Z3IsNwXomG0i0745YZG9glc3QO4q9N1c6P1udbw6Z2KCRKFGD9h67eLYlF/iQuD+NS0m15WMRGM9vWZMUeP0ieqe/9jzLGxg3DOiCtwYe0SJ29OvarvF/KN2U7iW2lHeoVNLRQEveYMp8rvLZZOfroGWYxkk4xQp6aWtapULcGdIW71K7H/bsZGk=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/29/a3d4064f92ffc613bc2407d9951b49b2ff669e</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/34/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/34/5d7236be5de2bd7c93242c99355695f09b8320</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/34/7c0c36cd2bdfe146bfae6d35de6b0dd6261c3e</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0tmRw93SzsEwUYBBgWMTG8P37d4Y2hmPHjzEwMLS0tfwHAyBb8ScLIwMDG4MOkA1UKcDAwByQ4XVn3YUJTtqqzqybtOcfnVIr68n7QkAk+jdngSLPgVd5TFPPO5zdt0Fi/VflUylak7U7VAq7pt1863knVUz0eiHbTJbyQ6uPOLmV7c+YITE5a7swgzUAJx04Kg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/34/a57ab2e1b6e3eedf66d51883ba3394f8b14420</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGtU92LEzEQ9/n+ihHKJQvbovcmZyvSUxAU7qFvh5Q0O+4Ol01CMstZxP/d2S97iO2DCHkImfl9TGbm4MIB3tzcvHj7LjbxCoC+gX5p29xmXRSA34lv59cFN5SXm22D9vG9tZiHlB8SBkjIXfIwpdxRjs4cP6QU0r2pURc9yc+rgUlTzsh6EU0ybX5QNjiHlin4PVXqa1FI1ki6OIVgDR6f4Mv2Iznc/kacZ+kFAZ4xLDcumGp0AjBGx4JyaxIflxuTM9VeK3FRLqgaPAvF35NO1lT5XGZCXeKv0CFjD5s+NKFh/Ez+UYtsqea4UqUck5I56qIEuQOnDovLxkb0nmzwJ4ka+VMrjdiZWqsD+b11IWO1ir6WJHU3OpqZL5nHilggmdM+oTTZolbXpo23Yvb6JLj9o6YetiN2Uva5smAFI1PuYkwyXaHj2PH69UCfm/DE2Ioi4/qVmq2e6U4O6V9cjrD/anD4S7RNmLt9n0K/OrupFq1M1ZJfRbKyQTIFmVccnZo2Rib1FytNIpY=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/37/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/37/2fec1feb9ffa445848c201953d656b329a4d81</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGtk0Fr20AQhXvOr5iCya5ANs2hh+LapTgtFFrIwbcQzHo1lYasdpedEakp/e9dSXZsSpxAKOggNDPfe29Hu3VhCx+u3r/5+Ck28QKAfoJ+a1tuWRcF4C+S+eHrRBri6XLVoL3/bC3y0PI7lwESSpc87FuuiaMzuy8phXRjatRFD/lzMZA0MaPoSTTJtHyrbHAOrVDwG6rUXVHkrhE6OZZgAR4f4MfqKzlcPU6cp/SCACeE6dIFU41OAMbqGIhbk2Q3XRpmqr1W2UU5oWrwnBFPNx2tqfJUZj/1HL9Ch4L92P5AExrB7+TvdZYt1aGuVJkfk5LZ6aKE/A6SOiyKeR/tZYUN2eCPMjXKtzYvY21qrbbkN9YFxmoWfZ2b1PXoKtMH8nN4rEjyCEvaJMyLtqjVpWnjPBu+PAqu/snVj61JXI5+LhrMYCRxF2PKf1joJHayuBrw3IQHwTYrCi7eqYPVMxvikF7jchz7rwaHs0TbhMPGb1Lor896n0UrU7XkZ45YZhKdGq/LX8QgH+g=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/40/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/40/da6949cebbd464b8d7060ed83fa6040990c836</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/46/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/46/7dd2c0ce0fb6fce4d82bb579976f907be768f9</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBCwH0/mJsb2IgMjU4AEdJRjg5YRAAEADEAABgBRT/wS7q6KGSY6PyVl34AwH///+lAAvEAAD/cwP1g4Xj+/v9NQCwkI77xsn/s7LxKCXy//53OgPHh3r/6upGAAD2opfj99/DiLv/1ef///Df//9yB17SHRz//+K2OW4h+QQAAAAAACwAAAAAEAAQAAAFf6AhjmRZBmOBiotZCEZSGFFUdFEpMMa8QQXCZpRhPGKEhKIwyZUcDEaA4bFMCBCnjjfqLAsKCqlRkYgswc2icNRMKuULYHC4AMU0uEQQcVQaBAgRHQUOIhKGOQAANAcYBoQjCzlkjwYfCAYLCiYVjCIaCAMmIhyWIgOZpKusrSEAO7nAaxg=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/48/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/48/13bdce8c90cbca2b095f77a26a30491ce16c5d</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTAytGQwNDAwMzFRSEnNSS1J1UvPTGNgU1wSc6Z3wpxb9awPRS5dmzPH7nIOVFVqSmYJWI1ubMFhLr9+0aO7nOyUD/7x0RZ10TExAAKFvPyi3MQchok1i5cd6ii6fvJeWqha4wGmH9+9AyEKioHSOQxCns/Sg69NF2yYKLH6UnIdE+8+TWeoJcX5RSXxKfnleWCbhCepGjztkRMyD1HfnvTpFePKb/2KyApLC8DK5k+Xtt5/7FtzBef19VzPYuta3opPAwC0DFd7]]></data>
	</file>
	<file>
	  <filename>/.git/objects/60/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/60/544234aa2dff165f66cbf10f515d12488a74d2</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAG1VMtu2zAQ7FX5ij0YkBT4eWrhNC5SBwEKuPChzdmgKbpiS5MuSSUoAv97d0n5IcdKA7T1QbBI7mg4M7tLZZYwevtu9Ob9h025uQAYXOID4Aa4UUpwL40G6YCBEx7MClZSCdfHM5cDfHDFnIPP0ztcne4LcOMpoGys8YghCugc4BayuDrdDahwDcxa9ivLr2AwgBv6T5+M8GCW3xHLnZYiA7+g+lA0w7fAEVhRiCIcjhXVUkkOq0rHOy0W3GjnbcV91iSHNHSlVI53SJJErjLpFrRwcizPaTucSZ4BOKFW4zG3gnlxr+XP6kidTwVekGq3gRhAx5fS9SYNhZBEEzRKFkvOXuib8IRcKw9gha+sPgv+GqyDm/8MtWSOcuKQ5CnLbGmMyrmpNLoR5QiRQKEojS9fuxU0pCnfSRAAX4dnnSfQJlFsgHPc9krzylrxIv8k2ZykEE2jxMaPYSZCnJrOHfKN+9uLs94rw9D6sPUUntQ/M1yM7Qpx7VhYzFdsq/G4MF8EdXoWmy99LIUVKVxP6m5MG8EMG+cSm+d/Not4zjXqeky14c9/4NWFVMm19IF5OkrbeTrP/PGMaO/fBn/U+uv8dg7TUvAfIDX4UsDtR9Qec9Tv07CkX22rl2sKVh8s00U27I6Gw2FTuecxwVkWItKhDHehszYPApXC6SVoCtWe74TcJwaPaPFYG73LbsPNOIhoGLWErjepNuTanTXrmeEMp+ARh1DekknkfB9KxZ67UIVma6RMcvwV6aakdRz39+5NHHsQbV8/jIDtb2PcIBY=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/61/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/61/8f7bf22e802209b27a44ec658d0edf27d6492d</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/63/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/63/98fe79c35f53d14bff35fd314a33a61ec3e5ef</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0MrdkcPd0s7BMNGAwYPjOAAEthv81i4uLW1papkyZsnXr1mPHjp07d+7atWv37t37PwpGQ2D4hoDiTxZGBgYmBh1QTgDlCQaOfwysHDIeGxYcbOYQ1oo5sWGhMyOzktccj42LXBn4OfkiDmxcfLxfwZ5Po8FQ+cgEjeAimYSGJSd7tZKrZCYsSPVsN0g9dSficupBBodmLlmvkOdefbb5XCqntqy8yGo5WYjl1xTl0MWW4h6xUgteNa1W5O2QzTZM8tzgdrHOpCBBJ5qFg+fA3OptrwNWO+7n021oWB/fl3N0m24Bw0HGfg4GCQGHr3mMC6sUF/PkNBxoZK7hL/fZ8yPr3ol5zDbvrCIbGVlZREQCEiQ2Jh1b8rlv2t2Ikvu3WRlm6zks2J55Vsby8LHs73oX7mTZ9oUumOXg/YC7pV3sronZyw26wcvF3uza/PXVoo93fx3ltch7f5X1Rpk83y3Ne1OKuBf4r6/7/Pqlb/H++Tbb6+98/RGoPrNix1fWGdEcTD9ic49XTpkTfkm34066rG1EaEucbPiDCplJ6fPLJeOeX23f0Bh+t0PeNSOpTnrbiYdVnKmtST6HjlosDjRVmhLcbrNrh2KP1b0VwX3sJzVSPFyktizutzXjTJnofunHrN7AZVNSHL3NTj7pVwmKVJ0UzPZTdUZ3peWiybFdlmldiU471WanrvqZVpCrZfl8ctk9z/Q5rr+eP5/fwBaV7sggkvViYYfaqheLmsVaHiye4Ka1MoKRkcEaAFATy+k=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/63/b2d250719f07147af8788a71b56c0529378842</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/63/fb7bcbfb80ff78bf312647e39b61baf6907047</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGtVktv3DYQ7tm/YuAsKgp1ZSNFLw6KAoFPKWADiYMcDa44WrGlRIWi3LjG/vcMST0o7saO2/qwlobz4nwz32ir9BZ+uXh98cOjkhYNV/uTDRO6HBpsbV4Y5OKBVUNbWqlbYDk8ngCcn0Op214rLJTesezxfDJ+3CjZ28Go/ewvy9+QCWxY9qoaOqW5QHMXW5RaKfT+76SI7YpKtvhxNGEuMP0Z/Dxgby99Il6Crei0bEm0SmQSRx7PgguAjhve9OQjSjzIFu2gux9t6MoCt8PuEqwZcBRWXCoUIcNb/GKvZN8p/hDl1miBlFc59FY32dplHLwa7u65koK7Mqc5WHId+QxFfDtYq9vkzvGRS2jxNMV2KezzQrcsK3XTKbSYncEEMMN7gv0MpCAZ3e2aN3hGJe87ghvffbi5Dg1ATmQFLD4o+qEsse9nBdKhor3HirRq6HWDtpbtboIANgX/k3+ZYPVIUt9crjA8bKbZnC4hdItzbzKqHc/HJvHeXMdFvRWXOxInLWeQECzxk7R18Oib1/sLPRyZfodHKAT6GucF8rJesl1lejBRG0a16vMwOWNwF95Li61sBcGnZPlXjF3i0o1KPygLv7lhraRpWHal4UEPdMCVeoC/eWvBahAabM3t7+OkzvEcyA5jcpLPdQ+ncZ2DRMldixRrTDIuW1BISEPRbOdv3FHimu552BnBBYDrEPChCm6tYVltsMrS7HyLP9Mdk8cjaRVEBTQGLJ8fEiCCbUjjQJc4s9H3yI7aUDR38dnx8oBVRSTIMmF0R0C42bm6ub79dPP+j4MC7cn3gdAg8W4LFVc9+rqGLBO9ffKOpJ2IDrFduU609+tMXGpTaR0My9vyHHKY3oP9hp2+cFih6LWxfKvwFPL5eeYT3fFSWuLii+LXifeJhLvLheyigbnnBrShzeQ7+H9KJevRSGL1fxzFxlV1rSu3g3WrwdHWz1KM/Eylm+riqkjtvozU2PHegA6yHH6C7MeMfn3mS6WTlibdCIajw+XHin6+Ad0oXuNGUTYMTufKOxSE7B0gH4jz/EJ3Q+CNX87FUKCQHt6MuHN8XH9qOGm04ZYaS5HsxZjkGzLj9KWRTV3R0pJ7Qp/28oABngmaf32l55ZBgly6Br5/AfwX6j9C+nHzPkH0SfpHKf7b/fckrT+/7mHcC4eEXEuBtCnkrqYQtU3XHGX9EiqfmiCwXDQxK5YMp+531liod0W6cW1XLo4YjqIphen/iSeN5XPkK2HwVjE=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/67/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/67/afa4de649e89342a2b49f85043763eeca7eaba</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0sGTQ11Jw9g32DVYIDon0cVVw84xQ0NLn0iss1C0tyMlPTNFNKi0pyc9TqOZSUCjPTCnJsFIwNDUoqLDmqsWiKiWzDKxSQaEktaJENzEnMz3PSiE5Na8ktQioAwARVSRy]]></data>
	</file>
	<file>
	  <filename>/.git/objects/68/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/68/9de3461be77322a33ff152ccf02664a7334206</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/68/d4407e6d54a4d02b975a5daaeac56e0b62b656</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGtjkFqwzAQAHvWK/ZeEnYlWfFCKYVAD/nFWlrVgtgKshLI72P6hlwHZphYl6V0sAE/elMFKz5nGlNm8pKjG1gS+sENp6Bj5DgmDBgtmZs0XTv4HCZGdl4zBZpC8gmTV1Kd1EZWcXmk0yBG7n2uDS4q6+E8t7L1epsVzveHXos2+IrPSVuv//jnb5FyPca6fAO5YB1zYAufSIhmp/ty3503xMxvaVuHh7at1NW8ANmAVds=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/71/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/71/14273d4f005ecb1a3843c92d81f54b403a5fc3</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFdT01Lw0AU7Lm/YoRAdg9a6MGD9YNWFxuopMQtRURkk7y6C9km7G5EkP53N/XjILw5vHnDzLyyaUtMz6ejy5tOd2PA7MBOKuutZ5yDPkyYRTbOZIJ35V7r3nYs6ZRT1vOfU9K7BldIgjb+9PqNgtS9LffKNP+VZseM9xR++efUUW0cVSF94TymfEYAmlRNjqWrtlLBtPsLpDjDEMNnQ5G7rBC3cvWEfCPXGwm5FMge5vcCMj8uiyLfPooC20wuUYhvfbQ+RFDj6S+JKt0ejYdXDuMvPoVLxw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/71/e00596a431ca9f9b0c76b57af74b10fbf63adf</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjAyNmBw93SzsEwUYBBgOCLL8Lyv57mj0/N1a597ej3ftvXe8+f3zp97npn9fN6ce9evPQ+Meh8Z9byt5Xll9fN9e59HRr139HofGPQ8Mfl5YfF7C8vnBobPLZyeb9v7XENTQEDgPwMI3Lt/7/9/CJNB8ScLIwODLIMOSAJkJwNrcoJ6Xkpk2swVeTGvt82cNsvk5NFPy97anJ+3K67/6akrGeuvvDAV2JO3ejrrx5CyDt0zR0Ib9KI5mB9M6CkS4mZc6MSpoRempMyQIcDCwKlyrpJlXjpfITszW4MMa6Fgu6uWRv+ECYoM1gBdpWSr]]></data>
	</file>
	<file>
	  <filename>/.git/objects/73/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/73/1fb6fc66fd2a163a67f7c7dd7032728cbd14c4</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/75/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/75/7a732b484fe8e1bffd107e86e4d09a654a37d6</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF1kbFqxDAMhjv7KQSBbJdAuanQpSkHN2S6biGDk+hqg20ZW26at6+TQNsU6knWr08SvwZDA5zPjw9t2UCLk5YR7hSgaW/Qygnhpq03KJ4PT4hf5TqCdICfjC5qct/4hYKNUMJaepEjU1iACaQxNEdYKK2/MaBkBJsM6zwH7trgCnk9cgo53BIVXDmD8R+aVbKDk9pEyPNZ5TZmgVmzypstP730LtbJG5JTrGHSAbfFhCiKApqQDeAoxAle8QMNeYuOYVigeyMmr7DvFLN/qut5nivec9VIts/IS9JmL24phOxKCY2S3kp3oOwmnsZdOsKr890f6w/waKPNV4nbUSoK770QX2KSmdY=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/77/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/77/134e547da19a4324d1da8690a7cbc002fd013d</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGNUlFr2zAQ3vN+xQ0MkmElD3tqt3YbIYHA2tI6eQrFKNKl0SZLriS3DaX/vWcpTbLRshgZ2Sfdd9999y2MW8Dxl+MP3763q/YjwAqFQs/Z0NmINh7FdYsnEPExDlojtGXlV7qVl14C/ySb0ARelvBEQQCUKwe/g7M1WukUcuG9WHMWOikxBAanZ7AUJmCZgCjhUcce8plepLhech0CRl60wosmzJl0xqCMmjC1YjdlSTdzsWJ3BKdg8QHOh2NtcLjNeB+lr5kaARgM4Idb1CEKH/mGFsXuha9V17S8qMeTX6PqzZPr0dVsVE13Z0VdjapqcnkxZ11rnFC1x9CZyG6IIlW5xVjLLC7JlllsCKBVtTQo7Gs8USxyPmXvtXt0JpSaJXxUfcuc3d0tac/z6VtLT0JIM9nAbAuSzptQr2cSIYtKZA4bY/TddoqU1A8wwfRTfP3egzzcGp+BoffOJ7OwnxbSHzgpO+9Rgeq8trcQVwhZYkYZrcd7Muw1Rr9OiW/S+9dtxDNTPNi3f5ObEoc9E/7BNegADTmYGP6HVi8YLZLukOK7dl4ARzAaIw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/81/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/81/b2fc0d5ad27d695752494d166b3f2d0738a019</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGFkTFPwzAQhZn7Kw6pUhypUWFiAMpQqRsSA1tVVVfnQizZdeQzohXqf8dOKHEEKYMXn9/ze9/ttN3B3e3N1cNTUzcTAFWBuJaGDYs8Bzoofx9u24FQzOTFtEGHhteZtFqT9Mrut6rMNnkeXn2GAzDtR/AIe/qA5+VKaVr+KMZd4ncDh2KhLZYi7wbd1NeKiwUbdP5YLJBZve1FEiibpRlS6XwO3wVCMnQOj4nzKbiTZlLVxa48VjZw4GBLh0bbkkQ2izn+xBUtfjWN2kGkyjpCWYuEJ4c/ADmtF24i+jP8ATxeJ9rwcDO6j35l0a/LFnm0yw+e/yHnIXNuLU6T4DAiNdJQqZC3HaAeVauMm5C1PYtfnJXE/Eqm0ehpZZ3ISqrwXftU+AU6o+NK]]></data>
	</file>
	<file>
	  <filename>/.git/objects/82/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/82/af6652568074f5484e2c632ef2bd71470fa3b3</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/83/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/83/542340e5ae7b51dd3a96b840161dcf49bc202e</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGVWFtv28gV7rN/xamaWDbgSE7S7UMsK3XlZOMi3jV8KVB0C2JEjsTZkhxiZmjZXeS/9ztzoSjHLtqHOOS538+hlpVe0g/vjv/0u9nHtmz3XlWiWdMpCWPE48HeuNXWqcY6UVVjOp3T+AoAuggQupTWirWcjI8CZdfs0DLYSLA+Zk8w1x76kc6MpEfdke2M3OOHjWgcOU1dY6MocqWytFKNpFoXXSU/stheniyCXZceR3fJAll4q6KQJ1T30lilG3ptqSfw5F27NqJ4Qp2AbNeWk+mnUxrDqELa3KjWQWQw5pZNDtYSntaykUY4WdDykS73F/RZ5E6bR0jYGzuxzJSTtQ2sF/4RHjIcz20Fxoi77V8jXnudEftzfIm4UlZtEPmFn1iVNEabAPvEj7+PLoiiVk3mlKtkwC503YpGSUtnjKIr0cgKxGNP+V/dZbXW5xTRqkWD8iDbylytVE7BTzaQdSV3gs5brx64XBdPUdFvb0Geo+gKCeti5s88hM49aEJXlRRWUl7K/F9sh6FWmlpZTrjtK3WnTv8CE1GAnF8rHY0ug9l9FEZDEb46ocCXZcgxx3FvbLtlrVxw5iY8c8TatnoMwDP/yB6KJkc8fT8twjOgRloUhayUjUKuA4A8ZEtQSCdUFZOeaBIQZG23BEcZxF/FF8C7Zgdz17/CeM5sQancorlDCPitrGTuSDexSG6278CutKn7eg0C+vwmdPSwJ8tWRteBNvmRTCCPSoxcEoFuwU8JXMiV6Co3kJfK+zxgeo8I5jFb5NiF+zw8h6HRazsi9Co3NqKEdu+sNCys3hvzuCo0NdpRKe65IOSgTnbKJIrwiv7+f7Mld1l3pmLV37EheEnIQff2ncTtRjzBU6vwcEGp+4ZZdZjLCevrF06EIN/wEwRb/J+hMLZQ2hd1e0JcLIIaufEd3ZPmusGy6AZSaJ8SkGShgF0zdYHScZHsPDwDCql+EgZ1Z9DBDjB9wmScRh/FhOVc0D9e238yGWsYSPiE115E1xYYpJle/ooijs1z52GUYJDQGnmv5CaLBFfhNSmIVd4KIxsoinG58q+sn+si06ZAmpax53/mN4z979BZoQws6VdGINwCkzg/MjOMsKzFKA3Ocxot1xp5WCL1DrINIg6Qc3jsixWAnij2zFZa6pUdWbbUG2hkR2P2AYA6BlgqjG4LveGmCE4PyLOVMtZllbxPI+5myOqx5LEYJRiNvYjdYmMersNBxS0753wjBp2qKeRDxuXVG3nBIF9xDEqS0TdZXqfdjMahBapYqHVDl7pRGLo9KZMNptJTOvrMAyvJ7YkzWWMihzg9y0KBYIcROfS7/QW2Hv0sUwZWFY+N7zQmVjrwVBh2Dy4dLoe71sepN6itYTX45vpO/Jfby6+9FI6t2yjnZGxMDu9tBCTTI0E/p4PLkWo7iw/EPcIolhWKVsmqsB/ot1d+rn07wlNnqm/e/LB0sxeOH+wy34dG1hoNv8b5KXFq+alx7WEUYXR3vXVENqw4E60KpJ/8O51dXcDXtPyyF5affGi1iY3yKTzDd0xoJSr1b1lkaE2RZsqXK7rpMeHQ5nByP1VaxKFynt78cs5LXOWy0utg26yr5nuzSs3/Fu/Y48nx5C29obf0k76X9RKT4d3x23cTHOqYuaKiawxZXEWT2RRce7MpBLDO7Y24Nyvfz/lQnE3fg6Cd32rKETqM+RitI9599Nvl4hJjVlh0GQLrBxgm4ekIa83QoofRxfmoz2zEprocfZvQbax+Po95g+JSRIxwE0+IFyQuJBKV1Zg41sIGPoFIrwZKLTRYQqGVPJVEPUDBHvA0uGewkbdm4tYH3Eomj7d4rmuxVeh1eWGBHfO5w5DlIQpJNd0rgTKs89oHgKejqO232bRFwMo/zm/Lrl42fJrNpnhNQcQHkBeQkE/jGG6D05FL7CN4Vbjy9O0Px1RKtS6df1ypSp6+4r9v5mvpkFHh1L28Eq48OPxGm1LlJTiRsjyphM043n0UBO5hCtuFgxyMbuc7seb8igY3gcodzmH/baSKcNhMu5aL004HQjhTOIZgUSNqnNCl7ip84sg1lPrEjHqu0VOFrIsNA5PB7EjjCR3fhzFGtp3Punn8tkHhzoMk7gAi7gEfrFDXARBiNoRY9OAHf9ovNerFc/gC+Z4Us0XSAS8mGsXhOPJjkI2tdY29cjhoIp/4BXrO9DlPIUWOvId9Xrl+fS6YnF+Ej10I1bav/sd6QA9dOG5JG+LIGfAVicPKoH4t9YG0Md0oynN/dIAjViPusd7wi5X/bGskvlPxJYTTViAGngGtPOA48nTcoimLGKT0y3jaE01bVGXmdPaICsFBUMkJdtAv41g8CG6sy5vrBQnnjMJulxwTZiBV848Ku4MAJ6B3FB+fMIk4pdgPO0rRMC8qHjaGIFA+cHv1Bk92Jb0/Pp6+w7+X3NiV1ksh8LUPg/qCDLyHKsPMKzWqHmsMFGjTEFrEAtcwGhlJg/PeR+8/HbjS6G5dIg0GEydei4fDZDJXn7+vcUauusaPZYv7CryXi8+IP6FwzePT3kGNMvIGwTyIZR16KCI+PeC24g/nZ7EXuL0Swq8Uv0RuupaXIcwKi+QsXKpc+T9efT2Cgxj5Vq/cBsckj//W6HuMGXxR2DfK9h/wGGIh4/58ib1TqRwG+aPWR4o/YhBIm+McqqVJsXk/X+j20fDs9H3+NbD1Nm2x+zkIT3hbHh/RX6Vo3ixKg0DqFvYuOtywCs06E1QauTod8Z3n9Idf8/zPtTYgfIPV3GJ5TbBKRvP9yp08j9tfu5PZVMyxpC89Y7xrF5GdzuDINRuM31wQF3wPS3OPH7HS4Bz+pFSiu5dSNqgLv9YL/FzGnxkc497U0rn2w3S62Wwm66abaLPG7vfRs/3DpHR19QekZTT/8ac78j8W5NRHS8xDE9Ydtq9YG4mZrUMCUyKWEscWihq/1q29/nCcebPHe4cn/wEsjNdS]]></data>
	</file>
	<file>
	  <filename>/.git/objects/83/7747334e52d8f16acaff84787b9c7d81211c0f</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0tGRw93SzsEwUYBBgWMTCcODAAYYGhv///zMwQEkgAwgUf7IwMjCwMOiAOCC1DMw2HlZ37LT4HLNlFSZl5k6O/dGTkjBP49QMkdtVzgpLNtesK849rXvu3+4DXc9P3U1auaTzSEqD0zz1KUyRJtKcDNYAl6Irow==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/83/ac018e69c6107d1cd0a326138b8e73daa99470</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGVU01vnDAQzXl/hWWt8iE13aSHStFijpFyaS65r4w9LJYMRrbZKEL8984YCJC2h3JA9nw8z3t+Lqwr2NPPp6velMyEAPF2r5y1oKJxzd2wy7S5MKMFX6KnflVyn58hvujbu4HnO8YIZpOtZHg2FgIWYDqLsrDAFFgbWqlMcxb8gTNlZQiCtxKxqCBBUXUFUhPs+GXRLxsKYUH+ZqKF7ICrz7o5RQc3sv57dn2oUa7h+XVThPa4hcLddCbFP6fJYuH0xwwRnB/HZlpGed95K3i/p+goCs3Tl86DVBUrvavFRiIkPUnETIRalDg2iUUfUp5P6dWHQu0u0naAYnn3/vgNfz/4wJlratcFcBfwgsfKhO9J0l9IXtz8u7Gihpvj0t/F/2mnzsSY/NHvjR5q0EaejEaLEIsv5pgp6Ty5arp1bJnUI5gR4c/2VSTdOPopO6A3c7yXjUV0vip99eZsGmlnJ6Sur/WZZJWHkihosBBhuJZ1e0yEiAXyESvMZPZUEbq29RCC62KLyj2Owcq94y22VkYQi7dHZI7DjasTeQ4pyA2BxW7omMNkmdELmCLPkctxSa+Elv3BlPhIkxK7tPkNCok17A==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/85/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/85/75386820fc1b09f50057da45fee2227aba1779</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAG1lEtPGzEUhVn3V9xFpJlBkIfoCkoqGoSEBMqiZR157JuOW8dObQ8IIf471/aQxFEiUqnNwsr4cfz53GPXytQw+nw2OvryddksPwEMjqkBuAJulELupdEgHTBw6MHMYS4Vuj7NOR5QwxVzDu4nN9Q7WS2ggZeosrTGkwYK6K3lZlJcbI9GVbgEZi17LqsLGAzgKvwPWyZ5MPUv0nLbS4nAz8L6uOiOviIjMCFQxMlpRVsryWHe6nSm2Ywb7bxtuS9zuKqDB+j5RrrTcYZOkPn0dJbX/Tv9RH8ryrWqRd9avVP8EK21zf9MtWEuFNAR5OrsHWVZG6MqblpNNiU7Yq2qQ1D3isYyV+8WRMHD9KzzQTQHpWTuYgPozsBba/Gv+ZVhVLVY1pfYhkzeUWe6ApD6Nj2haKSonp8L8x3D7SlToIunBi0WcDnuEl5kmYoDu8JWVR/7HDinmizZRM2s/Q9cJ1AouZA+khejYj+n88xv3jtukXl80PJPu/FihChn/OT1j+n1FCYN8t8gNfgG4fobeU8R6PfDAxR+XYW9XIRM9MEyLcrhyWg4HH7sHL0QD8tgH4oYqt5cohKaLTBn6SqzemjIT41PXa3fk5cVlPbOAbclTseOPeK+3dd34fUNB4uzYQ==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/86/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/86/a8db2059e4729e4ec74ecb27d4f14e10cca27f</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGNUUtLw0AQ9pxfMYdC0qD0pB4U9NKqIB6sPZUSNskkXdjsbvZRqNL/7uymxaIVuofZCfnme8yWQpVwc317cf+g1zpJJnmeQA7PTNYCoeFUvBaK1RY2nIHB1gtmoFGmA62sg8xbtODWCKNi9vI6nQMzhm3HxDJJKsGshb5fRAqsZ8Q3C6NfSQJ0olpocpizDUaaqOlU7K3Gijcca9DMreMIQR8NOm8klEoJZBI+3hdTUBKsryq0dg+bxFv7UvAKGi8rxwOGZLJRYBuTiSAdzp6wUxsshrhYF8FItg+1TPs+fKerZeo6XUjWUX8JA9NdJNrFGstRrid0MYoyvOWSibjTMD6I/6SxznDZ/v59OkWL7o0oshMZThgezJ5jMu7e8s8/5rh02CK9O+3gKgCA0/637gD81+acsGfaDLTp6mBz9w2GIsRg]]></data>
	</file>
	<file>
	  <filename>/.git/objects/87/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/87/56f998880ec4ba37c1dea925756e8c63116d33</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/89/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/89/8e94715e6a5e697a63975a9fca72f314f25ec0</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0MGVw93SzsEwUYBBgmMgAAv////86AUQq/mRhZGBgZtABiYLkGZis5rCvrGZnVGY5ayMZuttiPb/aIY9pSzVcMg2clE9te/mHKffNuq1nPm+QvswZsOyRQcsSCyuhpa0zb6oIszJYAwDY3Scb]]></data>
	</file>
	<file>
	  <filename>/.git/objects/91/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/91/7ca3a6c28872d7c9de66552681c002f8f74b51</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA1M2IwNDAwMzFRSElN00vPTGPQcN2ZddBoguWehxsX/XuopCN2c6YMTEl+MlhJ8ox/lYfjgy96/zf9a+hlvEzu8NP3UCVpOYlgJefLmF5Wy6/alz1vttNixxArg33RJ2FK8nNSUovAqiT4Fp5JW3tAf9m67pnvnfqTT0udfghVlV4FVqEv33x+V7znnv0Tk402zNzB835hfS5URUZJbg5YTcbcx27Sz4uVFtt/DDrzQS1lubETG1RNVjFYRY+m9IHvjc0WH1N/6ik+PLY/mnn6RqiK3PwysJKm9WlBYQ0lXz38dJL1Pu0tdOdfvBmqpCAFEjJb+n6kMH1pkd2qw194x/zhi9wzZ/hgSjIKwKZIVzuFGCu/8Ymf35PNG9JYO63hTgRMSUEJWMmqKfu1XmkuLvm+913a2UnfEt5UONRAlRQlQoJlxxGvhRPPJ7r8yn+W4rmy/Oo81nsw5xaVQNyCJwpKKiAWSTqc/TF1uSWfWKejoH/6jJRtTLNmQC2qyIGEi0/DnocP/jlwX59fIXLgvJlhWs5jVaiSqkyIj7BFAAA+1OZW]]></data>
	</file>
	<file>
	  <filename>/.git/objects/91/dc5857f31f9b2754680dd955ccd80de9ad1d08</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVbA0N2UwNDAwMzFR8HX2TU3JTCzWy81PKc1J1SvIKGBoD/s5o4PvyC7zg/dWqpbm9SQL5hpDlQe5Orr4uurlpjBoVAWZOr8yu7FLqffMhn/7XbOstu+BKkpMLsnMz9NLTMnNzPPJLC4BG2qu/0b+9fxfLhEehxin2qZmG83ybcSiPiAzuaS0KBWuzWRp1aaH2x6/u592VaJ5l/GUHxtdFNC0FWSCLXg3RbHgH1enlZ9/xrKkD/oZUy8Jr0FVmZxflloEVjvp9ucsw8UnZTbKB578vjXXpn9bgjCq2pTUtMTSHIjTGzf94Y26VJsZHuTpK5Ztr8tusUASq2qwj8EWLLxukeIauuSpmVBME1ttWWGz8S1tdC05qSWQ8L4fYGEjbLei9op03ZS/c1sF/1vlPkFVDIyikpDMEmj8XFmZNHHKTst7WmnHPuhdiZ3OVeERgqq+OL8I4vTczxcPFiQsnBKwIZHlR2/H/gs3bjKjKi1JzS3ISSxJjU9JhTvo8RzF7Xflv886JnI17es7wQ92G5nQghKuC+QysI9r/yikP90h/yXuP/9thWW2j05uiFiBZlNGaW5SXmJmDlh9oYi6rT9D3GkpC+eTuo1fvR2s4g+jqi8tyMlPTAErLhf2C6ldOMtZ5eKttgnLTx9g+stoa2IABAqZuYnpqcUMak8Cjt1etdZjQ/bHVb6rjJ9JpndshSjIScxLZzhVduSHV6z63oy0mEdX+sT8nE7xFEGlM5MYDgpeSYj8OC3cPfNZV61WiMiyfTN4oE7JTS3JyE/Ry8wrLknMgTj8pozUYfGZNxlf2/o3alUuq7XrMudEVV2ah6x+a3zw6xd/CyMd+CfH6KmoL2CaP8MTTX1BelFiCiQtSN3+ZzOH7T5T8q9ZfJvLNoTxxO/aCXEpLMiLGX60Ch5JeLv/6/vWtd/5PqsWela02QIAnaiEvg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/92/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/92/dbf36a31a3c91cb11f51c9f7b56d3c8fb66013</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF1j0sLwjAQhD37K1YoNDl46tHXoeBNFPEmRdK6NQtJU5r4AOl/Nymtj4OHhJCZ/WY2VyaHJElG81Ut6zEAlcAmhbbaMs4BH+Rm/rcTGFmLjkW1aIS2x7gwSmHhyFQnOscZ59719Acg+kiwgArvsEnXpDB9T/ynhLgfwnSpjDhvK2S810qP8tyvlOnygm5NjfWXehs7EpUsCgOh3dDP84clghRngRZeHWePSji64U44OWQCYCENRE6S7UwHedV5JUgNm/TlWh/TvgDWFmcw]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a0/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/a0/8e7b42990937ed1d57ed5f2233da6a01c863b5</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/a1/d738644555a4e536125c82067d76718333da2b</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGlVm1r2zAQ3tf0V6glIBuSZhtsH7YlpaQZGzQQaGAfSgmKfUm02paRlLZh9L/vTpIdJzTr2kJerbvn7p570zxTc/bx0/vP776dlavyiDG5YNFxkpvcRHHM4EHar9XTtl1J0x0MV5DcnicJGBPxsUrlYsOmkJeZsGA4Kv1BBcY02LUuWFC6kAYFNiOtlZ6IJUQxwT4e4QckK1WJXVmh7VTMf4BIQaMLJLUjANvjiNvabKdCuBTFEg/EfLY9jDsLkRl4BkyVVqrC8CegqqO4E0ljwEbtUmiRm2vuT2Zoj9/E8ZnVa/jytLFRke4Hth9bCH6oCguF9cGjDL56PTYdjSeX59PR1QGtJhsYKUq1M2nslgbWrznC53XGvJl2zRaKCa3Fxj9fKA0iWUX7WMIgWGDfZ7zV1uq+VkbzrRa30maQyeKWs/6gsj5ERAuX+DRqy7TD6izOIJWW6PelQ2e1jU5wqhYOiJULCIOajvn6iyeZMKZ/ItFRcuKExx3vVwoZ2Bc45uV3XQs90h0swc7uhJZinkHERZrLwq4gBx53B6Hsf+ZU8lwmWF89szHoUM9jni7lYr/igrXYx0Rxca9D+hjDs1SEnstcKwgNbKPWzKzDj3tRWGYV82YYNTWrUontGyiiXLwlc2+lh+zX5IQsv5KQmJLuW6JF4y3QI80FLMQ6q1sBD6pyYsf9vq8mp0wTreUK/JqnXonfbPvJEx0Oai4Z9s42tf+y5gZT65GMAM4p+j5kkXOaiChLn7W/5tp5gw1IpwQUYjQ5ztNNd4B9IJdFc0Q0ess4+wc0RJpuR8jMVUQ9IF/WyW55+PGMoDVNWHL/b991wKvsv7UeC7hX89+QbIvyYDwHypTCxMw0t9lEK1qj01B2YXqcVmVoTm2ZccdOU8tvEprPe3DV9ozCWsJtTPVA5YC1mGPBYhRsOL76jv9wdw/H2GXCbTw3iEMFuxHWHHY7KN0BLsBfMsWxV9lx6w+jXsk0hQI1/QLhdyJbgxvUH0KOyY0dAA25sjBbiiwDvaFRZ+GBlkCAKDUsQEOReBy+J38IFgqaxjNRSoJM6MYyVw+HYRvyHhI5k4vI0dYdSDNROLNTvBHhc2rNwGh3UPoM+mXZ1CmUu+t4lUqJFrnTphalN758Zj0xGCheezxYfeRvXY2kP3myvTT8BX1bIho=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a3/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/a3/43a3ca7e0b52a4cccc5342462f1c2ef3a5d886</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0MWBw93SzsEwUYBBgWMTK0NLWcuz4MQaG/wxADAZABhAo/mRhZGBgZdABcUBqGZgDI7jurNvA4KTN6ty50VpefGJjmGqA86/KuAdCjrs6091ZDdyvPBB4fEAkdyvzswpDxnPfu75WTAlWjVxl0Lx6zZdpkVNizq5bktXpyPCgJKoncOddTgZrAA14Nn8=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a6/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/a6/a1ff3c41b41b991ba21152a55a39c16a5cd47b</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGFkF9rgzAUxfeqnyLIQu2DSGGD4WxgBccKZSu2Y89pjTYQvSFJ/wzxuy/qZG4P61MC557fvefsBOzQ3cPspuY54loz49/moMpp4zpxxk9Im0/B5t4eBKgIKZY9eqTuRgKiD3BOlAKl/WkTh3acuM4gFsy8MJqxTrQwOaAMu5iACl5UlseLg7FE1xn7FkdjoGqh1hdK4v5Q25UfPLNw7U+6A/eCaj33JC0YnJjKBZw73l+xXesRvHpaJCscDdf2IUcMXsljO7d8Xb9vMYpZSfB2ud7gOLTfK7Yh4q+2cJKmb2kL6Avq34kN938rqKSq4FVgQEZodi8v13sal/gMYL7Lr0OeN1/aWZzh]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a6/a4e78b2230f2df46ebdb68fd77d8f85248ff1f</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0tGRw93SzsEwUYBBgWMTCAAT///9vaGA4cOAAkAHig4HiTxZGBgYWBh0QD6SWgdnGg+sOn1aTQzar8qTM3MmxP3qWJMzTOMUhKj1nys5Nz7JXO8TuN7H/bCOVKyr8LmXnFCHPrCaneepTmCJNZDkZrAFefCfJ]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a7/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/a7/81b2afde6315d57be8e4b8cd2205413d7c5e98</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGVksFOwzAMhrnSp4iiiV3QOrggtDSPwCtMaeKuEWkSNe7QVPruJF1L0cSGuFSunS/2/8elcSV52b7e9boiK4TGG4EQPqXrLBJOtkPGUJQGiARjghdS20NBt5RII0IoqBcHGA9QnhHCsAahUpTi9hyMac5yrG/8/7xPS2cpf7Bl8LsL7O9jERj7JnCahWHp1Ck17yvXgpA1qVrXFIteoqP0onUfwzz63KiXJxnVH4XpIMqNR54e4+eZDpQ427gugDtCW1CsddiMpryJBor1dbBOwHq38B3+B4/k4qPi/SqOs0GNBoy270PUPT1A8n2uK6hEZ/BKFVTEb8EG8PL2s899PjmajIups9ExSDvDsz7X1ZBlTOnjbGhaGOdROxuijnvmfy30K6HU/nsf92klBnKZnWb2PGN5bMG/ADNe55Q=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a8/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/a8/6bf797a8bf75f65b0753e3a6f2d99d2ca440af</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a8/f1e561bf3acf46d17d3e087e951440e2b21fef</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA2ZzA0MDAzMVFIzYsPDdYryChgeOR69++tLefFpaJWTZ/p2fB95Qf9dQBj1BLT]]></data>
	</file>
	<file>
	  <filename>/.git/objects/a9/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/a9/9961e2fc8896253ac9a3bc66d3bfab5ae07098</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAG1VNtqGzEQ7evmK+bBsLvB8QUKASdxSR0CBRc/pHk2snbcVStLrqRNKMH/3pG0vqwvaaBNHpZY0hwdnXNmZlLPoH95+fHD9adluTwD6J7TB+AWuJYSuRNagbDAwKIDPYe5kGg7dOa8Sx8umbXwdXRPq6NNAW28BJSl0Y4wsIDWFm4qiqv93YAKN8CMYb+z/Aq6Xbj1//srIzzo2Q/CsvulxMBNfX0oGtOvwBFYUWARDseKaiYFh3ml4pumU66VdabiLmuSIxqqkjKnNyRJIuaZsFO/sHcsz/12OJMcAFiU88GAG2QOH5X4Ve2o86WgB/raVSAG0HKlsBfDhkJEogkaJYslRx/0HZ1HrpUHMOgqo46CvwVr6+Z/Qy2Z9TmxRHKfZTbTWuZcV4rciHKESJBQPo2vP/skaEhTvpYgAL4Nz1jnQZtEqQGOcdsozStj8FX+SbLcSyGZ5hMbL6NMhDg1ndvmm/ZXZ0e9l5qR9WHrJXx9/4xpMbYrxLVdYSlfsa0Gg0I/oO/0LDZf+lyiwRRuhnU3po1gho1jic3zv5vleU4U6bpLteHPO/BqQyrFQrjAPO2np3lax9zujDjdvw3+pPW3yd0ERiXynyAUuBLh7jNpTznqdPyw9H+1rU4sfLA6YJgqsl673+v1msodxoRmWYhIy2e4Da2FfkJSiqYX+ilUe74WcpMYOqLwuTZ6nd2Gm3EQ+WFUW7qpvRhWS2/XvdGLseaMxt/O5aHuRBiJ7GMoxQ1plIViC+Lqdfgntk0tD0lb9oSnbt/2/uoPIZ0dWA==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/aa/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/aa/94bf2aea29a374f7bdee66cd92f660ec78407c</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBqwFU/mJsb2IgNDE4AEdJRjg5YTAAMACzDQDW19be396cnmPv18bOz5yEhgBzcXO1trWUlpTOz87OMAAAAAD///////8AAAAAAAAh+QQBAAANACwAAAAAMAAwAAAE/7DJSau9OOvNu29GKI5kaS4fZTBs677wayBoCsZ4zhoHba+6oMsA6NU8QKFwVfQhlUpg87hJ4hAJrDYLS047VijO+pUozui0ei02hWrruHxLjyXu+DtcIWad+3YLBw1/fYWALgmChHyGjYgtioOFcmp+j5AMkox+QY2HmZuUnpd0WaemWomLlJVol5mRrJ9xDJ+wsZqzlwQBlaWowalcspOfB5d/t7aYkKLLzLXMubrGfgIuA2zMw93ELM+XBQEMB9KgzrvRrrix4Y7e3avWjtTvYuiIz66V8cLf1Rjxk2NvUYYw1GBsOniFhb9U8zQgTBiRIUUcCzFMZIDA4b94FU81XsRoUORIhSUvbOzI8aNLluBSWth4MaPKkygHWYTB8qGwkDdxAp0pdGgFmhRtzszDtKnTp0xlVlhAtarVq1izapVa4YDXr2DDih1L9kAEADv2+MyE]]></data>
	</file>
	<file>
	  <filename>/.git/objects/af/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/af/e22ba99ee8e124ef1ef685064b320f26ec1553</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA2M2boDPBz5+WS4mJgYOD19HAJAtICIMzBAiS3/jJ/BaRY0h19HRkY1p8wZ+16CeRLlrhGlATnp5WUJxalMjim5CelKnjmJqanBqUmplQWnky1ASr66+niGCIhyXrQW885kIHhQnH8/eBVS1pCfAwuCcw/csVBKSxB0CxBUiyRtUelLc3sgTinFpuoY4dSUfz9Uj8PoAENMg2bW7fXWn/9GSV45dJzZ6u5djeqODgPfEytXvmQqTWxuO7LurLpxQxBy9e2+d7JkLz8egLzBf7Jk3IFs181ve+RaXhesCr5msg+m10fW2QanC7vNK+fJMiby2nJcHGVqEvrvHXTolMYnryqCHuRXTHVJYVhCsOKzkkdPA2NXAwXHVzYHDSZVkzRUjVisKvffXWCpKDnM+W9/yYwfigtqrxumnKlpfB13KMXgoqMCe9vJRmHeC39vqnS/obFm3ZQuP1gvzglUpbt0XFQsDJ4uvq5rHNKaAIAzc6M7w==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/b4/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/b4/8ef86402f4841db52c0f71dc37e1e86dcccc0e</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBswJM/WJsb2IgNjgyAEdJRjg5YTAAMADEHwACAgL////7AgLdAQHIytOztb/r7PLl4urY2eIrLS6WmKJboK/1ICD0Tk72//+8AADee334+P50eIJaWmDo/v/kNDX5///xqasqY2mizNn09PqLAAD08vXL9fr5+PgAAAAh+QQBAAAfACwAAAAAMAAwAAAF/+AnjmRpnmiqrmzrvnAsz3Rt33iu7zXg/8AggEcCLCSLpHKRWSqGN4FgQB08GFOpdivAHqE1QaOB5W6r6Mdi8rSJG4KAHC4P0OvoRSIgAcsEFVgBUoODcXFoVGoJHgFtM12Cc4eIeFYPiwhyBX4vUoJbgwMBo1WYDxt6CgQIBZx/ZYaEk6SKqBsZCbq7fTFmv1MDU7e4EhPHx70wQj4Yzs8YCxgJ0dEK19gSjzYAGdcFGQQZCBAMFwgEBAXq2QSdMwCtrAgHBukPEB0GB+muBdfucAA4sG7egQMUBBSgcBBdPwXr3skAEMBgPQ0OBFywwGEfP3WuDkiMQZHAAXoGPP9YcDCAgYMIEfY5dGVg5LIACFBqkFOhwYADAWDKBBnB5guKOetFkCPAwQUBHpZyONmvqECc9QwEsHBhlIWWDlZSoODQ6g2kBgxwYLrRQQAsEC5cgJCPgFluAbJqsOAzwIVAgaQMaFChQoYARl1QTGuAwtcLYy5EcEDZAOGehxO3WNzYQSA5Kx1omGqgQwcIDzJfbUxXwGQ5GnYeBCrOFWIceyg0KAeBQoAECuRQ9MApgKvgmlkwgtCTAQWtPoRXRBxAA0QEyVfsgQDoOfQJIhP04TTQB3bcW1em1YC9z2+KACS4m1AePey0AehH3z+BU4JW2amwRx0BrEVRAQkAIB4nAORhl0BAN0xA4IQU1qEVAbedxcyGGxLh4YcghijiiCSWaOKJM4QAADtMix9n]]></data>
	</file>
	<file>
	  <filename>/.git/objects/b4/61578c11f5ba22e5d429b9d5581b4e76b00251</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF1U2Fv0zAQ5XN+xRFFalp1lPEFCRggodBJjCK1GZo0TVGaXhqL1Hbjy7ox9b9zdrI0FOoPrR0/3733/Lws1RLOz9++efHhky60501GIw9GcJnKVYmQC/6pdanSlYF7kcLN96tLIj3HbY2GGDnxsjI1BrbbawfD1Vc+c1NU8OQBD1fPTkawSO8RqGirknJzozETucAV6JQKd4ShnyukupKwVKrEVEI8v45ASTB1lqExLWzi/nW9LEUGeS0zEhbDbcLAVhvCk+3coHkSCKlrggvIlUYZ+iz43WTiPvpj8Ct/+P6AJdxohtJGWxPC/laFabkQv5G3DfFik2RKPyakkmYZNo3GENgivZN5VirD5FzL3veuq8ghDLryLy+4QiHM2cc1km0YDodOkVVlR3fOLlrL8rQ0eNCx7zDdJKC04oKdD84r1r9j/baQHR04N4i/QidkDK/HsIiib8kiinvsT3hgtVsLXLMe/NmEfza6nq0SqupWyN5ze70sTZm/jZKqxFrItHRJlekGmyKHBDE5IdfH2/9PDpsy4xIh5+aYS5BMo/h2sN3aMAzuGn8bb09Rc2/H8K0dUxKScI2V43RmASA46Y/0DDxJrolAj5yNizAGKQz4TuY/o/mt/+XHLI5mcXIVzabxpX/HkenE2JttzQ2ZxfD0qS4If4VhD8jh6hGwu1RUagcSdxA9ZKjtGwwHfD9kfc8Ui5UEJco1FSAMSEX8jLVWFeHq1aAXjL2t1kbPzr39H8yOQ20=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/b5/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/b5/5f53ebe8fd7159400f935c2e2427a0029f9849</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFNUFtLwzAU9rm/IsIgKWyiyEBQO8Y69WEd3t5L2px2B5K0Juns/r2ndRXzEnK+60mhm4Ld3i0vHlbtoY0irJi4LI03XsQxgx7DfRTNVMEe2Swc0C+SZwhpIeJxjGUgYA/fqQwypRc2VrqTIMFI8F96ECpCFknqmvZTFho+3naCInJV5K2DCnsRsyvGTaM6DXm2yUCh9HmFGjwnn7N+20PZhUG9dk5SCLmPKb+93sE0R3gFZ9B76iF4Jq2sgU2Go9V/7vYINrxIqzQ4wTeusXzOxvtmadAO/Oi89Nmc2oIDW8KwP6Mz4etOYRDX8+mTaghPDoGsT3tpiP6H7KStBe8sWh+k1qB4POSskh9oQ30P]]></data>
	</file>
	<file>
	  <filename>/.git/objects/b8/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/b8/c44aa191cf6144fa6fe66449a977d59e05deb1</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/bd/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/bd/122f93ab654077269a04ecb260107aca0462c1</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAEBNAHL/mJsb2IgMjk5AEdJRjg5YRAAEADEAACh1P8wZc3////a6fYQSrptjNMjWcjX19fr6+vIyMhQec6Xq9Ps7vYzbeUXUcf39/dznOzW3u/7++93rfuMre/O3vr///fDy+NKjP+BnNGltc7W3velvedfiN7v9/8AMb0h+QQAAAAAACwAAAAAEAAQAAAFqKAgCkNkRlX0jGzEsGSEwJE4ADggymM9TJOBJDLBVAS8AWOA6UgEHIul0fAMLo8apNEZKD4ZQccAEVwOrkYgYHAQLgKFIYBEV+Zrh0YAcbAZEQkmeAYFAhQEawaAaA9sbAUDjw4KFmcqC4lrBYpvDBcIWRYKBA4LfAQEGRYRBysIAxYZiQsGBgusCTMisA8IGgsXEoC6LBafEQMlERfFMAK+BwkHB7sjIQA7d5N7aw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/c1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/c1/4f8d0a5d3adbb82235b7f70eebda6c7f2ab2a4</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVbA0N2UwNDAwMzFR8HX2TU3JTCzWy81PKc1J1SvIKGBoD/s5o4PvyC7zg/dWqpbm9SQL5hpDlQe5Orr4uurlpjCUVhVre/i/eLj/r0Bd25MLs1K9zK9BFSUml2Tm5+klpuRm5vlkFpeADTXXfyP/ev4vlwiPQ4xTbVOzjWb5NmJRH5CZXFJalArXZrK0atPDbY/f3U+7KtG8y3jKj40uCmjaCjLBFryboljwj6vTys8/Y1nSB/2MqZeE16CqTM4vSy0Cq510+3OW4eKTMhvlA09+35pr078tQRhVbUpqWmJpDsTpjZv+8EZdqs0MD/L0Fcu212W3WCCJVTXYx2ALFl63SHENXfLUTCimia22rLDZ+JY2upac1BJIeN8PsLARtltRe0W6bsrfua2C/61yn6AqBkZRSUhmCTR+rqxMmjhlp+U9rbRjH/SuxE7nqvAIQVVfnF8EcXru54sHCxIWTgnYkMjyo7dj/4UbN5lRlZak5hbkJJakxqekwh30eI7i9rvy32cdE7ma9vWd4Ae7jUxoQQnXBXIZ2Me1fxTSn+6Q/xL3n/+2wjLbRyc3RKxAsymjNDcpLzEzB6y+UETd1p8h7rSUhfNJ3cav3g5W8YdR1ZcW5OQnpoAVlwv7hdQunOWscvFW24Tlpw8w/WW0NTEAAoXM3MT01GIGtScBx26vWuuxIfvjKt9Vxs8k0zu2QhTkJOalM5wqO/LDK1Z9b0ZazKMrfWJ+Tqd4iqDSmUkMBwWvJER+nBbunvmsq1YrRGTZvhk8UKfkppZk5KfoZeYVlyTmQBx+U0bqsPjMm4yvbf0btSqX1dp1mXOiqi7NQ1a/NT749Yu/hZEO/JNj9FTUFzDNn+GJpr4gvSgxBZIWpG7/s5nDdp8p+dcsvs1lG8J44nfthLgUFuTFDD9aBY8kvN3/9X3r2u98n1ULPSvabAEHqYUj]]></data>
	</file>
	<file>
	  <filename>/.git/objects/c1/11d46059f196574769e68a7d2a5414a6be980c</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTAxNmQwNDAwMzFRSM5JLC7Wc/YNdssvyvXMKygtccvMSS3WK8goYOjKPFThZJ4g+kj+Qbyd50G28B2Mc3Fq88xNTIfq+xajeXthpanf6rmH3A/f5TfodJxtj6LP1xlkCdiOBX3VTjM5zd/Khr+NVzK+lcV4InkrFrXO+Tk5qcklmfl5YF2tpRYZCn+kOb8yhN9y/fdIqWqXeCWKrsJCkA2hBTn5iSmpRWA9fTr5TmI/p/zrdY6YYuP9IXW9wPwlaHqg6lNAekHhAdbXtuK2QuSTonl+x/1Oq1/56CdwZlE9Hn0RGRDrtiSG9wh+3aX09IrmzqsR0n5lG5gCTQyAQCG5uJiBmSuy/RhPjLyrBZvaDg3VX63fJM5DZLOKGbSee9p0X9lu/yG55Vumu3GP6LJtHACG96X5]]></data>
	</file>
	<file>
	  <filename>/.git/objects/c4/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/c4/8bea239336d4dabeb3953704255f891b073228</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/c5/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/c5/d31bd00cbd251c7ba180f611038001699caf12</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/ca/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/ca/76c4f84a5d27bd68665ce2d48e164e42ca0c72</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA2ZzA0MDAzMVFIzYsPDdYryChgaA5Rdni6rjrwrtW0HQ5isuc99yjoAQBAuA9t]]></data>
	</file>
	<file>
	  <filename>/.git/objects/ce/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/ce/62b0fe3dcc3f8001cdd5fde3928827dc28cef4</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA0MDNjMDQwMDMxUfB19k1NyUws1svNTynNSdUryChg0Fx8hc1/0v9jwntU2G9Olfbc9D9tHlR5kKuji6+rXm4Kg0ZVkKnzK7Mbu5R6z2z4t981y2r7HqiixOSSzPw8vcSU3Mw8n8ziErCh5vpv5F/P/+US4XGIcaptarbRLN9GLOoDMpNLSotS4dpMllZterjt8bv7aVclmncZT/mx0QXofrDTYdYUZIIteDdFseAfV6eVn3/GsqQP+hlTLwmvQVWZnF+WWgRWO+n25yzDxSdlNsoHnvy+Ndemf1uCMKralNS0xNIciNMbN/3hjbpUmxke5Okrlm2vy26xQBKrarCPwRZcuv3y4vxpHuyiDoKebioGCccuzgxH15KTWgIJ7/sBFjbCditqr0jXTfk7t1Xwv1XuE1TFwCgqCcksgcbPlZVJE6fstLynlXbsg96V2OlcFR4hqOpzM9OLEktSfSPAjknsr/6k16DEuanK5U1qL9999Wueuqjqi/OLIF7N/XzxYEHCwikBGxJZfvR27L9w4yYzmtLKvGSwqfkPbNfutYtSmcBuweq9LPurrWzfYlSlJam5BTlAZ8SnpML9+niO4va78t9nHRO5mvb1neAHu41MaLEE1wXyNNim2j8K6U93yH+J+89/W2GZ7aOTGyJWoNmUUZqblJeYmQNWXyiibuvPEHdaysL5pG7jV28Hq/jDqOpLC3LyE1PAisuF/UJqF85yVrl4q23C8tMHmP4y2poYAIFCZm5iemoxg9qTgGO3V6312JD9cZXvKuNnkukdWyEKchLz0hlWfHyauN/qvNvFWjuOuqkiDo82yb+HSmcmMahGuq2VZDKs+W8ircnZtCjY1yP/ENQpuaklGfkpepl5xSWJORCH35SROiw+8ybja1v/Rq3KZbV2XeacqKpL85DVb40Pfv3ib2GkA//kGD0V9QVM82d4oqkvACaEFEgyk7r9z2YO232m5F+z+DaXbQjjid+1E+JSWJAXM/xoFTyS8Hb/1/eta7/zfVYt9KxoswUAO8SlPw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/cf/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/cf/7602e97b1faabe6b9e9b42a341543a30be5bc9</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA2M2Jw93SzsEw0YDBg2MzB8P//fwYGBiA+cOBAAwNDA0MDUKAByMIBFH+yMDIwcDDogORBZjCw/Bc46bl6r8Xrs7v/J2j0pWTOy1i1Lv7BvgKdw+kMdyrWvS8P+GzRfE5B4FGAmYLDBGWjYo+nl3bUPGJjatTkVLnXEZLzTV03LD/poMIq4/qZz9b8OpaX1nu0pqxA5f0ctrjwouw6Gz/rzGrVGC926+KuKKVea3aWGTUZLcLJUxymz2BhZ2Zljlg+L3raosU1rCzLWH0yV4evXWKxkcV7M8NWld6FO3dtqIlgnb1KceqR8A0nzTef5Eg6GHRp46z9+4Qirgcx787dXOqw+/Zs1mc2F94yvd7mtfTl+ck9N36++Wmdo3/7fwHLm4fpCgzNzLUnrF8wJTg38os+ev1xQhJDuzjnLaeIiYluvcLiPxknSuS0nZysE7Qq5uSmpaenGySfqpFkZLAGAB7BlBY=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/cf/2268748183886436fbc56e97b51d15b2be9265</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/cf/a27ed309db4fd580236c697948e662b34620ca</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/d2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/d2/dbe9d19f9648071540114946243060c6d19957</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGlVmtr40YU7VflV8waw0hg2V1KS8naWpZsyhZiCCTQhbCIsTS2pytpxMw4iSn57z3zkPwgbroJOJaj+7733Meikgvyy8+///bT9GO7bs8IEUsSvytqXes4SQh/FOZD93Zo1kKn2cWaF98/FQXXOqZzWYrlltzyuq2Y4ZpC6B8IEKK42aiGBKHPQoNhe6mUVNdsxePEqn06wxcv1rJjuzFMmVu2+MJZyRVcsFwHDHxHjqnpzY46DVesWYHAFvmOmIyWrNL8BWWyNUI2mj6jqiMlo1hozU08bJlitb6jnpLDHv2WJB+N2vDz541dNuVxYMexheAvZGN4Y3zw4MFnMiG3l/Prq0+3lzcnpPazgUjBNayENrs0kFmfI7zvK+bNDPtsgY0pxbb+/VIqzop1fKyLaSgL2fcVj4ZKPvTCMB9F1AhT8Uo03ymZZZ31C2g0/Apv46EoR6SvYs5LYWz6PXQsrbcxCk71zEFj5wLUQNJlvn/QomJazwYCjlonBjQZeb9KXnHzA455/kPXQo+k2Yqb/J4pwRYVjykra9GYNa85TdIswP7P2kKeigL4muithkMTr3O8EstjxAVriY/JxkW9jJVHDC+mIvRc5VqBKU62ckP0Jvx4YI0hRhJvhtimJl0p0b4hRbYWb6ncW9Nj7ffJCVV+ZUISW3TfEpEdbyE9Qn/mS7ap+lYAoYMTeTebeTQ5YTvRIgfwO1p6Ifpt108+0YHQ55Kgd3al/S9rbjBFT9YIx5yyz1MWKbUTEbz2u/dX3zlv0ICWahWFGHWNebpNM/SBWDX7I2Kvt7Szf0KCleVuhOQOEf2A/LFOdsvDj2co7dMEyP1/+64DXmX/rXhs+INc/M2LHShPxnMCpjZMVGZ/m10radfobYBdmB7jDoZ6bNqKuuzsS/lNYufzkbpue8ZhLWEbWzxYOACLNQCLKMjF/OYP/IfdfTFHlzG38dwgDgh2I2x/2B1oSTMswL9EibHX2XHrD1GvRVnyBpJ+gdB7Vm24G9TvXfDRUG+bIt+oCq5EQ9aK8DtgD+NtKVYwYFGbKymNpccJGRM6qYvaeYv52RQTVlWuE1xgBy4pXkvD8xU4uNra4Wn4o10rwalW8SVXvCm8Z/QZftFq5zWdMrIG+2xAx73rYzrAbYN30MpVw6oBwd5GNmaDHOkdZDfwbzphGYCNCr06TGRnYhf4iTB5Y/dNDi4bYmFvsoV8PB3mIb95NsRQkBcjRDZ61j5ShzOxjENFhL6W2HMlrkjgz46zgMI0az3q/YFhL85OppHuPvQinZA9fpy0HWv2Dx/fDRbTaYZS4lT0ynqSv1T3GuVZyt6hdYbNEGNG5BsjKn1+bpd6LcuNXem4cfH8ipsMhlDVM0znKHI+0Gkp7ok224rPBkDtSjSpke05ef9r+/hhkE3bDMkKd/Px3VOLlcIlNP+Kqu3dPHTu3xO0g70DyVLJmhw60aE53Ajh7rHXJ8BAwt3T4uhYsOI72YhUG1hKuxWFF4VUDVcpugRn0ZhOJ202nSCYDHiLnv4FZU/dYg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/d4/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/d4/a9629194b939de2a66c6f02ed45d970a784854</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF9kUFLAzEQhT3vrxihkCzY9qIetlqprYIHpYeCB5GSJtNu6G52SbJLi/S/O9ndtoLiIYQM7315M7PKihXc3F5f3D2UaRmlKBRazqaF8Wh83+9LTMDjzg/LTGjD4lGk18AvZe5yx+MYcKd9V+v5VLv+eJqi3E6kRNcIviIAi76yBjrBTDuC7Z+sLexcbJAT9BARl2vn0PNeKazI3QfLUWmx1Ip9xnEUOL1jBe7Bebu0SCCJvFOyK2B0/vKPyH0CkPt1+qwzTBJKZjXW+Lifb/kJT4EaOUVqazG9Q4BjhP6Ygi60z/CcthZZhRQ1eH/oRN00GGoo0+KcrtMH+YEOZg7pan9plGxiAMOQoJCysqgSeEeQwpjCw1obBWHg0MxkAAu7B7GhHQ1YizxEDfJ/4FvR+uFlBgoJiuoXCmA4hFrYpary8thv2Nk3X+Ww/g==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/d6/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/d6/042d0caf4c4738106cbb2d1ec0de6c5fee2228</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/d7/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/d7/53f510b6baffad3531f912902d9f5b5f113972</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0MGFw93SzsEwUYBBgmMgAAv///2doAJGKP1kYGRiYGXRAoiB5BibLOewrq9kZlVnO2kiG7rZYz692yGPaUo7eRq0lTLe2vZZZnD1nl0HvZLPb0p0+LokvPApLVDxPG212VONisAYAO+UkDw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/d8/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/d8/9daaa0298b0585f92ad92626a52b5c0e641e90</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGljkEKwjAQRV3nFLMXZdIkTQIigjsX3iEzndBKtSWmgre3iDdw+eC/z+Ppfh8qNC5sahGBpiP2pNGllpDbnASFtKGOIllOWShqkmjUnIo8VjFaza0j47KJJluyre8CG8KM7H0MIRvtolZpqf1U4CLpsTv3ZXjWae4FzstLxkEKHG7MJ/7RnuQI2niN1mJA2GKDqPjbWtfxPy/qOsFcJMvaz/IEekMnOS1jVR/ovlQI]]></data>
	</file>
	<file>
	  <filename>/.git/objects/d9/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/d9/1c1ac31799d901eb3d4f812a79a67d3e8a3709</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF9km9v0zAQxnm7fAojVbKDWjaQitBGi6qubBXNVmhBTAhFTnxJLTl/sB1ovj1nJ+kYL8i73D333N3vnKgqIW/fXDx7974+1IHMCHueFqYwLAwJHKW9CoKRSMiMjOxBmsn8Bux1wsIrjMrUYvwOfl9zy6/xT1Yl1y1DPeaDUaaEQQHXmrcsOKNSkDX5uHogiy/7ezrGSFopBb4uxuSSvZ5OQzom5+fkwwv8ZJmT+8+RE2rgFkTMLVl3lX0gaftAU4uniiFwUlhpFZyaoGldGelm7h0yqaDkBZx92/gWlZa5LLmK/04EfjPzUzkijsBkvvSj7HmiYPdpw5BeLJK41pDJIwvJS0KLSjQK4mgZgZDceEODe8qiVpUARsf443GF4x4XLVpsQslsTuj+YbuaRe16t4hoOJCfzFdHSBvrei484REW+Om6Q+3AbnEG0FCm2KLBVlyYuOb24Lp1orQqM5l/f5r94VyCXtFttwVdSGMQFqMRL3kOZNgGzR5DpNuQOge84ijViHdGHJPGSmUuL3OwcceD0SVmnXRQDixXv6C0XfrVtJBeM8yzEMKnb3kpFOjeBGdwZp16TDKuDKBxv8N/a26rRqsWt/i3qBHSsosTKnz4d/g6GJ6ot93wMmdUlsZyfMbikSpKv4L2tEJ3sD8z3A0k]]></data>
	</file>
	<file>
	  <filename>/.git/objects/da/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/da/a43deb119a2a571447568be0d118dcca57cc70</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGFkUFLw0AQhT37K0YoZAMNpScPajwUehM8eCulTDcTs7CbDTsrtoj/3d3E2A22esgls+/Ne9/std3D7XJ5df/YNd01gKpB3EjDhkWeAx2Uvwt/+4FQzOTFrEOHhjeZtFqT9Mq2O1Vl2zwPrz7CBzA7jeABWnqHp9VaaVr9KC67xHUTh6LUFiuRD4Nh6hvFRckGnT8WJTKr11YkgbJ5miGVLhbwXSAkQ+fwmDh/BnfSTKr+sytfKhs4cLClQ6dtRSKbxxxncUWLX02jdhKpto5QNiLhyWEHIKf1wp+IfoQ/gcebRBsebi/e43Sy6Ddkizz64wfP/5DzlDmP9c7rjDRUKeTdQOfEqZfFvfEUsrHj4mdnJTG/kOk0elpbJ7KKanzTPhV/ATII44E=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/de/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/de/f0eba166570d215b3155e7c486beda635f7b1a</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA1N2Jw93SzsEwUYBBgeMbAIGDAwGAQ9P3795Y2hinTljIETmEInDNn3lpDA8P33/8/f/597/Fr//9vXbpsa0vblGwJRYa2oB6GIIbIpUGBDAyBLVHv9x47LvG/8hpD4NL3kVt73p8TcGQoPv7fMJBB8/lSp+drGSyiFOf9Ly5kELg/p/j9sZbz//9nntu7j8Fy2f/vicf+7/v+f9nz/9PubX3+n+H+FAaLbK91//+3XZtz/f/e78+jtv1P3vefoS9qCkPU9///WxiCrt1/HsTAECXBIOHJwGCR/P//f4YhDhR/soB9oAMiQXHCwD6zwaapuaWViZedhY9fybKvv9+a28qKS5BHS1vHUFxcTVPS2srC3p5fzHzlqpWC1hYWnFYczNZbt2132Llr9572Tj4FEbvDR44wTp4qwqNrpCpjamKgoci4eKm+mJCQBNtd1vuM6zduPvqUcc+L3fu6pIVt33/4wHCCS5jHWEpFVFReTlmPYc3fFwWH2g42myk4MCj4XWuoEGBcMltDQYDBGgBAgaEc]]></data>
	</file>
	<file>
	  <filename>/.git/objects/df/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/df/50383c133ea87dd41b7e94fd9d8511ff3a6de4</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAF1kMFKxDAQhj3vU8xCIcmheNCL1a1I1ZsoeBRZsunURNOkJClukX13k9gtHvQQSP7MfN8wO213cH52cXJ1PchhBSCRt+goaawJaEIZpgErCLgPp4PmyhB2GatUB3Qtet97yhjgXoUlLYJUvqwbieLjRgj0ueQrNgE4DKMzMJfcKh+R051z1j3xN6QZfVhlPlXeY6DFwB3v/QvplMataskrY/H/B1ekEDbw0NzHS1W19hk1ivBokHLn+ETJp0SHBDY1zEFEpNdf3KxPYwLkaVVH18pvzag1zaqsPsoBclbWbXSGefjUi0JaePfWbNEI2y6j+DFvI+uDG5EtvuP+AA5RnM5/DEy7+k34BtnVhMY=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/e1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/e1/1fca1e500f9aabab97746bf6d7e2215bbc6228</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0MWPQSCvNSy7JzM/T0FSo5lIAgrLEIoXcxJLkDAVbBX2NmGo97ZhaTT1tfb3UitRkjZT85NLc1LwSvaT8lEq9zLy81CKPEF8fTWuw3sw0BQ2wXphhIAMLEotAGgryi0t8U4uLE9NTIWqiDWN1FNS11KF6a7lqNTSBbAAV2CzO]]></data>
	</file>
	<file>
	  <filename>/.git/objects/e2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/e2/45ddfddab4cf171a5aaa97994980f7a9f02fae</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGVWFtv28gV7rN/xamaWA7gSE6yeUlkpa7sbFxEu4YvBYqmIEbkSOSW5BAzQ8vuIv+935mbKCcp2oc4wzPnfh+tarWitz+9ffOH2Yeu7A6e1aLd0CkJrcXj0cG4U8ZWrbGirsd0OqfxFQB06SG0lMaIjZyMjz1m3+7hMlhLkD5mT26uHfQDnWlJj6on02t5wIetaC1ZRX1rAiuyZWVoXbWSGlX0tfzAbBM/WXi9lu6O7qIGsnBaBSZPsO6lNpVq6bmhhODQ+26jRfEEOwJZrx0l40+nNIZShTS5rjoLll6ZW1bZa0s4bWQrtbCyoNUjLQ8X9FHkVulHcDgYW7HKKisb40kv3REWMhznrgZhuLtNn+FeOZnh9tfwEe5KWXee5Sc+sSiptdIedsHHPwYTRNFUbWYrW0t/u1BNJ9pKGjrjK7oSrayBPHaY/9VcFmtcTOGtRrRIDzKdzKt1lZO3kxVkWdEcL/PWicddroqnV8Fup0GeI+kKCe1C5M8chM4daEJXtRRGUl7K/F+sh6ZO6qYyHHCTMnUvT/8CFZGAHF8jLY2WXu3khdGQhctOCHBp6WPMfjwYm37VVNYbc+PP7LGuqx898Mwd2ULR5vCnq6eFPwOqpUFSyLoygcm1B5CD7BAKaUVVh6BHnAgEWtevQFF69lfhA/C+3bu5S59QniNbUEy3oO4QAnoja5lbUm1IkpvdN27XSjcpXz2DFN94HSxMaNlaq8bjRjuiCuSuIiGnhMdb8CmCC7kWfW0H/GJ6n/ubZBFBPSYLFPtwF4fv3dDouRkRapULG15CufdGambWHIy5XRWKWmWpFPecEHKQJ3tpElg4QX//v8miuSw7q0LW37Ei+IiXg+pNlcTlRtzBY6lwc0Gqu4JZ9+jL8dblL4zwTr7hExgb/J8hMXZQOhRN9544WQS1cusqOqHmqsWw6Adc6JAikGRR4XbD2AVSxwa0c38GFFxdJ/TiziCDDWD8eJNxGJ0X4y3Hgv7x3PyT0VjCgMMFPhOLvivQSDO1+g1JHIrnzsEowsCh0/K+ktssIFz5zyggZHkntGwhKPjlyn2yfM6LTOkCYVqFmv+Vv9D2v7nOikpDkzQyPOIOGNm5lpmhhWUdWqk3nsNoONfIwSKqM5B1EKGBnMNil6wAJKRQMztusVb2eJlSbSGRDQ3RBwDiGGCo0Kor1JaLwhs9QM/WlTY2q+V9bHE3Q1J3S+4WrQStMbHYTzam4TwcZNyqt9YVopdZtYV8yDi9kpKXDHIZx6DIGXWT5U2czSgcWiCLRbVpaanaCk03oTLaoCs9xaOP3LAi34ScyQYd2fvpuyTkEfYIEUM3239Alq6/S5SBtArLxjcSIykdOSw0uwcbF5cX+9qHrjfIrWE2uOL6hv2n2+XnxIV9a7eVtTIUJrv3NgCi6gEh9WlvcsDa9eIjcQ83ilWNpK1kXZh39Psz19e+HuPU6/qrU98P3ewHyw9mmatDLRuFgt9g/ZRYtVzXuHYwCjC6u94ZIlsWnImu8qgX7pvOri5haxx+2Q+Gn3zolA6FcuHPsB0duhJ19W9ZZChNEXvKpyu6STd+0WZ3cj3VSoSmch6/WLizx1vtlVu6ZTcFwU/mLPgF2FlTYY/dNZcwqnlCeSS3oMVd2yPvxqp3vpf00QXiqSSPkVmVdarreUP12N/I+TLm1Z1juScxUcHuxd7QSF9sd17iMSJrtfHcZ309P5jV1fxvYX0/mZxMXtFLekW/qHvZrNAQX5+8ej3B+wSjRtR0jdmCZXAym4LqYDYFAzZltxofzMo3c96PZ9M3QOjmt4pyZAymW0iSYx759PtyscR0EQbNBfnk+jYGwOkI01zTIsHo8nyUEjrcxnIcfZ3QbSh6fhXw4oAFGamBp8CEeC/AYkiiNgqN1hjowJsfqfVAqIEEQ6ivkpuxaAZX0Ac0LdY4hHmnJp44gBvJ6OEJkqtG7AQ6WY6ZJ8dY6jFbeHaAU0P3lUD1NXnjHMBDQTTm62zawWHlT/Pbsm9WLW+ksyk+oxPx7nMM4uVTP/qV6HRkI/kIVhW2PH319oRKWW1K647rqpanz/jvy/lGWkQUeX0vr4Qtj158pW1Z5SUoEbI8ioTOeLM4Lwg8A8gPVXayV7qb7/ma4ytarEJVbvEKcE/CqvD73LTvuCbNdMCEI4UdEBq1osHLoVR9jZed3ECoC8woUY2eCmRZrBiINFpm7MpodMmNwbPdfNbPw5MOiTv3nLgCiLgGnLN8XnuA99kQYtB63rkXzUohXxyFS5BvUdEVJB3xPKZRmAkj1/1Z2UY1GKcvBkXkAr9AzekU8+hSxMhZmOLK+etiwej8IZzvvKt2dfU/5gNq6NJySRrvR46Ay0jskxr5ayg50oRwIynP3a4FipCNWEOT4pdr15paiec5HoDY6AV84AhQygOKY4fHJRqjiPlBX8bThDTtkJXcFR+RIdiDajnB6P0yDskD54a8vLlekLBWV1hpJPuECahq+LeU/UaAzdcZijc3VCIOKcbinlAUzA8FDwtDEDAfuLySwpN9Tm9OTqav8e9HZuxzS1wIdN3DIL/AA98+y9DzSoWsx/QGBsrUuxa+wCMAhYygwXhno7OfjmypVb8pEQaNjhOW5BfDYDJVit/n0CPXfevassFaCdrl4iP8T0hc/fi0dpCjfHkDZx6FtPY1FC4uHrBS8u8F3729xMoZL9xIcUPkpu94B4BafpCc+QWdM//nq8/HMBAt36i13WKH5vbfaXWPNoOHlHlZmfS7BZqYj7jb2kLt1FUOhdwu7zzFbzc40uTYAhupo2/ezBeqe9TcO12df/ZkSafd7WEOxPc8LU+O6a9StC8XpYYjVQd9Fz1W9wrFOhNUark+HfF6a9W73/L8z43SQHyJ0dxheE0wSkbzw9q+//7d4ca+n03FHEN66QjDOr8I5HQGQ65ZYfzUBL/gZwCp7/HbXWycw1/SSlT3SsoWeeHGeoFfCfl1xT5OqpbWdu+m0+12O9m0/UTpDWa/855Jh0lpm/pPCMto/vMvd+R+I8kpeUvMfRE2Paav2GiJnq18AGMgVhJbFpIaP1JunHy/Vjm1xwcv3v8Hixgs7Q==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/e3/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/e3/9c21b7dd1ff79ac614d566f5ee11f03eb102ac</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGFkUFLAzEQhb02v2IKpcmCUgQPwmpFrDcFKd5EZLqZdgc32SWZVpfifzfdbouHgjklk7x575ssqnoBV9eXZzd3TdkoXpph4aKLJsuAvlnyVAIzhJGUHC+mDyUVn/dFQTEa/VxbXrbwSq6pUCjqpJlMYE5RAhcCUgNaxx4a9FQBegvrSCHCF0sJDQXHMXLt1VYNAsk6+IPNjGNq2T6GUIcXXJEZsT2HUYMBXUyb/etU62M9oV8ZjV0uS57Jpiy5GuwJflQHkcxITN/kTUsfW79nMB7DMB2lPXmdwVZBWr3ZjCoSOlCfVCTrQf96Tq7e0IyWuK7kH1EKelRZDlSkuDtwbffybpr6Lz9gCNju0IU39CG40HA7hSPc7k9y1Y3hF68gozg=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/e5/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/e5/8487f3dc5cc80ebfcf7c6015a4fd303f59e816</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTA1NWQwNDAwMzFRSMvMSy0tyMlPTEkt0jXWM9Ez1EsuLmYQXGK2IJfBTH2xiPyExsBZ1h+X677CpiMtswKsPn39knsp8zpNtLQ9fwQ4l9m9Wf5qFxb1YLVqU73/91hLbq+SOSbe5BQrszmUaz9UbWZaUWJuql5FcbFeUWpxQX5ecSrUUVnFDA/lT8kF8M9avXp6Sfa3648Uo/ckaUD1ZRWWphZV6hbklKZn5ukB1UrF8ajkpnO3d6yyP+CtKK6eInk3DEWtHprHDUC6ZC2Z5xeWVfwWTWk6Wyhps1/IqPIOAV25EPuSN10KKJzPLlL1o6KrcGsOq6Z5hxNenaCABtp4pPuV8mSzK7f2bZ5qzqIa3ynNboTqJ3R3gvRB7Yyes43PUe0Vd7rh5T9s9/7u99m9lAtqJyg+M/PS9dIz0xjyd5UnzDvKP2uzxUre1D6x3aw7LrFBlRUU5SenFhfDVNbMDPAT2NC65ULzc3fbT3l+8n7nJQB0S8vY]]></data>
	</file>
	<file>
	  <filename>/.git/objects/e7/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/e7/f5cf0f53adaa5f8d8bad7c230ba9cf6f6a8c20</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/.git/objects/ee/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/ee/942170fe0a893a4e4f68a662f02f6895d213ac</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAG1lE1P3DAQhnvOr5hKkWxLXRA9tbtAhRCtOBTRQk8VWk2ciWJw4sj20kWr/PfazhIC2gNUqg+WP+bjmXfiFNoUcHDw8fO7wy9d3WUAqgL+XjaucVwIoLXyiyxTFc99rdzs+Bv5S0sVWWolcUYtFpqW2Cn2ASrUjoTINikMV86R53mHFhv3m0nTNNiW7CZYAEQbAPdHeVnvsknXgxGAREfAtHKezdNF9M0daZJemRaO4PvpV6VpPi/NVTrlYjEaBnjllmgtPvAnp0QR4zyyDOtceWrcJGLaX5uTl+5P8QHGVIFKotYFyrsQIl/+PPvx6+zqOhS/PWU3U7+o9eggtpoMHHGuCUuynJ2a1lPrZ/6hozl4Wvv9W7xHJ63qPJtUGp1I1mZCsQeMM9iDla8+LUPPTEn81pn2cT3Iwiy5lfaOwdExDBKI0P3gLBZsStwDhR7DJmaKY1J53O4mxq7TSmJs1f56FrO/hN5i/wvkM7oRpx9XkXfcbMbVm1if1ZkE3iEhWWtsEpBdGIifDVRmFT54MenQhCu9rChaHIUlvBtKiSZ9FqY3iJkAXwF23t6jVmV4UFonrj5L+kRd/kO6k8tzuDAehr/EoET/F0XgRTE=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/f1/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/f1/41ca968cf3a2e9e6d954bb9577d267eab3be20</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGNkm9v0zAQxnm7fAojVbKDWgaTitBGi6q2bBXNVmhBTAhFTnxJLTl/sB3WfPudnbRjvCLvcvfc3XO/c6KqhLx/d/Hiw8d6XwcyI+xlWpjCsDAkcJD2KggGIiETMrB7aUbTa7CLhIVXGJWpxfgtPCy45Qv8k1XJdctQj/lgkClhUMC15i0LzqgUZEU+L+/J7Nvujg4xklZKga+LMTlnF+NxSIfk/Jx8eoWfLHNy9zVyQg3cgoi5Jauusg8kbR9oavFccQycFFZaBach2LSujHSe+w6ZVFDyAs5+rP2ISstcllzFfycCv5n5rRwRR2A0nXsrO54o2H5ZM6QXiySuNWTywELymtCiEo2COJpHICQ3vqHBPWVRq0oAo0P88bjCYY+LFi0OoWQyJXR3v1lOona1nUU0PJIfTZcHSBvrZs484QEWOHdIr7/VFuwGbYCGMsUpDU7jwsQ1t3s3sDtoWpWZzH8+z/7ya3aCbr8N6EIag7gYjXjJcyDHfbDXU4h0O9Kjk1Qj4AlxVBorlbm8zMHGHRFG55h1UufZKY80l3+gtF367biQXhP0hmdC+PQNL4UC3TdBD65Zpx6SjCsD2Ph/am6qRqsWt/i3qBHSsjcnUvj0b/F9MDxS33bNy5xRWRrL8SGLJ6go/Q7a0wrdyR4B8JUNmg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/f2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/f2/684ace7a327af71d2e2e99d07f8e96bff37780</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0tGRw93SzsEwUYBBgWMTCAAT///9vYGA4cOAAkAHig4HiTxZGBgYWBh0QD6SWgdnGg+sOn1aTQzar8qTM3MmxP3qWJMzTOMUxRXLHu937TM7O+1y9/VvNK7Np/GXJJxlWqvQdadFxkn3O9mqiiTQngzUAhqkq9g==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/f3/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/f3/7bb09efe9a303fbd9f928b99d2c91913fdf3ef</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0tmRw93SzsEwUYBBgWMTG0NLW0tLGcOz4MQYGhv9ABAZAtuJPFkYGBjYGHSAbqFKAgYE5IIPrzroLDU7aqV0sZ8t3sCbUhLkGOFvNmRvG4hTDcXi7qE7exZ+vDxnNOntp8YeCJfE+Bqt/2hx9ttKF0ahV90Uew8wzaae1yx3vlh1+cSNiUdZuYQZrAMJjOZs=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/f6/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/f6/5c29dba179354eab9dc247c3dd0f3089419b3f</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAGNUlFr3DAM3nN+hR7Ckjsy7q6sG2TtBhsrFDYY3N7WEpxYyWlz7BDbW9tx/32yna6DQWkebEXS90n65FaZFl6/2j07ezcdpiwD2Kz5APjweX9h5hEu9eQdXI5iQBsD8fh6IAudEtYCGxItDRolOAMHoaVCGL1yNLHRk0ILtkMtZjIMXm8y6suIbfCGrLNlsRSLtS4CoFitst+cnEr8G06dAN441NLet/mAZFAAAky+VdRB73XnyGiw6PxU5iQryLUYsYLnec8T8u9opFfYJG/OiY70YOEcxDyL25J7CYSJlonFjNrV9f+Ej/Ot3kQagOXKHYv44i3T7FPFsvCTMkI2rXfO6MbxkEUFxR4Vdg4o7iBonNKKJxAKOZJuFKvciChD4IvOL9Q5P+MnDj2F6KdQJEUQMjAsEzw467/qBKXCJ5Qyv1B+DHuyDLM1fLsqvk84XDFDsBZjoD55Js2e64U6kfBr3EBl6Y77HMnVcLo72W6D83QLP97zhvhew2578hLaW7e80HvssQqTLYQzr3/WEEVPizhy5Jgd/wAshOTq]]></data>
	</file>
	<file>
	  <filename>/.git/objects/f8/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/f8/8511c460edbff5ef85adf70ef325714978863d</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAErKUpNVTAyN2IwNDAwMzFRSEzJzczTy8ksLtErKchhaF7D2Jd5TKBW5sJiNeHuvuJbK6cUoKgsyEwuKS1K9YFp+J2neSk0ObDx0aOv/7yeHXkxe6PyYhQNJam5BTmJJanxqSmZEDuWLfxv47hFeqb0IsGgpVGWB7NirlRj1VIMdtLyxk3r7yWLXq1+8WTHWSVWR9uauBlQ5WlF+XklqXkpeimpaYmlORDjlYLaW7k2WFwSuC31K+nHbQfpLVc0oOrB3swqZkj+XX36d8P/iv2Gau6PZyfu+jahwB0Aijxyeg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/fa/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/fa/2e79c3b38f3c05955e685e0ae1eebe2bc88464</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAG9Vm1v2zYQ3tf4VxwKIZQLx177pYAbu9iMdS0QA0WT7EsRCLRI20wkSiMpL8GQ/77jm16cpB32YUAiy8e7470895w3RbWBt+/evfnp/EO9r0cjgNlrfACs1pcfK1XCZ1k3Bj6Kgmsnd4+rvdCQF1RrwBfGtdhJzsBUsKeSFRzKpjCixpetNQSdc0mVqND49Wwktqmzzfi90EanJNzlrvokGOOSjMejv1Hb39E/d5EAvzdcMh2j7FmikTUEqJtNIXLYNjI3opKguWnqNBFsAomkJZ/AabLFDPFrWbGm4JmXJqhohNxpWABVij6kGIt16N2iY6q4NPP5U4ff9zd+79wAhI/EYBXPlujm0t+YEsa3FCuXHWjRcDKB9cqmu6qKgrsk5vNccWr4tRR/Nj35Z4ZBRvfP+G3qoqIs2zTGVDIzWD10Ti65dRtahL3zWqR19HKclJVCZgV2L6MuMOvOCS9QZj2MTk5OXDlcgmsHB6qMhVSKx3gavCtsi5LggvYZPLoT96iVOGC6oA01/V7mjblWRZpUSuyEHLbHRpUmjSqwsVgk9TDGRvJ7rADjKfmAkUazWLCYZ91XPKVl/d4qex9RN8Hu07KHjXgQnCCiOM33aVID1ZAcqA+uQw+AD/BukhwGkS0ISmhbfIBw1bfk7gYDSw7xJl+fFkahgB6qZEM1J7BYgq8A8eF6iX8PN/SrfDQpO27cQKWhsBb8LWiF44NFOwWdcowvyVu8ZoLZ0D3QUfMPi2vbf+ey9ennDzXzUmeNEYWez1E78/KUrFdrzgTVHTSTPaeMK+vcK50tLcI/OWl3wWyGdXDYH+r+zs3azfz114sv1OzTMUyBzKLqFKmQHAeJiMLrNC+2OIUBf/HulZvKCyHv0pAs0gwJ8zQhxP6FBg2K4/syEI1xkhB2RjXcBeVwqJu6VlzrqjHIxos3Xriv/jK8rAuckMXPXW0inGNwusTBezhbIlsjTacES2nHXxuVKY7WOY5FQDs5tYiPhv2sbD7W8EqYApmpn9J/j/gYCLZdeSW3YvcUC17etTZmaaepD4Pf7jl2h//iaCl2A8HUcuxT7sIEuq4FzieDpjzXpzb4xIYQ0PFMTeHlovq5cBupHZHvx2mhYf//NzB1gx9RcQynYaGwlANBV6WX7HGP15WQFpKWs755Crv5sWEou7ULrz+2CXQ4gVuNi5DL3C4Ff204uukt0pdC9oP9q9umV36ZdhzXNtBrDZbuv/C9bez2FwwXXiVtbk+R0TtHhwMqjVNxazdUO8hfVJUje1wFskiJrdf0tsenXZv3prQ8Fwl26otr6TH4hnMmDiDY4tU28mVGpsOuT8mr5fkM9Zatkc6VqM0SNW/1lJzPwvdwfsy2yAQHqjLWlPiTzY9+29xgEn84+IWEcdrIPWnb3fY4evwHG3VJvw==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/fb/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/fb/6e29d255635181e2e2f5fe4ae6c4e89bb123a3</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFlk8tu2zAQRbvOVwxYo0gWhpwCycK2vDEQoIugRdGuDUocSYOORIGk8oDgf++QUuNHtRKH5J3Lw8uCbQH3q9Xjp5EqIO8x3C5Ky4xlINvdHW+2hl6ATK5O1cN4tmS5qzF8M7d3R7W7AYgyF7ON9k/E6GWBTG8HhpK197ny1gVdMCowOujl4DhX4yJWJyXRqqxDXTZQOdvmF6rSc1YFCtjmlbSI+tKBCXx4Z8xVxVaHNTBWYQOFdQbdGu77N/CWyUDt9PsGem0MdfUaVv3bBlrtaurW8BAHTD4sk9YyvPe4hs52uJn9RiTjgsyxRUP6QEaoRBdXPKKl5Ct509A4rOLGj6W/HUd2EKQzhlwdOnxV4FBo4FtA12lWuy21NXhXys7n/XNs6EGnG8pVaIa26DSxglcyocnvH1bQINVNSL+xU37q9xNZB3rBHzo0qbFm6Xpm6LsjQaD5SfZ1usW0KNttMx3vd/pSKGbKHwC/RmaFLv/Uzg6dWUpgrAD/vN/vNykbF7vnFMhZ5hREoBPLMzNzsM4qvyhw9LTNJJgnR3LxJ7gGGQMev+i236Q7igzkivIznaScVvih7x16b4fQD8JsKjb2VYLVCyzMV+pfaCdldZUwIdYEOeO4mOYPVNpOHJ4RE3/xIc3MSkbt1oUNjey6Osk0nFhNic6YpoOO2fwi0lPKBo7l/3Ul65fCY0aVvOSJWBr8BYJ2Roo=]]></data>
	</file>
	<file>
	  <filename>/.git/objects/ff/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/ff/0e6c36ac0f13226607ef966bdc4ffcdffb14b3</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eAFLyslPUjA0tGBw93SzsEwUYBBgWMTA8P///4aGBgYQ+M/AAGGAOIo/WUAUgw6IAKllYLbm2HVHysBL/M4qnmgFowkXLsVKOwg8/t54ymDJrMeHXrOcedJmX3pln+Vpv6MOfzN6GB9qCFnMZ5m+6YoPoxCDNQCLGCiD]]></data>
	</file>
	<file>
	  <filename>/.git/objects/info/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/pack/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/objects/pack/pack-5ab4fc34a876ca5e96269e5000956132f7637b0f.idx</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[/3RPYwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADT2uQk07xYbbU0NTh7r4snqP4F1pwRaTtwFSgMGIEPtvVa7jMPkyuB+RnNKKa9wFrfvQKz7rxW0po8idqnjBSXgrhcWYpTXmdAAAADAAAAMQAAACUY1yAul94fiXbN2imKm2qUsk3nDfNGe0LhaJ9jcwb34nNGHYFIyanxg==]]></data>
	</file>
	<file>
	  <filename>/.git/objects/pack/pack-5ab4fc34a876ca5e96269e5000956132f7637b0f.pack</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[UEFDSwAAAAIAAAADlQ14nK3MSwrCMBAA0H1OMReopPk2ICJ0pbeYlIkdaBuJU8HbK3oFt2/xpBEBuRCtQ5OwRN2HHKk4jVPJWHqfHYahGBMDKtxlrg2uhFs3zo0fUu8zwbg/aWFqcJxemZrUL59vK/JymOp6gt4GY1PyPkGnB63VR1cWob9k6rKxMC7wW9Ub5p1FE6UCeJwzNDAwMzFRCHJ1dPF11ctNYShwXfL2QMgCgyQWu9tXs3ecsfNZxw4A2wQNqbgDeJxLzi3OLdbNTc5NTclMLOayRQFcXM6+wQq+iSmpCsGZuQU5qQq+zgq+YJUA8IoRL2NcgLpfeH4l2zdopiptqlLJN5w3]]></data>
	</file>
	<file>
	  <filename>/.git/packed-refs</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBwYWNrLXJlZnMgd2l0aDogcGVlbGVkIAo0ZjZiOTA5MzRlZjE2MWI2ZDRkMGQ0ZTFlZWJlMmM5ZWEzZjgxNzVhIHJlZnMvcmVtb3Rlcy9vcmlnaW4vbWFzdGVyCg==]]></data>
	</file>
	<file>
	  <filename>/.git/refs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/refs/heads/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/refs/heads/master</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZDg5ZGFhYTAyOThiMDU4NWY5MmFkOTI2MjZhNTJiNWMwZTY0MWU5MAo=]]></data>
	</file>
	<file>
	  <filename>/.git/refs/remotes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/refs/remotes/origin/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.git/refs/remotes/origin/HEAD</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[cmVmOiByZWZzL3JlbW90ZXMvb3JpZ2luL21hc3Rlcgo=]]></data>
	</file>
	<file>
	  <filename>/.git/refs/remotes/origin/master</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZDg5ZGFhYTAyOThiMDU4NWY5MmFkOTI2MjZhNTJiNWMwZTY0MWU5MAo=]]></data>
	</file>
	<file>
	  <filename>/.git/refs/tags/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.adminList.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CiAgaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCk7CiAgfQoKICBpZihpc3NldCgkcGFyYW1zWydjb2xsZWN0aW9uX2lkJ10pKQogIHsKICAgICRjb2xsZWN0aW9uID0gbmV3IE1DRmlsZUNvbGxlY3Rpb24oJHBhcmFtc1snY29sbGVjdGlvbl9pZCddKTsKICAgICRjb2xsZWN0aW9uLT5sb2FkKCk7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaWQnLCRpZCk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbGxlY3Rpb24nLCAkY29sbGVjdGlvbik7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZGVsZXRlJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWxldGUnLCcnLCcnLGFycmF5KCksICcnLCB0cnVlKSk7ICAgIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZWxldGVfaWNvbicsICR0aGlzLT5nZXRJbWFnZVRhZygnYmluX2Nsb3NlZC5wbmcnLCAnRGVsZXRlJykpOwogICAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VkaXQnLCBzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdlZGl0VGl0bGUnLCcnLCcnLGFycmF5KCksICcnLCB0cnVlKSAuICcmYW1wO3N1cHByZXNzb3V0cHV0PTEmYW1wO3Nob3d0ZW1wbGF0ZT0wJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzb3J0Jywgc3RyX3JlcGxhY2UoJyZhbXA7JywnJicsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnc29ydCcsJycsJycsYXJyYXkoKSwgJycsIHRydWUpIC4gJyZhbXA7c3VwcHJlc3NvdXRwdXQ9MSZhbXA7c2hvd3RlbXBsYXRlPTAnKSk7CiAgICAKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW4ubGlzdC50cGwnKTsKICB9]]></data>
	</file>
	<file>
	  <filename>/action.adminPictureList.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CiAgaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCk7CiAgfQoKICBpZihpc3NldCgkcGFyYW1zWydjb2xsZWN0aW9uX2lkJ10pKQogIHsKICAgICRjb2xsZWN0aW9uID0gbmV3IE1DRmlsZUNvbGxlY3Rpb24oJHBhcmFtc1snY29sbGVjdGlvbl9pZCddKTsKICAgICRjb2xsZWN0aW9uLT5sb2FkKCk7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaWQnLCRpZCk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbGxlY3Rpb24nLCAkY29sbGVjdGlvbik7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZGVsZXRlJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWxldGUnLCcnLCcnLGFycmF5KCksICcnLCB0cnVlKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlbGV0ZV9pY29uJywgJHRoaXMtPmdldEltYWdlVGFnKCdiaW5fY2xvc2VkLnBuZycsICdEZWxldGUnKSk7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZWRpdCcsIHN0cl9yZXBsYWNlKCcmYW1wOycsJyYnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2VkaXRUaXRsZScsJycsJycsYXJyYXkoKSwgJycsIHRydWUpIC4gJyZhbXA7c3VwcHJlc3NvdXRwdXQ9MSZhbXA7c2hvd3RlbXBsYXRlPTAnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NvcnQnLCBzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdzb3J0JywnJywnJyxhcnJheSgpLCAnJywgdHJ1ZSkgLiAnJmFtcDtzdXBwcmVzc291dHB1dD0xJmFtcDtzaG93dGVtcGxhdGU9MCcpKTsKICAgIAogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbi5waWN0dXJlTGlzdC50cGwnKTsKICB9CiAgCg==]]></data>
	</file>
	<file>
	  <filename>/action.api.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CgppZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZW5hYmxlX2FwaScsIGZhbHNlKSkKewogIGlmKGlzc2V0KCRwYXJhbXNbJ2NvbW1hbmQnXSkpCiAgewogICAgc3dpdGNoKCRwYXJhbXNbJ2NvbW1hbmQnXSkKICAgIHsKICAgICAgY2FzZSAnbGlzdCc6CiAgICAgICAgJHNlbGVjdGlvbiA9IE1DRmlsZTo6ZG9TZWxlY3QoKTsKICAgICAgICBpZihpc19hcnJheSgkc2VsZWN0aW9uKSkKICAgICAgICB7CiAgICAgICAgICAkaXRlbXMgPSBNQ0ZpbGU6Oml0ZW1zVG9BcnJheSgkc2VsZWN0aW9uKTsKICAgICAgICAgIAogICAgICAgICAgJGNhbGxiYWNrID0gJF9SRVFVRVNUWydjYWxsYmFjayddOwogICAgICAgICAgaWYgKCRjYWxsYmFjaykgewogICAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2phdmFzY3JpcHQnKTsKICAgICAgICAgICAgZWNobyAkY2FsbGJhY2sgLiAnKCcgLiB1dGY4X2VuY29kZShqc29uX2VuY29kZShhcnJheSgncmVzdWx0cycgPT4gJGl0ZW1zKSkpIC4gJyk7JzsKICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAKICAgICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1qc29uJyk7CiAgICAgICAgICAgICAgZWNobyB1dGY4X2VuY29kZShqc29uX2VuY29kZShhcnJheSgncmVzdWx0cycgPT4gJGl0ZW1zKSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtanNvbicpOyAgCiAgICAgICAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdlcnJvcicgPT4gJ05vIGl0ZW0gZm91bmQnKSk7CiAgICAgICAgfQogICAgICAgIGV4aXQ7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1qc29uJyk7ICAKICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdlcnJvcicgPT4gJ0ludmFsaWQgY2FsbCcpKTsKfQplbHNlCnsKICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1qc29uJyk7ICAKICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdlcnJvcicgPT4gJ0FQSSBOb3QgZW5hYmxlZCcpKTsKfQ==]]></data>
	</file>
	<file>
	  <filename>/action.cover.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CiAgCiAgaWYoaXNzZXQoJHBhcmFtc1snY29sbGVjdGlvbl9pZCddKSkKICB7CiAgICAkY29sbGVjdGlvbiA9IG5ldyBNQ0ZpbGVDb2xsZWN0aW9uKCRwYXJhbXNbJ2NvbGxlY3Rpb25faWQnXSk7CiAgICAkY29sbGVjdGlvbi0+bG9hZE9uZSgpOwogICAgJGZpbGUgPSAkY29sbGVjdGlvbi0+Z2V0Rmlyc3RGaWxlKCk7CiAgICAKICAgIGlmKCRmaWxlKQogICAgewogICAgICAkcGFyYW1zWydmaWxlJ10gPSAkZmlsZS0+Z2V0UmVsYXRpdmVQYXRoKCk7CiAgICAgIGVjaG8gJHRoaXMtPmdldFRodW1ibmFpbCgkcGFyYW1zKTsKICAgIH0KICB9]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CiAgCiAgaWYoaXNzZXQoJHBhcmFtc1snY29sbGVjdGlvbl9pZCddKSkKICB7CiAgICAkY29sbGVjdGlvbiA9IG5ldyBNQ0ZpbGVDb2xsZWN0aW9uKCRwYXJhbXNbJ2NvbGxlY3Rpb25faWQnXSk7CiAgICAkY29sbGVjdGlvbi0+bG9hZCgpOwogICAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbGxlY3Rpb24nLCAkY29sbGVjdGlvbik7CiAgICAKICAgIC8vICRwYXJhbXMgPSBhcnJheSgpOwogICAgCiAgfQogIGVsc2VpZihpc3NldCgkcGFyYW1zWydjb2xsZWN0aW9uX2lkcyddKSkKICB7CiAgICAkY29sbGVjdGlvbl9pZHMgPSBleHBsb2RlKCcsJywgJHBhcmFtc1snY29sbGVjdGlvbl9pZHMnXSk7CiAgICAkY29sbGVjdGlvbnMgPSBhcnJheSgpOwogICAgZm9yZWFjaCgkY29sbGVjdGlvbnNfaWQgYXMgJGNvbGxlY3Rpb25faWQpCiAgICB7CiAgICAgICRjb2xsZWN0aW9uc1skY29sbGVjdGlvbl9pZF0gPSBuZXcgTUNGaWxlQ29sbGVjdGlvbigkY29sbGVjdGlvbl9pZCk7CiAgICB9CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY29sbGVjdGlvbnMnLCAkY29sbGVjdGlvbnMpOwogIH0KCiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtY21lZGlhc19wYXJhbXMnLCAkcGFyYW1zKTsKICAKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGb3IoJ2RlZmF1bHQnLCAkcGFyYW1zKTs=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CiAgaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ01vZGlmeSBUZW1wbGF0ZXMnKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCk7CiAgfQoKICBlY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3RlbXBsYXRlcycsICR0aGlzLT5MYW5nKCd0YWJfdGVtcGxhdGVzJyksZmFsc2UpOwogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignb3B0aW9ucycsICR0aGlzLT5MYW5nKCd0YWJfb3B0aW9ucycpLChpc3NldCgkcGFyYW1zWydvcHRpb25fdGFiJ10pKT90cnVlOmZhbHNlKTsKICBlY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CiAgCiAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CiAgCiAgCiAgLy8gVEVNUExBVEVTCiAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3RlbXBsYXRlcycpOwoKICAkbGlzdF90ZW1wbGF0ZXMgPSAkdGhpcy0+TGlzdFRlbXBsYXRlcygpOwogICR0ZW1wbGF0ZXMgPSBhcnJheSgpOwogIGZvcmVhY2goJGxpc3RfdGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkgewogIAkkcm93ID0gYXJyYXkoCiAgCQkndGl0bGVsaW5rJyA9PiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0ZW1wbGF0ZV9lZGl0JywgJHJldHVybmlkLCAkdGVtcGxhdGUsIGFycmF5KCd0ZW1wbGF0ZScgPT4gJHRlbXBsYXRlKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJpdGVtbGluayInKSwKICAJCSdkZWxldGVsaW5rJyA9PiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0ZW1wbGF0ZV9kZWxldGUnLCAkcmV0dXJuaWQsIGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCd0ZW1wbGF0ZScgPT4gJHRlbXBsYXRlKSwgJHRoaXMtPmxhbmcoJ2FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZScpKSwKICAJCSdlZGl0bGluaycgPT4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAndGVtcGxhdGVfZWRpdCcsICRyZXR1cm5pZCwgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRlbXBsYXRlLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCd0ZW1wbGF0ZScgPT4gJHRlbXBsYXRlKSkKICAJKTsKCiAgCWlmICgkdGhpcy0+aXNEZWZhdWx0VGVtcGxhdGUoJHRlbXBsYXRlKSAhPT0gZmFsc2UpCiAgCXsKICAJCSRyb3dbJ2RlZmF1bHQnXSA9ICR0aGlzLT5sYW5nKCdkZWZhdWx0IHRlbXBsYXRlIGZvcicsICR0aGlzLT5pc0RlZmF1bHRUZW1wbGF0ZSgkdGVtcGxhdGUpKTsKICAJfQogIAllbHNlCiAgCXsKICAJCSRyb3dbJ2RlZmF1bHQnXSA9ICcnOwogIAl9CgogIAkkdGVtcGxhdGVzW10gPSAkcm93OwogIH0KICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlcycsICR0ZW1wbGF0ZXMpOwogICR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkX3RlbXBsYXRlc19saW5rJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAndGVtcGxhdGVfZWRpdCcsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FkZCB0ZW1wbGF0ZScpKSk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRfdGVtcGxhdGVzX2ljb24nLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0ZW1wbGF0ZV9lZGl0JywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGQgdGVtcGxhdGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKSk7CgogIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW4udGVtcGxhdGVzLnRwbCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYigpOwoKICBlY2hvICR0aGlzLT5TdGFydFRhYignb3B0aW9ucycpOwogIAogICRmb3JtID0gbmV3IENNU0Zvcm0oJ01DTWVkaWFzJywgJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKTsKICAKICAkZm9ybS0+c2V0V2lkZ2V0KCdvcHRpb25fdGFiJywgJ2hpZGRlbicsIGFycmF5KCd2YWx1ZScgPT4gMSkpOwoKCSRmb3JtLT5zZXRXaWRnZXQoJ3VwbG9hZHNfcGF0aCcsICd0ZXh0JywgYXJyYXkoJ3ByZWZlcmVuY2UnID0+ICd1cGxvYWRzX3BhdGgnKSk7CgoJJHN5bmNfdXJsID0gCSRhcGlfdXJsID0gJHRoaXMtPmNvbmZpZy0+c21hcnRfcm9vdF91cmwoKSAuICcvbWNtZWRpYXMvc3luYy9hbGwnOwogICRmb3JtLT5zZXRXaWRnZXQoJ3JlbW90ZV9nYWxsZXJ5JywgJ3RleHQnLCBhcnJheSgncHJlZmVyZW5jZScgPT4gJ3JlbW90ZV9nYWxsZXJ5JywgJ3RpcHMnID0+ICc8YSBocmVmPSInLiRzeW5jX3VybC4nIiByZWY9ImV4dGVybmFsIiB0YXJnZXQ9Il9uZXciPlN5bmM8L2E+JykpOwoKCSRhcGlfdXJsID0gJHRoaXMtPmNvbmZpZy0+c21hcnRfcm9vdF91cmwoKSAuICcvbWNtZWRpYXMvYXBpL2xpc3QnOwogICRmb3JtLT5zZXRXaWRnZXQoJ2VuYWJsZV9hcGknLCAnY2hlY2tib3gnLCBhcnJheSgncHJlZmVyZW5jZScgPT4gJ2VuYWJsZV9hcGknLCAndGlwcycgPT4gJzxhIGhyZWY9IicuJGFwaV91cmwuJyIgcmVmPSJleHRlcm5hbCIgdGFyZ2V0PSJfbmV3Ij4nLiRhcGlfdXJsLic8L2E+JykpOwogIAogIGlmKCRmb3JtLT5pc1Bvc3RlZCgpKQogIHsKICAgICRmb3JtLT5wcm9jZXNzKCk7CiAgICBpZigkZm9ybS0+bm9FcnJvcigpKQogICAgewogICAgICAvLwogICAgfQogIH0KICAKICBlY2hvICRmb3JtLT5yZW5kZXIoKTsKICAKICBlY2hvICR0aGlzLT5FbmRUYWIoKTsKCgogIGVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKCglpZihjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01vZHVsZVh0ZW5kZXInKSkKCXsKCQllY2hvICc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAxNXB4OyI+PHA+Jy4kdGhpcy0+Q3JlYXRlTGluaygkaWQsICdtaWdyYXRlTVgnLCAkcmV0dXJuaWQsICdNaWdyYXRlIGNvbnRlbnQgZnJvbSBNb2R1bGVYdGVuZGVyJywgYXJyYXkoKSwgJycsIGZhbHNlLCB0cnVlLCAnIGNsYXNzPSJwYWdlYmFjayB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiJykuJzwvcD48L2Rpdj4nOwoJfQ==]]></data>
	</file>
	<file>
	  <filename>/action.delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9wbGFpbicpOwogIGlmICghY21zbXMoKSkgZXhpdDsKICBpZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CiAgICByZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoKTsKICB9CgogIGlmKGlzc2V0KCRwYXJhbXNbJ2ZpbGVfaWQnXSkpCiAgewogICAgJGZpbGUgPSBNQ0ZpbGU6OmRvU2VsZWN0T25lKGFycmF5KCd3aGVyZScgPT4gYXJyYXkoJ2lkJyA9PiAkcGFyYW1zWydmaWxlX2lkJ10pKSk7CiAgICAgICAgCiAgICBpZighaXNfbnVsbCgkZmlsZSkpCiAgICB7CiAgICAgICRmaWxlLT5kZWxldGUoKTsKICAgICAgZWNobyBqc29uX2VuY29kZShhcnJheSgnc3VjY2VzcycgPT4gdHJ1ZSkpOwogICAgICBleGl0OwogICAgfQogIH0KICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdlcnJvcicgPT4gdHJ1ZSkpOw==]]></data>
	</file>
	<file>
	  <filename>/action.editTitle.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaGVhZGVyKCdDb250ZW50LXR5cGU6IHRleHQvcGxhaW4nKTsKaWYgKCFjbXNtcygpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CiAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCk7Cn0KCmlmKGlzc2V0KCRwYXJhbXNbJ21lZGlhX2lkJ10pKQp7CiAgJG1lZGlhX2lkID0gc3RyX3JlcGxhY2UoJ21lZGlhXycsICcnLCAkcGFyYW1zWydtZWRpYV9pZCddKTsKICAKICAkbWVkaWEgPSBNQ0ZpbGU6OnJldHJpZXZlQnlQaygkbWVkaWFfaWQpOwogIAogIGlmKCRtZWRpYSkKICB7CiAgICAkbWVkaWEtPnNldFRpdGxlKCRwYXJhbXNbJ3ZhbHVlJ10pOwogICAgJG1lZGlhLT5zYXZlKCk7CiAgICBlY2hvICRwYXJhbXNbJ3ZhbHVlJ107CiAgfQogIGVsc2UKICB7CiAgICBlY2hvICdBbiBlcnJvciBvY2N1cmVkOiBXZSBjYW5ub3QgZmluZCB0aGlzIG1lZGlhLiBUcnkgYWdhaW4uJzsKICB9Cn0KZWxzZQp7CiAgICBlY2hvICdBbiBlcnJvciBvY2N1cmVkOiBObyBtZWRpYSBJRCBkZWZpbmVkLiBUcnkgYWdhaW4uJzsKICAgIC8vIHZhcl9kdW1wKCRwYXJhbXMpOwp9]]></data>
	</file>
	<file>
	  <filename>/action.migrateMX.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CiAgaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgewogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCk7CiAgfQoKCS8vIFNjcmlwdCB0byBtaWdyYXRlIGltYWdlcyBvciBkb2N1bWVudHMgZnJvbSBNb2R1bGVYdGVuZGVyIHRvIE1DTWVkaWFzCgkKCS8vIFdlIG5lZWQgTUNGYWN0b3J5CgkKCWlmKCFjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01DRmFjdG9yeScsICczLjQuOScpIHx8ICFjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01vZHVsZVh0ZW5kZXInLCAnMS4xMS4yCScpKQoJewoJCWVjaG8gJ1lvdSBkb25cJ3QgaGF2ZSBNQ0ZhY3Rvcnkgb3IgTW9kdWxlWHRlbmRlciBvciB0aGUgdmVyc2lvbiB5b3UgaGF2ZSBpcyBub3QgdGhlIGxhdGVzdCBvbmUgKE1DRmFjdG9yeSAzLjQuMTAgYW5kIE1vZHVsZVh0ZW5kZXIgMS4xMS4yIHJlcXVpcmVkKSc7CgkJZXhpdDsKCX0KCQoJaWYoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKQoJewogICAgCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwoJfQoJCQoJaWYoaXNzZXQoJHBhcmFtc1snbW9kdWxlJ10pKQoJewoJCSRtb2R1bGUgPSBNQ0ZNb2R1bGVSZXBvc2l0b3J5OjpyZXRyaWV2ZUJ5TmFtZSgkcGFyYW1zWydtb2R1bGUnXSk7CgkJJGZpZWxkcyA9ICRtb2R1bGUtPmdldEZpZWxkc1dpdGhUeXBlcyhhcnJheSgnaW1hZ2VzJywgJ2ZpbGVzJykpOwoJCSRpbWFnZXNfZmllbGRzID0gJG1vZHVsZS0+Z2V0RmllbGRzV2l0aFR5cGVzKGFycmF5KCdpbWFnZXMnKSk7CgkJJGRvY3VtZW50c19maWVsZHMgPSAkbW9kdWxlLT5nZXRGaWVsZHNXaXRoVHlwZXMoYXJyYXkoJ2ZpbGVzJykpOwoJCQoJCWlmKGlzc2V0KCRwYXJhbXNbJ2ZpZWxkcyddKSkKCQl7CgkJCS8vIFN0YXJ0IHRoZSBtaWdyYXRpb24KCQkJCgkJCSRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKTsKCQkJLy8gdmFyX2R1bXAoJG1vZHVsZSk7CgkJCSRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CgkJCSRlbnRpdGllcyA9ICRtb2QtPmRvU2VsZWN0KCRjKTsKCQkJZWNobyAnPHA+Jy5jb3VudCgkZW50aXRpZXMpLicgdG8gdXBkYXRlPC9wPic7CQkJCgkJCSRteF9lbnRpdGllcyA9IE1YX0RvY3VtZW50Ojpkb1NlbGVjdEJ5TW9kdWxlTmFtZSgkbW9kLT5nZXROYW1lKCkpOwkJCQoJCQkvLyB2YXJfZHVtcCgkbXhfZW50aXRpZXMpOwoJCQlpZigkZW50aXRpZXMpCgkJCXsKCQkJCWZvcmVhY2goJGVudGl0aWVzIGFzICRlbnRpdHkpCgkJCQl7CgkJCQkJZWNobyAnPHA+ID0+IFVwZGF0ZSBlbnRpdHkgd2l0aCBpZCAnLiRlbnRpdHktPmdldElkKCkuJzwvcD4nOwoJCQkJCS8vIERvY3VtZW50cwoJCQkJCWlmKGlzc2V0KCRteF9lbnRpdGllc1snZG9jdW1lbnQnXSkpCgkJCQkJewoJCQkJCQlpZigoY291bnQoJGRvY3VtZW50c19maWVsZHMpID4gMCkgJiYgKGNvdW50KCRteF9lbnRpdGllc1snZG9jdW1lbnQnXVskZW50aXR5LT5nZXRJZCgpXSkgPiAwKSkKCQkJCQkJewoJCQkJCQkJZWNobyAnPHA+ID09PiAnLmNvdW50KCRteF9lbnRpdGllc1snZG9jdW1lbnQnXVskZW50aXR5LT5nZXRJZCgpXSkuJyBkb2N1bWVudChzKSB0byBpbXBvcnQ8L3A+JzsKCgkJCQkJCQlmb3JlYWNoKCRwYXJhbXNbJ2ZpZWxkcyddIGFzICRmaWVsZCkKCQkJCQkJCXsKCQkJCQkJCQlpZihpc3NldCgkZG9jdW1lbnRzX2ZpZWxkc1skZmllbGRdKSkKCQkJCQkJCQl7CgkJCQkJCQkJCSRmID0gJGRvY3VtZW50c19maWVsZHNbJGZpZWxkXTsKCQkJCQkJCQkJLy8gVGhlIG1pZ3JhdGlvbiBzdGFydAoJCQkJCQkJCQllY2hvICc8cD4gPT09PiBNaWdyYXRlIHRvIGZpZWxkICcuJGZbJ25hbWUnXS4nPC9wPic7CgkJCQkJCQkJCQoJCQkJCQkJCQlpZigkZW50aXR5LT4kZlsnbmFtZSddICE9ICcnKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkY29sbGVjdGlvbiA9IG5ldyBNQ0ZpbGVDb2xsZWN0aW9uKCRlbnRpdHktPiRmWyduYW1lJ10pOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2UKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNvbGxlY3Rpb24gPSBuZXcgTUNGaWxlQ29sbGVjdGlvbigpOwoJCQkJCQkJCQkJJGVudGl0eS0+JGZbJ25hbWUnXSA9ICRjb2xsZWN0aW9uLT5nZXRDb2xsZWN0aW9uSWQoKTsKCQkJCQkJCQkJCSRlbnRpdHktPnNhdmUoKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkKCQkJCQkJCQkJZm9yZWFjaCgkbXhfZW50aXRpZXNbJ2RvY3VtZW50J11bJGVudGl0eS0+Z2V0SWQoKV0gYXMgJGZpbGUpCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRtb3ZlID0gZmFsc2U7CgkJCQkJCQkJCQlpZihpc3NldCgkcGFyYW1zWydtb3ZlJ10pKSB7ICRtb3ZlID0gdHJ1ZTsgfQoJCQkJCQkJCQkJJGNvbGxlY3Rpb24tPmFkZEZpbGUoJGZpbGUtPmdldERvY3VtZW50UGF0aCgpLCAkbW92ZSk7CgkJCQkJCQkJCQkkY29sbGVjdGlvbi0+Z2V0TGFzdEZpbGUoKS0+c2V0VGl0bGUoJGZpbGUtPmdldFRpdGxlKCkpOwoJCQkJCQkJCQkJJGNvbGxlY3Rpb24tPmdldExhc3RGaWxlKCktPnNhdmUoKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQkvLyBJbWFnZXMKCQkJCQlpZihpc3NldCgkbXhfZW50aXRpZXNbJ2ltYWdlJ10pKQoJCQkJCXsKCQkJCQkJaWYoKGNvdW50KCRpbWFnZXNfZmllbGRzKSA+IDApICYmIChjb3VudCgkbXhfZW50aXRpZXNbJ2ltYWdlJ11bJGVudGl0eS0+Z2V0SWQoKV0pID4gMCkpCgkJCQkJCXsKCQkJCQkJCWVjaG8gJzxwPiA9PT4gJy5jb3VudCgkbXhfZW50aXRpZXNbJ2ltYWdlJ11bJGVudGl0eS0+Z2V0SWQoKV0pLicgaW1hZ2UocykgdG8gaW1wb3J0PC9wPic7CgoJCQkJCQkJZm9yZWFjaCgkcGFyYW1zWydmaWVsZHMnXSBhcyAkZmllbGQpCgkJCQkJCQl7CgkJCQkJCQkJaWYoaXNzZXQoJGltYWdlc19maWVsZHNbJGZpZWxkXSkpCgkJCQkJCQkJewoJCQkJCQkJCQkkZiA9ICRpbWFnZXNfZmllbGRzWyRmaWVsZF07CgkJCQkJCQkJCS8vIFRoZSBtaWdyYXRpb24gc3RhcnQKCQkJCQkJCQkJZWNobyAnPHA+ID09PT4gTWlncmF0ZSB0byBmaWVsZCAnLiRmWyduYW1lJ10uJzwvcD4nOwoJCQkJCQkJCQkKCQkJCQkJCQkJaWYoJGVudGl0eS0+JGZbJ25hbWUnXSAhPSAnJykKCQkJCQkJCQkJewoJCQkJCQkJCQkJJGNvbGxlY3Rpb24gPSBuZXcgTUNGaWxlQ29sbGVjdGlvbigkZW50aXR5LT4kZlsnbmFtZSddKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQllbHNlCgkJCQkJCQkJCXsKCQkJCQkJCQkJCSRjb2xsZWN0aW9uID0gbmV3IE1DRmlsZUNvbGxlY3Rpb24oKTsKCQkJCQkJCQkJCSRlbnRpdHktPiRmWyduYW1lJ10gPSAkY29sbGVjdGlvbi0+Z2V0Q29sbGVjdGlvbklkKCk7CgkJCQkJCQkJCQkkZW50aXR5LT5zYXZlKCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJCgkJCQkJCQkJCWZvcmVhY2goJG14X2VudGl0aWVzWydpbWFnZSddWyRlbnRpdHktPmdldElkKCldIGFzICRmaWxlKQoJCQkJCQkJCQl7CgkJCQkJCQkJCQkkbW92ZSA9IGZhbHNlOwoJCQkJCQkJCQkJLy8gaWYoaXNzZXQoJHBhcmFtc1snbW92ZSddKSkgeyAkbW92ZSA9IHRydWU7IH0KCQkJCQkJCQkJCSRjb2xsZWN0aW9uLT5hZGRGaWxlKCRmaWxlLT5nZXREb2N1bWVudFBhdGgoKSwgJG1vdmUpOwoJCQkJCQkJCQkJCgkJCQkJCQkJCQkkY29sbGVjdGlvbi0+Z2V0TGFzdEZpbGUoKS0+c2V0VGl0bGUoJGZpbGUtPmdldFRpdGxlKCkpOwoJCQkJCQkJCQkJJGNvbGxlY3Rpb24tPmdldExhc3RGaWxlKCktPnNhdmUoKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQoJCQkJfQoJCQkJCgkJCQllY2hvICc8cD5Zb3VyIGZpbGVzIGhhcyBiZWVuIG1pZ3JhdGVkLiBEb25cJ3QgZm9yZ2V0IHRvIGRlbGV0ZSB0aGVtIGZvcm0gdGhlIHNlcnZlciB1cGxvYWRzIGRpcmVjdG9yeS48L3A+JzsKCQkJfQoJCQkKCQkJCgkJCQoJCX0KCQllbHNlCgkJewoJCQkkZm9ybSA9IG5ldyBDTVNGb3JtKCdNQ01lZGlhcycsICRpZCwgJ21pZ3JhdGVNWCcsICRyZXR1cm5pZCk7CgkJCSRmb3JtLT5zZXRXaWRnZXQoJ21vZHVsZScsICdoaWRkZW4nKTsKCQkKCQkJJGNob2ljZSA9IGFycmF5KCk7CgkJCQoJCQlmb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKQoJCQl7CgkJCQkkY2hvaWNlWyRmaWVsZFsnbmFtZSddXSA9ICRmaWVsZFsnbmFtZSddIC4gJyAoJy4kZmllbGRbJ3R5cGUnXS4nKSc7CgkJCX0KCgkJCSRmb3JtLT5zZXRXaWRnZXQoJ2ZpZWxkcycsICdzZWxlY3QnLCBhcnJheSgndmFsdWVzJyA9PiAkY2hvaWNlLCAnbXVsdGlwbGUnID0+IHRydWUsICdleHBhbmRlZCcgPT4gdHJ1ZSwgJ3RpcHMnID0+ICR0aGlzLT5sYW5nKCdmb3JtX3NlbGVjdF9maWVsZHNfdG9fcG9wdWxhdGUnKSkpOwoKCQkJJGZvcm0tPnNldExhYmVsKCdzdWJtaXQnLCAkdGhpcy0+bGFuZygnQ29udGludWUnKSk7CQkJCgkJCWVjaG8gJGZvcm0tPnJlbmRlcigpOwoJCX0KCX0KCWVsc2UKCXsKCQkkbW9kdWxlcyA9IE1DRk1vZHVsZVJlcG9zaXRvcnk6OmdldE1vZHVsZXNXaXRoRmllbGRUeXBlcyhhcnJheSgnaW1hZ2VzJywnZmlsZXMnKSk7CgkJCgkJaWYoY291bnQoJG1vZHVsZXMpID4gMCkKCQl7CgkJCSRmb3JtID0gbmV3IENNU0Zvcm0oJ01DTWVkaWFzJywgJGlkLCAnbWlncmF0ZU1YJywgJHJldHVybmlkKTsKCQkJCgkJCSRtb2R1bGVzX25hbWUgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCRtb2R1bGVzIGFzICRtb2R1bGUpCgkJCXsKCQkJCSRtb2R1bGVzX25hbWVbJG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpXSA9ICRtb2R1bGUtPmdldE1vZHVsZUZyaWVuZGx5TmFtZSgpOwoJCQl9CgkJCQoJCQkkZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGUnLCAnc2VsZWN0JywgYXJyYXkoJ3ZhbHVlcycgPT4gJG1vZHVsZXNfbmFtZSwgJ3RpcHMnID0+ICR0aGlzLT5sYW5nKCdmb3JtX3NlbGVjdF9tb2R1bGVfZm9yX21pZ3JhdGlvbicpKSk7CgkJCQoJCQkkZm9ybS0+c2V0TGFiZWwoJ3N1Ym1pdCcsICR0aGlzLT5sYW5nKCdDb250aW51ZScpKTsKCQkJCgkJCWVjaG8gJGZvcm0tPnJlbmRlcigpOwoJCX0KICAJCgl9]]></data>
	</file>
	<file>
	  <filename>/action.sort.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9wbGFpbicpOwogIGlmICghY21zbXMoKSkgZXhpdDsKICBpZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CiAgICByZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoKTsKICB9CiAgCiAgaWYoaXNzZXQoJHBhcmFtc1snbWVkaWFfaWQnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snbWVkaWFfaWQnXSkpCiAgewogICAgZm9yZWFjaCgkcGFyYW1zWydtZWRpYV9pZCddIGFzICRwb3NpdGlvbiA9PiAkbWVkaWFfaWQpCiAgICB7CiAgICAgIC8vIGVjaG8gJHBvc2l0aW9uOwogICAgICRmaWxlID0gTUNGaWxlOjpyZXRyaWV2ZUJ5UGsoJG1lZGlhX2lkKTsKICAgICAkZmlsZS0+c2V0UG9zaXRpb24oJHBvc2l0aW9uKzEpOwogICAgICRmaWxlLT5zYXZlKCk7CiAgICB9ICAKCiAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdzdWNjZXNzJyA9PiB0cnVlKSk7CiAgICAvLyBleGl0OwogICAgCiAgfQogIAogIGVjaG8ganNvbl9lbmNvZGUoYXJyYXkoJ2Vycm9yJyA9PiB0cnVlKSk7]]></data>
	</file>
	<file>
	  <filename>/action.sync.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CgoJaWYoJHJlbW90ZV91cmwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVtb3RlX2dhbGxlcnknLCBmYWxzZSkpCgl7CgkJJGpzb24gPSBmaWxlX2dldF9jb250ZW50cygkcmVtb3RlX3VybCk7CgkJCgkJaWYoJGpzb24gIT09IGZhbHNlKQoJCXsKCQkJJG1lZGlhcyA9IGpzb25fZGVjb2RlKCRqc29uKTsKCQkJCQkJCgkJCWlmKGlzc2V0KCRtZWRpYXMtPnJlc3VsdHMpKQoJCQl7CgkJCQkkZWxlbWVudHMgPSAwOwoJCQkJJHVwZGF0ZSA9IDA7CgkJCQkkaW5zZXJ0ID0gMDsKCQkJCS8vIHZhcl9kdW1wKCRtZWRpYXMtPnJlc3VsdHMpOwoJCQkJZm9yZWFjaCgkbWVkaWFzLT5yZXN1bHRzIGFzICRtZWRpYSkKCQkJCXsKCQkJCQkkZWxlbWVudHMrKzsKCQkJCQkkc2F2ZV9wYXJhbXMgPSBhcnJheSgnZnJvbnRlbmQnID0+IHRydWUsICdub190aW1lX2luY3JlbWVudCcgPT4gdHJ1ZSk7CgkJCQkJLy8gdmFyX2R1bXAoJG1lZGlhKTsJCQkJCQoJCQkJCWlmKCRsb2NhbF9tZWRpYSA9IE1DRmlsZTo6cmV0cmlldmVCeVBrKCRtZWRpYS0+aWQpKQoJCQkJCXsKCQkJCQkJCgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCSRsb2NhbF9tZWRpYSA9IG5ldyBNQ0ZpbGUoJG1lZGlhLT5jb2xsZWN0aW9uX2lkKTsKCQkJCQkJJGxvY2FsX21lZGlhLT5zZXRJZCgkbWVkaWEtPmlkKTsKCQkJCQkJJHNhdmVfcGFyYW1zWydmb3JjZV9pbnNlcnQnXSA9IHRydWU7CgkJCQkJfQoJCQkJCQoJCQkJCWlmKCRsb2NhbF9tZWRpYS0+Z2V0VXBkYXRlZEF0KCkgIT0gJG1lZGlhLT51cGRhdGVkX2F0KQoJCQkJCXsKCQkJCQkJaWYoaXNzZXQoJHNhdmVfcGFyYW1zWydmb3JjZV9pbnNlcnQnXSkpIHsgJGluc2VydCsrOyB9IGVsc2UgeyAkdXBkYXRlKys7IH0KCQkJCQkJJGxvY2FsX21lZGlhLT5zZXRDcmVhdGVkQXQoJG1lZGlhLT5jcmVhdGVkX2F0KTsKCQkJCQkJJGxvY2FsX21lZGlhLT5zZXRVcGRhdGVkQXQoJG1lZGlhLT51cGRhdGVkX2F0KTsKCQkJCQkJJGxvY2FsX21lZGlhLT5zZXRQb3NpdGlvbigkbWVkaWEtPnBvc2l0aW9uKTsKCQkJCQkJJGxvY2FsX21lZGlhLT5zZXRUaXRsZSgkbWVkaWEtPnRpdGxlKTsKCgkJCQkJCSRsb2NhbF9tZWRpYS0+dXBsb2FkRnJvbVVybCgkbWVkaWEtPmZpbGVuYW1lX3VybCwgJG1lZGlhLT5vcmlnaW5hbF9maWxlbmFtZSwgJG1lZGlhLT5maWxlbmFtZSk7CgkJCQkJCSRsb2NhbF9tZWRpYS0+c2F2ZSgkc2F2ZV9wYXJhbXMpOwoJCQkJCX0KCQkJCX0JCgkJCQllY2hvICdTeW5jaHJvbmlzYXRpb24gc3VjY2VzcyBmb3IgWycuJGVsZW1lbnRzLiddIGVsZW1lbnRzOiBVcGRhdGVkOiBbJyAuICR1cGRhdGUgLiAnXSAtIEluc2VydGVkOiBbJyAuICRpbnNlcnQgLiAnXSc7CQkKCQkJfQoJCX0KCQllbHNlCgkJewoJCQllY2hvICdVbmFibGUgdG8gY29ubmVjdCB0byB0aGUgdXJsOiAnIC4gJHJlbW90ZV91cmw7CgkJfQoJfQoJZWxzZQoJewoJCWVjaG8gIlJlbW90ZSBnYWxsZXJ5IHVuZGVmaW5lZCI7Cgl9]]></data>
	</file>
	<file>
	  <filename>/action.template_delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWNtc21zKCkpIGV4aXQ7CmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnTW9kaWZ5IFRlbXBsYXRlcycpKSAvLyBSZXN0cmljdCB0byBhZG1pbiBwYW5lbCBhbmQgdXNlcnMgd2l0aCBwZXJtaXNzaW9uCnsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJZXhpdDsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICYmICFlbXB0eSgkcGFyYW1zWyd0ZW1wbGF0ZSddKSkgewogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pOwoJCSR0aGlzLT5SZW1vdmVEZWZhdWx0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGUnXSk7Cn0KCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJykpOwpleGl0Ow==]]></data>
	</file>
	<file>
	  <filename>/action.template_edit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWNtc21zKCkpIGV4aXQ7CmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnTW9kaWZ5IFRlbXBsYXRlcycpKSAvLyBSZXN0cmljdCB0byBhZG1pbiBwYW5lbCBhbmQgdXNlcnMgd2l0aCBwZXJtaXNzaW9uCnsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJZXhpdDsKfQoKJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+R2V0TmFtZSgpLCAkaWQsICd0ZW1wbGF0ZV9lZGl0JywkcmV0dXJuaWQpOwokZm9ybS0+c2V0QnV0dG9ucyhhcnJheSgnc3VibWl0JywnYXBwbHknLCdjYW5jZWwnKSk7CiRmb3JtLT5zZXRNZXRob2QoJ3Bvc3QnKTsKJGZvcm0tPnNldFdpZGdldCgndGVtcGxhdGUnLCd0ZXh0JyxhcnJheSgndmFsaWRhdG9ycycgPT4gYXJyYXkoJ25vdF9lbXB0eScgPT4gdHJ1ZSkpKTsKJGZvcm0tPnNldFdpZGdldCgnY29kZScsICdjb2RlYXJlYScpOwokZm9ybS0+c2V0V2lkZ2V0KCdyZXN0b3JlX3RlbXBsYXRlX2Zyb20nLCAnc2VsZWN0JywgYXJyYXkoJ3ZhbHVlcycgPT4gYXJyYXlfbWVyZ2UoYXJyYXkoJ3NlbGVjdCcgPT4gJHRoaXMtPmxhbmcoJ3NlbGVjdCBvbmUnKSksTUNNZWRpYXM6OiRmcm9udGVuZF90ZW1wbGF0ZXMpKSk7CiRmb3JtLT5zZXRXaWRnZXQoJ2RlZmF1bHRfdGVtcGxhdGVfZm9yJywgJ3NlbGVjdCcsIGFycmF5KCd2YWx1ZXMnID0+IGFycmF5X21lcmdlKGFycmF5KCdzZWxlY3QnID0+ICR0aGlzLT5sYW5nKCdzZWxlY3Qgb25lJykpLE1DTWVkaWFzOjokZnJvbnRlbmRfdGVtcGxhdGVzKSkpOwoKaWYgKCEkZm9ybS0+Z2V0V2lkZ2V0KCd0ZW1wbGF0ZScpLT5pc0VtcHR5KCkpCnsKCWlmICgkZm9ybS0+Z2V0V2lkZ2V0KCdjb2RlJyktPmlzRW1wdHkoKSAmJiAhJGZvcm0tPmlzUG9zdGVkKCkpCgl7CgkJJGZvcm0tPmdldFdpZGdldCgnY29kZScpLT5zZXRWYWx1ZXMoJHRoaXMtPmdldFRlbXBsYXRlKCRmb3JtLT5nZXRXaWRnZXQoJ3RlbXBsYXRlJyktPmdldFZhbHVlKCkpKTsKCX0KCQoJJGFjdGlvbiA9ICR0aGlzLT5pc0RlZmF1bHRUZW1wbGF0ZSgkZm9ybS0+Z2V0V2lkZ2V0KCd0ZW1wbGF0ZScpLT5nZXRWYWx1ZSgpKTsKCWlmICgkZm9ybS0+Z2V0V2lkZ2V0KCdkZWZhdWx0X3RlbXBsYXRlX2ZvcicpLT5pc0VtcHR5KCkgJiYgKCRhY3Rpb24gIT09IGZhbHNlKSkKCXsKCQkkZm9ybS0+Z2V0V2lkZ2V0KCdkZWZhdWx0X3RlbXBsYXRlX2ZvcicpLT5zZXRWYWx1ZXMoJGFjdGlvbik7Cgl9Cn0KCmlmICgkZm9ybS0+aXNQb3N0ZWQoKSkKewoJJHJlc3RvcmUgPSAkZm9ybS0+Z2V0V2lkZ2V0KCdyZXN0b3JlX3RlbXBsYXRlX2Zyb20nKS0+Z2V0VmFsdWUoKTsKCWlmICgkcmVzdG9yZSAhPSAnJykKCXsKCQlpZiAoaXNfZmlsZShkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndGVtcGxhdGVzJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnZnJvbnRlbmQuJy4kcmVzdG9yZSAuICcudHBsJykpCgkJewoJCQkkZm9ybS0+Z2V0V2lkZ2V0KCdjb2RlJyktPnNldFZhbHVlcygkdGhpcy0+R2V0VGVtcGxhdGVGcm9tRmlsZSgnZnJvbnRlbmQuJy4kcmVzdG9yZSkpOwoJCQkkZm9ybS0+Z2V0V2lkZ2V0KCdyZXN0b3JlX3RlbXBsYXRlX2Zyb20nKS0+c2V0VmFsdWVzKCcnKTsKCQl9Cgl9CgkKCSRmb3JtLT5wcm9jZXNzKCk7CgkKCWlmKCEkZm9ybS0+aGFzRXJyb3JzKCkpCgl7CgkJCSR0aGlzLT5TZXRUZW1wbGF0ZSgkZm9ybS0+Z2V0V2lkZ2V0KCd0ZW1wbGF0ZScpLT5nZXRWYWx1ZSgpLCAkZm9ybS0+Z2V0V2lkZ2V0KCdjb2RlJyktPmdldFZhbHVlKCkpOwoJCQkKCQkJJGFjdGlvbiA9ICRmb3JtLT5nZXRXaWRnZXQoJ2RlZmF1bHRfdGVtcGxhdGVfZm9yJyktPmdldFZhbHVlKCk7CgoJCQlpZiAoJGFjdGlvbiA9PSAnc2VsZWN0JykKCQkJewoJCQkJJHRoaXMtPlJlbW92ZURlZmF1bHRUZW1wbGF0ZSgkZm9ybS0+Z2V0V2lkZ2V0KCd0ZW1wbGF0ZScpLT5nZXRWYWx1ZSgpKTsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCQoJCQkJJHRoaXMtPkFkZERlZmF1bHRUZW1wbGF0ZSgkYWN0aW9uLCAkZm9ybS0+Z2V0V2lkZ2V0KCd0ZW1wbGF0ZScpLT5nZXRWYWx1ZSgpKTsKCQkJCSRmb3JtLT5nZXRXaWRnZXQoJ2RlZmF1bHRfdGVtcGxhdGVfZm9yJyktPnNldFZhbHVlcygkYWN0aW9uKTsKCQkJfQoJCQkKCQkJaWYgKCRmb3JtLT5pc1N1Ym1pdHRlZCgpKQoJCQl7CgkJCQkJcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJykpOwoJCQl9Cgl9Cn0KCmlmICgkZm9ybS0+aXNDYW5jZWxsZWQoKSkKewoJCQlyZXR1cm4gJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKSk7Cn0KCiR0aGlzLT5zbWFydHktPmFzc2lnbignaWQnLCAkaWQpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Zvcm0nLCAkZm9ybSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluLnRlbXBsYXRlX2VkaXQudHBsJyk7]]></data>
	</file>
	<file>
	  <filename>/action.thumbnail.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWNtc21zKCkpIGV4aXQ7CiAgCiAgLy8gdmFyX2R1bXAoJHBhcmFtcyk7CiAgCiAgJHVybCA9ICR0aGlzLT5nZXRUaHVtYm5haWwoJHBhcmFtcyk7CiAgCiAgaWYoaXNzZXQoJHBhcmFtc1sncmVkaXJlY3QnXSkpCiAgewoJCS8vIFRPRE86IE5vIHJlZGlyZWN0LCB0b28gY29uc3VtaW5nLgogICAgaGVhZGVyKCdMb2NhdGlvbjogJyAuICR1cmwpOyAvLyBESVJFQ1RMWSBPVVRQVVQgVEhFIElNQUdFIFRPIFRIRSBCUk9XU0VSIFdJVEggUkVESVJFQ1QKICB9CiAgZWxzZQogIHsKICAgIGVjaG8gJHVybDsKICB9Cg==]]></data>
	</file>
	<file>
	  <filename>/action.upload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9wbGFpbicpOwogIAogIAogIGlmICghY21zbXMoKSkgewogICAgZWNobyBqc29uX2VuY29kZShhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UpKTsKICAgIGV4aXQ7CiAgfQogIGVsc2VpZihpc3NldCgkcGFyYW1zWydjb2xsZWN0aW9uX2lkJ10pKQogIHsKICAgICRjb2xsZWN0aW9uID0gbmV3IE1DRmlsZUNvbGxlY3Rpb24oJHBhcmFtc1snY29sbGVjdGlvbl9pZCddKTsKICAgIAogICAgLy8gQG9iX3N0YXJ0KCk7CiAgICAvLyB2YXJfZHVtcCgkX0ZJTEVTKTsKICAgIC8vIHZhcl9kdW1wKCRfUkVRVUVTVCk7CiAgICAvLyAkX1NFU1NJT05bJ3VwbG9hZF9yZXN1bHQnXSA9IG9iX2dldF9jb250ZW50cygpOwogICAgLy8gQG9iX2VuZF9jbGVhbigpOwogICAgCiAgICAkcmVzdWx0ID0gJGNvbGxlY3Rpb24tPmFkZFVwbG9hZGVkRmlsZSgncXFmaWxlJyk7CiAgICAgICAgICAgCiAgICBlY2hvICRyZXN1bHQ7CiAgICAvLyBpZigkcmVzdWx0KQogICAgLy8gewogICAgLy8gICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdzdWNjZXNzJyA9PiB0cnVlKSk7CiAgICAvLyB9CiAgICAvLyBlbHNlCiAgICAvLyB7CiAgICAvLyAgICBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRoZSB1cGxvYWQnLCAncHJldmVudFJldHJ5JyA9PiB0cnVlKSk7CiAgICAvLyB9CiAgICBleGl0OwogIH0KICBlbHNlCiAgewogICAgZWNobyBqc29uX2VuY29kZShhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UsICdlcnJvcicgPT4gJ1RoZSBjb2xsZWN0aW9uIGtleSBpcyBtaXNzaW5nJywgJ3ByZXZlbnRSZXRyeScgPT4gdHJ1ZSkpOwogIH0KICAKICAvLyBlY2hvIGpzb25fZW5jb2RlKGFycmF5KCdzdWNjZXNzJyA9PiB0cnVlKSk7CiAg]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/bin_closed.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAD9SURBVBgZBcFLLkNRAADQc1/fU6qkhFRMMNIQn8TUQCJWYBE2YBkWYQWMJIZmNuAXCSoGFUGIInJf33VOSAAAAIAcgLOFt3079flaEdTS50M6nT7YeggJwPFle6nhAoVhc370rnaXcwBSp62GTdxoGdPrkAPQD5OSbRFr6oLvjByA53CqY9YUvjy68YQcgELTuTd/khENbQk5ANGqFUSFnq6WW2QA5Op4VuhreJVEZACUAKiJkogMgIEKANFARAZAKQKolColMgA+f7vVkBkRSeYjvf6QAfB1cnnXNWTUhHHrXuLoESEBYO/aYjNUSqX3snk/2DjshwQAAAD4B9GUWR0G4scKAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icons/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icons/delete.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhCgALALMAAP///3p6etDQ0IuLiy8vL+jo6MjIyNXV1UJCQmlpacLCwl9fX+zs7NnZ2ZaWluTk5CH5BAAAAAAALAAAAAAKAAsAAAQ3EEg3gpQjaw0We41gKMoiEGiaCkBQBEdgBALrwjIt3fHMtq+eDpAoJA4JQ+KnQDidQ0BtKigAIgA7]]></data>
	</file>
	<file>
	  <filename>/images/icons/edit.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEgASAMQfAOHo8JKty/30xczX5G6RuaaRTPr7/OTJVaLE4oWRn/P2+fbdbPnIk9CwcnucweP2/uzNddjh6/HVeur1/+rv9fbfXfbu5HdYJe7Vf9WVQ8TIy3KUu9Pf69mZTf///////yH5BAEAAB8ALAAAAAASABIAAAWk4CeOZGmeZIeinZCJgRPMdN1hwvISw8BFAIrC4PHcchJMZtMDColG3EIiUTGdw+JxAalaPhsstCMRVCpVjWgTzBohZnQnoQY/tY14lcNbKxRFBQwMBxUQHR4cGxRrUB6Cg4dFfB5rRUUXgwyIkxsGaxQeExMXFxkNFpeKn3aiEw+XsaugBg+2sLGJBKwEAQi/CBzCwz8OrAEbDg4bzMrOyhyVHyEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icons/normal/def.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAMQfAP///zNmzzFjw0t30XCZ54yu6fn5+k2E76fL8//+8vPy8R1Xze3s6115vcLR7h5UvNXe8w1JwsH3//P3/AxHsr3I1unw+uLh79fRxv338/Dn1/745ZWks72zpM7FtgAAACH5BAEAAB8ALAAAAAAwADAAAAX/4CeOZGkCaGqubLuiTkEMgSAEA1E4qOu3AAchUKhADCmAAVKZEXi/6AeAGBQgyWwWUhggANKWwzpJaM8pQ6brCJcAMgV6nrXowO7JoELvJxMIDRNhFgMXcxMSiooIi3MXAxZRehZni4uNCJqaBV9nhYMuAA2HWRKZpwWqBDqqCKueWRcNeCydWpucOpsVmgQHqjIHSFmvYgTEKQSbBcAYz9DPDBC/rL+xym0nkVnAq8AeyUkGGhfVvwc8SQoDtSOv3d8HBBhmcxoQAwf7BwHicAjeDBBnjdWBBh3soVhSauGGAgH49cuSoR2JGMks7EMXgINCOAsiLGiQgZgCCBH1/9EokGXHCABPUkyYx2/AAA8KiBWIcCNAhAb2EjCgsU/fgglJqOEBMEChA4n9GmjQkOLBggA1AizAgEJOgwVEsRLIMlCEkCQSbeJgdYXA1Z5a+aSgYbNugCxPRKhKEvGAWqxWH4jEilXAggVU52JVOyAClhQVCogg8JgKDr80CGveHABoCgsRNNNYwDIFtSmCUkDslznz5huGpSYh8ICzAFpp2gG4qxiHa7ibf3JN4SA0juOLAchBwVtAErqtCffsOTKcaaucB9xQksI5AO8oXGsGjnVkh6TYFx+30S6Zd97MCdN9rVVAh2QQBnOu8aBpMt4DIAVAAgQIIF5WwHGQGP8AF6SXnQ0BJECMARZRphwcD/R0YFYLcJBBClqNt5h2AjxAgIQonPbBXgYkUJyBtkl3Hwqg7VeYDRFUgCIAkZlVWosZ3jDfdFedR6NxhY2HIwM5oUCZCBQuBFOQNtbAgQWHIIDkazb0BwADxJQ1RUxIQECBDTDSMF1hC5CXVQ1oUlBBBmACoNQIMSyUwFdo/kbYYSK5CecN/SWgAANKuPSSbmowcCaanLXZCQFb3gibnEKFaUAJkaEAZgEUDAqcABwokUEFPFka51iHotDJNkgYwEACAwSJ5g3mmWHABm6Jyp8AGxyKhB7u4DnWlwokUCJsaHZonau2oplhBkIhCpPJNivs9SW1DTwKW3U5IcEns2duUK2rkgHRABayKvAQBVTaoOCAWt76AAUnymrtLMWaoAcShyYLQbe2mkhAt9JS0ICOh1pLYSg+FFIKkxoo4ADBD2Ss8b0Kz8kkA/tGEsYEDSCABJOHZoABBw00wF4DBFSQrAIXNOyqIG6MeSyyNTOAgQbmbiA0yD1bCxNLOeNpRQpC5aTA01AHrBAbSZcASA6V/DHg1p/N8EXVK7hY4BMCJjGBEAI8kQDYogQhg5pC6qAO225owXYIADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/doc.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAPcAAAAAAAAAhDH/KXNzc4SEhJSUlLW1tcbGxs7OztbW1t7e3v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEAAAIALAAAAAAwADAAAAj+AAUIHEiwoMGDCBMqXMiwoUMBAyJKnEixokUADwkOWMCxo8ePID8OKIAxI8SQKFNyHGCApMmNKmN6HJCgZUmHMGXK3FjTZcEAQIMKHUpU50qOPW8KJMq0qdEFOZMSBPqUI1WjORdIXRqg6oKrIQ2IHWsxYkmwRtF+NHBgLFsECAzAnXu261CrQb8OLYCAr1+ObMW2LXAAwQGPCAAYEED1bgGheiGjDGyAwIEDfA93TLz4at7IngM87jpZgQEFBBQUUGAYsWLGpPOOlt1YdN/bBQCbLkCgt2nNHDnDxmv3LtDcaj2OVaCaQEvgC4SHFt00NumwLVOnFuy6s/XqovHd+sUNOG7v1QXYdh8O2inelHILoE+vfvPr6U1zv588t3/c9fhRJ5l4uPUFmFsIAvhdbcd5lJxX0i2I3GcdPVhVhF4dV+B4HJJnn3cZXufVh7CBV92IH0VoYn4btsjhegllhWJMwsU4o1E1IpRThzy6uCGMOt6oU44HyShkSEQatKOPPTYJZJFH0viajVGmlGRBSzbJ5I8kUlklklMG+SWYi3k5opNdijlmimFCuSabZar5ZnBtKjnnk3beSWecRfrn55+ABlpnQQAUauihiCaq6KKDFoTgo5BGKqlYAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/fla.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwALMIAP///wAAAP8AAMDAwIAAAIAAgP//AICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAgALAAAAAAwADAAAAT/EMlJq7046827/2AojmRpnmiqrl/gvnAsw2cA3Hiu73dQ8ziDziAQ4lA2IECQIzJzSOXSuHziBgKBKQkk3ohUbPYnLVZvYsEgqjN/meas+sZuZo3FfHZwJO+cBl5Xcmt+PE47aXslXEoHO3OKWiKNOwcEmHxohBNjlECXmAQHAwUDWKeeW5aio3wFBKYFTGmrV62kOLEES7MAtSSNobm6sHxYBZuqIZXEV7DJN7PJCGLBUtKxmr++EljXUgO7bbN1QLvbmwXmPNDtAuu2SqXpz5OM2Pns+TtsL9v/cATs4WcgAIMDfcg76AJgQ4EPFeLr8ZBiAIcXCdpCWJFhRo0TF/kBkRhshsmTLFKqXMmypcuXMGPKfBkBADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/folder.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhUABQAOYAAIBtNP/shuzZYXFxcdmqH//1s9bW1mZjWby8vPf398yZAN+/U/LXle/v75mZmenFaPXsn9/f39i/cvny36qEEnhsRenSjfntz/LmdNGrOf/MZuzfudCnK//+o4l5Sf/1j/LVgtmzQYSEhP/356+vr+rdt//uvty8XbKIDf/pks2dDv/Ub///zP/mgaGRYpZ5JNmxOv//vv/4ktGyU2xmUszMzP/xru/AS//ge//addasMf/03uLMif//5qOjo/LlvObm5sOUBf/+9/noffXfqObMcPLPXePTo//vif//mea3OXx8fP//xf//1OnPVNmzK961UvLdno1zJ4yMjLW1tf//rLKsmP/y18TExP/XctKhD//6797YxZ6FObuVI9KlH/XoxNy2R///7vLmj+LFRHBnSs+dCKmHHf/npv/4zda5ZOa/WubMfrafXeKyMNmrKe/IVNzDdv//3mZmZvLdbP//tf/jfopzMfLmrubHSP/wxtOtO97FeP/ynv///wAAACH5BAUUAH4ALAAAAABQAFAAAAf/gH6Cg4SFhoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnp+goaKjpKWmp6ipqqusra6vsLGys7S1tre4ubq7jz8bPHEnGRwKX1wJvIcnXyEnbBY/F4IWXjXIyYMTKiNCQj09LCx1TEJQLhGHEz9HfGEZCgozQNetzlsdSfn6SU0jHFYlSgDbw4HZAzZEfggRI0eFDyCuJnyZwGSfRTlgYIR5Fm3LFjlpmNSpkgQJBgVdOMijh+oEgxEWLVYZQbOJyDpJZGAQ4OTJE3ghoLDBo6ONAZamFIyIEdMiviE8fcLTEYJNlB9bBF0RFMIDlQaqFOwg2XSfEhVVoU3o1k2MW7ca/7qpqPA17Niy+shsW+j2m5y/gP/GFaJgDhakpTJc6SOjsWPHGJyoACOmieXLmDFrEHMhyAADqxT3+UB6CJ08TwgoUAGFcpNwsGPL1tADD4UloFVlIIKGzk8VMB5YwLPD4xYmyJMrX86EtgUKItDpZoDGzIkLHv9aZhGju/fv4L1rkFNEyhSIqkIwALGNe5338OPLnw9fQ5MFdxygTyVhPYwRVQQo4IAEFkigfTBUQAJYqsQBAggwNNHBhBRWaOGFFmrAggo0IIBYKXGs8QAMaeBlYlMaMFGYNauEuEYYJZ4oYz4aQOBZbqocscYaRaTx2I9ABvmYBmPcJp0qJexYRP8BQjbZpAZFvBAdKyXAAMOSpGWp5ZZccqmBE1LoR+Ubb7BhQ5dopkmaBk8A4AODSJIZhQ1I1GnnnXjmiSebCsKZSgJyphDAoIQWauihhmqgwAEetvKGGVGk0MKklFZq6aWWKjpHDa7AQ4SkmIYqags3oPBZpwrokYIdrLbq6quwvnqDka6okCoOuOaq66685moEama8MMWRoSlgQg7IJqvsssvCoYRqQbxwRxkDLOhKBiocy+y2OWhwgxtfKIDCCwDQMMcSDpCABRBCXKuDCVnEK++8WRihxBtaKECBFBUcMIAIDlCBhQFANPBhKhnogMYKDDe8grMEmBEEBdPO8a9qDwjUEEHBB7OihsIMe+tGvuOWe+4UPgwcQQN+1hIHAQ/gqy+5/qKrLsEGJxOHCmfwazHAVGjMMTaDNEDFFCgjYMDGDbRLtCENRLByx09XbfXVWGet9dZcd+3112CHLfbYZJdt9tlop412IAA7]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/gz.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAPdAAHsAAJQAAJQIAIRaCJQYCIwhEIxKKYxSKZRaKXNjUmtjY3Nzc1JSeyFShDlahEpKhCFajCFalClajClalCljlClrlDFjlDFrlDljjDVrlFJShFZmiGJvjHd7hHuEhIOGiSFjnCljnClrnDFjnDlrlEFwlFpmlFZ7lClroBx9yTl7nEN9rQCD7xWW8USV41qc4mNjlGNjnGNrlGV4lmtrnGt1omuEoH6ImXN3rWuDsXt7qY2Wq36GtYSctYCXuouWzP///5yltZyttYSlvYylvZSlvZStvZytvYStxpSlxpStxpSlzpStzpS1zlql1nOl1jml70Kl51Kt51ql72ul3mOl52ul52O162ut53Ot73ut53u173u974S975St1pS11hC1/xTB/ymt/zm4/0q9/1K5/0LG/07O/1q5/2u992O9/1rO/2u9/3O993PG93PG/3PO/3u193u994y174y975yl/5C985S995TG+4TO/3PW/4ze93Pe/5Te/5Tn93vn/6VSQudjKbV7McaMOd6lOeKxOee9OefGOd6cQrVSSuetSu+tSr1SUq2Ea72UhKWlpefOOe/OOe/WOe/eOffeOffeQvfnOffnQvfvOf/vQv/3AP/3Of/3Qv//CP//Of//QqWttZytxpy1xqW1xq21xqW1zqW9zq29zrW9zrXGzpyt1py11py13qHA2KfB4KnG77XG3rXO3rXO5729vb29zr3Gxr3GzsbGxsbGzsbO1sbW3s7Ozs7W3tbW1tbe597e3pzG96Wl/62t/621/63O77W1/7m9/8bG/7XO763O95zO/73W763W97XW973W96XW/63W/7XW/7Xe78be77Xe973e98be97Xe/73e/8be/5zn/63n/73n/5zv/63v/73v/8bn/8b3/8b//87O987O/87e787e987n987n/87//9be79bn79bn99bn/9bv/9b//97n997v997v/97//+fv9+fv/+f39+f3/+/v7+/v9+/39+/3//f39/f3//f//////yH5BAEAAEAALAAAAAAwADAAAAj/AIEIHEiwoMGDCBMqJKgMGrNkyYgRe0XRlUVWGFep2shkyZIkIHn4+LUQIZ5/KFPyW8myJT98MGPC5CGtxq2SBk+m3PnPn09//YIG3Ue06L4c4bTYxEnwDs+UP4EKHWqUKA5ub6gsZQrEDj+eUaUKrVr0Ho5tbNC8oHGTqdedYaf2I0v0ntlnaMqQccGWKZ2vKKPKnUvW7r16OJTpHSPGhYy2C+d8FSyX7j7D9erVKNOChWcWKWBALmhjgunTqCGgyke1sN3M9Xz44EGbNg4aH0iS/keHzpY2bd68gQNHzxrV9Ohihp3ZWLFiwoIFq8Njwa6CN1D2/h18ePE1KShY/0BtwYIPePUOM5fHvr27OjqsFxQhQsUKChRA6Nc/IQSYMGdo884/6HRxBRkl8IIebO016E478MlXUC+3VHhLLbPUoqGGG/z3hzj/cDMFFGhYYMs6DDbI3oMQxncdEI0YIOOMNNZYS4d8gMjNC1CUQQEq6mSmojzusNiifI4gwAknmVxySSWRHGJIIYUQIsgBBuxgSwmomRbCCUDWM6SR7bQTjItAAJIII2y26SabBSBiwAe1+JKLCl04cwIopKCiCzsqFkkmOmfKx8gniH6yJJOYNOpkAIoY4EEt8MBDARZOSMFFEL4AqmKZoLaDDqFoHhrIqaimGsgkkEpaCz1DiP8DTSteTEBKOYGSKeqohV5naifABhvsAKxG6gEq8JRDQR/+WBAEKri6N+iovNZg6CeBAAvAtttq0gmxrR4LTykiROGCFHkEoY57oe5KLaHW+spJtsIKO4Ak4SLbgzjRuFLrKOW0U2S7744KjjDxAsHIvAM07PDD+BqLrLJ90GOBENAKHGrBBh+c8MKZOOrkJCRLIgkk+cJTBAXmopFuwBtzDA442QhDg6HzqqoqyhKzg4Q4xNA6wSjTxFzwzDTbbCgm9NYL7AA8S3oKO+VcoE2zRZxSdJkyI51NzTf7yrS23ALgLdThTk0Eyy6osek0HHdM89fZFBO2wpc07fQAh7T/2gEpPgPdChMTaB2313RjY7eheT/sON8BDGLA3+ycI8ET/zhr+LtIz50NNqAXIwPjl5R8MiSoH6K6AAcocAMqJ3RpWg7WUIt44qGPfl0AvPfuu+8FJNBBEBOYsc08/7hjRxplWACLNZ3T/TnoocMg3y+PfKD99tp3sEAH4H+wwwxrnJFjiC+0UGIpy8ws/fTUY2OM9S/+ssstEkjQwP789z9BDmcIw/l2pD4LiGIZ74Mf9a4xPwkNJDu88Q1w3OCdNYwhDBSQHQVswD7pxW+BDKSfQWYQQe5QkDgWDEMQQqGCLSxjBkU4QilgUQ3cffAa14hGA19UkBLcJz/72Q8K/yoQCli08IVGgMUyaqhAEOZQhyI8CIVuwYBHjGIUsbPBEUYBiwyShxg+mMAJmnHDJ0YjGsfYgAMRIpppTGME/ziNBUQwIHQAwwqn+ccIWkFG0OHQjGhUIw8RQoNdlGkE1BhBN7rhBxGIwx/XeAEVJrCHETBjBEoghh8BGQ1opHGNBymkqCwQBzk6EpKSPE0WLJBJHJ7xlZ30pAZAaRAY7GJUGCDBCYoQilB48TQS6MEJSOCAVgISGsiUJS0LYstRTeMUpXCFLJABi1Io4ZrXXIUrVsGEVRADlrFM5jFmOciDNBMd1ljGEr9WjWUgAxkSkUgzmiFPWCZTnORcyDlv11TETXLynskkRz4VAoNxkOOgCE2oQhfKUIQqY6AJgYFEJbqBDWjgohjNqEY3qtEHQBQhv9jBAkZK0pKa9KQoNekOdKMQ++3ipTCNqUxnStOY/oIfAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/html.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAPfCAM7n/yme5+f3//f//zGe797v/87P/1JRhHvH5ymW5zGW79bv/2tpnCmm70rX/zG+91K+/633/1JpjK3P773P/1KOvTFxta3X/63P/zFRezmu9zFJczmm92PP/ym270LH97XP/ymG1r3//0JhhJS+57X//1LX9ymm5ymu70K2//f39yme7ymW763X91pZjKXH54zv/1rP/62+ziGW53NxpSmu/3uerULP/4Tn/7XX/zGm9yGGzpTf7zm29zmGxnuGrTmOziGe5zGu72NhlIyu1nPX/7XH1pTH/yF5vTm+91JxnDm+/1K257X3/2O23imO1nOu3mPn/2OGpXuevTme973P51pZlGOezkqu7yGOzilxpTmu/2OWtXOGtZy2xqXf72uOrZy23kpplISmxjGu99bn/ymO3kKu/0JZe5Smxq2u/zG29ylJaymOxpTn/5zv/0p5refv7ym295T3/ymO57XX73P3/+/v90Ku9ymG3jm27zlplKXn/73X90qWzoyetVJhczGO3lqu5zG2/8bX3pSmzkqu3tbf79bn9zmW3jlxpZyu1gCO9zmW53PX77Xn/4TH3mPf99bf51rH5yGO3mu+71JRjDGu/8bX7973/xhpvYzX70rH7ylZjHOOnM7f9+fv987n9zFBawBx3sbf93vH/zGe3lpxjDFBWt7n75S+1imW3iFJcymGzt7v973f98bn78bn9yFRexg4Y2PP57XX9zme587P90q+5zlRa0pRhDGW58bn/73f/+/3/3Nxc7Xf/////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAMIALAAAAAAwADAAAAj/AIUJHEiwoMGDCBMqXMiwocOBR3JcaEFxgsUJLzKG2bhxkcdCINOk6fLQ4JFgKFOqDKaipcuWd2LeiROni6qSBE+u3MlzZxcRUHAK1NmzqM9HpYLiJGq0abAuwCBAEISThNOVAjIJWEnjgtQtfkpaDTaAZ9lgvh7hKNKhQ4wOVUANGEDjCIQUly4Femh1rt+/A3x9iRLDiY3DNgylkBGHLgRGkEeN0uSQhArAfjO5MTFpio0/XoykikOIyRVCAxioXr26IQlXsRDIni07RgVPf2RIAqzqipG5FCioGT78x6+FtN+8gYEjigkHDkwY4qLbl1/rdaD89sV9LncKxhPK/45QonyEOXbsOHdw48YHTobGEALFnTsv7fXz+wJ//CACPiKIUMJ5MKQXBXsPJPhAEkno4YcXqdTXAhFV6Fcff/41EWAJc/DxhRtRHHjDA3J4YKIHawyiRyJpHOKLAKXIgIiF34VXEAIaDogDD7DwEMlzH5DoAQooNCCEEGT00AMQaSAiQBWHCEDjfjYOhEAEAkZQhECbRALdB3LIQWSRJ5wQgJFK+uBFlAK06eabGFoJIIc8COTIczcI0QYSSDxxppkBBLBCAzr0oIESRjj55qIU0NCfQFeWAEOdwtzpwAdtyMIGGhKIocUqgYa6AgEabAGEDZgUsCicjlq5iaRfCP80CZ5toHKKF1VgIsMfcIQaKgEEbHGGEjKoqmqbBSRbQKOPIrBcrMLQgucDrJxihLIFfOLFDoEmkEAAwGqQggV/fILtucxaOalATgD5QACi2NBHGfSWEUoVFXTrLbAcpACEFFWci226kFKKQAyXPuBBAFrAUcHDEFfgg7cJsJAAvylgIYERZQicLAgMNCsQE5wkPOQJq2SxQxYs7+AyJRWzwIICChBAhVQjyBDKAjz3zDPIj7KLi3sKo1BmEEj7qq/MNNvMAQQdjJAGKT77DHRBTnwQpAcNNACooCuEDezYTTt9RgxF7DFFH1X3fPVATujxwRonBzqDyi4/oXcIfPf/nUcggTRiCxOV7CEvAIgnjvjb7CbxwBpGIx0EJbOwkcHlmGewweacd56BBGP0objiIAzxKBN6OM51AEHM4DobYJAy+uy017646QMxweAaQpiZgOsJdDLFK7wUDwAvdVxhwfLL++DHFVBAQUQdxVdvPQa4C9NAD0skQYYQDXTrOhJSTGA9Ly8gkYcZdOxCAB4duBHBFWCYf371GFjRXwODLLHG9w1YQQAoZgYL1K8XxXuBBfLQNHF1AAZN4MMIDni/4uVvf/1bAhl0QIDwUSwBZkCCBbhwhQpoIgQNTEEMcBCBJnABDWOgXgV5gQEXHEcQKFjCnsigAQ4Cy2IVo0Me//pmhprpwIEsFAEk2CCFF/TiiVCM4tUEUYMldAIVidhCD4GlABbQgWY0+6IRewC1JH5hBCMgQi2iyMZeXI0JNTAFG37xC1MIy4dgzGO48PCWJEZgBGiYwgTayMbSHQcLNWhDLo7zCyBw4AwcoAIVxgasI+IBakWAYBMgkYFATiAHhJQi7hCpBUAM5BcVSMQjORBJDmgADymAANpw8IYI8IALGwDdJ3sBjCcCo5e/DCb2DlmDUhbkF3AIQSP6JZW3FCGTbkBABTopBSJ8MpjYzCYwLigMUprSIL8QAxB8YAEfAGGccFDECDIwAimM4QUtyIE257lN/QmjEjV4ghKCJpcQRfhhD+wUg0AloAQpgGEKRIDnBeRJT23WsD8ryGcFHkVOdSqBC0QggUY1+oIjtOACF2hoQx8qEAmYYVAJaIUI96AEUXjCmh8F6UJnKlKRknQgEsipTnOqCxl8tKZAdagl+HmQIdzCAEhNqlKXytSmJhUDByCqQaxgBRdY1aqWOIBWt8rVrnrVq1I9Jh3HStaymvWsaA0IADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/js.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAKIGAP///4CAgAAA/wAAAAAAgMDAwAAAAAAAACH5BAEAAAYALAAAAAAwADAAAAPOaLrc/jDKSau9OOvNu/9gKI5ZYJ5oapJLALxwLAcDa7hyDps1ieu5QIHmA+pcw17oZ9y9kiJmE0AbWK3LqbGg9PxU4Bg3q9WNQV9wStztSMuEeLytSatPL4JgT6CXyjJ6fH4Ydnc4ggJ9H29aiYteO4cmeXuKhBeNU4+YFoZ3lYOMgDGcoy+TlACmkaShl6dUqa+Qbq60nRWaTay2m3O4sUaCA8GtvHzGbgXMzc7Mj9G5FFfV1laJlnM2EQNyctMs19zk5ebn6Onq6+ztCwkAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/mov.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/pdf.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAMQfAAICAv////sCAt0BAcjK07O1v+vs8uXi6tjZ4istLpaYolugr/UgIPROTvb//7wAAN57ffj4/nR4glpaYOj+/+Q0Nfn///GpqypjaaLM2fT0+osAAPTy9cv1+vn4+AAAACH5BAEAAB8ALAAAAAAwADAAAAX/4CeOZGmeaKqubOu+cCzPdG3feK7vNeD/wCCARwIsJIukcpFZKoY3gWBAHTwYU6l2K8AeoTVBo4Hlbqvox2LytIkbgoAcLg/Q6+hFIiABywQVWAFSg4NxcWhUagkeAW0zXYJzh4h4Vg+LCHIFfi9SgluDAwGjVZgPG3oKBAgFnH9lhoSTpIqoGxkJurt9MWa/UwNTt7gSE8fHvTBCPhjOzxgLGAnR0QrX2BKPNgAZ1wUZBBkIEAwXCAQEBerZBJ0zAK2sCAcG6Q8QHQYH6a4F1+5wADiwbt6BAxQEFKBwEF0/BeveyQAQwGA9DQ4EXLDAYR8/da4OSIxBkcABegY8/1hwMICBgwgR9jl0ZWDksgAIUGqQU6HBgAMBYMoEGcHmC4o560WQI8DBBQEelnI42a+oQJz1DASwcGGUhZYOVlKg4NDqDaQGDHBgutFBACwQLlyAkI+AWW4Bsmqw4DPAhUCBpAxoUKFChgBGXVBMa4DC1wtjLkRwQNkA4Z6HE7dY3NhBIDkrHWiYaqBDBwgPMl9tTFfAZDkadh4EKs4VYhx7KDQoB4FCgAQK5FD0wCmAq+CaWTCC0JMBBa0+hFdEHEADRATJV+yBAOg59AkiE/ThNNAHdtxbV6bVgL3Pb4oAJLibUB497LQB6EffP4FTglbZqbBHHQGsRVEBCQAgHicA5GGXQEA3TEDghBTWoRUBt53FzIYbEuHhhyCGKOKIJJZo4okzhAAAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/php.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwALMLAP///9rCwqMAAK96egAAAJBXV8ejo9S4uObW1qNmZuDMzAAAAAAAAAAAAAAAAAAAACH5BAEAAAsALAAAAAAwADAAAAT/cMlJq7046827X0UojmRpEh9VAGzrvvBbDGgKxnjOFgZtr7qgq6Do1TxAoXBV9CGVSmDzuElCc8lpx3qNWbXVrstALptCVIF6zW672yzDoSwPBAz2fFrwWrPUf3wufgByZHMDBwEHLgF7gZAAgJKCk5OGBgkHBwOLjY+UkZaVpHEIBggJCAMIni2OFJMthIOCs5enAwm7p4yvoG6ipGxxZAirCT2+LLATo8Sh0cGFPaqqh5+xw4SjgdB4mQmsA3LZzm/o6YJ4A+Pk5b9hYnF59XfmGUmd+wH8/sV06ODDwGVekGb5DF5BSLCFv34QH0qMOPBCQYU4GFrEqESjBX0Rb0NOHFnxI0chHitcPFlSpUORMEdSjKdhJUtmVDbezJjTJAuZQEW2VLGTp7yiL1IS/RmzKUmaCZEm7elS6tAJNoU8xXnUKgClWL1CbSj2K9WlYsFKyMpSLQh7cOPKnXt2AoG7ePPq3cu3b10bgCtEAAA7]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/ppt.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwALMNANbX1t7f3pyeY+/Xxs7PnISGAHNxc7W2tZSWlM7Pzs4wAAAAAP///////wAAAAAAACH5BAEAAA0ALAAAAAAwADAAAAT/sMlJq7046827b0YojmRpLh9lMGzrvvBrIGgKxnjOGgdtr7qgywDo1TxAoXBV9CGVSmDzuEniEAmsNgtLTjtWKM76lSjO6LR6LTaFauu4fEuPJe74O1whZp37dgsHDX99hYAuCYKEfIaNiC2Kg4Vyan6PkAySjH5BjYeZm5Sel3RZp6ZaiYuUlWiXmZGsn3EMn7CxmrOXBAGVpajBqVyyk58Hl3+3tpiQosvMtcy5usZ+Ai4DbMzD3cQsz5cFAQwH0qDOu9GuuLHhjt7dq9aO1O9i6IjPrpXxwt/VGPGTY29RhjDUYGw6eIWFv1TzNCBMGJEhRRwLMUxkgMDhv3gVTzVexGhQ5EiFJS9s7Mjxo0uW4FJa2Hgxo8qTKAdZhMHyobCQN3ECnSl0aAWaFG3OzMO0qdOnTGVWWEC1qtWrWLNqlVrhgNevYMOKHUv2QAQAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/rar.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/rtf.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAPcAAAAAAAAAhDH/KXNzc4SEhJSUlLW1tcbGxs7OztbW1t7e3v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEAAAIALAAAAAAwADAAAAj+AAUIHEiwoMGDCBMqXMiwoUMBAyJKnEixokUADwkOWMCxo8ePID8OKIAxI8SQKFNyHGCApMmNKmN6HJCgZUmHMGXK3FjTZcEAQIMKHUpU50qOPW8KJMq0qdEFOZMSBPqUI1WjORdIXRqg6oKrIQ2IHWsxYkmwRtF+NHBgLFsECAzAnXu261CrQb8OLYCAr1+ObMW2LXAAwQGPCAAYEED1bgGheiGjDGyAwIEDfA93TLz4at7IngM87jpZgQEFBBQUUGAYsWLGpPOOlt1YdN/bBQCbLkCgt2nNHDnDxmv3LtDcaj2OVaCaQEvgC4SHFt00NumwLVOnFuy6s/XqovHd+sUNOG7v1QXYdh8O2inelHILoE+vfvPr6U1zv588t3/c9fhRJ5l4uPUFmFsIAvhdbcd5lJxX0i2I3GcdPVhVhF4dV+B4HJJnn3cZXufVh7CBV92IH0VoYn4btsjhegllhWJMwsU4o1E1IpRThzy6uCGMOt6oU44HyShkSEQatKOPPTYJZJFH0viajVGmlGRBSzbJ5I8kUlklklMG+SWYi3k5opNdijlmimFCuSabZar5ZnBtKjnnk3beSWecRfrn55+ABlpnQQAUauihiCaq6KKDFoTgo5BGKqlYAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/txt.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAKIHAP///1NTU8TExHh4eAAAAKKiotHR0QAAACH5BAEAAAcALAAAAAAwADAAAAP/eLrc/jDKSas9IevNuycXEwBkaZ7oGQxgiKVwTAYF645ybgZG3Vo4nW7UswGFQlzxNwkiY8FlxflMOaXNqsyTYT6oWp3A6wgOBOc0eq1us9GmcTb8lEvA9Jg9Yn67/35wJXsQeHkphF+HQollJYCQgWlxZA2Gi5RzmHqVIo+SoJCZd5syjZalnJqRrH6jfKkwp56xKLMLfa26r4W1tp24vie3Crmhx5ODwMXCvMVc0FxIjRko1QDX1zsBoc4YGjMbM9ji5No51ODm6h3h56Zk5e3r2RrdymXs4jgc7pfD8fTV80eQUcB6A9f5u0ciXbSH6sQse9Gs4cR/m4hRrKgRHCOmjgJCihxJsqRJkxMJqFzJsqXLlzAnupi5IAEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/xls.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAPcCAAAAAABjAP///3Nzc5SUlLW1tc7OztbW1v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEAAAIALAAAAAAwADAAAAj/AAUIHEiwoMGDCBMqXMiwocMBECNKnEixIgCHBQf828ixo8ePHgcQuIhRoEaQKFP+G1BgZEkBJ1XK5DjgQEuSD2fqXPnPpsucO2We9IlzYcygKGMSbXhUJgEDT6NC3Xh06cAAWLNq3cp1Z0WIOLmKHRvUgNmzZsMGQPoPK1uPBgAUEOgWad23G+POFeB2a0e/bQMUGEy4sOHD//TSXds1sNaNdQt4lNyRMkfJivkydjx2beCNlkFPHp25LuPOHCOPrkxa7uLUnB+nFny4du3ErjX/je15tmjWwC/j3nv3M2rVwX8LL937MVnkwpP/w5zbtN/GWG1rLzz89XPZ0JWL3J/eXfdx555Dk5dOnfjp733Tr46+vHpvkF2zb99evrjO8OvRJxpzbAGo3oH9daagfG8xt+BYhqXEHUeZIXQSgtJ9VMABNsVU4UEXzjfehBt2SGFuFo4o4nQcFqBRiS6euFeK0+1H2GUtvpijjAqFyN5kLRK2Y14ogqgiezvC6GGRBvkoYICgJTlkeTTaeGOUJirJY0JOHoljllN+2KSXyllJmZgZkQnlVxRRaWSNVrKFJkFN4aXSnAPVaSdKeJqE1p+ABiron0wWBMChiCaq6KKMNlpoQWZGapsAAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/normal/zip.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhMAAwAPdAAHsAAJQAAJQIAIRaCJQYCIwhEIxKKYxSKZRaKXNjUmtjY3Nzc1JSeyFShDlahEpKhCFajCFalClajClalCljlClrlDFjlDFrlDljjDVrlFJShFZmiGJvjHd7hHuEhIOGiSFjnCljnClrnDFjnDlrlEFwlFpmlFZ7lClroBx9yTl7nEN9rQCD7xWW8USV41qc4mNjlGNjnGNrlGV4lmtrnGt1omuEoH6ImXN3rWuDsXt7qY2Wq36GtYSctYCXuouWzP///5yltZyttYSlvYylvZSlvZStvZytvYStxpSlxpStxpSlzpStzpS1zlql1nOl1jml70Kl51Kt51ql72ul3mOl52ul52O162ut53Ot73ut53u173u974S975St1pS11hC1/xTB/ymt/zm4/0q9/1K5/0LG/07O/1q5/2u992O9/1rO/2u9/3O993PG93PG/3PO/3u193u994y174y975yl/5C985S995TG+4TO/3PW/4ze93Pe/5Te/5Tn93vn/6VSQudjKbV7McaMOd6lOeKxOee9OefGOd6cQrVSSuetSu+tSr1SUq2Ea72UhKWlpefOOe/OOe/WOe/eOffeOffeQvfnOffnQvfvOf/vQv/3AP/3Of/3Qv//CP//Of//QqWttZytxpy1xqW1xq21xqW1zqW9zq29zrW9zrXGzpyt1py11py13qHA2KfB4KnG77XG3rXO3rXO5729vb29zr3Gxr3GzsbGxsbGzsbO1sbW3s7Ozs7W3tbW1tbe597e3pzG96Wl/62t/621/63O77W1/7m9/8bG/7XO763O95zO/73W763W97XW973W96XW/63W/7XW/7Xe78be77Xe973e98be97Xe/73e/8be/5zn/63n/73n/5zv/63v/73v/8bn/8b3/8b//87O987O/87e787e987n987n/87//9be79bn79bn99bn/9bv/9b//97n997v997v/97//+fv9+fv/+f39+f3/+/v7+/v9+/39+/3//f39/f3//f//////yH5BAEAAEAALAAAAAAwADAAAAj/AIEIHEiwoMGDCBMqJKgMGrNkyYgRe0XRlUVWGFep2shkyZIkIHn4+LUQIZ5/KFPyW8myJT98MGPC5CGtxq2SBk+m3PnPn09//YIG3Ue06L4c4bTYxEnwDs+UP4EKHWqUKA5ub6gsZQrEDj+eUaUKrVr0Ho5tbNC8oHGTqdedYaf2I0v0ntlnaMqQccGWKZ2vKKPKnUvW7r16OJTpHSPGhYy2C+d8FSyX7j7D9erVKNOChWcWKWBALmhjgunTqCGgyke1sN3M9Xz44EGbNg4aH0iS/keHzpY2bd68gQNHzxrV9Ohihp3ZWLFiwoIFq8Njwa6CN1D2/h18ePE1KShY/0BtwYIPePUOM5fHvr27OjqsFxQhQsUKChRA6Nc/IQSYMGdo884/6HRxBRkl8IIebO016E478MlXUC+3VHhLLbPUoqGGG/z3hzj/cDMFFGhYYMs6DDbI3oMQxncdEI0YIOOMNNZYS4d8gMjNC1CUQQEq6mSmojzusNiifI4gwAknmVxySSWRHGJIIYUQIsgBBuxgSwmomRbCCUDWM6SR7bQTjItAAJIII2y26SabBSBiwAe1+JKLCl04cwIopKCiCzsqFkkmOmfKx8gniH6yJJOYNOpkAIoY4EEt8MBDARZOSMFFEL4AqmKZoLaDDqFoHhrIqaimGsgkkEpaCz1DiP8DTSteTEBKOYGSKeqohV5naifABhvsAKxG6gEq8JRDQR/+WBAEKri6N+iovNZg6CeBAAvAtttq0gmxrR4LTykiROGCFHkEoY57oe5KLaHW+spJtsIKO4Ak4SLbgzjRuFLrKOW0U2S7744KjjDxAsHIvAM07PDD+BqLrLJ90GOBENAKHGrBBh+c8MKZOOrkJCRLIgkk+cJTBAXmopFuwBtzDA442QhDg6HzqqoqyhKzg4Q4xNA6wSjTxFzwzDTbbCgm9NYL7AA8S3oKO+VcoE2zRZxSdJkyI51NzTf7yrS23ALgLdThTk0Eyy6osek0HHdM89fZFBO2wpc07fQAh7T/2gEpPgPdChMTaB2313RjY7eheT/sON8BDGLA3+ycI8ET/zhr+LtIz50NNqAXIwPjl5R8MiSoH6K6AAcocAMqJ3RpWg7WUIt44qGPfl0AvPfuu+8FJNBBEBOYsc08/7hjRxplWACLNZ3T/TnoocMg3y+PfKD99tp3sEAH4H+wwwxrnJFjiC+0UGIpy8ws/fTUY2OM9S/+ssstEkjQwP789z9BDmcIw/l2pD4LiGIZ74Mf9a4xPwkNJDu88Q1w3OCdNYwhDBSQHQVswD7pxW+BDKSfQWYQQe5QkDgWDEMQQqGCLSxjBkU4QilgUQ3cffAa14hGA19UkBLcJz/72Q8K/yoQCli08IVGgMUyaqhAEOZQhyI8CIVuwYBHjGIUsbPBEUYBiwyShxg+mMAJmnHDJ0YjGsfYgAMRIpppTGME/ziNBUQwIHQAwwqn+ccIWkFG0OHQjGhUIw8RQoNdlGkE1BhBN7rhBxGIwx/XeAEVJrCHETBjBEoghh8BGQ1opHGNBymkqCwQBzk6EpKSPE0WLJBJHJ7xlZ30pAZAaRAY7GJUGCDBCYoQilB48TQS6MEJSOCAVgISGsiUJS0LYstRTeMUpXCFLJABi1Io4ZrXXIUrVsGEVRADlrFM5jFmOciDNBMd1ljGEr9WjWUgAxkSkUgzmiFPWCZTnORcyDlv11TETXLynskkRz4VAoNxkOOgCE2oQhfKUIQqY6AJgYFEJbqBDWjgohjNqEY3qtEHQBQhv9jBAkZK0pKa9KQoNekOdKMQ++3ipTCNqUxnStOY/oIfAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icons/small/bmp.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAJEAAAAAAP///wCAAP///yH5BAEAAAMALAAAAAAQABAAAAI5nAepewcBIwTNPBlVuzivDybCSJalCI2BKqQC2rbrHKNrnLowjZM22xuJTERh6EhxdCRJyzKzQSYKADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/def.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMQAAKHU/zBlzf///9rp9hBKum2M0yNZyNfX1+vr68jIyFB5zper0+zu9jNt5RdRx/f393Oc7Nbe7/v773et+4yt787e+v//98PL40qM/4Gc0aW1ztbe96W951+I3u/3/wAxvSH5BAAAAAAALAAAAAAQABAAAAWooCAKQ2RGVfSMbMSwZITAkTgAOCDKYz1Mk4EkMsFUBLwBY4DpSAQci6XR8Awujxqk0RkoPhlBxwARXA6uRiBgcBAuAoUhgERX5muHRgBxsBkRCSZ4BgUCFARrBoBoD2xsBQOPDgoWZyoLiWsFim8MFwhZFgoEDgt8BAQZFhEHKwgDFhmJCwYGC6wJMyKwDwgaCxcSgLosFp8RAyURF8UwAr4HCQcHuyMhADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/doc.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIFAISGhMbHxgAA/wAAAP///////wAAAAAAACH5BAEAAAUALAAAAAAQABAAAANRWArcrrAAQisFQ4mxOx8XkYFWJVBD+nle4BJBuolnRwUwR9TgEOPAFG21A+Z4MQHO94r1eJRTJVmqMIOrrPSWWZRcza6kaolBAOB0WoxRud0JADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/eps.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAJEAAAAAAP////WQAP///yH5BAEAAAMALAAAAAAQABAAAAI6nAepewcBIwTNPBlVuzivDybCSJalKERpMEIjyrbp/AJt7K61zPOwG9MJUKbiMISkODoSpYWZ2SQTBQA7]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/fla.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMQAAGAFFP/BLurooZJjo/JWXfgDAf///6UAC8QAAP9zA/WDheP7+/01ALCQjvvGyf+zsvEoJfL//nc6A8eHev/q6kYAAPail+P338OIu//V5///8N///3IHXtIdHP//4rY5biH5BAAAAAAALAAAAAAQABAAAAV/oCGOZFkGY4GKi1kIRlIYUVR0USkwxrxBBcJmlGE8YoSEojDJlRwMRoDhsUwIEKeON+osCwoKqVGRiCzBzaJw1Ewq5QtgcLgAxTS4RBBxVBoECBEdBQ4iEoY5AAA0BxgGhCMLOWSPBh8IBgsKJhWMIhoIAyYiHJYiA5mkq6ytIQA7]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/folder.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMQAAP/PY//3nP/fe//vhKV5EP/3pffXhOe+Ut62Qt62Od62Sv/3jP//lP//9//ne//nhP/Xa72eMf//nJx5GLWOGP////f39wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAVnoCWOZDlGaGSWUeU26mq1Ui1VVJ4TZ7D8P5eQJ4oMHrqkciagVBpQqNDQoEwiEIpNUtgCJNYIQMsomxmLA/g6ljze8MdAUQi3Hfi8Q4BYi7UQgYKBCQFWFkqJOhMiE46PkI8yk5QmIQA7]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/gif.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIEAMDAwACAAP///wAAAP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAQABAAAAM8SDrcPioOQWsdIJJpbZNd+IxkYJ4oypgU23pDIKSzfK5zbcstzv67wIrnyt1iqaSJxGSAQp4nlAJZNBsJADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/gz.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPdAAHsAAJQAAJQIAIRaCJQYCIwhEIxKKYxSKZRaKXNjUmtjY3Nzc1JSeyFShDlahEpKhCFajCFalClajClalCljlClrlDFjlDFrlDljjDVrlFJShFZmiGJvjHd7hHuEhIOGiSFjnCljnClrnDFjnDlrlEFwlFpmlFZ7lClroBx9yTl7nEN9rQCD7xWW8USV41qc4mNjlGNjnGNrlGV4lmtrnGt1omuEoH6ImXN3rWuDsXt7qY2Wq36GtYSctYCXuouWzP///5yltZyttYSlvYylvZSlvZStvZytvYStxpSlxpStxpSlzpStzpS1zlql1nOl1jml70Kl51Kt51ql72ul3mOl52ul52O162ut53Ot73ut53u173u974S975St1pS11hC1/xTB/ymt/zm4/0q9/1K5/0LG/07O/1q5/2u992O9/1rO/2u9/3O993PG93PG/3PO/3u193u994y174y975yl/5C985S995TG+4TO/3PW/4ze93Pe/5Te/5Tn93vn/6VSQudjKbV7McaMOd6lOeKxOee9OefGOd6cQrVSSuetSu+tSr1SUq2Ea72UhKWlpefOOe/OOe/WOe/eOffeOffeQvfnOffnQvfvOf/vQv/3AP/3Of/3Qv//CP//Of//QqWttZytxpy1xqW1xq21xqW1zqW9zq29zrW9zrXGzpyt1py11py13qHA2KfB4KnG77XG3rXO3rXO5729vb29zr3Gxr3GzsbGxsbGzsbO1sbW3s7Ozs7W3tbW1tbe597e3pzG96Wl/62t/621/63O77W1/7m9/8bG/7XO763O95zO/73W763W97XW973W96XW/63W/7XW/7Xe78be77Xe973e98be97Xe/73e/8be/5zn/63n/73n/5zv/63v/73v/8bn/8b3/8b//87O987O/87e787e987n987n/87//9be79bn79bn99bn/9bv/9b//97n997v997v/97//+fv9+fv/+f39+f3/+/v7+/v9+/39+/3//f39/f3//f//////yH5BAEAAEAALAAAAAAQABAAAAjRAIEIBMKM2CtXrFQxScJjoMN/EP3167dvHw4qDgX+8yeR4r57OMi4GPhvyxs4ECp+rFevWLAFAm/dqlULjLgpFurJ29luASBGQBkhqqXiBKqd7tqhW8Cok9MBilBRsFBOXlJ0SxkN2ApVKtV2StGBY+q0E9RTFyxMCwsuG1OuAwaRkqBWbFtsC3592NvhwxpxLyy0zYYNr8YtbuCEUTGjFOHC0WAOnPZvwjtgE0ZguxYtskN0JEJNmNDDAWdo0CQLFPt4czTUqR0umE279oIdAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/html.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOZOAISmxs7P/2Oezvf3973P/2tpnK3P/ylxpXOu3lJRhKXH5ymGzr3P53OGtRg4Y73f/87n/yGe5zmW3rXX70qu70LP/3uGrUJhhDmOzimW5zGe75y23t7v/+/3/ymOxufv92u+7zG+97XP/0Ku/0p5rdbv/zFBa8bX78bn93NxpYzv/yGOzjGe3nP3/5S+1muOrTlplDFBWjme52OWtb3X93PX/+f3/73f9ymW7/f//zmu9ymm75TH/ym29zGO3iF5vTFxtWNhlDGW7zGu763P73PX71JRjMbn/1pZjClZjFKOvYyu1nNxc////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAE4ALAAAAAAQABAAAAfLgE6CS4SFhA2CiYNNjI1NDQKKi00fJ4QTDQQykksCSp5KTSEFpBaJSkoqLRUhAk0gHzkEFkxOMwIoQx4eETskTR0dBCm1SgMABwpNPyMSLxw2BAVMxgA9KxQUPhojJAwc0kzHFRFJ5ucwDCUiQUwANQcZSTxH9UcQRBAiSNQS8ThAFCwYeGHCEQMJmLAYgOGABiE6ioCI4eLBA4RMEABgmMSBCQcXNtAIcDChEwQoAyjYwCDADZIBMCZCgsSIzZo4a9ZKxKSnz589AwEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/jpg.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIEAAAAAP///4CAAMDAwP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAQABAAAAM8SArcDiqCQGsFI5JpbZNd+IykYJ4oyggVG5yUubLma6tAXb80P/M8Gm0VE+5kuZQSSWqCQp4nlAJZNB0JADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/js.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIAAP///4CAgAAAAAAA/wAAgAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAM7CLrcGjBKF9yqDFsgMpDQ0l0bQBDj94HKMKSa48LrBMzkhj911L45y07FQP1ojAHhKBI4nwSXstRMARIAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/mov.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPcAAAAAABAI5xAQEBgYEBgYGBghGCEIziEY7yEhISFS3iFr5ykx5zExMTH/KTkhxjk5OTlC1kJS70Kt3kpz70qMvUqM50qt71Jz91paWlpj3lprvVqt92NjzmtzvXNjxnNzznuExnucrYSU54S91oycvZSUxpSczpStvZStzqW1ta293r3Gzsa1xtbW3tbe1t7W1t7e3u/n5+/v5////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH5BAEAAA0ALAAAAAAQABAAAAijABsAQIAAgMGDBxsoFDjjwYyHEGcAkLhwIIKIECdSZOjwBQULFTTAGGhQocUYEiZ4+CACwgwEAgCYbIhiA4sZIToEWMFgo8UREWacAPEiQQkCMWc+UDGhxcMUClL0lCmQoIwLC0iEkGDARYGkHGfIyHAAAgcHJqaaJIgRIkyqCOMe9DkDQ927dl+C1Xg3Iga1DO1iEHz3rUmDBBEMEMA4ZsmAAAA7]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/pdf.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMQdAOeOjOdBQueuredJSue2td7n597Pzudpa+eenN7X1udRWu9ZWueGhOd5e+e+vedZWu9BSu9RUudhY+dxc+84OecwMec4Que2vecoKRAQEP8AAAAAAN7f3v///wAAAAAAACH5BAEAAB0ALAAAAAAQABAAAAVjYCduZFlmmahuXOu2mZaaNMnF8qbtPM+eul6P5crUaK/U6DUQvG6rlwXxVHaILczEVYAuWwgD4JCMchILAaFCCSguViIjAGgQBAAJJM55BJ5nDnEHAwaAHAVxEYdFKiiPkJAhADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/php.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIAAP///54LDgAAANS6uKNsZwAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAANFCErcrhCQGImgky5wYdZCKARkaZrDCAUAyypk6rb0HKvwugZyS9a+m+tnK8lOyJtHE0ktB9AoFODcMBVViXQL7UhE4HACADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/png.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIEAAAAAP///4AAAMDAwP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAQABAAAAM8SArcDiqCQGsFI5JpbZNd+IykYJ4oygiUGbjuu740zZ7ze7f2fOo2lg92Y8kAqSSOxIQsQh3nBuqRNBsJADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/ppt.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIGAISGhISGAMbHxgAAAP8AAP///////wAAACH5BAEAAAYALAAAAAAQABAAAANQaArcrtCAQitligTNd7gFYHxWRVBDOpydVgRCXAjDtxUsbtH568Iyms3So/BwpF9MMKv5PMXmqUQBMoUt6G4Amcxmyyt3Qd12w+jYWKJquxMAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/rar.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOYAABAwAAAwUvf394SGAJSWpQBRlABRnJyerTEwMe/3/+fn973H1v//taWmtYSGlGsYIQCGUowAUgBZpVJRAABRhFrvvcbHGP951gBRpe9ZtYzvzhBBAHPH/zFRACnnpULnrQA4WiGe/3NxABDfnHPvxoTP//9pzr2+ADmm//dhxv++9/+m5/+W3rXn/wDflAA4a0qu//+G1pzX/73351q2/2O+/wCOWpQAWvf//4QAUtbf51IAAFoYABhJAAA4Y////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAAeZgDyCg4SFAg0HBA4PIjmOj487Czo6ChEMKissMRcXJikZOzo4Pz8PFjepqqkROzg4CToIAzu1trdAubq7vIeJDiAUPsPExAGTlRQMLTIlHDU0MCghAaOlLxYSEhgG3QXfAa+xs8XlAbzou76KGxM97/DwAMgKEwwzGiQVFR8eIy4ArP3ocMKGwYM2IEAAIE7WgHgQAaSbKCAQADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/rtf.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIFAISGhMbHxgAA/wAAAP///////wAAAAAAACH5BAEAAAUALAAAAAAQABAAAANRWArcrrAAQisFQ4mxOx8XkYFWJVBD+nle4BJBuolnRwUwR9TgEOPAFG21A+Z4MQHO94r1eJRTJVmqMIOrrPSWWZRcza6kaolBAOB0WoxRud0JADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/txt.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIAAP///0NDQwAAAMfHx1lZWQAAAAAAAAAAACH5BAAAAAAALAAAAAAQABAAAANECErcrhCQGImgky5wYdZCKARkaZrDCAUAyypkSrYuTQeyO5d3buu9EXAYE56OuI5EE0l5AIOoNApVfpjOxXQbtYq+4AQAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/xls.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAKIGAPf39wCGAMbHxgAAAISGhP///////wAAACH5BAEAAAYALAAAAAAQABAAAANQaErcrtCQQislQwWyK5/FlH0dSQ3oEBRb+wlwIQzA6m4Clc9Azb6wGK/1I8pkKpMriCRxipbZ7UncZRYV13EGmQR3wqvEQkZ2v2iYGJNqtxMAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/small/zip.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPdAAHsAAJQAAJQIAIRaCJQYCIwhEIxKKYxSKZRaKXNjUmtjY3Nzc1JSeyFShDlahEpKhCFajCFalClajClalCljlClrlDFjlDFrlDljjDVrlFJShFZmiGJvjHd7hHuEhIOGiSFjnCljnClrnDFjnDlrlEFwlFpmlFZ7lClroBx9yTl7nEN9rQCD7xWW8USV41qc4mNjlGNjnGNrlGV4lmtrnGt1omuEoH6ImXN3rWuDsXt7qY2Wq36GtYSctYCXuouWzP///5yltZyttYSlvYylvZSlvZStvZytvYStxpSlxpStxpSlzpStzpS1zlql1nOl1jml70Kl51Kt51ql72ul3mOl52ul52O162ut53Ot73ut53u173u974S975St1pS11hC1/xTB/ymt/zm4/0q9/1K5/0LG/07O/1q5/2u992O9/1rO/2u9/3O993PG93PG/3PO/3u193u994y174y975yl/5C985S995TG+4TO/3PW/4ze93Pe/5Te/5Tn93vn/6VSQudjKbV7McaMOd6lOeKxOee9OefGOd6cQrVSSuetSu+tSr1SUq2Ea72UhKWlpefOOe/OOe/WOe/eOffeOffeQvfnOffnQvfvOf/vQv/3AP/3Of/3Qv//CP//Of//QqWttZytxpy1xqW1xq21xqW1zqW9zq29zrW9zrXGzpyt1py11py13qHA2KfB4KnG77XG3rXO3rXO5729vb29zr3Gxr3GzsbGxsbGzsbO1sbW3s7Ozs7W3tbW1tbe597e3pzG96Wl/62t/621/63O77W1/7m9/8bG/7XO763O95zO/73W763W97XW973W96XW/63W/7XW/7Xe78be77Xe973e98be97Xe/73e/8be/5zn/63n/73n/5zv/63v/73v/8bn/8b3/8b//87O987O/87e787e987n987n/87//9be79bn79bn99bn/9bv/9b//97n997v997v/97//+fv9+fv/+f39+f3/+/v7+/v9+/39+/3//f39/f3//f//////yH5BAEAAEAALAAAAAAQABAAAAjRAIEIBMKM2CtXrFQxScJjoMN/EP3167dvHw4qDgX+8yeR4r57OMi4GPhvyxs4ECp+rFevWLAFAm/dqlULjLgpFurJ29luASBGQBkhqqXiBKqd7tqhW8Cok9MBilBRsFBOXlJ0SxkN2ApVKtV2StGBY+q0E9RTFyxMCwsuG1OuAwaRkqBWbFtsC3592NvhwxpxLyy0zYYNr8YtbuCEUTGjFOHC0WAOnPZvwjtgE0ZguxYtskN0JEJNmNDDAWdo0CQLFPt4czTUqR0umE279oIdAQEAOw==]]></data>
	</file>
	<file>
	  <filename>/images/icons/sort_down.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFAAPANUAAOfu8OLr7t7o693n7Mjh6bjY4r/R2LnR2qrQ3LHL063G0K7GzqzFzqnE0KnFz6XBy5y8yJu6xJu6xZG0wpCyvYmtu4OquoGpuoOotX2ltXqisnmitHSfsXWerHOcqnOcq2+ZqW2arG6Yp2uYqWeVp2WTomWTpGCQolmKnVeImlKFmEyAk0yBkkV7jv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAC4ALAAAAAAUAA8AAAZvQJdwSCwaG5ekcsm8NIYWQgFBrVqpFuJgc9hwvuAwZ1BUTCChtHqtMLo0jgxpTp9r3K7AKHHq+/sBeC4MFRUoh4gMgkIfDyYqkCofi0ICIBIrmSkClEILGB0tLQudQx4RLCKlQwAlFACrQwYGsatBADs=]]></data>
	</file>
	<file>
	  <filename>/images/icons/sort_up.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFAAPANUAAPX4+fD19+bu8ePs79vn7Nfj58fY4LjO163I1KvH0qXF0KjCzKLBzKLAzKPAzKG/y529ypu7yJm5xZK5xpe4xJW3xI6ywI6xwIiuvoituoqtuoKuvYGpuX+ntX+nt36mt3mjtHqisnehsXSfsXOer3CcrmuYqmeVp2SSo2OSpGKRomORo16OoFWHmv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEHAC4ALAAAAAAUAA8AAAZwQJdwSCwajy4CAckMQBAB5tGRwDykRUOk8vkYsEKBhQEqcwTgS8Mzao8u2MPlUqrbD8wB6WHq+/sDRwAhFCInh4iHIQBGCx0ZKZGSkwtFBSsSKiybnJ0sBUMAKAoTG6anqKYojC4aLa+wsbItGmBMQQA7]]></data>
	</file>
	<file>
	  <filename>/images/pencil.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFUSURBVDjLrZM/SAJxGIZdWwuDlnCplkAEm1zkaIiGFFpyMIwGK5KGoK2lphDKkMDg3LLUSIJsSKhIi+684CokOtTiMizCGuzEU5K3vOEgKvtBDe/2Pc8H3x8NAM1fQlx4H9M3pcOWp6TXWmM8A7j0629v1nraiAVC0IrrwATKIgs5xyG5QiE+Z4iQdoeU2oAsnqCSO1NSTu+D9VhqRLD8nIB8F0Q2MgmJDyipCzjvYJkIfpN2UBLG8MpP4dxvQ3ZzGuyyBQ2H+AnOOCBd9aL6soh81A5hyYSGWyCFvxUcerqI4S+CvYVOFPMHxLAq8I3qdHVY5LbBhJzEsCrwutpRFBlUHy6wO2tEYtWAzLELPN2P03kjfj3luqDycV2F8AgefWbEnVqEHa2IznSD6BdsVDNStB0lfh0FPoQjdx8RrAqGzC0YprSgxzsUMOY2bf37N/6Ud1Vc9yYcH50CAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmcgPSBhcnJheSgKJ3Bvc3RpbnN0YWxsJyA9PiAnUG9zdCBJbnN0YWxsIE1lc3NhZ2UuJywKJ3Bvc3R1bmluc3RhbGwnID0+ICcnLAoncmVhbGx5X3VuaW5zdGFsbCcgPT4gJ1JlYWxseT8gQXJlIHlvdSBzdXJlCnlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nLAondW5pbnN0YWxsZWQnID0+ICdNb2R1bGUgVW5pbnN0YWxsZWQuJywKJ2luc3RhbGxlZCcgPT4gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nLAondXBncmFkZWQnID0+ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nLAovLyAnbW9kZGVzY3JpcHRpb24nID0+ICdUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQgYnkgTSZDIEZhY3RvcnknLAoKJ3RhYl9pdGVtcycgPT4gJ0l0ZW1zJywKJ3RhYl90ZW1wbGF0ZXMnID0+ICdUZW1wbGF0ZXMnLAondGFiX29wdGlvbnMnID0+ICdPcHRpb25zJywKJ3RhYl9oZWxwJyA9PiAnSGVscCcsCgonZXJyb3InID0+ICdFcnJvciEnLAovLyAnYWRtaW5fdGl0bGUnID0+ICdDb21wYW5pZXMgQWRtaW4gUGFuZWwnLAonYWRtaW5kZXNjcmlwdGlvbicgPT4gJ1RoaXMgbW9kdWxlIGhlbHBzIHlvdSB0byBtYW5hZ2Ugc3BlY2lmaWMgaXRlbXMnLAondGl0bGVUZW1wbGF0ZScgPT4gJ1RpdGxlJywKJ2NvZGVUZW1wbGF0ZScgPT4gJ1RlbXBsYXRlJywKJ2FjY2Vzc2RlbmllZCcgPT4gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLicsCidwb3N0aW5zdGFsbCcgPT4gJ0JlIHN1cmUgdG8gc2V0ICJNYW5hZ2UgQ29tcGFuaWVzIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhJywKCidzdWJtaXQnID0+ICdTdWJtaXQnLAonYXBwbHknID0+ICdBcHBseScsCidjYW5jZWwnID0+ICdDYW5jZWwnLAoncmVzdG9yZWxpc3QnID0+ICdSZXN0b3JlIGxpc3QnLAoncmVzdG9yZWRldGFpbHMnID0+ICdSZXN0b3JlIGRldGFpbHMnLAoncHVibGlzaCcgPT4gJ1B1Ymxpc2gnLAondW5wdWJsaXNoJyA9PiAnVW5wdWJsaXNoJywKCgonYWRkIHRlbXBsYXRlJyA9PiAnQWRkIHRlbXBsYXRlJywKJ3NlbGVjdCBvbmUnID0+ICdTZWxlY3Qgb25lJywKJ2Zvcm1fdGVtcGxhdGUnID0+ICdUZW1wbGF0ZScsCidmb3JtX3Jlc3RvcmVfdGVtcGxhdGVfZnJvbScgPT4gJ1Jlc3RvcmUgdGVtcGxhdGUgZnJvbScsCidmb3JtX2NvZGUnID0+ICdDb2RlJywKJ2Zvcm1fZGVmYXVsdF90ZW1wbGF0ZV9mb3InID0+ICdEZWZhdWx0IHRlbXBsYXRlIGZvcicsCidkZWZhdWx0IHRlbXBsYXRlIGZvcicgPT4gJ2RlZmF1bHQgdGVtcGxhdGUgZm9yICIlcyIgYWN0aW9uJywKCi8vIHVzZXIgZm9ybQoneW91IGRvIG5vdCBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGlzIGFjdGlvbicgPT4gJ1lvdSBkbyBub3QgaGF2ZSB0aGUgcGVybWlzc2lvbiB0byB1c2UgdGhpcyBhY3Rpb24nLAonZm9ybV91c2VyX2lkJyA9PiAnVXNlciBpZCcsCidmb3JtX3RpdGxlJyA9PiAnVGl0bGUnLAonaXRlbSBwb3N0ZWQnID0+ICdJdGVtIHN1Y2Nlc3NmdWxseSBwb3N0ZWQnLAoKJ3NhdmUnID0+ICdTYXZlJywKJ3NhdmVfYWRkJyA9PiAnU2F2ZSAmYW1wOyBhZGQgYSBuZXcgaXRlbScsCidzYXZlX2NvbnRpbnVlJyA9PiAnU2F2ZSAmIGNvbnRpbnVlIGVkaXRpbmcnLAonZGVsZXRlJyA9PiAnRGVsZXRlJywKJ2FkZF9pdGVtJyA9PiAnQWRkIGl0ZW0nLAonYWRkX2l0ZW1fZm9yJyA9PiAnQWRkIGl0ZW0gZm9yIFslc10nLAonZWRpdF9pdGVtJyA9PiAnRWRpdCBpdGVtJywKJ3VwZGF0ZV9vYmplY3RzJyA9PiAnVXBkYXRlIG9iamVjdHMnLAoncHJldmlld19zJyA9PiAnUHJldmlldyBbJXNdJywKCidmb3JtX3BhcmVudF9pZCcgPT4gJ1BhcmVudCcsCidmb3JtX29yZGVyX2J5JyA9PiAnT3JkZXIgYnknLAonZm9ybV9vcmRlcl9ieV9kaXJlY3Rpb24nID0+ICdPcmRlciBkaXJlY3Rpb24nLAonZm9ybV9pdGVtc19wZXJfcGFnZScgPT4gJ0l0ZW1zIHBlciBwYWdlJywKJ2Zvcm1fZGF0ZV9mb3JtYXQnID0+ICdEYXRlIGZvcm1hdCcsCidmb3JtX2RlZmF1bHRfcGFnZScgPT4gJ0RlZmF1bHQgcGFnZScsCidmb3JtX3Nob3dfcGFyZW50JyA9PiAnU2hvdyBwYXJlbnRzIGRyb3Bkb3duJywKJ2Zvcm1fc2hvd19wYXJlbnRfZmlyc3RfbGV2ZWwnID0+ICdTaG93IHBhcmVudHMgZmlyc3QgbGV2ZWwgb25seScsCidmb3JtX3NhdmVfYWRkJyA9PiAnU2hvdyBTYXZlICZhbXA7IGFkZCBidXR0b24nLAonZm9ybV9pbmRleF9jb250ZW50JyA9PiAnSW5kZXggY29udGVudCcsCidmb3JtX3VzZV9jbW9uJyA9PiAnVXNlIENhbXBhaWduIE1vbml0b3InLAonZm9ybV9jbW9uX2Zyb20nID0+ICdDYW1wYWlnbiBNb25pdG9yIEZyb20nLAonZm9ybV9jbW9uX2Zyb21fZW1haWwnID0+ICdDYW1wYWlnbiBNb25pdG9yIEZyb20gZW1haWwnLAonZm9ybV9jbW9uX3RlbXBsYXRlJyA9PiAnQ2FtcGFpZ24gTW9uaXRvciB0ZW1wbGF0ZScsCidmb3JtX2Ntb25fdGVtcGxhdGVfcGxhaW4nID0+ICdDYW1wYWlnbiBNb25pdG9yIHRlbXBsYXRlIChwbGFpbiB0ZXh0IHZlcnNpb24pJywKJ2Zvcm1fY21vbl9kZWZhdWx0X3BhZ2UnID0+ICdEZWZhdWx0IHBhZ2UgZm9yIENhbXBhaWduIE1vbml0b3IgSFRNTCcsCidmb3JtX3VzZV90d2l0dGVyJyA9PiAnVXNlIFR3aXR0ZXInLAonZm9ybV90d2l0dGVyX3RlbXBsYXRlJyA9PiAnVHdpdHRlciB0ZW1wbGF0ZSAoYXZhaWxhYmxlIGZpZWxkczogeyR0aXRsZX0sIHskdXJsfSknLAonbW9kdWxlX29wdGlvbnMnID0+ICdPcHRpb25zJywKCgonZm9ybV9yZW1vdGVfZ2FsbGVyeScgPT4gJ1JlbW90ZSBnYWxsZXJ5IFVSTCcsCidmb3JtX2VuYWJsZV9hcGknID0+ICdFbmFibGUgQVBJJywKCidzZWxlY3Rfb25lJyA9PiAnU2VsZWN0IG9uZScsCidleHBvcnQnID0+ICdFeHBvcnQnLAonc2VyaWFsaXplZF9kYXRhcycgPT4gJ1BIUCBTZXJpYWxpemVkIGFycmF5JywKJ2Rvd25sb2FkJyA9PiAnRG93bmxvYWQnLAoKJ2Zvcm1fdXBsb2Fkc19wYXRoJyA9PiAnVXBsb2FkcyBwYXRoJywKJ2Zvcm1fbW9kdWxlJyA9PiAnTW9kdWxlJywKJ2Zvcm1fc2VsZWN0X21vZHVsZV9mb3JfbWlncmF0aW9uJyA9PiAnU2VsZWN0IHRoZSBtb2R1bGUgeW91IHdhbnQgdG8gbWlncmF0ZScsCidmb3JtX2ZpZWxkcycgPT4gJ0ZpZWxkcycsCidmb3JtX3NlbGVjdF9maWVsZHNfdG9fcG9wdWxhdGUnID0+ICdTZWxlY3QgdGhlIG1vZHVsZVwncyBmaWVsZHMgeW91IHdhbnQgdG8gcG9wdWxhdGUnLAonQ29udGludWUnID0+ICdDb250aW51ZScsCgonY2hhbmdlbG9nJyA9PiAnPHVsPgo8bGk+VmVyc2lvbiAwLjAuMSAtIDEgTm92ZW1iZXIgMjAxMi4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+JywKJ2hlbHAnID0+ICcKPGgzPkhlbHA8LzM+CjxwPlRvIGNhbGwgYSBnYWxsZXJ5LCB1c2Uge01DTWVkaWFzIGNvbGxlY3Rpb25faWQ9IllvdXIgQ29sbGVjdGlvbiBJRCIgdGVtcGxhdGU9IllvdXIgdGVtcGxhdGUifS4gVGVtcGxhdGUgaXMgbm90IG1hbmRhdG9yeS4gWW91IGNhbiBhbHNvIHBhc3MgYSBsaXN0IG9mIGNvbGxlY3Rpb25zIElEcyB3aXRoIHBhcmFtIGNvbGxlY3Rpb25faWRzIGFuZCB0aGUgY29sbGVjdGlvbnMgaWRzIHNlcGFyYXRlZCBieSBjb21hLiBZb3UgY2FuIHBhc3MgcGFyYW1zIGFuZCByZWN1cGVyYXRlIHRoZW0gdmlhIHskbWNtZWRpYXNfcGFyYW1zfTwvcD4KPGg0PlRodW1ibmFpbHM8L2g0Pgo8cD5UbyBjcmVhdGUgdGh1bWJuYWlscywgdXNlIHtNQ01lZGlhcyBhY3Rpb249InRodW1ibmFpbCIgd2lkdGg9MTUwIGhlaWdodD0xNTAgZmlsZT0kZmlsZS0+Z2V0UmVsYXRpdmVQYXRoKCl9IHdoaWNoIHdpbGwgY3JlYXRlIHRoZW0gaW4gdGhlIGNhY2hlIGRpcmVjdG9yeS48L3A+CjxwPllvdSBjYW4gYWxzbyB1c2UgYW55IHBpY3R1cmVzIGluc2lkZSB0aGUgL3VwbG9hZHMvIGRpcmVjdG9yeS4gWW91ciBmaWxlbmFtZSBzaG91bGQgYmVnaW4gd2l0aCAiL3VwbG9hZHMvIjwvcD4KPHA+WW91IGNhbiB1c2UgdGhlIHNob3J0ZXIgdmVyc2lvbjoge1RodW1ibmFpbH08L3A+CjxwPjx1Pk9wdGlvbnM8L3U+PC9wPgo8dWw+CiAgPGxpPndpZHRoPC9saT4KICA8bGk+aGVpZ2h0PC9saT4KICA8bGk+c2l6ZTogc2V0IGJvdGggd2lkdGggYW5kIGhlaWdodDwvbGk+CiAgPGxpPm1vZGUgKG9ubHkgImRlZmF1bHQiIGZvciB0aGUgbW9tZW50KTwvbGk+CjwvdWw+CjxoND5Db3ZlcjwvaDQ+CjxwPllvdSBjYW4gZ2V0IHRoZSB0aHVtYm5haWwgb2YgdGhlIGNvdmVyIG9mIGEgZmlsZSB3aXRoIHtNQ01lZGlhcyBhY3Rpb249InRodW1ibmFpbCIgd2lkdGg9MTUwIGhlaWdodD0xNTB9LiBJdCB1c2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgVGh1bWJuYWlscy48L3A+CjxoND5EaXJlY3QgdGh1bWJuYWlsaW5nPC9oND4KPHA+SWYgeW91IG5lZWQgdG8gZG8gYSAiZGlyZWN0IiB0aHVtYm5haWxpbmcsIHlvdSBjYW4gdXNlIHRoZSBVUkwgXCcvdGh1bWJuYWlsL3BhdGhfdG9feW91cl9maWxlLmV4dFwnIGRpcmVjdGx5IGluIHRoZSBTUkMgYXR0cmlidXRlIG9mIHlvdXIgaW1hZ2UuIFlvdSBjYW4gYWxzbyBhZGQgdGhlIGRlc2lyZSBzaXplczogXCcvdGh1bWJuYWlsLzE1MC9wYXRoX3RvX3lvdXJfZmlsZS5leHRcJyB3aWxsIGNyZWF0ZSBhIDE1MHgxNTAgdGh1bWJuYWlsLiBcJy90aHVtYm5haWwvMzAwLzIwMC9wYXRoX3RvX3lvdXJfZmlsZS5leHRcJyB3aWxsIGNyZWF0ZSBhIHRodW1ibmFpbCAzMDBweCB3aWR0aCBhbmQgMjAwcHggaGVpZ2h0LiBUaG9zZSB1cmwgd2lsbCBkaXJlY3RseSBkZWxpdmVycyB5b3UgdGhlIGltYWdlICh0aHJvdWdoIGEgcmVkaXJlY3Rpb24pLjwvcD4KPGg0PkRpdmVyczwvaDQ+CjxwPkxpc3Qgb2YgZnVuY3Rpb25zIG9uIGEgTUNGaWxlIGVudHJ5PC9wPgo8dWw+CiAgPGxpPmdldEZpbGVTaXplKCk8L2xpPgogIDxsaT5nZXRGaWxlRXh0ZW5zaW9uKCk8L2xpPgogIDxsaT5nZXRGaWxlSWNvbigpPC9saT4KPC91bD4KPGgzPlN1cHBvcnQ8L2gzPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEwLCBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgPGEgaHJlZj0ibWFpbHRvOmpjY0Btb3JyaXMtY2hhcG1hbi5jb20iPiZsdDtqY2NAbW9ycmlzLWNoYXBtYW4uY29tJmd0OzwvYT4gLSBNb3JyaXMgJmFtcDsgQ2hhcG1hbi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPicKKTs=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAQAGNsYm9vbAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAGMAcwBzZHNjbGJvb2wBAAAAAgBqAHNkc2NsYm9vbAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAABAAAAwAAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAAIAAAAGAAAAAAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lib/class.CMSFormInputFiles.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgLyoKICAgIENNU0Zvcm0gSW5wdXQgRmlsZXMKICAgIAogICAgVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBoYW5kbGUgbXVsdGlwbGUgZmlsZXMgc2NlbmFyaW8KICAqLwppZihjbGFzc19leGlzdHMoJ0NNU0Zvcm1JbnB1dEhpZGRlbicpKQp7CiAgY2xhc3MgQ01TRm9ybUlucHV0RmlsZXMgZXh0ZW5kcyBDTVNGb3JtSW5wdXRIaWRkZW4KICB7CiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0dXAoJGlkLCAkbmFtZSwgJiRmb3JtLCAkbW9kdWxlX25hbWUsICRzZXR0aW5ncyA9IGFycmF5KCkpCiAgICB7CiAgICAgIHBhcmVudDo6c2V0dXAoJGlkLCAkbmFtZSwgJGZvcm0sICRtb2R1bGVfbmFtZSwgJHNldHRpbmdzKTsKICAgICAgCiAgICAgICR0aGlzLT5zZXRTZXR0aW5nKCdkZWZhdWx0X3ZhbHVlJywgTUNGaWxlQ29sbGVjdGlvbjo6Y3JlYXRlVW5pcXVlQ29sbGVjdGlvbklkKCkpOwogICAgICAkdGhpcy0+c2V0U2V0dGluZygndXBsb2FkX2J1dHRvbl90ZXh0JywgJ1NlbGVjdCBmaWxlcyB0byB1cGxvYWQnKTsKICAgICAgCiAgICAgICR0aGlzLT5zZXRTZXR0aW5nKCdhZG1pbl9saXN0X2FjdGlvbicsICdhZG1pbkxpc3QnKTsKCgkJCSRmb3JtLT5zZXRNdWx0aXBhcnRGb3JtKCk7CgkJCQogICAgICByZXR1cm4gJHRoaXM7CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGN1dFVybCgkb3JpZ2luKQogICAgewogICAgICBsaXN0KCR1cmwsICRxdWVyeSkgPSBleHBsb2RlKCc/JywgJG9yaWdpbik7CiAgICAgIAogICAgICAkcCA9IGV4cGxvZGUoJyZhbXA7JywgJHF1ZXJ5KTsKICAgICAgJHBhcmFtcyA9IGFycmF5KCk7CiAgICAgIAogICAgICBmb3JlYWNoKCRwIGFzICR2YSkKICAgICAgewogICAgICAgIGxpc3QoJGssJHYpID0gZXhwbG9kZSgnPScsJHZhKTsKICAgICAgICAkcGFyYW1zWyRrXSA9ICR2OwogICAgICB9CiAgICAgIAogICAgICByZXR1cm4gYXJyYXkoJ2Jhc2UnID0+ICR1cmwsICdwYXJhbXMnID0+ICRwYXJhbXMpOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SW5wdXQoKQogICAgeyAgICAgCiAgICAgICRpbnB1dCA9IHBhcmVudDo6Z2V0SW5wdXQoKTsKICAgICAgJGNvbGxlY3Rpb25faWQgPSAkdGhpcy0+Z2V0VmFsdWUoKTsKICAgICAgCiAgICAgICRtb2R1bGUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01DTWVkaWFzJyk7CiAgICAgICRoZWFkZXIgPSAkbW9kdWxlLT5sb2FkSGVhZGVyKCk7CiAgICAgIC8vICR1cGxvYWRlciA9ICRtb2R1bGUtPkdldE1vZHVsZVVSTFBhdGgoKSAuICcvdXBsb2FkZXIucGhwJzsKICAgICAgCiAgICAgICR1cmwgPSBzZWxmOjpjdXRVcmwoJG1vZHVsZS0+Q3JlYXRlTGluaygkdGhpcy0+aWQsJ3VwbG9hZCcsJycsJycsYXJyYXkoJ2NvbGxlY3Rpb25faWQnID0+ICRjb2xsZWN0aW9uX2lkKSwgJycsIHRydWUpIC4gJyZhbXA7c3VwcHJlc3NvdXRwdXQ9MSZhbXA7c2hvd3RlbXBsYXRlPTAnKTsKICAgICAgCiAgICAgICRtb2R1bGUtPnNtYXJ0eS0+YXNzaWduKCdlZGl0Jywgc3RyX3JlcGxhY2UoJyZhbXA7JywnJicsICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCdlZGl0VGl0bGUnLCcnLCcnLGFycmF5KCksICcnLCB0cnVlKSAuICcmYW1wO3N1cHByZXNzb3V0cHV0PTEmYW1wO3Nob3d0ZW1wbGF0ZT0wJykpOwogICAgICAKICAgICAgLy8gJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgICAKICAgICAgJGxpc3QgPSAkbW9kdWxlLT5FeGVjdXRlQWN0aW9uKCR0aGlzLT5nZXRTZXR0aW5nKCdhZG1pbl9saXN0X2FjdGlvbicpLCAkdGhpcy0+aWQsIGFycmF5KCdjb2xsZWN0aW9uX2lkJyA9PiAkY29sbGVjdGlvbl9pZCkpOwogICAgICAkbGlzdHVybCA9IHN0cl9yZXBsYWNlKCcmYW1wOycsICcmJywgJG1vZHVsZS0+Q3JlYXRlTGluaygkdGhpcy0+aWQsICR0aGlzLT5nZXRTZXR0aW5nKCdhZG1pbl9saXN0X2FjdGlvbicpLCAnJywgJycsIGFycmF5KCdjb2xsZWN0aW9uX2lkJyA9PiAkY29sbGVjdGlvbl9pZCksICcnLCB0cnVlKSAuICcmYW1wO3N1cHByZXNzb3V0cHV0PTEmYW1wO3Nob3d0ZW1wbGF0ZT0wJyk7CiAgICAgICAgCiAgICAgICRtb2R1bGUtPnNtYXJ0eS0+YXNzaWduKCdjb2xsZWN0aW9uX2lkJywgJGNvbGxlY3Rpb25faWQpOwogICAgICAkbW9kdWxlLT5zbWFydHktPmFzc2lnbignZW5kcG9pbnQnLCAkdXJsWydiYXNlJ10pOwogICAgICAkbW9kdWxlLT5zbWFydHktPmFzc2lnbignbGlzdHVybCcsICRsaXN0dXJsKTsKICAgICAgJG1vZHVsZS0+c21hcnR5LT5hc3NpZ24oJ3BhcmFtcycsIGpzb25fZW5jb2RlKCR1cmxbJ3BhcmFtcyddKSk7CiAgICAgICRtb2R1bGUtPnNtYXJ0eS0+YXNzaWduKCd1cGxvYWRCdXR0b25UZXh0JywgJHRoaXMtPmdldFNldHRpbmcoJ3VwbG9hZF9idXR0b25fdGV4dCcpKTsKICAgICAgJG1vZHVsZS0+c21hcnR5LT5hc3NpZ24oJ2Z1X3ZhbGlkYXRpb24nLCAkdGhpcy0+Z2V0U2V0dGluZygndmFsaWRhdGlvbicpKTsgICAgICAKICAgICAgCiAgICAgICRqcyA9ICRtb2R1bGUtPlByb2Nlc3NUZW1wbGF0ZSgnbGlzdC5qcycpOwogICAgICAgIAogICAgICAkaHRtbCA9ICRoZWFkZXIgLiAkbGlzdCAuICcKICAgICAgIDxkaXYgaWQ9ImZ1cGxvYWRlcl8nLiRjb2xsZWN0aW9uX2lkLiciPjwvZGl2PgogICAgICAgPHNjcmlwdD4nLiRqcy4nPC9zY3JpcHQ+CiAgICAgICc7CiAgICAgIAogICAgICAvLyB2YXJfZHVtcCgkY29uZmlnKTsKICAgICAgCiAgICAgIHJldHVybiAkaW5wdXQgLiAkaHRtbDsKICAgIH0KICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.CMSFormInputImages.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgLyoKICAgIENNU0Zvcm0gSW5wdXQgSW1hZ2VzCiAgICAKICAgIFRoaXMgY2xhc3MgaXMgZGVzaWduZWQgdG8gaGFuZGxlIG11bHRpcGxlIGZpbGVzIHNjZW5hcmlvCiAgKi8KaWYoY2xhc3NfZXhpc3RzKCdDTVNGb3JtSW5wdXRGaWxlcycpKQp7CiAgY2xhc3MgQ01TRm9ybUlucHV0SW1hZ2VzIGV4dGVuZHMgQ01TRm9ybUlucHV0RmlsZXMKICB7CiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0dXAoJGlkLCAkbmFtZSwgJiRmb3JtLCAkbW9kdWxlX25hbWUsICRzZXR0aW5ncyA9IGFycmF5KCkpCiAgICB7CiAgICAgIHBhcmVudDo6c2V0dXAoJGlkLCAkbmFtZSwgJGZvcm0sICRtb2R1bGVfbmFtZSwgJHNldHRpbmdzKTsKICAgICAgCiAgICAgICR0aGlzLT5zZXRTZXR0aW5nKCd1cGxvYWRfYnV0dG9uX3RleHQnLCAnU2VsZWN0IGltYWdlcyB0byB1cGxvYWQnKTsKICAgICAgCiAgICAgICR0aGlzLT5zZXRTZXR0aW5nKCdhZG1pbl9saXN0X2FjdGlvbicsICdhZG1pblBpY3R1cmVMaXN0Jyk7CiAgICAgIAogICAgICAkdGhpcy0+c2V0U2V0dGluZygndmFsaWRhdGlvbicsICcKICAgICAgdmFsaWRhdGlvbjogewogICAgICAgICAgICAgIGFsbG93ZWRFeHRlbnNpb25zOiBbXCdqcGVnXCcsIFwnanBnXCcsIFwnZ2lmXCcsIFwncG5nXCddCiAgICAgICAgICAgICAgLy8gLHNpemVMaW1pdDogNTEyMDAgLy8gNTAga0IgPSA1MCAqIDEwMjQgYnl0ZXMKICAgICAgICAgICAgfSwnKTsKCiAgICAgIHJldHVybiAkdGhpczsKICAgIH0KICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAvKgogICAgQSBmaWxlIGJlbG9uZyB0byBhIGNvbGxlY3Rpb24KICAqLwogIGNsYXNzIE1DRmlsZQogIHsKICAgIHByb3RlY3RlZCAkaWQ7CiAgICBwcm90ZWN0ZWQgJGNvbGxlY3Rpb25faWQ7CiAgICAKICAgIHByb3RlY3RlZCAkcG9zaXRpb247CiAgICBwcm90ZWN0ZWQgJHRpdGxlOwogICAgCiAgICBwcm90ZWN0ZWQgJGZpbGVuYW1lOwogICAgcHJvdGVjdGVkICRvcmlnaW5hbF9maWxlbmFtZTsKICAgIAogICAgcHJvdGVjdGVkICRjcmVhdGVkX2F0OwogICAgcHJvdGVjdGVkICR1cGRhdGVkX2F0OwoKCQlwcm90ZWN0ZWQgJGxhc3RfZXJyb3I7CiAgICAKICAgIGNvbnN0IERCX05BTUUgPSAnbW9kdWxlX01DTWVkaWFzX2ZpbGVzJzsKICAgIAogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb2xsZWN0aW9uX2lkID0gJycpICB7CiAgICAgICR0aGlzLT5jb2xsZWN0aW9uX2lkID0gJGNvbGxlY3Rpb25faWQ7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpewogICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKCQlwdWJsaWMgZnVuY3Rpb24gc2V0SWQoJGlkKXsKCQkJJHRoaXMtPmlkID0gJGlkOwoJCX0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGdldFRpdGxlKCkgewogICAgICByZXR1cm4gJHRoaXMtPnRpdGxlOwogICAgfQogICAgCgkJcHVibGljIGZ1bmN0aW9uIGdldENvbGxlY3Rpb25JZCgpewoJCQlyZXR1cm4gJHRoaXMtPmNvbGxlY3Rpb25faWQ7CgkJfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRUaXRsZSgkdmFsdWUpIHsKICAgICAgJHRoaXMtPnRpdGxlID0gJHZhbHVlOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UG9zaXRpb24oJHBvc2l0aW9uKSAgewogICAgICAkdGhpcy0+cG9zaXRpb24gPSAoaW50KSRwb3NpdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q3JlYXRlZEF0KCRjcmVhdGVkX2F0KQl7CgkJCSR0aGlzLT5jcmVhdGVkX2F0ID0gJGNyZWF0ZWRfYXQ7CgkJfQoJCQoJCXB1YmxpYyBmdW5jdGlvbiBnZXRVcGRhdGVkQXQoKSB7CgkJCXJldHVybiAkdGhpcy0+dXBkYXRlZF9hdDsKCQl9CgkJCgkJcHVibGljIGZ1bmN0aW9uIHNldFVwZGF0ZWRBdCgkdXBkYXRlZF9hdCkgewoJCQkkdGhpcy0+dXBkYXRlZF9hdCA9ICR1cGRhdGVkX2F0OwoJCX0KCQkKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmlnaW5hbEZpbGVuYW1lKCkgewogICAgICByZXR1cm4gJHRoaXMtPm9yaWdpbmFsX2ZpbGVuYW1lOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZW5hbWUoKSB7CiAgICAgIC8vIHJldHVybiAkdGhpcy0+aWQgLiAnXycgLiAkdGhpcy0+ZmlsZW5hbWU7CiAgICAgIHJldHVybiAkdGhpcy0+ZmlsZW5hbWU7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlcGF0aCgpIHsKICAgICAgcmV0dXJuIHNlbGY6OmdldFVwbG9hZFBhdGgoJHRoaXMtPmNvbGxlY3Rpb25faWQpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICR0aGlzLT5nZXRGaWxlbmFtZSgpOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVsYXRpdmVQYXRoKCkgewogICAgICByZXR1cm4gJHRoaXMtPmNvbGxlY3Rpb25faWQgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHRoaXMtPmdldEZpbGVuYW1lKCk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcmwoKSAgewogICAgICAkY29uZmlnID0gY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7CiAgICAgIHJldHVybiAkY29uZmlnWyd1cGxvYWRzX3VybCddIC4gJHRoaXMtPmdldFJlbGF0aXZlVXJsKCR0aGlzLT5jb2xsZWN0aW9uX2lkKTsKICAgICAgCiAgICB9CiAgICAKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXRSZWxhdGl2ZVVybCgkdXJsX3BhdGggPSBudWxsKSB7CiAgICAgICR1cmwgPSBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ01vZHVsZXMnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdNQ01lZGlhcyc7CiAgICAgIGlmKCFpc19udWxsKCR1cmxfcGF0aCkpICAkdXJsIC49IERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdXJsX3BhdGg7CiAgICAgICR1cmwgLj0gRElSRUNUT1JZX1NFUEFSQVRPUiAuICR0aGlzLT5nZXRGaWxlbmFtZSgpOwogICAgICByZXR1cm4gc3RyX3JlcGxhY2UoRElSRUNUT1JZX1NFUEFSQVRPUiwgJy8nLCAkdXJsKTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVcGxvYWRQYXRoKCR0YWlsX3BhdGggPSBudWxsKSAgewogICAgICAkTUNNZWRpYXMgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01DTWVkaWFzJyk7CiAgICAgICRwYXRoID0gJE1DTWVkaWFzLT5HZXRQcmVmZXJlbmNlKCd1cGxvYWRzX3BhdGgnLCAkTUNNZWRpYXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10pIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdNb2R1bGVzJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnTUNNZWRpYXMnOwogICAgICAKICAgICAgaWYoIWlzX251bGwoJHRhaWxfcGF0aCkpICAkcGF0aCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHRhaWxfcGF0aDsKICAgICAgaWYgKCFpc19kaXIoJHBhdGgpKXsKCQkJCSBpZighbWtkaXIoJHBhdGgsMDc3Nyx0cnVlKSkKCQkJCXsJCQkJCQoJCQkJCSR0aGlzLT5sYXN0X2Vycm9yID0gJ0ltcG9zc2libGUgdG8gY3JlYXRlIHRoZSBwYXRoICcgLiAkcGF0aDsKCQkJCQlyZXR1cm4gbnVsbDsKCQkJCX0KCQkJfQogICAgICAKICAgICAgcmV0dXJuICRwYXRoOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZVVwbG9hZGVkRmlsZSgkZmllbGRuYW1lKSAgewogICAgIAogICAgICAkdXBsb2FkZXIgPSBuZXcgcXFGaWxlVXBsb2FkZXIoKTsKCgkJCSRwYXRoID0gc2VsZjo6Z2V0VXBsb2FkUGF0aCgkdGhpcy0+Y29sbGVjdGlvbl9pZCk7CgkJCQoJCQlpZihpc19udWxsKCRwYXRoKSkKCQkJewoJCQkJcmV0dXJuIGpzb25fZW5jb2RlKGFycmF5KCdzdWNjZXNzJyA9PiBmYWxzZSwgJ2Vycm9yJyA9PiAnSW1wb3NzaWJsZSB0byBjcmVhdGUgcGF0aCBmb3IgJyAuICR0aGlzLT5jb2xsZWN0aW9uX2lkIC4gJyB3aXRoIGVycm9yICcgLiAkdGhpcy0+bGFzdF9lcnJvciwgJ3ByZXZlbnRSZXRyeScgPT4gdHJ1ZSkpOwoJCQl9CgkJCQogICAgICAvLyBDYWxsIGhhbmRsZVVwbG9hZCgpIHdpdGggdGhlIG5hbWUgb2YgdGhlIGZvbGRlciwgcmVsYXRpdmUgdG8gUEhQJ3MgZ2V0Y3dkKCkKICAgICAgJHJlc3VsdCA9ICR1cGxvYWRlci0+aGFuZGxlVXBsb2FkKCRwYXRoLCAgc2VsZjo6Y2xlYW5GaWxlbmFtZSgkX0ZJTEVTWyRmaWVsZG5hbWVdWyduYW1lJ10pKTsKCiAgICAgIGlmKGlzc2V0KCRyZXN1bHRbJ3N1Y2Nlc3MnXSkpCiAgICAgIHsKICAgICAgICAkdGhpcy0+b3JpZ2luYWxfZmlsZW5hbWUgPSAkdXBsb2FkZXItPmdldE5hbWUoKTsKICAgICAgICAkdGhpcy0+ZmlsZW5hbWUgPSAkdXBsb2FkZXItPmdldFVwbG9hZE5hbWUoKTsKICAgICAgICAvLyAkdGhpcy0+ZmlsZW5hbWUgPSBzZWxmOjpjbGVhbkZpbGVuYW1lKCRfRklMRVNbJGZpZWxkbmFtZV1bJ25hbWUnXSk7CiAgICAgICAgCiAgICAgICAgJHRoaXMtPnNhdmUoKTsKICAgICAgICAKICAgICAgICAvLyBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1skZmllbGRuYW1lXVsndG1wX25hbWUnXSwgJHRoaXMtPmdldEZpbGVwYXRoKCkpOwogICAgICAgIAogICAgICAgIC8vIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIAogICAgICAvLyByZXR1cm4ganNvbl9lbmNvZGUoYXJyYXkoJ2Vycm9yJyA9PiAnY29sbGVjdGlvbl9pZCAnIC4gJHRoaXMtPmNvbGxlY3Rpb25faWQpKTsKCiAgICAgIC8vIHRvIHBhc3MgZGF0YSB0aHJvdWdoIGlmcmFtZSB5b3Ugd2lsbCBuZWVkIHRvIGVuY29kZSBhbGwgaHRtbCB0YWdzCiAgICAgIHJldHVybiBodG1sc3BlY2lhbGNoYXJzKGpzb25fZW5jb2RlKCRyZXN1bHQpLCBFTlRfTk9RVU9URVMpOwoKICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICAgIH0KCgkJcHVibGljIGZ1bmN0aW9uIHVwbG9hZEZyb21Mb2NhbCgkZmlsZSwgJG1vdmUgPSB0cnVlKQl7CgkJCWlmKGlzX2ZpbGUoJGZpbGUpKQoJCQl7CgkJCQkkcGF0aCA9IHNlbGY6OmdldFVwbG9hZFBhdGgoJHRoaXMtPmNvbGxlY3Rpb25faWQpOwoJCQkJCgkJCQkkZmlsZW5hbWUgPSBlbmQoZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkZmlsZSkpOwoJCQkJCgkJCQkkdGhpcy0+b3JpZ2luYWxfZmlsZW5hbWUgPSAkZmlsZW5hbWU7CgkJCQkkdGhpcy0+ZmlsZW5hbWUgPSAkdGhpcy0+Z2V0TmV4dEF2YWlsYWJsZUZpbGVuYW1lKHNlbGY6OmNsZWFuRmlsZW5hbWUoJGZpbGVuYW1lKSk7CgkJCQkKCQkJCWlmKCRtb3ZlKQoJCQkJewoJCQkJCS8vIHZhcl9kdW1wKCR0aGlzLT5maWxlbmFtZSk7CgkJCQkJLy8gdmFyX2R1bXAoJHRoaXMtPm9yaWdpbmFsX2ZpbGVuYW1lKTsJCQkJCQoJCQkJCXJlbmFtZSgkZmlsZSwgJHBhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHRoaXMtPmZpbGVuYW1lKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQljb3B5KCRmaWxlLCAkcGF0aCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGhpcy0+ZmlsZW5hbWUpOwoJCQkJfQoJCQkJCgkJCX0KCQl9CiAgICAKCQlwdWJsaWMgZnVuY3Rpb24gdXBsb2FkRnJvbVVybCgkdXJsLCAkb3JpZ2luYWxfZmlsZW5hbWUgPSAnJywgJGZpbGVuYW1lID0gJycpewoJCQkKCQkJJGxvY2FsX3BhdGggPSBzZWxmOjpnZXRVcGxvYWRQYXRoKCR0aGlzLT5jb2xsZWN0aW9uX2lkKTsKCQkJCgkJCWlmKCRmaWxlbmFtZSAhPSAnJykKCQkJewoJCQkJJHRoaXMtPmZpbGVuYW1lID0gJGZpbGVuYW1lOwoJCQkJJHRoaXMtPm9yaWdpbmFsX2ZpbGVuYW1lID0gJG9yaWdpbmFsX2ZpbGVuYW1lOwoJCQkJCgkJCQkkaW1hZ2UgPSBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKCQkJCWlmKCRpbWFnZSAhPT0gRkFMU0UpCgkJCQl7CgkJCQkJZmlsZV9wdXRfY29udGVudHMoJGxvY2FsX3BhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lLCAkaW1hZ2UpOwoJCQkJfQoJCQl9CgkJfQoJCQogICAgcHVibGljIGZ1bmN0aW9uIGRvd25sb2FkUmVtb3RlRmlsZSgkdXJsKSAgewogICAgICAkcGF0aCA9IHNlbGY6OmdldFVwbG9hZFBhdGgoJHRoaXMtPmNvbGxlY3Rpb25faWQpOwogICAgICAKICAgICAgY29weSgkdXJsLCAkcGF0aCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGhpcy0+ZmlsZW5hbWUpOyAgICAgIAogICAgfQoKCQlwdWJsaWMgZnVuY3Rpb24gZ2V0TmV4dEF2YWlsYWJsZUZpbGVuYW1lKCRmaWxlbmFtZSwgJHByZWZpeCA9IG51bGwpCXsKCQkJJGxvY2FsX3BhdGggPSBzZWxmOjpnZXRVcGxvYWRQYXRoKCR0aGlzLT5jb2xsZWN0aW9uX2lkKTsKCQkJCgkJCWlmKGlzX2ZpbGUoJGxvY2FsX3BhdGggLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHByZWZpeCAuICRmaWxlbmFtZSkpCgkJCXsKCQkJCWlmKGlzX251bGwoJHByZWZpeCkpIAoJCQkJewoJCQkJCSRwcmVmaXggPSAxOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRwcmVmaXgrKzsKCQkJCX0KCQkJCXJldHVybiAkdGhpcy0+Z2V0TmV4dEF2YWlsYWJsZUZpbGVuYW1lKCRmaWxlbmFtZSwgJHByZWZpeCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlyZXR1cm4gJHByZWZpeCAuICRmaWxlbmFtZTsKCQkJfQoJCQkKCQl9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTeXN0ZW1TaXplTGltaXQoKSB7CiAgICAgICRtYXhzaXplID0gaW5pX2dldCgncG9zdF9tYXhfc2l6ZScpOwogICAgICAkYmFzZSA9IDE7CiAgICAgIGlmKHN0cnBvcygkbWF4c2l6ZSwgJ00nKSkKICAgICAgewogICAgICAgICRiYXNlID0gJGJhc2UgKiAxMDI0ICogMTAyNDsKICAgICAgICAkbWF4c2l6ZSA9IHN0cl9yZXBsYWNlKCdNJywgJycsICRtYXhzaXplKTsKICAgICAgfQogICAgICAKICAgICAgcmV0dXJuICRiYXNlICogJG1heHNpemU7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xlYW5GaWxlbmFtZSgkZmlsZW5hbWUpICB7CiAgICAgICAgJHJlc3VsdCA9IHN0cnRvbG93ZXIoJGZpbGVuYW1lKTsKICAgICAgICAvLyBSZW1vdmUgYWNjZW50cwogICAgICAgICRyZXN1bHQgPSBzdHJ0cigkcmVzdWx0LCAgIu+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/ve+/vSIsICAiYWFhYWFhYWFhYWFhb29vb29vb29vb29vZWVlZWVlZWVjY2lpaWlpaWlpdXV1dXV1dXV5bm4iKTsKCiAgICAgICAgLy8gU29mdCB3YXkKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIiMiLCAiTm8uIiwgJHJlc3VsdCk7IAogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiJCIsICJEb2xsYXIiLCAkcmVzdWx0KTsgCiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCIlIiwgIlBlcmNlbnQiLCAkcmVzdWx0KTsgCiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCJeIiwgIiAiLCAkcmVzdWx0KTsgCiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCImIiwgImFuZCIsICRyZXN1bHQpOyAKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIioiLCAiICIsICRyZXN1bHQpOyAKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIj8iLCAiICIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiLCIsICIgIiwgJHJlc3VsdCk7CgogICAgICAgIC8vIHN0cmlwIGFsbCBub24gd29yZCBjaGFycwogICAgICAgIC8vJHJlc3VsdCA9IHByZWdfcmVwbGFjZSgnL1xXLycsICcgJywgJHJlc3VsdCk7IC8vIEhBUkQgV0FZLi4uCgogICAgICAgIC8vIHJlcGxhY2UgYWxsIHdoaXRlIHNwYWNlIHNlY3Rpb25zIHdpdGggYSBkYXNoCiAgICAgICAgJHJlc3VsdCA9IHByZWdfcmVwbGFjZSgnL1wgKy8nLCAnLScsICRyZXN1bHQpOwogICAgICAgIC8vIHRyaW0gZGFzaGVzCiAgICAgICAgJHJlc3VsdCA9IHByZWdfcmVwbGFjZSgnL1wtJC8nLCAnJywgJHJlc3VsdCk7CiAgICAgICAgJHJlc3VsdCA9IHByZWdfcmVwbGFjZSgnL15cLS8nLCAnJywgJHJlc3VsdCk7CiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CiAgICAKICAgIC8vIEZJTEUgUFJPQ0VTU0lORwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlU2l6ZSgkcmVhZGFibGUgPSBmYWxzZSkgIHsKICAgICAgJGZpbGUgPSAkdGhpcy0+Z2V0RmlsZXBhdGgoKTsKICAgICAgaWYgKGlzX2ZpbGUoJGZpbGUpKSB7CiAgICAgICAgJHNpemUgPSBmaWxlc2l6ZSgkZmlsZSk7CgogICAgICAgIGlmICgkcmVhZGFibGUpCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIHNlbGY6OnNpemVfcmVhZGFibGUoJHNpemUpOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgcmV0dXJuICRzaXplOwogICAgICAgIH0KICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNpemVfcmVhZGFibGUgKCRzaXplLCAkcmV0c3RyaW5nID0gbnVsbCkgewogICAgICAkc2l6ZXMgPSBhcnJheSgnQicsICdrQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpOwoKICAgICAgaWYgKCRyZXRzdHJpbmcgPT09IG51bGwpIHsgJHJldHN0cmluZyA9ICclMDEuMmYgJXMnOyB9CgogICAgICAkbGFzdHNpemVzdHJpbmcgPSBlbmQoJHNpemVzKTsKCiAgICAgIGZvcmVhY2ggKCRzaXplcyBhcyAkc2l6ZXN0cmluZykgewogICAgICAgIGlmICgkc2l6ZSA8IDEwMjQpIHsgYnJlYWs7IH0KICAgICAgICBpZiAoJHNpemVzdHJpbmcgIT0gJGxhc3RzaXplc3RyaW5nKSB7ICRzaXplIC89IDEwMjQ7IH0KICAgICAgfQoKICAgICAgaWYgKCRzaXplc3RyaW5nID09ICRzaXplc1swXSkgeyAkcmV0c3RyaW5nID0gJyUwMWQgJXMnOyB9IC8vIEJ5dGVzIGFyZW4ndCBub3JtYWxseSBmcmFjdGlvbmFsCgogICAgICByZXR1cm4gc3ByaW50ZigkcmV0c3RyaW5nLCAkc2l6ZSwgJHNpemVzdHJpbmcpOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZUV4dGVuc2lvbigpICB7CiAgICAgICRmaWxlID0gZXhwbG9kZSgnLicsICR0aGlzLT5nZXRGaWxlbmFtZSgpKTsKICAgICAgaWYgKGNvdW50KCRmaWxlKSA+IDEpCiAgICAgIHsKICAgICAgICByZXR1cm4gZW5kKCRmaWxlKTsKICAgICAgfQogICAgICBlbHNlIAogICAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVJY29uKCRpY29uX3R5cGUgPSAnc21hbGwnKSB7CiAgICAgICRmaWxlID0gJHRoaXMtPmdldEZpbGVwYXRoKCk7CiAgICAgICRtb2R1bGUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01DTWVkaWFzJyk7CiAgICAgICRpY29uID0gJG1vZHVsZS0+R2V0TW9kdWxlVVJMUGF0aCgpIC4gJy9pbWFnZXMvaWNvbnMvJy4kaWNvbl90eXBlLicvJzsgIAoKICAgICAgc3dpdGNoIChzdHJ0b2xvd2VyKHNlbGY6OmdldEZpbGVFeHRlbnNpb24oJGZpbGUpKSkgIHsKICAgICAgICBjYXNlICdwZGYnOgogICAgICAgICAgJGljb24gLj0gJ3BkZi5naWYnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnanMnOgogICAgICAgICAgJGljb24gLj0gJ2pzLmdpZic7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdlcHMnOgogICAgICAgICAgJGljb24gLj0gJ2Vwcy5naWYnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAncGhwJzoKICAgICAgICAgICRpY29uIC49ICdwaHAuZ2lmJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3Jhcic6CiAgICAgICAgICAkaWNvbiAuPSAncmFyLmdpZic7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdkb2MnOgogICAgICAgICAgJGljb24gLj0gJ2RvYy5naWYnOwogICAgICAgICAgYnJlYWs7ICAgICAgICAgICAKICAgICAgICBjYXNlICdkb2N4JzoKICAgICAgICAgICRpY29uIC49ICdkb2MuZ2lmJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3J0Zic6CiAgICAgICAgICAkaWNvbiAuPSAncnRmLmdpZic7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdnaWYnOgogICAgICAgICAgJGljb24gLj0gJ2dpZi5naWYnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAndHh0JzoKICAgICAgICAgICRpY29uIC49ICd0eHQuZ2lmJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3hscyc6CiAgICAgICAgICAkaWNvbiAuPSAneGxzLmdpZic7CiAgICAgICAgICBicmVhazsgICAgICAgICAgICAKICAgICAgICBjYXNlICd4bHN4JzoKICAgICAgICAgICRpY29uIC49ICd4bHMuZ2lmJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3BwdCc6CiAgICAgICAgICAkaWNvbiAuPSAncHB0LmdpZic7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdwcHMnOgogICAgICAgICAJJGljb24gLj0gJ3BwdC5naWYnOwogICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgCiAgICAgICAgY2FzZSAncHB0eCc6CiAgICAgICAgICAkaWNvbiAuPSAncHB0LmdpZic7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdqcGcnOgogICAgICAgICAgJGljb24gLj0gJ2pwZy5naWYnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnYm1wJzoKICAgICAgICAgICRpY29uIC49ICdibXAuZ2lmJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2h0bWwnOgogICAgICAgICAgJGljb24gLj0gJ2h0bWwuZ2lmJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2h0bSc6CiAgICAgICAgICAkaWNvbiAuPSAnaHRtbC5naWYnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbW92JzoKICAgICAgICAgICRpY29uIC49ICdtb3YuZ2lmJzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3ppcCc6CiAgICAgICAgICAkaWNvbiAuPSAnemlwLmdpZic7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgJGljb24gLj0gJ2RlZi5naWYnOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIHJldHVybiAkaWNvbjsKICAgIH0KICAgIAogICAgLy8gSU1BR0UgUFJPQ0VTU0lORwogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdlbmVyYXRlVGh1bWJuYWlsRmlsZW5hbWUoJGZpbGVuYW1lLCRwYXJhbXM9YXJyYXkoKSkgewogICAgICAKICAgICAgJGZpbGUgPSAnVGh1bWJuYWlsJzsKICAgICAgCiAgICAgICRmaWxlbmFtZSA9IHN0cl9yZXBsYWNlKCcuLicsICcnLCAkZmlsZW5hbWUpOwogICAgICAkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnICcsICcnLCAkZmlsZW5hbWUpOwogICAgICAkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZSgnOycsICcnLCAkZmlsZW5hbWUpOwogICAgICAkZmlsZW5hbWUgPSBzdHJfcmVwbGFjZShESVJFQ1RPUllfU0VQQVJBVE9SLCAnXycsICRmaWxlbmFtZSk7CiAgICAgICRmaWxlbmFtZSA9IHN0cl9yZXBsYWNlKCcvJywgJ18nLCAkZmlsZW5hbWUpOwogICAgICAKICAgICAgaWYoaXNzZXQoJHBhcmFtc1snd2lkdGgnXSkpICRmaWxlIC49ICdfdycgLiAoaW50KSAkcGFyYW1zWyd3aWR0aCddOwogICAgICBpZihpc3NldCgkcGFyYW1zWydoZWlnaHQnXSkpICRmaWxlIC49ICdfaCcgLiAoaW50KSAkcGFyYW1zWydoZWlnaHQnXTsKICAgICAgaWYoaXNzZXQoJHBhcmFtc1snbW9kZSddKSkgJGZpbGUgLj0gJ19tXycgLiAoc3RyaW5nKSBzdHJfcmVwbGFjZShESVJFQ1RPUllfU0VQQVJBVE9SLCAnXycsICRwYXJhbXNbJ21vZGUnXSk7CiAgICAgIAogICAgICAkZmlsZSAuPSAnXycgLiAkZmlsZW5hbWU7CiAgICAgIHJldHVybiAkZmlsZTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZVRodW1ibmFpbCgkb3JpZ2luLCAkZGVzdGluYXRpb24sICRwYXJhbXMgPSBhcnJheSgpKSAgewogICAgICBpZihpc19maWxlKCRvcmlnaW4pKQogICAgICB7CiAgICAgICAgaWYoIWlzc2V0KCRwYXJhbXNbJ21vZGUnXSkpICRwYXJhbXNbJ21vZGUnXSA9ICdkZWZhdWx0JzsKICAgICAgICBpZighaXNzZXQoJHBhcmFtc1snd2lkdGgnXSkpICRwYXJhbXNbJ3dpZHRoJ10gPSAnMTAwJzsKICAgICAgICBpZighaXNzZXQoJHBhcmFtc1snaGVpZ2h0J10pKSAkcGFyYW1zWydoZWlnaHQnXSA9ICcxMDAnOwogICAgICAgIAogICAgICAgICRpbWFnZSA9IHNlbGY6OnJlc2l6ZUltYWdlKCRvcmlnaW4sICRwYXJhbXNbJ21vZGUnXSwgJHBhcmFtc1snd2lkdGgnXSwgJHBhcmFtc1snaGVpZ2h0J10pOwogICAgICAgIAogICAgICAgIGlmKCRpbWFnZSkKICAgICAgICB7CiAgICAgICAgICBpbWFnZWpwZWcoJGltYWdlLCAkZGVzdGluYXRpb24sIDEwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmVzaXplSW1hZ2UoJGltYWdlLCAkbW9kZSwgJHdpZHRoLCAkaGVpZ2h0KSB7CiAgICAgIHN3aXRjaCgkbW9kZSkKICAgICAgewogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAvLyBEZWZhdWx0ID0gRG93bnNjYWxlICsgUHJlc2VydmUKICAgICAgICAgIHJldHVybiBzZWxmOjpkb3duc2NhbGUoJGltYWdlLCR3aWR0aCwkaGVpZ2h0LHRydWUpOwogICAgICB9CiAgICAgIAogICAgICAvLyBTSE9VTEQgQUREOgogICAgICAvLyBDUk9QOiBVUFNDQUxFIC0gUE9TSVRJT04gLSBDUk9QCiAgICAgIC8vIFVQU0NBTEU6IElNQUdFIEZJTEwgU1BBQ0UKICAgICAgLy8gRE9XTlNDQUxFOiBJTUFHRSBGSVQgU1BBQ0UgKHNtYWxsZXIgYXJlIG1hZGUgYmlnZ2VyKQogICAgfQogICAgCiAgICBwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRvd25zY2FsZSgkaW1hZ2UsICR3aWR0aCwgJGhlaWdodCwgJHByZXNlcnZlID0gZmFsc2UpIHsKICAgICAgbGlzdCgkY3VycmVudF93aWR0aCwgJGN1cnJlbnRfaGVpZ2h0KSA9IGdldGltYWdlc2l6ZSgkaW1hZ2UpOyAgICAgIAogICAgICAKICAgICAgJG5ld19pbWFnZSA9IHNlbGY6OmNyZWF0ZUltYWdlKCRpbWFnZSk7CiAgICAgIAogICAgICAkcmF0aW9fb3JpZyA9ICRjdXJyZW50X3dpZHRoLyRjdXJyZW50X2hlaWdodDsKICAgICAgICAgICAgCiAgICAgIGlmKCgkY3VycmVudF9oZWlnaHQgPiAkaGVpZ2h0KSB8fCAoJGN1cnJlbnRfd2lkdGggPiAkd2lkdGgpKQogICAgICB7CiAgICAgICAgLy8gZWNobyAiVG9vIGJpZzogJGN1cnJlbnRfd2lkdGggLyAkd2lkdGggYW5kICRjdXJyZW50X2hlaWdodCAvICRoZWlnaHQiOwogICAgICAgIC8vIENIT09TRSBUSEUgQkVTVCBSQVRJTwogICAgICAgIGlmICgkd2lkdGgvJGhlaWdodCA+ICRyYXRpb19vcmlnKQogICAgICAgICB7CiAgICAgICAgICAgICAkd2lkdGggPSByb3VuZCgkaGVpZ2h0KiRyYXRpb19vcmlnKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICAgICRoZWlnaHQgPSByb3VuZCgkd2lkdGgvJHJhdGlvX29yaWcpOwogICAgICAgICB9ICAgICAgICAgCiAgICAgICAgIC8vIGVjaG8gIjxiciAvPiBSZXNpemUgdG86ICAkd2lkdGggYW5kICRoZWlnaHQiOwogICAgICB9CiAgICAgIGVsc2VpZigkcHJlc2VydmUpCiAgICAgIHsKICAgICAgICAgLy8gZWNobyAiUHJlc2VydmU6ICRjdXJyZW50X3dpZHRoIC8gJHdpZHRoIGFuZCAkY3VycmVudF9oZWlnaHQgLyAkaGVpZ2h0IjsKICAgICAgICAvLyBCb3RoIGFyZSBzbWFsbGVyIG9yIGVxdWFsIGJ1dCB3ZSB3YW50IHRvIHByZXNlcnZlIHNpemUKICAgICAgICByZXR1cm4gJG5ld19pbWFnZTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAvLyBUTyBGSVg6IFNob3VsZCB1cHNjYWxlCiAgICAgICAgcmV0dXJuICRuZXdfaW1hZ2U7CiAgICAgIH0KCiAgICAgIAogICAgICAkYmxhbmtfaW1hZ2UgPSBpbWFnZWNyZWF0ZXRydWVjb2xvcigkd2lkdGgsICRoZWlnaHQpOwogICAgICBpZihpbWFnZWNvcHlyZXNhbXBsZWQoJGJsYW5rX2ltYWdlLCAkbmV3X2ltYWdlLCAwLCAwLCAwLCAwLCAkd2lkdGgsICRoZWlnaHQsICRjdXJyZW50X3dpZHRoLCAkY3VycmVudF9oZWlnaHQpKSB7CiAgICAgICAgcmV0dXJuICRibGFua19pbWFnZTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAvLyBBTiBFUlJPUiBPQ0NVUkVECiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlSW1hZ2UoJGltYWdlKSB7CiAgICAgICAgc3dpdGNoKGV4aWZfaW1hZ2V0eXBlKCRpbWFnZSkpCiAgICAgICAgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAkc3JjaW1nID0gaW1hZ2VjcmVhdGVmcm9tZ2lmKCRpbWFnZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgJHNyY2ltZyA9IGltYWdlY3JlYXRlZnJvbWpwZWcoJGltYWdlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgICAkc3JjaW1nID0gaW1hZ2VjcmVhdGVmcm9tcG5nKCRpbWFnZSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkc3JjaW1nOwogICAgfQogICAgLy8gREFUQUJBU0UKICAgIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXRyaWV2ZUJ5UGsoJGlkKSAgewogICAgICByZXR1cm4gc2VsZjo6ZG9TZWxlY3RPbmUoYXJyYXkoJ3doZXJlJyA9PiBhcnJheSgnaWQnID0+IChpbnQpJGlkKSkpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvU2VsZWN0T25lKCRwYXJhbXMgPSBhcnJheSgpKSB7CiAgICAgICRwYXJhbXNbJ2xpbWl0J10gPSAxOwogIAkJJGl0ZW1zID0gc2VsZjo6ZG9TZWxlY3QoJHBhcmFtcyk7CiAgCQlpZiAoJGl0ZW1zKQogIAkJewogIAkJCXJldHVybiBjdXJyZW50KCRpdGVtcyk7CiAgCQl9CiAgCQllbHNlIAogIAkJewogIAkJCXJldHVybiBudWxsOwogIAkJfQogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvU2VsZWN0KCRwYXJhbXMgPSBhcnJheSgpKXsKICAgICAgCiAgICAgICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLnNlbGY6OkRCX05BTUU7CiAgICAgIAogICAgICAkdmFsdWVzID0gYXJyYXkoKTsKICAgICAgCiAgICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3doZXJlJ10pICYmIGlzX2FycmF5KCRwYXJhbXNbJ3doZXJlJ10pKQogICAgICB7CiAgICAgICAgJGZpZWxkcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCgkcGFyYW1zWyd3aGVyZSddIGFzICRmaWVsZCA9PiAkdmFsdWUpCiAgICAgICAgewogICAgICAgICAgJGZpZWxkc1tdID0gJGZpZWxkIC4gJz0gPyc7CiAgICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWU7CiAgICAgICAgfQogICAgICAgICRxdWVyeSAuPSAnIFdIRVJFICcgLiBpbXBsb2RlKCcgQU5EICcsICRmaWVsZHMpOwogICAgICB9CiAgICAgIAogICAgICBpZihpc3NldCgkcGFyYW1zWydvcmRlcl9ieSddKSkKICAgICAgewogICAgICAgJHF1ZXJ5IC49ICcgT1JERVIgQlkgJyAuIGltcGxvZGUoJywgJyAsICRwYXJhbXNbJ29yZGVyX2J5J10pOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRxdWVyeSAuPSAnIE9SREVSIEJZIHBvc2l0aW9uJzsKICAgICAgfQogICAgICAKICAgICAgaWYoaXNzZXQoJHBhcmFtc1snbGltaXQnXSkpCiAgICAgIHsKICAgICAgICAkcXVlcnkgLj0gJyBMSU1JVCAnIC4gKGludCkkcGFyYW1zWydsaW1pdCddOwogICAgICB9CiAgICAgIAogICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFsdWVzKTsKICAgICAgJGl0ZW1zID0gYXJyYXkoKTsKCiAgICAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKICAgICAgIHsKICAgICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQogICAgICAgICB7CQogICAgICAgICAgICRpdGVtID0gbmV3IE1DRmlsZSgpOwogICAgICAgICAgICRpdGVtLT5wb3B1bGF0ZSgkcm93KTsKICAgICAgICAgICBpZihpc3NldCgkcGFyYW1zWyd3aXRoX2lkJ10pKQogICAgICAgICAgIHsKICAgICAgICAgICAgICRpdGVtc1skcm93WydpZCddXSA9ICRpdGVtOwogICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCiAgICAgICAgICAgewogICAgICAgICAgICAgJGl0ZW1zW10gPSAkaXRlbTsKICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KCiAgICAgICByZXR1cm4gICRpdGVtczsKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHBvcHVsYXRlKCRyb3cpICB7CiAgICAgICR0aGlzLT5pZCA9ICRyb3dbJ2lkJ107CiAgICAgIAogICAgICAkdGhpcy0+Y3JlYXRlZF9hdCA9ICRyb3dbJ2NyZWF0ZWRfYXQnXTsKICAgICAgJHRoaXMtPnVwZGF0ZWRfYXQgPSAkcm93Wyd1cGRhdGVkX2F0J107CiAgICAgIAogICAgICAkdGhpcy0+Y29sbGVjdGlvbl9pZCA9ICRyb3dbJ2NvbGxlY3Rpb25faWQnXTsKICAgICAgJHRoaXMtPnBvc2l0aW9uID0gJHJvd1sncG9zaXRpb24nXTsKICAgICAgJHRoaXMtPnRpdGxlID0gJHJvd1sndGl0bGUnXTsKICAgICAgJHRoaXMtPmZpbGVuYW1lID0gJHJvd1snZmlsZW5hbWUnXTsKICAgICAgJHRoaXMtPm9yaWdpbmFsX2ZpbGVuYW1lID0gJHJvd1snb3JpZ2luYWxfZmlsZW5hbWUnXTsKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKSB7CiAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAnaWQnID0+ICR0aGlzLT5pZCwKICAgICAgICAnY3JlYXRlZF9hdCcgPT4gJHRoaXMtPmNyZWF0ZWRfYXQsCiAgICAgICAgJ3VwZGF0ZWRfYXQnID0+ICR0aGlzLT51cGRhdGVkX2F0LAogICAgICAgICdjb2xsZWN0aW9uX2lkJyA9PiAkdGhpcy0+Y29sbGVjdGlvbl9pZCwKICAgICAgICAncG9zaXRpb24nID0+ICR0aGlzLT5wb3NpdGlvbiwKICAgICAgICAndGl0bGUnID0+ICR0aGlzLT50aXRsZSwKICAgICAgICAnZmlsZW5hbWUnID0+ICR0aGlzLT5maWxlbmFtZSwKICAgICAgICAnb3JpZ2luYWxfZmlsZW5hbWUnID0+ICR0aGlzLT5vcmlnaW5hbF9maWxlbmFtZSwKICAgICAgICAnZmlsZW5hbWVfdXJsJyA9PiAkdGhpcy0+Z2V0VXJsKCkKICAgICAgKTsKICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpdGVtc1RvQXJyYXkoQXJyYXkgJGxpc3QpIHsKICAgICAgJGFycmF5ID0gYXJyYXkoKTsKICAgICAgZm9yZWFjaCgkbGlzdCBhcyAkaXRlbSkKICAgICAgewogICAgICAgICRhcnJheVskaXRlbS0+aWRdID0gJGl0ZW0tPnRvQXJyYXkoKTsKICAgICAgfQogICAgICByZXR1cm4gJGFycmF5OwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkcGFyYW1zID0gYXJyYXkoKSkgewogICAgICBpZigkdGhpcy0+aWQgJiYgIWlzc2V0KCRwYXJhbXNbJ2ZvcmNlX2luc2VydCddKSl7CiAgICAgICAgJHRoaXMtPnVwZGF0ZSgkcGFyYW1zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAkdGhpcy0+aW5zZXJ0KCRwYXJhbXMpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXROZXh0UG9zaXRpb24oKSAgewogICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAkcXVlcnkgPSAnU0VMRUNUIE1BWChwb3NpdGlvbikgKyAxIEFTIHBvc2l0aW9uIEZST00gJy5jbXNfZGJfcHJlZml4KCkuc2VsZjo6REJfTkFNRSAgLicgV0hFUkUgY29sbGVjdGlvbl9pZCA9ID8nOwogICAgICAkcmVzdWx0ID0gJGRiLT5leGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRoaXMtPmNvbGxlY3Rpb25faWQpKTsKICAgICAgJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgIHJldHVybiAkcm93Wydwb3NpdGlvbiddID8gJHJvd1sncG9zaXRpb24nXSA6IDE7CiAgICB9CiAgICAKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBpbnNlcnQoJHBhcmFtcyA9IGFycmF5KCkpIHsKICAgICAgCiAgICAgICRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CiAgICAgIAogICAgICBpZighaXNzZXQoJHRoaXMtPnBvc2l0aW9uKSB8fCBpc19udWxsKCR0aGlzLT5wb3NpdGlvbikpCiAgICAgIHsKICAgICAgICAkdGhpcy0+cG9zaXRpb24gPSAkdGhpcy0+Z2V0TmV4dFBvc2l0aW9uKCk7CiAgICAgIH0KICAgICAgCiAgICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Zyb250ZW5kJ10pKQogICAgICB7CiAgICAgICAgJHVzZXJpZCA9IG51bGw7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKICAgICAgfQogICAgICAKICAgICAgLy8gVVBEQVRFCiAgICAgIGlmKGlzc2V0KCRwYXJhbXNbJ25vX3RpbWVfaW5jcmVtZW50J10pKQogICAgICB7CiAgICAgICAgJHVwZGF0ZWRfYXQgPSAkdGhpcy0+dXBkYXRlZF9hdDsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkdXBkYXRlZF9hdCA9IHRpbWUoKTsKICAgICAgfQogICAgICAKICAgICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLnNlbGY6OkRCX05BTUUgLiAnCiAgICAgICAgU0VUIAogICAgICAgICAgY29sbGVjdGlvbl9pZCA9ID8sCiAgICAgICAgICAKICAgICAgICAgIGNyZWF0ZWRfYXQgPSA/LAogICAgICAgICAgY3JlYXRlZF9ieSA9ID8sCiAgICAgICAgICB1cGRhdGVkX2F0ID0gPywKICAgICAgICAgIHVwZGF0ZWRfYnkgPSA/LAoKICAgICAgICAgIHRpdGxlID0gPywKICAgICAgICAgIHBvc2l0aW9uID0gPywKICAgICAgICAgIGZpbGVuYW1lID0gPywKICAgICAgICAgIG9yaWdpbmFsX2ZpbGVuYW1lID0gPyc7CiAgICAgICAgICAKICAgICAgJHZhbHVlcyA9IGFycmF5KCR0aGlzLT5jb2xsZWN0aW9uX2lkLAogICAgICAgICAgIHRpbWUoKSwKICAgICAgICAgICAkdXNlcmlkLAogICAgICAgICAgICR1cGRhdGVkX2F0LAogICAgICAgICAgICR1c2VyaWQsCgogICAgICAgICAgICR0aGlzLT50aXRsZSwKICAgICAgICAgICAkdGhpcy0+cG9zaXRpb24sCiAgICAgICAgICAgJHRoaXMtPmZpbGVuYW1lLAogICAgICAgICAgICR0aGlzLT5vcmlnaW5hbF9maWxlbmFtZSk7CiAgICAgICAgICAKICAgICAgaWYoaXNzZXQoJHRoaXMtPmlkKSAmJiAhaXNfbnVsbCgkdGhpcy0+aWQpICYmIGlzc2V0KCRwYXJhbXNbJ2ZvcmNlX2luc2VydCddKSkKICAgICAgewogICAgICAgICRxdWVyeSAuPSAnLCBpZCA9ID8nOwogICAgICAgICR2YWx1ZXNbXSA9ICR0aGlzLT5pZDsKICAgICAgfQogICAgICAgICAgCiAgICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksICR2YWx1ZXMpOwoKICAgICAgJHRoaXMtPmlkID0gJGRiLT5JbnNlcnRfSUQoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHVwZGF0ZSgkcGFyYW1zID0gYXJyYXkoKSkgewogICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICBpZihpc3NldCgkcGFyYW1zWydmcm9udGVuZCddKSkKICAgICAgewogICAgICAgICR1c2VyaWQgPSBudWxsOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CiAgICAgIH0KICAgICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS5zZWxmOjpEQl9OQU1FLiAnCiAgICAgICAgU0VUIAogICAgICAgICAgdXBkYXRlZF9hdCA9ID8sCiAgICAgICAgICB1cGRhdGVkX2J5ID0gPywKCiAgICAgICAgICB0aXRsZSA9ID8sCiAgICAgICAgICBwb3NpdGlvbiA9ID8KICAgICAgICBXSEVSRSBpZCA9ID8nOwogICAgICAKICAgICAgLy8gVVBEQVRFCiAgICAgIGlmKGlzc2V0KCRwYXJhbXNbJ25vX3RpbWVfaW5jcmVtZW50J10pKQogICAgICB7CiAgICAgICAgJHVwZGF0ZWRfYXQgPSAkdGhpcy0+dXBkYXRlZF9hdDsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkdXBkYXRlZF9hdCA9IHRpbWUoKTsKICAgICAgfQogICAgICAgIAogICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgKICAgICAgICAkdXBkYXRlZF9hdCwKICAgICAgICAkdXNlcmlkLAogICAgICAgICR0aGlzLT50aXRsZSwKICAgICAgICAkdGhpcy0+cG9zaXRpb24sICAgIAogICAgICAgICR0aGlzLT5pZAogICAgICApKTsKCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCkgewogICAgICBpZiAoJHRoaXMtPmlkKSB7CiAgICAgICAgLy8gRklSU1QgREVMRVRFIFRIRSBGSUxFCiAgICAgICAgJGZpbGUgPSAkdGhpcy0+Z2V0RmlsZXBhdGgoKTsKICAgICAgIAogICAgICAgIGlmKGlzX2ZpbGUoJGZpbGUpKQogICAgICAgIHsKICAgICAgICAgdW5saW5rKCRmaWxlKTsgCiAgICAgICAgfSAgICAgIAogICAgICAgIAogICAgICAgICRxdWVyeSA9ICdERUxFVEUgRlJPTSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gc2VsZjo6REJfTkFNRSAuJyBXSEVSRSBpZCA9ID8nOwogICAgICAgICRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRoaXMtPmlkKSk7ICAgICAgIAogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIFN5bmNGcm9tVXJsKCR1cmwsICRkZWxldGUgPSB0cnVlKSAgewogICAgICAgLy8gSU1QT1JUCiAgICAgICAgJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKICAgICAgICBpZigkZGF0YSAhPT0gZmFsc2UpCiAgICAgICAgewogICAgICAgICAgJHJlc3VsdCA9IGpzb25fZGVjb2RlKCRkYXRhLCB0cnVlKTsKICAgICAgICAgIGlmKCgkcmVzdWx0ICE9IE5VTEwpICYmIChpc3NldCgkcmVzdWx0WydyZXN1bHRzJ10pKSkKICAgICAgICAgIHsKICAgICAgICAgICAgJHJlbW90ZV9pdGVtcyA9ICRyZXN1bHRbJ3Jlc3VsdHMnXTsKICAgICAgICAgICAgJGxvY2FsX2l0ZW1zID0gc2VsZjo6ZG9TZWxlY3QoYXJyYXkoJ3dpdGhfaWQnID0+IHRydWUpKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGZvcmVhY2goJHJlbW90ZV9pdGVtcyBhcyAkaWQgPT4gJGl0ZW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZihpc3NldCgkbG9jYWxfaXRlbXNbJGlkXSkpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoJGl0ZW1bJ3VwZGF0ZWRfYXQnXSA+ICRsb2NhbF9pdGVtc1skaWRdLT51cGRhdGVkX2F0KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgaXQKICAgICAgICAgICAgICAgICAgJGxvY2FsX2l0ZW1zWyRpZF0tPnBvcHVsYXRlKCRpdGVtKTsKICAgICAgICAgICAgICAgICAgJGxvY2FsX2l0ZW1zWyRpZF0tPmRvd25sb2FkUmVtb3RlRmlsZSgkaXRlbVsnZmlsZW5hbWVfdXJsJ10pOyAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAkbG9jYWxfaXRlbXNbJGlkXS0+c2F2ZShhcnJheSgnbm9fdGltZV9pbmNyZW1lbnQnID0+IHRydWUpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIC8vIENyZWF0ZQogICAgICAgICAgICAgICAgJGxvY2FsX2l0ZW1zWyRpZF0gPSBuZXcgc2VsZigpOwogICAgICAgICAgICAgICAgJGxvY2FsX2l0ZW1zWyRpZF0tPnBvcHVsYXRlKCRpdGVtKTsKICAgICAgICAgICAgICAgICRsb2NhbF9pdGVtc1skaWRdLT5kb3dubG9hZFJlbW90ZUZpbGUoJGl0ZW1bJ2ZpbGVuYW1lX3VybCddKTsgIAogICAgICAgICAgICAgICAgJGxvY2FsX2l0ZW1zWyRpZF0tPnNhdmUoYXJyYXkoJ25vX3RpbWVfaW5jcmVtZW50JyA9PiB0cnVlLCAnZm9yY2VfaW5zZXJ0JyA9PiB0cnVlKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBERUxFVEUgTk9UIEVYSVNUQU5UCiAgICAgICAgICAgIGlmKCRkZWxldGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBmb3JlYWNoKCRsb2NhbF9pdGVtcyBhcyAkaWQgPT4gJGl0ZW0pCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYoIWlzc2V0KCRyZW1vdGVfaXRlbXNbJGlkXSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICRpdGVtLT5kZWxldGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIAogIH0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFileCollection.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAvKgogICAgQSBjb2xsZWN0aW9uIGlzIGEgc2V0IG9mIGZpbGVzLgogICovCiAgY2xhc3MgTUNGaWxlQ29sbGVjdGlvbgogIHsKICAgIHByb3RlY3RlZCAkY29sbGVjdGlvbl9pZDsKICAgIHByb3RlY3RlZCAkZmlsZXMgPSBhcnJheSgpOyAvLyBBcnJheSBvZiBNQ0ZpbGUgb2JqZWN0cwogICAgcHJvdGVjdGVkICRsYXN0X2ZpbGU7IC8vIExhc3QgZmlsZSBhZGRlZAogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbGxlY3Rpb25faWQgPSBudWxsKSB7CgkJCWlmKGlzX251bGwoJGNvbGxlY3Rpb25faWQpKQoJCQl7CgkJCQkkY29sbGVjdGlvbl9pZCA9IHNlbGY6OmNyZWF0ZVVuaXF1ZUNvbGxlY3Rpb25JZCgpOwoJCQl9CiAgICAgICR0aGlzLT5jb2xsZWN0aW9uX2lkID0gJGNvbGxlY3Rpb25faWQ7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpIHsKICAgICAgcmV0dXJuICR0aGlzLT5jb2xsZWN0aW9uX2lkOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sbGVjdGlvbklkKCkgewogICAgICByZXR1cm4gJHRoaXMtPmNvbGxlY3Rpb25faWQ7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNGaWxlcygpICB7CiAgICAgIHJldHVybiAoYm9vbCljb3VudCgkdGhpcy0+ZmlsZXMpOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsZXMoKSAgewogICAgICByZXR1cm4gKGFycmF5KSAkdGhpcy0+ZmlsZXM7CiAgICB9CiAgICAKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdEZpbGUoKSAgewogICAgICByZXNldCgkdGhpcy0+ZmlsZXMpOwogICAgICByZXR1cm4gY3VycmVudCgkdGhpcy0+ZmlsZXMpOwogICAgfQogICAgCgkJcHVibGljIGZ1bmN0aW9uIGdldExhc3RGaWxlKCkKCQl7CgkJCXJldHVybiAkdGhpcy0+bGFzdF9maWxlOwoJCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZCgpCiAgICB7CiAgICAgLy8gTG9hZCBmaWxlcyAKICAgICAkdGhpcy0+ZmlsZXMgPSBNQ0ZpbGU6OmRvU2VsZWN0KGFycmF5KCd3aGVyZScgPT4gYXJyYXkoJ2NvbGxlY3Rpb25faWQnID0+ICR0aGlzLT5jb2xsZWN0aW9uX2lkKSkpOwogICAgfQogICAgCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZE9uZSgpCiAgICB7CiAgICAgICR0aGlzLT5maWxlcyA9IE1DRmlsZTo6ZG9TZWxlY3QoYXJyYXkoJ3doZXJlJyA9PiBhcnJheSgnY29sbGVjdGlvbl9pZCcgPT4gJHRoaXMtPmNvbGxlY3Rpb25faWQpLCAnbGltaXQnID0+ICcxJykpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZVVuaXF1ZUNvbGxlY3Rpb25JZCgpCiAgICB7CiAgICAgIC8vIFRPRE8gQ2hlY2sgaW4gdGhlIERCIGZpcnN0Li4uCiAgICAgIHJldHVybiB0aW1lKCkgLiByYW5kKDAsMTAwMCk7CiAgICB9CiAgICAKCQlwdWJsaWMgZnVuY3Rpb24gYWRkRmlsZSgkZmlsZSwgJG1vdmUgPSB0cnVlKQoJCXsKICAgICAgJHRoaXMtPmxhc3RfZmlsZSA9IG5ldyBNQ0ZpbGUoJHRoaXMtPmNvbGxlY3Rpb25faWQpOwoJCQkKCQkJcmV0dXJuICR0aGlzLT5sYXN0X2ZpbGUtPnVwbG9hZEZyb21Mb2NhbCgkZmlsZSwgJG1vdmUpOwoJCX0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkVXBsb2FkZWRGaWxlKCRmaWVsZG5hbWUpCiAgICB7CiAgICAgICR0aGlzLT5sYXN0X2ZpbGUgPSBuZXcgTUNGaWxlKCR0aGlzLT5jb2xsZWN0aW9uX2lkKTsKCiAgICAgIHJldHVybiAkdGhpcy0+bGFzdF9maWxlLT5zYXZlVXBsb2FkZWRGaWxlKCRmaWVsZG5hbWUpOwogICAgfQogIH0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.qqFileUploader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIHFxRmlsZVVwbG9hZGVyIHsKCiAgICBwdWJsaWMgJGFsbG93ZWRFeHRlbnNpb25zID0gYXJyYXkoKTsKICAgIHB1YmxpYyAkc2l6ZUxpbWl0ID0gbnVsbDsKICAgIHB1YmxpYyAkaW5wdXROYW1lID0gJ3FxZmlsZSc7CiAgICBwdWJsaWMgJGNodW5rc0ZvbGRlciA9ICdjaHVua3MnOwoKICAgIHB1YmxpYyAkY2h1bmtzQ2xlYW51cFByb2JhYmlsaXR5ID0gMC4wMDE7IC8vIE9uY2UgaW4gMTAwMCByZXF1ZXN0cyBvbiBhdmcKICAgIHB1YmxpYyAkY2h1bmtzRXhwaXJlSW4gPSA2MDQ4MDA7IC8vIE9uZSB3ZWVrCgogICAgcHJvdGVjdGVkICR1cGxvYWROYW1lOwoKICAgIGZ1bmN0aW9uIF9fY29uc3RydWN0KCl7CiAgICAgICAgJHRoaXMtPnNpemVMaW1pdCA9ICR0aGlzLT50b0J5dGVzKGluaV9nZXQoJ3VwbG9hZF9tYXhfZmlsZXNpemUnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG9yaWdpbmFsIGZpbGVuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCl7CiAgICAgICAgaWYgKGlzc2V0KCRfUkVRVUVTVFsncXFmaWxlbmFtZSddKSkKICAgICAgICAgICAgcmV0dXJuICRfUkVRVUVTVFsncXFmaWxlbmFtZSddOwoKICAgICAgICBpZiAoaXNzZXQoJF9GSUxFU1skdGhpcy0+aW5wdXROYW1lXSkpCiAgICAgICAgICAgIHJldHVybiAkX0ZJTEVTWyR0aGlzLT5pbnB1dE5hbWVdWyduYW1lJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHVwbG9hZGVkIGZpbGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVwbG9hZE5hbWUoKXsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwbG9hZE5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm9jZXNzIHRoZSB1cGxvYWQuCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cGxvYWREaXJlY3RvcnkgVGFyZ2V0IGRpcmVjdG9yeS4KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgT3ZlcndyaXRlcyB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhbmRsZVVwbG9hZCgkdXBsb2FkRGlyZWN0b3J5LCAkbmFtZSA9IG51bGwpewoKICAgICAgICBpZiAoaXNfd3JpdGFibGUoJHRoaXMtPmNodW5rc0ZvbGRlcikgJiYKICAgICAgICAgICAgMSA9PSBtdF9yYW5kKDEsIDEvJHRoaXMtPmNodW5rc0NsZWFudXBQcm9iYWJpbGl0eSkpewoKICAgICAgICAgICAgLy8gUnVuIGdhcmJhZ2UgY29sbGVjdGlvbgogICAgICAgICAgICAkdGhpcy0+Y2xlYW51cENodW5rcygpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgbWF4IHVwbG9hZCBzaXplIHNwZWNpZmllZCBpbiBjbGFzcyBjb25maWd1cmF0aW9uIGRvZXMgbm90CiAgICAgICAgLy8gZXhjZWVkIHNpemUgYWxsb3dlZCBieSBzZXJ2ZXIgY29uZmlnCiAgICAgICAgaWYgKCR0aGlzLT50b0J5dGVzKGluaV9nZXQoJ3Bvc3RfbWF4X3NpemUnKSkgPCAkdGhpcy0+c2l6ZUxpbWl0IHx8CiAgICAgICAgICAgICR0aGlzLT50b0J5dGVzKGluaV9nZXQoJ3VwbG9hZF9tYXhfZmlsZXNpemUnKSkgPCAkdGhpcy0+c2l6ZUxpbWl0KXsKICAgICAgICAgICAgJHNpemUgPSBtYXgoMSwgJHRoaXMtPnNpemVMaW1pdCAvIDEwMjQgLyAxMDI0KSAuICdNJzsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcic9PiJTZXJ2ZXIgZXJyb3IuIEluY3JlYXNlIHBvc3RfbWF4X3NpemUgYW5kIHVwbG9hZF9tYXhfZmlsZXNpemUgdG8gIi4kc2l6ZSk7CiAgICAgICAgfQoKCQkvLyBpc193cml0YWJsZSgpIGlzIG5vdCByZWxpYWJsZSBvbiBXaW5kb3dzIChodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmlzLWV4ZWN1dGFibGUucGhwIzExMTE0NikKCQkvLyBUaGUgZm9sbG93aW5nIHRlc3RzIGlmIHRoZSBjdXJyZW50IE9TIGlzIFdpbmRvd3MgYW5kIGlmIHNvLCBtZXJlbHkgY2hlY2tzIGlmIHRoZSBmb2xkZXIgaXMgd3JpdGFibGU7CgkJLy8gb3RoZXJ3aXNlLCBpdCBjaGVja3MgYWRkaXRpb25hbGx5IGZvciBleGVjdXRhYmxlIHN0YXR1cyAobGlrZSBiZWZvcmUpLgoJCQogICAgICAgICRpc1dpbiA9IChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PT0gJ1dJTicpOwogICAgICAgICRmb2xkZXJJbmFjY2Vzc2libGUgPSAoJGlzV2luKSA/ICFpc193cml0YWJsZSgkdXBsb2FkRGlyZWN0b3J5KSA6ICggIWlzX3dyaXRhYmxlKCR1cGxvYWREaXJlY3RvcnkpICYmICFpc19leGVjdXRhYmxlKCR1cGxvYWREaXJlY3RvcnkpICk7CgogICAgICAgIGlmICgkZm9sZGVySW5hY2Nlc3NpYmxlKXsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gIlNlcnZlciBlcnJvci4gVXBsb2FkcyBkaXJlY3RvcnkgaXNuJ3Qgd3JpdGFibGUiIC4gKCEkaXNXaW4pID8gIiBvciBleGVjdXRhYmxlLiIgOiAiLiIpOwogICAgICAgIH0KCiAgICAgICAgaWYoIWlzc2V0KCRfU0VSVkVSWydDT05URU5UX1RZUEUnXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gIk5vIGZpbGVzIHdlcmUgdXBsb2FkZWQuIik7CiAgICAgICAgfSBlbHNlIGlmIChzdHJwb3Moc3RydG9sb3dlcigkX1NFUlZFUlsnQ09OVEVOVF9UWVBFJ10pLCAnbXVsdGlwYXJ0LycpICE9PSAwKXsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gIlNlcnZlciBlcnJvci4gTm90IGEgbXVsdGlwYXJ0IHJlcXVlc3QuIFBsZWFzZSBzZXQgZm9yY2VNdWx0aXBhcnQgdG8gZGVmYXVsdCB2YWx1ZSAodHJ1ZSkuIik7CiAgICAgICAgfQoKICAgICAgICAvLyBHZXQgc2l6ZSBhbmQgbmFtZQoKICAgICAgICAkZmlsZSA9ICRfRklMRVNbJHRoaXMtPmlucHV0TmFtZV07CiAgICAgICAgJHNpemUgPSAkZmlsZVsnc2l6ZSddOwoKICAgICAgICBpZiAoJG5hbWUgPT09IG51bGwpewogICAgICAgICAgICAkbmFtZSA9ICR0aGlzLT5nZXROYW1lKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBWYWxpZGF0ZSBuYW1lCgogICAgICAgIGlmICgkbmFtZSA9PT0gbnVsbCB8fCAkbmFtZSA9PT0gJycpewogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAnRmlsZSBuYW1lIGVtcHR5LicpOwogICAgICAgIH0KCiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBzaXplCgogICAgICAgIGlmICgkc2l6ZSA9PSAwKXsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ0ZpbGUgaXMgZW1wdHkuJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHNpemUgPiAkdGhpcy0+c2l6ZUxpbWl0KXsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ0ZpbGUgaXMgdG9vIGxhcmdlLicpOwogICAgICAgIH0KCiAgICAgICAgLy8gVmFsaWRhdGUgZmlsZSBleHRlbnNpb24KCiAgICAgICAgJHBhdGhpbmZvID0gcGF0aGluZm8oJG5hbWUpOwogICAgICAgICRleHQgPSBpc3NldCgkcGF0aGluZm9bJ2V4dGVuc2lvbiddKSA/ICRwYXRoaW5mb1snZXh0ZW5zaW9uJ10gOiAnJzsKCiAgICAgICAgaWYoJHRoaXMtPmFsbG93ZWRFeHRlbnNpb25zICYmICFpbl9hcnJheShzdHJ0b2xvd2VyKCRleHQpLCBhcnJheV9tYXAoInN0cnRvbG93ZXIiLCAkdGhpcy0+YWxsb3dlZEV4dGVuc2lvbnMpKSl7CiAgICAgICAgICAgICR0aGVzZSA9IGltcGxvZGUoJywgJywgJHRoaXMtPmFsbG93ZWRFeHRlbnNpb25zKTsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdlcnJvcicgPT4gJ0ZpbGUgaGFzIGFuIGludmFsaWQgZXh0ZW5zaW9uLCBpdCBzaG91bGQgYmUgb25lIG9mICcuICR0aGVzZSAuICcuJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBTYXZlIGEgY2h1bmsKCiAgICAgICAgJHRvdGFsUGFydHMgPSBpc3NldCgkX1JFUVVFU1RbJ3FxdG90YWxwYXJ0cyddKSA/IChpbnQpJF9SRVFVRVNUWydxcXRvdGFscGFydHMnXSA6IDE7CgogICAgICAgIGlmICgkdG90YWxQYXJ0cyA+IDEpewoKICAgICAgICAgICAgJGNodW5rc0ZvbGRlciA9ICR0aGlzLT5jaHVua3NGb2xkZXI7CiAgICAgICAgICAgICRwYXJ0SW5kZXggPSAoaW50KSRfUkVRVUVTVFsncXFwYXJ0aW5kZXgnXTsKICAgICAgICAgICAgJHV1aWQgPSAkX1JFUVVFU1RbJ3FxdXVpZCddOwoKICAgICAgICAgICAgaWYgKCFpc193cml0YWJsZSgkY2h1bmtzRm9sZGVyKSAmJiAhaXNfZXhlY3V0YWJsZSgkdXBsb2FkRGlyZWN0b3J5KSl7CiAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJyA9PiAiU2VydmVyIGVycm9yLiBDaHVua3MgZGlyZWN0b3J5IGlzbid0IHdyaXRhYmxlIG9yIGV4ZWN1dGFibGUuIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0YXJnZXRGb2xkZXIgPSAkdGhpcy0+Y2h1bmtzRm9sZGVyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHV1aWQ7CgogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCR0YXJnZXRGb2xkZXIpKXsKICAgICAgICAgICAgICAgIG1rZGlyKCR0YXJnZXRGb2xkZXIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdGFyZ2V0ID0gJHRhcmdldEZvbGRlci4nLycuJHBhcnRJbmRleDsKICAgICAgICAgICAgJHN1Y2Nlc3MgPSBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1skdGhpcy0+aW5wdXROYW1lXVsndG1wX25hbWUnXSwgJHRhcmdldCk7CgogICAgICAgICAgICAvLyBMYXN0IGNodW5rIHNhdmVkIHN1Y2Nlc3NmdWxseQogICAgICAgICAgICBpZiAoJHN1Y2Nlc3MgQU5EICgkdG90YWxQYXJ0cy0xID09ICRwYXJ0SW5kZXgpKXsKCiAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gJHRoaXMtPmdldFVuaXF1ZVRhcmdldFBhdGgoJHVwbG9hZERpcmVjdG9yeSwgJG5hbWUpOwogICAgICAgICAgICAgICAgJHRoaXMtPnVwbG9hZE5hbWUgPSBiYXNlbmFtZSgkdGFyZ2V0KTsKCiAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gZm9wZW4oJHRhcmdldCwgJ3diJyk7CgogICAgICAgICAgICAgICAgZm9yICgkaT0wOyAkaTwkdG90YWxQYXJ0czsgJGkrKyl7CiAgICAgICAgICAgICAgICAgICAgJGNodW5rID0gZm9wZW4oJHRhcmdldEZvbGRlci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRpLCAicmIiKTsKICAgICAgICAgICAgICAgICAgICBzdHJlYW1fY29weV90b19zdHJlYW0oJGNodW5rLCAkdGFyZ2V0KTsKICAgICAgICAgICAgICAgICAgICBmY2xvc2UoJGNodW5rKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBTdWNjZXNzCiAgICAgICAgICAgICAgICBmY2xvc2UoJHRhcmdldCk7CgogICAgICAgICAgICAgICAgZm9yICgkaT0wOyAkaTwkdG90YWxQYXJ0czsgJGkrKyl7CiAgICAgICAgICAgICAgICAgICAgdW5saW5rKCR0YXJnZXRGb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kaSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcm1kaXIoJHRhcmdldEZvbGRlcik7CgogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCJzdWNjZXNzIiA9PiB0cnVlKTsKCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBhcnJheSgic3VjY2VzcyIgPT4gdHJ1ZSk7CgogICAgICAgIH0gZWxzZSB7CgogICAgICAgICAgICAkdGFyZ2V0ID0gJHRoaXMtPmdldFVuaXF1ZVRhcmdldFBhdGgoJHVwbG9hZERpcmVjdG9yeSwgJG5hbWUpOwoKICAgICAgICAgICAgaWYgKCR0YXJnZXQpewogICAgICAgICAgICAgICAgJHRoaXMtPnVwbG9hZE5hbWUgPSBiYXNlbmFtZSgkdGFyZ2V0KTsKCiAgICAgICAgICAgICAgICBpZiAobW92ZV91cGxvYWRlZF9maWxlKCRmaWxlWyd0bXBfbmFtZSddLCAkdGFyZ2V0KSl7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdzdWNjZXNzJz0+IHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gYXJyYXkoJ2Vycm9yJz0+ICdDb3VsZCBub3Qgc2F2ZSB1cGxvYWRlZCBmaWxlLicgLgogICAgICAgICAgICAgICAgJ1RoZSB1cGxvYWQgd2FzIGNhbmNlbGxlZCwgb3Igc2VydmVyIGVycm9yIGVuY291bnRlcmVkJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyBhIHBhdGggdG8gdXNlIHdpdGggdGhpcyB1cGxvYWQuIENoZWNrIHRoYXQgdGhlIG5hbWUgZG9lcyBub3QgZXhpc3QsCiAgICAgKiBhbmQgYXBwZW5kcyBhIHN1ZmZpeCBvdGhlcndpc2UuCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1cGxvYWREaXJlY3RvcnkgVGFyZ2V0IGRpcmVjdG9yeQogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgVGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gdXNlLgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0VW5pcXVlVGFyZ2V0UGF0aCgkdXBsb2FkRGlyZWN0b3J5LCAkZmlsZW5hbWUpCiAgICB7CiAgICAgICAgLy8gQWxsb3cgb25seSBvbmUgcHJvY2VzcyBhdCB0aGUgdGltZSB0byBnZXQgYSB1bmlxdWUgZmlsZSBuYW1lLCBvdGhlcndpc2UKICAgICAgICAvLyBpZiBtdWx0aXBsZSBwZW9wbGUgd291bGQgdXBsb2FkIGEgZmlsZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXQgdGhlIHNhbWUgdGltZQogICAgICAgIC8vIG9ubHkgdGhlIGxhdGVzdCB3b3VsZCBiZSBzYXZlZC4KCiAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnc2VtX2FjcXVpcmUnKSl7CiAgICAgICAgICAgICRsb2NrID0gc2VtX2dldChmdG9rKF9fRklMRV9fLCAndScpKTsKICAgICAgICAgICAgc2VtX2FjcXVpcmUoJGxvY2spOwogICAgICAgIH0KCiAgICAgICAgJHBhdGhpbmZvID0gcGF0aGluZm8oJGZpbGVuYW1lKTsKICAgICAgICAkYmFzZSA9ICRwYXRoaW5mb1snZmlsZW5hbWUnXTsKICAgICAgICAkZXh0ID0gaXNzZXQoJHBhdGhpbmZvWydleHRlbnNpb24nXSkgPyAkcGF0aGluZm9bJ2V4dGVuc2lvbiddIDogJyc7CiAgICAgICAgJGV4dCA9ICRleHQgPT0gJycgPyAkZXh0IDogJy4nIC4gJGV4dDsKCiAgICAgICAgJHVuaXF1ZSA9ICRiYXNlOwogICAgICAgICRzdWZmaXggPSAwOwoKICAgICAgICAvLyBHZXQgdW5pcXVlIGZpbGUgbmFtZSBmb3IgdGhlIGZpbGUsIGJ5IGFwcGVuZGluZyByYW5kb20gc3VmZml4LgoKICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJHVwbG9hZERpcmVjdG9yeSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdW5pcXVlIC4gJGV4dCkpewogICAgICAgICAgICAkc3VmZml4ICs9IHJhbmQoMSwgOTk5KTsKICAgICAgICAgICAgJHVuaXF1ZSA9ICRiYXNlLictJy4kc3VmZml4OwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICAkdXBsb2FkRGlyZWN0b3J5IC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICR1bmlxdWUgLiAkZXh0OwoKICAgICAgICAvLyBDcmVhdGUgYW4gZW1wdHkgdGFyZ2V0IGZpbGUKICAgICAgICBpZiAoIXRvdWNoKCRyZXN1bHQpKXsKICAgICAgICAgICAgLy8gRmFpbGVkCiAgICAgICAgICAgICRyZXN1bHQgPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3NlbV9hY3F1aXJlJykpewogICAgICAgICAgICBzZW1fcmVsZWFzZSgkbG9jayk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIERlbGV0ZXMgYWxsIGZpbGUgcGFydHMgaW4gdGhlIGNodW5rcyBmb2xkZXIgZm9yIGZpbGVzIHVwbG9hZGVkCiAgICAgKiBtb3JlIHRoYW4gY2h1bmtzRXhwaXJlSW4gc2Vjb25kcyBhZ28KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFudXBDaHVua3MoKXsKICAgICAgICBmb3JlYWNoIChzY2FuZGlyKCR0aGlzLT5jaHVua3NGb2xkZXIpIGFzICRpdGVtKXsKICAgICAgICAgICAgaWYgKCRpdGVtID09ICIuIiB8fCAkaXRlbSA9PSAiLi4iKQogICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAgICAkcGF0aCA9ICR0aGlzLT5jaHVua3NGb2xkZXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kaXRlbTsKCiAgICAgICAgICAgIGlmICghaXNfZGlyKCRwYXRoKSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgaWYgKHRpbWUoKSAtIGZpbGVtdGltZSgkcGF0aCkgPiAkdGhpcy0+Y2h1bmtzRXhwaXJlSW4pewogICAgICAgICAgICAgICAgJHRoaXMtPnJlbW92ZURpcigkcGF0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGEgZGlyZWN0b3J5IGFuZCBhbGwgZmlsZXMgY29udGFpbmVkIGluc2lkZQogICAgICogQHBhcmFtIHN0cmluZyAkZGlyCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZW1vdmVEaXIoJGRpcil7CiAgICAgICAgZm9yZWFjaCAoc2NhbmRpcigkZGlyKSBhcyAkaXRlbSl7CiAgICAgICAgICAgIGlmICgkaXRlbSA9PSAiLiIgfHwgJGl0ZW0gPT0gIi4uIikKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwoKICAgICAgICAgICAgdW5saW5rKCRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kaXRlbSk7CiAgICAgICAgfQogICAgICAgIHJtZGlyKCRkaXIpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydHMgYSBnaXZlbiBzaXplIHdpdGggdW5pdHMgdG8gYnl0ZXMuCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHRvQnl0ZXMoJHN0cil7CiAgICAgICAgJHZhbCA9IHRyaW0oJHN0cik7CiAgICAgICAgJGxhc3QgPSBzdHJ0b2xvd2VyKCRzdHJbc3RybGVuKCRzdHIpLTFdKTsKICAgICAgICBzd2l0Y2goJGxhc3QpIHsKICAgICAgICAgICAgY2FzZSAnZyc6ICR2YWwgKj0gMTAyNDsKICAgICAgICAgICAgY2FzZSAnbSc6ICR2YWwgKj0gMTAyNDsKICAgICAgICAgICAgY2FzZSAnayc6ICR2YWwgKj0gMTAyNDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWw7CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.qqUploadedFileForm.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBIYW5kbGUgZmlsZSB1cGxvYWRzIHZpYSByZWd1bGFyIGZvcm0gcG9zdCAodXNlcyB0aGUgJF9GSUxFUyBhcnJheSkKICovCmNsYXNzIHFxVXBsb2FkZWRGaWxlRm9ybSB7CgogICAgLyoqCiAgICAgKiBTYXZlIHRoZSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgcGF0aAogICAgICogQHJldHVybiBib29sZWFuIFRSVUUgb24gc3VjY2VzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkcGF0aCkgewogICAgICAgIHJldHVybiBtb3ZlX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1sncXFmaWxlJ11bJ3RtcF9uYW1lJ10sICRwYXRoKTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBHZXQgdGhlIG9yaWdpbmFsIGZpbGVuYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZyBmaWxlbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpIHsKICAgICAgICByZXR1cm4gJF9GSUxFU1sncXFmaWxlJ11bJ25hbWUnXTsKICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBHZXQgdGhlIGZpbGUgc2l6ZQogICAgICogQHJldHVybiBpbnRlZ2VyIGZpbGUtc2l6ZSBpbiBieXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkgewogICAgICAgIHJldHVybiAkX0ZJTEVTWydxcWZpbGUnXVsnc2l6ZSddOwogICAgfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/class.qqUploadedFileXhr.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBIYW5kbGUgZmlsZSB1cGxvYWRzIHZpYSBYTUxIdHRwUmVxdWVzdAogKi8KY2xhc3MgcXFVcGxvYWRlZEZpbGVYaHIgewogICAgLyoqCiAgICAgKiBTYXZlIHRoZSBmaWxlIHRvIHRoZSBzcGVjaWZpZWQgcGF0aAogICAgICogQHJldHVybiBib29sZWFuIFRSVUUgb24gc3VjY2VzcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkcGF0aCkgeyAgICAKICAgICAgICAkaW5wdXQgPSBmb3BlbigicGhwOi8vaW5wdXQiLCAiciIpOwogICAgICAgICR0ZW1wID0gdG1wZmlsZSgpOwogICAgICAgICRyZWFsU2l6ZSA9IHN0cmVhbV9jb3B5X3RvX3N0cmVhbSgkaW5wdXQsICR0ZW1wKTsKICAgICAgICBmY2xvc2UoJGlucHV0KTsKICAgICAgICAKICAgICAgICBpZiAoJHJlYWxTaXplICE9ICR0aGlzLT5nZXRTaXplKCkpeyAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICR0YXJnZXQgPSBmb3BlbigkcGF0aCwgInciKTsgICAgICAgIAogICAgICAgIGZzZWVrKCR0ZW1wLCAwLCBTRUVLX1NFVCk7CiAgICAgICAgc3RyZWFtX2NvcHlfdG9fc3RyZWFtKCR0ZW1wLCAkdGFyZ2V0KTsKICAgICAgICBmY2xvc2UoJHRhcmdldCk7CiAgICAgICAgCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG9yaWdpbmFsIGZpbGVuYW1lCiAgICAgKiBAcmV0dXJuIHN0cmluZyBmaWxlbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpIHsKICAgICAgICByZXR1cm4gJF9HRVRbJ3FxZmlsZSddOwogICAgfQogICAgCiAgICAvKioKICAgICAqIEdldCB0aGUgZmlsZSBzaXplCiAgICAgKiBAcmV0dXJuIGludGVnZXIgZmlsZS1zaXplIGluIGJ5dGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKSB7CiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWyJDT05URU5UX0xFTkdUSCJdKSl7CiAgICAgICAgICAgIHJldHVybiAoaW50KSRfU0VSVkVSWyJDT05URU5UX0xFTkdUSCJdOyAgICAgICAgICAgIAogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0dldHRpbmcgY29udGVudCBsZW5ndGggaXMgbm90IHN1cHBvcnRlZC4nKTsKICAgICAgICB9ICAgICAgCiAgICB9ICAgCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAABAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAIAAAgAAAAYAAAAAAAAAAABAAAgAAAAAAEAAEAAAAAAAQAAgAAAAAABAAEAAAAAAAEAAgAAAAAAAQAEAAAAAAABAAgAAAAAAAEAEAAAAAAAAQAgAAAAAAABAEAAAAAAAAEAgAAAAAAAAQEAAAAAAAABAgAAAAAAAAEEAAAAAAAAAQgAAAAAAAABEAAAAAAAAAEgAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lib/css/admin.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmVkaXRhYmxlOmhvdmVyCnsKLyogIHBhZGRpbmctbGVmdDogMjBweDsqLwogIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnL21vZHVsZXMvTUNNZWRpYXMvaW1hZ2VzL3BlbmNpbC5wbmcnKTsKICBiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Ci8qICBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6Zml4ZWQ7Ki8KICBiYWNrZ3JvdW5kLXBvc2l0aW9uOnJpZ2h0Owp9]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAQAAB1AHAAbABvAGEAZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAMAGYAaQBuAGUAdQBwAGwAbwBhAGQAZQByZHNjbGJvb2wBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAABAAAAwAAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAAIAAAAGAAAAAAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/fineuploader-3.4.1.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogQ29weXJpZ2h0IDIwMTMsIFdpZGVuIEVudGVycHJpc2VzIGluZm9AZmluZXVwbG9hZGVyLmNvbQogKgogKiBMaWNlbnNlZCB1bmRlciBHTlUgR1BMIHYzLCBzZWUgbGljZW5zZS50eHQuCiAqLwoucXEtdXBsb2FkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7Cn0KLnFxLXVwbG9hZC1idXR0b24gewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTA1cHg7CiAgICBwYWRkaW5nOiA3cHggMDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6ICM4ODAwMDA7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDsKICAgIGNvbG9yOiAjRkZGOwp9Ci5xcS11cGxvYWQtYnV0dG9uLWhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNDQzAwMDA7Cn0KLnFxLXVwbG9hZC1idXR0b24tZm9jdXMgewogICAgb3V0bGluZTogMXB4IGRvdHRlZCAjMDAwMDAwOwp9Ci5xcS11cGxvYWQtZHJvcC1hcmVhLCAucXEtdXBsb2FkLWV4dHJhLWRyb3AtYXJlYSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgei1pbmRleDogMjsKICAgIGJhY2tncm91bmQ6ICNGRjk3OTc7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLnFxLXVwbG9hZC1kcm9wLWFyZWEgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgZm9udC1zaXplOiAxNnB4Owp9Ci5xcS11cGxvYWQtZXh0cmEtZHJvcC1hcmVhIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi10b3A6IDUwcHg7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBwYWRkaW5nLXRvcDogMzBweDsKICAgIGhlaWdodDogMjBweDsKICAgIG1pbi1oZWlnaHQ6IDQwcHg7Cn0KLnFxLXVwbG9hZC1kcm9wLWFyZWEtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6ICNGRjcxNzE7Cn0KLnFxLXVwbG9hZC1saXN0IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBsaXN0LXN0eWxlOiBub25lOwp9Ci5xcS11cGxvYWQtbGlzdCBsaSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiA5cHg7CiAgICBsaW5lLWhlaWdodDogMTVweDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkYwQkQ7Cn0KLnFxLXVwbG9hZC1maWxlLCAucXEtdXBsb2FkLXNwaW5uZXIsIC5xcS11cGxvYWQtc2l6ZSwgLnFxLXVwbG9hZC1jYW5jZWwsIC5xcS11cGxvYWQtcmV0cnksIC5xcS11cGxvYWQtZmFpbGVkLXRleHQsIC5xcS11cGxvYWQtZmluaXNoZWQsIC5xcS11cGxvYWQtZGVsZXRlIHsKICAgIG1hcmdpbi1yaWdodDogMTJweDsKfQoucXEtdXBsb2FkLWZpbGUgewp9Ci5xcS11cGxvYWQtc3Bpbm5lciB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBiYWNrZ3JvdW5kOiB1cmwoImxvYWRpbmcuZ2lmIik7CiAgICB3aWR0aDogMTVweDsKICAgIGhlaWdodDogMTVweDsKICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LWJvdHRvbTsKfQoucXEtZHJvcC1wcm9jZXNzaW5nIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KLnFxLWRyb3AtcHJvY2Vzc2luZy1zcGlubmVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGJhY2tncm91bmQ6IHVybCgicHJvY2Vzc2luZy5naWYiKTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9Ci5xcS11cGxvYWQtZmluaXNoZWQgewogICAgZGlzcGxheTpub25lOwogICAgd2lkdGg6MTVweDsKICAgIGhlaWdodDoxNXB4OwogICAgdmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207Cn0KLnFxLXVwbG9hZC1yZXRyeSwgLnFxLXVwbG9hZC1kZWxldGUgewogICAgZGlzcGxheTogbm9uZTsKICAgIGNvbG9yOiAjMDAwMDAwOwp9Ci5xcS11cGxvYWQtY2FuY2VsLCAucXEtdXBsb2FkLWRlbGV0ZSB7Cgljb2xvcjogIzAwMDAwMDsKfQoucXEtdXBsb2FkLXJldHJ5YWJsZSAucXEtdXBsb2FkLXJldHJ5IHsKICAgIGRpc3BsYXk6IGlubGluZTsKfQoucXEtdXBsb2FkLXNpemUsIC5xcS11cGxvYWQtY2FuY2VsLCAucXEtdXBsb2FkLXJldHJ5LCAucXEtdXBsb2FkLWRlbGV0ZSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9Ci5xcS11cGxvYWQtZmFpbGVkLXRleHQgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Ci5xcS11cGxvYWQtZmFpbGVkLWljb24gewogICAgZGlzcGxheTpub25lOwogICAgd2lkdGg6MTVweDsKICAgIGhlaWdodDoxNXB4OwogICAgdmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207Cn0KLnFxLXVwbG9hZC1mYWlsIC5xcS11cGxvYWQtZmFpbGVkLXRleHQgewogICAgZGlzcGxheTogaW5saW5lOwp9Ci5xcS11cGxvYWQtcmV0cnlpbmcgLnFxLXVwbG9hZC1mYWlsZWQtdGV4dCB7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICBjb2xvcjogI0Q2MDAwMDsKfQoucXEtdXBsb2FkLWxpc3QgbGkucXEtdXBsb2FkLXN1Y2Nlc3MgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzVEQTMwQzsKICAgIGNvbG9yOiAjRkZGRkZGOwp9Ci5xcS11cGxvYWQtbGlzdCBsaS5xcS11cGxvYWQtZmFpbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDYwMDAwOwogICAgY29sb3I6ICNGRkZGRkY7Cn0KLnFxLXByb2dyZXNzLWJhciB7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICByZ2JhKDMwLDg3LDE1MywxKSAwJSwgcmdiYSg0MSwxMzcsMjE2LDEpIDUwJSwgcmdiYSgzMiwxMjQsMjAyLDEpIDUxJSwgcmdiYSgxMjUsMTg1LDIzMiwxKSAxMDAlKTsgLyogRkYzLjYrICovCiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLHJnYmEoMzAsODcsMTUzLDEpKSwgY29sb3Itc3RvcCg1MCUscmdiYSg0MSwxMzcsMjE2LDEpKSwgY29sb3Itc3RvcCg1MSUscmdiYSgzMiwxMjQsMjAyLDEpKSwgY29sb3Itc3RvcCgxMDAlLHJnYmEoMTI1LDE4NSwyMzIsMSkpKTsgLyogQ2hyb21lLFNhZmFyaTQrICovCiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICByZ2JhKDMwLDg3LDE1MywxKSAwJSxyZ2JhKDQxLDEzNywyMTYsMSkgNTAlLHJnYmEoMzIsMTI0LDIwMiwxKSA1MSUscmdiYSgxMjUsMTg1LDIzMiwxKSAxMDAlKTsgLyogQ2hyb21lMTArLFNhZmFyaTUuMSsgKi8KICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICByZ2JhKDMwLDg3LDE1MywxKSAwJSxyZ2JhKDQxLDEzNywyMTYsMSkgNTAlLHJnYmEoMzIsMTI0LDIwMiwxKSA1MSUscmdiYSgxMjUsMTg1LDIzMiwxKSAxMDAlKTsgLyogT3BlcmEgMTEuMTArICovCiAgICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgIHJnYmEoMzAsODcsMTUzLDEpIDAlLHJnYmEoNDEsMTM3LDIxNiwxKSA1MCUscmdiYSgzMiwxMjQsMjAyLDEpIDUxJSxyZ2JhKDEyNSwxODUsMjMyLDEpIDEwMCUpOyAvKiBJRTEwKyAqLwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIHJnYmEoMzAsODcsMTUzLDEpIDAlLHJnYmEoNDEsMTM3LDIxNiwxKSA1MCUscmdiYSgzMiwxMjQsMjAyLDEpIDUxJSxyZ2JhKDEyNSwxODUsMjMyLDEpIDEwMCUpOyAvKiBXM0MgKi8KICAgIHdpZHRoOiAwJTsKICAgIGhlaWdodDogMTVweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIG1hcmdpbi1ib3R0b206IDNweDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/fineuploader-fix.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQ01TTVMgU1RZTEUgRklYICovCi5xcS11cGxvYWQtYnV0dG9uIHsKICB3aWR0aDogMTUwcHg7Cn0KLnFxLXVwbG9hZC1idXR0b24gZGl2IHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/fineuploader.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogT3JpZ2luYWwgdmVyc2lvbjogMS4wIMKpIDIwMTAgQW5kcmV3IFZhbHVtcyAoIGFuZHJldyhhdCl2YWx1bXMuY29tICkKICogQ3VycmVudCBNYWludGFpbmVyICgyLjArKTogMjAxMiwgUmF5IE5pY2hvbHVzICggZmluZXVwbG9hZGVyKGF0KWdhcnN0YXNpby5jb20gKQogKgogKiBMaWNlbnNlZCB1bmRlciBNSVQgbGljZW5zZSwgR05VIEdQTCAyIG9yIGxhdGVyLCBHTlUgTEdQTCAyIG9yIGxhdGVyLCBzZWUgbGljZW5zZS50eHQuCiAqLwoucXEtdXBsb2FkZXIgewogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgd2lkdGg6IDEwMCU7Cn0KLnFxLXVwbG9hZC1idXR0b24gewogICAgZGlzcGxheTogYmxvY2s7CiAgICAvKm9yIGlubGluZS1ibG9jayovCiAgICB3aWR0aDogMTA1cHg7CiAgICBwYWRkaW5nOiA3cHggMDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIGJhY2tncm91bmQ6ICM4ODAwMDA7CiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0RERDsKICAgIGNvbG9yOiAjRkZGOwp9Ci5xcS11cGxvYWQtYnV0dG9uLWhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNDQzAwMDA7Cn0KLnFxLXVwbG9hZC1idXR0b24tZm9jdXMgewogICAgb3V0bGluZTogMXB4IGRvdHRlZCAjMDAwMDAwOwp9Ci5xcS11cGxvYWQtZHJvcC1hcmVhLCAucXEtdXBsb2FkLWV4dHJhLWRyb3AtYXJlYSB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IDA7CiAgICBsZWZ0OiAwOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAzMHB4OwogICAgei1pbmRleDogMjsKICAgIGJhY2tncm91bmQ6ICNGRjk3OTc7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KLnFxLXVwbG9hZC1kcm9wLWFyZWEgc3BhbiB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogNTAlOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgZm9udC1zaXplOiAxNnB4Owp9Ci5xcS11cGxvYWQtZXh0cmEtZHJvcC1hcmVhIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIG1hcmdpbi10b3A6IDUwcHg7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBwYWRkaW5nLXRvcDogMzBweDsKICAgIGhlaWdodDogMjBweDsKICAgIG1pbi1oZWlnaHQ6IDQwcHg7Cn0KLnFxLXVwbG9hZC1kcm9wLWFyZWEtYWN0aXZlIHsKICAgIGJhY2tncm91bmQ6ICNGRjcxNzE7Cn0KLnFxLXVwbG9hZC1saXN0IHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDA7CiAgICBsaXN0LXN0eWxlOiBub25lOwp9Ci5xcS11cGxvYWQtbGlzdCBsaSB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiA5cHg7CiAgICBsaW5lLWhlaWdodDogMTVweDsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkYwQkQ7Cn0KLnFxLXVwbG9hZC1maWxlLCAucXEtdXBsb2FkLXNwaW5uZXIsIC5xcS11cGxvYWQtc2l6ZSwgLnFxLXVwbG9hZC1jYW5jZWwsIC5xcS11cGxvYWQtcmV0cnksIC5xcS11cGxvYWQtZmFpbGVkLXRleHQsIC5xcS11cGxvYWQtZmluaXNoZWQgewogICAgbWFyZ2luLXJpZ2h0OiAxMnB4Owp9Ci5xcS11cGxvYWQtZmlsZSB7Cn0KLnFxLXVwbG9hZC1zcGlubmVyIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIGJhY2tncm91bmQ6IHVybCgibG9hZGluZy5naWYiKTsKICAgIHdpZHRoOiAxNXB4OwogICAgaGVpZ2h0OiAxNXB4OwogICAgdmVydGljYWwtYWxpZ246IHRleHQtYm90dG9tOwp9Ci5xcS11cGxvYWQtZmluaXNoZWQgewogICAgZGlzcGxheTpub25lOwogICAgd2lkdGg6MTVweDsKICAgIGhlaWdodDoxNXB4OwogICAgdmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207Cn0KLnFxLXVwbG9hZC1yZXRyeSB7CiAgICBkaXNwbGF5OiBub25lOwogICAgY29sb3I6ICMwMDAwMDA7Cn0KLnFxLXVwbG9hZC1jYW5jZWwgewoJY29sb3I6ICMwMDAwMDA7Cn0KLnFxLXVwbG9hZC1yZXRyeWFibGUgLnFxLXVwbG9hZC1yZXRyeSB7CiAgICBkaXNwbGF5OiBpbmxpbmU7Cn0KLnFxLXVwbG9hZC1zaXplLCAucXEtdXBsb2FkLWNhbmNlbCwgLnFxLXVwbG9hZC1yZXRyeSB7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBmb250LXdlaWdodDogbm9ybWFsOwp9Ci5xcS11cGxvYWQtZmFpbGVkLXRleHQgewogICAgZGlzcGxheTogbm9uZTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9Ci5xcS11cGxvYWQtZmFpbGVkLWljb24gewogICAgZGlzcGxheTpub25lOwogICAgd2lkdGg6MTVweDsKICAgIGhlaWdodDoxNXB4OwogICAgdmVydGljYWwtYWxpZ246dGV4dC1ib3R0b207Cn0KLnFxLXVwbG9hZC1mYWlsIC5xcS11cGxvYWQtZmFpbGVkLXRleHQgewogICAgZGlzcGxheTogaW5saW5lOwp9Ci5xcS11cGxvYWQtcmV0cnlpbmcgLnFxLXVwbG9hZC1mYWlsZWQtdGV4dCB7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICBjb2xvcjogI0Q2MDAwMDsKfQoucXEtdXBsb2FkLWxpc3QgbGkucXEtdXBsb2FkLXN1Y2Nlc3MgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzVEQTMwQzsKICAgIGNvbG9yOiAjRkZGRkZGOwp9Ci5xcS11cGxvYWQtbGlzdCBsaS5xcS11cGxvYWQtZmFpbCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRDYwMDAwOwogICAgY29sb3I6ICNGRkZGRkY7Cn0KLnFxLXByb2dyZXNzLWJhciB7CiAgICBiYWNrZ3JvdW5kOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICByZ2JhKDMwLDg3LDE1MywxKSAwJSwgcmdiYSg0MSwxMzcsMjE2LDEpIDUwJSwgcmdiYSgzMiwxMjQsMjAyLDEpIDUxJSwgcmdiYSgxMjUsMTg1LDIzMiwxKSAxMDAlKTsgLyogRkYzLjYrICovCiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCB0b3AsIGxlZnQgYm90dG9tLCBjb2xvci1zdG9wKDAlLHJnYmEoMzAsODcsMTUzLDEpKSwgY29sb3Itc3RvcCg1MCUscmdiYSg0MSwxMzcsMjE2LDEpKSwgY29sb3Itc3RvcCg1MSUscmdiYSgzMiwxMjQsMjAyLDEpKSwgY29sb3Itc3RvcCgxMDAlLHJnYmEoMTI1LDE4NSwyMzIsMSkpKTsgLyogQ2hyb21lLFNhZmFyaTQrICovCiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICByZ2JhKDMwLDg3LDE1MywxKSAwJSxyZ2JhKDQxLDEzNywyMTYsMSkgNTAlLHJnYmEoMzIsMTI0LDIwMiwxKSA1MSUscmdiYSgxMjUsMTg1LDIzMiwxKSAxMDAlKTsgLyogQ2hyb21lMTArLFNhZmFyaTUuMSsgKi8KICAgIGJhY2tncm91bmQ6IC1vLWxpbmVhci1ncmFkaWVudCh0b3AsICByZ2JhKDMwLDg3LDE1MywxKSAwJSxyZ2JhKDQxLDEzNywyMTYsMSkgNTAlLHJnYmEoMzIsMTI0LDIwMiwxKSA1MSUscmdiYSgxMjUsMTg1LDIzMiwxKSAxMDAlKTsgLyogT3BlcmEgMTEuMTArICovCiAgICBiYWNrZ3JvdW5kOiAtbXMtbGluZWFyLWdyYWRpZW50KHRvcCwgIHJnYmEoMzAsODcsMTUzLDEpIDAlLHJnYmEoNDEsMTM3LDIxNiwxKSA1MCUscmdiYSgzMiwxMjQsMjAyLDEpIDUxJSxyZ2JhKDEyNSwxODUsMjMyLDEpIDEwMCUpOyAvKiBJRTEwKyAqLwogICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIHJnYmEoMzAsODcsMTUzLDEpIDAlLHJnYmEoNDEsMTM3LDIxNiwxKSA1MCUscmdiYSgzMiwxMjQsMjAyLDEpIDUxJSxyZ2JhKDEyNSwxODUsMjMyLDEpIDEwMCUpOyAvKiBXM0MgKi8KICAgIHdpZHRoOiAwJTsKICAgIGhlaWdodDogMTVweDsKICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgIG1hcmdpbi1ib3R0b206IDNweDsKICAgIGRpc3BsYXk6IG5vbmU7Cn0K]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/iframe.xss.response-3.4.1.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogICAgdmFyIG1hdGNoID0gLyhcey4rXH0pLisvLmV4ZWMoZG9jdW1lbnQuYm9keS5pbm5lckhUTUwpOwogICAgaWYgKG1hdGNoKSB7CiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKG1hdGNoWzFdLCAnKicpOwogICAgfQp9KCkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/jquery-plugin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciB1cGxvYWRlciwgJGVsLCBpbml0LCBkYXRhU3RvcmUsIHBsdWdpbk9wdGlvbiwgcGx1Z2luT3B0aW9ucywgYWRkQ2FsbGJhY2tzLCB0cmFuc2Zvcm1PcHRpb25zLCBpc1ZhbGlkQ29tbWFuZCwKICAgICAgICBkZWxlZ2F0ZUNvbW1hbmQ7CgogICAgcGx1Z2luT3B0aW9ucyA9IFsndXBsb2FkZXJUeXBlJ107CgogICAgaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgaWYgKG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyIHhmb3JtZWRPcHRzID0gdHJhbnNmb3JtT3B0aW9ucyhvcHRpb25zKTsKICAgICAgICAgICAgYWRkQ2FsbGJhY2tzKHhmb3JtZWRPcHRzKTsKCiAgICAgICAgICAgIGlmIChwbHVnaW5PcHRpb24oJ3VwbG9hZGVyVHlwZScpID09PSAnYmFzaWMnKSB7CiAgICAgICAgICAgICAgICB1cGxvYWRlcihuZXcgcXEuRmluZVVwbG9hZGVyQmFzaWMoeGZvcm1lZE9wdHMpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHVwbG9hZGVyKG5ldyBxcS5GaW5lVXBsb2FkZXIoeGZvcm1lZE9wdHMpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbDsKICAgIH07CgogICAgZGF0YVN0b3JlID0gZnVuY3Rpb24oa2V5LCB2YWwpIHsKICAgICAgICB2YXIgZGF0YSA9ICRlbC5kYXRhKCdmaW5ldXBsb2FkZXInKTsKCiAgICAgICAgaWYgKHZhbCkgewogICAgICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBkYXRhID0ge307CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGF0YVtrZXldID0gdmFsOwogICAgICAgICAgICAkZWwuZGF0YSgnZmluZXVwbG9hZGVyJywgZGF0YSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoZGF0YSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZGF0YVtrZXldOwogICAgICAgIH0KICAgIH07CgogICAgLy90aGUgdW5kZXJseWluZyBGaW5lIFVwbG9hZGVyIGluc3RhbmNlIGlzIHN0b3JlZCBpbiBqUXVlcnkncyBkYXRhIHN0b3JlZCwgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVtZW50CiAgICAvLyB0aWVkIHRvIHRoaXMgaW5zdGFuY2Ugb2YgdGhlIHBsdWctaW4KICAgIHVwbG9hZGVyID0gZnVuY3Rpb24oaW5zdGFuY2VUb1N0b3JlKSB7CiAgICAgICAgcmV0dXJuIGRhdGFTdG9yZSgndXBsb2FkZXInLCBpbnN0YW5jZVRvU3RvcmUpOwogICAgfTsKCiAgICBwbHVnaW5PcHRpb24gPSBmdW5jdGlvbihvcHRpb24sIG9wdGlvblZhbCkgewogICAgICAgIHJldHVybiBkYXRhU3RvcmUob3B0aW9uLCBvcHRpb25WYWwpOwogICAgfTsKCiAgICAvL2ltcGxlbWVudCBhbGwgY2FsbGJhY2tzIGRlZmluZWQgaW4gRmluZSBVcGxvYWRlciBhcyBmdW5jdGlvbnMgdGhhdCB0cmlnZ2VyIGFwcHJvcHJpYXRlbHkgbmFtZXMgZXZlbnRzIGFuZAogICAgLy8gcmV0dXJuIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBib3VuZCBoYW5kbGVyIGJhY2sgdG8gRmluZSBVcGxvYWRlcgogICAgYWRkQ2FsbGJhY2tzID0gZnVuY3Rpb24odHJhbnNmb3JtZWRPcHRzKSB7CiAgICAgICAgdmFyIGNhbGxiYWNrcyA9IHRyYW5zZm9ybWVkT3B0cy5jYWxsYmFja3MgPSB7fTsKCiAgICAgICAgJC5lYWNoKG5ldyBxcS5GaW5lVXBsb2FkZXJCYXNpYygpLl9vcHRpb25zLmNhbGxiYWNrcywgZnVuY3Rpb24ocHJvcCwgZnVuYykgewogICAgICAgICAgICB2YXIgbmFtZSwgJGNhbGxiYWNrRWw7CgogICAgICAgICAgICBuYW1lID0gL15vbihcdyspLy5leGVjKHByb3ApWzFdOwogICAgICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgMSkudG9Mb3dlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpOwogICAgICAgICAgICAkY2FsbGJhY2tFbCA9ICRlbDsKCiAgICAgICAgICAgIGNhbGxiYWNrc1twcm9wXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgcmV0dXJuICRjYWxsYmFja0VsLnRyaWdnZXJIYW5kbGVyKG5hbWUsIGFyZ3MpOwogICAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgfTsKCiAgICAvL3RyYW5zZm9ybSBqUXVlcnkgb2JqZWN0cyBpbnRvIEhUTUxFbGVtZW50cywgYW5kIHBhc3MgYWxvbmcgYWxsIG90aGVyIG9wdGlvbiBwcm9wZXJ0aWVzCiAgICB0cmFuc2Zvcm1PcHRpb25zID0gZnVuY3Rpb24oc291cmNlLCBkZXN0KSB7CiAgICAgICAgdmFyIHhmb3JtZWQsIGFycmF5VmFsczsKCiAgICAgICAgaWYgKGRlc3QgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBpZiAoc291cmNlLnVwbG9hZGVyVHlwZSAhPT0gJ2Jhc2ljJykgewogICAgICAgICAgICAgICAgeGZvcm1lZCA9IHsgZWxlbWVudCA6ICRlbFswXSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgeGZvcm1lZCA9IHt9OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB4Zm9ybWVkID0gZGVzdDsKICAgICAgICB9CgogICAgICAgICQuZWFjaChzb3VyY2UsIGZ1bmN0aW9uKHByb3AsIHZhbCkgewogICAgICAgICAgICBpZiAoJC5pbkFycmF5KHByb3AsIHBsdWdpbk9wdGlvbnMpID49IDApIHsKICAgICAgICAgICAgICAgIHBsdWdpbk9wdGlvbihwcm9wLCB2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHZhbCBpbnN0YW5jZW9mICQpIHsKICAgICAgICAgICAgICAgIHhmb3JtZWRbcHJvcF0gPSB2YWxbMF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoJC5pc1BsYWluT2JqZWN0KHZhbCkpIHsKICAgICAgICAgICAgICAgIHhmb3JtZWRbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9wdGlvbnModmFsLCB4Zm9ybWVkW3Byb3BdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICgkLmlzQXJyYXkodmFsKSkgewogICAgICAgICAgICAgICAgYXJyYXlWYWxzID0gW107CiAgICAgICAgICAgICAgICAkLmVhY2godmFsLCBmdW5jdGlvbihpZHgsIGFycmF5VmFsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5VmFsIGluc3RhbmNlb2YgJCkgewogICAgICAgICAgICAgICAgICAgICAgICAkLm1lcmdlKGFycmF5VmFscywgYXJyYXlWYWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWxzLnB1c2goYXJyYXlWYWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgeGZvcm1lZFtwcm9wXSA9IGFycmF5VmFsczsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHhmb3JtZWRbcHJvcF0gPSB2YWw7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKGRlc3QgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByZXR1cm4geGZvcm1lZDsKICAgICAgICB9CiAgICB9OwoKICAgIGlzVmFsaWRDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkgewogICAgICAgIHJldHVybiAkLnR5cGUoY29tbWFuZCkgPT09ICJzdHJpbmciICYmCiAgICAgICAgICAgICFjb21tYW5kLm1hdGNoKC9eXy8pICYmIC8vZW5mb3JjZSBwcml2YXRlIG1ldGhvZHMgY29udmVudGlvbgogICAgICAgICAgICB1cGxvYWRlcigpW2NvbW1hbmRdICE9PSB1bmRlZmluZWQ7CiAgICB9OwoKICAgIC8vYXNzdW1pbmcgd2UgaGF2ZSBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgdGhpcyBpcyBhIHZhbGlkIGNvbW1hbmQsIGNhbGwgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24gaW4gdGhlIHVuZGVybHlpbmcKICAgIC8vIEZpbmUgVXBsb2FkZXIgaW5zdGFuY2UgKHBhc3NpbmcgYWxvbmcgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxsZXIpIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBiYWNrIHRvIHRoZSBjYWxsZXIKICAgIGRlbGVnYXRlQ29tbWFuZCA9IGZ1bmN0aW9uKGNvbW1hbmQpIHsKICAgICAgICByZXR1cm4gdXBsb2FkZXIoKVtjb21tYW5kXS5hcHBseSh1cGxvYWRlcigpLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKTsKICAgIH07CgogICAgJC5mbi5maW5lVXBsb2FkZXIgPSBmdW5jdGlvbihvcHRpb25zT3JDb21tYW5kKSB7CiAgICAgICAgJGVsID0gdGhpczsKCiAgICAgICAgaWYgKHVwbG9hZGVyKCkgJiYgaXNWYWxpZENvbW1hbmQob3B0aW9uc09yQ29tbWFuZCkpIHsKICAgICAgICAgICAgcmV0dXJuIGRlbGVnYXRlQ29tbWFuZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uc09yQ29tbWFuZCA9PT0gJ29iamVjdCcgfHwgIW9wdGlvbnNPckNvbW1hbmQpIHsKICAgICAgICAgICAgcmV0dXJuIGluaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICQuZXJyb3IoJ01ldGhvZCAnICsgIG9wdGlvbnNPckNvbW1hbmQgKyAnIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5maW5lVXBsb2FkZXInKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0aGlzOwogICAgfTsKCn0oalF1ZXJ5KSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/jquery.fineuploader-3.0.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGh0dHA6Ly9naXRodWIuY29tL1ZhbHVtcy1GaWxlLVVwbG9hZGVyL2ZpbGUtdXBsb2FkZXIKICoKICogTXVsdGlwbGUgZmlsZSB1cGxvYWQgY29tcG9uZW50IHdpdGggcHJvZ3Jlc3MtYmFyLCBkcmFnLWFuZC1kcm9wLCBzdXBwb3J0IGZvciBhbGwgbW9kZXJuIGJyb3dzZXJzLgogKgogKiBPcmlnaW5hbCB2ZXJzaW9uOiAxLjAgwqkgMjAxMCBBbmRyZXcgVmFsdW1zICggYW5kcmV3KGF0KXZhbHVtcy5jb20gKQogKiBDdXJyZW50IE1haW50YWluZXIgKDIuMCspOiDCqSAyMDEyLCBSYXkgTmljaG9sdXMgKCBmaW5ldXBsb2FkZXIoYXQpZ2Fyc3Rhc2lvLmNvbSApCiAqCiAqIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlLCBHTlUgR1BMIDIgb3IgbGF0ZXIsIEdOVSBMR1BMIDIgb3IgbGF0ZXIsIHNlZSBsaWNlbnNlLnR4dC4KICovCgp2YXIgcXEgPSBxcSB8fCB7fTsKdmFyIHFxID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHJldHVybiB7CiAgICAgICAgaGlkZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgLyoqIFJldHVybnMgdGhlIGZ1bmN0aW9uIHdoaWNoIGRldGFjaGVzIGF0dGFjaGVkIGV2ZW50ICovCiAgICAgICAgYXR0YWNoOiBmdW5jdGlvbih0eXBlLCBmbikgewogICAgICAgICAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKXsKICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgZmFsc2UpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpewogICAgICAgICAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHFxKGVsZW1lbnQpLmRldGFjaCh0eXBlLCBmbik7CiAgICAgICAgICAgIH07CiAgICAgICAgfSwKCiAgICAgICAgZGV0YWNoOiBmdW5jdGlvbih0eXBlLCBmbikgewogICAgICAgICAgICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKXsKICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgZmFsc2UpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpewogICAgICAgICAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbihkZXNjZW5kYW50KSB7CiAgICAgICAgICAgIC8vIGNvbXBhcmVwb3NpdGlvbiByZXR1cm5zIGZhbHNlIGluIHRoaXMgY2FzZQogICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBkZXNjZW5kYW50KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGVsZW1lbnQuY29udGFpbnMpewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY29udGFpbnMoZGVzY2VuZGFudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gISEoZGVzY2VuZGFudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlbGVtZW50KSAmIDgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogSW5zZXJ0IHRoaXMgZWxlbWVudCBiZWZvcmUgZWxlbWVudEIuCiAgICAgICAgICovCiAgICAgICAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihlbGVtZW50QikgewogICAgICAgICAgICBlbGVtZW50Qi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBlbGVtZW50Qik7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyBzdHlsZXMgZm9yIGFuIGVsZW1lbnQuCiAgICAgICAgICogRml4ZXMgb3BhY2l0eSBpbiBJRTYtOC4KICAgICAgICAgKi8KICAgICAgICBjc3M6IGZ1bmN0aW9uKHN0eWxlcykgewogICAgICAgICAgICBpZiAoc3R5bGVzLm9wYWNpdHkgIT0gbnVsbCl7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQuc3R5bGUub3BhY2l0eSAhPSAnc3RyaW5nJyAmJiB0eXBlb2YoZWxlbWVudC5maWx0ZXJzKSAhPSAndW5kZWZpbmVkJyl7CiAgICAgICAgICAgICAgICAgICAgc3R5bGVzLmZpbHRlciA9ICdhbHBoYShvcGFjaXR5PScgKyBNYXRoLnJvdW5kKDEwMCAqIHN0eWxlcy5vcGFjaXR5KSArICcpJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBxcS5leHRlbmQoZWxlbWVudC5zdHlsZSwgc3R5bGVzKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJyhefCApJyArIG5hbWUgKyAnKCB8JCknKTsKICAgICAgICAgICAgcmV0dXJuIHJlLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpOwogICAgICAgIH0sCgogICAgICAgIGFkZENsYXNzOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIGlmICghcXEoZWxlbWVudCkuaGFzQ2xhc3MobmFtZSkpewogICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gJyAnICsgbmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICByZW1vdmVDbGFzczogZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCcoXnwgKScgKyBuYW1lICsgJyggfCQpJyk7CiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShyZSwgJyAnKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgIiIpOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBnZXRCeUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUpIHsKICAgICAgICAgICAgaWYgKGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCl7CiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuJyArIGNsYXNzTmFtZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZXMgPSBlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CiAgICAgICAgICAgIHZhciBsZW4gPSBjYW5kaWRhdGVzLmxlbmd0aDsKCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspewogICAgICAgICAgICAgICAgaWYgKHFxKGNhbmRpZGF0ZXNbaV0pLmhhc0NsYXNzKGNsYXNzTmFtZSkpewogICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNhbmRpZGF0ZXNbaV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKCiAgICAgICAgY2hpbGRyZW46IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBbXSwKICAgICAgICAgICAgICAgIGNoaWxkID0gZWxlbWVudC5maXJzdENoaWxkOwoKICAgICAgICAgICAgd2hpbGUgKGNoaWxkKXsKICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PSAxKXsKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQubmV4dFNpYmxpbmc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbjsKICAgICAgICB9LAoKICAgICAgICBzZXRUZXh0OiBmdW5jdGlvbih0ZXh0KSB7CiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ID0gdGV4dDsKICAgICAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGNsZWFyVGV4dDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBxcShlbGVtZW50KS5zZXRUZXh0KCIiKTsKICAgICAgICB9CiAgICB9Owp9OwoKcXEubG9nID0gZnVuY3Rpb24obWVzc2FnZSwgbGV2ZWwpIHsKICAgIGlmICh3aW5kb3cuY29uc29sZSkgewogICAgICAgIGlmICghbGV2ZWwgfHwgbGV2ZWwgPT09ICdpbmZvJykgewogICAgICAgICAgICB3aW5kb3cuY29uc29sZS5sb2cobWVzc2FnZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGlmICh3aW5kb3cuY29uc29sZVtsZXZlbF0pIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlW2xldmVsXShtZXNzYWdlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZygnPCcgKyBsZXZlbCArICc+ICcgKyBtZXNzYWdlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfTsKCnFxLmlzT2JqZWN0ID0gZnVuY3Rpb24odmFyaWFibGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHJldHVybiB2YXJpYWJsZSAhPT0gbnVsbCAmJiB2YXJpYWJsZSAmJiB0eXBlb2YodmFyaWFibGUpID09PSAib2JqZWN0IiAmJiB2YXJpYWJsZS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0Owp9OwoKcXEuZXh0ZW5kID0gZnVuY3Rpb24gKGZpcnN0LCBzZWNvbmQsIGV4dGVuZE5lc3RlZCkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIHByb3A7CiAgICBmb3IgKHByb3AgaW4gc2Vjb25kKSB7CiAgICAgICAgaWYgKHNlY29uZC5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgewogICAgICAgICAgICBpZiAoZXh0ZW5kTmVzdGVkICYmIHFxLmlzT2JqZWN0KHNlY29uZFtwcm9wXSkpIHsKICAgICAgICAgICAgICAgIGlmIChmaXJzdFtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgZmlyc3RbcHJvcF0gPSB7fTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHFxLmV4dGVuZChmaXJzdFtwcm9wXSwgc2Vjb25kW3Byb3BdLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZpcnN0W3Byb3BdID0gc2Vjb25kW3Byb3BdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIFNlYXJjaGVzIGZvciBhIGdpdmVuIGVsZW1lbnQgaW4gdGhlIGFycmF5LCByZXR1cm5zIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LgogKiBAcGFyYW0ge051bWJlcn0gW2Zyb21dIFRoZSBpbmRleCBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCiAqLwpxcS5pbmRleE9mID0gZnVuY3Rpb24oYXJyLCBlbHQsIGZyb20pewogICAgaWYgKGFyci5pbmRleE9mKSByZXR1cm4gYXJyLmluZGV4T2YoZWx0LCBmcm9tKTsKCiAgICBmcm9tID0gZnJvbSB8fCAwOwogICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7CgogICAgaWYgKGZyb20gPCAwKSBmcm9tICs9IGxlbjsKCiAgICBmb3IgKDsgZnJvbSA8IGxlbjsgZnJvbSsrKXsKICAgICAgICBpZiAoZnJvbSBpbiBhcnIgJiYgYXJyW2Zyb21dID09PSBlbHQpewogICAgICAgICAgICByZXR1cm4gZnJvbTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7Cn07CgpxcS5nZXRVbmlxdWVJZCA9IChmdW5jdGlvbigpewogICAgdmFyIGlkID0gMDsKICAgIHJldHVybiBmdW5jdGlvbigpeyByZXR1cm4gaWQrKzsgfTsKfSkoKTsKCi8vCi8vIEJyb3dzZXJzIGFuZCBwbGF0Zm9ybXMgZGV0ZWN0aW9uCgpxcS5pZSAgICAgICA9IGZ1bmN0aW9uKCl7IHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUnKSAhPSAtMTsgfQpxcS5pZTEwICAgICA9IGZ1bmN0aW9uKCl7IHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ01TSUUgMTAnKSAhPSAtMTsgfQpxcS5zYWZhcmkgICA9IGZ1bmN0aW9uKCl7IHJldHVybiBuYXZpZ2F0b3IudmVuZG9yICE9IHVuZGVmaW5lZCAmJiBuYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkFwcGxlIikgIT0gLTE7IH0KcXEuY2hyb21lICAgPSBmdW5jdGlvbigpeyByZXR1cm4gbmF2aWdhdG9yLnZlbmRvciAhPSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnZlbmRvci5pbmRleE9mKCdHb29nbGUnKSAhPSAtMTsgfQpxcS5maXJlZm94ICA9IGZ1bmN0aW9uKCl7IHJldHVybiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNb3ppbGxhJykgIT0gLTEgJiYgbmF2aWdhdG9yLnZlbmRvciAhPSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnZlbmRvciA9PSAnJyk7IH0KcXEud2luZG93cyAgPSBmdW5jdGlvbigpeyByZXR1cm4gbmF2aWdhdG9yLnBsYXRmb3JtID09ICJXaW4zMiI7IH0KCi8vCi8vIEV2ZW50cwoKcXEucHJldmVudERlZmF1bHQgPSBmdW5jdGlvbihlKXsKICAgIGlmIChlLnByZXZlbnREZWZhdWx0KXsKICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB9IGVsc2V7CiAgICAgICAgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOwogICAgfQp9OwoKLyoqCiAqIENyZWF0ZXMgYW5kIHJldHVybnMgZWxlbWVudCBmcm9tIGh0bWwgc3RyaW5nCiAqIFVzZXMgaW5uZXJIVE1MIHRvIGNyZWF0ZSBhbiBlbGVtZW50CiAqLwpxcS50b0VsZW1lbnQgPSAoZnVuY3Rpb24oKXsKICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgIHJldHVybiBmdW5jdGlvbihodG1sKXsKICAgICAgICBkaXYuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICB2YXIgZWxlbWVudCA9IGRpdi5maXJzdENoaWxkOwogICAgICAgIGRpdi5yZW1vdmVDaGlsZChlbGVtZW50KTsKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH07Cn0pKCk7CgovKioKICogb2JqMnVybCgpIHRha2VzIGEganNvbi1vYmplY3QgYXMgYXJndW1lbnQgYW5kIGdlbmVyYXRlcwogKiBhIHF1ZXJ5c3RyaW5nLiBwcmV0dHkgbXVjaCBsaWtlIGpRdWVyeS5wYXJhbSgpCiAqCiAqIGhvdyB0byB1c2U6CiAqCiAqICAgIGBxcS5vYmoydXJsKHthOidiJyxjOidkJ30sJ2h0dHA6Ly9hbnkudXJsL3VwbG9hZD9vdGhlclBhcmFtPXZhbHVlJyk7YAogKgogKiB3aWxsIHJlc3VsdCBpbjoKICoKICogICAgYGh0dHA6Ly9hbnkudXJsL3VwbG9hZD9vdGhlclBhcmFtPXZhbHVlJmE9YiZjPWRgCiAqCiAqIEBwYXJhbSAgT2JqZWN0IEpTT04tT2JqZWN0CiAqIEBwYXJhbSAgU3RyaW5nIGN1cnJlbnQgcXVlcnlzdHJpbmctcGFydAogKiBAcmV0dXJuIFN0cmluZyBlbmNvZGVkIHF1ZXJ5c3RyaW5nCiAqLwpxcS5vYmoydXJsID0gZnVuY3Rpb24ob2JqLCB0ZW1wLCBwcmVmaXhEb25lKXsKICAgIHZhciB1cmlzdHJpbmdzID0gW10sCiAgICAgICAgcHJlZml4ID0gJyYnLAogICAgICAgIGFkZCA9IGZ1bmN0aW9uKG5leHRPYmosIGkpewogICAgICAgICAgICB2YXIgbmV4dFRlbXAgPSB0ZW1wCiAgICAgICAgICAgICAgICA/ICgvXFtcXSQvLnRlc3QodGVtcCkpIC8vIHByZXZlbnQgZG91YmxlLWVuY29kaW5nCiAgICAgICAgICAgICAgICA/IHRlbXAKICAgICAgICAgICAgICAgIDogdGVtcCsnWycraSsnXScKICAgICAgICAgICAgICAgIDogaTsKICAgICAgICAgICAgaWYgKChuZXh0VGVtcCAhPSAndW5kZWZpbmVkJykgJiYgKGkgIT0gJ3VuZGVmaW5lZCcpKSB7CiAgICAgICAgICAgICAgICB1cmlzdHJpbmdzLnB1c2goCiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBuZXh0T2JqID09PSAnb2JqZWN0JykKICAgICAgICAgICAgICAgICAgICAgICAgPyBxcS5vYmoydXJsKG5leHRPYmosIG5leHRUZW1wLCB0cnVlKQogICAgICAgICAgICAgICAgICAgICAgICA6IChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV4dE9iaikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXScpCiAgICAgICAgICAgICAgICAgICAgICAgID8gZW5jb2RlVVJJQ29tcG9uZW50KG5leHRUZW1wKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChuZXh0T2JqKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIDogZW5jb2RlVVJJQ29tcG9uZW50KG5leHRUZW1wKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChuZXh0T2JqKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgaWYgKCFwcmVmaXhEb25lICYmIHRlbXApIHsKICAgICAgICBwcmVmaXggPSAoL1w/Ly50ZXN0KHRlbXApKSA/ICgvXD8kLy50ZXN0KHRlbXApKSA/ICcnIDogJyYnIDogJz8nOwogICAgICAgIHVyaXN0cmluZ3MucHVzaCh0ZW1wKTsKICAgICAgICB1cmlzdHJpbmdzLnB1c2gocXEub2JqMnVybChvYmopKTsKICAgIH0gZWxzZSBpZiAoKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBBcnJheV0nKSAmJiAodHlwZW9mIG9iaiAhPSAndW5kZWZpbmVkJykgKSB7CiAgICAgICAgLy8gd2Ugd29udCB1c2UgYSBmb3ItaW4tbG9vcCBvbiBhbiBhcnJheSAocGVyZm9ybWFuY2UpCiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47ICsraSl7CiAgICAgICAgICAgIGFkZChvYmpbaV0sIGkpOwogICAgICAgIH0KICAgIH0gZWxzZSBpZiAoKHR5cGVvZiBvYmogIT0gJ3VuZGVmaW5lZCcpICYmIChvYmogIT09IG51bGwpICYmICh0eXBlb2Ygb2JqID09PSAib2JqZWN0IikpewogICAgICAgIC8vIGZvciBhbnl0aGluZyBlbHNlIGJ1dCBhIHNjYWxhciwgd2Ugd2lsbCB1c2UgZm9yLWluLWxvb3AKICAgICAgICBmb3IgKHZhciBpIGluIG9iail7CiAgICAgICAgICAgIGFkZChvYmpbaV0sIGkpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdXJpc3RyaW5ncy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudCh0ZW1wKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChvYmopKTsKICAgIH0KCiAgICBpZiAodGVtcCkgewogICAgICAgIHJldHVybiB1cmlzdHJpbmdzLmpvaW4ocHJlZml4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHVyaXN0cmluZ3Muam9pbihwcmVmaXgpCiAgICAgICAgICAgIC5yZXBsYWNlKC9eJi8sICcnKQogICAgICAgICAgICAucmVwbGFjZSgvJTIwL2csICcrJyk7CiAgICB9Cn07CgovKioKICogQSBnZW5lcmljIG1vZHVsZSB3aGljaCBzdXBwb3J0cyBvYmplY3QgZGlzcG9zaW5nIGluIGRpc3Bvc2UoKSBtZXRob2QuCiAqICovCnFxLkRpc3Bvc2VTdXBwb3J0ID0gewogICAgX2Rpc3Bvc2VyczogW10sCgogICAgLyoqIFJ1biBhbGwgcmVnaXN0ZXJlZCBkaXNwb3NlcnMgKi8KICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkaXNwb3NlcjsKICAgICAgICB3aGlsZSAoZGlzcG9zZXIgPSB0aGlzLl9kaXNwb3NlcnMuc2hpZnQoKSkgewogICAgICAgICAgICBkaXNwb3NlcigpOwogICAgICAgIH0KICAgIH0sCgogICAgLyoqIEFkZCBkaXNwb3NlciB0byB0aGUgY29sbGVjdGlvbiAqLwogICAgYWRkRGlzcG9zZXI6IGZ1bmN0aW9uKGRpc3Bvc2VGdW5jdGlvbikgewogICAgICAgIHRoaXMuX2Rpc3Bvc2Vycy5wdXNoKGRpc3Bvc2VGdW5jdGlvbik7CiAgICB9LAoKICAgIC8qKiBBdHRhY2ggZXZlbnQgaGFuZGxlciBhbmQgcmVnaXN0ZXIgZGUtYXR0YWNoZXIgYXMgYSBkaXNwb3NlciAqLwogICAgX2F0dGFjaDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5hZGREaXNwb3NlcihxcShhcmd1bWVudHNbMF0pLmF0dGFjaC5hcHBseSh0aGlzLCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpKSk7CiAgICB9Cn07CnFxLlVwbG9hZEJ1dHRvbiA9IGZ1bmN0aW9uKG8pewogICAgdGhpcy5fb3B0aW9ucyA9IHsKICAgICAgICBlbGVtZW50OiBudWxsLAogICAgICAgIC8vIGlmIHNldCB0byB0cnVlIGFkZHMgbXVsdGlwbGUgYXR0cmlidXRlIHRvIGZpbGUgaW5wdXQKICAgICAgICBtdWx0aXBsZTogZmFsc2UsCiAgICAgICAgYWNjZXB0RmlsZXM6IG51bGwsCiAgICAgICAgLy8gbmFtZSBhdHRyaWJ1dGUgb2YgZmlsZSBpbnB1dAogICAgICAgIG5hbWU6ICdmaWxlJywKICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24oaW5wdXQpe30sCiAgICAgICAgaG92ZXJDbGFzczogJ3FxLXVwbG9hZC1idXR0b24taG92ZXInLAogICAgICAgIGZvY3VzQ2xhc3M6ICdxcS11cGxvYWQtYnV0dG9uLWZvY3VzJwogICAgfTsKCiAgICBxcS5leHRlbmQodGhpcy5fb3B0aW9ucywgbyk7CiAgICBxcS5leHRlbmQodGhpcywgcXEuRGlzcG9zZVN1cHBvcnQpOwoKICAgIHRoaXMuX2VsZW1lbnQgPSB0aGlzLl9vcHRpb25zLmVsZW1lbnQ7CgogICAgLy8gbWFrZSBidXR0b24gc3VpdGFibGUgY29udGFpbmVyIGZvciBpbnB1dAogICAgcXEodGhpcy5fZWxlbWVudCkuY3NzKHsKICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJywKICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsCiAgICAgICAgLy8gTWFrZSBzdXJlIGJyb3dzZSBidXR0b24gaXMgaW4gdGhlIHJpZ2h0IHNpZGUKICAgICAgICAvLyBpbiBJbnRlcm5ldCBFeHBsb3JlcgogICAgICAgIGRpcmVjdGlvbjogJ2x0cicKICAgIH0pOwoKICAgIHRoaXMuX2lucHV0ID0gdGhpcy5fY3JlYXRlSW5wdXQoKTsKfTsKCnFxLlVwbG9hZEJ1dHRvbi5wcm90b3R5cGUgPSB7CiAgICAvKiByZXR1cm5zIGZpbGUgaW5wdXQgZWxlbWVudCAqLwogICAgZ2V0SW5wdXQ6IGZ1bmN0aW9uKCl7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lucHV0OwogICAgfSwKICAgIC8qIGNsZWFucy9yZWNyZWF0ZXMgdGhlIGZpbGUgaW5wdXQgKi8KICAgIHJlc2V0OiBmdW5jdGlvbigpewogICAgICAgIGlmICh0aGlzLl9pbnB1dC5wYXJlbnROb2RlKXsKICAgICAgICAgICAgcXEodGhpcy5faW5wdXQpLnJlbW92ZSgpOwogICAgICAgIH0KCiAgICAgICAgcXEodGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3ModGhpcy5fb3B0aW9ucy5mb2N1c0NsYXNzKTsKICAgICAgICB0aGlzLl9pbnB1dCA9IHRoaXMuX2NyZWF0ZUlucHV0KCk7CiAgICB9LAogICAgX2NyZWF0ZUlucHV0OiBmdW5jdGlvbigpewogICAgICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CgogICAgICAgIGlmICh0aGlzLl9vcHRpb25zLm11bHRpcGxlKXsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJtdWx0aXBsZSIsICJtdWx0aXBsZSIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYWNjZXB0RmlsZXMpIGlucHV0LnNldEF0dHJpYnV0ZSgiYWNjZXB0IiwgdGhpcy5fb3B0aW9ucy5hY2NlcHRGaWxlcyk7CgogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgidHlwZSIsICJmaWxlIik7CiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCJuYW1lIiwgdGhpcy5fb3B0aW9ucy5uYW1lKTsKCiAgICAgICAgcXEoaW5wdXQpLmNzcyh7CiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLAogICAgICAgICAgICAvLyBpbiBPcGVyYSBvbmx5ICdicm93c2UnIGJ1dHRvbgogICAgICAgICAgICAvLyBpcyBjbGlja2FibGUgYW5kIGl0IGlzIGxvY2F0ZWQgYXQKICAgICAgICAgICAgLy8gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGlucHV0CiAgICAgICAgICAgIHJpZ2h0OiAwLAogICAgICAgICAgICB0b3A6IDAsCiAgICAgICAgICAgIGZvbnRGYW1pbHk6ICdBcmlhbCcsCiAgICAgICAgICAgIC8vIDQgcGVyc29ucyByZXBvcnRlZCB0aGlzLCB0aGUgbWF4IHZhbHVlcyB0aGF0IHdvcmtlZCBmb3IgdGhlbSB3ZXJlIDI0MywgMjM2LCAyMzYsIDExOAogICAgICAgICAgICBmb250U2l6ZTogJzExOHB4JywKICAgICAgICAgICAgbWFyZ2luOiAwLAogICAgICAgICAgICBwYWRkaW5nOiAwLAogICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJywKICAgICAgICAgICAgb3BhY2l0eTogMAogICAgICAgIH0pOwoKICAgICAgICB0aGlzLl9lbGVtZW50LmFwcGVuZENoaWxkKGlucHV0KTsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHRoaXMuX2F0dGFjaChpbnB1dCwgJ2NoYW5nZScsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHNlbGYuX29wdGlvbnMub25DaGFuZ2UoaW5wdXQpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLl9hdHRhY2goaW5wdXQsICdtb3VzZW92ZXInLCBmdW5jdGlvbigpewogICAgICAgICAgICBxcShzZWxmLl9lbGVtZW50KS5hZGRDbGFzcyhzZWxmLl9vcHRpb25zLmhvdmVyQ2xhc3MpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMuX2F0dGFjaChpbnB1dCwgJ21vdXNlb3V0JywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgcXEoc2VsZi5fZWxlbWVudCkucmVtb3ZlQ2xhc3Moc2VsZi5fb3B0aW9ucy5ob3ZlckNsYXNzKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9hdHRhY2goaW5wdXQsICdmb2N1cycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHFxKHNlbGYuX2VsZW1lbnQpLmFkZENsYXNzKHNlbGYuX29wdGlvbnMuZm9jdXNDbGFzcyk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fYXR0YWNoKGlucHV0LCAnYmx1cicsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHFxKHNlbGYuX2VsZW1lbnQpLnJlbW92ZUNsYXNzKHNlbGYuX29wdGlvbnMuZm9jdXNDbGFzcyk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIElFIGFuZCBPcGVyYSwgdW5mb3J0dW5hdGVseSBoYXZlIDIgdGFiIHN0b3BzIG9uIGZpbGUgaW5wdXQKICAgICAgICAvLyB3aGljaCBpcyB1bmFjY2VwdGFibGUgaW4gb3VyIGNhc2UsIGRpc2FibGUga2V5Ym9hcmQgYWNjZXNzCiAgICAgICAgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCl7CiAgICAgICAgICAgIC8vIGl0IGlzIElFIG9yIE9wZXJhCiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndGFiSW5kZXgnLCAiLTEiKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KfTsKcXEuRmluZVVwbG9hZGVyQmFzaWMgPSBmdW5jdGlvbihvKXsKICAgIHZhciB0aGF0ID0gdGhpczsKICAgIHRoaXMuX29wdGlvbnMgPSB7CiAgICAgICAgZGVidWc6IGZhbHNlLAogICAgICAgIGJ1dHRvbjogbnVsbCwKICAgICAgICBtdWx0aXBsZTogdHJ1ZSwKICAgICAgICBtYXhDb25uZWN0aW9uczogMywKICAgICAgICBkaXNhYmxlQ2FuY2VsRm9yRm9ybVVwbG9hZHM6IGZhbHNlLAogICAgICAgIGF1dG9VcGxvYWQ6IHRydWUsCiAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICBlbmRwb2ludDogJy9zZXJ2ZXIvdXBsb2FkJywKICAgICAgICAgICAgcGFyYW1zOiB7fSwKICAgICAgICAgICAgY3VzdG9tSGVhZGVyczoge30sCiAgICAgICAgICAgIGZvcmNlTXVsdGlwYXJ0OiBmYWxzZSwKICAgICAgICAgICAgaW5wdXROYW1lOiAncXFmaWxlJwogICAgICAgIH0sCiAgICAgICAgdmFsaWRhdGlvbjogewogICAgICAgICAgICBhbGxvd2VkRXh0ZW5zaW9uczogW10sCiAgICAgICAgICAgIHNpemVMaW1pdDogMCwKICAgICAgICAgICAgbWluU2l6ZUxpbWl0OiAwLAogICAgICAgICAgICBzdG9wT25GaXJzdEludmFsaWRGaWxlOiB0cnVlCiAgICAgICAgfSwKICAgICAgICBjYWxsYmFja3M6IHsKICAgICAgICAgICAgb25TdWJtaXQ6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSl7fSwgLy8gcmV0dXJuIGZhbHNlIHRvIGNhbmNlbCBzdWJtaXQKICAgICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCByZXNwb25zZUpTT04pe30sCiAgICAgICAgICAgIG9uQ2FuY2VsOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpe30sCiAgICAgICAgICAgIG9uVXBsb2FkOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIHhocil7fSwKICAgICAgICAgICAgb25Qcm9ncmVzczogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCBsb2FkZWQsIHRvdGFsKXt9LAogICAgICAgICAgICBvbkVycm9yOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIHJlYXNvbikge30sCiAgICAgICAgICAgIG9uQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIGF0dGVtcHROdW1iZXIpIHt9LAogICAgICAgICAgICBvbk1hbnVhbFJldHJ5OiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpIHt9LAogICAgICAgICAgICBvblZhbGlkYXRlOiBmdW5jdGlvbihmaWxlRGF0YSkge30gLy8gcmV0dXJuIGZhbHNlIHRvIHByZXZlbnQgdXBsb2FkCiAgICAgICAgfSwKICAgICAgICBtZXNzYWdlczogewogICAgICAgICAgICB0eXBlRXJyb3I6ICJ7ZmlsZX0gaGFzIGFuIGludmFsaWQgZXh0ZW5zaW9uLiBWYWxpZCBleHRlbnNpb24ocyk6IHtleHRlbnNpb25zfS4iLAogICAgICAgICAgICBzaXplRXJyb3I6ICJ7ZmlsZX0gaXMgdG9vIGxhcmdlLCBtYXhpbXVtIGZpbGUgc2l6ZSBpcyB7c2l6ZUxpbWl0fS4iLAogICAgICAgICAgICBtaW5TaXplRXJyb3I6ICJ7ZmlsZX0gaXMgdG9vIHNtYWxsLCBtaW5pbXVtIGZpbGUgc2l6ZSBpcyB7bWluU2l6ZUxpbWl0fS4iLAogICAgICAgICAgICBlbXB0eUVycm9yOiAie2ZpbGV9IGlzIGVtcHR5LCBwbGVhc2Ugc2VsZWN0IGZpbGVzIGFnYWluIHdpdGhvdXQgaXQuIiwKICAgICAgICAgICAgbm9GaWxlc0Vycm9yOiAiTm8gZmlsZXMgdG8gdXBsb2FkLiIsCiAgICAgICAgICAgIG9uTGVhdmU6ICJUaGUgZmlsZXMgYXJlIGJlaW5nIHVwbG9hZGVkLCBpZiB5b3UgbGVhdmUgbm93IHRoZSB1cGxvYWQgd2lsbCBiZSBjYW5jZWxsZWQuIgogICAgICAgIH0sCiAgICAgICAgcmV0cnk6IHsKICAgICAgICAgICAgZW5hYmxlQXV0bzogZmFsc2UsCiAgICAgICAgICAgIG1heEF1dG9BdHRlbXB0czogMywKICAgICAgICAgICAgYXV0b0F0dGVtcHREZWxheTogNSwKICAgICAgICAgICAgcHJldmVudFJldHJ5UmVzcG9uc2VQcm9wZXJ0eTogJ3ByZXZlbnRSZXRyeScKICAgICAgICB9CiAgICB9OwoKICAgIHFxLmV4dGVuZCh0aGlzLl9vcHRpb25zLCBvLCB0cnVlKTsKICAgIHRoaXMuX3dyYXBDYWxsYmFja3MoKTsKICAgIHFxLmV4dGVuZCh0aGlzLCBxcS5EaXNwb3NlU3VwcG9ydCk7CgogICAgLy8gbnVtYmVyIG9mIGZpbGVzIGJlaW5nIHVwbG9hZGVkCiAgICB0aGlzLl9maWxlc0luUHJvZ3Jlc3MgPSAwOwoKICAgIHRoaXMuX3N0b3JlZEZpbGVJZHMgPSBbXTsKCiAgICB0aGlzLl9hdXRvUmV0cmllcyA9IFtdOwogICAgdGhpcy5fcmV0cnlUaW1lb3V0cyA9IFtdOwogICAgdGhpcy5fcHJldmVudFJldHJpZXMgPSBbXTsKCiAgICB0aGlzLl9oYW5kbGVyID0gdGhpcy5fY3JlYXRlVXBsb2FkSGFuZGxlcigpOwoKICAgIGlmICh0aGlzLl9vcHRpb25zLmJ1dHRvbil7CiAgICAgICAgdGhpcy5fYnV0dG9uID0gdGhpcy5fY3JlYXRlVXBsb2FkQnV0dG9uKHRoaXMuX29wdGlvbnMuYnV0dG9uKTsKICAgIH0KCiAgICB0aGlzLl9wcmV2ZW50TGVhdmVJblByb2dyZXNzKCk7Cn07CgpxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUgPSB7CiAgICBsb2c6IGZ1bmN0aW9uKHN0ciwgbGV2ZWwpIHsKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5kZWJ1ZyAmJiAoIWxldmVsIHx8IGxldmVsID09PSAnaW5mbycpKSB7CiAgICAgICAgICAgIHFxLmxvZygnW0ZpbmVVcGxvYWRlcl0gJyArIHN0cik7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGxldmVsICYmIGxldmVsICE9PSAnaW5mbycpIHsKICAgICAgICAgICAgcXEubG9nKCdbRmluZVVwbG9hZGVyXSAnICsgc3RyLCBsZXZlbCk7CgogICAgICAgIH0KICAgIH0sCiAgICBzZXRQYXJhbXM6IGZ1bmN0aW9uKHBhcmFtcyl7CiAgICAgICAgdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnBhcmFtcyA9IHBhcmFtczsKICAgIH0sCiAgICBnZXRJblByb2dyZXNzOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiB0aGlzLl9maWxlc0luUHJvZ3Jlc3M7CiAgICB9LAogICAgdXBsb2FkU3RvcmVkRmlsZXM6IGZ1bmN0aW9uKCl7CiAgICAgICAgInVzZSBzdHJpY3QiOwogICAgICAgIHdoaWxlKHRoaXMuX3N0b3JlZEZpbGVJZHMubGVuZ3RoKSB7CiAgICAgICAgICAgIHRoaXMuX2ZpbGVzSW5Qcm9ncmVzcysrOwogICAgICAgICAgICB0aGlzLl9oYW5kbGVyLnVwbG9hZCh0aGlzLl9zdG9yZWRGaWxlSWRzLnNoaWZ0KCksIHRoaXMuX29wdGlvbnMucmVxdWVzdC5wYXJhbXMpOwogICAgICAgIH0KICAgIH0sCiAgICBjbGVhclN0b3JlZEZpbGVzOiBmdW5jdGlvbigpewogICAgICAgIHRoaXMuX3N0b3JlZEZpbGVJZHMgPSBbXTsKICAgIH0sCiAgICByZXRyeTogZnVuY3Rpb24oaWQpIHsKICAgICAgICBpZiAodGhpcy5fb25CZWZvcmVNYW51YWxSZXRyeShpZCkpIHsKICAgICAgICAgICAgdGhpcy5faGFuZGxlci5yZXRyeShpZCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0sCiAgICBjYW5jZWw6IGZ1bmN0aW9uKGZpbGVJZCkgewogICAgICAgIHRoaXMuX2hhbmRsZXIuY2FuY2VsKGZpbGVJZCk7CiAgICB9LAogICAgcmVzZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMubG9nKCJSZXNldHRpbmcgdXBsb2FkZXIuLi4iKTsKICAgICAgICB0aGlzLl9oYW5kbGVyLnJlc2V0KCk7CiAgICAgICAgdGhpcy5fZmlsZXNJblByb2dyZXNzID0gMDsKICAgICAgICB0aGlzLl9zdG9yZWRGaWxlSWRzID0gW107CiAgICAgICAgdGhpcy5fYXV0b1JldHJpZXMgPSBbXTsKICAgICAgICB0aGlzLl9yZXRyeVRpbWVvdXRzID0gW107CiAgICAgICAgdGhpcy5fcHJldmVudFJldHJpZXMgPSBbXTsKICAgICAgICB0aGlzLl9idXR0b24ucmVzZXQoKTsKICAgIH0sCiAgICBfY3JlYXRlVXBsb2FkQnV0dG9uOiBmdW5jdGlvbihlbGVtZW50KXsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIHZhciBidXR0b24gPSBuZXcgcXEuVXBsb2FkQnV0dG9uKHsKICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCwKICAgICAgICAgICAgbXVsdGlwbGU6IHRoaXMuX29wdGlvbnMubXVsdGlwbGUgJiYgcXEuVXBsb2FkSGFuZGxlclhoci5pc1N1cHBvcnRlZCgpLAogICAgICAgICAgICBhY2NlcHRGaWxlczogdGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLmFjY2VwdEZpbGVzLAogICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24oaW5wdXQpewogICAgICAgICAgICAgICAgc2VsZi5fb25JbnB1dENoYW5nZShpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5hZGREaXNwb3NlcihmdW5jdGlvbigpIHsgYnV0dG9uLmRpc3Bvc2UoKTsgfSk7CiAgICAgICAgcmV0dXJuIGJ1dHRvbjsKICAgIH0sCiAgICBfY3JlYXRlVXBsb2FkSGFuZGxlcjogZnVuY3Rpb24oKXsKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgIGhhbmRsZXJDbGFzczsKCiAgICAgICAgaWYocXEuVXBsb2FkSGFuZGxlclhoci5pc1N1cHBvcnRlZCgpKXsKICAgICAgICAgICAgaGFuZGxlckNsYXNzID0gJ1VwbG9hZEhhbmRsZXJYaHInOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGhhbmRsZXJDbGFzcyA9ICdVcGxvYWRIYW5kbGVyRm9ybSc7CiAgICAgICAgfQoKICAgICAgICB2YXIgaGFuZGxlciA9IG5ldyBxcVtoYW5kbGVyQ2xhc3NdKHsKICAgICAgICAgICAgZGVidWc6IHRoaXMuX29wdGlvbnMuZGVidWcsCiAgICAgICAgICAgIGVuZHBvaW50OiB0aGlzLl9vcHRpb25zLnJlcXVlc3QuZW5kcG9pbnQsCiAgICAgICAgICAgIGZvcmNlTXVsdGlwYXJ0OiB0aGlzLl9vcHRpb25zLnJlcXVlc3QuZm9yY2VNdWx0aXBhcnQsCiAgICAgICAgICAgIG1heENvbm5lY3Rpb25zOiB0aGlzLl9vcHRpb25zLm1heENvbm5lY3Rpb25zLAogICAgICAgICAgICBjdXN0b21IZWFkZXJzOiB0aGlzLl9vcHRpb25zLnJlcXVlc3QuY3VzdG9tSGVhZGVycywKICAgICAgICAgICAgaW5wdXROYW1lOiB0aGlzLl9vcHRpb25zLnJlcXVlc3QuaW5wdXROYW1lLAogICAgICAgICAgICBkZW1vTW9kZTogdGhpcy5fb3B0aW9ucy5kZW1vTW9kZSwKICAgICAgICAgICAgbG9nOiB0aGlzLmxvZywKICAgICAgICAgICAgb25Qcm9ncmVzczogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCBsb2FkZWQsIHRvdGFsKXsKICAgICAgICAgICAgICAgIHNlbGYuX29uUHJvZ3Jlc3MoaWQsIGZpbGVOYW1lLCBsb2FkZWQsIHRvdGFsKTsKICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuY2FsbGJhY2tzLm9uUHJvZ3Jlc3MoaWQsIGZpbGVOYW1lLCBsb2FkZWQsIHRvdGFsKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25Db21wbGV0ZTogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCByZXN1bHQsIHhocil7CiAgICAgICAgICAgICAgICBzZWxmLl9vbkNvbXBsZXRlKGlkLCBmaWxlTmFtZSwgcmVzdWx0LCB4aHIpOwogICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5jYWxsYmFja3Mub25Db21wbGV0ZShpZCwgZmlsZU5hbWUsIHJlc3VsdCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uQ2FuY2VsOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpewogICAgICAgICAgICAgICAgc2VsZi5fb25DYW5jZWwoaWQsIGZpbGVOYW1lKTsKICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuY2FsbGJhY2tzLm9uQ2FuY2VsKGlkLCBmaWxlTmFtZSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uVXBsb2FkOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIHhocil7CiAgICAgICAgICAgICAgICBzZWxmLl9vblVwbG9hZChpZCwgZmlsZU5hbWUsIHhocik7CiAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNhbGxiYWNrcy5vblVwbG9hZChpZCwgZmlsZU5hbWUsIHhocik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIHJlc3BvbnNlSlNPTiwgeGhyKSB7CiAgICAgICAgICAgICAgICBzZWxmLl9wcmV2ZW50UmV0cmllc1tpZF0gPSByZXNwb25zZUpTT05bc2VsZi5fb3B0aW9ucy5yZXRyeS5wcmV2ZW50UmV0cnlSZXNwb25zZVByb3BlcnR5XTsKCiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fc2hvdWxkQXV0b1JldHJ5KGlkLCBmaWxlTmFtZSwgcmVzcG9uc2VKU09OKSkgewogICAgICAgICAgICAgICAgICAgIHNlbGYuX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3IoaWQsIGZpbGVOYW1lLCByZXNwb25zZUpTT04sIHhocik7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5jYWxsYmFja3Mub25BdXRvUmV0cnkoaWQsIGZpbGVOYW1lLCBzZWxmLl9hdXRvUmV0cmllc1tpZF0gKyAxKTsKICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbkJlZm9yZUF1dG9SZXRyeShpZCwgZmlsZU5hbWUpOwoKICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZXRyeVRpbWVvdXRzW2lkXSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29uQXV0b1JldHJ5KGlkLCBmaWxlTmFtZSwgcmVzcG9uc2VKU09OKQogICAgICAgICAgICAgICAgICAgIH0sIHNlbGYuX29wdGlvbnMucmV0cnkuYXV0b0F0dGVtcHREZWxheSAqIDEwMDApOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gaGFuZGxlcjsKICAgIH0sCiAgICBfcHJldmVudExlYXZlSW5Qcm9ncmVzczogZnVuY3Rpb24oKXsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIHRoaXMuX2F0dGFjaCh3aW5kb3csICdiZWZvcmV1bmxvYWQnLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgaWYgKCFzZWxmLl9maWxlc0luUHJvZ3Jlc3Mpe3JldHVybjt9CgogICAgICAgICAgICB2YXIgZSA9IGUgfHwgd2luZG93LmV2ZW50OwogICAgICAgICAgICAvLyBmb3IgaWUsIGZmCiAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBzZWxmLl9vcHRpb25zLm1lc3NhZ2VzLm9uTGVhdmU7CiAgICAgICAgICAgIC8vIGZvciB3ZWJraXQKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMubWVzc2FnZXMub25MZWF2ZTsKICAgICAgICB9KTsKICAgIH0sCiAgICBfb25TdWJtaXQ6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSl7CiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuYXV0b1VwbG9hZCkgewogICAgICAgICAgICB0aGlzLl9maWxlc0luUHJvZ3Jlc3MrKzsKICAgICAgICB9CiAgICB9LAogICAgX29uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSwgbG9hZGVkLCB0b3RhbCl7CiAgICB9LAogICAgX29uQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSwgcmVzdWx0LCB4aHIpewogICAgICAgIHRoaXMuX2ZpbGVzSW5Qcm9ncmVzcy0tOwogICAgICAgIHRoaXMuX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3IoaWQsIGZpbGVOYW1lLCByZXN1bHQsIHhocik7CiAgICB9LAogICAgX29uQ2FuY2VsOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXRyeVRpbWVvdXRzW2lkXSk7CgogICAgICAgIHZhciBzdG9yZWRGaWxlSW5kZXggPSBxcS5pbmRleE9mKHRoaXMuX3N0b3JlZEZpbGVJZHMsIGlkKTsKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hdXRvVXBsb2FkIHx8IHN0b3JlZEZpbGVJbmRleCA8IDApIHsKICAgICAgICAgICAgdGhpcy5fZmlsZXNJblByb2dyZXNzLS07CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKCF0aGlzLl9vcHRpb25zLmF1dG9VcGxvYWQpIHsKICAgICAgICAgICAgdGhpcy5fc3RvcmVkRmlsZUlkcy5zcGxpY2Uoc3RvcmVkRmlsZUluZGV4LCAxKTsKICAgICAgICB9CiAgICB9LAogICAgX29uVXBsb2FkOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIHhocil7CiAgICB9LAogICAgX29uSW5wdXRDaGFuZ2U6IGZ1bmN0aW9uKGlucHV0KXsKICAgICAgICBpZiAodGhpcy5faGFuZGxlciBpbnN0YW5jZW9mIHFxLlVwbG9hZEhhbmRsZXJYaHIpewogICAgICAgICAgICB0aGlzLl91cGxvYWRGaWxlTGlzdChpbnB1dC5maWxlcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlRmlsZShpbnB1dCkpewogICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkRmlsZShpbnB1dCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5fYnV0dG9uLnJlc2V0KCk7CiAgICB9LAogICAgX29uQmVmb3JlQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpIHsKICAgICAgICB0aGlzLmxvZygiV2FpdGluZyAiICsgdGhpcy5fb3B0aW9ucy5yZXRyeS5hdXRvQXR0ZW1wdERlbGF5ICsgIiBzZWNvbmRzIGJlZm9yZSByZXRyeWluZyAiICsgZmlsZU5hbWUgKyAiLi4uIik7CiAgICB9LAogICAgX29uQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIHJlc3BvbnNlSlNPTikgewogICAgICAgIHRoaXMubG9nKCJSZXRyeWluZyAiICsgZmlsZU5hbWUgKyAiLi4uIik7CiAgICAgICAgdGhpcy5fYXV0b1JldHJpZXNbaWRdKys7CiAgICAgICAgdGhpcy5faGFuZGxlci5yZXRyeShpZCk7CiAgICB9LAogICAgX3Nob3VsZEF1dG9SZXRyeTogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCByZXNwb25zZUpTT04pIHsKICAgICAgICBpZiAoIXRoaXMuX3ByZXZlbnRSZXRyaWVzW2lkXSAmJiB0aGlzLl9vcHRpb25zLnJldHJ5LmVuYWJsZUF1dG8pIHsKICAgICAgICAgICAgaWYgKHRoaXMuX2F1dG9SZXRyaWVzW2lkXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9hdXRvUmV0cmllc1tpZF0gPSAwOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0b1JldHJpZXNbaWRdIDwgdGhpcy5fb3B0aW9ucy5yZXRyeS5tYXhBdXRvQXR0ZW1wdHMKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICAvL3JldHVybiBmYWxzZSBpZiB3ZSBzaG91bGQgbm90IGF0dGVtcHQgdGhlIHJlcXVlc3RlZCByZXRyeQogICAgX29uQmVmb3JlTWFudWFsUmV0cnk6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgaWYgKHRoaXMuX3ByZXZlbnRSZXRyaWVzW2lkXSkgewogICAgICAgICAgICB0aGlzLmxvZygiUmV0cmllcyBhcmUgZm9yYmlkZGVuIGZvciBpZCAiICsgaWQsICd3YXJuJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodGhpcy5faGFuZGxlci5pc1ZhbGlkKGlkKSkgewogICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLl9oYW5kbGVyLmdldE5hbWUoaWQpOwoKICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uTWFudWFsUmV0cnkoaWQsIGZpbGVOYW1lKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5sb2coIlJldHJ5aW5nIHVwbG9hZCBmb3IgJyIgKyBmaWxlTmFtZSArICInIChpZDogIiArIGlkICsgIikuLi4iKTsKICAgICAgICAgICAgdGhpcy5fZmlsZXNJblByb2dyZXNzKys7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5sb2coIiciICsgaWQgKyAiJyBpcyBub3QgYSB2YWxpZCBmaWxlIElEIiwgJ2Vycm9yJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9LAogICAgX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3I6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSwgcmVzcG9uc2UsIHhocikgewogICAgICAgIC8vYXNzdW1pbmcgbm8gb25lIHdpbGwgYWN0dWFsbHkgc2V0IHRoZSByZXNwb25zZSBjb2RlIHRvIHNvbWV0aGluZyBvdGhlciB0aGFuIDIwMCBhbmQgc3RpbGwgc2V0ICdzdWNjZXNzJyB0byB0cnVlCiAgICAgICAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKXsKICAgICAgICAgICAgaWYgKHhociAmJiB4aHIuc3RhdHVzICE9PSAyMDAgJiYgIXJlc3BvbnNlLmVycm9yKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbkVycm9yKGlkLCBmaWxlTmFtZSwgIlhIUiByZXR1cm5lZCByZXNwb25zZSBjb2RlICIgKyB4aHIuc3RhdHVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvclJlYXNvbiA9IHJlc3BvbnNlLmVycm9yID8gcmVzcG9uc2UuZXJyb3IgOiAiVXBsb2FkIGZhaWx1cmUgcmVhc29uIHVua25vd24iOwogICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25FcnJvcihpZCwgZmlsZU5hbWUsIGVycm9yUmVhc29uKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBfdXBsb2FkRmlsZUxpc3Q6IGZ1bmN0aW9uKGZpbGVzKXsKICAgICAgICB2YXIgdmFsaWRhdGlvbkRlc2NyaXB0b3JzLCBpbmRleCwgYmF0Y2hJbnZhbGlkOwoKICAgICAgICB2YWxpZGF0aW9uRGVzY3JpcHRvcnMgPSB0aGlzLl9nZXRWYWxpZGF0aW9uRGVzY3JpcHRvcnMoZmlsZXMpOwogICAgICAgIGlmICh2YWxpZGF0aW9uRGVzY3JpcHRvcnMubGVuZ3RoID4gMSkgewogICAgICAgICAgICBiYXRjaEludmFsaWQgPSB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vblZhbGlkYXRlKHZhbGlkYXRpb25EZXNjcmlwdG9ycykgPT09IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFiYXRjaEludmFsaWQpIHsKICAgICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGZpbGVzLmxlbmd0aDsgaW5kZXgrKyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlRmlsZShmaWxlc1tpbmRleF0pKXsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdXBsb2FkRmlsZShmaWxlc1tpbmRleF0pOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9vcHRpb25zLnZhbGlkYXRpb24uc3RvcE9uRmlyc3RJbnZhbGlkRmlsZSl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9lcnJvcignbm9GaWxlc0Vycm9yJywgIiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIF91cGxvYWRGaWxlOiBmdW5jdGlvbihmaWxlQ29udGFpbmVyKXsKICAgICAgICB2YXIgaWQgPSB0aGlzLl9oYW5kbGVyLmFkZChmaWxlQ29udGFpbmVyKTsKICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLl9oYW5kbGVyLmdldE5hbWUoaWQpOwoKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25TdWJtaXQoaWQsIGZpbGVOYW1lKSAhPT0gZmFsc2UpewogICAgICAgICAgICB0aGlzLl9vblN1Ym1pdChpZCwgZmlsZU5hbWUpOwogICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hdXRvVXBsb2FkKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVyLnVwbG9hZChpZCwgdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnBhcmFtcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZUZpbGVGb3JMYXRlcihpZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgX3N0b3JlRmlsZUZvckxhdGVyOiBmdW5jdGlvbihpZCkgewogICAgICAgIHRoaXMuX3N0b3JlZEZpbGVJZHMucHVzaChpZCk7CiAgICB9LAogICAgX3ZhbGlkYXRlRmlsZTogZnVuY3Rpb24oZmlsZSl7CiAgICAgICAgdmFyIHZhbGlkYXRpb25EZXNjcmlwdG9yLCBuYW1lLCBzaXplOwoKICAgICAgICB2YWxpZGF0aW9uRGVzY3JpcHRvciA9IHRoaXMuX2dldFZhbGlkYXRpb25EZXNjcmlwdG9yKGZpbGUpOwogICAgICAgIG5hbWUgPSB2YWxpZGF0aW9uRGVzY3JpcHRvci5uYW1lOwogICAgICAgIHNpemUgPSB2YWxpZGF0aW9uRGVzY3JpcHRvci5zaXplOwoKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25WYWxpZGF0ZShbdmFsaWRhdGlvbkRlc2NyaXB0b3JdKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCF0aGlzLl9pc0FsbG93ZWRFeHRlbnNpb24obmFtZSkpewogICAgICAgICAgICB0aGlzLl9lcnJvcigndHlwZUVycm9yJywgbmFtZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNpemUgPT09IDApewogICAgICAgICAgICB0aGlzLl9lcnJvcignZW1wdHlFcnJvcicsIG5hbWUpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzaXplICYmIHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5zaXplTGltaXQgJiYgc2l6ZSA+IHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5zaXplTGltaXQpewogICAgICAgICAgICB0aGlzLl9lcnJvcignc2l6ZUVycm9yJywgbmFtZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNpemUgJiYgc2l6ZSA8IHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5taW5TaXplTGltaXQpewogICAgICAgICAgICB0aGlzLl9lcnJvcignbWluU2l6ZUVycm9yJywgbmFtZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfSwKICAgIF9lcnJvcjogZnVuY3Rpb24oY29kZSwgZmlsZU5hbWUpewogICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5fb3B0aW9ucy5tZXNzYWdlc1tjb2RlXTsKICAgICAgICBmdW5jdGlvbiByKG5hbWUsIHJlcGxhY2VtZW50KXsgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShuYW1lLCByZXBsYWNlbWVudCk7IH0KCiAgICAgICAgdmFyIGV4dGVuc2lvbnMgPSB0aGlzLl9vcHRpb25zLnZhbGlkYXRpb24uYWxsb3dlZEV4dGVuc2lvbnMuam9pbignLCAnKTsKCiAgICAgICAgcigne2ZpbGV9JywgdGhpcy5fZm9ybWF0RmlsZU5hbWUoZmlsZU5hbWUpKTsKICAgICAgICByKCd7ZXh0ZW5zaW9uc30nLCBleHRlbnNpb25zKTsKICAgICAgICByKCd7c2l6ZUxpbWl0fScsIHRoaXMuX2Zvcm1hdFNpemUodGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLnNpemVMaW1pdCkpOwogICAgICAgIHIoJ3ttaW5TaXplTGltaXR9JywgdGhpcy5fZm9ybWF0U2l6ZSh0aGlzLl9vcHRpb25zLnZhbGlkYXRpb24ubWluU2l6ZUxpbWl0KSk7CgogICAgICAgIHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uRXJyb3IobnVsbCwgZmlsZU5hbWUsIG1lc3NhZ2UpOwoKICAgICAgICByZXR1cm4gbWVzc2FnZTsKICAgIH0sCiAgICBfZm9ybWF0RmlsZU5hbWU6IGZ1bmN0aW9uKG5hbWUpewogICAgICAgIGlmIChuYW1lLmxlbmd0aCA+IDMzKXsKICAgICAgICAgICAgbmFtZSA9IG5hbWUuc2xpY2UoMCwgMTkpICsgJy4uLicgKyBuYW1lLnNsaWNlKC0xMyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuYW1lOwogICAgfSwKICAgIF9pc0FsbG93ZWRFeHRlbnNpb246IGZ1bmN0aW9uKGZpbGVOYW1lKXsKICAgICAgICB2YXIgZXh0ID0gKC0xICE9PSBmaWxlTmFtZS5pbmRleE9mKCcuJykpCiAgICAgICAgICAgID8gZmlsZU5hbWUucmVwbGFjZSgvLipbLl0vLCAnJykudG9Mb3dlckNhc2UoKQogICAgICAgICAgICA6ICcnOwogICAgICAgIHZhciBhbGxvd2VkID0gdGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLmFsbG93ZWRFeHRlbnNpb25zOwoKICAgICAgICBpZiAoIWFsbG93ZWQubGVuZ3RoKXtyZXR1cm4gdHJ1ZTt9CgogICAgICAgIGZvciAodmFyIGk9MDsgaTxhbGxvd2VkLmxlbmd0aDsgaSsrKXsKICAgICAgICAgICAgaWYgKGFsbG93ZWRbaV0udG9Mb3dlckNhc2UoKSA9PSBleHQpeyByZXR1cm4gdHJ1ZTt9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAogICAgX2Zvcm1hdFNpemU6IGZ1bmN0aW9uKGJ5dGVzKXsKICAgICAgICB2YXIgaSA9IC0xOwogICAgICAgIGRvIHsKICAgICAgICAgICAgYnl0ZXMgPSBieXRlcyAvIDEwMjQ7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9IHdoaWxlIChieXRlcyA+IDk5KTsKCiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGJ5dGVzLCAwLjEpLnRvRml4ZWQoMSkgKyBbJ2tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJ11baV07CiAgICB9LAogICAgX3dyYXBDYWxsYmFja3M6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzZWxmLCBzYWZlQ2FsbGJhY2s7CgogICAgICAgIHNlbGYgPSB0aGlzOwoKICAgICAgICBzYWZlQ2FsbGJhY2sgPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgYXJncykgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHNlbGYsIGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChleGNlcHRpb24pIHsKICAgICAgICAgICAgICAgIHNlbGYubG9nKCJDYXVnaHQgZXhjZXB0aW9uIGluICciICsgbmFtZSArICInIGNhbGxiYWNrIC0gIiArIGV4Y2VwdGlvbiwgJ2Vycm9yJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5fb3B0aW9ucy5jYWxsYmFja3MpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIG9sZENhbGxiYWNrID0gc2VsZi5fb3B0aW9ucy5jYWxsYmFja3NbcHJvcF07CiAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNhbGxiYWNrc1twcm9wXSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBzYWZlQ2FsbGJhY2socHJvcCwgb2xkQ2FsbGJhY2ssIGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0oKSk7CiAgICAgICAgfQogICAgfSwKICAgIF9wYXJzZUZpbGVOYW1lOiBmdW5jdGlvbihmaWxlKSB7CiAgICAgICAgdmFyIG5hbWU7CgogICAgICAgIGlmIChmaWxlLnZhbHVlKXsKICAgICAgICAgICAgLy8gaXQgaXMgYSBmaWxlIGlucHV0CiAgICAgICAgICAgIC8vIGdldCBpbnB1dCB2YWx1ZSBhbmQgcmVtb3ZlIHBhdGggdG8gbm9ybWFsaXplCiAgICAgICAgICAgIG5hbWUgPSBmaWxlLnZhbHVlLnJlcGxhY2UoLy4qKFwvfFxcKS8sICIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBmaXggbWlzc2luZyBwcm9wZXJ0aWVzIGluIFNhZmFyaSA0IGFuZCBmaXJlZm94IDExLjBhMgogICAgICAgICAgICBuYW1lID0gKGZpbGUuZmlsZU5hbWUgIT09IG51bGwgJiYgZmlsZS5maWxlTmFtZSAhPT0gdW5kZWZpbmVkKSA/IGZpbGUuZmlsZU5hbWUgOiBmaWxlLm5hbWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmFtZTsKICAgIH0sCiAgICBfcGFyc2VGaWxlU2l6ZTogZnVuY3Rpb24oZmlsZSkgewogICAgICAgIHZhciBzaXplOwoKICAgICAgICBpZiAoIWZpbGUudmFsdWUpewogICAgICAgICAgICAvLyBmaXggbWlzc2luZyBwcm9wZXJ0aWVzIGluIFNhZmFyaSA0IGFuZCBmaXJlZm94IDExLjBhMgogICAgICAgICAgICBzaXplID0gKGZpbGUuZmlsZVNpemUgIT09IG51bGwgJiYgZmlsZS5maWxlU2l6ZSAhPT0gdW5kZWZpbmVkKSA/IGZpbGUuZmlsZVNpemUgOiBmaWxlLnNpemU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2l6ZTsKICAgIH0sCiAgICBfZ2V0VmFsaWRhdGlvbkRlc2NyaXB0b3I6IGZ1bmN0aW9uKGZpbGUpIHsKICAgICAgICB2YXIgbmFtZSwgc2l6ZSwgZmlsZURlc2NyaXB0b3I7CgogICAgICAgIGZpbGVEZXNjcmlwdG9yID0ge307CiAgICAgICAgbmFtZSA9IHRoaXMuX3BhcnNlRmlsZU5hbWUoZmlsZSk7CiAgICAgICAgc2l6ZSA9IHRoaXMuX3BhcnNlRmlsZVNpemUoZmlsZSk7CgogICAgICAgIGZpbGVEZXNjcmlwdG9yLm5hbWUgPSBuYW1lOwogICAgICAgIGlmIChzaXplKSB7CiAgICAgICAgICAgIGZpbGVEZXNjcmlwdG9yLnNpemUgPSBzaXplOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZpbGVEZXNjcmlwdG9yOwogICAgfSwKICAgIF9nZXRWYWxpZGF0aW9uRGVzY3JpcHRvcnM6IGZ1bmN0aW9uKGZpbGVzKSB7CiAgICAgICAgdmFyIGluZGV4LCBmaWxlRGVzY3JpcHRvcnM7CgogICAgICAgIGZpbGVEZXNjcmlwdG9ycyA9IFtdOwoKICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBmaWxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICAgICAgZmlsZURlc2NyaXB0b3JzLnB1c2goZmlsZXNbaW5kZXhdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmaWxlRGVzY3JpcHRvcnM7CiAgICB9Cn07Ci8qKgogKiBDbGFzcyB0aGF0IGNyZWF0ZXMgdXBsb2FkIHdpZGdldCB3aXRoIGRyYWctYW5kLWRyb3AgYW5kIGZpbGUgbGlzdAogKiBAaW5oZXJpdHMgcXEuRmluZVVwbG9hZGVyQmFzaWMKICovCnFxLkZpbmVVcGxvYWRlciA9IGZ1bmN0aW9uKG8pewogICAgLy8gY2FsbCBwYXJlbnQgY29uc3RydWN0b3IKICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgLy8gYWRkaXRpb25hbCBvcHRpb25zCiAgICBxcS5leHRlbmQodGhpcy5fb3B0aW9ucywgewogICAgICAgIGVsZW1lbnQ6IG51bGwsCiAgICAgICAgbGlzdEVsZW1lbnQ6IG51bGwsCiAgICAgICAgZHJhZ0FuZERyb3A6IHsKICAgICAgICAgICAgZXh0cmFEcm9wem9uZXM6IFtdLAogICAgICAgICAgICBoaWRlRHJvcHpvbmVzOiB0cnVlLAogICAgICAgICAgICBkaXNhYmxlRGVmYXVsdERyb3B6b25lOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgdGV4dDogewogICAgICAgICAgICB1cGxvYWRCdXR0b246ICdVcGxvYWQgYSBmaWxlJywKICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiAnQ2FuY2VsJywKICAgICAgICAgICAgcmV0cnlCdXR0b246ICdSZXRyeScsCiAgICAgICAgICAgIGZhaWxVcGxvYWQ6ICdVcGxvYWQgZmFpbGVkJywKICAgICAgICAgICAgZHJhZ1pvbmU6ICdEcm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkJywKICAgICAgICAgICAgZm9ybWF0UHJvZ3Jlc3M6ICJ7cGVyY2VudH0lIG9mIHt0b3RhbF9zaXplfSIsCiAgICAgICAgICAgIHdhaXRpbmdGb3JSZXNwb25zZTogIlByb2Nlc3NpbmcuLi4iCiAgICAgICAgfSwKICAgICAgICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9InFxLXVwbG9hZGVyIj4nICsKICAgICAgICAgICAgKCghdGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcCB8fCAhdGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5kaXNhYmxlRGVmYXVsdERyb3B6b25lKSA/ICc8ZGl2IGNsYXNzPSJxcS11cGxvYWQtZHJvcC1hcmVhIj48c3Bhbj57ZHJhZ1pvbmVUZXh0fTwvc3Bhbj48L2Rpdj4nIDogJycpICsKICAgICAgICAgICAgKCF0aGlzLl9vcHRpb25zLmJ1dHRvbiA/ICc8ZGl2IGNsYXNzPSJxcS11cGxvYWQtYnV0dG9uIj48ZGl2Pnt1cGxvYWRCdXR0b25UZXh0fTwvZGl2PjwvZGl2PicgOiAnJykgKwogICAgICAgICAgICAoIXRoaXMuX29wdGlvbnMubGlzdEVsZW1lbnQgPyAnPHVsIGNsYXNzPSJxcS11cGxvYWQtbGlzdCI+PC91bD4nIDogJycpICsKICAgICAgICAgICAgJzwvZGl2PicsCgogICAgICAgIC8vIHRlbXBsYXRlIGZvciBvbmUgaXRlbSBpbiBmaWxlIGxpc3QKICAgICAgICBmaWxlVGVtcGxhdGU6ICc8bGk+JyArCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJxcS1wcm9ncmVzcy1iYXIiPjwvZGl2PicgKwogICAgICAgICAgICAnPHNwYW4gY2xhc3M9InFxLXVwbG9hZC1zcGlubmVyIj48L3NwYW4+JyArCiAgICAgICAgICAgICc8c3BhbiBjbGFzcz0icXEtdXBsb2FkLWZpbmlzaGVkIj48L3NwYW4+JyArCiAgICAgICAgICAgICc8c3BhbiBjbGFzcz0icXEtdXBsb2FkLWZpbGUiPjwvc3Bhbj4nICsKICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJxcS11cGxvYWQtc2l6ZSI+PC9zcGFuPicgKwogICAgICAgICAgICAnPGEgY2xhc3M9InFxLXVwbG9hZC1jYW5jZWwiIGhyZWY9IiMiPntjYW5jZWxCdXR0b25UZXh0fTwvYT4nICsKICAgICAgICAgICAgJzxhIGNsYXNzPSJxcS11cGxvYWQtcmV0cnkiIGhyZWY9IiMiPntyZXRyeUJ1dHRvblRleHR9PC9hPicgKwogICAgICAgICAgICAnPHNwYW4gY2xhc3M9InFxLXVwbG9hZC1zdGF0dXMtdGV4dCI+e3N0YXR1c1RleHR9PC9zcGFuPicgKwogICAgICAgICAgICAnPC9saT4nLAogICAgICAgIGNsYXNzZXM6IHsKICAgICAgICAgICAgLy8gdXNlZCB0byBnZXQgZWxlbWVudHMgZnJvbSB0ZW1wbGF0ZXMKICAgICAgICAgICAgYnV0dG9uOiAncXEtdXBsb2FkLWJ1dHRvbicsCiAgICAgICAgICAgIGRyb3A6ICdxcS11cGxvYWQtZHJvcC1hcmVhJywKICAgICAgICAgICAgZHJvcEFjdGl2ZTogJ3FxLXVwbG9hZC1kcm9wLWFyZWEtYWN0aXZlJywKICAgICAgICAgICAgZHJvcERpc2FibGVkOiAncXEtdXBsb2FkLWRyb3AtYXJlYS1kaXNhYmxlZCcsCiAgICAgICAgICAgIGxpc3Q6ICdxcS11cGxvYWQtbGlzdCcsCiAgICAgICAgICAgIHByb2dyZXNzQmFyOiAncXEtcHJvZ3Jlc3MtYmFyJywKICAgICAgICAgICAgZmlsZTogJ3FxLXVwbG9hZC1maWxlJywKICAgICAgICAgICAgc3Bpbm5lcjogJ3FxLXVwbG9hZC1zcGlubmVyJywKICAgICAgICAgICAgZmluaXNoZWQ6ICdxcS11cGxvYWQtZmluaXNoZWQnLAogICAgICAgICAgICByZXRyeWluZzogJ3FxLXVwbG9hZC1yZXRyeWluZycsCiAgICAgICAgICAgIHJldHJ5YWJsZTogJ3FxLXVwbG9hZC1yZXRyeWFibGUnLAogICAgICAgICAgICBzaXplOiAncXEtdXBsb2FkLXNpemUnLAogICAgICAgICAgICBjYW5jZWw6ICdxcS11cGxvYWQtY2FuY2VsJywKICAgICAgICAgICAgcmV0cnk6ICdxcS11cGxvYWQtcmV0cnknLAogICAgICAgICAgICBzdGF0dXNUZXh0OiAncXEtdXBsb2FkLXN0YXR1cy10ZXh0JywKCiAgICAgICAgICAgIC8vIGFkZGVkIHRvIGxpc3QgaXRlbSA8bGk+IHdoZW4gdXBsb2FkIGNvbXBsZXRlcwogICAgICAgICAgICAvLyB1c2VkIGluIGNzcyB0byBoaWRlIHByb2dyZXNzIHNwaW5uZXIKICAgICAgICAgICAgc3VjY2VzczogJ3FxLXVwbG9hZC1zdWNjZXNzJywKICAgICAgICAgICAgZmFpbDogJ3FxLXVwbG9hZC1mYWlsJywKCiAgICAgICAgICAgIHN1Y2Nlc3NJY29uOiBudWxsLAogICAgICAgICAgICBmYWlsSWNvbjogbnVsbAogICAgICAgIH0sCiAgICAgICAgZmFpbGVkVXBsb2FkVGV4dERpc3BsYXk6IHsKICAgICAgICAgICAgbW9kZTogJ2RlZmF1bHQnLCAvL2RlZmF1bHQsIGN1c3RvbSwgb3Igbm9uZQogICAgICAgICAgICBtYXhDaGFyczogNTAsCiAgICAgICAgICAgIHJlc3BvbnNlUHJvcGVydHk6ICdlcnJvcicsCiAgICAgICAgICAgIGVuYWJsZVRvb2x0aXA6IHRydWUKICAgICAgICB9LAogICAgICAgIG1lc3NhZ2VzOiB7CiAgICAgICAgICAgIHRvb01hbnlGaWxlc0Vycm9yOiAiWW91IG1heSBvbmx5IGRyb3Agb25lIGZpbGUiCiAgICAgICAgfSwKICAgICAgICByZXRyeTogewogICAgICAgICAgICBzaG93QXV0b1JldHJ5Tm90ZTogdHJ1ZSwKICAgICAgICAgICAgYXV0b1JldHJ5Tm90ZTogIlJldHJ5aW5nIHtyZXRyeU51bX0ve21heEF1dG99Li4uIiwKICAgICAgICAgICAgc2hvd0J1dHRvbjogZmFsc2UKICAgICAgICB9LAogICAgICAgIHNob3dNZXNzYWdlOiBmdW5jdGlvbihtZXNzYWdlKXsKICAgICAgICAgICAgYWxlcnQobWVzc2FnZSk7CiAgICAgICAgfQogICAgfSwgdHJ1ZSk7CgogICAgLy8gb3ZlcndyaXRlIG9wdGlvbnMgd2l0aCB1c2VyIHN1cHBsaWVkCiAgICBxcS5leHRlbmQodGhpcy5fb3B0aW9ucywgbywgdHJ1ZSk7CiAgICB0aGlzLl93cmFwQ2FsbGJhY2tzKCk7CgogICAgLy8gb3ZlcndyaXRlIHRoZSB1cGxvYWQgYnV0dG9uIHRleHQgaWYgYW55CiAgICAvLyBzYW1lIGZvciB0aGUgQ2FuY2VsIGJ1dHRvbiBhbmQgRmFpbCBtZXNzYWdlIHRleHQKICAgIHRoaXMuX29wdGlvbnMudGVtcGxhdGUgICAgID0gdGhpcy5fb3B0aW9ucy50ZW1wbGF0ZS5yZXBsYWNlKC9ce2RyYWdab25lVGV4dFx9L2csIHRoaXMuX29wdGlvbnMudGV4dC5kcmFnWm9uZSk7CiAgICB0aGlzLl9vcHRpb25zLnRlbXBsYXRlICAgICA9IHRoaXMuX29wdGlvbnMudGVtcGxhdGUucmVwbGFjZSgvXHt1cGxvYWRCdXR0b25UZXh0XH0vZywgdGhpcy5fb3B0aW9ucy50ZXh0LnVwbG9hZEJ1dHRvbik7CiAgICB0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZSA9IHRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlLnJlcGxhY2UoL1x7Y2FuY2VsQnV0dG9uVGV4dFx9L2csIHRoaXMuX29wdGlvbnMudGV4dC5jYW5jZWxCdXR0b24pOwogICAgdGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGUgPSB0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZS5yZXBsYWNlKC9ce3JldHJ5QnV0dG9uVGV4dFx9L2csIHRoaXMuX29wdGlvbnMudGV4dC5yZXRyeUJ1dHRvbik7CiAgICB0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZSA9IHRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlLnJlcGxhY2UoL1x7c3RhdHVzVGV4dFx9L2csICIiKTsKCiAgICB0aGlzLl9lbGVtZW50ID0gdGhpcy5fb3B0aW9ucy5lbGVtZW50OwogICAgdGhpcy5fZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9vcHRpb25zLnRlbXBsYXRlOwogICAgdGhpcy5fbGlzdEVsZW1lbnQgPSB0aGlzLl9vcHRpb25zLmxpc3RFbGVtZW50IHx8IHRoaXMuX2ZpbmQodGhpcy5fZWxlbWVudCwgJ2xpc3QnKTsKCiAgICB0aGlzLl9jbGFzc2VzID0gdGhpcy5fb3B0aW9ucy5jbGFzc2VzOwoKICAgIGlmICghdGhpcy5fYnV0dG9uKSB7CiAgICAgICAgdGhpcy5fYnV0dG9uID0gdGhpcy5fY3JlYXRlVXBsb2FkQnV0dG9uKHRoaXMuX2ZpbmQodGhpcy5fZWxlbWVudCwgJ2J1dHRvbicpKTsKICAgIH0KCiAgICB0aGlzLl9iaW5kQ2FuY2VsQW5kUmV0cnlFdmVudHMoKTsKICAgIHRoaXMuX3NldHVwRHJhZ0Ryb3AoKTsKfTsKCi8vIGluaGVyaXQgZnJvbSBCYXNpYyBVcGxvYWRlcgpxcS5leHRlbmQocXEuRmluZVVwbG9hZGVyLnByb3RvdHlwZSwgcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlKTsKCnFxLmV4dGVuZChxcS5GaW5lVXBsb2FkZXIucHJvdG90eXBlLCB7CiAgICBjbGVhclN0b3JlZEZpbGVzOiBmdW5jdGlvbigpIHsKICAgICAgICBxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuY2xlYXJTdG9yZWRGaWxlcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIHRoaXMuX2xpc3RFbGVtZW50LmlubmVySFRNTCA9ICIiOwogICAgfSwKICAgIGFkZEV4dHJhRHJvcHpvbmU6IGZ1bmN0aW9uKGVsZW1lbnQpewogICAgICAgIHRoaXMuX3NldHVwRXh0cmFEcm9wem9uZShlbGVtZW50KTsKICAgIH0sCiAgICByZW1vdmVFeHRyYURyb3B6b25lOiBmdW5jdGlvbihlbGVtZW50KXsKICAgICAgICB2YXIgZHpzID0gdGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5leHRyYURyb3B6b25lczsKICAgICAgICBmb3IodmFyIGkgaW4gZHpzKSBpZiAoZHpzW2ldID09PSBlbGVtZW50KSByZXR1cm4gdGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5leHRyYURyb3B6b25lcy5zcGxpY2UoaSwxKTsKICAgIH0sCiAgICBnZXRJdGVtQnlGaWxlSWQ6IGZ1bmN0aW9uKGlkKXsKICAgICAgICB2YXIgaXRlbSA9IHRoaXMuX2xpc3RFbGVtZW50LmZpcnN0Q2hpbGQ7CgogICAgICAgIC8vIHRoZXJlIGNhbid0IGJlIHR4dCBub2RlcyBpbiBkeW5hbWljYWxseSBjcmVhdGVkIGxpc3QKICAgICAgICAvLyBhbmQgd2UgY2FuICB1c2UgbmV4dFNpYmxpbmcKICAgICAgICB3aGlsZSAoaXRlbSl7CiAgICAgICAgICAgIGlmIChpdGVtLnFxRmlsZUlkID09IGlkKSByZXR1cm4gaXRlbTsKICAgICAgICAgICAgaXRlbSA9IGl0ZW0ubmV4dFNpYmxpbmc7CiAgICAgICAgfQogICAgfSwKICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgICBxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUucmVzZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB0aGlzLl9lbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX29wdGlvbnMudGVtcGxhdGU7CiAgICAgICAgdGhpcy5fbGlzdEVsZW1lbnQgPSB0aGlzLl9vcHRpb25zLmxpc3RFbGVtZW50IHx8IHRoaXMuX2ZpbmQodGhpcy5fZWxlbWVudCwgJ2xpc3QnKTsKICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMuYnV0dG9uKSB7CiAgICAgICAgICAgIHRoaXMuX2J1dHRvbiA9IHRoaXMuX2NyZWF0ZVVwbG9hZEJ1dHRvbih0aGlzLl9maW5kKHRoaXMuX2VsZW1lbnQsICdidXR0b24nKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX2JpbmRDYW5jZWxBbmRSZXRyeUV2ZW50cygpOwogICAgICAgIHRoaXMuX3NldHVwRHJhZ0Ryb3AoKTsKICAgIH0sCiAgICBfbGVhdmluZ19kb2N1bWVudF9vdXQ6IGZ1bmN0aW9uKGUpewogICAgICAgIHJldHVybiAoKHFxLmNocm9tZSgpIHx8IChxcS5zYWZhcmkoKSAmJiBxcS53aW5kb3dzKCkpKSAmJiBlLmNsaWVudFggPT0gMCAmJiBlLmNsaWVudFkgPT0gMCkgLy8gbnVsbCBjb29yZHMgZm9yIENocm9tZSBhbmQgU2FmYXJpIFdpbmRvd3MKICAgICAgICAgICAgfHwgKHFxLmZpcmVmb3goKSAmJiAhZS5yZWxhdGVkVGFyZ2V0KTsgLy8gbnVsbCBlLnJlbGF0ZWRUYXJnZXQgZm9yIEZpcmVmb3gKICAgIH0sCiAgICBfc3RvcmVGaWxlRm9yTGF0ZXI6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9zdG9yZUZpbGVGb3JMYXRlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIHZhciBpdGVtID0gdGhpcy5nZXRJdGVtQnlGaWxlSWQoaWQpOwogICAgICAgIHFxKHRoaXMuX2ZpbmQoaXRlbSwgJ3NwaW5uZXInKSkuaGlkZSgpOwogICAgfSwKICAgIC8qKgogICAgICogR2V0cyBvbmUgb2YgdGhlIGVsZW1lbnRzIGxpc3RlZCBpbiB0aGlzLl9vcHRpb25zLmNsYXNzZXMKICAgICAqKi8KICAgIF9maW5kOiBmdW5jdGlvbihwYXJlbnQsIHR5cGUpewogICAgICAgIHZhciBlbGVtZW50ID0gcXEocGFyZW50KS5nZXRCeUNsYXNzKHRoaXMuX29wdGlvbnMuY2xhc3Nlc1t0eXBlXSlbMF07CiAgICAgICAgaWYgKCFlbGVtZW50KXsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdlbGVtZW50IG5vdCBmb3VuZCAnICsgdHlwZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgIH0sCiAgICBfc2V0dXBFeHRyYURyb3B6b25lOiBmdW5jdGlvbihlbGVtZW50KXsKICAgICAgICB0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmV4dHJhRHJvcHpvbmVzLnB1c2goZWxlbWVudCk7CiAgICAgICAgdGhpcy5fc2V0dXBEcm9wem9uZShlbGVtZW50KTsKICAgIH0sCiAgICBfc2V0dXBEcm9wem9uZTogZnVuY3Rpb24oZHJvcEFyZWEpewogICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgdmFyIGR6ID0gbmV3IHFxLlVwbG9hZERyb3Bab25lKHsKICAgICAgICAgICAgZWxlbWVudDogZHJvcEFyZWEsCiAgICAgICAgICAgIG9uRW50ZXI6IGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgcXEoZHJvcEFyZWEpLmFkZENsYXNzKHNlbGYuX2NsYXNzZXMuZHJvcEFjdGl2ZSk7CiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkxlYXZlOiBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIC8vZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25MZWF2ZU5vdERlc2NlbmRhbnRzOiBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIHFxKGRyb3BBcmVhKS5yZW1vdmVDbGFzcyhzZWxmLl9jbGFzc2VzLmRyb3BBY3RpdmUpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkRyb3A6IGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuZHJhZ0FuZERyb3AuaGlkZURyb3B6b25lcykgewogICAgICAgICAgICAgICAgICAgIHFxKGRyb3BBcmVhKS5oaWRlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcXEoZHJvcEFyZWEpLnJlbW92ZUNsYXNzKHNlbGYuX2NsYXNzZXMuZHJvcEFjdGl2ZSk7CiAgICAgICAgICAgICAgICBpZiAoZS5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoID4gMSAmJiAhc2VsZi5fb3B0aW9ucy5tdWx0aXBsZSkgewogICAgICAgICAgICAgICAgICAgIHNlbGYuX2Vycm9yKCd0b29NYW55RmlsZXNFcnJvcicsICIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHNlbGYuX3VwbG9hZEZpbGVMaXN0KGUuZGF0YVRyYW5zZmVyLmZpbGVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICB0aGlzLmFkZERpc3Bvc2VyKGZ1bmN0aW9uKCkgeyBkei5kaXNwb3NlKCk7IH0pOwoKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5oaWRlRHJvcHpvbmVzKSB7CiAgICAgICAgICAgIHFxKGRyb3BBcmVhKS5oaWRlKCk7CiAgICAgICAgfQogICAgfSwKICAgIF9zZXR1cERyYWdEcm9wOiBmdW5jdGlvbigpewogICAgICAgIHZhciBzZWxmLCBkcm9wQXJlYTsKCiAgICAgICAgc2VsZiA9IHRoaXM7CgogICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5kaXNhYmxlRGVmYXVsdERyb3B6b25lKSB7CiAgICAgICAgICAgIGRyb3BBcmVhID0gdGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LCAnZHJvcCcpOwogICAgICAgICAgICB0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmV4dHJhRHJvcHpvbmVzLnB1c2goZHJvcEFyZWEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGRyb3B6b25lcyA9IHRoaXMuX29wdGlvbnMuZHJhZ0FuZERyb3AuZXh0cmFEcm9wem9uZXM7CiAgICAgICAgdmFyIGk7CiAgICAgICAgZm9yIChpPTA7IGkgPCBkcm9wem9uZXMubGVuZ3RoOyBpKyspewogICAgICAgICAgICB0aGlzLl9zZXR1cERyb3B6b25lKGRyb3B6b25lc1tpXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBJRSA8PSA5IGRvZXMgbm90IHN1cHBvcnQgdGhlIEZpbGUgQVBJIHVzZWQgZm9yIGRyYWcrZHJvcCB1cGxvYWRzCiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmRpc2FibGVEZWZhdWx0RHJvcHpvbmUgJiYgKCFxcS5pZSgpIHx8IHFxLmllMTAoKSkpIHsKICAgICAgICAgICAgdGhpcy5fYXR0YWNoKGRvY3VtZW50LCAnZHJhZ2VudGVyJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICBpZiAocXEoZHJvcEFyZWEpLmhhc0NsYXNzKHNlbGYuX2NsYXNzZXMuZHJvcERpc2FibGVkKSkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIGRyb3BBcmVhLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBkcm9wem9uZXMubGVuZ3RoOyBpKyspeyBkcm9wem9uZXNbaV0uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7IH0KCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICB0aGlzLl9hdHRhY2goZG9jdW1lbnQsICdkcmFnbGVhdmUnLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuZHJhZ0FuZERyb3AuaGlkZURyb3B6b25lcyAmJiBxcS5GaW5lVXBsb2FkZXIucHJvdG90eXBlLl9sZWF2aW5nX2RvY3VtZW50X291dChlKSkgewogICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBkcm9wem9uZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBxcShkcm9wem9uZXNbaV0pLmhpZGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHFxKGRvY3VtZW50KS5hdHRhY2goJ2Ryb3AnLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgaWYgKHNlbGYuX29wdGlvbnMuZHJhZ0FuZERyb3AuaGlkZURyb3B6b25lcykgewogICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBkcm9wem9uZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICBxcShkcm9wem9uZXNbaV0pLmhpZGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfSk7CiAgICB9LAogICAgX29uU3VibWl0OiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpewogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25TdWJtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB0aGlzLl9hZGRUb0xpc3QoaWQsIGZpbGVOYW1lKTsKICAgIH0sCiAgICAvLyBVcGRhdGUgdGhlIHByb2dyZXNzIGJhciAmIHBlcmNlbnRhZ2UgYXMgdGhlIGZpbGUgaXMgdXBsb2FkZWQKICAgIF9vblByb2dyZXNzOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIGxvYWRlZCwgdG90YWwpewogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25Qcm9ncmVzcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoKICAgICAgICB2YXIgaXRlbSwgcHJvZ3Jlc3NCYXIsIHRleHQsIHBlcmNlbnQsIGNhbmNlbExpbmssIHNpemU7CgogICAgICAgIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeUZpbGVJZChpZCk7CiAgICAgICAgcHJvZ3Jlc3NCYXIgPSB0aGlzLl9maW5kKGl0ZW0sICdwcm9ncmVzc0JhcicpOwogICAgICAgIHBlcmNlbnQgPSBNYXRoLnJvdW5kKGxvYWRlZCAvIHRvdGFsICogMTAwKTsKCiAgICAgICAgaWYgKGxvYWRlZCA9PT0gdG90YWwpIHsKICAgICAgICAgICAgY2FuY2VsTGluayA9IHRoaXMuX2ZpbmQoaXRlbSwgJ2NhbmNlbCcpOwogICAgICAgICAgICBxcShjYW5jZWxMaW5rKS5oaWRlKCk7CgogICAgICAgICAgICBxcShwcm9ncmVzc0JhcikuaGlkZSgpOwogICAgICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdzdGF0dXNUZXh0JykpLnNldFRleHQodGhpcy5fb3B0aW9ucy50ZXh0LndhaXRpbmdGb3JSZXNwb25zZSk7CgogICAgICAgICAgICAvLyBJZiBsYXN0IGJ5dGUgd2FzIHNlbnQsIGp1c3QgZGlzcGxheSBmaW5hbCBzaXplCiAgICAgICAgICAgIHRleHQgPSB0aGlzLl9mb3JtYXRTaXplKHRvdGFsKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIC8vIElmIHN0aWxsIHVwbG9hZGluZywgZGlzcGxheSBwZXJjZW50YWdlCiAgICAgICAgICAgIHRleHQgPSB0aGlzLl9mb3JtYXRQcm9ncmVzcyhsb2FkZWQsIHRvdGFsKTsKCiAgICAgICAgICAgIHFxKHByb2dyZXNzQmFyKS5jc3Moe2Rpc3BsYXk6ICdibG9jayd9KTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBiYXIgZWxlbWVudAogICAgICAgIHFxKHByb2dyZXNzQmFyKS5jc3Moe3dpZHRoOiBwZXJjZW50ICsgJyUnfSk7CgogICAgICAgIHNpemUgPSB0aGlzLl9maW5kKGl0ZW0sICdzaXplJyk7CiAgICAgICAgcXEoc2l6ZSkuY3NzKHtkaXNwbGF5OiAnaW5saW5lJ30pOwogICAgICAgIHFxKHNpemUpLnNldFRleHQodGV4dCk7CiAgICB9LAogICAgX29uQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSwgcmVzdWx0LCB4aHIpewogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25Db21wbGV0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoKICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGlkKTsKCiAgICAgICAgcXEodGhpcy5fZmluZChpdGVtLCAnc3RhdHVzVGV4dCcpKS5jbGVhclRleHQoKTsKCiAgICAgICAgcXEoaXRlbSkucmVtb3ZlQ2xhc3ModGhpcy5fY2xhc3Nlcy5yZXRyeWluZyk7CiAgICAgICAgcXEodGhpcy5fZmluZChpdGVtLCAncHJvZ3Jlc3NCYXInKSkuaGlkZSgpOwoKICAgICAgICBpZiAoIXRoaXMuX29wdGlvbnMuZGlzYWJsZUNhbmNlbEZvckZvcm1VcGxvYWRzIHx8IHFxLlVwbG9hZEhhbmRsZXJYaHIuaXNTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdjYW5jZWwnKSkuaGlkZSgpOwogICAgICAgIH0KICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdzcGlubmVyJykpLmhpZGUoKTsKCiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKXsKICAgICAgICAgICAgcXEoaXRlbSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzKTsKICAgICAgICAgICAgaWYgKHRoaXMuX2NsYXNzZXMuc3VjY2Vzc0ljb24pIHsKICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmQoaXRlbSwgJ2ZpbmlzaGVkJykuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwogICAgICAgICAgICAgICAgcXEoaXRlbSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzSWNvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBxcShpdGVtKS5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzLmZhaWwpOwogICAgICAgICAgICBpZiAodGhpcy5fY2xhc3Nlcy5mYWlsSWNvbikgewogICAgICAgICAgICAgICAgdGhpcy5fZmluZChpdGVtLCAnZmluaXNoZWQnKS5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CiAgICAgICAgICAgICAgICBxcShpdGVtKS5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzLmZhaWxJY29uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5yZXRyeS5zaG93QnV0dG9uICYmICF0aGlzLl9wcmV2ZW50UmV0cmllc1tpZF0pIHsKICAgICAgICAgICAgICAgIHFxKGl0ZW0pLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMucmV0cnlhYmxlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLl9jb250cm9sRmFpbHVyZVRleHREaXNwbGF5KGl0ZW0sIHJlc3VsdCk7CiAgICAgICAgfQogICAgfSwKICAgIF9vblVwbG9hZDogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCB4aHIpewogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25VcGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeUZpbGVJZChpZCk7CiAgICAgICAgdGhpcy5fc2hvd1NwaW5uZXIoaXRlbSk7CiAgICB9LAogICAgX29uQmVmb3JlQXV0b1JldHJ5OiBmdW5jdGlvbihpZCkgewogICAgICAgIHZhciBpdGVtLCBwcm9ncmVzc0JhciwgY2FuY2VsTGluaywgZmFpbFRleHRFbCwgcmV0cnlOdW1Gb3JEaXNwbGF5LCBtYXhBdXRvLCByZXRyeU5vdGU7CgogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25CZWZvcmVBdXRvUmV0cnkuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgICAgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGlkKTsKICAgICAgICBwcm9ncmVzc0JhciA9IHRoaXMuX2ZpbmQoaXRlbSwgJ3Byb2dyZXNzQmFyJyk7CgogICAgICAgIHRoaXMuX3Nob3dDYW5jZWxMaW5rKGl0ZW0pOwogICAgICAgIHByb2dyZXNzQmFyLnN0eWxlLndpZHRoID0gMDsKICAgICAgICBxcShwcm9ncmVzc0JhcikuaGlkZSgpOwoKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5yZXRyeS5zaG93QXV0b1JldHJ5Tm90ZSkgewogICAgICAgICAgICBmYWlsVGV4dEVsID0gdGhpcy5fZmluZChpdGVtLCAnc3RhdHVzVGV4dCcpOwogICAgICAgICAgICByZXRyeU51bUZvckRpc3BsYXkgPSB0aGlzLl9hdXRvUmV0cmllc1tpZF0gKyAxOwogICAgICAgICAgICBtYXhBdXRvID0gdGhpcy5fb3B0aW9ucy5yZXRyeS5tYXhBdXRvQXR0ZW1wdHM7CgogICAgICAgICAgICByZXRyeU5vdGUgPSB0aGlzLl9vcHRpb25zLnJldHJ5LmF1dG9SZXRyeU5vdGUucmVwbGFjZSgvXHtyZXRyeU51bVx9L2csIHJldHJ5TnVtRm9yRGlzcGxheSk7CiAgICAgICAgICAgIHJldHJ5Tm90ZSA9IHJldHJ5Tm90ZS5yZXBsYWNlKC9ce21heEF1dG9cfS9nLCBtYXhBdXRvKTsKCiAgICAgICAgICAgIHFxKGZhaWxUZXh0RWwpLnNldFRleHQocmV0cnlOb3RlKTsKICAgICAgICAgICAgaWYgKHJldHJ5TnVtRm9yRGlzcGxheSA9PT0gMSkgewogICAgICAgICAgICAgICAgcXEoaXRlbSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5yZXRyeWluZyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgLy9yZXR1cm4gZmFsc2UgaWYgd2Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRoZSByZXF1ZXN0ZWQgcmV0cnkKICAgIF9vbkJlZm9yZU1hbnVhbFJldHJ5OiBmdW5jdGlvbihpZCkgewogICAgICAgIGlmIChxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uQmVmb3JlTWFudWFsUmV0cnkuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgewogICAgICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGlkKTsKICAgICAgICAgICAgdGhpcy5fZmluZChpdGVtLCAncHJvZ3Jlc3NCYXInKS5zdHlsZS53aWR0aCA9IDA7CiAgICAgICAgICAgIHFxKGl0ZW0pLnJlbW92ZUNsYXNzKHRoaXMuX2NsYXNzZXMuZmFpbCk7CiAgICAgICAgICAgIHRoaXMuX3Nob3dTcGlubmVyKGl0ZW0pOwogICAgICAgICAgICB0aGlzLl9zaG93Q2FuY2VsTGluayhpdGVtKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICBfYWRkVG9MaXN0OiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpewogICAgICAgIHZhciBpdGVtID0gcXEudG9FbGVtZW50KHRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlKTsKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5kaXNhYmxlQ2FuY2VsRm9yRm9ybVVwbG9hZHMgJiYgIXFxLlVwbG9hZEhhbmRsZXJYaHIuaXNTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICB2YXIgY2FuY2VsTGluayA9IHRoaXMuX2ZpbmQoaXRlbSwgJ2NhbmNlbCcpOwogICAgICAgICAgICBxcShjYW5jZWxMaW5rKS5yZW1vdmUoKTsKICAgICAgICB9CgogICAgICAgIGl0ZW0ucXFGaWxlSWQgPSBpZDsKCiAgICAgICAgdmFyIGZpbGVFbGVtZW50ID0gdGhpcy5fZmluZChpdGVtLCAnZmlsZScpOwogICAgICAgIHFxKGZpbGVFbGVtZW50KS5zZXRUZXh0KHRoaXMuX2Zvcm1hdEZpbGVOYW1lKGZpbGVOYW1lKSk7CiAgICAgICAgcXEodGhpcy5fZmluZChpdGVtLCAnc2l6ZScpKS5oaWRlKCk7CiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLm11bHRpcGxlKSB0aGlzLl9jbGVhckxpc3QoKTsKICAgICAgICB0aGlzLl9saXN0RWxlbWVudC5hcHBlbmRDaGlsZChpdGVtKTsKICAgIH0sCiAgICBfY2xlYXJMaXN0OiBmdW5jdGlvbigpewogICAgICAgIHRoaXMuX2xpc3RFbGVtZW50LmlubmVySFRNTCA9ICcnOwogICAgICAgIHRoaXMuY2xlYXJTdG9yZWRGaWxlcygpOwogICAgfSwKICAgIC8qKgogICAgICogZGVsZWdhdGUgY2xpY2sgZXZlbnQgZm9yIGNhbmNlbCAmIHJldHJ5IGxpbmtzCiAgICAgKiovCiAgICBfYmluZENhbmNlbEFuZFJldHJ5RXZlbnRzOiBmdW5jdGlvbigpewogICAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICAgICAgbGlzdCA9IHRoaXMuX2xpc3RFbGVtZW50OwoKICAgICAgICB0aGlzLl9hdHRhY2gobGlzdCwgJ2NsaWNrJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICAgICAgICAgICAgdmFyIHRhcmdldCA9IGUudGFyZ2V0IHx8IGUuc3JjRWxlbWVudDsKCiAgICAgICAgICAgIGlmIChxcSh0YXJnZXQpLmhhc0NsYXNzKHNlbGYuX2NsYXNzZXMuY2FuY2VsKSB8fCBxcSh0YXJnZXQpLmhhc0NsYXNzKHNlbGYuX2NsYXNzZXMucmV0cnkpKXsKICAgICAgICAgICAgICAgIHFxLnByZXZlbnREZWZhdWx0KGUpOwoKICAgICAgICAgICAgICAgIHZhciBpdGVtID0gdGFyZ2V0LnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICB3aGlsZShpdGVtLnFxRmlsZUlkID09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAocXEodGFyZ2V0KS5oYXNDbGFzcyhzZWxmLl9jbGFzc2VzLmNhbmNlbCkpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbmNlbChpdGVtLnFxRmlsZUlkKTsKICAgICAgICAgICAgICAgICAgICBxcShpdGVtKS5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHFxKGl0ZW0pLnJlbW92ZUNsYXNzKHNlbGYuX2NsYXNzZXMucmV0cnlhYmxlKTsKICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHJ5KGl0ZW0ucXFGaWxlSWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9LAogICAgX2Zvcm1hdFByb2dyZXNzOiBmdW5jdGlvbiAodXBsb2FkZWRTaXplLCB0b3RhbFNpemUpIHsKICAgICAgICB2YXIgbWVzc2FnZSA9IHRoaXMuX29wdGlvbnMudGV4dC5mb3JtYXRQcm9ncmVzczsKICAgICAgICBmdW5jdGlvbiByKG5hbWUsIHJlcGxhY2VtZW50KSB7IG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UobmFtZSwgcmVwbGFjZW1lbnQpOyB9CgogICAgICAgIHIoJ3twZXJjZW50fScsIE1hdGgucm91bmQodXBsb2FkZWRTaXplIC8gdG90YWxTaXplICogMTAwKSk7CiAgICAgICAgcigne3RvdGFsX3NpemV9JywgdGhpcy5fZm9ybWF0U2l6ZSh0b3RhbFNpemUpKTsKICAgICAgICByZXR1cm4gbWVzc2FnZTsKICAgIH0sCiAgICBfY29udHJvbEZhaWx1cmVUZXh0RGlzcGxheTogZnVuY3Rpb24oaXRlbSwgcmVzcG9uc2UpIHsKICAgICAgICB2YXIgbW9kZSwgbWF4Q2hhcnMsIHJlc3BvbnNlUHJvcGVydHksIGZhaWx1cmVSZWFzb24sIHNob3J0RmFpbHVyZVJlYXNvbjsKCiAgICAgICAgbW9kZSA9IHRoaXMuX29wdGlvbnMuZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkubW9kZTsKICAgICAgICBtYXhDaGFycyA9IHRoaXMuX29wdGlvbnMuZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkubWF4Q2hhcnM7CiAgICAgICAgcmVzcG9uc2VQcm9wZXJ0eSA9IHRoaXMuX29wdGlvbnMuZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkucmVzcG9uc2VQcm9wZXJ0eTsKCiAgICAgICAgaWYgKG1vZGUgPT09ICdjdXN0b20nKSB7CiAgICAgICAgICAgIGZhaWx1cmVSZWFzb24gPSByZXNwb25zZVtyZXNwb25zZVByb3BlcnR5XTsKICAgICAgICAgICAgaWYgKGZhaWx1cmVSZWFzb24pIHsKICAgICAgICAgICAgICAgIGlmIChmYWlsdXJlUmVhc29uLmxlbmd0aCA+IG1heENoYXJzKSB7CiAgICAgICAgICAgICAgICAgICAgc2hvcnRGYWlsdXJlUmVhc29uID0gZmFpbHVyZVJlYXNvbi5zdWJzdHJpbmcoMCwgbWF4Q2hhcnMpICsgJy4uLic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBmYWlsdXJlUmVhc29uID0gdGhpcy5fb3B0aW9ucy50ZXh0LmZhaWxVcGxvYWQ7CiAgICAgICAgICAgICAgICB0aGlzLmxvZygiJyIgKyByZXNwb25zZVByb3BlcnR5ICsgIicgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgb24gdGhlIHNlcnZlciByZXNwb25zZS4iLCAnd2FybicpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdzdGF0dXNUZXh0JykpLnNldFRleHQoc2hvcnRGYWlsdXJlUmVhc29uIHx8IGZhaWx1cmVSZWFzb24pOwoKICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkuZW5hYmxlVG9vbHRpcCkgewogICAgICAgICAgICAgICAgdGhpcy5fc2hvd1Rvb2x0aXAoaXRlbSwgZmFpbHVyZVJlYXNvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobW9kZSA9PT0gJ2RlZmF1bHQnKSB7CiAgICAgICAgICAgIHFxKHRoaXMuX2ZpbmQoaXRlbSwgJ3N0YXR1c1RleHQnKSkuc2V0VGV4dCh0aGlzLl9vcHRpb25zLnRleHQuZmFpbFVwbG9hZCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKG1vZGUgIT09ICdub25lJykgewogICAgICAgICAgICB0aGlzLmxvZygiZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkubW9kZSB2YWx1ZSBvZiAnIiArIG1vZGUgKyAiJyBpcyBub3QgdmFsaWQiLCAnd2FybicpOwogICAgICAgIH0KICAgIH0sCiAgICAvL1RPRE8gdHVybiB0aGlzIGludG8gYSByZWFsIHRvb2x0aXAsIHdpdGggY2xpY2sgdHJpZ2dlciAoc28gaXQgaXMgdXNhYmxlIG9uIG1vYmlsZSBkZXZpY2VzKS4gIFNlZSBjYXNlICMzNTUgZm9yIGRldGFpbHMuCiAgICBfc2hvd1Rvb2x0aXA6IGZ1bmN0aW9uKGl0ZW0sIHRleHQpIHsKICAgICAgICBpdGVtLnRpdGxlID0gdGV4dDsKICAgIH0sCiAgICBfc2hvd1NwaW5uZXI6IGZ1bmN0aW9uKGl0ZW0pIHsKICAgICAgICB2YXIgc3Bpbm5lckVsID0gdGhpcy5fZmluZChpdGVtLCAnc3Bpbm5lcicpOwogICAgICAgIHNwaW5uZXJFbC5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CiAgICB9LAogICAgX3Nob3dDYW5jZWxMaW5rOiBmdW5jdGlvbihpdGVtKSB7CiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmRpc2FibGVDYW5jZWxGb3JGb3JtVXBsb2FkcyB8fCBxcS5VcGxvYWRIYW5kbGVyWGhyLmlzU3VwcG9ydGVkKCkpIHsKICAgICAgICAgICAgdmFyIGNhbmNlbExpbmsgPSB0aGlzLl9maW5kKGl0ZW0sICdjYW5jZWwnKTsKICAgICAgICAgICAgY2FuY2VsTGluay5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7CiAgICAgICAgfQogICAgfSwKICAgIF9lcnJvcjogZnVuY3Rpb24oY29kZSwgZmlsZU5hbWUpewogICAgICAgIHZhciBtZXNzYWdlID0gcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9lcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIHRoaXMuX29wdGlvbnMuc2hvd01lc3NhZ2UobWVzc2FnZSk7CiAgICB9Cn0pOwoKcXEuVXBsb2FkRHJvcFpvbmUgPSBmdW5jdGlvbihvKXsKICAgIHRoaXMuX29wdGlvbnMgPSB7CiAgICAgICAgZWxlbWVudDogbnVsbCwKICAgICAgICBvbkVudGVyOiBmdW5jdGlvbihlKXt9LAogICAgICAgIG9uTGVhdmU6IGZ1bmN0aW9uKGUpe30sCiAgICAgICAgLy8gaXMgbm90IGZpcmVkIHdoZW4gbGVhdmluZyBlbGVtZW50IGJ5IGhvdmVyaW5nIGRlc2NlbmRhbnRzCiAgICAgICAgb25MZWF2ZU5vdERlc2NlbmRhbnRzOiBmdW5jdGlvbihlKXt9LAogICAgICAgIG9uRHJvcDogZnVuY3Rpb24oZSl7fQogICAgfTsKICAgIHFxLmV4dGVuZCh0aGlzLl9vcHRpb25zLCBvKTsKICAgIHFxLmV4dGVuZCh0aGlzLCBxcS5EaXNwb3NlU3VwcG9ydCk7CgogICAgdGhpcy5fZWxlbWVudCA9IHRoaXMuX29wdGlvbnMuZWxlbWVudDsKCiAgICB0aGlzLl9kaXNhYmxlRHJvcE91dHNpZGUoKTsKICAgIHRoaXMuX2F0dGFjaEV2ZW50cygpOwp9OwoKcXEuVXBsb2FkRHJvcFpvbmUucHJvdG90eXBlID0gewogICAgX2RyYWdvdmVyX3Nob3VsZF9iZV9jYW5jZWxlZDogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gcXEuc2FmYXJpKCkgfHwgKHFxLmZpcmVmb3goKSAmJiBxcS53aW5kb3dzKCkpOwogICAgfSwKICAgIF9kaXNhYmxlRHJvcE91dHNpZGU6IGZ1bmN0aW9uKGUpewogICAgICAgIC8vIHJ1biBvbmx5IG9uY2UgZm9yIGFsbCBpbnN0YW5jZXMKICAgICAgICBpZiAoIXFxLlVwbG9hZERyb3Bab25lLmRyb3BPdXRzaWRlRGlzYWJsZWQgKXsKCiAgICAgICAgICAgIC8vIGZvciB0aGVzZSBjYXNlcyB3ZSBuZWVkIHRvIGNhdGNoIG9uRHJvcCB0byByZXNldCBkcm9wQXJlYQogICAgICAgICAgICBpZiAodGhpcy5fZHJhZ292ZXJfc2hvdWxkX2JlX2NhbmNlbGVkKXsKICAgICAgICAgICAgICAgIHFxKGRvY3VtZW50KS5hdHRhY2goJ2RyYWdvdmVyJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBxcShkb2N1bWVudCkuYXR0YWNoKCdkcmFnb3ZlcicsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgICAgIGlmIChlLmRhdGFUcmFuc2Zlcil7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbm9uZSc7CiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcXEuVXBsb2FkRHJvcFpvbmUuZHJvcE91dHNpZGVEaXNhYmxlZCA9IHRydWU7CiAgICAgICAgfQogICAgfSwKICAgIF9hdHRhY2hFdmVudHM6IGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgICBzZWxmLl9hdHRhY2goc2VsZi5fZWxlbWVudCwgJ2RyYWdvdmVyJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGlmICghc2VsZi5faXNWYWxpZEZpbGVEcmFnKGUpKSByZXR1cm47CgogICAgICAgICAgICB2YXIgZWZmZWN0ID0gcXEuaWUoKSA/IG51bGwgOiBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkOwogICAgICAgICAgICBpZiAoZWZmZWN0ID09ICdtb3ZlJyB8fCBlZmZlY3QgPT0gJ2xpbmtNb3ZlJyl7CiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ21vdmUnOyAvLyBmb3IgRkYgKG9ubHkgbW92ZSBhbGxvd2VkKQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdjb3B5JzsgLy8gZm9yIENocm9tZQogICAgICAgICAgICB9CgogICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgfSk7CgogICAgICAgIHNlbGYuX2F0dGFjaChzZWxmLl9lbGVtZW50LCAnZHJhZ2VudGVyJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGlmICghc2VsZi5faXNWYWxpZEZpbGVEcmFnKGUpKSByZXR1cm47CgogICAgICAgICAgICBzZWxmLl9vcHRpb25zLm9uRW50ZXIoZSk7CiAgICAgICAgfSk7CgogICAgICAgIHNlbGYuX2F0dGFjaChzZWxmLl9lbGVtZW50LCAnZHJhZ2xlYXZlJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGlmICghc2VsZi5faXNWYWxpZEZpbGVEcmFnKGUpKSByZXR1cm47CgogICAgICAgICAgICBzZWxmLl9vcHRpb25zLm9uTGVhdmUoZSk7CgogICAgICAgICAgICB2YXIgcmVsYXRlZFRhcmdldCA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpOwogICAgICAgICAgICAvLyBkbyBub3QgZmlyZSB3aGVuIG1vdmluZyBhIG1vdXNlIG92ZXIgYSBkZXNjZW5kYW50CiAgICAgICAgICAgIGlmIChxcSh0aGlzKS5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkgcmV0dXJuOwoKICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5vbkxlYXZlTm90RGVzY2VuZGFudHMoZSk7CiAgICAgICAgfSk7CgogICAgICAgIHNlbGYuX2F0dGFjaChzZWxmLl9lbGVtZW50LCAnZHJvcCcsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBpZiAoIXNlbGYuX2lzVmFsaWRGaWxlRHJhZyhlKSkgcmV0dXJuOwoKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICBzZWxmLl9vcHRpb25zLm9uRHJvcChlKTsKICAgICAgICB9KTsKICAgIH0sCiAgICBfaXNWYWxpZEZpbGVEcmFnOiBmdW5jdGlvbihlKXsKICAgICAgICAvLyBlLmRhdGFUcmFuc2ZlciBjdXJyZW50bHkgY2F1c2luZyBJRSBlcnJvcnMKICAgICAgICAvLyBJRTkgZG9lcyBOT1Qgc3VwcG9ydCBmaWxlIEFQSSwgc28gZHJhZy1hbmQtZHJvcCBpcyBub3QgcG9zc2libGUKICAgICAgICBpZiAocXEuaWUoKSAmJiAhcXEuaWUxMCgpKSByZXR1cm4gZmFsc2U7CgogICAgICAgIHZhciBkdCA9IGUuZGF0YVRyYW5zZmVyLAogICAgICAgIC8vIGRvIG5vdCBjaGVjayBkdC50eXBlcy5jb250YWlucyBpbiB3ZWJraXQsIGJlY2F1c2UgaXQgY3Jhc2hlcyBzYWZhcmkgNAogICAgICAgICAgICBpc1NhZmFyaSA9IHFxLnNhZmFyaSgpOwoKICAgICAgICAvLyBkdC5lZmZlY3RBbGxvd2VkIGlzIG5vbmUgaW4gU2FmYXJpIDUKICAgICAgICAvLyBkdC50eXBlcy5jb250YWlucyBjaGVjayBpcyBmb3IgZmlyZWZveAogICAgICAgIHZhciBlZmZlY3RUZXN0ID0gcXEuaWUxMCgpID8gdHJ1ZSA6IGR0LmVmZmVjdEFsbG93ZWQgIT0gJ25vbmUnOwogICAgICAgIHJldHVybiBkdCAmJiBlZmZlY3RUZXN0ICYmIChkdC5maWxlcyB8fCAoIWlzU2FmYXJpICYmIGR0LnR5cGVzLmNvbnRhaW5zICYmIGR0LnR5cGVzLmNvbnRhaW5zKCdGaWxlcycpKSk7CiAgICB9Cn07Ci8qKgogKiBDbGFzcyBmb3IgdXBsb2FkaW5nIGZpbGVzLCB1cGxvYWRpbmcgaXRzZWxmIGlzIGhhbmRsZWQgYnkgY2hpbGQgY2xhc3NlcwogKi8KcXEuVXBsb2FkSGFuZGxlckFic3RyYWN0ID0gZnVuY3Rpb24obyl7CiAgICAvLyBEZWZhdWx0IG9wdGlvbnMsIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyCiAgICB0aGlzLl9vcHRpb25zID0gewogICAgICAgIGRlYnVnOiBmYWxzZSwKICAgICAgICBlbmRwb2ludDogJy91cGxvYWQucGhwJywKICAgICAgICAvLyBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IHVwbG9hZHMKICAgICAgICBtYXhDb25uZWN0aW9uczogOTk5LAogICAgICAgIGxvZzogZnVuY3Rpb24oc3RyLCBsZXZlbCkge30sCiAgICAgICAgb25Qcm9ncmVzczogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCBsb2FkZWQsIHRvdGFsKXt9LAogICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSwgcmVzcG9uc2UsIHhocil7fSwKICAgICAgICBvbkNhbmNlbDogZnVuY3Rpb24oaWQsIGZpbGVOYW1lKXt9LAogICAgICAgIG9uVXBsb2FkOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUsIHhocil7fSwKICAgICAgICBvbkF1dG9SZXRyeTogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCByZXNwb25zZSwgeGhyKXt9CgogICAgfTsKICAgIHFxLmV4dGVuZCh0aGlzLl9vcHRpb25zLCBvKTsKCiAgICB0aGlzLl9xdWV1ZSA9IFtdOwogICAgLy8gcGFyYW1zIGZvciBmaWxlcyBpbiBxdWV1ZQogICAgdGhpcy5fcGFyYW1zID0gW107CgogICAgdGhpcy5sb2cgPSB0aGlzLl9vcHRpb25zLmxvZzsKfTsKcXEuVXBsb2FkSGFuZGxlckFic3RyYWN0LnByb3RvdHlwZSA9IHsKICAgIC8qKgogICAgICogQWRkcyBmaWxlIG9yIGZpbGUgaW5wdXQgdG8gdGhlIHF1ZXVlCiAgICAgKiBAcmV0dXJucyBpZAogICAgICoqLwogICAgYWRkOiBmdW5jdGlvbihmaWxlKXt9LAogICAgLyoqCiAgICAgKiBTZW5kcyB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IGlkIGFuZCBhZGRpdGlvbmFsIHF1ZXJ5IHBhcmFtcyB0byB0aGUgc2VydmVyCiAgICAgKi8KICAgIHVwbG9hZDogZnVuY3Rpb24oaWQsIHBhcmFtcyl7CiAgICAgICAgdmFyIGxlbiA9IHRoaXMuX3F1ZXVlLnB1c2goaWQpOwoKICAgICAgICB2YXIgY29weSA9IHt9OwogICAgICAgIHFxLmV4dGVuZChjb3B5LCBwYXJhbXMpOwogICAgICAgIHRoaXMuX3BhcmFtc1tpZF0gPSBjb3B5OwoKICAgICAgICAvLyBpZiB0b28gbWFueSBhY3RpdmUgdXBsb2Fkcywgd2FpdC4uLgogICAgICAgIGlmIChsZW4gPD0gdGhpcy5fb3B0aW9ucy5tYXhDb25uZWN0aW9ucyl7CiAgICAgICAgICAgIHRoaXMuX3VwbG9hZChpZCwgdGhpcy5fcGFyYW1zW2lkXSk7CiAgICAgICAgfQogICAgfSwKICAgIHJldHJ5OiBmdW5jdGlvbihpZCkgewogICAgICAgIHZhciBpID0gcXEuaW5kZXhPZih0aGlzLl9xdWV1ZSwgaWQpOwogICAgICAgIGlmIChpID49IDApIHsKICAgICAgICAgICAgdGhpcy5fdXBsb2FkKGlkLCB0aGlzLl9wYXJhbXNbaWRdKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMudXBsb2FkKGlkLCB0aGlzLl9wYXJhbXNbaWRdKTsKICAgICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBDYW5jZWxzIGZpbGUgdXBsb2FkIGJ5IGlkCiAgICAgKi8KICAgIGNhbmNlbDogZnVuY3Rpb24oaWQpewogICAgICAgIHRoaXMubG9nKCdDYW5jZWxsaW5nICcgKyBpZCk7CiAgICAgICAgdGhpcy5fY2FuY2VsKGlkKTsKICAgICAgICB0aGlzLl9kZXF1ZXVlKGlkKTsKICAgIH0sCiAgICAvKioKICAgICAqIENhbmNlbGxzIGFsbCB1cGxvYWRzCiAgICAgKi8KICAgIGNhbmNlbEFsbDogZnVuY3Rpb24oKXsKICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5fcXVldWUubGVuZ3RoOyBpKyspewogICAgICAgICAgICB0aGlzLl9jYW5jZWwodGhpcy5fcXVldWVbaV0pOwogICAgICAgIH0KICAgICAgICB0aGlzLl9xdWV1ZSA9IFtdOwogICAgfSwKICAgIC8qKgogICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkgaWQKICAgICAqLwogICAgZ2V0TmFtZTogZnVuY3Rpb24oaWQpe30sCiAgICAvKioKICAgICAqIFJldHVybnMgc2l6ZSBvZiB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IGlkCiAgICAgKi8KICAgIGdldFNpemU6IGZ1bmN0aW9uKGlkKXt9LAogICAgLyoqCiAgICAgKiBSZXR1cm5zIGlkIG9mIGZpbGVzIGJlaW5nIHVwbG9hZGVkIG9yCiAgICAgKiB3YWl0aW5nIGZvciB0aGVpciB0dXJuCiAgICAgKi8KICAgIGdldFF1ZXVlOiBmdW5jdGlvbigpewogICAgICAgIHJldHVybiB0aGlzLl9xdWV1ZTsKICAgIH0sCiAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgdGhpcy5sb2coJ1Jlc2V0dGluZyB1cGxvYWQgaGFuZGxlcicpOwogICAgICAgIHRoaXMuX3F1ZXVlID0gW107CiAgICAgICAgdGhpcy5fcGFyYW1zID0gW107CiAgICB9LAogICAgLyoqCiAgICAgKiBBY3R1YWwgdXBsb2FkIG1ldGhvZAogICAgICovCiAgICBfdXBsb2FkOiBmdW5jdGlvbihpZCl7fSwKICAgIC8qKgogICAgICogQWN0dWFsIGNhbmNlbCBtZXRob2QKICAgICAqLwogICAgX2NhbmNlbDogZnVuY3Rpb24oaWQpe30sCiAgICAvKioKICAgICAqIFJlbW92ZXMgZWxlbWVudCBmcm9tIHF1ZXVlLCBzdGFydHMgdXBsb2FkIG9mIG5leHQKICAgICAqLwogICAgX2RlcXVldWU6IGZ1bmN0aW9uKGlkKXsKICAgICAgICB2YXIgaSA9IHFxLmluZGV4T2YodGhpcy5fcXVldWUsIGlkKTsKICAgICAgICB0aGlzLl9xdWV1ZS5zcGxpY2UoaSwgMSk7CgogICAgICAgIHZhciBtYXggPSB0aGlzLl9vcHRpb25zLm1heENvbm5lY3Rpb25zOwoKICAgICAgICBpZiAodGhpcy5fcXVldWUubGVuZ3RoID49IG1heCAmJiBpIDwgbWF4KXsKICAgICAgICAgICAgdmFyIG5leHRJZCA9IHRoaXMuX3F1ZXVlW21heC0xXTsKICAgICAgICAgICAgdGhpcy5fdXBsb2FkKG5leHRJZCwgdGhpcy5fcGFyYW1zW25leHRJZF0pOwogICAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIERldGVybWluZSBpZiB0aGUgZmlsZSBleGlzdHMuCiAgICAgKi8KICAgIGlzVmFsaWQ6IGZ1bmN0aW9uKGlkKSB7fQp9OwovKioKICogQ2xhc3MgZm9yIHVwbG9hZGluZyBmaWxlcyB1c2luZyBmb3JtIGFuZCBpZnJhbWUKICogQGluaGVyaXRzIHFxLlVwbG9hZEhhbmRsZXJBYnN0cmFjdAogKi8KcXEuVXBsb2FkSGFuZGxlckZvcm0gPSBmdW5jdGlvbihvKXsKICAgIHFxLlVwbG9hZEhhbmRsZXJBYnN0cmFjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoKICAgIHRoaXMuX2lucHV0cyA9IHt9OwogICAgdGhpcy5fZGV0YWNoX2xvYWRfZXZlbnRzID0ge307Cn07Ci8vIEBpbmhlcml0cyBxcS5VcGxvYWRIYW5kbGVyQWJzdHJhY3QKcXEuZXh0ZW5kKHFxLlVwbG9hZEhhbmRsZXJGb3JtLnByb3RvdHlwZSwgcXEuVXBsb2FkSGFuZGxlckFic3RyYWN0LnByb3RvdHlwZSk7CgpxcS5leHRlbmQocXEuVXBsb2FkSGFuZGxlckZvcm0ucHJvdG90eXBlLCB7CiAgICBhZGQ6IGZ1bmN0aW9uKGZpbGVJbnB1dCl7CiAgICAgICAgZmlsZUlucHV0LnNldEF0dHJpYnV0ZSgnbmFtZScsIHRoaXMuX29wdGlvbnMuaW5wdXROYW1lKTsKICAgICAgICB2YXIgaWQgPSAncXEtdXBsb2FkLWhhbmRsZXItaWZyYW1lJyArIHFxLmdldFVuaXF1ZUlkKCk7CgogICAgICAgIHRoaXMuX2lucHV0c1tpZF0gPSBmaWxlSW5wdXQ7CgogICAgICAgIC8vIHJlbW92ZSBmaWxlIGlucHV0IGZyb20gRE9NCiAgICAgICAgaWYgKGZpbGVJbnB1dC5wYXJlbnROb2RlKXsKICAgICAgICAgICAgcXEoZmlsZUlucHV0KS5yZW1vdmUoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpZDsKICAgIH0sCiAgICBnZXROYW1lOiBmdW5jdGlvbihpZCl7CiAgICAgICAgLy8gZ2V0IGlucHV0IHZhbHVlIGFuZCByZW1vdmUgcGF0aCB0byBub3JtYWxpemUKICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzW2lkXS52YWx1ZS5yZXBsYWNlKC8uKihcL3xcXCkvLCAiIik7CiAgICB9LAogICAgaXNWYWxpZDogZnVuY3Rpb24oaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRzW2lkXSAhPT0gdW5kZWZpbmVkOwogICAgfSwKICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgICBxcS5VcGxvYWRIYW5kbGVyQWJzdHJhY3QucHJvdG90eXBlLnJlc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgdGhpcy5faW5wdXRzID0ge307CiAgICAgICAgdGhpcy5fZGV0YWNoX2xvYWRfZXZlbnRzID0ge307CiAgICB9LAogICAgX2NhbmNlbDogZnVuY3Rpb24oaWQpewogICAgICAgIHRoaXMuX29wdGlvbnMub25DYW5jZWwoaWQsIHRoaXMuZ2V0TmFtZShpZCkpOwoKICAgICAgICBkZWxldGUgdGhpcy5faW5wdXRzW2lkXTsKICAgICAgICBkZWxldGUgdGhpcy5fZGV0YWNoX2xvYWRfZXZlbnRzW2lkXTsKCiAgICAgICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgICBpZiAoaWZyYW1lKXsKICAgICAgICAgICAgLy8gdG8gY2FuY2VsIHJlcXVlc3Qgc2V0IHNyYyB0byBzb21ldGhpbmcgZWxzZQogICAgICAgICAgICAvLyB3ZSB1c2Ugc3JjPSJqYXZhc2NyaXB0OmZhbHNlOyIgYmVjYXVzZSBpdCBkb2Vzbid0CiAgICAgICAgICAgIC8vIHRyaWdnZXIgaWU2IHByb21wdCBvbiBodHRwcwogICAgICAgICAgICBpZnJhbWUuc2V0QXR0cmlidXRlKCdzcmMnLCAnamF2YXNjcmlwdDpmYWxzZTsnKTsKCiAgICAgICAgICAgIHFxKGlmcmFtZSkucmVtb3ZlKCk7CiAgICAgICAgfQogICAgfSwKICAgIF91cGxvYWQ6IGZ1bmN0aW9uKGlkLCBwYXJhbXMpewogICAgICAgIHRoaXMuX29wdGlvbnMub25VcGxvYWQoaWQsIHRoaXMuZ2V0TmFtZShpZCksIGZhbHNlKTsKICAgICAgICB2YXIgaW5wdXQgPSB0aGlzLl9pbnB1dHNbaWRdOwoKICAgICAgICBpZiAoIWlucHV0KXsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdmaWxlIHdpdGggcGFzc2VkIGlkIHdhcyBub3QgYWRkZWQsIG9yIGFscmVhZHkgdXBsb2FkZWQgb3IgY2FuY2VsbGVkJyk7CiAgICAgICAgfQoKICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLmdldE5hbWUoaWQpOwogICAgICAgIHBhcmFtc1t0aGlzLl9vcHRpb25zLmlucHV0TmFtZV0gPSBmaWxlTmFtZTsKCiAgICAgICAgdmFyIGlmcmFtZSA9IHRoaXMuX2NyZWF0ZUlmcmFtZShpZCk7CiAgICAgICAgdmFyIGZvcm0gPSB0aGlzLl9jcmVhdGVGb3JtKGlmcmFtZSwgcGFyYW1zKTsKICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTsKCiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHRoaXMuX2F0dGFjaExvYWRFdmVudChpZnJhbWUsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHNlbGYubG9nKCdpZnJhbWUgbG9hZGVkJyk7CgogICAgICAgICAgICB2YXIgcmVzcG9uc2UgPSBzZWxmLl9nZXRJZnJhbWVDb250ZW50SlNPTihpZnJhbWUpOwoKICAgICAgICAgICAgLy8gdGltZW91dCBhZGRlZCB0byBmaXggYnVzeSBzdGF0ZSBpbiBGRjMuNgogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICBzZWxmLl9kZXRhY2hfbG9hZF9ldmVudHNbaWRdKCk7CiAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5fZGV0YWNoX2xvYWRfZXZlbnRzW2lkXTsKICAgICAgICAgICAgICAgIHFxKGlmcmFtZSkucmVtb3ZlKCk7CiAgICAgICAgICAgIH0sIDEpOwoKICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5vbkF1dG9SZXRyeShpZCwgZmlsZU5hbWUsIHJlc3BvbnNlKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBzZWxmLl9vcHRpb25zLm9uQ29tcGxldGUoaWQsIGZpbGVOYW1lLCByZXNwb25zZSk7CiAgICAgICAgICAgIHNlbGYuX2RlcXVldWUoaWQpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLmxvZygnU2VuZGluZyB1cGxvYWQgcmVxdWVzdCBmb3IgJyArIGlkKTsKICAgICAgICBmb3JtLnN1Ym1pdCgpOwogICAgICAgIHFxKGZvcm0pLnJlbW92ZSgpOwoKICAgICAgICByZXR1cm4gaWQ7CiAgICB9LAogICAgX2F0dGFjaExvYWRFdmVudDogZnVuY3Rpb24oaWZyYW1lLCBjYWxsYmFjayl7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgIHRoaXMuX2RldGFjaF9sb2FkX2V2ZW50c1tpZnJhbWUuaWRdID0gcXEoaWZyYW1lKS5hdHRhY2goJ2xvYWQnLCBmdW5jdGlvbigpewogICAgICAgICAgICBzZWxmLmxvZygnUmVjZWl2ZWQgcmVzcG9uc2UgZm9yICcgKyBpZnJhbWUuaWQpOwoKICAgICAgICAgICAgLy8gd2hlbiB3ZSByZW1vdmUgaWZyYW1lIGZyb20gZG9tCiAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHN0b3BzLCBidXQgaW4gSUUgbG9hZAogICAgICAgICAgICAvLyBldmVudCBmaXJlcwogICAgICAgICAgICBpZiAoIWlmcmFtZS5wYXJlbnROb2RlKXsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIC8vIGZpeGluZyBPcGVyYSAxMC41MwogICAgICAgICAgICAgICAgaWYgKGlmcmFtZS5jb250ZW50RG9jdW1lbnQgJiYKICAgICAgICAgICAgICAgICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkgJiYKICAgICAgICAgICAgICAgICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkuaW5uZXJIVE1MID09ICJmYWxzZSIpewogICAgICAgICAgICAgICAgICAgIC8vIEluIE9wZXJhIGV2ZW50IGlzIGZpcmVkIHNlY29uZCB0aW1lCiAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBib2R5LmlubmVySFRNTCBjaGFuZ2VkIGZyb20gZmFsc2UKICAgICAgICAgICAgICAgICAgICAvLyB0byBzZXJ2ZXIgcmVzcG9uc2UgYXBwcm94LiBhZnRlciAxIHNlYwogICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gd2UgdXBsb2FkIGZpbGUgd2l0aCBpZnJhbWUKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICAvL0lFIG1heSB0aHJvdyBhbiAiYWNjZXNzIGlzIGRlbmllZCIgZXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBjb250ZW50RG9jdW1lbnQgb24gdGhlIGlmcmFtZSBpbiBzb21lIGNhc2VzCiAgICAgICAgICAgICAgICBzZWxmLmxvZygnRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBpZnJhbWUgZHVyaW5nIGhhbmRsaW5nIG9mIHVwbG9hZCByZXNwb25zZSAoJyArIGVycm9yICsgIikiLCAnZXJyb3InKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2FsbGJhY2soKTsKICAgICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIFJldHVybnMganNvbiBvYmplY3QgcmVjZWl2ZWQgYnkgaWZyYW1lIGZyb20gc2VydmVyLgogICAgICovCiAgICBfZ2V0SWZyYW1lQ29udGVudEpTT046IGZ1bmN0aW9uKGlmcmFtZSl7CiAgICAgICAgLy9JRSBtYXkgdGhyb3cgYW4gImFjY2VzcyBpcyBkZW5pZWQiIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgY29udGVudERvY3VtZW50IG9uIHRoZSBpZnJhbWUgaW4gc29tZSBjYXNlcwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8vIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50IC0gZm9yIElFPDcKICAgICAgICAgICAgdmFyIGRvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgPyBpZnJhbWUuY29udGVudERvY3VtZW50OiBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudCwKICAgICAgICAgICAgICAgIHJlc3BvbnNlOwoKICAgICAgICAgICAgdmFyIGlubmVySFRNTCA9IGRvYy5ib2R5LmlubmVySFRNTDsKICAgICAgICAgICAgdGhpcy5sb2coImNvbnZlcnRpbmcgaWZyYW1lJ3MgaW5uZXJIVE1MIHRvIEpTT04iKTsKICAgICAgICAgICAgdGhpcy5sb2coImlubmVySFRNTCA9ICIgKyBpbm5lckhUTUwpOwogICAgICAgICAgICAvL3BsYWluIHRleHQgcmVzcG9uc2UgbWF5IGJlIHdyYXBwZWQgaW4gPHByZT4gdGFnCiAgICAgICAgICAgIGlmIChpbm5lckhUTUwgJiYgaW5uZXJIVE1MLm1hdGNoKC9ePHByZS9pKSkgewogICAgICAgICAgICAgICAgaW5uZXJIVE1MID0gZG9jLmJvZHkuZmlyc3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXNwb25zZSA9IGV2YWwoIigiICsgaW5uZXJIVE1MICsgIikiKTsKICAgICAgICB9IGNhdGNoKGVycm9yKXsKICAgICAgICAgICAgdGhpcy5sb2coJ0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBwYXJzZSBmb3JtIHVwbG9hZCByZXNwb25zZSAoJyArIGVycm9yICsgIikiLCAnZXJyb3InKTsKICAgICAgICAgICAgcmVzcG9uc2UgPSB7c3VjY2VzczogZmFsc2V9OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSwKICAgIC8qKgogICAgICogQ3JlYXRlcyBpZnJhbWUgd2l0aCB1bmlxdWUgbmFtZQogICAgICovCiAgICBfY3JlYXRlSWZyYW1lOiBmdW5jdGlvbihpZCl7CiAgICAgICAgLy8gV2UgY2FuJ3QgdXNlIGZvbGxvd2luZyBjb2RlIGFzIHRoZSBuYW1lIGF0dHJpYnV0ZQogICAgICAgIC8vIHdvbid0IGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgaW4gSUU2LCBhbmQgbmV3IHdpbmRvdwogICAgICAgIC8vIG9uIGZvcm0gc3VibWl0IHdpbGwgb3BlbgogICAgICAgIC8vIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKICAgICAgICAvLyBpZnJhbWUuc2V0QXR0cmlidXRlKCduYW1lJywgaWQpOwoKICAgICAgICB2YXIgaWZyYW1lID0gcXEudG9FbGVtZW50KCc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDpmYWxzZTsiIG5hbWU9IicgKyBpZCArICciIC8+Jyk7CiAgICAgICAgLy8gc3JjPSJqYXZhc2NyaXB0OmZhbHNlOyIgcmVtb3ZlcyBpZTYgcHJvbXB0IG9uIGh0dHBzCgogICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpOwoKICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CgogICAgICAgIHJldHVybiBpZnJhbWU7CiAgICB9LAogICAgLyoqCiAgICAgKiBDcmVhdGVzIGZvcm0sIHRoYXQgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gaWZyYW1lCiAgICAgKi8KICAgIF9jcmVhdGVGb3JtOiBmdW5jdGlvbihpZnJhbWUsIHBhcmFtcyl7CiAgICAgICAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBmb2xsb3dpbmcgY29kZSBpbiBJRTYKICAgICAgICAvLyB2YXIgZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Zvcm0nKTsKICAgICAgICAvLyBmb3JtLnNldEF0dHJpYnV0ZSgnbWV0aG9kJywgJ3Bvc3QnKTsKICAgICAgICAvLyBmb3JtLnNldEF0dHJpYnV0ZSgnZW5jdHlwZScsICdtdWx0aXBhcnQvZm9ybS1kYXRhJyk7CiAgICAgICAgLy8gQmVjYXVzZSBpbiB0aGlzIGNhc2UgZmlsZSB3b24ndCBiZSBhdHRhY2hlZCB0byByZXF1ZXN0CiAgICAgICAgdmFyIHByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5kZW1vTW9kZSA/ICJHRVQiIDogIlBPU1QiCiAgICAgICAgdmFyIGZvcm0gPSBxcS50b0VsZW1lbnQoJzxmb3JtIG1ldGhvZD0iJyArIHByb3RvY29sICsgJyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PC9mb3JtPicpOwoKICAgICAgICB2YXIgcXVlcnlTdHJpbmcgPSBxcS5vYmoydXJsKHBhcmFtcywgdGhpcy5fb3B0aW9ucy5lbmRwb2ludCk7CgogICAgICAgIGZvcm0uc2V0QXR0cmlidXRlKCdhY3Rpb24nLCBxdWVyeVN0cmluZyk7CiAgICAgICAgZm9ybS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsIGlmcmFtZS5uYW1lKTsKICAgICAgICBmb3JtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKCiAgICAgICAgcmV0dXJuIGZvcm07CiAgICB9Cn0pOwovKioKICogQ2xhc3MgZm9yIHVwbG9hZGluZyBmaWxlcyB1c2luZyB4aHIKICogQGluaGVyaXRzIHFxLlVwbG9hZEhhbmRsZXJBYnN0cmFjdAogKi8KcXEuVXBsb2FkSGFuZGxlclhociA9IGZ1bmN0aW9uKG8pewogICAgcXEuVXBsb2FkSGFuZGxlckFic3RyYWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgdGhpcy5fZmlsZXMgPSBbXTsKICAgIHRoaXMuX3hocnMgPSBbXTsKCiAgICAvLyBjdXJyZW50IGxvYWRlZCBzaXplIGluIGJ5dGVzIGZvciBlYWNoIGZpbGUKICAgIHRoaXMuX2xvYWRlZCA9IFtdOwp9OwoKLy8gc3RhdGljIG1ldGhvZApxcS5VcGxvYWRIYW5kbGVyWGhyLmlzU3VwcG9ydGVkID0gZnVuY3Rpb24oKXsKICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICBpbnB1dC50eXBlID0gJ2ZpbGUnOwoKICAgIHJldHVybiAoCiAgICAgICAgJ211bHRpcGxlJyBpbiBpbnB1dCAmJgogICAgICAgICAgICB0eXBlb2YgRmlsZSAhPSAidW5kZWZpbmVkIiAmJgogICAgICAgICAgICB0eXBlb2YgRm9ybURhdGEgIT0gInVuZGVmaW5lZCIgJiYKICAgICAgICAgICAgdHlwZW9mIChuZXcgWE1MSHR0cFJlcXVlc3QoKSkudXBsb2FkICE9ICJ1bmRlZmluZWQiICk7Cn07CgovLyBAaW5oZXJpdHMgcXEuVXBsb2FkSGFuZGxlckFic3RyYWN0CnFxLmV4dGVuZChxcS5VcGxvYWRIYW5kbGVyWGhyLnByb3RvdHlwZSwgcXEuVXBsb2FkSGFuZGxlckFic3RyYWN0LnByb3RvdHlwZSkKCnFxLmV4dGVuZChxcS5VcGxvYWRIYW5kbGVyWGhyLnByb3RvdHlwZSwgewogICAgLyoqCiAgICAgKiBBZGRzIGZpbGUgdG8gdGhlIHF1ZXVlCiAgICAgKiBSZXR1cm5zIGlkIHRvIHVzZSB3aXRoIHVwbG9hZCwgY2FuY2VsCiAgICAgKiovCiAgICBhZGQ6IGZ1bmN0aW9uKGZpbGUpewogICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBGaWxlKSl7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUGFzc2VkIG9iaiBpbiBub3QgYSBGaWxlIChpbiBxcS5VcGxvYWRIYW5kbGVyWGhyKScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbGVzLnB1c2goZmlsZSkgLSAxOwogICAgfSwKICAgIGdldE5hbWU6IGZ1bmN0aW9uKGlkKXsKICAgICAgICB2YXIgZmlsZSA9IHRoaXMuX2ZpbGVzW2lkXTsKICAgICAgICAvLyBmaXggbWlzc2luZyBuYW1lIGluIFNhZmFyaSA0CiAgICAgICAgLy9OT1RFOiBmaXhlZCBtaXNzaW5nIG5hbWUgZmlyZWZveCAxMS4wYTIgZmlsZS5maWxlTmFtZSBpcyBhY3R1YWxseSB1bmRlZmluZWQKICAgICAgICByZXR1cm4gKGZpbGUuZmlsZU5hbWUgIT09IG51bGwgJiYgZmlsZS5maWxlTmFtZSAhPT0gdW5kZWZpbmVkKSA/IGZpbGUuZmlsZU5hbWUgOiBmaWxlLm5hbWU7CiAgICB9LAogICAgZ2V0U2l6ZTogZnVuY3Rpb24oaWQpewogICAgICAgIHZhciBmaWxlID0gdGhpcy5fZmlsZXNbaWRdOwogICAgICAgIHJldHVybiBmaWxlLmZpbGVTaXplICE9IG51bGwgPyBmaWxlLmZpbGVTaXplIDogZmlsZS5zaXplOwogICAgfSwKICAgIC8qKgogICAgICogUmV0dXJucyB1cGxvYWRlZCBieXRlcyBmb3IgZmlsZSBpZGVudGlmaWVkIGJ5IGlkCiAgICAgKi8KICAgIGdldExvYWRlZDogZnVuY3Rpb24oaWQpewogICAgICAgIHJldHVybiB0aGlzLl9sb2FkZWRbaWRdIHx8IDA7CiAgICB9LAogICAgaXNWYWxpZDogZnVuY3Rpb24oaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy5fZmlsZXNbaWRdICE9PSB1bmRlZmluZWQ7CiAgICB9LAogICAgcmVzZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgIHFxLlVwbG9hZEhhbmRsZXJBYnN0cmFjdC5wcm90b3R5cGUucmVzZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB0aGlzLl9maWxlcyA9IFtdOwogICAgICAgIHRoaXMuX3hocnMgPSBbXTsKICAgICAgICB0aGlzLl9sb2FkZWQgPSBbXTsKICAgIH0sCiAgICAvKioKICAgICAqIFNlbmRzIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkgaWQgYW5kIGFkZGl0aW9uYWwgcXVlcnkgcGFyYW1zIHRvIHRoZSBzZXJ2ZXIKICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgbmFtZS12YWx1ZSBzdHJpbmcgcGFpcnMKICAgICAqLwogICAgX3VwbG9hZDogZnVuY3Rpb24oaWQsIHBhcmFtcyl7CiAgICAgICAgdGhpcy5fb3B0aW9ucy5vblVwbG9hZChpZCwgdGhpcy5nZXROYW1lKGlkKSwgdHJ1ZSk7CgogICAgICAgIHZhciBmaWxlID0gdGhpcy5fZmlsZXNbaWRdLAogICAgICAgICAgICBuYW1lID0gdGhpcy5nZXROYW1lKGlkKSwKICAgICAgICAgICAgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShpZCk7CgogICAgICAgIHRoaXMuX2xvYWRlZFtpZF0gPSAwOwoKICAgICAgICB2YXIgeGhyID0gdGhpcy5feGhyc1tpZF0gPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIHhoci51cGxvYWQub25wcm9ncmVzcyA9IGZ1bmN0aW9uKGUpewogICAgICAgICAgICBpZiAoZS5sZW5ndGhDb21wdXRhYmxlKXsKICAgICAgICAgICAgICAgIHNlbGYuX2xvYWRlZFtpZF0gPSBlLmxvYWRlZDsKICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMub25Qcm9ncmVzcyhpZCwgbmFtZSwgZS5sb2FkZWQsIGUudG90YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KXsKICAgICAgICAgICAgICAgIHNlbGYuX29uQ29tcGxldGUoaWQsIHhocik7CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAvLyBidWlsZCBxdWVyeSBzdHJpbmcKICAgICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307CiAgICAgICAgcGFyYW1zW3RoaXMuX29wdGlvbnMuaW5wdXROYW1lXSA9IG5hbWU7CiAgICAgICAgdmFyIHF1ZXJ5U3RyaW5nID0gcXEub2JqMnVybChwYXJhbXMsIHRoaXMuX29wdGlvbnMuZW5kcG9pbnQpOwoKICAgICAgICB2YXIgcHJvdG9jb2wgPSB0aGlzLl9vcHRpb25zLmRlbW9Nb2RlID8gIkdFVCIgOiAiUE9TVCI7CiAgICAgICAgeGhyLm9wZW4ocHJvdG9jb2wsIHF1ZXJ5U3RyaW5nLCB0cnVlKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsICJYTUxIdHRwUmVxdWVzdCIpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJYLUZpbGUtTmFtZSIsIGVuY29kZVVSSUNvbXBvbmVudChuYW1lKSk7CiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIkNhY2hlLUNvbnRyb2wiLCAibm8tY2FjaGUiKTsKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5mb3JjZU11bHRpcGFydCkgewogICAgICAgICAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTsKICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKHRoaXMuX29wdGlvbnMuaW5wdXROYW1lLCBmaWxlKTsKICAgICAgICAgICAgZmlsZSA9IGZvcm1EYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7CiAgICAgICAgICAgIC8vTk9URTogcmV0dXJuIG1pbWUgdHlwZSBpbiB4aHIgd29ya3Mgb24gY2hyb21lIDE2LjAuOSBmaXJlZm94IDExLjBhMgogICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiWC1NaW1lLVR5cGUiLGZpbGUudHlwZSApOwogICAgICAgIH0KICAgICAgICBmb3IgKGtleSBpbiB0aGlzLl9vcHRpb25zLmN1c3RvbUhlYWRlcnMpewogICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihrZXksIHRoaXMuX29wdGlvbnMuY3VzdG9tSGVhZGVyc1trZXldKTsKICAgICAgICB9OwoKICAgICAgICB0aGlzLmxvZygnU2VuZGluZyB1cGxvYWQgcmVxdWVzdCBmb3IgJyArIGlkKTsKICAgICAgICB4aHIuc2VuZChmaWxlKTsKICAgIH0sCiAgICBfb25Db21wbGV0ZTogZnVuY3Rpb24oaWQsIHhocil7CiAgICAgICAgInVzZSBzdHJpY3QiOwogICAgICAgIC8vIHRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkL2NhbmNlbGxlZAogICAgICAgIGlmICghdGhpcy5fZmlsZXNbaWRdKSB7IHJldHVybjsgfQoKICAgICAgICB2YXIgbmFtZSA9IHRoaXMuZ2V0TmFtZShpZCk7CiAgICAgICAgdmFyIHNpemUgPSB0aGlzLmdldFNpemUoaWQpOwogICAgICAgIHZhciByZXNwb25zZTsgLy90aGUgcGFyc2VkIEpTT04gcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCBvciB0aGUgZW1wdHkgb2JqZWN0IGlmIHBhcnNpbmcgZmFpbGVkLgoKICAgICAgICB0aGlzLl9vcHRpb25zLm9uUHJvZ3Jlc3MoaWQsIG5hbWUsIHNpemUsIHNpemUpOwoKICAgICAgICB0aGlzLmxvZygieGhyIC0gc2VydmVyIHJlc3BvbnNlIHJlY2VpdmVkIGZvciAiICsgaWQpOwogICAgICAgIHRoaXMubG9nKCJyZXNwb25zZVRleHQgPSAiICsgeGhyLnJlc3BvbnNlVGV4dCk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmICh0eXBlb2YgSlNPTi5wYXJzZSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBldmFsKCIoIiArIHhoci5yZXNwb25zZVRleHQgKyAiKSIpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaChlcnJvcil7CiAgICAgICAgICAgIHRoaXMubG9nKCdFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gcGFyc2UgeGhyIHJlc3BvbnNlIHRleHQgKCcgKyBlcnJvciArICcpJywgJ2Vycm9yJyk7CiAgICAgICAgICAgIHJlc3BvbnNlID0ge307CiAgICAgICAgfQoKICAgICAgICBpZiAoeGhyLnN0YXR1cyAhPT0gMjAwIHx8ICFyZXNwb25zZS5zdWNjZXNzKXsKICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMub25BdXRvUmV0cnkoaWQsIG5hbWUsIHJlc3BvbnNlLCB4aHIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHRoaXMuX29wdGlvbnMub25Db21wbGV0ZShpZCwgbmFtZSwgcmVzcG9uc2UsIHhocik7CgogICAgICAgIHRoaXMuX3hocnNbaWRdID0gbnVsbDsKICAgICAgICB0aGlzLl9kZXF1ZXVlKGlkKTsKICAgIH0sCiAgICBfY2FuY2VsOiBmdW5jdGlvbihpZCl7CiAgICAgICAgdGhpcy5fb3B0aW9ucy5vbkNhbmNlbChpZCwgdGhpcy5nZXROYW1lKGlkKSk7CgogICAgICAgIHRoaXMuX2ZpbGVzW2lkXSA9IG51bGw7CgogICAgICAgIGlmICh0aGlzLl94aHJzW2lkXSl7CiAgICAgICAgICAgIHRoaXMuX3hocnNbaWRdLmFib3J0KCk7CiAgICAgICAgICAgIHRoaXMuX3hocnNbaWRdID0gbnVsbDsKICAgICAgICB9CiAgICB9Cn0pOwooZnVuY3Rpb24oJCkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIHVwbG9hZGVyLCAkZWwsIGluaXQsIGRhdGFTdG9yZSwgcGx1Z2luT3B0aW9uLCBwbHVnaW5PcHRpb25zLCBhZGRDYWxsYmFja3MsIHRyYW5zZm9ybU9wdGlvbnMsIGlzVmFsaWRDb21tYW5kLAogICAgICAgIGRlbGVnYXRlQ29tbWFuZDsKCiAgICBwbHVnaW5PcHRpb25zID0gWyd1cGxvYWRlclR5cGUnXTsKCiAgICBpbml0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICBpZiAob3B0aW9ucykgewogICAgICAgICAgICB2YXIgeGZvcm1lZE9wdHMgPSB0cmFuc2Zvcm1PcHRpb25zKG9wdGlvbnMpOwogICAgICAgICAgICBhZGRDYWxsYmFja3MoeGZvcm1lZE9wdHMpOwoKICAgICAgICAgICAgaWYgKHBsdWdpbk9wdGlvbigndXBsb2FkZXJUeXBlJykgPT09ICdiYXNpYycpIHsKICAgICAgICAgICAgICAgIHVwbG9hZGVyKG5ldyBxcS5GaW5lVXBsb2FkZXJCYXNpYyh4Zm9ybWVkT3B0cykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdXBsb2FkZXIobmV3IHFxLkZpbmVVcGxvYWRlcih4Zm9ybWVkT3B0cykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVsOwogICAgfTsKCiAgICBkYXRhU3RvcmUgPSBmdW5jdGlvbihrZXksIHZhbCkgewogICAgICAgIHZhciBkYXRhID0gJGVsLmRhdGEoJ2ZpbmV1cGxvYWRlcicpOwoKICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGRhdGEgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhW2tleV0gPSB2YWw7CiAgICAgICAgICAgICRlbC5kYXRhKCdmaW5ldXBsb2FkZXInLCBkYXRhKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkYXRhW2tleV07CiAgICAgICAgfQogICAgfTsKCiAgICAvL3RoZSB1bmRlcmx5aW5nIEZpbmUgVXBsb2FkZXIgaW5zdGFuY2UgaXMgc3RvcmVkIGluIGpRdWVyeSdzIGRhdGEgc3RvcmVkLCBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQKICAgIC8vIHRpZWQgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUgcGx1Zy1pbgogICAgdXBsb2FkZXIgPSBmdW5jdGlvbihpbnN0YW5jZVRvU3RvcmUpIHsKICAgICAgICByZXR1cm4gZGF0YVN0b3JlKCd1cGxvYWRlcicsIGluc3RhbmNlVG9TdG9yZSk7CiAgICB9OwoKICAgIHBsdWdpbk9wdGlvbiA9IGZ1bmN0aW9uKG9wdGlvbiwgb3B0aW9uVmFsKSB7CiAgICAgICAgcmV0dXJuIGRhdGFTdG9yZShvcHRpb24sIG9wdGlvblZhbCk7CiAgICB9OwoKICAgIC8vaW1wbGVtZW50IGFsbCBjYWxsYmFja3MgZGVmaW5lZCBpbiBGaW5lIFVwbG9hZGVyIGFzIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgYXBwcm9wcmlhdGVseSBuYW1lcyBldmVudHMgYW5kCiAgICAvLyByZXR1cm4gdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIGJvdW5kIGhhbmRsZXIgYmFjayB0byBGaW5lIFVwbG9hZGVyCiAgICBhZGRDYWxsYmFja3MgPSBmdW5jdGlvbih0cmFuc2Zvcm1lZE9wdHMpIHsKICAgICAgICB2YXIgY2FsbGJhY2tzID0gdHJhbnNmb3JtZWRPcHRzLmNhbGxiYWNrcyA9IHt9OwoKICAgICAgICAkLmVhY2gobmV3IHFxLkZpbmVVcGxvYWRlckJhc2ljKCkuX29wdGlvbnMuY2FsbGJhY2tzLCBmdW5jdGlvbihwcm9wLCBmdW5jKSB7CiAgICAgICAgICAgIHZhciBuYW1lLCAkY2FsbGJhY2tFbDsKCiAgICAgICAgICAgIG5hbWUgPSAvXm9uKFx3KykvLmV4ZWMocHJvcClbMV07CiAgICAgICAgICAgIG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCAxKS50b0xvd2VyQ2FzZSgpICsgbmFtZS5zdWJzdHJpbmcoMSk7CiAgICAgICAgICAgICRjYWxsYmFja0VsID0gJGVsOwoKICAgICAgICAgICAgY2FsbGJhY2tzW3Byb3BdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNhbGxiYWNrRWwudHJpZ2dlckhhbmRsZXIobmFtZSwgYXJncyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8vdHJhbnNmb3JtIGpRdWVyeSBvYmplY3RzIGludG8gSFRNTEVsZW1lbnRzLCBhbmQgcGFzcyBhbG9uZyBhbGwgb3RoZXIgb3B0aW9uIHByb3BlcnRpZXMKICAgIHRyYW5zZm9ybU9wdGlvbnMgPSBmdW5jdGlvbihzb3VyY2UsIGRlc3QpIHsKICAgICAgICB2YXIgeGZvcm1lZCwgYXJyYXlWYWxzOwoKICAgICAgICBpZiAoZGVzdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGlmIChzb3VyY2UudXBsb2FkZXJUeXBlICE9PSAnYmFzaWMnKSB7CiAgICAgICAgICAgICAgICB4Zm9ybWVkID0geyBlbGVtZW50IDogJGVsWzBdIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB4Zm9ybWVkID0ge307CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHhmb3JtZWQgPSBkZXN0OwogICAgICAgIH0KCiAgICAgICAgJC5lYWNoKHNvdXJjZSwgZnVuY3Rpb24ocHJvcCwgdmFsKSB7CiAgICAgICAgICAgIGlmICgkLmluQXJyYXkocHJvcCwgcGx1Z2luT3B0aW9ucykgPj0gMCkgewogICAgICAgICAgICAgICAgcGx1Z2luT3B0aW9uKHByb3AsIHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodmFsIGluc3RhbmNlb2YgJCkgewogICAgICAgICAgICAgICAgeGZvcm1lZFtwcm9wXSA9IHZhbFswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICgkLmlzUGxhaW5PYmplY3QodmFsKSkgewogICAgICAgICAgICAgICAgeGZvcm1lZFtwcm9wXSA9IHt9OwogICAgICAgICAgICAgICAgdHJhbnNmb3JtT3B0aW9ucyh2YWwsIHhmb3JtZWRbcHJvcF0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCQuaXNBcnJheSh2YWwpKSB7CiAgICAgICAgICAgICAgICBhcnJheVZhbHMgPSBbXTsKICAgICAgICAgICAgICAgICQuZWFjaCh2YWwsIGZ1bmN0aW9uKGlkeCwgYXJyYXlWYWwpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoYXJyYXlWYWwgaW5zdGFuY2VvZiAkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQubWVyZ2UoYXJyYXlWYWxzLCBhcnJheVZhbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBhcnJheVZhbHMucHVzaChhcnJheVZhbCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB4Zm9ybWVkW3Byb3BdID0gYXJyYXlWYWxzOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgeGZvcm1lZFtwcm9wXSA9IHZhbDsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBpZiAoZGVzdCA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHJldHVybiB4Zm9ybWVkOwogICAgICAgIH0KICAgIH07CgogICAgaXNWYWxpZENvbW1hbmQgPSBmdW5jdGlvbihjb21tYW5kKSB7CiAgICAgICAgcmV0dXJuICQudHlwZShjb21tYW5kKSA9PT0gInN0cmluZyIgJiYKICAgICAgICAgICAgIWNvbW1hbmQubWF0Y2goL15fLykgJiYgLy9lbmZvcmNlIHByaXZhdGUgbWV0aG9kcyBjb252ZW50aW9uCiAgICAgICAgICAgIHVwbG9hZGVyKClbY29tbWFuZF0gIT09IHVuZGVmaW5lZDsKICAgIH07CgogICAgLy9hc3N1bWluZyB3ZSBoYXZlIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGlzIGlzIGEgdmFsaWQgY29tbWFuZCwgY2FsbCB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbiBpbiB0aGUgdW5kZXJseWluZwogICAgLy8gRmluZSBVcGxvYWRlciBpbnN0YW5jZSAocGFzc2luZyBhbG9uZyB0aGUgYXJndW1lbnRzIGZyb20gdGhlIGNhbGxlcikgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIGJhY2sgdG8gdGhlIGNhbGxlcgogICAgZGVsZWdhdGVDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkgewogICAgICAgIHJldHVybiB1cGxvYWRlcigpW2NvbW1hbmRdLmFwcGx5KHVwbG9hZGVyKCksIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpOwogICAgfTsKCiAgICAkLmZuLmZpbmVVcGxvYWRlciA9IGZ1bmN0aW9uKG9wdGlvbnNPckNvbW1hbmQpIHsKICAgICAgICAkZWwgPSB0aGlzOwoKICAgICAgICBpZiAodXBsb2FkZXIoKSAmJiBpc1ZhbGlkQ29tbWFuZChvcHRpb25zT3JDb21tYW5kKSkgewogICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVDb21tYW5kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zT3JDb21tYW5kID09PSAnb2JqZWN0JyB8fCAhb3B0aW9uc09yQ29tbWFuZCkgewogICAgICAgICAgICByZXR1cm4gaW5pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJC5lcnJvcignTWV0aG9kICcgKyAgb3B0aW9uc09yQ29tbWFuZCArICcgZG9lcyBub3QgZXhpc3Qgb24galF1ZXJ5LmZpbmVVcGxvYWRlcicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwoKfShqUXVlcnkpKTsK]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/jquery.fineuploader-3.0.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHFxPXFxfHx7fSxxcT1mdW5jdGlvbihhKXtyZXR1cm57aGlkZTpmdW5jdGlvbigpe2Euc3R5bGUuZGlzcGxheT0ibm9uZSI7cmV0dXJuIHRoaXN9LGF0dGFjaDpmdW5jdGlvbihiLGMpe2EuYWRkRXZlbnRMaXN0ZW5lcj9hLmFkZEV2ZW50TGlzdGVuZXIoYixjLCExKTphLmF0dGFjaEV2ZW50JiZhLmF0dGFjaEV2ZW50KCJvbiIrYixjKTtyZXR1cm4gZnVuY3Rpb24oKXtxcShhKS5kZXRhY2goYixjKX19LGRldGFjaDpmdW5jdGlvbihiLGMpe2EucmVtb3ZlRXZlbnRMaXN0ZW5lcj9hLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKTphLmF0dGFjaEV2ZW50JiZhLmRldGFjaEV2ZW50KCJvbiIrYixjKTtyZXR1cm4gdGhpc30sY29udGFpbnM6ZnVuY3Rpb24oYil7cmV0dXJuIGE9PWI/ITA6YS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEhKGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmOCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihiKXtiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsCmIpO3JldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXthLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7cmV0dXJuIHRoaXN9LGNzczpmdW5jdGlvbihiKXtudWxsIT1iLm9wYWNpdHkmJigic3RyaW5nIiE9dHlwZW9mIGEuc3R5bGUub3BhY2l0eSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhLmZpbHRlcnMpJiYoYi5maWx0ZXI9ImFscGhhKG9wYWNpdHk9IitNYXRoLnJvdW5kKDEwMCpiLm9wYWNpdHkpKyIpIik7cXEuZXh0ZW5kKGEuc3R5bGUsYik7cmV0dXJuIHRoaXN9LGhhc0NsYXNzOmZ1bmN0aW9uKGIpe3JldHVybiBSZWdFeHAoIihefCApIitiKyIoIHwkKSIpLnRlc3QoYS5jbGFzc05hbWUpfSxhZGRDbGFzczpmdW5jdGlvbihiKXtxcShhKS5oYXNDbGFzcyhiKXx8KGEuY2xhc3NOYW1lKz0iICIrYik7cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGIpe2EuY2xhc3NOYW1lPWEuY2xhc3NOYW1lLnJlcGxhY2UoUmVnRXhwKCIoXnwgKSIrYisiKCB8JCkiKSwiICIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLAoiIik7cmV0dXJuIHRoaXN9LGdldEJ5Q2xhc3M6ZnVuY3Rpb24oYil7aWYoYS5xdWVyeVNlbGVjdG9yQWxsKXJldHVybiBhLnF1ZXJ5U2VsZWN0b3JBbGwoIi4iK2IpO2Zvcih2YXIgYz1bXSxkPWEuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSxlPWQubGVuZ3RoLGY9MDtmPGU7ZisrKXFxKGRbZl0pLmhhc0NsYXNzKGIpJiZjLnB1c2goZFtmXSk7cmV0dXJuIGN9LGNoaWxkcmVuOmZ1bmN0aW9uKCl7Zm9yKHZhciBiPVtdLGM9YS5maXJzdENoaWxkO2M7KTE9PWMubm9kZVR5cGUmJmIucHVzaChjKSxjPWMubmV4dFNpYmxpbmc7cmV0dXJuIGJ9LHNldFRleHQ6ZnVuY3Rpb24oYil7YS5pbm5lclRleHQ9YjthLnRleHRDb250ZW50PWI7cmV0dXJuIHRoaXN9LGNsZWFyVGV4dDpmdW5jdGlvbigpe3JldHVybiBxcShhKS5zZXRUZXh0KCIiKX19fTsKcXEubG9nPWZ1bmN0aW9uKGEsYil7aWYod2luZG93LmNvbnNvbGUpaWYoIWJ8fCJpbmZvIj09PWIpd2luZG93LmNvbnNvbGUubG9nKGEpO2Vsc2UgaWYod2luZG93LmNvbnNvbGVbYl0pd2luZG93LmNvbnNvbGVbYl0oYSk7ZWxzZSB3aW5kb3cuY29uc29sZS5sb2coIjwiK2IrIj4gIithKX07cXEuaXNPYmplY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPT1hJiZhJiYib2JqZWN0Ij09PXR5cGVvZiBhJiZhLmNvbnN0cnVjdG9yPT09T2JqZWN0fTtxcS5leHRlbmQ9ZnVuY3Rpb24oYSxiLGMpe2Zvcih2YXIgZCBpbiBiKWIuaGFzT3duUHJvcGVydHkoZCkmJihjJiZxcS5pc09iamVjdChiW2RdKT8odm9pZCAwPT09YVtkXSYmKGFbZF09e30pLHFxLmV4dGVuZChhW2RdLGJbZF0sITApKTphW2RdPWJbZF0pfTsKcXEuaW5kZXhPZj1mdW5jdGlvbihhLGIsYyl7aWYoYS5pbmRleE9mKXJldHVybiBhLmluZGV4T2YoYixjKTt2YXIgYz1jfHwwLGQ9YS5sZW5ndGg7Zm9yKDA+YyYmKGMrPWQpO2M8ZDtjKyspaWYoYyBpbiBhJiZhW2NdPT09YilyZXR1cm4gYztyZXR1cm4tMX07cXEuZ2V0VW5pcXVlSWQ9ZnVuY3Rpb24oKXt2YXIgYT0wO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBhKyt9fSgpO3FxLmllPWZ1bmN0aW9uKCl7cmV0dXJuLTEhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSIpfTtxcS5pZTEwPWZ1bmN0aW9uKCl7cmV0dXJuLTEhPW5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZigiTVNJRSAxMCIpfTtxcS5zYWZhcmk9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT1uYXZpZ2F0b3IudmVuZG9yJiYtMSE9bmF2aWdhdG9yLnZlbmRvci5pbmRleE9mKCJBcHBsZSIpfTtxcS5jaHJvbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT1uYXZpZ2F0b3IudmVuZG9yJiYtMSE9bmF2aWdhdG9yLnZlbmRvci5pbmRleE9mKCJHb29nbGUiKX07CnFxLmZpcmVmb3g9ZnVuY3Rpb24oKXtyZXR1cm4tMSE9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNb3ppbGxhIikmJnZvaWQgMCE9bmF2aWdhdG9yLnZlbmRvciYmIiI9PW5hdmlnYXRvci52ZW5kb3J9O3FxLndpbmRvd3M9ZnVuY3Rpb24oKXtyZXR1cm4iV2luMzIiPT1uYXZpZ2F0b3IucGxhdGZvcm19O3FxLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9O3FxLnRvRWxlbWVudD1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmdW5jdGlvbihiKXthLmlubmVySFRNTD1iO2I9YS5maXJzdENoaWxkO2EucmVtb3ZlQ2hpbGQoYik7cmV0dXJuIGJ9fSgpOwpxcS5vYmoydXJsPWZ1bmN0aW9uKGEsYixjKXt2YXIgZD1bXSxlPSImIixmPWZ1bmN0aW9uKGEsYyl7dmFyIGU9Yj8vXFtcXSQvLnRlc3QoYik/YjpiKyJbIitjKyJdIjpjOyJ1bmRlZmluZWQiIT1lJiYidW5kZWZpbmVkIiE9YyYmZC5wdXNoKCJvYmplY3QiPT09dHlwZW9mIGE/cXEub2JqMnVybChhLGUsITApOiJbb2JqZWN0IEZ1bmN0aW9uXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSk/ZW5jb2RlVVJJQ29tcG9uZW50KGUpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYSgpKTplbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudChhKSl9O2lmKCFjJiZiKWU9L1w/Ly50ZXN0KGIpPy9cPyQvLnRlc3QoYik/IiI6IiYiOiI/IixkLnB1c2goYiksZC5wdXNoKHFxLm9iajJ1cmwoYSkpO2Vsc2UgaWYoIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBhKWZvcih2YXIgZz0KMCxjPWEubGVuZ3RoO2c8YzsrK2cpZihhW2ddLGcpO2Vsc2UgaWYoInVuZGVmaW5lZCIhPXR5cGVvZiBhJiZudWxsIT09YSYmIm9iamVjdCI9PT10eXBlb2YgYSlmb3IoZyBpbiBhKWYoYVtnXSxnKTtlbHNlIGQucHVzaChlbmNvZGVVUklDb21wb25lbnQoYikrIj0iK2VuY29kZVVSSUNvbXBvbmVudChhKSk7cmV0dXJuIGI/ZC5qb2luKGUpOmQuam9pbihlKS5yZXBsYWNlKC9eJi8sIiIpLnJlcGxhY2UoLyUyMC9nLCIrIil9O3FxLkRpc3Bvc2VTdXBwb3J0PXtfZGlzcG9zZXJzOltdLGRpc3Bvc2U6ZnVuY3Rpb24oKXtmb3IodmFyIGE7YT10aGlzLl9kaXNwb3NlcnMuc2hpZnQoKTspYSgpfSxhZGREaXNwb3NlcjpmdW5jdGlvbihhKXt0aGlzLl9kaXNwb3NlcnMucHVzaChhKX0sX2F0dGFjaDpmdW5jdGlvbigpe3RoaXMuYWRkRGlzcG9zZXIocXEoYXJndW1lbnRzWzBdKS5hdHRhY2guYXBwbHkodGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpKX19OwpxcS5VcGxvYWRCdXR0b249ZnVuY3Rpb24oYSl7dGhpcy5fb3B0aW9ucz17ZWxlbWVudDpudWxsLG11bHRpcGxlOiExLGFjY2VwdEZpbGVzOm51bGwsbmFtZToiZmlsZSIsb25DaGFuZ2U6ZnVuY3Rpb24oKXt9LGhvdmVyQ2xhc3M6InFxLXVwbG9hZC1idXR0b24taG92ZXIiLGZvY3VzQ2xhc3M6InFxLXVwbG9hZC1idXR0b24tZm9jdXMifTtxcS5leHRlbmQodGhpcy5fb3B0aW9ucyxhKTtxcS5leHRlbmQodGhpcyxxcS5EaXNwb3NlU3VwcG9ydCk7dGhpcy5fZWxlbWVudD10aGlzLl9vcHRpb25zLmVsZW1lbnQ7cXEodGhpcy5fZWxlbWVudCkuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLG92ZXJmbG93OiJoaWRkZW4iLGRpcmVjdGlvbjoibHRyIn0pO3RoaXMuX2lucHV0PXRoaXMuX2NyZWF0ZUlucHV0KCl9OwpxcS5VcGxvYWRCdXR0b24ucHJvdG90eXBlPXtnZXRJbnB1dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pbnB1dH0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnB1dC5wYXJlbnROb2RlJiZxcSh0aGlzLl9pbnB1dCkucmVtb3ZlKCk7cXEodGhpcy5fZWxlbWVudCkucmVtb3ZlQ2xhc3ModGhpcy5fb3B0aW9ucy5mb2N1c0NsYXNzKTt0aGlzLl9pbnB1dD10aGlzLl9jcmVhdGVJbnB1dCgpfSxfY3JlYXRlSW5wdXQ6ZnVuY3Rpb24oKXt2YXIgYT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3RoaXMuX29wdGlvbnMubXVsdGlwbGUmJmEuc2V0QXR0cmlidXRlKCJtdWx0aXBsZSIsIm11bHRpcGxlIik7dGhpcy5fb3B0aW9ucy5hY2NlcHRGaWxlcyYmYS5zZXRBdHRyaWJ1dGUoImFjY2VwdCIsdGhpcy5fb3B0aW9ucy5hY2NlcHRGaWxlcyk7YS5zZXRBdHRyaWJ1dGUoInR5cGUiLCJmaWxlIik7YS5zZXRBdHRyaWJ1dGUoIm5hbWUiLHRoaXMuX29wdGlvbnMubmFtZSk7cXEoYSkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLApyaWdodDowLHRvcDowLGZvbnRGYW1pbHk6IkFyaWFsIixmb250U2l6ZToiMTE4cHgiLG1hcmdpbjowLHBhZGRpbmc6MCxjdXJzb3I6InBvaW50ZXIiLG9wYWNpdHk6MH0pO3RoaXMuX2VsZW1lbnQuYXBwZW5kQ2hpbGQoYSk7dmFyIGI9dGhpczt0aGlzLl9hdHRhY2goYSwiY2hhbmdlIixmdW5jdGlvbigpe2IuX29wdGlvbnMub25DaGFuZ2UoYSl9KTt0aGlzLl9hdHRhY2goYSwibW91c2VvdmVyIixmdW5jdGlvbigpe3FxKGIuX2VsZW1lbnQpLmFkZENsYXNzKGIuX29wdGlvbnMuaG92ZXJDbGFzcyl9KTt0aGlzLl9hdHRhY2goYSwibW91c2VvdXQiLGZ1bmN0aW9uKCl7cXEoYi5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoYi5fb3B0aW9ucy5ob3ZlckNsYXNzKX0pO3RoaXMuX2F0dGFjaChhLCJmb2N1cyIsZnVuY3Rpb24oKXtxcShiLl9lbGVtZW50KS5hZGRDbGFzcyhiLl9vcHRpb25zLmZvY3VzQ2xhc3MpfSk7dGhpcy5fYXR0YWNoKGEsImJsdXIiLGZ1bmN0aW9uKCl7cXEoYi5fZWxlbWVudCkucmVtb3ZlQ2xhc3MoYi5fb3B0aW9ucy5mb2N1c0NsYXNzKX0pOwp3aW5kb3cuYXR0YWNoRXZlbnQmJmEuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIi0xIik7cmV0dXJuIGF9fTsKcXEuRmluZVVwbG9hZGVyQmFzaWM9ZnVuY3Rpb24oYSl7dGhpcy5fb3B0aW9ucz17ZGVidWc6ITEsYnV0dG9uOm51bGwsbXVsdGlwbGU6ITAsbWF4Q29ubmVjdGlvbnM6MyxkaXNhYmxlQ2FuY2VsRm9yRm9ybVVwbG9hZHM6ITEsYXV0b1VwbG9hZDohMCxyZXF1ZXN0OntlbmRwb2ludDoiL3NlcnZlci91cGxvYWQiLHBhcmFtczp7fSxjdXN0b21IZWFkZXJzOnt9LGZvcmNlTXVsdGlwYXJ0OiExLGlucHV0TmFtZToicXFmaWxlIn0sdmFsaWRhdGlvbjp7YWxsb3dlZEV4dGVuc2lvbnM6W10sc2l6ZUxpbWl0OjAsbWluU2l6ZUxpbWl0OjAsc3RvcE9uRmlyc3RJbnZhbGlkRmlsZTohMH0sY2FsbGJhY2tzOntvblN1Ym1pdDpmdW5jdGlvbigpe30sb25Db21wbGV0ZTpmdW5jdGlvbigpe30sb25DYW5jZWw6ZnVuY3Rpb24oKXt9LG9uVXBsb2FkOmZ1bmN0aW9uKCl7fSxvblByb2dyZXNzOmZ1bmN0aW9uKCl7fSxvbkVycm9yOmZ1bmN0aW9uKCl7fSxvbkF1dG9SZXRyeTpmdW5jdGlvbigpe30sCm9uTWFudWFsUmV0cnk6ZnVuY3Rpb24oKXt9LG9uVmFsaWRhdGU6ZnVuY3Rpb24oKXt9fSxtZXNzYWdlczp7dHlwZUVycm9yOiJ7ZmlsZX0gaGFzIGFuIGludmFsaWQgZXh0ZW5zaW9uLiBWYWxpZCBleHRlbnNpb24ocyk6IHtleHRlbnNpb25zfS4iLHNpemVFcnJvcjoie2ZpbGV9IGlzIHRvbyBsYXJnZSwgbWF4aW11bSBmaWxlIHNpemUgaXMge3NpemVMaW1pdH0uIixtaW5TaXplRXJyb3I6IntmaWxlfSBpcyB0b28gc21hbGwsIG1pbmltdW0gZmlsZSBzaXplIGlzIHttaW5TaXplTGltaXR9LiIsZW1wdHlFcnJvcjoie2ZpbGV9IGlzIGVtcHR5LCBwbGVhc2Ugc2VsZWN0IGZpbGVzIGFnYWluIHdpdGhvdXQgaXQuIixub0ZpbGVzRXJyb3I6Ik5vIGZpbGVzIHRvIHVwbG9hZC4iLG9uTGVhdmU6IlRoZSBmaWxlcyBhcmUgYmVpbmcgdXBsb2FkZWQsIGlmIHlvdSBsZWF2ZSBub3cgdGhlIHVwbG9hZCB3aWxsIGJlIGNhbmNlbGxlZC4ifSxyZXRyeTp7ZW5hYmxlQXV0bzohMSxtYXhBdXRvQXR0ZW1wdHM6MywKYXV0b0F0dGVtcHREZWxheTo1LHByZXZlbnRSZXRyeVJlc3BvbnNlUHJvcGVydHk6InByZXZlbnRSZXRyeSJ9fTtxcS5leHRlbmQodGhpcy5fb3B0aW9ucyxhLCEwKTt0aGlzLl93cmFwQ2FsbGJhY2tzKCk7cXEuZXh0ZW5kKHRoaXMscXEuRGlzcG9zZVN1cHBvcnQpO3RoaXMuX2ZpbGVzSW5Qcm9ncmVzcz0wO3RoaXMuX3N0b3JlZEZpbGVJZHM9W107dGhpcy5fYXV0b1JldHJpZXM9W107dGhpcy5fcmV0cnlUaW1lb3V0cz1bXTt0aGlzLl9wcmV2ZW50UmV0cmllcz1bXTt0aGlzLl9oYW5kbGVyPXRoaXMuX2NyZWF0ZVVwbG9hZEhhbmRsZXIoKTt0aGlzLl9vcHRpb25zLmJ1dHRvbiYmKHRoaXMuX2J1dHRvbj10aGlzLl9jcmVhdGVVcGxvYWRCdXR0b24odGhpcy5fb3B0aW9ucy5idXR0b24pKTt0aGlzLl9wcmV2ZW50TGVhdmVJblByb2dyZXNzKCl9OwpxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGU9e2xvZzpmdW5jdGlvbihhLGIpe3RoaXMuX29wdGlvbnMuZGVidWcmJighYnx8ImluZm8iPT09Yik/cXEubG9nKCJbRmluZVVwbG9hZGVyXSAiK2EpOmImJiJpbmZvIiE9PWImJnFxLmxvZygiW0ZpbmVVcGxvYWRlcl0gIithLGIpfSxzZXRQYXJhbXM6ZnVuY3Rpb24oYSl7dGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnBhcmFtcz1hfSxnZXRJblByb2dyZXNzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVzSW5Qcm9ncmVzc30sdXBsb2FkU3RvcmVkRmlsZXM6ZnVuY3Rpb24oKXtmb3IoO3RoaXMuX3N0b3JlZEZpbGVJZHMubGVuZ3RoOyl0aGlzLl9maWxlc0luUHJvZ3Jlc3MrKyx0aGlzLl9oYW5kbGVyLnVwbG9hZCh0aGlzLl9zdG9yZWRGaWxlSWRzLnNoaWZ0KCksdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnBhcmFtcyl9LGNsZWFyU3RvcmVkRmlsZXM6ZnVuY3Rpb24oKXt0aGlzLl9zdG9yZWRGaWxlSWRzPVtdfSxyZXRyeTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fb25CZWZvcmVNYW51YWxSZXRyeShhKT8KKHRoaXMuX2hhbmRsZXIucmV0cnkoYSksITApOiExfSxjYW5jZWw6ZnVuY3Rpb24oYSl7dGhpcy5faGFuZGxlci5jYW5jZWwoYSl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5sb2coIlJlc2V0dGluZyB1cGxvYWRlci4uLiIpO3RoaXMuX2hhbmRsZXIucmVzZXQoKTt0aGlzLl9maWxlc0luUHJvZ3Jlc3M9MDt0aGlzLl9zdG9yZWRGaWxlSWRzPVtdO3RoaXMuX2F1dG9SZXRyaWVzPVtdO3RoaXMuX3JldHJ5VGltZW91dHM9W107dGhpcy5fcHJldmVudFJldHJpZXM9W107dGhpcy5fYnV0dG9uLnJlc2V0KCl9LF9jcmVhdGVVcGxvYWRCdXR0b246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPW5ldyBxcS5VcGxvYWRCdXR0b24oe2VsZW1lbnQ6YSxtdWx0aXBsZTp0aGlzLl9vcHRpb25zLm11bHRpcGxlJiZxcS5VcGxvYWRIYW5kbGVyWGhyLmlzU3VwcG9ydGVkKCksYWNjZXB0RmlsZXM6dGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLmFjY2VwdEZpbGVzLG9uQ2hhbmdlOmZ1bmN0aW9uKGEpe2IuX29uSW5wdXRDaGFuZ2UoYSl9fSk7CnRoaXMuYWRkRGlzcG9zZXIoZnVuY3Rpb24oKXtjLmRpc3Bvc2UoKX0pO3JldHVybiBjfSxfY3JlYXRlVXBsb2FkSGFuZGxlcjpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYjtiPXFxLlVwbG9hZEhhbmRsZXJYaHIuaXNTdXBwb3J0ZWQoKT8iVXBsb2FkSGFuZGxlclhociI6IlVwbG9hZEhhbmRsZXJGb3JtIjtyZXR1cm4gbmV3IHFxW2JdKHtkZWJ1Zzp0aGlzLl9vcHRpb25zLmRlYnVnLGVuZHBvaW50OnRoaXMuX29wdGlvbnMucmVxdWVzdC5lbmRwb2ludCxmb3JjZU11bHRpcGFydDp0aGlzLl9vcHRpb25zLnJlcXVlc3QuZm9yY2VNdWx0aXBhcnQsbWF4Q29ubmVjdGlvbnM6dGhpcy5fb3B0aW9ucy5tYXhDb25uZWN0aW9ucyxjdXN0b21IZWFkZXJzOnRoaXMuX29wdGlvbnMucmVxdWVzdC5jdXN0b21IZWFkZXJzLGlucHV0TmFtZTp0aGlzLl9vcHRpb25zLnJlcXVlc3QuaW5wdXROYW1lLGRlbW9Nb2RlOnRoaXMuX29wdGlvbnMuZGVtb01vZGUsbG9nOnRoaXMubG9nLG9uUHJvZ3Jlc3M6ZnVuY3Rpb24oYiwKZCxlLGYpe2EuX29uUHJvZ3Jlc3MoYixkLGUsZik7YS5fb3B0aW9ucy5jYWxsYmFja3Mub25Qcm9ncmVzcyhiLGQsZSxmKX0sb25Db21wbGV0ZTpmdW5jdGlvbihiLGQsZSxmKXthLl9vbkNvbXBsZXRlKGIsZCxlLGYpO2EuX29wdGlvbnMuY2FsbGJhY2tzLm9uQ29tcGxldGUoYixkLGUpfSxvbkNhbmNlbDpmdW5jdGlvbihiLGQpe2EuX29uQ2FuY2VsKGIsZCk7YS5fb3B0aW9ucy5jYWxsYmFja3Mub25DYW5jZWwoYixkKX0sb25VcGxvYWQ6ZnVuY3Rpb24oYixkLGUpe2EuX29uVXBsb2FkKGIsZCxlKTthLl9vcHRpb25zLmNhbGxiYWNrcy5vblVwbG9hZChiLGQsZSl9LG9uQXV0b1JldHJ5OmZ1bmN0aW9uKGIsZCxlLGYpe2EuX3ByZXZlbnRSZXRyaWVzW2JdPWVbYS5fb3B0aW9ucy5yZXRyeS5wcmV2ZW50UmV0cnlSZXNwb25zZVByb3BlcnR5XTtyZXR1cm4gYS5fc2hvdWxkQXV0b1JldHJ5KGIsZCxlKT8oYS5fbWF5YmVQYXJzZUFuZFNlbmRVcGxvYWRFcnJvcihiLGQsZSxmKSxhLl9vcHRpb25zLmNhbGxiYWNrcy5vbkF1dG9SZXRyeShiLApkLGEuX2F1dG9SZXRyaWVzW2JdKzEpLGEuX29uQmVmb3JlQXV0b1JldHJ5KGIsZCksYS5fcmV0cnlUaW1lb3V0c1tiXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5fb25BdXRvUmV0cnkoYixkLGUpfSwxRTMqYS5fb3B0aW9ucy5yZXRyeS5hdXRvQXR0ZW1wdERlbGF5KSwhMCk6ITF9fSl9LF9wcmV2ZW50TGVhdmVJblByb2dyZXNzOmZ1bmN0aW9uKCl7dmFyIGE9dGhpczt0aGlzLl9hdHRhY2god2luZG93LCJiZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKGIpe2lmKGEuX2ZpbGVzSW5Qcm9ncmVzcylyZXR1cm4gYj1ifHx3aW5kb3cuZXZlbnQsYi5yZXR1cm5WYWx1ZT1hLl9vcHRpb25zLm1lc3NhZ2VzLm9uTGVhdmV9KX0sX29uU3VibWl0OmZ1bmN0aW9uKCl7dGhpcy5fb3B0aW9ucy5hdXRvVXBsb2FkJiZ0aGlzLl9maWxlc0luUHJvZ3Jlc3MrK30sX29uUHJvZ3Jlc3M6ZnVuY3Rpb24oKXt9LF9vbkNvbXBsZXRlOmZ1bmN0aW9uKGEsYixjLGQpe3RoaXMuX2ZpbGVzSW5Qcm9ncmVzcy0tO3RoaXMuX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3IoYSwKYixjLGQpfSxfb25DYW5jZWw6ZnVuY3Rpb24oYSl7Y2xlYXJUaW1lb3V0KHRoaXMuX3JldHJ5VGltZW91dHNbYV0pO2E9cXEuaW5kZXhPZih0aGlzLl9zdG9yZWRGaWxlSWRzLGEpO3RoaXMuX29wdGlvbnMuYXV0b1VwbG9hZHx8MD5hP3RoaXMuX2ZpbGVzSW5Qcm9ncmVzcy0tOnRoaXMuX29wdGlvbnMuYXV0b1VwbG9hZHx8dGhpcy5fc3RvcmVkRmlsZUlkcy5zcGxpY2UoYSwxKX0sX29uVXBsb2FkOmZ1bmN0aW9uKCl7fSxfb25JbnB1dENoYW5nZTpmdW5jdGlvbihhKXt0aGlzLl9oYW5kbGVyIGluc3RhbmNlb2YgcXEuVXBsb2FkSGFuZGxlclhocj90aGlzLl91cGxvYWRGaWxlTGlzdChhLmZpbGVzKTp0aGlzLl92YWxpZGF0ZUZpbGUoYSkmJnRoaXMuX3VwbG9hZEZpbGUoYSk7dGhpcy5fYnV0dG9uLnJlc2V0KCl9LF9vbkJlZm9yZUF1dG9SZXRyeTpmdW5jdGlvbihhLGIpe3RoaXMubG9nKCJXYWl0aW5nICIrdGhpcy5fb3B0aW9ucy5yZXRyeS5hdXRvQXR0ZW1wdERlbGF5KyIgc2Vjb25kcyBiZWZvcmUgcmV0cnlpbmcgIisKYisiLi4uIil9LF9vbkF1dG9SZXRyeTpmdW5jdGlvbihhLGIpe3RoaXMubG9nKCJSZXRyeWluZyAiK2IrIi4uLiIpO3RoaXMuX2F1dG9SZXRyaWVzW2FdKys7dGhpcy5faGFuZGxlci5yZXRyeShhKX0sX3Nob3VsZEF1dG9SZXRyeTpmdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5fcHJldmVudFJldHJpZXNbYV0mJnRoaXMuX29wdGlvbnMucmV0cnkuZW5hYmxlQXV0bz8odm9pZCAwPT09dGhpcy5fYXV0b1JldHJpZXNbYV0mJih0aGlzLl9hdXRvUmV0cmllc1thXT0wKSx0aGlzLl9hdXRvUmV0cmllc1thXTx0aGlzLl9vcHRpb25zLnJldHJ5Lm1heEF1dG9BdHRlbXB0cyk6ITF9LF9vbkJlZm9yZU1hbnVhbFJldHJ5OmZ1bmN0aW9uKGEpe2lmKHRoaXMuX3ByZXZlbnRSZXRyaWVzW2FdKXJldHVybiB0aGlzLmxvZygiUmV0cmllcyBhcmUgZm9yYmlkZGVuIGZvciBpZCAiK2EsIndhcm4iKSwhMTtpZih0aGlzLl9oYW5kbGVyLmlzVmFsaWQoYSkpe3ZhciBiPXRoaXMuX2hhbmRsZXIuZ2V0TmFtZShhKTsKaWYoITE9PT10aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbk1hbnVhbFJldHJ5KGEsYikpcmV0dXJuITE7dGhpcy5sb2coIlJldHJ5aW5nIHVwbG9hZCBmb3IgJyIrYisiJyAoaWQ6ICIrYSsiKS4uLiIpO3RoaXMuX2ZpbGVzSW5Qcm9ncmVzcysrO3JldHVybiEwfXRoaXMubG9nKCInIithKyInIGlzIG5vdCBhIHZhbGlkIGZpbGUgSUQiLCJlcnJvciIpO3JldHVybiExfSxfbWF5YmVQYXJzZUFuZFNlbmRVcGxvYWRFcnJvcjpmdW5jdGlvbihhLGIsYyxkKXtpZighYy5zdWNjZXNzKWlmKGQmJjIwMCE9PWQuc3RhdHVzJiYhYy5lcnJvcil0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbkVycm9yKGEsYiwiWEhSIHJldHVybmVkIHJlc3BvbnNlIGNvZGUgIitkLnN0YXR1cyk7ZWxzZSB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbkVycm9yKGEsYixjLmVycm9yP2MuZXJyb3I6IlVwbG9hZCBmYWlsdXJlIHJlYXNvbiB1bmtub3duIil9LF91cGxvYWRGaWxlTGlzdDpmdW5jdGlvbihhKXt2YXIgYiwKYztiPXRoaXMuX2dldFZhbGlkYXRpb25EZXNjcmlwdG9ycyhhKTsxPGIubGVuZ3RoJiYoYz0hMT09PXRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uVmFsaWRhdGUoYikpO2lmKCFjKWlmKDA8YS5sZW5ndGgpZm9yKGI9MDtiPGEubGVuZ3RoO2IrKylpZih0aGlzLl92YWxpZGF0ZUZpbGUoYVtiXSkpdGhpcy5fdXBsb2FkRmlsZShhW2JdKTtlbHNle2lmKHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5zdG9wT25GaXJzdEludmFsaWRGaWxlKWJyZWFrfWVsc2UgdGhpcy5fZXJyb3IoIm5vRmlsZXNFcnJvciIsIiIpfSxfdXBsb2FkRmlsZTpmdW5jdGlvbihhKXt2YXIgYT10aGlzLl9oYW5kbGVyLmFkZChhKSxiPXRoaXMuX2hhbmRsZXIuZ2V0TmFtZShhKTshMSE9PXRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uU3VibWl0KGEsYikmJih0aGlzLl9vblN1Ym1pdChhLGIpLHRoaXMuX29wdGlvbnMuYXV0b1VwbG9hZD90aGlzLl9oYW5kbGVyLnVwbG9hZChhLHRoaXMuX29wdGlvbnMucmVxdWVzdC5wYXJhbXMpOgp0aGlzLl9zdG9yZUZpbGVGb3JMYXRlcihhKSl9LF9zdG9yZUZpbGVGb3JMYXRlcjpmdW5jdGlvbihhKXt0aGlzLl9zdG9yZWRGaWxlSWRzLnB1c2goYSl9LF92YWxpZGF0ZUZpbGU6ZnVuY3Rpb24oYSl7dmFyIGIsYyxhPXRoaXMuX2dldFZhbGlkYXRpb25EZXNjcmlwdG9yKGEpO2I9YS5uYW1lO2M9YS5zaXplO2lmKCExPT09dGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25WYWxpZGF0ZShbYV0pKXJldHVybiExO2lmKHRoaXMuX2lzQWxsb3dlZEV4dGVuc2lvbihiKSl7aWYoMD09PWMpcmV0dXJuIHRoaXMuX2Vycm9yKCJlbXB0eUVycm9yIixiKSwhMTtpZihjJiZ0aGlzLl9vcHRpb25zLnZhbGlkYXRpb24uc2l6ZUxpbWl0JiZjPnRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5zaXplTGltaXQpcmV0dXJuIHRoaXMuX2Vycm9yKCJzaXplRXJyb3IiLGIpLCExO2lmKGMmJmM8dGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLm1pblNpemVMaW1pdClyZXR1cm4gdGhpcy5fZXJyb3IoIm1pblNpemVFcnJvciIsCmIpLCExfWVsc2UgcmV0dXJuIHRoaXMuX2Vycm9yKCJ0eXBlRXJyb3IiLGIpLCExO3JldHVybiEwfSxfZXJyb3I6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9vcHRpb25zLm1lc3NhZ2VzW2FdLGQ9dGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLmFsbG93ZWRFeHRlbnNpb25zLmpvaW4oIiwgIiksZT10aGlzLl9mb3JtYXRGaWxlTmFtZShiKSxjPWMucmVwbGFjZSgie2ZpbGV9IixlKSxjPWMucmVwbGFjZSgie2V4dGVuc2lvbnN9IixkKSxkPXRoaXMuX2Zvcm1hdFNpemUodGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLnNpemVMaW1pdCksYz1jLnJlcGxhY2UoIntzaXplTGltaXR9IixkKSxkPXRoaXMuX2Zvcm1hdFNpemUodGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLm1pblNpemVMaW1pdCksYz1jLnJlcGxhY2UoInttaW5TaXplTGltaXR9IixkKTt0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbkVycm9yKG51bGwsYixjKTtyZXR1cm4gY30sX2Zvcm1hdEZpbGVOYW1lOmZ1bmN0aW9uKGEpezMzPAphLmxlbmd0aCYmKGE9YS5zbGljZSgwLDE5KSsiLi4uIithLnNsaWNlKC0xMykpO3JldHVybiBhfSxfaXNBbGxvd2VkRXh0ZW5zaW9uOmZ1bmN0aW9uKGEpe3ZhciBhPS0xIT09YS5pbmRleE9mKCIuIik/YS5yZXBsYWNlKC8uKlsuXS8sIiIpLnRvTG93ZXJDYXNlKCk6IiIsYj10aGlzLl9vcHRpb25zLnZhbGlkYXRpb24uYWxsb3dlZEV4dGVuc2lvbnM7aWYoIWIubGVuZ3RoKXJldHVybiEwO2Zvcih2YXIgYz0wO2M8Yi5sZW5ndGg7YysrKWlmKGJbY10udG9Mb3dlckNhc2UoKT09YSlyZXR1cm4hMDtyZXR1cm4hMX0sX2Zvcm1hdFNpemU6ZnVuY3Rpb24oYSl7dmFyIGI9LTE7ZG8gYS89MTAyNCxiKys7d2hpbGUoOTk8YSk7cmV0dXJuIE1hdGgubWF4KGEsMC4xKS50b0ZpeGVkKDEpKyJrQiBNQiBHQiBUQiBQQiBFQiIuc3BsaXQoIiAiKVtiXX0sX3dyYXBDYWxsYmFja3M6ZnVuY3Rpb24oKXt2YXIgYSxiO2E9dGhpcztiPWZ1bmN0aW9uKGIsYyxmKXt0cnl7cmV0dXJuIGMuYXBwbHkoYSwKZil9Y2F0Y2goZyl7YS5sb2coIkNhdWdodCBleGNlcHRpb24gaW4gJyIrYisiJyBjYWxsYmFjayAtICIrZywiZXJyb3IiKX19O2Zvcih2YXIgYyBpbiB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcykoZnVuY3Rpb24oKXt2YXIgZD1hLl9vcHRpb25zLmNhbGxiYWNrc1tjXTthLl9vcHRpb25zLmNhbGxiYWNrc1tjXT1mdW5jdGlvbigpe3JldHVybiBiKGMsZCxhcmd1bWVudHMpfX0pKCl9LF9wYXJzZUZpbGVOYW1lOmZ1bmN0aW9uKGEpe3JldHVybiBhLnZhbHVlP2EudmFsdWUucmVwbGFjZSgvLiooXC98XFwpLywiIik6bnVsbCE9PWEuZmlsZU5hbWUmJnZvaWQgMCE9PWEuZmlsZU5hbWU/YS5maWxlTmFtZTphLm5hbWV9LF9wYXJzZUZpbGVTaXplOmZ1bmN0aW9uKGEpe3ZhciBiO2EudmFsdWV8fChiPW51bGwhPT1hLmZpbGVTaXplJiZ2b2lkIDAhPT1hLmZpbGVTaXplP2EuZmlsZVNpemU6YS5zaXplKTtyZXR1cm4gYn0sX2dldFZhbGlkYXRpb25EZXNjcmlwdG9yOmZ1bmN0aW9uKGEpe3ZhciBiLApjO2M9e307Yj10aGlzLl9wYXJzZUZpbGVOYW1lKGEpO2E9dGhpcy5fcGFyc2VGaWxlU2l6ZShhKTtjLm5hbWU9YjthJiYoYy5zaXplPWEpO3JldHVybiBjfSxfZ2V0VmFsaWRhdGlvbkRlc2NyaXB0b3JzOmZ1bmN0aW9uKGEpe3ZhciBiLGM7Yz1bXTtmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWMucHVzaChhW2JdKTtyZXR1cm4gY319OwpxcS5GaW5lVXBsb2FkZXI9ZnVuY3Rpb24oYSl7cXEuRmluZVVwbG9hZGVyQmFzaWMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3FxLmV4dGVuZCh0aGlzLl9vcHRpb25zLHtlbGVtZW50Om51bGwsbGlzdEVsZW1lbnQ6bnVsbCxkcmFnQW5kRHJvcDp7ZXh0cmFEcm9wem9uZXM6W10saGlkZURyb3B6b25lczohMCxkaXNhYmxlRGVmYXVsdERyb3B6b25lOiExfSx0ZXh0Ont1cGxvYWRCdXR0b246IlVwbG9hZCBhIGZpbGUiLGNhbmNlbEJ1dHRvbjoiQ2FuY2VsIixyZXRyeUJ1dHRvbjoiUmV0cnkiLGZhaWxVcGxvYWQ6IlVwbG9hZCBmYWlsZWQiLGRyYWdab25lOiJEcm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkIixmb3JtYXRQcm9ncmVzczoie3BlcmNlbnR9JSBvZiB7dG90YWxfc2l6ZX0iLHdhaXRpbmdGb3JSZXNwb25zZToiUHJvY2Vzc2luZy4uLiJ9LHRlbXBsYXRlOic8ZGl2IGNsYXNzPSJxcS11cGxvYWRlciI+JysoIXRoaXMuX29wdGlvbnMuZHJhZ0FuZERyb3B8fCF0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmRpc2FibGVEZWZhdWx0RHJvcHpvbmU/Cic8ZGl2IGNsYXNzPSJxcS11cGxvYWQtZHJvcC1hcmVhIj48c3Bhbj57ZHJhZ1pvbmVUZXh0fTwvc3Bhbj48L2Rpdj4nOiIiKSsoIXRoaXMuX29wdGlvbnMuYnV0dG9uPyc8ZGl2IGNsYXNzPSJxcS11cGxvYWQtYnV0dG9uIj48ZGl2Pnt1cGxvYWRCdXR0b25UZXh0fTwvZGl2PjwvZGl2Pic6IiIpKyghdGhpcy5fb3B0aW9ucy5saXN0RWxlbWVudD8nPHVsIGNsYXNzPSJxcS11cGxvYWQtbGlzdCI+PC91bD4nOiIiKSsiPC9kaXY+IixmaWxlVGVtcGxhdGU6JzxsaT48ZGl2IGNsYXNzPSJxcS1wcm9ncmVzcy1iYXIiPjwvZGl2PjxzcGFuIGNsYXNzPSJxcS11cGxvYWQtc3Bpbm5lciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJxcS11cGxvYWQtZmluaXNoZWQiPjwvc3Bhbj48c3BhbiBjbGFzcz0icXEtdXBsb2FkLWZpbGUiPjwvc3Bhbj48c3BhbiBjbGFzcz0icXEtdXBsb2FkLXNpemUiPjwvc3Bhbj48YSBjbGFzcz0icXEtdXBsb2FkLWNhbmNlbCIgaHJlZj0iIyI+e2NhbmNlbEJ1dHRvblRleHR9PC9hPjxhIGNsYXNzPSJxcS11cGxvYWQtcmV0cnkiIGhyZWY9IiMiPntyZXRyeUJ1dHRvblRleHR9PC9hPjxzcGFuIGNsYXNzPSJxcS11cGxvYWQtc3RhdHVzLXRleHQiPntzdGF0dXNUZXh0fTwvc3Bhbj48L2xpPicsCmNsYXNzZXM6e2J1dHRvbjoicXEtdXBsb2FkLWJ1dHRvbiIsZHJvcDoicXEtdXBsb2FkLWRyb3AtYXJlYSIsZHJvcEFjdGl2ZToicXEtdXBsb2FkLWRyb3AtYXJlYS1hY3RpdmUiLGRyb3BEaXNhYmxlZDoicXEtdXBsb2FkLWRyb3AtYXJlYS1kaXNhYmxlZCIsbGlzdDoicXEtdXBsb2FkLWxpc3QiLHByb2dyZXNzQmFyOiJxcS1wcm9ncmVzcy1iYXIiLGZpbGU6InFxLXVwbG9hZC1maWxlIixzcGlubmVyOiJxcS11cGxvYWQtc3Bpbm5lciIsZmluaXNoZWQ6InFxLXVwbG9hZC1maW5pc2hlZCIscmV0cnlpbmc6InFxLXVwbG9hZC1yZXRyeWluZyIscmV0cnlhYmxlOiJxcS11cGxvYWQtcmV0cnlhYmxlIixzaXplOiJxcS11cGxvYWQtc2l6ZSIsY2FuY2VsOiJxcS11cGxvYWQtY2FuY2VsIixyZXRyeToicXEtdXBsb2FkLXJldHJ5IixzdGF0dXNUZXh0OiJxcS11cGxvYWQtc3RhdHVzLXRleHQiLHN1Y2Nlc3M6InFxLXVwbG9hZC1zdWNjZXNzIixmYWlsOiJxcS11cGxvYWQtZmFpbCIsc3VjY2Vzc0ljb246bnVsbCwKZmFpbEljb246bnVsbH0sZmFpbGVkVXBsb2FkVGV4dERpc3BsYXk6e21vZGU6ImRlZmF1bHQiLG1heENoYXJzOjUwLHJlc3BvbnNlUHJvcGVydHk6ImVycm9yIixlbmFibGVUb29sdGlwOiEwfSxtZXNzYWdlczp7dG9vTWFueUZpbGVzRXJyb3I6IllvdSBtYXkgb25seSBkcm9wIG9uZSBmaWxlIn0scmV0cnk6e3Nob3dBdXRvUmV0cnlOb3RlOiEwLGF1dG9SZXRyeU5vdGU6IlJldHJ5aW5nIHtyZXRyeU51bX0ve21heEF1dG99Li4uIixzaG93QnV0dG9uOiExfSxzaG93TWVzc2FnZTpmdW5jdGlvbihhKXthbGVydChhKX19LCEwKTtxcS5leHRlbmQodGhpcy5fb3B0aW9ucyxhLCEwKTt0aGlzLl93cmFwQ2FsbGJhY2tzKCk7dGhpcy5fb3B0aW9ucy50ZW1wbGF0ZT10aGlzLl9vcHRpb25zLnRlbXBsYXRlLnJlcGxhY2UoL1x7ZHJhZ1pvbmVUZXh0XH0vZyx0aGlzLl9vcHRpb25zLnRleHQuZHJhZ1pvbmUpO3RoaXMuX29wdGlvbnMudGVtcGxhdGU9dGhpcy5fb3B0aW9ucy50ZW1wbGF0ZS5yZXBsYWNlKC9ce3VwbG9hZEJ1dHRvblRleHRcfS9nLAp0aGlzLl9vcHRpb25zLnRleHQudXBsb2FkQnV0dG9uKTt0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZT10aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZS5yZXBsYWNlKC9ce2NhbmNlbEJ1dHRvblRleHRcfS9nLHRoaXMuX29wdGlvbnMudGV4dC5jYW5jZWxCdXR0b24pO3RoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlPXRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlLnJlcGxhY2UoL1x7cmV0cnlCdXR0b25UZXh0XH0vZyx0aGlzLl9vcHRpb25zLnRleHQucmV0cnlCdXR0b24pO3RoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlPXRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlLnJlcGxhY2UoL1x7c3RhdHVzVGV4dFx9L2csIiIpO3RoaXMuX2VsZW1lbnQ9dGhpcy5fb3B0aW9ucy5lbGVtZW50O3RoaXMuX2VsZW1lbnQuaW5uZXJIVE1MPXRoaXMuX29wdGlvbnMudGVtcGxhdGU7dGhpcy5fbGlzdEVsZW1lbnQ9dGhpcy5fb3B0aW9ucy5saXN0RWxlbWVudHx8dGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LAoibGlzdCIpO3RoaXMuX2NsYXNzZXM9dGhpcy5fb3B0aW9ucy5jbGFzc2VzO3RoaXMuX2J1dHRvbnx8KHRoaXMuX2J1dHRvbj10aGlzLl9jcmVhdGVVcGxvYWRCdXR0b24odGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LCJidXR0b24iKSkpO3RoaXMuX2JpbmRDYW5jZWxBbmRSZXRyeUV2ZW50cygpO3RoaXMuX3NldHVwRHJhZ0Ryb3AoKX07cXEuZXh0ZW5kKHFxLkZpbmVVcGxvYWRlci5wcm90b3R5cGUscXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlKTsKcXEuZXh0ZW5kKHFxLkZpbmVVcGxvYWRlci5wcm90b3R5cGUse2NsZWFyU3RvcmVkRmlsZXM6ZnVuY3Rpb24oKXtxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuY2xlYXJTdG9yZWRGaWxlcy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fbGlzdEVsZW1lbnQuaW5uZXJIVE1MPSIifSxhZGRFeHRyYURyb3B6b25lOmZ1bmN0aW9uKGEpe3RoaXMuX3NldHVwRXh0cmFEcm9wem9uZShhKX0scmVtb3ZlRXh0cmFEcm9wem9uZTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmV4dHJhRHJvcHpvbmVzLGM7Zm9yKGMgaW4gYilpZihiW2NdPT09YSlyZXR1cm4gdGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5leHRyYURyb3B6b25lcy5zcGxpY2UoYywxKX0sZ2V0SXRlbUJ5RmlsZUlkOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLl9saXN0RWxlbWVudC5maXJzdENoaWxkO2I7KXtpZihiLnFxRmlsZUlkPT1hKXJldHVybiBiO2I9Yi5uZXh0U2libGluZ319LApyZXNldDpmdW5jdGlvbigpe3FxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5yZXNldC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fZWxlbWVudC5pbm5lckhUTUw9dGhpcy5fb3B0aW9ucy50ZW1wbGF0ZTt0aGlzLl9saXN0RWxlbWVudD10aGlzLl9vcHRpb25zLmxpc3RFbGVtZW50fHx0aGlzLl9maW5kKHRoaXMuX2VsZW1lbnQsImxpc3QiKTt0aGlzLl9vcHRpb25zLmJ1dHRvbnx8KHRoaXMuX2J1dHRvbj10aGlzLl9jcmVhdGVVcGxvYWRCdXR0b24odGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LCJidXR0b24iKSkpO3RoaXMuX2JpbmRDYW5jZWxBbmRSZXRyeUV2ZW50cygpO3RoaXMuX3NldHVwRHJhZ0Ryb3AoKX0sX2xlYXZpbmdfZG9jdW1lbnRfb3V0OmZ1bmN0aW9uKGEpe3JldHVybihxcS5jaHJvbWUoKXx8cXEuc2FmYXJpKCkmJnFxLndpbmRvd3MoKSkmJjA9PWEuY2xpZW50WCYmMD09YS5jbGllbnRZfHxxcS5maXJlZm94KCkmJiFhLnJlbGF0ZWRUYXJnZXR9LF9zdG9yZUZpbGVGb3JMYXRlcjpmdW5jdGlvbihhKXtxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX3N0b3JlRmlsZUZvckxhdGVyLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyk7dmFyIGI9dGhpcy5nZXRJdGVtQnlGaWxlSWQoYSk7cXEodGhpcy5fZmluZChiLCJzcGlubmVyIikpLmhpZGUoKX0sX2ZpbmQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1xcShhKS5nZXRCeUNsYXNzKHRoaXMuX29wdGlvbnMuY2xhc3Nlc1tiXSlbMF07aWYoIWMpdGhyb3cgRXJyb3IoImVsZW1lbnQgbm90IGZvdW5kICIrYik7cmV0dXJuIGN9LF9zZXR1cEV4dHJhRHJvcHpvbmU6ZnVuY3Rpb24oYSl7dGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5leHRyYURyb3B6b25lcy5wdXNoKGEpO3RoaXMuX3NldHVwRHJvcHpvbmUoYSl9LF9zZXR1cERyb3B6b25lOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1uZXcgcXEuVXBsb2FkRHJvcFpvbmUoe2VsZW1lbnQ6YSxvbkVudGVyOmZ1bmN0aW9uKGMpe3FxKGEpLmFkZENsYXNzKGIuX2NsYXNzZXMuZHJvcEFjdGl2ZSk7Yy5zdG9wUHJvcGFnYXRpb24oKX0sb25MZWF2ZTpmdW5jdGlvbigpe30sb25MZWF2ZU5vdERlc2NlbmRhbnRzOmZ1bmN0aW9uKCl7cXEoYSkucmVtb3ZlQ2xhc3MoYi5fY2xhc3Nlcy5kcm9wQWN0aXZlKX0sCm9uRHJvcDpmdW5jdGlvbihjKXtiLl9vcHRpb25zLmRyYWdBbmREcm9wLmhpZGVEcm9wem9uZXMmJnFxKGEpLmhpZGUoKTtxcShhKS5yZW1vdmVDbGFzcyhiLl9jbGFzc2VzLmRyb3BBY3RpdmUpOzE8Yy5kYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoJiYhYi5fb3B0aW9ucy5tdWx0aXBsZT9iLl9lcnJvcigidG9vTWFueUZpbGVzRXJyb3IiLCIiKTpiLl91cGxvYWRGaWxlTGlzdChjLmRhdGFUcmFuc2Zlci5maWxlcyl9fSk7dGhpcy5hZGREaXNwb3NlcihmdW5jdGlvbigpe2MuZGlzcG9zZSgpfSk7dGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5oaWRlRHJvcHpvbmVzJiZxcShhKS5oaWRlKCl9LF9zZXR1cERyYWdEcm9wOmZ1bmN0aW9uKCl7dmFyIGEsYjthPXRoaXM7dGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5kaXNhYmxlRGVmYXVsdERyb3B6b25lfHwoYj10aGlzLl9maW5kKHRoaXMuX2VsZW1lbnQsImRyb3AiKSx0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmV4dHJhRHJvcHpvbmVzLnB1c2goYikpOwp2YXIgYz10aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmV4dHJhRHJvcHpvbmVzLGQ7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKyl0aGlzLl9zZXR1cERyb3B6b25lKGNbZF0pOyF0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmRpc2FibGVEZWZhdWx0RHJvcHpvbmUmJighcXEuaWUoKXx8cXEuaWUxMCgpKSYmdGhpcy5fYXR0YWNoKGRvY3VtZW50LCJkcmFnZW50ZXIiLGZ1bmN0aW9uKCl7aWYoIXFxKGIpLmhhc0NsYXNzKGEuX2NsYXNzZXMuZHJvcERpc2FibGVkKSl7Yi5zdHlsZS5kaXNwbGF5PSJibG9jayI7Zm9yKGQ9MDtkPGMubGVuZ3RoO2QrKyljW2RdLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn19KTt0aGlzLl9hdHRhY2goZG9jdW1lbnQsImRyYWdsZWF2ZSIsZnVuY3Rpb24oYil7aWYoYS5fb3B0aW9ucy5kcmFnQW5kRHJvcC5oaWRlRHJvcHpvbmVzJiZxcS5GaW5lVXBsb2FkZXIucHJvdG90eXBlLl9sZWF2aW5nX2RvY3VtZW50X291dChiKSlmb3IoZD0wO2Q8Yy5sZW5ndGg7ZCsrKXFxKGNbZF0pLmhpZGUoKX0pOwpxcShkb2N1bWVudCkuYXR0YWNoKCJkcm9wIixmdW5jdGlvbihiKXtpZihhLl9vcHRpb25zLmRyYWdBbmREcm9wLmhpZGVEcm9wem9uZXMpZm9yKGQ9MDtkPGMubGVuZ3RoO2QrKylxcShjW2RdKS5oaWRlKCk7Yi5wcmV2ZW50RGVmYXVsdCgpfSl9LF9vblN1Ym1pdDpmdW5jdGlvbihhLGIpe3FxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25TdWJtaXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2FkZFRvTGlzdChhLGIpfSxfb25Qcm9ncmVzczpmdW5jdGlvbihhLGIsYyxkKXtxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uUHJvZ3Jlc3MuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBlLGYsZyxoO2U9dGhpcy5nZXRJdGVtQnlGaWxlSWQoYSk7Zj10aGlzLl9maW5kKGUsInByb2dyZXNzQmFyIik7aD1NYXRoLnJvdW5kKDEwMCooYy9kKSk7Yz09PWQ/KGc9dGhpcy5fZmluZChlLCJjYW5jZWwiKSxxcShnKS5oaWRlKCkscXEoZikuaGlkZSgpLHFxKHRoaXMuX2ZpbmQoZSwKInN0YXR1c1RleHQiKSkuc2V0VGV4dCh0aGlzLl9vcHRpb25zLnRleHQud2FpdGluZ0ZvclJlc3BvbnNlKSxnPXRoaXMuX2Zvcm1hdFNpemUoZCkpOihnPXRoaXMuX2Zvcm1hdFByb2dyZXNzKGMsZCkscXEoZikuY3NzKHtkaXNwbGF5OiJibG9jayJ9KSk7cXEoZikuY3NzKHt3aWR0aDpoKyIlIn0pO2U9dGhpcy5fZmluZChlLCJzaXplIik7cXEoZSkuY3NzKHtkaXNwbGF5OiJpbmxpbmUifSk7cXEoZSkuc2V0VGV4dChnKX0sX29uQ29tcGxldGU6ZnVuY3Rpb24oYSxiLGMsZCl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9vbkNvbXBsZXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZT10aGlzLmdldEl0ZW1CeUZpbGVJZChhKTtxcSh0aGlzLl9maW5kKGUsInN0YXR1c1RleHQiKSkuY2xlYXJUZXh0KCk7cXEoZSkucmVtb3ZlQ2xhc3ModGhpcy5fY2xhc3Nlcy5yZXRyeWluZyk7cXEodGhpcy5fZmluZChlLCJwcm9ncmVzc0JhciIpKS5oaWRlKCk7KCF0aGlzLl9vcHRpb25zLmRpc2FibGVDYW5jZWxGb3JGb3JtVXBsb2Fkc3x8CnFxLlVwbG9hZEhhbmRsZXJYaHIuaXNTdXBwb3J0ZWQoKSkmJnFxKHRoaXMuX2ZpbmQoZSwiY2FuY2VsIikpLmhpZGUoKTtxcSh0aGlzLl9maW5kKGUsInNwaW5uZXIiKSkuaGlkZSgpO2Muc3VjY2Vzcz8ocXEoZSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzKSx0aGlzLl9jbGFzc2VzLnN1Y2Nlc3NJY29uJiYodGhpcy5fZmluZChlLCJmaW5pc2hlZCIpLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIscXEoZSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzSWNvbikpKToocXEoZSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5mYWlsKSx0aGlzLl9jbGFzc2VzLmZhaWxJY29uJiYodGhpcy5fZmluZChlLCJmaW5pc2hlZCIpLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIscXEoZSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5mYWlsSWNvbikpLHRoaXMuX29wdGlvbnMucmV0cnkuc2hvd0J1dHRvbiYmIXRoaXMuX3ByZXZlbnRSZXRyaWVzW2FdJiZxcShlKS5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzLnJldHJ5YWJsZSksCnRoaXMuX2NvbnRyb2xGYWlsdXJlVGV4dERpc3BsYXkoZSxjKSl9LF9vblVwbG9hZDpmdW5jdGlvbihhLGIsYyl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9vblVwbG9hZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5fc2hvd1NwaW5uZXIodGhpcy5nZXRJdGVtQnlGaWxlSWQoYSkpfSxfb25CZWZvcmVBdXRvUmV0cnk6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZjtxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uQmVmb3JlQXV0b1JldHJ5LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtiPXRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGEpO2M9dGhpcy5fZmluZChiLCJwcm9ncmVzc0JhciIpO3RoaXMuX3Nob3dDYW5jZWxMaW5rKGIpO2Muc3R5bGUud2lkdGg9MDtxcShjKS5oaWRlKCk7dGhpcy5fb3B0aW9ucy5yZXRyeS5zaG93QXV0b1JldHJ5Tm90ZSYmKGM9dGhpcy5fZmluZChiLCJzdGF0dXNUZXh0IiksZD10aGlzLl9hdXRvUmV0cmllc1thXSsxLGU9dGhpcy5fb3B0aW9ucy5yZXRyeS5tYXhBdXRvQXR0ZW1wdHMsCmY9dGhpcy5fb3B0aW9ucy5yZXRyeS5hdXRvUmV0cnlOb3RlLnJlcGxhY2UoL1x7cmV0cnlOdW1cfS9nLGQpLGY9Zi5yZXBsYWNlKC9ce21heEF1dG9cfS9nLGUpLHFxKGMpLnNldFRleHQoZiksMT09PWQmJnFxKGIpLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMucmV0cnlpbmcpKX0sX29uQmVmb3JlTWFudWFsUmV0cnk6ZnVuY3Rpb24oYSl7aWYocXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9vbkJlZm9yZU1hbnVhbFJldHJ5LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl7dmFyIGI9dGhpcy5nZXRJdGVtQnlGaWxlSWQoYSk7dGhpcy5fZmluZChiLCJwcm9ncmVzc0JhciIpLnN0eWxlLndpZHRoPTA7cXEoYikucmVtb3ZlQ2xhc3ModGhpcy5fY2xhc3Nlcy5mYWlsKTt0aGlzLl9zaG93U3Bpbm5lcihiKTt0aGlzLl9zaG93Q2FuY2VsTGluayhiKTtyZXR1cm4hMH1yZXR1cm4hMX0sX2FkZFRvTGlzdDpmdW5jdGlvbihhLGIpe3ZhciBjPXFxLnRvRWxlbWVudCh0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZSk7CmlmKHRoaXMuX29wdGlvbnMuZGlzYWJsZUNhbmNlbEZvckZvcm1VcGxvYWRzJiYhcXEuVXBsb2FkSGFuZGxlclhoci5pc1N1cHBvcnRlZCgpKXt2YXIgZD10aGlzLl9maW5kKGMsImNhbmNlbCIpO3FxKGQpLnJlbW92ZSgpfWMucXFGaWxlSWQ9YTtkPXRoaXMuX2ZpbmQoYywiZmlsZSIpO3FxKGQpLnNldFRleHQodGhpcy5fZm9ybWF0RmlsZU5hbWUoYikpO3FxKHRoaXMuX2ZpbmQoYywic2l6ZSIpKS5oaWRlKCk7dGhpcy5fb3B0aW9ucy5tdWx0aXBsZXx8dGhpcy5fY2xlYXJMaXN0KCk7dGhpcy5fbGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYyl9LF9jbGVhckxpc3Q6ZnVuY3Rpb24oKXt0aGlzLl9saXN0RWxlbWVudC5pbm5lckhUTUw9IiI7dGhpcy5jbGVhclN0b3JlZEZpbGVzKCl9LF9iaW5kQ2FuY2VsQW5kUmV0cnlFdmVudHM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO3RoaXMuX2F0dGFjaCh0aGlzLl9saXN0RWxlbWVudCwiY2xpY2siLGZ1bmN0aW9uKGIpe3ZhciBiPWJ8fHdpbmRvdy5ldmVudCwKYz1iLnRhcmdldHx8Yi5zcmNFbGVtZW50O2lmKHFxKGMpLmhhc0NsYXNzKGEuX2NsYXNzZXMuY2FuY2VsKXx8cXEoYykuaGFzQ2xhc3MoYS5fY2xhc3Nlcy5yZXRyeSkpe3FxLnByZXZlbnREZWZhdWx0KGIpO2ZvcihiPWMucGFyZW50Tm9kZTt2b2lkIDA9PWIucXFGaWxlSWQ7KWI9Yz1jLnBhcmVudE5vZGU7cXEoYykuaGFzQ2xhc3MoYS5fY2xhc3Nlcy5jYW5jZWwpPyhhLmNhbmNlbChiLnFxRmlsZUlkKSxxcShiKS5yZW1vdmUoKSk6KHFxKGIpLnJlbW92ZUNsYXNzKGEuX2NsYXNzZXMucmV0cnlhYmxlKSxhLnJldHJ5KGIucXFGaWxlSWQpKX19KX0sX2Zvcm1hdFByb2dyZXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcy5fb3B0aW9ucy50ZXh0LmZvcm1hdFByb2dyZXNzLGQ9TWF0aC5yb3VuZCgxMDAqKGEvYikpLGM9Yy5yZXBsYWNlKCJ7cGVyY2VudH0iLGQpLGQ9dGhpcy5fZm9ybWF0U2l6ZShiKTtyZXR1cm4gYz1jLnJlcGxhY2UoInt0b3RhbF9zaXplfSIsZCl9LF9jb250cm9sRmFpbHVyZVRleHREaXNwbGF5OmZ1bmN0aW9uKGEsCmIpe3ZhciBjLGQsZSxmO2M9dGhpcy5fb3B0aW9ucy5mYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5tb2RlO2Q9dGhpcy5fb3B0aW9ucy5mYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5tYXhDaGFycztlPXRoaXMuX29wdGlvbnMuZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkucmVzcG9uc2VQcm9wZXJ0eTsiY3VzdG9tIj09PWM/KChjPWJbZV0pP2MubGVuZ3RoPmQmJihmPWMuc3Vic3RyaW5nKDAsZCkrIi4uLiIpOihjPXRoaXMuX29wdGlvbnMudGV4dC5mYWlsVXBsb2FkLHRoaXMubG9nKCInIitlKyInIGlzIG5vdCBhIHZhbGlkIHByb3BlcnR5IG9uIHRoZSBzZXJ2ZXIgcmVzcG9uc2UuIiwid2FybiIpKSxxcSh0aGlzLl9maW5kKGEsInN0YXR1c1RleHQiKSkuc2V0VGV4dChmfHxjKSx0aGlzLl9vcHRpb25zLmZhaWxlZFVwbG9hZFRleHREaXNwbGF5LmVuYWJsZVRvb2x0aXAmJnRoaXMuX3Nob3dUb29sdGlwKGEsYykpOiJkZWZhdWx0Ij09PWM/cXEodGhpcy5fZmluZChhLCJzdGF0dXNUZXh0IikpLnNldFRleHQodGhpcy5fb3B0aW9ucy50ZXh0LmZhaWxVcGxvYWQpOgoibm9uZSIhPT1jJiZ0aGlzLmxvZygiZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkubW9kZSB2YWx1ZSBvZiAnIitjKyInIGlzIG5vdCB2YWxpZCIsIndhcm4iKX0sX3Nob3dUb29sdGlwOmZ1bmN0aW9uKGEsYil7YS50aXRsZT1ifSxfc2hvd1NwaW5uZXI6ZnVuY3Rpb24oYSl7dGhpcy5fZmluZChhLCJzcGlubmVyIikuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn0sX3Nob3dDYW5jZWxMaW5rOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9vcHRpb25zLmRpc2FibGVDYW5jZWxGb3JGb3JtVXBsb2Fkc3x8cXEuVXBsb2FkSGFuZGxlclhoci5pc1N1cHBvcnRlZCgpKXRoaXMuX2ZpbmQoYSwiY2FuY2VsIikuc3R5bGUuZGlzcGxheT0iaW5saW5lIn0sX2Vycm9yOmZ1bmN0aW9uKGEsYil7dGhpcy5fb3B0aW9ucy5zaG93TWVzc2FnZShxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX2Vycm9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9fSk7CnFxLlVwbG9hZERyb3Bab25lPWZ1bmN0aW9uKGEpe3RoaXMuX29wdGlvbnM9e2VsZW1lbnQ6bnVsbCxvbkVudGVyOmZ1bmN0aW9uKCl7fSxvbkxlYXZlOmZ1bmN0aW9uKCl7fSxvbkxlYXZlTm90RGVzY2VuZGFudHM6ZnVuY3Rpb24oKXt9LG9uRHJvcDpmdW5jdGlvbigpe319O3FxLmV4dGVuZCh0aGlzLl9vcHRpb25zLGEpO3FxLmV4dGVuZCh0aGlzLHFxLkRpc3Bvc2VTdXBwb3J0KTt0aGlzLl9lbGVtZW50PXRoaXMuX29wdGlvbnMuZWxlbWVudDt0aGlzLl9kaXNhYmxlRHJvcE91dHNpZGUoKTt0aGlzLl9hdHRhY2hFdmVudHMoKX07CnFxLlVwbG9hZERyb3Bab25lLnByb3RvdHlwZT17X2RyYWdvdmVyX3Nob3VsZF9iZV9jYW5jZWxlZDpmdW5jdGlvbigpe3JldHVybiBxcS5zYWZhcmkoKXx8cXEuZmlyZWZveCgpJiZxcS53aW5kb3dzKCl9LF9kaXNhYmxlRHJvcE91dHNpZGU6ZnVuY3Rpb24oKXtxcS5VcGxvYWREcm9wWm9uZS5kcm9wT3V0c2lkZURpc2FibGVkfHwodGhpcy5fZHJhZ292ZXJfc2hvdWxkX2JlX2NhbmNlbGVkP3FxKGRvY3VtZW50KS5hdHRhY2goImRyYWdvdmVyIixmdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCl9KTpxcShkb2N1bWVudCkuYXR0YWNoKCJkcmFnb3ZlciIsZnVuY3Rpb24oYSl7YS5kYXRhVHJhbnNmZXImJihhLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0PSJub25lIixhLnByZXZlbnREZWZhdWx0KCkpfSkscXEuVXBsb2FkRHJvcFpvbmUuZHJvcE91dHNpZGVEaXNhYmxlZD0hMCl9LF9hdHRhY2hFdmVudHM6ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2EuX2F0dGFjaChhLl9lbGVtZW50LAoiZHJhZ292ZXIiLGZ1bmN0aW9uKGIpe2lmKGEuX2lzVmFsaWRGaWxlRHJhZyhiKSl7dmFyIGM9cXEuaWUoKT9udWxsOmIuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQ7Yi5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdD0ibW92ZSI9PWN8fCJsaW5rTW92ZSI9PWM/Im1vdmUiOiJjb3B5IjtiLnN0b3BQcm9wYWdhdGlvbigpO2IucHJldmVudERlZmF1bHQoKX19KTthLl9hdHRhY2goYS5fZWxlbWVudCwiZHJhZ2VudGVyIixmdW5jdGlvbihiKXtpZihhLl9pc1ZhbGlkRmlsZURyYWcoYikpYS5fb3B0aW9ucy5vbkVudGVyKGIpfSk7YS5fYXR0YWNoKGEuX2VsZW1lbnQsImRyYWdsZWF2ZSIsZnVuY3Rpb24oYil7aWYoYS5faXNWYWxpZEZpbGVEcmFnKGIpKXthLl9vcHRpb25zLm9uTGVhdmUoYik7dmFyIGM9ZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChiLmNsaWVudFgsYi5jbGllbnRZKTtpZighcXEodGhpcykuY29udGFpbnMoYykpYS5fb3B0aW9ucy5vbkxlYXZlTm90RGVzY2VuZGFudHMoYil9fSk7CmEuX2F0dGFjaChhLl9lbGVtZW50LCJkcm9wIixmdW5jdGlvbihiKXthLl9pc1ZhbGlkRmlsZURyYWcoYikmJihiLnByZXZlbnREZWZhdWx0KCksYS5fb3B0aW9ucy5vbkRyb3AoYikpfSl9LF9pc1ZhbGlkRmlsZURyYWc6ZnVuY3Rpb24oYSl7aWYocXEuaWUoKSYmIXFxLmllMTAoKSlyZXR1cm4hMTt2YXIgYT1hLmRhdGFUcmFuc2ZlcixiPXFxLnNhZmFyaSgpLGM9cXEuaWUxMCgpPyEwOiJub25lIiE9YS5lZmZlY3RBbGxvd2VkO3JldHVybiBhJiZjJiYoYS5maWxlc3x8IWImJmEudHlwZXMuY29udGFpbnMmJmEudHlwZXMuY29udGFpbnMoIkZpbGVzIikpfX07CnFxLlVwbG9hZEhhbmRsZXJBYnN0cmFjdD1mdW5jdGlvbihhKXt0aGlzLl9vcHRpb25zPXtkZWJ1ZzohMSxlbmRwb2ludDoiL3VwbG9hZC5waHAiLG1heENvbm5lY3Rpb25zOjk5OSxsb2c6ZnVuY3Rpb24oKXt9LG9uUHJvZ3Jlc3M6ZnVuY3Rpb24oKXt9LG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt9LG9uQ2FuY2VsOmZ1bmN0aW9uKCl7fSxvblVwbG9hZDpmdW5jdGlvbigpe30sb25BdXRvUmV0cnk6ZnVuY3Rpb24oKXt9fTtxcS5leHRlbmQodGhpcy5fb3B0aW9ucyxhKTt0aGlzLl9xdWV1ZT1bXTt0aGlzLl9wYXJhbXM9W107dGhpcy5sb2c9dGhpcy5fb3B0aW9ucy5sb2d9OwpxcS5VcGxvYWRIYW5kbGVyQWJzdHJhY3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oKXt9LHVwbG9hZDpmdW5jdGlvbihhLGIpe3ZhciBjPXRoaXMuX3F1ZXVlLnB1c2goYSksZD17fTtxcS5leHRlbmQoZCxiKTt0aGlzLl9wYXJhbXNbYV09ZDtjPD10aGlzLl9vcHRpb25zLm1heENvbm5lY3Rpb25zJiZ0aGlzLl91cGxvYWQoYSx0aGlzLl9wYXJhbXNbYV0pfSxyZXRyeTpmdW5jdGlvbihhKXswPD1xcS5pbmRleE9mKHRoaXMuX3F1ZXVlLGEpP3RoaXMuX3VwbG9hZChhLHRoaXMuX3BhcmFtc1thXSk6dGhpcy51cGxvYWQoYSx0aGlzLl9wYXJhbXNbYV0pfSxjYW5jZWw6ZnVuY3Rpb24oYSl7dGhpcy5sb2coIkNhbmNlbGxpbmcgIithKTt0aGlzLl9jYW5jZWwoYSk7dGhpcy5fZGVxdWV1ZShhKX0sY2FuY2VsQWxsOmZ1bmN0aW9uKCl7Zm9yKHZhciBhPTA7YTx0aGlzLl9xdWV1ZS5sZW5ndGg7YSsrKXRoaXMuX2NhbmNlbCh0aGlzLl9xdWV1ZVthXSk7dGhpcy5fcXVldWU9W119LGdldE5hbWU6ZnVuY3Rpb24oKXt9LApnZXRTaXplOmZ1bmN0aW9uKCl7fSxnZXRRdWV1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9xdWV1ZX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmxvZygiUmVzZXR0aW5nIHVwbG9hZCBoYW5kbGVyIik7dGhpcy5fcXVldWU9W107dGhpcy5fcGFyYW1zPVtdfSxfdXBsb2FkOmZ1bmN0aW9uKCl7fSxfY2FuY2VsOmZ1bmN0aW9uKCl7fSxfZGVxdWV1ZTpmdW5jdGlvbihhKXthPXFxLmluZGV4T2YodGhpcy5fcXVldWUsYSk7dGhpcy5fcXVldWUuc3BsaWNlKGEsMSk7dmFyIGI9dGhpcy5fb3B0aW9ucy5tYXhDb25uZWN0aW9uczt0aGlzLl9xdWV1ZS5sZW5ndGg+PWImJmE8YiYmKGE9dGhpcy5fcXVldWVbYi0xXSx0aGlzLl91cGxvYWQoYSx0aGlzLl9wYXJhbXNbYV0pKX0saXNWYWxpZDpmdW5jdGlvbigpe319OwpxcS5VcGxvYWRIYW5kbGVyRm9ybT1mdW5jdGlvbihhKXtxcS5VcGxvYWRIYW5kbGVyQWJzdHJhY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2lucHV0cz17fTt0aGlzLl9kZXRhY2hfbG9hZF9ldmVudHM9e319O3FxLmV4dGVuZChxcS5VcGxvYWRIYW5kbGVyRm9ybS5wcm90b3R5cGUscXEuVXBsb2FkSGFuZGxlckFic3RyYWN0LnByb3RvdHlwZSk7CnFxLmV4dGVuZChxcS5VcGxvYWRIYW5kbGVyRm9ybS5wcm90b3R5cGUse2FkZDpmdW5jdGlvbihhKXthLnNldEF0dHJpYnV0ZSgibmFtZSIsdGhpcy5fb3B0aW9ucy5pbnB1dE5hbWUpO3ZhciBiPSJxcS11cGxvYWQtaGFuZGxlci1pZnJhbWUiK3FxLmdldFVuaXF1ZUlkKCk7dGhpcy5faW5wdXRzW2JdPWE7YS5wYXJlbnROb2RlJiZxcShhKS5yZW1vdmUoKTtyZXR1cm4gYn0sZ2V0TmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faW5wdXRzW2FdLnZhbHVlLnJlcGxhY2UoLy4qKFwvfFxcKS8sIiIpfSxpc1ZhbGlkOmZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT10aGlzLl9pbnB1dHNbYV19LHJlc2V0OmZ1bmN0aW9uKCl7cXEuVXBsb2FkSGFuZGxlckFic3RyYWN0LnByb3RvdHlwZS5yZXNldC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5faW5wdXRzPXt9O3RoaXMuX2RldGFjaF9sb2FkX2V2ZW50cz17fX0sX2NhbmNlbDpmdW5jdGlvbihhKXt0aGlzLl9vcHRpb25zLm9uQ2FuY2VsKGEsCnRoaXMuZ2V0TmFtZShhKSk7ZGVsZXRlIHRoaXMuX2lucHV0c1thXTtkZWxldGUgdGhpcy5fZGV0YWNoX2xvYWRfZXZlbnRzW2FdO2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpYS5zZXRBdHRyaWJ1dGUoInNyYyIsImphdmFzY3JpcHQ6ZmFsc2U7IikscXEoYSkucmVtb3ZlKCl9LF91cGxvYWQ6ZnVuY3Rpb24oYSxiKXt0aGlzLl9vcHRpb25zLm9uVXBsb2FkKGEsdGhpcy5nZXROYW1lKGEpLCExKTt2YXIgYz10aGlzLl9pbnB1dHNbYV07aWYoIWMpdGhyb3cgRXJyb3IoImZpbGUgd2l0aCBwYXNzZWQgaWQgd2FzIG5vdCBhZGRlZCwgb3IgYWxyZWFkeSB1cGxvYWRlZCBvciBjYW5jZWxsZWQiKTt2YXIgZD10aGlzLmdldE5hbWUoYSk7Ylt0aGlzLl9vcHRpb25zLmlucHV0TmFtZV09ZDt2YXIgZT10aGlzLl9jcmVhdGVJZnJhbWUoYSksZj10aGlzLl9jcmVhdGVGb3JtKGUsYik7Zi5hcHBlbmRDaGlsZChjKTt2YXIgZz10aGlzO3RoaXMuX2F0dGFjaExvYWRFdmVudChlLGZ1bmN0aW9uKCl7Zy5sb2coImlmcmFtZSBsb2FkZWQiKTsKdmFyIGI9Zy5fZ2V0SWZyYW1lQ29udGVudEpTT04oZSk7c2V0VGltZW91dChmdW5jdGlvbigpe2cuX2RldGFjaF9sb2FkX2V2ZW50c1thXSgpO2RlbGV0ZSBnLl9kZXRhY2hfbG9hZF9ldmVudHNbYV07cXEoZSkucmVtb3ZlKCl9LDEpO2lmKGIuc3VjY2Vzc3x8IWcuX29wdGlvbnMub25BdXRvUmV0cnkoYSxkLGIpKWcuX29wdGlvbnMub25Db21wbGV0ZShhLGQsYiksZy5fZGVxdWV1ZShhKX0pO3RoaXMubG9nKCJTZW5kaW5nIHVwbG9hZCByZXF1ZXN0IGZvciAiK2EpO2Yuc3VibWl0KCk7cXEoZikucmVtb3ZlKCk7cmV0dXJuIGF9LF9hdHRhY2hMb2FkRXZlbnQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzO3RoaXMuX2RldGFjaF9sb2FkX2V2ZW50c1thLmlkXT1xcShhKS5hdHRhY2goImxvYWQiLGZ1bmN0aW9uKCl7Yy5sb2coIlJlY2VpdmVkIHJlc3BvbnNlIGZvciAiK2EuaWQpO2lmKGEucGFyZW50Tm9kZSl7dHJ5e2lmKGEuY29udGVudERvY3VtZW50JiZhLmNvbnRlbnREb2N1bWVudC5ib2R5JiYKImZhbHNlIj09YS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwpcmV0dXJufWNhdGNoKGQpe2MubG9nKCJFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gYWNjZXNzIGlmcmFtZSBkdXJpbmcgaGFuZGxpbmcgb2YgdXBsb2FkIHJlc3BvbnNlICgiK2QrIikiLCJlcnJvciIpfWIoKX19KX0sX2dldElmcmFtZUNvbnRlbnRKU09OOmZ1bmN0aW9uKGEpe3RyeXt2YXIgYj1hLmNvbnRlbnREb2N1bWVudD9hLmNvbnRlbnREb2N1bWVudDphLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsYyxkPWIuYm9keS5pbm5lckhUTUw7dGhpcy5sb2coImNvbnZlcnRpbmcgaWZyYW1lJ3MgaW5uZXJIVE1MIHRvIEpTT04iKTt0aGlzLmxvZygiaW5uZXJIVE1MID0gIitkKTtkJiZkLm1hdGNoKC9ePHByZS9pKSYmKGQ9Yi5ib2R5LmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWUpO2M9ZXZhbCgiKCIrZCsiKSIpfWNhdGNoKGUpe3RoaXMubG9nKCJFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gcGFyc2UgZm9ybSB1cGxvYWQgcmVzcG9uc2UgKCIrCmUrIikiLCJlcnJvciIpLGM9e3N1Y2Nlc3M6ITF9fXJldHVybiBjfSxfY3JlYXRlSWZyYW1lOmZ1bmN0aW9uKGEpe3ZhciBiPXFxLnRvRWxlbWVudCgnPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7IiBuYW1lPSInK2ErJyIgLz4nKTtiLnNldEF0dHJpYnV0ZSgiaWQiLGEpO2Iuc3R5bGUuZGlzcGxheT0ibm9uZSI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiKTtyZXR1cm4gYn0sX2NyZWF0ZUZvcm06ZnVuY3Rpb24oYSxiKXt2YXIgYz1xcS50b0VsZW1lbnQoJzxmb3JtIG1ldGhvZD0iJysodGhpcy5fb3B0aW9ucy5kZW1vTW9kZT8iR0VUIjoiUE9TVCIpKyciIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjwvZm9ybT4nKSxkPXFxLm9iajJ1cmwoYix0aGlzLl9vcHRpb25zLmVuZHBvaW50KTtjLnNldEF0dHJpYnV0ZSgiYWN0aW9uIixkKTtjLnNldEF0dHJpYnV0ZSgidGFyZ2V0IixhLm5hbWUpO2Muc3R5bGUuZGlzcGxheT0ibm9uZSI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjKTsKcmV0dXJuIGN9fSk7cXEuVXBsb2FkSGFuZGxlclhocj1mdW5jdGlvbihhKXtxcS5VcGxvYWRIYW5kbGVyQWJzdHJhY3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2ZpbGVzPVtdO3RoaXMuX3hocnM9W107dGhpcy5fbG9hZGVkPVtdfTtxcS5VcGxvYWRIYW5kbGVyWGhyLmlzU3VwcG9ydGVkPWZ1bmN0aW9uKCl7dmFyIGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTthLnR5cGU9ImZpbGUiO3JldHVybiJtdWx0aXBsZSJpbiBhJiYidW5kZWZpbmVkIiE9dHlwZW9mIEZpbGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgRm9ybURhdGEmJiJ1bmRlZmluZWQiIT10eXBlb2YobmV3IFhNTEh0dHBSZXF1ZXN0KS51cGxvYWR9O3FxLmV4dGVuZChxcS5VcGxvYWRIYW5kbGVyWGhyLnByb3RvdHlwZSxxcS5VcGxvYWRIYW5kbGVyQWJzdHJhY3QucHJvdG90eXBlKTsKcXEuZXh0ZW5kKHFxLlVwbG9hZEhhbmRsZXJYaHIucHJvdG90eXBlLHthZGQ6ZnVuY3Rpb24oYSl7aWYoIShhIGluc3RhbmNlb2YgRmlsZSkpdGhyb3cgRXJyb3IoIlBhc3NlZCBvYmogaW4gbm90IGEgRmlsZSAoaW4gcXEuVXBsb2FkSGFuZGxlclhocikiKTtyZXR1cm4gdGhpcy5fZmlsZXMucHVzaChhKS0xfSxnZXROYW1lOmZ1bmN0aW9uKGEpe2E9dGhpcy5fZmlsZXNbYV07cmV0dXJuIG51bGwhPT1hLmZpbGVOYW1lJiZ2b2lkIDAhPT1hLmZpbGVOYW1lP2EuZmlsZU5hbWU6YS5uYW1lfSxnZXRTaXplOmZ1bmN0aW9uKGEpe2E9dGhpcy5fZmlsZXNbYV07cmV0dXJuIG51bGwhPWEuZmlsZVNpemU/YS5maWxlU2l6ZTphLnNpemV9LGdldExvYWRlZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5fbG9hZGVkW2FdfHwwfSxpc1ZhbGlkOmZ1bmN0aW9uKGEpe3JldHVybiB2b2lkIDAhPT10aGlzLl9maWxlc1thXX0scmVzZXQ6ZnVuY3Rpb24oKXtxcS5VcGxvYWRIYW5kbGVyQWJzdHJhY3QucHJvdG90eXBlLnJlc2V0LmFwcGx5KHRoaXMsCmFyZ3VtZW50cyk7dGhpcy5fZmlsZXM9W107dGhpcy5feGhycz1bXTt0aGlzLl9sb2FkZWQ9W119LF91cGxvYWQ6ZnVuY3Rpb24oYSxiKXt0aGlzLl9vcHRpb25zLm9uVXBsb2FkKGEsdGhpcy5nZXROYW1lKGEpLCEwKTt2YXIgYz10aGlzLl9maWxlc1thXSxkPXRoaXMuZ2V0TmFtZShhKTt0aGlzLmdldFNpemUoYSk7dGhpcy5fbG9hZGVkW2FdPTA7dmFyIGU9dGhpcy5feGhyc1thXT1uZXcgWE1MSHR0cFJlcXVlc3QsZj10aGlzO2UudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oYil7Yi5sZW5ndGhDb21wdXRhYmxlJiYoZi5fbG9hZGVkW2FdPWIubG9hZGVkLGYuX29wdGlvbnMub25Qcm9ncmVzcyhhLGQsYi5sb2FkZWQsYi50b3RhbCkpfTtlLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpezQ9PWUucmVhZHlTdGF0ZSYmZi5fb25Db21wbGV0ZShhLGUpfTtiPWJ8fHt9O2JbdGhpcy5fb3B0aW9ucy5pbnB1dE5hbWVdPWQ7dmFyIGc9cXEub2JqMnVybChiLHRoaXMuX29wdGlvbnMuZW5kcG9pbnQpOwplLm9wZW4odGhpcy5fb3B0aW9ucy5kZW1vTW9kZT8iR0VUIjoiUE9TVCIsZywhMCk7ZS5zZXRSZXF1ZXN0SGVhZGVyKCJYLVJlcXVlc3RlZC1XaXRoIiwiWE1MSHR0cFJlcXVlc3QiKTtlLnNldFJlcXVlc3RIZWFkZXIoIlgtRmlsZS1OYW1lIixlbmNvZGVVUklDb21wb25lbnQoZCkpO2Uuc2V0UmVxdWVzdEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsIm5vLWNhY2hlIik7dGhpcy5fb3B0aW9ucy5mb3JjZU11bHRpcGFydD8oZz1uZXcgRm9ybURhdGEsZy5hcHBlbmQodGhpcy5fb3B0aW9ucy5pbnB1dE5hbWUsYyksYz1nKTooZS5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSxlLnNldFJlcXVlc3RIZWFkZXIoIlgtTWltZS1UeXBlIixjLnR5cGUpKTtmb3Ioa2V5IGluIHRoaXMuX29wdGlvbnMuY3VzdG9tSGVhZGVycyllLnNldFJlcXVlc3RIZWFkZXIoa2V5LHRoaXMuX29wdGlvbnMuY3VzdG9tSGVhZGVyc1trZXldKTt0aGlzLmxvZygiU2VuZGluZyB1cGxvYWQgcmVxdWVzdCBmb3IgIisKYSk7ZS5zZW5kKGMpfSxfb25Db21wbGV0ZTpmdW5jdGlvbihhLGIpe2lmKHRoaXMuX2ZpbGVzW2FdKXt2YXIgYz10aGlzLmdldE5hbWUoYSksZD10aGlzLmdldFNpemUoYSksZTt0aGlzLl9vcHRpb25zLm9uUHJvZ3Jlc3MoYSxjLGQsZCk7dGhpcy5sb2coInhociAtIHNlcnZlciByZXNwb25zZSByZWNlaXZlZCBmb3IgIithKTt0aGlzLmxvZygicmVzcG9uc2VUZXh0ID0gIitiLnJlc3BvbnNlVGV4dCk7dHJ5e2U9ImZ1bmN0aW9uIj09PXR5cGVvZiBKU09OLnBhcnNlP0pTT04ucGFyc2UoYi5yZXNwb25zZVRleHQpOmV2YWwoIigiK2IucmVzcG9uc2VUZXh0KyIpIil9Y2F0Y2goZil7dGhpcy5sb2coIkVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBwYXJzZSB4aHIgcmVzcG9uc2UgdGV4dCAoIitmKyIpIiwiZXJyb3IiKSxlPXt9fWlmKDIwMD09PWIuc3RhdHVzJiZlLnN1Y2Nlc3N8fCF0aGlzLl9vcHRpb25zLm9uQXV0b1JldHJ5KGEsYyxlLGIpKXRoaXMuX29wdGlvbnMub25Db21wbGV0ZShhLApjLGUsYiksdGhpcy5feGhyc1thXT1udWxsLHRoaXMuX2RlcXVldWUoYSl9fSxfY2FuY2VsOmZ1bmN0aW9uKGEpe3RoaXMuX29wdGlvbnMub25DYW5jZWwoYSx0aGlzLmdldE5hbWUoYSkpO3RoaXMuX2ZpbGVzW2FdPW51bGw7dGhpcy5feGhyc1thXSYmKHRoaXMuX3hocnNbYV0uYWJvcnQoKSx0aGlzLl94aHJzW2FdPW51bGwpfX0pOwooZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLGgsaSxqLGs7Zz1bInVwbG9hZGVyVHlwZSJdO2Q9ZnVuY3Rpb24oYSl7YSYmKGE9aShhKSxoKGEpLCJiYXNpYyI9PT1mKCJ1cGxvYWRlclR5cGUiKT9iKG5ldyBxcS5GaW5lVXBsb2FkZXJCYXNpYyhhKSk6YihuZXcgcXEuRmluZVVwbG9hZGVyKGEpKSk7cmV0dXJuIGN9O2U9ZnVuY3Rpb24oYSxiKXt2YXIgZD1jLmRhdGEoImZpbmV1cGxvYWRlciIpO2lmKGIpdm9pZCAwPT09ZCYmKGQ9e30pLGRbYV09YixjLmRhdGEoImZpbmV1cGxvYWRlciIsZCk7ZWxzZSByZXR1cm4gdm9pZCAwPT09ZD9udWxsOmRbYV19O2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoInVwbG9hZGVyIixhKX07Zj1mdW5jdGlvbihhLGIpe3JldHVybiBlKGEsYil9O2g9ZnVuY3Rpb24oYil7dmFyIGQ9Yi5jYWxsYmFja3M9e307YS5lYWNoKChuZXcgcXEuRmluZVVwbG9hZGVyQmFzaWMpLl9vcHRpb25zLmNhbGxiYWNrcyxmdW5jdGlvbihhKXt2YXIgYixlO2I9L15vbihcdyspLy5leGVjKGEpWzFdOwpiPWIuc3Vic3RyaW5nKDAsMSkudG9Mb3dlckNhc2UoKStiLnN1YnN0cmluZygxKTtlPWM7ZFthXT1mdW5jdGlvbigpe3ZhciBhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGUudHJpZ2dlckhhbmRsZXIoYixhKX19KX07aT1mdW5jdGlvbihiLGQpe3ZhciBlLGg7ZT12b2lkIDA9PT1kPyJiYXNpYyIhPT1iLnVwbG9hZGVyVHlwZT97ZWxlbWVudDpjWzBdfTp7fTpkO2EuZWFjaChiLGZ1bmN0aW9uKGIsYyl7MDw9YS5pbkFycmF5KGIsZyk/ZihiLGMpOmMgaW5zdGFuY2VvZiBhP2VbYl09Y1swXTphLmlzUGxhaW5PYmplY3QoYyk/KGVbYl09e30saShjLGVbYl0pKTphLmlzQXJyYXkoYyk/KGg9W10sYS5lYWNoKGMsZnVuY3Rpb24oYixjKXtjIGluc3RhbmNlb2YgYT9hLm1lcmdlKGgsYyk6aC5wdXNoKGMpfSksZVtiXT1oKTplW2JdPWN9KTtpZih2b2lkIDA9PT1kKXJldHVybiBlfTtqPWZ1bmN0aW9uKGMpe3JldHVybiJzdHJpbmciPT09YS50eXBlKGMpJiYKIWMubWF0Y2goL15fLykmJnZvaWQgMCE9PWIoKVtjXX07az1mdW5jdGlvbihhKXtyZXR1cm4gYigpW2FdLmFwcGx5KGIoKSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfTthLmZuLmZpbmVVcGxvYWRlcj1mdW5jdGlvbihlKXtjPXRoaXM7aWYoYigpJiZqKGUpKXJldHVybiBrLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZigib2JqZWN0Ij09PXR5cGVvZiBlfHwhZSlyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7YS5lcnJvcigiTWV0aG9kICIrZSsiIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5maW5lVXBsb2FkZXIiKTtyZXR1cm4gdGhpc319KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/jquery.fineuploader-3.4.1.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGh0dHA6Ly9naXRodWIuY29tL1dpZGVuL2ZpbmUtdXBsb2FkZXIKICoKICogTXVsdGlwbGUgZmlsZSB1cGxvYWQgY29tcG9uZW50IHdpdGggcHJvZ3Jlc3MtYmFyLCBkcmFnLWFuZC1kcm9wLCBzdXBwb3J0IGZvciBhbGwgbW9kZXJuIGJyb3dzZXJzLgogKgogKiBDb3B5cmlnaHQgwqkgMjAxMywgV2lkZW4gRW50ZXJwcmlzZXMgaW5mb0BmaW5ldXBvYWRlci5jb20KICoKICogTGljZW5zZWQgdW5kZXIgR05VIEdQTCB2Mywgc2VlIGxpY2Vuc2UudHh0LgogKi8KLypnbG9iYWxzIHdpbmRvdywgbmF2aWdhdG9yLCBkb2N1bWVudCwgRm9ybURhdGEsIEZpbGUsIEhUTUxJbnB1dEVsZW1lbnQsIFhNTEh0dHBSZXF1ZXN0LCBCbG9iKi8KdmFyIHFxID0gZnVuY3Rpb24oZWxlbWVudCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHJldHVybiB7CiAgICAgICAgaGlkZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgLyoqIFJldHVybnMgdGhlIGZ1bmN0aW9uIHdoaWNoIGRldGFjaGVzIGF0dGFjaGVkIGV2ZW50ICovCiAgICAgICAgYXR0YWNoOiBmdW5jdGlvbih0eXBlLCBmbikgewogICAgICAgICAgICBpZiAoZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKXsKICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgZmFsc2UpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpewogICAgICAgICAgICAgICAgZWxlbWVudC5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHFxKGVsZW1lbnQpLmRldGFjaCh0eXBlLCBmbik7CiAgICAgICAgICAgIH07CiAgICAgICAgfSwKCiAgICAgICAgZGV0YWNoOiBmdW5jdGlvbih0eXBlLCBmbikgewogICAgICAgICAgICBpZiAoZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKXsKICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBmbiwgZmFsc2UpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuYXR0YWNoRXZlbnQpewogICAgICAgICAgICAgICAgZWxlbWVudC5kZXRhY2hFdmVudCgnb24nICsgdHlwZSwgZm4pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGNvbnRhaW5zOiBmdW5jdGlvbihkZXNjZW5kYW50KSB7CiAgICAgICAgICAgIC8vIGNvbXBhcmVwb3NpdGlvbiByZXR1cm5zIGZhbHNlIGluIHRoaXMgY2FzZQogICAgICAgICAgICBpZiAoZWxlbWVudCA9PT0gZGVzY2VuZGFudCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChlbGVtZW50LmNvbnRhaW5zKXsKICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmNvbnRhaW5zKGRlc2NlbmRhbnQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLypqc2xpbnQgYml0d2lzZTogdHJ1ZSovCiAgICAgICAgICAgICAgICByZXR1cm4gISEoZGVzY2VuZGFudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlbGVtZW50KSAmIDgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogSW5zZXJ0IHRoaXMgZWxlbWVudCBiZWZvcmUgZWxlbWVudEIuCiAgICAgICAgICovCiAgICAgICAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihlbGVtZW50QikgewogICAgICAgICAgICBlbGVtZW50Qi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbGVtZW50LCBlbGVtZW50Qik7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIHJlbW92ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlbGVtZW50KTsKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyBzdHlsZXMgZm9yIGFuIGVsZW1lbnQuCiAgICAgICAgICogRml4ZXMgb3BhY2l0eSBpbiBJRTYtOC4KICAgICAgICAgKi8KICAgICAgICBjc3M6IGZ1bmN0aW9uKHN0eWxlcykgewogICAgICAgICAgICBpZiAoc3R5bGVzLm9wYWNpdHkgIT09IG51bGwpewogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGVtZW50LnN0eWxlLm9wYWNpdHkgIT09ICdzdHJpbmcnICYmIHR5cGVvZihlbGVtZW50LmZpbHRlcnMpICE9PSAndW5kZWZpbmVkJyl7CiAgICAgICAgICAgICAgICAgICAgc3R5bGVzLmZpbHRlciA9ICdhbHBoYShvcGFjaXR5PScgKyBNYXRoLnJvdW5kKDEwMCAqIHN0eWxlcy5vcGFjaXR5KSArICcpJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBxcS5leHRlbmQoZWxlbWVudC5zdHlsZSwgc3R5bGVzKTsKCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGhhc0NsYXNzOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIHZhciByZSA9IG5ldyBSZWdFeHAoJyhefCApJyArIG5hbWUgKyAnKCB8JCknKTsKICAgICAgICAgICAgcmV0dXJuIHJlLnRlc3QoZWxlbWVudC5jbGFzc05hbWUpOwogICAgICAgIH0sCgogICAgICAgIGFkZENsYXNzOiBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICAgIGlmICghcXEoZWxlbWVudCkuaGFzQ2xhc3MobmFtZSkpewogICAgICAgICAgICAgICAgZWxlbWVudC5jbGFzc05hbWUgKz0gJyAnICsgbmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICByZW1vdmVDbGFzczogZnVuY3Rpb24obmFtZSkgewogICAgICAgICAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKCcoXnwgKScgKyBuYW1lICsgJyggfCQpJyk7CiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShyZSwgJyAnKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgIiIpOwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBnZXRCeUNsYXNzOiBmdW5jdGlvbihjbGFzc05hbWUpIHsKICAgICAgICAgICAgdmFyIGNhbmRpZGF0ZXMsCiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXTsKCiAgICAgICAgICAgIGlmIChlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwpewogICAgICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLicgKyBjbGFzc05hbWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjYW5kaWRhdGVzID0gZWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOwoKICAgICAgICAgICAgcXEuZWFjaChjYW5kaWRhdGVzLCBmdW5jdGlvbihpZHgsIHZhbCkgewogICAgICAgICAgICAgICAgaWYgKHFxKHZhbCkuaGFzQ2xhc3MoY2xhc3NOYW1lKSl7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfSwKCiAgICAgICAgY2hpbGRyZW46IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgY2hpbGRyZW4gPSBbXSwKICAgICAgICAgICAgICAgIGNoaWxkID0gZWxlbWVudC5maXJzdENoaWxkOwoKICAgICAgICAgICAgd2hpbGUgKGNoaWxkKXsKICAgICAgICAgICAgICAgIGlmIChjaGlsZC5ub2RlVHlwZSA9PT0gMSl7CiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLm5leHRTaWJsaW5nOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gY2hpbGRyZW47CiAgICAgICAgfSwKCiAgICAgICAgc2V0VGV4dDogZnVuY3Rpb24odGV4dCkgewogICAgICAgICAgICBlbGVtZW50LmlubmVyVGV4dCA9IHRleHQ7CiAgICAgICAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogICAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9LAoKICAgICAgICBjbGVhclRleHQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gcXEoZWxlbWVudCkuc2V0VGV4dCgiIik7CiAgICAgICAgfQogICAgfTsKfTsKCnFxLmxvZyA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGxldmVsKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgaWYgKHdpbmRvdy5jb25zb2xlKSB7CiAgICAgICAgaWYgKCFsZXZlbCB8fCBsZXZlbCA9PT0gJ2luZm8nKSB7CiAgICAgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhtZXNzYWdlKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHdpbmRvdy5jb25zb2xlW2xldmVsXSkgewogICAgICAgICAgICAgICAgd2luZG93LmNvbnNvbGVbbGV2ZWxdKG1lc3NhZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgd2luZG93LmNvbnNvbGUubG9nKCc8JyArIGxldmVsICsgJz4gJyArIG1lc3NhZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9OwoKcXEuaXNPYmplY3QgPSBmdW5jdGlvbih2YXJpYWJsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgcmV0dXJuIHZhcmlhYmxlICE9PSBudWxsICYmIHZhcmlhYmxlICYmIHR5cGVvZih2YXJpYWJsZSkgPT09ICJvYmplY3QiICYmIHZhcmlhYmxlLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7Cn07CgpxcS5pc0Z1bmN0aW9uID0gZnVuY3Rpb24odmFyaWFibGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHJldHVybiB0eXBlb2YodmFyaWFibGUpID09PSAiZnVuY3Rpb24iOwp9OwoKcXEuaXNTdHJpbmcgPSBmdW5jdGlvbihtYXliZVN0cmluZykgewogICAgInVzZSBzdHJpY3QiOwogICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtYXliZVN0cmluZykgPT09ICdbb2JqZWN0IFN0cmluZ10nOwp9OwoKcXEudHJpbVN0ciA9IGZ1bmN0aW9uKHN0cmluZykgewogICAgaWYgKFN0cmluZy5wcm90b3R5cGUudHJpbSkgewogICAgICAgIHJldHVybiBzdHJpbmcudHJpbSgpOwogICAgfQoKICAgIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXlxzK3xccyskL2csJycpOwp9OwoKcXEuaXNGaWxlT3JJbnB1dCA9IGZ1bmN0aW9uKG1heWJlRmlsZU9ySW5wdXQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGlmIChxcS5pc0Jsb2IobWF5YmVGaWxlT3JJbnB1dCkgJiYgd2luZG93LkZpbGUgJiYgbWF5YmVGaWxlT3JJbnB1dCBpbnN0YW5jZW9mIEZpbGUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGVsc2UgaWYgKHdpbmRvdy5IVE1MSW5wdXRFbGVtZW50KSB7CiAgICAgICAgaWYgKG1heWJlRmlsZU9ySW5wdXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgIGlmIChtYXliZUZpbGVPcklucHV0LnR5cGUgJiYgbWF5YmVGaWxlT3JJbnB1dC50eXBlLnRvTG93ZXJDYXNlKCkgPT09ICdmaWxlJykgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChtYXliZUZpbGVPcklucHV0LnRhZ05hbWUpIHsKICAgICAgICBpZiAobWF5YmVGaWxlT3JJbnB1dC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcpIHsKICAgICAgICAgICAgaWYgKG1heWJlRmlsZU9ySW5wdXQudHlwZSAmJiBtYXliZUZpbGVPcklucHV0LnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gJ2ZpbGUnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn07CgpxcS5pc0Jsb2IgPSBmdW5jdGlvbihtYXliZUJsb2IpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHJldHVybiB3aW5kb3cuQmxvYiAmJiBtYXliZUJsb2IgaW5zdGFuY2VvZiBCbG9iOwp9OwoKcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQgPSBmdW5jdGlvbigpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CiAgICBpbnB1dC50eXBlID0gJ2ZpbGUnOwoKICAgIHJldHVybiAoCiAgICAgICAgaW5wdXQubXVsdGlwbGUgIT09IHVuZGVmaW5lZCAmJgogICAgICAgICAgICB0eXBlb2YgRmlsZSAhPT0gInVuZGVmaW5lZCIgJiYKICAgICAgICAgICAgdHlwZW9mIEZvcm1EYXRhICE9PSAidW5kZWZpbmVkIiAmJgogICAgICAgICAgICB0eXBlb2YgKG5ldyBYTUxIdHRwUmVxdWVzdCgpKS51cGxvYWQgIT09ICJ1bmRlZmluZWQiICk7Cn07CgpxcS5pc0ZvbGRlckRyb3BTdXBwb3J0ZWQgPSBmdW5jdGlvbihkYXRhVHJhbnNmZXIpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHJldHVybiAoZGF0YVRyYW5zZmVyLml0ZW1zICYmIGRhdGFUcmFuc2Zlci5pdGVtc1swXS53ZWJraXRHZXRBc0VudHJ5KTsKfTsKCnFxLmlzRmlsZUNodW5raW5nU3VwcG9ydGVkID0gZnVuY3Rpb24oKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICByZXR1cm4gIXFxLmFuZHJvaWQoKSAmJiAvL2FuZHJvaWQncyBpbXBsIG9mIEJsb2Iuc2xpY2UgaXMgYnJva2VuCiAgICAgICAgcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSAmJgogICAgICAgIChGaWxlLnByb3RvdHlwZS5zbGljZSB8fCBGaWxlLnByb3RvdHlwZS53ZWJraXRTbGljZSB8fCBGaWxlLnByb3RvdHlwZS5tb3pTbGljZSk7Cn07CgpxcS5leHRlbmQgPSBmdW5jdGlvbiAoZmlyc3QsIHNlY29uZCwgZXh0ZW5kTmVzdGVkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBxcS5lYWNoKHNlY29uZCwgZnVuY3Rpb24ocHJvcCwgdmFsKSB7CiAgICAgICAgaWYgKGV4dGVuZE5lc3RlZCAmJiBxcS5pc09iamVjdCh2YWwpKSB7CiAgICAgICAgICAgIGlmIChmaXJzdFtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICBmaXJzdFtwcm9wXSA9IHt9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHFxLmV4dGVuZChmaXJzdFtwcm9wXSwgdmFsLCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGZpcnN0W3Byb3BdID0gdmFsOwogICAgICAgIH0KICAgIH0pOwp9OwoKLyoqCiAqIFNlYXJjaGVzIGZvciBhIGdpdmVuIGVsZW1lbnQgaW4gdGhlIGFycmF5LCByZXR1cm5zIC0xIGlmIGl0IGlzIG5vdCBwcmVzZW50LgogKiBAcGFyYW0ge051bWJlcn0gW2Zyb21dIFRoZSBpbmRleCBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCiAqLwpxcS5pbmRleE9mID0gZnVuY3Rpb24oYXJyLCBlbHQsIGZyb20pewogICAgInVzZSBzdHJpY3QiOwoKICAgIGlmIChhcnIuaW5kZXhPZikgewogICAgICAgIHJldHVybiBhcnIuaW5kZXhPZihlbHQsIGZyb20pOwogICAgfQoKICAgIGZyb20gPSBmcm9tIHx8IDA7CiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDsKCiAgICBpZiAoZnJvbSA8IDApIHsKICAgICAgICBmcm9tICs9IGxlbjsKICAgIH0KCiAgICBmb3IgKDsgZnJvbSA8IGxlbjsgZnJvbSs9MSl7CiAgICAgICAgaWYgKGFyci5oYXNPd25Qcm9wZXJ0eShmcm9tKSAmJiBhcnJbZnJvbV0gPT09IGVsdCl7CiAgICAgICAgICAgIHJldHVybiBmcm9tOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKfTsKCi8vdGhpcyBpcyBhIHZlcnNpb24gNCBVVUlECnFxLmdldFVuaXF1ZUlkID0gZnVuY3Rpb24oKXsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICByZXR1cm4gJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBmdW5jdGlvbihjKSB7CiAgICAgICAgLypqc2xpbnQgZXFlcTogdHJ1ZSwgYml0d2lzZTogdHJ1ZSovCiAgICAgICAgdmFyIHIgPSBNYXRoLnJhbmRvbSgpKjE2fDAsIHYgPSBjID09ICd4JyA/IHIgOiAociYweDN8MHg4KTsKICAgICAgICByZXR1cm4gdi50b1N0cmluZygxNik7CiAgICB9KTsKfTsKCi8vCi8vIEJyb3dzZXJzIGFuZCBwbGF0Zm9ybXMgZGV0ZWN0aW9uCgpxcS5pZSAgICAgICA9IGZ1bmN0aW9uKCl7CiAgICAidXNlIHN0cmljdCI7CiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgIT09IC0xOwp9OwpxcS5pZTEwICAgICA9IGZ1bmN0aW9uKCl7CiAgICAidXNlIHN0cmljdCI7CiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFIDEwJykgIT09IC0xOwp9OwpxcS5zYWZhcmkgICA9IGZ1bmN0aW9uKCl7CiAgICAidXNlIHN0cmljdCI7CiAgICByZXR1cm4gbmF2aWdhdG9yLnZlbmRvciAhPT0gdW5kZWZpbmVkICYmIG5hdmlnYXRvci52ZW5kb3IuaW5kZXhPZigiQXBwbGUiKSAhPT0gLTE7Cn07CnFxLmNocm9tZSAgID0gZnVuY3Rpb24oKXsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHJldHVybiBuYXZpZ2F0b3IudmVuZG9yICE9PSB1bmRlZmluZWQgJiYgbmF2aWdhdG9yLnZlbmRvci5pbmRleE9mKCdHb29nbGUnKSAhPT0gLTE7Cn07CnFxLmZpcmVmb3ggID0gZnVuY3Rpb24oKXsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHJldHVybiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNb3ppbGxhJykgIT09IC0xICYmIG5hdmlnYXRvci52ZW5kb3IgIT09IHVuZGVmaW5lZCAmJiBuYXZpZ2F0b3IudmVuZG9yID09PSAnJyk7Cn07CnFxLndpbmRvd3MgID0gZnVuY3Rpb24oKXsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHJldHVybiBuYXZpZ2F0b3IucGxhdGZvcm0gPT09ICJXaW4zMiI7Cn07CnFxLmFuZHJvaWQgPSBmdW5jdGlvbigpewogICAgInVzZSBzdHJpY3QiOwogICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdhbmRyb2lkJykgIT09IC0xOwp9OwoKLy8KLy8gRXZlbnRzCgpxcS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uKGUpewogICAgInVzZSBzdHJpY3QiOwogICAgaWYgKGUucHJldmVudERlZmF1bHQpewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIH0gZWxzZXsKICAgICAgICBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgICB9Cn07CgovKioKICogQ3JlYXRlcyBhbmQgcmV0dXJucyBlbGVtZW50IGZyb20gaHRtbCBzdHJpbmcKICogVXNlcyBpbm5lckhUTUwgdG8gY3JlYXRlIGFuIGVsZW1lbnQKICovCnFxLnRvRWxlbWVudCA9IChmdW5jdGlvbigpewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgcmV0dXJuIGZ1bmN0aW9uKGh0bWwpewogICAgICAgIGRpdi5pbm5lckhUTUwgPSBodG1sOwogICAgICAgIHZhciBlbGVtZW50ID0gZGl2LmZpcnN0Q2hpbGQ7CiAgICAgICAgZGl2LnJlbW92ZUNoaWxkKGVsZW1lbnQpOwogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfTsKfSgpKTsKCi8va2V5IGFuZCB2YWx1ZSBhcmUgcGFzc2VkIHRvIGNhbGxiYWNrIGZvciBlYWNoIGl0ZW0gaW4gdGhlIG9iamVjdCBvciBhcnJheQpxcS5lYWNoID0gZnVuY3Rpb24ob2JqLCBjYWxsYmFjaykgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGtleSwgcmV0VmFsOwogICAgaWYgKG9iaikgewogICAgICAgIGZvciAoa2V5IGluIG9iaikgewogICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgewogICAgICAgICAgICAgICAgcmV0VmFsID0gY2FsbGJhY2soa2V5LCBvYmpba2V5XSk7CiAgICAgICAgICAgICAgICBpZiAocmV0VmFsID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9OwoKLyoqCiAqIG9iajJ1cmwoKSB0YWtlcyBhIGpzb24tb2JqZWN0IGFzIGFyZ3VtZW50IGFuZCBnZW5lcmF0ZXMKICogYSBxdWVyeXN0cmluZy4gcHJldHR5IG11Y2ggbGlrZSBqUXVlcnkucGFyYW0oKQogKgogKiBob3cgdG8gdXNlOgogKgogKiAgICBgcXEub2JqMnVybCh7YTonYicsYzonZCd9LCdodHRwOi8vYW55LnVybC91cGxvYWQ/b3RoZXJQYXJhbT12YWx1ZScpO2AKICoKICogd2lsbCByZXN1bHQgaW46CiAqCiAqICAgIGBodHRwOi8vYW55LnVybC91cGxvYWQ/b3RoZXJQYXJhbT12YWx1ZSZhPWImYz1kYAogKgogKiBAcGFyYW0gIE9iamVjdCBKU09OLU9iamVjdAogKiBAcGFyYW0gIFN0cmluZyBjdXJyZW50IHF1ZXJ5c3RyaW5nLXBhcnQKICogQHJldHVybiBTdHJpbmcgZW5jb2RlZCBxdWVyeXN0cmluZwogKi8KcXEub2JqMnVybCA9IGZ1bmN0aW9uKG9iaiwgdGVtcCwgcHJlZml4RG9uZSl7CiAgICAidXNlIHN0cmljdCI7CiAgICAvKmpzaGludCBsYXhicmVhazogdHJ1ZSovCiAgICAgdmFyIGksIGxlbiwKICAgICAgICAgdXJpc3RyaW5ncyA9IFtdLAogICAgICAgICBwcmVmaXggPSAnJicsCiAgICAgICAgIGFkZCA9IGZ1bmN0aW9uKG5leHRPYmosIGkpewogICAgICAgICAgICB2YXIgbmV4dFRlbXAgPSB0ZW1wCiAgICAgICAgICAgICAgICA/ICgvXFtcXSQvLnRlc3QodGVtcCkpIC8vIHByZXZlbnQgZG91YmxlLWVuY29kaW5nCiAgICAgICAgICAgICAgICA/IHRlbXAKICAgICAgICAgICAgICAgIDogdGVtcCsnWycraSsnXScKICAgICAgICAgICAgICAgIDogaTsKICAgICAgICAgICAgaWYgKChuZXh0VGVtcCAhPT0gJ3VuZGVmaW5lZCcpICYmIChpICE9PSAndW5kZWZpbmVkJykpIHsKICAgICAgICAgICAgICAgIHVyaXN0cmluZ3MucHVzaCgKICAgICAgICAgICAgICAgICAgICAodHlwZW9mIG5leHRPYmogPT09ICdvYmplY3QnKQogICAgICAgICAgICAgICAgICAgICAgICA/IHFxLm9iajJ1cmwobmV4dE9iaiwgbmV4dFRlbXAsIHRydWUpCiAgICAgICAgICAgICAgICAgICAgICAgIDogKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXh0T2JqKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJykKICAgICAgICAgICAgICAgICAgICAgICAgPyBlbmNvZGVVUklDb21wb25lbnQobmV4dFRlbXApICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG5leHRPYmooKSkKICAgICAgICAgICAgICAgICAgICAgICAgOiBlbmNvZGVVUklDb21wb25lbnQobmV4dFRlbXApICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KG5leHRPYmopCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICBpZiAoIXByZWZpeERvbmUgJiYgdGVtcCkgewogICAgICAgIHByZWZpeCA9ICgvXD8vLnRlc3QodGVtcCkpID8gKC9cPyQvLnRlc3QodGVtcCkpID8gJycgOiAnJicgOiAnPyc7CiAgICAgICAgdXJpc3RyaW5ncy5wdXNoKHRlbXApOwogICAgICAgIHVyaXN0cmluZ3MucHVzaChxcS5vYmoydXJsKG9iaikpOwogICAgfSBlbHNlIGlmICgoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikgPT09ICdbb2JqZWN0IEFycmF5XScpICYmICh0eXBlb2Ygb2JqICE9PSAndW5kZWZpbmVkJykgKSB7CiAgICAgICAgLy8gd2Ugd29udCB1c2UgYSBmb3ItaW4tbG9vcCBvbiBhbiBhcnJheSAocGVyZm9ybWFuY2UpCiAgICAgICAgZm9yIChpID0gLTEsIGxlbiA9IG9iai5sZW5ndGg7IGkgPCBsZW47IGkrPTEpewogICAgICAgICAgICBhZGQob2JqW2ldLCBpKTsKICAgICAgICB9CiAgICB9IGVsc2UgaWYgKCh0eXBlb2Ygb2JqICE9PSAndW5kZWZpbmVkJykgJiYgKG9iaiAhPT0gbnVsbCkgJiYgKHR5cGVvZiBvYmogPT09ICJvYmplY3QiKSl7CiAgICAgICAgLy8gZm9yIGFueXRoaW5nIGVsc2UgYnV0IGEgc2NhbGFyLCB3ZSB3aWxsIHVzZSBmb3ItaW4tbG9vcAogICAgICAgIGZvciAoaSBpbiBvYmopewogICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGkpKSB7CiAgICAgICAgICAgICAgICBhZGQob2JqW2ldLCBpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgdXJpc3RyaW5ncy5wdXNoKGVuY29kZVVSSUNvbXBvbmVudCh0ZW1wKSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudChvYmopKTsKICAgIH0KCiAgICBpZiAodGVtcCkgewogICAgICAgIHJldHVybiB1cmlzdHJpbmdzLmpvaW4ocHJlZml4KTsKICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHVyaXN0cmluZ3Muam9pbihwcmVmaXgpCiAgICAgICAgICAgIC5yZXBsYWNlKC9eJi8sICcnKQogICAgICAgICAgICAucmVwbGFjZSgvJTIwL2csICcrJyk7CiAgICB9Cn07CgpxcS5vYmoyRm9ybURhdGEgPSBmdW5jdGlvbihvYmosIGZvcm1EYXRhLCBhcnJheUtleU5hbWUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIGlmICghZm9ybURhdGEpIHsKICAgICAgICBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgfQoKICAgIHFxLmVhY2gob2JqLCBmdW5jdGlvbihrZXksIHZhbCkgewogICAgICAgIGtleSA9IGFycmF5S2V5TmFtZSA/IGFycmF5S2V5TmFtZSArICdbJyArIGtleSArICddJyA6IGtleTsKCiAgICAgICAgaWYgKHFxLmlzT2JqZWN0KHZhbCkpIHsKICAgICAgICAgICAgcXEub2JqMkZvcm1EYXRhKHZhbCwgZm9ybURhdGEsIGtleSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHFxLmlzRnVuY3Rpb24odmFsKSkgewogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWwoKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoa2V5LCB2YWwpOwogICAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBmb3JtRGF0YTsKfTsKCnFxLm9iajJJbnB1dHMgPSBmdW5jdGlvbihvYmosIGZvcm0pIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBpbnB1dDsKCiAgICBpZiAoIWZvcm0pIHsKICAgICAgICBmb3JtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpOwogICAgfQoKICAgIHFxLm9iajJGb3JtRGF0YShvYmosIHsKICAgICAgICBhcHBlbmQ6IGZ1bmN0aW9uKGtleSwgdmFsKSB7CiAgICAgICAgICAgIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywga2V5KTsKICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCd2YWx1ZScsIHZhbCk7CiAgICAgICAgICAgIGZvcm0uYXBwZW5kQ2hpbGQoaW5wdXQpOwogICAgICAgIH0KICAgIH0pOwoKICAgIHJldHVybiBmb3JtOwp9OwoKcXEuc2V0Q29va2llID0gZnVuY3Rpb24obmFtZSwgdmFsdWUsIGRheXMpIHsKICAgIHZhciBkYXRlID0gbmV3IERhdGUoKSwKICAgICAgICBleHBpcmVzID0gIiI7CgoJaWYgKGRheXMpIHsKCQlkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkrKGRheXMqMjQqNjAqNjAqMTAwMCkpOwoJCWV4cGlyZXMgPSAiOyBleHBpcmVzPSIrZGF0ZS50b0dNVFN0cmluZygpOwoJfQoKCWRvY3VtZW50LmNvb2tpZSA9IG5hbWUrIj0iK3ZhbHVlK2V4cGlyZXMrIjsgcGF0aD0vIjsKfTsKCnFxLmdldENvb2tpZSA9IGZ1bmN0aW9uKG5hbWUpIHsKCXZhciBuYW1lRVEgPSBuYW1lICsgIj0iLAogICAgICAgIGNhID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JyksCiAgICAgICAgYzsKCglmb3IodmFyIGk9MDtpIDwgY2EubGVuZ3RoO2krKykgewoJCWMgPSBjYVtpXTsKCQl3aGlsZSAoYy5jaGFyQXQoMCk9PScgJykgewogICAgICAgICAgICBjID0gYy5zdWJzdHJpbmcoMSxjLmxlbmd0aCk7CiAgICAgICAgfQoJCWlmIChjLmluZGV4T2YobmFtZUVRKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcobmFtZUVRLmxlbmd0aCxjLmxlbmd0aCk7CiAgICAgICAgfQoJfQp9OwoKcXEuZ2V0Q29va2llTmFtZXMgPSBmdW5jdGlvbihyZWdleHApIHsKICAgIHZhciBjb29raWVzID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7JyksCiAgICAgICAgY29va2llTmFtZXMgPSBbXTsKCiAgICBxcS5lYWNoKGNvb2tpZXMsIGZ1bmN0aW9uKGlkeCwgY29va2llKSB7CiAgICAgICAgY29va2llID0gcXEudHJpbVN0cihjb29raWUpOwoKICAgICAgICB2YXIgZXF1YWxzSWR4ID0gY29va2llLmluZGV4T2YoIj0iKTsKCiAgICAgICAgaWYgKGNvb2tpZS5tYXRjaChyZWdleHApKSB7CiAgICAgICAgICAgIGNvb2tpZU5hbWVzLnB1c2goY29va2llLnN1YnN0cigwLCBlcXVhbHNJZHgpKTsKICAgICAgICB9CiAgICB9KTsKCiAgICByZXR1cm4gY29va2llTmFtZXM7Cn07CgpxcS5kZWxldGVDb29raWUgPSBmdW5jdGlvbihuYW1lKSB7CglxcS5zZXRDb29raWUobmFtZSwgIiIsIC0xKTsKfTsKCnFxLmFyZUNvb2tpZXNFbmFibGVkID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgcmFuZE51bSA9IE1hdGgucmFuZG9tKCkgKiAxMDAwMDAsCiAgICAgICAgbmFtZSA9ICJxcUNvb2tpZVRlc3Q6IiArIHJhbmROdW07CiAgICBxcS5zZXRDb29raWUobmFtZSwgMSk7CgogICAgaWYgKHFxLmdldENvb2tpZShuYW1lKSkgewogICAgICAgIHFxLmRlbGV0ZUNvb2tpZShuYW1lKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKfTsKCi8qKgogKiBOb3QgcmVjb21tZW5kZWQgZm9yIHVzZSBvdXRzaWRlIG9mIEZpbmUgVXBsb2FkZXIgc2luY2UgdGhpcyBmYWxscyBiYWNrIHRvIGFuIHVuY2hlY2tlZCBldmFsIGlmIEpTT04ucGFyc2UgaXMgbm90CiAqIGltcGxlbWVudGVkLiAgRm9yIGEgbW9yZSBzZWN1cmUgSlNPTi5wYXJzZSBwb2x5ZmlsbCwgdXNlIERvdWdsYXMgQ3JvY2tmb3JkJ3MganNvbjIuanMuCiAqLwpxcS5wYXJzZUpzb24gPSBmdW5jdGlvbihqc29uKSB7CiAgICAvKmpzaGludCBldmlsOiB0cnVlKi8KICAgIGlmICh3aW5kb3cuSlNPTiAmJiBxcS5pc0Z1bmN0aW9uKEpTT04ucGFyc2UpKSB7CiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoanNvbik7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBldmFsKCIoIiArIGpzb24gKyAiKSIpOwogICAgfQp9OwoKLyoqCiAqIEEgZ2VuZXJpYyBtb2R1bGUgd2hpY2ggc3VwcG9ydHMgb2JqZWN0IGRpc3Bvc2luZyBpbiBkaXNwb3NlKCkgbWV0aG9kLgogKiAqLwpxcS5EaXNwb3NlU3VwcG9ydCA9IGZ1bmN0aW9uKCkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGRpc3Bvc2VycyA9IFtdOwoKICAgIHJldHVybiB7CiAgICAgICAgLyoqIFJ1biBhbGwgcmVnaXN0ZXJlZCBkaXNwb3NlcnMgKi8KICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGRpc3Bvc2VyOwogICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBkaXNwb3NlciA9IGRpc3Bvc2Vycy5zaGlmdCgpOwogICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VyKSB7CiAgICAgICAgICAgICAgICAgICAgZGlzcG9zZXIoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB3aGlsZSAoZGlzcG9zZXIpOwogICAgICAgIH0sCgogICAgICAgIC8qKiBBdHRhY2ggZXZlbnQgaGFuZGxlciBhbmQgcmVnaXN0ZXIgZGUtYXR0YWNoZXIgYXMgYSBkaXNwb3NlciAqLwogICAgICAgIGF0dGFjaDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gYXJndW1lbnRzOwogICAgICAgICAgICAvKmpzbGludCB1bmRlZjp0cnVlKi8KICAgICAgICAgICAgdGhpcy5hZGREaXNwb3NlcihxcShhcmdzWzBdKS5hdHRhY2guYXBwbHkodGhpcywgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSkpOwogICAgICAgIH0sCgogICAgICAgIC8qKiBBZGQgZGlzcG9zZXIgdG8gdGhlIGNvbGxlY3Rpb24gKi8KICAgICAgICBhZGREaXNwb3NlcjogZnVuY3Rpb24oZGlzcG9zZUZ1bmN0aW9uKSB7CiAgICAgICAgICAgIGRpc3Bvc2Vycy5wdXNoKGRpc3Bvc2VGdW5jdGlvbik7CiAgICAgICAgfQogICAgfTsKfTsKLypnbG9iYWxzIHFxKi8KcXEuUHJvbWlzZSA9IGZ1bmN0aW9uKCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBzdWNjZXNzVmFsdWUsIGZhaWx1cmVWYWx1ZSwKICAgICAgICBzdWNjZXNzQ2FsbGJhY2ssIGZhaWx1cmVDYWxsYmFjaywKICAgICAgICBzdGF0ZSA9IDA7CgogICAgcmV0dXJuIHsKICAgICAgICB0aGVuOiBmdW5jdGlvbihvblN1Y2Nlc3MsIG9uRmFpbHVyZSkgewogICAgICAgICAgICBpZiAoc3RhdGUgPT09IDApIHsKICAgICAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjayA9IG9uU3VjY2VzczsKICAgICAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayA9IG9uRmFpbHVyZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PT0gLTEgJiYgb25GYWlsdXJlKSB7CiAgICAgICAgICAgICAgICBvbkZhaWx1cmUoZmFpbHVyZVZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChvblN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIG9uU3VjY2VzcyhzdWNjZXNzVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24odmFsKSB7CiAgICAgICAgICAgIHN0YXRlID0gMTsKICAgICAgICAgICAgc3VjY2Vzc1ZhbHVlID0gdmFsOwoKICAgICAgICAgICAgaWYgKHN1Y2Nlc3NDYWxsYmFjaykgewogICAgICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKHZhbCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0sCgogICAgICAgIGZhaWx1cmU6IGZ1bmN0aW9uKHZhbCkgewogICAgICAgICAgICBzdGF0ZSA9IC0xOwogICAgICAgICAgICBmYWlsdXJlVmFsdWUgPSB2YWw7CgogICAgICAgICAgICBpZiAoZmFpbHVyZUNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2sodmFsKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgfTsKfTsKLypnbG9iYWxzIHFxKi8KcXEuVXBsb2FkQnV0dG9uID0gZnVuY3Rpb24obykgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBpbnB1dCwKICAgICAgICBkaXNwb3NlU3VwcG9ydCA9IG5ldyBxcS5EaXNwb3NlU3VwcG9ydCgpLAogICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgIGVsZW1lbnQ6IG51bGwsCiAgICAgICAgICAgIC8vIGlmIHNldCB0byB0cnVlIGFkZHMgbXVsdGlwbGUgYXR0cmlidXRlIHRvIGZpbGUgaW5wdXQKICAgICAgICAgICAgbXVsdGlwbGU6IGZhbHNlLAogICAgICAgICAgICBhY2NlcHRGaWxlczogbnVsbCwKICAgICAgICAgICAgLy8gbmFtZSBhdHRyaWJ1dGUgb2YgZmlsZSBpbnB1dAogICAgICAgICAgICBuYW1lOiAnZmlsZScsCiAgICAgICAgICAgIG9uQ2hhbmdlOiBmdW5jdGlvbihpbnB1dCkge30sCiAgICAgICAgICAgIGhvdmVyQ2xhc3M6ICdxcS11cGxvYWQtYnV0dG9uLWhvdmVyJywKICAgICAgICAgICAgZm9jdXNDbGFzczogJ3FxLXVwbG9hZC1idXR0b24tZm9jdXMnCiAgICAgICAgfTsKCiAgICBmdW5jdGlvbiBjcmVhdGVJbnB1dCgpIHsKICAgICAgICB2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwoKICAgICAgICBpZiAob3B0aW9ucy5tdWx0aXBsZSl7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibXVsdGlwbGUiLCAibXVsdGlwbGUiKTsKICAgICAgICB9CgogICAgICAgIGlmIChvcHRpb25zLmFjY2VwdEZpbGVzKSB7CiAgICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgiYWNjZXB0Iiwgb3B0aW9ucy5hY2NlcHRGaWxlcyk7CiAgICAgICAgfQoKICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoInR5cGUiLCAiZmlsZSIpOwogICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgibmFtZSIsIG9wdGlvbnMubmFtZSk7CgogICAgICAgIHFxKGlucHV0KS5jc3MoewogICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJywKICAgICAgICAgICAgLy8gaW4gT3BlcmEgb25seSAnYnJvd3NlJyBidXR0b24KICAgICAgICAgICAgLy8gaXMgY2xpY2thYmxlIGFuZCBpdCBpcyBsb2NhdGVkIGF0CiAgICAgICAgICAgIC8vIHRoZSByaWdodCBzaWRlIG9mIHRoZSBpbnB1dAogICAgICAgICAgICByaWdodDogMCwKICAgICAgICAgICAgdG9wOiAwLAogICAgICAgICAgICBmb250RmFtaWx5OiAnQXJpYWwnLAogICAgICAgICAgICAvLyA0IHBlcnNvbnMgcmVwb3J0ZWQgdGhpcywgdGhlIG1heCB2YWx1ZXMgdGhhdCB3b3JrZWQgZm9yIHRoZW0gd2VyZSAyNDMsIDIzNiwgMjM2LCAxMTgKICAgICAgICAgICAgZm9udFNpemU6ICcxMThweCcsCiAgICAgICAgICAgIG1hcmdpbjogMCwKICAgICAgICAgICAgcGFkZGluZzogMCwKICAgICAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsCiAgICAgICAgICAgIG9wYWNpdHk6IDAKICAgICAgICB9KTsKCiAgICAgICAgb3B0aW9ucy5lbGVtZW50LmFwcGVuZENoaWxkKGlucHV0KTsKCiAgICAgICAgZGlzcG9zZVN1cHBvcnQuYXR0YWNoKGlucHV0LCAnY2hhbmdlJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgb3B0aW9ucy5vbkNoYW5nZShpbnB1dCk7CiAgICAgICAgfSk7CgogICAgICAgIGRpc3Bvc2VTdXBwb3J0LmF0dGFjaChpbnB1dCwgJ21vdXNlb3ZlcicsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHFxKG9wdGlvbnMuZWxlbWVudCkuYWRkQ2xhc3Mob3B0aW9ucy5ob3ZlckNsYXNzKTsKICAgICAgICB9KTsKICAgICAgICBkaXNwb3NlU3VwcG9ydC5hdHRhY2goaW5wdXQsICdtb3VzZW91dCcsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHFxKG9wdGlvbnMuZWxlbWVudCkucmVtb3ZlQ2xhc3Mob3B0aW9ucy5ob3ZlckNsYXNzKTsKICAgICAgICB9KTsKICAgICAgICBkaXNwb3NlU3VwcG9ydC5hdHRhY2goaW5wdXQsICdmb2N1cycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICAgIHFxKG9wdGlvbnMuZWxlbWVudCkuYWRkQ2xhc3Mob3B0aW9ucy5mb2N1c0NsYXNzKTsKICAgICAgICB9KTsKICAgICAgICBkaXNwb3NlU3VwcG9ydC5hdHRhY2goaW5wdXQsICdibHVyJywgZnVuY3Rpb24oKXsKICAgICAgICAgICAgcXEob3B0aW9ucy5lbGVtZW50KS5yZW1vdmVDbGFzcyhvcHRpb25zLmZvY3VzQ2xhc3MpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBJRSBhbmQgT3BlcmEsIHVuZm9ydHVuYXRlbHkgaGF2ZSAyIHRhYiBzdG9wcyBvbiBmaWxlIGlucHV0CiAgICAgICAgLy8gd2hpY2ggaXMgdW5hY2NlcHRhYmxlIGluIG91ciBjYXNlLCBkaXNhYmxlIGtleWJvYXJkIGFjY2VzcwogICAgICAgIGlmICh3aW5kb3cuYXR0YWNoRXZlbnQpewogICAgICAgICAgICAvLyBpdCBpcyBJRSBvciBPcGVyYQogICAgICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3RhYkluZGV4JywgIi0xIik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICB9CgoKICAgIHFxLmV4dGVuZChvcHRpb25zLCBvKTsKCiAgICAvLyBtYWtlIGJ1dHRvbiBzdWl0YWJsZSBjb250YWluZXIgZm9yIGlucHV0CiAgICBxcShvcHRpb25zLmVsZW1lbnQpLmNzcyh7CiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsCiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLAogICAgICAgIC8vIE1ha2Ugc3VyZSBicm93c2UgYnV0dG9uIGlzIGluIHRoZSByaWdodCBzaWRlCiAgICAgICAgLy8gaW4gSW50ZXJuZXQgRXhwbG9yZXIKICAgICAgICBkaXJlY3Rpb246ICdsdHInCiAgICB9KTsKCiAgICBpbnB1dCA9IGNyZWF0ZUlucHV0KCk7CgogICAgcmV0dXJuIHsKICAgICAgICBnZXRJbnB1dDogZnVuY3Rpb24oKXsKICAgICAgICAgICAgcmV0dXJuIGlucHV0OwogICAgICAgIH0sCgogICAgICAgIHJlc2V0OiBmdW5jdGlvbigpewogICAgICAgICAgICBpZiAoaW5wdXQucGFyZW50Tm9kZSl7CiAgICAgICAgICAgICAgICBxcShpbnB1dCkucmVtb3ZlKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHFxKG9wdGlvbnMuZWxlbWVudCkucmVtb3ZlQ2xhc3Mob3B0aW9ucy5mb2N1c0NsYXNzKTsKICAgICAgICAgICAgaW5wdXQgPSBjcmVhdGVJbnB1dCgpOwogICAgICAgIH0KICAgIH07Cn07Ci8qZ2xvYmFscyBxcSovCnFxLlBhc3RlU3VwcG9ydCA9IGZ1bmN0aW9uKG8pIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgb3B0aW9ucywgZGV0YWNoUGFzdGVIYW5kbGVyOwoKICAgIG9wdGlvbnMgPSB7CiAgICAgICAgdGFyZ2V0RWxlbWVudDogbnVsbCwKICAgICAgICBjYWxsYmFja3M6IHsKICAgICAgICAgICAgbG9nOiBmdW5jdGlvbihtZXNzYWdlLCBsZXZlbCkge30sCiAgICAgICAgICAgIHBhc3RlUmVjZWl2ZWQ6IGZ1bmN0aW9uKGJsb2IpIHt9CiAgICAgICAgfQogICAgfTsKCiAgICBmdW5jdGlvbiBpc0ltYWdlKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS50eXBlICYmCiAgICAgICAgICAgIGl0ZW0udHlwZS5pbmRleE9mKCJpbWFnZS8iKSA9PT0gMDsKICAgIH0KCiAgICBmdW5jdGlvbiByZWdpc3RlclBhc3RlSGFuZGxlcigpIHsKICAgICAgICBxcShvcHRpb25zLnRhcmdldEVsZW1lbnQpLmF0dGFjaCgicGFzdGUiLCBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICB2YXIgY2xpcGJvYXJkRGF0YSA9IGV2ZW50LmNsaXBib2FyZERhdGE7CgogICAgICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YSkgewogICAgICAgICAgICAgICAgcXEuZWFjaChjbGlwYm9hcmREYXRhLml0ZW1zLCBmdW5jdGlvbihpZHgsIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbWFnZShpdGVtKSkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmxvYiA9IGl0ZW0uZ2V0QXNGaWxlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2tzLnBhc3RlUmVjZWl2ZWQoYmxvYik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB1bnJlZ2lzdGVyUGFzdGVIYW5kbGVyKCkgewogICAgICAgIGlmIChkZXRhY2hQYXN0ZUhhbmRsZXIpIHsKICAgICAgICAgICAgZGV0YWNoUGFzdGVIYW5kbGVyKCk7CiAgICAgICAgfQogICAgfQoKICAgIHFxLmV4dGVuZChvcHRpb25zLCBvKTsKICAgIHJlZ2lzdGVyUGFzdGVIYW5kbGVyKCk7CgogICAgcmV0dXJuIHsKICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHVucmVnaXN0ZXJQYXN0ZUhhbmRsZXIoKTsKICAgICAgICB9CiAgICB9Owp9OwpxcS5GaW5lVXBsb2FkZXJCYXNpYyA9IGZ1bmN0aW9uKG8pewogICAgdmFyIHRoYXQgPSB0aGlzOwogICAgdGhpcy5fb3B0aW9ucyA9IHsKICAgICAgICBkZWJ1ZzogZmFsc2UsCiAgICAgICAgYnV0dG9uOiBudWxsLAogICAgICAgIG11bHRpcGxlOiB0cnVlLAogICAgICAgIG1heENvbm5lY3Rpb25zOiAzLAogICAgICAgIGRpc2FibGVDYW5jZWxGb3JGb3JtVXBsb2FkczogZmFsc2UsCiAgICAgICAgYXV0b1VwbG9hZDogdHJ1ZSwKICAgICAgICByZXF1ZXN0OiB7CiAgICAgICAgICAgIGVuZHBvaW50OiAnL3NlcnZlci91cGxvYWQnLAogICAgICAgICAgICBwYXJhbXM6IHt9LAogICAgICAgICAgICBwYXJhbXNJbkJvZHk6IHRydWUsCiAgICAgICAgICAgIGN1c3RvbUhlYWRlcnM6IHt9LAogICAgICAgICAgICBmb3JjZU11bHRpcGFydDogdHJ1ZSwKICAgICAgICAgICAgaW5wdXROYW1lOiAncXFmaWxlJywKICAgICAgICAgICAgdXVpZE5hbWU6ICdxcXV1aWQnLAogICAgICAgICAgICB0b3RhbEZpbGVTaXplTmFtZTogJ3FxdG90YWxmaWxlc2l6ZScKICAgICAgICB9LAogICAgICAgIHZhbGlkYXRpb246IHsKICAgICAgICAgICAgYWxsb3dlZEV4dGVuc2lvbnM6IFtdLAogICAgICAgICAgICBzaXplTGltaXQ6IDAsCiAgICAgICAgICAgIG1pblNpemVMaW1pdDogMCwKICAgICAgICAgICAgaXRlbUxpbWl0OiAwLAogICAgICAgICAgICBzdG9wT25GaXJzdEludmFsaWRGaWxlOiB0cnVlCiAgICAgICAgfSwKICAgICAgICBjYWxsYmFja3M6IHsKICAgICAgICAgICAgb25TdWJtaXQ6IGZ1bmN0aW9uKGlkLCBuYW1lKXt9LAogICAgICAgICAgICBvblN1Ym1pdHRlZDogZnVuY3Rpb24oaWQsIG5hbWUpe30sCiAgICAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCBuYW1lLCByZXNwb25zZUpTT04pe30sCiAgICAgICAgICAgIG9uQ2FuY2VsOiBmdW5jdGlvbihpZCwgbmFtZSl7fSwKICAgICAgICAgICAgb25VcGxvYWQ6IGZ1bmN0aW9uKGlkLCBuYW1lKXt9LAogICAgICAgICAgICBvblVwbG9hZENodW5rOiBmdW5jdGlvbihpZCwgbmFtZSwgY2h1bmtEYXRhKXt9LAogICAgICAgICAgICBvblJlc3VtZTogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCBjaHVua0RhdGEpe30sCiAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGlkLCBuYW1lLCBsb2FkZWQsIHRvdGFsKXt9LAogICAgICAgICAgICBvbkVycm9yOiBmdW5jdGlvbihpZCwgbmFtZSwgcmVhc29uLCBtYXliZVhocikge30sCiAgICAgICAgICAgIG9uQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgbmFtZSwgYXR0ZW1wdE51bWJlcikge30sCiAgICAgICAgICAgIG9uTWFudWFsUmV0cnk6IGZ1bmN0aW9uKGlkLCBuYW1lKSB7fSwKICAgICAgICAgICAgb25WYWxpZGF0ZUJhdGNoOiBmdW5jdGlvbihmaWxlT3JCbG9iRGF0YSkge30sCiAgICAgICAgICAgIG9uVmFsaWRhdGU6IGZ1bmN0aW9uKGZpbGVPckJsb2JEYXRhKSB7fSwKICAgICAgICAgICAgb25TdWJtaXREZWxldGU6IGZ1bmN0aW9uKGlkKSB7fSwKICAgICAgICAgICAgb25EZWxldGU6IGZ1bmN0aW9uKGlkKXt9LAogICAgICAgICAgICBvbkRlbGV0ZUNvbXBsZXRlOiBmdW5jdGlvbihpZCwgeGhyLCBpc0Vycm9yKXt9LAogICAgICAgICAgICBvblBhc3RlUmVjZWl2ZWQ6IGZ1bmN0aW9uKGJsb2IpIHsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgcXEuUHJvbWlzZSgpLnN1Y2Nlc3MoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbWVzc2FnZXM6IHsKICAgICAgICAgICAgdHlwZUVycm9yOiAie2ZpbGV9IGhhcyBhbiBpbnZhbGlkIGV4dGVuc2lvbi4gVmFsaWQgZXh0ZW5zaW9uKHMpOiB7ZXh0ZW5zaW9uc30uIiwKICAgICAgICAgICAgc2l6ZUVycm9yOiAie2ZpbGV9IGlzIHRvbyBsYXJnZSwgbWF4aW11bSBmaWxlIHNpemUgaXMge3NpemVMaW1pdH0uIiwKICAgICAgICAgICAgbWluU2l6ZUVycm9yOiAie2ZpbGV9IGlzIHRvbyBzbWFsbCwgbWluaW11bSBmaWxlIHNpemUgaXMge21pblNpemVMaW1pdH0uIiwKICAgICAgICAgICAgZW1wdHlFcnJvcjogIntmaWxlfSBpcyBlbXB0eSwgcGxlYXNlIHNlbGVjdCBmaWxlcyBhZ2FpbiB3aXRob3V0IGl0LiIsCiAgICAgICAgICAgIG5vRmlsZXNFcnJvcjogIk5vIGZpbGVzIHRvIHVwbG9hZC4iLAogICAgICAgICAgICB0b29NYW55SXRlbXNFcnJvcjogIlRvbyBtYW55IGl0ZW1zICh7bmV0SXRlbXN9KSB3b3VsZCBiZSB1cGxvYWRlZC4gIEl0ZW0gbGltaXQgaXMge2l0ZW1MaW1pdH0uIiwKICAgICAgICAgICAgcmV0cnlGYWlsVG9vTWFueUl0ZW1zOiAiUmV0cnkgZmFpbGVkIC0geW91IGhhdmUgcmVhY2hlZCB5b3VyIGZpbGUgbGltaXQuIiwKICAgICAgICAgICAgb25MZWF2ZTogIlRoZSBmaWxlcyBhcmUgYmVpbmcgdXBsb2FkZWQsIGlmIHlvdSBsZWF2ZSBub3cgdGhlIHVwbG9hZCB3aWxsIGJlIGNhbmNlbGxlZC4iCiAgICAgICAgfSwKICAgICAgICByZXRyeTogewogICAgICAgICAgICBlbmFibGVBdXRvOiBmYWxzZSwKICAgICAgICAgICAgbWF4QXV0b0F0dGVtcHRzOiAzLAogICAgICAgICAgICBhdXRvQXR0ZW1wdERlbGF5OiA1LAogICAgICAgICAgICBwcmV2ZW50UmV0cnlSZXNwb25zZVByb3BlcnR5OiAncHJldmVudFJldHJ5JwogICAgICAgIH0sCiAgICAgICAgY2xhc3NlczogewogICAgICAgICAgICBidXR0b25Ib3ZlcjogJ3FxLXVwbG9hZC1idXR0b24taG92ZXInLAogICAgICAgICAgICBidXR0b25Gb2N1czogJ3FxLXVwbG9hZC1idXR0b24tZm9jdXMnCiAgICAgICAgfSwKICAgICAgICBjaHVua2luZzogewogICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKICAgICAgICAgICAgcGFydFNpemU6IDIwMDAwMDAsCiAgICAgICAgICAgIHBhcmFtTmFtZXM6IHsKICAgICAgICAgICAgICAgIHBhcnRJbmRleDogJ3FxcGFydGluZGV4JywKICAgICAgICAgICAgICAgIHBhcnRCeXRlT2Zmc2V0OiAncXFwYXJ0Ynl0ZW9mZnNldCcsCiAgICAgICAgICAgICAgICBjaHVua1NpemU6ICdxcWNodW5rc2l6ZScsCiAgICAgICAgICAgICAgICB0b3RhbEZpbGVTaXplOiAncXF0b3RhbGZpbGVzaXplJywKICAgICAgICAgICAgICAgIHRvdGFsUGFydHM6ICdxcXRvdGFscGFydHMnLAogICAgICAgICAgICAgICAgZmlsZW5hbWU6ICdxcWZpbGVuYW1lJwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICByZXN1bWU6IHsKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsCiAgICAgICAgICAgIGlkOiBudWxsLAogICAgICAgICAgICBjb29raWVzRXhwaXJlSW46IDcsIC8vZGF5cwogICAgICAgICAgICBwYXJhbU5hbWVzOiB7CiAgICAgICAgICAgICAgICByZXN1bWluZzogInFxcmVzdW1lIgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRGaWxlTmFtZTogZnVuY3Rpb24oZmlsZU9yQmxvYk5hbWUpIHsKICAgICAgICAgICAgaWYgKGZpbGVPckJsb2JOYW1lLmxlbmd0aCA+IDMzKSB7CiAgICAgICAgICAgICAgICBmaWxlT3JCbG9iTmFtZSA9IGZpbGVPckJsb2JOYW1lLnNsaWNlKDAsIDE5KSArICcuLi4nICsgZmlsZU9yQmxvYk5hbWUuc2xpY2UoLTE0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmlsZU9yQmxvYk5hbWU7CiAgICAgICAgfSwKICAgICAgICB0ZXh0OiB7CiAgICAgICAgICAgIHNpemVTeW1ib2xzOiBbJ2tCJywgJ01CJywgJ0dCJywgJ1RCJywgJ1BCJywgJ0VCJ10KICAgICAgICB9LAogICAgICAgIGRlbGV0ZUZpbGUgOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICBlbmRwb2ludDogJy9zZXJ2ZXIvdXBsb2FkJywKICAgICAgICAgICAgY3VzdG9tSGVhZGVyczoge30sCiAgICAgICAgICAgIHBhcmFtczoge30KICAgICAgICB9LAogICAgICAgIGNvcnM6IHsKICAgICAgICAgICAgZXhwZWN0ZWQ6IGZhbHNlLAogICAgICAgICAgICBzZW5kQ3JlZGVudGlhbHM6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBibG9iczogewogICAgICAgICAgICBkZWZhdWx0TmFtZTogJ21pc2NfZGF0YScsCiAgICAgICAgICAgIHBhcmFtTmFtZXM6IHsKICAgICAgICAgICAgICAgIG5hbWU6ICdxcWJsb2JuYW1lJwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBwYXN0ZTogewogICAgICAgICAgICB0YXJnZXRFbGVtZW50OiBudWxsLAogICAgICAgICAgICBkZWZhdWx0TmFtZTogJ3Bhc3RlZF9pbWFnZScKICAgICAgICB9CiAgICB9OwoKICAgIHFxLmV4dGVuZCh0aGlzLl9vcHRpb25zLCBvLCB0cnVlKTsKICAgIHRoaXMuX3dyYXBDYWxsYmFja3MoKTsKICAgIHRoaXMuX2Rpc3Bvc2VTdXBwb3J0ID0gIG5ldyBxcS5EaXNwb3NlU3VwcG9ydCgpOwoKICAgIHRoaXMuX2ZpbGVzSW5Qcm9ncmVzcyA9IFtdOwogICAgdGhpcy5fc3RvcmVkSWRzID0gW107CiAgICB0aGlzLl9hdXRvUmV0cmllcyA9IFtdOwogICAgdGhpcy5fcmV0cnlUaW1lb3V0cyA9IFtdOwogICAgdGhpcy5fcHJldmVudFJldHJpZXMgPSBbXTsKICAgIHRoaXMuX25ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZCA9IDA7CgogICAgdGhpcy5fcGFyYW1zU3RvcmUgPSB0aGlzLl9jcmVhdGVQYXJhbXNTdG9yZSgicmVxdWVzdCIpOwogICAgdGhpcy5fZGVsZXRlRmlsZVBhcmFtc1N0b3JlID0gdGhpcy5fY3JlYXRlUGFyYW1zU3RvcmUoImRlbGV0ZUZpbGUiKTsKCiAgICB0aGlzLl9lbmRwb2ludFN0b3JlID0gdGhpcy5fY3JlYXRlRW5kcG9pbnRTdG9yZSgicmVxdWVzdCIpOwogICAgdGhpcy5fZGVsZXRlRmlsZUVuZHBvaW50U3RvcmUgPSB0aGlzLl9jcmVhdGVFbmRwb2ludFN0b3JlKCJkZWxldGVGaWxlIik7CgogICAgdGhpcy5faGFuZGxlciA9IHRoaXMuX2NyZWF0ZVVwbG9hZEhhbmRsZXIoKTsKICAgIHRoaXMuX2RlbGV0ZUhhbmRsZXIgPSB0aGlzLl9jcmVhdGVEZWxldGVIYW5kbGVyKCk7CgogICAgaWYgKHRoaXMuX29wdGlvbnMuYnV0dG9uKXsKICAgICAgICB0aGlzLl9idXR0b24gPSB0aGlzLl9jcmVhdGVVcGxvYWRCdXR0b24odGhpcy5fb3B0aW9ucy5idXR0b24pOwogICAgfQoKICAgIGlmICh0aGlzLl9vcHRpb25zLnBhc3RlLnRhcmdldEVsZW1lbnQpIHsKICAgICAgICB0aGlzLl9wYXN0ZUhhbmRsZXIgPSB0aGlzLl9jcmVhdGVQYXN0ZUhhbmRsZXIoKTsKICAgIH0KCiAgICB0aGlzLl9wcmV2ZW50TGVhdmVJblByb2dyZXNzKCk7Cn07CgpxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUgPSB7CiAgICBsb2c6IGZ1bmN0aW9uKHN0ciwgbGV2ZWwpIHsKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5kZWJ1ZyAmJiAoIWxldmVsIHx8IGxldmVsID09PSAnaW5mbycpKSB7CiAgICAgICAgICAgIHFxLmxvZygnW0ZpbmVVcGxvYWRlcl0gJyArIHN0cik7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGxldmVsICYmIGxldmVsICE9PSAnaW5mbycpIHsKICAgICAgICAgICAgcXEubG9nKCdbRmluZVVwbG9hZGVyXSAnICsgc3RyLCBsZXZlbCk7CgogICAgICAgIH0KICAgIH0sCiAgICBzZXRQYXJhbXM6IGZ1bmN0aW9uKHBhcmFtcywgaWQpIHsKICAgICAgICAvKmpzaGludCBlcWVxZXE6IHRydWUsIGVxbnVsbDogdHJ1ZSovCiAgICAgICAgaWYgKGlkID09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnBhcmFtcyA9IHBhcmFtczsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX3BhcmFtc1N0b3JlLnNldFBhcmFtcyhwYXJhbXMsIGlkKTsKICAgICAgICB9CiAgICB9LAogICAgc2V0RGVsZXRlRmlsZVBhcmFtczogZnVuY3Rpb24ocGFyYW1zLCBpZCkgewogICAgICAgIC8qanNoaW50IGVxZXFlcTogdHJ1ZSwgZXFudWxsOiB0cnVlKi8KICAgICAgICBpZiAoaWQgPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLl9vcHRpb25zLmRlbGV0ZUZpbGUucGFyYW1zID0gcGFyYW1zOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fZGVsZXRlRmlsZVBhcmFtc1N0b3JlLnNldFBhcmFtcyhwYXJhbXMsIGlkKTsKICAgICAgICB9CiAgICB9LAogICAgc2V0RW5kcG9pbnQ6IGZ1bmN0aW9uKGVuZHBvaW50LCBpZCkgewogICAgICAgIC8qanNoaW50IGVxZXFlcTogdHJ1ZSwgZXFudWxsOiB0cnVlKi8KICAgICAgICBpZiAoaWQgPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLl9vcHRpb25zLnJlcXVlc3QuZW5kcG9pbnQgPSBlbmRwb2ludDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX2VuZHBvaW50U3RvcmUuc2V0RW5kcG9pbnQoZW5kcG9pbnQsIGlkKTsKICAgICAgICB9CiAgICB9LAogICAgZ2V0SW5Qcm9ncmVzczogZnVuY3Rpb24oKXsKICAgICAgICByZXR1cm4gdGhpcy5fZmlsZXNJblByb2dyZXNzLmxlbmd0aDsKICAgIH0sCiAgICB1cGxvYWRTdG9yZWRGaWxlczogZnVuY3Rpb24oKXsKICAgICAgICAidXNlIHN0cmljdCI7CiAgICAgICAgdmFyIGlkVG9VcGxvYWQ7CgogICAgICAgIHdoaWxlKHRoaXMuX3N0b3JlZElkcy5sZW5ndGgpIHsKICAgICAgICAgICAgaWRUb1VwbG9hZCA9IHRoaXMuX3N0b3JlZElkcy5zaGlmdCgpOwogICAgICAgICAgICB0aGlzLl9maWxlc0luUHJvZ3Jlc3MucHVzaChpZFRvVXBsb2FkKTsKICAgICAgICAgICAgdGhpcy5faGFuZGxlci51cGxvYWQoaWRUb1VwbG9hZCk7CiAgICAgICAgfQogICAgfSwKICAgIGNsZWFyU3RvcmVkRmlsZXM6IGZ1bmN0aW9uKCl7CiAgICAgICAgdGhpcy5fc3RvcmVkSWRzID0gW107CiAgICB9LAogICAgcmV0cnk6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgaWYgKHRoaXMuX29uQmVmb3JlTWFudWFsUmV0cnkoaWQpKSB7CiAgICAgICAgICAgIHRoaXMuX25ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZCsrOwogICAgICAgICAgICB0aGlzLl9oYW5kbGVyLnJldHJ5KGlkKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSwKICAgIGNhbmNlbDogZnVuY3Rpb24oaWQpIHsKICAgICAgICB0aGlzLl9oYW5kbGVyLmNhbmNlbChpZCk7CiAgICB9LAogICAgY2FuY2VsQWxsOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc3RvcmVkSWRzQ29weSA9IFtdLAogICAgICAgICAgICBzZWxmID0gdGhpczsKCiAgICAgICAgcXEuZXh0ZW5kKHN0b3JlZElkc0NvcHksIHRoaXMuX3N0b3JlZElkcyk7CiAgICAgICAgcXEuZWFjaChzdG9yZWRJZHNDb3B5LCBmdW5jdGlvbihpZHgsIHN0b3JlZEZpbGVJZCkgewogICAgICAgICAgICBzZWxmLmNhbmNlbChzdG9yZWRGaWxlSWQpOwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLl9oYW5kbGVyLmNhbmNlbEFsbCgpOwogICAgfSwKICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLmxvZygiUmVzZXR0aW5nIHVwbG9hZGVyLi4uIik7CiAgICAgICAgdGhpcy5faGFuZGxlci5yZXNldCgpOwogICAgICAgIHRoaXMuX2ZpbGVzSW5Qcm9ncmVzcyA9IFtdOwogICAgICAgIHRoaXMuX3N0b3JlZElkcyA9IFtdOwogICAgICAgIHRoaXMuX2F1dG9SZXRyaWVzID0gW107CiAgICAgICAgdGhpcy5fcmV0cnlUaW1lb3V0cyA9IFtdOwogICAgICAgIHRoaXMuX3ByZXZlbnRSZXRyaWVzID0gW107CiAgICAgICAgdGhpcy5fYnV0dG9uLnJlc2V0KCk7CiAgICAgICAgdGhpcy5fcGFyYW1zU3RvcmUucmVzZXQoKTsKICAgICAgICB0aGlzLl9lbmRwb2ludFN0b3JlLnJlc2V0KCk7CiAgICAgICAgdGhpcy5fbmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkID0gMDsKCiAgICAgICAgaWYgKHRoaXMuX3Bhc3RlSGFuZGxlcikgewogICAgICAgICAgICB0aGlzLl9wYXN0ZUhhbmRsZXIucmVzZXQoKTsKICAgICAgICB9CiAgICB9LAogICAgYWRkRmlsZXM6IGZ1bmN0aW9uKGZpbGVzQmxvYkRhdGFPcklucHV0cykgewogICAgICAgIHZhciBzZWxmID0gdGhpcywKICAgICAgICAgICAgdmVyaWZpZWRGaWxlc09ySW5wdXRzID0gW10sCiAgICAgICAgICAgIGluZGV4LCBmaWxlT3JJbnB1dDsKCiAgICAgICAgaWYgKGZpbGVzQmxvYkRhdGFPcklucHV0cykgewogICAgICAgICAgICBpZiAoIXdpbmRvdy5GaWxlTGlzdCB8fCAhKGZpbGVzQmxvYkRhdGFPcklucHV0cyBpbnN0YW5jZW9mIEZpbGVMaXN0KSkgewogICAgICAgICAgICAgICAgZmlsZXNCbG9iRGF0YU9ySW5wdXRzID0gW10uY29uY2F0KGZpbGVzQmxvYkRhdGFPcklucHV0cyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGZpbGVzQmxvYkRhdGFPcklucHV0cy5sZW5ndGg7IGluZGV4Kz0xKSB7CiAgICAgICAgICAgICAgICBmaWxlT3JJbnB1dCA9IGZpbGVzQmxvYkRhdGFPcklucHV0c1tpbmRleF07CgogICAgICAgICAgICAgICAgaWYgKHFxLmlzRmlsZU9ySW5wdXQoZmlsZU9ySW5wdXQpKSB7CiAgICAgICAgICAgICAgICAgICAgdmVyaWZpZWRGaWxlc09ySW5wdXRzLnB1c2goZmlsZU9ySW5wdXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coZmlsZU9ySW5wdXQgKyAnIGlzIG5vdCBhIEZpbGUgb3IgSU5QVVQgZWxlbWVudCEgIElnbm9yaW5nIScsICd3YXJuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMubG9nKCdQcm9jZXNzaW5nICcgKyB2ZXJpZmllZEZpbGVzT3JJbnB1dHMubGVuZ3RoICsgJyBmaWxlcyBvciBpbnB1dHMuLi4nKTsKICAgICAgICAgICAgdGhpcy5fdXBsb2FkRmlsZU9yQmxvYkRhdGFMaXN0KHZlcmlmaWVkRmlsZXNPcklucHV0cyk7CiAgICAgICAgfQogICAgfSwKICAgIGFkZEJsb2JzOiBmdW5jdGlvbihibG9iRGF0YU9yQXJyYXkpIHsKICAgICAgICBpZiAoYmxvYkRhdGFPckFycmF5KSB7CiAgICAgICAgICAgIHZhciBibG9iRGF0YUFycmF5ID0gW10uY29uY2F0KGJsb2JEYXRhT3JBcnJheSksCiAgICAgICAgICAgICAgICB2ZXJpZmllZEJsb2JEYXRhTGlzdCA9IFtdLAogICAgICAgICAgICAgICAgc2VsZiA9IHRoaXM7CgogICAgICAgICAgICBxcS5lYWNoKGJsb2JEYXRhQXJyYXksIGZ1bmN0aW9uKGlkeCwgYmxvYkRhdGEpIHsKICAgICAgICAgICAgICAgIGlmIChxcS5pc0Jsb2IoYmxvYkRhdGEpICYmICFxcS5pc0ZpbGVPcklucHV0KGJsb2JEYXRhKSkgewogICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkQmxvYkRhdGFMaXN0LnB1c2goewogICAgICAgICAgICAgICAgICAgICAgICBibG9iOiBibG9iRGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc2VsZi5fb3B0aW9ucy5ibG9icy5kZWZhdWx0TmFtZQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZiAocXEuaXNPYmplY3QoYmxvYkRhdGEpICYmIGJsb2JEYXRhLmJsb2IgJiYgYmxvYkRhdGEubmFtZSkgewogICAgICAgICAgICAgICAgICAgIHZlcmlmaWVkQmxvYkRhdGFMaXN0LnB1c2goYmxvYkRhdGEpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2coImFkZEJsb2JzOiBlbnRyeSBhdCBpbmRleCAiICsgaWR4ICsgIiBpcyBub3QgYSBCbG9iIG9yIGEgQmxvYkRhdGEgb2JqZWN0IiwgImVycm9yIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgdGhpcy5fdXBsb2FkRmlsZU9yQmxvYkRhdGFMaXN0KHZlcmlmaWVkQmxvYkRhdGFMaXN0KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMubG9nKCJ1bmRlZmluZWQgb3Igbm9uLWFycmF5IHBhcmFtZXRlciBwYXNzZWQgaW50byBhZGRCbG9icyIsICJlcnJvciIpOwogICAgICAgIH0KICAgIH0sCiAgICBnZXRVdWlkOiBmdW5jdGlvbihpZCkgewogICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVyLmdldFV1aWQoaWQpOwogICAgfSwKICAgIGdldFJlc3VtYWJsZUZpbGVzRGF0YTogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZXIuZ2V0UmVzdW1hYmxlRmlsZXNEYXRhKCk7CiAgICB9LAogICAgZ2V0U2l6ZTogZnVuY3Rpb24oaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlci5nZXRTaXplKGlkKTsKICAgIH0sCiAgICBnZXROYW1lOiBmdW5jdGlvbihpZCkgewogICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVyLmdldE5hbWUoaWQpOwogICAgfSwKICAgIGdldEZpbGU6IGZ1bmN0aW9uKGZpbGVPckJsb2JJZCkgewogICAgICAgIHJldHVybiB0aGlzLl9oYW5kbGVyLmdldEZpbGUoZmlsZU9yQmxvYklkKTsKICAgIH0sCiAgICBkZWxldGVGaWxlOiBmdW5jdGlvbihpZCkgewogICAgICAgIHRoaXMuX29uU3VibWl0RGVsZXRlKGlkKTsKICAgIH0sCiAgICBzZXREZWxldGVGaWxlRW5kcG9pbnQ6IGZ1bmN0aW9uKGVuZHBvaW50LCBpZCkgewogICAgICAgIC8qanNoaW50IGVxZXFlcTogdHJ1ZSwgZXFudWxsOiB0cnVlKi8KICAgICAgICBpZiAoaWQgPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzLl9vcHRpb25zLmRlbGV0ZUZpbGUuZW5kcG9pbnQgPSBlbmRwb2ludDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMuX2RlbGV0ZUZpbGVFbmRwb2ludFN0b3JlLnNldEVuZHBvaW50KGVuZHBvaW50LCBpZCk7CiAgICAgICAgfQogICAgfSwKICAgIGdldFByb21pc3NvcnlDYWxsYmFja05hbWVzOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gWyJvblBhc3RlUmVjZWl2ZWQiXTsKICAgIH0sCiAgICBfY3JlYXRlVXBsb2FkQnV0dG9uOiBmdW5jdGlvbihlbGVtZW50KXsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIHZhciBidXR0b24gPSBuZXcgcXEuVXBsb2FkQnV0dG9uKHsKICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudCwKICAgICAgICAgICAgbXVsdGlwbGU6IHRoaXMuX29wdGlvbnMubXVsdGlwbGUgJiYgcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSwKICAgICAgICAgICAgYWNjZXB0RmlsZXM6IHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5hY2NlcHRGaWxlcywKICAgICAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKGlucHV0KXsKICAgICAgICAgICAgICAgIHNlbGYuX29uSW5wdXRDaGFuZ2UoaW5wdXQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBob3ZlckNsYXNzOiB0aGlzLl9vcHRpb25zLmNsYXNzZXMuYnV0dG9uSG92ZXIsCiAgICAgICAgICAgIGZvY3VzQ2xhc3M6IHRoaXMuX29wdGlvbnMuY2xhc3Nlcy5idXR0b25Gb2N1cwogICAgICAgIH0pOwoKICAgICAgICB0aGlzLl9kaXNwb3NlU3VwcG9ydC5hZGREaXNwb3NlcihmdW5jdGlvbigpIHsgYnV0dG9uLmRpc3Bvc2UoKTsgfSk7CiAgICAgICAgcmV0dXJuIGJ1dHRvbjsKICAgIH0sCiAgICBfY3JlYXRlVXBsb2FkSGFuZGxlcjogZnVuY3Rpb24oKXsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIHJldHVybiBuZXcgcXEuVXBsb2FkSGFuZGxlcih7CiAgICAgICAgICAgIGRlYnVnOiB0aGlzLl9vcHRpb25zLmRlYnVnLAogICAgICAgICAgICBmb3JjZU11bHRpcGFydDogdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LmZvcmNlTXVsdGlwYXJ0LAogICAgICAgICAgICBtYXhDb25uZWN0aW9uczogdGhpcy5fb3B0aW9ucy5tYXhDb25uZWN0aW9ucywKICAgICAgICAgICAgY3VzdG9tSGVhZGVyczogdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LmN1c3RvbUhlYWRlcnMsCiAgICAgICAgICAgIGlucHV0TmFtZTogdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LmlucHV0TmFtZSwKICAgICAgICAgICAgdXVpZFBhcmFtTmFtZTogdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnV1aWROYW1lLAogICAgICAgICAgICB0b3RhbEZpbGVTaXplUGFyYW1OYW1lOiB0aGlzLl9vcHRpb25zLnJlcXVlc3QudG90YWxGaWxlU2l6ZU5hbWUsCiAgICAgICAgICAgIGNvcnM6IHRoaXMuX29wdGlvbnMuY29ycywKICAgICAgICAgICAgZGVtb01vZGU6IHRoaXMuX29wdGlvbnMuZGVtb01vZGUsCiAgICAgICAgICAgIHBhcmFtc0luQm9keTogdGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnBhcmFtc0luQm9keSwKICAgICAgICAgICAgcGFyYW1zU3RvcmU6IHRoaXMuX3BhcmFtc1N0b3JlLAogICAgICAgICAgICBlbmRwb2ludFN0b3JlOiB0aGlzLl9lbmRwb2ludFN0b3JlLAogICAgICAgICAgICBjaHVua2luZzogdGhpcy5fb3B0aW9ucy5jaHVua2luZywKICAgICAgICAgICAgcmVzdW1lOiB0aGlzLl9vcHRpb25zLnJlc3VtZSwKICAgICAgICAgICAgYmxvYnM6IHRoaXMuX29wdGlvbnMuYmxvYnMsCiAgICAgICAgICAgIGxvZzogZnVuY3Rpb24oc3RyLCBsZXZlbCkgewogICAgICAgICAgICAgICAgc2VsZi5sb2coc3RyLCBsZXZlbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGlkLCBuYW1lLCBsb2FkZWQsIHRvdGFsKXsKICAgICAgICAgICAgICAgIHNlbGYuX29uUHJvZ3Jlc3MoaWQsIG5hbWUsIGxvYWRlZCwgdG90YWwpOwogICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5jYWxsYmFja3Mub25Qcm9ncmVzcyhpZCwgbmFtZSwgbG9hZGVkLCB0b3RhbCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCBuYW1lLCByZXN1bHQsIHhocil7CiAgICAgICAgICAgICAgICBzZWxmLl9vbkNvbXBsZXRlKGlkLCBuYW1lLCByZXN1bHQsIHhocik7CiAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNhbGxiYWNrcy5vbkNvbXBsZXRlKGlkLCBuYW1lLCByZXN1bHQpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkNhbmNlbDogZnVuY3Rpb24oaWQsIG5hbWUpewogICAgICAgICAgICAgICAgc2VsZi5fb25DYW5jZWwoaWQsIG5hbWUpOwogICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5jYWxsYmFja3Mub25DYW5jZWwoaWQsIG5hbWUpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvblVwbG9hZDogZnVuY3Rpb24oaWQsIG5hbWUpewogICAgICAgICAgICAgICAgc2VsZi5fb25VcGxvYWQoaWQsIG5hbWUpOwogICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5jYWxsYmFja3Mub25VcGxvYWQoaWQsIG5hbWUpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvblVwbG9hZENodW5rOiBmdW5jdGlvbihpZCwgbmFtZSwgY2h1bmtEYXRhKXsKICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuY2FsbGJhY2tzLm9uVXBsb2FkQ2h1bmsoaWQsIG5hbWUsIGNodW5rRGF0YSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uUmVzdW1lOiBmdW5jdGlvbihpZCwgbmFtZSwgY2h1bmtEYXRhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucy5jYWxsYmFja3Mub25SZXN1bWUoaWQsIG5hbWUsIGNodW5rRGF0YSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG9uQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgbmFtZSwgcmVzcG9uc2VKU09OLCB4aHIpIHsKICAgICAgICAgICAgICAgIHNlbGYuX3ByZXZlbnRSZXRyaWVzW2lkXSA9IHJlc3BvbnNlSlNPTltzZWxmLl9vcHRpb25zLnJldHJ5LnByZXZlbnRSZXRyeVJlc3BvbnNlUHJvcGVydHldOwoKICAgICAgICAgICAgICAgIGlmIChzZWxmLl9zaG91bGRBdXRvUmV0cnkoaWQsIG5hbWUsIHJlc3BvbnNlSlNPTikpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXliZVBhcnNlQW5kU2VuZFVwbG9hZEVycm9yKGlkLCBuYW1lLCByZXNwb25zZUpTT04sIHhocik7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3B0aW9ucy5jYWxsYmFja3Mub25BdXRvUmV0cnkoaWQsIG5hbWUsIHNlbGYuX2F1dG9SZXRyaWVzW2lkXSArIDEpOwogICAgICAgICAgICAgICAgICAgIHNlbGYuX29uQmVmb3JlQXV0b1JldHJ5KGlkLCBuYW1lKTsKCiAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmV0cnlUaW1lb3V0c1tpZF0gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbkF1dG9SZXRyeShpZCwgbmFtZSwgcmVzcG9uc2VKU09OKQogICAgICAgICAgICAgICAgICAgIH0sIHNlbGYuX29wdGlvbnMucmV0cnkuYXV0b0F0dGVtcHREZWxheSAqIDEwMDApOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfSwKICAgIF9jcmVhdGVEZWxldGVIYW5kbGVyOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CgogICAgICAgIHJldHVybiBuZXcgcXEuRGVsZXRlRmlsZUFqYXhSZXF1ZXN0b3IoewogICAgICAgICAgICBtYXhDb25uZWN0aW9uczogdGhpcy5fb3B0aW9ucy5tYXhDb25uZWN0aW9ucywKICAgICAgICAgICAgY3VzdG9tSGVhZGVyczogdGhpcy5fb3B0aW9ucy5kZWxldGVGaWxlLmN1c3RvbUhlYWRlcnMsCiAgICAgICAgICAgIHBhcmFtc1N0b3JlOiB0aGlzLl9kZWxldGVGaWxlUGFyYW1zU3RvcmUsCiAgICAgICAgICAgIGVuZHBvaW50U3RvcmU6IHRoaXMuX2RlbGV0ZUZpbGVFbmRwb2ludFN0b3JlLAogICAgICAgICAgICBkZW1vTW9kZTogdGhpcy5fb3B0aW9ucy5kZW1vTW9kZSwKICAgICAgICAgICAgY29yczogdGhpcy5fb3B0aW9ucy5jb3JzLAogICAgICAgICAgICBsb2c6IGZ1bmN0aW9uKHN0ciwgbGV2ZWwpIHsKICAgICAgICAgICAgICAgIHNlbGYubG9nKHN0ciwgbGV2ZWwpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkRlbGV0ZTogZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgICAgIHNlbGYuX29uRGVsZXRlKGlkKTsKICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuY2FsbGJhY2tzLm9uRGVsZXRlKGlkKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25EZWxldGVDb21wbGV0ZTogZnVuY3Rpb24oaWQsIHhociwgaXNFcnJvcikgewogICAgICAgICAgICAgICAgc2VsZi5fb25EZWxldGVDb21wbGV0ZShpZCwgeGhyLCBpc0Vycm9yKTsKICAgICAgICAgICAgICAgIHNlbGYuX29wdGlvbnMuY2FsbGJhY2tzLm9uRGVsZXRlQ29tcGxldGUoaWQsIHhociwgaXNFcnJvcik7CiAgICAgICAgICAgIH0KCiAgICAgICAgfSk7CiAgICB9LAogICAgX2NyZWF0ZVBhc3RlSGFuZGxlcjogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgICByZXR1cm4gbmV3IHFxLlBhc3RlU3VwcG9ydCh7CiAgICAgICAgICAgIHRhcmdldEVsZW1lbnQ6IHRoaXMuX29wdGlvbnMucGFzdGUudGFyZ2V0RWxlbWVudCwKICAgICAgICAgICAgY2FsbGJhY2tzOiB7CiAgICAgICAgICAgICAgICBsb2c6IGZ1bmN0aW9uKHN0ciwgbGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZyhzdHIsIGxldmVsKTsKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwYXN0ZVJlY2VpdmVkOiBmdW5jdGlvbihibG9iKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHBhc3RlUmVjZWl2ZWRDYWxsYmFjayA9IHNlbGYuX29wdGlvbnMuY2FsbGJhY2tzLm9uUGFzdGVSZWNlaXZlZCwKICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHBhc3RlUmVjZWl2ZWRDYWxsYmFjayhibG9iKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKHByb21pc2UudGhlbikgewogICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24oc3VjY2Vzc0RhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZVBhc3RlU3VjY2VzcyhibG9iLCBzdWNjZXNzRGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uKGZhaWx1cmVEYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZygiSWdub3JpbmcgcGFzdGVkIGltYWdlIHBlciBwYXN0ZSByZWNlaXZlZCBjYWxsYmFjay4gIFJlYXNvbiA9ICciICsgZmFpbHVyZURhdGEgKyAiJyIpOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9nKCJQcm9taXNlIGNvbnRyYWN0IG5vdCBmdWxmaWxsZWQgaW4gcGFzdGVSZWNlaXZlZCBjYWxsYmFjayBoYW5kbGVyISAgSWdub3JpbmcgcGFzdGVkIGl0ZW0uIiwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9LAogICAgX2hhbmRsZVBhc3RlU3VjY2VzczogZnVuY3Rpb24oYmxvYiwgZXh0U3VwcGxpZWROYW1lKSB7CiAgICAgICAgdmFyIGV4dGVuc2lvbiA9IGJsb2IudHlwZS5zcGxpdCgiLyIpWzFdLAogICAgICAgICAgICBuYW1lID0gZXh0U3VwcGxpZWROYW1lOwoKICAgICAgICAvKmpzaGludCBlcWVxZXE6IHRydWUsIGVxbnVsbDogdHJ1ZSovCiAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICBuYW1lID0gdGhpcy5fb3B0aW9ucy5wYXN0ZS5kZWZhdWx0TmFtZTsKICAgICAgICB9CgogICAgICAgIG5hbWUgKz0gJy4nICsgZXh0ZW5zaW9uOwoKICAgICAgICB0aGlzLmFkZEJsb2JzKHsKICAgICAgICAgICAgbmFtZTogbmFtZSwKICAgICAgICAgICAgYmxvYjogYmxvYgogICAgICAgIH0pOwogICAgfSwKICAgIF9wcmV2ZW50TGVhdmVJblByb2dyZXNzOiBmdW5jdGlvbigpewogICAgICAgIHZhciBzZWxmID0gdGhpczsKCiAgICAgICAgdGhpcy5fZGlzcG9zZVN1cHBvcnQuYXR0YWNoKHdpbmRvdywgJ2JlZm9yZXVubG9hZCcsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBpZiAoIXNlbGYuX2ZpbGVzSW5Qcm9ncmVzcy5sZW5ndGgpe3JldHVybjt9CgogICAgICAgICAgICB2YXIgZSA9IGUgfHwgd2luZG93LmV2ZW50OwogICAgICAgICAgICAvLyBmb3IgaWUsIGZmCiAgICAgICAgICAgIGUucmV0dXJuVmFsdWUgPSBzZWxmLl9vcHRpb25zLm1lc3NhZ2VzLm9uTGVhdmU7CiAgICAgICAgICAgIC8vIGZvciB3ZWJraXQKICAgICAgICAgICAgcmV0dXJuIHNlbGYuX29wdGlvbnMubWVzc2FnZXMub25MZWF2ZTsKICAgICAgICB9KTsKICAgIH0sCiAgICBfb25TdWJtaXQ6IGZ1bmN0aW9uKGlkLCBuYW1lKSB7CiAgICAgICAgdGhpcy5fbmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkKys7CgogICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmF1dG9VcGxvYWQpIHsKICAgICAgICAgICAgdGhpcy5fZmlsZXNJblByb2dyZXNzLnB1c2goaWQpOwogICAgICAgIH0KICAgIH0sCiAgICBfb25Qcm9ncmVzczogZnVuY3Rpb24oaWQsIG5hbWUsIGxvYWRlZCwgdG90YWwpewogICAgfSwKICAgIF9vbkNvbXBsZXRlOiBmdW5jdGlvbihpZCwgbmFtZSwgcmVzdWx0LCB4aHIpIHsKICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSB7CiAgICAgICAgICAgIHRoaXMuX25ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZC0tOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5fcmVtb3ZlRnJvbUZpbGVzSW5Qcm9ncmVzcyhpZCk7CiAgICAgICAgdGhpcy5fbWF5YmVQYXJzZUFuZFNlbmRVcGxvYWRFcnJvcihpZCwgbmFtZSwgcmVzdWx0LCB4aHIpOwogICAgfSwKICAgIF9vbkNhbmNlbDogZnVuY3Rpb24oaWQsIG5hbWUpewogICAgICAgIHRoaXMuX25ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZC0tOwoKICAgICAgICB0aGlzLl9yZW1vdmVGcm9tRmlsZXNJblByb2dyZXNzKGlkKTsKCiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JldHJ5VGltZW91dHNbaWRdKTsKCiAgICAgICAgdmFyIHN0b3JlZEl0ZW1JbmRleCA9IHFxLmluZGV4T2YodGhpcy5fc3RvcmVkSWRzLCBpZCk7CiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmF1dG9VcGxvYWQgJiYgc3RvcmVkSXRlbUluZGV4ID49IDApIHsKICAgICAgICAgICAgdGhpcy5fc3RvcmVkSWRzLnNwbGljZShzdG9yZWRJdGVtSW5kZXgsIDEpOwogICAgICAgIH0KICAgIH0sCiAgICBfaXNEZWxldGVQb3NzaWJsZTogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuICh0aGlzLl9vcHRpb25zLmRlbGV0ZUZpbGUuZW5hYmxlZCAmJgogICAgICAgICAgICAoIXRoaXMuX29wdGlvbnMuY29ycy5leHBlY3RlZCB8fAogICAgICAgICAgICAgICAgKHRoaXMuX29wdGlvbnMuY29ycy5leHBlY3RlZCAmJiAocXEuaWUxMCgpIHx8ICFxcS5pZSgpKSkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgKTsKICAgIH0sCiAgICBfb25TdWJtaXREZWxldGU6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgaWYgKHRoaXMuX2lzRGVsZXRlUG9zc2libGUoKSkgewogICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25TdWJtaXREZWxldGUoaWQpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdGhpcy5fZGVsZXRlSGFuZGxlci5zZW5kRGVsZXRlKGlkLCB0aGlzLmdldFV1aWQoaWQpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5sb2coIkRlbGV0ZSByZXF1ZXN0IGlnbm9yZWQgZm9yIElEICIgKyBpZCArICIsIGRlbGV0ZSBmZWF0dXJlIGlzIGRpc2FibGVkIG9yIHJlcXVlc3Qgbm90IHBvc3NpYmxlICIgKwogICAgICAgICAgICAgICAgImR1ZSB0byBDT1JTIG9uIGEgdXNlciBhZ2VudCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgcHJlLWZsaWdodGluZy4iLCAid2FybiIpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSwKICAgIF9vbkRlbGV0ZTogZnVuY3Rpb24oZmlsZUlkKSB7fSwKICAgIF9vbkRlbGV0ZUNvbXBsZXRlOiBmdW5jdGlvbihpZCwgeGhyLCBpc0Vycm9yKSB7CiAgICAgICAgdmFyIG5hbWUgPSB0aGlzLl9oYW5kbGVyLmdldE5hbWUoaWQpOwoKICAgICAgICBpZiAoaXNFcnJvcikgewogICAgICAgICAgICB0aGlzLmxvZygiRGVsZXRlIHJlcXVlc3QgZm9yICciICsgbmFtZSArICInIGhhcyBmYWlsZWQuIiwgImVycm9yIik7CiAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uRXJyb3IoaWQsIG5hbWUsICJEZWxldGUgcmVxdWVzdCBmYWlsZWQgd2l0aCByZXNwb25zZSBjb2RlICIgKyB4aHIuc3RhdHVzLCB4aHIpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5fbmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkLS07CiAgICAgICAgICAgIHRoaXMubG9nKCJEZWxldGUgcmVxdWVzdCBmb3IgJyIgKyBuYW1lICsgIicgaGFzIHN1Y2NlZWRlZC4iKTsKICAgICAgICB9CiAgICB9LAogICAgX3JlbW92ZUZyb21GaWxlc0luUHJvZ3Jlc3M6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgdmFyIGluZGV4ID0gcXEuaW5kZXhPZih0aGlzLl9maWxlc0luUHJvZ3Jlc3MsIGlkKTsKICAgICAgICBpZiAoaW5kZXggPj0gMCkgewogICAgICAgICAgICB0aGlzLl9maWxlc0luUHJvZ3Jlc3Muc3BsaWNlKGluZGV4LCAxKTsKICAgICAgICB9CiAgICB9LAogICAgX29uVXBsb2FkOiBmdW5jdGlvbihpZCwgbmFtZSl7fSwKICAgIF9vbklucHV0Q2hhbmdlOiBmdW5jdGlvbihpbnB1dCl7CiAgICAgICAgaWYgKHFxLmlzWGhyVXBsb2FkU3VwcG9ydGVkKCkpewogICAgICAgICAgICB0aGlzLmFkZEZpbGVzKGlucHV0LmZpbGVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzLmFkZEZpbGVzKGlucHV0KTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fYnV0dG9uLnJlc2V0KCk7CiAgICB9LAogICAgX29uQmVmb3JlQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgbmFtZSkgewogICAgICAgIHRoaXMubG9nKCJXYWl0aW5nICIgKyB0aGlzLl9vcHRpb25zLnJldHJ5LmF1dG9BdHRlbXB0RGVsYXkgKyAiIHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nICIgKyBuYW1lICsgIi4uLiIpOwogICAgfSwKICAgIF9vbkF1dG9SZXRyeTogZnVuY3Rpb24oaWQsIG5hbWUsIHJlc3BvbnNlSlNPTikgewogICAgICAgIHRoaXMubG9nKCJSZXRyeWluZyAiICsgbmFtZSArICIuLi4iKTsKICAgICAgICB0aGlzLl9hdXRvUmV0cmllc1tpZF0rKzsKICAgICAgICB0aGlzLl9oYW5kbGVyLnJldHJ5KGlkKTsKICAgIH0sCiAgICBfc2hvdWxkQXV0b1JldHJ5OiBmdW5jdGlvbihpZCwgbmFtZSwgcmVzcG9uc2VKU09OKSB7CiAgICAgICAgaWYgKCF0aGlzLl9wcmV2ZW50UmV0cmllc1tpZF0gJiYgdGhpcy5fb3B0aW9ucy5yZXRyeS5lbmFibGVBdXRvKSB7CiAgICAgICAgICAgIGlmICh0aGlzLl9hdXRvUmV0cmllc1tpZF0gPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgdGhpcy5fYXV0b1JldHJpZXNbaWRdID0gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9SZXRyaWVzW2lkXSA8IHRoaXMuX29wdGlvbnMucmV0cnkubWF4QXV0b0F0dGVtcHRzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIC8vcmV0dXJuIGZhbHNlIGlmIHdlIHNob3VsZCBub3QgYXR0ZW1wdCB0aGUgcmVxdWVzdGVkIHJldHJ5CiAgICBfb25CZWZvcmVNYW51YWxSZXRyeTogZnVuY3Rpb24oaWQpIHsKICAgICAgICB2YXIgaXRlbUxpbWl0ID0gdGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLml0ZW1MaW1pdDsKCiAgICAgICAgaWYgKHRoaXMuX3ByZXZlbnRSZXRyaWVzW2lkXSkgewogICAgICAgICAgICB0aGlzLmxvZygiUmV0cmllcyBhcmUgZm9yYmlkZGVuIGZvciBpZCAiICsgaWQsICd3YXJuJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAodGhpcy5faGFuZGxlci5pc1ZhbGlkKGlkKSkgewogICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSB0aGlzLl9oYW5kbGVyLmdldE5hbWUoaWQpOwoKICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uTWFudWFsUmV0cnkoaWQsIGZpbGVOYW1lKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGl0ZW1MaW1pdCA+IDAgJiYgdGhpcy5fbmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkKzEgPiBpdGVtTGltaXQpIHsKICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1FcnJvcigicmV0cnlGYWlsVG9vTWFueUl0ZW1zIiwgIiIpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLmxvZygiUmV0cnlpbmcgdXBsb2FkIGZvciAnIiArIGZpbGVOYW1lICsgIicgKGlkOiAiICsgaWQgKyAiKS4uLiIpOwogICAgICAgICAgICB0aGlzLl9maWxlc0luUHJvZ3Jlc3MucHVzaChpZCk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy5sb2coIiciICsgaWQgKyAiJyBpcyBub3QgYSB2YWxpZCBmaWxlIElEIiwgJ2Vycm9yJyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9LAogICAgX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3I6IGZ1bmN0aW9uKGlkLCBuYW1lLCByZXNwb25zZSwgeGhyKSB7CiAgICAgICAgLy9hc3N1bWluZyBubyBvbmUgd2lsbCBhY3R1YWxseSBzZXQgdGhlIHJlc3BvbnNlIGNvZGUgdG8gc29tZXRoaW5nIG90aGVyIHRoYW4gMjAwIGFuZCBzdGlsbCBzZXQgJ3N1Y2Nlc3MnIHRvIHRydWUKICAgICAgICBpZiAoIXJlc3BvbnNlLnN1Y2Nlc3MpewogICAgICAgICAgICBpZiAoeGhyICYmIHhoci5zdGF0dXMgIT09IDIwMCAmJiAhcmVzcG9uc2UuZXJyb3IpIHsKICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uRXJyb3IoaWQsIG5hbWUsICJYSFIgcmV0dXJuZWQgcmVzcG9uc2UgY29kZSAiICsgeGhyLnN0YXR1cywgeGhyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBlcnJvclJlYXNvbiA9IHJlc3BvbnNlLmVycm9yID8gcmVzcG9uc2UuZXJyb3IgOiAiVXBsb2FkIGZhaWx1cmUgcmVhc29uIHVua25vd24iOwogICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25FcnJvcihpZCwgbmFtZSwgZXJyb3JSZWFzb24sIHhocik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9LAogICAgX3VwbG9hZEZpbGVPckJsb2JEYXRhTGlzdDogZnVuY3Rpb24oZmlsZU9yQmxvYkRhdGFMaXN0KXsKICAgICAgICB2YXIgaW5kZXgsCiAgICAgICAgICAgIHZhbGlkYXRpb25EZXNjcmlwdG9ycyA9IHRoaXMuX2dldFZhbGlkYXRpb25EZXNjcmlwdG9ycyhmaWxlT3JCbG9iRGF0YUxpc3QpLAogICAgICAgICAgICBiYXRjaFZhbGlkID0gdGhpcy5faXNCYXRjaFZhbGlkKHZhbGlkYXRpb25EZXNjcmlwdG9ycyk7CgogICAgICAgIGlmIChiYXRjaFZhbGlkKSB7CiAgICAgICAgICAgIGlmIChmaWxlT3JCbG9iRGF0YUxpc3QubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgZm9yIChpbmRleCA9IDA7IGluZGV4IDwgZmlsZU9yQmxvYkRhdGFMaXN0Lmxlbmd0aDsgaW5kZXgrKyl7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3ZhbGlkYXRlRmlsZU9yQmxvYkRhdGEoZmlsZU9yQmxvYkRhdGFMaXN0W2luZGV4XSkpewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl91cGxvYWQoZmlsZU9yQmxvYkRhdGFMaXN0W2luZGV4XSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5zdG9wT25GaXJzdEludmFsaWRGaWxlKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuX2l0ZW1FcnJvcigibm9GaWxlc0Vycm9yIiwgIiIpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIF91cGxvYWQ6IGZ1bmN0aW9uKGJsb2JPckZpbGVDb250YWluZXIpewogICAgICAgIHZhciBpZCA9IHRoaXMuX2hhbmRsZXIuYWRkKGJsb2JPckZpbGVDb250YWluZXIpOwogICAgICAgIHZhciBuYW1lID0gdGhpcy5faGFuZGxlci5nZXROYW1lKGlkKTsKCiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uU3VibWl0KGlkLCBuYW1lKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhpcy5fb25TdWJtaXQoaWQsIG5hbWUpOwogICAgICAgICAgICB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vblN1Ym1pdHRlZChpZCwgbmFtZSk7CgogICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hdXRvVXBsb2FkKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9oYW5kbGVyLnVwbG9hZChpZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLl9zdG9yZUZvckxhdGVyKGlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0sCiAgICBfc3RvcmVGb3JMYXRlcjogZnVuY3Rpb24oaWQpIHsKICAgICAgICB0aGlzLl9zdG9yZWRJZHMucHVzaChpZCk7CiAgICB9LAogICAgX2lzQmF0Y2hWYWxpZDogZnVuY3Rpb24odmFsaWRhdGlvbkRlc2NyaXB0b3JzKSB7CiAgICAgICAgLy9maXJzdCwgZGVmZXIgdGhlIGNoZWNrIHRvIHRoZSBjYWxsYmFjayAoYXNrIHRoZSBpbnRlZ3JhdG9yKQogICAgICAgIHZhciBlcnJvck1lc3NhZ2UsCiAgICAgICAgICAgIGl0ZW1MaW1pdCA9IHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5pdGVtTGltaXQsCiAgICAgICAgICAgIHByb3Bvc2VkTmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkID0gdGhpcy5fbmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkICsgdmFsaWRhdGlvbkRlc2NyaXB0b3JzLmxlbmd0aCwKICAgICAgICAgICAgYmF0Y2hWYWxpZCA9IHRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uVmFsaWRhdGVCYXRjaCh2YWxpZGF0aW9uRGVzY3JpcHRvcnMpICE9PSBmYWxzZTsKCiAgICAgICAgLy9pZiB0aGUgY2FsbGJhY2sgaGFzbid0IHJlamVjdGVkIHRoZSBiYXRjaCwgcnVuIHNvbWUgaW50ZXJuYWwgdGVzdHMgb24gdGhlIGJhdGNoIG5leHQKICAgICAgICBpZiAoYmF0Y2hWYWxpZCkgewogICAgICAgICAgICBpZiAoaXRlbUxpbWl0ID09PSAwIHx8IHByb3Bvc2VkTmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkIDw9IGl0ZW1MaW1pdCkgewogICAgICAgICAgICAgICAgYmF0Y2hWYWxpZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBiYXRjaFZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSB0aGlzLl9vcHRpb25zLm1lc3NhZ2VzLnRvb01hbnlJdGVtc0Vycm9yCiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1x7bmV0SXRlbXNcfS9nLCBwcm9wb3NlZE5ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZCkKICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXHtpdGVtTGltaXRcfS9nLCBpdGVtTGltaXQpOwogICAgICAgICAgICAgICAgdGhpcy5fYmF0Y2hFcnJvcihlcnJvck1lc3NhZ2UpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYmF0Y2hWYWxpZDsKICAgIH0sCiAgICBfdmFsaWRhdGVGaWxlT3JCbG9iRGF0YTogZnVuY3Rpb24oZmlsZU9yQmxvYkRhdGEpewogICAgICAgIHZhciB2YWxpZGF0aW9uRGVzY3JpcHRvciwgbmFtZSwgc2l6ZTsKCiAgICAgICAgdmFsaWRhdGlvbkRlc2NyaXB0b3IgPSB0aGlzLl9nZXRWYWxpZGF0aW9uRGVzY3JpcHRvcihmaWxlT3JCbG9iRGF0YSk7CiAgICAgICAgbmFtZSA9IHZhbGlkYXRpb25EZXNjcmlwdG9yLm5hbWU7CiAgICAgICAgc2l6ZSA9IHZhbGlkYXRpb25EZXNjcmlwdG9yLnNpemU7CgogICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vblZhbGlkYXRlKHZhbGlkYXRpb25EZXNjcmlwdG9yKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKHFxLmlzRmlsZU9ySW5wdXQoZmlsZU9yQmxvYkRhdGEpICYmICF0aGlzLl9pc0FsbG93ZWRFeHRlbnNpb24obmFtZSkpewogICAgICAgICAgICB0aGlzLl9pdGVtRXJyb3IoJ3R5cGVFcnJvcicsIG5hbWUpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CgogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzaXplID09PSAwKXsKICAgICAgICAgICAgdGhpcy5faXRlbUVycm9yKCdlbXB0eUVycm9yJywgbmFtZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNpemUgJiYgdGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLnNpemVMaW1pdCAmJiBzaXplID4gdGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLnNpemVMaW1pdCl7CiAgICAgICAgICAgIHRoaXMuX2l0ZW1FcnJvcignc2l6ZUVycm9yJywgbmFtZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHNpemUgJiYgc2l6ZSA8IHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5taW5TaXplTGltaXQpewogICAgICAgICAgICB0aGlzLl9pdGVtRXJyb3IoJ21pblNpemVFcnJvcicsIG5hbWUpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICBfaXRlbUVycm9yOiBmdW5jdGlvbihjb2RlLCBuYW1lKSB7CiAgICAgICAgdmFyIG1lc3NhZ2UgPSB0aGlzLl9vcHRpb25zLm1lc3NhZ2VzW2NvZGVdLAogICAgICAgICAgICBhbGxvd2VkRXh0ZW5zaW9ucyA9IFtdLAogICAgICAgICAgICBleHRlbnNpb25zRm9yTWVzc2FnZTsKCiAgICAgICAgZnVuY3Rpb24gcihuYW1lLCByZXBsYWNlbWVudCl7IG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UobmFtZSwgcmVwbGFjZW1lbnQpOyB9CgogICAgICAgIHFxLmVhY2godGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLmFsbG93ZWRFeHRlbnNpb25zLCBmdW5jdGlvbihpZHgsIGFsbG93ZWRFeHRlbnNpb24pIHsKICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICogSWYgYW4gYXJndW1lbnQgaXMgbm90IGEgc3RyaW5nLCBpZ25vcmUgaXQuICBBZGRlZCB3aGVuIGEgcG9zc2libGUgaXNzdWUgd2l0aCBNb29Ub29scyBoaWphY2tpbmcgdGhlCiAgICAgICAgICAgICAgICAgKiBgYWxsb3dlZEV4dGVuc2lvbnNgIGFycmF5IHdhcyBkaXNjb3ZlcmVkLiAgU2VlIGNhc2UgIzczNSBpbiB0aGUgaXNzdWUgdHJhY2tlciBmb3IgbW9yZSBkZXRhaWxzLgogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBpZiAocXEuaXNTdHJpbmcoYWxsb3dlZEV4dGVuc2lvbikpIHsKICAgICAgICAgICAgICAgICAgICBhbGxvd2VkRXh0ZW5zaW9ucy5wdXNoKGFsbG93ZWRFeHRlbnNpb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBleHRlbnNpb25zRm9yTWVzc2FnZSA9IGFsbG93ZWRFeHRlbnNpb25zLmpvaW4oJywgJykudG9Mb3dlckNhc2UoKTsKCiAgICAgICAgcigne2ZpbGV9JywgdGhpcy5fb3B0aW9ucy5mb3JtYXRGaWxlTmFtZShuYW1lKSk7CiAgICAgICAgcigne2V4dGVuc2lvbnN9JywgZXh0ZW5zaW9uc0Zvck1lc3NhZ2UpOwogICAgICAgIHIoJ3tzaXplTGltaXR9JywgdGhpcy5fZm9ybWF0U2l6ZSh0aGlzLl9vcHRpb25zLnZhbGlkYXRpb24uc2l6ZUxpbWl0KSk7CiAgICAgICAgcigne21pblNpemVMaW1pdH0nLCB0aGlzLl9mb3JtYXRTaXplKHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5taW5TaXplTGltaXQpKTsKCiAgICAgICAgdGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25FcnJvcihudWxsLCBuYW1lLCBtZXNzYWdlKTsKCiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7CiAgICB9LAogICAgX2JhdGNoRXJyb3I6IGZ1bmN0aW9uKG1lc3NhZ2UpIHsKICAgICAgICB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbkVycm9yKG51bGwsIG51bGwsIG1lc3NhZ2UpOwogICAgfSwKICAgIF9pc0FsbG93ZWRFeHRlbnNpb246IGZ1bmN0aW9uKGZpbGVOYW1lKXsKICAgICAgICB2YXIgYWxsb3dlZCA9IHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5hbGxvd2VkRXh0ZW5zaW9ucywKICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKCiAgICAgICAgaWYgKCFhbGxvd2VkLmxlbmd0aCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHFxLmVhY2goYWxsb3dlZCwgZnVuY3Rpb24oaWR4LCBhbGxvd2VkRXh0KSB7CiAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgKiBJZiBhbiBhcmd1bWVudCBpcyBub3QgYSBzdHJpbmcsIGlnbm9yZSBpdC4gIEFkZGVkIHdoZW4gYSBwb3NzaWJsZSBpc3N1ZSB3aXRoIE1vb1Rvb2xzIGhpamFja2luZyB0aGUKICAgICAgICAgICAgICogYGFsbG93ZWRFeHRlbnNpb25zYCBhcnJheSB3YXMgZGlzY292ZXJlZC4gIFNlZSBjYXNlICM3MzUgaW4gdGhlIGlzc3VlIHRyYWNrZXIgZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgICAgICovCiAgICAgICAgICAgIGlmIChxcS5pc1N0cmluZyhhbGxvd2VkRXh0KSkgewogICAgICAgICAgICAgICAgLypqc2hpbnQgZXFlcWVxOiB0cnVlLCBlcW51bGw6IHRydWUqLwogICAgICAgICAgICAgICAgdmFyIGV4dFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXFwuJyArIGFsbG93ZWRFeHQgKyAiJCIsICdpJyk7CgogICAgICAgICAgICAgICAgaWYgKGZpbGVOYW1lLm1hdGNoKGV4dFJlZ2V4KSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgdmFsaWQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gdmFsaWQ7CiAgICB9LAogICAgX2Zvcm1hdFNpemU6IGZ1bmN0aW9uKGJ5dGVzKXsKICAgICAgICB2YXIgaSA9IC0xOwogICAgICAgIGRvIHsKICAgICAgICAgICAgYnl0ZXMgPSBieXRlcyAvIDEwMjQ7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9IHdoaWxlIChieXRlcyA+IDk5KTsKCiAgICAgICAgcmV0dXJuIE1hdGgubWF4KGJ5dGVzLCAwLjEpLnRvRml4ZWQoMSkgKyB0aGlzLl9vcHRpb25zLnRleHQuc2l6ZVN5bWJvbHNbaV07CiAgICB9LAogICAgX3dyYXBDYWxsYmFja3M6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzZWxmLCBzYWZlQ2FsbGJhY2s7CgogICAgICAgIHNlbGYgPSB0aGlzOwoKICAgICAgICBzYWZlQ2FsbGJhY2sgPSBmdW5jdGlvbihuYW1lLCBjYWxsYmFjaywgYXJncykgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHNlbGYsIGFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNhdGNoIChleGNlcHRpb24pIHsKICAgICAgICAgICAgICAgIHNlbGYubG9nKCJDYXVnaHQgZXhjZXB0aW9uIGluICciICsgbmFtZSArICInIGNhbGxiYWNrIC0gIiArIGV4Y2VwdGlvbi5tZXNzYWdlLCAnZXJyb3InKTsKICAgICAgICAgICAgfQogICAgICAgIH07CgogICAgICAgIGZvciAodmFyIHByb3AgaW4gdGhpcy5fb3B0aW9ucy5jYWxsYmFja3MpIHsKICAgICAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIGNhbGxiYWNrTmFtZSwgY2FsbGJhY2tGdW5jOwogICAgICAgICAgICAgICAgY2FsbGJhY2tOYW1lID0gcHJvcDsKICAgICAgICAgICAgICAgIGNhbGxiYWNrRnVuYyA9IHNlbGYuX29wdGlvbnMuY2FsbGJhY2tzW2NhbGxiYWNrTmFtZV07CiAgICAgICAgICAgICAgICBzZWxmLl9vcHRpb25zLmNhbGxiYWNrc1tjYWxsYmFja05hbWVdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhZmVDYWxsYmFjayhjYWxsYmFja05hbWUsIGNhbGxiYWNrRnVuYywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0oKSk7CiAgICAgICAgfQogICAgfSwKICAgIF9wYXJzZUZpbGVPckJsb2JEYXRhTmFtZTogZnVuY3Rpb24oZmlsZU9yQmxvYkRhdGEpIHsKICAgICAgICB2YXIgbmFtZTsKCiAgICAgICAgaWYgKHFxLmlzRmlsZU9ySW5wdXQoZmlsZU9yQmxvYkRhdGEpKSB7CiAgICAgICAgICAgIGlmIChmaWxlT3JCbG9iRGF0YS52YWx1ZSkgewogICAgICAgICAgICAgICAgLy8gaXQgaXMgYSBmaWxlIGlucHV0CiAgICAgICAgICAgICAgICAvLyBnZXQgaW5wdXQgdmFsdWUgYW5kIHJlbW92ZSBwYXRoIHRvIG5vcm1hbGl6ZQogICAgICAgICAgICAgICAgbmFtZSA9IGZpbGVPckJsb2JEYXRhLnZhbHVlLnJlcGxhY2UoLy4qKFwvfFxcKS8sICIiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGZpeCBtaXNzaW5nIHByb3BlcnRpZXMgaW4gU2FmYXJpIDQgYW5kIGZpcmVmb3ggMTEuMGEyCiAgICAgICAgICAgICAgICBuYW1lID0gKGZpbGVPckJsb2JEYXRhLmZpbGVOYW1lICE9PSBudWxsICYmIGZpbGVPckJsb2JEYXRhLmZpbGVOYW1lICE9PSB1bmRlZmluZWQpID8gZmlsZU9yQmxvYkRhdGEuZmlsZU5hbWUgOiBmaWxlT3JCbG9iRGF0YS5uYW1lOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBuYW1lID0gZmlsZU9yQmxvYkRhdGEubmFtZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuYW1lOwogICAgfSwKICAgIF9wYXJzZUZpbGVPckJsb2JEYXRhU2l6ZTogZnVuY3Rpb24oZmlsZU9yQmxvYkRhdGEpIHsKICAgICAgICB2YXIgc2l6ZTsKCiAgICAgICAgaWYgKHFxLmlzRmlsZU9ySW5wdXQoZmlsZU9yQmxvYkRhdGEpKSB7CiAgICAgICAgICAgIGlmICghZmlsZU9yQmxvYkRhdGEudmFsdWUpewogICAgICAgICAgICAgICAgLy8gZml4IG1pc3NpbmcgcHJvcGVydGllcyBpbiBTYWZhcmkgNCBhbmQgZmlyZWZveCAxMS4wYTIKICAgICAgICAgICAgICAgIHNpemUgPSAoZmlsZU9yQmxvYkRhdGEuZmlsZVNpemUgIT09IG51bGwgJiYgZmlsZU9yQmxvYkRhdGEuZmlsZVNpemUgIT09IHVuZGVmaW5lZCkgPyBmaWxlT3JCbG9iRGF0YS5maWxlU2l6ZSA6IGZpbGVPckJsb2JEYXRhLnNpemU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHNpemUgPSBmaWxlT3JCbG9iRGF0YS5ibG9iLnNpemU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2l6ZTsKICAgIH0sCiAgICBfZ2V0VmFsaWRhdGlvbkRlc2NyaXB0b3I6IGZ1bmN0aW9uKGZpbGVPckJsb2JEYXRhKSB7CiAgICAgICAgdmFyIG5hbWUsIHNpemUsIGZpbGVEZXNjcmlwdG9yOwoKICAgICAgICBmaWxlRGVzY3JpcHRvciA9IHt9OwogICAgICAgIG5hbWUgPSB0aGlzLl9wYXJzZUZpbGVPckJsb2JEYXRhTmFtZShmaWxlT3JCbG9iRGF0YSk7CiAgICAgICAgc2l6ZSA9IHRoaXMuX3BhcnNlRmlsZU9yQmxvYkRhdGFTaXplKGZpbGVPckJsb2JEYXRhKTsKCiAgICAgICAgZmlsZURlc2NyaXB0b3IubmFtZSA9IG5hbWU7CiAgICAgICAgaWYgKHNpemUpIHsKICAgICAgICAgICAgZmlsZURlc2NyaXB0b3Iuc2l6ZSA9IHNpemU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmlsZURlc2NyaXB0b3I7CiAgICB9LAogICAgX2dldFZhbGlkYXRpb25EZXNjcmlwdG9yczogZnVuY3Rpb24oZmlsZXMpIHsKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgIGZpbGVEZXNjcmlwdG9ycyA9IFtdOwoKICAgICAgICBxcS5lYWNoKGZpbGVzLCBmdW5jdGlvbihpZHgsIGZpbGUpIHsKICAgICAgICAgICAgZmlsZURlc2NyaXB0b3JzLnB1c2goc2VsZi5fZ2V0VmFsaWRhdGlvbkRlc2NyaXB0b3IoZmlsZSkpOwogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gZmlsZURlc2NyaXB0b3JzOwogICAgfSwKICAgIF9jcmVhdGVQYXJhbXNTdG9yZTogZnVuY3Rpb24odHlwZSkgewogICAgICAgIHZhciBwYXJhbXNTdG9yZSA9IHt9LAogICAgICAgICAgICBzZWxmID0gdGhpczsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgc2V0UGFyYW1zOiBmdW5jdGlvbihwYXJhbXMsIGlkKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFyYW1zQ29weSA9IHt9OwogICAgICAgICAgICAgICAgcXEuZXh0ZW5kKHBhcmFtc0NvcHksIHBhcmFtcyk7CiAgICAgICAgICAgICAgICBwYXJhbXNTdG9yZVtpZF0gPSBwYXJhbXNDb3B5OwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0UGFyYW1zOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICAgICAgLypqc2hpbnQgZXFlcWVxOiB0cnVlLCBlcW51bGw6IHRydWUqLwogICAgICAgICAgICAgICAgdmFyIHBhcmFtc0NvcHkgPSB7fTsKCiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCAmJiBwYXJhbXNTdG9yZVtpZF0pIHsKICAgICAgICAgICAgICAgICAgICBxcS5leHRlbmQocGFyYW1zQ29weSwgcGFyYW1zU3RvcmVbaWRdKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIHFxLmV4dGVuZChwYXJhbXNDb3B5LCBzZWxmLl9vcHRpb25zW3R5cGVdLnBhcmFtcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIHBhcmFtc0NvcHk7CiAgICAgICAgICAgIH0sCgogICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKGZpbGVJZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZSBwYXJhbXNTdG9yZVtmaWxlSWRdOwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgcGFyYW1zU3RvcmUgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9LAogICAgX2NyZWF0ZUVuZHBvaW50U3RvcmU6IGZ1bmN0aW9uKHR5cGUpIHsKICAgICAgICB2YXIgZW5kcG9pbnRTdG9yZSA9IHt9LAogICAgICAgIHNlbGYgPSB0aGlzOwoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBzZXRFbmRwb2ludDogZnVuY3Rpb24oZW5kcG9pbnQsIGlkKSB7CiAgICAgICAgICAgICAgICBlbmRwb2ludFN0b3JlW2lkXSA9IGVuZHBvaW50OwogICAgICAgICAgICB9LAoKICAgICAgICAgICAgZ2V0RW5kcG9pbnQ6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgICAgICAvKmpzaGludCBlcWVxZXE6IHRydWUsIGVxbnVsbDogdHJ1ZSovCiAgICAgICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCAmJiBlbmRwb2ludFN0b3JlW2lkXSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmRwb2ludFN0b3JlW2lkXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9uc1t0eXBlXS5lbmRwb2ludDsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHJlbW92ZTogZnVuY3Rpb24oZmlsZUlkKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlIGVuZHBvaW50U3RvcmVbZmlsZUlkXTsKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgIHJlc2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGVuZHBvaW50U3RvcmUgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9Cn07Ci8qZ2xvYmFscyBxcSwgZG9jdW1lbnQqLwpxcS5EcmFnQW5kRHJvcCA9IGZ1bmN0aW9uKG8pIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgb3B0aW9ucywgZHosIGRpclBlbmRpbmcsCiAgICAgICAgZHJvcHBlZEZpbGVzID0gW10sCiAgICAgICAgZHJvcHBlZEVudHJpZXNDb3VudCA9IDAsCiAgICAgICAgZHJvcHBlZEVudHJpZXNQYXJzZWRDb3VudCA9IDAsCiAgICAgICAgZGlzcG9zZVN1cHBvcnQgPSBuZXcgcXEuRGlzcG9zZVN1cHBvcnQoKTsKCiAgICAgb3B0aW9ucyA9IHsKICAgICAgICBkcm9wQXJlYTogbnVsbCwKICAgICAgICBleHRyYURyb3B6b25lczogW10sCiAgICAgICAgaGlkZURyb3B6b25lczogdHJ1ZSwKICAgICAgICBtdWx0aXBsZTogdHJ1ZSwKICAgICAgICBjbGFzc2VzOiB7CiAgICAgICAgICAgIGRyb3BBY3RpdmU6IG51bGwKICAgICAgICB9LAogICAgICAgIGNhbGxiYWNrczogewogICAgICAgICAgICBkcm9wUHJvY2Vzc2luZzogZnVuY3Rpb24oaXNQcm9jZXNzaW5nLCBmaWxlcykge30sCiAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihjb2RlLCBmaWxlbmFtZSkge30sCiAgICAgICAgICAgIGxvZzogZnVuY3Rpb24obWVzc2FnZSwgbGV2ZWwpIHt9CiAgICAgICAgfQogICAgfTsKCiAgICBxcS5leHRlbmQob3B0aW9ucywgbyk7CgogICAgZnVuY3Rpb24gbWF5YmVVcGxvYWREcm9wcGVkRmlsZXMoKSB7CiAgICAgICAgaWYgKGRyb3BwZWRFbnRyaWVzQ291bnQgPT09IGRyb3BwZWRFbnRyaWVzUGFyc2VkQ291bnQgJiYgIWRpclBlbmRpbmcpIHsKICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFja3MubG9nKCdHcmFiYmVkICcgKyBkcm9wcGVkRmlsZXMubGVuZ3RoICsgIiBmaWxlcyBhZnRlciB0cmVlIHRyYXZlcnNhbC4iKTsKICAgICAgICAgICAgZHouZHJvcERpc2FibGVkKGZhbHNlKTsKICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFja3MuZHJvcFByb2Nlc3NpbmcoZmFsc2UsIGRyb3BwZWRGaWxlcyk7CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gYWRkRHJvcHBlZEZpbGUoZmlsZSkgewogICAgICAgIGRyb3BwZWRGaWxlcy5wdXNoKGZpbGUpOwogICAgICAgIGRyb3BwZWRFbnRyaWVzUGFyc2VkQ291bnQrPTE7CiAgICAgICAgbWF5YmVVcGxvYWREcm9wcGVkRmlsZXMoKTsKICAgIH0KCiAgICBmdW5jdGlvbiB0cmF2ZXJzZUZpbGVUcmVlKGVudHJ5KSB7CiAgICAgICAgdmFyIGRpclJlYWRlciwgaTsKCiAgICAgICAgZHJvcHBlZEVudHJpZXNDb3VudCs9MTsKCiAgICAgICAgaWYgKGVudHJ5LmlzRmlsZSkgewogICAgICAgICAgICBlbnRyeS5maWxlKGZ1bmN0aW9uKGZpbGUpIHsKICAgICAgICAgICAgICAgIGFkZERyb3BwZWRGaWxlKGZpbGUpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoZW50cnkuaXNEaXJlY3RvcnkpIHsKICAgICAgICAgICAgZGlyUGVuZGluZyA9IHRydWU7CiAgICAgICAgICAgIGRpclJlYWRlciA9IGVudHJ5LmNyZWF0ZVJlYWRlcigpOwogICAgICAgICAgICBkaXJSZWFkZXIucmVhZEVudHJpZXMoZnVuY3Rpb24oZW50cmllcykgewogICAgICAgICAgICAgICAgZHJvcHBlZEVudHJpZXNQYXJzZWRDb3VudCs9MTsKICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSs9MSkgewogICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlRmlsZVRyZWUoZW50cmllc1tpXSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgZGlyUGVuZGluZyA9IGZhbHNlOwoKICAgICAgICAgICAgICAgIGlmICghZW50cmllcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICBtYXliZVVwbG9hZERyb3BwZWRGaWxlcygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFuZGxlRGF0YVRyYW5zZmVyKGRhdGFUcmFuc2ZlcikgewogICAgICAgIHZhciBpLCBpdGVtcywgZW50cnk7CgogICAgICAgIG9wdGlvbnMuY2FsbGJhY2tzLmRyb3BQcm9jZXNzaW5nKHRydWUpOwogICAgICAgIGR6LmRyb3BEaXNhYmxlZCh0cnVlKTsKCiAgICAgICAgaWYgKGRhdGFUcmFuc2Zlci5maWxlcy5sZW5ndGggPiAxICYmICFvcHRpb25zLm11bHRpcGxlKSB7CiAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2tzLmRyb3BQcm9jZXNzaW5nKGZhbHNlKTsKICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFja3MuZXJyb3IoJ3Rvb01hbnlGaWxlc0Vycm9yJywgIiIpOwogICAgICAgICAgICBkei5kcm9wRGlzYWJsZWQoZmFsc2UpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZHJvcHBlZEZpbGVzID0gW107CiAgICAgICAgICAgIGRyb3BwZWRFbnRyaWVzQ291bnQgPSAwOwogICAgICAgICAgICBkcm9wcGVkRW50cmllc1BhcnNlZENvdW50ID0gMDsKCiAgICAgICAgICAgIGlmIChxcS5pc0ZvbGRlckRyb3BTdXBwb3J0ZWQoZGF0YVRyYW5zZmVyKSkgewogICAgICAgICAgICAgICAgaXRlbXMgPSBkYXRhVHJhbnNmZXIuaXRlbXM7CgogICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSs9MSkgewogICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gaXRlbXNbaV0ud2Via2l0R2V0QXNFbnRyeSgpOwogICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgewogICAgICAgICAgICAgICAgICAgICAgICAvL2R1ZSB0byBhIGJ1ZyBpbiBDaHJvbWUncyBGaWxlIFN5c3RlbSBBUEkgaW1wbCAtICMxNDk3MzUKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LmlzRmlsZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcHBlZEZpbGVzLnB1c2goaXRlbXNbaV0uZ2V0QXNGaWxlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IGl0ZW1zLmxlbmd0aC0xKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF5YmVVcGxvYWREcm9wcGVkRmlsZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZUZpbGVUcmVlKGVudHJ5KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMuY2FsbGJhY2tzLmRyb3BQcm9jZXNzaW5nKGZhbHNlLCBkYXRhVHJhbnNmZXIuZmlsZXMpOwogICAgICAgICAgICAgICAgZHouZHJvcERpc2FibGVkKGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBzZXR1cERyb3B6b25lKGRyb3BBcmVhKXsKICAgICAgICBkeiA9IG5ldyBxcS5VcGxvYWREcm9wWm9uZSh7CiAgICAgICAgICAgIGVsZW1lbnQ6IGRyb3BBcmVhLAogICAgICAgICAgICBvbkVudGVyOiBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIHFxKGRyb3BBcmVhKS5hZGRDbGFzcyhvcHRpb25zLmNsYXNzZXMuZHJvcEFjdGl2ZSk7CiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbkxlYXZlTm90RGVzY2VuZGFudHM6IGZ1bmN0aW9uKGUpewogICAgICAgICAgICAgICAgcXEoZHJvcEFyZWEpLnJlbW92ZUNsYXNzKG9wdGlvbnMuY2xhc3Nlcy5kcm9wQWN0aXZlKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb25Ecm9wOiBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmhpZGVEcm9wem9uZXMpIHsKICAgICAgICAgICAgICAgICAgICBxcShkcm9wQXJlYSkuaGlkZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcXEoZHJvcEFyZWEpLnJlbW92ZUNsYXNzKG9wdGlvbnMuY2xhc3Nlcy5kcm9wQWN0aXZlKTsKCiAgICAgICAgICAgICAgICBoYW5kbGVEYXRhVHJhbnNmZXIoZS5kYXRhVHJhbnNmZXIpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGRpc3Bvc2VTdXBwb3J0LmFkZERpc3Bvc2VyKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkei5kaXNwb3NlKCk7CiAgICAgICAgfSk7CgogICAgICAgIGlmIChvcHRpb25zLmhpZGVEcm9wem9uZXMpIHsKICAgICAgICAgICAgcXEoZHJvcEFyZWEpLmhpZGUoKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaXNGaWxlRHJhZyhkcmFnRXZlbnQpIHsKICAgICAgICB2YXIgZmlsZURyYWc7CgogICAgICAgIHFxLmVhY2goZHJhZ0V2ZW50LmRhdGFUcmFuc2Zlci50eXBlcywgZnVuY3Rpb24oa2V5LCB2YWwpIHsKICAgICAgICAgICAgaWYgKHZhbCA9PT0gJ0ZpbGVzJykgewogICAgICAgICAgICAgICAgZmlsZURyYWcgPSB0cnVlOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiBmaWxlRHJhZzsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXR1cERyYWdEcm9wKCl7CiAgICAgICAgaWYgKG9wdGlvbnMuZHJvcEFyZWEpIHsKICAgICAgICAgICAgb3B0aW9ucy5leHRyYURyb3B6b25lcy5wdXNoKG9wdGlvbnMuZHJvcEFyZWEpOwogICAgICAgIH0KCiAgICAgICAgdmFyIGksIGRyb3B6b25lcyA9IG9wdGlvbnMuZXh0cmFEcm9wem9uZXM7CgogICAgICAgIGZvciAoaT0wOyBpIDwgZHJvcHpvbmVzLmxlbmd0aDsgaSs9MSl7CiAgICAgICAgICAgIHNldHVwRHJvcHpvbmUoZHJvcHpvbmVzW2ldKTsKICAgICAgICB9CgogICAgICAgIC8vIElFIDw9IDkgZG9lcyBub3Qgc3VwcG9ydCB0aGUgRmlsZSBBUEkgdXNlZCBmb3IgZHJhZytkcm9wIHVwbG9hZHMKICAgICAgICBpZiAob3B0aW9ucy5kcm9wQXJlYSAmJiAoIXFxLmllKCkgfHwgcXEuaWUxMCgpKSkgewogICAgICAgICAgICBkaXNwb3NlU3VwcG9ydC5hdHRhY2goZG9jdW1lbnQsICdkcmFnZW50ZXInLCBmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWR6LmRyb3BEaXNhYmxlZCgpICYmIGlzRmlsZURyYWcoZSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAocXEob3B0aW9ucy5kcm9wQXJlYSkuaGFzQ2xhc3Mob3B0aW9ucy5jbGFzc2VzLmRyb3BEaXNhYmxlZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5kcm9wQXJlYS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsKICAgICAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IGRyb3B6b25lcy5sZW5ndGg7IGkrPTEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZHJvcHpvbmVzW2ldLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGRpc3Bvc2VTdXBwb3J0LmF0dGFjaChkb2N1bWVudCwgJ2RyYWdsZWF2ZScsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBpZiAob3B0aW9ucy5oaWRlRHJvcHpvbmVzICYmIHFxLkZpbmVVcGxvYWRlci5wcm90b3R5cGUuX2xlYXZpbmdfZG9jdW1lbnRfb3V0KGUpKSB7CiAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IGRyb3B6b25lcy5sZW5ndGg7IGkrPTEpIHsKICAgICAgICAgICAgICAgICAgICBxcShkcm9wem9uZXNbaV0pLmhpZGUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRpc3Bvc2VTdXBwb3J0LmF0dGFjaChkb2N1bWVudCwgJ2Ryb3AnLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuaGlkZURyb3B6b25lcykgewogICAgICAgICAgICAgICAgZm9yIChpPTA7IGkgPCBkcm9wem9uZXMubGVuZ3RoOyBpKz0xKSB7CiAgICAgICAgICAgICAgICAgICAgcXEoZHJvcHpvbmVzW2ldKS5oaWRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBzZXR1cERyYWdEcm9wKCk7CiAgICAgICAgfSwKCiAgICAgICAgc2V0dXBFeHRyYURyb3B6b25lOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIG9wdGlvbnMuZXh0cmFEcm9wem9uZXMucHVzaChlbGVtZW50KTsKICAgICAgICAgICAgc2V0dXBEcm9wem9uZShlbGVtZW50KTsKICAgICAgICB9LAoKICAgICAgICByZW1vdmVFeHRyYURyb3B6b25lOiBmdW5jdGlvbihlbGVtZW50KSB7CiAgICAgICAgICAgIHZhciBpLCBkenMgPSBvcHRpb25zLmV4dHJhRHJvcHpvbmVzOwogICAgICAgICAgICBmb3IoaSBpbiBkenMpIHsKICAgICAgICAgICAgICAgIGlmIChkenNbaV0gPT09IGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZHpzLnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGRpc3Bvc2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBkaXNwb3NlU3VwcG9ydC5kaXNwb3NlKCk7CiAgICAgICAgICAgIGR6LmRpc3Bvc2UoKTsKICAgICAgICB9CiAgICB9Owp9OwoKCnFxLlVwbG9hZERyb3Bab25lID0gZnVuY3Rpb24obyl7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIG9wdGlvbnMsIGVsZW1lbnQsIHByZXZlbnREcm9wLCBkcm9wT3V0c2lkZURpc2FibGVkLCBkaXNwb3NlU3VwcG9ydCA9IG5ldyBxcS5EaXNwb3NlU3VwcG9ydCgpOwoKICAgIG9wdGlvbnMgPSB7CiAgICAgICAgZWxlbWVudDogbnVsbCwKICAgICAgICBvbkVudGVyOiBmdW5jdGlvbihlKXt9LAogICAgICAgIG9uTGVhdmU6IGZ1bmN0aW9uKGUpe30sCiAgICAgICAgLy8gaXMgbm90IGZpcmVkIHdoZW4gbGVhdmluZyBlbGVtZW50IGJ5IGhvdmVyaW5nIGRlc2NlbmRhbnRzCiAgICAgICAgb25MZWF2ZU5vdERlc2NlbmRhbnRzOiBmdW5jdGlvbihlKXt9LAogICAgICAgIG9uRHJvcDogZnVuY3Rpb24oZSl7fQogICAgfTsKCiAgICBxcS5leHRlbmQob3B0aW9ucywgbyk7CiAgICBlbGVtZW50ID0gb3B0aW9ucy5lbGVtZW50OwoKICAgIGZ1bmN0aW9uIGRyYWdvdmVyX3Nob3VsZF9iZV9jYW5jZWxlZCgpewogICAgICAgIHJldHVybiBxcS5zYWZhcmkoKSB8fCAocXEuZmlyZWZveCgpICYmIHFxLndpbmRvd3MoKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZGlzYWJsZURyb3BPdXRzaWRlKGUpewogICAgICAgIC8vIHJ1biBvbmx5IG9uY2UgZm9yIGFsbCBpbnN0YW5jZXMKICAgICAgICBpZiAoIWRyb3BPdXRzaWRlRGlzYWJsZWQgKXsKCiAgICAgICAgICAgIC8vIGZvciB0aGVzZSBjYXNlcyB3ZSBuZWVkIHRvIGNhdGNoIG9uRHJvcCB0byByZXNldCBkcm9wQXJlYQogICAgICAgICAgICBpZiAoZHJhZ292ZXJfc2hvdWxkX2JlX2NhbmNlbGVkKXsKICAgICAgICAgICAgICAgZGlzcG9zZVN1cHBvcnQuYXR0YWNoKGRvY3VtZW50LCAnZHJhZ292ZXInLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRpc3Bvc2VTdXBwb3J0LmF0dGFjaChkb2N1bWVudCwgJ2RyYWdvdmVyJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgICAgICAgICAgaWYgKGUuZGF0YVRyYW5zZmVyKXsKICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJzsKICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkcm9wT3V0c2lkZURpc2FibGVkID0gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaXNWYWxpZEZpbGVEcmFnKGUpewogICAgICAgIC8vIGUuZGF0YVRyYW5zZmVyIGN1cnJlbnRseSBjYXVzaW5nIElFIGVycm9ycwogICAgICAgIC8vIElFOSBkb2VzIE5PVCBzdXBwb3J0IGZpbGUgQVBJLCBzbyBkcmFnLWFuZC1kcm9wIGlzIG5vdCBwb3NzaWJsZQogICAgICAgIGlmIChxcS5pZSgpICYmICFxcS5pZTEwKCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgdmFyIGVmZmVjdFRlc3QsIGR0ID0gZS5kYXRhVHJhbnNmZXIsCiAgICAgICAgLy8gZG8gbm90IGNoZWNrIGR0LnR5cGVzLmNvbnRhaW5zIGluIHdlYmtpdCwgYmVjYXVzZSBpdCBjcmFzaGVzIHNhZmFyaSA0CiAgICAgICAgaXNTYWZhcmkgPSBxcS5zYWZhcmkoKTsKCiAgICAgICAgLy8gZHQuZWZmZWN0QWxsb3dlZCBpcyBub25lIGluIFNhZmFyaSA1CiAgICAgICAgLy8gZHQudHlwZXMuY29udGFpbnMgY2hlY2sgaXMgZm9yIGZpcmVmb3gKICAgICAgICBlZmZlY3RUZXN0ID0gcXEuaWUxMCgpID8gdHJ1ZSA6IGR0LmVmZmVjdEFsbG93ZWQgIT09ICdub25lJzsKICAgICAgICByZXR1cm4gZHQgJiYgZWZmZWN0VGVzdCAmJiAoZHQuZmlsZXMgfHwgKCFpc1NhZmFyaSAmJiBkdC50eXBlcy5jb250YWlucyAmJiBkdC50eXBlcy5jb250YWlucygnRmlsZXMnKSkpOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzT3JTZXREcm9wRGlzYWJsZWQoaXNEaXNhYmxlZCkgewogICAgICAgIGlmIChpc0Rpc2FibGVkICE9PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgcHJldmVudERyb3AgPSBpc0Rpc2FibGVkOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcHJldmVudERyb3A7CiAgICB9CgogICAgZnVuY3Rpb24gYXR0YWNoRXZlbnRzKCl7CiAgICAgICAgZGlzcG9zZVN1cHBvcnQuYXR0YWNoKGVsZW1lbnQsICdkcmFnb3ZlcicsIGZ1bmN0aW9uKGUpewogICAgICAgICAgICBpZiAoIWlzVmFsaWRGaWxlRHJhZyhlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgZWZmZWN0ID0gcXEuaWUoKSA/IG51bGwgOiBlLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkOwogICAgICAgICAgICBpZiAoZWZmZWN0ID09PSAnbW92ZScgfHwgZWZmZWN0ID09PSAnbGlua01vdmUnKXsKICAgICAgICAgICAgICAgIGUuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnbW92ZSc7IC8vIGZvciBGRiAob25seSBtb3ZlIGFsbG93ZWQpCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gJ2NvcHknOyAvLyBmb3IgQ2hyb21lCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9KTsKCiAgICAgICAgZGlzcG9zZVN1cHBvcnQuYXR0YWNoKGVsZW1lbnQsICdkcmFnZW50ZXInLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgaWYgKCFpc09yU2V0RHJvcERpc2FibGVkKCkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZpbGVEcmFnKGUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgb3B0aW9ucy5vbkVudGVyKGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGRpc3Bvc2VTdXBwb3J0LmF0dGFjaChlbGVtZW50LCAnZHJhZ2xlYXZlJywgZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGlmICghaXNWYWxpZEZpbGVEcmFnKGUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9wdGlvbnMub25MZWF2ZShlKTsKCiAgICAgICAgICAgIHZhciByZWxhdGVkVGFyZ2V0ID0gZG9jdW1lbnQuZWxlbWVudEZyb21Qb2ludChlLmNsaWVudFgsIGUuY2xpZW50WSk7CiAgICAgICAgICAgIC8vIGRvIG5vdCBmaXJlIHdoZW4gbW92aW5nIGEgbW91c2Ugb3ZlciBhIGRlc2NlbmRhbnQKICAgICAgICAgICAgaWYgKHFxKHRoaXMpLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG9wdGlvbnMub25MZWF2ZU5vdERlc2NlbmRhbnRzKGUpOwogICAgICAgIH0pOwoKICAgICAgICBkaXNwb3NlU3VwcG9ydC5hdHRhY2goZWxlbWVudCwgJ2Ryb3AnLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgaWYgKCFpc09yU2V0RHJvcERpc2FibGVkKCkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZEZpbGVEcmFnKGUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIG9wdGlvbnMub25Ecm9wKGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9CgogICAgZGlzYWJsZURyb3BPdXRzaWRlKCk7CiAgICBhdHRhY2hFdmVudHMoKTsKCiAgICByZXR1cm4gewogICAgICAgIGRyb3BEaXNhYmxlZDogZnVuY3Rpb24oaXNEaXNhYmxlZCkgewogICAgICAgICAgICByZXR1cm4gaXNPclNldERyb3BEaXNhYmxlZChpc0Rpc2FibGVkKTsKICAgICAgICB9LAoKICAgICAgICBkaXNwb3NlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlzcG9zZVN1cHBvcnQuZGlzcG9zZSgpOwogICAgICAgIH0KICAgIH07Cn07Ci8qKgogKiBDbGFzcyB0aGF0IGNyZWF0ZXMgdXBsb2FkIHdpZGdldCB3aXRoIGRyYWctYW5kLWRyb3AgYW5kIGZpbGUgbGlzdAogKiBAaW5oZXJpdHMgcXEuRmluZVVwbG9hZGVyQmFzaWMKICovCnFxLkZpbmVVcGxvYWRlciA9IGZ1bmN0aW9uKG8pewogICAgLy8gY2FsbCBwYXJlbnQgY29uc3RydWN0b3IKICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgLy8gYWRkaXRpb25hbCBvcHRpb25zCiAgICBxcS5leHRlbmQodGhpcy5fb3B0aW9ucywgewogICAgICAgIGVsZW1lbnQ6IG51bGwsCiAgICAgICAgbGlzdEVsZW1lbnQ6IG51bGwsCiAgICAgICAgZHJhZ0FuZERyb3A6IHsKICAgICAgICAgICAgZXh0cmFEcm9wem9uZXM6IFtdLAogICAgICAgICAgICBoaWRlRHJvcHpvbmVzOiB0cnVlLAogICAgICAgICAgICBkaXNhYmxlRGVmYXVsdERyb3B6b25lOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgdGV4dDogewogICAgICAgICAgICB1cGxvYWRCdXR0b246ICdVcGxvYWQgYSBmaWxlJywKICAgICAgICAgICAgY2FuY2VsQnV0dG9uOiAnQ2FuY2VsJywKICAgICAgICAgICAgcmV0cnlCdXR0b246ICdSZXRyeScsCiAgICAgICAgICAgIGRlbGV0ZUJ1dHRvbjogJ0RlbGV0ZScsCiAgICAgICAgICAgIGZhaWxVcGxvYWQ6ICdVcGxvYWQgZmFpbGVkJywKICAgICAgICAgICAgZHJhZ1pvbmU6ICdEcm9wIGZpbGVzIGhlcmUgdG8gdXBsb2FkJywKICAgICAgICAgICAgZHJvcFByb2Nlc3Npbmc6ICdQcm9jZXNzaW5nIGRyb3BwZWQgZmlsZXMuLi4nLAogICAgICAgICAgICBmb3JtYXRQcm9ncmVzczogIntwZXJjZW50fSUgb2Yge3RvdGFsX3NpemV9IiwKICAgICAgICAgICAgd2FpdGluZ0ZvclJlc3BvbnNlOiAiUHJvY2Vzc2luZy4uLiIKICAgICAgICB9LAogICAgICAgIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz0icXEtdXBsb2FkZXIiPicgKwogICAgICAgICAgICAoKCF0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wIHx8ICF0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmRpc2FibGVEZWZhdWx0RHJvcHpvbmUpID8gJzxkaXYgY2xhc3M9InFxLXVwbG9hZC1kcm9wLWFyZWEiPjxzcGFuPntkcmFnWm9uZVRleHR9PC9zcGFuPjwvZGl2PicgOiAnJykgKwogICAgICAgICAgICAoIXRoaXMuX29wdGlvbnMuYnV0dG9uID8gJzxkaXYgY2xhc3M9InFxLXVwbG9hZC1idXR0b24iPjxkaXY+e3VwbG9hZEJ1dHRvblRleHR9PC9kaXY+PC9kaXY+JyA6ICcnKSArCiAgICAgICAgICAgICc8c3BhbiBjbGFzcz0icXEtZHJvcC1wcm9jZXNzaW5nIj48c3Bhbj57ZHJvcFByb2Nlc3NpbmdUZXh0fTwvc3Bhbj48c3BhbiBjbGFzcz0icXEtZHJvcC1wcm9jZXNzaW5nLXNwaW5uZXIiPjwvc3Bhbj48L3NwYW4+JyArCiAgICAgICAgICAgICghdGhpcy5fb3B0aW9ucy5saXN0RWxlbWVudCA/ICc8dWwgY2xhc3M9InFxLXVwbG9hZC1saXN0Ij48L3VsPicgOiAnJykgKwogICAgICAgICAgICAnPC9kaXY+JywKCiAgICAgICAgLy8gdGVtcGxhdGUgZm9yIG9uZSBpdGVtIGluIGZpbGUgbGlzdAogICAgICAgIGZpbGVUZW1wbGF0ZTogJzxsaT4nICsKICAgICAgICAgICAgJzxkaXYgY2xhc3M9InFxLXByb2dyZXNzLWJhciI+PC9kaXY+JyArCiAgICAgICAgICAgICc8c3BhbiBjbGFzcz0icXEtdXBsb2FkLXNwaW5uZXIiPjwvc3Bhbj4nICsKICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJxcS11cGxvYWQtZmluaXNoZWQiPjwvc3Bhbj4nICsKICAgICAgICAgICAgJzxzcGFuIGNsYXNzPSJxcS11cGxvYWQtZmlsZSI+PC9zcGFuPicgKwogICAgICAgICAgICAnPHNwYW4gY2xhc3M9InFxLXVwbG9hZC1zaXplIj48L3NwYW4+JyArCiAgICAgICAgICAgICc8YSBjbGFzcz0icXEtdXBsb2FkLWNhbmNlbCIgaHJlZj0iIyI+e2NhbmNlbEJ1dHRvblRleHR9PC9hPicgKwogICAgICAgICAgICAnPGEgY2xhc3M9InFxLXVwbG9hZC1yZXRyeSIgaHJlZj0iIyI+e3JldHJ5QnV0dG9uVGV4dH08L2E+JyArCiAgICAgICAgICAgICc8YSBjbGFzcz0icXEtdXBsb2FkLWRlbGV0ZSIgaHJlZj0iIyI+e2RlbGV0ZUJ1dHRvblRleHR9PC9hPicgKwogICAgICAgICAgICAnPHNwYW4gY2xhc3M9InFxLXVwbG9hZC1zdGF0dXMtdGV4dCI+e3N0YXR1c1RleHR9PC9zcGFuPicgKwogICAgICAgICAgICAnPC9saT4nLAogICAgICAgIGNsYXNzZXM6IHsKICAgICAgICAgICAgYnV0dG9uOiAncXEtdXBsb2FkLWJ1dHRvbicsCiAgICAgICAgICAgIGRyb3A6ICdxcS11cGxvYWQtZHJvcC1hcmVhJywKICAgICAgICAgICAgZHJvcEFjdGl2ZTogJ3FxLXVwbG9hZC1kcm9wLWFyZWEtYWN0aXZlJywKICAgICAgICAgICAgZHJvcERpc2FibGVkOiAncXEtdXBsb2FkLWRyb3AtYXJlYS1kaXNhYmxlZCcsCiAgICAgICAgICAgIGxpc3Q6ICdxcS11cGxvYWQtbGlzdCcsCiAgICAgICAgICAgIHByb2dyZXNzQmFyOiAncXEtcHJvZ3Jlc3MtYmFyJywKICAgICAgICAgICAgZmlsZTogJ3FxLXVwbG9hZC1maWxlJywKICAgICAgICAgICAgc3Bpbm5lcjogJ3FxLXVwbG9hZC1zcGlubmVyJywKICAgICAgICAgICAgZmluaXNoZWQ6ICdxcS11cGxvYWQtZmluaXNoZWQnLAogICAgICAgICAgICByZXRyeWluZzogJ3FxLXVwbG9hZC1yZXRyeWluZycsCiAgICAgICAgICAgIHJldHJ5YWJsZTogJ3FxLXVwbG9hZC1yZXRyeWFibGUnLAogICAgICAgICAgICBzaXplOiAncXEtdXBsb2FkLXNpemUnLAogICAgICAgICAgICBjYW5jZWw6ICdxcS11cGxvYWQtY2FuY2VsJywKICAgICAgICAgICAgZGVsZXRlQnV0dG9uOiAncXEtdXBsb2FkLWRlbGV0ZScsCiAgICAgICAgICAgIHJldHJ5OiAncXEtdXBsb2FkLXJldHJ5JywKICAgICAgICAgICAgc3RhdHVzVGV4dDogJ3FxLXVwbG9hZC1zdGF0dXMtdGV4dCcsCgogICAgICAgICAgICBzdWNjZXNzOiAncXEtdXBsb2FkLXN1Y2Nlc3MnLAogICAgICAgICAgICBmYWlsOiAncXEtdXBsb2FkLWZhaWwnLAoKICAgICAgICAgICAgc3VjY2Vzc0ljb246IG51bGwsCiAgICAgICAgICAgIGZhaWxJY29uOiBudWxsLAoKICAgICAgICAgICAgZHJvcFByb2Nlc3Npbmc6ICdxcS1kcm9wLXByb2Nlc3NpbmcnLAogICAgICAgICAgICBkcm9wUHJvY2Vzc2luZ1NwaW5uZXI6ICdxcS1kcm9wLXByb2Nlc3Npbmctc3Bpbm5lcicKICAgICAgICB9LAogICAgICAgIGZhaWxlZFVwbG9hZFRleHREaXNwbGF5OiB7CiAgICAgICAgICAgIG1vZGU6ICdkZWZhdWx0JywgLy9kZWZhdWx0LCBjdXN0b20sIG9yIG5vbmUKICAgICAgICAgICAgbWF4Q2hhcnM6IDUwLAogICAgICAgICAgICByZXNwb25zZVByb3BlcnR5OiAnZXJyb3InLAogICAgICAgICAgICBlbmFibGVUb29sdGlwOiB0cnVlCiAgICAgICAgfSwKICAgICAgICBtZXNzYWdlczogewogICAgICAgICAgICB0b29NYW55RmlsZXNFcnJvcjogIllvdSBtYXkgb25seSBkcm9wIG9uZSBmaWxlIgogICAgICAgIH0sCiAgICAgICAgcmV0cnk6IHsKICAgICAgICAgICAgc2hvd0F1dG9SZXRyeU5vdGU6IHRydWUsCiAgICAgICAgICAgIGF1dG9SZXRyeU5vdGU6ICJSZXRyeWluZyB7cmV0cnlOdW19L3ttYXhBdXRvfS4uLiIsCiAgICAgICAgICAgIHNob3dCdXR0b246IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBkZWxldGVGaWxlOiB7CiAgICAgICAgICAgIGZvcmNlQ29uZmlybTogZmFsc2UsCiAgICAgICAgICAgIGNvbmZpcm1NZXNzYWdlOiAiQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB7ZmlsZW5hbWV9PyIsCiAgICAgICAgICAgIGRlbGV0aW5nU3RhdHVzVGV4dDogIkRlbGV0aW5nLi4uIiwKICAgICAgICAgICAgZGVsZXRpbmdGYWlsZWRUZXh0OiAiRGVsZXRlIGZhaWxlZCIKCiAgICAgICAgfSwKICAgICAgICBkaXNwbGF5OiB7CiAgICAgICAgICAgIGZpbGVTaXplT25TdWJtaXQ6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBwYXN0ZTogewogICAgICAgICAgICBwcm9tcHRGb3JOYW1lOiBmYWxzZSwKICAgICAgICAgICAgbmFtZVByb21wdE1lc3NhZ2U6ICJQbGVhc2UgbmFtZSB0aGlzIGltYWdlIgogICAgICAgIH0sCiAgICAgICAgc2hvd01lc3NhZ2U6IGZ1bmN0aW9uKG1lc3NhZ2UpewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KG1lc3NhZ2UpOwogICAgICAgICAgICB9LCAwKTsKICAgICAgICB9LAogICAgICAgIHNob3dDb25maXJtOiBmdW5jdGlvbihtZXNzYWdlLCBva0NhbGxiYWNrLCBjYW5jZWxDYWxsYmFjaykgewogICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHdpbmRvdy5jb25maXJtKG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgIG9rQ2FsbGJhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNhbmNlbENhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgY2FuY2VsQ2FsbGJhY2soKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgfSwKICAgICAgICBzaG93UHJvbXB0OiBmdW5jdGlvbihtZXNzYWdlLCBkZWZhdWx0VmFsdWUpIHsKICAgICAgICAgICAgdmFyIHByb21pc2UgPSBuZXcgcXEuUHJvbWlzZSgpLAogICAgICAgICAgICAgICAgcmV0VmFsID0gd2luZG93LnByb21wdChtZXNzYWdlLCBkZWZhdWx0VmFsdWUpOwoKICAgICAgICAgICAgLypqc2hpbnQgZXFlcWVxOiB0cnVlLCBlcW51bGw6IHRydWUqLwogICAgICAgICAgICBpZiAocmV0VmFsICE9IG51bGwgJiYgcXEudHJpbVN0cihyZXRWYWwpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIHByb21pc2Uuc3VjY2VzcyhyZXRWYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcHJvbWlzZS5mYWlsdXJlKCJVbmRlZmluZWQgb3IgaW52YWxpZCB1c2VyLXN1cHBsaWVkIHZhbHVlLiIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcHJvbWlzZTsKICAgICAgICB9CiAgICB9LCB0cnVlKTsKCiAgICAvLyBvdmVyd3JpdGUgb3B0aW9ucyB3aXRoIHVzZXIgc3VwcGxpZWQKICAgIHFxLmV4dGVuZCh0aGlzLl9vcHRpb25zLCBvLCB0cnVlKTsKICAgIHRoaXMuX3dyYXBDYWxsYmFja3MoKTsKCiAgICAvLyBvdmVyd3JpdGUgdGhlIHVwbG9hZCBidXR0b24gdGV4dCBpZiBhbnkKICAgIC8vIHNhbWUgZm9yIHRoZSBDYW5jZWwgYnV0dG9uIGFuZCBGYWlsIG1lc3NhZ2UgdGV4dAogICAgdGhpcy5fb3B0aW9ucy50ZW1wbGF0ZSAgICAgPSB0aGlzLl9vcHRpb25zLnRlbXBsYXRlLnJlcGxhY2UoL1x7ZHJhZ1pvbmVUZXh0XH0vZywgdGhpcy5fb3B0aW9ucy50ZXh0LmRyYWdab25lKTsKICAgIHRoaXMuX29wdGlvbnMudGVtcGxhdGUgICAgID0gdGhpcy5fb3B0aW9ucy50ZW1wbGF0ZS5yZXBsYWNlKC9ce3VwbG9hZEJ1dHRvblRleHRcfS9nLCB0aGlzLl9vcHRpb25zLnRleHQudXBsb2FkQnV0dG9uKTsKICAgIHRoaXMuX29wdGlvbnMudGVtcGxhdGUgICAgID0gdGhpcy5fb3B0aW9ucy50ZW1wbGF0ZS5yZXBsYWNlKC9ce2Ryb3BQcm9jZXNzaW5nVGV4dFx9L2csIHRoaXMuX29wdGlvbnMudGV4dC5kcm9wUHJvY2Vzc2luZyk7CiAgICB0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZSA9IHRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlLnJlcGxhY2UoL1x7Y2FuY2VsQnV0dG9uVGV4dFx9L2csIHRoaXMuX29wdGlvbnMudGV4dC5jYW5jZWxCdXR0b24pOwogICAgdGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGUgPSB0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZS5yZXBsYWNlKC9ce3JldHJ5QnV0dG9uVGV4dFx9L2csIHRoaXMuX29wdGlvbnMudGV4dC5yZXRyeUJ1dHRvbik7CiAgICB0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZSA9IHRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlLnJlcGxhY2UoL1x7ZGVsZXRlQnV0dG9uVGV4dFx9L2csIHRoaXMuX29wdGlvbnMudGV4dC5kZWxldGVCdXR0b24pOwogICAgdGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGUgPSB0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZS5yZXBsYWNlKC9ce3N0YXR1c1RleHRcfS9nLCAiIik7CgogICAgdGhpcy5fZWxlbWVudCA9IHRoaXMuX29wdGlvbnMuZWxlbWVudDsKICAgIHRoaXMuX2VsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fb3B0aW9ucy50ZW1wbGF0ZTsKICAgIHRoaXMuX2xpc3RFbGVtZW50ID0gdGhpcy5fb3B0aW9ucy5saXN0RWxlbWVudCB8fCB0aGlzLl9maW5kKHRoaXMuX2VsZW1lbnQsICdsaXN0Jyk7CgogICAgdGhpcy5fY2xhc3NlcyA9IHRoaXMuX29wdGlvbnMuY2xhc3NlczsKCiAgICBpZiAoIXRoaXMuX2J1dHRvbikgewogICAgICAgIHRoaXMuX2J1dHRvbiA9IHRoaXMuX2NyZWF0ZVVwbG9hZEJ1dHRvbih0aGlzLl9maW5kKHRoaXMuX2VsZW1lbnQsICdidXR0b24nKSk7CiAgICB9CgogICAgdGhpcy5fYmluZENhbmNlbEFuZFJldHJ5RXZlbnRzKCk7CgogICAgdGhpcy5fZG5kID0gdGhpcy5fc2V0dXBEcmFnQW5kRHJvcCgpOwoKICAgIGlmICh0aGlzLl9vcHRpb25zLnBhc3RlLnRhcmdldEVsZW1lbnQgJiYgdGhpcy5fb3B0aW9ucy5wYXN0ZS5wcm9tcHRGb3JOYW1lKSB7CiAgICAgICAgdGhpcy5fc2V0dXBQYXN0ZVByb21wdCgpOwogICAgfQp9OwoKLy8gaW5oZXJpdCBmcm9tIEJhc2ljIFVwbG9hZGVyCnFxLmV4dGVuZChxcS5GaW5lVXBsb2FkZXIucHJvdG90eXBlLCBxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUpOwoKcXEuZXh0ZW5kKHFxLkZpbmVVcGxvYWRlci5wcm90b3R5cGUsIHsKICAgIGNsZWFyU3RvcmVkRmlsZXM6IGZ1bmN0aW9uKCkgewogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5jbGVhclN0b3JlZEZpbGVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgdGhpcy5fbGlzdEVsZW1lbnQuaW5uZXJIVE1MID0gIiI7CiAgICB9LAogICAgYWRkRXh0cmFEcm9wem9uZTogZnVuY3Rpb24oZWxlbWVudCl7CiAgICAgICAgdGhpcy5fZG5kLnNldHVwRXh0cmFEcm9wem9uZShlbGVtZW50KTsKICAgIH0sCiAgICByZW1vdmVFeHRyYURyb3B6b25lOiBmdW5jdGlvbihlbGVtZW50KXsKICAgICAgICByZXR1cm4gdGhpcy5fZG5kLnJlbW92ZUV4dHJhRHJvcHpvbmUoZWxlbWVudCk7CiAgICB9LAogICAgZ2V0SXRlbUJ5RmlsZUlkOiBmdW5jdGlvbihpZCl7CiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLl9saXN0RWxlbWVudC5maXJzdENoaWxkOwoKICAgICAgICAvLyB0aGVyZSBjYW4ndCBiZSB0eHQgbm9kZXMgaW4gZHluYW1pY2FsbHkgY3JlYXRlZCBsaXN0CiAgICAgICAgLy8gYW5kIHdlIGNhbiAgdXNlIG5leHRTaWJsaW5nCiAgICAgICAgd2hpbGUgKGl0ZW0pewogICAgICAgICAgICBpZiAoaXRlbS5xcUZpbGVJZCA9PSBpZCkgcmV0dXJuIGl0ZW07CiAgICAgICAgICAgIGl0ZW0gPSBpdGVtLm5leHRTaWJsaW5nOwogICAgICAgIH0KICAgIH0sCiAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLnJlc2V0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgdGhpcy5fZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9vcHRpb25zLnRlbXBsYXRlOwogICAgICAgIHRoaXMuX2xpc3RFbGVtZW50ID0gdGhpcy5fb3B0aW9ucy5saXN0RWxlbWVudCB8fCB0aGlzLl9maW5kKHRoaXMuX2VsZW1lbnQsICdsaXN0Jyk7CiAgICAgICAgaWYgKCF0aGlzLl9vcHRpb25zLmJ1dHRvbikgewogICAgICAgICAgICB0aGlzLl9idXR0b24gPSB0aGlzLl9jcmVhdGVVcGxvYWRCdXR0b24odGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LCAnYnV0dG9uJykpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9iaW5kQ2FuY2VsQW5kUmV0cnlFdmVudHMoKTsKICAgICAgICB0aGlzLl9kbmQuZGlzcG9zZSgpOwogICAgICAgIHRoaXMuX2RuZCA9IHRoaXMuX3NldHVwRHJhZ0FuZERyb3AoKTsKICAgIH0sCiAgICBfcmVtb3ZlRmlsZUl0ZW06IGZ1bmN0aW9uKGZpbGVJZCkgewogICAgICAgIHZhciBpdGVtID0gdGhpcy5nZXRJdGVtQnlGaWxlSWQoZmlsZUlkKTsKICAgICAgICBxcShpdGVtKS5yZW1vdmUoKTsKICAgIH0sCiAgICBfc2V0dXBEcmFnQW5kRHJvcDogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgICBkcm9wUHJvY2Vzc2luZ0VsID0gdGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LCAnZHJvcFByb2Nlc3NpbmcnKSwKICAgICAgICAgICAgZG5kLCBwcmV2ZW50U2VsZWN0RmlsZXMsIGRlZmF1bHREcm9wQXJlYUVsOwoKICAgICAgICBwcmV2ZW50U2VsZWN0RmlsZXMgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIH07CgogICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5kcmFnQW5kRHJvcC5kaXNhYmxlRGVmYXVsdERyb3B6b25lKSB7CiAgICAgICAgICAgIGRlZmF1bHREcm9wQXJlYUVsID0gdGhpcy5fZmluZCh0aGlzLl9vcHRpb25zLmVsZW1lbnQsICdkcm9wJyk7CiAgICAgICAgfQoKICAgICAgICBkbmQgPSBuZXcgcXEuRHJhZ0FuZERyb3AoewogICAgICAgICAgICBkcm9wQXJlYTogZGVmYXVsdERyb3BBcmVhRWwsCiAgICAgICAgICAgIGV4dHJhRHJvcHpvbmVzOiB0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmV4dHJhRHJvcHpvbmVzLAogICAgICAgICAgICBoaWRlRHJvcHpvbmVzOiB0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmhpZGVEcm9wem9uZXMsCiAgICAgICAgICAgIG11bHRpcGxlOiB0aGlzLl9vcHRpb25zLm11bHRpcGxlLAogICAgICAgICAgICBjbGFzc2VzOiB7CiAgICAgICAgICAgICAgICBkcm9wQWN0aXZlOiB0aGlzLl9vcHRpb25zLmNsYXNzZXMuZHJvcEFjdGl2ZQogICAgICAgICAgICB9LAogICAgICAgICAgICBjYWxsYmFja3M6IHsKICAgICAgICAgICAgICAgIGRyb3BQcm9jZXNzaW5nOiBmdW5jdGlvbihpc1Byb2Nlc3NpbmcsIGZpbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0ID0gc2VsZi5fYnV0dG9uLmdldElucHV0KCk7CgogICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcXEoZHJvcFByb2Nlc3NpbmdFbCkuY3NzKHtkaXNwbGF5OiAnYmxvY2snfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHFxKGlucHV0KS5hdHRhY2goJ2NsaWNrJywgcHJldmVudFNlbGVjdEZpbGVzKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHFxKGRyb3BQcm9jZXNzaW5nRWwpLmhpZGUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgcXEoaW5wdXQpLmRldGFjaCgnY2xpY2snLCBwcmV2ZW50U2VsZWN0RmlsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkRmlsZXMoZmlsZXMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oY29kZSwgZmlsZW5hbWUpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLl9pdGVtRXJyb3IoY29kZSwgZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGxvZzogZnVuY3Rpb24obWVzc2FnZSwgbGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZyhtZXNzYWdlLCBsZXZlbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgZG5kLnNldHVwKCk7CgogICAgICAgIHJldHVybiBkbmQ7CiAgICB9LAogICAgX2xlYXZpbmdfZG9jdW1lbnRfb3V0OiBmdW5jdGlvbihlKXsKICAgICAgICByZXR1cm4gKChxcS5jaHJvbWUoKSB8fCAocXEuc2FmYXJpKCkgJiYgcXEud2luZG93cygpKSkgJiYgZS5jbGllbnRYID09IDAgJiYgZS5jbGllbnRZID09IDApIC8vIG51bGwgY29vcmRzIGZvciBDaHJvbWUgYW5kIFNhZmFyaSBXaW5kb3dzCiAgICAgICAgICAgIHx8IChxcS5maXJlZm94KCkgJiYgIWUucmVsYXRlZFRhcmdldCk7IC8vIG51bGwgZS5yZWxhdGVkVGFyZ2V0IGZvciBGaXJlZm94CiAgICB9LAogICAgX3N0b3JlRm9yTGF0ZXI6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9zdG9yZUZvckxhdGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeUZpbGVJZChpZCk7CiAgICAgICAgcXEodGhpcy5fZmluZChpdGVtLCAnc3Bpbm5lcicpKS5oaWRlKCk7CiAgICB9LAogICAgLyoqCiAgICAgKiBHZXRzIG9uZSBvZiB0aGUgZWxlbWVudHMgbGlzdGVkIGluIHRoaXMuX29wdGlvbnMuY2xhc3NlcwogICAgICoqLwogICAgX2ZpbmQ6IGZ1bmN0aW9uKHBhcmVudCwgdHlwZSl7CiAgICAgICAgdmFyIGVsZW1lbnQgPSBxcShwYXJlbnQpLmdldEJ5Q2xhc3ModGhpcy5fb3B0aW9ucy5jbGFzc2VzW3R5cGVdKVswXTsKICAgICAgICBpZiAoIWVsZW1lbnQpewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2VsZW1lbnQgbm90IGZvdW5kICcgKyB0eXBlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBlbGVtZW50OwogICAgfSwKICAgIF9vblN1Ym1pdDogZnVuY3Rpb24oaWQsIG5hbWUpewogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25TdWJtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB0aGlzLl9hZGRUb0xpc3QoaWQsIG5hbWUpOwogICAgfSwKICAgIC8vIFVwZGF0ZSB0aGUgcHJvZ3Jlc3MgYmFyICYgcGVyY2VudGFnZSBhcyB0aGUgZmlsZSBpcyB1cGxvYWRlZAogICAgX29uUHJvZ3Jlc3M6IGZ1bmN0aW9uKGlkLCBuYW1lLCBsb2FkZWQsIHRvdGFsKXsKICAgICAgICBxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uUHJvZ3Jlc3MuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgICAgdmFyIGl0ZW0sIHByb2dyZXNzQmFyLCBwZXJjZW50LCBjYW5jZWxMaW5rOwoKICAgICAgICBpdGVtID0gdGhpcy5nZXRJdGVtQnlGaWxlSWQoaWQpOwogICAgICAgIHByb2dyZXNzQmFyID0gdGhpcy5fZmluZChpdGVtLCAncHJvZ3Jlc3NCYXInKTsKICAgICAgICBwZXJjZW50ID0gTWF0aC5yb3VuZChsb2FkZWQgLyB0b3RhbCAqIDEwMCk7CgogICAgICAgIGlmIChsb2FkZWQgPT09IHRvdGFsKSB7CiAgICAgICAgICAgIGNhbmNlbExpbmsgPSB0aGlzLl9maW5kKGl0ZW0sICdjYW5jZWwnKTsKICAgICAgICAgICAgcXEoY2FuY2VsTGluaykuaGlkZSgpOwoKICAgICAgICAgICAgcXEocHJvZ3Jlc3NCYXIpLmhpZGUoKTsKICAgICAgICAgICAgcXEodGhpcy5fZmluZChpdGVtLCAnc3RhdHVzVGV4dCcpKS5zZXRUZXh0KHRoaXMuX29wdGlvbnMudGV4dC53YWl0aW5nRm9yUmVzcG9uc2UpOwoKICAgICAgICAgICAgLy8gSWYgbGFzdCBieXRlIHdhcyBzZW50LCBkaXNwbGF5IHRvdGFsIGZpbGUgc2l6ZQogICAgICAgICAgICB0aGlzLl9kaXNwbGF5RmlsZVNpemUoaWQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gSWYgc3RpbGwgdXBsb2FkaW5nLCBkaXNwbGF5IHBlcmNlbnRhZ2UgLSB0b3RhbCBzaXplIGlzIGFjdHVhbGx5IHRoZSB0b3RhbCByZXF1ZXN0KHMpIHNpemUKICAgICAgICAgICAgdGhpcy5fZGlzcGxheUZpbGVTaXplKGlkLCBsb2FkZWQsIHRvdGFsKTsKCiAgICAgICAgICAgIHFxKHByb2dyZXNzQmFyKS5jc3Moe2Rpc3BsYXk6ICdibG9jayd9KTsKICAgICAgICB9CgogICAgICAgIC8vIFVwZGF0ZSBwcm9ncmVzcyBiYXIgZWxlbWVudAogICAgICAgIHFxKHByb2dyZXNzQmFyKS5jc3Moe3dpZHRoOiBwZXJjZW50ICsgJyUnfSk7CiAgICB9LAogICAgX29uQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCBuYW1lLCByZXN1bHQsIHhocil7CiAgICAgICAgcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9vbkNvbXBsZXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICAgIHZhciBpdGVtID0gdGhpcy5nZXRJdGVtQnlGaWxlSWQoaWQpOwoKICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdzdGF0dXNUZXh0JykpLmNsZWFyVGV4dCgpOwoKICAgICAgICBxcShpdGVtKS5yZW1vdmVDbGFzcyh0aGlzLl9jbGFzc2VzLnJldHJ5aW5nKTsKICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdwcm9ncmVzc0JhcicpKS5oaWRlKCk7CgogICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5kaXNhYmxlQ2FuY2VsRm9yRm9ybVVwbG9hZHMgfHwgcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdjYW5jZWwnKSkuaGlkZSgpOwogICAgICAgIH0KICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdzcGlubmVyJykpLmhpZGUoKTsKCiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7CiAgICAgICAgICAgIGlmICh0aGlzLl9pc0RlbGV0ZVBvc3NpYmxlKCkpIHsKICAgICAgICAgICAgICAgIHRoaXMuX3Nob3dEZWxldGVMaW5rKGlkKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcXEoaXRlbSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzKTsKICAgICAgICAgICAgaWYgKHRoaXMuX2NsYXNzZXMuc3VjY2Vzc0ljb24pIHsKICAgICAgICAgICAgICAgIHRoaXMuX2ZpbmQoaXRlbSwgJ2ZpbmlzaGVkJykuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwogICAgICAgICAgICAgICAgcXEoaXRlbSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzSWNvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBxcShpdGVtKS5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzLmZhaWwpOwogICAgICAgICAgICBpZiAodGhpcy5fY2xhc3Nlcy5mYWlsSWNvbikgewogICAgICAgICAgICAgICAgdGhpcy5fZmluZChpdGVtLCAnZmluaXNoZWQnKS5zdHlsZS5kaXNwbGF5ID0gImlubGluZS1ibG9jayI7CiAgICAgICAgICAgICAgICBxcShpdGVtKS5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzLmZhaWxJY29uKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5yZXRyeS5zaG93QnV0dG9uICYmICF0aGlzLl9wcmV2ZW50UmV0cmllc1tpZF0pIHsKICAgICAgICAgICAgICAgIHFxKGl0ZW0pLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMucmV0cnlhYmxlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLl9jb250cm9sRmFpbHVyZVRleHREaXNwbGF5KGl0ZW0sIHJlc3VsdCk7CiAgICAgICAgfQogICAgfSwKICAgIF9vblVwbG9hZDogZnVuY3Rpb24oaWQsIG5hbWUpewogICAgICAgIHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25VcGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgICAgdGhpcy5fc2hvd1NwaW5uZXIoaWQpOwogICAgfSwKICAgIF9vbkNhbmNlbDogZnVuY3Rpb24oaWQsIG5hbWUpIHsKICAgICAgICBxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uQ2FuY2VsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgdGhpcy5fcmVtb3ZlRmlsZUl0ZW0oaWQpOwogICAgfSwKICAgIF9vbkJlZm9yZUF1dG9SZXRyeTogZnVuY3Rpb24oaWQpIHsKICAgICAgICB2YXIgaXRlbSwgcHJvZ3Jlc3NCYXIsIGZhaWxUZXh0RWwsIHJldHJ5TnVtRm9yRGlzcGxheSwgbWF4QXV0bywgcmV0cnlOb3RlOwoKICAgICAgICBxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uQmVmb3JlQXV0b1JldHJ5LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CgogICAgICAgIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeUZpbGVJZChpZCk7CiAgICAgICAgcHJvZ3Jlc3NCYXIgPSB0aGlzLl9maW5kKGl0ZW0sICdwcm9ncmVzc0JhcicpOwoKICAgICAgICB0aGlzLl9zaG93Q2FuY2VsTGluayhpdGVtKTsKICAgICAgICBwcm9ncmVzc0Jhci5zdHlsZS53aWR0aCA9IDA7CiAgICAgICAgcXEocHJvZ3Jlc3NCYXIpLmhpZGUoKTsKCiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMucmV0cnkuc2hvd0F1dG9SZXRyeU5vdGUpIHsKICAgICAgICAgICAgZmFpbFRleHRFbCA9IHRoaXMuX2ZpbmQoaXRlbSwgJ3N0YXR1c1RleHQnKTsKICAgICAgICAgICAgcmV0cnlOdW1Gb3JEaXNwbGF5ID0gdGhpcy5fYXV0b1JldHJpZXNbaWRdICsgMTsKICAgICAgICAgICAgbWF4QXV0byA9IHRoaXMuX29wdGlvbnMucmV0cnkubWF4QXV0b0F0dGVtcHRzOwoKICAgICAgICAgICAgcmV0cnlOb3RlID0gdGhpcy5fb3B0aW9ucy5yZXRyeS5hdXRvUmV0cnlOb3RlLnJlcGxhY2UoL1x7cmV0cnlOdW1cfS9nLCByZXRyeU51bUZvckRpc3BsYXkpOwogICAgICAgICAgICByZXRyeU5vdGUgPSByZXRyeU5vdGUucmVwbGFjZSgvXHttYXhBdXRvXH0vZywgbWF4QXV0byk7CgogICAgICAgICAgICBxcShmYWlsVGV4dEVsKS5zZXRUZXh0KHJldHJ5Tm90ZSk7CiAgICAgICAgICAgIGlmIChyZXRyeU51bUZvckRpc3BsYXkgPT09IDEpIHsKICAgICAgICAgICAgICAgIHFxKGl0ZW0pLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMucmV0cnlpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSwKICAgIC8vcmV0dXJuIGZhbHNlIGlmIHdlIHNob3VsZCBub3QgYXR0ZW1wdCB0aGUgcmVxdWVzdGVkIHJldHJ5CiAgICBfb25CZWZvcmVNYW51YWxSZXRyeTogZnVuY3Rpb24oaWQpIHsKICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGlkKTsKCiAgICAgICAgaWYgKHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25CZWZvcmVNYW51YWxSZXRyeS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7CiAgICAgICAgICAgIHRoaXMuX2ZpbmQoaXRlbSwgJ3Byb2dyZXNzQmFyJykuc3R5bGUud2lkdGggPSAwOwogICAgICAgICAgICBxcShpdGVtKS5yZW1vdmVDbGFzcyh0aGlzLl9jbGFzc2VzLmZhaWwpOwogICAgICAgICAgICBxcSh0aGlzLl9maW5kKGl0ZW0sICdzdGF0dXNUZXh0JykpLmNsZWFyVGV4dCgpOwogICAgICAgICAgICB0aGlzLl9zaG93U3Bpbm5lcihpZCk7CiAgICAgICAgICAgIHRoaXMuX3Nob3dDYW5jZWxMaW5rKGl0ZW0pOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHFxKGl0ZW0pLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMucmV0cnlhYmxlKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0sCiAgICBfb25TdWJtaXREZWxldGU6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgaWYgKHRoaXMuX2lzRGVsZXRlUG9zc2libGUoKSkgewogICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25TdWJtaXREZWxldGUoaWQpICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuZGVsZXRlRmlsZS5mb3JjZUNvbmZpcm0pIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93RGVsZXRlQ29uZmlybShpZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZW5kRGVsZXRlUmVxdWVzdChpZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHRoaXMubG9nKCJEZWxldGUgcmVxdWVzdCBpZ25vcmVkIGZvciBmaWxlIElEICIgKyBpZCArICIsIGRlbGV0ZSBmZWF0dXJlIGlzIGRpc2FibGVkLiIsICJ3YXJuIik7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9LAogICAgX29uRGVsZXRlQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCB4aHIsIGlzRXJyb3IpIHsKICAgICAgICBxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uRGVsZXRlQ29tcGxldGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeUZpbGVJZChpZCksCiAgICAgICAgICAgIHNwaW5uZXJFbCA9IHRoaXMuX2ZpbmQoaXRlbSwgJ3NwaW5uZXInKSwKICAgICAgICAgICAgc3RhdHVzVGV4dEVsID0gdGhpcy5fZmluZChpdGVtLCAnc3RhdHVzVGV4dCcpOwoKICAgICAgICBxcShzcGlubmVyRWwpLmhpZGUoKTsKCiAgICAgICAgaWYgKGlzRXJyb3IpIHsKICAgICAgICAgICAgcXEoc3RhdHVzVGV4dEVsKS5zZXRUZXh0KHRoaXMuX29wdGlvbnMuZGVsZXRlRmlsZS5kZWxldGluZ0ZhaWxlZFRleHQpOwogICAgICAgICAgICB0aGlzLl9zaG93RGVsZXRlTGluayhpZCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICB0aGlzLl9yZW1vdmVGaWxlSXRlbShpZCk7CiAgICAgICAgfQogICAgfSwKICAgIF9zZW5kRGVsZXRlUmVxdWVzdDogZnVuY3Rpb24oaWQpIHsKICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGlkKSwKICAgICAgICAgICAgZGVsZXRlTGluayA9IHRoaXMuX2ZpbmQoaXRlbSwgJ2RlbGV0ZUJ1dHRvbicpLAogICAgICAgICAgICBzdGF0dXNUZXh0RWwgPSB0aGlzLl9maW5kKGl0ZW0sICdzdGF0dXNUZXh0Jyk7CgogICAgICAgIHFxKGRlbGV0ZUxpbmspLmhpZGUoKTsKICAgICAgICB0aGlzLl9zaG93U3Bpbm5lcihpZCk7CiAgICAgICAgcXEoc3RhdHVzVGV4dEVsKS5zZXRUZXh0KHRoaXMuX29wdGlvbnMuZGVsZXRlRmlsZS5kZWxldGluZ1N0YXR1c1RleHQpOwogICAgICAgIHRoaXMuX2RlbGV0ZUhhbmRsZXIuc2VuZERlbGV0ZShpZCwgdGhpcy5nZXRVdWlkKGlkKSk7CiAgICB9LAogICAgX3Nob3dEZWxldGVDb25maXJtOiBmdW5jdGlvbihpZCkgewogICAgICAgIHZhciBmaWxlTmFtZSA9IHRoaXMuX2hhbmRsZXIuZ2V0TmFtZShpZCksCiAgICAgICAgICAgIGNvbmZpcm1NZXNzYWdlID0gdGhpcy5fb3B0aW9ucy5kZWxldGVGaWxlLmNvbmZpcm1NZXNzYWdlLnJlcGxhY2UoL1x7ZmlsZW5hbWVcfS9nLCBmaWxlTmFtZSksCiAgICAgICAgICAgIHV1aWQgPSB0aGlzLmdldFV1aWQoaWQpLAogICAgICAgICAgICBzZWxmID0gdGhpczsKCiAgICAgICAgdGhpcy5fb3B0aW9ucy5zaG93Q29uZmlybShjb25maXJtTWVzc2FnZSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHNlbGYuX3NlbmREZWxldGVSZXF1ZXN0KGlkKTsKICAgICAgICB9KTsKICAgIH0sCiAgICBfYWRkVG9MaXN0OiBmdW5jdGlvbihpZCwgbmFtZSl7CiAgICAgICAgdmFyIGl0ZW0gPSBxcS50b0VsZW1lbnQodGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGUpOwogICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRpc2FibGVDYW5jZWxGb3JGb3JtVXBsb2FkcyAmJiAhcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICB2YXIgY2FuY2VsTGluayA9IHRoaXMuX2ZpbmQoaXRlbSwgJ2NhbmNlbCcpOwogICAgICAgICAgICBxcShjYW5jZWxMaW5rKS5yZW1vdmUoKTsKICAgICAgICB9CgogICAgICAgIGl0ZW0ucXFGaWxlSWQgPSBpZDsKCiAgICAgICAgdmFyIGZpbGVFbGVtZW50ID0gdGhpcy5fZmluZChpdGVtLCAnZmlsZScpOwogICAgICAgIHFxKGZpbGVFbGVtZW50KS5zZXRUZXh0KHRoaXMuX29wdGlvbnMuZm9ybWF0RmlsZU5hbWUobmFtZSkpOwogICAgICAgIHFxKHRoaXMuX2ZpbmQoaXRlbSwgJ3NpemUnKSkuaGlkZSgpOwogICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5tdWx0aXBsZSkgewogICAgICAgICAgICB0aGlzLl9oYW5kbGVyLmNhbmNlbEFsbCgpOwogICAgICAgICAgICB0aGlzLl9jbGVhckxpc3QoKTsKICAgICAgICB9CgogICAgICAgIHRoaXMuX2xpc3RFbGVtZW50LmFwcGVuZENoaWxkKGl0ZW0pOwoKICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5kaXNwbGF5LmZpbGVTaXplT25TdWJtaXQgJiYgcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICB0aGlzLl9kaXNwbGF5RmlsZVNpemUoaWQpOwogICAgICAgIH0KICAgIH0sCiAgICBfY2xlYXJMaXN0OiBmdW5jdGlvbigpewogICAgICAgIHRoaXMuX2xpc3RFbGVtZW50LmlubmVySFRNTCA9ICcnOwogICAgICAgIHRoaXMuY2xlYXJTdG9yZWRGaWxlcygpOwogICAgfSwKICAgIF9kaXNwbGF5RmlsZVNpemU6IGZ1bmN0aW9uKGlkLCBsb2FkZWRTaXplLCB0b3RhbFNpemUpIHsKICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGlkKSwKICAgICAgICAgICAgc2l6ZSA9IHRoaXMuZ2V0U2l6ZShpZCksCiAgICAgICAgICAgIHNpemVGb3JEaXNwbGF5ID0gdGhpcy5fZm9ybWF0U2l6ZShzaXplKSwKICAgICAgICAgICAgc2l6ZUVsID0gdGhpcy5fZmluZChpdGVtLCAnc2l6ZScpOwoKICAgICAgICBpZiAobG9hZGVkU2l6ZSAhPT0gdW5kZWZpbmVkICYmIHRvdGFsU2l6ZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIHNpemVGb3JEaXNwbGF5ID0gdGhpcy5fZm9ybWF0UHJvZ3Jlc3MobG9hZGVkU2l6ZSwgdG90YWxTaXplKTsKICAgICAgICB9CgogICAgICAgIHFxKHNpemVFbCkuY3NzKHtkaXNwbGF5OiAnaW5saW5lJ30pOwogICAgICAgIHFxKHNpemVFbCkuc2V0VGV4dChzaXplRm9yRGlzcGxheSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBkZWxlZ2F0ZSBjbGljayBldmVudCBmb3IgY2FuY2VsICYgcmV0cnkgbGlua3MKICAgICAqKi8KICAgIF9iaW5kQ2FuY2VsQW5kUmV0cnlFdmVudHM6IGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgICBsaXN0ID0gdGhpcy5fbGlzdEVsZW1lbnQ7CgogICAgICAgIHRoaXMuX2Rpc3Bvc2VTdXBwb3J0LmF0dGFjaChsaXN0LCAnY2xpY2snLCBmdW5jdGlvbihlKXsKICAgICAgICAgICAgZSA9IGUgfHwgd2luZG93LmV2ZW50OwogICAgICAgICAgICB2YXIgdGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50OwoKICAgICAgICAgICAgaWYgKHFxKHRhcmdldCkuaGFzQ2xhc3Moc2VsZi5fY2xhc3Nlcy5jYW5jZWwpIHx8IHFxKHRhcmdldCkuaGFzQ2xhc3Moc2VsZi5fY2xhc3Nlcy5yZXRyeSkgfHwgcXEodGFyZ2V0KS5oYXNDbGFzcyhzZWxmLl9jbGFzc2VzLmRlbGV0ZUJ1dHRvbikpewogICAgICAgICAgICAgICAgcXEucHJldmVudERlZmF1bHQoZSk7CgogICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSB0YXJnZXQucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIHdoaWxlKGl0ZW0ucXFGaWxlSWQgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgIGl0ZW0gPSB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAocXEodGFyZ2V0KS5oYXNDbGFzcyhzZWxmLl9jbGFzc2VzLmRlbGV0ZUJ1dHRvbikpIHsKICAgICAgICAgICAgICAgICAgICBzZWxmLmRlbGV0ZUZpbGUoaXRlbS5xcUZpbGVJZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIGlmIChxcSh0YXJnZXQpLmhhc0NsYXNzKHNlbGYuX2NsYXNzZXMuY2FuY2VsKSkgewogICAgICAgICAgICAgICAgICAgIHNlbGYuY2FuY2VsKGl0ZW0ucXFGaWxlSWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcXEoaXRlbSkucmVtb3ZlQ2xhc3Moc2VsZi5fY2xhc3Nlcy5yZXRyeWFibGUpOwogICAgICAgICAgICAgICAgICAgIHNlbGYucmV0cnkoaXRlbS5xcUZpbGVJZCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0sCiAgICBfZm9ybWF0UHJvZ3Jlc3M6IGZ1bmN0aW9uICh1cGxvYWRlZFNpemUsIHRvdGFsU2l6ZSkgewogICAgICAgIHZhciBtZXNzYWdlID0gdGhpcy5fb3B0aW9ucy50ZXh0LmZvcm1hdFByb2dyZXNzOwogICAgICAgIGZ1bmN0aW9uIHIobmFtZSwgcmVwbGFjZW1lbnQpIHsgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZShuYW1lLCByZXBsYWNlbWVudCk7IH0KCiAgICAgICAgcigne3BlcmNlbnR9JywgTWF0aC5yb3VuZCh1cGxvYWRlZFNpemUgLyB0b3RhbFNpemUgKiAxMDApKTsKICAgICAgICByKCd7dG90YWxfc2l6ZX0nLCB0aGlzLl9mb3JtYXRTaXplKHRvdGFsU2l6ZSkpOwogICAgICAgIHJldHVybiBtZXNzYWdlOwogICAgfSwKICAgIF9jb250cm9sRmFpbHVyZVRleHREaXNwbGF5OiBmdW5jdGlvbihpdGVtLCByZXNwb25zZSkgewogICAgICAgIHZhciBtb2RlLCBtYXhDaGFycywgcmVzcG9uc2VQcm9wZXJ0eSwgZmFpbHVyZVJlYXNvbiwgc2hvcnRGYWlsdXJlUmVhc29uOwoKICAgICAgICBtb2RlID0gdGhpcy5fb3B0aW9ucy5mYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5tb2RlOwogICAgICAgIG1heENoYXJzID0gdGhpcy5fb3B0aW9ucy5mYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5tYXhDaGFyczsKICAgICAgICByZXNwb25zZVByb3BlcnR5ID0gdGhpcy5fb3B0aW9ucy5mYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5yZXNwb25zZVByb3BlcnR5OwoKICAgICAgICBpZiAobW9kZSA9PT0gJ2N1c3RvbScpIHsKICAgICAgICAgICAgZmFpbHVyZVJlYXNvbiA9IHJlc3BvbnNlW3Jlc3BvbnNlUHJvcGVydHldOwogICAgICAgICAgICBpZiAoZmFpbHVyZVJlYXNvbikgewogICAgICAgICAgICAgICAgaWYgKGZhaWx1cmVSZWFzb24ubGVuZ3RoID4gbWF4Q2hhcnMpIHsKICAgICAgICAgICAgICAgICAgICBzaG9ydEZhaWx1cmVSZWFzb24gPSBmYWlsdXJlUmVhc29uLnN1YnN0cmluZygwLCBtYXhDaGFycykgKyAnLi4uJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGZhaWx1cmVSZWFzb24gPSB0aGlzLl9vcHRpb25zLnRleHQuZmFpbFVwbG9hZDsKICAgICAgICAgICAgICAgIHRoaXMubG9nKCInIiArIHJlc3BvbnNlUHJvcGVydHkgKyAiJyBpcyBub3QgYSB2YWxpZCBwcm9wZXJ0eSBvbiB0aGUgc2VydmVyIHJlc3BvbnNlLiIsICd3YXJuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHFxKHRoaXMuX2ZpbmQoaXRlbSwgJ3N0YXR1c1RleHQnKSkuc2V0VGV4dChzaG9ydEZhaWx1cmVSZWFzb24gfHwgZmFpbHVyZVJlYXNvbik7CgogICAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5mYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5lbmFibGVUb29sdGlwKSB7CiAgICAgICAgICAgICAgICB0aGlzLl9zaG93VG9vbHRpcChpdGVtLCBmYWlsdXJlUmVhc29uKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChtb2RlID09PSAnZGVmYXVsdCcpIHsKICAgICAgICAgICAgcXEodGhpcy5fZmluZChpdGVtLCAnc3RhdHVzVGV4dCcpKS5zZXRUZXh0KHRoaXMuX29wdGlvbnMudGV4dC5mYWlsVXBsb2FkKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAobW9kZSAhPT0gJ25vbmUnKSB7CiAgICAgICAgICAgIHRoaXMubG9nKCJmYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5tb2RlIHZhbHVlIG9mICciICsgbW9kZSArICInIGlzIG5vdCB2YWxpZCIsICd3YXJuJyk7CiAgICAgICAgfQogICAgfSwKICAgIF9zaG93VG9vbHRpcDogZnVuY3Rpb24oaXRlbSwgdGV4dCkgewogICAgICAgIGl0ZW0udGl0bGUgPSB0ZXh0OwogICAgfSwKICAgIF9zaG93U3Bpbm5lcjogZnVuY3Rpb24oaWQpIHsKICAgICAgICB2YXIgaXRlbSA9IHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGlkKSwKICAgICAgICAgICAgc3Bpbm5lckVsID0gdGhpcy5fZmluZChpdGVtLCAnc3Bpbm5lcicpOwoKICAgICAgICBzcGlubmVyRWwuc3R5bGUuZGlzcGxheSA9ICJpbmxpbmUtYmxvY2siOwogICAgfSwKICAgIF9zaG93Q2FuY2VsTGluazogZnVuY3Rpb24oaXRlbSkgewogICAgICAgIGlmICghdGhpcy5fb3B0aW9ucy5kaXNhYmxlQ2FuY2VsRm9yRm9ybVVwbG9hZHMgfHwgcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSkgewogICAgICAgICAgICB2YXIgY2FuY2VsTGluayA9IHRoaXMuX2ZpbmQoaXRlbSwgJ2NhbmNlbCcpOwoKICAgICAgICAgICAgcXEoY2FuY2VsTGluaykuY3NzKHtkaXNwbGF5OiAnaW5saW5lJ30pOwogICAgICAgIH0KICAgIH0sCiAgICBfc2hvd0RlbGV0ZUxpbms6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgdmFyIGl0ZW0gPSB0aGlzLmdldEl0ZW1CeUZpbGVJZChpZCksCiAgICAgICAgICAgIGRlbGV0ZUxpbmsgPSB0aGlzLl9maW5kKGl0ZW0sICdkZWxldGVCdXR0b24nKTsKCiAgICAgICAgcXEoZGVsZXRlTGluaykuY3NzKHtkaXNwbGF5OiAnaW5saW5lJ30pOwogICAgfSwKICAgIF9pdGVtRXJyb3I6IGZ1bmN0aW9uKGNvZGUsIG5hbWUpewogICAgICAgIHZhciBtZXNzYWdlID0gcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9pdGVtRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB0aGlzLl9vcHRpb25zLnNob3dNZXNzYWdlKG1lc3NhZ2UpOwogICAgfSwKICAgIF9iYXRjaEVycm9yOiBmdW5jdGlvbihtZXNzYWdlKSB7CiAgICAgICAgcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9iYXRjaEVycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgdGhpcy5fb3B0aW9ucy5zaG93TWVzc2FnZShtZXNzYWdlKTsKICAgIH0sCiAgICBfc2V0dXBQYXN0ZVByb21wdDogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwoKICAgICAgICB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vblBhc3RlUmVjZWl2ZWQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSBzZWxmLl9vcHRpb25zLnBhc3RlLm5hbWVQcm9tcHRNZXNzYWdlLAogICAgICAgICAgICAgICAgZGVmYXVsdFZhbCA9IHNlbGYuX29wdGlvbnMucGFzdGUuZGVmYXVsdE5hbWU7CgogICAgICAgICAgICByZXR1cm4gc2VsZi5fb3B0aW9ucy5zaG93UHJvbXB0KG1lc3NhZ2UsIGRlZmF1bHRWYWwpOwogICAgICAgIH07CiAgICB9Cn0pOwovKiogR2VuZXJpYyBjbGFzcyBmb3Igc2VuZGluZyBub24tdXBsb2FkIGFqYXggcmVxdWVzdHMgYW5kIGhhbmRsaW5nIHRoZSBhc3NvY2lhdGVkIHJlc3BvbnNlcyAqKi8KLy9UT0RPIFVzZSBYRG9tYWluUmVxdWVzdCBpZiBleHBlY3RDb3JzID0gdHJ1ZS4gIE5vdCBuZWNlc3Nhcnkgbm93IHNpbmNlIG9ubHkgREVMRVRFIHJlcXVlc3RzIGFyZSBzZW50IGFuZCBYRFIgZG9lc24ndCBzdXBwb3J0IHByZS1mbGlnaHRpbmcuCi8qZ2xvYmFscyBxcSwgWE1MSHR0cFJlcXVlc3QqLwpxcS5BamF4UmVxdWVzdG9yID0gZnVuY3Rpb24obykgewogICAgInVzZSBzdHJpY3QiOwoKICAgIHZhciBsb2csIHNob3VsZFBhcmFtc0JlSW5RdWVyeVN0cmluZywKICAgICAgICBxdWV1ZSA9IFtdLAogICAgICAgIHJlcXVlc3RTdGF0ZSA9IFtdLAogICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAogICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMywKICAgICAgICAgICAgY3VzdG9tSGVhZGVyczoge30sCiAgICAgICAgICAgIGVuZHBvaW50U3RvcmU6IHt9LAogICAgICAgICAgICBwYXJhbXNTdG9yZToge30sCiAgICAgICAgICAgIHN1Y2Nlc3NmdWxSZXNwb25zZUNvZGVzOiBbMjAwXSwKICAgICAgICAgICAgZGVtb01vZGU6IGZhbHNlLAogICAgICAgICAgICBjb3JzOiB7CiAgICAgICAgICAgICAgICBleHBlY3RlZDogZmFsc2UsCiAgICAgICAgICAgICAgICBzZW5kQ3JlZGVudGlhbHM6IGZhbHNlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGxvZzogZnVuY3Rpb24oc3RyLCBsZXZlbCkge30sCiAgICAgICAgICAgIG9uU2VuZDogZnVuY3Rpb24oaWQpIHt9LAogICAgICAgICAgICBvbkNvbXBsZXRlOiBmdW5jdGlvbihpZCwgeGhyLCBpc0Vycm9yKSB7fSwKICAgICAgICAgICAgb25DYW5jZWw6IGZ1bmN0aW9uKGlkKSB7fQogICAgICAgIH07CgogICAgcXEuZXh0ZW5kKG9wdGlvbnMsIG8pOwogICAgbG9nID0gb3B0aW9ucy5sb2c7CiAgICBzaG91bGRQYXJhbXNCZUluUXVlcnlTdHJpbmcgPSBnZXRNZXRob2QoKSA9PT0gJ0dFVCcgfHwgZ2V0TWV0aG9kKCkgPT09ICdERUxFVEUnOwoKCiAgICAvKioKICAgICAqIFJlbW92ZXMgZWxlbWVudCBmcm9tIHF1ZXVlLCBzZW5kcyBuZXh0IHJlcXVlc3QKICAgICAqLwogICAgZnVuY3Rpb24gZGVxdWV1ZShpZCkgewogICAgICAgIHZhciBpID0gcXEuaW5kZXhPZihxdWV1ZSwgaWQpLAogICAgICAgICAgICBtYXggPSBvcHRpb25zLm1heENvbm5lY3Rpb25zLAogICAgICAgICAgICBuZXh0SWQ7CgogICAgICAgIGRlbGV0ZSByZXF1ZXN0U3RhdGVbaWRdOwogICAgICAgIHF1ZXVlLnNwbGljZShpLCAxKTsKCiAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+PSBtYXggJiYgaSA8IG1heCl7CiAgICAgICAgICAgIG5leHRJZCA9IHF1ZXVlW21heC0xXTsKICAgICAgICAgICAgc2VuZFJlcXVlc3QobmV4dElkKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gb25Db21wbGV0ZShpZCkgewogICAgICAgIHZhciB4aHIgPSByZXF1ZXN0U3RhdGVbaWRdLnhociwKICAgICAgICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKCksCiAgICAgICAgICAgIGlzRXJyb3IgPSBmYWxzZTsKCiAgICAgICAgZGVxdWV1ZShpZCk7CgogICAgICAgIGlmICghaXNSZXNwb25zZVN1Y2Nlc3NmdWwoeGhyLnN0YXR1cykpIHsKICAgICAgICAgICAgaXNFcnJvciA9IHRydWU7CiAgICAgICAgICAgIGxvZyhtZXRob2QgKyAiIHJlcXVlc3QgZm9yICIgKyBpZCArICIgaGFzIGZhaWxlZCAtIHJlc3BvbnNlIGNvZGUgIiArIHhoci5zdGF0dXMsICJlcnJvciIpOwogICAgICAgIH0KCiAgICAgICAgb3B0aW9ucy5vbkNvbXBsZXRlKGlkLCB4aHIsIGlzRXJyb3IpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNlbmRSZXF1ZXN0KGlkKSB7CiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpLAogICAgICAgICAgICBtZXRob2QgPSBnZXRNZXRob2QoKSwKICAgICAgICAgICAgcGFyYW1zID0ge30sCiAgICAgICAgICAgIHVybDsKCiAgICAgICAgb3B0aW9ucy5vblNlbmQoaWQpOwoKICAgICAgICBpZiAob3B0aW9ucy5wYXJhbXNTdG9yZS5nZXRQYXJhbXMpIHsKICAgICAgICAgICAgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXNTdG9yZS5nZXRQYXJhbXMoaWQpOwogICAgICAgIH0KCiAgICAgICAgdXJsID0gY3JlYXRlVXJsKGlkLCBwYXJhbXMpOwoKICAgICAgICByZXF1ZXN0U3RhdGVbaWRdLnhociA9IHhocjsKICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZ2V0UmVhZHlTdGF0ZUNoYW5nZUhhbmRsZXIoaWQpOwogICAgICAgIHhoci5vcGVuKG1ldGhvZCwgdXJsLCB0cnVlKTsKCiAgICAgICAgaWYgKG9wdGlvbnMuY29ycy5leHBlY3RlZCAmJiBvcHRpb25zLmNvcnMuc2VuZENyZWRlbnRpYWxzKSB7CiAgICAgICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgc2V0SGVhZGVycyhpZCk7CgogICAgICAgIGxvZygnU2VuZGluZyAnICsgbWV0aG9kICsgIiByZXF1ZXN0IGZvciAiICsgaWQpOwogICAgICAgIGlmICghc2hvdWxkUGFyYW1zQmVJblF1ZXJ5U3RyaW5nICYmIHBhcmFtcykgewogICAgICAgICAgICB4aHIuc2VuZChxcS5vYmoydXJsKHBhcmFtcywgIiIpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHhoci5zZW5kKCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGNyZWF0ZVVybChpZCwgcGFyYW1zKSB7CiAgICAgICAgdmFyIGVuZHBvaW50ID0gb3B0aW9ucy5lbmRwb2ludFN0b3JlLmdldEVuZHBvaW50KGlkKSwKICAgICAgICAgICAgYWRkVG9QYXRoID0gcmVxdWVzdFN0YXRlW2lkXS5hZGRUb1BhdGg7CgogICAgICAgIGlmIChhZGRUb1BhdGggIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBlbmRwb2ludCArPSAiLyIgKyBhZGRUb1BhdGg7CiAgICAgICAgfQoKICAgICAgICBpZiAoc2hvdWxkUGFyYW1zQmVJblF1ZXJ5U3RyaW5nICYmIHBhcmFtcykgewogICAgICAgICAgICByZXR1cm4gcXEub2JqMnVybChwYXJhbXMsIGVuZHBvaW50KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBlbmRwb2ludDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0UmVhZHlTdGF0ZUNoYW5nZUhhbmRsZXIoaWQpIHsKICAgICAgICB2YXIgeGhyID0gcmVxdWVzdFN0YXRlW2lkXS54aHI7CgogICAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHhoci5yZWFkeVN0YXRlID09PSA0KSB7CiAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKGlkLCB4aHIpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRIZWFkZXJzKGlkKSB7CiAgICAgICAgdmFyIHhociA9IHJlcXVlc3RTdGF0ZVtpZF0ueGhyLAogICAgICAgICAgICBjdXN0b21IZWFkZXJzID0gb3B0aW9ucy5jdXN0b21IZWFkZXJzOwoKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsICJYTUxIdHRwUmVxdWVzdCIpOwogICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIik7CgogICAgICAgIHFxLmVhY2goY3VzdG9tSGVhZGVycywgZnVuY3Rpb24obmFtZSwgdmFsKSB7CiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKG5hbWUsIHZhbCk7CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gY2FuY2VsUmVxdWVzdChpZCkgewogICAgICAgIHZhciB4aHIgPSByZXF1ZXN0U3RhdGVbaWRdLnhociwKICAgICAgICAgICAgbWV0aG9kID0gZ2V0TWV0aG9kKCk7CgogICAgICAgIGlmICh4aHIpIHsKICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7CiAgICAgICAgICAgIHhoci5hYm9ydCgpOwogICAgICAgICAgICBkZXF1ZXVlKGlkKTsKCiAgICAgICAgICAgIGxvZygnQ2FuY2VsbGVkICcgKyBtZXRob2QgKyAiIGZvciAiICsgaWQpOwogICAgICAgICAgICBvcHRpb25zLm9uQ2FuY2VsKGlkKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZ1bmN0aW9uIGlzUmVzcG9uc2VTdWNjZXNzZnVsKHJlc3BvbnNlQ29kZSkgewogICAgICAgIHJldHVybiBxcS5pbmRleE9mKG9wdGlvbnMuc3VjY2Vzc2Z1bFJlc3BvbnNlQ29kZXMsIHJlc3BvbnNlQ29kZSkgPj0gMDsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRNZXRob2QoKSB7CiAgICAgICAgaWYgKG9wdGlvbnMuZGVtb01vZGUpIHsKICAgICAgICAgICAgcmV0dXJuICJHRVQiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG9wdGlvbnMubWV0aG9kOwogICAgfQoKCiAgICByZXR1cm4gewogICAgICAgIHNlbmQ6IGZ1bmN0aW9uKGlkLCBhZGRUb1BhdGgpIHsKICAgICAgICAgICAgcmVxdWVzdFN0YXRlW2lkXSA9IHsKICAgICAgICAgICAgICAgIGFkZFRvUGF0aDogYWRkVG9QYXRoCiAgICAgICAgICAgIH07CgogICAgICAgICAgICB2YXIgbGVuID0gcXVldWUucHVzaChpZCk7CgogICAgICAgICAgICAvLyBpZiB0b28gbWFueSBhY3RpdmUgY29ubmVjdGlvbnMsIHdhaXQuLi4KICAgICAgICAgICAgaWYgKGxlbiA8PSBvcHRpb25zLm1heENvbm5lY3Rpb25zKXsKICAgICAgICAgICAgICAgIHNlbmRSZXF1ZXN0KGlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FuY2VsOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICByZXR1cm4gY2FuY2VsUmVxdWVzdChpZCk7CiAgICAgICAgfQogICAgfTsKfTsKLyoqIEdlbmVyaWMgY2xhc3MgZm9yIHNlbmRpbmcgbm9uLXVwbG9hZCBhamF4IHJlcXVlc3RzIGFuZCBoYW5kbGluZyB0aGUgYXNzb2NpYXRlZCByZXNwb25zZXMgKiovCi8qZ2xvYmFscyBxcSwgWE1MSHR0cFJlcXVlc3QqLwpxcS5EZWxldGVGaWxlQWpheFJlcXVlc3RvciA9IGZ1bmN0aW9uKG8pIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgcmVxdWVzdG9yLAogICAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgICAgIGVuZHBvaW50U3RvcmU6IHt9LAogICAgICAgICAgICBtYXhDb25uZWN0aW9uczogMywKICAgICAgICAgICAgY3VzdG9tSGVhZGVyczoge30sCiAgICAgICAgICAgIHBhcmFtc1N0b3JlOiB7fSwKICAgICAgICAgICAgZGVtb01vZGU6IGZhbHNlLAogICAgICAgICAgICBjb3JzOiB7CiAgICAgICAgICAgICAgICBleHBlY3RlZDogZmFsc2UsCiAgICAgICAgICAgICAgICBzZW5kQ3JlZGVudGlhbHM6IGZhbHNlCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGxvZzogZnVuY3Rpb24oc3RyLCBsZXZlbCkge30sCiAgICAgICAgICAgIG9uRGVsZXRlOiBmdW5jdGlvbihpZCkge30sCiAgICAgICAgICAgIG9uRGVsZXRlQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCB4aHIsIGlzRXJyb3IpIHt9CiAgICAgICAgfTsKCiAgICBxcS5leHRlbmQob3B0aW9ucywgbyk7CgogICAgcmVxdWVzdG9yID0gbmV3IHFxLkFqYXhSZXF1ZXN0b3IoewogICAgICAgIG1ldGhvZDogJ0RFTEVURScsCiAgICAgICAgZW5kcG9pbnRTdG9yZTogb3B0aW9ucy5lbmRwb2ludFN0b3JlLAogICAgICAgIHBhcmFtc1N0b3JlOiBvcHRpb25zLnBhcmFtc1N0b3JlLAogICAgICAgIG1heENvbm5lY3Rpb25zOiBvcHRpb25zLm1heENvbm5lY3Rpb25zLAogICAgICAgIGN1c3RvbUhlYWRlcnM6IG9wdGlvbnMuY3VzdG9tSGVhZGVycywKICAgICAgICBzdWNjZXNzZnVsUmVzcG9uc2VDb2RlczogWzIwMCwgMjAyLCAyMDRdLAogICAgICAgIGRlbW9Nb2RlOiBvcHRpb25zLmRlbW9Nb2RlLAogICAgICAgIGxvZzogb3B0aW9ucy5sb2csCiAgICAgICAgb25TZW5kOiBvcHRpb25zLm9uRGVsZXRlLAogICAgICAgIG9uQ29tcGxldGU6IG9wdGlvbnMub25EZWxldGVDb21wbGV0ZQogICAgfSk7CgoKICAgIHJldHVybiB7CiAgICAgICAgc2VuZERlbGV0ZTogZnVuY3Rpb24oaWQsIHV1aWQpIHsKICAgICAgICAgICAgcmVxdWVzdG9yLnNlbmQoaWQsIHV1aWQpOwogICAgICAgICAgICBvcHRpb25zLmxvZygiU3VibWl0dGVkIGRlbGV0ZSBmaWxlIHJlcXVlc3QgZm9yICIgKyBpZCk7CiAgICAgICAgfQogICAgfTsKfTsKcXEuV2luZG93UmVjZWl2ZU1lc3NhZ2UgPSBmdW5jdGlvbihvKSB7CiAgICB2YXIgb3B0aW9ucyA9IHsKICAgICAgICAgICAgbG9nOiBmdW5jdGlvbihtZXNzYWdlLCBsZXZlbCkge30KICAgICAgICB9LAogICAgICAgIGNhbGxiYWNrV3JhcHBlckRldGFjaGVycyA9IHt9OwoKICAgIHFxLmV4dGVuZChvcHRpb25zLCBvKTsKCiAgICByZXR1cm4gewogICAgICAgIHJlY2VpdmVNZXNzYWdlIDogZnVuY3Rpb24oaWQsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgIHZhciBvbk1lc3NhZ2VDYWxsYmFja1dyYXBwZXIgPSBmdW5jdGlvbihldmVudCkgewogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50LmRhdGEpOwogICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIGlmICh3aW5kb3cucG9zdE1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrV3JhcHBlckRldGFjaGVyc1tpZF0gPSBxcSh3aW5kb3cpLmF0dGFjaCgibWVzc2FnZSIsIG9uTWVzc2FnZUNhbGxiYWNrV3JhcHBlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBsb2coImlmcmFtZSBtZXNzYWdlIHBhc3Npbmcgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXIhIiwgImVycm9yIik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICBzdG9wUmVjZWl2aW5nTWVzc2FnZXMgOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICBpZiAod2luZG93LnBvc3RNZXNzYWdlKSB7CiAgICAgICAgICAgICAgICB2YXIgZGV0YWNoZXIgPSBjYWxsYmFja1dyYXBwZXJEZXRhY2hlcnNbaWRdOwogICAgICAgICAgICAgICAgaWYgKGRldGFjaGVyKSB7CiAgICAgICAgICAgICAgICAgICAgZGV0YWNoZXIoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn07Ci8qKgogKiBDbGFzcyBmb3IgdXBsb2FkaW5nIGZpbGVzLCB1cGxvYWRpbmcgaXRzZWxmIGlzIGhhbmRsZWQgYnkgY2hpbGQgY2xhc3NlcwogKi8KLypnbG9iYWxzIHFxKi8KcXEuVXBsb2FkSGFuZGxlciA9IGZ1bmN0aW9uKG8pIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICB2YXIgcXVldWUgPSBbXSwKICAgICAgICBvcHRpb25zLCBsb2csIGRlcXVldWUsIGhhbmRsZXJJbXBsOwoKICAgIC8vIERlZmF1bHQgb3B0aW9ucywgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIHVzZXIKICAgIG9wdGlvbnMgPSB7CiAgICAgICAgZGVidWc6IGZhbHNlLAogICAgICAgIGZvcmNlTXVsdGlwYXJ0OiB0cnVlLAogICAgICAgIHBhcmFtc0luQm9keTogZmFsc2UsCiAgICAgICAgcGFyYW1zU3RvcmU6IHt9LAogICAgICAgIGVuZHBvaW50U3RvcmU6IHt9LAogICAgICAgIGNvcnM6IHsKICAgICAgICAgICAgZXhwZWN0ZWQ6IGZhbHNlLAogICAgICAgICAgICBzZW5kQ3JlZGVudGlhbHM6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBtYXhDb25uZWN0aW9uczogMywgLy8gbWF4aW11bSBudW1iZXIgb2YgY29uY3VycmVudCB1cGxvYWRzCiAgICAgICAgdXVpZFBhcmFtTmFtZTogJ3FxdXVpZCcsCiAgICAgICAgdG90YWxGaWxlU2l6ZVBhcmFtTmFtZTogJ3FxdG90YWxmaWxlc2l6ZScsCiAgICAgICAgY2h1bmtpbmc6IHsKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UsCiAgICAgICAgICAgIHBhcnRTaXplOiAyMDAwMDAwLCAvL2J5dGVzCiAgICAgICAgICAgIHBhcmFtTmFtZXM6IHsKICAgICAgICAgICAgICAgIHBhcnRJbmRleDogJ3FxcGFydGluZGV4JywKICAgICAgICAgICAgICAgIHBhcnRCeXRlT2Zmc2V0OiAncXFwYXJ0Ynl0ZW9mZnNldCcsCiAgICAgICAgICAgICAgICBjaHVua1NpemU6ICdxcWNodW5rc2l6ZScsCiAgICAgICAgICAgICAgICB0b3RhbFBhcnRzOiAncXF0b3RhbHBhcnRzJywKICAgICAgICAgICAgICAgIGZpbGVuYW1lOiAncXFmaWxlbmFtZScKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgcmVzdW1lOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICBpZDogbnVsbCwKICAgICAgICAgICAgY29va2llc0V4cGlyZUluOiA3LCAvL2RheXMKICAgICAgICAgICAgcGFyYW1OYW1lczogewogICAgICAgICAgICAgICAgcmVzdW1pbmc6ICJxcXJlc3VtZSIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgYmxvYnM6IHsKICAgICAgICAgICAgcGFyYW1OYW1lczogewogICAgICAgICAgICAgICAgbmFtZTogJ3FxYmxvYm5hbWUnCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGxvZzogZnVuY3Rpb24oc3RyLCBsZXZlbCkge30sCiAgICAgICAgb25Qcm9ncmVzczogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCBsb2FkZWQsIHRvdGFsKXt9LAogICAgICAgIG9uQ29tcGxldGU6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSwgcmVzcG9uc2UsIHhocil7fSwKICAgICAgICBvbkNhbmNlbDogZnVuY3Rpb24oaWQsIGZpbGVOYW1lKXt9LAogICAgICAgIG9uVXBsb2FkOiBmdW5jdGlvbihpZCwgZmlsZU5hbWUpe30sCiAgICAgICAgb25VcGxvYWRDaHVuazogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCBjaHVua0RhdGEpe30sCiAgICAgICAgb25BdXRvUmV0cnk6IGZ1bmN0aW9uKGlkLCBmaWxlTmFtZSwgcmVzcG9uc2UsIHhocil7fSwKICAgICAgICBvblJlc3VtZTogZnVuY3Rpb24oaWQsIGZpbGVOYW1lLCBjaHVua0RhdGEpe30KCiAgICB9OwogICAgcXEuZXh0ZW5kKG9wdGlvbnMsIG8pOwoKICAgIGxvZyA9IG9wdGlvbnMubG9nOwoKICAgIC8qKgogICAgICogUmVtb3ZlcyBlbGVtZW50IGZyb20gcXVldWUsIHN0YXJ0cyB1cGxvYWQgb2YgbmV4dAogICAgICovCiAgICBkZXF1ZXVlID0gZnVuY3Rpb24oaWQpIHsKICAgICAgICB2YXIgaSA9IHFxLmluZGV4T2YocXVldWUsIGlkKSwKICAgICAgICAgICAgbWF4ID0gb3B0aW9ucy5tYXhDb25uZWN0aW9ucywKICAgICAgICAgICAgbmV4dElkOwoKICAgICAgICBpZiAoaSA+PSAwKSB7CiAgICAgICAgICAgIHF1ZXVlLnNwbGljZShpLCAxKTsKCiAgICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPj0gbWF4ICYmIGkgPCBtYXgpewogICAgICAgICAgICAgICAgbmV4dElkID0gcXVldWVbbWF4LTFdOwogICAgICAgICAgICAgICAgaGFuZGxlckltcGwudXBsb2FkKG5leHRJZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9OwoKICAgIGlmIChxcS5pc1hoclVwbG9hZFN1cHBvcnRlZCgpKSB7CiAgICAgICAgaGFuZGxlckltcGwgPSBuZXcgcXEuVXBsb2FkSGFuZGxlclhocihvcHRpb25zLCBkZXF1ZXVlLCBsb2cpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgaGFuZGxlckltcGwgPSBuZXcgcXEuVXBsb2FkSGFuZGxlckZvcm0ob3B0aW9ucywgZGVxdWV1ZSwgbG9nKTsKICAgIH0KCgogICAgcmV0dXJuIHsKICAgICAgICAvKioKICAgICAgICAgKiBBZGRzIGZpbGUgb3IgZmlsZSBpbnB1dCB0byB0aGUgcXVldWUKICAgICAgICAgKiBAcmV0dXJucyBpZAogICAgICAgICAqKi8KICAgICAgICBhZGQ6IGZ1bmN0aW9uKGZpbGUpewogICAgICAgICAgICByZXR1cm4gaGFuZGxlckltcGwuYWRkKGZpbGUpOwogICAgICAgIH0sCiAgICAgICAgLyoqCiAgICAgICAgICogU2VuZHMgdGhlIGZpbGUgaWRlbnRpZmllZCBieSBpZAogICAgICAgICAqLwogICAgICAgIHVwbG9hZDogZnVuY3Rpb24oaWQpewogICAgICAgICAgICB2YXIgbGVuID0gcXVldWUucHVzaChpZCk7CgogICAgICAgICAgICAvLyBpZiB0b28gbWFueSBhY3RpdmUgdXBsb2Fkcywgd2FpdC4uLgogICAgICAgICAgICBpZiAobGVuIDw9IG9wdGlvbnMubWF4Q29ubmVjdGlvbnMpewogICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJJbXBsLnVwbG9hZChpZCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHJldHJ5OiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICB2YXIgaSA9IHFxLmluZGV4T2YocXVldWUsIGlkKTsKICAgICAgICAgICAgaWYgKGkgPj0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJJbXBsLnVwbG9hZChpZCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy51cGxvYWQoaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvKioKICAgICAgICAgKiBDYW5jZWxzIGZpbGUgdXBsb2FkIGJ5IGlkCiAgICAgICAgICovCiAgICAgICAgY2FuY2VsOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICBsb2coJ0NhbmNlbGxpbmcgJyArIGlkKTsKICAgICAgICAgICAgb3B0aW9ucy5wYXJhbXNTdG9yZS5yZW1vdmUoaWQpOwogICAgICAgICAgICBoYW5kbGVySW1wbC5jYW5jZWwoaWQpOwogICAgICAgICAgICBkZXF1ZXVlKGlkKTsKICAgICAgICB9LAogICAgICAgIC8qKgogICAgICAgICAqIENhbmNlbHMgYWxsIHF1ZXVlZCBvciBpbi1wcm9ncmVzcyB1cGxvYWRzCiAgICAgICAgICovCiAgICAgICAgY2FuY2VsQWxsOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAogICAgICAgICAgICAgICAgcXVldWVDb3B5ID0gW107CgogICAgICAgICAgICBxcS5leHRlbmQocXVldWVDb3B5LCBxdWV1ZSk7CiAgICAgICAgICAgIHFxLmVhY2gocXVldWVDb3B5LCBmdW5jdGlvbihpZHgsIGZpbGVJZCkgewogICAgICAgICAgICAgICAgc2VsZi5jYW5jZWwoZmlsZUlkKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBxdWV1ZSA9IFtdOwogICAgICAgIH0sCiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJucyBuYW1lIG9mIHRoZSBmaWxlIGlkZW50aWZpZWQgYnkgaWQKICAgICAgICAgKi8KICAgICAgICBnZXROYW1lOiBmdW5jdGlvbihpZCl7CiAgICAgICAgICAgIHJldHVybiBoYW5kbGVySW1wbC5nZXROYW1lKGlkKTsKICAgICAgICB9LAogICAgICAgIC8qKgogICAgICAgICAqIFJldHVybnMgc2l6ZSBvZiB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IGlkCiAgICAgICAgICovCiAgICAgICAgZ2V0U2l6ZTogZnVuY3Rpb24oaWQpewogICAgICAgICAgICBpZiAoaGFuZGxlckltcGwuZ2V0U2l6ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJJbXBsLmdldFNpemUoaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBnZXRGaWxlOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICBpZiAoaGFuZGxlckltcGwuZ2V0RmlsZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZXJJbXBsLmdldEZpbGUoaWQpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIGlkIG9mIGZpbGVzIGJlaW5nIHVwbG9hZGVkIG9yCiAgICAgICAgICogd2FpdGluZyBmb3IgdGhlaXIgdHVybgogICAgICAgICAqLwogICAgICAgIGdldFF1ZXVlOiBmdW5jdGlvbigpewogICAgICAgICAgICByZXR1cm4gcXVldWU7CiAgICAgICAgfSwKICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGxvZygnUmVzZXR0aW5nIHVwbG9hZCBoYW5kbGVyJyk7CiAgICAgICAgICAgIHF1ZXVlID0gW107CiAgICAgICAgICAgIGhhbmRsZXJJbXBsLnJlc2V0KCk7CiAgICAgICAgfSwKICAgICAgICBnZXRVdWlkOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICByZXR1cm4gaGFuZGxlckltcGwuZ2V0VXVpZChpZCk7CiAgICAgICAgfSwKICAgICAgICAvKioKICAgICAgICAgKiBEZXRlcm1pbmUgaWYgdGhlIGZpbGUgZXhpc3RzLgogICAgICAgICAqLwogICAgICAgIGlzVmFsaWQ6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgIHJldHVybiBoYW5kbGVySW1wbC5pc1ZhbGlkKGlkKTsKICAgICAgICB9LAogICAgICAgIGdldFJlc3VtYWJsZUZpbGVzRGF0YTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChoYW5kbGVySW1wbC5nZXRSZXN1bWFibGVGaWxlc0RhdGEpIHsKICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGVySW1wbC5nZXRSZXN1bWFibGVGaWxlc0RhdGEoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQogICAgfTsKfTsKLypnbG9iYWxzIHFxLCBkb2N1bWVudCwgc2V0VGltZW91dCovCi8qZ2xvYmFscyBjbGVhclRpbWVvdXQqLwpxcS5VcGxvYWRIYW5kbGVyRm9ybSA9IGZ1bmN0aW9uKG8sIHVwbG9hZENvbXBsZXRlQ2FsbGJhY2ssIGxvZ0NhbGxiYWNrKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIG9wdGlvbnMgPSBvLAogICAgICAgIGlucHV0cyA9IFtdLAogICAgICAgIHV1aWRzID0gW10sCiAgICAgICAgZGV0YWNoTG9hZEV2ZW50cyA9IHt9LAogICAgICAgIHBvc3RNZXNzYWdlQ2FsbGJhY2tUaW1lcnMgPSB7fSwKICAgICAgICB1cGxvYWRDb21wbGV0ZSA9IHVwbG9hZENvbXBsZXRlQ2FsbGJhY2ssCiAgICAgICAgbG9nID0gbG9nQ2FsbGJhY2ssCiAgICAgICAgY29yc01lc3NhZ2VSZWNlaXZlciA9IG5ldyBxcS5XaW5kb3dSZWNlaXZlTWVzc2FnZSh7bG9nOiBsb2d9KSwKICAgICAgICBvbmxvYWRDYWxsYmFja3MgPSB7fSwKICAgICAgICBhcGk7CgoKICAgIGZ1bmN0aW9uIGRldGFjaExvYWRFdmVudChpZCkgewogICAgICAgIGlmIChkZXRhY2hMb2FkRXZlbnRzW2lkXSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgIGRldGFjaExvYWRFdmVudHNbaWRdKCk7CiAgICAgICAgICAgIGRlbGV0ZSBkZXRhY2hMb2FkRXZlbnRzW2lkXTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gcmVnaXN0ZXJQb3N0TWVzc2FnZUNhbGxiYWNrKGlmcmFtZSwgY2FsbGJhY2spIHsKICAgICAgICB2YXIgaWQgPSBpZnJhbWUuaWQ7CgogICAgICAgIG9ubG9hZENhbGxiYWNrc1t1dWlkc1tpZF1dID0gY2FsbGJhY2s7CgogICAgICAgIGRldGFjaExvYWRFdmVudHNbaWRdID0gcXEoaWZyYW1lKS5hdHRhY2goJ2xvYWQnLCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKGlucHV0c1tpZF0pIHsKICAgICAgICAgICAgICAgIGxvZygiUmVjZWl2ZWQgaWZyYW1lIGxvYWQgZXZlbnQgZm9yIENPUlMgdXBsb2FkIHJlcXVlc3QgKGZpbGUgaWQgIiArIGlkICsgIikiKTsKCiAgICAgICAgICAgICAgICBwb3N0TWVzc2FnZUNhbGxiYWNrVGltZXJzW2lkXSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yTWVzc2FnZSA9ICJObyB2YWxpZCBtZXNzYWdlIHJlY2VpdmVkIGZyb20gbG9hZGVkIGlmcmFtZSBmb3IgZmlsZSBpZCAiICsgaWQ7CiAgICAgICAgICAgICAgICAgICAgbG9nKGVycm9yTWVzc2FnZSwgImVycm9yIik7CiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soewogICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JNZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9LCAxMDAwKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBjb3JzTWVzc2FnZVJlY2VpdmVyLnJlY2VpdmVNZXNzYWdlKGlkLCBmdW5jdGlvbihtZXNzYWdlKSB7CiAgICAgICAgICAgIGxvZygiUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyB3aW5kb3cgbWVzc2FnZTogJyIgKyBtZXNzYWdlICsgIiciKTsKICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcXEucGFyc2VKc29uKG1lc3NhZ2UpLAogICAgICAgICAgICAgICAgdXVpZCA9IHJlc3BvbnNlLnV1aWQsCiAgICAgICAgICAgICAgICBvbmxvYWRDYWxsYmFjazsKCiAgICAgICAgICAgIGlmICh1dWlkICYmIG9ubG9hZENhbGxiYWNrc1t1dWlkXSkgewogICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHBvc3RNZXNzYWdlQ2FsbGJhY2tUaW1lcnNbaWRdKTsKICAgICAgICAgICAgICAgIGRlbGV0ZSBwb3N0TWVzc2FnZUNhbGxiYWNrVGltZXJzW2lkXTsKCiAgICAgICAgICAgICAgICBkZXRhY2hMb2FkRXZlbnQoaWQpOwoKICAgICAgICAgICAgICAgIG9ubG9hZENhbGxiYWNrID0gb25sb2FkQ2FsbGJhY2tzW3V1aWRdOwoKICAgICAgICAgICAgICAgIGRlbGV0ZSBvbmxvYWRDYWxsYmFja3NbdXVpZF07CiAgICAgICAgICAgICAgICBjb3JzTWVzc2FnZVJlY2VpdmVyLnN0b3BSZWNlaXZpbmdNZXNzYWdlcyhpZCk7CiAgICAgICAgICAgICAgICBvbmxvYWRDYWxsYmFjayhyZXNwb25zZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAoIXV1aWQpIHsKICAgICAgICAgICAgICAgIGxvZygiJyIgKyBtZXNzYWdlICsgIicgZG9lcyBub3QgY29udGFpbiBhIFVVSUQgLSBpZ25vcmluZy4iKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGF0dGFjaExvYWRFdmVudChpZnJhbWUsIGNhbGxiYWNrKSB7CiAgICAgICAgLypqc2xpbnQgZXFlcTogdHJ1ZSovCgogICAgICAgIGlmIChvcHRpb25zLmNvcnMuZXhwZWN0ZWQpIHsKICAgICAgICAgICAgcmVnaXN0ZXJQb3N0TWVzc2FnZUNhbGxiYWNrKGlmcmFtZSwgY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgZGV0YWNoTG9hZEV2ZW50c1tpZnJhbWUuaWRdID0gcXEoaWZyYW1lKS5hdHRhY2goJ2xvYWQnLCBmdW5jdGlvbigpewogICAgICAgICAgICAgICAgbG9nKCdSZWNlaXZlZCByZXNwb25zZSBmb3IgJyArIGlmcmFtZS5pZCk7CgogICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSByZW1vdmUgaWZyYW1lIGZyb20gZG9tCiAgICAgICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCBzdG9wcywgYnV0IGluIElFIGxvYWQKICAgICAgICAgICAgICAgIC8vIGV2ZW50IGZpcmVzCiAgICAgICAgICAgICAgICBpZiAoIWlmcmFtZS5wYXJlbnROb2RlKXsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAvLyBmaXhpbmcgT3BlcmEgMTAuNTMKICAgICAgICAgICAgICAgICAgICBpZiAoaWZyYW1lLmNvbnRlbnREb2N1bWVudCAmJgogICAgICAgICAgICAgICAgICAgICAgICBpZnJhbWUuY29udGVudERvY3VtZW50LmJvZHkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgaWZyYW1lLmNvbnRlbnREb2N1bWVudC5ib2R5LmlubmVySFRNTCA9PSAiZmFsc2UiKXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW4gT3BlcmEgZXZlbnQgaXMgZmlyZWQgc2Vjb25kIHRpbWUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiBib2R5LmlubmVySFRNTCBjaGFuZ2VkIGZyb20gZmFsc2UKICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2VydmVyIHJlc3BvbnNlIGFwcHJveC4gYWZ0ZXIgMSBzZWMKICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlbiB3ZSB1cGxvYWQgZmlsZSB3aXRoIGlmcmFtZQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgLy9JRSBtYXkgdGhyb3cgYW4gImFjY2VzcyBpcyBkZW5pZWQiIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgY29udGVudERvY3VtZW50IG9uIHRoZSBpZnJhbWUgaW4gc29tZSBjYXNlcwogICAgICAgICAgICAgICAgICAgIGxvZygnRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGFjY2VzcyBpZnJhbWUgZHVyaW5nIGhhbmRsaW5nIG9mIHVwbG9hZCByZXNwb25zZSAoJyArIGVycm9yICsgIikiLCAnZXJyb3InKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBjYWxsYmFjaygpOwogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGpzb24gb2JqZWN0IHJlY2VpdmVkIGJ5IGlmcmFtZSBmcm9tIHNlcnZlci4KICAgICAqLwogICAgZnVuY3Rpb24gZ2V0SWZyYW1lQ29udGVudEpzb24oaWZyYW1lKSB7CiAgICAgICAgLypqc2hpbnQgZXZpbDogdHJ1ZSovCgogICAgICAgIHZhciByZXNwb25zZTsKCiAgICAgICAgLy9JRSBtYXkgdGhyb3cgYW4gImFjY2VzcyBpcyBkZW5pZWQiIGVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgY29udGVudERvY3VtZW50IG9uIHRoZSBpZnJhbWUgaW4gc29tZSBjYXNlcwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIC8vIGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50IC0gZm9yIElFPDcKICAgICAgICAgICAgdmFyIGRvYyA9IGlmcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgaWZyYW1lLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQsCiAgICAgICAgICAgICAgICBpbm5lckhUTUwgPSBkb2MuYm9keS5pbm5lckhUTUw7CgogICAgICAgICAgICBsb2coImNvbnZlcnRpbmcgaWZyYW1lJ3MgaW5uZXJIVE1MIHRvIEpTT04iKTsKICAgICAgICAgICAgbG9nKCJpbm5lckhUTUwgPSAiICsgaW5uZXJIVE1MKTsKICAgICAgICAgICAgLy9wbGFpbiB0ZXh0IHJlc3BvbnNlIG1heSBiZSB3cmFwcGVkIGluIDxwcmU+IHRhZwogICAgICAgICAgICBpZiAoaW5uZXJIVE1MICYmIGlubmVySFRNTC5tYXRjaCgvXjxwcmUvaSkpIHsKICAgICAgICAgICAgICAgIGlubmVySFRNTCA9IGRvYy5ib2R5LmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJlc3BvbnNlID0gcXEucGFyc2VKc29uKGlubmVySFRNTCk7CiAgICAgICAgfSBjYXRjaChlcnJvcil7CiAgICAgICAgICAgIGxvZygnRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIHBhcnNlIGZvcm0gdXBsb2FkIHJlc3BvbnNlICgnICsgZXJyb3IgKyAiKSIsICdlcnJvcicpOwogICAgICAgICAgICByZXNwb25zZSA9IHtzdWNjZXNzOiBmYWxzZX07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGlmcmFtZSB3aXRoIHVuaXF1ZSBuYW1lCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyZWF0ZUlmcmFtZShpZCl7CiAgICAgICAgLy8gV2UgY2FuJ3QgdXNlIGZvbGxvd2luZyBjb2RlIGFzIHRoZSBuYW1lIGF0dHJpYnV0ZQogICAgICAgIC8vIHdvbid0IGJlIHByb3Blcmx5IHJlZ2lzdGVyZWQgaW4gSUU2LCBhbmQgbmV3IHdpbmRvdwogICAgICAgIC8vIG9uIGZvcm0gc3VibWl0IHdpbGwgb3BlbgogICAgICAgIC8vIHZhciBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTsKICAgICAgICAvLyBpZnJhbWUuc2V0QXR0cmlidXRlKCduYW1lJywgaWQpOwoKICAgICAgICB2YXIgaWZyYW1lID0gcXEudG9FbGVtZW50KCc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDpmYWxzZTsiIG5hbWU9IicgKyBpZCArICciIC8+Jyk7CgogICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ2lkJywgaWQpOwoKICAgICAgICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGlmcmFtZSk7CgogICAgICAgIHJldHVybiBpZnJhbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGZvcm0sIHRoYXQgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gaWZyYW1lCiAgICAgKi8KICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm0oaWQsIGlmcmFtZSl7CiAgICAgICAgdmFyIHBhcmFtcyA9IG9wdGlvbnMucGFyYW1zU3RvcmUuZ2V0UGFyYW1zKGlkKSwKICAgICAgICAgICAgcHJvdG9jb2wgPSBvcHRpb25zLmRlbW9Nb2RlID8gIkdFVCIgOiAiUE9TVCIsCiAgICAgICAgICAgIGZvcm0gPSBxcS50b0VsZW1lbnQoJzxmb3JtIG1ldGhvZD0iJyArIHByb3RvY29sICsgJyIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+PC9mb3JtPicpLAogICAgICAgICAgICBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnRTdG9yZS5nZXRFbmRwb2ludChpZCksCiAgICAgICAgICAgIHVybCA9IGVuZHBvaW50OwoKICAgICAgICBwYXJhbXNbb3B0aW9ucy51dWlkUGFyYW1OYW1lXSA9IHV1aWRzW2lkXTsKCiAgICAgICAgaWYgKCFvcHRpb25zLnBhcmFtc0luQm9keSkgewogICAgICAgICAgICB1cmwgPSBxcS5vYmoydXJsKHBhcmFtcywgZW5kcG9pbnQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcXEub2JqMklucHV0cyhwYXJhbXMsIGZvcm0pOwogICAgICAgIH0KCiAgICAgICAgZm9ybS5zZXRBdHRyaWJ1dGUoJ2FjdGlvbicsIHVybCk7CiAgICAgICAgZm9ybS5zZXRBdHRyaWJ1dGUoJ3RhcmdldCcsIGlmcmFtZS5uYW1lKTsKICAgICAgICBmb3JtLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTsKCiAgICAgICAgcmV0dXJuIGZvcm07CiAgICB9CgoKICAgIGFwaSA9IHsKICAgICAgICBhZGQ6IGZ1bmN0aW9uKGZpbGVJbnB1dCkgewogICAgICAgICAgICBmaWxlSW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgb3B0aW9ucy5pbnB1dE5hbWUpOwoKICAgICAgICAgICAgdmFyIGlkID0gaW5wdXRzLnB1c2goZmlsZUlucHV0KSAtIDE7CiAgICAgICAgICAgIHV1aWRzW2lkXSA9IHFxLmdldFVuaXF1ZUlkKCk7CgogICAgICAgICAgICAvLyByZW1vdmUgZmlsZSBpbnB1dCBmcm9tIERPTQogICAgICAgICAgICBpZiAoZmlsZUlucHV0LnBhcmVudE5vZGUpewogICAgICAgICAgICAgICAgcXEoZmlsZUlucHV0KS5yZW1vdmUoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGlkOwogICAgICAgIH0sCiAgICAgICAgZ2V0TmFtZTogZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgLypqc2xpbnQgcmVnZXhwOiB0cnVlKi8KCiAgICAgICAgICAgIGlmIChhcGkuaXNWYWxpZChpZCkpIHsKICAgICAgICAgICAgICAgIC8vIGdldCBpbnB1dCB2YWx1ZSBhbmQgcmVtb3ZlIHBhdGggdG8gbm9ybWFsaXplCiAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXRzW2lkXS52YWx1ZS5yZXBsYWNlKC8uKihcL3xcXCkvLCAiIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBsb2coaWQgKyAiIGlzIG5vdCBhIHZhbGlkIGl0ZW0gSUQuIiwgImVycm9yIik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGlzVmFsaWQ6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgIHJldHVybiBpbnB1dHNbaWRdICE9PSB1bmRlZmluZWQ7CiAgICAgICAgfSwKICAgICAgICByZXNldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlucHV0cyA9IFtdOwogICAgICAgICAgICB1dWlkcyA9IFtdOwogICAgICAgICAgICBkZXRhY2hMb2FkRXZlbnRzID0ge307CiAgICAgICAgfSwKICAgICAgICBnZXRVdWlkOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICByZXR1cm4gdXVpZHNbaWRdOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICBvcHRpb25zLm9uQ2FuY2VsKGlkLCB0aGlzLmdldE5hbWUoaWQpKTsKCiAgICAgICAgICAgIGRlbGV0ZSBpbnB1dHNbaWRdOwogICAgICAgICAgICBkZWxldGUgdXVpZHNbaWRdOwogICAgICAgICAgICBkZWxldGUgZGV0YWNoTG9hZEV2ZW50c1tpZF07CgogICAgICAgICAgICBpZiAob3B0aW9ucy5jb3JzLmV4cGVjdGVkKSB7CiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocG9zdE1lc3NhZ2VDYWxsYmFja1RpbWVyc1tpZF0pOwogICAgICAgICAgICAgICAgZGVsZXRlIHBvc3RNZXNzYWdlQ2FsbGJhY2tUaW1lcnNbaWRdOwogICAgICAgICAgICAgICAgY29yc01lc3NhZ2VSZWNlaXZlci5zdG9wUmVjZWl2aW5nTWVzc2FnZXMoaWQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgaWZyYW1lID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOwogICAgICAgICAgICBpZiAoaWZyYW1lKSB7CiAgICAgICAgICAgICAgICAvLyB0byBjYW5jZWwgcmVxdWVzdCBzZXQgc3JjIHRvIHNvbWV0aGluZyBlbHNlCiAgICAgICAgICAgICAgICAvLyB3ZSB1c2Ugc3JjPSJqYXZhc2NyaXB0OmZhbHNlOyIgYmVjYXVzZSBpdCBkb2Vzbid0CiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyIGllNiBwcm9tcHQgb24gaHR0cHMKICAgICAgICAgICAgICAgIGlmcmFtZS5zZXRBdHRyaWJ1dGUoJ3NyYycsICdqYXZhJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoMTE1KSArICdjcmlwdDpmYWxzZTsnKTsgLy9kZWFsIHdpdGggIkpTTGludDogamF2YXNjcmlwdCBVUkwiIHdhcm5pbmcsIHdoaWNoIGFwcGFyZW50bHkgY2Fubm90IGJlIHR1cm5lZCBvZmYKCiAgICAgICAgICAgICAgICBxcShpZnJhbWUpLnJlbW92ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB1cGxvYWQ6IGZ1bmN0aW9uKGlkKXsKICAgICAgICAgICAgdmFyIGlucHV0ID0gaW5wdXRzW2lkXSwKICAgICAgICAgICAgICAgIGZpbGVOYW1lID0gYXBpLmdldE5hbWUoaWQpLAogICAgICAgICAgICAgICAgaWZyYW1lID0gY3JlYXRlSWZyYW1lKGlkKSwKICAgICAgICAgICAgICAgIGZvcm07CgogICAgICAgICAgICBpZiAoIWlucHV0KXsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignZmlsZSB3aXRoIHBhc3NlZCBpZCB3YXMgbm90IGFkZGVkLCBvciBhbHJlYWR5IHVwbG9hZGVkIG9yIGNhbmNlbGxlZCcpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBvcHRpb25zLm9uVXBsb2FkKGlkLCB0aGlzLmdldE5hbWUoaWQpKTsKCiAgICAgICAgICAgIGZvcm0gPSBjcmVhdGVGb3JtKGlkLCBpZnJhbWUpOwogICAgICAgICAgICBmb3JtLmFwcGVuZENoaWxkKGlucHV0KTsKCiAgICAgICAgICAgIGF0dGFjaExvYWRFdmVudChpZnJhbWUsIGZ1bmN0aW9uKHJlc3BvbnNlRnJvbU1lc3NhZ2UpewogICAgICAgICAgICAgICAgbG9nKCdpZnJhbWUgbG9hZGVkJyk7CgogICAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlID0gcmVzcG9uc2VGcm9tTWVzc2FnZSA/IHJlc3BvbnNlRnJvbU1lc3NhZ2UgOiBnZXRJZnJhbWVDb250ZW50SnNvbihpZnJhbWUpOwoKICAgICAgICAgICAgICAgIGRldGFjaExvYWRFdmVudChpZCk7CgogICAgICAgICAgICAgICAgLy93ZSBjYW4ndCByZW1vdmUgYW4gaWZyYW1lIGlmIHRoZSBpZnJhbWUgZG9lc24ndCBiZWxvbmcgdG8gdGhlIHNhbWUgZG9tYWluCiAgICAgICAgICAgICAgICBpZiAoIW9wdGlvbnMuY29ycy5leHBlY3RlZCkgewogICAgICAgICAgICAgICAgICAgIHFxKGlmcmFtZSkucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25BdXRvUmV0cnkoaWQsIGZpbGVOYW1lLCByZXNwb25zZSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG9wdGlvbnMub25Db21wbGV0ZShpZCwgZmlsZU5hbWUsIHJlc3BvbnNlKTsKICAgICAgICAgICAgICAgIHVwbG9hZENvbXBsZXRlKGlkKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBsb2coJ1NlbmRpbmcgdXBsb2FkIHJlcXVlc3QgZm9yICcgKyBpZCk7CiAgICAgICAgICAgIGZvcm0uc3VibWl0KCk7CiAgICAgICAgICAgIHFxKGZvcm0pLnJlbW92ZSgpOwoKICAgICAgICAgICAgcmV0dXJuIGlkOwogICAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIGFwaTsKfTsKLypnbG9iYWxzIHFxLCBGaWxlLCBYTUxIdHRwUmVxdWVzdCwgRm9ybURhdGEsIEJsb2IqLwpxcS5VcGxvYWRIYW5kbGVyWGhyID0gZnVuY3Rpb24obywgdXBsb2FkQ29tcGxldGVDYWxsYmFjaywgbG9nQ2FsbGJhY2spIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIAogICAgdmFyIG9wdGlvbnMgPSBvLAogICAgICAgIHVwbG9hZENvbXBsZXRlID0gdXBsb2FkQ29tcGxldGVDYWxsYmFjaywKICAgICAgICBsb2cgPSBsb2dDYWxsYmFjaywKICAgICAgICBmaWxlU3RhdGUgPSBbXSwKICAgICAgICBjb29raWVJdGVtRGVsaW1pdGVyID0gInwiLAogICAgICAgIGNodW5rRmlsZXMgPSBvcHRpb25zLmNodW5raW5nLmVuYWJsZWQgJiYgcXEuaXNGaWxlQ2h1bmtpbmdTdXBwb3J0ZWQoKSwKICAgICAgICByZXN1bWVFbmFibGVkID0gb3B0aW9ucy5yZXN1bWUuZW5hYmxlZCAmJiBjaHVua0ZpbGVzICYmIHFxLmFyZUNvb2tpZXNFbmFibGVkKCksCiAgICAgICAgcmVzdW1lSWQgPSBnZXRSZXN1bWVJZCgpLAogICAgICAgIG11bHRpcGFydCA9IG9wdGlvbnMuZm9yY2VNdWx0aXBhcnQgfHwgb3B0aW9ucy5wYXJhbXNJbkJvZHksCiAgICAgICAgYXBpOwoKCiAgICAgZnVuY3Rpb24gYWRkQ2h1bmtpbmdTcGVjaWZpY1BhcmFtcyhpZCwgcGFyYW1zLCBjaHVua0RhdGEpIHsKICAgICAgICB2YXIgc2l6ZSA9IGFwaS5nZXRTaXplKGlkKSwKICAgICAgICAgICAgbmFtZSA9IGFwaS5nZXROYW1lKGlkKTsKCiAgICAgICAgcGFyYW1zW29wdGlvbnMuY2h1bmtpbmcucGFyYW1OYW1lcy5wYXJ0SW5kZXhdID0gY2h1bmtEYXRhLnBhcnQ7CiAgICAgICAgcGFyYW1zW29wdGlvbnMuY2h1bmtpbmcucGFyYW1OYW1lcy5wYXJ0Qnl0ZU9mZnNldF0gPSBjaHVua0RhdGEuc3RhcnQ7CiAgICAgICAgcGFyYW1zW29wdGlvbnMuY2h1bmtpbmcucGFyYW1OYW1lcy5jaHVua1NpemVdID0gY2h1bmtEYXRhLnNpemU7CiAgICAgICAgcGFyYW1zW29wdGlvbnMuY2h1bmtpbmcucGFyYW1OYW1lcy50b3RhbFBhcnRzXSA9IGNodW5rRGF0YS5jb3VudDsKICAgICAgICBwYXJhbXNbb3B0aW9ucy50b3RhbEZpbGVTaXplUGFyYW1OYW1lXSA9IHNpemU7CgogICAgICAgIC8qKgogICAgICAgICAqIFdoZW4gYSBCbG9iIGlzIHNlbnQgaW4gYSBtdWx0aXBhcnQgcmVxdWVzdCwgdGhlIGZpbGVuYW1lIHZhbHVlIGluIHRoZSBjb250ZW50LWRpc3Bvc2l0aW9uIGhlYWRlciBpcyBlaXRoZXIgImJsb2IiCiAgICAgICAgICogb3IgYW4gZW1wdHkgc3RyaW5nLiAgU28sIHdlIHdpbGwgbmVlZCB0byBpbmNsdWRlIHRoZSBhY3R1YWwgZmlsZSBuYW1lIGFzIGEgcGFyYW0gaW4gdGhpcyBjYXNlLgogICAgICAgICAqLwogICAgICAgIGlmIChtdWx0aXBhcnQpIHsKICAgICAgICAgICAgcGFyYW1zW29wdGlvbnMuY2h1bmtpbmcucGFyYW1OYW1lcy5maWxlbmFtZV0gPSBuYW1lOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBhZGRSZXN1bWVTcGVjaWZpY1BhcmFtcyhwYXJhbXMpIHsKICAgICAgICBwYXJhbXNbb3B0aW9ucy5yZXN1bWUucGFyYW1OYW1lcy5yZXN1bWluZ10gPSB0cnVlOwogICAgfQoKICAgICBmdW5jdGlvbiBnZXRDaHVuayhmaWxlT3JCbG9iLCBzdGFydEJ5dGUsIGVuZEJ5dGUpIHsKICAgICAgICBpZiAoZmlsZU9yQmxvYi5zbGljZSkgewogICAgICAgICAgICByZXR1cm4gZmlsZU9yQmxvYi5zbGljZShzdGFydEJ5dGUsIGVuZEJ5dGUpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmaWxlT3JCbG9iLm1velNsaWNlKSB7CiAgICAgICAgICAgIHJldHVybiBmaWxlT3JCbG9iLm1velNsaWNlKHN0YXJ0Qnl0ZSwgZW5kQnl0ZSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGZpbGVPckJsb2Iud2Via2l0U2xpY2UpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbGVPckJsb2Iud2Via2l0U2xpY2Uoc3RhcnRCeXRlLCBlbmRCeXRlKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Q2h1bmtEYXRhKGlkLCBjaHVua0luZGV4KSB7CiAgICAgICAgdmFyIGNodW5rU2l6ZSA9IG9wdGlvbnMuY2h1bmtpbmcucGFydFNpemUsCiAgICAgICAgICAgIGZpbGVTaXplID0gYXBpLmdldFNpemUoaWQpLAogICAgICAgICAgICBmaWxlT3JCbG9iID0gZmlsZVN0YXRlW2lkXS5maWxlIHx8IGZpbGVTdGF0ZVtpZF0uYmxvYkRhdGEuYmxvYiwKICAgICAgICAgICAgc3RhcnRCeXRlcyA9IGNodW5rU2l6ZSAqIGNodW5rSW5kZXgsCiAgICAgICAgICAgIGVuZEJ5dGVzID0gc3RhcnRCeXRlcytjaHVua1NpemUgPj0gZmlsZVNpemUgPyBmaWxlU2l6ZSA6IHN0YXJ0Qnl0ZXMrY2h1bmtTaXplLAogICAgICAgICAgICB0b3RhbENodW5rcyA9IGdldFRvdGFsQ2h1bmtzKGlkKTsKCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcGFydDogY2h1bmtJbmRleCwKICAgICAgICAgICAgc3RhcnQ6IHN0YXJ0Qnl0ZXMsCiAgICAgICAgICAgIGVuZDogZW5kQnl0ZXMsCiAgICAgICAgICAgIGNvdW50OiB0b3RhbENodW5rcywKICAgICAgICAgICAgYmxvYjogZ2V0Q2h1bmsoZmlsZU9yQmxvYiwgc3RhcnRCeXRlcywgZW5kQnl0ZXMpLAogICAgICAgICAgICBzaXplOiBlbmRCeXRlcyAtIHN0YXJ0Qnl0ZXMKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFRvdGFsQ2h1bmtzKGlkKSB7CiAgICAgICAgdmFyIGZpbGVTaXplID0gYXBpLmdldFNpemUoaWQpLAogICAgICAgICAgICBjaHVua1NpemUgPSBvcHRpb25zLmNodW5raW5nLnBhcnRTaXplOwoKICAgICAgICByZXR1cm4gTWF0aC5jZWlsKGZpbGVTaXplIC8gY2h1bmtTaXplKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjcmVhdGVYaHIoaWQpIHsKICAgICAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CgogICAgICAgIGZpbGVTdGF0ZVtpZF0ueGhyID0geGhyOwoKICAgICAgICByZXR1cm4geGhyOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldFBhcmFtc0FuZEdldEVudGl0eVRvU2VuZChwYXJhbXMsIHhociwgZmlsZU9yQmxvYiwgaWQpIHsKICAgICAgICB2YXIgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKSwKICAgICAgICAgICAgbWV0aG9kID0gb3B0aW9ucy5kZW1vTW9kZSA/ICJHRVQiIDogIlBPU1QiLAogICAgICAgICAgICBlbmRwb2ludCA9IG9wdGlvbnMuZW5kcG9pbnRTdG9yZS5nZXRFbmRwb2ludChpZCksCiAgICAgICAgICAgIHVybCA9IGVuZHBvaW50LAogICAgICAgICAgICBuYW1lID0gYXBpLmdldE5hbWUoaWQpLAogICAgICAgICAgICBzaXplID0gYXBpLmdldFNpemUoaWQpLAogICAgICAgICAgICBibG9iRGF0YSA9IGZpbGVTdGF0ZVtpZF0uYmxvYkRhdGE7CgogICAgICAgIHBhcmFtc1tvcHRpb25zLnV1aWRQYXJhbU5hbWVdID0gZmlsZVN0YXRlW2lkXS51dWlkOwoKICAgICAgICBpZiAobXVsdGlwYXJ0KSB7CiAgICAgICAgICAgIHBhcmFtc1tvcHRpb25zLnRvdGFsRmlsZVNpemVQYXJhbU5hbWVdID0gc2l6ZTsKCiAgICAgICAgICAgIGlmIChibG9iRGF0YSkgewogICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgKiBXaGVuIGEgQmxvYiBpcyBzZW50IGluIGEgbXVsdGlwYXJ0IHJlcXVlc3QsIHRoZSBmaWxlbmFtZSB2YWx1ZSBpbiB0aGUgY29udGVudC1kaXNwb3NpdGlvbiBoZWFkZXIgaXMgZWl0aGVyICJibG9iIgogICAgICAgICAgICAgICAgICogb3IgYW4gZW1wdHkgc3RyaW5nLiAgU28sIHdlIHdpbGwgbmVlZCB0byBpbmNsdWRlIHRoZSBhY3R1YWwgZmlsZSBuYW1lIGFzIGEgcGFyYW0gaW4gdGhpcyBjYXNlLgogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICBwYXJhbXNbb3B0aW9ucy5ibG9icy5wYXJhbU5hbWVzLm5hbWVdID0gYmxvYkRhdGEubmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy9idWlsZCBxdWVyeSBzdHJpbmcKICAgICAgICBpZiAoIW9wdGlvbnMucGFyYW1zSW5Cb2R5KSB7CiAgICAgICAgICAgIGlmICghbXVsdGlwYXJ0KSB7CiAgICAgICAgICAgICAgICBwYXJhbXNbb3B0aW9ucy5pbnB1dE5hbWVdID0gbmFtZTsKICAgICAgICAgICAgfQogICAgICAgICAgICB1cmwgPSBxcS5vYmoydXJsKHBhcmFtcywgZW5kcG9pbnQpOwogICAgICAgIH0KCiAgICAgICAgeGhyLm9wZW4obWV0aG9kLCB1cmwsIHRydWUpOwoKICAgICAgICBpZiAob3B0aW9ucy5jb3JzLmV4cGVjdGVkICYmIG9wdGlvbnMuY29ycy5zZW5kQ3JlZGVudGlhbHMpIHsKICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICBpZiAobXVsdGlwYXJ0KSB7CiAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmFtc0luQm9keSkgewogICAgICAgICAgICAgICAgcXEub2JqMkZvcm1EYXRhKHBhcmFtcywgZm9ybURhdGEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQob3B0aW9ucy5pbnB1dE5hbWUsIGZpbGVPckJsb2IpOwogICAgICAgICAgICByZXR1cm4gZm9ybURhdGE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmlsZU9yQmxvYjsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRIZWFkZXJzKGlkLCB4aHIpIHsKICAgICAgICB2YXIgZXh0cmFIZWFkZXJzID0gb3B0aW9ucy5jdXN0b21IZWFkZXJzLAogICAgICAgICAgICBmaWxlT3JCbG9iID0gZmlsZVN0YXRlW2lkXS5maWxlIHx8IGZpbGVTdGF0ZVtpZF0uYmxvYkRhdGEuYmxvYjsKCiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCAiWE1MSHR0cFJlcXVlc3QiKTsKICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsICJuby1jYWNoZSIpOwoKICAgICAgICBpZiAoIW11bHRpcGFydCkgewogICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIpOwogICAgICAgICAgICAvL05PVEU6IHJldHVybiBtaW1lIHR5cGUgaW4geGhyIHdvcmtzIG9uIGNocm9tZSAxNi4wLjkgZmlyZWZveCAxMS4wYTIKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoIlgtTWltZS1UeXBlIiwgZmlsZU9yQmxvYi50eXBlKTsKICAgICAgICB9CgogICAgICAgIHFxLmVhY2goZXh0cmFIZWFkZXJzLCBmdW5jdGlvbihuYW1lLCB2YWwpIHsKICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsKTsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBoYW5kbGVDb21wbGV0ZWRJdGVtKGlkLCByZXNwb25zZSwgeGhyKSB7CiAgICAgICAgdmFyIG5hbWUgPSBhcGkuZ2V0TmFtZShpZCksCiAgICAgICAgICAgIHNpemUgPSBhcGkuZ2V0U2l6ZShpZCk7CgogICAgICAgIGZpbGVTdGF0ZVtpZF0uYXR0ZW1wdGluZ1Jlc3VtZSA9IGZhbHNlOwoKICAgICAgICBvcHRpb25zLm9uUHJvZ3Jlc3MoaWQsIG5hbWUsIHNpemUsIHNpemUpOwoKICAgICAgICBvcHRpb25zLm9uQ29tcGxldGUoaWQsIG5hbWUsIHJlc3BvbnNlLCB4aHIpOwogICAgICAgIGRlbGV0ZSBmaWxlU3RhdGVbaWRdLnhocjsKICAgICAgICB1cGxvYWRDb21wbGV0ZShpZCk7CiAgICB9CgogICAgZnVuY3Rpb24gdXBsb2FkTmV4dENodW5rKGlkKSB7CiAgICAgICAgdmFyIGNodW5rSWR4ID0gZmlsZVN0YXRlW2lkXS5yZW1haW5pbmdDaHVua0lkeHNbMF0sCiAgICAgICAgICAgIGNodW5rRGF0YSA9IGdldENodW5rRGF0YShpZCwgY2h1bmtJZHgpLAogICAgICAgICAgICB4aHIgPSBjcmVhdGVYaHIoaWQpLAogICAgICAgICAgICBzaXplID0gYXBpLmdldFNpemUoaWQpLAogICAgICAgICAgICBuYW1lID0gYXBpLmdldE5hbWUoaWQpLAogICAgICAgICAgICB0b1NlbmQsIHBhcmFtczsKCiAgICAgICAgaWYgKGZpbGVTdGF0ZVtpZF0ubG9hZGVkID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgZmlsZVN0YXRlW2lkXS5sb2FkZWQgPSAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKHJlc3VtZUVuYWJsZWQgJiYgZmlsZVN0YXRlW2lkXS5maWxlKSB7CiAgICAgICAgICAgIHBlcnNpc3RDaHVua0RhdGEoaWQsIGNodW5rRGF0YSk7CiAgICAgICAgfQoKICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZ2V0UmVhZHlTdGF0ZUNoYW5nZUhhbmRsZXIoaWQsIHhocik7CgogICAgICAgIHhoci51cGxvYWQub25wcm9ncmVzcyA9IGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgaWYgKGUubGVuZ3RoQ29tcHV0YWJsZSkgewogICAgICAgICAgICAgICAgdmFyIHRvdGFsTG9hZGVkID0gZS5sb2FkZWQgKyBmaWxlU3RhdGVbaWRdLmxvYWRlZCwKICAgICAgICAgICAgICAgICAgICBlc3RUb3RhbFJlcXVlc3RzU2l6ZSA9IGNhbGNBbGxSZXF1ZXN0c1NpemVGb3JDaHVua2VkVXBsb2FkKGlkLCBjaHVua0lkeCwgZS50b3RhbCk7CgogICAgICAgICAgICAgICAgb3B0aW9ucy5vblByb2dyZXNzKGlkLCBuYW1lLCB0b3RhbExvYWRlZCwgZXN0VG90YWxSZXF1ZXN0c1NpemUpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgb3B0aW9ucy5vblVwbG9hZENodW5rKGlkLCBuYW1lLCBnZXRDaHVua0RhdGFGb3JDYWxsYmFjayhjaHVua0RhdGEpKTsKCiAgICAgICAgcGFyYW1zID0gb3B0aW9ucy5wYXJhbXNTdG9yZS5nZXRQYXJhbXMoaWQpOwogICAgICAgIGFkZENodW5raW5nU3BlY2lmaWNQYXJhbXMoaWQsIHBhcmFtcywgY2h1bmtEYXRhKTsKCiAgICAgICAgaWYgKGZpbGVTdGF0ZVtpZF0uYXR0ZW1wdGluZ1Jlc3VtZSkgewogICAgICAgICAgICBhZGRSZXN1bWVTcGVjaWZpY1BhcmFtcyhwYXJhbXMpOwogICAgICAgIH0KCiAgICAgICAgdG9TZW5kID0gc2V0UGFyYW1zQW5kR2V0RW50aXR5VG9TZW5kKHBhcmFtcywgeGhyLCBjaHVua0RhdGEuYmxvYiwgaWQpOwogICAgICAgIHNldEhlYWRlcnMoaWQsIHhocik7CgogICAgICAgIGxvZygnU2VuZGluZyBjaHVua2VkIHVwbG9hZCByZXF1ZXN0IGZvciBpdGVtICcgKyBpZCArICI6IGJ5dGVzICIgKyAoY2h1bmtEYXRhLnN0YXJ0KzEpICsgIi0iICsgY2h1bmtEYXRhLmVuZCArICIgb2YgIiArIHNpemUpOwogICAgICAgIHhoci5zZW5kKHRvU2VuZCk7CiAgICB9CgogICAgZnVuY3Rpb24gY2FsY0FsbFJlcXVlc3RzU2l6ZUZvckNodW5rZWRVcGxvYWQoaWQsIGNodW5rSWR4LCByZXF1ZXN0U2l6ZSkgewogICAgICAgIHZhciBjaHVua0RhdGEgPSBnZXRDaHVua0RhdGEoaWQsIGNodW5rSWR4KSwKICAgICAgICAgICAgYmxvYlNpemUgPSBjaHVua0RhdGEuc2l6ZSwKICAgICAgICAgICAgb3ZlcmhlYWQgPSByZXF1ZXN0U2l6ZSAtIGJsb2JTaXplLAogICAgICAgICAgICBzaXplID0gYXBpLmdldFNpemUoaWQpLAogICAgICAgICAgICBjaHVua0NvdW50ID0gY2h1bmtEYXRhLmNvdW50LAogICAgICAgICAgICBpbml0aWFsUmVxdWVzdE92ZXJoZWFkID0gZmlsZVN0YXRlW2lkXS5pbml0aWFsUmVxdWVzdE92ZXJoZWFkLAogICAgICAgICAgICBvdmVyaGVhZERpZmYgPSBvdmVyaGVhZCAtIGluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQ7CgogICAgICAgIGZpbGVTdGF0ZVtpZF0ubGFzdFJlcXVlc3RPdmVyaGVhZCA9IG92ZXJoZWFkOwoKICAgICAgICBpZiAoY2h1bmtJZHggPT09IDApIHsKICAgICAgICAgICAgZmlsZVN0YXRlW2lkXS5sYXN0Q2h1bmtJZHhQcm9ncmVzcyA9IDA7CiAgICAgICAgICAgIGZpbGVTdGF0ZVtpZF0uaW5pdGlhbFJlcXVlc3RPdmVyaGVhZCA9IG92ZXJoZWFkOwogICAgICAgICAgICBmaWxlU3RhdGVbaWRdLmVzdFRvdGFsUmVxdWVzdHNTaXplID0gc2l6ZSArIChjaHVua0NvdW50ICogb3ZlcmhlYWQpOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChmaWxlU3RhdGVbaWRdLmxhc3RDaHVua0lkeFByb2dyZXNzICE9PSBjaHVua0lkeCkgewogICAgICAgICAgICBmaWxlU3RhdGVbaWRdLmxhc3RDaHVua0lkeFByb2dyZXNzID0gY2h1bmtJZHg7CiAgICAgICAgICAgIGZpbGVTdGF0ZVtpZF0uZXN0VG90YWxSZXF1ZXN0c1NpemUgKz0gb3ZlcmhlYWREaWZmOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZpbGVTdGF0ZVtpZF0uZXN0VG90YWxSZXF1ZXN0c1NpemU7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TGFzdFJlcXVlc3RPdmVyaGVhZChpZCkgewogICAgICAgIGlmIChtdWx0aXBhcnQpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbGVTdGF0ZVtpZF0ubGFzdFJlcXVlc3RPdmVyaGVhZDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBoYW5kbGVTdWNjZXNzZnVsbHlDb21wbGV0ZWRDaHVuayhpZCwgcmVzcG9uc2UsIHhocikgewogICAgICAgIHZhciBjaHVua0lkeCA9IGZpbGVTdGF0ZVtpZF0ucmVtYWluaW5nQ2h1bmtJZHhzLnNoaWZ0KCksCiAgICAgICAgICAgIGNodW5rRGF0YSA9IGdldENodW5rRGF0YShpZCwgY2h1bmtJZHgpOwoKICAgICAgICBmaWxlU3RhdGVbaWRdLmF0dGVtcHRpbmdSZXN1bWUgPSBmYWxzZTsKICAgICAgICBmaWxlU3RhdGVbaWRdLmxvYWRlZCArPSBjaHVua0RhdGEuc2l6ZSArIGdldExhc3RSZXF1ZXN0T3ZlcmhlYWQoaWQpOwoKICAgICAgICBpZiAoZmlsZVN0YXRlW2lkXS5yZW1haW5pbmdDaHVua0lkeHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICB1cGxvYWROZXh0Q2h1bmsoaWQpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKHJlc3VtZUVuYWJsZWQpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZVBlcnNpc3RlZENodW5rRGF0YShpZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGhhbmRsZUNvbXBsZXRlZEl0ZW0oaWQsIHJlc3BvbnNlLCB4aHIpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBpc0Vycm9yUmVzcG9uc2UoeGhyLCByZXNwb25zZSkgewogICAgICAgIHJldHVybiB4aHIuc3RhdHVzICE9PSAyMDAgfHwgIXJlc3BvbnNlLnN1Y2Nlc3MgfHwgcmVzcG9uc2UucmVzZXQ7CiAgICB9CgogICAgZnVuY3Rpb24gcGFyc2VSZXNwb25zZSh4aHIpIHsKICAgICAgICB2YXIgcmVzcG9uc2U7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJlc3BvbnNlID0gcXEucGFyc2VKc29uKHhoci5yZXNwb25zZVRleHQpOwogICAgICAgIH0KICAgICAgICBjYXRjaChlcnJvcikgewogICAgICAgICAgICBsb2coJ0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBwYXJzZSB4aHIgcmVzcG9uc2UgdGV4dCAoJyArIGVycm9yICsgJyknLCAnZXJyb3InKTsKICAgICAgICAgICAgcmVzcG9uc2UgPSB7fTsKICAgICAgICB9CgogICAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0KCiAgICBmdW5jdGlvbiBoYW5kbGVSZXNldFJlc3BvbnNlKGlkKSB7CiAgICAgICAgbG9nKCdTZXJ2ZXIgaGFzIG9yZGVyZWQgY2h1bmtpbmcgZWZmb3J0IHRvIGJlIHJlc3RhcnRlZCBvbiBuZXh0IGF0dGVtcHQgZm9yIGl0ZW0gSUQgJyArIGlkLCAnZXJyb3InKTsKCiAgICAgICAgaWYgKHJlc3VtZUVuYWJsZWQpIHsKICAgICAgICAgICAgZGVsZXRlUGVyc2lzdGVkQ2h1bmtEYXRhKGlkKTsKICAgICAgICAgICAgZmlsZVN0YXRlW2lkXS5hdHRlbXB0aW5nUmVzdW1lID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmaWxlU3RhdGVbaWRdLnJlbWFpbmluZ0NodW5rSWR4cyA9IFtdOwogICAgICAgIGRlbGV0ZSBmaWxlU3RhdGVbaWRdLmxvYWRlZDsKICAgICAgICBkZWxldGUgZmlsZVN0YXRlW2lkXS5lc3RUb3RhbFJlcXVlc3RzU2l6ZTsKICAgICAgICBkZWxldGUgZmlsZVN0YXRlW2lkXS5pbml0aWFsUmVxdWVzdE92ZXJoZWFkOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhbmRsZVJlc2V0UmVzcG9uc2VPblJlc3VtZUF0dGVtcHQoaWQpIHsKICAgICAgICBmaWxlU3RhdGVbaWRdLmF0dGVtcHRpbmdSZXN1bWUgPSBmYWxzZTsKICAgICAgICBsb2coIlNlcnZlciBoYXMgZGVjbGFyZWQgdGhhdCBpdCBjYW5ub3QgaGFuZGxlIHJlc3VtZSBmb3IgaXRlbSBJRCAiICsgaWQgKyAiIC0gc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY2h1bmsiLCAnZXJyb3InKTsKICAgICAgICBoYW5kbGVSZXNldFJlc3BvbnNlKGlkKTsKICAgICAgICBhcGkudXBsb2FkKGlkLCB0cnVlKTsKICAgIH0KCiAgICBmdW5jdGlvbiBoYW5kbGVOb25SZXNldEVycm9yUmVzcG9uc2UoaWQsIHJlc3BvbnNlLCB4aHIpIHsKICAgICAgICB2YXIgbmFtZSA9IGFwaS5nZXROYW1lKGlkKTsKCiAgICAgICAgaWYgKG9wdGlvbnMub25BdXRvUmV0cnkoaWQsIG5hbWUsIHJlc3BvbnNlLCB4aHIpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGhhbmRsZUNvbXBsZXRlZEl0ZW0oaWQsIHJlc3BvbnNlLCB4aHIpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBvbkNvbXBsZXRlKGlkLCB4aHIpIHsKICAgICAgICB2YXIgcmVzcG9uc2U7CgogICAgICAgIC8vIHRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkL2NhbmNlbGxlZAogICAgICAgIGlmICghZmlsZVN0YXRlW2lkXSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBsb2coInhociAtIHNlcnZlciByZXNwb25zZSByZWNlaXZlZCBmb3IgIiArIGlkKTsKICAgICAgICBsb2coInJlc3BvbnNlVGV4dCA9ICIgKyB4aHIucmVzcG9uc2VUZXh0KTsKICAgICAgICByZXNwb25zZSA9IHBhcnNlUmVzcG9uc2UoeGhyKTsKCiAgICAgICAgaWYgKGlzRXJyb3JSZXNwb25zZSh4aHIsIHJlc3BvbnNlKSkgewogICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzZXQpIHsKICAgICAgICAgICAgICAgIGhhbmRsZVJlc2V0UmVzcG9uc2UoaWQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoZmlsZVN0YXRlW2lkXS5hdHRlbXB0aW5nUmVzdW1lICYmIHJlc3BvbnNlLnJlc2V0KSB7CiAgICAgICAgICAgICAgICBoYW5kbGVSZXNldFJlc3BvbnNlT25SZXN1bWVBdHRlbXB0KGlkKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIGhhbmRsZU5vblJlc2V0RXJyb3JSZXNwb25zZShpZCwgcmVzcG9uc2UsIHhocik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY2h1bmtGaWxlcykgewogICAgICAgICAgICBoYW5kbGVTdWNjZXNzZnVsbHlDb21wbGV0ZWRDaHVuayhpZCwgcmVzcG9uc2UsIHhocik7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBoYW5kbGVDb21wbGV0ZWRJdGVtKGlkLCByZXNwb25zZSwgeGhyKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Q2h1bmtEYXRhRm9yQ2FsbGJhY2soY2h1bmtEYXRhKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcGFydEluZGV4OiBjaHVua0RhdGEucGFydCwKICAgICAgICAgICAgc3RhcnRCeXRlOiBjaHVua0RhdGEuc3RhcnQgKyAxLAogICAgICAgICAgICBlbmRCeXRlOiBjaHVua0RhdGEuZW5kLAogICAgICAgICAgICB0b3RhbFBhcnRzOiBjaHVua0RhdGEuY291bnQKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJlYWR5U3RhdGVDaGFuZ2VIYW5kbGVyKGlkLCB4aHIpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PT0gNCkgewogICAgICAgICAgICAgICAgb25Db21wbGV0ZShpZCwgeGhyKTsKICAgICAgICAgICAgfQogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gcGVyc2lzdENodW5rRGF0YShpZCwgY2h1bmtEYXRhKSB7CiAgICAgICAgdmFyIGZpbGVVdWlkID0gYXBpLmdldFV1aWQoaWQpLAogICAgICAgICAgICBsYXN0Qnl0ZVNlbnQgPSBmaWxlU3RhdGVbaWRdLmxvYWRlZCwKICAgICAgICAgICAgaW5pdGlhbFJlcXVlc3RPdmVyaGVhZCA9IGZpbGVTdGF0ZVtpZF0uaW5pdGlhbFJlcXVlc3RPdmVyaGVhZCwKICAgICAgICAgICAgZXN0VG90YWxSZXF1ZXN0c1NpemUgPSBmaWxlU3RhdGVbaWRdLmVzdFRvdGFsUmVxdWVzdHNTaXplLAogICAgICAgICAgICBjb29raWVOYW1lID0gZ2V0Q2h1bmtEYXRhQ29va2llTmFtZShpZCksCiAgICAgICAgICAgIGNvb2tpZVZhbHVlID0gZmlsZVV1aWQgKwogICAgICAgICAgICAgICAgY29va2llSXRlbURlbGltaXRlciArIGNodW5rRGF0YS5wYXJ0ICsKICAgICAgICAgICAgICAgIGNvb2tpZUl0ZW1EZWxpbWl0ZXIgKyBsYXN0Qnl0ZVNlbnQgKwogICAgICAgICAgICAgICAgY29va2llSXRlbURlbGltaXRlciArIGluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQgKwogICAgICAgICAgICAgICAgY29va2llSXRlbURlbGltaXRlciArIGVzdFRvdGFsUmVxdWVzdHNTaXplLAogICAgICAgICAgICBjb29raWVFeHBEYXlzID0gb3B0aW9ucy5yZXN1bWUuY29va2llc0V4cGlyZUluOwoKICAgICAgICBxcS5zZXRDb29raWUoY29va2llTmFtZSwgY29va2llVmFsdWUsIGNvb2tpZUV4cERheXMpOwogICAgfQoKICAgIGZ1bmN0aW9uIGRlbGV0ZVBlcnNpc3RlZENodW5rRGF0YShpZCkgewogICAgICAgIGlmIChmaWxlU3RhdGVbaWRdLmZpbGUpIHsKICAgICAgICAgICAgdmFyIGNvb2tpZU5hbWUgPSBnZXRDaHVua0RhdGFDb29raWVOYW1lKGlkKTsKICAgICAgICAgICAgcXEuZGVsZXRlQ29va2llKGNvb2tpZU5hbWUpOwogICAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBnZXRQZXJzaXN0ZWRDaHVua0RhdGEoaWQpIHsKICAgICAgICB2YXIgY2h1bmtDb29raWVWYWx1ZSA9IHFxLmdldENvb2tpZShnZXRDaHVua0RhdGFDb29raWVOYW1lKGlkKSksCiAgICAgICAgICAgIGZpbGVuYW1lID0gYXBpLmdldE5hbWUoaWQpLAogICAgICAgICAgICBzZWN0aW9ucywgdXVpZCwgcGFydEluZGV4LCBsYXN0Qnl0ZVNlbnQsIGluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQsIGVzdFRvdGFsUmVxdWVzdHNTaXplOwoKICAgICAgICBpZiAoY2h1bmtDb29raWVWYWx1ZSkgewogICAgICAgICAgICBzZWN0aW9ucyA9IGNodW5rQ29va2llVmFsdWUuc3BsaXQoY29va2llSXRlbURlbGltaXRlcik7CgogICAgICAgICAgICBpZiAoc2VjdGlvbnMubGVuZ3RoID09PSA1KSB7CiAgICAgICAgICAgICAgICB1dWlkID0gc2VjdGlvbnNbMF07CiAgICAgICAgICAgICAgICBwYXJ0SW5kZXggPSBwYXJzZUludChzZWN0aW9uc1sxXSwgMTApOwogICAgICAgICAgICAgICAgbGFzdEJ5dGVTZW50ID0gcGFyc2VJbnQoc2VjdGlvbnNbMl0sIDEwKTsKICAgICAgICAgICAgICAgIGluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQgPSBwYXJzZUludChzZWN0aW9uc1szXSwgMTApOwogICAgICAgICAgICAgICAgZXN0VG90YWxSZXF1ZXN0c1NpemUgPSBwYXJzZUludChzZWN0aW9uc1s0XSwgMTApOwoKICAgICAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICAgICAgICAgICAgICBwYXJ0OiBwYXJ0SW5kZXgsCiAgICAgICAgICAgICAgICAgICAgbGFzdEJ5dGVTZW50OiBsYXN0Qnl0ZVNlbnQsCiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFJlcXVlc3RPdmVyaGVhZDogaW5pdGlhbFJlcXVlc3RPdmVyaGVhZCwKICAgICAgICAgICAgICAgICAgICBlc3RUb3RhbFJlcXVlc3RzU2l6ZTogZXN0VG90YWxSZXF1ZXN0c1NpemUKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBsb2coJ0lnbm9yaW5nIHByZXZpb3VzbHkgc3RvcmVkIHJlc3VtZS9jaHVuayBjb29raWUgZm9yICcgKyBmaWxlbmFtZSArICIgLSBvbGQgY29va2llIGZvcm1hdCIsICJ3YXJuIik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Q2h1bmtEYXRhQ29va2llTmFtZShpZCkgewogICAgICAgIHZhciBmaWxlbmFtZSA9IGFwaS5nZXROYW1lKGlkKSwKICAgICAgICAgICAgZmlsZVNpemUgPSBhcGkuZ2V0U2l6ZShpZCksCiAgICAgICAgICAgIG1heENodW5rU2l6ZSA9IG9wdGlvbnMuY2h1bmtpbmcucGFydFNpemUsCiAgICAgICAgICAgIGNvb2tpZU5hbWU7CgogICAgICAgIGNvb2tpZU5hbWUgPSAicXFmaWxlY2h1bmsiICsgY29va2llSXRlbURlbGltaXRlciArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSkgKyBjb29raWVJdGVtRGVsaW1pdGVyICsgZmlsZVNpemUgKyBjb29raWVJdGVtRGVsaW1pdGVyICsgbWF4Q2h1bmtTaXplOwoKICAgICAgICBpZiAocmVzdW1lSWQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICBjb29raWVOYW1lICs9IGNvb2tpZUl0ZW1EZWxpbWl0ZXIgKyByZXN1bWVJZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBjb29raWVOYW1lOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJlc3VtZUlkKCkgewogICAgICAgIGlmIChvcHRpb25zLnJlc3VtZS5pZCAhPT0gbnVsbCAmJgogICAgICAgICAgICBvcHRpb25zLnJlc3VtZS5pZCAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgICAgICFxcS5pc0Z1bmN0aW9uKG9wdGlvbnMucmVzdW1lLmlkKSAmJgogICAgICAgICAgICAhcXEuaXNPYmplY3Qob3B0aW9ucy5yZXN1bWUuaWQpKSB7CgogICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZXN1bWUuaWQ7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGhhbmRsZUZpbGVDaHVua2luZ1VwbG9hZChpZCwgcmV0cnkpIHsKICAgICAgICB2YXIgbmFtZSA9IGFwaS5nZXROYW1lKGlkKSwKICAgICAgICAgICAgZmlyc3RDaHVua0luZGV4ID0gMCwKICAgICAgICAgICAgcGVyc2lzdGVkQ2h1bmtJbmZvRm9yUmVzdW1lLCBmaXJzdENodW5rRGF0YUZvclJlc3VtZSwgY3VycmVudENodW5rSW5kZXg7CgogICAgICAgIGlmICghZmlsZVN0YXRlW2lkXS5yZW1haW5pbmdDaHVua0lkeHMgfHwgZmlsZVN0YXRlW2lkXS5yZW1haW5pbmdDaHVua0lkeHMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIGZpbGVTdGF0ZVtpZF0ucmVtYWluaW5nQ2h1bmtJZHhzID0gW107CgogICAgICAgICAgICBpZiAocmVzdW1lRW5hYmxlZCAmJiAhcmV0cnkgJiYgZmlsZVN0YXRlW2lkXS5maWxlKSB7CiAgICAgICAgICAgICAgICBwZXJzaXN0ZWRDaHVua0luZm9Gb3JSZXN1bWUgPSBnZXRQZXJzaXN0ZWRDaHVua0RhdGEoaWQpOwogICAgICAgICAgICAgICAgaWYgKHBlcnNpc3RlZENodW5rSW5mb0ZvclJlc3VtZSkgewogICAgICAgICAgICAgICAgICAgIGZpcnN0Q2h1bmtEYXRhRm9yUmVzdW1lID0gZ2V0Q2h1bmtEYXRhKGlkLCBwZXJzaXN0ZWRDaHVua0luZm9Gb3JSZXN1bWUucGFydCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25SZXN1bWUoaWQsIG5hbWUsIGdldENodW5rRGF0YUZvckNhbGxiYWNrKGZpcnN0Q2h1bmtEYXRhRm9yUmVzdW1lKSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q2h1bmtJbmRleCA9IHBlcnNpc3RlZENodW5rSW5mb0ZvclJlc3VtZS5wYXJ0OwogICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3RhdGVbaWRdLnV1aWQgPSBwZXJzaXN0ZWRDaHVua0luZm9Gb3JSZXN1bWUudXVpZDsKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVN0YXRlW2lkXS5sb2FkZWQgPSBwZXJzaXN0ZWRDaHVua0luZm9Gb3JSZXN1bWUubGFzdEJ5dGVTZW50OwogICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3RhdGVbaWRdLmVzdFRvdGFsUmVxdWVzdHNTaXplID0gcGVyc2lzdGVkQ2h1bmtJbmZvRm9yUmVzdW1lLmVzdFRvdGFsUmVxdWVzdHNTaXplOwogICAgICAgICAgICAgICAgICAgICAgICBmaWxlU3RhdGVbaWRdLmluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQgPSBwZXJzaXN0ZWRDaHVua0luZm9Gb3JSZXN1bWUuaW5pdGlhbFJlcXVlc3RPdmVyaGVhZDsKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVN0YXRlW2lkXS5hdHRlbXB0aW5nUmVzdW1lID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCdSZXN1bWluZyAnICsgbmFtZSArICIgYXQgcGFydGl0aW9uIGluZGV4ICIgKyBmaXJzdENodW5rSW5kZXgpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChjdXJyZW50Q2h1bmtJbmRleCA9IGdldFRvdGFsQ2h1bmtzKGlkKS0xOyBjdXJyZW50Q2h1bmtJbmRleCA+PSBmaXJzdENodW5rSW5kZXg7IGN1cnJlbnRDaHVua0luZGV4LT0xKSB7CiAgICAgICAgICAgICAgICBmaWxlU3RhdGVbaWRdLnJlbWFpbmluZ0NodW5rSWR4cy51bnNoaWZ0KGN1cnJlbnRDaHVua0luZGV4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdXBsb2FkTmV4dENodW5rKGlkKTsKICAgIH0KCiAgICBmdW5jdGlvbiBoYW5kbGVTdGFuZGFyZEZpbGVVcGxvYWQoaWQpIHsKICAgICAgICB2YXIgZmlsZU9yQmxvYiA9IGZpbGVTdGF0ZVtpZF0uZmlsZSB8fCBmaWxlU3RhdGVbaWRdLmJsb2JEYXRhLmJsb2IsCiAgICAgICAgICAgIG5hbWUgPSBhcGkuZ2V0TmFtZShpZCksCiAgICAgICAgICAgIHhociwgcGFyYW1zLCB0b1NlbmQ7CgogICAgICAgIGZpbGVTdGF0ZVtpZF0ubG9hZGVkID0gMDsKCiAgICAgICAgeGhyID0gY3JlYXRlWGhyKGlkKTsKCiAgICAgICAgeGhyLnVwbG9hZC5vbnByb2dyZXNzID0gZnVuY3Rpb24oZSl7CiAgICAgICAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpewogICAgICAgICAgICAgICAgZmlsZVN0YXRlW2lkXS5sb2FkZWQgPSBlLmxvYWRlZDsKICAgICAgICAgICAgICAgIG9wdGlvbnMub25Qcm9ncmVzcyhpZCwgbmFtZSwgZS5sb2FkZWQsIGUudG90YWwpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGdldFJlYWR5U3RhdGVDaGFuZ2VIYW5kbGVyKGlkLCB4aHIpOwoKICAgICAgICBwYXJhbXMgPSBvcHRpb25zLnBhcmFtc1N0b3JlLmdldFBhcmFtcyhpZCk7CiAgICAgICAgdG9TZW5kID0gc2V0UGFyYW1zQW5kR2V0RW50aXR5VG9TZW5kKHBhcmFtcywgeGhyLCBmaWxlT3JCbG9iLCBpZCk7CiAgICAgICAgc2V0SGVhZGVycyhpZCwgeGhyKTsKCiAgICAgICAgbG9nKCdTZW5kaW5nIHVwbG9hZCByZXF1ZXN0IGZvciAnICsgaWQpOwogICAgICAgIHhoci5zZW5kKHRvU2VuZCk7CiAgICB9CgoKICAgIGFwaSA9IHsKICAgICAgICAvKioKICAgICAgICAgKiBBZGRzIEZpbGUgb3IgQmxvYiB0byB0aGUgcXVldWUKICAgICAgICAgKiBSZXR1cm5zIGlkIHRvIHVzZSB3aXRoIHVwbG9hZCwgY2FuY2VsCiAgICAgICAgICoqLwogICAgICAgIGFkZDogZnVuY3Rpb24oZmlsZU9yQmxvYkRhdGEpewogICAgICAgICAgICB2YXIgaWQ7CgogICAgICAgICAgICBpZiAoZmlsZU9yQmxvYkRhdGEgaW5zdGFuY2VvZiBGaWxlKSB7CiAgICAgICAgICAgICAgICBpZCA9IGZpbGVTdGF0ZS5wdXNoKHtmaWxlOiBmaWxlT3JCbG9iRGF0YX0pIC0gMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmIChmaWxlT3JCbG9iRGF0YS5ibG9iIGluc3RhbmNlb2YgQmxvYikgewogICAgICAgICAgICAgICAgaWQgPSBmaWxlU3RhdGUucHVzaCh7YmxvYkRhdGE6IGZpbGVPckJsb2JEYXRhfSkgLSAxOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXNzZWQgb2JqIGluIG5vdCBhIEZpbGUgb3IgQmxvYkRhdGEgKGluIHFxLlVwbG9hZEhhbmRsZXJYaHIpJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZpbGVTdGF0ZVtpZF0udXVpZCA9IHFxLmdldFVuaXF1ZUlkKCk7CiAgICAgICAgICAgIHJldHVybiBpZDsKICAgICAgICB9LAogICAgICAgIGdldE5hbWU6IGZ1bmN0aW9uKGlkKXsKICAgICAgICAgICAgaWYgKGFwaS5pc1ZhbGlkKGlkKSkgewogICAgICAgICAgICAgICAgdmFyIGZpbGUgPSBmaWxlU3RhdGVbaWRdLmZpbGUsCiAgICAgICAgICAgICAgICAgICAgYmxvYkRhdGEgPSBmaWxlU3RhdGVbaWRdLmJsb2JEYXRhOwoKICAgICAgICAgICAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZml4IG1pc3NpbmcgbmFtZSBpbiBTYWZhcmkgNAogICAgICAgICAgICAgICAgICAgIC8vTk9URTogZml4ZWQgbWlzc2luZyBuYW1lIGZpcmVmb3ggMTEuMGEyIGZpbGUuZmlsZU5hbWUgaXMgYWN0dWFsbHkgdW5kZWZpbmVkCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChmaWxlLmZpbGVOYW1lICE9PSBudWxsICYmIGZpbGUuZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkgPyBmaWxlLmZpbGVOYW1lIDogZmlsZS5uYW1lOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2JEYXRhLm5hbWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBsb2coaWQgKyAiIGlzIG5vdCBhIHZhbGlkIGl0ZW0gSUQuIiwgImVycm9yIik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdldFNpemU6IGZ1bmN0aW9uKGlkKXsKICAgICAgICAgICAgLypqc2hpbnQgZXFudWxsOiB0cnVlKi8KICAgICAgICAgICAgdmFyIGZpbGVPckJsb2IgPSBmaWxlU3RhdGVbaWRdLmZpbGUgfHwgZmlsZVN0YXRlW2lkXS5ibG9iRGF0YS5ibG9iOwoKICAgICAgICAgICAgaWYgKHFxLmlzRmlsZU9ySW5wdXQoZmlsZU9yQmxvYikpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaWxlT3JCbG9iLmZpbGVTaXplICE9IG51bGwgPyBmaWxlT3JCbG9iLmZpbGVTaXplIDogZmlsZU9yQmxvYi5zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZpbGVPckJsb2Iuc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZ2V0RmlsZTogZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgaWYgKGZpbGVTdGF0ZVtpZF0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaWxlU3RhdGVbaWRdLmZpbGUgfHwgZmlsZVN0YXRlW2lkXS5ibG9iRGF0YS5ibG9iOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm5zIHVwbG9hZGVkIGJ5dGVzIGZvciBmaWxlIGlkZW50aWZpZWQgYnkgaWQKICAgICAgICAgKi8KICAgICAgICBnZXRMb2FkZWQ6IGZ1bmN0aW9uKGlkKXsKICAgICAgICAgICAgcmV0dXJuIGZpbGVTdGF0ZVtpZF0ubG9hZGVkIHx8IDA7CiAgICAgICAgfSwKICAgICAgICBpc1ZhbGlkOiBmdW5jdGlvbihpZCkgewogICAgICAgICAgICByZXR1cm4gZmlsZVN0YXRlW2lkXSAhPT0gdW5kZWZpbmVkOwogICAgICAgIH0sCiAgICAgICAgcmVzZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBmaWxlU3RhdGUgPSBbXTsKICAgICAgICB9LAogICAgICAgIGdldFV1aWQ6IGZ1bmN0aW9uKGlkKSB7CiAgICAgICAgICAgIHJldHVybiBmaWxlU3RhdGVbaWRdLnV1aWQ7CiAgICAgICAgfSwKICAgICAgICAvKioKICAgICAgICAgKiBTZW5kcyB0aGUgZmlsZSBpZGVudGlmaWVkIGJ5IGlkIHRvIHRoZSBzZXJ2ZXIKICAgICAgICAgKi8KICAgICAgICB1cGxvYWQ6IGZ1bmN0aW9uKGlkLCByZXRyeSl7CiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5nZXROYW1lKGlkKTsKCiAgICAgICAgICAgIG9wdGlvbnMub25VcGxvYWQoaWQsIG5hbWUpOwoKICAgICAgICAgICAgaWYgKGNodW5rRmlsZXMpIHsKICAgICAgICAgICAgICAgIGhhbmRsZUZpbGVDaHVua2luZ1VwbG9hZChpZCwgcmV0cnkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaGFuZGxlU3RhbmRhcmRGaWxlVXBsb2FkKGlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FuY2VsOiBmdW5jdGlvbihpZCl7CiAgICAgICAgICAgIHZhciB4aHIgPSBmaWxlU3RhdGVbaWRdLnhocjsKCiAgICAgICAgICAgIG9wdGlvbnMub25DYW5jZWwoaWQsIHRoaXMuZ2V0TmFtZShpZCkpOwoKICAgICAgICAgICAgaWYgKHhocikgewogICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7CiAgICAgICAgICAgICAgICB4aHIuYWJvcnQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHJlc3VtZUVuYWJsZWQpIHsKICAgICAgICAgICAgICAgIGRlbGV0ZVBlcnNpc3RlZENodW5rRGF0YShpZCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGRlbGV0ZSBmaWxlU3RhdGVbaWRdOwogICAgICAgIH0sCiAgICAgICAgZ2V0UmVzdW1hYmxlRmlsZXNEYXRhOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIG1hdGNoaW5nQ29va2llTmFtZXMgPSBbXSwKICAgICAgICAgICAgICAgIHJlc3VtYWJsZUZpbGVzRGF0YSA9IFtdOwoKICAgICAgICAgICAgaWYgKGNodW5rRmlsZXMgJiYgcmVzdW1lRW5hYmxlZCkgewogICAgICAgICAgICAgICAgaWYgKHJlc3VtZUlkID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ0Nvb2tpZU5hbWVzID0gcXEuZ2V0Q29va2llTmFtZXMobmV3IFJlZ0V4cCgiXnFxZmlsZWNodW5rXFwiICsgY29va2llSXRlbURlbGltaXRlciArICIuK1xcIiArCiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZUl0ZW1EZWxpbWl0ZXIgKyAiXFxkK1xcIiArIGNvb2tpZUl0ZW1EZWxpbWl0ZXIgKyBvcHRpb25zLmNodW5raW5nLnBhcnRTaXplICsgIj0iKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBtYXRjaGluZ0Nvb2tpZU5hbWVzID0gcXEuZ2V0Q29va2llTmFtZXMobmV3IFJlZ0V4cCgiXnFxZmlsZWNodW5rXFwiICsgY29va2llSXRlbURlbGltaXRlciArICIuK1xcIiArCiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZUl0ZW1EZWxpbWl0ZXIgKyAiXFxkK1xcIiArIGNvb2tpZUl0ZW1EZWxpbWl0ZXIgKyBvcHRpb25zLmNodW5raW5nLnBhcnRTaXplICsgIlxcIiArCiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZUl0ZW1EZWxpbWl0ZXIgKyByZXN1bWVJZCArICI9IikpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHFxLmVhY2gobWF0Y2hpbmdDb29raWVOYW1lcywgZnVuY3Rpb24oaWR4LCBjb29raWVOYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNvb2tpZXNOYW1lUGFydHMgPSBjb29raWVOYW1lLnNwbGl0KGNvb2tpZUl0ZW1EZWxpbWl0ZXIpOwogICAgICAgICAgICAgICAgICAgIHZhciBjb29raWVWYWx1ZVBhcnRzID0gcXEuZ2V0Q29va2llKGNvb2tpZU5hbWUpLnNwbGl0KGNvb2tpZUl0ZW1EZWxpbWl0ZXIpOwoKICAgICAgICAgICAgICAgICAgICByZXN1bWFibGVGaWxlc0RhdGEucHVzaCh7CiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGRlY29kZVVSSUNvbXBvbmVudChjb29raWVzTmFtZVBhcnRzWzFdKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZTogY29va2llc05hbWVQYXJ0c1syXSwKICAgICAgICAgICAgICAgICAgICAgICAgdXVpZDogY29va2llVmFsdWVQYXJ0c1swXSwKICAgICAgICAgICAgICAgICAgICAgICAgcGFydElkeDogY29va2llVmFsdWVQYXJ0c1sxXQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VtYWJsZUZpbGVzRGF0YTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQogICAgfTsKCiAgICByZXR1cm4gYXBpOwp9OwovKmdsb2JhbHMgalF1ZXJ5LCBxcSovCihmdW5jdGlvbigkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgdXBsb2FkZXIsICRlbCwgaW5pdCwgZGF0YVN0b3JlLCBwbHVnaW5PcHRpb24sIHBsdWdpbk9wdGlvbnMsIGFkZENhbGxiYWNrcywgdHJhbnNmb3JtVmFyaWFibGVzLCBpc1ZhbGlkQ29tbWFuZCwKICAgICAgICBkZWxlZ2F0ZUNvbW1hbmQ7CgogICAgcGx1Z2luT3B0aW9ucyA9IFsndXBsb2FkZXJUeXBlJ107CgogICAgaW5pdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7CiAgICAgICAgaWYgKG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyIHhmb3JtZWRPcHRzID0gdHJhbnNmb3JtVmFyaWFibGVzKG9wdGlvbnMpOwogICAgICAgICAgICBhZGRDYWxsYmFja3MoeGZvcm1lZE9wdHMpOwoKICAgICAgICAgICAgaWYgKHBsdWdpbk9wdGlvbigndXBsb2FkZXJUeXBlJykgPT09ICdiYXNpYycpIHsKICAgICAgICAgICAgICAgIHVwbG9hZGVyKG5ldyBxcS5GaW5lVXBsb2FkZXJCYXNpYyh4Zm9ybWVkT3B0cykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdXBsb2FkZXIobmV3IHFxLkZpbmVVcGxvYWRlcih4Zm9ybWVkT3B0cykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGVsOwogICAgfTsKCiAgICBkYXRhU3RvcmUgPSBmdW5jdGlvbihrZXksIHZhbCkgewogICAgICAgIHZhciBkYXRhID0gJGVsLmRhdGEoJ2ZpbmV1cGxvYWRlcicpOwoKICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGRhdGEgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgICBkYXRhW2tleV0gPSB2YWw7CiAgICAgICAgICAgICRlbC5kYXRhKCdmaW5ldXBsb2FkZXInLCBkYXRhKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChkYXRhID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkYXRhW2tleV07CiAgICAgICAgfQogICAgfTsKCiAgICAvL3RoZSB1bmRlcmx5aW5nIEZpbmUgVXBsb2FkZXIgaW5zdGFuY2UgaXMgc3RvcmVkIGluIGpRdWVyeSdzIGRhdGEgc3RvcmVkLCBhc3NvY2lhdGVkIHdpdGggdGhlIGVsZW1lbnQKICAgIC8vIHRpZWQgdG8gdGhpcyBpbnN0YW5jZSBvZiB0aGUgcGx1Zy1pbgogICAgdXBsb2FkZXIgPSBmdW5jdGlvbihpbnN0YW5jZVRvU3RvcmUpIHsKICAgICAgICByZXR1cm4gZGF0YVN0b3JlKCd1cGxvYWRlcicsIGluc3RhbmNlVG9TdG9yZSk7CiAgICB9OwoKICAgIHBsdWdpbk9wdGlvbiA9IGZ1bmN0aW9uKG9wdGlvbiwgb3B0aW9uVmFsKSB7CiAgICAgICAgcmV0dXJuIGRhdGFTdG9yZShvcHRpb24sIG9wdGlvblZhbCk7CiAgICB9OwoKICAgIC8vaW1wbGVtZW50IGFsbCBjYWxsYmFja3MgZGVmaW5lZCBpbiBGaW5lIFVwbG9hZGVyIGFzIGZ1bmN0aW9ucyB0aGF0IHRyaWdnZXIgYXBwcm9wcmlhdGVseSBuYW1lcyBldmVudHMgYW5kCiAgICAvLyByZXR1cm4gdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIGJvdW5kIGhhbmRsZXIgYmFjayB0byBGaW5lIFVwbG9hZGVyCiAgICBhZGRDYWxsYmFja3MgPSBmdW5jdGlvbih0cmFuc2Zvcm1lZE9wdHMpIHsKICAgICAgICB2YXIgY2FsbGJhY2tzID0gdHJhbnNmb3JtZWRPcHRzLmNhbGxiYWNrcyA9IHt9LAogICAgICAgICAgICB1cGxvYWRlckluc3QgPSBuZXcgcXEuRmluZVVwbG9hZGVyQmFzaWMoKTsKCiAgICAgICAgJC5lYWNoKHVwbG9hZGVySW5zdC5fb3B0aW9ucy5jYWxsYmFja3MsIGZ1bmN0aW9uKHByb3AsIGZ1bmMpIHsKICAgICAgICAgICAgdmFyIG5hbWUsICRjYWxsYmFja0VsOwoKICAgICAgICAgICAgbmFtZSA9IC9eb24oXHcrKS8uZXhlYyhwcm9wKVsxXTsKICAgICAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKDAsIDEpLnRvTG93ZXJDYXNlKCkgKyBuYW1lLnN1YnN0cmluZygxKTsKICAgICAgICAgICAgJGNhbGxiYWNrRWwgPSAkZWw7CgogICAgICAgICAgICBjYWxsYmFja3NbcHJvcF0gPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBvcmlnRnVuYyA9IGZ1bmMsCiAgICAgICAgICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyksCiAgICAgICAgICAgICAgICAgICAganF1ZXJ5SGFuZGxlclJlc3VsdCA9ICRjYWxsYmFja0VsLnRyaWdnZXJIYW5kbGVyKG5hbWUsIGFyZ3MpOwoKICAgICAgICAgICAgICAgIGlmIChqcXVlcnlIYW5kbGVyUmVzdWx0ID09PSB1bmRlZmluZWQgJiYKICAgICAgICAgICAgICAgICAgICAgICAgJC5pbkFycmF5KHByb3AsIHVwbG9hZGVySW5zdC5nZXRQcm9taXNzb3J5Q2FsbGJhY2tOYW1lcygpKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9yaWdGdW5jKCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgcmV0dXJuIGpxdWVyeUhhbmRsZXJSZXN1bHQ7CiAgICAgICAgICAgIH07CiAgICAgICAgfSk7CiAgICB9OwoKICAgIC8vdHJhbnNmb3JtIGpRdWVyeSBvYmplY3RzIGludG8gSFRNTEVsZW1lbnRzLCBhbmQgcGFzcyBhbG9uZyBhbGwgb3RoZXIgb3B0aW9uIHByb3BlcnRpZXMKICAgIHRyYW5zZm9ybVZhcmlhYmxlcyA9IGZ1bmN0aW9uKHNvdXJjZSwgZGVzdCkgewogICAgICAgIHZhciB4Zm9ybWVkLCBhcnJheVZhbHM7CgogICAgICAgIGlmIChkZXN0ID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgaWYgKHNvdXJjZS51cGxvYWRlclR5cGUgIT09ICdiYXNpYycpIHsKICAgICAgICAgICAgICAgIHhmb3JtZWQgPSB7IGVsZW1lbnQgOiAkZWxbMF0gfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHhmb3JtZWQgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgeGZvcm1lZCA9IGRlc3Q7CiAgICAgICAgfQoKICAgICAgICAkLmVhY2goc291cmNlLCBmdW5jdGlvbihwcm9wLCB2YWwpIHsKICAgICAgICAgICAgaWYgKCQuaW5BcnJheShwcm9wLCBwbHVnaW5PcHRpb25zKSA+PSAwKSB7CiAgICAgICAgICAgICAgICBwbHVnaW5PcHRpb24ocHJvcCwgdmFsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh2YWwgaW5zdGFuY2VvZiAkKSB7CiAgICAgICAgICAgICAgICB4Zm9ybWVkW3Byb3BdID0gdmFsWzBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKCQuaXNQbGFpbk9iamVjdCh2YWwpKSB7CiAgICAgICAgICAgICAgICB4Zm9ybWVkW3Byb3BdID0ge307CiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1WYXJpYWJsZXModmFsLCB4Zm9ybWVkW3Byb3BdKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICgkLmlzQXJyYXkodmFsKSkgewogICAgICAgICAgICAgICAgYXJyYXlWYWxzID0gW107CiAgICAgICAgICAgICAgICAkLmVhY2godmFsLCBmdW5jdGlvbihpZHgsIGFycmF5VmFsKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5VmFsIGluc3RhbmNlb2YgJCkgewogICAgICAgICAgICAgICAgICAgICAgICAkLm1lcmdlKGFycmF5VmFscywgYXJyYXlWYWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlWYWxzLnB1c2goYXJyYXlWYWwpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgeGZvcm1lZFtwcm9wXSA9IGFycmF5VmFsczsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHhmb3JtZWRbcHJvcF0gPSB2YWw7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgaWYgKGRlc3QgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICByZXR1cm4geGZvcm1lZDsKICAgICAgICB9CiAgICB9OwoKICAgIGlzVmFsaWRDb21tYW5kID0gZnVuY3Rpb24oY29tbWFuZCkgewogICAgICAgIHJldHVybiAkLnR5cGUoY29tbWFuZCkgPT09ICJzdHJpbmciICYmCiAgICAgICAgICAgICFjb21tYW5kLm1hdGNoKC9eXy8pICYmIC8vZW5mb3JjZSBwcml2YXRlIG1ldGhvZHMgY29udmVudGlvbgogICAgICAgICAgICB1cGxvYWRlcigpW2NvbW1hbmRdICE9PSB1bmRlZmluZWQ7CiAgICB9OwoKICAgIC8vYXNzdW1pbmcgd2UgaGF2ZSBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgdGhpcyBpcyBhIHZhbGlkIGNvbW1hbmQsIGNhbGwgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24gaW4gdGhlIHVuZGVybHlpbmcKICAgIC8vIEZpbmUgVXBsb2FkZXIgaW5zdGFuY2UgKHBhc3NpbmcgYWxvbmcgdGhlIGFyZ3VtZW50cyBmcm9tIHRoZSBjYWxsZXIpIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY2FsbCBiYWNrIHRvIHRoZSBjYWxsZXIKICAgIGRlbGVnYXRlQ29tbWFuZCA9IGZ1bmN0aW9uKGNvbW1hbmQpIHsKICAgICAgICB2YXIgeGZvcm1lZEFyZ3MgPSBbXSwgb3JpZ0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwoKICAgICAgICB0cmFuc2Zvcm1WYXJpYWJsZXMob3JpZ0FyZ3MsIHhmb3JtZWRBcmdzKTsKCiAgICAgICAgcmV0dXJuIHVwbG9hZGVyKClbY29tbWFuZF0uYXBwbHkodXBsb2FkZXIoKSwgeGZvcm1lZEFyZ3MpOwogICAgfTsKCiAgICAkLmZuLmZpbmVVcGxvYWRlciA9IGZ1bmN0aW9uKG9wdGlvbnNPckNvbW1hbmQpIHsKICAgICAgICB2YXIgc2VsZiA9IHRoaXMsIHNlbGZBcmdzID0gYXJndW1lbnRzLCByZXRWYWxzID0gW107CgogICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihpbmRleCwgZWwpIHsKICAgICAgICAgICAgJGVsID0gJChlbCk7CgogICAgICAgICAgICBpZiAodXBsb2FkZXIoKSAmJiBpc1ZhbGlkQ29tbWFuZChvcHRpb25zT3JDb21tYW5kKSkgewogICAgICAgICAgICAgICAgcmV0VmFscy5wdXNoKGRlbGVnYXRlQ29tbWFuZC5hcHBseShzZWxmLCBzZWxmQXJncykpOwoKICAgICAgICAgICAgICAgIGlmIChzZWxmLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0aW9uc09yQ29tbWFuZCA9PT0gJ29iamVjdCcgfHwgIW9wdGlvbnNPckNvbW1hbmQpIHsKICAgICAgICAgICAgICAgIGluaXQuYXBwbHkoc2VsZiwgc2VsZkFyZ3MpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJC5lcnJvcignTWV0aG9kICcgKyAgb3B0aW9uc09yQ29tbWFuZCArICcgZG9lcyBub3QgZXhpc3Qgb24galF1ZXJ5LmZpbmVVcGxvYWRlcicpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIGlmIChyZXRWYWxzLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gcmV0VmFsc1swXTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAocmV0VmFscy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgIHJldHVybiByZXRWYWxzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICB9OwoKfShqUXVlcnkpKTsK]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/jquery.fineuploader-3.4.1.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHFxPWZ1bmN0aW9uKGEpe3JldHVybntoaWRlOmZ1bmN0aW9uKCl7YS5zdHlsZS5kaXNwbGF5PSJub25lIjtyZXR1cm4gdGhpc30sYXR0YWNoOmZ1bmN0aW9uKGIsYyl7YS5hZGRFdmVudExpc3RlbmVyP2EuYWRkRXZlbnRMaXN0ZW5lcihiLGMsITEpOmEuYXR0YWNoRXZlbnQmJmEuYXR0YWNoRXZlbnQoIm9uIitiLGMpO3JldHVybiBmdW5jdGlvbigpe3FxKGEpLmRldGFjaChiLGMpfX0sZGV0YWNoOmZ1bmN0aW9uKGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyP2EucmVtb3ZlRXZlbnRMaXN0ZW5lcihiLGMsITEpOmEuYXR0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpO3JldHVybiB0aGlzfSxjb250YWluczpmdW5jdGlvbihiKXtyZXR1cm4gYT09PWI/ITA6YS5jb250YWlucz9hLmNvbnRhaW5zKGIpOiEhKGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYSkmOCl9LGluc2VydEJlZm9yZTpmdW5jdGlvbihiKXtiLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsYik7CnJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXthLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYSk7cmV0dXJuIHRoaXN9LGNzczpmdW5jdGlvbihiKXtudWxsIT09Yi5vcGFjaXR5JiYoInN0cmluZyIhPT10eXBlb2YgYS5zdHlsZS5vcGFjaXR5JiYidW5kZWZpbmVkIiE9PXR5cGVvZiBhLmZpbHRlcnMpJiYoYi5maWx0ZXI9ImFscGhhKG9wYWNpdHk9IitNYXRoLnJvdW5kKDEwMCpiLm9wYWNpdHkpKyIpIik7cXEuZXh0ZW5kKGEuc3R5bGUsYik7cmV0dXJuIHRoaXN9LGhhc0NsYXNzOmZ1bmN0aW9uKGIpe3JldHVybiBSZWdFeHAoIihefCApIitiKyIoIHwkKSIpLnRlc3QoYS5jbGFzc05hbWUpfSxhZGRDbGFzczpmdW5jdGlvbihiKXtxcShhKS5oYXNDbGFzcyhiKXx8KGEuY2xhc3NOYW1lKz0iICIrYik7cmV0dXJuIHRoaXN9LHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGIpe2EuY2xhc3NOYW1lPWEuY2xhc3NOYW1lLnJlcGxhY2UoUmVnRXhwKCIoXnwgKSIrYisiKCB8JCkiKSwiICIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLAoiIik7cmV0dXJuIHRoaXN9LGdldEJ5Q2xhc3M6ZnVuY3Rpb24oYil7dmFyIGMsZD1bXTtpZihhLnF1ZXJ5U2VsZWN0b3JBbGwpcmV0dXJuIGEucXVlcnlTZWxlY3RvckFsbCgiLiIrYik7Yz1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7cXEuZWFjaChjLGZ1bmN0aW9uKGEsYyl7cXEoYykuaGFzQ2xhc3MoYikmJmQucHVzaChjKX0pO3JldHVybiBkfSxjaGlsZHJlbjpmdW5jdGlvbigpe2Zvcih2YXIgYj1bXSxjPWEuZmlyc3RDaGlsZDtjOykxPT09Yy5ub2RlVHlwZSYmYi5wdXNoKGMpLGM9Yy5uZXh0U2libGluZztyZXR1cm4gYn0sc2V0VGV4dDpmdW5jdGlvbihiKXthLmlubmVyVGV4dD1iO2EudGV4dENvbnRlbnQ9YjtyZXR1cm4gdGhpc30sY2xlYXJUZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIHFxKGEpLnNldFRleHQoIiIpfX19OwpxcS5sb2c9ZnVuY3Rpb24oYSxiKXtpZih3aW5kb3cuY29uc29sZSlpZighYnx8ImluZm8iPT09Yil3aW5kb3cuY29uc29sZS5sb2coYSk7ZWxzZSBpZih3aW5kb3cuY29uc29sZVtiXSl3aW5kb3cuY29uc29sZVtiXShhKTtlbHNlIHdpbmRvdy5jb25zb2xlLmxvZygiPCIrYisiPiAiK2EpfTtxcS5pc09iamVjdD1mdW5jdGlvbihhKXtyZXR1cm4gbnVsbCE9PWEmJmEmJiJvYmplY3QiPT09dHlwZW9mIGEmJmEuY29uc3RydWN0b3I9PT1PYmplY3R9O3FxLmlzRnVuY3Rpb249ZnVuY3Rpb24oYSl7cmV0dXJuImZ1bmN0aW9uIj09PXR5cGVvZiBhfTtxcS5pc1N0cmluZz1mdW5jdGlvbihhKXtyZXR1cm4iW29iamVjdCBTdHJpbmddIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKX07cXEudHJpbVN0cj1mdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nLnByb3RvdHlwZS50cmltP2EudHJpbSgpOmEucmVwbGFjZSgvXlxzK3xccyskL2csIiIpfTsKcXEuaXNGaWxlT3JJbnB1dD1mdW5jdGlvbihhKXtpZihxcS5pc0Jsb2IoYSkmJndpbmRvdy5GaWxlJiZhIGluc3RhbmNlb2YgRmlsZSlyZXR1cm4hMDtpZih3aW5kb3cuSFRNTElucHV0RWxlbWVudCl7aWYoYSBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQmJmEudHlwZSYmImZpbGUiPT09YS50eXBlLnRvTG93ZXJDYXNlKCkpcmV0dXJuITB9ZWxzZSBpZihhLnRhZ05hbWUmJiJpbnB1dCI9PT1hLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmYS50eXBlJiYiZmlsZSI9PT1hLnR5cGUudG9Mb3dlckNhc2UoKSlyZXR1cm4hMDtyZXR1cm4hMX07cXEuaXNCbG9iPWZ1bmN0aW9uKGEpe3JldHVybiB3aW5kb3cuQmxvYiYmYSBpbnN0YW5jZW9mIEJsb2J9OwpxcS5pc1hoclVwbG9hZFN1cHBvcnRlZD1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7YS50eXBlPSJmaWxlIjtyZXR1cm4gdm9pZCAwIT09YS5tdWx0aXBsZSYmInVuZGVmaW5lZCIhPT10eXBlb2YgRmlsZSYmInVuZGVmaW5lZCIhPT10eXBlb2YgRm9ybURhdGEmJiJ1bmRlZmluZWQiIT09dHlwZW9mKG5ldyBYTUxIdHRwUmVxdWVzdCkudXBsb2FkfTtxcS5pc0ZvbGRlckRyb3BTdXBwb3J0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGEuaXRlbXMmJmEuaXRlbXNbMF0ud2Via2l0R2V0QXNFbnRyeX07cXEuaXNGaWxlQ2h1bmtpbmdTdXBwb3J0ZWQ9ZnVuY3Rpb24oKXtyZXR1cm4hcXEuYW5kcm9pZCgpJiZxcS5pc1hoclVwbG9hZFN1cHBvcnRlZCgpJiYoRmlsZS5wcm90b3R5cGUuc2xpY2V8fEZpbGUucHJvdG90eXBlLndlYmtpdFNsaWNlfHxGaWxlLnByb3RvdHlwZS5tb3pTbGljZSl9OwpxcS5leHRlbmQ9ZnVuY3Rpb24oYSxiLGMpe3FxLmVhY2goYixmdW5jdGlvbihiLGUpe2MmJnFxLmlzT2JqZWN0KGUpPyh2b2lkIDA9PT1hW2JdJiYoYVtiXT17fSkscXEuZXh0ZW5kKGFbYl0sZSwhMCkpOmFbYl09ZX0pfTtxcS5pbmRleE9mPWZ1bmN0aW9uKGEsYixjKXtpZihhLmluZGV4T2YpcmV0dXJuIGEuaW5kZXhPZihiLGMpO3ZhciBjPWN8fDAsZD1hLmxlbmd0aDtmb3IoMD5jJiYoYys9ZCk7YzxkO2MrPTEpaWYoYS5oYXNPd25Qcm9wZXJ0eShjKSYmYVtjXT09PWIpcmV0dXJuIGM7cmV0dXJuLTF9O3FxLmdldFVuaXF1ZUlkPWZ1bmN0aW9uKCl7cmV0dXJuInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCIucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGEpe3ZhciBiPTE2Kk1hdGgucmFuZG9tKCl8MDtyZXR1cm4oIngiPT1hP2I6YiYzfDgpLnRvU3RyaW5nKDE2KX0pfTtxcS5pZT1mdW5jdGlvbigpe3JldHVybi0xIT09bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJNU0lFIil9OwpxcS5pZTEwPWZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1TSUUgMTAiKX07cXEuc2FmYXJpPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PW5hdmlnYXRvci52ZW5kb3ImJi0xIT09bmF2aWdhdG9yLnZlbmRvci5pbmRleE9mKCJBcHBsZSIpfTtxcS5jaHJvbWU9ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09bmF2aWdhdG9yLnZlbmRvciYmLTEhPT1uYXZpZ2F0b3IudmVuZG9yLmluZGV4T2YoIkdvb2dsZSIpfTtxcS5maXJlZm94PWZ1bmN0aW9uKCl7cmV0dXJuLTEhPT1uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1vemlsbGEiKSYmdm9pZCAwIT09bmF2aWdhdG9yLnZlbmRvciYmIiI9PT1uYXZpZ2F0b3IudmVuZG9yfTtxcS53aW5kb3dzPWZ1bmN0aW9uKCl7cmV0dXJuIldpbjMyIj09PW5hdmlnYXRvci5wbGF0Zm9ybX07cXEuYW5kcm9pZD1mdW5jdGlvbigpe3JldHVybi0xIT09bmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoImFuZHJvaWQiKX07CnFxLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKGEpe2EucHJldmVudERlZmF1bHQ/YS5wcmV2ZW50RGVmYXVsdCgpOmEucmV0dXJuVmFsdWU9ITF9O3FxLnRvRWxlbWVudD1mdW5jdGlvbigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBmdW5jdGlvbihiKXthLmlubmVySFRNTD1iO2I9YS5maXJzdENoaWxkO2EucmVtb3ZlQ2hpbGQoYik7cmV0dXJuIGJ9fSgpO3FxLmVhY2g9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkO2lmKGEpZm9yKGMgaW4gYSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxjKSYmKGQ9YihjLGFbY10pLCExPT09ZCkpYnJlYWt9OwpxcS5vYmoydXJsPWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPVtdLGY9IiYiLGc9ZnVuY3Rpb24oYSxjKXt2YXIgZD1iPy9cW1xdJC8udGVzdChiKT9iOmIrIlsiK2MrIl0iOmM7InVuZGVmaW5lZCIhPT1kJiYidW5kZWZpbmVkIiE9PWMmJmUucHVzaCgib2JqZWN0Ij09PXR5cGVvZiBhP3FxLm9iajJ1cmwoYSxkLCEwKToiW29iamVjdCBGdW5jdGlvbl0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpP2VuY29kZVVSSUNvbXBvbmVudChkKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGEoKSk6ZW5jb2RlVVJJQ29tcG9uZW50KGQpKyI9IitlbmNvZGVVUklDb21wb25lbnQoYSkpfTtpZighYyYmYilmPS9cPy8udGVzdChiKT8vXD8kLy50ZXN0KGIpPyIiOiImIjoiPyIsZS5wdXNoKGIpLGUucHVzaChxcS5vYmoydXJsKGEpKTtlbHNlIGlmKCJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYSkmJiJ1bmRlZmluZWQiIT09dHlwZW9mIGEpe2Q9Ci0xO2ZvcihjPWEubGVuZ3RoO2Q8YztkKz0xKWcoYVtkXSxkKX1lbHNlIGlmKCJ1bmRlZmluZWQiIT09dHlwZW9mIGEmJm51bGwhPT1hJiYib2JqZWN0Ij09PXR5cGVvZiBhKWZvcihkIGluIGEpYS5oYXNPd25Qcm9wZXJ0eShkKSYmZyhhW2RdLGQpO2Vsc2UgZS5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChiKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGEpKTtyZXR1cm4gYj9lLmpvaW4oZik6ZS5qb2luKGYpLnJlcGxhY2UoL14mLywiIikucmVwbGFjZSgvJTIwL2csIisiKX07cXEub2JqMkZvcm1EYXRhPWZ1bmN0aW9uKGEsYixjKXtifHwoYj1uZXcgRm9ybURhdGEpO3FxLmVhY2goYSxmdW5jdGlvbihhLGUpe2E9Yz9jKyJbIithKyJdIjphO3FxLmlzT2JqZWN0KGUpP3FxLm9iajJGb3JtRGF0YShlLGIsYSk6cXEuaXNGdW5jdGlvbihlKT9iLmFwcGVuZChhLGUoKSk6Yi5hcHBlbmQoYSxlKX0pO3JldHVybiBifTsKcXEub2JqMklucHV0cz1mdW5jdGlvbihhLGIpe3ZhciBjO2J8fChiPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKSk7cXEub2JqMkZvcm1EYXRhKGEse2FwcGVuZDpmdW5jdGlvbihhLGUpe2M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtjLnNldEF0dHJpYnV0ZSgibmFtZSIsYSk7Yy5zZXRBdHRyaWJ1dGUoInZhbHVlIixlKTtiLmFwcGVuZENoaWxkKGMpfX0pO3JldHVybiBifTtxcS5zZXRDb29raWU9ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPW5ldyBEYXRlLGU9IiI7YyYmKGQuc2V0VGltZShkLmdldFRpbWUoKSs4NjRFNSpjKSxlPSI7IGV4cGlyZXM9IitkLnRvR01UU3RyaW5nKCkpO2RvY3VtZW50LmNvb2tpZT1hKyI9IitiK2UrIjsgcGF0aD0vIn07CnFxLmdldENvb2tpZT1mdW5jdGlvbihhKXtmb3IodmFyIGE9YSsiPSIsYj1kb2N1bWVudC5jb29raWUuc3BsaXQoIjsiKSxjLGQ9MDtkPGIubGVuZ3RoO2QrKyl7Zm9yKGM9YltkXTsiICI9PWMuY2hhckF0KDApOyljPWMuc3Vic3RyaW5nKDEsYy5sZW5ndGgpO2lmKDA9PT1jLmluZGV4T2YoYSkpcmV0dXJuIGMuc3Vic3RyaW5nKGEubGVuZ3RoLGMubGVuZ3RoKX19O3FxLmdldENvb2tpZU5hbWVzPWZ1bmN0aW9uKGEpe3ZhciBiPWRvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyIpLGM9W107cXEuZWFjaChiLGZ1bmN0aW9uKGIsZSl7dmFyIGU9cXEudHJpbVN0cihlKSxmPWUuaW5kZXhPZigiPSIpO2UubWF0Y2goYSkmJmMucHVzaChlLnN1YnN0cigwLGYpKX0pO3JldHVybiBjfTtxcS5kZWxldGVDb29raWU9ZnVuY3Rpb24oYSl7cXEuc2V0Q29va2llKGEsIiIsLTEpfTsKcXEuYXJlQ29va2llc0VuYWJsZWQ9ZnVuY3Rpb24oKXt2YXIgYT0icXFDb29raWVUZXN0OiIrMUU1Kk1hdGgucmFuZG9tKCk7cXEuc2V0Q29va2llKGEsMSk7cmV0dXJuIHFxLmdldENvb2tpZShhKT8ocXEuZGVsZXRlQ29va2llKGEpLCEwKTohMX07cXEucGFyc2VKc29uPWZ1bmN0aW9uKGEpe3JldHVybiB3aW5kb3cuSlNPTiYmcXEuaXNGdW5jdGlvbihKU09OLnBhcnNlKT9KU09OLnBhcnNlKGEpOmV2YWwoIigiK2ErIikiKX07cXEuRGlzcG9zZVN1cHBvcnQ9ZnVuY3Rpb24oKXt2YXIgYT1bXTtyZXR1cm57ZGlzcG9zZTpmdW5jdGlvbigpe3ZhciBiO2RvKGI9YS5zaGlmdCgpKSYmYigpO3doaWxlKGIpfSxhdHRhY2g6ZnVuY3Rpb24oKXt0aGlzLmFkZERpc3Bvc2VyKHFxKGFyZ3VtZW50c1swXSkuYXR0YWNoLmFwcGx5KHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKSl9LGFkZERpc3Bvc2VyOmZ1bmN0aW9uKGIpe2EucHVzaChiKX19fTsKcXEuUHJvbWlzZT1mdW5jdGlvbigpe3ZhciBhLGIsYyxkLGU9MDtyZXR1cm57dGhlbjpmdW5jdGlvbihmLGcpezA9PT1lPyhjPWYsZD1nKTotMT09PWUmJmc/ZyhiKTpmJiZmKGEpfSxzdWNjZXNzOmZ1bmN0aW9uKGIpe2U9MTthPWI7YyYmYyhiKTtyZXR1cm4gdGhpc30sZmFpbHVyZTpmdW5jdGlvbihhKXtlPS0xO2I9YTtkJiZkKGEpO3JldHVybiB0aGlzfX19OwpxcS5VcGxvYWRCdXR0b249ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe3ZhciBhPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7ZS5tdWx0aXBsZSYmYS5zZXRBdHRyaWJ1dGUoIm11bHRpcGxlIiwibXVsdGlwbGUiKTtlLmFjY2VwdEZpbGVzJiZhLnNldEF0dHJpYnV0ZSgiYWNjZXB0IixlLmFjY2VwdEZpbGVzKTthLnNldEF0dHJpYnV0ZSgidHlwZSIsImZpbGUiKTthLnNldEF0dHJpYnV0ZSgibmFtZSIsZS5uYW1lKTtxcShhKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIscmlnaHQ6MCx0b3A6MCxmb250RmFtaWx5OiJBcmlhbCIsZm9udFNpemU6IjExOHB4IixtYXJnaW46MCxwYWRkaW5nOjAsY3Vyc29yOiJwb2ludGVyIixvcGFjaXR5OjB9KTtlLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYSk7ZC5hdHRhY2goYSwiY2hhbmdlIixmdW5jdGlvbigpe2Uub25DaGFuZ2UoYSl9KTtkLmF0dGFjaChhLCJtb3VzZW92ZXIiLGZ1bmN0aW9uKCl7cXEoZS5lbGVtZW50KS5hZGRDbGFzcyhlLmhvdmVyQ2xhc3MpfSk7CmQuYXR0YWNoKGEsIm1vdXNlb3V0IixmdW5jdGlvbigpe3FxKGUuZWxlbWVudCkucmVtb3ZlQ2xhc3MoZS5ob3ZlckNsYXNzKX0pO2QuYXR0YWNoKGEsImZvY3VzIixmdW5jdGlvbigpe3FxKGUuZWxlbWVudCkuYWRkQ2xhc3MoZS5mb2N1c0NsYXNzKX0pO2QuYXR0YWNoKGEsImJsdXIiLGZ1bmN0aW9uKCl7cXEoZS5lbGVtZW50KS5yZW1vdmVDbGFzcyhlLmZvY3VzQ2xhc3MpfSk7d2luZG93LmF0dGFjaEV2ZW50JiZhLnNldEF0dHJpYnV0ZSgidGFiSW5kZXgiLCItMSIpO3JldHVybiBhfXZhciBjLGQ9bmV3IHFxLkRpc3Bvc2VTdXBwb3J0LGU9e2VsZW1lbnQ6bnVsbCxtdWx0aXBsZTohMSxhY2NlcHRGaWxlczpudWxsLG5hbWU6ImZpbGUiLG9uQ2hhbmdlOmZ1bmN0aW9uKCl7fSxob3ZlckNsYXNzOiJxcS11cGxvYWQtYnV0dG9uLWhvdmVyIixmb2N1c0NsYXNzOiJxcS11cGxvYWQtYnV0dG9uLWZvY3VzIn07cXEuZXh0ZW5kKGUsYSk7cXEoZS5lbGVtZW50KS5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsCm92ZXJmbG93OiJoaWRkZW4iLGRpcmVjdGlvbjoibHRyIn0pO2M9YigpO3JldHVybntnZXRJbnB1dDpmdW5jdGlvbigpe3JldHVybiBjfSxyZXNldDpmdW5jdGlvbigpe2MucGFyZW50Tm9kZSYmcXEoYykucmVtb3ZlKCk7cXEoZS5lbGVtZW50KS5yZW1vdmVDbGFzcyhlLmZvY3VzQ2xhc3MpO2M9YigpfX19OwpxcS5QYXN0ZVN1cHBvcnQ9ZnVuY3Rpb24oYSl7dmFyIGI7Yj17dGFyZ2V0RWxlbWVudDpudWxsLGNhbGxiYWNrczp7bG9nOmZ1bmN0aW9uKCl7fSxwYXN0ZVJlY2VpdmVkOmZ1bmN0aW9uKCl7fX19O3FxLmV4dGVuZChiLGEpOyhmdW5jdGlvbigpe3FxKGIudGFyZ2V0RWxlbWVudCkuYXR0YWNoKCJwYXN0ZSIsZnVuY3Rpb24oYSl7KGE9YS5jbGlwYm9hcmREYXRhKSYmcXEuZWFjaChhLml0ZW1zLGZ1bmN0aW9uKGEsYyl7aWYoYy50eXBlJiYwPT09Yy50eXBlLmluZGV4T2YoImltYWdlLyIpKXt2YXIgZj1jLmdldEFzRmlsZSgpO2IuY2FsbGJhY2tzLnBhc3RlUmVjZWl2ZWQoZil9fSl9KX0pKCk7cmV0dXJue3Jlc2V0OmZ1bmN0aW9uKCl7fX19OwpxcS5GaW5lVXBsb2FkZXJCYXNpYz1mdW5jdGlvbihhKXt0aGlzLl9vcHRpb25zPXtkZWJ1ZzohMSxidXR0b246bnVsbCxtdWx0aXBsZTohMCxtYXhDb25uZWN0aW9uczozLGRpc2FibGVDYW5jZWxGb3JGb3JtVXBsb2FkczohMSxhdXRvVXBsb2FkOiEwLHJlcXVlc3Q6e2VuZHBvaW50OiIvc2VydmVyL3VwbG9hZCIscGFyYW1zOnt9LHBhcmFtc0luQm9keTohMCxjdXN0b21IZWFkZXJzOnt9LGZvcmNlTXVsdGlwYXJ0OiEwLGlucHV0TmFtZToicXFmaWxlIix1dWlkTmFtZToicXF1dWlkIix0b3RhbEZpbGVTaXplTmFtZToicXF0b3RhbGZpbGVzaXplIn0sdmFsaWRhdGlvbjp7YWxsb3dlZEV4dGVuc2lvbnM6W10sc2l6ZUxpbWl0OjAsbWluU2l6ZUxpbWl0OjAsaXRlbUxpbWl0OjAsc3RvcE9uRmlyc3RJbnZhbGlkRmlsZTohMH0sY2FsbGJhY2tzOntvblN1Ym1pdDpmdW5jdGlvbigpe30sb25TdWJtaXR0ZWQ6ZnVuY3Rpb24oKXt9LG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt9LG9uQ2FuY2VsOmZ1bmN0aW9uKCl7fSwKb25VcGxvYWQ6ZnVuY3Rpb24oKXt9LG9uVXBsb2FkQ2h1bms6ZnVuY3Rpb24oKXt9LG9uUmVzdW1lOmZ1bmN0aW9uKCl7fSxvblByb2dyZXNzOmZ1bmN0aW9uKCl7fSxvbkVycm9yOmZ1bmN0aW9uKCl7fSxvbkF1dG9SZXRyeTpmdW5jdGlvbigpe30sb25NYW51YWxSZXRyeTpmdW5jdGlvbigpe30sb25WYWxpZGF0ZUJhdGNoOmZ1bmN0aW9uKCl7fSxvblZhbGlkYXRlOmZ1bmN0aW9uKCl7fSxvblN1Ym1pdERlbGV0ZTpmdW5jdGlvbigpe30sb25EZWxldGU6ZnVuY3Rpb24oKXt9LG9uRGVsZXRlQ29tcGxldGU6ZnVuY3Rpb24oKXt9LG9uUGFzdGVSZWNlaXZlZDpmdW5jdGlvbigpe3JldHVybihuZXcgcXEuUHJvbWlzZSkuc3VjY2VzcygpfX0sbWVzc2FnZXM6e3R5cGVFcnJvcjoie2ZpbGV9IGhhcyBhbiBpbnZhbGlkIGV4dGVuc2lvbi4gVmFsaWQgZXh0ZW5zaW9uKHMpOiB7ZXh0ZW5zaW9uc30uIixzaXplRXJyb3I6IntmaWxlfSBpcyB0b28gbGFyZ2UsIG1heGltdW0gZmlsZSBzaXplIGlzIHtzaXplTGltaXR9LiIsCm1pblNpemVFcnJvcjoie2ZpbGV9IGlzIHRvbyBzbWFsbCwgbWluaW11bSBmaWxlIHNpemUgaXMge21pblNpemVMaW1pdH0uIixlbXB0eUVycm9yOiJ7ZmlsZX0gaXMgZW1wdHksIHBsZWFzZSBzZWxlY3QgZmlsZXMgYWdhaW4gd2l0aG91dCBpdC4iLG5vRmlsZXNFcnJvcjoiTm8gZmlsZXMgdG8gdXBsb2FkLiIsdG9vTWFueUl0ZW1zRXJyb3I6IlRvbyBtYW55IGl0ZW1zICh7bmV0SXRlbXN9KSB3b3VsZCBiZSB1cGxvYWRlZC4gIEl0ZW0gbGltaXQgaXMge2l0ZW1MaW1pdH0uIixyZXRyeUZhaWxUb29NYW55SXRlbXM6IlJldHJ5IGZhaWxlZCAtIHlvdSBoYXZlIHJlYWNoZWQgeW91ciBmaWxlIGxpbWl0LiIsb25MZWF2ZToiVGhlIGZpbGVzIGFyZSBiZWluZyB1cGxvYWRlZCwgaWYgeW91IGxlYXZlIG5vdyB0aGUgdXBsb2FkIHdpbGwgYmUgY2FuY2VsbGVkLiJ9LHJldHJ5OntlbmFibGVBdXRvOiExLG1heEF1dG9BdHRlbXB0czozLGF1dG9BdHRlbXB0RGVsYXk6NSxwcmV2ZW50UmV0cnlSZXNwb25zZVByb3BlcnR5OiJwcmV2ZW50UmV0cnkifSwKY2xhc3Nlczp7YnV0dG9uSG92ZXI6InFxLXVwbG9hZC1idXR0b24taG92ZXIiLGJ1dHRvbkZvY3VzOiJxcS11cGxvYWQtYnV0dG9uLWZvY3VzIn0sY2h1bmtpbmc6e2VuYWJsZWQ6ITEscGFydFNpemU6MkU2LHBhcmFtTmFtZXM6e3BhcnRJbmRleDoicXFwYXJ0aW5kZXgiLHBhcnRCeXRlT2Zmc2V0OiJxcXBhcnRieXRlb2Zmc2V0IixjaHVua1NpemU6InFxY2h1bmtzaXplIix0b3RhbEZpbGVTaXplOiJxcXRvdGFsZmlsZXNpemUiLHRvdGFsUGFydHM6InFxdG90YWxwYXJ0cyIsZmlsZW5hbWU6InFxZmlsZW5hbWUifX0scmVzdW1lOntlbmFibGVkOiExLGlkOm51bGwsY29va2llc0V4cGlyZUluOjcscGFyYW1OYW1lczp7cmVzdW1pbmc6InFxcmVzdW1lIn19LGZvcm1hdEZpbGVOYW1lOmZ1bmN0aW9uKGEpezMzPGEubGVuZ3RoJiYoYT1hLnNsaWNlKDAsMTkpKyIuLi4iK2Euc2xpY2UoLTE0KSk7cmV0dXJuIGF9LHRleHQ6e3NpemVTeW1ib2xzOiJrQiBNQiBHQiBUQiBQQiBFQiIuc3BsaXQoIiAiKX0sCmRlbGV0ZUZpbGU6e2VuYWJsZWQ6ITEsZW5kcG9pbnQ6Ii9zZXJ2ZXIvdXBsb2FkIixjdXN0b21IZWFkZXJzOnt9LHBhcmFtczp7fX0sY29yczp7ZXhwZWN0ZWQ6ITEsc2VuZENyZWRlbnRpYWxzOiExfSxibG9iczp7ZGVmYXVsdE5hbWU6Im1pc2NfZGF0YSIscGFyYW1OYW1lczp7bmFtZToicXFibG9ibmFtZSJ9fSxwYXN0ZTp7dGFyZ2V0RWxlbWVudDpudWxsLGRlZmF1bHROYW1lOiJwYXN0ZWRfaW1hZ2UifX07cXEuZXh0ZW5kKHRoaXMuX29wdGlvbnMsYSwhMCk7dGhpcy5fd3JhcENhbGxiYWNrcygpO3RoaXMuX2Rpc3Bvc2VTdXBwb3J0PW5ldyBxcS5EaXNwb3NlU3VwcG9ydDt0aGlzLl9maWxlc0luUHJvZ3Jlc3M9W107dGhpcy5fc3RvcmVkSWRzPVtdO3RoaXMuX2F1dG9SZXRyaWVzPVtdO3RoaXMuX3JldHJ5VGltZW91dHM9W107dGhpcy5fcHJldmVudFJldHJpZXM9W107dGhpcy5fbmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkPTA7dGhpcy5fcGFyYW1zU3RvcmU9dGhpcy5fY3JlYXRlUGFyYW1zU3RvcmUoInJlcXVlc3QiKTsKdGhpcy5fZGVsZXRlRmlsZVBhcmFtc1N0b3JlPXRoaXMuX2NyZWF0ZVBhcmFtc1N0b3JlKCJkZWxldGVGaWxlIik7dGhpcy5fZW5kcG9pbnRTdG9yZT10aGlzLl9jcmVhdGVFbmRwb2ludFN0b3JlKCJyZXF1ZXN0Iik7dGhpcy5fZGVsZXRlRmlsZUVuZHBvaW50U3RvcmU9dGhpcy5fY3JlYXRlRW5kcG9pbnRTdG9yZSgiZGVsZXRlRmlsZSIpO3RoaXMuX2hhbmRsZXI9dGhpcy5fY3JlYXRlVXBsb2FkSGFuZGxlcigpO3RoaXMuX2RlbGV0ZUhhbmRsZXI9dGhpcy5fY3JlYXRlRGVsZXRlSGFuZGxlcigpO3RoaXMuX29wdGlvbnMuYnV0dG9uJiYodGhpcy5fYnV0dG9uPXRoaXMuX2NyZWF0ZVVwbG9hZEJ1dHRvbih0aGlzLl9vcHRpb25zLmJ1dHRvbikpO3RoaXMuX29wdGlvbnMucGFzdGUudGFyZ2V0RWxlbWVudCYmKHRoaXMuX3Bhc3RlSGFuZGxlcj10aGlzLl9jcmVhdGVQYXN0ZUhhbmRsZXIoKSk7dGhpcy5fcHJldmVudExlYXZlSW5Qcm9ncmVzcygpfTsKcXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlPXtsb2c6ZnVuY3Rpb24oYSxiKXt0aGlzLl9vcHRpb25zLmRlYnVnJiYoIWJ8fCJpbmZvIj09PWIpP3FxLmxvZygiW0ZpbmVVcGxvYWRlcl0gIithKTpiJiYiaW5mbyIhPT1iJiZxcS5sb2coIltGaW5lVXBsb2FkZXJdICIrYSxiKX0sc2V0UGFyYW1zOmZ1bmN0aW9uKGEsYil7bnVsbD09Yj90aGlzLl9vcHRpb25zLnJlcXVlc3QucGFyYW1zPWE6dGhpcy5fcGFyYW1zU3RvcmUuc2V0UGFyYW1zKGEsYil9LHNldERlbGV0ZUZpbGVQYXJhbXM6ZnVuY3Rpb24oYSxiKXtudWxsPT1iP3RoaXMuX29wdGlvbnMuZGVsZXRlRmlsZS5wYXJhbXM9YTp0aGlzLl9kZWxldGVGaWxlUGFyYW1zU3RvcmUuc2V0UGFyYW1zKGEsYil9LHNldEVuZHBvaW50OmZ1bmN0aW9uKGEsYil7bnVsbD09Yj90aGlzLl9vcHRpb25zLnJlcXVlc3QuZW5kcG9pbnQ9YTp0aGlzLl9lbmRwb2ludFN0b3JlLnNldEVuZHBvaW50KGEsYil9LGdldEluUHJvZ3Jlc3M6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZXNJblByb2dyZXNzLmxlbmd0aH0sCnVwbG9hZFN0b3JlZEZpbGVzOmZ1bmN0aW9uKCl7Zm9yKHZhciBhO3RoaXMuX3N0b3JlZElkcy5sZW5ndGg7KWE9dGhpcy5fc3RvcmVkSWRzLnNoaWZ0KCksdGhpcy5fZmlsZXNJblByb2dyZXNzLnB1c2goYSksdGhpcy5faGFuZGxlci51cGxvYWQoYSl9LGNsZWFyU3RvcmVkRmlsZXM6ZnVuY3Rpb24oKXt0aGlzLl9zdG9yZWRJZHM9W119LHJldHJ5OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9vbkJlZm9yZU1hbnVhbFJldHJ5KGEpPyh0aGlzLl9uZXRGaWxlc1VwbG9hZGVkT3JRdWV1ZWQrKyx0aGlzLl9oYW5kbGVyLnJldHJ5KGEpLCEwKTohMX0sY2FuY2VsOmZ1bmN0aW9uKGEpe3RoaXMuX2hhbmRsZXIuY2FuY2VsKGEpfSxjYW5jZWxBbGw6ZnVuY3Rpb24oKXt2YXIgYT1bXSxiPXRoaXM7cXEuZXh0ZW5kKGEsdGhpcy5fc3RvcmVkSWRzKTtxcS5lYWNoKGEsZnVuY3Rpb24oYSxkKXtiLmNhbmNlbChkKX0pO3RoaXMuX2hhbmRsZXIuY2FuY2VsQWxsKCl9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5sb2coIlJlc2V0dGluZyB1cGxvYWRlci4uLiIpOwp0aGlzLl9oYW5kbGVyLnJlc2V0KCk7dGhpcy5fZmlsZXNJblByb2dyZXNzPVtdO3RoaXMuX3N0b3JlZElkcz1bXTt0aGlzLl9hdXRvUmV0cmllcz1bXTt0aGlzLl9yZXRyeVRpbWVvdXRzPVtdO3RoaXMuX3ByZXZlbnRSZXRyaWVzPVtdO3RoaXMuX2J1dHRvbi5yZXNldCgpO3RoaXMuX3BhcmFtc1N0b3JlLnJlc2V0KCk7dGhpcy5fZW5kcG9pbnRTdG9yZS5yZXNldCgpO3RoaXMuX25ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZD0wO3RoaXMuX3Bhc3RlSGFuZGxlciYmdGhpcy5fcGFzdGVIYW5kbGVyLnJlc2V0KCl9LGFkZEZpbGVzOmZ1bmN0aW9uKGEpe3ZhciBiPVtdLGMsZDtpZihhKXtpZighd2luZG93LkZpbGVMaXN0fHwhKGEgaW5zdGFuY2VvZiBGaWxlTGlzdCkpYT1bXS5jb25jYXQoYSk7Zm9yKGM9MDtjPGEubGVuZ3RoO2MrPTEpZD1hW2NdLHFxLmlzRmlsZU9ySW5wdXQoZCk/Yi5wdXNoKGQpOnRoaXMubG9nKGQrIiBpcyBub3QgYSBGaWxlIG9yIElOUFVUIGVsZW1lbnQhICBJZ25vcmluZyEiLAoid2FybiIpO3RoaXMubG9nKCJQcm9jZXNzaW5nICIrYi5sZW5ndGgrIiBmaWxlcyBvciBpbnB1dHMuLi4iKTt0aGlzLl91cGxvYWRGaWxlT3JCbG9iRGF0YUxpc3QoYil9fSxhZGRCbG9iczpmdW5jdGlvbihhKXtpZihhKXt2YXIgYT1bXS5jb25jYXQoYSksYj1bXSxjPXRoaXM7cXEuZWFjaChhLGZ1bmN0aW9uKGEsZSl7cXEuaXNCbG9iKGUpJiYhcXEuaXNGaWxlT3JJbnB1dChlKT9iLnB1c2goe2Jsb2I6ZSxuYW1lOmMuX29wdGlvbnMuYmxvYnMuZGVmYXVsdE5hbWV9KTpxcS5pc09iamVjdChlKSYmZS5ibG9iJiZlLm5hbWU/Yi5wdXNoKGUpOmMubG9nKCJhZGRCbG9iczogZW50cnkgYXQgaW5kZXggIithKyIgaXMgbm90IGEgQmxvYiBvciBhIEJsb2JEYXRhIG9iamVjdCIsImVycm9yIil9KTt0aGlzLl91cGxvYWRGaWxlT3JCbG9iRGF0YUxpc3QoYil9ZWxzZSB0aGlzLmxvZygidW5kZWZpbmVkIG9yIG5vbi1hcnJheSBwYXJhbWV0ZXIgcGFzc2VkIGludG8gYWRkQmxvYnMiLCJlcnJvciIpfSwKZ2V0VXVpZDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faGFuZGxlci5nZXRVdWlkKGEpfSxnZXRSZXN1bWFibGVGaWxlc0RhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGFuZGxlci5nZXRSZXN1bWFibGVGaWxlc0RhdGEoKX0sZ2V0U2l6ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5faGFuZGxlci5nZXRTaXplKGEpfSxnZXROYW1lOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9oYW5kbGVyLmdldE5hbWUoYSl9LGdldEZpbGU6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuX2hhbmRsZXIuZ2V0RmlsZShhKX0sZGVsZXRlRmlsZTpmdW5jdGlvbihhKXt0aGlzLl9vblN1Ym1pdERlbGV0ZShhKX0sc2V0RGVsZXRlRmlsZUVuZHBvaW50OmZ1bmN0aW9uKGEsYil7bnVsbD09Yj90aGlzLl9vcHRpb25zLmRlbGV0ZUZpbGUuZW5kcG9pbnQ9YTp0aGlzLl9kZWxldGVGaWxlRW5kcG9pbnRTdG9yZS5zZXRFbmRwb2ludChhLGIpfSxnZXRQcm9taXNzb3J5Q2FsbGJhY2tOYW1lczpmdW5jdGlvbigpe3JldHVyblsib25QYXN0ZVJlY2VpdmVkIl19LApfY3JlYXRlVXBsb2FkQnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYz1uZXcgcXEuVXBsb2FkQnV0dG9uKHtlbGVtZW50OmEsbXVsdGlwbGU6dGhpcy5fb3B0aW9ucy5tdWx0aXBsZSYmcXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSxhY2NlcHRGaWxlczp0aGlzLl9vcHRpb25zLnZhbGlkYXRpb24uYWNjZXB0RmlsZXMsb25DaGFuZ2U6ZnVuY3Rpb24oYSl7Yi5fb25JbnB1dENoYW5nZShhKX0saG92ZXJDbGFzczp0aGlzLl9vcHRpb25zLmNsYXNzZXMuYnV0dG9uSG92ZXIsZm9jdXNDbGFzczp0aGlzLl9vcHRpb25zLmNsYXNzZXMuYnV0dG9uRm9jdXN9KTt0aGlzLl9kaXNwb3NlU3VwcG9ydC5hZGREaXNwb3NlcihmdW5jdGlvbigpe2MuZGlzcG9zZSgpfSk7cmV0dXJuIGN9LF9jcmVhdGVVcGxvYWRIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4gbmV3IHFxLlVwbG9hZEhhbmRsZXIoe2RlYnVnOnRoaXMuX29wdGlvbnMuZGVidWcsZm9yY2VNdWx0aXBhcnQ6dGhpcy5fb3B0aW9ucy5yZXF1ZXN0LmZvcmNlTXVsdGlwYXJ0LAptYXhDb25uZWN0aW9uczp0aGlzLl9vcHRpb25zLm1heENvbm5lY3Rpb25zLGN1c3RvbUhlYWRlcnM6dGhpcy5fb3B0aW9ucy5yZXF1ZXN0LmN1c3RvbUhlYWRlcnMsaW5wdXROYW1lOnRoaXMuX29wdGlvbnMucmVxdWVzdC5pbnB1dE5hbWUsdXVpZFBhcmFtTmFtZTp0aGlzLl9vcHRpb25zLnJlcXVlc3QudXVpZE5hbWUsdG90YWxGaWxlU2l6ZVBhcmFtTmFtZTp0aGlzLl9vcHRpb25zLnJlcXVlc3QudG90YWxGaWxlU2l6ZU5hbWUsY29yczp0aGlzLl9vcHRpb25zLmNvcnMsZGVtb01vZGU6dGhpcy5fb3B0aW9ucy5kZW1vTW9kZSxwYXJhbXNJbkJvZHk6dGhpcy5fb3B0aW9ucy5yZXF1ZXN0LnBhcmFtc0luQm9keSxwYXJhbXNTdG9yZTp0aGlzLl9wYXJhbXNTdG9yZSxlbmRwb2ludFN0b3JlOnRoaXMuX2VuZHBvaW50U3RvcmUsY2h1bmtpbmc6dGhpcy5fb3B0aW9ucy5jaHVua2luZyxyZXN1bWU6dGhpcy5fb3B0aW9ucy5yZXN1bWUsYmxvYnM6dGhpcy5fb3B0aW9ucy5ibG9icyxsb2c6ZnVuY3Rpb24oYiwKYyl7YS5sb2coYixjKX0sb25Qcm9ncmVzczpmdW5jdGlvbihiLGMsZCxlKXthLl9vblByb2dyZXNzKGIsYyxkLGUpO2EuX29wdGlvbnMuY2FsbGJhY2tzLm9uUHJvZ3Jlc3MoYixjLGQsZSl9LG9uQ29tcGxldGU6ZnVuY3Rpb24oYixjLGQsZSl7YS5fb25Db21wbGV0ZShiLGMsZCxlKTthLl9vcHRpb25zLmNhbGxiYWNrcy5vbkNvbXBsZXRlKGIsYyxkKX0sb25DYW5jZWw6ZnVuY3Rpb24oYixjKXthLl9vbkNhbmNlbChiLGMpO2EuX29wdGlvbnMuY2FsbGJhY2tzLm9uQ2FuY2VsKGIsYyl9LG9uVXBsb2FkOmZ1bmN0aW9uKGIsYyl7YS5fb25VcGxvYWQoYixjKTthLl9vcHRpb25zLmNhbGxiYWNrcy5vblVwbG9hZChiLGMpfSxvblVwbG9hZENodW5rOmZ1bmN0aW9uKGIsYyxkKXthLl9vcHRpb25zLmNhbGxiYWNrcy5vblVwbG9hZENodW5rKGIsYyxkKX0sb25SZXN1bWU6ZnVuY3Rpb24oYixjLGQpe3JldHVybiBhLl9vcHRpb25zLmNhbGxiYWNrcy5vblJlc3VtZShiLGMsZCl9LG9uQXV0b1JldHJ5OmZ1bmN0aW9uKGIsCmMsZCxlKXthLl9wcmV2ZW50UmV0cmllc1tiXT1kW2EuX29wdGlvbnMucmV0cnkucHJldmVudFJldHJ5UmVzcG9uc2VQcm9wZXJ0eV07cmV0dXJuIGEuX3Nob3VsZEF1dG9SZXRyeShiLGMsZCk/KGEuX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3IoYixjLGQsZSksYS5fb3B0aW9ucy5jYWxsYmFja3Mub25BdXRvUmV0cnkoYixjLGEuX2F1dG9SZXRyaWVzW2JdKzEpLGEuX29uQmVmb3JlQXV0b1JldHJ5KGIsYyksYS5fcmV0cnlUaW1lb3V0c1tiXT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YS5fb25BdXRvUmV0cnkoYixjLGQpfSwxRTMqYS5fb3B0aW9ucy5yZXRyeS5hdXRvQXR0ZW1wdERlbGF5KSwhMCk6ITF9fSl9LF9jcmVhdGVEZWxldGVIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4gbmV3IHFxLkRlbGV0ZUZpbGVBamF4UmVxdWVzdG9yKHttYXhDb25uZWN0aW9uczp0aGlzLl9vcHRpb25zLm1heENvbm5lY3Rpb25zLGN1c3RvbUhlYWRlcnM6dGhpcy5fb3B0aW9ucy5kZWxldGVGaWxlLmN1c3RvbUhlYWRlcnMsCnBhcmFtc1N0b3JlOnRoaXMuX2RlbGV0ZUZpbGVQYXJhbXNTdG9yZSxlbmRwb2ludFN0b3JlOnRoaXMuX2RlbGV0ZUZpbGVFbmRwb2ludFN0b3JlLGRlbW9Nb2RlOnRoaXMuX29wdGlvbnMuZGVtb01vZGUsY29yczp0aGlzLl9vcHRpb25zLmNvcnMsbG9nOmZ1bmN0aW9uKGIsYyl7YS5sb2coYixjKX0sb25EZWxldGU6ZnVuY3Rpb24oYil7YS5fb25EZWxldGUoYik7YS5fb3B0aW9ucy5jYWxsYmFja3Mub25EZWxldGUoYil9LG9uRGVsZXRlQ29tcGxldGU6ZnVuY3Rpb24oYixjLGQpe2EuX29uRGVsZXRlQ29tcGxldGUoYixjLGQpO2EuX29wdGlvbnMuY2FsbGJhY2tzLm9uRGVsZXRlQ29tcGxldGUoYixjLGQpfX0pfSxfY3JlYXRlUGFzdGVIYW5kbGVyOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcztyZXR1cm4gbmV3IHFxLlBhc3RlU3VwcG9ydCh7dGFyZ2V0RWxlbWVudDp0aGlzLl9vcHRpb25zLnBhc3RlLnRhcmdldEVsZW1lbnQsY2FsbGJhY2tzOntsb2c6ZnVuY3Rpb24oYixjKXthLmxvZyhiLApjKX0scGFzdGVSZWNlaXZlZDpmdW5jdGlvbihiKXt2YXIgYz1hLl9vcHRpb25zLmNhbGxiYWNrcy5vblBhc3RlUmVjZWl2ZWQsYz1jKGIpO2MudGhlbj9jLnRoZW4oZnVuY3Rpb24oYyl7YS5faGFuZGxlUGFzdGVTdWNjZXNzKGIsYyl9LGZ1bmN0aW9uKGIpe2EubG9nKCJJZ25vcmluZyBwYXN0ZWQgaW1hZ2UgcGVyIHBhc3RlIHJlY2VpdmVkIGNhbGxiYWNrLiAgUmVhc29uID0gJyIrYisiJyIpfSk6YS5sb2coIlByb21pc2UgY29udHJhY3Qgbm90IGZ1bGZpbGxlZCBpbiBwYXN0ZVJlY2VpdmVkIGNhbGxiYWNrIGhhbmRsZXIhICBJZ25vcmluZyBwYXN0ZWQgaXRlbS4iLCJlcnJvciIpfX19KX0sX2hhbmRsZVBhc3RlU3VjY2VzczpmdW5jdGlvbihhLGIpe3ZhciBjPWEudHlwZS5zcGxpdCgiLyIpWzFdLGQ9YjtudWxsPT1kJiYoZD10aGlzLl9vcHRpb25zLnBhc3RlLmRlZmF1bHROYW1lKTt0aGlzLmFkZEJsb2JzKHtuYW1lOmQrKCIuIitjKSxibG9iOmF9KX0sX3ByZXZlbnRMZWF2ZUluUHJvZ3Jlc3M6ZnVuY3Rpb24oKXt2YXIgYT0KdGhpczt0aGlzLl9kaXNwb3NlU3VwcG9ydC5hdHRhY2god2luZG93LCJiZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKGIpe2lmKGEuX2ZpbGVzSW5Qcm9ncmVzcy5sZW5ndGgpcmV0dXJuIGI9Ynx8d2luZG93LmV2ZW50LGIucmV0dXJuVmFsdWU9YS5fb3B0aW9ucy5tZXNzYWdlcy5vbkxlYXZlfSl9LF9vblN1Ym1pdDpmdW5jdGlvbihhKXt0aGlzLl9uZXRGaWxlc1VwbG9hZGVkT3JRdWV1ZWQrKzt0aGlzLl9vcHRpb25zLmF1dG9VcGxvYWQmJnRoaXMuX2ZpbGVzSW5Qcm9ncmVzcy5wdXNoKGEpfSxfb25Qcm9ncmVzczpmdW5jdGlvbigpe30sX29uQ29tcGxldGU6ZnVuY3Rpb24oYSxiLGMsZCl7Yy5zdWNjZXNzfHx0aGlzLl9uZXRGaWxlc1VwbG9hZGVkT3JRdWV1ZWQtLTt0aGlzLl9yZW1vdmVGcm9tRmlsZXNJblByb2dyZXNzKGEpO3RoaXMuX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3IoYSxiLGMsZCl9LF9vbkNhbmNlbDpmdW5jdGlvbihhKXt0aGlzLl9uZXRGaWxlc1VwbG9hZGVkT3JRdWV1ZWQtLTsKdGhpcy5fcmVtb3ZlRnJvbUZpbGVzSW5Qcm9ncmVzcyhhKTtjbGVhclRpbWVvdXQodGhpcy5fcmV0cnlUaW1lb3V0c1thXSk7YT1xcS5pbmRleE9mKHRoaXMuX3N0b3JlZElkcyxhKTshdGhpcy5fb3B0aW9ucy5hdXRvVXBsb2FkJiYwPD1hJiZ0aGlzLl9zdG9yZWRJZHMuc3BsaWNlKGEsMSl9LF9pc0RlbGV0ZVBvc3NpYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29wdGlvbnMuZGVsZXRlRmlsZS5lbmFibGVkJiYoIXRoaXMuX29wdGlvbnMuY29ycy5leHBlY3RlZHx8dGhpcy5fb3B0aW9ucy5jb3JzLmV4cGVjdGVkJiYocXEuaWUxMCgpfHwhcXEuaWUoKSkpfSxfb25TdWJtaXREZWxldGU6ZnVuY3Rpb24oYSl7aWYodGhpcy5faXNEZWxldGVQb3NzaWJsZSgpKSExIT09dGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25TdWJtaXREZWxldGUoYSkmJnRoaXMuX2RlbGV0ZUhhbmRsZXIuc2VuZERlbGV0ZShhLHRoaXMuZ2V0VXVpZChhKSk7ZWxzZSByZXR1cm4gdGhpcy5sb2coIkRlbGV0ZSByZXF1ZXN0IGlnbm9yZWQgZm9yIElEICIrCmErIiwgZGVsZXRlIGZlYXR1cmUgaXMgZGlzYWJsZWQgb3IgcmVxdWVzdCBub3QgcG9zc2libGUgZHVlIHRvIENPUlMgb24gYSB1c2VyIGFnZW50IHRoYXQgZG9lcyBub3Qgc3VwcG9ydCBwcmUtZmxpZ2h0aW5nLiIsIndhcm4iKSwhMX0sX29uRGVsZXRlOmZ1bmN0aW9uKCl7fSxfb25EZWxldGVDb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5faGFuZGxlci5nZXROYW1lKGEpO2M/KHRoaXMubG9nKCJEZWxldGUgcmVxdWVzdCBmb3IgJyIrZCsiJyBoYXMgZmFpbGVkLiIsImVycm9yIiksdGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25FcnJvcihhLGQsIkRlbGV0ZSByZXF1ZXN0IGZhaWxlZCB3aXRoIHJlc3BvbnNlIGNvZGUgIitiLnN0YXR1cyxiKSk6KHRoaXMuX25ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZC0tLHRoaXMubG9nKCJEZWxldGUgcmVxdWVzdCBmb3IgJyIrZCsiJyBoYXMgc3VjY2VlZGVkLiIpKX0sX3JlbW92ZUZyb21GaWxlc0luUHJvZ3Jlc3M6ZnVuY3Rpb24oYSl7YT0KcXEuaW5kZXhPZih0aGlzLl9maWxlc0luUHJvZ3Jlc3MsYSk7MDw9YSYmdGhpcy5fZmlsZXNJblByb2dyZXNzLnNwbGljZShhLDEpfSxfb25VcGxvYWQ6ZnVuY3Rpb24oKXt9LF9vbklucHV0Q2hhbmdlOmZ1bmN0aW9uKGEpe3FxLmlzWGhyVXBsb2FkU3VwcG9ydGVkKCk/dGhpcy5hZGRGaWxlcyhhLmZpbGVzKTp0aGlzLmFkZEZpbGVzKGEpO3RoaXMuX2J1dHRvbi5yZXNldCgpfSxfb25CZWZvcmVBdXRvUmV0cnk6ZnVuY3Rpb24oYSxiKXt0aGlzLmxvZygiV2FpdGluZyAiK3RoaXMuX29wdGlvbnMucmV0cnkuYXV0b0F0dGVtcHREZWxheSsiIHNlY29uZHMgYmVmb3JlIHJldHJ5aW5nICIrYisiLi4uIil9LF9vbkF1dG9SZXRyeTpmdW5jdGlvbihhLGIpe3RoaXMubG9nKCJSZXRyeWluZyAiK2IrIi4uLiIpO3RoaXMuX2F1dG9SZXRyaWVzW2FdKys7dGhpcy5faGFuZGxlci5yZXRyeShhKX0sX3Nob3VsZEF1dG9SZXRyeTpmdW5jdGlvbihhKXtyZXR1cm4hdGhpcy5fcHJldmVudFJldHJpZXNbYV0mJgp0aGlzLl9vcHRpb25zLnJldHJ5LmVuYWJsZUF1dG8/KHZvaWQgMD09PXRoaXMuX2F1dG9SZXRyaWVzW2FdJiYodGhpcy5fYXV0b1JldHJpZXNbYV09MCksdGhpcy5fYXV0b1JldHJpZXNbYV08dGhpcy5fb3B0aW9ucy5yZXRyeS5tYXhBdXRvQXR0ZW1wdHMpOiExfSxfb25CZWZvcmVNYW51YWxSZXRyeTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9vcHRpb25zLnZhbGlkYXRpb24uaXRlbUxpbWl0O2lmKHRoaXMuX3ByZXZlbnRSZXRyaWVzW2FdKXJldHVybiB0aGlzLmxvZygiUmV0cmllcyBhcmUgZm9yYmlkZGVuIGZvciBpZCAiK2EsIndhcm4iKSwhMTtpZih0aGlzLl9oYW5kbGVyLmlzVmFsaWQoYSkpe3ZhciBjPXRoaXMuX2hhbmRsZXIuZ2V0TmFtZShhKTtpZighMT09PXRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uTWFudWFsUmV0cnkoYSxjKSlyZXR1cm4hMTtpZigwPGImJnRoaXMuX25ldEZpbGVzVXBsb2FkZWRPclF1ZXVlZCsxPmIpcmV0dXJuIHRoaXMuX2l0ZW1FcnJvcigicmV0cnlGYWlsVG9vTWFueUl0ZW1zIiwKIiIpLCExO3RoaXMubG9nKCJSZXRyeWluZyB1cGxvYWQgZm9yICciK2MrIicgKGlkOiAiK2ErIikuLi4iKTt0aGlzLl9maWxlc0luUHJvZ3Jlc3MucHVzaChhKTtyZXR1cm4hMH10aGlzLmxvZygiJyIrYSsiJyBpcyBub3QgYSB2YWxpZCBmaWxlIElEIiwiZXJyb3IiKTtyZXR1cm4hMX0sX21heWJlUGFyc2VBbmRTZW5kVXBsb2FkRXJyb3I6ZnVuY3Rpb24oYSxiLGMsZCl7aWYoIWMuc3VjY2VzcylpZihkJiYyMDAhPT1kLnN0YXR1cyYmIWMuZXJyb3IpdGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25FcnJvcihhLGIsIlhIUiByZXR1cm5lZCByZXNwb25zZSBjb2RlICIrZC5zdGF0dXMsZCk7ZWxzZSB0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbkVycm9yKGEsYixjLmVycm9yP2MuZXJyb3I6IlVwbG9hZCBmYWlsdXJlIHJlYXNvbiB1bmtub3duIixkKX0sX3VwbG9hZEZpbGVPckJsb2JEYXRhTGlzdDpmdW5jdGlvbihhKXt2YXIgYjtpZih0aGlzLl9pc0JhdGNoVmFsaWQodGhpcy5fZ2V0VmFsaWRhdGlvbkRlc2NyaXB0b3JzKGEpKSlpZigwPAphLmxlbmd0aClmb3IoYj0wO2I8YS5sZW5ndGg7YisrKWlmKHRoaXMuX3ZhbGlkYXRlRmlsZU9yQmxvYkRhdGEoYVtiXSkpdGhpcy5fdXBsb2FkKGFbYl0pO2Vsc2V7aWYodGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLnN0b3BPbkZpcnN0SW52YWxpZEZpbGUpYnJlYWt9ZWxzZSB0aGlzLl9pdGVtRXJyb3IoIm5vRmlsZXNFcnJvciIsIiIpfSxfdXBsb2FkOmZ1bmN0aW9uKGEpe3ZhciBhPXRoaXMuX2hhbmRsZXIuYWRkKGEpLGI9dGhpcy5faGFuZGxlci5nZXROYW1lKGEpOyExIT09dGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25TdWJtaXQoYSxiKSYmKHRoaXMuX29uU3VibWl0KGEsYiksdGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25TdWJtaXR0ZWQoYSxiKSx0aGlzLl9vcHRpb25zLmF1dG9VcGxvYWQ/dGhpcy5faGFuZGxlci51cGxvYWQoYSk6dGhpcy5fc3RvcmVGb3JMYXRlcihhKSl9LF9zdG9yZUZvckxhdGVyOmZ1bmN0aW9uKGEpe3RoaXMuX3N0b3JlZElkcy5wdXNoKGEpfSxfaXNCYXRjaFZhbGlkOmZ1bmN0aW9uKGEpe3ZhciBiOwpiPXRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5pdGVtTGltaXQ7dmFyIGM9dGhpcy5fbmV0RmlsZXNVcGxvYWRlZE9yUXVldWVkK2EubGVuZ3RoO2lmKGE9ITEhPT10aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vblZhbGlkYXRlQmF0Y2goYSkpMD09PWJ8fGM8PWI/YT0hMDooYT0hMSxiPXRoaXMuX29wdGlvbnMubWVzc2FnZXMudG9vTWFueUl0ZW1zRXJyb3IucmVwbGFjZSgvXHtuZXRJdGVtc1x9L2csYykucmVwbGFjZSgvXHtpdGVtTGltaXRcfS9nLGIpLHRoaXMuX2JhdGNoRXJyb3IoYikpO3JldHVybiBhfSxfdmFsaWRhdGVGaWxlT3JCbG9iRGF0YTpmdW5jdGlvbihhKXt2YXIgYixjLGQ7Yj10aGlzLl9nZXRWYWxpZGF0aW9uRGVzY3JpcHRvcihhKTtjPWIubmFtZTtkPWIuc2l6ZTtyZXR1cm4hMT09PXRoaXMuX29wdGlvbnMuY2FsbGJhY2tzLm9uVmFsaWRhdGUoYik/ITE6cXEuaXNGaWxlT3JJbnB1dChhKSYmIXRoaXMuX2lzQWxsb3dlZEV4dGVuc2lvbihjKT8odGhpcy5faXRlbUVycm9yKCJ0eXBlRXJyb3IiLApjKSwhMSk6MD09PWQ/KHRoaXMuX2l0ZW1FcnJvcigiZW1wdHlFcnJvciIsYyksITEpOmQmJnRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5zaXplTGltaXQmJmQ+dGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLnNpemVMaW1pdD8odGhpcy5faXRlbUVycm9yKCJzaXplRXJyb3IiLGMpLCExKTpkJiZkPHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5taW5TaXplTGltaXQ/KHRoaXMuX2l0ZW1FcnJvcigibWluU2l6ZUVycm9yIixjKSwhMSk6ITB9LF9pdGVtRXJyb3I6ZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjKGEsYil7ZD1kLnJlcGxhY2UoYSxiKX12YXIgZD10aGlzLl9vcHRpb25zLm1lc3NhZ2VzW2FdLGU9W10sZjtxcS5lYWNoKHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5hbGxvd2VkRXh0ZW5zaW9ucyxmdW5jdGlvbihhLGIpe3FxLmlzU3RyaW5nKGIpJiZlLnB1c2goYil9KTtmPWUuam9pbigiLCAiKS50b0xvd2VyQ2FzZSgpO2MoIntmaWxlfSIsdGhpcy5fb3B0aW9ucy5mb3JtYXRGaWxlTmFtZShiKSk7CmMoIntleHRlbnNpb25zfSIsZik7Yygie3NpemVMaW1pdH0iLHRoaXMuX2Zvcm1hdFNpemUodGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLnNpemVMaW1pdCkpO2MoInttaW5TaXplTGltaXR9Iix0aGlzLl9mb3JtYXRTaXplKHRoaXMuX29wdGlvbnMudmFsaWRhdGlvbi5taW5TaXplTGltaXQpKTt0aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vbkVycm9yKG51bGwsYixkKTtyZXR1cm4gZH0sX2JhdGNoRXJyb3I6ZnVuY3Rpb24oYSl7dGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25FcnJvcihudWxsLG51bGwsYSl9LF9pc0FsbG93ZWRFeHRlbnNpb246ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5fb3B0aW9ucy52YWxpZGF0aW9uLmFsbG93ZWRFeHRlbnNpb25zLGM9ITE7aWYoIWIubGVuZ3RoKXJldHVybiEwO3FxLmVhY2goYixmdW5jdGlvbihiLGUpe2lmKHFxLmlzU3RyaW5nKGUpJiZudWxsIT1hLm1hdGNoKFJlZ0V4cCgiXFwuIitlKyIkIiwiaSIpKSlyZXR1cm4gYz0hMCwhMX0pO3JldHVybiBjfSwKX2Zvcm1hdFNpemU6ZnVuY3Rpb24oYSl7dmFyIGI9LTE7ZG8gYS89MTAyNCxiKys7d2hpbGUoOTk8YSk7cmV0dXJuIE1hdGgubWF4KGEsMC4xKS50b0ZpeGVkKDEpK3RoaXMuX29wdGlvbnMudGV4dC5zaXplU3ltYm9sc1tiXX0sX3dyYXBDYWxsYmFja3M6ZnVuY3Rpb24oKXt2YXIgYSxiO2E9dGhpcztiPWZ1bmN0aW9uKGIsYyxmKXt0cnl7cmV0dXJuIGMuYXBwbHkoYSxmKX1jYXRjaChnKXthLmxvZygiQ2F1Z2h0IGV4Y2VwdGlvbiBpbiAnIitiKyInIGNhbGxiYWNrIC0gIitnLm1lc3NhZ2UsImVycm9yIil9fTtmb3IodmFyIGMgaW4gdGhpcy5fb3B0aW9ucy5jYWxsYmFja3MpKGZ1bmN0aW9uKCl7dmFyIGQsZTtkPWM7ZT1hLl9vcHRpb25zLmNhbGxiYWNrc1tkXTthLl9vcHRpb25zLmNhbGxiYWNrc1tkXT1mdW5jdGlvbigpe3JldHVybiBiKGQsZSxhcmd1bWVudHMpfX0pKCl9LF9wYXJzZUZpbGVPckJsb2JEYXRhTmFtZTpmdW5jdGlvbihhKXtyZXR1cm4gcXEuaXNGaWxlT3JJbnB1dChhKT8KYS52YWx1ZT9hLnZhbHVlLnJlcGxhY2UoLy4qKFwvfFxcKS8sIiIpOm51bGwhPT1hLmZpbGVOYW1lJiZ2b2lkIDAhPT1hLmZpbGVOYW1lP2EuZmlsZU5hbWU6YS5uYW1lOmEubmFtZX0sX3BhcnNlRmlsZU9yQmxvYkRhdGFTaXplOmZ1bmN0aW9uKGEpe3ZhciBiO3FxLmlzRmlsZU9ySW5wdXQoYSk/YS52YWx1ZXx8KGI9bnVsbCE9PWEuZmlsZVNpemUmJnZvaWQgMCE9PWEuZmlsZVNpemU/YS5maWxlU2l6ZTphLnNpemUpOmI9YS5ibG9iLnNpemU7cmV0dXJuIGJ9LF9nZXRWYWxpZGF0aW9uRGVzY3JpcHRvcjpmdW5jdGlvbihhKXt2YXIgYixjO2M9e307Yj10aGlzLl9wYXJzZUZpbGVPckJsb2JEYXRhTmFtZShhKTthPXRoaXMuX3BhcnNlRmlsZU9yQmxvYkRhdGFTaXplKGEpO2MubmFtZT1iO2EmJihjLnNpemU9YSk7cmV0dXJuIGN9LF9nZXRWYWxpZGF0aW9uRGVzY3JpcHRvcnM6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcyxjPVtdO3FxLmVhY2goYSxmdW5jdGlvbihhLGUpe2MucHVzaChiLl9nZXRWYWxpZGF0aW9uRGVzY3JpcHRvcihlKSl9KTsKcmV0dXJuIGN9LF9jcmVhdGVQYXJhbXNTdG9yZTpmdW5jdGlvbihhKXt2YXIgYj17fSxjPXRoaXM7cmV0dXJue3NldFBhcmFtczpmdW5jdGlvbihhLGMpe3ZhciBmPXt9O3FxLmV4dGVuZChmLGEpO2JbY109Zn0sZ2V0UGFyYW1zOmZ1bmN0aW9uKGQpe3ZhciBlPXt9O251bGwhPWQmJmJbZF0/cXEuZXh0ZW5kKGUsYltkXSk6cXEuZXh0ZW5kKGUsYy5fb3B0aW9uc1thXS5wYXJhbXMpO3JldHVybiBlfSxyZW1vdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGRlbGV0ZSBiW2FdfSxyZXNldDpmdW5jdGlvbigpe2I9e319fX0sX2NyZWF0ZUVuZHBvaW50U3RvcmU6ZnVuY3Rpb24oYSl7dmFyIGI9e30sYz10aGlzO3JldHVybntzZXRFbmRwb2ludDpmdW5jdGlvbihhLGMpe2JbY109YX0sZ2V0RW5kcG9pbnQ6ZnVuY3Rpb24oZCl7cmV0dXJuIG51bGwhPWQmJmJbZF0/YltkXTpjLl9vcHRpb25zW2FdLmVuZHBvaW50fSxyZW1vdmU6ZnVuY3Rpb24oYSl7cmV0dXJuIGRlbGV0ZSBiW2FdfSxyZXNldDpmdW5jdGlvbigpe2I9Cnt9fX19fTsKcXEuRHJhZ0FuZERyb3A9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe2s9PT1sJiYhaSYmKGcuY2FsbGJhY2tzLmxvZygiR3JhYmJlZCAiK20ubGVuZ3RoKyIgZmlsZXMgYWZ0ZXIgdHJlZSB0cmF2ZXJzYWwuIiksbi5kcm9wRGlzYWJsZWQoITEpLGcuY2FsbGJhY2tzLmRyb3BQcm9jZXNzaW5nKCExLG0pKX1mdW5jdGlvbiBjKGEpe3ZhciBkO2srPTE7YS5pc0ZpbGU/YS5maWxlKGZ1bmN0aW9uKGEpe20ucHVzaChhKTtsKz0xO2IoKX0pOmEuaXNEaXJlY3RvcnkmJihpPSEwLGE9YS5jcmVhdGVSZWFkZXIoKSxhLnJlYWRFbnRyaWVzKGZ1bmN0aW9uKGEpe2wrPTE7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrPTEpYyhhW2RdKTtpPSExO2EubGVuZ3RofHxiKCl9KSl9ZnVuY3Rpb24gZChhKXtuPW5ldyBxcS5VcGxvYWREcm9wWm9uZSh7ZWxlbWVudDphLG9uRW50ZXI6ZnVuY3Rpb24oYil7cXEoYSkuYWRkQ2xhc3MoZy5jbGFzc2VzLmRyb3BBY3RpdmUpO2Iuc3RvcFByb3BhZ2F0aW9uKCl9LG9uTGVhdmVOb3REZXNjZW5kYW50czpmdW5jdGlvbigpe3FxKGEpLnJlbW92ZUNsYXNzKGcuY2xhc3Nlcy5kcm9wQWN0aXZlKX0sCm9uRHJvcDpmdW5jdGlvbihkKXtnLmhpZGVEcm9wem9uZXMmJnFxKGEpLmhpZGUoKTtxcShhKS5yZW1vdmVDbGFzcyhnLmNsYXNzZXMuZHJvcEFjdGl2ZSk7dmFyIGQ9ZC5kYXRhVHJhbnNmZXIsZSxmO2cuY2FsbGJhY2tzLmRyb3BQcm9jZXNzaW5nKCEwKTtuLmRyb3BEaXNhYmxlZCghMCk7aWYoMTxkLmZpbGVzLmxlbmd0aCYmIWcubXVsdGlwbGUpZy5jYWxsYmFja3MuZHJvcFByb2Nlc3NpbmcoITEpLGcuY2FsbGJhY2tzLmVycm9yKCJ0b29NYW55RmlsZXNFcnJvciIsIiIpLG4uZHJvcERpc2FibGVkKCExKTtlbHNlIGlmKG09W10sbD1rPTAscXEuaXNGb2xkZXJEcm9wU3VwcG9ydGVkKGQpKXtlPWQuaXRlbXM7Zm9yKGQ9MDtkPGUubGVuZ3RoO2QrPTEpaWYoZj1lW2RdLndlYmtpdEdldEFzRW50cnkoKSlmLmlzRmlsZT8obS5wdXNoKGVbZF0uZ2V0QXNGaWxlKCkpLGQ9PT1lLmxlbmd0aC0xJiZiKCkpOmMoZil9ZWxzZSBnLmNhbGxiYWNrcy5kcm9wUHJvY2Vzc2luZyghMSxkLmZpbGVzKSwKbi5kcm9wRGlzYWJsZWQoITEpfX0pO3QuYWRkRGlzcG9zZXIoZnVuY3Rpb24oKXtuLmRpc3Bvc2UoKX0pO2cuaGlkZURyb3B6b25lcyYmcXEoYSkuaGlkZSgpfWZ1bmN0aW9uIGUoYSl7dmFyIGI7cXEuZWFjaChhLmRhdGFUcmFuc2Zlci50eXBlcyxmdW5jdGlvbihhLGMpe2lmKCJGaWxlcyI9PT1jKXJldHVybiBiPSEwLCExfSk7cmV0dXJuIGJ9ZnVuY3Rpb24gZigpe2cuZHJvcEFyZWEmJmcuZXh0cmFEcm9wem9uZXMucHVzaChnLmRyb3BBcmVhKTt2YXIgYSxiPWcuZXh0cmFEcm9wem9uZXM7Zm9yKGE9MDthPGIubGVuZ3RoO2ErPTEpZChiW2FdKTtnLmRyb3BBcmVhJiYoIXFxLmllKCl8fHFxLmllMTAoKSkmJnQuYXR0YWNoKGRvY3VtZW50LCJkcmFnZW50ZXIiLGZ1bmN0aW9uKGMpe2lmKCFuLmRyb3BEaXNhYmxlZCgpJiZlKGMpJiYhcXEoZy5kcm9wQXJlYSkuaGFzQ2xhc3MoZy5jbGFzc2VzLmRyb3BEaXNhYmxlZCkpe2cuZHJvcEFyZWEuc3R5bGUuZGlzcGxheT0iYmxvY2siO2ZvcihhPQowO2E8Yi5sZW5ndGg7YSs9MSliW2FdLnN0eWxlLmRpc3BsYXk9ImJsb2NrIn19KTt0LmF0dGFjaChkb2N1bWVudCwiZHJhZ2xlYXZlIixmdW5jdGlvbihjKXtpZihnLmhpZGVEcm9wem9uZXMmJnFxLkZpbmVVcGxvYWRlci5wcm90b3R5cGUuX2xlYXZpbmdfZG9jdW1lbnRfb3V0KGMpKWZvcihhPTA7YTxiLmxlbmd0aDthKz0xKXFxKGJbYV0pLmhpZGUoKX0pO3QuYXR0YWNoKGRvY3VtZW50LCJkcm9wIixmdW5jdGlvbihjKXtpZihnLmhpZGVEcm9wem9uZXMpZm9yKGE9MDthPGIubGVuZ3RoO2ErPTEpcXEoYlthXSkuaGlkZSgpO2MucHJldmVudERlZmF1bHQoKX0pfXZhciBnLG4saSxtPVtdLGs9MCxsPTAsdD1uZXcgcXEuRGlzcG9zZVN1cHBvcnQ7Zz17ZHJvcEFyZWE6bnVsbCxleHRyYURyb3B6b25lczpbXSxoaWRlRHJvcHpvbmVzOiEwLG11bHRpcGxlOiEwLGNsYXNzZXM6e2Ryb3BBY3RpdmU6bnVsbH0sY2FsbGJhY2tzOntkcm9wUHJvY2Vzc2luZzpmdW5jdGlvbigpe30sZXJyb3I6ZnVuY3Rpb24oKXt9LApsb2c6ZnVuY3Rpb24oKXt9fX07cXEuZXh0ZW5kKGcsYSk7cmV0dXJue3NldHVwOmZ1bmN0aW9uKCl7ZigpfSxzZXR1cEV4dHJhRHJvcHpvbmU6ZnVuY3Rpb24oYSl7Zy5leHRyYURyb3B6b25lcy5wdXNoKGEpO2QoYSl9LHJlbW92ZUV4dHJhRHJvcHpvbmU6ZnVuY3Rpb24oYSl7dmFyIGIsYz1nLmV4dHJhRHJvcHpvbmVzO2ZvcihiIGluIGMpaWYoY1tiXT09PWEpcmV0dXJuIGMuc3BsaWNlKGIsMSl9LGRpc3Bvc2U6ZnVuY3Rpb24oKXt0LmRpc3Bvc2UoKTtuLmRpc3Bvc2UoKX19fTsKcXEuVXBsb2FkRHJvcFpvbmU9ZnVuY3Rpb24oYSl7ZnVuY3Rpb24gYigpe3JldHVybiBxcS5zYWZhcmkoKXx8cXEuZmlyZWZveCgpJiZxcS53aW5kb3dzKCl9ZnVuY3Rpb24gYyhhKXtpZihxcS5pZSgpJiYhcXEuaWUxMCgpKXJldHVybiExO3ZhciBiPWEuZGF0YVRyYW5zZmVyLGM9cXEuc2FmYXJpKCksYT1xcS5pZTEwKCk/ITA6Im5vbmUiIT09Yi5lZmZlY3RBbGxvd2VkO3JldHVybiBiJiZhJiYoYi5maWxlc3x8IWMmJmIudHlwZXMuY29udGFpbnMmJmIudHlwZXMuY29udGFpbnMoIkZpbGVzIikpfWZ1bmN0aW9uIGQoYSl7dm9pZCAwIT09YSYmKGc9YSk7cmV0dXJuIGd9dmFyIGUsZixnLG4saT1uZXcgcXEuRGlzcG9zZVN1cHBvcnQ7ZT17ZWxlbWVudDpudWxsLG9uRW50ZXI6ZnVuY3Rpb24oKXt9LG9uTGVhdmU6ZnVuY3Rpb24oKXt9LG9uTGVhdmVOb3REZXNjZW5kYW50czpmdW5jdGlvbigpe30sb25Ecm9wOmZ1bmN0aW9uKCl7fX07cXEuZXh0ZW5kKGUsYSk7Zj1lLmVsZW1lbnQ7CihmdW5jdGlvbigpe258fChiP2kuYXR0YWNoKGRvY3VtZW50LCJkcmFnb3ZlciIsZnVuY3Rpb24oYSl7YS5wcmV2ZW50RGVmYXVsdCgpfSk6aS5hdHRhY2goZG9jdW1lbnQsImRyYWdvdmVyIixmdW5jdGlvbihhKXthLmRhdGFUcmFuc2ZlciYmKGEuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9Im5vbmUiLGEucHJldmVudERlZmF1bHQoKSl9KSxuPSEwKX0pKCk7KGZ1bmN0aW9uKCl7aS5hdHRhY2goZiwiZHJhZ292ZXIiLGZ1bmN0aW9uKGEpe2lmKGMoYSkpe3ZhciBiPXFxLmllKCk/bnVsbDphLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkO2EuZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3Q9Im1vdmUiPT09Ynx8ImxpbmtNb3ZlIj09PWI/Im1vdmUiOiJjb3B5IjthLnN0b3BQcm9wYWdhdGlvbigpO2EucHJldmVudERlZmF1bHQoKX19KTtpLmF0dGFjaChmLCJkcmFnZW50ZXIiLGZ1bmN0aW9uKGEpe2lmKCFkKCkmJmMoYSkpZS5vbkVudGVyKGEpfSk7aS5hdHRhY2goZiwiZHJhZ2xlYXZlIiwKZnVuY3Rpb24oYSl7aWYoYyhhKSl7ZS5vbkxlYXZlKGEpO3ZhciBiPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoYS5jbGllbnRYLGEuY2xpZW50WSk7aWYoIXFxKHRoaXMpLmNvbnRhaW5zKGIpKWUub25MZWF2ZU5vdERlc2NlbmRhbnRzKGEpfX0pO2kuYXR0YWNoKGYsImRyb3AiLGZ1bmN0aW9uKGEpeyFkKCkmJmMoYSkmJihhLnByZXZlbnREZWZhdWx0KCksZS5vbkRyb3AoYSkpfSl9KSgpO3JldHVybntkcm9wRGlzYWJsZWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGQoYSl9LGRpc3Bvc2U6ZnVuY3Rpb24oKXtpLmRpc3Bvc2UoKX19fTsKcXEuRmluZVVwbG9hZGVyPWZ1bmN0aW9uKGEpe3FxLkZpbmVVcGxvYWRlckJhc2ljLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtxcS5leHRlbmQodGhpcy5fb3B0aW9ucyx7ZWxlbWVudDpudWxsLGxpc3RFbGVtZW50Om51bGwsZHJhZ0FuZERyb3A6e2V4dHJhRHJvcHpvbmVzOltdLGhpZGVEcm9wem9uZXM6ITAsZGlzYWJsZURlZmF1bHREcm9wem9uZTohMX0sdGV4dDp7dXBsb2FkQnV0dG9uOiJVcGxvYWQgYSBmaWxlIixjYW5jZWxCdXR0b246IkNhbmNlbCIscmV0cnlCdXR0b246IlJldHJ5IixkZWxldGVCdXR0b246IkRlbGV0ZSIsZmFpbFVwbG9hZDoiVXBsb2FkIGZhaWxlZCIsZHJhZ1pvbmU6IkRyb3AgZmlsZXMgaGVyZSB0byB1cGxvYWQiLGRyb3BQcm9jZXNzaW5nOiJQcm9jZXNzaW5nIGRyb3BwZWQgZmlsZXMuLi4iLGZvcm1hdFByb2dyZXNzOiJ7cGVyY2VudH0lIG9mIHt0b3RhbF9zaXplfSIsd2FpdGluZ0ZvclJlc3BvbnNlOiJQcm9jZXNzaW5nLi4uIn0sdGVtcGxhdGU6JzxkaXYgY2xhc3M9InFxLXVwbG9hZGVyIj4nKwooIXRoaXMuX29wdGlvbnMuZHJhZ0FuZERyb3B8fCF0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmRpc2FibGVEZWZhdWx0RHJvcHpvbmU/JzxkaXYgY2xhc3M9InFxLXVwbG9hZC1kcm9wLWFyZWEiPjxzcGFuPntkcmFnWm9uZVRleHR9PC9zcGFuPjwvZGl2Pic6IiIpKyghdGhpcy5fb3B0aW9ucy5idXR0b24/JzxkaXYgY2xhc3M9InFxLXVwbG9hZC1idXR0b24iPjxkaXY+e3VwbG9hZEJ1dHRvblRleHR9PC9kaXY+PC9kaXY+JzoiIikrJzxzcGFuIGNsYXNzPSJxcS1kcm9wLXByb2Nlc3NpbmciPjxzcGFuPntkcm9wUHJvY2Vzc2luZ1RleHR9PC9zcGFuPjxzcGFuIGNsYXNzPSJxcS1kcm9wLXByb2Nlc3Npbmctc3Bpbm5lciI+PC9zcGFuPjwvc3Bhbj4nKyghdGhpcy5fb3B0aW9ucy5saXN0RWxlbWVudD8nPHVsIGNsYXNzPSJxcS11cGxvYWQtbGlzdCI+PC91bD4nOiIiKSsiPC9kaXY+IixmaWxlVGVtcGxhdGU6JzxsaT48ZGl2IGNsYXNzPSJxcS1wcm9ncmVzcy1iYXIiPjwvZGl2PjxzcGFuIGNsYXNzPSJxcS11cGxvYWQtc3Bpbm5lciI+PC9zcGFuPjxzcGFuIGNsYXNzPSJxcS11cGxvYWQtZmluaXNoZWQiPjwvc3Bhbj48c3BhbiBjbGFzcz0icXEtdXBsb2FkLWZpbGUiPjwvc3Bhbj48c3BhbiBjbGFzcz0icXEtdXBsb2FkLXNpemUiPjwvc3Bhbj48YSBjbGFzcz0icXEtdXBsb2FkLWNhbmNlbCIgaHJlZj0iIyI+e2NhbmNlbEJ1dHRvblRleHR9PC9hPjxhIGNsYXNzPSJxcS11cGxvYWQtcmV0cnkiIGhyZWY9IiMiPntyZXRyeUJ1dHRvblRleHR9PC9hPjxhIGNsYXNzPSJxcS11cGxvYWQtZGVsZXRlIiBocmVmPSIjIj57ZGVsZXRlQnV0dG9uVGV4dH08L2E+PHNwYW4gY2xhc3M9InFxLXVwbG9hZC1zdGF0dXMtdGV4dCI+e3N0YXR1c1RleHR9PC9zcGFuPjwvbGk+JywKY2xhc3Nlczp7YnV0dG9uOiJxcS11cGxvYWQtYnV0dG9uIixkcm9wOiJxcS11cGxvYWQtZHJvcC1hcmVhIixkcm9wQWN0aXZlOiJxcS11cGxvYWQtZHJvcC1hcmVhLWFjdGl2ZSIsZHJvcERpc2FibGVkOiJxcS11cGxvYWQtZHJvcC1hcmVhLWRpc2FibGVkIixsaXN0OiJxcS11cGxvYWQtbGlzdCIscHJvZ3Jlc3NCYXI6InFxLXByb2dyZXNzLWJhciIsZmlsZToicXEtdXBsb2FkLWZpbGUiLHNwaW5uZXI6InFxLXVwbG9hZC1zcGlubmVyIixmaW5pc2hlZDoicXEtdXBsb2FkLWZpbmlzaGVkIixyZXRyeWluZzoicXEtdXBsb2FkLXJldHJ5aW5nIixyZXRyeWFibGU6InFxLXVwbG9hZC1yZXRyeWFibGUiLHNpemU6InFxLXVwbG9hZC1zaXplIixjYW5jZWw6InFxLXVwbG9hZC1jYW5jZWwiLGRlbGV0ZUJ1dHRvbjoicXEtdXBsb2FkLWRlbGV0ZSIscmV0cnk6InFxLXVwbG9hZC1yZXRyeSIsc3RhdHVzVGV4dDoicXEtdXBsb2FkLXN0YXR1cy10ZXh0IixzdWNjZXNzOiJxcS11cGxvYWQtc3VjY2VzcyIsCmZhaWw6InFxLXVwbG9hZC1mYWlsIixzdWNjZXNzSWNvbjpudWxsLGZhaWxJY29uOm51bGwsZHJvcFByb2Nlc3Npbmc6InFxLWRyb3AtcHJvY2Vzc2luZyIsZHJvcFByb2Nlc3NpbmdTcGlubmVyOiJxcS1kcm9wLXByb2Nlc3Npbmctc3Bpbm5lciJ9LGZhaWxlZFVwbG9hZFRleHREaXNwbGF5Onttb2RlOiJkZWZhdWx0IixtYXhDaGFyczo1MCxyZXNwb25zZVByb3BlcnR5OiJlcnJvciIsZW5hYmxlVG9vbHRpcDohMH0sbWVzc2FnZXM6e3Rvb01hbnlGaWxlc0Vycm9yOiJZb3UgbWF5IG9ubHkgZHJvcCBvbmUgZmlsZSJ9LHJldHJ5OntzaG93QXV0b1JldHJ5Tm90ZTohMCxhdXRvUmV0cnlOb3RlOiJSZXRyeWluZyB7cmV0cnlOdW19L3ttYXhBdXRvfS4uLiIsc2hvd0J1dHRvbjohMX0sZGVsZXRlRmlsZTp7Zm9yY2VDb25maXJtOiExLGNvbmZpcm1NZXNzYWdlOiJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHtmaWxlbmFtZX0/IixkZWxldGluZ1N0YXR1c1RleHQ6IkRlbGV0aW5nLi4uIiwKZGVsZXRpbmdGYWlsZWRUZXh0OiJEZWxldGUgZmFpbGVkIn0sZGlzcGxheTp7ZmlsZVNpemVPblN1Ym1pdDohMX0scGFzdGU6e3Byb21wdEZvck5hbWU6ITEsbmFtZVByb21wdE1lc3NhZ2U6IlBsZWFzZSBuYW1lIHRoaXMgaW1hZ2UifSxzaG93TWVzc2FnZTpmdW5jdGlvbihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7d2luZG93LmFsZXJ0KGEpfSwwKX0sc2hvd0NvbmZpcm06ZnVuY3Rpb24oYSxjLGQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt3aW5kb3cuY29uZmlybShhKT9jKCk6ZCYmZCgpfSwwKX0sc2hvd1Byb21wdDpmdW5jdGlvbihhLGMpe3ZhciBkPW5ldyBxcS5Qcm9taXNlLGU9d2luZG93LnByb21wdChhLGMpO251bGwhPWUmJjA8cXEudHJpbVN0cihlKS5sZW5ndGg/ZC5zdWNjZXNzKGUpOmQuZmFpbHVyZSgiVW5kZWZpbmVkIG9yIGludmFsaWQgdXNlci1zdXBwbGllZCB2YWx1ZS4iKTtyZXR1cm4gZH19LCEwKTtxcS5leHRlbmQodGhpcy5fb3B0aW9ucyxhLCEwKTt0aGlzLl93cmFwQ2FsbGJhY2tzKCk7CnRoaXMuX29wdGlvbnMudGVtcGxhdGU9dGhpcy5fb3B0aW9ucy50ZW1wbGF0ZS5yZXBsYWNlKC9ce2RyYWdab25lVGV4dFx9L2csdGhpcy5fb3B0aW9ucy50ZXh0LmRyYWdab25lKTt0aGlzLl9vcHRpb25zLnRlbXBsYXRlPXRoaXMuX29wdGlvbnMudGVtcGxhdGUucmVwbGFjZSgvXHt1cGxvYWRCdXR0b25UZXh0XH0vZyx0aGlzLl9vcHRpb25zLnRleHQudXBsb2FkQnV0dG9uKTt0aGlzLl9vcHRpb25zLnRlbXBsYXRlPXRoaXMuX29wdGlvbnMudGVtcGxhdGUucmVwbGFjZSgvXHtkcm9wUHJvY2Vzc2luZ1RleHRcfS9nLHRoaXMuX29wdGlvbnMudGV4dC5kcm9wUHJvY2Vzc2luZyk7dGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGU9dGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGUucmVwbGFjZSgvXHtjYW5jZWxCdXR0b25UZXh0XH0vZyx0aGlzLl9vcHRpb25zLnRleHQuY2FuY2VsQnV0dG9uKTt0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZT10aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZS5yZXBsYWNlKC9ce3JldHJ5QnV0dG9uVGV4dFx9L2csCnRoaXMuX29wdGlvbnMudGV4dC5yZXRyeUJ1dHRvbik7dGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGU9dGhpcy5fb3B0aW9ucy5maWxlVGVtcGxhdGUucmVwbGFjZSgvXHtkZWxldGVCdXR0b25UZXh0XH0vZyx0aGlzLl9vcHRpb25zLnRleHQuZGVsZXRlQnV0dG9uKTt0aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZT10aGlzLl9vcHRpb25zLmZpbGVUZW1wbGF0ZS5yZXBsYWNlKC9ce3N0YXR1c1RleHRcfS9nLCIiKTt0aGlzLl9lbGVtZW50PXRoaXMuX29wdGlvbnMuZWxlbWVudDt0aGlzLl9lbGVtZW50LmlubmVySFRNTD10aGlzLl9vcHRpb25zLnRlbXBsYXRlO3RoaXMuX2xpc3RFbGVtZW50PXRoaXMuX29wdGlvbnMubGlzdEVsZW1lbnR8fHRoaXMuX2ZpbmQodGhpcy5fZWxlbWVudCwibGlzdCIpO3RoaXMuX2NsYXNzZXM9dGhpcy5fb3B0aW9ucy5jbGFzc2VzO3RoaXMuX2J1dHRvbnx8KHRoaXMuX2J1dHRvbj10aGlzLl9jcmVhdGVVcGxvYWRCdXR0b24odGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LAoiYnV0dG9uIikpKTt0aGlzLl9iaW5kQ2FuY2VsQW5kUmV0cnlFdmVudHMoKTt0aGlzLl9kbmQ9dGhpcy5fc2V0dXBEcmFnQW5kRHJvcCgpO3RoaXMuX29wdGlvbnMucGFzdGUudGFyZ2V0RWxlbWVudCYmdGhpcy5fb3B0aW9ucy5wYXN0ZS5wcm9tcHRGb3JOYW1lJiZ0aGlzLl9zZXR1cFBhc3RlUHJvbXB0KCl9O3FxLmV4dGVuZChxcS5GaW5lVXBsb2FkZXIucHJvdG90eXBlLHFxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZSk7CnFxLmV4dGVuZChxcS5GaW5lVXBsb2FkZXIucHJvdG90eXBlLHtjbGVhclN0b3JlZEZpbGVzOmZ1bmN0aW9uKCl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLmNsZWFyU3RvcmVkRmlsZXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX2xpc3RFbGVtZW50LmlubmVySFRNTD0iIn0sYWRkRXh0cmFEcm9wem9uZTpmdW5jdGlvbihhKXt0aGlzLl9kbmQuc2V0dXBFeHRyYURyb3B6b25lKGEpfSxyZW1vdmVFeHRyYURyb3B6b25lOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLl9kbmQucmVtb3ZlRXh0cmFEcm9wem9uZShhKX0sZ2V0SXRlbUJ5RmlsZUlkOmZ1bmN0aW9uKGEpe2Zvcih2YXIgYj10aGlzLl9saXN0RWxlbWVudC5maXJzdENoaWxkO2I7KXtpZihiLnFxRmlsZUlkPT1hKXJldHVybiBiO2I9Yi5uZXh0U2libGluZ319LHJlc2V0OmZ1bmN0aW9uKCl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLnJlc2V0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9lbGVtZW50LmlubmVySFRNTD0KdGhpcy5fb3B0aW9ucy50ZW1wbGF0ZTt0aGlzLl9saXN0RWxlbWVudD10aGlzLl9vcHRpb25zLmxpc3RFbGVtZW50fHx0aGlzLl9maW5kKHRoaXMuX2VsZW1lbnQsImxpc3QiKTt0aGlzLl9vcHRpb25zLmJ1dHRvbnx8KHRoaXMuX2J1dHRvbj10aGlzLl9jcmVhdGVVcGxvYWRCdXR0b24odGhpcy5fZmluZCh0aGlzLl9lbGVtZW50LCJidXR0b24iKSkpO3RoaXMuX2JpbmRDYW5jZWxBbmRSZXRyeUV2ZW50cygpO3RoaXMuX2RuZC5kaXNwb3NlKCk7dGhpcy5fZG5kPXRoaXMuX3NldHVwRHJhZ0FuZERyb3AoKX0sX3JlbW92ZUZpbGVJdGVtOmZ1bmN0aW9uKGEpe2E9dGhpcy5nZXRJdGVtQnlGaWxlSWQoYSk7cXEoYSkucmVtb3ZlKCl9LF9zZXR1cERyYWdBbmREcm9wOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPXRoaXMuX2ZpbmQodGhpcy5fZWxlbWVudCwiZHJvcFByb2Nlc3NpbmciKSxjLGQ7ZD1mdW5jdGlvbihhKXthLnByZXZlbnREZWZhdWx0KCl9O3RoaXMuX29wdGlvbnMuZHJhZ0FuZERyb3AuZGlzYWJsZURlZmF1bHREcm9wem9uZXx8CihjPXRoaXMuX2ZpbmQodGhpcy5fb3B0aW9ucy5lbGVtZW50LCJkcm9wIikpO2M9bmV3IHFxLkRyYWdBbmREcm9wKHtkcm9wQXJlYTpjLGV4dHJhRHJvcHpvbmVzOnRoaXMuX29wdGlvbnMuZHJhZ0FuZERyb3AuZXh0cmFEcm9wem9uZXMsaGlkZURyb3B6b25lczp0aGlzLl9vcHRpb25zLmRyYWdBbmREcm9wLmhpZGVEcm9wem9uZXMsbXVsdGlwbGU6dGhpcy5fb3B0aW9ucy5tdWx0aXBsZSxjbGFzc2VzOntkcm9wQWN0aXZlOnRoaXMuX29wdGlvbnMuY2xhc3Nlcy5kcm9wQWN0aXZlfSxjYWxsYmFja3M6e2Ryb3BQcm9jZXNzaW5nOmZ1bmN0aW9uKGMsZil7dmFyIGc9YS5fYnV0dG9uLmdldElucHV0KCk7Yz8ocXEoYikuY3NzKHtkaXNwbGF5OiJibG9jayJ9KSxxcShnKS5hdHRhY2goImNsaWNrIixkKSk6KHFxKGIpLmhpZGUoKSxxcShnKS5kZXRhY2goImNsaWNrIixkKSk7ZiYmYS5hZGRGaWxlcyhmKX0sZXJyb3I6ZnVuY3Rpb24oYixjKXthLl9pdGVtRXJyb3IoYixjKX0sbG9nOmZ1bmN0aW9uKGIsCmMpe2EubG9nKGIsYyl9fX0pO2Muc2V0dXAoKTtyZXR1cm4gY30sX2xlYXZpbmdfZG9jdW1lbnRfb3V0OmZ1bmN0aW9uKGEpe3JldHVybihxcS5jaHJvbWUoKXx8cXEuc2FmYXJpKCkmJnFxLndpbmRvd3MoKSkmJjA9PWEuY2xpZW50WCYmMD09YS5jbGllbnRZfHxxcS5maXJlZm94KCkmJiFhLnJlbGF0ZWRUYXJnZXR9LF9zdG9yZUZvckxhdGVyOmZ1bmN0aW9uKGEpe3FxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fc3RvcmVGb3JMYXRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIGI9dGhpcy5nZXRJdGVtQnlGaWxlSWQoYSk7cXEodGhpcy5fZmluZChiLCJzcGlubmVyIikpLmhpZGUoKX0sX2ZpbmQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz1xcShhKS5nZXRCeUNsYXNzKHRoaXMuX29wdGlvbnMuY2xhc3Nlc1tiXSlbMF07aWYoIWMpdGhyb3cgRXJyb3IoImVsZW1lbnQgbm90IGZvdW5kICIrYik7cmV0dXJuIGN9LF9vblN1Ym1pdDpmdW5jdGlvbihhLGIpe3FxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25TdWJtaXQuYXBwbHkodGhpcywKYXJndW1lbnRzKTt0aGlzLl9hZGRUb0xpc3QoYSxiKX0sX29uUHJvZ3Jlc3M6ZnVuY3Rpb24oYSxiLGMsZCl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9vblByb2dyZXNzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZSxmLGcsbjtlPXRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGEpO2Y9dGhpcy5fZmluZChlLCJwcm9ncmVzc0JhciIpO2c9TWF0aC5yb3VuZCgxMDAqKGMvZCkpO2M9PT1kPyhuPXRoaXMuX2ZpbmQoZSwiY2FuY2VsIikscXEobikuaGlkZSgpLHFxKGYpLmhpZGUoKSxxcSh0aGlzLl9maW5kKGUsInN0YXR1c1RleHQiKSkuc2V0VGV4dCh0aGlzLl9vcHRpb25zLnRleHQud2FpdGluZ0ZvclJlc3BvbnNlKSx0aGlzLl9kaXNwbGF5RmlsZVNpemUoYSkpOih0aGlzLl9kaXNwbGF5RmlsZVNpemUoYSxjLGQpLHFxKGYpLmNzcyh7ZGlzcGxheToiYmxvY2sifSkpO3FxKGYpLmNzcyh7d2lkdGg6ZysiJSJ9KX0sX29uQ29tcGxldGU6ZnVuY3Rpb24oYSxiLGMsZCl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9vbkNvbXBsZXRlLmFwcGx5KHRoaXMsCmFyZ3VtZW50cyk7dmFyIGU9dGhpcy5nZXRJdGVtQnlGaWxlSWQoYSk7cXEodGhpcy5fZmluZChlLCJzdGF0dXNUZXh0IikpLmNsZWFyVGV4dCgpO3FxKGUpLnJlbW92ZUNsYXNzKHRoaXMuX2NsYXNzZXMucmV0cnlpbmcpO3FxKHRoaXMuX2ZpbmQoZSwicHJvZ3Jlc3NCYXIiKSkuaGlkZSgpOyghdGhpcy5fb3B0aW9ucy5kaXNhYmxlQ2FuY2VsRm9yRm9ybVVwbG9hZHN8fHFxLmlzWGhyVXBsb2FkU3VwcG9ydGVkKCkpJiZxcSh0aGlzLl9maW5kKGUsImNhbmNlbCIpKS5oaWRlKCk7cXEodGhpcy5fZmluZChlLCJzcGlubmVyIikpLmhpZGUoKTtjLnN1Y2Nlc3M/KHRoaXMuX2lzRGVsZXRlUG9zc2libGUoKSYmdGhpcy5fc2hvd0RlbGV0ZUxpbmsoYSkscXEoZSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzKSx0aGlzLl9jbGFzc2VzLnN1Y2Nlc3NJY29uJiYodGhpcy5fZmluZChlLCJmaW5pc2hlZCIpLnN0eWxlLmRpc3BsYXk9ImlubGluZS1ibG9jayIscXEoZSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5zdWNjZXNzSWNvbikpKToKKHFxKGUpLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMuZmFpbCksdGhpcy5fY2xhc3Nlcy5mYWlsSWNvbiYmKHRoaXMuX2ZpbmQoZSwiZmluaXNoZWQiKS5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siLHFxKGUpLmFkZENsYXNzKHRoaXMuX2NsYXNzZXMuZmFpbEljb24pKSx0aGlzLl9vcHRpb25zLnJldHJ5LnNob3dCdXR0b24mJiF0aGlzLl9wcmV2ZW50UmV0cmllc1thXSYmcXEoZSkuYWRkQ2xhc3ModGhpcy5fY2xhc3Nlcy5yZXRyeWFibGUpLHRoaXMuX2NvbnRyb2xGYWlsdXJlVGV4dERpc3BsYXkoZSxjKSl9LF9vblVwbG9hZDpmdW5jdGlvbihhLGIpe3FxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25VcGxvYWQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuX3Nob3dTcGlubmVyKGEpfSxfb25DYW5jZWw6ZnVuY3Rpb24oYSxiKXtxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uQ2FuY2VsLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9yZW1vdmVGaWxlSXRlbShhKX0sCl9vbkJlZm9yZUF1dG9SZXRyeTpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmO3FxLkZpbmVVcGxvYWRlckJhc2ljLnByb3RvdHlwZS5fb25CZWZvcmVBdXRvUmV0cnkuYXBwbHkodGhpcyxhcmd1bWVudHMpO2I9dGhpcy5nZXRJdGVtQnlGaWxlSWQoYSk7Yz10aGlzLl9maW5kKGIsInByb2dyZXNzQmFyIik7dGhpcy5fc2hvd0NhbmNlbExpbmsoYik7Yy5zdHlsZS53aWR0aD0wO3FxKGMpLmhpZGUoKTt0aGlzLl9vcHRpb25zLnJldHJ5LnNob3dBdXRvUmV0cnlOb3RlJiYoYz10aGlzLl9maW5kKGIsInN0YXR1c1RleHQiKSxkPXRoaXMuX2F1dG9SZXRyaWVzW2FdKzEsZT10aGlzLl9vcHRpb25zLnJldHJ5Lm1heEF1dG9BdHRlbXB0cyxmPXRoaXMuX29wdGlvbnMucmV0cnkuYXV0b1JldHJ5Tm90ZS5yZXBsYWNlKC9ce3JldHJ5TnVtXH0vZyxkKSxmPWYucmVwbGFjZSgvXHttYXhBdXRvXH0vZyxlKSxxcShjKS5zZXRUZXh0KGYpLDE9PT1kJiZxcShiKS5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzLnJldHJ5aW5nKSl9LApfb25CZWZvcmVNYW51YWxSZXRyeTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLmdldEl0ZW1CeUZpbGVJZChhKTtpZihxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX29uQmVmb3JlTWFudWFsUmV0cnkuYXBwbHkodGhpcyxhcmd1bWVudHMpKXJldHVybiB0aGlzLl9maW5kKGIsInByb2dyZXNzQmFyIikuc3R5bGUud2lkdGg9MCxxcShiKS5yZW1vdmVDbGFzcyh0aGlzLl9jbGFzc2VzLmZhaWwpLHFxKHRoaXMuX2ZpbmQoYiwic3RhdHVzVGV4dCIpKS5jbGVhclRleHQoKSx0aGlzLl9zaG93U3Bpbm5lcihhKSx0aGlzLl9zaG93Q2FuY2VsTGluayhiKSwhMDtxcShiKS5hZGRDbGFzcyh0aGlzLl9jbGFzc2VzLnJldHJ5YWJsZSk7cmV0dXJuITF9LF9vblN1Ym1pdERlbGV0ZTpmdW5jdGlvbihhKXtpZih0aGlzLl9pc0RlbGV0ZVBvc3NpYmxlKCkpITEhPT10aGlzLl9vcHRpb25zLmNhbGxiYWNrcy5vblN1Ym1pdERlbGV0ZShhKSYmKHRoaXMuX29wdGlvbnMuZGVsZXRlRmlsZS5mb3JjZUNvbmZpcm0/CnRoaXMuX3Nob3dEZWxldGVDb25maXJtKGEpOnRoaXMuX3NlbmREZWxldGVSZXF1ZXN0KGEpKTtlbHNlIHJldHVybiB0aGlzLmxvZygiRGVsZXRlIHJlcXVlc3QgaWdub3JlZCBmb3IgZmlsZSBJRCAiK2ErIiwgZGVsZXRlIGZlYXR1cmUgaXMgZGlzYWJsZWQuIiwid2FybiIpLCExfSxfb25EZWxldGVDb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9vbkRlbGV0ZUNvbXBsZXRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgZD10aGlzLmdldEl0ZW1CeUZpbGVJZChhKSxlPXRoaXMuX2ZpbmQoZCwic3Bpbm5lciIpLGQ9dGhpcy5fZmluZChkLCJzdGF0dXNUZXh0Iik7cXEoZSkuaGlkZSgpO2M/KHFxKGQpLnNldFRleHQodGhpcy5fb3B0aW9ucy5kZWxldGVGaWxlLmRlbGV0aW5nRmFpbGVkVGV4dCksdGhpcy5fc2hvd0RlbGV0ZUxpbmsoYSkpOnRoaXMuX3JlbW92ZUZpbGVJdGVtKGEpfSxfc2VuZERlbGV0ZVJlcXVlc3Q6ZnVuY3Rpb24oYSl7dmFyIGI9CnRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGEpLGM9dGhpcy5fZmluZChiLCJkZWxldGVCdXR0b24iKSxiPXRoaXMuX2ZpbmQoYiwic3RhdHVzVGV4dCIpO3FxKGMpLmhpZGUoKTt0aGlzLl9zaG93U3Bpbm5lcihhKTtxcShiKS5zZXRUZXh0KHRoaXMuX29wdGlvbnMuZGVsZXRlRmlsZS5kZWxldGluZ1N0YXR1c1RleHQpO3RoaXMuX2RlbGV0ZUhhbmRsZXIuc2VuZERlbGV0ZShhLHRoaXMuZ2V0VXVpZChhKSl9LF9zaG93RGVsZXRlQ29uZmlybTpmdW5jdGlvbihhKXt2YXIgYj10aGlzLl9vcHRpb25zLmRlbGV0ZUZpbGUuY29uZmlybU1lc3NhZ2UucmVwbGFjZSgvXHtmaWxlbmFtZVx9L2csdGhpcy5faGFuZGxlci5nZXROYW1lKGEpKTt0aGlzLmdldFV1aWQoYSk7dmFyIGM9dGhpczt0aGlzLl9vcHRpb25zLnNob3dDb25maXJtKGIsZnVuY3Rpb24oKXtjLl9zZW5kRGVsZXRlUmVxdWVzdChhKX0pfSxfYWRkVG9MaXN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9cXEudG9FbGVtZW50KHRoaXMuX29wdGlvbnMuZmlsZVRlbXBsYXRlKTsKaWYodGhpcy5fb3B0aW9ucy5kaXNhYmxlQ2FuY2VsRm9yRm9ybVVwbG9hZHMmJiFxcS5pc1hoclVwbG9hZFN1cHBvcnRlZCgpKXt2YXIgZD10aGlzLl9maW5kKGMsImNhbmNlbCIpO3FxKGQpLnJlbW92ZSgpfWMucXFGaWxlSWQ9YTtkPXRoaXMuX2ZpbmQoYywiZmlsZSIpO3FxKGQpLnNldFRleHQodGhpcy5fb3B0aW9ucy5mb3JtYXRGaWxlTmFtZShiKSk7cXEodGhpcy5fZmluZChjLCJzaXplIikpLmhpZGUoKTt0aGlzLl9vcHRpb25zLm11bHRpcGxlfHwodGhpcy5faGFuZGxlci5jYW5jZWxBbGwoKSx0aGlzLl9jbGVhckxpc3QoKSk7dGhpcy5fbGlzdEVsZW1lbnQuYXBwZW5kQ2hpbGQoYyk7dGhpcy5fb3B0aW9ucy5kaXNwbGF5LmZpbGVTaXplT25TdWJtaXQmJnFxLmlzWGhyVXBsb2FkU3VwcG9ydGVkKCkmJnRoaXMuX2Rpc3BsYXlGaWxlU2l6ZShhKX0sX2NsZWFyTGlzdDpmdW5jdGlvbigpe3RoaXMuX2xpc3RFbGVtZW50LmlubmVySFRNTD0iIjt0aGlzLmNsZWFyU3RvcmVkRmlsZXMoKX0sCl9kaXNwbGF5RmlsZVNpemU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGEpLGE9dGhpcy5fZm9ybWF0U2l6ZSh0aGlzLmdldFNpemUoYSkpLGQ9dGhpcy5fZmluZChkLCJzaXplIik7dm9pZCAwIT09YiYmdm9pZCAwIT09YyYmKGE9dGhpcy5fZm9ybWF0UHJvZ3Jlc3MoYixjKSk7cXEoZCkuY3NzKHtkaXNwbGF5OiJpbmxpbmUifSk7cXEoZCkuc2V0VGV4dChhKX0sX2JpbmRDYW5jZWxBbmRSZXRyeUV2ZW50czpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5fZGlzcG9zZVN1cHBvcnQuYXR0YWNoKHRoaXMuX2xpc3RFbGVtZW50LCJjbGljayIsZnVuY3Rpb24oYil7dmFyIGI9Ynx8d2luZG93LmV2ZW50LGM9Yi50YXJnZXR8fGIuc3JjRWxlbWVudDtpZihxcShjKS5oYXNDbGFzcyhhLl9jbGFzc2VzLmNhbmNlbCl8fHFxKGMpLmhhc0NsYXNzKGEuX2NsYXNzZXMucmV0cnkpfHxxcShjKS5oYXNDbGFzcyhhLl9jbGFzc2VzLmRlbGV0ZUJ1dHRvbikpe3FxLnByZXZlbnREZWZhdWx0KGIpOwpmb3IoYj1jLnBhcmVudE5vZGU7dm9pZCAwPT09Yi5xcUZpbGVJZDspYj1jPWMucGFyZW50Tm9kZTtxcShjKS5oYXNDbGFzcyhhLl9jbGFzc2VzLmRlbGV0ZUJ1dHRvbik/YS5kZWxldGVGaWxlKGIucXFGaWxlSWQpOnFxKGMpLmhhc0NsYXNzKGEuX2NsYXNzZXMuY2FuY2VsKT9hLmNhbmNlbChiLnFxRmlsZUlkKToocXEoYikucmVtb3ZlQ2xhc3MoYS5fY2xhc3Nlcy5yZXRyeWFibGUpLGEucmV0cnkoYi5xcUZpbGVJZCkpfX0pfSxfZm9ybWF0UHJvZ3Jlc3M6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLl9vcHRpb25zLnRleHQuZm9ybWF0UHJvZ3Jlc3MsZD1NYXRoLnJvdW5kKDEwMCooYS9iKSksYz1jLnJlcGxhY2UoIntwZXJjZW50fSIsZCksZD10aGlzLl9mb3JtYXRTaXplKGIpO3JldHVybiBjPWMucmVwbGFjZSgie3RvdGFsX3NpemV9IixkKX0sX2NvbnRyb2xGYWlsdXJlVGV4dERpc3BsYXk6ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZjtjPXRoaXMuX29wdGlvbnMuZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkubW9kZTsKZD10aGlzLl9vcHRpb25zLmZhaWxlZFVwbG9hZFRleHREaXNwbGF5Lm1heENoYXJzO2U9dGhpcy5fb3B0aW9ucy5mYWlsZWRVcGxvYWRUZXh0RGlzcGxheS5yZXNwb25zZVByb3BlcnR5OyJjdXN0b20iPT09Yz8oKGM9YltlXSk/Yy5sZW5ndGg+ZCYmKGY9Yy5zdWJzdHJpbmcoMCxkKSsiLi4uIik6KGM9dGhpcy5fb3B0aW9ucy50ZXh0LmZhaWxVcGxvYWQsdGhpcy5sb2coIiciK2UrIicgaXMgbm90IGEgdmFsaWQgcHJvcGVydHkgb24gdGhlIHNlcnZlciByZXNwb25zZS4iLCJ3YXJuIikpLHFxKHRoaXMuX2ZpbmQoYSwic3RhdHVzVGV4dCIpKS5zZXRUZXh0KGZ8fGMpLHRoaXMuX29wdGlvbnMuZmFpbGVkVXBsb2FkVGV4dERpc3BsYXkuZW5hYmxlVG9vbHRpcCYmdGhpcy5fc2hvd1Rvb2x0aXAoYSxjKSk6ImRlZmF1bHQiPT09Yz9xcSh0aGlzLl9maW5kKGEsInN0YXR1c1RleHQiKSkuc2V0VGV4dCh0aGlzLl9vcHRpb25zLnRleHQuZmFpbFVwbG9hZCk6Im5vbmUiIT09YyYmdGhpcy5sb2coImZhaWxlZFVwbG9hZFRleHREaXNwbGF5Lm1vZGUgdmFsdWUgb2YgJyIrCmMrIicgaXMgbm90IHZhbGlkIiwid2FybiIpfSxfc2hvd1Rvb2x0aXA6ZnVuY3Rpb24oYSxiKXthLnRpdGxlPWJ9LF9zaG93U3Bpbm5lcjpmdW5jdGlvbihhKXt0aGlzLl9maW5kKHRoaXMuZ2V0SXRlbUJ5RmlsZUlkKGEpLCJzcGlubmVyIikuc3R5bGUuZGlzcGxheT0iaW5saW5lLWJsb2NrIn0sX3Nob3dDYW5jZWxMaW5rOmZ1bmN0aW9uKGEpe2lmKCF0aGlzLl9vcHRpb25zLmRpc2FibGVDYW5jZWxGb3JGb3JtVXBsb2Fkc3x8cXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKSlhPXRoaXMuX2ZpbmQoYSwiY2FuY2VsIikscXEoYSkuY3NzKHtkaXNwbGF5OiJpbmxpbmUifSl9LF9zaG93RGVsZXRlTGluazpmdW5jdGlvbihhKXthPXRoaXMuX2ZpbmQodGhpcy5nZXRJdGVtQnlGaWxlSWQoYSksImRlbGV0ZUJ1dHRvbiIpO3FxKGEpLmNzcyh7ZGlzcGxheToiaW5saW5lIn0pfSxfaXRlbUVycm9yOmZ1bmN0aW9uKGEsYil7dGhpcy5fb3B0aW9ucy5zaG93TWVzc2FnZShxcS5GaW5lVXBsb2FkZXJCYXNpYy5wcm90b3R5cGUuX2l0ZW1FcnJvci5hcHBseSh0aGlzLAphcmd1bWVudHMpKX0sX2JhdGNoRXJyb3I6ZnVuY3Rpb24oYSl7cXEuRmluZVVwbG9hZGVyQmFzaWMucHJvdG90eXBlLl9iYXRjaEVycm9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLl9vcHRpb25zLnNob3dNZXNzYWdlKGEpfSxfc2V0dXBQYXN0ZVByb21wdDpmdW5jdGlvbigpe3ZhciBhPXRoaXM7dGhpcy5fb3B0aW9ucy5jYWxsYmFja3Mub25QYXN0ZVJlY2VpdmVkPWZ1bmN0aW9uKCl7cmV0dXJuIGEuX29wdGlvbnMuc2hvd1Byb21wdChhLl9vcHRpb25zLnBhc3RlLm5hbWVQcm9tcHRNZXNzYWdlLGEuX29wdGlvbnMucGFzdGUuZGVmYXVsdE5hbWUpfX19KTsKcXEuQWpheFJlcXVlc3Rvcj1mdW5jdGlvbihhKXtmdW5jdGlvbiBiKGEpe3ZhciBiPXFxLmluZGV4T2YoaSxhKSxkPWsubWF4Q29ubmVjdGlvbnM7ZGVsZXRlIG1bYV07aS5zcGxpY2UoYiwxKTtpLmxlbmd0aD49ZCYmYjxkJiYoYT1pW2QtMV0sYyhhKSl9ZnVuY3Rpb24gYyhhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3QsYz1mKCksaT17fSxyO2sub25TZW5kKGEpO2sucGFyYW1zU3RvcmUuZ2V0UGFyYW1zJiYoaT1rLnBhcmFtc1N0b3JlLmdldFBhcmFtcyhhKSk7cj1pO3ZhciBzPWsuZW5kcG9pbnRTdG9yZS5nZXRFbmRwb2ludChhKSx6PW1bYV0uYWRkVG9QYXRoO3ZvaWQgMCE9PXomJihzKz0iLyIreik7cj1uJiZyP3FxLm9iajJ1cmwocixzKTpzO21bYV0ueGhyPWI7Yi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZChhKTtiLm9wZW4oYyxyLCEwKTtrLmNvcnMuZXhwZWN0ZWQmJmsuY29ycy5zZW5kQ3JlZGVudGlhbHMmJihiLndpdGhDcmVkZW50aWFscz0hMCk7ZShhKTtnKCJTZW5kaW5nICIrCmMrIiByZXF1ZXN0IGZvciAiK2EpOyFuJiZpP2Iuc2VuZChxcS5vYmoydXJsKGksIiIpKTpiLnNlbmQoKX1mdW5jdGlvbiBkKGEpe3ZhciBjPW1bYV0ueGhyO3JldHVybiBmdW5jdGlvbigpe2lmKDQ9PT1jLnJlYWR5U3RhdGUpe3ZhciBkPW1bYV0ueGhyLGU9ZigpLGk9ITE7YihhKTswPD1xcS5pbmRleE9mKGsuc3VjY2Vzc2Z1bFJlc3BvbnNlQ29kZXMsZC5zdGF0dXMpfHwoaT0hMCxnKGUrIiByZXF1ZXN0IGZvciAiK2ErIiBoYXMgZmFpbGVkIC0gcmVzcG9uc2UgY29kZSAiK2Quc3RhdHVzLCJlcnJvciIpKTtrLm9uQ29tcGxldGUoYSxkLGkpfX19ZnVuY3Rpb24gZShhKXt2YXIgYj1tW2FdLnhocixhPWsuY3VzdG9tSGVhZGVycztiLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVkLVdpdGgiLCJYTUxIdHRwUmVxdWVzdCIpO2Iuc2V0UmVxdWVzdEhlYWRlcigiQ2FjaGUtQ29udHJvbCIsIm5vLWNhY2hlIik7cXEuZWFjaChhLGZ1bmN0aW9uKGEsYyl7Yi5zZXRSZXF1ZXN0SGVhZGVyKGEsCmMpfSl9ZnVuY3Rpb24gZigpe3JldHVybiBrLmRlbW9Nb2RlPyJHRVQiOmsubWV0aG9kfXZhciBnLG4saT1bXSxtPVtdLGs9e21ldGhvZDoiUE9TVCIsbWF4Q29ubmVjdGlvbnM6MyxjdXN0b21IZWFkZXJzOnt9LGVuZHBvaW50U3RvcmU6e30scGFyYW1zU3RvcmU6e30sc3VjY2Vzc2Z1bFJlc3BvbnNlQ29kZXM6WzIwMF0sZGVtb01vZGU6ITEsY29yczp7ZXhwZWN0ZWQ6ITEsc2VuZENyZWRlbnRpYWxzOiExfSxsb2c6ZnVuY3Rpb24oKXt9LG9uU2VuZDpmdW5jdGlvbigpe30sb25Db21wbGV0ZTpmdW5jdGlvbigpe30sb25DYW5jZWw6ZnVuY3Rpb24oKXt9fTtxcS5leHRlbmQoayxhKTtnPWsubG9nO249IkdFVCI9PT1mKCl8fCJERUxFVEUiPT09ZigpO3JldHVybntzZW5kOmZ1bmN0aW9uKGEsYil7bVthXT17YWRkVG9QYXRoOmJ9O2kucHVzaChhKTw9ay5tYXhDb25uZWN0aW9ucyYmYyhhKX0sY2FuY2VsOmZ1bmN0aW9uKGEpe3ZhciBjPW1bYV0ueGhyLGQ9ZigpO2M/KGMub25yZWFkeXN0YXRlY2hhbmdlPQpudWxsLGMuYWJvcnQoKSxiKGEpLGcoIkNhbmNlbGxlZCAiK2QrIiBmb3IgIithKSxrLm9uQ2FuY2VsKGEpLGE9ITApOmE9ITE7cmV0dXJuIGF9fX07CnFxLkRlbGV0ZUZpbGVBamF4UmVxdWVzdG9yPWZ1bmN0aW9uKGEpe3ZhciBiLGM9e2VuZHBvaW50U3RvcmU6e30sbWF4Q29ubmVjdGlvbnM6MyxjdXN0b21IZWFkZXJzOnt9LHBhcmFtc1N0b3JlOnt9LGRlbW9Nb2RlOiExLGNvcnM6e2V4cGVjdGVkOiExLHNlbmRDcmVkZW50aWFsczohMX0sbG9nOmZ1bmN0aW9uKCl7fSxvbkRlbGV0ZTpmdW5jdGlvbigpe30sb25EZWxldGVDb21wbGV0ZTpmdW5jdGlvbigpe319O3FxLmV4dGVuZChjLGEpO2I9bmV3IHFxLkFqYXhSZXF1ZXN0b3Ioe21ldGhvZDoiREVMRVRFIixlbmRwb2ludFN0b3JlOmMuZW5kcG9pbnRTdG9yZSxwYXJhbXNTdG9yZTpjLnBhcmFtc1N0b3JlLG1heENvbm5lY3Rpb25zOmMubWF4Q29ubmVjdGlvbnMsY3VzdG9tSGVhZGVyczpjLmN1c3RvbUhlYWRlcnMsc3VjY2Vzc2Z1bFJlc3BvbnNlQ29kZXM6WzIwMCwyMDIsMjA0XSxkZW1vTW9kZTpjLmRlbW9Nb2RlLGxvZzpjLmxvZyxvblNlbmQ6Yy5vbkRlbGV0ZSxvbkNvbXBsZXRlOmMub25EZWxldGVDb21wbGV0ZX0pOwpyZXR1cm57c2VuZERlbGV0ZTpmdW5jdGlvbihhLGUpe2Iuc2VuZChhLGUpO2MubG9nKCJTdWJtaXR0ZWQgZGVsZXRlIGZpbGUgcmVxdWVzdCBmb3IgIithKX19fTtxcS5XaW5kb3dSZWNlaXZlTWVzc2FnZT1mdW5jdGlvbihhKXt2YXIgYj17fTtxcS5leHRlbmQoe2xvZzpmdW5jdGlvbigpe319LGEpO3JldHVybntyZWNlaXZlTWVzc2FnZTpmdW5jdGlvbihhLGQpe3ZhciBlPWZ1bmN0aW9uKGEpe2QoYS5kYXRhKX07d2luZG93LnBvc3RNZXNzYWdlP2JbYV09cXEod2luZG93KS5hdHRhY2goIm1lc3NhZ2UiLGUpOmxvZygiaWZyYW1lIG1lc3NhZ2UgcGFzc2luZyBub3Qgc3VwcG9ydGVkIGluIHRoaXMgYnJvd3NlciEiLCJlcnJvciIpfSxzdG9wUmVjZWl2aW5nTWVzc2FnZXM6ZnVuY3Rpb24oYSl7d2luZG93LnBvc3RNZXNzYWdlJiYoYT1iW2FdKSYmYSgpfX19OwpxcS5VcGxvYWRIYW5kbGVyPWZ1bmN0aW9uKGEpe3ZhciBiPVtdLGMsZCxlLGY7Yz17ZGVidWc6ITEsZm9yY2VNdWx0aXBhcnQ6ITAscGFyYW1zSW5Cb2R5OiExLHBhcmFtc1N0b3JlOnt9LGVuZHBvaW50U3RvcmU6e30sY29yczp7ZXhwZWN0ZWQ6ITEsc2VuZENyZWRlbnRpYWxzOiExfSxtYXhDb25uZWN0aW9uczozLHV1aWRQYXJhbU5hbWU6InFxdXVpZCIsdG90YWxGaWxlU2l6ZVBhcmFtTmFtZToicXF0b3RhbGZpbGVzaXplIixjaHVua2luZzp7ZW5hYmxlZDohMSxwYXJ0U2l6ZToyRTYscGFyYW1OYW1lczp7cGFydEluZGV4OiJxcXBhcnRpbmRleCIscGFydEJ5dGVPZmZzZXQ6InFxcGFydGJ5dGVvZmZzZXQiLGNodW5rU2l6ZToicXFjaHVua3NpemUiLHRvdGFsUGFydHM6InFxdG90YWxwYXJ0cyIsZmlsZW5hbWU6InFxZmlsZW5hbWUifX0scmVzdW1lOntlbmFibGVkOiExLGlkOm51bGwsY29va2llc0V4cGlyZUluOjcscGFyYW1OYW1lczp7cmVzdW1pbmc6InFxcmVzdW1lIn19LGJsb2JzOntwYXJhbU5hbWVzOntuYW1lOiJxcWJsb2JuYW1lIn19LApsb2c6ZnVuY3Rpb24oKXt9LG9uUHJvZ3Jlc3M6ZnVuY3Rpb24oKXt9LG9uQ29tcGxldGU6ZnVuY3Rpb24oKXt9LG9uQ2FuY2VsOmZ1bmN0aW9uKCl7fSxvblVwbG9hZDpmdW5jdGlvbigpe30sb25VcGxvYWRDaHVuazpmdW5jdGlvbigpe30sb25BdXRvUmV0cnk6ZnVuY3Rpb24oKXt9LG9uUmVzdW1lOmZ1bmN0aW9uKCl7fX07cXEuZXh0ZW5kKGMsYSk7ZD1jLmxvZztlPWZ1bmN0aW9uKGEpe3ZhciBhPXFxLmluZGV4T2YoYixhKSxkPWMubWF4Q29ubmVjdGlvbnM7MDw9YSYmKGIuc3BsaWNlKGEsMSksYi5sZW5ndGg+PWQmJmE8ZCYmKGE9YltkLTFdLGYudXBsb2FkKGEpKSl9O2Y9cXEuaXNYaHJVcGxvYWRTdXBwb3J0ZWQoKT9uZXcgcXEuVXBsb2FkSGFuZGxlclhocihjLGUsZCk6bmV3IHFxLlVwbG9hZEhhbmRsZXJGb3JtKGMsZSxkKTtyZXR1cm57YWRkOmZ1bmN0aW9uKGEpe3JldHVybiBmLmFkZChhKX0sdXBsb2FkOmZ1bmN0aW9uKGEpe2lmKGIucHVzaChhKTw9Yy5tYXhDb25uZWN0aW9ucylyZXR1cm4gZi51cGxvYWQoYSl9LApyZXRyeTpmdW5jdGlvbihhKXtyZXR1cm4gMDw9cXEuaW5kZXhPZihiLGEpP2YudXBsb2FkKGEsITApOnRoaXMudXBsb2FkKGEpfSxjYW5jZWw6ZnVuY3Rpb24oYSl7ZCgiQ2FuY2VsbGluZyAiK2EpO2MucGFyYW1zU3RvcmUucmVtb3ZlKGEpO2YuY2FuY2VsKGEpO2UoYSl9LGNhbmNlbEFsbDpmdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1bXTtxcS5leHRlbmQoYyxiKTtxcS5lYWNoKGMsZnVuY3Rpb24oYixjKXthLmNhbmNlbChjKX0pO2I9W119LGdldE5hbWU6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZ2V0TmFtZShhKX0sZ2V0U2l6ZTpmdW5jdGlvbihhKXtpZihmLmdldFNpemUpcmV0dXJuIGYuZ2V0U2l6ZShhKX0sZ2V0RmlsZTpmdW5jdGlvbihhKXtpZihmLmdldEZpbGUpcmV0dXJuIGYuZ2V0RmlsZShhKX0sZ2V0UXVldWU6ZnVuY3Rpb24oKXtyZXR1cm4gYn0scmVzZXQ6ZnVuY3Rpb24oKXtkKCJSZXNldHRpbmcgdXBsb2FkIGhhbmRsZXIiKTtiPVtdO2YucmVzZXQoKX0sZ2V0VXVpZDpmdW5jdGlvbihhKXtyZXR1cm4gZi5nZXRVdWlkKGEpfSwKaXNWYWxpZDpmdW5jdGlvbihhKXtyZXR1cm4gZi5pc1ZhbGlkKGEpfSxnZXRSZXN1bWFibGVGaWxlc0RhdGE6ZnVuY3Rpb24oKXtyZXR1cm4gZi5nZXRSZXN1bWFibGVGaWxlc0RhdGE/Zi5nZXRSZXN1bWFibGVGaWxlc0RhdGEoKTpbXX19fTsKcXEuVXBsb2FkSGFuZGxlckZvcm09ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7dm9pZCAwIT09bFthXSYmKGxbYV0oKSxkZWxldGUgbFthXSl9ZnVuY3Rpb24gZShhLGIpe3ZhciBjPWEuaWQ7cltrW2NdXT1iO2xbY109cXEoYSkuYXR0YWNoKCJsb2FkIixmdW5jdGlvbigpe21bY10mJihvKCJSZWNlaXZlZCBpZnJhbWUgbG9hZCBldmVudCBmb3IgQ09SUyB1cGxvYWQgcmVxdWVzdCAoZmlsZSBpZCAiK2MrIikiKSx0W2NdPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt2YXIgYT0iTm8gdmFsaWQgbWVzc2FnZSByZWNlaXZlZCBmcm9tIGxvYWRlZCBpZnJhbWUgZm9yIGZpbGUgaWQgIitjO28oYSwiZXJyb3IiKTtiKHtlcnJvcjphfSl9LDFFMykpfSk7eC5yZWNlaXZlTWVzc2FnZShjLGZ1bmN0aW9uKGEpe28oIlJlY2VpdmVkIHRoZSBmb2xsb3dpbmcgd2luZG93IG1lc3NhZ2U6ICciK2ErIiciKTt2YXIgYj1xcS5wYXJzZUpzb24oYSksZT1iLnV1aWQ7ZSYmcltlXT8oY2xlYXJUaW1lb3V0KHRbY10pLApkZWxldGUgdFtjXSxkKGMpLGE9cltlXSxkZWxldGUgcltlXSx4LnN0b3BSZWNlaXZpbmdNZXNzYWdlcyhjKSxhKGIpKTplfHxvKCInIithKyInIGRvZXMgbm90IGNvbnRhaW4gYSBVVUlEIC0gaWdub3JpbmcuIil9KX1mdW5jdGlvbiBmKGEsYil7aS5jb3JzLmV4cGVjdGVkP2UoYSxiKTpsW2EuaWRdPXFxKGEpLmF0dGFjaCgibG9hZCIsZnVuY3Rpb24oKXtvKCJSZWNlaXZlZCByZXNwb25zZSBmb3IgIithLmlkKTtpZihhLnBhcmVudE5vZGUpe3RyeXtpZihhLmNvbnRlbnREb2N1bWVudCYmYS5jb250ZW50RG9jdW1lbnQuYm9keSYmImZhbHNlIj09YS5jb250ZW50RG9jdW1lbnQuYm9keS5pbm5lckhUTUwpcmV0dXJufWNhdGNoKGMpe28oIkVycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBhY2Nlc3MgaWZyYW1lIGR1cmluZyBoYW5kbGluZyBvZiB1cGxvYWQgcmVzcG9uc2UgKCIrYysiKSIsImVycm9yIil9YigpfX0pfWZ1bmN0aW9uIGcoYSl7dmFyIGI9cXEudG9FbGVtZW50KCc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDpmYWxzZTsiIG5hbWU9IicrCmErJyIgLz4nKTtiLnNldEF0dHJpYnV0ZSgiaWQiLGEpO2Iuc3R5bGUuZGlzcGxheT0ibm9uZSI7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChiKTtyZXR1cm4gYn1mdW5jdGlvbiBuKGEsYil7dmFyIGM9aS5wYXJhbXNTdG9yZS5nZXRQYXJhbXMoYSksZD1xcS50b0VsZW1lbnQoJzxmb3JtIG1ldGhvZD0iJysoaS5kZW1vTW9kZT8iR0VUIjoiUE9TVCIpKyciIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjwvZm9ybT4nKSxlPWkuZW5kcG9pbnRTdG9yZS5nZXRFbmRwb2ludChhKSxmPWU7Y1tpLnV1aWRQYXJhbU5hbWVdPWtbYV07aS5wYXJhbXNJbkJvZHk/cXEub2JqMklucHV0cyhjLGQpOmY9cXEub2JqMnVybChjLGUpO2Quc2V0QXR0cmlidXRlKCJhY3Rpb24iLGYpO2Quc2V0QXR0cmlidXRlKCJ0YXJnZXQiLGIubmFtZSk7ZC5zdHlsZS5kaXNwbGF5PSJub25lIjtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGQpO3JldHVybiBkfXZhciBpPWEsbT1bXSxrPVtdLGw9e30sdD0Ke30sbz1jLHg9bmV3IHFxLldpbmRvd1JlY2VpdmVNZXNzYWdlKHtsb2c6b30pLHI9e30scztyZXR1cm4gcz17YWRkOmZ1bmN0aW9uKGEpe2Euc2V0QXR0cmlidXRlKCJuYW1lIixpLmlucHV0TmFtZSk7dmFyIGI9bS5wdXNoKGEpLTE7a1tiXT1xcS5nZXRVbmlxdWVJZCgpO2EucGFyZW50Tm9kZSYmcXEoYSkucmVtb3ZlKCk7cmV0dXJuIGJ9LGdldE5hbWU6ZnVuY3Rpb24oYSl7aWYocy5pc1ZhbGlkKGEpKXJldHVybiBtW2FdLnZhbHVlLnJlcGxhY2UoLy4qKFwvfFxcKS8sIiIpO28oYSsiIGlzIG5vdCBhIHZhbGlkIGl0ZW0gSUQuIiwiZXJyb3IiKX0saXNWYWxpZDpmdW5jdGlvbihhKXtyZXR1cm4gdm9pZCAwIT09bVthXX0scmVzZXQ6ZnVuY3Rpb24oKXttPVtdO2s9W107bD17fX0sZ2V0VXVpZDpmdW5jdGlvbihhKXtyZXR1cm4ga1thXX0sY2FuY2VsOmZ1bmN0aW9uKGEpe2kub25DYW5jZWwoYSx0aGlzLmdldE5hbWUoYSkpO2RlbGV0ZSBtW2FdO2RlbGV0ZSBrW2FdO2RlbGV0ZSBsW2FdOwppLmNvcnMuZXhwZWN0ZWQmJihjbGVhclRpbWVvdXQodFthXSksZGVsZXRlIHRbYV0seC5zdG9wUmVjZWl2aW5nTWVzc2FnZXMoYSkpO2lmKGE9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkpYS5zZXRBdHRyaWJ1dGUoInNyYyIsImphdmEiK1N0cmluZy5mcm9tQ2hhckNvZGUoMTE1KSsiY3JpcHQ6ZmFsc2U7IikscXEoYSkucmVtb3ZlKCl9LHVwbG9hZDpmdW5jdGlvbihhKXt2YXIgYz1tW2FdLGU9cy5nZXROYW1lKGEpLGw9ZyhhKSxoO2lmKCFjKXRocm93IEVycm9yKCJmaWxlIHdpdGggcGFzc2VkIGlkIHdhcyBub3QgYWRkZWQsIG9yIGFscmVhZHkgdXBsb2FkZWQgb3IgY2FuY2VsbGVkIik7aS5vblVwbG9hZChhLHRoaXMuZ2V0TmFtZShhKSk7aD1uKGEsbCk7aC5hcHBlbmRDaGlsZChjKTtmKGwsZnVuY3Rpb24oYyl7bygiaWZyYW1lIGxvYWRlZCIpO2lmKCFjKXt2YXIgZjt0cnl7dmFyIGg9bC5jb250ZW50RG9jdW1lbnR8fGwuY29udGVudFdpbmRvdy5kb2N1bWVudCxnPWguYm9keS5pbm5lckhUTUw7Cm8oImNvbnZlcnRpbmcgaWZyYW1lJ3MgaW5uZXJIVE1MIHRvIEpTT04iKTtvKCJpbm5lckhUTUwgPSAiK2cpO2cmJmcubWF0Y2goL148cHJlL2kpJiYoZz1oLmJvZHkuZmlyc3RDaGlsZC5maXJzdENoaWxkLm5vZGVWYWx1ZSk7Zj1xcS5wYXJzZUpzb24oZyl9Y2F0Y2goail7bygiRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIHBhcnNlIGZvcm0gdXBsb2FkIHJlc3BvbnNlICgiK2orIikiLCJlcnJvciIpLGY9e3N1Y2Nlc3M6ITF9fWM9Zn1kKGEpO2kuY29ycy5leHBlY3RlZHx8cXEobCkucmVtb3ZlKCk7aWYoYy5zdWNjZXNzfHwhaS5vbkF1dG9SZXRyeShhLGUsYykpaS5vbkNvbXBsZXRlKGEsZSxjKSxiKGEpfSk7bygiU2VuZGluZyB1cGxvYWQgcmVxdWVzdCBmb3IgIithKTtoLnN1Ym1pdCgpO3FxKGgpLnJlbW92ZSgpO3JldHVybiBhfX19OwpxcS5VcGxvYWRIYW5kbGVyWGhyPWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEsYixjKXt2YXIgZD1wLmdldFNpemUoYSksYT1wLmdldE5hbWUoYSk7YltqLmNodW5raW5nLnBhcmFtTmFtZXMucGFydEluZGV4XT1jLnBhcnQ7YltqLmNodW5raW5nLnBhcmFtTmFtZXMucGFydEJ5dGVPZmZzZXRdPWMuc3RhcnQ7YltqLmNodW5raW5nLnBhcmFtTmFtZXMuY2h1bmtTaXplXT1jLnNpemU7YltqLmNodW5raW5nLnBhcmFtTmFtZXMudG90YWxQYXJ0c109Yy5jb3VudDtiW2oudG90YWxGaWxlU2l6ZVBhcmFtTmFtZV09ZDt3JiYoYltqLmNodW5raW5nLnBhcmFtTmFtZXMuZmlsZW5hbWVdPWEpfWZ1bmN0aW9uIGUoYSxiKXt2YXIgYz1qLmNodW5raW5nLnBhcnRTaXplLGQ9cC5nZXRTaXplKGEpLGU9aFthXS5maWxlfHxoW2FdLmJsb2JEYXRhLmJsb2IsZz1jKmIsYz1nK2M+PWQ/ZDpnK2MsZD1mKGEpLGw7ZS5zbGljZT9sPWUuc2xpY2UoZyxjKTplLm1velNsaWNlP2w9ZS5tb3pTbGljZShnLApjKTplLndlYmtpdFNsaWNlJiYobD1lLndlYmtpdFNsaWNlKGcsYykpO3JldHVybntwYXJ0OmIsc3RhcnQ6ZyxlbmQ6Yyxjb3VudDpkLGJsb2I6bCxzaXplOmMtZ319ZnVuY3Rpb24gZihhKXthPXAuZ2V0U2l6ZShhKTtyZXR1cm4gTWF0aC5jZWlsKGEvai5jaHVua2luZy5wYXJ0U2l6ZSl9ZnVuY3Rpb24gZyhhKXt2YXIgYj1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGhbYV0ueGhyPWJ9ZnVuY3Rpb24gbihhLGIsYyxkKXt2YXIgZT1uZXcgRm9ybURhdGEsZj1qLmRlbW9Nb2RlPyJHRVQiOiJQT1NUIixnPWouZW5kcG9pbnRTdG9yZS5nZXRFbmRwb2ludChkKSxsPWcsaT1wLmdldE5hbWUoZCksbz1wLmdldFNpemUoZCksaz1oW2RdLmJsb2JEYXRhO2Fbai51dWlkUGFyYW1OYW1lXT1oW2RdLnV1aWQ7dyYmKGFbai50b3RhbEZpbGVTaXplUGFyYW1OYW1lXT1vLGsmJihhW2ouYmxvYnMucGFyYW1OYW1lcy5uYW1lXT1rLm5hbWUpKTtqLnBhcmFtc0luQm9keXx8KHd8fChhW2ouaW5wdXROYW1lXT0KaSksbD1xcS5vYmoydXJsKGEsZykpO2Iub3BlbihmLGwsITApO2ouY29ycy5leHBlY3RlZCYmai5jb3JzLnNlbmRDcmVkZW50aWFscyYmKGIud2l0aENyZWRlbnRpYWxzPSEwKTtyZXR1cm4gdz8oai5wYXJhbXNJbkJvZHkmJnFxLm9iajJGb3JtRGF0YShhLGUpLGUuYXBwZW5kKGouaW5wdXROYW1lLGMpLGUpOmN9ZnVuY3Rpb24gaShhLGIpe3ZhciBjPWouY3VzdG9tSGVhZGVycyxkPWhbYV0uZmlsZXx8aFthXS5ibG9iRGF0YS5ibG9iO2Iuc2V0UmVxdWVzdEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iik7Yi5zZXRSZXF1ZXN0SGVhZGVyKCJDYWNoZS1Db250cm9sIiwibm8tY2FjaGUiKTt3fHwoYi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iKSxiLnNldFJlcXVlc3RIZWFkZXIoIlgtTWltZS1UeXBlIixkLnR5cGUpKTtxcS5lYWNoKGMsZnVuY3Rpb24oYSxjKXtiLnNldFJlcXVlc3RIZWFkZXIoYSwKYyl9KX1mdW5jdGlvbiBtKGEsYixjKXt2YXIgZD1wLmdldE5hbWUoYSksZT1wLmdldFNpemUoYSk7aFthXS5hdHRlbXB0aW5nUmVzdW1lPSExO2oub25Qcm9ncmVzcyhhLGQsZSxlKTtqLm9uQ29tcGxldGUoYSxkLGIsYyk7ZGVsZXRlIGhbYV0ueGhyO0IoYSl9ZnVuY3Rpb24gayhhKXt2YXIgYj1oW2FdLnJlbWFpbmluZ0NodW5rSWR4c1swXSxjPWUoYSxiKSxmPWcoYSksbD1wLmdldFNpemUoYSksaz1wLmdldE5hbWUoYSksbTt2b2lkIDA9PT1oW2FdLmxvYWRlZCYmKGhbYV0ubG9hZGVkPTApO3YmJmhbYV0uZmlsZSYmeChhLGMpO2Yub25yZWFkeXN0YXRlY2hhbmdlPW8oYSxmKTtmLnVwbG9hZC5vbnByb2dyZXNzPWZ1bmN0aW9uKGMpe2lmKGMubGVuZ3RoQ29tcHV0YWJsZSl7dmFyIGQ9Yy5sb2FkZWQraFthXS5sb2FkZWQsYz1jLnRvdGFsLGY9ZShhLGIpLGM9Yy1mLnNpemUsZz1wLmdldFNpemUoYSksZj1mLmNvdW50LGw9Yy1oW2FdLmluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQ7aFthXS5sYXN0UmVxdWVzdE92ZXJoZWFkPQpjO2lmKGI9PT0wKXtoW2FdLmxhc3RDaHVua0lkeFByb2dyZXNzPTA7aFthXS5pbml0aWFsUmVxdWVzdE92ZXJoZWFkPWM7aFthXS5lc3RUb3RhbFJlcXVlc3RzU2l6ZT1nK2YqY31lbHNlIGlmKGhbYV0ubGFzdENodW5rSWR4UHJvZ3Jlc3MhPT1iKXtoW2FdLmxhc3RDaHVua0lkeFByb2dyZXNzPWI7aFthXS5lc3RUb3RhbFJlcXVlc3RzU2l6ZT1oW2FdLmVzdFRvdGFsUmVxdWVzdHNTaXplK2x9ai5vblByb2dyZXNzKGEsayxkLGhbYV0uZXN0VG90YWxSZXF1ZXN0c1NpemUpfX07ai5vblVwbG9hZENodW5rKGEsayx0KGMpKTttPWoucGFyYW1zU3RvcmUuZ2V0UGFyYW1zKGEpO2QoYSxtLGMpO2hbYV0uYXR0ZW1wdGluZ1Jlc3VtZSYmKG1bai5yZXN1bWUucGFyYW1OYW1lcy5yZXN1bWluZ109ITApO209bihtLGYsYy5ibG9iLGEpO2koYSxmKTt1KCJTZW5kaW5nIGNodW5rZWQgdXBsb2FkIHJlcXVlc3QgZm9yIGl0ZW0gIithKyI6IGJ5dGVzICIrKGMuc3RhcnQrMSkrIi0iK2MuZW5kKyIgb2YgIisKbCk7Zi5zZW5kKG0pfWZ1bmN0aW9uIGwoYSl7dSgiU2VydmVyIGhhcyBvcmRlcmVkIGNodW5raW5nIGVmZm9ydCB0byBiZSByZXN0YXJ0ZWQgb24gbmV4dCBhdHRlbXB0IGZvciBpdGVtIElEICIrYSwiZXJyb3IiKTt2JiYocihhKSxoW2FdLmF0dGVtcHRpbmdSZXN1bWU9ITEpO2hbYV0ucmVtYWluaW5nQ2h1bmtJZHhzPVtdO2RlbGV0ZSBoW2FdLmxvYWRlZDtkZWxldGUgaFthXS5lc3RUb3RhbFJlcXVlc3RzU2l6ZTtkZWxldGUgaFthXS5pbml0aWFsUmVxdWVzdE92ZXJoZWFkfWZ1bmN0aW9uIHQoYSl7cmV0dXJue3BhcnRJbmRleDphLnBhcnQsc3RhcnRCeXRlOmEuc3RhcnQrMSxlbmRCeXRlOmEuZW5kLHRvdGFsUGFydHM6YS5jb3VudH19ZnVuY3Rpb24gbyhhLGIpe3JldHVybiBmdW5jdGlvbigpe2lmKDQ9PT1iLnJlYWR5U3RhdGUpe3ZhciBjO2lmKGhbYV0pe3UoInhociAtIHNlcnZlciByZXNwb25zZSByZWNlaXZlZCBmb3IgIithKTt1KCJyZXNwb25zZVRleHQgPSAiK2IucmVzcG9uc2VUZXh0KTsKdHJ5e2M9cXEucGFyc2VKc29uKGIucmVzcG9uc2VUZXh0KX1jYXRjaChkKXt1KCJFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gcGFyc2UgeGhyIHJlc3BvbnNlIHRleHQgKCIrZCsiKSIsImVycm9yIiksYz17fX1pZigyMDAhPT1iLnN0YXR1c3x8IWMuc3VjY2Vzc3x8Yy5yZXNldClpZihjLnJlc2V0JiZsKGEpLGhbYV0uYXR0ZW1wdGluZ1Jlc3VtZSYmYy5yZXNldCloW2FdLmF0dGVtcHRpbmdSZXN1bWU9ITEsdSgiU2VydmVyIGhhcyBkZWNsYXJlZCB0aGF0IGl0IGNhbm5vdCBoYW5kbGUgcmVzdW1lIGZvciBpdGVtIElEICIrYSsiIC0gc3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgY2h1bmsiLCJlcnJvciIpLGwoYSkscC51cGxvYWQoYSwhMCk7ZWxzZXt2YXIgZj1wLmdldE5hbWUoYSk7ai5vbkF1dG9SZXRyeShhLGYsYyxiKXx8bShhLGMsYil9ZWxzZSBpZihBKXt2YXIgZj1oW2FdLnJlbWFpbmluZ0NodW5rSWR4cy5zaGlmdCgpLGc9ZShhLGYpO2hbYV0uYXR0ZW1wdGluZ1Jlc3VtZT0hMTsKdmFyIGY9aFthXSxpPWYubG9hZGVkLGc9Zy5zaXplLG87bz13P2hbYV0ubGFzdFJlcXVlc3RPdmVyaGVhZDowO2YubG9hZGVkPWkrKGcrbyk7MDxoW2FdLnJlbWFpbmluZ0NodW5rSWR4cy5sZW5ndGg/ayhhKToodiYmcihhKSxtKGEsYyxiKSl9ZWxzZSBtKGEsYyxiKX19fX1mdW5jdGlvbiB4KGEsYil7dmFyIGM9cC5nZXRVdWlkKGEpLGQ9aFthXS5sb2FkZWQsZT1oW2FdLmluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQsZj1oW2FdLmVzdFRvdGFsUmVxdWVzdHNTaXplLGc9cyhhKTtxcS5zZXRDb29raWUoZyxjK3ErYi5wYXJ0K3ErZCtxK2UrcStmLGoucmVzdW1lLmNvb2tpZXNFeHBpcmVJbil9ZnVuY3Rpb24gcihhKXtoW2FdLmZpbGUmJihhPXMoYSkscXEuZGVsZXRlQ29va2llKGEpKX1mdW5jdGlvbiBzKGEpe3ZhciBiPXAuZ2V0TmFtZShhKSxhPXAuZ2V0U2l6ZShhKSxjPWouY2h1bmtpbmcucGFydFNpemUsYj0icXFmaWxlY2h1bmsiK3ErZW5jb2RlVVJJQ29tcG9uZW50KGIpK3ErYStxKwpjO3ZvaWQgMCE9PXkmJihiKz1xK3kpO3JldHVybiBifWZ1bmN0aW9uIHooYSl7dmFyIGI9aFthXS5maWxlfHxoW2FdLmJsb2JEYXRhLmJsb2IsYz1wLmdldE5hbWUoYSksZCxlO2hbYV0ubG9hZGVkPTA7ZD1nKGEpO2QudXBsb2FkLm9ucHJvZ3Jlc3M9ZnVuY3Rpb24oYil7Yi5sZW5ndGhDb21wdXRhYmxlJiYoaFthXS5sb2FkZWQ9Yi5sb2FkZWQsai5vblByb2dyZXNzKGEsYyxiLmxvYWRlZCxiLnRvdGFsKSl9O2Qub25yZWFkeXN0YXRlY2hhbmdlPW8oYSxkKTtlPWoucGFyYW1zU3RvcmUuZ2V0UGFyYW1zKGEpO2I9bihlLGQsYixhKTtpKGEsZCk7dSgiU2VuZGluZyB1cGxvYWQgcmVxdWVzdCBmb3IgIithKTtkLnNlbmQoYil9dmFyIGo9YSxCPWIsdT1jLGg9W10scT0ifCIsQT1qLmNodW5raW5nLmVuYWJsZWQmJnFxLmlzRmlsZUNodW5raW5nU3VwcG9ydGVkKCksdj1qLnJlc3VtZS5lbmFibGVkJiZBJiZxcS5hcmVDb29raWVzRW5hYmxlZCgpLHk7eT1udWxsIT09ai5yZXN1bWUuaWQmJgp2b2lkIDAhPT1qLnJlc3VtZS5pZCYmIXFxLmlzRnVuY3Rpb24oai5yZXN1bWUuaWQpJiYhcXEuaXNPYmplY3Qoai5yZXN1bWUuaWQpP2oucmVzdW1lLmlkOnZvaWQgMDt2YXIgdz1qLmZvcmNlTXVsdGlwYXJ0fHxqLnBhcmFtc0luQm9keSxwO3JldHVybiBwPXthZGQ6ZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIEZpbGUpYT1oLnB1c2goe2ZpbGU6YX0pLTE7ZWxzZSBpZihhLmJsb2IgaW5zdGFuY2VvZiBCbG9iKWE9aC5wdXNoKHtibG9iRGF0YTphfSktMTtlbHNlIHRocm93IEVycm9yKCJQYXNzZWQgb2JqIGluIG5vdCBhIEZpbGUgb3IgQmxvYkRhdGEgKGluIHFxLlVwbG9hZEhhbmRsZXJYaHIpIik7aFthXS51dWlkPXFxLmdldFVuaXF1ZUlkKCk7cmV0dXJuIGF9LGdldE5hbWU6ZnVuY3Rpb24oYSl7aWYocC5pc1ZhbGlkKGEpKXt2YXIgYj1oW2FdLmZpbGUsYT1oW2FdLmJsb2JEYXRhO3JldHVybiBiP251bGwhPT1iLmZpbGVOYW1lJiZ2b2lkIDAhPT1iLmZpbGVOYW1lP2IuZmlsZU5hbWU6CmIubmFtZTphLm5hbWV9dShhKyIgaXMgbm90IGEgdmFsaWQgaXRlbSBJRC4iLCJlcnJvciIpfSxnZXRTaXplOmZ1bmN0aW9uKGEpe2E9aFthXS5maWxlfHxoW2FdLmJsb2JEYXRhLmJsb2I7cmV0dXJuIHFxLmlzRmlsZU9ySW5wdXQoYSk/bnVsbCE9YS5maWxlU2l6ZT9hLmZpbGVTaXplOmEuc2l6ZTphLnNpemV9LGdldEZpbGU6ZnVuY3Rpb24oYSl7aWYoaFthXSlyZXR1cm4gaFthXS5maWxlfHxoW2FdLmJsb2JEYXRhLmJsb2J9LGdldExvYWRlZDpmdW5jdGlvbihhKXtyZXR1cm4gaFthXS5sb2FkZWR8fDB9LGlzVmFsaWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIHZvaWQgMCE9PWhbYV19LHJlc2V0OmZ1bmN0aW9uKCl7aD1bXX0sZ2V0VXVpZDpmdW5jdGlvbihhKXtyZXR1cm4gaFthXS51dWlkfSx1cGxvYWQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10aGlzLmdldE5hbWUoYSk7ai5vblVwbG9hZChhLGMpO2lmKEEpe3ZhciBkPXAuZ2V0TmFtZShhKSxjPTAsZyxsO2lmKCFoW2FdLnJlbWFpbmluZ0NodW5rSWR4c3x8CjA9PT1oW2FdLnJlbWFpbmluZ0NodW5rSWR4cy5sZW5ndGgpe2hbYV0ucmVtYWluaW5nQ2h1bmtJZHhzPVtdO2lmKHYmJiFiJiZoW2FdLmZpbGUpe2E6e2c9cXEuZ2V0Q29va2llKHMoYSkpO2w9cC5nZXROYW1lKGEpO3ZhciBpLG8sbTtpZihnKXtnPWcuc3BsaXQocSk7aWYoNT09PWcubGVuZ3RoKXtsPWdbMF07aT1wYXJzZUludChnWzFdLDEwKTtvPXBhcnNlSW50KGdbMl0sMTApO209cGFyc2VJbnQoZ1szXSwxMCk7Zz1wYXJzZUludChnWzRdLDEwKTtnPXt1dWlkOmwscGFydDppLGxhc3RCeXRlU2VudDpvLGluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQ6bSxlc3RUb3RhbFJlcXVlc3RzU2l6ZTpnfTticmVhayBhfXUoIklnbm9yaW5nIHByZXZpb3VzbHkgc3RvcmVkIHJlc3VtZS9jaHVuayBjb29raWUgZm9yICIrbCsiIC0gb2xkIGNvb2tpZSBmb3JtYXQiLCJ3YXJuIil9Zz12b2lkIDB9ZyYmKGw9ZShhLGcucGFydCksITEhPT1qLm9uUmVzdW1lKGEsZCx0KGwpKSYmKGM9Zy5wYXJ0LGhbYV0udXVpZD0KZy51dWlkLGhbYV0ubG9hZGVkPWcubGFzdEJ5dGVTZW50LGhbYV0uZXN0VG90YWxSZXF1ZXN0c1NpemU9Zy5lc3RUb3RhbFJlcXVlc3RzU2l6ZSxoW2FdLmluaXRpYWxSZXF1ZXN0T3ZlcmhlYWQ9Zy5pbml0aWFsUmVxdWVzdE92ZXJoZWFkLGhbYV0uYXR0ZW1wdGluZ1Jlc3VtZT0hMCx1KCJSZXN1bWluZyAiK2QrIiBhdCBwYXJ0aXRpb24gaW5kZXggIitjKSkpfWZvcihkPWYoYSktMTtkPj1jO2QtPTEpaFthXS5yZW1haW5pbmdDaHVua0lkeHMudW5zaGlmdChkKX1rKGEpfWVsc2UgeihhKX0sY2FuY2VsOmZ1bmN0aW9uKGEpe3ZhciBiPWhbYV0ueGhyO2oub25DYW5jZWwoYSx0aGlzLmdldE5hbWUoYSkpO2ImJihiLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGIuYWJvcnQoKSk7diYmcihhKTtkZWxldGUgaFthXX0sZ2V0UmVzdW1hYmxlRmlsZXNEYXRhOmZ1bmN0aW9uKCl7dmFyIGE9W10sYj1bXTtyZXR1cm4gQSYmdj8oYT12b2lkIDA9PT15P3FxLmdldENvb2tpZU5hbWVzKFJlZ0V4cCgiXnFxZmlsZWNodW5rXFwiKwpxKyIuK1xcIitxKyJcXGQrXFwiK3Erai5jaHVua2luZy5wYXJ0U2l6ZSsiPSIpKTpxcS5nZXRDb29raWVOYW1lcyhSZWdFeHAoIl5xcWZpbGVjaHVua1xcIitxKyIuK1xcIitxKyJcXGQrXFwiK3Erai5jaHVua2luZy5wYXJ0U2l6ZSsiXFwiK3EreSsiPSIpKSxxcS5lYWNoKGEsZnVuY3Rpb24oYSxjKXt2YXIgZD1jLnNwbGl0KHEpLGU9cXEuZ2V0Q29va2llKGMpLnNwbGl0KHEpO2IucHVzaCh7bmFtZTpkZWNvZGVVUklDb21wb25lbnQoZFsxXSksc2l6ZTpkWzJdLHV1aWQ6ZVswXSxwYXJ0SWR4OmVbMV19KX0pLGIpOltdfX19OwooZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZixnLG4saSxtLGs7Zz1bInVwbG9hZGVyVHlwZSJdO2Q9ZnVuY3Rpb24oYSl7YSYmKGE9aShhKSxuKGEpLCJiYXNpYyI9PT1mKCJ1cGxvYWRlclR5cGUiKT9iKG5ldyBxcS5GaW5lVXBsb2FkZXJCYXNpYyhhKSk6YihuZXcgcXEuRmluZVVwbG9hZGVyKGEpKSk7cmV0dXJuIGN9O2U9ZnVuY3Rpb24oYSxiKXt2YXIgZD1jLmRhdGEoImZpbmV1cGxvYWRlciIpO2lmKGIpdm9pZCAwPT09ZCYmKGQ9e30pLGRbYV09YixjLmRhdGEoImZpbmV1cGxvYWRlciIsZCk7ZWxzZSByZXR1cm4gdm9pZCAwPT09ZD9udWxsOmRbYV19O2I9ZnVuY3Rpb24oYSl7cmV0dXJuIGUoInVwbG9hZGVyIixhKX07Zj1mdW5jdGlvbihhLGIpe3JldHVybiBlKGEsYil9O249ZnVuY3Rpb24oYil7dmFyIGQ9Yi5jYWxsYmFja3M9e30sZT1uZXcgcXEuRmluZVVwbG9hZGVyQmFzaWM7YS5lYWNoKGUuX29wdGlvbnMuY2FsbGJhY2tzLGZ1bmN0aW9uKGIsZil7dmFyIGcsbDtnPS9eb24oXHcrKS8uZXhlYyhiKVsxXTsKZz1nLnN1YnN0cmluZygwLDEpLnRvTG93ZXJDYXNlKCkrZy5zdWJzdHJpbmcoMSk7bD1jO2RbYl09ZnVuY3Rpb24oKXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLGM9bC50cmlnZ2VySGFuZGxlcihnLGMpO3JldHVybiB2b2lkIDA9PT1jJiYwPD1hLmluQXJyYXkoYixlLmdldFByb21pc3NvcnlDYWxsYmFja05hbWVzKCkpP2YoKTpjfX0pfTtpPWZ1bmN0aW9uKGIsZCl7dmFyIGUsaztlPXZvaWQgMD09PWQ/ImJhc2ljIiE9PWIudXBsb2FkZXJUeXBlP3tlbGVtZW50OmNbMF19Ont9OmQ7YS5lYWNoKGIsZnVuY3Rpb24oYixjKXswPD1hLmluQXJyYXkoYixnKT9mKGIsYyk6YyBpbnN0YW5jZW9mIGE/ZVtiXT1jWzBdOmEuaXNQbGFpbk9iamVjdChjKT8oZVtiXT17fSxpKGMsZVtiXSkpOmEuaXNBcnJheShjKT8oaz1bXSxhLmVhY2goYyxmdW5jdGlvbihiLGMpe2MgaW5zdGFuY2VvZiBhP2EubWVyZ2UoayxjKTprLnB1c2goYyl9KSxlW2JdPWspOmVbYl09CmN9KTtpZih2b2lkIDA9PT1kKXJldHVybiBlfTttPWZ1bmN0aW9uKGMpe3JldHVybiJzdHJpbmciPT09YS50eXBlKGMpJiYhYy5tYXRjaCgvXl8vKSYmdm9pZCAwIT09YigpW2NdfTtrPWZ1bmN0aW9uKGEpe3ZhciBjPVtdLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2koZCxjKTtyZXR1cm4gYigpW2FdLmFwcGx5KGIoKSxjKX07YS5mbi5maW5lVXBsb2FkZXI9ZnVuY3Rpb24oZSl7dmFyIGY9dGhpcyxnPWFyZ3VtZW50cyxpPVtdO3RoaXMuZWFjaChmdW5jdGlvbihuLHMpe2M9YShzKTtpZihiKCkmJm0oZSkpe2lmKGkucHVzaChrLmFwcGx5KGYsZykpLDE9PT1mLmxlbmd0aClyZXR1cm4hMX1lbHNlIm9iamVjdCI9PT10eXBlb2YgZXx8IWU/ZC5hcHBseShmLGcpOmEuZXJyb3IoIk1ldGhvZCAiK2UrIiBkb2VzIG5vdCBleGlzdCBvbiBqUXVlcnkuZmluZVVwbG9hZGVyIil9KTtyZXR1cm4gMT09PWkubGVuZ3RoP2lbMF06MTxpLmxlbmd0aD9pOnRoaXN9fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/loading.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/lib/js/fineuploader/processing.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery-1.7.2.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2MS43LjIganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwooZnVuY3Rpb24oYSxiKXtmdW5jdGlvbiBjeShhKXtyZXR1cm4gZi5pc1dpbmRvdyhhKT9hOmEubm9kZVR5cGU9PT05P2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OiExfWZ1bmN0aW9uIGN1KGEpe2lmKCFjalthXSl7dmFyIGI9Yy5ib2R5LGQ9ZigiPCIrYSsiPiIpLmFwcGVuZFRvKGIpLGU9ZC5jc3MoImRpc3BsYXkiKTtkLnJlbW92ZSgpO2lmKGU9PT0ibm9uZSJ8fGU9PT0iIil7Y2t8fChjaz1jLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLGNrLmZyYW1lQm9yZGVyPWNrLndpZHRoPWNrLmhlaWdodD0wKSxiLmFwcGVuZENoaWxkKGNrKTtpZighY2x8fCFjay5jcmVhdGVFbGVtZW50KWNsPShjay5jb250ZW50V2luZG93fHxjay5jb250ZW50RG9jdW1lbnQpLmRvY3VtZW50LGNsLndyaXRlKChmLnN1cHBvcnQuYm94TW9kZWw/IjwhZG9jdHlwZSBodG1sPiI6IiIpKyI8aHRtbD48Ym9keT4iKSxjbC5jbG9zZSgpO2Q9Y2wuY3JlYXRlRWxlbWVudChhKSxjbC5ib2R5LmFwcGVuZENoaWxkKGQpLGU9Zi5jc3MoZCwiZGlzcGxheSIpLGIucmVtb3ZlQ2hpbGQoY2spfWNqW2FdPWV9cmV0dXJuIGNqW2FdfWZ1bmN0aW9uIGN0KGEsYil7dmFyIGM9e307Zi5lYWNoKGNwLmNvbmNhdC5hcHBseShbXSxjcC5zbGljZSgwLGIpKSxmdW5jdGlvbigpe2NbdGhpc109YX0pO3JldHVybiBjfWZ1bmN0aW9uIGNzKCl7Y3E9Yn1mdW5jdGlvbiBjcigpe3NldFRpbWVvdXQoY3MsMCk7cmV0dXJuIGNxPWYubm93KCl9ZnVuY3Rpb24gY2koKXt0cnl7cmV0dXJuIG5ldyBhLkFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxIVFRQIil9Y2F0Y2goYil7fX1mdW5jdGlvbiBjaCgpe3RyeXtyZXR1cm4gbmV3IGEuWE1MSHR0cFJlcXVlc3R9Y2F0Y2goYil7fX1mdW5jdGlvbiBjYihhLGMpe2EuZGF0YUZpbHRlciYmKGM9YS5kYXRhRmlsdGVyKGMsYS5kYXRhVHlwZSkpO3ZhciBkPWEuZGF0YVR5cGVzLGU9e30sZyxoLGk9ZC5sZW5ndGgsaixrPWRbMF0sbCxtLG4sbyxwO2ZvcihnPTE7ZzxpO2crKyl7aWYoZz09PTEpZm9yKGggaW4gYS5jb252ZXJ0ZXJzKXR5cGVvZiBoPT0ic3RyaW5nIiYmKGVbaC50b0xvd2VyQ2FzZSgpXT1hLmNvbnZlcnRlcnNbaF0pO2w9ayxrPWRbZ107aWYoaz09PSIqIilrPWw7ZWxzZSBpZihsIT09IioiJiZsIT09ayl7bT1sKyIgIitrLG49ZVttXXx8ZVsiKiAiK2tdO2lmKCFuKXtwPWI7Zm9yKG8gaW4gZSl7aj1vLnNwbGl0KCIgIik7aWYoalswXT09PWx8fGpbMF09PT0iKiIpe3A9ZVtqWzFdKyIgIitrXTtpZihwKXtvPWVbb10sbz09PSEwP249cDpwPT09ITAmJihuPW8pO2JyZWFrfX19fSFuJiYhcCYmZi5lcnJvcigiTm8gY29udmVyc2lvbiBmcm9tICIrbS5yZXBsYWNlKCIgIiwiIHRvICIpKSxuIT09ITAmJihjPW4/bihjKTpwKG8oYykpKX19cmV0dXJuIGN9ZnVuY3Rpb24gY2EoYSxjLGQpe3ZhciBlPWEuY29udGVudHMsZj1hLmRhdGFUeXBlcyxnPWEucmVzcG9uc2VGaWVsZHMsaCxpLGosaztmb3IoaSBpbiBnKWkgaW4gZCYmKGNbZ1tpXV09ZFtpXSk7d2hpbGUoZlswXT09PSIqIilmLnNoaWZ0KCksaD09PWImJihoPWEubWltZVR5cGV8fGMuZ2V0UmVzcG9uc2VIZWFkZXIoImNvbnRlbnQtdHlwZSIpKTtpZihoKWZvcihpIGluIGUpaWYoZVtpXSYmZVtpXS50ZXN0KGgpKXtmLnVuc2hpZnQoaSk7YnJlYWt9aWYoZlswXWluIGQpaj1mWzBdO2Vsc2V7Zm9yKGkgaW4gZCl7aWYoIWZbMF18fGEuY29udmVydGVyc1tpKyIgIitmWzBdXSl7aj1pO2JyZWFrfWt8fChrPWkpfWo9anx8a31pZihqKXtqIT09ZlswXSYmZi51bnNoaWZ0KGopO3JldHVybiBkW2pdfX1mdW5jdGlvbiBiXyhhLGIsYyxkKXtpZihmLmlzQXJyYXkoYikpZi5lYWNoKGIsZnVuY3Rpb24oYixlKXtjfHxiRC50ZXN0KGEpP2QoYSxlKTpiXyhhKyJbIisodHlwZW9mIGU9PSJvYmplY3QiP2I6IiIpKyJdIixlLGMsZCl9KTtlbHNlIGlmKCFjJiZmLnR5cGUoYik9PT0ib2JqZWN0Iilmb3IodmFyIGUgaW4gYiliXyhhKyJbIitlKyJdIixiW2VdLGMsZCk7ZWxzZSBkKGEsYil9ZnVuY3Rpb24gYiQoYSxjKXt2YXIgZCxlLGc9Zi5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnN8fHt9O2ZvcihkIGluIGMpY1tkXSE9PWImJigoZ1tkXT9hOmV8fChlPXt9KSlbZF09Y1tkXSk7ZSYmZi5leHRlbmQoITAsYSxlKX1mdW5jdGlvbiBiWihhLGMsZCxlLGYsZyl7Zj1mfHxjLmRhdGFUeXBlc1swXSxnPWd8fHt9LGdbZl09ITA7dmFyIGg9YVtmXSxpPTAsaj1oP2gubGVuZ3RoOjAsaz1hPT09YlMsbDtmb3IoO2k8aiYmKGt8fCFsKTtpKyspbD1oW2ldKGMsZCxlKSx0eXBlb2YgbD09InN0cmluZyImJigha3x8Z1tsXT9sPWI6KGMuZGF0YVR5cGVzLnVuc2hpZnQobCksbD1iWihhLGMsZCxlLGwsZykpKTsoa3x8IWwpJiYhZ1siKiJdJiYobD1iWihhLGMsZCxlLCIqIixnKSk7cmV0dXJuIGx9ZnVuY3Rpb24gYlkoYSl7cmV0dXJuIGZ1bmN0aW9uKGIsYyl7dHlwZW9mIGIhPSJzdHJpbmciJiYoYz1iLGI9IioiKTtpZihmLmlzRnVuY3Rpb24oYykpe3ZhciBkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChiTyksZT0wLGc9ZC5sZW5ndGgsaCxpLGo7Zm9yKDtlPGc7ZSsrKWg9ZFtlXSxqPS9eXCsvLnRlc3QoaCksaiYmKGg9aC5zdWJzdHIoMSl8fCIqIiksaT1hW2hdPWFbaF18fFtdLGlbaj8idW5zaGlmdCI6InB1c2giXShjKX19fWZ1bmN0aW9uIGJCKGEsYixjKXt2YXIgZD1iPT09IndpZHRoIj9hLm9mZnNldFdpZHRoOmEub2Zmc2V0SGVpZ2h0LGU9Yj09PSJ3aWR0aCI/MTowLGc9NDtpZihkPjApe2lmKGMhPT0iYm9yZGVyIilmb3IoO2U8ZztlKz0yKWN8fChkLT1wYXJzZUZsb2F0KGYuY3NzKGEsInBhZGRpbmciK2J4W2VdKSl8fDApLGM9PT0ibWFyZ2luIj9kKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytieFtlXSkpfHwwOmQtPXBhcnNlRmxvYXQoZi5jc3MoYSwiYm9yZGVyIitieFtlXSsiV2lkdGgiKSl8fDA7cmV0dXJuIGQrInB4In1kPWJ5KGEsYik7aWYoZDwwfHxkPT1udWxsKWQ9YS5zdHlsZVtiXTtpZihidC50ZXN0KGQpKXJldHVybiBkO2Q9cGFyc2VGbG9hdChkKXx8MDtpZihjKWZvcig7ZTxnO2UrPTIpZCs9cGFyc2VGbG9hdChmLmNzcyhhLCJwYWRkaW5nIitieFtlXSkpfHwwLGMhPT0icGFkZGluZyImJihkKz1wYXJzZUZsb2F0KGYuY3NzKGEsImJvcmRlciIrYnhbZV0rIldpZHRoIikpfHwwKSxjPT09Im1hcmdpbiImJihkKz1wYXJzZUZsb2F0KGYuY3NzKGEsYytieFtlXSkpfHwwKTtyZXR1cm4gZCsicHgifWZ1bmN0aW9uIGJvKGEpe3ZhciBiPWMuY3JlYXRlRWxlbWVudCgiZGl2Iik7YmguYXBwZW5kQ2hpbGQoYiksYi5pbm5lckhUTUw9YS5vdXRlckhUTUw7cmV0dXJuIGIuZmlyc3RDaGlsZH1mdW5jdGlvbiBibihhKXt2YXIgYj0oYS5ub2RlTmFtZXx8IiIpLnRvTG93ZXJDYXNlKCk7Yj09PSJpbnB1dCI/Ym0oYSk6YiE9PSJzY3JpcHQiJiZ0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJmYuZ3JlcChhLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLGJtKX1mdW5jdGlvbiBibShhKXtpZihhLnR5cGU9PT0iY2hlY2tib3gifHxhLnR5cGU9PT0icmFkaW8iKWEuZGVmYXVsdENoZWNrZWQ9YS5jaGVja2VkfWZ1bmN0aW9uIGJsKGEpe3JldHVybiB0eXBlb2YgYS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOnR5cGVvZiBhLnF1ZXJ5U2VsZWN0b3JBbGwhPSJ1bmRlZmluZWQiP2EucXVlcnlTZWxlY3RvckFsbCgiKiIpOltdfWZ1bmN0aW9uIGJrKGEsYil7dmFyIGM7Yi5ub2RlVHlwZT09PTEmJihiLmNsZWFyQXR0cmlidXRlcyYmYi5jbGVhckF0dHJpYnV0ZXMoKSxiLm1lcmdlQXR0cmlidXRlcyYmYi5tZXJnZUF0dHJpYnV0ZXMoYSksYz1iLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksYz09PSJvYmplY3QiP2Iub3V0ZXJIVE1MPWEub3V0ZXJIVE1MOmMhPT0iaW5wdXQifHxhLnR5cGUhPT0iY2hlY2tib3giJiZhLnR5cGUhPT0icmFkaW8iP2M9PT0ib3B0aW9uIj9iLnNlbGVjdGVkPWEuZGVmYXVsdFNlbGVjdGVkOmM9PT0iaW5wdXQifHxjPT09InRleHRhcmVhIj9iLmRlZmF1bHRWYWx1ZT1hLmRlZmF1bHRWYWx1ZTpjPT09InNjcmlwdCImJmIudGV4dCE9PWEudGV4dCYmKGIudGV4dD1hLnRleHQpOihhLmNoZWNrZWQmJihiLmRlZmF1bHRDaGVja2VkPWIuY2hlY2tlZD1hLmNoZWNrZWQpLGIudmFsdWUhPT1hLnZhbHVlJiYoYi52YWx1ZT1hLnZhbHVlKSksYi5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKSxiLnJlbW92ZUF0dHJpYnV0ZSgiX3N1Ym1pdF9hdHRhY2hlZCIpLGIucmVtb3ZlQXR0cmlidXRlKCJfY2hhbmdlX2F0dGFjaGVkIikpfWZ1bmN0aW9uIGJqKGEsYil7aWYoYi5ub2RlVHlwZT09PTEmJiEhZi5oYXNEYXRhKGEpKXt2YXIgYyxkLGUsZz1mLl9kYXRhKGEpLGg9Zi5fZGF0YShiLGcpLGk9Zy5ldmVudHM7aWYoaSl7ZGVsZXRlIGguaGFuZGxlLGguZXZlbnRzPXt9O2ZvcihjIGluIGkpZm9yKGQ9MCxlPWlbY10ubGVuZ3RoO2Q8ZTtkKyspZi5ldmVudC5hZGQoYixjLGlbY11bZF0pfWguZGF0YSYmKGguZGF0YT1mLmV4dGVuZCh7fSxoLmRhdGEpKX19ZnVuY3Rpb24gYmkoYSxiKXtyZXR1cm4gZi5ub2RlTmFtZShhLCJ0YWJsZSIpP2EuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGEuYXBwZW5kQ2hpbGQoYS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmF9ZnVuY3Rpb24gVShhKXt2YXIgYj1WLnNwbGl0KCJ8IiksYz1hLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtpZihjLmNyZWF0ZUVsZW1lbnQpd2hpbGUoYi5sZW5ndGgpYy5jcmVhdGVFbGVtZW50KGIucG9wKCkpO3JldHVybiBjfWZ1bmN0aW9uIFQoYSxiLGMpe2I9Ynx8MDtpZihmLmlzRnVuY3Rpb24oYikpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7dmFyIGU9ISFiLmNhbGwoYSxkLGEpO3JldHVybiBlPT09Y30pO2lmKGIubm9kZVR5cGUpcmV0dXJuIGYuZ3JlcChhLGZ1bmN0aW9uKGEsZCl7cmV0dXJuIGE9PT1iPT09Y30pO2lmKHR5cGVvZiBiPT0ic3RyaW5nIil7dmFyIGQ9Zi5ncmVwKGEsZnVuY3Rpb24oYSl7cmV0dXJuIGEubm9kZVR5cGU9PT0xfSk7aWYoTy50ZXN0KGIpKXJldHVybiBmLmZpbHRlcihiLGQsIWMpO2I9Zi5maWx0ZXIoYixkKX1yZXR1cm4gZi5ncmVwKGEsZnVuY3Rpb24oYSxkKXtyZXR1cm4gZi5pbkFycmF5KGEsYik+PTA9PT1jfSl9ZnVuY3Rpb24gUyhhKXtyZXR1cm4hYXx8IWEucGFyZW50Tm9kZXx8YS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gSygpe3JldHVybiEwfWZ1bmN0aW9uIEooKXtyZXR1cm4hMX1mdW5jdGlvbiBuKGEsYixjKXt2YXIgZD1iKyJkZWZlciIsZT1iKyJxdWV1ZSIsZz1iKyJtYXJrIixoPWYuX2RhdGEoYSxkKTtoJiYoYz09PSJxdWV1ZSJ8fCFmLl9kYXRhKGEsZSkpJiYoYz09PSJtYXJrInx8IWYuX2RhdGEoYSxnKSkmJnNldFRpbWVvdXQoZnVuY3Rpb24oKXshZi5fZGF0YShhLGUpJiYhZi5fZGF0YShhLGcpJiYoZi5yZW1vdmVEYXRhKGEsZCwhMCksaC5maXJlKCkpfSwwKX1mdW5jdGlvbiBtKGEpe2Zvcih2YXIgYiBpbiBhKXtpZihiPT09ImRhdGEiJiZmLmlzRW1wdHlPYmplY3QoYVtiXSkpY29udGludWU7aWYoYiE9PSJ0b0pTT04iKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGwoYSxjLGQpe2lmKGQ9PT1iJiZhLm5vZGVUeXBlPT09MSl7dmFyIGU9ImRhdGEtIitjLnJlcGxhY2UoaywiLSQxIikudG9Mb3dlckNhc2UoKTtkPWEuZ2V0QXR0cmlidXRlKGUpO2lmKHR5cGVvZiBkPT0ic3RyaW5nIil7dHJ5e2Q9ZD09PSJ0cnVlIj8hMDpkPT09ImZhbHNlIj8hMTpkPT09Im51bGwiP251bGw6Zi5pc051bWVyaWMoZCk/K2Q6ai50ZXN0KGQpP2YucGFyc2VKU09OKGQpOmR9Y2F0Y2goZyl7fWYuZGF0YShhLGMsZCl9ZWxzZSBkPWJ9cmV0dXJuIGR9ZnVuY3Rpb24gaChhKXt2YXIgYj1nW2FdPXt9LGMsZDthPWEuc3BsaXQoL1xzKy8pO2ZvcihjPTAsZD1hLmxlbmd0aDtjPGQ7YysrKWJbYVtjXV09ITA7cmV0dXJuIGJ9dmFyIGM9YS5kb2N1bWVudCxkPWEubmF2aWdhdG9yLGU9YS5sb2NhdGlvbixmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gSigpe2lmKCFlLmlzUmVhZHkpe3RyeXtjLmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGEpe3NldFRpbWVvdXQoSiwxKTtyZXR1cm59ZS5yZWFkeSgpfX12YXIgZT1mdW5jdGlvbihhLGIpe3JldHVybiBuZXcgZS5mbi5pbml0KGEsYixoKX0sZj1hLmpRdWVyeSxnPWEuJCxoLGk9L14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLGo9L1xTLyxrPS9eXHMrLyxsPS9ccyskLyxtPS9ePChcdyspXHMqXC8/Pig/OjxcL1wxPik/JC8sbj0vXltcXSw6e31cc10qJC8sbz0vXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLHA9LyJbXiJcXFxuXHJdKiJ8dHJ1ZXxmYWxzZXxudWxsfC0/XGQrKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy9nLHE9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxyPS8od2Via2l0KVsgXC9dKFtcdy5dKykvLHM9LyhvcGVyYSkoPzouKnZlcnNpb24pP1sgXC9dKFtcdy5dKykvLHQ9Lyhtc2llKSAoW1x3Ll0rKS8sdT0vKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLHY9Ly0oW2Etel18WzAtOV0pL2lnLHc9L14tbXMtLyx4PWZ1bmN0aW9uKGEsYil7cmV0dXJuKGIrIiIpLnRvVXBwZXJDYXNlKCl9LHk9ZC51c2VyQWdlbnQseixBLEIsQz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLEQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxFPUFycmF5LnByb3RvdHlwZS5wdXNoLEY9QXJyYXkucHJvdG90eXBlLnNsaWNlLEc9U3RyaW5nLnByb3RvdHlwZS50cmltLEg9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsST17fTtlLmZuPWUucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjplLGluaXQ6ZnVuY3Rpb24oYSxkLGYpe3ZhciBnLGgsaixrO2lmKCFhKXJldHVybiB0aGlzO2lmKGEubm9kZVR5cGUpe3RoaXMuY29udGV4dD10aGlzWzBdPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZihhPT09ImJvZHkiJiYhZCYmYy5ib2R5KXt0aGlzLmNvbnRleHQ9Yyx0aGlzWzBdPWMuYm9keSx0aGlzLnNlbGVjdG9yPWEsdGhpcy5sZW5ndGg9MTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09InN0cmluZyIpe2EuY2hhckF0KDApIT09IjwifHxhLmNoYXJBdChhLmxlbmd0aC0xKSE9PSI+Inx8YS5sZW5ndGg8Mz9nPWkuZXhlYyhhKTpnPVtudWxsLGEsbnVsbF07aWYoZyYmKGdbMV18fCFkKSl7aWYoZ1sxXSl7ZD1kIGluc3RhbmNlb2YgZT9kWzBdOmQsaz1kP2Qub3duZXJEb2N1bWVudHx8ZDpjLGo9bS5leGVjKGEpLGo/ZS5pc1BsYWluT2JqZWN0KGQpPyhhPVtjLmNyZWF0ZUVsZW1lbnQoalsxXSldLGUuZm4uYXR0ci5jYWxsKGEsZCwhMCkpOmE9W2suY3JlYXRlRWxlbWVudChqWzFdKV06KGo9ZS5idWlsZEZyYWdtZW50KFtnWzFdXSxba10pLGE9KGouY2FjaGVhYmxlP2UuY2xvbmUoai5mcmFnbWVudCk6ai5mcmFnbWVudCkuY2hpbGROb2Rlcyk7cmV0dXJuIGUubWVyZ2UodGhpcyxhKX1oPWMuZ2V0RWxlbWVudEJ5SWQoZ1syXSk7aWYoaCYmaC5wYXJlbnROb2RlKXtpZihoLmlkIT09Z1syXSlyZXR1cm4gZi5maW5kKGEpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1ofXRoaXMuY29udGV4dD1jLHRoaXMuc2VsZWN0b3I9YTtyZXR1cm4gdGhpc31yZXR1cm4hZHx8ZC5qcXVlcnk/KGR8fGYpLmZpbmQoYSk6dGhpcy5jb25zdHJ1Y3RvcihkKS5maW5kKGEpfWlmKGUuaXNGdW5jdGlvbihhKSlyZXR1cm4gZi5yZWFkeShhKTthLnNlbGVjdG9yIT09YiYmKHRoaXMuc2VsZWN0b3I9YS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9YS5jb250ZXh0KTtyZXR1cm4gZS5tYWtlQXJyYXkoYSx0aGlzKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjcuMiIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBGLmNhbGwodGhpcywwKX0sZ2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP3RoaXMudG9BcnJheSgpOmE8MD90aGlzW3RoaXMubGVuZ3RoK2FdOnRoaXNbYV19LHB1c2hTdGFjazpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9dGhpcy5jb25zdHJ1Y3RvcigpO2UuaXNBcnJheShhKT9FLmFwcGx5KGQsYSk6ZS5tZXJnZShkLGEpLGQucHJldk9iamVjdD10aGlzLGQuY29udGV4dD10aGlzLmNvbnRleHQsYj09PSJmaW5kIj9kLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrKHRoaXMuc2VsZWN0b3I/IiAiOiIiKStjOmImJihkLnNlbGVjdG9yPXRoaXMuc2VsZWN0b3IrIi4iK2IrIigiK2MrIikiKTtyZXR1cm4gZH0sZWFjaDpmdW5jdGlvbihhLGIpe3JldHVybiBlLmVhY2godGhpcyxhLGIpfSxyZWFkeTpmdW5jdGlvbihhKXtlLmJpbmRSZWFkeSgpLEEuYWRkKGEpO3JldHVybiB0aGlzfSxlcTpmdW5jdGlvbihhKXthPSthO3JldHVybiBhPT09LTE/dGhpcy5zbGljZShhKTp0aGlzLnNsaWNlKGEsYSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soRi5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixGLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGUubWFwKHRoaXMsZnVuY3Rpb24oYixjKXtyZXR1cm4gYS5jYWxsKGIsYyxiKX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpFLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm4sZS5leHRlbmQ9ZS5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgYSxjLGQsZixnLGgsaT1hcmd1bWVudHNbMF18fHt9LGo9MSxrPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgaT09ImJvb2xlYW4iJiYobD1pLGk9YXJndW1lbnRzWzFdfHx7fSxqPTIpLHR5cGVvZiBpIT0ib2JqZWN0IiYmIWUuaXNGdW5jdGlvbihpKSYmKGk9e30pLGs9PT1qJiYoaT10aGlzLC0taik7Zm9yKDtqPGs7aisrKWlmKChhPWFyZ3VtZW50c1tqXSkhPW51bGwpZm9yKGMgaW4gYSl7ZD1pW2NdLGY9YVtjXTtpZihpPT09Ziljb250aW51ZTtsJiZmJiYoZS5pc1BsYWluT2JqZWN0KGYpfHwoZz1lLmlzQXJyYXkoZikpKT8oZz8oZz0hMSxoPWQmJmUuaXNBcnJheShkKT9kOltdKTpoPWQmJmUuaXNQbGFpbk9iamVjdChkKT9kOnt9LGlbY109ZS5leHRlbmQobCxoLGYpKTpmIT09YiYmKGlbY109Zil9cmV0dXJuIGl9LGUuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKGIpe2EuJD09PWUmJihhLiQ9ZyksYiYmYS5qUXVlcnk9PT1lJiYoYS5qUXVlcnk9Zik7cmV0dXJuIGV9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGEpe2E/ZS5yZWFkeVdhaXQrKzplLnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oYSl7aWYoYT09PSEwJiYhLS1lLnJlYWR5V2FpdHx8YSE9PSEwJiYhZS5pc1JlYWR5KXtpZighYy5ib2R5KXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7ZS5pc1JlYWR5PSEwO2lmKGEhPT0hMCYmLS1lLnJlYWR5V2FpdD4wKXJldHVybjtBLmZpcmVXaXRoKGMsW2VdKSxlLmZuLnRyaWdnZXImJmUoYykudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9fSxiaW5kUmVhZHk6ZnVuY3Rpb24oKXtpZighQSl7QT1lLkNhbGxiYWNrcygib25jZSBtZW1vcnkiKTtpZihjLnJlYWR5U3RhdGU9PT0iY29tcGxldGUiKXJldHVybiBzZXRUaW1lb3V0KGUucmVhZHksMSk7aWYoYy5hZGRFdmVudExpc3RlbmVyKWMuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQiwhMSksYS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixlLnJlYWR5LCExKTtlbHNlIGlmKGMuYXR0YWNoRXZlbnQpe2MuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksYS5hdHRhY2hFdmVudCgib25sb2FkIixlLnJlYWR5KTt2YXIgYj0hMTt0cnl7Yj1hLmZyYW1lRWxlbWVudD09bnVsbH1jYXRjaChkKXt9Yy5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwmJmImJkooKX19fSxpc0Z1bmN0aW9uOmZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iZnVuY3Rpb24ifSxpc0FycmF5OkFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBlLnR5cGUoYSk9PT0iYXJyYXkifSxpc1dpbmRvdzpmdW5jdGlvbihhKXtyZXR1cm4gYSE9bnVsbCYmYT09YS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihhKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChhKSkmJmlzRmluaXRlKGEpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsP1N0cmluZyhhKTpJW0MuY2FsbChhKV18fCJvYmplY3QifSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGEpe2lmKCFhfHxlLnR5cGUoYSkhPT0ib2JqZWN0Inx8YS5ub2RlVHlwZXx8ZS5pc1dpbmRvdyhhKSlyZXR1cm4hMTt0cnl7aWYoYS5jb25zdHJ1Y3RvciYmIUQuY2FsbChhLCJjb25zdHJ1Y3RvciIpJiYhRC5jYWxsKGEuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2goYyl7cmV0dXJuITF9dmFyIGQ7Zm9yKGQgaW4gYSk7cmV0dXJuIGQ9PT1ifHxELmNhbGwoYSxkKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihhKXtmb3IodmFyIGIgaW4gYSlyZXR1cm4hMTtyZXR1cm4hMH0sZXJyb3I6ZnVuY3Rpb24oYSl7dGhyb3cgbmV3IEVycm9yKGEpfSxwYXJzZUpTT046ZnVuY3Rpb24oYil7aWYodHlwZW9mIGIhPSJzdHJpbmcifHwhYilyZXR1cm4gbnVsbDtiPWUudHJpbShiKTtpZihhLkpTT04mJmEuSlNPTi5wYXJzZSlyZXR1cm4gYS5KU09OLnBhcnNlKGIpO2lmKG4udGVzdChiLnJlcGxhY2UobywiQCIpLnJlcGxhY2UocCwiXSIpLnJlcGxhY2UocSwiIikpKXJldHVybihuZXcgRnVuY3Rpb24oInJldHVybiAiK2IpKSgpO2UuZXJyb3IoIkludmFsaWQgSlNPTjogIitiKX0scGFyc2VYTUw6ZnVuY3Rpb24oYyl7aWYodHlwZW9mIGMhPSJzdHJpbmcifHwhYylyZXR1cm4gbnVsbDt2YXIgZCxmO3RyeXthLkRPTVBhcnNlcj8oZj1uZXcgRE9NUGFyc2VyLGQ9Zi5wYXJzZUZyb21TdHJpbmcoYywidGV4dC94bWwiKSk6KGQ9bmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29mdC5YTUxET00iKSxkLmFzeW5jPSJmYWxzZSIsZC5sb2FkWE1MKGMpKX1jYXRjaChnKXtkPWJ9KCFkfHwhZC5kb2N1bWVudEVsZW1lbnR8fGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInBhcnNlcmVycm9yIikubGVuZ3RoKSYmZS5lcnJvcigiSW52YWxpZCBYTUw6ICIrYyk7cmV0dXJuIGR9LG5vb3A6ZnVuY3Rpb24oKXt9LGdsb2JhbEV2YWw6ZnVuY3Rpb24oYil7YiYmai50ZXN0KGIpJiYoYS5leGVjU2NyaXB0fHxmdW5jdGlvbihiKXthLmV2YWwuY2FsbChhLGIpfSkoYil9LGNhbWVsQ2FzZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5yZXBsYWNlKHcsIm1zLSIpLnJlcGxhY2Uodix4KX0sbm9kZU5hbWU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlTmFtZSYmYS5ub2RlTmFtZS50b1VwcGVyQ2FzZSgpPT09Yi50b1VwcGVyQ2FzZSgpfSxlYWNoOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZixnPTAsaD1hLmxlbmd0aCxpPWg9PT1ifHxlLmlzRnVuY3Rpb24oYSk7aWYoZCl7aWYoaSl7Zm9yKGYgaW4gYSlpZihjLmFwcGx5KGFbZl0sZCk9PT0hMSlicmVha31lbHNlIGZvcig7ZzxoOylpZihjLmFwcGx5KGFbZysrXSxkKT09PSExKWJyZWFrfWVsc2UgaWYoaSl7Zm9yKGYgaW4gYSlpZihjLmNhbGwoYVtmXSxmLGFbZl0pPT09ITEpYnJlYWt9ZWxzZSBmb3IoO2c8aDspaWYoYy5jYWxsKGFbZ10sZyxhW2crK10pPT09ITEpYnJlYWs7cmV0dXJuIGF9LHRyaW06Rz9mdW5jdGlvbihhKXtyZXR1cm4gYT09bnVsbD8iIjpHLmNhbGwoYSl9OmZ1bmN0aW9uKGEpe3JldHVybiBhPT1udWxsPyIiOihhKyIiKS5yZXBsYWNlKGssIiIpLnJlcGxhY2UobCwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihhLGIpe3ZhciBjPWJ8fFtdO2lmKGEhPW51bGwpe3ZhciBkPWUudHlwZShhKTthLmxlbmd0aD09bnVsbHx8ZD09PSJzdHJpbmcifHxkPT09ImZ1bmN0aW9uInx8ZD09PSJyZWdleHAifHxlLmlzV2luZG93KGEpP0UuY2FsbChjLGEpOmUubWVyZ2UoYyxhKX1yZXR1cm4gY30saW5BcnJheTpmdW5jdGlvbihhLGIsYyl7dmFyIGQ7aWYoYil7aWYoSClyZXR1cm4gSC5jYWxsKGIsYSxjKTtkPWIubGVuZ3RoLGM9Yz9jPDA/TWF0aC5tYXgoMCxkK2MpOmM6MDtmb3IoO2M8ZDtjKyspaWYoYyBpbiBiJiZiW2NdPT09YSlyZXR1cm4gY31yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oYSxjKXt2YXIgZD1hLmxlbmd0aCxlPTA7aWYodHlwZW9mIGMubGVuZ3RoPT0ibnVtYmVyIilmb3IodmFyIGY9Yy5sZW5ndGg7ZTxmO2UrKylhW2QrK109Y1tlXTtlbHNlIHdoaWxlKGNbZV0hPT1iKWFbZCsrXT1jW2UrK107YS5sZW5ndGg9ZDtyZXR1cm4gYX0sZ3JlcDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9W10sZTtjPSEhYztmb3IodmFyIGY9MCxnPWEubGVuZ3RoO2Y8ZztmKyspZT0hIWIoYVtmXSxmKSxjIT09ZSYmZC5wdXNoKGFbZl0pO3JldHVybiBkfSxtYXA6ZnVuY3Rpb24oYSxjLGQpe3ZhciBmLGcsaD1bXSxpPTAsaj1hLmxlbmd0aCxrPWEgaW5zdGFuY2VvZiBlfHxqIT09YiYmdHlwZW9mIGo9PSJudW1iZXIiJiYoaj4wJiZhWzBdJiZhW2otMV18fGo9PT0wfHxlLmlzQXJyYXkoYSkpO2lmKGspZm9yKDtpPGo7aSsrKWY9YyhhW2ldLGksZCksZiE9bnVsbCYmKGhbaC5sZW5ndGhdPWYpO2Vsc2UgZm9yKGcgaW4gYSlmPWMoYVtnXSxnLGQpLGYhPW51bGwmJihoW2gubGVuZ3RoXT1mKTtyZXR1cm4gaC5jb25jYXQuYXBwbHkoW10saCl9LGd1aWQ6MSxwcm94eTpmdW5jdGlvbihhLGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIil7dmFyIGQ9YVtjXTtjPWEsYT1kfWlmKCFlLmlzRnVuY3Rpb24oYSkpcmV0dXJuIGI7dmFyIGY9Ri5jYWxsKGFyZ3VtZW50cywyKSxnPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYXBwbHkoYyxmLmNvbmNhdChGLmNhbGwoYXJndW1lbnRzKSkpfTtnLmd1aWQ9YS5ndWlkPWEuZ3VpZHx8Zy5ndWlkfHxlLmd1aWQrKztyZXR1cm4gZ30sYWNjZXNzOmZ1bmN0aW9uKGEsYyxkLGYsZyxoLGkpe3ZhciBqLGs9ZD09bnVsbCxsPTAsbT1hLmxlbmd0aDtpZihkJiZ0eXBlb2YgZD09Im9iamVjdCIpe2ZvcihsIGluIGQpZS5hY2Nlc3MoYSxjLGwsZFtsXSwxLGgsZik7Zz0xfWVsc2UgaWYoZiE9PWIpe2o9aT09PWImJmUuaXNGdW5jdGlvbihmKSxrJiYoaj8oaj1jLGM9ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBqLmNhbGwoZShhKSxjKX0pOihjLmNhbGwoYSxmKSxjPW51bGwpKTtpZihjKWZvcig7bDxtO2wrKyljKGFbbF0sZCxqP2YuY2FsbChhW2xdLGwsYyhhW2xdLGQpKTpmLGkpO2c9MX1yZXR1cm4gZz9hOms/Yy5jYWxsKGEpOm0/YyhhWzBdLGQpOmh9LG5vdzpmdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfSx1YU1hdGNoOmZ1bmN0aW9uKGEpe2E9YS50b0xvd2VyQ2FzZSgpO3ZhciBiPXIuZXhlYyhhKXx8cy5leGVjKGEpfHx0LmV4ZWMoYSl8fGEuaW5kZXhPZigiY29tcGF0aWJsZSIpPDAmJnUuZXhlYyhhKXx8W107cmV0dXJue2Jyb3dzZXI6YlsxXXx8IiIsdmVyc2lvbjpiWzJdfHwiMCJ9fSxzdWI6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKGIsYyl7cmV0dXJuIG5ldyBhLmZuLmluaXQoYixjKX1lLmV4dGVuZCghMCxhLHRoaXMpLGEuc3VwZXJjbGFzcz10aGlzLGEuZm49YS5wcm90b3R5cGU9dGhpcygpLGEuZm4uY29uc3RydWN0b3I9YSxhLnN1Yj10aGlzLnN1YixhLmZuLmluaXQ9ZnVuY3Rpb24oZCxmKXtmJiZmIGluc3RhbmNlb2YgZSYmIShmIGluc3RhbmNlb2YgYSkmJihmPWEoZikpO3JldHVybiBlLmZuLmluaXQuY2FsbCh0aGlzLGQsZixiKX0sYS5mbi5pbml0LnByb3RvdHlwZT1hLmZuO3ZhciBiPWEoYyk7cmV0dXJuIGF9LGJyb3dzZXI6e319KSxlLmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtJWyJbb2JqZWN0ICIrYisiXSJdPWIudG9Mb3dlckNhc2UoKX0pLHo9ZS51YU1hdGNoKHkpLHouYnJvd3NlciYmKGUuYnJvd3Nlclt6LmJyb3dzZXJdPSEwLGUuYnJvd3Nlci52ZXJzaW9uPXoudmVyc2lvbiksZS5icm93c2VyLndlYmtpdCYmKGUuYnJvd3Nlci5zYWZhcmk9ITApLGoudGVzdCgiw4IgIikmJihrPS9eW1xzXHhBMF0rLyxsPS9bXHNceEEwXSskLyksaD1lKGMpLGMuYWRkRXZlbnRMaXN0ZW5lcj9CPWZ1bmN0aW9uKCl7Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixCLCExKSxlLnJlYWR5KCl9OmMuYXR0YWNoRXZlbnQmJihCPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPT09ImNvbXBsZXRlIiYmKGMuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQiksZS5yZWFkeSgpKX0pO3JldHVybiBlfSgpLGc9e307Zi5DYWxsYmFja3M9ZnVuY3Rpb24oYSl7YT1hP2dbYV18fGgoYSk6e307dmFyIGM9W10sZD1bXSxlLGksaixrLGwsbSxuPWZ1bmN0aW9uKGIpe3ZhciBkLGUsZyxoLGk7Zm9yKGQ9MCxlPWIubGVuZ3RoO2Q8ZTtkKyspZz1iW2RdLGg9Zi50eXBlKGcpLGg9PT0iYXJyYXkiP24oZyk6aD09PSJmdW5jdGlvbiImJighYS51bmlxdWV8fCFwLmhhcyhnKSkmJmMucHVzaChnKX0sbz1mdW5jdGlvbihiLGYpe2Y9Znx8W10sZT0hYS5tZW1vcnl8fFtiLGZdLGk9ITAsaj0hMCxtPWt8fDAsaz0wLGw9Yy5sZW5ndGg7Zm9yKDtjJiZtPGw7bSsrKWlmKGNbbV0uYXBwbHkoYixmKT09PSExJiZhLnN0b3BPbkZhbHNlKXtlPSEwO2JyZWFrfWo9ITEsYyYmKGEub25jZT9lPT09ITA/cC5kaXNhYmxlKCk6Yz1bXTpkJiZkLmxlbmd0aCYmKGU9ZC5zaGlmdCgpLHAuZmlyZVdpdGgoZVswXSxlWzFdKSkpfSxwPXthZGQ6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYT1jLmxlbmd0aDtuKGFyZ3VtZW50cyksaj9sPWMubGVuZ3RoOmUmJmUhPT0hMCYmKGs9YSxvKGVbMF0sZVsxXSkpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtpZihjKXt2YXIgYj1hcmd1bWVudHMsZD0wLGU9Yi5sZW5ndGg7Zm9yKDtkPGU7ZCsrKWZvcih2YXIgZj0wO2Y8Yy5sZW5ndGg7ZisrKWlmKGJbZF09PT1jW2ZdKXtqJiZmPD1sJiYobC0tLGY8PW0mJm0tLSksYy5zcGxpY2UoZi0tLDEpO2lmKGEudW5pcXVlKWJyZWFrfX1yZXR1cm4gdGhpc30saGFzOmZ1bmN0aW9uKGEpe2lmKGMpe3ZhciBiPTAsZD1jLmxlbmd0aDtmb3IoO2I8ZDtiKyspaWYoYT09PWNbYl0pcmV0dXJuITB9cmV0dXJuITF9LGVtcHR5OmZ1bmN0aW9uKCl7Yz1bXTtyZXR1cm4gdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe2M9ZD1lPWI7cmV0dXJuIHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWN9LGxvY2s6ZnVuY3Rpb24oKXtkPWIsKCFlfHxlPT09ITApJiZwLmRpc2FibGUoKTtyZXR1cm4gdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWR9LGZpcmVXaXRoOmZ1bmN0aW9uKGIsYyl7ZCYmKGo/YS5vbmNlfHxkLnB1c2goW2IsY10pOighYS5vbmNlfHwhZSkmJm8oYixjKSk7cmV0dXJuIHRoaXN9LGZpcmU6ZnVuY3Rpb24oKXtwLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdGhpc30sZmlyZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hIWl9fTtyZXR1cm4gcH07dmFyIGk9W10uc2xpY2U7Zi5leHRlbmQoe0RlZmVycmVkOmZ1bmN0aW9uKGEpe3ZhciBiPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGM9Zi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksZD1mLkNhbGxiYWNrcygibWVtb3J5IiksZT0icGVuZGluZyIsZz17cmVzb2x2ZTpiLHJlamVjdDpjLG5vdGlmeTpkfSxoPXtkb25lOmIuYWRkLGZhaWw6Yy5hZGQscHJvZ3Jlc3M6ZC5hZGQsc3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gZX0saXNSZXNvbHZlZDpiLmZpcmVkLGlzUmVqZWN0ZWQ6Yy5maXJlZCx0aGVuOmZ1bmN0aW9uKGEsYixjKXtpLmRvbmUoYSkuZmFpbChiKS5wcm9ncmVzcyhjKTtyZXR1cm4gdGhpc30sYWx3YXlzOmZ1bmN0aW9uKCl7aS5kb25lLmFwcGx5KGksYXJndW1lbnRzKS5mYWlsLmFwcGx5KGksYXJndW1lbnRzKTtyZXR1cm4gdGhpc30scGlwZTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuRGVmZXJyZWQoZnVuY3Rpb24oZCl7Zi5lYWNoKHtkb25lOlthLCJyZXNvbHZlIl0sZmFpbDpbYiwicmVqZWN0Il0scHJvZ3Jlc3M6W2MsIm5vdGlmeSJdfSxmdW5jdGlvbihhLGIpe3ZhciBjPWJbMF0sZT1iWzFdLGc7Zi5pc0Z1bmN0aW9uKGMpP2lbYV0oZnVuY3Rpb24oKXtnPWMuYXBwbHkodGhpcyxhcmd1bWVudHMpLGcmJmYuaXNGdW5jdGlvbihnLnByb21pc2UpP2cucHJvbWlzZSgpLnRoZW4oZC5yZXNvbHZlLGQucmVqZWN0LGQubm90aWZ5KTpkW2UrIldpdGgiXSh0aGlzPT09aT9kOnRoaXMsW2ddKX0pOmlbYV0oZFtlXSl9KX0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihhKXtpZihhPT1udWxsKWE9aDtlbHNlIGZvcih2YXIgYiBpbiBoKWFbYl09aFtiXTtyZXR1cm4gYX19LGk9aC5wcm9taXNlKHt9KSxqO2ZvcihqIGluIGcpaVtqXT1nW2pdLmZpcmUsaVtqKyJXaXRoIl09Z1tqXS5maXJlV2l0aDtpLmRvbmUoZnVuY3Rpb24oKXtlPSJyZXNvbHZlZCJ9LGMuZGlzYWJsZSxkLmxvY2spLmZhaWwoZnVuY3Rpb24oKXtlPSJyZWplY3RlZCJ9LGIuZGlzYWJsZSxkLmxvY2spLGEmJmEuY2FsbChpLGkpO3JldHVybiBpfSx3aGVuOmZ1bmN0aW9uKGEpe2Z1bmN0aW9uIG0oYSl7cmV0dXJuIGZ1bmN0aW9uKGIpe2VbYV09YXJndW1lbnRzLmxlbmd0aD4xP2kuY2FsbChhcmd1bWVudHMsMCk6YixqLm5vdGlmeVdpdGgoayxlKX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7YlthXT1hcmd1bWVudHMubGVuZ3RoPjE/aS5jYWxsKGFyZ3VtZW50cywwKTpjLC0tZ3x8ai5yZXNvbHZlV2l0aChqLGIpfX12YXIgYj1pLmNhbGwoYXJndW1lbnRzLDApLGM9MCxkPWIubGVuZ3RoLGU9QXJyYXkoZCksZz1kLGg9ZCxqPWQ8PTEmJmEmJmYuaXNGdW5jdGlvbihhLnByb21pc2UpP2E6Zi5EZWZlcnJlZCgpLGs9ai5wcm9taXNlKCk7aWYoZD4xKXtmb3IoO2M8ZDtjKyspYltjXSYmYltjXS5wcm9taXNlJiZmLmlzRnVuY3Rpb24oYltjXS5wcm9taXNlKT9iW2NdLnByb21pc2UoKS50aGVuKGwoYyksai5yZWplY3QsbShjKSk6LS1nO2d8fGoucmVzb2x2ZVdpdGgoaixiKX1lbHNlIGohPT1hJiZqLnJlc29sdmVXaXRoKGosZD9bYV06W10pO3JldHVybiBrfX0pLGYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciBiLGQsZSxnLGgsaSxqLGssbCxtLG4sbyxwPWMuY3JlYXRlRWxlbWVudCgiZGl2IikscT1jLmRvY3VtZW50RWxlbWVudDtwLnNldEF0dHJpYnV0ZSgiY2xhc3NOYW1lIiwidCIpLHAuaW5uZXJIVE1MPSIgICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnIHN0eWxlPSd0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNTU7Jz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsZD1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIiksZT1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIWR8fCFkLmxlbmd0aHx8IWUpcmV0dXJue307Zz1jLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLGg9Zy5hcHBlbmRDaGlsZChjLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxpPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sYj17bGVhZGluZ1doaXRlc3BhY2U6cC5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChlLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ZS5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNTUvLnRlc3QoZS5zdHlsZS5vcGFjaXR5KSxjc3NGbG9hdDohIWUuc3R5bGUuY3NzRmxvYXQsY2hlY2tPbjppLnZhbHVlPT09Im9uIixvcHRTZWxlY3RlZDpoLnNlbGVjdGVkLGdldFNldEF0dHJpYnV0ZTpwLmNsYXNzTmFtZSE9PSJ0IixlbmN0eXBlOiEhYy5jcmVhdGVFbGVtZW50KCJmb3JtIikuZW5jdHlwZSxodG1sNUNsb25lOmMuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwhPT0iPDpuYXY+PC86bmF2PiIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwLHBpeGVsTWFyZ2luOiEwfSxmLmJveE1vZGVsPWIuYm94TW9kZWw9Yy5jb21wYXRNb2RlPT09IkNTUzFDb21wYXQiLGkuY2hlY2tlZD0hMCxiLm5vQ2xvbmVDaGVja2VkPWkuY2xvbmVOb2RlKCEwKS5jaGVja2VkLGcuZGlzYWJsZWQ9ITAsYi5vcHREaXNhYmxlZD0haC5kaXNhYmxlZDt0cnl7ZGVsZXRlIHAudGVzdH1jYXRjaChyKXtiLmRlbGV0ZUV4cGFuZG89ITF9IXAuYWRkRXZlbnRMaXN0ZW5lciYmcC5hdHRhY2hFdmVudCYmcC5maXJlRXZlbnQmJihwLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixmdW5jdGlvbigpe2Iubm9DbG9uZUV2ZW50PSExfSkscC5jbG9uZU5vZGUoITApLmZpcmVFdmVudCgib25jbGljayIpKSxpPWMuY3JlYXRlRWxlbWVudCgiaW5wdXQiKSxpLnZhbHVlPSJ0IixpLnNldEF0dHJpYnV0ZSgidHlwZSIsInJhZGlvIiksYi5yYWRpb1ZhbHVlPWkudmFsdWU9PT0idCIsaS5zZXRBdHRyaWJ1dGUoImNoZWNrZWQiLCJjaGVja2VkIiksaS5zZXRBdHRyaWJ1dGUoIm5hbWUiLCJ0IikscC5hcHBlbmRDaGlsZChpKSxqPWMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGouYXBwZW5kQ2hpbGQocC5sYXN0Q2hpbGQpLGIuY2hlY2tDbG9uZT1qLmNsb25lTm9kZSghMCkuY2xvbmVOb2RlKCEwKS5sYXN0Q2hpbGQuY2hlY2tlZCxiLmFwcGVuZENoZWNrZWQ9aS5jaGVja2VkLGoucmVtb3ZlQ2hpbGQoaSksai5hcHBlbmRDaGlsZChwKTtpZihwLmF0dGFjaEV2ZW50KWZvcihuIGlue3N1Ym1pdDoxLGNoYW5nZToxLGZvY3VzaW46MX0pbT0ib24iK24sbz1tIGluIHAsb3x8KHAuc2V0QXR0cmlidXRlKG0sInJldHVybjsiKSxvPXR5cGVvZiBwW21dPT0iZnVuY3Rpb24iKSxiW24rIkJ1YmJsZXMiXT1vO2oucmVtb3ZlQ2hpbGQocCksaj1nPWg9cD1pPW51bGwsZihmdW5jdGlvbigpe3ZhciBkLGUsZyxoLGksaixsLG0sbixxLHIscyx0LHU9Yy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdOyF1fHwobT0xLHQ9InBhZGRpbmc6MDttYXJnaW46MDtib3JkZXI6IixyPSJwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDtsZWZ0OjA7d2lkdGg6MXB4O2hlaWdodDoxcHg7IixzPXQrIjA7dmlzaWJpbGl0eTpoaWRkZW47IixuPSJzdHlsZT0nIityK3QrIjVweCBzb2xpZCAjMDAwOyIscT0iPGRpdiAiK24rImRpc3BsYXk6YmxvY2s7Jz48ZGl2IHN0eWxlPSciK3QrIjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47Jz48L2Rpdj48L2Rpdj4iKyI8dGFibGUgIituKyInIGNlbGxwYWRkaW5nPScwJyBjZWxsc3BhY2luZz0nMCc+IisiPHRyPjx0ZD48L3RkPjwvdHI+PC90YWJsZT4iLGQ9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxkLnN0eWxlLmNzc1RleHQ9cysid2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoiK20rInB4Iix1Lmluc2VydEJlZm9yZShkLHUuZmlyc3RDaGlsZCkscD1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQuYXBwZW5kQ2hpbGQocCkscC5pbm5lckhUTUw9Ijx0YWJsZT48dHI+PHRkIHN0eWxlPSciK3QrIjA7ZGlzcGxheTpub25lJz48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixrPXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksbz1rWzBdLm9mZnNldEhlaWdodD09PTAsa1swXS5zdHlsZS5kaXNwbGF5PSIiLGtbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsYi5yZWxpYWJsZUhpZGRlbk9mZnNldHM9byYma1swXS5vZmZzZXRIZWlnaHQ9PT0wLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKHAuaW5uZXJIVE1MPSIiLGw9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSxsLnN0eWxlLndpZHRoPSIwIixsLnN0eWxlLm1hcmdpblJpZ2h0PSIwIixwLnN0eWxlLndpZHRoPSIycHgiLHAuYXBwZW5kQ2hpbGQobCksYi5yZWxpYWJsZU1hcmdpblJpZ2h0PShwYXJzZUludCgoYS5nZXRDb21wdXRlZFN0eWxlKGwsbnVsbCl8fHttYXJnaW5SaWdodDowfSkubWFyZ2luUmlnaHQsMTApfHwwKT09PTApLHR5cGVvZiBwLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYocC5pbm5lckhUTUw9IiIscC5zdHlsZS53aWR0aD1wLnN0eWxlLnBhZGRpbmc9IjFweCIscC5zdHlsZS5ib3JkZXI9MCxwLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLHAuc3R5bGUuZGlzcGxheT0iaW5saW5lIixwLnN0eWxlLnpvb209MSxiLmlubGluZUJsb2NrTmVlZHNMYXlvdXQ9cC5vZmZzZXRXaWR0aD09PTMscC5zdHlsZS5kaXNwbGF5PSJibG9jayIscC5zdHlsZS5vdmVyZmxvdz0idmlzaWJsZSIscC5pbm5lckhUTUw9IjxkaXYgc3R5bGU9J3dpZHRoOjVweDsnPjwvZGl2PiIsYi5zaHJpbmtXcmFwQmxvY2tzPXAub2Zmc2V0V2lkdGghPT0zKSxwLnN0eWxlLmNzc1RleHQ9citzLHAuaW5uZXJIVE1MPXEsZT1wLmZpcnN0Q2hpbGQsZz1lLmZpcnN0Q2hpbGQsaT1lLm5leHRTaWJsaW5nLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZCxqPXtkb2VzTm90QWRkQm9yZGVyOmcub2Zmc2V0VG9wIT09NSxkb2VzQWRkQm9yZGVyRm9yVGFibGVBbmRDZWxsczppLm9mZnNldFRvcD09PTV9LGcuc3R5bGUucG9zaXRpb249ImZpeGVkIixnLnN0eWxlLnRvcD0iMjBweCIsai5maXhlZFBvc2l0aW9uPWcub2Zmc2V0VG9wPT09MjB8fGcub2Zmc2V0VG9wPT09MTUsZy5zdHlsZS5wb3NpdGlvbj1nLnN0eWxlLnRvcD0iIixlLnN0eWxlLm92ZXJmbG93PSJoaWRkZW4iLGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIixqLnN1YnRyYWN0c0JvcmRlckZvck92ZXJmbG93Tm90VmlzaWJsZT1nLm9mZnNldFRvcD09PS01LGouZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQ9dS5vZmZzZXRUb3AhPT1tLGEuZ2V0Q29tcHV0ZWRTdHlsZSYmKHAuc3R5bGUubWFyZ2luVG9wPSIxJSIsYi5waXhlbE1hcmdpbj0oYS5nZXRDb21wdXRlZFN0eWxlKHAsbnVsbCl8fHttYXJnaW5Ub3A6MH0pLm1hcmdpblRvcCE9PSIxJSIpLHR5cGVvZiBkLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYoZC5zdHlsZS56b29tPTEpLHUucmVtb3ZlQ2hpbGQoZCksbD1wPWQ9bnVsbCxmLmV4dGVuZChiLGopKX0pO3JldHVybiBifSgpO3ZhciBqPS9eKD86XHsuKlx9fFxbLipcXSkkLyxrPS8oW0EtWl0pL2c7Zi5leHRlbmQoe2NhY2hlOnt9LHV1aWQ6MCxleHBhbmRvOiJqUXVlcnkiKyhmLmZuLmpxdWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9iamVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6ITB9LGhhc0RhdGE6ZnVuY3Rpb24oYSl7YT1hLm5vZGVUeXBlP2YuY2FjaGVbYVtmLmV4cGFuZG9dXTphW2YuZXhwYW5kb107cmV0dXJuISFhJiYhbShhKX0sZGF0YTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWYuYWNjZXB0RGF0YShhKSl7dmFyIGcsaCxpLGo9Zi5leHBhbmRvLGs9dHlwZW9mIGM9PSJzdHJpbmciLGw9YS5ub2RlVHlwZSxtPWw/Zi5jYWNoZTphLG49bD9hW2pdOmFbal0mJmosbz1jPT09ImV2ZW50cyI7aWYoKCFufHwhbVtuXXx8IW8mJiFlJiYhbVtuXS5kYXRhKSYmayYmZD09PWIpcmV0dXJuO258fChsP2Fbal09bj0rK2YudXVpZDpuPWopLG1bbl18fChtW25dPXt9LGx8fChtW25dLnRvSlNPTj1mLm5vb3ApKTtpZih0eXBlb2YgYz09Im9iamVjdCJ8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWU/bVtuXT1mLmV4dGVuZChtW25dLGMpOm1bbl0uZGF0YT1mLmV4dGVuZChtW25dLmRhdGEsYyk7Zz1oPW1bbl0sZXx8KGguZGF0YXx8KGguZGF0YT17fSksaD1oLmRhdGEpLGQhPT1iJiYoaFtmLmNhbWVsQ2FzZShjKV09ZCk7aWYobyYmIWhbY10pcmV0dXJuIGcuZXZlbnRzO2s/KGk9aFtjXSxpPT1udWxsJiYoaT1oW2YuY2FtZWxDYXNlKGMpXSkpOmk9aDtyZXR1cm4gaX19LHJlbW92ZURhdGE6ZnVuY3Rpb24oYSxiLGMpe2lmKCEhZi5hY2NlcHREYXRhKGEpKXt2YXIgZCxlLGcsaD1mLmV4cGFuZG8saT1hLm5vZGVUeXBlLGo9aT9mLmNhY2hlOmEsaz1pP2FbaF06aDtpZighaltrXSlyZXR1cm47aWYoYil7ZD1jP2pba106altrXS5kYXRhO2lmKGQpe2YuaXNBcnJheShiKXx8KGIgaW4gZD9iPVtiXTooYj1mLmNhbWVsQ2FzZShiKSxiIGluIGQ/Yj1bYl06Yj1iLnNwbGl0KCIgIikpKTtmb3IoZT0wLGc9Yi5sZW5ndGg7ZTxnO2UrKylkZWxldGUgZFtiW2VdXTtpZighKGM/bTpmLmlzRW1wdHlPYmplY3QpKGQpKXJldHVybn19aWYoIWMpe2RlbGV0ZSBqW2tdLmRhdGE7aWYoIW0oaltrXSkpcmV0dXJufWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvfHwhai5zZXRJbnRlcnZhbD9kZWxldGUgaltrXTpqW2tdPW51bGwsaSYmKGYuc3VwcG9ydC5kZWxldGVFeHBhbmRvP2RlbGV0ZSBhW2hdOmEucmVtb3ZlQXR0cmlidXRlP2EucmVtb3ZlQXR0cmlidXRlKGgpOmFbaF09bnVsbCl9fSxfZGF0YTpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGF0YShhLGIsYywhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oYSl7aWYoYS5ub2RlTmFtZSl7dmFyIGI9Zi5ub0RhdGFbYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZihiKXJldHVybiBiIT09ITAmJmEuZ2V0QXR0cmlidXRlKCJjbGFzc2lkIik9PT1ifXJldHVybiEwfX0pLGYuZm4uZXh0ZW5kKHtkYXRhOmZ1bmN0aW9uKGEsYyl7dmFyIGQsZSxnLGgsaSxqPXRoaXNbMF0saz0wLG09bnVsbDtpZihhPT09Yil7aWYodGhpcy5sZW5ndGgpe209Zi5kYXRhKGopO2lmKGoubm9kZVR5cGU9PT0xJiYhZi5fZGF0YShqLCJwYXJzZWRBdHRycyIpKXtnPWouYXR0cmlidXRlcztmb3IoaT1nLmxlbmd0aDtrPGk7aysrKWg9Z1trXS5uYW1lLGguaW5kZXhPZigiZGF0YS0iKT09PTAmJihoPWYuY2FtZWxDYXNlKGguc3Vic3RyaW5nKDUpKSxsKGosaCxtW2hdKSk7Zi5fZGF0YShqLCJwYXJzZWRBdHRycyIsITApfX1yZXR1cm4gbX1pZih0eXBlb2YgYT09Im9iamVjdCIpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe2YuZGF0YSh0aGlzLGEpfSk7ZD1hLnNwbGl0KCIuIiwyKSxkWzFdPWRbMV0/Ii4iK2RbMV06IiIsZT1kWzFdKyIhIjtyZXR1cm4gZi5hY2Nlc3ModGhpcyxmdW5jdGlvbihjKXtpZihjPT09Yil7bT10aGlzLnRyaWdnZXJIYW5kbGVyKCJnZXREYXRhIitlLFtkWzBdXSksbT09PWImJmomJihtPWYuZGF0YShqLGEpLG09bChqLGEsbSkpO3JldHVybiBtPT09YiYmZFsxXT90aGlzLmRhdGEoZFswXSk6bX1kWzFdPWMsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKTtiLnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitlLGQpLGYuZGF0YSh0aGlzLGEsYyksYi50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIrZSxkKX0pfSxudWxsLGMsYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITEpfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZURhdGEodGhpcyxhKX0pfX0pLGYuZXh0ZW5kKHtfbWFyazpmdW5jdGlvbihhLGIpe2EmJihiPShifHwiZngiKSsibWFyayIsZi5fZGF0YShhLGIsKGYuX2RhdGEoYSxiKXx8MCkrMSkpfSxfdW5tYXJrOmZ1bmN0aW9uKGEsYixjKXthIT09ITAmJihjPWIsYj1hLGE9ITEpO2lmKGIpe2M9Y3x8ImZ4Ijt2YXIgZD1jKyJtYXJrIixlPWE/MDooZi5fZGF0YShiLGQpfHwxKS0xO2U/Zi5fZGF0YShiLGQsZSk6KGYucmVtb3ZlRGF0YShiLGQsITApLG4oYixjLCJtYXJrIikpfX0scXVldWU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkO2lmKGEpe2I9KGJ8fCJmeCIpKyJxdWV1ZSIsZD1mLl9kYXRhKGEsYiksYyYmKCFkfHxmLmlzQXJyYXkoYyk/ZD1mLl9kYXRhKGEsYixmLm1ha2VBcnJheShjKSk6ZC5wdXNoKGMpKTtyZXR1cm4gZHx8W119fSxkZXF1ZXVlOmZ1bmN0aW9uKGEsYil7Yj1ifHwiZngiO3ZhciBjPWYucXVldWUoYSxiKSxkPWMuc2hpZnQoKSxlPXt9O2Q9PT0iaW5wcm9ncmVzcyImJihkPWMuc2hpZnQoKSksZCYmKGI9PT0iZngiJiZjLnVuc2hpZnQoImlucHJvZ3Jlc3MiKSxmLl9kYXRhKGEsYisiLnJ1biIsZSksZC5jYWxsKGEsZnVuY3Rpb24oKXtmLmRlcXVldWUoYSxiKX0sZSkpLGMubGVuZ3RofHwoZi5yZW1vdmVEYXRhKGEsYisicXVldWUgIitiKyIucnVuIiwhMCksbihhLGIsInF1ZXVlIikpfX0pLGYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihhLGMpe3ZhciBkPTI7dHlwZW9mIGEhPSJzdHJpbmciJiYoYz1hLGE9ImZ4IixkLS0pO2lmKGFyZ3VtZW50cy5sZW5ndGg8ZClyZXR1cm4gZi5xdWV1ZSh0aGlzWzBdLGEpO3JldHVybiBjPT09Yj90aGlzOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWYucXVldWUodGhpcyxhLGMpO2E9PT0iZngiJiZiWzBdIT09ImlucHJvZ3Jlc3MiJiZmLmRlcXVldWUodGhpcyxhKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmRlcXVldWUodGhpcyxhKX0pfSxkZWxheTpmdW5jdGlvbihhLGIpe2E9Zi5meD9mLmZ4LnNwZWVkc1thXXx8YTphLGI9Ynx8ImZ4IjtyZXR1cm4gdGhpcy5xdWV1ZShiLGZ1bmN0aW9uKGIsYyl7dmFyIGQ9c2V0VGltZW91dChiLGEpO2Muc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChkKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5xdWV1ZShhfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihhLGMpe2Z1bmN0aW9uIG0oKXstLWh8fGQucmVzb2x2ZVdpdGgoZSxbZV0pfXR5cGVvZiBhIT0ic3RyaW5nIiYmKGM9YSxhPWIpLGE9YXx8ImZ4Ijt2YXIgZD1mLkRlZmVycmVkKCksZT10aGlzLGc9ZS5sZW5ndGgsaD0xLGk9YSsiZGVmZXIiLGo9YSsicXVldWUiLGs9YSsibWFyayIsbDt3aGlsZShnLS0paWYobD1mLmRhdGEoZVtnXSxpLGIsITApfHwoZi5kYXRhKGVbZ10saixiLCEwKXx8Zi5kYXRhKGVbZ10sayxiLCEwKSkmJmYuZGF0YShlW2ddLGksZi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksITApKWgrKyxsLmFkZChtKTttKCk7cmV0dXJuIGQucHJvbWlzZShjKX19KTt2YXIgbz0vW1xuXHRccl0vZyxwPS9ccysvLHE9L1xyL2cscj0vXig/OmJ1dHRvbnxpbnB1dCkkL2kscz0vXig/OmJ1dHRvbnxpbnB1dHxvYmplY3R8c2VsZWN0fHRleHRhcmVhKSQvaSx0PS9eYSg/OnJlYSk/JC9pLHU9L14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2ksdj1mLnN1cHBvcnQuZ2V0U2V0QXR0cmlidXRlLHcseCx5O2YuZm4uZXh0ZW5kKHthdHRyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsZi5hdHRyLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVBdHRyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLnJlbW92ZUF0dHIodGhpcyxhKX0pfSxwcm9wOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGYuYWNjZXNzKHRoaXMsZi5wcm9wLGEsYixhcmd1bWVudHMubGVuZ3RoPjEpfSxyZW1vdmVQcm9wOmZ1bmN0aW9uKGEpe2E9Zi5wcm9wRml4W2FdfHxhO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt0cnl7dGhpc1thXT1iLGRlbGV0ZSB0aGlzW2FdfWNhdGNoKGMpe319KX0sYWRkQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxoLGk7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS5hZGRDbGFzcyhhLmNhbGwodGhpcyxiLHRoaXMuY2xhc3NOYW1lKSl9KTtpZihhJiZ0eXBlb2YgYT09InN0cmluZyIpe2I9YS5zcGxpdChwKTtmb3IoYz0wLGQ9dGhpcy5sZW5ndGg7YzxkO2MrKyl7ZT10aGlzW2NdO2lmKGUubm9kZVR5cGU9PT0xKWlmKCFlLmNsYXNzTmFtZSYmYi5sZW5ndGg9PT0xKWUuY2xhc3NOYW1lPWE7ZWxzZXtnPSIgIitlLmNsYXNzTmFtZSsiICI7Zm9yKGg9MCxpPWIubGVuZ3RoO2g8aTtoKyspfmcuaW5kZXhPZigiICIrYltoXSsiICIpfHwoZys9YltoXSsiICIpO2UuY2xhc3NOYW1lPWYudHJpbShnKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZyxoLGksajtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLnJlbW92ZUNsYXNzKGEuY2FsbCh0aGlzLGIsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGEmJnR5cGVvZiBhPT0ic3RyaW5nInx8YT09PWIpe2M9KGF8fCIiKS5zcGxpdChwKTtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO2lmKGcubm9kZVR5cGU9PT0xJiZnLmNsYXNzTmFtZSlpZihhKXtoPSgiICIrZy5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKG8sIiAiKTtmb3IoaT0wLGo9Yy5sZW5ndGg7aTxqO2krKyloPWgucmVwbGFjZSgiICIrY1tpXSsiICIsIiAiKTtnLmNsYXNzTmFtZT1mLnRyaW0oaCl9ZWxzZSBnLmNsYXNzTmFtZT0iIn19cmV0dXJuIHRoaXN9LHRvZ2dsZUNsYXNzOmZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEsZD10eXBlb2YgYj09ImJvb2xlYW4iO2lmKGYuaXNGdW5jdGlvbihhKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGMpe2YodGhpcykudG9nZ2xlQ2xhc3MoYS5jYWxsKHRoaXMsYyx0aGlzLmNsYXNzTmFtZSxiKSxiKX0pO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtpZihjPT09InN0cmluZyIpe3ZhciBlLGc9MCxoPWYodGhpcyksaT1iLGo9YS5zcGxpdChwKTt3aGlsZShlPWpbZysrXSlpPWQ/aTohaC5oYXNDbGFzcyhlKSxoW2k/ImFkZENsYXNzIjoicmVtb3ZlQ2xhc3MiXShlKX1lbHNlIGlmKGM9PT0idW5kZWZpbmVkInx8Yz09PSJib29sZWFuIil0aGlzLmNsYXNzTmFtZSYmZi5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIix0aGlzLmNsYXNzTmFtZSksdGhpcy5jbGFzc05hbWU9dGhpcy5jbGFzc05hbWV8fGE9PT0hMT8iIjpmLl9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iKXx8IiJ9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oYSl7dmFyIGI9IiAiK2ErIiAiLGM9MCxkPXRoaXMubGVuZ3RoO2Zvcig7YzxkO2MrKylpZih0aGlzW2NdLm5vZGVUeXBlPT09MSYmKCIgIit0aGlzW2NdLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UobywiICIpLmluZGV4T2YoYik+LTEpcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihhKXt2YXIgYyxkLGUsZz10aGlzWzBdO3tpZighIWFyZ3VtZW50cy5sZW5ndGgpe2U9Zi5pc0Z1bmN0aW9uKGEpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oZCl7dmFyIGc9Zih0aGlzKSxoO2lmKHRoaXMubm9kZVR5cGU9PT0xKXtlP2g9YS5jYWxsKHRoaXMsZCxnLnZhbCgpKTpoPWEsaD09bnVsbD9oPSIiOnR5cGVvZiBoPT0ibnVtYmVyIj9oKz0iIjpmLmlzQXJyYXkoaCkmJihoPWYubWFwKGgsZnVuY3Rpb24oYSl7cmV0dXJuIGE9PW51bGw/IiI6YSsiIn0pKSxjPWYudmFsSG9va3NbdGhpcy50eXBlXXx8Zi52YWxIb29rc1t0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldO2lmKCFjfHwhKCJzZXQiaW4gYyl8fGMuc2V0KHRoaXMsaCwidmFsdWUiKT09PWIpdGhpcy52YWx1ZT1ofX0pfWlmKGcpe2M9Zi52YWxIb29rc1tnLnR5cGVdfHxmLnZhbEhvb2tzW2cubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07aWYoYyYmImdldCJpbiBjJiYoZD1jLmdldChnLCJ2YWx1ZSIpKSE9PWIpcmV0dXJuIGQ7ZD1nLnZhbHVlO3JldHVybiB0eXBlb2YgZD09InN0cmluZyI/ZC5yZXBsYWNlKHEsIiIpOmQ9PW51bGw/IiI6ZH19fX0pLGYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiFifHxiLnNwZWNpZmllZD9hLnZhbHVlOmEudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGc9YS5zZWxlY3RlZEluZGV4LGg9W10saT1hLm9wdGlvbnMsaj1hLnR5cGU9PT0ic2VsZWN0LW9uZSI7aWYoZzwwKXJldHVybiBudWxsO2M9aj9nOjAsZD1qP2crMTppLmxlbmd0aDtmb3IoO2M8ZDtjKyspe2U9aVtjXTtpZihlLnNlbGVjdGVkJiYoZi5zdXBwb3J0Lm9wdERpc2FibGVkPyFlLmRpc2FibGVkOmUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpPT09bnVsbCkmJighZS5wYXJlbnROb2RlLmRpc2FibGVkfHwhZi5ub2RlTmFtZShlLnBhcmVudE5vZGUsIm9wdGdyb3VwIikpKXtiPWYoZSkudmFsKCk7aWYoailyZXR1cm4gYjtoLnB1c2goYil9fWlmKGomJiFoLmxlbmd0aCYmaS5sZW5ndGgpcmV0dXJuIGYoaVtnXSkudmFsKCk7cmV0dXJuIGh9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWYubWFrZUFycmF5KGIpO2YoYSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9Zi5pbkFycmF5KGYodGhpcykudmFsKCksYyk+PTB9KSxjLmxlbmd0aHx8KGEuc2VsZWN0ZWRJbmRleD0tMSk7cmV0dXJuIGN9fX0sYXR0ckZuOnt2YWw6ITAsY3NzOiEwLGh0bWw6ITAsdGV4dDohMCxkYXRhOiEwLHdpZHRoOiEwLGhlaWdodDohMCxvZmZzZXQ6ITB9LGF0dHI6ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGcsaCxpLGo9YS5ub2RlVHlwZTtpZighIWEmJmohPT0zJiZqIT09OCYmaiE9PTIpe2lmKGUmJmMgaW4gZi5hdHRyRm4pcmV0dXJuIGYoYSlbY10oZCk7aWYodHlwZW9mIGEuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gZi5wcm9wKGEsYyxkKTtpPWohPT0xfHwhZi5pc1hNTERvYyhhKSxpJiYoYz1jLnRvTG93ZXJDYXNlKCksaD1mLmF0dHJIb29rc1tjXXx8KHUudGVzdChjKT94OncpKTtpZihkIT09Yil7aWYoZD09PW51bGwpe2YucmVtb3ZlQXR0cihhLGMpO3JldHVybn1pZihoJiYic2V0ImluIGgmJmkmJihnPWguc2V0KGEsZCxjKSkhPT1iKXJldHVybiBnO2Euc2V0QXR0cmlidXRlKGMsIiIrZCk7cmV0dXJuIGR9aWYoaCYmImdldCJpbiBoJiZpJiYoZz1oLmdldChhLGMpKSE9PW51bGwpcmV0dXJuIGc7Zz1hLmdldEF0dHJpYnV0ZShjKTtyZXR1cm4gZz09PW51bGw/YjpnfX0scmVtb3ZlQXR0cjpmdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxnLGgsaT0wO2lmKGImJmEubm9kZVR5cGU9PT0xKXtkPWIudG9Mb3dlckNhc2UoKS5zcGxpdChwKSxnPWQubGVuZ3RoO2Zvcig7aTxnO2krKyllPWRbaV0sZSYmKGM9Zi5wcm9wRml4W2VdfHxlLGg9dS50ZXN0KGUpLGh8fGYuYXR0cihhLGUsIiIpLGEucmVtb3ZlQXR0cmlidXRlKHY/ZTpjKSxoJiZjIGluIGEmJihhW2NdPSExKSl9fSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihhLGIpe2lmKHIudGVzdChhLm5vZGVOYW1lKSYmYS5wYXJlbnROb2RlKWYuZXJyb3IoInR5cGUgcHJvcGVydHkgY2FuJ3QgYmUgY2hhbmdlZCIpO2Vsc2UgaWYoIWYuc3VwcG9ydC5yYWRpb1ZhbHVlJiZiPT09InJhZGlvIiYmZi5ub2RlTmFtZShhLCJpbnB1dCIpKXt2YXIgYz1hLnZhbHVlO2Euc2V0QXR0cmlidXRlKCJ0eXBlIixiKSxjJiYoYS52YWx1ZT1jKTtyZXR1cm4gYn19fSx2YWx1ZTp7Z2V0OmZ1bmN0aW9uKGEsYil7aWYodyYmZi5ub2RlTmFtZShhLCJidXR0b24iKSlyZXR1cm4gdy5nZXQoYSxiKTtyZXR1cm4gYiBpbiBhP2EudmFsdWU6bnVsbH0sc2V0OmZ1bmN0aW9uKGEsYixjKXtpZih3JiZmLm5vZGVOYW1lKGEsImJ1dHRvbiIpKXJldHVybiB3LnNldChhLGIsYyk7YS52YWx1ZT1ifX19LHByb3BGaXg6e3RhYmluZGV4OiJ0YWJJbmRleCIscmVhZG9ubHk6InJlYWRPbmx5IiwiZm9yIjoiaHRtbEZvciIsImNsYXNzIjoiY2xhc3NOYW1lIixtYXhsZW5ndGg6Im1heExlbmd0aCIsY2VsbHNwYWNpbmc6ImNlbGxTcGFjaW5nIixjZWxscGFkZGluZzoiY2VsbFBhZGRpbmciLHJvd3NwYW46InJvd1NwYW4iLGNvbHNwYW46ImNvbFNwYW4iLHVzZW1hcDoidXNlTWFwIixmcmFtZWJvcmRlcjoiZnJhbWVCb3JkZXIiLGNvbnRlbnRlZGl0YWJsZToiY29udGVudEVkaXRhYmxlIn0scHJvcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGk9YS5ub2RlVHlwZTtpZighIWEmJmkhPT0zJiZpIT09OCYmaSE9PTIpe2g9aSE9PTF8fCFmLmlzWE1MRG9jKGEpLGgmJihjPWYucHJvcEZpeFtjXXx8YyxnPWYucHJvcEhvb2tzW2NdKTtyZXR1cm4gZCE9PWI/ZyYmInNldCJpbiBnJiYoZT1nLnNldChhLGQsYykpIT09Yj9lOmFbY109ZDpnJiYiZ2V0ImluIGcmJihlPWcuZ2V0KGEsYykpIT09bnVsbD9lOmFbY119fSxwcm9wSG9va3M6e3RhYkluZGV4OntnZXQ6ZnVuY3Rpb24oYSl7dmFyIGM9YS5nZXRBdHRyaWJ1dGVOb2RlKCJ0YWJpbmRleCIpO3JldHVybiBjJiZjLnNwZWNpZmllZD9wYXJzZUludChjLnZhbHVlLDEwKTpzLnRlc3QoYS5ub2RlTmFtZSl8fHQudGVzdChhLm5vZGVOYW1lKSYmYS5ocmVmPzA6Yn19fX0pLGYuYXR0ckhvb2tzLnRhYmluZGV4PWYucHJvcEhvb2tzLnRhYkluZGV4LHg9e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkLGU9Zi5wcm9wKGEsYyk7cmV0dXJuIGU9PT0hMHx8dHlwZW9mIGUhPSJib29sZWFuIiYmKGQ9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpKSYmZC5ub2RlVmFsdWUhPT0hMT9jLnRvTG93ZXJDYXNlKCk6Yn0sc2V0OmZ1bmN0aW9uKGEsYixjKXt2YXIgZDtiPT09ITE/Zi5yZW1vdmVBdHRyKGEsYyk6KGQ9Zi5wcm9wRml4W2NdfHxjLGQgaW4gYSYmKGFbZF09ITApLGEuc2V0QXR0cmlidXRlKGMsYy50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIGN9fSx2fHwoeT17bmFtZTohMCxpZDohMCxjb29yZHM6ITB9LHc9Zi52YWxIb29rcy5idXR0b249e2dldDpmdW5jdGlvbihhLGMpe3ZhciBkO2Q9YS5nZXRBdHRyaWJ1dGVOb2RlKGMpO3JldHVybiBkJiYoeVtjXT9kLm5vZGVWYWx1ZSE9PSIiOmQuc3BlY2lmaWVkKT9kLm5vZGVWYWx1ZTpifSxzZXQ6ZnVuY3Rpb24oYSxiLGQpe3ZhciBlPWEuZ2V0QXR0cmlidXRlTm9kZShkKTtlfHwoZT1jLmNyZWF0ZUF0dHJpYnV0ZShkKSxhLnNldEF0dHJpYnV0ZU5vZGUoZSkpO3JldHVybiBlLm5vZGVWYWx1ZT1iKyIifX0sZi5hdHRySG9va3MudGFiaW5kZXguc2V0PXcuc2V0LGYuZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oYSxiKXtmLmF0dHJIb29rc1tiXT1mLmV4dGVuZChmLmF0dHJIb29rc1tiXSx7c2V0OmZ1bmN0aW9uKGEsYyl7aWYoYz09PSIiKXthLnNldEF0dHJpYnV0ZShiLCJhdXRvIik7cmV0dXJuIGN9fX0pfSksZi5hdHRySG9va3MuY29udGVudGVkaXRhYmxlPXtnZXQ6dy5nZXQsc2V0OmZ1bmN0aW9uKGEsYixjKXtiPT09IiImJihiPSJmYWxzZSIpLHcuc2V0KGEsYixjKX19KSxmLnN1cHBvcnQuaHJlZk5vcm1hbGl6ZWR8fGYuZWFjaChbImhyZWYiLCJzcmMiLCJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGEsYyl7Zi5hdHRySG9va3NbY109Zi5leHRlbmQoZi5hdHRySG9va3NbY10se2dldDpmdW5jdGlvbihhKXt2YXIgZD1hLmdldEF0dHJpYnV0ZShjLDIpO3JldHVybiBkPT09bnVsbD9iOmR9fSl9KSxmLnN1cHBvcnQuc3R5bGV8fChmLmF0dHJIb29rcy5zdHlsZT17Z2V0OmZ1bmN0aW9uKGEpe3JldHVybiBhLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKXx8Yn0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuc3R5bGUuY3NzVGV4dD0iIitifX0pLGYuc3VwcG9ydC5vcHRTZWxlY3RlZHx8KGYucHJvcEhvb2tzLnNlbGVjdGVkPWYuZXh0ZW5kKGYucHJvcEhvb2tzLnNlbGVjdGVkLHtnZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO2ImJihiLnNlbGVjdGVkSW5kZXgsYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCk7cmV0dXJuIG51bGx9fSkpLGYuc3VwcG9ydC5lbmN0eXBlfHwoZi5wcm9wRml4LmVuY3R5cGU9ImVuY29kaW5nIiksZi5zdXBwb3J0LmNoZWNrT258fGYuZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe2YudmFsSG9va3NbdGhpc109e2dldDpmdW5jdGlvbihhKXtyZXR1cm4gYS5nZXRBdHRyaWJ1dGUoInZhbHVlIik9PT1udWxsPyJvbiI6YS52YWx1ZX19fSksZi5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7Zi52YWxIb29rc1t0aGlzXT1mLmV4dGVuZChmLnZhbEhvb2tzW3RoaXNdLHtzZXQ6ZnVuY3Rpb24oYSxiKXtpZihmLmlzQXJyYXkoYikpcmV0dXJuIGEuY2hlY2tlZD1mLmluQXJyYXkoZihhKS52YWwoKSxiKT49MH19KX0pO3ZhciB6PS9eKD86dGV4dGFyZWF8aW5wdXR8c2VsZWN0KSQvaSxBPS9eKFteXC5dKik/KD86XC4oLispKT8kLyxCPS8oPzpefFxzKWhvdmVyKFwuXFMrKT9cYi8sQz0vXmtleS8sRD0vXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sRT0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sRj0vXihcdyopKD86IyhbXHdcLV0rKSk/KD86XC4oW1x3XC1dKykpPyQvLEc9ZnVuY3Rpb24oCmEpe3ZhciBiPUYuZXhlYyhhKTtiJiYoYlsxXT0oYlsxXXx8IiIpLnRvTG93ZXJDYXNlKCksYlszXT1iWzNdJiZuZXcgUmVnRXhwKCIoPzpefFxccykiK2JbM10rIig/Olxcc3wkKSIpKTtyZXR1cm4gYn0sSD1mdW5jdGlvbihhLGIpe3ZhciBjPWEuYXR0cmlidXRlc3x8e307cmV0dXJuKCFiWzFdfHxhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iWzFdKSYmKCFiWzJdfHwoYy5pZHx8e30pLnZhbHVlPT09YlsyXSkmJighYlszXXx8YlszXS50ZXN0KChjWyJjbGFzcyJdfHx7fSkudmFsdWUpKX0sST1mdW5jdGlvbihhKXtyZXR1cm4gZi5ldmVudC5zcGVjaWFsLmhvdmVyP2E6YS5yZXBsYWNlKEIsIm1vdXNlZW50ZXIkMSBtb3VzZWxlYXZlJDEiKX07Zi5ldmVudD17YWRkOmZ1bmN0aW9uKGEsYyxkLGUsZyl7dmFyIGgsaSxqLGssbCxtLG4sbyxwLHEscixzO2lmKCEoYS5ub2RlVHlwZT09PTN8fGEubm9kZVR5cGU9PT04fHwhY3x8IWR8fCEoaD1mLl9kYXRhKGEpKSkpe2QuaGFuZGxlciYmKHA9ZCxkPXAuaGFuZGxlcixnPXAuc2VsZWN0b3IpLGQuZ3VpZHx8KGQuZ3VpZD1mLmd1aWQrKyksaj1oLmV2ZW50cyxqfHwoaC5ldmVudHM9aj17fSksaT1oLmhhbmRsZSxpfHwoaC5oYW5kbGU9aT1mdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGYhPSJ1bmRlZmluZWQiJiYoIWF8fGYuZXZlbnQudHJpZ2dlcmVkIT09YS50eXBlKT9mLmV2ZW50LmRpc3BhdGNoLmFwcGx5KGkuZWxlbSxhcmd1bWVudHMpOmJ9LGkuZWxlbT1hKSxjPWYudHJpbShJKGMpKS5zcGxpdCgiICIpO2ZvcihrPTA7azxjLmxlbmd0aDtrKyspe2w9QS5leGVjKGNba10pfHxbXSxtPWxbMV0sbj0obFsyXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxtPShnP3MuZGVsZWdhdGVUeXBlOnMuYmluZFR5cGUpfHxtLHM9Zi5ldmVudC5zcGVjaWFsW21dfHx7fSxvPWYuZXh0ZW5kKHt0eXBlOm0sb3JpZ1R5cGU6bFsxXSxkYXRhOmUsaGFuZGxlcjpkLGd1aWQ6ZC5ndWlkLHNlbGVjdG9yOmcscXVpY2s6ZyYmRyhnKSxuYW1lc3BhY2U6bi5qb2luKCIuIil9LHApLHI9alttXTtpZighcil7cj1qW21dPVtdLHIuZGVsZWdhdGVDb3VudD0wO2lmKCFzLnNldHVwfHxzLnNldHVwLmNhbGwoYSxlLG4saSk9PT0hMSlhLmFkZEV2ZW50TGlzdGVuZXI/YS5hZGRFdmVudExpc3RlbmVyKG0saSwhMSk6YS5hdHRhY2hFdmVudCYmYS5hdHRhY2hFdmVudCgib24iK20saSl9cy5hZGQmJihzLmFkZC5jYWxsKGEsbyksby5oYW5kbGVyLmd1aWR8fChvLmhhbmRsZXIuZ3VpZD1kLmd1aWQpKSxnP3Iuc3BsaWNlKHIuZGVsZWdhdGVDb3VudCsrLDAsbyk6ci5wdXNoKG8pLGYuZXZlbnQuZ2xvYmFsW21dPSEwfWE9bnVsbH19LGdsb2JhbDp7fSxyZW1vdmU6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgZz1mLmhhc0RhdGEoYSkmJmYuX2RhdGEoYSksaCxpLGosayxsLG0sbixvLHAscSxyLHM7aWYoISFnJiYhIShvPWcuZXZlbnRzKSl7Yj1mLnRyaW0oSShifHwiIikpLnNwbGl0KCIgIik7Zm9yKGg9MDtoPGIubGVuZ3RoO2grKyl7aT1BLmV4ZWMoYltoXSl8fFtdLGo9az1pWzFdLGw9aVsyXTtpZighail7Zm9yKGogaW4gbylmLmV2ZW50LnJlbW92ZShhLGorYltoXSxjLGQsITApO2NvbnRpbnVlfXA9Zi5ldmVudC5zcGVjaWFsW2pdfHx7fSxqPShkP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHxqLHI9b1tqXXx8W10sbT1yLmxlbmd0aCxsPWw/bmV3IFJlZ0V4cCgiKF58XFwuKSIrbC5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLik/IikrIihcXC58JCkiKTpudWxsO2ZvcihuPTA7bjxyLmxlbmd0aDtuKyspcz1yW25dLChlfHxrPT09cy5vcmlnVHlwZSkmJighY3x8Yy5ndWlkPT09cy5ndWlkKSYmKCFsfHxsLnRlc3Qocy5uYW1lc3BhY2UpKSYmKCFkfHxkPT09cy5zZWxlY3Rvcnx8ZD09PSIqKiImJnMuc2VsZWN0b3IpJiYoci5zcGxpY2Uobi0tLDEpLHMuc2VsZWN0b3ImJnIuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGEscykpO3IubGVuZ3RoPT09MCYmbSE9PXIubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoYSxsKT09PSExKSYmZi5yZW1vdmVFdmVudChhLGosZy5oYW5kbGUpLGRlbGV0ZSBvW2pdKX1mLmlzRW1wdHlPYmplY3QobykmJihxPWcuaGFuZGxlLHEmJihxLmVsZW09bnVsbCksZi5yZW1vdmVEYXRhKGEsWyJldmVudHMiLCJoYW5kbGUiXSwhMCkpfX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKGMsZCxlLGcpe2lmKCFlfHxlLm5vZGVUeXBlIT09MyYmZS5ub2RlVHlwZSE9PTgpe3ZhciBoPWMudHlwZXx8YyxpPVtdLGosayxsLG0sbixvLHAscSxyLHM7aWYoRS50ZXN0KGgrZi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjtoLmluZGV4T2YoIiEiKT49MCYmKGg9aC5zbGljZSgwLC0xKSxrPSEwKSxoLmluZGV4T2YoIi4iKT49MCYmKGk9aC5zcGxpdCgiLiIpLGg9aS5zaGlmdCgpLGkuc29ydCgpKTtpZigoIWV8fGYuZXZlbnQuY3VzdG9tRXZlbnRbaF0pJiYhZi5ldmVudC5nbG9iYWxbaF0pcmV0dXJuO2M9dHlwZW9mIGM9PSJvYmplY3QiP2NbZi5leHBhbmRvXT9jOm5ldyBmLkV2ZW50KGgsYyk6bmV3IGYuRXZlbnQoaCksYy50eXBlPWgsYy5pc1RyaWdnZXI9ITAsYy5leGNsdXNpdmU9ayxjLm5hbWVzcGFjZT1pLmpvaW4oIi4iKSxjLm5hbWVzcGFjZV9yZT1jLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitpLmpvaW4oIlxcLig/Oi4qXFwuKT8iKSsiKFxcLnwkKSIpOm51bGwsbz1oLmluZGV4T2YoIjoiKTwwPyJvbiIraDoiIjtpZighZSl7aj1mLmNhY2hlO2ZvcihsIGluIGopaltsXS5ldmVudHMmJmpbbF0uZXZlbnRzW2hdJiZmLmV2ZW50LnRyaWdnZXIoYyxkLGpbbF0uaGFuZGxlLmVsZW0sITApO3JldHVybn1jLnJlc3VsdD1iLGMudGFyZ2V0fHwoYy50YXJnZXQ9ZSksZD1kIT1udWxsP2YubWFrZUFycmF5KGQpOltdLGQudW5zaGlmdChjKSxwPWYuZXZlbnQuc3BlY2lhbFtoXXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkoZSxkKT09PSExKXJldHVybjtyPVtbZSxwLmJpbmRUeXBlfHxoXV07aWYoIWcmJiFwLm5vQnViYmxlJiYhZi5pc1dpbmRvdyhlKSl7cz1wLmRlbGVnYXRlVHlwZXx8aCxtPUUudGVzdChzK2gpP2U6ZS5wYXJlbnROb2RlLG49bnVsbDtmb3IoO207bT1tLnBhcmVudE5vZGUpci5wdXNoKFttLHNdKSxuPW07biYmbj09PWUub3duZXJEb2N1bWVudCYmci5wdXNoKFtuLmRlZmF1bHRWaWV3fHxuLnBhcmVudFdpbmRvd3x8YSxzXSl9Zm9yKGw9MDtsPHIubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2wrKyltPXJbbF1bMF0sYy50eXBlPXJbbF1bMV0scT0oZi5fZGF0YShtLCJldmVudHMiKXx8e30pW2MudHlwZV0mJmYuX2RhdGEobSwiaGFuZGxlIikscSYmcS5hcHBseShtLGQpLHE9byYmbVtvXSxxJiZmLmFjY2VwdERhdGEobSkmJnEuYXBwbHkobSxkKT09PSExJiZjLnByZXZlbnREZWZhdWx0KCk7Yy50eXBlPWgsIWcmJiFjLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoZS5vd25lckRvY3VtZW50LGQpPT09ITEpJiYoaCE9PSJjbGljayJ8fCFmLm5vZGVOYW1lKGUsImEiKSkmJmYuYWNjZXB0RGF0YShlKSYmbyYmZVtoXSYmKGghPT0iZm9jdXMiJiZoIT09ImJsdXIifHxjLnRhcmdldC5vZmZzZXRXaWR0aCE9PTApJiYhZi5pc1dpbmRvdyhlKSYmKG49ZVtvXSxuJiYoZVtvXT1udWxsKSxmLmV2ZW50LnRyaWdnZXJlZD1oLGVbaF0oKSxmLmV2ZW50LnRyaWdnZXJlZD1iLG4mJihlW29dPW4pKTtyZXR1cm4gYy5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihjKXtjPWYuZXZlbnQuZml4KGN8fGEuZXZlbnQpO3ZhciBkPShmLl9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbYy50eXBlXXx8W10sZT1kLmRlbGVnYXRlQ291bnQsZz1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSxoPSFjLmV4Y2x1c2l2ZSYmIWMubmFtZXNwYWNlLGk9Zi5ldmVudC5zcGVjaWFsW2MudHlwZV18fHt9LGo9W10sayxsLG0sbixvLHAscSxyLHMsdCx1O2dbMF09YyxjLmRlbGVnYXRlVGFyZ2V0PXRoaXM7aWYoIWkucHJlRGlzcGF0Y2h8fGkucHJlRGlzcGF0Y2guY2FsbCh0aGlzLGMpIT09ITEpe2lmKGUmJighYy5idXR0b258fGMudHlwZSE9PSJjbGljayIpKXtuPWYodGhpcyksbi5jb250ZXh0PXRoaXMub3duZXJEb2N1bWVudHx8dGhpcztmb3IobT1jLnRhcmdldDttIT10aGlzO209bS5wYXJlbnROb2RlfHx0aGlzKWlmKG0uZGlzYWJsZWQhPT0hMCl7cD17fSxyPVtdLG5bMF09bTtmb3Ioaz0wO2s8ZTtrKyspcz1kW2tdLHQ9cy5zZWxlY3RvcixwW3RdPT09YiYmKHBbdF09cy5xdWljaz9IKG0scy5xdWljayk6bi5pcyh0KSkscFt0XSYmci5wdXNoKHMpO3IubGVuZ3RoJiZqLnB1c2goe2VsZW06bSxtYXRjaGVzOnJ9KX19ZC5sZW5ndGg+ZSYmai5wdXNoKHtlbGVtOnRoaXMsbWF0Y2hlczpkLnNsaWNlKGUpfSk7Zm9yKGs9MDtrPGoubGVuZ3RoJiYhYy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO2srKyl7cT1qW2tdLGMuY3VycmVudFRhcmdldD1xLmVsZW07Zm9yKGw9MDtsPHEubWF0Y2hlcy5sZW5ndGgmJiFjLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCk7bCsrKXtzPXEubWF0Y2hlc1tsXTtpZihofHwhYy5uYW1lc3BhY2UmJiFzLm5hbWVzcGFjZXx8Yy5uYW1lc3BhY2VfcmUmJmMubmFtZXNwYWNlX3JlLnRlc3Qocy5uYW1lc3BhY2UpKWMuZGF0YT1zLmRhdGEsYy5oYW5kbGVPYmo9cyxvPSgoZi5ldmVudC5zcGVjaWFsW3Mub3JpZ1R5cGVdfHx7fSkuaGFuZGxlfHxzLmhhbmRsZXIpLmFwcGx5KHEuZWxlbSxnKSxvIT09YiYmKGMucmVzdWx0PW8sbz09PSExJiYoYy5wcmV2ZW50RGVmYXVsdCgpLGMuc3RvcFByb3BhZ2F0aW9uKCkpKX19aS5wb3N0RGlzcGF0Y2gmJmkucG9zdERpc3BhdGNoLmNhbGwodGhpcyxjKTtyZXR1cm4gYy5yZXN1bHR9fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGEsYil7YS53aGljaD09bnVsbCYmKGEud2hpY2g9Yi5jaGFyQ29kZSE9bnVsbD9iLmNoYXJDb2RlOmIua2V5Q29kZSk7cmV0dXJuIGF9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihhLGQpe3ZhciBlLGYsZyxoPWQuYnV0dG9uLGk9ZC5mcm9tRWxlbWVudDthLnBhZ2VYPT1udWxsJiZkLmNsaWVudFghPW51bGwmJihlPWEudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGMsZj1lLmRvY3VtZW50RWxlbWVudCxnPWUuYm9keSxhLnBhZ2VYPWQuY2xpZW50WCsoZiYmZi5zY3JvbGxMZWZ0fHxnJiZnLnNjcm9sbExlZnR8fDApLShmJiZmLmNsaWVudExlZnR8fGcmJmcuY2xpZW50TGVmdHx8MCksYS5wYWdlWT1kLmNsaWVudFkrKGYmJmYuc2Nyb2xsVG9wfHxnJiZnLnNjcm9sbFRvcHx8MCktKGYmJmYuY2xpZW50VG9wfHxnJiZnLmNsaWVudFRvcHx8MCkpLCFhLnJlbGF0ZWRUYXJnZXQmJmkmJihhLnJlbGF0ZWRUYXJnZXQ9aT09PWEudGFyZ2V0P2QudG9FbGVtZW50OmkpLCFhLndoaWNoJiZoIT09YiYmKGEud2hpY2g9aCYxPzE6aCYyPzM6aCY0PzI6MCk7cmV0dXJuIGF9fSxmaXg6ZnVuY3Rpb24oYSl7aWYoYVtmLmV4cGFuZG9dKXJldHVybiBhO3ZhciBkLGUsZz1hLGg9Zi5ldmVudC5maXhIb29rc1thLnR5cGVdfHx7fSxpPWgucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQoaC5wcm9wcyk6dGhpcy5wcm9wczthPWYuRXZlbnQoZyk7Zm9yKGQ9aS5sZW5ndGg7ZDspZT1pWy0tZF0sYVtlXT1nW2VdO2EudGFyZ2V0fHwoYS50YXJnZXQ9Zy5zcmNFbGVtZW50fHxjKSxhLnRhcmdldC5ub2RlVHlwZT09PTMmJihhLnRhcmdldD1hLnRhcmdldC5wYXJlbnROb2RlKSxhLm1ldGFLZXk9PT1iJiYoYS5tZXRhS2V5PWEuY3RybEtleSk7cmV0dXJuIGguZmlsdGVyP2guZmlsdGVyKGEsZyk6YX0sc3BlY2lhbDp7cmVhZHk6e3NldHVwOmYuYmluZFJlYWR5fSxsb2FkOntub0J1YmJsZTohMH0sZm9jdXM6e2RlbGVnYXRlVHlwZToiZm9jdXNpbiJ9LGJsdXI6e2RlbGVnYXRlVHlwZToiZm9jdXNvdXQifSxiZWZvcmV1bmxvYWQ6e3NldHVwOmZ1bmN0aW9uKGEsYixjKXtmLmlzV2luZG93KHRoaXMpJiYodGhpcy5vbmJlZm9yZXVubG9hZD1jKX0sdGVhcmRvd246ZnVuY3Rpb24oYSxiKXt0aGlzLm9uYmVmb3JldW5sb2FkPT09YiYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bnVsbCl9fX0sc2ltdWxhdGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9Zi5leHRlbmQobmV3IGYuRXZlbnQsYyx7dHlwZTphLGlzU2ltdWxhdGVkOiEwLG9yaWdpbmFsRXZlbnQ6e319KTtkP2YuZXZlbnQudHJpZ2dlcihlLG51bGwsYik6Zi5ldmVudC5kaXNwYXRjaC5jYWxsKGIsZSksZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmYy5wcmV2ZW50RGVmYXVsdCgpfX0sZi5ldmVudC5oYW5kbGU9Zi5ldmVudC5kaXNwYXRjaCxmLnJlbW92ZUV2ZW50PWMucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihhLGIsYyl7YS5yZW1vdmVFdmVudExpc3RlbmVyJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixjLCExKX06ZnVuY3Rpb24oYSxiLGMpe2EuZGV0YWNoRXZlbnQmJmEuZGV0YWNoRXZlbnQoIm9uIitiLGMpfSxmLkV2ZW50PWZ1bmN0aW9uKGEsYil7aWYoISh0aGlzIGluc3RhbmNlb2YgZi5FdmVudCkpcmV0dXJuIG5ldyBmLkV2ZW50KGEsYik7YSYmYS50eXBlPyh0aGlzLm9yaWdpbmFsRXZlbnQ9YSx0aGlzLnR5cGU9YS50eXBlLHRoaXMuaXNEZWZhdWx0UHJldmVudGVkPWEuZGVmYXVsdFByZXZlbnRlZHx8YS5yZXR1cm5WYWx1ZT09PSExfHxhLmdldFByZXZlbnREZWZhdWx0JiZhLmdldFByZXZlbnREZWZhdWx0KCk/SzpKKTp0aGlzLnR5cGU9YSxiJiZmLmV4dGVuZCh0aGlzLGIpLHRoaXMudGltZVN0YW1wPWEmJmEudGltZVN0YW1wfHxmLm5vdygpLHRoaXNbZi5leHBhbmRvXT0hMH0sZi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9Szt2YXIgYT10aGlzLm9yaWdpbmFsRXZlbnQ7IWF8fChhLnByZXZlbnREZWZhdWx0P2EucHJldmVudERlZmF1bHQoKTphLnJldHVyblZhbHVlPSExKX0sc3RvcFByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1LO3ZhciBhPXRoaXMub3JpZ2luYWxFdmVudDshYXx8KGEuc3RvcFByb3BhZ2F0aW9uJiZhLnN0b3BQcm9wYWdhdGlvbigpLGEuY2FuY2VsQnViYmxlPSEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZD1LLHRoaXMuc3RvcFByb3BhZ2F0aW9uKCl9LGlzRGVmYXVsdFByZXZlbnRlZDpKLGlzUHJvcGFnYXRpb25TdG9wcGVkOkosaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6Sn0sZi5lYWNoKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0sZnVuY3Rpb24oYSxiKXtmLmV2ZW50LnNwZWNpYWxbYV09e2RlbGVnYXRlVHlwZTpiLGJpbmRUeXBlOmIsaGFuZGxlOmZ1bmN0aW9uKGEpe3ZhciBjPXRoaXMsZD1hLnJlbGF0ZWRUYXJnZXQsZT1hLmhhbmRsZU9iaixnPWUuc2VsZWN0b3IsaDtpZighZHx8ZCE9PWMmJiFmLmNvbnRhaW5zKGMsZCkpYS50eXBlPWUub3JpZ1R5cGUsaD1lLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpLGEudHlwZT1iO3JldHVybiBofX19KSxmLnN1cHBvcnQuc3VibWl0QnViYmxlc3x8KGYuZXZlbnQuc3BlY2lhbC5zdWJtaXQ9e3NldHVwOmZ1bmN0aW9uKCl7aWYoZi5ub2RlTmFtZSh0aGlzLCJmb3JtIikpcmV0dXJuITE7Zi5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihhKXt2YXIgYz1hLnRhcmdldCxkPWYubm9kZU5hbWUoYywiaW5wdXQiKXx8Zi5ub2RlTmFtZShjLCJidXR0b24iKT9jLmZvcm06YjtkJiYhZC5fc3VibWl0X2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoZCwic3VibWl0Ll9zdWJtaXQiLGZ1bmN0aW9uKGEpe2EuX3N1Ym1pdF9idWJibGU9ITB9KSxkLl9zdWJtaXRfYXR0YWNoZWQ9ITApfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihhKXthLl9zdWJtaXRfYnViYmxlJiYoZGVsZXRlIGEuX3N1Ym1pdF9idWJibGUsdGhpcy5wYXJlbnROb2RlJiYhYS5pc1RyaWdnZXImJmYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGEsITApKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZihmLm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTtmLmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLGYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoZi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZih6LnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpZi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oYSl7YS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSxmLmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihhKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFhLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSxmLmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsYSwhMCkpfSk7cmV0dXJuITF9Zi5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oYSl7dmFyIGI9YS50YXJnZXQ7ei50ZXN0KGIubm9kZU5hbWUpJiYhYi5fY2hhbmdlX2F0dGFjaGVkJiYoZi5ldmVudC5hZGQoYiwiY2hhbmdlLl9jaGFuZ2UiLGZ1bmN0aW9uKGEpe3RoaXMucGFyZW50Tm9kZSYmIWEuaXNTaW11bGF0ZWQmJiFhLmlzVHJpZ2dlciYmZi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsYSwhMCl9KSxiLl9jaGFuZ2VfYXR0YWNoZWQ9ITApfSl9LGhhbmRsZTpmdW5jdGlvbihhKXt2YXIgYj1hLnRhcmdldDtpZih0aGlzIT09Ynx8YS5pc1NpbXVsYXRlZHx8YS5pc1RyaWdnZXJ8fGIudHlwZSE9PSJyYWRpbyImJmIudHlwZSE9PSJjaGVja2JveCIpcmV0dXJuIGEuaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSx0ZWFyZG93bjpmdW5jdGlvbigpe2YuZXZlbnQucmVtb3ZlKHRoaXMsIi5fY2hhbmdlIik7cmV0dXJuIHoudGVzdCh0aGlzLm5vZGVOYW1lKX19KSxmLnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXN8fGYuZWFjaCh7Zm9jdXM6ImZvY3VzaW4iLGJsdXI6ImZvY3Vzb3V0In0sZnVuY3Rpb24oYSxiKXt2YXIgZD0wLGU9ZnVuY3Rpb24oYSl7Zi5ldmVudC5zaW11bGF0ZShiLGEudGFyZ2V0LGYuZXZlbnQuZml4KGEpLCEwKX07Zi5ldmVudC5zcGVjaWFsW2JdPXtzZXR1cDpmdW5jdGlvbigpe2QrKz09PTAmJmMuYWRkRXZlbnRMaXN0ZW5lcihhLGUsITApfSx0ZWFyZG93bjpmdW5jdGlvbigpey0tZD09PTAmJmMucmVtb3ZlRXZlbnRMaXN0ZW5lcihhLGUsITApfX19KSxmLmZuLmV4dGVuZCh7b246ZnVuY3Rpb24oYSxjLGQsZSxnKXt2YXIgaCxpO2lmKHR5cGVvZiBhPT0ib2JqZWN0Iil7dHlwZW9mIGMhPSJzdHJpbmciJiYoZD1kfHxjLGM9Yik7Zm9yKGkgaW4gYSl0aGlzLm9uKGksYyxkLGFbaV0sZyk7cmV0dXJuIHRoaXN9ZD09bnVsbCYmZT09bnVsbD8oZT1jLGQ9Yz1iKTplPT1udWxsJiYodHlwZW9mIGM9PSJzdHJpbmciPyhlPWQsZD1iKTooZT1kLGQ9YyxjPWIpKTtpZihlPT09ITEpZT1KO2Vsc2UgaWYoIWUpcmV0dXJuIHRoaXM7Zz09PTEmJihoPWUsZT1mdW5jdGlvbihhKXtmKCkub2ZmKGEpO3JldHVybiBoLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZS5ndWlkPWguZ3VpZHx8KGguZ3VpZD1mLmd1aWQrKykpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LmFkZCh0aGlzLGEsZSxkLGMpfSl9LG9uZTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gdGhpcy5vbihhLGIsYyxkLDEpfSxvZmY6ZnVuY3Rpb24oYSxjLGQpe2lmKGEmJmEucHJldmVudERlZmF1bHQmJmEuaGFuZGxlT2JqKXt2YXIgZT1hLmhhbmRsZU9iajtmKGEuZGVsZWdhdGVUYXJnZXQpLm9mZihlLm5hbWVzcGFjZT9lLm9yaWdUeXBlKyIuIitlLm5hbWVzcGFjZTplLm9yaWdUeXBlLGUuc2VsZWN0b3IsZS5oYW5kbGVyKTtyZXR1cm4gdGhpc31pZih0eXBlb2YgYT09Im9iamVjdCIpe2Zvcih2YXIgZyBpbiBhKXRoaXMub2ZmKGcsYyxhW2ddKTtyZXR1cm4gdGhpc31pZihjPT09ITF8fHR5cGVvZiBjPT0iZnVuY3Rpb24iKWQ9YyxjPWI7ZD09PSExJiYoZD1KKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7Zi5ldmVudC5yZW1vdmUodGhpcyxhLGQsYyl9KX0sYmluZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMub24oYSxudWxsLGIsYyl9LHVuYmluZDpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLm9mZihhLG51bGwsYil9LGxpdmU6ZnVuY3Rpb24oYSxiLGMpe2YodGhpcy5jb250ZXh0KS5vbihhLHRoaXMuc2VsZWN0b3IsYixjKTtyZXR1cm4gdGhpc30sZGllOmZ1bmN0aW9uKGEsYil7Zih0aGlzLmNvbnRleHQpLm9mZihhLHRoaXMuc2VsZWN0b3J8fCIqKiIsYik7cmV0dXJuIHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm9uKGIsYSxjLGQpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09MT90aGlzLm9mZihhLCIqKiIpOnRoaXMub2ZmKGIsYSxjKX0sdHJpZ2dlcjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmLmV2ZW50LnRyaWdnZXIoYSxiLHRoaXMpfSl9LHRyaWdnZXJIYW5kbGVyOmZ1bmN0aW9uKGEsYil7aWYodGhpc1swXSlyZXR1cm4gZi5ldmVudC50cmlnZ2VyKGEsYix0aGlzWzBdLCEwKX0sdG9nZ2xlOmZ1bmN0aW9uKGEpe3ZhciBiPWFyZ3VtZW50cyxjPWEuZ3VpZHx8Zi5ndWlkKyssZD0wLGU9ZnVuY3Rpb24oYyl7dmFyIGU9KGYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrYS5ndWlkKXx8MCklZDtmLl9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2EuZ3VpZCxlKzEpLGMucHJldmVudERlZmF1bHQoKTtyZXR1cm4gYltlXS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fCExfTtlLmd1aWQ9Yzt3aGlsZShkPGIubGVuZ3RoKWJbZCsrXS5ndWlkPWM7cmV0dXJuIHRoaXMuY2xpY2soZSl9LGhvdmVyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMubW91c2VlbnRlcihhKS5tb3VzZWxlYXZlKGJ8fGEpfX0pLGYuZWFjaCgiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IGxvYWQgcmVzaXplIHNjcm9sbCB1bmxvYWQgY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBlcnJvciBjb250ZXh0bWVudSIuc3BsaXQoIiAiKSxmdW5jdGlvbihhLGIpe2YuZm5bYl09ZnVuY3Rpb24oYSxjKXtjPT1udWxsJiYoYz1hLGE9bnVsbCk7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKGIsbnVsbCxhLGMpOnRoaXMudHJpZ2dlcihiKX0sZi5hdHRyRm4mJihmLmF0dHJGbltiXT0hMCksQy50ZXN0KGIpJiYoZi5ldmVudC5maXhIb29rc1tiXT1mLmV2ZW50LmtleUhvb2tzKSxELnRlc3QoYikmJihmLmV2ZW50LmZpeEhvb2tzW2JdPWYuZXZlbnQubW91c2VIb29rcyl9KSxmdW5jdGlvbigpe2Z1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9aWYoai5ub2RlVHlwZT09PTEpe2d8fChqW2RdPWMsai5zaXpzZXQ9aCk7aWYodHlwZW9mIGIhPSJzdHJpbmciKXtpZihqPT09Yil7az0hMDticmVha319ZWxzZSBpZihtLmZpbHRlcihiLFtqXSkubGVuZ3RoPjApe2s9ajticmVha319aj1qW2FdfWVbaF09a319fWZ1bmN0aW9uIHcoYSxiLGMsZSxmLGcpe2Zvcih2YXIgaD0wLGk9ZS5sZW5ndGg7aDxpO2grKyl7dmFyIGo9ZVtoXTtpZihqKXt2YXIgaz0hMTtqPWpbYV07d2hpbGUoail7aWYoaltkXT09PWMpe2s9ZVtqLnNpenNldF07YnJlYWt9ai5ub2RlVHlwZT09PTEmJiFnJiYoaltkXT1jLGouc2l6c2V0PWgpO2lmKGoubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWIpe2s9ajticmVha31qPWpbYV19ZVtoXT1rfX19dmFyIGE9LygoPzpcKCg/OlwoW14oKV0rXCl8W14oKV0rKStcKXxcWyg/OlxbW15cW1xdXSpcXXxbJyJdW14nIl0qWyciXXxbXlxbXF0nIl0rKStcXXxcXC58W14gPit+LChcW1xcXSspK3xbPit+XSkoXHMqLFxzKik/KCg/Oi58XHJ8XG4pKikvZyxkPSJzaXpjYWNoZSIrKE1hdGgucmFuZG9tKCkrIiIpLnJlcGxhY2UoIi4iLCIiKSxlPTAsZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGg9ITEsaT0hMCxqPS9cXC9nLGs9L1xyXG4vZyxsPS9cVy87WzAsMF0uc29ydChmdW5jdGlvbigpe2k9ITE7cmV0dXJuIDB9KTt2YXIgbT1mdW5jdGlvbihiLGQsZSxmKXtlPWV8fFtdLGQ9ZHx8Yzt2YXIgaD1kO2lmKGQubm9kZVR5cGUhPT0xJiZkLm5vZGVUeXBlIT09OSlyZXR1cm5bXTtpZighYnx8dHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBlO3ZhciBpLGosayxsLG4scSxyLHQsdT0hMCx2PW0uaXNYTUwoZCksdz1bXSx4PWI7ZG97YS5leGVjKCIiKSxpPWEuZXhlYyh4KTtpZihpKXt4PWlbM10sdy5wdXNoKGlbMV0pO2lmKGlbMl0pe2w9aVszXTticmVha319fXdoaWxlKGkpO2lmKHcubGVuZ3RoPjEmJnAuZXhlYyhiKSlpZih3Lmxlbmd0aD09PTImJm8ucmVsYXRpdmVbd1swXV0paj15KHdbMF0rd1sxXSxkLGYpO2Vsc2V7aj1vLnJlbGF0aXZlW3dbMF1dP1tkXTptKHcuc2hpZnQoKSxkKTt3aGlsZSh3Lmxlbmd0aCliPXcuc2hpZnQoKSxvLnJlbGF0aXZlW2JdJiYoYis9dy5zaGlmdCgpKSxqPXkoYixqLGYpfWVsc2V7IWYmJncubGVuZ3RoPjEmJmQubm9kZVR5cGU9PT05JiYhdiYmby5tYXRjaC5JRC50ZXN0KHdbMF0pJiYhby5tYXRjaC5JRC50ZXN0KHdbdy5sZW5ndGgtMV0pJiYobj1tLmZpbmQody5zaGlmdCgpLGQsdiksZD1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KVswXTpuLnNldFswXSk7aWYoZCl7bj1mP3tleHByOncucG9wKCksc2V0OnMoZil9Om0uZmluZCh3LnBvcCgpLHcubGVuZ3RoPT09MSYmKHdbMF09PT0ifiJ8fHdbMF09PT0iKyIpJiZkLnBhcmVudE5vZGU/ZC5wYXJlbnROb2RlOmQsdiksaj1uLmV4cHI/bS5maWx0ZXIobi5leHByLG4uc2V0KTpuLnNldCx3Lmxlbmd0aD4wP2s9cyhqKTp1PSExO3doaWxlKHcubGVuZ3RoKXE9dy5wb3AoKSxyPXEsby5yZWxhdGl2ZVtxXT9yPXcucG9wKCk6cT0iIixyPT1udWxsJiYocj1kKSxvLnJlbGF0aXZlW3FdKGsscix2KX1lbHNlIGs9dz1bXX1rfHwoaz1qKSxrfHxtLmVycm9yKHF8fGIpO2lmKGcuY2FsbChrKT09PSJbb2JqZWN0IEFycmF5XSIpaWYoIXUpZS5wdXNoLmFwcGx5KGUsayk7ZWxzZSBpZihkJiZkLm5vZGVUeXBlPT09MSlmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJihrW3RdPT09ITB8fGtbdF0ubm9kZVR5cGU9PT0xJiZtLmNvbnRhaW5zKGQsa1t0XSkpJiZlLnB1c2goalt0XSk7ZWxzZSBmb3IodD0wO2tbdF0hPW51bGw7dCsrKWtbdF0mJmtbdF0ubm9kZVR5cGU9PT0xJiZlLnB1c2goalt0XSk7ZWxzZSBzKGssZSk7bCYmKG0obCxoLGUsZiksbS51bmlxdWVTb3J0KGUpKTtyZXR1cm4gZX07bS51bmlxdWVTb3J0PWZ1bmN0aW9uKGEpe2lmKHUpe2g9aSxhLnNvcnQodSk7aWYoaClmb3IodmFyIGI9MTtiPGEubGVuZ3RoO2IrKylhW2JdPT09YVtiLTFdJiZhLnNwbGljZShiLS0sMSl9cmV0dXJuIGF9LG0ubWF0Y2hlcz1mdW5jdGlvbihhLGIpe3JldHVybiBtKGEsbnVsbCxudWxsLGIpfSxtLm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihhLGIpe3JldHVybiBtKGIsbnVsbCxudWxsLFthXSkubGVuZ3RoPjB9LG0uZmluZD1mdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxmLGcsaCxpO2lmKCFhKXJldHVybltdO2ZvcihlPTAsZj1vLm9yZGVyLmxlbmd0aDtlPGY7ZSsrKXtoPW8ub3JkZXJbZV07aWYoZz1vLmxlZnRNYXRjaFtoXS5leGVjKGEpKXtpPWdbMV0sZy5zcGxpY2UoMSwxKTtpZihpLnN1YnN0cihpLmxlbmd0aC0xKSE9PSJcXCIpe2dbMV09KGdbMV18fCIiKS5yZXBsYWNlKGosIiIpLGQ9by5maW5kW2hdKGcsYixjKTtpZihkIT1udWxsKXthPWEucmVwbGFjZShvLm1hdGNoW2hdLCIiKTticmVha319fX1kfHwoZD10eXBlb2YgYi5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCI/Yi5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpOltdKTtyZXR1cm57c2V0OmQsZXhwcjphfX0sbS5maWx0ZXI9ZnVuY3Rpb24oYSxjLGQsZSl7dmFyIGYsZyxoLGksaixrLGwsbixwLHE9YSxyPVtdLHM9Yyx0PWMmJmNbMF0mJm0uaXNYTUwoY1swXSk7d2hpbGUoYSYmYy5sZW5ndGgpe2ZvcihoIGluIG8uZmlsdGVyKWlmKChmPW8ubGVmdE1hdGNoW2hdLmV4ZWMoYSkpIT1udWxsJiZmWzJdKXtrPW8uZmlsdGVyW2hdLGw9ZlsxXSxnPSExLGYuc3BsaWNlKDEsMSk7aWYobC5zdWJzdHIobC5sZW5ndGgtMSk9PT0iXFwiKWNvbnRpbnVlO3M9PT1yJiYocj1bXSk7aWYoby5wcmVGaWx0ZXJbaF0pe2Y9by5wcmVGaWx0ZXJbaF0oZixzLGQscixlLHQpO2lmKCFmKWc9aT0hMDtlbHNlIGlmKGY9PT0hMCljb250aW51ZX1pZihmKWZvcihuPTA7KGo9c1tuXSkhPW51bGw7bisrKWomJihpPWsoaixmLG4scykscD1lXmksZCYmaSE9bnVsbD9wP2c9ITA6c1tuXT0hMTpwJiYoci5wdXNoKGopLGc9ITApKTtpZihpIT09Yil7ZHx8KHM9ciksYT1hLnJlcGxhY2Uoby5tYXRjaFtoXSwiIik7aWYoIWcpcmV0dXJuW107YnJlYWt9fWlmKGE9PT1xKWlmKGc9PW51bGwpbS5lcnJvcihhKTtlbHNlIGJyZWFrO3E9YX1yZXR1cm4gc30sbS5lcnJvcj1mdW5jdGlvbihhKXt0aHJvdyBuZXcgRXJyb3IoIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246ICIrYSl9O3ZhciBuPW0uZ2V0VGV4dD1mdW5jdGlvbihhKXt2YXIgYixjLGQ9YS5ub2RlVHlwZSxlPSIiO2lmKGQpe2lmKGQ9PT0xfHxkPT09OXx8ZD09PTExKXtpZih0eXBlb2YgYS50ZXh0Q29udGVudD09InN0cmluZyIpcmV0dXJuIGEudGV4dENvbnRlbnQ7aWYodHlwZW9mIGEuaW5uZXJUZXh0PT0ic3RyaW5nIilyZXR1cm4gYS5pbm5lclRleHQucmVwbGFjZShrLCIiKTtmb3IoYT1hLmZpcnN0Q2hpbGQ7YTthPWEubmV4dFNpYmxpbmcpZSs9bihhKX1lbHNlIGlmKGQ9PT0zfHxkPT09NClyZXR1cm4gYS5ub2RlVmFsdWV9ZWxzZSBmb3IoYj0wO2M9YVtiXTtiKyspYy5ub2RlVHlwZSE9PTgmJihlKz1uKGMpKTtyZXR1cm4gZX0sbz1tLnNlbGVjdG9ycz17b3JkZXI6WyJJRCIsIk5BTUUiLCJUQUciXSxtYXRjaDp7SUQ6LyMoKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKykvLENMQVNTOi9cLigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKS8sTkFNRTovXFtuYW1lPVsnIl0qKCg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSspWyciXSpcXS8sQVRUUjovXFtccyooKD86W1x3XHUwMGMwLVx1RkZGRlwtXXxcXC4pKylccyooPzooXFM/PSlccyooPzooWyciXSkoLio/KVwzfCgjPyg/Oltcd1x1MDBjMC1cdUZGRkZcLV18XFwuKSopfCl8KVxzKlxdLyxUQUc6L14oKD86W1x3XHUwMGMwLVx1RkZGRlwqXC1dfFxcLikrKS8sQ0hJTEQ6Lzoob25seXxudGh8bGFzdHxmaXJzdCktY2hpbGQoPzpcKFxzKihldmVufG9kZHwoPzpbK1wtXT9cZCt8KD86WytcLV0/XGQqKT9uXHMqKD86WytcLV1ccypcZCspPykpXHMqXCkpPy8sUE9TOi86KG50aHxlcXxndHxsdHxmaXJzdHxsYXN0fGV2ZW58b2RkKSg/OlwoKFxkKilcKSk/KD89W15cLV18JCkvLFBTRVVETzovOigoPzpbXHdcdTAwYzAtXHVGRkZGXC1dfFxcLikrKSg/OlwoKFsnIl0/KSgoPzpcKFteXCldK1wpfFteXChcKV0qKSspXDJcKSk/L30sbGVmdE1hdGNoOnt9LGF0dHJNYXA6eyJjbGFzcyI6ImNsYXNzTmFtZSIsImZvciI6Imh0bWxGb3IifSxhdHRySGFuZGxlOntocmVmOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSx0eXBlOmZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgidHlwZSIpfX0scmVsYXRpdmU6eyIrIjpmdW5jdGlvbihhLGIpe3ZhciBjPXR5cGVvZiBiPT0ic3RyaW5nIixkPWMmJiFsLnRlc3QoYiksZT1jJiYhZDtkJiYoYj1iLnRvTG93ZXJDYXNlKCkpO2Zvcih2YXIgZj0wLGc9YS5sZW5ndGgsaDtmPGc7ZisrKWlmKGg9YVtmXSl7d2hpbGUoKGg9aC5wcmV2aW91c1NpYmxpbmcpJiZoLm5vZGVUeXBlIT09MSk7YVtmXT1lfHxoJiZoLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT1iP2h8fCExOmg9PT1ifWUmJm0uZmlsdGVyKGIsYSwhMCl9LCI+IjpmdW5jdGlvbihhLGIpe3ZhciBjLGQ9dHlwZW9mIGI9PSJzdHJpbmciLGU9MCxmPWEubGVuZ3RoO2lmKGQmJiFsLnRlc3QoYikpe2I9Yi50b0xvd2VyQ2FzZSgpO2Zvcig7ZTxmO2UrKyl7Yz1hW2VdO2lmKGMpe3ZhciBnPWMucGFyZW50Tm9kZTthW2VdPWcubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWI/ZzohMX19fWVsc2V7Zm9yKDtlPGY7ZSsrKWM9YVtlXSxjJiYoYVtlXT1kP2MucGFyZW50Tm9kZTpjLnBhcmVudE5vZGU9PT1iKTtkJiZtLmZpbHRlcihiLGEsITApfX0sIiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwYXJlbnROb2RlIixiLGYsYSxkLGMpfSwifiI6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkLGY9ZSsrLGc9eDt0eXBlb2YgYj09InN0cmluZyImJiFsLnRlc3QoYikmJihiPWIudG9Mb3dlckNhc2UoKSxkPWIsZz13KSxnKCJwcmV2aW91c1NpYmxpbmciLGIsZixhLGQsYyl9fSxmaW5kOntJRDpmdW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIuZ2V0RWxlbWVudEJ5SWQhPSJ1bmRlZmluZWQiJiYhYyl7dmFyIGQ9Yi5nZXRFbGVtZW50QnlJZChhWzFdKTtyZXR1cm4gZCYmZC5wYXJlbnROb2RlP1tkXTpbXX19LE5BTUU6ZnVuY3Rpb24oYSxiKXtpZih0eXBlb2YgYi5nZXRFbGVtZW50c0J5TmFtZSE9InVuZGVmaW5lZCIpe3ZhciBjPVtdLGQ9Yi5nZXRFbGVtZW50c0J5TmFtZShhWzFdKTtmb3IodmFyIGU9MCxmPWQubGVuZ3RoO2U8ZjtlKyspZFtlXS5nZXRBdHRyaWJ1dGUoIm5hbWUiKT09PWFbMV0mJmMucHVzaChkW2VdKTtyZXR1cm4gYy5sZW5ndGg9PT0wP251bGw6Y319LFRBRzpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlUYWdOYW1lIT0idW5kZWZpbmVkIilyZXR1cm4gYi5nZXRFbGVtZW50c0J5VGFnTmFtZShhWzFdKX19LHByZUZpbHRlcjp7Q0xBU1M6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2E9IiAiK2FbMV0ucmVwbGFjZShqLCIiKSsiICI7aWYoZilyZXR1cm4gYTtmb3IodmFyIGc9MCxoOyhoPWJbZ10pIT1udWxsO2crKyloJiYoZV4oaC5jbGFzc05hbWUmJigiICIraC5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKC9bXHRcblxyXS9nLCIgIikuaW5kZXhPZihhKT49MCk/Y3x8ZC5wdXNoKGgpOmMmJihiW2ddPSExKSk7cmV0dXJuITF9LElEOmZ1bmN0aW9uKGEpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIil9LFRBRzpmdW5jdGlvbihhLGIpe3JldHVybiBhWzFdLnJlcGxhY2UoaiwiIikudG9Mb3dlckNhc2UoKX0sQ0hJTEQ6ZnVuY3Rpb24oYSl7aWYoYVsxXT09PSJudGgiKXthWzJdfHxtLmVycm9yKGFbMF0pLGFbMl09YVsyXS5yZXBsYWNlKC9eXCt8XHMqL2csIiIpO3ZhciBiPS8oLT8pKFxkKikoPzpuKFsrXC1dP1xkKikpPy8uZXhlYyhhWzJdPT09ImV2ZW4iJiYiMm4ifHxhWzJdPT09Im9kZCImJiIybisxInx8IS9cRC8udGVzdChhWzJdKSYmIjBuKyIrYVsyXXx8YVsyXSk7YVsyXT1iWzFdKyhiWzJdfHwxKS0wLGFbM109YlszXS0wfWVsc2UgYVsyXSYmbS5lcnJvcihhWzBdKTthWzBdPWUrKztyZXR1cm4gYX0sQVRUUjpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc9YVsxXT1hWzFdLnJlcGxhY2UoaiwiIik7IWYmJm8uYXR0ck1hcFtnXSYmKGFbMV09by5hdHRyTWFwW2ddKSxhWzRdPShhWzRdfHxhWzVdfHwiIikucmVwbGFjZShqLCIiKSxhWzJdPT09In49IiYmKGFbNF09IiAiK2FbNF0rIiAiKTtyZXR1cm4gYX0sUFNFVURPOmZ1bmN0aW9uKGIsYyxkLGUsZil7aWYoYlsxXT09PSJub3QiKWlmKChhLmV4ZWMoYlszXSl8fCIiKS5sZW5ndGg+MXx8L15cdy8udGVzdChiWzNdKSliWzNdPW0oYlszXSxudWxsLG51bGwsYyk7ZWxzZXt2YXIgZz1tLmZpbHRlcihiWzNdLGMsZCwhMF5mKTtkfHxlLnB1c2guYXBwbHkoZSxnKTtyZXR1cm4hMX1lbHNlIGlmKG8ubWF0Y2guUE9TLnRlc3QoYlswXSl8fG8ubWF0Y2guQ0hJTEQudGVzdChiWzBdKSlyZXR1cm4hMDtyZXR1cm4gYn0sUE9TOmZ1bmN0aW9uKGEpe2EudW5zaGlmdCghMCk7cmV0dXJuIGF9fSxmaWx0ZXJzOntlbmFibGVkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmRpc2FibGVkPT09ITEmJmEudHlwZSE9PSJoaWRkZW4ifSxkaXNhYmxlZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kaXNhYmxlZD09PSEwfSxjaGVja2VkOmZ1bmN0aW9uKGEpe3JldHVybiBhLmNoZWNrZWQ9PT0hMH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oYSl7YS5wYXJlbnROb2RlJiZhLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtyZXR1cm4gYS5zZWxlY3RlZD09PSEwfSxwYXJlbnQ6ZnVuY3Rpb24oYSl7cmV0dXJuISFhLmZpcnN0Q2hpbGR9LGVtcHR5OmZ1bmN0aW9uKGEpe3JldHVybiFhLmZpcnN0Q2hpbGR9LGhhczpmdW5jdGlvbihhLGIsYyl7cmV0dXJuISFtKGNbM10sYSkubGVuZ3RofSxoZWFkZXI6ZnVuY3Rpb24oYSl7cmV0dXJuL2hcZC9pLnRlc3QoYS5ub2RlTmFtZSl9LHRleHQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5nZXRBdHRyaWJ1dGUoInR5cGUiKSxjPWEudHlwZTtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInRleHQiPT09YyYmKGI9PT1jfHxiPT09bnVsbCl9LHJhZGlvOmZ1bmN0aW9uKGEpe3JldHVybiBhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT0iaW5wdXQiJiYicmFkaW8iPT09YS50eXBlfSxjaGVja2JveDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImNoZWNrYm94Ij09PWEudHlwZX0sZmlsZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImZpbGUiPT09YS50eXBlfSxwYXNzd29yZDpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmInBhc3N3b3JkIj09PWEudHlwZX0sc3VibWl0OmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oYj09PSJpbnB1dCJ8fGI9PT0iYnV0dG9uIikmJiJzdWJtaXQiPT09YS50eXBlfSxpbWFnZTpmdW5jdGlvbihhKXtyZXR1cm4gYS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ImlucHV0IiYmImltYWdlIj09PWEudHlwZX0scmVzZXQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybihiPT09ImlucHV0Inx8Yj09PSJidXR0b24iKSYmInJlc2V0Ij09PWEudHlwZX0sYnV0dG9uOmZ1bmN0aW9uKGEpe3ZhciBiPWEubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gYj09PSJpbnB1dCImJiJidXR0b24iPT09YS50eXBlfHxiPT09ImJ1dHRvbiJ9LGlucHV0OmZ1bmN0aW9uKGEpe3JldHVybi9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2kudGVzdChhLm5vZGVOYW1lKX0sZm9jdXM6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT1hLm93bmVyRG9jdW1lbnQuYWN0aXZlRWxlbWVudH19LHNldEZpbHRlcnM6e2ZpcnN0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0wfSxsYXN0OmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiPT09ZC5sZW5ndGgtMX0sZXZlbjpmdW5jdGlvbihhLGIpe3JldHVybiBiJTI9PT0wfSxvZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYiUyPT09MX0sbHQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPGNbM10tMH0sZ3Q6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBiPmNbM10tMH0sbnRoOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gY1szXS0wPT09Yn0sZXE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBjWzNdLTA9PT1ifX0sZmlsdGVyOntQU0VVRE86ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsxXSxmPW8uZmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpO2lmKGU9PT0iY29udGFpbnMiKXJldHVybihhLnRleHRDb250ZW50fHxhLmlubmVyVGV4dHx8bihbYV0pfHwiIikuaW5kZXhPZihiWzNdKT49MDtpZihlPT09Im5vdCIpe3ZhciBnPWJbM107Zm9yKHZhciBoPTAsaT1nLmxlbmd0aDtoPGk7aCsrKWlmKGdbaF09PT1hKXJldHVybiExO3JldHVybiEwfW0uZXJyb3IoZSl9LENISUxEOmZ1bmN0aW9uKGEsYil7dmFyIGMsZSxmLGcsaCxpLGosaz1iWzFdLGw9YTtzd2l0Y2goayl7Y2FzZSJvbmx5IjpjYXNlImZpcnN0Ijp3aGlsZShsPWwucHJldmlvdXNTaWJsaW5nKWlmKGwubm9kZVR5cGU9PT0xKXJldHVybiExO2lmKGs9PT0iZmlyc3QiKXJldHVybiEwO2w9YTtjYXNlImxhc3QiOndoaWxlKGw9bC5uZXh0U2libGluZylpZihsLm5vZGVUeXBlPT09MSlyZXR1cm4hMTtyZXR1cm4hMDtjYXNlIm50aCI6Yz1iWzJdLGU9YlszXTtpZihjPT09MSYmZT09PTApcmV0dXJuITA7Zj1iWzBdLGc9YS5wYXJlbnROb2RlO2lmKGcmJihnW2RdIT09Znx8IWEubm9kZUluZGV4KSl7aT0wO2ZvcihsPWcuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZylsLm5vZGVUeXBlPT09MSYmKGwubm9kZUluZGV4PSsraSk7Z1tkXT1mfWo9YS5ub2RlSW5kZXgtZTtyZXR1cm4gYz09PTA/aj09PTA6aiVjPT09MCYmai9jPj0wfX0sSUQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmEuZ2V0QXR0cmlidXRlKCJpZCIpPT09Yn0sVEFHOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGI9PT0iKiImJmEubm9kZVR5cGU9PT0xfHwhIWEubm9kZU5hbWUmJmEubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PWJ9LENMQVNTOmZ1bmN0aW9uKGEsYil7cmV0dXJuKCIgIisoYS5jbGFzc05hbWV8fGEuZ2V0QXR0cmlidXRlKCJjbGFzcyIpKSsiICIpLmluZGV4T2YoYik+LTF9LEFUVFI6ZnVuY3Rpb24oYSxiKXt2YXIgYz1iWzFdLGQ9bS5hdHRyP20uYXR0cihhLGMpOm8uYXR0ckhhbmRsZVtjXT9vLmF0dHJIYW5kbGVbY10oYSk6YVtjXSE9bnVsbD9hW2NdOmEuZ2V0QXR0cmlidXRlKGMpLGU9ZCsiIixmPWJbMl0sZz1iWzRdO3JldHVybiBkPT1udWxsP2Y9PT0iIT0iOiFmJiZtLmF0dHI/ZCE9bnVsbDpmPT09Ij0iP2U9PT1nOmY9PT0iKj0iP2UuaW5kZXhPZihnKT49MDpmPT09In49Ij8oIiAiK2UrIiAiKS5pbmRleE9mKGcpPj0wOmc/Zj09PSIhPSI/ZSE9PWc6Zj09PSJePSI/ZS5pbmRleE9mKGcpPT09MDpmPT09IiQ9Ij9lLnN1YnN0cihlLmxlbmd0aC1nLmxlbmd0aCk9PT1nOmY9PT0ifD0iP2U9PT1nfHxlLnN1YnN0cigwLGcubGVuZ3RoKzEpPT09ZysiLSI6ITE6ZSYmZCE9PSExfSxQT1M6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9YlsyXSxmPW8uc2V0RmlsdGVyc1tlXTtpZihmKXJldHVybiBmKGEsYyxiLGQpfX19LHA9by5tYXRjaC5QT1MscT1mdW5jdGlvbihhLGIpe3JldHVybiJcXCIrKGItMCsxKX07Zm9yKHZhciByIGluIG8ubWF0Y2gpby5tYXRjaFtyXT1uZXcgUmVnRXhwKG8ubWF0Y2hbcl0uc291cmNlKy8oPyFbXlxbXSpcXSkoPyFbXlwoXSpcKSkvLnNvdXJjZSksby5sZWZ0TWF0Y2hbcl09bmV3IFJlZ0V4cCgvKF4oPzoufFxyfFxuKSo/KS8uc291cmNlK28ubWF0Y2hbcl0uc291cmNlLnJlcGxhY2UoL1xcKFxkKykvZyxxKSk7by5tYXRjaC5nbG9iYWxQT1M9cDt2YXIgcz1mdW5jdGlvbihhLGIpe2E9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYSwwKTtpZihiKXtiLnB1c2guYXBwbHkoYixhKTtyZXR1cm4gYn1yZXR1cm4gYX07dHJ5e0FycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2godCl7cz1mdW5jdGlvbihhLGIpe3ZhciBjPTAsZD1ifHxbXTtpZihnLmNhbGwoYSk9PT0iW29iamVjdCBBcnJheV0iKUFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGQsYSk7ZWxzZSBpZih0eXBlb2YgYS5sZW5ndGg9PSJudW1iZXIiKWZvcih2YXIgZT1hLmxlbmd0aDtjPGU7YysrKWQucHVzaChhW2NdKTtlbHNlIGZvcig7YVtjXTtjKyspZC5wdXNoKGFbY10pO3JldHVybiBkfX12YXIgdSx2O2MuZG9jdW1lbnRFbGVtZW50LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP3U9ZnVuY3Rpb24oYSxiKXtpZihhPT09Yil7aD0hMDtyZXR1cm4gMH1pZighYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IWIuY29tcGFyZURvY3VtZW50UG9zaXRpb24pcmV0dXJuIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MTtyZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSY0Py0xOjF9Oih1PWZ1bmN0aW9uKGEsYil7aWYoYT09PWIpe2g9ITA7cmV0dXJuIDB9aWYoYS5zb3VyY2VJbmRleCYmYi5zb3VyY2VJbmRleClyZXR1cm4gYS5zb3VyY2VJbmRleC1iLnNvdXJjZUluZGV4O3ZhciBjLGQsZT1bXSxmPVtdLGc9YS5wYXJlbnROb2RlLGk9Yi5wYXJlbnROb2RlLGo9ZztpZihnPT09aSlyZXR1cm4gdihhLGIpO2lmKCFnKXJldHVybi0xO2lmKCFpKXJldHVybiAxO3doaWxlKGopZS51bnNoaWZ0KGopLGo9ai5wYXJlbnROb2RlO2o9aTt3aGlsZShqKWYudW5zaGlmdChqKSxqPWoucGFyZW50Tm9kZTtjPWUubGVuZ3RoLGQ9Zi5sZW5ndGg7Zm9yKHZhciBrPTA7azxjJiZrPGQ7aysrKWlmKGVba10hPT1mW2tdKXJldHVybiB2KGVba10sZltrXSk7cmV0dXJuIGs9PT1jP3YoYSxmW2tdLC0xKTp2KGVba10sYiwxKX0sdj1mdW5jdGlvbihhLGIsYyl7aWYoYT09PWIpcmV0dXJuIGM7dmFyIGQ9YS5uZXh0U2libGluZzt3aGlsZShkKXtpZihkPT09YilyZXR1cm4tMTtkPWQubmV4dFNpYmxpbmd9cmV0dXJuIDF9KSxmdW5jdGlvbigpe3ZhciBhPWMuY3JlYXRlRWxlbWVudCgiZGl2IiksZD0ic2NyaXB0IisobmV3IERhdGUpLmdldFRpbWUoKSxlPWMuZG9jdW1lbnRFbGVtZW50O2EuaW5uZXJIVE1MPSI8YSBuYW1lPSciK2QrIicvPiIsZS5pbnNlcnRCZWZvcmUoYSxlLmZpcnN0Q2hpbGQpLGMuZ2V0RWxlbWVudEJ5SWQoZCkmJihvLmZpbmQuSUQ9ZnVuY3Rpb24oYSxjLGQpe2lmKHR5cGVvZiBjLmdldEVsZW1lbnRCeUlkIT0idW5kZWZpbmVkIiYmIWQpe3ZhciBlPWMuZ2V0RWxlbWVudEJ5SWQoYVsxXSk7cmV0dXJuIGU/ZS5pZD09PWFbMV18fHR5cGVvZiBlLmdldEF0dHJpYnV0ZU5vZGUhPSJ1bmRlZmluZWQiJiZlLmdldEF0dHJpYnV0ZU5vZGUoImlkIikubm9kZVZhbHVlPT09YVsxXT9bZV06YjpbXX19LG8uZmlsdGVyLklEPWZ1bmN0aW9uKGEsYil7dmFyIGM9dHlwZW9mIGEuZ2V0QXR0cmlidXRlTm9kZSE9InVuZGVmaW5lZCImJmEuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gYS5ub2RlVHlwZT09PTEmJmMmJmMubm9kZVZhbHVlPT09Yn0pLGUucmVtb3ZlQ2hpbGQoYSksZT1hPW51bGx9KCksZnVuY3Rpb24oKXt2YXIgYT1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpO2EuYXBwZW5kQ2hpbGQoYy5jcmVhdGVDb21tZW50KCIiKSksYS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpLmxlbmd0aD4wJiYoby5maW5kLlRBRz1mdW5jdGlvbihhLGIpe3ZhciBjPWIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoYVsxXSk7aWYoYVsxXT09PSIqIil7dmFyIGQ9W107Zm9yKHZhciBlPTA7Y1tlXTtlKyspY1tlXS5ub2RlVHlwZT09PTEmJmQucHVzaChjW2VdKTtjPWR9cmV0dXJuIGN9KSxhLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsYS5maXJzdENoaWxkJiZ0eXBlb2YgYS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9InVuZGVmaW5lZCImJmEuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKSE9PSIjIiYmKG8uYXR0ckhhbmRsZS5ocmVmPWZ1bmN0aW9uKGEpe3JldHVybiBhLmdldEF0dHJpYnV0ZSgiaHJlZiIsMil9KSxhPW51bGx9KCksYy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBhPW0sYj1jLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGQ9Il9fc2l6emxlX18iO2IuaW5uZXJIVE1MPSI8cCBjbGFzcz0nVEVTVCc+PC9wPiI7aWYoIWIucXVlcnlTZWxlY3RvckFsbHx8Yi5xdWVyeVNlbGVjdG9yQWxsKCIuVEVTVCIpLmxlbmd0aCE9PTApe209ZnVuY3Rpb24oYixlLGYsZyl7ZT1lfHxjO2lmKCFnJiYhbS5pc1hNTChlKSl7dmFyIGg9L14oXHcrJCl8XlwuKFtcd1wtXSskKXxeIyhbXHdcLV0rJCkvLmV4ZWMoYik7aWYoaCYmKGUubm9kZVR5cGU9PT0xfHxlLm5vZGVUeXBlPT09OSkpe2lmKGhbMV0pcmV0dXJuIHMoZS5nZXRFbGVtZW50c0J5VGFnTmFtZShiKSxmKTtpZihoWzJdJiZvLmZpbmQuQ0xBU1MmJmUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gcyhlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoaFsyXSksZil9aWYoZS5ub2RlVHlwZT09PTkpe2lmKGI9PT0iYm9keSImJmUuYm9keSlyZXR1cm4gcyhbZS5ib2R5XSxmKTtpZihoJiZoWzNdKXt2YXIgaT1lLmdldEVsZW1lbnRCeUlkKGhbM10pO2lmKCFpfHwhaS5wYXJlbnROb2RlKXJldHVybiBzKFtdLGYpO2lmKGkuaWQ9PT1oWzNdKXJldHVybiBzKFtpXSxmKX10cnl7cmV0dXJuIHMoZS5xdWVyeVNlbGVjdG9yQWxsKGIpLGYpfWNhdGNoKGope319ZWxzZSBpZihlLm5vZGVUeXBlPT09MSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe3ZhciBrPWUsbD1lLmdldEF0dHJpYnV0ZSgiaWQiKSxuPWx8fGQscD1lLnBhcmVudE5vZGUscT0vXlxzKlsrfl0vLnRlc3QoYik7bD9uPW4ucmVwbGFjZSgvJy9nLCJcXCQmIik6ZS5zZXRBdHRyaWJ1dGUoImlkIixuKSxxJiZwJiYoZT1lLnBhcmVudE5vZGUpO3RyeXtpZighcXx8cClyZXR1cm4gcyhlLnF1ZXJ5U2VsZWN0b3JBbGwoIltpZD0nIituKyInXSAiK2IpLGYpfWNhdGNoKHIpe31maW5hbGx5e2x8fGsucmVtb3ZlQXR0cmlidXRlKCJpZCIpfX19cmV0dXJuIGEoYixlLGYsZyl9O2Zvcih2YXIgZSBpbiBhKW1bZV09YVtlXTtiPW51bGx9fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5kb2N1bWVudEVsZW1lbnQsYj1hLm1hdGNoZXNTZWxlY3Rvcnx8YS5tb3pNYXRjaGVzU2VsZWN0b3J8fGEud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxhLm1zTWF0Y2hlc1NlbGVjdG9yO2lmKGIpe3ZhciBkPSFiLmNhbGwoYy5jcmVhdGVFbGVtZW50KCJkaXYiKSwiZGl2IiksZT0hMTt0cnl7Yi5jYWxsKGMuZG9jdW1lbnRFbGVtZW50LCJbdGVzdCE9JyddOnNpenpsZSIpfWNhdGNoKGYpe2U9ITB9bS5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oYSxjKXtjPWMucmVwbGFjZSgvXD1ccyooW14nIlxdXSopXHMqXF0vZywiPSckMSddIik7aWYoIW0uaXNYTUwoYSkpdHJ5e2lmKGV8fCFvLm1hdGNoLlBTRVVETy50ZXN0KGMpJiYhLyE9Ly50ZXN0KGMpKXt2YXIgZj1iLmNhbGwoYSxjKTtpZihmfHwhZHx8YS5kb2N1bWVudCYmYS5kb2N1bWVudC5ub2RlVHlwZSE9PTExKXJldHVybiBmfX1jYXRjaChnKXt9cmV0dXJuIG0oYyxudWxsLG51bGwsW2FdKS5sZW5ndGg+MH19fSgpLGZ1bmN0aW9uKCl7dmFyIGE9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKTthLmlubmVySFRNTD0iPGRpdiBjbGFzcz0ndGVzdCBlJz48L2Rpdj48ZGl2IGNsYXNzPSd0ZXN0Jz48L2Rpdj4iO2lmKCEhYS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lJiZhLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGghPT0wKXthLmxhc3RDaGlsZC5jbGFzc05hbWU9ImUiO2lmKGEuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD09PTEpcmV0dXJuO28ub3JkZXIuc3BsaWNlKDEsMCwiQ0xBU1MiKSxvLmZpbmQuQ0xBU1M9ZnVuY3Rpb24oYSxiLGMpe2lmKHR5cGVvZiBiLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPSJ1bmRlZmluZWQiJiYhYylyZXR1cm4gYi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGFbMV0pfSxhPW51bGx9fSgpLGMuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zP20uY29udGFpbnM9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSE9PWImJihhLmNvbnRhaW5zP2EuY29udGFpbnMoYik6ITApfTpjLmRvY3VtZW50RWxlbWVudC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9tLmNvbnRhaW5zPWZ1bmN0aW9uKGEsYil7cmV0dXJuISEoYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSYxNil9Om0uY29udGFpbnM9ZnVuY3Rpb24oKXtyZXR1cm4hMX0sbS5pc1hNTD1mdW5jdGlvbihhKXt2YXIgYj0oYT9hLm93bmVyRG9jdW1lbnR8fGE6MCkuZG9jdW1lbnRFbGVtZW50O3JldHVybiBiP2Iubm9kZU5hbWUhPT0iSFRNTCI6ITF9O3ZhciB5PWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPVtdLGY9IiIsZz1iLm5vZGVUeXBlP1tiXTpiO3doaWxlKGQ9by5tYXRjaC5QU0VVRE8uZXhlYyhhKSlmKz1kWzBdLGE9YS5yZXBsYWNlKG8ubWF0Y2guUFNFVURPLCIiKTthPW8ucmVsYXRpdmVbYV0/YSsiKiI6YTtmb3IodmFyIGg9MCxpPWcubGVuZ3RoO2g8aTtoKyspbShhLGdbaF0sZSxjKTtyZXR1cm4gbS5maWx0ZXIoZixlKX07bS5hdHRyPWYuYXR0cixtLnNlbGVjdG9ycy5hdHRyTWFwPXt9LGYuZmluZD1tLGYuZXhwcj1tLnNlbGVjdG9ycyxmLmV4cHJbIjoiXT1mLmV4cHIuZmlsdGVycyxmLnVuaXF1ZT1tLnVuaXF1ZVNvcnQsZi50ZXh0PW0uZ2V0VGV4dCxmLmlzWE1MRG9jPW0uaXNYTUwsZi5jb250YWlucz1tLmNvbnRhaW5zfSgpO3ZhciBMPS9VbnRpbCQvLE09L14oPzpwYXJlbnRzfHByZXZVbnRpbHxwcmV2QWxsKS8sTj0vLC8sTz0vXi5bXjojXFtcLixdKiQvLFA9QXJyYXkucHJvdG90eXBlLnNsaWNlLFE9Zi5leHByLm1hdGNoLmdsb2JhbFBPUyxSPXtjaGlsZHJlbjohMCxjb250ZW50czohMCxuZXh0OiEwLHByZXY6ITB9O2YuZm4uZXh0ZW5kKHtmaW5kOmZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMsYyxkO2lmKHR5cGVvZiBhIT0ic3RyaW5nIilyZXR1cm4gZihhKS5maWx0ZXIoZnVuY3Rpb24oKXtmb3IoYz0wLGQ9Yi5sZW5ndGg7YzxkO2MrKylpZihmLmNvbnRhaW5zKGJbY10sdGhpcykpcmV0dXJuITB9KTt2YXIgZT10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsYSksZyxoLGk7Zm9yKGM9MCxkPXRoaXMubGVuZ3RoO2M8ZDtjKyspe2c9ZS5sZW5ndGgsZi5maW5kKGEsdGhpc1tjXSxlKTtpZihjPjApZm9yKGg9ZztoPGUubGVuZ3RoO2grKylmb3IoaT0wO2k8ZztpKyspaWYoZVtpXT09PWVbaF0pe2Uuc3BsaWNlKGgtLSwxKTticmVha319cmV0dXJuIGV9LGhhczpmdW5jdGlvbihhKXt2YXIgYj1mKGEpO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih2YXIgYT0wLGM9Yi5sZW5ndGg7YTxjO2ErKylpZihmLmNvbnRhaW5zKHRoaXMsYlthXSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLnB1c2hTdGFjayhUKHRoaXMsYSwhMSksIm5vdCIsYSl9LGZpbHRlcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soVCh0aGlzLGEsITApLCJmaWx0ZXIiLGEpfSxpczpmdW5jdGlvbihhKXtyZXR1cm4hIWEmJih0eXBlb2YgYT09InN0cmluZyI/US50ZXN0KGEpP2YoYSx0aGlzLmNvbnRleHQpLmluZGV4KHRoaXNbMF0pPj0wOmYuZmlsdGVyKGEsdGhpcykubGVuZ3RoPjA6dGhpcy5maWx0ZXIoYSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGEsYil7dmFyIGM9W10sZCxlLGc9dGhpc1swXTtpZihmLmlzQXJyYXkoYSkpe3ZhciBoPTE7d2hpbGUoZyYmZy5vd25lckRvY3VtZW50JiZnIT09Yil7Zm9yKGQ9MDtkPGEubGVuZ3RoO2QrKylmKGcpLmlzKGFbZF0pJiZjLnB1c2goe3NlbGVjdG9yOmFbZF0sZWxlbTpnLGxldmVsOmh9KTtnPWcucGFyZW50Tm9kZSxoKyt9cmV0dXJuIGN9dmFyIGk9US50ZXN0KGEpfHx0eXBlb2YgYSE9InN0cmluZyI/ZihhLGJ8fHRoaXMuY29udGV4dCk6MDtmb3IoZD0wLGU9dGhpcy5sZW5ndGg7ZDxlO2QrKyl7Zz10aGlzW2RdO3doaWxlKGcpe2lmKGk/aS5pbmRleChnKT4tMTpmLmZpbmQubWF0Y2hlc1NlbGVjdG9yKGcsYSkpe2MucHVzaChnKTticmVha31nPWcucGFyZW50Tm9kZTtpZighZ3x8IWcub3duZXJEb2N1bWVudHx8Zz09PWJ8fGcubm9kZVR5cGU9PT0xMSlicmVha319Yz1jLmxlbmd0aD4xP2YudW5pcXVlKGMpOmM7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGMsImNsb3Nlc3QiLGEpfSxpbmRleDpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4gdGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlP3RoaXMucHJldkFsbCgpLmxlbmd0aDotMTtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGYuaW5BcnJheSh0aGlzWzBdLGYoYSkpO3JldHVybiBmLmluQXJyYXkoYS5qcXVlcnk/YVswXTphLHRoaXMpfSxhZGQ6ZnVuY3Rpb24oYSxiKXt2YXIgYz10eXBlb2YgYT09InN0cmluZyI/ZihhLGIpOmYubWFrZUFycmF5KGEmJmEubm9kZVR5cGU/W2FdOmEpLGQ9Zi5tZXJnZSh0aGlzLmdldCgpLGMpO3JldHVybiB0aGlzLnB1c2hTdGFjayhTKGNbMF0pfHxTKGRbMF0pP2Q6Zi51bmlxdWUoZCkpfSxhbmRTZWxmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWRkKHRoaXMucHJldk9iamVjdCl9fSksZi5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oYSl7dmFyIGI9YS5wYXJlbnROb2RlO3JldHVybiBiJiZiLm5vZGVUeXBlIT09MTE/YjpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGEpe3JldHVybiBmLmRpcihhLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsInBhcmVudE5vZGUiLGMpfSxuZXh0OmZ1bmN0aW9uKGEpe3JldHVybiBmLm50aChhLDIsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubnRoKGEsMiwicHJldmlvdXNTaWJsaW5nIil9LG5leHRBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsIm5leHRTaWJsaW5nIil9LHByZXZBbGw6ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZGlyKGEsInByZXZpb3VzU2libGluZyIpfSxuZXh0VW50aWw6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmLmRpcihhLCJuZXh0U2libGluZyIsYyl9LHByZXZVbnRpbDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGYuZGlyKGEsInByZXZpb3VzU2libGluZyIsYyl9LHNpYmxpbmdzOmZ1bmN0aW9uKGEpe3JldHVybiBmLnNpYmxpbmcoKGEucGFyZW50Tm9kZXx8e30pLmZpcnN0Q2hpbGQsYSl9LGNoaWxkcmVuOmZ1bmN0aW9uKGEpe3JldHVybiBmLnNpYmxpbmcoYS5maXJzdENoaWxkKX0sY29udGVudHM6ZnVuY3Rpb24oYSl7cmV0dXJuIGYubm9kZU5hbWUoYSwiaWZyYW1lIik/YS5jb250ZW50RG9jdW1lbnR8fGEuY29udGVudFdpbmRvdy5kb2N1bWVudDpmLm1ha2VBcnJheShhLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGMsZCl7dmFyIGU9Zi5tYXAodGhpcyxiLGMpO0wudGVzdChhKXx8KGQ9YyksZCYmdHlwZW9mIGQ9PSJzdHJpbmciJiYoZT1mLmZpbHRlcihkLGUpKSxlPXRoaXMubGVuZ3RoPjEmJiFSW2FdP2YudW5pcXVlKGUpOmUsKHRoaXMubGVuZ3RoPjF8fE4udGVzdChkKSkmJk0udGVzdChhKSYmKGU9ZS5yZXZlcnNlKCkpO3JldHVybiB0aGlzLnB1c2hTdGFjayhlLGEsUC5jYWxsKGFyZ3VtZW50cykuam9pbigiLCIpKX19KSxmLmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGEsYixjKXtjJiYoYT0iOm5vdCgiK2ErIikiKTtyZXR1cm4gYi5sZW5ndGg9PT0xP2YuZmluZC5tYXRjaGVzU2VsZWN0b3IoYlswXSxhKT9bYlswXV06W106Zi5maW5kLm1hdGNoZXMoYSxiKX0sZGlyOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1bXSxnPWFbY107d2hpbGUoZyYmZy5ub2RlVHlwZSE9PTkmJihkPT09Ynx8Zy5ub2RlVHlwZSE9PTF8fCFmKGcpLmlzKGQpKSlnLm5vZGVUeXBlPT09MSYmZS5wdXNoKGcpLGc9Z1tjXTtyZXR1cm4gZX0sbnRoOmZ1bmN0aW9uKGEsYixjLGQpe2I9Ynx8MTt2YXIgZT0wO2Zvcig7YTthPWFbY10paWYoYS5ub2RlVHlwZT09PTEmJisrZT09PWIpYnJlYWs7cmV0dXJuIGF9LHNpYmxpbmc6ZnVuY3Rpb24oYSxiKXt2YXIgYz1bXTtmb3IoO2E7YT1hLm5leHRTaWJsaW5nKWEubm9kZVR5cGU9PT0xJiZhIT09YiYmYy5wdXNoKGEpO3JldHVybiBjfX0pO3ZhciBWPSJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfGhlYWRlcnxoZ3JvdXB8bWFya3xtZXRlcnxuYXZ8b3V0cHV0fHByb2dyZXNzfHNlY3Rpb258c3VtbWFyeXx0aW1lfHZpZGVvIixXPS8galF1ZXJ5XGQrPSIoPzpcZCt8bnVsbCkiL2csWD0vXlxzKy8sWT0vPCg/IWFyZWF8YnJ8Y29sfGVtYmVkfGhyfGltZ3xpbnB1dHxsaW5rfG1ldGF8cGFyYW0pKChbXHc6XSspW14+XSopXC8+L2lnLFo9LzwoW1x3Ol0rKS8sJD0vPHRib2R5L2ksXz0vPHwmIz9cdys7LyxiYT0vPCg/OnNjcmlwdHxzdHlsZSkvaSxiYj0vPCg/OnNjcmlwdHxvYmplY3R8ZW1iZWR8b3B0aW9ufHN0eWxlKS9pLGJjPW5ldyBSZWdFeHAoIjwoPzoiK1YrIilbXFxzLz5dIiwiaSIpLGJkPS9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLGJlPS9cLyhqYXZhfGVjbWEpc2NyaXB0L2ksYmY9L15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKS8sYmc9e29wdGlvbjpbMSwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPiIsIjwvc2VsZWN0PiJdLGxlZ2VuZDpbMSwiPGZpZWxkc2V0PiIsIjwvZmllbGRzZXQ+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSx0ZDpbMywiPHRhYmxlPjx0Ym9keT48dHI+IiwiPC90cj48L3Rib2R5PjwvdGFibGU+Il0sY29sOlsyLCI8dGFibGU+PHRib2R5PjwvdGJvZHk+PGNvbGdyb3VwPiIsIjwvY29sZ3JvdXA+PC90YWJsZT4iXSxhcmVhOlsxLCI8bWFwPiIsIjwvbWFwPiJdLF9kZWZhdWx0OlswLCIiLCIiXX0sYmg9VShjKTtiZy5vcHRncm91cD1iZy5vcHRpb24sYmcudGJvZHk9YmcudGZvb3Q9YmcuY29sZ3JvdXA9YmcuY2FwdGlvbj1iZy50aGVhZCxiZy50aD1iZy50ZCxmLnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KGJnLl9kZWZhdWx0PVsxLCJkaXY8ZGl2PiIsIjwvZGl2PiJdKSxmLmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihhKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxmdW5jdGlvbihhKXtyZXR1cm4gYT09PWI/Zi50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8YykuY3JlYXRlVGV4dE5vZGUoYSkpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHdyYXBBbGw6ZnVuY3Rpb24oYSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7Zih0aGlzKS53cmFwQWxsKGEuY2FsbCh0aGlzLGIpKX0pO2lmKHRoaXNbMF0pe3ZhciBiPWYoYSx0aGlzWzBdLm93bmVyRG9jdW1lbnQpLmVxKDApLmNsb25lKCEwKTt0aGlzWzBdLnBhcmVudE5vZGUmJmIuaW5zZXJ0QmVmb3JlKHRoaXNbMF0pLGIubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpczt3aGlsZShhLmZpcnN0Q2hpbGQmJmEuZmlyc3RDaGlsZC5ub2RlVHlwZT09PTEpYT1hLmZpcnN0Q2hpbGQ7cmV0dXJuIGF9KS5hcHBlbmQodGhpcyl9cmV0dXJuIHRoaXN9LHdyYXBJbm5lcjpmdW5jdGlvbihhKXtpZihmLmlzRnVuY3Rpb24oYSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihiKXtmKHRoaXMpLndyYXBJbm5lcihhLmNhbGwodGhpcyxiKSl9KTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGI9Zih0aGlzKSxjPWIuY29udGVudHMoKTtjLmxlbmd0aD9jLndyYXBBbGwoYSk6Yi5hcHBlbmQoYSl9KX0sd3JhcDpmdW5jdGlvbihhKXt2YXIgYj1mLmlzRnVuY3Rpb24oYSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihjKXtmKHRoaXMpLndyYXBBbGwoYj9hLmNhbGwodGhpcyxjKTphKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7Zi5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fGYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oYSl7dGhpcy5ub2RlVHlwZT09PTEmJnRoaXMuYXBwZW5kQ2hpbGQoYSl9KX0scHJlcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMCxmdW5jdGlvbihhKXt0aGlzLm5vZGVUeXBlPT09MSYmdGhpcy5pbnNlcnRCZWZvcmUoYSx0aGlzLmZpcnN0Q2hpbGQpfSl9LGJlZm9yZTpmdW5jdGlvbigpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITEsZnVuY3Rpb24oYSl7dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLHRoaXMpfSk7aWYoYXJndW1lbnRzLmxlbmd0aCl7dmFyIGE9ZgouY2xlYW4oYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSx0aGlzLnRvQXJyYXkoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGEsImJlZm9yZSIsYXJndW1lbnRzKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYodGhpc1swXSYmdGhpc1swXS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihhKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgYT10aGlzLnB1c2hTdGFjayh0aGlzLCJhZnRlciIsYXJndW1lbnRzKTthLnB1c2guYXBwbHkoYSxmLmNsZWFuKGFyZ3VtZW50cykpO3JldHVybiBhfX0scmVtb3ZlOmZ1bmN0aW9uKGEsYil7Zm9yKHZhciBjPTAsZDsoZD10aGlzW2NdKSE9bnVsbDtjKyspaWYoIWF8fGYuZmlsdGVyKGEsW2RdKS5sZW5ndGgpIWImJmQubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEoZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxmLmNsZWFuRGF0YShbZF0pKSxkLnBhcmVudE5vZGUmJmQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkKTtyZXR1cm4gdGhpc30sZW1wdHk6ZnVuY3Rpb24oKXtmb3IodmFyIGE9MCxiOyhiPXRoaXNbYV0pIT1udWxsO2ErKyl7Yi5ub2RlVHlwZT09PTEmJmYuY2xlYW5EYXRhKGIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSk7d2hpbGUoYi5maXJzdENoaWxkKWIucmVtb3ZlQ2hpbGQoYi5maXJzdENoaWxkKX1yZXR1cm4gdGhpc30sY2xvbmU6ZnVuY3Rpb24oYSxiKXthPWE9PW51bGw/ITE6YSxiPWI9PW51bGw/YTpiO3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3JldHVybiBmLmNsb25lKHRoaXMsYSxiKX0pfSxodG1sOmZ1bmN0aW9uKGEpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEpe3ZhciBjPXRoaXNbMF18fHt9LGQ9MCxlPXRoaXMubGVuZ3RoO2lmKGE9PT1iKXJldHVybiBjLm5vZGVUeXBlPT09MT9jLmlubmVySFRNTC5yZXBsYWNlKFcsIiIpOm51bGw7aWYodHlwZW9mIGE9PSJzdHJpbmciJiYhYmEudGVzdChhKSYmKGYuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZXx8IVgudGVzdChhKSkmJiFiZ1soWi5leGVjKGEpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7YT1hLnJlcGxhY2UoWSwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7ZDxlO2QrKyljPXRoaXNbZF18fHt9LGMubm9kZVR5cGU9PT0xJiYoZi5jbGVhbkRhdGEoYy5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKSxjLmlubmVySFRNTD1hKTtjPTB9Y2F0Y2goZyl7fX1jJiZ0aGlzLmVtcHR5KCkuYXBwZW5kKGEpfSxudWxsLGEsYXJndW1lbnRzLmxlbmd0aCl9LHJlcGxhY2VXaXRoOmZ1bmN0aW9uKGEpe2lmKHRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZSl7aWYoZi5pc0Z1bmN0aW9uKGEpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oYil7dmFyIGM9Zih0aGlzKSxkPWMuaHRtbCgpO2MucmVwbGFjZVdpdGgoYS5jYWxsKHRoaXMsYixkKSl9KTt0eXBlb2YgYSE9InN0cmluZyImJihhPWYoYSkuZGV0YWNoKCkpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgYj10aGlzLm5leHRTaWJsaW5nLGM9dGhpcy5wYXJlbnROb2RlO2YodGhpcykucmVtb3ZlKCksYj9mKGIpLmJlZm9yZShhKTpmKGMpLmFwcGVuZChhKX0pfXJldHVybiB0aGlzLmxlbmd0aD90aGlzLnB1c2hTdGFjayhmKGYuaXNGdW5jdGlvbihhKT9hKCk6YSksInJlcGxhY2VXaXRoIixhKTp0aGlzfSxkZXRhY2g6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMucmVtb3ZlKGEsITApfSxkb21NYW5pcDpmdW5jdGlvbihhLGMsZCl7dmFyIGUsZyxoLGksaj1hWzBdLGs9W107aWYoIWYuc3VwcG9ydC5jaGVja0Nsb25lJiZhcmd1bWVudHMubGVuZ3RoPT09MyYmdHlwZW9mIGo9PSJzdHJpbmciJiZiZC50ZXN0KGopKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXtmKHRoaXMpLmRvbU1hbmlwKGEsYyxkLCEwKX0pO2lmKGYuaXNGdW5jdGlvbihqKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBnPWYodGhpcyk7YVswXT1qLmNhbGwodGhpcyxlLGM/Zy5odG1sKCk6YiksZy5kb21NYW5pcChhLGMsZCl9KTtpZih0aGlzWzBdKXtpPWomJmoucGFyZW50Tm9kZSxmLnN1cHBvcnQucGFyZW50Tm9kZSYmaSYmaS5ub2RlVHlwZT09PTExJiZpLmNoaWxkTm9kZXMubGVuZ3RoPT09dGhpcy5sZW5ndGg/ZT17ZnJhZ21lbnQ6aX06ZT1mLmJ1aWxkRnJhZ21lbnQoYSx0aGlzLGspLGg9ZS5mcmFnbWVudCxoLmNoaWxkTm9kZXMubGVuZ3RoPT09MT9nPWg9aC5maXJzdENoaWxkOmc9aC5maXJzdENoaWxkO2lmKGcpe2M9YyYmZi5ub2RlTmFtZShnLCJ0ciIpO2Zvcih2YXIgbD0wLG09dGhpcy5sZW5ndGgsbj1tLTE7bDxtO2wrKylkLmNhbGwoYz9iaSh0aGlzW2xdLGcpOnRoaXNbbF0sZS5jYWNoZWFibGV8fG0+MSYmbDxuP2YuY2xvbmUoaCwhMCwhMCk6aCl9ay5sZW5ndGgmJmYuZWFjaChrLGZ1bmN0aW9uKGEsYil7Yi5zcmM/Zi5hamF4KHt0eXBlOiJHRVQiLGdsb2JhbDohMSx1cmw6Yi5zcmMsYXN5bmM6ITEsZGF0YVR5cGU6InNjcmlwdCJ9KTpmLmdsb2JhbEV2YWwoKGIudGV4dHx8Yi50ZXh0Q29udGVudHx8Yi5pbm5lckhUTUx8fCIiKS5yZXBsYWNlKGJmLCIvKiQwKi8iKSksYi5wYXJlbnROb2RlJiZiLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYil9KX1yZXR1cm4gdGhpc319KSxmLmJ1aWxkRnJhZ21lbnQ9ZnVuY3Rpb24oYSxiLGQpe3ZhciBlLGcsaCxpLGo9YVswXTtiJiZiWzBdJiYoaT1iWzBdLm93bmVyRG9jdW1lbnR8fGJbMF0pLGkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudHx8KGk9YyksYS5sZW5ndGg9PT0xJiZ0eXBlb2Ygaj09InN0cmluZyImJmoubGVuZ3RoPDUxMiYmaT09PWMmJmouY2hhckF0KDApPT09IjwiJiYhYmIudGVzdChqKSYmKGYuc3VwcG9ydC5jaGVja0Nsb25lfHwhYmQudGVzdChqKSkmJihmLnN1cHBvcnQuaHRtbDVDbG9uZXx8IWJjLnRlc3QoaikpJiYoZz0hMCxoPWYuZnJhZ21lbnRzW2pdLGgmJmghPT0xJiYoZT1oKSksZXx8KGU9aS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksZi5jbGVhbihhLGksZSxkKSksZyYmKGYuZnJhZ21lbnRzW2pdPWg/ZToxKTtyZXR1cm57ZnJhZ21lbnQ6ZSxjYWNoZWFibGU6Z319LGYuZnJhZ21lbnRzPXt9LGYuZWFjaCh7YXBwZW5kVG86ImFwcGVuZCIscHJlcGVuZFRvOiJwcmVwZW5kIixpbnNlcnRCZWZvcmU6ImJlZm9yZSIsaW5zZXJ0QWZ0ZXI6ImFmdGVyIixyZXBsYWNlQWxsOiJyZXBsYWNlV2l0aCJ9LGZ1bmN0aW9uKGEsYil7Zi5mblthXT1mdW5jdGlvbihjKXt2YXIgZD1bXSxlPWYoYyksZz10aGlzLmxlbmd0aD09PTEmJnRoaXNbMF0ucGFyZW50Tm9kZTtpZihnJiZnLm5vZGVUeXBlPT09MTEmJmcuY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiZlLmxlbmd0aD09PTEpe2VbYl0odGhpc1swXSk7cmV0dXJuIHRoaXN9Zm9yKHZhciBoPTAsaT1lLmxlbmd0aDtoPGk7aCsrKXt2YXIgaj0oaD4wP3RoaXMuY2xvbmUoITApOnRoaXMpLmdldCgpO2YoZVtoXSlbYl0oaiksZD1kLmNvbmNhdChqKX1yZXR1cm4gdGhpcy5wdXNoU3RhY2soZCxhLGUuc2VsZWN0b3IpfX0pLGYuZXh0ZW5kKHtjbG9uZTpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZSxnLGg9Zi5zdXBwb3J0Lmh0bWw1Q2xvbmV8fGYuaXNYTUxEb2MoYSl8fCFiYy50ZXN0KCI8IithLm5vZGVOYW1lKyI+Iik/YS5jbG9uZU5vZGUoITApOmJvKGEpO2lmKCghZi5zdXBwb3J0Lm5vQ2xvbmVFdmVudHx8IWYuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihhLm5vZGVUeXBlPT09MXx8YS5ub2RlVHlwZT09PTExKSYmIWYuaXNYTUxEb2MoYSkpe2JrKGEsaCksZD1ibChhKSxlPWJsKGgpO2ZvcihnPTA7ZFtnXTsrK2cpZVtnXSYmYmsoZFtnXSxlW2ddKX1pZihiKXtiaihhLGgpO2lmKGMpe2Q9YmwoYSksZT1ibChoKTtmb3IoZz0wO2RbZ107KytnKWJqKGRbZ10sZVtnXSl9fWQ9ZT1udWxsO3JldHVybiBofSxjbGVhbjpmdW5jdGlvbihhLGIsZCxlKXt2YXIgZyxoLGksaj1bXTtiPWJ8fGMsdHlwZW9mIGIuY3JlYXRlRWxlbWVudD09InVuZGVmaW5lZCImJihiPWIub3duZXJEb2N1bWVudHx8YlswXSYmYlswXS5vd25lckRvY3VtZW50fHxjKTtmb3IodmFyIGs9MCxsOyhsPWFba10pIT1udWxsO2srKyl7dHlwZW9mIGw9PSJudW1iZXIiJiYobCs9IiIpO2lmKCFsKWNvbnRpbnVlO2lmKHR5cGVvZiBsPT0ic3RyaW5nIilpZighXy50ZXN0KGwpKWw9Yi5jcmVhdGVUZXh0Tm9kZShsKTtlbHNle2w9bC5yZXBsYWNlKFksIjwkMT48LyQyPiIpO3ZhciBtPShaLmV4ZWMobCl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksbj1iZ1ttXXx8YmcuX2RlZmF1bHQsbz1uWzBdLHA9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxxPWJoLmNoaWxkTm9kZXMscjtiPT09Yz9iaC5hcHBlbmRDaGlsZChwKTpVKGIpLmFwcGVuZENoaWxkKHApLHAuaW5uZXJIVE1MPW5bMV0rbCtuWzJdO3doaWxlKG8tLSlwPXAubGFzdENoaWxkO2lmKCFmLnN1cHBvcnQudGJvZHkpe3ZhciBzPSQudGVzdChsKSx0PW09PT0idGFibGUiJiYhcz9wLmZpcnN0Q2hpbGQmJnAuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOm5bMV09PT0iPHRhYmxlPiImJiFzP3AuY2hpbGROb2RlczpbXTtmb3IoaT10Lmxlbmd0aC0xO2k+PTA7LS1pKWYubm9kZU5hbWUodFtpXSwidGJvZHkiKSYmIXRbaV0uY2hpbGROb2Rlcy5sZW5ndGgmJnRbaV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0W2ldKX0hZi5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZYLnRlc3QobCkmJnAuaW5zZXJ0QmVmb3JlKGIuY3JlYXRlVGV4dE5vZGUoWC5leGVjKGwpWzBdKSxwLmZpcnN0Q2hpbGQpLGw9cC5jaGlsZE5vZGVzLHAmJihwLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocCkscS5sZW5ndGg+MCYmKHI9cVtxLmxlbmd0aC0xXSxyJiZyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSkpfXZhciB1O2lmKCFmLnN1cHBvcnQuYXBwZW5kQ2hlY2tlZClpZihsWzBdJiZ0eXBlb2YgKHU9bC5sZW5ndGgpPT0ibnVtYmVyIilmb3IoaT0wO2k8dTtpKyspYm4obFtpXSk7ZWxzZSBibihsKTtsLm5vZGVUeXBlP2oucHVzaChsKTpqPWYubWVyZ2UoaixsKX1pZihkKXtnPWZ1bmN0aW9uKGEpe3JldHVybiFhLnR5cGV8fGJlLnRlc3QoYS50eXBlKX07Zm9yKGs9MDtqW2tdO2srKyl7aD1qW2tdO2lmKGUmJmYubm9kZU5hbWUoaCwic2NyaXB0IikmJighaC50eXBlfHxiZS50ZXN0KGgudHlwZSkpKWUucHVzaChoLnBhcmVudE5vZGU/aC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGgpOmgpO2Vsc2V7aWYoaC5ub2RlVHlwZT09PTEpe3ZhciB2PWYuZ3JlcChoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKSxnKTtqLnNwbGljZS5hcHBseShqLFtrKzEsMF0uY29uY2F0KHYpKX1kLmFwcGVuZENoaWxkKGgpfX19cmV0dXJuIGp9LGNsZWFuRGF0YTpmdW5jdGlvbihhKXt2YXIgYixjLGQ9Zi5jYWNoZSxlPWYuZXZlbnQuc3BlY2lhbCxnPWYuc3VwcG9ydC5kZWxldGVFeHBhbmRvO2Zvcih2YXIgaD0wLGk7KGk9YVtoXSkhPW51bGw7aCsrKXtpZihpLm5vZGVOYW1lJiZmLm5vRGF0YVtpLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCldKWNvbnRpbnVlO2M9aVtmLmV4cGFuZG9dO2lmKGMpe2I9ZFtjXTtpZihiJiZiLmV2ZW50cyl7Zm9yKHZhciBqIGluIGIuZXZlbnRzKWVbal0/Zi5ldmVudC5yZW1vdmUoaSxqKTpmLnJlbW92ZUV2ZW50KGksaixiLmhhbmRsZSk7Yi5oYW5kbGUmJihiLmhhbmRsZS5lbGVtPW51bGwpfWc/ZGVsZXRlIGlbZi5leHBhbmRvXTppLnJlbW92ZUF0dHJpYnV0ZSYmaS5yZW1vdmVBdHRyaWJ1dGUoZi5leHBhbmRvKSxkZWxldGUgZFtjXX19fX0pO3ZhciBicD0vYWxwaGFcKFteKV0qXCkvaSxicT0vb3BhY2l0eT0oW14pXSopLyxicj0vKFtBLVpdfF5tcykvZyxicz0vXltcLStdPyg/OlxkKlwuKT9cZCskL2ksYnQ9L14tPyg/OlxkKlwuKT9cZCsoPyFweClbXlxkXHNdKyQvaSxidT0vXihbXC0rXSk9KFtcLSsuXGRlXSspLyxidj0vXm1hcmdpbi8sYnc9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LGJ4PVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sYnksYnosYkE7Zi5mbi5jc3M9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5hY2Nlc3ModGhpcyxmdW5jdGlvbihhLGMsZCl7cmV0dXJuIGQhPT1iP2Yuc3R5bGUoYSxjLGQpOmYuY3NzKGEsYyl9LGEsYyxhcmd1bWVudHMubGVuZ3RoPjEpfSxmLmV4dGVuZCh7Y3NzSG9va3M6e29wYWNpdHk6e2dldDpmdW5jdGlvbihhLGIpe2lmKGIpe3ZhciBjPWJ5KGEsIm9wYWNpdHkiKTtyZXR1cm4gYz09PSIiPyIxIjpjfXJldHVybiBhLnN0eWxlLm9wYWNpdHl9fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6Zi5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihhLGMsZCxlKXtpZighIWEmJmEubm9kZVR5cGUhPT0zJiZhLm5vZGVUeXBlIT09OCYmISFhLnN0eWxlKXt2YXIgZyxoLGk9Zi5jYW1lbENhc2UoYyksaj1hLnN0eWxlLGs9Zi5jc3NIb29rc1tpXTtjPWYuY3NzUHJvcHNbaV18fGk7aWYoZD09PWIpe2lmKGsmJiJnZXQiaW4gayYmKGc9ay5nZXQoYSwhMSxlKSkhPT1iKXJldHVybiBnO3JldHVybiBqW2NdfWg9dHlwZW9mIGQsaD09PSJzdHJpbmciJiYoZz1idS5leGVjKGQpKSYmKGQ9KyhnWzFdKzEpKitnWzJdK3BhcnNlRmxvYXQoZi5jc3MoYSxjKSksaD0ibnVtYmVyIik7aWYoZD09bnVsbHx8aD09PSJudW1iZXIiJiZpc05hTihkKSlyZXR1cm47aD09PSJudW1iZXIiJiYhZi5jc3NOdW1iZXJbaV0mJihkKz0icHgiKTtpZigha3x8ISgic2V0ImluIGspfHwoZD1rLnNldChhLGQpKSE9PWIpdHJ5e2pbY109ZH1jYXRjaChsKXt9fX0sY3NzOmZ1bmN0aW9uKGEsYyxkKXt2YXIgZSxnO2M9Zi5jYW1lbENhc2UoYyksZz1mLmNzc0hvb2tzW2NdLGM9Zi5jc3NQcm9wc1tjXXx8YyxjPT09ImNzc0Zsb2F0IiYmKGM9ImZsb2F0Iik7aWYoZyYmImdldCJpbiBnJiYoZT1nLmdldChhLCEwLGQpKSE9PWIpcmV0dXJuIGU7aWYoYnkpcmV0dXJuIGJ5KGEsYyl9LHN3YXA6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXt9LGUsZjtmb3IoZiBpbiBiKWRbZl09YS5zdHlsZVtmXSxhLnN0eWxlW2ZdPWJbZl07ZT1jLmNhbGwoYSk7Zm9yKGYgaW4gYilhLnN0eWxlW2ZdPWRbZl07cmV0dXJuIGV9fSksZi5jdXJDU1M9Zi5jc3MsYy5kZWZhdWx0VmlldyYmYy5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlJiYoYno9ZnVuY3Rpb24oYSxiKXt2YXIgYyxkLGUsZyxoPWEuc3R5bGU7Yj1iLnJlcGxhY2UoYnIsIi0kMSIpLnRvTG93ZXJDYXNlKCksKGQ9YS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSYmKGU9ZC5nZXRDb21wdXRlZFN0eWxlKGEsbnVsbCkpJiYoYz1lLmdldFByb3BlcnR5VmFsdWUoYiksYz09PSIiJiYhZi5jb250YWlucyhhLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LGEpJiYoYz1mLnN0eWxlKGEsYikpKSwhZi5zdXBwb3J0LnBpeGVsTWFyZ2luJiZlJiZidi50ZXN0KGIpJiZidC50ZXN0KGMpJiYoZz1oLndpZHRoLGgud2lkdGg9YyxjPWUud2lkdGgsaC53aWR0aD1nKTtyZXR1cm4gY30pLGMuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSYmKGJBPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlLGY9YS5jdXJyZW50U3R5bGUmJmEuY3VycmVudFN0eWxlW2JdLGc9YS5zdHlsZTtmPT1udWxsJiZnJiYoZT1nW2JdKSYmKGY9ZSksYnQudGVzdChmKSYmKGM9Zy5sZWZ0LGQ9YS5ydW50aW1lU3R5bGUmJmEucnVudGltZVN0eWxlLmxlZnQsZCYmKGEucnVudGltZVN0eWxlLmxlZnQ9YS5jdXJyZW50U3R5bGUubGVmdCksZy5sZWZ0PWI9PT0iZm9udFNpemUiPyIxZW0iOmYsZj1nLnBpeGVsTGVmdCsicHgiLGcubGVmdD1jLGQmJihhLnJ1bnRpbWVTdHlsZS5sZWZ0PWQpKTtyZXR1cm4gZj09PSIiPyJhdXRvIjpmfSksYnk9Ynp8fGJBLGYuZWFjaChbImhlaWdodCIsIndpZHRoIl0sZnVuY3Rpb24oYSxiKXtmLmNzc0hvb2tzW2JdPXtnZXQ6ZnVuY3Rpb24oYSxjLGQpe2lmKGMpcmV0dXJuIGEub2Zmc2V0V2lkdGghPT0wP2JCKGEsYixkKTpmLnN3YXAoYSxidyxmdW5jdGlvbigpe3JldHVybiBiQihhLGIsZCl9KX0sc2V0OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGJzLnRlc3QoYik/YisicHgiOmJ9fX0pLGYuc3VwcG9ydC5vcGFjaXR5fHwoZi5jc3NIb29rcy5vcGFjaXR5PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYnEudGVzdCgoYiYmYS5jdXJyZW50U3R5bGU/YS5jdXJyZW50U3R5bGUuZmlsdGVyOmEuc3R5bGUuZmlsdGVyKXx8IiIpP3BhcnNlRmxvYXQoUmVnRXhwLiQxKS8xMDArIiI6Yj8iMSI6IiJ9LHNldDpmdW5jdGlvbihhLGIpe3ZhciBjPWEuc3R5bGUsZD1hLmN1cnJlbnRTdHlsZSxlPWYuaXNOdW1lcmljKGIpPyJhbHBoYShvcGFjaXR5PSIrYioxMDArIikiOiIiLGc9ZCYmZC5maWx0ZXJ8fGMuZmlsdGVyfHwiIjtjLnpvb209MTtpZihiPj0xJiZmLnRyaW0oZy5yZXBsYWNlKGJwLCIiKSk9PT0iIil7Yy5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpO2lmKGQmJiFkLmZpbHRlcilyZXR1cm59Yy5maWx0ZXI9YnAudGVzdChnKT9nLnJlcGxhY2UoYnAsZSk6ZysiICIrZX19KSxmKGZ1bmN0aW9uKCl7Zi5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fChmLmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gZi5zd2FwKGEse2Rpc3BsYXk6ImlubGluZS1ibG9jayJ9LGZ1bmN0aW9uKCl7cmV0dXJuIGI/YnkoYSwibWFyZ2luLXJpZ2h0Iik6YS5zdHlsZS5tYXJnaW5SaWdodH0pfX0pfSksZi5leHByJiZmLmV4cHIuZmlsdGVycyYmKGYuZXhwci5maWx0ZXJzLmhpZGRlbj1mdW5jdGlvbihhKXt2YXIgYj1hLm9mZnNldFdpZHRoLGM9YS5vZmZzZXRIZWlnaHQ7cmV0dXJuIGI9PT0wJiZjPT09MHx8IWYuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJihhLnN0eWxlJiZhLnN0eWxlLmRpc3BsYXl8fGYuY3NzKGEsImRpc3BsYXkiKSk9PT0ibm9uZSJ9LGYuZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oYSl7cmV0dXJuIWYuZXhwci5maWx0ZXJzLmhpZGRlbihhKX0pLGYuZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGEsYil7Zi5jc3NIb29rc1thK2JdPXtleHBhbmQ6ZnVuY3Rpb24oYyl7dmFyIGQsZT10eXBlb2YgYz09InN0cmluZyI/Yy5zcGxpdCgiICIpOltjXSxmPXt9O2ZvcihkPTA7ZDw0O2QrKylmW2ErYnhbZF0rYl09ZVtkXXx8ZVtkLTJdfHxlWzBdO3JldHVybiBmfX19KTt2YXIgYkM9LyUyMC9nLGJEPS9cW1xdJC8sYkU9L1xyP1xuL2csYkY9LyMuKiQvLGJHPS9eKC4qPyk6WyBcdF0qKFteXHJcbl0qKVxyPyQvbWcsYkg9L14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLGJJPS9eKD86YWJvdXR8YXBwfGFwcFwtc3RvcmFnZXwuK1wtZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sYko9L14oPzpHRVR8SEVBRCkkLyxiSz0vXlwvXC8vLGJMPS9cPy8sYk09LzxzY3JpcHRcYltePF0qKD86KD8hPFwvc2NyaXB0Pik8W148XSopKjxcL3NjcmlwdD4vZ2ksYk49L14oPzpzZWxlY3R8dGV4dGFyZWEpL2ksYk89L1xzKy8sYlA9LyhbPyZdKV89W14mXSovLGJRPS9eKFtcd1wrXC5cLV0rOikoPzpcL1wvKFteXC8/IzpdKikoPzo6KFxkKykpPyk/LyxiUj1mLmZuLmxvYWQsYlM9e30sYlQ9e30sYlUsYlYsYlc9WyIqLyJdK1siKiJdO3RyeXtiVT1lLmhyZWZ9Y2F0Y2goYlgpe2JVPWMuY3JlYXRlRWxlbWVudCgiYSIpLGJVLmhyZWY9IiIsYlU9YlUuaHJlZn1iVj1iUS5leGVjKGJVLnRvTG93ZXJDYXNlKCkpfHxbXSxmLmZuLmV4dGVuZCh7bG9hZDpmdW5jdGlvbihhLGMsZCl7aWYodHlwZW9mIGEhPSJzdHJpbmciJiZiUilyZXR1cm4gYlIuYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt2YXIgZT1hLmluZGV4T2YoIiAiKTtpZihlPj0wKXt2YXIgZz1hLnNsaWNlKGUsYS5sZW5ndGgpO2E9YS5zbGljZSgwLGUpfXZhciBoPSJHRVQiO2MmJihmLmlzRnVuY3Rpb24oYyk/KGQ9YyxjPWIpOnR5cGVvZiBjPT0ib2JqZWN0IiYmKGM9Zi5wYXJhbShjLGYuYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSxoPSJQT1NUIikpO3ZhciBpPXRoaXM7Zi5hamF4KHt1cmw6YSx0eXBlOmgsZGF0YVR5cGU6Imh0bWwiLGRhdGE6Yyxjb21wbGV0ZTpmdW5jdGlvbihhLGIsYyl7Yz1hLnJlc3BvbnNlVGV4dCxhLmlzUmVzb2x2ZWQoKSYmKGEuZG9uZShmdW5jdGlvbihhKXtjPWF9KSxpLmh0bWwoZz9mKCI8ZGl2PiIpLmFwcGVuZChjLnJlcGxhY2UoYk0sIiIpKS5maW5kKGcpOmMpKSxkJiZpLmVhY2goZCxbYyxiLGFdKX19KTtyZXR1cm4gdGhpc30sc2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIGYucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50cz9mLm1ha2VBcnJheSh0aGlzLmVsZW1lbnRzKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmFtZSYmIXRoaXMuZGlzYWJsZWQmJih0aGlzLmNoZWNrZWR8fGJOLnRlc3QodGhpcy5ub2RlTmFtZSl8fGJILnRlc3QodGhpcy50eXBlKSl9KS5tYXAoZnVuY3Rpb24oYSxiKXt2YXIgYz1mKHRoaXMpLnZhbCgpO3JldHVybiBjPT1udWxsP251bGw6Zi5pc0FycmF5KGMpP2YubWFwKGMsZnVuY3Rpb24oYSxjKXtyZXR1cm57bmFtZTpiLm5hbWUsdmFsdWU6YS5yZXBsYWNlKGJFLCJcclxuIil9fSk6e25hbWU6Yi5uYW1lLHZhbHVlOmMucmVwbGFjZShiRSwiXHJcbiIpfX0pLmdldCgpfX0pLGYuZWFjaCgiYWpheFN0YXJ0IGFqYXhTdG9wIGFqYXhDb21wbGV0ZSBhamF4RXJyb3IgYWpheFN1Y2Nlc3MgYWpheFNlbmQiLnNwbGl0KCIgIiksZnVuY3Rpb24oYSxiKXtmLmZuW2JdPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLm9uKGIsYSl9fSksZi5lYWNoKFsiZ2V0IiwicG9zdCJdLGZ1bmN0aW9uKGEsYyl7ZltjXT1mdW5jdGlvbihhLGQsZSxnKXtmLmlzRnVuY3Rpb24oZCkmJihnPWd8fGUsZT1kLGQ9Yik7cmV0dXJuIGYuYWpheCh7dHlwZTpjLHVybDphLGRhdGE6ZCxzdWNjZXNzOmUsZGF0YVR5cGU6Z30pfX0pLGYuZXh0ZW5kKHtnZXRTY3JpcHQ6ZnVuY3Rpb24oYSxjKXtyZXR1cm4gZi5nZXQoYSxiLGMsInNjcmlwdCIpfSxnZXRKU09OOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gZi5nZXQoYSxiLGMsImpzb24iKX0sYWpheFNldHVwOmZ1bmN0aW9uKGEsYil7Yj9iJChhLGYuYWpheFNldHRpbmdzKTooYj1hLGE9Zi5hamF4U2V0dGluZ3MpLGIkKGEsYik7cmV0dXJuIGF9LGFqYXhTZXR0aW5nczp7dXJsOmJVLGlzTG9jYWw6YkkudGVzdChiVlsxXSksZ2xvYmFsOiEwLHR5cGU6IkdFVCIsY29udGVudFR5cGU6ImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOCIscHJvY2Vzc0RhdGE6ITAsYXN5bmM6ITAsYWNjZXB0czp7eG1sOiJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sIixodG1sOiJ0ZXh0L2h0bWwiLHRleHQ6InRleHQvcGxhaW4iLGpzb246ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdCIsIioiOmJXfSxjb250ZW50czp7eG1sOi94bWwvLGh0bWw6L2h0bWwvLGpzb246L2pzb24vfSxyZXNwb25zZUZpZWxkczp7eG1sOiJyZXNwb25zZVhNTCIsdGV4dDoicmVzcG9uc2VUZXh0In0sY29udmVydGVyczp7IiogdGV4dCI6YS5TdHJpbmcsInRleHQgaHRtbCI6ITAsInRleHQganNvbiI6Zi5wYXJzZUpTT04sInRleHQgeG1sIjpmLnBhcnNlWE1MfSxmbGF0T3B0aW9uczp7Y29udGV4dDohMCx1cmw6ITB9fSxhamF4UHJlZmlsdGVyOmJZKGJTKSxhamF4VHJhbnNwb3J0OmJZKGJUKSxhamF4OmZ1bmN0aW9uKGEsYyl7ZnVuY3Rpb24gdyhhLGMsbCxtKXtpZihzIT09Mil7cz0yLHEmJmNsZWFyVGltZW91dChxKSxwPWIsbj1tfHwiIix2LnJlYWR5U3RhdGU9YT4wPzQ6MDt2YXIgbyxyLHUsdz1jLHg9bD9jYShkLHYsbCk6Yix5LHo7aWYoYT49MjAwJiZhPDMwMHx8YT09PTMwNCl7aWYoZC5pZk1vZGlmaWVkKXtpZih5PXYuZ2V0UmVzcG9uc2VIZWFkZXIoIkxhc3QtTW9kaWZpZWQiKSlmLmxhc3RNb2RpZmllZFtrXT15O2lmKHo9di5nZXRSZXNwb25zZUhlYWRlcigiRXRhZyIpKWYuZXRhZ1trXT16fWlmKGE9PT0zMDQpdz0ibm90bW9kaWZpZWQiLG89ITA7ZWxzZSB0cnl7cj1jYihkLHgpLHc9InN1Y2Nlc3MiLG89ITB9Y2F0Y2goQSl7dz0icGFyc2VyZXJyb3IiLHU9QX19ZWxzZXt1PXc7aWYoIXd8fGEpdz0iZXJyb3IiLGE8MCYmKGE9MCl9di5zdGF0dXM9YSx2LnN0YXR1c1RleHQ9IiIrKGN8fHcpLG8/aC5yZXNvbHZlV2l0aChlLFtyLHcsdl0pOmgucmVqZWN0V2l0aChlLFt2LHcsdV0pLHYuc3RhdHVzQ29kZShqKSxqPWIsdCYmZy50cmlnZ2VyKCJhamF4Iisobz8iU3VjY2VzcyI6IkVycm9yIiksW3YsZCxvP3I6dV0pLGkuZmlyZVdpdGgoZSxbdix3XSksdCYmKGcudHJpZ2dlcigiYWpheENvbXBsZXRlIixbdixkXSksLS1mLmFjdGl2ZXx8Zi5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKX19dHlwZW9mIGE9PSJvYmplY3QiJiYoYz1hLGE9YiksYz1jfHx7fTt2YXIgZD1mLmFqYXhTZXR1cCh7fSxjKSxlPWQuY29udGV4dHx8ZCxnPWUhPT1kJiYoZS5ub2RlVHlwZXx8ZSBpbnN0YW5jZW9mIGYpP2YoZSk6Zi5ldmVudCxoPWYuRGVmZXJyZWQoKSxpPWYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLGo9ZC5zdGF0dXNDb2RlfHx7fSxrLGw9e30sbT17fSxuLG8scCxxLHIscz0wLHQsdSx2PXtyZWFkeVN0YXRlOjAsc2V0UmVxdWVzdEhlYWRlcjpmdW5jdGlvbihhLGIpe2lmKCFzKXt2YXIgYz1hLnRvTG93ZXJDYXNlKCk7YT1tW2NdPW1bY118fGEsbFthXT1ifXJldHVybiB0aGlzfSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gcz09PTI/bjpudWxsfSxnZXRSZXNwb25zZUhlYWRlcjpmdW5jdGlvbihhKXt2YXIgYztpZihzPT09Mil7aWYoIW8pe289e307d2hpbGUoYz1iRy5leGVjKG4pKW9bY1sxXS50b0xvd2VyQ2FzZSgpXT1jWzJdfWM9b1thLnRvTG93ZXJDYXNlKCldfXJldHVybiBjPT09Yj9udWxsOmN9LG92ZXJyaWRlTWltZVR5cGU6ZnVuY3Rpb24oYSl7c3x8KGQubWltZVR5cGU9YSk7cmV0dXJuIHRoaXN9LGFib3J0OmZ1bmN0aW9uKGEpe2E9YXx8ImFib3J0IixwJiZwLmFib3J0KGEpLHcoMCxhKTtyZXR1cm4gdGhpc319O2gucHJvbWlzZSh2KSx2LnN1Y2Nlc3M9di5kb25lLHYuZXJyb3I9di5mYWlsLHYuY29tcGxldGU9aS5hZGQsdi5zdGF0dXNDb2RlPWZ1bmN0aW9uKGEpe2lmKGEpe3ZhciBiO2lmKHM8Milmb3IoYiBpbiBhKWpbYl09W2pbYl0sYVtiXV07ZWxzZSBiPWFbdi5zdGF0dXNdLHYudGhlbihiLGIpfXJldHVybiB0aGlzfSxkLnVybD0oKGF8fGQudXJsKSsiIikucmVwbGFjZShiRiwiIikucmVwbGFjZShiSyxiVlsxXSsiLy8iKSxkLmRhdGFUeXBlcz1mLnRyaW0oZC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLnNwbGl0KGJPKSxkLmNyb3NzRG9tYWluPT1udWxsJiYocj1iUS5leGVjKGQudXJsLnRvTG93ZXJDYXNlKCkpLGQuY3Jvc3NEb21haW49ISghcnx8clsxXT09YlZbMV0mJnJbMl09PWJWWzJdJiYoclszXXx8KHJbMV09PT0iaHR0cDoiPzgwOjQ0MykpPT0oYlZbM118fChiVlsxXT09PSJodHRwOiI/ODA6NDQzKSkpKSxkLmRhdGEmJmQucHJvY2Vzc0RhdGEmJnR5cGVvZiBkLmRhdGEhPSJzdHJpbmciJiYoZC5kYXRhPWYucGFyYW0oZC5kYXRhLGQudHJhZGl0aW9uYWwpKSxiWihiUyxkLGMsdik7aWYocz09PTIpcmV0dXJuITE7dD1kLmdsb2JhbCxkLnR5cGU9ZC50eXBlLnRvVXBwZXJDYXNlKCksZC5oYXNDb250ZW50PSFiSi50ZXN0KGQudHlwZSksdCYmZi5hY3RpdmUrKz09PTAmJmYuZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0Iik7aWYoIWQuaGFzQ29udGVudCl7ZC5kYXRhJiYoZC51cmwrPShiTC50ZXN0KGQudXJsKT8iJiI6Ij8iKStkLmRhdGEsZGVsZXRlIGQuZGF0YSksaz1kLnVybDtpZihkLmNhY2hlPT09ITEpe3ZhciB4PWYubm93KCkseT1kLnVybC5yZXBsYWNlKGJQLCIkMV89Iit4KTtkLnVybD15Kyh5PT09ZC51cmw/KGJMLnRlc3QoZC51cmwpPyImIjoiPyIpKyJfPSIreDoiIil9fShkLmRhdGEmJmQuaGFzQ29udGVudCYmZC5jb250ZW50VHlwZSE9PSExfHxjLmNvbnRlbnRUeXBlKSYmdi5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLGQuY29udGVudFR5cGUpLGQuaWZNb2RpZmllZCYmKGs9a3x8ZC51cmwsZi5sYXN0TW9kaWZpZWRba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTW9kaWZpZWQtU2luY2UiLGYubGFzdE1vZGlmaWVkW2tdKSxmLmV0YWdba10mJnYuc2V0UmVxdWVzdEhlYWRlcigiSWYtTm9uZS1NYXRjaCIsZi5ldGFnW2tdKSksdi5zZXRSZXF1ZXN0SGVhZGVyKCJBY2NlcHQiLGQuZGF0YVR5cGVzWzBdJiZkLmFjY2VwdHNbZC5kYXRhVHlwZXNbMF1dP2QuYWNjZXB0c1tkLmRhdGFUeXBlc1swXV0rKGQuZGF0YVR5cGVzWzBdIT09IioiPyIsICIrYlcrIjsgcT0wLjAxIjoiIik6ZC5hY2NlcHRzWyIqIl0pO2Zvcih1IGluIGQuaGVhZGVycyl2LnNldFJlcXVlc3RIZWFkZXIodSxkLmhlYWRlcnNbdV0pO2lmKGQuYmVmb3JlU2VuZCYmKGQuYmVmb3JlU2VuZC5jYWxsKGUsdixkKT09PSExfHxzPT09Mikpe3YuYWJvcnQoKTtyZXR1cm4hMX1mb3IodSBpbntzdWNjZXNzOjEsZXJyb3I6MSxjb21wbGV0ZToxfSl2W3VdKGRbdV0pO3A9YlooYlQsZCxjLHYpO2lmKCFwKXcoLTEsIk5vIFRyYW5zcG9ydCIpO2Vsc2V7di5yZWFkeVN0YXRlPTEsdCYmZy50cmlnZ2VyKCJhamF4U2VuZCIsW3YsZF0pLGQuYXN5bmMmJmQudGltZW91dD4wJiYocT1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7di5hYm9ydCgidGltZW91dCIpfSxkLnRpbWVvdXQpKTt0cnl7cz0xLHAuc2VuZChsLHcpfWNhdGNoKHope2lmKHM8Mil3KC0xLHopO2Vsc2UgdGhyb3cgen19cmV0dXJuIHZ9LHBhcmFtOmZ1bmN0aW9uKGEsYyl7dmFyIGQ9W10sZT1mdW5jdGlvbihhLGIpe2I9Zi5pc0Z1bmN0aW9uKGIpP2IoKTpiLGRbZC5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChhKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGIpfTtjPT09YiYmKGM9Zi5hamF4U2V0dGluZ3MudHJhZGl0aW9uYWwpO2lmKGYuaXNBcnJheShhKXx8YS5qcXVlcnkmJiFmLmlzUGxhaW5PYmplY3QoYSkpZi5lYWNoKGEsZnVuY3Rpb24oKXtlKHRoaXMubmFtZSx0aGlzLnZhbHVlKX0pO2Vsc2UgZm9yKHZhciBnIGluIGEpYl8oZyxhW2ddLGMsZSk7cmV0dXJuIGQuam9pbigiJiIpLnJlcGxhY2UoYkMsIisiKX19KSxmLmV4dGVuZCh7YWN0aXZlOjAsbGFzdE1vZGlmaWVkOnt9LGV0YWc6e319KTt2YXIgY2M9Zi5ub3coKSxjZD0vKFw9KVw/KCZ8JCl8XD9cPy9pO2YuYWpheFNldHVwKHtqc29ucDoiY2FsbGJhY2siLGpzb25wQ2FsbGJhY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZi5leHBhbmRvKyJfIitjYysrfX0pLGYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24oYixjLGQpe3ZhciBlPXR5cGVvZiBiLmRhdGE9PSJzdHJpbmciJiYvXmFwcGxpY2F0aW9uXC94XC13d3dcLWZvcm1cLXVybGVuY29kZWQvLnRlc3QoYi5jb250ZW50VHlwZSk7aWYoYi5kYXRhVHlwZXNbMF09PT0ianNvbnAifHxiLmpzb25wIT09ITEmJihjZC50ZXN0KGIudXJsKXx8ZSYmY2QudGVzdChiLmRhdGEpKSl7dmFyIGcsaD1iLmpzb25wQ2FsbGJhY2s9Zi5pc0Z1bmN0aW9uKGIuanNvbnBDYWxsYmFjayk/Yi5qc29ucENhbGxiYWNrKCk6Yi5qc29ucENhbGxiYWNrLGk9YVtoXSxqPWIudXJsLGs9Yi5kYXRhLGw9IiQxIitoKyIkMiI7Yi5qc29ucCE9PSExJiYoaj1qLnJlcGxhY2UoY2QsbCksYi51cmw9PT1qJiYoZSYmKGs9ay5yZXBsYWNlKGNkLGwpKSxiLmRhdGE9PT1rJiYoais9KC9cPy8udGVzdChqKT8iJiI6Ij8iKStiLmpzb25wKyI9IitoKSkpLGIudXJsPWosYi5kYXRhPWssYVtoXT1mdW5jdGlvbihhKXtnPVthXX0sZC5hbHdheXMoZnVuY3Rpb24oKXthW2hdPWksZyYmZi5pc0Z1bmN0aW9uKGkpJiZhW2hdKGdbMF0pfSksYi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7Z3x8Zi5lcnJvcihoKyIgd2FzIG5vdCBjYWxsZWQiKTtyZXR1cm4gZ1swXX0sYi5kYXRhVHlwZXNbMF09Impzb24iO3JldHVybiJzY3JpcHQifX0pLGYuYWpheFNldHVwKHthY2NlcHRzOntzY3JpcHQ6InRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0In0sY29udGVudHM6e3NjcmlwdDovamF2YXNjcmlwdHxlY21hc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihhKXtmLmdsb2JhbEV2YWwoYSk7cmV0dXJuIGF9fX0pLGYuYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihhKXthLmNhY2hlPT09YiYmKGEuY2FjaGU9ITEpLGEuY3Jvc3NEb21haW4mJihhLnR5cGU9IkdFVCIsYS5nbG9iYWw9ITEpfSksZi5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGEpe2lmKGEuY3Jvc3NEb21haW4pe3ZhciBkLGU9Yy5oZWFkfHxjLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fGMuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKGYsZyl7ZD1jLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLGQuYXN5bmM9ImFzeW5jIixhLnNjcmlwdENoYXJzZXQmJihkLmNoYXJzZXQ9YS5zY3JpcHRDaGFyc2V0KSxkLnNyYz1hLnVybCxkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbihhLGMpe2lmKGN8fCFkLnJlYWR5U3RhdGV8fC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoZC5yZWFkeVN0YXRlKSlkLm9ubG9hZD1kLm9ucmVhZHlzdGF0ZWNoYW5nZT1udWxsLGUmJmQucGFyZW50Tm9kZSYmZS5yZW1vdmVDaGlsZChkKSxkPWIsY3x8ZygyMDAsInN1Y2Nlc3MiKX0sZS5pbnNlcnRCZWZvcmUoZCxlLmZpcnN0Q2hpbGQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQub25sb2FkKDAsMSl9fX19KTt2YXIgY2U9YS5BY3RpdmVYT2JqZWN0P2Z1bmN0aW9uKCl7Zm9yKHZhciBhIGluIGNnKWNnW2FdKDAsMSl9OiExLGNmPTAsY2c7Zi5hamF4U2V0dGluZ3MueGhyPWEuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJmNoKCl8fGNpKCl9OmNoLGZ1bmN0aW9uKGEpe2YuZXh0ZW5kKGYuc3VwcG9ydCx7YWpheDohIWEsY29yczohIWEmJiJ3aXRoQ3JlZGVudGlhbHMiaW4gYX0pfShmLmFqYXhTZXR0aW5ncy54aHIoKSksZi5zdXBwb3J0LmFqYXgmJmYuYWpheFRyYW5zcG9ydChmdW5jdGlvbihjKXtpZighYy5jcm9zc0RvbWFpbnx8Zi5zdXBwb3J0LmNvcnMpe3ZhciBkO3JldHVybntzZW5kOmZ1bmN0aW9uKGUsZyl7dmFyIGg9Yy54aHIoKSxpLGo7Yy51c2VybmFtZT9oLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMsYy51c2VybmFtZSxjLnBhc3N3b3JkKTpoLm9wZW4oYy50eXBlLGMudXJsLGMuYXN5bmMpO2lmKGMueGhyRmllbGRzKWZvcihqIGluIGMueGhyRmllbGRzKWhbal09Yy54aHJGaWVsZHNbal07Yy5taW1lVHlwZSYmaC5vdmVycmlkZU1pbWVUeXBlJiZoLm92ZXJyaWRlTWltZVR5cGUoYy5taW1lVHlwZSksIWMuY3Jvc3NEb21haW4mJiFlWyJYLVJlcXVlc3RlZC1XaXRoIl0mJihlWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihqIGluIGUpaC5zZXRSZXF1ZXN0SGVhZGVyKGosZVtqXSl9Y2F0Y2goayl7fWguc2VuZChjLmhhc0NvbnRlbnQmJmMuZGF0YXx8bnVsbCksZD1mdW5jdGlvbihhLGUpe3ZhciBqLGssbCxtLG47dHJ5e2lmKGQmJihlfHxoLnJlYWR5U3RhdGU9PT00KSl7ZD1iLGkmJihoLm9ucmVhZHlzdGF0ZWNoYW5nZT1mLm5vb3AsY2UmJmRlbGV0ZSBjZ1tpXSk7aWYoZSloLnJlYWR5U3RhdGUhPT00JiZoLmFib3J0KCk7ZWxzZXtqPWguc3RhdHVzLGw9aC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSxtPXt9LG49aC5yZXNwb25zZVhNTCxuJiZuLmRvY3VtZW50RWxlbWVudCYmKG0ueG1sPW4pO3RyeXttLnRleHQ9aC5yZXNwb25zZVRleHR9Y2F0Y2goYSl7fXRyeXtrPWguc3RhdHVzVGV4dH1jYXRjaChvKXtrPSIifSFqJiZjLmlzTG9jYWwmJiFjLmNyb3NzRG9tYWluP2o9bS50ZXh0PzIwMDo0MDQ6aj09PTEyMjMmJihqPTIwNCl9fX1jYXRjaChwKXtlfHxnKC0xLHApfW0mJmcoaixrLG0sbCl9LCFjLmFzeW5jfHxoLnJlYWR5U3RhdGU9PT00P2QoKTooaT0rK2NmLGNlJiYoY2d8fChjZz17fSxmKGEpLnVubG9hZChjZSkpLGNnW2ldPWQpLGgub25yZWFkeXN0YXRlY2hhbmdlPWQpfSxhYm9ydDpmdW5jdGlvbigpe2QmJmQoMCwxKX19fX0pO3ZhciBjaj17fSxjayxjbCxjbT0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sY249L14oWytcLV09KT8oW1xkKy5cLV0rKShbYS16JV0qKSQvaSxjbyxjcD1bWyJoZWlnaHQiLCJtYXJnaW5Ub3AiLCJtYXJnaW5Cb3R0b20iLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLFsid2lkdGgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCJdLFsib3BhY2l0eSJdXSxjcTtmLmZuLmV4dGVuZCh7c2hvdzpmdW5jdGlvbihhLGIsYyl7dmFyIGQsZTtpZihhfHxhPT09MClyZXR1cm4gdGhpcy5hbmltYXRlKGN0KCJzaG93IiwzKSxhLGIsYyk7Zm9yKHZhciBnPTAsaD10aGlzLmxlbmd0aDtnPGg7ZysrKWQ9dGhpc1tnXSxkLnN0eWxlJiYoZT1kLnN0eWxlLmRpc3BsYXksIWYuX2RhdGEoZCwib2xkZGlzcGxheSIpJiZlPT09Im5vbmUiJiYoZT1kLnN0eWxlLmRpc3BsYXk9IiIpLChlPT09IiImJmYuY3NzKGQsImRpc3BsYXkiKT09PSJub25lInx8IWYuY29udGFpbnMoZC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxkKSkmJmYuX2RhdGEoZCwib2xkZGlzcGxheSIsY3UoZC5ub2RlTmFtZSkpKTtmb3IoZz0wO2c8aDtnKyspe2Q9dGhpc1tnXTtpZihkLnN0eWxlKXtlPWQuc3R5bGUuZGlzcGxheTtpZihlPT09IiJ8fGU9PT0ibm9uZSIpZC5zdHlsZS5kaXNwbGF5PWYuX2RhdGEoZCwib2xkZGlzcGxheSIpfHwiIn19cmV0dXJuIHRoaXN9LGhpZGU6ZnVuY3Rpb24oYSxiLGMpe2lmKGF8fGE9PT0wKXJldHVybiB0aGlzLmFuaW1hdGUoY3QoImhpZGUiLDMpLGEsYixjKTt2YXIgZCxlLGc9MCxoPXRoaXMubGVuZ3RoO2Zvcig7ZzxoO2crKylkPXRoaXNbZ10sZC5zdHlsZSYmKGU9Zi5jc3MoZCwiZGlzcGxheSIpLGUhPT0ibm9uZSImJiFmLl9kYXRhKGQsIm9sZGRpc3BsYXkiKSYmZi5fZGF0YShkLCJvbGRkaXNwbGF5IixlKSk7Zm9yKGc9MDtnPGg7ZysrKXRoaXNbZ10uc3R5bGUmJih0aGlzW2ddLnN0eWxlLmRpc3BsYXk9Im5vbmUiKTtyZXR1cm4gdGhpc30sX3RvZ2dsZTpmLmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24oYSxiLGMpe3ZhciBkPXR5cGVvZiBhPT0iYm9vbGVhbiI7Zi5pc0Z1bmN0aW9uKGEpJiZmLmlzRnVuY3Rpb24oYik/dGhpcy5fdG9nZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphPT1udWxsfHxkP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBiPWQ/YTpmKHRoaXMpLmlzKCI6aGlkZGVuIik7Zih0aGlzKVtiPyJzaG93IjoiaGlkZSJdKCl9KTp0aGlzLmFuaW1hdGUoY3QoInRvZ2dsZSIsMyksYSxiLGMpO3JldHVybiB0aGlzfSxmYWRlVG86ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuZmlsdGVyKCI6aGlkZGVuIikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTpifSxhLGMsZCl9LGFuaW1hdGU6ZnVuY3Rpb24oYSxiLGMsZCl7ZnVuY3Rpb24gZygpe2UucXVldWU9PT0hMSYmZi5fbWFyayh0aGlzKTt2YXIgYj1mLmV4dGVuZCh7fSxlKSxjPXRoaXMubm9kZVR5cGU9PT0xLGQ9YyYmZih0aGlzKS5pcygiOmhpZGRlbiIpLGcsaCxpLGosayxsLG0sbixvLHAscTtiLmFuaW1hdGVkUHJvcGVydGllcz17fTtmb3IoaSBpbiBhKXtnPWYuY2FtZWxDYXNlKGkpLGkhPT1nJiYoYVtnXT1hW2ldLGRlbGV0ZSBhW2ldKTtpZigoaz1mLmNzc0hvb2tzW2ddKSYmImV4cGFuZCJpbiBrKXtsPWsuZXhwYW5kKGFbZ10pLGRlbGV0ZSBhW2ddO2ZvcihpIGluIGwpaSBpbiBhfHwoYVtpXT1sW2ldKX19Zm9yKGcgaW4gYSl7aD1hW2ddLGYuaXNBcnJheShoKT8oYi5hbmltYXRlZFByb3BlcnRpZXNbZ109aFsxXSxoPWFbZ109aFswXSk6Yi5hbmltYXRlZFByb3BlcnRpZXNbZ109Yi5zcGVjaWFsRWFzaW5nJiZiLnNwZWNpYWxFYXNpbmdbZ118fGIuZWFzaW5nfHwic3dpbmciO2lmKGg9PT0iaGlkZSImJmR8fGg9PT0ic2hvdyImJiFkKXJldHVybiBiLmNvbXBsZXRlLmNhbGwodGhpcyk7YyYmKGc9PT0iaGVpZ2h0Inx8Zz09PSJ3aWR0aCIpJiYoYi5vdmVyZmxvdz1bdGhpcy5zdHlsZS5vdmVyZmxvdyx0aGlzLnN0eWxlLm92ZXJmbG93WCx0aGlzLnN0eWxlLm92ZXJmbG93WV0sZi5jc3ModGhpcywiZGlzcGxheSIpPT09ImlubGluZSImJmYuY3NzKHRoaXMsImZsb2F0Iik9PT0ibm9uZSImJighZi5zdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXR8fGN1KHRoaXMubm9kZU5hbWUpPT09ImlubGluZSI/dGhpcy5zdHlsZS5kaXNwbGF5PSJpbmxpbmUtYmxvY2siOnRoaXMuc3R5bGUuem9vbT0xKSl9Yi5vdmVyZmxvdyE9bnVsbCYmKHRoaXMuc3R5bGUub3ZlcmZsb3c9ImhpZGRlbiIpO2ZvcihpIGluIGEpaj1uZXcgZi5meCh0aGlzLGIsaSksaD1hW2ldLGNtLnRlc3QoaCk/KHE9Zi5fZGF0YSh0aGlzLCJ0b2dnbGUiK2kpfHwoaD09PSJ0b2dnbGUiP2Q/InNob3ciOiJoaWRlIjowKSxxPyhmLl9kYXRhKHRoaXMsInRvZ2dsZSIraSxxPT09InNob3ciPyJoaWRlIjoic2hvdyIpLGpbcV0oKSk6altoXSgpKToobT1jbi5leGVjKGgpLG49ai5jdXIoKSxtPyhvPXBhcnNlRmxvYXQobVsyXSkscD1tWzNdfHwoZi5jc3NOdW1iZXJbaV0/IiI6InB4IikscCE9PSJweCImJihmLnN0eWxlKHRoaXMsaSwob3x8MSkrcCksbj0ob3x8MSkvai5jdXIoKSpuLGYuc3R5bGUodGhpcyxpLG4rcCkpLG1bMV0mJihvPShtWzFdPT09Ii09Ij8tMToxKSpvK24pLGouY3VzdG9tKG4sbyxwKSk6ai5jdXN0b20obixoLCIiKSk7cmV0dXJuITB9dmFyIGU9Zi5zcGVlZChiLGMsZCk7aWYoZi5pc0VtcHR5T2JqZWN0KGEpKXJldHVybiB0aGlzLmVhY2goZS5jb21wbGV0ZSxbITFdKTthPWYuZXh0ZW5kKHt9LGEpO3JldHVybiBlLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGcpOnRoaXMucXVldWUoZS5xdWV1ZSxnKX0sc3RvcDpmdW5jdGlvbihhLGMsZCl7dHlwZW9mIGEhPSJzdHJpbmciJiYoZD1jLGM9YSxhPWIpLGMmJmEhPT0hMSYmdGhpcy5xdWV1ZShhfHwiZngiLFtdKTtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaChhLGIsYyl7dmFyIGU9YltjXTtmLnJlbW92ZURhdGEoYSxjLCEwKSxlLnN0b3AoZCl9dmFyIGIsYz0hMSxlPWYudGltZXJzLGc9Zi5fZGF0YSh0aGlzKTtkfHxmLl91bm1hcmsoITAsdGhpcyk7aWYoYT09bnVsbClmb3IoYiBpbiBnKWdbYl0mJmdbYl0uc3RvcCYmYi5pbmRleE9mKCIucnVuIik9PT1iLmxlbmd0aC00JiZoKHRoaXMsZyxiKTtlbHNlIGdbYj1hKyIucnVuIl0mJmdbYl0uc3RvcCYmaCh0aGlzLGcsYik7Zm9yKGI9ZS5sZW5ndGg7Yi0tOyllW2JdLmVsZW09PT10aGlzJiYoYT09bnVsbHx8ZVtiXS5xdWV1ZT09PWEpJiYoZD9lW2JdKCEwKTplW2JdLnNhdmVTdGF0ZSgpLGM9ITAsZS5zcGxpY2UoYiwxKSk7KCFkfHwhYykmJmYuZGVxdWV1ZSh0aGlzLGEpfSl9fSksZi5lYWNoKHtzbGlkZURvd246Y3QoInNob3ciLDEpLHNsaWRlVXA6Y3QoImhpZGUiLDEpLHNsaWRlVG9nZ2xlOmN0KCJ0b2dnbGUiLDEpLGZhZGVJbjp7b3BhY2l0eToic2hvdyJ9LGZhZGVPdXQ6e29wYWNpdHk6ImhpZGUifSxmYWRlVG9nZ2xlOntvcGFjaXR5OiJ0b2dnbGUifX0sZnVuY3Rpb24oYSxiKXtmLmZuW2FdPWZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gdGhpcy5hbmltYXRlKGIsYSxjLGQpfX0pLGYuZXh0ZW5kKHtzcGVlZDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9YSYmdHlwZW9mIGE9PSJvYmplY3QiP2YuZXh0ZW5kKHt9LGEpOntjb21wbGV0ZTpjfHwhYyYmYnx8Zi5pc0Z1bmN0aW9uKGEpJiZhLGR1cmF0aW9uOmEsZWFzaW5nOmMmJmJ8fGImJiFmLmlzRnVuY3Rpb24oYikmJmJ9O2QuZHVyYXRpb249Zi5meC5vZmY/MDp0eXBlb2YgZC5kdXJhdGlvbj09Im51bWJlciI/ZC5kdXJhdGlvbjpkLmR1cmF0aW9uIGluIGYuZnguc3BlZWRzP2YuZnguc3BlZWRzW2QuZHVyYXRpb25dOmYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKGQucXVldWU9PW51bGx8fGQucXVldWU9PT0hMClkLnF1ZXVlPSJmeCI7ZC5vbGQ9ZC5jb21wbGV0ZSxkLmNvbXBsZXRlPWZ1bmN0aW9uKGEpe2YuaXNGdW5jdGlvbihkLm9sZCkmJmQub2xkLmNhbGwodGhpcyksZC5xdWV1ZT9mLmRlcXVldWUodGhpcyxkLnF1ZXVlKTphIT09ITEmJmYuX3VubWFyayh0aGlzKX07cmV0dXJuIGR9LGVhc2luZzp7bGluZWFyOmZ1bmN0aW9uKGEpe3JldHVybiBhfSxzd2luZzpmdW5jdGlvbihhKXtyZXR1cm4tTWF0aC5jb3MoYSpNYXRoLlBJKS8yKy41fX0sdGltZXJzOltdLGZ4OmZ1bmN0aW9uKGEsYixjKXt0aGlzLm9wdGlvbnM9Yix0aGlzLmVsZW09YSx0aGlzLnByb3A9YyxiLm9yaWc9Yi5vcmlnfHx7fX19KSxmLmZ4LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLnN0ZXAmJnRoaXMub3B0aW9ucy5zdGVwLmNhbGwodGhpcy5lbGVtLHRoaXMubm93LHRoaXMpLChmLmZ4LnN0ZXBbdGhpcy5wcm9wXXx8Zi5meC5zdGVwLl9kZWZhdWx0KSh0aGlzKX0sY3VyOmZ1bmN0aW9uKCl7aWYodGhpcy5lbGVtW3RoaXMucHJvcF0hPW51bGwmJighdGhpcy5lbGVtLnN0eWxlfHx0aGlzLmVsZW0uc3R5bGVbdGhpcy5wcm9wXT09bnVsbCkpcmV0dXJuIHRoaXMuZWxlbVt0aGlzLnByb3BdO3ZhciBhLGI9Zi5jc3ModGhpcy5lbGVtLHRoaXMucHJvcCk7cmV0dXJuIGlzTmFOKGE9cGFyc2VGbG9hdChiKSk/IWJ8fGI9PT0iYXV0byI/MDpiOmF9LGN1c3RvbTpmdW5jdGlvbihhLGMsZCl7ZnVuY3Rpb24gaChhKXtyZXR1cm4gZS5zdGVwKGEpfXZhciBlPXRoaXMsZz1mLmZ4O3RoaXMuc3RhcnRUaW1lPWNxfHxjcigpLHRoaXMuZW5kPWMsdGhpcy5ub3c9dGhpcy5zdGFydD1hLHRoaXMucG9zPXRoaXMuc3RhdGU9MCx0aGlzLnVuaXQ9ZHx8dGhpcy51bml0fHwoZi5jc3NOdW1iZXJbdGhpcy5wcm9wXT8iIjoicHgiKSxoLnF1ZXVlPXRoaXMub3B0aW9ucy5xdWV1ZSxoLmVsZW09dGhpcy5lbGVtLGguc2F2ZVN0YXRlPWZ1bmN0aW9uKCl7Zi5fZGF0YShlLmVsZW0sImZ4c2hvdyIrZS5wcm9wKT09PWImJihlLm9wdGlvbnMuaGlkZT9mLl9kYXRhKGUuZWxlbSwiZnhzaG93IitlLnByb3AsZS5zdGFydCk6ZS5vcHRpb25zLnNob3cmJmYuX2RhdGEoZS5lbGVtLCJmeHNob3ciK2UucHJvcCxlLmVuZCkpfSxoKCkmJmYudGltZXJzLnB1c2goaCkmJiFjbyYmKGNvPXNldEludGVydmFsKGcudGljayxnLmludGVydmFsKSl9LHNob3c6ZnVuY3Rpb24oKXt2YXIgYT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApO3RoaXMub3B0aW9ucy5vcmlnW3RoaXMucHJvcF09YXx8Zi5zdHlsZSh0aGlzLmVsZW0sdGhpcy5wcm9wKSx0aGlzLm9wdGlvbnMuc2hvdz0hMCxhIT09Yj90aGlzLmN1c3RvbSh0aGlzLmN1cigpLGEpOnRoaXMuY3VzdG9tKHRoaXMucHJvcD09PSJ3aWR0aCJ8fHRoaXMucHJvcD09PSJoZWlnaHQiPzE6MCx0aGlzLmN1cigpKSxmKHRoaXMuZWxlbSkuc2hvdygpfSxoaWRlOmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm9yaWdbdGhpcy5wcm9wXT1mLl9kYXRhKHRoaXMuZWxlbSwiZnhzaG93Iit0aGlzLnByb3ApfHxmLnN0eWxlKHRoaXMuZWxlbSx0aGlzLnByb3ApLHRoaXMub3B0aW9ucy5oaWRlPSEwLHRoaXMuY3VzdG9tKHRoaXMuY3VyKCksMCl9LHN0ZXA6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGU9Y3F8fGNyKCksZz0hMCxoPXRoaXMuZWxlbSxpPXRoaXMub3B0aW9ucztpZihhfHxlPj1pLmR1cmF0aW9uK3RoaXMuc3RhcnRUaW1lKXt0aGlzLm5vdz10aGlzLmVuZCx0aGlzLnBvcz10aGlzLnN0YXRlPTEsdGhpcy51cGRhdGUoKSxpLmFuaW1hdGVkUHJvcGVydGllc1t0aGlzLnByb3BdPSEwO2ZvcihiIGluIGkuYW5pbWF0ZWRQcm9wZXJ0aWVzKWkuYW5pbWF0ZWRQcm9wZXJ0aWVzW2JdIT09ITAmJihnPSExKTtpZihnKXtpLm92ZXJmbG93IT1udWxsJiYhZi5zdXBwb3J0LnNocmlua1dyYXBCbG9ja3MmJmYuZWFjaChbIiIsIlgiLCJZIl0sZnVuY3Rpb24oYSxiKXtoLnN0eWxlWyJvdmVyZmxvdyIrYl09aS5vdmVyZmxvd1thXX0pLGkuaGlkZSYmZihoKS5oaWRlKCk7aWYoaS5oaWRlfHxpLnNob3cpZm9yKGIgaW4gaS5hbmltYXRlZFByb3BlcnRpZXMpZi5zdHlsZShoLGIsaS5vcmlnW2JdKSxmLnJlbW92ZURhdGEoaCwiZnhzaG93IitiLCEwKSxmLnJlbW92ZURhdGEoaCwidG9nZ2xlIitiLCEwKTtkPWkuY29tcGxldGUsZCYmKGkuY29tcGxldGU9ITEsZC5jYWxsKGgpKX1yZXR1cm4hMX1pLmR1cmF0aW9uPT1JbmZpbml0eT90aGlzLm5vdz1lOihjPWUtdGhpcy5zdGFydFRpbWUsdGhpcy5zdGF0ZT1jL2kuZHVyYXRpb24sdGhpcy5wb3M9Zi5lYXNpbmdbaS5hbmltYXRlZFByb3BlcnRpZXNbdGhpcy5wcm9wXV0odGhpcy5zdGF0ZSxjLDAsMSxpLmR1cmF0aW9uKSx0aGlzLm5vdz10aGlzLnN0YXJ0Kyh0aGlzLmVuZC10aGlzLnN0YXJ0KSp0aGlzLnBvcyksdGhpcy51cGRhdGUoKTtyZXR1cm4hMH19LGYuZXh0ZW5kKGYuZngse3RpY2s6ZnVuY3Rpb24oKXt2YXIgYSxiPWYudGltZXJzLGM9MDtmb3IoO2M8Yi5sZW5ndGg7YysrKWE9YltjXSwhYSgpJiZiW2NdPT09YSYmYi5zcGxpY2UoYy0tLDEpO2IubGVuZ3RofHxmLmZ4LnN0b3AoKX0saW50ZXJ2YWw6MTMsc3RvcDpmdW5jdGlvbigpe2NsZWFySW50ZXJ2YWwoY28pLGNvPW51bGx9LHNwZWVkczp7c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSxzdGVwOntvcGFjaXR5OmZ1bmN0aW9uKGEpe2Yuc3R5bGUoYS5lbGVtLCJvcGFjaXR5IixhLm5vdyl9LF9kZWZhdWx0OmZ1bmN0aW9uKGEpe2EuZWxlbS5zdHlsZSYmYS5lbGVtLnN0eWxlW2EucHJvcF0hPW51bGw/YS5lbGVtLnN0eWxlW2EucHJvcF09YS5ub3crYS51bml0OmEuZWxlbVthLnByb3BdPWEubm93fX19KSxmLmVhY2goY3AuY29uY2F0LmFwcGx5KFtdLGNwKSxmdW5jdGlvbihhLGIpe2IuaW5kZXhPZigibWFyZ2luIikmJihmLmZ4LnN0ZXBbYl09ZnVuY3Rpb24oYSl7Zi5zdHlsZShhLmVsZW0sYixNYXRoLm1heCgwLGEubm93KSthLnVuaXQpfSl9KSxmLmV4cHImJmYuZXhwci5maWx0ZXJzJiYoZi5leHByLmZpbHRlcnMuYW5pbWF0ZWQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGYuZ3JlcChmLnRpbWVycyxmdW5jdGlvbihiKXtyZXR1cm4gYT09PWIuZWxlbX0pLmxlbmd0aH0pO3ZhciBjdixjdz0vXnQoPzphYmxlfGR8aCkkL2ksY3g9L14oPzpib2R5fGh0bWwpJC9pOyJnZXRCb3VuZGluZ0NsaWVudFJlY3QiaW4gYy5kb2N1bWVudEVsZW1lbnQ/Y3Y9ZnVuY3Rpb24oYSxiLGMsZCl7dHJ5e2Q9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKX1jYXRjaChlKXt9aWYoIWR8fCFmLmNvbnRhaW5zKGMsYSkpcmV0dXJuIGQ/e3RvcDpkLnRvcCxsZWZ0OmQubGVmdH06e3RvcDowLGxlZnQ6MH07dmFyIGc9Yi5ib2R5LGg9Y3koYiksaT1jLmNsaWVudFRvcHx8Zy5jbGllbnRUb3B8fDAsaj1jLmNsaWVudExlZnR8fGcuY2xpZW50TGVmdHx8MCxrPWgucGFnZVlPZmZzZXR8fGYuc3VwcG9ydC5ib3hNb2RlbCYmYy5zY3JvbGxUb3B8fGcuc2Nyb2xsVG9wLGw9aC5wYWdlWE9mZnNldHx8Zi5zdXBwb3J0LmJveE1vZGVsJiZjLnNjcm9sbExlZnR8fGcuc2Nyb2xsTGVmdCxtPWQudG9wK2staSxuPWQubGVmdCtsLWo7cmV0dXJue3RvcDptLGxlZnQ6bn19OmN2PWZ1bmN0aW9uKGEsYixjKXt2YXIgZCxlPWEub2Zmc2V0UGFyZW50LGc9YSxoPWIuYm9keSxpPWIuZGVmYXVsdFZpZXcsaj1pP2kuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpOmEuY3VycmVudFN0eWxlLGs9YS5vZmZzZXRUb3AsbD1hLm9mZnNldExlZnQ7d2hpbGUoKGE9YS5wYXJlbnROb2RlKSYmYSE9PWgmJmEhPT1jKXtpZihmLnN1cHBvcnQuZml4ZWRQb3NpdGlvbiYmai5wb3NpdGlvbj09PSJmaXhlZCIpYnJlYWs7ZD1pP2kuZ2V0Q29tcHV0ZWRTdHlsZShhLG51bGwpOmEuY3VycmVudFN0eWxlLGstPWEuc2Nyb2xsVG9wLGwtPWEuc2Nyb2xsTGVmdCxhPT09ZSYmKGsrPWEub2Zmc2V0VG9wLGwrPWEub2Zmc2V0TGVmdCxmLnN1cHBvcnQuZG9lc05vdEFkZEJvcmRlciYmKCFmLnN1cHBvcnQuZG9lc0FkZEJvcmRlckZvclRhYmxlQW5kQ2VsbHN8fCFjdy50ZXN0KGEubm9kZU5hbWUpKSYmKGsrPXBhcnNlRmxvYXQoZC5ib3JkZXJUb3BXaWR0aCl8fDAsbCs9cGFyc2VGbG9hdChkLmJvcmRlckxlZnRXaWR0aCl8fDApLGc9ZSxlPWEub2Zmc2V0UGFyZW50KSxmLnN1cHBvcnQuc3VidHJhY3RzQm9yZGVyRm9yT3ZlcmZsb3dOb3RWaXNpYmxlJiZkLm92ZXJmbG93IT09InZpc2libGUiJiYoays9cGFyc2VGbG9hdChkLmJvcmRlclRvcFdpZHRoKXx8MCxsKz1wYXJzZUZsb2F0KGQuYm9yZGVyTGVmdFdpZHRoKXx8MCksaj1kfWlmKGoucG9zaXRpb249PT0icmVsYXRpdmUifHxqLnBvc2l0aW9uPT09InN0YXRpYyIpays9aC5vZmZzZXRUb3AsbCs9aC5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5maXhlZFBvc2l0aW9uJiZqLnBvc2l0aW9uPT09ImZpeGVkIiYmKGsrPU1hdGgubWF4KGMuc2Nyb2xsVG9wLGguc2Nyb2xsVG9wKSxsKz1NYXRoLm1heChjLnNjcm9sbExlZnQsaC5zY3JvbGxMZWZ0KSk7cmV0dXJue3RvcDprLGxlZnQ6bH19LGYuZm4ub2Zmc2V0PWZ1bmN0aW9uKGEpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGE9PT1iP3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKGIpe2Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGEsYil9KTt2YXIgYz10aGlzWzBdLGQ9YyYmYy5vd25lckRvY3VtZW50O2lmKCFkKXJldHVybiBudWxsO2lmKGM9PT1kLmJvZHkpcmV0dXJuIGYub2Zmc2V0LmJvZHlPZmZzZXQoYyk7cmV0dXJuIGN2KGMsZCxkLmRvY3VtZW50RWxlbWVudCl9LGYub2Zmc2V0PXtib2R5T2Zmc2V0OmZ1bmN0aW9uKGEpe3ZhciBiPWEub2Zmc2V0VG9wLGM9YS5vZmZzZXRMZWZ0O2Yuc3VwcG9ydC5kb2VzTm90SW5jbHVkZU1hcmdpbkluQm9keU9mZnNldCYmKGIrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luVG9wIikpfHwwLGMrPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCk7cmV0dXJue3RvcDpiLGxlZnQ6Y319LHNldE9mZnNldDpmdW5jdGlvbihhLGIsYyl7dmFyIGQ9Zi5jc3MoYSwicG9zaXRpb24iKTtkPT09InN0YXRpYyImJihhLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpO3ZhciBlPWYoYSksZz1lLm9mZnNldCgpLGg9Zi5jc3MoYSwidG9wIiksaT1mLmNzcyhhLCJsZWZ0Iiksaj0oZD09PSJhYnNvbHV0ZSJ8fGQ9PT0iZml4ZWQiKSYmZi5pbkFycmF5KCJhdXRvIixbaCxpXSk+LTEsaz17fSxsPXt9LG0sbjtqPyhsPWUucG9zaXRpb24oKSxtPWwudG9wLG49bC5sZWZ0KToobT1wYXJzZUZsb2F0KGgpfHwwLG49cGFyc2VGbG9hdChpKXx8MCksZi5pc0Z1bmN0aW9uKGIpJiYoYj1iLmNhbGwoYSxjLGcpKSxiLnRvcCE9bnVsbCYmKGsudG9wPWIudG9wLWcudG9wK20pLGIubGVmdCE9bnVsbCYmKGsubGVmdD1iLmxlZnQtZy5sZWZ0K24pLCJ1c2luZyJpbiBiP2IudXNpbmcuY2FsbChhLGspOmUuY3NzKGspfX0sZi5mbi5leHRlbmQoe3Bvc2l0aW9uOmZ1bmN0aW9uKCl7aWYoIXRoaXNbMF0pcmV0dXJuIG51bGw7dmFyIGE9dGhpc1swXSxiPXRoaXMub2Zmc2V0UGFyZW50KCksYz10aGlzLm9mZnNldCgpLGQ9Y3gudGVzdChiWzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTpiLm9mZnNldCgpO2MudG9wLT1wYXJzZUZsb2F0KGYuY3NzKGEsIm1hcmdpblRvcCIpKXx8MCxjLmxlZnQtPXBhcnNlRmxvYXQoZi5jc3MoYSwibWFyZ2luTGVmdCIpKXx8MCxkLnRvcCs9cGFyc2VGbG9hdChmLmNzcyhiWzBdLCJib3JkZXJUb3BXaWR0aCIpKXx8MCxkLmxlZnQrPXBhcnNlRmxvYXQoZi5jc3MoYlswXSwiYm9yZGVyTGVmdFdpZHRoIikpfHwwO3JldHVybnt0b3A6Yy50b3AtZC50b3AsbGVmdDpjLmxlZnQtZC5sZWZ0fX0sb2Zmc2V0UGFyZW50OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5vZmZzZXRQYXJlbnR8fGMuYm9keTt3aGlsZShhJiYhY3gudGVzdChhLm5vZGVOYW1lKSYmZi5jc3MoYSwicG9zaXRpb24iKT09PSJzdGF0aWMiKWE9YS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGF9KX19KSxmLmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oYSxjKXt2YXIgZD0vWS8udGVzdChjKTtmLmZuW2FdPWZ1bmN0aW9uKGUpe3JldHVybiBmLmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGEsZSxnKXt2YXIgaD1jeShhKTtpZihnPT09YilyZXR1cm4gaD9jIGluIGg/aFtjXTpmLnN1cHBvcnQuYm94TW9kZWwmJmguZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50W2VdfHxoLmRvY3VtZW50LmJvZHlbZV06YVtlXTtoP2guc2Nyb2xsVG8oZD9mKGgpLnNjcm9sbExlZnQoKTpnLGQ/ZzpmKGgpLnNjcm9sbFRvcCgpKTphW2VdPWd9LGEsZSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLGYuZWFjaCh7SGVpZ2h0OiJoZWlnaHQiLFdpZHRoOiJ3aWR0aCJ9LGZ1bmN0aW9uKGEsYyl7dmFyIGQ9ImNsaWVudCIrYSxlPSJzY3JvbGwiK2EsZz0ib2Zmc2V0IithO2YuZm5bImlubmVyIithXT1mdW5jdGlvbigpe3ZhciBhPXRoaXNbMF07cmV0dXJuIGE/YS5zdHlsZT9wYXJzZUZsb2F0KGYuY3NzKGEsYywicGFkZGluZyIpKTp0aGlzW2NdKCk6bnVsbH0sZi5mblsib3V0ZXIiK2FdPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXNbMF07cmV0dXJuIGI/Yi5zdHlsZT9wYXJzZUZsb2F0KGYuY3NzKGIsYyxhPyJtYXJnaW4iOiJib3JkZXIiKSk6dGhpc1tjXSgpOm51bGx9LGYuZm5bY109ZnVuY3Rpb24oYSl7cmV0dXJuIGYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oYSxjLGgpe3ZhciBpLGosayxsO2lmKGYuaXNXaW5kb3coYSkpe2k9YS5kb2N1bWVudCxqPWkuZG9jdW1lbnRFbGVtZW50W2RdO3JldHVybiBmLnN1cHBvcnQuYm94TW9kZWwmJmp8fGkuYm9keSYmaS5ib2R5W2RdfHxqfWlmKGEubm9kZVR5cGU9PT05KXtpPWEuZG9jdW1lbnRFbGVtZW50O2lmKGlbZF0+PWlbZV0pcmV0dXJuIGlbZF07cmV0dXJuIE1hdGgubWF4KGEuYm9keVtlXSxpW2VdLGEuYm9keVtnXSxpW2ddKX1pZihoPT09Yil7az1mLmNzcyhhLGMpLGw9cGFyc2VGbG9hdChrKTtyZXR1cm4gZi5pc051bWVyaWMobCk/bDprfWYoYSkuY3NzKGMsaCl9LGMsYSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pLGEualF1ZXJ5PWEuJD1mLHR5cGVvZiBkZWZpbmU9PSJmdW5jdGlvbiImJmRlZmluZS5hbWQmJmRlZmluZS5hbWQualF1ZXJ5JiZkZWZpbmUoImpxdWVyeSIsW10sZnVuY3Rpb24oKXtyZXR1cm4gZn0pfSkod2luZG93KTs=]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery-1.8.3.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjEuOC4zCiAqIGh0dHA6Ly9qcXVlcnkuY29tLwogKgogKiBJbmNsdWRlcyBTaXp6bGUuanMKICogaHR0cDovL3NpenpsZWpzLmNvbS8KICoKICogQ29weXJpZ2h0IDIwMTIgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycwogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UKICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBEYXRlOiBUdWUgTm92IDEzIDIwMTIgMDg6MjA6MzMgR01ULTA1MDAgKEVhc3Rlcm4gU3RhbmRhcmQgVGltZSkKICovCihmdW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7CnZhcgoJLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpCglyb290alF1ZXJ5LAoKCS8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeQoJcmVhZHlMaXN0LAoKCS8vIFVzZSB0aGUgY29ycmVjdCBkb2N1bWVudCBhY2NvcmRpbmdseSB3aXRoIHdpbmRvdyBhcmd1bWVudCAoc2FuZGJveCkKCWRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50LAoJbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24sCgluYXZpZ2F0b3IgPSB3aW5kb3cubmF2aWdhdG9yLAoKCS8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZQoJX2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksCgoJLy8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGUKCV8kID0gd2luZG93LiQsCgoJLy8gU2F2ZSBhIHJlZmVyZW5jZSB0byBzb21lIGNvcmUgbWV0aG9kcwoJY29yZV9wdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2gsCgljb3JlX3NsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLAoJY29yZV9pbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2YsCgljb3JlX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZywKCWNvcmVfaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSwKCWNvcmVfdHJpbSA9IFN0cmluZy5wcm90b3R5cGUudHJpbSwKCgkvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeQoJalF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkgewoJCS8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJwoJCXJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0LCByb290alF1ZXJ5ICk7Cgl9LAoKCS8vIFVzZWQgZm9yIG1hdGNoaW5nIG51bWJlcnMKCWNvcmVfcG51bSA9IC9bXC0rXT8oPzpcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpLy5zb3VyY2UsCgoJLy8gVXNlZCBmb3IgZGV0ZWN0aW5nIGFuZCB0cmltbWluZyB3aGl0ZXNwYWNlCgljb3JlX3Jub3R3aGl0ZSA9IC9cUy8sCgljb3JlX3JzcGFjZSA9IC9ccysvLAoKCS8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUCAoaGVyZSdzIGxvb2tpbmcgYXQgeW91LCBTYWZhcmkgNS4wIGFuZCBJRSkKCXJ0cmltID0gL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLAoKCS8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzCgkvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpCglycXVpY2tFeHByID0gL14oPzpbXiM8XSooPFtcd1xXXSs+KVtePl0qJHwjKFtcd1wtXSopJCkvLAoKCS8vIE1hdGNoIGEgc3RhbmRhbG9uZSB0YWcKCXJzaW5nbGVUYWcgPSAvXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLAoKCS8vIEpTT04gUmVnRXhwCglydmFsaWRjaGFycyA9IC9eW1xdLDp7fVxzXSokLywKCXJ2YWxpZGJyYWNlcyA9IC8oPzpefDp8LCkoPzpccypcWykrL2csCglydmFsaWRlc2NhcGUgPSAvXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csCglydmFsaWR0b2tlbnMgPSAvIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZFxkKlwufClcZCsoPzpbZUVdW1wtK10/XGQrfCkvZywKCgkvLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmcKCXJtc1ByZWZpeCA9IC9eLW1zLS8sCglyZGFzaEFscGhhID0gLy0oW1xkYS16XSkvZ2ksCgoJLy8gVXNlZCBieSBqUXVlcnkuY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKQoJZmNhbWVsQ2FzZSA9IGZ1bmN0aW9uKCBhbGwsIGxldHRlciApIHsKCQlyZXR1cm4gKCBsZXR0ZXIgKyAiIiApLnRvVXBwZXJDYXNlKCk7Cgl9LAoKCS8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kCglET01Db250ZW50TG9hZGVkID0gZnVuY3Rpb24oKSB7CgkJaWYgKCBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyICkgewoJCQlkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CgkJCWpRdWVyeS5yZWFkeSgpOwoJCX0gZWxzZSBpZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJjb21wbGV0ZSIgKSB7CgkJCS8vIHdlJ3JlIGhlcmUgYmVjYXVzZSByZWFkeVN0YXRlID09PSAiY29tcGxldGUiIGluIG9sZElFCgkJCS8vIHdoaWNoIGlzIGdvb2QgZW5vdWdoIGZvciB1cyB0byBjYWxsIHRoZSBkb20gcmVhZHkhCgkJCWRvY3VtZW50LmRldGFjaEV2ZW50KCAib25yZWFkeXN0YXRlY2hhbmdlIiwgRE9NQ29udGVudExvYWRlZCApOwoJCQlqUXVlcnkucmVhZHkoKTsKCQl9Cgl9LAoKCS8vIFtbQ2xhc3NdXSAtPiB0eXBlIHBhaXJzCgljbGFzczJ0eXBlID0ge307CgpqUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0gewoJY29uc3RydWN0b3I6IGpRdWVyeSwKCWluaXQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdGpRdWVyeSApIHsKCQl2YXIgbWF0Y2gsIGVsZW0sIHJldCwgZG9jOwoKCQkvLyBIYW5kbGUgJCgiIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSkKCQlpZiAoICFzZWxlY3RvciApIHsKCQkJcmV0dXJuIHRoaXM7CgkJfQoKCQkvLyBIYW5kbGUgJChET01FbGVtZW50KQoJCWlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7CgkJCXRoaXMuY29udGV4dCA9IHRoaXNbMF0gPSBzZWxlY3RvcjsKCQkJdGhpcy5sZW5ndGggPSAxOwoJCQlyZXR1cm4gdGhpczsKCQl9CgoJCS8vIEhhbmRsZSBIVE1MIHN0cmluZ3MKCQlpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CgkJCWlmICggc2VsZWN0b3IuY2hhckF0KDApID09PSAiPCIgJiYgc2VsZWN0b3IuY2hhckF0KCBzZWxlY3Rvci5sZW5ndGggLSAxICkgPT09ICI+IiAmJiBzZWxlY3Rvci5sZW5ndGggPj0gMyApIHsKCQkJCS8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrCgkJCQltYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTsKCgkJCX0gZWxzZSB7CgkJCQltYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTsKCQkJfQoKCQkJLy8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZAoJCQlpZiAoIG1hdGNoICYmIChtYXRjaFsxXSB8fCAhY29udGV4dCkgKSB7CgoJCQkJLy8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpCgkJCQlpZiAoIG1hdGNoWzFdICkgewoJCQkJCWNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFswXSA6IGNvbnRleHQ7CgkJCQkJZG9jID0gKCBjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50ICk7CgoJCQkJCS8vIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXQKCQkJCQlzZWxlY3RvciA9IGpRdWVyeS5wYXJzZUhUTUwoIG1hdGNoWzFdLCBkb2MsIHRydWUgKTsKCQkJCQlpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbMV0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkgewoJCQkJCQl0aGlzLmF0dHIuY2FsbCggc2VsZWN0b3IsIGNvbnRleHQsIHRydWUgKTsKCQkJCQl9CgoJCQkJCXJldHVybiBqUXVlcnkubWVyZ2UoIHRoaXMsIHNlbGVjdG9yICk7CgoJCQkJLy8gSEFORExFOiAkKCNpZCkKCQkJCX0gZWxzZSB7CgkJCQkJZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsyXSApOwoKCQkJCQkvLyBDaGVjayBwYXJlbnROb2RlIHRvIGNhdGNoIHdoZW4gQmxhY2tiZXJyeSA0LjYgcmV0dXJucwoJCQkJCS8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMKCQkJCQlpZiAoIGVsZW0gJiYgZWxlbS5wYXJlbnROb2RlICkgewoJCQkJCQkvLyBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgSUUgYW5kIE9wZXJhIHJldHVybiBpdGVtcwoJCQkJCQkvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQKCQkJCQkJaWYgKCBlbGVtLmlkICE9PSBtYXRjaFsyXSApIHsKCQkJCQkJCXJldHVybiByb290alF1ZXJ5LmZpbmQoIHNlbGVjdG9yICk7CgkJCQkJCX0KCgkJCQkJCS8vIE90aGVyd2lzZSwgd2UgaW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3QKCQkJCQkJdGhpcy5sZW5ndGggPSAxOwoJCQkJCQl0aGlzWzBdID0gZWxlbTsKCQkJCQl9CgoJCQkJCXRoaXMuY29udGV4dCA9IGRvY3VtZW50OwoJCQkJCXRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjsKCQkJCQlyZXR1cm4gdGhpczsKCQkJCX0KCgkJCS8vIEhBTkRMRTogJChleHByLCAkKC4uLikpCgkJCX0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkgewoJCQkJcmV0dXJuICggY29udGV4dCB8fCByb290alF1ZXJ5ICkuZmluZCggc2VsZWN0b3IgKTsKCgkJCS8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KQoJCQkvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcikKCQkJfSBlbHNlIHsKCQkJCXJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTsKCQkJfQoKCQkvLyBIQU5ETEU6ICQoZnVuY3Rpb24pCgkJLy8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5CgkJfSBlbHNlIGlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7CgkJCXJldHVybiByb290alF1ZXJ5LnJlYWR5KCBzZWxlY3RvciApOwoJCX0KCgkJaWYgKCBzZWxlY3Rvci5zZWxlY3RvciAhPT0gdW5kZWZpbmVkICkgewoJCQl0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3Iuc2VsZWN0b3I7CgkJCXRoaXMuY29udGV4dCA9IHNlbGVjdG9yLmNvbnRleHQ7CgkJfQoKCQlyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTsKCX0sCgoJLy8gU3RhcnQgd2l0aCBhbiBlbXB0eSBzZWxlY3RvcgoJc2VsZWN0b3I6ICIiLAoKCS8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWQKCWpxdWVyeTogIjEuOC4zIiwKCgkvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDAKCWxlbmd0aDogMCwKCgkvLyBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGNvbnRhaW5lZCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldAoJc2l6ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMubGVuZ3RoOwoJfSwKCgl0b0FycmF5OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gY29yZV9zbGljZS5jYWxsKCB0aGlzICk7Cgl9LAoKCS8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1IKCS8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5CglnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7CgkJcmV0dXJuIG51bSA9PSBudWxsID8KCgkJCS8vIFJldHVybiBhICdjbGVhbicgYXJyYXkKCQkJdGhpcy50b0FycmF5KCkgOgoKCQkJLy8gUmV0dXJuIGp1c3QgdGhlIG9iamVjdAoJCQkoIG51bSA8IDAgPyB0aGlzWyB0aGlzLmxlbmd0aCArIG51bSBdIDogdGhpc1sgbnVtIF0gKTsKCX0sCgoJLy8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFjawoJLy8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpCglwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcywgbmFtZSwgc2VsZWN0b3IgKSB7CgoJCS8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0CgkJdmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApOwoKCQkvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKQoJCXJldC5wcmV2T2JqZWN0ID0gdGhpczsKCgkJcmV0LmNvbnRleHQgPSB0aGlzLmNvbnRleHQ7CgoJCWlmICggbmFtZSA9PT0gImZpbmQiICkgewoJCQlyZXQuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yICsgKCB0aGlzLnNlbGVjdG9yID8gIiAiIDogIiIgKSArIHNlbGVjdG9yOwoJCX0gZWxzZSBpZiAoIG5hbWUgKSB7CgkJCXJldC5zZWxlY3RvciA9IHRoaXMuc2VsZWN0b3IgKyAiLiIgKyBuYW1lICsgIigiICsgc2VsZWN0b3IgKyAiKSI7CgkJfQoKCQkvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldAoJCXJldHVybiByZXQ7Cgl9LAoKCS8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuCgkvLyAoWW91IGNhbiBzZWVkIHRoZSBhcmd1bWVudHMgd2l0aCBhbiBhcnJheSBvZiBhcmdzLCBidXQgdGhpcyBpcwoJLy8gb25seSB1c2VkIGludGVybmFsbHkuKQoJZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrLCBhcmdzICkgewoJCXJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2ssIGFyZ3MgKTsKCX0sCgoJcmVhZHk6IGZ1bmN0aW9uKCBmbiApIHsKCQkvLyBBZGQgdGhlIGNhbGxiYWNrCgkJalF1ZXJ5LnJlYWR5LnByb21pc2UoKS5kb25lKCBmbiApOwoKCQlyZXR1cm4gdGhpczsKCX0sCgoJZXE6IGZ1bmN0aW9uKCBpICkgewoJCWkgPSAraTsKCQlyZXR1cm4gaSA9PT0gLTEgPwoJCQl0aGlzLnNsaWNlKCBpICkgOgoJCQl0aGlzLnNsaWNlKCBpLCBpICsgMSApOwoJfSwKCglmaXJzdDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZXEoIDAgKTsKCX0sCgoJbGFzdDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMuZXEoIC0xICk7Cgl9LAoKCXNsaWNlOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGNvcmVfc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApLAoJCQkic2xpY2UiLCBjb3JlX3NsaWNlLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikgKTsKCX0sCgoJbWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7CgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkgewoJCQlyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApOwoJCX0pKTsKCX0sCgoJZW5kOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IobnVsbCk7Cgl9LAoKCS8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KCS8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLgoJcHVzaDogY29yZV9wdXNoLAoJc29ydDogW10uc29ydCwKCXNwbGljZTogW10uc3BsaWNlCn07CgovLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uCmpRdWVyeS5mbi5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjsKCmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7Cgl2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsCgkJdGFyZ2V0ID0gYXJndW1lbnRzWzBdIHx8IHt9LAoJCWkgPSAxLAoJCWxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsCgkJZGVlcCA9IGZhbHNlOwoKCS8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb24KCWlmICggdHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iICkgewoJCWRlZXAgPSB0YXJnZXQ7CgkJdGFyZ2V0ID0gYXJndW1lbnRzWzFdIHx8IHt9OwoJCS8vIHNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXQKCQlpID0gMjsKCX0KCgkvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSkKCWlmICggdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKHRhcmdldCkgKSB7CgkJdGFyZ2V0ID0ge307Cgl9CgoJLy8gZXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkCglpZiAoIGxlbmd0aCA9PT0gaSApIHsKCQl0YXJnZXQgPSB0aGlzOwoJCS0taTsKCX0KCglmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzCgkJaWYgKCAob3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdKSAhPSBudWxsICkgewoJCQkvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0CgkJCWZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKCQkJCXNyYyA9IHRhcmdldFsgbmFtZSBdOwoJCQkJY29weSA9IG9wdGlvbnNbIG5hbWUgXTsKCgkJCQkvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wCgkJCQlpZiAoIHRhcmdldCA9PT0gY29weSApIHsKCQkJCQljb250aW51ZTsKCQkJCX0KCgkJCQkvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXMKCQkJCWlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoY29weSkgfHwgKGNvcHlJc0FycmF5ID0galF1ZXJ5LmlzQXJyYXkoY29weSkpICkgKSB7CgkJCQkJaWYgKCBjb3B5SXNBcnJheSApIHsKCQkJCQkJY29weUlzQXJyYXkgPSBmYWxzZTsKCQkJCQkJY2xvbmUgPSBzcmMgJiYgalF1ZXJ5LmlzQXJyYXkoc3JjKSA/IHNyYyA6IFtdOwoKCQkJCQl9IGVsc2UgewoJCQkJCQljbG9uZSA9IHNyYyAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdChzcmMpID8gc3JjIDoge307CgkJCQkJfQoKCQkJCQkvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW0KCQkJCQl0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7CgoJCQkJLy8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlcwoJCQkJfSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkgewoJCQkJCXRhcmdldFsgbmFtZSBdID0gY29weTsKCQkJCX0KCQkJfQoJCX0KCX0KCgkvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdAoJcmV0dXJuIHRhcmdldDsKfTsKCmpRdWVyeS5leHRlbmQoewoJbm9Db25mbGljdDogZnVuY3Rpb24oIGRlZXAgKSB7CgkJaWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkgewoJCQl3aW5kb3cuJCA9IF8kOwoJCX0KCgkJaWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHsKCQkJd2luZG93LmpRdWVyeSA9IF9qUXVlcnk7CgkJfQoKCQlyZXR1cm4galF1ZXJ5OwoJfSwKCgkvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLgoJaXNSZWFkeTogZmFsc2UsCgoJLy8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZQoJLy8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODEKCXJlYWR5V2FpdDogMSwKCgkvLyBIb2xkIChvciByZWxlYXNlKSB0aGUgcmVhZHkgZXZlbnQKCWhvbGRSZWFkeTogZnVuY3Rpb24oIGhvbGQgKSB7CgkJaWYgKCBob2xkICkgewoJCQlqUXVlcnkucmVhZHlXYWl0Kys7CgkJfSBlbHNlIHsKCQkJalF1ZXJ5LnJlYWR5KCB0cnVlICk7CgkJfQoJfSwKCgkvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5CglyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7CgoJCS8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHkKCQlpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gTWFrZSBzdXJlIGJvZHkgZXhpc3RzLCBhdCBsZWFzdCwgaW4gY2FzZSBJRSBnZXRzIGEgbGl0dGxlIG92ZXJ6ZWFsb3VzICh0aWNrZXQgIzU0NDMpLgoJCWlmICggIWRvY3VtZW50LmJvZHkgKSB7CgkJCXJldHVybiBzZXRUaW1lb3V0KCBqUXVlcnkucmVhZHksIDEgKTsKCQl9CgoJCS8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeQoJCWpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTsKCgkJLy8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmUKCQlpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZQoJCXJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTsKCgkJLy8gVHJpZ2dlciBhbnkgYm91bmQgcmVhZHkgZXZlbnRzCgkJaWYgKCBqUXVlcnkuZm4udHJpZ2dlciApIHsKCQkJalF1ZXJ5KCBkb2N1bWVudCApLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpOwoJCX0KCX0sCgoJLy8gU2VlIHRlc3QvdW5pdC9jb3JlLmpzIGZvciBkZXRhaWxzIGNvbmNlcm5pbmcgaXNGdW5jdGlvbi4KCS8vIFNpbmNlIHZlcnNpb24gMS4zLCBET00gbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGxpa2UgYWxlcnQKCS8vIGFyZW4ndCBzdXBwb3J0ZWQuIFRoZXkgcmV0dXJuIGZhbHNlIG9uIElFICgjMjk2OCkuCglpc0Z1bmN0aW9uOiBmdW5jdGlvbiggb2JqICkgewoJCXJldHVybiBqUXVlcnkudHlwZShvYmopID09PSAiZnVuY3Rpb24iOwoJfSwKCglpc0FycmF5OiBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uKCBvYmogKSB7CgkJcmV0dXJuIGpRdWVyeS50eXBlKG9iaikgPT09ICJhcnJheSI7Cgl9LAoKCWlzV2luZG93OiBmdW5jdGlvbiggb2JqICkgewoJCXJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT0gb2JqLndpbmRvdzsKCX0sCgoJaXNOdW1lcmljOiBmdW5jdGlvbiggb2JqICkgewoJCXJldHVybiAhaXNOYU4oIHBhcnNlRmxvYXQob2JqKSApICYmIGlzRmluaXRlKCBvYmogKTsKCX0sCgoJdHlwZTogZnVuY3Rpb24oIG9iaiApIHsKCQlyZXR1cm4gb2JqID09IG51bGwgPwoJCQlTdHJpbmcoIG9iaiApIDoKCQkJY2xhc3MydHlwZVsgY29yZV90b1N0cmluZy5jYWxsKG9iaikgXSB8fCAib2JqZWN0IjsKCX0sCgoJaXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHsKCQkvLyBNdXN0IGJlIGFuIE9iamVjdC4KCQkvLyBCZWNhdXNlIG9mIElFLCB3ZSBhbHNvIGhhdmUgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHRoZSBjb25zdHJ1Y3RvciBwcm9wZXJ0eS4KCQkvLyBNYWtlIHN1cmUgdGhhdCBET00gbm9kZXMgYW5kIHdpbmRvdyBvYmplY3RzIGRvbid0IHBhc3MgdGhyb3VnaCwgYXMgd2VsbAoJCWlmICggIW9iaiB8fCBqUXVlcnkudHlwZShvYmopICE9PSAib2JqZWN0IiB8fCBvYmoubm9kZVR5cGUgfHwgalF1ZXJ5LmlzV2luZG93KCBvYmogKSApIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJdHJ5IHsKCQkJLy8gTm90IG93biBjb25zdHJ1Y3RvciBwcm9wZXJ0eSBtdXN0IGJlIE9iamVjdAoJCQlpZiAoIG9iai5jb25zdHJ1Y3RvciAmJgoJCQkJIWNvcmVfaGFzT3duLmNhbGwob2JqLCAiY29uc3RydWN0b3IiKSAmJgoJCQkJIWNvcmVfaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiKSApIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0gY2F0Y2ggKCBlICkgewoJCQkvLyBJRTgsOSBXaWxsIHRocm93IGV4Y2VwdGlvbnMgb24gY2VydGFpbiBob3N0IG9iamVjdHMgIzk4OTcKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCgkJLy8gT3duIHByb3BlcnRpZXMgYXJlIGVudW1lcmF0ZWQgZmlyc3RseSwgc28gdG8gc3BlZWQgdXAsCgkJLy8gaWYgbGFzdCBvbmUgaXMgb3duLCB0aGVuIGFsbCBwcm9wZXJ0aWVzIGFyZSBvd24uCgoJCXZhciBrZXk7CgkJZm9yICgga2V5IGluIG9iaiApIHt9CgoJCXJldHVybiBrZXkgPT09IHVuZGVmaW5lZCB8fCBjb3JlX2hhc093bi5jYWxsKCBvYmosIGtleSApOwoJfSwKCglpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkgewoJCXZhciBuYW1lOwoJCWZvciAoIG5hbWUgaW4gb2JqICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiB0cnVlOwoJfSwKCgllcnJvcjogZnVuY3Rpb24oIG1zZyApIHsKCQl0aHJvdyBuZXcgRXJyb3IoIG1zZyApOwoJfSwKCgkvLyBkYXRhOiBzdHJpbmcgb2YgaHRtbAoJLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LCBkZWZhdWx0cyB0byBkb2N1bWVudAoJLy8gc2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nCglwYXJzZUhUTUw6IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBzY3JpcHRzICkgewoJCXZhciBwYXJzZWQ7CgkJaWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gInN0cmluZyIgKSB7CgkJCXJldHVybiBudWxsOwoJCX0KCQlpZiAoIHR5cGVvZiBjb250ZXh0ID09PSAiYm9vbGVhbiIgKSB7CgkJCXNjcmlwdHMgPSBjb250ZXh0OwoJCQljb250ZXh0ID0gMDsKCQl9CgkJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7CgoJCS8vIFNpbmdsZSB0YWcKCQlpZiAoIChwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKSkgKSB7CgkJCXJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWzFdICkgXTsKCQl9CgoJCXBhcnNlZCA9IGpRdWVyeS5idWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyA/IG51bGwgOiBbXSApOwoJCXJldHVybiBqUXVlcnkubWVyZ2UoIFtdLAoJCQkocGFyc2VkLmNhY2hlYWJsZSA/IGpRdWVyeS5jbG9uZSggcGFyc2VkLmZyYWdtZW50ICkgOiBwYXJzZWQuZnJhZ21lbnQpLmNoaWxkTm9kZXMgKTsKCX0sCgoJcGFyc2VKU09OOiBmdW5jdGlvbiggZGF0YSApIHsKCQlpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIikgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCS8vIE1ha2Ugc3VyZSBsZWFkaW5nL3RyYWlsaW5nIHdoaXRlc3BhY2UgaXMgcmVtb3ZlZCAoSUUgY2FuJ3QgaGFuZGxlIGl0KQoJCWRhdGEgPSBqUXVlcnkudHJpbSggZGF0YSApOwoKCQkvLyBBdHRlbXB0IHRvIHBhcnNlIHVzaW5nIHRoZSBuYXRpdmUgSlNPTiBwYXJzZXIgZmlyc3QKCQlpZiAoIHdpbmRvdy5KU09OICYmIHdpbmRvdy5KU09OLnBhcnNlICkgewoJCQlyZXR1cm4gd2luZG93LkpTT04ucGFyc2UoIGRhdGEgKTsKCQl9CgoJCS8vIE1ha2Ugc3VyZSB0aGUgaW5jb21pbmcgZGF0YSBpcyBhY3R1YWwgSlNPTgoJCS8vIExvZ2ljIGJvcnJvd2VkIGZyb20gaHR0cDovL2pzb24ub3JnL2pzb24yLmpzCgkJaWYgKCBydmFsaWRjaGFycy50ZXN0KCBkYXRhLnJlcGxhY2UoIHJ2YWxpZGVzY2FwZSwgIkAiICkKCQkJLnJlcGxhY2UoIHJ2YWxpZHRva2VucywgIl0iICkKCQkJLnJlcGxhY2UoIHJ2YWxpZGJyYWNlcywgIiIpKSApIHsKCgkJCXJldHVybiAoIG5ldyBGdW5jdGlvbiggInJldHVybiAiICsgZGF0YSApICkoKTsKCgkJfQoJCWpRdWVyeS5lcnJvciggIkludmFsaWQgSlNPTjogIiArIGRhdGEgKTsKCX0sCgoJLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZwoJcGFyc2VYTUw6IGZ1bmN0aW9uKCBkYXRhICkgewoJCXZhciB4bWwsIHRtcDsKCQlpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAic3RyaW5nIiApIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoJCXRyeSB7CgkJCWlmICggd2luZG93LkRPTVBhcnNlciApIHsgLy8gU3RhbmRhcmQKCQkJCXRtcCA9IG5ldyBET01QYXJzZXIoKTsKCQkJCXhtbCA9IHRtcC5wYXJzZUZyb21TdHJpbmcoIGRhdGEgLCAidGV4dC94bWwiICk7CgkJCX0gZWxzZSB7IC8vIElFCgkJCQl4bWwgPSBuZXcgQWN0aXZlWE9iamVjdCggIk1pY3Jvc29mdC5YTUxET00iICk7CgkJCQl4bWwuYXN5bmMgPSAiZmFsc2UiOwoJCQkJeG1sLmxvYWRYTUwoIGRhdGEgKTsKCQkJfQoJCX0gY2F0Y2goIGUgKSB7CgkJCXhtbCA9IHVuZGVmaW5lZDsKCQl9CgkJaWYgKCAheG1sIHx8ICF4bWwuZG9jdW1lbnRFbGVtZW50IHx8IHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggInBhcnNlcmVycm9yIiApLmxlbmd0aCApIHsKCQkJalF1ZXJ5LmVycm9yKCAiSW52YWxpZCBYTUw6ICIgKyBkYXRhICk7CgkJfQoJCXJldHVybiB4bWw7Cgl9LAoKCW5vb3A6IGZ1bmN0aW9uKCkge30sCgoJLy8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgZ2xvYmFsIGNvbnRleHQKCS8vIFdvcmthcm91bmRzIGJhc2VkIG9uIGZpbmRpbmdzIGJ5IEppbSBEcmlzY29sbAoJLy8gaHR0cDovL3dlYmxvZ3MuamF2YS5uZXQvYmxvZy9kcmlzY29sbC9hcmNoaXZlLzIwMDkvMDkvMDgvZXZhbC1qYXZhc2NyaXB0LWdsb2JhbC1jb250ZXh0CglnbG9iYWxFdmFsOiBmdW5jdGlvbiggZGF0YSApIHsKCQlpZiAoIGRhdGEgJiYgY29yZV9ybm90d2hpdGUudGVzdCggZGF0YSApICkgewoJCQkvLyBXZSB1c2UgZXhlY1NjcmlwdCBvbiBJbnRlcm5ldCBFeHBsb3JlcgoJCQkvLyBXZSB1c2UgYW4gYW5vbnltb3VzIGZ1bmN0aW9uIHNvIHRoYXQgY29udGV4dCBpcyB3aW5kb3cKCQkJLy8gcmF0aGVyIHRoYW4galF1ZXJ5IGluIEZpcmVmb3gKCQkJKCB3aW5kb3cuZXhlY1NjcmlwdCB8fCBmdW5jdGlvbiggZGF0YSApIHsKCQkJCXdpbmRvd1sgImV2YWwiIF0uY2FsbCggd2luZG93LCBkYXRhICk7CgkJCX0gKSggZGF0YSApOwoJCX0KCX0sCgoJLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlcwoJLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKQoJY2FtZWxDYXNlOiBmdW5jdGlvbiggc3RyaW5nICkgewoJCXJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCAibXMtIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTsKCX0sCgoJbm9kZU5hbWU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCXJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpOwoJfSwKCgkvLyBhcmdzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5CgllYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjaywgYXJncyApIHsKCQl2YXIgbmFtZSwKCQkJaSA9IDAsCgkJCWxlbmd0aCA9IG9iai5sZW5ndGgsCgkJCWlzT2JqID0gbGVuZ3RoID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRnVuY3Rpb24oIG9iaiApOwoKCQlpZiAoIGFyZ3MgKSB7CgkJCWlmICggaXNPYmogKSB7CgkJCQlmb3IgKCBuYW1lIGluIG9iaiApIHsKCQkJCQlpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmpbIG5hbWUgXSwgYXJncyApID09PSBmYWxzZSApIHsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2UgewoJCQkJZm9yICggOyBpIDwgbGVuZ3RoOyApIHsKCQkJCQlpZiAoIGNhbGxiYWNrLmFwcGx5KCBvYmpbIGkrKyBdLCBhcmdzICkgPT09IGZhbHNlICkgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJLy8gQSBzcGVjaWFsLCBmYXN0LCBjYXNlIGZvciB0aGUgbW9zdCBjb21tb24gdXNlIG9mIGVhY2gKCQl9IGVsc2UgewoJCQlpZiAoIGlzT2JqICkgewoJCQkJZm9yICggbmFtZSBpbiBvYmogKSB7CgkJCQkJaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIG5hbWUgXSwgbmFtZSwgb2JqWyBuYW1lIF0gKSA9PT0gZmFsc2UgKSB7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfSBlbHNlIHsKCQkJCWZvciAoIDsgaSA8IGxlbmd0aDsgKSB7CgkJCQkJaWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpKysgXSApID09PSBmYWxzZSApIHsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gb2JqOwoJfSwKCgkvLyBVc2UgbmF0aXZlIFN0cmluZy50cmltIGZ1bmN0aW9uIHdoZXJldmVyIHBvc3NpYmxlCgl0cmltOiBjb3JlX3RyaW0gJiYgIWNvcmVfdHJpbS5jYWxsKCJcdUZFRkZceEEwIikgPwoJCWZ1bmN0aW9uKCB0ZXh0ICkgewoJCQlyZXR1cm4gdGV4dCA9PSBudWxsID8KCQkJCSIiIDoKCQkJCWNvcmVfdHJpbS5jYWxsKCB0ZXh0ICk7CgkJfSA6CgoJCS8vIE90aGVyd2lzZSB1c2Ugb3VyIG93biB0cmltbWluZyBmdW5jdGlvbmFsaXR5CgkJZnVuY3Rpb24oIHRleHQgKSB7CgkJCXJldHVybiB0ZXh0ID09IG51bGwgPwoJCQkJIiIgOgoJCQkJKCB0ZXh0ICsgIiIgKS5yZXBsYWNlKCBydHJpbSwgIiIgKTsKCQl9LAoKCS8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKCW1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHsKCQl2YXIgdHlwZSwKCQkJcmV0ID0gcmVzdWx0cyB8fCBbXTsKCgkJaWYgKCBhcnIgIT0gbnVsbCApIHsKCQkJLy8gVGhlIHdpbmRvdywgc3RyaW5ncyAoYW5kIGZ1bmN0aW9ucykgYWxzbyBoYXZlICdsZW5ndGgnCgkJCS8vIFR3ZWFrZWQgbG9naWMgc2xpZ2h0bHkgdG8gaGFuZGxlIEJsYWNrYmVycnkgNC43IFJlZ0V4cCBpc3N1ZXMgIzY5MzAKCQkJdHlwZSA9IGpRdWVyeS50eXBlKCBhcnIgKTsKCgkJCWlmICggYXJyLmxlbmd0aCA9PSBudWxsIHx8IHR5cGUgPT09ICJzdHJpbmciIHx8IHR5cGUgPT09ICJmdW5jdGlvbiIgfHwgdHlwZSA9PT0gInJlZ2V4cCIgfHwgalF1ZXJ5LmlzV2luZG93KCBhcnIgKSApIHsKCQkJCWNvcmVfcHVzaC5jYWxsKCByZXQsIGFyciApOwoJCQl9IGVsc2UgewoJCQkJalF1ZXJ5Lm1lcmdlKCByZXQsIGFyciApOwoJCQl9CgkJfQoKCQlyZXR1cm4gcmV0OwoJfSwKCglpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkgewoJCXZhciBsZW47CgoJCWlmICggYXJyICkgewoJCQlpZiAoIGNvcmVfaW5kZXhPZiApIHsKCQkJCXJldHVybiBjb3JlX2luZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7CgkJCX0KCgkJCWxlbiA9IGFyci5sZW5ndGg7CgkJCWkgPSBpID8gaSA8IDAgPyBNYXRoLm1heCggMCwgbGVuICsgaSApIDogaSA6IDA7CgoJCQlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsKCQkJCS8vIFNraXAgYWNjZXNzaW5nIGluIHNwYXJzZSBhcnJheXMKCQkJCWlmICggaSBpbiBhcnIgJiYgYXJyWyBpIF0gPT09IGVsZW0gKSB7CgkJCQkJcmV0dXJuIGk7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiAtMTsKCX0sCgoJbWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkgewoJCXZhciBsID0gc2Vjb25kLmxlbmd0aCwKCQkJaSA9IGZpcnN0Lmxlbmd0aCwKCQkJaiA9IDA7CgoJCWlmICggdHlwZW9mIGwgPT09ICJudW1iZXIiICkgewoJCQlmb3IgKCA7IGogPCBsOyBqKysgKSB7CgkJCQlmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTsKCQkJfQoKCQl9IGVsc2UgewoJCQl3aGlsZSAoIHNlY29uZFtqXSAhPT0gdW5kZWZpbmVkICkgewoJCQkJZmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqKysgXTsKCQkJfQoJCX0KCgkJZmlyc3QubGVuZ3RoID0gaTsKCgkJcmV0dXJuIGZpcnN0OwoJfSwKCglncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnYgKSB7CgkJdmFyIHJldFZhbCwKCQkJcmV0ID0gW10sCgkJCWkgPSAwLAoJCQlsZW5ndGggPSBlbGVtcy5sZW5ndGg7CgkJaW52ID0gISFpbnY7CgoJCS8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXMKCQkvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvbgoJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewoJCQlyZXRWYWwgPSAhIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7CgkJCWlmICggaW52ICE9PSByZXRWYWwgKSB7CgkJCQlyZXQucHVzaCggZWxlbXNbIGkgXSApOwoJCQl9CgkJfQoKCQlyZXR1cm4gcmV0OwoJfSwKCgkvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHkKCW1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkgewoJCXZhciB2YWx1ZSwga2V5LAoJCQlyZXQgPSBbXSwKCQkJaSA9IDAsCgkJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aCwKCQkJLy8ganF1ZXJ5IG9iamVjdHMgYXJlIHRyZWF0ZWQgYXMgYXJyYXlzCgkJCWlzQXJyYXkgPSBlbGVtcyBpbnN0YW5jZW9mIGpRdWVyeSB8fCBsZW5ndGggIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgbGVuZ3RoID09PSAibnVtYmVyIiAmJiAoICggbGVuZ3RoID4gMCAmJiBlbGVtc1sgMCBdICYmIGVsZW1zWyBsZW5ndGggLTEgXSApIHx8IGxlbmd0aCA9PT0gMCB8fCBqUXVlcnkuaXNBcnJheSggZWxlbXMgKSApIDsKCgkJLy8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyCgkJaWYgKCBpc0FycmF5ICkgewoJCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkJCXZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApOwoKCQkJCWlmICggdmFsdWUgIT0gbnVsbCApIHsKCQkJCQlyZXRbIHJldC5sZW5ndGggXSA9IHZhbHVlOwoJCQkJfQoJCQl9CgoJCS8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsCgkJfSBlbHNlIHsKCQkJZm9yICgga2V5IGluIGVsZW1zICkgewoJCQkJdmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGtleSBdLCBrZXksIGFyZyApOwoKCQkJCWlmICggdmFsdWUgIT0gbnVsbCApIHsKCQkJCQlyZXRbIHJldC5sZW5ndGggXSA9IHZhbHVlOwoJCQkJfQoJCQl9CgkJfQoKCQkvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzCgkJcmV0dXJuIHJldC5jb25jYXQuYXBwbHkoIFtdLCByZXQgKTsKCX0sCgoJLy8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzCglndWlkOiAxLAoKCS8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueQoJLy8gYXJndW1lbnRzLgoJcHJveHk6IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHsKCQl2YXIgdG1wLCBhcmdzLCBwcm94eTsKCgkJaWYgKCB0eXBlb2YgY29udGV4dCA9PT0gInN0cmluZyIgKSB7CgkJCXRtcCA9IGZuWyBjb250ZXh0IF07CgkJCWNvbnRleHQgPSBmbjsKCQkJZm4gPSB0bXA7CgkJfQoKCQkvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlYwoJCS8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuCgkJaWYgKCAhalF1ZXJ5LmlzRnVuY3Rpb24oIGZuICkgKSB7CgkJCXJldHVybiB1bmRlZmluZWQ7CgkJfQoKCQkvLyBTaW11bGF0ZWQgYmluZAoJCWFyZ3MgPSBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApOwoJCXByb3h5ID0gZnVuY3Rpb24oKSB7CgkJCXJldHVybiBmbi5hcHBseSggY29udGV4dCwgYXJncy5jb25jYXQoIGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApOwoJCX07CgoJCS8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZAoJCXByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrOwoKCQlyZXR1cm4gcHJveHk7Cgl9LAoKCS8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvbgoJLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uCglhY2Nlc3M6IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHBhc3MgKSB7CgkJdmFyIGV4ZWMsCgkJCWJ1bGsgPSBrZXkgPT0gbnVsbCwKCQkJaSA9IDAsCgkJCWxlbmd0aCA9IGVsZW1zLmxlbmd0aDsKCgkJLy8gU2V0cyBtYW55IHZhbHVlcwoJCWlmICgga2V5ICYmIHR5cGVvZiBrZXkgPT09ICJvYmplY3QiICkgewoJCQlmb3IgKCBpIGluIGtleSApIHsKCQkJCWpRdWVyeS5hY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5W2ldLCAxLCBlbXB0eUdldCwgdmFsdWUgKTsKCQkJfQoJCQljaGFpbmFibGUgPSAxOwoKCQkvLyBTZXRzIG9uZSB2YWx1ZQoJCX0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CgkJCS8vIE9wdGlvbmFsbHksIGZ1bmN0aW9uIHZhbHVlcyBnZXQgZXhlY3V0ZWQgaWYgZXhlYyBpcyB0cnVlCgkJCWV4ZWMgPSBwYXNzID09PSB1bmRlZmluZWQgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICk7CgoJCQlpZiAoIGJ1bGsgKSB7CgkJCQkvLyBCdWxrIG9wZXJhdGlvbnMgb25seSBpdGVyYXRlIHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlcwoJCQkJaWYgKCBleGVjICkgewoJCQkJCWV4ZWMgPSBmbjsKCQkJCQlmbiA9IGZ1bmN0aW9uKCBlbGVtLCBrZXksIHZhbHVlICkgewoJCQkJCQlyZXR1cm4gZXhlYy5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTsKCQkJCQl9OwoKCQkJCS8vIE90aGVyd2lzZSB0aGV5IHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0CgkJCQl9IGVsc2UgewoJCQkJCWZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApOwoJCQkJCWZuID0gbnVsbDsKCQkJCX0KCQkJfQoKCQkJaWYgKCBmbiApIHsKCQkJCWZvciAoOyBpIDwgbGVuZ3RoOyBpKysgKSB7CgkJCQkJZm4oIGVsZW1zW2ldLCBrZXksIGV4ZWMgPyB2YWx1ZS5jYWxsKCBlbGVtc1tpXSwgaSwgZm4oIGVsZW1zW2ldLCBrZXkgKSApIDogdmFsdWUsIHBhc3MgKTsKCQkJCX0KCQkJfQoKCQkJY2hhaW5hYmxlID0gMTsKCQl9CgoJCXJldHVybiBjaGFpbmFibGUgPwoJCQllbGVtcyA6CgoJCQkvLyBHZXRzCgkJCWJ1bGsgPwoJCQkJZm4uY2FsbCggZWxlbXMgKSA6CgkJCQlsZW5ndGggPyBmbiggZWxlbXNbMF0sIGtleSApIDogZW1wdHlHZXQ7Cgl9LAoKCW5vdzogZnVuY3Rpb24oKSB7CgkJcmV0dXJuICggbmV3IERhdGUoKSApLmdldFRpbWUoKTsKCX0KfSk7CgpqUXVlcnkucmVhZHkucHJvbWlzZSA9IGZ1bmN0aW9uKCBvYmogKSB7CglpZiAoICFyZWFkeUxpc3QgKSB7CgoJCXJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpOwoKCQkvLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZCBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4KCQkvLyB3ZSBvbmNlIHRyaWVkIHRvIHVzZSByZWFkeVN0YXRlICJpbnRlcmFjdGl2ZSIgaGVyZSwgYnV0IGl0IGNhdXNlZCBpc3N1ZXMgbGlrZSB0aGUgb25lCgkJLy8gZGlzY292ZXJlZCBieSBDaHJpc1MgaGVyZTogaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIyODIjY29tbWVudDoxNQoJCWlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIiApIHsKCQkJLy8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5CgkJCXNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSwgMSApOwoKCQkvLyBTdGFuZGFyZHMtYmFzZWQgYnJvd3NlcnMgc3VwcG9ydCBET01Db250ZW50TG9hZGVkCgkJfSBlbHNlIGlmICggZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciApIHsKCQkJLy8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFjawoJCQlkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCAiRE9NQ29udGVudExvYWRlZCIsIERPTUNvbnRlbnRMb2FkZWQsIGZhbHNlICk7CgoJCQkvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29yawoJCQl3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggImxvYWQiLCBqUXVlcnkucmVhZHksIGZhbHNlICk7CgoJCS8vIElmIElFIGV2ZW50IG1vZGVsIGlzIHVzZWQKCQl9IGVsc2UgewoJCQkvLyBFbnN1cmUgZmlyaW5nIGJlZm9yZSBvbmxvYWQsIG1heWJlIGxhdGUgYnV0IHNhZmUgYWxzbyBmb3IgaWZyYW1lcwoJCQlkb2N1bWVudC5hdHRhY2hFdmVudCggIm9ucmVhZHlzdGF0ZWNoYW5nZSIsIERPTUNvbnRlbnRMb2FkZWQgKTsKCgkJCS8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrCgkJCXdpbmRvdy5hdHRhY2hFdmVudCggIm9ubG9hZCIsIGpRdWVyeS5yZWFkeSApOwoKCQkJLy8gSWYgSUUgYW5kIG5vdCBhIGZyYW1lCgkJCS8vIGNvbnRpbnVhbGx5IGNoZWNrIHRvIHNlZSBpZiB0aGUgZG9jdW1lbnQgaXMgcmVhZHkKCQkJdmFyIHRvcCA9IGZhbHNlOwoKCQkJdHJ5IHsKCQkJCXRvcCA9IHdpbmRvdy5mcmFtZUVsZW1lbnQgPT0gbnVsbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7CgkJCX0gY2F0Y2goZSkge30KCgkJCWlmICggdG9wICYmIHRvcC5kb1Njcm9sbCApIHsKCQkJCShmdW5jdGlvbiBkb1Njcm9sbENoZWNrKCkgewoJCQkJCWlmICggIWpRdWVyeS5pc1JlYWR5ICkgewoKCQkJCQkJdHJ5IHsKCQkJCQkJCS8vIFVzZSB0aGUgdHJpY2sgYnkgRGllZ28gUGVyaW5pCgkJCQkJCQkvLyBodHRwOi8vamF2YXNjcmlwdC5ud2JveC5jb20vSUVDb250ZW50TG9hZGVkLwoJCQkJCQkJdG9wLmRvU2Nyb2xsKCJsZWZ0Iik7CgkJCQkJCX0gY2F0Y2goZSkgewoJCQkJCQkJcmV0dXJuIHNldFRpbWVvdXQoIGRvU2Nyb2xsQ2hlY2ssIDUwICk7CgkJCQkJCX0KCgkJCQkJCS8vIGFuZCBleGVjdXRlIGFueSB3YWl0aW5nIGZ1bmN0aW9ucwoJCQkJCQlqUXVlcnkucmVhZHkoKTsKCQkJCQl9CgkJCQl9KSgpOwoJCQl9CgkJfQoJfQoJcmV0dXJuIHJlYWR5TGlzdC5wcm9taXNlKCBvYmogKTsKfTsKCi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcApqUXVlcnkuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSwgZnVuY3Rpb24oaSwgbmFtZSkgewoJY2xhc3MydHlwZVsgIltvYmplY3QgIiArIG5hbWUgKyAiXSIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKfSk7CgovLyBBbGwgalF1ZXJ5IG9iamVjdHMgc2hvdWxkIHBvaW50IGJhY2sgdG8gdGhlc2UKcm9vdGpRdWVyeSA9IGpRdWVyeShkb2N1bWVudCk7Ci8vIFN0cmluZyB0byBPYmplY3Qgb3B0aW9ucyBmb3JtYXQgY2FjaGUKdmFyIG9wdGlvbnNDYWNoZSA9IHt9OwoKLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXMgYW5kIHN0b3JlIGluIGNhY2hlCmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7Cgl2YXIgb2JqZWN0ID0gb3B0aW9uc0NhY2hlWyBvcHRpb25zIF0gPSB7fTsKCWpRdWVyeS5lYWNoKCBvcHRpb25zLnNwbGl0KCBjb3JlX3JzcGFjZSApLCBmdW5jdGlvbiggXywgZmxhZyApIHsKCQlvYmplY3RbIGZsYWcgXSA9IHRydWU7Cgl9KTsKCXJldHVybiBvYmplY3Q7Cn0KCi8qCiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgogKgogKglvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93CiAqCQkJdGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdAogKgogKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZQogKiAiZmlyZWQiIG11bHRpcGxlIHRpbWVzLgogKgogKiBQb3NzaWJsZSBvcHRpb25zOgogKgogKglvbmNlOgkJCXdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZCkKICoKICoJbWVtb3J5OgkJCXdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWQKICoJCQkJCWFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0ICJtZW1vcml6ZWQiCiAqCQkJCQl2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZCkKICoKICoJdW5pcXVlOgkJCXdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KQogKgogKglzdG9wT25GYWxzZToJaW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlCiAqCiAqLwpqUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7CgoJLy8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZAoJLy8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KQoJb3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSAic3RyaW5nIiA/CgkJKCBvcHRpb25zQ2FjaGVbIG9wdGlvbnMgXSB8fCBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgKSA6CgkJalF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTsKCgl2YXIgLy8gTGFzdCBmaXJlIHZhbHVlIChmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzKQoJCW1lbW9yeSwKCQkvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZAoJCWZpcmVkLAoJCS8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmcKCQlmaXJpbmcsCgkJLy8gRmlyc3QgY2FsbGJhY2sgdG8gZmlyZSAodXNlZCBpbnRlcm5hbGx5IGJ5IGFkZCBhbmQgZmlyZVdpdGgpCgkJZmlyaW5nU3RhcnQsCgkJLy8gRW5kIG9mIHRoZSBsb29wIHdoZW4gZmlyaW5nCgkJZmlyaW5nTGVuZ3RoLAoJCS8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IHJlbW92ZSBpZiBuZWVkZWQpCgkJZmlyaW5nSW5kZXgsCgkJLy8gQWN0dWFsIGNhbGxiYWNrIGxpc3QKCQlsaXN0ID0gW10sCgkJLy8gU3RhY2sgb2YgZmlyZSBjYWxscyBmb3IgcmVwZWF0YWJsZSBsaXN0cwoJCXN0YWNrID0gIW9wdGlvbnMub25jZSAmJiBbXSwKCQkvLyBGaXJlIGNhbGxiYWNrcwoJCWZpcmUgPSBmdW5jdGlvbiggZGF0YSApIHsKCQkJbWVtb3J5ID0gb3B0aW9ucy5tZW1vcnkgJiYgZGF0YTsKCQkJZmlyZWQgPSB0cnVlOwoJCQlmaXJpbmdJbmRleCA9IGZpcmluZ1N0YXJ0IHx8IDA7CgkJCWZpcmluZ1N0YXJ0ID0gMDsKCQkJZmlyaW5nTGVuZ3RoID0gbGlzdC5sZW5ndGg7CgkJCWZpcmluZyA9IHRydWU7CgkJCWZvciAoIDsgbGlzdCAmJiBmaXJpbmdJbmRleCA8IGZpcmluZ0xlbmd0aDsgZmlyaW5nSW5kZXgrKyApIHsKCQkJCWlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggZGF0YVsgMCBdLCBkYXRhWyAxIF0gKSA9PT0gZmFsc2UgJiYgb3B0aW9ucy5zdG9wT25GYWxzZSApIHsKCQkJCQltZW1vcnkgPSBmYWxzZTsgLy8gVG8gcHJldmVudCBmdXJ0aGVyIGNhbGxzIHVzaW5nIGFkZAoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCWZpcmluZyA9IGZhbHNlOwoJCQlpZiAoIGxpc3QgKSB7CgkJCQlpZiAoIHN0YWNrICkgewoJCQkJCWlmICggc3RhY2subGVuZ3RoICkgewoJCQkJCQlmaXJlKCBzdGFjay5zaGlmdCgpICk7CgkJCQkJfQoJCQkJfSBlbHNlIGlmICggbWVtb3J5ICkgewoJCQkJCWxpc3QgPSBbXTsKCQkJCX0gZWxzZSB7CgkJCQkJc2VsZi5kaXNhYmxlKCk7CgkJCQl9CgkJCX0KCQl9LAoJCS8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0CgkJc2VsZiA9IHsKCQkJLy8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdAoJCQlhZGQ6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBsaXN0ICkgewoJCQkJCS8vIEZpcnN0LCB3ZSBzYXZlIHRoZSBjdXJyZW50IGxlbmd0aAoJCQkJCXZhciBzdGFydCA9IGxpc3QubGVuZ3RoOwoJCQkJCShmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7CgkJCQkJCWpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkgewoJCQkJCQkJdmFyIHR5cGUgPSBqUXVlcnkudHlwZSggYXJnICk7CgkJCQkJCQlpZiAoIHR5cGUgPT09ICJmdW5jdGlvbiIgKSB7CgkJCQkJCQkJaWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHsKCQkJCQkJCQkJbGlzdC5wdXNoKCBhcmcgKTsKCQkJCQkJCQl9CgkJCQkJCQl9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0eXBlICE9PSAic3RyaW5nIiApIHsKCQkJCQkJCQkvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5CgkJCQkJCQkJYWRkKCBhcmcgKTsKCQkJCQkJCX0KCQkJCQkJfSk7CgkJCQkJfSkoIGFyZ3VtZW50cyApOwoJCQkJCS8vIERvIHdlIG5lZWQgdG8gYWRkIHRoZSBjYWxsYmFja3MgdG8gdGhlCgkJCQkJLy8gY3VycmVudCBmaXJpbmcgYmF0Y2g/CgkJCQkJaWYgKCBmaXJpbmcgKSB7CgkJCQkJCWZpcmluZ0xlbmd0aCA9IGxpc3QubGVuZ3RoOwoJCQkJCS8vIFdpdGggbWVtb3J5LCBpZiB3ZSdyZSBub3QgZmlyaW5nIHRoZW4KCQkJCQkvLyB3ZSBzaG91bGQgY2FsbCByaWdodCBhd2F5CgkJCQkJfSBlbHNlIGlmICggbWVtb3J5ICkgewoJCQkJCQlmaXJpbmdTdGFydCA9IHN0YXJ0OwoJCQkJCQlmaXJlKCBtZW1vcnkgKTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gdGhpczsKCQkJfSwKCQkJLy8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdAoJCQlyZW1vdmU6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBsaXN0ICkgewoJCQkJCWpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7CgkJCQkJCXZhciBpbmRleDsKCQkJCQkJd2hpbGUoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHsKCQkJCQkJCWxpc3Quc3BsaWNlKCBpbmRleCwgMSApOwoJCQkJCQkJLy8gSGFuZGxlIGZpcmluZyBpbmRleGVzCgkJCQkJCQlpZiAoIGZpcmluZyApIHsKCQkJCQkJCQlpZiAoIGluZGV4IDw9IGZpcmluZ0xlbmd0aCApIHsKCQkJCQkJCQkJZmlyaW5nTGVuZ3RoLS07CgkJCQkJCQkJfQoJCQkJCQkJCWlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7CgkJCQkJCQkJCWZpcmluZ0luZGV4LS07CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSk7CgkJCQl9CgkJCQlyZXR1cm4gdGhpczsKCQkJfSwKCQkJLy8gQ29udHJvbCBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0CgkJCWhhczogZnVuY3Rpb24oIGZuICkgewoJCQkJcmV0dXJuIGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTE7CgkJCX0sCgkJCS8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3QKCQkJZW1wdHk6IGZ1bmN0aW9uKCkgewoJCQkJbGlzdCA9IFtdOwoJCQkJcmV0dXJuIHRoaXM7CgkJCX0sCgkJCS8vIEhhdmUgdGhlIGxpc3QgZG8gbm90aGluZyBhbnltb3JlCgkJCWRpc2FibGU6IGZ1bmN0aW9uKCkgewoJCQkJbGlzdCA9IHN0YWNrID0gbWVtb3J5ID0gdW5kZWZpbmVkOwoJCQkJcmV0dXJuIHRoaXM7CgkJCX0sCgkJCS8vIElzIGl0IGRpc2FibGVkPwoJCQlkaXNhYmxlZDogZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gIWxpc3Q7CgkJCX0sCgkJCS8vIExvY2sgdGhlIGxpc3QgaW4gaXRzIGN1cnJlbnQgc3RhdGUKCQkJbG9jazogZnVuY3Rpb24oKSB7CgkJCQlzdGFjayA9IHVuZGVmaW5lZDsKCQkJCWlmICggIW1lbW9yeSApIHsKCQkJCQlzZWxmLmRpc2FibGUoKTsKCQkJCX0KCQkJCXJldHVybiB0aGlzOwoJCQl9LAoJCQkvLyBJcyBpdCBsb2NrZWQ/CgkJCWxvY2tlZDogZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gIXN0YWNrOwoJCQl9LAoJCQkvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzCgkJCWZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHsKCQkJCWFyZ3MgPSBhcmdzIHx8IFtdOwoJCQkJYXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTsKCQkJCWlmICggbGlzdCAmJiAoICFmaXJlZCB8fCBzdGFjayApICkgewoJCQkJCWlmICggZmlyaW5nICkgewoJCQkJCQlzdGFjay5wdXNoKCBhcmdzICk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJZmlyZSggYXJncyApOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiB0aGlzOwoJCQl9LAoJCQkvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cwoJCQlmaXJlOiBmdW5jdGlvbigpIHsKCQkJCXNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApOwoJCQkJcmV0dXJuIHRoaXM7CgkJCX0sCgkJCS8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZQoJCQlmaXJlZDogZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gISFmaXJlZDsKCQkJfQoJCX07CgoJcmV0dXJuIHNlbGY7Cn07CmpRdWVyeS5leHRlbmQoewoKCURlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHsKCQl2YXIgdHVwbGVzID0gWwoJCQkJLy8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGxpc3RlbmVyIGxpc3QsIGZpbmFsIHN0YXRlCgkJCQlbICJyZXNvbHZlIiwgImRvbmUiLCBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCAicmVzb2x2ZWQiIF0sCgkJCQlbICJyZWplY3QiLCAiZmFpbCIsIGpRdWVyeS5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksICJyZWplY3RlZCIgXSwKCQkJCVsgIm5vdGlmeSIsICJwcm9ncmVzcyIsIGpRdWVyeS5DYWxsYmFja3MoIm1lbW9yeSIpIF0KCQkJXSwKCQkJc3RhdGUgPSAicGVuZGluZyIsCgkJCXByb21pc2UgPSB7CgkJCQlzdGF0ZTogZnVuY3Rpb24oKSB7CgkJCQkJcmV0dXJuIHN0YXRlOwoJCQkJfSwKCQkJCWFsd2F5czogZnVuY3Rpb24oKSB7CgkJCQkJZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7CgkJCQkJcmV0dXJuIHRoaXM7CgkJCQl9LAoJCQkJdGhlbjogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkgewoJCQkJCXZhciBmbnMgPSBhcmd1bWVudHM7CgkJCQkJcmV0dXJuIGpRdWVyeS5EZWZlcnJlZChmdW5jdGlvbiggbmV3RGVmZXIgKSB7CgkJCQkJCWpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHsKCQkJCQkJCXZhciBhY3Rpb24gPSB0dXBsZVsgMCBdLAoJCQkJCQkJCWZuID0gZm5zWyBpIF07CgkJCQkJCQkvLyBkZWZlcnJlZFsgZG9uZSB8IGZhaWwgfCBwcm9ncmVzcyBdIGZvciBmb3J3YXJkaW5nIGFjdGlvbnMgdG8gbmV3RGVmZXIKCQkJCQkJCWRlZmVycmVkWyB0dXBsZVsxXSBdKCBqUXVlcnkuaXNGdW5jdGlvbiggZm4gKSA/CgkJCQkJCQkJZnVuY3Rpb24oKSB7CgkJCQkJCQkJCXZhciByZXR1cm5lZCA9IGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJCQkJCQkJaWYgKCByZXR1cm5lZCAmJiBqUXVlcnkuaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkgewoJCQkJCQkJCQkJcmV0dXJuZWQucHJvbWlzZSgpCgkJCQkJCQkJCQkJLmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKQoJCQkJCQkJCQkJCS5mYWlsKCBuZXdEZWZlci5yZWplY3QgKQoJCQkJCQkJCQkJCS5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5ICk7CgkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQluZXdEZWZlclsgYWN0aW9uICsgIldpdGgiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gbmV3RGVmZXIgOiB0aGlzLCBbIHJldHVybmVkIF0gKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0gOgoJCQkJCQkJCW5ld0RlZmVyWyBhY3Rpb24gXQoJCQkJCQkJKTsKCQkJCQkJfSk7CgkJCQkJCWZucyA9IG51bGw7CgkJCQkJfSkucHJvbWlzZSgpOwoJCQkJfSwKCQkJCS8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWQKCQkJCS8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3QKCQkJCXByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7CgkJCQkJcmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlOwoJCQkJfQoJCQl9LAoJCQlkZWZlcnJlZCA9IHt9OwoKCQkvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0CgkJcHJvbWlzZS5waXBlID0gcHJvbWlzZS50aGVuOwoKCQkvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzCgkJalF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkgewoJCQl2YXIgbGlzdCA9IHR1cGxlWyAyIF0sCgkJCQlzdGF0ZVN0cmluZyA9IHR1cGxlWyAzIF07CgoJCQkvLyBwcm9taXNlWyBkb25lIHwgZmFpbCB8IHByb2dyZXNzIF0gPSBsaXN0LmFkZAoJCQlwcm9taXNlWyB0dXBsZVsxXSBdID0gbGlzdC5hZGQ7CgoJCQkvLyBIYW5kbGUgc3RhdGUKCQkJaWYgKCBzdGF0ZVN0cmluZyApIHsKCQkJCWxpc3QuYWRkKGZ1bmN0aW9uKCkgewoJCQkJCS8vIHN0YXRlID0gWyByZXNvbHZlZCB8IHJlamVjdGVkIF0KCQkJCQlzdGF0ZSA9IHN0YXRlU3RyaW5nOwoKCQkJCS8vIFsgcmVqZWN0X2xpc3QgfCByZXNvbHZlX2xpc3QgXS5kaXNhYmxlOyBwcm9ncmVzc19saXN0LmxvY2sKCQkJCX0sIHR1cGxlc1sgaSBeIDEgXVsgMiBdLmRpc2FibGUsIHR1cGxlc1sgMiBdWyAyIF0ubG9jayApOwoJCQl9CgoJCQkvLyBkZWZlcnJlZFsgcmVzb2x2ZSB8IHJlamVjdCB8IG5vdGlmeSBdID0gbGlzdC5maXJlCgkJCWRlZmVycmVkWyB0dXBsZVswXSBdID0gbGlzdC5maXJlOwoJCQlkZWZlcnJlZFsgdHVwbGVbMF0gKyAiV2l0aCIgXSA9IGxpc3QuZmlyZVdpdGg7CgkJfSk7CgoJCS8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZQoJCXByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTsKCgkJLy8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueQoJCWlmICggZnVuYyApIHsKCQkJZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTsKCQl9CgoJCS8vIEFsbCBkb25lIQoJCXJldHVybiBkZWZlcnJlZDsKCX0sCgoJLy8gRGVmZXJyZWQgaGVscGVyCgl3aGVuOiBmdW5jdGlvbiggc3Vib3JkaW5hdGUgLyogLCAuLi4sIHN1Ym9yZGluYXRlTiAqLyApIHsKCQl2YXIgaSA9IDAsCgkJCXJlc29sdmVWYWx1ZXMgPSBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApLAoJCQlsZW5ndGggPSByZXNvbHZlVmFsdWVzLmxlbmd0aCwKCgkJCS8vIHRoZSBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXMKCQkJcmVtYWluaW5nID0gbGVuZ3RoICE9PSAxIHx8ICggc3Vib3JkaW5hdGUgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHN1Ym9yZGluYXRlLnByb21pc2UgKSApID8gbGVuZ3RoIDogMCwKCgkJCS8vIHRoZSBtYXN0ZXIgRGVmZXJyZWQuIElmIHJlc29sdmVWYWx1ZXMgY29uc2lzdCBvZiBvbmx5IGEgc2luZ2xlIERlZmVycmVkLCBqdXN0IHVzZSB0aGF0LgoJCQlkZWZlcnJlZCA9IHJlbWFpbmluZyA9PT0gMSA/IHN1Ym9yZGluYXRlIDogalF1ZXJ5LkRlZmVycmVkKCksCgoJCQkvLyBVcGRhdGUgZnVuY3Rpb24gZm9yIGJvdGggcmVzb2x2ZSBhbmQgcHJvZ3Jlc3MgdmFsdWVzCgkJCXVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSwgY29udGV4dHMsIHZhbHVlcyApIHsKCQkJCXJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCQkJY29udGV4dHNbIGkgXSA9IHRoaXM7CgkJCQkJdmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTsKCQkJCQlpZiggdmFsdWVzID09PSBwcm9ncmVzc1ZhbHVlcyApIHsKCQkJCQkJZGVmZXJyZWQubm90aWZ5V2l0aCggY29udGV4dHMsIHZhbHVlcyApOwoJCQkJCX0gZWxzZSBpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7CgkJCQkJCWRlZmVycmVkLnJlc29sdmVXaXRoKCBjb250ZXh0cywgdmFsdWVzICk7CgkJCQkJfQoJCQkJfTsKCQkJfSwKCgkJCXByb2dyZXNzVmFsdWVzLCBwcm9ncmVzc0NvbnRleHRzLCByZXNvbHZlQ29udGV4dHM7CgoJCS8vIGFkZCBsaXN0ZW5lcnMgdG8gRGVmZXJyZWQgc3Vib3JkaW5hdGVzOyB0cmVhdCBvdGhlcnMgYXMgcmVzb2x2ZWQKCQlpZiAoIGxlbmd0aCA+IDEgKSB7CgkJCXByb2dyZXNzVmFsdWVzID0gbmV3IEFycmF5KCBsZW5ndGggKTsKCQkJcHJvZ3Jlc3NDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7CgkJCXJlc29sdmVDb250ZXh0cyA9IG5ldyBBcnJheSggbGVuZ3RoICk7CgkJCWZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkgewoJCQkJaWYgKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXS5wcm9taXNlICkgKSB7CgkJCQkJcmVzb2x2ZVZhbHVlc1sgaSBdLnByb21pc2UoKQoJCQkJCQkuZG9uZSggdXBkYXRlRnVuYyggaSwgcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICkgKQoJCQkJCQkuZmFpbCggZGVmZXJyZWQucmVqZWN0ICkKCQkJCQkJLnByb2dyZXNzKCB1cGRhdGVGdW5jKCBpLCBwcm9ncmVzc0NvbnRleHRzLCBwcm9ncmVzc1ZhbHVlcyApICk7CgkJCQl9IGVsc2UgewoJCQkJCS0tcmVtYWluaW5nOwoJCQkJfQoJCQl9CgkJfQoKCQkvLyBpZiB3ZSdyZSBub3Qgd2FpdGluZyBvbiBhbnl0aGluZywgcmVzb2x2ZSB0aGUgbWFzdGVyCgkJaWYgKCAhcmVtYWluaW5nICkgewoJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7CgkJfQoKCQlyZXR1cm4gZGVmZXJyZWQucHJvbWlzZSgpOwoJfQp9KTsKalF1ZXJ5LnN1cHBvcnQgPSAoZnVuY3Rpb24oKSB7CgoJdmFyIHN1cHBvcnQsCgkJYWxsLAoJCWEsCgkJc2VsZWN0LAoJCW9wdCwKCQlpbnB1dCwKCQlmcmFnbWVudCwKCQlldmVudE5hbWUsCgkJaSwKCQlpc1N1cHBvcnRlZCwKCQljbGlja0ZuLAoJCWRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoKCS8vIFNldHVwCglkaXYuc2V0QXR0cmlidXRlKCAiY2xhc3NOYW1lIiwgInQiICk7CglkaXYuaW5uZXJIVE1MID0gIiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiI7CgoJLy8gU3VwcG9ydCB0ZXN0cyB3b24ndCBydW4gaW4gc29tZSBsaW1pdGVkIG9yIG5vbi1icm93c2VyIGVudmlyb25tZW50cwoJYWxsID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIik7CglhID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbIDAgXTsKCWlmICggIWFsbCB8fCAhYSB8fCAhYWxsLmxlbmd0aCApIHsKCQlyZXR1cm4ge307Cgl9CgoJLy8gRmlyc3QgYmF0Y2ggb2YgdGVzdHMKCXNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpOwoJb3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSApOwoJaW5wdXQgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbIDAgXTsKCglhLnN0eWxlLmNzc1RleHQgPSAidG9wOjFweDtmbG9hdDpsZWZ0O29wYWNpdHk6LjUiOwoJc3VwcG9ydCA9IHsKCQkvLyBJRSBzdHJpcHMgbGVhZGluZyB3aGl0ZXNwYWNlIHdoZW4gLmlubmVySFRNTCBpcyB1c2VkCgkJbGVhZGluZ1doaXRlc3BhY2U6ICggZGl2LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IDMgKSwKCgkJLy8gTWFrZSBzdXJlIHRoYXQgdGJvZHkgZWxlbWVudHMgYXJlbid0IGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQKCQkvLyBJRSB3aWxsIGluc2VydCB0aGVtIGludG8gZW1wdHkgdGFibGVzCgkJdGJvZHk6ICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLAoKCQkvLyBNYWtlIHN1cmUgdGhhdCBsaW5rIGVsZW1lbnRzIGdldCBzZXJpYWxpemVkIGNvcnJlY3RseSBieSBpbm5lckhUTUwKCQkvLyBUaGlzIHJlcXVpcmVzIGEgd3JhcHBlciBlbGVtZW50IGluIElFCgkJaHRtbFNlcmlhbGl6ZTogISFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsCgoJCS8vIEdldCB0aGUgc3R5bGUgaW5mb3JtYXRpb24gZnJvbSBnZXRBdHRyaWJ1dGUKCQkvLyAoSUUgdXNlcyAuY3NzVGV4dCBpbnN0ZWFkKQoJCXN0eWxlOiAvdG9wLy50ZXN0KCBhLmdldEF0dHJpYnV0ZSgic3R5bGUiKSApLAoKCQkvLyBNYWtlIHN1cmUgdGhhdCBVUkxzIGFyZW4ndCBtYW5pcHVsYXRlZAoJCS8vIChJRSBub3JtYWxpemVzIGl0IGJ5IGRlZmF1bHQpCgkJaHJlZk5vcm1hbGl6ZWQ6ICggYS5nZXRBdHRyaWJ1dGUoImhyZWYiKSA9PT0gIi9hIiApLAoKCQkvLyBNYWtlIHN1cmUgdGhhdCBlbGVtZW50IG9wYWNpdHkgZXhpc3RzCgkJLy8gKElFIHVzZXMgZmlsdGVyIGluc3RlYWQpCgkJLy8gVXNlIGEgcmVnZXggdG8gd29yayBhcm91bmQgYSBXZWJLaXQgaXNzdWUuIFNlZSAjNTE0NQoJCW9wYWNpdHk6IC9eMC41Ly50ZXN0KCBhLnN0eWxlLm9wYWNpdHkgKSwKCgkJLy8gVmVyaWZ5IHN0eWxlIGZsb2F0IGV4aXN0ZW5jZQoJCS8vIChJRSB1c2VzIHN0eWxlRmxvYXQgaW5zdGVhZCBvZiBjc3NGbG9hdCkKCQljc3NGbG9hdDogISFhLnN0eWxlLmNzc0Zsb2F0LAoKCQkvLyBNYWtlIHN1cmUgdGhhdCBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yIGEgY2hlY2tib3gKCQkvLyB0aGF0IGl0IGRlZmF1bHRzIHRvICJvbiIuCgkJLy8gKFdlYktpdCBkZWZhdWx0cyB0byAiIiBpbnN0ZWFkKQoJCWNoZWNrT246ICggaW5wdXQudmFsdWUgPT09ICJvbiIgKSwKCgkJLy8gTWFrZSBzdXJlIHRoYXQgYSBzZWxlY3RlZC1ieS1kZWZhdWx0IG9wdGlvbiBoYXMgYSB3b3JraW5nIHNlbGVjdGVkIHByb3BlcnR5LgoJCS8vIChXZWJLaXQgZGVmYXVsdHMgdG8gZmFsc2UgaW5zdGVhZCBvZiB0cnVlLCBJRSB0b28sIGlmIGl0J3MgaW4gYW4gb3B0Z3JvdXApCgkJb3B0U2VsZWN0ZWQ6IG9wdC5zZWxlY3RlZCwKCgkJLy8gVGVzdCBzZXRBdHRyaWJ1dGUgb24gY2FtZWxDYXNlIGNsYXNzLiBJZiBpdCB3b3Jrcywgd2UgbmVlZCBhdHRyRml4ZXMgd2hlbiBkb2luZyBnZXQvc2V0QXR0cmlidXRlIChpZTYvNykKCQlnZXRTZXRBdHRyaWJ1dGU6IGRpdi5jbGFzc05hbWUgIT09ICJ0IiwKCgkJLy8gVGVzdHMgZm9yIGVuY3R5cGUgc3VwcG9ydCBvbiBhIGZvcm0gKCM2NzQzKQoJCWVuY3R5cGU6ICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsCgoJCS8vIE1ha2VzIHN1cmUgY2xvbmluZyBhbiBodG1sNSBlbGVtZW50IGRvZXMgbm90IGNhdXNlIHByb2JsZW1zCgkJLy8gV2hlcmUgb3V0ZXJIVE1MIGlzIHVuZGVmaW5lZCwgdGhpcyBzdGlsbCB3b3JrcwoJCWh0bWw1Q2xvbmU6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm5hdiIpLmNsb25lTm9kZSggdHJ1ZSApLm91dGVySFRNTCAhPT0gIjw6bmF2PjwvOm5hdj4iLAoKCQkvLyBqUXVlcnkuc3VwcG9ydC5ib3hNb2RlbCBERVBSRUNBVEVEIGluIDEuOCBzaW5jZSB3ZSBkb24ndCBzdXBwb3J0IFF1aXJrcyBNb2RlCgkJYm94TW9kZWw6ICggZG9jdW1lbnQuY29tcGF0TW9kZSA9PT0gIkNTUzFDb21wYXQiICksCgoJCS8vIFdpbGwgYmUgZGVmaW5lZCBsYXRlcgoJCXN1Ym1pdEJ1YmJsZXM6IHRydWUsCgkJY2hhbmdlQnViYmxlczogdHJ1ZSwKCQlmb2N1c2luQnViYmxlczogZmFsc2UsCgkJZGVsZXRlRXhwYW5kbzogdHJ1ZSwKCQlub0Nsb25lRXZlbnQ6IHRydWUsCgkJaW5saW5lQmxvY2tOZWVkc0xheW91dDogZmFsc2UsCgkJc2hyaW5rV3JhcEJsb2NrczogZmFsc2UsCgkJcmVsaWFibGVNYXJnaW5SaWdodDogdHJ1ZSwKCQlib3hTaXppbmdSZWxpYWJsZTogdHJ1ZSwKCQlwaXhlbFBvc2l0aW9uOiBmYWxzZQoJfTsKCgkvLyBNYWtlIHN1cmUgY2hlY2tlZCBzdGF0dXMgaXMgcHJvcGVybHkgY2xvbmVkCglpbnB1dC5jaGVja2VkID0gdHJ1ZTsKCXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSBpbnB1dC5jbG9uZU5vZGUoIHRydWUgKS5jaGVja2VkOwoKCS8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBvcHRpb25zIGluc2lkZSBkaXNhYmxlZCBzZWxlY3RzIGFyZW4ndCBtYXJrZWQgYXMgZGlzYWJsZWQKCS8vIChXZWJLaXQgbWFya3MgdGhlbSBhcyBkaXNhYmxlZCkKCXNlbGVjdC5kaXNhYmxlZCA9IHRydWU7CglzdXBwb3J0Lm9wdERpc2FibGVkID0gIW9wdC5kaXNhYmxlZDsKCgkvLyBUZXN0IHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRlbGV0ZSBhbiBleHBhbmRvIGZyb20gYW4gZWxlbWVudAoJLy8gRmFpbHMgaW4gSW50ZXJuZXQgRXhwbG9yZXIKCXRyeSB7CgkJZGVsZXRlIGRpdi50ZXN0OwoJfSBjYXRjaCggZSApIHsKCQlzdXBwb3J0LmRlbGV0ZUV4cGFuZG8gPSBmYWxzZTsKCX0KCglpZiAoICFkaXYuYWRkRXZlbnRMaXN0ZW5lciAmJiBkaXYuYXR0YWNoRXZlbnQgJiYgZGl2LmZpcmVFdmVudCApIHsKCQlkaXYuYXR0YWNoRXZlbnQoICJvbmNsaWNrIiwgY2xpY2tGbiA9IGZ1bmN0aW9uKCkgewoJCQkvLyBDbG9uaW5nIGEgbm9kZSBzaG91bGRuJ3QgY29weSBvdmVyIGFueQoJCQkvLyBib3VuZCBldmVudCBoYW5kbGVycyAoSUUgZG9lcyB0aGlzKQoJCQlzdXBwb3J0Lm5vQ2xvbmVFdmVudCA9IGZhbHNlOwoJCX0pOwoJCWRpdi5jbG9uZU5vZGUoIHRydWUgKS5maXJlRXZlbnQoIm9uY2xpY2siKTsKCQlkaXYuZGV0YWNoRXZlbnQoICJvbmNsaWNrIiwgY2xpY2tGbiApOwoJfQoKCS8vIENoZWNrIGlmIGEgcmFkaW8gbWFpbnRhaW5zIGl0cyB2YWx1ZQoJLy8gYWZ0ZXIgYmVpbmcgYXBwZW5kZWQgdG8gdGhlIERPTQoJaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOwoJaW5wdXQudmFsdWUgPSAidCI7CglpbnB1dC5zZXRBdHRyaWJ1dGUoICJ0eXBlIiwgInJhZGlvIiApOwoJc3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09ICJ0IjsKCglpbnB1dC5zZXRBdHRyaWJ1dGUoICJjaGVja2VkIiwgImNoZWNrZWQiICk7CgoJLy8gIzExMjE3IC0gV2ViS2l0IGxvc2VzIGNoZWNrIHdoZW4gdGhlIG5hbWUgaXMgYWZ0ZXIgdGhlIGNoZWNrZWQgYXR0cmlidXRlCglpbnB1dC5zZXRBdHRyaWJ1dGUoICJuYW1lIiwgInQiICk7CgoJZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApOwoJZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7CglmcmFnbWVudC5hcHBlbmRDaGlsZCggZGl2Lmxhc3RDaGlsZCApOwoKCS8vIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50cwoJc3VwcG9ydC5jaGVja0Nsb25lID0gZnJhZ21lbnQuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7CgoJLy8gQ2hlY2sgaWYgYSBkaXNjb25uZWN0ZWQgY2hlY2tib3ggd2lsbCByZXRhaW4gaXRzIGNoZWNrZWQKCS8vIHZhbHVlIG9mIHRydWUgYWZ0ZXIgYXBwZW5kZWQgdG8gdGhlIERPTSAoSUU2LzcpCglzdXBwb3J0LmFwcGVuZENoZWNrZWQgPSBpbnB1dC5jaGVja2VkOwoKCWZyYWdtZW50LnJlbW92ZUNoaWxkKCBpbnB1dCApOwoJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRpdiApOwoKCS8vIFRlY2huaXF1ZSBmcm9tIEp1cml5IFpheXRzZXYKCS8vIGh0dHA6Ly9wZXJmZWN0aW9ua2lsbHMuY29tL2RldGVjdGluZy1ldmVudC1zdXBwb3J0LXdpdGhvdXQtYnJvd3Nlci1zbmlmZmluZy8KCS8vIFdlIG9ubHkgY2FyZSBhYm91dCB0aGUgY2FzZSB3aGVyZSBub24tc3RhbmRhcmQgZXZlbnQgc3lzdGVtcwoJLy8gYXJlIHVzZWQsIG5hbWVseSBpbiBJRS4gU2hvcnQtY2lyY3VpdGluZyBoZXJlIGhlbHBzIHVzIHRvCgkvLyBhdm9pZCBhbiBldmFsIGNhbGwgKGluIHNldEF0dHJpYnV0ZSkgd2hpY2ggY2FuIGNhdXNlIENTUAoJLy8gdG8gZ28gaGF5d2lyZS4gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9TZWN1cml0eS9DU1AKCWlmICggZGl2LmF0dGFjaEV2ZW50ICkgewoJCWZvciAoIGkgaW4gewoJCQlzdWJtaXQ6IHRydWUsCgkJCWNoYW5nZTogdHJ1ZSwKCQkJZm9jdXNpbjogdHJ1ZQoJCX0pIHsKCQkJZXZlbnROYW1lID0gIm9uIiArIGk7CgkJCWlzU3VwcG9ydGVkID0gKCBldmVudE5hbWUgaW4gZGl2ICk7CgkJCWlmICggIWlzU3VwcG9ydGVkICkgewoJCQkJZGl2LnNldEF0dHJpYnV0ZSggZXZlbnROYW1lLCAicmV0dXJuOyIgKTsKCQkJCWlzU3VwcG9ydGVkID0gKCB0eXBlb2YgZGl2WyBldmVudE5hbWUgXSA9PT0gImZ1bmN0aW9uIiApOwoJCQl9CgkJCXN1cHBvcnRbIGkgKyAiQnViYmxlcyIgXSA9IGlzU3VwcG9ydGVkOwoJCX0KCX0KCgkvLyBSdW4gdGVzdHMgdGhhdCBuZWVkIGEgYm9keSBhdCBkb2MgcmVhZHkKCWpRdWVyeShmdW5jdGlvbigpIHsKCQl2YXIgY29udGFpbmVyLCBkaXYsIHRkcywgbWFyZ2luRGl2LAoJCQlkaXZSZXNldCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47IiwKCQkJYm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07CgoJCWlmICggIWJvZHkgKSB7CgkJCS8vIFJldHVybiBmb3IgZnJhbWVzZXQgZG9jcyB0aGF0IGRvbid0IGhhdmUgYSBib2R5CgkJCXJldHVybjsKCQl9CgoJCWNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoJCWNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gInZpc2liaWxpdHk6aGlkZGVuO2JvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246c3RhdGljO3RvcDowO21hcmdpbi10b3A6MXB4IjsKCQlib2R5Lmluc2VydEJlZm9yZSggY29udGFpbmVyLCBib2R5LmZpcnN0Q2hpbGQgKTsKCgkJLy8gQ29uc3RydWN0IHRoZSB0ZXN0IGVsZW1lbnQKCQlkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKCQljb250YWluZXIuYXBwZW5kQ2hpbGQoIGRpdiApOwoKCQkvLyBDaGVjayBpZiB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodCB3aGVuIHRoZXkgYXJlIHNldAoJCS8vIHRvIGRpc3BsYXk6bm9uZSBhbmQgdGhlcmUgYXJlIHN0aWxsIG90aGVyIHZpc2libGUgdGFibGUgY2VsbHMgaW4gYQoJCS8vIHRhYmxlIHJvdzsgaWYgc28sIG9mZnNldFdpZHRoL0hlaWdodCBhcmUgbm90IHJlbGlhYmxlIGZvciB1c2Ugd2hlbgoJCS8vIGRldGVybWluaW5nIGlmIGFuIGVsZW1lbnQgaGFzIGJlZW4gaGlkZGVuIGRpcmVjdGx5IHVzaW5nCgkJLy8gZGlzcGxheTpub25lIChpdCBpcyBzdGlsbCBzYWZlIHRvIHVzZSBvZmZzZXRzIGlmIGEgcGFyZW50IGVsZW1lbnQgaXMKCQkvLyBoaWRkZW47IGRvbiBzYWZldHkgZ29nZ2xlcyBhbmQgc2VlIGJ1ZyAjNDUxMiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCgkJLy8gKG9ubHkgSUUgOCBmYWlscyB0aGlzIHRlc3QpCgkJZGl2LmlubmVySFRNTCA9ICI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IjsKCQl0ZHMgPSBkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIik7CgkJdGRzWyAwIF0uc3R5bGUuY3NzVGV4dCA9ICJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIjsKCQlpc1N1cHBvcnRlZCA9ICggdGRzWyAwIF0ub2Zmc2V0SGVpZ2h0ID09PSAwICk7CgoJCXRkc1sgMCBdLnN0eWxlLmRpc3BsYXkgPSAiIjsKCQl0ZHNbIDEgXS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwoKCQkvLyBDaGVjayBpZiBlbXB0eSB0YWJsZSBjZWxscyBzdGlsbCBoYXZlIG9mZnNldFdpZHRoL0hlaWdodAoJCS8vIChJRSA8PSA4IGZhaWwgdGhpcyB0ZXN0KQoJCXN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzID0gaXNTdXBwb3J0ZWQgJiYgKCB0ZHNbIDAgXS5vZmZzZXRIZWlnaHQgPT09IDAgKTsKCgkJLy8gQ2hlY2sgYm94LXNpemluZyBhbmQgbWFyZ2luIGJlaGF2aW9yCgkJZGl2LmlubmVySFRNTCA9ICIiOwoJCWRpdi5zdHlsZS5jc3NUZXh0ID0gImJveC1zaXppbmc6Ym9yZGVyLWJveDstbW96LWJveC1zaXppbmc6Ym9yZGVyLWJveDstd2Via2l0LWJveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjFweDtib3JkZXI6MXB4O2Rpc3BsYXk6YmxvY2s7d2lkdGg6NHB4O21hcmdpbi10b3A6MSU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjElOyI7CgkJc3VwcG9ydC5ib3hTaXppbmcgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gNCApOwoJCXN1cHBvcnQuZG9lc05vdEluY2x1ZGVNYXJnaW5JbkJvZHlPZmZzZXQgPSAoIGJvZHkub2Zmc2V0VG9wICE9PSAxICk7CgoJCS8vIE5PVEU6IFRvIGFueSBmdXR1cmUgbWFpbnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVkU3R5bGUKCQkvLyBiZWNhdXNlIGpzZG9tIG9uIG5vZGUuanMgd2lsbCBicmVhayB3aXRob3V0IGl0LgoJCWlmICggd2luZG93LmdldENvbXB1dGVkU3R5bGUgKSB7CgkJCXN1cHBvcnQucGl4ZWxQb3NpdGlvbiA9ICggd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiwgbnVsbCApIHx8IHt9ICkudG9wICE9PSAiMSUiOwoJCQlzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlID0gKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2LCBudWxsICkgfHwgeyB3aWR0aDogIjRweCIgfSApLndpZHRoID09PSAiNHB4IjsKCgkJCS8vIENoZWNrIGlmIGRpdiB3aXRoIGV4cGxpY2l0IHdpZHRoIGFuZCBubyBtYXJnaW4tcmlnaHQgaW5jb3JyZWN0bHkKCQkJLy8gZ2V0cyBjb21wdXRlZCBtYXJnaW4tcmlnaHQgYmFzZWQgb24gd2lkdGggb2YgY29udGFpbmVyLiBGb3IgbW9yZQoJCQkvLyBpbmZvIHNlZSBidWcgIzMzMzMKCQkJLy8gRmFpbHMgaW4gV2ViS2l0IGJlZm9yZSBGZWIgMjAxMSBuaWdodGxpZXMKCQkJLy8gV2ViS2l0IEJ1ZyAxMzM0MyAtIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyB3cm9uZyB2YWx1ZSBmb3IgbWFyZ2luLXJpZ2h0CgkJCW1hcmdpbkRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwoJCQltYXJnaW5EaXYuc3R5bGUuY3NzVGV4dCA9IGRpdi5zdHlsZS5jc3NUZXh0ID0gZGl2UmVzZXQ7CgkJCW1hcmdpbkRpdi5zdHlsZS5tYXJnaW5SaWdodCA9IG1hcmdpbkRpdi5zdHlsZS53aWR0aCA9ICIwIjsKCQkJZGl2LnN0eWxlLndpZHRoID0gIjFweCI7CgkJCWRpdi5hcHBlbmRDaGlsZCggbWFyZ2luRGl2ICk7CgkJCXN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodCA9CgkJCQkhcGFyc2VGbG9hdCggKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggbWFyZ2luRGl2LCBudWxsICkgfHwge30gKS5tYXJnaW5SaWdodCApOwoJCX0KCgkJaWYgKCB0eXBlb2YgZGl2LnN0eWxlLnpvb20gIT09ICJ1bmRlZmluZWQiICkgewoJCQkvLyBDaGVjayBpZiBuYXRpdmVseSBibG9jay1sZXZlbCBlbGVtZW50cyBhY3QgbGlrZSBpbmxpbmUtYmxvY2sKCQkJLy8gZWxlbWVudHMgd2hlbiBzZXR0aW5nIHRoZWlyIGRpc3BsYXkgdG8gJ2lubGluZScgYW5kIGdpdmluZwoJCQkvLyB0aGVtIGxheW91dAoJCQkvLyAoSUUgPCA4IGRvZXMgdGhpcykKCQkJZGl2LmlubmVySFRNTCA9ICIiOwoJCQlkaXYuc3R5bGUuY3NzVGV4dCA9IGRpdlJlc2V0ICsgIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiOwoJCQlzdXBwb3J0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQgPSAoIGRpdi5vZmZzZXRXaWR0aCA9PT0gMyApOwoKCQkJLy8gQ2hlY2sgaWYgZWxlbWVudHMgd2l0aCBsYXlvdXQgc2hyaW5rLXdyYXAgdGhlaXIgY2hpbGRyZW4KCQkJLy8gKElFIDYgZG9lcyB0aGlzKQoJCQlkaXYuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CgkJCWRpdi5zdHlsZS5vdmVyZmxvdyA9ICJ2aXNpYmxlIjsKCQkJZGl2LmlubmVySFRNTCA9ICI8ZGl2PjwvZGl2PiI7CgkJCWRpdi5maXJzdENoaWxkLnN0eWxlLndpZHRoID0gIjVweCI7CgkJCXN1cHBvcnQuc2hyaW5rV3JhcEJsb2NrcyA9ICggZGl2Lm9mZnNldFdpZHRoICE9PSAzICk7CgoJCQljb250YWluZXIuc3R5bGUuem9vbSA9IDE7CgkJfQoKCQkvLyBOdWxsIGVsZW1lbnRzIHRvIGF2b2lkIGxlYWtzIGluIElFCgkJYm9keS5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7CgkJY29udGFpbmVyID0gZGl2ID0gdGRzID0gbWFyZ2luRGl2ID0gbnVsbDsKCX0pOwoKCS8vIE51bGwgZWxlbWVudHMgdG8gYXZvaWQgbGVha3MgaW4gSUUKCWZyYWdtZW50LnJlbW92ZUNoaWxkKCBkaXYgKTsKCWFsbCA9IGEgPSBzZWxlY3QgPSBvcHQgPSBpbnB1dCA9IGZyYWdtZW50ID0gZGl2ID0gbnVsbDsKCglyZXR1cm4gc3VwcG9ydDsKfSkoKTsKdmFyIHJicmFjZSA9IC8oPzpce1tcc1xTXSpcfXxcW1tcc1xTXSpcXSkkLywKCXJtdWx0aURhc2ggPSAvKFtBLVpdKS9nOwoKalF1ZXJ5LmV4dGVuZCh7CgljYWNoZToge30sCgoJZGVsZXRlZElkczogW10sCgoJLy8gUmVtb3ZlIGF0IG5leHQgbWFqb3IgcmVsZWFzZSAoMS45LzIuMCkKCXV1aWQ6IDAsCgoJLy8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlCgkvLyBOb24tZGlnaXRzIHJlbW92ZWQgdG8gbWF0Y2ggcmlubGluZWpRdWVyeQoJZXhwYW5kbzogImpRdWVyeSIgKyAoIGpRdWVyeS5mbi5qcXVlcnkgKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xEL2csICIiICksCgoJLy8gVGhlIGZvbGxvd2luZyBlbGVtZW50cyB0aHJvdyB1bmNhdGNoYWJsZSBleGNlcHRpb25zIGlmIHlvdQoJLy8gYXR0ZW1wdCB0byBhZGQgZXhwYW5kbyBwcm9wZXJ0aWVzIHRvIHRoZW0uCglub0RhdGE6IHsKCQkiZW1iZWQiOiB0cnVlLAoJCS8vIEJhbiBhbGwgb2JqZWN0cyBleGNlcHQgZm9yIEZsYXNoICh3aGljaCBoYW5kbGUgZXhwYW5kb3MpCgkJIm9iamVjdCI6ICJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAiLAoJCSJhcHBsZXQiOiB0cnVlCgl9LAoKCWhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkgewoJCWVsZW0gPSBlbGVtLm5vZGVUeXBlID8galF1ZXJ5LmNhY2hlWyBlbGVtW2pRdWVyeS5leHBhbmRvXSBdIDogZWxlbVsgalF1ZXJ5LmV4cGFuZG8gXTsKCQlyZXR1cm4gISFlbGVtICYmICFpc0VtcHR5RGF0YU9iamVjdCggZWxlbSApOwoJfSwKCglkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSwgcHZ0IC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgewoJCWlmICggIWpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0aGlzQ2FjaGUsIHJldCwKCQkJaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKCQkJZ2V0QnlOYW1lID0gdHlwZW9mIG5hbWUgPT09ICJzdHJpbmciLAoKCQkJLy8gV2UgaGF2ZSB0byBoYW5kbGUgRE9NIG5vZGVzIGFuZCBKUyBvYmplY3RzIGRpZmZlcmVudGx5IGJlY2F1c2UgSUU2LTcKCQkJLy8gY2FuJ3QgR0Mgb2JqZWN0IHJlZmVyZW5jZXMgcHJvcGVybHkgYWNyb3NzIHRoZSBET00tSlMgYm91bmRhcnkKCQkJaXNOb2RlID0gZWxlbS5ub2RlVHlwZSwKCgkJCS8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgdGhlIGdsb2JhbCBqUXVlcnkgY2FjaGU7IEpTIG9iamVjdCBkYXRhIGlzCgkJCS8vIGF0dGFjaGVkIGRpcmVjdGx5IHRvIHRoZSBvYmplY3Qgc28gR0MgY2FuIG9jY3VyIGF1dG9tYXRpY2FsbHkKCQkJY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAoKCQkJLy8gT25seSBkZWZpbmluZyBhbiBJRCBmb3IgSlMgb2JqZWN0cyBpZiBpdHMgY2FjaGUgYWxyZWFkeSBleGlzdHMgYWxsb3dzCgkJCS8vIHRoZSBjb2RlIHRvIHNob3J0Y3V0IG9uIHRoZSBzYW1lIHBhdGggYXMgYSBET00gbm9kZSB3aXRoIG5vIGNhY2hlCgkJCWlkID0gaXNOb2RlID8gZWxlbVsgaW50ZXJuYWxLZXkgXSA6IGVsZW1bIGludGVybmFsS2V5IF0gJiYgaW50ZXJuYWxLZXk7CgoJCS8vIEF2b2lkIGRvaW5nIGFueSBtb3JlIHdvcmsgdGhhbiB3ZSBuZWVkIHRvIHdoZW4gdHJ5aW5nIHRvIGdldCBkYXRhIG9uIGFuCgkJLy8gb2JqZWN0IHRoYXQgaGFzIG5vIGRhdGEgYXQgYWxsCgkJaWYgKCAoIWlkIHx8ICFjYWNoZVtpZF0gfHwgKCFwdnQgJiYgIWNhY2hlW2lkXS5kYXRhKSkgJiYgZ2V0QnlOYW1lICYmIGRhdGEgPT09IHVuZGVmaW5lZCApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCAhaWQgKSB7CgkJCS8vIE9ubHkgRE9NIG5vZGVzIG5lZWQgYSBuZXcgdW5pcXVlIElEIGZvciBlYWNoIGVsZW1lbnQgc2luY2UgdGhlaXIgZGF0YQoJCQkvLyBlbmRzIHVwIGluIHRoZSBnbG9iYWwgY2FjaGUKCQkJaWYgKCBpc05vZGUgKSB7CgkJCQllbGVtWyBpbnRlcm5hbEtleSBdID0gaWQgPSBqUXVlcnkuZGVsZXRlZElkcy5wb3AoKSB8fCBqUXVlcnkuZ3VpZCsrOwoJCQl9IGVsc2UgewoJCQkJaWQgPSBpbnRlcm5hbEtleTsKCQkJfQoJCX0KCgkJaWYgKCAhY2FjaGVbIGlkIF0gKSB7CgkJCWNhY2hlWyBpZCBdID0ge307CgoJCQkvLyBBdm9pZHMgZXhwb3NpbmcgalF1ZXJ5IG1ldGFkYXRhIG9uIHBsYWluIEpTIG9iamVjdHMgd2hlbiB0aGUgb2JqZWN0CgkJCS8vIGlzIHNlcmlhbGl6ZWQgdXNpbmcgSlNPTi5zdHJpbmdpZnkKCQkJaWYgKCAhaXNOb2RlICkgewoJCQkJY2FjaGVbIGlkIF0udG9KU09OID0galF1ZXJ5Lm5vb3A7CgkJCX0KCQl9CgoJCS8vIEFuIG9iamVjdCBjYW4gYmUgcGFzc2VkIHRvIGpRdWVyeS5kYXRhIGluc3RlYWQgb2YgYSBrZXkvdmFsdWUgcGFpcjsgdGhpcyBnZXRzCgkJLy8gc2hhbGxvdyBjb3BpZWQgb3ZlciBvbnRvIHRoZSBleGlzdGluZyBjYWNoZQoJCWlmICggdHlwZW9mIG5hbWUgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBuYW1lID09PSAiZnVuY3Rpb24iICkgewoJCQlpZiAoIHB2dCApIHsKCQkJCWNhY2hlWyBpZCBdID0galF1ZXJ5LmV4dGVuZCggY2FjaGVbIGlkIF0sIG5hbWUgKTsKCQkJfSBlbHNlIHsKCQkJCWNhY2hlWyBpZCBdLmRhdGEgPSBqUXVlcnkuZXh0ZW5kKCBjYWNoZVsgaWQgXS5kYXRhLCBuYW1lICk7CgkJCX0KCQl9CgoJCXRoaXNDYWNoZSA9IGNhY2hlWyBpZCBdOwoKCQkvLyBqUXVlcnkgZGF0YSgpIGlzIHN0b3JlZCBpbiBhIHNlcGFyYXRlIG9iamVjdCBpbnNpZGUgdGhlIG9iamVjdCdzIGludGVybmFsIGRhdGEKCQkvLyBjYWNoZSBpbiBvcmRlciB0byBhdm9pZCBrZXkgY29sbGlzaW9ucyBiZXR3ZWVuIGludGVybmFsIGRhdGEgYW5kIHVzZXItZGVmaW5lZAoJCS8vIGRhdGEuCgkJaWYgKCAhcHZ0ICkgewoJCQlpZiAoICF0aGlzQ2FjaGUuZGF0YSApIHsKCQkJCXRoaXNDYWNoZS5kYXRhID0ge307CgkJCX0KCgkJCXRoaXNDYWNoZSA9IHRoaXNDYWNoZS5kYXRhOwoJCX0KCgkJaWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7CgkJCXRoaXNDYWNoZVsgalF1ZXJ5LmNhbWVsQ2FzZSggbmFtZSApIF0gPSBkYXRhOwoJCX0KCgkJLy8gQ2hlY2sgZm9yIGJvdGggY29udmVydGVkLXRvLWNhbWVsIGFuZCBub24tY29udmVydGVkIGRhdGEgcHJvcGVydHkgbmFtZXMKCQkvLyBJZiBhIGRhdGEgcHJvcGVydHkgd2FzIHNwZWNpZmllZAoJCWlmICggZ2V0QnlOYW1lICkgewoKCQkJLy8gRmlyc3QgVHJ5IHRvIGZpbmQgYXMtaXMgcHJvcGVydHkgZGF0YQoJCQlyZXQgPSB0aGlzQ2FjaGVbIG5hbWUgXTsKCgkJCS8vIFRlc3QgZm9yIG51bGx8dW5kZWZpbmVkIHByb3BlcnR5IGRhdGEKCQkJaWYgKCByZXQgPT0gbnVsbCApIHsKCgkJCQkvLyBUcnkgdG8gZmluZCB0aGUgY2FtZWxDYXNlZCBwcm9wZXJ0eQoJCQkJcmV0ID0gdGhpc0NhY2hlWyBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICkgXTsKCQkJfQoJCX0gZWxzZSB7CgkJCXJldCA9IHRoaXNDYWNoZTsKCQl9CgoJCXJldHVybiByZXQ7Cgl9LAoKCXJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBwdnQgLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7CgkJaWYgKCAhalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIHRoaXNDYWNoZSwgaSwgbCwKCgkJCWlzTm9kZSA9IGVsZW0ubm9kZVR5cGUsCgoJCQkvLyBTZWUgalF1ZXJ5LmRhdGEgZm9yIG1vcmUgaW5mb3JtYXRpb24KCQkJY2FjaGUgPSBpc05vZGUgPyBqUXVlcnkuY2FjaGUgOiBlbGVtLAoJCQlpZCA9IGlzTm9kZSA/IGVsZW1bIGpRdWVyeS5leHBhbmRvIF0gOiBqUXVlcnkuZXhwYW5kbzsKCgkJLy8gSWYgdGhlcmUgaXMgYWxyZWFkeSBubyBjYWNoZSBlbnRyeSBmb3IgdGhpcyBvYmplY3QsIHRoZXJlIGlzIG5vCgkJLy8gcHVycG9zZSBpbiBjb250aW51aW5nCgkJaWYgKCAhY2FjaGVbIGlkIF0gKSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICggbmFtZSApIHsKCgkJCXRoaXNDYWNoZSA9IHB2dCA/IGNhY2hlWyBpZCBdIDogY2FjaGVbIGlkIF0uZGF0YTsKCgkJCWlmICggdGhpc0NhY2hlICkgewoKCQkJCS8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBuYW1lcyBmb3IgZGF0YSBrZXlzCgkJCQlpZiAoICFqUXVlcnkuaXNBcnJheSggbmFtZSApICkgewoKCQkJCQkvLyB0cnkgdGhlIHN0cmluZyBhcyBhIGtleSBiZWZvcmUgYW55IG1hbmlwdWxhdGlvbgoJCQkJCWlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CgkJCQkJCW5hbWUgPSBbIG5hbWUgXTsKCQkJCQl9IGVsc2UgewoKCQkJCQkJLy8gc3BsaXQgdGhlIGNhbWVsIGNhc2VkIHZlcnNpb24gYnkgc3BhY2VzIHVubGVzcyBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzCgkJCQkJCW5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CgkJCQkJCWlmICggbmFtZSBpbiB0aGlzQ2FjaGUgKSB7CgkJCQkJCQluYW1lID0gWyBuYW1lIF07CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQluYW1lID0gbmFtZS5zcGxpdCgiICIpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCWZvciAoIGkgPSAwLCBsID0gbmFtZS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCQkJZGVsZXRlIHRoaXNDYWNoZVsgbmFtZVtpXSBdOwoJCQkJfQoKCQkJCS8vIElmIHRoZXJlIGlzIG5vIGRhdGEgbGVmdCBpbiB0aGUgY2FjaGUsIHdlIHdhbnQgdG8gY29udGludWUKCQkJCS8vIGFuZCBsZXQgdGhlIGNhY2hlIG9iamVjdCBpdHNlbGYgZ2V0IGRlc3Ryb3llZAoJCQkJaWYgKCAhKCBwdnQgPyBpc0VtcHR5RGF0YU9iamVjdCA6IGpRdWVyeS5pc0VtcHR5T2JqZWN0ICkoIHRoaXNDYWNoZSApICkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gU2VlIGpRdWVyeS5kYXRhIGZvciBtb3JlIGluZm9ybWF0aW9uCgkJaWYgKCAhcHZ0ICkgewoJCQlkZWxldGUgY2FjaGVbIGlkIF0uZGF0YTsKCgkJCS8vIERvbid0IGRlc3Ryb3kgdGhlIHBhcmVudCBjYWNoZSB1bmxlc3MgdGhlIGludGVybmFsIGRhdGEgb2JqZWN0CgkJCS8vIGhhZCBiZWVuIHRoZSBvbmx5IHRoaW5nIGxlZnQgaW4gaXQKCQkJaWYgKCAhaXNFbXB0eURhdGFPYmplY3QoIGNhY2hlWyBpZCBdICkgKSB7CgkJCQlyZXR1cm47CgkJCX0KCQl9CgoJCS8vIERlc3Ryb3kgdGhlIGNhY2hlCgkJaWYgKCBpc05vZGUgKSB7CgkJCWpRdWVyeS5jbGVhbkRhdGEoIFsgZWxlbSBdLCB0cnVlICk7CgoJCS8vIFVzZSBkZWxldGUgd2hlbiBzdXBwb3J0ZWQgZm9yIGV4cGFuZG9zIG9yIGBjYWNoZWAgaXMgbm90IGEgd2luZG93IHBlciBpc1dpbmRvdyAoIzEwMDgwKQoJCX0gZWxzZSBpZiAoIGpRdWVyeS5zdXBwb3J0LmRlbGV0ZUV4cGFuZG8gfHwgY2FjaGUgIT0gY2FjaGUud2luZG93ICkgewoJCQlkZWxldGUgY2FjaGVbIGlkIF07CgoJCS8vIFdoZW4gYWxsIGVsc2UgZmFpbHMsIG51bGwKCQl9IGVsc2UgewoJCQljYWNoZVsgaWQgXSA9IG51bGw7CgkJfQoJfSwKCgkvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuCglfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7CgkJcmV0dXJuIGpRdWVyeS5kYXRhKCBlbGVtLCBuYW1lLCBkYXRhLCB0cnVlICk7Cgl9LAoKCS8vIEEgbWV0aG9kIGZvciBkZXRlcm1pbmluZyBpZiBhIERPTSBub2RlIGNhbiBoYW5kbGUgdGhlIGRhdGEgZXhwYW5kbwoJYWNjZXB0RGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7CgkJdmFyIG5vRGF0YSA9IGVsZW0ubm9kZU5hbWUgJiYgalF1ZXJ5Lm5vRGF0YVsgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CgoJCS8vIG5vZGVzIGFjY2VwdCBkYXRhIHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkOyByZWplY3Rpb24gY2FuIGJlIGNvbmRpdGlvbmFsCgkJcmV0dXJuICFub0RhdGEgfHwgbm9EYXRhICE9PSB0cnVlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCJjbGFzc2lkIikgPT09IG5vRGF0YTsKCX0KfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCWRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCXZhciBwYXJ0cywgcGFydCwgYXR0ciwgbmFtZSwgbCwKCQkJZWxlbSA9IHRoaXNbMF0sCgkJCWkgPSAwLAoJCQlkYXRhID0gbnVsbDsKCgkJLy8gR2V0cyBhbGwgdmFsdWVzCgkJaWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHsKCQkJaWYgKCB0aGlzLmxlbmd0aCApIHsKCQkJCWRhdGEgPSBqUXVlcnkuZGF0YSggZWxlbSApOwoKCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCAicGFyc2VkQXR0cnMiICkgKSB7CgkJCQkJYXR0ciA9IGVsZW0uYXR0cmlidXRlczsKCQkJCQlmb3IgKCBsID0gYXR0ci5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCQkJCW5hbWUgPSBhdHRyW2ldLm5hbWU7CgoJCQkJCQlpZiAoICFuYW1lLmluZGV4T2YoICJkYXRhLSIgKSApIHsKCQkJCQkJCW5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lLnN1YnN0cmluZyg1KSApOwoKCQkJCQkJCWRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlqUXVlcnkuX2RhdGEoIGVsZW0sICJwYXJzZWRBdHRycyIsIHRydWUgKTsKCQkJCX0KCQkJfQoKCQkJcmV0dXJuIGRhdGE7CgkJfQoKCQkvLyBTZXRzIG11bHRpcGxlIHZhbHVlcwoJCWlmICggdHlwZW9mIGtleSA9PT0gIm9iamVjdCIgKSB7CgkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQlqUXVlcnkuZGF0YSggdGhpcywga2V5ICk7CgkJCX0pOwoJCX0KCgkJcGFydHMgPSBrZXkuc3BsaXQoICIuIiwgMiApOwoJCXBhcnRzWzFdID0gcGFydHNbMV0gPyAiLiIgKyBwYXJ0c1sxXSA6ICIiOwoJCXBhcnQgPSBwYXJ0c1sxXSArICIhIjsKCgkJcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHsKCgkJCWlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKCQkJCWRhdGEgPSB0aGlzLnRyaWdnZXJIYW5kbGVyKCAiZ2V0RGF0YSIgKyBwYXJ0LCBbIHBhcnRzWzBdIF0gKTsKCgkJCQkvLyBUcnkgdG8gZmV0Y2ggYW55IGludGVybmFsbHkgc3RvcmVkIGRhdGEgZmlyc3QKCQkJCWlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0gKSB7CgkJCQkJZGF0YSA9IGpRdWVyeS5kYXRhKCBlbGVtLCBrZXkgKTsKCQkJCQlkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApOwoJCQkJfQoKCQkJCXJldHVybiBkYXRhID09PSB1bmRlZmluZWQgJiYgcGFydHNbMV0gPwoJCQkJCXRoaXMuZGF0YSggcGFydHNbMF0gKSA6CgkJCQkJZGF0YTsKCQkJfQoKCQkJcGFydHNbMV0gPSB2YWx1ZTsKCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKTsKCgkJCQlzZWxmLnRyaWdnZXJIYW5kbGVyKCAic2V0RGF0YSIgKyBwYXJ0LCBwYXJ0cyApOwoJCQkJalF1ZXJ5LmRhdGEoIHRoaXMsIGtleSwgdmFsdWUgKTsKCQkJCXNlbGYudHJpZ2dlckhhbmRsZXIoICJjaGFuZ2VEYXRhIiArIHBhcnQsIHBhcnRzICk7CgkJCX0pOwoJCX0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgZmFsc2UgKTsKCX0sCgoJcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHsKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQlqUXVlcnkucmVtb3ZlRGF0YSggdGhpcywga2V5ICk7CgkJfSk7Cgl9Cn0pOwoKZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHsKCS8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnkKCS8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZQoJaWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCgkJdmFyIG5hbWUgPSAiZGF0YS0iICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsICItJDEiICkudG9Mb3dlckNhc2UoKTsKCgkJZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CgoJCWlmICggdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICkgewoJCQl0cnkgewoJCQkJZGF0YSA9IGRhdGEgPT09ICJ0cnVlIiA/IHRydWUgOgoJCQkJZGF0YSA9PT0gImZhbHNlIiA/IGZhbHNlIDoKCQkJCWRhdGEgPT09ICJudWxsIiA/IG51bGwgOgoJCQkJLy8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmcKCQkJCStkYXRhICsgIiIgPT09IGRhdGEgPyArZGF0YSA6CgkJCQlyYnJhY2UudGVzdCggZGF0YSApID8galF1ZXJ5LnBhcnNlSlNPTiggZGF0YSApIDoKCQkJCQlkYXRhOwoJCQl9IGNhdGNoKCBlICkge30KCgkJCS8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlcgoJCQlqUXVlcnkuZGF0YSggZWxlbSwga2V5LCBkYXRhICk7CgoJCX0gZWxzZSB7CgkJCWRhdGEgPSB1bmRlZmluZWQ7CgkJfQoJfQoKCXJldHVybiBkYXRhOwp9CgovLyBjaGVja3MgYSBjYWNoZSBvYmplY3QgZm9yIGVtcHRpbmVzcwpmdW5jdGlvbiBpc0VtcHR5RGF0YU9iamVjdCggb2JqICkgewoJdmFyIG5hbWU7Cglmb3IgKCBuYW1lIGluIG9iaiApIHsKCgkJLy8gaWYgdGhlIHB1YmxpYyBkYXRhIG9iamVjdCBpcyBlbXB0eSwgdGhlIHByaXZhdGUgaXMgc3RpbGwgZW1wdHkKCQlpZiAoIG5hbWUgPT09ICJkYXRhIiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb2JqW25hbWVdICkgKSB7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoIG5hbWUgIT09ICJ0b0pTT04iICkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoKCXJldHVybiB0cnVlOwp9CmpRdWVyeS5leHRlbmQoewoJcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkgewoJCXZhciBxdWV1ZTsKCgkJaWYgKCBlbGVtICkgewoJCQl0eXBlID0gKCB0eXBlIHx8ICJmeCIgKSArICJxdWV1ZSI7CgkJCXF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlICk7CgoJCQkvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwCgkJCWlmICggZGF0YSApIHsKCQkJCWlmICggIXF1ZXVlIHx8IGpRdWVyeS5pc0FycmF5KGRhdGEpICkgewoJCQkJCXF1ZXVlID0galF1ZXJ5Ll9kYXRhKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KGRhdGEpICk7CgkJCQl9IGVsc2UgewoJCQkJCXF1ZXVlLnB1c2goIGRhdGEgKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gcXVldWUgfHwgW107CgkJfQoJfSwKCglkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHsKCQl0eXBlID0gdHlwZSB8fCAiZngiOwoKCQl2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSwKCQkJc3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsCgkJCWZuID0gcXVldWUuc2hpZnQoKSwKCQkJaG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSwKCQkJbmV4dCA9IGZ1bmN0aW9uKCkgewoJCQkJalF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTsKCQkJfTsKCgkJLy8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbAoJCWlmICggZm4gPT09ICJpbnByb2dyZXNzIiApIHsKCQkJZm4gPSBxdWV1ZS5zaGlmdCgpOwoJCQlzdGFydExlbmd0aC0tOwoJCX0KCgkJaWYgKCBmbiApIHsKCgkJCS8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmcKCQkJLy8gYXV0b21hdGljYWxseSBkZXF1ZXVlZAoJCQlpZiAoIHR5cGUgPT09ICJmeCIgKSB7CgkJCQlxdWV1ZS51bnNoaWZ0KCAiaW5wcm9ncmVzcyIgKTsKCQkJfQoKCQkJLy8gY2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvbgoJCQlkZWxldGUgaG9va3Muc3RvcDsKCQkJZm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTsKCQl9CgoJCWlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkgewoJCQlob29rcy5lbXB0eS5maXJlKCk7CgkJfQoJfSwKCgkvLyBub3QgaW50ZW5kZWQgZm9yIHB1YmxpYyBjb25zdW1wdGlvbiAtIGdlbmVyYXRlcyBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm5zIHRoZSBjdXJyZW50IG9uZQoJX3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkgewoJCXZhciBrZXkgPSB0eXBlICsgInF1ZXVlSG9va3MiOwoJCXJldHVybiBqUXVlcnkuX2RhdGEoIGVsZW0sIGtleSApIHx8IGpRdWVyeS5fZGF0YSggZWxlbSwga2V5LCB7CgkJCWVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpIHsKCQkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCB0eXBlICsgInF1ZXVlIiwgdHJ1ZSApOwoJCQkJalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sIGtleSwgdHJ1ZSApOwoJCQl9KQoJCX0pOwoJfQp9KTsKCmpRdWVyeS5mbi5leHRlbmQoewoJcXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkgewoJCXZhciBzZXR0ZXIgPSAyOwoKCQlpZiAoIHR5cGVvZiB0eXBlICE9PSAic3RyaW5nIiApIHsKCQkJZGF0YSA9IHR5cGU7CgkJCXR5cGUgPSAiZngiOwoJCQlzZXR0ZXItLTsKCQl9CgoJCWlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHsKCQkJcmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1swXSwgdHlwZSApOwoJCX0KCgkJcmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/CgkJCXRoaXMgOgoJCQl0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQl2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTsKCgkJCQkvLyBlbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZQoJCQkJalF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7CgoJCQkJaWYgKCB0eXBlID09PSAiZngiICYmIHF1ZXVlWzBdICE9PSAiaW5wcm9ncmVzcyIgKSB7CgkJCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKCQkJCX0KCQkJfSk7Cgl9LAoJZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTsKCQl9KTsKCX0sCgkvLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uCgkvLyBodHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvCglkZWxheTogZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7CgkJdGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTsKCQl0eXBlID0gdHlwZSB8fCAiZngiOwoKCQlyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkgewoJCQl2YXIgdGltZW91dCA9IHNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTsKCQkJaG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkgewoJCQkJY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7CgkJCX07CgkJfSk7Cgl9LAoJY2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7CgkJcmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgImZ4IiwgW10gKTsKCX0sCgkvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlCgkvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdCkKCXByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7CgkJdmFyIHRtcCwKCQkJY291bnQgPSAxLAoJCQlkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLAoJCQllbGVtZW50cyA9IHRoaXMsCgkJCWkgPSB0aGlzLmxlbmd0aCwKCQkJcmVzb2x2ZSA9IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCAhKCAtLWNvdW50ICkgKSB7CgkJCQkJZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTsKCQkJCX0KCQkJfTsKCgkJaWYgKCB0eXBlb2YgdHlwZSAhPT0gInN0cmluZyIgKSB7CgkJCW9iaiA9IHR5cGU7CgkJCXR5cGUgPSB1bmRlZmluZWQ7CgkJfQoJCXR5cGUgPSB0eXBlIHx8ICJmeCI7CgoJCXdoaWxlKCBpLS0gKSB7CgkJCXRtcCA9IGpRdWVyeS5fZGF0YSggZWxlbWVudHNbIGkgXSwgdHlwZSArICJxdWV1ZUhvb2tzIiApOwoJCQlpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7CgkJCQljb3VudCsrOwoJCQkJdG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApOwoJCQl9CgkJfQoJCXJlc29sdmUoKTsKCQlyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7Cgl9Cn0pOwp2YXIgbm9kZUhvb2ssIGJvb2xIb29rLCBmaXhTcGVjaWZpZWQsCglyY2xhc3MgPSAvW1x0XHJcbl0vZywKCXJyZXR1cm4gPSAvXHIvZywKCXJ0eXBlID0gL14oPzpidXR0b258aW5wdXQpJC9pLAoJcmZvY3VzYWJsZSA9IC9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLAoJcmNsaWNrYWJsZSA9IC9eYSg/OnJlYXwpJC9pLAoJcmJvb2xlYW4gPSAvXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSwKCWdldFNldEF0dHJpYnV0ZSA9IGpRdWVyeS5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZTsKCmpRdWVyeS5mbi5leHRlbmQoewoJYXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewoJCXJldHVybiBqUXVlcnkuYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7Cgl9LAoKCXJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkgewoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7CgkJfSk7Cgl9LAoKCXByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKCQlyZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwoJfSwKCglyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHsKCQluYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lOwoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCS8vIHRyeS9jYXRjaCBoYW5kbGVzIGNhc2VzIHdoZXJlIElFIGJhbGtzIChzdWNoIGFzIHJlbW92aW5nIGEgcHJvcGVydHkgb24gd2luZG93KQoJCQl0cnkgewoJCQkJdGhpc1sgbmFtZSBdID0gdW5kZWZpbmVkOwoJCQkJZGVsZXRlIHRoaXNbIG5hbWUgXTsKCQkJfSBjYXRjaCggZSApIHt9CgkJfSk7Cgl9LAoKCWFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJdmFyIGNsYXNzTmFtZXMsIGksIGwsIGVsZW0sCgkJCXNldENsYXNzLCBjLCBjbDsKCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsKCQkJCWpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSApOwoJCQl9KTsKCQl9CgoJCWlmICggdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiApIHsKCQkJY2xhc3NOYW1lcyA9IHZhbHVlLnNwbGl0KCBjb3JlX3JzcGFjZSApOwoKCQkJZm9yICggaSA9IDAsIGwgPSB0aGlzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKCQkJCWVsZW0gPSB0aGlzWyBpIF07CgoJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgewoJCQkJCWlmICggIWVsZW0uY2xhc3NOYW1lICYmIGNsYXNzTmFtZXMubGVuZ3RoID09PSAxICkgewoJCQkJCQllbGVtLmNsYXNzTmFtZSA9IHZhbHVlOwoKCQkJCQl9IGVsc2UgewoJCQkJCQlzZXRDbGFzcyA9ICIgIiArIGVsZW0uY2xhc3NOYW1lICsgIiAiOwoKCQkJCQkJZm9yICggYyA9IDAsIGNsID0gY2xhc3NOYW1lcy5sZW5ndGg7IGMgPCBjbDsgYysrICkgewoJCQkJCQkJaWYgKCBzZXRDbGFzcy5pbmRleE9mKCAiICIgKyBjbGFzc05hbWVzWyBjIF0gKyAiICIgKSA8IDAgKSB7CgkJCQkJCQkJc2V0Q2xhc3MgKz0gY2xhc3NOYW1lc1sgYyBdICsgIiAiOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWVsZW0uY2xhc3NOYW1lID0galF1ZXJ5LnRyaW0oIHNldENsYXNzICk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJcmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQl2YXIgcmVtb3ZlcywgY2xhc3NOYW1lLCBlbGVtLCBjLCBjbCwgaSwgbDsKCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiggaiApIHsKCQkJCWpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKHRoaXMsIGosIHRoaXMuY2xhc3NOYW1lKSApOwoJCQl9KTsKCQl9CgkJaWYgKCAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIikgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKCQkJcmVtb3ZlcyA9ICggdmFsdWUgfHwgIiIgKS5zcGxpdCggY29yZV9yc3BhY2UgKTsKCgkJCWZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCQllbGVtID0gdGhpc1sgaSBdOwoJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmIGVsZW0uY2xhc3NOYW1lICkgewoKCQkJCQljbGFzc05hbWUgPSAoIiAiICsgZWxlbS5jbGFzc05hbWUgKyAiICIpLnJlcGxhY2UoIHJjbGFzcywgIiAiICk7CgoJCQkJCS8vIGxvb3Agb3ZlciBlYWNoIGl0ZW0gaW4gdGhlIHJlbW92YWwgbGlzdAoJCQkJCWZvciAoIGMgPSAwLCBjbCA9IHJlbW92ZXMubGVuZ3RoOyBjIDwgY2w7IGMrKyApIHsKCQkJCQkJLy8gUmVtb3ZlIHVudGlsIHRoZXJlIGlzIG5vdGhpbmcgdG8gcmVtb3ZlLAoJCQkJCQl3aGlsZSAoIGNsYXNzTmFtZS5pbmRleE9mKCIgIiArIHJlbW92ZXNbIGMgXSArICIgIikgPj0gMCApIHsKCQkJCQkJCWNsYXNzTmFtZSA9IGNsYXNzTmFtZS5yZXBsYWNlKCAiICIgKyByZW1vdmVzWyBjIF0gKyAiICIgLCAiICIgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQllbGVtLmNsYXNzTmFtZSA9IHZhbHVlID8galF1ZXJ5LnRyaW0oIGNsYXNzTmFtZSApIDogIiI7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCgl0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHsKCQl2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSwKCQkJaXNCb29sID0gdHlwZW9mIHN0YXRlVmFsID09PSAiYm9vbGVhbiI7CgoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIHZhbHVlICkgKSB7CgkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oIGkgKSB7CgkJCQlqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyggdmFsdWUuY2FsbCh0aGlzLCBpLCB0aGlzLmNsYXNzTmFtZSwgc3RhdGVWYWwpLCBzdGF0ZVZhbCApOwoJCQl9KTsKCQl9CgoJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CgkJCWlmICggdHlwZSA9PT0gInN0cmluZyIgKSB7CgkJCQkvLyB0b2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lcwoJCQkJdmFyIGNsYXNzTmFtZSwKCQkJCQlpID0gMCwKCQkJCQlzZWxmID0galF1ZXJ5KCB0aGlzICksCgkJCQkJc3RhdGUgPSBzdGF0ZVZhbCwKCQkJCQljbGFzc05hbWVzID0gdmFsdWUuc3BsaXQoIGNvcmVfcnNwYWNlICk7CgoJCQkJd2hpbGUgKCAoY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0pICkgewoJCQkJCS8vIGNoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdAoJCQkJCXN0YXRlID0gaXNCb29sID8gc3RhdGUgOiAhc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICk7CgkJCQkJc2VsZlsgc3RhdGUgPyAiYWRkQ2xhc3MiIDogInJlbW92ZUNsYXNzIiBdKCBjbGFzc05hbWUgKTsKCQkJCX0KCgkJCX0gZWxzZSBpZiAoIHR5cGUgPT09ICJ1bmRlZmluZWQiIHx8IHR5cGUgPT09ICJib29sZWFuIiApIHsKCQkJCWlmICggdGhpcy5jbGFzc05hbWUgKSB7CgkJCQkJLy8gc3RvcmUgY2xhc3NOYW1lIGlmIHNldAoJCQkJCWpRdWVyeS5fZGF0YSggdGhpcywgIl9fY2xhc3NOYW1lX18iLCB0aGlzLmNsYXNzTmFtZSApOwoJCQkJfQoKCQkJCS8vIHRvZ2dsZSB3aG9sZSBjbGFzc05hbWUKCQkJCXRoaXMuY2xhc3NOYW1lID0gdGhpcy5jbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID8gIiIgOiBqUXVlcnkuX2RhdGEoIHRoaXMsICJfX2NsYXNzTmFtZV9fIiApIHx8ICIiOwoJCQl9CgkJfSk7Cgl9LAoKCWhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJdmFyIGNsYXNzTmFtZSA9ICIgIiArIHNlbGVjdG9yICsgIiAiLAoJCQlpID0gMCwKCQkJbCA9IHRoaXMubGVuZ3RoOwoJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKCQkJaWYgKCB0aGlzW2ldLm5vZGVUeXBlID09PSAxICYmICgiICIgKyB0aGlzW2ldLmNsYXNzTmFtZSArICIgIikucmVwbGFjZShyY2xhc3MsICIgIikuaW5kZXhPZiggY2xhc3NOYW1lICkgPj0gMCApIHsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfQoKCQlyZXR1cm4gZmFsc2U7Cgl9LAoKCXZhbDogZnVuY3Rpb24oIHZhbHVlICkgewoJCXZhciBob29rcywgcmV0LCBpc0Z1bmN0aW9uLAoJCQllbGVtID0gdGhpc1swXTsKCgkJaWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHsKCQkJaWYgKCBlbGVtICkgewoJCQkJaG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07CgoJCQkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCAidmFsdWUiICkpICE9PSB1bmRlZmluZWQgKSB7CgkJCQkJcmV0dXJuIHJldDsKCQkJCX0KCgkJCQlyZXQgPSBlbGVtLnZhbHVlOwoKCQkJCXJldHVybiB0eXBlb2YgcmV0ID09PSAic3RyaW5nIiA/CgkJCQkJLy8gaGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlcwoJCQkJCXJldC5yZXBsYWNlKHJyZXR1cm4sICIiKSA6CgkJCQkJLy8gaGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyCgkJCQkJcmV0ID09IG51bGwgPyAiIiA6IHJldDsKCQkJfQoKCQkJcmV0dXJuOwoJCX0KCgkJaXNGdW5jdGlvbiA9IGpRdWVyeS5pc0Z1bmN0aW9uKCB2YWx1ZSApOwoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewoJCQl2YXIgdmFsLAoJCQkJc2VsZiA9IGpRdWVyeSh0aGlzKTsKCgkJCWlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJaWYgKCBpc0Z1bmN0aW9uICkgewoJCQkJdmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgc2VsZi52YWwoKSApOwoJCQl9IGVsc2UgewoJCQkJdmFsID0gdmFsdWU7CgkJCX0KCgkJCS8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzICIiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nCgkJCWlmICggdmFsID09IG51bGwgKSB7CgkJCQl2YWwgPSAiIjsKCQkJfSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gIm51bWJlciIgKSB7CgkJCQl2YWwgKz0gIiI7CgkJCX0gZWxzZSBpZiAoIGpRdWVyeS5pc0FycmF5KCB2YWwgKSApIHsKCQkJCXZhbCA9IGpRdWVyeS5tYXAodmFsLCBmdW5jdGlvbiAoIHZhbHVlICkgewoJCQkJCXJldHVybiB2YWx1ZSA9PSBudWxsID8gIiIgOiB2YWx1ZSArICIiOwoJCQkJfSk7CgkJCX0KCgkJCWhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdOwoKCQkJLy8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmcKCQkJaWYgKCAhaG9va3MgfHwgISgic2V0IiBpbiBob29rcykgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsICJ2YWx1ZSIgKSA9PT0gdW5kZWZpbmVkICkgewoJCQkJdGhpcy52YWx1ZSA9IHZhbDsKCQkJfQoJCX0pOwoJfQp9KTsKCmpRdWVyeS5leHRlbmQoewoJdmFsSG9va3M6IHsKCQlvcHRpb246IHsKCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCS8vIGF0dHJpYnV0ZXMudmFsdWUgaXMgdW5kZWZpbmVkIGluIEJsYWNrYmVycnkgNC43IGJ1dAoJCQkJLy8gdXNlcyAudmFsdWUuIFNlZSAjNjkzMgoJCQkJdmFyIHZhbCA9IGVsZW0uYXR0cmlidXRlcy52YWx1ZTsKCQkJCXJldHVybiAhdmFsIHx8IHZhbC5zcGVjaWZpZWQgPyBlbGVtLnZhbHVlIDogZWxlbS50ZXh0OwoJCQl9CgkJfSwKCQlzZWxlY3Q6IHsKCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXZhciB2YWx1ZSwgb3B0aW9uLAoJCQkJCW9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsCgkJCQkJaW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsCgkJCQkJb25lID0gZWxlbS50eXBlID09PSAic2VsZWN0LW9uZSIgfHwgaW5kZXggPCAwLAoJCQkJCXZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSwKCQkJCQltYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aCwKCQkJCQlpID0gaW5kZXggPCAwID8KCQkJCQkJbWF4IDoKCQkJCQkJb25lID8gaW5kZXggOiAwOwoKCQkJCS8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMKCQkJCWZvciAoIDsgaSA8IG1heDsgaSsrICkgewoJCQkJCW9wdGlvbiA9IG9wdGlvbnNbIGkgXTsKCgkJCQkJLy8gb2xkSUUgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpCgkJCQkJaWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmCgkJCQkJCQkvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwCgkJCQkJCQkoIGpRdWVyeS5zdXBwb3J0Lm9wdERpc2FibGVkID8gIW9wdGlvbi5kaXNhYmxlZCA6IG9wdGlvbi5nZXRBdHRyaWJ1dGUoImRpc2FibGVkIikgPT09IG51bGwgKSAmJgoJCQkJCQkJKCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHwgIWpRdWVyeS5ub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsICJvcHRncm91cCIgKSApICkgewoKCQkJCQkJLy8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvbgoJCQkJCQl2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7CgoJCQkJCQkvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0cwoJCQkJCQlpZiAoIG9uZSApIHsKCQkJCQkJCXJldHVybiB2YWx1ZTsKCQkJCQkJfQoKCQkJCQkJLy8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXkKCQkJCQkJdmFsdWVzLnB1c2goIHZhbHVlICk7CgkJCQkJfQoJCQkJfQoKCQkJCXJldHVybiB2YWx1ZXM7CgkJCX0sCgoJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKCQkJCXZhciB2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApOwoKCQkJCWpRdWVyeShlbGVtKS5maW5kKCJvcHRpb24iKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJCXRoaXMuc2VsZWN0ZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KHRoaXMpLnZhbCgpLCB2YWx1ZXMgKSA+PSAwOwoJCQkJfSk7CgoJCQkJaWYgKCAhdmFsdWVzLmxlbmd0aCApIHsKCQkJCQllbGVtLnNlbGVjdGVkSW5kZXggPSAtMTsKCQkJCX0KCQkJCXJldHVybiB2YWx1ZXM7CgkJCX0KCQl9Cgl9LAoKCS8vIFVudXNlZCBpbiAxLjgsIGxlZnQgaW4gc28gYXR0ckZuLXN0YWJiZXJzIHdvbid0IGRpZTsgcmVtb3ZlIGluIDEuOQoJYXR0ckZuOiB7fSwKCglhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIHBhc3MgKSB7CgkJdmFyIHJldCwgaG9va3MsIG5vdHhtbCwKCQkJblR5cGUgPSBlbGVtLm5vZGVUeXBlOwoKCQkvLyBkb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzCgkJaWYgKCAhZWxlbSB8fCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCBwYXNzICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBqUXVlcnkuZm5bIG5hbWUgXSApICkgewoJCQlyZXR1cm4galF1ZXJ5KCBlbGVtIClbIG5hbWUgXSggdmFsdWUgKTsKCQl9CgoJCS8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkCgkJaWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09ICJ1bmRlZmluZWQiICkgewoJCQlyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7CgkJfQoKCQlub3R4bWwgPSBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICk7CgoJCS8vIEFsbCBhdHRyaWJ1dGVzIGFyZSBsb3dlcmNhc2UKCQkvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkCgkJaWYgKCBub3R4bWwgKSB7CgkJCW5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CgkJCWhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZSBdIHx8ICggcmJvb2xlYW4udGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiBub2RlSG9vayApOwoJCX0KCgkJaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkgewoKCQkJaWYgKCB2YWx1ZSA9PT0gbnVsbCApIHsKCQkJCWpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7CgkJCQlyZXR1cm47CgoJCQl9IGVsc2UgaWYgKCBob29rcyAmJiAic2V0IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiByZXQ7CgoJCQl9IGVsc2UgewoJCQkJZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgIiIgKTsKCQkJCXJldHVybiB2YWx1ZTsKCQkJfQoKCQl9IGVsc2UgaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiBub3R4bWwgJiYgKHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApKSAhPT0gbnVsbCApIHsKCQkJcmV0dXJuIHJldDsKCgkJfSBlbHNlIHsKCgkJCXJldCA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7CgoJCQkvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZAoJCQlyZXR1cm4gcmV0ID09PSBudWxsID8KCQkJCXVuZGVmaW5lZCA6CgkJCQlyZXQ7CgkJfQoJfSwKCglyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CgkJdmFyIHByb3BOYW1lLCBhdHRyTmFtZXMsIG5hbWUsIGlzQm9vbCwKCQkJaSA9IDA7CgoJCWlmICggdmFsdWUgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCgkJCWF0dHJOYW1lcyA9IHZhbHVlLnNwbGl0KCBjb3JlX3JzcGFjZSApOwoKCQkJZm9yICggOyBpIDwgYXR0ck5hbWVzLmxlbmd0aDsgaSsrICkgewoJCQkJbmFtZSA9IGF0dHJOYW1lc1sgaSBdOwoKCQkJCWlmICggbmFtZSApIHsKCQkJCQlwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKCQkJCQlpc0Jvb2wgPSByYm9vbGVhbi50ZXN0KCBuYW1lICk7CgoJCQkJCS8vIFNlZSAjOTY5OSBmb3IgZXhwbGFuYXRpb24gb2YgdGhpcyBhcHByb2FjaCAoc2V0dGluZyBmaXJzdCwgdGhlbiByZW1vdmFsKQoJCQkJCS8vIERvIG5vdCBkbyB0aGlzIGZvciBib29sZWFuIGF0dHJpYnV0ZXMgKHNlZSAjMTA4NzApCgkJCQkJaWYgKCAhaXNCb29sICkgewoJCQkJCQlqUXVlcnkuYXR0ciggZWxlbSwgbmFtZSwgIiIgKTsKCQkJCQl9CgkJCQkJZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIGdldFNldEF0dHJpYnV0ZSA/IG5hbWUgOiBwcm9wTmFtZSApOwoKCQkJCQkvLyBTZXQgY29ycmVzcG9uZGluZyBwcm9wZXJ0eSB0byBmYWxzZSBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzCgkJCQkJaWYgKCBpc0Jvb2wgJiYgcHJvcE5hbWUgaW4gZWxlbSApIHsKCQkJCQkJZWxlbVsgcHJvcE5hbWUgXSA9IGZhbHNlOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCX0sCgoJYXR0ckhvb2tzOiB7CgkJdHlwZTogewoJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKCQkJCS8vIFdlIGNhbid0IGFsbG93IHRoZSB0eXBlIHByb3BlcnR5IHRvIGJlIGNoYW5nZWQgKHNpbmNlIGl0IGNhdXNlcyBwcm9ibGVtcyBpbiBJRSkKCQkJCWlmICggcnR5cGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmIGVsZW0ucGFyZW50Tm9kZSApIHsKCQkJCQlqUXVlcnkuZXJyb3IoICJ0eXBlIHByb3BlcnR5IGNhbid0IGJlIGNoYW5nZWQiICk7CgkJCQl9IGVsc2UgaWYgKCAhalF1ZXJ5LnN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gInJhZGlvIiAmJiBqUXVlcnkubm9kZU5hbWUoZWxlbSwgImlucHV0IikgKSB7CgkJCQkJLy8gU2V0dGluZyB0aGUgdHlwZSBvbiBhIHJhZGlvIGJ1dHRvbiBhZnRlciB0aGUgdmFsdWUgcmVzZXRzIHRoZSB2YWx1ZSBpbiBJRTYtOQoJCQkJCS8vIFJlc2V0IHZhbHVlIHRvIGl0J3MgZGVmYXVsdCBpbiBjYXNlIHR5cGUgaXMgc2V0IGFmdGVyIHZhbHVlCgkJCQkJLy8gVGhpcyBpcyBmb3IgZWxlbWVudCBjcmVhdGlvbgoJCQkJCXZhciB2YWwgPSBlbGVtLnZhbHVlOwoJCQkJCWVsZW0uc2V0QXR0cmlidXRlKCAidHlwZSIsIHZhbHVlICk7CgkJCQkJaWYgKCB2YWwgKSB7CgkJCQkJCWVsZW0udmFsdWUgPSB2YWw7CgkJCQkJfQoJCQkJCXJldHVybiB2YWx1ZTsKCQkJCX0KCQkJfQoJCX0sCgkJLy8gVXNlIHRoZSB2YWx1ZSBwcm9wZXJ0eSBmb3IgYmFjayBjb21wYXQKCQkvLyBVc2UgdGhlIG5vZGVIb29rIGZvciBidXR0b24gZWxlbWVudHMgaW4gSUU2LzcgKCMxOTU0KQoJCXZhbHVlOiB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CgkJCQlpZiAoIG5vZGVIb29rICYmIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImJ1dHRvbiIgKSApIHsKCQkJCQlyZXR1cm4gbm9kZUhvb2suZ2V0KCBlbGVtLCBuYW1lICk7CgkJCQl9CgkJCQlyZXR1cm4gbmFtZSBpbiBlbGVtID8KCQkJCQllbGVtLnZhbHVlIDoKCQkJCQludWxsOwoJCQl9LAoJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHsKCQkJCWlmICggbm9kZUhvb2sgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApICkgewoJCQkJCXJldHVybiBub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CgkJCQl9CgkJCQkvLyBEb2VzIG5vdCByZXR1cm4gc28gdGhhdCBzZXRBdHRyaWJ1dGUgaXMgYWxzbyB1c2VkCgkJCQllbGVtLnZhbHVlID0gdmFsdWU7CgkJCX0KCQl9Cgl9LAoKCXByb3BGaXg6IHsKCQl0YWJpbmRleDogInRhYkluZGV4IiwKCQlyZWFkb25seTogInJlYWRPbmx5IiwKCQkiZm9yIjogImh0bWxGb3IiLAoJCSJjbGFzcyI6ICJjbGFzc05hbWUiLAoJCW1heGxlbmd0aDogIm1heExlbmd0aCIsCgkJY2VsbHNwYWNpbmc6ICJjZWxsU3BhY2luZyIsCgkJY2VsbHBhZGRpbmc6ICJjZWxsUGFkZGluZyIsCgkJcm93c3BhbjogInJvd1NwYW4iLAoJCWNvbHNwYW46ICJjb2xTcGFuIiwKCQl1c2VtYXA6ICJ1c2VNYXAiLAoJCWZyYW1lYm9yZGVyOiAiZnJhbWVCb3JkZXIiLAoJCWNvbnRlbnRlZGl0YWJsZTogImNvbnRlbnRFZGl0YWJsZSIKCX0sCgoJcHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewoJCXZhciByZXQsIGhvb2tzLCBub3R4bWwsCgkJCW5UeXBlID0gZWxlbS5ub2RlVHlwZTsKCgkJLy8gZG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2RlcwoJCWlmICggIWVsZW0gfHwgblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7CgkJCXJldHVybjsKCQl9CgoJCW5vdHhtbCA9IG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKTsKCgkJaWYgKCBub3R4bWwgKSB7CgkJCS8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3MKCQkJbmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKCQkJaG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07CgkJfQoKCQlpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7CgkJCWlmICggaG9va3MgJiYgInNldCIgaW4gaG9va3MgJiYgKHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSkgIT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiByZXQ7CgoJCQl9IGVsc2UgewoJCQkJcmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTsKCQkJfQoKCQl9IGVsc2UgewoJCQlpZiAoIGhvb2tzICYmICJnZXQiIGluIGhvb2tzICYmIChyZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSkgIT09IG51bGwgKSB7CgkJCQlyZXR1cm4gcmV0OwoKCQkJfSBlbHNlIHsKCQkJCXJldHVybiBlbGVtWyBuYW1lIF07CgkJCX0KCQl9Cgl9LAoKCXByb3BIb29rczogewoJCXRhYkluZGV4OiB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQkvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0CgkJCQkvLyBodHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0LwoJCQkJdmFyIGF0dHJpYnV0ZU5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7CgoJCQkJcmV0dXJuIGF0dHJpYnV0ZU5vZGUgJiYgYXR0cmlidXRlTm9kZS5zcGVjaWZpZWQgPwoJCQkJCXBhcnNlSW50KCBhdHRyaWJ1dGVOb2RlLnZhbHVlLCAxMCApIDoKCQkJCQlyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fCByY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiBlbGVtLmhyZWYgPwoJCQkJCQkwIDoKCQkJCQkJdW5kZWZpbmVkOwoJCQl9CgkJfQoJfQp9KTsKCi8vIEhvb2sgZm9yIGJvb2xlYW4gYXR0cmlidXRlcwpib29sSG9vayA9IHsKCWdldDogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7CgkJLy8gQWxpZ24gYm9vbGVhbiBhdHRyaWJ1dGVzIHdpdGggY29ycmVzcG9uZGluZyBwcm9wZXJ0aWVzCgkJLy8gRmFsbCBiYWNrIHRvIGF0dHJpYnV0ZSBwcmVzZW5jZSB3aGVyZSBzb21lIGJvb2xlYW5zIGFyZSBub3Qgc3VwcG9ydGVkCgkJdmFyIGF0dHJOb2RlLAoJCQlwcm9wZXJ0eSA9IGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lICk7CgkJcmV0dXJuIHByb3BlcnR5ID09PSB0cnVlIHx8IHR5cGVvZiBwcm9wZXJ0eSAhPT0gImJvb2xlYW4iICYmICggYXR0ck5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUobmFtZSkgKSAmJiBhdHRyTm9kZS5ub2RlVmFsdWUgIT09IGZhbHNlID8KCQkJbmFtZS50b0xvd2VyQ2FzZSgpIDoKCQkJdW5kZWZpbmVkOwoJfSwKCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewoJCXZhciBwcm9wTmFtZTsKCQlpZiAoIHZhbHVlID09PSBmYWxzZSApIHsKCQkJLy8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZQoJCQlqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApOwoJCX0gZWxzZSB7CgkJCS8vIHZhbHVlIGlzIHRydWUgc2luY2Ugd2Uga25vdyBhdCB0aGlzIHBvaW50IGl0J3MgdHlwZSBib29sZWFuIGFuZCBub3QgZmFsc2UKCQkJLy8gU2V0IGJvb2xlYW4gYXR0cmlidXRlcyB0byB0aGUgc2FtZSBuYW1lIGFuZCBzZXQgdGhlIERPTSBwcm9wZXJ0eQoJCQlwcm9wTmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTsKCQkJaWYgKCBwcm9wTmFtZSBpbiBlbGVtICkgewoJCQkJLy8gT25seSBzZXQgdGhlIElETCBzcGVjaWZpY2FsbHkgaWYgaXQgYWxyZWFkeSBleGlzdHMgb24gdGhlIGVsZW1lbnQKCQkJCWVsZW1bIHByb3BOYW1lIF0gPSB0cnVlOwoJCQl9CgoJCQllbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpICk7CgkJfQoJCXJldHVybiBuYW1lOwoJfQp9OwoKLy8gSUU2LzcgZG8gbm90IHN1cHBvcnQgZ2V0dGluZy9zZXR0aW5nIHNvbWUgYXR0cmlidXRlcyB3aXRoIGdldC9zZXRBdHRyaWJ1dGUKaWYgKCAhZ2V0U2V0QXR0cmlidXRlICkgewoKCWZpeFNwZWNpZmllZCA9IHsKCQluYW1lOiB0cnVlLAoJCWlkOiB0cnVlLAoJCWNvb3JkczogdHJ1ZQoJfTsKCgkvLyBVc2UgdGhpcyBmb3IgYW55IGF0dHJpYnV0ZSBpbiBJRTYvNwoJLy8gVGhpcyBmaXhlcyBhbG1vc3QgZXZlcnkgSUU2LzcgaXNzdWUKCW5vZGVIb29rID0galF1ZXJ5LnZhbEhvb2tzLmJ1dHRvbiA9IHsKCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCQl2YXIgcmV0OwoJCQlyZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKCQkJcmV0dXJuIHJldCAmJiAoIGZpeFNwZWNpZmllZFsgbmFtZSBdID8gcmV0LnZhbHVlICE9PSAiIiA6IHJldC5zcGVjaWZpZWQgKSA/CgkJCQlyZXQudmFsdWUgOgoJCQkJdW5kZWZpbmVkOwoJCX0sCgkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7CgkJCS8vIFNldCB0aGUgZXhpc3Rpbmcgb3IgY3JlYXRlIGEgbmV3IGF0dHJpYnV0ZSBub2RlCgkJCXZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKTsKCQkJaWYgKCAhcmV0ICkgewoJCQkJcmV0ID0gZG9jdW1lbnQuY3JlYXRlQXR0cmlidXRlKCBuYW1lICk7CgkJCQllbGVtLnNldEF0dHJpYnV0ZU5vZGUoIHJldCApOwoJCQl9CgkJCXJldHVybiAoIHJldC52YWx1ZSA9IHZhbHVlICsgIiIgKTsKCQl9Cgl9OwoKCS8vIFNldCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGF1dG8gaW5zdGVhZCBvZiAwIG9uIGVtcHR5IHN0cmluZyggQnVnICM4MTUwICkKCS8vIFRoaXMgaXMgZm9yIHJlbW92YWxzCglqUXVlcnkuZWFjaChbICJ3aWR0aCIsICJoZWlnaHQiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewoJCWpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5hdHRySG9va3NbIG5hbWUgXSwgewoJCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKCQkJCWlmICggdmFsdWUgPT09ICIiICkgewoJCQkJCWVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCAiYXV0byIgKTsKCQkJCQlyZXR1cm4gdmFsdWU7CgkJCQl9CgkJCX0KCQl9KTsKCX0pOwoKCS8vIFNldCBjb250ZW50ZWRpdGFibGUgdG8gZmFsc2Ugb24gcmVtb3ZhbHMoIzEwNDI5KQoJLy8gU2V0dGluZyB0byBlbXB0eSBzdHJpbmcgdGhyb3dzIGFuIGVycm9yIGFzIGFuIGludmFsaWQgdmFsdWUKCWpRdWVyeS5hdHRySG9va3MuY29udGVudGVkaXRhYmxlID0gewoJCWdldDogbm9kZUhvb2suZ2V0LAoJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkgewoJCQlpZiAoIHZhbHVlID09PSAiIiApIHsKCQkJCXZhbHVlID0gImZhbHNlIjsKCQkJfQoJCQlub2RlSG9vay5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICk7CgkJfQoJfTsKfQoKCi8vIFNvbWUgYXR0cmlidXRlcyByZXF1aXJlIGEgc3BlY2lhbCBjYWxsIG9uIElFCmlmICggIWpRdWVyeS5zdXBwb3J0LmhyZWZOb3JtYWxpemVkICkgewoJalF1ZXJ5LmVhY2goWyAiaHJlZiIsICJzcmMiLCAid2lkdGgiLCAiaGVpZ2h0IiBdLCBmdW5jdGlvbiggaSwgbmFtZSApIHsKCQlqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lIF0sIHsKCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXZhciByZXQgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgMiApOwoJCQkJcmV0dXJuIHJldCA9PT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDsKCQkJfQoJCX0pOwoJfSk7Cn0KCmlmICggIWpRdWVyeS5zdXBwb3J0LnN0eWxlICkgewoJalF1ZXJ5LmF0dHJIb29rcy5zdHlsZSA9IHsKCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCQkvLyBSZXR1cm4gdW5kZWZpbmVkIGluIHRoZSBjYXNlIG9mIGVtcHR5IHN0cmluZwoJCQkvLyBOb3JtYWxpemUgdG8gbG93ZXJjYXNlIHNpbmNlIElFIHVwcGVyY2FzZXMgY3NzIHByb3BlcnR5IG5hbWVzCgkJCXJldHVybiBlbGVtLnN0eWxlLmNzc1RleHQudG9Mb3dlckNhc2UoKSB8fCB1bmRlZmluZWQ7CgkJfSwKCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHsKCQkJcmV0dXJuICggZWxlbS5zdHlsZS5jc3NUZXh0ID0gdmFsdWUgKyAiIiApOwoJCX0KCX07Cn0KCi8vIFNhZmFyaSBtaXMtcmVwb3J0cyB0aGUgZGVmYXVsdCBzZWxlY3RlZCBwcm9wZXJ0eSBvZiBhbiBvcHRpb24KLy8gQWNjZXNzaW5nIHRoZSBwYXJlbnQncyBzZWxlY3RlZEluZGV4IHByb3BlcnR5IGZpeGVzIGl0CmlmICggIWpRdWVyeS5zdXBwb3J0Lm9wdFNlbGVjdGVkICkgewoJalF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQsIHsKCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCQl2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlOwoKCQkJaWYgKCBwYXJlbnQgKSB7CgkJCQlwYXJlbnQuc2VsZWN0ZWRJbmRleDsKCgkJCQkvLyBNYWtlIHN1cmUgdGhhdCBpdCBhbHNvIHdvcmtzIHdpdGggb3B0Z3JvdXBzLCBzZWUgIzU3MDEKCQkJCWlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7CgkJCQkJcGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9KTsKfQoKLy8gSUU2LzcgY2FsbCBlbmN0eXBlIGVuY29kaW5nCmlmICggIWpRdWVyeS5zdXBwb3J0LmVuY3R5cGUgKSB7CglqUXVlcnkucHJvcEZpeC5lbmN0eXBlID0gImVuY29kaW5nIjsKfQoKLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXIKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hlY2tPbiApIHsKCWpRdWVyeS5lYWNoKFsgInJhZGlvIiwgImNoZWNrYm94IiBdLCBmdW5jdGlvbigpIHsKCQlqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHsKCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSApIHsKCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBpbiBXZWJraXQgIiIgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiAib24iIGlmIGEgdmFsdWUgaXNuJ3Qgc3BlY2lmaWVkCgkJCQlyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoInZhbHVlIikgPT09IG51bGwgPyAib24iIDogZWxlbS52YWx1ZTsKCQkJfQoJCX07Cgl9KTsKfQpqUXVlcnkuZWFjaChbICJyYWRpbyIsICJjaGVja2JveCIgXSwgZnVuY3Rpb24oKSB7CglqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IGpRdWVyeS5leHRlbmQoIGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLCB7CgkJc2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7CgkJCWlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CgkJCQlyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KGVsZW0pLnZhbCgpLCB2YWx1ZSApID49IDAgKTsKCQkJfQoJCX0KCX0pOwp9KTsKdmFyIHJmb3JtRWxlbXMgPSAvXig/OnRleHRhcmVhfGlucHV0fHNlbGVjdCkkL2ksCglydHlwZW5hbWVzcGFjZSA9IC9eKFteXC5dKnwpKD86XC4oLispfCkkLywKCXJob3ZlckhhY2sgPSAvKD86Xnxccylob3ZlcihcLlxTK3wpXGIvLAoJcmtleUV2ZW50ID0gL15rZXkvLAoJcm1vdXNlRXZlbnQgPSAvXig/Om1vdXNlfGNvbnRleHRtZW51KXxjbGljay8sCglyZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLywKCWhvdmVySGFjayA9IGZ1bmN0aW9uKCBldmVudHMgKSB7CgkJcmV0dXJuIGpRdWVyeS5ldmVudC5zcGVjaWFsLmhvdmVyID8gZXZlbnRzIDogZXZlbnRzLnJlcGxhY2UoIHJob3ZlckhhY2ssICJtb3VzZWVudGVyJDEgbW91c2VsZWF2ZSQxIiApOwoJfTsKCi8qCiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS4KICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy4KICovCmpRdWVyeS5ldmVudCA9IHsKCglhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7CgoJCXZhciBlbGVtRGF0YSwgZXZlbnRIYW5kbGUsIGV2ZW50cywKCQkJdCwgdG5zLCB0eXBlLCBuYW1lc3BhY2VzLCBoYW5kbGVPYmosCgkJCWhhbmRsZU9iakluLCBoYW5kbGVycywgc3BlY2lhbDsKCgkJLy8gRG9uJ3QgYXR0YWNoIGV2ZW50cyB0byBub0RhdGEgb3IgdGV4dC9jb21tZW50IG5vZGVzIChhbGxvdyBwbGFpbiBvYmplY3RzIHRobykKCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhdHlwZXMgfHwgIWhhbmRsZXIgfHwgIShlbGVtRGF0YSA9IGpRdWVyeS5fZGF0YSggZWxlbSApKSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyCgkJaWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7CgkJCWhhbmRsZU9iakluID0gaGFuZGxlcjsKCQkJaGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7CgkJCXNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7CgkJfQoKCQkvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXIKCQlpZiAoICFoYW5kbGVyLmd1aWQgKSB7CgkJCWhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7CgkJfQoKCQkvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0CgkJZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzOwoJCWlmICggIWV2ZW50cyApIHsKCQkJZWxlbURhdGEuZXZlbnRzID0gZXZlbnRzID0ge307CgkJfQoJCWV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlOwoJCWlmICggIWV2ZW50SGFuZGxlICkgewoJCQllbGVtRGF0YS5oYW5kbGUgPSBldmVudEhhbmRsZSA9IGZ1bmN0aW9uKCBlICkgewoJCQkJLy8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmQKCQkJCS8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWQKCQkJCXJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSAidW5kZWZpbmVkIiAmJiAoIWUgfHwgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlKSA/CgkJCQkJalF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBldmVudEhhbmRsZS5lbGVtLCBhcmd1bWVudHMgKSA6CgkJCQkJdW5kZWZpbmVkOwoJCQl9OwoJCQkvLyBBZGQgZWxlbSBhcyBhIHByb3BlcnR5IG9mIHRoZSBoYW5kbGUgZm4gdG8gcHJldmVudCBhIG1lbW9yeSBsZWFrIHdpdGggSUUgbm9uLW5hdGl2ZSBldmVudHMKCQkJZXZlbnRIYW5kbGUuZWxlbSA9IGVsZW07CgkJfQoKCQkvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlCgkJLy8galF1ZXJ5KC4uLikuYmluZCgibW91c2VvdmVyIG1vdXNlb3V0IiwgZm4pOwoJCXR5cGVzID0galF1ZXJ5LnRyaW0oIGhvdmVySGFjayh0eXBlcykgKS5zcGxpdCggIiAiICk7CgkJZm9yICggdCA9IDA7IHQgPCB0eXBlcy5sZW5ndGg7IHQrKyApIHsKCgkJCXRucyA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzW3RdICkgfHwgW107CgkJCXR5cGUgPSB0bnNbMV07CgkJCW5hbWVzcGFjZXMgPSAoIHRuc1syXSB8fCAiIiApLnNwbGl0KCAiLiIgKS5zb3J0KCk7CgoJCQkvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGUKCQkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgoJCQkvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGUKCQkJdHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlOwoKCQkJLy8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZQoJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTsKCgkJCS8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzCgkJCWhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoewoJCQkJdHlwZTogdHlwZSwKCQkJCW9yaWdUeXBlOiB0bnNbMV0sCgkJCQlkYXRhOiBkYXRhLAoJCQkJaGFuZGxlcjogaGFuZGxlciwKCQkJCWd1aWQ6IGhhbmRsZXIuZ3VpZCwKCQkJCXNlbGVjdG9yOiBzZWxlY3RvciwKCQkJCW5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksCgkJCQluYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbigiLiIpCgkJCX0sIGhhbmRsZU9iakluICk7CgoJCQkvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdAoJCQloYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdOwoJCQlpZiAoICFoYW5kbGVycyApIHsKCQkJCWhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTsKCQkJCWhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwOwoKCQkJCS8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIvYXR0YWNoRXZlbnQgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZQoJCQkJaWYgKCAhc3BlY2lhbC5zZXR1cCB8fCBzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkgewoJCQkJCS8vIEJpbmQgdGhlIGdsb2JhbCBldmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CgkJCQkJaWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7CgkJCQkJCWVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUsIGZhbHNlICk7CgoJCQkJCX0gZWxzZSBpZiAoIGVsZW0uYXR0YWNoRXZlbnQgKSB7CgkJCQkJCWVsZW0uYXR0YWNoRXZlbnQoICJvbiIgKyB0eXBlLCBldmVudEhhbmRsZSApOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJaWYgKCBzcGVjaWFsLmFkZCApIHsKCQkJCXNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApOwoKCQkJCWlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7CgkJCQkJaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDsKCQkJCX0KCQkJfQoKCQkJLy8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnQKCQkJaWYgKCBzZWxlY3RvciApIHsKCQkJCWhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTsKCQkJfSBlbHNlIHsKCQkJCWhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApOwoJCQl9CgoJCQkvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uCgkJCWpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7CgkJfQoKCQkvLyBOdWxsaWZ5IGVsZW0gdG8gcHJldmVudCBtZW1vcnkgbGVha3MgaW4gSUUKCQllbGVtID0gbnVsbDsKCX0sCgoJZ2xvYmFsOiB7fSwKCgkvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnQKCXJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7CgoJCXZhciB0LCB0bnMsIHR5cGUsIG9yaWdUeXBlLCBuYW1lc3BhY2VzLCBvcmlnQ291bnQsCgkJCWosIGV2ZW50cywgc3BlY2lhbCwgZXZlbnRUeXBlLCBoYW5kbGVPYmosCgkJCWVsZW1EYXRhID0galF1ZXJ5Lmhhc0RhdGEoIGVsZW0gKSAmJiBqUXVlcnkuX2RhdGEoIGVsZW0gKTsKCgkJaWYgKCAhZWxlbURhdGEgfHwgIShldmVudHMgPSBlbGVtRGF0YS5ldmVudHMpICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkCgkJdHlwZXMgPSBqUXVlcnkudHJpbSggaG92ZXJIYWNrKCB0eXBlcyB8fCAiIiApICkuc3BsaXQoIiAiKTsKCQlmb3IgKCB0ID0gMDsgdCA8IHR5cGVzLmxlbmd0aDsgdCsrICkgewoJCQl0bnMgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1t0XSApIHx8IFtdOwoJCQl0eXBlID0gb3JpZ1R5cGUgPSB0bnNbMV07CgkJCW5hbWVzcGFjZXMgPSB0bnNbMl07CgoJCQkvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnQKCQkJaWYgKCAhdHlwZSApIHsKCQkJCWZvciAoIHR5cGUgaW4gZXZlbnRzICkgewoJCQkJCWpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApOwoJCQkJfQoJCQkJY29udGludWU7CgkJCX0KCgkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9OwoJCQl0eXBlID0gKCBzZWxlY3Rvcj8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTsKCQkJZXZlbnRUeXBlID0gZXZlbnRzWyB0eXBlIF0gfHwgW107CgkJCW9yaWdDb3VudCA9IGV2ZW50VHlwZS5sZW5ndGg7CgkJCW5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzID8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLnNwbGl0KCIuIikuc29ydCgpLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsOwoKCQkJLy8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50cwoJCQlmb3IgKCBqID0gMDsgaiA8IGV2ZW50VHlwZS5sZW5ndGg7IGorKyApIHsKCQkJCWhhbmRsZU9iaiA9IGV2ZW50VHlwZVsgaiBdOwoKCQkJCWlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiYKCQkJCQkgKCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiYKCQkJCQkgKCAhbmFtZXNwYWNlcyB8fCBuYW1lc3BhY2VzLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmCgkJCQkJICggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICIqKiIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7CgkJCQkJZXZlbnRUeXBlLnNwbGljZSggai0tLCAxICk7CgoJCQkJCWlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkgewoJCQkJCQlldmVudFR5cGUuZGVsZWdhdGVDb3VudC0tOwoJCQkJCX0KCQkJCQlpZiAoIHNwZWNpYWwucmVtb3ZlICkgewoJCQkJCQlzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCS8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3QKCQkJLy8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpCgkJCWlmICggZXZlbnRUeXBlLmxlbmd0aCA9PT0gMCAmJiBvcmlnQ291bnQgIT09IGV2ZW50VHlwZS5sZW5ndGggKSB7CgkJCQlpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8IHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkgewoJCQkJCWpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7CgkJCQl9CgoJCQkJZGVsZXRlIGV2ZW50c1sgdHlwZSBdOwoJCQl9CgkJfQoKCQkvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZAoJCWlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkgewoJCQlkZWxldGUgZWxlbURhdGEuaGFuZGxlOwoKCQkJLy8gcmVtb3ZlRGF0YSBhbHNvIGNoZWNrcyBmb3IgZW1wdGluZXNzIGFuZCBjbGVhcnMgdGhlIGV4cGFuZG8gaWYgZW1wdHkKCQkJLy8gc28gdXNlIGl0IGluc3RlYWQgb2YgZGVsZXRlCgkJCWpRdWVyeS5yZW1vdmVEYXRhKCBlbGVtLCAiZXZlbnRzIiwgdHJ1ZSApOwoJCX0KCX0sCgoJLy8gRXZlbnRzIHRoYXQgYXJlIHNhZmUgdG8gc2hvcnQtY2lyY3VpdCBpZiBubyBoYW5kbGVycyBhcmUgYXR0YWNoZWQuCgkvLyBOYXRpdmUgRE9NIGV2ZW50cyBzaG91bGQgbm90IGJlIGFkZGVkLCB0aGV5IG1heSBoYXZlIGlubGluZSBoYW5kbGVycy4KCWN1c3RvbUV2ZW50OiB7CgkJImdldERhdGEiOiB0cnVlLAoJCSJzZXREYXRhIjogdHJ1ZSwKCQkiY2hhbmdlRGF0YSI6IHRydWUKCX0sCgoJdHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7CgkJLy8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXMKCQlpZiAoIGVsZW0gJiYgKGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCkgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIEV2ZW50IG9iamVjdCBvciBldmVudCB0eXBlCgkJdmFyIGNhY2hlLCBleGNsdXNpdmUsIGksIGN1ciwgb2xkLCBvbnR5cGUsIHNwZWNpYWwsIGhhbmRsZSwgZXZlbnRQYXRoLCBidWJibGVUeXBlLAoJCQl0eXBlID0gZXZlbnQudHlwZSB8fCBldmVudCwKCQkJbmFtZXNwYWNlcyA9IFtdOwoKCQkvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3cKCQlpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICggdHlwZS5pbmRleE9mKCAiISIgKSA+PSAwICkgewoJCQkvLyBFeGNsdXNpdmUgZXZlbnRzIHRyaWdnZXIgb25seSBmb3IgdGhlIGV4YWN0IGV2ZW50IChubyBuYW1lc3BhY2VzKQoJCQl0eXBlID0gdHlwZS5zbGljZSgwLCAtMSk7CgkJCWV4Y2x1c2l2ZSA9IHRydWU7CgkJfQoKCQlpZiAoIHR5cGUuaW5kZXhPZiggIi4iICkgPj0gMCApIHsKCQkJLy8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKQoJCQluYW1lc3BhY2VzID0gdHlwZS5zcGxpdCgiLiIpOwoJCQl0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpOwoJCQluYW1lc3BhY2VzLnNvcnQoKTsKCQl9CgoJCWlmICggKCFlbGVtIHx8IGpRdWVyeS5ldmVudC5jdXN0b21FdmVudFsgdHlwZSBdKSAmJiAhalF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdICkgewoJCQkvLyBObyBqUXVlcnkgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnQgdHlwZSwgYW5kIGl0IGNhbid0IGhhdmUgaW5saW5lIGhhbmRsZXJzCgkJCXJldHVybjsKCQl9CgoJCS8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBFdmVudCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nCgkJZXZlbnQgPSB0eXBlb2YgZXZlbnQgPT09ICJvYmplY3QiID8KCQkJLy8galF1ZXJ5LkV2ZW50IG9iamVjdAoJCQlldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/IGV2ZW50IDoKCQkJLy8gT2JqZWN0IGxpdGVyYWwKCQkJbmV3IGpRdWVyeS5FdmVudCggdHlwZSwgZXZlbnQgKSA6CgkJCS8vIEp1c3QgdGhlIGV2ZW50IHR5cGUgKHN0cmluZykKCQkJbmV3IGpRdWVyeS5FdmVudCggdHlwZSApOwoKCQlldmVudC50eXBlID0gdHlwZTsKCQlldmVudC5pc1RyaWdnZXIgPSB0cnVlOwoJCWV2ZW50LmV4Y2x1c2l2ZSA9IGV4Y2x1c2l2ZTsKCQlldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oICIuIiApOwoJCWV2ZW50Lm5hbWVzcGFjZV9yZSA9IGV2ZW50Lm5hbWVzcGFjZT8gbmV3IFJlZ0V4cCgiKF58XFwuKSIgKyBuYW1lc3BhY2VzLmpvaW4oIlxcLig/Oi4qXFwufCkiKSArICIoXFwufCQpIikgOiBudWxsOwoJCW9udHlwZSA9IHR5cGUuaW5kZXhPZiggIjoiICkgPCAwID8gIm9uIiArIHR5cGUgOiAiIjsKCgkJLy8gSGFuZGxlIGEgZ2xvYmFsIHRyaWdnZXIKCQlpZiAoICFlbGVtICkgewoKCQkJLy8gVE9ETzogU3RvcCB0YXVudGluZyB0aGUgZGF0YSBjYWNoZTsgcmVtb3ZlIGdsb2JhbCBldmVudHMgYW5kIGFsd2F5cyBhdHRhY2ggdG8gZG9jdW1lbnQKCQkJY2FjaGUgPSBqUXVlcnkuY2FjaGU7CgkJCWZvciAoIGkgaW4gY2FjaGUgKSB7CgkJCQlpZiAoIGNhY2hlWyBpIF0uZXZlbnRzICYmIGNhY2hlWyBpIF0uZXZlbnRzWyB0eXBlIF0gKSB7CgkJCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGV2ZW50LCBkYXRhLCBjYWNoZVsgaSBdLmhhbmRsZS5lbGVtLCB0cnVlICk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuOwoJCX0KCgkJLy8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkCgkJZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkOwoJCWlmICggIWV2ZW50LnRhcmdldCApIHsKCQkJZXZlbnQudGFyZ2V0ID0gZWxlbTsKCQl9CgoJCS8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3QKCQlkYXRhID0gZGF0YSAhPSBudWxsID8galF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApIDogW107CgkJZGF0YS51bnNoaWZ0KCBldmVudCApOwoKCQkvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzCgkJc3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307CgkJaWYgKCBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSkKCQkvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KQoJCWV2ZW50UGF0aCA9IFtbIGVsZW0sIHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZSBdXTsKCQlpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewoKCQkJYnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7CgkJCWN1ciA9IHJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgPyBlbGVtIDogZWxlbS5wYXJlbnROb2RlOwoJCQlmb3IgKCBvbGQgPSBlbGVtOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkgewoJCQkJZXZlbnRQYXRoLnB1c2goWyBjdXIsIGJ1YmJsZVR5cGUgXSk7CgkJCQlvbGQgPSBjdXI7CgkJCX0KCgkJCS8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKQoJCQlpZiAoIG9sZCA9PT0gKGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCkgKSB7CgkJCQlldmVudFBhdGgucHVzaChbIG9sZC5kZWZhdWx0VmlldyB8fCBvbGQucGFyZW50V2luZG93IHx8IHdpbmRvdywgYnViYmxlVHlwZSBdKTsKCQkJfQoJCX0KCgkJLy8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aAoJCWZvciAoIGkgPSAwOyBpIDwgZXZlbnRQYXRoLmxlbmd0aCAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTsgaSsrICkgewoKCQkJY3VyID0gZXZlbnRQYXRoW2ldWzBdOwoJCQlldmVudC50eXBlID0gZXZlbnRQYXRoW2ldWzFdOwoKCQkJaGFuZGxlID0gKCBqUXVlcnkuX2RhdGEoIGN1ciwgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gJiYgalF1ZXJ5Ll9kYXRhKCBjdXIsICJoYW5kbGUiICk7CgkJCWlmICggaGFuZGxlICkgewoJCQkJaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTsKCQkJfQoJCQkvLyBOb3RlIHRoYXQgdGhpcyBpcyBhIGJhcmUgSlMgZnVuY3Rpb24gYW5kIG5vdCBhIGpRdWVyeSBoYW5kbGVyCgkJCWhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdOwoJCQlpZiAoIGhhbmRsZSAmJiBqUXVlcnkuYWNjZXB0RGF0YSggY3VyICkgJiYgaGFuZGxlLmFwcGx5ICYmIGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICkgPT09IGZhbHNlICkgewoJCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJfQoJCX0KCQlldmVudC50eXBlID0gdHlwZTsKCgkJLy8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vdwoJCWlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7CgoJCQlpZiAoICghc3BlY2lhbC5fZGVmYXVsdCB8fCBzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBlbGVtLm93bmVyRG9jdW1lbnQsIGRhdGEgKSA9PT0gZmFsc2UpICYmCgkJCQkhKHR5cGUgPT09ICJjbGljayIgJiYgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYSIgKSkgJiYgalF1ZXJ5LmFjY2VwdERhdGEoIGVsZW0gKSApIHsKCgkJCQkvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgbmFtZSBhcyB0aGUgZXZlbnQuCgkJCQkvLyBDYW4ndCB1c2UgYW4gLmlzRnVuY3Rpb24oKSBjaGVjayBoZXJlIGJlY2F1c2UgSUU2LzcgZmFpbHMgdGhhdCB0ZXN0LgoJCQkJLy8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKQoJCQkJLy8gSUU8OSBkaWVzIG9uIGZvY3VzL2JsdXIgdG8gaGlkZGVuIGVsZW1lbnQgKCMxNDg2KQoJCQkJaWYgKCBvbnR5cGUgJiYgZWxlbVsgdHlwZSBdICYmICgodHlwZSAhPT0gImZvY3VzIiAmJiB0eXBlICE9PSAiYmx1ciIpIHx8IGV2ZW50LnRhcmdldC5vZmZzZXRXaWR0aCAhPT0gMCkgJiYgIWpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewoKCQkJCQkvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kCgkJCQkJb2xkID0gZWxlbVsgb250eXBlIF07CgoJCQkJCWlmICggb2xkICkgewoJCQkJCQllbGVtWyBvbnR5cGUgXSA9IG51bGw7CgkJCQkJfQoKCQkJCQkvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZQoJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlOwoJCQkJCWVsZW1bIHR5cGUgXSgpOwoJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7CgoJCQkJCWlmICggb2xkICkgewoJCQkJCQllbGVtWyBvbnR5cGUgXSA9IG9sZDsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiBldmVudC5yZXN1bHQ7Cgl9LAoKCWRpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7CgoJCS8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdAoJCWV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgfHwgd2luZG93LmV2ZW50ICk7CgoJCXZhciBpLCBqLCBjdXIsIHJldCwgc2VsTWF0Y2gsIG1hdGNoZWQsIG1hdGNoZXMsIGhhbmRsZU9iaiwgc2VsLCByZWxhdGVkLAoJCQloYW5kbGVycyA9ICggKGpRdWVyeS5fZGF0YSggdGhpcywgImV2ZW50cyIgKSB8fCB7fSApWyBldmVudC50eXBlIF0gfHwgW10pLAoJCQlkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCwKCQkJYXJncyA9IGNvcmVfc2xpY2UuY2FsbCggYXJndW1lbnRzICksCgkJCXJ1bl9hbGwgPSAhZXZlbnQuZXhjbHVzaXZlICYmICFldmVudC5uYW1lc3BhY2UsCgkJCXNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9LAoJCQloYW5kbGVyUXVldWUgPSBbXTsKCgkJLy8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnQKCQlhcmdzWzBdID0gZXZlbnQ7CgkJZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzOwoKCQkvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkCgkJaWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIERldGVybWluZSBoYW5kbGVycyB0aGF0IHNob3VsZCBydW4gaWYgdGhlcmUgYXJlIGRlbGVnYXRlZCBldmVudHMKCQkvLyBBdm9pZCBub24tbGVmdC1jbGljayBidWJibGluZyBpbiBGaXJlZm94ICgjMzg2MSkKCQlpZiAoIGRlbGVnYXRlQ291bnQgJiYgIShldmVudC5idXR0b24gJiYgZXZlbnQudHlwZSA9PT0gImNsaWNrIikgKSB7CgoJCQlmb3IgKCBjdXIgPSBldmVudC50YXJnZXQ7IGN1ciAhPSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkgewoKCQkJCS8vIERvbid0IHByb2Nlc3MgY2xpY2tzIChPTkxZKSBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NCkKCQkJCWlmICggY3VyLmRpc2FibGVkICE9PSB0cnVlIHx8IGV2ZW50LnR5cGUgIT09ICJjbGljayIgKSB7CgkJCQkJc2VsTWF0Y2ggPSB7fTsKCQkJCQltYXRjaGVzID0gW107CgkJCQkJZm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7CgkJCQkJCWhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07CgkJCQkJCXNlbCA9IGhhbmRsZU9iai5zZWxlY3RvcjsKCgkJCQkJCWlmICggc2VsTWF0Y2hbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7CgkJCQkJCQlzZWxNYXRjaFsgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID8KCQkJCQkJCQlqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+PSAwIDoKCQkJCQkJCQlqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoOwoJCQkJCQl9CgkJCQkJCWlmICggc2VsTWF0Y2hbIHNlbCBdICkgewoJCQkJCQkJbWF0Y2hlcy5wdXNoKCBoYW5kbGVPYmogKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoIG1hdGNoZXMubGVuZ3RoICkgewoJCQkJCQloYW5kbGVyUXVldWUucHVzaCh7IGVsZW06IGN1ciwgbWF0Y2hlczogbWF0Y2hlcyB9KTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCS8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnMKCQlpZiAoIGhhbmRsZXJzLmxlbmd0aCA+IGRlbGVnYXRlQ291bnQgKSB7CgkJCWhhbmRsZXJRdWV1ZS5wdXNoKHsgZWxlbTogdGhpcywgbWF0Y2hlczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9KTsKCQl9CgoJCS8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzCgkJZm9yICggaSA9IDA7IGkgPCBoYW5kbGVyUXVldWUubGVuZ3RoICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpOyBpKysgKSB7CgkJCW1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkgXTsKCQkJZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTsKCgkJCWZvciAoIGogPSAwOyBqIDwgbWF0Y2hlZC5tYXRjaGVzLmxlbmd0aCAmJiAhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTsgaisrICkgewoJCQkJaGFuZGxlT2JqID0gbWF0Y2hlZC5tYXRjaGVzWyBqIF07CgoJCQkJLy8gVHJpZ2dlcmVkIGV2ZW50IG11c3QgZWl0aGVyIDEpIGJlIG5vbi1leGNsdXNpdmUgYW5kIGhhdmUgbm8gbmFtZXNwYWNlLCBvcgoJCQkJLy8gMikgaGF2ZSBuYW1lc3BhY2UocykgYSBzdWJzZXQgb3IgZXF1YWwgdG8gdGhvc2UgaW4gdGhlIGJvdW5kIGV2ZW50IChib3RoIGNhbiBoYXZlIG5vIG5hbWVzcGFjZSkuCgkJCQlpZiAoIHJ1bl9hbGwgfHwgKCFldmVudC5uYW1lc3BhY2UgJiYgIWhhbmRsZU9iai5uYW1lc3BhY2UpIHx8IGV2ZW50Lm5hbWVzcGFjZV9yZSAmJiBldmVudC5uYW1lc3BhY2VfcmUudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgewoKCQkJCQlldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7CgkJCQkJZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqOwoKCQkJCQlyZXQgPSAoIChqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30pLmhhbmRsZSB8fCBoYW5kbGVPYmouaGFuZGxlciApCgkJCQkJCQkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApOwoKCQkJCQlpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkgewoJCQkJCQlldmVudC5yZXN1bHQgPSByZXQ7CgkJCQkJCWlmICggcmV0ID09PSBmYWxzZSApIHsKCQkJCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQkJCQlldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJLy8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZQoJCWlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7CgkJCXNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7CgkJfQoKCQlyZXR1cm4gZXZlbnQucmVzdWx0OwoJfSwKCgkvLyBJbmNsdWRlcyBzb21lIGV2ZW50IHByb3BzIHNoYXJlZCBieSBLZXlFdmVudCBhbmQgTW91c2VFdmVudAoJLy8gKioqIGF0dHJDaGFuZ2UgYXR0ck5hbWUgcmVsYXRlZE5vZGUgc3JjRWxlbWVudCAgYXJlIG5vdCBub3JtYWxpemVkLCBub24tVzNDLCBkZXByZWNhdGVkLCB3aWxsIGJlIHJlbW92ZWQgaW4gMS44ICoqKgoJcHJvcHM6ICJhdHRyQ2hhbmdlIGF0dHJOYW1lIHJlbGF0ZWROb2RlIHNyY0VsZW1lbnQgYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLAoKCWZpeEhvb2tzOiB7fSwKCglrZXlIb29rczogewoJCXByb3BzOiAiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSwKCQlmaWx0ZXI6IGZ1bmN0aW9uKCBldmVudCwgb3JpZ2luYWwgKSB7CgoJCQkvLyBBZGQgd2hpY2ggZm9yIGtleSBldmVudHMKCQkJaWYgKCBldmVudC53aGljaCA9PSBudWxsICkgewoJCQkJZXZlbnQud2hpY2ggPSBvcmlnaW5hbC5jaGFyQ29kZSAhPSBudWxsID8gb3JpZ2luYWwuY2hhckNvZGUgOiBvcmlnaW5hbC5rZXlDb2RlOwoJCQl9CgoJCQlyZXR1cm4gZXZlbnQ7CgkJfQoJfSwKCgltb3VzZUhvb2tzOiB7CgkJcHJvcHM6ICJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksCgkJZmlsdGVyOiBmdW5jdGlvbiggZXZlbnQsIG9yaWdpbmFsICkgewoJCQl2YXIgZXZlbnREb2MsIGRvYywgYm9keSwKCQkJCWJ1dHRvbiA9IG9yaWdpbmFsLmJ1dHRvbiwKCQkJCWZyb21FbGVtZW50ID0gb3JpZ2luYWwuZnJvbUVsZW1lbnQ7CgoJCQkvLyBDYWxjdWxhdGUgcGFnZVgvWSBpZiBtaXNzaW5nIGFuZCBjbGllbnRYL1kgYXZhaWxhYmxlCgkJCWlmICggZXZlbnQucGFnZVggPT0gbnVsbCAmJiBvcmlnaW5hbC5jbGllbnRYICE9IG51bGwgKSB7CgkJCQlldmVudERvYyA9IGV2ZW50LnRhcmdldC5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50OwoJCQkJZG9jID0gZXZlbnREb2MuZG9jdW1lbnRFbGVtZW50OwoJCQkJYm9keSA9IGV2ZW50RG9jLmJvZHk7CgoJCQkJZXZlbnQucGFnZVggPSBvcmlnaW5hbC5jbGllbnRYICsgKCBkb2MgJiYgZG9jLnNjcm9sbExlZnQgfHwgYm9keSAmJiBib2R5LnNjcm9sbExlZnQgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudExlZnQgfHwgYm9keSAmJiBib2R5LmNsaWVudExlZnQgfHwgMCApOwoJCQkJZXZlbnQucGFnZVkgPSBvcmlnaW5hbC5jbGllbnRZICsgKCBkb2MgJiYgZG9jLnNjcm9sbFRvcCAgfHwgYm9keSAmJiBib2R5LnNjcm9sbFRvcCAgfHwgMCApIC0gKCBkb2MgJiYgZG9jLmNsaWVudFRvcCAgfHwgYm9keSAmJiBib2R5LmNsaWVudFRvcCAgfHwgMCApOwoJCQl9CgoJCQkvLyBBZGQgcmVsYXRlZFRhcmdldCwgaWYgbmVjZXNzYXJ5CgkJCWlmICggIWV2ZW50LnJlbGF0ZWRUYXJnZXQgJiYgZnJvbUVsZW1lbnQgKSB7CgkJCQlldmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbUVsZW1lbnQgPT09IGV2ZW50LnRhcmdldCA/IG9yaWdpbmFsLnRvRWxlbWVudCA6IGZyb21FbGVtZW50OwoJCQl9CgoJCQkvLyBBZGQgd2hpY2ggZm9yIGNsaWNrOiAxID09PSBsZWZ0OyAyID09PSBtaWRkbGU7IDMgPT09IHJpZ2h0CgkJCS8vIE5vdGU6IGJ1dHRvbiBpcyBub3Qgbm9ybWFsaXplZCwgc28gZG9uJ3QgdXNlIGl0CgkJCWlmICggIWV2ZW50LndoaWNoICYmIGJ1dHRvbiAhPT0gdW5kZWZpbmVkICkgewoJCQkJZXZlbnQud2hpY2ggPSAoIGJ1dHRvbiAmIDEgPyAxIDogKCBidXR0b24gJiAyID8gMyA6ICggYnV0dG9uICYgNCA/IDIgOiAwICkgKSApOwoJCQl9CgoJCQlyZXR1cm4gZXZlbnQ7CgkJfQoJfSwKCglmaXg6IGZ1bmN0aW9uKCBldmVudCApIHsKCQlpZiAoIGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdICkgewoJCQlyZXR1cm4gZXZlbnQ7CgkJfQoKCQkvLyBDcmVhdGUgYSB3cml0YWJsZSBjb3B5IG9mIHRoZSBldmVudCBvYmplY3QgYW5kIG5vcm1hbGl6ZSBzb21lIHByb3BlcnRpZXMKCQl2YXIgaSwgcHJvcCwKCQkJb3JpZ2luYWxFdmVudCA9IGV2ZW50LAoJCQlmaXhIb29rID0galF1ZXJ5LmV2ZW50LmZpeEhvb2tzWyBldmVudC50eXBlIF0gfHwge30sCgkJCWNvcHkgPSBmaXhIb29rLnByb3BzID8gdGhpcy5wcm9wcy5jb25jYXQoIGZpeEhvb2sucHJvcHMgKSA6IHRoaXMucHJvcHM7CgoJCWV2ZW50ID0galF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7CgoJCWZvciAoIGkgPSBjb3B5Lmxlbmd0aDsgaTsgKSB7CgkJCXByb3AgPSBjb3B5WyAtLWkgXTsKCQkJZXZlbnRbIHByb3AgXSA9IG9yaWdpbmFsRXZlbnRbIHByb3AgXTsKCQl9CgoJCS8vIEZpeCB0YXJnZXQgcHJvcGVydHksIGlmIG5lY2Vzc2FyeSAoIzE5MjUsIElFIDYvNy84ICYgU2FmYXJpMikKCQlpZiAoICFldmVudC50YXJnZXQgKSB7CgkJCWV2ZW50LnRhcmdldCA9IG9yaWdpbmFsRXZlbnQuc3JjRWxlbWVudCB8fCBkb2N1bWVudDsKCQl9CgoJCS8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCBTYWZhcmkpCgkJaWYgKCBldmVudC50YXJnZXQubm9kZVR5cGUgPT09IDMgKSB7CgkJCWV2ZW50LnRhcmdldCA9IGV2ZW50LnRhcmdldC5wYXJlbnROb2RlOwoJCX0KCgkJLy8gRm9yIG1vdXNlL2tleSBldmVudHMsIG1ldGFLZXk9PWZhbHNlIGlmIGl0J3MgdW5kZWZpbmVkICgjMzM2OCwgIzExMzI4OyBJRTYvNy84KQoJCWV2ZW50Lm1ldGFLZXkgPSAhIWV2ZW50Lm1ldGFLZXk7CgoJCXJldHVybiBmaXhIb29rLmZpbHRlcj8gZml4SG9vay5maWx0ZXIoIGV2ZW50LCBvcmlnaW5hbEV2ZW50ICkgOiBldmVudDsKCX0sCgoJc3BlY2lhbDogewoJCWxvYWQ6IHsKCQkJLy8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZAoJCQlub0J1YmJsZTogdHJ1ZQoJCX0sCgoJCWZvY3VzOiB7CgkJCWRlbGVnYXRlVHlwZTogImZvY3VzaW4iCgkJfSwKCQlibHVyOiB7CgkJCWRlbGVnYXRlVHlwZTogImZvY3Vzb3V0IgoJCX0sCgoJCWJlZm9yZXVubG9hZDogewoJCQlzZXR1cDogZnVuY3Rpb24oIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgewoJCQkJLy8gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgc3BlY2lhbCBjYXNlIG9uIHdpbmRvd3MKCQkJCWlmICggalF1ZXJ5LmlzV2luZG93KCB0aGlzICkgKSB7CgkJCQkJdGhpcy5vbmJlZm9yZXVubG9hZCA9IGV2ZW50SGFuZGxlOwoJCQkJfQoJCQl9LAoKCQkJdGVhcmRvd246IGZ1bmN0aW9uKCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApIHsKCQkJCWlmICggdGhpcy5vbmJlZm9yZXVubG9hZCA9PT0gZXZlbnRIYW5kbGUgKSB7CgkJCQkJdGhpcy5vbmJlZm9yZXVubG9hZCA9IG51bGw7CgkJCQl9CgkJCX0KCQl9Cgl9LAoKCXNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQsIGJ1YmJsZSApIHsKCQkvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmUuCgkJLy8gRmFrZSBvcmlnaW5hbEV2ZW50IHRvIGF2b2lkIGRvbm9yJ3Mgc3RvcFByb3BhZ2F0aW9uLCBidXQgaWYgdGhlCgkJLy8gc2ltdWxhdGVkIGV2ZW50IHByZXZlbnRzIGRlZmF1bHQgdGhlbiB3ZSBkbyB0aGUgc2FtZSBvbiB0aGUgZG9ub3IuCgkJdmFyIGUgPSBqUXVlcnkuZXh0ZW5kKAoJCQluZXcgalF1ZXJ5LkV2ZW50KCksCgkJCWV2ZW50LAoJCQl7IHR5cGU6IHR5cGUsCgkJCQlpc1NpbXVsYXRlZDogdHJ1ZSwKCQkJCW9yaWdpbmFsRXZlbnQ6IHt9CgkJCX0KCQkpOwoJCWlmICggYnViYmxlICkgewoJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApOwoJCX0gZWxzZSB7CgkJCWpRdWVyeS5ldmVudC5kaXNwYXRjaC5jYWxsKCBlbGVtLCBlICk7CgkJfQoJCWlmICggZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHsKCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQl9Cgl9Cn07CgovLyBTb21lIHBsdWdpbnMgYXJlIHVzaW5nLCBidXQgaXQncyB1bmRvY3VtZW50ZWQvZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLgovLyBUaGUgMS43IHNwZWNpYWwgZXZlbnQgaW50ZXJmYWNlIHNob3VsZCBwcm92aWRlIGFsbCB0aGUgaG9va3MgbmVlZGVkIG5vdy4KalF1ZXJ5LmV2ZW50LmhhbmRsZSA9IGpRdWVyeS5ldmVudC5kaXNwYXRjaDsKCmpRdWVyeS5yZW1vdmVFdmVudCA9IGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIgPwoJZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHsKCQlpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHsKCQkJZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUsIGZhbHNlICk7CgkJfQoJfSA6CglmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkgewoJCXZhciBuYW1lID0gIm9uIiArIHR5cGU7CgoJCWlmICggZWxlbS5kZXRhY2hFdmVudCApIHsKCgkJCS8vICM4NTQ1LCAjNzA1NCwgcHJldmVudGluZyBtZW1vcnkgbGVha3MgZm9yIGN1c3RvbSBldmVudHMgaW4gSUU2LTgKCQkJLy8gZGV0YWNoRXZlbnQgbmVlZGVkIHByb3BlcnR5IG9uIGVsZW1lbnQsIGJ5IG5hbWUgb2YgdGhhdCBldmVudCwgdG8gcHJvcGVybHkgZXhwb3NlIGl0IHRvIEdDCgkJCWlmICggdHlwZW9mIGVsZW1bIG5hbWUgXSA9PT0gInVuZGVmaW5lZCIgKSB7CgkJCQllbGVtWyBuYW1lIF0gPSBudWxsOwoJCQl9CgoJCQllbGVtLmRldGFjaEV2ZW50KCBuYW1lLCBoYW5kbGUgKTsKCQl9Cgl9OwoKalF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7CgkvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmQKCWlmICggISh0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50KSApIHsKCQlyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApOwoJfQoKCS8vIEV2ZW50IG9iamVjdAoJaWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7CgkJdGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjOwoJCXRoaXMudHlwZSA9IHNyYy50eXBlOwoKCQkvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZAoJCS8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLgoJCXRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gKCBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fCBzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlIHx8CgkJCXNyYy5nZXRQcmV2ZW50RGVmYXVsdCAmJiBzcmMuZ2V0UHJldmVudERlZmF1bHQoKSApID8gcmV0dXJuVHJ1ZSA6IHJldHVybkZhbHNlOwoKCS8vIEV2ZW50IHR5cGUKCX0gZWxzZSB7CgkJdGhpcy50eXBlID0gc3JjOwoJfQoKCS8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0CglpZiAoIHByb3BzICkgewoJCWpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7Cgl9CgoJLy8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmUKCXRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgalF1ZXJ5Lm5vdygpOwoKCS8vIE1hcmsgaXQgYXMgZml4ZWQKCXRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlOwp9OwoKZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7CglyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHsKCXJldHVybiB0cnVlOwp9CgovLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmcKLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sCmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7CglwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7CgkJdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlOwoKCQl2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDsKCQlpZiAoICFlICkgewoJCQlyZXR1cm47CgkJfQoKCQkvLyBpZiBwcmV2ZW50RGVmYXVsdCBleGlzdHMgcnVuIGl0IG9uIHRoZSBvcmlnaW5hbCBldmVudAoJCWlmICggZS5wcmV2ZW50RGVmYXVsdCApIHsKCQkJZS5wcmV2ZW50RGVmYXVsdCgpOwoKCQkvLyBvdGhlcndpc2Ugc2V0IHRoZSByZXR1cm5WYWx1ZSBwcm9wZXJ0eSBvZiB0aGUgb3JpZ2luYWwgZXZlbnQgdG8gZmFsc2UgKElFKQoJCX0gZWxzZSB7CgkJCWUucmV0dXJuVmFsdWUgPSBmYWxzZTsKCQl9Cgl9LAoJc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHsKCQl0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTsKCgkJdmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7CgkJaWYgKCAhZSApIHsKCQkJcmV0dXJuOwoJCX0KCQkvLyBpZiBzdG9wUHJvcGFnYXRpb24gZXhpc3RzIHJ1biBpdCBvbiB0aGUgb3JpZ2luYWwgZXZlbnQKCQlpZiAoIGUuc3RvcFByb3BhZ2F0aW9uICkgewoJCQllLnN0b3BQcm9wYWdhdGlvbigpOwoJCX0KCQkvLyBvdGhlcndpc2Ugc2V0IHRoZSBjYW5jZWxCdWJibGUgcHJvcGVydHkgb2YgdGhlIG9yaWdpbmFsIGV2ZW50IHRvIHRydWUgKElFKQoJCWUuY2FuY2VsQnViYmxlID0gdHJ1ZTsKCX0sCglzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkgewoJCXRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlOwoJCXRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7Cgl9LAoJaXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSwKCWlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSwKCWlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZQp9OwoKLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzCmpRdWVyeS5lYWNoKHsKCW1vdXNlZW50ZXI6ICJtb3VzZW92ZXIiLAoJbW91c2VsZWF2ZTogIm1vdXNlb3V0Igp9LCBmdW5jdGlvbiggb3JpZywgZml4ICkgewoJalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHsKCQlkZWxlZ2F0ZVR5cGU6IGZpeCwKCQliaW5kVHlwZTogZml4LAoKCQloYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHsKCQkJdmFyIHJldCwKCQkJCXRhcmdldCA9IHRoaXMsCgkJCQlyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCwKCQkJCWhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iaiwKCQkJCXNlbGVjdG9yID0gaGFuZGxlT2JqLnNlbGVjdG9yOwoKCQkJLy8gRm9yIG1vdXNlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LgoJCQkvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvdwoJCQlpZiAoICFyZWxhdGVkIHx8IChyZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkpICkgewoJCQkJZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTsKCQkJCXJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJCWV2ZW50LnR5cGUgPSBmaXg7CgkJCX0KCQkJcmV0dXJuIHJldDsKCQl9Cgl9Owp9KTsKCi8vIElFIHN1Ym1pdCBkZWxlZ2F0aW9uCmlmICggIWpRdWVyeS5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXMgKSB7CgoJalF1ZXJ5LmV2ZW50LnNwZWNpYWwuc3VibWl0ID0gewoJCXNldHVwOiBmdW5jdGlvbigpIHsKCQkJLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3JtIHN1Ym1pdCBldmVudHMKCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQkvLyBMYXp5LWFkZCBhIHN1Ym1pdCBoYW5kbGVyIHdoZW4gYSBkZXNjZW5kYW50IGZvcm0gbWF5IHBvdGVudGlhbGx5IGJlIHN1Ym1pdHRlZAoJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IiwgZnVuY3Rpb24oIGUgKSB7CgkJCQkvLyBOb2RlIG5hbWUgY2hlY2sgYXZvaWRzIGEgVk1MLXJlbGF0ZWQgY3Jhc2ggaW4gSUUgKCM5ODA3KQoJCQkJdmFyIGVsZW0gPSBlLnRhcmdldCwKCQkJCQlmb3JtID0galF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiaW5wdXQiICkgfHwgalF1ZXJ5Lm5vZGVOYW1lKCBlbGVtLCAiYnV0dG9uIiApID8gZWxlbS5mb3JtIDogdW5kZWZpbmVkOwoJCQkJaWYgKCBmb3JtICYmICFqUXVlcnkuX2RhdGEoIGZvcm0sICJfc3VibWl0X2F0dGFjaGVkIiApICkgewoJCQkJCWpRdWVyeS5ldmVudC5hZGQoIGZvcm0sICJzdWJtaXQuX3N1Ym1pdCIsIGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCQkJZXZlbnQuX3N1Ym1pdF9idWJibGUgPSB0cnVlOwoJCQkJCX0pOwoJCQkJCWpRdWVyeS5fZGF0YSggZm9ybSwgIl9zdWJtaXRfYXR0YWNoZWQiLCB0cnVlICk7CgkJCQl9CgkJCX0pOwoJCQkvLyByZXR1cm4gdW5kZWZpbmVkIHNpbmNlIHdlIGRvbid0IG5lZWQgYW4gZXZlbnQgbGlzdGVuZXIKCQl9LAoKCQlwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHsKCQkJLy8gSWYgZm9ybSB3YXMgc3VibWl0dGVkIGJ5IHRoZSB1c2VyLCBidWJibGUgdGhlIGV2ZW50IHVwIHRoZSB0cmVlCgkJCWlmICggZXZlbnQuX3N1Ym1pdF9idWJibGUgKSB7CgkJCQlkZWxldGUgZXZlbnQuX3N1Ym1pdF9idWJibGU7CgkJCQlpZiAoIHRoaXMucGFyZW50Tm9kZSAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgewoJCQkJCWpRdWVyeS5ldmVudC5zaW11bGF0ZSggInN1Ym1pdCIsIHRoaXMucGFyZW50Tm9kZSwgZXZlbnQsIHRydWUgKTsKCQkJCX0KCQkJfQoJCX0sCgoJCXRlYXJkb3duOiBmdW5jdGlvbigpIHsKCQkJLy8gT25seSBuZWVkIHRoaXMgZm9yIGRlbGVnYXRlZCBmb3JtIHN1Ym1pdCBldmVudHMKCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRoaXMsICJmb3JtIiApICkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgoJCQkvLyBSZW1vdmUgZGVsZWdhdGVkIGhhbmRsZXJzOyBjbGVhbkRhdGEgZXZlbnR1YWxseSByZWFwcyBzdWJtaXQgaGFuZGxlcnMgYXR0YWNoZWQgYWJvdmUKCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5fc3VibWl0IiApOwoJCX0KCX07Cn0KCi8vIElFIGNoYW5nZSBkZWxlZ2F0aW9uIGFuZCBjaGVja2JveC9yYWRpbyBmaXgKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuY2hhbmdlQnViYmxlcyApIHsKCglqUXVlcnkuZXZlbnQuc3BlY2lhbC5jaGFuZ2UgPSB7CgoJCXNldHVwOiBmdW5jdGlvbigpIHsKCgkJCWlmICggcmZvcm1FbGVtcy50ZXN0KCB0aGlzLm5vZGVOYW1lICkgKSB7CgkJCQkvLyBJRSBkb2Vzbid0IGZpcmUgY2hhbmdlIG9uIGEgY2hlY2svcmFkaW8gdW50aWwgYmx1cjsgdHJpZ2dlciBpdCBvbiBjbGljawoJCQkJLy8gYWZ0ZXIgYSBwcm9wZXJ0eWNoYW5nZS4gRWF0IHRoZSBibHVyLWNoYW5nZSBpbiBzcGVjaWFsLmNoYW5nZS5oYW5kbGUuCgkJCQkvLyBUaGlzIHN0aWxsIGZpcmVzIG9uY2hhbmdlIGEgc2Vjb25kIHRpbWUgZm9yIGNoZWNrL3JhZGlvIGFmdGVyIGJsdXIuCgkJCQlpZiAoIHRoaXMudHlwZSA9PT0gImNoZWNrYm94IiB8fCB0aGlzLnR5cGUgPT09ICJyYWRpbyIgKSB7CgkJCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgInByb3BlcnR5Y2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCQkJCWlmICggZXZlbnQub3JpZ2luYWxFdmVudC5wcm9wZXJ0eU5hbWUgPT09ICJjaGVja2VkIiApIHsKCQkJCQkJCXRoaXMuX2p1c3RfY2hhbmdlZCA9IHRydWU7CgkJCQkJCX0KCQkJCQl9KTsKCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCAiY2xpY2suX2NoYW5nZSIsIGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCQkJaWYgKCB0aGlzLl9qdXN0X2NoYW5nZWQgJiYgIWV2ZW50LmlzVHJpZ2dlciApIHsKCQkJCQkJCXRoaXMuX2p1c3RfY2hhbmdlZCA9IGZhbHNlOwoJCQkJCQl9CgkJCQkJCS8vIEFsbG93IHRyaWdnZXJlZCwgc2ltdWxhdGVkIGNoYW5nZSBldmVudHMgKCMxMTUwMCkKCQkJCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdlIiwgdGhpcywgZXZlbnQsIHRydWUgKTsKCQkJCQl9KTsKCQkJCX0KCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkvLyBEZWxlZ2F0ZWQgZXZlbnQ7IGxhenktYWRkIGEgY2hhbmdlIGhhbmRsZXIgb24gZGVzY2VuZGFudCBpbnB1dHMKCQkJalF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgImJlZm9yZWFjdGl2YXRlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZSApIHsKCQkJCXZhciBlbGVtID0gZS50YXJnZXQ7CgoJCQkJaWYgKCByZm9ybUVsZW1zLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJiAhalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5nZV9hdHRhY2hlZCIgKSApIHsKCQkJCQlqUXVlcnkuZXZlbnQuYWRkKCBlbGVtLCAiY2hhbmdlLl9jaGFuZ2UiLCBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCQkJCWlmICggdGhpcy5wYXJlbnROb2RlICYmICFldmVudC5pc1NpbXVsYXRlZCAmJiAhZXZlbnQuaXNUcmlnZ2VyICkgewoJCQkJCQkJalF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCAiY2hhbmdlIiwgdGhpcy5wYXJlbnROb2RlLCBldmVudCwgdHJ1ZSApOwoJCQkJCQl9CgkJCQkJfSk7CgkJCQkJalF1ZXJ5Ll9kYXRhKCBlbGVtLCAiX2NoYW5nZV9hdHRhY2hlZCIsIHRydWUgKTsKCQkJCX0KCQkJfSk7CgkJfSwKCgkJaGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCXZhciBlbGVtID0gZXZlbnQudGFyZ2V0OwoKCQkJLy8gU3dhbGxvdyBuYXRpdmUgY2hhbmdlIGV2ZW50cyBmcm9tIGNoZWNrYm94L3JhZGlvLCB3ZSBhbHJlYWR5IHRyaWdnZXJlZCB0aGVtIGFib3ZlCgkJCWlmICggdGhpcyAhPT0gZWxlbSB8fCBldmVudC5pc1NpbXVsYXRlZCB8fCBldmVudC5pc1RyaWdnZXIgfHwgKGVsZW0udHlwZSAhPT0gInJhZGlvIiAmJiBlbGVtLnR5cGUgIT09ICJjaGVja2JveCIpICkgewoJCQkJcmV0dXJuIGV2ZW50LmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJfQoJCX0sCgoJCXRlYXJkb3duOiBmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgIi5fY2hhbmdlIiApOwoKCQkJcmV0dXJuICFyZm9ybUVsZW1zLnRlc3QoIHRoaXMubm9kZU5hbWUgKTsKCQl9Cgl9Owp9CgovLyBDcmVhdGUgImJ1YmJsaW5nIiBmb2N1cyBhbmQgYmx1ciBldmVudHMKaWYgKCAhalF1ZXJ5LnN1cHBvcnQuZm9jdXNpbkJ1YmJsZXMgKSB7CglqUXVlcnkuZWFjaCh7IGZvY3VzOiAiZm9jdXNpbiIsIGJsdXI6ICJmb2N1c291dCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHsKCgkJLy8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dAoJCXZhciBhdHRhY2hlcyA9IDAsCgkJCWhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7CgkJCQlqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApLCB0cnVlICk7CgkJCX07CgoJCWpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHsKCQkJc2V0dXA6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBhdHRhY2hlcysrID09PSAwICkgewoJCQkJCWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKCQkJCX0KCQkJfSwKCQkJdGVhcmRvd246IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCAtLWF0dGFjaGVzID09PSAwICkgewoJCQkJCWRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTsKCQkJCX0KCQkJfQoJCX07Cgl9KTsKfQoKalF1ZXJ5LmZuLmV4dGVuZCh7CgoJb246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAvKklOVEVSTkFMKi8gb25lICkgewoJCXZhciBvcmlnRm4sIHR5cGU7CgoJCS8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVycwoJCWlmICggdHlwZW9mIHR5cGVzID09PSAib2JqZWN0IiApIHsKCQkJLy8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhICkKCQkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgeyAvLyAmJiBzZWxlY3RvciAhPSBudWxsCgkJCQkvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApCgkJCQlkYXRhID0gZGF0YSB8fCBzZWxlY3RvcjsKCQkJCXNlbGVjdG9yID0gdW5kZWZpbmVkOwoJCQl9CgkJCWZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CgkJCQl0aGlzLm9uKCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7CgkJCX0KCQkJcmV0dXJuIHRoaXM7CgkJfQoKCQlpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkgewoJCQkvLyAoIHR5cGVzLCBmbiApCgkJCWZuID0gc2VsZWN0b3I7CgkJCWRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDsKCQl9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkgewoJCQlpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgKSB7CgkJCQkvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKQoJCQkJZm4gPSBkYXRhOwoJCQkJZGF0YSA9IHVuZGVmaW5lZDsKCQkJfSBlbHNlIHsKCQkJCS8vICggdHlwZXMsIGRhdGEsIGZuICkKCQkJCWZuID0gZGF0YTsKCQkJCWRhdGEgPSBzZWxlY3RvcjsKCQkJCXNlbGVjdG9yID0gdW5kZWZpbmVkOwoJCQl9CgkJfQoJCWlmICggZm4gPT09IGZhbHNlICkgewoJCQlmbiA9IHJldHVybkZhbHNlOwoJCX0gZWxzZSBpZiAoICFmbiApIHsKCQkJcmV0dXJuIHRoaXM7CgkJfQoKCQlpZiAoIG9uZSA9PT0gMSApIHsKCQkJb3JpZ0ZuID0gZm47CgkJCWZuID0gZnVuY3Rpb24oIGV2ZW50ICkgewoJCQkJLy8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvCgkJCQlqUXVlcnkoKS5vZmYoIGV2ZW50ICk7CgkJCQlyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCQkJfTsKCQkJLy8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm4KCQkJZm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7CgkJfQoJCXJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkgewoJCQlqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7CgkJfSk7Cgl9LAoJb25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHsKCQlyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApOwoJfSwKCW9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7CgkJdmFyIGhhbmRsZU9iaiwgdHlwZTsKCQlpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHsKCQkJLy8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudAoJCQloYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7CgkJCWpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoCgkJCQloYW5kbGVPYmoubmFtZXNwYWNlID8gaGFuZGxlT2JqLm9yaWdUeXBlICsgIi4iICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6IGhhbmRsZU9iai5vcmlnVHlwZSwKCQkJCWhhbmRsZU9iai5zZWxlY3RvciwKCQkJCWhhbmRsZU9iai5oYW5kbGVyCgkJCSk7CgkJCXJldHVybiB0aGlzOwoJCX0KCQlpZiAoIHR5cGVvZiB0eXBlcyA9PT0gIm9iamVjdCIgKSB7CgkJCS8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApCgkJCWZvciAoIHR5cGUgaW4gdHlwZXMgKSB7CgkJCQl0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTsKCQkJfQoJCQlyZXR1cm4gdGhpczsKCQl9CgkJaWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSAiZnVuY3Rpb24iICkgewoJCQkvLyAoIHR5cGVzIFssIGZuXSApCgkJCWZuID0gc2VsZWN0b3I7CgkJCXNlbGVjdG9yID0gdW5kZWZpbmVkOwoJCX0KCQlpZiAoIGZuID09PSBmYWxzZSApIHsKCQkJZm4gPSByZXR1cm5GYWxzZTsKCQl9CgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApOwoJCX0pOwoJfSwKCgliaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkgewoJCXJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTsKCX0sCgl1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7CgkJcmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTsKCX0sCgoJbGl2ZTogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHsKCQlqUXVlcnkoIHRoaXMuY29udGV4dCApLm9uKCB0eXBlcywgdGhpcy5zZWxlY3RvciwgZGF0YSwgZm4gKTsKCQlyZXR1cm4gdGhpczsKCX0sCglkaWU6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7CgkJalF1ZXJ5KCB0aGlzLmNvbnRleHQgKS5vZmYoIHR5cGVzLCB0aGlzLnNlbGVjdG9yIHx8ICIqKiIsIGZuICk7CgkJcmV0dXJuIHRoaXM7Cgl9LAoKCWRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHsKCQlyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApOwoJfSwKCXVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkgewoJCS8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dICkKCQlyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IHRoaXMub2ZmKCBzZWxlY3RvciwgIioqIiApIDogdGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCAiKioiLCBmbiApOwoJfSwKCgl0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQlqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApOwoJCX0pOwoJfSwKCXRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHsKCQlpZiAoIHRoaXNbMF0gKSB7CgkJCXJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpc1swXSwgdHJ1ZSApOwoJCX0KCX0sCgoJdG9nZ2xlOiBmdW5jdGlvbiggZm4gKSB7CgkJLy8gU2F2ZSByZWZlcmVuY2UgdG8gYXJndW1lbnRzIGZvciBhY2Nlc3MgaW4gY2xvc3VyZQoJCXZhciBhcmdzID0gYXJndW1lbnRzLAoJCQlndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrLAoJCQlpID0gMCwKCQkJdG9nZ2xlciA9IGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCS8vIEZpZ3VyZSBvdXQgd2hpY2ggZnVuY3Rpb24gdG8gZXhlY3V0ZQoJCQkJdmFyIGxhc3RUb2dnbGUgPSAoIGpRdWVyeS5fZGF0YSggdGhpcywgImxhc3RUb2dnbGUiICsgZm4uZ3VpZCApIHx8IDAgKSAlIGk7CgkJCQlqUXVlcnkuX2RhdGEoIHRoaXMsICJsYXN0VG9nZ2xlIiArIGZuLmd1aWQsIGxhc3RUb2dnbGUgKyAxICk7CgoJCQkJLy8gTWFrZSBzdXJlIHRoYXQgY2xpY2tzIHN0b3AKCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgoJCQkJLy8gYW5kIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uCgkJCQlyZXR1cm4gYXJnc1sgbGFzdFRvZ2dsZSBdLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSB8fCBmYWxzZTsKCQkJfTsKCgkJLy8gbGluayBhbGwgdGhlIGZ1bmN0aW9ucywgc28gYW55IG9mIHRoZW0gY2FuIHVuYmluZCB0aGlzIGNsaWNrIGhhbmRsZXIKCQl0b2dnbGVyLmd1aWQgPSBndWlkOwoJCXdoaWxlICggaSA8IGFyZ3MubGVuZ3RoICkgewoJCQlhcmdzWyBpKysgXS5ndWlkID0gZ3VpZDsKCQl9CgoJCXJldHVybiB0aGlzLmNsaWNrKCB0b2dnbGVyICk7Cgl9LAoKCWhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHsKCQlyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTsKCX0KfSk7CgpqUXVlcnkuZWFjaCggKCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgbG9hZCByZXNpemUgc2Nyb2xsIHVubG9hZCBjbGljayBkYmxjbGljayAiICsKCSJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSAiICsKCSJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGVycm9yIGNvbnRleHRtZW51Iikuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CgoJLy8gSGFuZGxlIGV2ZW50IGJpbmRpbmcKCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkgewoJCWlmICggZm4gPT0gbnVsbCApIHsKCQkJZm4gPSBkYXRhOwoJCQlkYXRhID0gbnVsbDsKCQl9CgoJCXJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/CgkJCXRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOgoJCQl0aGlzLnRyaWdnZXIoIG5hbWUgKTsKCX07CgoJaWYgKCBya2V5RXZlbnQudGVzdCggbmFtZSApICkgewoJCWpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50LmtleUhvb2tzOwoJfQoKCWlmICggcm1vdXNlRXZlbnQudGVzdCggbmFtZSApICkgewoJCWpRdWVyeS5ldmVudC5maXhIb29rc1sgbmFtZSBdID0galF1ZXJ5LmV2ZW50Lm1vdXNlSG9va3M7Cgl9Cn0pOwovKiENCiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lDQogKiBDb3B5cmlnaHQgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzDQogKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UNCiAqIGh0dHA6Ly9zaXp6bGVqcy5jb20vDQogKi8NCihmdW5jdGlvbiggd2luZG93LCB1bmRlZmluZWQgKSB7DQoNCnZhciBjYWNoZWRydW5zLA0KCWFzc2VydEdldElkTm90TmFtZSwNCglFeHByLA0KCWdldFRleHQsDQoJaXNYTUwsDQoJY29udGFpbnMsDQoJY29tcGlsZSwNCglzb3J0T3JkZXIsDQoJaGFzRHVwbGljYXRlLA0KCW91dGVybW9zdENvbnRleHQsDQoNCgliYXNlSGFzRHVwbGljYXRlID0gdHJ1ZSwNCglzdHJ1bmRlZmluZWQgPSAidW5kZWZpbmVkIiwNCg0KCWV4cGFuZG8gPSAoICJzaXpjYWNoZSIgKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggIi4iLCAiIiApLA0KDQoJVG9rZW4gPSBTdHJpbmcsDQoJZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQsDQoJZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwNCglkaXJydW5zID0gMCwNCglkb25lID0gMCwNCglwb3AgPSBbXS5wb3AsDQoJcHVzaCA9IFtdLnB1c2gsDQoJc2xpY2UgPSBbXS5zbGljZSwNCgkvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgaWYgYSBuYXRpdmUgb25lIGlzIHVuYXZhaWxhYmxlDQoJaW5kZXhPZiA9IFtdLmluZGV4T2YgfHwgZnVuY3Rpb24oIGVsZW0gKSB7DQoJCXZhciBpID0gMCwNCgkJCWxlbiA9IHRoaXMubGVuZ3RoOw0KCQlmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsNCgkJCWlmICggdGhpc1tpXSA9PT0gZWxlbSApIHsNCgkJCQlyZXR1cm4gaTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gLTE7DQoJfSwNCg0KCS8vIEF1Z21lbnQgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlDQoJbWFya0Z1bmN0aW9uID0gZnVuY3Rpb24oIGZuLCB2YWx1ZSApIHsNCgkJZm5bIGV4cGFuZG8gXSA9IHZhbHVlID09IG51bGwgfHwgdmFsdWU7DQoJCXJldHVybiBmbjsNCgl9LA0KDQoJY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbigpIHsNCgkJdmFyIGNhY2hlID0ge30sDQoJCQlrZXlzID0gW107DQoNCgkJcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbigga2V5LCB2YWx1ZSApIHsNCgkJCS8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllcw0KCQkJaWYgKCBrZXlzLnB1c2goIGtleSApID4gRXhwci5jYWNoZUxlbmd0aCApIHsNCgkJCQlkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdOw0KCQkJfQ0KDQoJCQkvLyBSZXRyaWV2ZSB3aXRoIChrZXkgKyAiICIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KQ0KCQkJcmV0dXJuIChjYWNoZVsga2V5ICsgIiAiIF0gPSB2YWx1ZSk7DQoJCX0sIGNhY2hlICk7DQoJfSwNCg0KCWNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLA0KCXRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLA0KCWNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLA0KDQoJLy8gUmVnZXgNCg0KCS8vIFdoaXRlc3BhY2UgY2hhcmFjdGVycyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZQ0KCXdoaXRlc3BhY2UgPSAiW1xceDIwXFx0XFxyXFxuXFxmXSIsDQoJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zeW50YXgvI2NoYXJhY3RlcnMNCgljaGFyYWN0ZXJFbmNvZGluZyA9ICIoPzpcXFxcLnxbLVxcd118W15cXHgwMC1cXHhhMF0pKyIsDQoNCgkvLyBMb29zZWx5IG1vZGVsZWQgb24gQ1NTIGlkZW50aWZpZXIgY2hhcmFjdGVycw0KCS8vIEFuIHVucXVvdGVkIHZhbHVlIHNob3VsZCBiZSBhIENTUyBpZGVudGlmaWVyIChodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9ycykNCgkvLyBQcm9wZXIgc3ludGF4OiBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjdmFsdWUtZGVmLWlkZW50aWZpZXINCglpZGVudGlmaWVyID0gY2hhcmFjdGVyRW5jb2RpbmcucmVwbGFjZSggInciLCAidyMiICksDQoNCgkvLyBBY2NlcHRhYmxlIG9wZXJhdG9ycyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnMNCglvcGVyYXRvcnMgPSAiKFsqXiR8IX5dPz0pIiwNCglhdHRyaWJ1dGVzID0gIlxcWyIgKyB3aGl0ZXNwYWNlICsgIiooIiArIGNoYXJhY3RlckVuY29kaW5nICsgIikiICsgd2hpdGVzcGFjZSArDQoJCSIqKD86IiArIG9wZXJhdG9ycyArIHdoaXRlc3BhY2UgKyAiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIgKyBpZGVudGlmaWVyICsgIil8KXwpIiArIHdoaXRlc3BhY2UgKyAiKlxcXSIsDQoNCgkvLyBQcmVmZXIgYXJndW1lbnRzIG5vdCBpbiBwYXJlbnMvYnJhY2tldHMsDQoJLy8gICB0aGVuIGF0dHJpYnV0ZSBzZWxlY3RvcnMgYW5kIG5vbi1wc2V1ZG9zIChkZW5vdGVkIGJ5IDopLA0KCS8vICAgdGhlbiBhbnl0aGluZyBlbHNlDQoJLy8gVGhlc2UgcHJlZmVyZW5jZXMgYXJlIGhlcmUgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzDQoJLy8gICBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBQU0VVRE8gcHJlRmlsdGVyDQoJcHNldWRvcyA9ICI6KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiICsgYXR0cmlidXRlcyArICIpfFteOl18XFxcXC4pKnwuKikpXFwpfCkiLA0KDQoJLy8gRm9yIG1hdGNoRXhwci5QT1MgYW5kIG1hdGNoRXhwci5uZWVkc0NvbnRleHQNCglwb3MgPSAiOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiICsgd2hpdGVzcGFjZSArDQoJCSIqKCg/Oi1cXGQpP1xcZCopIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpKD89W14tXXwkKSIsDQoNCgkvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyDQoJcnRyaW0gPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIit8KCg/Ol58W15cXFxcXSkoPzpcXFxcLikqKSIgKyB3aGl0ZXNwYWNlICsgIiskIiwgImciICksDQoNCglyY29tbWEgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiosIiArIHdoaXRlc3BhY2UgKyAiKiIgKSwNCglyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCAiXiIgKyB3aGl0ZXNwYWNlICsgIiooW1xceDIwXFx0XFxyXFxuXFxmPit+XSkiICsgd2hpdGVzcGFjZSArICIqIiApLA0KCXJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksDQoNCgkvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnMNCglycXVpY2tFeHByID0gL14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLA0KDQoJcm5vdCA9IC9eOm5vdC8sDQoJcnNpYmxpbmcgPSAvW1x4MjBcdFxyXG5cZl0qWyt+XS8sDQoJcmVuZHNXaXRoTm90ID0gLzpub3RcKCQvLA0KDQoJcmhlYWRlciA9IC9oXGQvaSwNCglyaW5wdXRzID0gL2lucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24vaSwNCg0KCXJiYWNrc2xhc2ggPSAvXFwoPyFcXCkvZywNCg0KCW1hdGNoRXhwciA9IHsNCgkJIklEIjogbmV3IFJlZ0V4cCggIl4jKCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpIiApLA0KCQkiQ0xBU1MiOiBuZXcgUmVnRXhwKCAiXlxcLigiICsgY2hhcmFjdGVyRW5jb2RpbmcgKyAiKSIgKSwNCgkJIk5BTUUiOiBuZXcgUmVnRXhwKCAiXlxcW25hbWU9WydcIl0/KCIgKyBjaGFyYWN0ZXJFbmNvZGluZyArICIpWydcIl0/XFxdIiApLA0KCQkiVEFHIjogbmV3IFJlZ0V4cCggIl4oIiArIGNoYXJhY3RlckVuY29kaW5nLnJlcGxhY2UoICJ3IiwgIncqIiApICsgIikiICksDQoJCSJBVFRSIjogbmV3IFJlZ0V4cCggIl4iICsgYXR0cmlidXRlcyApLA0KCQkiUFNFVURPIjogbmV3IFJlZ0V4cCggIl4iICsgcHNldWRvcyApLA0KCQkiUE9TIjogbmV3IFJlZ0V4cCggcG9zLCAiaSIgKSwNCgkJIkNISUxEIjogbmV3IFJlZ0V4cCggIl46KG9ubHl8bnRofGZpcnN0fGxhc3QpLWNoaWxkKD86XFwoIiArIHdoaXRlc3BhY2UgKw0KCQkJIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiICsgd2hpdGVzcGFjZSArICIqKD86KFsrLV18KSIgKyB3aGl0ZXNwYWNlICsNCgkJCSIqKFxcZCspfCkpIiArIHdoaXRlc3BhY2UgKyAiKlxcKXwpIiwgImkiICksDQoJCS8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKQ0KCQkibmVlZHNDb250ZXh0IjogbmV3IFJlZ0V4cCggIl4iICsgd2hpdGVzcGFjZSArICIqWz4rfl18IiArIHBvcywgImkiICkNCgl9LA0KDQoJLy8gU3VwcG9ydA0KDQoJLy8gVXNlZCBmb3IgdGVzdGluZyBzb21ldGhpbmcgb24gYW4gZWxlbWVudA0KCWFzc2VydCA9IGZ1bmN0aW9uKCBmbiApIHsNCgkJdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOw0KDQoJCXRyeSB7DQoJCQlyZXR1cm4gZm4oIGRpdiApOw0KCQl9IGNhdGNoIChlKSB7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0gZmluYWxseSB7DQoJCQkvLyByZWxlYXNlIG1lbW9yeSBpbiBJRQ0KCQkJZGl2ID0gbnVsbDsNCgkJfQ0KCX0sDQoNCgkvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpIHJldHVybnMgb25seSBlbGVtZW50cw0KCWFzc2VydFRhZ05hbWVOb0NvbW1lbnRzID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7DQoJCWRpdi5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIikgKTsNCgkJcmV0dXJuICFkaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGg7DQoJfSksDQoNCgkvLyBDaGVjayBpZiBnZXRBdHRyaWJ1dGUgcmV0dXJucyBub3JtYWxpemVkIGhyZWYgYXR0cmlidXRlcw0KCWFzc2VydEhyZWZOb3ROb3JtYWxpemVkID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7DQoJCWRpdi5pbm5lckhUTUwgPSAiPGEgaHJlZj0nIyc+PC9hPiI7DQoJCXJldHVybiBkaXYuZmlyc3RDaGlsZCAmJiB0eXBlb2YgZGl2LmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlICE9PSBzdHJ1bmRlZmluZWQgJiYNCgkJCWRpdi5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpID09PSAiIyI7DQoJfSksDQoNCgkvLyBDaGVjayBpZiBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZXRyaWV2ZWQgYnkgYXR0cmlidXRlIG5vZGVzDQoJYXNzZXJ0QXR0cmlidXRlcyA9IGFzc2VydChmdW5jdGlvbiggZGl2ICkgew0KCQlkaXYuaW5uZXJIVE1MID0gIjxzZWxlY3Q+PC9zZWxlY3Q+IjsNCgkJdmFyIHR5cGUgPSB0eXBlb2YgZGl2Lmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7DQoJCS8vIElFOCByZXR1cm5zIGEgc3RyaW5nIGZvciBzb21lIGF0dHJpYnV0ZXMgZXZlbiB3aGVuIG5vdCBwcmVzZW50DQoJCXJldHVybiB0eXBlICE9PSAiYm9vbGVhbiIgJiYgdHlwZSAhPT0gInN0cmluZyI7DQoJfSksDQoNCgkvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIGNhbiBiZSB0cnVzdGVkDQoJYXNzZXJ0VXNhYmxlQ2xhc3NOYW1lID0gYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7DQoJCS8vIE9wZXJhIGNhbid0IGZpbmQgYSBzZWNvbmQgY2xhc3NuYW1lIChpbiA5LjYpDQoJCWRpdi5pbm5lckhUTUwgPSAiPGRpdiBjbGFzcz0naGlkZGVuIGUnPjwvZGl2PjxkaXYgY2xhc3M9J2hpZGRlbic+PC9kaXY+IjsNCgkJaWYgKCAhZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgfHwgIWRpdi5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCJlIikubGVuZ3RoICkgew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJLy8gU2FmYXJpIDMuMiBjYWNoZXMgY2xhc3MgYXR0cmlidXRlcyBhbmQgZG9lc24ndCBjYXRjaCBjaGFuZ2VzDQoJCWRpdi5sYXN0Q2hpbGQuY2xhc3NOYW1lID0gImUiOw0KCQlyZXR1cm4gZGl2LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGggPT09IDI7DQoJfSksDQoNCgkvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWUNCgkvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5TmFtZSBwcml2aWxlZ2VzIGZvcm0gY29udHJvbHMgb3IgcmV0dXJucyBlbGVtZW50cyBieSBJRA0KCWFzc2VydFVzYWJsZU5hbWUgPSBhc3NlcnQoZnVuY3Rpb24oIGRpdiApIHsNCgkJLy8gSW5qZWN0IGNvbnRlbnQNCgkJZGl2LmlkID0gZXhwYW5kbyArIDA7DQoJCWRpdi5pbm5lckhUTUwgPSAiPGEgbmFtZT0nIiArIGV4cGFuZG8gKyAiJz48L2E+PGRpdiBuYW1lPSciICsgZXhwYW5kbyArICInPjwvZGl2PiI7DQoJCWRvY0VsZW0uaW5zZXJ0QmVmb3JlKCBkaXYsIGRvY0VsZW0uZmlyc3RDaGlsZCApOw0KDQoJCS8vIFRlc3QNCgkJdmFyIHBhc3MgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSAmJg0KCQkJLy8gYnVnZ3kgYnJvd3NlcnMgd2lsbCByZXR1cm4gZmV3ZXIgdGhhbiB0aGUgY29ycmVjdCAyDQoJCQlkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aCA9PT0gMiArDQoJCQkvLyBidWdneSBicm93c2VycyB3aWxsIHJldHVybiBtb3JlIHRoYW4gdGhlIGNvcnJlY3QgMA0KCQkJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKyAwICkubGVuZ3RoOw0KCQlhc3NlcnRHZXRJZE5vdE5hbWUgPSAhZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIGV4cGFuZG8gKTsNCg0KCQkvLyBDbGVhbnVwDQoJCWRvY0VsZW0ucmVtb3ZlQ2hpbGQoIGRpdiApOw0KDQoJCXJldHVybiBwYXNzOw0KCX0pOw0KDQovLyBJZiBzbGljZSBpcyBub3QgYXZhaWxhYmxlLCBwcm92aWRlIGEgYmFja3VwDQp0cnkgew0KCXNsaWNlLmNhbGwoIGRvY0VsZW0uY2hpbGROb2RlcywgMCApWzBdLm5vZGVUeXBlOw0KfSBjYXRjaCAoIGUgKSB7DQoJc2xpY2UgPSBmdW5jdGlvbiggaSApIHsNCgkJdmFyIGVsZW0sDQoJCQlyZXN1bHRzID0gW107DQoJCWZvciAoIDsgKGVsZW0gPSB0aGlzW2ldKTsgaSsrICkgew0KCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7DQoJCX0NCgkJcmV0dXJuIHJlc3VsdHM7DQoJfTsNCn0NCg0KZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHsNCglyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTsNCgljb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDsNCgl2YXIgbWF0Y2gsIGVsZW0sIHhtbCwgbSwNCgkJbm9kZVR5cGUgPSBjb250ZXh0Lm5vZGVUeXBlOw0KDQoJaWYgKCAhc2VsZWN0b3IgfHwgdHlwZW9mIHNlbGVjdG9yICE9PSAic3RyaW5nIiApIHsNCgkJcmV0dXJuIHJlc3VsdHM7DQoJfQ0KDQoJaWYgKCBub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSApIHsNCgkJcmV0dXJuIFtdOw0KCX0NCg0KCXhtbCA9IGlzWE1MKCBjb250ZXh0ICk7DQoNCglpZiAoICF4bWwgJiYgIXNlZWQgKSB7DQoJCWlmICggKG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApKSApIHsNCgkJCS8vIFNwZWVkLXVwOiBTaXp6bGUoIiNJRCIpDQoJCQlpZiAoIChtID0gbWF0Y2hbMV0pICkgew0KCQkJCWlmICggbm9kZVR5cGUgPT09IDkgKSB7DQoJCQkJCWVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICk7DQoJCQkJCS8vIENoZWNrIHBhcmVudE5vZGUgdG8gY2F0Y2ggd2hlbiBCbGFja2JlcnJ5IDQuNiByZXR1cm5zDQoJCQkJCS8vIG5vZGVzIHRoYXQgYXJlIG5vIGxvbmdlciBpbiB0aGUgZG9jdW1lbnQgIzY5NjMNCgkJCQkJaWYgKCBlbGVtICYmIGVsZW0ucGFyZW50Tm9kZSApIHsNCgkJCQkJCS8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBJRSwgT3BlcmEsIGFuZCBXZWJraXQgcmV0dXJuIGl0ZW1zDQoJCQkJCQkvLyBieSBuYW1lIGluc3RlYWQgb2YgSUQNCgkJCQkJCWlmICggZWxlbS5pZCA9PT0gbSApIHsNCgkJCQkJCQlyZXN1bHRzLnB1c2goIGVsZW0gKTsNCgkJCQkJCQlyZXR1cm4gcmVzdWx0czsNCgkJCQkJCX0NCgkJCQkJfSBlbHNlIHsNCgkJCQkJCXJldHVybiByZXN1bHRzOw0KCQkJCQl9DQoJCQkJfSBlbHNlIHsNCgkJCQkJLy8gQ29udGV4dCBpcyBub3QgYSBkb2N1bWVudA0KCQkJCQlpZiAoIGNvbnRleHQub3duZXJEb2N1bWVudCAmJiAoZWxlbSA9IGNvbnRleHQub3duZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbSApKSAmJg0KCQkJCQkJY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJiBlbGVtLmlkID09PSBtICkgew0KCQkJCQkJcmVzdWx0cy5wdXNoKCBlbGVtICk7DQoJCQkJCQlyZXR1cm4gcmVzdWx0czsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgiVEFHIikNCgkJCX0gZWxzZSBpZiAoIG1hdGNoWzJdICkgew0KCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSwgMCkgKTsNCgkJCQlyZXR1cm4gcmVzdWx0czsNCg0KCQkJLy8gU3BlZWQtdXA6IFNpenpsZSgiLkNMQVNTIikNCgkJCX0gZWxzZSBpZiAoIChtID0gbWF0Y2hbM10pICYmIGFzc2VydFVzYWJsZUNsYXNzTmFtZSAmJiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7DQoJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgc2xpY2UuY2FsbChjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSwgMCkgKTsNCgkJCQlyZXR1cm4gcmVzdWx0czsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIEFsbCBvdGhlcnMNCglyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgIiQxIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKTsNCn0NCg0KU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7DQoJcmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTsNCn07DQoNClNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHsNCglyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7DQp9Ow0KDQovLyBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzDQpmdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHsNCglyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7DQoJCXZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOw0KCQlyZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7DQoJfTsNCn0NCg0KLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zDQpmdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7DQoJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgew0KCQl2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTsNCgkJcmV0dXJuIChuYW1lID09PSAiaW5wdXQiIHx8IG5hbWUgPT09ICJidXR0b24iKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7DQoJfTsNCn0NCg0KLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFscw0KZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7DQoJcmV0dXJuIG1hcmtGdW5jdGlvbihmdW5jdGlvbiggYXJndW1lbnQgKSB7DQoJCWFyZ3VtZW50ID0gK2FyZ3VtZW50Ow0KCQlyZXR1cm4gbWFya0Z1bmN0aW9uKGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkgew0KCQkJdmFyIGosDQoJCQkJbWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSwNCgkJCQlpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDsNCg0KCQkJLy8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzDQoJCQl3aGlsZSAoIGktLSApIHsNCgkJCQlpZiAoIHNlZWRbIChqID0gbWF0Y2hJbmRleGVzW2ldKSBdICkgew0KCQkJCQlzZWVkW2pdID0gIShtYXRjaGVzW2pdID0gc2VlZFtqXSk7DQoJCQkJfQ0KCQkJfQ0KCQl9KTsNCgl9KTsNCn0NCg0KLyoqDQogKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlcw0KICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtDQogKi8NCmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkgew0KCXZhciBub2RlLA0KCQlyZXQgPSAiIiwNCgkJaSA9IDAsDQoJCW5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTsNCg0KCWlmICggbm9kZVR5cGUgKSB7DQoJCWlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkgew0KCQkJLy8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50cw0KCQkJLy8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoc2VlICMxMTE1MykNCgkJCWlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09ICJzdHJpbmciICkgew0KCQkJCXJldHVybiBlbGVtLnRleHRDb250ZW50Ow0KCQkJfSBlbHNlIHsNCgkJCQkvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW4NCgkJCQlmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHsNCgkJCQkJcmV0ICs9IGdldFRleHQoIGVsZW0gKTsNCgkJCQl9DQoJCQl9DQoJCX0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgew0KCQkJcmV0dXJuIGVsZW0ubm9kZVZhbHVlOw0KCQl9DQoJCS8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlcw0KCX0gZWxzZSB7DQoNCgkJLy8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXkNCgkJZm9yICggOyAobm9kZSA9IGVsZW1baV0pOyBpKysgKSB7DQoJCQkvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlcw0KCQkJcmV0ICs9IGdldFRleHQoIG5vZGUgKTsNCgkJfQ0KCX0NCglyZXR1cm4gcmV0Ow0KfTsNCg0KaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHsNCgkvLyBkb2N1bWVudEVsZW1lbnQgaXMgdmVyaWZpZWQgZm9yIGNhc2VzIHdoZXJlIGl0IGRvZXNuJ3QgeWV0IGV4aXN0DQoJLy8gKHN1Y2ggYXMgbG9hZGluZyBpZnJhbWVzIGluIElFIC0gIzQ4MzMpDQoJdmFyIGRvY3VtZW50RWxlbWVudCA9IGVsZW0gJiYgKGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtKS5kb2N1bWVudEVsZW1lbnQ7DQoJcmV0dXJuIGRvY3VtZW50RWxlbWVudCA/IGRvY3VtZW50RWxlbWVudC5ub2RlTmFtZSAhPT0gIkhUTUwiIDogZmFsc2U7DQp9Ow0KDQovLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXINCmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zID0gZG9jRWxlbS5jb250YWlucyA/DQoJZnVuY3Rpb24oIGEsIGIgKSB7DQoJCXZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsDQoJCQlidXAgPSBiICYmIGIucGFyZW50Tm9kZTsNCgkJcmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiBhZG93bi5jb250YWlucyAmJiBhZG93bi5jb250YWlucyhidXApICk7DQoJfSA6DQoJZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/DQoJZnVuY3Rpb24oIGEsIGIgKSB7DQoJCXJldHVybiBiICYmICEhKCBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgJiAxNiApOw0KCX0gOg0KCWZ1bmN0aW9uKCBhLCBiICkgew0KCQl3aGlsZSAoIChiID0gYi5wYXJlbnROb2RlKSApIHsNCgkJCWlmICggYiA9PT0gYSApIHsNCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJfQ0KCQlyZXR1cm4gZmFsc2U7DQoJfTsNCg0KU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHsNCgl2YXIgdmFsLA0KCQl4bWwgPSBpc1hNTCggZWxlbSApOw0KDQoJaWYgKCAheG1sICkgew0KCQluYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOw0KCX0NCglpZiAoICh2YWwgPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUgXSkgKSB7DQoJCXJldHVybiB2YWwoIGVsZW0gKTsNCgl9DQoJaWYgKCB4bWwgfHwgYXNzZXJ0QXR0cmlidXRlcyApIHsNCgkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7DQoJfQ0KCXZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApOw0KCXJldHVybiB2YWwgPw0KCQl0eXBlb2YgZWxlbVsgbmFtZSBdID09PSAiYm9vbGVhbiIgPw0KCQkJZWxlbVsgbmFtZSBdID8gbmFtZSA6IG51bGwgOg0KCQkJdmFsLnNwZWNpZmllZCA/IHZhbC52YWx1ZSA6IG51bGwgOg0KCQludWxsOw0KfTsNCg0KRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7DQoNCgkvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXINCgljYWNoZUxlbmd0aDogNTAsDQoNCgljcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbiwNCg0KCW1hdGNoOiBtYXRjaEV4cHIsDQoNCgkvLyBJRTYvNyByZXR1cm4gYSBtb2RpZmllZCBocmVmDQoJYXR0ckhhbmRsZTogYXNzZXJ0SHJlZk5vdE5vcm1hbGl6ZWQgPw0KCQl7fSA6DQoJCXsNCgkJCSJocmVmIjogZnVuY3Rpb24oIGVsZW0gKSB7DQoJCQkJcmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCAiaHJlZiIsIDIgKTsNCgkJCX0sDQoJCQkidHlwZSI6IGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJCXJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSgidHlwZSIpOw0KCQkJfQ0KCQl9LA0KDQoJZmluZDogew0KCQkiSUQiOiBhc3NlcnRHZXRJZE5vdE5hbWUgPw0KCQkJZnVuY3Rpb24oIGlkLCBjb250ZXh0LCB4bWwgKSB7DQoJCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gc3RydW5kZWZpbmVkICYmICF4bWwgKSB7DQoJCQkJCXZhciBtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTsNCgkJCQkJLy8gQ2hlY2sgcGFyZW50Tm9kZSB0byBjYXRjaCB3aGVuIEJsYWNrYmVycnkgNC42IHJldHVybnMNCgkJCQkJLy8gbm9kZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZSBkb2N1bWVudCAjNjk2Mw0KCQkJCQlyZXR1cm4gbSAmJiBtLnBhcmVudE5vZGUgPyBbbV0gOiBbXTsNCgkJCQl9DQoJCQl9IDoNCgkJCWZ1bmN0aW9uKCBpZCwgY29udGV4dCwgeG1sICkgew0KCQkJCWlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IHN0cnVuZGVmaW5lZCAmJiAheG1sICkgew0KCQkJCQl2YXIgbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7DQoNCgkJCQkJcmV0dXJuIG0gPw0KCQkJCQkJbS5pZCA9PT0gaWQgfHwgdHlwZW9mIG0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gc3RydW5kZWZpbmVkICYmIG0uZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZSA9PT0gaWQgPw0KCQkJCQkJCVttXSA6DQoJCQkJCQkJdW5kZWZpbmVkIDoNCgkJCQkJCVtdOw0KCQkJCX0NCgkJCX0sDQoNCgkJIlRBRyI6IGFzc2VydFRhZ05hbWVOb0NvbW1lbnRzID8NCgkJCWZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7DQoJCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gc3RydW5kZWZpbmVkICkgew0KCQkJCQlyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7DQoJCQkJfQ0KCQkJfSA6DQoJCQlmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkgew0KCQkJCXZhciByZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7DQoNCgkJCQkvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzDQoJCQkJaWYgKCB0YWcgPT09ICIqIiApIHsNCgkJCQkJdmFyIGVsZW0sDQoJCQkJCQl0bXAgPSBbXSwNCgkJCQkJCWkgPSAwOw0KDQoJCQkJCWZvciAoIDsgKGVsZW0gPSByZXN1bHRzW2ldKTsgaSsrICkgew0KCQkJCQkJaWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkgew0KCQkJCQkJCXRtcC5wdXNoKCBlbGVtICk7DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQlyZXR1cm4gdG1wOw0KCQkJCX0NCgkJCQlyZXR1cm4gcmVzdWx0czsNCgkJCX0sDQoNCgkJIk5BTUUiOiBhc3NlcnRVc2FibGVOYW1lICYmIGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7DQoJCQlpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lICE9PSBzdHJ1bmRlZmluZWQgKSB7DQoJCQkJcmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIG5hbWUgKTsNCgkJCX0NCgkJfSwNCg0KCQkiQ0xBU1MiOiBhc3NlcnRVc2FibGVDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCwgeG1sICkgew0KCQkJaWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBzdHJ1bmRlZmluZWQgJiYgIXhtbCApIHsNCgkJCQlyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTsNCgkJCX0NCgkJfQ0KCX0sDQoNCglyZWxhdGl2ZTogew0KCQkiPiI6IHsgZGlyOiAicGFyZW50Tm9kZSIsIGZpcnN0OiB0cnVlIH0sDQoJCSIgIjogeyBkaXI6ICJwYXJlbnROb2RlIiB9LA0KCQkiKyI6IHsgZGlyOiAicHJldmlvdXNTaWJsaW5nIiwgZmlyc3Q6IHRydWUgfSwNCgkJIn4iOiB7IGRpcjogInByZXZpb3VzU2libGluZyIgfQ0KCX0sDQoNCglwcmVGaWx0ZXI6IHsNCgkJIkFUVFIiOiBmdW5jdGlvbiggbWF0Y2ggKSB7DQoJCQltYXRjaFsxXSA9IG1hdGNoWzFdLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7DQoNCgkJCS8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkDQoJCQltYXRjaFszXSA9ICggbWF0Y2hbNF0gfHwgbWF0Y2hbNV0gfHwgIiIgKS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApOw0KDQoJCQlpZiAoIG1hdGNoWzJdID09PSAifj0iICkgew0KCQkJCW1hdGNoWzNdID0gIiAiICsgbWF0Y2hbM10gKyAiICI7DQoJCQl9DQoNCgkJCXJldHVybiBtYXRjaC5zbGljZSggMCwgNCApOw0KCQl9LA0KDQoJCSJDSElMRCI6IGZ1bmN0aW9uKCBtYXRjaCApIHsNCgkJCS8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbIkNISUxEIl0NCgkJCQkxIHR5cGUgKG9ubHl8bnRofC4uLikNCgkJCQkyIGFyZ3VtZW50IChldmVufG9kZHxcZCp8XGQqbihbKy1dXGQrKT98Li4uKQ0KCQkJCTMgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XGQqbnwpDQoJCQkJNCBzaWduIG9mIHhuLWNvbXBvbmVudA0KCQkJCTUgeCBvZiB4bi1jb21wb25lbnQNCgkJCQk2IHNpZ24gb2YgeS1jb21wb25lbnQNCgkJCQk3IHkgb2YgeS1jb21wb25lbnQNCgkJCSovDQoJCQltYXRjaFsxXSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKCk7DQoNCgkJCWlmICggbWF0Y2hbMV0gPT09ICJudGgiICkgew0KCQkJCS8vIG50aC1jaGlsZCByZXF1aXJlcyBhcmd1bWVudA0KCQkJCWlmICggIW1hdGNoWzJdICkgew0KCQkJCQlTaXp6bGUuZXJyb3IoIG1hdGNoWzBdICk7DQoJCQkJfQ0KDQoJCQkJLy8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEDQoJCQkJLy8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMQ0KCQkJCW1hdGNoWzNdID0gKyggbWF0Y2hbM10gPyBtYXRjaFs0XSArIChtYXRjaFs1XSB8fCAxKSA6IDIgKiAoIG1hdGNoWzJdID09PSAiZXZlbiIgfHwgbWF0Y2hbMl0gPT09ICJvZGQiICkgKTsNCgkJCQltYXRjaFs0XSA9ICsoICggbWF0Y2hbNl0gKyBtYXRjaFs3XSApIHx8IG1hdGNoWzJdID09PSAib2RkIiApOw0KDQoJCQkvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHMNCgkJCX0gZWxzZSBpZiAoIG1hdGNoWzJdICkgew0KCQkJCVNpenpsZS5lcnJvciggbWF0Y2hbMF0gKTsNCgkJCX0NCg0KCQkJcmV0dXJuIG1hdGNoOw0KCQl9LA0KDQoJCSJQU0VVRE8iOiBmdW5jdGlvbiggbWF0Y2ggKSB7DQoJCQl2YXIgdW5xdW90ZWQsIGV4Y2VzczsNCgkJCWlmICggbWF0Y2hFeHByWyJDSElMRCJdLnRlc3QoIG1hdGNoWzBdICkgKSB7DQoJCQkJcmV0dXJuIG51bGw7DQoJCQl9DQoNCgkJCWlmICggbWF0Y2hbM10gKSB7DQoJCQkJbWF0Y2hbMl0gPSBtYXRjaFszXTsNCgkJCX0gZWxzZSBpZiAoICh1bnF1b3RlZCA9IG1hdGNoWzRdKSApIHsNCgkJCQkvLyBPbmx5IGNoZWNrIGFyZ3VtZW50cyB0aGF0IGNvbnRhaW4gYSBwc2V1ZG8NCgkJCQlpZiAoIHJwc2V1ZG8udGVzdCh1bnF1b3RlZCkgJiYNCgkJCQkJLy8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSkNCgkJCQkJKGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApKSAmJg0KCQkJCQkvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXMNCgkJCQkJKGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoICIpIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGgpICkgew0KDQoJCQkJCS8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4DQoJCQkJCXVucXVvdGVkID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApOw0KCQkJCQltYXRjaFswXSA9IG1hdGNoWzBdLnNsaWNlKCAwLCBleGNlc3MgKTsNCgkJCQl9DQoJCQkJbWF0Y2hbMl0gPSB1bnF1b3RlZDsNCgkJCX0NCg0KCQkJLy8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpDQoJCQlyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTsNCgkJfQ0KCX0sDQoNCglmaWx0ZXI6IHsNCgkJIklEIjogYXNzZXJ0R2V0SWROb3ROYW1lID8NCgkJCWZ1bmN0aW9uKCBpZCApIHsNCgkJCQlpZCA9IGlkLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7DQoJCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJCQlyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoImlkIikgPT09IGlkOw0KCQkJCX07DQoJCQl9IDoNCgkJCWZ1bmN0aW9uKCBpZCApIHsNCgkJCQlpZCA9IGlkLnJlcGxhY2UoIHJiYWNrc2xhc2gsICIiICk7DQoJCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJCQl2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoImlkIik7DQoJCQkJCXJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkOw0KCQkJCX07DQoJCQl9LA0KDQoJCSJUQUciOiBmdW5jdGlvbiggbm9kZU5hbWUgKSB7DQoJCQlpZiAoIG5vZGVOYW1lID09PSAiKiIgKSB7DQoJCQkJcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTsNCgkJCX0NCgkJCW5vZGVOYW1lID0gbm9kZU5hbWUucmVwbGFjZSggcmJhY2tzbGFzaCwgIiIgKS50b0xvd2VyQ2FzZSgpOw0KDQoJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7DQoJCQkJcmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTsNCgkJCX07DQoJCX0sDQoNCgkJIkNMQVNTIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHsNCgkJCXZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgZXhwYW5kbyBdWyBjbGFzc05hbWUgKyAiICIgXTsNCg0KCQkJcmV0dXJuIHBhdHRlcm4gfHwNCgkJCQkocGF0dGVybiA9IG5ldyBSZWdFeHAoICIoXnwiICsgd2hpdGVzcGFjZSArICIpIiArIGNsYXNzTmFtZSArICIoIiArIHdoaXRlc3BhY2UgKyAifCQpIiApKSAmJg0KCQkJCWNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7DQoJCQkJCXJldHVybiBwYXR0ZXJuLnRlc3QoIGVsZW0uY2xhc3NOYW1lIHx8ICh0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IHN0cnVuZGVmaW5lZCAmJiBlbGVtLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSkgfHwgIiIgKTsNCgkJCQl9KTsNCgkJfSwNCg0KCQkiQVRUUiI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7DQoJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQgKSB7DQoJCQkJdmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7DQoNCgkJCQlpZiAoIHJlc3VsdCA9PSBudWxsICkgew0KCQkJCQlyZXR1cm4gb3BlcmF0b3IgPT09ICIhPSI7DQoJCQkJfQ0KCQkJCWlmICggIW9wZXJhdG9yICkgew0KCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQl9DQoNCgkJCQlyZXN1bHQgKz0gIiI7DQoNCgkJCQlyZXR1cm4gb3BlcmF0b3IgPT09ICI9IiA/IHJlc3VsdCA9PT0gY2hlY2sgOg0KCQkJCQlvcGVyYXRvciA9PT0gIiE9IiA/IHJlc3VsdCAhPT0gY2hlY2sgOg0KCQkJCQlvcGVyYXRvciA9PT0gIl49IiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDoNCgkJCQkJb3BlcmF0b3IgPT09ICIqPSIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDoNCgkJCQkJb3BlcmF0b3IgPT09ICIkPSIgPyBjaGVjayAmJiByZXN1bHQuc3Vic3RyKCByZXN1bHQubGVuZ3RoIC0gY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDoNCgkJCQkJb3BlcmF0b3IgPT09ICJ+PSIgPyAoICIgIiArIHJlc3VsdCArICIgIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6DQoJCQkJCW9wZXJhdG9yID09PSAifD0iID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc3Vic3RyKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgIi0iIDoNCgkJCQkJZmFsc2U7DQoJCQl9Ow0KCQl9LA0KDQoJCSJDSElMRCI6IGZ1bmN0aW9uKCB0eXBlLCBhcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7DQoNCgkJCWlmICggdHlwZSA9PT0gIm50aCIgKSB7DQoJCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJCQl2YXIgbm9kZSwgZGlmZiwNCgkJCQkJCXBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsNCg0KCQkJCQlpZiAoIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgKSB7DQoJCQkJCQlyZXR1cm4gdHJ1ZTsNCgkJCQkJfQ0KDQoJCQkJCWlmICggcGFyZW50ICkgew0KCQkJCQkJZGlmZiA9IDA7DQoJCQkJCQlmb3IgKCBub2RlID0gcGFyZW50LmZpcnN0Q2hpbGQ7IG5vZGU7IG5vZGUgPSBub2RlLm5leHRTaWJsaW5nICkgew0KCQkJCQkJCWlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsNCgkJCQkJCQkJZGlmZisrOw0KCQkJCQkJCQlpZiAoIGVsZW0gPT09IG5vZGUgKSB7DQoJCQkJCQkJCQlicmVhazsNCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0NCgkJCQkJfQ0KDQoJCQkJCS8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQgKG9yIGNhc3QgdG8gTmFOKSwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemUNCgkJCQkJZGlmZiAtPSBsYXN0Ow0KCQkJCQlyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTsNCgkJCQl9Ow0KCQkJfQ0KDQoJCQlyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7DQoJCQkJdmFyIG5vZGUgPSBlbGVtOw0KDQoJCQkJc3dpdGNoICggdHlwZSApIHsNCgkJCQkJY2FzZSAib25seSI6DQoJCQkJCWNhc2UgImZpcnN0IjoNCgkJCQkJCXdoaWxlICggKG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZykgKSB7DQoJCQkJCQkJaWYgKCBub2RlLm5vZGVUeXBlID09PSAxICkgew0KCQkJCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJCQkJfQ0KCQkJCQkJfQ0KDQoJCQkJCQlpZiAoIHR5cGUgPT09ICJmaXJzdCIgKSB7DQoJCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJCQl9DQoNCgkJCQkJCW5vZGUgPSBlbGVtOw0KDQoJCQkJCQkvKiBmYWxscyB0aHJvdWdoICovDQoJCQkJCWNhc2UgImxhc3QiOg0KCQkJCQkJd2hpbGUgKCAobm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpICkgew0KCQkJCQkJCWlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSApIHsNCgkJCQkJCQkJcmV0dXJuIGZhbHNlOw0KCQkJCQkJCX0NCgkJCQkJCX0NCg0KCQkJCQkJcmV0dXJuIHRydWU7DQoJCQkJfQ0KCQkJfTsNCgkJfSwNCg0KCQkiUFNFVURPIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7DQoJCQkvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUNCgkJCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXMNCgkJCS8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzDQoJCQkvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zDQoJCQl2YXIgYXJncywNCgkJCQlmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8DQoJCQkJCVNpenpsZS5lcnJvciggInVuc3VwcG9ydGVkIHBzZXVkbzogIiArIHBzZXVkbyApOw0KDQoJCQkvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0DQoJCQkvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvbg0KCQkJLy8ganVzdCBhcyBTaXp6bGUgZG9lcw0KCQkJaWYgKCBmblsgZXhwYW5kbyBdICkgew0KCQkJCXJldHVybiBmbiggYXJndW1lbnQgKTsNCgkJCX0NCg0KCQkJLy8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzDQoJCQlpZiAoIGZuLmxlbmd0aCA+IDEgKSB7DQoJCQkJYXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sICIiLCBhcmd1bWVudCBdOw0KCQkJCXJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgPw0KCQkJCQltYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7DQoJCQkJCQl2YXIgaWR4LA0KCQkJCQkJCW1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSwNCgkJCQkJCQlpID0gbWF0Y2hlZC5sZW5ndGg7DQoJCQkJCQl3aGlsZSAoIGktLSApIHsNCgkJCQkJCQlpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbaV0gKTsNCgkJCQkJCQlzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFtpXSApOw0KCQkJCQkJfQ0KCQkJCQl9KSA6DQoJCQkJCWZ1bmN0aW9uKCBlbGVtICkgew0KCQkJCQkJcmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7DQoJCQkJCX07DQoJCQl9DQoNCgkJCXJldHVybiBmbjsNCgkJfQ0KCX0sDQoNCglwc2V1ZG9zOiB7DQoJCSJub3QiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgew0KCQkJLy8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGUNCgkJCS8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nDQoJCQkvLyBzcGFjZXMgYXMgY29tYmluYXRvcnMNCgkJCXZhciBpbnB1dCA9IFtdLA0KCQkJCXJlc3VsdHMgPSBbXSwNCgkJCQltYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sICIkMSIgKSApOw0KDQoJCQlyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID8NCgkJCQltYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIGNvbnRleHQsIHhtbCApIHsNCgkJCQkJdmFyIGVsZW0sDQoJCQkJCQl1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksDQoJCQkJCQlpID0gc2VlZC5sZW5ndGg7DQoNCgkJCQkJLy8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYA0KCQkJCQl3aGlsZSAoIGktLSApIHsNCgkJCQkJCWlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgew0KCQkJCQkJCXNlZWRbaV0gPSAhKG1hdGNoZXNbaV0gPSBlbGVtKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0pIDoNCgkJCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgew0KCQkJCQlpbnB1dFswXSA9IGVsZW07DQoJCQkJCW1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTsNCgkJCQkJcmV0dXJuICFyZXN1bHRzLnBvcCgpOw0KCQkJCX07DQoJCX0pLA0KDQoJCSJoYXMiOiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlbGVjdG9yICkgew0KCQkJcmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJCXJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDsNCgkJCX07DQoJCX0pLA0KDQoJCSJjb250YWlucyI6IG1hcmtGdW5jdGlvbihmdW5jdGlvbiggdGV4dCApIHsNCgkJCXJldHVybiBmdW5jdGlvbiggZWxlbSApIHsNCgkJCQlyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJUZXh0IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xOw0KCQkJfTsNCgkJfSksDQoNCgkJImVuYWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsNCgkJCXJldHVybiBlbGVtLmRpc2FibGVkID09PSBmYWxzZTsNCgkJfSwNCg0KCQkiZGlzYWJsZWQiOiBmdW5jdGlvbiggZWxlbSApIHsNCgkJCXJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlOw0KCQl9LA0KDQoJCSJjaGVja2VkIjogZnVuY3Rpb24oIGVsZW0gKSB7DQoJCQkvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHMNCgkJCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkDQoJCQl2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7DQoJCQlyZXR1cm4gKG5vZGVOYW1lID09PSAiaW5wdXQiICYmICEhZWxlbS5jaGVja2VkKSB8fCAobm9kZU5hbWUgPT09ICJvcHRpb24iICYmICEhZWxlbS5zZWxlY3RlZCk7DQoJCX0sDQoNCgkJInNlbGVjdGVkIjogZnVuY3Rpb24oIGVsZW0gKSB7DQoJCQkvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0DQoJCQkvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5DQoJCQlpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsNCgkJCQllbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDsNCgkJCX0NCg0KCQkJcmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7DQoJCX0sDQoNCgkJInBhcmVudCI6IGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJcmV0dXJuICFFeHByLnBzZXVkb3NbImVtcHR5Il0oIGVsZW0gKTsNCgkJfSwNCg0KCQkiZW1wdHkiOiBmdW5jdGlvbiggZWxlbSApIHsNCgkJCS8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvDQoJCQkvLyA6ZW1wdHkgaXMgb25seSBhZmZlY3RlZCBieSBlbGVtZW50IG5vZGVzIGFuZCBjb250ZW50IG5vZGVzKGluY2x1ZGluZyB0ZXh0KDMpLCBjZGF0YSg0KSksDQoJCQkvLyAgIG5vdCBjb21tZW50LCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucywgb3Igb3RoZXJzDQoJCQkvLyBUaGFua3MgdG8gRGllZ28gUGVyaW5pIGZvciB0aGUgbm9kZU5hbWUgc2hvcnRjdXQNCgkJCS8vICAgR3JlYXRlciB0aGFuICJAIiBtZWFucyBhbHBoYSBjaGFyYWN0ZXJzIChzcGVjaWZpY2FsbHkgbm90IHN0YXJ0aW5nIHdpdGggIiMiIG9yICI/IikNCgkJCXZhciBub2RlVHlwZTsNCgkJCWVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7DQoJCQl3aGlsZSAoIGVsZW0gKSB7DQoJCQkJaWYgKCBlbGVtLm5vZGVOYW1lID4gIkAiIHx8IChub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGUpID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkgew0KCQkJCQlyZXR1cm4gZmFsc2U7DQoJCQkJfQ0KCQkJCWVsZW0gPSBlbGVtLm5leHRTaWJsaW5nOw0KCQkJfQ0KCQkJcmV0dXJuIHRydWU7DQoJCX0sDQoNCgkJImhlYWRlciI6IGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJcmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApOw0KCQl9LA0KDQoJCSJ0ZXh0IjogZnVuY3Rpb24oIGVsZW0gKSB7DQoJCQl2YXIgdHlwZSwgYXR0cjsNCgkJCS8vIElFNiBhbmQgNyB3aWxsIG1hcCBlbGVtLnR5cGUgdG8gJ3RleHQnIGZvciBuZXcgSFRNTDUgdHlwZXMgKHNlYXJjaCwgZXRjKQ0KCQkJLy8gdXNlIGdldEF0dHJpYnV0ZSBpbnN0ZWFkIHRvIHRlc3QgdGhpcyBjYXNlDQoJCQlyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAiaW5wdXQiICYmDQoJCQkJKHR5cGUgPSBlbGVtLnR5cGUpID09PSAidGV4dCIgJiYNCgkJCQkoIChhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoInR5cGUiKSkgPT0gbnVsbCB8fCBhdHRyLnRvTG93ZXJDYXNlKCkgPT09IHR5cGUgKTsNCgkJfSwNCg0KCQkvLyBJbnB1dCB0eXBlcw0KCQkicmFkaW8iOiBjcmVhdGVJbnB1dFBzZXVkbygicmFkaW8iKSwNCgkJImNoZWNrYm94IjogY3JlYXRlSW5wdXRQc2V1ZG8oImNoZWNrYm94IiksDQoJCSJmaWxlIjogY3JlYXRlSW5wdXRQc2V1ZG8oImZpbGUiKSwNCgkJInBhc3N3b3JkIjogY3JlYXRlSW5wdXRQc2V1ZG8oInBhc3N3b3JkIiksDQoJCSJpbWFnZSI6IGNyZWF0ZUlucHV0UHNldWRvKCJpbWFnZSIpLA0KDQoJCSJzdWJtaXQiOiBjcmVhdGVCdXR0b25Qc2V1ZG8oInN1Ym1pdCIpLA0KCQkicmVzZXQiOiBjcmVhdGVCdXR0b25Qc2V1ZG8oInJlc2V0IiksDQoNCgkJImJ1dHRvbiI6IGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJdmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7DQoJCQlyZXR1cm4gbmFtZSA9PT0gImlucHV0IiAmJiBlbGVtLnR5cGUgPT09ICJidXR0b24iIHx8IG5hbWUgPT09ICJidXR0b24iOw0KCQl9LA0KDQoJCSJpbnB1dCI6IGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJcmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApOw0KCQl9LA0KDQoJCSJmb2N1cyI6IGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJdmFyIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDsNCgkJCXJldHVybiBlbGVtID09PSBkb2MuYWN0aXZlRWxlbWVudCAmJiAoIWRvYy5oYXNGb2N1cyB8fCBkb2MuaGFzRm9jdXMoKSkgJiYgISEoZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCk7DQoJCX0sDQoNCgkJImFjdGl2ZSI6IGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJcmV0dXJuIGVsZW0gPT09IGVsZW0ub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50Ow0KCQl9LA0KDQoJCS8vIFBvc2l0aW9uYWwgdHlwZXMNCgkJImZpcnN0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbigpIHsNCgkJCXJldHVybiBbIDAgXTsNCgkJfSksDQoNCgkJImxhc3QiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsNCgkJCXJldHVybiBbIGxlbmd0aCAtIDEgXTsNCgkJfSksDQoNCgkJImVxIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgew0KCQkJcmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdOw0KCQl9KSwNCg0KCQkiZXZlbiI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkgew0KCQkJZm9yICggdmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7DQoJCQkJbWF0Y2hJbmRleGVzLnB1c2goIGkgKTsNCgkJCX0NCgkJCXJldHVybiBtYXRjaEluZGV4ZXM7DQoJCX0pLA0KDQoJCSJvZGQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHsNCgkJCWZvciAoIHZhciBpID0gMTsgaSA8IGxlbmd0aDsgaSArPSAyICkgew0KCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7DQoJCQl9DQoJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOw0KCQl9KSwNCg0KCQkibHQiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7DQoJCQlmb3IgKCB2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7IC0taSA+PSAwOyApIHsNCgkJCQltYXRjaEluZGV4ZXMucHVzaCggaSApOw0KCQkJfQ0KCQkJcmV0dXJuIG1hdGNoSW5kZXhlczsNCgkJfSksDQoNCgkJImd0IjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyhmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkgew0KCQkJZm9yICggdmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50OyArK2kgPCBsZW5ndGg7ICkgew0KCQkJCW1hdGNoSW5kZXhlcy5wdXNoKCBpICk7DQoJCQl9DQoJCQlyZXR1cm4gbWF0Y2hJbmRleGVzOw0KCQl9KQ0KCX0NCn07DQoNCmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiwgcmV0ICkgew0KCWlmICggYSA9PT0gYiApIHsNCgkJcmV0dXJuIHJldDsNCgl9DQoNCgl2YXIgY3VyID0gYS5uZXh0U2libGluZzsNCg0KCXdoaWxlICggY3VyICkgew0KCQlpZiAoIGN1ciA9PT0gYiApIHsNCgkJCXJldHVybiAtMTsNCgkJfQ0KDQoJCWN1ciA9IGN1ci5uZXh0U2libGluZzsNCgl9DQoNCglyZXR1cm4gMTsNCn0NCg0Kc29ydE9yZGVyID0gZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiA/DQoJZnVuY3Rpb24oIGEsIGIgKSB7DQoJCWlmICggYSA9PT0gYiApIHsNCgkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7DQoJCQlyZXR1cm4gMDsNCgkJfQ0KDQoJCXJldHVybiAoICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIHx8ICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uID8NCgkJCWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gOg0KCQkJYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDQNCgkJKSA/IC0xIDogMTsNCgl9IDoNCglmdW5jdGlvbiggYSwgYiApIHsNCgkJLy8gVGhlIG5vZGVzIGFyZSBpZGVudGljYWwsIHdlIGNhbiBleGl0IGVhcmx5DQoJCWlmICggYSA9PT0gYiApIHsNCgkJCWhhc0R1cGxpY2F0ZSA9IHRydWU7DQoJCQlyZXR1cm4gMDsNCg0KCQkvLyBGYWxsYmFjayB0byB1c2luZyBzb3VyY2VJbmRleCAoaW4gSUUpIGlmIGl0J3MgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXMNCgkJfSBlbHNlIGlmICggYS5zb3VyY2VJbmRleCAmJiBiLnNvdXJjZUluZGV4ICkgew0KCQkJcmV0dXJuIGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4Ow0KCQl9DQoNCgkJdmFyIGFsLCBibCwNCgkJCWFwID0gW10sDQoJCQlicCA9IFtdLA0KCQkJYXVwID0gYS5wYXJlbnROb2RlLA0KCQkJYnVwID0gYi5wYXJlbnROb2RlLA0KCQkJY3VyID0gYXVwOw0KDQoJCS8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MgKG9yIGlkZW50aWNhbCkgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2sNCgkJaWYgKCBhdXAgPT09IGJ1cCApIHsNCgkJCXJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTsNCg0KCQkvLyBJZiBubyBwYXJlbnRzIHdlcmUgZm91bmQgdGhlbiB0aGUgbm9kZXMgYXJlIGRpc2Nvbm5lY3RlZA0KCQl9IGVsc2UgaWYgKCAhYXVwICkgew0KCQkJcmV0dXJuIC0xOw0KDQoJCX0gZWxzZSBpZiAoICFidXAgKSB7DQoJCQlyZXR1cm4gMTsNCgkJfQ0KDQoJCS8vIE90aGVyd2lzZSB0aGV5J3JlIHNvbWV3aGVyZSBlbHNlIGluIHRoZSB0cmVlIHNvIHdlIG5lZWQNCgkJLy8gdG8gYnVpbGQgdXAgYSBmdWxsIGxpc3Qgb2YgdGhlIHBhcmVudE5vZGVzIGZvciBjb21wYXJpc29uDQoJCXdoaWxlICggY3VyICkgew0KCQkJYXAudW5zaGlmdCggY3VyICk7DQoJCQljdXIgPSBjdXIucGFyZW50Tm9kZTsNCgkJfQ0KDQoJCWN1ciA9IGJ1cDsNCg0KCQl3aGlsZSAoIGN1ciApIHsNCgkJCWJwLnVuc2hpZnQoIGN1ciApOw0KCQkJY3VyID0gY3VyLnBhcmVudE5vZGU7DQoJCX0NCg0KCQlhbCA9IGFwLmxlbmd0aDsNCgkJYmwgPSBicC5sZW5ndGg7DQoNCgkJLy8gU3RhcnQgd2Fsa2luZyBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3kNCgkJZm9yICggdmFyIGkgPSAwOyBpIDwgYWwgJiYgaSA8IGJsOyBpKysgKSB7DQoJCQlpZiAoIGFwW2ldICE9PSBicFtpXSApIHsNCgkJCQlyZXR1cm4gc2libGluZ0NoZWNrKCBhcFtpXSwgYnBbaV0gKTsNCgkJCX0NCgkJfQ0KDQoJCS8vIFdlIGVuZGVkIHNvbWVwbGFjZSB1cCB0aGUgdHJlZSBzbyBkbyBhIHNpYmxpbmcgY2hlY2sNCgkJcmV0dXJuIGkgPT09IGFsID8NCgkJCXNpYmxpbmdDaGVjayggYSwgYnBbaV0sIC0xICkgOg0KCQkJc2libGluZ0NoZWNrKCBhcFtpXSwgYiwgMSApOw0KCX07DQoNCi8vIEFsd2F5cyBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIGR1cGxpY2F0ZXMgaWYgc29ydCBkb2Vzbid0DQovLyBwYXNzIHRoZW0gdG8gb3VyIGNvbXBhcmlzb24gZnVuY3Rpb24gKGFzIGluIEdvb2dsZSBDaHJvbWUpLg0KWzAsIDBdLnNvcnQoIHNvcnRPcmRlciApOw0KYmFzZUhhc0R1cGxpY2F0ZSA9ICFoYXNEdXBsaWNhdGU7DQoNCi8vIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXMNClNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7DQoJdmFyIGVsZW0sDQoJCWR1cGxpY2F0ZXMgPSBbXSwNCgkJaSA9IDEsDQoJCWogPSAwOw0KDQoJaGFzRHVwbGljYXRlID0gYmFzZUhhc0R1cGxpY2F0ZTsNCglyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApOw0KDQoJaWYgKCBoYXNEdXBsaWNhdGUgKSB7DQoJCWZvciAoIDsgKGVsZW0gPSByZXN1bHRzW2ldKTsgaSsrICkgew0KCQkJaWYgKCBlbGVtID09PSByZXN1bHRzWyBpIC0gMSBdICkgew0KCQkJCWogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTsNCgkJCX0NCgkJfQ0KCQl3aGlsZSAoIGotLSApIHsNCgkJCXJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTsNCgkJfQ0KCX0NCg0KCXJldHVybiByZXN1bHRzOw0KfTsNCg0KU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHsNCgl0aHJvdyBuZXcgRXJyb3IoICJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiAiICsgbXNnICk7DQp9Ow0KDQpmdW5jdGlvbiB0b2tlbml6ZSggc2VsZWN0b3IsIHBhcnNlT25seSApIHsNCgl2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSwNCgkJc29GYXIsIGdyb3VwcywgcHJlRmlsdGVycywNCgkJY2FjaGVkID0gdG9rZW5DYWNoZVsgZXhwYW5kbyBdWyBzZWxlY3RvciArICIgIiBdOw0KDQoJaWYgKCBjYWNoZWQgKSB7DQoJCXJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7DQoJfQ0KDQoJc29GYXIgPSBzZWxlY3RvcjsNCglncm91cHMgPSBbXTsNCglwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7DQoNCgl3aGlsZSAoIHNvRmFyICkgew0KDQoJCS8vIENvbW1hIGFuZCBmaXJzdCBydW4NCgkJaWYgKCAhbWF0Y2hlZCB8fCAobWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSkgKSB7DQoJCQlpZiAoIG1hdGNoICkgew0KCQkJCS8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkDQoJCQkJc29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbMF0ubGVuZ3RoICkgfHwgc29GYXI7DQoJCQl9DQoJCQlncm91cHMucHVzaCggdG9rZW5zID0gW10gKTsNCgkJfQ0KDQoJCW1hdGNoZWQgPSBmYWxzZTsNCg0KCQkvLyBDb21iaW5hdG9ycw0KCQlpZiAoIChtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApKSApIHsNCgkJCXRva2Vucy5wdXNoKCBtYXRjaGVkID0gbmV3IFRva2VuKCBtYXRjaC5zaGlmdCgpICkgKTsNCgkJCXNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7DQoNCgkJCS8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZQ0KCQkJbWF0Y2hlZC50eXBlID0gbWF0Y2hbMF0ucmVwbGFjZSggcnRyaW0sICIgIiApOw0KCQl9DQoNCgkJLy8gRmlsdGVycw0KCQlmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkgew0KCQkJaWYgKCAobWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApKSAmJiAoIXByZUZpbHRlcnNbIHR5cGUgXSB8fA0KCQkJCShtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSkpICkgew0KDQoJCQkJdG9rZW5zLnB1c2goIG1hdGNoZWQgPSBuZXcgVG9rZW4oIG1hdGNoLnNoaWZ0KCkgKSApOw0KCQkJCXNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7DQoJCQkJbWF0Y2hlZC50eXBlID0gdHlwZTsNCgkJCQltYXRjaGVkLm1hdGNoZXMgPSBtYXRjaDsNCgkJCX0NCgkJfQ0KDQoJCWlmICggIW1hdGNoZWQgKSB7DQoJCQlicmVhazsNCgkJfQ0KCX0NCg0KCS8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzcw0KCS8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZw0KCS8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vucw0KCXJldHVybiBwYXJzZU9ubHkgPw0KCQlzb0Zhci5sZW5ndGggOg0KCQlzb0ZhciA/DQoJCQlTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOg0KCQkJLy8gQ2FjaGUgdGhlIHRva2Vucw0KCQkJdG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7DQp9DQoNCmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7DQoJdmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLA0KCQljaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBjb21iaW5hdG9yLmRpciA9PT0gInBhcmVudE5vZGUiLA0KCQlkb25lTmFtZSA9IGRvbmUrKzsNCg0KCXJldHVybiBjb21iaW5hdG9yLmZpcnN0ID8NCgkJLy8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50DQoJCWZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7DQoJCQl3aGlsZSAoIChlbGVtID0gZWxlbVsgZGlyIF0pICkgew0KCQkJCWlmICggY2hlY2tOb25FbGVtZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICApIHsNCgkJCQkJcmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApOw0KCQkJCX0NCgkJCX0NCgkJfSA6DQoNCgkJLy8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzDQoJCWZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7DQoJCQkvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBkaXIgY2FjaGluZw0KCQkJaWYgKCAheG1sICkgew0KCQkJCXZhciBjYWNoZSwNCgkJCQkJZGlya2V5ID0gZGlycnVucyArICIgIiArIGRvbmVOYW1lICsgIiAiLA0KCQkJCQljYWNoZWRrZXkgPSBkaXJrZXkgKyBjYWNoZWRydW5zOw0KCQkJCXdoaWxlICggKGVsZW0gPSBlbGVtWyBkaXIgXSkgKSB7DQoJCQkJCWlmICggY2hlY2tOb25FbGVtZW50cyB8fCBlbGVtLm5vZGVUeXBlID09PSAxICkgew0KCQkJCQkJaWYgKCAoY2FjaGUgPSBlbGVtWyBleHBhbmRvIF0pID09PSBjYWNoZWRrZXkgKSB7DQoJCQkJCQkJcmV0dXJuIGVsZW0uc2l6c2V0Ow0KCQkJCQkJfSBlbHNlIGlmICggdHlwZW9mIGNhY2hlID09PSAic3RyaW5nIiAmJiBjYWNoZS5pbmRleE9mKGRpcmtleSkgPT09IDAgKSB7DQoJCQkJCQkJaWYgKCBlbGVtLnNpenNldCApIHsNCgkJCQkJCQkJcmV0dXJuIGVsZW07DQoJCQkJCQkJfQ0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQllbGVtWyBleHBhbmRvIF0gPSBjYWNoZWRrZXk7DQoJCQkJCQkJaWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHsNCgkJCQkJCQkJZWxlbS5zaXpzZXQgPSB0cnVlOw0KCQkJCQkJCQlyZXR1cm4gZWxlbTsNCgkJCQkJCQl9DQoJCQkJCQkJZWxlbS5zaXpzZXQgPSBmYWxzZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0gZWxzZSB7DQoJCQkJd2hpbGUgKCAoZWxlbSA9IGVsZW1bIGRpciBdKSApIHsNCgkJCQkJaWYgKCBjaGVja05vbkVsZW1lbnRzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7DQoJCQkJCQlpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgew0KCQkJCQkJCXJldHVybiBlbGVtOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KCQl9Ow0KfQ0KDQpmdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7DQoJcmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgPw0KCQlmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkgew0KCQkJdmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7DQoJCQl3aGlsZSAoIGktLSApIHsNCgkJCQlpZiAoICFtYXRjaGVyc1tpXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7DQoJCQkJCXJldHVybiBmYWxzZTsNCgkJCQl9DQoJCQl9DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfSA6DQoJCW1hdGNoZXJzWzBdOw0KfQ0KDQpmdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkgew0KCXZhciBlbGVtLA0KCQluZXdVbm1hdGNoZWQgPSBbXSwNCgkJaSA9IDAsDQoJCWxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsDQoJCW1hcHBlZCA9IG1hcCAhPSBudWxsOw0KDQoJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7DQoJCWlmICggKGVsZW0gPSB1bm1hdGNoZWRbaV0pICkgew0KCQkJaWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7DQoJCQkJbmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTsNCgkJCQlpZiAoIG1hcHBlZCApIHsNCgkJCQkJbWFwLnB1c2goIGkgKTsNCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoNCglyZXR1cm4gbmV3VW5tYXRjaGVkOw0KfQ0KDQpmdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7DQoJaWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7DQoJCXBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7DQoJfQ0KCWlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkgew0KCQlwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7DQoJfQ0KCXJldHVybiBtYXJrRnVuY3Rpb24oZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHsNCgkJdmFyIHRlbXAsIGksIGVsZW0sDQoJCQlwcmVNYXAgPSBbXSwNCgkJCXBvc3RNYXAgPSBbXSwNCgkJCXByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsDQoNCgkJCS8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0DQoJCQllbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgIioiLCBjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LCBbXSApLA0KDQoJCQkvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb24NCgkJCW1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgPw0KCQkJCWNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDoNCgkJCQllbGVtcywNCg0KCQkJbWF0Y2hlck91dCA9IG1hdGNoZXIgPw0KCQkJCS8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsDQoJCQkJcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgPw0KDQoJCQkJCS8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeQ0KCQkJCQlbXSA6DQoNCgkJCQkJLy8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5DQoJCQkJCXJlc3VsdHMgOg0KCQkJCW1hdGNoZXJJbjsNCg0KCQkvLyBGaW5kIHByaW1hcnkgbWF0Y2hlcw0KCQlpZiAoIG1hdGNoZXIgKSB7DQoJCQltYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApOw0KCQl9DQoNCgkJLy8gQXBwbHkgcG9zdEZpbHRlcg0KCQlpZiAoIHBvc3RGaWx0ZXIgKSB7DQoJCQl0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTsNCgkJCXBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTsNCg0KCQkJLy8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJbg0KCQkJaSA9IHRlbXAubGVuZ3RoOw0KCQkJd2hpbGUgKCBpLS0gKSB7DQoJCQkJaWYgKCAoZWxlbSA9IHRlbXBbaV0pICkgew0KCQkJCQltYXRjaGVyT3V0WyBwb3N0TWFwW2ldIF0gPSAhKG1hdGNoZXJJblsgcG9zdE1hcFtpXSBdID0gZWxlbSk7DQoJCQkJfQ0KCQkJfQ0KCQl9DQoNCgkJaWYgKCBzZWVkICkgew0KCQkJaWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHsNCgkJCQlpZiAoIHBvc3RGaW5kZXIgKSB7DQoJCQkJCS8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0cw0KCQkJCQl0ZW1wID0gW107DQoJCQkJCWkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsNCgkJCQkJd2hpbGUgKCBpLS0gKSB7DQoJCQkJCQlpZiAoIChlbGVtID0gbWF0Y2hlck91dFtpXSkgKSB7DQoJCQkJCQkJLy8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2gNCgkJCQkJCQl0ZW1wLnB1c2goIChtYXRjaGVySW5baV0gPSBlbGVtKSApOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCXBvc3RGaW5kZXIoIG51bGwsIChtYXRjaGVyT3V0ID0gW10pLCB0ZW1wLCB4bWwgKTsNCgkJCQl9DQoNCgkJCQkvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZA0KCQkJCWkgPSBtYXRjaGVyT3V0Lmxlbmd0aDsNCgkJCQl3aGlsZSAoIGktLSApIHsNCgkJCQkJaWYgKCAoZWxlbSA9IG1hdGNoZXJPdXRbaV0pICYmDQoJCQkJCQkodGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mLmNhbGwoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFtpXSkgPiAtMSApIHsNCg0KCQkJCQkJc2VlZFt0ZW1wXSA9ICEocmVzdWx0c1t0ZW1wXSA9IGVsZW0pOw0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0KDQoJCS8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZA0KCQl9IGVsc2Ugew0KCQkJbWF0Y2hlck91dCA9IGNvbmRlbnNlKA0KCQkJCW1hdGNoZXJPdXQgPT09IHJlc3VsdHMgPw0KCQkJCQltYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOg0KCQkJCQltYXRjaGVyT3V0DQoJCQkpOw0KCQkJaWYgKCBwb3N0RmluZGVyICkgew0KCQkJCXBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApOw0KCQkJfSBlbHNlIHsNCgkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7DQoJCQl9DQoJCX0NCgl9KTsNCn0NCg0KZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHsNCgl2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLA0KCQlsZW4gPSB0b2tlbnMubGVuZ3RoLA0KCQlsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbMF0udHlwZSBdLA0KCQlpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIiAiXSwNCgkJaSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLA0KDQoJCS8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpDQoJCW1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkgew0KCQkJcmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDsNCgkJfSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLA0KCQltYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHsNCgkJCXJldHVybiBpbmRleE9mLmNhbGwoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7DQoJCX0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSwNCgkJbWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7DQoJCQlyZXR1cm4gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8ICgNCgkJCQkoY2hlY2tDb250ZXh0ID0gY29udGV4dCkubm9kZVR5cGUgPw0KCQkJCQltYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDoNCgkJCQkJbWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApOw0KCQl9IF07DQoNCglmb3IgKCA7IGkgPCBsZW47IGkrKyApIHsNCgkJaWYgKCAobWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1tpXS50eXBlIF0pICkgew0KCQkJbWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTsNCgkJfSBlbHNlIHsNCgkJCW1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zW2ldLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zW2ldLm1hdGNoZXMgKTsNCg0KCQkJLy8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXINCgkJCWlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkgew0KCQkJCS8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZw0KCQkJCWogPSArK2k7DQoJCQkJZm9yICggOyBqIDwgbGVuOyBqKysgKSB7DQoJCQkJCWlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zW2pdLnR5cGUgXSApIHsNCgkJCQkJCWJyZWFrOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCXJldHVybiBzZXRNYXRjaGVyKA0KCQkJCQlpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwNCgkJCQkJaSA+IDEgJiYgdG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApLmpvaW4oIiIpLnJlcGxhY2UoIHJ0cmltLCAiJDEiICksDQoJCQkJCW1hdGNoZXIsDQoJCQkJCWkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLA0KCQkJCQlqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAodG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkpICksDQoJCQkJCWogPCBsZW4gJiYgdG9rZW5zLmpvaW4oIiIpDQoJCQkJKTsNCgkJCX0NCgkJCW1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTsNCgkJfQ0KCX0NCg0KCXJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTsNCn0NCg0KZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgew0KCXZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsDQoJCWJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLA0KCQlzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBleHBhbmRDb250ZXh0ICkgew0KCQkJdmFyIGVsZW0sIGosIG1hdGNoZXIsDQoJCQkJc2V0TWF0Y2hlZCA9IFtdLA0KCQkJCW1hdGNoZWRDb3VudCA9IDAsDQoJCQkJaSA9ICIwIiwNCgkJCQl1bm1hdGNoZWQgPSBzZWVkICYmIFtdLA0KCQkJCW91dGVybW9zdCA9IGV4cGFuZENvbnRleHQgIT0gbnVsbCwNCgkJCQljb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCwNCgkJCQkvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIGNvbnRleHQNCgkJCQllbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsiVEFHIl0oICIqIiwgZXhwYW5kQ29udGV4dCAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dCApLA0KCQkJCS8vIE5lc3RlZCBtYXRjaGVycyBzaG91bGQgdXNlIG5vbi1pbnRlZ2VyIGRpcnJ1bnMNCgkJCQlkaXJydW5zVW5pcXVlID0gKGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGguRSk7DQoNCgkJCWlmICggb3V0ZXJtb3N0ICkgew0KCQkJCW91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ICE9PSBkb2N1bWVudCAmJiBjb250ZXh0Ow0KCQkJCWNhY2hlZHJ1bnMgPSBzdXBlck1hdGNoZXIuZWw7DQoJCQl9DQoNCgkJCS8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzDQoJCQlmb3IgKCA7IChlbGVtID0gZWxlbXNbaV0pICE9IG51bGw7IGkrKyApIHsNCgkJCQlpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkgew0KCQkJCQlmb3IgKCBqID0gMDsgKG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbal0pOyBqKysgKSB7DQoJCQkJCQlpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgew0KCQkJCQkJCXJlc3VsdHMucHVzaCggZWxlbSApOw0KCQkJCQkJCWJyZWFrOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJCWlmICggb3V0ZXJtb3N0ICkgew0KCQkJCQkJZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7DQoJCQkJCQljYWNoZWRydW5zID0gKytzdXBlck1hdGNoZXIuZWw7DQoJCQkJCX0NCgkJCQl9DQoNCgkJCQkvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzDQoJCQkJaWYgKCBieVNldCApIHsNCgkJCQkJLy8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVycw0KCQkJCQlpZiAoIChlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSkgKSB7DQoJCQkJCQltYXRjaGVkQ291bnQtLTsNCgkJCQkJfQ0KDQoJCQkJCS8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3QNCgkJCQkJaWYgKCBzZWVkICkgew0KCQkJCQkJdW5tYXRjaGVkLnB1c2goIGVsZW0gKTsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzDQoJCQltYXRjaGVkQ291bnQgKz0gaTsNCgkJCWlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkgew0KCQkJCWZvciAoIGogPSAwOyAobWF0Y2hlciA9IHNldE1hdGNoZXJzW2pdKTsgaisrICkgew0KCQkJCQltYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApOw0KCQkJCX0NCg0KCQkJCWlmICggc2VlZCApIHsNCgkJCQkJLy8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZw0KCQkJCQlpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7DQoJCQkJCQl3aGlsZSAoIGktLSApIHsNCgkJCQkJCQlpZiAoICEodW5tYXRjaGVkW2ldIHx8IHNldE1hdGNoZWRbaV0pICkgew0KCQkJCQkJCQlzZXRNYXRjaGVkW2ldID0gcG9wLmNhbGwoIHJlc3VsdHMgKTsNCgkJCQkJCQl9DQoJCQkJCQl9DQoJCQkJCX0NCg0KCQkJCQkvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlcw0KCQkJCQlzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTsNCgkJCQl9DQoNCgkJCQkvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzDQoJCQkJcHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApOw0KDQoJCQkJLy8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nDQoJCQkJaWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmDQoJCQkJCSggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkgew0KDQoJCQkJCVNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnMNCgkJCWlmICggb3V0ZXJtb3N0ICkgew0KCQkJCWRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlOw0KCQkJCW91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwOw0KCQkJfQ0KDQoJCQlyZXR1cm4gdW5tYXRjaGVkOw0KCQl9Ow0KDQoJc3VwZXJNYXRjaGVyLmVsID0gMDsNCglyZXR1cm4gYnlTZXQgPw0KCQltYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDoNCgkJc3VwZXJNYXRjaGVyOw0KfQ0KDQpjb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGdyb3VwIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkgew0KCXZhciBpLA0KCQlzZXRNYXRjaGVycyA9IFtdLA0KCQllbGVtZW50TWF0Y2hlcnMgPSBbXSwNCgkJY2FjaGVkID0gY29tcGlsZXJDYWNoZVsgZXhwYW5kbyBdWyBzZWxlY3RvciArICIgIiBdOw0KDQoJaWYgKCAhY2FjaGVkICkgew0KCQkvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnQNCgkJaWYgKCAhZ3JvdXAgKSB7DQoJCQlncm91cCA9IHRva2VuaXplKCBzZWxlY3RvciApOw0KCQl9DQoJCWkgPSBncm91cC5sZW5ndGg7DQoJCXdoaWxlICggaS0tICkgew0KCQkJY2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIGdyb3VwW2ldICk7DQoJCQlpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkgew0KCQkJCXNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApOw0KCQkJfSBlbHNlIHsNCgkJCQllbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7DQoJCQl9DQoJCX0NCg0KCQkvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb24NCgkJY2FjaGVkID0gY29tcGlsZXJDYWNoZSggc2VsZWN0b3IsIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7DQoJfQ0KCXJldHVybiBjYWNoZWQ7DQp9Ow0KDQpmdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7DQoJdmFyIGkgPSAwLA0KCQlsZW4gPSBjb250ZXh0cy5sZW5ndGg7DQoJZm9yICggOyBpIDwgbGVuOyBpKysgKSB7DQoJCVNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzW2ldLCByZXN1bHRzICk7DQoJfQ0KCXJldHVybiByZXN1bHRzOw0KfQ0KDQpmdW5jdGlvbiBzZWxlY3QoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkLCB4bWwgKSB7DQoJdmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsDQoJCW1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICksDQoJCWogPSBtYXRjaC5sZW5ndGg7DQoNCglpZiAoICFzZWVkICkgew0KCQkvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBncm91cA0KCQlpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHsNCg0KCQkJLy8gVGFrZSBhIHNob3J0Y3V0IGFuZCBzZXQgdGhlIGNvbnRleHQgaWYgdGhlIHJvb3Qgc2VsZWN0b3IgaXMgYW4gSUQNCgkJCXRva2VucyA9IG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UoIDAgKTsNCgkJCWlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKHRva2VuID0gdG9rZW5zWzBdKS50eXBlID09PSAiSUQiICYmDQoJCQkJCWNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgIXhtbCAmJg0KCQkJCQlFeHByLnJlbGF0aXZlWyB0b2tlbnNbMV0udHlwZSBdICkgew0KDQoJCQkJY29udGV4dCA9IEV4cHIuZmluZFsiSUQiXSggdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLCBjb250ZXh0LCB4bWwgKVswXTsNCgkJCQlpZiAoICFjb250ZXh0ICkgew0KCQkJCQlyZXR1cm4gcmVzdWx0czsNCgkJCQl9DQoNCgkJCQlzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS5sZW5ndGggKTsNCgkJCX0NCg0KCQkJLy8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZw0KCQkJZm9yICggaSA9IG1hdGNoRXhwclsiUE9TIl0udGVzdCggc2VsZWN0b3IgKSA/IC0xIDogdG9rZW5zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tICkgew0KCQkJCXRva2VuID0gdG9rZW5zW2ldOw0KDQoJCQkJLy8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvcg0KCQkJCWlmICggRXhwci5yZWxhdGl2ZVsgKHR5cGUgPSB0b2tlbi50eXBlKSBdICkgew0KCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJaWYgKCAoZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdKSApIHsNCgkJCQkJLy8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzDQoJCQkJCWlmICggKHNlZWQgPSBmaW5kKA0KCQkJCQkJdG9rZW4ubWF0Y2hlc1swXS5yZXBsYWNlKCByYmFja3NsYXNoLCAiIiApLA0KCQkJCQkJcnNpYmxpbmcudGVzdCggdG9rZW5zWzBdLnR5cGUgKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dCwNCgkJCQkJCXhtbA0KCQkJCQkpKSApIHsNCg0KCQkJCQkJLy8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5DQoJCQkJCQl0b2tlbnMuc3BsaWNlKCBpLCAxICk7DQoJCQkJCQlzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRva2Vucy5qb2luKCIiKTsNCgkJCQkJCWlmICggIXNlbGVjdG9yICkgew0KCQkJCQkJCXB1c2guYXBwbHkoIHJlc3VsdHMsIHNsaWNlLmNhbGwoIHNlZWQsIDAgKSApOw0KCQkJCQkJCXJldHVybiByZXN1bHRzOw0KCQkJCQkJfQ0KDQoJCQkJCQlicmVhazsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24NCgkvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlDQoJY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkoDQoJCXNlZWQsDQoJCWNvbnRleHQsDQoJCXhtbCwNCgkJcmVzdWx0cywNCgkJcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKQ0KCSk7DQoJcmV0dXJuIHJlc3VsdHM7DQp9DQoNCmlmICggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApIHsNCgkoZnVuY3Rpb24oKSB7DQoJCXZhciBkaXNjb25uZWN0ZWRNYXRjaCwNCgkJCW9sZFNlbGVjdCA9IHNlbGVjdCwNCgkJCXJlc2NhcGUgPSAvJ3xcXC9nLA0KCQkJcmF0dHJpYnV0ZVF1b3RlcyA9IC9cPVtceDIwXHRcclxuXGZdKihbXiciXF1dKilbXHgyMFx0XHJcblxmXSpcXS9nLA0KDQoJCQkvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKSwgbm8gbmVlZCB0byBhbHNvIGFkZCB0byBidWdneU1hdGNoZXMgc2luY2UgbWF0Y2hlcyBjaGVja3MgYnVnZ3lRU0ENCgkJCS8vIEEgc3VwcG9ydCB0ZXN0IHdvdWxkIHJlcXVpcmUgdG9vIG11Y2ggY29kZSAod291bGQgaW5jbHVkZSBkb2N1bWVudCByZWFkeSkNCgkJCXJidWdneVFTQSA9IFsgIjpmb2N1cyIgXSwNCg0KCQkJLy8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSkNCgkJCS8vIEEgc3VwcG9ydCB0ZXN0IHdvdWxkIHJlcXVpcmUgdG9vIG11Y2ggY29kZSAod291bGQgaW5jbHVkZSBkb2N1bWVudCByZWFkeSkNCgkJCS8vIGp1c3Qgc2tpcCBtYXRjaGVzU2VsZWN0b3IgZm9yIDphY3RpdmUNCgkJCXJidWdneU1hdGNoZXMgPSBbICI6YWN0aXZlIiBdLA0KCQkJbWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlc1NlbGVjdG9yIHx8DQoJCQkJZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHwNCgkJCQlkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fA0KCQkJCWRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fA0KCQkJCWRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3I7DQoNCgkJLy8gQnVpbGQgUVNBIHJlZ2V4DQoJCS8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmkNCgkJYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7DQoJCQkvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlDQoJCQkvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY3RseQ0KCQkJLy8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsDQoJCQkvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaA0KCQkJLy8gaHR0cDovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTkNCgkJCWRpdi5pbm5lckhUTUwgPSAiPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiI7DQoNCgkJCS8vIElFOCAtIFNvbWUgYm9vbGVhbiBhdHRyaWJ1dGVzIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkNCgkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RoICkgew0KCQkJCXJidWdneVFTQS5wdXNoKCAiXFxbIiArIHdoaXRlc3BhY2UgKyAiKig/OmNoZWNrZWR8ZGlzYWJsZWR8aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIiApOw0KCQkJfQ0KDQoJCQkvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50cw0KCQkJLy8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWQNCgkJCS8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSAoZG8gbm90IHB1dCB0ZXN0cyBhZnRlciB0aGlzIG9uZSkNCgkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aCApIHsNCgkJCQlyYnVnZ3lRU0EucHVzaCgiOmNoZWNrZWQiKTsNCgkJCX0NCgkJfSk7DQoNCgkJYXNzZXJ0KGZ1bmN0aW9uKCBkaXYgKSB7DQoNCgkJCS8vIE9wZXJhIDEwLTEyL0lFOSAtIF49ICQ9ICo9IGFuZCBlbXB0eSB2YWx1ZXMNCgkJCS8vIFNob3VsZCBub3Qgc2VsZWN0IGFueXRoaW5nDQoJCQlkaXYuaW5uZXJIVE1MID0gIjxwIHRlc3Q9Jyc+PC9wPiI7DQoJCQlpZiAoIGRpdi5xdWVyeVNlbGVjdG9yQWxsKCJbdGVzdF49JyddIikubGVuZ3RoICkgew0KCQkJCXJidWdneVFTQS5wdXNoKCAiWypeJF09IiArIHdoaXRlc3BhY2UgKyAiKig/OlwiXCJ8JycpIiApOw0KCQkJfQ0KDQoJCQkvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKQ0KCQkJLy8gSUU4IHRocm93cyBlcnJvciBoZXJlIChkbyBub3QgcHV0IHRlc3RzIGFmdGVyIHRoaXMgb25lKQ0KCQkJZGl2LmlubmVySFRNTCA9ICI8aW5wdXQgdHlwZT0naGlkZGVuJy8+IjsNCgkJCWlmICggIWRpdi5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aCApIHsNCgkJCQlyYnVnZ3lRU0EucHVzaCgiOmVuYWJsZWQiLCAiOmRpc2FibGVkIik7DQoJCQl9DQoJCX0pOw0KDQoJCS8vIHJidWdneVFTQSBhbHdheXMgY29udGFpbnMgOmZvY3VzLCBzbyBubyBuZWVkIGZvciBhIGxlbmd0aCBjaGVjaw0KCQlyYnVnZ3lRU0EgPSAvKiByYnVnZ3lRU0EubGVuZ3RoICYmICovIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCJ8IikgKTsNCg0KCQlzZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQsIHhtbCApIHsNCgkJCS8vIE9ubHkgdXNlIHF1ZXJ5U2VsZWN0b3JBbGwgd2hlbiBub3QgZmlsdGVyaW5nLA0KCQkJLy8gd2hlbiB0aGlzIGlzIG5vdCB4bWwsDQoJCQkvLyBhbmQgd2hlbiBubyBRU0EgYnVncyBhcHBseQ0KCQkJaWYgKCAhc2VlZCAmJiAheG1sICYmICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApIHsNCgkJCQl2YXIgZ3JvdXBzLCBpLA0KCQkJCQlvbGQgPSB0cnVlLA0KCQkJCQluaWQgPSBleHBhbmRvLA0KCQkJCQluZXdDb250ZXh0ID0gY29udGV4dCwNCgkJCQkJbmV3U2VsZWN0b3IgPSBjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIHNlbGVjdG9yOw0KDQoJCQkJLy8gcVNBIHdvcmtzIHN0cmFuZ2VseSBvbiBFbGVtZW50LXJvb3RlZCBxdWVyaWVzDQoJCQkJLy8gV2UgY2FuIHdvcmsgYXJvdW5kIHRoaXMgYnkgc3BlY2lmeWluZyBhbiBleHRyYSBJRCBvbiB0aGUgcm9vdA0KCQkJCS8vIGFuZCB3b3JraW5nIHVwIGZyb20gdGhlcmUgKFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGUgdGVjaG5pcXVlKQ0KCQkJCS8vIElFIDggZG9lc24ndCB3b3JrIG9uIG9iamVjdCBlbGVtZW50cw0KCQkJCWlmICggY29udGV4dC5ub2RlVHlwZSA9PT0gMSAmJiBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09ICJvYmplY3QiICkgew0KCQkJCQlncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTsNCg0KCQkJCQlpZiAoIChvbGQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSgiaWQiKSkgKSB7DQoJCQkJCQluaWQgPSBvbGQucmVwbGFjZSggcmVzY2FwZSwgIlxcJCYiICk7DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQljb250ZXh0LnNldEF0dHJpYnV0ZSggImlkIiwgbmlkICk7DQoJCQkJCX0NCgkJCQkJbmlkID0gIltpZD0nIiArIG5pZCArICInXSAiOw0KDQoJCQkJCWkgPSBncm91cHMubGVuZ3RoOw0KCQkJCQl3aGlsZSAoIGktLSApIHsNCgkJCQkJCWdyb3Vwc1tpXSA9IG5pZCArIGdyb3Vwc1tpXS5qb2luKCIiKTsNCgkJCQkJfQ0KCQkJCQluZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiBjb250ZXh0LnBhcmVudE5vZGUgfHwgY29udGV4dDsNCgkJCQkJbmV3U2VsZWN0b3IgPSBncm91cHMuam9pbigiLCIpOw0KCQkJCX0NCg0KCQkJCWlmICggbmV3U2VsZWN0b3IgKSB7DQoJCQkJCXRyeSB7DQoJCQkJCQlwdXNoLmFwcGx5KCByZXN1bHRzLCBzbGljZS5jYWxsKCBuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoDQoJCQkJCQkJbmV3U2VsZWN0b3INCgkJCQkJCSksIDAgKSApOw0KCQkJCQkJcmV0dXJuIHJlc3VsdHM7DQoJCQkJCX0gY2F0Y2gocXNhRXJyb3IpIHsNCgkJCQkJfSBmaW5hbGx5IHsNCgkJCQkJCWlmICggIW9sZCApIHsNCgkJCQkJCQljb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJcmV0dXJuIG9sZFNlbGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQsIHhtbCApOw0KCQl9Ow0KDQoJCWlmICggbWF0Y2hlcyApIHsNCgkJCWFzc2VydChmdW5jdGlvbiggZGl2ICkgew0KCQkJCS8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3Rvcg0KCQkJCS8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpDQoJCQkJZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGRpdiwgImRpdiIgKTsNCg0KCQkJCS8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb24NCgkJCQkvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkDQoJCQkJdHJ5IHsNCgkJCQkJbWF0Y2hlcy5jYWxsKCBkaXYsICJbdGVzdCE9JyddOnNpenpsZSIgKTsNCgkJCQkJcmJ1Z2d5TWF0Y2hlcy5wdXNoKCAiIT0iLCBwc2V1ZG9zICk7DQoJCQkJfSBjYXRjaCAoIGUgKSB7fQ0KCQkJfSk7DQoNCgkJCS8vIHJidWdneU1hdGNoZXMgYWx3YXlzIGNvbnRhaW5zIDphY3RpdmUgYW5kIDpmb2N1cywgc28gbm8gbmVlZCBmb3IgYSBsZW5ndGggY2hlY2sNCgkJCXJidWdneU1hdGNoZXMgPSAvKiByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiAqLyBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oInwiKSApOw0KDQoJCQlTaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7DQoJCQkJLy8gTWFrZSBzdXJlIHRoYXQgYXR0cmlidXRlIHNlbGVjdG9ycyBhcmUgcXVvdGVkDQoJCQkJZXhwciA9IGV4cHIucmVwbGFjZSggcmF0dHJpYnV0ZVF1b3RlcywgIj0nJDEnXSIgKTsNCg0KCQkJCS8vIHJidWdneU1hdGNoZXMgYWx3YXlzIGNvbnRhaW5zIDphY3RpdmUsIHNvIG5vIG5lZWQgZm9yIGFuIGV4aXN0ZW5jZSBjaGVjaw0KCQkJCWlmICggIWlzWE1MKCBlbGVtICkgJiYgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICYmICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgew0KCQkJCQl0cnkgew0KCQkJCQkJdmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApOw0KDQoJCQkJCQkvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzDQoJCQkJCQlpZiAoIHJldCB8fCBkaXNjb25uZWN0ZWRNYXRjaCB8fA0KCQkJCQkJCQkvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudA0KCQkJCQkJCQkvLyBmcmFnbWVudCBpbiBJRSA5DQoJCQkJCQkJCWVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7DQoJCQkJCQkJcmV0dXJuIHJldDsNCgkJCQkJCX0NCgkJCQkJfSBjYXRjaChlKSB7fQ0KCQkJCX0NCg0KCQkJCXJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDsNCgkJCX07DQoJCX0NCgl9KSgpOw0KfQ0KDQovLyBEZXByZWNhdGVkDQpFeHByLnBzZXVkb3NbIm50aCJdID0gRXhwci5wc2V1ZG9zWyJlcSJdOw0KDQovLyBCYWNrLWNvbXBhdA0KZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9DQpFeHByLmZpbHRlcnMgPSBzZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIucHNldWRvczsNCkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7DQoNCi8vIE92ZXJyaWRlIHNpenpsZSBhdHRyaWJ1dGUgcmV0cmlldmFsClNpenpsZS5hdHRyID0galF1ZXJ5LmF0dHI7CmpRdWVyeS5maW5kID0gU2l6emxlOwpqUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7CmpRdWVyeS5leHByWyI6Il0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zOwpqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7CmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7CmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDsKalF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zOwoNCg0KfSkoIHdpbmRvdyApOw0KdmFyIHJ1bnRpbCA9IC9VbnRpbCQvLAoJcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sCglpc1NpbXBsZSA9IC9eLlteOiNcW1wuLF0qJC8sCglybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LAoJLy8gbWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXQKCWd1YXJhbnRlZWRVbmlxdWUgPSB7CgkJY2hpbGRyZW46IHRydWUsCgkJY29udGVudHM6IHRydWUsCgkJbmV4dDogdHJ1ZSwKCQlwcmV2OiB0cnVlCgl9OwoKalF1ZXJ5LmZuLmV4dGVuZCh7CglmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJdmFyIGksIGwsIGxlbmd0aCwgbiwgciwgcmV0LAoJCQlzZWxmID0gdGhpczsKCgkJaWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09ICJzdHJpbmciICkgewoJCQlyZXR1cm4galF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlcihmdW5jdGlvbigpIHsKCQkJCWZvciAoIGkgPSAwLCBsID0gc2VsZi5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCQkJaWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkgewoJCQkJCQlyZXR1cm4gdHJ1ZTsKCQkJCQl9CgkJCQl9CgkJCX0pOwoJCX0KCgkJcmV0ID0gdGhpcy5wdXNoU3RhY2soICIiLCAiZmluZCIsIHNlbGVjdG9yICk7CgoJCWZvciAoIGkgPSAwLCBsID0gdGhpcy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7CgkJCWxlbmd0aCA9IHJldC5sZW5ndGg7CgkJCWpRdWVyeS5maW5kKCBzZWxlY3RvciwgdGhpc1tpXSwgcmV0ICk7CgoJCQlpZiAoIGkgPiAwICkgewoJCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHJlc3VsdHMgYXJlIHVuaXF1ZQoJCQkJZm9yICggbiA9IGxlbmd0aDsgbiA8IHJldC5sZW5ndGg7IG4rKyApIHsKCQkJCQlmb3IgKCByID0gMDsgciA8IGxlbmd0aDsgcisrICkgewoJCQkJCQlpZiAoIHJldFtyXSA9PT0gcmV0W25dICkgewoJCQkJCQkJcmV0LnNwbGljZShuLS0sIDEpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiByZXQ7Cgl9LAoKCWhhczogZnVuY3Rpb24oIHRhcmdldCApIHsKCQl2YXIgaSwKCQkJdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksCgkJCWxlbiA9IHRhcmdldHMubGVuZ3RoOwoKCQlyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKSB7CgkJCWZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7CgkJCQlpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1tpXSApICkgewoJCQkJCXJldHVybiB0cnVlOwoJCQkJfQoJCQl9CgkJfSk7Cgl9LAoKCW5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCBmYWxzZSksICJub3QiLCBzZWxlY3Rvcik7Cgl9LAoKCWZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KHRoaXMsIHNlbGVjdG9yLCB0cnVlKSwgImZpbHRlciIsIHNlbGVjdG9yICk7Cgl9LAoKCWlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJcmV0dXJuICEhc2VsZWN0b3IgJiYgKAoJCQl0eXBlb2Ygc2VsZWN0b3IgPT09ICJzdHJpbmciID8KCQkJCS8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXQKCQkJCS8vIHNvICQoInA6Zmlyc3QiKS5pcygicDpsYXN0Iikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvICJwIi4KCQkJCXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/CgkJCQkJalF1ZXJ5KCBzZWxlY3RvciwgdGhpcy5jb250ZXh0ICkuaW5kZXgoIHRoaXNbMF0gKSA+PSAwIDoKCQkJCQlqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgdGhpcyApLmxlbmd0aCA+IDAgOgoJCQkJdGhpcy5maWx0ZXIoIHNlbGVjdG9yICkubGVuZ3RoID4gMCApOwoJfSwKCgljbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkgewoJCXZhciBjdXIsCgkJCWkgPSAwLAoJCQlsID0gdGhpcy5sZW5ndGgsCgkJCXJldCA9IFtdLAoJCQlwb3MgPSBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApIHx8IHR5cGVvZiBzZWxlY3RvcnMgIT09ICJzdHJpbmciID8KCQkJCWpRdWVyeSggc2VsZWN0b3JzLCBjb250ZXh0IHx8IHRoaXMuY29udGV4dCApIDoKCQkJCTA7CgoJCWZvciAoIDsgaSA8IGw7IGkrKyApIHsKCQkJY3VyID0gdGhpc1tpXTsKCgkJCXdoaWxlICggY3VyICYmIGN1ci5vd25lckRvY3VtZW50ICYmIGN1ciAhPT0gY29udGV4dCAmJiBjdXIubm9kZVR5cGUgIT09IDExICkgewoJCQkJaWYgKCBwb3MgPyBwb3MuaW5kZXgoY3VyKSA+IC0xIDogalF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKGN1ciwgc2VsZWN0b3JzKSApIHsKCQkJCQlyZXQucHVzaCggY3VyICk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljdXIgPSBjdXIucGFyZW50Tm9kZTsKCQkJfQoJCX0KCgkJcmV0ID0gcmV0Lmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldDsKCgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQsICJjbG9zZXN0Iiwgc2VsZWN0b3JzICk7Cgl9LAoKCS8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4KCS8vIHRoZSBtYXRjaGVkIHNldCBvZiBlbGVtZW50cwoJaW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkgewoKCQkvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudAoJCWlmICggIWVsZW0gKSB7CgkJCXJldHVybiAoIHRoaXNbMF0gJiYgdGhpc1swXS5wYXJlbnROb2RlICkgPyB0aGlzLnByZXZBbGwoKS5sZW5ndGggOiAtMTsKCQl9CgoJCS8vIGluZGV4IGluIHNlbGVjdG9yCgkJaWYgKCB0eXBlb2YgZWxlbSA9PT0gInN0cmluZyIgKSB7CgkJCXJldHVybiBqUXVlcnkuaW5BcnJheSggdGhpc1swXSwgalF1ZXJ5KCBlbGVtICkgKTsKCQl9CgoJCS8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudAoJCXJldHVybiBqUXVlcnkuaW5BcnJheSgKCQkJLy8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkCgkJCWVsZW0uanF1ZXJ5ID8gZWxlbVswXSA6IGVsZW0sIHRoaXMgKTsKCX0sCgoJYWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7CgkJdmFyIHNldCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gInN0cmluZyIgPwoJCQkJalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIDoKCQkJCWpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yICYmIHNlbGVjdG9yLm5vZGVUeXBlID8gWyBzZWxlY3RvciBdIDogc2VsZWN0b3IgKSwKCQkJYWxsID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBzZXQgKTsKCgkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBpc0Rpc2Nvbm5lY3RlZCggc2V0WzBdICkgfHwgaXNEaXNjb25uZWN0ZWQoIGFsbFswXSApID8KCQkJYWxsIDoKCQkJalF1ZXJ5LnVuaXF1ZSggYWxsICkgKTsKCX0sCgoJYWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/CgkJCXRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoc2VsZWN0b3IpCgkJKTsKCX0KfSk7CgpqUXVlcnkuZm4uYW5kU2VsZiA9IGpRdWVyeS5mbi5hZGRCYWNrOwoKLy8gQSBwYWluZnVsbHkgc2ltcGxlIGNoZWNrIHRvIHNlZSBpZiBhbiBlbGVtZW50IGlzIGRpc2Nvbm5lY3RlZAovLyBmcm9tIGEgZG9jdW1lbnQgKHNob3VsZCBiZSBpbXByb3ZlZCwgd2hlcmUgZmVhc2libGUpLgpmdW5jdGlvbiBpc0Rpc2Nvbm5lY3RlZCggbm9kZSApIHsKCXJldHVybiAhbm9kZSB8fCAhbm9kZS5wYXJlbnROb2RlIHx8IG5vZGUucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gMTE7Cn0KCmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkgewoJZG8gewoJCWN1ciA9IGN1clsgZGlyIF07Cgl9IHdoaWxlICggY3VyICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApOwoKCXJldHVybiBjdXI7Cn0KCmpRdWVyeS5lYWNoKHsKCXBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJdmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTsKCQlyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsOwoJfSwKCXBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkuZGlyKCBlbGVtLCAicGFyZW50Tm9kZSIgKTsKCX0sCglwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInBhcmVudE5vZGUiLCB1bnRpbCApOwoJfSwKCW5leHQ6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBzaWJsaW5nKCBlbGVtLCAibmV4dFNpYmxpbmciICk7Cgl9LAoJcHJldjogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIHNpYmxpbmcoIGVsZW0sICJwcmV2aW91c1NpYmxpbmciICk7Cgl9LAoJbmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7CgkJcmV0dXJuIGpRdWVyeS5kaXIoIGVsZW0sICJuZXh0U2libGluZyIgKTsKCX0sCglwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIgKTsKCX0sCgluZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgIm5leHRTaWJsaW5nIiwgdW50aWwgKTsKCX0sCglwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBpLCB1bnRpbCApIHsKCQlyZXR1cm4galF1ZXJ5LmRpciggZWxlbSwgInByZXZpb3VzU2libGluZyIsIHVudGlsICk7Cgl9LAoJc2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkuc2libGluZyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7Cgl9LAoJY2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkuc2libGluZyggZWxlbS5maXJzdENoaWxkICk7Cgl9LAoJY29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJpZnJhbWUiICkgPwoJCQllbGVtLmNvbnRlbnREb2N1bWVudCB8fCBlbGVtLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQgOgoJCQlqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTsKCX0KfSwgZnVuY3Rpb24oIG5hbWUsIGZuICkgewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkgewoJCXZhciByZXQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTsKCgkJaWYgKCAhcnVudGlsLnRlc3QoIG5hbWUgKSApIHsKCQkJc2VsZWN0b3IgPSB1bnRpbDsKCQl9CgoJCWlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSAic3RyaW5nIiApIHsKCQkJcmV0ID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIHJldCApOwoJCX0KCgkJcmV0ID0gdGhpcy5sZW5ndGggPiAxICYmICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gPyBqUXVlcnkudW5pcXVlKCByZXQgKSA6IHJldDsKCgkJaWYgKCB0aGlzLmxlbmd0aCA+IDEgJiYgcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHsKCQkJcmV0ID0gcmV0LnJldmVyc2UoKTsKCQl9CgoJCXJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0LCBuYW1lLCBjb3JlX3NsaWNlLmNhbGwoIGFyZ3VtZW50cyApLmpvaW4oIiwiKSApOwoJfTsKfSk7CgpqUXVlcnkuZXh0ZW5kKHsKCWZpbHRlcjogZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7CgkJaWYgKCBub3QgKSB7CgkJCWV4cHIgPSAiOm5vdCgiICsgZXhwciArICIpIjsKCQl9CgoJCXJldHVybiBlbGVtcy5sZW5ndGggPT09IDEgPwoJCQlqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoZWxlbXNbMF0sIGV4cHIpID8gWyBlbGVtc1swXSBdIDogW10gOgoJCQlqUXVlcnkuZmluZC5tYXRjaGVzKGV4cHIsIGVsZW1zKTsKCX0sCgoJZGlyOiBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHsKCQl2YXIgbWF0Y2hlZCA9IFtdLAoJCQljdXIgPSBlbGVtWyBkaXIgXTsKCgkJd2hpbGUgKCBjdXIgJiYgY3VyLm5vZGVUeXBlICE9PSA5ICYmICh1bnRpbCA9PT0gdW5kZWZpbmVkIHx8IGN1ci5ub2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5KCBjdXIgKS5pcyggdW50aWwgKSkgKSB7CgkJCWlmICggY3VyLm5vZGVUeXBlID09PSAxICkgewoJCQkJbWF0Y2hlZC5wdXNoKCBjdXIgKTsKCQkJfQoJCQljdXIgPSBjdXJbZGlyXTsKCQl9CgkJcmV0dXJuIG1hdGNoZWQ7Cgl9LAoKCXNpYmxpbmc6IGZ1bmN0aW9uKCBuLCBlbGVtICkgewoJCXZhciByID0gW107CgoJCWZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7CgkJCWlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkgewoJCQkJci5wdXNoKCBuICk7CgkJCX0KCQl9CgoJCXJldHVybiByOwoJfQp9KTsKCi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90CmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwga2VlcCApIHsKCgkvLyBDYW4ndCBwYXNzIG51bGwgb3IgdW5kZWZpbmVkIHRvIGluZGV4T2YgaW4gRmlyZWZveCA0CgkvLyBTZXQgdG8gMCB0byBza2lwIHN0cmluZyBjaGVjawoJcXVhbGlmaWVyID0gcXVhbGlmaWVyIHx8IDA7CgoJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7CgkJcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKCQkJdmFyIHJldFZhbCA9ICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKTsKCQkJcmV0dXJuIHJldFZhbCA9PT0ga2VlcDsKCQl9KTsKCgl9IGVsc2UgaWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7CgkJcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKCQkJcmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgPT09IGtlZXA7CgkJfSk7CgoJfSBlbHNlIGlmICggdHlwZW9mIHF1YWxpZmllciA9PT0gInN0cmluZyIgKSB7CgkJdmFyIGZpbHRlcmVkID0galF1ZXJ5LmdyZXAoZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkgewoJCQlyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTsKCQl9KTsKCgkJaWYgKCBpc1NpbXBsZS50ZXN0KCBxdWFsaWZpZXIgKSApIHsKCQkJcmV0dXJuIGpRdWVyeS5maWx0ZXIocXVhbGlmaWVyLCBmaWx0ZXJlZCwgIWtlZXApOwoJCX0gZWxzZSB7CgkJCXF1YWxpZmllciA9IGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZmlsdGVyZWQgKTsKCQl9Cgl9CgoJcmV0dXJuIGpRdWVyeS5ncmVwKGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHsKCQlyZXR1cm4gKCBqUXVlcnkuaW5BcnJheSggZWxlbSwgcXVhbGlmaWVyICkgPj0gMCApID09PSBrZWVwOwoJfSk7Cn0KZnVuY3Rpb24gY3JlYXRlU2FmZUZyYWdtZW50KCBkb2N1bWVudCApIHsKCXZhciBsaXN0ID0gbm9kZU5hbWVzLnNwbGl0KCAifCIgKSwKCXNhZmVGcmFnID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoKCWlmICggc2FmZUZyYWcuY3JlYXRlRWxlbWVudCApIHsKCQl3aGlsZSAoIGxpc3QubGVuZ3RoICkgewoJCQlzYWZlRnJhZy5jcmVhdGVFbGVtZW50KAoJCQkJbGlzdC5wb3AoKQoJCQkpOwoJCX0KCX0KCXJldHVybiBzYWZlRnJhZzsKfQoKdmFyIG5vZGVOYW1lcyA9ICJhYmJyfGFydGljbGV8YXNpZGV8YXVkaW98YmRpfGNhbnZhc3xkYXRhfGRhdGFsaXN0fGRldGFpbHN8ZmlnY2FwdGlvbnxmaWd1cmV8Zm9vdGVyfCIgKwoJCSJoZWFkZXJ8aGdyb3VwfG1hcmt8bWV0ZXJ8bmF2fG91dHB1dHxwcm9ncmVzc3xzZWN0aW9ufHN1bW1hcnl8dGltZXx2aWRlbyIsCglyaW5saW5lalF1ZXJ5ID0gLyBqUXVlcnlcZCs9Iig/Om51bGx8XGQrKSIvZywKCXJsZWFkaW5nV2hpdGVzcGFjZSA9IC9eXHMrLywKCXJ4aHRtbFRhZyA9IC88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksCglydGFnTmFtZSA9IC88KFtcdzpdKykvLAoJcnRib2R5ID0gLzx0Ym9keS9pLAoJcmh0bWwgPSAvPHwmIz9cdys7LywKCXJub0lubmVyaHRtbCA9IC88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksCglybm9jYWNoZSA9IC88KD86c2NyaXB0fG9iamVjdHxlbWJlZHxvcHRpb258c3R5bGUpL2ksCglybm9zaGltY2FjaGUgPSBuZXcgUmVnRXhwKCI8KD86IiArIG5vZGVOYW1lcyArICIpW1xccy8+XSIsICJpIiksCglyY2hlY2thYmxlVHlwZSA9IC9eKD86Y2hlY2tib3h8cmFkaW8pJC8sCgkvLyBjaGVja2VkPSJjaGVja2VkIiBvciBjaGVja2VkCglyY2hlY2tlZCA9IC9jaGVja2VkXHMqKD86W149XXw9XHMqLmNoZWNrZWQuKS9pLAoJcnNjcmlwdFR5cGUgPSAvXC8oamF2YXxlY21hKXNjcmlwdC9pLAoJcmNsZWFuU2NyaXB0ID0gL15ccyo8ISg/OlxbQ0RBVEFcW3xcLVwtKXxbXF1cLV17Mn0+XHMqJC9nLAoJd3JhcE1hcCA9IHsKCQlvcHRpb246IFsgMSwgIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCAiPC9zZWxlY3Q+IiBdLAoJCWxlZ2VuZDogWyAxLCAiPGZpZWxkc2V0PiIsICI8L2ZpZWxkc2V0PiIgXSwKCQl0aGVhZDogWyAxLCAiPHRhYmxlPiIsICI8L3RhYmxlPiIgXSwKCQl0cjogWyAyLCAiPHRhYmxlPjx0Ym9keT4iLCAiPC90Ym9keT48L3RhYmxlPiIgXSwKCQl0ZDogWyAzLCAiPHRhYmxlPjx0Ym9keT48dHI+IiwgIjwvdHI+PC90Ym9keT48L3RhYmxlPiIgXSwKCQljb2w6IFsgMiwgIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwgIjwvY29sZ3JvdXA+PC90YWJsZT4iIF0sCgkJYXJlYTogWyAxLCAiPG1hcD4iLCAiPC9tYXA+IiBdLAoJCV9kZWZhdWx0OiBbIDAsICIiLCAiIiBdCgl9LAoJc2FmZUZyYWdtZW50ID0gY3JlYXRlU2FmZUZyYWdtZW50KCBkb2N1bWVudCApLAoJZnJhZ21lbnREaXYgPSBzYWZlRnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpICk7Cgp3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb247CndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7CndyYXBNYXAudGggPSB3cmFwTWFwLnRkOwoKLy8gSUU2LTggY2FuJ3Qgc2VyaWFsaXplIGxpbmssIHNjcmlwdCwgc3R5bGUsIG9yIGFueSBodG1sNSAoTm9TY29wZSkgdGFncywKLy8gdW5sZXNzIHdyYXBwZWQgaW4gYSBkaXYgd2l0aCBub24tYnJlYWtpbmcgY2hhcmFjdGVycyBpbiBmcm9udCBvZiBpdC4KaWYgKCAhalF1ZXJ5LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZSApIHsKCXdyYXBNYXAuX2RlZmF1bHQgPSBbIDEsICJYPGRpdj4iLCAiPC9kaXY+IiBdOwp9CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCXRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQlyZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewoJCQlyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/CgkJCQlqUXVlcnkudGV4dCggdGhpcyApIDoKCQkJCXRoaXMuZW1wdHkoKS5hcHBlbmQoICggdGhpc1swXSAmJiB0aGlzWzBdLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKS5jcmVhdGVUZXh0Tm9kZSggdmFsdWUgKSApOwoJCX0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Cgl9LAoKCXdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkgewoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCQlqUXVlcnkodGhpcykud3JhcEFsbCggaHRtbC5jYWxsKHRoaXMsIGkpICk7CgkJCX0pOwoJCX0KCgkJaWYgKCB0aGlzWzBdICkgewoJCQkvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZAoJCQl2YXIgd3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1swXS5vd25lckRvY3VtZW50ICkuZXEoMCkuY2xvbmUodHJ1ZSk7CgoJCQlpZiAoIHRoaXNbMF0ucGFyZW50Tm9kZSApIHsKCQkJCXdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWzBdICk7CgkJCX0KCgkJCXdyYXAubWFwKGZ1bmN0aW9uKCkgewoJCQkJdmFyIGVsZW0gPSB0aGlzOwoKCQkJCXdoaWxlICggZWxlbS5maXJzdENoaWxkICYmIGVsZW0uZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQllbGVtID0gZWxlbS5maXJzdENoaWxkOwoJCQkJfQoKCQkJCXJldHVybiBlbGVtOwoJCQl9KS5hcHBlbmQoIHRoaXMgKTsKCQl9CgoJCXJldHVybiB0aGlzOwoJfSwKCgl3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkgewoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCQlqUXVlcnkodGhpcykud3JhcElubmVyKCBodG1sLmNhbGwodGhpcywgaSkgKTsKCQkJfSk7CgkJfQoKCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQl2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLAoJCQkJY29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7CgoJCQlpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHsKCQkJCWNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTsKCgkJCX0gZWxzZSB7CgkJCQlzZWxmLmFwcGVuZCggaHRtbCApOwoJCQl9CgkJfSk7Cgl9LAoKCXdyYXA6IGZ1bmN0aW9uKCBodG1sICkgewoJCXZhciBpc0Z1bmN0aW9uID0galF1ZXJ5LmlzRnVuY3Rpb24oIGh0bWwgKTsKCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCWpRdWVyeSggdGhpcyApLndyYXBBbGwoIGlzRnVuY3Rpb24gPyBodG1sLmNhbGwodGhpcywgaSkgOiBodG1sICk7CgkJfSk7Cgl9LAoKCXVud3JhcDogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpIHsKCQkJaWYgKCAhalF1ZXJ5Lm5vZGVOYW1lKCB0aGlzLCAiYm9keSIgKSApIHsKCQkJCWpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTsKCQkJfQoJCX0pLmVuZCgpOwoJfSwKCglhcHBlbmQ6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywgdHJ1ZSwgZnVuY3Rpb24oIGVsZW0gKSB7CgkJCWlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSApIHsKCQkJCXRoaXMuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKCQkJfQoJCX0pOwoJfSwKCglwcmVwZW5kOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIHRydWUsIGZ1bmN0aW9uKCBlbGVtICkgewoJCQlpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgKSB7CgkJCQl0aGlzLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5maXJzdENoaWxkICk7CgkJCX0KCQl9KTsKCX0sCgoJYmVmb3JlOiBmdW5jdGlvbigpIHsKCQlpZiAoICFpc0Rpc2Nvbm5lY3RlZCggdGhpc1swXSApICkgewoJCQlyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsIGZhbHNlLCBmdW5jdGlvbiggZWxlbSApIHsKCQkJCXRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTsKCQkJfSk7CgkJfQoKCQlpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7CgkJCXZhciBzZXQgPSBqUXVlcnkuY2xlYW4oIGFyZ3VtZW50cyApOwoJCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tZXJnZSggc2V0LCB0aGlzICksICJiZWZvcmUiLCB0aGlzLnNlbGVjdG9yICk7CgkJfQoJfSwKCglhZnRlcjogZnVuY3Rpb24oKSB7CgkJaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKCQkJcmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLCBmYWxzZSwgZnVuY3Rpb24oIGVsZW0gKSB7CgkJCQl0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7CgkJCX0pOwoJCX0KCgkJaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewoJCQl2YXIgc2V0ID0galF1ZXJ5LmNsZWFuKCBhcmd1bWVudHMgKTsKCQkJcmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWVyZ2UoIHRoaXMsIHNldCApLCAiYWZ0ZXIiLCB0aGlzLnNlbGVjdG9yICk7CgkJfQoJfSwKCgkvLyBrZWVwRGF0YSBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHktLWRvIG5vdCBkb2N1bWVudAoJcmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IsIGtlZXBEYXRhICkgewoJCXZhciBlbGVtLAoJCQlpID0gMDsKCgkJZm9yICggOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKCQkJaWYgKCAhc2VsZWN0b3IgfHwgalF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIFsgZWxlbSBdICkubGVuZ3RoICkgewoJCQkJaWYgKCAha2VlcERhdGEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQlqUXVlcnkuY2xlYW5EYXRhKCBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikgKTsKCQkJCQlqUXVlcnkuY2xlYW5EYXRhKCBbIGVsZW0gXSApOwoJCQkJfQoKCQkJCWlmICggZWxlbS5wYXJlbnROb2RlICkgewoJCQkJCWVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApOwoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJZW1wdHk6IGZ1bmN0aW9uKCkgewoJCXZhciBlbGVtLAoJCQlpID0gMDsKCgkJZm9yICggOyAoZWxlbSA9IHRoaXNbaV0pICE9IG51bGw7IGkrKyApIHsKCQkJLy8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzCgkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSApOwoJCQl9CgoJCQkvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2RlcwoJCQl3aGlsZSAoIGVsZW0uZmlyc3RDaGlsZCApIHsKCQkJCWVsZW0ucmVtb3ZlQ2hpbGQoIGVsZW0uZmlyc3RDaGlsZCApOwoJCQl9CgkJfQoKCQlyZXR1cm4gdGhpczsKCX0sCgoJY2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHsKCQlkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzOwoJCWRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50czsKCgkJcmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbiAoKSB7CgkJCXJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7CgkJfSk7Cgl9LAoKCWh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHsKCQlyZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkgewoJCQl2YXIgZWxlbSA9IHRoaXNbMF0gfHwge30sCgkJCQlpID0gMCwKCQkJCWwgPSB0aGlzLmxlbmd0aDsKCgkJCWlmICggdmFsdWUgPT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxID8KCQkJCQllbGVtLmlubmVySFRNTC5yZXBsYWNlKCByaW5saW5lalF1ZXJ5LCAiIiApIDoKCQkJCQl1bmRlZmluZWQ7CgkJCX0KCgkJCS8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUwKCQkJaWYgKCB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJgoJCQkJKCBqUXVlcnkuc3VwcG9ydC5odG1sU2VyaWFsaXplIHx8ICFybm9zaGltY2FjaGUudGVzdCggdmFsdWUgKSAgKSAmJgoJCQkJKCBqUXVlcnkuc3VwcG9ydC5sZWFkaW5nV2hpdGVzcGFjZSB8fCAhcmxlYWRpbmdXaGl0ZXNwYWNlLnRlc3QoIHZhbHVlICkgKSAmJgoJCQkJIXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIiIsICIiXSApWzFdLnRvTG93ZXJDYXNlKCkgXSApIHsKCgkJCQl2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoIHJ4aHRtbFRhZywgIjwkMT48LyQyPiIgKTsKCgkJCQl0cnkgewoJCQkJCWZvciAoOyBpIDwgbDsgaSsrICkgewoJCQkJCQkvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3MKCQkJCQkJZWxlbSA9IHRoaXNbaV0gfHwge307CgkJCQkJCWlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHsKCQkJCQkJCWpRdWVyeS5jbGVhbkRhdGEoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoICIqIiApICk7CgkJCQkJCQllbGVtLmlubmVySFRNTCA9IHZhbHVlOwoJCQkJCQl9CgkJCQkJfQoKCQkJCQllbGVtID0gMDsKCgkJCQkvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2QKCQkJCX0gY2F0Y2goZSkge30KCQkJfQoKCQkJaWYgKCBlbGVtICkgewoJCQkJdGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTsKCQkJfQoJCX0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7Cgl9LAoKCXJlcGxhY2VXaXRoOiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJaWYgKCAhaXNEaXNjb25uZWN0ZWQoIHRoaXNbMF0gKSApIHsKCQkJLy8gTWFrZSBzdXJlIHRoYXQgdGhlIGVsZW1lbnRzIGFyZSByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUgdGhleSBhcmUgaW5zZXJ0ZWQKCQkJLy8gdGhpcyBjYW4gaGVscCBmaXggcmVwbGFjaW5nIGEgcGFyZW50IHdpdGggY2hpbGQgZWxlbWVudHMKCQkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSApIHsKCQkJCXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oaSkgewoJCQkJCXZhciBzZWxmID0galF1ZXJ5KHRoaXMpLCBvbGQgPSBzZWxmLmh0bWwoKTsKCQkJCQlzZWxmLnJlcGxhY2VXaXRoKCB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBvbGQgKSApOwoJCQkJfSk7CgkJCX0KCgkJCWlmICggdHlwZW9mIHZhbHVlICE9PSAic3RyaW5nIiApIHsKCQkJCXZhbHVlID0galF1ZXJ5KCB2YWx1ZSApLmRldGFjaCgpOwoJCQl9CgoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdmFyIG5leHQgPSB0aGlzLm5leHRTaWJsaW5nLAoJCQkJCXBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTsKCgkJCQlqUXVlcnkoIHRoaXMgKS5yZW1vdmUoKTsKCgkJCQlpZiAoIG5leHQgKSB7CgkJCQkJalF1ZXJ5KG5leHQpLmJlZm9yZSggdmFsdWUgKTsKCQkJCX0gZWxzZSB7CgkJCQkJalF1ZXJ5KHBhcmVudCkuYXBwZW5kKCB2YWx1ZSApOwoJCQkJfQoJCQl9KTsKCQl9CgoJCXJldHVybiB0aGlzLmxlbmd0aCA/CgkJCXRoaXMucHVzaFN0YWNrKCBqUXVlcnkoalF1ZXJ5LmlzRnVuY3Rpb24odmFsdWUpID8gdmFsdWUoKSA6IHZhbHVlKSwgInJlcGxhY2VXaXRoIiwgdmFsdWUgKSA6CgkJCXRoaXM7Cgl9LAoKCWRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkgewoJCXJldHVybiB0aGlzLnJlbW92ZSggc2VsZWN0b3IsIHRydWUgKTsKCX0sCgoJZG9tTWFuaXA6IGZ1bmN0aW9uKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKSB7CgoJCS8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXMKCQlhcmdzID0gW10uY29uY2F0LmFwcGx5KCBbXSwgYXJncyApOwoKCQl2YXIgcmVzdWx0cywgZmlyc3QsIGZyYWdtZW50LCBpTm9DbG9uZSwKCQkJaSA9IDAsCgkJCXZhbHVlID0gYXJnc1swXSwKCQkJc2NyaXB0cyA9IFtdLAoJCQlsID0gdGhpcy5sZW5ndGg7CgoJCS8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdAoJCWlmICggIWpRdWVyeS5zdXBwb3J0LmNoZWNrQ2xvbmUgJiYgbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSAic3RyaW5nIiAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgewoJCQlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJalF1ZXJ5KHRoaXMpLmRvbU1hbmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKCQkJfSk7CgkJfQoKCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKHZhbHVlKSApIHsKCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihpKSB7CgkJCQl2YXIgc2VsZiA9IGpRdWVyeSh0aGlzKTsKCQkJCWFyZ3NbMF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCB0YWJsZSA/IHNlbGYuaHRtbCgpIDogdW5kZWZpbmVkICk7CgkJCQlzZWxmLmRvbU1hbmlwKCBhcmdzLCB0YWJsZSwgY2FsbGJhY2sgKTsKCQkJfSk7CgkJfQoKCQlpZiAoIHRoaXNbMF0gKSB7CgkJCXJlc3VsdHMgPSBqUXVlcnkuYnVpbGRGcmFnbWVudCggYXJncywgdGhpcywgc2NyaXB0cyApOwoJCQlmcmFnbWVudCA9IHJlc3VsdHMuZnJhZ21lbnQ7CgkJCWZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDsKCgkJCWlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7CgkJCQlmcmFnbWVudCA9IGZpcnN0OwoJCQl9CgoJCQlpZiAoIGZpcnN0ICkgewoJCQkJdGFibGUgPSB0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIGZpcnN0LCAidHIiICk7CgoJCQkJLy8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbSBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXAKCQkJCS8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuCgkJCQkvLyBGcmFnbWVudHMgZnJvbSB0aGUgZnJhZ21lbnQgY2FjaGUgbXVzdCBhbHdheXMgYmUgY2xvbmVkIGFuZCBuZXZlciB1c2VkIGluIHBsYWNlLgoJCQkJZm9yICggaU5vQ2xvbmUgPSByZXN1bHRzLmNhY2hlYWJsZSB8fCBsIC0gMTsgaSA8IGw7IGkrKyApIHsKCQkJCQljYWxsYmFjay5jYWxsKAoJCQkJCQl0YWJsZSAmJiBqUXVlcnkubm9kZU5hbWUoIHRoaXNbaV0sICJ0YWJsZSIgKSA/CgkJCQkJCQlmaW5kT3JBcHBlbmQoIHRoaXNbaV0sICJ0Ym9keSIgKSA6CgkJCQkJCQl0aGlzW2ldLAoJCQkJCQlpID09PSBpTm9DbG9uZSA/CgkJCQkJCQlmcmFnbWVudCA6CgkJCQkJCQlqUXVlcnkuY2xvbmUoIGZyYWdtZW50LCB0cnVlLCB0cnVlICkKCQkJCQkpOwoJCQkJfQoJCQl9CgoJCQkvLyBGaXggIzExODA5OiBBdm9pZCBsZWFraW5nIG1lbW9yeQoJCQlmcmFnbWVudCA9IGZpcnN0ID0gbnVsbDsKCgkJCWlmICggc2NyaXB0cy5sZW5ndGggKSB7CgkJCQlqUXVlcnkuZWFjaCggc2NyaXB0cywgZnVuY3Rpb24oIGksIGVsZW0gKSB7CgkJCQkJaWYgKCBlbGVtLnNyYyApIHsKCQkJCQkJaWYgKCBqUXVlcnkuYWpheCApIHsKCQkJCQkJCWpRdWVyeS5hamF4KHsKCQkJCQkJCQl1cmw6IGVsZW0uc3JjLAoJCQkJCQkJCXR5cGU6ICJHRVQiLAoJCQkJCQkJCWRhdGFUeXBlOiAic2NyaXB0IiwKCQkJCQkJCQlhc3luYzogZmFsc2UsCgkJCQkJCQkJZ2xvYmFsOiBmYWxzZSwKCQkJCQkJCQkidGhyb3dzIjogdHJ1ZQoJCQkJCQkJfSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlqUXVlcnkuZXJyb3IoIm5vIGFqYXgiKTsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCWpRdWVyeS5nbG9iYWxFdmFsKCAoIGVsZW0udGV4dCB8fCBlbGVtLnRleHRDb250ZW50IHx8IGVsZW0uaW5uZXJIVE1MIHx8ICIiICkucmVwbGFjZSggcmNsZWFuU2NyaXB0LCAiIiApICk7CgkJCQkJfQoKCQkJCQlpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHsKCQkJCQkJZWxlbS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbGVtICk7CgkJCQkJfQoJCQkJfSk7CgkJCX0KCQl9CgoJCXJldHVybiB0aGlzOwoJfQp9KTsKCmZ1bmN0aW9uIGZpbmRPckFwcGVuZCggZWxlbSwgdGFnICkgewoJcmV0dXJuIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApWzBdIHx8IGVsZW0uYXBwZW5kQ2hpbGQoIGVsZW0ub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCB0YWcgKSApOwp9CgpmdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkgewoKCWlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSB8fCAhalF1ZXJ5Lmhhc0RhdGEoIHNyYyApICkgewoJCXJldHVybjsKCX0KCgl2YXIgdHlwZSwgaSwgbCwKCQlvbGREYXRhID0galF1ZXJ5Ll9kYXRhKCBzcmMgKSwKCQljdXJEYXRhID0galF1ZXJ5Ll9kYXRhKCBkZXN0LCBvbGREYXRhICksCgkJZXZlbnRzID0gb2xkRGF0YS5ldmVudHM7CgoJaWYgKCBldmVudHMgKSB7CgkJZGVsZXRlIGN1ckRhdGEuaGFuZGxlOwoJCWN1ckRhdGEuZXZlbnRzID0ge307CgoJCWZvciAoIHR5cGUgaW4gZXZlbnRzICkgewoJCQlmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHsKCQkJCWpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTsKCQkJfQoJCX0KCX0KCgkvLyBtYWtlIHRoZSBjbG9uZWQgcHVibGljIGRhdGEgb2JqZWN0IGEgY29weSBmcm9tIHRoZSBvcmlnaW5hbAoJaWYgKCBjdXJEYXRhLmRhdGEgKSB7CgkJY3VyRGF0YS5kYXRhID0galF1ZXJ5LmV4dGVuZCgge30sIGN1ckRhdGEuZGF0YSApOwoJfQp9CgpmdW5jdGlvbiBjbG9uZUZpeEF0dHJpYnV0ZXMoIHNyYywgZGVzdCApIHsKCXZhciBub2RlTmFtZTsKCgkvLyBXZSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZyBmb3Igbm9uLUVsZW1lbnRzCglpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7CgkJcmV0dXJuOwoJfQoKCS8vIGNsZWFyQXR0cmlidXRlcyByZW1vdmVzIHRoZSBhdHRyaWJ1dGVzLCB3aGljaCB3ZSBkb24ndCB3YW50LAoJLy8gYnV0IGFsc28gcmVtb3ZlcyB0aGUgYXR0YWNoRXZlbnQgZXZlbnRzLCB3aGljaCB3ZSAqZG8qIHdhbnQKCWlmICggZGVzdC5jbGVhckF0dHJpYnV0ZXMgKSB7CgkJZGVzdC5jbGVhckF0dHJpYnV0ZXMoKTsKCX0KCgkvLyBtZXJnZUF0dHJpYnV0ZXMsIGluIGNvbnRyYXN0LCBvbmx5IG1lcmdlcyBiYWNrIG9uIHRoZQoJLy8gb3JpZ2luYWwgYXR0cmlidXRlcywgbm90IHRoZSBldmVudHMKCWlmICggZGVzdC5tZXJnZUF0dHJpYnV0ZXMgKSB7CgkJZGVzdC5tZXJnZUF0dHJpYnV0ZXMoIHNyYyApOwoJfQoKCW5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOwoKCWlmICggbm9kZU5hbWUgPT09ICJvYmplY3QiICkgewoJCS8vIElFNi0xMCBpbXByb3Blcmx5IGNsb25lcyBjaGlsZHJlbiBvZiBvYmplY3QgZWxlbWVudHMgdXNpbmcgY2xhc3NpZC4KCQkvLyBJRTEwIHRocm93cyBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvciBpZiBwYXJlbnQgaXMgbnVsbCwgIzEyMTMyLgoJCWlmICggZGVzdC5wYXJlbnROb2RlICkgewoJCQlkZXN0Lm91dGVySFRNTCA9IHNyYy5vdXRlckhUTUw7CgkJfQoKCQkvLyBUaGlzIHBhdGggYXBwZWFycyB1bmF2b2lkYWJsZSBmb3IgSUU5LiBXaGVuIGNsb25pbmcgYW4gb2JqZWN0CgkJLy8gZWxlbWVudCBpbiBJRTksIHRoZSBvdXRlckhUTUwgc3RyYXRlZ3kgYWJvdmUgaXMgbm90IHN1ZmZpY2llbnQuCgkJLy8gSWYgdGhlIHNyYyBoYXMgaW5uZXJIVE1MIGFuZCB0aGUgZGVzdGluYXRpb24gZG9lcyBub3QsCgkJLy8gY29weSB0aGUgc3JjLmlubmVySFRNTCBpbnRvIHRoZSBkZXN0LmlubmVySFRNTC4gIzEwMzI0CgkJaWYgKCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lICYmIChzcmMuaW5uZXJIVE1MICYmICFqUXVlcnkudHJpbShkZXN0LmlubmVySFRNTCkpICkgewoJCQlkZXN0LmlubmVySFRNTCA9IHNyYy5pbm5lckhUTUw7CgkJfQoKCX0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSAiaW5wdXQiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7CgkJLy8gSUU2LTggZmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveAoJCS8vIG9yIHJhZGlvIGJ1dHRvbi4gV29yc2UsIElFNi03IGZhaWwgdG8gZ2l2ZSB0aGUgY2xvbmVkIGVsZW1lbnQKCQkvLyBhIGNoZWNrZWQgYXBwZWFyYW5jZSBpZiB0aGUgZGVmYXVsdENoZWNrZWQgdmFsdWUgaXNuJ3QgYWxzbyBzZXQKCgkJZGVzdC5kZWZhdWx0Q2hlY2tlZCA9IGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkOwoKCQkvLyBJRTYtNyBnZXQgY29uZnVzZWQgYW5kIGVuZCB1cCBzZXR0aW5nIHRoZSB2YWx1ZSBvZiBhIGNsb25lZAoJCS8vIGNoZWNrYm94L3JhZGlvIGJ1dHRvbiB0byBhbiBlbXB0eSBzdHJpbmcgaW5zdGVhZCBvZiAib24iCgkJaWYgKCBkZXN0LnZhbHVlICE9PSBzcmMudmFsdWUgKSB7CgkJCWRlc3QudmFsdWUgPSBzcmMudmFsdWU7CgkJfQoKCS8vIElFNi04IGZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkCgkvLyBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9ucwoJfSBlbHNlIGlmICggbm9kZU5hbWUgPT09ICJvcHRpb24iICkgewoJCWRlc3Quc2VsZWN0ZWQgPSBzcmMuZGVmYXVsdFNlbGVjdGVkOwoKCS8vIElFNi04IGZhaWxzIHRvIHNldCB0aGUgZGVmYXVsdFZhbHVlIHRvIHRoZSBjb3JyZWN0IHZhbHVlIHdoZW4KCS8vIGNsb25pbmcgb3RoZXIgdHlwZXMgb2YgaW5wdXQgZmllbGRzCgl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gImlucHV0IiB8fCBub2RlTmFtZSA9PT0gInRleHRhcmVhIiApIHsKCQlkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7CgoJLy8gSUUgYmxhbmtzIGNvbnRlbnRzIHdoZW4gY2xvbmluZyBzY3JpcHRzCgl9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gInNjcmlwdCIgJiYgZGVzdC50ZXh0ICE9PSBzcmMudGV4dCApIHsKCQlkZXN0LnRleHQgPSBzcmMudGV4dDsKCX0KCgkvLyBFdmVudCBkYXRhIGdldHMgcmVmZXJlbmNlZCBpbnN0ZWFkIG9mIGNvcGllZCBpZiB0aGUgZXhwYW5kbwoJLy8gZ2V0cyBjb3BpZWQgdG9vCglkZXN0LnJlbW92ZUF0dHJpYnV0ZSggalF1ZXJ5LmV4cGFuZG8gKTsKfQoKalF1ZXJ5LmJ1aWxkRnJhZ21lbnQgPSBmdW5jdGlvbiggYXJncywgY29udGV4dCwgc2NyaXB0cyApIHsKCXZhciBmcmFnbWVudCwgY2FjaGVhYmxlLCBjYWNoZWhpdCwKCQlmaXJzdCA9IGFyZ3NbIDAgXTsKCgkvLyBTZXQgY29udGV4dCBmcm9tIHdoYXQgbWF5IGNvbWUgaW4gYXMgdW5kZWZpbmVkIG9yIGEgalF1ZXJ5IGNvbGxlY3Rpb24gb3IgYSBub2RlCgkvLyBVcGRhdGVkIHRvIGZpeCAjMTIyNjYgd2hlcmUgYWNjZXNzaW5nIGNvbnRleHRbMF0gY291bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGluIElFOS8xMCAmCgkvLyBhbHNvIGRvdWJsZXMgYXMgZml4IGZvciAjODk1MCB3aGVyZSBwbGFpbiBvYmplY3RzIGNhdXNlZCBjcmVhdGVEb2N1bWVudEZyYWdtZW50IGV4Y2VwdGlvbgoJY29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7Cgljb250ZXh0ID0gIWNvbnRleHQubm9kZVR5cGUgJiYgY29udGV4dFswXSB8fCBjb250ZXh0OwoJY29udGV4dCA9IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0OwoKCS8vIE9ubHkgY2FjaGUgInNtYWxsIiAoMS8yIEtCKSBIVE1MIHN0cmluZ3MgdGhhdCBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGRvY3VtZW50CgkvLyBDbG9uaW5nIG9wdGlvbnMgbG9zZXMgdGhlIHNlbGVjdGVkIHN0YXRlLCBzbyBkb24ndCBjYWNoZSB0aGVtCgkvLyBJRSA2IGRvZXNuJ3QgbGlrZSBpdCB3aGVuIHlvdSBwdXQgPG9iamVjdD4gb3IgPGVtYmVkPiBlbGVtZW50cyBpbiBhIGZyYWdtZW50CgkvLyBBbHNvLCBXZWJLaXQgZG9lcyBub3QgY2xvbmUgJ2NoZWNrZWQnIGF0dHJpYnV0ZXMgb24gY2xvbmVOb2RlLCBzbyBkb24ndCBjYWNoZQoJLy8gTGFzdGx5LCBJRTYsNyw4IHdpbGwgbm90IGNvcnJlY3RseSByZXVzZSBjYWNoZWQgZnJhZ21lbnRzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gdW5rbm93biBlbGVtcyAjMTA1MDEKCWlmICggYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGZpcnN0ID09PSAic3RyaW5nIiAmJiBmaXJzdC5sZW5ndGggPCA1MTIgJiYgY29udGV4dCA9PT0gZG9jdW1lbnQgJiYKCQlmaXJzdC5jaGFyQXQoMCkgPT09ICI8IiAmJiAhcm5vY2FjaGUudGVzdCggZmlyc3QgKSAmJgoJCShqUXVlcnkuc3VwcG9ydC5jaGVja0Nsb25lIHx8ICFyY2hlY2tlZC50ZXN0KCBmaXJzdCApKSAmJgoJCShqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8ICFybm9zaGltY2FjaGUudGVzdCggZmlyc3QgKSkgKSB7CgoJCS8vIE1hcmsgY2FjaGVhYmxlIGFuZCBsb29rIGZvciBhIGhpdAoJCWNhY2hlYWJsZSA9IHRydWU7CgkJZnJhZ21lbnQgPSBqUXVlcnkuZnJhZ21lbnRzWyBmaXJzdCBdOwoJCWNhY2hlaGl0ID0gZnJhZ21lbnQgIT09IHVuZGVmaW5lZDsKCX0KCglpZiAoICFmcmFnbWVudCApIHsKCQlmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwoJCWpRdWVyeS5jbGVhbiggYXJncywgY29udGV4dCwgZnJhZ21lbnQsIHNjcmlwdHMgKTsKCgkJLy8gVXBkYXRlIHRoZSBjYWNoZSwgYnV0IG9ubHkgc3RvcmUgZmFsc2UKCQkvLyB1bmxlc3MgdGhpcyBpcyBhIHNlY29uZCBwYXJzaW5nIG9mIHRoZSBzYW1lIGNvbnRlbnQKCQlpZiAoIGNhY2hlYWJsZSApIHsKCQkJalF1ZXJ5LmZyYWdtZW50c1sgZmlyc3QgXSA9IGNhY2hlaGl0ICYmIGZyYWdtZW50OwoJCX0KCX0KCglyZXR1cm4geyBmcmFnbWVudDogZnJhZ21lbnQsIGNhY2hlYWJsZTogY2FjaGVhYmxlIH07Cn07CgpqUXVlcnkuZnJhZ21lbnRzID0ge307CgpqUXVlcnkuZWFjaCh7CglhcHBlbmRUbzogImFwcGVuZCIsCglwcmVwZW5kVG86ICJwcmVwZW5kIiwKCWluc2VydEJlZm9yZTogImJlZm9yZSIsCglpbnNlcnRBZnRlcjogImFmdGVyIiwKCXJlcGxhY2VBbGw6ICJyZXBsYWNlV2l0aCIKfSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkgewoJalF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7CgkJdmFyIGVsZW1zLAoJCQlpID0gMCwKCQkJcmV0ID0gW10sCgkJCWluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSwKCQkJbCA9IGluc2VydC5sZW5ndGgsCgkJCXBhcmVudCA9IHRoaXMubGVuZ3RoID09PSAxICYmIHRoaXNbMF0ucGFyZW50Tm9kZTsKCgkJaWYgKCAocGFyZW50ID09IG51bGwgfHwgcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSA9PT0gMTEgJiYgcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxKSAmJiBsID09PSAxICkgewoJCQlpbnNlcnRbIG9yaWdpbmFsIF0oIHRoaXNbMF0gKTsKCQkJcmV0dXJuIHRoaXM7CgkJfSBlbHNlIHsKCQkJZm9yICggOyBpIDwgbDsgaSsrICkgewoJCQkJZWxlbXMgPSAoIGkgPiAwID8gdGhpcy5jbG9uZSh0cnVlKSA6IHRoaXMgKS5nZXQoKTsKCQkJCWpRdWVyeSggaW5zZXJ0W2ldIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7CgkJCQlyZXQgPSByZXQuY29uY2F0KCBlbGVtcyApOwoJCQl9CgoJCQlyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCwgbmFtZSwgaW5zZXJ0LnNlbGVjdG9yICk7CgkJfQoJfTsKfSk7CgpmdW5jdGlvbiBnZXRBbGwoIGVsZW0gKSB7CglpZiAoIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKCQlyZXR1cm4gZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSggIioiICk7CgoJfSBlbHNlIGlmICggdHlwZW9mIGVsZW0ucXVlcnlTZWxlY3RvckFsbCAhPT0gInVuZGVmaW5lZCIgKSB7CgkJcmV0dXJuIGVsZW0ucXVlcnlTZWxlY3RvckFsbCggIioiICk7CgoJfSBlbHNlIHsKCQlyZXR1cm4gW107Cgl9Cn0KCi8vIFVzZWQgaW4gY2xlYW4sIGZpeGVzIHRoZSBkZWZhdWx0Q2hlY2tlZCBwcm9wZXJ0eQpmdW5jdGlvbiBmaXhEZWZhdWx0Q2hlY2tlZCggZWxlbSApIHsKCWlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWxlbS50eXBlICkgKSB7CgkJZWxlbS5kZWZhdWx0Q2hlY2tlZCA9IGVsZW0uY2hlY2tlZDsKCX0KfQoKalF1ZXJ5LmV4dGVuZCh7CgljbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkgewoJCXZhciBzcmNFbGVtZW50cywKCQkJZGVzdEVsZW1lbnRzLAoJCQlpLAoJCQljbG9uZTsKCgkJaWYgKCBqUXVlcnkuc3VwcG9ydC5odG1sNUNsb25lIHx8IGpRdWVyeS5pc1hNTERvYyhlbGVtKSB8fCAhcm5vc2hpbWNhY2hlLnRlc3QoICI8IiArIGVsZW0ubm9kZU5hbWUgKyAiPiIgKSApIHsKCQkJY2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApOwoKCQkvLyBJRTw9OCBkb2VzIG5vdCBwcm9wZXJseSBjbG9uZSBkZXRhY2hlZCwgdW5rbm93biBlbGVtZW50IG5vZGVzCgkJfSBlbHNlIHsKCQkJZnJhZ21lbnREaXYuaW5uZXJIVE1MID0gZWxlbS5vdXRlckhUTUw7CgkJCWZyYWdtZW50RGl2LnJlbW92ZUNoaWxkKCBjbG9uZSA9IGZyYWdtZW50RGl2LmZpcnN0Q2hpbGQgKTsKCQl9CgoJCWlmICggKCFqUXVlcnkuc3VwcG9ydC5ub0Nsb25lRXZlbnQgfHwgIWpRdWVyeS5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkKSAmJgoJCQkJKGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEpICYmICFqUXVlcnkuaXNYTUxEb2MoZWxlbSkgKSB7CgkJCS8vIElFIGNvcGllcyBldmVudHMgYm91bmQgdmlhIGF0dGFjaEV2ZW50IHdoZW4gdXNpbmcgY2xvbmVOb2RlLgoJCQkvLyBDYWxsaW5nIGRldGFjaEV2ZW50IG9uIHRoZSBjbG9uZSB3aWxsIGFsc28gcmVtb3ZlIHRoZSBldmVudHMKCQkJLy8gZnJvbSB0aGUgb3JpZ2luYWwuIEluIG9yZGVyIHRvIGdldCBhcm91bmQgdGhpcywgd2UgdXNlIHNvbWUKCQkJLy8gcHJvcHJpZXRhcnkgbWV0aG9kcyB0byBjbGVhciB0aGUgZXZlbnRzLiBUaGFua3MgdG8gTW9vVG9vbHMKCQkJLy8gZ3V5cyBmb3IgdGhpcyBob3RuZXNzLgoKCQkJY2xvbmVGaXhBdHRyaWJ1dGVzKCBlbGVtLCBjbG9uZSApOwoKCQkJLy8gVXNpbmcgU2l6emxlIGhlcmUgaXMgY3Jhenkgc2xvdywgc28gd2UgdXNlIGdldEVsZW1lbnRzQnlUYWdOYW1lIGluc3RlYWQKCQkJc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKCQkJZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApOwoKCQkJLy8gV2VpcmQgaXRlcmF0aW9uIGJlY2F1c2UgSUUgd2lsbCByZXBsYWNlIHRoZSBsZW5ndGggcHJvcGVydHkKCQkJLy8gd2l0aCBhbiBlbGVtZW50IGlmIHlvdSBhcmUgY2xvbmluZyB0aGUgYm9keSBhbmQgb25lIG9mIHRoZQoJCQkvLyBlbGVtZW50cyBvbiB0aGUgcGFnZSBoYXMgYSBuYW1lIG9yIGlkIG9mICJsZW5ndGgiCgkJCWZvciAoIGkgPSAwOyBzcmNFbGVtZW50c1tpXTsgKytpICkgewoJCQkJLy8gRW5zdXJlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIG5vZGUgaXMgbm90IG51bGw7IEZpeGVzICM5NTg3CgkJCQlpZiAoIGRlc3RFbGVtZW50c1tpXSApIHsKCQkJCQljbG9uZUZpeEF0dHJpYnV0ZXMoIHNyY0VsZW1lbnRzW2ldLCBkZXN0RWxlbWVudHNbaV0gKTsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZQoJCWlmICggZGF0YUFuZEV2ZW50cyApIHsKCQkJY2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7CgoJCQlpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkgewoJCQkJc3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTsKCQkJCWRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTsKCgkJCQlmb3IgKCBpID0gMDsgc3JjRWxlbWVudHNbaV07ICsraSApIHsKCQkJCQljbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbaV0sIGRlc3RFbGVtZW50c1tpXSApOwoJCQkJfQoJCQl9CgkJfQoKCQlzcmNFbGVtZW50cyA9IGRlc3RFbGVtZW50cyA9IG51bGw7CgoJCS8vIFJldHVybiB0aGUgY2xvbmVkIHNldAoJCXJldHVybiBjbG9uZTsKCX0sCgoJY2xlYW46IGZ1bmN0aW9uKCBlbGVtcywgY29udGV4dCwgZnJhZ21lbnQsIHNjcmlwdHMgKSB7CgkJdmFyIGksIGosIGVsZW0sIHRhZywgd3JhcCwgZGVwdGgsIGRpdiwgaGFzQm9keSwgdGJvZHksIGxlbiwgaGFuZGxlU2NyaXB0LCBqc1RhZ3MsCgkJCXNhZmUgPSBjb250ZXh0ID09PSBkb2N1bWVudCAmJiBzYWZlRnJhZ21lbnQsCgkJCXJldCA9IFtdOwoKCQkvLyBFbnN1cmUgdGhhdCBjb250ZXh0IGlzIGEgZG9jdW1lbnQKCQlpZiAoICFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPT09ICJ1bmRlZmluZWQiICkgewoJCQljb250ZXh0ID0gZG9jdW1lbnQ7CgkJfQoKCQkvLyBVc2UgdGhlIGFscmVhZHktY3JlYXRlZCBzYWZlIGZyYWdtZW50IGlmIGNvbnRleHQgcGVybWl0cwoJCWZvciAoIGkgPSAwOyAoZWxlbSA9IGVsZW1zW2ldKSAhPSBudWxsOyBpKysgKSB7CgkJCWlmICggdHlwZW9mIGVsZW0gPT09ICJudW1iZXIiICkgewoJCQkJZWxlbSArPSAiIjsKCQkJfQoKCQkJaWYgKCAhZWxlbSApIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgoJCQkvLyBDb252ZXJ0IGh0bWwgc3RyaW5nIGludG8gRE9NIG5vZGVzCgkJCWlmICggdHlwZW9mIGVsZW0gPT09ICJzdHJpbmciICkgewoJCQkJaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkgewoJCQkJCWVsZW0gPSBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICk7CgkJCQl9IGVsc2UgewoJCQkJCS8vIEVuc3VyZSBhIHNhZmUgY29udGFpbmVyIGluIHdoaWNoIHRvIHJlbmRlciB0aGUgaHRtbAoJCQkJCXNhZmUgPSBzYWZlIHx8IGNyZWF0ZVNhZmVGcmFnbWVudCggY29udGV4dCApOwoJCQkJCWRpdiA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CgkJCQkJc2FmZS5hcHBlbmRDaGlsZCggZGl2ICk7CgoJCQkJCS8vIEZpeCAiWEhUTUwiLXN0eWxlIHRhZ3MgaW4gYWxsIGJyb3dzZXJzCgkJCQkJZWxlbSA9IGVsZW0ucmVwbGFjZShyeGh0bWxUYWcsICI8JDE+PC8kMj4iKTsKCgkJCQkJLy8gR28gdG8gaHRtbCBhbmQgYmFjaywgdGhlbiBwZWVsIG9mZiBleHRyYSB3cmFwcGVycwoJCQkJCXRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsiIiwgIiJdIClbMV0udG9Mb3dlckNhc2UoKTsKCQkJCQl3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDsKCQkJCQlkZXB0aCA9IHdyYXBbMF07CgkJCQkJZGl2LmlubmVySFRNTCA9IHdyYXBbMV0gKyBlbGVtICsgd3JhcFsyXTsKCgkJCQkJLy8gTW92ZSB0byB0aGUgcmlnaHQgZGVwdGgKCQkJCQl3aGlsZSAoIGRlcHRoLS0gKSB7CgkJCQkJCWRpdiA9IGRpdi5sYXN0Q2hpbGQ7CgkJCQkJfQoKCQkJCQkvLyBSZW1vdmUgSUUncyBhdXRvaW5zZXJ0ZWQgPHRib2R5PiBmcm9tIHRhYmxlIGZyYWdtZW50cwoJCQkJCWlmICggIWpRdWVyeS5zdXBwb3J0LnRib2R5ICkgewoKCQkJCQkJLy8gU3RyaW5nIHdhcyBhIDx0YWJsZT4sICptYXkqIGhhdmUgc3B1cmlvdXMgPHRib2R5PgoJCQkJCQloYXNCb2R5ID0gcnRib2R5LnRlc3QoZWxlbSk7CgkJCQkJCQl0Ym9keSA9IHRhZyA9PT0gInRhYmxlIiAmJiAhaGFzQm9keSA/CgkJCQkJCQkJZGl2LmZpcnN0Q2hpbGQgJiYgZGl2LmZpcnN0Q2hpbGQuY2hpbGROb2RlcyA6CgoJCQkJCQkJCS8vIFN0cmluZyB3YXMgYSBiYXJlIDx0aGVhZD4gb3IgPHRmb290PgoJCQkJCQkJCXdyYXBbMV0gPT09ICI8dGFibGU+IiAmJiAhaGFzQm9keSA/CgkJCQkJCQkJCWRpdi5jaGlsZE5vZGVzIDoKCQkJCQkJCQkJW107CgoJCQkJCQlmb3IgKCBqID0gdGJvZHkubGVuZ3RoIC0gMTsgaiA+PSAwIDsgLS1qICkgewoJCQkJCQkJaWYgKCBqUXVlcnkubm9kZU5hbWUoIHRib2R5WyBqIF0sICJ0Ym9keSIgKSAmJiAhdGJvZHlbIGogXS5jaGlsZE5vZGVzLmxlbmd0aCApIHsKCQkJCQkJCQl0Ym9keVsgaiBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRib2R5WyBqIF0gKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCgkJCQkJLy8gSUUgY29tcGxldGVseSBraWxscyBsZWFkaW5nIHdoaXRlc3BhY2Ugd2hlbiBpbm5lckhUTUwgaXMgdXNlZAoJCQkJCWlmICggIWpRdWVyeS5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlICYmIHJsZWFkaW5nV2hpdGVzcGFjZS50ZXN0KCBlbGVtICkgKSB7CgkJCQkJCWRpdi5pbnNlcnRCZWZvcmUoIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIHJsZWFkaW5nV2hpdGVzcGFjZS5leGVjKGVsZW0pWzBdICksIGRpdi5maXJzdENoaWxkICk7CgkJCQkJfQoKCQkJCQllbGVtID0gZGl2LmNoaWxkTm9kZXM7CgoJCQkJCS8vIFRha2Ugb3V0IG9mIGZyYWdtZW50IGNvbnRhaW5lciAod2UgbmVlZCBhIGZyZXNoIGRpdiBlYWNoIHRpbWUpCgkJCQkJZGl2LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGRpdiApOwoJCQkJfQoJCQl9CgoJCQlpZiAoIGVsZW0ubm9kZVR5cGUgKSB7CgkJCQlyZXQucHVzaCggZWxlbSApOwoJCQl9IGVsc2UgewoJCQkJalF1ZXJ5Lm1lcmdlKCByZXQsIGVsZW0gKTsKCQkJfQoJCX0KCgkJLy8gRml4ICMxMTM1NjogQ2xlYXIgZWxlbWVudHMgZnJvbSBzYWZlRnJhZ21lbnQKCQlpZiAoIGRpdiApIHsKCQkJZWxlbSA9IGRpdiA9IHNhZmUgPSBudWxsOwoJCX0KCgkJLy8gUmVzZXQgZGVmYXVsdENoZWNrZWQgZm9yIGFueSByYWRpb3MgYW5kIGNoZWNrYm94ZXMKCQkvLyBhYm91dCB0byBiZSBhcHBlbmRlZCB0byB0aGUgRE9NIGluIElFIDYvNyAoIzgwNjApCgkJaWYgKCAhalF1ZXJ5LnN1cHBvcnQuYXBwZW5kQ2hlY2tlZCApIHsKCQkJZm9yICggaSA9IDA7IChlbGVtID0gcmV0W2ldKSAhPSBudWxsOyBpKysgKSB7CgkJCQlpZiAoIGpRdWVyeS5ub2RlTmFtZSggZWxlbSwgImlucHV0IiApICkgewoJCQkJCWZpeERlZmF1bHRDaGVja2VkKCBlbGVtICk7CgkJCQl9IGVsc2UgaWYgKCB0eXBlb2YgZWxlbS5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gInVuZGVmaW5lZCIgKSB7CgkJCQkJalF1ZXJ5LmdyZXAoIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IiksIGZpeERlZmF1bHRDaGVja2VkICk7CgkJCQl9CgkJCX0KCQl9CgoJCS8vIEFwcGVuZCBlbGVtZW50cyB0byBhIHByb3ZpZGVkIGRvY3VtZW50IGZyYWdtZW50CgkJaWYgKCBmcmFnbWVudCApIHsKCQkJLy8gU3BlY2lhbCBoYW5kbGluZyBvZiBlYWNoIHNjcmlwdCBlbGVtZW50CgkJCWhhbmRsZVNjcmlwdCA9IGZ1bmN0aW9uKCBlbGVtICkgewoJCQkJLy8gQ2hlY2sgaWYgd2UgY29uc2lkZXIgaXQgZXhlY3V0YWJsZQoJCQkJaWYgKCAhZWxlbS50eXBlIHx8IHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSApICkgewoJCQkJCS8vIERldGFjaCB0aGUgc2NyaXB0IGFuZCBzdG9yZSBpdCBpbiB0aGUgc2NyaXB0cyBhcnJheSAoaWYgcHJvdmlkZWQpIG9yIHRoZSBmcmFnbWVudAoJCQkJCS8vIFJldHVybiB0cnV0aHkgdG8gaW5kaWNhdGUgdGhhdCBpdCBoYXMgYmVlbiBoYW5kbGVkCgkJCQkJcmV0dXJuIHNjcmlwdHMgPwoJCQkJCQlzY3JpcHRzLnB1c2goIGVsZW0ucGFyZW50Tm9kZSA/IGVsZW0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWxlbSApIDogZWxlbSApIDoKCQkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKCQkJCX0KCQkJfTsKCgkJCWZvciAoIGkgPSAwOyAoZWxlbSA9IHJldFtpXSkgIT0gbnVsbDsgaSsrICkgewoJCQkJLy8gQ2hlY2sgaWYgd2UncmUgZG9uZSBhZnRlciBoYW5kbGluZyBhbiBleGVjdXRhYmxlIHNjcmlwdAoJCQkJaWYgKCAhKCBqUXVlcnkubm9kZU5hbWUoIGVsZW0sICJzY3JpcHQiICkgJiYgaGFuZGxlU2NyaXB0KCBlbGVtICkgKSApIHsKCQkJCQkvLyBBcHBlbmQgdG8gZnJhZ21lbnQgYW5kIGhhbmRsZSBlbWJlZGRlZCBzY3JpcHRzCgkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKTsKCQkJCQlpZiAoIHR5cGVvZiBlbGVtLmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSAidW5kZWZpbmVkIiApIHsKCQkJCQkJLy8gaGFuZGxlU2NyaXB0IGFsdGVycyB0aGUgRE9NLCBzbyB1c2UgalF1ZXJ5Lm1lcmdlIHRvIGVuc3VyZSBzbmFwc2hvdCBpdGVyYXRpb24KCQkJCQkJanNUYWdzID0galF1ZXJ5LmdyZXAoIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpICksIGhhbmRsZVNjcmlwdCApOwoKCQkJCQkJLy8gU3BsaWNlIHRoZSBzY3JpcHRzIGludG8gcmV0IGFmdGVyIHRoZWlyIGZvcm1lciBhbmNlc3RvciBhbmQgYWR2YW5jZSBvdXIgaW5kZXggYmV5b25kIHRoZW0KCQkJCQkJcmV0LnNwbGljZS5hcHBseSggcmV0LCBbaSArIDEsIDBdLmNvbmNhdCgganNUYWdzICkgKTsKCQkJCQkJaSArPSBqc1RhZ3MubGVuZ3RoOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCgkJcmV0dXJuIHJldDsKCX0sCgoJY2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMsIC8qIGludGVybmFsICovIGFjY2VwdERhdGEgKSB7CgkJdmFyIGRhdGEsIGlkLCBlbGVtLCB0eXBlLAoJCQlpID0gMCwKCQkJaW50ZXJuYWxLZXkgPSBqUXVlcnkuZXhwYW5kbywKCQkJY2FjaGUgPSBqUXVlcnkuY2FjaGUsCgkJCWRlbGV0ZUV4cGFuZG8gPSBqUXVlcnkuc3VwcG9ydC5kZWxldGVFeHBhbmRvLAoJCQlzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWw7CgoJCWZvciAoIDsgKGVsZW0gPSBlbGVtc1tpXSkgIT0gbnVsbDsgaSsrICkgewoKCQkJaWYgKCBhY2NlcHREYXRhIHx8IGpRdWVyeS5hY2NlcHREYXRhKCBlbGVtICkgKSB7CgoJCQkJaWQgPSBlbGVtWyBpbnRlcm5hbEtleSBdOwoJCQkJZGF0YSA9IGlkICYmIGNhY2hlWyBpZCBdOwoKCQkJCWlmICggZGF0YSApIHsKCQkJCQlpZiAoIGRhdGEuZXZlbnRzICkgewoJCQkJCQlmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkgewoJCQkJCQkJaWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7CgkJCQkJCQkJalF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApOwoKCQkJCQkJCS8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWQKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJalF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoKCQkJCQkvLyBSZW1vdmUgY2FjaGUgb25seSBpZiBpdCB3YXMgbm90IGFscmVhZHkgcmVtb3ZlZCBieSBqUXVlcnkuZXZlbnQucmVtb3ZlCgkJCQkJaWYgKCBjYWNoZVsgaWQgXSApIHsKCgkJCQkJCWRlbGV0ZSBjYWNoZVsgaWQgXTsKCgkJCQkJCS8vIElFIGRvZXMgbm90IGFsbG93IHVzIHRvIGRlbGV0ZSBleHBhbmRvIHByb3BlcnRpZXMgZnJvbSBub2RlcywKCQkJCQkJLy8gbm9yIGRvZXMgaXQgaGF2ZSBhIHJlbW92ZUF0dHJpYnV0ZSBmdW5jdGlvbiBvbiBEb2N1bWVudCBub2RlczsKCQkJCQkJLy8gd2UgbXVzdCBoYW5kbGUgYWxsIG9mIHRoZXNlIGNhc2VzCgkJCQkJCWlmICggZGVsZXRlRXhwYW5kbyApIHsKCQkJCQkJCWRlbGV0ZSBlbGVtWyBpbnRlcm5hbEtleSBdOwoKCQkJCQkJfSBlbHNlIGlmICggZWxlbS5yZW1vdmVBdHRyaWJ1dGUgKSB7CgkJCQkJCQllbGVtLnJlbW92ZUF0dHJpYnV0ZSggaW50ZXJuYWxLZXkgKTsKCgkJCQkJCX0gZWxzZSB7CgkJCQkJCQllbGVtWyBpbnRlcm5hbEtleSBdID0gbnVsbDsKCQkJCQkJfQoKCQkJCQkJalF1ZXJ5LmRlbGV0ZWRJZHMucHVzaCggaWQgKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9Cn0pOwovLyBMaW1pdCBzY29wZSBwb2xsdXRpb24gZnJvbSBhbnkgZGVwcmVjYXRlZCBBUEkKKGZ1bmN0aW9uKCkgewoKdmFyIG1hdGNoZWQsIGJyb3dzZXI7CgovLyBVc2Ugb2YgalF1ZXJ5LmJyb3dzZXIgaXMgZnJvd25lZCB1cG9uLgovLyBNb3JlIGRldGFpbHM6IGh0dHA6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuYnJvd3NlcgovLyBqUXVlcnkudWFNYXRjaCBtYWludGFpbmVkIGZvciBiYWNrLWNvbXBhdApqUXVlcnkudWFNYXRjaCA9IGZ1bmN0aW9uKCB1YSApIHsKCXVhID0gdWEudG9Mb3dlckNhc2UoKTsKCgl2YXIgbWF0Y2ggPSAvKGNocm9tZSlbIFwvXShbXHcuXSspLy5leGVjKCB1YSApIHx8CgkJLyh3ZWJraXQpWyBcL10oW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAoJCS8ob3BlcmEpKD86Lip2ZXJzaW9ufClbIFwvXShbXHcuXSspLy5leGVjKCB1YSApIHx8CgkJLyhtc2llKSAoW1x3Ll0rKS8uZXhlYyggdWEgKSB8fAoJCXVhLmluZGV4T2YoImNvbXBhdGlibGUiKSA8IDAgJiYgLyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKCB1YSApIHx8CgkJW107CgoJcmV0dXJuIHsKCQlicm93c2VyOiBtYXRjaFsgMSBdIHx8ICIiLAoJCXZlcnNpb246IG1hdGNoWyAyIF0gfHwgIjAiCgl9Owp9OwoKbWF0Y2hlZCA9IGpRdWVyeS51YU1hdGNoKCBuYXZpZ2F0b3IudXNlckFnZW50ICk7CmJyb3dzZXIgPSB7fTsKCmlmICggbWF0Y2hlZC5icm93c2VyICkgewoJYnJvd3NlclsgbWF0Y2hlZC5icm93c2VyIF0gPSB0cnVlOwoJYnJvd3Nlci52ZXJzaW9uID0gbWF0Y2hlZC52ZXJzaW9uOwp9CgovLyBDaHJvbWUgaXMgV2Via2l0LCBidXQgV2Via2l0IGlzIGFsc28gU2FmYXJpLgppZiAoIGJyb3dzZXIuY2hyb21lICkgewoJYnJvd3Nlci53ZWJraXQgPSB0cnVlOwp9IGVsc2UgaWYgKCBicm93c2VyLndlYmtpdCApIHsKCWJyb3dzZXIuc2FmYXJpID0gdHJ1ZTsKfQoKalF1ZXJ5LmJyb3dzZXIgPSBicm93c2VyOwoKalF1ZXJ5LnN1YiA9IGZ1bmN0aW9uKCkgewoJZnVuY3Rpb24galF1ZXJ5U3ViKCBzZWxlY3RvciwgY29udGV4dCApIHsKCQlyZXR1cm4gbmV3IGpRdWVyeVN1Yi5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApOwoJfQoJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgalF1ZXJ5U3ViLCB0aGlzICk7CglqUXVlcnlTdWIuc3VwZXJjbGFzcyA9IHRoaXM7CglqUXVlcnlTdWIuZm4gPSBqUXVlcnlTdWIucHJvdG90eXBlID0gdGhpcygpOwoJalF1ZXJ5U3ViLmZuLmNvbnN0cnVjdG9yID0galF1ZXJ5U3ViOwoJalF1ZXJ5U3ViLnN1YiA9IHRoaXMuc3ViOwoJalF1ZXJ5U3ViLmZuLmluaXQgPSBmdW5jdGlvbiBpbml0KCBzZWxlY3RvciwgY29udGV4dCApIHsKCQlpZiAoIGNvbnRleHQgJiYgY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSAmJiAhKGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnlTdWIpICkgewoJCQljb250ZXh0ID0galF1ZXJ5U3ViKCBjb250ZXh0ICk7CgkJfQoKCQlyZXR1cm4galF1ZXJ5LmZuLmluaXQuY2FsbCggdGhpcywgc2VsZWN0b3IsIGNvbnRleHQsIHJvb3RqUXVlcnlTdWIgKTsKCX07CglqUXVlcnlTdWIuZm4uaW5pdC5wcm90b3R5cGUgPSBqUXVlcnlTdWIuZm47Cgl2YXIgcm9vdGpRdWVyeVN1YiA9IGpRdWVyeVN1Yihkb2N1bWVudCk7CglyZXR1cm4galF1ZXJ5U3ViOwp9OwoKfSkoKTsKdmFyIGN1ckNTUywgaWZyYW1lLCBpZnJhbWVEb2MsCglyYWxwaGEgPSAvYWxwaGFcKFteKV0qXCkvaSwKCXJvcGFjaXR5ID0gL29wYWNpdHk9KFteKV0qKS8sCglycG9zaXRpb24gPSAvXih0b3B8cmlnaHR8Ym90dG9tfGxlZnQpJC8sCgkvLyBzd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlIGV4Y2VwdCAidGFibGUiLCAidGFibGUtY2VsbCIsIG9yICJ0YWJsZS1jYXB0aW9uIgoJLy8gc2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5CglyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sCglybWFyZ2luID0gL15tYXJnaW4vLAoJcm51bXNwbGl0ID0gbmV3IFJlZ0V4cCggIl4oIiArIGNvcmVfcG51bSArICIpKC4qKSQiLCAiaSIgKSwKCXJudW1ub25weCA9IG5ldyBSZWdFeHAoICJeKCIgKyBjb3JlX3BudW0gKyAiKSg/IXB4KVthLXolXSskIiwgImkiICksCglycmVsTnVtID0gbmV3IFJlZ0V4cCggIl4oWy0rXSk9KCIgKyBjb3JlX3BudW0gKyAiKSIsICJpIiApLAoJZWxlbWRpc3BsYXkgPSB7IEJPRFk6ICJibG9jayIgfSwKCgljc3NTaG93ID0geyBwb3NpdGlvbjogImFic29sdXRlIiwgdmlzaWJpbGl0eTogImhpZGRlbiIsIGRpc3BsYXk6ICJibG9jayIgfSwKCWNzc05vcm1hbFRyYW5zZm9ybSA9IHsKCQlsZXR0ZXJTcGFjaW5nOiAwLAoJCWZvbnRXZWlnaHQ6IDQwMAoJfSwKCgljc3NFeHBhbmQgPSBbICJUb3AiLCAiUmlnaHQiLCAiQm90dG9tIiwgIkxlZnQiIF0sCgljc3NQcmVmaXhlcyA9IFsgIldlYmtpdCIsICJPIiwgIk1veiIsICJtcyIgXSwKCglldmVudHNUb2dnbGUgPSBqUXVlcnkuZm4udG9nZ2xlOwoKLy8gcmV0dXJuIGEgY3NzIHByb3BlcnR5IG1hcHBlZCB0byBhIHBvdGVudGlhbGx5IHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eQpmdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggc3R5bGUsIG5hbWUgKSB7CgoJLy8gc2hvcnRjdXQgZm9yIG5hbWVzIHRoYXQgYXJlIG5vdCB2ZW5kb3IgcHJlZml4ZWQKCWlmICggbmFtZSBpbiBzdHlsZSApIHsKCQlyZXR1cm4gbmFtZTsKCX0KCgkvLyBjaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzCgl2YXIgY2FwTmFtZSA9IG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpLAoJCW9yaWdOYW1lID0gbmFtZSwKCQlpID0gY3NzUHJlZml4ZXMubGVuZ3RoOwoKCXdoaWxlICggaS0tICkgewoJCW5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTsKCQlpZiAoIG5hbWUgaW4gc3R5bGUgKSB7CgkJCXJldHVybiBuYW1lOwoJCX0KCX0KCglyZXR1cm4gb3JpZ05hbWU7Cn0KCmZ1bmN0aW9uIGlzSGlkZGVuKCBlbGVtLCBlbCApIHsKCWVsZW0gPSBlbCB8fCBlbGVtOwoJcmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sICJkaXNwbGF5IiApID09PSAibm9uZSIgfHwgIWpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7Cn0KCmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHsKCXZhciBlbGVtLCBkaXNwbGF5LAoJCXZhbHVlcyA9IFtdLAoJCWluZGV4ID0gMCwKCQlsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7CgoJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKCQllbGVtID0gZWxlbWVudHNbIGluZGV4IF07CgkJaWYgKCAhZWxlbS5zdHlsZSApIHsKCQkJY29udGludWU7CgkJfQoJCXZhbHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiICk7CgkJaWYgKCBzaG93ICkgewoJCQkvLyBSZXNldCB0aGUgaW5saW5lIGRpc3BsYXkgb2YgdGhpcyBlbGVtZW50IHRvIGxlYXJuIGlmIGl0IGlzCgkJCS8vIGJlaW5nIGhpZGRlbiBieSBjYXNjYWRlZCBydWxlcyBvciBub3QKCQkJaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiICkgewoJCQkJZWxlbS5zdHlsZS5kaXNwbGF5ID0gIiI7CgkJCX0KCgkJCS8vIFNldCBlbGVtZW50cyB3aGljaCBoYXZlIGJlZW4gb3ZlcnJpZGRlbiB3aXRoIGRpc3BsYXk6IG5vbmUKCQkJLy8gaW4gYSBzdHlsZXNoZWV0IHRvIHdoYXRldmVyIHRoZSBkZWZhdWx0IGJyb3dzZXIgc3R5bGUgaXMKCQkJLy8gZm9yIHN1Y2ggYW4gZWxlbWVudAoJCQlpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgJiYgaXNIaWRkZW4oIGVsZW0gKSApIHsKCQkJCXZhbHVlc1sgaW5kZXggXSA9IGpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBjc3NfZGVmYXVsdERpc3BsYXkoZWxlbS5ub2RlTmFtZSkgKTsKCQkJfQoJCX0gZWxzZSB7CgkJCWRpc3BsYXkgPSBjdXJDU1MoIGVsZW0sICJkaXNwbGF5IiApOwoKCQkJaWYgKCAhdmFsdWVzWyBpbmRleCBdICYmIGRpc3BsYXkgIT09ICJub25lIiApIHsKCQkJCWpRdWVyeS5fZGF0YSggZWxlbSwgIm9sZGRpc3BsYXkiLCBkaXNwbGF5ICk7CgkJCX0KCQl9Cgl9CgoJLy8gU2V0IHRoZSBkaXNwbGF5IG9mIG1vc3Qgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AKCS8vIHRvIGF2b2lkIHRoZSBjb25zdGFudCByZWZsb3cKCWZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7CgkJZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdOwoJCWlmICggIWVsZW0uc3R5bGUgKSB7CgkJCWNvbnRpbnVlOwoJCX0KCQlpZiAoICFzaG93IHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIm5vbmUiIHx8IGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gIiIgKSB7CgkJCWVsZW0uc3R5bGUuZGlzcGxheSA9IHNob3cgPyB2YWx1ZXNbIGluZGV4IF0gfHwgIiIgOiAibm9uZSI7CgkJfQoJfQoKCXJldHVybiBlbGVtZW50czsKfQoKalF1ZXJ5LmZuLmV4dGVuZCh7Cgljc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHsKCQlyZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkgewoJCQlyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/CgkJCQlqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOgoJCQkJalF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApOwoJCX0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApOwoJfSwKCXNob3c6IGZ1bmN0aW9uKCkgewoJCXJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApOwoJfSwKCWhpZGU6IGZ1bmN0aW9uKCkgewoJCXJldHVybiBzaG93SGlkZSggdGhpcyApOwoJfSwKCXRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlLCBmbjIgKSB7CgkJdmFyIGJvb2wgPSB0eXBlb2Ygc3RhdGUgPT09ICJib29sZWFuIjsKCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggc3RhdGUgKSAmJiBqUXVlcnkuaXNGdW5jdGlvbiggZm4yICkgKSB7CgkJCXJldHVybiBldmVudHNUb2dnbGUuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApOwoJCX0KCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJaWYgKCBib29sID8gc3RhdGUgOiBpc0hpZGRlbiggdGhpcyApICkgewoJCQkJalF1ZXJ5KCB0aGlzICkuc2hvdygpOwoJCQl9IGVsc2UgewoJCQkJalF1ZXJ5KCB0aGlzICkuaGlkZSgpOwoJCQl9CgkJfSk7Cgl9Cn0pOwoKalF1ZXJ5LmV4dGVuZCh7CgkvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKCS8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eQoJY3NzSG9va3M6IHsKCQlvcGFjaXR5OiB7CgkJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewoJCQkJaWYgKCBjb21wdXRlZCApIHsKCQkJCQkvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eQoJCQkJCXZhciByZXQgPSBjdXJDU1MoIGVsZW0sICJvcGFjaXR5IiApOwoJCQkJCXJldHVybiByZXQgPT09ICIiID8gIjEiIDogcmV0OwoKCQkJCX0KCQkJfQoJCX0KCX0sCgoJLy8gRXhjbHVkZSB0aGUgZm9sbG93aW5nIGNzcyBwcm9wZXJ0aWVzIHRvIGFkZCBweAoJY3NzTnVtYmVyOiB7CgkJImZpbGxPcGFjaXR5IjogdHJ1ZSwKCQkiZm9udFdlaWdodCI6IHRydWUsCgkJImxpbmVIZWlnaHQiOiB0cnVlLAoJCSJvcGFjaXR5IjogdHJ1ZSwKCQkib3JwaGFucyI6IHRydWUsCgkJIndpZG93cyI6IHRydWUsCgkJInpJbmRleCI6IHRydWUsCgkJInpvb20iOiB0cnVlCgl9LAoKCS8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmUKCS8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWUKCWNzc1Byb3BzOiB7CgkJLy8gbm9ybWFsaXplIGZsb2F0IGNzcyBwcm9wZXJ0eQoJCSJmbG9hdCI6IGpRdWVyeS5zdXBwb3J0LmNzc0Zsb2F0ID8gImNzc0Zsb2F0IiA6ICJzdHlsZUZsb2F0IgoJfSwKCgkvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZQoJc3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7CgkJLy8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzCgkJaWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQoJCXZhciByZXQsIHR5cGUsIGhvb2tzLAoJCQlvcmlnTmFtZSA9IGpRdWVyeS5jYW1lbENhc2UoIG5hbWUgKSwKCQkJc3R5bGUgPSBlbGVtLnN0eWxlOwoKCQluYW1lID0galF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdIHx8ICggalF1ZXJ5LmNzc1Byb3BzWyBvcmlnTmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIHN0eWxlLCBvcmlnTmFtZSApICk7CgoJCS8vIGdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24KCQkvLyBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCB2ZXJzaW9uCgkJaG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07CgoJCS8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZQoJCWlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHsKCQkJdHlwZSA9IHR5cGVvZiB2YWx1ZTsKCgkJCS8vIGNvbnZlcnQgcmVsYXRpdmUgbnVtYmVyIHN0cmluZ3MgKCs9IG9yIC09KSB0byByZWxhdGl2ZSBudW1iZXJzLiAjNzM0NQoJCQlpZiAoIHR5cGUgPT09ICJzdHJpbmciICYmIChyZXQgPSBycmVsTnVtLmV4ZWMoIHZhbHVlICkpICkgewoJCQkJdmFsdWUgPSAoIHJldFsxXSArIDEgKSAqIHJldFsyXSArIHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKSApOwoJCQkJLy8gRml4ZXMgYnVnICM5MjM3CgkJCQl0eXBlID0gIm51bWJlciI7CgkJCX0KCgkJCS8vIE1ha2Ugc3VyZSB0aGF0IE5hTiBhbmQgbnVsbCB2YWx1ZXMgYXJlbid0IHNldC4gU2VlOiAjNzExNgoJCQlpZiAoIHZhbHVlID09IG51bGwgfHwgdHlwZSA9PT0gIm51bWJlciIgJiYgaXNOYU4oIHZhbHVlICkgKSB7CgkJCQlyZXR1cm47CgkJCX0KCgkJCS8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCAncHgnIHRvIHRoZSAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKQoJCQlpZiAoIHR5cGUgPT09ICJudW1iZXIiICYmICFqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdICkgewoJCQkJdmFsdWUgKz0gInB4IjsKCQkJfQoKCQkJLy8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlCgkJCWlmICggIWhvb2tzIHx8ICEoInNldCIgaW4gaG9va3MpIHx8ICh2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkpICE9PSB1bmRlZmluZWQgKSB7CgkJCQkvLyBXcmFwcGVkIHRvIHByZXZlbnQgSUUgZnJvbSB0aHJvd2luZyBlcnJvcnMgd2hlbiAnaW52YWxpZCcgdmFsdWVzIGFyZSBwcm92aWRlZAoJCQkJLy8gRml4ZXMgYnVnICM1NTA5CgkJCQl0cnkgewoJCQkJCXN0eWxlWyBuYW1lIF0gPSB2YWx1ZTsKCQkJCX0gY2F0Y2goZSkge30KCQkJfQoKCQl9IGVsc2UgewoJCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmUKCQkJaWYgKCBob29rcyAmJiAiZ2V0IiBpbiBob29rcyAmJiAocmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSkgIT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiByZXQ7CgkJCX0KCgkJCS8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0CgkJCXJldHVybiBzdHlsZVsgbmFtZSBdOwoJCX0KCX0sCgoJY3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgbnVtZXJpYywgZXh0cmEgKSB7CgkJdmFyIHZhbCwgbnVtLCBob29rcywKCQkJb3JpZ05hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBuYW1lICk7CgoJCS8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZQoJCW5hbWUgPSBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gfHwgKCBqUXVlcnkuY3NzUHJvcHNbIG9yaWdOYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggZWxlbS5zdHlsZSwgb3JpZ05hbWUgKSApOwoKCQkvLyBnZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uCgkJLy8gZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgdmVyc2lvbgoJCWhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdOwoKCQkvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZQoJCWlmICggaG9va3MgJiYgImdldCIgaW4gaG9va3MgKSB7CgkJCXZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTsKCQl9CgoJCS8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0CgkJaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKCQkJdmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lICk7CgkJfQoKCQkvL2NvbnZlcnQgIm5vcm1hbCIgdG8gY29tcHV0ZWQgdmFsdWUKCQlpZiAoIHZhbCA9PT0gIm5vcm1hbCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7CgkJCXZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdOwoJCX0KCgkJLy8gUmV0dXJuLCBjb252ZXJ0aW5nIHRvIG51bWJlciBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpYwoJCWlmICggbnVtZXJpYyB8fCBleHRyYSAhPT0gdW5kZWZpbmVkICkgewoJCQludW0gPSBwYXJzZUZsb2F0KCB2YWwgKTsKCQkJcmV0dXJuIG51bWVyaWMgfHwgalF1ZXJ5LmlzTnVtZXJpYyggbnVtICkgPyBudW0gfHwgMCA6IHZhbDsKCQl9CgkJcmV0dXJuIHZhbDsKCX0sCgoJLy8gQSBtZXRob2QgZm9yIHF1aWNrbHkgc3dhcHBpbmcgaW4vb3V0IENTUyBwcm9wZXJ0aWVzIHRvIGdldCBjb3JyZWN0IGNhbGN1bGF0aW9ucwoJc3dhcDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkgewoJCXZhciByZXQsIG5hbWUsCgkJCW9sZCA9IHt9OwoKCQkvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXMKCQlmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7CgkJCW9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdOwoJCQllbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07CgkJfQoKCQlyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7CgoJCS8vIFJldmVydCB0aGUgb2xkIHZhbHVlcwoJCWZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHsKCQkJZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07CgkJfQoKCQlyZXR1cm4gcmV0OwoJfQp9KTsKCi8vIE5PVEU6IFRvIGFueSBmdXR1cmUgbWFpbnRhaW5lciwgd2UndmUgd2luZG93LmdldENvbXB1dGVkU3R5bGUKLy8gYmVjYXVzZSBqc2RvbSBvbiBub2RlLmpzIHdpbGwgYnJlYWsgd2l0aG91dCBpdC4KaWYgKCB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSApIHsKCWN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCXZhciByZXQsIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsCgkJCWNvbXB1dGVkID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGVsZW0sIG51bGwgKSwKCQkJc3R5bGUgPSBlbGVtLnN0eWxlOwoKCQlpZiAoIGNvbXB1dGVkICkgewoKCQkJLy8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBvbmx5IG5lZWRlZCBmb3IgLmNzcygnZmlsdGVyJykgaW4gSUU5LCBzZWUgIzEyNTM3CgkJCXJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdOwoKCQkJaWYgKCByZXQgPT09ICIiICYmICFqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApICkgewoJCQkJcmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7CgkJCX0KCgkJCS8vIEEgdHJpYnV0ZSB0byB0aGUgImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHMiCgkJCS8vIENocm9tZSA8IDE3IGFuZCBTYWZhcmkgNS4wIHVzZXMgImNvbXB1dGVkIHZhbHVlIiBpbnN0ZWFkIG9mICJ1c2VkIHZhbHVlIiBmb3IgbWFyZ2luLXJpZ2h0CgkJCS8vIFNhZmFyaSA1LjEuNyAoYXQgbGVhc3QpIHJldHVybnMgcGVyY2VudGFnZSBmb3IgYSBsYXJnZXIgc2V0IG9mIHZhbHVlcywgYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscwoJCQkvLyB0aGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6IGh0dHA6Ly9kZXYudzMub3JnL2Nzc3dnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXMKCQkJaWYgKCBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcm1hcmdpbi50ZXN0KCBuYW1lICkgKSB7CgkJCQl3aWR0aCA9IHN0eWxlLndpZHRoOwoJCQkJbWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDsKCQkJCW1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7CgoJCQkJc3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0OwoJCQkJcmV0ID0gY29tcHV0ZWQud2lkdGg7CgoJCQkJc3R5bGUud2lkdGggPSB3aWR0aDsKCQkJCXN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7CgkJCQlzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoOwoJCQl9CgkJfQoKCQlyZXR1cm4gcmV0OwoJfTsKfSBlbHNlIGlmICggZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmN1cnJlbnRTdHlsZSApIHsKCWN1ckNTUyA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkgewoJCXZhciBsZWZ0LCByc0xlZnQsCgkJCXJldCA9IGVsZW0uY3VycmVudFN0eWxlICYmIGVsZW0uY3VycmVudFN0eWxlWyBuYW1lIF0sCgkJCXN0eWxlID0gZWxlbS5zdHlsZTsKCgkJLy8gQXZvaWQgc2V0dGluZyByZXQgdG8gZW1wdHkgc3RyaW5nIGhlcmUKCQkvLyBzbyB3ZSBkb24ndCBkZWZhdWx0IHRvIGF1dG8KCQlpZiAoIHJldCA9PSBudWxsICYmIHN0eWxlICYmIHN0eWxlWyBuYW1lIF0gKSB7CgkJCXJldCA9IHN0eWxlWyBuYW1lIF07CgkJfQoKCQkvLyBGcm9tIHRoZSBhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzCgkJLy8gaHR0cDovL2VyaWsuZWFlLm5ldC9hcmNoaXZlcy8yMDA3LzA3LzI3LzE4LjU0LjE1LyNjb21tZW50LTEwMjI5MQoKCQkvLyBJZiB3ZSdyZSBub3QgZGVhbGluZyB3aXRoIGEgcmVndWxhciBwaXhlbCBudW1iZXIKCQkvLyBidXQgYSBudW1iZXIgdGhhdCBoYXMgYSB3ZWlyZCBlbmRpbmcsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0byBwaXhlbHMKCQkvLyBidXQgbm90IHBvc2l0aW9uIGNzcyBhdHRyaWJ1dGVzLCBhcyB0aG9zZSBhcmUgcHJvcG9ydGlvbmFsIHRvIHRoZSBwYXJlbnQgZWxlbWVudCBpbnN0ZWFkCgkJLy8gYW5kIHdlIGNhbid0IG1lYXN1cmUgdGhlIHBhcmVudCBpbnN0ZWFkIGJlY2F1c2UgaXQgbWlnaHQgdHJpZ2dlciBhICJzdGFja2luZyBkb2xscyIgcHJvYmxlbQoJCWlmICggcm51bW5vbnB4LnRlc3QoIHJldCApICYmICFycG9zaXRpb24udGVzdCggbmFtZSApICkgewoKCQkJLy8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlcwoJCQlsZWZ0ID0gc3R5bGUubGVmdDsKCQkJcnNMZWZ0ID0gZWxlbS5ydW50aW1lU3R5bGUgJiYgZWxlbS5ydW50aW1lU3R5bGUubGVmdDsKCgkJCS8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXQKCQkJaWYgKCByc0xlZnQgKSB7CgkJCQllbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gZWxlbS5jdXJyZW50U3R5bGUubGVmdDsKCQkJfQoJCQlzdHlsZS5sZWZ0ID0gbmFtZSA9PT0gImZvbnRTaXplIiA/ICIxZW0iIDogcmV0OwoJCQlyZXQgPSBzdHlsZS5waXhlbExlZnQgKyAicHgiOwoKCQkJLy8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlcwoJCQlzdHlsZS5sZWZ0ID0gbGVmdDsKCQkJaWYgKCByc0xlZnQgKSB7CgkJCQllbGVtLnJ1bnRpbWVTdHlsZS5sZWZ0ID0gcnNMZWZ0OwoJCQl9CgkJfQoKCQlyZXR1cm4gcmV0ID09PSAiIiA/ICJhdXRvIiA6IHJldDsKCX07Cn0KCmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7Cgl2YXIgbWF0Y2hlcyA9IHJudW1zcGxpdC5leGVjKCB2YWx1ZSApOwoJcmV0dXJuIG1hdGNoZXMgPwoJCQlNYXRoLm1heCggMCwgbWF0Y2hlc1sgMSBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMiBdIHx8ICJweCIgKSA6CgkJCXZhbHVlOwp9CgpmdW5jdGlvbiBhdWdtZW50V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEsIGlzQm9yZGVyQm94ICkgewoJdmFyIGkgPSBleHRyYSA9PT0gKCBpc0JvcmRlckJveCA/ICJib3JkZXIiIDogImNvbnRlbnQiICkgPwoJCS8vIElmIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmlnaHQgbWVhc3VyZW1lbnQsIGF2b2lkIGF1Z21lbnRhdGlvbgoJCTQgOgoJCS8vIE90aGVyd2lzZSBpbml0aWFsaXplIGZvciBob3Jpem9udGFsIG9yIHZlcnRpY2FsIHByb3BlcnRpZXMKCQluYW1lID09PSAid2lkdGgiID8gMSA6IDAsCgoJCXZhbCA9IDA7CgoJZm9yICggOyBpIDwgNDsgaSArPSAyICkgewoJCS8vIGJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpbiwgc28gYWRkIGl0IGlmIHdlIHdhbnQgaXQKCQlpZiAoIGV4dHJhID09PSAibWFyZ2luIiApIHsKCQkJLy8gd2UgdXNlIGpRdWVyeS5jc3MgaW5zdGVhZCBvZiBjdXJDU1MgaGVyZQoJCQkvLyBiZWNhdXNlIG9mIHRoZSByZWxpYWJsZU1hcmdpblJpZ2h0IENTUyBob29rIQoJCQl2YWwgKz0galF1ZXJ5LmNzcyggZWxlbSwgZXh0cmEgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSApOwoJCX0KCgkJLy8gRnJvbSB0aGlzIHBvaW50IG9uIHdlIHVzZSBjdXJDU1MgZm9yIG1heGltdW0gcGVyZm9ybWFuY2UgKHJlbGV2YW50IGluIGFuaW1hdGlvbnMpCgkJaWYgKCBpc0JvcmRlckJveCApIHsKCQkJLy8gYm9yZGVyLWJveCBpbmNsdWRlcyBwYWRkaW5nLCBzbyByZW1vdmUgaXQgaWYgd2Ugd2FudCBjb250ZW50CgkJCWlmICggZXh0cmEgPT09ICJjb250ZW50IiApIHsKCQkJCXZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJwYWRkaW5nIiArIGNzc0V4cGFuZFsgaSBdICkgKSB8fCAwOwoJCQl9CgoJCQkvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBib3JkZXIgbm9yIG1hcmdpbiwgc28gcmVtb3ZlIGJvcmRlcgoJCQlpZiAoIGV4dHJhICE9PSAibWFyZ2luIiApIHsKCQkJCXZhbCAtPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiICkgKSB8fCAwOwoJCQl9CgkJfSBlbHNlIHsKCQkJLy8gYXQgdGhpcyBwb2ludCwgZXh0cmEgaXNuJ3QgY29udGVudCwgc28gYWRkIHBhZGRpbmcKCQkJdmFsICs9IHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgInBhZGRpbmciICsgY3NzRXhwYW5kWyBpIF0gKSApIHx8IDA7CgoJCQkvLyBhdCB0aGlzIHBvaW50LCBleHRyYSBpc24ndCBjb250ZW50IG5vciBwYWRkaW5nLCBzbyBhZGQgYm9yZGVyCgkJCWlmICggZXh0cmEgIT09ICJwYWRkaW5nIiApIHsKCQkJCXZhbCArPSBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sICJib3JkZXIiICsgY3NzRXhwYW5kWyBpIF0gKyAiV2lkdGgiICkgKSB8fCAwOwoJCQl9CgkJfQoJfQoKCXJldHVybiB2YWw7Cn0KCmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICkgewoKCS8vIFN0YXJ0IHdpdGggb2Zmc2V0IHByb3BlcnR5LCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSBib3JkZXItYm94IHZhbHVlCgl2YXIgdmFsID0gbmFtZSA9PT0gIndpZHRoIiA/IGVsZW0ub2Zmc2V0V2lkdGggOiBlbGVtLm9mZnNldEhlaWdodCwKCQl2YWx1ZUlzQm9yZGVyQm94ID0gdHJ1ZSwKCQlpc0JvcmRlckJveCA9IGpRdWVyeS5zdXBwb3J0LmJveFNpemluZyAmJiBqUXVlcnkuY3NzKCBlbGVtLCAiYm94U2l6aW5nIiApID09PSAiYm9yZGVyLWJveCI7CgoJLy8gc29tZSBub24taHRtbCBlbGVtZW50cyByZXR1cm4gdW5kZWZpbmVkIGZvciBvZmZzZXRXaWR0aCwgc28gY2hlY2sgZm9yIG51bGwvdW5kZWZpbmVkCgkvLyBzdmcgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02NDkyODUKCS8vIE1hdGhNTCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTQ5MTY2OAoJaWYgKCB2YWwgPD0gMCB8fCB2YWwgPT0gbnVsbCApIHsKCQkvLyBGYWxsIGJhY2sgdG8gY29tcHV0ZWQgdGhlbiB1bmNvbXB1dGVkIGNzcyBpZiBuZWNlc3NhcnkKCQl2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUgKTsKCQlpZiAoIHZhbCA8IDAgfHwgdmFsID09IG51bGwgKSB7CgkJCXZhbCA9IGVsZW0uc3R5bGVbIG5hbWUgXTsKCQl9CgoJCS8vIENvbXB1dGVkIHVuaXQgaXMgbm90IHBpeGVscy4gU3RvcCBoZXJlIGFuZCByZXR1cm4uCgkJaWYgKCBybnVtbm9ucHgudGVzdCh2YWwpICkgewoJCQlyZXR1cm4gdmFsOwoJCX0KCgkJLy8gd2UgbmVlZCB0aGUgY2hlY2sgZm9yIHN0eWxlIGluIGNhc2UgYSBicm93c2VyIHdoaWNoIHJldHVybnMgdW5yZWxpYWJsZSB2YWx1ZXMKCQkvLyBmb3IgZ2V0Q29tcHV0ZWRTdHlsZSBzaWxlbnRseSBmYWxscyBiYWNrIHRvIHRoZSByZWxpYWJsZSBlbGVtLnN0eWxlCgkJdmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94ICYmICggalF1ZXJ5LnN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUgfHwgdmFsID09PSBlbGVtLnN0eWxlWyBuYW1lIF0gKTsKCgkJLy8gTm9ybWFsaXplICIiLCBhdXRvLCBhbmQgcHJlcGFyZSBmb3IgZXh0cmEKCQl2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwOwoJfQoKCS8vIHVzZSB0aGUgYWN0aXZlIGJveC1zaXppbmcgbW9kZWwgdG8gYWRkL3N1YnRyYWN0IGlycmVsZXZhbnQgc3R5bGVzCglyZXR1cm4gKCB2YWwgKwoJCWF1Z21lbnRXaWR0aE9ySGVpZ2h0KAoJCQllbGVtLAoJCQluYW1lLAoJCQlleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gImJvcmRlciIgOiAiY29udGVudCIgKSwKCQkJdmFsdWVJc0JvcmRlckJveAoJCSkKCSkgKyAicHgiOwp9CgoKLy8gVHJ5IHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBkaXNwbGF5IHZhbHVlIG9mIGFuIGVsZW1lbnQKZnVuY3Rpb24gY3NzX2RlZmF1bHREaXNwbGF5KCBub2RlTmFtZSApIHsKCWlmICggZWxlbWRpc3BsYXlbIG5vZGVOYW1lIF0gKSB7CgkJcmV0dXJuIGVsZW1kaXNwbGF5WyBub2RlTmFtZSBdOwoJfQoKCXZhciBlbGVtID0galF1ZXJ5KCAiPCIgKyBub2RlTmFtZSArICI+IiApLmFwcGVuZFRvKCBkb2N1bWVudC5ib2R5ICksCgkJZGlzcGxheSA9IGVsZW0uY3NzKCJkaXNwbGF5Iik7CgllbGVtLnJlbW92ZSgpOwoKCS8vIElmIHRoZSBzaW1wbGUgd2F5IGZhaWxzLAoJLy8gZ2V0IGVsZW1lbnQncyByZWFsIGRlZmF1bHQgZGlzcGxheSBieSBhdHRhY2hpbmcgaXQgdG8gYSB0ZW1wIGlmcmFtZQoJaWYgKCBkaXNwbGF5ID09PSAibm9uZSIgfHwgZGlzcGxheSA9PT0gIiIgKSB7CgkJLy8gVXNlIHRoZSBhbHJlYWR5LWNyZWF0ZWQgaWZyYW1lIGlmIHBvc3NpYmxlCgkJaWZyYW1lID0gZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCgKCQkJaWZyYW1lIHx8IGpRdWVyeS5leHRlbmQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLCB7CgkJCQlmcmFtZUJvcmRlcjogMCwKCQkJCXdpZHRoOiAwLAoJCQkJaGVpZ2h0OiAwCgkJCX0pCgkJKTsKCgkJLy8gQ3JlYXRlIGEgY2FjaGVhYmxlIGNvcHkgb2YgdGhlIGlmcmFtZSBkb2N1bWVudCBvbiBmaXJzdCBjYWxsLgoJCS8vIElFIGFuZCBPcGVyYSB3aWxsIGFsbG93IHVzIHRvIHJldXNlIHRoZSBpZnJhbWVEb2Mgd2l0aG91dCByZS13cml0aW5nIHRoZSBmYWtlIEhUTUwKCQkvLyBkb2N1bWVudCB0byBpdDsgV2ViS2l0ICYgRmlyZWZveCB3b24ndCBhbGxvdyByZXVzaW5nIHRoZSBpZnJhbWUgZG9jdW1lbnQuCgkJaWYgKCAhaWZyYW1lRG9jIHx8ICFpZnJhbWUuY3JlYXRlRWxlbWVudCApIHsKCQkJaWZyYW1lRG9jID0gKCBpZnJhbWUuY29udGVudFdpbmRvdyB8fCBpZnJhbWUuY29udGVudERvY3VtZW50ICkuZG9jdW1lbnQ7CgkJCWlmcmFtZURvYy53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+Iik7CgkJCWlmcmFtZURvYy5jbG9zZSgpOwoJCX0KCgkJZWxlbSA9IGlmcmFtZURvYy5ib2R5LmFwcGVuZENoaWxkKCBpZnJhbWVEb2MuY3JlYXRlRWxlbWVudChub2RlTmFtZSkgKTsKCgkJZGlzcGxheSA9IGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICk7CgkJZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCggaWZyYW1lICk7Cgl9CgoJLy8gU3RvcmUgdGhlIGNvcnJlY3QgZGVmYXVsdCBkaXNwbGF5CgllbGVtZGlzcGxheVsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7CgoJcmV0dXJuIGRpc3BsYXk7Cn0KCmpRdWVyeS5lYWNoKFsgImhlaWdodCIsICJ3aWR0aCIgXSwgZnVuY3Rpb24oIGksIG5hbWUgKSB7CglqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSA9IHsKCQlnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7CgkJCWlmICggY29tcHV0ZWQgKSB7CgkJCQkvLyBjZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW0KCQkJCS8vIGhvd2V2ZXIsIGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSB0aGlzCgkJCQlpZiAoIGVsZW0ub2Zmc2V0V2lkdGggPT09IDAgJiYgcmRpc3BsYXlzd2FwLnRlc3QoIGN1ckNTUyggZWxlbSwgImRpc3BsYXkiICkgKSApIHsKCQkJCQlyZXR1cm4galF1ZXJ5LnN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkgewoJCQkJCQlyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgbmFtZSwgZXh0cmEgKTsKCQkJCQl9KTsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIG5hbWUsIGV4dHJhICk7CgkJCQl9CgkJCX0KCQl9LAoKCQlzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7CgkJCXJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIGV4dHJhID8KCQkJCWF1Z21lbnRXaWR0aE9ySGVpZ2h0KAoJCQkJCWVsZW0sCgkJCQkJbmFtZSwKCQkJCQlleHRyYSwKCQkJCQlqUXVlcnkuc3VwcG9ydC5ib3hTaXppbmcgJiYgalF1ZXJ5LmNzcyggZWxlbSwgImJveFNpemluZyIgKSA9PT0gImJvcmRlci1ib3giCgkJCQkpIDogMAoJCQkpOwoJCX0KCX07Cn0pOwoKaWYgKCAhalF1ZXJ5LnN1cHBvcnQub3BhY2l0eSApIHsKCWpRdWVyeS5jc3NIb29rcy5vcGFjaXR5ID0gewoJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewoJCQkvLyBJRSB1c2VzIGZpbHRlcnMgZm9yIG9wYWNpdHkKCQkJcmV0dXJuIHJvcGFjaXR5LnRlc3QoIChjb21wdXRlZCAmJiBlbGVtLmN1cnJlbnRTdHlsZSA/IGVsZW0uY3VycmVudFN0eWxlLmZpbHRlciA6IGVsZW0uc3R5bGUuZmlsdGVyKSB8fCAiIiApID8KCQkJCSggMC4wMSAqIHBhcnNlRmxvYXQoIFJlZ0V4cC4kMSApICkgKyAiIiA6CgkJCQljb21wdXRlZCA/ICIxIiA6ICIiOwoJCX0sCgoJCXNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkgewoJCQl2YXIgc3R5bGUgPSBlbGVtLnN0eWxlLAoJCQkJY3VycmVudFN0eWxlID0gZWxlbS5jdXJyZW50U3R5bGUsCgkJCQlvcGFjaXR5ID0galF1ZXJ5LmlzTnVtZXJpYyggdmFsdWUgKSA/ICJhbHBoYShvcGFjaXR5PSIgKyB2YWx1ZSAqIDEwMCArICIpIiA6ICIiLAoJCQkJZmlsdGVyID0gY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS5maWx0ZXIgfHwgc3R5bGUuZmlsdGVyIHx8ICIiOwoKCQkJLy8gSUUgaGFzIHRyb3VibGUgd2l0aCBvcGFjaXR5IGlmIGl0IGRvZXMgbm90IGhhdmUgbGF5b3V0CgkJCS8vIEZvcmNlIGl0IGJ5IHNldHRpbmcgdGhlIHpvb20gbGV2ZWwKCQkJc3R5bGUuem9vbSA9IDE7CgoJCQkvLyBpZiBzZXR0aW5nIG9wYWNpdHkgdG8gMSwgYW5kIG5vIG90aGVyIGZpbHRlcnMgZXhpc3QgLSBhdHRlbXB0IHRvIHJlbW92ZSBmaWx0ZXIgYXR0cmlidXRlICM2NjUyCgkJCWlmICggdmFsdWUgPj0gMSAmJiBqUXVlcnkudHJpbSggZmlsdGVyLnJlcGxhY2UoIHJhbHBoYSwgIiIgKSApID09PSAiIiAmJgoJCQkJc3R5bGUucmVtb3ZlQXR0cmlidXRlICkgewoKCQkJCS8vIFNldHRpbmcgc3R5bGUuZmlsdGVyIHRvIG51bGwsICIiICYgIiAiIHN0aWxsIGxlYXZlICJmaWx0ZXI6IiBpbiB0aGUgY3NzVGV4dAoJCQkJLy8gaWYgImZpbHRlcjoiIGlzIHByZXNlbnQgYXQgYWxsLCBjbGVhclR5cGUgaXMgZGlzYWJsZWQsIHdlIHdhbnQgdG8gYXZvaWQgdGhpcwoJCQkJLy8gc3R5bGUucmVtb3ZlQXR0cmlidXRlIGlzIElFIE9ubHksIGJ1dCBzbyBhcHBhcmVudGx5IGlzIHRoaXMgY29kZSBwYXRoLi4uCgkJCQlzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoICJmaWx0ZXIiICk7CgoJCQkJLy8gaWYgdGhlcmUgdGhlcmUgaXMgbm8gZmlsdGVyIHN0eWxlIGFwcGxpZWQgaW4gYSBjc3MgcnVsZSwgd2UgYXJlIGRvbmUKCQkJCWlmICggY3VycmVudFN0eWxlICYmICFjdXJyZW50U3R5bGUuZmlsdGVyICkgewoJCQkJCXJldHVybjsKCQkJCX0KCQkJfQoKCQkJLy8gb3RoZXJ3aXNlLCBzZXQgbmV3IGZpbHRlciB2YWx1ZXMKCQkJc3R5bGUuZmlsdGVyID0gcmFscGhhLnRlc3QoIGZpbHRlciApID8KCQkJCWZpbHRlci5yZXBsYWNlKCByYWxwaGEsIG9wYWNpdHkgKSA6CgkJCQlmaWx0ZXIgKyAiICIgKyBvcGFjaXR5OwoJCX0KCX07Cn0KCi8vIFRoZXNlIGhvb2tzIGNhbm5vdCBiZSBhZGRlZCB1bnRpbCBET00gcmVhZHkgYmVjYXVzZSB0aGUgc3VwcG9ydCB0ZXN0Ci8vIGZvciBpdCBpcyBub3QgcnVuIHVudGlsIGFmdGVyIERPTSByZWFkeQpqUXVlcnkoZnVuY3Rpb24oKSB7CglpZiAoICFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZU1hcmdpblJpZ2h0ICkgewoJCWpRdWVyeS5jc3NIb29rcy5tYXJnaW5SaWdodCA9IHsKCQkJZ2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7CgkJCQkvLyBXZWJLaXQgQnVnIDEzMzQzIC0gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHdyb25nIHZhbHVlIGZvciBtYXJnaW4tcmlnaHQKCQkJCS8vIFdvcmsgYXJvdW5kIGJ5IHRlbXBvcmFyaWx5IHNldHRpbmcgZWxlbWVudCBkaXNwbGF5IHRvIGlubGluZS1ibG9jawoJCQkJcmV0dXJuIGpRdWVyeS5zd2FwKCBlbGVtLCB7ICJkaXNwbGF5IjogImlubGluZS1ibG9jayIgfSwgZnVuY3Rpb24oKSB7CgkJCQkJaWYgKCBjb21wdXRlZCApIHsKCQkJCQkJcmV0dXJuIGN1ckNTUyggZWxlbSwgIm1hcmdpblJpZ2h0IiApOwoJCQkJCX0KCQkJCX0pOwoJCQl9CgkJfTsKCX0KCgkvLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODQKCS8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQKCS8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCB3ZSBqdXN0IGNoZWNrIGZvciBpdCBoZXJlCglpZiAoICFqUXVlcnkuc3VwcG9ydC5waXhlbFBvc2l0aW9uICYmIGpRdWVyeS5mbi5wb3NpdGlvbiApIHsKCQlqUXVlcnkuZWFjaCggWyAidG9wIiwgImxlZnQiIF0sIGZ1bmN0aW9uKCBpLCBwcm9wICkgewoJCQlqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IHsKCQkJCWdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkgewoJCQkJCWlmICggY29tcHV0ZWQgKSB7CgkJCQkJCXZhciByZXQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTsKCQkJCQkJLy8gaWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0CgkJCQkJCXJldHVybiBybnVtbm9ucHgudGVzdCggcmV0ICkgPyBqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyAicHgiIDogcmV0OwoJCQkJCX0KCQkJCX0KCQkJfTsKCQl9KTsKCX0KCn0pOwoKaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewoJalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHsKCQlyZXR1cm4gKCBlbGVtLm9mZnNldFdpZHRoID09PSAwICYmIGVsZW0ub2Zmc2V0SGVpZ2h0ID09PSAwICkgfHwgKCFqUXVlcnkuc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMgJiYgKChlbGVtLnN0eWxlICYmIGVsZW0uc3R5bGUuZGlzcGxheSkgfHwgY3VyQ1NTKCBlbGVtLCAiZGlzcGxheSIgKSkgPT09ICJub25lIik7Cgl9OwoKCWpRdWVyeS5leHByLmZpbHRlcnMudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiAhalF1ZXJ5LmV4cHIuZmlsdGVycy5oaWRkZW4oIGVsZW0gKTsKCX07Cn0KCi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXMKalF1ZXJ5LmVhY2goewoJbWFyZ2luOiAiIiwKCXBhZGRpbmc6ICIiLAoJYm9yZGVyOiAiV2lkdGgiCn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHsKCWpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7CgkJZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7CgkJCXZhciBpLAoKCQkJCS8vIGFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZwoJCQkJcGFydHMgPSB0eXBlb2YgdmFsdWUgPT09ICJzdHJpbmciID8gdmFsdWUuc3BsaXQoIiAiKSA6IFsgdmFsdWUgXSwKCQkJCWV4cGFuZGVkID0ge307CgoJCQlmb3IgKCBpID0gMDsgaSA8IDQ7IGkrKyApIHsKCQkJCWV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID0KCQkJCQlwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07CgkJCX0KCgkJCXJldHVybiBleHBhbmRlZDsKCQl9Cgl9OwoKCWlmICggIXJtYXJnaW4udGVzdCggcHJlZml4ICkgKSB7CgkJalF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjsKCX0KfSk7CnZhciByMjAgPSAvJTIwL2csCglyYnJhY2tldCA9IC9cW1xdJC8sCglyQ1JMRiA9IC9ccj9cbi9nLAoJcmlucHV0ID0gL14oPzpjb2xvcnxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lLWxvY2FsfGVtYWlsfGhpZGRlbnxtb250aHxudW1iZXJ8cGFzc3dvcmR8cmFuZ2V8c2VhcmNofHRlbHx0ZXh0fHRpbWV8dXJsfHdlZWspJC9pLAoJcnNlbGVjdFRleHRhcmVhID0gL14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCXNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7CgkJcmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7Cgl9LAoJc2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLm1hcChmdW5jdGlvbigpewoJCQlyZXR1cm4gdGhpcy5lbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIHRoaXMuZWxlbWVudHMgKSA6IHRoaXM7CgkJfSkKCQkuZmlsdGVyKGZ1bmN0aW9uKCl7CgkJCXJldHVybiB0aGlzLm5hbWUgJiYgIXRoaXMuZGlzYWJsZWQgJiYKCQkJCSggdGhpcy5jaGVja2VkIHx8IHJzZWxlY3RUZXh0YXJlYS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgfHwKCQkJCQlyaW5wdXQudGVzdCggdGhpcy50eXBlICkgKTsKCQl9KQoJCS5tYXAoZnVuY3Rpb24oIGksIGVsZW0gKXsKCQkJdmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpOwoKCQkJcmV0dXJuIHZhbCA9PSBudWxsID8KCQkJCW51bGwgOgoJCQkJalF1ZXJ5LmlzQXJyYXkoIHZhbCApID8KCQkJCQlqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwsIGkgKXsKCQkJCQkJcmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCAiXHJcbiIgKSB9OwoJCQkJCX0pIDoKCQkJCQl7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgIlxyXG4iICkgfTsKCQl9KS5nZXQoKTsKCX0KfSk7CgovL1NlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mCi8va2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nCmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHsKCXZhciBwcmVmaXgsCgkJcyA9IFtdLAoJCWFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCQkvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUKCQkJdmFsdWUgPSBqUXVlcnkuaXNGdW5jdGlvbiggdmFsdWUgKSA/IHZhbHVlKCkgOiAoIHZhbHVlID09IG51bGwgPyAiIiA6IHZhbHVlICk7CgkJCXNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSApOwoJCX07CgoJLy8gU2V0IHRyYWRpdGlvbmFsIHRvIHRydWUgZm9yIGpRdWVyeSA8PSAxLjMuMiBiZWhhdmlvci4KCWlmICggdHJhZGl0aW9uYWwgPT09IHVuZGVmaW5lZCApIHsKCQl0cmFkaXRpb25hbCA9IGpRdWVyeS5hamF4U2V0dGluZ3MgJiYgalF1ZXJ5LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbDsKCX0KCgkvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLgoJaWYgKCBqUXVlcnkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHsKCQkvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHMKCQlqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7CgkJCWFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7CgkJfSk7CgoJfSBlbHNlIHsKCQkvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSAib2xkIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXIKCQkvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS4KCQlmb3IgKCBwcmVmaXggaW4gYSApIHsKCQkJYnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKCQl9Cgl9CgoJLy8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvbgoJcmV0dXJuIHMuam9pbiggIiYiICkucmVwbGFjZSggcjIwLCAiKyIgKTsKfTsKCmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHsKCXZhciBuYW1lOwoKCWlmICggalF1ZXJ5LmlzQXJyYXkoIG9iaiApICkgewoJCS8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLgoJCWpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkgewoJCQlpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkgewoJCQkJLy8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLgoJCQkJYWRkKCBwcmVmaXgsIHYgKTsKCgkJCX0gZWxzZSB7CgkJCQkvLyBJZiBhcnJheSBpdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMKCQkJCS8vIG51bWVyaWMgaW5kZXggdG8gcmVzb2x2ZSBkZXNlcmlhbGl6YXRpb24gYW1iaWd1aXR5IGlzc3Vlcy4KCQkJCS8vIE5vdGUgdGhhdCByYWNrIChhcyBvZiAxLjAuMCkgY2FuJ3QgY3VycmVudGx5IGRlc2VyaWFsaXplCgkJCQkvLyBuZXN0ZWQgYXJyYXlzIHByb3Blcmx5LCBhbmQgYXR0ZW1wdGluZyB0byBkbyBzbyBtYXkgY2F1c2UKCQkJCS8vIGEgc2VydmVyIGVycm9yLiBQb3NzaWJsZSBmaXhlcyBhcmUgdG8gbW9kaWZ5IHJhY2sncwoJCQkJLy8gZGVzZXJpYWxpemF0aW9uIGFsZ29yaXRobSBvciB0byBwcm92aWRlIGFuIG9wdGlvbiBvciBmbGFnCgkJCQkvLyB0byBmb3JjZSBhcnJheSBzZXJpYWxpemF0aW9uIHRvIGJlIHNoYWxsb3cuCgkJCQlidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgKCB0eXBlb2YgdiA9PT0gIm9iamVjdCIgPyBpIDogIiIgKSArICJdIiwgdiwgdHJhZGl0aW9uYWwsIGFkZCApOwoJCQl9CgkJfSk7CgoJfSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIGpRdWVyeS50eXBlKCBvYmogKSA9PT0gIm9iamVjdCIgKSB7CgkJLy8gU2VyaWFsaXplIG9iamVjdCBpdGVtLgoJCWZvciAoIG5hbWUgaW4gb2JqICkgewoJCQlidWlsZFBhcmFtcyggcHJlZml4ICsgIlsiICsgbmFtZSArICJdIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTsKCQl9CgoJfSBlbHNlIHsKCQkvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uCgkJYWRkKCBwcmVmaXgsIG9iaiApOwoJfQp9CnZhcgoJLy8gRG9jdW1lbnQgbG9jYXRpb24KCWFqYXhMb2NQYXJ0cywKCWFqYXhMb2NhdGlvbiwKCglyaGFzaCA9IC8jLiokLywKCXJoZWFkZXJzID0gL14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZywgLy8gSUUgbGVhdmVzIGFuIFxyIGNoYXJhY3RlciBhdCBFT0wKCS8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvbgoJcmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLAoJcm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sCglycHJvdG9jb2wgPSAvXlwvXC8vLAoJcnF1ZXJ5ID0gL1w/LywKCXJzY3JpcHQgPSAvPHNjcmlwdFxiW148XSooPzooPyE8XC9zY3JpcHQ+KTxbXjxdKikqPFwvc2NyaXB0Pi9naSwKCXJ0cyA9IC8oWz8mXSlfPVteJl0qLywKCXJ1cmwgPSAvXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sCgoJLy8gS2VlcCBhIGNvcHkgb2YgdGhlIG9sZCBsb2FkIG1ldGhvZAoJX2xvYWQgPSBqUXVlcnkuZm4ubG9hZCwKCgkvKiBQcmVmaWx0ZXJzCgkgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKQoJICogMikgVGhlc2UgYXJlIGNhbGxlZDoKCSAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnQKCSAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSkKCSAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGUKCSAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCgkgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvICIqIiBpZiBuZWVkZWQKCSAqLwoJcHJlZmlsdGVycyA9IHt9LAoKCS8qIFRyYW5zcG9ydHMgYmluZGluZ3MKCSAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGUKCSAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgIioiIGNhbiBiZSB1c2VkCgkgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byAiKiIgaWYgbmVlZGVkCgkgKi8KCXRyYW5zcG9ydHMgPSB7fSwKCgkvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb24KCWFsbFR5cGVzID0gWyIqLyJdICsgWyIqIl07CgovLyAjODEzOCwgSUUgbWF5IHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIGFjY2Vzc2luZwovLyBhIGZpZWxkIGZyb20gd2luZG93LmxvY2F0aW9uIGlmIGRvY3VtZW50LmRvbWFpbiBoYXMgYmVlbiBzZXQKdHJ5IHsKCWFqYXhMb2NhdGlvbiA9IGxvY2F0aW9uLmhyZWY7Cn0gY2F0Y2goIGUgKSB7CgkvLyBVc2UgdGhlIGhyZWYgYXR0cmlidXRlIG9mIGFuIEEgZWxlbWVudAoJLy8gc2luY2UgSUUgd2lsbCBtb2RpZnkgaXQgZ2l2ZW4gZG9jdW1lbnQubG9jYXRpb24KCWFqYXhMb2NhdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICJhIiApOwoJYWpheExvY2F0aW9uLmhyZWYgPSAiIjsKCWFqYXhMb2NhdGlvbiA9IGFqYXhMb2NhdGlvbi5ocmVmOwp9CgovLyBTZWdtZW50IGxvY2F0aW9uIGludG8gcGFydHMKYWpheExvY1BhcnRzID0gcnVybC5leGVjKCBhamF4TG9jYXRpb24udG9Mb3dlckNhc2UoKSApIHx8IFtdOwoKLy8gQmFzZSAiY29uc3RydWN0b3IiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnQKZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7CgoJLy8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byAiKiIKCXJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkgewoKCQlpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09ICJzdHJpbmciICkgewoJCQlmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uOwoJCQlkYXRhVHlwZUV4cHJlc3Npb24gPSAiKiI7CgkJfQoKCQl2YXIgZGF0YVR5cGUsIGxpc3QsIHBsYWNlQmVmb3JlLAoJCQlkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5zcGxpdCggY29yZV9yc3BhY2UgKSwKCQkJaSA9IDAsCgkJCWxlbmd0aCA9IGRhdGFUeXBlcy5sZW5ndGg7CgoJCWlmICggalF1ZXJ5LmlzRnVuY3Rpb24oIGZ1bmMgKSApIHsKCQkJLy8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvbgoJCQlmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHsKCQkJCWRhdGFUeXBlID0gZGF0YVR5cGVzWyBpIF07CgkJCQkvLyBXZSBjb250cm9sIGlmIHdlJ3JlIGFza2VkIHRvIGFkZCBiZWZvcmUKCQkJCS8vIGFueSBleGlzdGluZyBlbGVtZW50CgkJCQlwbGFjZUJlZm9yZSA9IC9eXCsvLnRlc3QoIGRhdGFUeXBlICk7CgkJCQlpZiAoIHBsYWNlQmVmb3JlICkgewoJCQkJCWRhdGFUeXBlID0gZGF0YVR5cGUuc3Vic3RyKCAxICkgfHwgIioiOwoJCQkJfQoJCQkJbGlzdCA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXTsKCQkJCS8vIHRoZW4gd2UgYWRkIHRvIHRoZSBzdHJ1Y3R1cmUgYWNjb3JkaW5nbHkKCQkJCWxpc3RbIHBsYWNlQmVmb3JlID8gInVuc2hpZnQiIDogInB1c2giIF0oIGZ1bmMgKTsKCQkJfQoJCX0KCX07Cn0KCi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0cwpmdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLAoJCWRhdGFUeXBlIC8qIGludGVybmFsICovLCBpbnNwZWN0ZWQgLyogaW50ZXJuYWwgKi8gKSB7CgoJZGF0YVR5cGUgPSBkYXRhVHlwZSB8fCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdOwoJaW5zcGVjdGVkID0gaW5zcGVjdGVkIHx8IHt9OwoKCWluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7CgoJdmFyIHNlbGVjdGlvbiwKCQlsaXN0ID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdLAoJCWkgPSAwLAoJCWxlbmd0aCA9IGxpc3QgPyBsaXN0Lmxlbmd0aCA6IDAsCgkJZXhlY3V0ZU9ubHkgPSAoIHN0cnVjdHVyZSA9PT0gcHJlZmlsdGVycyApOwoKCWZvciAoIDsgaSA8IGxlbmd0aCAmJiAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKTsgaSsrICkgewoJCXNlbGVjdGlvbiA9IGxpc3RbIGkgXSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApOwoJCS8vIElmIHdlIGdvdCByZWRpcmVjdGVkIHRvIGFub3RoZXIgZGF0YVR5cGUKCQkvLyB3ZSB0cnkgdGhlcmUgaWYgZXhlY3V0aW5nIG9ubHkgYW5kIG5vdCBkb25lIGFscmVhZHkKCQlpZiAoIHR5cGVvZiBzZWxlY3Rpb24gPT09ICJzdHJpbmciICkgewoJCQlpZiAoICFleGVjdXRlT25seSB8fCBpbnNwZWN0ZWRbIHNlbGVjdGlvbiBdICkgewoJCQkJc2VsZWN0aW9uID0gdW5kZWZpbmVkOwoJCQl9IGVsc2UgewoJCQkJb3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggc2VsZWN0aW9uICk7CgkJCQlzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygKCQkJCQkJc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSLCBzZWxlY3Rpb24sIGluc3BlY3RlZCApOwoJCQl9CgkJfQoJfQoJLy8gSWYgd2UncmUgb25seSBleGVjdXRpbmcgb3Igbm90aGluZyB3YXMgc2VsZWN0ZWQKCS8vIHdlIHRyeSB0aGUgY2F0Y2hhbGwgZGF0YVR5cGUgaWYgbm90IGRvbmUgYWxyZWFkeQoJaWYgKCAoIGV4ZWN1dGVPbmx5IHx8ICFzZWxlY3Rpb24gKSAmJiAhaW5zcGVjdGVkWyAiKiIgXSApIHsKCQlzZWxlY3Rpb24gPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cygKCQkJCXN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiwgIioiLCBpbnNwZWN0ZWQgKTsKCX0KCS8vIHVubmVjZXNzYXJ5IHdoZW4gb25seSBleGVjdXRpbmcgKHByZWZpbHRlcnMpCgkvLyBidXQgaXQnbGwgYmUgaWdub3JlZCBieSB0aGUgY2FsbGVyIGluIHRoYXQgY2FzZQoJcmV0dXJuIHNlbGVjdGlvbjsKfQoKLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zCi8vIHRoYXQgdGFrZXMgImZsYXQiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKQovLyBGaXhlcyAjOTg4NwpmdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHsKCXZhciBrZXksIGRlZXAsCgkJZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9OwoJZm9yICgga2V5IGluIHNyYyApIHsKCQlpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHsKCQkJKCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTsKCQl9Cgl9CglpZiAoIGRlZXAgKSB7CgkJalF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7Cgl9Cn0KCmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHsKCWlmICggdHlwZW9mIHVybCAhPT0gInN0cmluZyIgJiYgX2xvYWQgKSB7CgkJcmV0dXJuIF9sb2FkLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTsKCX0KCgkvLyBEb24ndCBkbyBhIHJlcXVlc3QgaWYgbm8gZWxlbWVudHMgYXJlIGJlaW5nIHJlcXVlc3RlZAoJaWYgKCAhdGhpcy5sZW5ndGggKSB7CgkJcmV0dXJuIHRoaXM7Cgl9CgoJdmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSwKCQlzZWxmID0gdGhpcywKCQlvZmYgPSB1cmwuaW5kZXhPZigiICIpOwoKCWlmICggb2ZmID49IDAgKSB7CgkJc2VsZWN0b3IgPSB1cmwuc2xpY2UoIG9mZiwgdXJsLmxlbmd0aCApOwoJCXVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7Cgl9CgoJLy8gSWYgaXQncyBhIGZ1bmN0aW9uCglpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHsKCgkJLy8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2sKCQljYWxsYmFjayA9IHBhcmFtczsKCQlwYXJhbXMgPSB1bmRlZmluZWQ7CgoJLy8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZwoJfSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09ICJvYmplY3QiICkgewoJCXR5cGUgPSAiUE9TVCI7Cgl9CgoJLy8gUmVxdWVzdCB0aGUgcmVtb3RlIGRvY3VtZW50CglqUXVlcnkuYWpheCh7CgkJdXJsOiB1cmwsCgoJCS8vIGlmICJ0eXBlIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gIkdFVCIgbWV0aG9kIHdpbGwgYmUgdXNlZAoJCXR5cGU6IHR5cGUsCgkJZGF0YVR5cGU6ICJodG1sIiwKCQlkYXRhOiBwYXJhbXMsCgkJY29tcGxldGU6IGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkgewoJCQlpZiAoIGNhbGxiYWNrICkgewoJCQkJc2VsZi5lYWNoKCBjYWxsYmFjaywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApOwoJCQl9CgkJfQoJfSkuZG9uZShmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkgewoKCQkvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2sKCQlyZXNwb25zZSA9IGFyZ3VtZW50czsKCgkJLy8gU2VlIGlmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZAoJCXNlbGYuaHRtbCggc2VsZWN0b3IgPwoKCQkJLy8gQ3JlYXRlIGEgZHVtbXkgZGl2IHRvIGhvbGQgdGhlIHJlc3VsdHMKCQkJalF1ZXJ5KCI8ZGl2PiIpCgoJCQkJLy8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgaW4sIHJlbW92aW5nIHRoZSBzY3JpcHRzCgkJCQkvLyB0byBhdm9pZCBhbnkgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnMgaW4gSUUKCQkJCS5hcHBlbmQoIHJlc3BvbnNlVGV4dC5yZXBsYWNlKCByc2NyaXB0LCAiIiApICkKCgkJCQkvLyBMb2NhdGUgdGhlIHNwZWNpZmllZCBlbGVtZW50cwoJCQkJLmZpbmQoIHNlbGVjdG9yICkgOgoKCQkJLy8gSWYgbm90LCBqdXN0IGluamVjdCB0aGUgZnVsbCByZXN1bHQKCQkJcmVzcG9uc2VUZXh0ICk7CgoJfSk7CgoJcmV0dXJuIHRoaXM7Cn07CgovLyBBdHRhY2ggYSBidW5jaCBvZiBmdW5jdGlvbnMgZm9yIGhhbmRsaW5nIGNvbW1vbiBBSkFYIGV2ZW50cwpqUXVlcnkuZWFjaCggImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCggIiAiICksIGZ1bmN0aW9uKCBpLCBvICl7CglqUXVlcnkuZm5bIG8gXSA9IGZ1bmN0aW9uKCBmICl7CgkJcmV0dXJuIHRoaXMub24oIG8sIGYgKTsKCX07Cn0pOwoKalF1ZXJ5LmVhY2goIFsgImdldCIsICJwb3N0IiBdLCBmdW5jdGlvbiggaSwgbWV0aG9kICkgewoJalF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkgewoJCS8vIHNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggZGF0YSApICkgewoJCQl0eXBlID0gdHlwZSB8fCBjYWxsYmFjazsKCQkJY2FsbGJhY2sgPSBkYXRhOwoJCQlkYXRhID0gdW5kZWZpbmVkOwoJCX0KCgkJcmV0dXJuIGpRdWVyeS5hamF4KHsKCQkJdHlwZTogbWV0aG9kLAoJCQl1cmw6IHVybCwKCQkJZGF0YTogZGF0YSwKCQkJc3VjY2VzczogY2FsbGJhY2ssCgkJCWRhdGFUeXBlOiB0eXBlCgkJfSk7Cgl9Owp9KTsKCmpRdWVyeS5leHRlbmQoewoKCWdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgInNjcmlwdCIgKTsKCX0sCgoJZ2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7CgkJcmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssICJqc29uIiApOwoJfSwKCgkvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldAoJLy8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLgoJLy8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy4KCWFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7CgkJaWYgKCBzZXR0aW5ncyApIHsKCQkJLy8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3QKCQkJYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICk7CgkJfSBlbHNlIHsKCQkJLy8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5ncwoJCQlzZXR0aW5ncyA9IHRhcmdldDsKCQkJdGFyZ2V0ID0galF1ZXJ5LmFqYXhTZXR0aW5nczsKCQl9CgkJYWpheEV4dGVuZCggdGFyZ2V0LCBzZXR0aW5ncyApOwoJCXJldHVybiB0YXJnZXQ7Cgl9LAoKCWFqYXhTZXR0aW5nczogewoJCXVybDogYWpheExvY2F0aW9uLAoJCWlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGFqYXhMb2NQYXJ0c1sgMSBdICksCgkJZ2xvYmFsOiB0cnVlLAoJCXR5cGU6ICJHRVQiLAoJCWNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04IiwKCQlwcm9jZXNzRGF0YTogdHJ1ZSwKCQlhc3luYzogdHJ1ZSwKCQkvKgoJCXRpbWVvdXQ6IDAsCgkJZGF0YTogbnVsbCwKCQlkYXRhVHlwZTogbnVsbCwKCQl1c2VybmFtZTogbnVsbCwKCQlwYXNzd29yZDogbnVsbCwKCQljYWNoZTogbnVsbCwKCQl0aHJvd3M6IGZhbHNlLAoJCXRyYWRpdGlvbmFsOiBmYWxzZSwKCQloZWFkZXJzOiB7fSwKCQkqLwoKCQlhY2NlcHRzOiB7CgkJCXhtbDogImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWwiLAoJCQlodG1sOiAidGV4dC9odG1sIiwKCQkJdGV4dDogInRleHQvcGxhaW4iLAoJCQlqc29uOiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwKCQkJIioiOiBhbGxUeXBlcwoJCX0sCgoJCWNvbnRlbnRzOiB7CgkJCXhtbDogL3htbC8sCgkJCWh0bWw6IC9odG1sLywKCQkJanNvbjogL2pzb24vCgkJfSwKCgkJcmVzcG9uc2VGaWVsZHM6IHsKCQkJeG1sOiAicmVzcG9uc2VYTUwiLAoJCQl0ZXh0OiAicmVzcG9uc2VUZXh0IgoJCX0sCgoJCS8vIExpc3Qgb2YgZGF0YSBjb252ZXJ0ZXJzCgkJLy8gMSkga2V5IGZvcm1hdCBpcyAic291cmNlX3R5cGUgZGVzdGluYXRpb25fdHlwZSIgKGEgc2luZ2xlIHNwYWNlIGluLWJldHdlZW4pCgkJLy8gMikgdGhlIGNhdGNoYWxsIHN5bWJvbCAiKiIgY2FuIGJlIHVzZWQgZm9yIHNvdXJjZV90eXBlCgkJY29udmVydGVyczogewoKCQkJLy8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0CgkJCSIqIHRleHQiOiB3aW5kb3cuU3RyaW5nLAoKCQkJLy8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pCgkJCSJ0ZXh0IGh0bWwiOiB0cnVlLAoKCQkJLy8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvbgoJCQkidGV4dCBqc29uIjogalF1ZXJ5LnBhcnNlSlNPTiwKCgkJCS8vIFBhcnNlIHRleHQgYXMgeG1sCgkJCSJ0ZXh0IHhtbCI6IGpRdWVyeS5wYXJzZVhNTAoJCX0sCgoJCS8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6CgkJLy8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZgoJCS8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlCgkJLy8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpCgkJZmxhdE9wdGlvbnM6IHsKCQkJY29udGV4dDogdHJ1ZSwKCQkJdXJsOiB0cnVlCgkJfQoJfSwKCglhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSwKCWFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLAoKCS8vIE1haW4gbWV0aG9kCglhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkgewoKCQkvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZQoJCWlmICggdHlwZW9mIHVybCA9PT0gIm9iamVjdCIgKSB7CgkJCW9wdGlvbnMgPSB1cmw7CgkJCXVybCA9IHVuZGVmaW5lZDsKCQl9CgoJCS8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0CgkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgoJCXZhciAvLyBpZk1vZGlmaWVkIGtleQoJCQlpZk1vZGlmaWVkS2V5LAoJCQkvLyBSZXNwb25zZSBoZWFkZXJzCgkJCXJlc3BvbnNlSGVhZGVyc1N0cmluZywKCQkJcmVzcG9uc2VIZWFkZXJzLAoJCQkvLyB0cmFuc3BvcnQKCQkJdHJhbnNwb3J0LAoJCQkvLyB0aW1lb3V0IGhhbmRsZQoJCQl0aW1lb3V0VGltZXIsCgkJCS8vIENyb3NzLWRvbWFpbiBkZXRlY3Rpb24gdmFycwoJCQlwYXJ0cywKCQkJLy8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkCgkJCWZpcmVHbG9iYWxzLAoJCQkvLyBMb29wIHZhcmlhYmxlCgkJCWksCgkJCS8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3QKCQkJcyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksCgkJCS8vIENhbGxiYWNrcyBjb250ZXh0CgkJCWNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLAoJCQkvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzCgkJCS8vIEl0J3MgdGhlIGNhbGxiYWNrQ29udGV4dCBpZiBvbmUgd2FzIHByb3ZpZGVkIGluIHRoZSBvcHRpb25zCgkJCS8vIGFuZCBpZiBpdCdzIGEgRE9NIG5vZGUgb3IgYSBqUXVlcnkgY29sbGVjdGlvbgoJCQlnbG9iYWxFdmVudENvbnRleHQgPSBjYWxsYmFja0NvbnRleHQgIT09IHMgJiYKCQkJCSggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSApID8KCQkJCQkJalF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6IGpRdWVyeS5ldmVudCwKCQkJLy8gRGVmZXJyZWRzCgkJCWRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksCgkJCWNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCAib25jZSBtZW1vcnkiICksCgkJCS8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzCgkJCXN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sCgkJCS8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpCgkJCXJlcXVlc3RIZWFkZXJzID0ge30sCgkJCXJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSwKCQkJLy8gVGhlIGpxWEhSIHN0YXRlCgkJCXN0YXRlID0gMCwKCQkJLy8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlCgkJCXN0ckFib3J0ID0gImNhbmNlbGVkIiwKCQkJLy8gRmFrZSB4aHIKCQkJanFYSFIgPSB7CgoJCQkJcmVhZHlTdGF0ZTogMCwKCgkJCQkvLyBDYWNoZXMgdGhlIGhlYWRlcgoJCQkJc2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkgewoJCQkJCWlmICggIXN0YXRlICkgewoJCQkJCQl2YXIgbG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7CgkJCQkJCW5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBsbmFtZSBdID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbG5hbWUgXSB8fCBuYW1lOwoJCQkJCQlyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7CgkJCQkJfQoJCQkJCXJldHVybiB0aGlzOwoJCQkJfSwKCgkJCQkvLyBSYXcgc3RyaW5nCgkJCQlnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkgewoJCQkJCXJldHVybiBzdGF0ZSA9PT0gMiA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7CgkJCQl9LAoKCQkJCS8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWQKCQkJCWdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkgewoJCQkJCXZhciBtYXRjaDsKCQkJCQlpZiAoIHN0YXRlID09PSAyICkgewoJCQkJCQlpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7CgkJCQkJCQlyZXNwb25zZUhlYWRlcnMgPSB7fTsKCQkJCQkJCXdoaWxlKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHsKCQkJCQkJCQlyZXNwb25zZUhlYWRlcnNbIG1hdGNoWzFdLnRvTG93ZXJDYXNlKCkgXSA9IG1hdGNoWyAyIF07CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJbWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpIF07CgkJCQkJfQoJCQkJCXJldHVybiBtYXRjaCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IG1hdGNoOwoJCQkJfSwKCgkJCQkvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlcgoJCQkJb3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7CgkJCQkJaWYgKCAhc3RhdGUgKSB7CgkJCQkJCXMubWltZVR5cGUgPSB0eXBlOwoJCQkJCX0KCQkJCQlyZXR1cm4gdGhpczsKCQkJCX0sCgoJCQkJLy8gQ2FuY2VsIHRoZSByZXF1ZXN0CgkJCQlhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7CgkJCQkJc3RhdHVzVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7CgkJCQkJaWYgKCB0cmFuc3BvcnQgKSB7CgkJCQkJCXRyYW5zcG9ydC5hYm9ydCggc3RhdHVzVGV4dCApOwoJCQkJCX0KCQkJCQlkb25lKCAwLCBzdGF0dXNUZXh0ICk7CgkJCQkJcmV0dXJuIHRoaXM7CgkJCQl9CgkJCX07CgoJCS8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZQoJCS8vIEl0IGlzIGRlZmluZWQgaGVyZSBiZWNhdXNlIGpzbGludCBjb21wbGFpbnMgaWYgaXQgaXMgZGVjbGFyZWQKCQkvLyBhdCB0aGUgZW5kIG9mIHRoZSBmdW5jdGlvbiAod2hpY2ggd291bGQgYmUgbW9yZSBsb2dpY2FsIGFuZCByZWFkYWJsZSkKCQlmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHsKCQkJdmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCwKCQkJCXN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0OwoKCQkJLy8gQ2FsbGVkIG9uY2UKCQkJaWYgKCBzdGF0ZSA9PT0gMiApIHsKCQkJCXJldHVybjsKCQkJfQoKCQkJLy8gU3RhdGUgaXMgImRvbmUiIG5vdwoJCQlzdGF0ZSA9IDI7CgoJCQkvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0cwoJCQlpZiAoIHRpbWVvdXRUaW1lciApIHsKCQkJCWNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7CgkJCX0KCgkJCS8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uCgkJCS8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpCgkJCXRyYW5zcG9ydCA9IHVuZGVmaW5lZDsKCgkJCS8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnMKCQkJcmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCAiIjsKCgkJCS8vIFNldCByZWFkeVN0YXRlCgkJCWpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7CgoJCQkvLyBHZXQgcmVzcG9uc2UgZGF0YQoJCQlpZiAoIHJlc3BvbnNlcyApIHsKCQkJCXJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApOwoJCQl9CgoJCQkvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZwoJCQlpZiAoIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0ICkgewoKCQkJCS8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuCgkJCQlpZiAoIHMuaWZNb2RpZmllZCApIHsKCgkJCQkJbW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpOwoJCQkJCWlmICggbW9kaWZpZWQgKSB7CgkJCQkJCWpRdWVyeS5sYXN0TW9kaWZpZWRbIGlmTW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOwoJCQkJCX0KCQkJCQltb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCJFdGFnIik7CgkJCQkJaWYgKCBtb2RpZmllZCApIHsKCQkJCQkJalF1ZXJ5LmV0YWdbIGlmTW9kaWZpZWRLZXkgXSA9IG1vZGlmaWVkOwoJCQkJCX0KCQkJCX0KCgkJCQkvLyBJZiBub3QgbW9kaWZpZWQKCQkJCWlmICggc3RhdHVzID09PSAzMDQgKSB7CgoJCQkJCXN0YXR1c1RleHQgPSAibm90bW9kaWZpZWQiOwoJCQkJCWlzU3VjY2VzcyA9IHRydWU7CgoJCQkJLy8gSWYgd2UgaGF2ZSBkYXRhCgkJCQl9IGVsc2UgewoKCQkJCQlpc1N1Y2Nlc3MgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UgKTsKCQkJCQlzdGF0dXNUZXh0ID0gaXNTdWNjZXNzLnN0YXRlOwoJCQkJCXN1Y2Nlc3MgPSBpc1N1Y2Nlc3MuZGF0YTsKCQkJCQllcnJvciA9IGlzU3VjY2Vzcy5lcnJvcjsKCQkJCQlpc1N1Y2Nlc3MgPSAhZXJyb3I7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkvLyBXZSBleHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dAoJCQkJLy8gdGhlbiBub3JtYWxpemUgc3RhdHVzVGV4dCBhbmQgc3RhdHVzIGZvciBub24tYWJvcnRzCgkJCQllcnJvciA9IHN0YXR1c1RleHQ7CgkJCQlpZiAoICFzdGF0dXNUZXh0IHx8IHN0YXR1cyApIHsKCQkJCQlzdGF0dXNUZXh0ID0gImVycm9yIjsKCQkJCQlpZiAoIHN0YXR1cyA8IDAgKSB7CgkJCQkJCXN0YXR1cyA9IDA7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQkvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdAoJCQlqcVhIUi5zdGF0dXMgPSBzdGF0dXM7CgkJCWpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgIiI7CgoJCQkvLyBTdWNjZXNzL0Vycm9yCgkJCWlmICggaXNTdWNjZXNzICkgewoJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7CgkJCX0gZWxzZSB7CgkJCQlkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTsKCQkJfQoKCQkJLy8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3MKCQkJanFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApOwoJCQlzdGF0dXNDb2RlID0gdW5kZWZpbmVkOwoKCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheCIgKyAoIGlzU3VjY2VzcyA/ICJTdWNjZXNzIiA6ICJFcnJvciIgKSwKCQkJCQkJWyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTsKCQkJfQoKCQkJLy8gQ29tcGxldGUKCQkJY29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTsKCgkJCWlmICggZmlyZUdsb2JhbHMgKSB7CgkJCQlnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggImFqYXhDb21wbGV0ZSIsIFsganFYSFIsIHMgXSApOwoJCQkJLy8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyCgkJCQlpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkgewoJCQkJCWpRdWVyeS5ldmVudC50cmlnZ2VyKCAiYWpheFN0b3AiICk7CgkJCQl9CgkJCX0KCQl9CgoJCS8vIEF0dGFjaCBkZWZlcnJlZHMKCQlkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApOwoJCWpxWEhSLnN1Y2Nlc3MgPSBqcVhIUi5kb25lOwoJCWpxWEhSLmVycm9yID0ganFYSFIuZmFpbDsKCQlqcVhIUi5jb21wbGV0ZSA9IGNvbXBsZXRlRGVmZXJyZWQuYWRkOwoKCQkvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrcwoJCWpxWEhSLnN0YXR1c0NvZGUgPSBmdW5jdGlvbiggbWFwICkgewoJCQlpZiAoIG1hcCApIHsKCQkJCXZhciB0bXA7CgkJCQlpZiAoIHN0YXRlIDwgMiApIHsKCQkJCQlmb3IgKCB0bXAgaW4gbWFwICkgewoJCQkJCQlzdGF0dXNDb2RlWyB0bXAgXSA9IFsgc3RhdHVzQ29kZVt0bXBdLCBtYXBbdG1wXSBdOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJdG1wID0gbWFwWyBqcVhIUi5zdGF0dXMgXTsKCQkJCQlqcVhIUi5hbHdheXMoIHRtcCApOwoJCQkJfQoJCQl9CgkJCXJldHVybiB0aGlzOwoJCX07CgoJCS8vIFJlbW92ZSBoYXNoIGNoYXJhY3RlciAoIzc1MzE6IGFuZCBzdHJpbmcgcHJvbW90aW9uKQoJCS8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKCM1ODY2OiBJRTcgaXNzdWUgd2l0aCBwcm90b2NvbC1sZXNzIHVybHMpCgkJLy8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlCgkJcy51cmwgPSAoICggdXJsIHx8IHMudXJsICkgKyAiIiApLnJlcGxhY2UoIHJoYXNoLCAiIiApLnJlcGxhY2UoIHJwcm90b2NvbCwgYWpheExvY1BhcnRzWyAxIF0gKyAiLy8iICk7CgoJCS8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3QKCQlzLmRhdGFUeXBlcyA9IGpRdWVyeS50cmltKCBzLmRhdGFUeXBlIHx8ICIqIiApLnRvTG93ZXJDYXNlKCkuc3BsaXQoIGNvcmVfcnNwYWNlICk7CgoJCS8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB3ZSBoYXZlIGEgcHJvdG9jb2w6aG9zdDpwb3J0IG1pc21hdGNoCgkJaWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7CgkJCXBhcnRzID0gcnVybC5leGVjKCBzLnVybC50b0xvd2VyQ2FzZSgpICk7CgkJCXMuY3Jvc3NEb21haW4gPSAhISggcGFydHMgJiYKCQkJCSggcGFydHNbIDEgXSAhPT0gYWpheExvY1BhcnRzWyAxIF0gfHwgcGFydHNbIDIgXSAhPT0gYWpheExvY1BhcnRzWyAyIF0gfHwKCQkJCQkoIHBhcnRzWyAzIF0gfHwgKCBwYXJ0c1sgMSBdID09PSAiaHR0cDoiID8gODAgOiA0NDMgKSApICE9CgkJCQkJCSggYWpheExvY1BhcnRzWyAzIF0gfHwgKCBhamF4TG9jUGFydHNbIDEgXSA9PT0gImh0dHA6IiA/IDgwIDogNDQzICkgKSApCgkJCSk7CgkJfQoKCQkvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmcKCQlpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09ICJzdHJpbmciICkgewoJCQlzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApOwoJCX0KCgkJLy8gQXBwbHkgcHJlZmlsdGVycwoJCWluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApOwoKCQkvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZQoJCWlmICggc3RhdGUgPT09IDIgKSB7CgkJCXJldHVybiBqcVhIUjsKCQl9CgoJCS8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvCgkJZmlyZUdsb2JhbHMgPSBzLmdsb2JhbDsKCgkJLy8gVXBwZXJjYXNlIHRoZSB0eXBlCgkJcy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7CgoJCS8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50CgkJcy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7CgoJCS8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHMKCQlpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHsKCQkJalF1ZXJ5LmV2ZW50LnRyaWdnZXIoICJhamF4U3RhcnQiICk7CgkJfQoKCQkvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudAoJCWlmICggIXMuaGFzQ29udGVudCApIHsKCgkJCS8vIElmIGRhdGEgaXMgYXZhaWxhYmxlLCBhcHBlbmQgZGF0YSB0byB1cmwKCQkJaWYgKCBzLmRhdGEgKSB7CgkJCQlzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gIiYiIDogIj8iICkgKyBzLmRhdGE7CgkJCQkvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5CgkJCQlkZWxldGUgcy5kYXRhOwoJCQl9CgoJCQkvLyBHZXQgaWZNb2RpZmllZEtleSBiZWZvcmUgYWRkaW5nIHRoZSBhbnRpLWNhY2hlIHBhcmFtZXRlcgoJCQlpZk1vZGlmaWVkS2V5ID0gcy51cmw7CgoJCQkvLyBBZGQgYW50aS1jYWNoZSBpbiB1cmwgaWYgbmVlZGVkCgkJCWlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7CgoJCQkJdmFyIHRzID0galF1ZXJ5Lm5vdygpLAoJCQkJCS8vIHRyeSByZXBsYWNpbmcgXz0gaWYgaXQgaXMgdGhlcmUKCQkJCQlyZXQgPSBzLnVybC5yZXBsYWNlKCBydHMsICIkMV89IiArIHRzICk7CgoJCQkJLy8gaWYgbm90aGluZyB3YXMgcmVwbGFjZWQsIGFkZCB0aW1lc3RhbXAgdG8gdGhlIGVuZAoJCQkJcy51cmwgPSByZXQgKyAoICggcmV0ID09PSBzLnVybCApID8gKCBycXVlcnkudGVzdCggcy51cmwgKSA/ICImIiA6ICI/IiApICsgIl89IiArIHRzIDogIiIgKTsKCQkJfQoJCX0KCgkJLy8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50CgkJaWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7CgkJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoICJDb250ZW50LVR5cGUiLCBzLmNvbnRlbnRUeXBlICk7CgkJfQoKCQkvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLgoJCWlmICggcy5pZk1vZGlmaWVkICkgewoJCQlpZk1vZGlmaWVkS2V5ID0gaWZNb2RpZmllZEtleSB8fCBzLnVybDsKCQkJaWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKSB7CgkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTW9kaWZpZWQtU2luY2UiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBpZk1vZGlmaWVkS2V5IF0gKTsKCQkJfQoJCQlpZiAoIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKSB7CgkJCQlqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCAiSWYtTm9uZS1NYXRjaCIsIGpRdWVyeS5ldGFnWyBpZk1vZGlmaWVkS2V5IF0gKTsKCQkJfQoJCX0KCgkJLy8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZQoJCWpxWEhSLnNldFJlcXVlc3RIZWFkZXIoCgkJCSJBY2NlcHQiLAoJCQlzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbMF0gXSA/CgkJCQlzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWzBdIF0gKyAoIHMuZGF0YVR5cGVzWyAwIF0gIT09ICIqIiA/ICIsICIgKyBhbGxUeXBlcyArICI7IHE9MC4wMSIgOiAiIiApIDoKCQkJCXMuYWNjZXB0c1sgIioiIF0KCQkpOwoKCQkvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb24KCQlmb3IgKCBpIGluIHMuaGVhZGVycyApIHsKCQkJanFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTsKCQl9CgoJCS8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnQKCQlpZiAoIHMuYmVmb3JlU2VuZCAmJiAoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IHN0YXRlID09PSAyICkgKSB7CgkJCQkvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm4KCQkJCXJldHVybiBqcVhIUi5hYm9ydCgpOwoKCQl9CgoJCS8vIGFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvbgoJCXN0ckFib3J0ID0gImFib3J0IjsKCgkJLy8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzCgkJZm9yICggaSBpbiB7IHN1Y2Nlc3M6IDEsIGVycm9yOiAxLCBjb21wbGV0ZTogMSB9ICkgewoJCQlqcVhIUlsgaSBdKCBzWyBpIF0gKTsKCQl9CgoJCS8vIEdldCB0cmFuc3BvcnQKCQl0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTsKCgkJLy8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0CgkJaWYgKCAhdHJhbnNwb3J0ICkgewoJCQlkb25lKCAtMSwgIk5vIFRyYW5zcG9ydCIgKTsKCQl9IGVsc2UgewoJCQlqcVhIUi5yZWFkeVN0YXRlID0gMTsKCQkJLy8gU2VuZCBnbG9iYWwgZXZlbnQKCQkJaWYgKCBmaXJlR2xvYmFscyApIHsKCQkJCWdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCAiYWpheFNlbmQiLCBbIGpxWEhSLCBzIF0gKTsKCQkJfQoJCQkvLyBUaW1lb3V0CgkJCWlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkgewoJCQkJdGltZW91dFRpbWVyID0gc2V0VGltZW91dCggZnVuY3Rpb24oKXsKCQkJCQlqcVhIUi5hYm9ydCggInRpbWVvdXQiICk7CgkJCQl9LCBzLnRpbWVvdXQgKTsKCQkJfQoKCQkJdHJ5IHsKCQkJCXN0YXRlID0gMTsKCQkJCXRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApOwoJCQl9IGNhdGNoIChlKSB7CgkJCQkvLyBQcm9wYWdhdGUgZXhjZXB0aW9uIGFzIGVycm9yIGlmIG5vdCBkb25lCgkJCQlpZiAoIHN0YXRlIDwgMiApIHsKCQkJCQlkb25lKCAtMSwgZSApOwoJCQkJLy8gU2ltcGx5IHJldGhyb3cgb3RoZXJ3aXNlCgkJCQl9IGVsc2UgewoJCQkJCXRocm93IGU7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiBqcVhIUjsKCX0sCgoJLy8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzCglhY3RpdmU6IDAsCgoJLy8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdAoJbGFzdE1vZGlmaWVkOiB7fSwKCWV0YWc6IHt9Cgp9KTsKCi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDoKICogLSBzZXRzIGFsbCByZXNwb25zZVhYWCBmaWVsZHMgYWNjb3JkaW5nbHkKICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSkKICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCiAqLwpmdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkgewoKCXZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSwKCQljb250ZW50cyA9IHMuY29udGVudHMsCgkJZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMsCgkJcmVzcG9uc2VGaWVsZHMgPSBzLnJlc3BvbnNlRmllbGRzOwoKCS8vIEZpbGwgcmVzcG9uc2VYWFggZmllbGRzCglmb3IgKCB0eXBlIGluIHJlc3BvbnNlRmllbGRzICkgewoJCWlmICggdHlwZSBpbiByZXNwb25zZXMgKSB7CgkJCWpxWEhSWyByZXNwb25zZUZpZWxkc1t0eXBlXSBdID0gcmVzcG9uc2VzWyB0eXBlIF07CgkJfQoJfQoKCS8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzCgl3aGlsZSggZGF0YVR5cGVzWyAwIF0gPT09ICIqIiApIHsKCQlkYXRhVHlwZXMuc2hpZnQoKTsKCQlpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7CgkJCWN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggImNvbnRlbnQtdHlwZSIgKTsKCQl9Cgl9CgoJLy8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlCglpZiAoIGN0ICkgewoJCWZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7CgkJCWlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7CgkJCQlkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApOwoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgoJLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlCglpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHsKCQlmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07Cgl9IGVsc2UgewoJCS8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXMKCQlmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHsKCQkJaWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgIiAiICsgZGF0YVR5cGVzWzBdIF0gKSB7CgkJCQlmaW5hbERhdGFUeXBlID0gdHlwZTsKCQkJCWJyZWFrOwoJCQl9CgkJCWlmICggIWZpcnN0RGF0YVR5cGUgKSB7CgkJCQlmaXJzdERhdGFUeXBlID0gdHlwZTsKCQkJfQoJCX0KCQkvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmUKCQlmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlOwoJfQoKCS8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGUKCS8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkCgkvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlCglpZiAoIGZpbmFsRGF0YVR5cGUgKSB7CgkJaWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHsKCQkJZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTsKCQl9CgkJcmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdOwoJfQp9CgovLyBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlCmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSApIHsKCgl2YXIgY29udiwgY29udjIsIGN1cnJlbnQsIHRtcCwKCQkvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uCgkJZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKSwKCQlwcmV2ID0gZGF0YVR5cGVzWyAwIF0sCgkJY29udmVydGVycyA9IHt9LAoJCWkgPSAwOwoKCS8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkCglpZiAoIHMuZGF0YUZpbHRlciApIHsKCQlyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTsKCX0KCgkvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXMKCWlmICggZGF0YVR5cGVzWyAxIF0gKSB7CgkJZm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7CgkJCWNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07CgkJfQoJfQoKCS8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlLCB0b2xlcmF0aW5nIGxpc3QgbW9kaWZpY2F0aW9uCglmb3IgKCA7IChjdXJyZW50ID0gZGF0YVR5cGVzWysraV0pOyApIHsKCgkJLy8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0bwoJCWlmICggY3VycmVudCAhPT0gIioiICkgewoKCQkJLy8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudAoJCQlpZiAoIHByZXYgIT09ICIqIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkgewoKCQkJCS8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyCgkJCQljb252ID0gY29udmVydGVyc1sgcHJldiArICIgIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyAiKiAiICsgY3VycmVudCBdOwoKCQkJCS8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyCgkJCQlpZiAoICFjb252ICkgewoJCQkJCWZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7CgoJCQkJCQkvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnQKCQkJCQkJdG1wID0gY29udjIuc3BsaXQoIiAiKTsKCQkJCQkJaWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHsKCgkJCQkJCQkvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXQKCQkJCQkJCWNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgIiAiICsgdG1wWyAwIF0gXSB8fAoJCQkJCQkJCWNvbnZlcnRlcnNbICIqICIgKyB0bXBbIDAgXSBdOwoJCQkJCQkJaWYgKCBjb252ICkgewoJCQkJCQkJCS8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnMKCQkJCQkJCQlpZiAoIGNvbnYgPT09IHRydWUgKSB7CgkJCQkJCQkJCWNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdOwoKCQkJCQkJCQkvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlCgkJCQkJCQkJfSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHsKCQkJCQkJCQkJY3VycmVudCA9IHRtcFsgMCBdOwoJCQkJCQkJCQlkYXRhVHlwZXMuc3BsaWNlKCBpLS0sIDAsIGN1cnJlbnQgKTsKCQkJCQkJCQl9CgoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJCS8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKQoJCQkJaWYgKCBjb252ICE9PSB0cnVlICkgewoKCQkJCQkvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtCgkJCQkJaWYgKCBjb252ICYmIHNbInRocm93cyJdICkgewoJCQkJCQlyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJdHJ5IHsKCQkJCQkJCXJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTsKCQkJCQkJfSBjYXRjaCAoIGUgKSB7CgkJCQkJCQlyZXR1cm4geyBzdGF0ZTogInBhcnNlcmVycm9yIiwgZXJyb3I6IGNvbnYgPyBlIDogIk5vIGNvbnZlcnNpb24gZnJvbSAiICsgcHJldiArICIgdG8gIiArIGN1cnJlbnQgfTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJLy8gVXBkYXRlIHByZXYgZm9yIG5leHQgaXRlcmF0aW9uCgkJCXByZXYgPSBjdXJyZW50OwoJCX0KCX0KCglyZXR1cm4geyBzdGF0ZTogInN1Y2Nlc3MiLCBkYXRhOiByZXNwb25zZSB9Owp9CnZhciBvbGRDYWxsYmFja3MgPSBbXSwKCXJxdWVzdGlvbiA9IC9cPy8sCglyanNvbnAgPSAvKD0pXD8oPz0mfCQpfFw/XD8vLAoJbm9uY2UgPSBqUXVlcnkubm93KCk7CgovLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzCmpRdWVyeS5hamF4U2V0dXAoewoJanNvbnA6ICJjYWxsYmFjayIsCglqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHsKCQl2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArICJfIiArICggbm9uY2UrKyApICk7CgkJdGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7CgkJcmV0dXJuIGNhbGxiYWNrOwoJfQp9KTsKCi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0cwpqUXVlcnkuYWpheFByZWZpbHRlciggImpzb24ganNvbnAiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7CgoJdmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLAoJCWRhdGEgPSBzLmRhdGEsCgkJdXJsID0gcy51cmwsCgkJaGFzQ2FsbGJhY2sgPSBzLmpzb25wICE9PSBmYWxzZSwKCQlyZXBsYWNlSW5VcmwgPSBoYXNDYWxsYmFjayAmJiByanNvbnAudGVzdCggdXJsICksCgkJcmVwbGFjZUluRGF0YSA9IGhhc0NhbGxiYWNrICYmICFyZXBsYWNlSW5VcmwgJiYgdHlwZW9mIGRhdGEgPT09ICJzdHJpbmciICYmCgkJCSEoIHMuY29udGVudFR5cGUgfHwgIiIgKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSAmJgoJCQlyanNvbnAudGVzdCggZGF0YSApOwoKCS8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyAianNvbnAiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0CglpZiAoIHMuZGF0YVR5cGVzWyAwIF0gPT09ICJqc29ucCIgfHwgcmVwbGFjZUluVXJsIHx8IHJlcGxhY2VJbkRhdGEgKSB7CgoJCS8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXQKCQljYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBqUXVlcnkuaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgPwoJCQlzLmpzb25wQ2FsbGJhY2soKSA6CgkJCXMuanNvbnBDYWxsYmFjazsKCQlvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07CgoJCS8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGEKCQlpZiAoIHJlcGxhY2VJblVybCApIHsKCQkJcy51cmwgPSB1cmwucmVwbGFjZSggcmpzb25wLCAiJDEiICsgY2FsbGJhY2tOYW1lICk7CgkJfSBlbHNlIGlmICggcmVwbGFjZUluRGF0YSApIHsKCQkJcy5kYXRhID0gZGF0YS5yZXBsYWNlKCByanNvbnAsICIkMSIgKyBjYWxsYmFja05hbWUgKTsKCQl9IGVsc2UgaWYgKCBoYXNDYWxsYmFjayApIHsKCQkJcy51cmwgKz0gKCBycXVlc3Rpb24udGVzdCggdXJsICkgPyAiJiIgOiAiPyIgKSArIHMuanNvbnAgKyAiPSIgKyBjYWxsYmFja05hbWU7CgkJfQoKCQkvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uCgkJcy5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdID0gZnVuY3Rpb24oKSB7CgkJCWlmICggIXJlc3BvbnNlQ29udGFpbmVyICkgewoJCQkJalF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyAiIHdhcyBub3QgY2FsbGVkIiApOwoJCQl9CgkJCXJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdOwoJCX07CgoJCS8vIGZvcmNlIGpzb24gZGF0YVR5cGUKCQlzLmRhdGFUeXBlc1sgMCBdID0gImpzb24iOwoKCQkvLyBJbnN0YWxsIGNhbGxiYWNrCgkJd2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkgewoJCQlyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50czsKCQl9OwoKCQkvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycykKCQlqcVhIUi5hbHdheXMoZnVuY3Rpb24oKSB7CgkJCS8vIFJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWUKCQkJd2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuOwoKCQkJLy8gU2F2ZSBiYWNrIGFzIGZyZWUKCQkJaWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHsKCQkJCS8vIG1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZAoJCQkJcy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrOwoKCQkJCS8vIHNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2UKCQkJCW9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTsKCQkJfQoKCQkJLy8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlCgkJCWlmICggcmVzcG9uc2VDb250YWluZXIgJiYgalF1ZXJ5LmlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7CgkJCQlvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApOwoJCQl9CgoJCQlyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkOwoJCX0pOwoKCQkvLyBEZWxlZ2F0ZSB0byBzY3JpcHQKCQlyZXR1cm4gInNjcmlwdCI7Cgl9Cn0pOwovLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZQpqUXVlcnkuYWpheFNldHVwKHsKCWFjY2VwdHM6IHsKCQlzY3JpcHQ6ICJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCIKCX0sCgljb250ZW50czogewoJCXNjcmlwdDogL2phdmFzY3JpcHR8ZWNtYXNjcmlwdC8KCX0sCgljb252ZXJ0ZXJzOiB7CgkJInRleHQgc2NyaXB0IjogZnVuY3Rpb24oIHRleHQgKSB7CgkJCWpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7CgkJCXJldHVybiB0ZXh0OwoJCX0KCX0KfSk7CgovLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGdsb2JhbApqUXVlcnkuYWpheFByZWZpbHRlciggInNjcmlwdCIsIGZ1bmN0aW9uKCBzICkgewoJaWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7CgkJcy5jYWNoZSA9IGZhbHNlOwoJfQoJaWYgKCBzLmNyb3NzRG9tYWluICkgewoJCXMudHlwZSA9ICJHRVQiOwoJCXMuZ2xvYmFsID0gZmFsc2U7Cgl9Cn0pOwoKLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0CmpRdWVyeS5hamF4VHJhbnNwb3J0KCAic2NyaXB0IiwgZnVuY3Rpb24ocykgewoKCS8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gcmVxdWVzdHMKCWlmICggcy5jcm9zc0RvbWFpbiApIHsKCgkJdmFyIHNjcmlwdCwKCQkJaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoICJoZWFkIiApWzBdIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKCgkJcmV0dXJuIHsKCgkJCXNlbmQ6IGZ1bmN0aW9uKCBfLCBjYWxsYmFjayApIHsKCgkJCQlzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAic2NyaXB0IiApOwoKCQkJCXNjcmlwdC5hc3luYyA9ICJhc3luYyI7CgoJCQkJaWYgKCBzLnNjcmlwdENoYXJzZXQgKSB7CgkJCQkJc2NyaXB0LmNoYXJzZXQgPSBzLnNjcmlwdENoYXJzZXQ7CgkJCQl9CgoJCQkJc2NyaXB0LnNyYyA9IHMudXJsOwoKCQkJCS8vIEF0dGFjaCBoYW5kbGVycyBmb3IgYWxsIGJyb3dzZXJzCgkJCQlzY3JpcHQub25sb2FkID0gc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCBfLCBpc0Fib3J0ICkgewoKCQkJCQlpZiAoIGlzQWJvcnQgfHwgIXNjcmlwdC5yZWFkeVN0YXRlIHx8IC9sb2FkZWR8Y29tcGxldGUvLnRlc3QoIHNjcmlwdC5yZWFkeVN0YXRlICkgKSB7CgoJCQkJCQkvLyBIYW5kbGUgbWVtb3J5IGxlYWsgaW4gSUUKCQkJCQkJc2NyaXB0Lm9ubG9hZCA9IHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsOwoKCQkJCQkJLy8gUmVtb3ZlIHRoZSBzY3JpcHQKCQkJCQkJaWYgKCBoZWFkICYmIHNjcmlwdC5wYXJlbnROb2RlICkgewoJCQkJCQkJaGVhZC5yZW1vdmVDaGlsZCggc2NyaXB0ICk7CgkJCQkJCX0KCgkJCQkJCS8vIERlcmVmZXJlbmNlIHRoZSBzY3JpcHQKCQkJCQkJc2NyaXB0ID0gdW5kZWZpbmVkOwoKCQkJCQkJLy8gQ2FsbGJhY2sgaWYgbm90IGFib3J0CgkJCQkJCWlmICggIWlzQWJvcnQgKSB7CgkJCQkJCQljYWxsYmFjayggMjAwLCAic3VjY2VzcyIgKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX07CgkJCQkvLyBVc2UgaW5zZXJ0QmVmb3JlIGluc3RlYWQgb2YgYXBwZW5kQ2hpbGQgIHRvIGNpcmN1bXZlbnQgYW4gSUU2IGJ1Zy4KCQkJCS8vIFRoaXMgYXJpc2VzIHdoZW4gYSBiYXNlIG5vZGUgaXMgdXNlZCAoIzI3MDkgYW5kICM0Mzc4KS4KCQkJCWhlYWQuaW5zZXJ0QmVmb3JlKCBzY3JpcHQsIGhlYWQuZmlyc3RDaGlsZCApOwoJCQl9LAoKCQkJYWJvcnQ6IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCBzY3JpcHQgKSB7CgkJCQkJc2NyaXB0Lm9ubG9hZCggMCwgMSApOwoJCQkJfQoJCQl9CgkJfTsKCX0KfSk7CnZhciB4aHJDYWxsYmFja3MsCgkvLyAjNTI4MDogSW50ZXJuZXQgRXhwbG9yZXIgd2lsbCBrZWVwIGNvbm5lY3Rpb25zIGFsaXZlIGlmIHdlIGRvbid0IGFib3J0IG9uIHVubG9hZAoJeGhyT25VbmxvYWRBYm9ydCA9IHdpbmRvdy5BY3RpdmVYT2JqZWN0ID8gZnVuY3Rpb24oKSB7CgkJLy8gQWJvcnQgYWxsIHBlbmRpbmcgcmVxdWVzdHMKCQlmb3IgKCB2YXIga2V5IGluIHhockNhbGxiYWNrcyApIHsKCQkJeGhyQ2FsbGJhY2tzWyBrZXkgXSggMCwgMSApOwoJCX0KCX0gOiBmYWxzZSwKCXhocklkID0gMDsKCi8vIEZ1bmN0aW9ucyB0byBjcmVhdGUgeGhycwpmdW5jdGlvbiBjcmVhdGVTdGFuZGFyZFhIUigpIHsKCXRyeSB7CgkJcmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTsKCX0gY2F0Y2goIGUgKSB7fQp9CgpmdW5jdGlvbiBjcmVhdGVBY3RpdmVYSFIoKSB7Cgl0cnkgewoJCXJldHVybiBuZXcgd2luZG93LkFjdGl2ZVhPYmplY3QoICJNaWNyb3NvZnQuWE1MSFRUUCIgKTsKCX0gY2F0Y2goIGUgKSB7fQp9CgovLyBDcmVhdGUgdGhlIHJlcXVlc3Qgb2JqZWN0Ci8vIChUaGlzIGlzIHN0aWxsIGF0dGFjaGVkIHRvIGFqYXhTZXR0aW5ncyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKalF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSB3aW5kb3cuQWN0aXZlWE9iamVjdCA/CgkvKiBNaWNyb3NvZnQgZmFpbGVkIHRvIHByb3Blcmx5CgkgKiBpbXBsZW1lbnQgdGhlIFhNTEh0dHBSZXF1ZXN0IGluIElFNyAoY2FuJ3QgcmVxdWVzdCBsb2NhbCBmaWxlcyksCgkgKiBzbyB3ZSB1c2UgdGhlIEFjdGl2ZVhPYmplY3Qgd2hlbiBpdCBpcyBhdmFpbGFibGUKCSAqIEFkZGl0aW9uYWxseSBYTUxIdHRwUmVxdWVzdCBjYW4gYmUgZGlzYWJsZWQgaW4gSUU3L0lFOCBzbwoJICogd2UgbmVlZCBhIGZhbGxiYWNrLgoJICovCglmdW5jdGlvbigpIHsKCQlyZXR1cm4gIXRoaXMuaXNMb2NhbCAmJiBjcmVhdGVTdGFuZGFyZFhIUigpIHx8IGNyZWF0ZUFjdGl2ZVhIUigpOwoJfSA6CgkvLyBGb3IgYWxsIG90aGVyIGJyb3dzZXJzLCB1c2UgdGhlIHN0YW5kYXJkIFhNTEh0dHBSZXF1ZXN0IG9iamVjdAoJY3JlYXRlU3RhbmRhcmRYSFI7CgovLyBEZXRlcm1pbmUgc3VwcG9ydCBwcm9wZXJ0aWVzCihmdW5jdGlvbiggeGhyICkgewoJalF1ZXJ5LmV4dGVuZCggalF1ZXJ5LnN1cHBvcnQsIHsKCQlhamF4OiAhIXhociwKCQljb3JzOiAhIXhociAmJiAoICJ3aXRoQ3JlZGVudGlhbHMiIGluIHhociApCgl9KTsKfSkoIGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCkgKTsKCi8vIENyZWF0ZSB0cmFuc3BvcnQgaWYgdGhlIGJyb3dzZXIgY2FuIHByb3ZpZGUgYW4geGhyCmlmICggalF1ZXJ5LnN1cHBvcnQuYWpheCApIHsKCglqUXVlcnkuYWpheFRyYW5zcG9ydChmdW5jdGlvbiggcyApIHsKCQkvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0CgkJaWYgKCAhcy5jcm9zc0RvbWFpbiB8fCBqUXVlcnkuc3VwcG9ydC5jb3JzICkgewoKCQkJdmFyIGNhbGxiYWNrOwoKCQkJcmV0dXJuIHsKCQkJCXNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHsKCgkJCQkJLy8gR2V0IGEgbmV3IHhocgoJCQkJCXZhciBoYW5kbGUsIGksCgkJCQkJCXhociA9IHMueGhyKCk7CgoJCQkJCS8vIE9wZW4gdGhlIHNvY2tldAoJCQkJCS8vIFBhc3NpbmcgbnVsbCB1c2VybmFtZSwgZ2VuZXJhdGVzIGEgbG9naW4gcG9wdXAgb24gT3BlcmEgKCMyODY1KQoJCQkJCWlmICggcy51c2VybmFtZSApIHsKCQkJCQkJeGhyLm9wZW4oIHMudHlwZSwgcy51cmwsIHMuYXN5bmMsIHMudXNlcm5hbWUsIHMucGFzc3dvcmQgKTsKCQkJCQl9IGVsc2UgewoJCQkJCQl4aHIub3Blbiggcy50eXBlLCBzLnVybCwgcy5hc3luYyApOwoJCQkJCX0KCgkJCQkJLy8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZAoJCQkJCWlmICggcy54aHJGaWVsZHMgKSB7CgkJCQkJCWZvciAoIGkgaW4gcy54aHJGaWVsZHMgKSB7CgkJCQkJCQl4aHJbIGkgXSA9IHMueGhyRmllbGRzWyBpIF07CgkJCQkJCX0KCQkJCQl9CgoJCQkJCS8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWQKCQkJCQlpZiAoIHMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7CgkJCQkJCXhoci5vdmVycmlkZU1pbWVUeXBlKCBzLm1pbWVUeXBlICk7CgkJCQkJfQoKCQkJCQkvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlcgoJCQkJCS8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmUKCQkJCQkvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLgoJCQkJCS8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKQoJCQkJCS8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLgoJCQkJCWlmICggIXMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIlgtUmVxdWVzdGVkLVdpdGgiXSApIHsKCQkJCQkJaGVhZGVyc1sgIlgtUmVxdWVzdGVkLVdpdGgiIF0gPSAiWE1MSHR0cFJlcXVlc3QiOwoJCQkJCX0KCgkJCQkJLy8gTmVlZCBhbiBleHRyYSB0cnkvY2F0Y2ggZm9yIGNyb3NzIGRvbWFpbiByZXF1ZXN0cyBpbiBGaXJlZm94IDMKCQkJCQl0cnkgewoJCQkJCQlmb3IgKCBpIGluIGhlYWRlcnMgKSB7CgkJCQkJCQl4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7CgkJCQkJCX0KCQkJCQl9IGNhdGNoKCBfICkge30KCgkJCQkJLy8gRG8gc2VuZCB0aGUgcmVxdWVzdAoJCQkJCS8vIFRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aGljaCBpcyBhY3R1YWxseQoJCQkJCS8vIGhhbmRsZWQgaW4galF1ZXJ5LmFqYXggKHNvIG5vIHRyeS9jYXRjaCBoZXJlKQoJCQkJCXhoci5zZW5kKCAoIHMuaGFzQ29udGVudCAmJiBzLmRhdGEgKSB8fCBudWxsICk7CgoJCQkJCS8vIExpc3RlbmVyCgkJCQkJY2FsbGJhY2sgPSBmdW5jdGlvbiggXywgaXNBYm9ydCApIHsKCgkJCQkJCXZhciBzdGF0dXMsCgkJCQkJCQlzdGF0dXNUZXh0LAoJCQkJCQkJcmVzcG9uc2VIZWFkZXJzLAoJCQkJCQkJcmVzcG9uc2VzLAoJCQkJCQkJeG1sOwoKCQkJCQkJLy8gRmlyZWZveCB0aHJvd3MgZXhjZXB0aW9ucyB3aGVuIGFjY2Vzc2luZyBwcm9wZXJ0aWVzCgkJCQkJCS8vIG9mIGFuIHhociB3aGVuIGEgbmV0d29yayBlcnJvciBvY2N1cnJlZAoJCQkJCQkvLyBodHRwOi8vaGVscGZ1bC5rbm9icy1kaWFscy5jb20vaW5kZXgucGhwL0NvbXBvbmVudF9yZXR1cm5lZF9mYWlsdXJlX2NvZGU6XzB4ODAwNDAxMTFfKE5TX0VSUk9SX05PVF9BVkFJTEFCTEUpCgkJCQkJCXRyeSB7CgoJCQkJCQkJLy8gV2FzIG5ldmVyIGNhbGxlZCBhbmQgaXMgYWJvcnRlZCBvciBjb21wbGV0ZQoJCQkJCQkJaWYgKCBjYWxsYmFjayAmJiAoIGlzQWJvcnQgfHwgeGhyLnJlYWR5U3RhdGUgPT09IDQgKSApIHsKCgkJCQkJCQkJLy8gT25seSBjYWxsZWQgb25jZQoJCQkJCQkJCWNhbGxiYWNrID0gdW5kZWZpbmVkOwoKCQkJCQkJCQkvLyBEbyBub3Qga2VlcCBhcyBhY3RpdmUgYW55bW9yZQoJCQkJCQkJCWlmICggaGFuZGxlICkgewoJCQkJCQkJCQl4aHIub25yZWFkeXN0YXRlY2hhbmdlID0galF1ZXJ5Lm5vb3A7CgkJCQkJCQkJCWlmICggeGhyT25VbmxvYWRBYm9ydCApIHsKCQkJCQkJCQkJCWRlbGV0ZSB4aHJDYWxsYmFja3NbIGhhbmRsZSBdOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoKCQkJCQkJCQkvLyBJZiBpdCdzIGFuIGFib3J0CgkJCQkJCQkJaWYgKCBpc0Fib3J0ICkgewoJCQkJCQkJCQkvLyBBYm9ydCBpdCBtYW51YWxseSBpZiBuZWVkZWQKCQkJCQkJCQkJaWYgKCB4aHIucmVhZHlTdGF0ZSAhPT0gNCApIHsKCQkJCQkJCQkJCXhoci5hYm9ydCgpOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJc3RhdHVzID0geGhyLnN0YXR1czsKCQkJCQkJCQkJcmVzcG9uc2VIZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpOwoJCQkJCQkJCQlyZXNwb25zZXMgPSB7fTsKCQkJCQkJCQkJeG1sID0geGhyLnJlc3BvbnNlWE1MOwoKCQkJCQkJCQkJLy8gQ29uc3RydWN0IHJlc3BvbnNlIGxpc3QKCQkJCQkJCQkJaWYgKCB4bWwgJiYgeG1sLmRvY3VtZW50RWxlbWVudCAvKiAjNDk1OCAqLyApIHsKCQkJCQkJCQkJCXJlc3BvbnNlcy54bWwgPSB4bWw7CgkJCQkJCQkJCX0KCgkJCQkJCQkJCS8vIFdoZW4gcmVxdWVzdGluZyBiaW5hcnkgZGF0YSwgSUU2LTkgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24KCQkJCQkJCQkJLy8gb24gYW55IGF0dGVtcHQgdG8gYWNjZXNzIHJlc3BvbnNlVGV4dCAoIzExNDI2KQoJCQkJCQkJCQl0cnkgewoJCQkJCQkJCQkJcmVzcG9uc2VzLnRleHQgPSB4aHIucmVzcG9uc2VUZXh0OwoJCQkJCQkJCQl9IGNhdGNoKCBlICkgewoJCQkJCQkJCQl9CgoJCQkJCQkJCQkvLyBGaXJlZm94IHRocm93cyBhbiBleGNlcHRpb24gd2hlbiBhY2Nlc3NpbmcKCQkJCQkJCQkJLy8gc3RhdHVzVGV4dCBmb3IgZmF1bHR5IGNyb3NzLWRvbWFpbiByZXF1ZXN0cwoJCQkJCQkJCQl0cnkgewoJCQkJCQkJCQkJc3RhdHVzVGV4dCA9IHhoci5zdGF0dXNUZXh0OwoJCQkJCQkJCQl9IGNhdGNoKCBlICkgewoJCQkJCQkJCQkJLy8gV2Ugbm9ybWFsaXplIHdpdGggV2Via2l0IGdpdmluZyBhbiBlbXB0eSBzdGF0dXNUZXh0CgkJCQkJCQkJCQlzdGF0dXNUZXh0ID0gIiI7CgkJCQkJCQkJCX0KCgkJCQkJCQkJCS8vIEZpbHRlciBzdGF0dXMgZm9yIG5vbiBzdGFuZGFyZCBiZWhhdmlvcnMKCgkJCQkJCQkJCS8vIElmIHRoZSByZXF1ZXN0IGlzIGxvY2FsIGFuZCB3ZSBoYXZlIGRhdGE6IGFzc3VtZSBhIHN1Y2Nlc3MKCQkJCQkJCQkJLy8gKHN1Y2Nlc3Mgd2l0aCBubyBkYXRhIHdvbid0IGdldCBub3RpZmllZCwgdGhhdCdzIHRoZSBiZXN0IHdlCgkJCQkJCQkJCS8vIGNhbiBkbyBnaXZlbiBjdXJyZW50IGltcGxlbWVudGF0aW9ucykKCQkJCQkJCQkJaWYgKCAhc3RhdHVzICYmIHMuaXNMb2NhbCAmJiAhcy5jcm9zc0RvbWFpbiApIHsKCQkJCQkJCQkJCXN0YXR1cyA9IHJlc3BvbnNlcy50ZXh0ID8gMjAwIDogNDA0OwoJCQkJCQkJCQkvLyBJRSAtICMxNDUwOiBzb21ldGltZXMgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNAoJCQkJCQkJCQl9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDEyMjMgKSB7CgkJCQkJCQkJCQlzdGF0dXMgPSAyMDQ7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0gY2F0Y2goIGZpcmVmb3hBY2Nlc3NFeGNlcHRpb24gKSB7CgkJCQkJCQlpZiAoICFpc0Fib3J0ICkgewoJCQkJCQkJCWNvbXBsZXRlKCAtMSwgZmlyZWZveEFjY2Vzc0V4Y2VwdGlvbiApOwoJCQkJCQkJfQoJCQkJCQl9CgoJCQkJCQkvLyBDYWxsIGNvbXBsZXRlIGlmIG5lZWRlZAoJCQkJCQlpZiAoIHJlc3BvbnNlcyApIHsKCQkJCQkJCWNvbXBsZXRlKCBzdGF0dXMsIHN0YXR1c1RleHQsIHJlc3BvbnNlcywgcmVzcG9uc2VIZWFkZXJzICk7CgkJCQkJCX0KCQkJCQl9OwoKCQkJCQlpZiAoICFzLmFzeW5jICkgewoJCQkJCQkvLyBpZiB3ZSdyZSBpbiBzeW5jIG1vZGUgd2UgZmlyZSB0aGUgY2FsbGJhY2sKCQkJCQkJY2FsbGJhY2soKTsKCQkJCQl9IGVsc2UgaWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHsKCQkJCQkJLy8gKElFNiAmIElFNykgaWYgaXQncyBpbiBjYWNoZSBhbmQgaGFzIGJlZW4KCQkJCQkJLy8gcmV0cmlldmVkIGRpcmVjdGx5IHdlIG5lZWQgdG8gZmlyZSB0aGUgY2FsbGJhY2sKCQkJCQkJc2V0VGltZW91dCggY2FsbGJhY2ssIDAgKTsKCQkJCQl9IGVsc2UgewoJCQkJCQloYW5kbGUgPSArK3hocklkOwoJCQkJCQlpZiAoIHhock9uVW5sb2FkQWJvcnQgKSB7CgkJCQkJCQkvLyBDcmVhdGUgdGhlIGFjdGl2ZSB4aHJzIGNhbGxiYWNrcyBsaXN0IGlmIG5lZWRlZAoJCQkJCQkJLy8gYW5kIGF0dGFjaCB0aGUgdW5sb2FkIGhhbmRsZXIKCQkJCQkJCWlmICggIXhockNhbGxiYWNrcyApIHsKCQkJCQkJCQl4aHJDYWxsYmFja3MgPSB7fTsKCQkJCQkJCQlqUXVlcnkoIHdpbmRvdyApLnVubG9hZCggeGhyT25VbmxvYWRBYm9ydCApOwoJCQkJCQkJfQoJCQkJCQkJLy8gQWRkIHRvIGxpc3Qgb2YgYWN0aXZlIHhocnMgY2FsbGJhY2tzCgkJCQkJCQl4aHJDYWxsYmFja3NbIGhhbmRsZSBdID0gY2FsbGJhY2s7CgkJCQkJCX0KCQkJCQkJeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGNhbGxiYWNrOwoJCQkJCX0KCQkJCX0sCgoJCQkJYWJvcnQ6IGZ1bmN0aW9uKCkgewoJCQkJCWlmICggY2FsbGJhY2sgKSB7CgkJCQkJCWNhbGxiYWNrKDAsMSk7CgkJCQkJfQoJCQkJfQoJCQl9OwoJCX0KCX0pOwp9CnZhciBmeE5vdywgdGltZXJJZCwKCXJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLAoJcmZ4bnVtID0gbmV3IFJlZ0V4cCggIl4oPzooWy0rXSk9fCkoIiArIGNvcmVfcG51bSArICIpKFthLXolXSopJCIsICJpIiApLAoJcnJ1biA9IC9xdWV1ZUhvb2tzJC8sCglhbmltYXRpb25QcmVmaWx0ZXJzID0gWyBkZWZhdWx0UHJlZmlsdGVyIF0sCgl0d2VlbmVycyA9IHsKCQkiKiI6IFtmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7CgkJCXZhciBlbmQsIHVuaXQsCgkJCQl0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICksCgkJCQlwYXJ0cyA9IHJmeG51bS5leGVjKCB2YWx1ZSApLAoJCQkJdGFyZ2V0ID0gdHdlZW4uY3VyKCksCgkJCQlzdGFydCA9ICt0YXJnZXQgfHwgMCwKCQkJCXNjYWxlID0gMSwKCQkJCW1heEl0ZXJhdGlvbnMgPSAyMDsKCgkJCWlmICggcGFydHMgKSB7CgkJCQllbmQgPSArcGFydHNbMl07CgkJCQl1bml0ID0gcGFydHNbM10gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyAiIiA6ICJweCIgKTsKCgkJCQkvLyBXZSBuZWVkIHRvIGNvbXB1dGUgc3RhcnRpbmcgdmFsdWUKCQkJCWlmICggdW5pdCAhPT0gInB4IiAmJiBzdGFydCApIHsKCQkJCQkvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludAoJCQkJCS8vIFByZWZlciB0aGUgY3VycmVudCBwcm9wZXJ0eSwgYmVjYXVzZSB0aGlzIHByb2Nlc3Mgd2lsbCBiZSB0cml2aWFsIGlmIGl0IHVzZXMgdGhlIHNhbWUgdW5pdHMKCQkJCQkvLyBGYWxsYmFjayB0byBlbmQgb3IgYSBzaW1wbGUgY29uc3RhbnQKCQkJCQlzdGFydCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHByb3AsIHRydWUgKSB8fCBlbmQgfHwgMTsKCgkJCQkJZG8gewoJCQkJCQkvLyBJZiBwcmV2aW91cyBpdGVyYXRpb24gemVyb2VkIG91dCwgZG91YmxlIHVudGlsIHdlIGdldCAqc29tZXRoaW5nKgoJCQkJCQkvLyBVc2UgYSBzdHJpbmcgZm9yIGRvdWJsaW5nIGZhY3RvciBzbyB3ZSBkb24ndCBhY2NpZGVudGFsbHkgc2VlIHNjYWxlIGFzIHVuY2hhbmdlZCBiZWxvdwoJCQkJCQlzY2FsZSA9IHNjYWxlIHx8ICIuNSI7CgoJCQkJCQkvLyBBZGp1c3QgYW5kIGFwcGx5CgkJCQkJCXN0YXJ0ID0gc3RhcnQgLyBzY2FsZTsKCQkJCQkJalF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCBwcm9wLCBzdGFydCArIHVuaXQgKTsKCgkJCQkJLy8gVXBkYXRlIHNjYWxlLCB0b2xlcmF0aW5nIHplcm8gb3IgTmFOIGZyb20gdHdlZW4uY3VyKCkKCQkJCQkvLyBBbmQgYnJlYWtpbmcgdGhlIGxvb3AgaWYgc2NhbGUgaXMgdW5jaGFuZ2VkIG9yIHBlcmZlY3QsIG9yIGlmIHdlJ3ZlIGp1c3QgaGFkIGVub3VnaAoJCQkJCX0gd2hpbGUgKCBzY2FsZSAhPT0gKHNjYWxlID0gdHdlZW4uY3VyKCkgLyB0YXJnZXQpICYmIHNjYWxlICE9PSAxICYmIC0tbWF4SXRlcmF0aW9ucyApOwoJCQkJfQoKCQkJCXR3ZWVuLnVuaXQgPSB1bml0OwoJCQkJdHdlZW4uc3RhcnQgPSBzdGFydDsKCQkJCS8vIElmIGEgKz0vLT0gdG9rZW4gd2FzIHByb3ZpZGVkLCB3ZSdyZSBkb2luZyBhIHJlbGF0aXZlIGFuaW1hdGlvbgoJCQkJdHdlZW4uZW5kID0gcGFydHNbMV0gPyBzdGFydCArICggcGFydHNbMV0gKyAxICkgKiBlbmQgOiBlbmQ7CgkJCX0KCQkJcmV0dXJuIHR3ZWVuOwoJCX1dCgl9OwoKLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseQpmdW5jdGlvbiBjcmVhdGVGeE5vdygpIHsKCXNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CgkJZnhOb3cgPSB1bmRlZmluZWQ7Cgl9LCAwICk7CglyZXR1cm4gKCBmeE5vdyA9IGpRdWVyeS5ub3coKSApOwp9CgpmdW5jdGlvbiBjcmVhdGVUd2VlbnMoIGFuaW1hdGlvbiwgcHJvcHMgKSB7CglqUXVlcnkuZWFjaCggcHJvcHMsIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHsKCQl2YXIgY29sbGVjdGlvbiA9ICggdHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggdHdlZW5lcnNbICIqIiBdICksCgkJCWluZGV4ID0gMCwKCQkJbGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7CgkJZm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHsKCQkJaWYgKCBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApIHsKCgkJCQkvLyB3ZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eQoJCQkJcmV0dXJuOwoJCQl9CgkJfQoJfSk7Cn0KCmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHsKCXZhciByZXN1bHQsCgkJaW5kZXggPSAwLAoJCXR3ZWVuZXJJbmRleCA9IDAsCgkJbGVuZ3RoID0gYW5pbWF0aW9uUHJlZmlsdGVycy5sZW5ndGgsCgkJZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkgewoJCQkvLyBkb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3IKCQkJZGVsZXRlIHRpY2suZWxlbTsKCQl9KSwKCQl0aWNrID0gZnVuY3Rpb24oKSB7CgkJCXZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksCgkJCQlyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksCgkJCQkvLyBhcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgMSAtICggMC41IHx8IDAgKSAoIzEyNDk3KQoJCQkJdGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLAoJCQkJcGVyY2VudCA9IDEgLSB0ZW1wLAoJCQkJaW5kZXggPSAwLAoJCQkJbGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7CgoJCQlmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKCQkJCWFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7CgkJCX0KCgkJCWRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSk7CgoJCQlpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHsKCQkJCXJldHVybiByZW1haW5pbmc7CgkJCX0gZWxzZSB7CgkJCQlkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfSwKCQlhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKHsKCQkJZWxlbTogZWxlbSwKCQkJcHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksCgkJCW9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHsgc3BlY2lhbEVhc2luZzoge30gfSwgb3B0aW9ucyApLAoJCQlvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsCgkJCW9yaWdpbmFsT3B0aW9uczogb3B0aW9ucywKCQkJc3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLAoJCQlkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbiwKCQkJdHdlZW5zOiBbXSwKCQkJY3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQsIGVhc2luZyApIHsKCQkJCXZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCwKCQkJCQkJYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApOwoJCQkJYW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApOwoJCQkJcmV0dXJuIHR3ZWVuOwoJCQl9LAoJCQlzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHsKCQkJCXZhciBpbmRleCA9IDAsCgkJCQkJLy8gaWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zCgkJCQkJLy8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0CgkJCQkJbGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDsKCgkJCQlmb3IgKCA7IGluZGV4IDwgbGVuZ3RoIDsgaW5kZXgrKyApIHsKCQkJCQlhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApOwoJCQkJfQoKCQkJCS8vIHJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWUKCQkJCS8vIG90aGVyd2lzZSwgcmVqZWN0CgkJCQlpZiAoIGdvdG9FbmQgKSB7CgkJCQkJZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTsKCQkJCX0gZWxzZSB7CgkJCQkJZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApOwoJCQkJfQoJCQkJcmV0dXJuIHRoaXM7CgkJCX0KCQl9KSwKCQlwcm9wcyA9IGFuaW1hdGlvbi5wcm9wczsKCglwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApOwoKCWZvciAoIDsgaW5kZXggPCBsZW5ndGggOyBpbmRleCsrICkgewoJCXJlc3VsdCA9IGFuaW1hdGlvblByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTsKCQlpZiAoIHJlc3VsdCApIHsKCQkJcmV0dXJuIHJlc3VsdDsKCQl9Cgl9CgoJY3JlYXRlVHdlZW5zKCBhbmltYXRpb24sIHByb3BzICk7CgoJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHsKCQlhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTsKCX0KCglqUXVlcnkuZngudGltZXIoCgkJalF1ZXJ5LmV4dGVuZCggdGljaywgewoJCQlhbmltOiBhbmltYXRpb24sCgkJCXF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZSwKCQkJZWxlbTogZWxlbQoJCX0pCgkpOwoKCS8vIGF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zCglyZXR1cm4gYW5pbWF0aW9uLnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApCgkJLmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlICkKCQkuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApCgkJLmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7Cn0KCmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkgewoJdmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rczsKCgkvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3MKCWZvciAoIGluZGV4IGluIHByb3BzICkgewoJCW5hbWUgPSBqUXVlcnkuY2FtZWxDYXNlKCBpbmRleCApOwoJCWVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTsKCQl2YWx1ZSA9IHByb3BzWyBpbmRleCBdOwoJCWlmICggalF1ZXJ5LmlzQXJyYXkoIHZhbHVlICkgKSB7CgkJCWVhc2luZyA9IHZhbHVlWyAxIF07CgkJCXZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdOwoJCX0KCgkJaWYgKCBpbmRleCAhPT0gbmFtZSApIHsKCQkJcHJvcHNbIG5hbWUgXSA9IHZhbHVlOwoJCQlkZWxldGUgcHJvcHNbIGluZGV4IF07CgkJfQoKCQlob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdOwoJCWlmICggaG9va3MgJiYgImV4cGFuZCIgaW4gaG9va3MgKSB7CgkJCXZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApOwoJCQlkZWxldGUgcHJvcHNbIG5hbWUgXTsKCgkJCS8vIG5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b250IG92ZXJ3cml0ZSBrZXlzIGFscmVhZHkgcHJlc2VudC4KCQkJLy8gYWxzbyAtIHJldXNpbmcgJ2luZGV4JyBmcm9tIGFib3ZlIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCAibmFtZSIKCQkJZm9yICggaW5kZXggaW4gdmFsdWUgKSB7CgkJCQlpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7CgkJCQkJcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTsKCQkJCQlzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nOwoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJc3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nOwoJCX0KCX0KfQoKalF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwgewoKCXR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7CgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggcHJvcHMgKSApIHsKCQkJY2FsbGJhY2sgPSBwcm9wczsKCQkJcHJvcHMgPSBbICIqIiBdOwoJCX0gZWxzZSB7CgkJCXByb3BzID0gcHJvcHMuc3BsaXQoIiAiKTsKCQl9CgoJCXZhciBwcm9wLAoJCQlpbmRleCA9IDAsCgkJCWxlbmd0aCA9IHByb3BzLmxlbmd0aDsKCgkJZm9yICggOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CgkJCXByb3AgPSBwcm9wc1sgaW5kZXggXTsKCQkJdHdlZW5lcnNbIHByb3AgXSA9IHR3ZWVuZXJzWyBwcm9wIF0gfHwgW107CgkJCXR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTsKCQl9Cgl9LAoKCXByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkgewoJCWlmICggcHJlcGVuZCApIHsKCQkJYW5pbWF0aW9uUHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApOwoJCX0gZWxzZSB7CgkJCWFuaW1hdGlvblByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTsKCQl9Cgl9Cn0pOwoKZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7Cgl2YXIgaW5kZXgsIHByb3AsIHZhbHVlLCBsZW5ndGgsIGRhdGFTaG93LCB0b2dnbGUsIHR3ZWVuLCBob29rcywgb2xkZmlyZSwKCQlhbmltID0gdGhpcywKCQlzdHlsZSA9IGVsZW0uc3R5bGUsCgkJb3JpZyA9IHt9LAoJCWhhbmRsZWQgPSBbXSwKCQloaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuKCBlbGVtICk7CgoJLy8gaGFuZGxlIHF1ZXVlOiBmYWxzZSBwcm9taXNlcwoJaWYgKCAhb3B0cy5xdWV1ZSApIHsKCQlob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgImZ4IiApOwoJCWlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHsKCQkJaG9va3MudW5xdWV1ZWQgPSAwOwoJCQlvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTsKCQkJaG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkgewoJCQkJaWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7CgkJCQkJb2xkZmlyZSgpOwoJCQkJfQoJCQl9OwoJCX0KCQlob29rcy51bnF1ZXVlZCsrOwoKCQlhbmltLmFsd2F5cyhmdW5jdGlvbigpIHsKCQkJLy8gZG9pbmcgdGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIGNvbXBsZXRlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQKCQkJLy8gYmVmb3JlIHRoaXMgY29tcGxldGVzCgkJCWFuaW0uYWx3YXlzKGZ1bmN0aW9uKCkgewoJCQkJaG9va3MudW5xdWV1ZWQtLTsKCQkJCWlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgImZ4IiApLmxlbmd0aCApIHsKCQkJCQlob29rcy5lbXB0eS5maXJlKCk7CgkJCQl9CgkJCX0pOwoJCX0pOwoJfQoKCS8vIGhlaWdodC93aWR0aCBvdmVyZmxvdyBwYXNzCglpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCAiaGVpZ2h0IiBpbiBwcm9wcyB8fCAid2lkdGgiIGluIHByb3BzICkgKSB7CgkJLy8gTWFrZSBzdXJlIHRoYXQgbm90aGluZyBzbmVha3Mgb3V0CgkJLy8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdAoJCS8vIGNoYW5nZSB0aGUgb3ZlcmZsb3cgYXR0cmlidXRlIHdoZW4gb3ZlcmZsb3dYIGFuZAoJCS8vIG92ZXJmbG93WSBhcmUgc2V0IHRvIHRoZSBzYW1lIHZhbHVlCgkJb3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07CgoJCS8vIFNldCBkaXNwbGF5IHByb3BlcnR5IHRvIGlubGluZS1ibG9jayBmb3IgaGVpZ2h0L3dpZHRoCgkJLy8gYW5pbWF0aW9ucyBvbiBpbmxpbmUgZWxlbWVudHMgdGhhdCBhcmUgaGF2aW5nIHdpZHRoL2hlaWdodCBhbmltYXRlZAoJCWlmICggalF1ZXJ5LmNzcyggZWxlbSwgImRpc3BsYXkiICkgPT09ICJpbmxpbmUiICYmCgkJCQlqUXVlcnkuY3NzKCBlbGVtLCAiZmxvYXQiICkgPT09ICJub25lIiApIHsKCgkJCS8vIGlubGluZS1sZXZlbCBlbGVtZW50cyBhY2NlcHQgaW5saW5lLWJsb2NrOwoJCQkvLyBibG9jay1sZXZlbCBlbGVtZW50cyBuZWVkIHRvIGJlIGlubGluZSB3aXRoIGxheW91dAoJCQlpZiAoICFqUXVlcnkuc3VwcG9ydC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0IHx8IGNzc19kZWZhdWx0RGlzcGxheSggZWxlbS5ub2RlTmFtZSApID09PSAiaW5saW5lIiApIHsKCQkJCXN0eWxlLmRpc3BsYXkgPSAiaW5saW5lLWJsb2NrIjsKCgkJCX0gZWxzZSB7CgkJCQlzdHlsZS56b29tID0gMTsKCQkJfQoJCX0KCX0KCglpZiAoIG9wdHMub3ZlcmZsb3cgKSB7CgkJc3R5bGUub3ZlcmZsb3cgPSAiaGlkZGVuIjsKCQlpZiAoICFqUXVlcnkuc3VwcG9ydC5zaHJpbmtXcmFwQmxvY2tzICkgewoJCQlhbmltLmRvbmUoZnVuY3Rpb24oKSB7CgkJCQlzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTsKCQkJCXN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTsKCQkJCXN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTsKCQkJfSk7CgkJfQoJfQoKCgkvLyBzaG93L2hpZGUgcGFzcwoJZm9yICggaW5kZXggaW4gcHJvcHMgKSB7CgkJdmFsdWUgPSBwcm9wc1sgaW5kZXggXTsKCQlpZiAoIHJmeHR5cGVzLmV4ZWMoIHZhbHVlICkgKSB7CgkJCWRlbGV0ZSBwcm9wc1sgaW5kZXggXTsKCQkJdG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSAidG9nZ2xlIjsKCQkJaWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyAiaGlkZSIgOiAic2hvdyIgKSApIHsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWhhbmRsZWQucHVzaCggaW5kZXggKTsKCQl9Cgl9CgoJbGVuZ3RoID0gaGFuZGxlZC5sZW5ndGg7CglpZiAoIGxlbmd0aCApIHsKCQlkYXRhU2hvdyA9IGpRdWVyeS5fZGF0YSggZWxlbSwgImZ4c2hvdyIgKSB8fCBqUXVlcnkuX2RhdGEoIGVsZW0sICJmeHNob3ciLCB7fSApOwoJCWlmICggImhpZGRlbiIgaW4gZGF0YVNob3cgKSB7CgkJCWhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjsKCQl9CgoJCS8vIHN0b3JlIHN0YXRlIGlmIGl0cyB0b2dnbGUgLSBlbmFibGVzIC5zdG9wKCkudG9nZ2xlKCkgdG8gInJldmVyc2UiCgkJaWYgKCB0b2dnbGUgKSB7CgkJCWRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47CgkJfQoJCWlmICggaGlkZGVuICkgewoJCQlqUXVlcnkoIGVsZW0gKS5zaG93KCk7CgkJfSBlbHNlIHsKCQkJYW5pbS5kb25lKGZ1bmN0aW9uKCkgewoJCQkJalF1ZXJ5KCBlbGVtICkuaGlkZSgpOwoJCQl9KTsKCQl9CgkJYW5pbS5kb25lKGZ1bmN0aW9uKCkgewoJCQl2YXIgcHJvcDsKCQkJalF1ZXJ5LnJlbW92ZURhdGEoIGVsZW0sICJmeHNob3ciLCB0cnVlICk7CgkJCWZvciAoIHByb3AgaW4gb3JpZyApIHsKCQkJCWpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7CgkJCX0KCQl9KTsKCQlmb3IgKCBpbmRleCA9IDAgOyBpbmRleCA8IGxlbmd0aCA7IGluZGV4KysgKSB7CgkJCXByb3AgPSBoYW5kbGVkWyBpbmRleCBdOwoJCQl0d2VlbiA9IGFuaW0uY3JlYXRlVHdlZW4oIHByb3AsIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwICk7CgkJCW9yaWdbIHByb3AgXSA9IGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7CgoJCQlpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHsKCQkJCWRhdGFTaG93WyBwcm9wIF0gPSB0d2Vlbi5zdGFydDsKCQkJCWlmICggaGlkZGVuICkgewoJCQkJCXR3ZWVuLmVuZCA9IHR3ZWVuLnN0YXJ0OwoJCQkJCXR3ZWVuLnN0YXJ0ID0gcHJvcCA9PT0gIndpZHRoIiB8fCBwcm9wID09PSAiaGVpZ2h0IiA/IDEgOiAwOwoJCQkJfQoJCQl9CgkJfQoJfQp9CgpmdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7CglyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApOwp9CmpRdWVyeS5Ud2VlbiA9IFR3ZWVuOwoKVHdlZW4ucHJvdG90eXBlID0gewoJY29uc3RydWN0b3I6IFR3ZWVuLAoJaW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkgewoJCXRoaXMuZWxlbSA9IGVsZW07CgkJdGhpcy5wcm9wID0gcHJvcDsKCQl0aGlzLmVhc2luZyA9IGVhc2luZyB8fCAic3dpbmciOwoJCXRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CgkJdGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTsKCQl0aGlzLmVuZCA9IGVuZDsKCQl0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gIiIgOiAicHgiICk7Cgl9LAoJY3VyOiBmdW5jdGlvbigpIHsKCQl2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdOwoKCQlyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID8KCQkJaG9va3MuZ2V0KCB0aGlzICkgOgoJCQlUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7Cgl9LAoJcnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHsKCQl2YXIgZWFzZWQsCgkJCWhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTsKCgkJaWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7CgkJCXRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKAoJCQkJcGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uCgkJCSk7CgkJfSBlbHNlIHsKCQkJdGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7CgkJfQoJCXRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDsKCgkJaWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHsKCQkJdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApOwoJCX0KCgkJaWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7CgkJCWhvb2tzLnNldCggdGhpcyApOwoJCX0gZWxzZSB7CgkJCVR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTsKCQl9CgkJcmV0dXJuIHRoaXM7Cgl9Cn07CgpUd2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7CgpUd2Vlbi5wcm9wSG9va3MgPSB7CglfZGVmYXVsdDogewoJCWdldDogZnVuY3Rpb24oIHR3ZWVuICkgewoJCQl2YXIgcmVzdWx0OwoKCQkJaWYgKCB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJgoJCQkJKCF0d2Vlbi5lbGVtLnN0eWxlIHx8IHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsKSApIHsKCQkJCXJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07CgkJCX0KCgkJCS8vIHBhc3NpbmcgYW55IHZhbHVlIGFzIGEgNHRoIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseQoJCQkvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzCgkJCS8vIHNvLCBzaW1wbGUgdmFsdWVzIHN1Y2ggYXMgIjEwcHgiIGFyZSBwYXJzZWQgdG8gRmxvYXQuCgkJCS8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgInJvdGF0ZSgxcmFkKSIgYXJlIHJldHVybmVkIGFzIGlzLgoJCQlyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBmYWxzZSwgIiIgKTsKCQkJLy8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCAiYXV0byIgYXJlIGNvbnZlcnRlZCB0byAwLgoJCQlyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09ICJhdXRvIiA/IDAgOiByZXN1bHQ7CgkJfSwKCQlzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHsKCQkJLy8gdXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQgLSB1c2UgY3NzSG9vayBpZiBpdHMgdGhlcmUgLSB1c2UgLnN0eWxlIGlmIGl0cwoJCQkvLyBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZQoJCQlpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7CgkJCQlqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApOwoJCQl9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLnN0eWxlICYmICggdHdlZW4uZWxlbS5zdHlsZVsgalF1ZXJ5LmNzc1Byb3BzWyB0d2Vlbi5wcm9wIF0gXSAhPSBudWxsIHx8IGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdICkgKSB7CgkJCQlqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTsKCQkJfSBlbHNlIHsKCQkJCXR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdzsKCQkJfQoJCX0KCX0KfTsKCi8vIFJlbW92ZSBpbiAyLjAgLSB0aGlzIHN1cHBvcnRzIElFOCdzIHBhbmljIGJhc2VkIGFwcHJvYWNoCi8vIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2RlcwoKVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0gewoJc2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7CgkJaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHsKCQkJdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93OwoJCX0KCX0KfTsKCmpRdWVyeS5lYWNoKFsgInRvZ2dsZSIsICJzaG93IiwgImhpZGUiIF0sIGZ1bmN0aW9uKCBpLCBuYW1lICkgewoJdmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07CglqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKCQlyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09ICJib29sZWFuIiB8fAoJCQkvLyBzcGVjaWFsIGNoZWNrIGZvciAudG9nZ2xlKCBoYW5kbGVyLCBoYW5kbGVyLCAuLi4gKQoJCQkoICFpICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIGpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSApID8KCQkJY3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDoKCQkJdGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwoJfTsKfSk7CgpqUXVlcnkuZm4uZXh0ZW5kKHsKCWZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHsKCgkJLy8gc2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwCgkJcmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbiApLmNzcyggIm9wYWNpdHkiLCAwICkuc2hvdygpCgoJCQkvLyBhbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQKCQkJLmVuZCgpLmFuaW1hdGUoeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwoJfSwKCWFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHsKCQl2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLAoJCQlvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksCgkJCWRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7CgkJCQkvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdAoJCQkJdmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApOwoKCQkJCS8vIEVtcHR5IGFuaW1hdGlvbnMgcmVzb2x2ZSBpbW1lZGlhdGVseQoJCQkJaWYgKCBlbXB0eSApIHsKCQkJCQlhbmltLnN0b3AoIHRydWUgKTsKCQkJCX0KCQkJfTsKCgkJcmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgPwoJCQl0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOgoJCQl0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7Cgl9LAoJc3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7CgkJdmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHsKCQkJdmFyIHN0b3AgPSBob29rcy5zdG9wOwoJCQlkZWxldGUgaG9va3Muc3RvcDsKCQkJc3RvcCggZ290b0VuZCApOwoJCX07CgoJCWlmICggdHlwZW9mIHR5cGUgIT09ICJzdHJpbmciICkgewoJCQlnb3RvRW5kID0gY2xlYXJRdWV1ZTsKCQkJY2xlYXJRdWV1ZSA9IHR5cGU7CgkJCXR5cGUgPSB1bmRlZmluZWQ7CgkJfQoJCWlmICggY2xlYXJRdWV1ZSAmJiB0eXBlICE9PSBmYWxzZSApIHsKCQkJdGhpcy5xdWV1ZSggdHlwZSB8fCAiZngiLCBbXSApOwoJCX0KCgkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJdmFyIGRlcXVldWUgPSB0cnVlLAoJCQkJaW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArICJxdWV1ZUhvb2tzIiwKCQkJCXRpbWVycyA9IGpRdWVyeS50aW1lcnMsCgkJCQlkYXRhID0galF1ZXJ5Ll9kYXRhKCB0aGlzICk7CgoJCQlpZiAoIGluZGV4ICkgewoJCQkJaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHsKCQkJCQlzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCWZvciAoIGluZGV4IGluIGRhdGEgKSB7CgkJCQkJaWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7CgkJCQkJCXN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJZm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHsKCQkJCWlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgKHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUpICkgewoJCQkJCXRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTsKCQkJCQlkZXF1ZXVlID0gZmFsc2U7CgkJCQkJdGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTsKCQkJCX0KCQkJfQoKCQkJLy8gc3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZAoJCQkvLyB0aW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoIHdpbGwgZGVxdWV1ZQoJCQkvLyBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZAoJCQlpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7CgkJCQlqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApOwoJCQl9CgkJfSk7Cgl9Cn0pOwoKLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb24KZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHsKCXZhciB3aGljaCwKCQlhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH0sCgkJaSA9IDA7CgoJLy8gaWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLAoJLy8gaWYgd2UgZG9uJ3QgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodAoJaW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoPyAxIDogMDsKCWZvciggOyBpIDwgNCA7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHsKCQl3aGljaCA9IGNzc0V4cGFuZFsgaSBdOwoJCWF0dHJzWyAibWFyZ2luIiArIHdoaWNoIF0gPSBhdHRyc1sgInBhZGRpbmciICsgd2hpY2ggXSA9IHR5cGU7Cgl9CgoJaWYgKCBpbmNsdWRlV2lkdGggKSB7CgkJYXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTsKCX0KCglyZXR1cm4gYXR0cnM7Cn0KCi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnMKalF1ZXJ5LmVhY2goewoJc2xpZGVEb3duOiBnZW5GeCgic2hvdyIpLAoJc2xpZGVVcDogZ2VuRngoImhpZGUiKSwKCXNsaWRlVG9nZ2xlOiBnZW5GeCgidG9nZ2xlIiksCglmYWRlSW46IHsgb3BhY2l0eTogInNob3ciIH0sCglmYWRlT3V0OiB7IG9wYWNpdHk6ICJoaWRlIiB9LAoJZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiAidG9nZ2xlIiB9Cn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHsKCWpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkgewoJCXJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApOwoJfTsKfSk7CgpqUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7Cgl2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSAib2JqZWN0IiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDogewoJCWNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8CgkJCWpRdWVyeS5pc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLAoJCWR1cmF0aW9uOiBzcGVlZCwKCQllYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWpRdWVyeS5pc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmcKCX07CgoJb3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4Lm9mZiA/IDAgOiB0eXBlb2Ygb3B0LmR1cmF0aW9uID09PSAibnVtYmVyIiA/IG9wdC5kdXJhdGlvbiA6CgkJb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgPyBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXSA6IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7CgoJLy8gbm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gImZ4IgoJaWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7CgkJb3B0LnF1ZXVlID0gImZ4IjsKCX0KCgkvLyBRdWV1ZWluZwoJb3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTsKCglvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKCQlpZiAoIGpRdWVyeS5pc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7CgkJCW9wdC5vbGQuY2FsbCggdGhpcyApOwoJCX0KCgkJaWYgKCBvcHQucXVldWUgKSB7CgkJCWpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTsKCQl9Cgl9OwoKCXJldHVybiBvcHQ7Cn07CgpqUXVlcnkuZWFzaW5nID0gewoJbGluZWFyOiBmdW5jdGlvbiggcCApIHsKCQlyZXR1cm4gcDsKCX0sCglzd2luZzogZnVuY3Rpb24oIHAgKSB7CgkJcmV0dXJuIDAuNSAtIE1hdGguY29zKCBwKk1hdGguUEkgKSAvIDI7Cgl9Cn07CgpqUXVlcnkudGltZXJzID0gW107CmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0OwpqUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkgewoJdmFyIHRpbWVyLAoJCXRpbWVycyA9IGpRdWVyeS50aW1lcnMsCgkJaSA9IDA7CgoJZnhOb3cgPSBqUXVlcnkubm93KCk7CgoJZm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkgewoJCXRpbWVyID0gdGltZXJzWyBpIF07CgkJLy8gQ2hlY2tzIHRoZSB0aW1lciBoYXMgbm90IGFscmVhZHkgYmVlbiByZW1vdmVkCgkJaWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7CgkJCXRpbWVycy5zcGxpY2UoIGktLSwgMSApOwoJCX0KCX0KCglpZiAoICF0aW1lcnMubGVuZ3RoICkgewoJCWpRdWVyeS5meC5zdG9wKCk7Cgl9CglmeE5vdyA9IHVuZGVmaW5lZDsKfTsKCmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHsKCWlmICggdGltZXIoKSAmJiBqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICkgJiYgIXRpbWVySWQgKSB7CgkJdGltZXJJZCA9IHNldEludGVydmFsKCBqUXVlcnkuZngudGljaywgalF1ZXJ5LmZ4LmludGVydmFsICk7Cgl9Cn07CgpqUXVlcnkuZnguaW50ZXJ2YWwgPSAxMzsKCmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7CgljbGVhckludGVydmFsKCB0aW1lcklkICk7Cgl0aW1lcklkID0gbnVsbDsKfTsKCmpRdWVyeS5meC5zcGVlZHMgPSB7CglzbG93OiA2MDAsCglmYXN0OiAyMDAsCgkvLyBEZWZhdWx0IHNwZWVkCglfZGVmYXVsdDogNDAwCn07CgovLyBCYWNrIENvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludApqUXVlcnkuZnguc3RlcCA9IHt9OwoKaWYgKCBqUXVlcnkuZXhwciAmJiBqUXVlcnkuZXhwci5maWx0ZXJzICkgewoJalF1ZXJ5LmV4cHIuZmlsdGVycy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkgewoJCXJldHVybiBqUXVlcnkuZ3JlcChqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7CgkJCXJldHVybiBlbGVtID09PSBmbi5lbGVtOwoJCX0pLmxlbmd0aDsKCX07Cn0KdmFyIHJyb290ID0gL14oPzpib2R5fGh0bWwpJC9pOwoKalF1ZXJ5LmZuLm9mZnNldCA9IGZ1bmN0aW9uKCBvcHRpb25zICkgewoJaWYgKCBhcmd1bWVudHMubGVuZ3RoICkgewoJCXJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgPwoJCQl0aGlzIDoKCQkJdGhpcy5lYWNoKGZ1bmN0aW9uKCBpICkgewoJCQkJalF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTsKCQkJfSk7Cgl9CgoJdmFyIGRvY0VsZW0sIGJvZHksIHdpbiwgY2xpZW50VG9wLCBjbGllbnRMZWZ0LCBzY3JvbGxUb3AsIHNjcm9sbExlZnQsCgkJYm94ID0geyB0b3A6IDAsIGxlZnQ6IDAgfSwKCQllbGVtID0gdGhpc1sgMCBdLAoJCWRvYyA9IGVsZW0gJiYgZWxlbS5vd25lckRvY3VtZW50OwoKCWlmICggIWRvYyApIHsKCQlyZXR1cm47Cgl9CgoJaWYgKCAoYm9keSA9IGRvYy5ib2R5KSA9PT0gZWxlbSApIHsKCQlyZXR1cm4galF1ZXJ5Lm9mZnNldC5ib2R5T2Zmc2V0KCBlbGVtICk7Cgl9CgoJZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7CgoJLy8gTWFrZSBzdXJlIGl0J3Mgbm90IGEgZGlzY29ubmVjdGVkIERPTSBub2RlCglpZiAoICFqUXVlcnkuY29udGFpbnMoIGRvY0VsZW0sIGVsZW0gKSApIHsKCQlyZXR1cm4gYm94OwoJfQoKCS8vIElmIHdlIGRvbid0IGhhdmUgZ0JDUiwganVzdCB1c2UgMCwwIHJhdGhlciB0aGFuIGVycm9yCgkvLyBCbGFja0JlcnJ5IDUsIGlPUyAzIChvcmlnaW5hbCBpUGhvbmUpCglpZiAoIHR5cGVvZiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gInVuZGVmaW5lZCIgKSB7CgkJYm94ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKCX0KCXdpbiA9IGdldFdpbmRvdyggZG9jICk7CgljbGllbnRUb3AgID0gZG9jRWxlbS5jbGllbnRUb3AgIHx8IGJvZHkuY2xpZW50VG9wICB8fCAwOwoJY2xpZW50TGVmdCA9IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMDsKCXNjcm9sbFRvcCAgPSB3aW4ucGFnZVlPZmZzZXQgfHwgZG9jRWxlbS5zY3JvbGxUb3A7CglzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0IHx8IGRvY0VsZW0uc2Nyb2xsTGVmdDsKCXJldHVybiB7CgkJdG9wOiBib3gudG9wICArIHNjcm9sbFRvcCAgLSBjbGllbnRUb3AsCgkJbGVmdDogYm94LmxlZnQgKyBzY3JvbGxMZWZ0IC0gY2xpZW50TGVmdAoJfTsKfTsKCmpRdWVyeS5vZmZzZXQgPSB7CgoJYm9keU9mZnNldDogZnVuY3Rpb24oIGJvZHkgKSB7CgkJdmFyIHRvcCA9IGJvZHkub2Zmc2V0VG9wLAoJCQlsZWZ0ID0gYm9keS5vZmZzZXRMZWZ0OwoKCQlpZiAoIGpRdWVyeS5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0ICkgewoJCQl0b3AgICs9IHBhcnNlRmxvYXQoIGpRdWVyeS5jc3MoYm9keSwgIm1hcmdpblRvcCIpICkgfHwgMDsKCQkJbGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGJvZHksICJtYXJnaW5MZWZ0IikgKSB8fCAwOwoJCX0KCgkJcmV0dXJuIHsgdG9wOiB0b3AsIGxlZnQ6IGxlZnQgfTsKCX0sCgoJc2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHsKCQl2YXIgcG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCAicG9zaXRpb24iICk7CgoJCS8vIHNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW0KCQlpZiAoIHBvc2l0aW9uID09PSAic3RhdGljIiApIHsKCQkJZWxlbS5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CgkJfQoKCQl2YXIgY3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLAoJCQljdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpLAoJCQljdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCAidG9wIiApLAoJCQljdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgImxlZnQiICksCgkJCWNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gImZpeGVkIiApICYmIGpRdWVyeS5pbkFycmF5KCJhdXRvIiwgW2N1ckNTU1RvcCwgY3VyQ1NTTGVmdF0pID4gLTEsCgkJCXByb3BzID0ge30sIGN1clBvc2l0aW9uID0ge30sIGN1clRvcCwgY3VyTGVmdDsKCgkJLy8gbmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXIgdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkCgkJaWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHsKCQkJY3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7CgkJCWN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDsKCQkJY3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7CgkJfSBlbHNlIHsKCQkJY3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDsKCQkJY3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwOwoJCX0KCgkJaWYgKCBqUXVlcnkuaXNGdW5jdGlvbiggb3B0aW9ucyApICkgewoJCQlvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBjdXJPZmZzZXQgKTsKCQl9CgoJCWlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHsKCQkJcHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDsKCQl9CgkJaWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHsKCQkJcHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7CgkJfQoKCQlpZiAoICJ1c2luZyIgaW4gb3B0aW9ucyApIHsKCQkJb3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApOwoJCX0gZWxzZSB7CgkJCWN1ckVsZW0uY3NzKCBwcm9wcyApOwoJCX0KCX0KfTsKCgpqUXVlcnkuZm4uZXh0ZW5kKHsKCglwb3NpdGlvbjogZnVuY3Rpb24oKSB7CgkJaWYgKCAhdGhpc1swXSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIGVsZW0gPSB0aGlzWzBdLAoKCQkvLyBHZXQgKnJlYWwqIG9mZnNldFBhcmVudAoJCW9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50KCksCgoJCS8vIEdldCBjb3JyZWN0IG9mZnNldHMKCQlvZmZzZXQgICAgICAgPSB0aGlzLm9mZnNldCgpLAoJCXBhcmVudE9mZnNldCA9IHJyb290LnRlc3Qob2Zmc2V0UGFyZW50WzBdLm5vZGVOYW1lKSA/IHsgdG9wOiAwLCBsZWZ0OiAwIH0gOiBvZmZzZXRQYXJlbnQub2Zmc2V0KCk7CgoJCS8vIFN1YnRyYWN0IGVsZW1lbnQgbWFyZ2lucwoJCS8vIG5vdGU6IHdoZW4gYW4gZWxlbWVudCBoYXMgbWFyZ2luOiBhdXRvIHRoZSBvZmZzZXRMZWZ0IGFuZCBtYXJnaW5MZWZ0CgkJLy8gYXJlIHRoZSBzYW1lIGluIFNhZmFyaSBjYXVzaW5nIG9mZnNldC5sZWZ0IHRvIGluY29ycmVjdGx5IGJlIDAKCQlvZmZzZXQudG9wICAtPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKGVsZW0sICJtYXJnaW5Ub3AiKSApIHx8IDA7CgkJb2Zmc2V0LmxlZnQgLT0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhlbGVtLCAibWFyZ2luTGVmdCIpICkgfHwgMDsKCgkJLy8gQWRkIG9mZnNldFBhcmVudCBib3JkZXJzCgkJcGFyZW50T2Zmc2V0LnRvcCAgKz0gcGFyc2VGbG9hdCggalF1ZXJ5LmNzcyhvZmZzZXRQYXJlbnRbMF0sICJib3JkZXJUb3BXaWR0aCIpICkgfHwgMDsKCQlwYXJlbnRPZmZzZXQubGVmdCArPSBwYXJzZUZsb2F0KCBqUXVlcnkuY3NzKG9mZnNldFBhcmVudFswXSwgImJvcmRlckxlZnRXaWR0aCIpICkgfHwgMDsKCgkJLy8gU3VidHJhY3QgdGhlIHR3byBvZmZzZXRzCgkJcmV0dXJuIHsKCQkJdG9wOiAgb2Zmc2V0LnRvcCAgLSBwYXJlbnRPZmZzZXQudG9wLAoJCQlsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0CgkJfTsKCX0sCgoJb2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKSB7CgkJCXZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5OwoJCQl3aGlsZSAoIG9mZnNldFBhcmVudCAmJiAoIXJyb290LnRlc3Qob2Zmc2V0UGFyZW50Lm5vZGVOYW1lKSAmJiBqUXVlcnkuY3NzKG9mZnNldFBhcmVudCwgInBvc2l0aW9uIikgPT09ICJzdGF0aWMiKSApIHsKCQkJCW9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7CgkJCX0KCQkJcmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5ib2R5OwoJCX0pOwoJfQp9KTsKCgovLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHMKalF1ZXJ5LmVhY2goIHtzY3JvbGxMZWZ0OiAicGFnZVhPZmZzZXQiLCBzY3JvbGxUb3A6ICJwYWdlWU9mZnNldCJ9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkgewoJdmFyIHRvcCA9IC9ZLy50ZXN0KCBwcm9wICk7CgoJalF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7CgkJcmV0dXJuIGpRdWVyeS5hY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHsKCQkJdmFyIHdpbiA9IGdldFdpbmRvdyggZWxlbSApOwoKCQkJaWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHsKCQkJCXJldHVybiB3aW4gPyAocHJvcCBpbiB3aW4pID8gd2luWyBwcm9wIF0gOgoJCQkJCXdpbi5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIG1ldGhvZCBdIDoKCQkJCQllbGVtWyBtZXRob2QgXTsKCQkJfQoKCQkJaWYgKCB3aW4gKSB7CgkJCQl3aW4uc2Nyb2xsVG8oCgkJCQkJIXRvcCA/IHZhbCA6IGpRdWVyeSggd2luICkuc2Nyb2xsTGVmdCgpLAoJCQkJCSB0b3AgPyB2YWwgOiBqUXVlcnkoIHdpbiApLnNjcm9sbFRvcCgpCgkJCQkpOwoKCQkJfSBlbHNlIHsKCQkJCWVsZW1bIG1ldGhvZCBdID0gdmFsOwoJCQl9CgkJfSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGgsIG51bGwgKTsKCX07Cn0pOwoKZnVuY3Rpb24gZ2V0V2luZG93KCBlbGVtICkgewoJcmV0dXJuIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApID8KCQllbGVtIDoKCQllbGVtLm5vZGVUeXBlID09PSA5ID8KCQkJZWxlbS5kZWZhdWx0VmlldyB8fCBlbGVtLnBhcmVudFdpbmRvdyA6CgkJCWZhbHNlOwp9Ci8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kcwpqUXVlcnkuZWFjaCggeyBIZWlnaHQ6ICJoZWlnaHQiLCBXaWR0aDogIndpZHRoIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHsKCWpRdWVyeS5lYWNoKCB7IHBhZGRpbmc6ICJpbm5lciIgKyBuYW1lLCBjb250ZW50OiB0eXBlLCAiIjogIm91dGVyIiArIG5hbWUgfSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7CgkJLy8gbWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoCgkJalF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7CgkJCXZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09ICJib29sZWFuIiApLAoJCQkJZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyAibWFyZ2luIiA6ICJib3JkZXIiICk7CgoJCQlyZXR1cm4galF1ZXJ5LmFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkgewoJCQkJdmFyIGRvYzsKCgkJCQlpZiAoIGpRdWVyeS5pc1dpbmRvdyggZWxlbSApICkgewoJCQkJCS8vIEFzIG9mIDUvOC8yMDEyIHRoaXMgd2lsbCB5aWVsZCBpbmNvcnJlY3QgcmVzdWx0cyBmb3IgTW9iaWxlIFNhZmFyaSwgYnV0IHRoZXJlCgkJCQkJLy8gaXNuJ3QgYSB3aG9sZSBsb3Qgd2UgY2FuIGRvLiBTZWUgcHVsbCByZXF1ZXN0IGF0IHRoaXMgVVJMIGZvciBkaXNjdXNzaW9uOgoJCQkJCS8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNzY0CgkJCQkJcmV0dXJuIGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyAiY2xpZW50IiArIG5hbWUgXTsKCQkJCX0KCgkJCQkvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0CgkJCQlpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7CgkJCQkJZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7CgoJCQkJCS8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSwgd2hpY2hldmVyIGlzIGdyZWF0ZXN0CgkJCQkJLy8gdW5mb3J0dW5hdGVseSwgdGhpcyBjYXVzZXMgYnVnICMzODM4IGluIElFNi84IG9ubHksIGJ1dCB0aGVyZSBpcyBjdXJyZW50bHkgbm8gZ29vZCwgc21hbGwgd2F5IHRvIGZpeCBpdC4KCQkJCQlyZXR1cm4gTWF0aC5tYXgoCgkJCQkJCWVsZW0uYm9keVsgInNjcm9sbCIgKyBuYW1lIF0sIGRvY1sgInNjcm9sbCIgKyBuYW1lIF0sCgkJCQkJCWVsZW0uYm9keVsgIm9mZnNldCIgKyBuYW1lIF0sIGRvY1sgIm9mZnNldCIgKyBuYW1lIF0sCgkJCQkJCWRvY1sgImNsaWVudCIgKyBuYW1lIF0KCQkJCQkpOwoJCQkJfQoKCQkJCXJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8KCQkJCQkvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0CgkJCQkJalF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICkgOgoKCQkJCQkvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50CgkJCQkJalF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTsKCQkJfSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUsIG51bGwgKTsKCQl9OwoJfSk7Cn0pOwovLyBFeHBvc2UgalF1ZXJ5IHRvIHRoZSBnbG9iYWwgb2JqZWN0CndpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTsKCi8vIEV4cG9zZSBqUXVlcnkgYXMgYW4gQU1EIG1vZHVsZSwgYnV0IG9ubHkgZm9yIEFNRCBsb2FkZXJzIHRoYXQKLy8gdW5kZXJzdGFuZCB0aGUgaXNzdWVzIHdpdGggbG9hZGluZyBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBqUXVlcnkKLy8gaW4gYSBwYWdlIHRoYXQgYWxsIG1pZ2h0IGNhbGwgZGVmaW5lKCkuIFRoZSBsb2FkZXIgd2lsbCBpbmRpY2F0ZQovLyB0aGV5IGhhdmUgc3BlY2lhbCBhbGxvd2FuY2VzIGZvciBtdWx0aXBsZSBqUXVlcnkgdmVyc2lvbnMgYnkKLy8gc3BlY2lmeWluZyBkZWZpbmUuYW1kLmpRdWVyeSA9IHRydWUuIFJlZ2lzdGVyIGFzIGEgbmFtZWQgbW9kdWxlLAovLyBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsCi8vIGJ1dCBub3QgdXNlIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXQgdW5kZXJzdGFuZHMgYW5vbnltb3VzCi8vIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0IHdheSB0byByZWdpc3Rlci4KLy8gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmUgZGVyaXZlZCBmcm9tCi8vIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlIGZpbGUgbmFtZS4KLy8gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50cyB0byBjYWxsCi8vIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuCmlmICggdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kICYmIGRlZmluZS5hbWQualF1ZXJ5ICkgewoJZGVmaW5lKCAianF1ZXJ5IiwgW10sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpRdWVyeTsgfSApOwp9Cgp9KSggd2luZG93ICk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery-ui-1.9.2.custom.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjkuMiAtIDIwMTItMTItMTMKKiBodHRwOi8vanF1ZXJ5dWkuY29tCiogSW5jbHVkZXM6IGpxdWVyeS51aS5jb3JlLmpzLCBqcXVlcnkudWkud2lkZ2V0LmpzLCBqcXVlcnkudWkubW91c2UuanMsIGpxdWVyeS51aS5wb3NpdGlvbi5qcywganF1ZXJ5LnVpLmRyYWdnYWJsZS5qcywganF1ZXJ5LnVpLmRyb3BwYWJsZS5qcywganF1ZXJ5LnVpLnJlc2l6YWJsZS5qcywganF1ZXJ5LnVpLnNlbGVjdGFibGUuanMsIGpxdWVyeS51aS5zb3J0YWJsZS5qcywganF1ZXJ5LnVpLmFjY29yZGlvbi5qcywganF1ZXJ5LnVpLmF1dG9jb21wbGV0ZS5qcywganF1ZXJ5LnVpLmJ1dHRvbi5qcywganF1ZXJ5LnVpLmRhdGVwaWNrZXIuanMsIGpxdWVyeS51aS5kaWFsb2cuanMsIGpxdWVyeS51aS5tZW51LmpzLCBqcXVlcnkudWkucHJvZ3Jlc3NiYXIuanMsIGpxdWVyeS51aS5zbGlkZXIuanMsIGpxdWVyeS51aS5zcGlubmVyLmpzLCBqcXVlcnkudWkudGFicy5qcywganF1ZXJ5LnVpLnRvb2x0aXAuanMsIGpxdWVyeS51aS5lZmZlY3QuanMsIGpxdWVyeS51aS5lZmZlY3QtYmxpbmQuanMsIGpxdWVyeS51aS5lZmZlY3QtYm91bmNlLmpzLCBqcXVlcnkudWkuZWZmZWN0LWNsaXAuanMsIGpxdWVyeS51aS5lZmZlY3QtZHJvcC5qcywganF1ZXJ5LnVpLmVmZmVjdC1leHBsb2RlLmpzLCBqcXVlcnkudWkuZWZmZWN0LWZhZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtZm9sZC5qcywganF1ZXJ5LnVpLmVmZmVjdC1oaWdobGlnaHQuanMsIGpxdWVyeS51aS5lZmZlY3QtcHVsc2F0ZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1zY2FsZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1zaGFrZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1zbGlkZS5qcywganF1ZXJ5LnVpLmVmZmVjdC10cmFuc2Zlci5qcwoqIENvcHlyaWdodCAoYykgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIExpY2Vuc2VkIE1JVCAqLwoKKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSh0LG4pe3ZhciByLGksbyx1PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iYXJlYSI9PT11PyhyPXQucGFyZW50Tm9kZSxpPXIubmFtZSwhdC5ocmVmfHwhaXx8ci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im1hcCI/ITE6KG89ZSgiaW1nW3VzZW1hcD0jIitpKyJdIilbMF0sISFvJiZzKG8pKSk6KC9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdC8udGVzdCh1KT8hdC5kaXNhYmxlZDoiYSI9PT11P3QuaHJlZnx8bjpuKSYmcyh0KX1mdW5jdGlvbiBzKHQpe3JldHVybiBlLmV4cHIuZmlsdGVycy52aXNpYmxlKHQpJiYhZSh0KS5wYXJlbnRzKCkuYW5kU2VsZigpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlLmNzcyh0aGlzLCJ2aXNpYmlsaXR5Iik9PT0iaGlkZGVuIn0pLmxlbmd0aH12YXIgbj0wLHI9L151aS1pZC1cZCskLztlLnVpPWUudWl8fHt9O2lmKGUudWkudmVyc2lvbilyZXR1cm47ZS5leHRlbmQoZS51aSx7dmVyc2lvbjoiMS45LjIiLGtleUNvZGU6e0JBQ0tTUEFDRTo4LENPTU1BOjE4OCxERUxFVEU6NDYsRE9XTjo0MCxFTkQ6MzUsRU5URVI6MTMsRVNDQVBFOjI3LEhPTUU6MzYsTEVGVDozNyxOVU1QQURfQUREOjEwNyxOVU1QQURfREVDSU1BTDoxMTAsTlVNUEFEX0RJVklERToxMTEsTlVNUEFEX0VOVEVSOjEwOCxOVU1QQURfTVVMVElQTFk6MTA2LE5VTVBBRF9TVUJUUkFDVDoxMDksUEFHRV9ET1dOOjM0LFBBR0VfVVA6MzMsUEVSSU9EOjE5MCxSSUdIVDozOSxTUEFDRTozMixUQUI6OSxVUDozOH19KSxlLmZuLmV4dGVuZCh7X2ZvY3VzOmUuZm4uZm9jdXMsZm9jdXM6ZnVuY3Rpb24odCxuKXtyZXR1cm4gdHlwZW9mIHQ9PSJudW1iZXIiP3RoaXMuZWFjaChmdW5jdGlvbigpe3ZhciByPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe2UocikuZm9jdXMoKSxuJiZuLmNhbGwocil9LHQpfSk6dGhpcy5fZm9jdXMuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxzY3JvbGxQYXJlbnQ6ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4gZS51aS5pZSYmLyhzdGF0aWN8cmVsYXRpdmUpLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8L2Fic29sdXRlLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKT90PXRoaXMucGFyZW50cygpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybi8ocmVsYXRpdmV8YWJzb2x1dGV8Zml4ZWQpLy50ZXN0KGUuY3NzKHRoaXMsInBvc2l0aW9uIikpJiYvKGF1dG98c2Nyb2xsKS8udGVzdChlLmNzcyh0aGlzLCJvdmVyZmxvdyIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXkiKStlLmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCk6dD10aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4vKGF1dG98c2Nyb2xsKS8udGVzdChlLmNzcyh0aGlzLCJvdmVyZmxvdyIpK2UuY3NzKHRoaXMsIm92ZXJmbG93LXkiKStlLmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCksL2ZpeGVkLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8IXQubGVuZ3RoP2UoZG9jdW1lbnQpOnR9LHpJbmRleDpmdW5jdGlvbihuKXtpZihuIT09dClyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsbik7aWYodGhpcy5sZW5ndGgpe3ZhciByPWUodGhpc1swXSksaSxzO3doaWxlKHIubGVuZ3RoJiZyWzBdIT09ZG9jdW1lbnQpe2k9ci5jc3MoInBvc2l0aW9uIik7aWYoaT09PSJhYnNvbHV0ZSJ8fGk9PT0icmVsYXRpdmUifHxpPT09ImZpeGVkIil7cz1wYXJzZUludChyLmNzcygiekluZGV4IiksMTApO2lmKCFpc05hTihzKSYmcyE9PTApcmV0dXJuIHN9cj1yLnBhcmVudCgpfX1yZXR1cm4gMH0sdW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5pZHx8KHRoaXMuaWQ9InVpLWlkLSIrICsrbil9KX0scmVtb3ZlVW5pcXVlSWQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7ci50ZXN0KHRoaXMuaWQpJiZlKHRoaXMpLnJlbW92ZUF0dHIoImlkIil9KX19KSxlLmV4dGVuZChlLmV4cHJbIjoiXSx7ZGF0YTplLmV4cHIuY3JlYXRlUHNldWRvP2UuZXhwci5jcmVhdGVQc2V1ZG8oZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiEhZS5kYXRhKG4sdCl9fSk6ZnVuY3Rpb24odCxuLHIpe3JldHVybiEhZS5kYXRhKHQsclszXSl9LGZvY3VzYWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0LCFpc05hTihlLmF0dHIodCwidGFiaW5kZXgiKSkpfSx0YWJiYWJsZTpmdW5jdGlvbih0KXt2YXIgbj1lLmF0dHIodCwidGFiaW5kZXgiKSxyPWlzTmFOKG4pO3JldHVybihyfHxuPj0wKSYmaSh0LCFyKX19KSxlKGZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQuYm9keSxuPXQuYXBwZW5kQ2hpbGQobj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7bi5vZmZzZXRIZWlnaHQsZS5leHRlbmQobi5zdHlsZSx7bWluSGVpZ2h0OiIxMDBweCIsaGVpZ2h0OiJhdXRvIixwYWRkaW5nOjAsYm9yZGVyV2lkdGg6MH0pLGUuc3VwcG9ydC5taW5IZWlnaHQ9bi5vZmZzZXRIZWlnaHQ9PT0xMDAsZS5zdXBwb3J0LnNlbGVjdHN0YXJ0PSJvbnNlbGVjdHN0YXJ0ImluIG4sdC5yZW1vdmVDaGlsZChuKS5zdHlsZS5kaXNwbGF5PSJub25lIn0pLGUoIjxhPiIpLm91dGVyV2lkdGgoMSkuanF1ZXJ5fHxlLmVhY2goWyJXaWR0aCIsIkhlaWdodCJdLGZ1bmN0aW9uKG4scil7ZnVuY3Rpb24gdSh0LG4scixzKXtyZXR1cm4gZS5lYWNoKGksZnVuY3Rpb24oKXtuLT1wYXJzZUZsb2F0KGUuY3NzKHQsInBhZGRpbmciK3RoaXMpKXx8MCxyJiYobi09cGFyc2VGbG9hdChlLmNzcyh0LCJib3JkZXIiK3RoaXMrIldpZHRoIikpfHwwKSxzJiYobi09cGFyc2VGbG9hdChlLmNzcyh0LCJtYXJnaW4iK3RoaXMpKXx8MCl9KSxufXZhciBpPXI9PT0iV2lkdGgiP1siTGVmdCIsIlJpZ2h0Il06WyJUb3AiLCJCb3R0b20iXSxzPXIudG9Mb3dlckNhc2UoKSxvPXtpbm5lcldpZHRoOmUuZm4uaW5uZXJXaWR0aCxpbm5lckhlaWdodDplLmZuLmlubmVySGVpZ2h0LG91dGVyV2lkdGg6ZS5mbi5vdXRlcldpZHRoLG91dGVySGVpZ2h0OmUuZm4ub3V0ZXJIZWlnaHR9O2UuZm5bImlubmVyIityXT1mdW5jdGlvbihuKXtyZXR1cm4gbj09PXQ/b1siaW5uZXIiK3JdLmNhbGwodGhpcyk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5jc3Mocyx1KHRoaXMsbikrInB4Iil9KX0sZS5mblsib3V0ZXIiK3JdPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHR5cGVvZiB0IT0ibnVtYmVyIj9vWyJvdXRlciIrcl0uY2FsbCh0aGlzLHQpOnRoaXMuZWFjaChmdW5jdGlvbigpe2UodGhpcykuY3NzKHMsdSh0aGlzLHQsITAsbikrInB4Iil9KX19KSxlKCI8YT4iKS5kYXRhKCJhLWIiLCJhIikucmVtb3ZlRGF0YSgiYS1iIikuZGF0YSgiYS1iIikmJihlLmZuLnJlbW92ZURhdGE9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2FsbCh0aGlzLGUuY2FtZWxDYXNlKG4pKTp0LmNhbGwodGhpcyl9fShlLmZuLnJlbW92ZURhdGEpKSxmdW5jdGlvbigpe3ZhciB0PS9tc2llIChbXHcuXSspLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSl8fFtdO2UudWkuaWU9dC5sZW5ndGg/ITA6ITEsZS51aS5pZTY9cGFyc2VGbG9hdCh0WzFdLDEwKT09PTZ9KCksZS5mbi5leHRlbmQoe2Rpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaW5kKChlLnN1cHBvcnQuc2VsZWN0c3RhcnQ/InNlbGVjdHN0YXJ0IjoibW91c2Vkb3duIikrIi51aS1kaXNhYmxlU2VsZWN0aW9uIixmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9KX0sZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCIudWktZGlzYWJsZVNlbGVjdGlvbiIpfX0pLGUuZXh0ZW5kKGUudWkse3BsdWdpbjp7YWRkOmZ1bmN0aW9uKHQsbixyKXt2YXIgaSxzPWUudWlbdF0ucHJvdG90eXBlO2ZvcihpIGluIHIpcy5wbHVnaW5zW2ldPXMucGx1Z2luc1tpXXx8W10scy5wbHVnaW5zW2ldLnB1c2goW24scltpXV0pfSxjYWxsOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPWUucGx1Z2luc1t0XTtpZighaXx8IWUuZWxlbWVudFswXS5wYXJlbnROb2RlfHxlLmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZT09PTExKXJldHVybjtmb3Iocj0wO3I8aS5sZW5ndGg7cisrKWUub3B0aW9uc1tpW3JdWzBdXSYmaVtyXVsxXS5hcHBseShlLmVsZW1lbnQsbil9fSxjb250YWluczplLmNvbnRhaW5zLGhhc1Njcm9sbDpmdW5jdGlvbih0LG4pe2lmKGUodCkuY3NzKCJvdmVyZmxvdyIpPT09ImhpZGRlbiIpcmV0dXJuITE7dmFyIHI9biYmbj09PSJsZWZ0Ij8ic2Nyb2xsTGVmdCI6InNjcm9sbFRvcCIsaT0hMTtyZXR1cm4gdFtyXT4wPyEwOih0W3JdPTEsaT10W3JdPjAsdFtyXT0wLGkpfSxpc092ZXJBeGlzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT50JiZlPHQrbn0saXNPdmVyOmZ1bmN0aW9uKHQsbixyLGkscyxvKXtyZXR1cm4gZS51aS5pc092ZXJBeGlzKHQscixzKSYmZS51aS5pc092ZXJBeGlzKG4saSxvKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49MCxyPUFycmF5LnByb3RvdHlwZS5zbGljZSxpPWUuY2xlYW5EYXRhO2UuY2xlYW5EYXRhPWZ1bmN0aW9uKHQpe2Zvcih2YXIgbj0wLHI7KHI9dFtuXSkhPW51bGw7bisrKXRyeXtlKHIpLnRyaWdnZXJIYW5kbGVyKCJyZW1vdmUiKX1jYXRjaChzKXt9aSh0KX0sZS53aWRnZXQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHMsbyx1LGE9dC5zcGxpdCgiLiIpWzBdO3Q9dC5zcGxpdCgiLiIpWzFdLGk9YSsiLSIrdCxyfHwocj1uLG49ZS5XaWRnZXQpLGUuZXhwclsiOiJdW2kudG9Mb3dlckNhc2UoKV09ZnVuY3Rpb24odCl7cmV0dXJuISFlLmRhdGEodCxpKX0sZVthXT1lW2FdfHx7fSxzPWVbYV1bdF0sbz1lW2FdW3RdPWZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2NyZWF0ZVdpZGdldClyZXR1cm4gbmV3IG8oZSx0KTthcmd1bWVudHMubGVuZ3RoJiZ0aGlzLl9jcmVhdGVXaWRnZXQoZSx0KX0sZS5leHRlbmQobyxzLHt2ZXJzaW9uOnIudmVyc2lvbixfcHJvdG86ZS5leHRlbmQoe30sciksX2NoaWxkQ29uc3RydWN0b3JzOltdfSksdT1uZXcgbix1Lm9wdGlvbnM9ZS53aWRnZXQuZXh0ZW5kKHt9LHUub3B0aW9ucyksZS5lYWNoKHIsZnVuY3Rpb24odCxpKXtlLmlzRnVuY3Rpb24oaSkmJihyW3RdPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5wcm90b3R5cGVbdF0uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyPWZ1bmN0aW9uKGUpe3JldHVybiBuLnByb3RvdHlwZVt0XS5hcHBseSh0aGlzLGUpfTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zdXBlcixuPXRoaXMuX3N1cGVyQXBwbHkscztyZXR1cm4gdGhpcy5fc3VwZXI9ZSx0aGlzLl9zdXBlckFwcGx5PXIscz1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9zdXBlcj10LHRoaXMuX3N1cGVyQXBwbHk9bixzfX0oKSl9KSxvLnByb3RvdHlwZT1lLndpZGdldC5leHRlbmQodSx7d2lkZ2V0RXZlbnRQcmVmaXg6cz91LndpZGdldEV2ZW50UHJlZml4OnR9LHIse2NvbnN0cnVjdG9yOm8sbmFtZXNwYWNlOmEsd2lkZ2V0TmFtZTp0LHdpZGdldEJhc2VDbGFzczppLHdpZGdldEZ1bGxOYW1lOml9KSxzPyhlLmVhY2gocy5fY2hpbGRDb25zdHJ1Y3RvcnMsZnVuY3Rpb24odCxuKXt2YXIgcj1uLnByb3RvdHlwZTtlLndpZGdldChyLm5hbWVzcGFjZSsiLiIrci53aWRnZXROYW1lLG8sbi5fcHJvdG8pfSksZGVsZXRlIHMuX2NoaWxkQ29uc3RydWN0b3JzKTpuLl9jaGlsZENvbnN0cnVjdG9ycy5wdXNoKG8pLGUud2lkZ2V0LmJyaWRnZSh0LG8pfSxlLndpZGdldC5leHRlbmQ9ZnVuY3Rpb24obil7dmFyIGk9ci5jYWxsKGFyZ3VtZW50cywxKSxzPTAsbz1pLmxlbmd0aCx1LGE7Zm9yKDtzPG87cysrKWZvcih1IGluIGlbc10pYT1pW3NdW3VdLGlbc10uaGFzT3duUHJvcGVydHkodSkmJmEhPT10JiYoZS5pc1BsYWluT2JqZWN0KGEpP25bdV09ZS5pc1BsYWluT2JqZWN0KG5bdV0pP2Uud2lkZ2V0LmV4dGVuZCh7fSxuW3VdLGEpOmUud2lkZ2V0LmV4dGVuZCh7fSxhKTpuW3VdPWEpO3JldHVybiBufSxlLndpZGdldC5icmlkZ2U9ZnVuY3Rpb24obixpKXt2YXIgcz1pLnByb3RvdHlwZS53aWRnZXRGdWxsTmFtZXx8bjtlLmZuW25dPWZ1bmN0aW9uKG8pe3ZhciB1PXR5cGVvZiBvPT0ic3RyaW5nIixhPXIuY2FsbChhcmd1bWVudHMsMSksZj10aGlzO3JldHVybiBvPSF1JiZhLmxlbmd0aD9lLndpZGdldC5leHRlbmQuYXBwbHkobnVsbCxbb10uY29uY2F0KGEpKTpvLHU/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHIsaT1lLmRhdGEodGhpcyxzKTtpZighaSlyZXR1cm4gZS5lcnJvcigiY2Fubm90IGNhbGwgbWV0aG9kcyBvbiAiK24rIiBwcmlvciB0byBpbml0aWFsaXphdGlvbjsgIisiYXR0ZW1wdGVkIHRvIGNhbGwgbWV0aG9kICciK28rIiciKTtpZighZS5pc0Z1bmN0aW9uKGlbb10pfHxvLmNoYXJBdCgwKT09PSJfIilyZXR1cm4gZS5lcnJvcigibm8gc3VjaCBtZXRob2QgJyIrbysiJyBmb3IgIituKyIgd2lkZ2V0IGluc3RhbmNlIik7cj1pW29dLmFwcGx5KGksYSk7aWYociE9PWkmJnIhPT10KXJldHVybiBmPXImJnIuanF1ZXJ5P2YucHVzaFN0YWNrKHIuZ2V0KCkpOnIsITF9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lLmRhdGEodGhpcyxzKTt0P3Qub3B0aW9uKG98fHt9KS5faW5pdCgpOmUuZGF0YSh0aGlzLHMsbmV3IGkobyx0aGlzKSl9KSxmfX0sZS5XaWRnZXQ9ZnVuY3Rpb24oKXt9LGUuV2lkZ2V0Ll9jaGlsZENvbnN0cnVjdG9ycz1bXSxlLldpZGdldC5wcm90b3R5cGU9e3dpZGdldE5hbWU6IndpZGdldCIsd2lkZ2V0RXZlbnRQcmVmaXg6IiIsZGVmYXVsdEVsZW1lbnQ6IjxkaXY+IixvcHRpb25zOntkaXNhYmxlZDohMSxjcmVhdGU6bnVsbH0sX2NyZWF0ZVdpZGdldDpmdW5jdGlvbih0LHIpe3I9ZShyfHx0aGlzLmRlZmF1bHRFbGVtZW50fHx0aGlzKVswXSx0aGlzLmVsZW1lbnQ9ZShyKSx0aGlzLnV1aWQ9bisrLHRoaXMuZXZlbnROYW1lc3BhY2U9Ii4iK3RoaXMud2lkZ2V0TmFtZSt0aGlzLnV1aWQsdGhpcy5vcHRpb25zPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMsdGhpcy5fZ2V0Q3JlYXRlT3B0aW9ucygpLHQpLHRoaXMuYmluZGluZ3M9ZSgpLHRoaXMuaG92ZXJhYmxlPWUoKSx0aGlzLmZvY3VzYWJsZT1lKCksciE9PXRoaXMmJihlLmRhdGEocix0aGlzLndpZGdldE5hbWUsdGhpcyksZS5kYXRhKHIsdGhpcy53aWRnZXRGdWxsTmFtZSx0aGlzKSx0aGlzLl9vbighMCx0aGlzLmVsZW1lbnQse3JlbW92ZTpmdW5jdGlvbihlKXtlLnRhcmdldD09PXImJnRoaXMuZGVzdHJveSgpfX0pLHRoaXMuZG9jdW1lbnQ9ZShyLnN0eWxlP3Iub3duZXJEb2N1bWVudDpyLmRvY3VtZW50fHxyKSx0aGlzLndpbmRvdz1lKHRoaXMuZG9jdW1lbnRbMF0uZGVmYXVsdFZpZXd8fHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOmUubm9vcCxfZ2V0Q3JlYXRlRXZlbnREYXRhOmUubm9vcCxfY3JlYXRlOmUubm9vcCxfaW5pdDplLm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3koKSx0aGlzLmVsZW1lbnQudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLnJlbW92ZURhdGEoZS5jYW1lbENhc2UodGhpcy53aWRnZXRGdWxsTmFtZSkpLHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKSx0aGlzLmJpbmRpbmdzLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sX2Rlc3Ryb3k6ZS5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihuLHIpe3ZhciBpPW4scyxvLHU7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIGUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKHR5cGVvZiBuPT0ic3RyaW5nIil7aT17fSxzPW4uc3BsaXQoIi4iKSxuPXMuc2hpZnQoKTtpZihzLmxlbmd0aCl7bz1pW25dPWUud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbbl0pO2Zvcih1PTA7dTxzLmxlbmd0aC0xO3UrKylvW3NbdV1dPW9bc1t1XV18fHt9LG89b1tzW3VdXTtuPXMucG9wKCk7aWYocj09PXQpcmV0dXJuIG9bbl09PT10P251bGw6b1tuXTtvW25dPXJ9ZWxzZXtpZihyPT09dClyZXR1cm4gdGhpcy5vcHRpb25zW25dPT09dD9udWxsOnRoaXMub3B0aW9uc1tuXTtpW25dPXJ9fXJldHVybiB0aGlzLl9zZXRPcHRpb25zKGkpLHRoaXN9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpdGhpcy5fc2V0T3B0aW9uKHQsZVt0XSk7cmV0dXJuIHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vcHRpb25zW2VdPXQsZT09PSJkaXNhYmxlZCImJih0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKHRoaXMud2lkZ2V0RnVsbE5hbWUrIi1kaXNhYmxlZCB1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KS5hdHRyKCJhcmlhLWRpc2FibGVkIix0KSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSksdGhpc30sZW5hYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLCExKX0sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwhMCl9LF9vbjpmdW5jdGlvbih0LG4scil7dmFyIGkscz10aGlzO3R5cGVvZiB0IT0iYm9vbGVhbiImJihyPW4sbj10LHQ9ITEpLHI/KG49aT1lKG4pLHRoaXMuYmluZGluZ3M9dGhpcy5iaW5kaW5ncy5hZGQobikpOihyPW4sbj10aGlzLmVsZW1lbnQsaT10aGlzLndpZGdldCgpKSxlLmVhY2gocixmdW5jdGlvbihyLG8pe2Z1bmN0aW9uIHUoKXtpZighdCYmKHMub3B0aW9ucy5kaXNhYmxlZD09PSEwfHxlKHRoaXMpLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpKSlyZXR1cm47cmV0dXJuKHR5cGVvZiBvPT0ic3RyaW5nIj9zW29dOm8pLmFwcGx5KHMsYXJndW1lbnRzKX10eXBlb2YgbyE9InN0cmluZyImJih1Lmd1aWQ9by5ndWlkPW8uZ3VpZHx8dS5ndWlkfHxlLmd1aWQrKyk7dmFyIGE9ci5tYXRjaCgvXihcdyspXHMqKC4qKSQvKSxmPWFbMV0rcy5ldmVudE5hbWVzcGFjZSxsPWFbMl07bD9pLmRlbGVnYXRlKGwsZix1KTpuLmJpbmQoZix1KX0pfSxfb2ZmOmZ1bmN0aW9uKGUsdCl7dD0odHx8IiIpLnNwbGl0KCIgIikuam9pbih0aGlzLmV2ZW50TmFtZXNwYWNlKyIgIikrdGhpcy5ldmVudE5hbWVzcGFjZSxlLnVuYmluZCh0KS51bmRlbGVnYXRlKHQpfSxfZGVsYXk6ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7cmV0dXJuKHR5cGVvZiBlPT0ic3RyaW5nIj9yW2VdOmUpLmFwcGx5KHIsYXJndW1lbnRzKX12YXIgcj10aGlzO3JldHVybiBzZXRUaW1lb3V0KG4sdHx8MCl9LF9ob3ZlcmFibGU6ZnVuY3Rpb24odCl7dGhpcy5ob3ZlcmFibGU9dGhpcy5ob3ZlcmFibGUuYWRkKHQpLHRoaXMuX29uKHQse21vdXNlZW50ZXI6ZnVuY3Rpb24odCl7ZSh0LmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSxtb3VzZWxlYXZlOmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX19KX0sX2ZvY3VzYWJsZTpmdW5jdGlvbih0KXt0aGlzLmZvY3VzYWJsZT10aGlzLmZvY3VzYWJsZS5hZGQodCksdGhpcy5fb24odCx7Zm9jdXNpbjpmdW5jdGlvbih0KXtlKHQuY3VycmVudFRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9LGZvY3Vzb3V0OmZ1bmN0aW9uKHQpe2UodC5jdXJyZW50VGFyZ2V0KS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX19KX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxuLHIpe3ZhciBpLHMsbz10aGlzLm9wdGlvbnNbdF07cj1yfHx7fSxuPWUuRXZlbnQobiksbi50eXBlPSh0PT09dGhpcy53aWRnZXRFdmVudFByZWZpeD90OnRoaXMud2lkZ2V0RXZlbnRQcmVmaXgrdCkudG9Mb3dlckNhc2UoKSxuLnRhcmdldD10aGlzLmVsZW1lbnRbMF0scz1uLm9yaWdpbmFsRXZlbnQ7aWYocylmb3IoaSBpbiBzKWkgaW4gbnx8KG5baV09c1tpXSk7cmV0dXJuIHRoaXMuZWxlbWVudC50cmlnZ2VyKG4sciksIShlLmlzRnVuY3Rpb24obykmJm8uYXBwbHkodGhpcy5lbGVtZW50WzBdLFtuXS5jb25jYXQocikpPT09ITF8fG4uaXNEZWZhdWx0UHJldmVudGVkKCkpfX0sZS5lYWNoKHtzaG93OiJmYWRlSW4iLGhpZGU6ImZhZGVPdXQifSxmdW5jdGlvbih0LG4pe2UuV2lkZ2V0LnByb3RvdHlwZVsiXyIrdF09ZnVuY3Rpb24ocixpLHMpe3R5cGVvZiBpPT0ic3RyaW5nIiYmKGk9e2VmZmVjdDppfSk7dmFyIG8sdT1pP2k9PT0hMHx8dHlwZW9mIGk9PSJudW1iZXIiP246aS5lZmZlY3R8fG46dDtpPWl8fHt9LHR5cGVvZiBpPT0ibnVtYmVyIiYmKGk9e2R1cmF0aW9uOml9KSxvPSFlLmlzRW1wdHlPYmplY3QoaSksaS5jb21wbGV0ZT1zLGkuZGVsYXkmJnIuZGVsYXkoaS5kZWxheSksbyYmZS5lZmZlY3RzJiYoZS5lZmZlY3RzLmVmZmVjdFt1XXx8ZS51aUJhY2tDb21wYXQhPT0hMSYmZS5lZmZlY3RzW3VdKT9yW3RdKGkpOnUhPT10JiZyW3VdP3JbdV0oaS5kdXJhdGlvbixpLmVhc2luZyxzKTpyLnF1ZXVlKGZ1bmN0aW9uKG4pe2UodGhpcylbdF0oKSxzJiZzLmNhbGwoclswXSksbigpfSl9fSksZS51aUJhY2tDb21wYXQhPT0hMSYmKGUuV2lkZ2V0LnByb3RvdHlwZS5fZ2V0Q3JlYXRlT3B0aW9ucz1mdW5jdGlvbigpe3JldHVybiBlLm1ldGFkYXRhJiZlLm1ldGFkYXRhLmdldCh0aGlzLmVsZW1lbnRbMF0pW3RoaXMud2lkZ2V0TmFtZV19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49ITE7ZShkb2N1bWVudCkubW91c2V1cChmdW5jdGlvbihlKXtuPSExfSksZS53aWRnZXQoInVpLm1vdXNlIix7dmVyc2lvbjoiMS45LjIiLG9wdGlvbnM6e2NhbmNlbDoiaW5wdXQsdGV4dGFyZWEsYnV0dG9uLHNlbGVjdCxvcHRpb24iLGRpc3RhbmNlOjEsZGVsYXk6MH0sX21vdXNlSW5pdDpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbGVtZW50LmJpbmQoIm1vdXNlZG93bi4iK3RoaXMud2lkZ2V0TmFtZSxmdW5jdGlvbihlKXtyZXR1cm4gdC5fbW91c2VEb3duKGUpfSkuYmluZCgiY2xpY2suIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24obil7aWYoITA9PT1lLmRhdGEobi50YXJnZXQsdC53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSlyZXR1cm4gZS5yZW1vdmVEYXRhKG4udGFyZ2V0LHQud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50Iiksbi5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSwhMX0pLHRoaXMuc3RhcnRlZD0hMX0sX21vdXNlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUmJmUoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKX0sX21vdXNlRG93bjpmdW5jdGlvbih0KXtpZihuKXJldHVybjt0aGlzLl9tb3VzZVN0YXJ0ZWQmJnRoaXMuX21vdXNlVXAodCksdGhpcy5fbW91c2VEb3duRXZlbnQ9dDt2YXIgcj10aGlzLGk9dC53aGljaD09PTEscz10eXBlb2YgdGhpcy5vcHRpb25zLmNhbmNlbD09InN0cmluZyImJnQudGFyZ2V0Lm5vZGVOYW1lP2UodC50YXJnZXQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLmNhbmNlbCkubGVuZ3RoOiExO2lmKCFpfHxzfHwhdGhpcy5fbW91c2VDYXB0dXJlKHQpKXJldHVybiEwO3RoaXMubW91c2VEZWxheU1ldD0hdGhpcy5vcHRpb25zLmRlbGF5LHRoaXMubW91c2VEZWxheU1ldHx8KHRoaXMuX21vdXNlRGVsYXlUaW1lcj1zZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ci5tb3VzZURlbGF5TWV0PSEwfSx0aGlzLm9wdGlvbnMuZGVsYXkpKTtpZih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KHQpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KHQpKXt0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydCh0KSE9PSExO2lmKCF0aGlzLl9tb3VzZVN0YXJ0ZWQpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSwhMH1yZXR1cm4hMD09PWUuZGF0YSh0LnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpJiZlLnJlbW92ZURhdGEodC50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbihlKXtyZXR1cm4gci5fbW91c2VNb3ZlKGUpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHIuX21vdXNlVXAoZSl9LGUoZG9jdW1lbnQpLmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHQucHJldmVudERlZmF1bHQoKSxuPSEwLCEwfSxfbW91c2VNb3ZlOmZ1bmN0aW9uKHQpe3JldHVybiFlLnVpLmllfHxkb2N1bWVudC5kb2N1bWVudE1vZGU+PTl8fCEhdC5idXR0b24/dGhpcy5fbW91c2VTdGFydGVkPyh0aGlzLl9tb3VzZURyYWcodCksdC5wcmV2ZW50RGVmYXVsdCgpKToodGhpcy5fbW91c2VEaXN0YW5jZU1ldCh0KSYmdGhpcy5fbW91c2VEZWxheU1ldCh0KSYmKHRoaXMuX21vdXNlU3RhcnRlZD10aGlzLl9tb3VzZVN0YXJ0KHRoaXMuX21vdXNlRG93bkV2ZW50LHQpIT09ITEsdGhpcy5fbW91c2VTdGFydGVkP3RoaXMuX21vdXNlRHJhZyh0KTp0aGlzLl9tb3VzZVVwKHQpKSwhdGhpcy5fbW91c2VTdGFydGVkKTp0aGlzLl9tb3VzZVVwKHQpfSxfbW91c2VVcDpmdW5jdGlvbih0KXtyZXR1cm4gZShkb2N1bWVudCkudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSx0LnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmZS5kYXRhKHQudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKHQpKSwhMX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLWUucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLWUucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlfSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tb3VzZURlbGF5TWV0fSxfbW91c2VTdGFydDpmdW5jdGlvbihlKXt9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbihlKXtyZXR1cm4hMH19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaChlLHQsbil7cmV0dXJuW3BhcnNlSW50KGVbMF0sMTApKihsLnRlc3QoZVswXSk/dC8xMDA6MSkscGFyc2VJbnQoZVsxXSwxMCkqKGwudGVzdChlWzFdKT9uLzEwMDoxKV19ZnVuY3Rpb24gcCh0LG4pe3JldHVybiBwYXJzZUludChlLmNzcyh0LG4pLDEwKXx8MH1lLnVpPWUudWl8fHt9O3ZhciBuLHI9TWF0aC5tYXgsaT1NYXRoLmFicyxzPU1hdGgucm91bmQsbz0vbGVmdHxjZW50ZXJ8cmlnaHQvLHU9L3RvcHxjZW50ZXJ8Ym90dG9tLyxhPS9bXCtcLV1cZCslPy8sZj0vXlx3Ky8sbD0vJSQvLGM9ZS5mbi5wb3NpdGlvbjtlLnBvc2l0aW9uPXtzY3JvbGxiYXJXaWR0aDpmdW5jdGlvbigpe2lmKG4hPT10KXJldHVybiBuO3ZhciByLGkscz1lKCI8ZGl2IHN0eWxlPSdkaXNwbGF5OmJsb2NrO3dpZHRoOjUwcHg7aGVpZ2h0OjUwcHg7b3ZlcmZsb3c6aGlkZGVuOyc+PGRpdiBzdHlsZT0naGVpZ2h0OjEwMHB4O3dpZHRoOmF1dG87Jz48L2Rpdj48L2Rpdj4iKSxvPXMuY2hpbGRyZW4oKVswXTtyZXR1cm4gZSgiYm9keSIpLmFwcGVuZChzKSxyPW8ub2Zmc2V0V2lkdGgscy5jc3MoIm92ZXJmbG93Iiwic2Nyb2xsIiksaT1vLm9mZnNldFdpZHRoLHI9PT1pJiYoaT1zWzBdLmNsaWVudFdpZHRoKSxzLnJlbW92ZSgpLG49ci1pfSxnZXRTY3JvbGxJbmZvOmZ1bmN0aW9uKHQpe3ZhciBuPXQuaXNXaW5kb3c/IiI6dC5lbGVtZW50LmNzcygib3ZlcmZsb3cteCIpLHI9dC5pc1dpbmRvdz8iIjp0LmVsZW1lbnQuY3NzKCJvdmVyZmxvdy15IiksaT1uPT09InNjcm9sbCJ8fG49PT0iYXV0byImJnQud2lkdGg8dC5lbGVtZW50WzBdLnNjcm9sbFdpZHRoLHM9cj09PSJzY3JvbGwifHxyPT09ImF1dG8iJiZ0LmhlaWdodDx0LmVsZW1lbnRbMF0uc2Nyb2xsSGVpZ2h0O3JldHVybnt3aWR0aDppP2UucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowLGhlaWdodDpzP2UucG9zaXRpb24uc2Nyb2xsYmFyV2lkdGgoKTowfX0sZ2V0V2l0aGluSW5mbzpmdW5jdGlvbih0KXt2YXIgbj1lKHR8fHdpbmRvdykscj1lLmlzV2luZG93KG5bMF0pO3JldHVybntlbGVtZW50Om4saXNXaW5kb3c6cixvZmZzZXQ6bi5vZmZzZXQoKXx8e2xlZnQ6MCx0b3A6MH0sc2Nyb2xsTGVmdDpuLnNjcm9sbExlZnQoKSxzY3JvbGxUb3A6bi5zY3JvbGxUb3AoKSx3aWR0aDpyP24ud2lkdGgoKTpuLm91dGVyV2lkdGgoKSxoZWlnaHQ6cj9uLmhlaWdodCgpOm4ub3V0ZXJIZWlnaHQoKX19fSxlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKHQpe2lmKCF0fHwhdC5vZilyZXR1cm4gYy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dD1lLmV4dGVuZCh7fSx0KTt2YXIgbixsLGQsdixtLGc9ZSh0Lm9mKSx5PWUucG9zaXRpb24uZ2V0V2l0aGluSW5mbyh0LndpdGhpbiksYj1lLnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeSksdz1nWzBdLEU9KHQuY29sbGlzaW9ufHwiZmxpcCIpLnNwbGl0KCIgIiksUz17fTtyZXR1cm4gdy5ub2RlVHlwZT09PTk/KGw9Zy53aWR0aCgpLGQ9Zy5oZWlnaHQoKSx2PXt0b3A6MCxsZWZ0OjB9KTplLmlzV2luZG93KHcpPyhsPWcud2lkdGgoKSxkPWcuaGVpZ2h0KCksdj17dG9wOmcuc2Nyb2xsVG9wKCksbGVmdDpnLnNjcm9sbExlZnQoKX0pOncucHJldmVudERlZmF1bHQ/KHQuYXQ9ImxlZnQgdG9wIixsPWQ9MCx2PXt0b3A6dy5wYWdlWSxsZWZ0OncucGFnZVh9KToobD1nLm91dGVyV2lkdGgoKSxkPWcub3V0ZXJIZWlnaHQoKSx2PWcub2Zmc2V0KCkpLG09ZS5leHRlbmQoe30sdiksZS5lYWNoKFsibXkiLCJhdCJdLGZ1bmN0aW9uKCl7dmFyIGU9KHRbdGhpc118fCIiKS5zcGxpdCgiICIpLG4scjtlLmxlbmd0aD09PTEmJihlPW8udGVzdChlWzBdKT9lLmNvbmNhdChbImNlbnRlciJdKTp1LnRlc3QoZVswXSk/WyJjZW50ZXIiXS5jb25jYXQoZSk6WyJjZW50ZXIiLCJjZW50ZXIiXSksZVswXT1vLnRlc3QoZVswXSk/ZVswXToiY2VudGVyIixlWzFdPXUudGVzdChlWzFdKT9lWzFdOiJjZW50ZXIiLG49YS5leGVjKGVbMF0pLHI9YS5leGVjKGVbMV0pLFNbdGhpc109W24/blswXTowLHI/clswXTowXSx0W3RoaXNdPVtmLmV4ZWMoZVswXSlbMF0sZi5leGVjKGVbMV0pWzBdXX0pLEUubGVuZ3RoPT09MSYmKEVbMV09RVswXSksdC5hdFswXT09PSJyaWdodCI/bS5sZWZ0Kz1sOnQuYXRbMF09PT0iY2VudGVyIiYmKG0ubGVmdCs9bC8yKSx0LmF0WzFdPT09ImJvdHRvbSI/bS50b3ArPWQ6dC5hdFsxXT09PSJjZW50ZXIiJiYobS50b3ArPWQvMiksbj1oKFMuYXQsbCxkKSxtLmxlZnQrPW5bMF0sbS50b3ArPW5bMV0sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIG8sdSxhPWUodGhpcyksZj1hLm91dGVyV2lkdGgoKSxjPWEub3V0ZXJIZWlnaHQoKSx3PXAodGhpcywibWFyZ2luTGVmdCIpLHg9cCh0aGlzLCJtYXJnaW5Ub3AiKSxUPWYrdytwKHRoaXMsIm1hcmdpblJpZ2h0IikrYi53aWR0aCxOPWMreCtwKHRoaXMsIm1hcmdpbkJvdHRvbSIpK2IuaGVpZ2h0LEM9ZS5leHRlbmQoe30sbSksaz1oKFMubXksYS5vdXRlcldpZHRoKCksYS5vdXRlckhlaWdodCgpKTt0Lm15WzBdPT09InJpZ2h0Ij9DLmxlZnQtPWY6dC5teVswXT09PSJjZW50ZXIiJiYoQy5sZWZ0LT1mLzIpLHQubXlbMV09PT0iYm90dG9tIj9DLnRvcC09Yzp0Lm15WzFdPT09ImNlbnRlciImJihDLnRvcC09Yy8yKSxDLmxlZnQrPWtbMF0sQy50b3ArPWtbMV0sZS5zdXBwb3J0Lm9mZnNldEZyYWN0aW9uc3x8KEMubGVmdD1zKEMubGVmdCksQy50b3A9cyhDLnRvcCkpLG89e21hcmdpbkxlZnQ6dyxtYXJnaW5Ub3A6eH0sZS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKHIsaSl7ZS51aS5wb3NpdGlvbltFW3JdXSYmZS51aS5wb3NpdGlvbltFW3JdXVtpXShDLHt0YXJnZXRXaWR0aDpsLHRhcmdldEhlaWdodDpkLGVsZW1XaWR0aDpmLGVsZW1IZWlnaHQ6Yyxjb2xsaXNpb25Qb3NpdGlvbjpvLGNvbGxpc2lvbldpZHRoOlQsY29sbGlzaW9uSGVpZ2h0Ok4sb2Zmc2V0OltuWzBdK2tbMF0sblsxXStrWzFdXSxteTp0Lm15LGF0OnQuYXQsd2l0aGluOnksZWxlbTphfSl9KSxlLmZuLmJnaWZyYW1lJiZhLmJnaWZyYW1lKCksdC51c2luZyYmKHU9ZnVuY3Rpb24oZSl7dmFyIG49di5sZWZ0LUMubGVmdCxzPW4rbC1mLG89di50b3AtQy50b3AsdT1vK2QtYyxoPXt0YXJnZXQ6e2VsZW1lbnQ6ZyxsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6bCxoZWlnaHQ6ZH0sZWxlbWVudDp7ZWxlbWVudDphLGxlZnQ6Qy5sZWZ0LHRvcDpDLnRvcCx3aWR0aDpmLGhlaWdodDpjfSxob3Jpem9udGFsOnM8MD8ibGVmdCI6bj4wPyJyaWdodCI6ImNlbnRlciIsdmVydGljYWw6dTwwPyJ0b3AiOm8+MD8iYm90dG9tIjoibWlkZGxlIn07bDxmJiZpKG4rcyk8bCYmKGguaG9yaXpvbnRhbD0iY2VudGVyIiksZDxjJiZpKG8rdSk8ZCYmKGgudmVydGljYWw9Im1pZGRsZSIpLHIoaShuKSxpKHMpKT5yKGkobyksaSh1KSk/aC5pbXBvcnRhbnQ9Imhvcml6b250YWwiOmguaW1wb3J0YW50PSJ2ZXJ0aWNhbCIsdC51c2luZy5jYWxsKHRoaXMsZSxoKX0pLGEub2Zmc2V0KGUuZXh0ZW5kKEMse3VzaW5nOnV9KSl9KX0sZS51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC53aXRoaW4saT1uLmlzV2luZG93P24uc2Nyb2xsTGVmdDpuLm9mZnNldC5sZWZ0LHM9bi53aWR0aCxvPWUubGVmdC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsdT1pLW8sYT1vK3QuY29sbGlzaW9uV2lkdGgtcy1pLGY7dC5jb2xsaXNpb25XaWR0aD5zP3U+MCYmYTw9MD8oZj1lLmxlZnQrdSt0LmNvbGxpc2lvbldpZHRoLXMtaSxlLmxlZnQrPXUtZik6YT4wJiZ1PD0wP2UubGVmdD1pOnU+YT9lLmxlZnQ9aStzLXQuY29sbGlzaW9uV2lkdGg6ZS5sZWZ0PWk6dT4wP2UubGVmdCs9dTphPjA/ZS5sZWZ0LT1hOmUubGVmdD1yKGUubGVmdC1vLGUubGVmdCl9LHRvcDpmdW5jdGlvbihlLHQpe3ZhciBuPXQud2l0aGluLGk9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3Ascz10LndpdGhpbi5oZWlnaHQsbz1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCx1PWktbyxhPW8rdC5jb2xsaXNpb25IZWlnaHQtcy1pLGY7dC5jb2xsaXNpb25IZWlnaHQ+cz91PjAmJmE8PTA/KGY9ZS50b3ArdSt0LmNvbGxpc2lvbkhlaWdodC1zLWksZS50b3ArPXUtZik6YT4wJiZ1PD0wP2UudG9wPWk6dT5hP2UudG9wPWkrcy10LmNvbGxpc2lvbkhlaWdodDplLnRvcD1pOnU+MD9lLnRvcCs9dTphPjA/ZS50b3AtPWE6ZS50b3A9cihlLnRvcC1vLGUudG9wKX19LGZsaXA6e2xlZnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LmxlZnQrbi5zY3JvbGxMZWZ0LHM9bi53aWR0aCxvPW4uaXNXaW5kb3c/bi5zY3JvbGxMZWZ0Om4ub2Zmc2V0LmxlZnQsdT1lLmxlZnQtdC5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5MZWZ0LGE9dS1vLGY9dSt0LmNvbGxpc2lvbldpZHRoLXMtbyxsPXQubXlbMF09PT0ibGVmdCI/LXQuZWxlbVdpZHRoOnQubXlbMF09PT0icmlnaHQiP3QuZWxlbVdpZHRoOjAsYz10LmF0WzBdPT09ImxlZnQiP3QudGFyZ2V0V2lkdGg6dC5hdFswXT09PSJyaWdodCI/LXQudGFyZ2V0V2lkdGg6MCxoPS0yKnQub2Zmc2V0WzBdLHAsZDtpZihhPDApe3A9ZS5sZWZ0K2wrYytoK3QuY29sbGlzaW9uV2lkdGgtcy1yO2lmKHA8MHx8cDxpKGEpKWUubGVmdCs9bCtjK2h9ZWxzZSBpZihmPjApe2Q9ZS5sZWZ0LXQuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtsK2MraC1vO2lmKGQ+MHx8aShkKTxmKWUubGVmdCs9bCtjK2h9fSx0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj10LndpdGhpbixyPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxzPW4uaGVpZ2h0LG89bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsdT1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxhPXUtbyxmPXUrdC5jb2xsaXNpb25IZWlnaHQtcy1vLGw9dC5teVsxXT09PSJ0b3AiLGM9bD8tdC5lbGVtSGVpZ2h0OnQubXlbMV09PT0iYm90dG9tIj90LmVsZW1IZWlnaHQ6MCxoPXQuYXRbMV09PT0idG9wIj90LnRhcmdldEhlaWdodDp0LmF0WzFdPT09ImJvdHRvbSI/LXQudGFyZ2V0SGVpZ2h0OjAscD0tMip0Lm9mZnNldFsxXSxkLHY7YTwwPyh2PWUudG9wK2MraCtwK3QuY29sbGlzaW9uSGVpZ2h0LXMtcixlLnRvcCtjK2grcD5hJiYodjwwfHx2PGkoYSkpJiYoZS50b3ArPWMraCtwKSk6Zj4wJiYoZD1lLnRvcC10LmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCtjK2grcC1vLGUudG9wK2MraCtwPmYmJihkPjB8fGkoZCk8ZikmJihlLnRvcCs9YytoK3ApKX19LGZsaXBmaXQ6e2xlZnQ6ZnVuY3Rpb24oKXtlLnVpLnBvc2l0aW9uLmZsaXAubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS51aS5wb3NpdGlvbi5maXQubGVmdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHRvcDpmdW5jdGlvbigpe2UudWkucG9zaXRpb24uZmxpcC50b3AuYXBwbHkodGhpcyxhcmd1bWVudHMpLGUudWkucG9zaXRpb24uZml0LnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24oKXt2YXIgdCxuLHIsaSxzLG89ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXSx1PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Q9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChvPyJkaXYiOiJib2R5Iikscj17dmlzaWJpbGl0eToiaGlkZGVuIix3aWR0aDowLGhlaWdodDowLGJvcmRlcjowLG1hcmdpbjowLGJhY2tncm91bmQ6Im5vbmUifSxvJiZlLmV4dGVuZChyLHtwb3NpdGlvbjoiYWJzb2x1dGUiLGxlZnQ6Ii0xMDAwcHgiLHRvcDoiLTEwMDBweCJ9KTtmb3IocyBpbiByKXQuc3R5bGVbc109cltzXTt0LmFwcGVuZENoaWxkKHUpLG49b3x8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LG4uaW5zZXJ0QmVmb3JlKHQsbi5maXJzdENoaWxkKSx1LnN0eWxlLmNzc1RleHQ9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMTAuNzQzMjIyMnB4OyIsaT1lKHUpLm9mZnNldCgpLmxlZnQsZS5zdXBwb3J0Lm9mZnNldEZyYWN0aW9ucz1pPjEwJiZpPDExLHQuaW5uZXJIVE1MPSIiLG4ucmVtb3ZlQ2hpbGQodCl9KCksZS51aUJhY2tDb21wYXQhPT0hMSYmZnVuY3Rpb24oZSl7dmFyIG49ZS5mbi5wb3NpdGlvbjtlLmZuLnBvc2l0aW9uPWZ1bmN0aW9uKHIpe2lmKCFyfHwhci5vZmZzZXQpcmV0dXJuIG4uY2FsbCh0aGlzLHIpO3ZhciBpPXIub2Zmc2V0LnNwbGl0KCIgIikscz1yLmF0LnNwbGl0KCIgIik7cmV0dXJuIGkubGVuZ3RoPT09MSYmKGlbMV09aVswXSksL15cZC8udGVzdChpWzBdKSYmKGlbMF09IisiK2lbMF0pLC9eXGQvLnRlc3QoaVsxXSkmJihpWzFdPSIrIitpWzFdKSxzLmxlbmd0aD09PTEmJigvbGVmdHxjZW50ZXJ8cmlnaHQvLnRlc3Qoc1swXSk/c1sxXT0iY2VudGVyIjooc1sxXT1zWzBdLHNbMF09ImNlbnRlciIpKSxuLmNhbGwodGhpcyxlLmV4dGVuZChyLHthdDpzWzBdK2lbMF0rIiAiK3NbMV0raVsxXSxvZmZzZXQ6dH0pKX19KGpRdWVyeSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5kcmFnZ2FibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4yIix3aWRnZXRFdmVudFByZWZpeDoiZHJhZyIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOiJkZWZhdWx0IixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZToiYm90aCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITF9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuaGVscGVyPT0ib3JpZ2luYWwiJiYhL14oPzpyfGF8ZikvLnRlc3QodGhpcy5lbGVtZW50LmNzcygicG9zaXRpb24iKSkmJih0aGlzLmVsZW1lbnRbMF0uc3R5bGUucG9zaXRpb249InJlbGF0aXZlIiksdGhpcy5vcHRpb25zLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlIiksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlSW5pdCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZHJhZ2dhYmxlIHVpLWRyYWdnYWJsZS1kcmFnZ2luZyB1aS1kcmFnZ2FibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnM7cmV0dXJuIHRoaXMuaGVscGVyfHxuLmRpc2FibGVkfHxlKHQudGFyZ2V0KS5pcygiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKT8hMToodGhpcy5oYW5kbGU9dGhpcy5fZ2V0SGFuZGxlKHQpLHRoaXMuaGFuZGxlPyhlKG4uaWZyYW1lRml4PT09ITA/ImlmcmFtZSI6bi5pZnJhbWVGaXgpLmVhY2goZnVuY3Rpb24oKXtlKCc8ZGl2IGNsYXNzPSJ1aS1kcmFnZ2FibGUtaWZyYW1lRml4IiBzdHlsZT0iYmFja2dyb3VuZDogI2ZmZjsiPjwvZGl2PicpLmNzcyh7d2lkdGg6dGhpcy5vZmZzZXRXaWR0aCsicHgiLGhlaWdodDp0aGlzLm9mZnNldEhlaWdodCsicHgiLHBvc2l0aW9uOiJhYnNvbHV0ZSIsb3BhY2l0eToiMC4wMDEiLHpJbmRleDoxZTN9KS5jc3MoZSh0aGlzKS5vZmZzZXQoKSkuYXBwZW5kVG8oImJvZHkiKX0pLCEwKTohMSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKHQpLHRoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLHRoaXMuX2NhY2hlTWFyZ2lucygpLHRoaXMuY3NzUG9zaXRpb249dGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpLHRoaXMub2Zmc2V0PXRoaXMucG9zaXRpb25BYnM9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSxlLmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6dC5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDp0LnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQpLHRoaXMub3JpZ2luYWxQYWdlWD10LnBhZ2VYLHRoaXMub3JpZ2luYWxQYWdlWT10LnBhZ2VZLG4uY3Vyc29yQXQmJnRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIobi5jdXJzb3JBdCksbi5jb250YWlubWVudCYmdGhpcy5fc2V0Q29udGFpbm1lbnQoKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCk9PT0hMT8odGhpcy5fY2xlYXIoKSwhMSk6KHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxlLnVpLmRkbWFuYWdlciYmIW4uZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyx0KSx0aGlzLl9tb3VzZURyYWcodCwhMCksZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWdTdGFydCh0aGlzLHQpLCEwKX0sX21vdXNlRHJhZzpmdW5jdGlvbih0LG4pe3RoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbih0KSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpO2lmKCFuKXt2YXIgcj10aGlzLl91aUhhc2goKTtpZih0aGlzLl90cmlnZ2VyKCJkcmFnIix0LHIpPT09ITEpcmV0dXJuIHRoaXMuX21vdXNlVXAoe30pLCExO3RoaXMucG9zaXRpb249ci5wb3NpdGlvbn1pZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieSIpdGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IjtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieCIpdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCI7cmV0dXJuIGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCl7dmFyIG49ITE7ZS51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmKG49ZS51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLHQpKSx0aGlzLmRyb3BwZWQmJihuPXRoaXMuZHJvcHBlZCx0aGlzLmRyb3BwZWQ9ITEpO3ZhciByPXRoaXMuZWxlbWVudFswXSxpPSExO3doaWxlKHImJihyPXIucGFyZW50Tm9kZSkpcj09ZG9jdW1lbnQmJihpPSEwKTtpZighaSYmdGhpcy5vcHRpb25zLmhlbHBlcj09PSJvcmlnaW5hbCIpcmV0dXJuITE7aWYodGhpcy5vcHRpb25zLnJldmVydD09ImludmFsaWQiJiYhbnx8dGhpcy5vcHRpb25zLnJldmVydD09InZhbGlkIiYmbnx8dGhpcy5vcHRpb25zLnJldmVydD09PSEwfHxlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLnJldmVydCkmJnRoaXMub3B0aW9ucy5yZXZlcnQuY2FsbCh0aGlzLmVsZW1lbnQsbikpe3ZhciBzPXRoaXM7ZSh0aGlzLmhlbHBlcikuYW5pbWF0ZSh0aGlzLm9yaWdpbmFsUG9zaXRpb24scGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydER1cmF0aW9uLDEwKSxmdW5jdGlvbigpe3MuX3RyaWdnZXIoInN0b3AiLHQpIT09ITEmJnMuX2NsZWFyKCl9KX1lbHNlIHRoaXMuX3RyaWdnZXIoInN0b3AiLHQpIT09ITEmJnRoaXMuX2NsZWFyKCk7cmV0dXJuITF9LF9tb3VzZVVwOmZ1bmN0aW9uKHQpe3JldHVybiBlKCJkaXYudWktZHJhZ2dhYmxlLWlmcmFtZUZpeCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyx0KSxlLnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsdCl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbih0KXt2YXIgbj0hdGhpcy5vcHRpb25zLmhhbmRsZXx8IWUodGhpcy5vcHRpb25zLmhhbmRsZSx0aGlzLmVsZW1lbnQpLmxlbmd0aD8hMDohMTtyZXR1cm4gZSh0aGlzLm9wdGlvbnMuaGFuZGxlLHRoaXMuZWxlbWVudCkuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09dC50YXJnZXQmJihuPSEwKX0pLG59LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9ZS5pc0Z1bmN0aW9uKG4uaGVscGVyKT9lKG4uaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbdF0pKTpuLmhlbHBlcj09ImNsb25lIj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gci5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxyLmFwcGVuZFRvKG4uYXBwZW5kVG89PSJwYXJlbnQiP3RoaXMuZWxlbWVudFswXS5wYXJlbnROb2RlOm4uYXBwZW5kVG8pLHJbMF0hPXRoaXMuZWxlbWVudFswXSYmIS8oZml4ZWR8YWJzb2x1dGUpLy50ZXN0KHIuY3NzKCJwb3NpdGlvbiIpKSYmci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKSxyfSxfYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcjpmdW5jdGlvbih0KXt0eXBlb2YgdD09InN0cmluZyImJih0PXQuc3BsaXQoIiAiKSksZS5pc0FycmF5KHQpJiYodD17bGVmdDordFswXSx0b3A6K3RbMV18fDB9KSwibGVmdCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10LmxlZnQrdGhpcy5tYXJnaW5zLmxlZnQpLCJyaWdodCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2subGVmdD10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXQucmlnaHQrdGhpcy5tYXJnaW5zLmxlZnQpLCJ0b3AiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10LnRvcCt0aGlzLm1hcmdpbnMudG9wKSwiYm90dG9tImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdC5ib3R0b20rdGhpcy5tYXJnaW5zLnRvcCl9LF9nZXRQYXJlbnRPZmZzZXQ6ZnVuY3Rpb24oKXt0aGlzLm9mZnNldFBhcmVudD10aGlzLmhlbHBlci5vZmZzZXRQYXJlbnQoKTt2YXIgdD10aGlzLm9mZnNldFBhcmVudC5vZmZzZXQoKTt0aGlzLmNzc1Bvc2l0aW9uPT0iYWJzb2x1dGUiJiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJmUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodC5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksdC50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKTtpZih0aGlzLm9mZnNldFBhcmVudFswXT09ZG9jdW1lbnQuYm9keXx8dGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZSYmdGhpcy5vZmZzZXRQYXJlbnRbMF0udGFnTmFtZS50b0xvd2VyQ2FzZSgpPT0iaHRtbCImJmUudWkuaWUpdD17dG9wOjAsbGVmdDowfTtyZXR1cm57dG9wOnQudG9wKyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSxsZWZ0OnQubGVmdCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApfX0sX2dldFJlbGF0aXZlT2Zmc2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5jc3NQb3NpdGlvbj09InJlbGF0aXZlIil7dmFyIGU9dGhpcy5lbGVtZW50LnBvc2l0aW9uKCk7cmV0dXJue3RvcDplLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6ZS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luVG9wIiksMTApfHwwLHJpZ2h0OnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksMTApfHwwLGJvdHRvbTpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9uczt0LmNvbnRhaW5tZW50PT0icGFyZW50IiYmKHQuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSk7aWYodC5jb250YWlubWVudD09ImRvY3VtZW50Inx8dC5jb250YWlubWVudD09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1bdC5jb250YWlubWVudD09ImRvY3VtZW50Ij8wOmUod2luZG93KS5zY3JvbGxMZWZ0KCktdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCx0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6ZSh3aW5kb3cpLnNjcm9sbFRvcCgpLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLCh0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6ZSh3aW5kb3cpLnNjcm9sbExlZnQoKSkrZSh0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LCh0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6ZSh3aW5kb3cpLnNjcm9sbFRvcCgpKSsoZSh0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdO2lmKCEvXihkb2N1bWVudHx3aW5kb3d8cGFyZW50KSQvLnRlc3QodC5jb250YWlubWVudCkmJnQuY29udGFpbm1lbnQuY29uc3RydWN0b3IhPUFycmF5KXt2YXIgbj1lKHQuY29udGFpbm1lbnQpLHI9blswXTtpZighcilyZXR1cm47dmFyIGk9bi5vZmZzZXQoKSxzPWUocikuY3NzKCJvdmVyZmxvdyIpIT0iaGlkZGVuIjt0aGlzLmNvbnRhaW5tZW50PVsocGFyc2VJbnQoZShyKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGUocikuY3NzKCJwYWRkaW5nTGVmdCIpLDEwKXx8MCksKHBhcnNlSW50KGUocikuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KGUocikuY3NzKCJwYWRkaW5nVG9wIiksMTApfHwwKSwocz9NYXRoLm1heChyLnNjcm9sbFdpZHRoLHIub2Zmc2V0V2lkdGgpOnIub2Zmc2V0V2lkdGgpLShwYXJzZUludChlKHIpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKHM/TWF0aC5tYXgoci5zY3JvbGxIZWlnaHQsci5vZmZzZXRIZWlnaHQpOnIub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZShyKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZV9jb250YWluZXI9bn1lbHNlIHQuY29udGFpbm1lbnQuY29uc3RydWN0b3I9PUFycmF5JiYodGhpcy5jb250YWlubWVudD10LmNvbnRhaW5tZW50KX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsbil7bnx8KG49dGhpcy5wb3NpdGlvbik7dmFyIHI9dD09ImFic29sdXRlIj8xOi0xLGk9dGhpcy5vcHRpb25zLHM9dGhpcy5jc3NQb3NpdGlvbiE9ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LG89LyhodG1sfGJvZHkpL2kudGVzdChzWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6bi50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnIrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTpvPzA6cy5zY3JvbGxUb3AoKSkqcixsZWZ0Om4ubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KnIrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqci0odGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOm8/MDpzLnNjcm9sbExlZnQoKSkqcn19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXMuY3NzUG9zaXRpb24hPSJhYnNvbHV0ZSJ8fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmISFlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxpPS8oaHRtbHxib2R5KS9pLnRlc3QoclswXS50YWdOYW1lKSxzPXQucGFnZVgsbz10LnBhZ2VZO2lmKHRoaXMub3JpZ2luYWxQb3NpdGlvbil7dmFyIHU7aWYodGhpcy5jb250YWlubWVudCl7aWYodGhpcy5yZWxhdGl2ZV9jb250YWluZXIpe3ZhciBhPXRoaXMucmVsYXRpdmVfY29udGFpbmVyLm9mZnNldCgpO3U9W3RoaXMuY29udGFpbm1lbnRbMF0rYS5sZWZ0LHRoaXMuY29udGFpbm1lbnRbMV0rYS50b3AsdGhpcy5jb250YWlubWVudFsyXSthLmxlZnQsdGhpcy5jb250YWlubWVudFszXSthLnRvcF19ZWxzZSB1PXRoaXMuY29udGFpbm1lbnQ7dC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHVbMF0mJihzPXVbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dVsxXSYmKG89dVsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD51WzJdJiYocz11WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnVbM10mJihvPXVbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKX1pZihuLmdyaWQpe3ZhciBmPW4uZ3JpZFsxXT90aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVkpL24uZ3JpZFsxXSkqbi5ncmlkWzFdOnRoaXMub3JpZ2luYWxQYWdlWTtvPXU/Zi10aGlzLm9mZnNldC5jbGljay50b3A8dVsxXXx8Zi10aGlzLm9mZnNldC5jbGljay50b3A+dVszXT9mLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx1WzFdP2Yrbi5ncmlkWzFdOmYtbi5ncmlkWzFdOmY6Zjt2YXIgbD1uLmdyaWRbMF0/dGhpcy5vcmlnaW5hbFBhZ2VYK01hdGgucm91bmQoKHMtdGhpcy5vcmlnaW5hbFBhZ2VYKS9uLmdyaWRbMF0pKm4uZ3JpZFswXTp0aGlzLm9yaWdpbmFsUGFnZVg7cz11P2wtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx1WzBdfHxsLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dVsyXT9sLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dVswXT9sK24uZ3JpZFswXTpsLW4uZ3JpZFswXTpsOmx9fXJldHVybnt0b3A6by10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmk/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0Kyh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aT8wOnIuc2Nyb2xsTGVmdCgpKX19LF9jbGVhcjpmdW5jdGlvbigpe3RoaXMuaGVscGVyLnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLmhlbHBlclswXSE9dGhpcy5lbGVtZW50WzBdJiYhdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMX0sX3RyaWdnZXI6ZnVuY3Rpb24odCxuLHIpe3JldHVybiByPXJ8fHRoaXMuX3VpSGFzaCgpLGUudWkucGx1Z2luLmNhbGwodGhpcyx0LFtuLHJdKSx0PT0iZHJhZyImJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpKSxlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLHQsbixyKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKGUpe3JldHVybntoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6dGhpcy5wb3NpdGlvbkFic319fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJjb25uZWN0VG9Tb3J0YWJsZSIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPXIub3B0aW9ucyxzPWUuZXh0ZW5kKHt9LG4se2l0ZW06ci5lbGVtZW50fSk7ci5zb3J0YWJsZXM9W10sZShpLmNvbm5lY3RUb1NvcnRhYmxlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49ZS5kYXRhKHRoaXMsInNvcnRhYmxlIik7biYmIW4ub3B0aW9ucy5kaXNhYmxlZCYmKHIuc29ydGFibGVzLnB1c2goe2luc3RhbmNlOm4sc2hvdWxkUmV2ZXJ0Om4ub3B0aW9ucy5yZXZlcnR9KSxuLnJlZnJlc2hQb3NpdGlvbnMoKSxuLl90cmlnZ2VyKCJhY3RpdmF0ZSIsdCxzKSl9KX0sc3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT1lLmV4dGVuZCh7fSxuLHtpdGVtOnIuZWxlbWVudH0pO2UuZWFjaChyLnNvcnRhYmxlcyxmdW5jdGlvbigpe3RoaXMuaW5zdGFuY2UuaXNPdmVyPyh0aGlzLmluc3RhbmNlLmlzT3Zlcj0wLHIuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMCx0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5zaG91bGRSZXZlcnQmJih0aGlzLmluc3RhbmNlLm9wdGlvbnMucmV2ZXJ0PSEwKSx0aGlzLmluc3RhbmNlLl9tb3VzZVN0b3AodCksdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcixyLm9wdGlvbnMuaGVscGVyPT0ib3JpZ2luYWwiJiZ0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLmNzcyh7dG9wOiJhdXRvIixsZWZ0OiJhdXRvIn0pKToodGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLHRoaXMuaW5zdGFuY2UuX3RyaWdnZXIoImRlYWN0aXZhdGUiLHQsaSkpfSl9LGRyYWc6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9dGhpcyxzPWZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub2Zmc2V0LmNsaWNrLnRvcCxyPXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQsaT10aGlzLnBvc2l0aW9uQWJzLnRvcCxzPXRoaXMucG9zaXRpb25BYnMubGVmdCxvPXQuaGVpZ2h0LHU9dC53aWR0aCxhPXQudG9wLGY9dC5sZWZ0O3JldHVybiBlLnVpLmlzT3ZlcihpK24scytyLGEsZixvLHUpfTtlLmVhY2goci5zb3J0YWJsZXMsZnVuY3Rpb24ocyl7dmFyIG89ITEsdT10aGlzO3RoaXMuaW5zdGFuY2UucG9zaXRpb25BYnM9ci5wb3NpdGlvbkFicyx0aGlzLmluc3RhbmNlLmhlbHBlclByb3BvcnRpb25zPXIuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2s9ci5vZmZzZXQuY2xpY2ssdGhpcy5pbnN0YW5jZS5faW50ZXJzZWN0c1dpdGgodGhpcy5pbnN0YW5jZS5jb250YWluZXJDYWNoZSkmJihvPSEwLGUuZWFjaChyLnNvcnRhYmxlcyxmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc3RhbmNlLnBvc2l0aW9uQWJzPXIucG9zaXRpb25BYnMsdGhpcy5pbnN0YW5jZS5oZWxwZXJQcm9wb3J0aW9ucz1yLmhlbHBlclByb3BvcnRpb25zLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrPXIub2Zmc2V0LmNsaWNrLHRoaXMhPXUmJnRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpJiZlLnVpLmNvbnRhaW5zKHUuaW5zdGFuY2UuZWxlbWVudFswXSx0aGlzLmluc3RhbmNlLmVsZW1lbnRbMF0pJiYobz0hMSksb30pKSxvPyh0aGlzLmluc3RhbmNlLmlzT3Zlcnx8KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTEsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbT1lKGkpLmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKS5hcHBlbmRUbyh0aGlzLmluc3RhbmNlLmVsZW1lbnQpLmRhdGEoInNvcnRhYmxlLWl0ZW0iLCEwKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gbi5oZWxwZXJbMF19LHQudGFyZ2V0PXRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sdGhpcy5pbnN0YW5jZS5fbW91c2VDYXB0dXJlKHQsITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQodCwhMCwhMCksdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wPXIub2Zmc2V0LmNsaWNrLnRvcCx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0PXIub2Zmc2V0LmNsaWNrLmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQtPXIub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LHRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3AtPXIub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCxyLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIix0KSxyLmRyb3BwZWQ9dGhpcy5pbnN0YW5jZS5lbGVtZW50LHIuY3VycmVudEl0ZW09ci5lbGVtZW50LHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGU9ciksdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSYmdGhpcy5pbnN0YW5jZS5fbW91c2VEcmFnKHQpKTp0aGlzLmluc3RhbmNlLmlzT3ZlciYmKHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuaW5zdGFuY2UuX3VpSGFzaCh0aGlzLmluc3RhbmNlKSksdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKHQsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9dGhpcy5pbnN0YW5jZS5vcHRpb25zLl9oZWxwZXIsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5yZW1vdmUoKSx0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyJiZ0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyLnJlbW92ZSgpLHIuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsdCksci5kcm9wcGVkPSExKX0pfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKCJib2R5IiksaT1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5jc3MoImN1cnNvciIpJiYoaS5fY3Vyc29yPXIuY3NzKCJjdXJzb3IiKSksci5jc3MoImN1cnNvciIsaS5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zO3IuX2N1cnNvciYmZSgiYm9keSIpLmNzcygiY3Vyc29yIixyLl9jdXJzb3IpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZShuLmhlbHBlciksaT1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5jc3MoIm9wYWNpdHkiKSYmKGkuX29wYWNpdHk9ci5jc3MoIm9wYWNpdHkiKSksci5jc3MoIm9wYWNpdHkiLGkub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5fb3BhY2l0eSYmZShuLmhlbHBlcikuY3NzKCJvcGFjaXR5IixyLl9vcGFjaXR5KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNjcm9sbCIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKTtyLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJnIuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIiYmKHIub3ZlcmZsb3dPZmZzZXQ9ci5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpfSxkcmFnOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPXIub3B0aW9ucyxzPSExO2lmKHIuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmci5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiKXtpZighaS5heGlzfHxpLmF4aXMhPSJ4IilyLm92ZXJmbG93T2Zmc2V0LnRvcCtyLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtdC5wYWdlWTxpLnNjcm9sbFNlbnNpdGl2aXR5P3Iuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtpLnNjcm9sbFNwZWVkOnQucGFnZVktci5vdmVyZmxvd09mZnNldC50b3A8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1pLnNjcm9sbFNwZWVkKTtpZighaS5heGlzfHxpLmF4aXMhPSJ5IilyLm92ZXJmbG93T2Zmc2V0LmxlZnQrci5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtdC5wYWdlWDxpLnNjcm9sbFNlbnNpdGl2aXR5P3Iuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cz1yLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K2kuc2Nyb2xsU3BlZWQ6dC5wYWdlWC1yLm92ZXJmbG93T2Zmc2V0LmxlZnQ8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cz1yLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LWkuc2Nyb2xsU3BlZWQpfWVsc2V7aWYoIWkuYXhpc3x8aS5heGlzIT0ieCIpdC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxpLnNjcm9sbFNlbnNpdGl2aXR5P3M9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLWkuc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8aS5zY3JvbGxTZW5zaXRpdml0eSYmKHM9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK2kuc2Nyb2xsU3BlZWQpKTtpZighaS5heGlzfHxpLmF4aXMhPSJ5Iil0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxpLnNjcm9sbFNlbnNpdGl2aXR5P3M9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktaS5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxpLnNjcm9sbFNlbnNpdGl2aXR5JiYocz1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStpLnNjcm9sbFNwZWVkKSl9cyE9PSExJiZlLnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMocix0KX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT1yLm9wdGlvbnM7ci5zbmFwRWxlbWVudHM9W10sZShpLnNuYXAuY29uc3RydWN0b3IhPVN0cmluZz9pLnNuYXAuaXRlbXN8fCI6ZGF0YShkcmFnZ2FibGUpIjppLnNuYXApLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5vZmZzZXQoKTt0aGlzIT1yLmVsZW1lbnRbMF0mJnIuc25hcEVsZW1lbnRzLnB1c2goe2l0ZW06dGhpcyx3aWR0aDp0Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dC5vdXRlckhlaWdodCgpLHRvcDpuLnRvcCxsZWZ0Om4ubGVmdH0pfSl9LGRyYWc6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9ci5vcHRpb25zLHM9aS5zbmFwVG9sZXJhbmNlLG89bi5vZmZzZXQubGVmdCx1PW8rci5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxhPW4ub2Zmc2V0LnRvcCxmPWErci5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQ7Zm9yKHZhciBsPXIuc25hcEVsZW1lbnRzLmxlbmd0aC0xO2w+PTA7bC0tKXt2YXIgYz1yLnNuYXBFbGVtZW50c1tsXS5sZWZ0LGg9YytyLnNuYXBFbGVtZW50c1tsXS53aWR0aCxwPXIuc25hcEVsZW1lbnRzW2xdLnRvcCxkPXArci5zbmFwRWxlbWVudHNbbF0uaGVpZ2h0O2lmKCEoYy1zPG8mJm88aCtzJiZwLXM8YSYmYTxkK3N8fGMtczxvJiZvPGgrcyYmcC1zPGYmJmY8ZCtzfHxjLXM8dSYmdTxoK3MmJnAtczxhJiZhPGQrc3x8Yy1zPHUmJnU8aCtzJiZwLXM8ZiYmZjxkK3MpKXtyLnNuYXBFbGVtZW50c1tsXS5zbmFwcGluZyYmci5vcHRpb25zLnNuYXAucmVsZWFzZSYmci5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHIuZWxlbWVudCx0LGUuZXh0ZW5kKHIuX3VpSGFzaCgpLHtzbmFwSXRlbTpyLnNuYXBFbGVtZW50c1tsXS5pdGVtfSkpLHIuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nPSExO2NvbnRpbnVlfWlmKGkuc25hcE1vZGUhPSJpbm5lciIpe3ZhciB2PU1hdGguYWJzKHAtZik8PXMsbT1NYXRoLmFicyhkLWEpPD1zLGc9TWF0aC5hYnMoYy11KTw9cyx5PU1hdGguYWJzKGgtbyk8PXM7diYmKG4ucG9zaXRpb24udG9wPXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpwLXIuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1yLm1hcmdpbnMudG9wKSxtJiYobi5wb3NpdGlvbi50b3A9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmQsbGVmdDowfSkudG9wLXIubWFyZ2lucy50b3ApLGcmJihuLnBvc2l0aW9uLmxlZnQ9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpjLXIuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LXIubWFyZ2lucy5sZWZ0KSx5JiYobi5wb3NpdGlvbi5sZWZ0PXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aH0pLmxlZnQtci5tYXJnaW5zLmxlZnQpfXZhciBiPXZ8fG18fGd8fHk7aWYoaS5zbmFwTW9kZSE9Im91dGVyIil7dmFyIHY9TWF0aC5hYnMocC1hKTw9cyxtPU1hdGguYWJzKGQtZik8PXMsZz1NYXRoLmFicyhjLW8pPD1zLHk9TWF0aC5hYnMoaC11KTw9czt2JiYobi5wb3NpdGlvbi50b3A9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnAsbGVmdDowfSkudG9wLXIubWFyZ2lucy50b3ApLG0mJihuLnBvc2l0aW9uLnRvcD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZC1yLmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxsZWZ0OjB9KS50b3Atci5tYXJnaW5zLnRvcCksZyYmKG4ucG9zaXRpb24ubGVmdD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0OmN9KS5sZWZ0LXIubWFyZ2lucy5sZWZ0KSx5JiYobi5wb3NpdGlvbi5sZWZ0PXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aC1yLmhlbHBlclByb3BvcnRpb25zLndpZHRofSkubGVmdC1yLm1hcmdpbnMubGVmdCl9IXIuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nJiYodnx8bXx8Z3x8eXx8YikmJnIub3B0aW9ucy5zbmFwLnNuYXAmJnIub3B0aW9ucy5zbmFwLnNuYXAuY2FsbChyLmVsZW1lbnQsdCxlLmV4dGVuZChyLl91aUhhc2goKSx7c25hcEl0ZW06ci5zbmFwRWxlbWVudHNbbF0uaXRlbX0pKSxyLnNuYXBFbGVtZW50c1tsXS5zbmFwcGluZz12fHxtfHxnfHx5fHxifX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInN0YWNrIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnMsaT1lLm1ha2VBcnJheShlKHIuc3RhY2spKS5zb3J0KGZ1bmN0aW9uKHQsbil7cmV0dXJuKHBhcnNlSW50KGUodCkuY3NzKCJ6SW5kZXgiKSwxMCl8fDApLShwYXJzZUludChlKG4pLmNzcygiekluZGV4IiksMTApfHwwKX0pO2lmKCFpLmxlbmd0aClyZXR1cm47dmFyIHM9cGFyc2VJbnQoaVswXS5zdHlsZS56SW5kZXgpfHwwO2UoaSkuZWFjaChmdW5jdGlvbihlKXt0aGlzLnN0eWxlLnpJbmRleD1zK2V9KSx0aGlzWzBdLnN0eWxlLnpJbmRleD1zK2kubGVuZ3RofX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiekluZGV4Iix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKG4uaGVscGVyKSxpPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztyLmNzcygiekluZGV4IikmJihpLl96SW5kZXg9ci5jc3MoInpJbmRleCIpKSxyLmNzcygiekluZGV4IixpLnpJbmRleCl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5fekluZGV4JiZlKG4uaGVscGVyKS5jc3MoInpJbmRleCIsci5fekluZGV4KX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLmRyb3BwYWJsZSIse3ZlcnNpb246IjEuOS4yIix3aWRnZXRFdmVudFByZWZpeDoiZHJvcCIsb3B0aW9uczp7YWNjZXB0OiIqIixhY3RpdmVDbGFzczohMSxhZGRDbGFzc2VzOiEwLGdyZWVkeTohMSxob3ZlckNsYXNzOiExLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsbj10LmFjY2VwdDt0aGlzLmlzb3Zlcj0wLHRoaXMuaXNvdXQ9MSx0aGlzLmFjY2VwdD1lLmlzRnVuY3Rpb24obik/bjpmdW5jdGlvbihlKXtyZXR1cm4gZS5pcyhuKX0sdGhpcy5wcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSxlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Quc2NvcGVdPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV18fFtdLGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV0ucHVzaCh0aGlzKSx0LmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0aGlzLm9wdGlvbnMuc2NvcGVdO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl09PXRoaXMmJnQuc3BsaWNlKG4sMSk7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcm9wcGFibGUgdWktZHJvcHBhYmxlLWRpc2FibGVkIil9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt0PT0iYWNjZXB0IiYmKHRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihuKT9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKG4pfSksZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLG4mJnRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIix0LHRoaXMudWkobikpfSxfZGVhY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbj1lLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksbiYmdGhpcy5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCx0aGlzLnVpKG4pKX0sX292ZXI6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighbnx8KG4uY3VycmVudEl0ZW18fG4uZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm47dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sbi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy51aShuKSkpfSxfb3V0OmZ1bmN0aW9uKHQpe3ZhciBuPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aWYoIW58fChuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpWzBdPT10aGlzLmVsZW1lbnRbMF0pcmV0dXJuO3RoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLG4uY3VycmVudEl0ZW18fG4uZWxlbWVudCkmJih0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy51aShuKSkpfSxfZHJvcDpmdW5jdGlvbih0LG4pe3ZhciByPW58fGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aWYoIXJ8fChyLmN1cnJlbnRJdGVtfHxyLmVsZW1lbnQpWzBdPT10aGlzLmVsZW1lbnRbMF0pcmV0dXJuITE7dmFyIGk9ITE7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCI6ZGF0YShkcm9wcGFibGUpIikubm90KCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUuZGF0YSh0aGlzLCJkcm9wcGFibGUiKTtpZih0Lm9wdGlvbnMuZ3JlZWR5JiYhdC5vcHRpb25zLmRpc2FibGVkJiZ0Lm9wdGlvbnMuc2NvcGU9PXIub3B0aW9ucy5zY29wZSYmdC5hY2NlcHQuY2FsbCh0LmVsZW1lbnRbMF0sci5jdXJyZW50SXRlbXx8ci5lbGVtZW50KSYmZS51aS5pbnRlcnNlY3QocixlLmV4dGVuZCh0LHtvZmZzZXQ6dC5lbGVtZW50Lm9mZnNldCgpfSksdC5vcHRpb25zLnRvbGVyYW5jZSkpcmV0dXJuIGk9ITAsITF9KSxpPyExOnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHIuY3VycmVudEl0ZW18fHIuZWxlbWVudCk/KHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksdGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigiZHJvcCIsdCx0aGlzLnVpKHIpKSx0aGlzLmVsZW1lbnQpOiExfSx1aTpmdW5jdGlvbihlKXtyZXR1cm57ZHJhZ2dhYmxlOmUuY3VycmVudEl0ZW18fGUuZWxlbWVudCxoZWxwZXI6ZS5oZWxwZXIscG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5wb3NpdGlvbkFic319fSksZS51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCxuLHIpe2lmKCFuLm9mZnNldClyZXR1cm4hMTt2YXIgaT0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCxzPWkrdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aCxvPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS50b3AsdT1vK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGE9bi5vZmZzZXQubGVmdCxmPWErbi5wcm9wb3J0aW9ucy53aWR0aCxsPW4ub2Zmc2V0LnRvcCxjPWwrbi5wcm9wb3J0aW9ucy5oZWlnaHQ7c3dpdGNoKHIpe2Nhc2UiZml0IjpyZXR1cm4gYTw9aSYmczw9ZiYmbDw9byYmdTw9YztjYXNlImludGVyc2VjdCI6cmV0dXJuIGE8aSt0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJnMtdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPGYmJmw8byt0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZ1LXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8YztjYXNlInBvaW50ZXIiOnZhciBoPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0Kyh0LmNsaWNrT2Zmc2V0fHx0Lm9mZnNldC5jbGljaykubGVmdCxwPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS50b3ArKHQuY2xpY2tPZmZzZXR8fHQub2Zmc2V0LmNsaWNrKS50b3AsZD1lLnVpLmlzT3ZlcihwLGgsbCxhLG4ucHJvcG9ydGlvbnMuaGVpZ2h0LG4ucHJvcG9ydGlvbnMud2lkdGgpO3JldHVybiBkO2Nhc2UidG91Y2giOnJldHVybihvPj1sJiZvPD1jfHx1Pj1sJiZ1PD1jfHxvPGwmJnU+YykmJihpPj1hJiZpPD1mfHxzPj1hJiZzPD1mfHxpPGEmJnM+Zik7ZGVmYXVsdDpyZXR1cm4hMX19LGUudWkuZGRtYW5hZ2VyPXtjdXJyZW50Om51bGwsZHJvcHBhYmxlczp7ImRlZmF1bHQiOltdfSxwcmVwYXJlT2Zmc2V0czpmdW5jdGlvbih0LG4pe3ZhciByPWUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10saT1uP24udHlwZTpudWxsLHM9KHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkuZmluZCgiOmRhdGEoZHJvcHBhYmxlKSIpLmFuZFNlbGYoKTtlOmZvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXtpZihyW29dLm9wdGlvbnMuZGlzYWJsZWR8fHQmJiFyW29dLmFjY2VwdC5jYWxsKHJbb10uZWxlbWVudFswXSx0LmN1cnJlbnRJdGVtfHx0LmVsZW1lbnQpKWNvbnRpbnVlO2Zvcih2YXIgdT0wO3U8cy5sZW5ndGg7dSsrKWlmKHNbdV09PXJbb10uZWxlbWVudFswXSl7cltvXS5wcm9wb3J0aW9ucy5oZWlnaHQ9MDtjb250aW51ZSBlfXJbb10udmlzaWJsZT1yW29dLmVsZW1lbnQuY3NzKCJkaXNwbGF5IikhPSJub25lIjtpZighcltvXS52aXNpYmxlKWNvbnRpbnVlO2k9PSJtb3VzZWRvd24iJiZyW29dLl9hY3RpdmF0ZS5jYWxsKHJbb10sbikscltvXS5vZmZzZXQ9cltvXS5lbGVtZW50Lm9mZnNldCgpLHJbb10ucHJvcG9ydGlvbnM9e3dpZHRoOnJbb10uZWxlbWVudFswXS5vZmZzZXRXaWR0aCxoZWlnaHQ6cltvXS5lbGVtZW50WzBdLm9mZnNldEhlaWdodH19fSxkcm9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ITE7cmV0dXJuIGUuZWFjaChlLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3Qub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucylyZXR1cm47IXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZlLnVpLmludGVyc2VjdCh0LHRoaXMsdGhpcy5vcHRpb25zLnRvbGVyYW5jZSkmJihyPXRoaXMuX2Ryb3AuY2FsbCh0aGlzLG4pfHxyKSwhdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkmJih0aGlzLmlzb3V0PTEsdGhpcy5pc292ZXI9MCx0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcyxuKSl9KSxyfSxkcmFnU3RhcnQ6ZnVuY3Rpb24odCxuKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIsZnVuY3Rpb24oKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8ZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxuKX0pfSxkcmFnOmZ1bmN0aW9uKHQsbil7dC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnMmJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsbiksZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuZ3JlZWR5Q2hpbGR8fCF0aGlzLnZpc2libGUpcmV0dXJuO3ZhciByPWUudWkuaW50ZXJzZWN0KHQsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSxpPSFyJiZ0aGlzLmlzb3Zlcj09MT8iaXNvdXQiOnImJnRoaXMuaXNvdmVyPT0wPyJpc292ZXIiOm51bGw7aWYoIWkpcmV0dXJuO3ZhciBzO2lmKHRoaXMub3B0aW9ucy5ncmVlZHkpe3ZhciBvPXRoaXMub3B0aW9ucy5zY29wZSx1PXRoaXMuZWxlbWVudC5wYXJlbnRzKCI6ZGF0YShkcm9wcGFibGUpIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGUuZGF0YSh0aGlzLCJkcm9wcGFibGUiKS5vcHRpb25zLnNjb3BlPT09b30pO3UubGVuZ3RoJiYocz1lLmRhdGEodVswXSwiZHJvcHBhYmxlIikscy5ncmVlZHlDaGlsZD1pPT0iaXNvdmVyIj8xOjApfXMmJmk9PSJpc292ZXIiJiYocy5pc292ZXI9MCxzLmlzb3V0PTEscy5fb3V0LmNhbGwocyxuKSksdGhpc1tpXT0xLHRoaXNbaT09Imlzb3V0Ij8iaXNvdmVyIjoiaXNvdXQiXT0wLHRoaXNbaT09Imlzb3ZlciI/Il9vdmVyIjoiX291dCJdLmNhbGwodGhpcyxuKSxzJiZpPT0iaXNvdXQiJiYocy5pc291dD0wLHMuaXNvdmVyPTEscy5fb3Zlci5jYWxsKHMsbikpfSl9LGRyYWdTdG9wOmZ1bmN0aW9uKHQsbil7dC5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLnVuYmluZCgic2Nyb2xsLmRyb3BwYWJsZSIpLHQub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LG4pfX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5yZXNpemFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4yIix3aWRnZXRFdmVudFByZWZpeDoicmVzaXplIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6MWUzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZSIpLGUuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIW4uYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86bi5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6bi5oZWxwZXJ8fG4uZ2hvc3R8fG4uYW5pbWF0ZT9uLmhlbHBlcnx8InVpLXJlc2l6YWJsZS1oZWxwZXIiOm51bGx9KSx0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZy9pKSYmKHRoaXMuZWxlbWVudC53cmFwKGUoJzxkaXYgY2xhc3M9InVpLXdyYXBwZXIiIHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyI+PC9kaXY+JykuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoImxlZnQiKX0pKSx0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoInJlc2l6YWJsZSIsdGhpcy5lbGVtZW50LmRhdGEoInJlc2l6YWJsZSIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSxtYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luQm90dG9tIil9KSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCxtYXJnaW5SaWdodDowLG1hcmdpbkJvdHRvbTowfSksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCJub25lIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246InN0YXRpYyIsem9vbToxLGRpc3BsYXk6ImJsb2NrIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbiIpfSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5oYW5kbGVzPW4uaGFuZGxlc3x8KGUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjoiLnVpLXJlc2l6YWJsZS1uIixlOiIudWktcmVzaXphYmxlLWUiLHM6Ii51aS1yZXNpemFibGUtcyIsdzoiLnVpLXJlc2l6YWJsZS13IixzZToiLnVpLXJlc2l6YWJsZS1zZSIsc3c6Ii51aS1yZXNpemFibGUtc3ciLG5lOiIudWktcmVzaXphYmxlLW5lIixudzoiLnVpLXJlc2l6YWJsZS1udyJ9OiJlLHMsc2UiKTtpZih0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PVN0cmluZyl7dGhpcy5oYW5kbGVzPT0iYWxsIiYmKHRoaXMuaGFuZGxlcz0ibixlLHMsdyxzZSxzdyxuZSxudyIpO3ZhciByPXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpO3RoaXMuaGFuZGxlcz17fTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZS50cmltKHJbaV0pLG89InVpLXJlc2l6YWJsZS0iK3MsdT1lKCc8ZGl2IGNsYXNzPSJ1aS1yZXNpemFibGUtaGFuZGxlICcrbysnIj48L2Rpdj4nKTt1LmNzcyh7ekluZGV4Om4uekluZGV4fSksInNlIj09cyYmdS5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSIpLHRoaXMuaGFuZGxlc1tzXT0iLnVpLXJlc2l6YWJsZS0iK3MsdGhpcy5lbGVtZW50LmFwcGVuZCh1KX19dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt0PXR8fHRoaXMuZWxlbWVudDtmb3IodmFyIG4gaW4gdGhpcy5oYW5kbGVzKXt0aGlzLmhhbmRsZXNbbl0uY29uc3RydWN0b3I9PVN0cmluZyYmKHRoaXMuaGFuZGxlc1tuXT1lKHRoaXMuaGFuZGxlc1tuXSx0aGlzLmVsZW1lbnQpLnNob3coKSk7aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSl7dmFyIHI9ZSh0aGlzLmhhbmRsZXNbbl0sdGhpcy5lbGVtZW50KSxpPTA7aT0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KG4pP3Iub3V0ZXJIZWlnaHQoKTpyLm91dGVyV2lkdGgoKTt2YXIgcz1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KG4pPyJUb3AiOi9zZXxzd3xzLy50ZXN0KG4pPyJCb3R0b20iOi9eZSQvLnRlc3Qobik/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpO3QuY3NzKHMsaSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX1pZighZSh0aGlzLmhhbmRsZXNbbl0pLmxlbmd0aCljb250aW51ZX19LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPWUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9oYW5kbGVzLm1vdXNlb3ZlcihmdW5jdGlvbigpe2lmKCF0LnJlc2l6aW5nKXtpZih0aGlzLmNsYXNzTmFtZSl2YXIgZT10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKTt0LmF4aXM9ZSYmZVsxXT9lWzFdOiJzZSJ9fSksbi5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLGUodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLHQuX2hhbmRsZXMuc2hvdygpfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO3QucmVzaXppbmd8fChlKHRoaXMpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSx0Ll9oYW5kbGVzLmhpZGUoKSl9KSksdGhpcy5fbW91c2VJbml0KCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7dmFyIHQ9ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpfTtpZih0aGlzLmVsZW1lbnRJc1dyYXBwZXIpe3QodGhpcy5lbGVtZW50KTt2YXIgbj10aGlzLmVsZW1lbnQ7dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjpuLmNzcygicG9zaXRpb24iKSx3aWR0aDpuLm91dGVyV2lkdGgoKSxoZWlnaHQ6bi5vdXRlckhlaWdodCgpLHRvcDpuLmNzcygidG9wIiksbGVmdDpuLmNzcygibGVmdCIpfSkuaW5zZXJ0QWZ0ZXIobiksbi5yZW1vdmUoKX1yZXR1cm4gdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZSksdCh0aGlzLm9yaWdpbmFsRWxlbWVudCksdGhpc30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgbj0hMTtmb3IodmFyIHIgaW4gdGhpcy5oYW5kbGVzKWUodGhpcy5oYW5kbGVzW3JdKVswXT09dC50YXJnZXQmJihuPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZufSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLmVsZW1lbnQucG9zaXRpb24oKSxzPXRoaXMuZWxlbWVudDt0aGlzLnJlc2l6aW5nPSEwLHRoaXMuZG9jdW1lbnRTY3JvbGw9e3RvcDplKGRvY3VtZW50KS5zY3JvbGxUb3AoKSxsZWZ0OmUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKX0sKHMuaXMoIi51aS1kcmFnZ2FibGUiKXx8L2Fic29sdXRlLy50ZXN0KHMuY3NzKCJwb3NpdGlvbiIpKSkmJnMuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDppLnRvcCxsZWZ0OmkubGVmdH0pLHRoaXMuX3JlbmRlclByb3h5KCk7dmFyIG89bih0aGlzLmhlbHBlci5jc3MoImxlZnQiKSksdT1uKHRoaXMuaGVscGVyLmNzcygidG9wIikpO3IuY29udGFpbm1lbnQmJihvKz1lKHIuY29udGFpbm1lbnQpLnNjcm9sbExlZnQoKXx8MCx1Kz1lKHIuY29udGFpbm1lbnQpLnNjcm9sbFRvcCgpfHwwKSx0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLnBvc2l0aW9uPXtsZWZ0Om8sdG9wOnV9LHRoaXMuc2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOnMub3V0ZXJXaWR0aCgpLGhlaWdodDpzLm91dGVySGVpZ2h0KCl9Ont3aWR0aDpzLndpZHRoKCksaGVpZ2h0OnMuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6cy5vdXRlcldpZHRoKCksaGVpZ2h0OnMub3V0ZXJIZWlnaHQoKX06e3dpZHRoOnMud2lkdGgoKSxoZWlnaHQ6cy5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0Om8sdG9wOnV9LHRoaXMuc2l6ZURpZmY9e3dpZHRoOnMub3V0ZXJXaWR0aCgpLXMud2lkdGgoKSxoZWlnaHQ6cy5vdXRlckhlaWdodCgpLXMuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OnQucGFnZVgsdG9wOnQucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89dHlwZW9mIHIuYXNwZWN0UmF0aW89PSJudW1iZXIiP3IuYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxO3ZhciBhPWUoIi51aS1yZXNpemFibGUtIit0aGlzLmF4aXMpLmNzcygiY3Vyc29yIik7cmV0dXJuIGUoImJvZHkiKS5jc3MoImN1cnNvciIsYT09ImF1dG8iP3RoaXMuYXhpcysiLXJlc2l6ZSI6YSkscy5hZGRDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksdGhpcy5fcHJvcGFnYXRlKCJzdGFydCIsdCksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oZWxwZXIsbj10aGlzLm9wdGlvbnMscj17fSxpPXRoaXMscz10aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbixvPXRoaXMuYXhpcyx1PWUucGFnZVgtcy5sZWZ0fHwwLGE9ZS5wYWdlWS1zLnRvcHx8MCxmPXRoaXMuX2NoYW5nZVtvXTtpZighZilyZXR1cm4hMTt2YXIgbD1mLmFwcGx5KHRoaXMsW2UsdSxhXSk7dGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXMoZS5zaGlmdEtleSk7aWYodGhpcy5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXkpbD10aGlzLl91cGRhdGVSYXRpbyhsLGUpO3JldHVybiBsPXRoaXMuX3Jlc3BlY3RTaXplKGwsZSksdGhpcy5fcHJvcGFnYXRlKCJyZXNpemUiLGUpLHQuY3NzKHt0b3A6dGhpcy5wb3NpdGlvbi50b3ArInB4IixsZWZ0OnRoaXMucG9zaXRpb24ubGVmdCsicHgiLHdpZHRoOnRoaXMuc2l6ZS53aWR0aCsicHgiLGhlaWdodDp0aGlzLnNpemUuaGVpZ2h0KyJweCJ9KSwhdGhpcy5faGVscGVyJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSx0aGlzLl91cGRhdGVDYWNoZShsKSx0aGlzLl90cmlnZ2VyKCJyZXNpemUiLGUsdGhpcy51aSgpKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt0aGlzLnJlc2l6aW5nPSExO3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXM7aWYodGhpcy5faGVscGVyKXt2YXIgaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHM9aS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksbz1zJiZlLnVpLmhhc1Njcm9sbChpWzBdLCJsZWZ0Iik/MDpyLnNpemVEaWZmLmhlaWdodCx1PXM/MDpyLnNpemVEaWZmLndpZHRoLGE9e3dpZHRoOnIuaGVscGVyLndpZHRoKCktdSxoZWlnaHQ6ci5oZWxwZXIuaGVpZ2h0KCktb30sZj1wYXJzZUludChyLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApKyhyLnBvc2l0aW9uLmxlZnQtci5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGw9cGFyc2VJbnQoci5lbGVtZW50LmNzcygidG9wIiksMTApKyhyLnBvc2l0aW9uLnRvcC1yLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbDtuLmFuaW1hdGV8fHRoaXMuZWxlbWVudC5jc3MoZS5leHRlbmQoYSx7dG9wOmwsbGVmdDpmfSkpLHIuaGVscGVyLmhlaWdodChyLnNpemUuaGVpZ2h0KSxyLmhlbHBlci53aWR0aChyLnNpemUud2lkdGgpLHRoaXMuX2hlbHBlciYmIW4uYW5pbWF0ZSYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX1yZXR1cm4gZSgiYm9keSIpLmNzcygiY3Vyc29yIiwiYXV0byIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksdGhpcy5fcHJvcGFnYXRlKCJzdG9wIix0KSx0aGlzLl9oZWxwZXImJnRoaXMuaGVscGVyLnJlbW92ZSgpLCExfSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zLG4saSxzLG8sdTt1PXttaW5XaWR0aDpyKHQubWluV2lkdGgpP3QubWluV2lkdGg6MCxtYXhXaWR0aDpyKHQubWF4V2lkdGgpP3QubWF4V2lkdGg6SW5maW5pdHksbWluSGVpZ2h0OnIodC5taW5IZWlnaHQpP3QubWluSGVpZ2h0OjAsbWF4SGVpZ2h0OnIodC5tYXhIZWlnaHQpP3QubWF4SGVpZ2h0OkluZmluaXR5fTtpZih0aGlzLl9hc3BlY3RSYXRpb3x8ZSluPXUubWluSGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8scz11Lm1pbldpZHRoL3RoaXMuYXNwZWN0UmF0aW8saT11Lm1heEhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLG89dS5tYXhXaWR0aC90aGlzLmFzcGVjdFJhdGlvLG4+dS5taW5XaWR0aCYmKHUubWluV2lkdGg9bikscz51Lm1pbkhlaWdodCYmKHUubWluSGVpZ2h0PXMpLGk8dS5tYXhXaWR0aCYmKHUubWF4V2lkdGg9aSksbzx1Lm1heEhlaWdodCYmKHUubWF4SGVpZ2h0PW8pO3RoaXMuX3ZCb3VuZGFyaWVzPXV9LF91cGRhdGVDYWNoZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCkscihlLmxlZnQpJiYodGhpcy5wb3NpdGlvbi5sZWZ0PWUubGVmdCkscihlLnRvcCkmJih0aGlzLnBvc2l0aW9uLnRvcD1lLnRvcCkscihlLmhlaWdodCkmJih0aGlzLnNpemUuaGVpZ2h0PWUuaGVpZ2h0KSxyKGUud2lkdGgpJiYodGhpcy5zaXplLndpZHRoPWUud2lkdGgpfSxfdXBkYXRlUmF0aW86ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9wdGlvbnMsaT10aGlzLnBvc2l0aW9uLHM9dGhpcy5zaXplLG89dGhpcy5heGlzO3JldHVybiByKGUuaGVpZ2h0KT9lLndpZHRoPWUuaGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW86cihlLndpZHRoKSYmKGUuaGVpZ2h0PWUud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksbz09InN3IiYmKGUubGVmdD1pLmxlZnQrKHMud2lkdGgtZS53aWR0aCksZS50b3A9bnVsbCksbz09Im53IiYmKGUudG9wPWkudG9wKyhzLmhlaWdodC1lLmhlaWdodCksZS5sZWZ0PWkubGVmdCsocy53aWR0aC1lLndpZHRoKSksZX0sX3Jlc3BlY3RTaXplOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5oZWxwZXIsaT10aGlzLl92Qm91bmRhcmllcyxzPXRoaXMuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5LG89dGhpcy5heGlzLHU9cihlLndpZHRoKSYmaS5tYXhXaWR0aCYmaS5tYXhXaWR0aDxlLndpZHRoLGE9cihlLmhlaWdodCkmJmkubWF4SGVpZ2h0JiZpLm1heEhlaWdodDxlLmhlaWdodCxmPXIoZS53aWR0aCkmJmkubWluV2lkdGgmJmkubWluV2lkdGg+ZS53aWR0aCxsPXIoZS5oZWlnaHQpJiZpLm1pbkhlaWdodCYmaS5taW5IZWlnaHQ+ZS5oZWlnaHQ7ZiYmKGUud2lkdGg9aS5taW5XaWR0aCksbCYmKGUuaGVpZ2h0PWkubWluSGVpZ2h0KSx1JiYoZS53aWR0aD1pLm1heFdpZHRoKSxhJiYoZS5oZWlnaHQ9aS5tYXhIZWlnaHQpO3ZhciBjPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGg9dGhpcy5wb3NpdGlvbi50b3ArdGhpcy5zaXplLmhlaWdodCxwPS9zd3xud3x3Ly50ZXN0KG8pLGQ9L253fG5lfG4vLnRlc3Qobyk7ZiYmcCYmKGUubGVmdD1jLWkubWluV2lkdGgpLHUmJnAmJihlLmxlZnQ9Yy1pLm1heFdpZHRoKSxsJiZkJiYoZS50b3A9aC1pLm1pbkhlaWdodCksYSYmZCYmKGUudG9wPWgtaS5tYXhIZWlnaHQpO3ZhciB2PSFlLndpZHRoJiYhZS5oZWlnaHQ7cmV0dXJuIHYmJiFlLmxlZnQmJmUudG9wP2UudG9wPW51bGw6diYmIWUudG9wJiZlLmxlZnQmJihlLmxlZnQ9bnVsbCksZX0sX3Byb3BvcnRpb25hbGx5UmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO2lmKCF0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aClyZXR1cm47dmFyIG49dGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudDtmb3IodmFyIHI9MDtyPHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoO3IrKyl7dmFyIGk9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1tyXTtpZighdGhpcy5ib3JkZXJEaWYpe3ZhciBzPVtpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSxpLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLGkuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLGkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0sbz1baS5jc3MoInBhZGRpbmdUb3AiKSxpLmNzcygicGFkZGluZ1JpZ2h0IiksaS5jc3MoInBhZGRpbmdCb3R0b20iKSxpLmNzcygicGFkZGluZ0xlZnQiKV07dGhpcy5ib3JkZXJEaWY9ZS5tYXAocyxmdW5jdGlvbihlLHQpe3ZhciBuPXBhcnNlSW50KGUsMTApfHwwLHI9cGFyc2VJbnQob1t0XSwxMCl8fDA7cmV0dXJuIG4rcn0pfWkuY3NzKHtoZWlnaHQ6bi5oZWlnaHQoKS10aGlzLmJvcmRlckRpZlswXS10aGlzLmJvcmRlckRpZlsyXXx8MCx3aWR0aDpuLndpZHRoKCktdGhpcy5ib3JkZXJEaWZbMV0tdGhpcy5ib3JkZXJEaWZbM118fDB9KX19LF9yZW5kZXJQcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudCxuPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnRPZmZzZXQ9dC5vZmZzZXQoKTtpZih0aGlzLl9oZWxwZXIpe3RoaXMuaGVscGVyPXRoaXMuaGVscGVyfHxlKCc8ZGl2IHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47Ij48L2Rpdj4nKTt2YXIgcj1lLnVpLmllNj8xOjAsaT1lLnVpLmllNj8yOi0xO3RoaXMuaGVscGVyLmFkZENsYXNzKHRoaXMuX2hlbHBlcikuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpK2ksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpK2kscG9zaXRpb246ImFic29sdXRlIixsZWZ0OnRoaXMuZWxlbWVudE9mZnNldC5sZWZ0LXIrInB4Iix0b3A6dGhpcy5lbGVtZW50T2Zmc2V0LnRvcC1yKyJweCIsekluZGV4Oisrbi56SW5kZXh9KSx0aGlzLmhlbHBlci5hcHBlbmRUbygiYm9keSIpLmRpc2FibGVTZWxlY3Rpb24oKX1lbHNlIHRoaXMuaGVscGVyPXRoaXMuZWxlbWVudH0sX2NoYW5nZTp7ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJue3dpZHRoOnRoaXMub3JpZ2luYWxTaXplLndpZHRoK3R9fSx3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57bGVmdDpzLmxlZnQrdCx3aWR0aDppLndpZHRoLXR9fSxuOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57dG9wOnMudG9wK24saGVpZ2h0OmkuaGVpZ2h0LW59fSxzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57aGVpZ2h0OnRoaXMub3JpZ2luYWxTaXplLmhlaWdodCtufX0sc2U6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxuLHJdKSl9LHN3OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsbixyXSkpfSxuZTpmdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFt0LG4scl0pKX0sbnc6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbdCxuLHJdKSl9fSxfcHJvcGFnYXRlOmZ1bmN0aW9uKHQsbil7ZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW24sdGhpcy51aSgpXSksdCE9InJlc2l6ZSImJnRoaXMuX3RyaWdnZXIodCxuLHRoaXMudWkoKSl9LHBsdWdpbnM6e30sdWk6ZnVuY3Rpb24oKXtyZXR1cm57b3JpZ2luYWxFbGVtZW50OnRoaXMub3JpZ2luYWxFbGVtZW50LGVsZW1lbnQ6dGhpcy5lbGVtZW50LGhlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLHNpemU6dGhpcy5zaXplLG9yaWdpbmFsU2l6ZTp0aGlzLm9yaWdpbmFsU2l6ZSxvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbn19fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbHNvUmVzaXplIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ZnVuY3Rpb24odCl7ZSh0KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIix7d2lkdGg6cGFyc2VJbnQodC53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQodC5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCh0LmNzcygibGVmdCIpLDEwKSx0b3A6cGFyc2VJbnQodC5jc3MoInRvcCIpLDEwKX0pfSl9O3R5cGVvZiBpLmFsc29SZXNpemU9PSJvYmplY3QiJiYhaS5hbHNvUmVzaXplLnBhcmVudE5vZGU/aS5hbHNvUmVzaXplLmxlbmd0aD8oaS5hbHNvUmVzaXplPWkuYWxzb1Jlc2l6ZVswXSxzKGkuYWxzb1Jlc2l6ZSkpOmUuZWFjaChpLmFsc29SZXNpemUsZnVuY3Rpb24oZSl7cyhlKX0pOnMoaS5hbHNvUmVzaXplKX0scmVzaXplOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPXIub3JpZ2luYWxTaXplLG89ci5vcmlnaW5hbFBvc2l0aW9uLHU9e2hlaWdodDpyLnNpemUuaGVpZ2h0LXMuaGVpZ2h0fHwwLHdpZHRoOnIuc2l6ZS53aWR0aC1zLndpZHRofHwwLHRvcDpyLnBvc2l0aW9uLnRvcC1vLnRvcHx8MCxsZWZ0OnIucG9zaXRpb24ubGVmdC1vLmxlZnR8fDB9LGE9ZnVuY3Rpb24odCxyKXtlKHQpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpLHM9e30sbz1yJiZyLmxlbmd0aD9yOnQucGFyZW50cyhuLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1sid2lkdGgiLCJoZWlnaHQiXTpbIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwibGVmdCJdO2UuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49KGlbdF18fDApKyh1W3RdfHwwKTtuJiZuPj0wJiYoc1t0XT1ufHxudWxsKX0pLHQuY3NzKHMpfSl9O3R5cGVvZiBpLmFsc29SZXNpemU9PSJvYmplY3QiJiYhaS5hbHNvUmVzaXplLm5vZGVUeXBlP2UuZWFjaChpLmFsc29SZXNpemUsZnVuY3Rpb24oZSx0KXthKGUsdCl9KTphKGkuYWxzb1Jlc2l6ZSl9LHN0b3A6ZnVuY3Rpb24odCxuKXtlKHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIil9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbmltYXRlIix7c3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLG89cy5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3Qoc1swXS5ub2RlTmFtZSksdT1vJiZlLnVpLmhhc1Njcm9sbChzWzBdLCJsZWZ0Iik/MDpyLnNpemVEaWZmLmhlaWdodCxhPW8/MDpyLnNpemVEaWZmLndpZHRoLGY9e3dpZHRoOnIuc2l6ZS53aWR0aC1hLGhlaWdodDpyLnNpemUuaGVpZ2h0LXV9LGw9cGFyc2VJbnQoci5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsoci5wb3NpdGlvbi5sZWZ0LXIub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxjPXBhcnNlSW50KHIuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsoci5wb3NpdGlvbi50b3Atci5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7ci5lbGVtZW50LmFuaW1hdGUoZS5leHRlbmQoZixjJiZsP3t0b3A6YyxsZWZ0Omx9Ont9KSx7ZHVyYXRpb246aS5hbmltYXRlRHVyYXRpb24sZWFzaW5nOmkuYW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIG49e3dpZHRoOnBhcnNlSW50KHIuZWxlbWVudC5jc3MoIndpZHRoIiksMTApLGhlaWdodDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJoZWlnaHQiKSwxMCksdG9wOnBhcnNlSW50KHIuZWxlbWVudC5jc3MoInRvcCIpLDEwKSxsZWZ0OnBhcnNlSW50KHIuZWxlbWVudC5jc3MoImxlZnQiKSwxMCl9O3MmJnMubGVuZ3RoJiZlKHNbMF0pLmNzcyh7d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9KSxyLl91cGRhdGVDYWNoZShuKSxyLl9wcm9wYWdhdGUoInJlc2l6ZSIsdCl9fSl9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJjb250YWlubWVudCIse3N0YXJ0OmZ1bmN0aW9uKHQscil7dmFyIGk9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxzPWkub3B0aW9ucyxvPWkuZWxlbWVudCx1PXMuY29udGFpbm1lbnQsYT11IGluc3RhbmNlb2YgZT91LmdldCgwKTovcGFyZW50Ly50ZXN0KHUpP28ucGFyZW50KCkuZ2V0KDApOnU7aWYoIWEpcmV0dXJuO2kuY29udGFpbmVyRWxlbWVudD1lKGEpO2lmKC9kb2N1bWVudC8udGVzdCh1KXx8dT09ZG9jdW1lbnQpaS5jb250YWluZXJPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0saS5jb250YWluZXJQb3NpdGlvbj17bGVmdDowLHRvcDowfSxpLnBhcmVudERhdGE9e2VsZW1lbnQ6ZShkb2N1bWVudCksbGVmdDowLHRvcDowLHdpZHRoOmUoZG9jdW1lbnQpLndpZHRoKCksaGVpZ2h0OmUoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0fTtlbHNle3ZhciBmPWUoYSksbD1bXTtlKFsiVG9wIiwiUmlnaHQiLCJMZWZ0IiwiQm90dG9tIl0pLmVhY2goZnVuY3Rpb24oZSx0KXtsW2VdPW4oZi5jc3MoInBhZGRpbmciK3QpKX0pLGkuY29udGFpbmVyT2Zmc2V0PWYub2Zmc2V0KCksaS5jb250YWluZXJQb3NpdGlvbj1mLnBvc2l0aW9uKCksaS5jb250YWluZXJTaXplPXtoZWlnaHQ6Zi5pbm5lckhlaWdodCgpLWxbM10sd2lkdGg6Zi5pbm5lcldpZHRoKCktbFsxXX07dmFyIGM9aS5jb250YWluZXJPZmZzZXQsaD1pLmNvbnRhaW5lclNpemUuaGVpZ2h0LHA9aS5jb250YWluZXJTaXplLndpZHRoLGQ9ZS51aS5oYXNTY3JvbGwoYSwibGVmdCIpP2Euc2Nyb2xsV2lkdGg6cCx2PWUudWkuaGFzU2Nyb2xsKGEpP2Euc2Nyb2xsSGVpZ2h0Omg7aS5wYXJlbnREYXRhPXtlbGVtZW50OmEsbGVmdDpjLmxlZnQsdG9wOmMudG9wLHdpZHRoOmQsaGVpZ2h0OnZ9fX0scmVzaXplOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPXIuY29udGFpbmVyU2l6ZSxvPXIuY29udGFpbmVyT2Zmc2V0LHU9ci5zaXplLGE9ci5wb3NpdGlvbixmPXIuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5LGw9e3RvcDowLGxlZnQ6MH0sYz1yLmNvbnRhaW5lckVsZW1lbnQ7Y1swXSE9ZG9jdW1lbnQmJi9zdGF0aWMvLnRlc3QoYy5jc3MoInBvc2l0aW9uIikpJiYobD1vKSxhLmxlZnQ8KHIuX2hlbHBlcj9vLmxlZnQ6MCkmJihyLnNpemUud2lkdGg9ci5zaXplLndpZHRoKyhyLl9oZWxwZXI/ci5wb3NpdGlvbi5sZWZ0LW8ubGVmdDpyLnBvc2l0aW9uLmxlZnQtbC5sZWZ0KSxmJiYoci5zaXplLmhlaWdodD1yLnNpemUud2lkdGgvci5hc3BlY3RSYXRpbyksci5wb3NpdGlvbi5sZWZ0PWkuaGVscGVyP28ubGVmdDowKSxhLnRvcDwoci5faGVscGVyP28udG9wOjApJiYoci5zaXplLmhlaWdodD1yLnNpemUuaGVpZ2h0KyhyLl9oZWxwZXI/ci5wb3NpdGlvbi50b3Atby50b3A6ci5wb3NpdGlvbi50b3ApLGYmJihyLnNpemUud2lkdGg9ci5zaXplLmhlaWdodCpyLmFzcGVjdFJhdGlvKSxyLnBvc2l0aW9uLnRvcD1yLl9oZWxwZXI/by50b3A6MCksci5vZmZzZXQubGVmdD1yLnBhcmVudERhdGEubGVmdCtyLnBvc2l0aW9uLmxlZnQsci5vZmZzZXQudG9wPXIucGFyZW50RGF0YS50b3Arci5wb3NpdGlvbi50b3A7dmFyIGg9TWF0aC5hYnMoKHIuX2hlbHBlcj9yLm9mZnNldC5sZWZ0LWwubGVmdDpyLm9mZnNldC5sZWZ0LWwubGVmdCkrci5zaXplRGlmZi53aWR0aCkscD1NYXRoLmFicygoci5faGVscGVyP3Iub2Zmc2V0LnRvcC1sLnRvcDpyLm9mZnNldC50b3Atby50b3ApK3Iuc2l6ZURpZmYuaGVpZ2h0KSxkPXIuY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PXIuZWxlbWVudC5wYXJlbnQoKS5nZXQoMCksdj0vcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3Qoci5jb250YWluZXJFbGVtZW50LmNzcygicG9zaXRpb24iKSk7ZCYmdiYmKGgtPXIucGFyZW50RGF0YS5sZWZ0KSxoK3Iuc2l6ZS53aWR0aD49ci5wYXJlbnREYXRhLndpZHRoJiYoci5zaXplLndpZHRoPXIucGFyZW50RGF0YS53aWR0aC1oLGYmJihyLnNpemUuaGVpZ2h0PXIuc2l6ZS53aWR0aC9yLmFzcGVjdFJhdGlvKSkscCtyLnNpemUuaGVpZ2h0Pj1yLnBhcmVudERhdGEuaGVpZ2h0JiYoci5zaXplLmhlaWdodD1yLnBhcmVudERhdGEuaGVpZ2h0LXAsZiYmKHIuc2l6ZS53aWR0aD1yLnNpemUuaGVpZ2h0KnIuYXNwZWN0UmF0aW8pKX0sc3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLnBvc2l0aW9uLG89ci5jb250YWluZXJPZmZzZXQsdT1yLmNvbnRhaW5lclBvc2l0aW9uLGE9ci5jb250YWluZXJFbGVtZW50LGY9ZShyLmhlbHBlciksbD1mLm9mZnNldCgpLGM9Zi5vdXRlcldpZHRoKCktci5zaXplRGlmZi53aWR0aCxoPWYub3V0ZXJIZWlnaHQoKS1yLnNpemVEaWZmLmhlaWdodDtyLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9yZWxhdGl2ZS8udGVzdChhLmNzcygicG9zaXRpb24iKSkmJmUodGhpcykuY3NzKHtsZWZ0OmwubGVmdC11LmxlZnQtby5sZWZ0LHdpZHRoOmMsaGVpZ2h0Omh9KSxyLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9zdGF0aWMvLnRlc3QoYS5jc3MoInBvc2l0aW9uIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpsLmxlZnQtdS5sZWZ0LW8ubGVmdCx3aWR0aDpjLGhlaWdodDpofSl9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJnaG9zdCIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPXIuc2l6ZTtyLmdob3N0PXIub3JpZ2luYWxFbGVtZW50LmNsb25lKCksci5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6ImJsb2NrIixwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpzLmhlaWdodCx3aWR0aDpzLndpZHRoLG1hcmdpbjowLGxlZnQ6MCx0b3A6MH0pLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtZ2hvc3QiKS5hZGRDbGFzcyh0eXBlb2YgaS5naG9zdD09InN0cmluZyI/aS5naG9zdDoiIiksci5naG9zdC5hcHBlbmRUbyhyLmhlbHBlcil9LHJlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnM7ci5naG9zdCYmci5naG9zdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnIuc2l6ZS5oZWlnaHQsd2lkdGg6ci5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zO3IuZ2hvc3QmJnIuaGVscGVyJiZyLmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQoci5naG9zdC5nZXQoMCkpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ3JpZCIse3Jlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLnNpemUsbz1yLm9yaWdpbmFsU2l6ZSx1PXIub3JpZ2luYWxQb3NpdGlvbixhPXIuYXhpcyxmPWkuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5O2kuZ3JpZD10eXBlb2YgaS5ncmlkPT0ibnVtYmVyIj9baS5ncmlkLGkuZ3JpZF06aS5ncmlkO3ZhciBsPU1hdGgucm91bmQoKHMud2lkdGgtby53aWR0aCkvKGkuZ3JpZFswXXx8MSkpKihpLmdyaWRbMF18fDEpLGM9TWF0aC5yb3VuZCgocy5oZWlnaHQtby5oZWlnaHQpLyhpLmdyaWRbMV18fDEpKSooaS5ncmlkWzFdfHwxKTsvXihzZXxzfGUpJC8udGVzdChhKT8oci5zaXplLndpZHRoPW8ud2lkdGgrbCxyLnNpemUuaGVpZ2h0PW8uaGVpZ2h0K2MpOi9eKG5lKSQvLnRlc3QoYSk/KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjLHIucG9zaXRpb24udG9wPXUudG9wLWMpOi9eKHN3KSQvLnRlc3QoYSk/KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjLHIucG9zaXRpb24ubGVmdD11LmxlZnQtbCk6KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjLHIucG9zaXRpb24udG9wPXUudG9wLWMsci5wb3NpdGlvbi5sZWZ0PXUubGVmdC1sKX19KTt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSwxMCl8fDB9LHI9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUsMTApKX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5zZWxlY3RhYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMiIsb3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9SZWZyZXNoOiEwLGRpc3RhbmNlOjAsZmlsdGVyOiIqIix0b2xlcmFuY2U6InRvdWNoIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RhYmxlIiksdGhpcy5kcmFnZ2VkPSExO3ZhciBuO3RoaXMucmVmcmVzaD1mdW5jdGlvbigpe249ZSh0Lm9wdGlvbnMuZmlsdGVyLHQuZWxlbWVudFswXSksbi5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSxuLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5vZmZzZXQoKTtlLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OnQsbGVmdDpuLmxlZnQsdG9wOm4udG9wLHJpZ2h0Om4ubGVmdCt0Lm91dGVyV2lkdGgoKSxib3R0b206bi50b3ArdC5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6dC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSxzZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktc2VsZWN0aW5nIiksdW5zZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktdW5zZWxlY3RpbmciKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzPW4uYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksdGhpcy5fbW91c2VJbml0KCksdGhpcy5oZWxwZXI9ZSgiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PiIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0YWJsZSB1aS1zZWxlY3RhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dGhpcy5vcG9zPVt0LnBhZ2VYLHQucGFnZVldO2lmKHRoaXMub3B0aW9ucy5kaXNhYmxlZClyZXR1cm47dmFyIHI9dGhpcy5vcHRpb25zO3RoaXMuc2VsZWN0ZWVzPWUoci5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCksZShyLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDp0LmNsaWVudFgsdG9wOnQuY2xpZW50WSx3aWR0aDowLGhlaWdodDowfSksci5hdXRvUmVmcmVzaCYmdGhpcy5yZWZyZXNoKCksdGhpcy5zZWxlY3RlZXMuZmlsdGVyKCIudWktc2VsZWN0ZWQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3Iuc3RhcnRzZWxlY3RlZD0hMCwhdC5tZXRhS2V5JiYhdC5jdHJsS2V5JiYoci4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxyLnNlbGVjdGVkPSExLHIuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksci51bnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6ci5lbGVtZW50fSkpfSksZSh0LnRhcmdldCkucGFyZW50cygpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO2lmKHIpe3ZhciBpPSF0Lm1ldGFLZXkmJiF0LmN0cmxLZXl8fCFyLiRlbGVtZW50Lmhhc0NsYXNzKCJ1aS1zZWxlY3RlZCIpO3JldHVybiByLiRlbGVtZW50LnJlbW92ZUNsYXNzKGk/InVpLXVuc2VsZWN0aW5nIjoidWktc2VsZWN0ZWQiKS5hZGRDbGFzcyhpPyJ1aS1zZWxlY3RpbmciOiJ1aS11bnNlbGVjdGluZyIpLHIudW5zZWxlY3Rpbmc9IWksci5zZWxlY3Rpbmc9aSxyLnNlbGVjdGVkPWksaT9uLl90cmlnZ2VyKCJzZWxlY3RpbmciLHQse3NlbGVjdGluZzpyLmVsZW1lbnR9KTpuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6ci5lbGVtZW50fSksITF9fSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7dmFyIG49dGhpczt0aGlzLmRyYWdnZWQ9ITA7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXJldHVybjt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLm9wb3NbMF0scz10aGlzLm9wb3NbMV0sbz10LnBhZ2VYLHU9dC5wYWdlWTtpZihpPm8pe3ZhciBhPW87bz1pLGk9YX1pZihzPnUpe3ZhciBhPXU7dT1zLHM9YX1yZXR1cm4gdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OmksdG9wOnMsd2lkdGg6by1pLGhlaWdodDp1LXN9KSx0aGlzLnNlbGVjdGVlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO2lmKCFhfHxhLmVsZW1lbnQ9PW4uZWxlbWVudFswXSlyZXR1cm47dmFyIGY9ITE7ci50b2xlcmFuY2U9PSJ0b3VjaCI/Zj0hKGEubGVmdD5vfHxhLnJpZ2h0PGl8fGEudG9wPnV8fGEuYm90dG9tPHMpOnIudG9sZXJhbmNlPT0iZml0IiYmKGY9YS5sZWZ0PmkmJmEucmlnaHQ8byYmYS50b3A+cyYmYS5ib3R0b208dSksZj8oYS5zZWxlY3RlZCYmKGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksYS5zZWxlY3RlZD0hMSksYS51bnNlbGVjdGluZyYmKGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksYS51bnNlbGVjdGluZz0hMSksYS5zZWxlY3Rpbmd8fChhLiRlbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RpbmciKSxhLnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKCJzZWxlY3RpbmciLHQse3NlbGVjdGluZzphLmVsZW1lbnR9KSkpOihhLnNlbGVjdGluZyYmKCh0Lm1ldGFLZXl8fHQuY3RybEtleSkmJmEuc3RhcnRzZWxlY3RlZD8oYS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksYS5zZWxlY3Rpbmc9ITEsYS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxhLnNlbGVjdGVkPSEwKTooYS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksYS5zZWxlY3Rpbmc9ITEsYS5zdGFydHNlbGVjdGVkJiYoYS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxhLnVuc2VsZWN0aW5nPSEwKSxuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6YS5lbGVtZW50fSkpKSxhLnNlbGVjdGVkJiYhdC5tZXRhS2V5JiYhdC5jdHJsS2V5JiYhYS5zdGFydHNlbGVjdGVkJiYoYS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxhLnNlbGVjdGVkPSExLGEuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksYS51bnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6YS5lbGVtZW50fSkpKX0pLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dGhpcy5kcmFnZ2VkPSExO3ZhciByPXRoaXMub3B0aW9ucztyZXR1cm4gZSgiLnVpLXVuc2VsZWN0aW5nIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ci4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktdW5zZWxlY3RpbmciKSxyLnVuc2VsZWN0aW5nPSExLHIuc3RhcnRzZWxlY3RlZD0hMSxuLl90cmlnZ2VyKCJ1bnNlbGVjdGVkIix0LHt1bnNlbGVjdGVkOnIuZWxlbWVudH0pfSksZSgiLnVpLXNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3IuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLHIuc2VsZWN0aW5nPSExLHIuc2VsZWN0ZWQ9ITAsci5zdGFydHNlbGVjdGVkPSEwLG4uX3RyaWdnZXIoInNlbGVjdGVkIix0LHtzZWxlY3RlZDpyLmVsZW1lbnR9KX0pLHRoaXMuX3RyaWdnZXIoInN0b3AiLHQpLHRoaXMuaGVscGVyLnJlbW92ZSgpLCExfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuc29ydGFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4yIix3aWRnZXRFdmVudFByZWZpeDoic29ydCIscmVhZHk6ITEsb3B0aW9uczp7YXBwZW5kVG86InBhcmVudCIsYXhpczohMSxjb25uZWN0V2l0aDohMSxjb250YWlubWVudDohMSxjdXJzb3I6ImF1dG8iLGN1cnNvckF0OiExLGRyb3BPbkVtcHR5OiEwLGZvcmNlUGxhY2Vob2xkZXJTaXplOiExLGZvcmNlSGVscGVyU2l6ZTohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6Im9yaWdpbmFsIixpdGVtczoiPiAqIixvcGFjaXR5OiExLHBsYWNlaG9sZGVyOiExLHJldmVydDohMSxzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0Iix6SW5kZXg6MWUzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3RoaXMuY29udGFpbmVyQ2FjaGU9e30sdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zb3J0YWJsZSIpLHRoaXMucmVmcmVzaCgpLHRoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/ZS5heGlzPT09IngifHwvbGVmdHxyaWdodC8udGVzdCh0aGlzLml0ZW1zWzBdLml0ZW0uY3NzKCJmbG9hdCIpKXx8L2lubGluZXx0YWJsZS1jZWxsLy50ZXN0KHRoaXMuaXRlbXNbMF0uaXRlbS5jc3MoImRpc3BsYXkiKSk6ITEsdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMucmVhZHk9ITB9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgZT10aGlzLml0ZW1zLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMuaXRlbXNbZV0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbih0LG4pe3Q9PT0iZGlzYWJsZWQiPyh0aGlzLm9wdGlvbnNbdF09bix0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKCJ1aS1zb3J0YWJsZS1kaXNhYmxlZCIsISFuKSk6ZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZih0aGlzLnJldmVydGluZylyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMub3B0aW9ucy50eXBlPT0ic3RhdGljIilyZXR1cm4hMTt0aGlzLl9yZWZyZXNoSXRlbXModCk7dmFyIGk9bnVsbCxzPWUodC50YXJnZXQpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7aWYoZS5kYXRhKHRoaXMsci53aWRnZXROYW1lKyItaXRlbSIpPT1yKXJldHVybiBpPWUodGhpcyksITF9KTtlLmRhdGEodC50YXJnZXQsci53aWRnZXROYW1lKyItaXRlbSIpPT1yJiYoaT1lKHQudGFyZ2V0KSk7aWYoIWkpcmV0dXJuITE7aWYodGhpcy5vcHRpb25zLmhhbmRsZSYmIW4pe3ZhciBvPSExO2UodGhpcy5vcHRpb25zLmhhbmRsZSxpKS5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT10LnRhcmdldCYmKG89ITApfSk7aWYoIW8pcmV0dXJuITF9cmV0dXJuIHRoaXMuY3VycmVudEl0ZW09aSx0aGlzLl9yZW1vdmVDdXJyZW50c0Zyb21JdGVtcygpLCEwfSxfbW91c2VTdGFydDpmdW5jdGlvbih0LG4scil7dmFyIGk9dGhpcy5vcHRpb25zO3RoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXMuaGVscGVyPXRoaXMuX2NyZWF0ZUhlbHBlcih0KSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5jdXJyZW50SXRlbS5vZmZzZXQoKSx0aGlzLm9mZnNldD17dG9wOnRoaXMub2Zmc2V0LnRvcC10aGlzLm1hcmdpbnMudG9wLGxlZnQ6dGhpcy5vZmZzZXQubGVmdC10aGlzLm1hcmdpbnMubGVmdH0sZS5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OnQucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6dC5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIiksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVksaS5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihpLmN1cnNvckF0KSx0aGlzLmRvbVBvc2l0aW9uPXtwcmV2OnRoaXMuY3VycmVudEl0ZW0ucHJldigpWzBdLHBhcmVudDp0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdfSx0aGlzLmhlbHBlclswXSE9dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxpLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLGkuY3Vyc29yJiYoZSgiYm9keSIpLmNzcygiY3Vyc29yIikmJih0aGlzLl9zdG9yZWRDdXJzb3I9ZSgiYm9keSIpLmNzcygiY3Vyc29yIikpLGUoImJvZHkiKS5jc3MoImN1cnNvciIsaS5jdXJzb3IpKSxpLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikpLHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsaS5vcGFjaXR5KSksaS56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoInpJbmRleCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4IikpLHRoaXMuaGVscGVyLmNzcygiekluZGV4IixpLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiJiYodGhpcy5vdmVyZmxvd09mZnNldD10aGlzLnNjcm9sbFBhcmVudC5vZmZzZXQoKSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuX3ByZXNlcnZlSGVscGVyUHJvcG9ydGlvbnN8fHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKTtpZighcilmb3IodmFyIHM9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3M+PTA7cy0tKXRoaXMuY29udGFpbmVyc1tzXS5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKTtyZXR1cm4gZS51aS5kZG1hbmFnZXImJihlLnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLGUudWkuZGRtYW5hZ2VyJiYhaS5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuZHJhZ2dpbmc9ITAsdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpLHRoaXMuX21vdXNlRHJhZyh0KSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbih0KXt0aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKSx0aGlzLmxhc3RQb3NpdGlvbkFic3x8KHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMpO2lmKHRoaXMub3B0aW9ucy5zY3JvbGwpe3ZhciBuPXRoaXMub3B0aW9ucyxyPSExO3RoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmdGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiPyh0aGlzLm92ZXJmbG93T2Zmc2V0LnRvcCt0aGlzLnNjcm9sbFBhcmVudFswXS5vZmZzZXRIZWlnaHQtdC5wYWdlWTxuLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcCtuLnNjcm9sbFNwZWVkOnQucGFnZVktdGhpcy5vdmVyZmxvd09mZnNldC50b3A8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcD1yPXRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbFRvcC1uLnNjcm9sbFNwZWVkKSx0aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQrdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0V2lkdGgtdC5wYWdlWDxuLnNjcm9sbFNlbnNpdGl2aXR5P3RoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0K24uc2Nyb2xsU3BlZWQ6dC5wYWdlWC10aGlzLm92ZXJmbG93T2Zmc2V0LmxlZnQ8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQ9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0LW4uc2Nyb2xsU3BlZWQpKToodC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P3I9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS5oZWlnaHQoKS0odC5wYWdlWS1lKGRvY3VtZW50KS5zY3JvbGxUb3AoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHI9ZShkb2N1bWVudCkuc2Nyb2xsVG9wKGUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpK24uc2Nyb2xsU3BlZWQpKSx0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTxuLnNjcm9sbFNlbnNpdGl2aXR5P3I9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCktbi5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLndpZHRoKCktKHQucGFnZVgtZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKTxuLnNjcm9sbFNlbnNpdGl2aXR5JiYocj1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKStuLnNjcm9sbFNwZWVkKSkpLHIhPT0hMSYmZS51aS5kZG1hbmFnZXImJiFuLmRyb3BCZWhhdmlvdXImJmUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsdCl9dGhpcy5wb3NpdGlvbkFicz10aGlzLl9jb252ZXJ0UG9zaXRpb25UbygiYWJzb2x1dGUiKTtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieSIpdGhpcy5oZWxwZXJbMF0uc3R5bGUubGVmdD10aGlzLnBvc2l0aW9uLmxlZnQrInB4IjtpZighdGhpcy5vcHRpb25zLmF4aXN8fHRoaXMub3B0aW9ucy5heGlzIT0ieCIpdGhpcy5oZWxwZXJbMF0uc3R5bGUudG9wPXRoaXMucG9zaXRpb24udG9wKyJweCI7Zm9yKHZhciBpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0pe3ZhciBzPXRoaXMuaXRlbXNbaV0sbz1zLml0ZW1bMF0sdT10aGlzLl9pbnRlcnNlY3RzV2l0aFBvaW50ZXIocyk7aWYoIXUpY29udGludWU7aWYocy5pbnN0YW5jZSE9PXRoaXMuY3VycmVudENvbnRhaW5lciljb250aW51ZTtpZihvIT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLnBsYWNlaG9sZGVyW3U9PTE/Im5leHQiOiJwcmV2Il0oKVswXSE9byYmIWUuY29udGFpbnModGhpcy5wbGFjZWhvbGRlclswXSxvKSYmKHRoaXMub3B0aW9ucy50eXBlPT0ic2VtaS1keW5hbWljIj8hZS5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sbyk6ITApKXt0aGlzLmRpcmVjdGlvbj11PT0xPyJkb3duIjoidXAiO2lmKHRoaXMub3B0aW9ucy50b2xlcmFuY2UhPSJwb2ludGVyIiYmIXRoaXMuX2ludGVyc2VjdHNXaXRoU2lkZXMocykpYnJlYWs7dGhpcy5fcmVhcnJhbmdlKHQscyksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCgpKTticmVha319cmV0dXJuIHRoaXMuX2NvbnRhY3RDb250YWluZXJzKHQpLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnKHRoaXMsdCksdGhpcy5fdHJpZ2dlcigic29ydCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5sYXN0UG9zaXRpb25BYnM9dGhpcy5wb3NpdGlvbkFicywhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0LG4pe2lmKCF0KXJldHVybjtlLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsdCk7aWYodGhpcy5vcHRpb25zLnJldmVydCl7dmFyIHI9dGhpcyxpPXRoaXMucGxhY2Vob2xkZXIub2Zmc2V0KCk7dGhpcy5yZXZlcnRpbmc9ITAsZSh0aGlzLmhlbHBlcikuYW5pbWF0ZSh7bGVmdDppLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnQrKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCksdG9wOmkudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5tYXJnaW5zLnRvcCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHk/MDp0aGlzLm9mZnNldFBhcmVudFswXS5zY3JvbGxUb3ApfSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7ci5fY2xlYXIodCl9KX1lbHNlIHRoaXMuX2NsZWFyKHQsbik7cmV0dXJuITF9LGNhbmNlbDpmdW5jdGlvbigpe2lmKHRoaXMuZHJhZ2dpbmcpe3RoaXMuX21vdXNlVXAoe3RhcmdldDpudWxsfSksdGhpcy5vcHRpb25zLmhlbHBlcj09Im9yaWdpbmFsIj90aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKTp0aGlzLmN1cnJlbnRJdGVtLnNob3coKTtmb3IodmFyIHQ9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1t0XS5jb250YWluZXJDYWNoZS5vdmVyJiYodGhpcy5jb250YWluZXJzW3RdLl90cmlnZ2VyKCJvdXQiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKX1yZXR1cm4gdGhpcy5wbGFjZWhvbGRlciYmKHRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMub3B0aW9ucy5oZWxwZXIhPSJvcmlnaW5hbCImJnRoaXMuaGVscGVyJiZ0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSxlLmV4dGVuZCh0aGlzLHtoZWxwZXI6bnVsbCxkcmFnZ2luZzohMSxyZXZlcnRpbmc6ITEsX25vRmluYWxTb3J0Om51bGx9KSx0aGlzLmRvbVBvc2l0aW9uLnByZXY/ZSh0aGlzLmRvbVBvc2l0aW9uLnByZXYpLmFmdGVyKHRoaXMuY3VycmVudEl0ZW0pOmUodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxyPVtdO3JldHVybiB0PXR8fHt9LGUobikuZWFjaChmdW5jdGlvbigpe3ZhciBuPShlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKS5tYXRjaCh0LmV4cHJlc3Npb258fC8oLispWy09X10oLispLyk7biYmci5wdXNoKCh0LmtleXx8blsxXSsiW10iKSsiPSIrKHQua2V5JiZ0LmV4cHJlc3Npb24/blsxXTpuWzJdKSl9KSwhci5sZW5ndGgmJnQua2V5JiZyLnB1c2godC5rZXkrIj0iKSxyLmpvaW4oIiYiKX0sdG9BcnJheTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KHQmJnQuY29ubmVjdGVkKSxyPVtdO3JldHVybiB0PXR8fHt9LG4uZWFjaChmdW5jdGlvbigpe3IucHVzaChlKHQuaXRlbXx8dGhpcykuYXR0cih0LmF0dHJpYnV0ZXx8ImlkIil8fCIiKX0pLHJ9LF9pbnRlcnNlY3RzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLmxlZnQsbj10K3RoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgscj10aGlzLnBvc2l0aW9uQWJzLnRvcCxpPXIrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQscz1lLmxlZnQsbz1zK2Uud2lkdGgsdT1lLnRvcCxhPXUrZS5oZWlnaHQsZj10aGlzLm9mZnNldC5jbGljay50b3AsbD10aGlzLm9mZnNldC5jbGljay5sZWZ0LGM9citmPnUmJnIrZjxhJiZ0K2w+cyYmdCtsPG87cmV0dXJuIHRoaXMub3B0aW9ucy50b2xlcmFuY2U9PSJwb2ludGVyInx8dGhpcy5vcHRpb25zLmZvcmNlUG9pbnRlckZvckNvbnRhaW5lcnN8fHRoaXMub3B0aW9ucy50b2xlcmFuY2UhPSJwb2ludGVyIiYmdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdPmVbdGhpcy5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiXT9jOnM8dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJm4tdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPG8mJnU8cit0aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yJiZpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI8YX0sX2ludGVyc2VjdHNXaXRoUG9pbnRlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMuYXhpcz09PSJ4Inx8ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCx0LmhlaWdodCkscj10aGlzLm9wdGlvbnMuYXhpcz09PSJ5Inx8ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMubGVmdCt0aGlzLm9mZnNldC5jbGljay5sZWZ0LHQubGVmdCx0LndpZHRoKSxpPW4mJnIscz10aGlzLl9nZXREcmFnVmVydGljYWxEaXJlY3Rpb24oKSxvPXRoaXMuX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uKCk7cmV0dXJuIGk/dGhpcy5mbG9hdGluZz9vJiZvPT0icmlnaHQifHxzPT0iZG93biI/MjoxOnMmJihzPT0iZG93biI/MjoxKTohMX0sX2ludGVyc2VjdHNXaXRoU2lkZXM6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5pc092ZXJBeGlzKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCt0LmhlaWdodC8yLHQuaGVpZ2h0KSxyPWUudWkuaXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCx0LmxlZnQrdC53aWR0aC8yLHQud2lkdGgpLGk9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCkscz10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiB0aGlzLmZsb2F0aW5nJiZzP3M9PSJyaWdodCImJnJ8fHM9PSJsZWZ0IiYmIXI6aSYmKGk9PSJkb3duIiYmbnx8aT09InVwIiYmIW4pfSxfZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy50b3AtdGhpcy5sYXN0UG9zaXRpb25BYnMudG9wO3JldHVybiBlIT0wJiYoZT4wPyJkb3duIjoidXAiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIGUhPTAmJihlPjA/InJpZ2h0IjoibGVmdCIpfSxyZWZyZXNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZWZyZXNoSXRlbXMoZSksdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpc30sX2Nvbm5lY3RXaXRoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3JldHVybiBlLmNvbm5lY3RXaXRoLmNvbnN0cnVjdG9yPT1TdHJpbmc/W2UuY29ubmVjdFdpdGhdOmUuY29ubmVjdFdpdGh9LF9nZXRJdGVtc0FzalF1ZXJ5OmZ1bmN0aW9uKHQpe3ZhciBuPVtdLHI9W10saT10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGkmJnQpZm9yKHZhciBzPWkubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBvPWUoaVtzXSk7Zm9yKHZhciB1PW8ubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBhPWUuZGF0YShvW3VdLHRoaXMud2lkZ2V0TmFtZSk7YSYmYSE9dGhpcyYmIWEub3B0aW9ucy5kaXNhYmxlZCYmci5wdXNoKFtlLmlzRnVuY3Rpb24oYS5vcHRpb25zLml0ZW1zKT9hLm9wdGlvbnMuaXRlbXMuY2FsbChhLmVsZW1lbnQpOmUoYS5vcHRpb25zLml0ZW1zLGEuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxhXSl9fXIucHVzaChbZS5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSk7Zm9yKHZhciBzPXIubGVuZ3RoLTE7cz49MDtzLS0pcltzXVswXS5lYWNoKGZ1bmN0aW9uKCl7bi5wdXNoKHRoaXMpfSk7cmV0dXJuIGUobil9LF9yZW1vdmVDdXJyZW50c0Zyb21JdGVtczpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VycmVudEl0ZW0uZmluZCgiOmRhdGEoIit0aGlzLndpZGdldE5hbWUrIi1pdGVtKSIpO3RoaXMuaXRlbXM9ZS5ncmVwKHRoaXMuaXRlbXMsZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXT09ZS5pdGVtWzBdKXJldHVybiExO3JldHVybiEwfSl9LF9yZWZyZXNoSXRlbXM6ZnVuY3Rpb24odCl7dGhpcy5pdGVtcz1bXSx0aGlzLmNvbnRhaW5lcnM9W3RoaXNdO3ZhciBuPXRoaXMuaXRlbXMscj1bW2UuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudFswXSx0LHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLHRoaXNdXSxpPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoaSYmdGhpcy5yZWFkeSlmb3IodmFyIHM9aS5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIG89ZShpW3NdKTtmb3IodmFyIHU9by5sZW5ndGgtMTt1Pj0wO3UtLSl7dmFyIGE9ZS5kYXRhKG9bdV0sdGhpcy53aWRnZXROYW1lKTthJiZhIT10aGlzJiYhYS5vcHRpb25zLmRpc2FibGVkJiYoci5wdXNoKFtlLmlzRnVuY3Rpb24oYS5vcHRpb25zLml0ZW1zKT9hLm9wdGlvbnMuaXRlbXMuY2FsbChhLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZShhLm9wdGlvbnMuaXRlbXMsYS5lbGVtZW50KSxhXSksdGhpcy5jb250YWluZXJzLnB1c2goYSkpfX1mb3IodmFyIHM9ci5sZW5ndGgtMTtzPj0wO3MtLSl7dmFyIGY9cltzXVsxXSxsPXJbc11bMF07Zm9yKHZhciB1PTAsYz1sLmxlbmd0aDt1PGM7dSsrKXt2YXIgaD1lKGxbdV0pO2guZGF0YSh0aGlzLndpZGdldE5hbWUrIi1pdGVtIixmKSxuLnB1c2goe2l0ZW06aCxpbnN0YW5jZTpmLHdpZHRoOjAsaGVpZ2h0OjAsbGVmdDowLHRvcDowfSl9fX0scmVmcmVzaFBvc2l0aW9uczpmdW5jdGlvbih0KXt0aGlzLm9mZnNldFBhcmVudCYmdGhpcy5oZWxwZXImJih0aGlzLm9mZnNldC5wYXJlbnQ9dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkpO2Zvcih2YXIgbj10aGlzLml0ZW1zLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgcj10aGlzLml0ZW1zW25dO2lmKHIuaW5zdGFuY2UhPXRoaXMuY3VycmVudENvbnRhaW5lciYmdGhpcy5jdXJyZW50Q29udGFpbmVyJiZyLml0ZW1bMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0pY29udGludWU7dmFyIGk9dGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQ/ZSh0aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudCxyLml0ZW0pOnIuaXRlbTt0fHwoci53aWR0aD1pLm91dGVyV2lkdGgoKSxyLmhlaWdodD1pLm91dGVySGVpZ2h0KCkpO3ZhciBzPWkub2Zmc2V0KCk7ci5sZWZ0PXMubGVmdCxyLnRvcD1zLnRvcH1pZih0aGlzLm9wdGlvbnMuY3VzdG9tJiZ0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzKXRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMuY2FsbCh0aGlzKTtlbHNlIGZvcih2YXIgbj10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBzPXRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50Lm9mZnNldCgpO3RoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS5sZWZ0PXMubGVmdCx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUudG9wPXMudG9wLHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS53aWR0aD10aGlzLmNvbnRhaW5lcnNbbl0uZWxlbWVudC5vdXRlcldpZHRoKCksdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLmhlaWdodD10aGlzLmNvbnRhaW5lcnNbbl0uZWxlbWVudC5vdXRlckhlaWdodCgpfXJldHVybiB0aGlzfSxfY3JlYXRlUGxhY2Vob2xkZXI6ZnVuY3Rpb24odCl7dD10fHx0aGlzO3ZhciBuPXQub3B0aW9ucztpZighbi5wbGFjZWhvbGRlcnx8bi5wbGFjZWhvbGRlci5jb25zdHJ1Y3Rvcj09U3RyaW5nKXt2YXIgcj1uLnBsYWNlaG9sZGVyO24ucGxhY2Vob2xkZXI9e2VsZW1lbnQ6ZnVuY3Rpb24oKXt2YXIgbj1lKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC5jdXJyZW50SXRlbVswXS5ub2RlTmFtZSkpLmFkZENsYXNzKHJ8fHQuY3VycmVudEl0ZW1bMF0uY2xhc3NOYW1lKyIgdWktc29ydGFibGUtcGxhY2Vob2xkZXIiKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIilbMF07cmV0dXJuIHJ8fChuLnN0eWxlLnZpc2liaWxpdHk9ImhpZGRlbiIpLG59LHVwZGF0ZTpmdW5jdGlvbihlLGkpe2lmKHImJiFuLmZvcmNlUGxhY2Vob2xkZXJTaXplKXJldHVybjtpLmhlaWdodCgpfHxpLmhlaWdodCh0LmN1cnJlbnRJdGVtLmlubmVySGVpZ2h0KCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdUb3AiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdCb3R0b20iKXx8MCwxMCkpLGkud2lkdGgoKXx8aS53aWR0aCh0LmN1cnJlbnRJdGVtLmlubmVyV2lkdGgoKS1wYXJzZUludCh0LmN1cnJlbnRJdGVtLmNzcygicGFkZGluZ0xlZnQiKXx8MCwxMCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdSaWdodCIpfHwwLDEwKSl9fX10LnBsYWNlaG9sZGVyPWUobi5wbGFjZWhvbGRlci5lbGVtZW50LmNhbGwodC5lbGVtZW50LHQuY3VycmVudEl0ZW0pKSx0LmN1cnJlbnRJdGVtLmFmdGVyKHQucGxhY2Vob2xkZXIpLG4ucGxhY2Vob2xkZXIudXBkYXRlKHQsdC5wbGFjZWhvbGRlcil9LF9jb250YWN0Q29udGFpbmVyczpmdW5jdGlvbih0KXt2YXIgbj1udWxsLHI9bnVsbDtmb3IodmFyIGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKXtpZihlLmNvbnRhaW5zKHRoaXMuY3VycmVudEl0ZW1bMF0sdGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0pKWNvbnRpbnVlO2lmKHRoaXMuX2ludGVyc2VjdHNXaXRoKHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZSkpe2lmKG4mJmUuY29udGFpbnModGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnRbMF0sbi5lbGVtZW50WzBdKSljb250aW51ZTtuPXRoaXMuY29udGFpbmVyc1tpXSxyPWl9ZWxzZSB0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1tpXS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9aWYoIW4pcmV0dXJuO2lmKHRoaXMuY29udGFpbmVycy5sZW5ndGg9PT0xKXRoaXMuY29udGFpbmVyc1tyXS5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tyXS5jb250YWluZXJDYWNoZS5vdmVyPTE7ZWxzZXt2YXIgcz0xZTQsbz1udWxsLHU9dGhpcy5jb250YWluZXJzW3JdLmZsb2F0aW5nPyJsZWZ0IjoidG9wIixhPXRoaXMuY29udGFpbmVyc1tyXS5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiLGY9dGhpcy5wb3NpdGlvbkFic1t1XSt0aGlzLm9mZnNldC5jbGlja1t1XTtmb3IodmFyIGw9dGhpcy5pdGVtcy5sZW5ndGgtMTtsPj0wO2wtLSl7aWYoIWUuY29udGFpbnModGhpcy5jb250YWluZXJzW3JdLmVsZW1lbnRbMF0sdGhpcy5pdGVtc1tsXS5pdGVtWzBdKSljb250aW51ZTtpZih0aGlzLml0ZW1zW2xdLml0ZW1bMF09PXRoaXMuY3VycmVudEl0ZW1bMF0pY29udGludWU7dmFyIGM9dGhpcy5pdGVtc1tsXS5pdGVtLm9mZnNldCgpW3VdLGg9ITE7TWF0aC5hYnMoYy1mKT5NYXRoLmFicyhjK3RoaXMuaXRlbXNbbF1bYV0tZikmJihoPSEwLGMrPXRoaXMuaXRlbXNbbF1bYV0pLE1hdGguYWJzKGMtZik8cyYmKHM9TWF0aC5hYnMoYy1mKSxvPXRoaXMuaXRlbXNbbF0sdGhpcy5kaXJlY3Rpb249aD8idXAiOiJkb3duIil9aWYoIW8mJiF0aGlzLm9wdGlvbnMuZHJvcE9uRW1wdHkpcmV0dXJuO3RoaXMuY3VycmVudENvbnRhaW5lcj10aGlzLmNvbnRhaW5lcnNbcl0sbz90aGlzLl9yZWFycmFuZ2UodCxvLG51bGwsITApOnRoaXMuX3JlYXJyYW5nZSh0LG51bGwsdGhpcy5jb250YWluZXJzW3JdLmVsZW1lbnQsITApLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5jb250YWluZXJzW3JdLl90cmlnZ2VyKCJjaGFuZ2UiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKHRoaXMuY3VycmVudENvbnRhaW5lcix0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLmNvbnRhaW5lcnNbcl0uX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcl0uY29udGFpbmVyQ2FjaGUub3Zlcj0xfX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscj1lLmlzRnVuY3Rpb24obi5oZWxwZXIpP2Uobi5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0LHRoaXMuY3VycmVudEl0ZW1dKSk6bi5oZWxwZXI9PSJjbG9uZSI/dGhpcy5jdXJyZW50SXRlbS5jbG9uZSgpOnRoaXMuY3VycmVudEl0ZW07cmV0dXJuIHIucGFyZW50cygiYm9keSIpLmxlbmd0aHx8ZShuLmFwcGVuZFRvIT0icGFyZW50Ij9uLmFwcGVuZFRvOnRoaXMuY3VycmVudEl0ZW1bMF0ucGFyZW50Tm9kZSlbMF0uYXBwZW5kQ2hpbGQoclswXSksclswXT09dGhpcy5jdXJyZW50SXRlbVswXSYmKHRoaXMuX3N0b3JlZENTUz17d2lkdGg6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS5oZWlnaHQscG9zaXRpb246dGhpcy5jdXJyZW50SXRlbS5jc3MoInBvc2l0aW9uIiksdG9wOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuY3VycmVudEl0ZW0uY3NzKCJsZWZ0Iil9KSwoclswXS5zdHlsZS53aWR0aD09IiJ8fG4uZm9yY2VIZWxwZXJTaXplKSYmci53aWR0aCh0aGlzLmN1cnJlbnRJdGVtLndpZHRoKCkpLChyWzBdLnN0eWxlLmhlaWdodD09IiJ8fG4uZm9yY2VIZWxwZXJTaXplKSYmci5oZWlnaHQodGhpcy5jdXJyZW50SXRlbS5oZWlnaHQoKSkscn0sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24odCl7dHlwZW9mIHQ9PSJzdHJpbmciJiYodD10LnNwbGl0KCIgIikpLGUuaXNBcnJheSh0KSYmKHQ9e2xlZnQ6K3RbMF0sdG9wOit0WzFdfHwwfSksImxlZnQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dC5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10LnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIHQmJih0aGlzLm9mZnNldC5jbGljay50b3A9dC50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXQuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIHQ9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7dGhpcy5jc3NQb3NpdGlvbj09ImFic29sdXRlIiYmdGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHQubGVmdCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpLHQudG9wKz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKSk7aWYodGhpcy5vZmZzZXRQYXJlbnRbMF09PWRvY3VtZW50LmJvZHl8fHRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUmJnRoaXMub2Zmc2V0UGFyZW50WzBdLnRhZ05hbWUudG9Mb3dlckNhc2UoKT09Imh0bWwiJiZlLnVpLmllKXQ9e3RvcDowLGxlZnQ6MH07cmV0dXJue3RvcDp0LnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDp0LmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKHRoaXMuY3NzUG9zaXRpb249PSJyZWxhdGl2ZSIpe3ZhciBlPXRoaXMuY3VycmVudEl0ZW0ucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmN1cnJlbnRJdGVtLmNzcygibWFyZ2luTGVmdCIpLDEwKXx8MCx0b3A6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuY29udGFpbm1lbnQ9PSJwYXJlbnQiJiYodC5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKTtpZih0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQifHx0LmNvbnRhaW5tZW50PT0id2luZG93Iil0aGlzLmNvbnRhaW5tZW50PVswLXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQsMC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCxlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKGUodC5jb250YWlubWVudD09ImRvY3VtZW50Ij9kb2N1bWVudDp3aW5kb3cpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXTtpZighL14oZG9jdW1lbnR8d2luZG93fHBhcmVudCkkLy50ZXN0KHQuY29udGFpbm1lbnQpKXt2YXIgbj1lKHQuY29udGFpbm1lbnQpWzBdLHI9ZSh0LmNvbnRhaW5tZW50KS5vZmZzZXQoKSxpPWUobikuY3NzKCJvdmVyZmxvdyIpIT0iaGlkZGVuIjt0aGlzLmNvbnRhaW5tZW50PVtyLmxlZnQrKHBhcnNlSW50KGUobikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKG4pLmNzcygicGFkZGluZ0xlZnQiKSwxMCl8fDApLXRoaXMubWFyZ2lucy5sZWZ0LHIudG9wKyhwYXJzZUludChlKG4pLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChlKG4pLmNzcygicGFkZGluZ1RvcCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLnRvcCxyLmxlZnQrKGk/TWF0aC5tYXgobi5zY3JvbGxXaWR0aCxuLm9mZnNldFdpZHRoKTpuLm9mZnNldFdpZHRoKS0ocGFyc2VJbnQoZShuKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUobikuY3NzKCJwYWRkaW5nUmlnaHQiKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsci50b3ArKGk/TWF0aC5tYXgobi5zY3JvbGxIZWlnaHQsbi5vZmZzZXRIZWlnaHQpOm4ub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoZShuKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoZShuKS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdfX0sX2NvbnZlcnRQb3NpdGlvblRvOmZ1bmN0aW9uKHQsbil7bnx8KG49dGhpcy5wb3NpdGlvbik7dmFyIHI9dD09ImFic29sdXRlIj8xOi0xLGk9dGhpcy5vcHRpb25zLHM9dGhpcy5jc3NQb3NpdGlvbiE9ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LG89LyhodG1sfGJvZHkpL2kudGVzdChzWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6bi50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnIrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTpvPzA6cy5zY3JvbGxUb3AoKSkqcixsZWZ0Om4ubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KnIrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqci0odGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOm8/MDpzLnNjcm9sbExlZnQoKSkqcn19LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXMuY3NzUG9zaXRpb24hPSJhYnNvbHV0ZSJ8fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmISFlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxpPS8oaHRtbHxib2R5KS9pLnRlc3QoclswXS50YWdOYW1lKTt0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiJiYodGhpcy5zY3JvbGxQYXJlbnRbMF09PWRvY3VtZW50fHx0aGlzLnNjcm9sbFBhcmVudFswXT09dGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYodGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSk7dmFyIHM9dC5wYWdlWCxvPXQucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt0aGlzLmNvbnRhaW5tZW50JiYodC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0mJihzPXRoaXMuY29udGFpbm1lbnRbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXSYmKG89dGhpcy5jb250YWlubWVudFsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD50aGlzLmNvbnRhaW5tZW50WzJdJiYocz10aGlzLmNvbnRhaW5tZW50WzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPnRoaXMuY29udGFpbm1lbnRbM10mJihvPXRoaXMuY29udGFpbm1lbnRbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSk7aWYobi5ncmlkKXt2YXIgdT10aGlzLm9yaWdpbmFsUGFnZVkrTWF0aC5yb3VuZCgoby10aGlzLm9yaWdpbmFsUGFnZVkpL24uZ3JpZFsxXSkqbi5ncmlkWzFdO289dGhpcy5jb250YWlubWVudD91LXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdfHx1LXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdP3UtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0/dStuLmdyaWRbMV06dS1uLmdyaWRbMV06dTp1O3ZhciBhPXRoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChzLXRoaXMub3JpZ2luYWxQYWdlWCkvbi5ncmlkWzBdKSpuLmdyaWRbMF07cz10aGlzLmNvbnRhaW5tZW50P2EtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdfHxhLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXT9hLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXT9hK24uZ3JpZFswXTphLW4uZ3JpZFswXTphOmF9fXJldHVybnt0b3A6by10aGlzLm9mZnNldC5jbGljay50b3AtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3ArKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOmk/MDpyLnNjcm9sbFRvcCgpKSxsZWZ0OnMtdGhpcy5vZmZzZXQuY2xpY2subGVmdC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0Kyh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aT8wOnIuc2Nyb2xsTGVmdCgpKX19LF9yZWFycmFuZ2U6ZnVuY3Rpb24oZSx0LG4scil7bj9uWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pOnQuaXRlbVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyWzBdLHRoaXMuZGlyZWN0aW9uPT0iZG93biI/dC5pdGVtWzBdOnQuaXRlbVswXS5uZXh0U2libGluZyksdGhpcy5jb3VudGVyPXRoaXMuY291bnRlcj8rK3RoaXMuY291bnRlcjoxO3ZhciBpPXRoaXMuY291bnRlcjt0aGlzLl9kZWxheShmdW5jdGlvbigpe2k9PXRoaXMuY291bnRlciYmdGhpcy5yZWZyZXNoUG9zaXRpb25zKCFyKX0pfSxfY2xlYXI6ZnVuY3Rpb24odCxuKXt0aGlzLnJldmVydGluZz0hMTt2YXIgcj1bXTshdGhpcy5fbm9GaW5hbFNvcnQmJnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KCkubGVuZ3RoJiZ0aGlzLnBsYWNlaG9sZGVyLmJlZm9yZSh0aGlzLmN1cnJlbnRJdGVtKSx0aGlzLl9ub0ZpbmFsU29ydD1udWxsO2lmKHRoaXMuaGVscGVyWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdKXtmb3IodmFyIGkgaW4gdGhpcy5fc3RvcmVkQ1NTKWlmKHRoaXMuX3N0b3JlZENTU1tpXT09ImF1dG8ifHx0aGlzLl9zdG9yZWRDU1NbaV09PSJzdGF0aWMiKXRoaXMuX3N0b3JlZENTU1tpXT0iIjt0aGlzLmN1cnJlbnRJdGVtLmNzcyh0aGlzLl9zdG9yZWRDU1MpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKX1lbHNlIHRoaXMuY3VycmVudEl0ZW0uc2hvdygpO3RoaXMuZnJvbU91dHNpZGUmJiFuJiZyLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigicmVjZWl2ZSIsZSx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksKHRoaXMuZnJvbU91dHNpZGV8fHRoaXMuZG9tUG9zaXRpb24ucHJldiE9dGhpcy5jdXJyZW50SXRlbS5wcmV2KCkubm90KCIudWktc29ydGFibGUtaGVscGVyIilbMF18fHRoaXMuZG9tUG9zaXRpb24ucGFyZW50IT10aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpWzBdKSYmIW4mJnIucHVzaChmdW5jdGlvbihlKXt0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLGUsdGhpcy5fdWlIYXNoKCkpfSksdGhpcyE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmKG58fChyLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigicmVtb3ZlIixlLHRoaXMuX3VpSGFzaCgpKX0pLHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigicmVjZWl2ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigidXBkYXRlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKTtmb3IodmFyIGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKW58fHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY29udGFpbmVyc1tpXSkpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyJiYoci5wdXNoKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtlLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbaV0pKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3Zlcj0wKTt0aGlzLl9zdG9yZWRDdXJzb3ImJmUoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5fc3RvcmVkQ3Vyc29yKSx0aGlzLl9zdG9yZWRPcGFjaXR5JiZ0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLHRoaXMuX3N0b3JlZE9wYWNpdHkpLHRoaXMuX3N0b3JlZFpJbmRleCYmdGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiLHRoaXMuX3N0b3JlZFpJbmRleD09ImF1dG8iPyIiOnRoaXMuX3N0b3JlZFpJbmRleCksdGhpcy5kcmFnZ2luZz0hMTtpZih0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwpe2lmKCFuKXt0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKCJzdG9wIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMX1ufHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksdGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGw7aWYoIW4pe2Zvcih2YXIgaT0wO2k8ci5sZW5ndGg7aSsrKXJbaV0uY2FsbCh0aGlzLHQpO3RoaXMuX3RyaWdnZXIoInN0b3AiLHQsdGhpcy5fdWlIYXNoKCkpfXJldHVybiB0aGlzLmZyb21PdXRzaWRlPSExLCEwfSxfdHJpZ2dlcjpmdW5jdGlvbigpe2UuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk9PT0hMSYmdGhpcy5jYW5jZWwoKX0sX3VpSGFzaDpmdW5jdGlvbih0KXt2YXIgbj10fHx0aGlzO3JldHVybntoZWxwZXI6bi5oZWxwZXIscGxhY2Vob2xkZXI6bi5wbGFjZWhvbGRlcnx8ZShbXSkscG9zaXRpb246bi5wb3NpdGlvbixvcmlnaW5hbFBvc2l0aW9uOm4ub3JpZ2luYWxQb3NpdGlvbixvZmZzZXQ6bi5wb3NpdGlvbkFicyxpdGVtOm4uY3VycmVudEl0ZW0sc2VuZGVyOnQ/dC5lbGVtZW50Om51bGx9fX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9e30saT17fTtyLmhlaWdodD1yLnBhZGRpbmdUb3A9ci5wYWRkaW5nQm90dG9tPXIuYm9yZGVyVG9wV2lkdGg9ci5ib3JkZXJCb3R0b21XaWR0aD0iaGlkZSIsaS5oZWlnaHQ9aS5wYWRkaW5nVG9wPWkucGFkZGluZ0JvdHRvbT1pLmJvcmRlclRvcFdpZHRoPWkuYm9yZGVyQm90dG9tV2lkdGg9InNob3ciLGUud2lkZ2V0KCJ1aS5hY2NvcmRpb24iLHt2ZXJzaW9uOiIxLjkuMiIsb3B0aW9uczp7YWN0aXZlOjAsYW5pbWF0ZTp7fSxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGhlYWRlcjoiPiBsaSA+IDpmaXJzdC1jaGlsZCw+IDpub3QobGkpOmV2ZW4iLGhlaWdodFN0eWxlOiJhdXRvIixpY29uczp7YWN0aXZlSGVhZGVyOiJ1aS1pY29uLXRyaWFuZ2xlLTEtcyIsaGVhZGVyOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSJ9LGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYWNjb3JkaW9uSWQ9InVpLWFjY29yZGlvbi0iKyh0aGlzLmVsZW1lbnQuYXR0cigiaWQiKXx8KytuKSxyPXRoaXMub3B0aW9uczt0aGlzLnByZXZTaG93PXRoaXMucHJldkhpZGU9ZSgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYWNjb3JkaW9uIHVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXQiKSx0aGlzLmhlYWRlcnM9dGhpcy5lbGVtZW50LmZpbmQoci5oZWFkZXIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyIHVpLWhlbHBlci1yZXNldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oZWFkZXJzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oZWFkZXJzKSx0aGlzLmhlYWRlcnMubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudCB1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmhpZGUoKSwhci5jb2xsYXBzaWJsZSYmKHIuYWN0aXZlPT09ITF8fHIuYWN0aXZlPT1udWxsKSYmKHIuYWN0aXZlPTApLHIuYWN0aXZlPDAmJihyLmFjdGl2ZSs9dGhpcy5oZWFkZXJzLmxlbmd0aCksdGhpcy5hY3RpdmU9dGhpcy5fZmluZEFjdGl2ZShyLmFjdGl2ZSkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItYWxsIHVpLWNvcm5lci10b3AiKSx0aGlzLmFjdGl2ZS5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpLnNob3coKSx0aGlzLl9jcmVhdGVJY29ucygpLHRoaXMucmVmcmVzaCgpLHRoaXMuZWxlbWVudC5hdHRyKCJyb2xlIiwidGFibGlzdCIpLHRoaXMuaGVhZGVycy5hdHRyKCJyb2xlIiwidGFiIikuZWFjaChmdW5jdGlvbihuKXt2YXIgcj1lKHRoaXMpLGk9ci5hdHRyKCJpZCIpLHM9ci5uZXh0KCksbz1zLmF0dHIoImlkIik7aXx8KGk9dCsiLWhlYWRlci0iK24sci5hdHRyKCJpZCIsaSkpLG98fChvPXQrIi1wYW5lbC0iK24scy5hdHRyKCJpZCIsbykpLHIuYXR0cigiYXJpYS1jb250cm9scyIsbykscy5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLGkpfSkubmV4dCgpLmF0dHIoInJvbGUiLCJ0YWJwYW5lbCIpLHRoaXMuaGVhZGVycy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSkubmV4dCgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSkuaGlkZSgpLHRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KS5uZXh0KCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KTp0aGlzLmhlYWRlcnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApLHRoaXMuX29uKHRoaXMuaGVhZGVycyx7a2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5fb24odGhpcy5oZWFkZXJzLm5leHQoKSx7a2V5ZG93bjoiX3BhbmVsS2V5RG93biJ9KSx0aGlzLl9zZXR1cEV2ZW50cyhyLmV2ZW50KX0sX2dldENyZWF0ZUV2ZW50RGF0YTpmdW5jdGlvbigpe3JldHVybntoZWFkZXI6dGhpcy5hY3RpdmUsY29udGVudDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUubmV4dCgpOmUoKX19LF9jcmVhdGVJY29uczpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucy5pY29uczt0JiYoZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiB1aS1pY29uICIrdC5oZWFkZXIpLnByZXBlbmRUbyh0aGlzLmhlYWRlcnMpLHRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3ModC5oZWFkZXIpLmFkZENsYXNzKHQuYWN0aXZlSGVhZGVyKSx0aGlzLmhlYWRlcnMuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1pY29ucyIpKX0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5lYWNoKGZ1bmN0aW9uKCl7L151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJpZCIpfSksdGhpcy5fZGVzdHJveUljb25zKCksZT10aGlzLmhlYWRlcnMubmV4dCgpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVDbGFzcygidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20gdWktYWNjb3JkaW9uLWNvbnRlbnQgdWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIikuZWFjaChmdW5jdGlvbigpey9edWktYWNjb3JkaW9uLy50ZXN0KHRoaXMuaWQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX0pLHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSE9PSJjb250ZW50IiYmZS5jc3MoImhlaWdodCIsIiIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJhY3RpdmUiKXt0aGlzLl9hY3RpdmF0ZSh0KTtyZXR1cm59ZT09PSJldmVudCImJih0aGlzLm9wdGlvbnMuZXZlbnQmJnRoaXMuX29mZih0aGlzLmhlYWRlcnMsdGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEV2ZW50cyh0KSksdGhpcy5fc3VwZXIoZSx0KSxlPT09ImNvbGxhcHNpYmxlIiYmIXQmJnRoaXMub3B0aW9ucy5hY3RpdmU9PT0hMSYmdGhpcy5fYWN0aXZhdGUoMCksZT09PSJpY29ucyImJih0aGlzLl9kZXN0cm95SWNvbnMoKSx0JiZ0aGlzLl9jcmVhdGVJY29ucygpKSxlPT09ImRpc2FibGVkIiYmdGhpcy5oZWFkZXJzLmFkZCh0aGlzLmhlYWRlcnMubmV4dCgpKS50b2dnbGVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiLCEhdCl9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2lmKHQuYWx0S2V5fHx0LmN0cmxLZXkpcmV0dXJuO3ZhciBuPWUudWkua2V5Q29kZSxyPXRoaXMuaGVhZGVycy5sZW5ndGgsaT10aGlzLmhlYWRlcnMuaW5kZXgodC50YXJnZXQpLHM9ITE7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBuLlJJR0hUOmNhc2Ugbi5ET1dOOnM9dGhpcy5oZWFkZXJzWyhpKzEpJXJdO2JyZWFrO2Nhc2Ugbi5MRUZUOmNhc2Ugbi5VUDpzPXRoaXMuaGVhZGVyc1soaS0xK3IpJXJdO2JyZWFrO2Nhc2Ugbi5TUEFDRTpjYXNlIG4uRU5URVI6dGhpcy5fZXZlbnRIYW5kbGVyKHQpO2JyZWFrO2Nhc2Ugbi5IT01FOnM9dGhpcy5oZWFkZXJzWzBdO2JyZWFrO2Nhc2Ugbi5FTkQ6cz10aGlzLmhlYWRlcnNbci0xXX1zJiYoZSh0LnRhcmdldCkuYXR0cigidGFiSW5kZXgiLC0xKSxlKHMpLmF0dHIoInRhYkluZGV4IiwwKSxzLmZvY3VzKCksdC5wcmV2ZW50RGVmYXVsdCgpKX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuVVAmJnQuY3RybEtleSYmZSh0LmN1cnJlbnRUYXJnZXQpLnByZXYoKS5mb2N1cygpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQsbixyPXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSxpPXRoaXMuZWxlbWVudC5wYXJlbnQoKTtyPT09ImZpbGwiPyhlLnN1cHBvcnQubWluSGVpZ2h0fHwobj1pLmNzcygib3ZlcmZsb3ciKSxpLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4iKSksdD1pLmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPW4uY3NzKCJwb3NpdGlvbiIpO2lmKHI9PT0iYWJzb2x1dGUifHxyPT09ImZpeGVkIilyZXR1cm47dC09bi5vdXRlckhlaWdodCghMCl9KSxuJiZpLmNzcygib3ZlcmZsb3ciLG4pLHRoaXMuaGVhZGVycy5lYWNoKGZ1bmN0aW9uKCl7dC09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLHQtZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOnI9PT0iYXV0byImJih0PTAsdGhpcy5oZWFkZXJzLm5leHQoKS5lYWNoKGZ1bmN0aW9uKCl7dD1NYXRoLm1heCh0LGUodGhpcykuY3NzKCJoZWlnaHQiLCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQodCkpfSxfYWN0aXZhdGU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZmluZEFjdGl2ZSh0KVswXTtpZihuPT09dGhpcy5hY3RpdmVbMF0pcmV0dXJuO249bnx8dGhpcy5hY3RpdmVbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6bixjdXJyZW50VGFyZ2V0Om4scHJldmVudERlZmF1bHQ6ZS5ub29wfSl9LF9maW5kQWN0aXZlOmZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdD09Im51bWJlciI/dGhpcy5oZWFkZXJzLmVxKHQpOmUoKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKHQpe3ZhciBuPXt9O2lmKCF0KXJldHVybjtlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vbih0aGlzLmhlYWRlcnMsbil9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5hY3RpdmUsaT1lKHQuY3VycmVudFRhcmdldCkscz1pWzBdPT09clswXSxvPXMmJm4uY29sbGFwc2libGUsdT1vP2UoKTppLm5leHQoKSxhPXIubmV4dCgpLGY9e29sZEhlYWRlcjpyLG9sZFBhbmVsOmEsbmV3SGVhZGVyOm8/ZSgpOmksbmV3UGFuZWw6dX07dC5wcmV2ZW50RGVmYXVsdCgpO2lmKHMmJiFuLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCxmKT09PSExKXJldHVybjtuLmFjdGl2ZT1vPyExOnRoaXMuaGVhZGVycy5pbmRleChpKSx0aGlzLmFjdGl2ZT1zP2UoKTppLHRoaXMuX3RvZ2dsZShmKSxyLnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxuLmljb25zJiZyLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3Mobi5pY29ucy5hY3RpdmVIZWFkZXIpLmFkZENsYXNzKG4uaWNvbnMuaGVhZGVyKSxzfHwoaS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLG4uaWNvbnMmJmkuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhuLmljb25zLmhlYWRlcikuYWRkQ2xhc3Mobi5pY29ucy5hY3RpdmVIZWFkZXIpLGkubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKSl9LF90b2dnbGU6ZnVuY3Rpb24odCl7dmFyIG49dC5uZXdQYW5lbCxyPXRoaXMucHJldlNob3cubGVuZ3RoP3RoaXMucHJldlNob3c6dC5vbGRQYW5lbDt0aGlzLnByZXZTaG93LmFkZCh0aGlzLnByZXZIaWRlKS5zdG9wKCEwLCEwKSx0aGlzLnByZXZTaG93PW4sdGhpcy5wcmV2SGlkZT1yLHRoaXMub3B0aW9ucy5hbmltYXRlP3RoaXMuX2FuaW1hdGUobixyLHQpOihyLmhpZGUoKSxuLnNob3coKSx0aGlzLl90b2dnbGVDb21wbGV0ZSh0KSksci5hdHRyKHsiYXJpYS1leHBhbmRlZCI6ImZhbHNlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLHIucHJldigpLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLG4ubGVuZ3RoJiZyLmxlbmd0aD9yLnByZXYoKS5hdHRyKCJ0YWJJbmRleCIsLTEpOm4ubGVuZ3RoJiZ0aGlzLmhlYWRlcnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYXR0cigidGFiSW5kZXgiKT09PTB9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLG4uYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KS5wcmV2KCkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hbmltYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcyxvLHUsYT10aGlzLGY9MCxsPWUubGVuZ3RoJiYoIXQubGVuZ3RofHxlLmluZGV4KCk8dC5pbmRleCgpKSxjPXRoaXMub3B0aW9ucy5hbmltYXRlfHx7fSxoPWwmJmMuZG93bnx8YyxwPWZ1bmN0aW9uKCl7YS5fdG9nZ2xlQ29tcGxldGUobil9O3R5cGVvZiBoPT0ibnVtYmVyIiYmKHU9aCksdHlwZW9mIGg9PSJzdHJpbmciJiYobz1oKSxvPW98fGguZWFzaW5nfHxjLmVhc2luZyx1PXV8fGguZHVyYXRpb258fGMuZHVyYXRpb247aWYoIXQubGVuZ3RoKXJldHVybiBlLmFuaW1hdGUoaSx1LG8scCk7aWYoIWUubGVuZ3RoKXJldHVybiB0LmFuaW1hdGUocix1LG8scCk7cz1lLnNob3coKS5vdXRlckhlaWdodCgpLHQuYW5pbWF0ZShyLHtkdXJhdGlvbjp1LGVhc2luZzpvLHN0ZXA6ZnVuY3Rpb24oZSx0KXt0Lm5vdz1NYXRoLnJvdW5kKGUpfX0pLGUuaGlkZSgpLmFuaW1hdGUoaSx7ZHVyYXRpb246dSxlYXNpbmc6byxjb21wbGV0ZTpwLHN0ZXA6ZnVuY3Rpb24oZSxuKXtuLm5vdz1NYXRoLnJvdW5kKGUpLG4ucHJvcCE9PSJoZWlnaHQiP2YrPW4ubm93OmEub3B0aW9ucy5oZWlnaHRTdHlsZSE9PSJjb250ZW50IiYmKG4ubm93PU1hdGgucm91bmQocy10Lm91dGVySGVpZ2h0KCktZiksZj0wKX19KX0sX3RvZ2dsZUNvbXBsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWUub2xkUGFuZWw7dC5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikucHJldigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItdG9wIikuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKSx0Lmxlbmd0aCYmKHQucGFyZW50KClbMF0uY2xhc3NOYW1lPXQucGFyZW50KClbMF0uY2xhc3NOYW1lKSx0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsbnVsbCxlKX19KSxlLnVpQmFja0NvbXBhdCE9PSExJiYoZnVuY3Rpb24oZSx0KXtlLmV4dGVuZCh0Lm9wdGlvbnMse25hdmlnYXRpb246ITEsbmF2aWdhdGlvbkZpbHRlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhyZWYudG9Mb3dlckNhc2UoKT09PWxvY2F0aW9uLmhyZWYudG9Mb3dlckNhc2UoKX19KTt2YXIgbj10Ll9jcmVhdGU7dC5fY3JlYXRlPWZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm5hdmlnYXRpb24pe3ZhciB0PXRoaXMscj10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKSxpPXIubmV4dCgpLHM9ci5hZGQoaSkuZmluZCgiYSIpLmZpbHRlcih0aGlzLm9wdGlvbnMubmF2aWdhdGlvbkZpbHRlcilbMF07cyYmci5hZGQoaSkuZWFjaChmdW5jdGlvbihuKXtpZihlLmNvbnRhaW5zKHRoaXMscykpcmV0dXJuIHQub3B0aW9ucy5hY3RpdmU9TWF0aC5mbG9vcihuLzIpLCExfSl9bi5jYWxsKHRoaXMpfX0oalF1ZXJ5LGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlKSxmdW5jdGlvbihlLHQpe2UuZXh0ZW5kKHQub3B0aW9ucyx7aGVpZ2h0U3R5bGU6bnVsbCxhdXRvSGVpZ2h0OiEwLGNsZWFyU3R5bGU6ITEsZmlsbFNwYWNlOiExfSk7dmFyIG49dC5fY3JlYXRlLHI9dC5fc2V0T3B0aW9uO2UuZXh0ZW5kKHQse19jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGU9dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlfHx0aGlzLl9tZXJnZUhlaWdodFN0eWxlKCksbi5jYWxsKHRoaXMpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUpe2lmKGU9PT0iYXV0b0hlaWdodCJ8fGU9PT0iY2xlYXJTdHlsZSJ8fGU9PT0iZmlsbFNwYWNlIil0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGU9dGhpcy5fbWVyZ2VIZWlnaHRTdHlsZSgpO3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbWVyZ2VIZWlnaHRTdHlsZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztpZihlLmZpbGxTcGFjZSlyZXR1cm4iZmlsbCI7aWYoZS5jbGVhclN0eWxlKXJldHVybiJjb250ZW50IjtpZihlLmF1dG9IZWlnaHQpcmV0dXJuImF1dG8ifX0pfShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLmljb25zLHthY3RpdmVIZWFkZXI6bnVsbCxoZWFkZXJTZWxlY3RlZDoidWktaWNvbi10cmlhbmdsZS0xLXMifSk7dmFyIG49dC5fY3JlYXRlSWNvbnM7dC5fY3JlYXRlSWNvbnM9ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuaWNvbnMmJih0aGlzLm9wdGlvbnMuaWNvbnMuYWN0aXZlSGVhZGVyPXRoaXMub3B0aW9ucy5pY29ucy5hY3RpdmVIZWFkZXJ8fHRoaXMub3B0aW9ucy5pY29ucy5oZWFkZXJTZWxlY3RlZCksbi5jYWxsKHRoaXMpfX0oalF1ZXJ5LGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlKSxmdW5jdGlvbihlLHQpe3QuYWN0aXZhdGU9dC5fYWN0aXZhdGU7dmFyIG49dC5fZmluZEFjdGl2ZTt0Ll9maW5kQWN0aXZlPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09LTEmJihlPSExKSxlJiZ0eXBlb2YgZSE9Im51bWJlciImJihlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmhlYWRlcnMuZmlsdGVyKGUpKSxlPT09LTEmJihlPSExKSksbi5jYWxsKHRoaXMsZSl9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlLnJlc2l6ZT1qUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZS5yZWZyZXNoLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHtjaGFuZ2U6bnVsbCxjaGFuZ2VzdGFydDpudWxsfSk7dmFyIG49dC5fdHJpZ2dlcjt0Ll90cmlnZ2VyPWZ1bmN0aW9uKGUsdCxyKXt2YXIgaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaT8oZT09PSJiZWZvcmVBY3RpdmF0ZSI/aT1uLmNhbGwodGhpcywiY2hhbmdlc3RhcnQiLHQse29sZEhlYWRlcjpyLm9sZEhlYWRlcixvbGRDb250ZW50OnIub2xkUGFuZWwsbmV3SGVhZGVyOnIubmV3SGVhZGVyLG5ld0NvbnRlbnQ6ci5uZXdQYW5lbH0pOmU9PT0iYWN0aXZhdGUiJiYoaT1uLmNhbGwodGhpcywiY2hhbmdlIix0LHtvbGRIZWFkZXI6ci5vbGRIZWFkZXIsb2xkQ29udGVudDpyLm9sZFBhbmVsLG5ld0hlYWRlcjpyLm5ld0hlYWRlcixuZXdDb250ZW50OnIubmV3UGFuZWx9KSksaSk6ITF9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHthbmltYXRlOm51bGwsYW5pbWF0ZWQ6InNsaWRlIn0pO3ZhciBuPXQuX2NyZWF0ZTt0Ll9jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7ZS5hbmltYXRlPT09bnVsbCYmKGUuYW5pbWF0ZWQ/ZS5hbmltYXRlZD09PSJzbGlkZSI/ZS5hbmltYXRlPTMwMDplLmFuaW1hdGVkPT09ImJvdW5jZXNsaWRlIj9lLmFuaW1hdGU9e2R1cmF0aW9uOjIwMCxkb3duOntlYXNpbmc6ImVhc2VPdXRCb3VuY2UiLGR1cmF0aW9uOjFlM319OmUuYW5pbWF0ZT1lLmFuaW1hdGVkOmUuYW5pbWF0ZT0hMSksbi5jYWxsKHRoaXMpfX0oalF1ZXJ5LGpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlKSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPTA7ZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIse3ZlcnNpb246IjEuOS4yIixkZWZhdWx0RWxlbWVudDoiPGlucHV0PiIsb3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246Im5vbmUifSxzb3VyY2U6bnVsbCxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc3BvbnNlOm51bGwsc2VhcmNoOm51bGwsc2VsZWN0Om51bGx9LHBlbmRpbmc6MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQsbixyO3RoaXMuaXNNdWx0aUxpbmU9dGhpcy5faXNNdWx0aUxpbmUoKSx0aGlzLnZhbHVlTWV0aG9kPXRoaXMuZWxlbWVudFt0aGlzLmVsZW1lbnQuaXMoImlucHV0LHRleHRhcmVhIik/InZhbCI6InRleHQiXSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLHRoaXMuX29uKHRoaXMuZWxlbWVudCx7a2V5ZG93bjpmdW5jdGlvbihpKXtpZih0aGlzLmVsZW1lbnQucHJvcCgicmVhZE9ubHkiKSl7dD0hMCxyPSEwLG49ITA7cmV0dXJufXQ9ITEscj0hMSxuPSExO3ZhciBzPWUudWkua2V5Q29kZTtzd2l0Y2goaS5rZXlDb2RlKXtjYXNlIHMuUEFHRV9VUDp0PSEwLHRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIsaSk7YnJlYWs7Y2FzZSBzLlBBR0VfRE9XTjp0PSEwLHRoaXMuX21vdmUoIm5leHRQYWdlIixpKTticmVhaztjYXNlIHMuVVA6dD0hMCx0aGlzLl9rZXlFdmVudCgicHJldmlvdXMiLGkpO2JyZWFrO2Nhc2Ugcy5ET1dOOnQ9ITAsdGhpcy5fa2V5RXZlbnQoIm5leHQiLGkpO2JyZWFrO2Nhc2Ugcy5FTlRFUjpjYXNlIHMuTlVNUEFEX0VOVEVSOnRoaXMubWVudS5hY3RpdmUmJih0PSEwLGkucHJldmVudERlZmF1bHQoKSx0aGlzLm1lbnUuc2VsZWN0KGkpKTticmVhaztjYXNlIHMuVEFCOnRoaXMubWVudS5hY3RpdmUmJnRoaXMubWVudS5zZWxlY3QoaSk7YnJlYWs7Y2FzZSBzLkVTQ0FQRTp0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5jbG9zZShpKSxpLnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2RlZmF1bHQ6bj0hMCx0aGlzLl9zZWFyY2hUaW1lb3V0KGkpfX0sa2V5cHJlc3M6ZnVuY3Rpb24ocil7aWYodCl7dD0hMSxyLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufWlmKG4pcmV0dXJuO3ZhciBpPWUudWkua2V5Q29kZTtzd2l0Y2goci5rZXlDb2RlKXtjYXNlIGkuUEFHRV9VUDp0aGlzLl9tb3ZlKCJwcmV2aW91c1BhZ2UiLHIpO2JyZWFrO2Nhc2UgaS5QQUdFX0RPV046dGhpcy5fbW92ZSgibmV4dFBhZ2UiLHIpO2JyZWFrO2Nhc2UgaS5VUDp0aGlzLl9rZXlFdmVudCgicHJldmlvdXMiLHIpO2JyZWFrO2Nhc2UgaS5ET1dOOnRoaXMuX2tleUV2ZW50KCJuZXh0IixyKX19LGlucHV0OmZ1bmN0aW9uKGUpe2lmKHIpe3I9ITEsZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn10aGlzLl9zZWFyY2hUaW1lb3V0KGUpfSxmb2N1czpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5wcmV2aW91cz10aGlzLl92YWx1ZSgpfSxibHVyOmZ1bmN0aW9uKGUpe2lmKHRoaXMuY2FuY2VsQmx1cil7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cjtyZXR1cm59Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLmNsb3NlKGUpLHRoaXMuX2NoYW5nZShlKX19KSx0aGlzLl9pbml0U291cmNlKCksdGhpcy5tZW51PWUoIjx1bD4iKS5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlIikuYXBwZW5kVG8odGhpcy5kb2N1bWVudC5maW5kKHRoaXMub3B0aW9ucy5hcHBlbmRUb3x8ImJvZHkiKVswXSkubWVudSh7aW5wdXQ6ZSgpLHJvbGU6bnVsbH0pLnpJbmRleCh0aGlzLmVsZW1lbnQuekluZGV4KCkrMSkuaGlkZSgpLmRhdGEoIm1lbnUiKSx0aGlzLl9vbih0aGlzLm1lbnUuZWxlbWVudCx7bW91c2Vkb3duOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyfSk7dmFyIG49dGhpcy5tZW51LmVsZW1lbnRbMF07ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aHx8dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMuZG9jdW1lbnQub25lKCJtb3VzZWRvd24iLGZ1bmN0aW9uKHIpe3IudGFyZ2V0IT09dC5lbGVtZW50WzBdJiZyLnRhcmdldCE9PW4mJiFlLmNvbnRhaW5zKG4sci50YXJnZXQpJiZ0LmNsb3NlKCl9KX0pfSxtZW51Zm9jdXM6ZnVuY3Rpb24odCxuKXtpZih0aGlzLmlzTmV3TWVudSl7dGhpcy5pc05ld01lbnU9ITE7aWYodC5vcmlnaW5hbEV2ZW50JiYvXm1vdXNlLy50ZXN0KHQub3JpZ2luYWxFdmVudC50eXBlKSl7dGhpcy5tZW51LmJsdXIoKSx0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vtb3ZlIixmdW5jdGlvbigpe2UodC50YXJnZXQpLnRyaWdnZXIodC5vcmlnaW5hbEV2ZW50KX0pO3JldHVybn19dmFyIHI9bi5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIil8fG4uaXRlbS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIpOyExIT09dGhpcy5fdHJpZ2dlcigiZm9jdXMiLHQse2l0ZW06cn0pP3Qub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShyLnZhbHVlKTp0aGlzLmxpdmVSZWdpb24udGV4dChyLnZhbHVlKX0sbWVudXNlbGVjdDpmdW5jdGlvbihlLHQpe3ZhciBuPXQuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpfHx0Lml0ZW0uZGF0YSgiaXRlbS5hdXRvY29tcGxldGUiKSxyPXRoaXMucHJldmlvdXM7dGhpcy5lbGVtZW50WzBdIT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50JiYodGhpcy5lbGVtZW50LmZvY3VzKCksdGhpcy5wcmV2aW91cz1yLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz1yLHRoaXMuc2VsZWN0ZWRJdGVtPW59KSksITEhPT10aGlzLl90cmlnZ2VyKCJzZWxlY3QiLGUse2l0ZW06bn0pJiZ0aGlzLl92YWx1ZShuLnZhbHVlKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKSx0aGlzLmNsb3NlKGUpLHRoaXMuc2VsZWN0ZWRJdGVtPW59fSksdGhpcy5saXZlUmVnaW9uPWUoIjxzcGFuPiIse3JvbGU6InN0YXR1cyIsImFyaWEtbGl2ZSI6InBvbGl0ZSJ9KS5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIikuaW5zZXJ0QWZ0ZXIodGhpcy5lbGVtZW50KSxlLmZuLmJnaWZyYW1lJiZ0aGlzLm1lbnUuZWxlbWVudC5iZ2lmcmFtZSgpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIil9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1pbnB1dCIpLnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpLHRoaXMubWVudS5lbGVtZW50LnJlbW92ZSgpLHRoaXMubGl2ZVJlZ2lvbi5yZW1vdmUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3N1cGVyKGUsdCksZT09PSJzb3VyY2UiJiZ0aGlzLl9pbml0U291cmNlKCksZT09PSJhcHBlbmRUbyImJnRoaXMubWVudS5lbGVtZW50LmFwcGVuZFRvKHRoaXMuZG9jdW1lbnQuZmluZCh0fHwiYm9keSIpWzBdKSxlPT09ImRpc2FibGVkIiYmdCYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9pc011bHRpTGluZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQuaXMoInRleHRhcmVhIik/ITA6dGhpcy5lbGVtZW50LmlzKCJpbnB1dCIpPyExOnRoaXMuZWxlbWVudC5wcm9wKCJpc0NvbnRlbnRFZGl0YWJsZSIpfSxfaW5pdFNvdXJjZTpmdW5jdGlvbigpe3ZhciB0LG4scj10aGlzO2UuaXNBcnJheSh0aGlzLm9wdGlvbnMuc291cmNlKT8odD10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKG4scil7cihlLnVpLmF1dG9jb21wbGV0ZS5maWx0ZXIodCxuLnRlcm0pKX0pOnR5cGVvZiB0aGlzLm9wdGlvbnMuc291cmNlPT0ic3RyaW5nIj8obj10aGlzLm9wdGlvbnMuc291cmNlLHRoaXMuc291cmNlPWZ1bmN0aW9uKHQsaSl7ci54aHImJnIueGhyLmFib3J0KCksci54aHI9ZS5hamF4KHt1cmw6bixkYXRhOnQsZGF0YVR5cGU6Impzb24iLHN1Y2Nlc3M6ZnVuY3Rpb24oZSl7aShlKX0sZXJyb3I6ZnVuY3Rpb24oKXtpKFtdKX19KX0pOnRoaXMuc291cmNlPXRoaXMub3B0aW9ucy5zb3VyY2V9LF9zZWFyY2hUaW1lb3V0OmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5zZWFyY2hpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnRlcm0hPT10aGlzLl92YWx1ZSgpJiYodGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnNlYXJjaChudWxsLGUpKX0sdGhpcy5vcHRpb25zLmRlbGF5KX0sc2VhcmNoOmZ1bmN0aW9uKGUsdCl7ZT1lIT1udWxsP2U6dGhpcy5fdmFsdWUoKSx0aGlzLnRlcm09dGhpcy5fdmFsdWUoKTtpZihlLmxlbmd0aDx0aGlzLm9wdGlvbnMubWluTGVuZ3RoKXJldHVybiB0aGlzLmNsb3NlKHQpO2lmKHRoaXMuX3RyaWdnZXIoInNlYXJjaCIsdCk9PT0hMSlyZXR1cm47cmV0dXJuIHRoaXMuX3NlYXJjaChlKX0sX3NlYXJjaDpmdW5jdGlvbihlKXt0aGlzLnBlbmRpbmcrKyx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06ZX0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD0rK247cmV0dXJuIGZ1bmN0aW9uKHIpe3Q9PT1uJiZlLl9fcmVzcG9uc2UociksZS5wZW5kaW5nLS0sZS5wZW5kaW5nfHxlLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIil9fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe2UmJihlPXRoaXMuX25vcm1hbGl6ZShlKSksdGhpcy5fdHJpZ2dlcigicmVzcG9uc2UiLG51bGwse2NvbnRlbnQ6ZX0pLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmUmJmUubGVuZ3RoJiYhdGhpcy5jYW5jZWxTZWFyY2g/KHRoaXMuX3N1Z2dlc3QoZSksdGhpcy5fdHJpZ2dlcigib3BlbiIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbihlKXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZShlKX0sX2Nsb3NlOmZ1bmN0aW9uKGUpe3RoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLGUpKX0sX2NoYW5nZTpmdW5jdGlvbihlKXt0aGlzLnByZXZpb3VzIT09dGhpcy5fdmFsdWUoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlLHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24odCl7cmV0dXJuIHQubGVuZ3RoJiZ0WzBdLmxhYmVsJiZ0WzBdLnZhbHVlP3Q6ZS5tYXAodCxmdW5jdGlvbih0KXtyZXR1cm4gdHlwZW9mIHQ9PSJzdHJpbmciP3tsYWJlbDp0LHZhbHVlOnR9OmUuZXh0ZW5kKHtsYWJlbDp0LmxhYmVsfHx0LnZhbHVlLHZhbHVlOnQudmFsdWV8fHQubGFiZWx9LHQpfSl9LF9zdWdnZXN0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMubWVudS5lbGVtZW50LmVtcHR5KCkuekluZGV4KHRoaXMuZWxlbWVudC56SW5kZXgoKSsxKTt0aGlzLl9yZW5kZXJNZW51KG4sdCksdGhpcy5tZW51LnJlZnJlc2goKSxuLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksbi5wb3NpdGlvbihlLmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVudS5lbGVtZW50O2Uub3V0ZXJXaWR0aChNYXRoLm1heChlLndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztlLmVhY2gobixmdW5jdGlvbihlLG4pe3IuX3JlbmRlckl0ZW1EYXRhKHQsbil9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0oZSx0KS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIsdCl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUoIjxsaT4iKS5hcHBlbmQoZSgiPGE+IikudGV4dChuLmxhYmVsKSkuYXBwZW5kVG8odCl9LF9tb3ZlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKXt0aGlzLnNlYXJjaChudWxsLHQpO3JldHVybn1pZih0aGlzLm1lbnUuaXNGaXJzdEl0ZW0oKSYmL15wcmV2aW91cy8udGVzdChlKXx8dGhpcy5tZW51LmlzTGFzdEl0ZW0oKSYmL15uZXh0Ly50ZXN0KGUpKXt0aGlzLl92YWx1ZSh0aGlzLnRlcm0pLHRoaXMubWVudS5ibHVyKCk7cmV0dXJufXRoaXMubWVudVtlXSh0KX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50fSxfdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy52YWx1ZU1ldGhvZC5hcHBseSh0aGlzLmVsZW1lbnQsYXJndW1lbnRzKX0sX2tleUV2ZW50OmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKXRoaXMuX21vdmUoZSx0KSx0LnByZXZlbnREZWZhdWx0KCl9fSksZS5leHRlbmQoZS51aS5hdXRvY29tcGxldGUse2VzY2FwZVJlZ2V4OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL1tcLVxbXF17fSgpKis/LixcXFxeJHwjXHNdL2csIlxcJCYiKX0sZmlsdGVyOmZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IFJlZ0V4cChlLnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleChuKSwiaSIpO3JldHVybiBlLmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gci50ZXN0KGUubGFiZWx8fGUudmFsdWV8fGUpfSl9fSksZS53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIsZS51aS5hdXRvY29tcGxldGUse29wdGlvbnM6e21lc3NhZ2VzOntub1Jlc3VsdHM6Ik5vIHNlYXJjaCByZXN1bHRzLiIscmVzdWx0czpmdW5jdGlvbihlKXtyZXR1cm4gZSsoZT4xPyIgcmVzdWx0cyBhcmUiOiIgcmVzdWx0IGlzIikrIiBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLiJ9fX0sX19yZXNwb25zZTpmdW5jdGlvbihlKXt2YXIgdDt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyk7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLmNhbmNlbFNlYXJjaClyZXR1cm47ZSYmZS5sZW5ndGg/dD10aGlzLm9wdGlvbnMubWVzc2FnZXMucmVzdWx0cyhlLmxlbmd0aCk6dD10aGlzLm9wdGlvbnMubWVzc2FnZXMubm9SZXN1bHRzLHRoaXMubGl2ZVJlZ2lvbi50ZXh0KHQpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkscyxvPSJ1aS1idXR0b24gdWktd2lkZ2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIsdT0idWktc3RhdGUtaG92ZXIgdWktc3RhdGUtYWN0aXZlICIsYT0idWktYnV0dG9uLWljb25zLW9ubHkgdWktYnV0dG9uLWljb24tb25seSB1aS1idXR0b24tdGV4dC1pY29ucyB1aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgdWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgdWktYnV0dG9uLXRleHQtb25seSIsZj1mdW5jdGlvbigpe3ZhciB0PWUodGhpcykuZmluZCgiOnVpLWJ1dHRvbiIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0LmJ1dHRvbigicmVmcmVzaCIpfSwxKX0sbD1mdW5jdGlvbih0KXt2YXIgbj10Lm5hbWUscj10LmZvcm0saT1lKFtdKTtyZXR1cm4gbiYmKHI/aT1lKHIpLmZpbmQoIltuYW1lPSciK24rIiddIik6aT1lKCJbbmFtZT0nIituKyInXSIsdC5vd25lckRvY3VtZW50KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5mb3JtfSkpLGl9O2Uud2lkZ2V0KCJ1aS5idXR0b24iLHt2ZXJzaW9uOiIxLjkuMiIsZGVmYXVsdEVsZW1lbnQ6IjxidXR0b24+IixvcHRpb25zOntkaXNhYmxlZDpudWxsLHRleHQ6ITAsbGFiZWw6bnVsbCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSkuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UsZiksdHlwZW9mIHRoaXMub3B0aW9ucy5kaXNhYmxlZCE9ImJvb2xlYW4iP3RoaXMub3B0aW9ucy5kaXNhYmxlZD0hIXRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsdGhpcy5vcHRpb25zLmRpc2FibGVkKSx0aGlzLl9kZXRlcm1pbmVCdXR0b25UeXBlKCksdGhpcy5oYXNUaXRsZT0hIXRoaXMuYnV0dG9uRWxlbWVudC5hdHRyKCJ0aXRsZSIpO3ZhciB0PXRoaXMsdT10aGlzLm9wdGlvbnMsYT10aGlzLnR5cGU9PT0iY2hlY2tib3gifHx0aGlzLnR5cGU9PT0icmFkaW8iLGM9YT8iIjoidWktc3RhdGUtYWN0aXZlIixoPSJ1aS1zdGF0ZS1mb2N1cyI7dS5sYWJlbD09PW51bGwmJih1LmxhYmVsPXRoaXMudHlwZT09PSJpbnB1dCI/dGhpcy5idXR0b25FbGVtZW50LnZhbCgpOnRoaXMuYnV0dG9uRWxlbWVudC5odG1sKCkpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmJ1dHRvbkVsZW1lbnQpLHRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhvKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuYmluZCgibW91c2VlbnRlciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO3RoaXM9PT1uJiZlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLmJpbmQoIm1vdXNlbGVhdmUiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybjtlKHRoaXMpLnJlbW92ZUNsYXNzKGMpfSkuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oZSl7dS5kaXNhYmxlZCYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpKX0pLHRoaXMuZWxlbWVudC5iaW5kKCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3QuYnV0dG9uRWxlbWVudC5hZGRDbGFzcyhoKX0pLmJpbmQoImJsdXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0LmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoaCl9KSxhJiYodGhpcy5lbGVtZW50LmJpbmQoImNoYW5nZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHMpcmV0dXJuO3QucmVmcmVzaCgpfSksdGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXtpZih1LmRpc2FibGVkKXJldHVybjtzPSExLHI9ZS5wYWdlWCxpPWUucGFnZVl9KS5iaW5kKCJtb3VzZXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKGUpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO2lmKHIhPT1lLnBhZ2VYfHxpIT09ZS5wYWdlWSlzPSEwfSkpLHRoaXMudHlwZT09PSJjaGVja2JveCI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYodS5kaXNhYmxlZHx8cylyZXR1cm4hMTtlKHRoaXMpLnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0LmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIix0LmVsZW1lbnRbMF0uY2hlY2tlZCl9KTp0aGlzLnR5cGU9PT0icmFkaW8iP3RoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWR8fHMpcmV0dXJuITE7ZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdC5idXR0b25FbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTt2YXIgbj10LmVsZW1lbnRbMF07bChuKS5ub3QobikubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6KHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybiExO2UodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLG49dGhpcyx0LmRvY3VtZW50Lm9uZSgibW91c2V1cCIsZnVuY3Rpb24oKXtuPW51bGx9KX0pLmJpbmQoIm1vdXNldXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkKXJldHVybiExO2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5ZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtpZih1LmRpc2FibGVkKXJldHVybiExOyh0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0V8fHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FTlRFUikmJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5dXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLHRoaXMuYnV0dG9uRWxlbWVudC5pcygiYSIpJiZ0aGlzLmJ1dHRvbkVsZW1lbnQua2V5dXAoZnVuY3Rpb24odCl7dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlNQQUNFJiZlKHRoaXMpLmNsaWNrKCl9KSksdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdS5kaXNhYmxlZCksdGhpcy5fcmVzZXRCdXR0b24oKX0sX2RldGVybWluZUJ1dHRvblR5cGU6ZnVuY3Rpb24oKXt2YXIgZSx0LG47dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1jaGVja2JveF0iKT90aGlzLnR5cGU9ImNoZWNrYm94Ijp0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPXJhZGlvXSIpP3RoaXMudHlwZT0icmFkaW8iOnRoaXMuZWxlbWVudC5pcygiaW5wdXQiKT90aGlzLnR5cGU9ImlucHV0Ijp0aGlzLnR5cGU9ImJ1dHRvbiIsdGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIj8oZT10aGlzLmVsZW1lbnQucGFyZW50cygpLmxhc3QoKSx0PSJsYWJlbFtmb3I9JyIrdGhpcy5lbGVtZW50LmF0dHIoImlkIikrIiddIix0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maW5kKHQpLHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGh8fChlPWUubGVuZ3RoP2Uuc2libGluZ3MoKTp0aGlzLmVsZW1lbnQuc2libGluZ3MoKSx0aGlzLmJ1dHRvbkVsZW1lbnQ9ZS5maWx0ZXIodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCkpKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLG49dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpLG4mJnRoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5idXR0b25FbGVtZW50LnByb3AoImFyaWEtcHJlc3NlZCIsbikpOnRoaXMuYnV0dG9uRWxlbWVudD10aGlzLmVsZW1lbnR9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ1dHRvbkVsZW1lbnR9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MobysiICIrdSsiICIrYSkucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtcHJlc3NlZCIpLmh0bWwodGhpcy5idXR0b25FbGVtZW50LmZpbmQoIi51aS1idXR0b24tdGV4dCIpLmh0bWwoKSksdGhpcy5oYXNUaXRsZXx8dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUF0dHIoInRpdGxlIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXt0aGlzLl9zdXBlcihlLHQpO2lmKGU9PT0iZGlzYWJsZWQiKXt0P3RoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITApOnRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITEpO3JldHVybn10aGlzLl9yZXNldEJ1dHRvbigpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LmlzKCJpbnB1dCwgYnV0dG9uIik/dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTp0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoInVpLWJ1dHRvbi1kaXNhYmxlZCIpO3QhPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHQpLHRoaXMudHlwZT09PSJyYWRpbyI/bCh0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmlzKCI6Y2hlY2tlZCIpP2UodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOmUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOnRoaXMudHlwZT09PSJjaGVja2JveCImJih0aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIik/dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpKX0sX3Jlc2V0QnV0dG9uOmZ1bmN0aW9uKCl7aWYodGhpcy50eXBlPT09ImlucHV0Iil7dGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLmVsZW1lbnQudmFsKHRoaXMub3B0aW9ucy5sYWJlbCk7cmV0dXJufXZhciB0PXRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhhKSxuPWUoIjxzcGFuPjwvc3Bhbj4iLHRoaXMuZG9jdW1lbnRbMF0pLmFkZENsYXNzKCJ1aS1idXR0b24tdGV4dCIpLmh0bWwodGhpcy5vcHRpb25zLmxhYmVsKS5hcHBlbmRUbyh0LmVtcHR5KCkpLnRleHQoKSxyPXRoaXMub3B0aW9ucy5pY29ucyxpPXIucHJpbWFyeSYmci5zZWNvbmRhcnkscz1bXTtyLnByaW1hcnl8fHIuc2Vjb25kYXJ5Pyh0aGlzLm9wdGlvbnMudGV4dCYmcy5wdXNoKCJ1aS1idXR0b24tdGV4dC1pY29uIisoaT8icyI6ci5wcmltYXJ5PyItcHJpbWFyeSI6Ii1zZWNvbmRhcnkiKSksci5wcmltYXJ5JiZ0LnByZXBlbmQoIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gIityLnByaW1hcnkrIic+PC9zcGFuPiIpLHIuc2Vjb25kYXJ5JiZ0LmFwcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB1aS1pY29uICIrci5zZWNvbmRhcnkrIic+PC9zcGFuPiIpLHRoaXMub3B0aW9ucy50ZXh0fHwocy5wdXNoKGk/InVpLWJ1dHRvbi1pY29ucy1vbmx5IjoidWktYnV0dG9uLWljb24tb25seSIpLHRoaXMuaGFzVGl0bGV8fHQuYXR0cigidGl0bGUiLGUudHJpbShuKSkpKTpzLnB1c2goInVpLWJ1dHRvbi10ZXh0LW9ubHkiKSx0LmFkZENsYXNzKHMuam9pbigiICIpKX19KSxlLndpZGdldCgidWkuYnV0dG9uc2V0Iix7dmVyc2lvbjoiMS45LjIiLG9wdGlvbnM6e2l0ZW1zOiJidXR0b24sIGlucHV0W3R5cGU9YnV0dG9uXSwgaW5wdXRbdHlwZT1zdWJtaXRdLCBpbnB1dFt0eXBlPXJlc2V0XSwgaW5wdXRbdHlwZT1jaGVja2JveF0sIGlucHV0W3R5cGU9cmFkaW9dLCBhLCA6ZGF0YShidXR0b24pIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYnV0dG9uc2V0Iil9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5yZWZyZXNoKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtlPT09ImRpc2FibGVkIiYmdGhpcy5idXR0b25zLmJ1dHRvbigib3B0aW9uIixlLHQpLHRoaXMuX3N1cGVyKGUsdCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuY3NzKCJkaXJlY3Rpb24iKT09PSJydGwiO3RoaXMuYnV0dG9ucz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmZpbHRlcigiOnVpLWJ1dHRvbiIpLmJ1dHRvbigicmVmcmVzaCIpLmVuZCgpLm5vdCgiOnVpLWJ1dHRvbiIpLmJ1dHRvbigpLmVuZCgpLm1hcChmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5maWx0ZXIoIjpmaXJzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1yaWdodCI6InVpLWNvcm5lci1sZWZ0IikuZW5kKCkuZmlsdGVyKCI6bGFzdCIpLmFkZENsYXNzKHQ/InVpLWNvcm5lci1sZWZ0IjoidWktY29ybmVyLXJpZ2h0IikuZW5kKCkuZW5kKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b25zZXQiKSx0aGlzLmJ1dHRvbnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItbGVmdCB1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5idXR0b24oImRlc3Ryb3kiKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKCQsdW5kZWZpbmVkKXtmdW5jdGlvbiBEYXRlcGlja2VyKCl7dGhpcy5kZWJ1Zz0hMSx0aGlzLl9jdXJJbnN0PW51bGwsdGhpcy5fa2V5RXZlbnQ9ITEsdGhpcy5fZGlzYWJsZWRJbnB1dHM9W10sdGhpcy5fZGF0ZXBpY2tlclNob3dpbmc9ITEsdGhpcy5faW5EaWFsb2c9ITEsdGhpcy5fbWFpbkRpdklkPSJ1aS1kYXRlcGlja2VyLWRpdiIsdGhpcy5faW5saW5lQ2xhc3M9InVpLWRhdGVwaWNrZXItaW5saW5lIix0aGlzLl9hcHBlbmRDbGFzcz0idWktZGF0ZXBpY2tlci1hcHBlbmQiLHRoaXMuX3RyaWdnZXJDbGFzcz0idWktZGF0ZXBpY2tlci10cmlnZ2VyIix0aGlzLl9kaWFsb2dDbGFzcz0idWktZGF0ZXBpY2tlci1kaWFsb2ciLHRoaXMuX2Rpc2FibGVDbGFzcz0idWktZGF0ZXBpY2tlci1kaXNhYmxlZCIsdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItdW5zZWxlY3RhYmxlIix0aGlzLl9jdXJyZW50Q2xhc3M9InVpLWRhdGVwaWNrZXItY3VycmVudC1kYXkiLHRoaXMuX2RheU92ZXJDbGFzcz0idWktZGF0ZXBpY2tlci1kYXlzLWNlbGwtb3ZlciIsdGhpcy5yZWdpb25hbD1bXSx0aGlzLnJlZ2lvbmFsWyIiXT17Y2xvc2VUZXh0OiJEb25lIixwcmV2VGV4dDoiUHJldiIsbmV4dFRleHQ6Ik5leHQiLGN1cnJlbnRUZXh0OiJUb2RheSIsbW9udGhOYW1lczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sbW9udGhOYW1lc1Nob3J0OlsiSmFuIiwiRmViIiwiTWFyIiwiQXByIiwiTWF5IiwiSnVuIiwiSnVsIiwiQXVnIiwiU2VwIiwiT2N0IiwiTm92IiwiRGVjIl0sZGF5TmFtZXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLGRheU5hbWVzU2hvcnQ6WyJTdW4iLCJNb24iLCJUdWUiLCJXZWQiLCJUaHUiLCJGcmkiLCJTYXQiXSxkYXlOYW1lc01pbjpbIlN1IiwiTW8iLCJUdSIsIldlIiwiVGgiLCJGciIsIlNhIl0sd2Vla0hlYWRlcjoiV2siLGRhdGVGb3JtYXQ6Im1tL2RkL3l5IixmaXJzdERheTowLGlzUlRMOiExLHNob3dNb250aEFmdGVyWWVhcjohMSx5ZWFyU3VmZml4OiIifSx0aGlzLl9kZWZhdWx0cz17c2hvd09uOiJmb2N1cyIsc2hvd0FuaW06ImZhZGVJbiIsc2hvd09wdGlvbnM6e30sZGVmYXVsdERhdGU6bnVsbCxhcHBlbmRUZXh0OiIiLGJ1dHRvblRleHQ6Ii4uLiIsYnV0dG9uSW1hZ2U6IiIsYnV0dG9uSW1hZ2VPbmx5OiExLGhpZGVJZk5vUHJldk5leHQ6ITEsbmF2aWdhdGlvbkFzRGF0ZUZvcm1hdDohMSxnb3RvQ3VycmVudDohMSxjaGFuZ2VNb250aDohMSxjaGFuZ2VZZWFyOiExLHllYXJSYW5nZToiYy0xMDpjKzEwIixzaG93T3RoZXJNb250aHM6ITEsc2VsZWN0T3RoZXJNb250aHM6ITEsc2hvd1dlZWs6ITEsY2FsY3VsYXRlV2Vlazp0aGlzLmlzbzg2MDFXZWVrLHNob3J0WWVhckN1dG9mZjoiKzEwIixtaW5EYXRlOm51bGwsbWF4RGF0ZTpudWxsLGR1cmF0aW9uOiJmYXN0IixiZWZvcmVTaG93RGF5Om51bGwsYmVmb3JlU2hvdzpudWxsLG9uU2VsZWN0Om51bGwsb25DaGFuZ2VNb250aFllYXI6bnVsbCxvbkNsb3NlOm51bGwsbnVtYmVyT2ZNb250aHM6MSxzaG93Q3VycmVudEF0UG9zOjAsc3RlcE1vbnRoczoxLHN0ZXBCaWdNb250aHM6MTIsYWx0RmllbGQ6IiIsYWx0Rm9ybWF0OiIiLGNvbnN0cmFpbklucHV0OiEwLHNob3dCdXR0b25QYW5lbDohMSxhdXRvU2l6ZTohMSxkaXNhYmxlZDohMX0sJC5leHRlbmQodGhpcy5fZGVmYXVsdHMsdGhpcy5yZWdpb25hbFsiIl0pLHRoaXMuZHBEaXY9YmluZEhvdmVyKCQoJzxkaXYgaWQ9IicrdGhpcy5fbWFpbkRpdklkKyciIGNsYXNzPSJ1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCI+PC9kaXY+JykpfWZ1bmN0aW9uIGJpbmRIb3ZlcihlKXt2YXIgdD0iYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhIjtyZXR1cm4gZS5kZWxlZ2F0ZSh0LCJtb3VzZW91dCIsZnVuY3Rpb24oKXskKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpIT0tMSYmJCh0aGlzKS5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIiksdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikhPS0xJiYkKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKX0pLmRlbGVnYXRlKHQsIm1vdXNlb3ZlciIsZnVuY3Rpb24oKXskLmRhdGVwaWNrZXIuX2lzRGlzYWJsZWREYXRlcGlja2VyKGluc3RBY3RpdmUuaW5saW5lP2UucGFyZW50KClbMF06aW5zdEFjdGl2ZS5pbnB1dFswXSl8fCgkKHRoaXMpLnBhcmVudHMoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIikuZmluZCgiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLCQodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1wcmV2IikhPS0xJiYkKHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSx0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLW5leHQiKSE9LTEmJiQodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciIpKX0pfWZ1bmN0aW9uIGV4dGVuZFJlbW92ZShlLHQpeyQuZXh0ZW5kKGUsdCk7Zm9yKHZhciBuIGluIHQpaWYodFtuXT09bnVsbHx8dFtuXT09dW5kZWZpbmVkKWVbbl09dFtuXTtyZXR1cm4gZX0kLmV4dGVuZCgkLnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOiIxLjkuMiJ9fSk7dmFyIFBST1BfTkFNRT0iZGF0ZXBpY2tlciIsZHB1dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLGluc3RBY3RpdmU7JC5leHRlbmQoRGF0ZXBpY2tlci5wcm90b3R5cGUse21hcmtlckNsYXNzTmFtZToiaGFzRGF0ZXBpY2tlciIsbWF4Um93czo0LGxvZzpmdW5jdGlvbigpe3RoaXMuZGVidWcmJmNvbnNvbGUubG9nLmFwcGx5KCIiLGFyZ3VtZW50cyl9LF93aWRnZXREYXRlcGlja2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZHBEaXZ9LHNldERlZmF1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBleHRlbmRSZW1vdmUodGhpcy5fZGVmYXVsdHMsZXx8e30pLHRoaXN9LF9hdHRhY2hEYXRlcGlja2VyOmZ1bmN0aW9uKHRhcmdldCxzZXR0aW5ncyl7dmFyIGlubGluZVNldHRpbmdzPW51bGw7Zm9yKHZhciBhdHRyTmFtZSBpbiB0aGlzLl9kZWZhdWx0cyl7dmFyIGF0dHJWYWx1ZT10YXJnZXQuZ2V0QXR0cmlidXRlKCJkYXRlOiIrYXR0ck5hbWUpO2lmKGF0dHJWYWx1ZSl7aW5saW5lU2V0dGluZ3M9aW5saW5lU2V0dGluZ3N8fHt9O3RyeXtpbmxpbmVTZXR0aW5nc1thdHRyTmFtZV09ZXZhbChhdHRyVmFsdWUpfWNhdGNoKGVycil7aW5saW5lU2V0dGluZ3NbYXR0ck5hbWVdPWF0dHJWYWx1ZX19fXZhciBub2RlTmFtZT10YXJnZXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxpbmxpbmU9bm9kZU5hbWU9PSJkaXYifHxub2RlTmFtZT09InNwYW4iO3RhcmdldC5pZHx8KHRoaXMudXVpZCs9MSx0YXJnZXQuaWQ9ImRwIit0aGlzLnV1aWQpO3ZhciBpbnN0PXRoaXMuX25ld0luc3QoJCh0YXJnZXQpLGlubGluZSk7aW5zdC5zZXR0aW5ncz0kLmV4dGVuZCh7fSxzZXR0aW5nc3x8e30saW5saW5lU2V0dGluZ3N8fHt9KSxub2RlTmFtZT09ImlucHV0Ij90aGlzLl9jb25uZWN0RGF0ZXBpY2tlcih0YXJnZXQsaW5zdCk6aW5saW5lJiZ0aGlzLl9pbmxpbmVEYXRlcGlja2VyKHRhcmdldCxpbnN0KX0sX25ld0luc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lWzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV8tXSkvZywiXFxcXCQxIik7cmV0dXJue2lkOm4saW5wdXQ6ZSxzZWxlY3RlZERheTowLHNlbGVjdGVkTW9udGg6MCxzZWxlY3RlZFllYXI6MCxkcmF3TW9udGg6MCxkcmF3WWVhcjowLGlubGluZTp0LGRwRGl2OnQ/YmluZEhvdmVyKCQoJzxkaXYgY2xhc3M9IicrdGhpcy5faW5saW5lQ2xhc3MrJyB1aS1kYXRlcGlja2VyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXggdWktY29ybmVyLWFsbCI+PC9kaXY+JykpOnRoaXMuZHBEaXZ9fSxfY29ubmVjdERhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj0kKGUpO3QuYXBwZW5kPSQoW10pLHQudHJpZ2dlcj0kKFtdKTtpZihuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47dGhpcy5fYXR0YWNobWVudHMobix0KSxuLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5rZXlkb3duKHRoaXMuX2RvS2V5RG93bikua2V5cHJlc3ModGhpcy5fZG9LZXlQcmVzcykua2V5dXAodGhpcy5fZG9LZXlVcCkuYmluZCgic2V0RGF0YS5kYXRlcGlja2VyIixmdW5jdGlvbihlLG4scil7dC5zZXR0aW5nc1tuXT1yfSkuYmluZCgiZ2V0RGF0YS5kYXRlcGlja2VyIixmdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLl9nZXQodCxuKX0pLHRoaXMuX2F1dG9TaXplKHQpLCQuZGF0YShlLFBST1BfTkFNRSx0KSx0LnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKX0sX2F0dGFjaG1lbnRzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0KHQsImFwcGVuZFRleHQiKSxyPXRoaXMuX2dldCh0LCJpc1JUTCIpO3QuYXBwZW5kJiZ0LmFwcGVuZC5yZW1vdmUoKSxuJiYodC5hcHBlbmQ9JCgnPHNwYW4gY2xhc3M9IicrdGhpcy5fYXBwZW5kQ2xhc3MrJyI+JytuKyI8L3NwYW4+IiksZVtyPyJiZWZvcmUiOiJhZnRlciJdKHQuYXBwZW5kKSksZS51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlciksdC50cmlnZ2VyJiZ0LnRyaWdnZXIucmVtb3ZlKCk7dmFyIGk9dGhpcy5fZ2V0KHQsInNob3dPbiIpOyhpPT0iZm9jdXMifHxpPT0iYm90aCIpJiZlLmZvY3VzKHRoaXMuX3Nob3dEYXRlcGlja2VyKTtpZihpPT0iYnV0dG9uInx8aT09ImJvdGgiKXt2YXIgcz10aGlzLl9nZXQodCwiYnV0dG9uVGV4dCIpLG89dGhpcy5fZ2V0KHQsImJ1dHRvbkltYWdlIik7dC50cmlnZ2VyPSQodGhpcy5fZ2V0KHQsImJ1dHRvbkltYWdlT25seSIpPyQoIjxpbWcvPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuYXR0cih7c3JjOm8sYWx0OnMsdGl0bGU6c30pOiQoJzxidXR0b24gdHlwZT0iYnV0dG9uIj48L2J1dHRvbj4nKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmh0bWwobz09IiI/czokKCI8aW1nLz4iKS5hdHRyKHtzcmM6byxhbHQ6cyx0aXRsZTpzfSkpKSxlW3I/ImJlZm9yZSI6ImFmdGVyIl0odC50cmlnZ2VyKSx0LnRyaWdnZXIuY2xpY2soZnVuY3Rpb24oKXtyZXR1cm4gJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PWVbMF0/JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpOiQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJiQuZGF0ZXBpY2tlci5fbGFzdElucHV0IT1lWzBdPygkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksJC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcihlWzBdKSk6JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcihlWzBdKSwhMX0pfX0sX2F1dG9TaXplOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2dldChlLCJhdXRvU2l6ZSIpJiYhZS5pbmxpbmUpe3ZhciB0PW5ldyBEYXRlKDIwMDksMTEsMjApLG49dGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKTtpZihuLm1hdGNoKC9bRE1dLykpe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PTAsbj0wO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKWVbcl0ubGVuZ3RoPnQmJih0PWVbcl0ubGVuZ3RoLG49cik7cmV0dXJuIG59O3Quc2V0TW9udGgocih0aGlzLl9nZXQoZSxuLm1hdGNoKC9NTS8pPyJtb250aE5hbWVzIjoibW9udGhOYW1lc1Nob3J0IikpKSx0LnNldERhdGUocih0aGlzLl9nZXQoZSxuLm1hdGNoKC9ERC8pPyJkYXlOYW1lcyI6ImRheU5hbWVzU2hvcnQiKSkrMjAtdC5nZXREYXkoKSl9ZS5pbnB1dC5hdHRyKCJzaXplIix0aGlzLl9mb3JtYXREYXRlKGUsdCkubGVuZ3RoKX19LF9pbmxpbmVEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCl7dmFyIG49JChlKTtpZihuLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47bi5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuYXBwZW5kKHQuZHBEaXYpLmJpbmQoInNldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oZSxuLHIpe3Quc2V0dGluZ3Nbbl09cn0pLmJpbmQoImdldERhdGEuZGF0ZXBpY2tlciIsZnVuY3Rpb24oZSxuKXtyZXR1cm4gdGhpcy5fZ2V0KHQsbil9KSwkLmRhdGEoZSxQUk9QX05BTUUsdCksdGhpcy5fc2V0RGF0ZSh0LHRoaXMuX2dldERlZmF1bHREYXRlKHQpLCEwKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKHQpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZSh0KSx0LnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSx0LmRwRGl2LmNzcygiZGlzcGxheSIsImJsb2NrIil9LF9kaWFsb2dEYXRlcGlja2VyOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHM9dGhpcy5fZGlhbG9nSW5zdDtpZighcyl7dGhpcy51dWlkKz0xO3ZhciBvPSJkcCIrdGhpcy51dWlkO3RoaXMuX2RpYWxvZ0lucHV0PSQoJzxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJytvKyciIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogLTEwMHB4OyB3aWR0aDogMHB4OyIvPicpLHRoaXMuX2RpYWxvZ0lucHV0LmtleWRvd24odGhpcy5fZG9LZXlEb3duKSwkKCJib2R5IikuYXBwZW5kKHRoaXMuX2RpYWxvZ0lucHV0KSxzPXRoaXMuX2RpYWxvZ0luc3Q9dGhpcy5fbmV3SW5zdCh0aGlzLl9kaWFsb2dJbnB1dCwhMSkscy5zZXR0aW5ncz17fSwkLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sUFJPUF9OQU1FLHMpfWV4dGVuZFJlbW92ZShzLnNldHRpbmdzLHJ8fHt9KSx0PXQmJnQuY29uc3RydWN0b3I9PURhdGU/dGhpcy5fZm9ybWF0RGF0ZShzLHQpOnQsdGhpcy5fZGlhbG9nSW5wdXQudmFsKHQpLHRoaXMuX3Bvcz1pP2kubGVuZ3RoP2k6W2kucGFnZVgsaS5wYWdlWV06bnVsbDtpZighdGhpcy5fcG9zKXt2YXIgdT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgsYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0LGY9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnR8fGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3B8fGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wO3RoaXMuX3Bvcz1bdS8yLTEwMCtmLGEvMi0xNTArbF19cmV0dXJuIHRoaXMuX2RpYWxvZ0lucHV0LmNzcygibGVmdCIsdGhpcy5fcG9zWzBdKzIwKyJweCIpLmNzcygidG9wIix0aGlzLl9wb3NbMV0rInB4Iikscy5zZXR0aW5ncy5vblNlbGVjdD1uLHRoaXMuX2luRGlhbG9nPSEwLHRoaXMuZHBEaXYuYWRkQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLHRoaXMuX3Nob3dEYXRlcGlja2VyKHRoaXMuX2RpYWxvZ0lucHV0WzBdKSwkLmJsb2NrVUkmJiQuYmxvY2tVSSh0aGlzLmRwRGl2KSwkLmRhdGEodGhpcy5fZGlhbG9nSW5wdXRbMF0sUFJPUF9OQU1FLHMpLHRoaXN9LF9kZXN0cm95RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD0kKGUpLG49JC5kYXRhKGUsUFJPUF9OQU1FKTtpZighdC5oYXNDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkpcmV0dXJuO3ZhciByPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTskLnJlbW92ZURhdGEoZSxQUk9QX05BTUUpLHI9PSJpbnB1dCI/KG4uYXBwZW5kLnJlbW92ZSgpLG4udHJpZ2dlci5yZW1vdmUoKSx0LnJlbW92ZUNsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS51bmJpbmQoImZvY3VzIix0aGlzLl9zaG93RGF0ZXBpY2tlcikudW5iaW5kKCJrZXlkb3duIix0aGlzLl9kb0tleURvd24pLnVuYmluZCgia2V5cHJlc3MiLHRoaXMuX2RvS2V5UHJlc3MpLnVuYmluZCgia2V5dXAiLHRoaXMuX2RvS2V5VXApKToocj09ImRpdiJ8fHI9PSJzcGFuIikmJnQucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmVtcHR5KCl9LF9lbmFibGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PSQoZSksbj0kLmRhdGEoZSxQUk9QX05BTUUpO2lmKCF0Lmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47dmFyIHI9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHI9PSJpbnB1dCIpZS5kaXNhYmxlZD0hMSxuLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMX0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIxLjAiLGN1cnNvcjoiIn0pO2Vsc2UgaWYocj09ImRpdiJ8fHI9PSJzcGFuIil7dmFyIGk9dC5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpO2kuY2hpbGRyZW4oKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxpLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCExKX10aGlzLl9kaXNhYmxlZElucHV0cz0kLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbih0KXtyZXR1cm4gdD09ZT9udWxsOnR9KX0sX2Rpc2FibGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PSQoZSksbj0kLmRhdGEoZSxQUk9QX05BTUUpO2lmKCF0Lmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47dmFyIHI9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKHI9PSJpbnB1dCIpZS5kaXNhYmxlZD0hMCxuLnRyaWdnZXIuZmlsdGVyKCJidXR0b24iKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcy5kaXNhYmxlZD0hMH0pLmVuZCgpLmZpbHRlcigiaW1nIikuY3NzKHtvcGFjaXR5OiIwLjUiLGN1cnNvcjoiZGVmYXVsdCJ9KTtlbHNlIGlmKHI9PSJkaXYifHxyPT0ic3BhbiIpe3ZhciBpPXQuY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKTtpLmNoaWxkcmVuKCkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiksaS5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMCl9dGhpcy5fZGlzYWJsZWRJbnB1dHM9JC5tYXAodGhpcy5fZGlzYWJsZWRJbnB1dHMsZnVuY3Rpb24odCl7cmV0dXJuIHQ9PWU/bnVsbDp0fSksdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXT1lfSxfaXNEaXNhYmxlZERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7Zm9yKHZhciB0PTA7dDx0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGg7dCsrKWlmKHRoaXMuX2Rpc2FibGVkSW5wdXRzW3RdPT1lKXJldHVybiEwO3JldHVybiExfSxfZ2V0SW5zdDpmdW5jdGlvbihlKXt0cnl7cmV0dXJuICQuZGF0YShlLFBST1BfTkFNRSl9Y2F0Y2godCl7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2dldEluc3QoZSk7aWYoYXJndW1lbnRzLmxlbmd0aD09MiYmdHlwZW9mIHQ9PSJzdHJpbmciKXJldHVybiB0PT0iZGVmYXVsdHMiPyQuZXh0ZW5kKHt9LCQuZGF0ZXBpY2tlci5fZGVmYXVsdHMpOnI/dD09ImFsbCI/JC5leHRlbmQoe30sci5zZXR0aW5ncyk6dGhpcy5fZ2V0KHIsdCk6bnVsbDt2YXIgaT10fHx7fTt0eXBlb2YgdD09InN0cmluZyImJihpPXt9LGlbdF09bik7aWYocil7dGhpcy5fY3VySW5zdD09ciYmdGhpcy5faGlkZURhdGVwaWNrZXIoKTt2YXIgcz10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcihlLCEwKSxvPXRoaXMuX2dldE1pbk1heERhdGUociwibWluIiksdT10aGlzLl9nZXRNaW5NYXhEYXRlKHIsIm1heCIpO2V4dGVuZFJlbW92ZShyLnNldHRpbmdzLGkpLG8hPT1udWxsJiZpLmRhdGVGb3JtYXQhPT11bmRlZmluZWQmJmkubWluRGF0ZT09PXVuZGVmaW5lZCYmKHIuc2V0dGluZ3MubWluRGF0ZT10aGlzLl9mb3JtYXREYXRlKHIsbykpLHUhPT1udWxsJiZpLmRhdGVGb3JtYXQhPT11bmRlZmluZWQmJmkubWF4RGF0ZT09PXVuZGVmaW5lZCYmKHIuc2V0dGluZ3MubWF4RGF0ZT10aGlzLl9mb3JtYXREYXRlKHIsdSkpLHRoaXMuX2F0dGFjaG1lbnRzKCQoZSksciksdGhpcy5fYXV0b1NpemUociksdGhpcy5fc2V0RGF0ZShyLHMpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShyKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKHIpfX0sX2NoYW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0LG4pe3RoaXMuX29wdGlvbkRhdGVwaWNrZXIoZSx0LG4pfSxfcmVmcmVzaERhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0SW5zdChlKTt0JiZ0aGlzLl91cGRhdGVEYXRlcGlja2VyKHQpfSxfc2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9nZXRJbnN0KGUpO24mJih0aGlzLl9zZXREYXRlKG4sdCksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihuKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUobikpfSxfZ2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9nZXRJbnN0KGUpO3JldHVybiBuJiYhbi5pbmxpbmUmJnRoaXMuX3NldERhdGVGcm9tRmllbGQobix0KSxuP3RoaXMuX2dldERhdGUobik6bnVsbH0sX2RvS2V5RG93bjpmdW5jdGlvbihlKXt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpLG49ITAscj10LmRwRGl2LmlzKCIudWktZGF0ZXBpY2tlci1ydGwiKTt0Ll9rZXlFdmVudD0hMDtpZigkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgOTokLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksbj0hMTticmVhaztjYXNlIDEzOnZhciBpPSQoInRkLiIrJC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MrIjpub3QoLiIrJC5kYXRlcGlja2VyLl9jdXJyZW50Q2xhc3MrIikiLHQuZHBEaXYpO2lbMF0mJiQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGUudGFyZ2V0LHQuc2VsZWN0ZWRNb250aCx0LnNlbGVjdGVkWWVhcixpWzBdKTt2YXIgcz0kLmRhdGVwaWNrZXIuX2dldCh0LCJvblNlbGVjdCIpO2lmKHMpe3ZhciBvPSQuZGF0ZXBpY2tlci5fZm9ybWF0RGF0ZSh0KTtzLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFtvLHRdKX1lbHNlICQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTtyZXR1cm4hMTtjYXNlIDI3OiQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKTticmVhaztjYXNlIDMzOiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBCaWdNb250aHMiKTotJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzNDokLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5PyskLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwQmlnTW9udGhzIik6KyQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzU6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9jbGVhckRhdGUoZS50YXJnZXQpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNjooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShlLnRhcmdldCksbj1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM3OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxyPzE6LTEsIkQiKSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5LGUub3JpZ2luYWxFdmVudC5hbHRLZXkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/LSQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBCaWdNb250aHMiKTotJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzODooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsLTcsIkQiKSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzk6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/LTE6MSwiRCIpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXksZS5vcmlnaW5hbEV2ZW50LmFsdEtleSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8rJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcEJpZ01vbnRocyIpOiskLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDQwOihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCw3LCJEIiksbj1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztkZWZhdWx0Om49ITF9ZWxzZSBlLmtleUNvZGU9PTM2JiZlLmN0cmxLZXk/JC5kYXRlcGlja2VyLl9zaG93RGF0ZXBpY2tlcih0aGlzKTpuPSExO24mJihlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSl9LF9kb0tleVByZXNzOmZ1bmN0aW9uKGUpe3ZhciB0PSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYoJC5kYXRlcGlja2VyLl9nZXQodCwiY29uc3RyYWluSW5wdXQiKSl7dmFyIG49JC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKCQuZGF0ZXBpY2tlci5fZ2V0KHQsImRhdGVGb3JtYXQiKSkscj1TdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGU9PXVuZGVmaW5lZD9lLmtleUNvZGU6ZS5jaGFyQ29kZSk7cmV0dXJuIGUuY3RybEtleXx8ZS5tZXRhS2V5fHxyPCIgInx8IW58fG4uaW5kZXhPZihyKT4tMX19LF9kb0tleVVwOmZ1bmN0aW9uKGUpe3ZhciB0PSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCk7aWYodC5pbnB1dC52YWwoKSE9dC5sYXN0VmFsKXRyeXt2YXIgbj0kLmRhdGVwaWNrZXIucGFyc2VEYXRlKCQuZGF0ZXBpY2tlci5fZ2V0KHQsImRhdGVGb3JtYXQiKSx0LmlucHV0P3QuaW5wdXQudmFsKCk6bnVsbCwkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0KSk7biYmKCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZCh0KSwkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZSh0KSwkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIodCkpfWNhdGNoKHIpeyQuZGF0ZXBpY2tlci5sb2cocil9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXtlPWUudGFyZ2V0fHxlLGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSE9ImlucHV0IiYmKGU9JCgiaW5wdXQiLGUucGFyZW50Tm9kZSlbMF0pO2lmKCQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoZSl8fCQuZGF0ZXBpY2tlci5fbGFzdElucHV0PT1lKXJldHVybjt2YXIgdD0kLmRhdGVwaWNrZXIuX2dldEluc3QoZSk7JC5kYXRlcGlja2VyLl9jdXJJbnN0JiYkLmRhdGVwaWNrZXIuX2N1ckluc3QhPXQmJigkLmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCksdCYmJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigkLmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKTt2YXIgbj0kLmRhdGVwaWNrZXIuX2dldCh0LCJiZWZvcmVTaG93Iikscj1uP24uYXBwbHkoZSxbZSx0XSk6e307aWYocj09PSExKXJldHVybjtleHRlbmRSZW1vdmUodC5zZXR0aW5ncyxyKSx0Lmxhc3RWYWw9bnVsbCwkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD1lLCQuZGF0ZXBpY2tlci5fc2V0RGF0ZUZyb21GaWVsZCh0KSwkLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYoZS52YWx1ZT0iIiksJC5kYXRlcGlja2VyLl9wb3N8fCgkLmRhdGVwaWNrZXIuX3Bvcz0kLmRhdGVwaWNrZXIuX2ZpbmRQb3MoZSksJC5kYXRlcGlja2VyLl9wb3NbMV0rPWUub2Zmc2V0SGVpZ2h0KTt2YXIgaT0hMTskKGUpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGl8PSQodGhpcykuY3NzKCJwb3NpdGlvbiIpPT0iZml4ZWQiLCFpfSk7dmFyIHM9e2xlZnQ6JC5kYXRlcGlja2VyLl9wb3NbMF0sdG9wOiQuZGF0ZXBpY2tlci5fcG9zWzFdfTskLmRhdGVwaWNrZXIuX3Bvcz1udWxsLHQuZHBEaXYuZW1wdHkoKSx0LmRwRGl2LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJibG9jayIsdG9wOiItMTAwMHB4In0pLCQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcih0KSxzPSQuZGF0ZXBpY2tlci5fY2hlY2tPZmZzZXQodCxzLGkpLHQuZHBEaXYuY3NzKHtwb3NpdGlvbjokLmRhdGVwaWNrZXIuX2luRGlhbG9nJiYkLmJsb2NrVUk/InN0YXRpYyI6aT8iZml4ZWQiOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsbGVmdDpzLmxlZnQrInB4Iix0b3A6cy50b3ArInB4In0pO2lmKCF0LmlubGluZSl7dmFyIG89JC5kYXRlcGlja2VyLl9nZXQodCwic2hvd0FuaW0iKSx1PSQuZGF0ZXBpY2tlci5fZ2V0KHQsImR1cmF0aW9uIiksYT1mdW5jdGlvbigpe3ZhciBlPXQuZHBEaXYuZmluZCgiaWZyYW1lLnVpLWRhdGVwaWNrZXItY292ZXIiKTtpZighIWUubGVuZ3RoKXt2YXIgbj0kLmRhdGVwaWNrZXIuX2dldEJvcmRlcnModC5kcERpdik7ZS5jc3Moe2xlZnQ6LW5bMF0sdG9wOi1uWzFdLHdpZHRoOnQuZHBEaXYub3V0ZXJXaWR0aCgpLGhlaWdodDp0LmRwRGl2Lm91dGVySGVpZ2h0KCl9KX19O3QuZHBEaXYuekluZGV4KCQoZSkuekluZGV4KCkrMSksJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZz0hMCwkLmVmZmVjdHMmJigkLmVmZmVjdHMuZWZmZWN0W29dfHwkLmVmZmVjdHNbb10pP3QuZHBEaXYuc2hvdyhvLCQuZGF0ZXBpY2tlci5fZ2V0KHQsInNob3dPcHRpb25zIiksdSxhKTp0LmRwRGl2W298fCJzaG93Il0obz91Om51bGwsYSksKCFvfHwhdSkmJmEoKSx0LmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhdC5pbnB1dC5pcygiOmRpc2FibGVkIikmJnQuaW5wdXQuZm9jdXMoKSwkLmRhdGVwaWNrZXIuX2N1ckluc3Q9dH19LF91cGRhdGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3RoaXMubWF4Um93cz00O3ZhciB0PSQuZGF0ZXBpY2tlci5fZ2V0Qm9yZGVycyhlLmRwRGl2KTtpbnN0QWN0aXZlPWUsZS5kcERpdi5lbXB0eSgpLmFwcGVuZCh0aGlzLl9nZW5lcmF0ZUhUTUwoZSkpLHRoaXMuX2F0dGFjaEhhbmRsZXJzKGUpO3ZhciBuPWUuZHBEaXYuZmluZCgiaWZyYW1lLnVpLWRhdGVwaWNrZXItY292ZXIiKTshbi5sZW5ndGh8fG4uY3NzKHtsZWZ0Oi10WzBdLHRvcDotdFsxXSx3aWR0aDplLmRwRGl2Lm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5kcERpdi5vdXRlckhlaWdodCgpfSksZS5kcERpdi5maW5kKCIuIit0aGlzLl9kYXlPdmVyQ2xhc3MrIiBhIikubW91c2VvdmVyKCk7dmFyIHI9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHMoZSksaT1yWzFdLHM9MTc7ZS5kcERpdi5yZW1vdmVDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0yIHVpLWRhdGVwaWNrZXItbXVsdGktMyB1aS1kYXRlcGlja2VyLW11bHRpLTQiKS53aWR0aCgiIiksaT4xJiZlLmRwRGl2LmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLSIraSkuY3NzKCJ3aWR0aCIscyppKyJlbSIpLGUuZHBEaXZbKHJbMF0hPTF8fHJbMV0hPTE/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLW11bHRpIiksZS5kcERpdlsodGhpcy5fZ2V0KGUsImlzUlRMIik/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpLGU9PSQuZGF0ZXBpY2tlci5fY3VySW5zdCYmJC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmZS5pbnB1dCYmZS5pbnB1dC5pcygiOnZpc2libGUiKSYmIWUuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiZlLmlucHV0WzBdIT1kb2N1bWVudC5hY3RpdmVFbGVtZW50JiZlLmlucHV0LmZvY3VzKCk7aWYoZS55ZWFyc2h0bWwpe3ZhciBvPWUueWVhcnNodG1sO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtvPT09ZS55ZWFyc2h0bWwmJmUueWVhcnNodG1sJiZlLmRwRGl2LmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLXllYXI6Zmlyc3QiKS5yZXBsYWNlV2l0aChlLnllYXJzaHRtbCksbz1lLnllYXJzaHRtbD1udWxsfSwwKX19LF9nZXRCb3JkZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PWZ1bmN0aW9uKGUpe3JldHVybnt0aGluOjEsbWVkaXVtOjIsdGhpY2s6M31bZV18fGV9O3JldHVybltwYXJzZUZsb2F0KHQoZS5jc3MoImJvcmRlci1sZWZ0LXdpZHRoIikpKSxwYXJzZUZsb2F0KHQoZS5jc3MoImJvcmRlci10b3Atd2lkdGgiKSkpXX0sX2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmRwRGl2Lm91dGVyV2lkdGgoKSxpPWUuZHBEaXYub3V0ZXJIZWlnaHQoKSxzPWUuaW5wdXQ/ZS5pbnB1dC5vdXRlcldpZHRoKCk6MCxvPWUuaW5wdXQ/ZS5pbnB1dC5vdXRlckhlaWdodCgpOjAsdT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgrKG4/MDokKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpLGE9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCsobj8wOiQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTtyZXR1cm4gdC5sZWZ0LT10aGlzLl9nZXQoZSwiaXNSVEwiKT9yLXM6MCx0LmxlZnQtPW4mJnQubGVmdD09ZS5pbnB1dC5vZmZzZXQoKS5sZWZ0PyQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKTowLHQudG9wLT1uJiZ0LnRvcD09ZS5pbnB1dC5vZmZzZXQoKS50b3Arbz8kKGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLHQubGVmdC09TWF0aC5taW4odC5sZWZ0LHQubGVmdCtyPnUmJnU+cj9NYXRoLmFicyh0LmxlZnQrci11KTowKSx0LnRvcC09TWF0aC5taW4odC50b3AsdC50b3AraT5hJiZhPmk/TWF0aC5hYnMoaStvKTowKSx0fSxfZmluZFBvczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRJbnN0KGUpLG49dGhpcy5fZ2V0KHQsImlzUlRMIik7d2hpbGUoZSYmKGUudHlwZT09ImhpZGRlbiJ8fGUubm9kZVR5cGUhPTF8fCQuZXhwci5maWx0ZXJzLmhpZGRlbihlKSkpZT1lW24/InByZXZpb3VzU2libGluZyI6Im5leHRTaWJsaW5nIl07dmFyIHI9JChlKS5vZmZzZXQoKTtyZXR1cm5bci5sZWZ0LHIudG9wXX0sX2hpZGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2N1ckluc3Q7aWYoIXR8fGUmJnQhPSQuZGF0YShlLFBST1BfTkFNRSkpcmV0dXJuO2lmKHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nKXt2YXIgbj10aGlzLl9nZXQodCwic2hvd0FuaW0iKSxyPXRoaXMuX2dldCh0LCJkdXJhdGlvbiIpLGk9ZnVuY3Rpb24oKXskLmRhdGVwaWNrZXIuX3RpZHlEaWFsb2codCl9OyQuZWZmZWN0cyYmKCQuZWZmZWN0cy5lZmZlY3Rbbl18fCQuZWZmZWN0c1tuXSk/dC5kcERpdi5oaWRlKG4sJC5kYXRlcGlja2VyLl9nZXQodCwic2hvd09wdGlvbnMiKSxyLGkpOnQuZHBEaXZbbj09InNsaWRlRG93biI/InNsaWRlVXAiOm49PSJmYWRlSW4iPyJmYWRlT3V0IjoiaGlkZSJdKG4/cjpudWxsLGkpLG58fGkoKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMTt2YXIgcz10aGlzLl9nZXQodCwib25DbG9zZSIpO3MmJnMuYXBwbHkodC5pbnB1dD90LmlucHV0WzBdOm51bGwsW3QuaW5wdXQ/dC5pbnB1dC52YWwoKToiIix0XSksdGhpcy5fbGFzdElucHV0PW51bGwsdGhpcy5faW5EaWFsb2cmJih0aGlzLl9kaWFsb2dJbnB1dC5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiMCIsdG9wOiItMTAwcHgifSksJC5ibG9ja1VJJiYoJC51bmJsb2NrVUkoKSwkKCJib2R5IikuYXBwZW5kKHRoaXMuZHBEaXYpKSksdGhpcy5faW5EaWFsb2c9ITF9fSxfdGlkeURpYWxvZzpmdW5jdGlvbihlKXtlLmRwRGl2LnJlbW92ZUNsYXNzKHRoaXMuX2RpYWxvZ0NsYXNzKS51bmJpbmQoIi51aS1kYXRlcGlja2VyLWNhbGVuZGFyIil9LF9jaGVja0V4dGVybmFsQ2xpY2s6ZnVuY3Rpb24oZSl7aWYoISQuZGF0ZXBpY2tlci5fY3VySW5zdClyZXR1cm47dmFyIHQ9JChlLnRhcmdldCksbj0kLmRhdGVwaWNrZXIuX2dldEluc3QodFswXSk7KHRbMF0uaWQhPSQuZGF0ZXBpY2tlci5fbWFpbkRpdklkJiZ0LnBhcmVudHMoIiMiKyQuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGg9PTAmJiF0Lmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYhdC5jbG9zZXN0KCIuIiskLmRhdGVwaWNrZXIuX3RyaWdnZXJDbGFzcykubGVuZ3RoJiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYoISQuZGF0ZXBpY2tlci5faW5EaWFsb2d8fCEkLmJsb2NrVUkpfHx0Lmhhc0NsYXNzKCQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYkLmRhdGVwaWNrZXIuX2N1ckluc3QhPW4pJiYkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LF9hZGp1c3REYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0kKGUpLGk9dGhpcy5fZ2V0SW5zdChyWzBdKTtpZih0aGlzLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihyWzBdKSlyZXR1cm47dGhpcy5fYWRqdXN0SW5zdERhdGUoaSx0KyhuPT0iTSI/dGhpcy5fZ2V0KGksInNob3dDdXJyZW50QXRQb3MiKTowKSxuKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpfSxfZ290b1RvZGF5OmZ1bmN0aW9uKGUpe3ZhciB0PSQoZSksbj10aGlzLl9nZXRJbnN0KHRbMF0pO2lmKHRoaXMuX2dldChuLCJnb3RvQ3VycmVudCIpJiZuLmN1cnJlbnREYXkpbi5zZWxlY3RlZERheT1uLmN1cnJlbnREYXksbi5kcmF3TW9udGg9bi5zZWxlY3RlZE1vbnRoPW4uY3VycmVudE1vbnRoLG4uZHJhd1llYXI9bi5zZWxlY3RlZFllYXI9bi5jdXJyZW50WWVhcjtlbHNle3ZhciByPW5ldyBEYXRlO24uc2VsZWN0ZWREYXk9ci5nZXREYXRlKCksbi5kcmF3TW9udGg9bi5zZWxlY3RlZE1vbnRoPXIuZ2V0TW9udGgoKSxuLmRyYXdZZWFyPW4uc2VsZWN0ZWRZZWFyPXIuZ2V0RnVsbFllYXIoKX10aGlzLl9ub3RpZnlDaGFuZ2UobiksdGhpcy5fYWRqdXN0RGF0ZSh0KX0sX3NlbGVjdE1vbnRoWWVhcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9JChlKSxpPXRoaXMuX2dldEluc3QoclswXSk7aVsic2VsZWN0ZWQiKyhuPT0iTSI/Ik1vbnRoIjoiWWVhciIpXT1pWyJkcmF3Iisobj09Ik0iPyJNb250aCI6IlllYXIiKV09cGFyc2VJbnQodC5vcHRpb25zW3Quc2VsZWN0ZWRJbmRleF0udmFsdWUsMTApLHRoaXMuX25vdGlmeUNoYW5nZShpKSx0aGlzLl9hZGp1c3REYXRlKHIpfSxfc2VsZWN0RGF5OmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPSQoZSk7aWYoJChyKS5oYXNDbGFzcyh0aGlzLl91bnNlbGVjdGFibGVDbGFzcyl8fHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKGlbMF0pKXJldHVybjt2YXIgcz10aGlzLl9nZXRJbnN0KGlbMF0pO3Muc2VsZWN0ZWREYXk9cy5jdXJyZW50RGF5PSQoImEiLHIpLmh0bWwoKSxzLnNlbGVjdGVkTW9udGg9cy5jdXJyZW50TW9udGg9dCxzLnNlbGVjdGVkWWVhcj1zLmN1cnJlbnRZZWFyPW4sdGhpcy5fc2VsZWN0RGF0ZShlLHRoaXMuX2Zvcm1hdERhdGUocyxzLmN1cnJlbnREYXkscy5jdXJyZW50TW9udGgscy5jdXJyZW50WWVhcikpfSxfY2xlYXJEYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PSQoZSksbj10aGlzLl9nZXRJbnN0KHRbMF0pO3RoaXMuX3NlbGVjdERhdGUodCwiIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKGUsdCl7dmFyIG49JChlKSxyPXRoaXMuX2dldEluc3QoblswXSk7dD10IT1udWxsP3Q6dGhpcy5fZm9ybWF0RGF0ZShyKSxyLmlucHV0JiZyLmlucHV0LnZhbCh0KSx0aGlzLl91cGRhdGVBbHRlcm5hdGUocik7dmFyIGk9dGhpcy5fZ2V0KHIsIm9uU2VsZWN0Iik7aT9pLmFwcGx5KHIuaW5wdXQ/ci5pbnB1dFswXTpudWxsLFt0LHJdKTpyLmlucHV0JiZyLmlucHV0LnRyaWdnZXIoImNoYW5nZSIpLHIuaW5saW5lP3RoaXMuX3VwZGF0ZURhdGVwaWNrZXIocik6KHRoaXMuX2hpZGVEYXRlcGlja2VyKCksdGhpcy5fbGFzdElucHV0PXIuaW5wdXRbMF0sdHlwZW9mIHIuaW5wdXRbMF0hPSJvYmplY3QiJiZyLmlucHV0LmZvY3VzKCksdGhpcy5fbGFzdElucHV0PW51bGwpfSxfdXBkYXRlQWx0ZXJuYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJhbHRGaWVsZCIpO2lmKHQpe3ZhciBuPXRoaXMuX2dldChlLCJhbHRGb3JtYXQiKXx8dGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKSxyPXRoaXMuX2dldERhdGUoZSksaT10aGlzLmZvcm1hdERhdGUobixyLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk7JCh0KS5lYWNoKGZ1bmN0aW9uKCl7JCh0aGlzKS52YWwoaSl9KX19LG5vV2Vla2VuZHM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5nZXREYXkoKTtyZXR1cm5bdD4wJiZ0PDYsIiJdfSxpc284NjAxV2VlazpmdW5jdGlvbihlKXt2YXIgdD1uZXcgRGF0ZShlLmdldFRpbWUoKSk7dC5zZXREYXRlKHQuZ2V0RGF0ZSgpKzQtKHQuZ2V0RGF5KCl8fDcpKTt2YXIgbj10LmdldFRpbWUoKTtyZXR1cm4gdC5zZXRNb250aCgwKSx0LnNldERhdGUoMSksTWF0aC5mbG9vcihNYXRoLnJvdW5kKChuLXQpLzg2NGU1KS83KSsxfSxwYXJzZURhdGU6ZnVuY3Rpb24oZSx0LG4pe2lmKGU9PW51bGx8fHQ9PW51bGwpdGhyb3ciSW52YWxpZCBhcmd1bWVudHMiO3Q9dHlwZW9mIHQ9PSJvYmplY3QiP3QudG9TdHJpbmcoKTp0KyIiO2lmKHQ9PSIiKXJldHVybiBudWxsO3ZhciByPShuP24uc2hvcnRZZWFyQ3V0b2ZmOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5zaG9ydFllYXJDdXRvZmY7cj10eXBlb2YgciE9InN0cmluZyI/cjoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KHIsMTApO3ZhciBpPShuP24uZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxzPShuP24uZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLG89KG4/bi5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCx1PShuP24ubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxhPS0xLGY9LTEsbD0tMSxjPS0xLGg9ITEscD1mdW5jdGlvbih0KXt2YXIgbj15KzE8ZS5sZW5ndGgmJmUuY2hhckF0KHkrMSk9PXQ7cmV0dXJuIG4mJnkrKyxufSxkPWZ1bmN0aW9uKGUpe3ZhciBuPXAoZSkscj1lPT0iQCI/MTQ6ZT09IiEiPzIwOmU9PSJ5IiYmbj80OmU9PSJvIj8zOjIsaT1uZXcgUmVnRXhwKCJeXFxkezEsIityKyJ9Iikscz10LnN1YnN0cmluZyhnKS5tYXRjaChpKTtpZighcyl0aHJvdyJNaXNzaW5nIG51bWJlciBhdCBwb3NpdGlvbiAiK2c7cmV0dXJuIGcrPXNbMF0ubGVuZ3RoLHBhcnNlSW50KHNbMF0sMTApfSx2PWZ1bmN0aW9uKGUsbixyKXt2YXIgaT0kLm1hcChwKGUpP3I6bixmdW5jdGlvbihlLHQpe3JldHVybltbdCxlXV19KS5zb3J0KGZ1bmN0aW9uKGUsdCl7cmV0dXJuLShlWzFdLmxlbmd0aC10WzFdLmxlbmd0aCl9KSxzPS0xOyQuZWFjaChpLGZ1bmN0aW9uKGUsbil7dmFyIHI9blsxXTtpZih0LnN1YnN0cihnLHIubGVuZ3RoKS50b0xvd2VyQ2FzZSgpPT1yLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHM9blswXSxnKz1yLmxlbmd0aCwhMX0pO2lmKHMhPS0xKXJldHVybiBzKzE7dGhyb3ciVW5rbm93biBuYW1lIGF0IHBvc2l0aW9uICIrZ30sbT1mdW5jdGlvbigpe2lmKHQuY2hhckF0KGcpIT1lLmNoYXJBdCh5KSl0aHJvdyJVbmV4cGVjdGVkIGxpdGVyYWwgYXQgcG9zaXRpb24gIitnO2crK30sZz0wO2Zvcih2YXIgeT0wO3k8ZS5sZW5ndGg7eSsrKWlmKGgpZS5jaGFyQXQoeSk9PSInIiYmIXAoIiciKT9oPSExOm0oKTtlbHNlIHN3aXRjaChlLmNoYXJBdCh5KSl7Y2FzZSJkIjpsPWQoImQiKTticmVhaztjYXNlIkQiOnYoIkQiLGkscyk7YnJlYWs7Y2FzZSJvIjpjPWQoIm8iKTticmVhaztjYXNlIm0iOmY9ZCgibSIpO2JyZWFrO2Nhc2UiTSI6Zj12KCJNIixvLHUpO2JyZWFrO2Nhc2UieSI6YT1kKCJ5Iik7YnJlYWs7Y2FzZSJAIjp2YXIgYj1uZXcgRGF0ZShkKCJAIikpO2E9Yi5nZXRGdWxsWWVhcigpLGY9Yi5nZXRNb250aCgpKzEsbD1iLmdldERhdGUoKTticmVhaztjYXNlIiEiOnZhciBiPW5ldyBEYXRlKChkKCIhIiktdGhpcy5fdGlja3NUbzE5NzApLzFlNCk7YT1iLmdldEZ1bGxZZWFyKCksZj1iLmdldE1vbnRoKCkrMSxsPWIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiJyI6cCgiJyIpP20oKTpoPSEwO2JyZWFrO2RlZmF1bHQ6bSgpfWlmKGc8dC5sZW5ndGgpe3ZhciB3PXQuc3Vic3RyKGcpO2lmKCEvXlxzKy8udGVzdCh3KSl0aHJvdyJFeHRyYS91bnBhcnNlZCBjaGFyYWN0ZXJzIGZvdW5kIGluIGRhdGU6ICIrd31hPT0tMT9hPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKTphPDEwMCYmKGErPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyhhPD1yPzA6LTEwMCkpO2lmKGM+LTEpe2Y9MSxsPWM7ZG97dmFyIEU9dGhpcy5fZ2V0RGF5c0luTW9udGgoYSxmLTEpO2lmKGw8PUUpYnJlYWs7ZisrLGwtPUV9d2hpbGUoITApfXZhciBiPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGEsZi0xLGwpKTtpZihiLmdldEZ1bGxZZWFyKCkhPWF8fGIuZ2V0TW9udGgoKSsxIT1mfHxiLmdldERhdGUoKSE9bCl0aHJvdyJJbnZhbGlkIGRhdGUiO3JldHVybiBifSxBVE9NOiJ5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5IixJU09fODYwMToieXktbW0tZGQiLFJGQ184MjI6IkQsIGQgTSB5IixSRkNfODUwOiJERCwgZGQtTS15IixSRkNfMTAzNjoiRCwgZCBNIHkiLFJGQ18xMTIzOiJELCBkIE0geXkiLFJGQ18yODIyOiJELCBkIE0geXkiLFJTUzoiRCwgZCBNIHkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXktbW0tZGQiLF90aWNrc1RvMTk3MDooNzE4Njg1K01hdGguZmxvb3IoNDkyLjUpLU1hdGguZmxvb3IoMTkuNykrTWF0aC5mbG9vcig0LjkyNSkpKjI0KjYwKjYwKjFlNyxmb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxuKXtpZighdClyZXR1cm4iIjt2YXIgcj0obj9uLmRheU5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzU2hvcnQsaT0obj9uLmRheU5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lcyxzPShuP24ubW9udGhOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzU2hvcnQsbz0obj9uLm1vbnRoTmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXMsdT1mdW5jdGlvbih0KXt2YXIgbj1oKzE8ZS5sZW5ndGgmJmUuY2hhckF0KGgrMSk9PXQ7cmV0dXJuIG4mJmgrKyxufSxhPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0iIit0O2lmKHUoZSkpd2hpbGUoci5sZW5ndGg8bilyPSIwIityO3JldHVybiByfSxmPWZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB1KGUpP3JbdF06blt0XX0sbD0iIixjPSExO2lmKHQpZm9yKHZhciBoPTA7aDxlLmxlbmd0aDtoKyspaWYoYyllLmNoYXJBdChoKT09IiciJiYhdSgiJyIpP2M9ITE6bCs9ZS5jaGFyQXQoaCk7ZWxzZSBzd2l0Y2goZS5jaGFyQXQoaCkpe2Nhc2UiZCI6bCs9YSgiZCIsdC5nZXREYXRlKCksMik7YnJlYWs7Y2FzZSJEIjpsKz1mKCJEIix0LmdldERheSgpLHIsaSk7YnJlYWs7Y2FzZSJvIjpsKz1hKCJvIixNYXRoLnJvdW5kKCgobmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkpLmdldFRpbWUoKS0obmV3IERhdGUodC5nZXRGdWxsWWVhcigpLDAsMCkpLmdldFRpbWUoKSkvODY0ZTUpLDMpO2JyZWFrO2Nhc2UibSI6bCs9YSgibSIsdC5nZXRNb250aCgpKzEsMik7YnJlYWs7Y2FzZSJNIjpsKz1mKCJNIix0LmdldE1vbnRoKCkscyxvKTticmVhaztjYXNlInkiOmwrPXUoInkiKT90LmdldEZ1bGxZZWFyKCk6KHQuZ2V0WWVhcigpJTEwMDwxMD8iMCI6IiIpK3QuZ2V0WWVhcigpJTEwMDticmVhaztjYXNlIkAiOmwrPXQuZ2V0VGltZSgpO2JyZWFrO2Nhc2UiISI6bCs9dC5nZXRUaW1lKCkqMWU0K3RoaXMuX3RpY2tzVG8xOTcwO2JyZWFrO2Nhc2UiJyI6dSgiJyIpP2wrPSInIjpjPSEwO2JyZWFrO2RlZmF1bHQ6bCs9ZS5jaGFyQXQoaCl9cmV0dXJuIGx9LF9wb3NzaWJsZUNoYXJzOmZ1bmN0aW9uKGUpe3ZhciB0PSIiLG49ITEscj1mdW5jdGlvbih0KXt2YXIgbj1pKzE8ZS5sZW5ndGgmJmUuY2hhckF0KGkrMSk9PXQ7cmV0dXJuIG4mJmkrKyxufTtmb3IodmFyIGk9MDtpPGUubGVuZ3RoO2krKylpZihuKWUuY2hhckF0KGkpPT0iJyImJiFyKCInIik/bj0hMTp0Kz1lLmNoYXJBdChpKTtlbHNlIHN3aXRjaChlLmNoYXJBdChpKSl7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJAIjp0Kz0iMDEyMzQ1Njc4OSI7YnJlYWs7Y2FzZSJEIjpjYXNlIk0iOnJldHVybiBudWxsO2Nhc2UiJyI6cigiJyIpP3QrPSInIjpuPSEwO2JyZWFrO2RlZmF1bHQ6dCs9ZS5jaGFyQXQoaSl9cmV0dXJuIHR9LF9nZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zZXR0aW5nc1t0XSE9PXVuZGVmaW5lZD9lLnNldHRpbmdzW3RdOnRoaXMuX2RlZmF1bHRzW3RdfSxfc2V0RGF0ZUZyb21GaWVsZDpmdW5jdGlvbihlLHQpe2lmKGUuaW5wdXQudmFsKCk9PWUubGFzdFZhbClyZXR1cm47dmFyIG49dGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKSxyPWUubGFzdFZhbD1lLmlucHV0P2UuaW5wdXQudmFsKCk6bnVsbCxpLHM7aT1zPXRoaXMuX2dldERlZmF1bHREYXRlKGUpO3ZhciBvPXRoaXMuX2dldEZvcm1hdENvbmZpZyhlKTt0cnl7aT10aGlzLnBhcnNlRGF0ZShuLHIsbyl8fHN9Y2F0Y2godSl7dGhpcy5sb2codSkscj10PyIiOnJ9ZS5zZWxlY3RlZERheT1pLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9aS5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9aS5nZXRGdWxsWWVhcigpLGUuY3VycmVudERheT1yP2kuZ2V0RGF0ZSgpOjAsZS5jdXJyZW50TW9udGg9cj9pLmdldE1vbnRoKCk6MCxlLmN1cnJlbnRZZWFyPXI/aS5nZXRGdWxsWWVhcigpOjAsdGhpcy5fYWRqdXN0SW5zdERhdGUoZSl9LF9nZXREZWZhdWx0RGF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdGhpcy5fZ2V0KGUsImRlZmF1bHREYXRlIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3JldHVybiB0LnNldERhdGUodC5nZXREYXRlKCkrZSksdH0saT1mdW5jdGlvbih0KXt0cnl7cmV0dXJuICQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJC5kYXRlcGlja2VyLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLHQsJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZSkpfWNhdGNoKG4pe312YXIgcj0odC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eYy8pPyQuZGF0ZXBpY2tlci5fZ2V0RGF0ZShlKTpudWxsKXx8bmV3IERhdGUsaT1yLmdldEZ1bGxZZWFyKCkscz1yLmdldE1vbnRoKCksbz1yLmdldERhdGUoKSx1PS8oWystXT9bMC05XSspXHMqKGR8RHx3fFd8bXxNfHl8WSk/L2csYT11LmV4ZWModCk7d2hpbGUoYSl7c3dpdGNoKGFbMl18fCJkIil7Y2FzZSJkIjpjYXNlIkQiOm8rPXBhcnNlSW50KGFbMV0sMTApO2JyZWFrO2Nhc2UidyI6Y2FzZSJXIjpvKz1wYXJzZUludChhWzFdLDEwKSo3O2JyZWFrO2Nhc2UibSI6Y2FzZSJNIjpzKz1wYXJzZUludChhWzFdLDEwKSxvPU1hdGgubWluKG8sJC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChpLHMpKTticmVhaztjYXNlInkiOmNhc2UiWSI6aSs9cGFyc2VJbnQoYVsxXSwxMCksbz1NYXRoLm1pbihvLCQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgoaSxzKSl9YT11LmV4ZWModCl9cmV0dXJuIG5ldyBEYXRlKGkscyxvKX0scz10PT1udWxsfHx0PT09IiI/bjp0eXBlb2YgdD09InN0cmluZyI/aSh0KTp0eXBlb2YgdD09Im51bWJlciI/aXNOYU4odCk/bjpyKHQpOm5ldyBEYXRlKHQuZ2V0VGltZSgpKTtyZXR1cm4gcz1zJiZzLnRvU3RyaW5nKCk9PSJJbnZhbGlkIERhdGUiP246cyxzJiYocy5zZXRIb3VycygwKSxzLnNldE1pbnV0ZXMoMCkscy5zZXRTZWNvbmRzKDApLHMuc2V0TWlsbGlzZWNvbmRzKDApKSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChzKX0sX2RheWxpZ2h0U2F2aW5nQWRqdXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlPyhlLnNldEhvdXJzKGUuZ2V0SG91cnMoKT4xMj9lLmdldEhvdXJzKCkrMjowKSxlKTpudWxsfSxfc2V0RGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9IXQsaT1lLnNlbGVjdGVkTW9udGgscz1lLnNlbGVjdGVkWWVhcixvPXRoaXMuX3Jlc3RyaWN0TWluTWF4KGUsdGhpcy5fZGV0ZXJtaW5lRGF0ZShlLHQsbmV3IERhdGUpKTtlLnNlbGVjdGVkRGF5PWUuY3VycmVudERheT1vLmdldERhdGUoKSxlLmRyYXdNb250aD1lLnNlbGVjdGVkTW9udGg9ZS5jdXJyZW50TW9udGg9by5nZXRNb250aCgpLGUuZHJhd1llYXI9ZS5zZWxlY3RlZFllYXI9ZS5jdXJyZW50WWVhcj1vLmdldEZ1bGxZZWFyKCksKGkhPWUuc2VsZWN0ZWRNb250aHx8cyE9ZS5zZWxlY3RlZFllYXIpJiYhbiYmdGhpcy5fbm90aWZ5Q2hhbmdlKGUpLHRoaXMuX2FkanVzdEluc3REYXRlKGUpLGUuaW5wdXQmJmUuaW5wdXQudmFsKHI/IiI6dGhpcy5fZm9ybWF0RGF0ZShlKSl9LF9nZXREYXRlOmZ1bmN0aW9uKGUpe3ZhciB0PSFlLmN1cnJlbnRZZWFyfHxlLmlucHV0JiZlLmlucHV0LnZhbCgpPT0iIj9udWxsOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHR9LF9hdHRhY2hIYW5kbGVyczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXQoZSwic3RlcE1vbnRocyIpLG49IiMiK2UuaWQucmVwbGFjZSgvXFxcXC9nLCJcXCIpO2UuZHBEaXYuZmluZCgiW2RhdGEtaGFuZGxlcl0iKS5tYXAoZnVuY3Rpb24oKXt2YXIgZT17cHJldjpmdW5jdGlvbigpe3dpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKG4sLXQsIk0iKX0sbmV4dDpmdW5jdGlvbigpe3dpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9hZGp1c3REYXRlKG4sK3QsIk0iKX0saGlkZTpmdW5jdGlvbigpe3dpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfSx0b2RheTpmdW5jdGlvbigpe3dpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9nb3RvVG9kYXkobil9LHNlbGVjdERheTpmdW5jdGlvbigpe3JldHVybiB3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fc2VsZWN0RGF5KG4sK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW1vbnRoIiksK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXllYXIiKSx0aGlzKSwhMX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX3NlbGVjdE1vbnRoWWVhcihuLHRoaXMsIk0iKSwhMX0sc2VsZWN0WWVhcjpmdW5jdGlvbigpe3JldHVybiB3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKG4sdGhpcywiWSIpLCExfX07JCh0aGlzKS5iaW5kKHRoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWV2ZW50IiksZVt0aGlzLmdldEF0dHJpYnV0ZSgiZGF0YS1oYW5kbGVyIildKX0pfSxfZ2VuZXJhdGVIVE1MOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlO3Q9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodC5nZXRGdWxsWWVhcigpLHQuZ2V0TW9udGgoKSx0LmdldERhdGUoKSkpO3ZhciBuPXRoaXMuX2dldChlLCJpc1JUTCIpLHI9dGhpcy5fZ2V0KGUsInNob3dCdXR0b25QYW5lbCIpLGk9dGhpcy5fZ2V0KGUsImhpZGVJZk5vUHJldk5leHQiKSxzPXRoaXMuX2dldChlLCJuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0Iiksbz10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSx1PXRoaXMuX2dldChlLCJzaG93Q3VycmVudEF0UG9zIiksYT10aGlzLl9nZXQoZSwic3RlcE1vbnRocyIpLGY9b1swXSE9MXx8b1sxXSE9MSxsPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KGUuY3VycmVudERheT9uZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSk6bmV3IERhdGUoOTk5OSw5LDkpKSxjPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIiksaD10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLHA9ZS5kcmF3TW9udGgtdSxkPWUuZHJhd1llYXI7cDwwJiYocCs9MTIsZC0tKTtpZihoKXt2YXIgdj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShoLmdldEZ1bGxZZWFyKCksaC5nZXRNb250aCgpLW9bMF0qb1sxXSsxLGguZ2V0RGF0ZSgpKSk7dj1jJiZ2PGM/Yzp2O3doaWxlKHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscCwxKSk+dilwLS0scDwwJiYocD0xMSxkLS0pfWUuZHJhd01vbnRoPXAsZS5kcmF3WWVhcj1kO3ZhciBtPXRoaXMuX2dldChlLCJwcmV2VGV4dCIpO209cz90aGlzLmZvcm1hdERhdGUobSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLHAtYSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTptO3ZhciBnPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsLTEsZCxwKT8nPGEgY2xhc3M9InVpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIiBkYXRhLWhhbmRsZXI9InByZXYiIGRhdGEtZXZlbnQ9ImNsaWNrIiB0aXRsZT0iJyttKyciPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLScrKG4/ImUiOiJ3IikrJyI+JyttKyI8L3NwYW4+PC9hPiI6aT8iIjonPGEgY2xhc3M9InVpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkIiB0aXRsZT0iJyttKyciPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLScrKG4/ImUiOiJ3IikrJyI+JyttKyI8L3NwYW4+PC9hPiIseT10aGlzLl9nZXQoZSwibmV4dFRleHQiKTt5PXM/dGhpcy5mb3JtYXREYXRlKHksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxwK2EsMSkpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6eTt2YXIgYj10aGlzLl9jYW5BZGp1c3RNb250aChlLDEsZCxwKT8nPGEgY2xhc3M9InVpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIiBkYXRhLWhhbmRsZXI9Im5leHQiIGRhdGEtZXZlbnQ9ImNsaWNrIiB0aXRsZT0iJyt5KyciPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLScrKG4/InciOiJlIikrJyI+Jyt5KyI8L3NwYW4+PC9hPiI6aT8iIjonPGEgY2xhc3M9InVpLWRhdGVwaWNrZXItbmV4dCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkIiB0aXRsZT0iJyt5KyciPjxzcGFuIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLScrKG4/InciOiJlIikrJyI+Jyt5KyI8L3NwYW4+PC9hPiIsdz10aGlzLl9nZXQoZSwiY3VycmVudFRleHQiKSxFPXRoaXMuX2dldChlLCJnb3RvQ3VycmVudCIpJiZlLmN1cnJlbnREYXk/bDp0O3c9cz90aGlzLmZvcm1hdERhdGUodyxFLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSk6dzt2YXIgUz1lLmlubGluZT8iIjonPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsIiBkYXRhLWhhbmRsZXI9ImhpZGUiIGRhdGEtZXZlbnQ9ImNsaWNrIj4nK3RoaXMuX2dldChlLCJjbG9zZVRleHQiKSsiPC9idXR0b24+Iix4PXI/JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCI+Jysobj9TOiIiKSsodGhpcy5faXNJblJhbmdlKGUsRSk/JzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0idWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0idG9kYXkiIGRhdGEtZXZlbnQ9ImNsaWNrIj4nK3crIjwvYnV0dG9uPiI6IiIpKyhuPyIiOlMpKyI8L2Rpdj4iOiIiLFQ9cGFyc2VJbnQodGhpcy5fZ2V0KGUsImZpcnN0RGF5IiksMTApO1Q9aXNOYU4oVCk/MDpUO3ZhciBOPXRoaXMuX2dldChlLCJzaG93V2VlayIpLEM9dGhpcy5fZ2V0KGUsImRheU5hbWVzIiksaz10aGlzLl9nZXQoZSwiZGF5TmFtZXNTaG9ydCIpLEw9dGhpcy5fZ2V0KGUsImRheU5hbWVzTWluIiksQT10aGlzLl9nZXQoZSwibW9udGhOYW1lcyIpLE89dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLE09dGhpcy5fZ2V0KGUsImJlZm9yZVNob3dEYXkiKSxfPXRoaXMuX2dldChlLCJzaG93T3RoZXJNb250aHMiKSxEPXRoaXMuX2dldChlLCJzZWxlY3RPdGhlck1vbnRocyIpLFA9dGhpcy5fZ2V0KGUsImNhbGN1bGF0ZVdlZWsiKXx8dGhpcy5pc284NjAxV2VlayxIPXRoaXMuX2dldERlZmF1bHREYXRlKGUpLEI9IiI7Zm9yKHZhciBqPTA7ajxvWzBdO2orKyl7dmFyIEY9IiI7dGhpcy5tYXhSb3dzPTQ7Zm9yKHZhciBJPTA7STxvWzFdO0krKyl7dmFyIHE9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxwLGUuc2VsZWN0ZWREYXkpKSxSPSIgdWktY29ybmVyLWFsbCIsVT0iIjtpZihmKXtVKz0nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1ncm91cCc7aWYob1sxXT4xKXN3aXRjaChJKXtjYXNlIDA6VSs9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWZpcnN0IixSPSIgdWktY29ybmVyLSIrKG4/InJpZ2h0IjoibGVmdCIpO2JyZWFrO2Nhc2Ugb1sxXS0xOlUrPSIgdWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IixSPSIgdWktY29ybmVyLSIrKG4/ImxlZnQiOiJyaWdodCIpO2JyZWFrO2RlZmF1bHQ6VSs9IiB1aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSIsUj0iIn1VKz0nIj4nfVUrPSc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCcrUisnIj4nKygvYWxsfGxlZnQvLnRlc3QoUikmJmo9PTA/bj9iOmc6IiIpKygvYWxsfHJpZ2h0Ly50ZXN0KFIpJiZqPT0wP24/ZzpiOiIiKSt0aGlzLl9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcihlLHAsZCxjLGgsaj4wfHxJPjAsQSxPKSsnPC9kaXY+PHRhYmxlIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNhbGVuZGFyIj48dGhlYWQ+JysiPHRyPiI7dmFyIHo9Tj8nPHRoIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXdlZWstY29sIj4nK3RoaXMuX2dldChlLCJ3ZWVrSGVhZGVyIikrIjwvdGg+IjoiIjtmb3IodmFyIFc9MDtXPDc7VysrKXt2YXIgWD0oVytUKSU3O3orPSI8dGgiKygoVytUKzYpJTc+PTU/JyBjbGFzcz0idWktZGF0ZXBpY2tlci13ZWVrLWVuZCInOiIiKSsiPiIrJzxzcGFuIHRpdGxlPSInK0NbWF0rJyI+JytMW1hdKyI8L3NwYW4+PC90aD4ifVUrPXorIjwvdHI+PC90aGVhZD48dGJvZHk+Ijt2YXIgVj10aGlzLl9nZXREYXlzSW5Nb250aChkLHApO2Q9PWUuc2VsZWN0ZWRZZWFyJiZwPT1lLnNlbGVjdGVkTW9udGgmJihlLnNlbGVjdGVkRGF5PU1hdGgubWluKGUuc2VsZWN0ZWREYXksVikpO3ZhciBKPSh0aGlzLl9nZXRGaXJzdERheU9mTW9udGgoZCxwKS1UKzcpJTcsSz1NYXRoLmNlaWwoKEorVikvNyksUT1mP3RoaXMubWF4Um93cz5LP3RoaXMubWF4Um93czpLOks7dGhpcy5tYXhSb3dzPVE7dmFyIEc9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxwLDEtSikpO2Zvcih2YXIgWT0wO1k8UTtZKyspe1UrPSI8dHI+Ijt2YXIgWj1OPyc8dGQgY2xhc3M9InVpLWRhdGVwaWNrZXItd2Vlay1jb2wiPicrdGhpcy5fZ2V0KGUsImNhbGN1bGF0ZVdlZWsiKShHKSsiPC90ZD4iOiIiO2Zvcih2YXIgVz0wO1c8NztXKyspe3ZhciBldD1NP00uYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW0ddKTpbITAsIiJdLHR0PUcuZ2V0TW9udGgoKSE9cCxudD10dCYmIUR8fCFldFswXXx8YyYmRzxjfHxoJiZHPmg7Wis9Jzx0ZCBjbGFzcz0iJysoKFcrVCs2KSU3Pj01PyIgdWktZGF0ZXBpY2tlci13ZWVrLWVuZCI6IiIpKyh0dD8iIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGgiOiIiKSsoRy5nZXRUaW1lKCk9PXEuZ2V0VGltZSgpJiZwPT1lLnNlbGVjdGVkTW9udGgmJmUuX2tleUV2ZW50fHxILmdldFRpbWUoKT09Ry5nZXRUaW1lKCkmJkguZ2V0VGltZSgpPT1xLmdldFRpbWUoKT8iICIrdGhpcy5fZGF5T3ZlckNsYXNzOiIiKSsobnQ/IiAiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKyIgdWktc3RhdGUtZGlzYWJsZWQiOiIiKSsodHQmJiFfPyIiOiIgIitldFsxXSsoRy5nZXRUaW1lKCk9PWwuZ2V0VGltZSgpPyIgIit0aGlzLl9jdXJyZW50Q2xhc3M6IiIpKyhHLmdldFRpbWUoKT09dC5nZXRUaW1lKCk/IiB1aS1kYXRlcGlja2VyLXRvZGF5IjoiIikpKyciJysoKCF0dHx8XykmJmV0WzJdPycgdGl0bGU9IicrZXRbMl0rJyInOiIiKSsobnQ/IiI6JyBkYXRhLWhhbmRsZXI9InNlbGVjdERheSIgZGF0YS1ldmVudD0iY2xpY2siIGRhdGEtbW9udGg9IicrRy5nZXRNb250aCgpKyciIGRhdGEteWVhcj0iJytHLmdldEZ1bGxZZWFyKCkrJyInKSsiPiIrKHR0JiYhXz8iJiN4YTA7IjpudD8nPHNwYW4gY2xhc3M9InVpLXN0YXRlLWRlZmF1bHQiPicrRy5nZXREYXRlKCkrIjwvc3Bhbj4iOic8YSBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCcrKEcuZ2V0VGltZSgpPT10LmdldFRpbWUoKT8iIHVpLXN0YXRlLWhpZ2hsaWdodCI6IiIpKyhHLmdldFRpbWUoKT09bC5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1hY3RpdmUiOiIiKSsodHQ/IiB1aS1wcmlvcml0eS1zZWNvbmRhcnkiOiIiKSsnIiBocmVmPSIjIj4nK0cuZ2V0RGF0ZSgpKyI8L2E+IikrIjwvdGQ+IixHLnNldERhdGUoRy5nZXREYXRlKCkrMSksRz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChHKX1VKz1aKyI8L3RyPiJ9cCsrLHA+MTEmJihwPTAsZCsrKSxVKz0iPC90Ym9keT48L3RhYmxlPiIrKGY/IjwvZGl2PiIrKG9bMF0+MCYmST09b1sxXS0xPyc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXJvdy1icmVhayI+PC9kaXY+JzoiIik6IiIpLEYrPVV9Qis9Rn1yZXR1cm4gQis9eCsoJC51aS5pZTYmJiFlLmlubGluZT8nPGlmcmFtZSBzcmM9ImphdmFzY3JpcHQ6ZmFsc2U7IiBjbGFzcz0idWktZGF0ZXBpY2tlci1jb3ZlciIgZnJhbWVib3JkZXI9IjAiPjwvaWZyYW1lPic6IiIpLGUuX2tleUV2ZW50PSExLEJ9LF9nZW5lcmF0ZU1vbnRoWWVhckhlYWRlcjpmdW5jdGlvbihlLHQsbixyLGkscyxvLHUpe3ZhciBhPXRoaXMuX2dldChlLCJjaGFuZ2VNb250aCIpLGY9dGhpcy5fZ2V0KGUsImNoYW5nZVllYXIiKSxsPXRoaXMuX2dldChlLCJzaG93TW9udGhBZnRlclllYXIiKSxjPSc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXRpdGxlIj4nLGg9IiI7aWYoc3x8IWEpaCs9JzxzcGFuIGNsYXNzPSJ1aS1kYXRlcGlja2VyLW1vbnRoIj4nK29bdF0rIjwvc3Bhbj4iO2Vsc2V7dmFyIHA9ciYmci5nZXRGdWxsWWVhcigpPT1uLGQ9aSYmaS5nZXRGdWxsWWVhcigpPT1uO2grPSc8c2VsZWN0IGNsYXNzPSJ1aS1kYXRlcGlja2VyLW1vbnRoIiBkYXRhLWhhbmRsZXI9InNlbGVjdE1vbnRoIiBkYXRhLWV2ZW50PSJjaGFuZ2UiPic7Zm9yKHZhciB2PTA7djwxMjt2KyspKCFwfHx2Pj1yLmdldE1vbnRoKCkpJiYoIWR8fHY8PWkuZ2V0TW9udGgoKSkmJihoKz0nPG9wdGlvbiB2YWx1ZT0iJyt2KyciJysodj09dD8nIHNlbGVjdGVkPSJzZWxlY3RlZCInOiIiKSsiPiIrdVt2XSsiPC9vcHRpb24+Iik7aCs9Ijwvc2VsZWN0PiJ9bHx8KGMrPWgrKHN8fCFhfHwhZj8iJiN4YTA7IjoiIikpO2lmKCFlLnllYXJzaHRtbCl7ZS55ZWFyc2h0bWw9IiI7aWYoc3x8IWYpYys9JzxzcGFuIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXllYXIiPicrbisiPC9zcGFuPiI7ZWxzZXt2YXIgbT10aGlzLl9nZXQoZSwieWVhclJhbmdlIikuc3BsaXQoIjoiKSxnPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSx5PWZ1bmN0aW9uKGUpe3ZhciB0PWUubWF0Y2goL2NbKy1dLiovKT9uK3BhcnNlSW50KGUuc3Vic3RyaW5nKDEpLDEwKTplLm1hdGNoKC9bKy1dLiovKT9nK3BhcnNlSW50KGUsMTApOnBhcnNlSW50KGUsMTApO3JldHVybiBpc05hTih0KT9nOnR9LGI9eShtWzBdKSx3PU1hdGgubWF4KGIseShtWzFdfHwiIikpO2I9cj9NYXRoLm1heChiLHIuZ2V0RnVsbFllYXIoKSk6Yix3PWk/TWF0aC5taW4odyxpLmdldEZ1bGxZZWFyKCkpOncsZS55ZWFyc2h0bWwrPSc8c2VsZWN0IGNsYXNzPSJ1aS1kYXRlcGlja2VyLXllYXIiIGRhdGEtaGFuZGxlcj0ic2VsZWN0WWVhciIgZGF0YS1ldmVudD0iY2hhbmdlIj4nO2Zvcig7Yjw9dztiKyspZS55ZWFyc2h0bWwrPSc8b3B0aW9uIHZhbHVlPSInK2IrJyInKyhiPT1uPycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+IitiKyI8L29wdGlvbj4iO2UueWVhcnNodG1sKz0iPC9zZWxlY3Q+IixjKz1lLnllYXJzaHRtbCxlLnllYXJzaHRtbD1udWxsfX1yZXR1cm4gYys9dGhpcy5fZ2V0KGUsInllYXJTdWZmaXgiKSxsJiYoYys9KHN8fCFhfHwhZj8iJiN4YTA7IjoiIikraCksYys9IjwvZGl2PiIsY30sX2FkanVzdEluc3REYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lLmRyYXdZZWFyKyhuPT0iWSI/dDowKSxpPWUuZHJhd01vbnRoKyhuPT0iTSI/dDowKSxzPU1hdGgubWluKGUuc2VsZWN0ZWREYXksdGhpcy5fZ2V0RGF5c0luTW9udGgocixpKSkrKG49PSJEIj90OjApLG89dGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShyLGkscykpKTtlLnNlbGVjdGVkRGF5PW8uZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1vLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1vLmdldEZ1bGxZZWFyKCksKG49PSJNInx8bj09IlkiKSYmdGhpcy5fbm90aWZ5Q2hhbmdlKGUpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1pbiIpLHI9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtYXgiKSxpPW4mJnQ8bj9uOnQ7cmV0dXJuIGk9ciYmaT5yP3I6aSxpfSxfbm90aWZ5Q2hhbmdlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJvbkNoYW5nZU1vbnRoWWVhciIpO3QmJnQuYXBwbHkoZS5pbnB1dD9lLmlucHV0WzBdOm51bGwsW2Uuc2VsZWN0ZWRZZWFyLGUuc2VsZWN0ZWRNb250aCsxLGVdKX0sX2dldE51bWJlck9mTW9udGhzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJudW1iZXJPZk1vbnRocyIpO3JldHVybiB0PT1udWxsP1sxLDFdOnR5cGVvZiB0PT0ibnVtYmVyIj9bMSx0XTp0fSxfZ2V0TWluTWF4RGF0ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdGhpcy5fZ2V0KGUsdCsiRGF0ZSIpLG51bGwpfSxfZ2V0RGF5c0luTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gMzItdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZSx0LDMyKSkuZ2V0RGF0ZSgpfSxfZ2V0Rmlyc3REYXlPZk1vbnRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuKG5ldyBEYXRlKGUsdCwxKSkuZ2V0RGF5KCl9LF9jYW5BZGp1c3RNb250aDpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxzPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG4scisodDwwP3Q6aVswXSppWzFdKSwxKSk7cmV0dXJuIHQ8MCYmcy5zZXREYXRlKHRoaXMuX2dldERheXNJbk1vbnRoKHMuZ2V0RnVsbFllYXIoKSxzLmdldE1vbnRoKCkpKSx0aGlzLl9pc0luUmFuZ2UoZSxzKX0sX2lzSW5SYW5nZTpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIikscj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpO3JldHVybighbnx8dC5nZXRUaW1lKCk+PW4uZ2V0VGltZSgpKSYmKCFyfHx0LmdldFRpbWUoKTw9ci5nZXRUaW1lKCkpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJzaG9ydFllYXJDdXRvZmYiKTtyZXR1cm4gdD10eXBlb2YgdCE9InN0cmluZyI/dDoobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KHQsMTApLHtzaG9ydFllYXJDdXRvZmY6dCxkYXlOYW1lc1Nob3J0OnRoaXMuX2dldChlLCJkYXlOYW1lc1Nob3J0IiksZGF5TmFtZXM6dGhpcy5fZ2V0KGUsImRheU5hbWVzIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldChlLCJtb250aE5hbWVzU2hvcnQiKSxtb250aE5hbWVzOnRoaXMuX2dldChlLCJtb250aE5hbWVzIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbihlLHQsbixyKXt0fHwoZS5jdXJyZW50RGF5PWUuc2VsZWN0ZWREYXksZS5jdXJyZW50TW9udGg9ZS5zZWxlY3RlZE1vbnRoLGUuY3VycmVudFllYXI9ZS5zZWxlY3RlZFllYXIpO3ZhciBpPXQ/dHlwZW9mIHQ9PSJvYmplY3QiP3Q6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocixuLHQpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLmN1cnJlbnRZZWFyLGUuY3VycmVudE1vbnRoLGUuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KGUsImRhdGVGb3JtYXQiKSxpLHRoaXMuX2dldEZvcm1hdENvbmZpZyhlKSl9fSksJC5mbi5kYXRlcGlja2VyPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczskLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWR8fCgkKGRvY3VtZW50KS5tb3VzZWRvd24oJC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLmZpbmQoZG9jdW1lbnQuYm9keSkuYXBwZW5kKCQuZGF0ZXBpY2tlci5kcERpdiksJC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSEwKTt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nInx8ZSE9ImlzRGlzYWJsZWQiJiZlIT0iZ2V0RGF0ZSImJmUhPSJ3aWRnZXQiP2U9PSJvcHRpb24iJiZhcmd1bWVudHMubGVuZ3RoPT0yJiZ0eXBlb2YgYXJndW1lbnRzWzFdPT0ic3RyaW5nIj8kLmRhdGVwaWNrZXJbIl8iK2UrIkRhdGVwaWNrZXIiXS5hcHBseSgkLmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdCh0KSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHlwZW9mIGU9PSJzdHJpbmciPyQuZGF0ZXBpY2tlclsiXyIrZSsiRGF0ZXBpY2tlciJdLmFwcGx5KCQuZGF0ZXBpY2tlcixbdGhpc10uY29uY2F0KHQpKTokLmRhdGVwaWNrZXIuX2F0dGFjaERhdGVwaWNrZXIodGhpcyxlKX0pOiQuZGF0ZXBpY2tlclsiXyIrZSsiRGF0ZXBpY2tlciJdLmFwcGx5KCQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KHQpKX0sJC5kYXRlcGlja2VyPW5ldyBEYXRlcGlja2VyLCQuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMSwkLmRhdGVwaWNrZXIudXVpZD0obmV3IERhdGUpLmdldFRpbWUoKSwkLmRhdGVwaWNrZXIudmVyc2lvbj0iMS45LjIiLHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXT0kfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0idWktZGlhbG9nIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsICIscj17YnV0dG9uczohMCxoZWlnaHQ6ITAsbWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMCx3aWR0aDohMH0saT17bWF4SGVpZ2h0OiEwLG1heFdpZHRoOiEwLG1pbkhlaWdodDohMCxtaW5XaWR0aDohMH07ZS53aWRnZXQoInVpLmRpYWxvZyIse3ZlcnNpb246IjEuOS4yIixvcHRpb25zOnthdXRvT3BlbjohMCxidXR0b25zOnt9LGNsb3NlT25Fc2NhcGU6ITAsY2xvc2VUZXh0OiJjbG9zZSIsZGlhbG9nQ2xhc3M6IiIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6ImF1dG8iLG1heEhlaWdodDohMSxtYXhXaWR0aDohMSxtaW5IZWlnaHQ6MTUwLG1pbldpZHRoOjE1MCxtb2RhbDohMSxwb3NpdGlvbjp7bXk6ImNlbnRlciIsYXQ6ImNlbnRlciIsb2Y6d2luZG93LGNvbGxpc2lvbjoiZml0Iix1c2luZzpmdW5jdGlvbih0KXt2YXIgbj1lKHRoaXMpLmNzcyh0KS5vZmZzZXQoKS50b3A7bjwwJiZlKHRoaXMpLmNzcygidG9wIix0LnRvcC1uKX19LHJlc2l6YWJsZTohMCxzaG93Om51bGwsc3RhY2s6ITAsdGl0bGU6IiIsd2lkdGg6MzAwLHpJbmRleDoxZTN9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9yaWdpbmFsVGl0bGU9dGhpcy5lbGVtZW50LmF0dHIoInRpdGxlIiksdHlwZW9mIHRoaXMub3JpZ2luYWxUaXRsZSE9InN0cmluZyImJih0aGlzLm9yaWdpbmFsVGl0bGU9IiIpLHRoaXMub2xkUG9zaXRpb249e3BhcmVudDp0aGlzLmVsZW1lbnQucGFyZW50KCksaW5kZXg6dGhpcy5lbGVtZW50LnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXgodGhpcy5lbGVtZW50KX0sdGhpcy5vcHRpb25zLnRpdGxlPXRoaXMub3B0aW9ucy50aXRsZXx8dGhpcy5vcmlnaW5hbFRpdGxlO3ZhciB0PXRoaXMscj10aGlzLm9wdGlvbnMsaT1yLnRpdGxlfHwiJiMxNjA7IixzLG8sdSxhLGY7cz0odGhpcy51aURpYWxvZz1lKCI8ZGl2PiIpKS5hZGRDbGFzcyhuK3IuZGlhbG9nQ2xhc3MpLmNzcyh7ZGlzcGxheToibm9uZSIsb3V0bGluZTowLHpJbmRleDpyLnpJbmRleH0pLmF0dHIoInRhYkluZGV4IiwtMSkua2V5ZG93bihmdW5jdGlvbihuKXtyLmNsb3NlT25Fc2NhcGUmJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLmtleUNvZGUmJm4ua2V5Q29kZT09PWUudWkua2V5Q29kZS5FU0NBUEUmJih0LmNsb3NlKG4pLG4ucHJldmVudERlZmF1bHQoKSl9KS5tb3VzZWRvd24oZnVuY3Rpb24oZSl7dC5tb3ZlVG9Ub3AoITEsZSl9KS5hcHBlbmRUbygiYm9keSIpLHRoaXMuZWxlbWVudC5zaG93KCkucmVtb3ZlQXR0cigidGl0bGUiKS5hZGRDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5hcHBlbmRUbyhzKSxvPSh0aGlzLnVpRGlhbG9nVGl0bGViYXI9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZWJhciAgdWktd2lkZ2V0LWhlYWRlciAgdWktY29ybmVyLWFsbCAgdWktaGVscGVyLWNsZWFyZml4IikuYmluZCgibW91c2Vkb3duIixmdW5jdGlvbigpe3MuZm9jdXMoKX0pLnByZXBlbmRUbyhzKSx1PWUoIjxhIGhyZWY9JyMnPjwvYT4iKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlICB1aS1jb3JuZXItYWxsIikuYXR0cigicm9sZSIsImJ1dHRvbiIpLmNsaWNrKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx0LmNsb3NlKGUpfSkuYXBwZW5kVG8obyksKHRoaXMudWlEaWFsb2dUaXRsZWJhckNsb3NlVGV4dD1lKCI8c3Bhbj4iKSkuYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1jbG9zZXRoaWNrIikudGV4dChyLmNsb3NlVGV4dCkuYXBwZW5kVG8odSksYT1lKCI8c3Bhbj4iKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGUiKS5odG1sKGkpLnByZXBlbmRUbyhvKSxmPSh0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZT1lKCI8ZGl2PiIpKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnBhbmUgdWktd2lkZ2V0LWNvbnRlbnQgdWktaGVscGVyLWNsZWFyZml4IiksKHRoaXMudWlCdXR0b25TZXQ9ZSgiPGRpdj4iKSkuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zZXQiKS5hcHBlbmRUbyhmKSxzLmF0dHIoe3JvbGU6ImRpYWxvZyIsImFyaWEtbGFiZWxsZWRieSI6YS5hdHRyKCJpZCIpfSksby5maW5kKCIqIikuYWRkKG8pLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9ob3ZlcmFibGUodSksdGhpcy5fZm9jdXNhYmxlKHUpLHIuZHJhZ2dhYmxlJiZlLmZuLmRyYWdnYWJsZSYmdGhpcy5fbWFrZURyYWdnYWJsZSgpLHIucmVzaXphYmxlJiZlLmZuLnJlc2l6YWJsZSYmdGhpcy5fbWFrZVJlc2l6YWJsZSgpLHRoaXMuX2NyZWF0ZUJ1dHRvbnMoci5idXR0b25zKSx0aGlzLl9pc09wZW49ITEsZS5mbi5iZ2lmcmFtZSYmcy5iZ2lmcmFtZSgpLHRoaXMuX29uKHMse2tleWRvd246ZnVuY3Rpb24odCl7aWYoIXIubW9kYWx8fHQua2V5Q29kZSE9PWUudWkua2V5Q29kZS5UQUIpcmV0dXJuO3ZhciBuPWUoIjp0YWJiYWJsZSIscyksaT1uLmZpbHRlcigiOmZpcnN0Iiksbz1uLmZpbHRlcigiOmxhc3QiKTtpZih0LnRhcmdldD09PW9bMF0mJiF0LnNoaWZ0S2V5KXJldHVybiBpLmZvY3VzKDEpLCExO2lmKHQudGFyZ2V0PT09aVswXSYmdC5zaGlmdEtleSlyZXR1cm4gby5mb2N1cygxKSwhMX19KX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLm9wdGlvbnMuYXV0b09wZW4mJnRoaXMub3BlbigpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5vbGRQb3NpdGlvbjt0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5kZXN0cm95KCksdGhpcy51aURpYWxvZy5oaWRlKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmhpZGUoKS5hcHBlbmRUbygiYm9keSIpLHRoaXMudWlEaWFsb2cucmVtb3ZlKCksdGhpcy5vcmlnaW5hbFRpdGxlJiZ0aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiLHRoaXMub3JpZ2luYWxUaXRsZSksZT10LnBhcmVudC5jaGlsZHJlbigpLmVxKHQuaW5kZXgpLGUubGVuZ3RoJiZlWzBdIT09dGhpcy5lbGVtZW50WzBdP2UuYmVmb3JlKHRoaXMuZWxlbWVudCk6dC5wYXJlbnQuYXBwZW5kKHRoaXMuZWxlbWVudCl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpRGlhbG9nfSxjbG9zZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHIsaTtpZighdGhpcy5faXNPcGVuKXJldHVybjtpZighMT09PXRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIix0KSlyZXR1cm47cmV0dXJuIHRoaXMuX2lzT3Blbj0hMSx0aGlzLm92ZXJsYXkmJnRoaXMub3ZlcmxheS5kZXN0cm95KCksdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7bi5fdHJpZ2dlcigiY2xvc2UiLHQpfSk6KHRoaXMudWlEaWFsb2cuaGlkZSgpLHRoaXMuX3RyaWdnZXIoImNsb3NlIix0KSksZS51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKSx0aGlzLm9wdGlvbnMubW9kYWwmJihyPTAsZSgiLnVpLWRpYWxvZyIpLmVhY2goZnVuY3Rpb24oKXt0aGlzIT09bi51aURpYWxvZ1swXSYmKGk9ZSh0aGlzKS5jc3MoInotaW5kZXgiKSxpc05hTihpKXx8KHI9TWF0aC5tYXgocixpKSkpfSksZS51aS5kaWFsb2cubWF4Wj1yKSx0aGlzfSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSxtb3ZlVG9Ub3A6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzLm9wdGlvbnMsaTtyZXR1cm4gci5tb2RhbCYmIXR8fCFyLnN0YWNrJiYhci5tb2RhbD90aGlzLl90cmlnZ2VyKCJmb2N1cyIsbik6KHIuekluZGV4PmUudWkuZGlhbG9nLm1heFomJihlLnVpLmRpYWxvZy5tYXhaPXIuekluZGV4KSx0aGlzLm92ZXJsYXkmJihlLnVpLmRpYWxvZy5tYXhaKz0xLGUudWkuZGlhbG9nLm92ZXJsYXkubWF4Wj1lLnVpLmRpYWxvZy5tYXhaLHRoaXMub3ZlcmxheS4kZWwuY3NzKCJ6LWluZGV4IixlLnVpLmRpYWxvZy5vdmVybGF5Lm1heFopKSxpPXtzY3JvbGxUb3A6dGhpcy5lbGVtZW50LnNjcm9sbFRvcCgpLHNjcm9sbExlZnQ6dGhpcy5lbGVtZW50LnNjcm9sbExlZnQoKX0sZS51aS5kaWFsb2cubWF4Wis9MSx0aGlzLnVpRGlhbG9nLmNzcygiei1pbmRleCIsZS51aS5kaWFsb2cubWF4WiksdGhpcy5lbGVtZW50LmF0dHIoaSksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLG4pLHRoaXMpfSxvcGVuOmZ1bmN0aW9uKCl7aWYodGhpcy5faXNPcGVuKXJldHVybjt2YXIgdCxuPXRoaXMub3B0aW9ucyxyPXRoaXMudWlEaWFsb2c7cmV0dXJuIHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbihuLnBvc2l0aW9uKSxyLnNob3cobi5zaG93KSx0aGlzLm92ZXJsYXk9bi5tb2RhbD9uZXcgZS51aS5kaWFsb2cub3ZlcmxheSh0aGlzKTpudWxsLHRoaXMubW92ZVRvVG9wKCEwKSx0PXRoaXMuZWxlbWVudC5maW5kKCI6dGFiYmFibGUiKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCgiOnRhYmJhYmxlIiksdC5sZW5ndGh8fCh0PXIpKSx0LmVxKDApLmZvY3VzKCksdGhpcy5faXNPcGVuPSEwLHRoaXMuX3RyaWdnZXIoIm9wZW4iKSx0aGlzfSxfY3JlYXRlQnV0dG9uczpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9ITE7dGhpcy51aURpYWxvZ0J1dHRvblBhbmUucmVtb3ZlKCksdGhpcy51aUJ1dHRvblNldC5lbXB0eSgpLHR5cGVvZiB0PT0ib2JqZWN0IiYmdCE9PW51bGwmJmUuZWFjaCh0LGZ1bmN0aW9uKCl7cmV0dXJuIShyPSEwKX0pLHI/KGUuZWFjaCh0LGZ1bmN0aW9uKHQscil7dmFyIGkscztyPWUuaXNGdW5jdGlvbihyKT97Y2xpY2s6cix0ZXh0OnR9OnIscj1lLmV4dGVuZCh7dHlwZToiYnV0dG9uIn0scikscz1yLmNsaWNrLHIuY2xpY2s9ZnVuY3Rpb24oKXtzLmFwcGx5KG4uZWxlbWVudFswXSxhcmd1bWVudHMpfSxpPWUoIjxidXR0b24+PC9idXR0b24+IixyKS5hcHBlbmRUbyhuLnVpQnV0dG9uU2V0KSxlLmZuLmJ1dHRvbiYmaS5idXR0b24oKX0pLHRoaXMudWlEaWFsb2cuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIiksdGhpcy51aURpYWxvZ0J1dHRvblBhbmUuYXBwZW5kVG8odGhpcy51aURpYWxvZykpOnRoaXMudWlEaWFsb2cucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1idXR0b25zIil9LF9tYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlKXtyZXR1cm57cG9zaXRpb246ZS5wb3NpdGlvbixvZmZzZXQ6ZS5vZmZzZXR9fXZhciB0PXRoaXMsbj10aGlzLm9wdGlvbnM7dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoe2NhbmNlbDoiLnVpLWRpYWxvZy1jb250ZW50LCAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIixoYW5kbGU6Ii51aS1kaWFsb2ctdGl0bGViYXIiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsc3RhcnQ6ZnVuY3Rpb24obixpKXtlKHRoaXMpLmFkZENsYXNzKCJ1aS1kaWFsb2ctZHJhZ2dpbmciKSx0Ll90cmlnZ2VyKCJkcmFnU3RhcnQiLG4scihpKSl9LGRyYWc6ZnVuY3Rpb24oZSxuKXt0Ll90cmlnZ2VyKCJkcmFnIixlLHIobikpfSxzdG9wOmZ1bmN0aW9uKGkscyl7bi5wb3NpdGlvbj1bcy5wb3NpdGlvbi5sZWZ0LXQuZG9jdW1lbnQuc2Nyb2xsTGVmdCgpLHMucG9zaXRpb24udG9wLXQuZG9jdW1lbnQuc2Nyb2xsVG9wKCldLGUodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLHQuX3RyaWdnZXIoImRyYWdTdG9wIixpLHIocykpLGUudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKCl9fSl9LF9tYWtlUmVzaXphYmxlOmZ1bmN0aW9uKG4pe2Z1bmN0aW9uIHUoZSl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246ZS5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTplLm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjplLnBvc2l0aW9uLHNpemU6ZS5zaXplfX1uPW49PT10P3RoaXMub3B0aW9ucy5yZXNpemFibGU6bjt2YXIgcj10aGlzLGk9dGhpcy5vcHRpb25zLHM9dGhpcy51aURpYWxvZy5jc3MoInBvc2l0aW9uIiksbz10eXBlb2Ygbj09InN0cmluZyI/bjoibixlLHMsdyxzZSxzdyxuZSxudyI7dGhpcy51aURpYWxvZy5yZXNpemFibGUoe2NhbmNlbDoiLnVpLWRpYWxvZy1jb250ZW50Iixjb250YWlubWVudDoiZG9jdW1lbnQiLGFsc29SZXNpemU6dGhpcy5lbGVtZW50LG1heFdpZHRoOmkubWF4V2lkdGgsbWF4SGVpZ2h0OmkubWF4SGVpZ2h0LG1pbldpZHRoOmkubWluV2lkdGgsbWluSGVpZ2h0OnRoaXMuX21pbkhlaWdodCgpLGhhbmRsZXM6byxzdGFydDpmdW5jdGlvbih0LG4pe2UodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1yZXNpemluZyIpLHIuX3RyaWdnZXIoInJlc2l6ZVN0YXJ0Iix0LHUobikpfSxyZXNpemU6ZnVuY3Rpb24oZSx0KXtyLl90cmlnZ2VyKCJyZXNpemUiLGUsdSh0KSl9LHN0b3A6ZnVuY3Rpb24odCxuKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctcmVzaXppbmciKSxpLmhlaWdodD1lKHRoaXMpLmhlaWdodCgpLGkud2lkdGg9ZSh0aGlzKS53aWR0aCgpLHIuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLHQsdShuKSksZS51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKX19KS5jc3MoInBvc2l0aW9uIixzKS5maW5kKCIudWktcmVzaXphYmxlLXNlIikuYWRkQ2xhc3MoInVpLWljb24gdWktaWNvbi1ncmlwLWRpYWdvbmFsLXNlIil9LF9taW5IZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnM7cmV0dXJuIGUuaGVpZ2h0PT09ImF1dG8iP2UubWluSGVpZ2h0Ok1hdGgubWluKGUubWluSGVpZ2h0LGUuaGVpZ2h0KX0sX3Bvc2l0aW9uOmZ1bmN0aW9uKHQpe3ZhciBuPVtdLHI9WzAsMF0saTtpZih0KXtpZih0eXBlb2YgdD09InN0cmluZyJ8fHR5cGVvZiB0PT0ib2JqZWN0IiYmIjAiaW4gdCluPXQuc3BsaXQ/dC5zcGxpdCgiICIpOlt0WzBdLHRbMV1dLG4ubGVuZ3RoPT09MSYmKG5bMV09blswXSksZS5lYWNoKFsibGVmdCIsInRvcCJdLGZ1bmN0aW9uKGUsdCl7K25bZV09PT1uW2VdJiYocltlXT1uW2VdLG5bZV09dCl9KSx0PXtteTpuWzBdKyhyWzBdPDA/clswXToiKyIrclswXSkrIiAiK25bMV0rKHJbMV08MD9yWzFdOiIrIityWzFdKSxhdDpuLmpvaW4oIiAiKX07dD1lLmV4dGVuZCh7fSxlLnVpLmRpYWxvZy5wcm90b3R5cGUub3B0aW9ucy5wb3NpdGlvbix0KX1lbHNlIHQ9ZS51aS5kaWFsb2cucHJvdG90eXBlLm9wdGlvbnMucG9zaXRpb247aT10aGlzLnVpRGlhbG9nLmlzKCI6dmlzaWJsZSIpLGl8fHRoaXMudWlEaWFsb2cuc2hvdygpLHRoaXMudWlEaWFsb2cucG9zaXRpb24odCksaXx8dGhpcy51aURpYWxvZy5oaWRlKCl9LF9zZXRPcHRpb25zOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscz17fSxvPSExO2UuZWFjaCh0LGZ1bmN0aW9uKGUsdCl7bi5fc2V0T3B0aW9uKGUsdCksZSBpbiByJiYobz0hMCksZSBpbiBpJiYoc1tlXT10KX0pLG8mJnRoaXMuX3NpemUoKSx0aGlzLnVpRGlhbG9nLmlzKCI6ZGF0YShyZXNpemFibGUpIikmJnRoaXMudWlEaWFsb2cucmVzaXphYmxlKCJvcHRpb24iLHMpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQscil7dmFyIGkscyxvPXRoaXMudWlEaWFsb2c7c3dpdGNoKHQpe2Nhc2UiYnV0dG9ucyI6dGhpcy5fY3JlYXRlQnV0dG9ucyhyKTticmVhaztjYXNlImNsb3NlVGV4dCI6dGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2VUZXh0LnRleHQoIiIrcik7YnJlYWs7Y2FzZSJkaWFsb2dDbGFzcyI6by5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuZGlhbG9nQ2xhc3MpLmFkZENsYXNzKG4rcik7YnJlYWs7Y2FzZSJkaXNhYmxlZCI6cj9vLmFkZENsYXNzKCJ1aS1kaWFsb2ctZGlzYWJsZWQiKTpvLnJlbW92ZUNsYXNzKCJ1aS1kaWFsb2ctZGlzYWJsZWQiKTticmVhaztjYXNlImRyYWdnYWJsZSI6aT1vLmlzKCI6ZGF0YShkcmFnZ2FibGUpIiksaSYmIXImJm8uZHJhZ2dhYmxlKCJkZXN0cm95IiksIWkmJnImJnRoaXMuX21ha2VEcmFnZ2FibGUoKTticmVhaztjYXNlInBvc2l0aW9uIjp0aGlzLl9wb3NpdGlvbihyKTticmVhaztjYXNlInJlc2l6YWJsZSI6cz1vLmlzKCI6ZGF0YShyZXNpemFibGUpIikscyYmIXImJm8ucmVzaXphYmxlKCJkZXN0cm95IikscyYmdHlwZW9mIHI9PSJzdHJpbmciJiZvLnJlc2l6YWJsZSgib3B0aW9uIiwiaGFuZGxlcyIsciksIXMmJnIhPT0hMSYmdGhpcy5fbWFrZVJlc2l6YWJsZShyKTticmVhaztjYXNlInRpdGxlIjplKCIudWktZGlhbG9nLXRpdGxlIix0aGlzLnVpRGlhbG9nVGl0bGViYXIpLmh0bWwoIiIrKHJ8fCImIzE2MDsiKSl9dGhpcy5fc3VwZXIodCxyKX0sX3NpemU6ZnVuY3Rpb24oKXt2YXIgdCxuLHIsaT10aGlzLm9wdGlvbnMscz10aGlzLnVpRGlhbG9nLmlzKCI6dmlzaWJsZSIpO3RoaXMuZWxlbWVudC5zaG93KCkuY3NzKHt3aWR0aDoiYXV0byIsbWluSGVpZ2h0OjAsaGVpZ2h0OjB9KSxpLm1pbldpZHRoPmkud2lkdGgmJihpLndpZHRoPWkubWluV2lkdGgpLHQ9dGhpcy51aURpYWxvZy5jc3Moe2hlaWdodDoiYXV0byIsd2lkdGg6aS53aWR0aH0pLm91dGVySGVpZ2h0KCksbj1NYXRoLm1heCgwLGkubWluSGVpZ2h0LXQpLGkuaGVpZ2h0PT09ImF1dG8iP2Uuc3VwcG9ydC5taW5IZWlnaHQ/dGhpcy5lbGVtZW50LmNzcyh7bWluSGVpZ2h0Om4saGVpZ2h0OiJhdXRvIn0pOih0aGlzLnVpRGlhbG9nLnNob3coKSxyPXRoaXMuZWxlbWVudC5jc3MoImhlaWdodCIsImF1dG8iKS5oZWlnaHQoKSxzfHx0aGlzLnVpRGlhbG9nLmhpZGUoKSx0aGlzLmVsZW1lbnQuaGVpZ2h0KE1hdGgubWF4KHIsbikpKTp0aGlzLmVsZW1lbnQuaGVpZ2h0KE1hdGgubWF4KGkuaGVpZ2h0LXQsMCkpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIsIm1pbkhlaWdodCIsdGhpcy5fbWluSGVpZ2h0KCkpfX0pLGUuZXh0ZW5kKGUudWkuZGlhbG9nLHt1dWlkOjAsbWF4WjowLGdldFRpdGxlSWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyKCJpZCIpO3JldHVybiB0fHwodGhpcy51dWlkKz0xLHQ9dGhpcy51dWlkKSwidWktZGlhbG9nLXRpdGxlLSIrdH0sb3ZlcmxheTpmdW5jdGlvbih0KXt0aGlzLiRlbD1lLnVpLmRpYWxvZy5vdmVybGF5LmNyZWF0ZSh0KX19KSxlLmV4dGVuZChlLnVpLmRpYWxvZy5vdmVybGF5LHtpbnN0YW5jZXM6W10sb2xkSW5zdGFuY2VzOltdLG1heFo6MCxldmVudHM6ZS5tYXAoImZvY3VzLG1vdXNlZG93bixtb3VzZXVwLGtleWRvd24sa2V5cHJlc3MsY2xpY2siLnNwbGl0KCIsIiksZnVuY3Rpb24oZSl7cmV0dXJuIGUrIi5kaWFsb2ctb3ZlcmxheSJ9KS5qb2luKCIgIiksY3JlYXRlOmZ1bmN0aW9uKHQpe3RoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTAmJihzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS51aS5kaWFsb2cub3ZlcmxheS5pbnN0YW5jZXMubGVuZ3RoJiZlKGRvY3VtZW50KS5iaW5kKGUudWkuZGlhbG9nLm92ZXJsYXkuZXZlbnRzLGZ1bmN0aW9uKHQpe2lmKGUodC50YXJnZXQpLnpJbmRleCgpPGUudWkuZGlhbG9nLm92ZXJsYXkubWF4WilyZXR1cm4hMX0pfSwxKSxlKHdpbmRvdykuYmluZCgicmVzaXplLmRpYWxvZy1vdmVybGF5IixlLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSkpO3ZhciBuPXRoaXMub2xkSW5zdGFuY2VzLnBvcCgpfHxlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS13aWRnZXQtb3ZlcmxheSIpO3JldHVybiBlKGRvY3VtZW50KS5iaW5kKCJrZXlkb3duLmRpYWxvZy1vdmVybGF5IixmdW5jdGlvbihyKXt2YXIgaT1lLnVpLmRpYWxvZy5vdmVybGF5Lmluc3RhbmNlcztpLmxlbmd0aCE9PTAmJmlbaS5sZW5ndGgtMV09PT1uJiZ0Lm9wdGlvbnMuY2xvc2VPbkVzY2FwZSYmIXIuaXNEZWZhdWx0UHJldmVudGVkKCkmJnIua2V5Q29kZSYmci5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSYmKHQuY2xvc2Uociksci5wcmV2ZW50RGVmYXVsdCgpKX0pLG4uYXBwZW5kVG8oZG9jdW1lbnQuYm9keSkuY3NzKHt3aWR0aDp0aGlzLndpZHRoKCksaGVpZ2h0OnRoaXMuaGVpZ2h0KCl9KSxlLmZuLmJnaWZyYW1lJiZuLmJnaWZyYW1lKCksdGhpcy5pbnN0YW5jZXMucHVzaChuKSxufSxkZXN0cm95OmZ1bmN0aW9uKHQpe3ZhciBuPWUuaW5BcnJheSh0LHRoaXMuaW5zdGFuY2VzKSxyPTA7biE9PS0xJiZ0aGlzLm9sZEluc3RhbmNlcy5wdXNoKHRoaXMuaW5zdGFuY2VzLnNwbGljZShuLDEpWzBdKSx0aGlzLmluc3RhbmNlcy5sZW5ndGg9PT0wJiZlKFtkb2N1bWVudCx3aW5kb3ddKS51bmJpbmQoIi5kaWFsb2ctb3ZlcmxheSIpLHQuaGVpZ2h0KDApLndpZHRoKDApLnJlbW92ZSgpLGUuZWFjaCh0aGlzLmluc3RhbmNlcyxmdW5jdGlvbigpe3I9TWF0aC5tYXgocix0aGlzLmNzcygiei1pbmRleCIpKX0pLHRoaXMubWF4Wj1yfSxoZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBlLnVpLmllPyh0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQpLG49TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCksdDxuP2Uod2luZG93KS5oZWlnaHQoKSsicHgiOnQrInB4Iik6ZShkb2N1bWVudCkuaGVpZ2h0KCkrInB4In0sd2lkdGg6ZnVuY3Rpb24oKXt2YXIgdCxuO3JldHVybiBlLnVpLmllPyh0PU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxXaWR0aCxkb2N1bWVudC5ib2R5LnNjcm9sbFdpZHRoKSxuPU1hdGgubWF4KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCxkb2N1bWVudC5ib2R5Lm9mZnNldFdpZHRoKSx0PG4/ZSh3aW5kb3cpLndpZHRoKCkrInB4Ijp0KyJweCIpOmUoZG9jdW1lbnQpLndpZHRoKCkrInB4In0scmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9ZShbXSk7ZS5lYWNoKGUudWkuZGlhbG9nLm92ZXJsYXkuaW5zdGFuY2VzLGZ1bmN0aW9uKCl7dD10LmFkZCh0aGlzKX0pLHQuY3NzKHt3aWR0aDowLGhlaWdodDowfSkuY3NzKHt3aWR0aDplLnVpLmRpYWxvZy5vdmVybGF5LndpZHRoKCksaGVpZ2h0OmUudWkuZGlhbG9nLm92ZXJsYXkuaGVpZ2h0KCl9KX19KSxlLmV4dGVuZChlLnVpLmRpYWxvZy5vdmVybGF5LnByb3RvdHlwZSx7ZGVzdHJveTpmdW5jdGlvbigpe2UudWkuZGlhbG9nLm92ZXJsYXkuZGVzdHJveSh0aGlzLiRlbCl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPSExO2Uud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS45LjIiLGRlZmF1bHRFbGVtZW50OiI8dWw+IixkZWxheTozMDAsb3B0aW9uczp7aWNvbnM6e3N1Ym1lbnU6InVpLWljb24tY2FyYXQtMS1lIn0sbWVudXM6InVsIixwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoicmlnaHQgdG9wIn0scm9sZToibWVudSIsYmx1cjpudWxsLGZvY3VzOm51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmFjdGl2ZU1lbnU9dGhpcy5lbGVtZW50LHRoaXMuZWxlbWVudC51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLW1lbnUtaWNvbnMiLCEhdGhpcy5lbGVtZW50LmZpbmQoIi51aS1pY29uIikubGVuZ3RoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLHRhYkluZGV4OjB9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxlLnByb3h5KGZ1bmN0aW9uKGUpe3RoaXMub3B0aW9ucy5kaXNhYmxlZCYmZS5wcmV2ZW50RGVmYXVsdCgpfSx0aGlzKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLl9vbih7Im1vdXNlZG93biAudWktbWVudS1pdGVtID4gYSI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSwiY2xpY2sgLnVpLXN0YXRlLWRpc2FibGVkID4gYSI6ZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSwiY2xpY2sgLnVpLW1lbnUtaXRlbTpoYXMoYSkiOmZ1bmN0aW9uKHQpe3ZhciByPWUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTshbiYmci5ub3QoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmxlbmd0aCYmKG49ITAsdGhpcy5zZWxlY3QodCksci5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKHQpOnRoaXMuZWxlbWVudC5pcygiOmZvY3VzIil8fCh0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnRzKCIudWktbWVudSIpLmxlbmd0aD09PTEmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbih0KXt2YXIgbj1lKHQuY3VycmVudFRhcmdldCk7bi5zaWJsaW5ncygpLmNoaWxkcmVuKCIudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuZm9jdXModCxuKX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmVxKDApO3R8fHRoaXMuZm9jdXMoZSxuKX0sYmx1cjpmdW5jdGlvbih0KXt0aGlzLl9kZWxheShmdW5jdGlvbigpe2UuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCl8fHRoaXMuY29sbGFwc2VBbGwodCl9KX0sa2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24odCl7ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGh8fHRoaXMuY29sbGFwc2VBbGwodCksbj0hMX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXJpYS1hY3RpdmVkZXNjZW5kYW50IikuZmluZCgiLnVpLW1lbnUiKS5hbmRTZWxmKCkucmVtb3ZlQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktbWVudS1pY29ucyIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVVbmlxdWVJZCgpLnNob3coKSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtaXRlbSIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWl0ZW0iKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpLmNoaWxkcmVuKCJhIikucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCB1aS1zdGF0ZS1ob3ZlciIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtaGFzcG9wdXAiKS5jaGlsZHJlbigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IikmJnQucmVtb3ZlKCl9KSx0aGlzLmVsZW1lbnQuZmluZCgiLnVpLW1lbnUtZGl2aWRlciIpLnJlbW92ZUNsYXNzKCJ1aS1tZW51LWRpdmlkZXIgdWktd2lkZ2V0LWNvbnRlbnQiKX0sX2tleWRvd246ZnVuY3Rpb24odCl7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIil9dmFyIG4scixpLHMsbyx1PSEwO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6dGhpcy5wcmV2aW91c1BhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9ET1dOOnRoaXMubmV4dFBhZ2UodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTp0aGlzLl9tb3ZlKCJmaXJzdCIsImZpcnN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6dGhpcy5fbW92ZSgibGFzdCIsImxhc3QiLHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOnRoaXMucHJldmlvdXModCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjp0aGlzLm5leHQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDp0aGlzLmNvbGxhcHNlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlJJR0hUOnRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpJiZ0aGlzLmV4cGFuZCh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTlRFUjpjYXNlIGUudWkua2V5Q29kZS5TUEFDRTp0aGlzLl9hY3RpdmF0ZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FU0NBUEU6dGhpcy5jb2xsYXBzZSh0KTticmVhaztkZWZhdWx0OnU9ITEscj10aGlzLnByZXZpb3VzRmlsdGVyfHwiIixpPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxzPSExLGNsZWFyVGltZW91dCh0aGlzLmZpbHRlclRpbWVyKSxpPT09cj9zPSEwOmk9citpLG89bmV3IFJlZ0V4cCgiXiIrYShpKSwiaSIpLG49dGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIG8udGVzdChlKHRoaXMpLmNoaWxkcmVuKCJhIikudGV4dCgpKX0pLG49cyYmbi5pbmRleCh0aGlzLmFjdGl2ZS5uZXh0KCkpIT09LTE/dGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpOm4sbi5sZW5ndGh8fChpPVN0cmluZy5mcm9tQ2hhckNvZGUodC5rZXlDb2RlKSxvPW5ldyBSZWdFeHAoIl4iK2EoaSksImkiKSxuPXRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBvLnRlc3QoZSh0aGlzKS5jaGlsZHJlbigiYSIpLnRleHQoKSl9KSksbi5sZW5ndGg/KHRoaXMuZm9jdXModCxuKSxuLmxlbmd0aD4xPyh0aGlzLnByZXZpb3VzRmlsdGVyPWksdGhpcy5maWx0ZXJUaW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfSwxZTMpKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcik6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9dSYmdC5wcmV2ZW50RGVmYXVsdCgpfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmUuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpfHwodGhpcy5hY3RpdmUuY2hpbGRyZW4oImFbYXJpYS1oYXNwb3B1cD0ndHJ1ZSddIikubGVuZ3RoP3RoaXMuZXhwYW5kKGUpOnRoaXMuc2VsZWN0KGUpKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0LG49dGhpcy5vcHRpb25zLmljb25zLnN1Ym1lbnUscj10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMubWVudXMpO3IuZmlsdGVyKCI6bm90KC51aS1tZW51KSIpLmFkZENsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuaGlkZSgpLmF0dHIoe3JvbGU6dGhpcy5vcHRpb25zLnJvbGUsImFyaWEtaGlkZGVuIjoidHJ1ZSIsImFyaWEtZXhwYW5kZWQiOiJmYWxzZSJ9KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxyPXQucHJldigiYSIpLGk9ZSgiPHNwYW4+IikuYWRkQ2xhc3MoInVpLW1lbnUtaWNvbiB1aS1pY29uICIrbikuZGF0YSgidWktbWVudS1zdWJtZW51LWNhcmF0IiwhMCk7ci5hdHRyKCJhcmlhLWhhc3BvcHVwIiwidHJ1ZSIpLnByZXBlbmQoaSksdC5hdHRyKCJhcmlhLWxhYmVsbGVkYnkiLHIuYXR0cigiaWQiKSl9KSx0PXIuYWRkKHRoaXMuZWxlbWVudCksdC5jaGlsZHJlbigiOm5vdCgudWktbWVudS1pdGVtKTpoYXMoYSkiKS5hZGRDbGFzcygidWktbWVudS1pdGVtIikuYXR0cigicm9sZSIsInByZXNlbnRhdGlvbiIpLmNoaWxkcmVuKCJhIikudW5pcXVlSWQoKS5hZGRDbGFzcygidWktY29ybmVyLWFsbCIpLmF0dHIoe3RhYkluZGV4Oi0xLHJvbGU6dGhpcy5faXRlbVJvbGUoKX0pLHQuY2hpbGRyZW4oIjpub3QoLnVpLW1lbnUtaXRlbSkiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTsvW15cLeKAlOKAk1xzXS8udGVzdCh0LnRleHQoKSl8fHQuYWRkQ2xhc3MoInVpLXdpZGdldC1jb250ZW50IHVpLW1lbnUtZGl2aWRlciIpfSksdC5jaGlsZHJlbigiLnVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKSx0aGlzLmFjdGl2ZSYmIWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuYWN0aXZlWzBdKSYmdGhpcy5ibHVyKCl9LF9pdGVtUm9sZTpmdW5jdGlvbigpe3JldHVybnttZW51OiJtZW51aXRlbSIsbGlzdGJveDoib3B0aW9uIn1bdGhpcy5vcHRpb25zLnJvbGVdfSxmb2N1czpmdW5jdGlvbihlLHQpe3ZhciBuLHI7dGhpcy5ibHVyKGUsZSYmZS50eXBlPT09ImZvY3VzIiksdGhpcy5fc2Nyb2xsSW50b1ZpZXcodCksdGhpcy5hY3RpdmU9dC5maXJzdCgpLHI9dGhpcy5hY3RpdmUuY2hpbGRyZW4oImEiKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsci5hdHRyKCJpZCIpKSx0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikuY2hpbGRyZW4oImE6Zmlyc3QiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksZSYmZS50eXBlPT09ImtleWRvd24iP3RoaXMuX2Nsb3NlKCk6dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCl9LHRoaXMuZGVsYXkpLG49dC5jaGlsZHJlbigiLnVpLW1lbnUiKSxuLmxlbmd0aCYmL15tb3VzZS8udGVzdChlLnR5cGUpJiZ0aGlzLl9zdGFydE9wZW5pbmcobiksdGhpcy5hY3RpdmVNZW51PXQucGFyZW50KCksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLGUse2l0ZW06dH0pfSxfc2Nyb2xsSW50b1ZpZXc6ZnVuY3Rpb24odCl7dmFyIG4scixpLHMsbyx1O3RoaXMuX2hhc1Njcm9sbCgpJiYobj1wYXJzZUZsb2F0KGUuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAscj1wYXJzZUZsb2F0KGUuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwicGFkZGluZ1RvcCIpKXx8MCxpPXQub2Zmc2V0KCkudG9wLXRoaXMuYWN0aXZlTWVudS5vZmZzZXQoKS50b3Atbi1yLHM9dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcCgpLG89dGhpcy5hY3RpdmVNZW51LmhlaWdodCgpLHU9dC5oZWlnaHQoKSxpPDA/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChzK2kpOmkrdT5vJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKHMraS1vK3UpKX0sYmx1cjpmdW5jdGlvbihlLHQpe3R8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtpZighdGhpcy5hY3RpdmUpcmV0dXJuO3RoaXMuYWN0aXZlLmNoaWxkcmVuKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksdGhpcy5hY3RpdmU9bnVsbCx0aGlzLl90cmlnZ2VyKCJibHVyIixlLHtpdGVtOnRoaXMuYWN0aXZlfSl9LF9zdGFydE9wZW5pbmc6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO2lmKGUuYXR0cigiYXJpYS1oaWRkZW4iKSE9PSJ0cnVlIilyZXR1cm47dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCksdGhpcy5fb3BlbihlKX0sdGhpcy5kZWxheSl9LF9vcGVuOmZ1bmN0aW9uKHQpe3ZhciBuPWUuZXh0ZW5kKHtvZjp0aGlzLmFjdGl2ZX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51Iikubm90KHQucGFyZW50cygiLnVpLW1lbnUiKSkuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLHQuc2hvdygpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikuYXR0cigiYXJpYS1leHBhbmRlZCIsInRydWUiKS5wb3NpdGlvbihuKX0sY29sbGFwc2VBbGw6ZnVuY3Rpb24odCxuKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciByPW4/dGhpcy5lbGVtZW50OmUodCYmdC50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51IikpO3IubGVuZ3RofHwocj10aGlzLmVsZW1lbnQpLHRoaXMuX2Nsb3NlKHIpLHRoaXMuYmx1cih0KSx0aGlzLmFjdGl2ZU1lbnU9cn0sdGhpcy5kZWxheSl9LF9jbG9zZTpmdW5jdGlvbihlKXtlfHwoZT10aGlzLmFjdGl2ZT90aGlzLmFjdGl2ZS5wYXJlbnQoKTp0aGlzLmVsZW1lbnQpLGUuZmluZCgiLnVpLW1lbnUiKS5oaWRlKCkuYXR0cigiYXJpYS1oaWRkZW4iLCJ0cnVlIikuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIikuZW5kKCkuZmluZCgiYS51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIil9LGNvbGxhcHNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIix0aGlzLmVsZW1lbnQpO3QmJnQubGVuZ3RoJiYodGhpcy5fY2xvc2UoKSx0aGlzLmZvY3VzKGUsdCkpfSxleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktbWVudSAiKS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpcnN0KCk7dCYmdC5sZW5ndGgmJih0aGlzLl9vcGVuKHQucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyhlLHQpfSkpfSxuZXh0OmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoIm5leHQiLCJmaXJzdCIsZSl9LHByZXZpb3VzOmZ1bmN0aW9uKGUpe3RoaXMuX21vdmUoInByZXYiLCJsYXN0IixlKX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3RoaXMuYWN0aXZlJiYoZT09PSJmaXJzdCJ8fGU9PT0ibGFzdCI/cj10aGlzLmFjdGl2ZVtlPT09ImZpcnN0Ij8icHJldkFsbCI6Im5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKTpyPXRoaXMuYWN0aXZlW2UrIkFsbCJdKCIudWktbWVudS1pdGVtIikuZXEoMCkpO2lmKCFyfHwhci5sZW5ndGh8fCF0aGlzLmFjdGl2ZSlyPXRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpW3RdKCk7dGhpcy5mb2N1cyhuLHIpfSxuZXh0UGFnZTpmdW5jdGlvbih0KXt2YXIgbixyLGk7aWYoIXRoaXMuYWN0aXZlKXt0aGlzLm5leHQodCk7cmV0dXJufWlmKHRoaXMuaXNMYXN0SXRlbSgpKXJldHVybjt0aGlzLl9oYXNTY3JvbGwoKT8ocj10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsaT10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gbj1lKHRoaXMpLG4ub2Zmc2V0KCkudG9wLXItaTwwfSksdGhpcy5mb2N1cyh0LG4pKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIilbdGhpcy5hY3RpdmU/Imxhc3QiOiJmaXJzdCJdKCkpfSxwcmV2aW91c1BhZ2U6ZnVuY3Rpb24odCl7dmFyIG4scixpO2lmKCF0aGlzLmFjdGl2ZSl7dGhpcy5uZXh0KHQpO3JldHVybn1pZih0aGlzLmlzRmlyc3RJdGVtKCkpcmV0dXJuO3RoaXMuX2hhc1Njcm9sbCgpPyhyPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxpPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBuPWUodGhpcyksbi5vZmZzZXQoKS50b3AtcitpPjB9KSx0aGlzLmZvY3VzKHQsbikpOnRoaXMuZm9jdXModCx0aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maXJzdCgpKX0sX2hhc1Njcm9sbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKTx0aGlzLmVsZW1lbnQucHJvcCgic2Nyb2xsSGVpZ2h0Iil9LHNlbGVjdDpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZT10aGlzLmFjdGl2ZXx8ZSh0LnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpO3ZhciBuPXtpdGVtOnRoaXMuYWN0aXZlfTt0aGlzLmFjdGl2ZS5oYXMoIi51aS1tZW51IikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKHQsITApLHRoaXMuX3RyaWdnZXIoInNlbGVjdCIsdCxuKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLnByb2dyZXNzYmFyIix7dmVyc2lvbjoiMS45LjIiLG9wdGlvbnM6e3ZhbHVlOjAsbWF4OjEwMH0sbWluOjAsX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hZGRDbGFzcygidWktcHJvZ3Jlc3NiYXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5hdHRyKHtyb2xlOiJwcm9ncmVzc2JhciIsImFyaWEtdmFsdWVtaW4iOnRoaXMubWluLCJhcmlhLXZhbHVlbWF4Ijp0aGlzLm9wdGlvbnMubWF4LCJhcmlhLXZhbHVlbm93Ijp0aGlzLl92YWx1ZSgpfSksdGhpcy52YWx1ZURpdj1lKCI8ZGl2IGNsYXNzPSd1aS1wcm9ncmVzc2Jhci12YWx1ZSB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1sZWZ0Jz48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLHRoaXMub2xkVmFsdWU9dGhpcy5fdmFsdWUoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtaW4iKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWF4IikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLHRoaXMudmFsdWVEaXYucmVtb3ZlKCl9LHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dD90aGlzLl92YWx1ZSgpOih0aGlzLl9zZXRPcHRpb24oInZhbHVlIixlKSx0aGlzKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2U9PT0idmFsdWUiJiYodGhpcy5vcHRpb25zLnZhbHVlPXQsdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fdmFsdWUoKT09PXRoaXMub3B0aW9ucy5tYXgmJnRoaXMuX3RyaWdnZXIoImNvbXBsZXRlIikpLHRoaXMuX3N1cGVyKGUsdCl9LF92YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy52YWx1ZTtyZXR1cm4gdHlwZW9mIGUhPSJudW1iZXIiJiYoZT0wKSxNYXRoLm1pbih0aGlzLm9wdGlvbnMubWF4LE1hdGgubWF4KHRoaXMubWluLGUpKX0sX3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gMTAwKnRoaXMuX3ZhbHVlKCkvdGhpcy5vcHRpb25zLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMudmFsdWUoKSx0PXRoaXMuX3BlcmNlbnRhZ2UoKTt0aGlzLm9sZFZhbHVlIT09ZSYmKHRoaXMub2xkVmFsdWU9ZSx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiKSksdGhpcy52YWx1ZURpdi50b2dnbGUoZT50aGlzLm1pbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1yaWdodCIsZT09PXRoaXMub3B0aW9ucy5tYXgpLndpZHRoKHQudG9GaXhlZCgwKSsiJSIpLHRoaXMuZWxlbWVudC5hdHRyKCJhcmlhLXZhbHVlbm93IixlKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49NTtlLndpZGdldCgidWkuc2xpZGVyIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMiIsd2lkZ2V0RXZlbnRQcmVmaXg6InNsaWRlIixvcHRpb25zOnthbmltYXRlOiExLGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxyLGk9dGhpcy5vcHRpb25zLHM9dGhpcy5lbGVtZW50LmZpbmQoIi51aS1zbGlkZXItaGFuZGxlIikuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLG89IjxhIGNsYXNzPSd1aS1zbGlkZXItaGFuZGxlIHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCcgaHJlZj0nIyc+PC9hPiIsdT1bXTt0aGlzLl9rZXlTbGlkaW5nPSExLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKyIgdWktd2lkZ2V0IisiIHVpLXdpZGdldC1jb250ZW50IisiIHVpLWNvcm5lci1hbGwiKyhpLmRpc2FibGVkPyIgdWktc2xpZGVyLWRpc2FibGVkIHVpLWRpc2FibGVkIjoiIikpLHRoaXMucmFuZ2U9ZShbXSksaS5yYW5nZSYmKGkucmFuZ2U9PT0hMCYmKGkudmFsdWVzfHwoaS52YWx1ZXM9W3RoaXMuX3ZhbHVlTWluKCksdGhpcy5fdmFsdWVNaW4oKV0pLGkudmFsdWVzLmxlbmd0aCYmaS52YWx1ZXMubGVuZ3RoIT09MiYmKGkudmFsdWVzPVtpLnZhbHVlc1swXSxpLnZhbHVlc1swXV0pKSx0aGlzLnJhbmdlPWUoIjxkaXY+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktc2xpZGVyLXJhbmdlIHVpLXdpZGdldC1oZWFkZXIiKyhpLnJhbmdlPT09Im1pbiJ8fGkucmFuZ2U9PT0ibWF4Ij8iIHVpLXNsaWRlci1yYW5nZS0iK2kucmFuZ2U6IiIpKSkscj1pLnZhbHVlcyYmaS52YWx1ZXMubGVuZ3RofHwxO2Zvcih0PXMubGVuZ3RoO3Q8cjt0KyspdS5wdXNoKG8pO3RoaXMuaGFuZGxlcz1zLmFkZChlKHUuam9pbigiIikpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCkpLHRoaXMuaGFuZGxlPXRoaXMuaGFuZGxlcy5lcSgwKSx0aGlzLmhhbmRsZXMuYWRkKHRoaXMucmFuZ2UpLmZpbHRlcigiYSIpLmNsaWNrKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0pLm1vdXNlZW50ZXIoZnVuY3Rpb24oKXtpLmRpc2FibGVkfHxlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9KS5mb2N1cyhmdW5jdGlvbigpe2kuZGlzYWJsZWQ/ZSh0aGlzKS5ibHVyKCk6KGUoIi51aS1zbGlkZXIgLnVpLXN0YXRlLWZvY3VzIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKSl9KS5ibHVyKGZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0pLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHQpe2UodGhpcykuZGF0YSgidWktc2xpZGVyLWhhbmRsZS1pbmRleCIsdCl9KSx0aGlzLl9vbih0aGlzLmhhbmRsZXMse2tleWRvd246ZnVuY3Rpb24odCl7dmFyIHIsaSxzLG8sdT1lKHQudGFyZ2V0KS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4Iik7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpjYXNlIGUudWkua2V5Q29kZS5FTkQ6Y2FzZSBlLnVpLmtleUNvZGUuUEFHRV9VUDpjYXNlIGUudWkua2V5Q29kZS5QQUdFX0RPV046Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjpjYXNlIGUudWkua2V5Q29kZS5MRUZUOnQucHJldmVudERlZmF1bHQoKTtpZighdGhpcy5fa2V5U2xpZGluZyl7dGhpcy5fa2V5U2xpZGluZz0hMCxlKHQudGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikscj10aGlzLl9zdGFydCh0LHUpO2lmKHI9PT0hMSlyZXR1cm59fW89dGhpcy5vcHRpb25zLnN0ZXAsdGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/aT1zPXRoaXMudmFsdWVzKHUpOmk9cz10aGlzLnZhbHVlKCk7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpzPXRoaXMuX3ZhbHVlTWluKCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnM9dGhpcy5fdmFsdWVNYXgoKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnM9dGhpcy5fdHJpbUFsaWduVmFsdWUoaSsodGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS9uKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5QQUdFX0RPV046cz10aGlzLl90cmltQWxpZ25WYWx1ZShpLSh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL24pO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlVQOmNhc2UgZS51aS5rZXlDb2RlLlJJR0hUOmlmKGk9PT10aGlzLl92YWx1ZU1heCgpKXJldHVybjtzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGkrbyk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjpjYXNlIGUudWkua2V5Q29kZS5MRUZUOmlmKGk9PT10aGlzLl92YWx1ZU1pbigpKXJldHVybjtzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGktbyl9dGhpcy5fc2xpZGUodCx1LHMpfSxrZXl1cDpmdW5jdGlvbih0KXt2YXIgbj1lKHQudGFyZ2V0KS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4Iik7dGhpcy5fa2V5U2xpZGluZyYmKHRoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fc3RvcCh0LG4pLHRoaXMuX2NoYW5nZSh0LG4pLGUodC50YXJnZXQpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSl9fSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXMucmVtb3ZlKCksdGhpcy5yYW5nZS5yZW1vdmUoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNsaWRlciB1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwgdWktc2xpZGVyLWRpc2FibGVkIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24odCl7dmFyIG4scixpLHMsbyx1LGEsZixsPXRoaXMsYz10aGlzLm9wdGlvbnM7cmV0dXJuIGMuZGlzYWJsZWQ/ITE6KHRoaXMuZWxlbWVudFNpemU9e3dpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpfSx0aGlzLmVsZW1lbnRPZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLG49e3g6dC5wYWdlWCx5OnQucGFnZVl9LHI9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKG4pLGk9dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKzEsdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24odCl7dmFyIG49TWF0aC5hYnMoci1sLnZhbHVlcyh0KSk7aT5uJiYoaT1uLHM9ZSh0aGlzKSxvPXQpfSksYy5yYW5nZT09PSEwJiZ0aGlzLnZhbHVlcygxKT09PWMubWluJiYobys9MSxzPWUodGhpcy5oYW5kbGVzW29dKSksdT10aGlzLl9zdGFydCh0LG8pLHU9PT0hMT8hMToodGhpcy5fbW91c2VTbGlkaW5nPSEwLHRoaXMuX2hhbmRsZUluZGV4PW8scy5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuZm9jdXMoKSxhPXMub2Zmc2V0KCksZj0hZSh0LnRhcmdldCkucGFyZW50cygpLmFuZFNlbGYoKS5pcygiLnVpLXNsaWRlci1oYW5kbGUiKSx0aGlzLl9jbGlja09mZnNldD1mP3tsZWZ0OjAsdG9wOjB9OntsZWZ0OnQucGFnZVgtYS5sZWZ0LXMud2lkdGgoKS8yLHRvcDp0LnBhZ2VZLWEudG9wLXMuaGVpZ2h0KCkvMi0ocGFyc2VJbnQocy5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQocy5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQocy5jc3MoIm1hcmdpblRvcCIpLDEwKXx8MCl9LHRoaXMuaGFuZGxlcy5oYXNDbGFzcygidWktc3RhdGUtaG92ZXIiKXx8dGhpcy5fc2xpZGUodCxvLHIpLHRoaXMuX2FuaW1hdGVPZmY9ITAsITApKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgdD17eDplLnBhZ2VYLHk6ZS5wYWdlWX0sbj10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UodCk7cmV0dXJuIHRoaXMuX3NsaWRlKGUsdGhpcy5faGFuZGxlSW5kZXgsbiksITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuaGFuZGxlcy5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX3N0b3AoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5fY2hhbmdlKGUsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2hhbmRsZUluZGV4PW51bGwsdGhpcy5fY2xpY2tPZmZzZXQ9bnVsbCx0aGlzLl9hbmltYXRlT2ZmPSExLCExfSxfZGV0ZWN0T3JpZW50YXRpb246ZnVuY3Rpb24oKXt0aGlzLm9yaWVudGF0aW9uPXRoaXMub3B0aW9ucy5vcmllbnRhdGlvbj09PSJ2ZXJ0aWNhbCI/InZlcnRpY2FsIjoiaG9yaXpvbnRhbCJ9LF9ub3JtVmFsdWVGcm9tTW91c2U6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGkscztyZXR1cm4gdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8odD10aGlzLmVsZW1lbnRTaXplLndpZHRoLG49ZS54LXRoaXMuZWxlbWVudE9mZnNldC5sZWZ0LSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC5sZWZ0OjApKToodD10aGlzLmVsZW1lbnRTaXplLmhlaWdodCxuPWUueS10aGlzLmVsZW1lbnRPZmZzZXQudG9wLSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC50b3A6MCkpLHI9bi90LHI+MSYmKHI9MSkscjwwJiYocj0wKSx0aGlzLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIiYmKHI9MS1yKSxpPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSxzPXRoaXMuX3ZhbHVlTWluKCkrcippLHRoaXMuX3RyaW1BbGlnblZhbHVlKHMpfSxfc3RhcnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKG4udmFsdWU9dGhpcy52YWx1ZXModCksbi52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLGUsbil9LF9zbGlkZTpmdW5jdGlvbihlLHQsbil7dmFyIHIsaSxzO3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoPyhyPXRoaXMudmFsdWVzKHQ/MDoxKSx0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD09PTImJnRoaXMub3B0aW9ucy5yYW5nZT09PSEwJiYodD09PTAmJm4+cnx8dD09PTEmJm48cikmJihuPXIpLG4hPT10aGlzLnZhbHVlcyh0KSYmKGk9dGhpcy52YWx1ZXMoKSxpW3RdPW4scz10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTpuLHZhbHVlczppfSkscj10aGlzLnZhbHVlcyh0PzA6MSkscyE9PSExJiZ0aGlzLnZhbHVlcyh0LG4sITApKSk6biE9PXRoaXMudmFsdWUoKSYmKHM9dGhpcy5fdHJpZ2dlcigic2xpZGUiLGUse2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0sdmFsdWU6bn0pLHMhPT0hMSYmdGhpcy52YWx1ZShuKSl9LF9zdG9wOmZ1bmN0aW9uKGUsdCl7dmFyIG49e2hhbmRsZTp0aGlzLmhhbmRsZXNbdF0sdmFsdWU6dGhpcy52YWx1ZSgpfTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKG4udmFsdWU9dGhpcy52YWx1ZXModCksbi52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigic3RvcCIsZSxuKX0sX2NoYW5nZTpmdW5jdGlvbihlLHQpe2lmKCF0aGlzLl9rZXlTbGlkaW5nJiYhdGhpcy5fbW91c2VTbGlkaW5nKXt2YXIgbj17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUsbil9fSx2YWx1ZTpmdW5jdGlvbihlKXtpZihhcmd1bWVudHMubGVuZ3RoKXt0aGlzLm9wdGlvbnMudmFsdWU9dGhpcy5fdHJpbUFsaWduVmFsdWUoZSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsMCk7cmV0dXJufXJldHVybiB0aGlzLl92YWx1ZSgpfSx2YWx1ZXM6ZnVuY3Rpb24odCxuKXt2YXIgcixpLHM7aWYoYXJndW1lbnRzLmxlbmd0aD4xKXt0aGlzLm9wdGlvbnMudmFsdWVzW3RdPXRoaXMuX3RyaW1BbGlnblZhbHVlKG4pLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLHQpO3JldHVybn1pZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fdmFsdWVzKCk7aWYoIWUuaXNBcnJheShhcmd1bWVudHNbMF0pKXJldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLl92YWx1ZXModCk6dGhpcy52YWx1ZSgpO3I9dGhpcy5vcHRpb25zLnZhbHVlcyxpPWFyZ3VtZW50c1swXTtmb3Iocz0wO3M8ci5sZW5ndGg7cys9MSlyW3NdPXRoaXMuX3RyaW1BbGlnblZhbHVlKGlbc10pLHRoaXMuX2NoYW5nZShudWxsLHMpO3RoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsbil7dmFyIHIsaT0wO2UuaXNBcnJheSh0aGlzLm9wdGlvbnMudmFsdWVzKSYmKGk9dGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgpLGUuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtzd2l0Y2godCl7Y2FzZSJkaXNhYmxlZCI6bj8odGhpcy5oYW5kbGVzLmZpbHRlcigiLnVpLXN0YXRlLWZvY3VzIikuYmx1cigpLHRoaXMuaGFuZGxlcy5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmhhbmRsZXMucHJvcCgiZGlzYWJsZWQiLCEwKSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRpc2FibGVkIikpOih0aGlzLmhhbmRsZXMucHJvcCgiZGlzYWJsZWQiLCExKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRpc2FibGVkIikpO2JyZWFrO2Nhc2Uib3JpZW50YXRpb24iOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwiKS5hZGRDbGFzcygidWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCk7YnJlYWs7Y2FzZSJ2YWx1ZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UidmFsdWVzIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpO2ZvcihyPTA7cjxpO3IrPTEpdGhpcy5fY2hhbmdlKG51bGwscik7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fYW5pbWF0ZU9mZj0hMX19LF92YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy52YWx1ZTtyZXR1cm4gZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKSxlfSxfdmFsdWVzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scjtpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0PXRoaXMub3B0aW9ucy52YWx1ZXNbZV0sdD10aGlzLl90cmltQWxpZ25WYWx1ZSh0KSx0O249dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpO2ZvcihyPTA7cjxuLmxlbmd0aDtyKz0xKW5bcl09dGhpcy5fdHJpbUFsaWduVmFsdWUobltyXSk7cmV0dXJuIG59LF90cmltQWxpZ25WYWx1ZTpmdW5jdGlvbihlKXtpZihlPD10aGlzLl92YWx1ZU1pbigpKXJldHVybiB0aGlzLl92YWx1ZU1pbigpO2lmKGU+PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWF4KCk7dmFyIHQ9dGhpcy5vcHRpb25zLnN0ZXA+MD90aGlzLm9wdGlvbnMuc3RlcDoxLG49KGUtdGhpcy5fdmFsdWVNaW4oKSkldCxyPWUtbjtyZXR1cm4gTWF0aC5hYnMobikqMj49dCYmKHIrPW4+MD90Oi10KSxwYXJzZUZsb2F0KHIudG9GaXhlZCg1KSl9LF92YWx1ZU1pbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWlufSxfdmFsdWVNYXg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vcHRpb25zLm1heH0sX3JlZnJlc2hWYWx1ZTpmdW5jdGlvbigpe3ZhciB0LG4scixpLHMsbz10aGlzLm9wdGlvbnMucmFuZ2UsdT10aGlzLm9wdGlvbnMsYT10aGlzLGY9dGhpcy5fYW5pbWF0ZU9mZj8hMTp1LmFuaW1hdGUsbD17fTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD90aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihyKXtuPShhLnZhbHVlcyhyKS1hLl92YWx1ZU1pbigpKS8oYS5fdmFsdWVNYXgoKS1hLl92YWx1ZU1pbigpKSoxMDAsbFthLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyJsZWZ0IjoiYm90dG9tIl09bisiJSIsZSh0aGlzKS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKGwsdS5hbmltYXRlKSxhLm9wdGlvbnMucmFuZ2U9PT0hMCYmKGEub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/KHI9PT0wJiZhLnJhbmdlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0oe2xlZnQ6bisiJSJ9LHUuYW5pbWF0ZSkscj09PTEmJmEucmFuZ2VbZj8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDpuLXQrIiUifSx7cXVldWU6ITEsZHVyYXRpb246dS5hbmltYXRlfSkpOihyPT09MCYmYS5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHtib3R0b206bisiJSJ9LHUuYW5pbWF0ZSkscj09PTEmJmEucmFuZ2VbZj8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6bi10KyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pKSksdD1ufSk6KHI9dGhpcy52YWx1ZSgpLGk9dGhpcy5fdmFsdWVNaW4oKSxzPXRoaXMuX3ZhbHVlTWF4KCksbj1zIT09aT8oci1pKS8ocy1pKSoxMDA6MCxsW3RoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/ImxlZnQiOiJib3R0b20iXT1uKyIlIix0aGlzLmhhbmRsZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKGwsdS5hbmltYXRlKSxvPT09Im1pbiImJnRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCImJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6bisiJSJ9LHUuYW5pbWF0ZSksbz09PSJtYXgiJiZ0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiJiZ0aGlzLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6MTAwLW4rIiUifSx7cXVldWU6ITEsZHVyYXRpb246dS5hbmltYXRlfSksbz09PSJtaW4iJiZ0aGlzLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6bisiJSJ9LHUuYW5pbWF0ZSksbz09PSJtYXgiJiZ0aGlzLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIiYmdGhpcy5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDoxMDAtbisiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjp1LmFuaW1hdGV9KSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC52YWwoKTtlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9yZWZyZXNoKCksdCE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIil9fWUud2lkZ2V0KCJ1aS5zcGlubmVyIix7dmVyc2lvbjoiMS45LjIiLGRlZmF1bHRFbGVtZW50OiI8aW5wdXQ+Iix3aWRnZXRFdmVudFByZWZpeDoic3BpbiIsb3B0aW9uczp7Y3VsdHVyZTpudWxsLGljb25zOntkb3duOiJ1aS1pY29uLXRyaWFuZ2xlLTEtcyIsdXA6InVpLWljb24tdHJpYW5nbGUtMS1uIn0saW5jcmVtZW50YWw6ITAsbWF4Om51bGwsbWluOm51bGwsbnVtYmVyRm9ybWF0Om51bGwscGFnZToxMCxzdGVwOjEsY2hhbmdlOm51bGwsc3BpbjpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fc2V0T3B0aW9uKCJtYXgiLHRoaXMub3B0aW9ucy5tYXgpLHRoaXMuX3NldE9wdGlvbigibWluIix0aGlzLm9wdGlvbnMubWluKSx0aGlzLl9zZXRPcHRpb24oInN0ZXAiLHRoaXMub3B0aW9ucy5zdGVwKSx0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCksITApLHRoaXMuX2RyYXcoKSx0aGlzLl9vbih0aGlzLl9ldmVudHMpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZ2V0Q3JlYXRlT3B0aW9uczpmdW5jdGlvbigpe3ZhciB0PXt9LG49dGhpcy5lbGVtZW50O3JldHVybiBlLmVhY2goWyJtaW4iLCJtYXgiLCJzdGVwIl0sZnVuY3Rpb24oZSxyKXt2YXIgaT1uLmF0dHIocik7aSE9PXVuZGVmaW5lZCYmaS5sZW5ndGgmJih0W3JdPWkpfSksdH0sX2V2ZW50czp7a2V5ZG93bjpmdW5jdGlvbihlKXt0aGlzLl9zdGFydChlKSYmdGhpcy5fa2V5ZG93bihlKSYmZS5wcmV2ZW50RGVmYXVsdCgpfSxrZXl1cDoiX3N0b3AiLGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5wcmV2aW91cz10aGlzLmVsZW1lbnQudmFsKCl9LGJsdXI6ZnVuY3Rpb24oZSl7aWYodGhpcy5jYW5jZWxCbHVyKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyO3JldHVybn10aGlzLl9yZWZyZXNoKCksdGhpcy5wcmV2aW91cyE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlKX0sbW91c2V3aGVlbDpmdW5jdGlvbihlLHQpe2lmKCF0KXJldHVybjtpZighdGhpcy5zcGlubmluZyYmIXRoaXMuX3N0YXJ0KGUpKXJldHVybiExO3RoaXMuX3NwaW4oKHQ+MD8xOi0xKSp0aGlzLm9wdGlvbnMuc3RlcCxlKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMubW91c2V3aGVlbFRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5zcGlubmluZyYmdGhpcy5fc3RvcChlKX0sMTAwKSxlLnByZXZlbnREZWZhdWx0KCl9LCJtb3VzZWRvd24gLnVpLXNwaW5uZXItYnV0dG9uIjpmdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7dmFyIGU9dGhpcy5lbGVtZW50WzBdPT09dGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50O2V8fCh0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPW4sdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPW59KSl9dmFyIG47bj10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ/dGhpcy5wcmV2aW91czp0aGlzLmVsZW1lbnQudmFsKCksdC5wcmV2ZW50RGVmYXVsdCgpLHIuY2FsbCh0aGlzKSx0aGlzLmNhbmNlbEJsdXI9ITAsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHIuY2FsbCh0aGlzKX0pO2lmKHRoaXMuX3N0YXJ0KHQpPT09ITEpcmV0dXJuO3RoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZXVwIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIiwibW91c2VlbnRlciAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe2lmKCFlKHQuY3VycmVudFRhcmdldCkuaGFzQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpKXJldHVybjtpZih0aGlzLl9zdGFydCh0KT09PSExKXJldHVybiExO3RoaXMuX3JlcGVhdChudWxsLGUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3Bpbm5lci11cCIpPzE6LTEsdCl9LCJtb3VzZWxlYXZlIC51aS1zcGlubmVyLWJ1dHRvbiI6Il9zdG9wIn0sX2RyYXc6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVpU3Bpbm5lcj10aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXNwaW5uZXItaW5wdXQiKS5hdHRyKCJhdXRvY29tcGxldGUiLCJvZmYiKS53cmFwKHRoaXMuX3VpU3Bpbm5lckh0bWwoKSkucGFyZW50KCkuYXBwZW5kKHRoaXMuX2J1dHRvbkh0bWwoKSk7dGhpcy5lbGVtZW50LmF0dHIoInJvbGUiLCJzcGluYnV0dG9uIiksdGhpcy5idXR0b25zPWUuZmluZCgiLnVpLXNwaW5uZXItYnV0dG9uIikuYXR0cigidGFiSW5kZXgiLC0xKS5idXR0b24oKS5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLHRoaXMuYnV0dG9ucy5oZWlnaHQoKT5NYXRoLmNlaWwoZS5oZWlnaHQoKSouNSkmJmUuaGVpZ2h0KCk+MCYmZS5oZWlnaHQoZS5oZWlnaHQoKSksdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLmRpc2FibGUoKX0sX2tleWRvd246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9ZS51aS5rZXlDb2RlO3N3aXRjaCh0LmtleUNvZGUpe2Nhc2Ugci5VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsMSx0KSwhMDtjYXNlIHIuRE9XTjpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsLTEsdCksITA7Y2FzZSByLlBBR0VfVVA6cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLG4ucGFnZSx0KSwhMDtjYXNlIHIuUEFHRV9ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtbi5wYWdlLHQpLCEwfXJldHVybiExfSxfdWlTcGlubmVySHRtbDpmdW5jdGlvbigpe3JldHVybiI8c3BhbiBjbGFzcz0ndWktc3Bpbm5lciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCc+PC9zcGFuPiJ9LF9idXR0b25IdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxhIGNsYXNzPSd1aS1zcGlubmVyLWJ1dHRvbiB1aS1zcGlubmVyLXVwIHVpLWNvcm5lci10cic+PHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMudXArIic+JiM5NjUwOzwvc3Bhbj4iKyI8L2E+IisiPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItZG93biB1aS1jb3JuZXItYnInPiIrIjxzcGFuIGNsYXNzPSd1aS1pY29uICIrdGhpcy5vcHRpb25zLmljb25zLmRvd24rIic+JiM5NjYwOzwvc3Bhbj4iKyI8L2E+In0sX3N0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLnNwaW5uaW5nJiZ0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSk9PT0hMT8hMToodGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLHRoaXMuc3Bpbm5pbmc9ITAsITApfSxfcmVwZWF0OmZ1bmN0aW9uKGUsdCxuKXtlPWV8fDUwMCxjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX3JlcGVhdCg0MCx0LG4pfSxlKSx0aGlzLl9zcGluKHQqdGhpcy5vcHRpb25zLnN0ZXAsbil9LF9zcGluOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy52YWx1ZSgpfHwwO3RoaXMuY291bnRlcnx8KHRoaXMuY291bnRlcj0xKSxuPXRoaXMuX2FkanVzdFZhbHVlKG4rZSp0aGlzLl9pbmNyZW1lbnQodGhpcy5jb3VudGVyKSk7aWYoIXRoaXMuc3Bpbm5pbmd8fHRoaXMuX3RyaWdnZXIoInNwaW4iLHQse3ZhbHVlOm59KSE9PSExKXRoaXMuX3ZhbHVlKG4pLHRoaXMuY291bnRlcisrfSxfaW5jcmVtZW50OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucy5pbmNyZW1lbnRhbDtyZXR1cm4gbj9lLmlzRnVuY3Rpb24obik/bih0KTpNYXRoLmZsb29yKHQqdCp0LzVlNC10KnQvNTAwKzE3KnQvMjAwKzEpOjF9LF9wcmVjaXNpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMuc3RlcCk7cmV0dXJuIHRoaXMub3B0aW9ucy5taW4hPT1udWxsJiYoZT1NYXRoLm1heChlLHRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5taW4pKSksZX0sX3ByZWNpc2lvbk9mOmZ1bmN0aW9uKGUpe3ZhciB0PWUudG9TdHJpbmcoKSxuPXQuaW5kZXhPZigiLiIpO3JldHVybiBuPT09LTE/MDp0Lmxlbmd0aC1uLTF9LF9hZGp1c3RWYWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxuLHI9dGhpcy5vcHRpb25zO3JldHVybiB0PXIubWluIT09bnVsbD9yLm1pbjowLG49ZS10LG49TWF0aC5yb3VuZChuL3Iuc3RlcCkqci5zdGVwLGU9dCtuLGU9cGFyc2VGbG9hdChlLnRvRml4ZWQodGhpcy5fcHJlY2lzaW9uKCkpKSxyLm1heCE9PW51bGwmJmU+ci5tYXg/ci5tYXg6ci5taW4hPT1udWxsJiZlPHIubWluP3IubWluOmV9LF9zdG9wOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnNwaW5uaW5nKXJldHVybjtjbGVhclRpbWVvdXQodGhpcy50aW1lciksY2xlYXJUaW1lb3V0KHRoaXMubW91c2V3aGVlbFRpbWVyKSx0aGlzLmNvdW50ZXI9MCx0aGlzLnNwaW5uaW5nPSExLHRoaXMuX3RyaWdnZXIoInN0b3AiLGUpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZT09PSJjdWx0dXJlInx8ZT09PSJudW1iZXJGb3JtYXQiKXt2YXIgbj10aGlzLl9wYXJzZSh0aGlzLmVsZW1lbnQudmFsKCkpO3RoaXMub3B0aW9uc1tlXT10LHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KG4pKTtyZXR1cm59KGU9PT0ibWF4Inx8ZT09PSJtaW4ifHxlPT09InN0ZXAiKSYmdHlwZW9mIHQ9PSJzdHJpbmciJiYodD10aGlzLl9wYXJzZSh0KSksdGhpcy5fc3VwZXIoZSx0KSxlPT09ImRpc2FibGVkIiYmKHQ/KHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITApLHRoaXMuYnV0dG9ucy5idXR0b24oImRpc2FibGUiKSk6KHRoaXMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsITEpLHRoaXMuYnV0dG9ucy5idXR0b24oImVuYWJsZSIpKSl9LF9zZXRPcHRpb25zOnQoZnVuY3Rpb24oZSl7dGhpcy5fc3VwZXIoZSksdGhpcy5fdmFsdWUodGhpcy5lbGVtZW50LnZhbCgpKX0pLF9wYXJzZTpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciJiZlIT09IiImJihlPXdpbmRvdy5HbG9iYWxpemUmJnRoaXMub3B0aW9ucy5udW1iZXJGb3JtYXQ/R2xvYmFsaXplLnBhcnNlRmxvYXQoZSwxMCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6K2UpLGU9PT0iInx8aXNOYU4oZSk/bnVsbDplfSxfZm9ybWF0OmZ1bmN0aW9uKGUpe3JldHVybiBlPT09IiI/IiI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KGUsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6ZX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7ImFyaWEtdmFsdWVtaW4iOnRoaXMub3B0aW9ucy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0sX3ZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG47ZSE9PSIiJiYobj10aGlzLl9wYXJzZShlKSxuIT09bnVsbCYmKHR8fChuPXRoaXMuX2FkanVzdFZhbHVlKG4pKSxlPXRoaXMuX2Zvcm1hdChuKSkpLHRoaXMuZWxlbWVudC52YWwoZSksdGhpcy5fcmVmcmVzaCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLnByb3AoImRpc2FibGVkIiwhMSkucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtaW4iKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWF4IikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCl9LHN0ZXBVcDp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBVcChlKX0pLF9zdGVwVXA6ZnVuY3Rpb24oZSl7dGhpcy5fc3BpbigoZXx8MSkqdGhpcy5vcHRpb25zLnN0ZXApfSxzdGVwRG93bjp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKGUpfSksX3N0ZXBEb3duOmZ1bmN0aW9uKGUpe3RoaXMuX3NwaW4oKGV8fDEpKi10aGlzLm9wdGlvbnMuc3RlcCl9LHBhZ2VVcDp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBVcCgoZXx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSkscGFnZURvd246dChmdW5jdGlvbihlKXt0aGlzLl9zdGVwRG93bigoZXx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSksdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7dCh0aGlzLl92YWx1ZSkuY2FsbCh0aGlzLGUpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51aVNwaW5uZXJ9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIGkoKXtyZXR1cm4rK259ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZS5oYXNoLmxlbmd0aD4xJiZlLmhyZWYucmVwbGFjZShyLCIiKT09PWxvY2F0aW9uLmhyZWYucmVwbGFjZShyLCIiKS5yZXBsYWNlKC9ccy9nLCIlMjAiKX12YXIgbj0wLHI9LyMuKiQvO2Uud2lkZ2V0KCJ1aS50YWJzIix7dmVyc2lvbjoiMS45LjIiLGRlbGF5OjMwMCxvcHRpb25zOnthY3RpdmU6bnVsbCxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGhlaWdodFN0eWxlOiJjb250ZW50IixoaWRlOm51bGwsc2hvdzpudWxsLGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbCxiZWZvcmVMb2FkOm51bGwsbG9hZDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPXRoaXMub3B0aW9ucyxyPW4uYWN0aXZlLGk9bG9jYXRpb24uaGFzaC5zdWJzdHJpbmcoMSk7dGhpcy5ydW5uaW5nPSExLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS10YWJzLWNvbGxhcHNpYmxlIixuLmNvbGxhcHNpYmxlKS5kZWxlZ2F0ZSgiLnVpLXRhYnMtbmF2ID4gbGkiLCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7ZSh0aGlzKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnQucHJldmVudERlZmF1bHQoKX0pLmRlbGVnYXRlKCIudWktdGFicy1hbmNob3IiLCJmb2N1cyIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykuY2xvc2VzdCgibGkiKS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIikmJnRoaXMuYmx1cigpfSksdGhpcy5fcHJvY2Vzc1RhYnMoKTtpZihyPT09bnVsbCl7aSYmdGhpcy50YWJzLmVhY2goZnVuY3Rpb24odCxuKXtpZihlKG4pLmF0dHIoImFyaWEtY29udHJvbHMiKT09PWkpcmV0dXJuIHI9dCwhMX0pLHI9PT1udWxsJiYocj10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmZpbHRlcigiLnVpLXRhYnMtYWN0aXZlIikpKTtpZihyPT09bnVsbHx8cj09PS0xKXI9dGhpcy50YWJzLmxlbmd0aD8wOiExfXIhPT0hMSYmKHI9dGhpcy50YWJzLmluZGV4KHRoaXMudGFicy5lcShyKSkscj09PS0xJiYocj1uLmNvbGxhcHNpYmxlPyExOjApKSxuLmFjdGl2ZT1yLCFuLmNvbGxhcHNpYmxlJiZuLmFjdGl2ZT09PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoJiYobi5hY3RpdmU9MCksZS5pc0FycmF5KG4uZGlzYWJsZWQpJiYobi5kaXNhYmxlZD1lLnVuaXF1ZShuLmRpc2FibGVkLmNvbmNhdChlLm1hcCh0aGlzLnRhYnMuZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gdC50YWJzLmluZGV4KGUpfSkpKS5zb3J0KCkpLHRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMSYmdGhpcy5hbmNob3JzLmxlbmd0aD90aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKHRoaXMub3B0aW9ucy5hY3RpdmUpOnRoaXMuYWN0aXZlPWUoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5hY3RpdmUubGVuZ3RoJiZ0aGlzLmxvYWQobi5hY3RpdmUpfSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue3RhYjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpOmUoKX19LF90YWJLZXlkb3duOmZ1bmN0aW9uKHQpe3ZhciBuPWUodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KS5jbG9zZXN0KCJsaSIpLHI9dGhpcy50YWJzLmluZGV4KG4pLGk9ITA7aWYodGhpcy5faGFuZGxlUGFnZU5hdih0KSlyZXR1cm47c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6Y2FzZSBlLnVpLmtleUNvZGUuRE9XTjpyKys7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuTEVGVDppPSExLHItLTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6cj10aGlzLmFuY2hvcnMubGVuZ3RoLTE7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuSE9NRTpyPTA7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dC5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHRoaXMuX2FjdGl2YXRlKHIpO3JldHVybjtjYXNlIGUudWkua2V5Q29kZS5FTlRFUjp0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocj09PXRoaXMub3B0aW9ucy5hY3RpdmU/ITE6cik7cmV0dXJuO2RlZmF1bHQ6cmV0dXJufXQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSxyPXRoaXMuX2ZvY3VzTmV4dFRhYihyLGkpLHQuY3RybEtleXx8KG4uYXR0cigiYXJpYS1zZWxlY3RlZCIsImZhbHNlIiksdGhpcy50YWJzLmVxKHIpLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJ0cnVlIiksdGhpcy5hY3RpdmF0aW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5vcHRpb24oImFjdGl2ZSIscil9LHRoaXMuZGVsYXkpKX0sX3BhbmVsS2V5ZG93bjpmdW5jdGlvbih0KXtpZih0aGlzLl9oYW5kbGVQYWdlTmF2KHQpKXJldHVybjt0LmN0cmxLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5VUCYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLmFjdGl2ZS5mb2N1cygpKX0sX2hhbmRsZVBhZ2VOYXY6ZnVuY3Rpb24odCl7aWYodC5hbHRLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5QQUdFX1VQKXJldHVybiB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZS0xLCExKSksITA7aWYodC5hbHRLZXkmJnQua2V5Q29kZT09PWUudWkua2V5Q29kZS5QQUdFX0RPV04pcmV0dXJuIHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlKzEsITApKSwhMH0sX2ZpbmROZXh0VGFiOmZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaSgpe3JldHVybiB0PnImJih0PTApLHQ8MCYmKHQ9ciksdH12YXIgcj10aGlzLnRhYnMubGVuZ3RoLTE7d2hpbGUoZS5pbkFycmF5KGkoKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIT09LTEpdD1uP3QrMTp0LTE7cmV0dXJuIHR9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT10aGlzLl9maW5kTmV4dFRhYihlLHQpLHRoaXMudGFicy5lcShlKS5mb2N1cygpLGV9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtpZihlPT09ImFjdGl2ZSIpe3RoaXMuX2FjdGl2YXRlKHQpO3JldHVybn1pZihlPT09ImRpc2FibGVkIil7dGhpcy5fc2V0dXBEaXNhYmxlZCh0KTtyZXR1cm59dGhpcy5fc3VwZXIoZSx0KSxlPT09ImNvbGxhcHNpYmxlIiYmKHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsdCksIXQmJnRoaXMub3B0aW9ucy5hY3RpdmU9PT0hMSYmdGhpcy5fYWN0aXZhdGUoMCkpLGU9PT0iZXZlbnQiJiZ0aGlzLl9zZXR1cEV2ZW50cyh0KSxlPT09ImhlaWdodFN0eWxlIiYmdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0KX0sX3RhYklkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmF0dHIoImFyaWEtY29udHJvbHMiKXx8InVpLXRhYnMtIitpKCl9LF9zYW5pdGl6ZVNlbGVjdG9yOmZ1bmN0aW9uKGUpe3JldHVybiBlP2UucmVwbGFjZSgvWyEiJCUmJygpKissLlwvOjs8PT4/QFxbXF1cXmB7fH1+XS9nLCJcXCQmIik6IiJ9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnMsbj10aGlzLnRhYmxpc3QuY2hpbGRyZW4oIjpoYXMoYVtocmVmXSkiKTt0LmRpc2FibGVkPWUubWFwKG4uZmlsdGVyKCIudWktc3RhdGUtZGlzYWJsZWQiKSxmdW5jdGlvbihlKXtyZXR1cm4gbi5pbmRleChlKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksdC5hY3RpdmU9PT0hMXx8IXRoaXMuYW5jaG9ycy5sZW5ndGg/KHQuYWN0aXZlPSExLHRoaXMuYWN0aXZlPWUoKSk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhZS5jb250YWlucyh0aGlzLnRhYmxpc3RbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMudGFicy5sZW5ndGg9PT10LmRpc2FibGVkLmxlbmd0aD8odC5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKTp0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLHQuYWN0aXZlLTEpLCExKSk6dC5hY3RpdmU9dGhpcy50YWJzLmluZGV4KHRoaXMuYWN0aXZlKSx0aGlzLl9yZWZyZXNoKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2V0dXBEaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3NldHVwRXZlbnRzKHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLHRoaXMudGFicy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHMubm90KHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKSkuaGlkZSgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSksdGhpcy5hY3RpdmUubGVuZ3RoPyh0aGlzLmFjdGl2ZS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pKTp0aGlzLnRhYnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApfSxfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3RoaXMudGFibGlzdD10aGlzLl9nZXRMaXN0KCkuYWRkQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0aGlzLnRhYnM9dGhpcy50YWJsaXN0LmZpbmQoIj4gbGk6aGFzKGFbaHJlZl0pIikuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmF0dHIoe3JvbGU6InRhYiIsdGFiSW5kZXg6LTF9KSx0aGlzLmFuY2hvcnM9dGhpcy50YWJzLm1hcChmdW5jdGlvbigpe3JldHVybiBlKCJhIix0aGlzKVswXX0pLmFkZENsYXNzKCJ1aS10YWJzLWFuY2hvciIpLmF0dHIoe3JvbGU6InByZXNlbnRhdGlvbiIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscz1lKCksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24obixyKXt2YXIgaSxvLHUsYT1lKHIpLnVuaXF1ZUlkKCkuYXR0cigiaWQiKSxmPWUocikuY2xvc2VzdCgibGkiKSxsPWYuYXR0cigiYXJpYS1jb250cm9scyIpO3Mocik/KGk9ci5oYXNoLG89dC5lbGVtZW50LmZpbmQodC5fc2FuaXRpemVTZWxlY3RvcihpKSkpOih1PXQuX3RhYklkKGYpLGk9IiMiK3Usbz10LmVsZW1lbnQuZmluZChpKSxvLmxlbmd0aHx8KG89dC5fY3JlYXRlUGFuZWwodSksby5pbnNlcnRBZnRlcih0LnBhbmVsc1tuLTFdfHx0LnRhYmxpc3QpKSxvLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpKSxvLmxlbmd0aCYmKHQucGFuZWxzPXQucGFuZWxzLmFkZChvKSksbCYmZi5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiLGwpLGYuYXR0cih7ImFyaWEtY29udHJvbHMiOmkuc3Vic3RyaW5nKDEpLCJhcmlhLWxhYmVsbGVkYnkiOmF9KSxvLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsYSl9KSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsInRhYnBhbmVsIil9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCJvbCx1bCIpLmVxKDApfSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24odCl7cmV0dXJuIGUoIjxkaXY+IikuYXR0cigiaWQiLHQpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCEwKX0sX3NldHVwRGlzYWJsZWQ6ZnVuY3Rpb24odCl7ZS5pc0FycmF5KHQpJiYodC5sZW5ndGg/dC5sZW5ndGg9PT10aGlzLmFuY2hvcnMubGVuZ3RoJiYodD0hMCk6dD0hMSk7Zm9yKHZhciBuPTAscjtyPXRoaXMudGFic1tuXTtuKyspdD09PSEwfHxlLmluQXJyYXkobix0KSE9PS0xP2UocikuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKTplKHIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKTt0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9dH0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKHQpe3ZhciBuPXtjbGljazpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCl9fTt0JiZlLmVhY2godC5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7blt0XT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5hbmNob3JzLmFkZCh0aGlzLnRhYnMpLmFkZCh0aGlzLnBhbmVscykpLHRoaXMuX29uKHRoaXMuYW5jaG9ycyxuKSx0aGlzLl9vbih0aGlzLnRhYnMse2tleWRvd246Il90YWJLZXlkb3duIn0pLHRoaXMuX29uKHRoaXMucGFuZWxzLHtrZXlkb3duOiJfcGFuZWxLZXlkb3duIn0pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLnRhYnMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpfSxfc2V0dXBIZWlnaHRTdHlsZTpmdW5jdGlvbih0KXt2YXIgbixyLGk9dGhpcy5lbGVtZW50LnBhcmVudCgpO3Q9PT0iZmlsbCI/KGUuc3VwcG9ydC5taW5IZWlnaHR8fChyPWkuY3NzKCJvdmVyZmxvdyIpLGkuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpKSxuPWkuaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHI9dC5jc3MoInBvc2l0aW9uIik7aWYocj09PSJhYnNvbHV0ZSJ8fHI9PT0iZml4ZWQiKXJldHVybjtuLT10Lm91dGVySGVpZ2h0KCEwKX0pLHImJmkuY3NzKCJvdmVyZmxvdyIsciksdGhpcy5lbGVtZW50LmNoaWxkcmVuKCkubm90KHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7bi09ZSh0aGlzKS5vdXRlckhlaWdodCghMCl9KSx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7ZSh0aGlzKS5oZWlnaHQoTWF0aC5tYXgoMCxuLWUodGhpcykuaW5uZXJIZWlnaHQoKStlKHRoaXMpLmhlaWdodCgpKSl9KS5jc3MoIm92ZXJmbG93IiwiYXV0byIpKTp0PT09ImF1dG8iJiYobj0wLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtuPU1hdGgubWF4KG4sZSh0aGlzKS5oZWlnaHQoIiIpLmhlaWdodCgpKX0pLmhlaWdodChuKSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5hY3RpdmUsaT1lKHQuY3VycmVudFRhcmdldCkscz1pLmNsb3Nlc3QoImxpIiksbz1zWzBdPT09clswXSx1PW8mJm4uY29sbGFwc2libGUsYT11P2UoKTp0aGlzLl9nZXRQYW5lbEZvclRhYihzKSxmPXIubGVuZ3RoP3RoaXMuX2dldFBhbmVsRm9yVGFiKHIpOmUoKSxsPXtvbGRUYWI6cixvbGRQYW5lbDpmLG5ld1RhYjp1P2UoKTpzLG5ld1BhbmVsOmF9O3QucHJldmVudERlZmF1bHQoKTtpZihzLmhhc0NsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpfHxzLmhhc0NsYXNzKCJ1aS10YWJzLWxvYWRpbmciKXx8dGhpcy5ydW5uaW5nfHxvJiYhbi5jb2xsYXBzaWJsZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlQWN0aXZhdGUiLHQsbCk9PT0hMSlyZXR1cm47bi5hY3RpdmU9dT8hMTp0aGlzLnRhYnMuaW5kZXgocyksdGhpcy5hY3RpdmU9bz9lKCk6cyx0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSwhZi5sZW5ndGgmJiFhLmxlbmd0aCYmZS5lcnJvcigialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuIiksYS5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgocyksdCksdGhpcy5fdG9nZ2xlKHQsbCl9LF90b2dnbGU6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBvKCl7ci5ydW5uaW5nPSExLHIuX3RyaWdnZXIoImFjdGl2YXRlIix0LG4pfWZ1bmN0aW9uIHUoKXtuLm5ld1RhYi5jbG9zZXN0KCJsaSIpLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxpLmxlbmd0aCYmci5vcHRpb25zLnNob3c/ci5fc2hvdyhpLHIub3B0aW9ucy5zaG93LG8pOihpLnNob3coKSxvKCkpfXZhciByPXRoaXMsaT1uLm5ld1BhbmVsLHM9bi5vbGRQYW5lbDt0aGlzLnJ1bm5pbmc9ITAscy5sZW5ndGgmJnRoaXMub3B0aW9ucy5oaWRlP3RoaXMuX2hpZGUocyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe24ub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHUoKX0pOihuLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxzLmhpZGUoKSx1KCkpLHMuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxuLm9sZFRhYi5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxpLmxlbmd0aCYmcy5sZW5ndGg/bi5vbGRUYWIuYXR0cigidGFiSW5kZXgiLC0xKTppLmxlbmd0aCYmdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBlKHRoaXMpLmF0dHIoInRhYkluZGV4Iik9PT0wfSkuYXR0cigidGFiSW5kZXgiLC0xKSxpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSksbi5uZXdUYWIuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbixyPXRoaXMuX2ZpbmRBY3RpdmUodCk7aWYoclswXT09PXRoaXMuYWN0aXZlWzBdKXJldHVybjtyLmxlbmd0aHx8KHI9dGhpcy5hY3RpdmUpLG49ci5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSx0aGlzLl9ldmVudEhhbmRsZXIoe3RhcmdldDpuLGN1cnJlbnRUYXJnZXQ6bixwcmV2ZW50RGVmYXVsdDplLm5vb3B9KX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT0hMT9lKCk6dGhpcy50YWJzLmVxKHQpfSxfZ2V0SW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlPT0ic3RyaW5nIiYmKGU9dGhpcy5hbmNob3JzLmluZGV4KHRoaXMuYW5jaG9ycy5maWx0ZXIoIltocmVmJD0nIitlKyInXSIpKSksZX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIpLHRoaXMudGFibGlzdC5yZW1vdmVDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKS5yZW1vdmVBdHRyKCJyb2xlIiksdGhpcy5hbmNob3JzLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFuY2hvciIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZURhdGEoImhyZWYudGFicyIpLnJlbW92ZURhdGEoImxvYWQudGFicyIpLnJlbW92ZVVuaXF1ZUlkKCksdGhpcy50YWJzLmFkZCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2UuZGF0YSh0aGlzLCJ1aS10YWJzLWRlc3Ryb3kiKT9lKHRoaXMpLnJlbW92ZSgpOmUodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AgdWktY29ybmVyLWJvdHRvbSB1aS13aWRnZXQtY29udGVudCB1aS10YWJzLWFjdGl2ZSB1aS10YWJzLXBhbmVsIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxpdmUiKS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKS5yZW1vdmVBdHRyKCJhcmlhLXNlbGVjdGVkIikucmVtb3ZlQXR0cigiYXJpYS1sYWJlbGxlZGJ5IikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigicm9sZSIpfSksdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTtuP3QuYXR0cigiYXJpYS1jb250cm9scyIsbik6dC5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIil9KSx0aGlzLnBhbmVscy5zaG93KCksdGhpcy5vcHRpb25zLmhlaWdodFN0eWxlIT09ImNvbnRlbnQiJiZ0aGlzLnBhbmVscy5jc3MoImhlaWdodCIsIiIpfSxlbmFibGU6ZnVuY3Rpb24obil7dmFyIHI9dGhpcy5vcHRpb25zLmRpc2FibGVkO2lmKHI9PT0hMSlyZXR1cm47bj09PXQ/cj0hMToobj10aGlzLl9nZXRJbmRleChuKSxlLmlzQXJyYXkocik/cj1lLm1hcChyLGZ1bmN0aW9uKGUpe3JldHVybiBlIT09bj9lOm51bGx9KTpyPWUubWFwKHRoaXMudGFicyxmdW5jdGlvbihlLHQpe3JldHVybiB0IT09bj90Om51bGx9KSksdGhpcy5fc2V0dXBEaXNhYmxlZChyKX0sZGlzYWJsZTpmdW5jdGlvbihuKXt2YXIgcj10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYocj09PSEwKXJldHVybjtpZihuPT09dClyPSEwO2Vsc2V7bj10aGlzLl9nZXRJbmRleChuKTtpZihlLmluQXJyYXkobixyKSE9PS0xKXJldHVybjtlLmlzQXJyYXkocik/cj1lLm1lcmdlKFtuXSxyKS5zb3J0KCk6cj1bbl19dGhpcy5fc2V0dXBEaXNhYmxlZChyKX0sbG9hZDpmdW5jdGlvbih0LG4pe3Q9dGhpcy5fZ2V0SW5kZXgodCk7dmFyIHI9dGhpcyxpPXRoaXMudGFicy5lcSh0KSxvPWkuZmluZCgiLnVpLXRhYnMtYW5jaG9yIiksdT10aGlzLl9nZXRQYW5lbEZvclRhYihpKSxhPXt0YWI6aSxwYW5lbDp1fTtpZihzKG9bMF0pKXJldHVybjt0aGlzLnhocj1lLmFqYXgodGhpcy5fYWpheFNldHRpbmdzKG8sbixhKSksdGhpcy54aHImJnRoaXMueGhyLnN0YXR1c1RleHQhPT0iY2FuY2VsZWQiJiYoaS5hZGRDbGFzcygidWktdGFicy1sb2FkaW5nIiksdS5hdHRyKCJhcmlhLWJ1c3kiLCJ0cnVlIiksdGhpcy54aHIuc3VjY2VzcyhmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dS5odG1sKGUpLHIuX3RyaWdnZXIoImxvYWQiLG4sYSl9LDEpfSkuY29tcGxldGUoZnVuY3Rpb24oZSx0KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dD09PSJhYm9ydCImJnIucGFuZWxzLnN0b3AoITEsITApLGkucmVtb3ZlQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpLHUucmVtb3ZlQXR0cigiYXJpYS1idXN5IiksZT09PXIueGhyJiZkZWxldGUgci54aHJ9LDEpfSkpfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT10aGlzO3JldHVybnt1cmw6dC5hdHRyKCJocmVmIiksYmVmb3JlU2VuZDpmdW5jdGlvbih0LHMpe3JldHVybiBpLl90cmlnZ2VyKCJiZWZvcmVMb2FkIixuLGUuZXh0ZW5kKHtqcVhIUjp0LGFqYXhTZXR0aW5nczpzfSxyKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKHQpe3ZhciBuPWUodCkuYXR0cigiYXJpYS1jb250cm9scyIpO3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCIjIituKSl9fSksZS51aUJhY2tDb21wYXQhPT0hMSYmKGUudWkudGFicy5wcm90b3R5cGUuX3VpPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3RhYjplLHBhbmVsOnQsaW5kZXg6dGhpcy5hbmNob3JzLmluZGV4KGUpfX0sZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7dXJsOmZ1bmN0aW9uKGUsdCl7dGhpcy5hbmNob3JzLmVxKGUpLmF0dHIoImhyZWYiLHQpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2FqYXhPcHRpb25zOm51bGwsY2FjaGU6ITF9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpO3ZhciB0PXRoaXM7dGhpcy5fb24oe3RhYnNiZWZvcmVsb2FkOmZ1bmN0aW9uKG4scil7aWYoZS5kYXRhKHIudGFiWzBdLCJjYWNoZS50YWJzIikpe24ucHJldmVudERlZmF1bHQoKTtyZXR1cm59ci5qcVhIUi5zdWNjZXNzKGZ1bmN0aW9uKCl7dC5vcHRpb25zLmNhY2hlJiZlLmRhdGEoci50YWJbMF0sImNhY2hlLnRhYnMiLCEwKX0pfX0pfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT10aGlzLm9wdGlvbnMuYWpheE9wdGlvbnM7cmV0dXJuIGUuZXh0ZW5kKHt9LGkse2Vycm9yOmZ1bmN0aW9uKGUsdCl7dHJ5e2kuZXJyb3IoZSx0LHIudGFiLmNsb3Nlc3QoImxpIikuaW5kZXgoKSxyLnRhYlswXSl9Y2F0Y2gobil7fX19LHRoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtlPT09ImNhY2hlIiYmdD09PSExJiZ0aGlzLmFuY2hvcnMucmVtb3ZlRGF0YSgiY2FjaGUudGFicyIpLHRoaXMuX3N1cGVyKGUsdCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5hbmNob3JzLnJlbW92ZURhdGEoImNhY2hlLnRhYnMiKSx0aGlzLl9zdXBlcigpfSx1cmw6ZnVuY3Rpb24oZSl7dGhpcy5hbmNob3JzLmVxKGUpLnJlbW92ZURhdGEoImNhY2hlLnRhYnMiKSx0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7YWJvcnQ6ZnVuY3Rpb24oKXt0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntzcGlubmVyOiI8ZW0+TG9hZGluZyYjODIzMDs8L2VtPiJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMuX29uKHt0YWJzYmVmb3JlbG9hZDpmdW5jdGlvbihlLHQpe2lmKGUudGFyZ2V0IT09dGhpcy5lbGVtZW50WzBdfHwhdGhpcy5vcHRpb25zLnNwaW5uZXIpcmV0dXJuO3ZhciBuPXQudGFiLmZpbmQoInNwYW4iKSxyPW4uaHRtbCgpO24uaHRtbCh0aGlzLm9wdGlvbnMuc3Bpbm5lciksdC5qcVhIUi5jb21wbGV0ZShmdW5jdGlvbigpe24uaHRtbChyKX0pfX0pfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2VuYWJsZTpudWxsLGRpc2FibGU6bnVsbH0sZW5hYmxlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyO2lmKHQmJm4uZGlzYWJsZWQ9PT0hMHx8ZS5pc0FycmF5KG4uZGlzYWJsZWQpJiZlLmluQXJyYXkodCxuLmRpc2FibGVkKSE9PS0xKXI9ITA7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHImJnRoaXMuX3RyaWdnZXIoImVuYWJsZSIsbnVsbCx0aGlzLl91aSh0aGlzLmFuY2hvcnNbdF0sdGhpcy5wYW5lbHNbdF0pKX0sZGlzYWJsZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscjtpZih0JiZuLmRpc2FibGVkPT09ITF8fGUuaXNBcnJheShuLmRpc2FibGVkKSYmZS5pbkFycmF5KHQsbi5kaXNhYmxlZCk9PT0tMSlyPSEwO3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSxyJiZ0aGlzLl90cmlnZ2VyKCJkaXNhYmxlIixudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1t0XSx0aGlzLnBhbmVsc1t0XSkpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2FkZDpudWxsLHJlbW92ZTpudWxsLHRhYlRlbXBsYXRlOiI8bGk+PGEgaHJlZj0nI3tocmVmfSc+PHNwYW4+I3tsYWJlbH08L3NwYW4+PC9hPjwvbGk+In0sYWRkOmZ1bmN0aW9uKG4scixpKXtpPT09dCYmKGk9dGhpcy5hbmNob3JzLmxlbmd0aCk7dmFyIHMsbyx1PXRoaXMub3B0aW9ucyxhPWUodS50YWJUZW1wbGF0ZS5yZXBsYWNlKC8jXHtocmVmXH0vZyxuKS5yZXBsYWNlKC8jXHtsYWJlbFx9L2cscikpLGY9bi5pbmRleE9mKCIjIik/dGhpcy5fdGFiSWQoYSk6bi5yZXBsYWNlKCIjIiwiIik7cmV0dXJuIGEuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApLGEuYXR0cigiYXJpYS1jb250cm9scyIsZikscz1pPj10aGlzLnRhYnMubGVuZ3RoLG89dGhpcy5lbGVtZW50LmZpbmQoIiMiK2YpLG8ubGVuZ3RofHwobz10aGlzLl9jcmVhdGVQYW5lbChmKSxzP2k+MD9vLmluc2VydEFmdGVyKHRoaXMucGFuZWxzLmVxKC0xKSk6by5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpOm8uaW5zZXJ0QmVmb3JlKHRoaXMucGFuZWxzW2ldKSksby5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuaGlkZSgpLHM/YS5hcHBlbmRUbyh0aGlzLnRhYmxpc3QpOmEuaW5zZXJ0QmVmb3JlKHRoaXMudGFic1tpXSksdS5kaXNhYmxlZD1lLm1hcCh1LmRpc2FibGVkLGZ1bmN0aW9uKGUpe3JldHVybiBlPj1pPysrZTplfSksdGhpcy5yZWZyZXNoKCksdGhpcy50YWJzLmxlbmd0aD09PTEmJnUuYWN0aXZlPT09ITEmJnRoaXMub3B0aW9uKCJhY3RpdmUiLDApLHRoaXMuX3RyaWdnZXIoImFkZCIsbnVsbCx0aGlzLl91aSh0aGlzLmFuY2hvcnNbaV0sdGhpcy5wYW5lbHNbaV0pKSx0aGlzfSxyZW1vdmU6ZnVuY3Rpb24odCl7dD10aGlzLl9nZXRJbmRleCh0KTt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzLnRhYnMuZXEodCkucmVtb3ZlKCksaT10aGlzLl9nZXRQYW5lbEZvclRhYihyKS5yZW1vdmUoKTtyZXR1cm4gci5oYXNDbGFzcygidWktdGFicy1hY3RpdmUiKSYmdGhpcy5hbmNob3JzLmxlbmd0aD4yJiZ0aGlzLl9hY3RpdmF0ZSh0Kyh0KzE8dGhpcy5hbmNob3JzLmxlbmd0aD8xOi0xKSksbi5kaXNhYmxlZD1lLm1hcChlLmdyZXAobi5kaXNhYmxlZCxmdW5jdGlvbihlKXtyZXR1cm4gZSE9PXR9KSxmdW5jdGlvbihlKXtyZXR1cm4gZT49dD8tLWU6ZX0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX3RyaWdnZXIoInJlbW92ZSIsbnVsbCx0aGlzLl91aShyLmZpbmQoImEiKVswXSxpWzBdKSksdGhpc319KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtsZW5ndGg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hbmNob3JzLmxlbmd0aH19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntpZFByZWZpeDoidWktdGFicy0ifSxfdGFiSWQ6ZnVuY3Rpb24odCl7dmFyIG49dC5pcygibGkiKT90LmZpbmQoImFbaHJlZl0iKTp0O3JldHVybiBuPW5bMF0sZShuKS5jbG9zZXN0KCJsaSIpLmF0dHIoImFyaWEtY29udHJvbHMiKXx8bi50aXRsZSYmbi50aXRsZS5yZXBsYWNlKC9ccy9nLCJfIikucmVwbGFjZSgvW15cd1x1MDBjMC1cdUZGRkZcLV0vZywiIil8fHRoaXMub3B0aW9ucy5pZFByZWZpeCtpKCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7cGFuZWxUZW1wbGF0ZToiPGRpdj48L2Rpdj4ifSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24odCl7cmV0dXJuIGUodGhpcy5vcHRpb25zLnBhbmVsVGVtcGxhdGUpLmF0dHIoImlkIix0KS5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuZGF0YSgidWktdGFicy1kZXN0cm95IiwhMCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7X2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztlLmFjdGl2ZT09PW51bGwmJmUuc2VsZWN0ZWQhPT10JiYoZS5hY3RpdmU9ZS5zZWxlY3RlZD09PS0xPyExOmUuc2VsZWN0ZWQpLHRoaXMuX3N1cGVyKCksZS5zZWxlY3RlZD1lLmFjdGl2ZSxlLnNlbGVjdGVkPT09ITEmJihlLnNlbGVjdGVkPS0xKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGUhPT0ic2VsZWN0ZWQiKXJldHVybiB0aGlzLl9zdXBlcihlLHQpO3ZhciBuPXRoaXMub3B0aW9uczt0aGlzLl9zdXBlcigiYWN0aXZlIix0PT09LTE/ITE6dCksbi5zZWxlY3RlZD1uLmFjdGl2ZSxuLnNlbGVjdGVkPT09ITEmJihuLnNlbGVjdGVkPS0xKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSx0aGlzLm9wdGlvbnMuc2VsZWN0ZWQ9dGhpcy5vcHRpb25zLmFjdGl2ZSx0aGlzLm9wdGlvbnMuc2VsZWN0ZWQ9PT0hMSYmKHRoaXMub3B0aW9ucy5zZWxlY3RlZD0tMSl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7c2hvdzpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITEmJnRoaXMuX3RyaWdnZXIoInNob3ciLG51bGwsdGhpcy5fdWkodGhpcy5hY3RpdmUuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0sdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpWzBdKSl9LF90cmlnZ2VyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHM9dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpO3JldHVybiBzPyhlPT09ImJlZm9yZUFjdGl2YXRlIj8ocj1uLm5ld1RhYi5sZW5ndGg/bi5uZXdUYWI6bi5vbGRUYWIsaT1uLm5ld1BhbmVsLmxlbmd0aD9uLm5ld1BhbmVsOm4ub2xkUGFuZWwscz10aGlzLl9zdXBlcigic2VsZWN0Iix0LHt0YWI6ci5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSxwYW5lbDppWzBdLGluZGV4OnIuY2xvc2VzdCgibGkiKS5pbmRleCgpfSkpOmU9PT0iYWN0aXZhdGUiJiZuLm5ld1RhYi5sZW5ndGgmJihzPXRoaXMuX3N1cGVyKCJzaG93Iix0LHt0YWI6bi5uZXdUYWIuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0scGFuZWw6bi5uZXdQYW5lbFswXSxpbmRleDpuLm5ld1RhYi5jbG9zZXN0KCJsaSIpLmluZGV4KCl9KSkscyk6ITF9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7c2VsZWN0OmZ1bmN0aW9uKGUpe2U9dGhpcy5fZ2V0SW5kZXgoZSk7aWYoZT09PS0xKXtpZighdGhpcy5vcHRpb25zLmNvbGxhcHNpYmxlfHx0aGlzLm9wdGlvbnMuc2VsZWN0ZWQ9PT0tMSlyZXR1cm47ZT10aGlzLm9wdGlvbnMuc2VsZWN0ZWR9dGhpcy5hbmNob3JzLmVxKGUpLnRyaWdnZXIodGhpcy5vcHRpb25zLmV2ZW50K3RoaXMuZXZlbnROYW1lc3BhY2UpfX0pLGZ1bmN0aW9uKCl7dmFyIHQ9MDtlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntjb29raWU6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyx0O2UuYWN0aXZlPT1udWxsJiZlLmNvb2tpZSYmKHQ9cGFyc2VJbnQodGhpcy5fY29va2llKCksMTApLHQ9PT0tMSYmKHQ9ITEpLGUuYWN0aXZlPXQpLHRoaXMuX3N1cGVyKCl9LF9jb29raWU6ZnVuY3Rpb24obil7dmFyIHI9W3RoaXMuY29va2llfHwodGhpcy5jb29raWU9dGhpcy5vcHRpb25zLmNvb2tpZS5uYW1lfHwidWktdGFicy0iKyArK3QpXTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCYmKHIucHVzaChuPT09ITE/LTE6biksci5wdXNoKHRoaXMub3B0aW9ucy5jb29raWUpKSxlLmNvb2tpZS5hcHBseShudWxsLHIpfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5vcHRpb25zLmNvb2tpZSYmdGhpcy5fY29va2llKHRoaXMub3B0aW9ucy5hY3RpdmUsdGhpcy5vcHRpb25zLmNvb2tpZSl9LF9ldmVudEhhbmRsZXI6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLmNvb2tpZSYmdGhpcy5fY29va2llKHRoaXMub3B0aW9ucy5hY3RpdmUsdGhpcy5vcHRpb25zLmNvb2tpZSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuY29va2llJiZ0aGlzLl9jb29raWUobnVsbCx0aGlzLm9wdGlvbnMuY29va2llKX19KX0oKSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7dmFyIGk9ZS5leHRlbmQoe30scik7cmV0dXJuIHQ9PT0ibG9hZCImJihpLnBhbmVsPWkucGFuZWxbMF0saS50YWI9aS50YWIuZmluZCgiLnVpLXRhYnMtYW5jaG9yIilbMF0pLHRoaXMuX3N1cGVyKHQsbixpKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntmeDpudWxsfSxfZ2V0Rng6ZnVuY3Rpb24oKXt2YXIgdCxuLHI9dGhpcy5vcHRpb25zLmZ4O3JldHVybiByJiYoZS5pc0FycmF5KHIpPyh0PXJbMF0sbj1yWzFdKTp0PW49cikscj97c2hvdzpuLGhpZGU6dH06bnVsbH0sX3RvZ2dsZTpmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG8oKXtuLnJ1bm5pbmc9ITEsbi5fdHJpZ2dlcigiYWN0aXZhdGUiLGUsdCl9ZnVuY3Rpb24gdSgpe3QubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHIubGVuZ3RoJiZzLnNob3c/ci5hbmltYXRlKHMuc2hvdyxzLnNob3cuZHVyYXRpb24sZnVuY3Rpb24oKXtvKCl9KTooci5zaG93KCksbygpKX12YXIgbj10aGlzLHI9dC5uZXdQYW5lbCxpPXQub2xkUGFuZWwscz10aGlzLl9nZXRGeCgpO2lmKCFzKXJldHVybiB0aGlzLl9zdXBlcihlLHQpO24ucnVubmluZz0hMCxpLmxlbmd0aCYmcy5oaWRlP2kuYW5pbWF0ZShzLmhpZGUscy5oaWRlLmR1cmF0aW9uLGZ1bmN0aW9uKCl7dC5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksdSgpfSk6KHQub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLGkuaGlkZSgpLHUoKSl9fSkpfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LG4pe3ZhciByPSh0LmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKXx8IiIpLnNwbGl0KC9ccysvKTtyLnB1c2gobiksdC5kYXRhKCJ1aS10b29sdGlwLWlkIixuKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixlLnRyaW0oci5qb2luKCIgIikpKX1mdW5jdGlvbiByKHQpe3ZhciBuPXQuZGF0YSgidWktdG9vbHRpcC1pZCIpLHI9KHQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpfHwiIikuc3BsaXQoL1xzKy8pLGk9ZS5pbkFycmF5KG4scik7aSE9PS0xJiZyLnNwbGljZShpLDEpLHQucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1pZCIpLHI9ZS50cmltKHIuam9pbigiICIpKSxyP3QuYXR0cigiYXJpYS1kZXNjcmliZWRieSIscik6dC5yZW1vdmVBdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil9dmFyIHQ9MDtlLndpZGdldCgidWkudG9vbHRpcCIse3ZlcnNpb246IjEuOS4yIixvcHRpb25zOntjb250ZW50OmZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYXR0cigidGl0bGUiKX0saGlkZTohMCxpdGVtczoiW3RpdGxlXTpub3QoW2Rpc2FibGVkXSkiLHBvc2l0aW9uOntteToibGVmdCB0b3ArMTUiLGF0OiJsZWZ0IGJvdHRvbSIsY29sbGlzaW9uOiJmbGlwZml0IGZsaXAifSxzaG93OiEwLHRvb2x0aXBDbGFzczpudWxsLHRyYWNrOiExLGNsb3NlOm51bGwsb3BlbjpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5fb24oe21vdXNlb3Zlcjoib3BlbiIsZm9jdXNpbjoib3BlbiJ9KSx0aGlzLnRvb2x0aXBzPXt9LHRoaXMucGFyZW50cz17fSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGUoKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXM7aWYodD09PSJkaXNhYmxlZCIpe3RoaXNbbj8iX2Rpc2FibGUiOiJfZW5hYmxlIl0oKSx0aGlzLm9wdGlvbnNbdF09bjtyZXR1cm59dGhpcy5fc3VwZXIodCxuKSx0PT09ImNvbnRlbnQiJiZlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihlLHQpe3IuX3VwZGF0ZUNvbnRlbnQodCl9KX0sX2Rpc2FibGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5FdmVudCgiYmx1ciIpO2kudGFyZ2V0PWkuY3VycmVudFRhcmdldD1yWzBdLHQuY2xvc2UoaSwhMCl9KSx0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmlzKCJbdGl0bGVdIikmJnQuZGF0YSgidWktdG9vbHRpcC10aXRsZSIsdC5hdHRyKCJ0aXRsZSIpKS5hdHRyKCJ0aXRsZSIsIiIpfSl9LF9lbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmdC5hdHRyKCJ0aXRsZSIsdC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSl9LG9wZW46ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxyPWUodD90LnRhcmdldDp0aGlzLmVsZW1lbnQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLml0ZW1zKTtpZighci5sZW5ndGh8fHIuZGF0YSgidWktdG9vbHRpcC1pZCIpKXJldHVybjtyLmF0dHIoInRpdGxlIikmJnIuZGF0YSgidWktdG9vbHRpcC10aXRsZSIsci5hdHRyKCJ0aXRsZSIpKSxyLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIsITApLHQmJnQudHlwZT09PSJtb3VzZW92ZXIiJiZyLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKSxyO3QuZGF0YSgidWktdG9vbHRpcC1vcGVuIikmJihyPWUuRXZlbnQoImJsdXIiKSxyLnRhcmdldD1yLmN1cnJlbnRUYXJnZXQ9dGhpcyxuLmNsb3NlKHIsITApKSx0LmF0dHIoInRpdGxlIikmJih0LnVuaXF1ZUlkKCksbi5wYXJlbnRzW3RoaXMuaWRdPXtlbGVtZW50OnRoaXMsdGl0bGU6dC5hdHRyKCJ0aXRsZSIpfSx0LmF0dHIoInRpdGxlIiwiIikpfSksdGhpcy5fdXBkYXRlQ29udGVudChyLHQpfSxfdXBkYXRlQ29udGVudDpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dGhpcy5vcHRpb25zLmNvbnRlbnQsaT10aGlzLHM9dD90LnR5cGU6bnVsbDtpZih0eXBlb2Ygcj09InN0cmluZyIpcmV0dXJuIHRoaXMuX29wZW4odCxlLHIpO249ci5jYWxsKGVbMF0sZnVuY3Rpb24obil7aWYoIWUuZGF0YSgidWktdG9vbHRpcC1vcGVuIikpcmV0dXJuO2kuX2RlbGF5KGZ1bmN0aW9uKCl7dCYmKHQudHlwZT1zKSx0aGlzLl9vcGVuKHQsZSxuKX0pfSksbiYmdGhpcy5fb3Blbih0LGUsbil9LF9vcGVuOmZ1bmN0aW9uKHQscixpKXtmdW5jdGlvbiBmKGUpe2Eub2Y9ZTtpZihzLmlzKCI6aGlkZGVuIikpcmV0dXJuO3MucG9zaXRpb24oYSl9dmFyIHMsbyx1LGE9ZS5leHRlbmQoe30sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtpZighaSlyZXR1cm47cz10aGlzLl9maW5kKHIpO2lmKHMubGVuZ3RoKXtzLmZpbmQoIi51aS10b29sdGlwLWNvbnRlbnQiKS5odG1sKGkpO3JldHVybn1yLmlzKCJbdGl0bGVdIikmJih0JiZ0LnR5cGU9PT0ibW91c2VvdmVyIj9yLmF0dHIoInRpdGxlIiwiIik6ci5yZW1vdmVBdHRyKCJ0aXRsZSIpKSxzPXRoaXMuX3Rvb2x0aXAociksbihyLHMuYXR0cigiaWQiKSkscy5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChpKSx0aGlzLm9wdGlvbnMudHJhY2smJnQmJi9ebW91c2UvLnRlc3QodC50eXBlKT8odGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vtb3ZlOmZ9KSxmKHQpKTpzLnBvc2l0aW9uKGUuZXh0ZW5kKHtvZjpyfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSxzLmhpZGUoKSx0aGlzLl9zaG93KHMsdGhpcy5vcHRpb25zLnNob3cpLHRoaXMub3B0aW9ucy5zaG93JiZ0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSYmKHU9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtzLmlzKCI6dmlzaWJsZSIpJiYoZihhLm9mKSxjbGVhckludGVydmFsKHUpKX0sZS5meC5pbnRlcnZhbCkpLHRoaXMuX3RyaWdnZXIoIm9wZW4iLHQse3Rvb2x0aXA6c30pLG89e2tleXVwOmZ1bmN0aW9uKHQpe2lmKHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5FU0NBUEUpe3ZhciBuPWUuRXZlbnQodCk7bi5jdXJyZW50VGFyZ2V0PXJbMF0sdGhpcy5jbG9zZShuLCEwKX19LHJlbW92ZTpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZVRvb2x0aXAocyl9fTtpZighdHx8dC50eXBlPT09Im1vdXNlb3ZlciIpby5tb3VzZWxlYXZlPSJjbG9zZSI7aWYoIXR8fHQudHlwZT09PSJmb2N1c2luIilvLmZvY3Vzb3V0PSJjbG9zZSI7dGhpcy5fb24oITAscixvKX0sY2xvc2U6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxpPWUodD90LmN1cnJlbnRUYXJnZXQ6dGhpcy5lbGVtZW50KSxzPXRoaXMuX2ZpbmQoaSk7aWYodGhpcy5jbG9zaW5nKXJldHVybjtpLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmaS5hdHRyKCJ0aXRsZSIsaS5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpLHIoaSkscy5zdG9wKCEwKSx0aGlzLl9oaWRlKHMsdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtuLl9yZW1vdmVUb29sdGlwKGUodGhpcykpfSksaS5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLW9wZW4iKSx0aGlzLl9vZmYoaSwibW91c2VsZWF2ZSBmb2N1c291dCBrZXl1cCIpLGlbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuX29mZihpLCJyZW1vdmUiKSx0aGlzLl9vZmYodGhpcy5kb2N1bWVudCwibW91c2Vtb3ZlIiksdCYmdC50eXBlPT09Im1vdXNlbGVhdmUiJiZlLmVhY2godGhpcy5wYXJlbnRzLGZ1bmN0aW9uKHQscil7ZShyLmVsZW1lbnQpLmF0dHIoInRpdGxlIixyLnRpdGxlKSxkZWxldGUgbi5wYXJlbnRzW3RdfSksdGhpcy5jbG9zaW5nPSEwLHRoaXMuX3RyaWdnZXIoImNsb3NlIix0LHt0b29sdGlwOnN9KSx0aGlzLmNsb3Npbmc9ITF9LF90b29sdGlwOmZ1bmN0aW9uKG4pe3ZhciByPSJ1aS10b29sdGlwLSIrdCsrLGk9ZSgiPGRpdj4iKS5hdHRyKHtpZDpyLHJvbGU6InRvb2x0aXAifSkuYWRkQ2xhc3MoInVpLXRvb2x0aXAgdWktd2lkZ2V0IHVpLWNvcm5lci1hbGwgdWktd2lkZ2V0LWNvbnRlbnQgIisodGhpcy5vcHRpb25zLnRvb2x0aXBDbGFzc3x8IiIpKTtyZXR1cm4gZSgiPGRpdj4iKS5hZGRDbGFzcygidWktdG9vbHRpcC1jb250ZW50IikuYXBwZW5kVG8oaSksaS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50WzBdLmJvZHkpLGUuZm4uYmdpZnJhbWUmJmkuYmdpZnJhbWUoKSx0aGlzLnRvb2x0aXBzW3JdPW4saX0sX2ZpbmQ6ZnVuY3Rpb24odCl7dmFyIG49dC5kYXRhKCJ1aS10b29sdGlwLWlkIik7cmV0dXJuIG4/ZSgiIyIrbik6ZSgpfSxfcmVtb3ZlVG9vbHRpcDpmdW5jdGlvbihlKXtlLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLnRvb2x0aXBzW2UuYXR0cigiaWQiKV19LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztlLmVhY2godGhpcy50b29sdGlwcyxmdW5jdGlvbihuLHIpe3ZhciBpPWUuRXZlbnQoImJsdXIiKTtpLnRhcmdldD1pLmN1cnJlbnRUYXJnZXQ9clswXSx0LmNsb3NlKGksITApLGUoIiMiK24pLnJlbW92ZSgpLHIuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiYoci5hdHRyKCJ0aXRsZSIsci5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpLHIucmVtb3ZlRGF0YSgidWktdG9vbHRpcC10aXRsZSIpKX0pfX0pfSkoalF1ZXJ5KTtqUXVlcnkuZWZmZWN0c3x8ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnVpQmFja0NvbXBhdCE9PSExLHI9InVpLWVmZmVjdHMtIjtlLmVmZmVjdHM9e2VmZmVjdDp7fX0sZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBwKGUsdCxuKXt2YXIgcj1hW3QudHlwZV18fHt9O3JldHVybiBlPT1udWxsP258fCF0LmRlZj9udWxsOnQuZGVmOihlPXIuZmxvb3I/fn5lOnBhcnNlRmxvYXQoZSksaXNOYU4oZSk/dC5kZWY6ci5tb2Q/KGUrci5tb2QpJXIubW9kOjA+ZT8wOnIubWF4PGU/ci5tYXg6ZSl9ZnVuY3Rpb24gZChlKXt2YXIgbj1vKCkscj1uLl9yZ2JhPVtdO3JldHVybiBlPWUudG9Mb3dlckNhc2UoKSxoKHMsZnVuY3Rpb24odCxpKXt2YXIgcyxvPWkucmUuZXhlYyhlKSxhPW8mJmkucGFyc2UobyksZj1pLnNwYWNlfHwicmdiYSI7aWYoYSlyZXR1cm4gcz1uW2ZdKGEpLG5bdVtmXS5jYWNoZV09c1t1W2ZdLmNhY2hlXSxyPW4uX3JnYmE9cy5fcmdiYSwhMX0pLHIubGVuZ3RoPyhyLmpvaW4oKT09PSIwLDAsMCwwIiYmdC5leHRlbmQocixjLnRyYW5zcGFyZW50KSxuKTpjW2VdfWZ1bmN0aW9uIHYoZSx0LG4pe3JldHVybiBuPShuKzEpJTEsbio2PDE/ZSsodC1lKSpuKjY6bioyPDE/dDpuKjM8Mj9lKyh0LWUpKigyLzMtbikqNjplfXZhciByPSJiYWNrZ3JvdW5kQ29sb3IgYm9yZGVyQm90dG9tQ29sb3IgYm9yZGVyTGVmdENvbG9yIGJvcmRlclJpZ2h0Q29sb3IgYm9yZGVyVG9wQ29sb3IgY29sb3IgY29sdW1uUnVsZUNvbG9yIG91dGxpbmVDb2xvciB0ZXh0RGVjb3JhdGlvbkNvbG9yIHRleHRFbXBoYXNpc0NvbG9yIi5zcGxpdCgiICIpLGk9L14oW1wtK10pPVxzKihcZCtcLj9cZCopLyxzPVt7cmU6L3JnYmE/XChccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLGVbM10sZVs0XV19fSx7cmU6L3JnYmE/XChccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQrKD86XC5cZCspPylccyopP1wpLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSoyLjU1LGVbMl0qMi41NSxlWzNdKjIuNTUsZVs0XV19fSx7cmU6LyMoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdLDE2KSxwYXJzZUludChlWzJdLDE2KSxwYXJzZUludChlWzNdLDE2KV19fSx7cmU6LyMoW2EtZjAtOV0pKFthLWYwLTldKShbYS1mMC05XSkvLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltwYXJzZUludChlWzFdK2VbMV0sMTYpLHBhcnNlSW50KGVbMl0rZVsyXSwxNikscGFyc2VJbnQoZVszXStlWzNdLDE2KV19fSx7cmU6L2hzbGE/XChccyooXGQrKD86XC5cZCspPylccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkKyg/OlwuXGQrKT8pXHMqKT9cKS8sc3BhY2U6ImhzbGEiLHBhcnNlOmZ1bmN0aW9uKGUpe3JldHVybltlWzFdLGVbMl0vMTAwLGVbM10vMTAwLGVbNF1dfX1dLG89dC5Db2xvcj1mdW5jdGlvbihlLG4scixpKXtyZXR1cm4gbmV3IHQuQ29sb3IuZm4ucGFyc2UoZSxuLHIsaSl9LHU9e3JnYmE6e3Byb3BzOntyZWQ6e2lkeDowLHR5cGU6ImJ5dGUifSxncmVlbjp7aWR4OjEsdHlwZToiYnl0ZSJ9LGJsdWU6e2lkeDoyLHR5cGU6ImJ5dGUifX19LGhzbGE6e3Byb3BzOntodWU6e2lkeDowLHR5cGU6ImRlZ3JlZXMifSxzYXR1cmF0aW9uOntpZHg6MSx0eXBlOiJwZXJjZW50In0sbGlnaHRuZXNzOntpZHg6Mix0eXBlOiJwZXJjZW50In19fX0sYT17ImJ5dGUiOntmbG9vcjohMCxtYXg6MjU1fSxwZXJjZW50OnttYXg6MX0sZGVncmVlczp7bW9kOjM2MCxmbG9vcjohMH19LGY9by5zdXBwb3J0PXt9LGw9dCgiPHA+IilbMF0sYyxoPXQuZWFjaDtsLnN0eWxlLmNzc1RleHQ9ImJhY2tncm91bmQtY29sb3I6cmdiYSgxLDEsMSwuNSkiLGYucmdiYT1sLnN0eWxlLmJhY2tncm91bmRDb2xvci5pbmRleE9mKCJyZ2JhIik+LTEsaCh1LGZ1bmN0aW9uKGUsdCl7dC5jYWNoZT0iXyIrZSx0LnByb3BzLmFscGhhPXtpZHg6Myx0eXBlOiJwZXJjZW50IixkZWY6MX19KSxvLmZuPXQuZXh0ZW5kKG8ucHJvdG90eXBlLHtwYXJzZTpmdW5jdGlvbihyLGkscyxhKXtpZihyPT09bilyZXR1cm4gdGhpcy5fcmdiYT1bbnVsbCxudWxsLG51bGwsbnVsbF0sdGhpcztpZihyLmpxdWVyeXx8ci5ub2RlVHlwZSlyPXQocikuY3NzKGkpLGk9bjt2YXIgZj10aGlzLGw9dC50eXBlKHIpLHY9dGhpcy5fcmdiYT1bXTtpIT09biYmKHI9W3IsaSxzLGFdLGw9ImFycmF5Iik7aWYobD09PSJzdHJpbmciKXJldHVybiB0aGlzLnBhcnNlKGQocil8fGMuX2RlZmF1bHQpO2lmKGw9PT0iYXJyYXkiKXJldHVybiBoKHUucmdiYS5wcm9wcyxmdW5jdGlvbihlLHQpe3ZbdC5pZHhdPXAoclt0LmlkeF0sdCl9KSx0aGlzO2lmKGw9PT0ib2JqZWN0IilyZXR1cm4gciBpbnN0YW5jZW9mIG8/aCh1LGZ1bmN0aW9uKGUsdCl7clt0LmNhY2hlXSYmKGZbdC5jYWNoZV09clt0LmNhY2hlXS5zbGljZSgpKX0pOmgodSxmdW5jdGlvbih0LG4pe3ZhciBpPW4uY2FjaGU7aChuLnByb3BzLGZ1bmN0aW9uKGUsdCl7aWYoIWZbaV0mJm4udG8pe2lmKGU9PT0iYWxwaGEifHxyW2VdPT1udWxsKXJldHVybjtmW2ldPW4udG8oZi5fcmdiYSl9ZltpXVt0LmlkeF09cChyW2VdLHQsITApfSksZltpXSYmZS5pbkFycmF5KG51bGwsZltpXS5zbGljZSgwLDMpKTwwJiYoZltpXVszXT0xLG4uZnJvbSYmKGYuX3JnYmE9bi5mcm9tKGZbaV0pKSl9KSx0aGlzfSxpczpmdW5jdGlvbihlKXt2YXIgdD1vKGUpLG49ITAscj10aGlzO3JldHVybiBoKHUsZnVuY3Rpb24oZSxpKXt2YXIgcyxvPXRbaS5jYWNoZV07cmV0dXJuIG8mJihzPXJbaS5jYWNoZV18fGkudG8mJmkudG8oci5fcmdiYSl8fFtdLGgoaS5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKG9bdC5pZHhdIT1udWxsKXJldHVybiBuPW9bdC5pZHhdPT09c1t0LmlkeF0sbn0pKSxufSksbn0sX3NwYWNlOmZ1bmN0aW9uKCl7dmFyIGU9W10sdD10aGlzO3JldHVybiBoKHUsZnVuY3Rpb24obixyKXt0W3IuY2FjaGVdJiZlLnB1c2gobil9KSxlLnBvcCgpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKGUsdCl7dmFyIG49byhlKSxyPW4uX3NwYWNlKCksaT11W3JdLHM9dGhpcy5hbHBoYSgpPT09MD9vKCJ0cmFuc3BhcmVudCIpOnRoaXMsZj1zW2kuY2FjaGVdfHxpLnRvKHMuX3JnYmEpLGw9Zi5zbGljZSgpO3JldHVybiBuPW5baS5jYWNoZV0saChpLnByb3BzLGZ1bmN0aW9uKGUscil7dmFyIGk9ci5pZHgscz1mW2ldLG89bltpXSx1PWFbci50eXBlXXx8e307aWYobz09PW51bGwpcmV0dXJuO3M9PT1udWxsP2xbaV09bzoodS5tb2QmJihvLXM+dS5tb2QvMj9zKz11Lm1vZDpzLW8+dS5tb2QvMiYmKHMtPXUubW9kKSksbFtpXT1wKChvLXMpKnQrcyxyKSl9KSx0aGlzW3JdKGwpfSxibGVuZDpmdW5jdGlvbihlKXtpZih0aGlzLl9yZ2JhWzNdPT09MSlyZXR1cm4gdGhpczt2YXIgbj10aGlzLl9yZ2JhLnNsaWNlKCkscj1uLnBvcCgpLGk9byhlKS5fcmdiYTtyZXR1cm4gbyh0Lm1hcChuLGZ1bmN0aW9uKGUsdCl7cmV0dXJuKDEtcikqaVt0XStyKmV9KSl9LHRvUmdiYVN0cmluZzpmdW5jdGlvbigpe3ZhciBlPSJyZ2JhKCIsbj10Lm1hcCh0aGlzLl9yZ2JhLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PW51bGw/dD4yPzE6MDplfSk7cmV0dXJuIG5bM109PT0xJiYobi5wb3AoKSxlPSJyZ2IoIiksZStuLmpvaW4oKSsiKSJ9LHRvSHNsYVN0cmluZzpmdW5jdGlvbigpe3ZhciBlPSJoc2xhKCIsbj10Lm1hcCh0aGlzLmhzbGEoKSxmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsJiYoZT10PjI/MTowKSx0JiZ0PDMmJihlPU1hdGgucm91bmQoZSoxMDApKyIlIiksZX0pO3JldHVybiBuWzNdPT09MSYmKG4ucG9wKCksZT0iaHNsKCIpLGUrbi5qb2luKCkrIikifSx0b0hleFN0cmluZzpmdW5jdGlvbihlKXt2YXIgbj10aGlzLl9yZ2JhLnNsaWNlKCkscj1uLnBvcCgpO3JldHVybiBlJiZuLnB1c2gofn4ocioyNTUpKSwiIyIrdC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm4gZT0oZXx8MCkudG9TdHJpbmcoMTYpLGUubGVuZ3RoPT09MT8iMCIrZTplfSkuam9pbigiIil9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JnYmFbM109PT0wPyJ0cmFuc3BhcmVudCI6dGhpcy50b1JnYmFTdHJpbmcoKX19KSxvLmZuLnBhcnNlLnByb3RvdHlwZT1vLmZuLHUuaHNsYS50bz1mdW5jdGlvbihlKXtpZihlWzBdPT1udWxsfHxlWzFdPT1udWxsfHxlWzJdPT1udWxsKXJldHVybltudWxsLG51bGwsbnVsbCxlWzNdXTt2YXIgdD1lWzBdLzI1NSxuPWVbMV0vMjU1LHI9ZVsyXS8yNTUsaT1lWzNdLHM9TWF0aC5tYXgodCxuLHIpLG89TWF0aC5taW4odCxuLHIpLHU9cy1vLGE9cytvLGY9YSouNSxsLGM7cmV0dXJuIG89PT1zP2w9MDp0PT09cz9sPTYwKihuLXIpL3UrMzYwOm49PT1zP2w9NjAqKHItdCkvdSsxMjA6bD02MCoodC1uKS91KzI0MCxmPT09MHx8Zj09PTE/Yz1mOmY8PS41P2M9dS9hOmM9dS8oMi1hKSxbTWF0aC5yb3VuZChsKSUzNjAsYyxmLGk9PW51bGw/MTppXX0sdS5oc2xhLmZyb209ZnVuY3Rpb24oZSl7aWYoZVswXT09bnVsbHx8ZVsxXT09bnVsbHx8ZVsyXT09bnVsbClyZXR1cm5bbnVsbCxudWxsLG51bGwsZVszXV07dmFyIHQ9ZVswXS8zNjAsbj1lWzFdLHI9ZVsyXSxpPWVbM10scz1yPD0uNT9yKigxK24pOnIrbi1yKm4sbz0yKnItcztyZXR1cm5bTWF0aC5yb3VuZCh2KG8scyx0KzEvMykqMjU1KSxNYXRoLnJvdW5kKHYobyxzLHQpKjI1NSksTWF0aC5yb3VuZCh2KG8scyx0LTEvMykqMjU1KSxpXX0saCh1LGZ1bmN0aW9uKGUscil7dmFyIHM9ci5wcm9wcyx1PXIuY2FjaGUsYT1yLnRvLGY9ci5mcm9tO28uZm5bZV09ZnVuY3Rpb24oZSl7YSYmIXRoaXNbdV0mJih0aGlzW3VdPWEodGhpcy5fcmdiYSkpO2lmKGU9PT1uKXJldHVybiB0aGlzW3VdLnNsaWNlKCk7dmFyIHIsaT10LnR5cGUoZSksbD1pPT09ImFycmF5Inx8aT09PSJvYmplY3QiP2U6YXJndW1lbnRzLGM9dGhpc1t1XS5zbGljZSgpO3JldHVybiBoKHMsZnVuY3Rpb24oZSx0KXt2YXIgbj1sW2k9PT0ib2JqZWN0Ij9lOnQuaWR4XTtuPT1udWxsJiYobj1jW3QuaWR4XSksY1t0LmlkeF09cChuLHQpfSksZj8ocj1vKGYoYykpLHJbdV09YyxyKTpvKGMpfSxoKHMsZnVuY3Rpb24obixyKXtpZihvLmZuW25dKXJldHVybjtvLmZuW25dPWZ1bmN0aW9uKHMpe3ZhciBvPXQudHlwZShzKSx1PW49PT0iYWxwaGEiP3RoaXMuX2hzbGE/ImhzbGEiOiJyZ2JhIjplLGE9dGhpc1t1XSgpLGY9YVtyLmlkeF0sbDtyZXR1cm4gbz09PSJ1bmRlZmluZWQiP2Y6KG89PT0iZnVuY3Rpb24iJiYocz1zLmNhbGwodGhpcyxmKSxvPXQudHlwZShzKSkscz09bnVsbCYmci5lbXB0eT90aGlzOihvPT09InN0cmluZyImJihsPWkuZXhlYyhzKSxsJiYocz1mK3BhcnNlRmxvYXQobFsyXSkqKGxbMV09PT0iKyI/MTotMSkpKSxhW3IuaWR4XT1zLHRoaXNbdV0oYSkpKX19KX0pLGgocixmdW5jdGlvbihlLG4pe3QuY3NzSG9va3Nbbl09e3NldDpmdW5jdGlvbihlLHIpe3ZhciBpLHMsdT0iIjtpZih0LnR5cGUocikhPT0ic3RyaW5nInx8KGk9ZChyKSkpe3I9byhpfHxyKTtpZighZi5yZ2JhJiZyLl9yZ2JhWzNdIT09MSl7cz1uPT09ImJhY2tncm91bmRDb2xvciI/ZS5wYXJlbnROb2RlOmU7d2hpbGUoKHU9PT0iInx8dT09PSJ0cmFuc3BhcmVudCIpJiZzJiZzLnN0eWxlKXRyeXt1PXQuY3NzKHMsImJhY2tncm91bmRDb2xvciIpLHM9cy5wYXJlbnROb2RlfWNhdGNoKGEpe31yPXIuYmxlbmQodSYmdSE9PSJ0cmFuc3BhcmVudCI/dToiX2RlZmF1bHQiKX1yPXIudG9SZ2JhU3RyaW5nKCl9dHJ5e2Uuc3R5bGVbbl09cn1jYXRjaChsKXt9fX0sdC5meC5zdGVwW25dPWZ1bmN0aW9uKGUpe2UuY29sb3JJbml0fHwoZS5zdGFydD1vKGUuZWxlbSxuKSxlLmVuZD1vKGUuZW5kKSxlLmNvbG9ySW5pdD0hMCksdC5jc3NIb29rc1tuXS5zZXQoZS5lbGVtLGUuc3RhcnQudHJhbnNpdGlvbihlLmVuZCxlLnBvcykpfX0pLHQuY3NzSG9va3MuYm9yZGVyQ29sb3I9e2V4cGFuZDpmdW5jdGlvbihlKXt2YXIgdD17fTtyZXR1cm4gaChbIlRvcCIsIlJpZ2h0IiwiQm90dG9tIiwiTGVmdCJdLGZ1bmN0aW9uKG4scil7dFsiYm9yZGVyIityKyJDb2xvciJdPWV9KSx0fX0sYz10LkNvbG9yLm5hbWVzPXthcXVhOiIjMDBmZmZmIixibGFjazoiIzAwMDAwMCIsYmx1ZToiIzAwMDBmZiIsZnVjaHNpYToiI2ZmMDBmZiIsZ3JheToiIzgwODA4MCIsZ3JlZW46IiMwMDgwMDAiLGxpbWU6IiMwMGZmMDAiLG1hcm9vbjoiIzgwMDAwMCIsbmF2eToiIzAwMDA4MCIsb2xpdmU6IiM4MDgwMDAiLHB1cnBsZToiIzgwMDA4MCIscmVkOiIjZmYwMDAwIixzaWx2ZXI6IiNjMGMwYzAiLHRlYWw6IiMwMDgwODAiLHdoaXRlOiIjZmZmZmZmIix5ZWxsb3c6IiNmZmZmMDAiLHRyYW5zcGFyZW50OltudWxsLG51bGwsbnVsbCwwXSxfZGVmYXVsdDoiI2ZmZmZmZiJ9fShqUXVlcnkpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gaSgpe3ZhciB0PXRoaXMub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz90aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLG51bGwpOnRoaXMuY3VycmVudFN0eWxlLG49e30scixpO2lmKHQmJnQubGVuZ3RoJiZ0WzBdJiZ0W3RbMF1dKXtpPXQubGVuZ3RoO3doaWxlKGktLSlyPXRbaV0sdHlwZW9mIHRbcl09PSJzdHJpbmciJiYobltlLmNhbWVsQ2FzZShyKV09dFtyXSl9ZWxzZSBmb3IociBpbiB0KXR5cGVvZiB0W3JdPT0ic3RyaW5nIiYmKG5bcl09dFtyXSk7cmV0dXJuIG59ZnVuY3Rpb24gcyh0LG4pe3ZhciBpPXt9LHMsbztmb3IocyBpbiBuKW89bltzXSx0W3NdIT09byYmIXJbc10mJihlLmZ4LnN0ZXBbc118fCFpc05hTihwYXJzZUZsb2F0KG8pKSkmJihpW3NdPW8pO3JldHVybiBpfXZhciBuPVsiYWRkIiwicmVtb3ZlIiwidG9nZ2xlIl0scj17Ym9yZGVyOjEsYm9yZGVyQm90dG9tOjEsYm9yZGVyQ29sb3I6MSxib3JkZXJMZWZ0OjEsYm9yZGVyUmlnaHQ6MSxib3JkZXJUb3A6MSxib3JkZXJXaWR0aDoxLG1hcmdpbjoxLHBhZGRpbmc6MX07ZS5lYWNoKFsiYm9yZGVyTGVmdFN0eWxlIiwiYm9yZGVyUmlnaHRTdHlsZSIsImJvcmRlckJvdHRvbVN0eWxlIiwiYm9yZGVyVG9wU3R5bGUiXSxmdW5jdGlvbih0LG4pe2UuZnguc3RlcFtuXT1mdW5jdGlvbihlKXtpZihlLmVuZCE9PSJub25lIiYmIWUuc2V0QXR0cnx8ZS5wb3M9PT0xJiYhZS5zZXRBdHRyKWpRdWVyeS5zdHlsZShlLmVsZW0sbixlLmVuZCksZS5zZXRBdHRyPSEwfX0pLGUuZWZmZWN0cy5hbmltYXRlQ2xhc3M9ZnVuY3Rpb24odCxyLG8sdSl7dmFyIGE9ZS5zcGVlZChyLG8sdSk7cmV0dXJuIHRoaXMucXVldWUoZnVuY3Rpb24oKXt2YXIgcj1lKHRoaXMpLG89ci5hdHRyKCJjbGFzcyIpfHwiIix1LGY9YS5jaGlsZHJlbj9yLmZpbmQoIioiKS5hbmRTZWxmKCk6cjtmPWYubWFwKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTtyZXR1cm57ZWw6dCxzdGFydDppLmNhbGwodGhpcyl9fSksdT1mdW5jdGlvbigpe2UuZWFjaChuLGZ1bmN0aW9uKGUsbil7dFtuXSYmcltuKyJDbGFzcyJdKHRbbl0pfSl9LHUoKSxmPWYubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW5kPWkuY2FsbCh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9cyh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksci5hdHRyKCJjbGFzcyIsbyksZj1mLm1hcChmdW5jdGlvbigpe3ZhciB0PXRoaXMsbj1lLkRlZmVycmVkKCkscj1qUXVlcnkuZXh0ZW5kKHt9LGEse3F1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7bi5yZXNvbHZlKHQpfX0pO3JldHVybiB0aGlzLmVsLmFuaW1hdGUodGhpcy5kaWZmLHIpLG4ucHJvbWlzZSgpfSksZS53aGVuLmFwcGx5KGUsZi5nZXQoKSkuZG9uZShmdW5jdGlvbigpe3UoKSxlLmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbDtlLmVhY2godGhpcy5kaWZmLGZ1bmN0aW9uKGUpe3QuY3NzKGUsIiIpfSl9KSxhLmNvbXBsZXRlLmNhbGwoclswXSl9KX0pfSxlLmZuLmV4dGVuZCh7X2FkZENsYXNzOmUuZm4uYWRkQ2xhc3MsYWRkQ2xhc3M6ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIG4/ZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse2FkZDp0fSxuLHIsaSk6dGhpcy5fYWRkQ2xhc3ModCl9LF9yZW1vdmVDbGFzczplLmZuLnJlbW92ZUNsYXNzLHJlbW92ZUNsYXNzOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiBuP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHtyZW1vdmU6dH0sbixyLGkpOnRoaXMuX3JlbW92ZUNsYXNzKHQpfSxfdG9nZ2xlQ2xhc3M6ZS5mbi50b2dnbGVDbGFzcyx0b2dnbGVDbGFzczpmdW5jdGlvbihuLHIsaSxzLG8pe3JldHVybiB0eXBlb2Ygcj09ImJvb2xlYW4ifHxyPT09dD9pP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHI/e2FkZDpufTp7cmVtb3ZlOm59LGkscyxvKTp0aGlzLl90b2dnbGVDbGFzcyhuLHIpOmUuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHt0b2dnbGU6bn0scixpLHMpfSxzd2l0Y2hDbGFzczpmdW5jdGlvbih0LG4scixpLHMpe3JldHVybiBlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOm4scmVtb3ZlOnR9LHIsaSxzKX19KX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIGkodCxuLHIsaSl7ZS5pc1BsYWluT2JqZWN0KHQpJiYobj10LHQ9dC5lZmZlY3QpLHQ9e2VmZmVjdDp0fSxuPT1udWxsJiYobj17fSksZS5pc0Z1bmN0aW9uKG4pJiYoaT1uLHI9bnVsbCxuPXt9KTtpZih0eXBlb2Ygbj09Im51bWJlciJ8fGUuZnguc3BlZWRzW25dKWk9cixyPW4sbj17fTtyZXR1cm4gZS5pc0Z1bmN0aW9uKHIpJiYoaT1yLHI9bnVsbCksbiYmZS5leHRlbmQodCxuKSxyPXJ8fG4uZHVyYXRpb24sdC5kdXJhdGlvbj1lLmZ4Lm9mZj8wOnR5cGVvZiByPT0ibnVtYmVyIj9yOnIgaW4gZS5meC5zcGVlZHM/ZS5meC5zcGVlZHNbcl06ZS5meC5zcGVlZHMuX2RlZmF1bHQsdC5jb21wbGV0ZT1pfHxuLmNvbXBsZXRlLHR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4hdHx8dHlwZW9mIHQ9PSJudW1iZXIifHxlLmZ4LnNwZWVkc1t0XT8hMDp0eXBlb2YgdD09InN0cmluZyImJiFlLmVmZmVjdHMuZWZmZWN0W3RdP24mJmUuZWZmZWN0c1t0XT8hMTohMDohMX1lLmV4dGVuZChlLmVmZmVjdHMse3ZlcnNpb246IjEuOS4yIixzYXZlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXSE9PW51bGwmJmUuZGF0YShyK3Rbbl0sZVswXS5zdHlsZVt0W25dXSl9LHJlc3RvcmU6ZnVuY3Rpb24oZSxuKXt2YXIgaSxzO2ZvcihzPTA7czxuLmxlbmd0aDtzKyspbltzXSE9PW51bGwmJihpPWUuZGF0YShyK25bc10pLGk9PT10JiYoaT0iIiksZS5jc3MobltzXSxpKSl9LHNldE1vZGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdD09PSJ0b2dnbGUiJiYodD1lLmlzKCI6aGlkZGVuIik/InNob3ciOiJoaWRlIiksdH0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3N3aXRjaChlWzBdKXtjYXNlInRvcCI6bj0wO2JyZWFrO2Nhc2UibWlkZGxlIjpuPS41O2JyZWFrO2Nhc2UiYm90dG9tIjpuPTE7YnJlYWs7ZGVmYXVsdDpuPWVbMF0vdC5oZWlnaHR9c3dpdGNoKGVbMV0pe2Nhc2UibGVmdCI6cj0wO2JyZWFrO2Nhc2UiY2VudGVyIjpyPS41O2JyZWFrO2Nhc2UicmlnaHQiOnI9MTticmVhaztkZWZhdWx0OnI9ZVsxXS90LndpZHRofXJldHVybnt4OnIseTpufX0sY3JlYXRlV3JhcHBlcjpmdW5jdGlvbih0KXtpZih0LnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikpcmV0dXJuIHQucGFyZW50KCk7dmFyIG49e3dpZHRoOnQub3V0ZXJXaWR0aCghMCksaGVpZ2h0OnQub3V0ZXJIZWlnaHQoITApLCJmbG9hdCI6dC5jc3MoImZsb2F0Iil9LHI9ZSgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktZWZmZWN0cy13cmFwcGVyIikuY3NzKHtmb250U2l6ZToiMTAwJSIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsbWFyZ2luOjAscGFkZGluZzowfSksaT17d2lkdGg6dC53aWR0aCgpLGhlaWdodDp0LmhlaWdodCgpfSxzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dHJ5e3MuaWR9Y2F0Y2gobyl7cz1kb2N1bWVudC5ib2R5fXJldHVybiB0LndyYXAociksKHRbMF09PT1zfHxlLmNvbnRhaW5zKHRbMF0scykpJiZlKHMpLmZvY3VzKCkscj10LnBhcmVudCgpLHQuY3NzKCJwb3NpdGlvbiIpPT09InN0YXRpYyI/KHIuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSksdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9KSk6KGUuZXh0ZW5kKG4se3Bvc2l0aW9uOnQuY3NzKCJwb3NpdGlvbiIpLHpJbmRleDp0LmNzcygiei1pbmRleCIpfSksZS5lYWNoKFsidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0Il0sZnVuY3Rpb24oZSxyKXtuW3JdPXQuY3NzKHIpLGlzTmFOKHBhcnNlSW50KG5bcl0sMTApKSYmKG5bcl09ImF1dG8iKX0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDowLGxlZnQ6MCxyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIn0pKSx0LmNzcyhpKSxyLmNzcyhuKS5zaG93KCl9LHJlbW92ZVdyYXBwZXI6ZnVuY3Rpb24odCl7dmFyIG49ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gdC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpJiYodC5wYXJlbnQoKS5yZXBsYWNlV2l0aCh0KSwodFswXT09PW58fGUuY29udGFpbnModFswXSxuKSkmJmUobikuZm9jdXMoKSksdH0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gaT1pfHx7fSxlLmVhY2gobixmdW5jdGlvbihlLG4pe3ZhciBzPXQuY3NzVW5pdChuKTtzWzBdPjAmJihpW25dPXNbMF0qcitzWzFdKX0pLGl9fSksZS5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbigpe2Z1bmN0aW9uIGEobil7ZnVuY3Rpb24gdSgpe2UuaXNGdW5jdGlvbihpKSYmaS5jYWxsKHJbMF0pLGUuaXNGdW5jdGlvbihuKSYmbigpfXZhciByPWUodGhpcyksaT10LmNvbXBsZXRlLHM9dC5tb2RlOyhyLmlzKCI6aGlkZGVuIik/cz09PSJoaWRlIjpzPT09InNob3ciKT91KCk6by5jYWxsKHJbMF0sdCx1KX12YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxyPXQubW9kZSxzPXQucXVldWUsbz1lLmVmZmVjdHMuZWZmZWN0W3QuZWZmZWN0XSx1PSFvJiZuJiZlLmVmZmVjdHNbdC5lZmZlY3RdO3JldHVybiBlLmZ4Lm9mZnx8IW8mJiF1P3I/dGhpc1tyXSh0LmR1cmF0aW9uLHQuY29tcGxldGUpOnRoaXMuZWFjaChmdW5jdGlvbigpe3QuY29tcGxldGUmJnQuY29tcGxldGUuY2FsbCh0aGlzKX0pOm8/cz09PSExP3RoaXMuZWFjaChhKTp0aGlzLnF1ZXVlKHN8fCJmeCIsYSk6dS5jYWxsKHRoaXMse29wdGlvbnM6dCxkdXJhdGlvbjp0LmR1cmF0aW9uLGNhbGxiYWNrOnQuY29tcGxldGUsbW9kZTp0Lm1vZGV9KX0sX3Nob3c6ZS5mbi5zaG93LHNob3c6ZnVuY3Rpb24oZSl7aWYocyhlKSlyZXR1cm4gdGhpcy5fc2hvdy5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHQubW9kZT0ic2hvdyIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLHQpfSxfaGlkZTplLmZuLmhpZGUsaGlkZTpmdW5jdGlvbihlKXtpZihzKGUpKXJldHVybiB0aGlzLl9oaWRlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgdD1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gdC5tb2RlPSJoaWRlIix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsdCl9LF9fdG9nZ2xlOmUuZm4udG9nZ2xlLHRvZ2dsZTpmdW5jdGlvbih0KXtpZihzKHQpfHx0eXBlb2YgdD09ImJvb2xlYW4ifHxlLmlzRnVuY3Rpb24odCkpcmV0dXJuIHRoaXMuX190b2dnbGUuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBuPWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBuLm1vZGU9InRvZ2dsZSIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLG4pfSxjc3NVbml0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMuY3NzKHQpLHI9W107cmV0dXJuIGUuZWFjaChbImVtIiwicHgiLCIlIiwicHQiXSxmdW5jdGlvbihlLHQpe24uaW5kZXhPZih0KT4wJiYocj1bcGFyc2VGbG9hdChuKSx0XSl9KSxyfX0pfSgpLGZ1bmN0aW9uKCl7dmFyIHQ9e307ZS5lYWNoKFsiUXVhZCIsIkN1YmljIiwiUXVhcnQiLCJRdWludCIsIkV4cG8iXSxmdW5jdGlvbihlLG4pe3Rbbl09ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgucG93KHQsZSsyKX19KSxlLmV4dGVuZCh0LHtTaW5lOmZ1bmN0aW9uKGUpe3JldHVybiAxLU1hdGguY29zKGUqTWF0aC5QSS8yKX0sQ2lyYzpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLnNxcnQoMS1lKmUpfSxFbGFzdGljOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09MHx8ZT09PTE/ZTotTWF0aC5wb3coMiw4KihlLTEpKSpNYXRoLnNpbigoKGUtMSkqODAtNy41KSpNYXRoLlBJLzE1KX0sQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gZSplKigzKmUtMil9LEJvdW5jZTpmdW5jdGlvbihlKXt2YXIgdCxuPTQ7d2hpbGUoZTwoKHQ9TWF0aC5wb3coMiwtLW4pKS0xKS8xMSk7cmV0dXJuIDEvTWF0aC5wb3coNCwzLW4pLTcuNTYyNSpNYXRoLnBvdygodCozLTIpLzIyLWUsMil9fSksZS5lYWNoKHQsZnVuY3Rpb24odCxuKXtlLmVhc2luZ1siZWFzZUluIit0XT1uLGUuZWFzaW5nWyJlYXNlT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gMS1uKDEtZSl9LGUuZWFzaW5nWyJlYXNlSW5PdXQiK3RdPWZ1bmN0aW9uKGUpe3JldHVybiBlPC41P24oZSoyKS8yOjEtbihlKi0yKzIpLzJ9fSl9KCl9KGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49L3VwfGRvd258dmVydGljYWwvLHI9L3VwfGxlZnR8dmVydGljYWx8aG9yaXpvbnRhbC87ZS5lZmZlY3RzLmVmZmVjdC5ibGluZD1mdW5jdGlvbih0LGkpe3ZhciBzPWUodGhpcyksbz1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSx1PWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHwiaGlkZSIpLGE9dC5kaXJlY3Rpb258fCJ1cCIsZj1uLnRlc3QoYSksbD1mPyJoZWlnaHQiOiJ3aWR0aCIsYz1mPyJ0b3AiOiJsZWZ0IixoPXIudGVzdChhKSxwPXt9LGQ9dT09PSJzaG93Iix2LG0sZztzLnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIik/ZS5lZmZlY3RzLnNhdmUocy5wYXJlbnQoKSxvKTplLmVmZmVjdHMuc2F2ZShzLG8pLHMuc2hvdygpLHY9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIocykuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLG09dltsXSgpLGc9cGFyc2VGbG9hdCh2LmNzcyhjKSl8fDAscFtsXT1kP206MCxofHwocy5jc3MoZj8iYm90dG9tIjoicmlnaHQiLDApLmNzcyhmPyJ0b3AiOiJsZWZ0IiwiYXV0byIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIn0pLHBbY109ZD9nOm0rZyksZCYmKHYuY3NzKGwsMCksaHx8di5jc3MoYyxnK20pKSx2LmFuaW1hdGUocCx7ZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcscXVldWU6ITEsY29tcGxldGU6ZnVuY3Rpb24oKXt1PT09ImhpZGUiJiZzLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShzLG8pLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHMpLGkoKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuYm91bmNlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJlZmZlY3QiKSxvPXM9PT0iaGlkZSIsdT1zPT09InNob3ciLGE9dC5kaXJlY3Rpb258fCJ1cCIsZj10LmRpc3RhbmNlLGw9dC50aW1lc3x8NSxjPWwqMisodXx8bz8xOjApLGg9dC5kdXJhdGlvbi9jLHA9dC5lYXNpbmcsZD1hPT09InVwInx8YT09PSJkb3duIj8idG9wIjoibGVmdCIsdj1hPT09InVwInx8YT09PSJsZWZ0IixtLGcseSxiPXIucXVldWUoKSx3PWIubGVuZ3RoOyh1fHxvKSYmaS5wdXNoKCJvcGFjaXR5IiksZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKSxmfHwoZj1yW2Q9PT0idG9wIj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oKS8zKSx1JiYoeT17b3BhY2l0eToxfSx5W2RdPTAsci5jc3MoIm9wYWNpdHkiLDApLmNzcyhkLHY/LWYqMjpmKjIpLmFuaW1hdGUoeSxoLHApKSxvJiYoZi89TWF0aC5wb3coMixsLTEpKSx5PXt9LHlbZF09MDtmb3IobT0wO208bDttKyspZz17fSxnW2RdPSh2PyItPSI6Iis9IikrZixyLmFuaW1hdGUoZyxoLHApLmFuaW1hdGUoeSxoLHApLGY9bz9mKjI6Zi8yO28mJihnPXtvcGFjaXR5OjB9LGdbZF09KHY/Ii09IjoiKz0iKStmLHIuYW5pbWF0ZShnLGgscCkpLHIucXVldWUoZnVuY3Rpb24oKXtvJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX0pLHc+MSYmYi5zcGxpY2UuYXBwbHkoYixbMSwwXS5jb25jYXQoYi5zcGxpY2UodyxjKzEpKSksci5kZXF1ZXVlKCl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmNsaXA9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImhpZGUiKSxvPXM9PT0ic2hvdyIsdT10LmRpcmVjdGlvbnx8InZlcnRpY2FsIixhPXU9PT0idmVydGljYWwiLGY9YT8iaGVpZ2h0Ijoid2lkdGgiLGw9YT8idG9wIjoibGVmdCIsYz17fSxoLHAsZDtlLmVmZmVjdHMuc2F2ZShyLGkpLHIuc2hvdygpLGg9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIocikuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLHA9clswXS50YWdOYW1lPT09IklNRyI/aDpyLGQ9cFtmXSgpLG8mJihwLmNzcyhmLDApLHAuY3NzKGwsZC8yKSksY1tmXT1vP2Q6MCxjW2xdPW8/MDpkLzIscC5hbmltYXRlKGMse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7b3x8ci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmRyb3A9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIm9wYWNpdHkiLCJoZWlnaHQiLCJ3aWR0aCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIiksbz1zPT09InNob3ciLHU9dC5kaXJlY3Rpb258fCJsZWZ0IixhPXU9PT0idXAifHx1PT09ImRvd24iPyJ0b3AiOiJsZWZ0IixmPXU9PT0idXAifHx1PT09ImxlZnQiPyJwb3MiOiJuZWciLGw9e29wYWNpdHk6bz8xOjB9LGM7ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKSxjPXQuZGlzdGFuY2V8fHJbYT09PSJ0b3AiPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSghMCkvMixvJiZyLmNzcygib3BhY2l0eSIsMCkuY3NzKGEsZj09PSJwb3MiPy1jOmMpLGxbYV09KG8/Zj09PSJwb3MiPyIrPSI6Ii09IjpmPT09InBvcyI/Ii09IjoiKz0iKStjLHIuYW5pbWF0ZShsLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe3M9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5leHBsb2RlPWZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24geSgpe2MucHVzaCh0aGlzKSxjLmxlbmd0aD09PXIqaSYmYigpfWZ1bmN0aW9uIGIoKXtzLmNzcyh7dmlzaWJpbGl0eToidmlzaWJsZSJ9KSxlKGMpLnJlbW92ZSgpLHV8fHMuaGlkZSgpLG4oKX12YXIgcj10LnBpZWNlcz9NYXRoLnJvdW5kKE1hdGguc3FydCh0LnBpZWNlcykpOjMsaT1yLHM9ZSh0aGlzKSxvPWUuZWZmZWN0cy5zZXRNb2RlKHMsdC5tb2RlfHwiaGlkZSIpLHU9bz09PSJzaG93IixhPXMuc2hvdygpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLm9mZnNldCgpLGY9TWF0aC5jZWlsKHMub3V0ZXJXaWR0aCgpL2kpLGw9TWF0aC5jZWlsKHMub3V0ZXJIZWlnaHQoKS9yKSxjPVtdLGgscCxkLHYsbSxnO2ZvcihoPTA7aDxyO2grKyl7dj1hLnRvcCtoKmwsZz1oLShyLTEpLzI7Zm9yKHA9MDtwPGk7cCsrKWQ9YS5sZWZ0K3AqZixtPXAtKGktMSkvMixzLmNsb25lKCkuYXBwZW5kVG8oImJvZHkiKS53cmFwKCI8ZGl2PjwvZGl2PiIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJ2aXNpYmxlIixsZWZ0Oi1wKmYsdG9wOi1oKmx9KS5wYXJlbnQoKS5hZGRDbGFzcygidWktZWZmZWN0cy1leHBsb2RlIikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLG92ZXJmbG93OiJoaWRkZW4iLHdpZHRoOmYsaGVpZ2h0OmwsbGVmdDpkKyh1P20qZjowKSx0b3A6disodT9nKmw6MCksb3BhY2l0eTp1PzA6MX0pLmFuaW1hdGUoe2xlZnQ6ZCsodT8wOm0qZiksdG9wOnYrKHU/MDpnKmwpLG9wYWNpdHk6dT8xOjB9LHQuZHVyYXRpb258fDUwMCx0LmVhc2luZyx5KX19fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmZhZGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJ0b2dnbGUiKTtyLmFuaW1hdGUoe29wYWNpdHk6aX0se3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOm59KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuZm9sZD1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiaGlkZSIpLG89cz09PSJzaG93Iix1PXM9PT0iaGlkZSIsYT10LnNpemV8fDE1LGY9LyhbMC05XSspJS8uZXhlYyhhKSxsPSEhdC5ob3JpekZpcnN0LGM9byE9PWwsaD1jP1sid2lkdGgiLCJoZWlnaHQiXTpbImhlaWdodCIsIndpZHRoIl0scD10LmR1cmF0aW9uLzIsZCx2LG09e30sZz17fTtlLmVmZmVjdHMuc2F2ZShyLGkpLHIuc2hvdygpLGQ9ZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIocikuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLHY9Yz9bZC53aWR0aCgpLGQuaGVpZ2h0KCldOltkLmhlaWdodCgpLGQud2lkdGgoKV0sZiYmKGE9cGFyc2VJbnQoZlsxXSwxMCkvMTAwKnZbdT8wOjFdKSxvJiZkLmNzcyhsP3toZWlnaHQ6MCx3aWR0aDphfTp7aGVpZ2h0OmEsd2lkdGg6MH0pLG1baFswXV09bz92WzBdOmEsZ1toWzFdXT1vP3ZbMV06MCxkLmFuaW1hdGUobSxwLHQuZWFzaW5nKS5hbmltYXRlKGcscCx0LmVhc2luZyxmdW5jdGlvbigpe3UmJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmhpZ2hsaWdodD1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bImJhY2tncm91bmRJbWFnZSIsImJhY2tncm91bmRDb2xvciIsIm9wYWNpdHkiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwic2hvdyIpLG89e2JhY2tncm91bmRDb2xvcjpyLmNzcygiYmFja2dyb3VuZENvbG9yIil9O3M9PT0iaGlkZSImJihvLm9wYWNpdHk9MCksZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKS5jc3Moe2JhY2tncm91bmRJbWFnZToibm9uZSIsYmFja2dyb3VuZENvbG9yOnQuY29sb3J8fCIjZmZmZjk5In0pLmFuaW1hdGUobyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QucHVsc2F0ZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InNob3ciKSxzPWk9PT0ic2hvdyIsbz1pPT09ImhpZGUiLHU9c3x8aT09PSJoaWRlIixhPSh0LnRpbWVzfHw1KSoyKyh1PzE6MCksZj10LmR1cmF0aW9uL2EsbD0wLGM9ci5xdWV1ZSgpLGg9Yy5sZW5ndGgscDtpZihzfHwhci5pcygiOnZpc2libGUiKSlyLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLGw9MTtmb3IocD0xO3A8YTtwKyspci5hbmltYXRlKHtvcGFjaXR5Omx9LGYsdC5lYXNpbmcpLGw9MS1sO3IuYW5pbWF0ZSh7b3BhY2l0eTpsfSxmLHQuZWFzaW5nKSxyLnF1ZXVlKGZ1bmN0aW9uKCl7byYmci5oaWRlKCksbigpfSksaD4xJiZjLnNwbGljZS5hcHBseShjLFsxLDBdLmNvbmNhdChjLnNwbGljZShoLGErMSkpKSxyLmRlcXVldWUoKX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QucHVmZj1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImhpZGUiKSxzPWk9PT0iaGlkZSIsbz1wYXJzZUludCh0LnBlcmNlbnQsMTApfHwxNTAsdT1vLzEwMCxhPXtoZWlnaHQ6ci5oZWlnaHQoKSx3aWR0aDpyLndpZHRoKCksb3V0ZXJIZWlnaHQ6ci5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6ci5vdXRlcldpZHRoKCl9O2UuZXh0ZW5kKHQse2VmZmVjdDoic2NhbGUiLHF1ZXVlOiExLGZhZGU6ITAsbW9kZTppLGNvbXBsZXRlOm4scGVyY2VudDpzP286MTAwLGZyb206cz9hOntoZWlnaHQ6YS5oZWlnaHQqdSx3aWR0aDphLndpZHRoKnUsb3V0ZXJIZWlnaHQ6YS5vdXRlckhlaWdodCp1LG91dGVyV2lkdGg6YS5vdXRlcldpZHRoKnV9fSksci5lZmZlY3QodCl9LGUuZWZmZWN0cy5lZmZlY3Quc2NhbGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5leHRlbmQoITAse30sdCkscz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImVmZmVjdCIpLG89cGFyc2VJbnQodC5wZXJjZW50LDEwKXx8KHBhcnNlSW50KHQucGVyY2VudCwxMCk9PT0wPzA6cz09PSJoaWRlIj8wOjEwMCksdT10LmRpcmVjdGlvbnx8ImJvdGgiLGE9dC5vcmlnaW4sZj17aGVpZ2h0OnIuaGVpZ2h0KCksd2lkdGg6ci53aWR0aCgpLG91dGVySGVpZ2h0OnIub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOnIub3V0ZXJXaWR0aCgpfSxsPXt5OnUhPT0iaG9yaXpvbnRhbCI/by8xMDA6MSx4OnUhPT0idmVydGljYWwiP28vMTAwOjF9O2kuZWZmZWN0PSJzaXplIixpLnF1ZXVlPSExLGkuY29tcGxldGU9bixzIT09ImVmZmVjdCImJihpLm9yaWdpbj1hfHxbIm1pZGRsZSIsImNlbnRlciJdLGkucmVzdG9yZT0hMCksaS5mcm9tPXQuZnJvbXx8KHM9PT0ic2hvdyI/e2hlaWdodDowLHdpZHRoOjAsb3V0ZXJIZWlnaHQ6MCxvdXRlcldpZHRoOjB9OmYpLGkudG89e2hlaWdodDpmLmhlaWdodCpsLnksd2lkdGg6Zi53aWR0aCpsLngsb3V0ZXJIZWlnaHQ6Zi5vdXRlckhlaWdodCpsLnksb3V0ZXJXaWR0aDpmLm91dGVyV2lkdGgqbC54fSxpLmZhZGUmJihzPT09InNob3ciJiYoaS5mcm9tLm9wYWNpdHk9MCxpLnRvLm9wYWNpdHk9MSkscz09PSJoaWRlIiYmKGkuZnJvbS5vcGFjaXR5PTEsaS50by5vcGFjaXR5PTApKSxyLmVmZmVjdChpKX0sZS5lZmZlY3RzLmVmZmVjdC5zaXplPWZ1bmN0aW9uKHQsbil7dmFyIHIsaSxzLG89ZSh0aGlzKSx1PVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGE9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIm92ZXJmbG93Iiwib3BhY2l0eSJdLGY9WyJ3aWR0aCIsImhlaWdodCIsIm92ZXJmbG93Il0sbD1bImZvbnRTaXplIl0sYz1bImJvcmRlclRvcFdpZHRoIiwiYm9yZGVyQm90dG9tV2lkdGgiLCJwYWRkaW5nVG9wIiwicGFkZGluZ0JvdHRvbSJdLGg9WyJib3JkZXJMZWZ0V2lkdGgiLCJib3JkZXJSaWdodFdpZHRoIiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiXSxwPWUuZWZmZWN0cy5zZXRNb2RlKG8sdC5tb2RlfHwiZWZmZWN0IiksZD10LnJlc3RvcmV8fHAhPT0iZWZmZWN0Iix2PXQuc2NhbGV8fCJib3RoIixtPXQub3JpZ2lufHxbIm1pZGRsZSIsImNlbnRlciJdLGc9by5jc3MoInBvc2l0aW9uIikseT1kP3U6YSxiPXtoZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTtwPT09InNob3ciJiZvLnNob3coKSxyPXtoZWlnaHQ6by5oZWlnaHQoKSx3aWR0aDpvLndpZHRoKCksb3V0ZXJIZWlnaHQ6by5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6by5vdXRlcldpZHRoKCl9LHQubW9kZT09PSJ0b2dnbGUiJiZwPT09InNob3ciPyhvLmZyb209dC50b3x8YixvLnRvPXQuZnJvbXx8cik6KG8uZnJvbT10LmZyb218fChwPT09InNob3ciP2I6ciksby50bz10LnRvfHwocD09PSJoaWRlIj9iOnIpKSxzPXtmcm9tOnt5Om8uZnJvbS5oZWlnaHQvci5oZWlnaHQseDpvLmZyb20ud2lkdGgvci53aWR0aH0sdG86e3k6by50by5oZWlnaHQvci5oZWlnaHQseDpvLnRvLndpZHRoL3Iud2lkdGh9fTtpZih2PT09ImJveCJ8fHY9PT0iYm90aCIpcy5mcm9tLnkhPT1zLnRvLnkmJih5PXkuY29uY2F0KGMpLG8uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGMscy5mcm9tLnksby5mcm9tKSxvLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sYyxzLnRvLnksby50bykpLHMuZnJvbS54IT09cy50by54JiYoeT15LmNvbmNhdChoKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxoLHMuZnJvbS54LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGgscy50by54LG8udG8pKTsodj09PSJjb250ZW50Inx8dj09PSJib3RoIikmJnMuZnJvbS55IT09cy50by55JiYoeT15LmNvbmNhdChsKS5jb25jYXQoZiksby5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sbCxzLmZyb20ueSxvLmZyb20pLG8udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxsLHMudG8ueSxvLnRvKSksZS5lZmZlY3RzLnNhdmUobyx5KSxvLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKSxvLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4iKS5jc3Moby5mcm9tKSxtJiYoaT1lLmVmZmVjdHMuZ2V0QmFzZWxpbmUobSxyKSxvLmZyb20udG9wPShyLm91dGVySGVpZ2h0LW8ub3V0ZXJIZWlnaHQoKSkqaS55LG8uZnJvbS5sZWZ0PShyLm91dGVyV2lkdGgtby5vdXRlcldpZHRoKCkpKmkueCxvLnRvLnRvcD0oci5vdXRlckhlaWdodC1vLnRvLm91dGVySGVpZ2h0KSppLnksby50by5sZWZ0PShyLm91dGVyV2lkdGgtby50by5vdXRlcldpZHRoKSppLngpLG8uY3NzKG8uZnJvbSk7aWYodj09PSJjb250ZW50Inx8dj09PSJib3RoIiljPWMuY29uY2F0KFsibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIl0pLmNvbmNhdChsKSxoPWguY29uY2F0KFsibWFyZ2luTGVmdCIsIm1hcmdpblJpZ2h0Il0pLGY9dS5jb25jYXQoYykuY29uY2F0KGgpLG8uZmluZCgiKlt3aWR0aF0iKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49ZSh0aGlzKSxyPXtoZWlnaHQ6bi5oZWlnaHQoKSx3aWR0aDpuLndpZHRoKCksb3V0ZXJIZWlnaHQ6bi5vdXRlckhlaWdodCgpLG91dGVyV2lkdGg6bi5vdXRlcldpZHRoKCl9O2QmJmUuZWZmZWN0cy5zYXZlKG4sZiksbi5mcm9tPXtoZWlnaHQ6ci5oZWlnaHQqcy5mcm9tLnksd2lkdGg6ci53aWR0aCpzLmZyb20ueCxvdXRlckhlaWdodDpyLm91dGVySGVpZ2h0KnMuZnJvbS55LG91dGVyV2lkdGg6ci5vdXRlcldpZHRoKnMuZnJvbS54fSxuLnRvPXtoZWlnaHQ6ci5oZWlnaHQqcy50by55LHdpZHRoOnIud2lkdGgqcy50by54LG91dGVySGVpZ2h0OnIuaGVpZ2h0KnMudG8ueSxvdXRlcldpZHRoOnIud2lkdGgqcy50by54fSxzLmZyb20ueSE9PXMudG8ueSYmKG4uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihuLGMscy5mcm9tLnksbi5mcm9tKSxuLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG4sYyxzLnRvLnksbi50bykpLHMuZnJvbS54IT09cy50by54JiYobi5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG4saCxzLmZyb20ueCxuLmZyb20pLG4udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixoLHMudG8ueCxuLnRvKSksbi5jc3Mobi5mcm9tKSxuLmFuaW1hdGUobi50byx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7ZCYmZS5lZmZlY3RzLnJlc3RvcmUobixmKX0pfSk7by5hbmltYXRlKG8udG8se3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7by50by5vcGFjaXR5PT09MCYmby5jc3MoIm9wYWNpdHkiLG8uZnJvbS5vcGFjaXR5KSxwPT09ImhpZGUiJiZvLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShvLHkpLGR8fChnPT09InN0YXRpYyI/by5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsdG9wOm8udG8udG9wLGxlZnQ6by50by5sZWZ0fSk6ZS5lYWNoKFsidG9wIiwibGVmdCJdLGZ1bmN0aW9uKGUsdCl7by5jc3ModCxmdW5jdGlvbih0LG4pe3ZhciByPXBhcnNlSW50KG4sMTApLGk9ZT9vLnRvLmxlZnQ6by50by50b3A7cmV0dXJuIG49PT0iYXV0byI/aSsicHgiOnIraSsicHgifSl9KSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobyksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5zaGFrZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiZWZmZWN0Iiksbz10LmRpcmVjdGlvbnx8ImxlZnQiLHU9dC5kaXN0YW5jZXx8MjAsYT10LnRpbWVzfHwzLGY9YSoyKzEsbD1NYXRoLnJvdW5kKHQuZHVyYXRpb24vZiksYz1vPT09InVwInx8bz09PSJkb3duIj8idG9wIjoibGVmdCIsaD1vPT09InVwInx8bz09PSJsZWZ0IixwPXt9LGQ9e30sdj17fSxtLGc9ci5xdWV1ZSgpLHk9Zy5sZW5ndGg7ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKSxwW2NdPShoPyItPSI6Iis9IikrdSxkW2NdPShoPyIrPSI6Ii09IikrdSoyLHZbY109KGg/Ii09IjoiKz0iKSt1KjIsci5hbmltYXRlKHAsbCx0LmVhc2luZyk7Zm9yKG09MTttPGE7bSsrKXIuYW5pbWF0ZShkLGwsdC5lYXNpbmcpLmFuaW1hdGUodixsLHQuZWFzaW5nKTtyLmFuaW1hdGUoZCxsLHQuZWFzaW5nKS5hbmltYXRlKHAsbC8yLHQuZWFzaW5nKS5xdWV1ZShmdW5jdGlvbigpe3M9PT0iaGlkZSImJnIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfSkseT4xJiZnLnNwbGljZS5hcHBseShnLFsxLDBdLmNvbmNhdChnLnNwbGljZSh5LGYrMSkpKSxyLmRlcXVldWUoKX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3Quc2xpZGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIndpZHRoIiwiaGVpZ2h0Il0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InNob3ciKSxvPXM9PT0ic2hvdyIsdT10LmRpcmVjdGlvbnx8ImxlZnQiLGE9dT09PSJ1cCJ8fHU9PT0iZG93biI/InRvcCI6ImxlZnQiLGY9dT09PSJ1cCJ8fHU9PT0ibGVmdCIsbCxjPXt9O2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksbD10LmRpc3RhbmNlfHxyW2E9PT0idG9wIj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oITApLGUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxvJiZyLmNzcyhhLGY/aXNOYU4obCk/Ii0iK2w6LWw6bCksY1thXT0obz9mPyIrPSI6Ii09IjpmPyItPSI6Iis9IikrbCxyLmFuaW1hdGUoYyx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QudHJhbnNmZXI9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZSh0LnRvKSxzPWkuY3NzKCJwb3NpdGlvbiIpPT09ImZpeGVkIixvPWUoImJvZHkiKSx1PXM/by5zY3JvbGxUb3AoKTowLGE9cz9vLnNjcm9sbExlZnQoKTowLGY9aS5vZmZzZXQoKSxsPXt0b3A6Zi50b3AtdSxsZWZ0OmYubGVmdC1hLGhlaWdodDppLmlubmVySGVpZ2h0KCksd2lkdGg6aS5pbm5lcldpZHRoKCl9LGM9ci5vZmZzZXQoKSxoPWUoJzxkaXYgY2xhc3M9InVpLWVmZmVjdHMtdHJhbnNmZXIiPjwvZGl2PicpLmFwcGVuZFRvKGRvY3VtZW50LmJvZHkpLmFkZENsYXNzKHQuY2xhc3NOYW1lKS5jc3Moe3RvcDpjLnRvcC11LGxlZnQ6Yy5sZWZ0LWEsaGVpZ2h0OnIuaW5uZXJIZWlnaHQoKSx3aWR0aDpyLmlubmVyV2lkdGgoKSxwb3NpdGlvbjpzPyJmaXhlZCI6ImFic29sdXRlIn0pLmFuaW1hdGUobCx0LmR1cmF0aW9uLHQuZWFzaW5nLGZ1bmN0aW9uKCl7aC5yZW1vdmUoKSxuKCl9KX19KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery.jeditable.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCQpeyQuZm4uZWRpdGFibGU9ZnVuY3Rpb24odGFyZ2V0LG9wdGlvbnMpe2lmKCdkaXNhYmxlJz09dGFyZ2V0KXskKHRoaXMpLmRhdGEoJ2Rpc2FibGVkLmVkaXRhYmxlJyx0cnVlKTtyZXR1cm47fQppZignZW5hYmxlJz09dGFyZ2V0KXskKHRoaXMpLmRhdGEoJ2Rpc2FibGVkLmVkaXRhYmxlJyxmYWxzZSk7cmV0dXJuO30KaWYoJ2Rlc3Ryb3knPT10YXJnZXQpeyQodGhpcykudW5iaW5kKCQodGhpcykuZGF0YSgnZXZlbnQuZWRpdGFibGUnKSkucmVtb3ZlRGF0YSgnZGlzYWJsZWQuZWRpdGFibGUnKS5yZW1vdmVEYXRhKCdldmVudC5lZGl0YWJsZScpO3JldHVybjt9CnZhciBzZXR0aW5ncz0kLmV4dGVuZCh7fSwkLmZuLmVkaXRhYmxlLmRlZmF1bHRzLHt0YXJnZXQ6dGFyZ2V0fSxvcHRpb25zKTt2YXIgcGx1Z2luPSQuZWRpdGFibGUudHlwZXNbc2V0dGluZ3MudHlwZV0ucGx1Z2lufHxmdW5jdGlvbigpe307dmFyIHN1Ym1pdD0kLmVkaXRhYmxlLnR5cGVzW3NldHRpbmdzLnR5cGVdLnN1Ym1pdHx8ZnVuY3Rpb24oKXt9O3ZhciBidXR0b25zPSQuZWRpdGFibGUudHlwZXNbc2V0dGluZ3MudHlwZV0uYnV0dG9uc3x8JC5lZGl0YWJsZS50eXBlc1snZGVmYXVsdHMnXS5idXR0b25zO3ZhciBjb250ZW50PSQuZWRpdGFibGUudHlwZXNbc2V0dGluZ3MudHlwZV0uY29udGVudHx8JC5lZGl0YWJsZS50eXBlc1snZGVmYXVsdHMnXS5jb250ZW50O3ZhciBlbGVtZW50PSQuZWRpdGFibGUudHlwZXNbc2V0dGluZ3MudHlwZV0uZWxlbWVudHx8JC5lZGl0YWJsZS50eXBlc1snZGVmYXVsdHMnXS5lbGVtZW50O3ZhciByZXNldD0kLmVkaXRhYmxlLnR5cGVzW3NldHRpbmdzLnR5cGVdLnJlc2V0fHwkLmVkaXRhYmxlLnR5cGVzWydkZWZhdWx0cyddLnJlc2V0O3ZhciBjYWxsYmFjaz1zZXR0aW5ncy5jYWxsYmFja3x8ZnVuY3Rpb24oKXt9O3ZhciBvbmVkaXQ9c2V0dGluZ3Mub25lZGl0fHxmdW5jdGlvbigpe307dmFyIG9uc3VibWl0PXNldHRpbmdzLm9uc3VibWl0fHxmdW5jdGlvbigpe307dmFyIG9ucmVzZXQ9c2V0dGluZ3Mub25yZXNldHx8ZnVuY3Rpb24oKXt9O3ZhciBvbmVycm9yPXNldHRpbmdzLm9uZXJyb3J8fHJlc2V0O2lmKHNldHRpbmdzLnRvb2x0aXApeyQodGhpcykuYXR0cigndGl0bGUnLHNldHRpbmdzLnRvb2x0aXApO30Kc2V0dGluZ3MuYXV0b3dpZHRoPSdhdXRvJz09c2V0dGluZ3Mud2lkdGg7c2V0dGluZ3MuYXV0b2hlaWdodD0nYXV0byc9PXNldHRpbmdzLmhlaWdodDtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHNlbGY9dGhpczt2YXIgc2F2ZWR3aWR0aD0kKHNlbGYpLndpZHRoKCk7dmFyIHNhdmVkaGVpZ2h0PSQoc2VsZikuaGVpZ2h0KCk7JCh0aGlzKS5kYXRhKCdldmVudC5lZGl0YWJsZScsc2V0dGluZ3MuZXZlbnQpO2lmKCEkLnRyaW0oJCh0aGlzKS5odG1sKCkpKXskKHRoaXMpLmh0bWwoc2V0dGluZ3MucGxhY2Vob2xkZXIpO30KJCh0aGlzKS5iaW5kKHNldHRpbmdzLmV2ZW50LGZ1bmN0aW9uKGUpe2lmKHRydWU9PT0kKHRoaXMpLmRhdGEoJ2Rpc2FibGVkLmVkaXRhYmxlJykpe3JldHVybjt9CmlmKHNlbGYuZWRpdGluZyl7cmV0dXJuO30KaWYoZmFsc2U9PT1vbmVkaXQuYXBwbHkodGhpcyxbc2V0dGluZ3Msc2VsZl0pKXtyZXR1cm47fQplLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTtpZihzZXR0aW5ncy50b29sdGlwKXskKHNlbGYpLnJlbW92ZUF0dHIoJ3RpdGxlJyk7fQppZigwPT0kKHNlbGYpLndpZHRoKCkpe3NldHRpbmdzLndpZHRoPXNhdmVkd2lkdGg7c2V0dGluZ3MuaGVpZ2h0PXNhdmVkaGVpZ2h0O31lbHNle2lmKHNldHRpbmdzLndpZHRoIT0nbm9uZScpe3NldHRpbmdzLndpZHRoPXNldHRpbmdzLmF1dG93aWR0aD8kKHNlbGYpLndpZHRoKCk6c2V0dGluZ3Mud2lkdGg7fQppZihzZXR0aW5ncy5oZWlnaHQhPSdub25lJyl7c2V0dGluZ3MuaGVpZ2h0PXNldHRpbmdzLmF1dG9oZWlnaHQ/JChzZWxmKS5oZWlnaHQoKTpzZXR0aW5ncy5oZWlnaHQ7fX0KaWYoJCh0aGlzKS5odG1sKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oO3wiKS9nLCcnKT09c2V0dGluZ3MucGxhY2Vob2xkZXIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oO3wiKS9nLCcnKSl7JCh0aGlzKS5odG1sKCcnKTt9CnNlbGYuZWRpdGluZz10cnVlO3NlbGYucmV2ZXJ0PSQoc2VsZikuaHRtbCgpOyQoc2VsZikuaHRtbCgnJyk7dmFyIGZvcm09JCgnPGZvcm0gLz4nKTtpZihzZXR0aW5ncy5jc3NjbGFzcyl7aWYoJ2luaGVyaXQnPT1zZXR0aW5ncy5jc3NjbGFzcyl7Zm9ybS5hdHRyKCdjbGFzcycsJChzZWxmKS5hdHRyKCdjbGFzcycpKTt9ZWxzZXtmb3JtLmF0dHIoJ2NsYXNzJyxzZXR0aW5ncy5jc3NjbGFzcyk7fX0KaWYoc2V0dGluZ3Muc3R5bGUpe2lmKCdpbmhlcml0Jz09c2V0dGluZ3Muc3R5bGUpe2Zvcm0uYXR0cignc3R5bGUnLCQoc2VsZikuYXR0cignc3R5bGUnKSk7Zm9ybS5jc3MoJ2Rpc3BsYXknLCQoc2VsZikuY3NzKCdkaXNwbGF5JykpO31lbHNle2Zvcm0uYXR0cignc3R5bGUnLHNldHRpbmdzLnN0eWxlKTt9fQp2YXIgaW5wdXQ9ZWxlbWVudC5hcHBseShmb3JtLFtzZXR0aW5ncyxzZWxmXSk7dmFyIGlucHV0X2NvbnRlbnQ7aWYoc2V0dGluZ3MubG9hZHVybCl7dmFyIHQ9c2V0VGltZW91dChmdW5jdGlvbigpe2lucHV0LmRpc2FibGVkPXRydWU7Y29udGVudC5hcHBseShmb3JtLFtzZXR0aW5ncy5sb2FkdGV4dCxzZXR0aW5ncyxzZWxmXSk7fSwxMDApO3ZhciBsb2FkZGF0YT17fTtsb2FkZGF0YVtzZXR0aW5ncy5pZF09c2VsZi5pZDtpZigkLmlzRnVuY3Rpb24oc2V0dGluZ3MubG9hZGRhdGEpKXskLmV4dGVuZChsb2FkZGF0YSxzZXR0aW5ncy5sb2FkZGF0YS5hcHBseShzZWxmLFtzZWxmLnJldmVydCxzZXR0aW5nc10pKTt9ZWxzZXskLmV4dGVuZChsb2FkZGF0YSxzZXR0aW5ncy5sb2FkZGF0YSk7fQokLmFqYXgoe3R5cGU6c2V0dGluZ3MubG9hZHR5cGUsdXJsOnNldHRpbmdzLmxvYWR1cmwsZGF0YTpsb2FkZGF0YSxhc3luYzpmYWxzZSxzdWNjZXNzOmZ1bmN0aW9uKHJlc3VsdCl7d2luZG93LmNsZWFyVGltZW91dCh0KTtpbnB1dF9jb250ZW50PXJlc3VsdDtpbnB1dC5kaXNhYmxlZD1mYWxzZTt9fSk7fWVsc2UgaWYoc2V0dGluZ3MuZGF0YSl7aW5wdXRfY29udGVudD1zZXR0aW5ncy5kYXRhO2lmKCQuaXNGdW5jdGlvbihzZXR0aW5ncy5kYXRhKSl7aW5wdXRfY29udGVudD1zZXR0aW5ncy5kYXRhLmFwcGx5KHNlbGYsW3NlbGYucmV2ZXJ0LHNldHRpbmdzXSk7fX1lbHNle2lucHV0X2NvbnRlbnQ9c2VsZi5yZXZlcnQ7fQpjb250ZW50LmFwcGx5KGZvcm0sW2lucHV0X2NvbnRlbnQsc2V0dGluZ3Msc2VsZl0pO2lucHV0LmF0dHIoJ25hbWUnLHNldHRpbmdzLm5hbWUpO2J1dHRvbnMuYXBwbHkoZm9ybSxbc2V0dGluZ3Msc2VsZl0pOyQoc2VsZikuYXBwZW5kKGZvcm0pO3BsdWdpbi5hcHBseShmb3JtLFtzZXR0aW5ncyxzZWxmXSk7JCgnOmlucHV0OnZpc2libGU6ZW5hYmxlZDpmaXJzdCcsZm9ybSkuZm9jdXMoKTtpZihzZXR0aW5ncy5zZWxlY3Qpe2lucHV0LnNlbGVjdCgpO30KaW5wdXQua2V5ZG93bihmdW5jdGlvbihlKXtpZihlLmtleUNvZGU9PTI3KXtlLnByZXZlbnREZWZhdWx0KCk7cmVzZXQuYXBwbHkoZm9ybSxbc2V0dGluZ3Msc2VsZl0pO319KTt2YXIgdDtpZignY2FuY2VsJz09c2V0dGluZ3Mub25ibHVyKXtpbnB1dC5ibHVyKGZ1bmN0aW9uKGUpe3Q9c2V0VGltZW91dChmdW5jdGlvbigpe3Jlc2V0LmFwcGx5KGZvcm0sW3NldHRpbmdzLHNlbGZdKTt9LDUwMCk7fSk7fWVsc2UgaWYoJ3N1Ym1pdCc9PXNldHRpbmdzLm9uYmx1cil7aW5wdXQuYmx1cihmdW5jdGlvbihlKXt0PXNldFRpbWVvdXQoZnVuY3Rpb24oKXtmb3JtLnN1Ym1pdCgpO30sMjAwKTt9KTt9ZWxzZSBpZigkLmlzRnVuY3Rpb24oc2V0dGluZ3Mub25ibHVyKSl7aW5wdXQuYmx1cihmdW5jdGlvbihlKXtzZXR0aW5ncy5vbmJsdXIuYXBwbHkoc2VsZixbaW5wdXQudmFsKCksc2V0dGluZ3NdKTt9KTt9ZWxzZXtpbnB1dC5ibHVyKGZ1bmN0aW9uKGUpe30pO30KZm9ybS5zdWJtaXQoZnVuY3Rpb24oZSl7aWYodCl7Y2xlYXJUaW1lb3V0KHQpO30KZS5wcmV2ZW50RGVmYXVsdCgpO2lmKGZhbHNlIT09b25zdWJtaXQuYXBwbHkoZm9ybSxbc2V0dGluZ3Msc2VsZl0pKXtpZihmYWxzZSE9PXN1Ym1pdC5hcHBseShmb3JtLFtzZXR0aW5ncyxzZWxmXSkpe2lmKCQuaXNGdW5jdGlvbihzZXR0aW5ncy50YXJnZXQpKXt2YXIgc3RyPXNldHRpbmdzLnRhcmdldC5hcHBseShzZWxmLFtpbnB1dC52YWwoKSxzZXR0aW5nc10pOyQoc2VsZikuaHRtbChzdHIpO3NlbGYuZWRpdGluZz1mYWxzZTtjYWxsYmFjay5hcHBseShzZWxmLFtzZWxmLmlubmVySFRNTCxzZXR0aW5nc10pO2lmKCEkLnRyaW0oJChzZWxmKS5odG1sKCkpKXskKHNlbGYpLmh0bWwoc2V0dGluZ3MucGxhY2Vob2xkZXIpO319ZWxzZXt2YXIgc3VibWl0ZGF0YT17fTtzdWJtaXRkYXRhW3NldHRpbmdzLm5hbWVdPWlucHV0LnZhbCgpO3N1Ym1pdGRhdGFbc2V0dGluZ3MuaWRdPXNlbGYuaWQ7aWYoJC5pc0Z1bmN0aW9uKHNldHRpbmdzLnN1Ym1pdGRhdGEpKXskLmV4dGVuZChzdWJtaXRkYXRhLHNldHRpbmdzLnN1Ym1pdGRhdGEuYXBwbHkoc2VsZixbc2VsZi5yZXZlcnQsc2V0dGluZ3NdKSk7fWVsc2V7JC5leHRlbmQoc3VibWl0ZGF0YSxzZXR0aW5ncy5zdWJtaXRkYXRhKTt9CmlmKCdQVVQnPT1zZXR0aW5ncy5tZXRob2Qpe3N1Ym1pdGRhdGFbJ19tZXRob2QnXT0ncHV0Jzt9CiQoc2VsZikuaHRtbChzZXR0aW5ncy5pbmRpY2F0b3IpO3ZhciBhamF4b3B0aW9ucz17dHlwZTonUE9TVCcsZGF0YTpzdWJtaXRkYXRhLGRhdGFUeXBlOidodG1sJyx1cmw6c2V0dGluZ3MudGFyZ2V0LHN1Y2Nlc3M6ZnVuY3Rpb24ocmVzdWx0LHN0YXR1cyl7aWYoYWpheG9wdGlvbnMuZGF0YVR5cGU9PSdodG1sJyl7JChzZWxmKS5odG1sKHJlc3VsdCk7fQpzZWxmLmVkaXRpbmc9ZmFsc2U7Y2FsbGJhY2suYXBwbHkoc2VsZixbcmVzdWx0LHNldHRpbmdzXSk7aWYoISQudHJpbSgkKHNlbGYpLmh0bWwoKSkpeyQoc2VsZikuaHRtbChzZXR0aW5ncy5wbGFjZWhvbGRlcik7fX0sZXJyb3I6ZnVuY3Rpb24oeGhyLHN0YXR1cyxlcnJvcil7b25lcnJvci5hcHBseShmb3JtLFtzZXR0aW5ncyxzZWxmLHhocl0pO319OyQuZXh0ZW5kKGFqYXhvcHRpb25zLHNldHRpbmdzLmFqYXhvcHRpb25zKTskLmFqYXgoYWpheG9wdGlvbnMpO319fQokKHNlbGYpLmF0dHIoJ3RpdGxlJyxzZXR0aW5ncy50b29sdGlwKTtyZXR1cm4gZmFsc2U7fSk7fSk7dGhpcy5yZXNldD1mdW5jdGlvbihmb3JtKXtpZih0aGlzLmVkaXRpbmcpe2lmKGZhbHNlIT09b25yZXNldC5hcHBseShmb3JtLFtzZXR0aW5ncyxzZWxmXSkpeyQoc2VsZikuaHRtbChzZWxmLnJldmVydCk7c2VsZi5lZGl0aW5nPWZhbHNlO2lmKCEkLnRyaW0oJChzZWxmKS5odG1sKCkpKXskKHNlbGYpLmh0bWwoc2V0dGluZ3MucGxhY2Vob2xkZXIpO30KaWYoc2V0dGluZ3MudG9vbHRpcCl7JChzZWxmKS5hdHRyKCd0aXRsZScsc2V0dGluZ3MudG9vbHRpcCk7fX19fTt9KTt9OyQuZWRpdGFibGU9e3R5cGVzOntkZWZhdWx0czp7ZWxlbWVudDpmdW5jdGlvbihzZXR0aW5ncyxvcmlnaW5hbCl7dmFyIGlucHV0PSQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iPjwvaW5wdXQ+Jyk7JCh0aGlzKS5hcHBlbmQoaW5wdXQpO3JldHVybihpbnB1dCk7fSxjb250ZW50OmZ1bmN0aW9uKHN0cmluZyxzZXR0aW5ncyxvcmlnaW5hbCl7JCgnOmlucHV0OmZpcnN0Jyx0aGlzKS52YWwoc3RyaW5nKTt9LHJlc2V0OmZ1bmN0aW9uKHNldHRpbmdzLG9yaWdpbmFsKXtvcmlnaW5hbC5yZXNldCh0aGlzKTt9LGJ1dHRvbnM6ZnVuY3Rpb24oc2V0dGluZ3Msb3JpZ2luYWwpe3ZhciBmb3JtPXRoaXM7aWYoc2V0dGluZ3Muc3VibWl0KXtpZihzZXR0aW5ncy5zdWJtaXQubWF0Y2goLz4kLykpe3ZhciBzdWJtaXQ9JChzZXR0aW5ncy5zdWJtaXQpLmNsaWNrKGZ1bmN0aW9uKCl7aWYoc3VibWl0LmF0dHIoInR5cGUiKSE9InN1Ym1pdCIpe2Zvcm0uc3VibWl0KCk7fX0pO31lbHNle3ZhciBzdWJtaXQ9JCgnPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIC8+Jyk7c3VibWl0Lmh0bWwoc2V0dGluZ3Muc3VibWl0KTt9CiQodGhpcykuYXBwZW5kKHN1Ym1pdCk7fQppZihzZXR0aW5ncy5jYW5jZWwpe2lmKHNldHRpbmdzLmNhbmNlbC5tYXRjaCgvPiQvKSl7dmFyIGNhbmNlbD0kKHNldHRpbmdzLmNhbmNlbCk7fWVsc2V7dmFyIGNhbmNlbD0kKCc8YnV0dG9uIHR5cGU9ImNhbmNlbCIgLz4nKTtjYW5jZWwuaHRtbChzZXR0aW5ncy5jYW5jZWwpO30KJCh0aGlzKS5hcHBlbmQoY2FuY2VsKTskKGNhbmNlbCkuY2xpY2soZnVuY3Rpb24oZXZlbnQpe2lmKCQuaXNGdW5jdGlvbigkLmVkaXRhYmxlLnR5cGVzW3NldHRpbmdzLnR5cGVdLnJlc2V0KSl7dmFyIHJlc2V0PSQuZWRpdGFibGUudHlwZXNbc2V0dGluZ3MudHlwZV0ucmVzZXQ7fWVsc2V7dmFyIHJlc2V0PSQuZWRpdGFibGUudHlwZXNbJ2RlZmF1bHRzJ10ucmVzZXQ7fQpyZXNldC5hcHBseShmb3JtLFtzZXR0aW5ncyxvcmlnaW5hbF0pO3JldHVybiBmYWxzZTt9KTt9fX0sdGV4dDp7ZWxlbWVudDpmdW5jdGlvbihzZXR0aW5ncyxvcmlnaW5hbCl7dmFyIGlucHV0PSQoJzxpbnB1dCAvPicpO2lmKHNldHRpbmdzLndpZHRoIT0nbm9uZScpe2lucHV0LndpZHRoKHNldHRpbmdzLndpZHRoKTt9CmlmKHNldHRpbmdzLmhlaWdodCE9J25vbmUnKXtpbnB1dC5oZWlnaHQoc2V0dGluZ3MuaGVpZ2h0KTt9CmlucHV0LmF0dHIoJ2F1dG9jb21wbGV0ZScsJ29mZicpOyQodGhpcykuYXBwZW5kKGlucHV0KTtyZXR1cm4oaW5wdXQpO319LHRleHRhcmVhOntlbGVtZW50OmZ1bmN0aW9uKHNldHRpbmdzLG9yaWdpbmFsKXt2YXIgdGV4dGFyZWE9JCgnPHRleHRhcmVhIC8+Jyk7aWYoc2V0dGluZ3Mucm93cyl7dGV4dGFyZWEuYXR0cigncm93cycsc2V0dGluZ3Mucm93cyk7fWVsc2UgaWYoc2V0dGluZ3MuaGVpZ2h0IT0ibm9uZSIpe3RleHRhcmVhLmhlaWdodChzZXR0aW5ncy5oZWlnaHQpO30KaWYoc2V0dGluZ3MuY29scyl7dGV4dGFyZWEuYXR0cignY29scycsc2V0dGluZ3MuY29scyk7fWVsc2UgaWYoc2V0dGluZ3Mud2lkdGghPSJub25lIil7dGV4dGFyZWEud2lkdGgoc2V0dGluZ3Mud2lkdGgpO30KJCh0aGlzKS5hcHBlbmQodGV4dGFyZWEpO3JldHVybih0ZXh0YXJlYSk7fX0sc2VsZWN0OntlbGVtZW50OmZ1bmN0aW9uKHNldHRpbmdzLG9yaWdpbmFsKXt2YXIgc2VsZWN0PSQoJzxzZWxlY3QgLz4nKTskKHRoaXMpLmFwcGVuZChzZWxlY3QpO3JldHVybihzZWxlY3QpO30sY29udGVudDpmdW5jdGlvbihkYXRhLHNldHRpbmdzLG9yaWdpbmFsKXtpZihTdHJpbmc9PWRhdGEuY29uc3RydWN0b3Ipe2V2YWwoJ3ZhciBqc29uID0gJytkYXRhKTt9ZWxzZXt2YXIganNvbj1kYXRhO30KZm9yKHZhciBrZXkgaW4ganNvbil7aWYoIWpzb24uaGFzT3duUHJvcGVydHkoa2V5KSl7Y29udGludWU7fQppZignc2VsZWN0ZWQnPT1rZXkpe2NvbnRpbnVlO30KdmFyIG9wdGlvbj0kKCc8b3B0aW9uIC8+JykudmFsKGtleSkuYXBwZW5kKGpzb25ba2V5XSk7JCgnc2VsZWN0Jyx0aGlzKS5hcHBlbmQob3B0aW9uKTt9CiQoJ3NlbGVjdCcsdGhpcykuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7aWYoJCh0aGlzKS52YWwoKT09anNvblsnc2VsZWN0ZWQnXXx8JCh0aGlzKS50ZXh0KCk9PSQudHJpbShvcmlnaW5hbC5yZXZlcnQpKXskKHRoaXMpLmF0dHIoJ3NlbGVjdGVkJywnc2VsZWN0ZWQnKTt9fSk7fX19LGFkZElucHV0VHlwZTpmdW5jdGlvbihuYW1lLGlucHV0KXskLmVkaXRhYmxlLnR5cGVzW25hbWVdPWlucHV0O319OyQuZm4uZWRpdGFibGUuZGVmYXVsdHM9e25hbWU6J3ZhbHVlJyxpZDonaWQnLHR5cGU6J3RleHQnLHdpZHRoOidhdXRvJyxoZWlnaHQ6J2F1dG8nLGV2ZW50OidjbGljay5lZGl0YWJsZScsb25ibHVyOidjYW5jZWwnLGxvYWR0eXBlOidHRVQnLGxvYWR0ZXh0OidMb2FkaW5nLi4uJyxwbGFjZWhvbGRlcjonQ2xpY2sgdG8gZWRpdCcsbG9hZGRhdGE6e30sc3VibWl0ZGF0YTp7fSxhamF4b3B0aW9uczp7fX07fSkoalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/MCMedias.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE1DTWVkaWFzIC0gTXVsdGlwbGUgZmlsZXMgJiBpbWFnZXMgZmllbGRzIGZvciBDTVNGb3JtcwojIFZlcnNpb246IDAuMC4zLCBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIKIwoKY2xhc3MgTUNNZWRpYXMgZXh0ZW5kcyBDTVNNb2R1bGUKewoKICB2YXIgJGpxdWVyeV9sb2FkZWQgPSBmYWxzZTsKICAKICBwdWJsaWMgc3RhdGljICRmcm9udGVuZF90ZW1wbGF0ZXMgPSBhcnJheSgKICAgICAgJ2RlZmF1bHQnICAgICA9PiAnZGVmYXVsdCcKICAgICk7CiAgCgogIHB1YmxpYyBmdW5jdGlvbiBHZXROYW1lKCkgICAgICAgICAgICAgeyByZXR1cm4gJ01DTWVkaWFzJzsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSAgICAgeyByZXR1cm4gJ00mQyBNZWRpYXMnOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSAgICAgICAgICB7IHJldHVybiAnMS4wLjgnOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEhlbHAoKSAgICAgICAgICAgICB7IHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOyB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvcigpICAgICAgICAgICB7IHJldHVybiAnSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyJzsgIH0KICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSAgICAgIHsgcmV0dXJuICdqY2NAbW9ycmlzLWNoYXBtYW4uY29tJzsgIH0KICAvLyBwdWJsaWMgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgICAgICAgIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsgICAgfQogIHB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpICAgICAgeyByZXR1cm4gdHJ1ZTsgIH0KICBwdWJsaWMgZnVuY3Rpb24gSGFzQWRtaW4oKSAgICAgICAgICAgIHsgcmV0dXJuIHRydWU7ICB9CiAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpICAgICB7IHJldHVybiAnZXh0ZW5zaW9ucyc7ICB9CiAgLy8gcHVibGljIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKSAgIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdhZG1pbmRlc2NyaXB0aW9uJyk7IH0KICBwdWJsaWMgZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgICAgIHsgcmV0dXJuICR0aGlzLT5DaGVja0FjY2VzcygnTWFuYWdlIE1DIE1lZGlhcycpOyAgfQogIHB1YmxpYyBmdW5jdGlvbiBDaGVja0FjY2VzcygkcGVybSA9ICcnKSAgeyByZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbigkcGVybSk7ICB9CgogIHB1YmxpYyBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKSAgICAgeyByZXR1cm4gYXJyYXkoJ0NNU0Zvcm1zJyA9PiAnMS4wLjMnKTsgIH0KICBwdWJsaWMgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSAgIHsgcmV0dXJuICIxLjEwIjsgIH0KCiAgLy8gZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgICAgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsJyk7ICB9CiAgLy8gZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKSAgICB7IHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOyAgfQogIC8vIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSAgIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7IH0KICBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkgICAgIHsgICAkdGhpcy0+SW5pdGlhbGl6ZUdsb2JhbCgpOyAgfQogIAogIGZ1bmN0aW9uIEluaXRpYWxpemVHbG9iYWwoKSB7ICAKICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOwogICAgCiAgICAkdGhpcy0+c21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignVGh1bWJuYWlsJywgIGFycmF5KCdNQ01lZGlhcycsJ3RodW1ibmFpbCcpKTsKICAgIAogICAgJHRoaXMtPlJlZ2lzdGVyUm91dGUoJy9tY21lZGlhc1wvYXBpXC8oP1A8Y29tbWFuZD5bYS16QS1aMC05Xy1dKykoXC8uKj8pPyQvJywgYXJyYXkoJ2FjdGlvbicgPT4gJ2FwaScsICdzaG93dGVtcGxhdGUnID0+ICdmYWxzZScsJ3JldHVybmlkJyA9PiBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5HZXREZWZhdWx0UGFnZUlEKCkpKTsKCiAgICAkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL21jbWVkaWFzXC9zeW5jXC8oP1A8Y29tbWFuZD5bYS16QS1aMC05Xy1dKykoXC8uKj8pPyQvJywgYXJyYXkoJ2FjdGlvbicgPT4gJ3N5bmMnLCAnc2hvd3RlbXBsYXRlJyA9PiAnZmFsc2UnLCdyZXR1cm5pZCcgPT4gY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0RGVmYXVsdFBhZ2VJRCgpKSk7CiAgICAKICAgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcvdGh1bWJuYWlsXC8oP1A8d2lkdGg+WzAtOV0rKVwvKD9QPGhlaWdodD5bMC05XSspXC8oP1A8c3JjPlsuXC9hLXpBLVowLTlfLV0rKShcLy4qPyk/JC8nLCBhcnJheSgnYWN0aW9uJyA9PiAndGh1bWJuYWlsJywgJ3JlZGlyZWN0JyA9PiB0cnVlLCAgJ3Nob3d0ZW1wbGF0ZScgPT4gJ2ZhbHNlJywncmV0dXJuaWQnID0+IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRQYWdlSUQoKSkpOwogICAgCiAgICAkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL3RodW1ibmFpbFwvKD9QPHNpemU+WzAtOV0rKVwvKD9QPHNyYz5bLlwvYS16QS1aMC05Xy1dKykoXC8uKj8pPyQvJywgYXJyYXkoJ2FjdGlvbicgPT4gJ3RodW1ibmFpbCcsICdyZWRpcmVjdCcgPT4gdHJ1ZSwgJ3Nob3d0ZW1wbGF0ZScgPT4gJ2ZhbHNlJywncmV0dXJuaWQnID0+IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRQYWdlSUQoKSkpOwogICAgCiAgICAkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL3RodW1ibmFpbFwvKD9QPHNyYz5bLlwvYS16QS1aMC05Xy1dKykoXC8uKj8pPyQvJywgYXJyYXkoJ2FjdGlvbicgPT4gJ3RodW1ibmFpbCcsICdyZWRpcmVjdCcgPT4gdHJ1ZSwgJ3Nob3d0ZW1wbGF0ZScgPT4gJ2ZhbHNlJywncmV0dXJuaWQnID0+IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRQYWdlSUQoKSkpOwogICAgCiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWFkZXJIVE1MKCkgewogICAgCiAgICAkaHRtbCA9ICcnOwogICAgLy8gQ2hlY2sgdmVyc2lvbgogICAgZ2xvYmFsICRDTVNfVkVSU0lPTjsKICAgIGlmKCgkQ01TX1ZFUlNJT04gIT0gJycpICYmIHZlcnNpb25fY29tcGFyZSgkQ01TX1ZFUlNJT04sICcxLjExJywgJzwnKSkKICAgIHsKICAgICAgJGh0bWwgLj0gJyAgICA8c2NyaXB0IHNyYz0iJy4kdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvbGliL2pzL2pxdWVyeS0xLjguMy5qcyI+PC9zY3JpcHQ+JzsKICAgICAgJGh0bWwgLj0gJyAgICA8c2NyaXB0IHNyYz0iJy4kdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvbGliL2pzL2pxdWVyeS11aS0xLjkuMi5jdXN0b20ubWluLmpzIj48L3NjcmlwdD4nOwogICAgfQogICAgCiAgICAkaHRtbCAuPSAnCiAgICAgIDxsaW5rIGhyZWY9IicuJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKS4nL2xpYi9jc3MvYWRtaW4uY3NzIiByZWw9InN0eWxlc2hlZXQiPiAgCiAgICAgIDxsaW5rIGhyZWY9IicuJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKS4nL2xpYi9qcy9maW5ldXBsb2FkZXIvZmluZXVwbG9hZGVyLTMuNC4xLmNzcyIgcmVsPSJzdHlsZXNoZWV0Ij4gIAogICAgICA8bGluayBocmVmPSInLiR0aGlzLT5HZXRNb2R1bGVVUkxQYXRoKCkuJy9saWIvanMvZmluZXVwbG9hZGVyL2ZpbmV1cGxvYWRlci1maXguY3NzIiByZWw9InN0eWxlc2hlZXQiPiAgCiAgICAgIDxzY3JpcHQgc3JjPSInLiR0aGlzLT5HZXRNb2R1bGVVUkxQYXRoKCkuJy9saWIvanMvZmluZXVwbG9hZGVyL2pxdWVyeS5maW5ldXBsb2FkZXItMy40LjEubWluLmpzIj48L3NjcmlwdD4KICAgICAgPHNjcmlwdCBzcmM9IicuJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKS4nL2xpYi9qcy9qcXVlcnkuamVkaXRhYmxlLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICAgICc7CiAgICAKICAgICR0aGlzLT5qcXVlcnlfbG9hZGVkID0gdHJ1ZTsKICAgIAogICAgcmV0dXJuICRodG1sOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gbG9hZEhlYWRlcigpICB7CiAgICBpZighJHRoaXMtPmpxdWVyeV9sb2FkZWQpIHsKICAgICAgcmV0dXJuICR0aGlzLT5HZXRIZWFkZXJIVE1MKCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW1hZ2UoJGltYWdlKQogIHsKICAgICRtb2R1bGUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01DTWVkaWFzJyk7CiAgIHJldHVybiAkbW9kdWxlLT5HZXRNb2R1bGVVUkxQYXRoKCkgLiAnL2ltYWdlcy8nIC4gJGltYWdlOyAgCiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW1hZ2VUYWcoJGltYWdlLCAkYWx0PScnKQogIHsKICAgIHJldHVybiAnPGltZyBzcmM9IicgLiBzZWxmOjpnZXRJbWFnZSgkaW1hZ2UpIC4gJyIgYWx0PSInLiRhbHQuJyIvPic7CiAgfQogIAogIC8vIEVWRU5UUwogIGZ1bmN0aW9uIEhhbmRsZXNFdmVudHMgKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIERvRXZlbnQoJG9yaWdpbmF0b3IsICRldmVudG5hbWUsICYkcGFyYW1zKSB7CgkJaWYgKCgkZXZlbnRuYW1lID09ICdDcm9uRGFpbHknKSB8fCAoJGV2ZW50bmFtZSA9PSAnQ3JvbjE1bWluJykpIHsKCQkJLy8gRG8gZGVzaXJlZCBhY3Rpb24gaGVyZQogICAgICBpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVtb3RlX2dhbGxlcnknLCBmYWxzZSkpCiAgICAgIHsKICAgICAgICAvLyBJTVBPUlQKICAgICAgfQogICAgICAvLyBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NlbmRfZW1haWxzJykgPT0gJ3RydWUnKQogICAgICAvLyB7CiAgICAgIC8vIAogICAgICAvLyB9CgkJfQoJfQoKICAvKioKICAqIEltcG9ydCBmcm9tIGFuIGV4dGVybmFsIGdhbGxlcnkKICAqLwogIAogIHB1YmxpYyBmdW5jdGlvbiBJbXBvcnQoKQogIHsKICAgICBpZigkdXJsID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlbW90ZV9nYWxsZXJ5JywgZmFsc2UpKQogICAgICB7CiAgICAgICAgJHJlc3VsdCA9IE1DRmlsZTo6U3luY0Zyb21VcmwoJHVybCk7CiAgICAgIH0KICB9CiAgCiAgLyoqCiAgKiBFeGVjdXRlIGFuIGFjdGlvbiBhbmQgcmV0dXJuIHRoZSBvdXRwdXQgaW5zdGVhZCBvZiBzaG93aW5nIGl0CiAgKi8KICBwdWJsaWMgZnVuY3Rpb24gRXhlY3V0ZUFjdGlvbigkbmFtZSwkaWQsJHBhcmFtcywkcmV0dXJuaWQ9JycpIHsKICAgIEBvYl9zdGFydCgpOwogICAgJHRoaXMtPkRvQWN0aW9uKCRuYW1lLCAkaWQsICRwYXJhbXMsJHJldHVybmlkKTsKICAgICRvZl90aGVfamVkaSA9IG9iX2dldF9jb250ZW50cygpOwogICAgQG9iX2VuZF9jbGVhbigpOwogICAgcmV0dXJuICRvZl90aGVfamVkaTsKICB9CiAgCiAgLy8gVEVNUExBVEVTCiAgCiAgcHVibGljIGZ1bmN0aW9uIEdldERlZmF1bHRUZW1wbGF0ZXMoKSB7CiAgICAkYXJyYXkgPSB1bnNlcmlhbGl6ZSgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF90ZW1wbGF0ZXMnKSk7CiAgICBpZiAoaXNfYXJyYXkoJGFycmF5KSkKICAgIHsKICAgICAgcmV0dXJuICRhcnJheTsKICAgIH0KICAgIHJldHVybiBhcnJheSgpOwogIH0gCiAgCiAgcHVibGljIGZ1bmN0aW9uIFNldERlZmF1bHRUZW1wbGF0ZXMoJGxpc3QgPSBhcnJheSgpKSAgewogICAgcmV0dXJuICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3RlbXBsYXRlcycsIHNlcmlhbGl6ZSgkbGlzdCkpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gQWRkRGVmYXVsdFRlbXBsYXRlKCRhY3Rpb24sICR0ZW1wbGF0ZSkgIHsKICAgICRsaXN0ID0gJHRoaXMtPkdldERlZmF1bHRUZW1wbGF0ZXMoKTsKICAgICRsaXN0WyRhY3Rpb25dID0gJHRlbXBsYXRlOwogICAgJHRoaXMtPlNldERlZmF1bHRUZW1wbGF0ZXMoJGxpc3QpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVmYXVsdFRlbXBsYXRlKCRhY3Rpb24pIHsKICAgICAgJGxpc3QgPSAkdGhpcy0+R2V0RGVmYXVsdFRlbXBsYXRlcygpOwogICAgICBpZiAoIWlzX2FycmF5KCRsaXN0KSkgJGxpc3QgPSBhcnJheSgpOwogICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkYWN0aW9uLCAkbGlzdCkpIC8vIFRPRE86IFBvc3NpYmxlIHByb2JsZW0gd2l0aCBsaXN0CiAgICAgIHsKICAgICAgICByZXR1cm4gJGxpc3RbJGFjdGlvbl07CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBpc0RlZmF1bHRUZW1wbGF0ZSgkdGVtcGxhdGUpICB7ICAgIAogICAgJGxpc3QgPSAkdGhpcy0+R2V0RGVmYXVsdFRlbXBsYXRlcygpOwogICAgJGFjdGlvbiA9IGFycmF5X3NlYXJjaCgkdGVtcGxhdGUsICRsaXN0KTsKICAgIGlmKCRhY3Rpb24gIT09IGZhbHNlKQogICAgewogICAgICByZXR1cm4gJGFjdGlvbjsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9ICAKICAKICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlRGVmYXVsdFRlbXBsYXRlKCR0ZW1wbGF0ZSkgIHsgICAgCiAgICAkbGlzdCA9ICR0aGlzLT5HZXREZWZhdWx0VGVtcGxhdGVzKCk7CiAgICAkYWN0aW9uID0gYXJyYXlfc2VhcmNoKCR0ZW1wbGF0ZSwgJGxpc3QpOwogICAgaWYoJGFjdGlvbiAhPT0gZmFsc2UpCiAgICB7CiAgICAgIHVuc2V0KCRsaXN0WyRhY3Rpb25dKTsKICAgICAgJHRoaXMtPlNldERlZmF1bHRUZW1wbGF0ZXMoJGxpc3QpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gUHJvY2Vzc1RlbXBsYXRlRm9yKCRhY3Rpb24sICRwYXJhbXMgPSBhcnJheSgpKSAgewogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICYmICR0aGlzLT5HZXRUZW1wbGF0ZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKSkgewogICAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKTsKICAgIH0KICAgIGVsc2VpZiAoKCR0ZW1wbGF0ZSA9ICR0aGlzLT5HZXREZWZhdWx0VGVtcGxhdGUoJGFjdGlvbikpICAmJiAgKCR0aGlzLT5HZXRUZW1wbGF0ZSgkdGVtcGxhdGUpICE9PSBmYWxzZSkpCiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCR0ZW1wbGF0ZSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdmcm9udGVuZC4nLiRhY3Rpb24uJy50cGwnKTsKICAgIH0KICB9CgogIC8vIElNQUdFUyBQQVJUCiAgCiAgcHVibGljIGZ1bmN0aW9uIGdldFByZXZpZXdzVXJsKCkgIHsKICAgICRjb25maWcgPSAkdGhpcy0+Z2V0Q29uZmlnKCk7CiAgICAkcmVsYXRpdmVfcGF0aCA9IHN0cl9yZXBsYWNlKCRjb25maWdbJ3Jvb3RfcGF0aCddLCAnJywgJGNvbmZpZ1sncHJldmlld3NfcGF0aCddKTsKICAgIAogICAgcmV0dXJuICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAkcmVsYXRpdmVfcGF0aDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRUaHVtYm5haWwoJHBhcmFtcykgewogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydzcmMnXSkpICRwYXJhbXNbJ2ZpbGUnXSA9ICRwYXJhbXNbJ3NyYyddOwogICAgCiAgICBpZihpc3NldCgkcGFyYW1zWydzaXplJ10pKSB7ICRwYXJhbXNbJ3dpZHRoJ10gPSAoaW50KSRwYXJhbXNbJ3NpemUnXTsgICRwYXJhbXNbJ2hlaWdodCddID0gKGludCkkcGFyYW1zWydzaXplJ107IH0KICAgIAogICAgaWYoaXNzZXQoJHBhcmFtc1snZmlsZSddKSkKICAgIHsKICAgICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgnLi4nLCAnJywgJHBhcmFtc1snZmlsZSddKTsKICAgICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgnICcsICcnLCAkZmlsZSk7CiAgICAgICRmaWxlID0gc3RyX3JlcGxhY2UoJzsnLCAnJywgJGZpbGUpOwoKICAgICAgaWYoIWlzc2V0KCRwYXJhbXNbJ21vZGUnXSkpICRwYXJhbXNbJ21vZGUnXSA9ICdkZWZhdWx0JzsKICAgICAgaWYoIWlzc2V0KCRwYXJhbXNbJ3dpZHRoJ10pKSAkcGFyYW1zWyd3aWR0aCddID0gJzEwMCc7CiAgICAgIGlmKCFpc3NldCgkcGFyYW1zWydoZWlnaHQnXSkpICRwYXJhbXNbJ2hlaWdodCddID0gJzEwMCc7CgogICAgICAkY29uZmlnID0gJHRoaXMtPmdldENvbmZpZygpOwogICAgICAKICAgICAgaWYoc3RycG9zKCRmaWxlLCAnL3VwbG9hZHMvJykgPT09IDApCiAgICAgIHsKICAgICAgICAkb3JpZ2luID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc3RyX3JlcGxhY2UoJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SLCBzdHJfcmVwbGFjZSgnL3VwbG9hZHMvJywgJycsICRmaWxlKSk7CiAgICAgIH0KICAgICAgZWxzZWlmKHN0cnBvcygkZmlsZSwgJ3VwbG9hZHMvJykgPT09IDApCiAgICAgIHsKICAgICAgICAkb3JpZ2luID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc3RyX3JlcGxhY2UoJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SLCBzdHJfcmVwbGFjZSgndXBsb2Fkcy8nLCAnJywgJGZpbGUpKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICAkb3JpZ2luID0gJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ01vZHVsZXMnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdNQ01lZGlhcycgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGU7CiAgICAgIH0KCiAgICAgIGlmKGlzX2ZpbGUoJG9yaWdpbikpCiAgICAgIHsKICAgICAgICAvLyBCRUdJTiBUSFVNQk5BSUwgUFJPQ0VTUwogICAgICAgICRkZXN0aW5hdGlvbl91cmwgPSAkdGhpcy0+Z2V0UHJldmlld3NVcmwoKTsKICAgICAgICAkZGVzdGluYXRpb25fcGF0aCA9ICRjb25maWdbJ3ByZXZpZXdzX3BhdGgnXTsKICAgICAgICAkdGh1bWJuYWlsX25hbWUgPSBNQ0ZpbGU6OmdlbmVyYXRlVGh1bWJuYWlsRmlsZW5hbWUoJGZpbGUsICRwYXJhbXMpOwogICAgICAgICRkZXN0aW5hdGlvbiA9ICRkZXN0aW5hdGlvbl9wYXRoIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICR0aHVtYm5haWxfbmFtZTsKCiAgICAgICAgaWYoIWlzX2ZpbGUoJGRlc3RpbmF0aW9uKSkKICAgICAgICB7CiAgICAgICAgICAvLyBHZW5lcmF0ZSB0aHVtYm5haWwgICAgICAgIAogICAgICAgICAgTUNGaWxlOjpnZW5lcmF0ZVRodW1ibmFpbCgkb3JpZ2luLCAkZGVzdGluYXRpb24sICRwYXJhbXMpOwogICAgICAgIH0KICAgICAgICAvLyBURVNUCiAgICAgICAgLy8gTUNGaWxlOjpnZW5lcmF0ZVRodW1ibmFpbCgkb3JpZ2luLCAkZGVzdGluYXRpb24sICRwYXJhbXMpOyAvLyBHRU5FUkFURSBJVCBBTEwgVEhFIFRJTUUKCiAgICAgICAgLy8gUkVUVVJOIFVSTAogICAgICAgIHJldHVybiAkZGVzdGluYXRpb25fdXJsIC4gJy8nIC4gJHRodW1ibmFpbF9uYW1lOwogICAgICB9CiAgICB9CiAgfQp9CgoKPz4K]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKJGRiID0gJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiRmbGRzID0gYXJyYXkoCgknaWQgSSBLRVkgQVVUTycsCgknY29sbGVjdGlvbl9pZCBDKDI1NSknLCAvLyBGKioqKmluZyBPUk0KCSdjcmVhdGVkX2F0IEknLAoJJ2NyZWF0ZWRfYnkgSScsCgkndXBkYXRlZF9hdCBJJywKCSd1cGRhdGVkX2J5IEknLAoJJ3RpdGxlIEMoMjU1KScsCgkncG9zaXRpb24gSScsCgknZmlsZW5hbWUJWEwnLAoJJ29yaWdpbmFsX2ZpbGVuYW1lCVhMJwopOwoKJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX01DTWVkaWFzX2ZpbGVzJywgaW1wbG9kZSgnLCcsICRmbGRzKSwgYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgovLyAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXBsb2Fkc19wYXRoJywgJHRoaXMtPmNvbmZpZ1sndXBsb2Fkc19wYXRoJ10pOwoKJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01hbmFnZSBNQ01lZGlhcycsICdNYW5hZ2UgTUMgTWVkaWFzJyk7CgovLyAkY3JvbiA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ3JvbicpOwovLyAkY3Jvbi0+Q3JlYXRlRXZlbnQoJ0Nyb24xNW1pbicpOwoKJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ3JvbicsICdDcm9uMTVtaW4nLCBmYWxzZSk7CiR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0Nyb24nLCAnQ3JvbkhvdXJseScsIGZhbHNlKTsKJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5HZXROYW1lKCksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiRkYiA9ICR0aGlzLT5HZXREYigpOwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKJHNxbCA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9NQ01lZGlhc19maWxlcycpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwoKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01hbmFnZSBNQ01lZGlhcycpOwokdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDcm9uJywgJ0Nyb24xNW1pbicpOwoKJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoKTsKICAgIAokdGhpcy0+QXVkaXQoMCwgJHRoaXMtPmdldEZyaWVuZGx5TmFtZSgpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKLy8gCi8vICRkYiA9ICR0aGlzLT5HZXREYigpOwovLyAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7Cgpzd2l0Y2godHJ1ZSkgewogIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMC45JywgJzwnKToKICAgIC8vICRzcWwgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMnLCAnZmlsdGVycyBYJyk7CiAgICAvLyAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwogICAgJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ3JvbicsICdDcm9uMTVtaW4nLCBmYWxzZSk7CiAgICAkdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdDcm9uJywgJ0Nyb25Ib3VybHknLCBmYWxzZSk7Cn0KCiR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+Z2V0RnJpZW5kbHlOYW1lKCksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsK]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TSZDIE1lZGlhcyBmb3IgQ01TIE1hZGUgU2ltcGxlCj09PT09PT09PT09PT09CgpNJkMgTWVkaWFzIGlzIGFuIGV4dGVuc2lvbiBmb3IgQ01TIEZvcm1zICYgTSZDIEZhY3RvcnkgdG8gYWxsb3dzIHlvdSB0byBjcmVhdGUgbXVsdGlwbGUgZmlsZXMgJiBwaWN0dXJlcyBmaWxlcy4gSXQgYWxzbyBhbGxvd3MgeW91IHRvIGNyZWF0ZSB0aHVtYm5haWxzIG9uIHRoZSBmbHkgd2l0aCBhbnkgcGljdHVyZXMgaW4gdGhlIC91cGxvYWRzLyBkaXJlY3RvcnkKCiMjIyBDcmVkaXRzCgotIERldmVsb3BtZW50IGJ5IFtUb3RvcGhlXShodHRwOi8vd3d3LnRvdG9waGUuY29tKQotIEJ1aWx0IGJ5IFtNb3JyaXMgJiBDaGFwbWFuXShodHRwOi8vd3d3Lm1vcnJpcy1jaGFwbWFuLmNvbSkKLSBCdWlsdCBmb3IgW0NNUyBNYWRlIFNpbXBsZV0oaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZykKCg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.list.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRjb2xsZWN0aW9uKX0KPGRpdiBpZD0iY29sbGVjdGlvbl97JGNvbGxlY3Rpb24tPmdldElkKCl9Ij4KICB7aWYgJGNvbGxlY3Rpb24tPmhhc0ZpbGVzKCl9CiAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KICAgIDx0aGVhZD4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD5UaXRsZTwvdGg+CiAgICAgICAgICAgIDx0aD5GaWxlbmFtZTwvdGg+CiAgICAgICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CiAgICAgICAgPC90cj4KICAgIDwvdGhlYWQ+CiAgICA8dGJvZHkgY2xhc3M9InNvcnRhYmxlIiBkYXRhLXVybD0ieyRzb3J0fSI+CiAgICAgIHtmb3JlYWNoIGZyb209JGNvbGxlY3Rpb24tPmdldEZpbGVzKCkgaXRlbT1maWxlfQogICAgICA8dHIgY2xhc3M9IntjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9JzsiIGRhdGEtaWQ9InskaWR9bWVkaWFfaWRfeyRmaWxlLT5nZXRJZCgpfSI+CiAgICAgICAgPHRkPjxkaXYgY2xhc3M9ImVkaXRhYmxlIiBpZD0ibWVkaWFfeyRmaWxlLT5nZXRJZCgpfSI+eyRmaWxlLT5nZXRUaXRsZSgpfTwvZGl2PjwvdGQ+CiAgICAgICAgPHRkPnskZmlsZS0+Z2V0T3JpZ2luYWxGaWxlbmFtZSgpfTwvdGQ+CiAgICAgICAgPHRkPjxhIGhyZWY9InskZGVsZXRlfSZhbXA7eyRpZH1maWxlX2lkPXskZmlsZS0+Z2V0SWQoKX0mYW1wO3N1cHByZXNzb3V0cHV0PTEmYW1wO3Nob3d0ZW1wbGF0ZT0wIiBjbGFzcz0iZGVsZXRlIj57JGRlbGV0ZV9pY29ufTwvYT48L3RkPgogICAgICA8L3RyPgogICAgICB7L2ZvcmVhY2h9CiAgICA8L3Rib2R5PgogIDwvdGFibGU+CiAgey9pZn0KPC9kaXY+CnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/templates/admin.pictureList.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRjb2xsZWN0aW9uKX0KPGRpdiBpZD0iY29sbGVjdGlvbl97JGNvbGxlY3Rpb24tPmdldElkKCl9Ij4KICB7aWYgJGNvbGxlY3Rpb24tPmhhc0ZpbGVzKCl9CiAgPHVsIGNsYXNzPSJzb3J0YWJsZSIgZGF0YS11cmw9Inskc29ydH0iPgogICAge2ZvcmVhY2ggZnJvbT0kY29sbGVjdGlvbi0+Z2V0RmlsZXMoKSBpdGVtPWZpbGV9CiAgICA8bGkgc3R5bGU9ImZsb2F0OiBsZWZ0OyBib3JkZXI6IDFweCBzb2xpZCBncmF5OyBwYWRkaW5nOiAwcHg7IG1hcmdpbjogNXB4OyBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IiBkYXRhLWlkPSJ7JGlkfW1lZGlhX2lkX3skZmlsZS0+Z2V0SWQoKX0iPgogICAgICAKICAgICAgICA8YSBocmVmPSJ7JGZpbGUtPmdldFVybCgpfSIgdGFyZ2V0PSJfbmV3IiByZWw9ImV4dGVybmFsIj48aW1nIHNyYz0ie01DTWVkaWFzIGFjdGlvbj0idGh1bWJuYWlsIiB3aWR0aD0xNTAgaGVpZ2h0PTE1MCBmaWxlPSRmaWxlLT5nZXRSZWxhdGl2ZVBhdGgoKX0iIGFsdD0ieyRmaWxlLT5nZXRPcmlnaW5hbEZpbGVuYW1lKCl9IiAvPjwvYT4KICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAycHg7IGJhY2tncm91bmQtY29sb3I6ICNDQ0M7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRhYmxlIiBpZD0ibWVkaWFfeyRmaWxlLT5nZXRJZCgpfSI+eyRmaWxlLT5nZXRUaXRsZSgpfTwvZGl2PgogICAgICAgICAgPGEgaHJlZj0ieyRkZWxldGV9JmFtcDt7JGlkfWZpbGVfaWQ9eyRmaWxlLT5nZXRJZCgpfSZhbXA7c3VwcHJlc3NvdXRwdXQ9MSZhbXA7c2hvd3RlbXBsYXRlPTAiIGNsYXNzPSJkZWxldGUiIHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij57JGRlbGV0ZV9pY29ufTwvYT4KICAgICAgICAgIDxkaXYgc3R5bGU9ImNsZWFyOmJvdGg7Ij48L2Rpdj4KICAgICAgICA8L2Rpdj4gICAgICAKICAgIDwvbGk+CiAgICB7L2ZvcmVhY2h9CiAgPC91bD4KICA8ZGl2IHN0eWxlPSJjbGVhcjogYm90aDsiPjwvZGl2PgogIHsvaWZ9CjwvZGl2Pgp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/admin.templates.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICR0ZW1wbGF0ZXN8Y291bnQgPiAwfQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogIDx0aGVhZD4KICAgIDx0cj4KICAgICAgPHRoPjwvdGg+CiAgICAgIDx0aD48L3RoPgogICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgogICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgogICAgPC90cj4KICA8L3RoZWFkPgogIDx0Ym9keT4KICB7Zm9yZWFjaCBmcm9tPSR0ZW1wbGF0ZXMgaXRlbT1yb3d9CiAgICA8dHIgY2xhc3M9IntjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9JzsiPgogICAgICA8dGQ+eyRyb3cudGl0bGVsaW5rfTwvdGQ+CiAgICAgIDx0ZD57JHJvdy5kZWZhdWx0fTwvdGQ+CiAgICAgIDx0ZD57JHJvdy5lZGl0bGlua308L3RkPgogICAgICA8dGQ+eyRyb3cuZGVsZXRlbGlua308L3RkPgogICAgPC90cj4Key9mb3JlYWNofQogIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+Cgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkX3RlbXBsYXRlc19pY29ufSB7JGFkZF90ZW1wbGF0ZXNfbGlua308L3A+CjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin.template_edit.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0KCTxkaXYgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGZvcm0tPnNob3dFcnJvcnMoKX08L2Rpdj4KCXskZm9ybS0+Z2V0SGVhZGVycygpfQoJPHAgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+CgkJeyRmb3JtLT5nZXRCdXR0b25zKCl9Cgk8L3A+CgoJeyRmb3JtLT5zaG93V2lkZ2V0cygnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+JUxBQkVMJTo8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPiVJTlBVVCUgPGVtPiVUSVBTJTwvZW0+PC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+Cgk8L2Rpdj4nKX0KCgk8cCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IG1hcmdpbi10b3A6IDE1cHg7Ij4KCQl7JGZvcm0tPmdldEJ1dHRvbnMoKX0KCTwvcD4KCXskZm9ybS0+Z2V0Rm9vdGVycygpfQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/frontend.default.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRjb2xsZWN0aW9uKX0KPHVsPgogIHtmb3JlYWNoIGZyb209JGNvbGxlY3Rpb24tPmdldEZpbGVzKCkgaXRlbT1maWxlfQogIDxsaT48YSBocmVmPSJ7JGZpbGUtPmdldFVybCgpfSI+eyRmaWxlLT5nZXRPcmlnaW5hbEZpbGVuYW1lKCl9PC9hPjwvbGk+CiAgey9mb3JlYWNofQo8L3VsPgp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/list.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2xpdGVyYWx9CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHsKICAvLyBjb25zb2xlLmxvZygney9saXRlcmFsfXskbGlzdHVybH17bGl0ZXJhbH0nKTsKICAgJCgnI2Z1cGxvYWRlcl97L2xpdGVyYWx9eyRjb2xsZWN0aW9uX2lkfXtsaXRlcmFsfScpLmZpbmVVcGxvYWRlcih7CiAgICAgcmVxdWVzdDogewogICAgICAgZW5kcG9pbnQ6ICd7L2xpdGVyYWx9eyRlbmRwb2ludH17bGl0ZXJhbH0nLAogICAgICAgcGFyYW1zOiB7L2xpdGVyYWx9eyRwYXJhbXN9e2xpdGVyYWx9CiAgICAgfSwKICAgICAvLyBkZWJ1ZzogdHJ1ZSwKICAgICBmYWlsZWRVcGxvYWRUZXh0RGlzcGxheTogewogICAgICAgbW9kZTogJ2N1c3RvbScKICAgICB9LAogICAgIHsvbGl0ZXJhbH17JGZ1X3ZhbGlkYXRpb259e2xpdGVyYWx9CiAgICAgdGV4dDogewogICAgICAgdXBsb2FkQnV0dG9uOiAney9saXRlcmFsfXskdXBsb2FkQnV0dG9uVGV4dH17bGl0ZXJhbH0nCiAgICAgfQogICB9KS5vbignY29tcGxldGUnLCBmdW5jdGlvbihldmVudCwgaWQsIGZpbGVOYW1lLCByZXNwb25zZUpTT04pIHsKICAgICBpZiAocmVzcG9uc2VKU09OLnN1Y2Nlc3MpIHsKICAgICAgICAvLyBSZWZyZXNoIHNvbWV0aGluZwogICAgICAgICQuYWpheCh7CiAgICAgICAgICB1cmw6J3svbGl0ZXJhbH17JGxpc3R1cmx9e2xpdGVyYWx9JwogICAgICAgIH0pLmRvbmUoZnVuY3Rpb24oZGF0YSl7CiAgICAgICAgICAkKCcjY29sbGVjdGlvbl97L2xpdGVyYWx9eyRjb2xsZWN0aW9uX2lkfXtsaXRlcmFsfScpLnJlcGxhY2VXaXRoKGRhdGEpOwogICAgICAgICAgJCgnI2NvbGxlY3Rpb25fey9saXRlcmFsfXskY29sbGVjdGlvbl9pZH17bGl0ZXJhbH0gLmRlbGV0ZScpLmVhY2goZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJCh0aGlzKSk7CiAgICAgICAgICAgICQodGhpcykuYmluZCgnY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICAgIHJlc3VsdCA9IGNvbmZpcm0oJ0RvIHlvdSByZWFsbHkgd2FudCB0byBkbyB0aGF0PycpOwogICAgICAgICAgICAgIGlmKHJlc3VsdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBsaWduZSA9ICQodGhpcyk7CiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lKTsgICAgCiAgICAgICAgICAgICAgICAkLmFqYXgoewogICAgICAgICAgICAgICAgICB1cmw6IGxpZ25lLmF0dHIoJ2hyZWYnKQogICAgICAgICAgICAgICAgfSkuZG9uZShmdW5jdGlvbihkYXRhKXsKICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5wYXJlbnQoKS5wYXJlbnQoKSk7CiAgICAgICAgICAgICAgICAgIGxpZ25lLnBhcmVudCgpLnBhcmVudCgpLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgICAvLyBsaW5lLnBhcmVudCgpLnBhcmVudCgpLmVmZmVjdCgnZHJvcCcpOyAvLyBET05UV09SSwogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAgICAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKICAgIAoKICAgICQoIiNjb2xsZWN0aW9uX3svbGl0ZXJhbH17JGNvbGxlY3Rpb25faWR9e2xpdGVyYWx9IC5zb3J0YWJsZSIgKS5zb3J0YWJsZSh7CiAgICAgIG9wYWNpdHk6IDAuNSwKICAgICAgc3RvcDogZnVuY3Rpb24oKXsKICAgICAgICB2YXIgb3JkZXIgPSAkKCIjY29sbGVjdGlvbl97L2xpdGVyYWx9eyRjb2xsZWN0aW9uX2lkfXtsaXRlcmFsfSAuc29ydGFibGUiICkuc29ydGFibGUoJ3NlcmlhbGl6ZScsIHsKICAgICAgICAgIGF0dHJpYnV0ZTogJ2RhdGEtaWQnCiAgICAgICAgfSk7CiAgICAgICAgdXJsID0gJCh0aGlzKS5hdHRyKCdkYXRhLXVybCcpICsgJyYnICsgb3JkZXI7CiAgICAgICAgLy8gY29uc29sZS5sb2codXJsKTsKICAgICAgICAkLmFqYXgoewogICAgICAgICAgICB1cmw6IHVybAogICAgICAgICAgfSk7CiAgICAgICAgCiAgICAgIH0KICAgIH0pOwogICAgLy8gJCggIi5zb3J0YWJsZSIgKS5kaXNhYmxlU2VsZWN0aW9uKCk7CgogICAgJCgnI2NvbGxlY3Rpb25fey9saXRlcmFsfXskY29sbGVjdGlvbl9pZH17bGl0ZXJhbH0gLmVkaXRhYmxlJykuZWRpdGFibGUoJ3svbGl0ZXJhbH17JGVkaXR9e2xpdGVyYWx9JywgewogICAgICBpZDogJ3svbGl0ZXJhbH17JGlkfXtsaXRlcmFsfW1lZGlhX2lkJywKICAgICAgbmFtZTogJ3svbGl0ZXJhbH17JGlkfXtsaXRlcmFsfXZhbHVlJwogICAgfSk7CiAgICAKICAgICQoJyNjb2xsZWN0aW9uX3svbGl0ZXJhbH17JGNvbGxlY3Rpb25faWR9e2xpdGVyYWx9IC5kZWxldGUnKS5lYWNoKGZ1bmN0aW9uKCl7CiAgICAgIC8vIGNvbnNvbGUubG9nKCQodGhpcykpOwogICAgICAkKHRoaXMpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oKXsKICAgICAgICByZXN1bHQgPSBjb25maXJtKCdEbyB5b3UgcmVhbGx5IHdhbnQgdG8gZG8gdGhhdD8nKTsKICAgICAgICBpZihyZXN1bHQpCiAgICAgICAgewogICAgICAgICAgbGlnbmUgPSAkKHRoaXMpOwogICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZSk7ICAgIAogICAgICAgICAgJC5hamF4KHsKICAgICAgICAgICAgdXJsOiBsaWduZS5hdHRyKCdocmVmJykKICAgICAgICAgIH0pLmRvbmUoZnVuY3Rpb24oZGF0YSl7CiAgICAgICAgICAgIGxpZ25lLnBhcmVudCgpLnBhcmVudCgpLmhpZGUoJ2hpZ2hsaWdodCcpOwogICAgICAgICAgICAvLyBsaWduZS5wYXJlbnQoKS5wYXJlbnQoKS5yZW1vdmUoKTsKICAgICAgICAgIH0pOwogICAgICAgICAgCiAgICAgICAgICByZXR1cm4gZmFsc2U7ICAgICAgICAgIAogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICAKICAgICAgfSk7CiAgICB9KTsKICAgIAogfSk7CnsvbGl0ZXJhbH0=]]></data>
	</file>
</module>
