<?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>MCFactory</name>
	<version>3.4.92</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[Cgk8aDM+RGVzY3JpcHRpb248L2gzPgoJPHA+VGhpcyBtb2R1bGUgY2FuIGdlbmVyYXRlIG5ldyBtb2R1bGVzIHRvIG1hbmFnZSBjdXN0b20gY29udGVudCB0eXBlcy48L3A+Cgk8aDM+SG93IHRvIHVzZSBpdDwvaDM+Cgk8cD5Gb3IgdGhlIGdlbmVyYWwgaGVscCwgeW91IGNhbiBmaW5kIGl0IHVuZGVyIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIGhlbHAuPC9wPgoJPHA+V2l0aCB0aGUgc3BlY2lmaWMgbW9kdWxlIGxvZ2ljLCB5b3UgY2FuIG5vdyBhZGQgb3Igb3ZlcnJpZGUgc29tZSBtZXRob2RzIGZyb20gdGhlIG9iamVjdCBjbGFzcyBpdHNlbGYuIEZvciBleGFtcGxlLCB5b3UgY291bGQgb3ZlcmlkZSB0aGUgbWV0aG9kICJnZXRUaXRsZSIgdG8gZG8gc29tZXRoaW5nIGVsc2UuPC9wPgoJPHA+U3BlY2lmaWMgbWV0aG9kcyB0aGF0IHlvdSBjb3VsZCBjb25zaWRlciBvdmVycmlkaW5nOjwvcD4KCTx1bD4KCQk8bGk+PHN0cm9uZz5nZXRDb3JlU2x1ZygpPC9zdHJvbmc+IFRoaXMgZ2VuZXJhdGUgdGhlIHVybCBzbHVnIG9mIHRoZSBtb2R1bGUuIEJ5IGRlZmF1bHQgaXQgdGFrZSBpdCBmcm9tIHRpdGxlLjwvbGk+Cgk8L3U+Cgk8cD5Tb21lIHRpcHM8L3A+Cgk8cD5Gb3IgYWxsIGZpZWxkcywgeW91IGNhbiBkZWZpbmUgb3B0aW9ucy4gV3JpdGUgdGhlbSBpbiBhICJjc3MiIHdheS48L3A+Cgk8dWw+CgkJPGxpPjxzdHJvbmc+dGlwczwvc3Ryb25nPiBBZGQgYSB0aXAgaW4gdGhlIGVuZCBvZiB0aGUgZmllbGQuPC9saT4KCTwvdWw+Cgk8aDQ+Q2hlY2tib3g8L2g0PgoJPHVsPgoJICAgIDxsaT48c3Ryb25nPnRleHQ8L3N0cm9uZz4gQ2hlY2tib3ggdGV4dDwvbGk+CgkgICAgPGxpPjxzdHJvbmc+Y2hlY2tlZDwvc3Ryb25nPiBDaGVjayB0aGUgY2hlY2tib3ggYnkgZGVmYXVsdDwvbGk+Cgk8L3VsPgoKCTxoND5TZWxlY3QgKERyb3Bkb3duKTwvaDQ+Cgk8dWw+CgkJPGxpPjxzdHJvbmc+dmFsdWVzPC9zdHJvbmc+IEEgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBkcm9wZG93bi4gWW91IGNhbiB1c2Uga2V5PT52YWx1ZSAoZXg6IHZhbHVlczpvcHRpb24xID0+IE9wdGlvbiAxLCBvcHRpb24yID0+IE9wdGlvbiAyKS4gVG8gcmV0cmlldmUgdGhlIHZhbHVlLCB1c2UgZ2V0TXlGaWVsZE5hbWVWYWx1ZSgpPC9saT4KCQk8bGk+PHN0cm9uZz5kZWZhdWx0X3ZhbHVlPC9zdHJvbmc+IFRoZSBkZWZhdWx0IHNlbGVjdGVkIHZhbHVlPC9saT4KCQk8bGk+PHN0cm9uZz5tdWx0aXBsZTwvc3Ryb25nPiBBbGxvd3MgeW91IHRvIHNlbGVjdCBtdWx0aXBsZSB2YWx1ZXMuPC9saT4KCQk8bGk+PHN0cm9uZz5leHBhbmRlZDwvc3Ryb25nPiBTaG93cyBSYWRpbyBidXR0b25zIG9yIGNoZWNrYm94ZXMgaW5zdGVhZCBvZiBzZWxlY3QgYm94LjwvbGk+Cgk8L3VsPgoJPGg0Pk1vZHVsZTwvaDQ+Cgk8cD5Gb3IgdGhlIGZpZWxkIHR5cGUgIm1vZHVsZSIsIHRoZSBvcHRpb24gc2hvdWxkIGJlIGZpbGVkIHdpdGggdGhlIGV4YWN0IG1vZHVsZSBuYW1lLiBleDogbW9kdWxlX25hbWU6TXlNb2R1bGUuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGl0IHRvIGJlIGEgbXVsdGlwbGUgZmlsZSBtdWx0aXBsZTp0cnVlIGFuZCB5b3UgY2FuIHJlcGxhY2UgZHJvcGRvd24gYnkgYSByYWRpbyBvciBjaGVja2JveCBsaXN0IHVzaW5nIHRoZSBwYXJhbSBleHBhbmRlZC4gRXg6ICJtb2R1bGVfbmFtZTpNeU1vZHVsZTttdWx0aXBsZTp0cnVlO2V4cGFuZGVkOnRydWUiPC9wPgoJPHVsPgoJCTxsaT48c3Ryb25nPm1vZHVsZV9uYW1lPC9zdHJvbmc+IFRoZSBtb2R1bGUgbmFtZTwvbGk+CgkJPGxpPjxzdHJvbmc+c2VsZWN0b3I8L3N0cm9uZz4gVGhlIGZ1bmN0aW9uIHRvIHNlbGVjdCBpdGVtcyAodGFrZSBNQ0ZDcml0ZXJpYSBmb3IgcGFyYW0pPC9saT4KCQk8bGk+PHN0cm9uZz5tdWx0aXBsZTwvc3Ryb25nPiBBbGxvdyBtdWx0aXBsZSBzZWxlY3Rpb24gPzwvbGk+CgkJPGxpPjxzdHJvbmc+ZXhwYW5kZWQ8L3N0cm9uZz4gU2hvdyBjaGVja2JveC9yYWRpbyBidXR0b24gaW5zdGVhZCBvZiBzZWxlY3RvciA/PC9saT4KCTwvdWw+Cgk8aDQ+RGF0ZTwvaDQ+Cgk8cD5Gb3IgdGhlIGZpZWxkIHR5cGUgImRhdGUiLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IHllYXIgYW5kIG51bWJlciBvZiB5ZWFycy4gRXhhbXBsZSA6ICJzdGFydF95ZWFyOjE5NTA7bnVtYmVyX3llYXJzOjcwIjwvcD4KCTxoND5UaW1lPC9oND4KCTx1bD4KCQk8bGk+PHN0cm9uZz5taWRuaWdodDwvc3Ryb25nPiBTZXQgdGhlIHRpbWUgdG8gMDowOjAgYnkgZGVmYXVsdDwvbGk+Cgk8L3VsPgoJPGg0PlBhZ2U8L2g0PgoJPHA+Rm9yIHRoZSBwYWdlcywgeW91IGNhbiB1c2UgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgZm9yIGRyb3Bkb3duIGV4Y2VwdCB0aGUgInZhbHVlcyIuIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOjwvcD4KCTx1bD4KCQk8bGk+PHN0cm9uZz5jaGlsZHJlbm9mPC9zdHJvbmc+IFNob3cgb25seSB0aGUgY2hpbGRyZW4ncyBvZiBhIHNwZWNpZmllZCBwYWdlLjwvbGk+CgkJPGxpPjxzdHJvbmc+c3RhcnRfcGFnZTwvc3Ryb25nPiBTaG93IG9ubHkgdGhlIGRlc2NlbmRhbnRzIG9mIGEgc3BlY2lmaWVkIHBhZ2UuPC9saT4KCTwvdWw+Cgk8aDQ+RG9jdW1lbnRzPC9oND4KCTxwPllvdSBjYW4gcHJvdGVjdCBkb2N1bWVudHMgZG9pbmcgImluZGlyZWN0IiBkb3dubG9hZHMgd2hpY2ggd2lsbCBhbGxvdyB5b3UgdG8gc2V0IHVzZXIgcGVybWlzc2lvbnMgb24gaXQgZm9yIGV4YW1wbGUuPC9wPgoJPHVsPgoJCTxsaT48c3Ryb25nPnByb3RlY3RlZDwvc3Ryb25nPiBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSBwYXRoIHdoZXJlIGRvY3VtZW50cyBoYXZlIHRvIGJlIHNhZmVseSBzdG9yZWQuIFRoaXMgZm9sZGVyIG5lZWRzIHdyaXRlIGFjY2Vzcy48L2xpPgoJPC91bD4KCTxoND5FdmVudHM8L2g0PgoJPHA+WW91IGNhbiBjcmVhdGUgZXZlbnRzIGhhbmRsZXIgZm9yIHRoZSBtb2R1bGVzLiBFdmVudHMgYXJlIGFjdGl2YXRlZCBieSBvdGhlciBtb2R1bGVzIGFuZCBpbiB0aGUgRXZlbnRzIG1vZHVsZSwgeW91IGNhbiBhdHRhY2ggdGhvc2UgZXZlbnRzIHRvIHlvdXIgbW9kdWxlIHNvIHlvdXIgbW9kdWxlIGlzIGFjdGl2YXRlZCB3aGVuIHRob3NlIGV2ZW50cyBoYXBwZW4uIFRvIGNyZWF0ZSBhbiBldmVudCBoYW5kbGVyLCB5b3UgbXVzdCBmaXJzdCBjcmVhdGUgaXQgaW4geW91ciBtb2R1bGUgYnkgc3BlY2lmeWluZyB0aGUgTW9kdWxlIG5hbWUgYW5kIGV2ZW50IG5hbWUgb2YgdGhpcyBtb2R1bGUsIGFuZCB0aGVuIHlvdSBjYW4gd3JpdGUgYSBwaWVjZSBvZiBjb2RlIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBlYWNoIHRpbWUgdGhpcyBldmVudCBoYXBwZW4uIFRoZW4sIGFmdGVyIHB1Ymxpc2hpbmcgeW91ciBtb2R1bGUsIHlvdSBjYW4gbGluayB0aGlzIGV2ZW50IGhhbmRsZXIgdG8gdGhlIG1vZHVsZSBldmVudCBpbiB0aGUgbW9kdWxlICJFdmVudHMiLjwvcD4KCTxoMz5TdXBwb3J0PC9oMz4KCTxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+Cgk8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KCTxwPkNvcHlyaWdodCAmY29weTsgMjAwOC0yMDEwLCBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgPGEgaHJlZj0ibWFpbHRvOmN5YmVydG90b3BoZUBnbWFpbC5jb20iPiZsdDtjeWJlcnRvdG9waGVAZ21haWwuY29tJmd0OzwvYT4gLSBNb3JyaXMgJmFtcDsgQ2hhcG1hbiBCZWxnaXVtPC9wPgoJPHA+Q29udHJpYnV0b3JzOiBHZXJyeSBWYW5kZXJtYWVzZW48L3A+Cgk8cD5UaGlzIG1vZHVsZSB3b3VsZCdudCBleGlzdCB3aXRob3V0IHRoZSBzdHJvbmcgc3VwcG9ydCBvZiA8YSBocmVmPSJodHRwOi8vd3d3Lm1vcnJpcy1jaGFwbWFuLmNvbS8iPk1vcnJpcyAmYW1wOyBDaGFwbWFuIEJlbGdpdW08L2E+IGNvbXBhbnkgYW5kIHRlYW0gd2hvIGhhdmUgc3Ryb25nbHkgc3VwcG9ydGVkIHdpdGggdGhlIGNvbnN0cnVjdGlvbiBhbmQgZXZvbHV0aW9uIG9mIGl0LjwvcD4KCTxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhpcyBtb2R1bGUuPC9wPgo8aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNNU0Zvcm1zID0mZ3Q7IDEuMTAuMTQ8L2xpPjwvdWw+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgJmx0O2pjY0Btb3JyaXMtY2hhcG1hbi5jb20mZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMy40LjkyPGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+Cgk8ZGw+CgkJPGR0PlZlcnNpb24gMC4wLjEgLSAyOSBTZXB0ZW1iZXIgMjAwOC48L2R0PgoJCTxkZD5Jbml0aWFsIFJlbGVhc2UuPC9kZD4KCQk8ZHQ+VmVyc2lvbiAxLjAgLSAyMSBPY3RvYmVyIDIwMDkuPC9kdD4KCQk8ZGQ+Rmlyc3Qgc3RhYmxlIHJlbGVhc2UuPC9kZD4KCQk8ZHQ+VmVyc2lvbiAxLjAuMSAtIDIyIE9jdG9iZXIgMjAwOS48L2R0PgoJCTxkZD4KCQkJPHVsPgoJCQkJPGxpPkNsZWFuLXVwIG9mIHRoZSBjb2RlLjwvbGk+CgkJCQk8bGk+TW9kZWxzIG9mIGFscmVhZHkgaW5zdGFsbGVkIG1vZHVsZXMgYXJlIGF1dG8tdXBkYXRlZCB3aGVuIGFkZGluZyBuZXcgY29sdW1ucy48L2xpPgoJCQk8L3VsPgoJCTwvZGQ+Cgk8L2RsPgo8YnIgLz4=]]></about>
	<description><![CDATA[A module to generate modules for custom content types.]]></description>
	<requires>
	  <requiredname>CMSForms</requiredname>
	  <requiredversion>1.10.14</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABgAAAAIAAAAGAAAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAYAAAABAAAQAABpAG4Ac2RzY2xibwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAcAcABsAHUAZwBpAG4Ac2RzY2xib29sAAAAAAkAcgBlAHMAbwB1AHIAYwBlAHNid3NwYmxvYgAAANxicGxpc3QwMNgBAgMEBQYHCAkKCQoJDg8JXVNob3dTdGF0dXNCYXJbU2hvd1BhdGhiYXJbU2hvd1Rvb2xiYXJbU2hvd1RhYlZpZXdfEBRDb250YWluZXJTaG93U2lkZWJhclxXaW5kb3dCb3VuZHNcU2lkZWJhcldpZHRoW1Nob3dTaWRlYmFyCQgJCAlfEBh7ezUwNiwgMjA0fSwgezk1OSwgODQ2fX0QrQkIGSczP0tib3yIiYqLjI2oqgAAAAAAAAEBAAAAAAAAABEAAAAAAAAAAAAAAAAAAACrAAAACQByAGUAcwBvAHUAcgBjAGUAc2RzY2xib29sAQAAAAkAcgBlAHMAbwB1AHIAYwBlAHNsc3ZQYmxvYgAAAm9icGxpc3QwMNgBAgMEBQYHCAkJCwxEFUVGXxAQdXNlUmVsYXRpdmVEYXRlc18QD3Nob3dJY29uUHJldmlld18QEWNhbGN1bGF0ZUFsbFNpemVzV2NvbHVtbnNYdGV4dFNpemVac29ydENvbHVtblhpY29uU2l6ZV8QEnZpZXdPcHRpb25zVmVyc2lvbgkJCKoNFhsfJCkuMzg91A4PEBEJEwkVV3Zpc2libGVVd2lkdGhZYXNjZW5kaW5nWmlkZW50aWZpZXIJEQGICVRuYW1l1A4PEBEJGAsaCRC1CFxkYXRlTW9kaWZpZWTUDg8QEQsYCx4ICFtkYXRlQ3JlYXRlZNQODxARCSELIwkQYQhUc2l6ZdQODxARCSYJKAkQcwlUa2luZNQODxARCysJLQgQZAlVbGFiZWzUDg8QEQswCTIIEEsJV3ZlcnNpb27UDg8QEQs1CTcIEQEsCVhjb21tZW50c9QODxARCzoLPAgQyAheZGF0ZUxhc3RPcGVuZWTUPj9AEQsYC0NXdmlzaWJsZVV3aWR0aFlhc2NlbmRpbmcICFlkYXRlQWRkZWQjQCgAAAAAAAAjQDAAAAAAAAAQAQAIABkALAA+AFIAWgBjAG4AdwCMAI0AjgCPAJoAowCrALEAuwDGAMcAygDLANAA2QDaANwA3QDqAPMA9AD1AQEBCgELAQ0BDgETARwBHQEfASABJQEuAS8BMQEyATgBQQFCAUQBRQFNAVYBVwFaAVsBZAFtAW4BcAFxAYABiQGRAZcBoQGiAaMBrQG2Ab8AAAAAAAACAQAAAAAAAABHAAAAAAAAAAAAAAAAAAABwQAAAAkAcgBlAHMAbwB1AHIAYwBlAHNsc3ZwYmxvYgAAAldicGxpc3QwMNgBAgMEBQYHCAkJCwxGFEdFXxAQdXNlUmVsYXRpdmVEYXRlc18QD3Nob3dJY29uUHJldmlld18QEWNhbGN1bGF0ZUFsbFNpemVzV2NvbHVtbnNYdGV4dFNpemVac29ydENvbHVtblhpY29uU2l6ZV8QEnZpZXdPcHRpb25zVmVyc2lvbgkJCNkNDg8QERITFBUWHyQpLjM4PUJYY29tbWVudHNeZGF0ZUxhc3RPcGVuZWRbZGF0ZUNyZWF0ZWRUc2l6ZVVsYWJlbFRraW5kV3ZlcnNpb25UbmFtZVxkYXRlTW9kaWZpZWTUFxgZGgscCR5XdmlzaWJsZVV3aWR0aFlhc2NlbmRpbmdVaW5kZXgIEQEsCRAH1BcYGRoLIQsjCBDICBAI1BcYGRoLJgsoCBC1CBAC1BcYGRoJKwstCRBhCBAD1BcYGRoLMAkyCBBkCRAF1BcYGRoJNQk3CRBzCRAE1BcYGRoLOgk8CBBLCRAG1BcYGRoJPwlBCREBiAkQANQXGBkaCSYLRQkIEAEjQCgAAAAAAAAjQDAAAAAAAAAACAAZACwAPgBSAFoAYwBuAHcAjACNAI4AjwCiAKsAugDGAMsA0QDWAN4A4wDwAPkBAQEHAREBFwEYARsBHAEeAScBKAEqASsBLQE2ATcBOQE6ATwBRQFGAUgBSQFLAVQBVQFXAVgBWgFjAWQBZgFnAWkBcgFzAXUBdgF4AYEBggGFAYYBiAGRAZIBkwGVAZ4AAAAAAAACAQAAAAAAAABIAAAAAAAAAAAAAAAAAAABpwAAAAkAcgBlAHMAbwB1AHIAYwBlAHN2U3JubG9uZwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAYCwAAAEUAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEERFNEQgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAAAAAAEAACAAAAAAAQAAQAAAAAABAACAAAAAAAEAAQAAAAAAAQACAAAAAAABAAQAAAAAAAEACAAAAAAAAQAQAAAAAAABACAAAAAAAAEAQAAAAAAAAQCAAAAAAAABAQAAAAAAAAECAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEQAAAAAAAAASAAAAAAAAABQAAAAAAAAABoWWFzY2VuZGluZ1VpbmRleAgRASwJEAfUFxgZGgshCyMIEMgIEAjUFxgZGgsmCygIELUIEALUFxgZGgkrCy0JEGEIEAPUFxgZGgswCTIIEGQJEAXUFxgZGgk1CTcJEHMJEATUFxgZGgs6CTwIEEsJEAbUFxgZGgk/CUEJEQGICRAA1BcYGRoJJgtFCQgQASNAKAAAAAAAACNAMAAAAAAAAAAIABkALAA+AFIAWgBjAG4AdwCMAI0AjgCPAKIAqwC6AMYAywDRANYA3gDjAPAA+QEBAQcBEQEXARgBGwEcAR4BJwEoASoBKwEtATYBNwE5AToBPAFFAUYBSAFJAUsBVAFVAVcBWAFaAWMBZAFmAWcBaQFyAXMBdQF2AXgBgQGCAYUBhgGIAZEBkgGTAZUBngAAAAAAAAIBAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAGnAAAACQByAGUAcwBvAHUAcgBjAGUAc3ZTcm5sb25nAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsK]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwovKiogQHZhciAkdGhpcyBNQ0ZhY3RvcnkgKi8KCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgokYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwokYy0+YWRkQXNjZW5kaW5nT3JkZXJCeUNvbHVtbignbW9kdWxlX25hbWUnKTsKJG1vZHVsZXMgPSBNQ0ZNb2R1bGU6OmRvU2VsZWN0KCRjKTsKJHJvd3MgPSBhcnJheSgpOwoKJHRva2tlbiA9IGlzc2V0KCRfUkVRVUVTVFsnX3N4XyddKT8nX3N4Xz0nLiRfUkVRVUVTVFsnX3N4XyddOidzcF89Jy4kX1JFUVVFU1RbJ3NwXyddOwoKZm9yZWFjaCAoJG1vZHVsZXMgYXMgJG1vZHVsZSkgewoJJHJvd3NbXSA9IGFycmF5KAoJCSd0aXRsZScgPT4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgJG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpLCBhcnJheSgnbW9kdWxlX2lkJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJpdGVtbGluayInKSwKICAgICAgICAnbW9kdWxlX25hbWUnID0+ICRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSwKCQknbW9kdWxlX2ZyaWVuZGx5bmFtZScgPT4gJG1vZHVsZS0+Z2V0TW9kdWxlRnJpZW5kbHlOYW1lKCksCiAgICAgICAgJ2VkaXRfbGluaycgPT4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgbnVsbCwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSksICcnLCB0cnVlKSwKCQknZGVsZXRlJyA9PiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWxldGUnLCAkcmV0dXJuaWQsICR0aGlzLT5EaXNwbGF5SW1hZ2UoJ2FwcGxpY2F0aW9uX2RlbGV0ZS5wbmcnLCAnRGVsZXRlJyksIGFycmF5KCdtb2R1bGVfaWQnID0+ICRtb2R1bGUtPmdldElkKCkpLCAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIG1vZHVsZT9cblxuKE5vIGZpbGVzIHdpbGwgYmUgZGVsZXRlZCBidXQgdGhlIG1vZHVsZSB3aWxsIG5vIGxvbmdlciBiZSBlZGl0YWJsZS4pJyksCgkJJ2VkaXQnID0+ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXQnLCAkcmV0dXJuaWQsICR0aGlzLT5EaXNwbGF5SW1hZ2UoJ2FwcGxpY2F0aW9uX2VkaXQucG5nJywgJ0VkaXQnKSwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSkpLAoJCSdwdWJsaXNoJyA9PiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdwdWJsaXNoJywgJHJldHVybmlkLCAkdGhpcy0+RGlzcGxheUltYWdlKCd3YW5kLnBuZycsICdQdWJsaXNoJyksIGFycmF5KCdtb2R1bGVfaWQnID0+ICRtb2R1bGUtPmdldElkKCkpKSwKCQkndmlldycgPT4KCQkgIAknPGEgaHJlZj0ibW9kdWxlaW50ZXJmYWNlLnBocD8nLiR0b2trZW4uJyZtb2R1bGU9Jy4kbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkuJyI+Jy4KCQkJJHRoaXMtPkRpc3BsYXlJbWFnZSgnYXBwbGljYXRpb25faG9tZS5wbmcnLCAnVmlldycpCgkJCS4nPC9hPicsCgkJJ2V4cG9ydCcgPT4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnbW9kdWxlX2V4cG9ydCcsICRyZXR1cm5pZCwgJHRoaXMtPkRpc3BsYXlJbWFnZSgnYXBwbGljYXRpb25fZ2V0LnBuZycsICdFeHBvcnQnKSwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSwnZGlzYWJsZV90aGVtZScgPT4gJ3RydWUnKSksCgkpOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Jvd3MnLCAkcm93cyk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnbW9kdWxlX3dpemFyZCcsICcnLCAnQ3JlYXRlIG5ldyBtb2R1bGUnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkX2ljb24nLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdtb2R1bGVfd2l6YXJkJywgJycsICR0aGlzLT5EaXNwbGF5SW1hZ2UoJ2FwcGxpY2F0aW9uX2FkZC5wbmcnLCAkdGhpcy0+TGFuZygndGl0bGVfY3JlYXRlX21vZHVsZScpKSkpOwoKJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+R2V0TmFtZSgpLCAkaWQsICdtb2R1bGVfaW1wb3J0JywkcmV0dXJuaWQpOwokZm9ybS0+c2V0QnV0dG9ucyhhcnJheSgnc3VibWl0JykpOwokZm9ybS0+c2V0TGFiZWwoJ3N1Ym1pdCcsICR0aGlzLT5sYW5nKCdpbXBvcnQnKSk7CiRmb3JtLT5zZXRGaWVsZHNldCgkdGhpcy0+bGFuZygnaW1wb3J0X21vZHVsZScpKTsKJGZvcm0tPmdldEZpZWxkc2V0KCR0aGlzLT5sYW5nKCdpbXBvcnRfbW9kdWxlJykpLT5zZXRXaWRnZXQoJ21vZHVsZV9uYW1lJywgJ3RleHQnLCBhcnJheSgndGlwcycgPT4gJHRoaXMtPmxhbmcoJ2xlYXZlX2VtcHR5JyksICdzaXplJyA9PiA0MCkpOwokZm9ybS0+Z2V0RmllbGRzZXQoJHRoaXMtPmxhbmcoJ2ltcG9ydF9tb2R1bGUnKSktPnNldFdpZGdldCgneG1sZmlsZScsICdmaWxlJyk7CgoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtJywgJGZvcm0pOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2RlZmF1bHRhZG1pbi50cGwnKTsKCg==]]></data>
	</file>
	<file>
	  <filename>/action.delete.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2lkJ10pICYmICFlbXB0eSgkcGFyYW1zWydtb2R1bGVfaWQnXSkpIHsKCSRtb2R1bGUgPSBNQ0ZNb2R1bGU6OmdldEJ5SWQoJHBhcmFtc1snbW9kdWxlX2lkJ10pOwoJJG1vZHVsZS0+ZGVsZXRlKCk7Cn0KCnJldHVybiAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKTs=]]></data>
	</file>
	<file>
	  <filename>/action.delete_action.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2FjdGlvbl9pZCddKSAmJiAhZW1wdHkoJHBhcmFtc1snbW9kdWxlX2FjdGlvbl9pZCddKSkgewoJJG1vZHVsZV9hY3Rpb24gPSBNQ0ZNb2R1bGVBY3Rpb246OnJldHJpZXZlQnlQaygkcGFyYW1zWydtb2R1bGVfYWN0aW9uX2lkJ10pOwoJJG1vZHVsZV9hY3Rpb24tPmRlbGV0ZSgpOwoJCglyZXR1cm4gJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2VkaXQnLCAkcmV0dXJuaWQsIGFycmF5KCdtb2R1bGVfaWQnID0+ICRtb2R1bGVfYWN0aW9uLT5tb2R1bGVfaWQsJ2FjdGl2ZV90YWInID0+ICdhY3Rpb25zJykpOwp9CgpyZXR1cm4gJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ2FjdGl2ZV90YWInID0+ICdhY3Rpb25zJykpOw==]]></data>
	</file>
	<file>
	  <filename>/action.dev.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWNtc21zKCkpIGV4aXQ7Ci8qKiBAdmFyICR0aGlzIE1DRmFjdG9yeSAqLwovLwovLyRtb2R1bGUgPSBNQ0ZNb2R1bGU6OnJldHJpZXZlQnlQaygyKTsKLy8KLy8vLyBERVYgQ0xFQU4KLy8vL01DRk1vZHVsZUZpZWxkOjpkZWxldGVUYWJsZSgpOwovLy8vTUNGTW9kdWxlRmllbGQ6OmNyZWF0ZVRhYmxlKCk7Ci8vCi8vCi8vCi8vLy9lY2hvICc8cHJlPic7Ci8vLy92YXJfZHVtcCgkbW9kdWxlLT5nZXRTdHJ1Y3R1cmUoKS0+Z2V0U3RydWN0dXJlKCkpOwovLy8vZWNobyAnPC9wcmU+JzsKLy8KLy8vLyRtb2R1bGUtPmdldFN0cnVjdHVyZSgpLT51cGdyYWRlU3RydWN0dXJlKCk7Ci8vCi8vJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+Z2V0TmFtZSgpLCAkaWQsICdkZXYnLCAkcmV0dXJuaWQpOwovLyRmaWVsZHMgPSAkbW9kdWxlLT5nZXRGaWVsZHMoKTsKLy8KLy9mb3JlYWNoKCRmaWVsZHMgYXMgJGZpZWxkKQovL3sKLy8gICAgLyoqIEB2YXIgTUNGTW9kdWxlRmllbGQgJGZpZWxkICovCi8vICAgICRmb3JtLT5zZXRXaWRnZXQoJGZpZWxkLT5nZXRGaWVsZE5hbWUoKSwgJGZpZWxkLT5nZXRGb3JtVHlwZSgpLCBhcnJheSgKLy8gICAgICAgICdsYWJlbCcgPT4gJGZpZWxkLT5nZXRMYWJlbCgpCi8vICAgICkpOwovL30KLy8KLy8kc21hcnR5LT5hc3NpZ24oJ2Zvcm0nLCAkZm9ybSk7Ci8vJHNtYXJ0eS0+YXNzaWduKCdmaWVsZHMnLCAkZmllbGRzKTsKLy8KLy9lY2hvICc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInIC4gJHRoaXMtPmxvYWRSZXNvdXJjZSgncHVibGljL2Nzcy9hZG1pbl90ZW1wbGF0ZV9lZGl0LmNzcycpLiAnIiAvPic7Ci8vCi8vZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbi5lZGl0X2FkbWluX3RlbXBsYXRlLnRwbCcpOwovLwovL2VjaG8gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiAkdGhpcy0+bG9hZFJlc291cmNlKCdwdWJsaWMvanMvYWRtaW5fdGVtcGxhdGVfZWRpdC5qcycpIC4gJyI+PC9zY3JpcHQ+JzsK]]></data>
	</file>
	<file>
	  <filename>/action.edit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwovKiogQHZhciAkdGhpcyBNQ0ZhY3RvcnkgKi8KCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgovKgoJTW9kdWxlIEVkaXRpb24KKi8KCi8vIFRhYnMKCiR0YWJzID0gYXJyYXkoCiAgICAnbWFpbicgPT4gZmFsc2UsCi8vCSdmaWVsZHMnID0+IGZhbHNlLAogICAgJ2FjdGlvbnMnID0+IGZhbHNlLAogICAgJ2V4dHJhX2ZlYXR1cmVzJyA9PiBmYWxzZSwKICAgICdsb2dpYycgPT4gZmFsc2UsCiAgICAnb3B0aW9ucycgPT4gZmFsc2UKKTsKCmlmIChpc3NldCgkcGFyYW1zWydhY3RpdmVfdGFiJ10pKSB7CiAgICAkdGFic1skcGFyYW1zWydhY3RpdmVfdGFiJ11dID0gdHJ1ZTsKfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfaGVhZGVycycsICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKSAuCgogICAgJHRoaXMtPlNldFRhYkhlYWRlcignbWFpbicsICR0aGlzLT5MYW5nKCdtYWluJyksICR0YWJzWydtYWluJ10pIC4KLy8JJHRoaXMtPlNldFRhYkhlYWRlcignZmllbGRzJywkdGhpcy0+TGFuZygnZmllbGRzJyksICR0YWJzWydmaWVsZHMnXSkuCiAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdhY3Rpb25zJywgJHRoaXMtPkxhbmcoJ2FjdGlvbnMnKSwgJHRhYnNbJ2FjdGlvbnMnXSkgLgogICAgJHRoaXMtPlNldFRhYkhlYWRlcignZXh0cmFfZmVhdHVyZXMnLCAkdGhpcy0+TGFuZygnZXh0cmFfZmVhdHVyZXMnKSwgJHRhYnNbJ2V4dHJhX2ZlYXR1cmVzJ10pIC4KICAgICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2xvZ2ljJywgJHRoaXMtPkxhbmcoJ2xvZ2ljJyksICR0YWJzWydsb2dpYyddKSAuCiAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdvcHRpb25zJywgJHRoaXMtPkxhbmcoJ29wdGlvbnMnKSwgJHRhYnNbJ29wdGlvbnMnXSkgLgoKICAgICR0aGlzLT5FbmRUYWJIZWFkZXJzKCkgLiAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9tYWluX3RhYicsICR0aGlzLT5TdGFydFRhYignbWFpbicpKTsKLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2ZpZWxkc190YWInLCR0aGlzLT5TdGFydFRhYignZmllbGRzJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2FjdGlvbnNfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdhY3Rpb25zJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2V4dHJhX2ZlYXR1cmVzX3RhYicsICR0aGlzLT5TdGFydFRhYignZXh0cmFfZmVhdHVyZXMnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfbG9naWNfdGFiJywgJHRoaXMtPlN0YXJ0VGFiKCdsb2dpYycpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9vcHRpb25zX3RhYicsICR0aGlzLT5TdGFydFRhYignb3B0aW9ucycpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kX3RhYicsICR0aGlzLT5FbmRUYWIoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFiX2Zvb3RlcnMnLCAkdGhpcy0+RW5kVGFiQ29udGVudCgpKTsKCi8vIExvZ2ljCgppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSB7CiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKTsKICAgIGV4aXQ7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkgJiYgIWVtcHR5KCRwYXJhbXNbJ21vZHVsZV9pZCddKSkgewogICAgJG1vZHVsZSA9IE1DRk1vZHVsZTo6cmV0cmlldmVCeVBrKCRwYXJhbXNbJ21vZHVsZV9pZCddKTsKfSBlbHNlIHsKICAgICRtb2R1bGUgPSBuZXcgTUNGTW9kdWxlKCk7CiAgICAkbW9kdWxlLT5zZXRQYXJlbnRNb2R1bGUoMCk7CiAgICAkbW9kdWxlLT5zZXRNb2R1bGVGcmllbmRseW5hbWUoJ01vZHVsZScpOwp9CgoKaWYgKGlzc2V0KCRwYXJhbXNbJ21vdmVfdXAnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snbW92ZV91cCddKSkgewogICAgZm9yZWFjaCAoJHBhcmFtc1snbW92ZV91cCddIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgJG1vZHVsZS0+b3JkZXJFeHRyYUZpZWxkcygka2V5LCAndXAnKTsKICAgICAgICAkbW9kdWxlLT5zYXZlKCk7CiAgICB9Cn0KCmlmIChpc3NldCgkcGFyYW1zWydtb3ZlX2Rvd24nXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snbW92ZV9kb3duJ10pKSB7CiAgICBmb3JlYWNoICgkcGFyYW1zWydtb3ZlX2Rvd24nXSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICRtb2R1bGUtPm9yZGVyRXh0cmFGaWVsZHMoJGtleSwgJ2Rvd24nKTsKICAgICAgICAkbW9kdWxlLT5zYXZlKCk7CiAgICB9Cn0KCmlmIChpc3NldCgkcGFyYW1zWydwdWJsaXNoJ10pIHx8IGlzc2V0KCRwYXJhbXNbJ3NhdmUnXSkpIHsKICAgICRtb2R1bGUtPnBvcHVsYXRlRnJvbUFycmF5KCRwYXJhbXMpOwogICAgaWYgKCFpc3NldCgkcGFyYW1zWydzaG93X21vZHVsZSddKSkgewogICAgICAgIC8vdmFyX2R1bXAoJHBhcmFtcyk7CiAgICAgICAgJG1vZHVsZS0+c2V0U2hvd01vZHVsZSgwKTsKICAgIH0KICAgIGlmICghaXNzZXQoJHBhcmFtc1snYXBpX2VuYWJsZWQnXSkpIHsKICAgICAgICAvL3Zhcl9kdW1wKCRwYXJhbXMpOwogICAgICAgICRtb2R1bGUtPnNldEFQSUVuYWJsZWQoMCk7CiAgICB9CiAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ2lzX3VzZXJfbW9kdWxlJ10pKSB7CiAgICAgICAgLy92YXJfZHVtcCgkcGFyYW1zKTsKICAgICAgICAkbW9kdWxlLT5zZXRJc1VzZXJNb2R1bGUoMCk7CiAgICB9CiAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ2lzX3Byb3RlY3RlZCddKSkgewogICAgICAgIC8vdmFyX2R1bXAoJHBhcmFtcyk7CiAgICAgICAgJG1vZHVsZS0+c2V0SXNQcm90ZWN0ZWQoMCk7CiAgICB9CiAgICAvLyBSRU9SREVSIEZJRUxEUwogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2ZpZWxkc19vcmRlcmVkJ10pKSB7CiAgICAgICAgJHN0ciA9ICRtb2R1bGUtPmdldFN0cnVjdHVyZSgpOwogICAgICAgIGZvcmVhY2ggKCRwYXJhbXNbJ2ZpZWxkc19vcmRlcmVkJ10gYXMgJHRhYl9rZXkgPT4gJHRhYnMpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRhYnMgYXMgJGZpZWxkc2V0X2tleSA9PiAkZmllbGRzX29yZGVyZWQpIHsKICAgICAgICAgICAgICAgIGlmICgkZmllbGRzX29yZGVyZWQgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAkc3RyLT5yZW9yZGVyRmllbGRzKCR0YWJfa2V5LCAkZmllbGRzZXRfa2V5LCAkZmllbGRzX29yZGVyZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRtb2R1bGUtPnNldFN0cnVjdHVyZSgkc3RyKTsKICAgIH0KCiAgICAkbW9kdWxlLT5zYXZlKCk7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sncHVibGlzaCddKSkgewoKCiAgICAgICAgJGdlbmVyYXRvciA9IG5ldyBNQ0ZHZW5lcmF0b3IoJG1vZHVsZSk7CgogICAgICAgIHRyeXsKICAgICAgICAgICAgJGdlbmVyYXRvci0+cHVibGlzaCgpOwogICAgICAgICAgICAkdGhpcy0+U2V0Rmxhc2hNZXNzYWdlKCdNb2R1bGUgJyAuICRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICcgcHVibGlzaGVkIScpOwogICAgICAgICAgICBlY2hvICc8aDMgc3R5bGU9ImNvbG9yOmdyZWVuIj5Nb2R1bGUgcHVibGlzaGVkITwvaDM+JzsKICAgICAgICAgICAgY21zbXMoKS0+Y2xlYXJfY2FjaGVkX2ZpbGVzKC0xKTsgLy8gRk9SQ0UgQ0xFQVIgQ0FDSEUKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0JywgJHJldHVybmlkLCBhcnJheSgnbW9kdWxlX2lkJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSk7CgogICAgICAgIH0gY2F0Y2goRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5TZXRGbGFzaE1lc3NhZ2UoJ0Vycm9yIHdoaWxlIGdlbmVyYXRpb24gdGhlIG1vZHVsZTogJyAuICRlLT5nZXRNZXNzYWdlKCksICdlcnJvcicpOwogICAgICAgICAgICBlY2hvICc8aDMgc3R5bGU9ImNvbG9yOnJlZCI+RXJyb3Igd2hpbGUgZ2VuZXJhdGlvbiB0aGUgbW9kdWxlOiAnIC4gJGUtPmdldE1lc3NhZ2UoKSAuICc8L2gzPic7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSkpOwogICAgICAgIH0KCiAgICB9IGVsc2UgewogICAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0JywgJHJldHVybmlkLCBhcnJheSgnbW9kdWxlX2lkJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSk7CiAgICB9Cn0KCi8vIFRPRE86IFNPUlQgRVZFUllUSElORyBIRVJFCmlmKCRtb2R1bGUtPmdldElkKCkpCnsKICAgICRzbWFydHktPmFzc2lnbignbW9kdWxlX2Rlc2lnbicsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ21vZHVsZV9kZXNpZ24nLCAkcmV0dXJuaWQsIG51bGwsIGFycmF5KCdtb2R1bGVfaWQnID0+ICRtb2R1bGUtPmdldElkKCkpLCBudWxsLCB0cnVlKSk7Cn0KCgoKCiRmaWVsZF90eXBlcyA9ICRtb2R1bGUtPmdldEZpZWxkVHlwZXMoKTsKJGZpZWxkX3R5cGVzX3dpdGhfb3B0aW9ucyA9IGFycmF5KCk7CmZvcmVhY2ggKCRmaWVsZF90eXBlcyBhcyAkZmllbGRfdHlwZSkgewogICAgaWYgKCRmaWVsZF90eXBlWydvcHRpb25zJ10pIHsKICAgICAgICAkZmllbGRfdHlwZXNfd2l0aF9vcHRpb25zW10gPSAkZmllbGRfdHlwZVsndHlwZSddOwogICAgfQp9CgokZmlsdGVyX3R5cGVzID0gJG1vZHVsZS0+Z2V0RmlsdGVyVHlwZXMoKTsKCi8vLS0KCiRmb3JtX21vZHVsZV9vcHRpb25zID0gbmV3IENNU0Zvcm0oJHRoaXMtPkdldE5hbWUoKSwgJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkKTsKCiRmb3JtX21vZHVsZV9vcHRpb25zLT5zZXRXaWRnZXQoJ3BhcmVudF9tb2R1bGUnLCAnc2VsZWN0JywgYXJyYXkoJ2xhYmVsJyA9PiAnUGFyZW50IG1vZHVsZScsICd2YWx1ZXMnID0+IE1DRk1vZHVsZTo6Z2V0UG9zc2libGVQYXJlbnRzTW9kdWxlKCRtb2R1bGUpLCAnaW5jbHVkZV9jdXN0b20nID0+ICcnLCAnb2JqZWN0JyA9PiAmJG1vZHVsZSkpOwokZm9ybV9tb2R1bGVfb3B0aW9ucy0+c2V0V2lkZ2V0KCdhZG1pbl9zZWN0aW9uJywgJ3NlbGVjdCcsIGFycmF5KCdsYWJlbCcgPT4gJ0FkbWluIHNlY3Rpb24nLCAndmFsdWVzJyA9PiBNQ0ZNb2R1bGU6OiRwb3NzaWJsZV9zZWN0aW9ucywgJ29iamVjdCcgPT4gJiRtb2R1bGUpKTsKJGZvcm1fbW9kdWxlX29wdGlvbnMtPnNldFdpZGdldCgnc2hvd19tb2R1bGUnLCAnY2hlY2tib3gnLCBhcnJheSgnbGFiZWwnID0+ICdTaG93IG1vZHVsZScsICdvYmplY3QnID0+ICYkbW9kdWxlLCAndGV4dCcgPT4gJ1Nob3cgdGhlIG1vZHVsZSBpbiB0aGUgYWRtaW4/JykpOwoKaWYgKCRtb2RfaW5zdGFuY2UgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKSkgewogICAgJGFwaV91cmwgPSAkbW9kX2luc3RhbmNlLT5jcmVhdGVMaW5rKCRpZCwgJ2FwaScsICRyZXR1cm5pZCwgJGNvbnRlbnRzID0gJycsIGFycmF5KCksICcnLCB0cnVlLCBmYWxzZSwgJycsIGZhbHNlLCBzdHJ0b2xvd2VyKCRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSkgLiAnL2FwaS9saXN0Jyk7CiAgICAkYXBpX3VybCA9ICcoPGEgaHJlZj0iJyAuICRhcGlfdXJsIC4gJyI+JyAuICRhcGlfdXJsIC4gJzwvYT4pJzsKfSBlbHNlIHsKICAgICRhcGlfdXJsID0gZmFsc2U7Cn0KCiRmb3JtX21vZHVsZV9vcHRpb25zLT5zZXRXaWRnZXQoJ2FwaV9lbmFibGVkJywgJ2NoZWNrYm94JywgYXJyYXkoJ2xhYmVsJyA9PiAnQVBJJywgJ29iamVjdCcgPT4gJiRtb2R1bGUsICd0ZXh0JyA9PiAnRW5hYmxlIEFQSSBhY2Nlc3MnLCAndGlwcycgPT4gJGFwaV91cmwpKTsKJGZvcm1fbW9kdWxlX29wdGlvbnMtPnNldFdpZGdldCgnaXNfdXNlcl9tb2R1bGUnLCAnY2hlY2tib3gnLCBhcnJheSgnbGFiZWwnID0+ICdDTVNVc2VyXCdzIG1vZHVsZScsICdvYmplY3QnID0+ICYkbW9kdWxlLCAndGV4dCcgPT4gJ2NhbiBhIENNU1VzZXIgYWRkIGl0XCdzIG93biBlbnRyaWVzPycpKTsKJGZvcm1fbW9kdWxlX29wdGlvbnMtPnNldFdpZGdldCgnaXNfcHJvdGVjdGVkJywgJ2NoZWNrYm94JywgYXJyYXkoJ2xhYmVsJyA9PiAnUHJvdGVjdCBmaWxlcycsICdvYmplY3QnID0+ICYkbW9kdWxlLCAndGV4dCcgPT4gJ1Nob3VsZCB0aGUgZmlsZXMgdXBsb2FkZWQgYmUgc3RvcmVkIGluIGEgcHJvdGVjdGVkIGZvbGRlcj8nKSk7CgokZm9ybV9tb2R1bGVfb3B0aW9ucy0+c2V0V2lkZ2V0KCdmaWxlc19wYXRoJywgJ3RleHQnLCBhcnJheSgnbGFiZWwnID0+ICdGaWxlIHN0b3JhZ2UgcGF0aCAoc2VydmVyIHBhdGgpIGluIGNhc2Ugb2YgcHJvdGVjdGVkIGZpbGVzJywgJ29iamVjdCcgPT4gJiRtb2R1bGUpKTsKCiRzbWFydHktPmFzc2lnbignZm9ybV9tb2R1bGVfb3B0aW9ucycsICRmb3JtX21vZHVsZV9vcHRpb25zKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignbW9kdWxlX2lkJywgJGlkKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX3N0YXJ0JywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdlZGl0JywgJHJldHVybmlkLCAncG9zdCcpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9tb2R1bGVfaWQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnbW9kdWxlX2lkJywgJG1vZHVsZS0+Z2V0SWQoKSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X21vZHVsZV9wYXJlbnQnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdwYXJlbnRfbW9kdWxlJywgYXJyYXlfZmxpcChhcnJheSgwID0+ICcnKSArIE1DRk1vZHVsZTo6Z2V0UG9zc2libGVQYXJlbnRzTW9kdWxlKCRtb2R1bGUpKSwgLTEsICRtb2R1bGUtPmdldFBhcmVudE1vZHVsZSgpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2FkbWluX3NlY3Rpb24nLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigKICAgICRpZCwKICAgICdhZG1pbl9zZWN0aW9uJywKICAgIGFycmF5X2ZsaXAoTUNGTW9kdWxlOjokcG9zc2libGVfc2VjdGlvbnMpLAogICAgJy0xJywKICAgICRtb2R1bGUtPmdldEFkbWluU2VjdGlvbigpCikpOwoKCiR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbW9kdWxlX2ZyaWVuZGx5bmFtZScsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbW9kdWxlX2ZyaWVuZGx5bmFtZScsICRtb2R1bGUtPmdldE1vZHVsZUZyaWVuZGx5bmFtZSgpLCA1MCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RpdGxlX2xhYmVsJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0aXRsZV9sYWJlbCcsICRtb2R1bGUtPmdldFRpdGxlTGFiZWwoKSwgNTApKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjcmVhdGVkX2J5JywgKCRtb2R1bGUtPmdldENyZWF0ZWRCeSgpICE9ICcnKSA/IGNtc21zKCktPkdldFVzZXJPcGVyYXRpb25zKCktPkxvYWRVc2VyQnlJRCgkbW9kdWxlLT5nZXRDcmVhdGVkQnkoKSktPnVzZXJuYW1lIDogbnVsbCk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignY3JlYXRlZF9hdCcsICRtb2R1bGUtPmdldENyZWF0ZWRBdCgpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd1cGRhdGVkX2J5JywgKCRtb2R1bGUtPmdldFVwZGF0ZWRCeSgpICE9ICcnKSA/IGNtc21zKCktPkdldFVzZXJPcGVyYXRpb25zKCktPkxvYWRVc2VyQnlJRCgkbW9kdWxlLT5nZXRVcGRhdGVkQnkoKSktPnVzZXJuYW1lIDogbnVsbCk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndXBkYXRlZF9hdCcsICRtb2R1bGUtPmdldFVwZGF0ZWRBdCgpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaWx0ZXJzJywgJG1vZHVsZS0+Z2V0RmlsdGVycygpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtb2R1bGVfbG9naWMnLCAkdGhpcy0+Q3JlYXRlU3ludGF4QXJlYSgkaWQsICRtb2R1bGUtPmdldE1vZHVsZUxvZ2ljKCksICdtb2R1bGVfbG9naWMnLCAncGFnZWJpZ3RleHRhcmVhJywgJycsICcnLCAnJywgOTAsIDE1KSk7CgoKCiR0aGlzLT5zbWFydHktPmFzc2lnbigncHVibGlzaF9idXR0b24nLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAncHVibGlzaCcsICdQdWJsaXNoJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3NhdmVfYnV0dG9uJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3NhdmUnLCAnU2F2ZScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWxfYnV0dG9uJywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NhbmNlbCcsICdDYW5jZWwnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZmllbGRfdHlwZXMnLCAkZmllbGRfdHlwZXMpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZpZWxkX3R5cGVzX3dpdGhfb3B0aW9ucycsICRmaWVsZF90eXBlc193aXRoX29wdGlvbnMpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZpbHRlcl90eXBlcycsICRmaWx0ZXJfdHlwZXMpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtb3ZlX3VwJywgJHRoaXMtPmdldEltYWdlKCdhcnJvd191cC5wbmcnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignbW92ZV9kb3duJywgJHRoaXMtPmdldEltYWdlKCdhcnJvd19kb3duLnBuZycpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbigncmVtb3ZlX2ljb24nLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlZGl0X2ljb24nLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCAnJywgJycsICdzeXN0ZW1pY29uJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZF9pY29uJywgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYWRkJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSk7CgovLyR0aGlzLT5zbWFydHktPmFzc2lnbigndXBfaWNvbicsY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3VwLmdpZicsJycsICcnLCAnJywgJ3N5c3RlbWljb24nKSk7Ci8vJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkb3duX2ljb24nLGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kb3duLmdpZicsICR0aGlzLT5MYW5nKCdtb3ZlX2Rvd24nKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKTsKCgovLyBBY3RpdmUgZmllbGQgdGFiCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWN0aXZlX2ZpZWxkc190YWInLCAoaXNzZXQoJHBhcmFtc1snYWN0aXZlX2ZpZWxkc190YWInXSkpID8gJHBhcmFtc1snYWN0aXZlX2ZpZWxkc190YWInXSA6ICcnKTsKCiRmaWVsZHMgPSAkbW9kdWxlLT5nZXRGaWVsZFR5cGVzKCk7CiRzZWxlY3QgPSBhcnJheSgpOwpmb3JlYWNoICgkZmllbGRzIGFzICRmaWVsZCkgewogICAgJHNlbGVjdFskZmllbGRbJ3R5cGUnXV0gPSAkZmllbGRbJ2xhYmVsJ107Cn0KCi8vIC0tLSBTVFJVQ1RVUkUgLS0tCiR0aGlzLT5zbWFydHktPmFzc2lnbignZXh0cmFfZmllbGRzJywgJG1vZHVsZS0+Z2V0T2xkRXh0cmFGaWVsZHMoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RydWN0dXJlJywgJG1vZHVsZS0+Z2V0U3RydWN0dXJlKCkpOwoKLy8gZWNobyAnPHByZT4nOwovLyB2YXJfZHVtcCgkbW9kdWxlLT5nZXRTdHJ1Y3R1cmUoKSk7Ci8vIGVjaG8gJzwvcHJlPic7CgovLyAtLS0gVEFCIEZPUk0gLS0tCiR0YWJfZm9ybSA9IG5ldyBDTVNGb3JtKCdNQ0ZhY3RvcnknLCAkaWQsICdtYW5hZ2VfdGFicycsICRyZXR1cm5pZCk7CiR0YWJfZm9ybS0+c2V0QnV0dG9ucyhhcnJheSgpKTsKJHRhYl9mb3JtLT5zZXRXaWRnZXQoJ21vZHVsZV9pZCcsICdoaWRkZW4nLCBhcnJheSgndmFsdWUnID0+ICRtb2R1bGUtPmdldElkKCkpKTsKJHRhYl9mb3JtLT5zZXRXaWRnZXQoJ25hbWUnLCAndGV4dCcsIGFycmF5KCdzaXplJyA9PiA0NSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYl9mb3JtJywgJHRhYl9mb3JtKTsKCi8vIC0tLSBUQUIgUkVNT1ZFIEZPUk0gLS0tCiR0YWJfcmVtb3ZlX2Zvcm0gPSBuZXcgQ01TRm9ybSgnTUNGYWN0b3J5JywgJGlkLCAnbWFuYWdlX3RhYnMnLCAkcmV0dXJuaWQpOwokdGFiX3JlbW92ZV9mb3JtLT5zZXRCdXR0b25zKGFycmF5KCkpOwokdGFiX3JlbW92ZV9mb3JtLT5zZXRXaWRnZXQoJ21vZHVsZV9pZCcsICdoaWRkZW4nLCBhcnJheSgndmFsdWUnID0+ICRtb2R1bGUtPmdldElkKCkpKTsKJHRhYl9yZW1vdmVfZm9ybS0+c2V0V2lkZ2V0KCdyZW1vdmVfdGFiJywgJ2hpZGRlbicpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYl9yZW1vdmVfZm9ybScsICR0YWJfcmVtb3ZlX2Zvcm0pOwoKLy8gLS0tIEZJRUxEU0VUIEZPUk0gLS0tCiRmaWVsZHNldF9mb3JtID0gbmV3IENNU0Zvcm0oJ01DRmFjdG9yeScsICRpZCwgJ21hbmFnZV9maWVsZHNldCcsICRyZXR1cm5pZCk7CiRmaWVsZHNldF9mb3JtLT5zZXRCdXR0b25zKGFycmF5KCkpOwokZmllbGRzZXRfZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVfaWQnLCAnaGlkZGVuJywgYXJyYXkoJ3ZhbHVlJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSk7CiRmaWVsZHNldF9mb3JtLT5zZXRXaWRnZXQoJ3RhYl9rZXknLCAnaGlkZGVuJyk7CiRmaWVsZHNldF9mb3JtLT5zZXRXaWRnZXQoJ25hbWUnLCAndGV4dCcsIGFycmF5KCdzaXplJyA9PiA0NSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZpZWxkc2V0X2Zvcm0nLCAkZmllbGRzZXRfZm9ybSk7CgovLyAtLS0gUkVNT1ZFIEZJRUxEU0VUIEZPUk0gLS0tCiRyZW1vdmVfZmllbGRzZXRfZm9ybSA9IG5ldyBDTVNGb3JtKCdNQ0ZhY3RvcnknLCAkaWQsICdtYW5hZ2VfZmllbGRzZXQnLCAkcmV0dXJuaWQpOwokcmVtb3ZlX2ZpZWxkc2V0X2Zvcm0tPnNldEJ1dHRvbnMoYXJyYXkoKSk7CiRyZW1vdmVfZmllbGRzZXRfZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVfaWQnLCAnaGlkZGVuJywgYXJyYXkoJ3ZhbHVlJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSk7CiRyZW1vdmVfZmllbGRzZXRfZm9ybS0+c2V0V2lkZ2V0KCd0YWJfa2V5JywgJ2hpZGRlbicpOwokcmVtb3ZlX2ZpZWxkc2V0X2Zvcm0tPnNldFdpZGdldCgncmVtb3ZlX2ZpZWxkc2V0JywgJ2hpZGRlbicpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3JlbW92ZV9maWVsZHNldF9mb3JtJywgJHJlbW92ZV9maWVsZHNldF9mb3JtKTsKCi8vIC0tLSBBREQvRURJVCBGSUVMRCBGT1JNIC0tLQokYWRkX2ZpZWxkX2Zvcm0gPSBuZXcgQ01TRm9ybSgnTUNGYWN0b3J5JywgJGlkLCAnbWFuYWdlX2ZpZWxkJywgJHJldHVybmlkKTsKJGFkZF9maWVsZF9mb3JtLT5zZXRCdXR0b25zKGFycmF5KCkpOwokYWRkX2ZpZWxkX2Zvcm0tPnNldFdpZGdldCgnbW9kdWxlX2lkJywgJ2hpZGRlbicsIGFycmF5KCd2YWx1ZScgPT4gJG1vZHVsZS0+Z2V0SWQoKSkpOwokYWRkX2ZpZWxkX2Zvcm0tPnNldFdpZGdldCgndGFiX2tleScsICdoaWRkZW4nKTsKJGFkZF9maWVsZF9mb3JtLT5zZXRXaWRnZXQoJ2ZpZWxkc2V0X2tleScsICdoaWRkZW4nKTsKJGFkZF9maWVsZF9mb3JtLT5zZXRXaWRnZXQoJ2xhYmVsJywgJ3RleHQnLCBhcnJheSgnc2l6ZScgPT4gNDUpKTsKJGFkZF9maWVsZF9mb3JtLT5zZXRXaWRnZXQoJ25hbWUnLCAnaGlkZGVuJyk7CiRhZGRfZmllbGRfZm9ybS0+c2V0V2lkZ2V0KCdwbGFjZScsICdzZWxlY3QnLCBhcnJheSgndmFsdWVzJyA9PiAkbW9kdWxlLT5nZXRTdHJ1Y3R1cmUoKS0+Z2V0RmllbGRzZXRzV2l0aFRhYnNGb3JTZWxlY3QoKSkpOwokYWRkX2ZpZWxkX2Zvcm0tPnNldFdpZGdldCgndHlwZScsICdoaWRkZW4nKTsKJGFkZF9maWVsZF9mb3JtLT5zZXRXaWRnZXQoJ3R5cGVfc2VsZWN0JywgJ3NlbGVjdCcsIGFycmF5KCd2YWx1ZXMnID0+ICRzZWxlY3QpKTsKJGFkZF9maWVsZF9mb3JtLT5zZXRXaWRnZXQoJ29wdGlvbnMnLCAndGV4dGFyZWEnLCBhcnJheSgnY29scycgPT4gNDAsICdyb3dzJyA9PiA0LCAnYWRkdGV4dCcgPT4gJ3N0eWxlPSJ3aWR0aDoyNWVtO2hlaWdodDoxMGVtOyInKSk7CiRhZGRfZmllbGRfZm9ybS0+c2V0V2lkZ2V0KCdjb2x1bW4nLCAnY2hlY2tib3gnKTsKJGFkZF9maWVsZF9mb3JtLT5zZXRXaWRnZXQoJ2ZpbHRlcicsICdjaGVja2JveCcpOwokYWRkX2ZpZWxkX2Zvcm0tPnNldFdpZGdldCgnZnJvbnRlbmQnLCAnY2hlY2tib3gnKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRfZmllbGRfZm9ybScsICRhZGRfZmllbGRfZm9ybSk7CgovLyAtLS0gUkVNT1ZFIEZJRUxEIEZPUk0gLS0tCiRyZW1vdmVfZmllbGRfZm9ybSA9IG5ldyBDTVNGb3JtKCdNQ0ZhY3RvcnknLCAkaWQsICdtYW5hZ2VfZmllbGQnLCAkcmV0dXJuaWQpOwokcmVtb3ZlX2ZpZWxkX2Zvcm0tPnNldEJ1dHRvbnMoYXJyYXkoKSk7CiRyZW1vdmVfZmllbGRfZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVfaWQnLCAnaGlkZGVuJywgYXJyYXkoJ3ZhbHVlJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSk7CiRyZW1vdmVfZmllbGRfZm9ybS0+c2V0V2lkZ2V0KCd0YWJfa2V5JywgJ2hpZGRlbicpOwokcmVtb3ZlX2ZpZWxkX2Zvcm0tPnNldFdpZGdldCgnZmllbGRzZXRfa2V5JywgJ2hpZGRlbicpOwokcmVtb3ZlX2ZpZWxkX2Zvcm0tPnNldFdpZGdldCgnZmllbGQnLCAnaGlkZGVuJyk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigncmVtb3ZlX2ZpZWxkX2Zvcm0nLCAkcmVtb3ZlX2ZpZWxkX2Zvcm0pOwoKCi8vIEFjdGlvbnMKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRfYWN0aW9uX3VybCcsIChpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkpID8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnbWFuYWdlX2FjdGlvbicsICRyZXR1cm5pZCwgJycsIGFycmF5KCdtb2R1bGVfaWQnID0+ICRwYXJhbXNbJ21vZHVsZV9pZCddKSwgJycsIHRydWUsIGZhbHNlKSA6ICdGaXJzdCBzYXZlIHRoZSBtb2R1bGUgY29yZSBpbiBvcmRlciB0byBhZGQgYWN0aW9ucycpOwokYWN0aW9ucyA9IChpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkpID8gTUNGTW9kdWxlQWN0aW9uOjpkb1NlbGVjdChhcnJheSgnd2hlcmUnID0+IGFycmF5KCdtb2R1bGVfaWQnID0+ICRwYXJhbXNbJ21vZHVsZV9pZCddKSkpIDogYXJyYXkoKTsKZm9yZWFjaCAoJGFjdGlvbnMgYXMgJGFjdGlvbikgewogICAgJGFjdGlvbi0+ZWRpdF91cmwgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdtYW5hZ2VfYWN0aW9uJywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdtb2R1bGVfYWN0aW9uX2lkJyA9PiAkYWN0aW9uLT5nZXRJZCgpKSk7CgogICAgJGFjdGlvbi0+ZGVsZXRlX3VybCA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlbGV0ZV9hY3Rpb24nLCAkcmV0dXJuaWQsIGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdtb2R1bGVfYWN0aW9uX2lkJyA9PiAkYWN0aW9uLT5nZXRJZCgpKSk7CgogICAgaWYgKCRhY3Rpb24tPmlzX3B1YmxpYyA9PSAxKSB7CiAgICAgICAgJGFjdGlvbi0+aXNfcHVibGljX2ljb24gPSBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vdHJ1ZS5naWYnLCAnJywgJycsICcnLCAnc3lzdGVtaWNvbicpOwogICAgfSBlbHNlIHsKICAgICAgICAkYWN0aW9uLT5pc19wdWJsaWNfaWNvbiA9IGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9mYWxzZS5naWYnLCAnJywgJycsICcnLCAnc3lzdGVtaWNvbicpOwogICAgfQp9CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWN0aW9ucycsICRhY3Rpb25zKTsKCi8vIEV4dHJhIGZlYXR1cmVzCgokZXh0cmFfZmVhdHVyZXMgPSAkbW9kdWxlLT5nZXRFeHRyYUZlYXR1cmVzKCk7Cgokc21hcnR5X2V2ZW50cyA9IGFycmF5KCk7CgppZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2lkJ10pKSB7CiAgICBpZiAoaXNfYXJyYXkoJGV4dHJhX2ZlYXR1cmVzLT5nZXRFdmVudHMoKSkpIHsKICAgICAgICBmb3JlYWNoICgkZXh0cmFfZmVhdHVyZXMtPmdldEV2ZW50cygpIGFzICRtb2R1bGVfbmFtZSA9PiAkZXZlbnRzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRldmVudHMgYXMgJGV2ZW50X25hbWUgPT4gJGNvZGUpIHsKICAgICAgICAgICAgICAgICRzbWFydHlfZXZlbnRzW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbW9kdWxlX25hbWUnID0+ICRtb2R1bGVfbmFtZSwKICAgICAgICAgICAgICAgICAgICAnZXZlbnRfbmFtZScgPT4gJGV2ZW50X25hbWUsCiAgICAgICAgICAgICAgICAgICAgJ2VkaXQnID0+ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ21hbmFnZV9ldmVudCcsICRyZXR1cm5pZCwgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgnbW9kdWxlX2lkJyA9PiAkcGFyYW1zWydtb2R1bGVfaWQnXSwgJ21vZHVsZV9uYW1lJyA9PiAkbW9kdWxlX25hbWUsICdldmVudF9uYW1lJyA9PiAkZXZlbnRfbmFtZSkpLAogICAgICAgICAgICAgICAgICAgICdkZWxldGUnID0+ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ21hbmFnZV9ldmVudCcsICRyZXR1cm5pZCwgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZygnZWRpdCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdtb2R1bGVfaWQnID0+ICRwYXJhbXNbJ21vZHVsZV9pZCddLCAnZGVsZXRlJyA9PiB0cnVlLCAnbW9kdWxlX25hbWUnID0+ICRtb2R1bGVfbmFtZSwgJ2V2ZW50X25hbWUnID0+ICRldmVudF9uYW1lKSwgJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBldmVudD8nKQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKCiR0aGlzLT5zbWFydHktPmFzc2lnbignZXZlbnRzJywgJHNtYXJ0eV9ldmVudHMpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZF9ldmVudCcsIChpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkpID8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnbWFuYWdlX2V2ZW50JywgJHJldHVybmlkLCAnJywgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJHBhcmFtc1snbW9kdWxlX2lkJ10pLCAnJywgdHJ1ZSwgZmFsc2UpIDogJ0ZpcnN0IHNhdmUgdGhlIG1vZHVsZSBjb3JlIGluIG9yZGVyIHRvIGFkZCBldmVudHMnKTsKCi8vIFRlbXBsYXRlczogUmVzdG9yZQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZXNfcmVzdG9yZV91cmwnLCAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2lkJ10pKSA/ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ3RlbXBsYXRlc19yZXN0b3JlJywgJHJldHVybmlkLCAnJywgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJHBhcmFtc1snbW9kdWxlX2lkJ10pLCAnJywgdHJ1ZSwgZmFsc2UpIDogJ0ZpcnN0IHNhdmUgdGhlIG1vZHVsZSBjb3JlIGluIG9yZGVyIHRvIG1hbmFnZSB0ZW1wbGF0ZXMnKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdC50cGwnKTsKCg==]]></data>
	</file>
	<file>
	  <filename>/action.manage_action.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ21vZHVsZV9hY3Rpb25faWQnXSkgJiYgJHBhcmFtc1snbW9kdWxlX2FjdGlvbl9pZCddICE9ICcnKQp7CgkkYWN0aW9uID0gTUNGTW9kdWxlQWN0aW9uOjpyZXRyaWV2ZUJ5UGsoJHBhcmFtc1snbW9kdWxlX2FjdGlvbl9pZCddKTsKfQoKaWYgKCghaXNzZXQoJGFjdGlvbikpIHx8IGlzX251bGwoJGFjdGlvbikpCnsKCSRhY3Rpb24gPSBuZXcgTUNGTW9kdWxlQWN0aW9uKCk7CgkkYWN0aW9uLT5tb2R1bGVfaWQgPSAkcGFyYW1zWydtb2R1bGVfaWQnXTsKfQoKJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+R2V0TmFtZSgpLCAkaWQsICdtYW5hZ2VfYWN0aW9uJywgJHJldHVybmlkKTsKJGZvcm0tPnNldEJ1dHRvbnMoYXJyYXkoJ3N1Ym1pdCcsJ2FwcGx5JywnY2FuY2VsJykpOwoKaWYgKCRmb3JtLT5pc0NhbmNlbGxlZCgpKQp7CglyZXR1cm4gJHRoaXMtPlJlZGlyZWN0KCRpZCwnZWRpdCcsJHJldHVybmlkLGFycmF5KCdtb2R1bGVfaWQnID0+ICRhY3Rpb24tPm1vZHVsZV9pZCwnYWN0aXZlX3RhYicgPT4gJ2FjdGlvbnMnKSk7Cn0KCiRmb3JtLT5zZXRXaWRnZXQoJ21vZHVsZV9hY3Rpb25faWQnLCAnaGlkZGVuJywgYXJyYXkoJ29iamVjdCcgPT4gJiRhY3Rpb24sICdmaWVsZF9uYW1lJyA9PiAnaWQnLCAnZ2V0X21ldGhvZCcgPT4gJ2dldElkJykpOwokZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVfaWQnLCAnaGlkZGVuJywgYXJyYXkoJ29iamVjdCcgPT4gJiRhY3Rpb24pKTsKCiRmb3JtLT5zZXRXaWRnZXQoJ25hbWUnLCAndGV4dCcsIGFycmF5KCdvYmplY3QnID0+ICYkYWN0aW9uLCAndmFsaWRhdG9ycycgPT4gYXJyYXkoJ25vdF9lbXB0eScgPT4gdHJ1ZSkpKTsKJGZvcm0tPnNldFdpZGdldCgnY29kZScsICdjb2RlYXJlYScsIGFycmF5KCdvYmplY3QnID0+ICYkYWN0aW9uKSk7CgokZm9ybS0+c2V0V2lkZ2V0KCdpc19wdWJsaWMnLCAnY2hlY2tib3gnLCBhcnJheSgnb2JqZWN0JyA9PiAmJGFjdGlvbikpOwokZm9ybS0+c2V0V2lkZ2V0KCdoYXZlX3Blcm1pc3Npb24nLCAnY2hlY2tib3gnLCBhcnJheSgnb2JqZWN0JyA9PiAmJGFjdGlvbikpOwokZm9ybS0+c2V0V2lkZ2V0KCdidXR0b24nLCAnc2VsZWN0JywgYXJyYXkoJ29iamVjdCcgPT4gJiRhY3Rpb24sICd2YWx1ZXMnID0+IChhcnJheSgnJyA9PiAnbm9uZScpICsgTUNGTW9kdWxlQWN0aW9uOjokYnV0dG9uX3BsYWNlcykKKSk7CiRmb3JtLT5zZXRXaWRnZXQoJ2J1dHRvbl9uYW1lJywgJ3RleHQnLCBhcnJheSgnb2JqZWN0JyA9PiAmJGFjdGlvbikpOwoKaWYoJGZvcm0tPmlzUG9zdGVkKCkpCnsKCSRmb3JtLT5wcm9jZXNzKCk7CglpZiAoISRmb3JtLT5oYXNFcnJvcnMoKSkKCXsKCQkkYWN0aW9uLT5zYXZlKCk7CgkJCgkJaWYgKCRmb3JtLT5pc1N1Ym1pdHRlZCgpKQoJCXsKCQkJcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2VkaXQnLCRyZXR1cm5pZCxhcnJheSgnbW9kdWxlX2lkJyA9PiAkYWN0aW9uLT5tb2R1bGVfaWQsJ2FjdGl2ZV90YWInID0+ICdhY3Rpb25zJykpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJHRoaXMtPlJlZGlyZWN0KCRpZCwnbWFuYWdlX2FjdGlvbicsJHJldHVybmlkLCBhcnJheSgnbW9kdWxlX2FjdGlvbl9pZCcgPT4gJGFjdGlvbi0+Z2V0SWQoKSwnYWN0aXZlX3RhYicgPT4gJ2FjdGlvbnMnKSk7CgkJfQoJfQoJCn0KCmVjaG8gJGZvcm0tPnJlbmRlcigpOw==]]></data>
	</file>
	<file>
	  <filename>/action.manage_event.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoKTsKfQoKaWYoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2lkJ10pKQl7CgkkbW9kdWxlID0gTUNGTW9kdWxlOjpyZXRyaWV2ZUJ5UGsoJHBhcmFtc1snbW9kdWxlX2lkJ10pOwoJCglpZihpc3NldCgkcGFyYW1zWydkZWxldGUnXSkpCgl7CgkJJG1vZHVsZS0+Z2V0RXh0cmFGZWF0dXJlcygpLT5yZW1vdmVFdmVudCgkcGFyYW1zWydtb2R1bGVfbmFtZSddLCAkcGFyYW1zWydldmVudF9uYW1lJ10pOwoJCSRtb2R1bGUtPnNhdmUoKTsKCQlyZXR1cm4gJHRoaXMtPlJlZGlyZWN0KCRpZCwnZWRpdCcsJHJldHVybmlkLGFycmF5KCdtb2R1bGVfaWQnID0+ICRwYXJhbXNbJ21vZHVsZV9pZCddLCdhY3RpdmVfdGFiJyA9PiAnZXh0cmFfZmVhdHVyZXMnKSk7Cgl9CgoJaWYoISRtb2R1bGUpewoJCWVjaG8gJzxoMT5BbiBlcnJvciBvY2N1cnJlZDogTW9kdWxlIGlkIGRvIG5vdCBleGlzdDwvaDE+JzsKCQlyZXR1cm47Cgl9CgkKCSRwYXJhbXNbJ2NvZGUnXSA9ICRtb2R1bGUtPmdldEV4dHJhRmVhdHVyZXMoKS0+Z2V0RXZlbnQoJHBhcmFtc1snbW9kdWxlX25hbWUnXSwgJHBhcmFtc1snZXZlbnRfbmFtZSddKTsKCQoJJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+R2V0TmFtZSgpLCAkaWQsICdtYW5hZ2VfZXZlbnQnLCAkcmV0dXJuaWQpOwoJJGZvcm0tPnNldEJ1dHRvbnMoYXJyYXkoJ3N1Ym1pdCcsJ2FwcGx5JywnY2FuY2VsJykpOwoKCWlmICgkZm9ybS0+aXNDYW5jZWxsZWQoKSkKCXsKCQlyZXR1cm4gJHRoaXMtPlJlZGlyZWN0KCRpZCwnZWRpdCcsJHJldHVybmlkLGFycmF5KCdtb2R1bGVfaWQnID0+ICRwYXJhbXNbJ21vZHVsZV9pZCddLCdhY3RpdmVfdGFiJyA9PiAnZXh0cmFfZmVhdHVyZXMnKSk7Cgl9CgoJJGZvcm0tPnNldFdpZGdldCgnbW9kdWxlX2lkJywgJ2hpZGRlbicsIGFycmF5KCd2YWx1ZScgPT4gJHBhcmFtc1snbW9kdWxlX2lkJ10pKTsKCQoJJGZvcm0tPnNldFdpZGdldCgnbW9kdWxlX25hbWUnLCAndGV4dCcsIGFycmF5KCd2YWx1ZScgPT4gJHBhcmFtc1snbW9kdWxlX25hbWUnXSkpOwoJJGZvcm0tPnNldFdpZGdldCgnZXZlbnRfbmFtZScsICd0ZXh0JywgYXJyYXkoJ3ZhbHVlJyA9PiAkcGFyYW1zWydldmVudF9uYW1lJ10pKTsKCSRmb3JtLT5zZXRXaWRnZXQoJ2NvZGUnLCAnY29kZWFyZWEnLCBhcnJheSgndmFsdWUnID0+ICRwYXJhbXNbJ2NvZGUnXSkpOwoJCglpZigkZm9ybS0+aXNQb3N0ZWQoKSkKCXsKCQkkZm9ybS0+cHJvY2VzcygpOwoJCWlmICghJGZvcm0tPmhhc0Vycm9ycygpKQoJCXsKCQkJJG1vZHVsZS0+Z2V0RXh0cmFGZWF0dXJlcygpLT5zZXRFdmVudCgkcGFyYW1zWydtb2R1bGVfbmFtZSddLCAkcGFyYW1zWydldmVudF9uYW1lJ10sICRmb3JtLT5nZXRXaWRnZXQoJ2NvZGUnKS0+Z2V0VmFsdWUoKSk7CgkJCSRtb2R1bGUtPnNhdmUoKTsKCgkJCWlmICgkZm9ybS0+aXNTdWJtaXR0ZWQoKSkKCQkJewoJCQkJcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2VkaXQnLCRyZXR1cm5pZCxhcnJheSgnbW9kdWxlX2lkJyA9PiAkcGFyYW1zWydtb2R1bGVfaWQnXSwnYWN0aXZlX3RhYicgPT4gJ2V4dHJhX2ZlYXR1cmVzJykpOwoJCQl9CgkJfQoKCX0KCQoJZWNobyAkZm9ybS0+cmVuZGVyKCk7CgkKCQkKfQllbHNlIHsKCWVjaG8gJzxoMT5BbiBlcnJvciBvY2N1cnJlZDogbm8gbW9kdWxlIGlkIGRlZmluZWQuLi48L2gxPic7CglyZXR1cm47Cn0=]]></data>
	</file>
	<file>
	  <filename>/action.manage_field.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgoKaWYgKGlzc2V0KCRwYXJhbXNbJ21vZHVsZV9pZCddKSAmJiAkcGFyYW1zWydtb2R1bGVfaWQnXSAhPSAnJykgewogICAgJG1vZHVsZSA9IE1DRk1vZHVsZTo6cmV0cmlldmVCeVBrKCRwYXJhbXNbJ21vZHVsZV9pZCddKTsKfSBlbHNlIHsKICAgICRtb2R1bGUgPSBuZXcgTUNGTW9kdWxlKCk7CiAgICAkbW9kdWxlLT5zZXRQYXJlbnRNb2R1bGUoMCk7CiAgICAkbW9kdWxlLT5zZXRNb2R1bGVGcmllbmRseW5hbWUoJ01vZHVsZScpOwogICAgJG1vZHVsZS0+c2F2ZSgpOwp9CgppZiAoCiAgICAkbW9kdWxlCiAgICAmJiBpc3NldCgkcGFyYW1zWyd0YWJfa2V5J10pCiAgICAmJiAkcGFyYW1zWyd0YWJfa2V5J10gIT0gJycKICAgICYmIGlzc2V0KCRwYXJhbXNbJ2ZpZWxkc2V0X2tleSddKQogICAgJiYgJHBhcmFtc1snZmllbGRzZXRfa2V5J10gIT0gJycKKSB7CiAgICAkc3RydWN0dXJlID0gJG1vZHVsZS0+Z2V0U3RydWN0dXJlKCk7CgogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2xhYmVsJ10pICYmICRwYXJhbXNbJ2xhYmVsJ10gIT0gJycpIHsKICAgICAgICAkc3RydWN0dXJlLT5hZGRGaWVsZCgkcGFyYW1zWyd0YWJfa2V5J10sICRwYXJhbXNbJ2ZpZWxkc2V0X2tleSddLCAkcGFyYW1zKTsKICAgICAgICAkbW9kdWxlLT5zZXRTdHJ1Y3R1cmUoJHN0cnVjdHVyZSk7CiAgICAgICAgJG1vZHVsZS0+c2F2ZSgpOwogICAgfQoKICAgIGlmIChpc3NldCgkcGFyYW1zWydmaWVsZCddKSAmJiAkcGFyYW1zWydmaWVsZCddICE9ICcnKSB7CiAgICAgICAgJHN0cnVjdHVyZS0+cmVtb3ZlRmllbGQoJHBhcmFtc1snZmllbGQnXSk7CiAgICAgICAgJG1vZHVsZS0+c2V0U3RydWN0dXJlKCRzdHJ1Y3R1cmUpOwogICAgICAgICRtb2R1bGUtPnNhdmUoKTsKICAgIH0KCiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSwgJ2FjdGl2ZV9maWVsZHNfdGFiJyA9PiAkcGFyYW1zWyd0YWJfa2V5J10pKTsKCn0gZWxzZSB7CiAgICBlY2hvICdBbiBlcnJvciBvY2N1cnJlZC4gRGlkIHlvdSBzYXZlIHlvdXIgbW9kdWxlIGZpcnN0ID8gUGxlYXNlIHRyeSBhZ2Fpbi4nOwp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/action.manage_fieldset.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2lkJ10pICYmICRwYXJhbXNbJ21vZHVsZV9pZCddICE9ICcnKSB7CiAgICAkbW9kdWxlID0gTUNGTW9kdWxlOjpyZXRyaWV2ZUJ5UGsoJHBhcmFtc1snbW9kdWxlX2lkJ10pOwp9IGVsc2UgewogICAgJG1vZHVsZSA9IG5ldyBNQ0ZNb2R1bGUoKTsKICAgICRtb2R1bGUtPnNldFBhcmVudE1vZHVsZSgwKTsKICAgICRtb2R1bGUtPnNldE1vZHVsZUZyaWVuZGx5bmFtZSgnTW9kdWxlJyk7CiAgICAkbW9kdWxlLT5zYXZlKCk7Cn0KCmlmICgkbW9kdWxlKSB7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sndGFiX2tleSddKSkgewogICAgICAgICRzdHJ1Y3R1cmUgPSAkbW9kdWxlLT5nZXRTdHJ1Y3R1cmUoKTsKCiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ25hbWUnXSkgJiYgJHBhcmFtc1snbmFtZSddICE9ICcnKSB7CiAgICAgICAgICAgICRzdHJ1Y3R1cmUtPnNldEZpZWxkc2V0KCRwYXJhbXNbJ3RhYl9rZXknXSwgJHBhcmFtc1snbmFtZSddKTsKICAgICAgICAgICAgJG1vZHVsZS0+c2V0U3RydWN0dXJlKCRzdHJ1Y3R1cmUpOwogICAgICAgICAgICAkbW9kdWxlLT5zYXZlKCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1sncmVtb3ZlX2ZpZWxkc2V0J10pICYmICRwYXJhbXNbJ3JlbW92ZV9maWVsZHNldCddICE9ICcnKSB7CiAgICAgICAgICAgICRzdHJ1Y3R1cmUtPnJlbW92ZUZpZWxkc2V0KCRwYXJhbXNbJ3RhYl9rZXknXSwgJHBhcmFtc1sncmVtb3ZlX2ZpZWxkc2V0J10pOwogICAgICAgICAgICAkbW9kdWxlLT5zZXRTdHJ1Y3R1cmUoJHN0cnVjdHVyZSk7CiAgICAgICAgICAgICRtb2R1bGUtPnNhdmUoKTsKICAgICAgICB9CgoKICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSwgJ2FjdGl2ZV9maWVsZHNfdGFiJyA9PiAkcGFyYW1zWyd0YWJfa2V5J10pKTsKICAgIH0KfSBlbHNlIHsKICAgIGVjaG8gJ0FuIGVycm9yIG9jY3VycmVkLiBEaWQgeW91IHNhdmUgeW91ciBtb2R1bGUgZmlyc3QgPyBQbGVhc2UgdHJ5IGFnYWluLic7Cn0K]]></data>
	</file>
	<file>
	  <filename>/action.manage_selector.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgppZihpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkpCnsKICAKfQ==]]></data>
	</file>
	<file>
	  <filename>/action.manage_tabs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCk7Cn0KCmlmKGlzc2V0KCRwYXJhbXNbJ21vZHVsZV9pZCddKSAmJiAkcGFyYW1zWydtb2R1bGVfaWQnXSAhPSAnJykKewoJJG1vZHVsZSA9IE1DRk1vZHVsZTo6cmV0cmlldmVCeVBrKCRwYXJhbXNbJ21vZHVsZV9pZCddKTsKCWlmICgkbW9kdWxlKQoJewoJCSRzdHJ1Y3R1cmUgPSAkbW9kdWxlLT5nZXRTdHJ1Y3R1cmUoKTsKCQkKCQlpZigkcGFyYW1zWyduYW1lJ10gJiYgJHBhcmFtc1snbmFtZSddICE9ICcnKQoJCXsKCQkJJHN0cnVjdHVyZS0+c2V0VGFiKCRwYXJhbXNbJ25hbWUnXSk7CgkJCSRtb2R1bGUtPnNldFN0cnVjdHVyZSgkc3RydWN0dXJlKTsJCQkKCQkJJG1vZHVsZS0+c2F2ZSgpOwkJCQoJCX0KCQkKCQlpZigkcGFyYW1zWydyZW1vdmVfdGFiJ10gJiYgJHBhcmFtc1sncmVtb3ZlX3RhYiddICE9ICcnKQoJCXsKCQkJJHN0cnVjdHVyZS0+cmVtb3ZlVGFiKCRwYXJhbXNbJ3JlbW92ZV90YWInXSk7CgkJCSRtb2R1bGUtPnNldFN0cnVjdHVyZSgkc3RydWN0dXJlKTsJCQkKCQkJJG1vZHVsZS0+c2F2ZSgpOwkJCQoJCX0KCQkKCQkKCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSkpOwoJfQp9CmVjaG8gJ0FuIGVycm9yIG9jY3VycmVkLiBEaWQgeW91IHNhdmUgeW91ciBtb2R1bGUgZmlyc3QgPyBQbGVhc2UgdHJ5IGFnYWluLic7]]></data>
	</file>
	<file>
	  <filename>/action.module_design.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwovKiogQHZhciAkdGhpcyBNQ0ZhY3RvcnkgKi8KCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgppZihpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkpCnsKICAgICRtb2R1bGUgPSBNQ0ZNb2R1bGU6OnJldHJpZXZlQnlQaygkcGFyYW1zWydtb2R1bGVfaWQnXSk7CiAgICBpZigkbW9kdWxlKQogICAgewogICAgICAgICRzbWFydHktPmFzc2lnbignYWRkJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnbW9kdWxlX3RlbXBsYXRlc19lZGl0JywgJHJldHVybmlkLCBudWxsLCBhcnJheSgnbW9kdWxlX2lkJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSwgbnVsbCwgdHJ1ZSkpOwoKICAgICAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluLm1vZHVsZV9kZXNpZ24udHBsJyk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignTm90IGFibGUgdG8gZmluZCB0aGUgbW9kdWxlIHdpdGggSUQgJyAuICRwYXJhbXNbJ21vZHVsZV9pZCddKTsKICAgIH0KfQplbHNlCnsKICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01vZHVsZSBJRCBub3Qgc3BlY2lmaWVkJyk7Cn0K]]></data>
	</file>
	<file>
	  <filename>/action.module_export.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ21vZHVsZV9pZCddKSkKewoJJG1vZHVsZSA9IE1DRk1vZHVsZTo6cmV0cmlldmVCeVBrKCRwYXJhbXNbJ21vZHVsZV9pZCddKTsKCQoJJHhtbHN0ciA9ICI8P3htbCB2ZXJzaW9uPScxLjAnID8+XG48TW9kdWxlPjwvTW9kdWxlPiI7CgkkeG1sID0gbmV3IFNpbXBsZVhNTEVsZW1lbnQoJHhtbHN0cik7CgkKCS8vIFRFTVBMQVRFUwoJLy8gRmlyc3QsIHdlIGNoZWNrIGlmIHRoZSBtb2R1bGUgaXMgaW5zdGFsbGVkCglpZiAoTUNGVG9vbHM6OklzTW9kdWxlQWN0aXZlKCRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSkpCgl7CgkJJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgkbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkpOwoJCSR0ZW1wbGF0ZXNfbGlzdCA9ICRtb2QtPkxpc3RUZW1wbGF0ZXMoKTsKCQkkdGVtcGxhdGVzICA9IGFycmF5KCk7CgkJZm9yZWFjaCgkdGVtcGxhdGVzX2xpc3QgYXMgJHRlbXBsYXRlKQoJCXsKCQkJJHRlbXBsYXRlX2RhdGEgPSAkbW9kLT5nZXRUZW1wbGF0ZSgkdGVtcGxhdGUpOwoJCQkkdGVtcGxhdGVzW10gPSBhcnJheSgKCQkJCSduYW1lJyA9PiAkdGVtcGxhdGUsCgkJCQknZGF0YScgPT4gJHRlbXBsYXRlX2RhdGEsCgkJCQknaXNfZGVmYXVsdCcgPT4gICRtb2QtPmlzRGVmYXVsdFRlbXBsYXRlKCR0ZW1wbGF0ZSkKCQkJKTsKCQl9CgkJJG1vZHVsZS0+c2V0VGVtcGxhdGVzRGF0YShiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkdGVtcGxhdGVzKSkpOwoJCSRtb2R1bGUtPnNhdmUoKTsKCX0KCQoJLy8gTW9kdWxlCgkKCSR4bWwtPmFkZENoaWxkKCdtb2R1bGVfbmFtZScsICRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSk7CgkkeG1sLT5hZGRDaGlsZCgnbW9kdWxlX2ZyaWVuZGx5X25hbWUnLCAkbW9kdWxlLT5nZXRNb2R1bGVGcmllbmRseW5hbWUoKSk7CiAgJHhtbC0+YWRkQ2hpbGQoJ21vZHVsZV9jb2RlJywgYmFzZTY0X2VuY29kZShzZXJpYWxpemUoJG1vZHVsZSkpKTsKCiAgICAvLyBGSUVMRFMKCiAgICAvLyBUT0RPOiBFWFBPUlQgRklFTERTCgogICAgLy8gQURNSU5fVEVNUExBVEVTCgogICAgLy8gVE9ETzogRVhQT1JUIEFETUlOIFRFTVBMQVRFUwoKCS8vIEFDVElPTlMKCSRhY3Rpb25zID0gTUNGTW9kdWxlQWN0aW9uOjpkb1NlbGVjdChhcnJheSgnd2hlcmUnID0+IGFycmF5KCdtb2R1bGVfaWQnID0+ICRwYXJhbXNbJ21vZHVsZV9pZCddKSkpOwkKCSRkYXRhcyA9IGFycmF5KCk7Cglmb3JlYWNoKCRhY3Rpb25zIGFzICRhY3Rpb24pCgl7CgkJJGRhdGFzW10gPSBhcnJheSgKCQkJJ25hbWUnID0+ICRhY3Rpb24tPm5hbWUsCgkJCSdjb2RlJyA9PiAkYWN0aW9uLT5jb2RlLAoJCQknaXNfcHVibGljJyA9PiAkYWN0aW9uLT5pc19wdWJsaWMsCgkJCSdoYXZlX3Blcm1pc3Npb24nID0+ICRhY3Rpb24tPmhhdmVfcGVybWlzc2lvbiwKCQkJKTsKCX0KCSR4bWwtPmFkZENoaWxkKCdtb2R1bGVfYWN0aW9ucycsIGJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKCRkYXRhcykpKTsKCgkkeG1sc3RyaW5nID0gICR4bWwtPmFzWE1MKCk7CQoJCgloZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKCWhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L3htbCIpOwoJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIHN0cmxlbigkeG1sc3RyaW5nKSk7CgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPScgLiRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICctJyAuICRtb2R1bGUtPmdldE1vZHVsZVZlcnNpb24oKSAuICcueG1sJyk7CgllY2hvICR4bWxzdHJpbmc7CglleGl0Owp9]]></data>
	</file>
	<file>
	  <filename>/action.module_import.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoKTsKfQoKaWYgKGlzX3VwbG9hZGVkX2ZpbGUoJF9GSUxFU1skaWQuJ3htbGZpbGUnXVsndG1wX25hbWUnXSkpCnsKCSR4bWxfY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRfRklMRVNbJGlkLid4bWxmaWxlJ11bJ3RtcF9uYW1lJ10pOwoJCgkkeG1sID0gc2ltcGxleG1sX2xvYWRfc3RyaW5nKCR4bWxfY29udGVudCk7CgkKCSRtb2R1bGVfbmFtZSA9ICAoc3RyaW5nKSR4bWwtPm1vZHVsZV9uYW1lOwoJJG1vZHVsZV9mcmllbmRseV9uYW1lID0gJG1vZHVsZV9uYW1lOwoJCglmb3JlYWNoKCR4bWwgYXMgJGZpZWxkKQoJewoJICBpZignbW9kdWxlX2ZyaWVuZGx5X25hbWUnID09ICRmaWVsZC0+Z2V0TmFtZSgpKQoJICB7CgkgICAgJG1vZHVsZV9mcmllbmRseV9uYW1lID0gKHN0cmluZykkeG1sLT5tb2R1bGVfZnJpZW5kbHlfbmFtZTsKCSAgfQoJfQoJCglpZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX25hbWUnXSkgJiYgJHBhcmFtc1snbW9kdWxlX25hbWUnXSAhPSAnJykKCXsKCQkkbW9kdWxlX2ZyaWVuZGx5X25hbWUgPSAkcGFyYW1zWydtb2R1bGVfbmFtZSddOwoJCSRtb2R1bGVfbmFtZSA9IG51bGw7Cgl9CgkKCSRtb2R1bGUgPSB1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCR4bWwtPm1vZHVsZV9jb2RlKSk7CgoJJG1vZHVsZS0+c2V0SWQobnVsbCk7CgkkbW9kdWxlLT5zZXRNb2R1bGVOYW1lKCRtb2R1bGVfbmFtZSk7CgkkbW9kdWxlLT5zZXRNb2R1bGVGcmllbmRseU5hbWUoJG1vZHVsZV9mcmllbmRseV9uYW1lKTsKCSRtb2R1bGUtPnNhdmUoKTsKCQoJaWYoaXNzZXQoJHhtbC0+bW9kdWxlX2FjdGlvbnMpKQoJewoJCSRhY3Rpb25zID0gdW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkeG1sLT5tb2R1bGVfYWN0aW9ucykpOwoJCWlmIChpc19hcnJheSgkYWN0aW9ucykpCgkJewoJCQlmb3JlYWNoKCRhY3Rpb25zIGFzICRhY3Rpb24pCgkJCXsKCQkJCSRuZXdfYWN0aW9uID0gIG5ldyBNQ0ZNb2R1bGVBY3Rpb24oKTsKCQkJCSRuZXdfYWN0aW9uLT5tb2R1bGVfaWQgPSAkbW9kdWxlLT5nZXRJZCgpOwoJCQkJJG5ld19hY3Rpb24tPm5hbWUgPSAkYWN0aW9uWyduYW1lJ107CgkJCQkkbmV3X2FjdGlvbi0+Y29kZSA9ICRhY3Rpb25bJ2NvZGUnXTsKCQkJCSRuZXdfYWN0aW9uLT5pc19wdWJsaWMgPSAkYWN0aW9uWydpc19wdWJsaWMnXTsKCQkJCSRuZXdfYWN0aW9uLT5oYXZlX3Blcm1pc3Npb24gPSAkYWN0aW9uWydoYXZlX3Blcm1pc3Npb24nXTsKCQkJCSRuZXdfYWN0aW9uLT5zYXZlKCk7CgkJCX0KCQl9Cgl9CQp9CgoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCk7]]></data>
	</file>
	<file>
	  <filename>/action.module_templates_edit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwovKiogQHZhciAkdGhpcyBNQ0ZhY3RvcnkgKi8KCmlmIChpc3NldCgkcGFyYW1zWydhZG1pbl90ZW1wbGF0ZV9pZCddKSkgewogICAgJGFkbWluX3RlbXBsYXRlID0gTUNGTW9kdWxlQWRtaW5UZW1wbGF0ZTo6cmV0cmlldmVCeVBrKCRwYXJhbXNbJ2FkbWluX3RlbXBsYXRlX2lkJ10pOwogICAgJG1vZHVsZSA9ICRhZG1pbl90ZW1wbGF0ZS0+Z2V0TW9kdWxlKCk7Cn0gZWxzZWlmIChpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkpIHsKICAgICRtb2R1bGUgPSBNQ0ZNb2R1bGU6OnJldHJpZXZlQnlQaygkcGFyYW1zWydtb2R1bGVfaWQnXSk7CiAgICAkYWRtaW5fdGVtcGxhdGUgPSBuZXcgTUNGTW9kdWxlQWRtaW5UZW1wbGF0ZSgpOwogICAgJGFkbWluX3RlbXBsYXRlLT5zZXRNb2R1bGUoJG1vZHVsZSk7Cn0gZWxzZSB7CiAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdNb2R1bGUgSUQgb3IgRGVzaWduIElEIG5vdCBzcGVjaWZpZWQnKTsKfQoKJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+Z2V0TmFtZSgpLCAkaWQsICdtb2R1bGVfdGVtcGxhdGVzX2VkaXQnLCAkcmV0dXJuaWQpOwokZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVfaWQnLCAnaGlkZGVuJywgYXJyYXkoJ3ZhbHVlJyA9PiAkbW9kdWxlLT5nZXRJZCgpLCAnb2JqZWN0JyA9PiAmJGFkbWluX3RlbXBsYXRlKSk7CmlmICgkYWRtaW5fdGVtcGxhdGUtPmdldElkKCkpIHsKICAgICRmb3JtLT5zZXRXaWRnZXQoJ2FkbWluX3RlbXBsYXRlX2lkJywgJ2hpZGRlbicsIGFycmF5KCd2YWx1ZScgPT4gJGFkbWluX3RlbXBsYXRlLT5nZXRJZCgpKSk7Cn0KJGZvcm0tPnNldFdpZGdldCgnbmFtZScsICd0ZXh0JywgYXJyYXkoJ29iamVjdCcgPT4gJiRhZG1pbl90ZW1wbGF0ZSkpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm0nLCAkZm9ybSk7CgovLyBURU1QTEFURQoKJHRlbXBsYXRlX2Zvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+Z2V0TmFtZSgpLCAkaWQsICdtb2R1bGVfdGVtcGxhdGVzX2VkaXQnLCAkcmV0dXJuaWQpOwokZmllbGRzID0gJG1vZHVsZS0+Z2V0RmllbGRzKCk7CmZvcmVhY2ggKCRmaWVsZHMgYXMgJGZpZWxkKSB7CiAgICAvKiogQHZhciBNQ0ZNb2R1bGVGaWVsZCAkZmllbGQgKi8KICAgICR0ZW1wbGF0ZV9mb3JtLT5zZXRXaWRnZXQoJGZpZWxkLT5nZXRGaWVsZE5hbWUoKSwgJGZpZWxkLT5nZXRGb3JtVHlwZSgpLCBhcnJheSgKICAgICAgICAnbGFiZWwnID0+ICRmaWVsZC0+Z2V0TGFiZWwoKQogICAgKSk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdmaWVsZHMnLCAkZmllbGRzKTsKJHNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZV9mb3JtJywgJHRlbXBsYXRlX2Zvcm0pOwoKZWNobyAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJyAuICR0aGlzLT5sb2FkUmVzb3VyY2UoJ3B1YmxpYy9jc3MvYWRtaW5fdGVtcGxhdGVfZWRpdC5jc3MnKSAuICciIC8+JzsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW4ubW9kdWxlX3RlbXBsYXRlc19lZGl0LnRwbCcpOwoKZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyAuICR0aGlzLT5sb2FkUmVzb3VyY2UoJ3B1YmxpYy9qcy9hZG1pbl90ZW1wbGF0ZV9lZGl0LmpzJykgLiAnIj48L3NjcmlwdD4nOwoK]]></data>
	</file>
	<file>
	  <filename>/action.module_wizard.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwovKiogQHZhciAkdGhpcyBNQ0ZhY3RvcnkgKi8KCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKICAgIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgppZihpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nKTsKfQoKJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+R2V0TmFtZSgpLCAkaWQsICdtb2R1bGVfd2l6YXJkJywgJHJldHVybmlkKTsKLy8kZm9ybS0+c2V0QnV0dG9ucyhhcnJheSgnc3VibWl0JykpOwokZm9ybS0+c2V0TGFiZWwoJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdDb250aW51ZScpKTsKCmlmKCFpc3NldCgkcGFyYW1zWydtb2R1bGVfaWQnXSkpCnsKICAgICRtb2R1bGUgPSBuZXcgTUNGTW9kdWxlKCk7CiAgICAkZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVfZnJpZW5kbHluYW1lJywgJ3RleHQnLCBhcnJheSgnbGFiZWwnID0+ICdNb2R1bGUgbmFtZScsICd0aXBzJyA9PiAnQ2hvb3NlIGEgbmFtZSBmb3IgeW91ciBtb2R1bGUnLCAncGxhY2Vob2xkZXInID0+ICdBY21lIERpcmVjdG9yeScsICdvYmplY3QnID0+ICYkbW9kdWxlKSk7CgoKICAgIGlmKCRmb3JtLT5pc1NlbnQoKSkKICAgIHsKICAgICAgICAkZm9ybS0+cHJvY2VzcygpOwoKICAgICAgICBpZigkZm9ybS0+bm9FcnJvcigpKQogICAgICAgIHsKICAgICAgICAgICAgJG1vZHVsZS0+c2F2ZSgpOwogICAgICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ21vZHVsZV9pZCcgPT4gJG1vZHVsZS0+Z2V0SWQoKSkpOwovLyAgICAgICAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdtb2R1bGVfd2l6YXJkJywgJHJldHVybmlkLCBhcnJheSgnbW9kdWxlX2lkJyA9PiAkbW9kdWxlLT5nZXRJZCgpKSk7CiAgICAgICAgfQogICAgfQoKICAgICR0ZW1wbGF0ZSA9ICR0aGlzLT5HZXRGaWxlUmVzb3VyY2UoJ2FkbWluLm1vZHVsZV93aXphcmRfc3RlcDEudHBsJyk7Cn0KZWxzZQp7CiAgICAkbW9kdWxlID0gTUNGTW9kdWxlUmVwb3NpdG9yeTo6cmV0cmlldmVCeVBrKCRwYXJhbXNbJ21vZHVsZV9pZCddKTsKICAgICRmb3JtLT5zZXRXaWRnZXQoJ21vZHVsZV9pZCcsICdoaWRkZW4nLCBhcnJheSgndmFsdWUnID0+ICRwYXJhbXNbJ21vZHVsZV9pZCddKSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ21vZHVsZV9mcmllbmRseW5hbWUnLCAkbW9kdWxlLT5nZXRNb2R1bGVGcmllbmRseW5hbWUoKSk7CgoKCiAgICAkZm9ybS0+c2V0V2lkZ2V0KCduZXh0JywgJ2hpZGRlbicsIGFycmF5KCd2YWx1ZScgPT4gJ2ZpbHRlcnMnKSk7CgogICAgJHRlbXBsYXRlID0gJHRoaXMtPkdldEZpbGVSZXNvdXJjZSgnYWRtaW4ubW9kdWxlX3dpemFyZF9zdGVwMi50cGwnKTsKfQoKJHNtYXJ0eS0+YXNzaWduKCdmb3JtJywgJGZvcm0pOwoKZWNobyAkc21hcnR5LT5mZXRjaCgkdGVtcGxhdGUsJ3xtY2ZhY3Rvcnlfd2l6YXJkXycgLiBtZDUoc2VyaWFsaXplKCRwYXJhbXMpKSwnJyk7]]></data>
	</file>
	<file>
	  <filename>/action.publish.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2lkJ10pICYmICFlbXB0eSgkcGFyYW1zWydtb2R1bGVfaWQnXSkpIAp7CgkkbW9kdWxlID0gTUNGTW9kdWxlOjpyZXRyaWV2ZUJ5UGsoJHBhcmFtc1snbW9kdWxlX2lkJ10pOwoJaWYoaXNfb2JqZWN0KCRtb2R1bGUpKQoJewkJCgkJJG1vZHVsZS0+Zm9yY2VVcGRhdGUoKTsKICAgICAgICAkZ2VuZXJhdG9yID0gbmV3IE1DRkdlbmVyYXRvcigkbW9kdWxlKTsKCiAgICAgICAgdHJ5ewogICAgICAgICAgICAkZ2VuZXJhdG9yLT5wdWJsaXNoKCk7CiAgICAgICAgICAgICR0aGlzLT5TZXRGbGFzaE1lc3NhZ2UoJ01vZHVsZSAnIC4gJG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpIC4gJyBwdWJsaXNoZWQhJyk7CiAgICAgICAgICAgIGNtc21zKCktPmNsZWFyX2NhY2hlZF9maWxlcygtMSk7IC8vIEZPUkNFIENMRUFSIENBQ0hFCiAgICAgICAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOwoKICAgICAgICB9IGNhdGNoKEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkdGhpcy0+U2V0Rmxhc2hNZXNzYWdlKCdFcnJvciB3aGlsZSBnZW5lcmF0aW9uIHRoZSBtb2R1bGU6ICcgLiAkZS0+Z2V0TWVzc2FnZSgpLCAnZXJyb3InKTsKICAgICAgICAgICAgZWNobyAnPGgzIHN0eWxlPSJjb2xvcjpyZWQiPkVycm9yIHdoaWxlIGdlbmVyYXRpb24gdGhlIG1vZHVsZTogJyAuICRlLT5nZXRNZXNzYWdlKCkgLiAnPC9oMz4nOwogICAgICAgIH0KCX0KfQoKZWNobyAnPHA+JyAuICR0aGlzLT5sYW5nKCdlcnJvcl9vY2N1cmVkX3B1Ymxpc2hpbmcnKSAuICc8L3A+Jzsg]]></data>
	</file>
	<file>
	  <filename>/action.templates_restore.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoKTsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ21vZHVsZV9pZCddKSAmJiAkcGFyYW1zWydtb2R1bGVfaWQnXSAhPSAnJykKewoJJG1vZHVsZSA9IE1DRk1vZHVsZTo6cmV0cmlldmVCeVBrKCRwYXJhbXNbJ21vZHVsZV9pZCddKTsKfQoKLy8gVEVNUExBVEVTCi8vIEZpcnN0LCB3ZSBjaGVjayBpZiB0aGUgbW9kdWxlIGlzIGluc3RhbGxlZAppZiAoTUNGVG9vbHM6OklzTW9kdWxlQWN0aXZlKCRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSkpCnsKCSRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKTsKCSR0ZW1wbGF0ZXMgPSB1bnNlcmlhbGl6ZShiYXNlNjRfZGVjb2RlKCRtb2R1bGUtPmdldFRlbXBsYXRlc0RhdGEoKSkpOwoJCglmb3JlYWNoKCR0ZW1wbGF0ZXMgYXMgJHRlbXBsYXRlKQoJewoJCSRtb2QtPnNldFRlbXBsYXRlKCR0ZW1wbGF0ZVsnbmFtZSddLCAkdGVtcGxhdGVbJ2RhdGEnXSk7CgkJaWYoJHRlbXBsYXRlWydpc19kZWZhdWx0J10gIT09IGZhbHNlKQoJCXsKCQkJCSRtb2QtPkFkZERlZmF1bHRUZW1wbGF0ZSgkdGVtcGxhdGVbJ2lzX2RlZmF1bHQnXSwgJHRlbXBsYXRlWyduYW1lJ10pOwoJCX0KCX0KfQoKcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2VkaXQnLCRyZXR1cm5pZCxhcnJheSgnbW9kdWxlX2lkJyA9PiAkcGFyYW1zWydtb2R1bGVfaWQnXSkpOw==]]></data>
	</file>
	<file>
	  <filename>/autoloader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAgIGlmKCFjbXNtcygpKSBleGl0OwoKICAgIGZ1bmN0aW9uIG1jZl9hdXRvbG9hZGVyKCRjbGFzc25hbWUpCiAgICB7CiAgICAgICAgY21zX2F1dG9sb2FkZXIoJGNsYXNzbmFtZSk7CgogICAgICAgIGlmKCFjbGFzc19leGlzdHMoJGNsYXNzbmFtZSkpCiAgICAgICAgewogICAgICAgICAgICBpZihmaWxlX2V4aXN0cyhkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnbGliJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xhc3MuJy4kY2xhc3NuYW1lLicucGhwJykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnbGliJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xhc3MuJy4kY2xhc3NuYW1lLicucGhwJyk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKCdtY2ZfYXV0b2xvYWRlcicpOw==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/application.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFiSURBVBgZpcEhbpRRGIXh99x7IU0asGBJWEIdCLaAqcFiCArFCkjA0KRJF0EF26kkFbVVdEj6/985zJ0wBjfp8ygJD6G3n358fP3m5NvtJscJYBObchEHx6QKJ6SKsnn6eLm7urr5/PP76cU4eXVy/ujouD074hDHd5s6By7GZknb3P7mUH+WNLZGKnx595JDvf96zTQSM92vRYA4lMEEO5RNraHWUDH3FV48f0K5mAYJk5pQQpqIgixaE1JDKtRDd2OsYfJaTKNcTA2IBIIesMAOPdDUGYJSqGYml5lGHHYkSGhAJBBIkAoWREAT3Z3JLqZhF3uS2EloQCQ8xLBxoAEWO7aZxros7EgISIIkwlZCY6s1OlAJTWFal5VppMzUgbAlQcIkiT0DXSI2U2ymYZs9AWJL4n+df3pncsI0bn5dX344W05dhctUFbapZcE2ToiLVHBMbGymS7aUhIdoPNBf7Jjw/gQ77u4AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_add.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH9SURBVDjLpZM9aFRREIW/ue9FF2IULDQuaYIGtTBRWGFJAgqSUsEmjZVgo4mFWBiwVVjBHwjGwsbCShExIAghoEUMARGNGFJYhIC7isXGRbORvJ0Zi/dWY5fFCwOnuHz3nDsz4u78z5HTlx6NDB4v3KjWvd0dMMPNUFPcHHPDVTF3XBU1Y/uWZHVxsXzl6e3hibgwUBhvy7WH3bmWHm5fres4MBHXEw/16s+Wra8lHgBiV+f6mX0tA86VlkkBbgCsNxQH3Bw1MBwzR83Qhqflxro63Z0dqGkKIOuCBEHc8SC4OGJCCIJIQESRyIksEDfS+9bIAE1SAFwEBCIHEzBzIocgEbGAiqMhdWxqWQTL5kAE3P8BiYCrYwIuQBAii1JAM0JTpAxJxQaQxUJsxvTbSV7NP6e2ukLSSFjT/cBJ4kaS/HEggLsjIvgG0Is3T3hfnuLYwFG6dvbwcuEZcx+nKY7mbwbPskSAZC4k00GEIMLk64ccPtCHBqVvzxAqCcVD/QAjwcz+Rsg+M4gQbahv37/QJts4dfAiAJdP3Gfvrl6AXFxeWn58/k4ybKqYGqqKmaFJgplh7lRrKyxUZpmvzDA29IDS1Fly0VaAX7KZbSyO5q91de+42t87SE/nET59fcfshxk+L9VuyWbXuTiaLwEXgA7gB3Bv7m5l7Dd8kw6XoJxL0wAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_cascade.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGeSURBVDjLjZLdKwRRGIf3X1wXuNAikiKfWXaVLO1SIjYlG9LYaGKxNSXWx1rnwoUo+Zhdu2vkRsp32ePCvH5nYoaGNaeemjkz5/ee85zX5W6VS4bjuc3uhSzzz4NohnlnT1nHzAlrnz5mbZEj1jJ5yHwRxsS/ROT6jiu4lEuF12+YE5pHd1O2AFHZKXVDSWYL8EcvxKQjaga27AG+ubTxUUllMlOJq9fB1Us+sAJieR5azPJ+Oc0DC2e8N3rCmyYOOFxocOGxAiTVCBhTtMJ08pYXY1i55nChwUXeDGgM7xsBovJ/dErnHC40uNDMAGynr35kj3VJKn98eQOcPzwLCib3gqcCf3l9e8QiDS6sgK8HuBCTWnxHvRtT8joqEfqC0BeEYxJ6g9AXhL4g9AXBBaF4gxUgqUZAKJYjnNMRcPFuBsCFESAqOwUurPvEdsbhQkNfkNMBFz+b4tPFnwt0gS7Qjfeq4MYvARBWbHyFiOEJrNkD4MLxEdxtsj0ALmS4MATVDm5TdTBBlf3rVNGjUHl3nMp8y1TqjYkrFMgf+hUje+AiV2IAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_delete.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH0SURBVBgZpcFPaM9xHMfx5/vz/Ywfv6ZwGC1mtRsXtRvFQSmlKK3JkRJymAul5EJcrFZrcnO0QpELDgrlKJcd5M9PtpHawew39v2+3y/7rlZuLI+HSeJ/2OGhO2d27+2/PtNWUwIiUAQejkKEArkTEnLHI1i3qpybmJg8f+/GwGju39U/0tFopq4GK9Gca/sIMJrbpVJ75gcrNV8qsSjLxZVjfazUiWstalkKaguVI0AhPCAQEcIj8Ep4JVzBgoveTZ14OLWMRM2SYRJKhkxYGCkZZgkzxwpRRCJXohaVU8seTi0BMgODQhAGEaIQJCvIBm7CU1ALD2pZIZaYgUQCZAYGZiAXYSADklFEQS3CqeUIZ5mZsUQiATIjspEjmHp4k+mHY7Q/vaWjq5sdq/cAB8lVWbLEDAMkYWaIRRIJmH50i9lX4+w8cpzVvduZf/OYNc+f8mRfx9kkD2oFYICZYYAByYxkRuvuMH17DtF49wy7fZS17+/T27MBmYZyRLDMAGORGX9amGrR2NQLB86xLF/eTBG2LU9+aI2fGi4Hwp3wwN2JCLwsiQhCYqCxnvbrRzQfnObX/BfawOz3Ai+YMkn8zYvB7surOpsXt2ysck6fmf1W8fFr4eVPXTJJ/IuXg1svzM1MnSzcerzQpGBs/+Pq6m9gRhRi/EsJnAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_double.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGnSURBVDjLnZOxilNBGIW/mXt3CZsYQQtjJYqPkE4L8Q20WARbmxWEFQvBXrByQdDKF3CL1QcQH8DOKmVIkWIFbdybTe7M/x+Lm+zeFELcAz/DwJnD4eOf8OD5p4d37w2f/qrUwR25k3PG5cgMl5AZ5k5/O81Ho+mHo7e7RyxVDu8M97c63TjosIk61cz2gfOAWVKc/T5hU50mxfa9lInXj29vHPDkzYT1ADkAi2x8/jq6fpy7N37+8eJfPHqX+zx7/1397VSNRtOXJRIAMcB4tnOr19thcHWjMt1qZu9KcwMghEBVi+o/eZSW81nARXiUOaXzgBYPuTCH7I65Y1nNyKlN3BxcwtwoLTUNItDmoRhQECWRECIhGKEQhUfK3Pg8G+V0PPm2d5Du5zpxZXDtrA0BCoEkCkEMBWUAC8Ji09TNG8NqXnz8IUnK7sruSmaqzTQ30yIlndZJszrpZJ4kSY9efVnfqjaP9hmBECNFEQkxEIuVP1O2A9Z4LB8Xy3OlrbbfbD1gOp4c7h2k3VwnzAx3Jy0WzY90Q6ZmK93xBsNh0JL8RfUXD1Ut4VHY1QEAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_edit.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJRSURBVBgZpcHda81xHMDx9+d3fudYzuYw2RaZ5yTWolEiuZpCSjGJFEktUUr8A6ZxQZGHmDtqdrGUXHgoeZqSp1F2bLFWjtkOB8PZzvmd7+djv5XaBRfL6yVmxv+QjQeu7l25uuZYJmtxM0AVU8Wpw9RQU8w51AxzDqfKhFjwq6Mjdbj1RN0Zv2ZFzaloUdwrL2Is4r+y7hRwxs8G5mUzPxmrwcA8hvnmjIZtcxmr3Y09hHwzJZQvOAwwNZyCYqgaThVXMFzBCD7fJfv8MpHiKvaV3ePV2f07fMwIiSeIGeYJJoao4HmCiIeIQzPXifY+paJqO4lZi/nWPZ/krabjvlNHyANMBAQiBiqgakQMCunbxHJviM9bQeZdBzHJUzKhguLJlQnf1BghAmZ4gImAgAjk++8jP56QmL2GXG8zsfFCz8skA1mQXKbaU3X8ISIgQsgDcun7FL7cJjFnLUMfLyLRr0SLS4hbhiup5Szd19rpFYKAESKICCERoS95neyHmyTmbmAodQ4vGpAfmEn6YTtTahv4ODiRkGdOCUUAAUSE/uQNfqTaKFu4jvynJiIxIzcwg/SjF1RsOk9R+QJMlZCvqvwhQFdbM4XvrynIVHpfn2ZSWYyhzHS+PUtSueUC0cQ0QmpGyE9197TUnwzq1DnUKbXSxOb6S7xtPkjngzbGVVbzvS/FjaGt9DU8xlRRJdTCMDEzRjuyZ1FwaFe9j+d4eecaPd1dPxNTSlfWHm1v5y/EzBitblXp4JLZ5f6yBbOwaK5tsD+9c33jq/f8w2+mRSjOllPhkAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_error.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIiSURBVBgZpcE7SJZhFMDx/3neV/u8ZlhoVxAkESoyJYoa3BojDCFc25psaS8CWxoEhxAagiCpHCpqaa3AyiIISwjTtHIou3wX/b73nFOPIEG0SL+fuDv/Q04Mjp052ttz6WvR69wBM9wMNcXNMTdcFXPHVVEzGqsrhamphXPjl/tH0p4jPcNVubrQkmM96gpFHQZG0mLFQ/FrnvUqVTzwW+rqXBxoZ71OD80Spe5GVM4UB9wcNTAcM0fN0MzRzFE3yuq0tTagpkQBdyIJQhAIQQgJJCKkIZAmKf7zBeV3Q1RJidqqlMgyJQpqShQAEUGCkAQhJIIECF5ieW6c+uZ9VD7dJ60ORKZGFNycVSJEAQgihCAkiVD88IDa5i4at3ZRmHsI+RkiMyUKZsoaEQERogBofoFv7+7RsLkJ/XGHLZ2n+P72Bm4ZZkYUskqFVSKICJGIEH15c5Pm9uOwPMnEtevUN5X4MfOI77OPySoZUXA1ogQQQEQQoPB5Ei0s0bCpiK3MgBuaf0pb71nmn1yhimWiYGasESAA4sris6s07dqPFV/hVqK7rwMrfySXm6ZxxyG6aiaI5MTg2FjLzm39poqpoars2fCUkwdztO6uQfMTuJd5fnuK7r5OJNkINcd4NHphpdpLB8Td+dvE8OH5vQPXtyfhPZ4tAc4fgaSmg8XXL5m+e/5Wyj9kK+Xc5Ghfyc1xM9wMN8PNcTPcHMxw99ZfSC4lgw+6sSMAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_form.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFlSURBVBgZpcGxTpNhGIbh+20+DUkTRhkcNLBIOmG6+Q+egg4cgWExhDi5sDm5SErCoB4BDB4KjnVTBpooCTKUOvx9n4d+ISQOQNL0usI2i4hX7w7fNi/7H88n7tqAhCVSiWVk4Uxk40xSYvlhezkcnr7/9mnzoPRf9PcfLHU7K0vMo3s5yX3goExadybnY+b1r3WHmeI0u68fM6/twQlVsYVtTGUwEMH342Pu8nxjg1RSFWwyk63BL2583XlK1TQNtxmPx2iaVCWVyObz9hMIgwPZ3EcSSlEVyyhFBFjMGML0ej0uLv5i858ATABSUhUpkRJzLZgxDH8Mucuz9XUkUZVp25KZ7Hz5zY3B1gpV0zTc5uzsD9N2SlWcQhJ7bx4BppLEfTKFJaoiCcmACMBcW11dYzQaAQFhgsCGCIMD2VTl9OfJ0YfDdlOZKEVmIolsWyQhGytxGllYQqI6YiZss4gOC7oC3Q3wOtNMt7AAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_form_add.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHiSURBVDjLpZPNaxNBGMb33/DWoxcPngr+B4pQggdL8WNbaxQbGtugkESE0IZEkiYhpC2GtJQatKW5pFYl2yrKCrZVrMYo2jbHfJElm/1IPJXHmdklbZGURBd+PPO++84zM+/ucAC4/4GzjC2PTKXzuvvZPlxPCcldOBd/4v7Cd9ybz8Exl8V4fAd3H3+GfeYjbLEtuOLvdTqPGXhT+YNopoxusUfeHTADuvK/YA28BTNwJffQbDa75obvtWHgfPILjUYDOkOHrutsLIpiWxqkhvcKpgFpmKqq6J/IttBITAvbPZqm4ZrnlWFAu11XFCh1glI3VTnRgL6/8vCFYUA/Va0mQ5Zlpgy5RrRGcoYeIht5wsCDVcPAkfgKSZJQNaFjqSr9de54KozxmauwhvrAPzoPi3PMMLDPfkKlUjnWAxofPcLzD0vwrAxiLTeNL0UB4fU7uBw+g96RU0FuNLaNUqlEKJtqcNRgKHAB6W8RpH9EWRzcuInwxi1q8JuzRTdRKBQJBRQJhRbFll50n8XLXOJYI1ez09QA9C4s3w6J7M8a9r/BoHcd1ycypMtrrFH97jTO2XoQEIbgE3g22ZfhD3fQyY0jhZOXgqcxJQyzlanSmPWg02tLiv0ElW7bVD/N/wGu4yJFlYuLaQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_form_delete.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHvSURBVBgZpcG/S9RxHMfx5+fuq10d/SJKQ+rUaLoWw60bIoIgaKhBpDksDBFbCooQiqAlURCp/gIjHIQWa4h+QDRYtFhDqOEdSqCSelbfe79f+UUEg35Jj0eQxP8Ip7sGLxaONt+eLSsrAe7IHXNDLlyOzHAJmWHubKuOl8bGipeH7rT0R81HmvuqMtlUTYaNyC6VrQ/oj8qxUuXZRTZqOVaKFZFMXDtTx0Z19E6SiCRHEiIhEBACb0ZH+Z3DTU2YG4kICTOjrXeCNfc760kUCgV+ZXFxEa8YicjccIm7HTkIAgVc4k/cHTcnEcmFmxMCyFkhCCKfzzM/P4fEOgEQAXA3EpG74W6IVYEVgrH3Y/xkdBh7PURl+hPp3bUc2nwMOEVUiWPMjM57M6zpbashUSgUSEwNDzBXfMXBs+1sasiz/G6E7PMnPD5e1RHJHHen59weQCTcnfXGH/bQ3HqBzMen8OwmW7bvoCGXY/SDuiJ3x12AEwCxqrHxAKVSCQh8L02QqW2Ak5dYE3XvJe2hPiqOTz64MRi3uBlujpnh7lgc4+64REtmJ+W3j8gOt/NteZoysPAljaUpBUn8zYvWuu7qrdmr+3ZVoig1xcLnChMzaYu/6nqQxL942br/ytJs6XzaQs7SKgoGToxUbv0ALswWDRrf9Y0AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_form_edit.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJcSURBVDjLpZPvS1NRGMfvv9Db6FUvIpDqLwj6AZER1EhBkvTFTALNlWJrkwKRoWKGjZltaUmuYmsIq7SEtrSt1qakzh/TtunSdq9j8253u3fL1vh27t2KNAqsAx+ecw7n+z0PzzkPBYD6HyjZZVNNpzXINz0OQP2IYPwI1YMFXOmfQ+O9WTT0eVFvmMQl/Qcobo+jVueG2uDkRZ1koLEEc9qRNWwXRddYTjIQb/4XqjtGIRmojX6k0+ltI2+15Q1UA4sQBAG8BA+e56W5w+H4jQmbDgsPy+C3ajDVdwzT3UUVlFiwZDKJshbvT1JkLQp+HQJtBWNXIuF9DqTCiHstcN04vkaJ1U5wHLgEgUsUIrfJQKCHwM43Y2P1KZjRDqRnBvEt5MTM/eoMJT4Vy8YRj8elKBFnSWTJHovoEhHPXkMu7UQ6WIt1z0X4BuRw6+XwaGV7qIbeacRiMUQLiPNYNCZl4LF1g51RIZdxQQhUIrNSjuS8GqH+06i73psvoqJnApFIZFMNxPXrwXYw48qCuAKZT2fBzTZhyXASjM+JkkZL3qBO5wHDMIS1QmTge2fE/MtGkvYbZJbl+LJyDgmSSUB/Al85WjpzpsGcN6jVvkc4TBPCoAnuoR7MDasx/aILn92lEJbLsT51Ff67p7C6OAmaFs/RkNWb8KMXTBduOqSfVdVmh7n9KJAMYcFQArt6J97eKcZw8yHUqPQk7SfkZhOIRsQkGWztrpbzRdkNlw4b7ltwaw7DXLUrNaLaf+CP3bh1o/Tgjkxr5d6sra04+6rzyNgz5b7df2vn7z39IYTVO0xbAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_form_magnify.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAH2SURBVBgZpcE/SJRxHMfx9+/uuT8qlgR6mvTHqyGwKMWpbmhvskFa2spFRJxaGlprKBQcKmhqcWloaQ2ixcFaDhUKLDDJSFHvT+fzfD/ffJC2Go5er+Du/I8wPrs4Vbk+9nC74V3ugIRLmAyXIxduhtxxM0ziWD6ur6xs3Hv1eGIhGrs2Np8rdmVKRdrRVW/YPLAQNWLPNLZrtKsZe4ZDkZtz/+Yg7Zqe+0IqchfujpNycCAEPiwv8y+jIyOYjFSEO2bG5Nw6fzyfOUuqUqnwN7VaDSVGKjIZcufp9BkIDh6QO0ecd9UNtvaa1FoFCrmI4x3i6lABmUhFLkcmQgAXhxyCMzw8zNuP69TVxeWhE0S5LFu7B+zst1j6XEMyUhnJkIzEDJMhGUpEtVrlR7NIudTJTiuwuWckIctgXzfbzYAkUlESx5gZM8++88fcZIlUrXlAPp8jaSXIoZU4xShL4hFJnJCK3IQkntzpA5yUJFKdhRwHsREbJHJSHqBRr+MSqUgSkgMiAM6RcvkcvzZj9ptGd0eeljlRJrC5HeM/1zifXSMVxmcXF0unTk7IDJkwMyRhcUwuH9Hf18PoxdPIYbfWwrZWqPR+Y/fT++Tr6tLt4O604/WDG3f7B/of9Q5d6VldetMI7k67Xk5duDVQvvRCSjp+A5XMMGcdZp9aAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_get.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHXSURBVBgZpcE/S5VhGMfx7+8+T2VI0SDVKvYSrKE/0FsIwgZpCFqiISSiIcoigkIosWyrOR16AU2NETSGZUQoiNYgBJ1znufcz3VdeUvOIX4+igj2QhemFq6fPT/+ZLMXwxGAO+GOuREeeDhhhkcQZpg7h/fn7tLS2u23Tyfmq/Ez43P7hobTsSF2Y7jbszlgvurlSL3NP+xWP0diSxUWPJo8wW5dfbxCUUU4xaA1AggPzMEJ3ANzx9rA2sDCGVgwevwQ5kZREUGhJBRBJBEK5CIlISUkQ52g44mqDQpvjaIyN4oEhASCToAL3INOQFKHSmAKLDmFm1NU4cE2CSJIQEggkCAscMHsp4d4G9w4eY/C3SiSu7FDEkgUCUgSqhIzH+7SH3TpNr+ZfjdF4e4Uqc2ZbRKSKCSBhHnL/fc3yblhbGSM0aNj1LnLlVeT5NxQpDCn6AACJCFAwPOPM/zcXKeuG+p2QN02HNh/kNWNFX6lBYrk7uwQkIAk0ZG4dfoOry++YXn1G02uaXLN8vdlZi+/ZCRfoqjWfqwsXnuWJ9wMN8fMcHcsZ9wdj6B/pKbfNmTLbKxvMD37hS2LbFFE8D/nHpyKpsnkOjMYZD6/+Cr+UUSwF38B/pkb32XiUiUAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_go.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIMSURBVBgZpcHNi05xGMfhz/07hzTDiKZmEmLYeM3iKTKUiFhY2EhZ2NjIBgsWYoUoSWr+B7NhY6GkJBRhYSMvJYRSFDPPi3N+9/01Z2Jvcl0mif9h+46PH92yrXXpe0f9EhCBIvBwFCIUyJ2QkDsewcDsuv3y5adTN67sHytbo61rs+b0p6E5zER/u+PXgLGyUyt1vk8yU91aiSmlXJw/uJKZOnzxPY1SChpVdgQohAcEIkJ4BJ6FZ+EKKhfLh+fh4TRKJBqWDJNQMmTCwkjJMEuYOVaIIhJlFo3ITiN5OI0EmBmWjCIZqTAsQZFgVlFw/tZuTt/cjIqaRnjQSAoxzYxGApIZKRlFYRQGKcGvXLF4cBXHxjdS5R4RTqOMcP4yM6ZJnLy+DSlTRabKmUULVrJqeCMTvTZ7x0ZYoKs0ylzXTDPDAEmYGTkqdq45hCvwcALx+cdH1i0eZbLq8qx7iPXnDswv5UGjAMQUM5Do5QpX8P7bG+rI5Kipvebnrwk2LNnKZN3h8bsH38qI4C8DjClm9HKP7JmhgaXkcFzBlx8fWDh3mOcfH/L47Qs6Tsv2HR8fH1qyaH+4Ex64OxHBz8Ej9KqKKip6uWLF4Go2jezi6YdH3H/1hGXdE7fvXD6zxyTxL9aeS+3W0u19917f/VQFOz5f0CummCT+xchZa3sUfd3wka8X9I4/fgON+TR7PCxMcAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_home.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAI/SURBVBgZpcFdaI1xHMDx7/Oc/3ms8xiZxLxcGIXF3cnN5KWUXIrc4EZcSC5QKC+1xjLKW5ELLzfIS8iNS0qUtxqllkYstllsNufsPKc9z+/3s/9q5Vb7fAIzYyKCDXvv7F6xutg2ULHYDFDFVBEVTA01xURQM0wEUWVKlA53dHQffHBm80VXbCpeyNfE4cwa/kc8XJELwEVXSS2sDJT5l8uGaeptYSRLSRLlw6LjZLmYfyWphYxyJsaJLQsZlyZ/eHejhXx9HaVywuyGOqJPR1m//wb5mlrG7TjZhReaKd5IJgyXB3l/ax+hM4ZKVWoa1vLr+1em18/lYetWvnb18OVHCU9U8ELM8IIw4OP9Q4RRQClR6tccYMmqbcxZuYdvnZ0UptTy5Nx2CnmHp5ngOVHBC4FqdYhUI+avP8a0GXNIK7+Z19iE2RGeXj5Mlma4KMRTUTxnaowJApbvvMnjR/eZNbeB022tDA4OEccxzc3N3L5X5EDLaVDGqApeqCqMC4KAVAM0HSGfj2hsbCQIAjAjF9fhchDmGKOqeC5LU7xXvS94/e0Nn8odLO1fRm1cS6FQYFJ+Eu0Dbykt7+H8szYWTl3MpuJGsjTDcyaKd/PldZJKwkDvENcuXyWnjr6ffVSrVa5cuoosqPK5/zntSTubihsxVTynqngt606RiVDuL2NqiAiqiqemOOeYPG0yURThqRme6/7SdXfX2XSziqCiiAiqiqQpqoqaYSqYGGqKqaKKd5dRgZkxESET9BfqVjgB6mRiLwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_key.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIwSURBVDjLpZLNS1RhFIef897rNDSoUEFFIhpCi1okzKKyRSFBFC3aCFERRQTSItrUHxBFbQoEkYJaBdoQ7kqQwm1BREjmF2JWFuKgNTozzr3zntNiRmthC+nAb3fOc37nQ8yM/wk5ff3Z1cNH0vcWCpYyA1QxVbx6TA01xbxHzTDv8arUJeL86Ojszf77Hd1hui3dVZNMue3JDTVO5Qu+C+gOC7G5wsLyhq0XY3MAoXnj9tmWDQMu352hAjAFICp7DDA1vIJiqBpeFV+2ikyJvNG8oxavvgKgegVxgphhTjAxRAXnBBGHiEecJ/rwiLA4RW6xHS1vBsCtkhwgIogTAie4QBAHgYOaIKA8liGV/MLOtguszL2k0UYqdabVPxBZAzmpdA8CIRAoTvQTrAxRvydNfmaAILmLc81vGLi2+0yoVQdUHQBghgNMBA2FcvY9W1tP4gsjJLc1sOK/0Xh0H1Kc7wnLcbzmQAAzQ0Swv0BBqoF48TMuyCIuT6IuCysFln+UgtB85QoBVIpEWF1slP1EbvghkojRchGnP8HVYnHEx74pxscXroSq+meEqhBhafIFudHnbGk9iEWDiF9ibDCiplQiEOHp/Am6em/1hrPTM5nOB3GHeo96xXuPqtLZ1Mf+9mNE2R7CsJ7h1yV6xw4wl9iLGUSJTZnqvmxdfe0//rY0d8fy46fsXdehpccXW86vlxf+61W/T2df5X4NNRUW8sWJifkbl55MZtbL+w0EmEFfv0ZNiwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_lightning.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAIiSURBVBgZpcHfa81hHMDx9/l+n82x0zadyBabMFtKSS03XGxXUlMspqxcufGrcOMPQHHhR1v8B26Wxi7ccOlKLUlqTJvQ0H5gv8737DzP5/OxJ5RcyPJ6OTPjf7juCwOn93a0X/tSsoIZoIqpIiqYGmqKiaBmmAiiSl21XxwZmbg4eKPntmvf095XlS8k6/OsRGGxJH3AbVfylpS+LLBSmbeEZc7EuNLbwkqduPqOyJkpUSUIBoT5Z5Q/9mMSMFE0KCaKeI9Rg990mc3NWxEVIocZUS7JkVNB5p6wqmY9adU6zAfMB6SSkX19hTX0UFVoINIgRE5UiBJAwhSV6UfUbugizA6T5HchMkP52yhp4zFcQxdiSqSiRM7U+EFYmnpIdW0LkKLZZ3BLzH54zOotZ8g3HUINUk2JVIXIqQpRKI1S/nSfuqZ9WMggbQTvMXXownsWR26hPsOSOvJtR1BVIhe8J1oYv0l1/TaymVdoUKprWkAd9Q2dZDMvEF9h7uNzirsvka5aQ/CByJkoUb7YSShPQ5KQSyt8HR+irrGDUP5GpTRNUr+T5u7ruNomkjTFVImcqhIVNvbyi4YFZl/fpTT5kvL8JMUd56hvPczv1IzITbx9N3Dypu9REVQUEaF3Yz9ta4s8fZMw9Pks2XCKySBqiqmiSjTAMjd4o+cocJSfxu9t369e7mQzcv7gqbEHB/k7xx/Uy4R6OdB6fOwl/+A7Obk497M21x8AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_link.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJPSURBVDjLpZPta1JhGMaFPvZ/CH3rL1BqICLzg0EMKmSwmZXWskPhSwQJ2yQzVEYyaRI1ikkOCqISJDU/9IZRKyqn9SWYuBedb+d4ju7quZ/jBvvYuuGC+1z3dX7nOc9zjgaA5n+ksbiWHKGnlbbvcRneR0yLJXge/MC1+99wNfEVwsIXXIl/wuX5IqbufoBz7h288UKb7uOA6SeVQfRVFf+qqXBuwAH05IPobDALDvAuruIgNTGbUQGehz+50VP6kJjEnoK2qKApymh0ethsiajVu1hb7+BPrYVfa02eH59ODwFsw6jkwQByv89BXVlBR1JB210FW20J600GaoiobnR53nrzhQqg3abqM4BCEKYeA4kM1KHVMFCLVtRRUG/J2GhKPH/mxnMVQEfFATs7HLAL6jFJffWVdkHNIYjq1PVnKkC493kPQGp3u3iZTiMUCiGRSCAYDGK1XEZtcwu3hx7NxoUwdDrdYc1U7KMKYJJkGQssEIlEUK1WUalUkMvl+PV8PI5SqcS9QqHAvdHR0VuaS3Pv947mdTYLn8+H4soKZgMBmM1m2Gw2RKNReDwe3pMXYDOCCILQ0Dijb/cA4XAYMzMzHCBJEoxGIzKZDIrFIvL5PFKpFPdoRgC/3y/Sv7B07s4b/mWZJ/ywn3dywEnrRRw7PgKDwQCLxcJFPXknTl/gALvdXt/3Zx1hxZb4nW1SPZlMbi4vLyMWi8HlcsHtdvOePJpRhrL7AFqt9pBerz9qMpl+T05Oth0Oh8jUGxsbszKNsL5JHs0oQ9m/1aYTg/t8sGkAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_osx.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF5SURBVDjLpZMxa5RBEIafvdu7RPCMhYLBxCoiaqO/IHZWNvkBooh1WrHUwk4s0sTGQrsQwf9gK1gpQoJoY++d5Ludd2YtvlwuaWLODAyzsPu88zLMplorp4n85t3W5vLS4sPc6/VqgMKxIiRRJEoRxYzx2NpajFKMvaaxH993X+flpcXHl169SAv3P/Gge42Nm2//2TUlOH/ubO/p85eXc879dHF1lfmrXe50bgNwfeXKsQJfd37S7XZw95TNxa+7a8Aa94BxKXz+sgOA5JgJuWNyJEfe1m+7gUvkGsGtGyv/NcDt9x8uZCkA2GvGM8Fn5ueIGmR3B2Cu3z/yoNbaJpWI9uwR1NreAXgEuZhmAicJEO5kk2YGD5qFTx1EjRODk4gIsu0LuMeJwSMCxexgIIfhduPSsQI1gjwajYZN0wx+D/8QEfsC00kfdjMxVKn0cwcPV1p/8mx9MFh4BJ1BcU23T0JmyA1JuBlyx2WEO2Y2jPCP6bTf+S96U2WlbWXHPgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_osx_terminal.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGfSURBVDjLpVOxSgNBEJ297B2iiUmToKABCxEVKyGVoJ+QLp1RxE4sRAQL26RVsLHRQouAkMoq/yD5Ads0ErDIQe5udu+c2eTCGU4MuPCYmbvZN292d0QURfCfJZ9eXh9WV5aPpW3bUQigQg0YKFBKQcAgP0AE38eRDcgShp6HX/3PS0mbT5dumyJ/+A5HmQ24337+s6oQAIXFrN28e1yXUjqifHYO9uYHXIgyFGR2JukL83OACoVEreDg6ppYRSosyzKYjhlrO3sgozCETCYD/X7/R1LahmRcLBYhny+ApVQ4kdVut6HRaMx8A0iHbGmtgS7AoFarQaVSgWq1amLHcSb/kqCDMzbAAGSAynxgtFot6Ha70Ol0TMK07GRb3Db6PkiWEVer1+smgeM4kdf0GZgHRAWVGiuIZSUPMFkxLWYFih6WxHELcdVpklgBx0mfLTIBP09mY4LRK0uvGCMm4T2+IgLXdQekIFcqlVKTfyNh6/ueJ3u93s3W7v4J8eYCzUNEw4SjYeIelUbja/KRrlxT1VBzDg68ofsm/jvO35HitdVS/1ysAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_put.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHbSURBVDjLpZM/a1RBFEfPnfciq4uChLgrWChaihBYbAxqBD+AgrGwVBDRxipgH1AMEQJpbawU9SvYCRaiEmOaBUkRDRYBwf3zZt691+K9DWuXxYELwzCce37MXHF3/mfJtYcv789d7jzZ7XvTHTDDzVBT3Bxzw1Uxd1wVNePIgdTb3NxefLuysJZ3LnRWpxrN0GpM1LjZ6+sqsJb3k4f+7p+J1QfJA0Du6izdOjMx4M7jLSqAGwCxVBxwc9TAcMwcNUNLr8qNqM6p9mHUtAJQv4IEQdzxILg4YkIIgkhARJHMySyQl9V9K2vAiBQAFwGBzMEEzJzMIUhGLqDiaKiMTa2OYPU/EAH3f0Ai4OqYgAsQhMyyCjCKMNpUDKk2YyDLhcV3t0mxJMZEGiZe3HyDWWUQypT2DEYAkbp9Ha0YJi6dnGf+9BUG/QKAMpV1hDpLBvhYlHGjYlBQlAVREw1psPlzA68N8pEKgNQ16r78folvP9aZOXiMYRmJGpk52uLB87ukvAXcIN/+vvXq3rO0YKqYGqqKmaEpYX6WeGKDQ9MFRRoSNbLza4fe7ymOl9dfA8h+pvHq8sUv7en2uRgT3W7388en67N71vsd5/OPZj+kYUqfVr7OjZ//BRjUGmnYsJxdAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_side_boxes.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFwSURBVBgZpcG9apNhHMbh3/ORWiztpLSrQ86gmw6egkuXjE7i5CQ0OAZxUSj0DCxiB8/A07BDBXEoKEoGbaP45n/f9im+SwhCyXUl26wiPXjy9vG9+7svpjNv2ICEJUKBZWThCGTjCEJia627ODk5e/ru5d5h3b27ezBY38jb61zHxsUsDoDDOuucZ9NzrutX50yz//rUy4zffPT/PHz+3peotmjGR6f0JqMhven5b2JuYm7C4k+YOzubhIImY9PbvrXJoloqdZCpNzJra5Wbg0qjedDUUND7+v0ni0qGnAo1QSQTWTQK0VTLNJPRkGVKAiVwAnKiqNBIQVOloBkfndKbjIb0Us1UCRkyoMQVSTR53nX0dm5vsSgDKWdKyaScyIUr825OUx2i9+XbDxbllGgElJSwRGOJpkqimYyGLFNSoin8UwqNbJp69unz8aNX3Z4iUIiIQBLRdYyefUA2VuAwsrCERHPMpWSbVWRW9Bcyl/ydiZeC0gAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_side_contract.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG1SURBVBgZpcG/S9RxHMfx5+dz3+LKsKxBC4KQXIvArYb+BQmuIYgGoaBJiAoiLCqwxUGwkBr7gaGOTu5NZhBkBRU3NEV2Q3d69/m+X+/6DEJcNoiPR3B3diKMjM1ePXN2+OFay3vcAQmXMBkuRy7cDLnjZphE7+7UXF39dmNhsjZdDJ8entpV7Yn9Vbajp9myKWC6aCWPrbVfbNd68sgfhZtz6UKHQBYIBCKRO3O3uHhylBOHT9G39yBFLPjb6ESdLLqLTSbj5etnZOutNlYa7s5WTEZW4E7mwMzSI340vlM/Xqe30ktZGjjg/EOlkUWTkT1ZekzFIscODfJ0cYZqZQ8YSI7jdJOJrHA5E/P32V/tY2hgiNKNA/v6WP34gXang7sIBLpJRhYl4+a52zSbLd58WmH5/TJzi/NstDew0pCcrUgii2VKZNdq12n8bPD5y1ee333Byru3BA8EAu5OtzKVZNFNbLp3+QGDA4Nk7Y1EJyXcRQiBbi6RRUlsKioF41fGyVI7IRP/I3eyMDI2O9t/9EhNZsiEmSEJSwlJyB2X4ebIhUtIZK8WJmvng7uzE5Ed+g22TgZNyTAeRAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_side_expand.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHXSURBVBgZpcG/S1VxHMfh1/me41USwpa0XwTpUNToECTR4D/g0G1oiKChCAchChqiKYzCIbGWtlpuhBBBS7TY0FoUSZOVSIo/Crz3eu895/N511cQDWoQnyeRxE4kQyOVqwNn+u+u1NUpAe7IHXNDLlyOzHAJmWHu7C7ltenpuRuTY+WJrP9U/4O2js7Q3cF2dNbq9gCYyOq5Qn2lynat5Qr8kcnElfMpkCCJWqvK919feT3zinsnH/E/l0a/EQXJ+ZciL4juv7vD/M9V5pfqzC1WmZlfJTI3ooDEBiEgQYJWMyf6svCZ0bfXydoDpVLGrraMyAsjCuaG2CQ5RVFwsOMwF56fpau9CyRuvRymLU3JSoHIzYmCXCRsIbDCaDabDPSd5sjeXnoP9NGwOuXxQUppSuRuRJm7sUESLiEXa40GUx+n6NnTw+LKEqomvLj2BnfWuTtRKPKcrSTRauUsLC9wc/A27z99oLbc4PHlpyQhIaSsK/KCKMgcsUlyrDBmf8xybN9xjnaf4MlwBZKENATSJCGSO1Hm7kRCRHJRFAWNepNo/OJD/pKmRC4RJUMjlUr3of1lN8PNMTPcHctz3B2XkBsy4XLkjjvRs8mx8rlEEjsR2KHf89sagbhDhaEAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_side_list.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGQSURBVBgZpcG9alRhFIbR5/tRA0Fbbe0tp4tFsHFKLSaNjSIGJlapDIq12BgIxJRaCGIK8QaUNN6BmEJBLNIGCcko55z9bs8WpxlECLNWcnfmkW6uv7l/dXnw9HDii+6AhEuYDJcjF26G3HEzTOLC2fZkf//gwdtnK9t1sDTYOrOwmC8ucBqLJxPbArbrpPU8OTzmtH62ngkPX33xf3n0+qv/z90n771HdRdhvAcjfaBpGobDIVOHx7+wzrHOMReNOZcvncdkhIo7YWeZ3jVm1VJJyUjFKcrUzgnqjFBNRhjvwfUf72jbltFoxFTJkFOhJrDkWBZBJkJ1OWFnmd4NZpUESuAJyImiQpCMUCUjLL2Ae+klTdOwurrKVKqZKiGHDCjxhyRC7dqW8PEOvdvMyvRypgDmTk5O6NqOUN1EuLIJa+eec3R0xMbGBlM5JYKAkhIuEVwiVEmET+v01phVUiIU/iqFIHdCPfj2fXe82a7IDJkwMyRhbcutx5+ROy7DzZELl5AIu/SSuzOPzJx+AwKoFtIrwFHLAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_side_tree.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF1SURBVBgZpcGxalRBFMfh35yZGwK72mrrO2yxoIXFvIBNGksrsbISFGuxMRDIGwhiCtttrq9hCgWxSLtVsor3nvN3RwxcggTCfl+SxC7So+cfnz14uHi73mgmAREoAg9HIUKB3AkJueMR3N4bLk5Pz158endwXBb3F0fd/szu7HMTs4uNHwHHZTPINutzburnIKN5+f6r/ufVh2+6zpM3n7VFkYJmtVrRdR21VqbW57/wUfgoXMFvF/fu3sLDaQoSTdd11Fq5quRCSk7KIodRRtHE6DTFw7nU9z1NrZVL2cBSpiTwJNyCJjxoTCGa5XJJU2tlKicwA8uQS2IvZ5oIp7EIZ6rve6ZSMYpBNigZLPNXRNCUcRiYqrUyZWyZkQGXsCSacRhpTB5M9X3PlKWEpQQpkc3IKdEogqZEBM18PqfWylU5JZrMPznThERTzr7/OHl6OByEO+GBuxMR+DDw+PUXQkLhyEUoUAQRNCdsJUnswtjRH6iT+f+z/UsKAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_split.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGaSURBVBgZpcG9alRRGIXh99vnKIGgrbaCl5BOC2/BJgi2NmIlFoK9oI1CIJ39kInxhxReh1VKCZmfQkiVTOLs863l7GAau5DnCdtcRzx+ufPi4aON98cLr9uAhCVSiWVk4Uxk40xS4vbNenpwMH395cPmdr/xYGPrxtp6ubPGVayfLnIL2O4X1WVxfMJVnVUXVnqnefv0Plf17N0hTW+LZjkkBiyTAmEkkxI5mBxMWizT3Lt7i1TS9Ng0UYKwcQkcJhSUEkQUIpLoTKdCP5hGQ9L0qaQpgCMgoDMoQDKdoURHH5BhsohGKZpimdFoxGQyYXdnh9nREXvjMbPphO97u8ynE/a/7jKbT/ix/5nf8zmj0QgpufDq0083g+RB8iC5Zrpmepnp80z/qdVny+rFsvrkvLp58uabV+iHWrkQQQC2iQjMik1hpRQ6IG1KmGaoA03vFE0HmJUIsGkigksCuggs0Vii6SVxKYBgJYL/dfzTdTSyafrpr8Px8491U5koRWYiiawVScjGSpxGFpaQaMashG2uo3BNfwFx+DLsFQ4W2wAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_tile_horizontal.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFCSURBVDjLpVOxSgNBFJxcrkmC+AV+gP5BwEKwtLESW0mZD7CyEyViJVhbG7DURvEXBAsDKgpGxIjIecnF29t9byyyAZu9wkz12HnMm3m7WyGJWRC3Dq7aq83FTpKzMcwyqFNYVczHNrvpDc5XmktrXz9siAJpksCKYK5qs9u7t+3T/fXjysn1q9TrtWhqhCSUAAkMR2PUGzWoAkqCBJST+qF3r4ft5Wo8toyy77En/zQpoSRSk/kaEH+mCoxyiQAARxcvDGHv7DnIbe1ekiQiUQ0uyIkEucJaAEAkUiLgwpzNvUDhyqa4sLiZcFHplBJxN41QNsWWOXDegTFFsMnkJixujI9QlOUMR1DxDopC/hVhentx//Gp2+rkG2IdksEHnDioE4goqOxv7uQLUjiIE6Sf76AI/NPpAkBl1t8YYUb8Ao9lHyy2IyRjAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_tile_vertical.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF+SURBVDjLnZOxalRBFIa/e3djWGyE1GJhlcogRLCwshPrgI2NjaCktZZUCVaB5A1s8gI2PkMKGwu3CIIgKGuuu5ts7pzzH4t7k5tZSVw8MDPMmcPHnP+fKSKCFzsfXz1+uLp9PIubEoSEJJI3q0nIHFMw4IRPn7+/fv/26R5AH+DR+upub2lQrixBRBBARDsARRABiub8zth2gQ4wTVFO6hMioi2CIJDIcueg8cxL2ugDuAWbT26zaLx8d0QGMPcriyMAuhb6vYI6pRxQVeMrAUUBUFAUULS56sfo4rwESNfcIIO1azLPb3A0/Hq4/+HW/V+n4Arkjlwkc9yFyfHkuMRyTJHpMAOsP7i31lsesHKjs+qy8vMu/K7qtQwwPlNZzSZIlz2Pv/cBUjCdtzElsfXs7sI2brz5kotodr2I3cuMRsRkOcBd/1a/m/CzuXdw/HO0mIWtj5NqlAO+DYcHz7dmG26GJ8dSan5fXSNv7JMbYSJZDcHBBfi8r/+NP5dvHwJcdb23AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_view_columns.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF/SURBVDjLpZN/S8JgEMd9i1JURPSDIoIkS1FQI4iQgihStExrhGmydGObyZyyYRaybBRFQb/8vxcgBIF92275ApoHx7jjns/37p49LgCuQdzlXmEXd8RON1L4QPjM9NwbQtkXBE+eEWCe4D9+hC99j+XDO3j3b+FJ3CCcvu5a5wgQLXV6ceUT/3Xv3mWPAJayE5/fboAA4dw7nNjspmoDQqevlDAMA+12G61WC1/fP1BVFfV6HbIsUyyKIgRBAMdxVD8drf0BzIU5scl12QZY27ZM13VSbzQapFir1VCtViFJEsUsy6JQKCCfz1P9xFrFBlhX5cTGVyUb4D96oESz2SR1RVFIsVKpoFwuo1gsUpzNZsEwDDKZDNWPhQUb4D0wHHUwHCjZgKVEmxKaptHc/ZmtL8/zNLMVp1IpJJNJxGIxqh/yn9sAT1x31IHbx6L/FtiF3Sv6s+a2NMxE65jaUMwtX9CixiIiRkM8RoKc2XbRVGZhnrGcJcDAr3FQwC803UMOARws7QAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/application_view_detail.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHSSURBVDjLpZPbSxtREMbzL4pSpYj1VilUmmpQSCKCSLAgihFTo9Eg0TRZY5LdxJgbKYo+2AstLRbU1nfxrlmTdLPJ55nZ+OCjyYGPYQ8zv/PN7DkmAKZGZGoakN5OKSeqPfAPtk9Ca8ew+g4xvPIHQ94DWJZ/Y3DxJ94v/ID54zf0z32BbXFPpToGODZOKrPpUzxX5pmdCgPo5HrUN7kNBtjW/qKe1TORMwDW1SPeeJ0ucMzlcshms0gmkyhqVSQSCVzmdSiKAlmWEQ6HOa/TkakBxMBolUQyFRRIpQruijp/3xR0XN/ruMiXcXar4fRG4/yOsaQBoGmzpa08x0wmg1QqhVgsxoBoNMoQSZIQCATg9/s5r300YQDoV9HS9Cr+l6vspFRzQgBVOCE3j06uVJ3zX47EDIBl6RdvdG9ec6Se4/E4QqEQA4LBIO5FSz6fD16vFx6Ph/PabLIBMM9/541ypYpyzQWpqD2VKiB54YJEq2VowwC8m/tqTFU+50i9RyIR7pUK6WSKbrcbLpcLTqeT85ot6wagf3a/rnvQNCjh8S1Ib6Z3+Wb1fviMLkcWr8bTYsqbPKg2u4JWawQvhsPCdkicLEHUkCQGNPwaGwU8AG9RQVkc+5PeAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_view_gallery.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG9SURBVBgZpcG/S9RxHMfx5/f8fPXyrMyOhGgoWrLJ4m6Ii2hrCyRwiKa2fg06aKNjLRVHQkNEtOnQUNReg5RLBJHUEhe4iEiUnj8+3/f7lR/j/gDz8cgksRfZyNjMrfMXa/dX2qpIgDtyx9yQC5cjM1xCZpg7B7rj2sLC4uTLB6PTodaoNfNypTRYZjcqa21rAtOhHVVqr6yyW+tRJbYFmRi71M9u3X3aIgmSk8zPz/Oi5yg9eZnBrpOYZxQOheDaoSec7W/xe2uAua+naTQamBtJQKKj6H3Ot83v7IunGOoap6xjRIe3v67yc+MdR0pLZFlG4oWRBHOjoy9b50Q50Nf9heg3iXEIbZ3h8+ow75cv4JvGxP6PJG5OEuSiozbQQ54fpxIOYtrgjy2xaa8Rb3BEXM/JWldI3I0kuBtJvV6nTp3E3emQRIcqQodF4u4koYiRarWKxA7xjwSSSCQQYA5ZBuU8o4gFSZA5yfVXyyTPLldZ/TRK0js8w725KZLJc1PkE3fY8egxcmfH7eYH/Y+R8RltIyz+aM3eeBhH3Qw3x8xwdyxG3B2XkBsy4XLkjjvJLNsySexFiT36C4QDM7+0SJboAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_view_icons.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFuSURBVDjLpZPdS8JgFIf9F6UoieiDogKllUNhM4IIKYhCRAqlIkqKmYVGERZFUZB9kBgJ9uH9dARdeDfn6T3ndbJFN7kfPDDGe55zONvrAgCXE1zuacW7nK3UQ3ufIO8yku8gbZchuFWCwOYriBsv4E8UYCr+DMLqI/hi9yAnbutYR4JwumJEcyr8FyFybZAAO3fC2NIVkEBOfkAnGVm44AJp541eFItFAjOU0QhMvBAhms2m/Uz4rCVgC+tEMDB3ygW47b+CBSaGYdjA9M+ecAF+qt9dzU5YDCmRwMLv0jiB6Zs54gJx3T62dVTq1hI0Gg2bwCNnuEBYe2qPbB0TC6zout4G0x1Ic8Fk7IELBC+Bh83F4bM5DRZal9glprjAF83zreXvOCzlrxKBUVUVqtUqPddqNdA0vie3XwHzLigTKzf0Z40uXsJw+BwG53Nsy8e0KE8oC73SIfQED9jY+6yzAqwGUUjg+DY6FfwA5i1AjZKvAWgAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_view_list.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFrSURBVDjLpZO/SmNREMZ/uVxFCGy7L+AjpAgoIUW4hZjCCDZCbCQgVlY+gaDNLghibbmy2EgQTCOp8gaWYmFrpbE4Z+azuPe6UVE2ZGBgzoHz/Zk5U5HELFFZ2/uzu9ysHT2OVZUAd+SOuSEXLkdmuITMMHd+zIfn29uH/YtfGydpbal2PLdQTX4uTEVcfR7bMXCSjoOS8ePT1NJfghKAVCYONhenBtg+vCcHkAOwcwOnTRiNRkjCzHD3TwmQZRnmlgNQTOG0mSPX6/V3TJNTmqw9FgAl0tY1nGUwHA4xM2KMbyom1Uii0+ng5oUFz1HPshy50Wh8yTp59tJCWaxfwt9VMRgMiDG+y48Kut3uWz/SGAKQP5ZEq9X6lrmMGGJhofCyclGhvyb6/T4hBEIIxBgJIXyaQq/XQ6WC8vJqHSCh3W7/1z/wQlH6cHd/vvM7bLgZbv86biWzhNyQFXvhTsF5DlCZdRsTZoxXOgYqlSAcLRcAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/application_view_tile.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAFjSURBVDjLpZPdS8JgFMb9FyUpieiDwoKklUNhUwIJKYhCRFrah1FSzDRaFGFRFHbRF0mSkJX3QTddeKfz9J7z5mbtIpoPPLww9vzOw9leBwA4OrHDOaWOL2jVWnDnDeRt5vQLSJvPENgog3/9CcS1EviSRZhMPICwdAfe+A3Iyasa5ggQyVb1WP4d/msheqkTACfbsWf+Agggp1/BjoZnzzhA2qrQg3DBNErQPIZRy0XTqMHIyTeALawFSJV+AhLFKJ3NZpOCuYoJ6A8fcwBu+68Guq5bGvRNH3EAfqrfwoktY7jdjUaD3ukNHXCAuPpomYhBUFyGMfhZHjWMcsv7HCAo9wYgVVKMyhTOiHTiVAp+rBgAlz/LARPxW0sDqtnWoF6vWxp0iRkO8Maubf0HTp8Krbugji0W6M8amTuHocgpDMzk2ZYPaVHuoAY90h50B3Ks9i6brALLoFUCdHwbOwV8AQoMLgCS+2NeAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_xp.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE8SURBVDjLpVM9SwNREJzTpx4JaGMn/oJrRMtU/g2xsLD1F/gDbK0lpaAgNmJnI1YWasBOELs0QgQDfsQ4Mxb3vEvgipwuLAsLszszb19iG/+JsHf6dDU3g9WXdzdtABIsAQZowjJkwSRkwyQoYX52+PYx8F0w0FrPFqfuuwP0P1W5ZW2hi9vXpViXsXOyieOtw+b1zUMr2T16tGnYBizYhqR8a2QjquxRkAjJsIhgGhsrg4q9CYDpmGWMerZ//oxgC1mW/clAnl0gIE6UqvXbLlIqJTYaDeibCBRrAX97ACAKwXIt4KgHEhEUGdQBlgOE4Khd0sTAMQZkzoDkxMBiAI1g5gzSNK39jJYQJKHT6SBN00KGpDFGVfJ6vR5kIyQetg8uh9tiH+IIMNb8hPOzNV2cuATAX+3kv9/5B7T5iPkmloFJAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/application_xp_terminal.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAGNSURBVDjLpVM9SwNBEJ297J1FQBtzjQj2dgppYiP4A1KZRoiFrYWt9rHyH6QUPBDTCimtLNSAnSB26YKg4EdMdsd5611cjwsIWRhmZ3f2zZuPVcxMsyx9fPF0NRfS2vM7lx2WtcQiJHvDRvZMluXMGNHstJH7+Wj09jHkOy1+tc3VxeC+P6TXT1sYZX2hT7cvS6lepv3zHUp2T8vXNw81dXT2yGwEGeERSbSVCC5qysYa+3vm9sJGmLFojceXJ9uklCqUIAic5G3IytahAAhqqVSiwWDwx6nogW9XKhWphaGAvC50Oh1qtVr/7oAdCwBQwjB00mg0qFqtUr1ed3YURZM7X7TWTqM2Gm3CASRJEur1etTtdp1DnrafFtJGMbVNGSBas9l0DrAzR6x8DdwASUB0RqNNGS2/gH7EInvCwMhkZTnlnX0GsP09tJER0BgMoAEAa1rETDIQvBkjBZeHMIjjuNB5Ggg0/oZWPGrHGwd7Fp9F2CAlgHKqf0aYXb6Y2mzE8d/IfrXVrN/5G81p6oa2mIEUAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/arrow_down.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAENSURBVDjLpZM/SwNREMTnxBRpFYmctaKCfwrBSCrRLuL3iEW6+EEUG8XvIVjYWNgJdhFjIXamv3s7u/ssrtO7hFy2fcOPmd03SYwR88xi1cPgpRdjjDB1mBquju+TMt1CFcDd0V7q4GilAwpnd2A0qCvcHRSdHUBqAYgOyaUGIBQAc4fkNSJIIGgGj4ZQx4EEAY3waPUiSC5FhLoOQkbQCJvioPQfnN2ctpuNJugKNUWYsMR/gO71yYPk8tRaboGmoCvS1RQ7/c1sq7f+OBUQcjkPGb9+xmOoF6ckCQb9pmj3rz6pKtPB5e5rmq7tmxk+hqO34e1or0yXTGrj9sXGs1Ib73efh1WaZN46/wI8JLfHaN24FwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/arrow_up.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEGSURBVDjLpZM/LwRRFMXPspmEaGc1shHRaiXsJ5GIRixbCr6SikxIlqgJM5UohIiGdofovHf/PZVmYwZvTntPfjnn3txWCAFNNFE33L/ZKXYv+1dRgL3r7bu0PbucJp3e4GLjtsrXGq9wkA8SU7tPk87i/MwCzAyP5QNeytcnJl46XMuoNoGKDoVlTkQhJpAgmJqcBjnqkqPTXxN8qz9cD6vdHtQMxXOBt49y5XjzLB/3tau6kWewKiwoRu8jZFvn+U++GgCBlWFBQY4qr1ANcAQxgQaFjwH4TwYrQ5skYBOYKbzjiASOwCrNd2BBwZ4jAcowGJgkAuAZ2dEJhAUqij//wn/1BesSumImTttSAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhQABAAOZ/AP/RWf/dhf/FNP/KQ9zc3Pz8/P+2APzbtOLi4uavbOWEAeunAP/MSf7lpPa2Nf/36f/hk+yUAP+bAPi5Jf+4AP+LAPOrAf/TYv++Gf/ELu25NM5uAf/oyf+tAO7u7v+kAP+UAP/CJfrr1vn5+f/Vaf+8Ev+4Sv/pt//z3fHx8f+xAP7Fev+pAP+rF+bm5v+gAOy1KP/Yc//be+19Af+5Cv+nLf/OUfzDafq1Cv/Xlv+DAPW0Ev6qNvOxDNKJAf/JP/7BQ+rq6u2tFOjo6NmLKv/Ihf+fKfWVAf768/+XFvb29vT09M2EAPWjAf7FOO+NAf+aCu+dAP+uR/+/Hf23Bu2aGO29QempKv/INf+2Xv+PB/PGVt6YEvPETP7GTNySBPSyGfCDAf3MW/CrC+7BU//vxf+hCvavAf+JCv/9+v+lBv/WcP2gBP+yG+ywHf+oDtd/GP/Xa/S/P/mxAP+PEvrw5Pe4F+7ASfmzBf+0B/DToeGjHfLRff/YfumNDP///yH5BAEAAH8ALAAAAABAAEAAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOUh0h8W1s5hJeZB5Wgh3pnATJjNxCpZHYBJAsiobFpZVYTKGVgGiQXJG5OKCcLfCixlQ0DNhoTJyc9ZA0QDRohJxALcgMAZcWQZTYDMRBWdtA9dxABEMoNAQtiECQ/JA/cjBACFwH64/rmpQHKIMRYsEVfABtOTtRLtCZDDBkxHmrYAbGHFYgyYNiRcYEgxIckQjRYaIiEgBhr4qiMMXGXxRgkYmgkYWNBF5gkSKwJOZKkIBkZdl0YykvDGQwYLOjiBQMPhhI2hRIFEGIbyRNTAGjdCuCCUQMGlF7oCmOOAQrXxnIFwCADvXoP/wQwsEG3rg0AMM5QoKAUwN2ye6/5tUs36MIAIWwwWMx4bt69FmAstuFmTmA5jTNPsRrrwRQnP0KLDj3gMYUzkn8McKMisIYBo0eHYMAtgAosTgQIcOIEN2g3esGOyeBkggUKZxdMwKJbN3MsWDLQIBZLgIoQGbJrzy5ASHDkZ3CcAZt8wvbzUzoE6ExDBY0Q8OPH944cLPL6ycHI35+ng4BYJ3SggntTFGhggWMER96Cye0wBVJIFYhBHgPmQV0lfQhYYQkcdlhCgvgxmFwPHnLYXgcodqAQKGKkmGIeNMQY4wIKipjcGDLSQIUKLnbAQk+VAMFCjymqkFyNIqJlgf8BPBKJIgsQhCKkky5GgSSDaDXhIwtcdtnlB5uAAsQHXpbJpZUhYhlFFGaWCaaUZLbZZRTH2Wjfmix8oOeefL4QZpAv8CmonhHUaScFURwxqKAS/CmJCCI4EOgHL1Q6aKF2kpdopZy+IIEEnEqwggh1SFIHHBsoWukbLbSgRqcvYJqpAZt++imrLZjx6QsKbEBEGpHosUGqL5gBBC9icHGErRI80QSTA0YbrQERPMHsE1fEQQIAE4AgQa8bwAJJAsNay8YETjBwBRPL2uqstPAaWa0EIHj7BBPYZACGt+B+Mm65ILDRQw9g+ODDEfXW+2680labMAj3crHDwPXOMKz/HpEkAAcRTwSMww5jGIxwwmE00aSTKkQQBggVVKDFvV/sgAMOLPtBBBwYQ5LDGg3woMMHVOAQsg8tF10ylSmqXHQFMM9MBQg63HDCDRxE8oAJAfRRQwcGUDEGE0QvfbScQyrdsg5P+PAFFVRQoIYUEPRxwyRFOFBKBmBZALYOfPM9A5tksxDBDH3rEAYTX5AHgD4mVC0JEjx4sYsTU+zAxRU1GJEEGmjMoOiiez4xAxp0JGEED3vsgUFia8QAxNyUHADFXFrdxZUNXgBxRRV+KOD77374UYUDXtDV1VBaqcUAD29RsgIUsJEm2gDULzYAEHI4oL32QAyQGfXeZwaF/7+VpCEFFOeln4Fz0LXPXHPwww+dGUUU84AREhxoIIQQ6u9/gfuBjwSyUI86GAEEOYrR6gSgGsbQhTGwEUAGplACGniIBiAg4ELuVwEW7IUGAFiDDEYYA5VIhQQrichOBnAWCrCgAjcAFkkeIAUdSMA9DADAAAQwgTa04A1q2JMaWNUGdGUDCxTogAQqsAKfEGIFLfMUy5bmMi1YUQtn00HLvCUBHdCBfE4UxAlqAAUjSOEGRcjBCTgAKRS4UQQc4MABcrCCLPAgCUnIwoXCOIg0oAAJk3hA8/hISEKmIAgpUMIICtCIAoxgCR7wwAgKKYgCuIAAmMwkAlzggiB40sYDnhyCCxCAgExm0gOFVEIpTcnKVrrSlC5gpBOXUEpS2vKWuMylLgmAgEmShJa6DKYwdekCX3JDCZxMpjKXycxmNnMIxgzFCIbgyWpa85rYzGY2qSlLUBQAlNoMpzizCcoUxCIFkUynOtfJzna6U51KAMUIUkDPetrznvjMpz7v2c1IFGAJAA2oQAdK0IIalKDxnMQIlMDQhjr0oRCNqEQj2s9HjOCiGM2oRjfK0Y56VBIFCKlIR0rSkpr0pCitKCVXytJKBAIAOw==]]></data>
	</file>
	<file>
	  <filename>/images/wand.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAHMSURBVDjLlZLBSyJhGMa/UxTUIWJ0ZVmlwxLLEiEhurCoKeqCOtZN7J4ZRZdd9rSG6NFbSOegDp5aqWWI3UGm6KBUxsq2LLj+CzV9jDOH8NlvJtqLjuXhBy/z8Xvel4chAMhTKGfOMeVsbqXf2wBp3s5Yf5hno8rp24YxS9PTVHq18mTAgzj3k4mCIs0cqZeLUCTHJ1q13VKRSz0v4PRNVr1KQfu9Aa31BZ2LKKg42aHfJ8ZNA9i5L9hWUZFeQ73kof3N42SPR6OyjFZ1FZ36AuQfo5CPyc7gDiRHttNYwsl+Apqmodvt4uJrCur1GmSB/GI4TAOo9JKjVasQi8VQr9ehqiqazSaqu1Fofz5C/kYow9M3gJVkp+JUJZFIIJ1Oo1gsolwu42hngcmfdfmecS4fki3TC3ieN2SPx4NAIIB4PA7lPIo70YY7YQJyhdhNS3yU3W43/H4/LBaLvnWbbbxnvGNyQz4gmb4ByWQShULBkH0+HziOg/6die+ZKOjzzQEZYXzoCYhEIsjn8z3yI0wKmf7KwWAQuVwOLpcLXq+3Rx4EyWQyaLfbcDqdCIVCQ8n/A2q1GkqlklHYMLIREA6HN/WzrVbr0LLOP1AMs7UPAa92AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmcgPSBhcnJheSgKICAgICdpbnN0YWxsZWQnID0+ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJywKICAgICd1cGdyYWRlZCcgPT4gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLicsCiAgICAndW5pbnN0YWxsZWQnID0+ICdNb2R1bGUgdW5pbnN0YWxsZWQuJywKCiAgICAnYWRtaW5kZXNjcmlwdGlvbicgPT4gJ0EgbW9kdWxlIHRvIGdlbmVyYXRlIG1vZHVsZXMgZm9yIGN1c3RvbSBjb250ZW50IHR5cGVzLicsCiAgICAnaW5zdGFsbHBvc3RtZXNzYWdlJyA9PiAnTSZhbXA7QyBGYWN0b3J5IHdhcyBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLiBZb3UgY2FuIGFjY2VzcyBpdCBhbmQgZ2VuZXJhdGUgbmV3IG1vZHVsZXMgdGhyb3VnaCB0aGUgRXh0ZW5zaW9ucyBtZW51LicsCiAgICAndW5pbnN0YWxscHJlbWVzc2FnZScgPT4gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgTUMgRmFjdG9yeT8gVGhpcyB3aWxsIGFsc28gcmVtb3ZlIGFsbCBzZXR0aW5ncyBmb3IgZ2VuZXJhdGVkIG1vZHVsZXMuJywKICAgICd1bmluc3RhbGxwb3N0bWVzc2FnZScgPT4gJ00mYW1wO0MgRmFjdG9yeSB3YXMgc3VjY2Vzc2Z1bGx5IHVuaW5zdGFsbGVkLiBZb3UgY2FuIHJlaW5zdGFsbCBpdCBhdCBhbnkgdGltZS4nLAogICAgJ2Vycm9yX29jY3VyZWRfcHVibGlzaGluZycgPT4gJ0FuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgcHVibGljYXRpb24gb2YgdGhlIG1vZHVsZScsCgogICAgJ2VkaXQnID0+ICdFZGl0JywKICAgICdkZWxldGUnID0+ICdEZWxldGUnLAogICAgJ21vdmVfdXAnID0+ICdNb3ZlIHVwJywKICAgICdtb3ZlX2Rvd24nID0+ICdNb3ZlIGRvd24nLAoKICAgICdpbXBvcnQnID0+ICdJbXBvcnQnLAogICAgJ2ltcG9ydF9tb2R1bGUnID0+ICdJbXBvcnQgbW9kdWxlJywKICAgICdmb3JtX21vZHVsZV9uYW1lJyA9PiAnTW9kdWxlIG5hbWUnLAogICAgJ2xlYXZlX2VtcHR5JyA9PiAnWW91IGNhbiBsZWF2ZSB0aGlzIGVtcHR5JywKICAgICdmb3JtX3htbGZpbGUnID0+ICdNb2R1bGUgWE1MIEZpbGUnLAoKICAgICdmb3JtX25hbWUnID0+ICdOYW1lJywKICAgICdmb3JtX2NvZGUnID0+ICdDb2RlJywKICAgICdmb3JtX2V2ZW50X25hbWUnID0+ICdFdmVudCBuYW1lJywKICAgICdmb3JtX2lzX3B1YmxpYycgPT4gJ0lzIGEgcHVibGljIGFjdGlvbicsCiAgICAnZm9ybV9oYXZlX3Blcm1pc3Npb24nID0+ICdIYXZlIGEgc3BlY2lmaWMgcGVybWlzc2lvbicsCiAgICAnZm9ybV9idXR0b24nID0+ICdQbGFjZSBhIGJ1dHRvbiBpbiB0aGUgYWRtaW4gcGFuZWwnLAogICAgJ2Zvcm1fYnV0dG9uX25hbWUnID0+ICdCdXR0b24gbmFtZScsCgogICAgJ2Zvcm1fbGFiZWwnID0+ICdMYWJlbCcsCiAgICAnZm9ybV90eXBlJyA9PiAnVHlwZScsCiAgICAnZm9ybV90eXBlX3NlbGVjdCcgPT4gJ1R5cGUnLAogICAgJ2Zvcm1fcGxhY2UnID0+ICdQbGFjZScsCiAgICAnZm9ybV9vcHRpb25zJyA9PiAnT3B0aW9ucycsCiAgICAnZm9ybV9jb2x1bW4nID0+ICdTaG93IGluIGNvbHVtbicsCiAgICAnZm9ybV9maWx0ZXInID0+ICdGaWx0ZXInLAogICAgJ2Zvcm1fZnJvbnRlbmQnID0+ICdVc2FibGUgaW4gZnJvbnRlbmQnLAoKICAgICdDb250aW51ZScgPT4gJ0NvbnRpbnVlJywKCiAgICAnbWFpbicgPT4gJ01haW4nLAogICAgJ2ZpZWxkcycgPT4gJ0ZpZWxkcycsCiAgICAnYWN0aW9ucycgPT4gJ0FjdGlvbnMnLAogICAgJ2V4dHJhX2ZlYXR1cmVzJyA9PiAnRXh0cmEgZmVhdHVyZXMnLAogICAgJ2xvZ2ljJyA9PiAnQ3VzdG9tIGxvZ2ljJywKICAgICdvcHRpb25zJyA9PiAnT3B0aW9ucycsCgogICAgJ2Rpc3BsYXlfZXJyb3InID0+ICc8aDM+QWNjZXNzIERlbmllZDwvaDM+CjxwPllvdSBkbyBub3QgaGF2ZSBzdWZmaWNpZW50IHByaXZpbGVnZXMgdG8gbWFuYWdlIHRoaXMgbW9kdWxlLjwvcD4nLAoKICAgICdoZWxwJyA9PiAnCgk8aDM+RGVzY3JpcHRpb248L2gzPgoJPHA+VGhpcyBtb2R1bGUgY2FuIGdlbmVyYXRlIG5ldyBtb2R1bGVzIHRvIG1hbmFnZSBjdXN0b20gY29udGVudCB0eXBlcy48L3A+Cgk8aDM+SG93IHRvIHVzZSBpdDwvaDM+Cgk8cD5Gb3IgdGhlIGdlbmVyYWwgaGVscCwgeW91IGNhbiBmaW5kIGl0IHVuZGVyIHRoZSBnZW5lcmF0ZWQgbW9kdWxlIGhlbHAuPC9wPgoJPHA+V2l0aCB0aGUgc3BlY2lmaWMgbW9kdWxlIGxvZ2ljLCB5b3UgY2FuIG5vdyBhZGQgb3Igb3ZlcnJpZGUgc29tZSBtZXRob2RzIGZyb20gdGhlIG9iamVjdCBjbGFzcyBpdHNlbGYuIEZvciBleGFtcGxlLCB5b3UgY291bGQgb3ZlcmlkZSB0aGUgbWV0aG9kICJnZXRUaXRsZSIgdG8gZG8gc29tZXRoaW5nIGVsc2UuPC9wPgoJPHA+U3BlY2lmaWMgbWV0aG9kcyB0aGF0IHlvdSBjb3VsZCBjb25zaWRlciBvdmVycmlkaW5nOjwvcD4KCTx1bD4KCQk8bGk+PHN0cm9uZz5nZXRDb3JlU2x1ZygpPC9zdHJvbmc+IFRoaXMgZ2VuZXJhdGUgdGhlIHVybCBzbHVnIG9mIHRoZSBtb2R1bGUuIEJ5IGRlZmF1bHQgaXQgdGFrZSBpdCBmcm9tIHRpdGxlLjwvbGk+Cgk8L3U+Cgk8cD5Tb21lIHRpcHM8L3A+Cgk8cD5Gb3IgYWxsIGZpZWxkcywgeW91IGNhbiBkZWZpbmUgb3B0aW9ucy4gV3JpdGUgdGhlbSBpbiBhICJjc3MiIHdheS48L3A+Cgk8dWw+CgkJPGxpPjxzdHJvbmc+dGlwczwvc3Ryb25nPiBBZGQgYSB0aXAgaW4gdGhlIGVuZCBvZiB0aGUgZmllbGQuPC9saT4KCTwvdWw+Cgk8aDQ+Q2hlY2tib3g8L2g0PgoJPHVsPgoJICAgIDxsaT48c3Ryb25nPnRleHQ8L3N0cm9uZz4gQ2hlY2tib3ggdGV4dDwvbGk+CgkgICAgPGxpPjxzdHJvbmc+Y2hlY2tlZDwvc3Ryb25nPiBDaGVjayB0aGUgY2hlY2tib3ggYnkgZGVmYXVsdDwvbGk+Cgk8L3VsPgoKCTxoND5TZWxlY3QgKERyb3Bkb3duKTwvaDQ+Cgk8dWw+CgkJPGxpPjxzdHJvbmc+dmFsdWVzPC9zdHJvbmc+IEEgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBkcm9wZG93bi4gWW91IGNhbiB1c2Uga2V5PT52YWx1ZSAoZXg6IHZhbHVlczpvcHRpb24xID0+IE9wdGlvbiAxLCBvcHRpb24yID0+IE9wdGlvbiAyKS4gVG8gcmV0cmlldmUgdGhlIHZhbHVlLCB1c2UgZ2V0TXlGaWVsZE5hbWVWYWx1ZSgpPC9saT4KCQk8bGk+PHN0cm9uZz5kZWZhdWx0X3ZhbHVlPC9zdHJvbmc+IFRoZSBkZWZhdWx0IHNlbGVjdGVkIHZhbHVlPC9saT4KCQk8bGk+PHN0cm9uZz5tdWx0aXBsZTwvc3Ryb25nPiBBbGxvd3MgeW91IHRvIHNlbGVjdCBtdWx0aXBsZSB2YWx1ZXMuPC9saT4KCQk8bGk+PHN0cm9uZz5leHBhbmRlZDwvc3Ryb25nPiBTaG93cyBSYWRpbyBidXR0b25zIG9yIGNoZWNrYm94ZXMgaW5zdGVhZCBvZiBzZWxlY3QgYm94LjwvbGk+Cgk8L3VsPgoJPGg0Pk1vZHVsZTwvaDQ+Cgk8cD5Gb3IgdGhlIGZpZWxkIHR5cGUgIm1vZHVsZSIsIHRoZSBvcHRpb24gc2hvdWxkIGJlIGZpbGVkIHdpdGggdGhlIGV4YWN0IG1vZHVsZSBuYW1lLiBleDogbW9kdWxlX25hbWU6TXlNb2R1bGUuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IGl0IHRvIGJlIGEgbXVsdGlwbGUgZmlsZSBtdWx0aXBsZTp0cnVlIGFuZCB5b3UgY2FuIHJlcGxhY2UgZHJvcGRvd24gYnkgYSByYWRpbyBvciBjaGVja2JveCBsaXN0IHVzaW5nIHRoZSBwYXJhbSBleHBhbmRlZC4gRXg6ICJtb2R1bGVfbmFtZTpNeU1vZHVsZTttdWx0aXBsZTp0cnVlO2V4cGFuZGVkOnRydWUiPC9wPgoJPHVsPgoJCTxsaT48c3Ryb25nPm1vZHVsZV9uYW1lPC9zdHJvbmc+IFRoZSBtb2R1bGUgbmFtZTwvbGk+CgkJPGxpPjxzdHJvbmc+c2VsZWN0b3I8L3N0cm9uZz4gVGhlIGZ1bmN0aW9uIHRvIHNlbGVjdCBpdGVtcyAodGFrZSBNQ0ZDcml0ZXJpYSBmb3IgcGFyYW0pPC9saT4KCQk8bGk+PHN0cm9uZz5tdWx0aXBsZTwvc3Ryb25nPiBBbGxvdyBtdWx0aXBsZSBzZWxlY3Rpb24gPzwvbGk+CgkJPGxpPjxzdHJvbmc+ZXhwYW5kZWQ8L3N0cm9uZz4gU2hvdyBjaGVja2JveC9yYWRpbyBidXR0b24gaW5zdGVhZCBvZiBzZWxlY3RvciA/PC9saT4KCTwvdWw+Cgk8aDQ+RGF0ZTwvaDQ+Cgk8cD5Gb3IgdGhlIGZpZWxkIHR5cGUgImRhdGUiLCB5b3UgY2FuIHNwZWNpZnkgdGhlIHN0YXJ0IHllYXIgYW5kIG51bWJlciBvZiB5ZWFycy4gRXhhbXBsZSA6ICJzdGFydF95ZWFyOjE5NTA7bnVtYmVyX3llYXJzOjcwIjwvcD4KCTxoND5UaW1lPC9oND4KCTx1bD4KCQk8bGk+PHN0cm9uZz5taWRuaWdodDwvc3Ryb25nPiBTZXQgdGhlIHRpbWUgdG8gMDowOjAgYnkgZGVmYXVsdDwvbGk+Cgk8L3VsPgoJPGg0PlBhZ2U8L2g0PgoJPHA+Rm9yIHRoZSBwYWdlcywgeW91IGNhbiB1c2UgdGhlIHNhbWUgaW5mb3JtYXRpb24gYXMgZm9yIGRyb3Bkb3duIGV4Y2VwdCB0aGUgInZhbHVlcyIuIFlvdSBjYW4gYWxzbyB1c2UgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOjwvcD4KCTx1bD4KCQk8bGk+PHN0cm9uZz5jaGlsZHJlbm9mPC9zdHJvbmc+IFNob3cgb25seSB0aGUgY2hpbGRyZW5cJ3Mgb2YgYSBzcGVjaWZpZWQgcGFnZS48L2xpPgoJCTxsaT48c3Ryb25nPnN0YXJ0X3BhZ2U8L3N0cm9uZz4gU2hvdyBvbmx5IHRoZSBkZXNjZW5kYW50cyBvZiBhIHNwZWNpZmllZCBwYWdlLjwvbGk+Cgk8L3VsPgoJPGg0PkRvY3VtZW50czwvaDQ+Cgk8cD5Zb3UgY2FuIHByb3RlY3QgZG9jdW1lbnRzIGRvaW5nICJpbmRpcmVjdCIgZG93bmxvYWRzIHdoaWNoIHdpbGwgYWxsb3cgeW91IHRvIHNldCB1c2VyIHBlcm1pc3Npb25zIG9uIGl0IGZvciBleGFtcGxlLjwvcD4KCTx1bD4KCQk8bGk+PHN0cm9uZz5wcm90ZWN0ZWQ8L3N0cm9uZz4gU3BlY2lmeSB0aGUgYWJzb2x1dGUgcGF0aCB3aGVyZSBkb2N1bWVudHMgaGF2ZSB0byBiZSBzYWZlbHkgc3RvcmVkLiBUaGlzIGZvbGRlciBuZWVkcyB3cml0ZSBhY2Nlc3MuPC9saT4KCTwvdWw+Cgk8aDQ+RXZlbnRzPC9oND4KCTxwPllvdSBjYW4gY3JlYXRlIGV2ZW50cyBoYW5kbGVyIGZvciB0aGUgbW9kdWxlcy4gRXZlbnRzIGFyZSBhY3RpdmF0ZWQgYnkgb3RoZXIgbW9kdWxlcyBhbmQgaW4gdGhlIEV2ZW50cyBtb2R1bGUsIHlvdSBjYW4gYXR0YWNoIHRob3NlIGV2ZW50cyB0byB5b3VyIG1vZHVsZSBzbyB5b3VyIG1vZHVsZSBpcyBhY3RpdmF0ZWQgd2hlbiB0aG9zZSBldmVudHMgaGFwcGVuLiBUbyBjcmVhdGUgYW4gZXZlbnQgaGFuZGxlciwgeW91IG11c3QgZmlyc3QgY3JlYXRlIGl0IGluIHlvdXIgbW9kdWxlIGJ5IHNwZWNpZnlpbmcgdGhlIE1vZHVsZSBuYW1lIGFuZCBldmVudCBuYW1lIG9mIHRoaXMgbW9kdWxlLCBhbmQgdGhlbiB5b3UgY2FuIHdyaXRlIGEgcGllY2Ugb2YgY29kZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgZWFjaCB0aW1lIHRoaXMgZXZlbnQgaGFwcGVuLiBUaGVuLCBhZnRlciBwdWJsaXNoaW5nIHlvdXIgbW9kdWxlLCB5b3UgY2FuIGxpbmsgdGhpcyBldmVudCBoYW5kbGVyIHRvIHRoZSBtb2R1bGUgZXZlbnQgaW4gdGhlIG1vZHVsZSAiRXZlbnRzIi48L3A+Cgk8aDM+U3VwcG9ydDwvaDM+Cgk8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoJPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+Cgk8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDgtMjAxMCwgSmVhbi1DaHJpc3RvcGhlIEN1dmVsaWVyIDxhIGhyZWY9Im1haWx0bzpjeWJlcnRvdG9waGVAZ21haWwuY29tIj4mbHQ7Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbSZndDs8L2E+IC0gTW9ycmlzICZhbXA7IENoYXBtYW4gQmVsZ2l1bTwvcD4KCTxwPkNvbnRyaWJ1dG9yczogR2VycnkgVmFuZGVybWFlc2VuPC9wPgoJPHA+VGhpcyBtb2R1bGUgd291bGRcJ250IGV4aXN0IHdpdGhvdXQgdGhlIHN0cm9uZyBzdXBwb3J0IG9mIDxhIGhyZWY9Imh0dHA6Ly93d3cubW9ycmlzLWNoYXBtYW4uY29tLyI+TW9ycmlzICZhbXA7IENoYXBtYW4gQmVsZ2l1bTwvYT4gY29tcGFueSBhbmQgdGVhbSB3aG8gaGF2ZSBzdHJvbmdseSBzdXBwb3J0ZWQgd2l0aCB0aGUgY29uc3RydWN0aW9uIGFuZCBldm9sdXRpb24gb2YgaXQuPC9wPgoJPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGlzIG1vZHVsZS48L3A+CicsCgogICAgJ2NoYW5nZWxvZycgPT4gJwoJPGRsPgoJCTxkdD5WZXJzaW9uIDAuMC4xIC0gMjkgU2VwdGVtYmVyIDIwMDguPC9kdD4KCQk8ZGQ+SW5pdGlhbCBSZWxlYXNlLjwvZGQ+CgkJPGR0PlZlcnNpb24gMS4wIC0gMjEgT2N0b2JlciAyMDA5LjwvZHQ+CgkJPGRkPkZpcnN0IHN0YWJsZSByZWxlYXNlLjwvZGQ+CgkJPGR0PlZlcnNpb24gMS4wLjEgLSAyMiBPY3RvYmVyIDIwMDkuPC9kdD4KCQk8ZGQ+CgkJCTx1bD4KCQkJCTxsaT5DbGVhbi11cCBvZiB0aGUgY29kZS48L2xpPgoJCQkJPGxpPk1vZGVscyBvZiBhbHJlYWR5IGluc3RhbGxlZCBtb2R1bGVzIGFyZSBhdXRvLXVwZGF0ZWQgd2hlbiBhZGRpbmcgbmV3IGNvbHVtbnMuPC9saT4KCQkJPC91bD4KCQk8L2RkPgoJPC9kbD4KJyk7Cgo=]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.MCFCalendar.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIE1DRkNhbGVuZGFyCnsKICAgdmFyICRzdGFydF9kYXRlOwogICB2YXIgJGVuZF9kYXRlOwogICB2YXIgJGZpcnN0X2RheTsKICAgdmFyICRsYXN0X2RheTsKICAgdmFyICRjYWxlbmRhcl90YWJsZSA9IGFycmF5KCk7CiAgIHZhciAkZXZlbnRzID0gYXJyYXkoKTsKICAgCiAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdGltZXN0YW1wID0gbnVsbCkKICAgewogICAgIGlmKGlzX251bGwoJHRpbWVzdGFtcCkpICR0aW1lc3RhbXAgPSB0aW1lKCk7CiAgICAgICR0aGlzLT5zdGFydF9kYXRlID0gc2VsZjo6Z2V0Rmlyc3REYXlUYWJsZSgkdGltZXN0YW1wKTsKICAgICAgJHRoaXMtPmVuZF9kYXRlID0gc2VsZjo6Z2V0TGFzdERheVRhYmxlKCR0aW1lc3RhbXApOyAgIAogICAgICAkdGhpcy0+Zmlyc3RfZGF5ID0gbWt0aW1lKDAsMCwwLGRhdGUoJ24nLCAkdGltZXN0YW1wKSwgMSwgZGF0ZSgneScsICR0aW1lc3RhbXApKTsKICAgICAgJHRoaXMtPmxhc3RfZGF5ID0gbWt0aW1lKDAsMCwwLGRhdGUoJ24nLCAkdGltZXN0YW1wKSwgZGF0ZSgndCcsICR0aW1lc3RhbXApLCBkYXRlKCd5JywgJHRpbWVzdGFtcCkpOwogICB9CiAgIAogICBwdWJsaWMgZnVuY3Rpb24gcHJvY2Vzc0V2ZW50cygkZXZlbnRzID0gYXJyYXkoKSkKICAgewogICAgICBmb3JlYWNoICgkZXZlbnRzIGFzICRldmVudCkKICAgICAgewogICAgICAgICAkc3RhcnQgPSBzdHJ0b3RpbWUoJGV2ZW50LT5nZXRzdGFydGRhdGUoKSk7CiAgICAgICAgICRlbmQgPSBzdHJ0b3RpbWUoJGV2ZW50LT5nZXRlbmRkYXRlKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKCRzdGFydCA8PSAkZW5kKQogICAgICAgICB7CiAgICAgICAgICB3aGlsZSgkc3RhcnQgPD0gJGVuZCkKICAgICAgICAgIHsKICAgICAgICAgICAgICR0aGlzLT5ldmVudHNbJHN0YXJ0XVtdID0gJGV2ZW50OwogICAgICAgICAgICAgJHN0YXJ0ID0gc3RydG90aW1lKCcgKyAxIERBWScsICRzdGFydCk7IC8vIDM2MDAqMjQ7CiAgICAgICAgICB9ICAKICAgICAgICAgfSAgICAgICAgIAogICAgICB9CiAgIH0KICAgCiAgIHB1YmxpYyBmdW5jdGlvbiBwcm9jZXNzQ2FsZW5kYXIoKQogICB7CiAgICAgICRkYXRlID0gJHRoaXMtPnN0YXJ0X2RhdGU7CiAgICAgICR3ZWVrX25iciA9IDA7CiAgICAgICR0b2RheSA9IGdldGRhdGUoKTsKICAgICAgJHRoaXMtPmNhbGVuZGFyX3RhYmxlID0gYXJyYXkoKTsgLy8gUmVzZXQgdGhlIHRhYmxlCiAgICAgIAogICAgICB3aGlsZSAoJGRhdGUgPD0gJHRoaXMtPmVuZF9kYXRlKQogICAgICB7ICAgCiAgICAgICAgICR0aGlzLT5jYWxlbmRhcl90YWJsZVskd2Vla19uYnJdW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUnID0+ICRkYXRlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ215c3FsX2RhdGUnID0+IGRhdGUoJ1kvbS9kJywgJGRhdGUpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RleHQnID0+IGRhdGUoJ2wgZC9NL1knLCRkYXRlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V2ZW50cycgPT4gKGlzc2V0KCR0aGlzLT5ldmVudHNbJGRhdGVdKSk/JHRoaXMtPmV2ZW50c1skZGF0ZV06YXJyYXkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnJlbnQnID0+ICgoJGRhdGUgPj0gJHRoaXMtPmZpcnN0X2RheSkgJiYgKCRkYXRlIDw9ICR0aGlzLT5sYXN0X2RheSkpLAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkndG9kYXknID0+ICgkZGF0ZSA9PSBta3RpbWUoMCwgMCwgMCwgJHRvZGF5Wydtb24nXSwgJHRvZGF5WydtZGF5J10sICR0b2RheVsneWVhciddKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgCiAgICAgICAgIGlmIChkYXRlKCdOJywgJGRhdGUpID09IDcpCiAgICAgICAgIHsKICAgICAgICAgICAgJHdlZWtfbmJyKys7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgICRkYXRlID0gc3RydG90aW1lKCcgKyAxIERBWScsICRkYXRlKTsgLy8gMzYwMCoyNDsKICAgICAgfQogICB9CiAgIAogICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcEZyb21Nb250aFllYXIoJG1vbnRoLCAkeWVhcikKICAgewogICAgICByZXR1cm4gbWt0aW1lKDAsMCwwLCRtb250aCwgMSwgJHllYXIpOwogICB9CiAgIAogICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE5leHRNb250aFRpbWVzdGFtcCgkdGltZXN0YW1wKQogICB7ICAgICAgCiAgICAgICAgIHJldHVybiBzdHJ0b3RpbWUoJysgMSBNT05USCcsICR0aW1lc3RhbXApOwogICB9CiAgIAogICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFByZXZpb3VzTW9udGhUaW1lc3RhbXAoJHRpbWVzdGFtcCkKICAgeyAgCiAgICAgICAgIHJldHVybiBzdHJ0b3RpbWUoJy0gMSBNT05USCcsICR0aW1lc3RhbXApOwogICB9CiAgIAogICAvKioKICAgKiAgQnVpbGQgYSBtb250aCB0YWJsZSBmb3IgdGhlIGN1cnJlbnQgZGF0ZSBtb250aAogICAqLwogICAKICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaXJzdERheVRhYmxlKCR0aW1lc3RhbXApCiAgIHsKICAgICAgICAgJGZpcnN0X2RheSA9IG1rdGltZSgwLDAsMCxkYXRlKCduJywgJHRpbWVzdGFtcCksIDEsIGRhdGUoJ3knLCAkdGltZXN0YW1wKSk7CiAgICAgIAogICAgICBpZiAoZGF0ZSgnTicsICRmaXJzdF9kYXkpID4gMSkKICAgICAgewogICAgICAgICByZXR1cm4gJGZpcnN0X2RheSAtICgzNjAwKjI0KihkYXRlKCdOJywkZmlyc3RfZGF5KS0xKSk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgIHJldHVybiAkZmlyc3RfZGF5OwogICAgICB9CiAgIH0KICAgCiAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TGFzdERheVRhYmxlKCR0aW1lc3RhbXApCiAgIHsKICAgICAgJGxhc3RfZGF5ID0gbWt0aW1lKDAsMCwwLGRhdGUoJ24nLCAkdGltZXN0YW1wKSwgZGF0ZSgndCcsICR0aW1lc3RhbXApLCBkYXRlKCd5JywgJHRpbWVzdGFtcCkpOwogICAgICAKICAgICAgaWYgKGRhdGUoJ04nLCAkbGFzdF9kYXkpIDwgNykKICAgICAgewogICAgICAgICByZXR1cm4gJGxhc3RfZGF5ICsgKDM2MDAqMjQqKDctZGF0ZSgnTicsJGxhc3RfZGF5KSkpOwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICByZXR1cm4gJGxhc3RfZGF5OwogICAgICB9CiAgIH0KICAgCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja0NvbXBhdGliaWxpdHkoJGNsYXNzKQogIHsKCSRvYmplY3QgPSBuZXcgJGNsYXNzOwoJaWYgKG1ldGhvZF9leGlzdHMoJG9iamVjdCwgJ2dldFN0YXJ0RGF0ZScpICYmIG1ldGhvZF9leGlzdHMoJG9iamVjdCwgJ2dldEVuZERhdGUnKSkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCXJldHVybiBmYWxzZTsKICB9ICAKCiAgLypwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNoZWNraUNhbENvbXBhdGliaWxpdHkoJGNsYXNzKQogIHsKCSRvYmplY3QgPSBuZXcgJGNsYXNzOwoJaWYgKG1ldGhvZF9leGlzdHMoJG9iamVjdCwgJ2dldFN1bW1hcnknKSAmJiBtZXRob2RfZXhpc3RzKCRvYmplY3QsICdnZXREZXNjcmlwdGlvbicpKQoJewoJCXJldHVybiB0cnVlOwoJfQoJcmV0dXJuIGZhbHNlOwogIH0qLwoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRpQ2FsTGlicmFyaWVzKCkKICB7CgogICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgJGNsYXNzID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10gLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ21vZHVsZXMnIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdNQ0ZhY3RvcnknICAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnbGliJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAndmVuZG9yJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnYmVubnUnICAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnbGliJyAgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2Jlbm51LmluYy5waHAnOwogICAgLy8gcmVxdWlyZV9vbmNlIGRpcm5hbWUoX19GSUxFX18pIC4gJy8uLi9iZW5udS9saWIvYmVubnUuaW5jLnBocCc7CiAgICByZXF1aXJlX29uY2UoJGNsYXNzKTsKICB9Cgp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFCriteria.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIE1DRkNyaXRlcmlhIHsKCgl2YXIgJG9yZGVyX2J5ID0gYXJyYXkoKTsKCXZhciAkY29uZGl0aW9ucyA9IGFycmF5KCk7Cgl2YXIgJGNvbmRpdGlvbnNfb3IgPSBhcnJheSgpOwoJdmFyICRmaWx0ZXJzID0gYXJyYXkoKTsKCXZhciAkZ3JvdXBfYnkgPSBhcnJheSgpOwoJdmFyICRzZWxlY3RlZF9jb2x1bW5zID0gYXJyYXkoKTsKCQoJdmFyICRsaW1pdDsKCXZhciAkb2Zmc2V0OwoJCgl2YXIgJHZhbHVlcyA9IGFycmF5KCk7CgkKCS8vIENPTlNUCgkKICAvKiogQ29tcGFyaXNvbiB0eXBlLiAqLwogIGNvbnN0IEVRVUFMID0gIj0iOwogIGNvbnN0IE5PVF9FUVVBTCA9ICI8PiI7CiAgY29uc3QgQUxUX05PVF9FUVVBTCA9ICIhPSI7CiAgY29uc3QgR1JFQVRFUl9USEFOID0gIj4iOwogIGNvbnN0IExFU1NfVEhBTiA9ICI8IjsKICBjb25zdCBHUkVBVEVSX0VRVUFMID0gIj49IjsKICBjb25zdCBMRVNTX0VRVUFMID0gIjw9IjsKICBjb25zdCBMSUtFID0gIiBMSUtFICI7CiAgY29uc3QgTVVMVElMSUtFID0gIiBNVUxUSUxJS0UgIjsKICBjb25zdCBNVUxUSU5PVExJS0UgPSAiIE1VTFRJTk9UTElLRSAiOwogIGNvbnN0IE5PVF9MSUtFID0gIiBOT1QgTElLRSAiOwogIGNvbnN0IFVQQ09NSU5HID0gIiBVUENPTUlORyAiOwogIGNvbnN0IERBVEVfVVBDT01JTkcgPSAiIERBVEVfVVBDT01JTkcgIjsKICBjb25zdCBQQVNUID0gIiBQQVNUICI7CiAgY29uc3QgUEFTVF9PUl9OT1cgPSAiIFBBU1RfT1JfTk9XICI7CiAgY29uc3QgREFURV9QQVNUX09SX05PVyA9ICIgREFURV9QQVNUX09SX05PVyAiOwoKICAvKiogUG9zdGdyZVNRTCBjb21wYXJpc29uIHR5cGUgKi8KICBjb25zdCBJTElLRSA9ICIgSUxJS0UgIjsKCiAgLyoqIFBvc3RncmVTUUwgY29tcGFyaXNvbiB0eXBlICovCiAgY29uc3QgTk9UX0lMSUtFID0gIiBOT1QgSUxJS0UgIjsKCiAgLyoqIENvbXBhcmlzb24gdHlwZS4gKi8KICBjb25zdCBDVVNUT00gPSAiQ1VTVE9NIjsKCiAgLyoqIENvbXBhcmlzb24gdHlwZS4gKi8KICBjb25zdCBESVNUSU5DVCA9ICJESVNUSU5DVCAiOwoKICAvKiogQ29tcGFyaXNvbiB0eXBlLiAqLwogIGNvbnN0IElOID0gIiBJTiAiOwoKICAvKiogQ29tcGFyaXNvbiB0eXBlLiAqLwogIGNvbnN0IE5PVF9JTiA9ICIgTk9UIElOICI7CgogIC8qKiBDb21wYXJpc29uIHR5cGUuICovCiAgY29uc3QgQUxMID0gIkFMTCAiOwoKICAvKiogQ29tcGFyaXNvbiB0eXBlLiAqLwogIGNvbnN0IEpPSU4gPSAiSk9JTiI7CgogIC8qKiBCaW5hcnkgbWF0aCBvcGVyYXRvcjogQU5EICovCiAgY29uc3QgQklOQVJZX0FORCA9ICImIjsKCiAgLyoqIEJpbmFyeSBtYXRoIG9wZXJhdG9yOiBPUiAqLwogIGNvbnN0IEJJTkFSWV9PUiA9ICJ8IjsKCiAgLyoqICJPcmRlciBieSIgcXVhbGlmaWVyIC0gYXNjZW5kaW5nICovCiAgY29uc3QgQVNDID0gIkFTQyI7CgogIC8qKiAiT3JkZXIgYnkiIHF1YWxpZmllciAtIGRlc2NlbmRpbmcgKi8KICBjb25zdCBERVNDID0gIkRFU0MiOwoKICAvKiogIklTIE5VTEwiIG51bGwgY29tcGFyaXNvbiAqLwogIGNvbnN0IElTTlVMTCA9ICIgSVMgTlVMTCAiOwoKICAvKiogIklTIE5PVCBOVUxMIiBudWxsIGNvbXBhcmlzb24gKi8KICBjb25zdCBJU05PVE5VTEwgPSAiIElTIE5PVCBOVUxMICI7CgogIGNvbnN0IElTTk9URU1QVFkgPSAnIElTIE5PVCBFTVBUWSAnOwogIGNvbnN0IElTRU1QVFkgPSAnIElTIEVNUFRZICc7CgogIC8qKiAiQ1VSUkVOVF9EQVRFIiBBTlNJIFNRTCBmdW5jdGlvbiAqLwogIGNvbnN0IENVUlJFTlRfREFURSA9ICJDVVJSRU5UX0RBVEUiOwoKICAvKiogIkNVUlJFTlRfVElNRSIgQU5TSSBTUUwgZnVuY3Rpb24gKi8KICBjb25zdCBDVVJSRU5UX1RJTUUgPSAiQ1VSUkVOVF9USU1FIjsKCiAgLyoqICJDVVJSRU5UX1RJTUVTVEFNUCIgQU5TSSBTUUwgZnVuY3Rpb24gKi8KICBjb25zdCBDVVJSRU5UX1RJTUVTVEFNUCA9ICJDVVJSRU5UX1RJTUVTVEFNUCI7CgogIC8qKiAiTEVGVCBKT0lOIiBTUUwgc3RhdGVtZW50ICovCiAgY29uc3QgTEVGVF9KT0lOID0gIkxFRlQgSk9JTiI7CgogIC8qKiAiUklHSFQgSk9JTiIgU1FMIHN0YXRlbWVudCAqLwogIGNvbnN0IFJJR0hUX0pPSU4gPSAiUklHSFQgSk9JTiI7CgogIC8qKiAiSU5ORVIgSk9JTiIgU1FMIHN0YXRlbWVudCAqLwogIGNvbnN0IElOTkVSX0pPSU4gPSAiSU5ORVIgSk9JTiI7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCXsKCSAgcmV0dXJuICR0aGlzOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBhZGRBc2NlbmRpbmdPcmRlckJ5Q29sdW1uKCRjb2x1bW4pCgl7CgkJJHRoaXMtPm9yZGVyX2J5W10gPSBhcnJheSAoJ2NvbHVtbicgPT4gJGNvbHVtbiwgJ29yZGVyJyA9PiBzZWxmOjpBU0MpOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gYWRkRGVzY2VuZGluZ09yZGVyQnlDb2x1bW4oJGNvbHVtbikKCXsKCQkkdGhpcy0+b3JkZXJfYnlbXSA9IGFycmF5ICgnY29sdW1uJyA9PiAkY29sdW1uLCAnb3JkZXInID0+IHNlbGY6OkRFU0MpOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gYWRkU2VsZWN0Q29sdW1uKCRjb2x1bW5fbmFtZSkKCXsKCQkkdGhpcy0+c2VsZWN0ZWRfY29sdW1uc1tdID0gJGNvbHVtbl9uYW1lOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gYWRkR3JvdXBCeUNvbHVtbigkY29sdW1uX25hbWUpCgl7CgkJJHRoaXMtPmdyb3VwX2J5W10gPSAkY29sdW1uX25hbWU7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBhZGQoJGNvbHVtbiwgJHZhbHVlLCAkY29uZGl0aW9uID0gc2VsZjo6RVFVQUwsICRleHRyYV9xdWVyeSA9ICcnKQoJewoJCWlmICgkY29uZGl0aW9uID09IHNlbGY6OklOKSB7CgkJCWlmIChlbXB0eSgkdmFsdWUpKSB7CgkJCQkkY29sdW1uID0gMTsKCQkJCSR2YWx1ZSA9IC0xOwoJCQkJJGNvbmRpdGlvbiA9IHNlbGY6OkVRVUFMOwoJCQl9CgkJfQoJCSR0aGlzLT5jb25kaXRpb25zW10gPSBhcnJheSAoJ2NvbHVtbicgPT4gJGNvbHVtbiwgJ3ZhbHVlJyA9PiAkdmFsdWUsICdjb25kaXRpb24nID0+ICRjb25kaXRpb24sICdleHRyYV9xdWVyeScgPT4gJGV4dHJhX3F1ZXJ5KTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGFkZE9yKCRjb2x1bW4sICR2YWx1ZSwgJGNvbmRpdGlvbiA9IHNlbGY6OkVRVUFMLCAkZXh0cmFfcXVlcnkgPSAnJykKCXsKCSAgaWYgKCRjb25kaXRpb24gPT0gc2VsZjo6SU4pIHsKCQkJaWYgKGVtcHR5KCR2YWx1ZSkpIHsKCQkJCSRjb2x1bW4gPSAxOwoJCQkJJHZhbHVlID0gLTE7CgkJCQkkY29uZGl0aW9uID0gc2VsZjo6RVFVQUw7CgkJCX0KCQl9CgkJJHRoaXMtPmNvbmRpdGlvbnNfb3JbXSA9IGFycmF5ICgnY29sdW1uJyA9PiAkY29sdW1uLCAndmFsdWUnID0+ICR2YWx1ZSwgJ2NvbmRpdGlvbicgPT4gJGNvbmRpdGlvbiwgJ2V4dHJhX3F1ZXJ5JyA9PiAkZXh0cmFfcXVlcnkpOwoJfQoJCgkKCXB1YmxpYyBmdW5jdGlvbiBzZXRMaW1pdCgkbGltaXQpCgl7CgkJJHRoaXMtPmxpbWl0ID0gJGxpbWl0OwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gc2V0T2Zmc2V0KCRvZmZzZXQpIHsKCQkkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKCX0KCQoJLy8gUkVRVUVTVCBCVUlMRElORwogIAogIHB1YmxpYyBmdW5jdGlvbiBidWlsZENvbmRpdGlvbigkY29uZGl0aW9uKQogIHsKICAgIHN3aXRjaCAoJGNvbmRpdGlvblsnY29uZGl0aW9uJ10pIHsKICAgICAgY2FzZSAnIElOICc6CiAgICAgICAgJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKICAgICAgICBmb3JlYWNoICgkY29uZGl0aW9uWyd2YWx1ZSddIGFzICYkdmFsdWUpIHsKICAgICAgICAgIC8vICR2YWx1ZSA9ICInIiAuIG15c3FsaV9yZWFsX2VzY2FwZV9zdHJpbmcoJHZhbHVlKSAuICInIjsKICAgICAgICAgICR2YWx1ZSA9ICRkYi0+cXN0cigkdmFsdWUpOwogICAgICAgIH0KICAgICAgICB1bnNldCgkdmFsdWUpOwogICAgICAgICRxdWVyeSA9ICRjb25kaXRpb25bJ2NvbHVtbiddIC4gJyBJTiAoJyAuIGltcGxvZGUoJywnLCAkY29uZGl0aW9uWyd2YWx1ZSddKSAuICcpJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIE1VTFRJTElLRSAnOgogICAgICAgICR2YWx1ZXMgPSBleHBsb2RlKCcsJywkY29uZGl0aW9uWyd2YWx1ZSddKTsKICAgICAgICAkcXVlcmllcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCgkdmFsdWVzIGFzICR2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAkcXVlcmllc1tdID0gJHRoaXMtPmJ1aWxkTXVsdGlMaWtlKCRjb25kaXRpb25bJ2NvbHVtbiddLCAkdmFsdWUpOwogICAgICAgIH0gICAgICAgIAogICAgICAgICRxdWVyeSA9ICcoJyAuIGltcGxvZGUoJyBPUiAnLCAkcXVlcmllcykgLiAnKSc7CgogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcgTVVMVElOT1RMSUtFICc6CiAgICAgICAgJHZhbHVlcyA9IGV4cGxvZGUoJywnLCRjb25kaXRpb25bJ3ZhbHVlJ10pOwogICAgICAgICRxdWVyaWVzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCR2YWx1ZXMgYXMgJHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICRxdWVyaWVzW10gPSAkdGhpcy0+YnVpbGRNdWx0aUxpa2UoJGNvbmRpdGlvblsnY29sdW1uJ10sICR2YWx1ZSwgJyBBTkQgJywgJ05PVCcpOwogICAgICAgIH0gICAgICAgIAogICAgICAgICRxdWVyeSA9ICcoJyAuIGltcGxvZGUoJyBBTkQgJywgJHF1ZXJpZXMpIC4gJyknOwoKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIElTIEVNUFRZICc6CiAgICAgICAgJHF1ZXJ5ID0gICcoJyAuICRjb25kaXRpb25bJ2NvbHVtbiddIC4gJyBJUyBOVUxMIE9SICcgLiAkY29uZGl0aW9uWydjb2x1bW4nXSAuICcgPSA/ICknOwogICAgICAgICR0aGlzLT52YWx1ZXNbXSA9ICcnOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcgSVMgTk9UIEVNUFRZICc6CiAgICAgICAgJHF1ZXJ5ID0gICcoJyAuICRjb25kaXRpb25bJ2NvbHVtbiddIC4gJyBJUyBOT1QgTlVMTCBBTkQgJyAuICRjb25kaXRpb25bJ2NvbHVtbiddIC4gJyAhPSA/ICknIDsKICAgICAgICAkdGhpcy0+dmFsdWVzW10gPSAnJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIElTIE5VTEwgJzoKICAgICAgY2FzZSAnIElTIE5PVCBOVUxMICc6CiAgICAgICAgJHF1ZXJ5ID0gJGNvbmRpdGlvblsnY29sdW1uJ10gLiAkY29uZGl0aW9uWydjb25kaXRpb24nXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIFVQQ09NSU5HICc6CiAgICAgICAgJHF1ZXJ5ID0gJGNvbmRpdGlvblsnY29sdW1uJ10gLiAnID49IE5PVygpJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIERBVEVfVVBDT01JTkcgJzoKICAgICAgICAkcXVlcnkgPSAkY29uZGl0aW9uWydjb2x1bW4nXSAuICcgPj0gREFURShOT1coKSknOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcgUEFTVCAnOgogICAgICAgICRxdWVyeSA9ICRjb25kaXRpb25bJ2NvbHVtbiddIC4gJyA8IE5PVygpJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIFBBU1RfT1JfTk9XICc6CiAgICAgICAgJHF1ZXJ5ID0gJGNvbmRpdGlvblsnY29sdW1uJ10gLiAnIDw9IE5PVygpJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnIERBVEVfUEFTVF9PUl9OT1cgJzoKICAgICAgICAkcXVlcnkgPSAkY29uZGl0aW9uWydjb2x1bW4nXSAuICcgPD0gREFURShOT1coKSknOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgICRxdWVyeSA9ICRjb25kaXRpb25bJ2NvbHVtbiddIC4gJyAnIC4gJGNvbmRpdGlvblsnY29uZGl0aW9uJ10gLiAnID8nOwogICAgICAgICR0aGlzLT52YWx1ZXNbXSA9ICRjb25kaXRpb25bJ3ZhbHVlJ107CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgaWYoaXNzZXQoJGNvbmRpdGlvblsnZXh0cmFfcXVlcnknXSkpCiAgICB7CiAgICAgICRxdWVyeSA9ICcoJyAuICRxdWVyeSAuICcgJyAuICRjb25kaXRpb25bJ2V4dHJhX3F1ZXJ5J10gLiAnKSc7CiAgICB9CgogICAgcmV0dXJuICRxdWVyeTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBidWlsZE11bHRpTGlrZSgkY29sdW1uLCAkdmFsdWUsICRhbmRvciA9ICcgT1IgJywgJG5vdCA9ICcnKQogIHsKICAgICRjb25kaXRpb25zID0gYXJyYXkoKTsKICAgICRjb25kaXRpb25zW10gPSAkY29sdW1uIC4gJyAnIC4gJG5vdCAuICcgTElLRSA/JzsKICAgICR0aGlzLT52YWx1ZXNbXSA9ICR2YWx1ZTsKICAgICRjb25kaXRpb25zW10gPSAkY29sdW1uIC4gJyAnIC4gJG5vdCAuICcgTElLRSA/JzsKICAgICR0aGlzLT52YWx1ZXNbXSA9ICR2YWx1ZSAuICd8fHwlJzsKICAgICRjb25kaXRpb25zW10gPSAkY29sdW1uIC4gJyAnIC4gJG5vdCAuICcgTElLRSA/JzsKICAgICR0aGlzLT52YWx1ZXNbXSA9ICclfHx8JyAuICR2YWx1ZTsKICAgICRjb25kaXRpb25zW10gPSAkY29sdW1uIC4gJyAnIC4gJG5vdCAuICcgTElLRSA/JzsKICAgICR0aGlzLT52YWx1ZXNbXSA9ICclfHx8JyAuICR2YWx1ZSAuICd8fHwlJzsKCiAgICByZXR1cm4gJygnLiBpbXBsb2RlKCRhbmRvciwgJGNvbmRpdGlvbnMpIC4gJyknOwogICAgCiAgICAvLyAkcXVlcnkgPSAnICgnOwogICAgLy8gJHF1ZXJ5IC49ICRjb2x1bW4gLiAoJG5vdCk/JyBOT1QgTElLRSA/JzonIExJS0UgPyc7CiAgICAvLyAkdGhpcy0+dmFsdWVzW10gPSAkdmFsdWU7CiAgICAvLyAkcXVlcnkgLj0gKCRub3QpPycgQU5EICc6JyBPUiAnOwogICAgLy8gJHF1ZXJ5IC49ICRjb2x1bW4gLiAoJG5vdCk/JyBOT1QgTElLRSA/JzonIExJS0UgPyc7CiAgICAvLyAkdGhpcy0+dmFsdWVzW10gPSAkdmFsdWUgLiAnfHx8JSc7CiAgICAvLyAkcXVlcnkgLj0gKCRub3QpPycgQU5EICc6JyBPUiAnOwogICAgLy8gJHF1ZXJ5IC49ICRjb2x1bW4gLiAoJG5vdCk/JyBOT1QgTElLRSA/JzonIExJS0UgPyc7CiAgICAvLyAkdGhpcy0+dmFsdWVzW10gPSAnJXx8fCcgLiAkdmFsdWU7CiAgICAvLyAkcXVlcnkgLj0gKCRub3QpPycgQU5EICc6JyBPUiAnOwogICAgLy8gJHF1ZXJ5IC49ICRjb2x1bW4gLiAoJG5vdCk/JyBOT1QgTElLRSA/JzonIExJS0UgPyc7CiAgICAvLyAkdGhpcy0+dmFsdWVzW10gPSAnJXx8fCcgLiAkdmFsdWUgLiAnfHx8JSc7CiAgICAvLyAkcXVlcnkgLj0gJykgJzsKICAgIC8vIAogICAgLy8gcmV0dXJuICRxdWVyeTsKICB9CgogIHB1YmxpYyAgZnVuY3Rpb24gYnVpbGRDb25kaXRpb25zKCR0YWJsZV9uYW1lID0gbnVsbCkKICB7CiAgICAvKiBGSVhNRTogUHJvY2VlZCB3aXRoIGFsbCB0aGUgcG9zc2libGUgY29uZGl0aW9ucyAqLwoKICAgICRxdWVyeSA9IG51bGw7CiAgICAvLyBXSEVSRQoKICAgIGlmIChjb3VudCgkdGhpcy0+Y29uZGl0aW9ucykgPiAwKQogICAgewogICAgICAkcXVlcnkgLj0gJyBXSEVSRSAnOwogICAgICAKICAgICAgJGNvbmRpdGlvbnMgPSBhcnJheSgpOwoKICAgICAgZm9yZWFjaCAoJHRoaXMtPmNvbmRpdGlvbnMgYXMgJGNvbmRpdGlvbikKICAgICAgewogICAgICAgICRjb25kaXRpb25zW10gPSAkdGhpcy0+YnVpbGRDb25kaXRpb24oJGNvbmRpdGlvbik7CiAgICAgIH0KICAgICAgCiAgICAgICRxdWVyeSAuPSBpbXBsb2RlKCcgQU5EICcsICRjb25kaXRpb25zKTsKICAgIH0KICAgIAogICAgLy8gT1IgQ09ORElUSU9OUwogICAgaWYgKGNvdW50KCR0aGlzLT5jb25kaXRpb25zX29yKSA+IDApCiAgICB7CiAgICAgIGlmIChjb3VudCgkdGhpcy0+Y29uZGl0aW9ucykgPiAwKQogICAgICB7CiAgICAgICAgJHF1ZXJ5IC49ICcgQU5EICc7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgJHF1ZXJ5IC49ICcgV0hFUkUgJzsKICAgICAgfSAKICAgICAgICAkY29uZGl0aW9uc19vciA9IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb25kaXRpb25zX29yIGFzICRjb25kaXRpb24pCiAgICAgICAgewogICAgICAgICAgJGNvbmRpdGlvbnNfb3JbXSA9ICR0aGlzLT5idWlsZENvbmRpdGlvbigkY29uZGl0aW9uKTsKICAgICAgICB9CgogICAgICAgICRxdWVyeSAuPSAnKCcgLiBpbXBsb2RlKCcgT1IgJywgJGNvbmRpdGlvbnNfb3IpIC4gJyknOwogICAgfQogICAgCiAgICAKICAgIC8vIEdST1VQIEJZCgogICAgaWYoY291bnQoJHRoaXMtPmdyb3VwX2J5KSA+IDApCiAgICB7CiAgICAgICRxdWVyeSAuPSAnIEdST1VQIEJZICcgLiBpbXBsb2RlICgnLCAnLCAkdGhpcy0+Z3JvdXBfYnkpOwogICAgfQogICAgCiAgICAvLyBPUkRFUiBCWQogICAgCiAgICBpZiAoY291bnQoJHRoaXMtPm9yZGVyX2J5KSA+IDApCiAgICB7CiAgICAgICRxdWVyeSAuPSAnIE9SREVSIEJZICc7CiAgICAgIAogICAgICAkb3JkZXJzID0gYXJyYXkoKTsKICAgICAgCiAgICAgIGZvcmVhY2ggKCR0aGlzLT5vcmRlcl9ieSBhcyAkb3JkZXJfYnkpCiAgICAgIHsKICAgICAgICAkb3JkZXJzW10gPSAkb3JkZXJfYnlbJ2NvbHVtbiddIC4gJyAnIC4gJG9yZGVyX2J5WydvcmRlciddOwogICAgICB9CiAgICAgIAogICAgICAkcXVlcnkgLj0gaW1wbG9kZSgnICwnLCAkb3JkZXJzKTsKICAgIH0KCgogICAgJG9mZnNldCA9ICR0aGlzLT5vZmZzZXQgPyAkdGhpcy0+b2Zmc2V0IDogMDsKICAgICRsaW1pdCA9ICR0aGlzLT5saW1pdCA/ICR0aGlzLT5saW1pdCA6IFBIUF9JTlRfTUFYOwogICAgJHF1ZXJ5IC49ICcgTElNSVQgJyAuJG9mZnNldC4nLCcuJGxpbWl0OwogICAgcmV0dXJuICRxdWVyeTsKICB9CgoJcHVibGljIGZ1bmN0aW9uIGJ1aWxkUXVlcnkoJHRhYmxlX25hbWUsICRjb2x1bW5fd2l0aF9kYiA9IGZhbHNlKQoJewoJCSRxdWVyeSA9ICdTRUxFQ1QgJzsKCQkKCQlpZiAoY291bnQoJHRoaXMtPnNlbGVjdGVkX2NvbHVtbnMpID4gMCkKCQl7CgkJCWZvcmVhY2ggKCR0aGlzLT5zZWxlY3RlZF9jb2x1bW5zIGFzICRjb2x1bW4pIAoJCQl7CgkJCQkkcXVlcnkgLj0gJGNvbHVtbiAuICcgJzsKCQkJfQoJCX0KCQllbHNlIAoJCXsKCQkgIGlmKCRjb2x1bW5fd2l0aF9kYikKCQkgIHsKCQkgICAkcXVlcnkgLj0gJyAnIC4gJHRhYmxlX25hbWUgLiAnLiogJzsgCgkJICB9CgkJICBlbHNlCgkJICB7CQkgICAKICAJCQkkcXVlcnkgLj0gJyAqICc7IAoJCSAgfQoJCX0KCQkKCQkkcXVlcnkgLj0gJ0ZST00gJyAuICR0YWJsZV9uYW1lOwoJCQkJCgkJJHF1ZXJ5IC49ICR0aGlzLT5idWlsZENvbmRpdGlvbnMoJHRhYmxlX25hbWUpOwoJCXJldHVybiAkcXVlcnk7CQkKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0VmFsdWVzKCkgewoJCXJldHVybiAkdGhpcy0+dmFsdWVzOwoJfQoKfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFExtraFeatures.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgY2xhc3MgTUNGRXh0cmFGZWF0dXJlcwogIHsKICAgIHZhciAkdmVyc2lvbiA9IDE7CiAgICAKICAgIHByb3RlY3RlZCAkZmVhdHVyZXM7CiAgICAKICAgIC8vIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIC8vICAgICB7CiAgICAvLyAgICAgICByZXR1cm4gJyc7CiAgICAvLyAgICAgfQogICAgCiAgICAvLyBTZWxlY3RvcnMKICAgIAogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlbGVjdG9yKCRuYW1lKQogICAgewogICAgICByZXR1cm4gKGlzc2V0KCR0aGlzLT5mZWF0dXJlc1snc2VsZWN0b3JzJ11bJG5hbWVdKSk/JHRoaXMtPmZlYXR1cmVzWydzZWxlY3RvcnMnXVskbmFtZV06bnVsbDsKICAgIH0KICAgIAogICAgcHVibGljIGZ1bmN0aW9uIHNldFNlbGVjdG9yKCRuYW1lLCBNQ0ZTZWxlY3RvciAkc2VsZWN0b3IpCiAgICB7CiAgICAgICR0aGlzLT5mZWF0dXJlc1snc2VsZWN0b3JzJ11bJG5hbWVdID0gJHNlbGVjdG9yOwogICAgfQogICAgCgkvLyBFdmVudHMKCglwdWJsaWMgZnVuY3Rpb24gZ2V0RXZlbnRzKCkKCXsKCQlyZXR1cm4gJHRoaXMtPmZlYXR1cmVzWydldmVudHMnXTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGdldEV2ZW50KCRtb2R1bGVfbmFtZSwgJGV2ZW50X25hbWUpCgl7CgkJcmV0dXJuIChpc3NldCgkdGhpcy0+ZmVhdHVyZXNbJ2V2ZW50cyddWyRtb2R1bGVfbmFtZV1bJGV2ZW50X25hbWVdKSk/JHRoaXMtPmZlYXR1cmVzWydldmVudHMnXVskbW9kdWxlX25hbWVdWyRldmVudF9uYW1lXTpudWxsOwoJfQogICAgCglwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlRXZlbnQoJG1vZHVsZV9uYW1lLCAkZXZlbnRfbmFtZSkKCXsKCQl1bnNldCgkdGhpcy0+ZmVhdHVyZXNbJ2V2ZW50cyddWyRtb2R1bGVfbmFtZV1bJGV2ZW50X25hbWVdKTsKCX0KICAgIAoJcHVibGljIGZ1bmN0aW9uIHNldEV2ZW50KCRtb2R1bGVfbmFtZSwgJGV2ZW50X25hbWUsICRjb2RlKQoJewoJCSR0aGlzLT5mZWF0dXJlc1snZXZlbnRzJ11bJG1vZHVsZV9uYW1lXVskZXZlbnRfbmFtZV0gPSAkY29kZTsKCX0KICB9]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFGenerator.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIE1DRkdlbmVyYXRvcgp7CgogICAgLyoqIEB2YXIgIE1DRk1vZHVsZSAkbW9kdWxlICovCiAgICBwcm90ZWN0ZWQgJG1vZHVsZTsKCiAgICBwcm90ZWN0ZWQgJGNvbmZpZyA9IGFycmF5KCk7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KE1DRk1vZHVsZSAkbW9kdWxlKQogICAgewogICAgICAgICR0aGlzLT5tb2R1bGUgPSAkbW9kdWxlOwogICAgICAgICR0aGlzLT5jb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgIH0KCgogICAgLyoqCiAgICAgKiBDcmVhdGUgdGhlIHN0cnVjdHVyZSBvZiBhIG1vZHVsZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVN0cnVjdHVyZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmNyZWF0ZUZvbGRlcigpOwogICAgICAgICR0aGlzLT5jcmVhdGVGb2xkZXIoJ2xhbmcnKTsKICAgICAgICAkdGhpcy0+Y3JlYXRlRm9sZGVyKCd0ZW1wbGF0ZXMnKTsKICAgICAgICAkdGhpcy0+Y3JlYXRlRm9sZGVyKCdpbWFnZXMnKTsKICAgICAgICAkdGhpcy0+Y3JlYXRlRm9sZGVyKCdyc3MnKTsKICAgICAgICAkdGhpcy0+Y3JlYXRlRm9sZGVyKCdsaWInKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyYXRlIGEgc3ViZm9sZGVyIGZvciB0aGUgbW9kdWxlCiAgICAgKiBAcGFyYW0gbnVsbCAkZm9sZGVyCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEB0aHJvd3MgRXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlRm9sZGVyKCRmb2xkZXIgPSBudWxsKQogICAgewogICAgICAgICRiYXNlID0gJHRoaXMtPmNvbmZpZ1sncm9vdF9wYXRoJ10gIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdtb2R1bGVzJyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCk7CiAgICAgICAgJGRpciA9ICRiYXNlIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRmb2xkZXI7CiAgICAgICAgaWYoIWlzX2RpcigkZGlyKSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKCFAbWtkaXIoJGRpciwgMDc3NywgdHJ1ZSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0Nhbm5vdCBnZW5lcmF0ZSB0aGUgZm9sZGVyIFsnIC4gJGRpciAuICddIGZvciB0aGUgbW9kdWxlICcgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnIC0gQ2hlY2sgdGhlIG1vZHVsZVwncyBkaXJlY3RvcnkgcGVybWlzc2lvbnMnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIENsZWFuIG1vZHVsZSBzdHJ1Y3R1cmUgZnJvbSBvbGQgcmVmZXJlbmNlcwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNsZWFuU3RydWN0dXJlKCkKICAgIHsKICAgICAgICBpZiAoaXNfZmlsZSgkdGhpcy0+Y29uZmlnWydyb290X3BhdGgnXSAuICcvbW9kdWxlcy8nIC4gJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpIC4gJy9jbGFzc2VzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnT2JqZWN0QmFzZS5jbGFzcy5waHAnKSkgdW5saW5rKCR0aGlzLT5jb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9tb2R1bGVzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnL2NsYXNzZXMvJyAuICR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICdPYmplY3RCYXNlLmNsYXNzLnBocCcpOwogICAgICAgIGlmIChpc19maWxlKCR0aGlzLT5jb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9tb2R1bGVzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnL2NsYXNzZXMvJyAuICR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICdPYmplY3QuY2xhc3MucGhwJykpIHVubGluaygkdGhpcy0+Y29uZmlnWydyb290X3BhdGgnXSAuICcvbW9kdWxlcy8nIC4gJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpIC4gJy9jbGFzc2VzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnT2JqZWN0LmNsYXNzLnBocCcpOwogICAgICAgIGlmIChpc19maWxlKCR0aGlzLT5jb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9tb2R1bGVzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnL2NsYXNzZXMvJyAuICR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICdWaWV3cy5jbGFzcy5waHAnKSkgdW5saW5rKCR0aGlzLT5jb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9tb2R1bGVzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnL2NsYXNzZXMvJyAuICR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICdWaWV3cy5jbGFzcy5waHAnKTsKICAgICAgICBpZiAoaXNfZGlyKCR0aGlzLT5jb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9tb2R1bGVzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnL2NsYXNzZXMnKSkgdW5saW5rKCR0aGlzLT5jb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9tb2R1bGVzLycgLiAkdGhpcy0+bW9kdWxlLT5nZXRNb2R1bGVOYW1lKCkgLiAnL2NsYXNzZXMnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVibGlzaCgpCiAgICB7CiAgICAgICAgJHRoaXMtPm1vZHVsZS0+aW5jcmVtZW50TW9kdWxlVmVyc2lvbigpOwoKICAgICAgICAkdGhpcy0+Y3JlYXRlU3RydWN0dXJlKCk7CgogICAgICAgICR0aGlzLT5jbGVhblN0cnVjdHVyZSgpOwoKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2xpYi9jbGFzcy4nIC4gJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpIC4gJ0Jhc2UucGhwJywgJ2xpYi9jbGFzcy5NQ0ZNb2R1bGVCYXNlLnBocC50cGwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2xpYi9jbGFzcy4nIC4gJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpIC4gJ09iamVjdEJhc2UucGhwJywgJ2xpYi9jbGFzcy5NQ0ZNb2R1bGVPYmplY3RCYXNlLnBocC50cGwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2xpYi9jbGFzcy4nIC4gJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpIC4gJ09iamVjdC5waHAnLCAnbGliL2NsYXNzLk1DRk1vZHVsZU9iamVjdC5waHAudHBsJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdsaWIvY2xhc3MuJyAuICR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICdWaWV3cy5waHAnLCAnbGliL2NsYXNzLk1DRk1vZHVsZVZpZXdzLnBocC50cGwnKTsKCiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdsYW5nL2VuX1VTLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2RlZmF1bHRhZG1pbi5pdGVtcy50cGwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ3RlbXBsYXRlcy9kZWZhdWx0YWRtaW4udGVtcGxhdGVzLnRwbCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2FkbWluLnRlbXBsYXRlcy50cGwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ3RlbXBsYXRlcy9hZG1pbi50ZW1wbGF0ZV9lZGl0LnRwbCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2RlZmF1bHRhZG1pbi5vcHRpb25zLnRwbCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2VkaXQudHBsJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCd0ZW1wbGF0ZXMvZWRpdHRlbXBsYXRlLnRwbCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2Vycm9yLnRwbCcpOwoKICAgICAgICAvLyBUT0RPOiBDbGVhbiB0aG9zZSBmaWxlcwovLwkJJHRoaXMtPnB1Ymxpc2hGaWxlKCd0ZW1wbGF0ZXMvdGVtcGxhdGUuZGV0YWlscy50cGwnKTsKLy8JCSR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL3RlbXBsYXRlLmxpc3QudHBsJyk7Ci8vICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCd0ZW1wbGF0ZXMvdGVtcGxhdGUucGFnaW5hdGVkLnRwbCcpOwovLyAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL3RlbXBsYXRlLnNlYXJjaC50cGwnKTsKLy8gICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ3RlbXBsYXRlcy90ZW1wbGF0ZS5jYWxlbmRhci50cGwnKTsKCiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCd0ZW1wbGF0ZXMvZnJvbnRlbmQuZGVmYXVsdC50cGwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ3RlbXBsYXRlcy9mcm9udGVuZC5kZXRhaWwudHBsJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCd0ZW1wbGF0ZXMvZnJvbnRlbmQuc2VhcmNoLnRwbCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2Zyb250ZW5kLmNhbGVuZGFyLnRwbCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2Zyb250ZW5kLnBhZ2luYXRlZC50cGwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ3RlbXBsYXRlcy9mcm9udGVuZC50YWdjbG91ZC50cGwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ3RlbXBsYXRlcy9mcm9udGVuZC5yc3MudHBsJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCd0ZW1wbGF0ZXMvZnJvbnRlbmQuZGlyZWN0X2VtYWlsLnRwbCcpOwoKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ3Jzcy9yc3MuY3NzJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdyc3Mvc3R5bGUueHNsJyk7CgogICAgICAgIGlmICgkdGhpcy0+bW9kdWxlLT5nZXRJc1VzZXJNb2R1bGUoKSkgewogICAgICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi51c2VyX2Zvcm0ucGhwJyk7CiAgICAgICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgndGVtcGxhdGVzL2Zyb250ZW5kLnVzZXJfZm9ybS50cGwnKTsKICAgICAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCd0ZW1wbGF0ZXMvZnJvbnRlbmQudXNlcl9mb3JtX3N1Y2Nlc3MudHBsJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y29weUZpbGUoJ2ltYWdlcy9pY29uLmdpZicpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLmFwaS5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5jYWxlbmRhci5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5kZWZhdWx0LnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLmRlZmF1bHRhZG1pbi5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5kZWxldGUucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24ubW92ZXVwLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLm1vdmVkb3duLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLmRldGFpbC5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5leHBvcnQucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24uZXhwb3J0X2RhdC5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5leHBvcnRfZGIucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24uaW1wb3J0X2RiLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLmVkaXQucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24udGVtcGxhdGVfZWRpdC5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi50ZW1wbGF0ZV9kZWxldGUucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24uZWRpdHRlbXBsYXRlLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLmRlbGV0ZXRlbXBsYXRlLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLmdldHVybC5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5wdWJsaXNoLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLnJzcy5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5zZWFyY2gucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24udGVtcGxhdGUucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24uY291bnQucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24udXJsX2Zvci5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5saW5rX3RvLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLmFzc2lnbnRpdGxlcy5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2luZGV4Lmh0bWwnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2Z1bmN0aW9uLmRlZmF1bHRhZG1pbi5pdGVtcy5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2Z1bmN0aW9uLmRlZmF1bHRhZG1pbi50ZW1wbGF0ZXMucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdmdW5jdGlvbi5kZWZhdWx0YWRtaW4ub3B0aW9ucy5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2Z1bmN0aW9uLmRlZmF1bHRhZG1pbi5oZWxwLnBocCcpOwogICAgICAgICR0aGlzLT5wdWJsaXNoRmlsZSgnYWN0aW9uLnVwZGF0ZU9iamVjdHMucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24udGFnY2xvdWQucGhwJyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24uaWNhbC5waHAnKTsKICAgICAgICAkdGhpcy0+cHVibGlzaEZpbGUoJ2FjdGlvbi5kb3dubG9hZC5waHAnKTsKCiAgICAgICAgLy8gQUNUSU9OUwogICAgICAgICRhY3Rpb25zID0gJHRoaXMtPm1vZHVsZS0+Z2V0QWN0aW9ucygpOwogICAgICAgIGZvcmVhY2ggKCRhY3Rpb25zIGFzICRhY3Rpb24pIHsKICAgICAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCdhY3Rpb24uJyAuICRhY3Rpb24tPm5hbWUgLiAnLnBocCcsICdhY3Rpb24ubW9kdWxlX2FjdGlvbi5waHAudHBsJywgYXJyYXkoJ2FjdGlvbl9vYmonID0+ICRhY3Rpb24pKTsKICAgICAgICB9CgogICAgICAgICRidXR0b25zID0gTUNGTW9kdWxlQWN0aW9uOjpzb3J0QnlQbGFjZSgkYWN0aW9ucyk7CiAgICAgICAgJHRoaXMtPnB1Ymxpc2hGaWxlKCR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSAuICcubW9kdWxlLnBocCcsICdNQ0ZNb2R1bGUubW9kdWxlLnBocC50cGwnLCBhcnJheSgnYnV0dG9ucycgPT4gJGJ1dHRvbnMpKTsKCiAgICAgICAgJHRoaXMtPnVwZGF0ZURCKCk7CgogICAgICAgICR0aGlzLT5tb2R1bGUtPnNhdmUoKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb3B5RmlsZSgkc291cmNlKQogICAgewogICAgICAgICRzb3VyY2VfZGlyID0gJHRoaXMtPmNvbmZpZ1sncm9vdF9wYXRoJ10gLiAnL21vZHVsZXMvTUNGYWN0b3J5L3NtYXJ0eS90ZW1wbGF0ZXMnOwogICAgICAgICRkZXN0aW5hdGlvbl9kaXIgPSAkdGhpcy0+Y29uZmlnWydyb290X3BhdGgnXSAuICcvbW9kdWxlcy8nIC4gJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpOwogICAgICAgIGlmIChAY29weSgkc291cmNlX2RpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkc291cmNlLCAkZGVzdGluYXRpb25fZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRzb3VyY2UpID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDYW5ub3QgY29weSBmaWxlIFsnIC4gJHNvdXJjZSAuICddIHRvIGRlc3RpbmF0aW9uIGZvbGRlcicpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHVwZGF0ZURCKCkKICAgIHsKICAgICAgICAvLyBUT0RPOiBSZWZhY3RvcgogICAgICAgIGlmIChjbXNfdXRpbHM6OmdldF9tb2R1bGUoJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKSkgewogICAgICAgICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+bW9kdWxlLT5nZXREZWxldGVGaWVsZHMoKSBhcyAkZmllbGQpIHsKICAgICAgICAgICAgICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICAgICAgICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfJyAuIHN0cnRvbG93ZXIoJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKSwgJGZpZWxkKTsKICAgICAgICAgICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZmllbGRUeXBlcyA9ICR0aGlzLT5tb2R1bGUtPmdldEZpZWxkVHlwZXMoKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5tb2R1bGUtPmdldE9sZEV4dHJhRmllbGRzKCkgYXMgJGZpZWxkKSB7CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmaWVsZFsnbmV3J10pIG9yICgkZGItPmV4ZWN1dGUoJ1NFTEVDVCBDT1VOVCgnIC4gJGZpZWxkWyduYW1lJ10gLiAnKSBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlXycgLiBzdHJ0b2xvd2VyKCR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSkpID09PSBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAgICAgICAgICAgICAgICAgJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlXycgLiBzdHJ0b2xvd2VyKCR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSksICRmaWVsZFsnbmFtZSddIC4gJyAnIC4gJGZpZWxkVHlwZXNbJGZpZWxkWyd0eXBlJ11dWydjb2x1bW5fdHlwZSddKTsKICAgICAgICAgICAgICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gRml4IHVwcGVyY2FzZSBuYW1lcwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmaWVsZFsndXBwZXJjYXNlX25hbWUnXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGRiLT5leGVjdXRlKCdTRUxFQ1QgQ09VTlQoJyAuICRmaWVsZFsndXBwZXJjYXNlX25hbWUnXSAuICcpIEZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfJyAuIHN0cnRvbG93ZXIoJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKSkgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHNxbGFycmF5ID0gJGRpY3QtPlJlbmFtZUNvbHVtblNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlXycgLiBzdHJ0b2xvd2VyKCR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSksICRmaWVsZFsndXBwZXJjYXNlX25hbWUnXSwgJGZpZWxkWyduYW1lJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHVibGlzaEZpbGUoJGRlc3RpbmF0aW9uLCAkc291cmNlID0gbnVsbCwgJGV4dHJhX2Fzc2lnbnMgPSBhcnJheSgpKQogICAgewogICAgICAgIGlmIChpc19udWxsKCRzb3VyY2UpKSAkc291cmNlID0gJGRlc3RpbmF0aW9uIC4gJy50cGwnOwoKICAgICAgICAkdHBsID0gbmV3IE1DRlRlbXBsYXRlKCR0aGlzLT5tb2R1bGUtPmdldE1vZHVsZU5hbWUoKSwgJHNvdXJjZSwgJGRlc3RpbmF0aW9uKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ21vZHVsZScsICR0aGlzLT5tb2R1bGUpOwogICAgICAgICR0cGwtPmFzc2lnbigndGFibGVfbmFtZScsIHN0cnRvbG93ZXIoJHRoaXMtPm1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKSk7CgogICAgICAgIGZvcmVhY2ggKCRleHRyYV9hc3NpZ25zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbigka2V5LCAkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5tb2R1bGUtPmdldFBhcmVudE1vZHVsZSgpKSB7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignaGFzX2FkbWluJywgJ2ZhbHNlJyk7CiAgICAgICAgfSBlbHNlaWYgKCFpc19udWxsKCR0aGlzLT5tb2R1bGUtPmdldFNob3dNb2R1bGUoKSkgJiYgJHRoaXMtPm1vZHVsZS0+Z2V0U2hvd01vZHVsZSgpID09IDApIHsKICAgICAgICAgICAgJHRwbC0+YXNzaWduKCdoYXNfYWRtaW4nLCAnZmFsc2UnKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ2hhc19hZG1pbicsICd0cnVlJyk7CiAgICAgICAgfQoKICAgICAgICAkdHBsLT5hc3NpZ24oJ2FkbWluX3NlY3Rpb24nLCAoJHRoaXMtPm1vZHVsZS0+Z2V0QWRtaW5TZWN0aW9uKCkgIT0gJycpID8gJHRoaXMtPm1vZHVsZS0+Z2V0QWRtaW5TZWN0aW9uKCkgOiAnY29udGVudCcpOwogICAgICAgICR0cGwtPmFzc2lnbigncGFyZW50X21vZHVsZScsICR0aGlzLT5tb2R1bGUtPmdldFBhcmVudE1vZHVsZSgpID8gTUNGTW9kdWxlOjpyZXRyaWV2ZUJ5UGsoJHRoaXMtPm1vZHVsZS0+Z2V0UGFyZW50TW9kdWxlKCkpIDogZmFsc2UpOwogICAgICAgICR0cGwtPmFzc2lnbignY2hpbGRfbW9kdWxlcycsICR0aGlzLT5tb2R1bGUtPmdldENoaWxkTW9kdWxlcygpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2lzX3Byb3RlY3RlZCcsICR0aGlzLT5tb2R1bGUtPmdldElzUHJvdGVjdGVkKCkpOwogICAgICAgICR0cGwtPmFzc2lnbignZmlsZXNfcGF0aCcsICR0aGlzLT5tb2R1bGUtPmdldEZpbGVzUGF0aCgpKTsKICAgICAgICAkbWNmYWN0b3J5ID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQ0ZhY3RvcnknKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ21jZmFjdG9yeXZlcnNpb24nLCAkbWNmYWN0b3J5LT5nZXRWZXJzaW9uKCkpOwogICAgICAgICR0cGwtPmFzc2lnbignbWNmYWN0b3J5X3ZlcnNpb24nLCAkbWNmYWN0b3J5LT5HZXRWZXJzaW9uKCkpOwogICAgICAgICR0cGwtPmFzc2lnbigndGl0bGVfbGFiZWwnLCAkdGhpcy0+bW9kdWxlLT5nZXRUaXRsZUxhYmVsKCkpOwogICAgICAgICR0cGwtPmFzc2lnbignc3RydWN0dXJlJywgJHRoaXMtPm1vZHVsZS0+Z2V0U3RydWN0dXJlKCkpOwoKICAgICAgICAkZXh0cmFfZmllbGRzID0gJHRoaXMtPm1vZHVsZS0+Z2V0T2xkRXh0cmFGaWVsZHMoKTsKICAgICAgICAkZmllbGRUeXBlcyA9ICR0aGlzLT5tb2R1bGUtPmdldEZpZWxkVHlwZXMoKTsKCiAgICAgICAgJHRwbC0+YXNzaWduKCdmaXJzdF90YWJfZmllbGRzZXQnLCAkdGhpcy0+bW9kdWxlLT5nZXRTdHJ1Y3R1cmUoKS0+Z2V0Rmlyc3RUYWJGaWVsZHNldCgpKTsKCiAgICAgICAgLy8gVE9ETyA6IFJFRkFDVE9SSVNFIFRIQVQgRk9SIFNUUlVDVFVSRQogICAgICAgIGZvcmVhY2ggKCRleHRyYV9maWVsZHMgYXMgJiRmaWVsZCkgewogICAgICAgICAgICAkZmllbGRbJ3BsYWNlJ10gPSAkdGhpcy0+bW9kdWxlLT5nZXRTdHJ1Y3R1cmUoKS0+ZmluZEZpZWxkKCRmaWVsZFsnbmFtZSddKTsKICAgICAgICAgICAgJGZpZWxkWydjYW1lbGNhc2UnXSA9IE1DRk1vZHVsZTo6Q2FtZWxpc2UoJGZpZWxkWyduYW1lJ10pOwogICAgICAgICAgICAkZmllbGRbJ2ZyaWVuZGx5bmFtZSddID0gTUNGTW9kdWxlOjpDYW1lbGlzZSgkZmllbGRbJ25hbWUnXSwgJyAnKTsKICAgICAgICAgICAgJGZpZWxkWydsYWJlbCddID0gYWRkc2xhc2hlcygoJGZpZWxkWydsYWJlbCddKSk7CiAgICAgICAgICAgICRmaWVsZFsnY29sdW1uX3R5cGUnXSA9ICRmaWVsZFR5cGVzWyRmaWVsZFsndHlwZSddXVsnY29sdW1uX3R5cGUnXTsKICAgICAgICAgICAgJGZpZWxkWydmb3JtX3R5cGUnXSA9ICRmaWVsZFR5cGVzWyRmaWVsZFsndHlwZSddXVsnZm9ybV90eXBlJ107CgogICAgICAgICAgICBpZiAoJGZpZWxkWyduYW1lJ10gPT0gJ3JhdGUnKSB7CiAgICAgICAgICAgICAgICAkdHBsLT5hc3NpZ24oJ3JhdGFibGUnLCB0cnVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGlzc2V0KCRmaWVsZFsnb3B0aW9ucyddKSkgewogICAgICAgICAgICAgICAgaWYgKChzdHJwb3MoJGZpZWxkWydvcHRpb25zJ10sICc7JykgIT09IGZhbHNlKSB8fCAoc3RycG9zKCRmaWVsZFsnb3B0aW9ucyddLCAnOicpICE9PSBmYWxzZSkpIHsKICAgICAgICAgICAgICAgICAgICAkb3B0aW9ucyA9IGV4cGxvZGUoJzsnLCAkZmllbGRbJ29wdGlvbnMnXSk7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAkdmFsID0gZXhwbG9kZSgnOicsICRvcHRpb24pOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnQoJHZhbCkgPiAxKSAkZmllbGRbJ2ZvcHRpb25zJ11bJHZhbFswXV0gPSAkdmFsWzFdOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNldCgkdmFsKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIE1lYW5zIHdlIGFyZSBvbGQgc2Nob29sID8KICAgICAgICAgICAgICAgICAgICAkZmllbGRbJ2ZvcHRpb25zJ11bJ3ZhbHVlcyddID0gJGZpZWxkWydvcHRpb25zJ107CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRmaWVsZFsndHlwZSddID09ICdzZWxlY3QnKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzID0gZXhwbG9kZSgnLCcsICRmaWVsZFsnZm9wdGlvbnMnXVsndmFsdWVzJ10pOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAmJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkdmFsdWUsICc9PicpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiJyIgLiB0cmltKCR2YWx1ZSkgLiAiJyA9PiAnIiAuIHRyaW0oJHZhbHVlKSAuICInIjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBsaXN0KCRrZXksICRudmFsdWUpID0gZXhwbG9kZSgnPT4nLCAkdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiJyIgLiB0cmltKCRrZXkpIC4gIicgPT4gJyIgLiB0cmltKCRudmFsdWUpIC4gIiciOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuc2V0KCR2YWx1ZSk7CiAgICAgICAgICAgICAgICAkZmllbGRbJ3NlbGVjdF9vcHRpb25zJ10gPSAnYXJyYXkoJyAuIGltcGxvZGUoJywgJywgJHZhbHVlcykgLiAnKSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRmaWVsZFsndHlwZSddID09ICdjb3VudHJ5JykgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmaWVsZFsnZm9wdGlvbnMnXVsnb3B0aW9ucyddKSkgewogICAgICAgICAgICAgICAgICAgICR3aGl0ZWxpc3QgPSBleHBsb2RlKCcsJywgJGZpZWxkWydmb3B0aW9ucyddWydvcHRpb25zJ10pOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRmaWVsZFsnZm9wdGlvbnMnXVsndmFsdWVzJ10pIHsKICAgICAgICAgICAgICAgICAgICAkd2hpdGVsaXN0ID0gZXhwbG9kZSgnLCcsICRmaWVsZFsnZm9wdGlvbnMnXVsndmFsdWVzJ10pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkd2hpdGVsaXN0ID0gYXJyYXlfa2V5cyhNQ0ZhY3Rvcnk6OiRjb3VudHJpZXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICAkY291bnRyaWVzID0gTUNGYWN0b3J5OjokY291bnRyaWVzOwogICAgICAgICAgICAgICAgYXNvcnQoJGNvdW50cmllcyk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkY291bnRyaWVzIGFzICRjb2RlID0+ICRjb3VudHJ5KSB7CiAgICAgICAgICAgICAgICAgICAgJGNvdW50cnkgPSBhZGRzbGFzaGVzKCRjb3VudHJ5KTsKICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGNvZGUsICR3aGl0ZWxpc3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9ICInIiAuIHRyaW0oJGNvZGUpIC4gIicgPT4gJyIgLiB0cmltKCRjb3VudHJ5KSAuICInIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZmllbGRbJ3NlbGVjdF9vcHRpb25zJ10gPSAnYXJyYXkoJyAuIGltcGxvZGUoJywgJywgJHZhbHVlcykgLiAnKSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRmaWVsZFsndHlwZSddID09ICdkYXRlJykgewogICAgICAgICAgICAgICAgaWYgKChzdHJwb3MoJGZpZWxkWydvcHRpb25zJ10sICc7JykgIT09IGZhbHNlKSkgewogICAgICAgICAgICAgICAgICAgICRvcHRpb25zID0gZXhwbG9kZSgnOycsICRmaWVsZFsnb3B0aW9ucyddKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG9wdGlvbnMgPSBleHBsb2RlKCd8JywgJGZpZWxkWydvcHRpb25zJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHZhbCA9IGFycmF5KCk7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgJHYgPSBleHBsb2RlKCc6JywgJG9wdGlvbik7CiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50KCR2KSA9PSAyKSAkdmFsWyR2WzBdXSA9ICR2WzFdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGZpZWxkWydkYXRlX29wdGlvbnMnXSA9ICR2YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRmaWVsZFsndHlwZSddID09ICdpbWFnZScpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZmllbGRbJ2ZvcHRpb25zJ11bJ3NpemUnXSkpIHsKICAgICAgICAgICAgICAgICAgICBsaXN0KCRmaWVsZFsnaW1hZ2Vfd2lkdGgnXSwgJGZpZWxkWydpbWFnZV9oZWlnaHQnXSkgPSBleHBsb2RlKCd4JywgJGZpZWxkWydmb3B0aW9ucyddWydzaXplJ10pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBsaXN0KCRmaWVsZFsnaW1hZ2Vfd2lkdGgnXSwgJGZpZWxkWydpbWFnZV9oZWlnaHQnXSkgPSBleHBsb2RlKCd4JywgJGZpZWxkWydvcHRpb25zJ10pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkZmllbGRbJ3R5cGUnXSA9PSAnbW9kdWxlJykgewogICAgICAgICAgICAgICAgLy8kZmllbGRbJ21vZHVsZV9vcHRpb25zJ10gPSAkZmllbGRbJ2ZvcHRpb25zJ107CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRmaWVsZFsnZm9wdGlvbnMnXVsnbW9kdWxlX25hbWUnXSkpICRmaWVsZFsnZm9wdGlvbnMnXVsnbW9kdWxlX25hbWUnXSA9ICRmaWVsZFsnZm9wdGlvbnMnXVsndmFsdWVzJ107CiAgICAgICAgICAgICAgICAvLyRmaWVsZFsnZm9wdGlvbnMnXVsnbW9kdWxlX25hbWUnXSA9IGlzc2V0KCRmaWVsZFsnZm9wdGlvbnMnXVsnbW9kdWxlX25hbWUnXSk/JGZpZWxkWydmb3B0aW9ucyddWydtb2R1bGVfbmFtZSddOiRmaWVsZFsnZm9wdGlvbnMnXVsndmFsdWVzJ107CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHVuc2V0KCRmaWVsZCk7CgogICAgICAgICR0cGwtPmFzc2lnbignZXh0cmFfZmllbGRzJywgJGV4dHJhX2ZpZWxkcyk7CiAgICAgICAgaWYgKCR0aGlzLT5tb2R1bGUtPmdldElzVXNlck1vZHVsZSgpKSB7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignaXNfdXNlcl9tb2R1bGUnLCAxKTsKICAgICAgICB9CgogICAgICAgICRmaWx0ZXJzID0gJHRoaXMtPm1vZHVsZS0+Z2V0RmlsdGVycygpOwogICAgICAgICRmaWx0ZXJUeXBlcyA9ICR0aGlzLT5tb2R1bGUtPmdldEZpbHRlclR5cGVzKCk7CiAgICAgICAgZm9yZWFjaCAoJGZpbHRlcnMgYXMgJiRmaWx0ZXIpIHsKICAgICAgICAgICAgJGZpbHRlclsnY3JpdGVyaWEnXSA9ICRmaWx0ZXJUeXBlc1skZmlsdGVyWyd0eXBlJ11dWydjcml0ZXJpYSddOwogICAgICAgIH0KICAgICAgICB1bnNldCgkZmlsdGVyKTsKCiAgICAgICAgJHRwbC0+YXNzaWduKCdmaWx0ZXJzJywgJGZpbHRlcnMpOwoKICAgICAgICAvLyBFeHRyYSBmZWF0dXJlcwogICAgICAgICR0cGwtPmFzc2lnbignZXZlbnRzJywgJHRoaXMtPm1vZHVsZS0+Z2V0RXh0cmFGZWF0dXJlcygpLT5nZXRFdmVudHMoKSk7CgoKICAgICAgICBpZiAoJHRwbC0+c2F2ZSgpID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDYW5ub3QgZ2VuZXJhdGUgdGhlIHRlbXBsYXRlICcgLiRkZXN0aW5hdGlvbiAuICcgZm9yIGFuIHVua25vd24gcmVhc29uJyk7CiAgICAgICAgfQogICAgfQoKfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFListView.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIE1DRkxpc3RWaWV3IHsKCglwcm90ZWN0ZWQgJG1vZHVsZTsKCXByb3RlY3RlZCAkdmlldzsKCXByb3RlY3RlZCAkdGl0bGVGaWx0ZXI7Cglwcm90ZWN0ZWQgJGNhdGVnb3J5RmlsdGVycyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJHBhZ2VGaWx0ZXJzID0gYXJyYXkoKTsKCXByb3RlY3RlZCAkbW9kdWxlRmlsdGVycyA9IGFycmF5KCk7Cglwcm90ZWN0ZWQgJG9yZGVyQnkgPSAnb3JkZXJfYnknOyAvLyBPTEQgV0FZCglwcm90ZWN0ZWQgJG9yZGVyX2J5ID0gYXJyYXkoJ29yZGVyX2J5Jyk7Cglwcm90ZWN0ZWQgJGN1c3RvbU9yZGVyID0gZmFsc2U7Cglwcm90ZWN0ZWQgJHBhZ2UgPSAxOwoJcHJvdGVjdGVkICRpdGVtc1BlclBhZ2UgPSAyMDsKCXByb3RlY3RlZCAkaXNfdHJlZSA9IGZhbHNlOwoJcHJvdGVjdGVkICRhY3RpdmVfYnJhbmNoZXMgPSBhcnJheSgpOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kdWxlLCAkcGFyYW1zKSB7CgkJJHRoaXMtPm1vZHVsZSA9ICRtb2R1bGU7CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ3ZpZXcnXSkgJiYgJHBhcmFtc1sndmlldyddKSB7CiAgICAgIC8vIHZhcl9kdW1wKCRwYXJhbXNbJ3ZpZXcnXSk7CgkJCSR0aGlzLT52aWV3ID0gJHBhcmFtc1sndmlldyddOwoJCQkkdGhpcy0+dGl0bGVGaWx0ZXIgPSBpc3NldCgkX1NFU1NJT05bJ3ZpZXdzJ11bJHRoaXMtPnZpZXddWyd0aXRsZUZpbHRlciddKSA/ICRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ3RpdGxlRmlsdGVyJ10gOiBudWxsOwoJCQkkdGhpcy0+Y2F0ZWdvcnlGaWx0ZXJzID0gaXNzZXQoJF9TRVNTSU9OWyd2aWV3cyddWyR0aGlzLT52aWV3XVsnY2F0ZWdvcnlGaWx0ZXJzJ10pID8gJF9TRVNTSU9OWyd2aWV3cyddWyR0aGlzLT52aWV3XVsnY2F0ZWdvcnlGaWx0ZXJzJ10gOiBhcnJheSgpOwoJCQkkdGhpcy0+cGFnZUZpbHRlcnMgPSBpc3NldCgkX1NFU1NJT05bJ3ZpZXdzJ11bJHRoaXMtPnZpZXddWydwYWdlRmlsdGVycyddKSA/ICRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ3BhZ2VGaWx0ZXJzJ10gOiBhcnJheSgpOwoJCQkkdGhpcy0+bW9kdWxlRmlsdGVycyA9IGlzc2V0KCRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ21vZHVsZUZpbHRlcnMnXSkgPyAkX1NFU1NJT05bJ3ZpZXdzJ11bJHRoaXMtPnZpZXddWydtb2R1bGVGaWx0ZXJzJ10gOiBhcnJheSgpOwkJCQoJCQkkdGhpcy0+cGFnZSA9IGlzc2V0KCRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ3BhZ2UnXSkgPyAkX1NFU1NJT05bJ3ZpZXdzJ11bJHRoaXMtPnZpZXddWydwYWdlJ10gOiAxOwoJCQkKCQkJJHRoaXMtPmFjdGl2ZV9icmFuY2hlcyA9IGlzc2V0KCRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ2FjdGl2ZV9icmFuY2hlcyddKSA/ICRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ2FjdGl2ZV9icmFuY2hlcyddIDogYXJyYXkoKTsJCiAJCX0gZWxzZSB7CgkJCSR0aGlzLT52aWV3ID0gdW5pcWlkKCk7CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydwYWdlJ10pKSB7CgkJICAgICR0aGlzLT5zZXRQYWdlKCRwYXJhbXNbJ3BhZ2UnXSk7CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydjbGVhcl9maWx0ZXJzJ10pKSB7CgkJCSR0aGlzLT52aWV3ID0gdW5pcWlkKCk7CgkJCSR0aGlzLT5zZXRUaXRsZUZpbHRlcihudWxsKTsKCQkJJHRoaXMtPnNldENhdGVnb3J5RmlsdGVycyhhcnJheSgpKTsKCQkJJHRoaXMtPnNldFBhZ2VGaWx0ZXJzKGFycmF5KCkpOwoJCQkkdGhpcy0+c2V0TW9kdWxlRmlsdGVycyhhcnJheSgpKTsJCQkKCQkJJHRoaXMtPnNldFBhZ2UoMSk7CgkJfSBlbHNlIHsKCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3RpdGxlRmlsdGVyJ10pKSB7CgkJCQkkdGhpcy0+c2V0VGl0bGVGaWx0ZXIoJHBhcmFtc1sndGl0bGVGaWx0ZXInXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3J5RmlsdGVycyddKSkgewoJCQkJJHRoaXMtPnNldENhdGVnb3J5RmlsdGVycygkcGFyYW1zWydjYXRlZ29yeUZpbHRlcnMnXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3BhZ2VGaWx0ZXJzJ10pKSB7CgkJCQkJCQkkdGhpcy0+c2V0UGFnZUZpbHRlcnMoJHBhcmFtc1sncGFnZUZpbHRlcnMnXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ21vZHVsZUZpbHRlcnMnXSkpIHsKCQkJCSR0aGlzLT5zZXRNb2R1bGVGaWx0ZXJzKCRwYXJhbXNbJ21vZHVsZUZpbHRlcnMnXSk7CgkJCX0KCQl9Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFZpZXcoKSB7CgkJcmV0dXJuICR0aGlzLT52aWV3OwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0SXNUcmVlKCkKCXsKCQlyZXR1cm4gKGJvb2wpJHRoaXMtPmlzX3RyZWU7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldElzVHJlZSgkdmFsdWUgPSB0cnVlKQl7CgkJJHRoaXMtPmlzX3RyZWUgPSAoYm9vbCkkdmFsdWU7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBhZGRBY3RpdmVCcmFuY2hlKCRpZCkKCXsKCQkkdGhpcy0+YWN0aXZlX2JyYW5jaGVzWyRpZF0gPSAkaWQ7IAoJCSRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ2FjdGl2ZV9icmFuY2hlcyddID0gJHRoaXMtPmFjdGl2ZV9icmFuY2hlczsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZUFjdGl2ZUJyYW5jaGUoJGlkKQoJewoJCWlmKGlzc2V0KCR0aGlzLT5hY3RpdmVfYnJhbmNoZXNbJGlkXSkpCgkJewoJCQl1bnNldCgkdGhpcy0+YWN0aXZlX2JyYW5jaGVzWyRpZF0pOwoJCX0JCQoJCSRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ2FjdGl2ZV9icmFuY2hlcyddID0gJHRoaXMtPmFjdGl2ZV9icmFuY2hlczsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGlzQnJhbmNoZU9wZW4oJGlkKQoJewoJCXJldHVybiBpc3NldCgkdGhpcy0+YWN0aXZlX2JyYW5jaGVzWyRpZF0pOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWN0aXZlQnJhbmNoZXMoKQoJewoJCXJldHVybiAkdGhpcy0+YWN0aXZlX2JyYW5jaGVzOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0VGl0bGVGaWx0ZXIoKSB7CgkJcmV0dXJuICR0aGlzLT50aXRsZUZpbHRlcjsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2V0VGl0bGVGaWx0ZXIoJGZpbHRlcikgewoJCSRjbGVhbiA9IHRyaW0oJGZpbHRlcik7CgkJJHRoaXMtPnRpdGxlRmlsdGVyID0gJGNsZWFuOwoJCSRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ3RpdGxlRmlsdGVyJ10gPSAkY2xlYW47CgkJJHRoaXMtPmN1c3RvbU9yZGVyID0gKCR0aGlzLT5vcmRlckJ5ICE9ICdvcmRlcl9ieScpIHx8ICFlbXB0eSgkdGhpcy0+dGl0bGVGaWx0ZXIpIHx8IGNvdW50KCR0aGlzLT5jYXRlZ29yeUZpbHRlcnMpIHx8IGNvdW50KCR0aGlzLT5wYWdlRmlsdGVycykgfHwgY291bnQoJHRoaXMtPm1vZHVsZUZpbHRlcnMpOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRDYXRlZ29yeUZpbHRlcnMoKSB7CgkJcmV0dXJuICR0aGlzLT5jYXRlZ29yeUZpbHRlcnM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldENhdGVnb3J5RmlsdGVycygkZmlsdGVycykgewoJCSRjbGVhbiA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJGZpbHRlcnMgYXMgJGZpbHRlcikgewoJCQlpZiAoIWVtcHR5KCRmaWx0ZXIpKSB7CgkJCQkkY2xlYW5bXSA9ICRmaWx0ZXI7CgkJCX0KCQl9CgkJJHRoaXMtPmNhdGVnb3J5RmlsdGVycyA9ICRjbGVhbjsKCQkkX1NFU1NJT05bJ3ZpZXdzJ11bJHRoaXMtPnZpZXddWydjYXRlZ29yeUZpbHRlcnMnXSA9ICRjbGVhbjsKCQkkdGhpcy0+Y3VzdG9tT3JkZXIgPSAoJHRoaXMtPm9yZGVyQnkgIT0gJ29yZGVyX2J5JykgfHwgIWVtcHR5KCR0aGlzLT50aXRsZUZpbHRlcikgfHwgY291bnQoJHRoaXMtPmNhdGVnb3J5RmlsdGVycykgfHwgY291bnQoJHRoaXMtPnBhZ2VGaWx0ZXJzKSB8fCBjb3VudCgkdGhpcy0+bW9kdWxlRmlsdGVycyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFBhZ2VGaWx0ZXJzKCkgewoJCXJldHVybiAkdGhpcy0+cGFnZUZpbHRlcnM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldFBhZ2VGaWx0ZXJzKCRmaWx0ZXJzKSB7CgkJJGNsZWFuID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkZmlsdGVycyBhcyAkZmlsdGVyKSB7CgkJCWlmICghZW1wdHkoJGZpbHRlcikpIHsKCQkJCSRjbGVhbltdID0gJGZpbHRlcjsKCQkJfQoJCX0KCQkkdGhpcy0+cGFnZUZpbHRlcnMgPSAkY2xlYW47CgkJJF9TRVNTSU9OWyd2aWV3cyddWyR0aGlzLT52aWV3XVsncGFnZUZpbHRlcnMnXSA9ICRjbGVhbjsKCQkkdGhpcy0+Y3VzdG9tT3JkZXIgPSAoJHRoaXMtPm9yZGVyQnkgIT0gJ29yZGVyX2J5JykgfHwgIWVtcHR5KCR0aGlzLT50aXRsZUZpbHRlcikgfHwgY291bnQoJHRoaXMtPmNhdGVnb3J5RmlsdGVycykgfHwgY291bnQoJHRoaXMtPnBhZ2VGaWx0ZXJzKSB8fCBjb3VudCgkdGhpcy0+bW9kdWxlRmlsdGVycyk7Cgl9CQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0TW9kdWxlRmlsdGVycygpIHsKCQlyZXR1cm4gJHRoaXMtPm1vZHVsZUZpbHRlcnM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldE1vZHVsZUZpbHRlcnMoJGZpbHRlcnMpIHsKCQkkY29uZGl0aW9ucyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkZmlsdGVycyBhcyAkZmllbGQgPT4gJGZpbHRlcikKCQl7CgkJCWlmICghZW1wdHkoJGZpbHRlcikpIAoJCQl7CgkJCQkkY29uZGl0aW9uc1skZmllbGRdID0gJGZpbHRlcjsKCQkJfQoJCX0KCQkkdGhpcy0+bW9kdWxlRmlsdGVycyA9ICRjb25kaXRpb25zOwoJCSRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ21vZHVsZUZpbHRlcnMnXSA9ICRjb25kaXRpb25zOwoJCSR0aGlzLT5jdXN0b21PcmRlciA9ICgkdGhpcy0+b3JkZXJCeSAhPSAnb3JkZXJfYnknKSB8fCAhZW1wdHkoJHRoaXMtPnRpdGxlRmlsdGVyKSB8fCBjb3VudCgkdGhpcy0+Y2F0ZWdvcnlGaWx0ZXJzKSB8fCBjb3VudCgkdGhpcy0+cGFnZUZpbHRlcnMpIHx8IGNvdW50KCR0aGlzLT5tb2R1bGVGaWx0ZXJzKTsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIHJlc2V0T3JkZXJCeSgpCgl7CgkJJHRoaXMtPm9yZGVyX2J5ID0gYXJyYXkoKTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gc2V0T3JkZXJCeSgkdmFsdWUpIHsKCQkkdGhpcy0+cmVzZXRPcmRlckJ5KCk7CgkJJG9yZGVycyA9IGV4cGxvZGUoJywnLCAkdmFsdWUpOwoJCWZvcmVhY2goJG9yZGVycyBhcyAkb3JkZXIpCgkJewoJCQkkdGhpcy0+YWRkT3JkZXJCeSh0cmltKCRvcmRlcikpOwoJCX0KCX0KCQoJcHVibGljIGZ1bmN0aW9uIGFkZE9yZGVyQnkoJHZhbHVlKQoJewoJCSR0aGlzLT5vcmRlcl9ieVtdID0gc3RydG9sb3dlcigkdmFsdWUpOwoJCQoJCSR0aGlzLT5vcmRlckJ5ID0gaW1wbG9kZSgnLCcsJHRoaXMtPm9yZGVyX2J5KTsgLy8gUkVUUk9DT01QQVRJQklMSVRZCgkJCgkJaWYoISR0aGlzLT5jdXN0b21PcmRlcikKCQl7CgkJCSR0aGlzLT5jdXN0b21PcmRlciA9ICghaW5fYXJyYXkoJHRoaXMtPm9yZGVyQnksIGFycmF5KCdvcmRlcl9ieScsICdvcmRlcl9ieSBhc2MnLCAncGFyZW50X2lkJywgJ3BhcmVudF9pZCBhc2MnKSkpIHx8ICFlbXB0eSgkdGhpcy0+dGl0bGVGaWx0ZXIpIHx8IGNvdW50KCR0aGlzLT5jYXRlZ29yeUZpbHRlcnMpIHx8IGNvdW50KCR0aGlzLT5wYWdlRmlsdGVycykgfHwgY291bnQoJHRoaXMtPm1vZHVsZUZpbHRlcnMpOwoJCX0KCX0KCQoJcHVibGljIGZ1bmN0aW9uIHNldEl0ZW1zUGVyUGFnZSgkdmFsdWUpIHsKCQkkdGhpcy0+aXRlbXNQZXJQYWdlID0gJHZhbHVlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBpc0N1c3RvbU9yZGVyKCkgewoJCXJldHVybiAkdGhpcy0+Y3VzdG9tT3JkZXI7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEl0ZW1zUGVyUGFnZSgpIHsKCQlyZXR1cm4gJHRoaXMtPml0ZW1zUGVyUGFnZTsKCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGFnZSgpIHsKCQlyZXR1cm4gJHRoaXMtPnBhZ2U7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIHNldFBhZ2UoJHBhZ2UpIHsKCQkkdGhpcy0+cGFnZSA9ICRwYWdlOwoJCSRfU0VTU0lPTlsndmlld3MnXVskdGhpcy0+dmlld11bJ3BhZ2UnXSA9ICRwYWdlOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBnZXRDcml0ZXJpYSgpIHsKCQkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoJCWlmICghZW1wdHkoJHRoaXMtPnRpdGxlRmlsdGVyKSkgewoJCQkkYy0+YWRkKCd0aXRsZScsICclJyAuICR0aGlzLT50aXRsZUZpbHRlciAuICclJywgTUNGQ3JpdGVyaWE6OkxJS0UpOwoJCX0KCQlpZiAoY291bnQoJHRoaXMtPmNhdGVnb3J5RmlsdGVycykpIHsKCQkgIGlmKGNsYXNzX2V4aXN0cygnTVhfUmVsYXRpb25MaW5rJykpCgkJCSRjLT5hZGQoJ2lkJywgTVhfUmVsYXRpb25MaW5rOjpnZXRSZWxhdGVkSXRlbXNJZHMoJHRoaXMtPm1vZHVsZSwgJHRoaXMtPmNhdGVnb3J5RmlsdGVycywgJ29wdGlvbnMnLCAnQU5EJyksIE1DRkNyaXRlcmlhOjpJTik7CgkJfQoJCWlmIChjb3VudCgkdGhpcy0+cGFnZUZpbHRlcnMpKSB7CgkJICBpZihjbGFzc19leGlzdHMoJ01YX1JlbGF0aW9uTGluaycpKQoJCQkkYy0+YWRkKCdpZCcsIE1YX1JlbGF0aW9uTGluazo6Z2V0UmVsYXRlZEl0ZW1zSWRzKCR0aGlzLT5tb2R1bGUsICR0aGlzLT5wYWdlRmlsdGVycywgJ3BhZ2VzJywgJ0FORCcpLCBNQ0ZDcml0ZXJpYTo6SU4pOwoJCX0KCQlpZiAoY291bnQoJHRoaXMtPm1vZHVsZUZpbHRlcnMpKSB7CgkJCWNtc191dGlsczo6Z2V0X21vZHVsZSgkdGhpcy0+bW9kdWxlKS0+YnVpbGRGaWx0ZXJzQ3JpdGVyaWEoJGMsICR0aGlzLT5tb2R1bGVGaWx0ZXJzKTsKCQl9CgkJCgkJCgkJLy8gVFJFRQoJCWlmKCR0aGlzLT5pc190cmVlKQoJCXsKCQkJJGMtPmFkZCgncGFyZW50X2lkJywgYXJyYXkoMCA9PiAwKSArICR0aGlzLT5hY3RpdmVfYnJhbmNoZXMsIE1DRkNyaXRlcmlhOjpJTiwgJyBPUiBwYXJlbnRfaWQgSVMgTlVMTCcpOwoJCX0KCQkKCQlyZXR1cm4gJGM7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldEl0ZW1zKCkgewoJCSR0b3RhbFBhZ2VzID0gJHRoaXMtPmdldFRvdGFsUGFnZXMoKTsKCQlpZiAoJHRoaXMtPnBhZ2UgPiAkdG90YWxQYWdlcykgewoJCQkkdGhpcy0+c2V0UGFnZSgkdG90YWxQYWdlcyk7CgkJfQoJCSRjID0gJHRoaXMtPmdldENyaXRlcmlhKCk7CgkJCgkJZm9yZWFjaCgkdGhpcy0+b3JkZXJfYnkgYXMgJG9yZGVyX2J5KQoJCXsKCQkJaWYgKHByZWdfbWF0Y2goJy8oXHcrKSg/OiAoYXNjfGRlc2MpKT8vaScsICRvcmRlcl9ieSwgJG1hdGNoZXMpKSB7CgkJCQkkY29sdW1uID0gJG1hdGNoZXNbMV07CgkJCQkkb3JkZXIgPSBpc3NldCgkbWF0Y2hlc1syXSkgPyBzdHJ0b2xvd2VyKCRtYXRjaGVzWzJdKSA6ICdhc2MnOwoJCQkJaWYgKCRvcmRlciA9PSAnZGVzYycpIHsKCQkJCQkkYy0+YWRkRGVzY2VuZGluZ09yZGVyQnlDb2x1bW4oJGNvbHVtbik7CgkJCQl9IGVsc2UgewoJCQkJCSRjLT5hZGRBc2NlbmRpbmdPcmRlckJ5Q29sdW1uKCRjb2x1bW4pOwoJCQkJfQoJCQl9CgkJfQoJCWlmKCEkdGhpcy0+aXNfdHJlZSkKCQl7CgkJCSRjLT5zZXRPZmZzZXQoKCR0aGlzLT5wYWdlIC0gMSkgKiAkdGhpcy0+aXRlbXNQZXJQYWdlKTsKCQkJJGMtPnNldExpbWl0KCR0aGlzLT5pdGVtc1BlclBhZ2UpOwoJCX0KCQllbHNlCgkJewoJCQkvLyAkYy0+c2V0TGltaXQoKTsKCQl9CgoJCXJldHVybiBjYWxsX3VzZXJfZnVuYyhhcnJheSgkdGhpcy0+bW9kdWxlIC4gJ09iamVjdCcsICdkb1NlbGVjdCcpLCAkYyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsSXRlbXMoKSB7CgkJJGMgPSAkdGhpcy0+Z2V0Q3JpdGVyaWEoKTsKCQlyZXR1cm4gY2FsbF91c2VyX2Z1bmMoYXJyYXkoJHRoaXMtPm1vZHVsZSAuICdPYmplY3QnLCAnZG9Db3VudCcpLCAkYyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIGdldFRvdGFsUGFnZXMoKSB7CgkJaWYgKCR0aGlzLT5pdGVtc1BlclBhZ2UgIT0gMCkKCQl7CgkJCXJldHVybiBtYXgoMSwgY2VpbCgkdGhpcy0+Z2V0VG90YWxJdGVtcygpIC8gJHRoaXMtPml0ZW1zUGVyUGFnZSkpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gbnVsbDsKCQl9Cgl9Cgp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFModule.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBNQ0ZNb2R1bGUgQ2xhc3MKICoKICogVGhpcyBjbGFzcyBoYW5kbGUgYWxsIHRoZSBtYW5pcHVsYXRpb25zIG9uIHRoZSBNJkMgRmFjdG9yeSBNb2R1bGUgb2JqZWN0CiAqCiAqIE5PVEU6IEl0IHNob3VsZCBiZSBzcGxpdCBpbiB0d28gY2xhc3NlcyBidXQgZm9yIGNvbnZlbmllbmNlLCBJdCB3b24ndC4KICoKICogRklYTUU6IENoZWNrIHRoZSBzZWN1cml0eSBwcm9jZXNzZXMgIQogKgogKi8KCmNsYXNzIE1DRk1vZHVsZQp7CiAgICBwcm90ZWN0ZWQgJGlkOwoKICAgIHByb3RlY3RlZCAkY3JlYXRlZF9hdDsKICAgIHByb3RlY3RlZCAkY3JlYXRlZF9ieTsKICAgIHByb3RlY3RlZCAkdXBkYXRlZF9hdDsKICAgIHByb3RlY3RlZCAkdXBkYXRlZF9ieTsKCiAgICBwcm90ZWN0ZWQgJG1vZHVsZV9uYW1lOwogICAgcHJvdGVjdGVkICRtb2R1bGVfZnJpZW5kbHluYW1lOwogICAgcHJvdGVjdGVkICRtb2R1bGVfdmVyc2lvbiA9IDE7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5ICRmaWVsZHMgTW9kdWxlIGZpZWxkcwogICAgICovCiAgICBwcm90ZWN0ZWQgJGZpZWxkczsKICAgIHByb3RlY3RlZCAkYWN0aW9uczsKCiAgICAvLyBHRVRURVJTCgogICAgLyoqCiAgICAgKiBHZXQgdGhlIE1DIEZhY3RvcnkgTW9kdWxlJ3MgSUQKICAgICAqIEByZXR1cm4gaW50IE1vZHVsZSBJRAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZHMoKQogICAgewogICAgICAgIGlmKGVtcHR5KCR0aGlzLT5maWVsZHMpKSAkdGhpcy0+ZmllbGRzID0gJHRoaXMtPnJldHJpZXZlRmllbGRzKCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWVsZHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmV0cmlldmVGaWVsZHMoKQogICAgewogICAgICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAgICAgJGMtPmFkZCgnbW9kdWxlX2lkJywgJHRoaXMtPmdldElkKCkpOwogICAgICAgIHJldHVybiBNQ0ZNb2R1bGVGaWVsZDo6ZG9TZWxlY3QoJGMpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGFsbCB0aGUgbW9kdWxlJ3MgY3VzdG9tIGFjdGlvbnMKICAgICAqIEBzaW5jZSAzLjUKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFjdGlvbnMoKQogICAgewogICAgICAgIGlmKGVtcHR5KCR0aGlzLT5hY3Rpb25zKSkgJHRoaXMtPmFjdGlvbnMgPSAkdGhpcy0+ZmV0Y2hBY3Rpb25zKCk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hY3Rpb25zOwogICAgfQoKICAgIC8qKgogICAgICogUmV0cmlldmUgYWxsIHRoZSBtb2R1bGUncyBjdXN0b20gYWN0aW9ucwogICAgICogQHNpbmNlIDMuNQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZldGNoQWN0aW9ucygpCiAgICB7CiAgICAgICAgcmV0dXJuIE1DRk1vZHVsZUFjdGlvbjo6ZG9TZWxlY3QoYXJyYXkoJ3doZXJlJyA9PiBhcnJheSgnbW9kdWxlX2lkJyA9PiAkdGhpcy0+Z2V0SWQoKSkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBNb2R1bGUgdmVyc2lvbgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZVZlcnNpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bW9kdWxlX3ZlcnNpb247CiAgICB9CgogICAgLyoqCiAgICAgKiBJbmNyZW1lbnQgbW9kdWxlIHZlcnNpb24KICAgICAqIEBzaW5jZSAzLjUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluY3JlbWVudE1vZHVsZVZlcnNpb24oKQogICAgewogICAgICAgICR0aGlzLT5zZXRNb2R1bGVWZXJzaW9uKCR0aGlzLT5nZXRNb2R1bGVWZXJzaW9uKCkgKyAxKTsKICAgIH0KCiAgICAvLyBUTyBSRUZBQ1RPUgoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gQ0xBU1MgUFJPUEVSVElFUyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCgoKICAgIHByb3RlY3RlZCAkdmFyczsKCiAgICBwcm90ZWN0ZWQgJHRpdGxlX2xhYmVsOwogICAgcHJvdGVjdGVkICRhcGlfZW5hYmxlZDsKICAgIHByb3RlY3RlZCAkZXh0cmFfZmllbGRzID0gYXJyYXkoKTsKICAgIC8vIHByb3RlY3RlZCAkc3RydWN0dXJlID0gYXJyYXkoKTsKICAgIHByb3RlY3RlZCAkc3RydWN0dXJlOyAvLyBOZXcgc3RydWN0dXJlIG9mIGV4dHJhIGZpZWxkcwogICAgcHJvdGVjdGVkICRkZWxldGVfZmllbGRzID0gYXJyYXkoKTsKICAgIHByb3RlY3RlZCAkZmlsdGVycyA9IGFycmF5KCk7CiAgICBwcm90ZWN0ZWQgJHBhcmVudF9tb2R1bGU7CiAgICBwcm90ZWN0ZWQgJHNob3dfbW9kdWxlOwoKICAgIHByb3RlY3RlZCAkYWRtaW5fc2VjdGlvbjsKCiAgICBwdWJsaWMgc3RhdGljICRwb3NzaWJsZV9zZWN0aW9ucyA9IGFycmF5KAogICAgICAgICdjb250ZW50JyA9PiAnQ29udGVudCcsCiAgICAgICAgJ2xheW91dCcgPT4gJ0xheW91dCcsCiAgICAgICAgJ3VzZXJzZ3JvdXBzJyA9PiAnVXNlcnMgJiBHcm91cHMnLAogICAgICAgICdleHRlbnNpb25zJyA9PiAnRXh0ZW50aW9ucycsCiAgICAgICAgJ3NpdGVhZG1pbicgPT4gJ1NpdGUgQWRtaW4nCiAgICApOwoKICAgIHByb3RlY3RlZCAkaXNfdXNlcl9tb2R1bGU7CiAgICBwcm90ZWN0ZWQgJGlzX3Byb3RlY3RlZDsKICAgIHByb3RlY3RlZCAkZmlsZXNfcGF0aDsKICAgIHByb3RlY3RlZCAkbW9kdWxlX2xvZ2ljOwogICAgcHJvdGVjdGVkICR0ZW1wbGF0ZXNfZGF0YTsKICAgIHByb3RlY3RlZCAkZXh0cmFfZmVhdHVyZXM7CgogICAgcHJvdGVjdGVkICRpc19tb2RpZmllZCA9IGZhbHNlOwogICAgcHJvdGVjdGVkICRpc19uZXcgPSB0cnVlOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdmFyID0gJ2dldCcgLiBzZWxmOjpDYW1lbGlzZSgkbmFtZSk7CiAgICAgICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCR0aGlzLCAkdmFyKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT4kdmFyKCk7CiAgICAgICAgICAgIH0gZWxzZWlmKGlzc2V0KCR0aGlzLT52YXJzWyRuYW1lXSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dmFyc1skbmFtZV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJQcm9wZXJ0eSAkbmFtZSBkb2VzIG5vdCBleGlzdCIpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIGF1ZGl0KCcnLCAnTUNGYWN0b3J5JywgJGUtPmdldE1lc3NhZ2UoKSk7CiAgICAgICAgfQoKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICBpZihpc3NldCgkdGhpcy0+dmFyc1skbmFtZV0pICYmICgkdGhpcy0+dmFyc1skbmFtZV0gIT09ICR2YWx1ZSkpCiAgICAgICAgewogICAgICAgICAgICAkdGhpcy0+aXNfbW9kaWZpZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+dmFyc1skbmFtZV0gPSAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG5hbWUKICAgICAqIEBwYXJhbSAkdmFsdWUKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPiRuYW1lICE9PSAkdmFsdWUpIHsKICAgICAgICAgICAgJHRoaXMtPiRuYW1lID0gJHZhbHVlOwogICAgICAgICAgICAkdGhpcy0+aXNfbW9kaWZpZWQgPSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRyYW5zZm9ybSBhIG5hbWUgaW4gQ2FtZWwgdmVyc2lvbgogICAgICogQHBhcmFtICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRnbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENhbWVsaXNlKCRuYW1lLCAkZ2x1ZSA9ICcnKQogICAgewogICAgICAgICR3b3JkcyA9IGV4cGxvZGUoJ18nLCAkbmFtZSk7CiAgICAgICAgZm9yZWFjaCAoJHdvcmRzIGFzICYkd29yZCkgewogICAgICAgICAgICAkd29yZCA9IHVjZmlyc3QoJHdvcmQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaW1wbG9kZSgkZ2x1ZSwgJHdvcmRzKTsKICAgIH0KCiAgICAvLyBHRVRURVIgRlVOQ1RJT05TCgoKCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TW9kdWxlTmFtZSgpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5tb2R1bGVfbmFtZSkpIHsKICAgICAgICAgICAgJHZhbHVlID0gcHJlZ19yZXBsYWNlKCcvXFcvJywgJyAnLCAkdGhpcy0+bW9kdWxlX2ZyaWVuZGx5bmFtZSk7CiAgICAgICAgICAgICR2YWx1ZSA9IHVjd29yZHMoc3RydG9sb3dlcigkdmFsdWUpKTsKICAgICAgICAgICAgJHZhbHVlID0gcHJlZ19yZXBsYWNlKCcvXHMvJywgJycsICR2YWx1ZSk7CiAgICAgICAgICAgICR0aGlzLT5zZXQoJ21vZHVsZV9uYW1lJywgc2VsZjo6Y2hlY2tNb2R1bGVOYW1lQXZhaWxhYmlsaXR5KCR2YWx1ZSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHRoaXMtPm1vZHVsZV9uYW1lOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldE1vZHVsZU5hbWUoKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjaGVja01vZHVsZU5hbWVBdmFpbGFiaWxpdHkoJG1vZHVsZV9uYW1lLCAkaXRlcmF0b3IgPSAwKQogICAgewogICAgICAgICRtb2R1bGUgPSAkbW9kdWxlX25hbWU7CiAgICAgICAgaWYgKCRpdGVyYXRvciA+IDApIHsKICAgICAgICAgICAgJG1vZHVsZSAuPSAkaXRlcmF0b3I7CiAgICAgICAgfQoKICAgICAgICBpZiAoY21zX3V0aWxzOjpnZXRfbW9kdWxlKCRtb2R1bGUpKSB7CiAgICAgICAgICAgICRpdGVyYXRvcisrOwogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y2hlY2tNb2R1bGVOYW1lQXZhaWxhYmlsaXR5KCRtb2R1bGVfbmFtZSwgJGl0ZXJhdG9yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJG1vZHVsZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZUZyaWVuZGx5bmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2R1bGVfZnJpZW5kbHluYW1lOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUaXRsZUxhYmVsKCkKICAgIHsKICAgICAgICByZXR1cm4gKCFlbXB0eSgkdGhpcy0+dGl0bGVfbGFiZWwpKSA/ICR0aGlzLT50aXRsZV9sYWJlbCA6ICdUaXRsZSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENyZWF0ZWRBdCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVhdGVkX2F0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDcmVhdGVkQnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlZF9ieTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBkYXRlZEF0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVwZGF0ZWRfYXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFVwZGF0ZWRCeSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51cGRhdGVkX2J5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHRyYUZpZWxkcygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRyYV9maWVsZHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE9sZEV4dHJhRmllbGRzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldFN0cnVjdHVyZSgpLT5nZXRPbGRTdHJ1Y3R1cmUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RydWN0dXJlKCkKICAgIHsKICAgICAgICBpZiAoIWlzX29iamVjdCgkdGhpcy0+c3RydWN0dXJlKSkgewogICAgICAgICAgICAkdGhpcy0+c3RydWN0dXJlID0gbmV3IE1DRk1vZHVsZVN0cnVjdHVyZSgkdGhpcy0+ZXh0cmFfZmllbGRzLCAkdGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+c3RydWN0dXJlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWxldGVGaWVsZHMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGVsZXRlX2ZpZWxkczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmlsdGVycygpCiAgICB7CiAgICAgICAgc29ydCgkdGhpcy0+ZmlsdGVycyk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWx0ZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJlbnRNb2R1bGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cGFyZW50X21vZHVsZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBvc3NpYmxlUGFyZW50c01vZHVsZShNQ0ZNb2R1bGUgJG1vZHVsZSkKICAgIHsKICAgICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoKICAgICAgICBpZiAoISRtb2R1bGUtPmlzTmV3KCkpIHsKICAgICAgICAgICAgJGMtPmFkZCgnaWQnLCAkbW9kdWxlLT5nZXRJZCgpLCBNQ0ZDcml0ZXJpYTo6Tk9UX0VRVUFMKTsKICAgICAgICB9CgogICAgICAgICRtb2R1bGVzID0gTUNGTW9kdWxlOjpkb1NlbGVjdCgkYyk7CgogICAgICAgICRwb3NzaWJsZV9wYXJlbnRzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkbW9kdWxlcyBhcyAkbW9kKSB7CiAgICAgICAgICAgICRwb3NzaWJsZV9wYXJlbnRzWyRtb2QtPmdldElkKCldID0gJG1vZC0+Z2V0TW9kdWxlRnJpZW5kbHlOYW1lKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcG9zc2libGVfcGFyZW50czsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGRNb2R1bGVzKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgICAgICRjLT5hZGQoJ3BhcmVudF9tb2R1bGUnLCAkdGhpcy0+Z2V0SWQoKSk7CiAgICAgICAgcmV0dXJuIHNlbGY6OmRvU2VsZWN0KCRjKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2hvd01vZHVsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zaG93X21vZHVsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QVBJRW5hYmxlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5hcGlfZW5hYmxlZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SXNVc2VyTW9kdWxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlzX3VzZXJfbW9kdWxlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJc1Byb3RlY3RlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pc19wcm90ZWN0ZWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpbGVzUGF0aCgpCiAgICB7CiAgICAgICAgLy8gQ291bGQgaGF2ZSBkZWZhdWx0IHBhdGggYnV0IGRhbmdlcm91cyBpZiB1c2VyIGRvIG5vdCBtb2RpZnkgaXQgd2hlbiBtb3ZpbmcgdGhlIHdlYnNpdGUuLi4KICAgICAgICByZXR1cm4gJHRoaXMtPmZpbGVzX3BhdGg7IC8vIEVtcHR5IHBhdGggbWVhbnMgJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ107CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZUxvZ2ljKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1vZHVsZV9sb2dpYzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGVtcGxhdGVzRGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZW1wbGF0ZXNfZGF0YTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWRtaW5TZWN0aW9uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFkbWluX3NlY3Rpb247CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEV4dHJhRmVhdHVyZXMoKQogICAgewogICAgICAgIGlmICghaXNfb2JqZWN0KCR0aGlzLT5leHRyYV9mZWF0dXJlcykpIHsKICAgICAgICAgICAgJHRoaXMtPmV4dHJhX2ZlYXR1cmVzID0gbmV3IE1DRkV4dHJhRmVhdHVyZXMoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5leHRyYV9mZWF0dXJlczsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBtb2R1bGUgaXMgbmV3CiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzTmV3KCkKICAgIHsKICAgICAgICByZXR1cm4gKGJvb2wpJHRoaXMtPmlzX25ldzsKICAgIH0KCiAgICAvLyBTRVRURVIgRlVOQ1RJT05TCgoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJZCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnNldCgnaWQnLCAkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNb2R1bGVOYW1lKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0KCdtb2R1bGVfbmFtZScsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE1vZHVsZUZyaWVuZGx5bmFtZSgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnNldCgnbW9kdWxlX2ZyaWVuZGx5bmFtZScsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE1vZHVsZVZlcnNpb24oJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ21vZHVsZV92ZXJzaW9uJywgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGl0bGVMYWJlbCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnNldCgndGl0bGVfbGFiZWwnLCAkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDcmVhdGVkQXQoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ2NyZWF0ZWRfYXQnLCAkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDcmVhdGVkQnkoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ2NyZWF0ZWRfYnknLCAkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVcGRhdGVkQXQoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ3VwZGF0ZWRfYXQnLCAkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVcGRhdGVkQnkoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ3VwZGF0ZWRfYnknLCAkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICR2YWx1ZQogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNob3dNb2R1bGUoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zaG93X21vZHVsZSA9ICR2YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkdmFsdWUKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJc1VzZXJNb2R1bGUoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5pc191c2VyX21vZHVsZSA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QVBJRW5hYmxlZCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnNldCgnYXBpX2VuYWJsZWQnLCAkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRJc1Byb3RlY3RlZCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnNldCgnaXNfcHJvdGVjdGVkJywgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RmlsZXNQYXRoKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0KCdmaWxlc19wYXRoJywgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TW9kdWxlTG9naWMoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ21vZHVsZV9sb2dpYycsICR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFRlbXBsYXRlc0RhdGEoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ3RlbXBsYXRlc19kYXRhJywgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0QWRtaW5TZWN0aW9uKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0KCdhZG1pbl9zZWN0aW9uJywgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RXh0cmFGaWVsZHMoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXRFeHRyYU9sZEZpZWxkcygkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRTdHJ1Y3R1cmUoJHZhbHVlKQogICAgewogICAgICAgIGlmIChlbXB0eSgkdmFsdWUpKSB7CiAgICAgICAgICAgICRzdHJ1Y3R1cmUgPSBuZXcgTUNGTW9kdWxlU3RydWN0dXJlKCR0aGlzLT5leHRyYV9maWVsZHMsICR0aGlzKTsKICAgICAgICAgICAgJHZhbHVlID0gJHN0cnVjdHVyZTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19vYmplY3QoJHZhbHVlKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0KCdzdHJ1Y3R1cmUnLCAkdmFsdWUpOwogICAgICAgIH0gZWxzZWlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICRzdHJ1Y3R1cmUgPSBuZXcgTUNGTW9kdWxlU3RydWN0dXJlKCR2YWx1ZSwgJHRoaXMpOwogICAgICAgICAgICAkdGhpcy0+c2V0KCdzdHJ1Y3R1cmUnLCAkc3RydWN0dXJlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc3RydWN0dXJlID0gbmV3IE1DRk1vZHVsZVN0cnVjdHVyZSh1bnNlcmlhbGl6ZSgkdmFsdWUpLCAkdGhpcyk7CiAgICAgICAgICAgICR0aGlzLT5zZXQoJ3N0cnVjdHVyZScsICRzdHJ1Y3R1cmUpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RXh0cmFGZWF0dXJlcygkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX29iamVjdCgkdmFsdWUpKSB7CiAgICAgICAgICAgICR0aGlzLT5leHRyYV9mZWF0dXJlcyA9ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4dHJhT2xkRmllbGRzKCR2YWx1ZSkKICAgIHsKCiAgICAgICAgLy8gREVQUkVDQVRFRCBTRUUgTU9EVUxFIFNUUlVDVFVSRSBJTlNURUFEICEhIQogICAgICAgICRibGFja2xpc3QgPSBhcnJheSgnaWQnLCAncGFyZW50X2lkJywgJ3RpdGxlJywgJ2NyZWF0ZWRfYXQnLCAnY3JlYXRlZF9ieScsICd1cGRhdGVkX2F0JywgJ3VwZGF0ZWRfYnknLCAnb3JkZXJfYnknLCAncGFyZW50JywgJ3BhcmVudF9tb2R1bGUnLCAncHVibGlzaGVkJywgJ29yZGVyJywgJ29yZGVyX2J5JywgJ2Zyb20nLCAnc2VsZWN0JywgJ2luJywgJ2RhdGUnLCAnZnVsbF90ZXh0X3NlYXJjaCcsICdjb3JlX3NsdWcnLCAnY29yZXNsdWcnLCAndXNlcl9pZCcsICdmdW5jdGlvbicsICdieWlkJywgJ2pzb24nLCAnYXNhcnJheScsICdzZWFyY2hzdHJpbmcnLCAnZ3JvdXAnLCAnYnknLCAnc2VuZF9pbW1lZGlhdGVfdXBkYXRlJyk7CiAgICAgICAgJGZpbHRlciA9IGFycmF5KCk7CiAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlIGFzICRmaWVsZCkgewogICAgICAgICAgICAgICAgLy8gUmVzZXJ2ZSBtY2ZpXyBmb3IgaW50ZXJuYWwgdXNlIG9ubHkKICAgICAgICAgICAgICAgICRmaWVsZFsnbmFtZSddID0gc3RyX3JlcGxhY2UoJ21jZmlfJywgJ21jZl8nLCAkZmllbGRbJ25hbWUnXSk7CiAgICAgICAgICAgICAgICAvLyBHZXQgbGFiZWwgZnJvbSBuYW1lIGlmIHVuZGVmaW5lZAogICAgICAgICAgICAgICAgaWYgKCgkZmllbGRbJ2xhYmVsJ10pID09ICcnKSB7CiAgICAgICAgICAgICAgICAgICAgJGZpZWxkWydsYWJlbCddID0gJGZpZWxkWyduYW1lJ107CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goIi9bQS1aXS8iLCAkZmllbGRbJ25hbWUnXSkgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAkZmllbGRbJ3VwcGVyY2FzZV9uYW1lJ10gPSAkZmllbGRbJ25hbWUnXTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkZmllbGRbJ25hbWUnXSA9IHByZWdfcmVwbGFjZSgnL1xXLycsICcnLCBzdHJ0b2xvd2VyKCRmaWVsZFsnbmFtZSddKSk7CgogICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmllbGRbJ25hbWUnXSkpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWluX2FycmF5KCRmaWVsZFsnbmFtZSddLCAkYmxhY2tsaXN0KSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZmlsdGVyW10gPSAkZmllbGQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZpZWxkWyduYW1lJ10gPSAnbWNmXycgLiAkZmllbGRbJ25hbWUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGZpbHRlcltdID0gJGZpZWxkOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdGhpcy0+c2V0KCdleHRyYV9maWVsZHMnLCAkZmlsdGVyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3JkZXJFeHRyYUZpZWxkcygkaWQsICRkaXJlY3Rpb24pCiAgICB7CiAgICAgICAgJGZpZWxkcyA9ICR0aGlzLT5nZXRPbGRFeHRyYUZpZWxkcygpOwogICAgICAgIGlmICgkZGlyZWN0aW9uID09ICd1cCcpIHsKICAgICAgICAgICAgJGlkMSA9ICRpZDsKICAgICAgICAgICAgJGlkMiA9ICRpZCAtIDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGRpcmVjdGlvbiA9PSAnZG93bicpIHsKICAgICAgICAgICAgJGlkMSA9ICRpZDsKICAgICAgICAgICAgJGlkMiA9ICRpZCArIDE7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGZpZWxkc1skaWQxXSkgJiYgaXNzZXQoJGZpZWxkc1skaWQyXSkpIHsKICAgICAgICAgICAgJGZpZWxkMSA9ICRmaWVsZHNbJGlkMV07CiAgICAgICAgICAgICRmaWVsZDIgPSAkZmllbGRzWyRpZDJdOwogICAgICAgICAgICAkZmllbGRzWyRpZDFdID0gJGZpZWxkMjsKICAgICAgICAgICAgJGZpZWxkc1skaWQyXSA9ICRmaWVsZDE7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5zZXQoJ2V4dHJhX2ZpZWxkcycsICRmaWVsZHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREZWxldGVGaWVsZHMoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5zZXQoJ2RlbGV0ZV9maWVsZHMnLCAkdmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRGaWx0ZXJzKCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICBmb3JlYWNoICgkdmFsdWUgYXMgJiRmaWx0ZXIpIHsKICAgICAgICAgICAgICAgICRmaWx0ZXJbJ25hbWUnXSA9IHByZWdfcmVwbGFjZSgnL1xXLycsICcnLCAkZmlsdGVyWyduYW1lJ10pOwogICAgICAgICAgICAgICAgJGZpbHRlclsnZmllbGQnXSA9IHByZWdfcmVwbGFjZSgnL1xXLycsICcnLCAkZmlsdGVyWydmaWVsZCddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkdGhpcy0+c2V0KCdmaWx0ZXJzJywgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyZW50TW9kdWxlKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0KCdwYXJlbnRfbW9kdWxlJywgJHZhbHVlKTsKICAgICAgICBpZiAoJHZhbHVlID4gMCkgewogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHRoaXMtPmZpbHRlcnMpKSB7CiAgICAgICAgICAgICAgICAkZXhpc3RzID0gZmFsc2U7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZmlsdGVycyBhcyAkZmlsdGVyKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaWx0ZXJbJ25hbWUnXSA9PSAncGFyZW50X2l0ZW0nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRleGlzdHMgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkZXhpc3RzID09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZpbHRlcnNbXSA9IGFycmF5KCduYW1lJyA9PiAncGFyZW50X2l0ZW0nLCAnZmllbGQnID0+ICdwYXJlbnRfaXRlbScsICd0eXBlJyA9PiAnZXF1YWwnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvLyBQcm9wZXJ0aWVzCgogICAgcHVibGljIGZ1bmN0aW9uIGhhc0ZpZWxkV2l0aFR5cGUoJGZpZWxkX3R5cGUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYXNGaWVsZFdpdGhUeXBlcyhhcnJheSgkZmllbGRfdHlwZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNGaWVsZFdpdGhUeXBlcyhBcnJheSAkZmllbGRfdHlwZXMpCiAgICB7CiAgICAgICAgJHJldHVybiA9IGZhbHNlOwoKICAgICAgICBmb3JlYWNoICgkZmllbGRfdHlwZXMgYXMgJGZpZWxkX3R5cGUpIHsKICAgICAgICAgICAgJHJldHVybiA9ICRyZXR1cm4gfHwgJHRoaXMtPmdldFN0cnVjdHVyZSgpLT5oYXNGaWVsZFdpdGhUeXBlKCRmaWVsZF90eXBlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZHNXaXRoVHlwZXMoQXJyYXkgJGZpZWxkc190eXBlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0U3RydWN0dXJlKCktPmdldEZpZWxkc1dpdGhUeXBlcygkZmllbGRzX3R5cGUpOwogICAgfQoKICAgIC8vIE9USEVSIEZVTkNUSU9OUwoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICogQGRlcHJlY2F0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZpZWxkVHlwZXMoKQogICAgewogICAgICAgIHJldHVybiBNQ0ZNb2R1bGVGaWVsZDo6Z2V0RmllbGRUeXBlcygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWx0ZXJUeXBlcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICAnZXF1YWwnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICdlcXVhbCcsCiAgICAgICAgICAgICAgICAnbGFiZWwnID0+ICdFcXVhbCcsCiAgICAgICAgICAgICAgICAnY3JpdGVyaWEnID0+ICdFUVVBTCcKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ25vdF9lcXVhbCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ25vdF9lcXVhbCcsCiAgICAgICAgICAgICAgICAnbGFiZWwnID0+ICdOb3QgZXF1YWwnLAogICAgICAgICAgICAgICAgJ2NyaXRlcmlhJyA9PiAnTk9UX0VRVUFMJwogICAgICAgICAgICApLAogICAgICAgICAgICAnbGlrZScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ2xpa2UnLAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnTGlrZSAod2l0aG91dCB3aWxkY2FyZCAlKScsCiAgICAgICAgICAgICAgICAnY3JpdGVyaWEnID0+ICdMSUtFJwogICAgICAgICAgICApLAogICAgICAgICAgICAnbGlrZV93aWxkJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnbGlrZV93aWxkJywKICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0xpa2UgKHdpdGggd2lsZGNhcmQgJSknLAogICAgICAgICAgICAgICAgJ2NyaXRlcmlhJyA9PiAnTElLRScKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ211bHRpbGlrZV93aWxkJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnbXVsdGlsaWtlX3dpbGQnLAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnTGlzdCBNdWx0aXBsZSBMaWtlJywKICAgICAgICAgICAgICAgICdjcml0ZXJpYScgPT4gJ01VTFRJTElLRScKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ211bHRpbm90bGlrZV93aWxkJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnbXVsdGlub3RsaWtlX3dpbGQnLAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnTGlzdCBNdWx0aXBsZSBOb3QgTGlrZScsCiAgICAgICAgICAgICAgICAnY3JpdGVyaWEnID0+ICdNVUxUSU5PVExJS0UnCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdpbicgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ2luJywKICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0luIGxpc3QgKHNlcGFyYXRlZCB3aXRoICIsIiknLAogICAgICAgICAgICAgICAgJ2NyaXRlcmlhJyA9PiAnSU4nCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdsZXNzJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnbGVzcycsCiAgICAgICAgICAgICAgICAnbGFiZWwnID0+ICdMZXNzIHRoYW4nLAogICAgICAgICAgICAgICAgJ2NyaXRlcmlhJyA9PiAnTEVTU19USEFOJwogICAgICAgICAgICApLAogICAgICAgICAgICAnbGVzc19lcXVhbCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ2xlc3NfZXF1YWwnLAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnRXF1YWwgb3IgbGVzcyB0aGFuJywKICAgICAgICAgICAgICAgICdjcml0ZXJpYScgPT4gJ0xFU1NfRVFVQUwnCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdncmVhdGVyJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAnZ3JlYXRlcicsCiAgICAgICAgICAgICAgICAnbGFiZWwnID0+ICdHcmVhdGVyIHRoYW4nLAogICAgICAgICAgICAgICAgJ2NyaXRlcmlhJyA9PiAnR1JFQVRFUl9USEFOJwogICAgICAgICAgICApLAogICAgICAgICAgICAnZ3JlYXRlcl9lcXVhbCcgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ2dyZWF0ZXJfZXF1YWwnLAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnRXF1YWwgb3IgZ3JlYXRlciB0aGFuJywKICAgICAgICAgICAgICAgICdjcml0ZXJpYScgPT4gJ0dSRUFURVJfRVFVQUwnCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdub3RfZW1wdHknID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICdub3RfZW1wdHknLAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnTm90IGVtcHR5JywKICAgICAgICAgICAgICAgICdjcml0ZXJpYScgPT4gJ0lTTk9URU1QVFknCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdlbXB0eScgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ2VtcHR5JywKICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ0VtcHR5JywKICAgICAgICAgICAgICAgICdjcml0ZXJpYScgPT4gJ0lTRU1QVFknCiAgICAgICAgICAgICksCiAgICAgICAgICAgICd1cGNvbWluZycgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ3VwY29taW5nJywKICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ1VwY29taW5nIGRhdGUnLAogICAgICAgICAgICAgICAgJ2NyaXRlcmlhJyA9PiAnVVBDT01JTkcnCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdwYXN0JyA9PiBhcnJheSgKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAncGFzdCcsCiAgICAgICAgICAgICAgICAnbGFiZWwnID0+ICdQYXN0IGRhdGUnLAogICAgICAgICAgICAgICAgJ2NyaXRlcmlhJyA9PiAnUEFTVCcKICAgICAgICAgICAgKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHBvcHVsYXRlRnJvbUFycmF5KGFycmF5ICRwYXJhbXMsICRtb2RpZmllZCA9IHRydWUpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2lkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRJZCgkcGFyYW1zWydpZCddKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ21vZHVsZV9uYW1lJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRNb2R1bGVOYW1lKCRwYXJhbXNbJ21vZHVsZV9uYW1lJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snbW9kdWxlX2ZyaWVuZGx5bmFtZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0TW9kdWxlRnJpZW5kbHluYW1lKCRwYXJhbXNbJ21vZHVsZV9mcmllbmRseW5hbWUnXSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydtb2R1bGVfdmVyc2lvbiddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0TW9kdWxlVmVyc2lvbigkcGFyYW1zWydtb2R1bGVfdmVyc2lvbiddKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3RpdGxlX2xhYmVsJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRUaXRsZUxhYmVsKCRwYXJhbXNbJ3RpdGxlX2xhYmVsJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snY3JlYXRlZF9ieSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0Q3JlYXRlZEJ5KCRwYXJhbXNbJ2NyZWF0ZWRfYnknXSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydjcmVhdGVkX2F0J10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRDcmVhdGVkQXQoJHBhcmFtc1snY3JlYXRlZF9hdCddKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3VwZGF0ZWRfYnknXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFVwZGF0ZWRCeSgkcGFyYW1zWyd1cGRhdGVkX2J5J10pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1sndXBkYXRlZF9hdCddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0VXBkYXRlZEF0KCRwYXJhbXNbJ3VwZGF0ZWRfYXQnXSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydleHRyYV9maWVsZHMnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldEV4dHJhRmllbGRzKCRwYXJhbXNbJ2V4dHJhX2ZpZWxkcyddKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+c2V0RXh0cmFGaWVsZHMoYXJyYXkoKSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydzdHJ1Y3R1cmUnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFN0cnVjdHVyZSgkcGFyYW1zWydzdHJ1Y3R1cmUnXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8kdGhpcy0+c2V0U3RydWN0dXJlKGFycmF5KCkpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snZGVsZXRlX2ZpZWxkcyddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0RGVsZXRlRmllbGRzKCRwYXJhbXNbJ2RlbGV0ZV9maWVsZHMnXSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydmaWx0ZXJzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRGaWx0ZXJzKCRwYXJhbXNbJ2ZpbHRlcnMnXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnNldEZpbHRlcnMoYXJyYXkoKSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydwYXJlbnRfbW9kdWxlJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRQYXJlbnRNb2R1bGUoJHBhcmFtc1sncGFyZW50X21vZHVsZSddKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3Nob3dfbW9kdWxlJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRTaG93TW9kdWxlKCRwYXJhbXNbJ3Nob3dfbW9kdWxlJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snYXBpX2VuYWJsZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldEFQSUVuYWJsZWQoJHBhcmFtc1snYXBpX2VuYWJsZWQnXSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydpc191c2VyX21vZHVsZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0SXNVc2VyTW9kdWxlKCRwYXJhbXNbJ2lzX3VzZXJfbW9kdWxlJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snaXNfcHJvdGVjdGVkJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRJc1Byb3RlY3RlZCgkcGFyYW1zWydpc19wcm90ZWN0ZWQnXSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydmaWxlc19wYXRoJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRGaWxlc1BhdGgoJHBhcmFtc1snZmlsZXNfcGF0aCddKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ21vZHVsZV9sb2dpYyddKSkgewogICAgICAgICAgICAkdGhpcy0+c2V0TW9kdWxlTG9naWMoJHBhcmFtc1snbW9kdWxlX2xvZ2ljJ10pOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGVzX2RhdGEnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnNldFRlbXBsYXRlc0RhdGEoJHBhcmFtc1sndGVtcGxhdGVzX2RhdGEnXSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWydhZG1pbl9zZWN0aW9uJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRBZG1pblNlY3Rpb24oJHBhcmFtc1snYWRtaW5fc2VjdGlvbiddKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2V4dHJhX2ZlYXR1cmVzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeHRyYUZlYXR1cmVzKCRwYXJhbXNbJ2V4dHJhX2ZlYXR1cmVzJ10pOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmlzX25ldyA9IGZhbHNlOwoKICAgICAgICBpZiAoISRtb2RpZmllZCkgewogICAgICAgICAgICAkdGhpcy0+aXNfbW9kaWZpZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLy8gREFUQUJBU0UgRlVOQ1RJT05TCgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCeUlkKCRpZCkKICAgIHsKICAgICAgICAkc3FsID0gJ1NFTEVDVCAqIEZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMKCQkJV0hFUkUgaWQgPSA/JzsKICAgICAgICAkdmFsdWVzID0gYXJyYXkoJGlkKTsKICAgICAgICAkcmVzdWx0ID0gc2VsZjo6cXVlcnkoJHNxbCwgJHZhbHVlcyk7CiAgICAgICAgaWYgKCRyZXN1bHQgJiYgJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgICAgICAgJG1vZHVsZSA9IG5ldyBzZWxmKCk7CiAgICAgICAgICAgICRtb2R1bGUtPnBvcHVsYXRlRnJvbUFycmF5KCRyb3cpOwogICAgICAgICAgICByZXR1cm4gJG1vZHVsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcXVlcnkoJHNxbCwgJHZhbHVlcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKICAgICAgICByZXR1cm4gJGRiLT5leGVjdXRlKCRzcWwsICR2YWx1ZXMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZG9TZWxlY3QoTUNGQ3JpdGVyaWEgJGMpCiAgICB7CgogICAgICAgIHJldHVybiBNQ0ZNb2R1bGVSZXBvc2l0b3J5Ojpkb1NlbGVjdCgkYyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb1NlbGVjdE9uZShNQ0ZDcml0ZXJpYSAkYykKICAgIHsKICAgICAgICByZXR1cm4gTUNGTW9kdWxlUmVwb3NpdG9yeTo6ZG9TZWxlY3RPbmUoJGMpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV0cmlldmVCeVBrKCRwaykKICAgIHsKICAgICAgICByZXR1cm4gTUNGTW9kdWxlUmVwb3NpdG9yeTo6cmV0cmlldmVCeVBrKCRwayk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkKICAgIHsKICAgICAgICAkdGhpcy0+aXNfbW9kaWZpZWQgPSB0cnVlOwogICAgICAgICR0aGlzLT5zYXZlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKQogICAgewogICAgICAgIGlmIChlbXB0eSgkdGhpcy0+aWQpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+aW5zZXJ0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT51cGRhdGUoKTsKICAgICAgICB9CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGluc2VydCgpCiAgICB7CiAgICAgICAgJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKICAgICAgICAkdGhpcy0+c2V0SWQoJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzX3NlcScpKTsKICAgICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMKCQkJU0VUIGlkID0gPywKCQkJCW1vZHVsZV9uYW1lID0gPywKCQkJCW1vZHVsZV9mcmllbmRseW5hbWUgPSA/LAoJCQkJbW9kdWxlX3ZlcnNpb24gPSAxLAoJCQkJdGl0bGVfbGFiZWwgPSA/LAoJCQkJY3JlYXRlZF9ieSA9ID8sCgkJCQljcmVhdGVkX2F0ID0gTk9XKCksCgkJCQl1cGRhdGVkX2J5ID0gPywKCQkJCXVwZGF0ZWRfYXQgPSBOT1coKSwKCQkJCWV4dHJhX2ZpZWxkcyA9ID8sCgkJCQlzdHJ1Y3R1cmUgPSA/LAoJCQkJZmlsdGVycyA9ID8sCgkJCQlwYXJlbnRfbW9kdWxlID0gPywKCQkJCXNob3dfbW9kdWxlID0gPywKCQkJCWFwaV9lbmFibGVkID0gPywKCQkJCWlzX3VzZXJfbW9kdWxlID0gPywKCQkJCWlzX3Byb3RlY3RlZCA9ID8sCgkJCQlmaWxlc19wYXRoID0gPywKCQkJCW1vZHVsZV9sb2dpYyA9ID8sCgkJCQl0ZW1wbGF0ZXNfZGF0YSA9ID8sCgkJCQlhZG1pbl9zZWN0aW9uID0gPywKCQkJCWV4dHJhX2ZlYXR1cmVzID0gPwoJCQkJJzsKICAgICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgKICAgICAgICAgICAgJHRoaXMtPmdldElkKCksCiAgICAgICAgICAgICR0aGlzLT5nZXRNb2R1bGVOYW1lKCksCiAgICAgICAgICAgICR0aGlzLT5nZXRNb2R1bGVGcmllbmRseW5hbWUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFRpdGxlTGFiZWwoKSwKICAgICAgICAgICAgZ2V0X3VzZXJpZCgpLAogICAgICAgICAgICBnZXRfdXNlcmlkKCksCiAgICAgICAgICAgIHNlcmlhbGl6ZSgkdGhpcy0+Z2V0U3RydWN0dXJlKCktPmdldE9sZFN0cnVjdHVyZSgpKSwKICAgICAgICAgICAgc2VyaWFsaXplKCR0aGlzLT5nZXRTdHJ1Y3R1cmUoKS0+Z2V0U3RydWN0dXJlKCkpLAogICAgICAgICAgICBzZXJpYWxpemUoJHRoaXMtPmdldEZpbHRlcnMoKSksCiAgICAgICAgICAgICR0aGlzLT5nZXRQYXJlbnRNb2R1bGUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFNob3dNb2R1bGUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEFQSUVuYWJsZWQoKSwKICAgICAgICAgICAgJHRoaXMtPmdldElzVXNlck1vZHVsZSgpLAogICAgICAgICAgICAkdGhpcy0+Z2V0SXNQcm90ZWN0ZWQoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEZpbGVzUGF0aCgpLAogICAgICAgICAgICAkdGhpcy0+Z2V0TW9kdWxlTG9naWMoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFRlbXBsYXRlc0RhdGEoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEFkbWluU2VjdGlvbigpLAogICAgICAgICAgICBzZXJpYWxpemUoJHRoaXMtPmdldEV4dHJhRmVhdHVyZXMoKSkKICAgICAgICApKTsKICAgICAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCdTRUxFQ1QgTEFTVF9JTlNFUlRfSUQoKSBBUyBpZCcpOwogICAgICAgICRyb3cgPSAkcmVzdWx0LT5GZXRjaFJvdygpOwogICAgICAgICR0aGlzLT5zZXRJZCgkcm93WydpZCddKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdXBkYXRlKCkKICAgIHsKICAgICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwovLyAgICAgICAgJHRoaXMtPnNldE1vZHVsZVZlcnNpb24oJHRoaXMtPmdldE1vZHVsZVZlcnNpb24oKSArIDEpOwogICAgICAgICRxdWVyeSA9ICdVUERBVEUgJyAuIGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMKCQkJU0VUIG1vZHVsZV9uYW1lID0gPywKCQkJCW1vZHVsZV9mcmllbmRseW5hbWUgPSA/LAoJCQkJbW9kdWxlX3ZlcnNpb24gPSA/LAoJCQkJdGl0bGVfbGFiZWwgPSA/LAoJCQkJdXBkYXRlZF9ieSA9ID8sCgkJCQl1cGRhdGVkX2F0ID0gTk9XKCksCgkJCQlleHRyYV9maWVsZHMgPSA/LAoJCQkJc3RydWN0dXJlID0gPywKCQkJCWZpbHRlcnMgPSA/LAoJCQkJcGFyZW50X21vZHVsZSA9ID8sCgkJCQlzaG93X21vZHVsZSA9ID8sCgkJCQlhcGlfZW5hYmxlZCA9ID8sCgkJCQlpc191c2VyX21vZHVsZSA9ID8sCgkJCQlpc19wcm90ZWN0ZWQgPSA/LAoJCQkJZmlsZXNfcGF0aCA9ID8sCgkJCQltb2R1bGVfbG9naWMgPSA/LAoJCQkJdGVtcGxhdGVzX2RhdGEgPSA/LAoJCQkJYWRtaW5fc2VjdGlvbiA9ID8sCgkJCQlleHRyYV9mZWF0dXJlcyA9ID8KCQkJV0hFUkUgaWQgPSA/JzsKICAgICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgKICAgICAgICAgICAgJHRoaXMtPmdldE1vZHVsZU5hbWUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldE1vZHVsZUZyaWVuZGx5bmFtZSgpLAogICAgICAgICAgICAkdGhpcy0+Z2V0TW9kdWxlVmVyc2lvbigpLAogICAgICAgICAgICAkdGhpcy0+Z2V0VGl0bGVMYWJlbCgpLAogICAgICAgICAgICBnZXRfdXNlcmlkKCksCiAgICAgICAgICAgIHNlcmlhbGl6ZSgkdGhpcy0+Z2V0U3RydWN0dXJlKCktPmdldE9sZFN0cnVjdHVyZSgpKSwKICAgICAgICAgICAgc2VyaWFsaXplKCR0aGlzLT5nZXRTdHJ1Y3R1cmUoKS0+Z2V0U3RydWN0dXJlKCkpLAogICAgICAgICAgICBzZXJpYWxpemUoJHRoaXMtPmdldEZpbHRlcnMoKSksCiAgICAgICAgICAgICR0aGlzLT5nZXRQYXJlbnRNb2R1bGUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFNob3dNb2R1bGUoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEFQSUVuYWJsZWQoKSwKICAgICAgICAgICAgJHRoaXMtPmdldElzVXNlck1vZHVsZSgpLAogICAgICAgICAgICAkdGhpcy0+Z2V0SXNQcm90ZWN0ZWQoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEZpbGVzUGF0aCgpLAogICAgICAgICAgICAkdGhpcy0+Z2V0TW9kdWxlTG9naWMoKSwKICAgICAgICAgICAgJHRoaXMtPmdldFRlbXBsYXRlc0RhdGEoKSwKICAgICAgICAgICAgJHRoaXMtPmdldEFkbWluU2VjdGlvbigpLAogICAgICAgICAgICBzZXJpYWxpemUoJHRoaXMtPmdldEV4dHJhRmVhdHVyZXMoKSksCiAgICAgICAgICAgICR0aGlzLT5nZXRJZCgpCiAgICAgICAgKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5nZXRJZCgpKSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdERUxFVEUgRlJPTSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlcyBXSEVSRSBpZCA9ID8nOwogICAgICAgICAgICAkdGhpcy0+cXVlcnkoJHF1ZXJ5LCBhcnJheSgkdGhpcy0+Z2V0SWQoKSkpOwoKICAgICAgICAgICAgLy8gRXJhc2UgYWN0aW9ucwogICAgICAgICAgICAkYWN0aW9ucyA9IE1DRk1vZHVsZUFjdGlvbjo6ZG9TZWxlY3QoYXJyYXkoJ3doZXJlJyA9PiBhcnJheSgnbW9kdWxlX2lkJyA9PiAkdGhpcy0+Z2V0SWQoKSkpKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGFjdGlvbnMgYXMgJGFjdGlvbikgewogICAgICAgICAgICAgICAgJGFjdGlvbi0+ZGVsZXRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdWJsaXNoKCkKICAgIHsKICAgICAgICAkZ2VuZXJhdG9yID0gbmV3IE1DRkdlbmVyYXRvcigkdGhpcyk7CiAgICAgICAgcmV0dXJuICRnZW5lcmF0b3ItPnB1Ymxpc2goKTsKICAgIH0KCn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFModuleAction.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBNQ0ZNb2R1bGVBY3Rpb24gQ2xhc3MKICogCiAqIFRoaXMgY2xhc3MgaGFuZGxlIGFsbCB0aGUgbWFuaXB1bGF0aW9ucyBvbiB0aGUgTSZDIEZhY3RvcnkgTW9kdWxlIGFjdGlvbiBvYmplY3QKICogCiAqLwoKY2xhc3MgTUNGTW9kdWxlQWN0aW9uIC8vZXh0ZW5kcwlDbXNPYmplY3QgCnsKCQoJcHJvdGVjdGVkICRpZDsJCglwcm90ZWN0ZWQgJGlzX21vZGlmaWVkOwkKCXByb3RlY3RlZCAkdmFycyA9IGFycmF5KCk7CgkKCXByb3RlY3RlZCBzdGF0aWMgJGZpZWxkcyA9IGFycmF5KAoJJ25hbWUnLAoJJ21vZHVsZV9pZCcsCgknY29kZScsCQoJJ2lzX3B1YmxpYycsCgknaGF2ZV9wZXJtaXNzaW9uJywKCSdidXR0b25fbmFtZScsCgknYnV0dG9uJwoJKTsKCQoJcHVibGljIHN0YXRpYyAkYnV0dG9uX3BsYWNlcyA9IGFycmF5KAogICAgJ29wdGlvbnNfdG9wJyA9PiAnSW4gdGhlIG9wdGlvbnMgdGFiIG9uIHRoZSB0b3AnLAogICAgJ29wdGlvbnNfYm90dG9tJyA9PiAnSW4gdGhlIG9wdGlvbnMgdGFiIG9uIHRoZSBib3R0b20nLAogICAgJ2l0ZW1zX3RvcCcgPT4gJ0luIHRoZSBpdGVtcyB0YWIgb24gdGhlIHRvcCcsCiAgICAnaXRlbXNfYm90dG9tJyA9PiAnSW4gdGhlIGl0ZW1zIHRhYiBvbiB0aGUgYm90dG9tJywKICAgICdmaWx0ZXJzJyA9PiAnTmVhciB0aGUgZmlsdGVycycKCSk7CgkKCS8vIFRPRE86IFRocm93IGEgd2FybmluZyBlcnJvciB3aGVuIHVzZXIgdHJ5IHRvIHVzZSB0aGF0CglwdWJsaWMgc3RhdGljICRmb3JiaWRlbl9uYW1lcyA9IGFycmF5KAoJCSdhc3NpZ250aXRsZXMnLCdjb3VudCcsJ2RlZmF1bHQnLCdkZWZhdWx0YWRtaW4nLCdkZWxldGUnLCdkZWxldGV0ZW1wbGF0ZScsJ2RldGFpbCcsJ2VkaXQnLCdlZGl0dGVtcGxhdGUnLAoJCSdleHBvcnQnLCdnZXR1cmwnLCdpY2FsJywnY2FsZW5kYXInLCdsaW5rX3RvJywnbW92ZWRvd24nLCdtb3ZldXAnLCdwdWJsaXNoJywncnNzJywnc2VhcmNoJywndGFnY2xvdWQnLAoJCSd0ZW1wbGF0ZScsJ3RlbXBsYXRlX2RlbGV0ZScsJ3RlbXBsYXRlX2VkaXQnLCd1cGRhdGVPYmplY3RzJywndXJsX2ZvcicsJ3VzZXJfZm9ybScsJ3VzZXInLCdmaWxlJywnaW1nJwoJKTsKCQoJY29uc3QgREJfTkFNRSA9ICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZV9hY3Rpb25zJzsKCWNvbnN0IERCX0lURU0gPSAnbW9kdWxlX2FjdGlvbic7CgkJCglwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCgl7CgkJdHJ5CgkJewoJCQlyZXR1cm4gKHN0cmluZykJJHRoaXMtPm5hbWU7CgkJfQoJCWNhdGNoKEV4Y2VwdGlvbiAkZSkKCQl7CgkJCXByaW50KCRlKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gX19zZXQoJHZhciwgJHZhbCl7CiAgICAgICR0aGlzLT52YXJzWyR2YXJdID0gJHZhbDsKCQkJJHRoaXMtPmlzX21vZGlmaWVkID0gdHJ1ZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkdmFyKXsKCQkkbWV0aG9kID0gJ2dldF8nLiR2YXI7CgkJaWYobWV0aG9kX2V4aXN0cygkdGhpcywgJG1ldGhvZCkpCgkJewoJCQlyZXR1cm4gJHRoaXMtPiRtZXRob2QoKTsKCQl9CiAgICBlbHNlaWYgKGFycmF5X2tleV9leGlzdHMoJHZhciwgJHRoaXMtPnZhcnMpKQoJCXsKICAgICAgcmV0dXJuICR0aGlzLT52YXJzWyR2YXJdOwogICAgfSAKCQllbHNlCgkJewogICAgCXJldHVybiBudWxsOwoJCQkvL3Rocm93IG5ldyBFeGNlcHRpb24oIlByb3BlcnR5ICR2YXIgZG9lcyBub3QgZXhpc3QiKTsKICAgIH0KICB9CgoJcHVibGljIGZ1bmN0aW9uIF9fY2xvbmUoKQoJewoJCSR0aGlzLT5pZCA9IG51bGw7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCgl7CgkJcmV0dXJuICR0aGlzLT5pZDsKCX0KCQoJcHVibGljIGZ1bmN0aW9uIGNoZWNrTmFtZSgpCgl7CgkJaWYgKGluX2FycmF5KCR0aGlzLT5uYW1lLCBzZWxmOjokZm9yYmlkZW5fbmFtZXMpKSB7CgkJCQlyZXR1cm4gZmFsc2U7IC8vIE1lYW5pbmcgeW91IENBTidUIHVzZSB0aGlzIG5hbWUKCQl9CgkJCgkJJGN1cnJlbnRzID0gc2VsZjo6ZG9TZWxlY3QoYXJyYXkoJ3doZXJlJyA9PiBhcnJheSgnbmFtZScgPT4gJHRoaXMtPm5hbWUsICdtb2R1bGVfaWQnID0+ICR0aGlzLT5tb2R1bGVfaWQpKSk7CgkJaWYgKGNvdW50KCRjdXJyZW50cykgPiAxKQoJCXsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlaWYoY291bnQoJGN1cnJlbnRzKSA8IDEpCgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKCRjdXJyZW50c1swXS0+Z2V0SWQoKSA9PSAkdGhpcy0+Z2V0SWQoKSkKCQkJewoJCQkJcmV0dXJuIHRydWU7IC8vIE5vIGR1cGxpY2F0ZSwgYnV0IGl0J3MgdGhlIHNhbWUKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xlYW5Db2RlKCkKCXsKCSAgaWYoc3RycG9zKCR0aGlzLT5jb2RlLCAnPD9waHAnKSA9PT0gMCkKCSAgewoJICAgIHJldHVybiAnPz4nLiR0aGlzLT5jb2RlOwoJICB9CgkgIGVsc2UKCSAgewoJICAgIHJldHVybiAkdGhpcy0+Y29kZTsKCSAgfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gY2xlYW51cE5hbWUoKQoJewoJCSR0aGlzLT5uYW1lID0gcHJlZ19yZXBsYWNlKCcvXFcvJywgJycsIHN0cnRvbG93ZXIoJHRoaXMtPm5hbWUpKTsKCQlpZiAoISR0aGlzLT5jaGVja05hbWUoKSkKCQl7CgkJCS8vIEluIHRoaXMgY2FzZSwgd2Ugc2hvdWxkIGNoYW5nZSB0aGUgbmFtZQoJCQkkbmFtZSA9ICR0aGlzLT5uYW1lOwoJCQkkaSA9IDE7CgkJCSR0aGlzLT5uYW1lID0gJG5hbWUuJGk7CgkJCXdoaWxlKCEkdGhpcy0+Y2hlY2tOYW1lKCkpCgkJCXsKCQkJCSRpKys7CgkJCQkkdGhpcy0+bmFtZSA9ICRuYW1lLiRpOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+bmFtZTsKCX0KCQoJLy8gREFUQUJBU0UgU1BFQ0lGSUMKCS8vLS0tLS0tLS0tLS0tLS0tLS0tCgkJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlQnlQaygkaWQpCiAgewogIAlyZXR1cm4gc2VsZjo6ZG9TZWxlY3RPbmUoYXJyYXkoJ3doZXJlJyA9PiBhcnJheSgnaWQnID0+ICRpZCkpKTsgICAgCiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvU2VsZWN0T25lKCRwYXJhbXMgPSBhcnJheSgpKQogIHsKICAJJGl0ZW1zID0gc2VsZjo6ZG9TZWxlY3QoJHBhcmFtcyk7CiAgCWlmICgkaXRlbXMpCiAgCXsKICAJCXJldHVybiAkaXRlbXNbMF07CiAgCX0KICAJZWxzZSAKICAJewogIAkJcmV0dXJuIG51bGw7CiAgCX0gIAkKIAl9CgkJCglwdWJsaWMgZnVuY3Rpb24gcG9wdWxhdGUoJHJvdykKCXsKCQlpZiAoaXNzZXQoJHJvd1tzZWxmOjpEQl9JVEVNLidfX2lkJ10pKQoJCXsKCQkJJHRoaXMtPmlkID0gJHJvd1tzZWxmOjpEQl9JVEVNLidfX2lkJ107CgkJfQkJCgkJCgkJZm9yZWFjaCAoc2VsZjo6JGZpZWxkcyBhcyAkZmllbGQpCgkJewoJCQlpZiAoaXNzZXQoJHJvd1tzZWxmOjpEQl9JVEVNLidfXycuJGZpZWxkXSkpCgkJCXsKCQkJCSR0aGlzLT4kZmllbGQgPSAkcm93W3NlbGY6OkRCX0lURU0uJ19fJy4kZmllbGRdOwoJCQl9CgkJfQkKCX0KCQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdExpc3QoKQoJewoJCSRmaWVsZHMgPSBhcnJheV9tZXJnZShhcnJheSgnaWQnLCdjcmVhdGVkX2F0JywndXBkYXRlZF9hdCcpLCBzZWxmOjokZmllbGRzKTsKCQkkbGlzdCA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJGZpZWxkcyBhcyAkZmllbGQpCgkJewoJCQkkbGlzdFtdID0gc2VsZjo6REJfSVRFTSAuICcuJy4kZmllbGQuJyBhcyAnLiBzZWxmOjpnZXRSb3dOYW1lKCRmaWVsZCk7CgkJfQoJCXJldHVybiBpbXBsb2RlKCcgLCAnLCRsaXN0KTsKCX0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSb3dOYW1lKCRuYW1lKQoJewoJCXJldHVybiBzZWxmOjpEQl9JVEVNIC4gJ19fJyAuICRuYW1lOwoJfQoKCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb1NlbGVjdCgkcGFyYW1zID0gYXJyYXkoKSkKICB7CiAgICAvLyAkaW5zdGFuY2UgPSBuZXcgc2VsZigpOwogICAgLy8gICAgICRkYiA9JiAkaW5zdGFuY2UtPkdldERiKCk7CgkJJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKCQkKICAgICRxdWVyeSA9ICdTRUxFQ1QgCgkJJy5zZWxmOjpEQl9JVEVNLicuKiwKCQknLnNlbGY6OmdlbmVyYXRlU2VsZWN0TGlzdCgpIC4gJwoJCUZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuIHNlbGY6OkRCX05BTUUgLiAnIEFTICcgLiBzZWxmOjpEQl9JVEVNOwoKICAgICR2YWx1ZXMgPSBhcnJheSgpOwoKICAgIGlmIChpc3NldCgkcGFyYW1zWyd3aGVyZSddKSkKICAgIHsKCiAgICAgICRmaWVsZHMgPSBhcnJheSgpOwogICAgICBmb3JlYWNoICgkcGFyYW1zWyd3aGVyZSddIGFzICRmaWVsZCA9PiAkdmFsdWUpIAogICAgICB7CiAgICAgICAgJGZpZWxkc1tdID0gc2VsZjo6REJfSVRFTS4nLicuJGZpZWxkIC4gJyA9ICA/JzsKICAgICAgICAkdmFsdWVzW10gPSAkdmFsdWU7CiAgICAgIH0KCiAgICAgICRxdWVyeSAuPSAnIFdIRVJFICcgLiBpbXBsb2RlKCcgQU5EICcsICRmaWVsZHMpOwogICAgfSAKCiAgICBpZihpc3NldCgkcGFyYW1zWydvcmRlcl9ieSddKSkKICAgIHsKICAgICAkcXVlcnkgLj0gJyBPUkRFUiBCWSAnIC4gaW1wbG9kZSgnLCAnICwgJHBhcmFtc1snb3JkZXJfYnknXSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRxdWVyeSAuPSAnIE9SREVSIEJZICcuc2VsZjo6REJfSVRFTS4nLmNyZWF0ZWRfYXQnOwogICAgfQoKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICR2YWx1ZXMpOwogICAgJGl0ZW1zID0gYXJyYXkoKTsKCiAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKICAgIHsKICAgICAgd2hpbGUgKCRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQogICAgICB7CQogICAgICAgICRpdGVtID0gbmV3IE1DRk1vZHVsZUFjdGlvbigpOwogICAgICAgICRpdGVtLT5wb3B1bGF0ZSgkcm93KTsKICAgICAgICAkaXRlbXNbXSA9ICRpdGVtOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gICRpdGVtczsgICAKICB9CiAgCgkKCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCkgewoJCWlmICgkdGhpcy0+Z2V0SWQoKSkgCgkJewoJCQlpZiAoJHRoaXMtPmlzX21vZGlmaWVkKQoJCQl7CQkJCgkJCQlyZXR1cm4gJHRoaXMtPnVwZGF0ZSgpOwkKCQkJfQoJCX0gCgkJZWxzZQoJCXsKCQkJcmV0dXJuICR0aGlzLT5pbnNlcnQoKTsKCQl9CgkJCgkJcmV0dXJuIGZhbHNlOwoJfQoKCXByb3RlY3RlZCBmdW5jdGlvbiBpbnNlcnQoKSB7CgkJLy8gQ2xlYW51cCBuYW1lCgkJJHRoaXMtPmNsZWFudXBOYW1lKCk7CgkJLy8KICAgIC8vJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CgkJJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLiBzZWxmOjpEQl9OQU1FIC4gJyBTRVQgY3JlYXRlZF9hdCA9IE5PVygpLAl1cGRhdGVkX2F0ID0gTk9XKCkgJzsKCQkkdmFsdWVzID0gYXJyYXkoKTsJCQkJCgkJZm9yZWFjaChzZWxmOjokZmllbGRzIGFzICRmaWVsZCkKCQl7CgkJCSRxdWVyeSAuPSAnLCAnIC4gJGZpZWxkIC4gJyA9ID8nOwoJCQkkdmFsdWVzW10gPSAkdGhpcy0+JGZpZWxkOwoJCX0KCQkJCQkJCQkJCQkJCQkJCQoJCSRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCR2YWx1ZXMpOwoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwoJCSR0aGlzLT5pZCA9ICRkYi0+SW5zZXJ0X0lEKCk7CgkJLy9jbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1Byb2plY3RzJyktPlNlbmRFdmVudCgnQ29udGVudEVkaXRQb3N0JywgYXJyYXkoKSk7CgkJcmV0dXJuIHRydWU7Cgl9CgoJcHJvdGVjdGVkIGZ1bmN0aW9uIHVwZGF0ZSgpIHsKICAgIC8vJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CgkJJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4gc2VsZjo6REJfTkFNRSAuICcJU0VUIHVwZGF0ZWRfYXQgPSBOT1coKSc7CQkJCgkJJHZhbHVlcyA9IGFycmF5KCk7CQkJCQoJCWZvcmVhY2goc2VsZjo6JGZpZWxkcyBhcyAkZmllbGQpCgkJewoJCQkkcXVlcnkgLj0gJywgJyAuICRmaWVsZCAuICcgPSA/JzsKCQkJJHZhbHVlc1tdID0gJHRoaXMtPiRmaWVsZDsKCQl9CQoJCSRxdWVyeSAuPSAnIFdIRVJFIGlkID0gPyc7CgkJJHZhbHVlc1tdID0gJHRoaXMtPmdldElkKCk7CgkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICR2YWx1ZXMpOwoJCWlmICgkcmVzdWx0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlOwoJCS8vY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdQcm9qZWN0cycpLT5TZW5kRXZlbnQoJ0NvbnRlbnRFZGl0UG9zdCcsYXJyYXkoKSk7CgkJcmV0dXJuIHRydWU7Cgl9CgkKCXB1YmxpYyBmdW5jdGlvbiBkZWxldGUoKSB7CgkJaWYgKCR0aGlzLT5nZXRJZCgpKSB7CiAgICAJLy8gJGRiID0mICR0aGlzLT5HZXREYigpOwoJCQkkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwoJCQkkcXVlcnkgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuc2VsZjo6REJfTkFNRSAuICcgV0hFUkUgaWQgPSA/JzsKCQkJJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCR0aGlzLT5nZXRJZCgpKSk7CgkJCWlmKCRyZXN1bHQgIT09IGZhbHNlKQoJCQl7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfSAKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNvcnRCeVBsYWNlKCRhY3Rpb25zKQoJewoJICAkcGxhY2VzID0gYXJyYXkoKTsKCSAgZm9yZWFjaCgkYWN0aW9ucyBhcyAkYWN0aW9uKQoJICB7CSAgICAKCSAgICBpZihpc3NldChzZWxmOjokYnV0dG9uX3BsYWNlc1skYWN0aW9uLT5idXR0b25dKSkKCSAgICB7CgkgICAgICAkcGxhY2VzWyRhY3Rpb24tPmJ1dHRvbl1bXSA9ICRhY3Rpb247CgkgICAgfQoJICB9CgkgIHJldHVybiAkcGxhY2VzOwoJfQoJCn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFModuleAdminTemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIE1DRk1vZHVsZUFkbWluVGVtcGxhdGUgZXh0ZW5kcyBNQ0ZPYmplY3QKewogICAgcHJvdGVjdGVkICRtb2R1bGVfaWQ7CiAgICAvKiogQHZhciBNQ0ZNb2R1bGUgJG1vZHVsZSAqLwogICAgcHJvdGVjdGVkICRtb2R1bGU7CiAgICBwcm90ZWN0ZWQgJG5hbWU7CiAgICBwcm90ZWN0ZWQgJHRlbXBsYXRlOwoKICAgIHByb3RlY3RlZCBzdGF0aWMgJHRhYmxlX2ZpZWxkcyA9IGFycmF5KAogICAgICAgICdtb2R1bGVfaWQnID0+ICdJJywKICAgICAgICAnbmFtZScgPT4gJ0MoMjU1KScsCiAgICAgICAgJ3RlbXBsYXRlJyA9PiAnWEwnCiAgICApOwoKICAgIHByb3RlY3RlZCBzdGF0aWMgJHRhYmxlX2ZpZWxkc19pbmRleGVzID0gYXJyYXkoJ21vZHVsZV9pZCcpOwoKICAgIGNvbnN0IFRBQkxFX05BTUUgPSAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVfYWRtaW5fdGVtcGxhdGVzJzsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkbW9kdWxlX2lkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0TW9kdWxlSWQoJG1vZHVsZV9pZCkKICAgIHsKICAgICAgICAkdGhpcy0+bW9kdWxlX2lkID0gJG1vZHVsZV9pZDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZUlkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1vZHVsZV9pZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBNQ0ZNb2R1bGUgJG1vZHVsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TW9kdWxlKE1DRk1vZHVsZSAkbW9kdWxlKQogICAgewogICAgICAgICR0aGlzLT5tb2R1bGUgPSAkbW9kdWxlOwogICAgICAgICR0aGlzLT5zZXRNb2R1bGVJZCgkbW9kdWxlLT5nZXRJZCgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gTUNGTW9kdWxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNb2R1bGUoKQogICAgewogICAgICAgIGlmKGVtcHR5KCR0aGlzLT5tb2R1bGUpKSAkdGhpcy0+bW9kdWxlID0gTUNGTW9kdWxlOjpyZXRyaWV2ZUJ5UGsoJHRoaXMtPmdldE1vZHVsZUlkKCkpOwogICAgICAgIHJldHVybiAkdGhpcy0+bW9kdWxlOwogICAgfQoKfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFModuleField.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBDbGFzcyBNQ0ZNb2R1bGVGaWVsZAogKi8KY2xhc3MgTUNGTW9kdWxlRmllbGQgZXh0ZW5kcyBNQ0ZPYmplY3QKewoKICAgIC8qKgogICAgICogQHZhcgogICAgICovCiAgICBwcm90ZWN0ZWQgJG1vZHVsZV9pZDsKICAgIC8qKgogICAgICogQHZhcgogICAgICovCiAgICBwcm90ZWN0ZWQgJG1vZHVsZTsKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJvdGVjdGVkICRwb3NpdGlvbjsKICAgIC8qKgogICAgICogQHZhcgogICAgICovCiAgICBwcm90ZWN0ZWQgJGxhYmVsOwogICAgLyoqCiAgICAgKiBAdmFyCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZmllbGRfbmFtZTsKICAgIC8qKgogICAgICogQHZhcgogICAgICovCiAgICBwcm90ZWN0ZWQgJGZpZWxkX3R5cGUgPSAndGV4dCc7CgogICAgcHVibGljIHN0YXRpYyAkZmllbGRfdHlwZXMgPSBhcnJheSgKICAgICAgICAndGV4dCcgPT4gYXJyYXkoCiAgICAgICAgICAgICd0eXBlJyA9PiAndGV4dCcsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ1RleHQgZmllbGQnLAogICAgICAgICAgICAnY29sdW1uX3R5cGUnID0+ICdDKDI1NSknLAogICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAndGV4dCcsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlCiAgICAgICAgKSwKICAgICAgICAndGV4dGFyZWEnID0+IGFycmF5KAogICAgICAgICAgICAndHlwZScgPT4gJ3RleHRhcmVhJywKICAgICAgICAgICAgJ2xhYmVsJyA9PiAnVGV4dCBhcmVhJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnWCcsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICd0ZXh0YXJlYScsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlCiAgICAgICAgKSwKICAgICAgICAndGV4dGFyZWFfcGxhaW4nID0+IGFycmF5KAogICAgICAgICAgICAndHlwZScgPT4gJ3RleHRhcmVhX3BsYWluJywKICAgICAgICAgICAgJ2xhYmVsJyA9PiAnVGV4dCBhcmVhIChubyBXWVNJV1lHKScsCiAgICAgICAgICAgICdjb2x1bW5fdHlwZScgPT4gJ1gnLAogICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAndGV4dGFyZWFfcGxhaW4nLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gdHJ1ZQogICAgICAgICksCiAgICAgICAgJ3RleHRhcmVhX2NvZGUnID0+IGFycmF5KAogICAgICAgICAgICAndHlwZScgPT4gJ3RleHRhcmVhX2NvZGUnLAogICAgICAgICAgICAnbGFiZWwnID0+ICdUZXh0IGFyZWEgKGNvZGUpJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnWCcsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICd0ZXh0YXJlYV9jb2RlJywKICAgICAgICAgICAgJ29wdGlvbnMnID0+IHRydWUKICAgICAgICApLAogICAgICAgICdzZWxlY3QnID0+IGFycmF5KAogICAgICAgICAgICAndHlwZScgPT4gJ3NlbGVjdCcsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ1NlbGVjdCAoRHJvcGRvd24pJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnQygyNTUpJywKICAgICAgICAgICAgJ2Zvcm1fdHlwZScgPT4gJ3NlbGVjdCcsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlLAogICAgICAgICAgICAnb3B0aW9uc19kZWZhdWx0JyA9PiAndmFsdWVzOm9wdGlvbjE9Pk9wdGlvbiAxLG9wdGlvbjI9Pk9wdGlvbjI7JwogICAgICAgICksCiAgICAgICAgJ2NoZWNrYm94JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3R5cGUnID0+ICdjaGVja2JveCcsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ0NoZWNrYm94JywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnSScsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICdjaGVja2JveCcsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlLAogICAgICAgICAgICAnb3B0aW9uc19kZWZhdWx0JyA9PiAndGV4dDpNeSBjaGVja2JveCB0ZXh0OycKICAgICAgICApLAogICAgICAgICdkYXRlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3R5cGUnID0+ICdkYXRlJywKICAgICAgICAgICAgJ2xhYmVsJyA9PiAnRGF0ZScsCiAgICAgICAgICAgICdjb2x1bW5fdHlwZScgPT4gJ0QnLAogICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAndGV4dCcsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ3RpbWUnID0+IGFycmF5KAogICAgICAgICAgICAndHlwZScgPT4gJ3RpbWUnLAogICAgICAgICAgICAnbGFiZWwnID0+ICdUaW1lJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnVCcsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICd0ZXh0JywKICAgICAgICAgICAgJ29wdGlvbnMnID0+IHRydWUsCiAgICAgICAgICAgICdvcHRpb25zX2RlZmF1bHQnID0+ICdtaWRuaWdodDogZmFsc2U7JwogICAgICAgICksCiAgICAgICAgJ2RhdGV0aW1lJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3R5cGUnID0+ICdkYXRldGltZScsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ0RhdGUgJiBUaW1lJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnSScsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICdkYXRldGltZScsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlLAogICAgICAgICksCiAgICAgICAgJ2RvY3VtZW50JyA9PiBhcnJheSgKICAgICAgICAgICAgJ3R5cGUnID0+ICdkb2N1bWVudCcsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ0RvY3VtZW50JywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnQygyNTUpJywKICAgICAgICAgICAgJ2Zvcm1fdHlwZScgPT4gJ2ZpbGUnLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gdHJ1ZQogICAgICAgICksCiAgICAgICAgJ2ltYWdlJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3R5cGUnID0+ICdpbWFnZScsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ0ltYWdlJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnQygyNTUpJywKICAgICAgICAgICAgJ2Zvcm1fdHlwZScgPT4gJ2ZpbGUnLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gdHJ1ZSwKICAgICAgICAgICAgJ29wdGlvbnNfZGVmYXVsdCcgPT4gJ3NpemU6MTUweDE1MDsnCiAgICAgICAgKSwKICAgICAgICAnY291bnRyeScgPT4gYXJyYXkoCiAgICAgICAgICAgICd0eXBlJyA9PiAnY291bnRyeScsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ0NvdW50cnknLAogICAgICAgICAgICAnY29sdW1uX3R5cGUnID0+ICdDKDI1NSknLAogICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAnc2VsZWN0JywKICAgICAgICAgICAgJ29wdGlvbnMnID0+IHRydWUsCiAgICAgICAgICAgICdvcHRpb25zX2RlZmF1bHQnID0+ICcnCiAgICAgICAgKSwKICAgICAgICAnaGlkZGVuX3RleHQnID0+IGFycmF5KAogICAgICAgICAgICAndHlwZScgPT4gJ2hpZGRlbl90ZXh0JywKICAgICAgICAgICAgJ2xhYmVsJyA9PiAnSGlkZGVuIHRleHQnLAogICAgICAgICAgICAnY29sdW1uX3R5cGUnID0+ICdDKDI1NSknLAogICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAnbm9uZScsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiBmYWxzZQogICAgICAgICksCiAgICAgICAgJ3N0YXRpYycgPT4gYXJyYXkoCiAgICAgICAgICAgICd0eXBlJyA9PiAnc3RhdGljJywKICAgICAgICAgICAgJ2xhYmVsJyA9PiAnU3RhdGljIHZhbHVlJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnWCcsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICdzdGF0aWMnLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gZmFsc2UKICAgICAgICApLAogICAgICAgICdtb2R1bGUnID0+IGFycmF5KAogICAgICAgICAgICAndHlwZScgPT4gJ21vZHVsZScsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ01vZHVsZScsCiAgICAgICAgICAgICdjb2x1bW5fdHlwZScgPT4gJ0MoMjU1KScsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICdtb2R1bGUnLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gdHJ1ZSwKICAgICAgICAgICAgJ29wdGlvbnNfZGVmYXVsdCcgPT4gJ21vZHVsZV9uYW1lOk15TW9kdWxlTmFtZTsnCiAgICAgICAgKSwKICAgICAgICAncGFnZScgPT4gYXJyYXkoCiAgICAgICAgICAgICd0eXBlJyA9PiAncGFnZScsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ1BhZ2UnLAogICAgICAgICAgICAnY29sdW1uX3R5cGUnID0+ICdDKDI1NSknLAogICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAncGFnZScsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlCiAgICAgICAgKSwKICAgICAgICAndXNlcicgPT4gYXJyYXkoCiAgICAgICAgICAgICd0eXBlJyA9PiAndXNlcicsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ0NNUyBVc2VyJywKICAgICAgICAgICAgJ2NvbHVtbl90eXBlJyA9PiAnQygyNTUpJywKICAgICAgICAgICAgJ2Zvcm1fdHlwZScgPT4gJ3VzZXInLAogICAgICAgICAgICAnb3B0aW9ucycgPT4gdHJ1ZQogICAgICAgICksCiAgICAgICAgJ2dyb3VwJyA9PiBhcnJheSgKICAgICAgICAgICAgJ3R5cGUnID0+ICdncm91cCcsCiAgICAgICAgICAgICdsYWJlbCcgPT4gJ0NNUyBHcm91cCcsCiAgICAgICAgICAgICdjb2x1bW5fdHlwZScgPT4gJ0MoMjU1KScsCiAgICAgICAgICAgICdmb3JtX3R5cGUnID0+ICdncm91cCcsCiAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlCiAgICAgICAgKQogICAgKTsKCiAgICBwcm90ZWN0ZWQgJG9wdGlvbnNfZGF0YTsKCiAgICBwcm90ZWN0ZWQgJG9wdGlvbnMgPSBhcnJheSgpOwoKICAgIHByb3RlY3RlZCBzdGF0aWMgJHRhYmxlX2ZpZWxkcyA9IGFycmF5KAogICAgICAgICdtb2R1bGVfaWQnID0+ICdJJywKICAgICAgICAncG9zaXRpb24nID0+ICdJJywKICAgICAgICAnbGFiZWwnID0+ICdDKDI1NSknLAogICAgICAgICdmaWVsZF9uYW1lJyA9PiAnQygyNTUpJywKICAgICAgICAnZmllbGRfdHlwZScgPT4gJ0MoMjU1KScsCiAgICAgICAgJ29wdGlvbnNfZGF0YScgPT4gJ1hMJwogICAgKTsKCiAgICBwcm90ZWN0ZWQgc3RhdGljICR0YWJsZV9maWVsZHNfaW5kZXhlcyA9IGFycmF5KCdtb2R1bGVfaWQnLCAncG9zaXRpb24nLCAnZmllbGRfbmFtZScpOwoKICAgIHB1YmxpYyBzdGF0aWMgJGJsYWNrbGlzdCA9IGFycmF5KCdpZCcsICdwYXJlbnRpZCcsICd0aXRsZScsICdjcmVhdGVkYXQnLCAnY3JlYXRlZGJ5JywgJ3VwZGF0ZWRhdCcsICd1cGRhdGVkYnknLCAnb3JkZXJieScsICdwYXJlbnQnLCAncGFyZW50bW9kdWxlJywgJ3B1Ymxpc2hlZCcsICdvcmRlcicsICdvcmRlcmJ5JywgJ2Zyb20nLCAnc2VsZWN0JywgJ2luJywgJ2RhdGUnLCAnZnVsbHRleHRzZWFyY2gnLCAnY29yZXNsdWcnLCAnY29yZXNsdWcnLCAndXNlcmlkJywgJ3VzZXInLCAnZnVuY3Rpb24nLCAnYnlpZCcsICdqc29uJywgJ2FzYXJyYXknLCAnc2VhcmNoc3RyaW5nJywgJ2dyb3VwJywgJ2J5JywgJ2FkZCcsICdhbGwnLCAnYWx0ZXInLCAnYW5hbHl6ZScsICdhbmQnLCAnYXMnLCAnYXNjJywgJ2FzZW5zaXRpdmUnLCAnYmVmb3JlJywgJ2JldHdlZW4nLCAnYmlnaW50JywgJ2JpbmFyeScsICdibG9iJywgJ2JvdGgnLCAnYnknLCAnY2FsbCcsICdjYXNjYWRlJywgJ2Nhc2UnLCAnY2hhbmdlJywgJ2NoYXInLCAnY2hhcmFjdGVyJywgJ2NoZWNrJywgJ2NvbGxhdGUnLCAnY29sdW1uJywgJ2NvbmRpdGlvbicsICdjb25zdHJhaW50JywgJ2NvbnRpbnVlJywgJ2NvbnZlcnQnLCAnY3JlYXRlJywgJ2Nyb3NzJywgJ2N1cnJlbnRkYXRlJywgJ2N1cnJlbnR0aW1lJywgJ2N1cnJlbnR0aW1lc3RhbXAnLCAnY3VycmVudHVzZXInLCAnY3Vyc29yJywgJ2RhdGFiYXNlJywgJ2RhdGFiYXNlcycsICdkYXlob3VyJywgJ2RheW1pY3Jvc2Vjb25kJywgJ2RheW1pbnV0ZScsICdkYXlzZWNvbmQnLCAnZGVjJywgJ2RlY2ltYWwnLCAnZGVjbGFyZScsICdkZWZhdWx0JywgJ2RlbGF5ZWQnLCAnZGVsZXRlJywgJ2Rlc2MnLCAnZGVzY3JpYmUnLCAnZGV0ZXJtaW5pc3RpYycsICdkaXN0aW5jdCcsICdkaXN0aW5jdHJvdycsICdkaXYnLCAnZG91YmxlJywgJ2Ryb3AnLCAnZHVhbCcsICdlYWNoJywgJ2Vsc2UnLCAnZWxzZWlmJywgJ2VuY2xvc2VkJywgJ2VzY2FwZWQnLCAnZXhpc3RzJywgJ2V4aXQnLCAnZXhwbGFpbicsICdmYWxzZScsICdmZXRjaCcsICdmbG9hdCcsICdmbG9hdDQnLCAnZmxvYXQ4JywgJ2ZvcicsICdmb3JjZScsICdmb3JlaWduJywgJ2Zyb20nLCAnZnVsbHRleHQnLCAnZ3JhbnQnLCAnZ3JvdXAnLCAnaGF2aW5nJywgJ2hpZ2hwcmlvcml0eScsICdob3VybWljcm9zZWNvbmQnLCAnaG91cm1pbnV0ZScsICdob3Vyc2Vjb25kJywgJ2lmJywgJ2lnbm9yZScsICdpbicsICdpbmRleCcsICdpbmZpbGUnLCAnaW5uZXInLCAnaW5vdXQnLCAnaW5zZW5zaXRpdmUnLCAnaW5zZXJ0JywgJ2ludCcsICdpbnQxJywgJ2ludDInLCAnaW50MycsICdpbnQ0JywgJ2ludDgnLCAnaW50ZWdlcicsICdpbnRlcnZhbCcsICdpbnRvJywgJ2lzJywgJ2l0ZXJhdGUnLCAnam9pbicsICdrZXknLCAna2V5cycsICdraWxsJywgJ2xlYWRpbmcnLCAnbGVhdmUnLCAnbGVmdCcsICdsaWtlJywgJ2xpbWl0JywgJ2xpbmVzJywgJ2xvYWQnLCAnbG9jYWx0aW1lJywgJ2xvY2FsdGltZXN0YW1wJywgJ2xvY2snLCAnbG9uZycsICdsb25nYmxvYicsICdsb25ndGV4dCcsICdsb29wJywgJ2xvd3ByaW9yaXR5JywgJ21hdGNoJywgJ21lZGl1bWJsb2InLCAnbWVkaXVtaW50JywgJ21lZGl1bXRleHQnLCAnbWlkZGxlaW50JywgJ21pbnV0ZW1pY3Jvc2Vjb25kJywgJ21pbnV0ZXNlY29uZCcsICdtb2QnLCAnbW9kaWZpZXMnLCAnbmF0dXJhbCcsICdub3QnLCAnbm93cml0ZXRvYmlubG9nJywgJ251bGwnLCAnbnVtZXJpYycsICdvbicsICdvcHRpbWl6ZScsICdvcHRpb24nLCAnb3B0aW9uYWxseScsICdvcicsICdvcmRlcicsICdvdXQnLCAnb3V0ZXInLCAnb3V0ZmlsZScsICdwcmVjaXNpb24nLCAncHJpbWFyeScsICdwcm9jZWR1cmUnLCAncHVyZ2UnLCAncmVhZCcsICdyZWFkcycsICdyZWFsJywgJ3JlZmVyZW5jZXMnLCAncmVnZXhwJywgJ3JlbGVhc2UnLCAncmVuYW1lJywgJ3JlcGVhdCcsICdyZXBsYWNlJywgJ3JlcXVpcmUnLCAncmVzdHJpY3QnLCAncmV0dXJuJywgJ3Jldm9rZScsICdyaWdodCcsICdybGlrZScsICdzY2hlbWEnLCAnc2NoZW1hcycsICdzZWNvbmRtaWNyb3NlY29uZCcsICdzZWxlY3QnLCAnc2Vuc2l0aXZlJywgJ3NlcGFyYXRvcicsICdzZXQnLCAnc2hvdycsICdzbWFsbGludCcsICdzb25hbWUnLCAnc3BhdGlhbCcsICdzcGVjaWZpYycsICdzcWwnLCAnc3FsZXhjZXB0aW9uJywgJ3NxbHN0YXRlJywgJ3NxbHdhcm5pbmcnLCAnc3FsYmlncmVzdWx0JywgJ3NxbGNhbGNmb3VuZHJvd3MnLCAnc3Fsc21hbGxyZXN1bHQnLCAnc3NsJywgJ3N0YXJ0aW5nJywgJ3N0cmFpZ2h0am9pbicsICd0YWJsZScsICd0ZXJtaW5hdGVkJywgJ3RoZW4nLCAndGlueWJsb2InLCAndGlueWludCcsICd0aW55dGV4dCcsICd0bycsICd0cmFpbGluZycsICd0cmlnZ2VyJywgJ3RydWUnLCAndW5kbycsICd1bmlvbicsICd1bmlxdWUnLCAndW5sb2NrJywgJ3Vuc2lnbmVkJywgJ3VwZGF0ZScsICd1c2FnZScsICd1c2UnLCAndXNpbmcnLCAndXRjZGF0ZScsICd1dGN0aW1lJywgJ3V0Y3RpbWVzdGFtcCcsICd2YWx1ZXMnLCAndmFyYmluYXJ5JywgJ3ZhcmNoYXInLCAndmFyY2hhcmFjdGVyJywgJ3ZhcnlpbmcnLCAnd2hlbicsICd3aGVyZScsICd3aGlsZScsICd3aXRoJywgJ3dyaXRlJywgJ3hvcicsICd5ZWFybW9udGgnLCAnemVyb2ZpbGwnLCAnc2VuZHVwZGF0ZWltbWVkaWF0ZWx5JywgJ2xldmVsJywgJ2V2ZW50cycsICdldmVudCcpOwoKICAgIGNvbnN0IFRBQkxFX05BTUUgPSAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVfZmllbGRzJzsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkbGFiZWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExhYmVsKCRsYWJlbCkKICAgIHsKICAgICAgICAkdGhpcy0+bGFiZWwgPSAkbGFiZWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMYWJlbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5sYWJlbDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkZmllbGRfbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RmllbGROYW1lKCRmaWVsZF9uYW1lKQogICAgewogICAgICAgICR0aGlzLT5maWVsZF9uYW1lID0gJGZpZWxkX25hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZE5hbWUoKQogICAgewogICAgICAgIGlmIChlbXB0eSgkdGhpcy0+ZmllbGRfbmFtZSkpIHsKICAgICAgICAgICAgJHRoaXMtPmZpZWxkX25hbWUgPSAkdGhpcy0+Y3JlYXRlRmllbGRuYW1lRnJvbUxhYmVsKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRfbmFtZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkZmllbGRfdHlwZQogICAgICogQHRocm93cyBFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEZpZWxkVHlwZSgkZmllbGRfdHlwZSkKICAgIHsKICAgICAgICBpZiAoIXNlbGY6OmNoZWNrRmllbGRUeXBlKCRmaWVsZF90eXBlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIGZpZWxkIHR5cGU6ICcgLiAkZmllbGRfdHlwZSk7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5maWVsZF90eXBlID0gJGZpZWxkX3R5cGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaWVsZFR5cGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmllbGRfdHlwZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZpZWxkVHlwZXMoKQogICAgewogICAgICAgICRmaWVsZF90eXBlcyA9IHNlbGY6OiRmaWVsZF90eXBlczsKCiAgICAgICAgJGZpZWxkX3R5cGVzWydkYXRlJ11bJ29wdGlvbnNfZGVmYXVsdCddID0gJ3N0YXJ0X3llYXI6JyAuIGRhdGUoJ1knLCBzdHJ0b3RpbWUoJy0xIHllYXInKSkgLiAnOyc7CiAgICAgICAgJGZpZWxkX3R5cGVzWydkYXRldGltZSddWydvcHRpb25zX2RlZmF1bHQnXSA9ICdzdGFydF95ZWFyOicgLiBkYXRlKCdZJywgc3RydG90aW1lKCctMSB5ZWFyJykpIC4gJzsnOwoKICAgICAgICBpZiAoY2xhc3NfZXhpc3RzKCdDTVNGb3JtSW5wdXRGaWxlcycpKSB7CiAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gaW5zZXJ0IHRoYXQgaW5mbyBmcm9tIHRoZSBNQ01lZGlhcyBtb2R1bGUKICAgICAgICAgICAgJGZpZWxkX3R5cGVzWydmaWxlcyddID0gYXJyYXkoCiAgICAgICAgICAgICAgICAndHlwZScgPT4gJ2ZpbGVzJywKICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJ011bHRpcGxlIGZpbGVzJywKICAgICAgICAgICAgICAgICdjb2x1bW5fdHlwZScgPT4gJ0MoMjU1KScsCiAgICAgICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAnZmlsZXMnLAogICAgICAgICAgICAgICAgJ29wdGlvbnMnID0+IHRydWUKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIGlmIChjbGFzc19leGlzdHMoJ0NNU0Zvcm1JbnB1dEltYWdlcycpKSB7CiAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgYSB3YXkgdG8gaW5zZXJ0IHRoYXQgaW5mbyBmcm9tIHRoZSBNQ01lZGlhcyBtb2R1bGUKICAgICAgICAgICAgJGZpZWxkX3R5cGVzWydpbWFnZXMnXSA9IGFycmF5KAogICAgICAgICAgICAgICAgJ3R5cGUnID0+ICdpbWFnZXMnLAogICAgICAgICAgICAgICAgJ2xhYmVsJyA9PiAnTXVsdGlwbGUgaW1hZ2VzJywKICAgICAgICAgICAgICAgICdjb2x1bW5fdHlwZScgPT4gJ0MoMjU1KScsCiAgICAgICAgICAgICAgICAnZm9ybV90eXBlJyA9PiAnaW1hZ2VzJywKICAgICAgICAgICAgICAgICdvcHRpb25zJyA9PiB0cnVlCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGZpZWxkX3R5cGVzOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0RmllbGRTZXR0aW5ncygpCiAgICB7CiAgICAgICAgJGZpZWxkcyA9IHNlbGY6OmdldEZpZWxkVHlwZXMoKTsKICAgICAgICBpZihpc3NldCgkZmllbGRzWyR0aGlzLT5maWVsZF90eXBlXSkpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJGZpZWxkc1skdGhpcy0+ZmllbGRfdHlwZV07CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ05vIHR5cGUgZm91bmQgZm9yIGZpZWxkIHR5cGUgJyAuICR0aGlzLT5maWVsZF90eXBlKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZvcm1UeXBlKCkKICAgIHsKICAgICAgICAkZmllbGQgPSAkdGhpcy0+Z2V0RmllbGRTZXR0aW5ncygpOwogICAgICAgIHJldHVybiAkZmllbGRbJ2Zvcm1fdHlwZSddOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tGaWVsZFR5cGUoJHR5cGUpCiAgICB7CiAgICAgICAgJHR5cGVzID0gYXJyYXlfa2V5cyhzZWxmOjpnZXRGaWVsZFR5cGVzKCkpOwogICAgICAgIHJldHVybiBpbl9hcnJheSgkdHlwZSwgJHR5cGVzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldElkKCRpZCkKICAgIHsKICAgICAgICAkdGhpcy0+aWQgPSAkaWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkbW9kdWxlX2lkCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0TW9kdWxlSWQoJG1vZHVsZV9pZCkKICAgIHsKICAgICAgICAkdGhpcy0+bW9kdWxlX2lkID0gJG1vZHVsZV9pZDsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZUlkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1vZHVsZV9pZDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBNQ0ZNb2R1bGUgJG1vZHVsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TW9kdWxlKE1DRk1vZHVsZSAkbW9kdWxlKQogICAgewogICAgICAgICR0aGlzLT5tb2R1bGUgPSAkbW9kdWxlOwogICAgICAgICR0aGlzLT5tb2R1bGVfaWQgPSAkbW9kdWxlLT5nZXRJZCgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBNQ0ZNb2R1bGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1vZHVsZSgpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5tb2R1bGUpKSB7CiAgICAgICAgICAgICR0aGlzLT5tb2R1bGUgPSBNQ0ZNb2R1bGU6OnJldHJpZXZlQnlQaygkdGhpcy0+bW9kdWxlX2lkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb2R1bGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJG9wdGlvbnNfZGF0YQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uc0RhdGEoJG9wdGlvbnNfZGF0YSkKICAgIHsKICAgICAgICAkdGhpcy0+b3B0aW9uc19kYXRhID0gJG9wdGlvbnNfZGF0YTsKICAgICAgICAkdGhpcy0+b3B0aW9ucyA9IGpzb25fZGVjb2RlKCR0aGlzLT5vcHRpb25zX2RhdGEsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uc0RhdGEoKQogICAgewogICAgICAgICR0aGlzLT5vcHRpb25zX2RhdGEgPSBqc29uX2VuY29kZSgkdGhpcy0+b3B0aW9ucyk7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zX2RhdGE7CiAgICB9CgoKCiAgICAvKioKICAgICAqIEBwYXJhbSAkbmFtZQogICAgICogQHBhcmFtICR2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uKCRuYW1lLCAkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPm9wdGlvbnNbJG5hbWVdID0gJHZhbHVlOwogICAgfQoKCgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRwb3NpdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UG9zaXRpb24oJHBvc2l0aW9uKQogICAgewogICAgICAgICR0aGlzLT5wb3NpdGlvbiA9ICRwb3NpdGlvbjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvc2l0aW9uKCkKICAgIHsKICAgICAgICBpZiAoaXNfbnVsbCgkdGhpcy0+cG9zaXRpb24pKSB7CiAgICAgICAgICAgICR0aGlzLT5wb3NpdGlvbiA9ICR0aGlzLT5uZXh0UG9zaXRpb24oKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3NpdGlvbjsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIG5leHRQb3NpdGlvbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICAgICAkYy0+YWRkKCdtb2R1bGVfaWQnLCAkdGhpcy0+Z2V0TW9kdWxlSWQoKSk7CiAgICAgICAgJGMtPmFkZERlc2NlbmRpbmdPcmRlckJ5Q29sdW1uKCdwb3NpdGlvbicpOwogICAgICAgICRsYXN0X2ZpZWxkID0gc2VsZjo6ZG9TZWxlY3RPbmUoJGMpOwogICAgICAgIGlmICgkbGFzdF9maWVsZCkgewogICAgICAgICAgICByZXR1cm4gKGludCkkbGFzdF9maWVsZC0+Z2V0UG9zaXRpb24oKSArIDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwogICAgfQoKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdXBkYXRlZF9hdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXBkYXRlZEF0KCR1cGRhdGVkX2F0KQogICAgewogICAgICAgICR0aGlzLT51cGRhdGVkX2F0ID0gJHVwZGF0ZWRfYXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcGRhdGVkQXQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXBkYXRlZF9hdDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdXBkYXRlZF9ieQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXBkYXRlZEJ5KCR1cGRhdGVkX2J5KQogICAgewogICAgICAgICR0aGlzLT51cGRhdGVkX2J5ID0gJHVwZGF0ZWRfYnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcGRhdGVkQnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXBkYXRlZF9ieTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpc0JsYWNrbGlzdGVkRmllbGQoJG5hbWUpCiAgICB7CiAgICAgICAgJG5hbWUgPSBzZWxmOjpjbGVhbk5hbWUoJG5hbWUsICcnLCBhcnJheSgnXycpKTsKICAgICAgICBpZiAoaW5fYXJyYXkoJG5hbWUsIHN0YXRpYzo6JGJsYWNrbGlzdCkpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRmllbGRuYW1lRnJvbUxhYmVsKCkKICAgIHsKICAgICAgICAkbmFtZSA9IHNlbGY6OmNsZWFuTmFtZSgkdGhpcy0+Z2V0TGFiZWwoKSwgJ18nKTsKICAgICAgICAkbmFtZSA9IHN0cl9yZXBsYWNlKCdtY2ZpXycsICdtY2ZfJywgJG5hbWUpOwogICAgICAgIGlmIChzZWxmOjppc0JsYWNrbGlzdGVkRmllbGQoJG5hbWUpKSB7CiAgICAgICAgICAgICRuYW1lID0gJ21jZl8nIC4gJG5hbWU7CiAgICAgICAgfQoKICAgICAgICAkb3JpZ2luYWxfbmFtZSA9ICRuYW1lOwogICAgICAgICRpID0gMTsKICAgICAgICB3aGlsZSAoJHRoaXMtPmNoZWNrSWZGaWVsZG5hbWVFeGlzdHMoJG5hbWUpKSB7CiAgICAgICAgICAgICRuYW1lID0gJG9yaWdpbmFsX25hbWUgLiAkaTsKICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRuYW1lOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tJZkZpZWxkbmFtZUV4aXN0cygkZmllbGRfbmFtZSkKICAgIHsKICAgICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgICAgICRjLT5hZGQoJ21vZHVsZV9pZCcsICR0aGlzLT5nZXRNb2R1bGVJZCgpKTsKICAgICAgICAkYy0+YWRkKCdmaWVsZF9uYW1lJywgJGZpZWxkX25hbWUpOwogICAgICAgIGlmICgkZmllbGQgPSBzZWxmOjpkb1NlbGVjdE9uZSgkYykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjbGVhbk5hbWUoJG5hbWUsICRzcGFjZXIgPSAnLScsICRpbmNsdWRlID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gc3RydG9sb3dlcigkbmFtZSk7CiAgICAgICAgLy8gUmVtb3ZlIGFjY2VudHMKICAgICAgICAkcmVzdWx0ID0gaWNvbnYoJ1VURi04JywgJ0FTQ0lJLy9UUkFOU0xJVC8vSUdOT1JFJywgJHJlc3VsdCk7CgogICAgICAgIC8vIFNvZnQgd2F5CiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCIjIiwgIk5vLiIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiJCIsICJEb2xsYXIiLCAkcmVzdWx0KTsKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIiUiLCAiUGVyY2VudCIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiXiIsICIgIiwgJHJlc3VsdCk7CiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCImIiwgImFuZCIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiKiIsICIgIiwgJHJlc3VsdCk7CiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCI/IiwgIiAiLCAkcmVzdWx0KTsKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIiwiLCAiICIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiJyIsICIgIiwgJHJlc3VsdCk7CiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCciJywgIiAiLCAkcmVzdWx0KTsKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIi4iLCAiICIsICRyZXN1bHQpOwoKICAgICAgICBmb3JlYWNoICgkaW5jbHVkZSBhcyAkY2hhcmFjdGVyKSB7CiAgICAgICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgkY2hhcmFjdGVyLCAiICIsICRyZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgLy8gc3RyaXAgYWxsIG5vbiB3b3JkIGNoYXJzCiAgICAgICAgJHJlc3VsdCA9IHByZWdfcmVwbGFjZSgnLygoPyFbLWEtekEtWjAtOSBfXSkuKSsvcycsICcgJywgJHJlc3VsdCk7CgogICAgICAgIC8vIHJlcGxhY2UgYWxsIHdoaXRlIHNwYWNlIHNlY3Rpb25zIHdpdGggYSBkYXNoCiAgICAgICAgJHJlc3VsdCA9IHByZWdfcmVwbGFjZSgnL1wgKy8nLCAkc3BhY2VyLCAkcmVzdWx0KTsKICAgICAgICAvLyB0cmltIGRhc2hlcwogICAgICAgICRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoJy9cLSQvJywgJycsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoJy9eXC0vJywgJycsICRyZXN1bHQpOwogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFModuleObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmFic3RyYWN0IGNsYXNzIE1DRk1vZHVsZU9iamVjdAp7CgogICAgcHJvdGVjdGVkICRpZDsKICAgIHByb3RlY3RlZCAkdXNlcl9pZDsKCiAgICBwcm90ZWN0ZWQgJGNyZWF0ZWRfYXQ7CiAgICBwcm90ZWN0ZWQgJGNyZWF0ZWRfYnk7CiAgICBwcm90ZWN0ZWQgJHVwZGF0ZWRfYXQ7CiAgICBwcm90ZWN0ZWQgJHVwZGF0ZWRfYnk7CiAgICBwcm90ZWN0ZWQgJG1jZmlfY3JlYXRlZF90aW1lc3RhbXA7CiAgICBwcm90ZWN0ZWQgJG1jZmlfdXBkYXRlZF90aW1lc3RhbXA7CgogICAgcHJvdGVjdGVkICR2YXJzID0gYXJyYXkoKTsKICAgIHByb3RlY3RlZCAkaXNfbW9kaWZpZWQgPSBmYWxzZTsKCiAgICBjb25zdCBNT0RVTEVfTkFNRSA9ICdNQ0ZNb2R1bGUnOwogICAgY29uc3QgTU9EVUxFX09CSkVDVF9OQU1FID0gJ01DRk1vZHVsZU9iamVjdCc7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fc2V0KCR2YXIsICR2YWwpCiAgICB7CiAgICAgICAgJHRoaXMtPmlzX21vZGlmaWVkID0gdHJ1ZTsKICAgICAgICAkdGhpcy0+dmFyc1skdmFyXSA9ICR2YWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCR2YXIpCiAgICB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICR2YXIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPiR2YXIoKTsKICAgICAgICAgICAgfSBlbHNlaWYgKGFycmF5X2tleV9leGlzdHMoJHZhciwgJHRoaXMtPnZhcnMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnZhcnNbJHZhcl07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJQcm9wZXJ0eSAkdmFyIGRvZXMgbm90IGV4aXN0Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgYXVkaXQoJycsIHNlbGY6Ok1PRFVMRV9OQU1FLCAkZS0+Z2V0TWVzc2FnZSgpKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSR0aGlzLT5pZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldElkKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+aXNfbW9kaWZpZWQgPSB0cnVlOwogICAgICAgICR0aGlzLT5pZCA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlcklkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVzZXJfaWQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFVzZXJJZCgkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPmlzX21vZGlmaWVkID0gdHJ1ZTsKICAgICAgICAkdGhpcy0+dXNlcl9pZCA9ICR2YWx1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlcigpCiAgICB7CiAgICAgICAgcmV0dXJuIENNU1VzZXI6OnJldHJpZXZlQnlQaygkdGhpcy0+dXNlcl9pZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFVzZXIoQ01TVXNlciAkdXNlcikKICAgIHsKICAgICAgICAkdGhpcy0+c2V0VXNlcklkKCR1c2VyLT5nZXRJZCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWNmaUNyZWF0ZWRUaW1lc3RhbXAoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWNmaV9jcmVhdGVkX3RpbWVzdGFtcDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWNmaUNyZWF0ZWRUaW1lc3RhbXAoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5pc19tb2RpZmllZCA9IHRydWU7CiAgICAgICAgJHRoaXMtPm1jZmlfY3JlYXRlZF90aW1lc3RhbXAgPSAkdmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1jZmlVcGRhdGVkVGltZXN0YW1wKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1jZmlfdXBkYXRlZF90aW1lc3RhbXA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldE1jZmlVcGRhdGVkVGltZXN0YW1wKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+aXNfbW9kaWZpZWQgPSB0cnVlOwogICAgICAgICR0aGlzLT5tY2ZpX3VwZGF0ZWRfdGltZXN0YW1wID0gJHZhbHVlOwogICAgfQoKCiAgICAvLyBGVU5DVElPTlMgVE8gQ0xFQU4KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFuRmlsZW5hbWUoJGZpbGVuYW1lKSAgewogICAgICAgICRyZXN1bHQgPSBzdHJ0b2xvd2VyKCRmaWxlbmFtZSk7CiAgICAgICAgLy8gUmVtb3ZlIGFjY2VudHMKICAgICAgICAkcmVzdWx0ID0gc3RydHIoJHJlc3VsdCwgICLvv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv73vv70iLCAgImFhYWFhYWFhYWFhYW9vb29vb29vb29vb2VlZWVlZWVlY2NpaWlpaWlpaXV1dXV1dXV1eW5uIik7CgogICAgICAgIC8vIFNvZnQgd2F5CiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCIjIiwgIk5vLiIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiJCIsICJEb2xsYXIiLCAkcmVzdWx0KTsKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIiUiLCAiUGVyY2VudCIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiXiIsICIgIiwgJHJlc3VsdCk7CiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCImIiwgImFuZCIsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBzdHJfcmVwbGFjZSgiKiIsICIgIiwgJHJlc3VsdCk7CiAgICAgICAgJHJlc3VsdCA9IHN0cl9yZXBsYWNlKCI/IiwgIiAiLCAkcmVzdWx0KTsKICAgICAgICAkcmVzdWx0ID0gc3RyX3JlcGxhY2UoIiwiLCAiICIsICRyZXN1bHQpOwoKICAgICAgICAvLyBzdHJpcCBhbGwgbm9uIHdvcmQgY2hhcnMKICAgICAgICAvLyRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoJy9cVy8nLCAnICcsICRyZXN1bHQpOyAvLyBIQVJEIFdBWS4uLgoKICAgICAgICAvLyByZXBsYWNlIGFsbCB3aGl0ZSBzcGFjZSBzZWN0aW9ucyB3aXRoIGEgZGFzaAogICAgICAgICRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoJy9cICsvJywgJy0nLCAkcmVzdWx0KTsKICAgICAgICAvLyB0cmltIGRhc2hlcwogICAgICAgICRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoJy9cLSQvJywgJycsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSBwcmVnX3JlcGxhY2UoJy9eXC0vJywgJycsICRyZXN1bHQpOwogICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfQoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0TWltZVR5cGUoJGZpbGVuYW1lKSB7CiAgICAgICAgJGV4dGVuc2lvbiA9IHN0cnRvbG93ZXIoZW5kKGV4cGxvZGUoJy4nLCRmaWxlbmFtZSkpKTsKICAgICAgICAkbWltZV90eXBlcyA9IGFycmF5KAogICAgICAgICAgICAndHh0JyA9PiAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICdodG0nID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICAnaHRtbCcgPT4gJ3RleHQvaHRtbCcsCiAgICAgICAgICAgICdwaHAnID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICAgICAnY3NzJyA9PiAndGV4dC9jc3MnLAogICAgICAgICAgICAnanMnID0+ICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JywKICAgICAgICAgICAgJ2pzb24nID0+ICdhcHBsaWNhdGlvbi9qc29uJywKICAgICAgICAgICAgJ3htbCcgPT4gJ2FwcGxpY2F0aW9uL3htbCcsCiAgICAgICAgICAgICdzd2YnID0+ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsCiAgICAgICAgICAgICdmbHYnID0+ICd2aWRlby94LWZsdicsCiAgICAgICAgICAgIC8vIGltYWdlcwogICAgICAgICAgICAncG5nJyA9PiAnaW1hZ2UvcG5nJywKICAgICAgICAgICAgJ2pwZScgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICAgICAnanBlZycgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICAgICAnanBnJyA9PiAnaW1hZ2UvanBlZycsCiAgICAgICAgICAgICdnaWYnID0+ICdpbWFnZS9naWYnLAogICAgICAgICAgICAnYm1wJyA9PiAnaW1hZ2UvYm1wJywKICAgICAgICAgICAgJ2ljbycgPT4gJ2ltYWdlL3ZuZC5taWNyb3NvZnQuaWNvbicsCiAgICAgICAgICAgICd0aWZmJyA9PiAnaW1hZ2UvdGlmZicsCiAgICAgICAgICAgICd0aWYnID0+ICdpbWFnZS90aWZmJywKICAgICAgICAgICAgJ3N2ZycgPT4gJ2ltYWdlL3N2Zyt4bWwnLAogICAgICAgICAgICAnc3ZneicgPT4gJ2ltYWdlL3N2Zyt4bWwnLAogICAgICAgICAgICAvLyBhcmNoaXZlcwogICAgICAgICAgICAnemlwJyA9PiAnYXBwbGljYXRpb24vemlwJywKICAgICAgICAgICAgJ3JhcicgPT4gJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnLAogICAgICAgICAgICAnZXhlJyA9PiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJywKICAgICAgICAgICAgJ21zaScgPT4gJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCcsCiAgICAgICAgICAgICdjYWInID0+ICdhcHBsaWNhdGlvbi92bmQubXMtY2FiLWNvbXByZXNzZWQnLAogICAgICAgICAgICAvLyBhdWRpby92aWRlbwogICAgICAgICAgICAnbXAzJyA9PiAnYXVkaW8vbXBlZycsCiAgICAgICAgICAgICdxdCcgPT4gJ3ZpZGVvL3F1aWNrdGltZScsCiAgICAgICAgICAgICdtb3YnID0+ICd2aWRlby9xdWlja3RpbWUnLAogICAgICAgICAgICAvLyBhZG9iZQogICAgICAgICAgICAncGRmJyA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICAgICAgJ3BzZCcgPT4gJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnLAogICAgICAgICAgICAnYWknID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAgICAgJ2VwcycgPT4gJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLAogICAgICAgICAgICAncHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAgICAgLy8gbXMgb2ZmaWNlCiAgICAgICAgICAgICdkb2MnID0+ICdhcHBsaWNhdGlvbi9tc3dvcmQnLAogICAgICAgICAgICAncnRmJyA9PiAnYXBwbGljYXRpb24vcnRmJywKICAgICAgICAgICAgJ3hscycgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbCcsCiAgICAgICAgICAgICdwcHQnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcsCiAgICAgICAgICAgIC8vIG9wZW4gb2ZmaWNlCiAgICAgICAgICAgICdvZHQnID0+ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnLAogICAgICAgICAgICAnb2RzJyA9PiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCcKICAgICAgICApOwogICAgICAgIGlmIChpc3NldCgkbWltZV90eXBlc1skZXh0ZW5zaW9uXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRtaW1lX3R5cGVzWyRleHRlbnNpb25dOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFModuleRepository.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIENvbnRhaW4gZ2xvYmFsIE1DRk1vZHVsZSBhY3Rpb25zCgpjbGFzcyBNQ0ZNb2R1bGVSZXBvc2l0b3J5CnsKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZG9TZWxlY3QoTUNGQ3JpdGVyaWEgJGMpIHsKCQkkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwoJCSRxdWVyeSA9ICRjLT5idWlsZFF1ZXJ5KGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzJyk7CgkJJHJlc3VsdCA9ICRkYi0+ZXhlY3V0ZSgkcXVlcnksICRjLT52YWx1ZXMpOwoJCSRtb2R1bGVzID0gYXJyYXkoKTsKCQl3aGlsZSAoJHJlc3VsdCAmJiAoJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpKSB7CgkJCSRtb2R1bGUgPSBuZXcgTUNGTW9kdWxlKCk7CgkJCSRyb3dbJ2V4dHJhX2ZpZWxkcyddID0gdW5zZXJpYWxpemUoJHJvd1snZXh0cmFfZmllbGRzJ10pOwoJCQkkcm93WydzdHJ1Y3R1cmUnXSA9IHVuc2VyaWFsaXplKCRyb3dbJ3N0cnVjdHVyZSddKTsKCQkJJHJvd1snZmlsdGVycyddID0gdW5zZXJpYWxpemUoJHJvd1snZmlsdGVycyddKTsKCQkJJHJvd1snZXh0cmFfZmVhdHVyZXMnXSA9IHVuc2VyaWFsaXplKCRyb3dbJ2V4dHJhX2ZlYXR1cmVzJ10pOwoJCQkkbW9kdWxlLT5wb3B1bGF0ZUZyb21BcnJheSgkcm93LCBmYWxzZSk7CgkJICAgICRtb2R1bGVzW10gPSAkbW9kdWxlOwoJCX0KCQlyZXR1cm4gJG1vZHVsZXM7Cgl9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gTUNGQ3JpdGVyaWEgJGMKICAgICAqIEByZXR1cm4gTUNGTW9kdWxlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZG9TZWxlY3RPbmUoTUNGQ3JpdGVyaWEgJGMpIHsKCQkKCQkkYy0+c2V0TGltaXQoMSk7CgkJJHJlc3VsdCA9IHNlbGY6OmRvU2VsZWN0KCRjKTsKCgkJaWYgKGNvdW50KCRyZXN1bHQpID4gMCkgewoJCQlyZXNldCgkcmVzdWx0KTsKCQkJcmV0dXJuIGN1cnJlbnQoJHJlc3VsdCk7CgkJfSBlbHNlIHsKCQkJcmV0dXJuIG51bGw7CgkJfQoJfQoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlQnlQaygkcGspIHsKCQkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoJCSRjLT5hZGQoJ2lkJywgJHBrKTsKCQlyZXR1cm4gc2VsZjo6ZG9TZWxlY3RPbmUoJGMpOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV0cmlldmVCeU5hbWUoJG5hbWUpIHsKCQkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoJCSRjLT5hZGQoJ21vZHVsZV9uYW1lJywgJG5hbWUpOwoJCXJldHVybiBzZWxmOjpkb1NlbGVjdE9uZSgkYyk7Cgl9CgoJCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldE1vZHVsZXNXaXRoRmllbGRUeXBlcyhBcnJheSAkZmllbGRfdHlwZXMpCgl7CQkKCQkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoJCSRtb2R1bGVzID0gc2VsZjo6ZG9TZWxlY3QoJGMpOwoJCQoJCSRmaWx0ZXJlZF9tb2R1bGVzICA9IGFycmF5KCk7CgkJCgkJZm9yZWFjaCgkbW9kdWxlcyBhcyAkbW9kdWxlKQoJCXsKCQkJaWYoJG1vZHVsZS0+aGFzRmllbGRXaXRoVHlwZXMoJGZpZWxkX3R5cGVzKSkKCQkJewoJCQkJJGZpbHRlcmVkX21vZHVsZXNbXSA9ICRtb2R1bGU7CgkJCX0KCQl9CgkJCgkJcmV0dXJuICRmaWx0ZXJlZF9tb2R1bGVzOwoJfQp9]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFModuleStructure.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBNQ0ZNb2R1bGVTdHJ1Y3R1cmUgQ2xhc3MKICoKICogVGhpcyBjbGFzcyBoYW5kbGUgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uIG9mIHRoZSBmaWVsZHMgaW5zaWRlIGEgbW9kdWxlCiAqICAqCiAqIEZJWE1FOiBDaGVjayB0aGUgc2VjdXJpdHkgcHJvY2Vzc2VzICEKICoKICovCgpjbGFzcyBNQ0ZNb2R1bGVTdHJ1Y3R1cmUKewoKICAgIHByb3RlY3RlZCAkc3RydWN0dXJlOyAvLyBTdG9yZWQgc3RydWN0dXJlCiAgICBwcm90ZWN0ZWQgc3RhdGljICR2ZXJzaW9uID0gMjsgLy8gQ3VycmVudCB2ZXJzaW9uIG9mIHRoaXMgY2xhc3MKCiAgICBwcm90ZWN0ZWQgJG1vZHVsZTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqIEBkZXByZWNhdGVkIFVzZSBNQ0ZNb2R1bGVGaWVsZDo6JGJsYWNrbGlzdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljICRibGFja2xpc3QgPSBhcnJheSgnaWQnLCAncGFyZW50X2lkJywgJ3RpdGxlJywgJ2NyZWF0ZWRfYXQnLCAnY3JlYXRlZF9ieScsICd1cGRhdGVkX2F0JywgJ3VwZGF0ZWRfYnknLCAnb3JkZXJfYnknLCAncGFyZW50JywgJ3BhcmVudF9tb2R1bGUnLCAncHVibGlzaGVkJywgJ29yZGVyJywgJ29yZGVyX2J5JywgJ2Zyb20nLCAnc2VsZWN0JywgJ2luJywgJ2RhdGUnLCAnZnVsbF90ZXh0X3NlYXJjaCcsICdjb3JlX3NsdWcnLCAnY29yZXNsdWcnLCAndXNlcl9pZCcsICd1c2VyJywgJ2Z1bmN0aW9uJywgJ2J5aWQnLCAnanNvbicsICdhc2FycmF5JywgJ3NlYXJjaHN0cmluZycsICdncm91cCcsICdieScsICdhZGQnLCAnYWxsJywgJ2FsdGVyJywgJ2FuYWx5emUnLCAnYW5kJywgJ2FzJywgJ2FzYycsICdhc2Vuc2l0aXZlJywgJ2JlZm9yZScsICdiZXR3ZWVuJywgJ2JpZ2ludCcsICdiaW5hcnknLCAnYmxvYicsICdib3RoJywgJ2J5JywgJ2NhbGwnLCAnY2FzY2FkZScsICdjYXNlJywgJ2NoYW5nZScsICdjaGFyJywgJ2NoYXJhY3RlcicsICdjaGVjaycsICdjb2xsYXRlJywgJ2NvbHVtbicsICdjb25kaXRpb24nLCAnY29uc3RyYWludCcsICdjb250aW51ZScsICdjb252ZXJ0JywgJ2NyZWF0ZScsICdjcm9zcycsICdjdXJyZW50X2RhdGUnLCAnY3VycmVudF90aW1lJywgJ2N1cnJlbnRfdGltZXN0YW1wJywgJ2N1cnJlbnRfdXNlcicsICdjdXJzb3InLCAnZGF0YWJhc2UnLCAnZGF0YWJhc2VzJywgJ2RheV9ob3VyJywgJ2RheV9taWNyb3NlY29uZCcsICdkYXlfbWludXRlJywgJ2RheV9zZWNvbmQnLCAnZGVjJywgJ2RlY2ltYWwnLCAnZGVjbGFyZScsICdkZWZhdWx0JywgJ2RlbGF5ZWQnLCAnZGVsZXRlJywgJ2Rlc2MnLCAnZGVzY3JpYmUnLCAnZGV0ZXJtaW5pc3RpYycsICdkaXN0aW5jdCcsICdkaXN0aW5jdHJvdycsICdkaXYnLCAnZG91YmxlJywgJ2Ryb3AnLCAnZHVhbCcsICdlYWNoJywgJ2Vsc2UnLCAnZWxzZWlmJywgJ2VuY2xvc2VkJywgJ2VzY2FwZWQnLCAnZXhpc3RzJywgJ2V4aXQnLCAnZXhwbGFpbicsICdmYWxzZScsICdmZXRjaCcsICdmbG9hdCcsICdmbG9hdDQnLCAnZmxvYXQ4JywgJ2ZvcicsICdmb3JjZScsICdmb3JlaWduJywgJ2Zyb20nLCAnZnVsbHRleHQnLCAnZ3JhbnQnLCAnZ3JvdXAnLCAnaGF2aW5nJywgJ2hpZ2hfcHJpb3JpdHknLCAnaG91cl9taWNyb3NlY29uZCcsICdob3VyX21pbnV0ZScsICdob3VyX3NlY29uZCcsICdpZicsICdpZ25vcmUnLCAnaW4nLCAnaW5kZXgnLCAnaW5maWxlJywgJ2lubmVyJywgJ2lub3V0JywgJ2luc2Vuc2l0aXZlJywgJ2luc2VydCcsICdpbnQnLCAnaW50MScsICdpbnQyJywgJ2ludDMnLCAnaW50NCcsICdpbnQ4JywgJ2ludGVnZXInLCAnaW50ZXJ2YWwnLCAnaW50bycsICdpcycsICdpdGVyYXRlJywgJ2pvaW4nLCAna2V5JywgJ2tleXMnLCAna2lsbCcsICdsZWFkaW5nJywgJ2xlYXZlJywgJ2xlZnQnLCAnbGlrZScsICdsaW1pdCcsICdsaW5lcycsICdsb2FkJywgJ2xvY2FsdGltZScsICdsb2NhbHRpbWVzdGFtcCcsICdsb2NrJywgJ2xvbmcnLCAnbG9uZ2Jsb2InLCAnbG9uZ3RleHQnLCAnbG9vcCcsICdsb3dfcHJpb3JpdHknLCAnbWF0Y2gnLCAnbWVkaXVtYmxvYicsICdtZWRpdW1pbnQnLCAnbWVkaXVtdGV4dCcsICdtaWRkbGVpbnQnLCAnbWludXRlX21pY3Jvc2Vjb25kJywgJ21pbnV0ZV9zZWNvbmQnLCAnbW9kJywgJ21vZGlmaWVzJywgJ25hdHVyYWwnLCAnbm90JywgJ25vX3dyaXRlX3RvX2JpbmxvZycsICdudWxsJywgJ251bWVyaWMnLCAnb24nLCAnb3B0aW1pemUnLCAnb3B0aW9uJywgJ29wdGlvbmFsbHknLCAnb3InLCAnb3JkZXInLCAnb3V0JywgJ291dGVyJywgJ291dGZpbGUnLCAncHJlY2lzaW9uJywgJ3ByaW1hcnknLCAncHJvY2VkdXJlJywgJ3B1cmdlJywgJ3JlYWQnLCAncmVhZHMnLCAncmVhbCcsICdyZWZlcmVuY2VzJywgJ3JlZ2V4cCcsICdyZWxlYXNlJywgJ3JlbmFtZScsICdyZXBlYXQnLCAncmVwbGFjZScsICdyZXF1aXJlJywgJ3Jlc3RyaWN0JywgJ3JldHVybicsICdyZXZva2UnLCAncmlnaHQnLCAncmxpa2UnLCAnc2NoZW1hJywgJ3NjaGVtYXMnLCAnc2Vjb25kX21pY3Jvc2Vjb25kJywgJ3NlbGVjdCcsICdzZW5zaXRpdmUnLCAnc2VwYXJhdG9yJywgJ3NldCcsICdzaG93JywgJ3NtYWxsaW50JywgJ3NvbmFtZScsICdzcGF0aWFsJywgJ3NwZWNpZmljJywgJ3NxbCcsICdzcWxleGNlcHRpb24nLCAnc3Fsc3RhdGUnLCAnc3Fsd2FybmluZycsICdzcWxfYmlnX3Jlc3VsdCcsICdzcWxfY2FsY19mb3VuZF9yb3dzJywgJ3NxbF9zbWFsbF9yZXN1bHQnLCAnc3NsJywgJ3N0YXJ0aW5nJywgJ3N0cmFpZ2h0X2pvaW4nLCAndGFibGUnLCAndGVybWluYXRlZCcsICd0aGVuJywgJ3RpbnlibG9iJywgJ3RpbnlpbnQnLCAndGlueXRleHQnLCAndG8nLCAndHJhaWxpbmcnLCAndHJpZ2dlcicsICd0cnVlJywgJ3VuZG8nLCAndW5pb24nLCAndW5pcXVlJywgJ3VubG9jaycsICd1bnNpZ25lZCcsICd1cGRhdGUnLCAndXNhZ2UnLCAndXNlJywgJ3VzaW5nJywgJ3V0Y19kYXRlJywgJ3V0Y190aW1lJywgJ3V0Y190aW1lc3RhbXAnLCAndmFsdWVzJywgJ3ZhcmJpbmFyeScsICd2YXJjaGFyJywgJ3ZhcmNoYXJhY3RlcicsICd2YXJ5aW5nJywgJ3doZW4nLCAnd2hlcmUnLCAnd2hpbGUnLCAnd2l0aCcsICd3cml0ZScsICd4b3InLCAneWVhcl9tb250aCcsICd6ZXJvZmlsbCcsICdzZW5kX3VwZGF0ZV9pbW1lZGlhdGVseScsICdsZXZlbCcsICdldmVudHMnLCAnZXZlbnQnKTsKCiAgICAvLyBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICAvLyB7CiAgICAvLyAJcmV0dXJuIHNlcmlhbGl6ZSgkdGhpcy0+c3RydWN0dXJlKTsKICAgIC8vIH0KICAgIC8vCgogICAgLyoqCiAgICAgKiBAcGFyYW0gJHN0cnVjdHVyZQogICAgICogQHBhcmFtIE1DRk1vZHVsZSAkbW9kdWxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RydWN0dXJlLCAkbW9kdWxlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHN0cnVjdHVyZVsndmVyc2lvbiddKSkgewogICAgICAgICAgICAvLyBTdHJ1Y3R1cmUgaXMgY29ycmVjdCwgd2UgY2FuIGp1c3QgcHJvY2VlZAogICAgICAgICAgICAkdGhpcy0+c3RydWN0dXJlID0gJHN0cnVjdHVyZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBPbGQgc3RydWN0dXJlIGRldGVjdGVkOiBGaXJzdCB3ZSBuZWVkIHRvIHRyYW5zZm9ybSBpdAogICAgICAgICAgICAkdGhpcy0+c3RydWN0dXJlID0gc2VsZjo6bWlncmF0ZVN0cnVjdHVyZSgkc3RydWN0dXJlKTsKICAgICAgICB9CgogICAgICAgIGlmKGlzc2V0KCRtb2R1bGUpKQogICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPm1vZHVsZSA9ICRtb2R1bGU7CiAgICAgICAgfQoKICAgICAgICAvLyBFeGFtcGxlCiAgICAgICAgLy8gJHRoaXMtPnN0cnVjdHVyZVsndGFicyddWydkZWZhdWx0J11bJ25hbWUnXSA9ICdNYWluJzsgLy8gVE9ETyA6IEkxOG4KICAgICAgICAvLyAkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ11bJ2RlZmF1bHQnXVsnZmllbGRzZXRzJ11bJ2RlZmF1bHQnXVsnbmFtZSddID0gJ01haW4nOyAvLyBUT0RPIDogSTE4bgogICAgICAgIC8vICR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVsnc2Vjb25kYXJ5J11bJ25hbWUnXSA9ICdTZWNvbmRhcnknOwogICAgICAgIC8vICR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVsnc2Vjb25kYXJ5J11bJ2ZpZWxkc2V0cyddWydkZWZhdWx0J10gPSBhcnJheSgnZmllbGRzJyA9PiBhcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RydWN0dXJlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cnVjdHVyZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGFicygpCiAgICB7CiAgICAgICAgJHRhYnMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXSBhcyAkdGFiID0+ICRpbmZvKSB7CiAgICAgICAgICAgICR0YWJzWyR0YWJdID0gJGluZm87CiAgICAgICAgfQogICAgICAgIHJldHVybiAkdGFiczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VGFiKCRuYW1lKQogICAgewogICAgICAgICRrZXkgPSBzZWxmOjpjbGVhbk5hbWUoJG5hbWUpOwogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddWyRrZXldKSkgewogICAgICAgICAgICAkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ11bJGtleV1bJ25hbWUnXSA9ICRuYW1lOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlVGFiKCRrZXkpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVska2V5XSkpIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddWyRrZXldKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNldEZpZWxkc2V0KCR0YWJfa2V5LCAkbmFtZSkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddWyR0YWJfa2V5XSkpIHsKICAgICAgICAgICAgJGtleSA9IHNlbGY6OmNsZWFuTmFtZSgkbmFtZSk7CiAgICAgICAgICAgICR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVskdGFiX2tleV1bJ2ZpZWxkc2V0cyddWyRrZXldWyduYW1lJ10gPSAkbmFtZTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUZpZWxkc2V0KCR0YWJfa2V5LCAka2V5KQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ11bJHRhYl9rZXldWydmaWVsZHNldHMnXVska2V5XSkpIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddWyR0YWJfa2V5XVsnZmllbGRzZXRzJ11bJGtleV0pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmllbGRzZXRzV2l0aFRhYnNGb3JTZWxlY3QoKQogICAgewogICAgICAgICRsaXN0ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ10gYXMgJHRhYl9rZXkgPT4gJHRhYikgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRhYlsnZmllbGRzZXRzJ10pKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGFiWydmaWVsZHNldHMnXSBhcyAkZnNfa2V5ID0+ICRmaWVsZHNldCkgewogICAgICAgICAgICAgICAgICAgICRsaXN0WyR0YWJfa2V5IC4gJy0tLScgLiAkZnNfa2V5XSA9ICR0YWJbJ25hbWUnXSAuICc6ICcgLiAkZmllbGRzZXRbJ25hbWUnXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGxpc3Q7CiAgICB9CgogICAgLy8KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkRmllbGQoJHRhYl9rZXksICRmaWVsZHNldF9rZXksICRwYXJhbXMpCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkcGFyYW1zWydsYWJlbCddKSB8fCAkcGFyYW1zWydsYWJlbCddID09ICcnKSB7CiAgICAgICAgICAgICRwYXJhbXNbJ2xhYmVsJ10gPSAnRGVmYXVsdCBmaWVsZCBuYW1lJzsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkcGFyYW1zWyduYW1lJ10pICYmICRwYXJhbXNbJ25hbWUnXSAhPSAnJykgewogICAgICAgICAgICAkbmFtZSA9ICRwYXJhbXNbJ25hbWUnXTsKICAgICAgICAgICAgJHRoaXMtPm1vdmVGaWVsZCgkdGFiX2tleSwgJGZpZWxkc2V0X2tleSwgJG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRuYW1lID0gJHRoaXMtPmNyZWF0ZU5hbWVGcm9tTGFiZWwoJHBhcmFtc1snbGFiZWwnXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG5hbWUpKSB7CiAgICAgICAgICAgICR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVskdGFiX2tleV1bJ2ZpZWxkc2V0cyddWyRmaWVsZHNldF9rZXldWydmaWVsZHMnXVskbmFtZV0gPSBhcnJheSgKICAgICAgICAgICAgICAgICdsYWJlbCcgPT4gJHBhcmFtc1snbGFiZWwnXSwKICAgICAgICAgICAgICAgICduYW1lJyA9PiAkbmFtZSwKICAgICAgICAgICAgICAgICd0eXBlJyA9PiAkcGFyYW1zWyd0eXBlJ10sCiAgICAgICAgICAgICAgICAnb3B0aW9ucycgPT4gc3RyX3JlcGxhY2UoYXJyYXkoIlxuIiwgIlxyIiksICcgJywgJHBhcmFtc1snb3B0aW9ucyddKSwKICAgICAgICAgICAgICAgICdjb2x1bW4nID0+IGlzc2V0KCRwYXJhbXNbJ2NvbHVtbiddKSA/ICRwYXJhbXNbJ2NvbHVtbiddIDogbnVsbCwKICAgICAgICAgICAgICAgICdmaWx0ZXInID0+IGlzc2V0KCRwYXJhbXNbJ2ZpbHRlciddKSA/ICRwYXJhbXNbJ2ZpbHRlciddIDogbnVsbCwKICAgICAgICAgICAgICAgICdmcm9udGVuZCcgPT4gaXNzZXQoJHBhcmFtc1snZnJvbnRlbmQnXSkgPyAkcGFyYW1zWydmcm9udGVuZCddIDogbnVsbAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gbW92ZUZpZWxkKCR0YWJfa2V5LCAkZmllbGRzZXRfa2V5LCAkbmFtZSkKICAgIHsKICAgICAgICBpZiAoJHBsYWNlID0gJHRoaXMtPmZpbmRGaWVsZCgkbmFtZSkpIHsKICAgICAgICAgICAgaWYgKCgkcGxhY2VbJ3RhYl9rZXknXSAhPSAkdGFiX2tleSkgfHwgKCRwbGFjZVsnZmllbGRzZXRfa2V5J10gIT0gJGZpZWxkc2V0X2tleSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVskdGFiX2tleV1bJ2ZpZWxkc2V0cyddWyRmaWVsZHNldF9rZXldWydmaWVsZHMnXVskbmFtZV0gPSAkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ11bJHBsYWNlWyd0YWJfa2V5J11dWydmaWVsZHNldHMnXVskcGxhY2VbJ2ZpZWxkc2V0X2tleSddXVsnZmllbGRzJ11bJG5hbWVdOwogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddWyRwbGFjZVsndGFiX2tleSddXVsnZmllbGRzZXRzJ11bJHBsYWNlWydmaWVsZHNldF9rZXknXV1bJ2ZpZWxkcyddWyRuYW1lXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlb3JkZXJGaWVsZHMoJHRhYl9rZXksICRmaWVsZHNldF9rZXksICRmaWVsZHMpCiAgICB7CiAgICAgICAgJG5ld19maWVsZHMgPSBhcnJheSgpOwogICAgICAgICRmX2tleXMgPSBleHBsb2RlKCcsJywgJGZpZWxkcyk7CiAgICAgICAgZm9yZWFjaCAoJGZfa2V5cyBhcyAka2V5KSB7CiAgICAgICAgICAgICRuZXdfZmllbGRzWyRrZXldID0gJHRoaXMtPnN0cnVjdHVyZVsndGFicyddWyR0YWJfa2V5XVsnZmllbGRzZXRzJ11bJGZpZWxkc2V0X2tleV1bJ2ZpZWxkcyddWyRrZXldOwogICAgICAgIH0KICAgICAgICAkbmV3X2ZpZWxkc1ska2V5XSA9ICR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVskdGFiX2tleV1bJ2ZpZWxkc2V0cyddWyRmaWVsZHNldF9rZXldWydmaWVsZHMnXSA9ICRuZXdfZmllbGRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kRmllbGQoJG5hbWUpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddIGFzICR0YWJfa2V5ID0+ICR0YWIpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRhYlsnZmllbGRzZXRzJ10gYXMgJGZzX2tleSA9PiAkZmllbGRzZXQpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWVsZHNldFsnZmllbGRzJ10gYXMgJGZpZWxkKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRmaWVsZFsnbmFtZSddID09ICRuYW1lKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgndGFiX2tleScgPT4gJHRhYl9rZXksICdmaWVsZHNldF9rZXknID0+ICRmc19rZXksICdmaWVsZHNldF9uYW1lJyA9PiAkZmllbGRzZXRbJ25hbWUnXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdFRhYkZpZWxkc2V0KCkKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ10gYXMgJHRhYl9rZXkgPT4gJHRhYikgewogICAgICAgICAgICBmb3JlYWNoICgkdGFiWydmaWVsZHNldHMnXSBhcyAkZnNfa2V5ID0+ICRmaWVsZHNldCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCd0YWJfa2V5JyA9PiAkdGFiX2tleSwgJ2ZpZWxkc2V0X2tleScgPT4gJGZzX2tleSwgJ2ZpZWxkc2V0X25hbWUnID0+ICRmaWVsZHNldFsnbmFtZSddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKCiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJGxhYmVsCiAgICAgKiBAcmV0dXJuIG1peGVkfHN0cmluZwogICAgICogQGRlcHJlY2F0ZWQgc2VlIE1DRk1vZHVsZUZpZWxkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGVOYW1lRnJvbUxhYmVsKCRsYWJlbCkKICAgIHsKICAgICAgICAkbmFtZSA9IHNlbGY6OmNsZWFuTmFtZSgkbGFiZWwsICdfJyk7CiAgICAgICAgJG5hbWUgPSBzdHJfcmVwbGFjZSgnbWNmaV8nLCAnbWNmXycsICRuYW1lKTsKICAgICAgICBpZiAoaW5fYXJyYXkoJG5hbWUsIHNlbGY6OiRibGFja2xpc3QpKSB7CiAgICAgICAgICAgICRuYW1lID0gJ21jZl8nIC4gJG5hbWU7CiAgICAgICAgfQoKICAgICAgICAkb3JpZ2luYWxfbmFtZSA9ICRuYW1lOwogICAgICAgICRmaWVsZHMgPSAkdGhpcy0+Z2V0QWxsRmllbGRzTmFtZSgpOwogICAgICAgICRpID0gMTsKICAgICAgICB3aGlsZSAoaW5fYXJyYXkoJG5hbWUsICRmaWVsZHMpKSB7CiAgICAgICAgICAgICRuYW1lID0gJG9yaWdpbmFsX25hbWUgLiAkaTsKICAgICAgICAgICAgJGkrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRuYW1lOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGxGaWVsZHNOYW1lKCkKICAgIHsKICAgICAgICAkZmllbGRzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddIGFzICR0YWIpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRhYlsnZmllbGRzZXRzJ10gYXMgJGZpZWxkc2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGZpZWxkc2V0WydmaWVsZHMnXSkpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmllbGRzZXRbJ2ZpZWxkcyddIGFzICRmaWVsZCkgewogICAgICAgICAgICAgICAgICAgICAgICAkZmllbGRzW10gPSAkZmllbGRbJ25hbWUnXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICRmaWVsZHM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEFsbEZpZWxkc1R5cGUoKQogICAgewogICAgICAgICRmaWVsZHMgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ10gYXMgJHRhYikgewogICAgICAgICAgICBmb3JlYWNoICgkdGFiWydmaWVsZHNldHMnXSBhcyAkZmllbGRzZXQpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZmllbGRzZXRbJ2ZpZWxkcyddKSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWVsZHNldFsnZmllbGRzJ10gYXMgJGZpZWxkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZHNbXSA9ICRmaWVsZFsndHlwZSddOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGZpZWxkczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmllbGRzV2l0aFR5cGVzKEFycmF5ICRmaWVsZF90eXBlcykKICAgIHsKICAgICAgICAkZmllbGRzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnN0cnVjdHVyZVsndGFicyddIGFzICR0YWIpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRhYlsnZmllbGRzZXRzJ10gYXMgJGZpZWxkc2V0KSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGZpZWxkc2V0WydmaWVsZHMnXSkpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmllbGRzZXRbJ2ZpZWxkcyddIGFzICRmaWVsZCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5fYXJyYXkoJGZpZWxkWyd0eXBlJ10sICRmaWVsZF90eXBlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZHNbJGZpZWxkWyduYW1lJ11dID0gJGZpZWxkOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZmllbGRzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBbGxGaWVsZHMoKQogICAgewogICAgICAgICRmaWVsZHMgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ10gYXMgJHRhYikgewogICAgICAgICAgICBmb3JlYWNoICgkdGFiWydmaWVsZHNldHMnXSBhcyAkZmllbGRzZXQpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkZmllbGRzZXRbJ2ZpZWxkcyddKSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmaWVsZHNldFsnZmllbGRzJ10gYXMgJGZpZWxkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRmaWVsZHNbJGZpZWxkWyduYW1lJ11dID0gJGZpZWxkOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJGZpZWxkczsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzRmllbGRXaXRoVHlwZSgkZmllbGRfdHlwZSkKICAgIHsKICAgICAgICAkZmllbGRzX3R5cGUgPSAkdGhpcy0+Z2V0QWxsRmllbGRzVHlwZSgpOwogICAgICAgIGlmIChpbl9hcnJheSgkZmllbGRfdHlwZSwgJGZpZWxkc190eXBlKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZW1vdmVGaWVsZCgkbmFtZSkKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ10gYXMgJHRhYl9rZXkgPT4gJHRhYikgewogICAgICAgICAgICBmb3JlYWNoICgkdGFiWydmaWVsZHNldHMnXSBhcyAkZnNfa2V5ID0+ICRmaWVsZHNldCkgewogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRmaWVsZHNldFsnZmllbGRzJ11bJG5hbWVdKSkgewogICAgICAgICAgICAgICAgICAgIHVuc2V0KCR0aGlzLT5zdHJ1Y3R1cmVbJ3RhYnMnXVskdGFiX2tleV1bJ2ZpZWxkc2V0cyddWyRmc19rZXldWydmaWVsZHMnXVskbmFtZV0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICRuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzcGFjZXIKICAgICAqIEByZXR1cm4gbWl4ZWR8c3RyaW5nCiAgICAgKiBAZGVwcmVjYXRlZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFuTmFtZSgkbmFtZSwgJHNwYWNlciA9ICctJykKICAgIHsKICAgICAgICByZXR1cm4gTUNGTW9kdWxlRmllbGQ6OmNsZWFuTmFtZSgkbmFtZSwgJHNwYWNlcik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtaWdyYXRlU3RydWN0dXJlKCRzdHJ1Y3R1cmUpCiAgICB7CiAgICAgICAgJGFycmF5ID0gYXJyYXkoKTsKICAgICAgICAvLyBWZXJzaW9uIDEKICAgICAgICAkYXJyYXlbJ3ZlcnNpb24nXSA9IHNlbGY6OiR2ZXJzaW9uOwoKICAgICAgICBmb3JlYWNoICgkc3RydWN0dXJlIGFzICRwb3NpdGlvbiA9PiAkZmllbGQpIHsKICAgICAgICAgICAgJGFycmF5Wyd0YWJzJ11bJ2RlZmF1bHQnXVsnZmllbGRzZXRzJ11bJ2RlZmF1bHQnXVsnZmllbGRzJ11bJGZpZWxkWyduYW1lJ11dID0gJGZpZWxkOwogICAgICAgIH0KCiAgICAgICAgJGFycmF5Wyd0YWJzJ11bJ2RlZmF1bHQnXVsnbmFtZSddID0gJ01haW4nOyAvLyBUT0RPIDogSTE4bgogICAgICAgICRhcnJheVsndGFicyddWydkZWZhdWx0J11bJ2ZpZWxkc2V0cyddWydkZWZhdWx0J11bJ25hbWUnXSA9ICdNYWluJzsgLy8gVE9ETyA6IEkxOG4KCiAgICAgICAgcmV0dXJuICRhcnJheTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T2xkU3RydWN0dXJlKCkKICAgIHsKICAgICAgICAvLyBWZXJzaW9uIDEKICAgICAgICAkc3RydWN0dXJlID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RydWN0dXJlWyd0YWJzJ10gYXMgJHRhYikgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRhYlsnZmllbGRzZXRzJ10pKSB7CiAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGFiWydmaWVsZHNldHMnXSBhcyAkZmllbGRzZXQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGZpZWxkc2V0WydmaWVsZHMnXSkgJiYgaXNfYXJyYXkoJGZpZWxkc2V0WydmaWVsZHMnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZpZWxkc2V0WydmaWVsZHMnXSBhcyAkZmllbGQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHJ1Y3R1cmVbXSA9ICRmaWVsZDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJHN0cnVjdHVyZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdXBncmFkZVN0cnVjdHVyZSgpCiAgICB7CiAgICAgICAgc3dpdGNoKCR0aGlzLT52ZXJzaW9uKXsKICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgJHRoaXMtPnVwZ3JhZGVUbzIoKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB1cGdyYWRlVG8yKCkKICAgIHsKICAgICAgICBpZigkdGhpcy0+bW9kdWxlKQogICAgICAgIHsKICAgICAgICAgICAgJGZpZWxkcyA9ICR0aGlzLT5nZXRBbGxGaWVsZHMoKTsKCiAgICAgICAgICAgIGZvcmVhY2goJGZpZWxkcyBhcyAkZmllbGQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRuZXdfZmllbGQgPSBuZXcgTUNGTW9kdWxlRmllbGQoKTsKICAgICAgICAgICAgICAgICRuZXdfZmllbGQtPnNldE1vZHVsZSgkdGhpcy0+bW9kdWxlKTsKICAgICAgICAgICAgICAgICRuZXdfZmllbGQtPnNldExhYmVsKCRmaWVsZFsnbGFiZWwnXSk7CiAgICAgICAgICAgICAgICAkbmV3X2ZpZWxkLT5zZXRGaWVsZE5hbWUoJGZpZWxkWyduYW1lJ10pOwogICAgICAgICAgICAgICAgJG5ld19maWVsZC0+c2V0RmllbGRUeXBlKCRmaWVsZFsndHlwZSddKTsKICAgICAgICAgICAgICAgICRuZXdfZmllbGQtPnNldE9wdGlvbignb3B0aW9ucycsICRmaWVsZFsnb3B0aW9ucyddKTsKICAgICAgICAgICAgICAgICRuZXdfZmllbGQtPnNldE9wdGlvbignY29sdW1uJywgJGZpZWxkWydjb2x1bW4nXSk7CiAgICAgICAgICAgICAgICAkbmV3X2ZpZWxkLT5zZXRPcHRpb24oJ2ZpbHRlcicsICRmaWVsZFsnZmlsdGVyJ10pOwogICAgICAgICAgICAgICAgJG5ld19maWVsZC0+c2V0T3B0aW9uKCdmcm9udGVuZCcsICRmaWVsZFsnZnJvbnRlbmQnXSk7CiAgICAgICAgICAgICAgICAkbmV3X2ZpZWxkLT5zYXZlKCk7CiAgICAgICAgICAgIH0KCgogICAgICAgICAgICAkdGhpcy0+dmVyc2lvbiA9IDI7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ01DRk1vZHVsZVN0cnVjdHVyZTogTW9kdWxlIHVuZGVmaW5lZCcpOwogICAgICAgIH0KCiAgICB9CgogICAgLyogREVWIE5PVEVTCgogICAgICAgIFN0cnVjdHVyZToKCiAgICAgICAgVGFicyA9PiBGaWVsZHNldHMgPT4gRmllbGRzCgogICAgKi8KCgp9]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFObject.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmFic3RyYWN0IGNsYXNzIE1DRk9iamVjdAp7CgogICAgLyoqCiAgICAgKiBAdmFyCiAgICAgKi8KICAgIHByb3RlY3RlZCAkaWQ7CiAgICAvKioKICAgICAqIEB2YXIKICAgICAqLwogICAgcHJvdGVjdGVkICRjcmVhdGVkX2F0OwogICAgLyoqCiAgICAgKiBAdmFyCiAgICAgKi8KICAgIHByb3RlY3RlZCAkY3JlYXRlZF9ieTsKICAgIC8qKgogICAgICogQHZhcgogICAgICovCiAgICBwcm90ZWN0ZWQgJHVwZGF0ZWRfYXQ7CiAgICAvKioKICAgICAqIEB2YXIKICAgICAqLwogICAgcHJvdGVjdGVkICR1cGRhdGVkX2J5OwoKICAgIC8qKgogICAgICogRGF0YWJhc2UgZmllbGRzIG1hcHBpbmcKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkdGFibGVfZmllbGRzID0gYXJyYXkoCiAgICAgICAgJ2lkJyA9PiAnSSBLRVkgQVVUTycsCiAgICAgICAgJ2NyZWF0ZWRfYXQnID0+ICdEVCcsCiAgICAgICAgJ2NyZWF0ZWRfYnknID0+ICdJJywKICAgICAgICAndXBkYXRlZF9hdCcgPT4gJ0RUJywKICAgICAgICAndXBkYXRlZF9ieScgPT4gJ0knLAogICAgKTsKCiAgICAvKioKICAgICAqIERhdGFiYXNlIGluZGV4ZWQgZmllbGRzCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJHRhYmxlX2ZpZWxkc19pbmRleGVzID0gYXJyYXkoJ2lkJyk7CgogICAgY29uc3QgVEFCTEVfTkFNRSA9ICcnOwoKICAgIHB1YmxpYyBzdGF0aWMgJGJsYWNrbGlzdCA9IGFycmF5KAogICAgICAgICd0YWJsZWZpZWxkcycKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUYWJsZUZpZWxkcygpCiAgICB7CiAgICAgICAgaWYgKCRwYXJlbnQgPSBnZXRfcGFyZW50X2NsYXNzKGdldF9jYWxsZWRfY2xhc3MoKSkpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXJlbnQ6OmdldFRhYmxlRmllbGRzKCkgKyBzdGF0aWM6OiR0YWJsZV9maWVsZHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYzo6JHRhYmxlX2ZpZWxkczsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXRyaWV2ZVRhYmxlRmllbGRzKCkKICAgIHsKICAgICAgICAkZmllbGRzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoc3RhdGljOjpnZXRUYWJsZUZpZWxkcygpIGFzICRmaWVsZF9uYW1lID0+ICRmaWVsZF90eXBlKSB7CiAgICAgICAgICAgICRmaWVsZHNbXSA9ICRmaWVsZF9uYW1lIC4gJyAnIC4gJGZpZWxkX3R5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZmllbGRzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VGFibGVGaWVsZEluZGV4ZXMoKQogICAgewogICAgICAgIGlmICgkcGFyZW50ID0gZ2V0X3BhcmVudF9jbGFzcyhnZXRfY2FsbGVkX2NsYXNzKCkpKSB7CiAgICAgICAgICAgIHJldHVybiAkcGFyZW50OjpnZXRUYWJsZUZpZWxkSW5kZXhlcygpICsgc3RhdGljOjokdGFibGVfZmllbGRzX2luZGV4ZXM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYzo6JHRhYmxlX2ZpZWxkc19pbmRleGVzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldElkKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmlkOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3NldCgkbmFtZSwgJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT4kbmFtZSA9ICR2YWx1ZTsKICAgIH0KCgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRuYW1lKQogICAgewogICAgICAgICRtZXRob2QgPSAnZ2V0JyAuIHNlbGY6OkNhbWVsaXNlKCRuYW1lKTsKCiAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICRtZXRob2QpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+JG1ldGhvZCgpOwogICAgICAgIH0KICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkdGhpcywgJG5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+JG5hbWUoKTsKICAgICAgICB9IGVsc2VpZiAocHJvcGVydHlfZXhpc3RzKCR0aGlzLCAkbmFtZSkpIHsKCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+JG5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignUHJvcGVydHkgJyAuICRuYW1lIC4gJyBkbyBub3QgZXhpc3RzIGluICcgLiBfX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIENhbWVsaXNlKCRuYW1lLCAkZ2x1ZSA9ICcnKQogICAgewogICAgICAgICR3b3JkcyA9IGV4cGxvZGUoJ18nLCAkbmFtZSk7CiAgICAgICAgZm9yZWFjaCAoJHdvcmRzIGFzICYkd29yZCkgewogICAgICAgICAgICAkd29yZCA9IHVjZmlyc3QoJHdvcmQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaW1wbG9kZSgkZ2x1ZSwgJHdvcmRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkaW5zZXJ0ID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5pZCkgfHwgJGluc2VydCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmluc2VydCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+dXBkYXRlKCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaW5zZXJ0KCkKICAgIHsKICAgICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnIC4gY21zX2RiX3ByZWZpeCgpIC4gc3RhdGljOjpUQUJMRV9OQU1FOwoKICAgICAgICAkZmllbGRzID0gYXJyYXkoKTsKICAgICAgICAkZXhjbHVkZSA9IGFycmF5KCk7CiAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CgogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPmlkKSkgewogICAgICAgICAgICAkZmllbGRzW10gPSAnaWQgPSA/JzsKICAgICAgICAgICAgJHZhbHVlc1tdID0gJHRoaXMtPmdldElkKCk7CiAgICAgICAgICAgICRleGNsdWRlW10gPSAnaWQnOwogICAgICAgIH0KCiAgICAgICAgJGZpZWxkc1tdID0gJ2NyZWF0ZWRfYXQgPSBOT1coKSc7CiAgICAgICAgJGV4Y2x1ZGVbXSA9ICdjcmVhdGVkX2F0JzsKCiAgICAgICAgJGZpZWxkc1tdID0gJ2NyZWF0ZWRfYnkgPSA/JzsKICAgICAgICAkdmFsdWVzW10gPSBnZXRfdXNlcmlkKGZhbHNlKTsKICAgICAgICAkZXhjbHVkZVtdID0gJ2NyZWF0ZWRfYnknOwoKICAgICAgICAkZmllbGRzW10gPSAndXBkYXRlZF9hdCA9IE5PVygpJzsKICAgICAgICAkZXhjbHVkZVtdID0gJ3VwZGF0ZWRfYXQnOwoKICAgICAgICAkZmllbGRzW10gPSAndXBkYXRlZF9ieSA9ID8nOwogICAgICAgICR2YWx1ZXNbXSA9IGdldF91c2VyaWQoZmFsc2UpOwogICAgICAgICRleGNsdWRlW10gPSAndXBkYXRlZF9ieSc7CgoKICAgICAgICBmb3JlYWNoIChzdGF0aWM6OmdldFRhYmxlRmllbGRzKCkgYXMgJGZpZWxkX25hbWUgPT4gJGZpZWxkX3R5cGUpIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkZmllbGRfbmFtZSwgJGV4Y2x1ZGUpKSB7CiAgICAgICAgICAgICAgICAkZmllbGRzW10gPSAkZmllbGRfbmFtZSAuICcgPSA/JzsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9ICR0aGlzLT5fX2dldCgkZmllbGRfbmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRxdWVyeSAuPSAnIFNFVCAnIC4gaW1wbG9kZSgnLCAnLCAkZmllbGRzKTsKCiAgICAgICAgJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksICR2YWx1ZXMpOwoKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbignSW1wb3NzaWJsZSB0byBleGVjdXRlIHF1ZXJ5OiAnIC4gJHF1ZXJ5KTsKICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkdGhpcy0+aWQpKSB7CiAgICAgICAgICAgICR0aGlzLT5pZCA9ICRkYi0+SW5zZXJ0X0lEKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB1cGRhdGUoKQogICAgewogICAgICAgICRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgJHF1ZXJ5ID0gJ1VQREFURSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gc3RhdGljOjpUQUJMRV9OQU1FOwoKICAgICAgICAkZmllbGRzID0gYXJyYXkoKTsKICAgICAgICAkZXhjbHVkZSA9IGFycmF5KCk7CiAgICAgICAgJHZhbHVlcyA9IGFycmF5KCk7CgogICAgICAgICRleGNsdWRlW10gPSAnaWQnOwogICAgICAgICRleGNsdWRlW10gPSAnY3JlYXRlZF9hdCc7CiAgICAgICAgJGV4Y2x1ZGVbXSA9ICdjcmVhdGVkX2J5JzsKCiAgICAgICAgJGZpZWxkc1tdID0gJ3VwZGF0ZWRfYXQgPSBOT1coKSc7CiAgICAgICAgJGV4Y2x1ZGVbXSA9ICd1cGRhdGVkX2F0JzsKCiAgICAgICAgJGZpZWxkc1tdID0gJ3VwZGF0ZWRfYnkgPSA/JzsKICAgICAgICAkdmFsdWVzW10gPSBnZXRfdXNlcmlkKGZhbHNlKTsKICAgICAgICAkZXhjbHVkZVtdID0gJ3VwZGF0ZWRfYnknOwoKICAgICAgICBmb3JlYWNoIChzdGF0aWM6OmdldFRhYmxlRmllbGRzKCkgYXMgJGZpZWxkX25hbWUgPT4gJGZpZWxkX3R5cGUpIHsKICAgICAgICAgICAgaWYgKCFpbl9hcnJheSgkZmllbGRfbmFtZSwgJGV4Y2x1ZGUpKSB7CiAgICAgICAgICAgICAgICAkZmllbGRzW10gPSAkZmllbGRfbmFtZSAuICcgPSA/JzsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9ICR0aGlzLT5fX2dldCgkZmllbGRfbmFtZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRxdWVyeSAuPSAnIFNFVCAnIC4gaW1wbG9kZSgnLCAnLCAkZmllbGRzKSAuICcgV0hFUkUgaWQgPSA/JzsKCiAgICAgICAgJHZhbHVlc1tdID0gJHRoaXMtPmdldElkKCk7CgogICAgICAgICRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCAkdmFsdWVzKTsKCiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFeGNlcHRpb24oJ0ltcG9zc2libGUgdG8gZXhlY3V0ZSBxdWVyeTogJyAuICRxdWVyeSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5nZXRJZCgpKSB7CiAgICAgICAgICAgICRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgICAgICRxdWVyeSA9ICdERUxFVEUgRlJPTSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gc3RhdGljOjpUQUJMRV9OQU1FIC4gJyBXSEVSRSBpZCA9ID8nOwogICAgICAgICAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRoaXMtPmdldElkKCkpKTsKICAgICAgICAgICAgaWYgKCRyZXN1bHQgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gTUNGQ3JpdGVyaWEgJGMKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb1NlbGVjdChNQ0ZDcml0ZXJpYSAkYykKICAgIHsKICAgICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRxdWVyeSA9ICRjLT5idWlsZFF1ZXJ5KGNtc19kYl9wcmVmaXgoKSAuIHN0YXRpYzo6VEFCTEVfTkFNRSk7CiAgICAgICAgJHJlc3VsdCA9ICRkYi0+ZXhlY3V0ZSgkcXVlcnksICRjLT52YWx1ZXMpOwoKICAgICAgICAkZW50aXRpZXMgPSBhcnJheSgpOwoKICAgICAgICB3aGlsZSAoJHJlc3VsdCAmJiAoJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpKSB7CgogICAgICAgICAgICAkZW50aXRpZXNbXSA9IHN0YXRpYzo6cG9wdWxhdGUoJHJvdyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkZW50aXRpZXM7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBvcHVsYXRlKCRyb3csICRlbnRpdHkgPSBudWxsKQogICAgewogICAgICAgIGlmKGlzX251bGwoJGVudGl0eSkpCiAgICAgICAgewogICAgICAgICAgICAkZW50aXR5ID0gbmV3IHN0YXRpYygpOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoIChzdGF0aWM6OmdldFRhYmxlRmllbGRzKCkgYXMgJG5hbWUgPT4gJHR5cGUpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRyb3dbJG5hbWVdKSkgJGVudGl0eS0+X19zZXQoJG5hbWUsICRyb3dbJG5hbWVdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRlbnRpdHk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gTUNGQ3JpdGVyaWEgJGMKICAgICAqIEByZXR1cm4gbWl4ZWR8bnVsbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvU2VsZWN0T25lKE1DRkNyaXRlcmlhICRjKQogICAgewoKICAgICAgICAkYy0+c2V0TGltaXQoMSk7CiAgICAgICAgJHJlc3VsdCA9IHN0YXRpYzo6ZG9TZWxlY3QoJGMpOwoKICAgICAgICBpZiAoY291bnQoJHJlc3VsdCkgPiAwKSB7CiAgICAgICAgICAgIHJlc2V0KCRyZXN1bHQpOwogICAgICAgICAgICByZXR1cm4gY3VycmVudCgkcmVzdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXRyaWV2ZUJ5UGsoJHBrKQogICAgewogICAgICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAgICAgJGMtPmFkZCgnaWQnLCAkcGspOwogICAgICAgIHJldHVybiBzdGF0aWM6OmRvU2VsZWN0T25lKCRjKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlQnlJZCgkaWQpCiAgICB7CiAgICAgICAgcmV0dXJuIHN0YXRpYzo6cmV0cmlldmVCeVBrKCRpZCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVUYWJsZSgpCiAgICB7CiAgICAgICAgJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKICAgICAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAgICAgJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkgLiBzdGF0aWM6OlRBQkxFX05BTUUsIGltcGxvZGUoJywnLCBzdGF0aWM6OnJldHJpZXZlVGFibGVGaWVsZHMoKSkpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgogICAgICAgICRpZHhuYW1lID0gc3RydG9sb3dlcihzdGF0aWM6OlRBQkxFX05BTUUpIC4gJ19pbmRleGVzJzsKICAgICAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJGlkeG5hbWUsIGNtc19kYl9wcmVmaXgoKSAuIHN0YXRpYzo6VEFCTEVfTkFNRSwgaW1wbG9kZSgnLCcsIHN0YXRpYzo6Z2V0VGFibGVGaWVsZEluZGV4ZXMoKSkpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlbGV0ZVRhYmxlKCkKICAgIHsKICAgICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICAgICAkc3FsID0gJGRpY3QtPkRyb3BUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkgLiBzdGF0aWM6OlRBQkxFX05BTUUpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICB9Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFSelector.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiAgY2xhc3MgTUNGU2VsZWN0b3IKICB7CiAgICB2YXIgJG5hbWU7CiAgICB2YXIgJGNvbXB1dGVyX25hbWU7CgogICAgdmFyICRmaWVsZHM7ICAgIAogICAgdmFyICRjb25kaXRpb25zOwogICAgdmFyICRvcmRlcnM7CiAgICAKICAgIAogIH0=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFTemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIE1DRlRlbXBsYXRlIGV4dGVuZHMgU21hcnR5IHsKCglwcm90ZWN0ZWQgJG1vZHVsZTsKCXByb3RlY3RlZCAkc291cmNlOwoJcHJvdGVjdGVkICRkZXN0aW5hdGlvbjsKCXByb3RlY3RlZCAkY21zQ29uZmlnOwoKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbW9kdWxlLCAkc291cmNlLCAkZGVzdGluYXRpb24pIHsKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CgkJJHRoaXMtPm1vZHVsZSA9ICRtb2R1bGU7CgkJJHRoaXMtPnNvdXJjZSA9ICRzb3VyY2U7CgkJJHRoaXMtPmRlc3RpbmF0aW9uID0gJGRlc3RpbmF0aW9uOwoJCSR0aGlzLT5jbXNDb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKCQkkdGhpcy0+dGVtcGxhdGVfZGlyID0gJHRoaXMtPmNtc0NvbmZpZ1sncm9vdF9wYXRoJ10gLiAnL21vZHVsZXMvTUNGYWN0b3J5L3NtYXJ0eS90ZW1wbGF0ZXMnOwovLwkJJHRoaXMtPmNvbXBpbGVfZGlyID0gJHRoaXMtPmNtc0NvbmZpZ1sncm9vdF9wYXRoJ10gLiAnL21vZHVsZXMvTUNGYWN0b3J5L3NtYXJ0eS90ZW1wbGF0ZXNfYyc7IC8vIFRPRE86IENoYW5nZSB0aGF0IHRvIHRoZSBnbG9iYWwgb25lCgkJJHRoaXMtPmNvbXBpbGVfZGlyID0gJHRoaXMtPmNtc0NvbmZpZ1sncHJldmlld3NfcGF0aCddOyAvLyBUT0RPOiBDaGFuZ2UgdGhhdCB0byB0aGUgZ2xvYmFsIG9uZQoJCSR0aGlzLT5jb25maWdfZGlyID0gJHRoaXMtPmNtc0NvbmZpZ1sncm9vdF9wYXRoJ10gLiAnL21vZHVsZXMvTUNGYWN0b3J5L3NtYXJ0eS9jb25maWcnOwoJCSR0aGlzLT5mb3JjZV9jb21waWxlID0gdHJ1ZTsKCQkkdGhpcy0+bGVmdF9kZWxpbWl0ZXIgPSAne3snOwoJCSR0aGlzLT5yaWdodF9kZWxpbWl0ZXIgPSAnfX0nOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBzYXZlKCkgewoJCSRjb250ZW50cyA9ICR0aGlzLT5mZXRjaCgkdGhpcy0+c291cmNlKTsKCQkkcmVzdWx0ID0gQGZpbGVfcHV0X2NvbnRlbnRzKCR0aGlzLT5jbXNDb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9tb2R1bGVzLycgLiAkdGhpcy0+bW9kdWxlIC4gJy8nIC4gJHRoaXMtPmRlc3RpbmF0aW9uLCAkY29udGVudHMpOwoJCQoJCS8vIFNNQVJUWSAyLzMgCgkJaWYobWV0aG9kX2V4aXN0cygkdGhpcywgJ2NsZWFyX2NvbXBpbGVkX3RwbCcpKQoJCXsKCQkgICR0aGlzLT5jbGVhcl9jb21waWxlZF90cGwoKTsJCSAgCgkJfQoJCWVsc2UKCQl7CgkJICAkdGhpcy0+Y2xlYXJDb21waWxlZFRlbXBsYXRlKCk7CgkJfQoJCXJldHVybiAkcmVzdWx0OwoJfQoKfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFTools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBNQ0ZUb29scyBDbGFzcwogKgogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIHNvbWUgY29yZSB0b29scyBmb3IgbW9kdWxlcwogKgogKiBBdXRob3I6IEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllciA8Y3liZXJ0b3RvcGhlQGdtYWlsLmNvbT4KICoKICovCgpjbGFzcyBNQ0ZUb29scwp7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBJc01vZHVsZUFjdGl2ZSgkbW9kdWxlX25hbWUpCiAgICB7CiAgICAgICAgJG1vZHVsZV9vcGVyYXRpb25zID0gY21zbXMoKS0+R2V0TW9kdWxlT3BlcmF0aW9ucygpOwogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRtb2R1bGVfb3BlcmF0aW9ucywgJ0lzTW9kdWxlQWN0aXZlJykpIHsKICAgICAgICAgICAgcmV0dXJuICRtb2R1bGVfb3BlcmF0aW9ucy0+SXNNb2R1bGVBY3RpdmUoJG1vZHVsZV9uYW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBXZSBhcmUgaW4gcHJlIDEuMTAgQ01TIHZlcnNpb25zCiAgICAgICAgICAgIGdsb2JhbCAkZ0NtczsKICAgICAgICAgICAgaWYgKGlzc2V0KCRnQ21zLT5tb2R1bGVzWyRtb2R1bGVfbmFtZV0pKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZpbGVTaXplKCRmaWxlLCAkcmVhZGFibGUgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoaXNfZmlsZSgkZmlsZSkpIHsKICAgICAgICAgICAgJHNpemUgPSBmaWxlc2l6ZSgkZmlsZSk7CgogICAgICAgICAgICBpZiAoJHJlYWRhYmxlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjo6c2l6ZV9yZWFkYWJsZSgkc2l6ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHNpemU7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaXplX3JlYWRhYmxlKCRzaXplLCAkcmV0c3RyaW5nID0gbnVsbCkKICAgIHsKICAgICAgICAkc2l6ZXMgPSBhcnJheSgnQicsICdrQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQicpOwoKICAgICAgICBpZiAoJHJldHN0cmluZyA9PT0gbnVsbCkgewogICAgICAgICAgICAkcmV0c3RyaW5nID0gJyUwMS4yZiAlcyc7CiAgICAgICAgfQoKICAgICAgICAkbGFzdHNpemVzdHJpbmcgPSBlbmQoJHNpemVzKTsKCiAgICAgICAgZm9yZWFjaCAoJHNpemVzIGFzICRzaXplc3RyaW5nKSB7CiAgICAgICAgICAgIGlmICgkc2l6ZSA8IDEwMjQpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkc2l6ZXN0cmluZyAhPSAkbGFzdHNpemVzdHJpbmcpIHsKICAgICAgICAgICAgICAgICRzaXplIC89IDEwMjQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkc2l6ZXN0cmluZyA9PSAkc2l6ZXNbMF0pIHsKICAgICAgICAgICAgJHJldHN0cmluZyA9ICclMDFkICVzJzsKICAgICAgICB9IC8vIEJ5dGVzIGFyZW4ndCBub3JtYWxseSBmcmFjdGlvbmFsCgogICAgICAgIHJldHVybiBzcHJpbnRmKCRyZXRzdHJpbmcsICRzaXplLCAkc2l6ZXN0cmluZyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlRXh0ZW5zaW9uKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkZmlsZSA9IGV4cGxvZGUoJy4nLCAkZmlsZW5hbWUpOwogICAgICAgIGlmIChjb3VudCgkZmlsZSkgPiAxKSB7CiAgICAgICAgICAgIHJldHVybiBlbmQoJGZpbGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZpbGVJY29uKCRmaWxlLCAkaWNvbl90eXBlID0gJ3NtYWxsJykKICAgIHsKICAgICAgICAkbW9kdWxlID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNQ0ZhY3RvcnknKTsKICAgICAgICAkaWNvbiA9ICRtb2R1bGUtPkdldE1vZHVsZVVSTFBhdGgoKSAuICcvaW1hZ2VzL2ljb25zLycgLiAkaWNvbl90eXBlIC4gJy8nOwoKICAgICAgICBzd2l0Y2ggKHN0cnRvbG93ZXIoc2VsZjo6Z2V0RmlsZUV4dGVuc2lvbigkZmlsZSkpKSB7CiAgICAgICAgICAgIGNhc2UgJ3BkZic6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAncGRmLmdpZic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnanMnOgogICAgICAgICAgICAgICAgJGljb24gLj0gJ2pzLmdpZic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZXBzJzoKICAgICAgICAgICAgICAgICRpY29uIC49ICdlcHMuZ2lmJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdwaHAnOgogICAgICAgICAgICAgICAgJGljb24gLj0gJ3BocC5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3Jhcic6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAncmFyLmdpZic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZG9jJzoKICAgICAgICAgICAgICAgICRpY29uIC49ICdkb2MuZ2lmJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkb2N4JzoKICAgICAgICAgICAgICAgICRpY29uIC49ICdkb2MuZ2lmJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdydGYnOgogICAgICAgICAgICAgICAgJGljb24gLj0gJ3J0Zi5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2dpZic6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAnZ2lmLmdpZic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAndHh0JzoKICAgICAgICAgICAgICAgICRpY29uIC49ICd0eHQuZ2lmJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd4bHMnOgogICAgICAgICAgICAgICAgJGljb24gLj0gJ3hscy5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3hsc3gnOgogICAgICAgICAgICAgICAgJGljb24gLj0gJ3hscy5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ3BwdCc6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAncHB0LmdpZic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAncHBzJzoKICAgICAgICAgICAgICAgICRpY29uIC49ICdwcHQuZ2lmJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdwcHR4JzoKICAgICAgICAgICAgICAgICRpY29uIC49ICdwcHQuZ2lmJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdqcGcnOgogICAgICAgICAgICAgICAgJGljb24gLj0gJ2pwZy5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2JtcCc6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAnYm1wLmdpZic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnaHRtbCc6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAnaHRtbC5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2h0bSc6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAnaHRtbC5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ21vdic6CiAgICAgICAgICAgICAgICAkaWNvbiAuPSAnbW92LmdpZic7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnemlwJzoKICAgICAgICAgICAgICAgICRpY29uIC49ICd6aXAuZ2lmJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJGljb24gLj0gJ2RlZi5naWYnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGljb247CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXRyaWV2ZUNvbnRleHRJZCgpCiAgICB7CiAgICAgICAgaWYgKGNtc21zKCkpCiAgICAgICAgICAgIGlmIChjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpKQogICAgICAgICAgICAgICAgaWYgKGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPmdldENvbnRlbnRPYmplY3QoKSkKICAgICAgICAgICAgICAgICAgICByZXR1cm4gY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+Z2V0Q29udGVudE9iamVjdCgpLT5JZCgpOwogICAgICAgIHJldHVybiAnbTFfJzsgLy8gRm9yY2UgYW4gaWQKICAgIH0KCgp9]]></data>
	</file>
	<file>
	  <filename>/lib/class.MCFTree.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCS8vIFRoaXMgY2xhc3MgYWxsb3dzIHRvIG1hbmlwdWxhdGUgYSB0cmVlIG9mIGl0ZW1zCgoJY2xhc3MgTUNGVHJlZQoJewoJCXByb3RlY3RlZCAkaXRlbXM7IC8vIExpc3Qgb2YgaXRlbXMKCQlwcm90ZWN0ZWQgJHRyZWVfa2V5OyAvLyBUaGUga2V5IHRvIHNvcnQgdGhlIHRyZWUgPT4gU2hvdWxkIGJlIG51bWVyaWNhbCB2YWx1ZQoJCXByb3RlY3RlZCAkcm9vdCA9IGFycmF5KCk7CgkJcHJvdGVjdGVkICR0cmVlOwoJCXByb3RlY3RlZCAkYnJhbmNoZXMgPSBhcnJheSgpOwoJCXByb3RlY3RlZCAkZmxhdGVuX3RyZWU7IC8vIEEgZmxhdGVuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0cmVlCgkJcHJvdGVjdGVkICRsb3N0X2xlYWZzOyAvLyBJZiB3ZSBmaW5kIG9yZmFucywgd2Ugc3RvcmUgdGhlbSBoZXJlIFRPRE8KCQkKCQlwcm90ZWN0ZWQgJHJlc3RyaWN0OyAvLyBSZXN0cmljdCB0byBjZXJ0YWluIGxlYXZlcyAvLyBzaG91bGQgYmUgYW4gYXJyYXkoKQoJCS8vIHByb3RlY3RlZCAkCgkJCgkJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpdGVtcywgJHRyZWVfa2V5ID0gJ3BhcmVudF9pZCcpCXsKCQkJJHRoaXMtPml0ZW1zID0gJGl0ZW1zOwoJCQkkdGhpcy0+dHJlZV9rZXkgPSAkdHJlZV9rZXk7CgkJfQoJCQoJCXByaXZhdGUgZnVuY3Rpb24gYnVpbGRUcmVlKCkJewkKCQkJJHRyZWVfa2V5ID0gJHRoaXMtPnRyZWVfa2V5OwoJCQkKCQkJZm9yZWFjaCgkdGhpcy0+aXRlbXMgYXMgJGl0ZW0pCgkJCXsKCQkJCWlmKGlzX29iamVjdCgkaXRlbSkpCSR0aGlzLT5icmFuY2hlc1soaW50KSRpdGVtLT4kdHJlZV9rZXldW10gPSAkaXRlbTsgCgkJCX0KCQkJCgkJCSR0aGlzLT5yb290ID0gJHRoaXMtPmJyYW5jaGVzWzBdOyAvLyBXZSBiZWdpbiBieSB0aGUgYmFzaXMJCQkKCQkJJHRoaXMtPnRyZWUgPSAkdGhpcy0+YnVpbGRCcmFuY2hlKDApOwoJCX0KCQkKCQlwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkQnJhbmNoZSgkaWQsICRsZXZlbCA9IDEpCXsKCQkJJHRyZWVfa2V5ID0gJHRoaXMtPnRyZWVfa2V5OwoJCQkkYnJhbmNoZSA9IGFycmF5KCk7CgkJCWlmKGlzc2V0KCR0aGlzLT5icmFuY2hlc1skaWRdKSkKCQkJewoJCQkJZm9yZWFjaCgkdGhpcy0+YnJhbmNoZXNbJGlkXSBhcyAmJGl0ZW0pCgkJCQl7CgkJCQkJJGl0ZW0tPnNldExldmVsKCRsZXZlbCk7CgkJCQkJLy8gVE9ETzogRG9uJ3QgYXNzdW1lIGdldElkCQkKCQkJCQkvLyAkYnJhbmNoZVskaXRlbS0+Z2V0SWQoKV0gPSBhcnJheSgpOwoKCQkJCQkvLyAkYnJhbmNoZVskaXRlbS0+Z2V0SWQoKV1bJ2xldmVsJ10gPSAkbGV2ZWw7CgkJCQkJaWYoaXNzZXQoJHRoaXMtPmJyYW5jaGVzWyRpdGVtLT5nZXRJZCgpXSkpCgkJCQkJewoJCQkJCQkkaXRlbS0+cHVzaENoaWxkcmVucygkdGhpcy0+YnJhbmNoZXNbJGl0ZW0tPmdldElkKCldKTsKCQkJCQkJJGJyYW5jaGVbJGl0ZW0tPmdldElkKCldWydjaGlsZHJlbnMnXSA9ICR0aGlzLT5idWlsZEJyYW5jaGUoJGl0ZW0tPmdldElkKCksICRsZXZlbCsxKTsKCQkJCQl9CgkJCQkJCgkJCQkJJGJyYW5jaGVbJGl0ZW0tPmdldElkKCldWydpdGVtJ10gPSAmJGl0ZW07CgkJCQl9CgkJCX0KCQkJcmV0dXJuICRicmFuY2hlOwoJCX0KCQoJCXB1YmxpYyBmdW5jdGlvbiBnZXRUcmVlKCkJewoJCQlpZighaXNfYXJyYXkoJHRoaXMtPnRyZWUpKQoJCQl7CgkJCQkkdGhpcy0+YnVpbGRUcmVlKCk7CgkJCX0KCQkJcmV0dXJuICR0aGlzLT50cmVlOwoJCX0KCQkKCQlwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBkZWJ1Z1RyZWUoJHRyZWUpCXsKCQkJZm9yZWFjaCgkdHJlZSBhcyAkYnJhbmNoZSkKCQkJewoJCQkJaWYoaXNzZXQoJGJyYW5jaGVbJ2l0ZW0nXSkpCgkJCQl7CgkJCQkJZWNobyAnPHA+PHN0cm9uZz4nLihzdHJpbmcpJGJyYW5jaGVbJ2l0ZW0nXS4nPC9zdHJvbmc+PC9wPic7CgkJCQl9CgkJCQkKCQkJCWlmKGlzc2V0KCRicmFuY2hlWydjaGlsZHJlbnMnXSkpCgkJCQl7CgkJCQkJc2VsZjo6ZGVidWdUcmVlKCRicmFuY2hlWydjaGlsZHJlbnMnXSk7CgkJCQl9CgkJCX0KCQl9CgkJCgkJcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVidWdGbGF0ZW5UcmVlKCRmbGF0ZW5fdHJlZSkJewoJCQlmb3JlYWNoKCRmbGF0ZW5fdHJlZSBhcyAkaWQgPT4gJGl0ZW0pCgkJCXsKCQkJCWVjaG8gJzxwPjxzdHJvbmc+aWQ6PC9zdHJvbmc+ICcuJGlkLicgPHN0cm9uZz50aXRsZTo8L3N0cm9uZz4gJy4oc3RyaW5nKSRpdGVtLic8L3A+JzsKCQkJfQoJCX0KCQoJCXByaXZhdGUgZnVuY3Rpb24gYnVpbGRGbGF0ZW5UcmVlKCkJewoJCQkkdHJlZSA9ICR0aGlzLT5nZXRUcmVlKCk7CgkJCS8vIHNlbGY6OmRlYnVnVHJlZSgkdHJlZSk7CgkJCSR0aGlzLT5mbGF0ZW5fdHJlZSA9ICR0aGlzLT5idWlsZEZsYXRlbkJyYW5jaGUoJHRyZWUpOwoJCQkvLyBzZWxmOjpkZWJ1Z0ZsYXRlblRyZWUoJHRoaXMtPmZsYXRlbl90cmVlKTsKCQkJLy8gZWNobyAnPHByZT4nOwoJCQkvLyB2YXJfZHVtcCgkdHJlZSk7CgkJfQoJCQoJCXByaXZhdGUgZnVuY3Rpb24gYnVpbGRGbGF0ZW5CcmFuY2hlKCRjaGlsZHJlbnMpCXsKCQkJJGJyYW5jaGUgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCRjaGlsZHJlbnMgYXMgJGlkID0+ICRjaGlsZHJlbikKCQkJewoJCQkJJGJyYW5jaGVbJGlkXSA9ICRjaGlsZHJlblsnaXRlbSddOwoJCQkJaWYoaXNzZXQoJGNoaWxkcmVuWydjaGlsZHJlbnMnXSkpCgkJCQl7CgkJCQkJJGJyYW5jaGUgKz0gJHRoaXMtPmJ1aWxkRmxhdGVuQnJhbmNoZSgkY2hpbGRyZW5bJ2NoaWxkcmVucyddKTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJGJyYW5jaGU7CgkJfQoJCQoJCXB1YmxpYyBmdW5jdGlvbiBnZXRGbGF0ZW5UcmVlKCkJewoJCQlpZighaXNfYXJyYXkoJHRoaXMtPmZsYXRlbl90cmVlKSkKCQkJewoJCQkJJHRoaXMtPmJ1aWxkRmxhdGVuVHJlZSgpOwoJCQl9CgkJCXJldHVybiAkdGhpcy0+ZmxhdGVuX3RyZWU7CgkJfQoJfQ==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/jquery/jquery-1.8.3.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2MS44LjMganF1ZXJ5LmNvbSB8IGpxdWVyeS5vcmcvbGljZW5zZSAqLwooZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBfKGUpe3ZhciB0PU1bZV09e307cmV0dXJuIHYuZWFjaChlLnNwbGl0KHkpLGZ1bmN0aW9uKGUsbil7dFtuXT0hMH0pLHR9ZnVuY3Rpb24gSChlLG4scil7aWYocj09PXQmJmUubm9kZVR5cGU9PT0xKXt2YXIgaT0iZGF0YS0iK24ucmVwbGFjZShQLCItJDEiKS50b0xvd2VyQ2FzZSgpO3I9ZS5nZXRBdHRyaWJ1dGUoaSk7aWYodHlwZW9mIHI9PSJzdHJpbmciKXt0cnl7cj1yPT09InRydWUiPyEwOnI9PT0iZmFsc2UiPyExOnI9PT0ibnVsbCI/bnVsbDorcisiIj09PXI/K3I6RC50ZXN0KHIpP3YucGFyc2VKU09OKHIpOnJ9Y2F0Y2gocyl7fXYuZGF0YShlLG4scil9ZWxzZSByPXR9cmV0dXJuIHJ9ZnVuY3Rpb24gQihlKXt2YXIgdDtmb3IodCBpbiBlKXtpZih0PT09ImRhdGEiJiZ2LmlzRW1wdHlPYmplY3QoZVt0XSkpY29udGludWU7aWYodCE9PSJ0b0pTT04iKXJldHVybiExfXJldHVybiEwfWZ1bmN0aW9uIGV0KCl7cmV0dXJuITF9ZnVuY3Rpb24gdHQoKXtyZXR1cm4hMH1mdW5jdGlvbiB1dChlKXtyZXR1cm4hZXx8IWUucGFyZW50Tm9kZXx8ZS5wYXJlbnROb2RlLm5vZGVUeXBlPT09MTF9ZnVuY3Rpb24gYXQoZSx0KXtkbyBlPWVbdF07d2hpbGUoZSYmZS5ub2RlVHlwZSE9PTEpO3JldHVybiBlfWZ1bmN0aW9uIGZ0KGUsdCxuKXt0PXR8fDA7aWYodi5pc0Z1bmN0aW9uKHQpKXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3ZhciBpPSEhdC5jYWxsKGUscixlKTtyZXR1cm4gaT09PW59KTtpZih0Lm5vZGVUeXBlKXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiBlPT09dD09PW59KTtpZih0eXBlb2YgdD09InN0cmluZyIpe3ZhciByPXYuZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlLm5vZGVUeXBlPT09MX0pO2lmKGl0LnRlc3QodCkpcmV0dXJuIHYuZmlsdGVyKHQsciwhbik7dD12LmZpbHRlcih0LHIpfXJldHVybiB2LmdyZXAoZSxmdW5jdGlvbihlLHIpe3JldHVybiB2LmluQXJyYXkoZSx0KT49MD09PW59KX1mdW5jdGlvbiBsdChlKXt2YXIgdD1jdC5zcGxpdCgifCIpLG49ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYobi5jcmVhdGVFbGVtZW50KXdoaWxlKHQubGVuZ3RoKW4uY3JlYXRlRWxlbWVudCh0LnBvcCgpKTtyZXR1cm4gbn1mdW5jdGlvbiBMdChlLHQpe3JldHVybiBlLmdldEVsZW1lbnRzQnlUYWdOYW1lKHQpWzBdfHxlLmFwcGVuZENoaWxkKGUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHQpKX1mdW5jdGlvbiBBdChlLHQpe2lmKHQubm9kZVR5cGUhPT0xfHwhdi5oYXNEYXRhKGUpKXJldHVybjt2YXIgbixyLGkscz12Ll9kYXRhKGUpLG89di5fZGF0YSh0LHMpLHU9cy5ldmVudHM7aWYodSl7ZGVsZXRlIG8uaGFuZGxlLG8uZXZlbnRzPXt9O2ZvcihuIGluIHUpZm9yKHI9MCxpPXVbbl0ubGVuZ3RoO3I8aTtyKyspdi5ldmVudC5hZGQodCxuLHVbbl1bcl0pfW8uZGF0YSYmKG8uZGF0YT12LmV4dGVuZCh7fSxvLmRhdGEpKX1mdW5jdGlvbiBPdChlLHQpe3ZhciBuO2lmKHQubm9kZVR5cGUhPT0xKXJldHVybjt0LmNsZWFyQXR0cmlidXRlcyYmdC5jbGVhckF0dHJpYnV0ZXMoKSx0Lm1lcmdlQXR0cmlidXRlcyYmdC5tZXJnZUF0dHJpYnV0ZXMoZSksbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj09PSJvYmplY3QiPyh0LnBhcmVudE5vZGUmJih0Lm91dGVySFRNTD1lLm91dGVySFRNTCksdi5zdXBwb3J0Lmh0bWw1Q2xvbmUmJmUuaW5uZXJIVE1MJiYhdi50cmltKHQuaW5uZXJIVE1MKSYmKHQuaW5uZXJIVE1MPWUuaW5uZXJIVE1MKSk6bj09PSJpbnB1dCImJkV0LnRlc3QoZS50eXBlKT8odC5kZWZhdWx0Q2hlY2tlZD10LmNoZWNrZWQ9ZS5jaGVja2VkLHQudmFsdWUhPT1lLnZhbHVlJiYodC52YWx1ZT1lLnZhbHVlKSk6bj09PSJvcHRpb24iP3Quc2VsZWN0ZWQ9ZS5kZWZhdWx0U2VsZWN0ZWQ6bj09PSJpbnB1dCJ8fG49PT0idGV4dGFyZWEiP3QuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlOm49PT0ic2NyaXB0IiYmdC50ZXh0IT09ZS50ZXh0JiYodC50ZXh0PWUudGV4dCksdC5yZW1vdmVBdHRyaWJ1dGUodi5leHBhbmRvKX1mdW5jdGlvbiBNdChlKXtyZXR1cm4gdHlwZW9mIGUuZ2V0RWxlbWVudHNCeVRhZ05hbWUhPSJ1bmRlZmluZWQiP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKTp0eXBlb2YgZS5xdWVyeVNlbGVjdG9yQWxsIT0idW5kZWZpbmVkIj9lLnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTpbXX1mdW5jdGlvbiBfdChlKXtFdC50ZXN0KGUudHlwZSkmJihlLmRlZmF1bHRDaGVja2VkPWUuY2hlY2tlZCl9ZnVuY3Rpb24gUXQoZSx0KXtpZih0IGluIGUpcmV0dXJuIHQ7dmFyIG49dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpLHI9dCxpPUp0Lmxlbmd0aDt3aGlsZShpLS0pe3Q9SnRbaV0rbjtpZih0IGluIGUpcmV0dXJuIHR9cmV0dXJuIHJ9ZnVuY3Rpb24gR3QoZSx0KXtyZXR1cm4gZT10fHxlLHYuY3NzKGUsImRpc3BsYXkiKT09PSJub25lInx8IXYuY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIFl0KGUsdCl7dmFyIG4scixpPVtdLHM9MCxvPWUubGVuZ3RoO2Zvcig7czxvO3MrKyl7bj1lW3NdO2lmKCFuLnN0eWxlKWNvbnRpbnVlO2lbc109di5fZGF0YShuLCJvbGRkaXNwbGF5IiksdD8oIWlbc10mJm4uc3R5bGUuZGlzcGxheT09PSJub25lIiYmKG4uc3R5bGUuZGlzcGxheT0iIiksbi5zdHlsZS5kaXNwbGF5PT09IiImJkd0KG4pJiYoaVtzXT12Ll9kYXRhKG4sIm9sZGRpc3BsYXkiLG5uKG4ubm9kZU5hbWUpKSkpOihyPUR0KG4sImRpc3BsYXkiKSwhaVtzXSYmciE9PSJub25lIiYmdi5fZGF0YShuLCJvbGRkaXNwbGF5IixyKSl9Zm9yKHM9MDtzPG87cysrKXtuPWVbc107aWYoIW4uc3R5bGUpY29udGludWU7aWYoIXR8fG4uc3R5bGUuZGlzcGxheT09PSJub25lInx8bi5zdHlsZS5kaXNwbGF5PT09IiIpbi5zdHlsZS5kaXNwbGF5PXQ/aVtzXXx8IiI6Im5vbmUifXJldHVybiBlfWZ1bmN0aW9uIFp0KGUsdCxuKXt2YXIgcj1SdC5leGVjKHQpO3JldHVybiByP01hdGgubWF4KDAsclsxXS0obnx8MCkpKyhyWzJdfHwicHgiKTp0fWZ1bmN0aW9uIGVuKGUsdCxuLHIpe3ZhciBpPW49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpPzQ6dD09PSJ3aWR0aCI/MTowLHM9MDtmb3IoO2k8NDtpKz0yKW49PT0ibWFyZ2luIiYmKHMrPXYuY3NzKGUsbiskdFtpXSwhMCkpLHI/KG49PT0iY29udGVudCImJihzLT1wYXJzZUZsb2F0KER0KGUsInBhZGRpbmciKyR0W2ldKSl8fDApLG4hPT0ibWFyZ2luIiYmKHMtPXBhcnNlRmxvYXQoRHQoZSwiYm9yZGVyIiskdFtpXSsiV2lkdGgiKSl8fDApKToocys9cGFyc2VGbG9hdChEdChlLCJwYWRkaW5nIiskdFtpXSkpfHwwLG4hPT0icGFkZGluZyImJihzKz1wYXJzZUZsb2F0KER0KGUsImJvcmRlciIrJHRbaV0rIldpZHRoIikpfHwwKSk7cmV0dXJuIHN9ZnVuY3Rpb24gdG4oZSx0LG4pe3ZhciByPXQ9PT0id2lkdGgiP2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsaT0hMCxzPXYuc3VwcG9ydC5ib3hTaXppbmcmJnYuY3NzKGUsImJveFNpemluZyIpPT09ImJvcmRlci1ib3giO2lmKHI8PTB8fHI9PW51bGwpe3I9RHQoZSx0KTtpZihyPDB8fHI9PW51bGwpcj1lLnN0eWxlW3RdO2lmKFV0LnRlc3QocikpcmV0dXJuIHI7aT1zJiYodi5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxyPT09ZS5zdHlsZVt0XSkscj1wYXJzZUZsb2F0KHIpfHwwfXJldHVybiByK2VuKGUsdCxufHwocz8iYm9yZGVyIjoiY29udGVudCIpLGkpKyJweCJ9ZnVuY3Rpb24gbm4oZSl7aWYoV3RbZV0pcmV0dXJuIFd0W2VdO3ZhciB0PXYoIjwiK2UrIj4iKS5hcHBlbmRUbyhpLmJvZHkpLG49dC5jc3MoImRpc3BsYXkiKTt0LnJlbW92ZSgpO2lmKG49PT0ibm9uZSJ8fG49PT0iIil7UHQ9aS5ib2R5LmFwcGVuZENoaWxkKFB0fHx2LmV4dGVuZChpLmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpLHtmcmFtZUJvcmRlcjowLHdpZHRoOjAsaGVpZ2h0OjB9KSk7aWYoIUh0fHwhUHQuY3JlYXRlRWxlbWVudClIdD0oUHQuY29udGVudFdpbmRvd3x8UHQuY29udGVudERvY3VtZW50KS5kb2N1bWVudCxIdC53cml0ZSgiPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGJvZHk+IiksSHQuY2xvc2UoKTt0PUh0LmJvZHkuYXBwZW5kQ2hpbGQoSHQuY3JlYXRlRWxlbWVudChlKSksbj1EdCh0LCJkaXNwbGF5IiksaS5ib2R5LnJlbW92ZUNoaWxkKFB0KX1yZXR1cm4gV3RbZV09bixufWZ1bmN0aW9uIGZuKGUsdCxuLHIpe3ZhciBpO2lmKHYuaXNBcnJheSh0KSl2LmVhY2godCxmdW5jdGlvbih0LGkpe258fHNuLnRlc3QoZSk/cihlLGkpOmZuKGUrIlsiKyh0eXBlb2YgaT09Im9iamVjdCI/dDoiIikrIl0iLGksbixyKX0pO2Vsc2UgaWYoIW4mJnYudHlwZSh0KT09PSJvYmplY3QiKWZvcihpIGluIHQpZm4oZSsiWyIraSsiXSIsdFtpXSxuLHIpO2Vsc2UgcihlLHQpfWZ1bmN0aW9uIENuKGUpe3JldHVybiBmdW5jdGlvbih0LG4pe3R5cGVvZiB0IT0ic3RyaW5nIiYmKG49dCx0PSIqIik7dmFyIHIsaSxzLG89dC50b0xvd2VyQ2FzZSgpLnNwbGl0KHkpLHU9MCxhPW8ubGVuZ3RoO2lmKHYuaXNGdW5jdGlvbihuKSlmb3IoO3U8YTt1Kyspcj1vW3VdLHM9L15cKy8udGVzdChyKSxzJiYocj1yLnN1YnN0cigxKXx8IioiKSxpPWVbcl09ZVtyXXx8W10saVtzPyJ1bnNoaWZ0IjoicHVzaCJdKG4pfX1mdW5jdGlvbiBrbihlLG4scixpLHMsbyl7cz1zfHxuLmRhdGFUeXBlc1swXSxvPW98fHt9LG9bc109ITA7dmFyIHUsYT1lW3NdLGY9MCxsPWE/YS5sZW5ndGg6MCxjPWU9PT1Tbjtmb3IoO2Y8bCYmKGN8fCF1KTtmKyspdT1hW2ZdKG4scixpKSx0eXBlb2YgdT09InN0cmluZyImJighY3x8b1t1XT91PXQ6KG4uZGF0YVR5cGVzLnVuc2hpZnQodSksdT1rbihlLG4scixpLHUsbykpKTtyZXR1cm4oY3x8IXUpJiYhb1siKiJdJiYodT1rbihlLG4scixpLCIqIixvKSksdX1mdW5jdGlvbiBMbihlLG4pe3ZhciByLGkscz12LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKHIgaW4gbiluW3JdIT09dCYmKChzW3JdP2U6aXx8KGk9e30pKVtyXT1uW3JdKTtpJiZ2LmV4dGVuZCghMCxlLGkpfWZ1bmN0aW9uIEFuKGUsbixyKXt2YXIgaSxzLG8sdSxhPWUuY29udGVudHMsZj1lLmRhdGFUeXBlcyxsPWUucmVzcG9uc2VGaWVsZHM7Zm9yKHMgaW4gbClzIGluIHImJihuW2xbc11dPXJbc10pO3doaWxlKGZbMF09PT0iKiIpZi5zaGlmdCgpLGk9PT10JiYoaT1lLm1pbWVUeXBlfHxuLmdldFJlc3BvbnNlSGVhZGVyKCJjb250ZW50LXR5cGUiKSk7aWYoaSlmb3IocyBpbiBhKWlmKGFbc10mJmFbc10udGVzdChpKSl7Zi51bnNoaWZ0KHMpO2JyZWFrfWlmKGZbMF1pbiByKW89ZlswXTtlbHNle2ZvcihzIGluIHIpe2lmKCFmWzBdfHxlLmNvbnZlcnRlcnNbcysiICIrZlswXV0pe289czticmVha311fHwodT1zKX1vPW98fHV9aWYobylyZXR1cm4gbyE9PWZbMF0mJmYudW5zaGlmdChvKSxyW29dfWZ1bmN0aW9uIE9uKGUsdCl7dmFyIG4scixpLHMsbz1lLmRhdGFUeXBlcy5zbGljZSgpLHU9b1swXSxhPXt9LGY9MDtlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKTtpZihvWzFdKWZvcihuIGluIGUuY29udmVydGVycylhW24udG9Mb3dlckNhc2UoKV09ZS5jb252ZXJ0ZXJzW25dO2Zvcig7aT1vWysrZl07KWlmKGkhPT0iKiIpe2lmKHUhPT0iKiImJnUhPT1pKXtuPWFbdSsiICIraV18fGFbIiogIitpXTtpZighbilmb3IociBpbiBhKXtzPXIuc3BsaXQoIiAiKTtpZihzWzFdPT09aSl7bj1hW3UrIiAiK3NbMF1dfHxhWyIqICIrc1swXV07aWYobil7bj09PSEwP249YVtyXTphW3JdIT09ITAmJihpPXNbMF0sby5zcGxpY2UoZi0tLDAsaSkpO2JyZWFrfX19aWYobiE9PSEwKWlmKG4mJmVbInRocm93cyJdKXQ9bih0KTtlbHNlIHRyeXt0PW4odCl9Y2F0Y2gobCl7cmV0dXJue3N0YXRlOiJwYXJzZXJlcnJvciIsZXJyb3I6bj9sOiJObyBjb252ZXJzaW9uIGZyb20gIit1KyIgdG8gIitpfX19dT1pfXJldHVybntzdGF0ZToic3VjY2VzcyIsZGF0YTp0fX1mdW5jdGlvbiBGbigpe3RyeXtyZXR1cm4gbmV3IGUuWE1MSHR0cFJlcXVlc3R9Y2F0Y2godCl7fX1mdW5jdGlvbiBJbigpe3RyeXtyZXR1cm4gbmV3IGUuQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKX1jYXRjaCh0KXt9fWZ1bmN0aW9uICRuKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtxbj10fSwwKSxxbj12Lm5vdygpfWZ1bmN0aW9uIEpuKGUsdCl7di5lYWNoKHQsZnVuY3Rpb24odCxuKXt2YXIgcj0oVm5bdF18fFtdKS5jb25jYXQoVm5bIioiXSksaT0wLHM9ci5sZW5ndGg7Zm9yKDtpPHM7aSsrKWlmKHJbaV0uY2FsbChlLHQsbikpcmV0dXJufSl9ZnVuY3Rpb24gS24oZSx0LG4pe3ZhciByLGk9MCxzPTAsbz1Ybi5sZW5ndGgsdT12LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGEuZWxlbX0pLGE9ZnVuY3Rpb24oKXt2YXIgdD1xbnx8JG4oKSxuPU1hdGgubWF4KDAsZi5zdGFydFRpbWUrZi5kdXJhdGlvbi10KSxyPW4vZi5kdXJhdGlvbnx8MCxpPTEtcixzPTAsbz1mLnR3ZWVucy5sZW5ndGg7Zm9yKDtzPG87cysrKWYudHdlZW5zW3NdLnJ1bihpKTtyZXR1cm4gdS5ub3RpZnlXaXRoKGUsW2YsaSxuXSksaTwxJiZvP246KHUucmVzb2x2ZVdpdGgoZSxbZl0pLCExKX0sZj11LnByb21pc2Uoe2VsZW06ZSxwcm9wczp2LmV4dGVuZCh7fSx0KSxvcHRzOnYuZXh0ZW5kKCEwLHtzcGVjaWFsRWFzaW5nOnt9fSxuKSxvcmlnaW5hbFByb3BlcnRpZXM6dCxvcmlnaW5hbE9wdGlvbnM6bixzdGFydFRpbWU6cW58fCRuKCksZHVyYXRpb246bi5kdXJhdGlvbix0d2VlbnM6W10sY3JlYXRlVHdlZW46ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXYuVHdlZW4oZSxmLm9wdHMsdCxuLGYub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHxmLm9wdHMuZWFzaW5nKTtyZXR1cm4gZi50d2VlbnMucHVzaChpKSxpfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P2YudHdlZW5zLmxlbmd0aDowO2Zvcig7bjxyO24rKylmLnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/dS5yZXNvbHZlV2l0aChlLFtmLHRdKTp1LnJlamVjdFdpdGgoZSxbZix0XSksdGhpc319KSxsPWYucHJvcHM7UW4obCxmLm9wdHMuc3BlY2lhbEVhc2luZyk7Zm9yKDtpPG87aSsrKXtyPVhuW2ldLmNhbGwoZixlLGwsZi5vcHRzKTtpZihyKXJldHVybiByfXJldHVybiBKbihmLGwpLHYuaXNGdW5jdGlvbihmLm9wdHMuc3RhcnQpJiZmLm9wdHMuc3RhcnQuY2FsbChlLGYpLHYuZngudGltZXIodi5leHRlbmQoYSx7YW5pbTpmLHF1ZXVlOmYub3B0cy5xdWV1ZSxlbGVtOmV9KSksZi5wcm9ncmVzcyhmLm9wdHMucHJvZ3Jlc3MpLmRvbmUoZi5vcHRzLmRvbmUsZi5vcHRzLmNvbXBsZXRlKS5mYWlsKGYub3B0cy5mYWlsKS5hbHdheXMoZi5vcHRzLmFsd2F5cyl9ZnVuY3Rpb24gUW4oZSx0KXt2YXIgbixyLGkscyxvO2ZvcihuIGluIGUpe3I9di5jYW1lbENhc2UobiksaT10W3JdLHM9ZVtuXSx2LmlzQXJyYXkocykmJihpPXNbMV0scz1lW25dPXNbMF0pLG4hPT1yJiYoZVtyXT1zLGRlbGV0ZSBlW25dKSxvPXYuY3NzSG9va3Nbcl07aWYobyYmImV4cGFuZCJpbiBvKXtzPW8uZXhwYW5kKHMpLGRlbGV0ZSBlW3JdO2ZvcihuIGluIHMpbiBpbiBlfHwoZVtuXT1zW25dLHRbbl09aSl9ZWxzZSB0W3JdPWl9fWZ1bmN0aW9uIEduKGUsdCxuKXt2YXIgcixpLHMsbyx1LGEsZixsLGMsaD10aGlzLHA9ZS5zdHlsZSxkPXt9LG09W10sZz1lLm5vZGVUeXBlJiZHdChlKTtuLnF1ZXVlfHwobD12Ll9xdWV1ZUhvb2tzKGUsImZ4IiksbC51bnF1ZXVlZD09bnVsbCYmKGwudW5xdWV1ZWQ9MCxjPWwuZW1wdHkuZmlyZSxsLmVtcHR5LmZpcmU9ZnVuY3Rpb24oKXtsLnVucXVldWVkfHxjKCl9KSxsLnVucXVldWVkKyssaC5hbHdheXMoZnVuY3Rpb24oKXtoLmFsd2F5cyhmdW5jdGlvbigpe2wudW5xdWV1ZWQtLSx2LnF1ZXVlKGUsImZ4IikubGVuZ3RofHxsLmVtcHR5LmZpcmUoKX0pfSkpLGUubm9kZVR5cGU9PT0xJiYoImhlaWdodCJpbiB0fHwid2lkdGgiaW4gdCkmJihuLm92ZXJmbG93PVtwLm92ZXJmbG93LHAub3ZlcmZsb3dYLHAub3ZlcmZsb3dZXSx2LmNzcyhlLCJkaXNwbGF5Iik9PT0iaW5saW5lIiYmdi5jc3MoZSwiZmxvYXQiKT09PSJub25lIiYmKCF2LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dHx8bm4oZS5ub2RlTmFtZSk9PT0iaW5saW5lIj9wLmRpc3BsYXk9ImlubGluZS1ibG9jayI6cC56b29tPTEpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIix2LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8aC5kb25lKGZ1bmN0aW9uKCl7cC5vdmVyZmxvdz1uLm92ZXJmbG93WzBdLHAub3ZlcmZsb3dYPW4ub3ZlcmZsb3dbMV0scC5vdmVyZmxvd1k9bi5vdmVyZmxvd1syXX0pKTtmb3IociBpbiB0KXtzPXRbcl07aWYoVW4uZXhlYyhzKSl7ZGVsZXRlIHRbcl0sYT1hfHxzPT09InRvZ2dsZSI7aWYocz09PShnPyJoaWRlIjoic2hvdyIpKWNvbnRpbnVlO20ucHVzaChyKX19bz1tLmxlbmd0aDtpZihvKXt1PXYuX2RhdGEoZSwiZnhzaG93Iil8fHYuX2RhdGEoZSwiZnhzaG93Iix7fSksImhpZGRlbiJpbiB1JiYoZz11LmhpZGRlbiksYSYmKHUuaGlkZGVuPSFnKSxnP3YoZSkuc2hvdygpOmguZG9uZShmdW5jdGlvbigpe3YoZSkuaGlkZSgpfSksaC5kb25lKGZ1bmN0aW9uKCl7dmFyIHQ7di5yZW1vdmVEYXRhKGUsImZ4c2hvdyIsITApO2Zvcih0IGluIGQpdi5zdHlsZShlLHQsZFt0XSl9KTtmb3Iocj0wO3I8bztyKyspaT1tW3JdLGY9aC5jcmVhdGVUd2VlbihpLGc/dVtpXTowKSxkW2ldPXVbaV18fHYuc3R5bGUoZSxpKSxpIGluIHV8fCh1W2ldPWYuc3RhcnQsZyYmKGYuZW5kPWYuc3RhcnQsZi5zdGFydD1pPT09IndpZHRoInx8aT09PSJoZWlnaHQiPzE6MCkpfX1mdW5jdGlvbiBZbihlLHQsbixyLGkpe3JldHVybiBuZXcgWW4ucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX1mdW5jdGlvbiBabihlLHQpe3ZhciBuLHI9e2hlaWdodDplfSxpPTA7dD10PzE6MDtmb3IoO2k8NDtpKz0yLXQpbj0kdFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfWZ1bmN0aW9uIHRyKGUpe3JldHVybiB2LmlzV2luZG93KGUpP2U6ZS5ub2RlVHlwZT09PTk/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ITF9dmFyIG4scixpPWUuZG9jdW1lbnQscz1lLmxvY2F0aW9uLG89ZS5uYXZpZ2F0b3IsdT1lLmpRdWVyeSxhPWUuJCxmPUFycmF5LnByb3RvdHlwZS5wdXNoLGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLGM9QXJyYXkucHJvdG90eXBlLmluZGV4T2YsaD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLHA9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxkPVN0cmluZy5wcm90b3R5cGUudHJpbSx2PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyB2LmZuLmluaXQoZSx0LG4pfSxtPS9bXC0rXT8oPzpcZCpcLnwpXGQrKD86W2VFXVtcLStdP1xkK3wpLy5zb3VyY2UsZz0vXFMvLHk9L1xzKy8sYj0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csdz0vXig/OlteIzxdKig8W1x3XFddKz4pW14+XSokfCMoW1x3XC1dKikkKS8sRT0vXjwoXHcrKVxzKlwvPz4oPzo8XC9cMT58KSQvLFM9L15bXF0sOnt9XHNdKiQvLHg9Lyg/Ol58OnwsKSg/OlxzKlxbKSsvZyxUPS9cXCg/OlsiXFxcL2JmbnJ0XXx1W1xkYS1mQS1GXXs0fSkvZyxOPS8iW14iXFxcclxuXSoifHRydWV8ZmFsc2V8bnVsbHwtPyg/OlxkXGQqXC58KVxkKyg/OltlRV1bXC0rXT9cZCt8KS9nLEM9L14tbXMtLyxrPS8tKFtcZGEtel0pL2dpLEw9ZnVuY3Rpb24oZSx0KXtyZXR1cm4odCsiIikudG9VcHBlckNhc2UoKX0sQT1mdW5jdGlvbigpe2kuYWRkRXZlbnRMaXN0ZW5lcj8oaS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIixBLCExKSx2LnJlYWR5KCkpOmkucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSImJihpLmRldGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLEEpLHYucmVhZHkoKSl9LE89e307di5mbj12LnByb3RvdHlwZT17Y29uc3RydWN0b3I6dixpbml0OmZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLHUsYTtpZighZSlyZXR1cm4gdGhpcztpZihlLm5vZGVUeXBlKXJldHVybiB0aGlzLmNvbnRleHQ9dGhpc1swXT1lLHRoaXMubGVuZ3RoPTEsdGhpcztpZih0eXBlb2YgZT09InN0cmluZyIpe2UuY2hhckF0KDApPT09IjwiJiZlLmNoYXJBdChlLmxlbmd0aC0xKT09PSI+IiYmZS5sZW5ndGg+PTM/cz1bbnVsbCxlLG51bGxdOnM9dy5leGVjKGUpO2lmKHMmJihzWzFdfHwhbikpe2lmKHNbMV0pcmV0dXJuIG49biBpbnN0YW5jZW9mIHY/blswXTpuLGE9biYmbi5ub2RlVHlwZT9uLm93bmVyRG9jdW1lbnR8fG46aSxlPXYucGFyc2VIVE1MKHNbMV0sYSwhMCksRS50ZXN0KHNbMV0pJiZ2LmlzUGxhaW5PYmplY3QobikmJnRoaXMuYXR0ci5jYWxsKGUsbiwhMCksdi5tZXJnZSh0aGlzLGUpO289aS5nZXRFbGVtZW50QnlJZChzWzJdKTtpZihvJiZvLnBhcmVudE5vZGUpe2lmKG8uaWQhPT1zWzJdKXJldHVybiByLmZpbmQoZSk7dGhpcy5sZW5ndGg9MSx0aGlzWzBdPW99cmV0dXJuIHRoaXMuY29udGV4dD1pLHRoaXMuc2VsZWN0b3I9ZSx0aGlzfXJldHVybiFufHxuLmpxdWVyeT8obnx8cikuZmluZChlKTp0aGlzLmNvbnN0cnVjdG9yKG4pLmZpbmQoZSl9cmV0dXJuIHYuaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx2Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsanF1ZXJ5OiIxLjguMyIsbGVuZ3RoOjAsc2l6ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aH0sdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBsLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gZT09bnVsbD90aGlzLnRvQXJyYXkoKTplPDA/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXYubWVyZ2UodGhpcy5jb25zdHJ1Y3RvcigpLGUpO3JldHVybiByLnByZXZPYmplY3Q9dGhpcyxyLmNvbnRleHQ9dGhpcy5jb250ZXh0LHQ9PT0iZmluZCI/ci5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyh0aGlzLnNlbGVjdG9yPyIgIjoiIikrbjp0JiYoci5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yKyIuIit0KyIoIituKyIpIikscn0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB2LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4gdi5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxlcTpmdW5jdGlvbihlKXtyZXR1cm4gZT0rZSxlPT09LTE/dGhpcy5zbGljZShlKTp0aGlzLnNsaWNlKGUsZSsxKX0sZmlyc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgwKX0sbGFzdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVxKC0xKX0sc2xpY2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2sobC5hcHBseSh0aGlzLGFyZ3VtZW50cyksInNsaWNlIixsLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfSxtYXA6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWFwKHRoaXMsZnVuY3Rpb24odCxuKXtyZXR1cm4gZS5jYWxsKHQsbix0KX0pKX0sZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJldk9iamVjdHx8dGhpcy5jb25zdHJ1Y3RvcihudWxsKX0scHVzaDpmLHNvcnQ6W10uc29ydCxzcGxpY2U6W10uc3BsaWNlfSx2LmZuLmluaXQucHJvdG90eXBlPXYuZm4sdi5leHRlbmQ9di5mbi5leHRlbmQ9ZnVuY3Rpb24oKXt2YXIgZSxuLHIsaSxzLG8sdT1hcmd1bWVudHNbMF18fHt9LGE9MSxmPWFyZ3VtZW50cy5sZW5ndGgsbD0hMTt0eXBlb2YgdT09ImJvb2xlYW4iJiYobD11LHU9YXJndW1lbnRzWzFdfHx7fSxhPTIpLHR5cGVvZiB1IT0ib2JqZWN0IiYmIXYuaXNGdW5jdGlvbih1KSYmKHU9e30pLGY9PT1hJiYodT10aGlzLC0tYSk7Zm9yKDthPGY7YSsrKWlmKChlPWFyZ3VtZW50c1thXSkhPW51bGwpZm9yKG4gaW4gZSl7cj11W25dLGk9ZVtuXTtpZih1PT09aSljb250aW51ZTtsJiZpJiYodi5pc1BsYWluT2JqZWN0KGkpfHwocz12LmlzQXJyYXkoaSkpKT8ocz8ocz0hMSxvPXImJnYuaXNBcnJheShyKT9yOltdKTpvPXImJnYuaXNQbGFpbk9iamVjdChyKT9yOnt9LHVbbl09di5leHRlbmQobCxvLGkpKTppIT09dCYmKHVbbl09aSl9cmV0dXJuIHV9LHYuZXh0ZW5kKHtub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT12JiYoZS4kPWEpLHQmJmUualF1ZXJ5PT09diYmKGUualF1ZXJ5PXUpLHZ9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGUpe2U/di5yZWFkeVdhaXQrKzp2LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oZSl7aWYoZT09PSEwPy0tdi5yZWFkeVdhaXQ6di5pc1JlYWR5KXJldHVybjtpZighaS5ib2R5KXJldHVybiBzZXRUaW1lb3V0KHYucmVhZHksMSk7di5pc1JlYWR5PSEwO2lmKGUhPT0hMCYmLS12LnJlYWR5V2FpdD4wKXJldHVybjtyLnJlc29sdmVXaXRoKGksW3ZdKSx2LmZuLnRyaWdnZXImJnYoaSkudHJpZ2dlcigicmVhZHkiKS5vZmYoInJlYWR5Iil9LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIHYudHlwZShlKT09PSJmdW5jdGlvbiJ9LGlzQXJyYXk6QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIHYudHlwZShlKT09PSJhcnJheSJ9LGlzV2luZG93OmZ1bmN0aW9uKGUpe3JldHVybiBlIT1udWxsJiZlPT1lLndpbmRvd30saXNOdW1lcmljOmZ1bmN0aW9uKGUpe3JldHVybiFpc05hTihwYXJzZUZsb2F0KGUpKSYmaXNGaW5pdGUoZSl9LHR5cGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/U3RyaW5nKGUpOk9baC5jYWxsKGUpXXx8Im9iamVjdCJ9LGlzUGxhaW5PYmplY3Q6ZnVuY3Rpb24oZSl7aWYoIWV8fHYudHlwZShlKSE9PSJvYmplY3QifHxlLm5vZGVUeXBlfHx2LmlzV2luZG93KGUpKXJldHVybiExO3RyeXtpZihlLmNvbnN0cnVjdG9yJiYhcC5jYWxsKGUsImNvbnN0cnVjdG9yIikmJiFwLmNhbGwoZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsImlzUHJvdG90eXBlT2YiKSlyZXR1cm4hMX1jYXRjaChuKXtyZXR1cm4hMX12YXIgcjtmb3IociBpbiBlKTtyZXR1cm4gcj09PXR8fHAuY2FsbChlLHIpfSxpc0VtcHR5T2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0O2Zvcih0IGluIGUpcmV0dXJuITE7cmV0dXJuITB9LGVycm9yOmZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjtyZXR1cm4hZXx8dHlwZW9mIGUhPSJzdHJpbmciP251bGw6KHR5cGVvZiB0PT0iYm9vbGVhbiImJihuPXQsdD0wKSx0PXR8fGksKHI9RS5leGVjKGUpKT9bdC5jcmVhdGVFbGVtZW50KHJbMV0pXToocj12LmJ1aWxkRnJhZ21lbnQoW2VdLHQsbj9udWxsOltdKSx2Lm1lcmdlKFtdLChyLmNhY2hlYWJsZT92LmNsb25lKHIuZnJhZ21lbnQpOnIuZnJhZ21lbnQpLmNoaWxkTm9kZXMpKSl9LHBhcnNlSlNPTjpmdW5jdGlvbih0KXtpZighdHx8dHlwZW9mIHQhPSJzdHJpbmciKXJldHVybiBudWxsO3Q9di50cmltKHQpO2lmKGUuSlNPTiYmZS5KU09OLnBhcnNlKXJldHVybiBlLkpTT04ucGFyc2UodCk7aWYoUy50ZXN0KHQucmVwbGFjZShULCJAIikucmVwbGFjZShOLCJdIikucmVwbGFjZSh4LCIiKSkpcmV0dXJuKG5ldyBGdW5jdGlvbigicmV0dXJuICIrdCkpKCk7di5lcnJvcigiSW52YWxpZCBKU09OOiAiK3QpfSxwYXJzZVhNTDpmdW5jdGlvbihuKXt2YXIgcixpO2lmKCFufHx0eXBlb2YgbiE9InN0cmluZyIpcmV0dXJuIG51bGw7dHJ5e2UuRE9NUGFyc2VyPyhpPW5ldyBET01QYXJzZXIscj1pLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0L3htbCIpKToocj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLHIuYXN5bmM9ImZhbHNlIixyLmxvYWRYTUwobikpfWNhdGNoKHMpe3I9dH1yZXR1cm4oIXJ8fCFyLmRvY3VtZW50RWxlbWVudHx8ci5nZXRFbGVtZW50c0J5VGFnTmFtZSgicGFyc2VyZXJyb3IiKS5sZW5ndGgpJiZ2LmVycm9yKCJJbnZhbGlkIFhNTDogIituKSxyfSxub29wOmZ1bmN0aW9uKCl7fSxnbG9iYWxFdmFsOmZ1bmN0aW9uKHQpe3QmJmcudGVzdCh0KSYmKGUuZXhlY1NjcmlwdHx8ZnVuY3Rpb24odCl7ZS5ldmFsLmNhbGwoZSx0KX0pKHQpfSxjYW1lbENhc2U6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShDLCJtcy0iKS5yZXBsYWNlKGssTCl9LG5vZGVOYW1lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXQudG9Mb3dlckNhc2UoKX0sZWFjaDpmdW5jdGlvbihlLG4scil7dmFyIGkscz0wLG89ZS5sZW5ndGgsdT1vPT09dHx8di5pc0Z1bmN0aW9uKGUpO2lmKHIpe2lmKHUpe2ZvcihpIGluIGUpaWYobi5hcHBseShlW2ldLHIpPT09ITEpYnJlYWt9ZWxzZSBmb3IoO3M8bzspaWYobi5hcHBseShlW3MrK10scik9PT0hMSlicmVha31lbHNlIGlmKHUpe2ZvcihpIGluIGUpaWYobi5jYWxsKGVbaV0saSxlW2ldKT09PSExKWJyZWFrfWVsc2UgZm9yKDtzPG87KWlmKG4uY2FsbChlW3NdLHMsZVtzKytdKT09PSExKWJyZWFrO3JldHVybiBlfSx0cmltOmQmJiFkLmNhbGwoIlx1ZmVmZlx1MDBhMCIpP2Z1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyIiOmQuY2FsbChlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PW51bGw/IiI6KGUrIiIpLnJlcGxhY2UoYiwiIil9LG1ha2VBcnJheTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9dHx8W107cmV0dXJuIGUhPW51bGwmJihuPXYudHlwZShlKSxlLmxlbmd0aD09bnVsbHx8bj09PSJzdHJpbmcifHxuPT09ImZ1bmN0aW9uInx8bj09PSJyZWdleHAifHx2LmlzV2luZG93KGUpP2YuY2FsbChyLGUpOnYubWVyZ2UocixlKSkscn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYodCl7aWYoYylyZXR1cm4gYy5jYWxsKHQsZSxuKTtyPXQubGVuZ3RoLG49bj9uPDA/TWF0aC5tYXgoMCxyK24pOm46MDtmb3IoO248cjtuKyspaWYobiBpbiB0JiZ0W25dPT09ZSlyZXR1cm4gbn1yZXR1cm4tMX0sbWVyZ2U6ZnVuY3Rpb24oZSxuKXt2YXIgcj1uLmxlbmd0aCxpPWUubGVuZ3RoLHM9MDtpZih0eXBlb2Ygcj09Im51bWJlciIpZm9yKDtzPHI7cysrKWVbaSsrXT1uW3NdO2Vsc2Ugd2hpbGUobltzXSE9PXQpZVtpKytdPW5bcysrXTtyZXR1cm4gZS5sZW5ndGg9aSxlfSxncmVwOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpPVtdLHM9MCxvPWUubGVuZ3RoO249ISFuO2Zvcig7czxvO3MrKylyPSEhdChlW3NdLHMpLG4hPT1yJiZpLnB1c2goZVtzXSk7cmV0dXJuIGl9LG1hcDpmdW5jdGlvbihlLG4scil7dmFyIGkscyxvPVtdLHU9MCxhPWUubGVuZ3RoLGY9ZSBpbnN0YW5jZW9mIHZ8fGEhPT10JiZ0eXBlb2YgYT09Im51bWJlciImJihhPjAmJmVbMF0mJmVbYS0xXXx8YT09PTB8fHYuaXNBcnJheShlKSk7aWYoZilmb3IoO3U8YTt1KyspaT1uKGVbdV0sdSxyKSxpIT1udWxsJiYob1tvLmxlbmd0aF09aSk7ZWxzZSBmb3IocyBpbiBlKWk9bihlW3NdLHMsciksaSE9bnVsbCYmKG9bby5sZW5ndGhdPWkpO3JldHVybiBvLmNvbmNhdC5hcHBseShbXSxvKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxzO3JldHVybiB0eXBlb2Ygbj09InN0cmluZyImJihyPWVbbl0sbj1lLGU9ciksdi5pc0Z1bmN0aW9uKGUpPyhpPWwuY2FsbChhcmd1bWVudHMsMikscz1mdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KG4saS5jb25jYXQobC5jYWxsKGFyZ3VtZW50cykpKX0scy5ndWlkPWUuZ3VpZD1lLmd1aWR8fHYuZ3VpZCsrLHMpOnR9LGFjY2VzczpmdW5jdGlvbihlLG4scixpLHMsbyx1KXt2YXIgYSxmPXI9PW51bGwsbD0wLGM9ZS5sZW5ndGg7aWYociYmdHlwZW9mIHI9PSJvYmplY3QiKXtmb3IobCBpbiByKXYuYWNjZXNzKGUsbixsLHJbbF0sMSxvLGkpO3M9MX1lbHNlIGlmKGkhPT10KXthPXU9PT10JiZ2LmlzRnVuY3Rpb24oaSksZiYmKGE/KGE9bixuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYS5jYWxsKHYoZSksbil9KToobi5jYWxsKGUsaSksbj1udWxsKSk7aWYobilmb3IoO2w8YztsKyspbihlW2xdLHIsYT9pLmNhbGwoZVtsXSxsLG4oZVtsXSxyKSk6aSx1KTtzPTF9cmV0dXJuIHM/ZTpmP24uY2FsbChlKTpjP24oZVswXSxyKTpvfSxub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KSx2LnJlYWR5LnByb21pc2U9ZnVuY3Rpb24odCl7aWYoIXIpe3I9di5EZWZlcnJlZCgpO2lmKGkucmVhZHlTdGF0ZT09PSJjb21wbGV0ZSIpc2V0VGltZW91dCh2LnJlYWR5LDEpO2Vsc2UgaWYoaS5hZGRFdmVudExpc3RlbmVyKWkuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsQSwhMSksZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIix2LnJlYWR5LCExKTtlbHNle2kuYXR0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIsQSksZS5hdHRhY2hFdmVudCgib25sb2FkIix2LnJlYWR5KTt2YXIgbj0hMTt0cnl7bj1lLmZyYW1lRWxlbWVudD09bnVsbCYmaS5kb2N1bWVudEVsZW1lbnR9Y2F0Y2gocyl7fW4mJm4uZG9TY3JvbGwmJmZ1bmN0aW9uIG8oKXtpZighdi5pc1JlYWR5KXt0cnl7bi5kb1Njcm9sbCgibGVmdCIpfWNhdGNoKGUpe3JldHVybiBzZXRUaW1lb3V0KG8sNTApfXYucmVhZHkoKX19KCl9fXJldHVybiByLnByb21pc2UodCl9LHYuZWFjaCgiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCIuc3BsaXQoIiAiKSxmdW5jdGlvbihlLHQpe09bIltvYmplY3QgIit0KyJdIl09dC50b0xvd2VyQ2FzZSgpfSksbj12KGkpO3ZhciBNPXt9O3YuQ2FsbGJhY2tzPWZ1bmN0aW9uKGUpe2U9dHlwZW9mIGU9PSJzdHJpbmciP01bZV18fF8oZSk6di5leHRlbmQoe30sZSk7dmFyIG4scixpLHMsbyx1LGE9W10sZj0hZS5vbmNlJiZbXSxsPWZ1bmN0aW9uKHQpe249ZS5tZW1vcnkmJnQscj0hMCx1PXN8fDAscz0wLG89YS5sZW5ndGgsaT0hMDtmb3IoO2EmJnU8bzt1KyspaWYoYVt1XS5hcHBseSh0WzBdLHRbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe249ITE7YnJlYWt9aT0hMSxhJiYoZj9mLmxlbmd0aCYmbChmLnNoaWZ0KCkpOm4/YT1bXTpjLmRpc2FibGUoKSl9LGM9e2FkZDpmdW5jdGlvbigpe2lmKGEpe3ZhciB0PWEubGVuZ3RoOyhmdW5jdGlvbiByKHQpe3YuZWFjaCh0LGZ1bmN0aW9uKHQsbil7dmFyIGk9di50eXBlKG4pO2k9PT0iZnVuY3Rpb24iPyghZS51bmlxdWV8fCFjLmhhcyhuKSkmJmEucHVzaChuKTpuJiZuLmxlbmd0aCYmaSE9PSJzdHJpbmciJiZyKG4pfSl9KShhcmd1bWVudHMpLGk/bz1hLmxlbmd0aDpuJiYocz10LGwobikpfXJldHVybiB0aGlzfSxyZW1vdmU6ZnVuY3Rpb24oKXtyZXR1cm4gYSYmdi5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbihlLHQpe3ZhciBuO3doaWxlKChuPXYuaW5BcnJheSh0LGEsbikpPi0xKWEuc3BsaWNlKG4sMSksaSYmKG48PW8mJm8tLSxuPD11JiZ1LS0pfSksdGhpc30saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2LmluQXJyYXkoZSxhKT4tMX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gYT1bXSx0aGlzfSxkaXNhYmxlOmZ1bmN0aW9uKCl7cmV0dXJuIGE9Zj1uPXQsdGhpc30sZGlzYWJsZWQ6ZnVuY3Rpb24oKXtyZXR1cm4hYX0sbG9jazpmdW5jdGlvbigpe3JldHVybiBmPXQsbnx8Yy5kaXNhYmxlKCksdGhpc30sbG9ja2VkOmZ1bmN0aW9uKCl7cmV0dXJuIWZ9LGZpcmVXaXRoOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxhJiYoIXJ8fGYpJiYoaT9mLnB1c2godCk6bCh0KSksdGhpc30sZmlyZTpmdW5jdGlvbigpe3JldHVybiBjLmZpcmVXaXRoKHRoaXMsYXJndW1lbnRzKSx0aGlzfSxmaXJlZDpmdW5jdGlvbigpe3JldHVybiEhcn19O3JldHVybiBjfSx2LmV4dGVuZCh7RGVmZXJyZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9W1sicmVzb2x2ZSIsImRvbmUiLHYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLCJyZXNvbHZlZCJdLFsicmVqZWN0IiwiZmFpbCIsdi5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlamVjdGVkIl0sWyJub3RpZnkiLCJwcm9ncmVzcyIsdi5DYWxsYmFja3MoIm1lbW9yeSIpXV0sbj0icGVuZGluZyIscj17c3RhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gbn0sYWx3YXlzOmZ1bmN0aW9uKCl7cmV0dXJuIGkuZG9uZShhcmd1bWVudHMpLmZhaWwoYXJndW1lbnRzKSx0aGlzfSx0aGVuOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzO3JldHVybiB2LkRlZmVycmVkKGZ1bmN0aW9uKG4pe3YuZWFjaCh0LGZ1bmN0aW9uKHQscil7dmFyIHM9clswXSxvPWVbdF07aVtyWzFdXSh2LmlzRnVuY3Rpb24obyk/ZnVuY3Rpb24oKXt2YXIgZT1vLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ2LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bcysiV2l0aCJdKHRoaXM9PT1pP246dGhpcyxbZV0pfTpuW3NdKX0pLGU9bnVsbH0pLnByb21pc2UoKX0scHJvbWlzZTpmdW5jdGlvbihlKXtyZXR1cm4gZSE9bnVsbD92LmV4dGVuZChlLHIpOnJ9fSxpPXt9O3JldHVybiByLnBpcGU9ci50aGVuLHYuZWFjaCh0LGZ1bmN0aW9uKGUscyl7dmFyIG89c1syXSx1PXNbM107cltzWzFdXT1vLmFkZCx1JiZvLmFkZChmdW5jdGlvbigpe249dX0sdFtlXjFdWzJdLmRpc2FibGUsdFsyXVsyXS5sb2NrKSxpW3NbMF1dPW8uZmlyZSxpW3NbMF0rIldpdGgiXT1vLmZpcmVXaXRofSksci5wcm9taXNlKGkpLGUmJmUuY2FsbChpLGkpLGl9LHdoZW46ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPWwuY2FsbChhcmd1bWVudHMpLHI9bi5sZW5ndGgsaT1yIT09MXx8ZSYmdi5pc0Z1bmN0aW9uKGUucHJvbWlzZSk/cjowLHM9aT09PTE/ZTp2LkRlZmVycmVkKCksbz1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGZ1bmN0aW9uKHIpe3RbZV09dGhpcyxuW2VdPWFyZ3VtZW50cy5sZW5ndGg+MT9sLmNhbGwoYXJndW1lbnRzKTpyLG49PT11P3Mubm90aWZ5V2l0aCh0LG4pOi0taXx8cy5yZXNvbHZlV2l0aCh0LG4pfX0sdSxhLGY7aWYocj4xKXt1PW5ldyBBcnJheShyKSxhPW5ldyBBcnJheShyKSxmPW5ldyBBcnJheShyKTtmb3IoO3Q8cjt0Kyspblt0XSYmdi5pc0Z1bmN0aW9uKG5bdF0ucHJvbWlzZSk/blt0XS5wcm9taXNlKCkuZG9uZShvKHQsZixuKSkuZmFpbChzLnJlamVjdCkucHJvZ3Jlc3Mobyh0LGEsdSkpOi0taX1yZXR1cm4gaXx8cy5yZXNvbHZlV2l0aChmLG4pLHMucHJvbWlzZSgpfX0pLHYuc3VwcG9ydD1mdW5jdGlvbigpe3ZhciB0LG4scixzLG8sdSxhLGYsbCxjLGgscD1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpO3Auc2V0QXR0cmlidXRlKCJjbGFzc05hbWUiLCJ0IikscC5pbm5lckhUTUw9IiAgPGxpbmsvPjx0YWJsZT48L3RhYmxlPjxhIGhyZWY9Jy9hJz5hPC9hPjxpbnB1dCB0eXBlPSdjaGVja2JveCcvPiIsbj1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikscj1wLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF07aWYoIW58fCFyfHwhbi5sZW5ndGgpcmV0dXJue307cz1pLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLG89cy5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSx1PXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sci5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSIsdD17bGVhZGluZ1doaXRlc3BhY2U6cC5maXJzdENoaWxkLm5vZGVUeXBlPT09Myx0Ym9keTohcC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGJvZHkiKS5sZW5ndGgsaHRtbFNlcmlhbGl6ZTohIXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsc3R5bGU6L3RvcC8udGVzdChyLmdldEF0dHJpYnV0ZSgic3R5bGUiKSksaHJlZk5vcm1hbGl6ZWQ6ci5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIvYSIsb3BhY2l0eTovXjAuNS8udGVzdChyLnN0eWxlLm9wYWNpdHkpLGNzc0Zsb2F0OiEhci5zdHlsZS5jc3NGbG9hdCxjaGVja09uOnUudmFsdWU9PT0ib24iLG9wdFNlbGVjdGVkOm8uc2VsZWN0ZWQsZ2V0U2V0QXR0cmlidXRlOnAuY2xhc3NOYW1lIT09InQiLGVuY3R5cGU6ISFpLmNyZWF0ZUVsZW1lbnQoImZvcm0iKS5lbmN0eXBlLGh0bWw1Q2xvbmU6aS5jcmVhdGVFbGVtZW50KCJuYXYiKS5jbG9uZU5vZGUoITApLm91dGVySFRNTCE9PSI8Om5hdj48LzpuYXY+Iixib3hNb2RlbDppLmNvbXBhdE1vZGU9PT0iQ1NTMUNvbXBhdCIsc3VibWl0QnViYmxlczohMCxjaGFuZ2VCdWJibGVzOiEwLGZvY3VzaW5CdWJibGVzOiExLGRlbGV0ZUV4cGFuZG86ITAsbm9DbG9uZUV2ZW50OiEwLGlubGluZUJsb2NrTmVlZHNMYXlvdXQ6ITEsc2hyaW5rV3JhcEJsb2NrczohMSxyZWxpYWJsZU1hcmdpblJpZ2h0OiEwLGJveFNpemluZ1JlbGlhYmxlOiEwLHBpeGVsUG9zaXRpb246ITF9LHUuY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPXUuY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hby5kaXNhYmxlZDt0cnl7ZGVsZXRlIHAudGVzdH1jYXRjaChkKXt0LmRlbGV0ZUV4cGFuZG89ITF9IXAuYWRkRXZlbnRMaXN0ZW5lciYmcC5hdHRhY2hFdmVudCYmcC5maXJlRXZlbnQmJihwLmF0dGFjaEV2ZW50KCJvbmNsaWNrIixoPWZ1bmN0aW9uKCl7dC5ub0Nsb25lRXZlbnQ9ITF9KSxwLmNsb25lTm9kZSghMCkuZmlyZUV2ZW50KCJvbmNsaWNrIikscC5kZXRhY2hFdmVudCgib25jbGljayIsaCkpLHU9aS5jcmVhdGVFbGVtZW50KCJpbnB1dCIpLHUudmFsdWU9InQiLHUuc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx0LnJhZGlvVmFsdWU9dS52YWx1ZT09PSJ0Iix1LnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsImNoZWNrZWQiKSx1LnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxwLmFwcGVuZENoaWxkKHUpLGE9aS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYS5hcHBlbmRDaGlsZChwLmxhc3RDaGlsZCksdC5jaGVja0Nsb25lPWEuY2xvbmVOb2RlKCEwKS5jbG9uZU5vZGUoITApLmxhc3RDaGlsZC5jaGVja2VkLHQuYXBwZW5kQ2hlY2tlZD11LmNoZWNrZWQsYS5yZW1vdmVDaGlsZCh1KSxhLmFwcGVuZENoaWxkKHApO2lmKHAuYXR0YWNoRXZlbnQpZm9yKGwgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSlmPSJvbiIrbCxjPWYgaW4gcCxjfHwocC5zZXRBdHRyaWJ1dGUoZiwicmV0dXJuOyIpLGM9dHlwZW9mIHBbZl09PSJmdW5jdGlvbiIpLHRbbCsiQnViYmxlcyJdPWM7cmV0dXJuIHYoZnVuY3Rpb24oKXt2YXIgbixyLHMsbyx1PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47IixhPWkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImJvZHkiKVswXTtpZighYSlyZXR1cm47bj1pLmNyZWF0ZUVsZW1lbnQoImRpdiIpLG4uc3R5bGUuY3NzVGV4dD0idmlzaWJpbGl0eTpoaWRkZW47Ym9yZGVyOjA7d2lkdGg6MDtoZWlnaHQ6MDtwb3NpdGlvbjpzdGF0aWM7dG9wOjA7bWFyZ2luLXRvcDoxcHgiLGEuaW5zZXJ0QmVmb3JlKG4sYS5maXJzdENoaWxkKSxyPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksbi5hcHBlbmRDaGlsZChyKSxyLmlubmVySFRNTD0iPHRhYmxlPjx0cj48dGQ+PC90ZD48dGQ+dDwvdGQ+PC90cj48L3RhYmxlPiIscz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZCIpLHNbMF0uc3R5bGUuY3NzVGV4dD0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6bm9uZSIsYz1zWzBdLm9mZnNldEhlaWdodD09PTAsc1swXS5zdHlsZS5kaXNwbGF5PSIiLHNbMV0uc3R5bGUuZGlzcGxheT0ibm9uZSIsdC5yZWxpYWJsZUhpZGRlbk9mZnNldHM9YyYmc1swXS5vZmZzZXRIZWlnaHQ9PT0wLHIuaW5uZXJIVE1MPSIiLHIuc3R5bGUuY3NzVGV4dD0iYm94LXNpemluZzpib3JkZXItYm94Oy1tb3otYm94LXNpemluZzpib3JkZXItYm94Oy13ZWJraXQtYm94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MXB4O2JvcmRlcjoxcHg7ZGlzcGxheTpibG9jazt3aWR0aDo0cHg7bWFyZ2luLXRvcDoxJTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MSU7Iix0LmJveFNpemluZz1yLm9mZnNldFdpZHRoPT09NCx0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0PWEub2Zmc2V0VG9wIT09MSxlLmdldENvbXB1dGVkU3R5bGUmJih0LnBpeGVsUG9zaXRpb249KGUuZ2V0Q29tcHV0ZWRTdHlsZShyLG51bGwpfHx7fSkudG9wIT09IjElIix0LmJveFNpemluZ1JlbGlhYmxlPShlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGg9PT0iNHB4IixvPWkuY3JlYXRlRWxlbWVudCgiZGl2Iiksby5zdHlsZS5jc3NUZXh0PXIuc3R5bGUuY3NzVGV4dD11LG8uc3R5bGUubWFyZ2luUmlnaHQ9by5zdHlsZS53aWR0aD0iMCIsci5zdHlsZS53aWR0aD0iMXB4IixyLmFwcGVuZENoaWxkKG8pLHQucmVsaWFibGVNYXJnaW5SaWdodD0hcGFyc2VGbG9hdCgoZS5nZXRDb21wdXRlZFN0eWxlKG8sbnVsbCl8fHt9KS5tYXJnaW5SaWdodCkpLHR5cGVvZiByLnN0eWxlLnpvb20hPSJ1bmRlZmluZWQiJiYoci5pbm5lckhUTUw9IiIsci5zdHlsZS5jc3NUZXh0PXUrIndpZHRoOjFweDtwYWRkaW5nOjFweDtkaXNwbGF5OmlubGluZTt6b29tOjEiLHQuaW5saW5lQmxvY2tOZWVkc0xheW91dD1yLm9mZnNldFdpZHRoPT09MyxyLnN0eWxlLmRpc3BsYXk9ImJsb2NrIixyLnN0eWxlLm92ZXJmbG93PSJ2aXNpYmxlIixyLmlubmVySFRNTD0iPGRpdj48L2Rpdj4iLHIuZmlyc3RDaGlsZC5zdHlsZS53aWR0aD0iNXB4Iix0LnNocmlua1dyYXBCbG9ja3M9ci5vZmZzZXRXaWR0aCE9PTMsbi5zdHlsZS56b29tPTEpLGEucmVtb3ZlQ2hpbGQobiksbj1yPXM9bz1udWxsfSksYS5yZW1vdmVDaGlsZChwKSxuPXI9cz1vPXU9YT1wPW51bGwsdH0oKTt2YXIgRD0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sUD0vKFtBLVpdKS9nO3YuZXh0ZW5kKHtjYWNoZTp7fSxkZWxldGVkSWRzOltdLHV1aWQ6MCxleHBhbmRvOiJqUXVlcnkiKyh2LmZuLmpxdWVyeStNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0RhdGE6e2VtYmVkOiEwLG9iamVjdDoiY2xzaWQ6RDI3Q0RCNkUtQUU2RC0xMWNmLTk2QjgtNDQ0NTUzNTQwMDAwIixhcHBsZXQ6ITB9LGhhc0RhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5ub2RlVHlwZT92LmNhY2hlW2Vbdi5leHBhbmRvXV06ZVt2LmV4cGFuZG9dLCEhZSYmIUIoZSl9LGRhdGE6ZnVuY3Rpb24oZSxuLHIsaSl7aWYoIXYuYWNjZXB0RGF0YShlKSlyZXR1cm47dmFyIHMsbyx1PXYuZXhwYW5kbyxhPXR5cGVvZiBuPT0ic3RyaW5nIixmPWUubm9kZVR5cGUsbD1mP3YuY2FjaGU6ZSxjPWY/ZVt1XTplW3VdJiZ1O2lmKCghY3x8IWxbY118fCFpJiYhbFtjXS5kYXRhKSYmYSYmcj09PXQpcmV0dXJuO2N8fChmP2VbdV09Yz12LmRlbGV0ZWRJZHMucG9wKCl8fHYuZ3VpZCsrOmM9dSksbFtjXXx8KGxbY109e30sZnx8KGxbY10udG9KU09OPXYubm9vcCkpO2lmKHR5cGVvZiBuPT0ib2JqZWN0Inx8dHlwZW9mIG49PSJmdW5jdGlvbiIpaT9sW2NdPXYuZXh0ZW5kKGxbY10sbik6bFtjXS5kYXRhPXYuZXh0ZW5kKGxbY10uZGF0YSxuKTtyZXR1cm4gcz1sW2NdLGl8fChzLmRhdGF8fChzLmRhdGE9e30pLHM9cy5kYXRhKSxyIT09dCYmKHNbdi5jYW1lbENhc2UobildPXIpLGE/KG89c1tuXSxvPT1udWxsJiYobz1zW3YuY2FtZWxDYXNlKG4pXSkpOm89cyxvfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUsdCxuKXtpZighdi5hY2NlcHREYXRhKGUpKXJldHVybjt2YXIgcixpLHMsbz1lLm5vZGVUeXBlLHU9bz92LmNhY2hlOmUsYT1vP2Vbdi5leHBhbmRvXTp2LmV4cGFuZG87aWYoIXVbYV0pcmV0dXJuO2lmKHQpe3I9bj91W2FdOnVbYV0uZGF0YTtpZihyKXt2LmlzQXJyYXkodCl8fCh0IGluIHI/dD1bdF06KHQ9di5jYW1lbENhc2UodCksdCBpbiByP3Q9W3RdOnQ9dC5zcGxpdCgiICIpKSk7Zm9yKGk9MCxzPXQubGVuZ3RoO2k8cztpKyspZGVsZXRlIHJbdFtpXV07aWYoIShuP0I6di5pc0VtcHR5T2JqZWN0KShyKSlyZXR1cm59fWlmKCFuKXtkZWxldGUgdVthXS5kYXRhO2lmKCFCKHVbYV0pKXJldHVybn1vP3YuY2xlYW5EYXRhKFtlXSwhMCk6di5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fHUhPXUud2luZG93P2RlbGV0ZSB1W2FdOnVbYV09bnVsbH0sX2RhdGE6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRhdGEoZSx0LG4sITApfSxhY2NlcHREYXRhOmZ1bmN0aW9uKGUpe3ZhciB0PWUubm9kZU5hbWUmJnYubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIXR8fHQhPT0hMCYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PXR9fSksdi5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLHMsbyx1LGE9dGhpc1swXSxmPTAsbD1udWxsO2lmKGU9PT10KXtpZih0aGlzLmxlbmd0aCl7bD12LmRhdGEoYSk7aWYoYS5ub2RlVHlwZT09PTEmJiF2Ll9kYXRhKGEsInBhcnNlZEF0dHJzIikpe3M9YS5hdHRyaWJ1dGVzO2Zvcih1PXMubGVuZ3RoO2Y8dTtmKyspbz1zW2ZdLm5hbWUsby5pbmRleE9mKCJkYXRhLSIpfHwobz12LmNhbWVsQ2FzZShvLnN1YnN0cmluZyg1KSksSChhLG8sbFtvXSkpO3YuX2RhdGEoYSwicGFyc2VkQXR0cnMiLCEwKX19cmV0dXJuIGx9cmV0dXJuIHR5cGVvZiBlPT0ib2JqZWN0Ij90aGlzLmVhY2goZnVuY3Rpb24oKXt2LmRhdGEodGhpcyxlKX0pOihyPWUuc3BsaXQoIi4iLDIpLHJbMV09clsxXT8iLiIrclsxXToiIixpPXJbMV0rIiEiLHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24obil7aWYobj09PXQpcmV0dXJuIGw9dGhpcy50cmlnZ2VySGFuZGxlcigiZ2V0RGF0YSIraSxbclswXV0pLGw9PT10JiZhJiYobD12LmRhdGEoYSxlKSxsPUgoYSxlLGwpKSxsPT09dCYmclsxXT90aGlzLmRhdGEoclswXSk6bDtyWzFdPW4sdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKTt0LnRyaWdnZXJIYW5kbGVyKCJzZXREYXRhIitpLHIpLHYuZGF0YSh0aGlzLGUsbiksdC50cmlnZ2VySGFuZGxlcigiY2hhbmdlRGF0YSIraSxyKX0pfSxudWxsLG4sYXJndW1lbnRzLmxlbmd0aD4xLG51bGwsITEpKX0scmVtb3ZlRGF0YTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5yZW1vdmVEYXRhKHRoaXMsZSl9KX19KSx2LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO2lmKGUpcmV0dXJuIHQ9KHR8fCJmeCIpKyJxdWV1ZSIscj12Ll9kYXRhKGUsdCksbiYmKCFyfHx2LmlzQXJyYXkobik/cj12Ll9kYXRhKGUsdCx2Lm1ha2VBcnJheShuKSk6ci5wdXNoKG4pKSxyfHxbXX0sZGVxdWV1ZTpmdW5jdGlvbihlLHQpe3Q9dHx8ImZ4Ijt2YXIgbj12LnF1ZXVlKGUsdCkscj1uLmxlbmd0aCxpPW4uc2hpZnQoKSxzPXYuX3F1ZXVlSG9va3MoZSx0KSxvPWZ1bmN0aW9uKCl7di5kZXF1ZXVlKGUsdCl9O2k9PT0iaW5wcm9ncmVzcyImJihpPW4uc2hpZnQoKSxyLS0pLGkmJih0PT09ImZ4IiYmbi51bnNoaWZ0KCJpbnByb2dyZXNzIiksZGVsZXRlIHMuc3RvcCxpLmNhbGwoZSxvLHMpKSwhciYmcyYmcy5lbXB0eS5maXJlKCl9LF9xdWV1ZUhvb2tzOmZ1bmN0aW9uKGUsdCl7dmFyIG49dCsicXVldWVIb29rcyI7cmV0dXJuIHYuX2RhdGEoZSxuKXx8di5fZGF0YShlLG4se2VtcHR5OnYuQ2FsbGJhY2tzKCJvbmNlIG1lbW9yeSIpLmFkZChmdW5jdGlvbigpe3YucmVtb3ZlRGF0YShlLHQrInF1ZXVlIiwhMCksdi5yZW1vdmVEYXRhKGUsbiwhMCl9KX0pfX0pLHYuZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4pe3ZhciByPTI7cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKG49ZSxlPSJmeCIsci0tKSxhcmd1bWVudHMubGVuZ3RoPHI/di5xdWV1ZSh0aGlzWzBdLGUpOm49PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9di5xdWV1ZSh0aGlzLGUsbik7di5fcXVldWVIb29rcyh0aGlzLGUpLGU9PT0iZngiJiZ0WzBdIT09ImlucHJvZ3Jlc3MiJiZ2LmRlcXVldWUodGhpcyxlKX0pfSxkZXF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmRlcXVldWUodGhpcyxlKX0pfSxkZWxheTpmdW5jdGlvbihlLHQpe3JldHVybiBlPXYuZng/di5meC5zcGVlZHNbZV18fGU6ZSx0PXR8fCJmeCIsdGhpcy5xdWV1ZSh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9c2V0VGltZW91dCh0LGUpO24uc3RvcD1mdW5jdGlvbigpe2NsZWFyVGltZW91dChyKX19KX0sY2xlYXJRdWV1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5xdWV1ZShlfHwiZngiLFtdKX0scHJvbWlzZTpmdW5jdGlvbihlLG4pe3ZhciByLGk9MSxzPXYuRGVmZXJyZWQoKSxvPXRoaXMsdT10aGlzLmxlbmd0aCxhPWZ1bmN0aW9uKCl7LS1pfHxzLnJlc29sdmVXaXRoKG8sW29dKX07dHlwZW9mIGUhPSJzdHJpbmciJiYobj1lLGU9dCksZT1lfHwiZngiO3doaWxlKHUtLSlyPXYuX2RhdGEob1t1XSxlKyJxdWV1ZUhvb2tzIiksciYmci5lbXB0eSYmKGkrKyxyLmVtcHR5LmFkZChhKSk7cmV0dXJuIGEoKSxzLnByb21pc2Uobil9fSk7dmFyIGosRixJLHE9L1tcdFxyXG5dL2csUj0vXHIvZyxVPS9eKD86YnV0dG9ufGlucHV0KSQvaSx6PS9eKD86YnV0dG9ufGlucHV0fG9iamVjdHxzZWxlY3R8dGV4dGFyZWEpJC9pLFc9L15hKD86cmVhfCkkL2ksWD0vXig/OmF1dG9mb2N1c3xhdXRvcGxheXxhc3luY3xjaGVja2VkfGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkfHNlbGVjdGVkKSQvaSxWPXYuc3VwcG9ydC5nZXRTZXRBdHRyaWJ1dGU7di5mbi5leHRlbmQoe2F0dHI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5hY2Nlc3ModGhpcyx2LmF0dHIsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3YucmVtb3ZlQXR0cih0aGlzLGUpfSl9LHByb3A6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdi5hY2Nlc3ModGhpcyx2LnByb3AsZSx0LGFyZ3VtZW50cy5sZW5ndGg+MSl9LHJlbW92ZVByb3A6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9di5wcm9wRml4W2VdfHxlLHRoaXMuZWFjaChmdW5jdGlvbigpe3RyeXt0aGlzW2VdPXQsZGVsZXRlIHRoaXNbZV19Y2F0Y2gobil7fX0pfSxhZGRDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzLG8sdTtpZih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt2KHRoaXMpLmFkZENsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nIil7dD1lLnNwbGl0KHkpO2ZvcihuPTAscj10aGlzLmxlbmd0aDtuPHI7bisrKXtpPXRoaXNbbl07aWYoaS5ub2RlVHlwZT09PTEpaWYoIWkuY2xhc3NOYW1lJiZ0Lmxlbmd0aD09PTEpaS5jbGFzc05hbWU9ZTtlbHNle3M9IiAiK2kuY2xhc3NOYW1lKyIgIjtmb3Iobz0wLHU9dC5sZW5ndGg7bzx1O28rKylzLmluZGV4T2YoIiAiK3Rbb10rIiAiKTwwJiYocys9dFtvXSsiICIpO2kuY2xhc3NOYW1lPXYudHJpbShzKX19fXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgbixyLGkscyxvLHUsYTtpZih2LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt2KHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGUmJnR5cGVvZiBlPT0ic3RyaW5nInx8ZT09PXQpe249KGV8fCIiKS5zcGxpdCh5KTtmb3IodT0wLGE9dGhpcy5sZW5ndGg7dTxhO3UrKyl7aT10aGlzW3VdO2lmKGkubm9kZVR5cGU9PT0xJiZpLmNsYXNzTmFtZSl7cj0oIiAiK2kuY2xhc3NOYW1lKyIgIikucmVwbGFjZShxLCIgIik7Zm9yKHM9MCxvPW4ubGVuZ3RoO3M8bztzKyspd2hpbGUoci5pbmRleE9mKCIgIituW3NdKyIgIik+PTApcj1yLnJlcGxhY2UoIiAiK25bc10rIiAiLCIgIik7aS5jbGFzc05hbWU9ZT92LnRyaW0ocik6IiJ9fX1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZSxyPXR5cGVvZiB0PT0iYm9vbGVhbiI7cmV0dXJuIHYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24obil7dih0aGlzKS50b2dnbGVDbGFzcyhlLmNhbGwodGhpcyxuLHRoaXMuY2xhc3NOYW1lLHQpLHQpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7aWYobj09PSJzdHJpbmciKXt2YXIgaSxzPTAsbz12KHRoaXMpLHU9dCxhPWUuc3BsaXQoeSk7d2hpbGUoaT1hW3MrK10pdT1yP3U6IW8uaGFzQ2xhc3MoaSksb1t1PyJhZGRDbGFzcyI6InJlbW92ZUNsYXNzIl0oaSl9ZWxzZSBpZihuPT09InVuZGVmaW5lZCJ8fG49PT0iYm9vbGVhbiIpdGhpcy5jbGFzc05hbWUmJnYuX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIsdGhpcy5jbGFzc05hbWUpLHRoaXMuY2xhc3NOYW1lPXRoaXMuY2xhc3NOYW1lfHxlPT09ITE/IiI6di5fZGF0YSh0aGlzLCJfX2NsYXNzTmFtZV9fIil8fCIifSl9LGhhc0NsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0PSIgIitlKyIgIixuPTAscj10aGlzLmxlbmd0aDtmb3IoO248cjtuKyspaWYodGhpc1tuXS5ub2RlVHlwZT09PTEmJigiICIrdGhpc1tuXS5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKHEsIiAiKS5pbmRleE9mKHQpPj0wKXJldHVybiEwO3JldHVybiExfSx2YWw6ZnVuY3Rpb24oZSl7dmFyIG4scixpLHM9dGhpc1swXTtpZighYXJndW1lbnRzLmxlbmd0aCl7aWYocylyZXR1cm4gbj12LnZhbEhvb2tzW3MudHlwZV18fHYudmFsSG9va3Nbcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxuJiYiZ2V0ImluIG4mJihyPW4uZ2V0KHMsInZhbHVlIikpIT09dD9yOihyPXMudmFsdWUsdHlwZW9mIHI9PSJzdHJpbmciP3IucmVwbGFjZShSLCIiKTpyPT1udWxsPyIiOnIpO3JldHVybn1yZXR1cm4gaT12LmlzRnVuY3Rpb24oZSksdGhpcy5lYWNoKGZ1bmN0aW9uKHIpe3ZhciBzLG89dih0aGlzKTtpZih0aGlzLm5vZGVUeXBlIT09MSlyZXR1cm47aT9zPWUuY2FsbCh0aGlzLHIsby52YWwoKSk6cz1lLHM9PW51bGw/cz0iIjp0eXBlb2Ygcz09Im51bWJlciI/cys9IiI6di5pc0FycmF5KHMpJiYocz12Lm1hcChzLGZ1bmN0aW9uKGUpe3JldHVybiBlPT1udWxsPyIiOmUrIiJ9KSksbj12LnZhbEhvb2tzW3RoaXMudHlwZV18fHYudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXTtpZighbnx8ISgic2V0ImluIG4pfHxuLnNldCh0aGlzLHMsInZhbHVlIik9PT10KXRoaXMudmFsdWU9c30pfX0pLHYuZXh0ZW5kKHt2YWxIb29rczp7b3B0aW9uOntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hdHRyaWJ1dGVzLnZhbHVlO3JldHVybiF0fHx0LnNwZWNpZmllZD9lLnZhbHVlOmUudGV4dH19LHNlbGVjdDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0LG4scj1lLm9wdGlvbnMsaT1lLnNlbGVjdGVkSW5kZXgscz1lLnR5cGU9PT0ic2VsZWN0LW9uZSJ8fGk8MCxvPXM/bnVsbDpbXSx1PXM/aSsxOnIubGVuZ3RoLGE9aTwwP3U6cz9pOjA7Zm9yKDthPHU7YSsrKXtuPXJbYV07aWYoKG4uc2VsZWN0ZWR8fGE9PT1pKSYmKHYuc3VwcG9ydC5vcHREaXNhYmxlZD8hbi5kaXNhYmxlZDpuLmdldEF0dHJpYnV0ZSgiZGlzYWJsZWQiKT09PW51bGwpJiYoIW4ucGFyZW50Tm9kZS5kaXNhYmxlZHx8IXYubm9kZU5hbWUobi5wYXJlbnROb2RlLCJvcHRncm91cCIpKSl7dD12KG4pLnZhbCgpO2lmKHMpcmV0dXJuIHQ7by5wdXNoKHQpfX1yZXR1cm4gb30sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49di5tYWtlQXJyYXkodCk7cmV0dXJuIHYoZSkuZmluZCgib3B0aW9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWQ9di5pbkFycmF5KHYodGhpcykudmFsKCksbik+PTB9KSxuLmxlbmd0aHx8KGUuc2VsZWN0ZWRJbmRleD0tMSksbn19fSxhdHRyRm46e30sYXR0cjpmdW5jdGlvbihlLG4scixpKXt2YXIgcyxvLHUsYT1lLm5vZGVUeXBlO2lmKCFlfHxhPT09M3x8YT09PTh8fGE9PT0yKXJldHVybjtpZihpJiZ2LmlzRnVuY3Rpb24odi5mbltuXSkpcmV0dXJuIHYoZSlbbl0ocik7aWYodHlwZW9mIGUuZ2V0QXR0cmlidXRlPT0idW5kZWZpbmVkIilyZXR1cm4gdi5wcm9wKGUsbixyKTt1PWEhPT0xfHwhdi5pc1hNTERvYyhlKSx1JiYobj1uLnRvTG93ZXJDYXNlKCksbz12LmF0dHJIb29rc1tuXXx8KFgudGVzdChuKT9GOmopKTtpZihyIT09dCl7aWYocj09PW51bGwpe3YucmVtb3ZlQXR0cihlLG4pO3JldHVybn1yZXR1cm4gbyYmInNldCJpbiBvJiZ1JiYocz1vLnNldChlLHIsbikpIT09dD9zOihlLnNldEF0dHJpYnV0ZShuLHIrIiIpLHIpfXJldHVybiBvJiYiZ2V0ImluIG8mJnUmJihzPW8uZ2V0KGUsbikpIT09bnVsbD9zOihzPWUuZ2V0QXR0cmlidXRlKG4pLHM9PT1udWxsP3Q6cyl9LHJlbW92ZUF0dHI6ZnVuY3Rpb24oZSx0KXt2YXIgbixyLGkscyxvPTA7aWYodCYmZS5ub2RlVHlwZT09PTEpe3I9dC5zcGxpdCh5KTtmb3IoO288ci5sZW5ndGg7bysrKWk9cltvXSxpJiYobj12LnByb3BGaXhbaV18fGkscz1YLnRlc3QoaSksc3x8di5hdHRyKGUsaSwiIiksZS5yZW1vdmVBdHRyaWJ1dGUoVj9pOm4pLHMmJm4gaW4gZSYmKGVbbl09ITEpKX19LGF0dHJIb29rczp7dHlwZTp7c2V0OmZ1bmN0aW9uKGUsdCl7aWYoVS50ZXN0KGUubm9kZU5hbWUpJiZlLnBhcmVudE5vZGUpdi5lcnJvcigidHlwZSBwcm9wZXJ0eSBjYW4ndCBiZSBjaGFuZ2VkIik7ZWxzZSBpZighdi5zdXBwb3J0LnJhZGlvVmFsdWUmJnQ9PT0icmFkaW8iJiZ2Lm5vZGVOYW1lKGUsImlucHV0Iikpe3ZhciBuPWUudmFsdWU7cmV0dXJuIGUuc2V0QXR0cmlidXRlKCJ0eXBlIix0KSxuJiYoZS52YWx1ZT1uKSx0fX19LHZhbHVlOntnZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaiYmdi5ub2RlTmFtZShlLCJidXR0b24iKT9qLmdldChlLHQpOnQgaW4gZT9lLnZhbHVlOm51bGx9LHNldDpmdW5jdGlvbihlLHQsbil7aWYoaiYmdi5ub2RlTmFtZShlLCJidXR0b24iKSlyZXR1cm4gai5zZXQoZSx0LG4pO2UudmFsdWU9dH19fSxwcm9wRml4Ont0YWJpbmRleDoidGFiSW5kZXgiLHJlYWRvbmx5OiJyZWFkT25seSIsImZvciI6Imh0bWxGb3IiLCJjbGFzcyI6ImNsYXNzTmFtZSIsbWF4bGVuZ3RoOiJtYXhMZW5ndGgiLGNlbGxzcGFjaW5nOiJjZWxsU3BhY2luZyIsY2VsbHBhZGRpbmc6ImNlbGxQYWRkaW5nIixyb3dzcGFuOiJyb3dTcGFuIixjb2xzcGFuOiJjb2xTcGFuIix1c2VtYXA6InVzZU1hcCIsZnJhbWVib3JkZXI6ImZyYW1lQm9yZGVyIixjb250ZW50ZWRpdGFibGU6ImNvbnRlbnRFZGl0YWJsZSJ9LHByb3A6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHMsbyx1PWUubm9kZVR5cGU7aWYoIWV8fHU9PT0zfHx1PT09OHx8dT09PTIpcmV0dXJuO3JldHVybiBvPXUhPT0xfHwhdi5pc1hNTERvYyhlKSxvJiYobj12LnByb3BGaXhbbl18fG4scz12LnByb3BIb29rc1tuXSksciE9PXQ/cyYmInNldCJpbiBzJiYoaT1zLnNldChlLHIsbikpIT09dD9pOmVbbl09cjpzJiYiZ2V0ImluIHMmJihpPXMuZ2V0KGUsbikpIT09bnVsbD9pOmVbbl19LHByb3BIb29rczp7dGFiSW5kZXg6e2dldDpmdW5jdGlvbihlKXt2YXIgbj1lLmdldEF0dHJpYnV0ZU5vZGUoInRhYmluZGV4Iik7cmV0dXJuIG4mJm4uc3BlY2lmaWVkP3BhcnNlSW50KG4udmFsdWUsMTApOnoudGVzdChlLm5vZGVOYW1lKXx8Vy50ZXN0KGUubm9kZU5hbWUpJiZlLmhyZWY/MDp0fX19fSksRj17Z2V0OmZ1bmN0aW9uKGUsbil7dmFyIHIsaT12LnByb3AoZSxuKTtyZXR1cm4gaT09PSEwfHx0eXBlb2YgaSE9ImJvb2xlYW4iJiYocj1lLmdldEF0dHJpYnV0ZU5vZGUobikpJiZyLm5vZGVWYWx1ZSE9PSExP24udG9Mb3dlckNhc2UoKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByO3JldHVybiB0PT09ITE/di5yZW1vdmVBdHRyKGUsbik6KHI9di5wcm9wRml4W25dfHxuLHIgaW4gZSYmKGVbcl09ITApLGUuc2V0QXR0cmlidXRlKG4sbi50b0xvd2VyQ2FzZSgpKSksbn19LFZ8fChJPXtuYW1lOiEwLGlkOiEwLGNvb3JkczohMH0saj12LnZhbEhvb2tzLmJ1dHRvbj17Z2V0OmZ1bmN0aW9uKGUsbil7dmFyIHI7cmV0dXJuIHI9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pLHImJihJW25dP3IudmFsdWUhPT0iIjpyLnNwZWNpZmllZCk/ci52YWx1ZTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZ2V0QXR0cmlidXRlTm9kZShuKTtyZXR1cm4gcnx8KHI9aS5jcmVhdGVBdHRyaWJ1dGUobiksZS5zZXRBdHRyaWJ1dGVOb2RlKHIpKSxyLnZhbHVlPXQrIiJ9fSx2LmVhY2goWyJ3aWR0aCIsImhlaWdodCJdLGZ1bmN0aW9uKGUsdCl7di5hdHRySG9va3NbdF09di5leHRlbmQodi5hdHRySG9va3NbdF0se3NldDpmdW5jdGlvbihlLG4pe2lmKG49PT0iIilyZXR1cm4gZS5zZXRBdHRyaWJ1dGUodCwiYXV0byIpLG59fSl9KSx2LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e2dldDpqLmdldCxzZXQ6ZnVuY3Rpb24oZSx0LG4pe3Q9PT0iIiYmKHQ9ImZhbHNlIiksai5zZXQoZSx0LG4pfX0pLHYuc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8di5lYWNoKFsiaHJlZiIsInNyYyIsIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oZSxuKXt2LmF0dHJIb29rc1tuXT12LmV4dGVuZCh2LmF0dHJIb29rc1tuXSx7Z2V0OmZ1bmN0aW9uKGUpe3ZhciByPWUuZ2V0QXR0cmlidXRlKG4sMik7cmV0dXJuIHI9PT1udWxsP3Q6cn19KX0pLHYuc3VwcG9ydC5zdHlsZXx8KHYuYXR0ckhvb2tzLnN0eWxlPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3R5bGUuY3NzVGV4dC50b0xvd2VyQ2FzZSgpfHx0fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0PXQrIiJ9fSksdi5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwodi5wcm9wSG9va3Muc2VsZWN0ZWQ9di5leHRlbmQodi5wcm9wSG9va3Muc2VsZWN0ZWQse2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSksdi5zdXBwb3J0LmVuY3R5cGV8fCh2LnByb3BGaXguZW5jdHlwZT0iZW5jb2RpbmciKSx2LnN1cHBvcnQuY2hlY2tPbnx8di5lYWNoKFsicmFkaW8iLCJjaGVja2JveCJdLGZ1bmN0aW9uKCl7di52YWxIb29rc1t0aGlzXT17Z2V0OmZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgidmFsdWUiKT09PW51bGw/Im9uIjplLnZhbHVlfX19KSx2LmVhY2goWyJyYWRpbyIsImNoZWNrYm94Il0sZnVuY3Rpb24oKXt2LnZhbEhvb2tzW3RoaXNdPXYuZXh0ZW5kKHYudmFsSG9va3NbdGhpc10se3NldDpmdW5jdGlvbihlLHQpe2lmKHYuaXNBcnJheSh0KSlyZXR1cm4gZS5jaGVja2VkPXYuaW5BcnJheSh2KGUpLnZhbCgpLHQpPj0wfX0pfSk7dmFyICQ9L14oPzp0ZXh0YXJlYXxpbnB1dHxzZWxlY3QpJC9pLEo9L14oW15cLl0qfCkoPzpcLiguKyl8KSQvLEs9Lyg/Ol58XHMpaG92ZXIoXC5cUyt8KVxiLyxRPS9ea2V5LyxHPS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxZPS9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxaPWZ1bmN0aW9uKGUpe3JldHVybiB2LmV2ZW50LnNwZWNpYWwuaG92ZXI/ZTplLnJlcGxhY2UoSywibW91c2VlbnRlciQxIG1vdXNlbGVhdmUkMSIpfTt2LmV2ZW50PXthZGQ6ZnVuY3Rpb24oZSxuLHIsaSxzKXt2YXIgbyx1LGEsZixsLGMsaCxwLGQsbSxnO2lmKGUubm9kZVR5cGU9PT0zfHxlLm5vZGVUeXBlPT09OHx8IW58fCFyfHwhKG89di5fZGF0YShlKSkpcmV0dXJuO3IuaGFuZGxlciYmKGQ9cixyPWQuaGFuZGxlcixzPWQuc2VsZWN0b3IpLHIuZ3VpZHx8KHIuZ3VpZD12Lmd1aWQrKyksYT1vLmV2ZW50cyxhfHwoby5ldmVudHM9YT17fSksdT1vLmhhbmRsZSx1fHwoby5oYW5kbGU9dT1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIHY9PSJ1bmRlZmluZWQifHwhIWUmJnYuZXZlbnQudHJpZ2dlcmVkPT09ZS50eXBlP3Q6di5ldmVudC5kaXNwYXRjaC5hcHBseSh1LmVsZW0sYXJndW1lbnRzKX0sdS5lbGVtPWUpLG49di50cmltKFoobikpLnNwbGl0KCIgIik7Zm9yKGY9MDtmPG4ubGVuZ3RoO2YrKyl7bD1KLmV4ZWMobltmXSl8fFtdLGM9bFsxXSxoPShsWzJdfHwiIikuc3BsaXQoIi4iKS5zb3J0KCksZz12LmV2ZW50LnNwZWNpYWxbY118fHt9LGM9KHM/Zy5kZWxlZ2F0ZVR5cGU6Zy5iaW5kVHlwZSl8fGMsZz12LmV2ZW50LnNwZWNpYWxbY118fHt9LHA9di5leHRlbmQoe3R5cGU6YyxvcmlnVHlwZTpsWzFdLGRhdGE6aSxoYW5kbGVyOnIsZ3VpZDpyLmd1aWQsc2VsZWN0b3I6cyxuZWVkc0NvbnRleHQ6cyYmdi5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KHMpLG5hbWVzcGFjZTpoLmpvaW4oIi4iKX0sZCksbT1hW2NdO2lmKCFtKXttPWFbY109W10sbS5kZWxlZ2F0ZUNvdW50PTA7aWYoIWcuc2V0dXB8fGcuc2V0dXAuY2FsbChlLGksaCx1KT09PSExKWUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoYyx1LCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrYyx1KX1nLmFkZCYmKGcuYWRkLmNhbGwoZSxwKSxwLmhhbmRsZXIuZ3VpZHx8KHAuaGFuZGxlci5ndWlkPXIuZ3VpZCkpLHM/bS5zcGxpY2UobS5kZWxlZ2F0ZUNvdW50KyssMCxwKTptLnB1c2gocCksdi5ldmVudC5nbG9iYWxbY109ITB9ZT1udWxsfSxnbG9iYWw6e30scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIHMsbyx1LGEsZixsLGMsaCxwLGQsbSxnPXYuaGFzRGF0YShlKSYmdi5fZGF0YShlKTtpZighZ3x8IShoPWcuZXZlbnRzKSlyZXR1cm47dD12LnRyaW0oWih0fHwiIikpLnNwbGl0KCIgIik7Zm9yKHM9MDtzPHQubGVuZ3RoO3MrKyl7bz1KLmV4ZWModFtzXSl8fFtdLHU9YT1vWzFdLGY9b1syXTtpZighdSl7Zm9yKHUgaW4gaCl2LmV2ZW50LnJlbW92ZShlLHUrdFtzXSxuLHIsITApO2NvbnRpbnVlfXA9di5ldmVudC5zcGVjaWFsW3VdfHx7fSx1PShyP3AuZGVsZWdhdGVUeXBlOnAuYmluZFR5cGUpfHx1LGQ9aFt1XXx8W10sbD1kLmxlbmd0aCxmPWY/bmV3IFJlZ0V4cCgiKF58XFwuKSIrZi5zcGxpdCgiLiIpLnNvcnQoKS5qb2luKCJcXC4oPzouKlxcLnwpIikrIihcXC58JCkiKTpudWxsO2ZvcihjPTA7YzxkLmxlbmd0aDtjKyspbT1kW2NdLChpfHxhPT09bS5vcmlnVHlwZSkmJighbnx8bi5ndWlkPT09bS5ndWlkKSYmKCFmfHxmLnRlc3QobS5uYW1lc3BhY2UpKSYmKCFyfHxyPT09bS5zZWxlY3Rvcnx8cj09PSIqKiImJm0uc2VsZWN0b3IpJiYoZC5zcGxpY2UoYy0tLDEpLG0uc2VsZWN0b3ImJmQuZGVsZWdhdGVDb3VudC0tLHAucmVtb3ZlJiZwLnJlbW92ZS5jYWxsKGUsbSkpO2QubGVuZ3RoPT09MCYmbCE9PWQubGVuZ3RoJiYoKCFwLnRlYXJkb3dufHxwLnRlYXJkb3duLmNhbGwoZSxmLGcuaGFuZGxlKT09PSExKSYmdi5yZW1vdmVFdmVudChlLHUsZy5oYW5kbGUpLGRlbGV0ZSBoW3VdKX12LmlzRW1wdHlPYmplY3QoaCkmJihkZWxldGUgZy5oYW5kbGUsdi5yZW1vdmVEYXRhKGUsImV2ZW50cyIsITApKX0sY3VzdG9tRXZlbnQ6e2dldERhdGE6ITAsc2V0RGF0YTohMCxjaGFuZ2VEYXRhOiEwfSx0cmlnZ2VyOmZ1bmN0aW9uKG4scixzLG8pe2lmKCFzfHxzLm5vZGVUeXBlIT09MyYmcy5ub2RlVHlwZSE9PTgpe3ZhciB1LGEsZixsLGMsaCxwLGQsbSxnLHk9bi50eXBlfHxuLGI9W107aWYoWS50ZXN0KHkrdi5ldmVudC50cmlnZ2VyZWQpKXJldHVybjt5LmluZGV4T2YoIiEiKT49MCYmKHk9eS5zbGljZSgwLC0xKSxhPSEwKSx5LmluZGV4T2YoIi4iKT49MCYmKGI9eS5zcGxpdCgiLiIpLHk9Yi5zaGlmdCgpLGIuc29ydCgpKTtpZigoIXN8fHYuZXZlbnQuY3VzdG9tRXZlbnRbeV0pJiYhdi5ldmVudC5nbG9iYWxbeV0pcmV0dXJuO249dHlwZW9mIG49PSJvYmplY3QiP25bdi5leHBhbmRvXT9uOm5ldyB2LkV2ZW50KHksbik6bmV3IHYuRXZlbnQoeSksbi50eXBlPXksbi5pc1RyaWdnZXI9ITAsbi5leGNsdXNpdmU9YSxuLm5hbWVzcGFjZT1iLmpvaW4oIi4iKSxuLm5hbWVzcGFjZV9yZT1uLm5hbWVzcGFjZT9uZXcgUmVnRXhwKCIoXnxcXC4pIitiLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsaD15LmluZGV4T2YoIjoiKTwwPyJvbiIreToiIjtpZighcyl7dT12LmNhY2hlO2ZvcihmIGluIHUpdVtmXS5ldmVudHMmJnVbZl0uZXZlbnRzW3ldJiZ2LmV2ZW50LnRyaWdnZXIobixyLHVbZl0uaGFuZGxlLmVsZW0sITApO3JldHVybn1uLnJlc3VsdD10LG4udGFyZ2V0fHwobi50YXJnZXQ9cykscj1yIT1udWxsP3YubWFrZUFycmF5KHIpOltdLHIudW5zaGlmdChuKSxwPXYuZXZlbnQuc3BlY2lhbFt5XXx8e307aWYocC50cmlnZ2VyJiZwLnRyaWdnZXIuYXBwbHkocyxyKT09PSExKXJldHVybjttPVtbcyxwLmJpbmRUeXBlfHx5XV07aWYoIW8mJiFwLm5vQnViYmxlJiYhdi5pc1dpbmRvdyhzKSl7Zz1wLmRlbGVnYXRlVHlwZXx8eSxsPVkudGVzdChnK3kpP3M6cy5wYXJlbnROb2RlO2ZvcihjPXM7bDtsPWwucGFyZW50Tm9kZSltLnB1c2goW2wsZ10pLGM9bDtjPT09KHMub3duZXJEb2N1bWVudHx8aSkmJm0ucHVzaChbYy5kZWZhdWx0Vmlld3x8Yy5wYXJlbnRXaW5kb3d8fGUsZ10pfWZvcihmPTA7ZjxtLmxlbmd0aCYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtmKyspbD1tW2ZdWzBdLG4udHlwZT1tW2ZdWzFdLGQ9KHYuX2RhdGEobCwiZXZlbnRzIil8fHt9KVtuLnR5cGVdJiZ2Ll9kYXRhKGwsImhhbmRsZSIpLGQmJmQuYXBwbHkobCxyKSxkPWgmJmxbaF0sZCYmdi5hY2NlcHREYXRhKGwpJiZkLmFwcGx5JiZkLmFwcGx5KGwscik9PT0hMSYmbi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiBuLnR5cGU9eSwhbyYmIW4uaXNEZWZhdWx0UHJldmVudGVkKCkmJighcC5fZGVmYXVsdHx8cC5fZGVmYXVsdC5hcHBseShzLm93bmVyRG9jdW1lbnQscik9PT0hMSkmJih5IT09ImNsaWNrInx8IXYubm9kZU5hbWUocywiYSIpKSYmdi5hY2NlcHREYXRhKHMpJiZoJiZzW3ldJiYoeSE9PSJmb2N1cyImJnkhPT0iYmx1ciJ8fG4udGFyZ2V0Lm9mZnNldFdpZHRoIT09MCkmJiF2LmlzV2luZG93KHMpJiYoYz1zW2hdLGMmJihzW2hdPW51bGwpLHYuZXZlbnQudHJpZ2dlcmVkPXksc1t5XSgpLHYuZXZlbnQudHJpZ2dlcmVkPXQsYyYmKHNbaF09YykpLG4ucmVzdWx0fXJldHVybn0sZGlzcGF0Y2g6ZnVuY3Rpb24obil7bj12LmV2ZW50LmZpeChufHxlLmV2ZW50KTt2YXIgcixpLHMsbyx1LGEsZixjLGgscCxkPSh2Ll9kYXRhKHRoaXMsImV2ZW50cyIpfHx7fSlbbi50eXBlXXx8W10sbT1kLmRlbGVnYXRlQ291bnQsZz1sLmNhbGwoYXJndW1lbnRzKSx5PSFuLmV4Y2x1c2l2ZSYmIW4ubmFtZXNwYWNlLGI9di5ldmVudC5zcGVjaWFsW24udHlwZV18fHt9LHc9W107Z1swXT1uLG4uZGVsZWdhdGVUYXJnZXQ9dGhpcztpZihiLnByZURpc3BhdGNoJiZiLnByZURpc3BhdGNoLmNhbGwodGhpcyxuKT09PSExKXJldHVybjtpZihtJiYoIW4uYnV0dG9ufHxuLnR5cGUhPT0iY2xpY2siKSlmb3Iocz1uLnRhcmdldDtzIT10aGlzO3M9cy5wYXJlbnROb2RlfHx0aGlzKWlmKHMuZGlzYWJsZWQhPT0hMHx8bi50eXBlIT09ImNsaWNrIil7dT17fSxmPVtdO2ZvcihyPTA7cjxtO3IrKyljPWRbcl0saD1jLnNlbGVjdG9yLHVbaF09PT10JiYodVtoXT1jLm5lZWRzQ29udGV4dD92KGgsdGhpcykuaW5kZXgocyk+PTA6di5maW5kKGgsdGhpcyxudWxsLFtzXSkubGVuZ3RoKSx1W2hdJiZmLnB1c2goYyk7Zi5sZW5ndGgmJncucHVzaCh7ZWxlbTpzLG1hdGNoZXM6Zn0pfWQubGVuZ3RoPm0mJncucHVzaCh7ZWxlbTp0aGlzLG1hdGNoZXM6ZC5zbGljZShtKX0pO2ZvcihyPTA7cjx3Lmxlbmd0aCYmIW4uaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtyKyspe2E9d1tyXSxuLmN1cnJlbnRUYXJnZXQ9YS5lbGVtO2ZvcihpPTA7aTxhLm1hdGNoZXMubGVuZ3RoJiYhbi5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpO2krKyl7Yz1hLm1hdGNoZXNbaV07aWYoeXx8IW4ubmFtZXNwYWNlJiYhYy5uYW1lc3BhY2V8fG4ubmFtZXNwYWNlX3JlJiZuLm5hbWVzcGFjZV9yZS50ZXN0KGMubmFtZXNwYWNlKSluLmRhdGE9Yy5kYXRhLG4uaGFuZGxlT2JqPWMsbz0oKHYuZXZlbnQuc3BlY2lhbFtjLm9yaWdUeXBlXXx8e30pLmhhbmRsZXx8Yy5oYW5kbGVyKS5hcHBseShhLmVsZW0sZyksbyE9PXQmJihuLnJlc3VsdD1vLG89PT0hMSYmKG4ucHJldmVudERlZmF1bHQoKSxuLnN0b3BQcm9wYWdhdGlvbigpKSl9fXJldHVybiBiLnBvc3REaXNwYXRjaCYmYi5wb3N0RGlzcGF0Y2guY2FsbCh0aGlzLG4pLG4ucmVzdWx0fSxwcm9wczoiYXR0ckNoYW5nZSBhdHRyTmFtZSByZWxhdGVkTm9kZSBzcmNFbGVtZW50IGFsdEtleSBidWJibGVzIGNhbmNlbGFibGUgY3RybEtleSBjdXJyZW50VGFyZ2V0IGV2ZW50UGhhc2UgbWV0YUtleSByZWxhdGVkVGFyZ2V0IHNoaWZ0S2V5IHRhcmdldCB0aW1lU3RhbXAgdmlldyB3aGljaCIuc3BsaXQoIiAiKSxmaXhIb29rczp7fSxrZXlIb29rczp7cHJvcHM6ImNoYXIgY2hhckNvZGUga2V5IGtleUNvZGUiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUud2hpY2g9PW51bGwmJihlLndoaWNoPXQuY2hhckNvZGUhPW51bGw/dC5jaGFyQ29kZTp0LmtleUNvZGUpLGV9fSxtb3VzZUhvb2tzOntwcm9wczoiYnV0dG9uIGJ1dHRvbnMgY2xpZW50WCBjbGllbnRZIGZyb21FbGVtZW50IG9mZnNldFggb2Zmc2V0WSBwYWdlWCBwYWdlWSBzY3JlZW5YIHNjcmVlblkgdG9FbGVtZW50Ii5zcGxpdCgiICIpLGZpbHRlcjpmdW5jdGlvbihlLG4pe3ZhciByLHMsbyx1PW4uYnV0dG9uLGE9bi5mcm9tRWxlbWVudDtyZXR1cm4gZS5wYWdlWD09bnVsbCYmbi5jbGllbnRYIT1udWxsJiYocj1lLnRhcmdldC5vd25lckRvY3VtZW50fHxpLHM9ci5kb2N1bWVudEVsZW1lbnQsbz1yLmJvZHksZS5wYWdlWD1uLmNsaWVudFgrKHMmJnMuc2Nyb2xsTGVmdHx8byYmby5zY3JvbGxMZWZ0fHwwKS0ocyYmcy5jbGllbnRMZWZ0fHxvJiZvLmNsaWVudExlZnR8fDApLGUucGFnZVk9bi5jbGllbnRZKyhzJiZzLnNjcm9sbFRvcHx8byYmby5zY3JvbGxUb3B8fDApLShzJiZzLmNsaWVudFRvcHx8byYmby5jbGllbnRUb3B8fDApKSwhZS5yZWxhdGVkVGFyZ2V0JiZhJiYoZS5yZWxhdGVkVGFyZ2V0PWE9PT1lLnRhcmdldD9uLnRvRWxlbWVudDphKSwhZS53aGljaCYmdSE9PXQmJihlLndoaWNoPXUmMT8xOnUmMj8zOnUmND8yOjApLGV9fSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt2LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scj1lLHM9di5ldmVudC5maXhIb29rc1tlLnR5cGVdfHx7fSxvPXMucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcyk6dGhpcy5wcm9wcztlPXYuRXZlbnQocik7Zm9yKHQ9by5sZW5ndGg7dDspbj1vWy0tdF0sZVtuXT1yW25dO3JldHVybiBlLnRhcmdldHx8KGUudGFyZ2V0PXIuc3JjRWxlbWVudHx8aSksZS50YXJnZXQubm9kZVR5cGU9PT0zJiYoZS50YXJnZXQ9ZS50YXJnZXQucGFyZW50Tm9kZSksZS5tZXRhS2V5PSEhZS5tZXRhS2V5LHMuZmlsdGVyP3MuZmlsdGVyKGUscik6ZX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOntkZWxlZ2F0ZVR5cGU6ImZvY3VzaW4ifSxibHVyOntkZWxlZ2F0ZVR5cGU6ImZvY3Vzb3V0In0sYmVmb3JldW5sb2FkOntzZXR1cDpmdW5jdGlvbihlLHQsbil7di5pc1dpbmRvdyh0aGlzKSYmKHRoaXMub25iZWZvcmV1bmxvYWQ9bil9LHRlYXJkb3duOmZ1bmN0aW9uKGUsdCl7dGhpcy5vbmJlZm9yZXVubG9hZD09PXQmJih0aGlzLm9uYmVmb3JldW5sb2FkPW51bGwpfX19LHNpbXVsYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXYuZXh0ZW5kKG5ldyB2LkV2ZW50LG4se3R5cGU6ZSxpc1NpbXVsYXRlZDohMCxvcmlnaW5hbEV2ZW50Ont9fSk7cj92LmV2ZW50LnRyaWdnZXIoaSxudWxsLHQpOnYuZXZlbnQuZGlzcGF0Y2guY2FsbCh0LGkpLGkuaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ucHJldmVudERlZmF1bHQoKX19LHYuZXZlbnQuaGFuZGxlPXYuZXZlbnQuZGlzcGF0Y2gsdi5yZW1vdmVFdmVudD1pLnJlbW92ZUV2ZW50TGlzdGVuZXI/ZnVuY3Rpb24oZSx0LG4pe2UucmVtb3ZlRXZlbnRMaXN0ZW5lciYmZS5yZW1vdmVFdmVudExpc3RlbmVyKHQsbiwhMSl9OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0ib24iK3Q7ZS5kZXRhY2hFdmVudCYmKHR5cGVvZiBlW3JdPT0idW5kZWZpbmVkIiYmKGVbcl09bnVsbCksZS5kZXRhY2hFdmVudChyLG4pKX0sdi5FdmVudD1mdW5jdGlvbihlLHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIHYuRXZlbnQpKXJldHVybiBuZXcgdi5FdmVudChlLHQpO2UmJmUudHlwZT8odGhpcy5vcmlnaW5hbEV2ZW50PWUsdGhpcy50eXBlPWUudHlwZSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1lLmRlZmF1bHRQcmV2ZW50ZWR8fGUucmV0dXJuVmFsdWU9PT0hMXx8ZS5nZXRQcmV2ZW50RGVmYXVsdCYmZS5nZXRQcmV2ZW50RGVmYXVsdCgpP3R0OmV0KTp0aGlzLnR5cGU9ZSx0JiZ2LmV4dGVuZCh0aGlzLHQpLHRoaXMudGltZVN0YW1wPWUmJmUudGltZVN0YW1wfHx2Lm5vdygpLHRoaXNbdi5leHBhbmRvXT0hMH0sdi5FdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9dHQ7dmFyIGU9dGhpcy5vcmlnaW5hbEV2ZW50O2lmKCFlKXJldHVybjtlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKTplLnJldHVyblZhbHVlPSExfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPXR0O3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDtpZighZSlyZXR1cm47ZS5zdG9wUHJvcGFnYXRpb24mJmUuc3RvcFByb3BhZ2F0aW9uKCksZS5jYW5jZWxCdWJibGU9ITB9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9dHQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX0saXNEZWZhdWx0UHJldmVudGVkOmV0LGlzUHJvcGFnYXRpb25TdG9wcGVkOmV0LGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOmV0fSx2LmVhY2goe21vdXNlZW50ZXI6Im1vdXNlb3ZlciIsbW91c2VsZWF2ZToibW91c2VvdXQifSxmdW5jdGlvbihlLHQpe3YuZXZlbnQuc3BlY2lhbFtlXT17ZGVsZWdhdGVUeXBlOnQsYmluZFR5cGU6dCxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIG4scj10aGlzLGk9ZS5yZWxhdGVkVGFyZ2V0LHM9ZS5oYW5kbGVPYmosbz1zLnNlbGVjdG9yO2lmKCFpfHxpIT09ciYmIXYuY29udGFpbnMocixpKSllLnR5cGU9cy5vcmlnVHlwZSxuPXMuaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyksZS50eXBlPXQ7cmV0dXJuIG59fX0pLHYuc3VwcG9ydC5zdWJtaXRCdWJibGVzfHwodi5ldmVudC5zcGVjaWFsLnN1Ym1pdD17c2V0dXA6ZnVuY3Rpb24oKXtpZih2Lm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTt2LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fc3VibWl0IGtleXByZXNzLl9zdWJtaXQiLGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0LHI9di5ub2RlTmFtZShuLCJpbnB1dCIpfHx2Lm5vZGVOYW1lKG4sImJ1dHRvbiIpP24uZm9ybTp0O3ImJiF2Ll9kYXRhKHIsIl9zdWJtaXRfYXR0YWNoZWQiKSYmKHYuZXZlbnQuYWRkKHIsInN1Ym1pdC5fc3VibWl0IixmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlPSEwfSksdi5fZGF0YShyLCJfc3VibWl0X2F0dGFjaGVkIiwhMCkpfSl9LHBvc3REaXNwYXRjaDpmdW5jdGlvbihlKXtlLl9zdWJtaXRfYnViYmxlJiYoZGVsZXRlIGUuX3N1Ym1pdF9idWJibGUsdGhpcy5wYXJlbnROb2RlJiYhZS5pc1RyaWdnZXImJnYuZXZlbnQuc2ltdWxhdGUoInN1Ym1pdCIsdGhpcy5wYXJlbnROb2RlLGUsITApKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtpZih2Lm5vZGVOYW1lKHRoaXMsImZvcm0iKSlyZXR1cm4hMTt2LmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpfX0pLHYuc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwodi5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtpZigkLnRlc3QodGhpcy5ub2RlTmFtZSkpe2lmKHRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIpdi5ldmVudC5hZGQodGhpcywicHJvcGVydHljaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7ZS5vcmlnaW5hbEV2ZW50LnByb3BlcnR5TmFtZT09PSJjaGVja2VkIiYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMCl9KSx2LmV2ZW50LmFkZCh0aGlzLCJjbGljay5fY2hhbmdlIixmdW5jdGlvbihlKXt0aGlzLl9qdXN0X2NoYW5nZWQmJiFlLmlzVHJpZ2dlciYmKHRoaXMuX2p1c3RfY2hhbmdlZD0hMSksdi5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLGUsITApfSk7cmV0dXJuITF9di5ldmVudC5hZGQodGhpcywiYmVmb3JlYWN0aXZhdGUuX2NoYW5nZSIsZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7JC50ZXN0KHQubm9kZU5hbWUpJiYhdi5fZGF0YSh0LCJfY2hhbmdlX2F0dGFjaGVkIikmJih2LmV2ZW50LmFkZCh0LCJjaGFuZ2UuX2NoYW5nZSIsZnVuY3Rpb24oZSl7dGhpcy5wYXJlbnROb2RlJiYhZS5pc1NpbXVsYXRlZCYmIWUuaXNUcmlnZ2VyJiZ2LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMucGFyZW50Tm9kZSxlLCEwKX0pLHYuX2RhdGEodCwiX2NoYW5nZV9hdHRhY2hlZCIsITApKX0pfSxoYW5kbGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQ7aWYodGhpcyE9PXR8fGUuaXNTaW11bGF0ZWR8fGUuaXNUcmlnZ2VyfHx0LnR5cGUhPT0icmFkaW8iJiZ0LnR5cGUhPT0iY2hlY2tib3giKXJldHVybiBlLmhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4gdi5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhJC50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLHYuc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8di5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt2LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQsdi5ldmVudC5maXgoZSksITApfTt2LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7bisrPT09MCYmaS5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7LS1uPT09MCYmaS5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHYuZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLG4scixpLHMpe3ZhciBvLHU7aWYodHlwZW9mIGU9PSJvYmplY3QiKXt0eXBlb2YgbiE9InN0cmluZyImJihyPXJ8fG4sbj10KTtmb3IodSBpbiBlKXRoaXMub24odSxuLHIsZVt1XSxzKTtyZXR1cm4gdGhpc31yPT1udWxsJiZpPT1udWxsPyhpPW4scj1uPXQpOmk9PW51bGwmJih0eXBlb2Ygbj09InN0cmluZyI/KGk9cixyPXQpOihpPXIscj1uLG49dCkpO2lmKGk9PT0hMSlpPWV0O2Vsc2UgaWYoIWkpcmV0dXJuIHRoaXM7cmV0dXJuIHM9PT0xJiYobz1pLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHYoKS5vZmYoZSksby5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1vLmd1aWR8fChvLmd1aWQ9di5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2LmV2ZW50LmFkZCh0aGlzLGUsaSxyLG4pfSl9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbihlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLHM7aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIGk9ZS5oYW5kbGVPYmosdihlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoaS5uYW1lc3BhY2U/aS5vcmlnVHlwZSsiLiIraS5uYW1lc3BhY2U6aS5vcmlnVHlwZSxpLnNlbGVjdG9yLGkuaGFuZGxlciksdGhpcztpZih0eXBlb2YgZT09Im9iamVjdCIpe2ZvcihzIGluIGUpdGhpcy5vZmYocyxuLGVbc10pO3JldHVybiB0aGlzfWlmKG49PT0hMXx8dHlwZW9mIG49PSJmdW5jdGlvbiIpcj1uLG49dDtyZXR1cm4gcj09PSExJiYocj1ldCksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5ldmVudC5yZW1vdmUodGhpcyxlLHIsbil9KX0sYmluZDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub24oZSxudWxsLHQsbil9LHVuYmluZDpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9mZihlLG51bGwsdCl9LGxpdmU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2KHRoaXMuY29udGV4dCkub24oZSx0aGlzLnNlbGVjdG9yLHQsbiksdGhpc30sZGllOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYodGhpcy5jb250ZXh0KS5vZmYoZSx0aGlzLnNlbGVjdG9yfHwiKioiLHQpLHRoaXN9LGRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLm9uKHQsZSxuLHIpfSx1bmRlbGVnYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD09PTE/dGhpcy5vZmYoZSwiKioiKTp0aGlzLm9mZih0LGV8fCIqKiIsbil9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7di5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLHQpe2lmKHRoaXNbMF0pcmV0dXJuIHYuZXZlbnQudHJpZ2dlcihlLHQsdGhpc1swXSwhMCl9LHRvZ2dsZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMsbj1lLmd1aWR8fHYuZ3VpZCsrLHI9MCxpPWZ1bmN0aW9uKG4pe3ZhciBpPSh2Ll9kYXRhKHRoaXMsImxhc3RUb2dnbGUiK2UuZ3VpZCl8fDApJXI7cmV0dXJuIHYuX2RhdGEodGhpcywibGFzdFRvZ2dsZSIrZS5ndWlkLGkrMSksbi5wcmV2ZW50RGVmYXVsdCgpLHRbaV0uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwhMX07aS5ndWlkPW47d2hpbGUocjx0Lmxlbmd0aCl0W3IrK10uZ3VpZD1uO3JldHVybiB0aGlzLmNsaWNrKGkpfSxob3ZlcjpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm1vdXNlZW50ZXIoZSkubW91c2VsZWF2ZSh0fHxlKX19KSx2LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt2LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIG49PW51bGwmJihuPWUsZT1udWxsKSxhcmd1bWVudHMubGVuZ3RoPjA/dGhpcy5vbih0LG51bGwsZSxuKTp0aGlzLnRyaWdnZXIodCl9LFEudGVzdCh0KSYmKHYuZXZlbnQuZml4SG9va3NbdF09di5ldmVudC5rZXlIb29rcyksRy50ZXN0KHQpJiYodi5ldmVudC5maXhIb29rc1t0XT12LmV2ZW50Lm1vdXNlSG9va3MpfSksZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBudChlLHQsbixyKXtuPW58fFtdLHQ9dHx8Zzt2YXIgaSxzLGEsZixsPXQubm9kZVR5cGU7aWYoIWV8fHR5cGVvZiBlIT0ic3RyaW5nIilyZXR1cm4gbjtpZihsIT09MSYmbCE9PTkpcmV0dXJuW107YT1vKHQpO2lmKCFhJiYhcilpZihpPVIuZXhlYyhlKSlpZihmPWlbMV0pe2lmKGw9PT05KXtzPXQuZ2V0RWxlbWVudEJ5SWQoZik7aWYoIXN8fCFzLnBhcmVudE5vZGUpcmV0dXJuIG47aWYocy5pZD09PWYpcmV0dXJuIG4ucHVzaChzKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYocz10Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZikpJiZ1KHQscykmJnMuaWQ9PT1mKXJldHVybiBuLnB1c2gocyksbn1lbHNle2lmKGlbMl0pcmV0dXJuIFMuYXBwbHkobix4LmNhbGwodC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKSwwKSksbjtpZigoZj1pWzNdKSYmWiYmdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKXJldHVybiBTLmFwcGx5KG4seC5jYWxsKHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShmKSwwKSksbn1yZXR1cm4gdnQoZS5yZXBsYWNlKGosIiQxIiksdCxuLHIsYSl9ZnVuY3Rpb24gcnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gbj09PSJpbnB1dCImJnQudHlwZT09PWV9fWZ1bmN0aW9uIGl0KGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbj10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuKG49PT0iaW5wdXQifHxuPT09ImJ1dHRvbiIpJiZ0LnR5cGU9PT1lfX1mdW5jdGlvbiBzdChlKXtyZXR1cm4gTihmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxOKGZ1bmN0aW9uKG4scil7dmFyIGkscz1lKFtdLG4ubGVuZ3RoLHQpLG89cy5sZW5ndGg7d2hpbGUoby0tKW5baT1zW29dXSYmKG5baV09IShyW2ldPW5baV0pKX0pfSl9ZnVuY3Rpb24gb3QoZSx0LG4pe2lmKGU9PT10KXJldHVybiBuO3ZhciByPWUubmV4dFNpYmxpbmc7d2hpbGUocil7aWYocj09PXQpcmV0dXJuLTE7cj1yLm5leHRTaWJsaW5nfXJldHVybiAxfWZ1bmN0aW9uIHV0KGUsdCl7dmFyIG4scixzLG8sdSxhLGYsbD1MW2RdW2UrIiAiXTtpZihsKXJldHVybiB0PzA6bC5zbGljZSgwKTt1PWUsYT1bXSxmPWkucHJlRmlsdGVyO3doaWxlKHUpe2lmKCFufHwocj1GLmV4ZWModSkpKXImJih1PXUuc2xpY2UoclswXS5sZW5ndGgpfHx1KSxhLnB1c2gocz1bXSk7bj0hMTtpZihyPUkuZXhlYyh1KSlzLnB1c2gobj1uZXcgbShyLnNoaWZ0KCkpKSx1PXUuc2xpY2Uobi5sZW5ndGgpLG4udHlwZT1yWzBdLnJlcGxhY2UoaiwiICIpO2ZvcihvIGluIGkuZmlsdGVyKShyPUpbb10uZXhlYyh1KSkmJighZltvXXx8KHI9ZltvXShyKSkpJiYocy5wdXNoKG49bmV3IG0oci5zaGlmdCgpKSksdT11LnNsaWNlKG4ubGVuZ3RoKSxuLnR5cGU9byxuLm1hdGNoZXM9cik7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/dS5sZW5ndGg6dT9udC5lcnJvcihlKTpMKGUsYSkuc2xpY2UoMCl9ZnVuY3Rpb24gYXQoZSx0LHIpe3ZhciBpPXQuZGlyLHM9ciYmdC5kaXI9PT0icGFyZW50Tm9kZSIsbz13Kys7cmV0dXJuIHQuZmlyc3Q/ZnVuY3Rpb24odCxuLHIpe3doaWxlKHQ9dFtpXSlpZihzfHx0Lm5vZGVUeXBlPT09MSlyZXR1cm4gZSh0LG4scil9OmZ1bmN0aW9uKHQscix1KXtpZighdSl7dmFyIGEsZj1iKyIgIitvKyIgIixsPWYrbjt3aGlsZSh0PXRbaV0paWYoc3x8dC5ub2RlVHlwZT09PTEpe2lmKChhPXRbZF0pPT09bClyZXR1cm4gdC5zaXpzZXQ7aWYodHlwZW9mIGE9PSJzdHJpbmciJiZhLmluZGV4T2YoZik9PT0wKXtpZih0LnNpenNldClyZXR1cm4gdH1lbHNle3RbZF09bDtpZihlKHQscix1KSlyZXR1cm4gdC5zaXpzZXQ9ITAsdDt0LnNpenNldD0hMX19fWVsc2Ugd2hpbGUodD10W2ldKWlmKHN8fHQubm9kZVR5cGU9PT0xKWlmKGUodCxyLHUpKXJldHVybiB0fX1mdW5jdGlvbiBmdChlKXtyZXR1cm4gZS5sZW5ndGg+MT9mdW5jdGlvbih0LG4scil7dmFyIGk9ZS5sZW5ndGg7d2hpbGUoaS0tKWlmKCFlW2ldKHQsbixyKSlyZXR1cm4hMTtyZXR1cm4hMH06ZVswXX1mdW5jdGlvbiBsdChlLHQsbixyLGkpe3ZhciBzLG89W10sdT0wLGE9ZS5sZW5ndGgsZj10IT1udWxsO2Zvcig7dTxhO3UrKylpZihzPWVbdV0paWYoIW58fG4ocyxyLGkpKW8ucHVzaChzKSxmJiZ0LnB1c2godSk7cmV0dXJuIG99ZnVuY3Rpb24gY3QoZSx0LG4scixpLHMpe3JldHVybiByJiYhcltkXSYmKHI9Y3QocikpLGkmJiFpW2RdJiYoaT1jdChpLHMpKSxOKGZ1bmN0aW9uKHMsbyx1LGEpe3ZhciBmLGwsYyxoPVtdLHA9W10sZD1vLmxlbmd0aCx2PXN8fGR0KHR8fCIqIix1Lm5vZGVUeXBlP1t1XTp1LFtdKSxtPWUmJihzfHwhdCk/bHQodixoLGUsdSxhKTp2LGc9bj9pfHwocz9lOmR8fHIpP1tdOm86bTtuJiZuKG0sZyx1LGEpO2lmKHIpe2Y9bHQoZyxwKSxyKGYsW10sdSxhKSxsPWYubGVuZ3RoO3doaWxlKGwtLSlpZihjPWZbbF0pZ1twW2xdXT0hKG1bcFtsXV09Yyl9aWYocyl7aWYoaXx8ZSl7aWYoaSl7Zj1bXSxsPWcubGVuZ3RoO3doaWxlKGwtLSkoYz1nW2xdKSYmZi5wdXNoKG1bbF09Yyk7aShudWxsLGc9W10sZixhKX1sPWcubGVuZ3RoO3doaWxlKGwtLSkoYz1nW2xdKSYmKGY9aT9ULmNhbGwocyxjKTpoW2xdKT4tMSYmKHNbZl09IShvW2ZdPWMpKX19ZWxzZSBnPWx0KGc9PT1vP2cuc3BsaWNlKGQsZy5sZW5ndGgpOmcpLGk/aShudWxsLG8sZyxhKTpTLmFwcGx5KG8sZyl9KX1mdW5jdGlvbiBodChlKXt2YXIgdCxuLHIscz1lLmxlbmd0aCxvPWkucmVsYXRpdmVbZVswXS50eXBlXSx1PW98fGkucmVsYXRpdmVbIiAiXSxhPW8/MTowLGY9YXQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSx1LCEwKSxsPWF0KGZ1bmN0aW9uKGUpe3JldHVybiBULmNhbGwodCxlKT4tMX0sdSwhMCksaD1bZnVuY3Rpb24oZSxuLHIpe3JldHVybiFvJiYocnx8biE9PWMpfHwoKHQ9bikubm9kZVR5cGU/ZihlLG4scik6bChlLG4scikpfV07Zm9yKDthPHM7YSsrKWlmKG49aS5yZWxhdGl2ZVtlW2FdLnR5cGVdKWg9W2F0KGZ0KGgpLG4pXTtlbHNle249aS5maWx0ZXJbZVthXS50eXBlXS5hcHBseShudWxsLGVbYV0ubWF0Y2hlcyk7aWYobltkXSl7cj0rK2E7Zm9yKDtyPHM7cisrKWlmKGkucmVsYXRpdmVbZVtyXS50eXBlXSlicmVhaztyZXR1cm4gY3QoYT4xJiZmdChoKSxhPjEmJmUuc2xpY2UoMCxhLTEpLmpvaW4oIiIpLnJlcGxhY2UoaiwiJDEiKSxuLGE8ciYmaHQoZS5zbGljZShhLHIpKSxyPHMmJmh0KGU9ZS5zbGljZShyKSkscjxzJiZlLmpvaW4oIiIpKX1oLnB1c2gobil9cmV0dXJuIGZ0KGgpfWZ1bmN0aW9uIHB0KGUsdCl7dmFyIHI9dC5sZW5ndGg+MCxzPWUubGVuZ3RoPjAsbz1mdW5jdGlvbih1LGEsZixsLGgpe3ZhciBwLGQsdixtPVtdLHk9MCx3PSIwIix4PXUmJltdLFQ9aCE9bnVsbCxOPWMsQz11fHxzJiZpLmZpbmQuVEFHKCIqIixoJiZhLnBhcmVudE5vZGV8fGEpLGs9Yis9Tj09bnVsbD8xOk1hdGguRTtUJiYoYz1hIT09ZyYmYSxuPW8uZWwpO2Zvcig7KHA9Q1t3XSkhPW51bGw7dysrKXtpZihzJiZwKXtmb3IoZD0wO3Y9ZVtkXTtkKyspaWYodihwLGEsZikpe2wucHVzaChwKTticmVha31UJiYoYj1rLG49KytvLmVsKX1yJiYoKHA9IXYmJnApJiZ5LS0sdSYmeC5wdXNoKHApKX15Kz13O2lmKHImJnchPT15KXtmb3IoZD0wO3Y9dFtkXTtkKyspdih4LG0sYSxmKTtpZih1KXtpZih5PjApd2hpbGUody0tKSF4W3ddJiYhbVt3XSYmKG1bd109RS5jYWxsKGwpKTttPWx0KG0pfVMuYXBwbHkobCxtKSxUJiYhdSYmbS5sZW5ndGg+MCYmeSt0Lmxlbmd0aD4xJiZudC51bmlxdWVTb3J0KGwpfXJldHVybiBUJiYoYj1rLGM9TikseH07cmV0dXJuIG8uZWw9MCxyP04obyk6b31mdW5jdGlvbiBkdChlLHQsbil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7cjxpO3IrKyludChlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24gdnQoZSx0LG4scixzKXt2YXIgbyx1LGYsbCxjLGg9dXQoZSkscD1oLmxlbmd0aDtpZighciYmaC5sZW5ndGg9PT0xKXt1PWhbMF09aFswXS5zbGljZSgwKTtpZih1Lmxlbmd0aD4yJiYoZj11WzBdKS50eXBlPT09IklEIiYmdC5ub2RlVHlwZT09PTkmJiFzJiZpLnJlbGF0aXZlW3VbMV0udHlwZV0pe3Q9aS5maW5kLklEKGYubWF0Y2hlc1swXS5yZXBsYWNlKCQsIiIpLHQscylbMF07aWYoIXQpcmV0dXJuIG47ZT1lLnNsaWNlKHUuc2hpZnQoKS5sZW5ndGgpfWZvcihvPUouUE9TLnRlc3QoZSk/LTE6dS5sZW5ndGgtMTtvPj0wO28tLSl7Zj11W29dO2lmKGkucmVsYXRpdmVbbD1mLnR5cGVdKWJyZWFrO2lmKGM9aS5maW5kW2xdKWlmKHI9YyhmLm1hdGNoZXNbMF0ucmVwbGFjZSgkLCIiKSx6LnRlc3QodVswXS50eXBlKSYmdC5wYXJlbnROb2RlfHx0LHMpKXt1LnNwbGljZShvLDEpLGU9ci5sZW5ndGgmJnUuam9pbigiIik7aWYoIWUpcmV0dXJuIFMuYXBwbHkobix4LmNhbGwociwwKSksbjticmVha319fXJldHVybiBhKGUsaCkocix0LHMsbix6LnRlc3QoZSkpLG59ZnVuY3Rpb24gbXQoKXt9dmFyIG4scixpLHMsbyx1LGEsZixsLGMsaD0hMCxwPSJ1bmRlZmluZWQiLGQ9KCJzaXpjYWNoZSIrTWF0aC5yYW5kb20oKSkucmVwbGFjZSgiLiIsIiIpLG09U3RyaW5nLGc9ZS5kb2N1bWVudCx5PWcuZG9jdW1lbnRFbGVtZW50LGI9MCx3PTAsRT1bXS5wb3AsUz1bXS5wdXNoLHg9W10uc2xpY2UsVD1bXS5pbmRleE9mfHxmdW5jdGlvbihlKXt2YXIgdD0wLG49dGhpcy5sZW5ndGg7Zm9yKDt0PG47dCsrKWlmKHRoaXNbdF09PT1lKXJldHVybiB0O3JldHVybi0xfSxOPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbZF09dD09bnVsbHx8dCxlfSxDPWZ1bmN0aW9uKCl7dmFyIGU9e30sdD1bXTtyZXR1cm4gTihmdW5jdGlvbihuLHIpe3JldHVybiB0LnB1c2gobik+aS5jYWNoZUxlbmd0aCYmZGVsZXRlIGVbdC5zaGlmdCgpXSxlW24rIiAiXT1yfSxlKX0saz1DKCksTD1DKCksQT1DKCksTz0iW1xceDIwXFx0XFxyXFxuXFxmXSIsTT0iKD86XFxcXC58Wy1cXHddfFteXFx4MDAtXFx4YTBdKSsiLF89TS5yZXBsYWNlKCJ3IiwidyMiKSxEPSIoWypeJHwhfl0/PSkiLFA9IlxcWyIrTysiKigiK00rIikiK08rIiooPzoiK0QrTysiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrXysiKXwpfCkiK08rIipcXF0iLEg9IjooIitNKyIpKD86XFwoKD86KFsnXCJdKSgoPzpcXFxcLnxbXlxcXFxdKSo/KVxcMnwoW14oKVtcXF1dKnwoPzooPzoiK1ArIil8W146XXxcXFxcLikqfC4qKSlcXCl8KSIsQj0iOihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXCgiK08rIiooKD86LVxcZCk/XFxkKikiK08rIipcXCl8KSg/PVteLV18JCkiLGo9bmV3IFJlZ0V4cCgiXiIrTysiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitPKyIrJCIsImciKSxGPW5ldyBSZWdFeHAoIl4iK08rIiosIitPKyIqIiksST1uZXcgUmVnRXhwKCJeIitPKyIqKFtcXHgyMFxcdFxcclxcblxcZj4rfl0pIitPKyIqIikscT1uZXcgUmVnRXhwKEgpLFI9L14oPzojKFtcd1wtXSspfChcdyspfFwuKFtcd1wtXSspKSQvLFU9L146bm90Lyx6PS9bXHgyMFx0XHJcblxmXSpbK35dLyxXPS86bm90XCgkLyxYPS9oXGQvaSxWPS9pbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uL2ksJD0vXFwoPyFcXCkvZyxKPXtJRDpuZXcgUmVnRXhwKCJeIygiK00rIikiKSxDTEFTUzpuZXcgUmVnRXhwKCJeXFwuKCIrTSsiKSIpLE5BTUU6bmV3IFJlZ0V4cCgiXlxcW25hbWU9WydcIl0/KCIrTSsiKVsnXCJdP1xcXSIpLFRBRzpuZXcgUmVnRXhwKCJeKCIrTS5yZXBsYWNlKCJ3IiwidyoiKSsiKSIpLEFUVFI6bmV3IFJlZ0V4cCgiXiIrUCksUFNFVURPOm5ldyBSZWdFeHAoIl4iK0gpLFBPUzpuZXcgUmVnRXhwKEIsImkiKSxDSElMRDpuZXcgUmVnRXhwKCJeOihvbmx5fG50aHxmaXJzdHxsYXN0KS1jaGlsZCg/OlxcKCIrTysiKihldmVufG9kZHwoKFsrLV18KShcXGQqKW58KSIrTysiKig/OihbKy1dfCkiK08rIiooXFxkKyl8KSkiK08rIipcXCl8KSIsImkiKSxuZWVkc0NvbnRleHQ6bmV3IFJlZ0V4cCgiXiIrTysiKls+K35dfCIrQiwiaSIpfSxLPWZ1bmN0aW9uKGUpe3ZhciB0PWcuY3JlYXRlRWxlbWVudCgiZGl2Iik7dHJ5e3JldHVybiBlKHQpfWNhdGNoKG4pe3JldHVybiExfWZpbmFsbHl7dD1udWxsfX0sUT1LKGZ1bmN0aW9uKGUpe3JldHVybiBlLmFwcGVuZENoaWxkKGcuY3JlYXRlQ29tbWVudCgiIikpLCFlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCIqIikubGVuZ3RofSksRz1LKGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsZS5maXJzdENoaWxkJiZ0eXBlb2YgZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSE9PXAmJmUuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImhyZWYiKT09PSIjIn0pLFk9SyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48L3NlbGVjdD4iO3ZhciB0PXR5cGVvZiBlLmxhc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIm11bHRpcGxlIik7cmV0dXJuIHQhPT0iYm9vbGVhbiImJnQhPT0ic3RyaW5nIn0pLFo9SyhmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxkaXYgY2xhc3M9J2hpZGRlbiBlJz48L2Rpdj48ZGl2IGNsYXNzPSdoaWRkZW4nPjwvZGl2PiIsIWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZXx8IWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiZSIpLmxlbmd0aD8hMTooZS5sYXN0Q2hpbGQuY2xhc3NOYW1lPSJlIixlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoImUiKS5sZW5ndGg9PT0yKX0pLGV0PUsoZnVuY3Rpb24oZSl7ZS5pZD1kKzAsZS5pbm5lckhUTUw9IjxhIG5hbWU9JyIrZCsiJz48L2E+PGRpdiBuYW1lPSciK2QrIic+PC9kaXY+Iix5Lmluc2VydEJlZm9yZShlLHkuZmlyc3RDaGlsZCk7dmFyIHQ9Zy5nZXRFbGVtZW50c0J5TmFtZSYmZy5nZXRFbGVtZW50c0J5TmFtZShkKS5sZW5ndGg9PT0yK2cuZ2V0RWxlbWVudHNCeU5hbWUoZCswKS5sZW5ndGg7cmV0dXJuIHI9IWcuZ2V0RWxlbWVudEJ5SWQoZCkseS5yZW1vdmVDaGlsZChlKSx0fSk7dHJ5e3guY2FsbCh5LmNoaWxkTm9kZXMsMClbMF0ubm9kZVR5cGV9Y2F0Y2godHQpe3g9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXTtmb3IoO3Q9dGhpc1tlXTtlKyspbi5wdXNoKHQpO3JldHVybiBufX1udC5tYXRjaGVzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG50KGUsbnVsbCxudWxsLHQpfSxudC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnQodCxudWxsLG51bGwsW2VdKS5sZW5ndGg+MH0scz1udC5nZXRUZXh0PWZ1bmN0aW9uKGUpe3ZhciB0LG49IiIscj0wLGk9ZS5ub2RlVHlwZTtpZihpKXtpZihpPT09MXx8aT09PTl8fGk9PT0xMSl7aWYodHlwZW9mIGUudGV4dENvbnRlbnQ9PSJzdHJpbmciKXJldHVybiBlLnRleHRDb250ZW50O2ZvcihlPWUuZmlyc3RDaGlsZDtlO2U9ZS5uZXh0U2libGluZyluKz1zKGUpfWVsc2UgaWYoaT09PTN8fGk9PT00KXJldHVybiBlLm5vZGVWYWx1ZX1lbHNlIGZvcig7dD1lW3JdO3IrKyluKz1zKHQpO3JldHVybiBufSxvPW50LmlzWE1MPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJihlLm93bmVyRG9jdW1lbnR8fGUpLmRvY3VtZW50RWxlbWVudDtyZXR1cm4gdD90Lm5vZGVOYW1lIT09IkhUTUwiOiExfSx1PW50LmNvbnRhaW5zPXkuY29udGFpbnM/ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm5vZGVUeXBlPT09OT9lLmRvY3VtZW50RWxlbWVudDplLHI9dCYmdC5wYXJlbnROb2RlO3JldHVybiBlPT09cnx8ISEociYmci5ub2RlVHlwZT09PTEmJm4uY29udGFpbnMmJm4uY29udGFpbnMocikpfTp5LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIHQmJiEhKGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24odCkmMTYpfTpmdW5jdGlvbihlLHQpe3doaWxlKHQ9dC5wYXJlbnROb2RlKWlmKHQ9PT1lKXJldHVybiEwO3JldHVybiExfSxudC5hdHRyPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1vKGUpO3JldHVybiByfHwodD10LnRvTG93ZXJDYXNlKCkpLChuPWkuYXR0ckhhbmRsZVt0XSk/bihlKTpyfHxZP2UuZ2V0QXR0cmlidXRlKHQpOihuPWUuZ2V0QXR0cmlidXRlTm9kZSh0KSxuP3R5cGVvZiBlW3RdPT0iYm9vbGVhbiI/ZVt0XT90Om51bGw6bi5zcGVjaWZpZWQ/bi52YWx1ZTpudWxsOm51bGwpfSxpPW50LnNlbGVjdG9ycz17Y2FjaGVMZW5ndGg6NTAsY3JlYXRlUHNldWRvOk4sbWF0Y2g6SixhdHRySGFuZGxlOkc/e306e2hyZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZ2V0QXR0cmlidXRlKCJocmVmIiwyKX0sdHlwZTpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUoInR5cGUiKX19LGZpbmQ6e0lEOnI/ZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09cCYmIW4pe3ZhciByPXQuZ2V0RWxlbWVudEJ5SWQoZSk7cmV0dXJuIHImJnIucGFyZW50Tm9kZT9bcl06W119fTpmdW5jdGlvbihlLG4scil7aWYodHlwZW9mIG4uZ2V0RWxlbWVudEJ5SWQhPT1wJiYhcil7dmFyIGk9bi5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gaT9pLmlkPT09ZXx8dHlwZW9mIGkuZ2V0QXR0cmlidXRlTm9kZSE9PXAmJmkuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKS52YWx1ZT09PWU/W2ldOnQ6W119fSxUQUc6UT9mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlUYWdOYW1lIT09cClyZXR1cm4gdC5nZXRFbGVtZW50c0J5VGFnTmFtZShlKX06ZnVuY3Rpb24oZSx0KXt2YXIgbj10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKGU9PT0iKiIpe3ZhciByLGk9W10scz0wO2Zvcig7cj1uW3NdO3MrKylyLm5vZGVUeXBlPT09MSYmaS5wdXNoKHIpO3JldHVybiBpfXJldHVybiBufSxOQU1FOmV0JiZmdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlOYW1lIT09cClyZXR1cm4gdC5nZXRFbGVtZW50c0J5TmFtZShuYW1lKX0sQ0xBU1M6WiYmZnVuY3Rpb24oZSx0LG4pe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1wJiYhbilyZXR1cm4gdC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGUpfX0scmVsYXRpdmU6eyI+Ijp7ZGlyOiJwYXJlbnROb2RlIixmaXJzdDohMH0sIiAiOntkaXI6InBhcmVudE5vZGUifSwiKyI6e2RpcjoicHJldmlvdXNTaWJsaW5nIixmaXJzdDohMH0sIn4iOntkaXI6InByZXZpb3VzU2libGluZyJ9fSxwcmVGaWx0ZXI6e0FUVFI6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS5yZXBsYWNlKCQsIiIpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKCQsIiIpLGVbMl09PT0ifj0iJiYoZVszXT0iICIrZVszXSsiICIpLGUuc2xpY2UoMCw0KX0sQ0hJTEQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGVbMV09ZVsxXS50b0xvd2VyQ2FzZSgpLGVbMV09PT0ibnRoIj8oZVsyXXx8bnQuZXJyb3IoZVswXSksZVszXT0rKGVbM10/ZVs0XSsoZVs1XXx8MSk6MiooZVsyXT09PSJldmVuInx8ZVsyXT09PSJvZGQiKSksZVs0XT0rKGVbNl0rZVs3XXx8ZVsyXT09PSJvZGQiKSk6ZVsyXSYmbnQuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciB0LG47aWYoSi5DSElMRC50ZXN0KGVbMF0pKXJldHVybiBudWxsO2lmKGVbM10pZVsyXT1lWzNdO2Vsc2UgaWYodD1lWzRdKXEudGVzdCh0KSYmKG49dXQodCwhMCkpJiYobj10LmluZGV4T2YoIikiLHQubGVuZ3RoLW4pLXQubGVuZ3RoKSYmKHQ9dC5zbGljZSgwLG4pLGVbMF09ZVswXS5zbGljZSgwLG4pKSxlWzJdPXQ7cmV0dXJuIGUuc2xpY2UoMCwzKX19LGZpbHRlcjp7SUQ6cj9mdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoJCwiIiksZnVuY3Rpb24odCl7cmV0dXJuIHQuZ2V0QXR0cmlidXRlKCJpZCIpPT09ZX19OmZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgkLCIiKSxmdW5jdGlvbih0KXt2YXIgbj10eXBlb2YgdC5nZXRBdHRyaWJ1dGVOb2RlIT09cCYmdC5nZXRBdHRyaWJ1dGVOb2RlKCJpZCIpO3JldHVybiBuJiZuLnZhbHVlPT09ZX19LFRBRzpmdW5jdGlvbihlKXtyZXR1cm4gZT09PSIqIj9mdW5jdGlvbigpe3JldHVybiEwfTooZT1lLnJlcGxhY2UoJCwiIikudG9Mb3dlckNhc2UoKSxmdW5jdGlvbih0KXtyZXR1cm4gdC5ub2RlTmFtZSYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09ZX0pfSxDTEFTUzpmdW5jdGlvbihlKXt2YXIgdD1rW2RdW2UrIiAiXTtyZXR1cm4gdHx8KHQ9bmV3IFJlZ0V4cCgiKF58IitPKyIpIitlKyIoIitPKyJ8JCkiKSkmJmsoZSxmdW5jdGlvbihlKXtyZXR1cm4gdC50ZXN0KGUuY2xhc3NOYW1lfHx0eXBlb2YgZS5nZXRBdHRyaWJ1dGUhPT1wJiZlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKXx8IiIpfSl9LEFUVFI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyLGkpe3ZhciBzPW50LmF0dHIocixlKTtyZXR1cm4gcz09bnVsbD90PT09IiE9Ijp0PyhzKz0iIix0PT09Ij0iP3M9PT1uOnQ9PT0iIT0iP3MhPT1uOnQ9PT0iXj0iP24mJnMuaW5kZXhPZihuKT09PTA6dD09PSIqPSI/biYmcy5pbmRleE9mKG4pPi0xOnQ9PT0iJD0iP24mJnMuc3Vic3RyKHMubGVuZ3RoLW4ubGVuZ3RoKT09PW46dD09PSJ+PSI/KCIgIitzKyIgIikuaW5kZXhPZihuKT4tMTp0PT09Inw9Ij9zPT09bnx8cy5zdWJzdHIoMCxuLmxlbmd0aCsxKT09PW4rIi0iOiExKTohMH19LENISUxEOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiBlPT09Im50aCI/ZnVuY3Rpb24oZSl7dmFyIHQsaSxzPWUucGFyZW50Tm9kZTtpZihuPT09MSYmcj09PTApcmV0dXJuITA7aWYocyl7aT0wO2Zvcih0PXMuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZylpZih0Lm5vZGVUeXBlPT09MSl7aSsrO2lmKGU9PT10KWJyZWFrfX1yZXR1cm4gaS09cixpPT09bnx8aSVuPT09MCYmaS9uPj0wfTpmdW5jdGlvbih0KXt2YXIgbj10O3N3aXRjaChlKXtjYXNlIm9ubHkiOmNhc2UiZmlyc3QiOndoaWxlKG49bi5wcmV2aW91c1NpYmxpbmcpaWYobi5ub2RlVHlwZT09PTEpcmV0dXJuITE7aWYoZT09PSJmaXJzdCIpcmV0dXJuITA7bj10O2Nhc2UibGFzdCI6d2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG4ubm9kZVR5cGU9PT0xKXJldHVybiExO3JldHVybiEwfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9aS5wc2V1ZG9zW2VdfHxpLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8bnQuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gcltkXT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxpLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9OKGZ1bmN0aW9uKGUsbil7dmFyIGkscz1yKGUsdCksbz1zLmxlbmd0aDt3aGlsZShvLS0paT1ULmNhbGwoZSxzW29dKSxlW2ldPSEobltpXT1zW29dKX0pOmZ1bmN0aW9uKGUpe3JldHVybiByKGUsMCxuKX0pOnJ9fSxwc2V1ZG9zOntub3Q6TihmdW5jdGlvbihlKXt2YXIgdD1bXSxuPVtdLHI9YShlLnJlcGxhY2UoaiwiJDEiKSk7cmV0dXJuIHJbZF0/TihmdW5jdGlvbihlLHQsbixpKXt2YXIgcyxvPXIoZSxudWxsLGksW10pLHU9ZS5sZW5ndGg7d2hpbGUodS0tKWlmKHM9b1t1XSllW3VdPSEodFt1XT1zKX0pOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdFswXT1lLHIodCxudWxsLHMsbiksIW4ucG9wKCl9fSksaGFzOk4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBudChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOk4oZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybih0LnRleHRDb250ZW50fHx0LmlubmVyVGV4dHx8cyh0KSkuaW5kZXhPZihlKT4tMX19KSxlbmFibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITF9LGRpc2FibGVkOmZ1bmN0aW9uKGUpe3JldHVybiBlLmRpc2FibGVkPT09ITB9LGNoZWNrZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09ImlucHV0IiYmISFlLmNoZWNrZWR8fHQ9PT0ib3B0aW9uIiYmISFlLnNlbGVjdGVkfSxzZWxlY3RlZDpmdW5jdGlvbihlKXtyZXR1cm4gZS5wYXJlbnROb2RlJiZlLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCxlLnNlbGVjdGVkPT09ITB9LHBhcmVudDpmdW5jdGlvbihlKXtyZXR1cm4haS5wc2V1ZG9zLmVtcHR5KGUpfSxlbXB0eTpmdW5jdGlvbihlKXt2YXIgdDtlPWUuZmlyc3RDaGlsZDt3aGlsZShlKXtpZihlLm5vZGVOYW1lPiJAInx8KHQ9ZS5ub2RlVHlwZSk9PT0zfHx0PT09NClyZXR1cm4hMTtlPWUubmV4dFNpYmxpbmd9cmV0dXJuITB9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gWC50ZXN0KGUubm9kZU5hbWUpfSx0ZXh0OmZ1bmN0aW9uKGUpe3ZhciB0LG47cmV0dXJuIGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PSJpbnB1dCImJih0PWUudHlwZSk9PT0idGV4dCImJigobj1lLmdldEF0dHJpYnV0ZSgidHlwZSIpKT09bnVsbHx8bi50b0xvd2VyQ2FzZSgpPT09dCl9LHJhZGlvOnJ0KCJyYWRpbyIpLGNoZWNrYm94OnJ0KCJjaGVja2JveCIpLGZpbGU6cnQoImZpbGUiKSxwYXNzd29yZDpydCgicGFzc3dvcmQiKSxpbWFnZTpydCgiaW1hZ2UiKSxzdWJtaXQ6aXQoInN1Ym1pdCIpLHJlc2V0Oml0KCJyZXNldCIpLGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQ9PT0iaW5wdXQiJiZlLnR5cGU9PT0iYnV0dG9uInx8dD09PSJidXR0b24ifSxpbnB1dDpmdW5jdGlvbihlKXtyZXR1cm4gVi50ZXN0KGUubm9kZU5hbWUpfSxmb2N1czpmdW5jdGlvbihlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQ7cmV0dXJuIGU9PT10LmFjdGl2ZUVsZW1lbnQmJighdC5oYXNGb2N1c3x8dC5oYXNGb2N1cygpKSYmISEoZS50eXBlfHxlLmhyZWZ8fH5lLnRhYkluZGV4KX0sYWN0aXZlOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09ZS5vd25lckRvY3VtZW50LmFjdGl2ZUVsZW1lbnR9LGZpcnN0OnN0KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpzdChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6c3QoZnVuY3Rpb24oZSx0LG4pe3JldHVybltuPDA/bit0Om5dfSksZXZlbjpzdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLG9kZDpzdChmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0xO248dDtuKz0yKWUucHVzaChuKTtyZXR1cm4gZX0pLGx0OnN0KGZ1bmN0aW9uKGUsdCxuKXtmb3IodmFyIHI9bjwwP24rdDpuOy0tcj49MDspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6c3QoZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uPDA/bit0Om47KytyPHQ7KWUucHVzaChyKTtyZXR1cm4gZX0pfX0sZj15LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10PyhsPSEwLDApOighZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbnx8IXQuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjplLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHQpJjQpPy0xOjF9OmZ1bmN0aW9uKGUsdCl7aWYoZT09PXQpcmV0dXJuIGw9ITAsMDtpZihlLnNvdXJjZUluZGV4JiZ0LnNvdXJjZUluZGV4KXJldHVybiBlLnNvdXJjZUluZGV4LXQuc291cmNlSW5kZXg7dmFyIG4scixpPVtdLHM9W10sbz1lLnBhcmVudE5vZGUsdT10LnBhcmVudE5vZGUsYT1vO2lmKG89PT11KXJldHVybiBvdChlLHQpO2lmKCFvKXJldHVybi0xO2lmKCF1KXJldHVybiAxO3doaWxlKGEpaS51bnNoaWZ0KGEpLGE9YS5wYXJlbnROb2RlO2E9dTt3aGlsZShhKXMudW5zaGlmdChhKSxhPWEucGFyZW50Tm9kZTtuPWkubGVuZ3RoLHI9cy5sZW5ndGg7Zm9yKHZhciBmPTA7ZjxuJiZmPHI7ZisrKWlmKGlbZl0hPT1zW2ZdKXJldHVybiBvdChpW2ZdLHNbZl0pO3JldHVybiBmPT09bj9vdChlLHNbZl0sLTEpOm90KGlbZl0sdCwxKX0sWzAsMF0uc29ydChmKSxoPSFsLG50LnVuaXF1ZVNvcnQ9ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPTEsaT0wO2w9aCxlLnNvcnQoZik7aWYobCl7Zm9yKDt0PWVbcl07cisrKXQ9PT1lW3ItMV0mJihpPW4ucHVzaChyKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9LG50LmVycm9yPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sYT1udC5jb21waWxlPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPVtdLHM9QVtkXVtlKyIgIl07aWYoIXMpe3R8fCh0PXV0KGUpKSxuPXQubGVuZ3RoO3doaWxlKG4tLSlzPWh0KHRbbl0pLHNbZF0/ci5wdXNoKHMpOmkucHVzaChzKTtzPUEoZSxwdChpLHIpKX1yZXR1cm4gc30sZy5xdWVyeVNlbGVjdG9yQWxsJiZmdW5jdGlvbigpe3ZhciBlLHQ9dnQsbj0vJ3xcXC9nLHI9L1w9W1x4MjBcdFxyXG5cZl0qKFteJyJcXV0qKVtceDIwXHRcclxuXGZdKlxdL2csaT1bIjpmb2N1cyJdLHM9WyI6YWN0aXZlIl0sdT15Lm1hdGNoZXNTZWxlY3Rvcnx8eS5tb3pNYXRjaGVzU2VsZWN0b3J8fHkud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHx5Lm9NYXRjaGVzU2VsZWN0b3J8fHkubXNNYXRjaGVzU2VsZWN0b3I7SyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHNlbGVjdD48b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PiIsZS5xdWVyeVNlbGVjdG9yQWxsKCJbc2VsZWN0ZWRdIikubGVuZ3RofHxpLnB1c2goIlxcWyIrTysiKig/OmNoZWNrZWR8ZGlzYWJsZWR8aXNtYXB8bXVsdGlwbGV8cmVhZG9ubHl8c2VsZWN0ZWR8dmFsdWUpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8aS5wdXNoKCI6Y2hlY2tlZCIpfSksSyhmdW5jdGlvbihlKXtlLmlubmVySFRNTD0iPHAgdGVzdD0nJz48L3A+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0ZXN0Xj0nJ10iKS5sZW5ndGgmJmkucHVzaCgiWypeJF09IitPKyIqKD86XCJcInwnJykiKSxlLmlubmVySFRNTD0iPGlucHV0IHR5cGU9J2hpZGRlbicvPiIsZS5xdWVyeVNlbGVjdG9yQWxsKCI6ZW5hYmxlZCIpLmxlbmd0aHx8aS5wdXNoKCI6ZW5hYmxlZCIsIjpkaXNhYmxlZCIpfSksaT1uZXcgUmVnRXhwKGkuam9pbigifCIpKSx2dD1mdW5jdGlvbihlLHIscyxvLHUpe2lmKCFvJiYhdSYmIWkudGVzdChlKSl7dmFyIGEsZixsPSEwLGM9ZCxoPXIscD1yLm5vZGVUeXBlPT09OSYmZTtpZihyLm5vZGVUeXBlPT09MSYmci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im9iamVjdCIpe2E9dXQoZSksKGw9ci5nZXRBdHRyaWJ1dGUoImlkIikpP2M9bC5yZXBsYWNlKG4sIlxcJCYiKTpyLnNldEF0dHJpYnV0ZSgiaWQiLGMpLGM9IltpZD0nIitjKyInXSAiLGY9YS5sZW5ndGg7d2hpbGUoZi0tKWFbZl09YythW2ZdLmpvaW4oIiIpO2g9ei50ZXN0KGUpJiZyLnBhcmVudE5vZGV8fHIscD1hLmpvaW4oIiwiKX1pZihwKXRyeXtyZXR1cm4gUy5hcHBseShzLHguY2FsbChoLnF1ZXJ5U2VsZWN0b3JBbGwocCksMCkpLHN9Y2F0Y2godil7fWZpbmFsbHl7bHx8ci5yZW1vdmVBdHRyaWJ1dGUoImlkIil9fXJldHVybiB0KGUscixzLG8sdSl9LHUmJihLKGZ1bmN0aW9uKHQpe2U9dS5jYWxsKHQsImRpdiIpO3RyeXt1LmNhbGwodCwiW3Rlc3QhPScnXTpzaXp6bGUiKSxzLnB1c2goIiE9IixIKX1jYXRjaChuKXt9fSkscz1uZXcgUmVnRXhwKHMuam9pbigifCIpKSxudC5tYXRjaGVzU2VsZWN0b3I9ZnVuY3Rpb24odCxuKXtuPW4ucmVwbGFjZShyLCI9JyQxJ10iKTtpZighbyh0KSYmIXMudGVzdChuKSYmIWkudGVzdChuKSl0cnl7dmFyIGE9dS5jYWxsKHQsbik7aWYoYXx8ZXx8dC5kb2N1bWVudCYmdC5kb2N1bWVudC5ub2RlVHlwZSE9PTExKXJldHVybiBhfWNhdGNoKGYpe31yZXR1cm4gbnQobixudWxsLG51bGwsW3RdKS5sZW5ndGg+MH0pfSgpLGkucHNldWRvcy5udGg9aS5wc2V1ZG9zLmVxLGkuZmlsdGVycz1tdC5wcm90b3R5cGU9aS5wc2V1ZG9zLGkuc2V0RmlsdGVycz1uZXcgbXQsbnQuYXR0cj12LmF0dHIsdi5maW5kPW50LHYuZXhwcj1udC5zZWxlY3RvcnMsdi5leHByWyI6Il09di5leHByLnBzZXVkb3Msdi51bmlxdWU9bnQudW5pcXVlU29ydCx2LnRleHQ9bnQuZ2V0VGV4dCx2LmlzWE1MRG9jPW50LmlzWE1MLHYuY29udGFpbnM9bnQuY29udGFpbnN9KGUpO3ZhciBudD0vVW50aWwkLyxydD0vXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxpdD0vXi5bXjojXFtcLixdKiQvLHN0PXYuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsb3Q9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07di5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyLGkscyxvLHU9dGhpcztpZih0eXBlb2YgZSE9InN0cmluZyIpcmV0dXJuIHYoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MCxuPXUubGVuZ3RoO3Q8bjt0KyspaWYodi5jb250YWlucyh1W3RdLHRoaXMpKXJldHVybiEwfSk7bz10aGlzLnB1c2hTdGFjaygiIiwiZmluZCIsZSk7Zm9yKHQ9MCxuPXRoaXMubGVuZ3RoO3Q8bjt0Kyspe3I9by5sZW5ndGgsdi5maW5kKGUsdGhpc1t0XSxvKTtpZih0PjApZm9yKGk9cjtpPG8ubGVuZ3RoO2krKylmb3Iocz0wO3M8cjtzKyspaWYob1tzXT09PW9baV0pe28uc3BsaWNlKGktLSwxKTticmVha319cmV0dXJuIG99LGhhczpmdW5jdGlvbihlKXt2YXIgdCxuPXYoZSx0aGlzKSxyPW4ubGVuZ3RoO3JldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbigpe2Zvcih0PTA7dDxyO3QrKylpZih2LmNvbnRhaW5zKHRoaXMsblt0XSkpcmV0dXJuITB9KX0sbm90OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayhmdCh0aGlzLGUsITEpLCJub3QiLGUpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZSwhMCksImZpbHRlciIsZSl9LGlzOmZ1bmN0aW9uKGUpe3JldHVybiEhZSYmKHR5cGVvZiBlPT0ic3RyaW5nIj9zdC50ZXN0KGUpP3YoZSx0aGlzLmNvbnRleHQpLmluZGV4KHRoaXNbMF0pPj0wOnYuZmlsdGVyKGUsdGhpcykubGVuZ3RoPjA6dGhpcy5maWx0ZXIoZSkubGVuZ3RoPjApfSxjbG9zZXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wLGk9dGhpcy5sZW5ndGgscz1bXSxvPXN0LnRlc3QoZSl8fHR5cGVvZiBlIT0ic3RyaW5nIj92KGUsdHx8dGhpcy5jb250ZXh0KTowO2Zvcig7cjxpO3IrKyl7bj10aGlzW3JdO3doaWxlKG4mJm4ub3duZXJEb2N1bWVudCYmbiE9PXQmJm4ubm9kZVR5cGUhPT0xMSl7aWYobz9vLmluZGV4KG4pPi0xOnYuZmluZC5tYXRjaGVzU2VsZWN0b3IobixlKSl7cy5wdXNoKG4pO2JyZWFrfW49bi5wYXJlbnROb2RlfX1yZXR1cm4gcz1zLmxlbmd0aD4xP3YudW5pcXVlKHMpOnMsdGhpcy5wdXNoU3RhY2socywiY2xvc2VzdCIsZSl9LGluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlP3R5cGVvZiBlPT0ic3RyaW5nIj92LmluQXJyYXkodGhpc1swXSx2KGUpKTp2LmluQXJyYXkoZS5qcXVlcnk/ZVswXTplLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLnByZXZBbGwoKS5sZW5ndGg6LTF9LGFkZDpmdW5jdGlvbihlLHQpe3ZhciBuPXR5cGVvZiBlPT0ic3RyaW5nIj92KGUsdCk6di5tYWtlQXJyYXkoZSYmZS5ub2RlVHlwZT9bZV06ZSkscj12Lm1lcmdlKHRoaXMuZ2V0KCksbik7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHV0KG5bMF0pfHx1dChyWzBdKT9yOnYudW5pcXVlKHIpKX0sYWRkQmFjazpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hZGQoZT09bnVsbD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcihlKSl9fSksdi5mbi5hbmRTZWxmPXYuZm4uYWRkQmFjayx2LmVhY2goe3BhcmVudDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQubm9kZVR5cGUhPT0xMT90Om51bGx9LHBhcmVudHM6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZGlyKGUsInBhcmVudE5vZGUiKX0scGFyZW50c1VudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5kaXIoZSwicGFyZW50Tm9kZSIsbil9LG5leHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGF0KGUsIm5leHRTaWJsaW5nIil9LHByZXY6ZnVuY3Rpb24oZSl7cmV0dXJuIGF0KGUsInByZXZpb3VzU2libGluZyIpfSxuZXh0QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJuZXh0U2libGluZyIpfSxwcmV2QWxsOmZ1bmN0aW9uKGUpe3JldHVybiB2LmRpcihlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dFVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdi5kaXIoZSwibmV4dFNpYmxpbmciLG4pfSxwcmV2VW50aWw6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB2LmRpcihlLCJwcmV2aW91c1NpYmxpbmciLG4pfSxzaWJsaW5nczpmdW5jdGlvbihlKXtyZXR1cm4gdi5zaWJsaW5nKChlLnBhcmVudE5vZGV8fHt9KS5maXJzdENoaWxkLGUpfSxjaGlsZHJlbjpmdW5jdGlvbihlKXtyZXR1cm4gdi5zaWJsaW5nKGUuZmlyc3RDaGlsZCl9LGNvbnRlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB2Lm5vZGVOYW1lKGUsImlmcmFtZSIpP2UuY29udGVudERvY3VtZW50fHxlLmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQ6di5tZXJnZShbXSxlLmNoaWxkTm9kZXMpfX0sZnVuY3Rpb24oZSx0KXt2LmZuW2VdPWZ1bmN0aW9uKG4scil7dmFyIGk9di5tYXAodGhpcyx0LG4pO3JldHVybiBudC50ZXN0KGUpfHwocj1uKSxyJiZ0eXBlb2Ygcj09InN0cmluZyImJihpPXYuZmlsdGVyKHIsaSkpLGk9dGhpcy5sZW5ndGg+MSYmIW90W2VdP3YudW5pcXVlKGkpOmksdGhpcy5sZW5ndGg+MSYmcnQudGVzdChlKSYmKGk9aS5yZXZlcnNlKCkpLHRoaXMucHVzaFN0YWNrKGksZSxsLmNhbGwoYXJndW1lbnRzKS5qb2luKCIsIikpfX0pLHYuZXh0ZW5kKHtmaWx0ZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSx0Lmxlbmd0aD09PTE/di5maW5kLm1hdGNoZXNTZWxlY3Rvcih0WzBdLGUpP1t0WzBdXTpbXTp2LmZpbmQubWF0Y2hlcyhlLHQpfSxkaXI6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPVtdLHM9ZVtuXTt3aGlsZShzJiZzLm5vZGVUeXBlIT09OSYmKHI9PT10fHxzLm5vZGVUeXBlIT09MXx8IXYocykuaXMocikpKXMubm9kZVR5cGU9PT0xJiZpLnB1c2gocykscz1zW25dO3JldHVybiBpfSxzaWJsaW5nOmZ1bmN0aW9uKGUsdCl7dmFyIG49W107Zm9yKDtlO2U9ZS5uZXh0U2libGluZyllLm5vZGVUeXBlPT09MSYmZSE9PXQmJm4ucHVzaChlKTtyZXR1cm4gbn19KTt2YXIgY3Q9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGh0PS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2cscHQ9L15ccysvLGR0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksdnQ9LzwoW1x3Ol0rKS8sbXQ9Lzx0Ym9keS9pLGd0PS88fCYjP1x3KzsvLHl0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksYnQ9LzwoPzpzY3JpcHR8b2JqZWN0fGVtYmVkfG9wdGlvbnxzdHlsZSkvaSx3dD1uZXcgUmVnRXhwKCI8KD86IitjdCsiKVtcXHMvPl0iLCJpIiksRXQ9L14oPzpjaGVja2JveHxyYWRpbykkLyxTdD0vY2hlY2tlZFxzKig/OltePV18PVxzKi5jaGVja2VkLikvaSx4dD0vXC8oamF2YXxlY21hKXNjcmlwdC9pLFR0PS9eXHMqPCEoPzpcW0NEQVRBXFt8XC1cLSl8W1xdXC1dezJ9PlxzKiQvZyxOdD17b3B0aW9uOlsxLCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+IiwiPC9zZWxlY3Q+Il0sbGVnZW5kOlsxLCI8ZmllbGRzZXQ+IiwiPC9maWVsZHNldD4iXSx0aGVhZDpbMSwiPHRhYmxlPiIsIjwvdGFibGU+Il0sdHI6WzIsIjx0YWJsZT48dGJvZHk+IiwiPC90Ym9keT48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0sX2RlZmF1bHQ6WzAsIiIsIiJdfSxDdD1sdChpKSxrdD1DdC5hcHBlbmRDaGlsZChpLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtOdC5vcHRncm91cD1OdC5vcHRpb24sTnQudGJvZHk9TnQudGZvb3Q9TnQuY29sZ3JvdXA9TnQuY2FwdGlvbj1OdC50aGVhZCxOdC50aD1OdC50ZCx2LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZXx8KE50Ll9kZWZhdWx0PVsxLCJYPGRpdj4iLCI8L2Rpdj4iXSksdi5mbi5leHRlbmQoe3RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10P3YudGV4dCh0aGlzKTp0aGlzLmVtcHR5KCkuYXBwZW5kKCh0aGlzWzBdJiZ0aGlzWzBdLm93bmVyRG9jdW1lbnR8fGkpLmNyZWF0ZVRleHROb2RlKGUpKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSx3cmFwQWxsOmZ1bmN0aW9uKGUpe2lmKHYuaXNGdW5jdGlvbihlKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3YodGhpcykud3JhcEFsbChlLmNhbGwodGhpcyx0KSl9KTtpZih0aGlzWzBdKXt2YXIgdD12KGUsdGhpc1swXS5vd25lckRvY3VtZW50KS5lcSgwKS5jbG9uZSghMCk7dGhpc1swXS5wYXJlbnROb2RlJiZ0Lmluc2VydEJlZm9yZSh0aGlzWzBdKSx0Lm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXM7d2hpbGUoZS5maXJzdENoaWxkJiZlLmZpcnN0Q2hpbGQubm9kZVR5cGU9PT0xKWU9ZS5maXJzdENoaWxkO3JldHVybiBlfSkuYXBwZW5kKHRoaXMpfXJldHVybiB0aGlzfSx3cmFwSW5uZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuaXNGdW5jdGlvbihlKT90aGlzLmVhY2goZnVuY3Rpb24odCl7dih0aGlzKS53cmFwSW5uZXIoZS5jYWxsKHRoaXMsdCkpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dih0aGlzKSxuPXQuY29udGVudHMoKTtuLmxlbmd0aD9uLndyYXBBbGwoZSk6dC5hcHBlbmQoZSl9KX0sd3JhcDpmdW5jdGlvbihlKXt2YXIgdD12LmlzRnVuY3Rpb24oZSk7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihuKXt2KHRoaXMpLndyYXBBbGwodD9lLmNhbGwodGhpcyxuKTplKX0pfSx1bndyYXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wYXJlbnQoKS5lYWNoKGZ1bmN0aW9uKCl7di5ub2RlTmFtZSh0aGlzLCJib2R5Iil8fHYodGhpcykucmVwbGFjZVdpdGgodGhpcy5jaGlsZE5vZGVzKX0pLmVuZCgpfSxhcHBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oZSl7KHRoaXMubm9kZVR5cGU9PT0xfHx0aGlzLm5vZGVUeXBlPT09MTEpJiZ0aGlzLmFwcGVuZENoaWxkKGUpfSl9LHByZXBlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21NYW5pcChhcmd1bWVudHMsITAsZnVuY3Rpb24oZSl7KHRoaXMubm9kZVR5cGU9PT0xfHx0aGlzLm5vZGVUeXBlPT09MTEpJiZ0aGlzLmluc2VydEJlZm9yZShlLHRoaXMuZmlyc3RDaGlsZCl9KX0sYmVmb3JlOmZ1bmN0aW9uKCl7aWYoIXV0KHRoaXNbMF0pKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgZT12LmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWVyZ2UoZSx0aGlzKSwiYmVmb3JlIix0aGlzLnNlbGVjdG9yKX19LGFmdGVyOmZ1bmN0aW9uKCl7aWYoIXV0KHRoaXNbMF0pKXJldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cywhMSxmdW5jdGlvbihlKXt0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGUsdGhpcy5uZXh0U2libGluZyl9KTtpZihhcmd1bWVudHMubGVuZ3RoKXt2YXIgZT12LmNsZWFuKGFyZ3VtZW50cyk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKHYubWVyZ2UodGhpcyxlKSwiYWZ0ZXIiLHRoaXMuc2VsZWN0b3IpfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCl7dmFyIG4scj0wO2Zvcig7KG49dGhpc1tyXSkhPW51bGw7cisrKWlmKCFlfHx2LmZpbHRlcihlLFtuXSkubGVuZ3RoKSF0JiZuLm5vZGVUeXBlPT09MSYmKHYuY2xlYW5EYXRhKG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksdi5jbGVhbkRhdGEoW25dKSksbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobik7cmV0dXJuIHRoaXN9LGVtcHR5OmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Zvcig7KGU9dGhpc1t0XSkhPW51bGw7dCsrKXtlLm5vZGVUeXBlPT09MSYmdi5jbGVhbkRhdGEoZS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiKiIpKTt3aGlsZShlLmZpcnN0Q2hpbGQpZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpfXJldHVybiB0aGlzfSxjbG9uZTpmdW5jdGlvbihlLHQpe3JldHVybiBlPWU9PW51bGw/ITE6ZSx0PXQ9PW51bGw/ZTp0LHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHYuY2xvbmUodGhpcyxlLHQpfSl9LGh0bWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSl7dmFyIG49dGhpc1swXXx8e30scj0wLGk9dGhpcy5sZW5ndGg7aWYoZT09PXQpcmV0dXJuIG4ubm9kZVR5cGU9PT0xP24uaW5uZXJIVE1MLnJlcGxhY2UoaHQsIiIpOnQ7aWYodHlwZW9mIGU9PSJzdHJpbmciJiYheXQudGVzdChlKSYmKHYuc3VwcG9ydC5odG1sU2VyaWFsaXplfHwhd3QudGVzdChlKSkmJih2LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2V8fCFwdC50ZXN0KGUpKSYmIU50Wyh2dC5leGVjKGUpfHxbIiIsIiJdKVsxXS50b0xvd2VyQ2FzZSgpXSl7ZT1lLnJlcGxhY2UoZHQsIjwkMT48LyQyPiIpO3RyeXtmb3IoO3I8aTtyKyspbj10aGlzW3JdfHx7fSxuLm5vZGVUeXBlPT09MSYmKHYuY2xlYW5EYXRhKG4uZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKSksbi5pbm5lckhUTUw9ZSk7bj0wfWNhdGNoKHMpe319biYmdGhpcy5lbXB0eSgpLmFwcGVuZChlKX0sbnVsbCxlLGFyZ3VtZW50cy5sZW5ndGgpfSxyZXBsYWNlV2l0aDpmdW5jdGlvbihlKXtyZXR1cm4gdXQodGhpc1swXSk/dGhpcy5sZW5ndGg/dGhpcy5wdXNoU3RhY2sodih2LmlzRnVuY3Rpb24oZSk/ZSgpOmUpLCJyZXBsYWNlV2l0aCIsZSk6dGhpczp2LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3ZhciBuPXYodGhpcykscj1uLmh0bWwoKTtuLnJlcGxhY2VXaXRoKGUuY2FsbCh0aGlzLHQscikpfSk6KHR5cGVvZiBlIT0ic3RyaW5nIiYmKGU9dihlKS5kZXRhY2goKSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5uZXh0U2libGluZyxuPXRoaXMucGFyZW50Tm9kZTt2KHRoaXMpLnJlbW92ZSgpLHQ/dih0KS5iZWZvcmUoZSk6dihuKS5hcHBlbmQoZSl9KSl9LGRldGFjaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZW1vdmUoZSwhMCl9LGRvbU1hbmlwOmZ1bmN0aW9uKGUsbixyKXtlPVtdLmNvbmNhdC5hcHBseShbXSxlKTt2YXIgaSxzLG8sdSxhPTAsZj1lWzBdLGw9W10sYz10aGlzLmxlbmd0aDtpZighdi5zdXBwb3J0LmNoZWNrQ2xvbmUmJmM+MSYmdHlwZW9mIGY9PSJzdHJpbmciJiZTdC50ZXN0KGYpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt2KHRoaXMpLmRvbU1hbmlwKGUsbixyKX0pO2lmKHYuaXNGdW5jdGlvbihmKSlyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKGkpe3ZhciBzPXYodGhpcyk7ZVswXT1mLmNhbGwodGhpcyxpLG4/cy5odG1sKCk6dCkscy5kb21NYW5pcChlLG4scil9KTtpZih0aGlzWzBdKXtpPXYuYnVpbGRGcmFnbWVudChlLHRoaXMsbCksbz1pLmZyYWdtZW50LHM9by5maXJzdENoaWxkLG8uY2hpbGROb2Rlcy5sZW5ndGg9PT0xJiYobz1zKTtpZihzKXtuPW4mJnYubm9kZU5hbWUocywidHIiKTtmb3IodT1pLmNhY2hlYWJsZXx8Yy0xO2E8YzthKyspci5jYWxsKG4mJnYubm9kZU5hbWUodGhpc1thXSwidGFibGUiKT9MdCh0aGlzW2FdLCJ0Ym9keSIpOnRoaXNbYV0sYT09PXU/bzp2LmNsb25lKG8sITAsITApKX1vPXM9bnVsbCxsLmxlbmd0aCYmdi5lYWNoKGwsZnVuY3Rpb24oZSx0KXt0LnNyYz92LmFqYXg/di5hamF4KHt1cmw6dC5zcmMsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KTp2LmVycm9yKCJubyBhamF4Iik6di5nbG9iYWxFdmFsKCh0LnRleHR8fHQudGV4dENvbnRlbnR8fHQuaW5uZXJIVE1MfHwiIikucmVwbGFjZShUdCwiIikpLHQucGFyZW50Tm9kZSYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfSl9cmV0dXJuIHRoaXN9fSksdi5idWlsZEZyYWdtZW50PWZ1bmN0aW9uKGUsbixyKXt2YXIgcyxvLHUsYT1lWzBdO3JldHVybiBuPW58fGksbj0hbi5ub2RlVHlwZSYmblswXXx8bixuPW4ub3duZXJEb2N1bWVudHx8bixlLmxlbmd0aD09PTEmJnR5cGVvZiBhPT0ic3RyaW5nIiYmYS5sZW5ndGg8NTEyJiZuPT09aSYmYS5jaGFyQXQoMCk9PT0iPCImJiFidC50ZXN0KGEpJiYodi5zdXBwb3J0LmNoZWNrQ2xvbmV8fCFTdC50ZXN0KGEpKSYmKHYuc3VwcG9ydC5odG1sNUNsb25lfHwhd3QudGVzdChhKSkmJihvPSEwLHM9di5mcmFnbWVudHNbYV0sdT1zIT09dCksc3x8KHM9bi5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksdi5jbGVhbihlLG4scyxyKSxvJiYodi5mcmFnbWVudHNbYV09dSYmcykpLHtmcmFnbWVudDpzLGNhY2hlYWJsZTpvfX0sdi5mcmFnbWVudHM9e30sdi5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt2LmZuW2VdPWZ1bmN0aW9uKG4pe3ZhciByLGk9MCxzPVtdLG89dihuKSx1PW8ubGVuZ3RoLGE9dGhpcy5sZW5ndGg9PT0xJiZ0aGlzWzBdLnBhcmVudE5vZGU7aWYoKGE9PW51bGx8fGEmJmEubm9kZVR5cGU9PT0xMSYmYS5jaGlsZE5vZGVzLmxlbmd0aD09PTEpJiZ1PT09MSlyZXR1cm4gb1t0XSh0aGlzWzBdKSx0aGlzO2Zvcig7aTx1O2krKylyPShpPjA/dGhpcy5jbG9uZSghMCk6dGhpcykuZ2V0KCksdihvW2ldKVt0XShyKSxzPXMuY29uY2F0KHIpO3JldHVybiB0aGlzLnB1c2hTdGFjayhzLGUsby5zZWxlY3Rvcil9fSksdi5leHRlbmQoe2Nsb25lOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHMsbzt2LnN1cHBvcnQuaHRtbDVDbG9uZXx8di5pc1hNTERvYyhlKXx8IXd0LnRlc3QoIjwiK2Uubm9kZU5hbWUrIj4iKT9vPWUuY2xvbmVOb2RlKCEwKTooa3QuaW5uZXJIVE1MPWUub3V0ZXJIVE1MLGt0LnJlbW92ZUNoaWxkKG89a3QuZmlyc3RDaGlsZCkpO2lmKCghdi5zdXBwb3J0Lm5vQ2xvbmVFdmVudHx8IXYuc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCkmJihlLm5vZGVUeXBlPT09MXx8ZS5ub2RlVHlwZT09PTExKSYmIXYuaXNYTUxEb2MoZSkpe090KGUsbykscj1NdChlKSxpPU10KG8pO2ZvcihzPTA7cltzXTsrK3MpaVtzXSYmT3QocltzXSxpW3NdKX1pZih0KXtBdChlLG8pO2lmKG4pe3I9TXQoZSksaT1NdChvKTtmb3Iocz0wO3Jbc107KytzKUF0KHJbc10saVtzXSl9fXJldHVybiByPWk9bnVsbCxvfSxjbGVhbjpmdW5jdGlvbihlLHQsbixyKXt2YXIgcyxvLHUsYSxmLGwsYyxoLHAsZCxtLGcseT10PT09aSYmQ3QsYj1bXTtpZighdHx8dHlwZW9mIHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudD09InVuZGVmaW5lZCIpdD1pO2ZvcihzPTA7KHU9ZVtzXSkhPW51bGw7cysrKXt0eXBlb2YgdT09Im51bWJlciImJih1Kz0iIik7aWYoIXUpY29udGludWU7aWYodHlwZW9mIHU9PSJzdHJpbmciKWlmKCFndC50ZXN0KHUpKXU9dC5jcmVhdGVUZXh0Tm9kZSh1KTtlbHNle3k9eXx8bHQodCksYz10LmNyZWF0ZUVsZW1lbnQoImRpdiIpLHkuYXBwZW5kQ2hpbGQoYyksdT11LnJlcGxhY2UoZHQsIjwkMT48LyQyPiIpLGE9KHZ0LmV4ZWModSl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksZj1OdFthXXx8TnQuX2RlZmF1bHQsbD1mWzBdLGMuaW5uZXJIVE1MPWZbMV0rdStmWzJdO3doaWxlKGwtLSljPWMubGFzdENoaWxkO2lmKCF2LnN1cHBvcnQudGJvZHkpe2g9bXQudGVzdCh1KSxwPWE9PT0idGFibGUiJiYhaD9jLmZpcnN0Q2hpbGQmJmMuZmlyc3RDaGlsZC5jaGlsZE5vZGVzOmZbMV09PT0iPHRhYmxlPiImJiFoP2MuY2hpbGROb2RlczpbXTtmb3Iobz1wLmxlbmd0aC0xO28+PTA7LS1vKXYubm9kZU5hbWUocFtvXSwidGJvZHkiKSYmIXBbb10uY2hpbGROb2Rlcy5sZW5ndGgmJnBbb10ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChwW29dKX0hdi5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZwdC50ZXN0KHUpJiZjLmluc2VydEJlZm9yZSh0LmNyZWF0ZVRleHROb2RlKHB0LmV4ZWModSlbMF0pLGMuZmlyc3RDaGlsZCksdT1jLmNoaWxkTm9kZXMsYy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGMpfXUubm9kZVR5cGU/Yi5wdXNoKHUpOnYubWVyZ2UoYix1KX1jJiYodT1jPXk9bnVsbCk7aWYoIXYuc3VwcG9ydC5hcHBlbmRDaGVja2VkKWZvcihzPTA7KHU9YltzXSkhPW51bGw7cysrKXYubm9kZU5hbWUodSwiaW5wdXQiKT9fdCh1KTp0eXBlb2YgdS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJnYuZ3JlcCh1LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpLF90KTtpZihuKXttPWZ1bmN0aW9uKGUpe2lmKCFlLnR5cGV8fHh0LnRlc3QoZS50eXBlKSlyZXR1cm4gcj9yLnB1c2goZS5wYXJlbnROb2RlP2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTplKTpuLmFwcGVuZENoaWxkKGUpfTtmb3Iocz0wOyh1PWJbc10pIT1udWxsO3MrKylpZighdi5ub2RlTmFtZSh1LCJzY3JpcHQiKXx8IW0odSkpbi5hcHBlbmRDaGlsZCh1KSx0eXBlb2YgdS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9InVuZGVmaW5lZCImJihnPXYuZ3JlcCh2Lm1lcmdlKFtdLHUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpKSxtKSxiLnNwbGljZS5hcHBseShiLFtzKzEsMF0uY29uY2F0KGcpKSxzKz1nLmxlbmd0aCl9cmV0dXJuIGJ9LGNsZWFuRGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89MCx1PXYuZXhwYW5kbyxhPXYuY2FjaGUsZj12LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyxsPXYuZXZlbnQuc3BlY2lhbDtmb3IoOyhpPWVbb10pIT1udWxsO28rKylpZih0fHx2LmFjY2VwdERhdGEoaSkpe3I9aVt1XSxuPXImJmFbcl07aWYobil7aWYobi5ldmVudHMpZm9yKHMgaW4gbi5ldmVudHMpbFtzXT92LmV2ZW50LnJlbW92ZShpLHMpOnYucmVtb3ZlRXZlbnQoaSxzLG4uaGFuZGxlKTthW3JdJiYoZGVsZXRlIGFbcl0sZj9kZWxldGUgaVt1XTppLnJlbW92ZUF0dHJpYnV0ZT9pLnJlbW92ZUF0dHJpYnV0ZSh1KTppW3VdPW51bGwsdi5kZWxldGVkSWRzLnB1c2gocikpfX19fSksZnVuY3Rpb24oKXt2YXIgZSx0O3YudWFNYXRjaD1mdW5jdGlvbihlKXtlPWUudG9Mb3dlckNhc2UoKTt2YXIgdD0vKGNocm9tZSlbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKHdlYmtpdClbIFwvXShbXHcuXSspLy5leGVjKGUpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbnwpWyBcL10oW1x3Ll0rKS8uZXhlYyhlKXx8Lyhtc2llKSAoW1x3Ll0rKS8uZXhlYyhlKXx8ZS5pbmRleE9mKCJjb21wYXRpYmxlIik8MCYmLyhtb3ppbGxhKSg/Oi4qPyBydjooW1x3Ll0rKXwpLy5leGVjKGUpfHxbXTtyZXR1cm57YnJvd3Nlcjp0WzFdfHwiIix2ZXJzaW9uOnRbMl18fCIwIn19LGU9di51YU1hdGNoKG8udXNlckFnZW50KSx0PXt9LGUuYnJvd3NlciYmKHRbZS5icm93c2VyXT0hMCx0LnZlcnNpb249ZS52ZXJzaW9uKSx0LmNocm9tZT90LndlYmtpdD0hMDp0LndlYmtpdCYmKHQuc2FmYXJpPSEwKSx2LmJyb3dzZXI9dCx2LnN1Yj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxuKXtyZXR1cm4gbmV3IGUuZm4uaW5pdCh0LG4pfXYuZXh0ZW5kKCEwLGUsdGhpcyksZS5zdXBlcmNsYXNzPXRoaXMsZS5mbj1lLnByb3RvdHlwZT10aGlzKCksZS5mbi5jb25zdHJ1Y3Rvcj1lLGUuc3ViPXRoaXMuc3ViLGUuZm4uaW5pdD1mdW5jdGlvbihyLGkpe3JldHVybiBpJiZpIGluc3RhbmNlb2YgdiYmIShpIGluc3RhbmNlb2YgZSkmJihpPWUoaSkpLHYuZm4uaW5pdC5jYWxsKHRoaXMscixpLHQpfSxlLmZuLmluaXQucHJvdG90eXBlPWUuZm47dmFyIHQ9ZShpKTtyZXR1cm4gZX19KCk7dmFyIER0LFB0LEh0LEJ0PS9hbHBoYVwoW14pXSpcKS9pLGp0PS9vcGFjaXR5PShbXildKikvLEZ0PS9eKHRvcHxyaWdodHxib3R0b218bGVmdCkkLyxJdD0vXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8scXQ9L15tYXJnaW4vLFJ0PW5ldyBSZWdFeHAoIl4oIittKyIpKC4qKSQiLCJpIiksVXQ9bmV3IFJlZ0V4cCgiXigiK20rIikoPyFweClbYS16JV0rJCIsImkiKSx6dD1uZXcgUmVnRXhwKCJeKFstK10pPSgiK20rIikiLCJpIiksV3Q9e0JPRFk6ImJsb2NrIn0sWHQ9e3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToiaGlkZGVuIixkaXNwbGF5OiJibG9jayJ9LFZ0PXtsZXR0ZXJTcGFjaW5nOjAsZm9udFdlaWdodDo0MDB9LCR0PVsiVG9wIiwiUmlnaHQiLCJCb3R0b20iLCJMZWZ0Il0sSnQ9WyJXZWJraXQiLCJPIiwiTW96IiwibXMiXSxLdD12LmZuLnRvZ2dsZTt2LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3JldHVybiByIT09dD92LnN0eWxlKGUsbixyKTp2LmNzcyhlLG4pfSxlLG4sYXJndW1lbnRzLmxlbmd0aD4xKX0sc2hvdzpmdW5jdGlvbigpe3JldHVybiBZdCh0aGlzLCEwKX0saGlkZTpmdW5jdGlvbigpe3JldHVybiBZdCh0aGlzKX0sdG9nZ2xlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dHlwZW9mIGU9PSJib29sZWFuIjtyZXR1cm4gdi5pc0Z1bmN0aW9uKGUpJiZ2LmlzRnVuY3Rpb24odCk/S3QuYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuZWFjaChmdW5jdGlvbigpeyhuP2U6R3QodGhpcykpP3YodGhpcykuc2hvdygpOnYodGhpcykuaGlkZSgpfSl9fSksdi5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1EdChlLCJvcGFjaXR5Iik7cmV0dXJuIG49PT0iIj8iMSI6bn19fX0sY3NzTnVtYmVyOntmaWxsT3BhY2l0eTohMCxmb250V2VpZ2h0OiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcnBoYW5zOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMH0sY3NzUHJvcHM6eyJmbG9hdCI6di5zdXBwb3J0LmNzc0Zsb2F0PyJjc3NGbG9hdCI6InN0eWxlRmxvYXQifSxzdHlsZTpmdW5jdGlvbihlLG4scixpKXtpZighZXx8ZS5ub2RlVHlwZT09PTN8fGUubm9kZVR5cGU9PT04fHwhZS5zdHlsZSlyZXR1cm47dmFyIHMsbyx1LGE9di5jYW1lbENhc2UobiksZj1lLnN0eWxlO249di5jc3NQcm9wc1thXXx8KHYuY3NzUHJvcHNbYV09UXQoZixhKSksdT12LmNzc0hvb2tzW25dfHx2LmNzc0hvb2tzW2FdO2lmKHI9PT10KXJldHVybiB1JiYiZ2V0ImluIHUmJihzPXUuZ2V0KGUsITEsaSkpIT09dD9zOmZbbl07bz10eXBlb2YgcixvPT09InN0cmluZyImJihzPXp0LmV4ZWMocikpJiYocj0oc1sxXSsxKSpzWzJdK3BhcnNlRmxvYXQodi5jc3MoZSxuKSksbz0ibnVtYmVyIik7aWYocj09bnVsbHx8bz09PSJudW1iZXIiJiZpc05hTihyKSlyZXR1cm47bz09PSJudW1iZXIiJiYhdi5jc3NOdW1iZXJbYV0mJihyKz0icHgiKTtpZighdXx8ISgic2V0ImluIHUpfHwocj11LnNldChlLHIsaSkpIT09dCl0cnl7ZltuXT1yfWNhdGNoKGwpe319LGNzczpmdW5jdGlvbihlLG4scixpKXt2YXIgcyxvLHUsYT12LmNhbWVsQ2FzZShuKTtyZXR1cm4gbj12LmNzc1Byb3BzW2FdfHwodi5jc3NQcm9wc1thXT1RdChlLnN0eWxlLGEpKSx1PXYuY3NzSG9va3Nbbl18fHYuY3NzSG9va3NbYV0sdSYmImdldCJpbiB1JiYocz11LmdldChlLCEwLGkpKSxzPT09dCYmKHM9RHQoZSxuKSkscz09PSJub3JtYWwiJiZuIGluIFZ0JiYocz1WdFtuXSkscnx8aSE9PXQ/KG89cGFyc2VGbG9hdChzKSxyfHx2LmlzTnVtZXJpYyhvKT9vfHwwOnMpOnN9LHN3YXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscz17fTtmb3IoaSBpbiB0KXNbaV09ZS5zdHlsZVtpXSxlLnN0eWxlW2ldPXRbaV07cj1uLmNhbGwoZSk7Zm9yKGkgaW4gdCllLnN0eWxlW2ldPXNbaV07cmV0dXJuIHJ9fSksZS5nZXRDb21wdXRlZFN0eWxlP0R0PWZ1bmN0aW9uKHQsbil7dmFyIHIsaSxzLG8sdT1lLmdldENvbXB1dGVkU3R5bGUodCxudWxsKSxhPXQuc3R5bGU7cmV0dXJuIHUmJihyPXUuZ2V0UHJvcGVydHlWYWx1ZShuKXx8dVtuXSxyPT09IiImJiF2LmNvbnRhaW5zKHQub3duZXJEb2N1bWVudCx0KSYmKHI9di5zdHlsZSh0LG4pKSxVdC50ZXN0KHIpJiZxdC50ZXN0KG4pJiYoaT1hLndpZHRoLHM9YS5taW5XaWR0aCxvPWEubWF4V2lkdGgsYS5taW5XaWR0aD1hLm1heFdpZHRoPWEud2lkdGg9cixyPXUud2lkdGgsYS53aWR0aD1pLGEubWluV2lkdGg9cyxhLm1heFdpZHRoPW8pKSxyfTppLmRvY3VtZW50RWxlbWVudC5jdXJyZW50U3R5bGUmJihEdD1mdW5jdGlvbihlLHQpe3ZhciBuLHIsaT1lLmN1cnJlbnRTdHlsZSYmZS5jdXJyZW50U3R5bGVbdF0scz1lLnN0eWxlO3JldHVybiBpPT1udWxsJiZzJiZzW3RdJiYoaT1zW3RdKSxVdC50ZXN0KGkpJiYhRnQudGVzdCh0KSYmKG49cy5sZWZ0LHI9ZS5ydW50aW1lU3R5bGUmJmUucnVudGltZVN0eWxlLmxlZnQsciYmKGUucnVudGltZVN0eWxlLmxlZnQ9ZS5jdXJyZW50U3R5bGUubGVmdCkscy5sZWZ0PXQ9PT0iZm9udFNpemUiPyIxZW0iOmksaT1zLnBpeGVsTGVmdCsicHgiLHMubGVmdD1uLHImJihlLnJ1bnRpbWVTdHlsZS5sZWZ0PXIpKSxpPT09IiI/ImF1dG8iOml9KSx2LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsdCl7di5jc3NIb29rc1t0XT17Z2V0OmZ1bmN0aW9uKGUsbixyKXtpZihuKXJldHVybiBlLm9mZnNldFdpZHRoPT09MCYmSXQudGVzdChEdChlLCJkaXNwbGF5IikpP3Yuc3dhcChlLFh0LGZ1bmN0aW9uKCl7cmV0dXJuIHRuKGUsdCxyKX0pOnRuKGUsdCxyKX0sc2V0OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gWnQoZSxuLHI/ZW4oZSx0LHIsdi5zdXBwb3J0LmJveFNpemluZyYmdi5jc3MoZSwiYm94U2l6aW5nIik9PT0iYm9yZGVyLWJveCIpOjApfX19KSx2LnN1cHBvcnQub3BhY2l0eXx8KHYuY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGp0LnRlc3QoKHQmJmUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlLmZpbHRlcjplLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOnQ/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0eWxlLHI9ZS5jdXJyZW50U3R5bGUsaT12LmlzTnVtZXJpYyh0KT8iYWxwaGEob3BhY2l0eT0iK3QqMTAwKyIpIjoiIixzPXImJnIuZmlsdGVyfHxuLmZpbHRlcnx8IiI7bi56b29tPTE7aWYodD49MSYmdi50cmltKHMucmVwbGFjZShCdCwiIikpPT09IiImJm4ucmVtb3ZlQXR0cmlidXRlKXtuLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIik7aWYociYmIXIuZmlsdGVyKXJldHVybn1uLmZpbHRlcj1CdC50ZXN0KHMpP3MucmVwbGFjZShCdCxpKTpzKyIgIitpfX0pLHYoZnVuY3Rpb24oKXt2LnN1cHBvcnQucmVsaWFibGVNYXJnaW5SaWdodHx8KHYuY3NzSG9va3MubWFyZ2luUmlnaHQ9e2dldDpmdW5jdGlvbihlLHQpe3JldHVybiB2LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sZnVuY3Rpb24oKXtpZih0KXJldHVybiBEdChlLCJtYXJnaW5SaWdodCIpfSl9fSksIXYuc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ2LmZuLnBvc2l0aW9uJiZ2LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSx0KXt2LmNzc0hvb2tzW3RdPXtnZXQ6ZnVuY3Rpb24oZSxuKXtpZihuKXt2YXIgcj1EdChlLHQpO3JldHVybiBVdC50ZXN0KHIpP3YoZSkucG9zaXRpb24oKVt0XSsicHgiOnJ9fX19KX0pLHYuZXhwciYmdi5leHByLmZpbHRlcnMmJih2LmV4cHIuZmlsdGVycy5oaWRkZW49ZnVuY3Rpb24oZSl7cmV0dXJuIGUub2Zmc2V0V2lkdGg9PT0wJiZlLm9mZnNldEhlaWdodD09PTB8fCF2LnN1cHBvcnQucmVsaWFibGVIaWRkZW5PZmZzZXRzJiYoZS5zdHlsZSYmZS5zdHlsZS5kaXNwbGF5fHxEdChlLCJkaXNwbGF5IikpPT09Im5vbmUifSx2LmV4cHIuZmlsdGVycy52aXNpYmxlPWZ1bmN0aW9uKGUpe3JldHVybiF2LmV4cHIuZmlsdGVycy5oaWRkZW4oZSl9KSx2LmVhY2goe21hcmdpbjoiIixwYWRkaW5nOiIiLGJvcmRlcjoiV2lkdGgifSxmdW5jdGlvbihlLHQpe3YuY3NzSG9va3NbZSt0XT17ZXhwYW5kOmZ1bmN0aW9uKG4pe3ZhciByLGk9dHlwZW9mIG49PSJzdHJpbmciP24uc3BsaXQoIiAiKTpbbl0scz17fTtmb3Iocj0wO3I8NDtyKyspc1tlKyR0W3JdK3RdPWlbcl18fGlbci0yXXx8aVswXTtyZXR1cm4gc319LHF0LnRlc3QoZSl8fCh2LmNzc0hvb2tzW2UrdF0uc2V0PVp0KX0pO3ZhciBybj0vJTIwL2csc249L1xbXF0kLyxvbj0vXHI/XG4vZyx1bj0vXig/OmNvbG9yfGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWUtbG9jYWx8ZW1haWx8aGlkZGVufG1vbnRofG51bWJlcnxwYXNzd29yZHxyYW5nZXxzZWFyY2h8dGVsfHRleHR8dGltZXx1cmx8d2VlaykkL2ksYW49L14oPzpzZWxlY3R8dGV4dGFyZWEpL2k7di5mbi5leHRlbmQoe3NlcmlhbGl6ZTpmdW5jdGlvbigpe3JldHVybiB2LnBhcmFtKHRoaXMuc2VyaWFsaXplQXJyYXkoKSl9LHNlcmlhbGl6ZUFycmF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudHM/di5tYWtlQXJyYXkodGhpcy5lbGVtZW50cyk6dGhpc30pLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiB0aGlzLm5hbWUmJiF0aGlzLmRpc2FibGVkJiYodGhpcy5jaGVja2VkfHxhbi50ZXN0KHRoaXMubm9kZU5hbWUpfHx1bi50ZXN0KHRoaXMudHlwZSkpfSkubWFwKGZ1bmN0aW9uKGUsdCl7dmFyIG49dih0aGlzKS52YWwoKTtyZXR1cm4gbj09bnVsbD9udWxsOnYuaXNBcnJheShuKT92Lm1hcChuLGZ1bmN0aW9uKGUsbil7cmV0dXJue25hbWU6dC5uYW1lLHZhbHVlOmUucmVwbGFjZShvbiwiXHJcbiIpfX0pOntuYW1lOnQubmFtZSx2YWx1ZTpuLnJlcGxhY2Uob24sIlxyXG4iKX19KS5nZXQoKX19KSx2LnBhcmFtPWZ1bmN0aW9uKGUsbil7dmFyIHIsaT1bXSxzPWZ1bmN0aW9uKGUsdCl7dD12LmlzRnVuY3Rpb24odCk/dCgpOnQ9PW51bGw/IiI6dCxpW2kubGVuZ3RoXT1lbmNvZGVVUklDb21wb25lbnQoZSkrIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KX07bj09PXQmJihuPXYuYWpheFNldHRpbmdzJiZ2LmFqYXhTZXR0aW5ncy50cmFkaXRpb25hbCk7aWYodi5pc0FycmF5KGUpfHxlLmpxdWVyeSYmIXYuaXNQbGFpbk9iamVjdChlKSl2LmVhY2goZSxmdW5jdGlvbigpe3ModGhpcy5uYW1lLHRoaXMudmFsdWUpfSk7ZWxzZSBmb3IociBpbiBlKWZuKHIsZVtyXSxuLHMpO3JldHVybiBpLmpvaW4oIiYiKS5yZXBsYWNlKHJuLCIrIil9O3ZhciBsbixjbixobj0vIy4qJC8scG49L14oLio/KTpbIFx0XSooW15cclxuXSopXHI/JC9tZyxkbj0vXig/OmFib3V0fGFwcHxhcHBcLXN0b3JhZ2V8LitcLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLHZuPS9eKD86R0VUfEhFQUQpJC8sbW49L15cL1wvLyxnbj0vXD8vLHluPS88c2NyaXB0XGJbXjxdKig/Oig/ITxcL3NjcmlwdD4pPFtePF0qKSo8XC9zY3JpcHQ+L2dpLGJuPS8oWz8mXSlfPVteJl0qLyx3bj0vXihbXHdcK1wuXC1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sRW49di5mbi5sb2FkLFNuPXt9LHhuPXt9LFRuPVsiKi8iXStbIioiXTt0cnl7Y249cy5ocmVmfWNhdGNoKE5uKXtjbj1pLmNyZWF0ZUVsZW1lbnQoImEiKSxjbi5ocmVmPSIiLGNuPWNuLmhyZWZ9bG49d24uZXhlYyhjbi50b0xvd2VyQ2FzZSgpKXx8W10sdi5mbi5sb2FkPWZ1bmN0aW9uKGUsbixyKXtpZih0eXBlb2YgZSE9InN0cmluZyImJkVuKXJldHVybiBFbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzO3ZhciBpLHMsbyx1PXRoaXMsYT1lLmluZGV4T2YoIiAiKTtyZXR1cm4gYT49MCYmKGk9ZS5zbGljZShhLGUubGVuZ3RoKSxlPWUuc2xpY2UoMCxhKSksdi5pc0Z1bmN0aW9uKG4pPyhyPW4sbj10KTpuJiZ0eXBlb2Ygbj09Im9iamVjdCImJihzPSJQT1NUIiksdi5hamF4KHt1cmw6ZSx0eXBlOnMsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bixjb21wbGV0ZTpmdW5jdGlvbihlLHQpe3ImJnUuZWFjaChyLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX19KS5kb25lKGZ1bmN0aW9uKGUpe289YXJndW1lbnRzLHUuaHRtbChpP3YoIjxkaXY+IikuYXBwZW5kKGUucmVwbGFjZSh5biwiIikpLmZpbmQoaSk6ZSl9KSx0aGlzfSx2LmVhY2goImFqYXhTdGFydCBhamF4U3RvcCBhamF4Q29tcGxldGUgYWpheEVycm9yIGFqYXhTdWNjZXNzIGFqYXhTZW5kIi5zcGxpdCgiICIpLGZ1bmN0aW9uKGUsdCl7di5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHYuZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe3Zbbl09ZnVuY3Rpb24oZSxyLGkscyl7cmV0dXJuIHYuaXNGdW5jdGlvbihyKSYmKHM9c3x8aSxpPXIscj10KSx2LmFqYXgoe3R5cGU6bix1cmw6ZSxkYXRhOnIsc3VjY2VzczppLGRhdGFUeXBlOnN9KX19KSx2LmV4dGVuZCh7Z2V0U2NyaXB0OmZ1bmN0aW9uKGUsbil7cmV0dXJuIHYuZ2V0KGUsdCxuLCJzY3JpcHQiKX0sZ2V0SlNPTjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHYuZ2V0KGUsdCxuLCJqc29uIil9LGFqYXhTZXR1cDpmdW5jdGlvbihlLHQpe3JldHVybiB0P0xuKGUsdi5hamF4U2V0dGluZ3MpOih0PWUsZT12LmFqYXhTZXR0aW5ncyksTG4oZSx0KSxlfSxhamF4U2V0dGluZ3M6e3VybDpjbixpc0xvY2FsOmRuLnRlc3QobG5bMV0pLGdsb2JhbDohMCx0eXBlOiJHRVQiLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGFjY2VwdHM6e3htbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsaHRtbDoidGV4dC9odG1sIix0ZXh0OiJ0ZXh0L3BsYWluIixqc29uOiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHQiLCIqIjpUbn0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCJ9LGNvbnZlcnRlcnM6eyIqIHRleHQiOmUuU3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOnYucGFyc2VKU09OLCJ0ZXh0IHhtbCI6di5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e2NvbnRleHQ6ITAsdXJsOiEwfX0sYWpheFByZWZpbHRlcjpDbihTbiksYWpheFRyYW5zcG9ydDpDbih4biksYWpheDpmdW5jdGlvbihlLG4pe2Z1bmN0aW9uIFQoZSxuLHMsYSl7dmFyIGwseSxiLHcsUyxUPW47aWYoRT09PTIpcmV0dXJuO0U9Mix1JiZjbGVhclRpbWVvdXQodSksbz10LGk9YXx8IiIseC5yZWFkeVN0YXRlPWU+MD80OjAscyYmKHc9QW4oYyx4LHMpKTtpZihlPj0yMDAmJmU8MzAwfHxlPT09MzA0KWMuaWZNb2RpZmllZCYmKFM9eC5nZXRSZXNwb25zZUhlYWRlcigiTGFzdC1Nb2RpZmllZCIpLFMmJih2Lmxhc3RNb2RpZmllZFtyXT1TKSxTPXguZ2V0UmVzcG9uc2VIZWFkZXIoIkV0YWciKSxTJiYodi5ldGFnW3JdPVMpKSxlPT09MzA0PyhUPSJub3Rtb2RpZmllZCIsbD0hMCk6KGw9T24oYyx3KSxUPWwuc3RhdGUseT1sLmRhdGEsYj1sLmVycm9yLGw9IWIpO2Vsc2V7Yj1UO2lmKCFUfHxlKVQ9ImVycm9yIixlPDAmJihlPTApfXguc3RhdHVzPWUseC5zdGF0dXNUZXh0PShufHxUKSsiIixsP2QucmVzb2x2ZVdpdGgoaCxbeSxULHhdKTpkLnJlamVjdFdpdGgoaCxbeCxULGJdKSx4LnN0YXR1c0NvZGUoZyksZz10LGYmJnAudHJpZ2dlcigiYWpheCIrKGw/IlN1Y2Nlc3MiOiJFcnJvciIpLFt4LGMsbD95OmJdKSxtLmZpcmVXaXRoKGgsW3gsVF0pLGYmJihwLnRyaWdnZXIoImFqYXhDb21wbGV0ZSIsW3gsY10pLC0tdi5hY3RpdmV8fHYuZXZlbnQudHJpZ2dlcigiYWpheFN0b3AiKSl9dHlwZW9mIGU9PSJvYmplY3QiJiYobj1lLGU9dCksbj1ufHx7fTt2YXIgcixpLHMsbyx1LGEsZixsLGM9di5hamF4U2V0dXAoe30sbiksaD1jLmNvbnRleHR8fGMscD1oIT09YyYmKGgubm9kZVR5cGV8fGggaW5zdGFuY2VvZiB2KT92KGgpOnYuZXZlbnQsZD12LkRlZmVycmVkKCksbT12LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxnPWMuc3RhdHVzQ29kZXx8e30sYj17fSx3PXt9LEU9MCxTPSJjYW5jZWxlZCIseD17cmVhZHlTdGF0ZTowLHNldFJlcXVlc3RIZWFkZXI6ZnVuY3Rpb24oZSx0KXtpZighRSl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO2U9d1tuXT13W25dfHxlLGJbZV09dH1yZXR1cm4gdGhpc30sZ2V0QWxsUmVzcG9uc2VIZWFkZXJzOmZ1bmN0aW9uKCl7cmV0dXJuIEU9PT0yP2k6bnVsbH0sZ2V0UmVzcG9uc2VIZWFkZXI6ZnVuY3Rpb24oZSl7dmFyIG47aWYoRT09PTIpe2lmKCFzKXtzPXt9O3doaWxlKG49cG4uZXhlYyhpKSlzW25bMV0udG9Mb3dlckNhc2UoKV09blsyXX1uPXNbZS50b0xvd2VyQ2FzZSgpXX1yZXR1cm4gbj09PXQ/bnVsbDpufSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBFfHwoYy5taW1lVHlwZT1lKSx0aGlzfSxhYm9ydDpmdW5jdGlvbihlKXtyZXR1cm4gZT1lfHxTLG8mJm8uYWJvcnQoZSksVCgwLGUpLHRoaXN9fTtkLnByb21pc2UoeCkseC5zdWNjZXNzPXguZG9uZSx4LmVycm9yPXguZmFpbCx4LmNvbXBsZXRlPW0uYWRkLHguc3RhdHVzQ29kZT1mdW5jdGlvbihlKXtpZihlKXt2YXIgdDtpZihFPDIpZm9yKHQgaW4gZSlnW3RdPVtnW3RdLGVbdF1dO2Vsc2UgdD1lW3guc3RhdHVzXSx4LmFsd2F5cyh0KX1yZXR1cm4gdGhpc30sYy51cmw9KChlfHxjLnVybCkrIiIpLnJlcGxhY2UoaG4sIiIpLnJlcGxhY2UobW4sbG5bMV0rIi8vIiksYy5kYXRhVHlwZXM9di50cmltKGMuZGF0YVR5cGV8fCIqIikudG9Mb3dlckNhc2UoKS5zcGxpdCh5KSxjLmNyb3NzRG9tYWluPT1udWxsJiYoYT13bi5leGVjKGMudXJsLnRvTG93ZXJDYXNlKCkpLGMuY3Jvc3NEb21haW49ISghYXx8YVsxXT09PWxuWzFdJiZhWzJdPT09bG5bMl0mJihhWzNdfHwoYVsxXT09PSJodHRwOiI/ODA6NDQzKSk9PShsblszXXx8KGxuWzFdPT09Imh0dHA6Ij84MDo0NDMpKSkpLGMuZGF0YSYmYy5wcm9jZXNzRGF0YSYmdHlwZW9mIGMuZGF0YSE9InN0cmluZyImJihjLmRhdGE9di5wYXJhbShjLmRhdGEsYy50cmFkaXRpb25hbCkpLGtuKFNuLGMsbix4KTtpZihFPT09MilyZXR1cm4geDtmPWMuZ2xvYmFsLGMudHlwZT1jLnR5cGUudG9VcHBlckNhc2UoKSxjLmhhc0NvbnRlbnQ9IXZuLnRlc3QoYy50eXBlKSxmJiZ2LmFjdGl2ZSsrPT09MCYmdi5ldmVudC50cmlnZ2VyKCJhamF4U3RhcnQiKTtpZighYy5oYXNDb250ZW50KXtjLmRhdGEmJihjLnVybCs9KGduLnRlc3QoYy51cmwpPyImIjoiPyIpK2MuZGF0YSxkZWxldGUgYy5kYXRhKSxyPWMudXJsO2lmKGMuY2FjaGU9PT0hMSl7dmFyIE49di5ub3coKSxDPWMudXJsLnJlcGxhY2UoYm4sIiQxXz0iK04pO2MudXJsPUMrKEM9PT1jLnVybD8oZ24udGVzdChjLnVybCk/IiYiOiI/IikrIl89IitOOiIiKX19KGMuZGF0YSYmYy5oYXNDb250ZW50JiZjLmNvbnRlbnRUeXBlIT09ITF8fG4uY29udGVudFR5cGUpJiZ4LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsYy5jb250ZW50VHlwZSksYy5pZk1vZGlmaWVkJiYocj1yfHxjLnVybCx2Lmxhc3RNb2RpZmllZFtyXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Nb2RpZmllZC1TaW5jZSIsdi5sYXN0TW9kaWZpZWRbcl0pLHYuZXRhZ1tyXSYmeC5zZXRSZXF1ZXN0SGVhZGVyKCJJZi1Ob25lLU1hdGNoIix2LmV0YWdbcl0pKSx4LnNldFJlcXVlc3RIZWFkZXIoIkFjY2VwdCIsYy5kYXRhVHlwZXNbMF0mJmMuYWNjZXB0c1tjLmRhdGFUeXBlc1swXV0/Yy5hY2NlcHRzW2MuZGF0YVR5cGVzWzBdXSsoYy5kYXRhVHlwZXNbMF0hPT0iKiI/IiwgIitUbisiOyBxPTAuMDEiOiIiKTpjLmFjY2VwdHNbIioiXSk7Zm9yKGwgaW4gYy5oZWFkZXJzKXguc2V0UmVxdWVzdEhlYWRlcihsLGMuaGVhZGVyc1tsXSk7aWYoIWMuYmVmb3JlU2VuZHx8Yy5iZWZvcmVTZW5kLmNhbGwoaCx4LGMpIT09ITEmJkUhPT0yKXtTPSJhYm9ydCI7Zm9yKGwgaW57c3VjY2VzczoxLGVycm9yOjEsY29tcGxldGU6MX0peFtsXShjW2xdKTtvPWtuKHhuLGMsbix4KTtpZighbylUKC0xLCJObyBUcmFuc3BvcnQiKTtlbHNle3gucmVhZHlTdGF0ZT0xLGYmJnAudHJpZ2dlcigiYWpheFNlbmQiLFt4LGNdKSxjLmFzeW5jJiZjLnRpbWVvdXQ+MCYmKHU9c2V0VGltZW91dChmdW5jdGlvbigpe3guYWJvcnQoInRpbWVvdXQiKX0sYy50aW1lb3V0KSk7dHJ5e0U9MSxvLnNlbmQoYixUKX1jYXRjaChrKXtpZighKEU8MikpdGhyb3cgaztUKC0xLGspfX1yZXR1cm4geH1yZXR1cm4geC5hYm9ydCgpfSxhY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fX0pO3ZhciBNbj1bXSxfbj0vXD8vLERuPS8oPSlcPyg/PSZ8JCl8XD9cPy8sUG49di5ub3coKTt2LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9TW4ucG9wKCl8fHYuZXhwYW5kbysiXyIrUG4rKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHYuYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24obixyLGkpe3ZhciBzLG8sdSxhPW4uZGF0YSxmPW4udXJsLGw9bi5qc29ucCE9PSExLGM9bCYmRG4udGVzdChmKSxoPWwmJiFjJiZ0eXBlb2YgYT09InN0cmluZyImJiEobi5jb250ZW50VHlwZXx8IiIpLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpJiZEbi50ZXN0KGEpO2lmKG4uZGF0YVR5cGVzWzBdPT09Impzb25wInx8Y3x8aClyZXR1cm4gcz1uLmpzb25wQ2FsbGJhY2s9di5pc0Z1bmN0aW9uKG4uanNvbnBDYWxsYmFjayk/bi5qc29ucENhbGxiYWNrKCk6bi5qc29ucENhbGxiYWNrLG89ZVtzXSxjP24udXJsPWYucmVwbGFjZShEbiwiJDEiK3MpOmg/bi5kYXRhPWEucmVwbGFjZShEbiwiJDEiK3MpOmwmJihuLnVybCs9KF9uLnRlc3QoZik/IiYiOiI/Iikrbi5qc29ucCsiPSIrcyksbi5jb252ZXJ0ZXJzWyJzY3JpcHQganNvbiJdPWZ1bmN0aW9uKCl7cmV0dXJuIHV8fHYuZXJyb3IocysiIHdhcyBub3QgY2FsbGVkIiksdVswXX0sbi5kYXRhVHlwZXNbMF09Impzb24iLGVbc109ZnVuY3Rpb24oKXt1PWFyZ3VtZW50c30saS5hbHdheXMoZnVuY3Rpb24oKXtlW3NdPW8sbltzXSYmKG4uanNvbnBDYWxsYmFjaz1yLmpzb25wQ2FsbGJhY2ssTW4ucHVzaChzKSksdSYmdi5pc0Z1bmN0aW9uKG8pJiZvKHVbMF0pLHU9bz10fSksInNjcmlwdCJ9KSx2LmFqYXhTZXR1cCh7YWNjZXB0czp7c2NyaXB0OiJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdCJ9LGNvbnRlbnRzOntzY3JpcHQ6L2phdmFzY3JpcHR8ZWNtYXNjcmlwdC99LGNvbnZlcnRlcnM6eyJ0ZXh0IHNjcmlwdCI6ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZ2xvYmFsRXZhbChlKSxlfX19KSx2LmFqYXhQcmVmaWx0ZXIoInNjcmlwdCIsZnVuY3Rpb24oZSl7ZS5jYWNoZT09PXQmJihlLmNhY2hlPSExKSxlLmNyb3NzRG9tYWluJiYoZS50eXBlPSJHRVQiLGUuZ2xvYmFsPSExKX0pLHYuYWpheFRyYW5zcG9ydCgic2NyaXB0IixmdW5jdGlvbihlKXtpZihlLmNyb3NzRG9tYWluKXt2YXIgbixyPWkuaGVhZHx8aS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdfHxpLmRvY3VtZW50RWxlbWVudDtyZXR1cm57c2VuZDpmdW5jdGlvbihzLG8pe249aS5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKSxuLmFzeW5jPSJhc3luYyIsZS5zY3JpcHRDaGFyc2V0JiYobi5jaGFyc2V0PWUuc2NyaXB0Q2hhcnNldCksbi5zcmM9ZS51cmwsbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSxpKXtpZihpfHwhbi5yZWFkeVN0YXRlfHwvbG9hZGVkfGNvbXBsZXRlLy50ZXN0KG4ucmVhZHlTdGF0ZSkpbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9bnVsbCxyJiZuLnBhcmVudE5vZGUmJnIucmVtb3ZlQ2hpbGQobiksbj10LGl8fG8oMjAwLCJzdWNjZXNzIil9LHIuaW5zZXJ0QmVmb3JlKG4sci5maXJzdENoaWxkKX0sYWJvcnQ6ZnVuY3Rpb24oKXtuJiZuLm9ubG9hZCgwLDEpfX19fSk7dmFyIEhuLEJuPWUuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe2Zvcih2YXIgZSBpbiBIbilIbltlXSgwLDEpfTohMSxqbj0wO3YuYWpheFNldHRpbmdzLnhocj1lLkFjdGl2ZVhPYmplY3Q/ZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5pc0xvY2FsJiZGbigpfHxJbigpfTpGbixmdW5jdGlvbihlKXt2LmV4dGVuZCh2LnN1cHBvcnQse2FqYXg6ISFlLGNvcnM6ISFlJiYid2l0aENyZWRlbnRpYWxzImluIGV9KX0odi5hamF4U2V0dGluZ3MueGhyKCkpLHYuc3VwcG9ydC5hamF4JiZ2LmFqYXhUcmFuc3BvcnQoZnVuY3Rpb24obil7aWYoIW4uY3Jvc3NEb21haW58fHYuc3VwcG9ydC5jb3JzKXt2YXIgcjtyZXR1cm57c2VuZDpmdW5jdGlvbihpLHMpe3ZhciBvLHUsYT1uLnhocigpO24udXNlcm5hbWU/YS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jLG4udXNlcm5hbWUsbi5wYXNzd29yZCk6YS5vcGVuKG4udHlwZSxuLnVybCxuLmFzeW5jKTtpZihuLnhockZpZWxkcylmb3IodSBpbiBuLnhockZpZWxkcylhW3VdPW4ueGhyRmllbGRzW3VdO24ubWltZVR5cGUmJmEub3ZlcnJpZGVNaW1lVHlwZSYmYS5vdmVycmlkZU1pbWVUeXBlKG4ubWltZVR5cGUpLCFuLmNyb3NzRG9tYWluJiYhaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdJiYoaVsiWC1SZXF1ZXN0ZWQtV2l0aCJdPSJYTUxIdHRwUmVxdWVzdCIpO3RyeXtmb3IodSBpbiBpKWEuc2V0UmVxdWVzdEhlYWRlcih1LGlbdV0pfWNhdGNoKGYpe31hLnNlbmQobi5oYXNDb250ZW50JiZuLmRhdGF8fG51bGwpLHI9ZnVuY3Rpb24oZSxpKXt2YXIgdSxmLGwsYyxoO3RyeXtpZihyJiYoaXx8YS5yZWFkeVN0YXRlPT09NCkpe3I9dCxvJiYoYS5vbnJlYWR5c3RhdGVjaGFuZ2U9di5ub29wLEJuJiZkZWxldGUgSG5bb10pO2lmKGkpYS5yZWFkeVN0YXRlIT09NCYmYS5hYm9ydCgpO2Vsc2V7dT1hLnN0YXR1cyxsPWEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCksYz17fSxoPWEucmVzcG9uc2VYTUwsaCYmaC5kb2N1bWVudEVsZW1lbnQmJihjLnhtbD1oKTt0cnl7Yy50ZXh0PWEucmVzcG9uc2VUZXh0fWNhdGNoKHApe310cnl7Zj1hLnN0YXR1c1RleHR9Y2F0Y2gocCl7Zj0iIn0hdSYmbi5pc0xvY2FsJiYhbi5jcm9zc0RvbWFpbj91PWMudGV4dD8yMDA6NDA0OnU9PT0xMjIzJiYodT0yMDQpfX19Y2F0Y2goZCl7aXx8cygtMSxkKX1jJiZzKHUsZixjLGwpfSxuLmFzeW5jP2EucmVhZHlTdGF0ZT09PTQ/c2V0VGltZW91dChyLDApOihvPSsram4sQm4mJihIbnx8KEhuPXt9LHYoZSkudW5sb2FkKEJuKSksSG5bb109ciksYS5vbnJlYWR5c3RhdGVjaGFuZ2U9cik6cigpfSxhYm9ydDpmdW5jdGlvbigpe3ImJnIoMCwxKX19fX0pO3ZhciBxbixSbixVbj0vXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sem49bmV3IFJlZ0V4cCgiXig/OihbLStdKT18KSgiK20rIikoW2EteiVdKikkIiwiaSIpLFduPS9xdWV1ZUhvb2tzJC8sWG49W0duXSxWbj17IioiOltmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscz16bi5leGVjKHQpLG89aS5jdXIoKSx1PStvfHwwLGE9MSxmPTIwO2lmKHMpe249K3NbMl0scj1zWzNdfHwodi5jc3NOdW1iZXJbZV0/IiI6InB4Iik7aWYociE9PSJweCImJnUpe3U9di5jc3MoaS5lbGVtLGUsITApfHxufHwxO2RvIGE9YXx8Ii41Iix1Lz1hLHYuc3R5bGUoaS5lbGVtLGUsdStyKTt3aGlsZShhIT09KGE9aS5jdXIoKS9vKSYmYSE9PTEmJi0tZil9aS51bml0PXIsaS5zdGFydD11LGkuZW5kPXNbMV0/dSsoc1sxXSsxKSpuOm59cmV0dXJuIGl9XX07di5BbmltYXRpb249di5leHRlbmQoS24se3R3ZWVuZXI6ZnVuY3Rpb24oZSx0KXt2LmlzRnVuY3Rpb24oZSk/KHQ9ZSxlPVsiKiJdKTplPWUuc3BsaXQoIiAiKTt2YXIgbixyPTAsaT1lLmxlbmd0aDtmb3IoO3I8aTtyKyspbj1lW3JdLFZuW25dPVZuW25dfHxbXSxWbltuXS51bnNoaWZ0KHQpfSxwcmVmaWx0ZXI6ZnVuY3Rpb24oZSx0KXt0P1huLnVuc2hpZnQoZSk6WG4ucHVzaChlKX19KSx2LlR3ZWVuPVluLFluLnByb3RvdHlwZT17Y29uc3RydWN0b3I6WW4saW5pdDpmdW5jdGlvbihlLHQsbixyLGkscyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9c3x8KHYuY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1Zbi5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6WW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49WW4ucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMub3B0aW9ucy5kdXJhdGlvbj90aGlzLnBvcz10PXYuZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOnRoaXMucG9zPXQ9ZSx0aGlzLm5vdz0odGhpcy5lbmQtdGhpcy5zdGFydCkqdCt0aGlzLnN0YXJ0LHRoaXMub3B0aW9ucy5zdGVwJiZ0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKHRoaXMuZWxlbSx0aGlzLm5vdyx0aGlzKSxuJiZuLnNldD9uLnNldCh0aGlzKTpZbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KHRoaXMpLHRoaXN9fSxZbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGU9WW4ucHJvdG90eXBlLFluLnByb3BIb29rcz17X2RlZmF1bHQ6e2dldDpmdW5jdGlvbihlKXt2YXIgdDtyZXR1cm4gZS5lbGVtW2UucHJvcF09PW51bGx8fCEhZS5lbGVtLnN0eWxlJiZlLmVsZW0uc3R5bGVbZS5wcm9wXSE9bnVsbD8odD12LmNzcyhlLmVsZW0sZS5wcm9wLCExLCIiKSwhdHx8dD09PSJhdXRvIj8wOnQpOmUuZWxlbVtlLnByb3BdfSxzZXQ6ZnVuY3Rpb24oZSl7di5meC5zdGVwW2UucHJvcF0/di5meC5zdGVwW2UucHJvcF0oZSk6ZS5lbGVtLnN0eWxlJiYoZS5lbGVtLnN0eWxlW3YuY3NzUHJvcHNbZS5wcm9wXV0hPW51bGx8fHYuY3NzSG9va3NbZS5wcm9wXSk/di5zdHlsZShlLmVsZW0sZS5wcm9wLGUubm93K2UudW5pdCk6ZS5lbGVtW2UucHJvcF09ZS5ub3d9fX0sWW4ucHJvcEhvb2tzLnNjcm9sbFRvcD1Zbi5wcm9wSG9va3Muc2Nyb2xsTGVmdD17c2V0OmZ1bmN0aW9uKGUpe2UuZWxlbS5ub2RlVHlwZSYmZS5lbGVtLnBhcmVudE5vZGUmJihlLmVsZW1bZS5wcm9wXT1lLm5vdyl9fSx2LmVhY2goWyJ0b2dnbGUiLCJzaG93IiwiaGlkZSJdLGZ1bmN0aW9uKGUsdCl7dmFyIG49di5mblt0XTt2LmZuW3RdPWZ1bmN0aW9uKHIsaSxzKXtyZXR1cm4gcj09bnVsbHx8dHlwZW9mIHI9PSJib29sZWFuInx8IWUmJnYuaXNGdW5jdGlvbihyKSYmdi5pc0Z1bmN0aW9uKGkpP24uYXBwbHkodGhpcyxhcmd1bWVudHMpOnRoaXMuYW5pbWF0ZShabih0LCEwKSxyLGkscyl9fSksdi5mbi5leHRlbmQoe2ZhZGVUbzpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5maWx0ZXIoR3QpLmNzcygib3BhY2l0eSIsMCkuc2hvdygpLmVuZCgpLmFuaW1hdGUoe29wYWNpdHk6dH0sZSxuLHIpfSxhbmltYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXYuaXNFbXB0eU9iamVjdChlKSxzPXYuc3BlZWQodCxuLHIpLG89ZnVuY3Rpb24oKXt2YXIgdD1Lbih0aGlzLHYuZXh0ZW5kKHt9LGUpLHMpO2kmJnQuc3RvcCghMCl9O3JldHVybiBpfHxzLnF1ZXVlPT09ITE/dGhpcy5lYWNoKG8pOnRoaXMucXVldWUocy5xdWV1ZSxvKX0sc3RvcDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChyKX07cmV0dXJuIHR5cGVvZiBlIT0ic3RyaW5nIiYmKHI9bixuPWUsZT10KSxuJiZlIT09ITEmJnRoaXMucXVldWUoZXx8ImZ4IixbXSksdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ITAsbj1lIT1udWxsJiZlKyJxdWV1ZUhvb2tzIixzPXYudGltZXJzLG89di5fZGF0YSh0aGlzKTtpZihuKW9bbl0mJm9bbl0uc3RvcCYmaShvW25dKTtlbHNlIGZvcihuIGluIG8pb1tuXSYmb1tuXS5zdG9wJiZXbi50ZXN0KG4pJiZpKG9bbl0pO2ZvcihuPXMubGVuZ3RoO24tLTspc1tuXS5lbGVtPT09dGhpcyYmKGU9PW51bGx8fHNbbl0ucXVldWU9PT1lKSYmKHNbbl0uYW5pbS5zdG9wKHIpLHQ9ITEscy5zcGxpY2UobiwxKSk7KHR8fCFyKSYmdi5kZXF1ZXVlKHRoaXMsZSl9KX19KSx2LmVhY2goe3NsaWRlRG93bjpabigic2hvdyIpLHNsaWRlVXA6Wm4oImhpZGUiKSxzbGlkZVRvZ2dsZTpabigidG9nZ2xlIiksZmFkZUluOntvcGFjaXR5OiJzaG93In0sZmFkZU91dDp7b3BhY2l0eToiaGlkZSJ9LGZhZGVUb2dnbGU6e29wYWNpdHk6InRvZ2dsZSJ9fSxmdW5jdGlvbihlLHQpe3YuZm5bZV09ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB0aGlzLmFuaW1hdGUodCxlLG4scil9fSksdi5zcGVlZD1mdW5jdGlvbihlLHQsbil7dmFyIHI9ZSYmdHlwZW9mIGU9PSJvYmplY3QiP3YuZXh0ZW5kKHt9LGUpOntjb21wbGV0ZTpufHwhbiYmdHx8di5pc0Z1bmN0aW9uKGUpJiZlLGR1cmF0aW9uOmUsZWFzaW5nOm4mJnR8fHQmJiF2LmlzRnVuY3Rpb24odCkmJnR9O3IuZHVyYXRpb249di5meC5vZmY/MDp0eXBlb2Ygci5kdXJhdGlvbj09Im51bWJlciI/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHYuZnguc3BlZWRzP3YuZnguc3BlZWRzW3IuZHVyYXRpb25dOnYuZnguc3BlZWRzLl9kZWZhdWx0O2lmKHIucXVldWU9PW51bGx8fHIucXVldWU9PT0hMClyLnF1ZXVlPSJmeCI7cmV0dXJuIHIub2xkPXIuY29tcGxldGUsci5jb21wbGV0ZT1mdW5jdGlvbigpe3YuaXNGdW5jdGlvbihyLm9sZCkmJnIub2xkLmNhbGwodGhpcyksci5xdWV1ZSYmdi5kZXF1ZXVlKHRoaXMsci5xdWV1ZSl9LHJ9LHYuZWFzaW5nPXtsaW5lYXI6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHN3aW5nOmZ1bmN0aW9uKGUpe3JldHVybi41LU1hdGguY29zKGUqTWF0aC5QSSkvMn19LHYudGltZXJzPVtdLHYuZng9WW4ucHJvdG90eXBlLmluaXQsdi5meC50aWNrPWZ1bmN0aW9uKCl7dmFyIGUsbj12LnRpbWVycyxyPTA7cW49di5ub3coKTtmb3IoO3I8bi5sZW5ndGg7cisrKWU9bltyXSwhZSgpJiZuW3JdPT09ZSYmbi5zcGxpY2Uoci0tLDEpO24ubGVuZ3RofHx2LmZ4LnN0b3AoKSxxbj10fSx2LmZ4LnRpbWVyPWZ1bmN0aW9uKGUpe2UoKSYmdi50aW1lcnMucHVzaChlKSYmIVJuJiYoUm49c2V0SW50ZXJ2YWwodi5meC50aWNrLHYuZnguaW50ZXJ2YWwpKX0sdi5meC5pbnRlcnZhbD0xMyx2LmZ4LnN0b3A9ZnVuY3Rpb24oKXtjbGVhckludGVydmFsKFJuKSxSbj1udWxsfSx2LmZ4LnNwZWVkcz17c2xvdzo2MDAsZmFzdDoyMDAsX2RlZmF1bHQ6NDAwfSx2LmZ4LnN0ZXA9e30sdi5leHByJiZ2LmV4cHIuZmlsdGVycyYmKHYuZXhwci5maWx0ZXJzLmFuaW1hdGVkPWZ1bmN0aW9uKGUpe3JldHVybiB2LmdyZXAodi50aW1lcnMsZnVuY3Rpb24odCl7cmV0dXJuIGU9PT10LmVsZW19KS5sZW5ndGh9KTt2YXIgZXI9L14oPzpib2R5fGh0bWwpJC9pO3YuZm4ub2Zmc2V0PWZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGU9PT10P3RoaXM6dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3Yub2Zmc2V0LnNldE9mZnNldCh0aGlzLGUsdCl9KTt2YXIgbixyLGkscyxvLHUsYSxmPXt0b3A6MCxsZWZ0OjB9LGw9dGhpc1swXSxjPWwmJmwub3duZXJEb2N1bWVudDtpZighYylyZXR1cm47cmV0dXJuKHI9Yy5ib2R5KT09PWw/di5vZmZzZXQuYm9keU9mZnNldChsKToobj1jLmRvY3VtZW50RWxlbWVudCx2LmNvbnRhaW5zKG4sbCk/KHR5cGVvZiBsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9InVuZGVmaW5lZCImJihmPWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLGk9dHIoYykscz1uLmNsaWVudFRvcHx8ci5jbGllbnRUb3B8fDAsbz1uLmNsaWVudExlZnR8fHIuY2xpZW50TGVmdHx8MCx1PWkucGFnZVlPZmZzZXR8fG4uc2Nyb2xsVG9wLGE9aS5wYWdlWE9mZnNldHx8bi5zY3JvbGxMZWZ0LHt0b3A6Zi50b3ArdS1zLGxlZnQ6Zi5sZWZ0K2Etb30pOmYpfSx2Lm9mZnNldD17Ym9keU9mZnNldDpmdW5jdGlvbihlKXt2YXIgdD1lLm9mZnNldFRvcCxuPWUub2Zmc2V0TGVmdDtyZXR1cm4gdi5zdXBwb3J0LmRvZXNOb3RJbmNsdWRlTWFyZ2luSW5Cb2R5T2Zmc2V0JiYodCs9cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5Ub3AiKSl8fDAsbis9cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5MZWZ0IikpfHwwKSx7dG9wOnQsbGVmdDpufX0sc2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj12LmNzcyhlLCJwb3NpdGlvbiIpO3I9PT0ic3RhdGljIiYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGk9dihlKSxzPWkub2Zmc2V0KCksbz12LmNzcyhlLCJ0b3AiKSx1PXYuY3NzKGUsImxlZnQiKSxhPShyPT09ImFic29sdXRlInx8cj09PSJmaXhlZCIpJiZ2LmluQXJyYXkoImF1dG8iLFtvLHVdKT4tMSxmPXt9LGw9e30sYyxoO2E/KGw9aS5wb3NpdGlvbigpLGM9bC50b3AsaD1sLmxlZnQpOihjPXBhcnNlRmxvYXQobyl8fDAsaD1wYXJzZUZsb2F0KHUpfHwwKSx2LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4scykpLHQudG9wIT1udWxsJiYoZi50b3A9dC50b3Atcy50b3ArYyksdC5sZWZ0IT1udWxsJiYoZi5sZWZ0PXQubGVmdC1zLmxlZnQraCksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsZik6aS5jc3MoZil9fSx2LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZighdGhpc1swXSlyZXR1cm47dmFyIGU9dGhpc1swXSx0PXRoaXMub2Zmc2V0UGFyZW50KCksbj10aGlzLm9mZnNldCgpLHI9ZXIudGVzdCh0WzBdLm5vZGVOYW1lKT97dG9wOjAsbGVmdDowfTp0Lm9mZnNldCgpO3JldHVybiBuLnRvcC09cGFyc2VGbG9hdCh2LmNzcyhlLCJtYXJnaW5Ub3AiKSl8fDAsbi5sZWZ0LT1wYXJzZUZsb2F0KHYuY3NzKGUsIm1hcmdpbkxlZnQiKSl8fDAsci50b3ArPXBhcnNlRmxvYXQodi5jc3ModFswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAsci5sZWZ0Kz1wYXJzZUZsb2F0KHYuY3NzKHRbMF0sImJvcmRlckxlZnRXaWR0aCIpKXx8MCx7dG9wOm4udG9wLXIudG9wLGxlZnQ6bi5sZWZ0LXIubGVmdH19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxpLmJvZHk7d2hpbGUoZSYmIWVyLnRlc3QoZS5ub2RlTmFtZSkmJnYuY3NzKGUsInBvc2l0aW9uIik9PT0ic3RhdGljIillPWUub2Zmc2V0UGFyZW50O3JldHVybiBlfHxpLmJvZHl9KX19KSx2LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTt2LmZuW2VdPWZ1bmN0aW9uKGkpe3JldHVybiB2LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxzKXt2YXIgbz10cihlKTtpZihzPT09dClyZXR1cm4gbz9uIGluIG8/b1tuXTpvLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXTplW2ldO28/by5zY3JvbGxUbyhyP3Yobykuc2Nyb2xsTGVmdCgpOnMscj9zOnYobykuc2Nyb2xsVG9wKCkpOmVbaV09c30sZSxpLGFyZ3VtZW50cy5sZW5ndGgsbnVsbCl9fSksdi5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSxuKXt2LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7di5mbltpXT1mdW5jdGlvbihpLHMpe3ZhciBvPWFyZ3VtZW50cy5sZW5ndGgmJihyfHx0eXBlb2YgaSE9ImJvb2xlYW4iKSx1PXJ8fChpPT09ITB8fHM9PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHYuYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkpe3ZhciBzO3JldHVybiB2LmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOm4ubm9kZVR5cGU9PT05PyhzPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4uYm9keVsic2Nyb2xsIitlXSxzWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxzWyJvZmZzZXQiK2VdLHNbImNsaWVudCIrZV0pKTppPT09dD92LmNzcyhuLHIsaSx1KTp2LnN0eWxlKG4scixpLHUpfSxuLG8/aTp0LG8sbnVsbCl9fSl9KSxlLmpRdWVyeT1lLiQ9dix0eXBlb2YgZGVmaW5lPT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kJiZkZWZpbmUuYW1kLmpRdWVyeSYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHZ9KX0pKHdpbmRvdyk7]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/jquery-ui-1.9.2.custom.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjkuMiAtIDIwMTItMTEtMjMKKiBodHRwOi8vanF1ZXJ5dWkuY29tCiogSW5jbHVkZXM6IGpxdWVyeS51aS5jb3JlLmpzLCBqcXVlcnkudWkud2lkZ2V0LmpzLCBqcXVlcnkudWkubW91c2UuanMsIGpxdWVyeS51aS5wb3NpdGlvbi5qcywganF1ZXJ5LnVpLmFjY29yZGlvbi5qcywganF1ZXJ5LnVpLmF1dG9jb21wbGV0ZS5qcywganF1ZXJ5LnVpLmJ1dHRvbi5qcywganF1ZXJ5LnVpLmRhdGVwaWNrZXIuanMsIGpxdWVyeS51aS5kaWFsb2cuanMsIGpxdWVyeS51aS5kcmFnZ2FibGUuanMsIGpxdWVyeS51aS5kcm9wcGFibGUuanMsIGpxdWVyeS51aS5lZmZlY3QuanMsIGpxdWVyeS51aS5lZmZlY3QtYmxpbmQuanMsIGpxdWVyeS51aS5lZmZlY3QtYm91bmNlLmpzLCBqcXVlcnkudWkuZWZmZWN0LWNsaXAuanMsIGpxdWVyeS51aS5lZmZlY3QtZHJvcC5qcywganF1ZXJ5LnVpLmVmZmVjdC1leHBsb2RlLmpzLCBqcXVlcnkudWkuZWZmZWN0LWZhZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtZm9sZC5qcywganF1ZXJ5LnVpLmVmZmVjdC1oaWdobGlnaHQuanMsIGpxdWVyeS51aS5lZmZlY3QtcHVsc2F0ZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1zY2FsZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1zaGFrZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1zbGlkZS5qcywganF1ZXJ5LnVpLmVmZmVjdC10cmFuc2Zlci5qcywganF1ZXJ5LnVpLm1lbnUuanMsIGpxdWVyeS51aS5wcm9ncmVzc2Jhci5qcywganF1ZXJ5LnVpLnJlc2l6YWJsZS5qcywganF1ZXJ5LnVpLnNlbGVjdGFibGUuanMsIGpxdWVyeS51aS5zbGlkZXIuanMsIGpxdWVyeS51aS5zb3J0YWJsZS5qcywganF1ZXJ5LnVpLnNwaW5uZXIuanMsIGpxdWVyeS51aS50YWJzLmpzLCBqcXVlcnkudWkudG9vbHRpcC5qcwoqIENvcHlyaWdodCAoYykgMjAxMiBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzIExpY2Vuc2VkIE1JVCAqLwoKKGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSh0LG4pe3ZhciByLGksbyx1PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iYXJlYSI9PT11PyhyPXQucGFyZW50Tm9kZSxpPXIubmFtZSwhdC5ocmVmfHwhaXx8ci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT09Im1hcCI/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/c1sxXT0iY2VudGVyIjooc1sxXT1zWzBdLHNbMF09ImNlbnRlciIpKSxuLmNhbGwodGhpcyxlLmV4dGVuZChyLHthdDpzWzBdK2lbMF0rIiAiK3NbMV0raVsxXSxvZmZzZXQ6dH0pKX19KGpRdWVyeSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPTAscj17fSxpPXt9O3IuaGVpZ2h0PXIucGFkZGluZ1RvcD1yLnBhZGRpbmdCb3R0b209ci5ib3JkZXJUb3BXaWR0aD1yLmJvcmRlckJvdHRvbVdpZHRoPSJoaWRlIixpLmhlaWdodD1pLnBhZGRpbmdUb3A9aS5wYWRkaW5nQm90dG9tPWkuYm9yZGVyVG9wV2lkdGg9aS5ib3JkZXJCb3R0b21XaWR0aD0ic2hvdyIsZS53aWRnZXQoInVpLmFjY29yZGlvbiIse3ZlcnNpb246IjEuOS4yIixvcHRpb25zOnthY3RpdmU6MCxhbmltYXRlOnt9LGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVhZGVyOiI+IGxpID4gOmZpcnN0LWNoaWxkLD4gOm5vdChsaSk6ZXZlbiIsaGVpZ2h0U3R5bGU6ImF1dG8iLGljb25zOnthY3RpdmVIZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1zIixoZWFkZXI6InVpLWljb24tdHJpYW5nbGUtMS1lIn0sYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hY2NvcmRpb25JZD0idWktYWNjb3JkaW9uLSIrKHRoaXMuZWxlbWVudC5hdHRyKCJpZCIpfHwrK24pLHI9dGhpcy5vcHRpb25zO3RoaXMucHJldlNob3c9dGhpcy5wcmV2SGlkZT1lKCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1hY2NvcmRpb24gdWktd2lkZ2V0IHVpLWhlbHBlci1yZXNldCIpLHRoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZChyLmhlYWRlcikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXIgdWktaGVscGVyLXJlc2V0IHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLmhlYWRlcnMpLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLmhlYWRlcnMpLHRoaXMuaGVhZGVycy5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50IHVpLWhlbHBlci1yZXNldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuaGlkZSgpLCFyLmNvbGxhcHNpYmxlJiYoci5hY3RpdmU9PT0hMXx8ci5hY3RpdmU9PW51bGwpJiYoci5hY3RpdmU9MCksci5hY3RpdmU8MCYmKHIuYWN0aXZlKz10aGlzLmhlYWRlcnMubGVuZ3RoKSx0aGlzLmFjdGl2ZT10aGlzLl9maW5kQWN0aXZlKHIuYWN0aXZlKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLXRvcCIpLHRoaXMuYWN0aXZlLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikuc2hvdygpLHRoaXMuX2NyZWF0ZUljb25zKCksdGhpcy5yZWZyZXNoKCksdGhpcy5lbGVtZW50LmF0dHIoInJvbGUiLCJ0YWJsaXN0IiksdGhpcy5oZWFkZXJzLmF0dHIoInJvbGUiLCJ0YWIiKS5lYWNoKGZ1bmN0aW9uKG4pe3ZhciByPWUodGhpcyksaT1yLmF0dHIoImlkIikscz1yLm5leHQoKSxvPXMuYXR0cigiaWQiKTtpfHwoaT10KyItaGVhZGVyLSIrbixyLmF0dHIoImlkIixpKSksb3x8KG89dCsiLXBhbmVsLSIrbixzLmF0dHIoImlkIixvKSksci5hdHRyKCJhcmlhLWNvbnRyb2xzIixvKSxzLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsaSl9KS5uZXh0KCkuYXR0cigicm9sZSIsInRhYnBhbmVsIiksdGhpcy5oZWFkZXJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KS5uZXh0KCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KS5oaWRlKCksdGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pOnRoaXMuaGVhZGVycy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCksdGhpcy5fb24odGhpcy5oZWFkZXJzLHtrZXlkb3duOiJfa2V5ZG93biJ9KSx0aGlzLl9vbih0aGlzLmhlYWRlcnMubmV4dCgpLHtrZXlkb3duOiJfcGFuZWxLZXlEb3duIn0pLHRoaXMuX3NldHVwRXZlbnRzKHIuZXZlbnQpfSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2hlYWRlcjp0aGlzLmFjdGl2ZSxjb250ZW50OnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5uZXh0KCk6ZSgpfX0sX2NyZWF0ZUljb25zOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLmljb25zO3QmJihlKCI8c3Bhbj4iKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1pY29uIHVpLWljb24gIit0LmhlYWRlcikucHJlcGVuZFRvKHRoaXMuaGVhZGVycyksdGhpcy5hY3RpdmUuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyh0LmhlYWRlcikuYWRkQ2xhc3ModC5hY3RpdmVIZWFkZXIpLHRoaXMuaGVhZGVycy5hZGRDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikpfSxfZGVzdHJveUljb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWFkZXJzLnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taWNvbnMiKS5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZSgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlO3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uIHVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXQiKS5yZW1vdmVBdHRyKCJyb2xlIiksdGhpcy5oZWFkZXJzLnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyIHVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLWhlbHBlci1yZXNldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIHVpLWNvcm5lci10b3AiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1zZWxlY3RlZCIpLnJlbW92ZUF0dHIoImFyaWEtY29udHJvbHMiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLmVhY2goZnVuY3Rpb24oKXsvXnVpLWFjY29yZGlvbi8udGVzdCh0aGlzLmlkKSYmdGhpcy5yZW1vdmVBdHRyaWJ1dGUoImlkIil9KSx0aGlzLl9kZXN0cm95SWNvbnMoKSxlPXRoaXMuaGVhZGVycy5uZXh0KCkuY3NzKCJkaXNwbGF5IiwiIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtbGFiZWxsZWRieSIpLnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItcmVzZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSB1aS1hY2NvcmRpb24tY29udGVudCB1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQiKS5lYWNoKGZ1bmN0aW9uKCl7L151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJpZCIpfSksdGhpcy5vcHRpb25zLmhlaWdodFN0eWxlIT09ImNvbnRlbnQiJiZlLmNzcygiaGVpZ2h0IiwiIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtpZihlPT09ImFjdGl2ZSIpe3RoaXMuX2FjdGl2YXRlKHQpO3JldHVybn1lPT09ImV2ZW50IiYmKHRoaXMub3B0aW9ucy5ldmVudCYmdGhpcy5fb2ZmKHRoaXMuaGVhZGVycyx0aGlzLm9wdGlvbnMuZXZlbnQpLHRoaXMuX3NldHVwRXZlbnRzKHQpKSx0aGlzLl9zdXBlcihlLHQpLGU9PT0iY29sbGFwc2libGUiJiYhdCYmdGhpcy5vcHRpb25zLmFjdGl2ZT09PSExJiZ0aGlzLl9hY3RpdmF0ZSgwKSxlPT09Imljb25zIiYmKHRoaXMuX2Rlc3Ryb3lJY29ucygpLHQmJnRoaXMuX2NyZWF0ZUljb25zKCkpLGU9PT0iZGlzYWJsZWQiJiZ0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpLnRvZ2dsZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIsISF0KX0sX2tleWRvd246ZnVuY3Rpb24odCl7aWYodC5hbHRLZXl8fHQuY3RybEtleSlyZXR1cm47dmFyIG49ZS51aS5rZXlDb2RlLHI9dGhpcy5oZWFkZXJzLmxlbmd0aCxpPXRoaXMuaGVhZGVycy5pbmRleCh0LnRhcmdldCkscz0hMTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIG4uUklHSFQ6Y2FzZSBuLkRPV046cz10aGlzLmhlYWRlcnNbKGkrMSklcl07YnJlYWs7Y2FzZSBuLkxFRlQ6Y2FzZSBuLlVQOnM9dGhpcy5oZWFkZXJzWyhpLTErciklcl07YnJlYWs7Y2FzZSBuLlNQQUNFOmNhc2Ugbi5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIodCk7YnJlYWs7Y2FzZSBuLkhPTUU6cz10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBuLkVORDpzPXRoaXMuaGVhZGVyc1tyLTFdfXMmJihlKHQudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGUocykuYXR0cigidGFiSW5kZXgiLDApLHMuZm9jdXMoKSx0LnByZXZlbnREZWZhdWx0KCkpfSxfcGFuZWxLZXlEb3duOmZ1bmN0aW9uKHQpe3Qua2V5Q29kZT09PWUudWkua2V5Q29kZS5VUCYmdC5jdHJsS2V5JiZlKHQuY3VycmVudFRhcmdldCkucHJldigpLmZvY3VzKCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxuLHI9dGhpcy5vcHRpb25zLmhlaWdodFN0eWxlLGk9dGhpcy5lbGVtZW50LnBhcmVudCgpO3I9PT0iZmlsbCI/KGUuc3VwcG9ydC5taW5IZWlnaHR8fChuPWkuY3NzKCJvdmVyZmxvdyIpLGkuY3NzKCJvdmVyZmxvdyIsImhpZGRlbiIpKSx0PWkuaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1lKHRoaXMpLHI9bi5jc3MoInBvc2l0aW9uIik7aWYocj09PSJhYnNvbHV0ZSJ8fHI9PT0iZml4ZWQiKXJldHVybjt0LT1uLm91dGVySGVpZ2h0KCEwKX0pLG4mJmkuY3NzKCJvdmVyZmxvdyIsbiksdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24oKXt0LT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe2UodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsdC1lKHRoaXMpLmlubmVySGVpZ2h0KCkrZSh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKCJvdmVyZmxvdyIsImF1dG8iKSk6cj09PSJhdXRvIiYmKHQ9MCx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXt0PU1hdGgubWF4KHQsZSh0aGlzKS5jc3MoImhlaWdodCIsIiIpLmhlaWdodCgpKX0pLmhlaWdodCh0KSl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLl9maW5kQWN0aXZlKHQpWzBdO2lmKG49PT10aGlzLmFjdGl2ZVswXSlyZXR1cm47bj1ufHx0aGlzLmFjdGl2ZVswXSx0aGlzLl9ldmVudEhhbmRsZXIoe3RhcmdldDpuLGN1cnJlbnRUYXJnZXQ6bixwcmV2ZW50RGVmYXVsdDplLm5vb3B9KX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT0ibnVtYmVyIj90aGlzLmhlYWRlcnMuZXEodCk6ZSgpfSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIG49e307aWYoIXQpcmV0dXJuO2UuZWFjaCh0LnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuW3RdPSJfZXZlbnRIYW5kbGVyIn0pLHRoaXMuX29uKHRoaXMuaGVhZGVycyxuKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzLmFjdGl2ZSxpPWUodC5jdXJyZW50VGFyZ2V0KSxzPWlbMF09PT1yWzBdLG89cyYmbi5jb2xsYXBzaWJsZSx1PW8/ZSgpOmkubmV4dCgpLGE9ci5uZXh0KCksZj17b2xkSGVhZGVyOnIsb2xkUGFuZWw6YSxuZXdIZWFkZXI6bz9lKCk6aSxuZXdQYW5lbDp1fTt0LnByZXZlbnREZWZhdWx0KCk7aWYocyYmIW4uY29sbGFwc2libGV8fHRoaXMuX3RyaWdnZXIoImJlZm9yZUFjdGl2YXRlIix0LGYpPT09ITEpcmV0dXJuO24uYWN0aXZlPW8/ITE6dGhpcy5oZWFkZXJzLmluZGV4KGkpLHRoaXMuYWN0aXZlPXM/ZSgpOmksdGhpcy5fdG9nZ2xlKGYpLHIucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLG4uaWNvbnMmJnIuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhuLmljb25zLmFjdGl2ZUhlYWRlcikuYWRkQ2xhc3Mobi5pY29ucy5oZWFkZXIpLHN8fChpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIikuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1oZWFkZXItYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSB1aS1jb3JuZXItdG9wIiksbi5pY29ucyYmaS5jaGlsZHJlbigiLnVpLWFjY29yZGlvbi1oZWFkZXItaWNvbiIpLnJlbW92ZUNsYXNzKG4uaWNvbnMuaGVhZGVyKS5hZGRDbGFzcyhuLmljb25zLmFjdGl2ZUhlYWRlciksaS5uZXh0KCkuYWRkQ2xhc3MoInVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSIpKX0sX3RvZ2dsZTpmdW5jdGlvbih0KXt2YXIgbj10Lm5ld1BhbmVsLHI9dGhpcy5wcmV2U2hvdy5sZW5ndGg/dGhpcy5wcmV2U2hvdzp0Lm9sZFBhbmVsO3RoaXMucHJldlNob3cuYWRkKHRoaXMucHJldkhpZGUpLnN0b3AoITAsITApLHRoaXMucHJldlNob3c9bix0aGlzLnByZXZIaWRlPXIsdGhpcy5vcHRpb25zLmFuaW1hdGU/dGhpcy5fYW5pbWF0ZShuLHIsdCk6KHIuaGlkZSgpLG4uc2hvdygpLHRoaXMuX3RvZ2dsZUNvbXBsZXRlKHQpKSxyLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSksci5wcmV2KCkuYXR0cigiYXJpYS1zZWxlY3RlZCIsImZhbHNlIiksbi5sZW5ndGgmJnIubGVuZ3RoP3IucHJldigpLmF0dHIoInRhYkluZGV4IiwtMSk6bi5sZW5ndGgmJnRoaXMuaGVhZGVycy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5hdHRyKCJ0YWJJbmRleCIpPT09MH0pLmF0dHIoInRhYkluZGV4IiwtMSksbi5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pLnByZXYoKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KX0sX2FuaW1hdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciBzLG8sdSxhPXRoaXMsZj0wLGw9ZS5sZW5ndGgmJighdC5sZW5ndGh8fGUuaW5kZXgoKTx0LmluZGV4KCkpLGM9dGhpcy5vcHRpb25zLmFuaW1hdGV8fHt9LGg9bCYmYy5kb3dufHxjLHA9ZnVuY3Rpb24oKXthLl90b2dnbGVDb21wbGV0ZShuKX07dHlwZW9mIGg9PSJudW1iZXIiJiYodT1oKSx0eXBlb2YgaD09InN0cmluZyImJihvPWgpLG89b3x8aC5lYXNpbmd8fGMuZWFzaW5nLHU9dXx8aC5kdXJhdGlvbnx8Yy5kdXJhdGlvbjtpZighdC5sZW5ndGgpcmV0dXJuIGUuYW5pbWF0ZShpLHUsbyxwKTtpZighZS5sZW5ndGgpcmV0dXJuIHQuYW5pbWF0ZShyLHUsbyxwKTtzPWUuc2hvdygpLm91dGVySGVpZ2h0KCksdC5hbmltYXRlKHIse2R1cmF0aW9uOnUsZWFzaW5nOm8sc3RlcDpmdW5jdGlvbihlLHQpe3Qubm93PU1hdGgucm91bmQoZSl9fSksZS5oaWRlKCkuYW5pbWF0ZShpLHtkdXJhdGlvbjp1LGVhc2luZzpvLGNvbXBsZXRlOnAsc3RlcDpmdW5jdGlvbihlLG4pe24ubm93PU1hdGgucm91bmQoZSksbi5wcm9wIT09ImhlaWdodCI/Zis9bi5ub3c6YS5vcHRpb25zLmhlaWdodFN0eWxlIT09ImNvbnRlbnQiJiYobi5ub3c9TWF0aC5yb3VuZChzLXQub3V0ZXJIZWlnaHQoKS1mKSxmPTApfX0pfSxfdG9nZ2xlQ29tcGxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5vbGRQYW5lbDt0LnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5wcmV2KCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci10b3AiKS5hZGRDbGFzcygidWktY29ybmVyLWFsbCIpLHQubGVuZ3RoJiYodC5wYXJlbnQoKVswXS5jbGFzc05hbWU9dC5wYXJlbnQoKVswXS5jbGFzc05hbWUpLHRoaXMuX3RyaWdnZXIoImFjdGl2YXRlIixudWxsLGUpfX0pLGUudWlCYWNrQ29tcGF0IT09ITEmJihmdW5jdGlvbihlLHQpe2UuZXh0ZW5kKHQub3B0aW9ucyx7bmF2aWdhdGlvbjohMSxuYXZpZ2F0aW9uRmlsdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHJlZi50b0xvd2VyQ2FzZSgpPT09bG9jYXRpb24uaHJlZi50b0xvd2VyQ2FzZSgpfX0pO3ZhciBuPXQuX2NyZWF0ZTt0Ll9jcmVhdGU9ZnVuY3Rpb24oKXtpZih0aGlzLm9wdGlvbnMubmF2aWdhdGlvbil7dmFyIHQ9dGhpcyxyPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5oZWFkZXIpLGk9ci5uZXh0KCkscz1yLmFkZChpKS5maW5kKCJhIikuZmlsdGVyKHRoaXMub3B0aW9ucy5uYXZpZ2F0aW9uRmlsdGVyKVswXTtzJiZyLmFkZChpKS5lYWNoKGZ1bmN0aW9uKG4pe2lmKGUuY29udGFpbnModGhpcyxzKSlyZXR1cm4gdC5vcHRpb25zLmFjdGl2ZT1NYXRoLmZsb29yKG4vMiksITF9KX1uLmNhbGwodGhpcyl9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7ZS5leHRlbmQodC5vcHRpb25zLHtoZWlnaHRTdHlsZTpudWxsLGF1dG9IZWlnaHQ6ITAsY2xlYXJTdHlsZTohMSxmaWxsU3BhY2U6ITF9KTt2YXIgbj10Ll9jcmVhdGUscj10Ll9zZXRPcHRpb247ZS5leHRlbmQodCx7X2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5oZWlnaHRTdHlsZT10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGV8fHRoaXMuX21lcmdlSGVpZ2h0U3R5bGUoKSxuLmNhbGwodGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSl7aWYoZT09PSJhdXRvSGVpZ2h0Inx8ZT09PSJjbGVhclN0eWxlInx8ZT09PSJmaWxsU3BhY2UiKXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZT10aGlzLl9tZXJnZUhlaWdodFN0eWxlKCk7ci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9tZXJnZUhlaWdodFN0eWxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO2lmKGUuZmlsbFNwYWNlKXJldHVybiJmaWxsIjtpZihlLmNsZWFyU3R5bGUpcmV0dXJuImNvbnRlbnQiO2lmKGUuYXV0b0hlaWdodClyZXR1cm4iYXV0byJ9fSl9KGpRdWVyeSxqUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZSksZnVuY3Rpb24oZSx0KXtlLmV4dGVuZCh0Lm9wdGlvbnMuaWNvbnMse2FjdGl2ZUhlYWRlcjpudWxsLGhlYWRlclNlbGVjdGVkOiJ1aS1pY29uLXRyaWFuZ2xlLTEtcyJ9KTt2YXIgbj10Ll9jcmVhdGVJY29uczt0Ll9jcmVhdGVJY29ucz1mdW5jdGlvbigpe3RoaXMub3B0aW9ucy5pY29ucyYmKHRoaXMub3B0aW9ucy5pY29ucy5hY3RpdmVIZWFkZXI9dGhpcy5vcHRpb25zLmljb25zLmFjdGl2ZUhlYWRlcnx8dGhpcy5vcHRpb25zLmljb25zLmhlYWRlclNlbGVjdGVkKSxuLmNhbGwodGhpcyl9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpLGZ1bmN0aW9uKGUsdCl7dC5hY3RpdmF0ZT10Ll9hY3RpdmF0ZTt2YXIgbj10Ll9maW5kQWN0aXZlO3QuX2ZpbmRBY3RpdmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0tMSYmKGU9ITEpLGUmJnR5cGVvZiBlIT0ibnVtYmVyIiYmKGU9dGhpcy5oZWFkZXJzLmluZGV4KHRoaXMuaGVhZGVycy5maWx0ZXIoZSkpLGU9PT0tMSYmKGU9ITEpKSxuLmNhbGwodGhpcyxlKX19KGpRdWVyeSxqUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZSksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUucmVzaXplPWpRdWVyeS51aS5hY2NvcmRpb24ucHJvdG90eXBlLnJlZnJlc2gsZnVuY3Rpb24oZSx0KXtlLmV4dGVuZCh0Lm9wdGlvbnMse2NoYW5nZTpudWxsLGNoYW5nZXN0YXJ0Om51bGx9KTt2YXIgbj10Ll90cmlnZ2VyO3QuX3RyaWdnZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpPyhlPT09ImJlZm9yZUFjdGl2YXRlIj9pPW4uY2FsbCh0aGlzLCJjaGFuZ2VzdGFydCIsdCx7b2xkSGVhZGVyOnIub2xkSGVhZGVyLG9sZENvbnRlbnQ6ci5vbGRQYW5lbCxuZXdIZWFkZXI6ci5uZXdIZWFkZXIsbmV3Q29udGVudDpyLm5ld1BhbmVsfSk6ZT09PSJhY3RpdmF0ZSImJihpPW4uY2FsbCh0aGlzLCJjaGFuZ2UiLHQse29sZEhlYWRlcjpyLm9sZEhlYWRlcixvbGRDb250ZW50OnIub2xkUGFuZWwsbmV3SGVhZGVyOnIubmV3SGVhZGVyLG5ld0NvbnRlbnQ6ci5uZXdQYW5lbH0pKSxpKTohMX19KGpRdWVyeSxqUXVlcnkudWkuYWNjb3JkaW9uLnByb3RvdHlwZSksZnVuY3Rpb24oZSx0KXtlLmV4dGVuZCh0Lm9wdGlvbnMse2FuaW1hdGU6bnVsbCxhbmltYXRlZDoic2xpZGUifSk7dmFyIG49dC5fY3JlYXRlO3QuX2NyZWF0ZT1mdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztlLmFuaW1hdGU9PT1udWxsJiYoZS5hbmltYXRlZD9lLmFuaW1hdGVkPT09InNsaWRlIj9lLmFuaW1hdGU9MzAwOmUuYW5pbWF0ZWQ9PT0iYm91bmNlc2xpZGUiP2UuYW5pbWF0ZT17ZHVyYXRpb246MjAwLGRvd246e2Vhc2luZzoiZWFzZU91dEJvdW5jZSIsZHVyYXRpb246MWUzfX06ZS5hbmltYXRlPWUuYW5pbWF0ZWQ6ZS5hbmltYXRlPSExKSxuLmNhbGwodGhpcyl9fShqUXVlcnksalF1ZXJ5LnVpLmFjY29yZGlvbi5wcm90b3R5cGUpKX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7dmFyIG49MDtlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIix7dmVyc2lvbjoiMS45LjIiLGRlZmF1bHRFbGVtZW50OiI8aW5wdXQ+IixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b0ZvY3VzOiExLGRlbGF5OjMwMCxtaW5MZW5ndGg6MSxwb3NpdGlvbjp7bXk6ImxlZnQgdG9wIixhdDoibGVmdCBib3R0b20iLGNvbGxpc2lvbjoibm9uZSJ9LHNvdXJjZTpudWxsLGNoYW5nZTpudWxsLGNsb3NlOm51bGwsZm9jdXM6bnVsbCxvcGVuOm51bGwscmVzcG9uc2U6bnVsbCxzZWFyY2g6bnVsbCxzZWxlY3Q6bnVsbH0scGVuZGluZzowLF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdCxuLHI7dGhpcy5pc011bHRpTGluZT10aGlzLl9pc011bHRpTGluZSgpLHRoaXMudmFsdWVNZXRob2Q9dGhpcy5lbGVtZW50W3RoaXMuZWxlbWVudC5pcygiaW5wdXQsdGV4dGFyZWEiKT8idmFsIjoidGV4dCJdLHRoaXMuaXNOZXdNZW51PSEwLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikuYXR0cigiYXV0b2NvbXBsZXRlIiwib2ZmIiksdGhpcy5fb24odGhpcy5lbGVtZW50LHtrZXlkb3duOmZ1bmN0aW9uKGkpe2lmKHRoaXMuZWxlbWVudC5wcm9wKCJyZWFkT25seSIpKXt0PSEwLHI9ITAsbj0hMDtyZXR1cm59dD0hMSxyPSExLG49ITE7dmFyIHM9ZS51aS5rZXlDb2RlO3N3aXRjaChpLmtleUNvZGUpe2Nhc2Ugcy5QQUdFX1VQOnQ9ITAsdGhpcy5fbW92ZSgicHJldmlvdXNQYWdlIixpKTticmVhaztjYXNlIHMuUEFHRV9ET1dOOnQ9ITAsdGhpcy5fbW92ZSgibmV4dFBhZ2UiLGkpO2JyZWFrO2Nhc2Ugcy5VUDp0PSEwLHRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIsaSk7YnJlYWs7Y2FzZSBzLkRPV046dD0hMCx0aGlzLl9rZXlFdmVudCgibmV4dCIsaSk7YnJlYWs7Y2FzZSBzLkVOVEVSOmNhc2Ugcy5OVU1QQURfRU5URVI6dGhpcy5tZW51LmFjdGl2ZSYmKHQ9ITAsaS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMubWVudS5zZWxlY3QoaSkpO2JyZWFrO2Nhc2Ugcy5UQUI6dGhpcy5tZW51LmFjdGl2ZSYmdGhpcy5tZW51LnNlbGVjdChpKTticmVhaztjYXNlIHMuRVNDQVBFOnRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5fdmFsdWUodGhpcy50ZXJtKSx0aGlzLmNsb3NlKGkpLGkucHJldmVudERlZmF1bHQoKSk7YnJlYWs7ZGVmYXVsdDpuPSEwLHRoaXMuX3NlYXJjaFRpbWVvdXQoaSl9fSxrZXlwcmVzczpmdW5jdGlvbihyKXtpZih0KXt0PSExLHIucHJldmVudERlZmF1bHQoKTtyZXR1cm59aWYobilyZXR1cm47dmFyIGk9ZS51aS5rZXlDb2RlO3N3aXRjaChyLmtleUNvZGUpe2Nhc2UgaS5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscik7YnJlYWs7Y2FzZSBpLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscik7YnJlYWs7Y2FzZSBpLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscik7YnJlYWs7Y2FzZSBpLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHIpfX0saW5wdXQ6ZnVuY3Rpb24oZSl7aWYocil7cj0hMSxlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJufXRoaXMuX3NlYXJjaFRpbWVvdXQoZSl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24oZSl7aWYodGhpcy5jYW5jZWxCbHVyKXtkZWxldGUgdGhpcy5jYW5jZWxCbHVyO3JldHVybn1jbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UoZSksdGhpcy5fY2hhbmdlKGUpfX0pLHRoaXMuX2luaXRTb3VyY2UoKSx0aGlzLm1lbnU9ZSgiPHVsPiIpLmFkZENsYXNzKCJ1aS1hdXRvY29tcGxldGUiKS5hcHBlbmRUbyh0aGlzLmRvY3VtZW50LmZpbmQodGhpcy5vcHRpb25zLmFwcGVuZFRvfHwiYm9keSIpWzBdKS5tZW51KHtpbnB1dDplKCkscm9sZTpudWxsfSkuekluZGV4KHRoaXMuZWxlbWVudC56SW5kZXgoKSsxKS5oaWRlKCkuZGF0YSgibWVudSIpLHRoaXMuX29uKHRoaXMubWVudS5lbGVtZW50LHttb3VzZWRvd246ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXJ9KTt2YXIgbj10aGlzLm1lbnUuZWxlbWVudFswXTtlKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikubGVuZ3RofHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5kb2N1bWVudC5vbmUoIm1vdXNlZG93biIsZnVuY3Rpb24ocil7ci50YXJnZXQhPT10LmVsZW1lbnRbMF0mJnIudGFyZ2V0IT09biYmIWUuY29udGFpbnMobixyLnRhcmdldCkmJnQuY2xvc2UoKX0pfSl9LG1lbnVmb2N1czpmdW5jdGlvbih0LG4pe2lmKHRoaXMuaXNOZXdNZW51KXt0aGlzLmlzTmV3TWVudT0hMTtpZih0Lm9yaWdpbmFsRXZlbnQmJi9ebW91c2UvLnRlc3QodC5vcmlnaW5hbEV2ZW50LnR5cGUpKXt0aGlzLm1lbnUuYmx1cigpLHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7ZSh0LnRhcmdldCkudHJpZ2dlcih0Lm9yaWdpbmFsRXZlbnQpfSk7cmV0dXJufX12YXIgcj1uLml0ZW0uZGF0YSgidWktYXV0b2NvbXBsZXRlLWl0ZW0iKXx8bi5pdGVtLmRhdGEoIml0ZW0uYXV0b2NvbXBsZXRlIik7ITEhPT10aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCx7aXRlbTpyfSk/dC5vcmlnaW5hbEV2ZW50JiYvXmtleS8udGVzdCh0Lm9yaWdpbmFsRXZlbnQudHlwZSkmJnRoaXMuX3ZhbHVlKHIudmFsdWUpOnRoaXMubGl2ZVJlZ2lvbi50ZXh0KHIudmFsdWUpfSxtZW51c2VsZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5pdGVtLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIil8fHQuaXRlbS5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIpLHI9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXIsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXIsdGhpcy5zZWxlY3RlZEl0ZW09bn0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsZSx7aXRlbTpufSkmJnRoaXMuX3ZhbHVlKG4udmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UoZSksdGhpcy5zZWxlY3RlZEl0ZW09bn19KSx0aGlzLmxpdmVSZWdpb249ZSgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIn0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5pbnNlcnRBZnRlcih0aGlzLmVsZW1lbnQpLGUuZm4uYmdpZnJhbWUmJnRoaXMubWVudS5lbGVtZW50LmJnaWZyYW1lKCksdGhpcy5fb24odGhpcy53aW5kb3cse2JlZm9yZXVubG9hZDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKX19KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYXV0b2NvbXBsZXRlLWlucHV0IikucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIiksdGhpcy5tZW51LmVsZW1lbnQucmVtb3ZlKCksdGhpcy5saXZlUmVnaW9uLnJlbW92ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7dGhpcy5fc3VwZXIoZSx0KSxlPT09InNvdXJjZSImJnRoaXMuX2luaXRTb3VyY2UoKSxlPT09ImFwcGVuZFRvIiYmdGhpcy5tZW51LmVsZW1lbnQuYXBwZW5kVG8odGhpcy5kb2N1bWVudC5maW5kKHR8fCJib2R5IilbMF0pLGU9PT0iZGlzYWJsZWQiJiZ0JiZ0aGlzLnhociYmdGhpcy54aHIuYWJvcnQoKX0sX2lzTXVsdGlMaW5lOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5pcygidGV4dGFyZWEiKT8hMDp0aGlzLmVsZW1lbnQuaXMoImlucHV0Iik/ITE6dGhpcy5lbGVtZW50LnByb3AoImlzQ29udGVudEVkaXRhYmxlIil9LF9pbml0U291cmNlOmZ1bmN0aW9uKCl7dmFyIHQsbixyPXRoaXM7ZS5pc0FycmF5KHRoaXMub3B0aW9ucy5zb3VyY2UpPyh0PXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24obixyKXtyKGUudWkuYXV0b2NvbXBsZXRlLmZpbHRlcih0LG4udGVybSkpfSk6dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U9PSJzdHJpbmciPyhuPXRoaXMub3B0aW9ucy5zb3VyY2UsdGhpcy5zb3VyY2U9ZnVuY3Rpb24odCxpKXtyLnhociYmci54aHIuYWJvcnQoKSxyLnhocj1lLmFqYXgoe3VybDpuLGRhdGE6dCxkYXRhVHlwZToianNvbiIsc3VjY2VzczpmdW5jdGlvbihlKXtpKGUpfSxlcnJvcjpmdW5jdGlvbigpe2koW10pfX0pfSk6dGhpcy5zb3VyY2U9dGhpcy5vcHRpb25zLnNvdXJjZX0sX3NlYXJjaFRpbWVvdXQ6ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KHRoaXMuc2VhcmNoaW5nKSx0aGlzLnNlYXJjaGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMudGVybSE9PXRoaXMuX3ZhbHVlKCkmJih0aGlzLnNlbGVjdGVkSXRlbT1udWxsLHRoaXMuc2VhcmNoKG51bGwsZSkpfSx0aGlzLm9wdGlvbnMuZGVsYXkpfSxzZWFyY2g6ZnVuY3Rpb24oZSx0KXtlPWUhPW51bGw/ZTp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpO2lmKGUubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGgpcmV0dXJuIHRoaXMuY2xvc2UodCk7aWYodGhpcy5fdHJpZ2dlcigic2VhcmNoIix0KT09PSExKXJldHVybjtyZXR1cm4gdGhpcy5fc2VhcmNoKGUpfSxfc2VhcmNoOmZ1bmN0aW9uKGUpe3RoaXMucGVuZGluZysrLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYXV0b2NvbXBsZXRlLWxvYWRpbmciKSx0aGlzLmNhbmNlbFNlYXJjaD0hMSx0aGlzLnNvdXJjZSh7dGVybTplfSx0aGlzLl9yZXNwb25zZSgpKX0sX3Jlc3BvbnNlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PSsrbjtyZXR1cm4gZnVuY3Rpb24ocil7dD09PW4mJmUuX19yZXNwb25zZShyKSxlLnBlbmRpbmctLSxlLnBlbmRpbmd8fGUuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYXV0b2NvbXBsZXRlLWxvYWRpbmciKX19LF9fcmVzcG9uc2U6ZnVuY3Rpb24oZSl7ZSYmKGU9dGhpcy5fbm9ybWFsaXplKGUpKSx0aGlzLl90cmlnZ2VyKCJyZXNwb25zZSIsbnVsbCx7Y29udGVudDplfSksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmZSYmZS5sZW5ndGgmJiF0aGlzLmNhbmNlbFNlYXJjaD8odGhpcy5fc3VnZ2VzdChlKSx0aGlzLl90cmlnZ2VyKCJvcGVuIikpOnRoaXMuX2Nsb3NlKCl9LGNsb3NlOmZ1bmN0aW9uKGUpe3RoaXMuY2FuY2VsU2VhcmNoPSEwLHRoaXMuX2Nsb3NlKGUpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikmJih0aGlzLm1lbnUuZWxlbWVudC5oaWRlKCksdGhpcy5tZW51LmJsdXIoKSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsZSkpfSxfY2hhbmdlOmZ1bmN0aW9uKGUpe3RoaXMucHJldmlvdXMhPT10aGlzLl92YWx1ZSgpJiZ0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUse2l0ZW06dGhpcy5zZWxlY3RlZEl0ZW19KX0sX25vcm1hbGl6ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5sZW5ndGgmJnRbMF0ubGFiZWwmJnRbMF0udmFsdWU/dDplLm1hcCh0LGZ1bmN0aW9uKHQpe3JldHVybiB0eXBlb2YgdD09InN0cmluZyI/e2xhYmVsOnQsdmFsdWU6dH06ZS5leHRlbmQoe2xhYmVsOnQubGFiZWx8fHQudmFsdWUsdmFsdWU6dC52YWx1ZXx8dC5sYWJlbH0sdCl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKS56SW5kZXgodGhpcy5lbGVtZW50LnpJbmRleCgpKzEpO3RoaXMuX3JlbmRlck1lbnUobix0KSx0aGlzLm1lbnUucmVmcmVzaCgpLG4uc2hvdygpLHRoaXMuX3Jlc2l6ZU1lbnUoKSxuLnBvc2l0aW9uKGUuZXh0ZW5kKHtvZjp0aGlzLmVsZW1lbnR9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLHRoaXMub3B0aW9ucy5hdXRvRm9jdXMmJnRoaXMubWVudS5uZXh0KCl9LF9yZXNpemVNZW51OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5tZW51LmVsZW1lbnQ7ZS5vdXRlcldpZHRoKE1hdGgubWF4KGUud2lkdGgoIiIpLm91dGVyV2lkdGgoKSsxLHRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCkpKX0sX3JlbmRlck1lbnU6ZnVuY3Rpb24odCxuKXt2YXIgcj10aGlzO2UuZWFjaChuLGZ1bmN0aW9uKGUsbil7ci5fcmVuZGVySXRlbURhdGEodCxuKX0pfSxfcmVuZGVySXRlbURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5fcmVuZGVySXRlbShlLHQpLmRhdGEoInVpLWF1dG9jb21wbGV0ZS1pdGVtIix0KX0sX3JlbmRlckl0ZW06ZnVuY3Rpb24odCxuKXtyZXR1cm4gZSgiPGxpPiIpLmFwcGVuZChlKCI8YT4iKS50ZXh0KG4ubGFiZWwpKS5hcHBlbmRUbyh0KX0sX21vdmU6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpe3RoaXMuc2VhcmNoKG51bGwsdCk7cmV0dXJufWlmKHRoaXMubWVudS5pc0ZpcnN0SXRlbSgpJiYvXnByZXZpb3VzLy50ZXN0KGUpfHx0aGlzLm1lbnUuaXNMYXN0SXRlbSgpJiYvXm5leHQvLnRlc3QoZSkpe3RoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5tZW51LmJsdXIoKTtyZXR1cm59dGhpcy5tZW51W2VdKHQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24oZSx0KXtpZighdGhpcy5pc011bHRpTGluZXx8dGhpcy5tZW51LmVsZW1lbnQuaXMoIjp2aXNpYmxlIikpdGhpcy5fbW92ZShlLHQpLHQucHJldmVudERlZmF1bHQoKX19KSxlLmV4dGVuZChlLnVpLmF1dG9jb21wbGV0ZSx7ZXNjYXBlUmVnZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfSxmaWx0ZXI6ZnVuY3Rpb24odCxuKXt2YXIgcj1uZXcgUmVnRXhwKGUudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KG4pLCJpIik7cmV0dXJuIGUuZ3JlcCh0LGZ1bmN0aW9uKGUpe3JldHVybiByLnRlc3QoZS5sYWJlbHx8ZS52YWx1ZXx8ZSl9KX19KSxlLndpZGdldCgidWkuYXV0b2NvbXBsZXRlIixlLnVpLmF1dG9jb21wbGV0ZSx7b3B0aW9uczp7bWVzc2FnZXM6e25vUmVzdWx0czoiTm8gc2VhcmNoIHJlc3VsdHMuIixyZXN1bHRzOmZ1bmN0aW9uKGUpe3JldHVybiBlKyhlPjE/IiByZXN1bHRzIGFyZSI6IiByZXN1bHQgaXMiKSsiIGF2YWlsYWJsZSwgdXNlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbmF2aWdhdGUuIn19fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKGUpe3ZhciB0O3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKTtpZih0aGlzLm9wdGlvbnMuZGlzYWJsZWR8fHRoaXMuY2FuY2VsU2VhcmNoKXJldHVybjtlJiZlLmxlbmd0aD90PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5yZXN1bHRzKGUubGVuZ3RoKTp0PXRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLnRleHQodCl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuLHIsaSxzLG89InVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIix1PSJ1aS1zdGF0ZS1ob3ZlciB1aS1zdGF0ZS1hY3RpdmUgIixhPSJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IixmPWZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKS5maW5kKCI6dWktYnV0dG9uIik7c2V0VGltZW91dChmdW5jdGlvbigpe3QuYnV0dG9uKCJyZWZyZXNoIil9LDEpfSxsPWZ1bmN0aW9uKHQpe3ZhciBuPXQubmFtZSxyPXQuZm9ybSxpPWUoW10pO3JldHVybiBuJiYocj9pPWUocikuZmluZCgiW25hbWU9JyIrbisiJ10iKTppPWUoIltuYW1lPSciK24rIiddIix0Lm93bmVyRG9jdW1lbnQpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiF0aGlzLmZvcm19KSksaX07ZS53aWRnZXQoInVpLmJ1dHRvbiIse3ZlcnNpb246IjEuOS4yIixkZWZhdWx0RWxlbWVudDoiPGJ1dHRvbj4iLG9wdGlvbnM6e2Rpc2FibGVkOm51bGwsdGV4dDohMCxsYWJlbDpudWxsLGljb25zOntwcmltYXJ5Om51bGwsc2Vjb25kYXJ5Om51bGx9fSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmNsb3Nlc3QoImZvcm0iKS51bmJpbmQoInJlc2V0Iit0aGlzLmV2ZW50TmFtZXNwYWNlKS5iaW5kKCJyZXNldCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmKSx0eXBlb2YgdGhpcy5vcHRpb25zLmRpc2FibGVkIT0iYm9vbGVhbiI/dGhpcy5vcHRpb25zLmRpc2FibGVkPSEhdGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIik6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2RldGVybWluZUJ1dHRvblR5cGUoKSx0aGlzLmhhc1RpdGxlPSEhdGhpcy5idXR0b25FbGVtZW50LmF0dHIoInRpdGxlIik7dmFyIHQ9dGhpcyx1PXRoaXMub3B0aW9ucyxhPXRoaXMudHlwZT09PSJjaGVja2JveCJ8fHRoaXMudHlwZT09PSJyYWRpbyIsYz1hPyIiOiJ1aS1zdGF0ZS1hY3RpdmUiLGg9InVpLXN0YXRlLWZvY3VzIjt1LmxhYmVsPT09bnVsbCYmKHUubGFiZWw9dGhpcy50eXBlPT09ImlucHV0Ij90aGlzLmJ1dHRvbkVsZW1lbnQudmFsKCk6dGhpcy5idXR0b25FbGVtZW50Lmh0bWwoKSksdGhpcy5faG92ZXJhYmxlKHRoaXMuYnV0dG9uRWxlbWVudCksdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKG8pLmF0dHIoInJvbGUiLCJidXR0b24iKS5iaW5kKCJtb3VzZWVudGVyIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYodS5kaXNhYmxlZClyZXR1cm47dGhpcz09PW4mJmUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgibW91c2VsZWF2ZSIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO2UodGhpcykucmVtb3ZlQ2xhc3MoYyl9KS5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbihlKXt1LmRpc2FibGVkJiYoZS5wcmV2ZW50RGVmYXVsdCgpLGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCkpfSksdGhpcy5lbGVtZW50LmJpbmQoImZvY3VzIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7dC5idXR0b25FbGVtZW50LmFkZENsYXNzKGgpfSkuYmluZCgiYmx1ciIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe3QuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhoKX0pLGEmJih0aGlzLmVsZW1lbnQuYmluZCgiY2hhbmdlIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYocylyZXR1cm47dC5yZWZyZXNoKCl9KSx0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgibW91c2Vkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKGUpe2lmKHUuZGlzYWJsZWQpcmV0dXJuO3M9ITEscj1lLnBhZ2VYLGk9ZS5wYWdlWX0pLmJpbmQoIm1vdXNldXAiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oZSl7aWYodS5kaXNhYmxlZClyZXR1cm47aWYociE9PWUucGFnZVh8fGkhPT1lLnBhZ2VZKXM9ITB9KSksdGhpcy50eXBlPT09ImNoZWNrYm94Ij90aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtpZih1LmRpc2FibGVkfHxzKXJldHVybiExO2UodGhpcykudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHQuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLHQuZWxlbWVudFswXS5jaGVja2VkKX0pOnRoaXMudHlwZT09PSJyYWRpbyI/dGhpcy5idXR0b25FbGVtZW50LmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7aWYodS5kaXNhYmxlZHx8cylyZXR1cm4hMTtlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0LmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpO3ZhciBuPXQuZWxlbWVudFswXTtsKG4pLm5vdChuKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KToodGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWQpcmV0dXJuITE7ZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksbj10aGlzLHQuZG9jdW1lbnQub25lKCJtb3VzZXVwIixmdW5jdGlvbigpe249bnVsbH0pfSkuYmluZCgibW91c2V1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHUuZGlzYWJsZWQpcmV0dXJuITE7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KS5iaW5kKCJrZXlkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKHQpe2lmKHUuZGlzYWJsZWQpcmV0dXJuITE7KHQua2V5Q29kZT09PWUudWkua2V5Q29kZS5TUEFDRXx8dC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVOVEVSKSYmZSh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KS5iaW5kKCJrZXl1cCIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSksdGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbih0KXt0LmtleUNvZGU9PT1lLnVpLmtleUNvZGUuU1BBQ0UmJmUodGhpcykuY2xpY2soKX0pKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIix1LmRpc2FibGVkKSx0aGlzLl9yZXNldEJ1dHRvbigpfSxfZGV0ZXJtaW5lQnV0dG9uVHlwZTpmdW5jdGlvbigpe3ZhciBlLHQsbjt0aGlzLmVsZW1lbnQuaXMoIlt0eXBlPWNoZWNrYm94XSIpP3RoaXMudHlwZT0iY2hlY2tib3giOnRoaXMuZWxlbWVudC5pcygiW3R5cGU9cmFkaW9dIik/dGhpcy50eXBlPSJyYWRpbyI6dGhpcy5lbGVtZW50LmlzKCJpbnB1dCIpP3RoaXMudHlwZT0iaW5wdXQiOnRoaXMudHlwZT0iYnV0dG9uIix0aGlzLnR5cGU9PT0iY2hlY2tib3gifHx0aGlzLnR5cGU9PT0icmFkaW8iPyhlPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkubGFzdCgpLHQ9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbmQodCksdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aHx8KGU9ZS5sZW5ndGg/ZS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpLHRoaXMuYnV0dG9uRWxlbWVudD1lLmZpbHRlcih0KSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodGhpcy5idXR0b25FbGVtZW50PWUuZmluZCh0KSkpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIiksbj10aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIiksbiYmdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmJ1dHRvbkVsZW1lbnQucHJvcCgiYXJpYS1wcmVzc2VkIixuKSk6dGhpcy5idXR0b25FbGVtZW50PXRoaXMuZWxlbWVudH0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYnV0dG9uRWxlbWVudH0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZSIpLHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhvKyIgIit1KyIgIithKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS1wcmVzc2VkIikuaHRtbCh0aGlzLmJ1dHRvbkVsZW1lbnQuZmluZCgiLnVpLWJ1dHRvbi10ZXh0IikuaHRtbCgpKSx0aGlzLmhhc1RpdGxlfHx0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQXR0cigidGl0bGUiKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe3RoaXMuX3N1cGVyKGUsdCk7aWYoZT09PSJkaXNhYmxlZCIpe3Q/dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMCk6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMSk7cmV0dXJufXRoaXMuX3Jlc2V0QnV0dG9uKCl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuaXMoImlucHV0LCBidXR0b24iKT90aGlzLmVsZW1lbnQuaXMoIjpkaXNhYmxlZCIpOnRoaXMuZWxlbWVudC5oYXNDbGFzcygidWktYnV0dG9uLWRpc2FibGVkIik7dCE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsdCksdGhpcy50eXBlPT09InJhZGlvIj9sKHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe2UodGhpcykuaXMoIjpjaGVja2VkIik/ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6ZSh0aGlzKS5idXR0b24oIndpZGdldCIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6dGhpcy50eXBlPT09ImNoZWNrYm94IiYmKHRoaXMuZWxlbWVudC5pcygiOmNoZWNrZWQiKT90aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTp0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIikpfSxfcmVzZXRCdXR0b246ZnVuY3Rpb24oKXtpZih0aGlzLnR5cGU9PT0iaW5wdXQiKXt0aGlzLm9wdGlvbnMubGFiZWwmJnRoaXMuZWxlbWVudC52YWwodGhpcy5vcHRpb25zLmxhYmVsKTtyZXR1cm59dmFyIHQ9dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKGEpLG49ZSgiPHNwYW4+PC9zcGFuPiIsdGhpcy5kb2N1bWVudFswXSkuYWRkQ2xhc3MoInVpLWJ1dHRvbi10ZXh0IikuaHRtbCh0aGlzLm9wdGlvbnMubGFiZWwpLmFwcGVuZFRvKHQuZW1wdHkoKSkudGV4dCgpLHI9dGhpcy5vcHRpb25zLmljb25zLGk9ci5wcmltYXJ5JiZyLnNlY29uZGFyeSxzPVtdO3IucHJpbWFyeXx8ci5zZWNvbmRhcnk/KHRoaXMub3B0aW9ucy50ZXh0JiZzLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhpPyJzIjpyLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKSxyLnByaW1hcnkmJnQucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK3IucHJpbWFyeSsiJz48L3NwYW4+Iiksci5zZWNvbmRhcnkmJnQuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIityLnNlY29uZGFyeSsiJz48L3NwYW4+IiksdGhpcy5vcHRpb25zLnRleHR8fChzLnB1c2goaT8idWktYnV0dG9uLWljb25zLW9ubHkiOiJ1aS1idXR0b24taWNvbi1vbmx5IiksdGhpcy5oYXNUaXRsZXx8dC5hdHRyKCJ0aXRsZSIsZS50cmltKG4pKSkpOnMucHVzaCgidWktYnV0dG9uLXRleHQtb25seSIpLHQuYWRkQ2xhc3Mocy5qb2luKCIgIikpfX0pLGUud2lkZ2V0KCJ1aS5idXR0b25zZXQiLHt2ZXJzaW9uOiIxLjkuMiIsb3B0aW9uczp7aXRlbXM6ImJ1dHRvbiwgaW5wdXRbdHlwZT1idXR0b25dLCBpbnB1dFt0eXBlPXN1Ym1pdF0sIGlucHV0W3R5cGU9cmVzZXRdLCBpbnB1dFt0eXBlPWNoZWNrYm94XSwgaW5wdXRbdHlwZT1yYWRpb10sIGEsIDpkYXRhKGJ1dHRvbikifSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1idXR0b25zZXQiKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2goKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2U9PT0iZGlzYWJsZWQiJiZ0aGlzLmJ1dHRvbnMuYnV0dG9uKCJvcHRpb24iLGUsdCksdGhpcy5fc3VwZXIoZSx0KX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudC5jc3MoImRpcmVjdGlvbiIpPT09InJ0bCI7dGhpcy5idXR0b25zPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlsdGVyKCI6dWktYnV0dG9uIikuYnV0dG9uKCJyZWZyZXNoIikuZW5kKCkubm90KCI6dWktYnV0dG9uIikuYnV0dG9uKCkuZW5kKCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIHVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodCIpLmZpbHRlcigiOmZpcnN0IikuYWRkQ2xhc3ModD8idWktY29ybmVyLXJpZ2h0IjoidWktY29ybmVyLWxlZnQiKS5lbmQoKS5maWx0ZXIoIjpsYXN0IikuYWRkQ2xhc3ModD8idWktY29ybmVyLWxlZnQiOiJ1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5lbmQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWJ1dHRvbnNldCIpLHRoaXMuYnV0dG9ucy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmJ1dHRvbigiZGVzdHJveSIpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oJCx1bmRlZmluZWQpe2Z1bmN0aW9uIERhdGVwaWNrZXIoKXt0aGlzLmRlYnVnPSExLHRoaXMuX2N1ckluc3Q9bnVsbCx0aGlzLl9rZXlFdmVudD0hMSx0aGlzLl9kaXNhYmxlZElucHV0cz1bXSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSx0aGlzLl9pbkRpYWxvZz0hMSx0aGlzLl9tYWluRGl2SWQ9InVpLWRhdGVwaWNrZXItZGl2Iix0aGlzLl9pbmxpbmVDbGFzcz0idWktZGF0ZXBpY2tlci1pbmxpbmUiLHRoaXMuX2FwcGVuZENsYXNzPSJ1aS1kYXRlcGlja2VyLWFwcGVuZCIsdGhpcy5fdHJpZ2dlckNsYXNzPSJ1aS1kYXRlcGlja2VyLXRyaWdnZXIiLHRoaXMuX2RpYWxvZ0NsYXNzPSJ1aS1kYXRlcGlja2VyLWRpYWxvZyIsdGhpcy5fZGlzYWJsZUNsYXNzPSJ1aS1kYXRlcGlja2VyLWRpc2FibGVkIix0aGlzLl91bnNlbGVjdGFibGVDbGFzcz0idWktZGF0ZXBpY2tlci11bnNlbGVjdGFibGUiLHRoaXMuX2N1cnJlbnRDbGFzcz0idWktZGF0ZXBpY2tlci1jdXJyZW50LWRheSIsdGhpcy5fZGF5T3ZlckNsYXNzPSJ1aS1kYXRlcGlja2VyLWRheXMtY2VsbC1vdmVyIix0aGlzLnJlZ2lvbmFsPVtdLHRoaXMucmVnaW9uYWxbIiJdPXtjbG9zZVRleHQ6IkRvbmUiLHByZXZUZXh0OiJQcmV2IixuZXh0VGV4dDoiTmV4dCIsY3VycmVudFRleHQ6IlRvZGF5Iixtb250aE5hbWVzOlsiSmFudWFyeSIsIkZlYnJ1YXJ5IiwiTWFyY2giLCJBcHJpbCIsIk1heSIsIkp1bmUiLCJKdWx5IiwiQXVndXN0IiwiU2VwdGVtYmVyIiwiT2N0b2JlciIsIk5vdmVtYmVyIiwiRGVjZW1iZXIiXSxtb250aE5hbWVzU2hvcnQ6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXSxkYXlOYW1lczpbIlN1bmRheSIsIk1vbmRheSIsIlR1ZXNkYXkiLCJXZWRuZXNkYXkiLCJUaHVyc2RheSIsIkZyaWRheSIsIlNhdHVyZGF5Il0sZGF5TmFtZXNTaG9ydDpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLGRheU5hbWVzTWluOlsiU3UiLCJNbyIsIlR1IiwiV2UiLCJUaCIsIkZyIiwiU2EiXSx3ZWVrSGVhZGVyOiJXayIsZGF0ZUZvcm1hdDoibW0vZGQveXkiLGZpcnN0RGF5OjAsaXNSVEw6ITEsc2hvd01vbnRoQWZ0ZXJZZWFyOiExLHllYXJTdWZmaXg6IiJ9LHRoaXMuX2RlZmF1bHRzPXtzaG93T246ImZvY3VzIixzaG93QW5pbToiZmFkZUluIixzaG93T3B0aW9uczp7fSxkZWZhdWx0RGF0ZTpudWxsLGFwcGVuZFRleHQ6IiIsYnV0dG9uVGV4dDoiLi4uIixidXR0b25JbWFnZToiIixidXR0b25JbWFnZU9ubHk6ITEsaGlkZUlmTm9QcmV2TmV4dDohMSxuYXZpZ2F0aW9uQXNEYXRlRm9ybWF0OiExLGdvdG9DdXJyZW50OiExLGNoYW5nZU1vbnRoOiExLGNoYW5nZVllYXI6ITEseWVhclJhbmdlOiJjLTEwOmMrMTAiLHNob3dPdGhlck1vbnRoczohMSxzZWxlY3RPdGhlck1vbnRoczohMSxzaG93V2VlazohMSxjYWxjdWxhdGVXZWVrOnRoaXMuaXNvODYwMVdlZWssc2hvcnRZZWFyQ3V0b2ZmOiIrMTAiLG1pbkRhdGU6bnVsbCxtYXhEYXRlOm51bGwsZHVyYXRpb246ImZhc3QiLGJlZm9yZVNob3dEYXk6bnVsbCxiZWZvcmVTaG93Om51bGwsb25TZWxlY3Q6bnVsbCxvbkNoYW5nZU1vbnRoWWVhcjpudWxsLG9uQ2xvc2U6bnVsbCxudW1iZXJPZk1vbnRoczoxLHNob3dDdXJyZW50QXRQb3M6MCxzdGVwTW9udGhzOjEsc3RlcEJpZ01vbnRoczoxMixhbHRGaWVsZDoiIixhbHRGb3JtYXQ6IiIsY29uc3RyYWluSW5wdXQ6ITAsc2hvd0J1dHRvblBhbmVsOiExLGF1dG9TaXplOiExLGRpc2FibGVkOiExfSwkLmV4dGVuZCh0aGlzLl9kZWZhdWx0cyx0aGlzLnJlZ2lvbmFsWyIiXSksdGhpcy5kcERpdj1iaW5kSG92ZXIoJCgnPGRpdiBpZD0iJyt0aGlzLl9tYWluRGl2SWQrJyIgY2xhc3M9InVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsIj48L2Rpdj4nKSl9ZnVuY3Rpb24gYmluZEhvdmVyKGUpe3ZhciB0PSJidXR0b24sIC51aS1kYXRlcGlja2VyLXByZXYsIC51aS1kYXRlcGlja2VyLW5leHQsIC51aS1kYXRlcGlja2VyLWNhbGVuZGFyIHRkIGEiO3JldHVybiBlLmRlbGVnYXRlKHQsIm1vdXNlb3V0IixmdW5jdGlvbigpeyQodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1wcmV2IikhPS0xJiYkKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSx0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLW5leHQiKSE9LTEmJiQodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciIpfSkuZGVsZWdhdGUodCwibW91c2VvdmVyIixmdW5jdGlvbigpeyQuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoaW5zdEFjdGl2ZS5pbmxpbmU/ZS5wYXJlbnQoKVswXTppbnN0QWN0aXZlLmlucHV0WzBdKXx8KCQodGhpcykucGFyZW50cygiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKS5maW5kKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksJCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmNsYXNzTmFtZS5pbmRleE9mKCJ1aS1kYXRlcGlja2VyLXByZXYiKSE9LTEmJiQodGhpcykuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLHRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpIT0tMSYmJCh0aGlzKS5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1uZXh0LWhvdmVyIikpfSl9ZnVuY3Rpb24gZXh0ZW5kUmVtb3ZlKGUsdCl7JC5leHRlbmQoZSx0KTtmb3IodmFyIG4gaW4gdClpZih0W25dPT1udWxsfHx0W25dPT11bmRlZmluZWQpZVtuXT10W25dO3JldHVybiBlfSQuZXh0ZW5kKCQudWkse2RhdGVwaWNrZXI6e3ZlcnNpb246IjEuOS4yIn19KTt2YXIgUFJPUF9OQU1FPSJkYXRlcGlja2VyIixkcHV1aWQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksaW5zdEFjdGl2ZTskLmV4dGVuZChEYXRlcGlja2VyLnByb3RvdHlwZSx7bWFya2VyQ2xhc3NOYW1lOiJoYXNEYXRlcGlja2VyIixtYXhSb3dzOjQsbG9nOmZ1bmN0aW9uKCl7dGhpcy5kZWJ1ZyYmY29uc29sZS5sb2cuYXBwbHkoIiIsYXJndW1lbnRzKX0sX3dpZGdldERhdGVwaWNrZXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kcERpdn0sc2V0RGVmYXVsdHM6ZnVuY3Rpb24oZSl7cmV0dXJuIGV4dGVuZFJlbW92ZSh0aGlzLl9kZWZhdWx0cyxlfHx7fSksdGhpc30sX2F0dGFjaERhdGVwaWNrZXI6ZnVuY3Rpb24odGFyZ2V0LHNldHRpbmdzKXt2YXIgaW5saW5lU2V0dGluZ3M9bnVsbDtmb3IodmFyIGF0dHJOYW1lIGluIHRoaXMuX2RlZmF1bHRzKXt2YXIgYXR0clZhbHVlPXRhcmdldC5nZXRBdHRyaWJ1dGUoImRhdGU6IithdHRyTmFtZSk7aWYoYXR0clZhbHVlKXtpbmxpbmVTZXR0aW5ncz1pbmxpbmVTZXR0aW5nc3x8e307dHJ5e2lubGluZVNldHRpbmdzW2F0dHJOYW1lXT1ldmFsKGF0dHJWYWx1ZSl9Y2F0Y2goZXJyKXtpbmxpbmVTZXR0aW5nc1thdHRyTmFtZV09YXR0clZhbHVlfX19dmFyIG5vZGVOYW1lPXRhcmdldC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLGlubGluZT1ub2RlTmFtZT09ImRpdiJ8fG5vZGVOYW1lPT0ic3BhbiI7dGFyZ2V0LmlkfHwodGhpcy51dWlkKz0xLHRhcmdldC5pZD0iZHAiK3RoaXMudXVpZCk7dmFyIGluc3Q9dGhpcy5fbmV3SW5zdCgkKHRhcmdldCksaW5saW5lKTtpbnN0LnNldHRpbmdzPSQuZXh0ZW5kKHt9LHNldHRpbmdzfHx7fSxpbmxpbmVTZXR0aW5nc3x8e30pLG5vZGVOYW1lPT0iaW5wdXQiP3RoaXMuX2Nvbm5lY3REYXRlcGlja2VyKHRhcmdldCxpbnN0KTppbmxpbmUmJnRoaXMuX2lubGluZURhdGVwaWNrZXIodGFyZ2V0LGluc3QpfSxfbmV3SW5zdDpmdW5jdGlvbihlLHQpe3ZhciBuPWVbMF0uaWQucmVwbGFjZSgvKFteQS1aYS16MC05Xy1dKS9nLCJcXFxcJDEiKTtyZXR1cm57aWQ6bixpbnB1dDplLHNlbGVjdGVkRGF5OjAsc2VsZWN0ZWRNb250aDowLHNlbGVjdGVkWWVhcjowLGRyYXdNb250aDowLGRyYXdZZWFyOjAsaW5saW5lOnQsZHBEaXY6dD9iaW5kSG92ZXIoJCgnPGRpdiBjbGFzcz0iJyt0aGlzLl9pbmxpbmVDbGFzcysnIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsIj48L2Rpdj4nKSk6dGhpcy5kcERpdn19LF9jb25uZWN0RGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBuPSQoZSk7dC5hcHBlbmQ9JChbXSksdC50cmlnZ2VyPSQoW10pO2lmKG4uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjt0aGlzLl9hdHRhY2htZW50cyhuLHQpLG4uYWRkQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmtleWRvd24odGhpcy5fZG9LZXlEb3duKS5rZXlwcmVzcyh0aGlzLl9kb0tleVByZXNzKS5rZXl1cCh0aGlzLl9kb0tleVVwKS5iaW5kKCJzZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGUsbixyKXt0LnNldHRpbmdzW25dPXJ9KS5iaW5kKCJnZXREYXRhLmRhdGVwaWNrZXIiLGZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMuX2dldCh0LG4pfSksdGhpcy5fYXV0b1NpemUodCksJC5kYXRhKGUsUFJPUF9OQU1FLHQpLHQuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpfSxfYXR0YWNobWVudHM6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9nZXQodCwiYXBwZW5kVGV4dCIpLHI9dGhpcy5fZ2V0KHQsImlzUlRMIik7dC5hcHBlbmQmJnQuYXBwZW5kLnJlbW92ZSgpLG4mJih0LmFwcGVuZD0kKCc8c3BhbiBjbGFzcz0iJyt0aGlzLl9hcHBlbmRDbGFzcysnIj4nK24rIjwvc3Bhbj4iKSxlW3I/ImJlZm9yZSI6ImFmdGVyIl0odC5hcHBlbmQpKSxlLnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKSx0LnRyaWdnZXImJnQudHJpZ2dlci5yZW1vdmUoKTt2YXIgaT10aGlzLl9nZXQodCwic2hvd09uIik7KGk9PSJmb2N1cyJ8fGk9PSJib3RoIikmJmUuZm9jdXModGhpcy5fc2hvd0RhdGVwaWNrZXIpO2lmKGk9PSJidXR0b24ifHxpPT0iYm90aCIpe3ZhciBzPXRoaXMuX2dldCh0LCJidXR0b25UZXh0Iiksbz10aGlzLl9nZXQodCwiYnV0dG9uSW1hZ2UiKTt0LnRyaWdnZXI9JCh0aGlzLl9nZXQodCwiYnV0dG9uSW1hZ2VPbmx5Iik/JCgiPGltZy8+IikuYWRkQ2xhc3ModGhpcy5fdHJpZ2dlckNsYXNzKS5hdHRyKHtzcmM6byxhbHQ6cyx0aXRsZTpzfSk6JCgnPGJ1dHRvbiB0eXBlPSJidXR0b24iPjwvYnV0dG9uPicpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuaHRtbChvPT0iIj9zOiQoIjxpbWcvPiIpLmF0dHIoe3NyYzpvLGFsdDpzLHRpdGxlOnN9KSkpLGVbcj8iYmVmb3JlIjoiYWZ0ZXIiXSh0LnRyaWdnZXIpLHQudHJpZ2dlci5jbGljayhmdW5jdGlvbigpe3JldHVybiAkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2xhc3RJbnB1dD09ZVswXT8kLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk6JC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmJC5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPWVbMF0/KCQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSwkLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pKTokLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKGVbMF0pLCExfSl9fSxfYXV0b1NpemU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fZ2V0KGUsImF1dG9TaXplIikmJiFlLmlubGluZSl7dmFyIHQ9bmV3IERhdGUoMjAwOSwxMSwyMCksbj10aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpO2lmKG4ubWF0Y2goL1tETV0vKSl7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPTA7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspZVtyXS5sZW5ndGg+dCYmKHQ9ZVtyXS5sZW5ndGgsbj1yKTtyZXR1cm4gbn07dC5zZXRNb250aChyKHRoaXMuX2dldChlLG4ubWF0Y2goL01NLyk/Im1vbnRoTmFtZXMiOiJtb250aE5hbWVzU2hvcnQiKSkpLHQuc2V0RGF0ZShyKHRoaXMuX2dldChlLG4ubWF0Y2goL0RELyk/ImRheU5hbWVzIjoiZGF5TmFtZXNTaG9ydCIpKSsyMC10LmdldERheSgpKX1lLmlucHV0LmF0dHIoInNpemUiLHRoaXMuX2Zvcm1hdERhdGUoZSx0KS5sZW5ndGgpfX0sX2lubGluZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0KXt2YXIgbj0kKGUpO2lmKG4uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjtuLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5hcHBlbmQodC5kcERpdikuYmluZCgic2V0RGF0YS5kYXRlcGlja2VyIixmdW5jdGlvbihlLG4scil7dC5zZXR0aW5nc1tuXT1yfSkuYmluZCgiZ2V0RGF0YS5kYXRlcGlja2VyIixmdW5jdGlvbihlLG4pe3JldHVybiB0aGlzLl9nZXQodCxuKX0pLCQuZGF0YShlLFBST1BfTkFNRSx0KSx0aGlzLl9zZXREYXRlKHQsdGhpcy5fZ2V0RGVmYXVsdERhdGUodCksITApLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIodCksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKHQpLHQuc2V0dGluZ3MuZGlzYWJsZWQmJnRoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGUpLHQuZHBEaXYuY3NzKCJkaXNwbGF5IiwiYmxvY2siKX0sX2RpYWxvZ0RhdGVwaWNrZXI6ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgcz10aGlzLl9kaWFsb2dJbnN0O2lmKCFzKXt0aGlzLnV1aWQrPTE7dmFyIG89ImRwIit0aGlzLnV1aWQ7dGhpcy5fZGlhbG9nSW5wdXQ9JCgnPGlucHV0IHR5cGU9InRleHQiIGlkPSInK28rJyIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Ii8+JyksdGhpcy5fZGlhbG9nSW5wdXQua2V5ZG93bih0aGlzLl9kb0tleURvd24pLCQoImJvZHkiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpLHM9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxvZ0lucHV0LCExKSxzLnNldHRpbmdzPXt9LCQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxQUk9QX05BTUUscyl9ZXh0ZW5kUmVtb3ZlKHMuc2V0dGluZ3Mscnx8e30pLHQ9dCYmdC5jb25zdHJ1Y3Rvcj09RGF0ZT90aGlzLl9mb3JtYXREYXRlKHMsdCk6dCx0aGlzLl9kaWFsb2dJbnB1dC52YWwodCksdGhpcy5fcG9zPWk/aS5sZW5ndGg/aTpbaS5wYWdlWCxpLnBhZ2VZXTpudWxsO2lmKCF0aGlzLl9wb3Mpe3ZhciB1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxhPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsZj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LGw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3A7dGhpcy5fcG9zPVt1LzItMTAwK2YsYS8yLTE1MCtsXX1yZXR1cm4gdGhpcy5fZGlhbG9nSW5wdXQuY3NzKCJsZWZ0Iix0aGlzLl9wb3NbMF0rMjArInB4IikuY3NzKCJ0b3AiLHRoaXMuX3Bvc1sxXSsicHgiKSxzLnNldHRpbmdzLm9uU2VsZWN0PW4sdGhpcy5faW5EaWFsb2c9ITAsdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pLCQuYmxvY2tVSSYmJC5ibG9ja1VJKHRoaXMuZHBEaXYpLCQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxQUk9QX05BTUUscyksdGhpc30sX2Rlc3Ryb3lEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciB0PSQoZSksbj0kLmRhdGEoZSxQUk9QX05BTUUpO2lmKCF0Lmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSlyZXR1cm47dmFyIHI9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyQucmVtb3ZlRGF0YShlLFBST1BfTkFNRSkscj09ImlucHV0Ij8obi5hcHBlbmQucmVtb3ZlKCksbi50cmlnZ2VyLnJlbW92ZSgpLHQucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLnVuYmluZCgiZm9jdXMiLHRoaXMuX3Nob3dEYXRlcGlja2VyKS51bmJpbmQoImtleWRvd24iLHRoaXMuX2RvS2V5RG93bikudW5iaW5kKCJrZXlwcmVzcyIsdGhpcy5fZG9LZXlQcmVzcykudW5iaW5kKCJrZXl1cCIsdGhpcy5fZG9LZXlVcCkpOihyPT0iZGl2Inx8cj09InNwYW4iKSYmdC5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuZW1wdHkoKX0sX2VuYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9JChlKSxuPSQuZGF0YShlLFBST1BfTkFNRSk7aWYoIXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjt2YXIgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYocj09ImlucHV0IillLmRpc2FibGVkPSExLG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSExfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6IjEuMCIsY3Vyc29yOiIifSk7ZWxzZSBpZihyPT0iZGl2Inx8cj09InNwYW4iKXt2YXIgaT10LmNoaWxkcmVuKCIuIit0aGlzLl9pbmxpbmVDbGFzcyk7aS5jaGlsZHJlbigpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLGkuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5wcm9wKCJkaXNhYmxlZCIsITEpfXRoaXMuX2Rpc2FibGVkSW5wdXRzPSQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKHQpe3JldHVybiB0PT1lP251bGw6dH0pfSxfZGlzYWJsZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9JChlKSxuPSQuZGF0YShlLFBST1BfTkFNRSk7aWYoIXQuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpKXJldHVybjt2YXIgcj1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYocj09ImlucHV0IillLmRpc2FibGVkPSEwLG4udHJpZ2dlci5maWx0ZXIoImJ1dHRvbiIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLmRpc2FibGVkPSEwfSkuZW5kKCkuZmlsdGVyKCJpbWciKS5jc3Moe29wYWNpdHk6IjAuNSIsY3Vyc29yOiJkZWZhdWx0In0pO2Vsc2UgaWYocj09ImRpdiJ8fHI9PSJzcGFuIil7dmFyIGk9dC5jaGlsZHJlbigiLiIrdGhpcy5faW5saW5lQ2xhc3MpO2kuY2hpbGRyZW4oKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKSxpLmZpbmQoInNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLCBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIikucHJvcCgiZGlzYWJsZWQiLCEwKX10aGlzLl9kaXNhYmxlZElucHV0cz0kLm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbih0KXtyZXR1cm4gdD09ZT9udWxsOnR9KSx0aGlzLl9kaXNhYmxlZElucHV0c1t0aGlzLl9kaXNhYmxlZElucHV0cy5sZW5ndGhdPWV9LF9pc0Rpc2FibGVkRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXtpZighZSlyZXR1cm4hMTtmb3IodmFyIHQ9MDt0PHRoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aDt0KyspaWYodGhpcy5fZGlzYWJsZWRJbnB1dHNbdF09PWUpcmV0dXJuITA7cmV0dXJuITF9LF9nZXRJbnN0OmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gJC5kYXRhKGUsUFJPUF9OQU1FKX1jYXRjaCh0KXt0aHJvdyJNaXNzaW5nIGluc3RhbmNlIGRhdGEgZm9yIHRoaXMgZGF0ZXBpY2tlciJ9fSxfb3B0aW9uRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5fZ2V0SW5zdChlKTtpZihhcmd1bWVudHMubGVuZ3RoPT0yJiZ0eXBlb2YgdD09InN0cmluZyIpcmV0dXJuIHQ9PSJkZWZhdWx0cyI/JC5leHRlbmQoe30sJC5kYXRlcGlja2VyLl9kZWZhdWx0cyk6cj90PT0iYWxsIj8kLmV4dGVuZCh7fSxyLnNldHRpbmdzKTp0aGlzLl9nZXQocix0KTpudWxsO3ZhciBpPXR8fHt9O3R5cGVvZiB0PT0ic3RyaW5nIiYmKGk9e30saVt0XT1uKTtpZihyKXt0aGlzLl9jdXJJbnN0PT1yJiZ0aGlzLl9oaWRlRGF0ZXBpY2tlcigpO3ZhciBzPXRoaXMuX2dldERhdGVEYXRlcGlja2VyKGUsITApLG89dGhpcy5fZ2V0TWluTWF4RGF0ZShyLCJtaW4iKSx1PXRoaXMuX2dldE1pbk1heERhdGUociwibWF4Iik7ZXh0ZW5kUmVtb3ZlKHIuc2V0dGluZ3MsaSksbyE9PW51bGwmJmkuZGF0ZUZvcm1hdCE9PXVuZGVmaW5lZCYmaS5taW5EYXRlPT09dW5kZWZpbmVkJiYoci5zZXR0aW5ncy5taW5EYXRlPXRoaXMuX2Zvcm1hdERhdGUocixvKSksdSE9PW51bGwmJmkuZGF0ZUZvcm1hdCE9PXVuZGVmaW5lZCYmaS5tYXhEYXRlPT09dW5kZWZpbmVkJiYoci5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUocix1KSksdGhpcy5fYXR0YWNobWVudHMoJChlKSxyKSx0aGlzLl9hdXRvU2l6ZShyKSx0aGlzLl9zZXREYXRlKHIscyksdGhpcy5fdXBkYXRlQWx0ZXJuYXRlKHIpLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIocil9fSxfY2hhbmdlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQsbil7dGhpcy5fb3B0aW9uRGF0ZXBpY2tlcihlLHQsbil9LF9yZWZyZXNoRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9nZXRJbnN0KGUpO3QmJnRoaXMuX3VwZGF0ZURhdGVwaWNrZXIodCl9LF9zZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldEluc3QoZSk7biYmKHRoaXMuX3NldERhdGUobix0KSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKG4pLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShuKSl9LF9nZXREYXRlRGF0ZXBpY2tlcjpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldEluc3QoZSk7cmV0dXJuIG4mJiFuLmlubGluZSYmdGhpcy5fc2V0RGF0ZUZyb21GaWVsZChuLHQpLG4/dGhpcy5fZ2V0RGF0ZShuKTpudWxsfSxfZG9LZXlEb3duOmZ1bmN0aW9uKGUpe3ZhciB0PSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlLnRhcmdldCksbj0hMCxyPXQuZHBEaXYuaXMoIi51aS1kYXRlcGlja2VyLXJ0bCIpO3QuX2tleUV2ZW50PSEwO2lmKCQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcpc3dpdGNoKGUua2V5Q29kZSl7Y2FzZSA5OiQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSxuPSExO2JyZWFrO2Nhc2UgMTM6dmFyIGk9JCgidGQuIiskLmRhdGVwaWNrZXIuX2RheU92ZXJDbGFzcysiOm5vdCguIiskLmRhdGVwaWNrZXIuX2N1cnJlbnRDbGFzcysiKSIsdC5kcERpdik7aVswXSYmJC5kYXRlcGlja2VyLl9zZWxlY3REYXkoZS50YXJnZXQsdC5zZWxlY3RlZE1vbnRoLHQuc2VsZWN0ZWRZZWFyLGlbMF0pO3ZhciBzPSQuZGF0ZXBpY2tlci5fZ2V0KHQsIm9uU2VsZWN0Iik7aWYocyl7dmFyIG89JC5kYXRlcGlja2VyLl9mb3JtYXREYXRlKHQpO3MuYXBwbHkodC5pbnB1dD90LmlucHV0WzBdOm51bGwsW28sdF0pfWVsc2UgJC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO3JldHVybiExO2Nhc2UgMjc6JC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpO2JyZWFrO2Nhc2UgMzM6JC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8tJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcEJpZ01vbnRocyIpOi0kLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM0OiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/KyQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBCaWdNb250aHMiKTorJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSAzNTooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2NsZWFyRGF0ZShlLnRhcmdldCksbj1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM2OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fZ290b1RvZGF5KGUudGFyZ2V0KSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzc6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LHI/MTotMSwiRCIpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXksZS5vcmlnaW5hbEV2ZW50LmFsdEtleSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8tJC5kYXRlcGlja2VyLl9nZXQodCwic3RlcEJpZ01vbnRocyIpOi0kLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM4OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJiQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCwtNywiRCIpLG49ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzOTooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQscj8tMToxLCJEIiksbj1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiYkLmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5PyskLmRhdGVwaWNrZXIuX2dldCh0LCJzdGVwQmlnTW9udGhzIik6KyQuZGF0ZXBpY2tlci5fZ2V0KHQsInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgNDA6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmJC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LDcsIkQiKSxuPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2RlZmF1bHQ6bj0hMX1lbHNlIGUua2V5Q29kZT09MzYmJmUuY3RybEtleT8kLmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOm49ITE7biYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9JC5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KTtpZigkLmRhdGVwaWNrZXIuX2dldCh0LCJjb25zdHJhaW5JbnB1dCIpKXt2YXIgbj0kLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoJC5kYXRlcGlja2VyLl9nZXQodCwiZGF0ZUZvcm1hdCIpKSxyPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5jaGFyQ29kZT09dW5kZWZpbmVkP2Uua2V5Q29kZTplLmNoYXJDb2RlKTtyZXR1cm4gZS5jdHJsS2V5fHxlLm1ldGFLZXl8fHI8IiAifHwhbnx8bi5pbmRleE9mKHIpPi0xfX0sX2RvS2V5VXA6ZnVuY3Rpb24oZSl7dmFyIHQ9JC5kYXRlcGlja2VyLl9nZXRJbnN0KGUudGFyZ2V0KTtpZih0LmlucHV0LnZhbCgpIT10Lmxhc3RWYWwpdHJ5e3ZhciBuPSQuZGF0ZXBpY2tlci5wYXJzZURhdGUoJC5kYXRlcGlja2VyLl9nZXQodCwiZGF0ZUZvcm1hdCIpLHQuaW5wdXQ/dC5pbnB1dC52YWwoKTpudWxsLCQuZGF0ZXBpY2tlci5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTtuJiYoJC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKHQpLCQuZGF0ZXBpY2tlci5fdXBkYXRlQWx0ZXJuYXRlKHQpLCQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcih0KSl9Y2F0Y2gocil7JC5kYXRlcGlja2VyLmxvZyhyKX1yZXR1cm4hMH0sX3Nob3dEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe2U9ZS50YXJnZXR8fGUsZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIT0iaW5wdXQiJiYoZT0kKCJpbnB1dCIsZS5wYXJlbnROb2RlKVswXSk7aWYoJC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihlKXx8JC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9PWUpcmV0dXJuO3ZhciB0PSQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlKTskLmRhdGVwaWNrZXIuX2N1ckluc3QmJiQuZGF0ZXBpY2tlci5fY3VySW5zdCE9dCYmKCQuZGF0ZXBpY2tlci5fY3VySW5zdC5kcERpdi5zdG9wKCEwLCEwKSx0JiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYkLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCQuZGF0ZXBpY2tlci5fY3VySW5zdC5pbnB1dFswXSkpO3ZhciBuPSQuZGF0ZXBpY2tlci5fZ2V0KHQsImJlZm9yZVNob3ciKSxyPW4/bi5hcHBseShlLFtlLHRdKTp7fTtpZihyPT09ITEpcmV0dXJuO2V4dGVuZFJlbW92ZSh0LnNldHRpbmdzLHIpLHQubGFzdFZhbD1udWxsLCQuZGF0ZXBpY2tlci5fbGFzdElucHV0PWUsJC5kYXRlcGlja2VyLl9zZXREYXRlRnJvbUZpZWxkKHQpLCQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJihlLnZhbHVlPSIiKSwkLmRhdGVwaWNrZXIuX3Bvc3x8KCQuZGF0ZXBpY2tlci5fcG9zPSQuZGF0ZXBpY2tlci5fZmluZFBvcyhlKSwkLmRhdGVwaWNrZXIuX3Bvc1sxXSs9ZS5vZmZzZXRIZWlnaHQpO3ZhciBpPSExOyQoZSkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaXw9JCh0aGlzKS5jc3MoInBvc2l0aW9uIik9PSJmaXhlZCIsIWl9KTt2YXIgcz17bGVmdDokLmRhdGVwaWNrZXIuX3Bvc1swXSx0b3A6JC5kYXRlcGlja2VyLl9wb3NbMV19OyQuZGF0ZXBpY2tlci5fcG9zPW51bGwsdC5kcERpdi5lbXB0eSgpLHQuZHBEaXYuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGRpc3BsYXk6ImJsb2NrIix0b3A6Ii0xMDAwcHgifSksJC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHQpLHM9JC5kYXRlcGlja2VyLl9jaGVja09mZnNldCh0LHMsaSksdC5kcERpdi5jc3Moe3Bvc2l0aW9uOiQuZGF0ZXBpY2tlci5faW5EaWFsb2cmJiQuYmxvY2tVST8ic3RhdGljIjppPyJmaXhlZCI6ImFic29sdXRlIixkaXNwbGF5OiJub25lIixsZWZ0OnMubGVmdCsicHgiLHRvcDpzLnRvcCsicHgifSk7aWYoIXQuaW5saW5lKXt2YXIgbz0kLmRhdGVwaWNrZXIuX2dldCh0LCJzaG93QW5pbSIpLHU9JC5kYXRlcGlja2VyLl9nZXQodCwiZHVyYXRpb24iKSxhPWZ1bmN0aW9uKCl7dmFyIGU9dC5kcERpdi5maW5kKCJpZnJhbWUudWktZGF0ZXBpY2tlci1jb3ZlciIpO2lmKCEhZS5sZW5ndGgpe3ZhciBuPSQuZGF0ZXBpY2tlci5fZ2V0Qm9yZGVycyh0LmRwRGl2KTtlLmNzcyh7bGVmdDotblswXSx0b3A6LW5bMV0sd2lkdGg6dC5kcERpdi5vdXRlcldpZHRoKCksaGVpZ2h0OnQuZHBEaXYub3V0ZXJIZWlnaHQoKX0pfX07dC5kcERpdi56SW5kZXgoJChlKS56SW5kZXgoKSsxKSwkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nPSEwLCQuZWZmZWN0cyYmKCQuZWZmZWN0cy5lZmZlY3Rbb118fCQuZWZmZWN0c1tvXSk/dC5kcERpdi5zaG93KG8sJC5kYXRlcGlja2VyLl9nZXQodCwic2hvd09wdGlvbnMiKSx1LGEpOnQuZHBEaXZbb3x8InNob3ciXShvP3U6bnVsbCxhKSwoIW98fCF1KSYmYSgpLHQuaW5wdXQuaXMoIjp2aXNpYmxlIikmJiF0LmlucHV0LmlzKCI6ZGlzYWJsZWQiKSYmdC5pbnB1dC5mb2N1cygpLCQuZGF0ZXBpY2tlci5fY3VySW5zdD10fX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dGhpcy5tYXhSb3dzPTQ7dmFyIHQ9JC5kYXRlcGlja2VyLl9nZXRCb3JkZXJzKGUuZHBEaXYpO2luc3RBY3RpdmU9ZSxlLmRwRGl2LmVtcHR5KCkuYXBwZW5kKHRoaXMuX2dlbmVyYXRlSFRNTChlKSksdGhpcy5fYXR0YWNoSGFuZGxlcnMoZSk7dmFyIG49ZS5kcERpdi5maW5kKCJpZnJhbWUudWktZGF0ZXBpY2tlci1jb3ZlciIpOyFuLmxlbmd0aHx8bi5jc3Moe2xlZnQ6LXRbMF0sdG9wOi10WzFdLHdpZHRoOmUuZHBEaXYub3V0ZXJXaWR0aCgpLGhlaWdodDplLmRwRGl2Lm91dGVySGVpZ2h0KCl9KSxlLmRwRGl2LmZpbmQoIi4iK3RoaXMuX2RheU92ZXJDbGFzcysiIGEiKS5tb3VzZW92ZXIoKTt2YXIgcj10aGlzLl9nZXROdW1iZXJPZk1vbnRocyhlKSxpPXJbMV0scz0xNztlLmRwRGl2LnJlbW92ZUNsYXNzKCJ1aS1kYXRlcGlja2VyLW11bHRpLTIgdWktZGF0ZXBpY2tlci1tdWx0aS0zIHVpLWRhdGVwaWNrZXItbXVsdGktNCIpLndpZHRoKCIiKSxpPjEmJmUuZHBEaXYuYWRkQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktIitpKS5jc3MoIndpZHRoIixzKmkrImVtIiksZS5kcERpdlsoclswXSE9MXx8clsxXSE9MT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItbXVsdGkiKSxlLmRwRGl2Wyh0aGlzLl9nZXQoZSwiaXNSVEwiKT8iYWRkIjoicmVtb3ZlIikrIkNsYXNzIl0oInVpLWRhdGVwaWNrZXItcnRsIiksZT09JC5kYXRlcGlja2VyLl9jdXJJbnN0JiYkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZlLmlucHV0JiZlLmlucHV0LmlzKCI6dmlzaWJsZSIpJiYhZS5pbnB1dC5pcygiOmRpc2FibGVkIikmJmUuaW5wdXRbMF0hPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJmUuaW5wdXQuZm9jdXMoKTtpZihlLnllYXJzaHRtbCl7dmFyIG89ZS55ZWFyc2h0bWw7c2V0VGltZW91dChmdW5jdGlvbigpe289PT1lLnllYXJzaHRtbCYmZS55ZWFyc2h0bWwmJmUuZHBEaXYuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcjpmaXJzdCIpLnJlcGxhY2VXaXRoKGUueWVhcnNodG1sKSxvPWUueWVhcnNodG1sPW51bGx9LDApfX0sX2dldEJvcmRlcnM6ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7cmV0dXJue3RoaW46MSxtZWRpdW06Mix0aGljazozfVtlXXx8ZX07cmV0dXJuW3BhcnNlRmxvYXQodChlLmNzcygiYm9yZGVyLWxlZnQtd2lkdGgiKSkpLHBhcnNlRmxvYXQodChlLmNzcygiYm9yZGVyLXRvcC13aWR0aCIpKSldfSxfY2hlY2tPZmZzZXQ6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZHBEaXYub3V0ZXJXaWR0aCgpLGk9ZS5kcERpdi5vdXRlckhlaWdodCgpLHM9ZS5pbnB1dD9lLmlucHV0Lm91dGVyV2lkdGgoKTowLG89ZS5pbnB1dD9lLmlucHV0Lm91dGVySGVpZ2h0KCk6MCx1PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCsobj8wOiQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSksYT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KyhuPzA6JChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpO3JldHVybiB0LmxlZnQtPXRoaXMuX2dldChlLCJpc1JUTCIpP3ItczowLHQubGVmdC09biYmdC5sZWZ0PT1lLmlucHV0Lm9mZnNldCgpLmxlZnQ/JChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsdC50b3AtPW4mJnQudG9wPT1lLmlucHV0Lm9mZnNldCgpLnRvcCtvPyQoZG9jdW1lbnQpLnNjcm9sbFRvcCgpOjAsdC5sZWZ0LT1NYXRoLm1pbih0LmxlZnQsdC5sZWZ0K3I+dSYmdT5yP01hdGguYWJzKHQubGVmdCtyLXUpOjApLHQudG9wLT1NYXRoLm1pbih0LnRvcCx0LnRvcCtpPmEmJmE+aT9NYXRoLmFicyhpK28pOjApLHR9LF9maW5kUG9zOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldEluc3QoZSksbj10aGlzLl9nZXQodCwiaXNSVEwiKTt3aGlsZShlJiYoZS50eXBlPT0iaGlkZGVuInx8ZS5ub2RlVHlwZSE9MXx8JC5leHByLmZpbHRlcnMuaGlkZGVuKGUpKSllPWVbbj8icHJldmlvdXNTaWJsaW5nIjoibmV4dFNpYmxpbmciXTt2YXIgcj0kKGUpLm9mZnNldCgpO3JldHVybltyLmxlZnQsci50b3BdfSxfaGlkZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY3VySW5zdDtpZighdHx8ZSYmdCE9JC5kYXRhKGUsUFJPUF9OQU1FKSlyZXR1cm47aWYodGhpcy5fZGF0ZXBpY2tlclNob3dpbmcpe3ZhciBuPXRoaXMuX2dldCh0LCJzaG93QW5pbSIpLHI9dGhpcy5fZ2V0KHQsImR1cmF0aW9uIiksaT1mdW5jdGlvbigpeyQuZGF0ZXBpY2tlci5fdGlkeURpYWxvZyh0KX07JC5lZmZlY3RzJiYoJC5lZmZlY3RzLmVmZmVjdFtuXXx8JC5lZmZlY3RzW25dKT90LmRwRGl2LmhpZGUobiwkLmRhdGVwaWNrZXIuX2dldCh0LCJzaG93T3B0aW9ucyIpLHIsaSk6dC5kcERpdltuPT0ic2xpZGVEb3duIj8ic2xpZGVVcCI6bj09ImZhZGVJbiI/ImZhZGVPdXQiOiJoaWRlIl0obj9yOm51bGwsaSksbnx8aSgpLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExO3ZhciBzPXRoaXMuX2dldCh0LCJvbkNsb3NlIik7cyYmcy5hcHBseSh0LmlucHV0P3QuaW5wdXRbMF06bnVsbCxbdC5pbnB1dD90LmlucHV0LnZhbCgpOiIiLHRdKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCx0aGlzLl9pbkRpYWxvZyYmKHRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiIwIix0b3A6Ii0xMDBweCJ9KSwkLmJsb2NrVUkmJigkLnVuYmxvY2tVSSgpLCQoImJvZHkiKS5hcHBlbmQodGhpcy5kcERpdikpKSx0aGlzLl9pbkRpYWxvZz0hMX19LF90aWR5RGlhbG9nOmZ1bmN0aW9uKGUpe2UuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLnVuYmluZCgiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKX0sX2NoZWNrRXh0ZXJuYWxDbGljazpmdW5jdGlvbihlKXtpZighJC5kYXRlcGlja2VyLl9jdXJJbnN0KXJldHVybjt2YXIgdD0kKGUudGFyZ2V0KSxuPSQuZGF0ZXBpY2tlci5fZ2V0SW5zdCh0WzBdKTsodFswXS5pZCE9JC5kYXRlcGlja2VyLl9tYWluRGl2SWQmJnQucGFyZW50cygiIyIrJC5kYXRlcGlja2VyLl9tYWluRGl2SWQpLmxlbmd0aD09MCYmIXQuaGFzQ2xhc3MoJC5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJiF0LmNsb3Nlc3QoIi4iKyQuZGF0ZXBpY2tlci5fdHJpZ2dlckNsYXNzKS5sZW5ndGgmJiQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJighJC5kYXRlcGlja2VyLl9pbkRpYWxvZ3x8ISQuYmxvY2tVSSl8fHQuaGFzQ2xhc3MoJC5kYXRlcGlja2VyLm1hcmtlckNsYXNzTmFtZSkmJiQuZGF0ZXBpY2tlci5fY3VySW5zdCE9bikmJiQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sX2FkanVzdERhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSQoZSksaT10aGlzLl9nZXRJbnN0KHJbMF0pO2lmKHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKHJbMF0pKXJldHVybjt0aGlzLl9hZGp1c3RJbnN0RGF0ZShpLHQrKG49PSJNIj90aGlzLl9nZXQoaSwic2hvd0N1cnJlbnRBdFBvcyIpOjApLG4pLHRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaSl9LF9nb3RvVG9kYXk6ZnVuY3Rpb24oZSl7dmFyIHQ9JChlKSxuPXRoaXMuX2dldEluc3QodFswXSk7aWYodGhpcy5fZ2V0KG4sImdvdG9DdXJyZW50IikmJm4uY3VycmVudERheSluLnNlbGVjdGVkRGF5PW4uY3VycmVudERheSxuLmRyYXdNb250aD1uLnNlbGVjdGVkTW9udGg9bi5jdXJyZW50TW9udGgsbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1uLmN1cnJlbnRZZWFyO2Vsc2V7dmFyIHI9bmV3IERhdGU7bi5zZWxlY3RlZERheT1yLmdldERhdGUoKSxuLmRyYXdNb250aD1uLnNlbGVjdGVkTW9udGg9ci5nZXRNb250aCgpLG4uZHJhd1llYXI9bi5zZWxlY3RlZFllYXI9ci5nZXRGdWxsWWVhcigpfXRoaXMuX25vdGlmeUNoYW5nZShuKSx0aGlzLl9hZGp1c3REYXRlKHQpfSxfc2VsZWN0TW9udGhZZWFyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0kKGUpLGk9dGhpcy5fZ2V0SW5zdChyWzBdKTtpWyJzZWxlY3RlZCIrKG49PSJNIj8iTW9udGgiOiJZZWFyIildPWlbImRyYXciKyhuPT0iTSI/Ik1vbnRoIjoiWWVhciIpXT1wYXJzZUludCh0Lm9wdGlvbnNbdC5zZWxlY3RlZEluZGV4XS52YWx1ZSwxMCksdGhpcy5fbm90aWZ5Q2hhbmdlKGkpLHRoaXMuX2FkanVzdERhdGUocil9LF9zZWxlY3REYXk6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9JChlKTtpZigkKHIpLmhhc0NsYXNzKHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKXx8dGhpcy5faXNEaXNhYmxlZERhdGVwaWNrZXIoaVswXSkpcmV0dXJuO3ZhciBzPXRoaXMuX2dldEluc3QoaVswXSk7cy5zZWxlY3RlZERheT1zLmN1cnJlbnREYXk9JCgiYSIscikuaHRtbCgpLHMuc2VsZWN0ZWRNb250aD1zLmN1cnJlbnRNb250aD10LHMuc2VsZWN0ZWRZZWFyPXMuY3VycmVudFllYXI9bix0aGlzLl9zZWxlY3REYXRlKGUsdGhpcy5fZm9ybWF0RGF0ZShzLHMuY3VycmVudERheSxzLmN1cnJlbnRNb250aCxzLmN1cnJlbnRZZWFyKSl9LF9jbGVhckRhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9JChlKSxuPXRoaXMuX2dldEluc3QodFswXSk7dGhpcy5fc2VsZWN0RGF0ZSh0LCIiKX0sX3NlbGVjdERhdGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj0kKGUpLHI9dGhpcy5fZ2V0SW5zdChuWzBdKTt0PXQhPW51bGw/dDp0aGlzLl9mb3JtYXREYXRlKHIpLHIuaW5wdXQmJnIuaW5wdXQudmFsKHQpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShyKTt2YXIgaT10aGlzLl9nZXQociwib25TZWxlY3QiKTtpP2kuYXBwbHkoci5pbnB1dD9yLmlucHV0WzBdOm51bGwsW3Qscl0pOnIuaW5wdXQmJnIuaW5wdXQudHJpZ2dlcigiY2hhbmdlIiksci5pbmxpbmU/dGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihyKToodGhpcy5faGlkZURhdGVwaWNrZXIoKSx0aGlzLl9sYXN0SW5wdXQ9ci5pbnB1dFswXSx0eXBlb2Ygci5pbnB1dFswXSE9Im9iamVjdCImJnIuaW5wdXQuZm9jdXMoKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCl9LF91cGRhdGVBbHRlcm5hdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsImFsdEZpZWxkIik7aWYodCl7dmFyIG49dGhpcy5fZ2V0KGUsImFsdEZvcm1hdCIpfHx0aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLHI9dGhpcy5fZ2V0RGF0ZShlKSxpPXRoaXMuZm9ybWF0RGF0ZShuLHIsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTskKHQpLmVhY2goZnVuY3Rpb24oKXskKHRoaXMpLnZhbChpKX0pfX0sbm9XZWVrZW5kczpmdW5jdGlvbihlKXt2YXIgdD1lLmdldERheSgpO3JldHVyblt0PjAmJnQ8NiwiIl19LGlzbzg2MDFXZWVrOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBEYXRlKGUuZ2V0VGltZSgpKTt0LnNldERhdGUodC5nZXREYXRlKCkrNC0odC5nZXREYXkoKXx8NykpO3ZhciBuPXQuZ2V0VGltZSgpO3JldHVybiB0LnNldE1vbnRoKDApLHQuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKG4tdCkvODY0ZTUpLzcpKzF9LHBhcnNlRGF0ZTpmdW5jdGlvbihlLHQsbil7aWYoZT09bnVsbHx8dD09bnVsbCl0aHJvdyJJbnZhbGlkIGFyZ3VtZW50cyI7dD10eXBlb2YgdD09Im9iamVjdCI/dC50b1N0cmluZygpOnQrIiI7aWYodD09IiIpcmV0dXJuIG51bGw7dmFyIHI9KG4/bi5zaG9ydFllYXJDdXRvZmY6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLnNob3J0WWVhckN1dG9mZjtyPXR5cGVvZiByIT0ic3RyaW5nIj9yOihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQociwxMCk7dmFyIGk9KG4/bi5kYXlOYW1lc1Nob3J0Om51bGwpfHx0aGlzLl9kZWZhdWx0cy5kYXlOYW1lc1Nob3J0LHM9KG4/bi5kYXlOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXMsbz0obj9uLm1vbnRoTmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lc1Nob3J0LHU9KG4/bi5tb250aE5hbWVzOm51bGwpfHx0aGlzLl9kZWZhdWx0cy5tb250aE5hbWVzLGE9LTEsZj0tMSxsPS0xLGM9LTEsaD0hMSxwPWZ1bmN0aW9uKHQpe3ZhciBuPXkrMTxlLmxlbmd0aCYmZS5jaGFyQXQoeSsxKT09dDtyZXR1cm4gbiYmeSsrLG59LGQ9ZnVuY3Rpb24oZSl7dmFyIG49cChlKSxyPWU9PSJAIj8xNDplPT0iISI/MjA6ZT09InkiJiZuPzQ6ZT09Im8iPzM6MixpPW5ldyBSZWdFeHAoIl5cXGR7MSwiK3IrIn0iKSxzPXQuc3Vic3RyaW5nKGcpLm1hdGNoKGkpO2lmKCFzKXRocm93Ik1pc3NpbmcgbnVtYmVyIGF0IHBvc2l0aW9uICIrZztyZXR1cm4gZys9c1swXS5sZW5ndGgscGFyc2VJbnQoc1swXSwxMCl9LHY9ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPSQubWFwKHAoZSk/cjpuLGZ1bmN0aW9uKGUsdCl7cmV0dXJuW1t0LGVdXX0pLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4tKGVbMV0ubGVuZ3RoLXRbMV0ubGVuZ3RoKX0pLHM9LTE7JC5lYWNoKGksZnVuY3Rpb24oZSxuKXt2YXIgcj1uWzFdO2lmKHQuc3Vic3RyKGcsci5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4gcz1uWzBdLGcrPXIubGVuZ3RoLCExfSk7aWYocyE9LTEpcmV0dXJuIHMrMTt0aHJvdyJVbmtub3duIG5hbWUgYXQgcG9zaXRpb24gIitnfSxtPWZ1bmN0aW9uKCl7aWYodC5jaGFyQXQoZykhPWUuY2hhckF0KHkpKXRocm93IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiK2c7ZysrfSxnPTA7Zm9yKHZhciB5PTA7eTxlLmxlbmd0aDt5KyspaWYoaCllLmNoYXJBdCh5KT09IiciJiYhcCgiJyIpP2g9ITE6bSgpO2Vsc2Ugc3dpdGNoKGUuY2hhckF0KHkpKXtjYXNlImQiOmw9ZCgiZCIpO2JyZWFrO2Nhc2UiRCI6digiRCIsaSxzKTticmVhaztjYXNlIm8iOmM9ZCgibyIpO2JyZWFrO2Nhc2UibSI6Zj1kKCJtIik7YnJlYWs7Y2FzZSJNIjpmPXYoIk0iLG8sdSk7YnJlYWs7Y2FzZSJ5IjphPWQoInkiKTticmVhaztjYXNlIkAiOnZhciBiPW5ldyBEYXRlKGQoIkAiKSk7YT1iLmdldEZ1bGxZZWFyKCksZj1iLmdldE1vbnRoKCkrMSxsPWIuZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6dmFyIGI9bmV3IERhdGUoKGQoIiEiKS10aGlzLl90aWNrc1RvMTk3MCkvMWU0KTthPWIuZ2V0RnVsbFllYXIoKSxmPWIuZ2V0TW9udGgoKSsxLGw9Yi5nZXREYXRlKCk7YnJlYWs7Y2FzZSInIjpwKCInIik/bSgpOmg9ITA7YnJlYWs7ZGVmYXVsdDptKCl9aWYoZzx0Lmxlbmd0aCl7dmFyIHc9dC5zdWJzdHIoZyk7aWYoIS9eXHMrLy50ZXN0KHcpKXRocm93IkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIit3fWE9PS0xP2E9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpOmE8MTAwJiYoYSs9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArKGE8PXI/MDotMTAwKSk7aWYoYz4tMSl7Zj0xLGw9Yztkb3t2YXIgRT10aGlzLl9nZXREYXlzSW5Nb250aChhLGYtMSk7aWYobDw9RSlicmVhaztmKyssbC09RX13aGlsZSghMCl9dmFyIGI9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoYSxmLTEsbCkpO2lmKGIuZ2V0RnVsbFllYXIoKSE9YXx8Yi5nZXRNb250aCgpKzEhPWZ8fGIuZ2V0RGF0ZSgpIT1sKXRocm93IkludmFsaWQgZGF0ZSI7cmV0dXJuIGJ9LEFUT006Inl5LW1tLWRkIixDT09LSUU6IkQsIGRkIE0geXkiLElTT184NjAxOiJ5eS1tbS1kZCIsUkZDXzgyMjoiRCwgZCBNIHkiLFJGQ184NTA6IkRELCBkZC1NLXkiLFJGQ18xMDM2OiJELCBkIE0geSIsUkZDXzExMjM6IkQsIGQgTSB5eSIsUkZDXzI4MjI6IkQsIGQgTSB5eSIsUlNTOiJELCBkIE0geSIsVElDS1M6IiEiLFRJTUVTVEFNUDoiQCIsVzNDOiJ5eS1tbS1kZCIsX3RpY2tzVG8xOTcwOig3MTg2ODUrTWF0aC5mbG9vcig0OTIuNSktTWF0aC5mbG9vcigxOS43KStNYXRoLmZsb29yKDQuOTI1KSkqMjQqNjAqNjAqMWU3LGZvcm1hdERhdGU6ZnVuY3Rpb24oZSx0LG4pe2lmKCF0KXJldHVybiIiO3ZhciByPShuP24uZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxpPShuP24uZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLHM9KG4/bi5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxvPShuP24ubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyx1PWZ1bmN0aW9uKHQpe3ZhciBuPWgrMTxlLmxlbmd0aCYmZS5jaGFyQXQoaCsxKT09dDtyZXR1cm4gbiYmaCsrLG59LGE9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSIiK3Q7aWYodShlKSl3aGlsZShyLmxlbmd0aDxuKXI9IjAiK3I7cmV0dXJuIHJ9LGY9ZnVuY3Rpb24oZSx0LG4scil7cmV0dXJuIHUoZSk/clt0XTpuW3RdfSxsPSIiLGM9ITE7aWYodClmb3IodmFyIGg9MDtoPGUubGVuZ3RoO2grKylpZihjKWUuY2hhckF0KGgpPT0iJyImJiF1KCInIik/Yz0hMTpsKz1lLmNoYXJBdChoKTtlbHNlIHN3aXRjaChlLmNoYXJBdChoKSl7Y2FzZSJkIjpsKz1hKCJkIix0LmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOmwrPWYoIkQiLHQuZ2V0RGF5KCkscixpKTticmVhaztjYXNlIm8iOmwrPWEoIm8iLE1hdGgucm91bmQoKChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKSkuZ2V0VGltZSgpLShuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksMCwwKSkuZ2V0VGltZSgpKS84NjRlNSksMyk7YnJlYWs7Y2FzZSJtIjpsKz1hKCJtIix0LmdldE1vbnRoKCkrMSwyKTticmVhaztjYXNlIk0iOmwrPWYoIk0iLHQuZ2V0TW9udGgoKSxzLG8pO2JyZWFrO2Nhc2UieSI6bCs9dSgieSIpP3QuZ2V0RnVsbFllYXIoKToodC5nZXRZZWFyKCklMTAwPDEwPyIwIjoiIikrdC5nZXRZZWFyKCklMTAwO2JyZWFrO2Nhc2UiQCI6bCs9dC5nZXRUaW1lKCk7YnJlYWs7Y2FzZSIhIjpsKz10LmdldFRpbWUoKSoxZTQrdGhpcy5fdGlja3NUbzE5NzA7YnJlYWs7Y2FzZSInIjp1KCInIik/bCs9IiciOmM9ITA7YnJlYWs7ZGVmYXVsdDpsKz1lLmNoYXJBdChoKX1yZXR1cm4gbH0sX3Bvc3NpYmxlQ2hhcnM6ZnVuY3Rpb24oZSl7dmFyIHQ9IiIsbj0hMSxyPWZ1bmN0aW9uKHQpe3ZhciBuPWkrMTxlLmxlbmd0aCYmZS5jaGFyQXQoaSsxKT09dDtyZXR1cm4gbiYmaSsrLG59O2Zvcih2YXIgaT0wO2k8ZS5sZW5ndGg7aSsrKWlmKG4pZS5jaGFyQXQoaSk9PSInIiYmIXIoIiciKT9uPSExOnQrPWUuY2hhckF0KGkpO2Vsc2Ugc3dpdGNoKGUuY2hhckF0KGkpKXtjYXNlImQiOmNhc2UibSI6Y2FzZSJ5IjpjYXNlIkAiOnQrPSIwMTIzNDU2Nzg5IjticmVhaztjYXNlIkQiOmNhc2UiTSI6cmV0dXJuIG51bGw7Y2FzZSInIjpyKCInIik/dCs9IiciOm49ITA7YnJlYWs7ZGVmYXVsdDp0Kz1lLmNoYXJBdChpKX1yZXR1cm4gdH0sX2dldDpmdW5jdGlvbihlLHQpe3JldHVybiBlLnNldHRpbmdzW3RdIT09dW5kZWZpbmVkP2Uuc2V0dGluZ3NbdF06dGhpcy5fZGVmYXVsdHNbdF19LF9zZXREYXRlRnJvbUZpZWxkOmZ1bmN0aW9uKGUsdCl7aWYoZS5pbnB1dC52YWwoKT09ZS5sYXN0VmFsKXJldHVybjt2YXIgbj10aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLHI9ZS5sYXN0VmFsPWUuaW5wdXQ/ZS5pbnB1dC52YWwoKTpudWxsLGkscztpPXM9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSk7dmFyIG89dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpO3RyeXtpPXRoaXMucGFyc2VEYXRlKG4scixvKXx8c31jYXRjaCh1KXt0aGlzLmxvZyh1KSxyPXQ/IiI6cn1lLnNlbGVjdGVkRGF5PWkuZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1pLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1pLmdldEZ1bGxZZWFyKCksZS5jdXJyZW50RGF5PXI/aS5nZXREYXRlKCk6MCxlLmN1cnJlbnRNb250aD1yP2kuZ2V0TW9udGgoKTowLGUuY3VycmVudFllYXI9cj9pLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZShlKX0sX2dldERlZmF1bHREYXRlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSwiZGVmYXVsdERhdGUiKSxuZXcgRGF0ZSkpfSxfZGV0ZXJtaW5lRGF0ZTpmdW5jdGlvbihlLHQsbil7dmFyIHI9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7cmV0dXJuIHQuc2V0RGF0ZSh0LmdldERhdGUoKStlKSx0fSxpPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSgkLmRhdGVwaWNrZXIuX2dldChlLCJkYXRlRm9ybWF0IiksdCwkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyhlKSl9Y2F0Y2gobil7fXZhciByPSh0LnRvTG93ZXJDYXNlKCkubWF0Y2goL15jLyk/JC5kYXRlcGlja2VyLl9nZXREYXRlKGUpOm51bGwpfHxuZXcgRGF0ZSxpPXIuZ2V0RnVsbFllYXIoKSxzPXIuZ2V0TW9udGgoKSxvPXIuZ2V0RGF0ZSgpLHU9LyhbKy1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxhPXUuZXhlYyh0KTt3aGlsZShhKXtzd2l0Y2goYVsyXXx8ImQiKXtjYXNlImQiOmNhc2UiRCI6bys9cGFyc2VJbnQoYVsxXSwxMCk7YnJlYWs7Y2FzZSJ3IjpjYXNlIlciOm8rPXBhcnNlSW50KGFbMV0sMTApKjc7YnJlYWs7Y2FzZSJtIjpjYXNlIk0iOnMrPXBhcnNlSW50KGFbMV0sMTApLG89TWF0aC5taW4obywkLmRhdGVwaWNrZXIuX2dldERheXNJbk1vbnRoKGkscykpO2JyZWFrO2Nhc2UieSI6Y2FzZSJZIjppKz1wYXJzZUludChhWzFdLDEwKSxvPU1hdGgubWluKG8sJC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChpLHMpKX1hPXUuZXhlYyh0KX1yZXR1cm4gbmV3IERhdGUoaSxzLG8pfSxzPXQ9PW51bGx8fHQ9PT0iIj9uOnR5cGVvZiB0PT0ic3RyaW5nIj9pKHQpOnR5cGVvZiB0PT0ibnVtYmVyIj9pc05hTih0KT9uOnIodCk6bmV3IERhdGUodC5nZXRUaW1lKCkpO3JldHVybiBzPXMmJnMudG9TdHJpbmcoKT09IkludmFsaWQgRGF0ZSI/bjpzLHMmJihzLnNldEhvdXJzKDApLHMuc2V0TWludXRlcygwKSxzLnNldFNlY29uZHMoMCkscy5zZXRNaWxsaXNlY29uZHMoMCkpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KHMpfSxfZGF5bGlnaHRTYXZpbmdBZGp1c3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/KGUuc2V0SG91cnMoZS5nZXRIb3VycygpPjEyP2UuZ2V0SG91cnMoKSsyOjApLGUpOm51bGx9LF9zZXREYXRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj0hdCxpPWUuc2VsZWN0ZWRNb250aCxzPWUuc2VsZWN0ZWRZZWFyLG89dGhpcy5fcmVzdHJpY3RNaW5NYXgoZSx0aGlzLl9kZXRlcm1pbmVEYXRlKGUsdCxuZXcgRGF0ZSkpO2Uuc2VsZWN0ZWREYXk9ZS5jdXJyZW50RGF5PW8uZ2V0RGF0ZSgpLGUuZHJhd01vbnRoPWUuc2VsZWN0ZWRNb250aD1lLmN1cnJlbnRNb250aD1vLmdldE1vbnRoKCksZS5kcmF3WWVhcj1lLnNlbGVjdGVkWWVhcj1lLmN1cnJlbnRZZWFyPW8uZ2V0RnVsbFllYXIoKSwoaSE9ZS5zZWxlY3RlZE1vbnRofHxzIT1lLnNlbGVjdGVkWWVhcikmJiFuJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSksdGhpcy5fYWRqdXN0SW5zdERhdGUoZSksZS5pbnB1dCYmZS5pbnB1dC52YWwocj8iIjp0aGlzLl9mb3JtYXREYXRlKGUpKX0sX2dldERhdGU6ZnVuY3Rpb24oZSl7dmFyIHQ9IWUuY3VycmVudFllYXJ8fGUuaW5wdXQmJmUuaW5wdXQudmFsKCk9PSIiP251bGw6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZS5jdXJyZW50WWVhcixlLmN1cnJlbnRNb250aCxlLmN1cnJlbnREYXkpKTtyZXR1cm4gdH0sX2F0dGFjaEhhbmRsZXJzOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX2dldChlLCJzdGVwTW9udGhzIiksbj0iIyIrZS5pZC5yZXBsYWNlKC9cXFxcL2csIlxcIik7ZS5kcERpdi5maW5kKCJbZGF0YS1oYW5kbGVyXSIpLm1hcChmdW5jdGlvbigpe3ZhciBlPXtwcmV2OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2FkanVzdERhdGUobiwtdCwiTSIpfSxuZXh0OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2FkanVzdERhdGUobiwrdCwiTSIpfSxoaWRlOmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCl9LHRvZGF5OmZ1bmN0aW9uKCl7d2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdLmRhdGVwaWNrZXIuX2dvdG9Ub2RheShuKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3REYXkobiwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtbW9udGgiKSwrdGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEteWVhciIpLHRoaXMpLCExfSxzZWxlY3RNb250aDpmdW5jdGlvbigpe3JldHVybiB3aW5kb3dbIkRQX2pRdWVyeV8iK2RwdXVpZF0uZGF0ZXBpY2tlci5fc2VsZWN0TW9udGhZZWFyKG4sdGhpcywiTSIpLCExfSxzZWxlY3RZZWFyOmZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvd1siRFBfalF1ZXJ5XyIrZHB1dWlkXS5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIobix0aGlzLCJZIiksITF9fTskKHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSxlW3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IERhdGU7dD10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LmdldEZ1bGxZZWFyKCksdC5nZXRNb250aCgpLHQuZ2V0RGF0ZSgpKSk7dmFyIG49dGhpcy5fZ2V0KGUsImlzUlRMIikscj10aGlzLl9nZXQoZSwic2hvd0J1dHRvblBhbmVsIiksaT10aGlzLl9nZXQoZSwiaGlkZUlmTm9QcmV2TmV4dCIpLHM9dGhpcy5fZ2V0KGUsIm5hdmlnYXRpb25Bc0RhdGVGb3JtYXQiKSxvPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLHU9dGhpcy5fZ2V0KGUsInNob3dDdXJyZW50QXRQb3MiKSxhPXRoaXMuX2dldChlLCJzdGVwTW9udGhzIiksZj1vWzBdIT0xfHxvWzFdIT0xLGw9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoZS5jdXJyZW50RGF5P25ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KTpuZXcgRGF0ZSg5OTk5LDksOSkpLGM9dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxoPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4IikscD1lLmRyYXdNb250aC11LGQ9ZS5kcmF3WWVhcjtwPDAmJihwKz0xMixkLS0pO2lmKGgpe3ZhciB2PXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGguZ2V0RnVsbFllYXIoKSxoLmdldE1vbnRoKCktb1swXSpvWzFdKzEsaC5nZXREYXRlKCkpKTt2PWMmJnY8Yz9jOnY7d2hpbGUodGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoZCxwLDEpKT52KXAtLSxwPDAmJihwPTExLGQtLSl9ZS5kcmF3TW9udGg9cCxlLmRyYXdZZWFyPWQ7dmFyIG09dGhpcy5fZ2V0KGUsInByZXZUZXh0Iik7bT1zP3RoaXMuZm9ybWF0RGF0ZShtLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGQscC1hLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpOm07dmFyIGc9dGhpcy5fY2FuQWRqdXN0TW9udGgoZSwtMSxkLHApPyc8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0icHJldiIgZGF0YS1ldmVudD0iY2xpY2siIHRpdGxlPSInK20rJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysobj8iZSI6InciKSsnIj4nK20rIjwvc3Bhbj48L2E+IjppPyIiOic8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1wcmV2IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQiIHRpdGxlPSInK20rJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysobj8iZSI6InciKSsnIj4nK20rIjwvc3Bhbj48L2E+Iix5PXRoaXMuX2dldChlLCJuZXh0VGV4dCIpO3k9cz90aGlzLmZvcm1hdERhdGUoeSx0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLHArYSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTp5O3ZhciBiPXRoaXMuX2NhbkFkanVzdE1vbnRoKGUsMSxkLHApPyc8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0ibmV4dCIgZGF0YS1ldmVudD0iY2xpY2siIHRpdGxlPSInK3krJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysobj8idyI6ImUiKSsnIj4nK3krIjwvc3Bhbj48L2E+IjppPyIiOic8YSBjbGFzcz0idWktZGF0ZXBpY2tlci1uZXh0IHVpLWNvcm5lci1hbGwgdWktc3RhdGUtZGlzYWJsZWQiIHRpdGxlPSInK3krJyI+PHNwYW4gY2xhc3M9InVpLWljb24gdWktaWNvbi1jaXJjbGUtdHJpYW5nbGUtJysobj8idyI6ImUiKSsnIj4nK3krIjwvc3Bhbj48L2E+Iix3PXRoaXMuX2dldChlLCJjdXJyZW50VGV4dCIpLEU9dGhpcy5fZ2V0KGUsImdvdG9DdXJyZW50IikmJmUuY3VycmVudERheT9sOnQ7dz1zP3RoaXMuZm9ybWF0RGF0ZSh3LEUsdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKTp3O3ZhciBTPWUuaW5saW5lPyIiOic8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InVpLWRhdGVwaWNrZXItY2xvc2UgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1wcmltYXJ5IHVpLWNvcm5lci1hbGwiIGRhdGEtaGFuZGxlcj0iaGlkZSIgZGF0YS1ldmVudD0iY2xpY2siPicrdGhpcy5fZ2V0KGUsImNsb3NlVGV4dCIpKyI8L2J1dHRvbj4iLHg9cj8nPGRpdiBjbGFzcz0idWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50Ij4nKyhuP1M6IiIpKyh0aGlzLl9pc0luUmFuZ2UoZSxFKT8nPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQgdWktc3RhdGUtZGVmYXVsdCB1aS1wcmlvcml0eS1zZWNvbmRhcnkgdWktY29ybmVyLWFsbCIgZGF0YS1oYW5kbGVyPSJ0b2RheSIgZGF0YS1ldmVudD0iY2xpY2siPicrdysiPC9idXR0b24+IjoiIikrKG4/IiI6UykrIjwvZGl2PiI6IiIsVD1wYXJzZUludCh0aGlzLl9nZXQoZSwiZmlyc3REYXkiKSwxMCk7VD1pc05hTihUKT8wOlQ7dmFyIE49dGhpcy5fZ2V0KGUsInNob3dXZWVrIiksQz10aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxrPXRoaXMuX2dldChlLCJkYXlOYW1lc1Nob3J0IiksTD10aGlzLl9nZXQoZSwiZGF5TmFtZXNNaW4iKSxBPXRoaXMuX2dldChlLCJtb250aE5hbWVzIiksTz10aGlzLl9nZXQoZSwibW9udGhOYW1lc1Nob3J0IiksTT10aGlzLl9nZXQoZSwiYmVmb3JlU2hvd0RheSIpLF89dGhpcy5fZ2V0KGUsInNob3dPdGhlck1vbnRocyIpLEQ9dGhpcy5fZ2V0KGUsInNlbGVjdE90aGVyTW9udGhzIiksUD10aGlzLl9nZXQoZSwiY2FsY3VsYXRlV2VlayIpfHx0aGlzLmlzbzg2MDFXZWVrLEg9dGhpcy5fZ2V0RGVmYXVsdERhdGUoZSksQj0iIjtmb3IodmFyIGo9MDtqPG9bMF07aisrKXt2YXIgRj0iIjt0aGlzLm1heFJvd3M9NDtmb3IodmFyIEk9MDtJPG9bMV07SSsrKXt2YXIgcT10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLHAsZS5zZWxlY3RlZERheSkpLFI9IiB1aS1jb3JuZXItYWxsIixVPSIiO2lmKGYpe1UrPSc8ZGl2IGNsYXNzPSJ1aS1kYXRlcGlja2VyLWdyb3VwJztpZihvWzFdPjEpc3dpdGNoKEkpe2Nhc2UgMDpVKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLFI9IiB1aS1jb3JuZXItIisobj8icmlnaHQiOiJsZWZ0Iik7YnJlYWs7Y2FzZSBvWzFdLTE6VSs9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLFI9IiB1aS1jb3JuZXItIisobj8ibGVmdCI6InJpZ2h0Iik7YnJlYWs7ZGVmYXVsdDpVKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIixSPSIifVUrPSciPid9VSs9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItaGVhZGVyIHVpLXdpZGdldC1oZWFkZXIgdWktaGVscGVyLWNsZWFyZml4JytSKyciPicrKC9hbGx8bGVmdC8udGVzdChSKSYmaj09MD9uP2I6ZzoiIikrKC9hbGx8cmlnaHQvLnRlc3QoUikmJmo9PTA/bj9nOmI6IiIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKGUscCxkLGMsaCxqPjB8fEk+MCxBLE8pKyc8L2Rpdj48dGFibGUgY2xhc3M9InVpLWRhdGVwaWNrZXItY2FsZW5kYXIiPjx0aGVhZD4nKyI8dHI+Ijt2YXIgej1OPyc8dGggY2xhc3M9InVpLWRhdGVwaWNrZXItd2Vlay1jb2wiPicrdGhpcy5fZ2V0KGUsIndlZWtIZWFkZXIiKSsiPC90aD4iOiIiO2Zvcih2YXIgVz0wO1c8NztXKyspe3ZhciBYPShXK1QpJTc7eis9Ijx0aCIrKChXK1QrNiklNz49NT8nIGNsYXNzPSJ1aS1kYXRlcGlja2VyLXdlZWstZW5kIic6IiIpKyI+IisnPHNwYW4gdGl0bGU9IicrQ1tYXSsnIj4nK0xbWF0rIjwvc3Bhbj48L3RoPiJ9VSs9eisiPC90cj48L3RoZWFkPjx0Ym9keT4iO3ZhciBWPXRoaXMuX2dldERheXNJbk1vbnRoKGQscCk7ZD09ZS5zZWxlY3RlZFllYXImJnA9PWUuc2VsZWN0ZWRNb250aCYmKGUuc2VsZWN0ZWREYXk9TWF0aC5taW4oZS5zZWxlY3RlZERheSxWKSk7dmFyIEo9KHRoaXMuX2dldEZpcnN0RGF5T2ZNb250aChkLHApLVQrNyklNyxLPU1hdGguY2VpbCgoSitWKS83KSxRPWY/dGhpcy5tYXhSb3dzPks/dGhpcy5tYXhSb3dzOks6Szt0aGlzLm1heFJvd3M9UTt2YXIgRz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShkLHAsMS1KKSk7Zm9yKHZhciBZPTA7WTxRO1krKyl7VSs9Ijx0cj4iO3ZhciBaPU4/Jzx0ZCBjbGFzcz0idWktZGF0ZXBpY2tlci13ZWVrLWNvbCI+Jyt0aGlzLl9nZXQoZSwiY2FsY3VsYXRlV2VlayIpKEcpKyI8L3RkPiI6IiI7Zm9yKHZhciBXPTA7Vzw3O1crKyl7dmFyIGV0PU0/TS5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbR10pOlshMCwiIl0sdHQ9Ry5nZXRNb250aCgpIT1wLG50PXR0JiYhRHx8IWV0WzBdfHxjJiZHPGN8fGgmJkc+aDtaKz0nPHRkIGNsYXNzPSInKygoVytUKzYpJTc+PTU/IiB1aS1kYXRlcGlja2VyLXdlZWstZW5kIjoiIikrKHR0PyIgdWktZGF0ZXBpY2tlci1vdGhlci1tb250aCI6IiIpKyhHLmdldFRpbWUoKT09cS5nZXRUaW1lKCkmJnA9PWUuc2VsZWN0ZWRNb250aCYmZS5fa2V5RXZlbnR8fEguZ2V0VGltZSgpPT1HLmdldFRpbWUoKSYmSC5nZXRUaW1lKCk9PXEuZ2V0VGltZSgpPyIgIit0aGlzLl9kYXlPdmVyQ2xhc3M6IiIpKyhudD8iICIrdGhpcy5fdW5zZWxlY3RhYmxlQ2xhc3MrIiB1aS1zdGF0ZS1kaXNhYmxlZCI6IiIpKyh0dCYmIV8/IiI6IiAiK2V0WzFdKyhHLmdldFRpbWUoKT09bC5nZXRUaW1lKCk/IiAiK3RoaXMuX2N1cnJlbnRDbGFzczoiIikrKEcuZ2V0VGltZSgpPT10LmdldFRpbWUoKT8iIHVpLWRhdGVwaWNrZXItdG9kYXkiOiIiKSkrJyInKygoIXR0fHxfKSYmZXRbMl0/JyB0aXRsZT0iJytldFsyXSsnIic6IiIpKyhudD8iIjonIGRhdGEtaGFuZGxlcj0ic2VsZWN0RGF5IiBkYXRhLWV2ZW50PSJjbGljayIgZGF0YS1tb250aD0iJytHLmdldE1vbnRoKCkrJyIgZGF0YS15ZWFyPSInK0cuZ2V0RnVsbFllYXIoKSsnIicpKyI+IisodHQmJiFfPyImI3hhMDsiOm50Pyc8c3BhbiBjbGFzcz0idWktc3RhdGUtZGVmYXVsdCI+JytHLmdldERhdGUoKSsiPC9zcGFuPiI6JzxhIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0JysoRy5nZXRUaW1lKCk9PXQuZ2V0VGltZSgpPyIgdWktc3RhdGUtaGlnaGxpZ2h0IjoiIikrKEcuZ2V0VGltZSgpPT1sLmdldFRpbWUoKT8iIHVpLXN0YXRlLWFjdGl2ZSI6IiIpKyh0dD8iIHVpLXByaW9yaXR5LXNlY29uZGFyeSI6IiIpKyciIGhyZWY9IiMiPicrRy5nZXREYXRlKCkrIjwvYT4iKSsiPC90ZD4iLEcuc2V0RGF0ZShHLmdldERhdGUoKSsxKSxHPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KEcpfVUrPVorIjwvdHI+In1wKysscD4xMSYmKHA9MCxkKyspLFUrPSI8L3Rib2R5PjwvdGFibGU+IisoZj8iPC9kaXY+Iisob1swXT4wJiZJPT1vWzFdLTE/JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItcm93LWJyZWFrIj48L2Rpdj4nOiIiKToiIiksRis9VX1CKz1GfXJldHVybiBCKz14KygkLnVpLmllNiYmIWUuaW5saW5lPyc8aWZyYW1lIHNyYz0iamF2YXNjcmlwdDpmYWxzZTsiIGNsYXNzPSJ1aS1kYXRlcGlja2VyLWNvdmVyIiBmcmFtZWJvcmRlcj0iMCI+PC9pZnJhbWU+JzoiIiksZS5fa2V5RXZlbnQ9ITEsQn0sX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyOmZ1bmN0aW9uKGUsdCxuLHIsaSxzLG8sdSl7dmFyIGE9dGhpcy5fZ2V0KGUsImNoYW5nZU1vbnRoIiksZj10aGlzLl9nZXQoZSwiY2hhbmdlWWVhciIpLGw9dGhpcy5fZ2V0KGUsInNob3dNb250aEFmdGVyWWVhciIpLGM9JzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItdGl0bGUiPicsaD0iIjtpZihzfHwhYSloKz0nPHNwYW4gY2xhc3M9InVpLWRhdGVwaWNrZXItbW9udGgiPicrb1t0XSsiPC9zcGFuPiI7ZWxzZXt2YXIgcD1yJiZyLmdldEZ1bGxZZWFyKCk9PW4sZD1pJiZpLmdldEZ1bGxZZWFyKCk9PW47aCs9JzxzZWxlY3QgY2xhc3M9InVpLWRhdGVwaWNrZXItbW9udGgiIGRhdGEtaGFuZGxlcj0ic2VsZWN0TW9udGgiIGRhdGEtZXZlbnQ9ImNoYW5nZSI+Jztmb3IodmFyIHY9MDt2PDEyO3YrKykoIXB8fHY+PXIuZ2V0TW9udGgoKSkmJighZHx8djw9aS5nZXRNb250aCgpKSYmKGgrPSc8b3B0aW9uIHZhbHVlPSInK3YrJyInKyh2PT10Pycgc2VsZWN0ZWQ9InNlbGVjdGVkIic6IiIpKyI+Iit1W3ZdKyI8L29wdGlvbj4iKTtoKz0iPC9zZWxlY3Q+In1sfHwoYys9aCsoc3x8IWF8fCFmPyImI3hhMDsiOiIiKSk7aWYoIWUueWVhcnNodG1sKXtlLnllYXJzaHRtbD0iIjtpZihzfHwhZiljKz0nPHNwYW4gY2xhc3M9InVpLWRhdGVwaWNrZXIteWVhciI+JytuKyI8L3NwYW4+IjtlbHNle3ZhciBtPXRoaXMuX2dldChlLCJ5ZWFyUmFuZ2UiKS5zcGxpdCgiOiIpLGc9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLHk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5tYXRjaCgvY1srLV0uKi8pP24rcGFyc2VJbnQoZS5zdWJzdHJpbmcoMSksMTApOmUubWF0Y2goL1srLV0uKi8pP2crcGFyc2VJbnQoZSwxMCk6cGFyc2VJbnQoZSwxMCk7cmV0dXJuIGlzTmFOKHQpP2c6dH0sYj15KG1bMF0pLHc9TWF0aC5tYXgoYix5KG1bMV18fCIiKSk7Yj1yP01hdGgubWF4KGIsci5nZXRGdWxsWWVhcigpKTpiLHc9aT9NYXRoLm1pbih3LGkuZ2V0RnVsbFllYXIoKSk6dyxlLnllYXJzaHRtbCs9JzxzZWxlY3QgY2xhc3M9InVpLWRhdGVwaWNrZXIteWVhciIgZGF0YS1oYW5kbGVyPSJzZWxlY3RZZWFyIiBkYXRhLWV2ZW50PSJjaGFuZ2UiPic7Zm9yKDtiPD13O2IrKyllLnllYXJzaHRtbCs9JzxvcHRpb24gdmFsdWU9IicrYisnIicrKGI9PW4/JyBzZWxlY3RlZD0ic2VsZWN0ZWQiJzoiIikrIj4iK2IrIjwvb3B0aW9uPiI7ZS55ZWFyc2h0bWwrPSI8L3NlbGVjdD4iLGMrPWUueWVhcnNodG1sLGUueWVhcnNodG1sPW51bGx9fXJldHVybiBjKz10aGlzLl9nZXQoZSwieWVhclN1ZmZpeCIpLGwmJihjKz0oc3x8IWF8fCFmPyImI3hhMDsiOiIiKStoKSxjKz0iPC9kaXY+IixjfSxfYWRqdXN0SW5zdERhdGU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPWUuZHJhd1llYXIrKG49PSJZIj90OjApLGk9ZS5kcmF3TW9udGgrKG49PSJNIj90OjApLHM9TWF0aC5taW4oZS5zZWxlY3RlZERheSx0aGlzLl9nZXREYXlzSW5Nb250aChyLGkpKSsobj09IkQiP3Q6MCksbz10aGlzLl9yZXN0cmljdE1pbk1heChlLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHIsaSxzKSkpO2Uuc2VsZWN0ZWREYXk9by5nZXREYXRlKCksZS5kcmF3TW9udGg9ZS5zZWxlY3RlZE1vbnRoPW8uZ2V0TW9udGgoKSxlLmRyYXdZZWFyPWUuc2VsZWN0ZWRZZWFyPW8uZ2V0RnVsbFllYXIoKSwobj09Ik0ifHxuPT0iWSIpJiZ0aGlzLl9ub3RpZnlDaGFuZ2UoZSl9LF9yZXN0cmljdE1pbk1heDpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWluIikscj10aGlzLl9nZXRNaW5NYXhEYXRlKGUsIm1heCIpLGk9biYmdDxuP246dDtyZXR1cm4gaT1yJiZpPnI/cjppLGl9LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm9uQ2hhbmdlTW9udGhZZWFyIik7dCYmdC5hcHBseShlLmlucHV0P2UuaW5wdXRbMF06bnVsbCxbZS5zZWxlY3RlZFllYXIsZS5zZWxlY3RlZE1vbnRoKzEsZV0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsIm51bWJlck9mTW9udGhzIik7cmV0dXJuIHQ9PW51bGw/WzEsMV06dHlwZW9mIHQ9PSJudW1iZXIiP1sxLHRdOnR9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUoZSx0aGlzLl9nZXQoZSx0KyJEYXRlIiksbnVsbCl9LF9nZXREYXlzSW5Nb250aDpmdW5jdGlvbihlLHQpe3JldHVybiAzMi10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShlLHQsMzIpKS5nZXREYXRlKCl9LF9nZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rpb24oZSx0KXtyZXR1cm4obmV3IERhdGUoZSx0LDEpKS5nZXREYXkoKX0sX2NhbkFkanVzdE1vbnRoOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBpPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLHM9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUobixyKyh0PDA/dDppWzBdKmlbMV0pLDEpKTtyZXR1cm4gdDwwJiZzLnNldERhdGUodGhpcy5fZ2V0RGF5c0luTW9udGgocy5nZXRGdWxsWWVhcigpLHMuZ2V0TW9udGgoKSkpLHRoaXMuX2lzSW5SYW5nZShlLHMpfSxfaXNJblJhbmdlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5fZ2V0TWluTWF4RGF0ZShlLCJtaW4iKSxyPXRoaXMuX2dldE1pbk1heERhdGUoZSwibWF4Iik7cmV0dXJuKCFufHx0LmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIXJ8fHQuZ2V0VGltZSgpPD1yLmdldFRpbWUoKSl9LF9nZXRGb3JtYXRDb25maWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZ2V0KGUsInNob3J0WWVhckN1dG9mZiIpO3JldHVybiB0PXR5cGVvZiB0IT0ic3RyaW5nIj90OihuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKSUxMDArcGFyc2VJbnQodCwxMCkse3Nob3J0WWVhckN1dG9mZjp0LGRheU5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsImRheU5hbWVzU2hvcnQiKSxkYXlOYW1lczp0aGlzLl9nZXQoZSwiZGF5TmFtZXMiKSxtb250aE5hbWVzU2hvcnQ6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXNTaG9ydCIpLG1vbnRoTmFtZXM6dGhpcy5fZ2V0KGUsIm1vbnRoTmFtZXMiKX19LF9mb3JtYXREYXRlOmZ1bmN0aW9uKGUsdCxuLHIpe3R8fChlLmN1cnJlbnREYXk9ZS5zZWxlY3RlZERheSxlLmN1cnJlbnRNb250aD1lLnNlbGVjdGVkTW9udGgsZS5jdXJyZW50WWVhcj1lLnNlbGVjdGVkWWVhcik7dmFyIGk9dD90eXBlb2YgdD09Im9iamVjdCI/dDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShyLG4sdCkpOnRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGUuY3VycmVudFllYXIsZS5jdXJyZW50TW9udGgsZS5jdXJyZW50RGF5KSk7cmV0dXJuIHRoaXMuZm9ybWF0RGF0ZSh0aGlzLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLGksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKGUpKX19KSwkLmZuLmRhdGVwaWNrZXI9ZnVuY3Rpb24oZSl7aWYoIXRoaXMubGVuZ3RoKXJldHVybiB0aGlzOyQuZGF0ZXBpY2tlci5pbml0aWFsaXplZHx8KCQoZG9jdW1lbnQpLm1vdXNlZG93bigkLmRhdGVwaWNrZXIuX2NoZWNrRXh0ZXJuYWxDbGljaykuZmluZChkb2N1bWVudC5ib2R5KS5hcHBlbmQoJC5kYXRlcGlja2VyLmRwRGl2KSwkLmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITApO3ZhciB0PUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gdHlwZW9mIGUhPSJzdHJpbmcifHxlIT0iaXNEaXNhYmxlZCImJmUhPSJnZXREYXRlIiYmZSE9IndpZGdldCI/ZT09Im9wdGlvbiImJmFyZ3VtZW50cy5sZW5ndGg9PTImJnR5cGVvZiBhcmd1bWVudHNbMV09PSJzdHJpbmciPyQuZGF0ZXBpY2tlclsiXyIrZSsiRGF0ZXBpY2tlciJdLmFwcGx5KCQuZGF0ZXBpY2tlcixbdGhpc1swXV0uY29uY2F0KHQpKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0eXBlb2YgZT09InN0cmluZyI/JC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzXS5jb25jYXQodCkpOiQuZGF0ZXBpY2tlci5fYXR0YWNoRGF0ZXBpY2tlcih0aGlzLGUpfSk6JC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkoJC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQodCkpfSwkLmRhdGVwaWNrZXI9bmV3IERhdGVwaWNrZXIsJC5kYXRlcGlja2VyLmluaXRpYWxpemVkPSExLCQuZGF0ZXBpY2tlci51dWlkPShuZXcgRGF0ZSkuZ2V0VGltZSgpLCQuZGF0ZXBpY2tlci52ZXJzaW9uPSIxLjkuMiIsd2luZG93WyJEUF9qUXVlcnlfIitkcHV1aWRdPSR9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPSJ1aS1kaWFsb2cgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgIixyPXtidXR0b25zOiEwLGhlaWdodDohMCxtYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwLHdpZHRoOiEwfSxpPXttYXhIZWlnaHQ6ITAsbWF4V2lkdGg6ITAsbWluSGVpZ2h0OiEwLG1pbldpZHRoOiEwfTtlLndpZGdldCgidWkuZGlhbG9nIix7dmVyc2lvbjoiMS45LjIiLG9wdGlvbnM6e2F1dG9PcGVuOiEwLGJ1dHRvbnM6e30sY2xvc2VPbkVzY2FwZTohMCxjbG9zZVRleHQ6ImNsb3NlIixkaWFsb2dDbGFzczoiIixkcmFnZ2FibGU6ITAsaGlkZTpudWxsLGhlaWdodDoiYXV0byIsbWF4SGVpZ2h0OiExLG1heFdpZHRoOiExLG1pbkhlaWdodDoxNTAsbWluV2lkdGg6MTUwLG1vZGFsOiExLHBvc2l0aW9uOntteToiY2VudGVyIixhdDoiY2VudGVyIixvZjp3aW5kb3csY29sbGlzaW9uOiJmaXQiLHVzaW5nOmZ1bmN0aW9uKHQpe3ZhciBuPWUodGhpcykuY3NzKHQpLm9mZnNldCgpLnRvcDtuPDAmJmUodGhpcykuY3NzKCJ0b3AiLHQudG9wLW4pfX0scmVzaXphYmxlOiEwLHNob3c6bnVsbCxzdGFjazohMCx0aXRsZToiIix3aWR0aDozMDAsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxUaXRsZT10aGlzLmVsZW1lbnQuYXR0cigidGl0bGUiKSx0eXBlb2YgdGhpcy5vcmlnaW5hbFRpdGxlIT0ic3RyaW5nIiYmKHRoaXMub3JpZ2luYWxUaXRsZT0iIiksdGhpcy5vbGRQb3NpdGlvbj17cGFyZW50OnRoaXMuZWxlbWVudC5wYXJlbnQoKSxpbmRleDp0aGlzLmVsZW1lbnQucGFyZW50KCkuY2hpbGRyZW4oKS5pbmRleCh0aGlzLmVsZW1lbnQpfSx0aGlzLm9wdGlvbnMudGl0bGU9dGhpcy5vcHRpb25zLnRpdGxlfHx0aGlzLm9yaWdpbmFsVGl0bGU7dmFyIHQ9dGhpcyxyPXRoaXMub3B0aW9ucyxpPXIudGl0bGV8fCImIzE2MDsiLHMsbyx1LGEsZjtzPSh0aGlzLnVpRGlhbG9nPWUoIjxkaXY+IikpLmFkZENsYXNzKG4rci5kaWFsb2dDbGFzcykuY3NzKHtkaXNwbGF5OiJub25lIixvdXRsaW5lOjAsekluZGV4OnIuekluZGV4fSkuYXR0cigidGFiSW5kZXgiLC0xKS5rZXlkb3duKGZ1bmN0aW9uKG4pe3IuY2xvc2VPbkVzY2FwZSYmIW4uaXNEZWZhdWx0UHJldmVudGVkKCkmJm4ua2V5Q29kZSYmbi5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSYmKHQuY2xvc2Uobiksbi5wcmV2ZW50RGVmYXVsdCgpKX0pLm1vdXNlZG93bihmdW5jdGlvbihlKXt0Lm1vdmVUb1RvcCghMSxlKX0pLmFwcGVuZFRvKCJib2R5IiksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKCJ0aXRsZSIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmFwcGVuZFRvKHMpLG89KHRoaXMudWlEaWFsb2dUaXRsZWJhcj1lKCI8ZGl2PiIpKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyICB1aS13aWRnZXQtaGVhZGVyICB1aS1jb3JuZXItYWxsICB1aS1oZWxwZXItY2xlYXJmaXgiKS5iaW5kKCJtb3VzZWRvd24iLGZ1bmN0aW9uKCl7cy5mb2N1cygpfSkucHJlcGVuZFRvKHMpLHU9ZSgiPGEgaHJlZj0nIyc+PC9hPiIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGViYXItY2xvc2UgIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuY2xpY2soZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLHQuY2xvc2UoZSl9KS5hcHBlbmRUbyhvKSwodGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2VUZXh0PWUoIjxzcGFuPiIpKS5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWNsb3NldGhpY2siKS50ZXh0KHIuY2xvc2VUZXh0KS5hcHBlbmRUbyh1KSxhPWUoIjxzcGFuPiIpLnVuaXF1ZUlkKCkuYWRkQ2xhc3MoInVpLWRpYWxvZy10aXRsZSIpLmh0bWwoaSkucHJlcGVuZFRvKG8pLGY9KHRoaXMudWlEaWFsb2dCdXR0b25QYW5lPWUoIjxkaXY+IikpLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCB1aS1oZWxwZXItY2xlYXJmaXgiKSwodGhpcy51aUJ1dHRvblNldD1lKCI8ZGl2PiIpKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnNldCIpLmFwcGVuZFRvKGYpLHMuYXR0cih7cm9sZToiZGlhbG9nIiwiYXJpYS1sYWJlbGxlZGJ5IjphLmF0dHIoImlkIil9KSxvLmZpbmQoIioiKS5hZGQobykuZGlzYWJsZVNlbGVjdGlvbigpLHRoaXMuX2hvdmVyYWJsZSh1KSx0aGlzLl9mb2N1c2FibGUodSksci5kcmFnZ2FibGUmJmUuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCksci5yZXNpemFibGUmJmUuZm4ucmVzaXphYmxlJiZ0aGlzLl9tYWtlUmVzaXphYmxlKCksdGhpcy5fY3JlYXRlQnV0dG9ucyhyLmJ1dHRvbnMpLHRoaXMuX2lzT3Blbj0hMSxlLmZuLmJnaWZyYW1lJiZzLmJnaWZyYW1lKCksdGhpcy5fb24ocyx7a2V5ZG93bjpmdW5jdGlvbih0KXtpZighci5tb2RhbHx8dC5rZXlDb2RlIT09ZS51aS5rZXlDb2RlLlRBQilyZXR1cm47dmFyIG49ZSgiOnRhYmJhYmxlIixzKSxpPW4uZmlsdGVyKCI6Zmlyc3QiKSxvPW4uZmlsdGVyKCI6bGFzdCIpO2lmKHQudGFyZ2V0PT09b1swXSYmIXQuc2hpZnRLZXkpcmV0dXJuIGkuZm9jdXMoMSksITE7aWYodC50YXJnZXQ9PT1pWzBdJiZ0LnNoaWZ0S2V5KXJldHVybiBvLmZvY3VzKDEpLCExfX0pfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5hdXRvT3BlbiYmdGhpcy5vcGVuKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLm9sZFBvc2l0aW9uO3RoaXMub3ZlcmxheSYmdGhpcy5vdmVybGF5LmRlc3Ryb3koKSx0aGlzLnVpRGlhbG9nLmhpZGUoKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1jb250ZW50IHVpLXdpZGdldC1jb250ZW50IikuaGlkZSgpLmFwcGVuZFRvKCJib2R5IiksdGhpcy51aURpYWxvZy5yZW1vdmUoKSx0aGlzLm9yaWdpbmFsVGl0bGUmJnRoaXMuZWxlbWVudC5hdHRyKCJ0aXRsZSIsdGhpcy5vcmlnaW5hbFRpdGxlKSxlPXQucGFyZW50LmNoaWxkcmVuKCkuZXEodC5pbmRleCksZS5sZW5ndGgmJmVbMF0hPT10aGlzLmVsZW1lbnRbMF0/ZS5iZWZvcmUodGhpcy5lbGVtZW50KTp0LnBhcmVudC5hcHBlbmQodGhpcy5lbGVtZW50KX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlEaWFsb2d9LGNsb3NlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscixpO2lmKCF0aGlzLl9pc09wZW4pcmV0dXJuO2lmKCExPT09dGhpcy5fdHJpZ2dlcigiYmVmb3JlQ2xvc2UiLHQpKXJldHVybjtyZXR1cm4gdGhpcy5faXNPcGVuPSExLHRoaXMub3ZlcmxheSYmdGhpcy5vdmVybGF5LmRlc3Ryb3koKSx0aGlzLm9wdGlvbnMuaGlkZT90aGlzLl9oaWRlKHRoaXMudWlEaWFsb2csdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtuLl90cmlnZ2VyKCJjbG9zZSIsdCl9KToodGhpcy51aURpYWxvZy5oaWRlKCksdGhpcy5fdHJpZ2dlcigiY2xvc2UiLHQpKSxlLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSgpLHRoaXMub3B0aW9ucy5tb2RhbCYmKHI9MCxlKCIudWktZGlhbG9nIikuZWFjaChmdW5jdGlvbigpe3RoaXMhPT1uLnVpRGlhbG9nWzBdJiYoaT1lKHRoaXMpLmNzcygiei1pbmRleCIpLGlzTmFOKGkpfHwocj1NYXRoLm1heChyLGkpKSl9KSxlLnVpLmRpYWxvZy5tYXhaPXIpLHRoaXN9LGlzT3BlbjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc09wZW59LG1vdmVUb1RvcDpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXMub3B0aW9ucyxpO3JldHVybiByLm1vZGFsJiYhdHx8IXIuc3RhY2smJiFyLm1vZGFsP3RoaXMuX3RyaWdnZXIoImZvY3VzIixuKTooci56SW5kZXg+ZS51aS5kaWFsb2cubWF4WiYmKGUudWkuZGlhbG9nLm1heFo9ci56SW5kZXgpLHRoaXMub3ZlcmxheSYmKGUudWkuZGlhbG9nLm1heForPTEsZS51aS5kaWFsb2cub3ZlcmxheS5tYXhaPWUudWkuZGlhbG9nLm1heFosdGhpcy5vdmVybGF5LiRlbC5jc3MoInotaW5kZXgiLGUudWkuZGlhbG9nLm92ZXJsYXkubWF4WikpLGk9e3Njcm9sbFRvcDp0aGlzLmVsZW1lbnQuc2Nyb2xsVG9wKCksc2Nyb2xsTGVmdDp0aGlzLmVsZW1lbnQuc2Nyb2xsTGVmdCgpfSxlLnVpLmRpYWxvZy5tYXhaKz0xLHRoaXMudWlEaWFsb2cuY3NzKCJ6LWluZGV4IixlLnVpLmRpYWxvZy5tYXhaKSx0aGlzLmVsZW1lbnQuYXR0cihpKSx0aGlzLl90cmlnZ2VyKCJmb2N1cyIsbiksdGhpcyl9LG9wZW46ZnVuY3Rpb24oKXtpZih0aGlzLl9pc09wZW4pcmV0dXJuO3ZhciB0LG49dGhpcy5vcHRpb25zLHI9dGhpcy51aURpYWxvZztyZXR1cm4gdGhpcy5fc2l6ZSgpLHRoaXMuX3Bvc2l0aW9uKG4ucG9zaXRpb24pLHIuc2hvdyhuLnNob3cpLHRoaXMub3ZlcmxheT1uLm1vZGFsP25ldyBlLnVpLmRpYWxvZy5vdmVybGF5KHRoaXMpOm51bGwsdGhpcy5tb3ZlVG9Ub3AoITApLHQ9dGhpcy5lbGVtZW50LmZpbmQoIjp0YWJiYWJsZSIpLHQubGVuZ3RofHwodD10aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5maW5kKCI6dGFiYmFibGUiKSx0Lmxlbmd0aHx8KHQ9cikpLHQuZXEoMCkuZm9jdXMoKSx0aGlzLl9pc09wZW49ITAsdGhpcy5fdHJpZ2dlcigib3BlbiIpLHRoaXN9LF9jcmVhdGVCdXR0b25zOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMscj0hMTt0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5yZW1vdmUoKSx0aGlzLnVpQnV0dG9uU2V0LmVtcHR5KCksdHlwZW9mIHQ9PSJvYmplY3QiJiZ0IT09bnVsbCYmZS5lYWNoKHQsZnVuY3Rpb24oKXtyZXR1cm4hKHI9ITApfSkscj8oZS5lYWNoKHQsZnVuY3Rpb24odCxyKXt2YXIgaSxzO3I9ZS5pc0Z1bmN0aW9uKHIpP3tjbGljazpyLHRleHQ6dH06cixyPWUuZXh0ZW5kKHt0eXBlOiJidXR0b24ifSxyKSxzPXIuY2xpY2ssci5jbGljaz1mdW5jdGlvbigpe3MuYXBwbHkobi5lbGVtZW50WzBdLGFyZ3VtZW50cyl9LGk9ZSgiPGJ1dHRvbj48L2J1dHRvbj4iLHIpLmFwcGVuZFRvKG4udWlCdXR0b25TZXQpLGUuZm4uYnV0dG9uJiZpLmJ1dHRvbigpfSksdGhpcy51aURpYWxvZy5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnMiKSx0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5hcHBlbmRUbyh0aGlzLnVpRGlhbG9nKSk6dGhpcy51aURpYWxvZy5yZW1vdmVDbGFzcygidWktZGlhbG9nLWJ1dHRvbnMiKX0sX21ha2VEcmFnZ2FibGU6ZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUpe3JldHVybntwb3NpdGlvbjplLnBvc2l0aW9uLG9mZnNldDplLm9mZnNldH19dmFyIHQ9dGhpcyxuPXRoaXMub3B0aW9uczt0aGlzLnVpRGlhbG9nLmRyYWdnYWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQsIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UiLGhhbmRsZToiLnVpLWRpYWxvZy10aXRsZWJhciIsY29udGFpbm1lbnQ6ImRvY3VtZW50IixzdGFydDpmdW5jdGlvbihuLGkpe2UodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1kcmFnZ2luZyIpLHQuX3RyaWdnZXIoImRyYWdTdGFydCIsbixyKGkpKX0sZHJhZzpmdW5jdGlvbihlLG4pe3QuX3RyaWdnZXIoImRyYWciLGUscihuKSl9LHN0b3A6ZnVuY3Rpb24oaSxzKXtuLnBvc2l0aW9uPVtzLnBvc2l0aW9uLmxlZnQtdC5kb2N1bWVudC5zY3JvbGxMZWZ0KCkscy5wb3NpdGlvbi50b3AtdC5kb2N1bWVudC5zY3JvbGxUb3AoKV0sZSh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksdC5fdHJpZ2dlcigiZHJhZ1N0b3AiLGkscihzKSksZS51aS5kaWFsb2cub3ZlcmxheS5yZXNpemUoKX19KX0sX21ha2VSZXNpemFibGU6ZnVuY3Rpb24obil7ZnVuY3Rpb24gdShlKXtyZXR1cm57b3JpZ2luYWxQb3NpdGlvbjplLm9yaWdpbmFsUG9zaXRpb24sb3JpZ2luYWxTaXplOmUub3JpZ2luYWxTaXplLHBvc2l0aW9uOmUucG9zaXRpb24sc2l6ZTplLnNpemV9fW49bj09PXQ/dGhpcy5vcHRpb25zLnJlc2l6YWJsZTpuO3ZhciByPXRoaXMsaT10aGlzLm9wdGlvbnMscz10aGlzLnVpRGlhbG9nLmNzcygicG9zaXRpb24iKSxvPXR5cGVvZiBuPT0ic3RyaW5nIj9uOiJuLGUscyx3LHNlLHN3LG5lLG53Ijt0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSh7Y2FuY2VsOiIudWktZGlhbG9nLWNvbnRlbnQiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsYWxzb1Jlc2l6ZTp0aGlzLmVsZW1lbnQsbWF4V2lkdGg6aS5tYXhXaWR0aCxtYXhIZWlnaHQ6aS5tYXhIZWlnaHQsbWluV2lkdGg6aS5taW5XaWR0aCxtaW5IZWlnaHQ6dGhpcy5fbWluSGVpZ2h0KCksaGFuZGxlczpvLHN0YXJ0OmZ1bmN0aW9uKHQsbil7ZSh0aGlzKS5hZGRDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksci5fdHJpZ2dlcigicmVzaXplU3RhcnQiLHQsdShuKSl9LHJlc2l6ZTpmdW5jdGlvbihlLHQpe3IuX3RyaWdnZXIoInJlc2l6ZSIsZSx1KHQpKX0sc3RvcDpmdW5jdGlvbih0LG4pe2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1yZXNpemluZyIpLGkuaGVpZ2h0PWUodGhpcykuaGVpZ2h0KCksaS53aWR0aD1lKHRoaXMpLndpZHRoKCksci5fdHJpZ2dlcigicmVzaXplU3RvcCIsdCx1KG4pKSxlLnVpLmRpYWxvZy5vdmVybGF5LnJlc2l6ZSgpfX0pLmNzcygicG9zaXRpb24iLHMpLmZpbmQoIi51aS1yZXNpemFibGUtc2UiKS5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXAtZGlhZ29uYWwtc2UiKX0sX21pbkhlaWdodDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztyZXR1cm4gZS5oZWlnaHQ9PT0iYXV0byI/ZS5taW5IZWlnaHQ6TWF0aC5taW4oZS5taW5IZWlnaHQsZS5oZWlnaHQpfSxfcG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIG49W10scj1bMCwwXSxpO2lmKHQpe2lmKHR5cGVvZiB0PT0ic3RyaW5nInx8dHlwZW9mIHQ9PSJvYmplY3QiJiYiMCJpbiB0KW49dC5zcGxpdD90LnNwbGl0KCIgIik6W3RbMF0sdFsxXV0sbi5sZW5ndGg9PT0xJiYoblsxXT1uWzBdKSxlLmVhY2goWyJsZWZ0IiwidG9wIl0sZnVuY3Rpb24oZSx0KXsrbltlXT09PW5bZV0mJihyW2VdPW5bZV0sbltlXT10KX0pLHQ9e215Om5bMF0rKHJbMF08MD9yWzBdOiIrIityWzBdKSsiICIrblsxXSsoclsxXTwwP3JbMV06IisiK3JbMV0pLGF0Om4uam9pbigiICIpfTt0PWUuZXh0ZW5kKHt9LGUudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uLHQpfWVsc2UgdD1lLnVpLmRpYWxvZy5wcm90b3R5cGUub3B0aW9ucy5wb3NpdGlvbjtpPXRoaXMudWlEaWFsb2cuaXMoIjp2aXNpYmxlIiksaXx8dGhpcy51aURpYWxvZy5zaG93KCksdGhpcy51aURpYWxvZy5wb3NpdGlvbih0KSxpfHx0aGlzLnVpRGlhbG9nLmhpZGUoKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24odCl7dmFyIG49dGhpcyxzPXt9LG89ITE7ZS5lYWNoKHQsZnVuY3Rpb24oZSx0KXtuLl9zZXRPcHRpb24oZSx0KSxlIGluIHImJihvPSEwKSxlIGluIGkmJihzW2VdPXQpfSksbyYmdGhpcy5fc2l6ZSgpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIscyl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxyKXt2YXIgaSxzLG89dGhpcy51aURpYWxvZztzd2l0Y2godCl7Y2FzZSJidXR0b25zIjp0aGlzLl9jcmVhdGVCdXR0b25zKHIpO2JyZWFrO2Nhc2UiY2xvc2VUZXh0Ijp0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZVRleHQudGV4dCgiIityKTticmVhaztjYXNlImRpYWxvZ0NsYXNzIjpvLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5kaWFsb2dDbGFzcykuYWRkQ2xhc3MobityKTticmVhaztjYXNlImRpc2FibGVkIjpyP28uYWRkQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpOm8ucmVtb3ZlQ2xhc3MoInVpLWRpYWxvZy1kaXNhYmxlZCIpO2JyZWFrO2Nhc2UiZHJhZ2dhYmxlIjppPW8uaXMoIjpkYXRhKGRyYWdnYWJsZSkiKSxpJiYhciYmby5kcmFnZ2FibGUoImRlc3Ryb3kiKSwhaSYmciYmdGhpcy5fbWFrZURyYWdnYWJsZSgpO2JyZWFrO2Nhc2UicG9zaXRpb24iOnRoaXMuX3Bvc2l0aW9uKHIpO2JyZWFrO2Nhc2UicmVzaXphYmxlIjpzPW8uaXMoIjpkYXRhKHJlc2l6YWJsZSkiKSxzJiYhciYmby5yZXNpemFibGUoImRlc3Ryb3kiKSxzJiZ0eXBlb2Ygcj09InN0cmluZyImJm8ucmVzaXphYmxlKCJvcHRpb24iLCJoYW5kbGVzIixyKSwhcyYmciE9PSExJiZ0aGlzLl9tYWtlUmVzaXphYmxlKHIpO2JyZWFrO2Nhc2UidGl0bGUiOmUoIi51aS1kaWFsb2ctdGl0bGUiLHRoaXMudWlEaWFsb2dUaXRsZWJhcikuaHRtbCgiIisocnx8IiYjMTYwOyIpKX10aGlzLl9zdXBlcih0LHIpfSxfc2l6ZTpmdW5jdGlvbigpe3ZhciB0LG4scixpPXRoaXMub3B0aW9ucyxzPXRoaXMudWlEaWFsb2cuaXMoIjp2aXNpYmxlIik7dGhpcy5lbGVtZW50LnNob3coKS5jc3Moe3dpZHRoOiJhdXRvIixtaW5IZWlnaHQ6MCxoZWlnaHQ6MH0pLGkubWluV2lkdGg+aS53aWR0aCYmKGkud2lkdGg9aS5taW5XaWR0aCksdD10aGlzLnVpRGlhbG9nLmNzcyh7aGVpZ2h0OiJhdXRvIix3aWR0aDppLndpZHRofSkub3V0ZXJIZWlnaHQoKSxuPU1hdGgubWF4KDAsaS5taW5IZWlnaHQtdCksaS5oZWlnaHQ9PT0iYXV0byI/ZS5zdXBwb3J0Lm1pbkhlaWdodD90aGlzLmVsZW1lbnQuY3NzKHttaW5IZWlnaHQ6bixoZWlnaHQ6ImF1dG8ifSk6KHRoaXMudWlEaWFsb2cuc2hvdygpLHI9dGhpcy5lbGVtZW50LmNzcygiaGVpZ2h0IiwiYXV0byIpLmhlaWdodCgpLHN8fHRoaXMudWlEaWFsb2cuaGlkZSgpLHRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgocixuKSkpOnRoaXMuZWxlbWVudC5oZWlnaHQoTWF0aC5tYXgoaS5oZWlnaHQtdCwwKSksdGhpcy51aURpYWxvZy5pcygiOmRhdGEocmVzaXphYmxlKSIpJiZ0aGlzLnVpRGlhbG9nLnJlc2l6YWJsZSgib3B0aW9uIiwibWluSGVpZ2h0Iix0aGlzLl9taW5IZWlnaHQoKSl9fSksZS5leHRlbmQoZS51aS5kaWFsb2cse3V1aWQ6MCxtYXhaOjAsZ2V0VGl0bGVJZDpmdW5jdGlvbihlKXt2YXIgdD1lLmF0dHIoImlkIik7cmV0dXJuIHR8fCh0aGlzLnV1aWQrPTEsdD10aGlzLnV1aWQpLCJ1aS1kaWFsb2ctdGl0bGUtIit0fSxvdmVybGF5OmZ1bmN0aW9uKHQpe3RoaXMuJGVsPWUudWkuZGlhbG9nLm92ZXJsYXkuY3JlYXRlKHQpfX0pLGUuZXh0ZW5kKGUudWkuZGlhbG9nLm92ZXJsYXkse2luc3RhbmNlczpbXSxvbGRJbnN0YW5jZXM6W10sbWF4WjowLGV2ZW50czplLm1hcCgiZm9jdXMsbW91c2Vkb3duLG1vdXNldXAsa2V5ZG93bixrZXlwcmVzcyxjbGljayIuc3BsaXQoIiwiKSxmdW5jdGlvbihlKXtyZXR1cm4gZSsiLmRpYWxvZy1vdmVybGF5In0pLmpvaW4oIiAiKSxjcmVhdGU6ZnVuY3Rpb24odCl7dGhpcy5pbnN0YW5jZXMubGVuZ3RoPT09MCYmKHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlLnVpLmRpYWxvZy5vdmVybGF5Lmluc3RhbmNlcy5sZW5ndGgmJmUoZG9jdW1lbnQpLmJpbmQoZS51aS5kaWFsb2cub3ZlcmxheS5ldmVudHMsZnVuY3Rpb24odCl7aWYoZSh0LnRhcmdldCkuekluZGV4KCk8ZS51aS5kaWFsb2cub3ZlcmxheS5tYXhaKXJldHVybiExfSl9LDEpLGUod2luZG93KS5iaW5kKCJyZXNpemUuZGlhbG9nLW92ZXJsYXkiLGUudWkuZGlhbG9nLm92ZXJsYXkucmVzaXplKSk7dmFyIG49dGhpcy5vbGRJbnN0YW5jZXMucG9wKCl8fGUoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXdpZGdldC1vdmVybGF5Iik7cmV0dXJuIGUoZG9jdW1lbnQpLmJpbmQoImtleWRvd24uZGlhbG9nLW92ZXJsYXkiLGZ1bmN0aW9uKHIpe3ZhciBpPWUudWkuZGlhbG9nLm92ZXJsYXkuaW5zdGFuY2VzO2kubGVuZ3RoIT09MCYmaVtpLmxlbmd0aC0xXT09PW4mJnQub3B0aW9ucy5jbG9zZU9uRXNjYXBlJiYhci5pc0RlZmF1bHRQcmV2ZW50ZWQoKSYmci5rZXlDb2RlJiZyLmtleUNvZGU9PT1lLnVpLmtleUNvZGUuRVNDQVBFJiYodC5jbG9zZShyKSxyLnByZXZlbnREZWZhdWx0KCkpfSksbi5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5jc3Moe3dpZHRoOnRoaXMud2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWlnaHQoKX0pLGUuZm4uYmdpZnJhbWUmJm4uYmdpZnJhbWUoKSx0aGlzLmluc3RhbmNlcy5wdXNoKG4pLG59LGRlc3Ryb3k6ZnVuY3Rpb24odCl7dmFyIG49ZS5pbkFycmF5KHQsdGhpcy5pbnN0YW5jZXMpLHI9MDtuIT09LTEmJnRoaXMub2xkSW5zdGFuY2VzLnB1c2godGhpcy5pbnN0YW5jZXMuc3BsaWNlKG4sMSlbMF0pLHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTAmJmUoW2RvY3VtZW50LHdpbmRvd10pLnVuYmluZCgiLmRpYWxvZy1vdmVybGF5IiksdC5oZWlnaHQoMCkud2lkdGgoMCkucmVtb3ZlKCksZS5lYWNoKHRoaXMuaW5zdGFuY2VzLGZ1bmN0aW9uKCl7cj1NYXRoLm1heChyLHRoaXMuY3NzKCJ6LWluZGV4IikpfSksdGhpcy5tYXhaPXJ9LGhlaWdodDpmdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIGUudWkuaWU/KHQ9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCksbj1NYXRoLm1heChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0KSx0PG4/ZSh3aW5kb3cpLmhlaWdodCgpKyJweCI6dCsicHgiKTplKGRvY3VtZW50KS5oZWlnaHQoKSsicHgifSx3aWR0aDpmdW5jdGlvbigpe3ZhciB0LG47cmV0dXJuIGUudWkuaWU/KHQ9TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFdpZHRoLGRvY3VtZW50LmJvZHkuc2Nyb2xsV2lkdGgpLG49TWF0aC5tYXgoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldFdpZHRoLGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgpLHQ8bj9lKHdpbmRvdykud2lkdGgoKSsicHgiOnQrInB4Iik6ZShkb2N1bWVudCkud2lkdGgoKSsicHgifSxyZXNpemU6ZnVuY3Rpb24oKXt2YXIgdD1lKFtdKTtlLmVhY2goZS51aS5kaWFsb2cub3ZlcmxheS5pbnN0YW5jZXMsZnVuY3Rpb24oKXt0PXQuYWRkKHRoaXMpfSksdC5jc3Moe3dpZHRoOjAsaGVpZ2h0OjB9KS5jc3Moe3dpZHRoOmUudWkuZGlhbG9nLm92ZXJsYXkud2lkdGgoKSxoZWlnaHQ6ZS51aS5kaWFsb2cub3ZlcmxheS5oZWlnaHQoKX0pfX0pLGUuZXh0ZW5kKGUudWkuZGlhbG9nLm92ZXJsYXkucHJvdG90eXBlLHtkZXN0cm95OmZ1bmN0aW9uKCl7ZS51aS5kaWFsb2cub3ZlcmxheS5kZXN0cm95KHRoaXMuJGVsKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLmRyYWdnYWJsZSIsZS51aS5tb3VzZSx7dmVyc2lvbjoiMS45LjIiLHdpZGdldEV2ZW50UHJlZml4OiJkcmFnIixvcHRpb25zOnthZGRDbGFzc2VzOiEwLGFwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ITEsY29ubmVjdFRvU29ydGFibGU6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDohMSxncmlkOiExLGhhbmRsZTohMSxoZWxwZXI6Im9yaWdpbmFsIixpZnJhbWVGaXg6ITEsb3BhY2l0eTohMSxyZWZyZXNoUG9zaXRpb25zOiExLHJldmVydDohMSxyZXZlcnREdXJhdGlvbjo1MDAsc2NvcGU6ImRlZmF1bHQiLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzbmFwOiExLHNuYXBNb2RlOiJib3RoIixzbmFwVG9sZXJhbmNlOjIwLHN0YWNrOiExLHpJbmRleDohMX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJiEvXig/OnJ8YXxmKS8udGVzdCh0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpKSYmKHRoaXMuZWxlbWVudFswXS5zdHlsZS5wb3NpdGlvbj0icmVsYXRpdmUiKSx0aGlzLm9wdGlvbnMuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUiKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VJbml0KCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcmFnZ2FibGUgdWktZHJhZ2dhYmxlLWRyYWdnaW5nIHVpLWRyYWdnYWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5oZWxwZXJ8fG4uZGlzYWJsZWR8fGUodC50YXJnZXQpLmlzKCIudWktcmVzaXphYmxlLWhhbmRsZSIpPyExOih0aGlzLmhhbmRsZT10aGlzLl9nZXRIYW5kbGUodCksdGhpcy5oYW5kbGU/KGUobi5pZnJhbWVGaXg9PT0hMD8iaWZyYW1lIjpuLmlmcmFtZUZpeCkuZWFjaChmdW5jdGlvbigpe2UoJzxkaXYgY2xhc3M9InVpLWRyYWdnYWJsZS1pZnJhbWVGaXgiIHN0eWxlPSJiYWNrZ3JvdW5kOiAjZmZmOyI+PC9kaXY+JykuY3NzKHt3aWR0aDp0aGlzLm9mZnNldFdpZHRoKyJweCIsaGVpZ2h0OnRoaXMub2Zmc2V0SGVpZ2h0KyJweCIscG9zaXRpb246ImFic29sdXRlIixvcGFjaXR5OiIwLjAwMSIsekluZGV4OjFlM30pLmNzcyhlKHRoaXMpLm9mZnNldCgpKS5hcHBlbmRUbygiYm9keSIpfSksITApOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIodCksdGhpcy5oZWxwZXIuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSxlLnVpLmRkbWFuYWdlciYmKGUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ9dGhpcyksdGhpcy5fY2FjaGVNYXJnaW5zKCksdGhpcy5jc3NQb3NpdGlvbj10aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiksdGhpcy5zY3JvbGxQYXJlbnQ9dGhpcy5oZWxwZXIuc2Nyb2xsUGFyZW50KCksdGhpcy5vZmZzZXQ9dGhpcy5wb3NpdGlvbkFicz10aGlzLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LGUuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDp0LnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOnQucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLnBvc2l0aW9uPXRoaXMuX2dlbmVyYXRlUG9zaXRpb24odCksdGhpcy5vcmlnaW5hbFBhZ2VYPXQucGFnZVgsdGhpcy5vcmlnaW5hbFBhZ2VZPXQucGFnZVksbi5jdXJzb3JBdCYmdGhpcy5fYWRqdXN0T2Zmc2V0RnJvbUhlbHBlcihuLmN1cnNvckF0KSxuLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0KT09PSExPyh0aGlzLl9jbGVhcigpLCExKToodGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLGUudWkuZGRtYW5hZ2VyJiYhbi5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpLHRoaXMuX21vdXNlRHJhZyh0LCEwKSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZ1N0YXJ0KHRoaXMsdCksITApfSxfbW91c2VEcmFnOmZ1bmN0aW9uKHQsbil7dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIik7aWYoIW4pe3ZhciByPXRoaXMuX3VpSGFzaCgpO2lmKHRoaXMuX3RyaWdnZXIoImRyYWciLHQscik9PT0hMSlyZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksITE7dGhpcy5wb3NpdGlvbj1yLnBvc2l0aW9ufWlmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ5Iil0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiO2lmKCF0aGlzLm9wdGlvbnMuYXhpc3x8dGhpcy5vcHRpb25zLmF4aXMhPSJ4Iil0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4IjtyZXR1cm4gZS51aS5kZG1hbmFnZXImJmUudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyx0KSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt2YXIgbj0hMTtlLnVpLmRkbWFuYWdlciYmIXRoaXMub3B0aW9ucy5kcm9wQmVoYXZpb3VyJiYobj1lLnVpLmRkbWFuYWdlci5kcm9wKHRoaXMsdCkpLHRoaXMuZHJvcHBlZCYmKG49dGhpcy5kcm9wcGVkLHRoaXMuZHJvcHBlZD0hMSk7dmFyIHI9dGhpcy5lbGVtZW50WzBdLGk9ITE7d2hpbGUociYmKHI9ci5wYXJlbnROb2RlKSlyPT1kb2N1bWVudCYmKGk9ITApO2lmKCFpJiZ0aGlzLm9wdGlvbnMuaGVscGVyPT09Im9yaWdpbmFsIilyZXR1cm4hMTtpZih0aGlzLm9wdGlvbnMucmV2ZXJ0PT0iaW52YWxpZCImJiFufHx0aGlzLm9wdGlvbnMucmV2ZXJ0PT0idmFsaWQiJiZufHx0aGlzLm9wdGlvbnMucmV2ZXJ0PT09ITB8fGUuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMucmV2ZXJ0KSYmdGhpcy5vcHRpb25zLnJldmVydC5jYWxsKHRoaXMuZWxlbWVudCxuKSl7dmFyIHM9dGhpcztlKHRoaXMuaGVscGVyKS5hbmltYXRlKHRoaXMub3JpZ2luYWxQb3NpdGlvbixwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0RHVyYXRpb24sMTApLGZ1bmN0aW9uKCl7cy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmcy5fY2xlYXIoKX0pfWVsc2UgdGhpcy5fdHJpZ2dlcigic3RvcCIsdCkhPT0hMSYmdGhpcy5fY2xlYXIoKTtyZXR1cm4hMX0sX21vdXNlVXA6ZnVuY3Rpb24odCl7cmV0dXJuIGUoImRpdi51aS1kcmFnZ2FibGUtaWZyYW1lRml4IikuZWFjaChmdW5jdGlvbigpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKX0pLGUudWkuZGRtYW5hZ2VyJiZlLnVpLmRkbWFuYWdlci5kcmFnU3RvcCh0aGlzLHQpLGUudWkubW91c2UucHJvdG90eXBlLl9tb3VzZVVwLmNhbGwodGhpcyx0KX0sY2FuY2VsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGVscGVyLmlzKCIudWktZHJhZ2dhYmxlLWRyYWdnaW5nIik/dGhpcy5fbW91c2VVcCh7fSk6dGhpcy5fY2xlYXIoKSx0aGlzfSxfZ2V0SGFuZGxlOmZ1bmN0aW9uKHQpe3ZhciBuPSF0aGlzLm9wdGlvbnMuaGFuZGxlfHwhZSh0aGlzLm9wdGlvbnMuaGFuZGxlLHRoaXMuZWxlbWVudCkubGVuZ3RoPyEwOiExO3JldHVybiBlKHRoaXMub3B0aW9ucy5oYW5kbGUsdGhpcy5lbGVtZW50KS5maW5kKCIqIikuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt0aGlzPT10LnRhcmdldCYmKG49ITApfSksbn0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscj1lLmlzRnVuY3Rpb24obi5oZWxwZXIpP2Uobi5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFt0XSkpOm4uaGVscGVyPT0iY2xvbmUiP3RoaXMuZWxlbWVudC5jbG9uZSgpLnJlbW92ZUF0dHIoImlkIik6dGhpcy5lbGVtZW50O3JldHVybiByLnBhcmVudHMoImJvZHkiKS5sZW5ndGh8fHIuYXBwZW5kVG8obi5hcHBlbmRUbz09InBhcmVudCI/dGhpcy5lbGVtZW50WzBdLnBhcmVudE5vZGU6bi5hcHBlbmRUbyksclswXSE9dGhpcy5lbGVtZW50WzBdJiYhLyhmaXhlZHxhYnNvbHV0ZSkvLnRlc3Qoci5jc3MoInBvc2l0aW9uIikpJiZyLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLHJ9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3RoaXMuY3NzUG9zaXRpb249PSJhYnNvbHV0ZSImJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJih0LmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSx0LnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpO2lmKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5fHx0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lJiZ0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJodG1sIiYmZS51aS5pZSl0PXt0b3A6MCxsZWZ0OjB9O3JldHVybnt0b3A6dC50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6dC5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiKXt2YXIgZT10aGlzLmVsZW1lbnQucG9zaXRpb24oKTtyZXR1cm57dG9wOmUudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDplLmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3QuY29udGFpbm1lbnQ9PSJwYXJlbnQiJiYodC5jb250YWlubWVudD10aGlzLmhlbHBlclswXS5wYXJlbnROb2RlKTtpZih0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQifHx0LmNvbnRhaW5tZW50PT0id2luZG93Iil0aGlzLmNvbnRhaW5tZW50PVt0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiPzA6ZSh3aW5kb3cpLnNjcm9sbExlZnQoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCktdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsTGVmdCgpKStlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/MDplKHdpbmRvdykuc2Nyb2xsVG9wKCkpKyhlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF07aWYoIS9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdCh0LmNvbnRhaW5tZW50KSYmdC5jb250YWlubWVudC5jb25zdHJ1Y3RvciE9QXJyYXkpe3ZhciBuPWUodC5jb250YWlubWVudCkscj1uWzBdO2lmKCFyKXJldHVybjt2YXIgaT1uLm9mZnNldCgpLHM9ZShyKS5jc3MoIm92ZXJmbG93IikhPSJoaWRkZW4iO3RoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChlKHIpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoZShyKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShyKS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLChzP01hdGgubWF4KHIuc2Nyb2xsV2lkdGgsci5vZmZzZXRXaWR0aCk6ci5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGUocikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LXRoaXMubWFyZ2lucy5yaWdodCwocz9NYXRoLm1heChyLnNjcm9sbEhlaWdodCxyLm9mZnNldEhlaWdodCk6ci5vZmZzZXRIZWlnaHQpLShwYXJzZUludChlKHIpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKHIpLmNzcygicGFkZGluZ0JvdHRvbSIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcC10aGlzLm1hcmdpbnMuYm90dG9tXSx0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcj1ufWVsc2UgdC5jb250YWlubWVudC5jb25zdHJ1Y3Rvcj09QXJyYXkmJih0aGlzLmNvbnRhaW5tZW50PXQuY29udGFpbm1lbnQpfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24odCxuKXtufHwobj10aGlzLnBvc2l0aW9uKTt2YXIgcj10PT0iYWJzb2x1dGUiPzE6LTEsaT10aGlzLm9wdGlvbnMscz10aGlzLmNzc1Bvc2l0aW9uIT0iYWJzb2x1dGUifHx0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJiEhZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsbz0vKGh0bWx8Ym9keSkvaS50ZXN0KHNbMF0udGFnTmFtZSk7cmV0dXJue3RvcDpuLnRvcCt0aGlzLm9mZnNldC5yZWxhdGl2ZS50b3Aqcit0aGlzLm9mZnNldC5wYXJlbnQudG9wKnItKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOm8/MDpzLnNjcm9sbFRvcCgpKSpyLGxlZnQ6bi5sZWZ0K3RoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQqcit0aGlzLm9mZnNldC5wYXJlbnQubGVmdCpyLSh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6bz8wOnMuc2Nyb2xsTGVmdCgpKSpyfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9dGhpcy5jc3NQb3NpdGlvbiE9ImFic29sdXRlInx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiYhIWUuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGk9LyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpLHM9dC5wYWdlWCxvPXQucGFnZVk7aWYodGhpcy5vcmlnaW5hbFBvc2l0aW9uKXt2YXIgdTtpZih0aGlzLmNvbnRhaW5tZW50KXtpZih0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcil7dmFyIGE9dGhpcy5yZWxhdGl2ZV9jb250YWluZXIub2Zmc2V0KCk7dT1bdGhpcy5jb250YWlubWVudFswXSthLmxlZnQsdGhpcy5jb250YWlubWVudFsxXSthLnRvcCx0aGlzLmNvbnRhaW5tZW50WzJdK2EubGVmdCx0aGlzLmNvbnRhaW5tZW50WzNdK2EudG9wXX1lbHNlIHU9dGhpcy5jb250YWlubWVudDt0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dVswXSYmKHM9dVswXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx1WzFdJiYobz11WzFdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCksdC5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PnVbMl0mJihzPXVbMl0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksdC5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A+dVszXSYmKG89dVszXSt0aGlzLm9mZnNldC5jbGljay50b3ApfWlmKG4uZ3JpZCl7dmFyIGY9bi5ncmlkWzFdP3RoaXMub3JpZ2luYWxQYWdlWStNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWSkvbi5ncmlkWzFdKSpuLmdyaWRbMV06dGhpcy5vcmlnaW5hbFBhZ2VZO289dT9mLXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx1WzFdfHxmLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD51WzNdP2YtdGhpcy5vZmZzZXQuY2xpY2sudG9wPHVbMV0/ZituLmdyaWRbMV06Zi1uLmdyaWRbMV06ZjpmO3ZhciBsPW4uZ3JpZFswXT90aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgocy10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdOnRoaXMub3JpZ2luYWxQYWdlWDtzPXU/bC10aGlzLm9mZnNldC5jbGljay5sZWZ0PHVbMF18fGwtdGhpcy5vZmZzZXQuY2xpY2subGVmdD51WzJdP2wtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx1WzBdP2wrbi5ncmlkWzBdOmwtbi5ncmlkWzBdOmw6bH19cmV0dXJue3RvcDpvLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsodGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6aT8wOnIuc2Nyb2xsVG9wKCkpLGxlZnQ6cy10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTppPzA6ci5zY3JvbGxMZWZ0KCkpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXIucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuaGVscGVyWzBdIT10aGlzLmVsZW1lbnRbMF0mJiF0aGlzLmNhbmNlbEhlbHBlclJlbW92YWwmJnRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGwsdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsPSExfSxfdHJpZ2dlcjpmdW5jdGlvbih0LG4scil7cmV0dXJuIHI9cnx8dGhpcy5fdWlIYXNoKCksZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW24scl0pLHQ9PSJkcmFnIiYmKHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIikpLGUuV2lkZ2V0LnByb3RvdHlwZS5fdHJpZ2dlci5jYWxsKHRoaXMsdCxuLHIpfSxwbHVnaW5zOnt9LF91aUhhc2g6ZnVuY3Rpb24oZSl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSxlLnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9ci5vcHRpb25zLHM9ZS5leHRlbmQoe30sbix7aXRlbTpyLmVsZW1lbnR9KTtyLnNvcnRhYmxlcz1bXSxlKGkuY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgbj1lLmRhdGEodGhpcywic29ydGFibGUiKTtuJiYhbi5vcHRpb25zLmRpc2FibGVkJiYoci5zb3J0YWJsZXMucHVzaCh7aW5zdGFuY2U6bixzaG91bGRSZXZlcnQ6bi5vcHRpb25zLnJldmVydH0pLG4ucmVmcmVzaFBvc2l0aW9ucygpLG4uX3RyaWdnZXIoImFjdGl2YXRlIix0LHMpKX0pfSxzdG9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPWUuZXh0ZW5kKHt9LG4se2l0ZW06ci5lbGVtZW50fSk7ZS5lYWNoKHIuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5pc092ZXI/KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsci5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLnNob3VsZFJldmVydCYmKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcCh0KSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLHIub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCImJnRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW0uY3NzKHt0b3A6ImF1dG8iLGxlZnQ6ImF1dG8ifSkpOih0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigiZGVhY3RpdmF0ZSIsdCxpKSl9KX0sZHJhZzpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT10aGlzLHM9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vZmZzZXQuY2xpY2sudG9wLHI9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxpPXRoaXMucG9zaXRpb25BYnMudG9wLHM9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LG89dC5oZWlnaHQsdT10LndpZHRoLGE9dC50b3AsZj10LmxlZnQ7cmV0dXJuIGUudWkuaXNPdmVyKGkrbixzK3IsYSxmLG8sdSl9O2UuZWFjaChyLnNvcnRhYmxlcyxmdW5jdGlvbihzKXt2YXIgbz0hMSx1PXRoaXM7dGhpcy5pbnN0YW5jZS5wb3NpdGlvbkFicz1yLnBvc2l0aW9uQWJzLHRoaXMuaW5zdGFuY2UuaGVscGVyUHJvcG9ydGlvbnM9ci5oZWxwZXJQcm9wb3J0aW9ucyx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljaz1yLm9mZnNldC5jbGljayx0aGlzLmluc3RhbmNlLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmluc3RhbmNlLmNvbnRhaW5lckNhY2hlKSYmKG89ITAsZS5lYWNoKHIuc29ydGFibGVzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zdGFuY2UucG9zaXRpb25BYnM9ci5wb3NpdGlvbkFicyx0aGlzLmluc3RhbmNlLmhlbHBlclByb3BvcnRpb25zPXIuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2s9ci5vZmZzZXQuY2xpY2ssdGhpcyE9dSYmdGhpcy5pbnN0YW5jZS5faW50ZXJzZWN0c1dpdGgodGhpcy5pbnN0YW5jZS5jb250YWluZXJDYWNoZSkmJmUudWkuY29udGFpbnModS5pbnN0YW5jZS5lbGVtZW50WzBdLHRoaXMuaW5zdGFuY2UuZWxlbWVudFswXSkmJihvPSExKSxvfSkpLG8/KHRoaXMuaW5zdGFuY2UuaXNPdmVyfHwodGhpcy5pbnN0YW5jZS5pc092ZXI9MSx0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtPWUoaSkuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpLmFwcGVuZFRvKHRoaXMuaW5zdGFuY2UuZWxlbWVudCkuZGF0YSgic29ydGFibGUtaXRlbSIsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXIsdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj1mdW5jdGlvbigpe3JldHVybiBuLmhlbHBlclswXX0sdC50YXJnZXQ9dGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbVswXSx0aGlzLmluc3RhbmNlLl9tb3VzZUNhcHR1cmUodCwhMCksdGhpcy5pbnN0YW5jZS5fbW91c2VTdGFydCh0LCEwLCEwKSx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay50b3A9ci5vZmZzZXQuY2xpY2sudG9wLHRoaXMuaW5zdGFuY2Uub2Zmc2V0LmNsaWNrLmxlZnQ9ci5vZmZzZXQuY2xpY2subGVmdCx0aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQubGVmdC09ci5vZmZzZXQucGFyZW50LmxlZnQtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcC09ci5vZmZzZXQucGFyZW50LnRvcC10aGlzLmluc3RhbmNlLm9mZnNldC5wYXJlbnQudG9wLHIuX3RyaWdnZXIoInRvU29ydGFibGUiLHQpLHIuZHJvcHBlZD10aGlzLmluc3RhbmNlLmVsZW1lbnQsci5jdXJyZW50SXRlbT1yLmVsZW1lbnQsdGhpcy5pbnN0YW5jZS5mcm9tT3V0c2lkZT1yKSx0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtJiZ0aGlzLmluc3RhbmNlLl9tb3VzZURyYWcodCkpOnRoaXMuaW5zdGFuY2UuaXNPdmVyJiYodGhpcy5pbnN0YW5jZS5pc092ZXI9MCx0aGlzLmluc3RhbmNlLmNhbmNlbEhlbHBlclJlbW92YWw9ITAsdGhpcy5pbnN0YW5jZS5vcHRpb25zLnJldmVydD0hMSx0aGlzLmluc3RhbmNlLl90cmlnZ2VyKCJvdXQiLHQsdGhpcy5pbnN0YW5jZS5fdWlIYXNoKHRoaXMuaW5zdGFuY2UpKSx0aGlzLmluc3RhbmNlLl9tb3VzZVN0b3AodCwhMCksdGhpcy5pbnN0YW5jZS5vcHRpb25zLmhlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcix0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLnJlbW92ZSgpLHRoaXMuaW5zdGFuY2UucGxhY2Vob2xkZXImJnRoaXMuaW5zdGFuY2UucGxhY2Vob2xkZXIucmVtb3ZlKCksci5fdHJpZ2dlcigiZnJvbVNvcnRhYmxlIix0KSxyLmRyb3BwZWQ9ITEpfSl9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJjdXJzb3IiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUoImJvZHkiKSxpPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztyLmNzcygiY3Vyc29yIikmJihpLl9jdXJzb3I9ci5jc3MoImN1cnNvciIpKSxyLmNzcygiY3Vyc29yIixpLmN1cnNvcil9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLm9wdGlvbnM7ci5fY3Vyc29yJiZlKCJib2R5IikuY3NzKCJjdXJzb3IiLHIuX2N1cnNvcil9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJvcGFjaXR5Iix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKG4uaGVscGVyKSxpPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztyLmNzcygib3BhY2l0eSIpJiYoaS5fb3BhY2l0eT1yLmNzcygib3BhY2l0eSIpKSxyLmNzcygib3BhY2l0eSIsaS5vcGFjaXR5KX0sc3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztyLl9vcGFjaXR5JiZlKG4uaGVscGVyKS5jc3MoIm9wYWNpdHkiLHIuX29wYWNpdHkpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic2Nyb2xsIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpO3Iuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmci5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZSE9IkhUTUwiJiYoci5vdmVyZmxvd09mZnNldD1yLnNjcm9sbFBhcmVudC5vZmZzZXQoKSl9LGRyYWc6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoImRyYWdnYWJsZSIpLGk9ci5vcHRpb25zLHM9ITE7aWYoci5zY3JvbGxQYXJlbnRbMF0hPWRvY3VtZW50JiZyLnNjcm9sbFBhcmVudFswXS50YWdOYW1lIT0iSFRNTCIpe2lmKCFpLmF4aXN8fGkuYXhpcyE9IngiKXIub3ZlcmZsb3dPZmZzZXQudG9wK3Iuc2Nyb2xsUGFyZW50WzBdLm9mZnNldEhlaWdodC10LnBhZ2VZPGkuc2Nyb2xsU2Vuc2l0aXZpdHk/ci5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXM9ci5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wK2kuc2Nyb2xsU3BlZWQ6dC5wYWdlWS1yLm92ZXJmbG93T2Zmc2V0LnRvcDxpLnNjcm9sbFNlbnNpdGl2aXR5JiYoci5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wPXM9ci5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsVG9wLWkuc2Nyb2xsU3BlZWQpO2lmKCFpLmF4aXN8fGkuYXhpcyE9InkiKXIub3ZlcmZsb3dPZmZzZXQubGVmdCtyLnNjcm9sbFBhcmVudFswXS5vZmZzZXRXaWR0aC10LnBhZ2VYPGkuc2Nyb2xsU2Vuc2l0aXZpdHk/ci5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQraS5zY3JvbGxTcGVlZDp0LnBhZ2VYLXIub3ZlcmZsb3dPZmZzZXQubGVmdDxpLnNjcm9sbFNlbnNpdGl2aXR5JiYoci5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdD1zPXIuc2Nyb2xsUGFyZW50WzBdLnNjcm9sbExlZnQtaS5zY3JvbGxTcGVlZCl9ZWxzZXtpZighaS5heGlzfHxpLmF4aXMhPSJ4Iil0LnBhZ2VZLWUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpPGkuc2Nyb2xsU2Vuc2l0aXZpdHk/cz1lKGRvY3VtZW50KS5zY3JvbGxUb3AoZShkb2N1bWVudCkuc2Nyb2xsVG9wKCktaS5zY3JvbGxTcGVlZCk6ZSh3aW5kb3cpLmhlaWdodCgpLSh0LnBhZ2VZLWUoZG9jdW1lbnQpLnNjcm9sbFRvcCgpKTxpLnNjcm9sbFNlbnNpdGl2aXR5JiYocz1lKGRvY3VtZW50KS5zY3JvbGxUb3AoZShkb2N1bWVudCkuc2Nyb2xsVG9wKCkraS5zY3JvbGxTcGVlZCkpO2lmKCFpLmF4aXN8fGkuYXhpcyE9InkiKXQucGFnZVgtZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpPGkuc2Nyb2xsU2Vuc2l0aXZpdHk/cz1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KGUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKS1pLnNjcm9sbFNwZWVkKTplKHdpbmRvdykud2lkdGgoKS0odC5wYWdlWC1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkpPGkuc2Nyb2xsU2Vuc2l0aXZpdHkmJihzPWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpK2kuc2Nyb2xsU3BlZWQpKX1zIT09ITEmJmUudWkuZGRtYW5hZ2VyJiYhaS5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhyLHQpfX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic25hcCIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKSxpPXIub3B0aW9ucztyLnNuYXBFbGVtZW50cz1bXSxlKGkuc25hcC5jb25zdHJ1Y3RvciE9U3RyaW5nP2kuc25hcC5pdGVtc3x8IjpkYXRhKGRyYWdnYWJsZSkiOmkuc25hcCkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksbj10Lm9mZnNldCgpO3RoaXMhPXIuZWxlbWVudFswXSYmci5zbmFwRWxlbWVudHMucHVzaCh7aXRlbTp0aGlzLHdpZHRoOnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0Lm91dGVySGVpZ2h0KCksdG9wOm4udG9wLGxlZnQ6bi5sZWZ0fSl9KX0sZHJhZzpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIiksaT1yLm9wdGlvbnMscz1pLnNuYXBUb2xlcmFuY2Usbz1uLm9mZnNldC5sZWZ0LHU9bytyLmhlbHBlclByb3BvcnRpb25zLndpZHRoLGE9bi5vZmZzZXQudG9wLGY9YStyLmhlbHBlclByb3BvcnRpb25zLmhlaWdodDtmb3IodmFyIGw9ci5zbmFwRWxlbWVudHMubGVuZ3RoLTE7bD49MDtsLS0pe3ZhciBjPXIuc25hcEVsZW1lbnRzW2xdLmxlZnQsaD1jK3Iuc25hcEVsZW1lbnRzW2xdLndpZHRoLHA9ci5zbmFwRWxlbWVudHNbbF0udG9wLGQ9cCtyLnNuYXBFbGVtZW50c1tsXS5oZWlnaHQ7aWYoIShjLXM8byYmbzxoK3MmJnAtczxhJiZhPGQrc3x8Yy1zPG8mJm88aCtzJiZwLXM8ZiYmZjxkK3N8fGMtczx1JiZ1PGgrcyYmcC1zPGEmJmE8ZCtzfHxjLXM8dSYmdTxoK3MmJnAtczxmJiZmPGQrcykpe3Iuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nJiZyLm9wdGlvbnMuc25hcC5yZWxlYXNlJiZyLm9wdGlvbnMuc25hcC5yZWxlYXNlLmNhbGwoci5lbGVtZW50LHQsZS5leHRlbmQoci5fdWlIYXNoKCkse3NuYXBJdGVtOnIuc25hcEVsZW1lbnRzW2xdLml0ZW19KSksci5zbmFwRWxlbWVudHNbbF0uc25hcHBpbmc9ITE7Y29udGludWV9aWYoaS5zbmFwTW9kZSE9ImlubmVyIil7dmFyIHY9TWF0aC5hYnMocC1mKTw9cyxtPU1hdGguYWJzKGQtYSk8PXMsZz1NYXRoLmFicyhjLXUpPD1zLHk9TWF0aC5hYnMoaC1vKTw9czt2JiYobi5wb3NpdGlvbi50b3A9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOnAtci5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wLXIubWFyZ2lucy50b3ApLG0mJihuLnBvc2l0aW9uLnRvcD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6ZCxsZWZ0OjB9KS50b3Atci5tYXJnaW5zLnRvcCksZyYmKG4ucG9zaXRpb24ubGVmdD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0OmMtci5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQtci5tYXJnaW5zLmxlZnQpLHkmJihuLnBvc2l0aW9uLmxlZnQ9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpofSkubGVmdC1yLm1hcmdpbnMubGVmdCl9dmFyIGI9dnx8bXx8Z3x8eTtpZihpLnNuYXBNb2RlIT0ib3V0ZXIiKXt2YXIgdj1NYXRoLmFicyhwLWEpPD1zLG09TWF0aC5hYnMoZC1mKTw9cyxnPU1hdGguYWJzKGMtbyk8PXMseT1NYXRoLmFicyhoLXUpPD1zO3YmJihuLnBvc2l0aW9uLnRvcD1yLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6cCxsZWZ0OjB9KS50b3Atci5tYXJnaW5zLnRvcCksbSYmKG4ucG9zaXRpb24udG9wPXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpkLXIuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1yLm1hcmdpbnMudG9wKSxnJiYobi5wb3NpdGlvbi5sZWZ0PXIuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6Y30pLmxlZnQtci5tYXJnaW5zLmxlZnQpLHkmJihuLnBvc2l0aW9uLmxlZnQ9ci5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpoLXIuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LXIubWFyZ2lucy5sZWZ0KX0hci5zbmFwRWxlbWVudHNbbF0uc25hcHBpbmcmJih2fHxtfHxnfHx5fHxiKSYmci5vcHRpb25zLnNuYXAuc25hcCYmci5vcHRpb25zLnNuYXAuc25hcC5jYWxsKHIuZWxlbWVudCx0LGUuZXh0ZW5kKHIuX3VpSGFzaCgpLHtzbmFwSXRlbTpyLnNuYXBFbGVtZW50c1tsXS5pdGVtfSkpLHIuc25hcEVsZW1lbnRzW2xdLnNuYXBwaW5nPXZ8fG18fGd8fHl8fGJ9fX0pLGUudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic3RhY2siLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucyxpPWUubWFrZUFycmF5KGUoci5zdGFjaykpLnNvcnQoZnVuY3Rpb24odCxuKXtyZXR1cm4ocGFyc2VJbnQoZSh0KS5jc3MoInpJbmRleCIpLDEwKXx8MCktKHBhcnNlSW50KGUobikuY3NzKCJ6SW5kZXgiKSwxMCl8fDApfSk7aWYoIWkubGVuZ3RoKXJldHVybjt2YXIgcz1wYXJzZUludChpWzBdLnN0eWxlLnpJbmRleCl8fDA7ZShpKS5lYWNoKGZ1bmN0aW9uKGUpe3RoaXMuc3R5bGUuekluZGV4PXMrZX0pLHRoaXNbMF0uc3R5bGUuekluZGV4PXMraS5sZW5ndGh9fSksZS51aS5wbHVnaW4uYWRkKCJkcmFnZ2FibGUiLCJ6SW5kZXgiLHtzdGFydDpmdW5jdGlvbih0LG4pe3ZhciByPWUobi5oZWxwZXIpLGk9ZSh0aGlzKS5kYXRhKCJkcmFnZ2FibGUiKS5vcHRpb25zO3IuY3NzKCJ6SW5kZXgiKSYmKGkuX3pJbmRleD1yLmNzcygiekluZGV4IikpLHIuY3NzKCJ6SW5kZXgiLGkuekluZGV4KX0sc3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgiZHJhZ2dhYmxlIikub3B0aW9ucztyLl96SW5kZXgmJmUobi5oZWxwZXIpLmNzcygiekluZGV4IixyLl96SW5kZXgpfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLndpZGdldCgidWkuZHJvcHBhYmxlIix7dmVyc2lvbjoiMS45LjIiLHdpZGdldEV2ZW50UHJlZml4OiJkcm9wIixvcHRpb25zOnthY2NlcHQ6IioiLGFjdGl2ZUNsYXNzOiExLGFkZENsYXNzZXM6ITAsZ3JlZWR5OiExLGhvdmVyQ2xhc3M6ITEsc2NvcGU6ImRlZmF1bHQiLHRvbGVyYW5jZToiaW50ZXJzZWN0In0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxuPXQuYWNjZXB0O3RoaXMuaXNvdmVyPTAsdGhpcy5pc291dD0xLHRoaXMuYWNjZXB0PWUuaXNGdW5jdGlvbihuKT9uOmZ1bmN0aW9uKGUpe3JldHVybiBlLmlzKG4pfSx0aGlzLnByb3BvcnRpb25zPXt3aWR0aDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0V2lkdGgsaGVpZ2h0OnRoaXMuZWxlbWVudFswXS5vZmZzZXRIZWlnaHR9LGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5zY29wZV09ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0LnNjb3BlXXx8W10sZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0LnNjb3BlXS5wdXNoKHRoaXMpLHQuYWRkQ2xhc3NlcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcm9wcGFibGUiKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD1lLnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RoaXMub3B0aW9ucy5zY29wZV07Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXT09dGhpcyYmdC5zcGxpY2UobiwxKTt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyb3BwYWJsZSB1aS1kcm9wcGFibGUtZGlzYWJsZWQiKX0sX3NldE9wdGlvbjpmdW5jdGlvbih0LG4pe3Q9PSJhY2NlcHQiJiYodGhpcy5hY2NlcHQ9ZS5pc0Z1bmN0aW9uKG4pP246ZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXMobil9KSxlLldpZGdldC5wcm90b3R5cGUuX3NldE9wdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt2YXIgbj1lLnVpLmRkbWFuYWdlci5jdXJyZW50O3RoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5hY3RpdmVDbGFzcyksbiYmdGhpcy5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsdGhpcy51aShuKSl9LF9kZWFjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuPWUudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxuJiZ0aGlzLl90cmlnZ2VyKCJkZWFjdGl2YXRlIix0LHRoaXMudWkobikpfSxfb3ZlcjpmdW5jdGlvbih0KXt2YXIgbj1lLnVpLmRkbWFuYWdlci5jdXJyZW50O2lmKCFufHwobi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KVswXT09dGhpcy5lbGVtZW50WzBdKXJldHVybjt0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxuLmN1cnJlbnRJdGVtfHxuLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5hZGRDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3ZlciIsdCx0aGlzLnVpKG4pKSl9LF9vdXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighbnx8KG4uY3VycmVudEl0ZW18fG4uZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm47dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sbi5jdXJyZW50SXRlbXx8bi5lbGVtZW50KSYmKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MpLHRoaXMuX3RyaWdnZXIoIm91dCIsdCx0aGlzLnVpKG4pKSl9LF9kcm9wOmZ1bmN0aW9uKHQsbil7dmFyIHI9bnx8ZS51aS5kZG1hbmFnZXIuY3VycmVudDtpZighcnx8KHIuY3VycmVudEl0ZW18fHIuZWxlbWVudClbMF09PXRoaXMuZWxlbWVudFswXSlyZXR1cm4hMTt2YXIgaT0hMTtyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQoIjpkYXRhKGRyb3BwYWJsZSkiKS5ub3QoIi51aS1kcmFnZ2FibGUtZHJhZ2dpbmciKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5kYXRhKHRoaXMsImRyb3BwYWJsZSIpO2lmKHQub3B0aW9ucy5ncmVlZHkmJiF0Lm9wdGlvbnMuZGlzYWJsZWQmJnQub3B0aW9ucy5zY29wZT09ci5vcHRpb25zLnNjb3BlJiZ0LmFjY2VwdC5jYWxsKHQuZWxlbWVudFswXSxyLmN1cnJlbnRJdGVtfHxyLmVsZW1lbnQpJiZlLnVpLmludGVyc2VjdChyLGUuZXh0ZW5kKHQse29mZnNldDp0LmVsZW1lbnQub2Zmc2V0KCl9KSx0Lm9wdGlvbnMudG9sZXJhbmNlKSlyZXR1cm4gaT0hMCwhMX0pLGk/ITE6dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sci5jdXJyZW50SXRlbXx8ci5lbGVtZW50KT8odGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJkcm9wIix0LHRoaXMudWkocikpLHRoaXMuZWxlbWVudCk6ITF9LHVpOmZ1bmN0aW9uKGUpe3JldHVybntkcmFnZ2FibGU6ZS5jdXJyZW50SXRlbXx8ZS5lbGVtZW50LGhlbHBlcjplLmhlbHBlcixwb3NpdGlvbjplLnBvc2l0aW9uLG9mZnNldDplLnBvc2l0aW9uQWJzfX19KSxlLnVpLmludGVyc2VjdD1mdW5jdGlvbih0LG4scil7aWYoIW4ub2Zmc2V0KXJldHVybiExO3ZhciBpPSh0LnBvc2l0aW9uQWJzfHx0LnBvc2l0aW9uLmFic29sdXRlKS5sZWZ0LHM9aSt0LmhlbHBlclByb3BvcnRpb25zLndpZHRoLG89KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLnRvcCx1PW8rdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsYT1uLm9mZnNldC5sZWZ0LGY9YStuLnByb3BvcnRpb25zLndpZHRoLGw9bi5vZmZzZXQudG9wLGM9bCtuLnByb3BvcnRpb25zLmhlaWdodDtzd2l0Y2gocil7Y2FzZSJmaXQiOnJldHVybiBhPD1pJiZzPD1mJiZsPD1vJiZ1PD1jO2Nhc2UiaW50ZXJzZWN0IjpyZXR1cm4gYTxpK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMiYmcy10LmhlbHBlclByb3BvcnRpb25zLndpZHRoLzI8ZiYmbDxvK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzImJnUtdC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMjxjO2Nhc2UicG9pbnRlciI6dmFyIGg9KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQrKHQuY2xpY2tPZmZzZXR8fHQub2Zmc2V0LmNsaWNrKS5sZWZ0LHA9KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLnRvcCsodC5jbGlja09mZnNldHx8dC5vZmZzZXQuY2xpY2spLnRvcCxkPWUudWkuaXNPdmVyKHAsaCxsLGEsbi5wcm9wb3J0aW9ucy5oZWlnaHQsbi5wcm9wb3J0aW9ucy53aWR0aCk7cmV0dXJuIGQ7Y2FzZSJ0b3VjaCI6cmV0dXJuKG8+PWwmJm88PWN8fHU+PWwmJnU8PWN8fG88bCYmdT5jKSYmKGk+PWEmJmk8PWZ8fHM+PWEmJnM8PWZ8fGk8YSYmcz5mKTtkZWZhdWx0OnJldHVybiExfX0sZS51aS5kZG1hbmFnZXI9e2N1cnJlbnQ6bnVsbCxkcm9wcGFibGVzOnsiZGVmYXVsdCI6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0Lm9wdGlvbnMuc2NvcGVdfHxbXSxpPW4/bi50eXBlOm51bGwscz0odC5jdXJyZW50SXRlbXx8dC5lbGVtZW50KS5maW5kKCI6ZGF0YShkcm9wcGFibGUpIikuYW5kU2VsZigpO2U6Zm9yKHZhciBvPTA7bzxyLmxlbmd0aDtvKyspe2lmKHJbb10ub3B0aW9ucy5kaXNhYmxlZHx8dCYmIXJbb10uYWNjZXB0LmNhbGwocltvXS5lbGVtZW50WzBdLHQuY3VycmVudEl0ZW18fHQuZWxlbWVudCkpY29udGludWU7Zm9yKHZhciB1PTA7dTxzLmxlbmd0aDt1KyspaWYoc1t1XT09cltvXS5lbGVtZW50WzBdKXtyW29dLnByb3BvcnRpb25zLmhlaWdodD0wO2NvbnRpbnVlIGV9cltvXS52aXNpYmxlPXJbb10uZWxlbWVudC5jc3MoImRpc3BsYXkiKSE9Im5vbmUiO2lmKCFyW29dLnZpc2libGUpY29udGludWU7aT09Im1vdXNlZG93biImJnJbb10uX2FjdGl2YXRlLmNhbGwocltvXSxuKSxyW29dLm9mZnNldD1yW29dLmVsZW1lbnQub2Zmc2V0KCkscltvXS5wcm9wb3J0aW9ucz17d2lkdGg6cltvXS5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDpyW29dLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fX19LGRyb3A6ZnVuY3Rpb24odCxuKXt2YXIgcj0hMTtyZXR1cm4gZS5lYWNoKGUudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbdC5vcHRpb25zLnNjb3BlXXx8W10sZnVuY3Rpb24oKXtpZighdGhpcy5vcHRpb25zKXJldHVybjshdGhpcy5vcHRpb25zLmRpc2FibGVkJiZ0aGlzLnZpc2libGUmJmUudWkuaW50ZXJzZWN0KHQsdGhpcyx0aGlzLm9wdGlvbnMudG9sZXJhbmNlKSYmKHI9dGhpcy5fZHJvcC5jYWxsKHRoaXMsbil8fHIpLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmdGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdC5jdXJyZW50SXRlbXx8dC5lbGVtZW50KSYmKHRoaXMuaXNvdXQ9MSx0aGlzLmlzb3Zlcj0wLHRoaXMuX2RlYWN0aXZhdGUuY2FsbCh0aGlzLG4pKX0pLHJ9LGRyYWdTdGFydDpmdW5jdGlvbih0LG4pe3QuZWxlbWVudC5wYXJlbnRzVW50aWwoImJvZHkiKS5iaW5kKCJzY3JvbGwuZHJvcHBhYmxlIixmdW5jdGlvbigpe3Qub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zfHxlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0LG4pfSl9LGRyYWc6ZnVuY3Rpb24odCxuKXt0Lm9wdGlvbnMucmVmcmVzaFBvc2l0aW9ucyYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModCxuKSxlLmVhY2goZS51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1t0Lm9wdGlvbnMuc2NvcGVdfHxbXSxmdW5jdGlvbigpe2lmKHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8dGhpcy5ncmVlZHlDaGlsZHx8IXRoaXMudmlzaWJsZSlyZXR1cm47dmFyIHI9ZS51aS5pbnRlcnNlY3QodCx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UpLGk9IXImJnRoaXMuaXNvdmVyPT0xPyJpc291dCI6ciYmdGhpcy5pc292ZXI9PTA/Imlzb3ZlciI6bnVsbDtpZighaSlyZXR1cm47dmFyIHM7aWYodGhpcy5vcHRpb25zLmdyZWVkeSl7dmFyIG89dGhpcy5vcHRpb25zLnNjb3BlLHU9dGhpcy5lbGVtZW50LnBhcmVudHMoIjpkYXRhKGRyb3BwYWJsZSkiKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gZS5kYXRhKHRoaXMsImRyb3BwYWJsZSIpLm9wdGlvbnMuc2NvcGU9PT1vfSk7dS5sZW5ndGgmJihzPWUuZGF0YSh1WzBdLCJkcm9wcGFibGUiKSxzLmdyZWVkeUNoaWxkPWk9PSJpc292ZXIiPzE6MCl9cyYmaT09Imlzb3ZlciImJihzLmlzb3Zlcj0wLHMuaXNvdXQ9MSxzLl9vdXQuY2FsbChzLG4pKSx0aGlzW2ldPTEsdGhpc1tpPT0iaXNvdXQiPyJpc292ZXIiOiJpc291dCJdPTAsdGhpc1tpPT0iaXNvdmVyIj8iX292ZXIiOiJfb3V0Il0uY2FsbCh0aGlzLG4pLHMmJmk9PSJpc291dCImJihzLmlzb3V0PTAscy5pc292ZXI9MSxzLl9vdmVyLmNhbGwocyxuKSl9KX0sZHJhZ1N0b3A6ZnVuY3Rpb24odCxuKXt0LmVsZW1lbnQucGFyZW50c1VudGlsKCJib2R5IikudW5iaW5kKCJzY3JvbGwuZHJvcHBhYmxlIiksdC5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fGUudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHQsbil9fX0pKGpRdWVyeSk7alF1ZXJ5LmVmZmVjdHN8fGZ1bmN0aW9uKGUsdCl7dmFyIG49ZS51aUJhY2tDb21wYXQhPT0hMSxyPSJ1aS1lZmZlY3RzLSI7ZS5lZmZlY3RzPXtlZmZlY3Q6e319LGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcChlLHQsbil7dmFyIHI9YVt0LnR5cGVdfHx7fTtyZXR1cm4gZT09bnVsbD9ufHwhdC5kZWY/bnVsbDp0LmRlZjooZT1yLmZsb29yP35+ZTpwYXJzZUZsb2F0KGUpLGlzTmFOKGUpP3QuZGVmOnIubW9kPyhlK3IubW9kKSVyLm1vZDowPmU/MDpyLm1heDxlP3IubWF4OmUpfWZ1bmN0aW9uIGQoZSl7dmFyIG49bygpLHI9bi5fcmdiYT1bXTtyZXR1cm4gZT1lLnRvTG93ZXJDYXNlKCksaChzLGZ1bmN0aW9uKHQsaSl7dmFyIHMsbz1pLnJlLmV4ZWMoZSksYT1vJiZpLnBhcnNlKG8pLGY9aS5zcGFjZXx8InJnYmEiO2lmKGEpcmV0dXJuIHM9bltmXShhKSxuW3VbZl0uY2FjaGVdPXNbdVtmXS5jYWNoZV0scj1uLl9yZ2JhPXMuX3JnYmEsITF9KSxyLmxlbmd0aD8oci5qb2luKCk9PT0iMCwwLDAsMCImJnQuZXh0ZW5kKHIsYy50cmFuc3BhcmVudCksbik6Y1tlXX1mdW5jdGlvbiB2KGUsdCxuKXtyZXR1cm4gbj0obisxKSUxLG4qNjwxP2UrKHQtZSkqbio2Om4qMjwxP3Q6biozPDI/ZSsodC1lKSooMi8zLW4pKjY6ZX12YXIgcj0iYmFja2dyb3VuZENvbG9yIGJvcmRlckJvdHRvbUNvbG9yIGJvcmRlckxlZnRDb2xvciBib3JkZXJSaWdodENvbG9yIGJvcmRlclRvcENvbG9yIGNvbG9yIGNvbHVtblJ1bGVDb2xvciBvdXRsaW5lQ29sb3IgdGV4dERlY29yYXRpb25Db2xvciB0ZXh0RW1waGFzaXNDb2xvciIuc3BsaXQoIiAiKSxpPS9eKFtcLStdKT1ccyooXGQrXC4/XGQqKS8scz1be3JlOi9yZ2JhP1woXHMqKFxkezEsM30pXHMqLFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSlccyooPzosXHMqKFxkKyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMV0sZVsyXSxlWzNdLGVbNF1dfX0se3JlOi9yZ2JhP1woXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyosXHMqKFxkKyg/OlwuXGQrKT8pXCVccyooPzosXHMqKFxkKyg/OlwuXGQrKT8pXHMqKT9cKS8scGFyc2U6ZnVuY3Rpb24oZSl7cmV0dXJuW2VbMV0qMi41NSxlWzJdKjIuNTUsZVszXSoyLjU1LGVbNF1dfX0se3JlOi8jKFthLWYwLTldezJ9KShbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXSwxNikscGFyc2VJbnQoZVsyXSwxNikscGFyc2VJbnQoZVszXSwxNildfX0se3JlOi8jKFthLWYwLTldKShbYS1mMC05XSkoW2EtZjAtOV0pLyxwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bcGFyc2VJbnQoZVsxXStlWzFdLDE2KSxwYXJzZUludChlWzJdK2VbMl0sMTYpLHBhcnNlSW50KGVbM10rZVszXSwxNildfX0se3JlOi9oc2xhP1woXHMqKFxkKyg/OlwuXGQrKT8pXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqKD86LFxzKihcZCsoPzpcLlxkKyk/KVxzKik/XCkvLHNwYWNlOiJoc2xhIixwYXJzZTpmdW5jdGlvbihlKXtyZXR1cm5bZVsxXSxlWzJdLzEwMCxlWzNdLzEwMCxlWzRdXX19XSxvPXQuQ29sb3I9ZnVuY3Rpb24oZSxuLHIsaSl7cmV0dXJuIG5ldyB0LkNvbG9yLmZuLnBhcnNlKGUsbixyLGkpfSx1PXtyZ2JhOntwcm9wczp7cmVkOntpZHg6MCx0eXBlOiJieXRlIn0sZ3JlZW46e2lkeDoxLHR5cGU6ImJ5dGUifSxibHVlOntpZHg6Mix0eXBlOiJieXRlIn19fSxoc2xhOntwcm9wczp7aHVlOntpZHg6MCx0eXBlOiJkZWdyZWVzIn0sc2F0dXJhdGlvbjp7aWR4OjEsdHlwZToicGVyY2VudCJ9LGxpZ2h0bmVzczp7aWR4OjIsdHlwZToicGVyY2VudCJ9fX19LGE9eyJieXRlIjp7Zmxvb3I6ITAsbWF4OjI1NX0scGVyY2VudDp7bWF4OjF9LGRlZ3JlZXM6e21vZDozNjAsZmxvb3I6ITB9fSxmPW8uc3VwcG9ydD17fSxsPXQoIjxwPiIpWzBdLGMsaD10LmVhY2g7bC5zdHlsZS5jc3NUZXh0PSJiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMSwxLDEsLjUpIixmLnJnYmE9bC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IuaW5kZXhPZigicmdiYSIpPi0xLGgodSxmdW5jdGlvbihlLHQpe3QuY2FjaGU9Il8iK2UsdC5wcm9wcy5hbHBoYT17aWR4OjMsdHlwZToicGVyY2VudCIsZGVmOjF9fSksby5mbj10LmV4dGVuZChvLnByb3RvdHlwZSx7cGFyc2U6ZnVuY3Rpb24ocixpLHMsYSl7aWYocj09PW4pcmV0dXJuIHRoaXMuX3JnYmE9W251bGwsbnVsbCxudWxsLG51bGxdLHRoaXM7aWYoci5qcXVlcnl8fHIubm9kZVR5cGUpcj10KHIpLmNzcyhpKSxpPW47dmFyIGY9dGhpcyxsPXQudHlwZShyKSx2PXRoaXMuX3JnYmE9W107aSE9PW4mJihyPVtyLGkscyxhXSxsPSJhcnJheSIpO2lmKGw9PT0ic3RyaW5nIilyZXR1cm4gdGhpcy5wYXJzZShkKHIpfHxjLl9kZWZhdWx0KTtpZihsPT09ImFycmF5IilyZXR1cm4gaCh1LnJnYmEucHJvcHMsZnVuY3Rpb24oZSx0KXt2W3QuaWR4XT1wKHJbdC5pZHhdLHQpfSksdGhpcztpZihsPT09Im9iamVjdCIpcmV0dXJuIHIgaW5zdGFuY2VvZiBvP2godSxmdW5jdGlvbihlLHQpe3JbdC5jYWNoZV0mJihmW3QuY2FjaGVdPXJbdC5jYWNoZV0uc2xpY2UoKSl9KTpoKHUsZnVuY3Rpb24odCxuKXt2YXIgaT1uLmNhY2hlO2gobi5wcm9wcyxmdW5jdGlvbihlLHQpe2lmKCFmW2ldJiZuLnRvKXtpZihlPT09ImFscGhhInx8cltlXT09bnVsbClyZXR1cm47ZltpXT1uLnRvKGYuX3JnYmEpfWZbaV1bdC5pZHhdPXAocltlXSx0LCEwKX0pLGZbaV0mJmUuaW5BcnJheShudWxsLGZbaV0uc2xpY2UoMCwzKSk8MCYmKGZbaV1bM109MSxuLmZyb20mJihmLl9yZ2JhPW4uZnJvbShmW2ldKSkpfSksdGhpc30saXM6ZnVuY3Rpb24oZSl7dmFyIHQ9byhlKSxuPSEwLHI9dGhpcztyZXR1cm4gaCh1LGZ1bmN0aW9uKGUsaSl7dmFyIHMsbz10W2kuY2FjaGVdO3JldHVybiBvJiYocz1yW2kuY2FjaGVdfHxpLnRvJiZpLnRvKHIuX3JnYmEpfHxbXSxoKGkucHJvcHMsZnVuY3Rpb24oZSx0KXtpZihvW3QuaWR4XSE9bnVsbClyZXR1cm4gbj1vW3QuaWR4XT09PXNbdC5pZHhdLG59KSksbn0pLG59LF9zcGFjZTpmdW5jdGlvbigpe3ZhciBlPVtdLHQ9dGhpcztyZXR1cm4gaCh1LGZ1bmN0aW9uKG4scil7dFtyLmNhY2hlXSYmZS5wdXNoKG4pfSksZS5wb3AoKX0sdHJhbnNpdGlvbjpmdW5jdGlvbihlLHQpe3ZhciBuPW8oZSkscj1uLl9zcGFjZSgpLGk9dVtyXSxzPXRoaXMuYWxwaGEoKT09PTA/bygidHJhbnNwYXJlbnQiKTp0aGlzLGY9c1tpLmNhY2hlXXx8aS50byhzLl9yZ2JhKSxsPWYuc2xpY2UoKTtyZXR1cm4gbj1uW2kuY2FjaGVdLGgoaS5wcm9wcyxmdW5jdGlvbihlLHIpe3ZhciBpPXIuaWR4LHM9ZltpXSxvPW5baV0sdT1hW3IudHlwZV18fHt9O2lmKG89PT1udWxsKXJldHVybjtzPT09bnVsbD9sW2ldPW86KHUubW9kJiYoby1zPnUubW9kLzI/cys9dS5tb2Q6cy1vPnUubW9kLzImJihzLT11Lm1vZCkpLGxbaV09cCgoby1zKSp0K3MscikpfSksdGhpc1tyXShsKX0sYmxlbmQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5fcmdiYVszXT09PTEpcmV0dXJuIHRoaXM7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKSxpPW8oZSkuX3JnYmE7cmV0dXJuIG8odC5tYXAobixmdW5jdGlvbihlLHQpe3JldHVybigxLXIpKmlbdF0rciplfSkpfSx0b1JnYmFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0icmdiYSgiLG49dC5tYXAodGhpcy5fcmdiYSxmdW5jdGlvbihlLHQpe3JldHVybiBlPT1udWxsP3Q+Mj8xOjA6ZX0pO3JldHVybiBuWzNdPT09MSYmKG4ucG9wKCksZT0icmdiKCIpLGUrbi5qb2luKCkrIikifSx0b0hzbGFTdHJpbmc6ZnVuY3Rpb24oKXt2YXIgZT0iaHNsYSgiLG49dC5tYXAodGhpcy5oc2xhKCksZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09bnVsbCYmKGU9dD4yPzE6MCksdCYmdDwzJiYoZT1NYXRoLnJvdW5kKGUqMTAwKSsiJSIpLGV9KTtyZXR1cm4gblszXT09PTEmJihuLnBvcCgpLGU9ImhzbCgiKSxlK24uam9pbigpKyIpIn0sdG9IZXhTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIG49dGhpcy5fcmdiYS5zbGljZSgpLHI9bi5wb3AoKTtyZXR1cm4gZSYmbi5wdXNoKH5+KHIqMjU1KSksIiMiK3QubWFwKG4sZnVuY3Rpb24oZSl7cmV0dXJuIGU9KGV8fDApLnRvU3RyaW5nKDE2KSxlLmxlbmd0aD09PTE/IjAiK2U6ZX0pLmpvaW4oIiIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZ2JhWzNdPT09MD8idHJhbnNwYXJlbnQiOnRoaXMudG9SZ2JhU3RyaW5nKCl9fSksby5mbi5wYXJzZS5wcm90b3R5cGU9by5mbix1LmhzbGEudG89ZnVuY3Rpb24oZSl7aWYoZVswXT09bnVsbHx8ZVsxXT09bnVsbHx8ZVsyXT09bnVsbClyZXR1cm5bbnVsbCxudWxsLG51bGwsZVszXV07dmFyIHQ9ZVswXS8yNTUsbj1lWzFdLzI1NSxyPWVbMl0vMjU1LGk9ZVszXSxzPU1hdGgubWF4KHQsbixyKSxvPU1hdGgubWluKHQsbixyKSx1PXMtbyxhPXMrbyxmPWEqLjUsbCxjO3JldHVybiBvPT09cz9sPTA6dD09PXM/bD02MCoobi1yKS91KzM2MDpuPT09cz9sPTYwKihyLXQpL3UrMTIwOmw9NjAqKHQtbikvdSsyNDAsZj09PTB8fGY9PT0xP2M9ZjpmPD0uNT9jPXUvYTpjPXUvKDItYSksW01hdGgucm91bmQobCklMzYwLGMsZixpPT1udWxsPzE6aV19LHUuaHNsYS5mcm9tPWZ1bmN0aW9uKGUpe2lmKGVbMF09PW51bGx8fGVbMV09PW51bGx8fGVbMl09PW51bGwpcmV0dXJuW251bGwsbnVsbCxudWxsLGVbM11dO3ZhciB0PWVbMF0vMzYwLG49ZVsxXSxyPWVbMl0saT1lWzNdLHM9cjw9LjU/ciooMStuKTpyK24tcipuLG89MipyLXM7cmV0dXJuW01hdGgucm91bmQodihvLHMsdCsxLzMpKjI1NSksTWF0aC5yb3VuZCh2KG8scyx0KSoyNTUpLE1hdGgucm91bmQodihvLHMsdC0xLzMpKjI1NSksaV19LGgodSxmdW5jdGlvbihlLHIpe3ZhciBzPXIucHJvcHMsdT1yLmNhY2hlLGE9ci50byxmPXIuZnJvbTtvLmZuW2VdPWZ1bmN0aW9uKGUpe2EmJiF0aGlzW3VdJiYodGhpc1t1XT1hKHRoaXMuX3JnYmEpKTtpZihlPT09bilyZXR1cm4gdGhpc1t1XS5zbGljZSgpO3ZhciByLGk9dC50eXBlKGUpLGw9aT09PSJhcnJheSJ8fGk9PT0ib2JqZWN0Ij9lOmFyZ3VtZW50cyxjPXRoaXNbdV0uc2xpY2UoKTtyZXR1cm4gaChzLGZ1bmN0aW9uKGUsdCl7dmFyIG49bFtpPT09Im9iamVjdCI/ZTp0LmlkeF07bj09bnVsbCYmKG49Y1t0LmlkeF0pLGNbdC5pZHhdPXAobix0KX0pLGY/KHI9byhmKGMpKSxyW3VdPWMscik6byhjKX0saChzLGZ1bmN0aW9uKG4scil7aWYoby5mbltuXSlyZXR1cm47by5mbltuXT1mdW5jdGlvbihzKXt2YXIgbz10LnR5cGUocyksdT1uPT09ImFscGhhIj90aGlzLl9oc2xhPyJoc2xhIjoicmdiYSI6ZSxhPXRoaXNbdV0oKSxmPWFbci5pZHhdLGw7cmV0dXJuIG89PT0idW5kZWZpbmVkIj9mOihvPT09ImZ1bmN0aW9uIiYmKHM9cy5jYWxsKHRoaXMsZiksbz10LnR5cGUocykpLHM9PW51bGwmJnIuZW1wdHk/dGhpczoobz09PSJzdHJpbmciJiYobD1pLmV4ZWMocyksbCYmKHM9ZitwYXJzZUZsb2F0KGxbMl0pKihsWzFdPT09IisiPzE6LTEpKSksYVtyLmlkeF09cyx0aGlzW3VdKGEpKSl9fSl9KSxoKHIsZnVuY3Rpb24oZSxuKXt0LmNzc0hvb2tzW25dPXtzZXQ6ZnVuY3Rpb24oZSxyKXt2YXIgaSxzLHU9IiI7aWYodC50eXBlKHIpIT09InN0cmluZyJ8fChpPWQocikpKXtyPW8oaXx8cik7aWYoIWYucmdiYSYmci5fcmdiYVszXSE9PTEpe3M9bj09PSJiYWNrZ3JvdW5kQ29sb3IiP2UucGFyZW50Tm9kZTplO3doaWxlKCh1PT09IiJ8fHU9PT0idHJhbnNwYXJlbnQiKSYmcyYmcy5zdHlsZSl0cnl7dT10LmNzcyhzLCJiYWNrZ3JvdW5kQ29sb3IiKSxzPXMucGFyZW50Tm9kZX1jYXRjaChhKXt9cj1yLmJsZW5kKHUmJnUhPT0idHJhbnNwYXJlbnQiP3U6Il9kZWZhdWx0Iil9cj1yLnRvUmdiYVN0cmluZygpfXRyeXtlLnN0eWxlW25dPXJ9Y2F0Y2gobCl7fX19LHQuZnguc3RlcFtuXT1mdW5jdGlvbihlKXtlLmNvbG9ySW5pdHx8KGUuc3RhcnQ9byhlLmVsZW0sbiksZS5lbmQ9byhlLmVuZCksZS5jb2xvckluaXQ9ITApLHQuY3NzSG9va3Nbbl0uc2V0KGUuZWxlbSxlLnN0YXJ0LnRyYW5zaXRpb24oZS5lbmQsZS5wb3MpKX19KSx0LmNzc0hvb2tzLmJvcmRlckNvbG9yPXtleHBhbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9e307cmV0dXJuIGgoWyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxmdW5jdGlvbihuLHIpe3RbImJvcmRlciIrcisiQ29sb3IiXT1lfSksdH19LGM9dC5Db2xvci5uYW1lcz17YXF1YToiIzAwZmZmZiIsYmxhY2s6IiMwMDAwMDAiLGJsdWU6IiMwMDAwZmYiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixsaW1lOiIjMDBmZjAwIixtYXJvb246IiM4MDAwMDAiLG5hdnk6IiMwMDAwODAiLG9saXZlOiIjODA4MDAwIixwdXJwbGU6IiM4MDAwODAiLHJlZDoiI2ZmMDAwMCIsc2lsdmVyOiIjYzBjMGMwIix0ZWFsOiIjMDA4MDgwIix3aGl0ZToiI2ZmZmZmZiIseWVsbG93OiIjZmZmZjAwIix0cmFuc3BhcmVudDpbbnVsbCxudWxsLG51bGwsMF0sX2RlZmF1bHQ6IiNmZmZmZmYifX0oalF1ZXJ5KSxmdW5jdGlvbigpe2Z1bmN0aW9uIGkoKXt2YXIgdD10aGlzLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc/dGhpcy5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKTp0aGlzLmN1cnJlbnRTdHlsZSxuPXt9LHIsaTtpZih0JiZ0Lmxlbmd0aCYmdFswXSYmdFt0WzBdXSl7aT10Lmxlbmd0aDt3aGlsZShpLS0pcj10W2ldLHR5cGVvZiB0W3JdPT0ic3RyaW5nIiYmKG5bZS5jYW1lbENhc2UocildPXRbcl0pfWVsc2UgZm9yKHIgaW4gdCl0eXBlb2YgdFtyXT09InN0cmluZyImJihuW3JdPXRbcl0pO3JldHVybiBufWZ1bmN0aW9uIHModCxuKXt2YXIgaT17fSxzLG87Zm9yKHMgaW4gbilvPW5bc10sdFtzXSE9PW8mJiFyW3NdJiYoZS5meC5zdGVwW3NdfHwhaXNOYU4ocGFyc2VGbG9hdChvKSkpJiYoaVtzXT1vKTtyZXR1cm4gaX12YXIgbj1bImFkZCIsInJlbW92ZSIsInRvZ2dsZSJdLHI9e2JvcmRlcjoxLGJvcmRlckJvdHRvbToxLGJvcmRlckNvbG9yOjEsYm9yZGVyTGVmdDoxLGJvcmRlclJpZ2h0OjEsYm9yZGVyVG9wOjEsYm9yZGVyV2lkdGg6MSxtYXJnaW46MSxwYWRkaW5nOjF9O2UuZWFjaChbImJvcmRlckxlZnRTdHlsZSIsImJvcmRlclJpZ2h0U3R5bGUiLCJib3JkZXJCb3R0b21TdHlsZSIsImJvcmRlclRvcFN0eWxlIl0sZnVuY3Rpb24odCxuKXtlLmZ4LnN0ZXBbbl09ZnVuY3Rpb24oZSl7aWYoZS5lbmQhPT0ibm9uZSImJiFlLnNldEF0dHJ8fGUucG9zPT09MSYmIWUuc2V0QXR0cilqUXVlcnkuc3R5bGUoZS5lbGVtLG4sZS5lbmQpLGUuc2V0QXR0cj0hMH19KSxlLmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKHQscixvLHUpe3ZhciBhPWUuc3BlZWQocixvLHUpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIHI9ZSh0aGlzKSxvPXIuYXR0cigiY2xhc3MiKXx8IiIsdSxmPWEuY2hpbGRyZW4/ci5maW5kKCIqIikuYW5kU2VsZigpOnI7Zj1mLm1hcChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7cmV0dXJue2VsOnQsc3RhcnQ6aS5jYWxsKHRoaXMpfX0pLHU9ZnVuY3Rpb24oKXtlLmVhY2gobixmdW5jdGlvbihlLG4pe3Rbbl0mJnJbbisiQ2xhc3MiXSh0W25dKX0pfSx1KCksZj1mLm1hcChmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZD1pLmNhbGwodGhpcy5lbFswXSksdGhpcy5kaWZmPXModGhpcy5zdGFydCx0aGlzLmVuZCksdGhpc30pLHIuYXR0cigiY2xhc3MiLG8pLGY9Zi5tYXAoZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49ZS5EZWZlcnJlZCgpLHI9alF1ZXJ5LmV4dGVuZCh7fSxhLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe24ucmVzb2x2ZSh0KX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixyKSxuLnByb21pc2UoKX0pLGUud2hlbi5hcHBseShlLGYuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXt1KCksZS5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWw7ZS5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbihlKXt0LmNzcyhlLCIiKX0pfSksYS5jb21wbGV0ZS5jYWxsKHJbMF0pfSl9KX0sZS5mbi5leHRlbmQoe19hZGRDbGFzczplLmZuLmFkZENsYXNzLGFkZENsYXNzOmZ1bmN0aW9uKHQsbixyLGkpe3JldHVybiBuP2UuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHthZGQ6dH0sbixyLGkpOnRoaXMuX2FkZENsYXNzKHQpfSxfcmVtb3ZlQ2xhc3M6ZS5mbi5yZW1vdmVDbGFzcyxyZW1vdmVDbGFzczpmdW5jdGlvbih0LG4scixpKXtyZXR1cm4gbj9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7cmVtb3ZlOnR9LG4scixpKTp0aGlzLl9yZW1vdmVDbGFzcyh0KX0sX3RvZ2dsZUNsYXNzOmUuZm4udG9nZ2xlQ2xhc3MsdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24obixyLGkscyxvKXtyZXR1cm4gdHlwZW9mIHI9PSJib29sZWFuInx8cj09PXQ/aT9lLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyxyP3thZGQ6bn06e3JlbW92ZTpufSxpLHMsbyk6dGhpcy5fdG9nZ2xlQ2xhc3MobixyKTplLmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7dG9nZ2xlOm59LHIsaSxzKX0sc3dpdGNoQ2xhc3M6ZnVuY3Rpb24odCxuLHIsaSxzKXtyZXR1cm4gZS5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse2FkZDpuLHJlbW92ZTp0fSxyLGkscyl9fSl9KCksZnVuY3Rpb24oKXtmdW5jdGlvbiBpKHQsbixyLGkpe2UuaXNQbGFpbk9iamVjdCh0KSYmKG49dCx0PXQuZWZmZWN0KSx0PXtlZmZlY3Q6dH0sbj09bnVsbCYmKG49e30pLGUuaXNGdW5jdGlvbihuKSYmKGk9bixyPW51bGwsbj17fSk7aWYodHlwZW9mIG49PSJudW1iZXIifHxlLmZ4LnNwZWVkc1tuXSlpPXIscj1uLG49e307cmV0dXJuIGUuaXNGdW5jdGlvbihyKSYmKGk9cixyPW51bGwpLG4mJmUuZXh0ZW5kKHQsbikscj1yfHxuLmR1cmF0aW9uLHQuZHVyYXRpb249ZS5meC5vZmY/MDp0eXBlb2Ygcj09Im51bWJlciI/cjpyIGluIGUuZnguc3BlZWRzP2UuZnguc3BlZWRzW3JdOmUuZnguc3BlZWRzLl9kZWZhdWx0LHQuY29tcGxldGU9aXx8bi5jb21wbGV0ZSx0fWZ1bmN0aW9uIHModCl7cmV0dXJuIXR8fHR5cGVvZiB0PT0ibnVtYmVyInx8ZS5meC5zcGVlZHNbdF0/ITA6dHlwZW9mIHQ9PSJzdHJpbmciJiYhZS5lZmZlY3RzLmVmZmVjdFt0XT9uJiZlLmVmZmVjdHNbdF0/ITE6ITA6ITF9ZS5leHRlbmQoZS5lZmZlY3RzLHt2ZXJzaW9uOiIxLjkuMiIsc2F2ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl0hPT1udWxsJiZlLmRhdGEocit0W25dLGVbMF0uc3R5bGVbdFtuXV0pfSxyZXN0b3JlOmZ1bmN0aW9uKGUsbil7dmFyIGkscztmb3Iocz0wO3M8bi5sZW5ndGg7cysrKW5bc10hPT1udWxsJiYoaT1lLmRhdGEocituW3NdKSxpPT09dCYmKGk9IiIpLGUuY3NzKG5bc10saSkpfSxzZXRNb2RlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ9PT0idG9nZ2xlIiYmKHQ9ZS5pcygiOmhpZGRlbiIpPyJzaG93IjoiaGlkZSIpLHR9LGdldEJhc2VsaW5lOmZ1bmN0aW9uKGUsdCl7dmFyIG4scjtzd2l0Y2goZVswXSl7Y2FzZSJ0b3AiOm49MDticmVhaztjYXNlIm1pZGRsZSI6bj0uNTticmVhaztjYXNlImJvdHRvbSI6bj0xO2JyZWFrO2RlZmF1bHQ6bj1lWzBdL3QuaGVpZ2h0fXN3aXRjaChlWzFdKXtjYXNlImxlZnQiOnI9MDticmVhaztjYXNlImNlbnRlciI6cj0uNTticmVhaztjYXNlInJpZ2h0IjpyPTE7YnJlYWs7ZGVmYXVsdDpyPWVbMV0vdC53aWR0aH1yZXR1cm57eDpyLHk6bn19LGNyZWF0ZVdyYXBwZXI6ZnVuY3Rpb24odCl7aWYodC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpKXJldHVybiB0LnBhcmVudCgpO3ZhciBuPXt3aWR0aDp0Lm91dGVyV2lkdGgoITApLGhlaWdodDp0Lm91dGVySGVpZ2h0KCEwKSwiZmxvYXQiOnQuY3NzKCJmbG9hdCIpfSxyPWUoIjxkaXY+PC9kaXY+IikuYWRkQ2xhc3MoInVpLWVmZmVjdHMtd3JhcHBlciIpLmNzcyh7Zm9udFNpemU6IjEwMCUiLGJhY2tncm91bmQ6InRyYW5zcGFyZW50Iixib3JkZXI6Im5vbmUiLG1hcmdpbjowLHBhZGRpbmc6MH0pLGk9e3dpZHRoOnQud2lkdGgoKSxoZWlnaHQ6dC5oZWlnaHQoKX0scz1kb2N1bWVudC5hY3RpdmVFbGVtZW50O3RyeXtzLmlkfWNhdGNoKG8pe3M9ZG9jdW1lbnQuYm9keX1yZXR1cm4gdC53cmFwKHIpLCh0WzBdPT09c3x8ZS5jb250YWlucyh0WzBdLHMpKSYmZShzKS5mb2N1cygpLHI9dC5wYXJlbnQoKSx0LmNzcygicG9zaXRpb24iKT09PSJzdGF0aWMiPyhyLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIn0pLHQuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSkpOihlLmV4dGVuZChuLHtwb3NpdGlvbjp0LmNzcygicG9zaXRpb24iKSx6SW5kZXg6dC5jc3MoInotaW5kZXgiKX0pLGUuZWFjaChbInRvcCIsImxlZnQiLCJib3R0b20iLCJyaWdodCJdLGZ1bmN0aW9uKGUscil7bltyXT10LmNzcyhyKSxpc05hTihwYXJzZUludChuW3JdLDEwKSkmJihuW3JdPSJhdXRvIil9KSx0LmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6MCxsZWZ0OjAscmlnaHQ6ImF1dG8iLGJvdHRvbToiYXV0byJ9KSksdC5jc3MoaSksci5jc3Mobikuc2hvdygpfSxyZW1vdmVXcmFwcGVyOmZ1bmN0aW9uKHQpe3ZhciBuPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIHQucGFyZW50KCkuaXMoIi51aS1lZmZlY3RzLXdyYXBwZXIiKSYmKHQucGFyZW50KCkucmVwbGFjZVdpdGgodCksKHRbMF09PT1ufHxlLmNvbnRhaW5zKHRbMF0sbikpJiZlKG4pLmZvY3VzKCkpLHR9LHNldFRyYW5zaXRpb246ZnVuY3Rpb24odCxuLHIsaSl7cmV0dXJuIGk9aXx8e30sZS5lYWNoKG4sZnVuY3Rpb24oZSxuKXt2YXIgcz10LmNzc1VuaXQobik7c1swXT4wJiYoaVtuXT1zWzBdKnIrc1sxXSl9KSxpfX0pLGUuZm4uZXh0ZW5kKHtlZmZlY3Q6ZnVuY3Rpb24oKXtmdW5jdGlvbiBhKG4pe2Z1bmN0aW9uIHUoKXtlLmlzRnVuY3Rpb24oaSkmJmkuY2FsbChyWzBdKSxlLmlzRnVuY3Rpb24obikmJm4oKX12YXIgcj1lKHRoaXMpLGk9dC5jb21wbGV0ZSxzPXQubW9kZTsoci5pcygiOmhpZGRlbiIpP3M9PT0iaGlkZSI6cz09PSJzaG93Iik/dSgpOm8uY2FsbChyWzBdLHQsdSl9dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cykscj10Lm1vZGUscz10LnF1ZXVlLG89ZS5lZmZlY3RzLmVmZmVjdFt0LmVmZmVjdF0sdT0hbyYmbiYmZS5lZmZlY3RzW3QuZWZmZWN0XTtyZXR1cm4gZS5meC5vZmZ8fCFvJiYhdT9yP3RoaXNbcl0odC5kdXJhdGlvbix0LmNvbXBsZXRlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0LmNvbXBsZXRlJiZ0LmNvbXBsZXRlLmNhbGwodGhpcyl9KTpvP3M9PT0hMT90aGlzLmVhY2goYSk6dGhpcy5xdWV1ZShzfHwiZngiLGEpOnUuY2FsbCh0aGlzLHtvcHRpb25zOnQsZHVyYXRpb246dC5kdXJhdGlvbixjYWxsYmFjazp0LmNvbXBsZXRlLG1vZGU6dC5tb2RlfSl9LF9zaG93OmUuZm4uc2hvdyxzaG93OmZ1bmN0aW9uKGUpe2lmKHMoZSkpcmV0dXJuIHRoaXMuX3Nob3cuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciB0PWkuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB0Lm1vZGU9InNob3ciLHRoaXMuZWZmZWN0LmNhbGwodGhpcyx0KX0sX2hpZGU6ZS5mbi5oaWRlLGhpZGU6ZnVuY3Rpb24oZSl7aWYocyhlKSlyZXR1cm4gdGhpcy5faGlkZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dmFyIHQ9aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7cmV0dXJuIHQubW9kZT0iaGlkZSIsdGhpcy5lZmZlY3QuY2FsbCh0aGlzLHQpfSxfX3RvZ2dsZTplLmZuLnRvZ2dsZSx0b2dnbGU6ZnVuY3Rpb24odCl7aWYocyh0KXx8dHlwZW9mIHQ9PSJib29sZWFuInx8ZS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0aGlzLl9fdG9nZ2xlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbj1pLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gbi5tb2RlPSJ0b2dnbGUiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxuKX0sY3NzVW5pdDpmdW5jdGlvbih0KXt2YXIgbj10aGlzLmNzcyh0KSxyPVtdO3JldHVybiBlLmVhY2goWyJlbSIsInB4IiwiJSIsInB0Il0sZnVuY3Rpb24oZSx0KXtuLmluZGV4T2YodCk+MCYmKHI9W3BhcnNlRmxvYXQobiksdF0pfSkscn19KX0oKSxmdW5jdGlvbigpe3ZhciB0PXt9O2UuZWFjaChbIlF1YWQiLCJDdWJpYyIsIlF1YXJ0IiwiUXVpbnQiLCJFeHBvIl0sZnVuY3Rpb24oZSxuKXt0W25dPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LGUrMil9fSksZS5leHRlbmQodCx7U2luZTpmdW5jdGlvbihlKXtyZXR1cm4gMS1NYXRoLmNvcyhlKk1hdGguUEkvMil9LENpcmM6ZnVuY3Rpb24oZSl7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtZSplKX0sRWxhc3RpYzpmdW5jdGlvbihlKXtyZXR1cm4gZT09PTB8fGU9PT0xP2U6LU1hdGgucG93KDIsOCooZS0xKSkqTWF0aC5zaW4oKChlLTEpKjgwLTcuNSkqTWF0aC5QSS8xNSl9LEJhY2s6ZnVuY3Rpb24oZSl7cmV0dXJuIGUqZSooMyplLTIpfSxCb3VuY2U6ZnVuY3Rpb24oZSl7dmFyIHQsbj00O3doaWxlKGU8KCh0PU1hdGgucG93KDIsLS1uKSktMSkvMTEpO3JldHVybiAxL01hdGgucG93KDQsMy1uKS03LjU2MjUqTWF0aC5wb3coKHQqMy0yKS8yMi1lLDIpfX0pLGUuZWFjaCh0LGZ1bmN0aW9uKHQsbil7ZS5lYXNpbmdbImVhc2VJbiIrdF09bixlLmVhc2luZ1siZWFzZU91dCIrdF09ZnVuY3Rpb24oZSl7cmV0dXJuIDEtbigxLWUpfSxlLmVhc2luZ1siZWFzZUluT3V0Iit0XT1mdW5jdGlvbihlKXtyZXR1cm4gZTwuNT9uKGUqMikvMjoxLW4oZSotMisyKS8yfX0pfSgpfShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe3ZhciBuPS91cHxkb3dufHZlcnRpY2FsLyxyPS91cHxsZWZ0fHZlcnRpY2FsfGhvcml6b250YWwvO2UuZWZmZWN0cy5lZmZlY3QuYmxpbmQ9ZnVuY3Rpb24odCxpKXt2YXIgcz1lKHRoaXMpLG89WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sdT1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSxhPXQuZGlyZWN0aW9ufHwidXAiLGY9bi50ZXN0KGEpLGw9Zj8iaGVpZ2h0Ijoid2lkdGgiLGM9Zj8idG9wIjoibGVmdCIsaD1yLnRlc3QoYSkscD17fSxkPXU9PT0ic2hvdyIsdixtLGc7cy5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpP2UuZWZmZWN0cy5zYXZlKHMucGFyZW50KCksbyk6ZS5lZmZlY3RzLnNhdmUocyxvKSxzLnNob3coKSx2PWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHMpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxtPXZbbF0oKSxnPXBhcnNlRmxvYXQodi5jc3MoYykpfHwwLHBbbF09ZD9tOjAsaHx8KHMuY3NzKGY/ImJvdHRvbSI6InJpZ2h0IiwwKS5jc3MoZj8idG9wIjoibGVmdCIsImF1dG8iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KSxwW2NdPWQ/ZzptK2cpLGQmJih2LmNzcyhsLDApLGh8fHYuY3NzKGMsZyttKSksdi5hbmltYXRlKHAse2R1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLHF1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7dT09PSJoaWRlIiYmcy5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocyxvKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihzKSxpKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmJvdW5jZT1mdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcyksaT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiZWZmZWN0Iiksbz1zPT09ImhpZGUiLHU9cz09PSJzaG93IixhPXQuZGlyZWN0aW9ufHwidXAiLGY9dC5kaXN0YW5jZSxsPXQudGltZXN8fDUsYz1sKjIrKHV8fG8/MTowKSxoPXQuZHVyYXRpb24vYyxwPXQuZWFzaW5nLGQ9YT09PSJ1cCJ8fGE9PT0iZG93biI/InRvcCI6ImxlZnQiLHY9YT09PSJ1cCJ8fGE9PT0ibGVmdCIsbSxnLHksYj1yLnF1ZXVlKCksdz1iLmxlbmd0aDsodXx8bykmJmkucHVzaCgib3BhY2l0eSIpLGUuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksZnx8KGY9cltkPT09InRvcCI/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCkvMyksdSYmKHk9e29wYWNpdHk6MX0seVtkXT0wLHIuY3NzKCJvcGFjaXR5IiwwKS5jc3MoZCx2Py1mKjI6ZioyKS5hbmltYXRlKHksaCxwKSksbyYmKGYvPU1hdGgucG93KDIsbC0xKSkseT17fSx5W2RdPTA7Zm9yKG09MDttPGw7bSsrKWc9e30sZ1tkXT0odj8iLT0iOiIrPSIpK2Ysci5hbmltYXRlKGcsaCxwKS5hbmltYXRlKHksaCxwKSxmPW8/ZioyOmYvMjtvJiYoZz17b3BhY2l0eTowfSxnW2RdPSh2PyItPSI6Iis9IikrZixyLmFuaW1hdGUoZyxoLHApKSxyLnF1ZXVlKGZ1bmN0aW9uKCl7byYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9KSx3PjEmJmIuc3BsaWNlLmFwcGx5KGIsWzEsMF0uY29uY2F0KGIuc3BsaWNlKHcsYysxKSkpLHIuZGVxdWV1ZSgpfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5jbGlwPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIiksbz1zPT09InNob3ciLHU9dC5kaXJlY3Rpb258fCJ2ZXJ0aWNhbCIsYT11PT09InZlcnRpY2FsIixmPWE/ImhlaWdodCI6IndpZHRoIixsPWE/InRvcCI6ImxlZnQiLGM9e30saCxwLGQ7ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxoPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxwPXJbMF0udGFnTmFtZT09PSJJTUciP2g6cixkPXBbZl0oKSxvJiYocC5jc3MoZiwwKSxwLmNzcyhsLGQvMikpLGNbZl09bz9kOjAsY1tsXT1vPzA6ZC8yLHAuYW5pbWF0ZShjLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe298fHIuaGlkZSgpLGUuZWZmZWN0cy5yZXN0b3JlKHIsaSksZS5lZmZlY3RzLnJlbW92ZVdyYXBwZXIociksbigpfX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5kcm9wPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvcGFjaXR5IiwiaGVpZ2h0Iiwid2lkdGgiXSxzPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwiaGlkZSIpLG89cz09PSJzaG93Iix1PXQuZGlyZWN0aW9ufHwibGVmdCIsYT11PT09InVwInx8dT09PSJkb3duIj8idG9wIjoibGVmdCIsZj11PT09InVwInx8dT09PSJsZWZ0Ij8icG9zIjoibmVnIixsPXtvcGFjaXR5Om8/MTowfSxjO2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIociksYz10LmRpc3RhbmNlfHxyW2E9PT0idG9wIj8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oITApLzIsbyYmci5jc3MoIm9wYWNpdHkiLDApLmNzcyhhLGY9PT0icG9zIj8tYzpjKSxsW2FdPShvP2Y9PT0icG9zIj8iKz0iOiItPSI6Zj09PSJwb3MiPyItPSI6Iis9IikrYyxyLmFuaW1hdGUobCx7cXVldWU6ITEsZHVyYXRpb246dC5kdXJhdGlvbixlYXNpbmc6dC5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3QuZXhwbG9kZT1mdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHkoKXtjLnB1c2godGhpcyksYy5sZW5ndGg9PT1yKmkmJmIoKX1mdW5jdGlvbiBiKCl7cy5jc3Moe3Zpc2liaWxpdHk6InZpc2libGUifSksZShjKS5yZW1vdmUoKSx1fHxzLmhpZGUoKSxuKCl9dmFyIHI9dC5waWVjZXM/TWF0aC5yb3VuZChNYXRoLnNxcnQodC5waWVjZXMpKTozLGk9cixzPWUodGhpcyksbz1lLmVmZmVjdHMuc2V0TW9kZShzLHQubW9kZXx8ImhpZGUiKSx1PW89PT0ic2hvdyIsYT1zLnNob3coKS5jc3MoInZpc2liaWxpdHkiLCJoaWRkZW4iKS5vZmZzZXQoKSxmPU1hdGguY2VpbChzLm91dGVyV2lkdGgoKS9pKSxsPU1hdGguY2VpbChzLm91dGVySGVpZ2h0KCkvciksYz1bXSxoLHAsZCx2LG0sZztmb3IoaD0wO2g8cjtoKyspe3Y9YS50b3AraCpsLGc9aC0oci0xKS8yO2ZvcihwPTA7cDxpO3ArKylkPWEubGVmdCtwKmYsbT1wLShpLTEpLzIscy5jbG9uZSgpLmFwcGVuZFRvKCJib2R5Iikud3JhcCgiPGRpdj48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsdmlzaWJpbGl0eToidmlzaWJsZSIsbGVmdDotcCpmLHRvcDotaCpsfSkucGFyZW50KCkuYWRkQ2xhc3MoInVpLWVmZmVjdHMtZXhwbG9kZSIpLmNzcyh7cG9zaXRpb246ImFic29sdXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDpmLGhlaWdodDpsLGxlZnQ6ZCsodT9tKmY6MCksdG9wOnYrKHU/ZypsOjApLG9wYWNpdHk6dT8wOjF9KS5hbmltYXRlKHtsZWZ0OmQrKHU/MDptKmYpLHRvcDp2Kyh1PzA6ZypsKSxvcGFjaXR5OnU/MTowfSx0LmR1cmF0aW9ufHw1MDAsdC5lYXNpbmcseSl9fX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5mYWRlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZWZmZWN0cy5zZXRNb2RlKHIsdC5tb2RlfHwidG9nZ2xlIik7ci5hbmltYXRlKHtvcGFjaXR5Oml9LHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpufSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LmZvbGQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImhpZGUiKSxvPXM9PT0ic2hvdyIsdT1zPT09ImhpZGUiLGE9dC5zaXplfHwxNSxmPS8oWzAtOV0rKSUvLmV4ZWMoYSksbD0hIXQuaG9yaXpGaXJzdCxjPW8hPT1sLGg9Yz9bIndpZHRoIiwiaGVpZ2h0Il06WyJoZWlnaHQiLCJ3aWR0aCJdLHA9dC5kdXJhdGlvbi8yLGQsdixtPXt9LGc9e307ZS5lZmZlY3RzLnNhdmUocixpKSxyLnNob3coKSxkPWUuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKHIpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSx2PWM/W2Qud2lkdGgoKSxkLmhlaWdodCgpXTpbZC5oZWlnaHQoKSxkLndpZHRoKCldLGYmJihhPXBhcnNlSW50KGZbMV0sMTApLzEwMCp2W3U/MDoxXSksbyYmZC5jc3MobD97aGVpZ2h0OjAsd2lkdGg6YX06e2hlaWdodDphLHdpZHRoOjB9KSxtW2hbMF1dPW8/dlswXTphLGdbaFsxXV09bz92WzFdOjAsZC5hbmltYXRlKG0scCx0LmVhc2luZykuYW5pbWF0ZShnLHAsdC5lYXNpbmcsZnVuY3Rpb24oKXt1JiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX0pfX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS5lZmZlY3RzLmVmZmVjdC5oaWdobGlnaHQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvcGFjaXR5Il0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8InNob3ciKSxvPXtiYWNrZ3JvdW5kQ29sb3I6ci5jc3MoImJhY2tncm91bmRDb2xvciIpfTtzPT09ImhpZGUiJiYoby5vcGFjaXR5PTApLGUuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCkuY3NzKHtiYWNrZ3JvdW5kSW1hZ2U6Im5vbmUiLGJhY2tncm91bmRDb2xvcjp0LmNvbG9yfHwiI2ZmZmY5OSJ9KS5hbmltYXRlKG8se3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7cz09PSJoaWRlIiYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxuKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnB1bHNhdGU9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJzaG93Iikscz1pPT09InNob3ciLG89aT09PSJoaWRlIix1PXN8fGk9PT0iaGlkZSIsYT0odC50aW1lc3x8NSkqMisodT8xOjApLGY9dC5kdXJhdGlvbi9hLGw9MCxjPXIucXVldWUoKSxoPWMubGVuZ3RoLHA7aWYoc3x8IXIuaXMoIjp2aXNpYmxlIikpci5jc3MoIm9wYWNpdHkiLDApLnNob3coKSxsPTE7Zm9yKHA9MTtwPGE7cCsrKXIuYW5pbWF0ZSh7b3BhY2l0eTpsfSxmLHQuZWFzaW5nKSxsPTEtbDtyLmFuaW1hdGUoe29wYWNpdHk6bH0sZix0LmVhc2luZyksci5xdWV1ZShmdW5jdGlvbigpe28mJnIuaGlkZSgpLG4oKX0pLGg+MSYmYy5zcGxpY2UuYXBwbHkoYyxbMSwwXS5jb25jYXQoYy5zcGxpY2UoaCxhKzEpKSksci5kZXF1ZXVlKCl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnB1ZmY9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJoaWRlIikscz1pPT09ImhpZGUiLG89cGFyc2VJbnQodC5wZXJjZW50LDEwKXx8MTUwLHU9by8xMDAsYT17aGVpZ2h0OnIuaGVpZ2h0KCksd2lkdGg6ci53aWR0aCgpLG91dGVySGVpZ2h0OnIub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOnIub3V0ZXJXaWR0aCgpfTtlLmV4dGVuZCh0LHtlZmZlY3Q6InNjYWxlIixxdWV1ZTohMSxmYWRlOiEwLG1vZGU6aSxjb21wbGV0ZTpuLHBlcmNlbnQ6cz9vOjEwMCxmcm9tOnM/YTp7aGVpZ2h0OmEuaGVpZ2h0KnUsd2lkdGg6YS53aWR0aCp1LG91dGVySGVpZ2h0OmEub3V0ZXJIZWlnaHQqdSxvdXRlcldpZHRoOmEub3V0ZXJXaWR0aCp1fX0pLHIuZWZmZWN0KHQpfSxlLmVmZmVjdHMuZWZmZWN0LnNjYWxlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUuZXh0ZW5kKCEwLHt9LHQpLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJlZmZlY3QiKSxvPXBhcnNlSW50KHQucGVyY2VudCwxMCl8fChwYXJzZUludCh0LnBlcmNlbnQsMTApPT09MD8wOnM9PT0iaGlkZSI/MDoxMDApLHU9dC5kaXJlY3Rpb258fCJib3RoIixhPXQub3JpZ2luLGY9e2hlaWdodDpyLmhlaWdodCgpLHdpZHRoOnIud2lkdGgoKSxvdXRlckhlaWdodDpyLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpyLm91dGVyV2lkdGgoKX0sbD17eTp1IT09Imhvcml6b250YWwiP28vMTAwOjEseDp1IT09InZlcnRpY2FsIj9vLzEwMDoxfTtpLmVmZmVjdD0ic2l6ZSIsaS5xdWV1ZT0hMSxpLmNvbXBsZXRlPW4scyE9PSJlZmZlY3QiJiYoaS5vcmlnaW49YXx8WyJtaWRkbGUiLCJjZW50ZXIiXSxpLnJlc3RvcmU9ITApLGkuZnJvbT10LmZyb218fChzPT09InNob3ciP3toZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTpmKSxpLnRvPXtoZWlnaHQ6Zi5oZWlnaHQqbC55LHdpZHRoOmYud2lkdGgqbC54LG91dGVySGVpZ2h0OmYub3V0ZXJIZWlnaHQqbC55LG91dGVyV2lkdGg6Zi5vdXRlcldpZHRoKmwueH0saS5mYWRlJiYocz09PSJzaG93IiYmKGkuZnJvbS5vcGFjaXR5PTAsaS50by5vcGFjaXR5PTEpLHM9PT0iaGlkZSImJihpLmZyb20ub3BhY2l0eT0xLGkudG8ub3BhY2l0eT0wKSksci5lZmZlY3QoaSl9LGUuZWZmZWN0cy5lZmZlY3Quc2l6ZT1mdW5jdGlvbih0LG4pe3ZhciByLGkscyxvPWUodGhpcyksdT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxhPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxmPVsid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyJdLGw9WyJmb250U2l6ZSJdLGM9WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxoPVsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0scD1lLmVmZmVjdHMuc2V0TW9kZShvLHQubW9kZXx8ImVmZmVjdCIpLGQ9dC5yZXN0b3JlfHxwIT09ImVmZmVjdCIsdj10LnNjYWxlfHwiYm90aCIsbT10Lm9yaWdpbnx8WyJtaWRkbGUiLCJjZW50ZXIiXSxnPW8uY3NzKCJwb3NpdGlvbiIpLHk9ZD91OmEsYj17aGVpZ2h0OjAsd2lkdGg6MCxvdXRlckhlaWdodDowLG91dGVyV2lkdGg6MH07cD09PSJzaG93IiYmby5zaG93KCkscj17aGVpZ2h0Om8uaGVpZ2h0KCksd2lkdGg6by53aWR0aCgpLG91dGVySGVpZ2h0Om8ub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOm8ub3V0ZXJXaWR0aCgpfSx0Lm1vZGU9PT0idG9nZ2xlIiYmcD09PSJzaG93Ij8oby5mcm9tPXQudG98fGIsby50bz10LmZyb218fHIpOihvLmZyb209dC5mcm9tfHwocD09PSJzaG93Ij9iOnIpLG8udG89dC50b3x8KHA9PT0iaGlkZSI/YjpyKSkscz17ZnJvbTp7eTpvLmZyb20uaGVpZ2h0L3IuaGVpZ2h0LHg6by5mcm9tLndpZHRoL3Iud2lkdGh9LHRvOnt5Om8udG8uaGVpZ2h0L3IuaGVpZ2h0LHg6by50by53aWR0aC9yLndpZHRofX07aWYodj09PSJib3gifHx2PT09ImJvdGgiKXMuZnJvbS55IT09cy50by55JiYoeT15LmNvbmNhdChjKSxvLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxjLHMuZnJvbS55LG8uZnJvbSksby50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGMscy50by55LG8udG8pKSxzLmZyb20ueCE9PXMudG8ueCYmKHk9eS5jb25jYXQoaCksby5mcm9tPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8saCxzLmZyb20ueCxvLmZyb20pLG8udG89ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obyxoLHMudG8ueCxvLnRvKSk7KHY9PT0iY29udGVudCJ8fHY9PT0iYm90aCIpJiZzLmZyb20ueSE9PXMudG8ueSYmKHk9eS5jb25jYXQobCkuY29uY2F0KGYpLG8uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihvLGwscy5mcm9tLnksby5mcm9tKSxvLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG8sbCxzLnRvLnksby50bykpLGUuZWZmZWN0cy5zYXZlKG8seSksby5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobyksby5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIikuY3NzKG8uZnJvbSksbSYmKGk9ZS5lZmZlY3RzLmdldEJhc2VsaW5lKG0sciksby5mcm9tLnRvcD0oci5vdXRlckhlaWdodC1vLm91dGVySGVpZ2h0KCkpKmkueSxvLmZyb20ubGVmdD0oci5vdXRlcldpZHRoLW8ub3V0ZXJXaWR0aCgpKSppLngsby50by50b3A9KHIub3V0ZXJIZWlnaHQtby50by5vdXRlckhlaWdodCkqaS55LG8udG8ubGVmdD0oci5vdXRlcldpZHRoLW8udG8ub3V0ZXJXaWR0aCkqaS54KSxvLmNzcyhvLmZyb20pO2lmKHY9PT0iY29udGVudCJ8fHY9PT0iYm90aCIpYz1jLmNvbmNhdChbIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSJdKS5jb25jYXQobCksaD1oLmNvbmNhdChbIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCJdKSxmPXUuY29uY2F0KGMpLmNvbmNhdChoKSxvLmZpbmQoIipbd2lkdGhdIikuZWFjaChmdW5jdGlvbigpe3ZhciBuPWUodGhpcykscj17aGVpZ2h0Om4uaGVpZ2h0KCksd2lkdGg6bi53aWR0aCgpLG91dGVySGVpZ2h0Om4ub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOm4ub3V0ZXJXaWR0aCgpfTtkJiZlLmVmZmVjdHMuc2F2ZShuLGYpLG4uZnJvbT17aGVpZ2h0OnIuaGVpZ2h0KnMuZnJvbS55LHdpZHRoOnIud2lkdGgqcy5mcm9tLngsb3V0ZXJIZWlnaHQ6ci5vdXRlckhlaWdodCpzLmZyb20ueSxvdXRlcldpZHRoOnIub3V0ZXJXaWR0aCpzLmZyb20ueH0sbi50bz17aGVpZ2h0OnIuaGVpZ2h0KnMudG8ueSx3aWR0aDpyLndpZHRoKnMudG8ueCxvdXRlckhlaWdodDpyLmhlaWdodCpzLnRvLnksb3V0ZXJXaWR0aDpyLndpZHRoKnMudG8ueH0scy5mcm9tLnkhPT1zLnRvLnkmJihuLmZyb209ZS5lZmZlY3RzLnNldFRyYW5zaXRpb24obixjLHMuZnJvbS55LG4uZnJvbSksbi50bz1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihuLGMscy50by55LG4udG8pKSxzLmZyb20ueCE9PXMudG8ueCYmKG4uZnJvbT1lLmVmZmVjdHMuc2V0VHJhbnNpdGlvbihuLGgscy5mcm9tLngsbi5mcm9tKSxuLnRvPWUuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKG4saCxzLnRvLngsbi50bykpLG4uY3NzKG4uZnJvbSksbi5hbmltYXRlKG4udG8sdC5kdXJhdGlvbix0LmVhc2luZyxmdW5jdGlvbigpe2QmJmUuZWZmZWN0cy5yZXN0b3JlKG4sZil9KX0pO28uYW5pbWF0ZShvLnRvLHtxdWV1ZTohMSxkdXJhdGlvbjp0LmR1cmF0aW9uLGVhc2luZzp0LmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpe28udG8ub3BhY2l0eT09PTAmJm8uY3NzKCJvcGFjaXR5IixvLmZyb20ub3BhY2l0eSkscD09PSJoaWRlIiYmby5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUobyx5KSxkfHwoZz09PSJzdGF0aWMiP28uY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDpvLnRvLnRvcCxsZWZ0Om8udG8ubGVmdH0pOmUuZWFjaChbInRvcCIsImxlZnQiXSxmdW5jdGlvbihlLHQpe28uY3NzKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1wYXJzZUludChuLDEwKSxpPWU/by50by5sZWZ0Om8udG8udG9wO3JldHVybiBuPT09ImF1dG8iP2krInB4IjpyK2krInB4In0pfSkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKG8pLG4oKX19KX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2UuZWZmZWN0cy5lZmZlY3Quc2hha2U9ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLGk9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0scz1lLmVmZmVjdHMuc2V0TW9kZShyLHQubW9kZXx8ImVmZmVjdCIpLG89dC5kaXJlY3Rpb258fCJsZWZ0Iix1PXQuZGlzdGFuY2V8fDIwLGE9dC50aW1lc3x8MyxmPWEqMisxLGw9TWF0aC5yb3VuZCh0LmR1cmF0aW9uL2YpLGM9bz09PSJ1cCJ8fG89PT0iZG93biI/InRvcCI6ImxlZnQiLGg9bz09PSJ1cCJ8fG89PT0ibGVmdCIscD17fSxkPXt9LHY9e30sbSxnPXIucXVldWUoKSx5PWcubGVuZ3RoO2UuZWZmZWN0cy5zYXZlKHIsaSksci5zaG93KCksZS5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIocikscFtjXT0oaD8iLT0iOiIrPSIpK3UsZFtjXT0oaD8iKz0iOiItPSIpK3UqMix2W2NdPShoPyItPSI6Iis9IikrdSoyLHIuYW5pbWF0ZShwLGwsdC5lYXNpbmcpO2ZvcihtPTE7bTxhO20rKylyLmFuaW1hdGUoZCxsLHQuZWFzaW5nKS5hbmltYXRlKHYsbCx0LmVhc2luZyk7ci5hbmltYXRlKGQsbCx0LmVhc2luZykuYW5pbWF0ZShwLGwvMix0LmVhc2luZykucXVldWUoZnVuY3Rpb24oKXtzPT09ImhpZGUiJiZyLmhpZGUoKSxlLmVmZmVjdHMucmVzdG9yZShyLGkpLGUuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKHIpLG4oKX0pLHk+MSYmZy5zcGxpY2UuYXBwbHkoZyxbMSwwXS5jb25jYXQoZy5zcGxpY2UoeSxmKzEpKSksci5kZXF1ZXVlKCl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnNsaWRlPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ3aWR0aCIsImhlaWdodCJdLHM9ZS5lZmZlY3RzLnNldE1vZGUocix0Lm1vZGV8fCJzaG93Iiksbz1zPT09InNob3ciLHU9dC5kaXJlY3Rpb258fCJsZWZ0IixhPXU9PT0idXAifHx1PT09ImRvd24iPyJ0b3AiOiJsZWZ0IixmPXU9PT0idXAifHx1PT09ImxlZnQiLGwsYz17fTtlLmVmZmVjdHMuc2F2ZShyLGkpLHIuc2hvdygpLGw9dC5kaXN0YW5jZXx8clthPT09InRvcCI/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCEwKSxlLmVmZmVjdHMuY3JlYXRlV3JhcHBlcihyKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbyYmci5jc3MoYSxmP2lzTmFOKGwpPyItIitsOi1sOmwpLGNbYV09KG8/Zj8iKz0iOiItPSI6Zj8iLT0iOiIrPSIpK2wsci5hbmltYXRlKGMse3F1ZXVlOiExLGR1cmF0aW9uOnQuZHVyYXRpb24sZWFzaW5nOnQuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7cz09PSJoaWRlIiYmci5oaWRlKCksZS5lZmZlY3RzLnJlc3RvcmUocixpKSxlLmVmZmVjdHMucmVtb3ZlV3JhcHBlcihyKSxuKCl9fSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXtlLmVmZmVjdHMuZWZmZWN0LnRyYW5zZmVyPWZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKSxpPWUodC50bykscz1pLmNzcygicG9zaXRpb24iKT09PSJmaXhlZCIsbz1lKCJib2R5IiksdT1zP28uc2Nyb2xsVG9wKCk6MCxhPXM/by5zY3JvbGxMZWZ0KCk6MCxmPWkub2Zmc2V0KCksbD17dG9wOmYudG9wLXUsbGVmdDpmLmxlZnQtYSxoZWlnaHQ6aS5pbm5lckhlaWdodCgpLHdpZHRoOmkuaW5uZXJXaWR0aCgpfSxjPXIub2Zmc2V0KCksaD1lKCc8ZGl2IGNsYXNzPSJ1aS1lZmZlY3RzLXRyYW5zZmVyIj48L2Rpdj4nKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyh0LmNsYXNzTmFtZSkuY3NzKHt0b3A6Yy50b3AtdSxsZWZ0OmMubGVmdC1hLGhlaWdodDpyLmlubmVySGVpZ2h0KCksd2lkdGg6ci5pbm5lcldpZHRoKCkscG9zaXRpb246cz8iZml4ZWQiOiJhYnNvbHV0ZSJ9KS5hbmltYXRlKGwsdC5kdXJhdGlvbix0LmVhc2luZyxmdW5jdGlvbigpe2gucmVtb3ZlKCksbigpfSl9fSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj0hMTtlLndpZGdldCgidWkubWVudSIse3ZlcnNpb246IjEuOS4yIixkZWZhdWx0RWxlbWVudDoiPHVsPiIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OiJ1aS1pY29uLWNhcmF0LTEtZSJ9LG1lbnVzOiJ1bCIscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6InJpZ2h0IHRvcCJ9LHJvbGU6Im1lbnUiLGJsdXI6bnVsbCxmb2N1czpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVNZW51PXRoaXMuZWxlbWVudCx0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwhIXRoaXMuZWxlbWVudC5maW5kKCIudWktaWNvbiIpLmxlbmd0aCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSkuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZS5wcm94eShmdW5jdGlvbihlKXt0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJmUucHJldmVudERlZmF1bHQoKX0sdGhpcykpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLmF0dHIoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIiksdGhpcy5fb24oeyJtb3VzZWRvd24gLnVpLW1lbnUtaXRlbSA+IGEiOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0sImNsaWNrIC51aS1zdGF0ZS1kaXNhYmxlZCA+IGEiOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0sImNsaWNrIC51aS1tZW51LWl0ZW06aGFzKGEpIjpmdW5jdGlvbih0KXt2YXIgcj1lKHQudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIik7IW4mJnIubm90KCIudWktc3RhdGUtZGlzYWJsZWQiKS5sZW5ndGgmJihuPSEwLHRoaXMuc2VsZWN0KHQpLHIuaGFzKCIudWktbWVudSIpLmxlbmd0aD90aGlzLmV4cGFuZCh0KTp0aGlzLmVsZW1lbnQuaXMoIjpmb2N1cyIpfHwodGhpcy5lbGVtZW50LnRyaWdnZXIoImZvY3VzIixbITBdKSx0aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGg9PT0xJiZjbGVhclRpbWVvdXQodGhpcy50aW1lcikpKX0sIm1vdXNlZW50ZXIgLnVpLW1lbnUtaXRlbSI6ZnVuY3Rpb24odCl7dmFyIG49ZSh0LmN1cnJlbnRUYXJnZXQpO24uc2libGluZ3MoKS5jaGlsZHJlbigiLnVpLXN0YXRlLWFjdGl2ZSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLmZvY3VzKHQsbil9LG1vdXNlbGVhdmU6ImNvbGxhcHNlQWxsIiwibW91c2VsZWF2ZSAudWktbWVudSI6ImNvbGxhcHNlQWxsIixmb2N1czpmdW5jdGlvbihlLHQpe3ZhciBuPXRoaXMuYWN0aXZlfHx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5lcSgwKTt0fHx0aGlzLmZvY3VzKGUsbil9LGJsdXI6ZnVuY3Rpb24odCl7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpfHx0aGlzLmNvbGxhcHNlQWxsKHQpfSl9LGtleWRvd246Il9rZXlkb3duIn0pLHRoaXMucmVmcmVzaCgpLHRoaXMuX29uKHRoaXMuZG9jdW1lbnQse2NsaWNrOmZ1bmN0aW9uKHQpe2UodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51IikubGVuZ3RofHx0aGlzLmNvbGxhcHNlQWxsKHQpLG49ITF9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLmZpbmQoIi51aS1tZW51IikuYW5kU2VsZigpLnJlbW92ZUNsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLW1lbnUtaWNvbnMiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWl0ZW0iKS5yZW1vdmVDbGFzcygidWktbWVudS1pdGVtIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5jaGlsZHJlbigiYSIpLnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktc3RhdGUtaG92ZXIiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhhc3BvcHVwIikuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIpJiZ0LnJlbW92ZSgpfSksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWRpdmlkZXIiKS5yZW1vdmVDbGFzcygidWktbWVudS1kaXZpZGVyIHVpLXdpZGdldC1jb250ZW50Iil9LF9rZXlkb3duOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGEoZSl7cmV0dXJuIGUucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfXZhciBuLHIsaSxzLG8sdT0hMDtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMucHJldmlvdXNQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLm5leHRQYWdlKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkhPTUU6dGhpcy5fbW92ZSgiZmlyc3QiLCJmaXJzdCIsdCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoImxhc3QiLCJsYXN0Iix0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KHQpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZSh0KTticmVhaztjYXNlIGUudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5leHBhbmQodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRU5URVI6Y2FzZSBlLnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUodCk7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UodCk7YnJlYWs7ZGVmYXVsdDp1PSExLHI9dGhpcy5wcmV2aW91c0ZpbHRlcnx8IiIsaT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSkscz0hMSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksaT09PXI/cz0hMDppPXIraSxvPW5ldyBSZWdFeHAoIl4iK2EoaSksImkiKSxuPXRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiBvLnRlc3QoZSh0aGlzKS5jaGlsZHJlbigiYSIpLnRleHQoKSl9KSxuPXMmJm4uaW5kZXgodGhpcy5hY3RpdmUubmV4dCgpKSE9PS0xP3RoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKTpuLG4ubGVuZ3RofHwoaT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQua2V5Q29kZSksbz1uZXcgUmVnRXhwKCJeIithKGkpLCJpIiksbj10aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gby50ZXN0KGUodGhpcykuY2hpbGRyZW4oImEiKS50ZXh0KCkpfSkpLG4ubGVuZ3RoPyh0aGlzLmZvY3VzKHQsbiksbi5sZW5ndGg+MT8odGhpcy5wcmV2aW91c0ZpbHRlcj1pLHRoaXMuZmlsdGVyVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn0sMWUzKSk6ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXIpOmRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyfXUmJnQucHJldmVudERlZmF1bHQoKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKGUpe3RoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKXx8KHRoaXMuYWN0aXZlLmNoaWxkcmVuKCJhW2FyaWEtaGFzcG9wdXA9J3RydWUnXSIpLmxlbmd0aD90aGlzLmV4cGFuZChlKTp0aGlzLnNlbGVjdChlKSl9LHJlZnJlc2g6ZnVuY3Rpb24oKXt2YXIgdCxuPXRoaXMub3B0aW9ucy5pY29ucy5zdWJtZW51LHI9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLm1lbnVzKTtyLmZpbHRlcigiOm5vdCgudWktbWVudSkiKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLmhpZGUoKS5hdHRyKHtyb2xlOnRoaXMub3B0aW9ucy5yb2xlLCJhcmlhLWhpZGRlbiI6InRydWUiLCJhcmlhLWV4cGFuZGVkIjoiZmFsc2UifSkuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscj10LnByZXYoImEiKSxpPWUoIjxzcGFuPiIpLmFkZENsYXNzKCJ1aS1tZW51LWljb24gdWktaWNvbiAiK24pLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIsITApO3IuYXR0cigiYXJpYS1oYXNwb3B1cCIsInRydWUiKS5wcmVwZW5kKGkpLHQuYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixyLmF0dHIoImlkIikpfSksdD1yLmFkZCh0aGlzLmVsZW1lbnQpLHQuY2hpbGRyZW4oIjpub3QoLnVpLW1lbnUtaXRlbSk6aGFzKGEpIikuYWRkQ2xhc3MoInVpLW1lbnUtaXRlbSIpLmF0dHIoInJvbGUiLCJwcmVzZW50YXRpb24iKS5jaGlsZHJlbigiYSIpLnVuaXF1ZUlkKCkuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKS5hdHRyKHt0YWJJbmRleDotMSxyb2xlOnRoaXMuX2l0ZW1Sb2xlKCl9KSx0LmNoaWxkcmVuKCI6bm90KC51aS1tZW51LWl0ZW0pIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyk7L1teXC3igJTigJNcc10vLnRlc3QodC50ZXh0KCkpfHx0LmFkZENsYXNzKCJ1aS13aWRnZXQtY29udGVudCB1aS1tZW51LWRpdmlkZXIiKX0pLHQuY2hpbGRyZW4oIi51aS1zdGF0ZS1kaXNhYmxlZCIpLmF0dHIoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIiksdGhpcy5hY3RpdmUmJiFlLmNvbnRhaW5zKHRoaXMuZWxlbWVudFswXSx0aGlzLmFjdGl2ZVswXSkmJnRoaXMuYmx1cigpfSxfaXRlbVJvbGU6ZnVuY3Rpb24oKXtyZXR1cm57bWVudToibWVudWl0ZW0iLGxpc3Rib3g6Im9wdGlvbiJ9W3RoaXMub3B0aW9ucy5yb2xlXX0sZm9jdXM6ZnVuY3Rpb24oZSx0KXt2YXIgbixyO3RoaXMuYmx1cihlLGUmJmUudHlwZT09PSJmb2N1cyIpLHRoaXMuX3Njcm9sbEludG9WaWV3KHQpLHRoaXMuYWN0aXZlPXQuZmlyc3QoKSxyPXRoaXMuYWN0aXZlLmNoaWxkcmVuKCJhIikuYWRkQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksdGhpcy5vcHRpb25zLnJvbGUmJnRoaXMuZWxlbWVudC5hdHRyKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLHIuYXR0cigiaWQiKSksdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIpLmNoaWxkcmVuKCJhOmZpcnN0IikuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLGUmJmUudHlwZT09PSJrZXlkb3duIj90aGlzLl9jbG9zZSgpOnRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpfSx0aGlzLmRlbGF5KSxuPXQuY2hpbGRyZW4oIi51aS1tZW51Iiksbi5sZW5ndGgmJi9ebW91c2UvLnRlc3QoZS50eXBlKSYmdGhpcy5fc3RhcnRPcGVuaW5nKG4pLHRoaXMuYWN0aXZlTWVudT10LnBhcmVudCgpLHRoaXMuX3RyaWdnZXIoImZvY3VzIixlLHtpdGVtOnR9KX0sX3Njcm9sbEludG9WaWV3OmZ1bmN0aW9uKHQpe3ZhciBuLHIsaSxzLG8sdTt0aGlzLl9oYXNTY3JvbGwoKSYmKG49cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sImJvcmRlclRvcFdpZHRoIikpfHwwLHI9cGFyc2VGbG9hdChlLmNzcyh0aGlzLmFjdGl2ZU1lbnVbMF0sInBhZGRpbmdUb3AiKSl8fDAsaT10Lm9mZnNldCgpLnRvcC10aGlzLmFjdGl2ZU1lbnUub2Zmc2V0KCkudG9wLW4tcixzPXRoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AoKSxvPXRoaXMuYWN0aXZlTWVudS5oZWlnaHQoKSx1PXQuaGVpZ2h0KCksaTwwP3RoaXMuYWN0aXZlTWVudS5zY3JvbGxUb3AocytpKTppK3U+byYmdGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChzK2ktbyt1KSl9LGJsdXI6ZnVuY3Rpb24oZSx0KXt0fHxjbGVhclRpbWVvdXQodGhpcy50aW1lcik7aWYoIXRoaXMuYWN0aXZlKXJldHVybjt0aGlzLmFjdGl2ZS5jaGlsZHJlbigiYSIpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpLHRoaXMuYWN0aXZlPW51bGwsdGhpcy5fdHJpZ2dlcigiYmx1ciIsZSx7aXRlbTp0aGlzLmFjdGl2ZX0pfSxfc3RhcnRPcGVuaW5nOmZ1bmN0aW9uKGUpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtpZihlLmF0dHIoImFyaWEtaGlkZGVuIikhPT0idHJ1ZSIpcmV0dXJuO3RoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLl9jbG9zZSgpLHRoaXMuX29wZW4oZSl9LHRoaXMuZGVsYXkpfSxfb3BlbjpmdW5jdGlvbih0KXt2YXIgbj1lLmV4dGVuZCh7b2Y6dGhpcy5hY3RpdmV9LHRoaXMub3B0aW9ucy5wb3NpdGlvbik7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpLm5vdCh0LnBhcmVudHMoIi51aS1tZW51IikpLmhpZGUoKS5hdHRyKCJhcmlhLWhpZGRlbiIsInRydWUiKSx0LnNob3coKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJ0cnVlIikucG9zaXRpb24obil9LGNvbGxhcHNlQWxsOmZ1bmN0aW9uKHQsbil7Y2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLHRoaXMudGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt2YXIgcj1uP3RoaXMuZWxlbWVudDplKHQmJnQudGFyZ2V0KS5jbG9zZXN0KHRoaXMuZWxlbWVudC5maW5kKCIudWktbWVudSIpKTtyLmxlbmd0aHx8KHI9dGhpcy5lbGVtZW50KSx0aGlzLl9jbG9zZShyKSx0aGlzLmJsdXIodCksdGhpcy5hY3RpdmVNZW51PXJ9LHRoaXMuZGVsYXkpfSxfY2xvc2U6ZnVuY3Rpb24oZSl7ZXx8KGU9dGhpcy5hY3RpdmU/dGhpcy5hY3RpdmUucGFyZW50KCk6dGhpcy5lbGVtZW50KSxlLmZpbmQoIi51aS1tZW51IikuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLmF0dHIoImFyaWEtZXhwYW5kZWQiLCJmYWxzZSIpLmVuZCgpLmZpbmQoImEudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSxjb2xsYXBzZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmFjdGl2ZSYmdGhpcy5hY3RpdmUucGFyZW50KCkuY2xvc2VzdCgiLnVpLW1lbnUtaXRlbSIsdGhpcy5lbGVtZW50KTt0JiZ0Lmxlbmd0aCYmKHRoaXMuX2Nsb3NlKCksdGhpcy5mb2N1cyhlLHQpKX0sZXhwYW5kOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5jaGlsZHJlbigiLnVpLW1lbnUgIikuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maXJzdCgpO3QmJnQubGVuZ3RoJiYodGhpcy5fb3Blbih0LnBhcmVudCgpKSx0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuZm9jdXMoZSx0KX0pKX0sbmV4dDpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlKCJuZXh0IiwiZmlyc3QiLGUpfSxwcmV2aW91czpmdW5jdGlvbihlKXt0aGlzLl9tb3ZlKCJwcmV2IiwibGFzdCIsZSl9LGlzRmlyc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0saXNMYXN0SXRlbTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh9LF9tb3ZlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcjt0aGlzLmFjdGl2ZSYmKGU9PT0iZmlyc3QifHxlPT09Imxhc3QiP3I9dGhpcy5hY3RpdmVbZT09PSJmaXJzdCI/InByZXZBbGwiOiJuZXh0QWxsIl0oIi51aS1tZW51LWl0ZW0iKS5lcSgtMSk6cj10aGlzLmFjdGl2ZVtlKyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKTtpZighcnx8IXIubGVuZ3RofHwhdGhpcy5hY3RpdmUpcj10aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKVt0XSgpO3RoaXMuZm9jdXMobixyKX0sbmV4dFBhZ2U6ZnVuY3Rpb24odCl7dmFyIG4scixpO2lmKCF0aGlzLmFjdGl2ZSl7dGhpcy5uZXh0KHQpO3JldHVybn1pZih0aGlzLmlzTGFzdEl0ZW0oKSlyZXR1cm47dGhpcy5faGFzU2Nyb2xsKCk/KHI9dGhpcy5hY3RpdmUub2Zmc2V0KCkudG9wLGk9dGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuYWN0aXZlLm5leHRBbGwoIi51aS1tZW51LWl0ZW0iKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIG49ZSh0aGlzKSxuLm9mZnNldCgpLnRvcC1yLWk8MH0pLHRoaXMuZm9jdXModCxuKSk6dGhpcy5mb2N1cyh0LHRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpW3RoaXMuYWN0aXZlPyJsYXN0IjoiZmlyc3QiXSgpKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaTtpZighdGhpcy5hY3RpdmUpe3RoaXMubmV4dCh0KTtyZXR1cm59aWYodGhpcy5pc0ZpcnN0SXRlbSgpKXJldHVybjt0aGlzLl9oYXNTY3JvbGwoKT8ocj10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3AsaT10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUucHJldkFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gbj1lKHRoaXMpLG4ub2Zmc2V0KCkudG9wLXIraT4wfSksdGhpcy5mb2N1cyh0LG4pKTp0aGlzLmZvY3VzKHQsdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlyc3QoKSl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24odCl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fGUodC50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgbj17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbCh0LCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLHQsbil9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5wcm9ncmVzc2JhciIse3ZlcnNpb246IjEuOS4yIixvcHRpb25zOnt2YWx1ZTowLG1heDoxMDB9LG1pbjowLF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXByb2dyZXNzYmFyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikuYXR0cih7cm9sZToicHJvZ3Jlc3NiYXIiLCJhcmlhLXZhbHVlbWluIjp0aGlzLm1pbiwiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dGhpcy5fdmFsdWUoKX0pLHRoaXMudmFsdWVEaXY9ZSgiPGRpdiBjbGFzcz0ndWktcHJvZ3Jlc3NiYXItdmFsdWUgdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItbGVmdCc+PC9kaXY+IikuYXBwZW5kVG8odGhpcy5lbGVtZW50KSx0aGlzLm9sZFZhbHVlPXRoaXMuX3ZhbHVlKCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpfSx2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/dGhpcy5fdmFsdWUoKToodGhpcy5fc2V0T3B0aW9uKCJ2YWx1ZSIsZSksdGhpcyl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtlPT09InZhbHVlIiYmKHRoaXMub3B0aW9ucy52YWx1ZT10LHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX3ZhbHVlKCk9PT10aGlzLm9wdGlvbnMubWF4JiZ0aGlzLl90cmlnZ2VyKCJjb21wbGV0ZSIpKSx0aGlzLl9zdXBlcihlLHQpfSxfdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMudmFsdWU7cmV0dXJuIHR5cGVvZiBlIT0ibnVtYmVyIiYmKGU9MCksTWF0aC5taW4odGhpcy5vcHRpb25zLm1heCxNYXRoLm1heCh0aGlzLm1pbixlKSl9LF9wZXJjZW50YWdlOmZ1bmN0aW9uKCl7cmV0dXJuIDEwMCp0aGlzLl92YWx1ZSgpL3RoaXMub3B0aW9ucy5tYXh9LF9yZWZyZXNoVmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnZhbHVlKCksdD10aGlzLl9wZXJjZW50YWdlKCk7dGhpcy5vbGRWYWx1ZSE9PWUmJih0aGlzLm9sZFZhbHVlPWUsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIikpLHRoaXMudmFsdWVEaXYudG9nZ2xlKGU+dGhpcy5taW4pLnRvZ2dsZUNsYXNzKCJ1aS1jb3JuZXItcmlnaHQiLGU9PT10aGlzLm9wdGlvbnMubWF4KS53aWR0aCh0LnRvRml4ZWQoMCkrIiUiKSx0aGlzLmVsZW1lbnQuYXR0cigiYXJpYS12YWx1ZW5vdyIsZSl9fSl9KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5yZXNpemFibGUiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4yIix3aWRnZXRFdmVudFByZWZpeDoicmVzaXplIixvcHRpb25zOnthbHNvUmVzaXplOiExLGFuaW1hdGU6ITEsYW5pbWF0ZUR1cmF0aW9uOiJzbG93IixhbmltYXRlRWFzaW5nOiJzd2luZyIsYXNwZWN0UmF0aW86ITEsYXV0b0hpZGU6ITEsY29udGFpbm1lbnQ6ITEsZ2hvc3Q6ITEsZ3JpZDohMSxoYW5kbGVzOiJlLHMsc2UiLGhlbHBlcjohMSxtYXhIZWlnaHQ6bnVsbCxtYXhXaWR0aDpudWxsLG1pbkhlaWdodDoxMCxtaW5XaWR0aDoxMCx6SW5kZXg6MWUzfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxuPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZSIpLGUuZXh0ZW5kKHRoaXMse19hc3BlY3RSYXRpbzohIW4uYXNwZWN0UmF0aW8sYXNwZWN0UmF0aW86bi5hc3BlY3RSYXRpbyxvcmlnaW5hbEVsZW1lbnQ6dGhpcy5lbGVtZW50LF9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzOltdLF9oZWxwZXI6bi5oZWxwZXJ8fG4uZ2hvc3R8fG4uYW5pbWF0ZT9uLmhlbHBlcnx8InVpLXJlc2l6YWJsZS1oZWxwZXIiOm51bGx9KSx0aGlzLmVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL2NhbnZhc3x0ZXh0YXJlYXxpbnB1dHxzZWxlY3R8YnV0dG9ufGltZy9pKSYmKHRoaXMuZWxlbWVudC53cmFwKGUoJzxkaXYgY2xhc3M9InVpLXdyYXBwZXIiIHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyI+PC9kaXY+JykuY3NzKHtwb3NpdGlvbjp0aGlzLmVsZW1lbnQuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOnRoaXMuZWxlbWVudC5vdXRlcldpZHRoKCksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLHRvcDp0aGlzLmVsZW1lbnQuY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuZWxlbWVudC5jc3MoImxlZnQiKX0pKSx0aGlzLmVsZW1lbnQ9dGhpcy5lbGVtZW50LnBhcmVudCgpLmRhdGEoInJlc2l6YWJsZSIsdGhpcy5lbGVtZW50LmRhdGEoInJlc2l6YWJsZSIpKSx0aGlzLmVsZW1lbnRJc1dyYXBwZXI9ITAsdGhpcy5lbGVtZW50LmNzcyh7bWFyZ2luTGVmdDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbkxlZnQiKSxtYXJnaW5Ub3A6dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSxtYXJnaW5SaWdodDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblJpZ2h0IiksbWFyZ2luQm90dG9tOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luQm90dG9tIil9KSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbkxlZnQ6MCxtYXJnaW5Ub3A6MCxtYXJnaW5SaWdodDowLG1hcmdpbkJvdHRvbTowfSksdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlPXRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygicmVzaXplIiksdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLCJub25lIiksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50cy5wdXNoKHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7cG9zaXRpb246InN0YXRpYyIsem9vbToxLGRpc3BsYXk6ImJsb2NrIn0pKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe21hcmdpbjp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpbiIpfSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSksdGhpcy5oYW5kbGVzPW4uaGFuZGxlc3x8KGUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmxlbmd0aD97bjoiLnVpLXJlc2l6YWJsZS1uIixlOiIudWktcmVzaXphYmxlLWUiLHM6Ii51aS1yZXNpemFibGUtcyIsdzoiLnVpLXJlc2l6YWJsZS13IixzZToiLnVpLXJlc2l6YWJsZS1zZSIsc3c6Ii51aS1yZXNpemFibGUtc3ciLG5lOiIudWktcmVzaXphYmxlLW5lIixudzoiLnVpLXJlc2l6YWJsZS1udyJ9OiJlLHMsc2UiKTtpZih0aGlzLmhhbmRsZXMuY29uc3RydWN0b3I9PVN0cmluZyl7dGhpcy5oYW5kbGVzPT0iYWxsIiYmKHRoaXMuaGFuZGxlcz0ibixlLHMsdyxzZSxzdyxuZSxudyIpO3ZhciByPXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpO3RoaXMuaGFuZGxlcz17fTtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKyl7dmFyIHM9ZS50cmltKHJbaV0pLG89InVpLXJlc2l6YWJsZS0iK3MsdT1lKCc8ZGl2IGNsYXNzPSJ1aS1yZXNpemFibGUtaGFuZGxlICcrbysnIj48L2Rpdj4nKTt1LmNzcyh7ekluZGV4Om4uekluZGV4fSksInNlIj09cyYmdS5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSIpLHRoaXMuaGFuZGxlc1tzXT0iLnVpLXJlc2l6YWJsZS0iK3MsdGhpcy5lbGVtZW50LmFwcGVuZCh1KX19dGhpcy5fcmVuZGVyQXhpcz1mdW5jdGlvbih0KXt0PXR8fHRoaXMuZWxlbWVudDtmb3IodmFyIG4gaW4gdGhpcy5oYW5kbGVzKXt0aGlzLmhhbmRsZXNbbl0uY29uc3RydWN0b3I9PVN0cmluZyYmKHRoaXMuaGFuZGxlc1tuXT1lKHRoaXMuaGFuZGxlc1tuXSx0aGlzLmVsZW1lbnQpLnNob3coKSk7aWYodGhpcy5lbGVtZW50SXNXcmFwcGVyJiZ0aGlzLm9yaWdpbmFsRWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvdGV4dGFyZWF8aW5wdXR8c2VsZWN0fGJ1dHRvbi9pKSl7dmFyIHI9ZSh0aGlzLmhhbmRsZXNbbl0sdGhpcy5lbGVtZW50KSxpPTA7aT0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KG4pP3Iub3V0ZXJIZWlnaHQoKTpyLm91dGVyV2lkdGgoKTt2YXIgcz1bInBhZGRpbmciLC9uZXxud3xuLy50ZXN0KG4pPyJUb3AiOi9zZXxzd3xzLy50ZXN0KG4pPyJCb3R0b20iOi9eZSQvLnRlc3Qobik/IlJpZ2h0IjoiTGVmdCJdLmpvaW4oIiIpO3QuY3NzKHMsaSksdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX1pZighZSh0aGlzLmhhbmRsZXNbbl0pLmxlbmd0aCljb250aW51ZX19LHRoaXMuX3JlbmRlckF4aXModGhpcy5lbGVtZW50KSx0aGlzLl9oYW5kbGVzPWUoIi51aS1yZXNpemFibGUtaGFuZGxlIix0aGlzLmVsZW1lbnQpLmRpc2FibGVTZWxlY3Rpb24oKSx0aGlzLl9oYW5kbGVzLm1vdXNlb3ZlcihmdW5jdGlvbigpe2lmKCF0LnJlc2l6aW5nKXtpZih0aGlzLmNsYXNzTmFtZSl2YXIgZT10aGlzLmNsYXNzTmFtZS5tYXRjaCgvdWktcmVzaXphYmxlLShzZXxzd3xuZXxud3xufGV8c3x3KS9pKTt0LmF4aXM9ZSYmZVsxXT9lWzFdOiJzZSJ9fSksbi5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLGUodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO2UodGhpcykucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLHQuX2hhbmRsZXMuc2hvdygpfSkubW91c2VsZWF2ZShmdW5jdGlvbigpe2lmKG4uZGlzYWJsZWQpcmV0dXJuO3QucmVzaXppbmd8fChlKHRoaXMpLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSx0Ll9oYW5kbGVzLmhpZGUoKSl9KSksdGhpcy5fbW91c2VJbml0KCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5fbW91c2VEZXN0cm95KCk7dmFyIHQ9ZnVuY3Rpb24odCl7ZSh0KS5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlIHVpLXJlc2l6YWJsZS1kaXNhYmxlZCB1aS1yZXNpemFibGUtcmVzaXppbmciKS5yZW1vdmVEYXRhKCJyZXNpemFibGUiKS5yZW1vdmVEYXRhKCJ1aS1yZXNpemFibGUiKS51bmJpbmQoIi5yZXNpemFibGUiKS5maW5kKCIudWktcmVzaXphYmxlLWhhbmRsZSIpLnJlbW92ZSgpfTtpZih0aGlzLmVsZW1lbnRJc1dyYXBwZXIpe3QodGhpcy5lbGVtZW50KTt2YXIgbj10aGlzLmVsZW1lbnQ7dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjpuLmNzcygicG9zaXRpb24iKSx3aWR0aDpuLm91dGVyV2lkdGgoKSxoZWlnaHQ6bi5vdXRlckhlaWdodCgpLHRvcDpuLmNzcygidG9wIiksbGVmdDpuLmNzcygibGVmdCIpfSkuaW5zZXJ0QWZ0ZXIobiksbi5yZW1vdmUoKX1yZXR1cm4gdGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiLHRoaXMub3JpZ2luYWxSZXNpemVTdHlsZSksdCh0aGlzLm9yaWdpbmFsRWxlbWVudCksdGhpc30sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgbj0hMTtmb3IodmFyIHIgaW4gdGhpcy5oYW5kbGVzKWUodGhpcy5oYW5kbGVzW3JdKVswXT09dC50YXJnZXQmJihuPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZufSxfbW91c2VTdGFydDpmdW5jdGlvbih0KXt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLmVsZW1lbnQucG9zaXRpb24oKSxzPXRoaXMuZWxlbWVudDt0aGlzLnJlc2l6aW5nPSEwLHRoaXMuZG9jdW1lbnRTY3JvbGw9e3RvcDplKGRvY3VtZW50KS5zY3JvbGxUb3AoKSxsZWZ0OmUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKX0sKHMuaXMoIi51aS1kcmFnZ2FibGUiKXx8L2Fic29sdXRlLy50ZXN0KHMuY3NzKCJwb3NpdGlvbiIpKSkmJnMuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDppLnRvcCxsZWZ0OmkubGVmdH0pLHRoaXMuX3JlbmRlclByb3h5KCk7dmFyIG89bih0aGlzLmhlbHBlci5jc3MoImxlZnQiKSksdT1uKHRoaXMuaGVscGVyLmNzcygidG9wIikpO3IuY29udGFpbm1lbnQmJihvKz1lKHIuY29udGFpbm1lbnQpLnNjcm9sbExlZnQoKXx8MCx1Kz1lKHIuY29udGFpbm1lbnQpLnNjcm9sbFRvcCgpfHwwKSx0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLnBvc2l0aW9uPXtsZWZ0Om8sdG9wOnV9LHRoaXMuc2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOnMub3V0ZXJXaWR0aCgpLGhlaWdodDpzLm91dGVySGVpZ2h0KCl9Ont3aWR0aDpzLndpZHRoKCksaGVpZ2h0OnMuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6cy5vdXRlcldpZHRoKCksaGVpZ2h0OnMub3V0ZXJIZWlnaHQoKX06e3dpZHRoOnMud2lkdGgoKSxoZWlnaHQ6cy5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0Om8sdG9wOnV9LHRoaXMuc2l6ZURpZmY9e3dpZHRoOnMub3V0ZXJXaWR0aCgpLXMud2lkdGgoKSxoZWlnaHQ6cy5vdXRlckhlaWdodCgpLXMuaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OnQucGFnZVgsdG9wOnQucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89dHlwZW9mIHIuYXNwZWN0UmF0aW89PSJudW1iZXIiP3IuYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxO3ZhciBhPWUoIi51aS1yZXNpemFibGUtIit0aGlzLmF4aXMpLmNzcygiY3Vyc29yIik7cmV0dXJuIGUoImJvZHkiKS5jc3MoImN1cnNvciIsYT09ImF1dG8iP3RoaXMuYXhpcysiLXJlc2l6ZSI6YSkscy5hZGRDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksdGhpcy5fcHJvcGFnYXRlKCJzdGFydCIsdCksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5oZWxwZXIsbj10aGlzLm9wdGlvbnMscj17fSxpPXRoaXMscz10aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbixvPXRoaXMuYXhpcyx1PWUucGFnZVgtcy5sZWZ0fHwwLGE9ZS5wYWdlWS1zLnRvcHx8MCxmPXRoaXMuX2NoYW5nZVtvXTtpZighZilyZXR1cm4hMTt2YXIgbD1mLmFwcGx5KHRoaXMsW2UsdSxhXSk7dGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXMoZS5zaGlmdEtleSk7aWYodGhpcy5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXkpbD10aGlzLl91cGRhdGVSYXRpbyhsLGUpO3JldHVybiBsPXRoaXMuX3Jlc3BlY3RTaXplKGwsZSksdGhpcy5fcHJvcGFnYXRlKCJyZXNpemUiLGUpLHQuY3NzKHt0b3A6dGhpcy5wb3NpdGlvbi50b3ArInB4IixsZWZ0OnRoaXMucG9zaXRpb24ubGVmdCsicHgiLHdpZHRoOnRoaXMuc2l6ZS53aWR0aCsicHgiLGhlaWdodDp0aGlzLnNpemUuaGVpZ2h0KyJweCJ9KSwhdGhpcy5faGVscGVyJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aCYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKSx0aGlzLl91cGRhdGVDYWNoZShsKSx0aGlzLl90cmlnZ2VyKCJyZXNpemUiLGUsdGhpcy51aSgpKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbih0KXt0aGlzLnJlc2l6aW5nPSExO3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXM7aWYodGhpcy5faGVscGVyKXt2YXIgaT10aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLHM9aS5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3QoaVswXS5ub2RlTmFtZSksbz1zJiZlLnVpLmhhc1Njcm9sbChpWzBdLCJsZWZ0Iik/MDpyLnNpemVEaWZmLmhlaWdodCx1PXM/MDpyLnNpemVEaWZmLndpZHRoLGE9e3dpZHRoOnIuaGVscGVyLndpZHRoKCktdSxoZWlnaHQ6ci5oZWxwZXIuaGVpZ2h0KCktb30sZj1wYXJzZUludChyLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApKyhyLnBvc2l0aW9uLmxlZnQtci5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGw9cGFyc2VJbnQoci5lbGVtZW50LmNzcygidG9wIiksMTApKyhyLnBvc2l0aW9uLnRvcC1yLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbDtuLmFuaW1hdGV8fHRoaXMuZWxlbWVudC5jc3MoZS5leHRlbmQoYSx7dG9wOmwsbGVmdDpmfSkpLHIuaGVscGVyLmhlaWdodChyLnNpemUuaGVpZ2h0KSxyLmhlbHBlci53aWR0aChyLnNpemUud2lkdGgpLHRoaXMuX2hlbHBlciYmIW4uYW5pbWF0ZSYmdGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemUoKX1yZXR1cm4gZSgiYm9keSIpLmNzcygiY3Vyc29yIiwiYXV0byIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktcmVzaXphYmxlLXJlc2l6aW5nIiksdGhpcy5fcHJvcGFnYXRlKCJzdG9wIix0KSx0aGlzLl9oZWxwZXImJnRoaXMuaGVscGVyLnJlbW92ZSgpLCExfSxfdXBkYXRlVmlydHVhbEJvdW5kYXJpZXM6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vcHRpb25zLG4saSxzLG8sdTt1PXttaW5XaWR0aDpyKHQubWluV2lkdGgpP3QubWluV2lkdGg6MCxtYXhXaWR0aDpyKHQubWF4V2lkdGgpP3QubWF4V2lkdGg6SW5maW5pdHksbWluSGVpZ2h0OnIodC5taW5IZWlnaHQpP3QubWluSGVpZ2h0OjAsbWF4SGVpZ2h0OnIodC5tYXhIZWlnaHQpP3QubWF4SGVpZ2h0OkluZmluaXR5fTtpZih0aGlzLl9hc3BlY3RSYXRpb3x8ZSluPXUubWluSGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8scz11Lm1pbldpZHRoL3RoaXMuYXNwZWN0UmF0aW8saT11Lm1heEhlaWdodCp0aGlzLmFzcGVjdFJhdGlvLG89dS5tYXhXaWR0aC90aGlzLmFzcGVjdFJhdGlvLG4+dS5taW5XaWR0aCYmKHUubWluV2lkdGg9bikscz51Lm1pbkhlaWdodCYmKHUubWluSGVpZ2h0PXMpLGk8dS5tYXhXaWR0aCYmKHUubWF4V2lkdGg9aSksbzx1Lm1heEhlaWdodCYmKHUubWF4SGVpZ2h0PW8pO3RoaXMuX3ZCb3VuZGFyaWVzPXV9LF91cGRhdGVDYWNoZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnM7dGhpcy5vZmZzZXQ9dGhpcy5oZWxwZXIub2Zmc2V0KCkscihlLmxlZnQpJiYodGhpcy5wb3NpdGlvbi5sZWZ0PWUubGVmdCkscihlLnRvcCkmJih0aGlzLnBvc2l0aW9uLnRvcD1lLnRvcCkscihlLmhlaWdodCkmJih0aGlzLnNpemUuaGVpZ2h0PWUuaGVpZ2h0KSxyKGUud2lkdGgpJiYodGhpcy5zaXplLndpZHRoPWUud2lkdGgpfSxfdXBkYXRlUmF0aW86ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLm9wdGlvbnMsaT10aGlzLnBvc2l0aW9uLHM9dGhpcy5zaXplLG89dGhpcy5heGlzO3JldHVybiByKGUuaGVpZ2h0KT9lLndpZHRoPWUuaGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW86cihlLndpZHRoKSYmKGUuaGVpZ2h0PWUud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksbz09InN3IiYmKGUubGVmdD1pLmxlZnQrKHMud2lkdGgtZS53aWR0aCksZS50b3A9bnVsbCksbz09Im53IiYmKGUudG9wPWkudG9wKyhzLmhlaWdodC1lLmhlaWdodCksZS5sZWZ0PWkubGVmdCsocy53aWR0aC1lLndpZHRoKSksZX0sX3Jlc3BlY3RTaXplOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcy5oZWxwZXIsaT10aGlzLl92Qm91bmRhcmllcyxzPXRoaXMuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5LG89dGhpcy5heGlzLHU9cihlLndpZHRoKSYmaS5tYXhXaWR0aCYmaS5tYXhXaWR0aDxlLndpZHRoLGE9cihlLmhlaWdodCkmJmkubWF4SGVpZ2h0JiZpLm1heEhlaWdodDxlLmhlaWdodCxmPXIoZS53aWR0aCkmJmkubWluV2lkdGgmJmkubWluV2lkdGg+ZS53aWR0aCxsPXIoZS5oZWlnaHQpJiZpLm1pbkhlaWdodCYmaS5taW5IZWlnaHQ+ZS5oZWlnaHQ7ZiYmKGUud2lkdGg9aS5taW5XaWR0aCksbCYmKGUuaGVpZ2h0PWkubWluSGVpZ2h0KSx1JiYoZS53aWR0aD1pLm1heFdpZHRoKSxhJiYoZS5oZWlnaHQ9aS5tYXhIZWlnaHQpO3ZhciBjPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGg9dGhpcy5wb3NpdGlvbi50b3ArdGhpcy5zaXplLmhlaWdodCxwPS9zd3xud3x3Ly50ZXN0KG8pLGQ9L253fG5lfG4vLnRlc3Qobyk7ZiYmcCYmKGUubGVmdD1jLWkubWluV2lkdGgpLHUmJnAmJihlLmxlZnQ9Yy1pLm1heFdpZHRoKSxsJiZkJiYoZS50b3A9aC1pLm1pbkhlaWdodCksYSYmZCYmKGUudG9wPWgtaS5tYXhIZWlnaHQpO3ZhciB2PSFlLndpZHRoJiYhZS5oZWlnaHQ7cmV0dXJuIHYmJiFlLmxlZnQmJmUudG9wP2UudG9wPW51bGw6diYmIWUudG9wJiZlLmxlZnQmJihlLmxlZnQ9bnVsbCksZX0sX3Byb3BvcnRpb25hbGx5UmVzaXplOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO2lmKCF0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLmxlbmd0aClyZXR1cm47dmFyIG49dGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudDtmb3IodmFyIHI9MDtyPHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoO3IrKyl7dmFyIGk9dGhpcy5fcHJvcG9ydGlvbmFsbHlSZXNpemVFbGVtZW50c1tyXTtpZighdGhpcy5ib3JkZXJEaWYpe3ZhciBzPVtpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSxpLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLGkuY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLGkuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0sbz1baS5jc3MoInBhZGRpbmdUb3AiKSxpLmNzcygicGFkZGluZ1JpZ2h0IiksaS5jc3MoInBhZGRpbmdCb3R0b20iKSxpLmNzcygicGFkZGluZ0xlZnQiKV07dGhpcy5ib3JkZXJEaWY9ZS5tYXAocyxmdW5jdGlvbihlLHQpe3ZhciBuPXBhcnNlSW50KGUsMTApfHwwLHI9cGFyc2VJbnQob1t0XSwxMCl8fDA7cmV0dXJuIG4rcn0pfWkuY3NzKHtoZWlnaHQ6bi5oZWlnaHQoKS10aGlzLmJvcmRlckRpZlswXS10aGlzLmJvcmRlckRpZlsyXXx8MCx3aWR0aDpuLndpZHRoKCktdGhpcy5ib3JkZXJEaWZbMV0tdGhpcy5ib3JkZXJEaWZbM118fDB9KX19LF9yZW5kZXJQcm94eTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWxlbWVudCxuPXRoaXMub3B0aW9uczt0aGlzLmVsZW1lbnRPZmZzZXQ9dC5vZmZzZXQoKTtpZih0aGlzLl9oZWxwZXIpe3RoaXMuaGVscGVyPXRoaXMuaGVscGVyfHxlKCc8ZGl2IHN0eWxlPSJvdmVyZmxvdzpoaWRkZW47Ij48L2Rpdj4nKTt2YXIgcj1lLnVpLmllNj8xOjAsaT1lLnVpLmllNj8yOi0xO3RoaXMuaGVscGVyLmFkZENsYXNzKHRoaXMuX2hlbHBlcikuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpK2ksaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpK2kscG9zaXRpb246ImFic29sdXRlIixsZWZ0OnRoaXMuZWxlbWVudE9mZnNldC5sZWZ0LXIrInB4Iix0b3A6dGhpcy5lbGVtZW50T2Zmc2V0LnRvcC1yKyJweCIsekluZGV4Oisrbi56SW5kZXh9KSx0aGlzLmhlbHBlci5hcHBlbmRUbygiYm9keSIpLmRpc2FibGVTZWxlY3Rpb24oKX1lbHNlIHRoaXMuaGVscGVyPXRoaXMuZWxlbWVudH0sX2NoYW5nZTp7ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJue3dpZHRoOnRoaXMub3JpZ2luYWxTaXplLndpZHRoK3R9fSx3OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57bGVmdDpzLmxlZnQrdCx3aWR0aDppLndpZHRoLXR9fSxuOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57dG9wOnMudG9wK24saGVpZ2h0OmkuaGVpZ2h0LW59fSxzOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm57aGVpZ2h0OnRoaXMub3JpZ2luYWxTaXplLmhlaWdodCtufX0sc2U6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbdCxuLHJdKSl9LHN3OmZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gZS5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW3QsbixyXSkpfSxuZTpmdW5jdGlvbih0LG4scil7cmV0dXJuIGUuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFt0LG4scl0pKX0sbnc6ZnVuY3Rpb24odCxuLHIpe3JldHVybiBlLmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbdCxuLHJdKSl9fSxfcHJvcGFnYXRlOmZ1bmN0aW9uKHQsbil7ZS51aS5wbHVnaW4uY2FsbCh0aGlzLHQsW24sdGhpcy51aSgpXSksdCE9InJlc2l6ZSImJnRoaXMuX3RyaWdnZXIodCxuLHRoaXMudWkoKSl9LHBsdWdpbnM6e30sdWk6ZnVuY3Rpb24oKXtyZXR1cm57b3JpZ2luYWxFbGVtZW50OnRoaXMub3JpZ2luYWxFbGVtZW50LGVsZW1lbnQ6dGhpcy5lbGVtZW50LGhlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLHNpemU6dGhpcy5zaXplLG9yaWdpbmFsU2l6ZTp0aGlzLm9yaWdpbmFsU2l6ZSxvcmlnaW5hbFBvc2l0aW9uOnRoaXMub3JpZ2luYWxQb3NpdGlvbn19fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbHNvUmVzaXplIix7c3RhcnQ6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zLHM9ZnVuY3Rpb24odCl7ZSh0KS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHQ9ZSh0aGlzKTt0LmRhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIix7d2lkdGg6cGFyc2VJbnQodC53aWR0aCgpLDEwKSxoZWlnaHQ6cGFyc2VJbnQodC5oZWlnaHQoKSwxMCksbGVmdDpwYXJzZUludCh0LmNzcygibGVmdCIpLDEwKSx0b3A6cGFyc2VJbnQodC5jc3MoInRvcCIpLDEwKX0pfSl9O3R5cGVvZiBpLmFsc29SZXNpemU9PSJvYmplY3QiJiYhaS5hbHNvUmVzaXplLnBhcmVudE5vZGU/aS5hbHNvUmVzaXplLmxlbmd0aD8oaS5hbHNvUmVzaXplPWkuYWxzb1Jlc2l6ZVswXSxzKGkuYWxzb1Jlc2l6ZSkpOmUuZWFjaChpLmFsc29SZXNpemUsZnVuY3Rpb24oZSl7cyhlKX0pOnMoaS5hbHNvUmVzaXplKX0scmVzaXplOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPXIub3JpZ2luYWxTaXplLG89ci5vcmlnaW5hbFBvc2l0aW9uLHU9e2hlaWdodDpyLnNpemUuaGVpZ2h0LXMuaGVpZ2h0fHwwLHdpZHRoOnIuc2l6ZS53aWR0aC1zLndpZHRofHwwLHRvcDpyLnBvc2l0aW9uLnRvcC1vLnRvcHx8MCxsZWZ0OnIucG9zaXRpb24ubGVmdC1vLmxlZnR8fDB9LGE9ZnVuY3Rpb24odCxyKXtlKHQpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLGk9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUtYWxzb3Jlc2l6ZSIpLHM9e30sbz1yJiZyLmxlbmd0aD9yOnQucGFyZW50cyhuLm9yaWdpbmFsRWxlbWVudFswXSkubGVuZ3RoP1sid2lkdGgiLCJoZWlnaHQiXTpbIndpZHRoIiwiaGVpZ2h0IiwidG9wIiwibGVmdCJdO2UuZWFjaChvLGZ1bmN0aW9uKGUsdCl7dmFyIG49KGlbdF18fDApKyh1W3RdfHwwKTtuJiZuPj0wJiYoc1t0XT1ufHxudWxsKX0pLHQuY3NzKHMpfSl9O3R5cGVvZiBpLmFsc29SZXNpemU9PSJvYmplY3QiJiYhaS5hbHNvUmVzaXplLm5vZGVUeXBlP2UuZWFjaChpLmFsc29SZXNpemUsZnVuY3Rpb24oZSx0KXthKGUsdCl9KTphKGkuYWxzb1Jlc2l6ZSl9LHN0b3A6ZnVuY3Rpb24odCxuKXtlKHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIil9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJhbmltYXRlIix7c3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLG89cy5sZW5ndGgmJi90ZXh0YXJlYS9pLnRlc3Qoc1swXS5ub2RlTmFtZSksdT1vJiZlLnVpLmhhc1Njcm9sbChzWzBdLCJsZWZ0Iik/MDpyLnNpemVEaWZmLmhlaWdodCxhPW8/MDpyLnNpemVEaWZmLndpZHRoLGY9e3dpZHRoOnIuc2l6ZS53aWR0aC1hLGhlaWdodDpyLnNpemUuaGVpZ2h0LXV9LGw9cGFyc2VJbnQoci5lbGVtZW50LmNzcygibGVmdCIpLDEwKSsoci5wb3NpdGlvbi5sZWZ0LXIub3JpZ2luYWxQb3NpdGlvbi5sZWZ0KXx8bnVsbCxjPXBhcnNlSW50KHIuZWxlbWVudC5jc3MoInRvcCIpLDEwKSsoci5wb3NpdGlvbi50b3Atci5vcmlnaW5hbFBvc2l0aW9uLnRvcCl8fG51bGw7ci5lbGVtZW50LmFuaW1hdGUoZS5leHRlbmQoZixjJiZsP3t0b3A6YyxsZWZ0Omx9Ont9KSx7ZHVyYXRpb246aS5hbmltYXRlRHVyYXRpb24sZWFzaW5nOmkuYW5pbWF0ZUVhc2luZyxzdGVwOmZ1bmN0aW9uKCl7dmFyIG49e3dpZHRoOnBhcnNlSW50KHIuZWxlbWVudC5jc3MoIndpZHRoIiksMTApLGhlaWdodDpwYXJzZUludChyLmVsZW1lbnQuY3NzKCJoZWlnaHQiKSwxMCksdG9wOnBhcnNlSW50KHIuZWxlbWVudC5jc3MoInRvcCIpLDEwKSxsZWZ0OnBhcnNlSW50KHIuZWxlbWVudC5jc3MoImxlZnQiKSwxMCl9O3MmJnMubGVuZ3RoJiZlKHNbMF0pLmNzcyh7d2lkdGg6bi53aWR0aCxoZWlnaHQ6bi5oZWlnaHR9KSxyLl91cGRhdGVDYWNoZShuKSxyLl9wcm9wYWdhdGUoInJlc2l6ZSIsdCl9fSl9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJjb250YWlubWVudCIse3N0YXJ0OmZ1bmN0aW9uKHQscil7dmFyIGk9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxzPWkub3B0aW9ucyxvPWkuZWxlbWVudCx1PXMuY29udGFpbm1lbnQsYT11IGluc3RhbmNlb2YgZT91LmdldCgwKTovcGFyZW50Ly50ZXN0KHUpP28ucGFyZW50KCkuZ2V0KDApOnU7aWYoIWEpcmV0dXJuO2kuY29udGFpbmVyRWxlbWVudD1lKGEpO2lmKC9kb2N1bWVudC8udGVzdCh1KXx8dT09ZG9jdW1lbnQpaS5jb250YWluZXJPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0saS5jb250YWluZXJQb3NpdGlvbj17bGVmdDowLHRvcDowfSxpLnBhcmVudERhdGE9e2VsZW1lbnQ6ZShkb2N1bWVudCksbGVmdDowLHRvcDowLHdpZHRoOmUoZG9jdW1lbnQpLndpZHRoKCksaGVpZ2h0OmUoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0fTtlbHNle3ZhciBmPWUoYSksbD1bXTtlKFsiVG9wIiwiUmlnaHQiLCJMZWZ0IiwiQm90dG9tIl0pLmVhY2goZnVuY3Rpb24oZSx0KXtsW2VdPW4oZi5jc3MoInBhZGRpbmciK3QpKX0pLGkuY29udGFpbmVyT2Zmc2V0PWYub2Zmc2V0KCksaS5jb250YWluZXJQb3NpdGlvbj1mLnBvc2l0aW9uKCksaS5jb250YWluZXJTaXplPXtoZWlnaHQ6Zi5pbm5lckhlaWdodCgpLWxbM10sd2lkdGg6Zi5pbm5lcldpZHRoKCktbFsxXX07dmFyIGM9aS5jb250YWluZXJPZmZzZXQsaD1pLmNvbnRhaW5lclNpemUuaGVpZ2h0LHA9aS5jb250YWluZXJTaXplLndpZHRoLGQ9ZS51aS5oYXNTY3JvbGwoYSwibGVmdCIpP2Euc2Nyb2xsV2lkdGg6cCx2PWUudWkuaGFzU2Nyb2xsKGEpP2Euc2Nyb2xsSGVpZ2h0Omg7aS5wYXJlbnREYXRhPXtlbGVtZW50OmEsbGVmdDpjLmxlZnQsdG9wOmMudG9wLHdpZHRoOmQsaGVpZ2h0OnZ9fX0scmVzaXplOmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPXIuY29udGFpbmVyU2l6ZSxvPXIuY29udGFpbmVyT2Zmc2V0LHU9ci5zaXplLGE9ci5wb3NpdGlvbixmPXIuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5LGw9e3RvcDowLGxlZnQ6MH0sYz1yLmNvbnRhaW5lckVsZW1lbnQ7Y1swXSE9ZG9jdW1lbnQmJi9zdGF0aWMvLnRlc3QoYy5jc3MoInBvc2l0aW9uIikpJiYobD1vKSxhLmxlZnQ8KHIuX2hlbHBlcj9vLmxlZnQ6MCkmJihyLnNpemUud2lkdGg9ci5zaXplLndpZHRoKyhyLl9oZWxwZXI/ci5wb3NpdGlvbi5sZWZ0LW8ubGVmdDpyLnBvc2l0aW9uLmxlZnQtbC5sZWZ0KSxmJiYoci5zaXplLmhlaWdodD1yLnNpemUud2lkdGgvci5hc3BlY3RSYXRpbyksci5wb3NpdGlvbi5sZWZ0PWkuaGVscGVyP28ubGVmdDowKSxhLnRvcDwoci5faGVscGVyP28udG9wOjApJiYoci5zaXplLmhlaWdodD1yLnNpemUuaGVpZ2h0KyhyLl9oZWxwZXI/ci5wb3NpdGlvbi50b3Atby50b3A6ci5wb3NpdGlvbi50b3ApLGYmJihyLnNpemUud2lkdGg9ci5zaXplLmhlaWdodCpyLmFzcGVjdFJhdGlvKSxyLnBvc2l0aW9uLnRvcD1yLl9oZWxwZXI/by50b3A6MCksci5vZmZzZXQubGVmdD1yLnBhcmVudERhdGEubGVmdCtyLnBvc2l0aW9uLmxlZnQsci5vZmZzZXQudG9wPXIucGFyZW50RGF0YS50b3Arci5wb3NpdGlvbi50b3A7dmFyIGg9TWF0aC5hYnMoKHIuX2hlbHBlcj9yLm9mZnNldC5sZWZ0LWwubGVmdDpyLm9mZnNldC5sZWZ0LWwubGVmdCkrci5zaXplRGlmZi53aWR0aCkscD1NYXRoLmFicygoci5faGVscGVyP3Iub2Zmc2V0LnRvcC1sLnRvcDpyLm9mZnNldC50b3Atby50b3ApK3Iuc2l6ZURpZmYuaGVpZ2h0KSxkPXIuY29udGFpbmVyRWxlbWVudC5nZXQoMCk9PXIuZWxlbWVudC5wYXJlbnQoKS5nZXQoMCksdj0vcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3Qoci5jb250YWluZXJFbGVtZW50LmNzcygicG9zaXRpb24iKSk7ZCYmdiYmKGgtPXIucGFyZW50RGF0YS5sZWZ0KSxoK3Iuc2l6ZS53aWR0aD49ci5wYXJlbnREYXRhLndpZHRoJiYoci5zaXplLndpZHRoPXIucGFyZW50RGF0YS53aWR0aC1oLGYmJihyLnNpemUuaGVpZ2h0PXIuc2l6ZS53aWR0aC9yLmFzcGVjdFJhdGlvKSkscCtyLnNpemUuaGVpZ2h0Pj1yLnBhcmVudERhdGEuaGVpZ2h0JiYoci5zaXplLmhlaWdodD1yLnBhcmVudERhdGEuaGVpZ2h0LXAsZiYmKHIuc2l6ZS53aWR0aD1yLnNpemUuaGVpZ2h0KnIuYXNwZWN0UmF0aW8pKX0sc3RvcDpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLnBvc2l0aW9uLG89ci5jb250YWluZXJPZmZzZXQsdT1yLmNvbnRhaW5lclBvc2l0aW9uLGE9ci5jb250YWluZXJFbGVtZW50LGY9ZShyLmhlbHBlciksbD1mLm9mZnNldCgpLGM9Zi5vdXRlcldpZHRoKCktci5zaXplRGlmZi53aWR0aCxoPWYub3V0ZXJIZWlnaHQoKS1yLnNpemVEaWZmLmhlaWdodDtyLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9yZWxhdGl2ZS8udGVzdChhLmNzcygicG9zaXRpb24iKSkmJmUodGhpcykuY3NzKHtsZWZ0OmwubGVmdC11LmxlZnQtby5sZWZ0LHdpZHRoOmMsaGVpZ2h0Omh9KSxyLl9oZWxwZXImJiFpLmFuaW1hdGUmJi9zdGF0aWMvLnRlc3QoYS5jc3MoInBvc2l0aW9uIikpJiZlKHRoaXMpLmNzcyh7bGVmdDpsLmxlZnQtdS5sZWZ0LW8ubGVmdCx3aWR0aDpjLGhlaWdodDpofSl9fSksZS51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJnaG9zdCIse3N0YXJ0OmZ1bmN0aW9uKHQsbil7dmFyIHI9ZSh0aGlzKS5kYXRhKCJyZXNpemFibGUiKSxpPXIub3B0aW9ucyxzPXIuc2l6ZTtyLmdob3N0PXIub3JpZ2luYWxFbGVtZW50LmNsb25lKCksci5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6ImJsb2NrIixwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpzLmhlaWdodCx3aWR0aDpzLndpZHRoLG1hcmdpbjowLGxlZnQ6MCx0b3A6MH0pLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtZ2hvc3QiKS5hZGRDbGFzcyh0eXBlb2YgaS5naG9zdD09InN0cmluZyI/aS5naG9zdDoiIiksci5naG9zdC5hcHBlbmRUbyhyLmhlbHBlcil9LHJlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnM7ci5naG9zdCYmci5naG9zdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OnIuc2l6ZS5oZWlnaHQsd2lkdGg6ci5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24odCxuKXt2YXIgcj1lKHRoaXMpLmRhdGEoInJlc2l6YWJsZSIpLGk9ci5vcHRpb25zO3IuZ2hvc3QmJnIuaGVscGVyJiZyLmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQoci5naG9zdC5nZXQoMCkpfX0pLGUudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ3JpZCIse3Jlc2l6ZTpmdW5jdGlvbih0LG4pe3ZhciByPWUodGhpcykuZGF0YSgicmVzaXphYmxlIiksaT1yLm9wdGlvbnMscz1yLnNpemUsbz1yLm9yaWdpbmFsU2l6ZSx1PXIub3JpZ2luYWxQb3NpdGlvbixhPXIuYXhpcyxmPWkuX2FzcGVjdFJhdGlvfHx0LnNoaWZ0S2V5O2kuZ3JpZD10eXBlb2YgaS5ncmlkPT0ibnVtYmVyIj9baS5ncmlkLGkuZ3JpZF06aS5ncmlkO3ZhciBsPU1hdGgucm91bmQoKHMud2lkdGgtby53aWR0aCkvKGkuZ3JpZFswXXx8MSkpKihpLmdyaWRbMF18fDEpLGM9TWF0aC5yb3VuZCgocy5oZWlnaHQtby5oZWlnaHQpLyhpLmdyaWRbMV18fDEpKSooaS5ncmlkWzFdfHwxKTsvXihzZXxzfGUpJC8udGVzdChhKT8oci5zaXplLndpZHRoPW8ud2lkdGgrbCxyLnNpemUuaGVpZ2h0PW8uaGVpZ2h0K2MpOi9eKG5lKSQvLnRlc3QoYSk/KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjLHIucG9zaXRpb24udG9wPXUudG9wLWMpOi9eKHN3KSQvLnRlc3QoYSk/KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjLHIucG9zaXRpb24ubGVmdD11LmxlZnQtbCk6KHIuc2l6ZS53aWR0aD1vLndpZHRoK2wsci5zaXplLmhlaWdodD1vLmhlaWdodCtjLHIucG9zaXRpb24udG9wPXUudG9wLWMsci5wb3NpdGlvbi5sZWZ0PXUubGVmdC1sKX19KTt2YXIgbj1mdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VJbnQoZSwxMCl8fDB9LHI9ZnVuY3Rpb24oZSl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KGUsMTApKX19KShqUXVlcnkpOyhmdW5jdGlvbihlLHQpe2Uud2lkZ2V0KCJ1aS5zZWxlY3RhYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMiIsb3B0aW9uczp7YXBwZW5kVG86ImJvZHkiLGF1dG9SZWZyZXNoOiEwLGRpc3RhbmNlOjAsZmlsdGVyOiIqIix0b2xlcmFuY2U6InRvdWNoIn0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RhYmxlIiksdGhpcy5kcmFnZ2VkPSExO3ZhciBuO3RoaXMucmVmcmVzaD1mdW5jdGlvbigpe249ZSh0Lm9wdGlvbnMuZmlsdGVyLHQuZWxlbWVudFswXSksbi5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSxuLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLG49dC5vZmZzZXQoKTtlLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OnQsbGVmdDpuLmxlZnQsdG9wOm4udG9wLHJpZ2h0Om4ubGVmdCt0Lm91dGVyV2lkdGgoKSxib3R0b206bi50b3ArdC5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6dC5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSxzZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktc2VsZWN0aW5nIiksdW5zZWxlY3Rpbmc6dC5oYXNDbGFzcygidWktdW5zZWxlY3RpbmciKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzPW4uYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksdGhpcy5fbW91c2VJbml0KCksdGhpcy5oZWxwZXI9ZSgiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PiIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0YWJsZSB1aS1zZWxlY3RhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dGhpcy5vcG9zPVt0LnBhZ2VYLHQucGFnZVldO2lmKHRoaXMub3B0aW9ucy5kaXNhYmxlZClyZXR1cm47dmFyIHI9dGhpcy5vcHRpb25zO3RoaXMuc2VsZWN0ZWVzPWUoci5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsdCksZShyLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDp0LmNsaWVudFgsdG9wOnQuY2xpZW50WSx3aWR0aDowLGhlaWdodDowfSksci5hdXRvUmVmcmVzaCYmdGhpcy5yZWZyZXNoKCksdGhpcy5zZWxlY3RlZXMuZmlsdGVyKCIudWktc2VsZWN0ZWQiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3Iuc3RhcnRzZWxlY3RlZD0hMCwhdC5tZXRhS2V5JiYhdC5jdHJsS2V5JiYoci4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxyLnNlbGVjdGVkPSExLHIuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksci51bnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6ci5lbGVtZW50fSkpfSksZSh0LnRhcmdldCkucGFyZW50cygpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO2lmKHIpe3ZhciBpPSF0Lm1ldGFLZXkmJiF0LmN0cmxLZXl8fCFyLiRlbGVtZW50Lmhhc0NsYXNzKCJ1aS1zZWxlY3RlZCIpO3JldHVybiByLiRlbGVtZW50LnJlbW92ZUNsYXNzKGk/InVpLXVuc2VsZWN0aW5nIjoidWktc2VsZWN0ZWQiKS5hZGRDbGFzcyhpPyJ1aS1zZWxlY3RpbmciOiJ1aS11bnNlbGVjdGluZyIpLHIudW5zZWxlY3Rpbmc9IWksci5zZWxlY3Rpbmc9aSxyLnNlbGVjdGVkPWksaT9uLl90cmlnZ2VyKCJzZWxlY3RpbmciLHQse3NlbGVjdGluZzpyLmVsZW1lbnR9KTpuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6ci5lbGVtZW50fSksITF9fSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7dmFyIG49dGhpczt0aGlzLmRyYWdnZWQ9ITA7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkKXJldHVybjt2YXIgcj10aGlzLm9wdGlvbnMsaT10aGlzLm9wb3NbMF0scz10aGlzLm9wb3NbMV0sbz10LnBhZ2VYLHU9dC5wYWdlWTtpZihpPm8pe3ZhciBhPW87bz1pLGk9YX1pZihzPnUpe3ZhciBhPXU7dT1zLHM9YX1yZXR1cm4gdGhpcy5oZWxwZXIuY3NzKHtsZWZ0OmksdG9wOnMsd2lkdGg6by1pLGhlaWdodDp1LXN9KSx0aGlzLnNlbGVjdGVlcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGE9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO2lmKCFhfHxhLmVsZW1lbnQ9PW4uZWxlbWVudFswXSlyZXR1cm47dmFyIGY9ITE7ci50b2xlcmFuY2U9PSJ0b3VjaCI/Zj0hKGEubGVmdD5vfHxhLnJpZ2h0PGl8fGEudG9wPnV8fGEuYm90dG9tPHMpOnIudG9sZXJhbmNlPT0iZml0IiYmKGY9YS5sZWZ0PmkmJmEucmlnaHQ8byYmYS50b3A+cyYmYS5ib3R0b208dSksZj8oYS5zZWxlY3RlZCYmKGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksYS5zZWxlY3RlZD0hMSksYS51bnNlbGVjdGluZyYmKGEuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksYS51bnNlbGVjdGluZz0hMSksYS5zZWxlY3Rpbmd8fChhLiRlbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RpbmciKSxhLnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKCJzZWxlY3RpbmciLHQse3NlbGVjdGluZzphLmVsZW1lbnR9KSkpOihhLnNlbGVjdGluZyYmKCh0Lm1ldGFLZXl8fHQuY3RybEtleSkmJmEuc3RhcnRzZWxlY3RlZD8oYS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksYS5zZWxlY3Rpbmc9ITEsYS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxhLnNlbGVjdGVkPSEwKTooYS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksYS5zZWxlY3Rpbmc9ITEsYS5zdGFydHNlbGVjdGVkJiYoYS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxhLnVuc2VsZWN0aW5nPSEwKSxuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6YS5lbGVtZW50fSkpKSxhLnNlbGVjdGVkJiYhdC5tZXRhS2V5JiYhdC5jdHJsS2V5JiYhYS5zdGFydHNlbGVjdGVkJiYoYS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxhLnNlbGVjdGVkPSExLGEuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksYS51bnNlbGVjdGluZz0hMCxuLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsdCx7dW5zZWxlY3Rpbmc6YS5lbGVtZW50fSkpKX0pLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXM7dGhpcy5kcmFnZ2VkPSExO3ZhciByPXRoaXMub3B0aW9ucztyZXR1cm4gZSgiLnVpLXVuc2VsZWN0aW5nIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgcj1lLmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7ci4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktdW5zZWxlY3RpbmciKSxyLnVuc2VsZWN0aW5nPSExLHIuc3RhcnRzZWxlY3RlZD0hMSxuLl90cmlnZ2VyKCJ1bnNlbGVjdGVkIix0LHt1bnNlbGVjdGVkOnIuZWxlbWVudH0pfSksZSgiLnVpLXNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHI9ZS5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3IuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLHIuc2VsZWN0aW5nPSExLHIuc2VsZWN0ZWQ9ITAsci5zdGFydHNlbGVjdGVkPSEwLG4uX3RyaWdnZXIoInNlbGVjdGVkIix0LHtzZWxlY3RlZDpyLmVsZW1lbnR9KX0pLHRoaXMuX3RyaWdnZXIoInN0b3AiLHQpLHRoaXMuaGVscGVyLnJlbW92ZSgpLCExfX0pfSkoalF1ZXJ5KTsoZnVuY3Rpb24oZSx0KXt2YXIgbj01O2Uud2lkZ2V0KCJ1aS5zbGlkZXIiLGUudWkubW91c2Use3ZlcnNpb246IjEuOS4yIix3aWRnZXRFdmVudFByZWZpeDoic2xpZGUiLG9wdGlvbnM6e2FuaW1hdGU6ITEsZGlzdGFuY2U6MCxtYXg6MTAwLG1pbjowLG9yaWVudGF0aW9uOiJob3Jpem9udGFsIixyYW5nZTohMSxzdGVwOjEsdmFsdWU6MCx2YWx1ZXM6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciB0LHIsaT10aGlzLm9wdGlvbnMscz10aGlzLmVsZW1lbnQuZmluZCgiLnVpLXNsaWRlci1oYW5kbGUiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiksbz0iPGEgY2xhc3M9J3VpLXNsaWRlci1oYW5kbGUgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsJyBocmVmPScjJz48L2E+Iix1PVtdO3RoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci0iK3RoaXMub3JpZW50YXRpb24rIiB1aS13aWRnZXQiKyIgdWktd2lkZ2V0LWNvbnRlbnQiKyIgdWktY29ybmVyLWFsbCIrKGkuZGlzYWJsZWQ/IiB1aS1zbGlkZXItZGlzYWJsZWQgdWktZGlzYWJsZWQiOiIiKSksdGhpcy5yYW5nZT1lKFtdKSxpLnJhbmdlJiYoaS5yYW5nZT09PSEwJiYoaS52YWx1ZXN8fChpLnZhbHVlcz1bdGhpcy5fdmFsdWVNaW4oKSx0aGlzLl92YWx1ZU1pbigpXSksaS52YWx1ZXMubGVuZ3RoJiZpLnZhbHVlcy5sZW5ndGghPT0yJiYoaS52YWx1ZXM9W2kudmFsdWVzWzBdLGkudmFsdWVzWzBdXSkpLHRoaXMucmFuZ2U9ZSgiPGRpdj48L2Rpdj4iKS5hcHBlbmRUbyh0aGlzLmVsZW1lbnQpLmFkZENsYXNzKCJ1aS1zbGlkZXItcmFuZ2UgdWktd2lkZ2V0LWhlYWRlciIrKGkucmFuZ2U9PT0ibWluInx8aS5yYW5nZT09PSJtYXgiPyIgdWktc2xpZGVyLXJhbmdlLSIraS5yYW5nZToiIikpKSxyPWkudmFsdWVzJiZpLnZhbHVlcy5sZW5ndGh8fDE7Zm9yKHQ9cy5sZW5ndGg7dDxyO3QrKyl1LnB1c2gobyk7dGhpcy5oYW5kbGVzPXMuYWRkKGUodS5qb2luKCIiKSkuYXBwZW5kVG8odGhpcy5lbGVtZW50KSksdGhpcy5oYW5kbGU9dGhpcy5oYW5kbGVzLmVxKDApLHRoaXMuaGFuZGxlcy5hZGQodGhpcy5yYW5nZSkuZmlsdGVyKCJhIikuY2xpY2soZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpfSkubW91c2VlbnRlcihmdW5jdGlvbigpe2kuZGlzYWJsZWR8fGUodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9KS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCl7ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKX0pLmZvY3VzKGZ1bmN0aW9uKCl7aS5kaXNhYmxlZD9lKHRoaXMpLmJsdXIoKTooZSgiLnVpLXNsaWRlciAudWktc3RhdGUtZm9jdXMiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKSxlKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpKX0pLmJsdXIoZnVuY3Rpb24oKXtlKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSksdGhpcy5oYW5kbGVzLmVhY2goZnVuY3Rpb24odCl7ZSh0aGlzKS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4Iix0KX0pLHRoaXMuX29uKHRoaXMuaGFuZGxlcyx7a2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgcixpLHMsbyx1PWUodC50YXJnZXQpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiKTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5IT01FOmNhc2UgZS51aS5rZXlDb2RlLkVORDpjYXNlIGUudWkua2V5Q29kZS5QQUdFX1VQOmNhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjpjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5SSUdIVDpjYXNlIGUudWkua2V5Q29kZS5ET1dOOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6dC5wcmV2ZW50RGVmYXVsdCgpO2lmKCF0aGlzLl9rZXlTbGlkaW5nKXt0aGlzLl9rZXlTbGlkaW5nPSEwLGUodC50YXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSxyPXRoaXMuX3N0YXJ0KHQsdSk7aWYocj09PSExKXJldHVybn19bz10aGlzLm9wdGlvbnMuc3RlcCx0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aD9pPXM9dGhpcy52YWx1ZXModSk6aT1zPXRoaXMudmFsdWUoKTtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5IT01FOnM9dGhpcy5fdmFsdWVNaW4oKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5FTkQ6cz10aGlzLl92YWx1ZU1heCgpO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfVVA6cz10aGlzLl90cmltQWxpZ25WYWx1ZShpKyh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL24pO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLlBBR0VfRE9XTjpzPXRoaXMuX3RyaW1BbGlnblZhbHVlKGktKHRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSkvbik7YnJlYWs7Y2FzZSBlLnVpLmtleUNvZGUuVVA6Y2FzZSBlLnVpLmtleUNvZGUuUklHSFQ6aWYoaT09PXRoaXMuX3ZhbHVlTWF4KCkpcmV0dXJuO3M9dGhpcy5fdHJpbUFsaWduVmFsdWUoaStvKTticmVhaztjYXNlIGUudWkua2V5Q29kZS5ET1dOOmNhc2UgZS51aS5rZXlDb2RlLkxFRlQ6aWYoaT09PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuO3M9dGhpcy5fdHJpbUFsaWduVmFsdWUoaS1vKX10aGlzLl9zbGlkZSh0LHUscyl9LGtleXVwOmZ1bmN0aW9uKHQpe3ZhciBuPWUodC50YXJnZXQpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiKTt0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9zdG9wKHQsbiksdGhpcy5fY2hhbmdlKHQsbiksZSh0LnRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpKX19KSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmUoKSx0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCB1aS1zbGlkZXItZGlzYWJsZWQgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKSx0aGlzLl9tb3VzZURlc3Ryb3koKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0KXt2YXIgbixyLGkscyxvLHUsYSxmLGw9dGhpcyxjPXRoaXMub3B0aW9ucztyZXR1cm4gYy5kaXNhYmxlZD8hMToodGhpcy5lbGVtZW50U2l6ZT17d2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCl9LHRoaXMuZWxlbWVudE9mZnNldD10aGlzLmVsZW1lbnQub2Zmc2V0KCksbj17eDp0LnBhZ2VYLHk6dC5wYWdlWX0scj10aGlzLl9ub3JtVmFsdWVGcm9tTW91c2UobiksaT10aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkrMSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbih0KXt2YXIgbj1NYXRoLmFicyhyLWwudmFsdWVzKHQpKTtpPm4mJihpPW4scz1lKHRoaXMpLG89dCl9KSxjLnJhbmdlPT09ITAmJnRoaXMudmFsdWVzKDEpPT09Yy5taW4mJihvKz0xLHM9ZSh0aGlzLmhhbmRsZXNbb10pKSx1PXRoaXMuX3N0YXJ0KHQsbyksdT09PSExPyExOih0aGlzLl9tb3VzZVNsaWRpbmc9ITAsdGhpcy5faGFuZGxlSW5kZXg9byxzLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5mb2N1cygpLGE9cy5vZmZzZXQoKSxmPSFlKHQudGFyZ2V0KS5wYXJlbnRzKCkuYW5kU2VsZigpLmlzKCIudWktc2xpZGVyLWhhbmRsZSIpLHRoaXMuX2NsaWNrT2Zmc2V0PWY/e2xlZnQ6MCx0b3A6MH06e2xlZnQ6dC5wYWdlWC1hLmxlZnQtcy53aWR0aCgpLzIsdG9wOnQucGFnZVktYS50b3Atcy5oZWlnaHQoKS8yLShwYXJzZUludChzLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLShwYXJzZUludChzLmNzcygiYm9yZGVyQm90dG9tV2lkdGgiKSwxMCl8fDApKyhwYXJzZUludChzLmNzcygibWFyZ2luVG9wIiksMTApfHwwKX0sdGhpcy5oYW5kbGVzLmhhc0NsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpfHx0aGlzLl9zbGlkZSh0LG8sciksdGhpcy5fYW5pbWF0ZU9mZj0hMCwhMCkpfSxfbW91c2VTdGFydDpmdW5jdGlvbigpe3JldHVybiEwfSxfbW91c2VEcmFnOmZ1bmN0aW9uKGUpe3ZhciB0PXt4OmUucGFnZVgseTplLnBhZ2VZfSxuPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZSh0KTtyZXR1cm4gdGhpcy5fc2xpZGUoZSx0aGlzLl9oYW5kbGVJbmRleCxuKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5oYW5kbGVzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx0aGlzLl9tb3VzZVNsaWRpbmc9ITEsdGhpcy5fc3RvcChlLHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9jaGFuZ2UoZSx0aGlzLl9oYW5kbGVJbmRleCksdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9jbGlja09mZnNldD1udWxsLHRoaXMuX2FuaW1hdGVPZmY9ITEsITF9LF9kZXRlY3RPcmllbnRhdGlvbjpmdW5jdGlvbigpe3RoaXMub3JpZW50YXRpb249dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uPT09InZlcnRpY2FsIj8idmVydGljYWwiOiJob3Jpem9udGFsIn0sX25vcm1WYWx1ZUZyb21Nb3VzZTpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxzO3JldHVybiB0aGlzLm9yaWVudGF0aW9uPT09Imhvcml6b250YWwiPyh0PXRoaXMuZWxlbWVudFNpemUud2lkdGgsbj1lLngtdGhpcy5lbGVtZW50T2Zmc2V0LmxlZnQtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LmxlZnQ6MCkpOih0PXRoaXMuZWxlbWVudFNpemUuaGVpZ2h0LG49ZS55LXRoaXMuZWxlbWVudE9mZnNldC50b3AtKHRoaXMuX2NsaWNrT2Zmc2V0P3RoaXMuX2NsaWNrT2Zmc2V0LnRvcDowKSkscj1uL3Qscj4xJiYocj0xKSxyPDAmJihyPTApLHRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiYocj0xLXIpLGk9dGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpLHM9dGhpcy5fdmFsdWVNaW4oKStyKmksdGhpcy5fdHJpbUFsaWduVmFsdWUocyl9LF9zdGFydDpmdW5jdGlvbihlLHQpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07cmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSxuKX0sX3NsaWRlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcixpLHM7dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/KHI9dGhpcy52YWx1ZXModD8wOjEpLHRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoPT09MiYmdGhpcy5vcHRpb25zLnJhbmdlPT09ITAmJih0PT09MCYmbj5yfHx0PT09MSYmbjxyKSYmKG49ciksbiE9PXRoaXMudmFsdWVzKHQpJiYoaT10aGlzLnZhbHVlcygpLGlbdF09bixzPXRoaXMuX3RyaWdnZXIoInNsaWRlIixlLHtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOm4sdmFsdWVzOml9KSxyPXRoaXMudmFsdWVzKHQ/MDoxKSxzIT09ITEmJnRoaXMudmFsdWVzKHQsbiwhMCkpKTpuIT09dGhpcy52YWx1ZSgpJiYocz10aGlzLl90cmlnZ2VyKCJzbGlkZSIsZSx7aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTpufSkscyE9PSExJiZ0aGlzLnZhbHVlKG4pKX0sX3N0b3A6ZnVuY3Rpb24oZSx0KXt2YXIgbj17aGFuZGxlOnRoaXMuaGFuZGxlc1t0XSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYobi52YWx1ZT10aGlzLnZhbHVlcyh0KSxuLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl90cmlnZ2VyKCJzdG9wIixlLG4pfSxfY2hhbmdlOmZ1bmN0aW9uKGUsdCl7aWYoIXRoaXMuX2tleVNsaWRpbmcmJiF0aGlzLl9tb3VzZVNsaWRpbmcpe3ZhciBuPXtoYW5kbGU6dGhpcy5oYW5kbGVzW3RdLHZhbHVlOnRoaXMudmFsdWUoKX07dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJihuLnZhbHVlPXRoaXMudmFsdWVzKHQpLG4udmFsdWVzPXRoaXMudmFsdWVzKCkpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsZSxuKX19LHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGFyZ3VtZW50cy5sZW5ndGgpe3RoaXMub3B0aW9ucy52YWx1ZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKTtyZXR1cm59cmV0dXJuIHRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbih0LG4pe3ZhciByLGkscztpZihhcmd1bWVudHMubGVuZ3RoPjEpe3RoaXMub3B0aW9ucy52YWx1ZXNbdF09dGhpcy5fdHJpbUFsaWduVmFsdWUobiksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsdCk7cmV0dXJufWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl92YWx1ZXMoKTtpZighZS5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuX3ZhbHVlcyh0KTp0aGlzLnZhbHVlKCk7cj10aGlzLm9wdGlvbnMudmFsdWVzLGk9YXJndW1lbnRzWzBdO2ZvcihzPTA7czxyLmxlbmd0aDtzKz0xKXJbc109dGhpcy5fdHJpbUFsaWduVmFsdWUoaVtzXSksdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt2YXIgcixpPTA7ZS5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYoaT10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksZS5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3N3aXRjaCh0KXtjYXNlImRpc2FibGVkIjpuPyh0aGlzLmhhbmRsZXMuZmlsdGVyKCIudWktc3RhdGUtZm9jdXMiKS5ibHVyKCksdGhpcy5oYW5kbGVzLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLHRoaXMuaGFuZGxlcy5wcm9wKCJkaXNhYmxlZCIsITApLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZGlzYWJsZWQiKSk6KHRoaXMuaGFuZGxlcy5wcm9wKCJkaXNhYmxlZCIsITEpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktZGlzYWJsZWQiKSk7YnJlYWs7Y2FzZSJvcmllbnRhdGlvbiI6dGhpcy5fZGV0ZWN0T3JpZW50YXRpb24oKSx0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCIpLmFkZENsYXNzKCJ1aS1zbGlkZXItIit0aGlzLm9yaWVudGF0aW9uKSx0aGlzLl9yZWZyZXNoVmFsdWUoKTticmVhaztjYXNlInZhbHVlIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2hWYWx1ZSgpLHRoaXMuX2NoYW5nZShudWxsLDApLHRoaXMuX2FuaW1hdGVPZmY9ITE7YnJlYWs7Y2FzZSJ2YWx1ZXMiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCk7Zm9yKHI9MDtyPGk7cis9MSl0aGlzLl9jaGFuZ2UobnVsbCxyKTt0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UibWluIjpjYXNlIm1heCI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9hbmltYXRlT2ZmPSExfX0sX3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLnZhbHVlO3JldHVybiBlPXRoaXMuX3RyaW1BbGlnblZhbHVlKGUpLGV9LF92YWx1ZXM6ZnVuY3Rpb24oZSl7dmFyIHQsbixyO2lmKGFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQ9dGhpcy5vcHRpb25zLnZhbHVlc1tlXSx0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpLHQ7bj10aGlzLm9wdGlvbnMudmFsdWVzLnNsaWNlKCk7Zm9yKHI9MDtyPG4ubGVuZ3RoO3IrPTEpbltyXT10aGlzLl90cmltQWxpZ25WYWx1ZShuW3JdKTtyZXR1cm4gbn0sX3RyaW1BbGlnblZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU8PXRoaXMuX3ZhbHVlTWluKCkpcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7aWYoZT49dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTt2YXIgdD10aGlzLm9wdGlvbnMuc3RlcD4wP3RoaXMub3B0aW9ucy5zdGVwOjEsbj0oZS10aGlzLl92YWx1ZU1pbigpKSV0LHI9ZS1uO3JldHVybiBNYXRoLmFicyhuKSoyPj10JiYocis9bj4wP3Q6LXQpLHBhcnNlRmxvYXQoci50b0ZpeGVkKDUpKX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWF4fSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQsbixyLGkscyxvPXRoaXMub3B0aW9ucy5yYW5nZSx1PXRoaXMub3B0aW9ucyxhPXRoaXMsZj10aGlzLl9hbmltYXRlT2ZmPyExOnUuYW5pbWF0ZSxsPXt9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHIpe249KGEudmFsdWVzKHIpLWEuX3ZhbHVlTWluKCkpLyhhLl92YWx1ZU1heCgpLWEuX3ZhbHVlTWluKCkpKjEwMCxsW2Eub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCI/ImxlZnQiOiJib3R0b20iXT1uKyIlIixlKHRoaXMpLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0obCx1LmFuaW1hdGUpLGEub3B0aW9ucy5yYW5nZT09PSEwJiYoYS5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ocj09PTAmJmEucmFuZ2Uuc3RvcCgxLDEpW2Y/ImFuaW1hdGUiOiJjc3MiXSh7bGVmdDpuKyIlIn0sdS5hbmltYXRlKSxyPT09MSYmYS5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe3dpZHRoOm4tdCsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjp1LmFuaW1hdGV9KSk6KHI9PT0wJiZhLnJhbmdlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0oe2JvdHRvbTpuKyIlIn0sdS5hbmltYXRlKSxyPT09MSYmYS5yYW5nZVtmPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDpuLXQrIiUifSx7cXVldWU6ITEsZHVyYXRpb246dS5hbmltYXRlfSkpKSx0PW59KToocj10aGlzLnZhbHVlKCksaT10aGlzLl92YWx1ZU1pbigpLHM9dGhpcy5fdmFsdWVNYXgoKSxuPXMhPT1pPyhyLWkpLyhzLWkpKjEwMDowLGxbdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIj8ibGVmdCI6ImJvdHRvbSJdPW4rIiUiLHRoaXMuaGFuZGxlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0obCx1LmFuaW1hdGUpLG89PT0ibWluIiYmdGhpcy5vcmllbnRhdGlvbj09PSJob3Jpem9udGFsIiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbZj8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDpuKyIlIn0sdS5hbmltYXRlKSxvPT09Im1heCImJnRoaXMub3JpZW50YXRpb249PT0iaG9yaXpvbnRhbCImJnRoaXMucmFuZ2VbZj8iYW5pbWF0ZSI6ImNzcyJdKHt3aWR0aDoxMDAtbisiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjp1LmFuaW1hdGV9KSxvPT09Im1pbiImJnRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiZ0aGlzLnJhbmdlLnN0b3AoMSwxKVtmPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDpuKyIlIn0sdS5hbmltYXRlKSxvPT09Im1heCImJnRoaXMub3JpZW50YXRpb249PT0idmVydGljYWwiJiZ0aGlzLnJhbmdlW2Y/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OjEwMC1uKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnUuYW5pbWF0ZX0pKX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZS53aWRnZXQoInVpLnNvcnRhYmxlIixlLnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjkuMiIsd2lkZ2V0RXZlbnRQcmVmaXg6InNvcnQiLHJlYWR5OiExLG9wdGlvbnM6e2FwcGVuZFRvOiJwYXJlbnQiLGF4aXM6ITEsY29ubmVjdFdpdGg6ITEsY29udGFpbm1lbnQ6ITEsY3Vyc29yOiJhdXRvIixjdXJzb3JBdDohMSxkcm9wT25FbXB0eTohMCxmb3JjZVBsYWNlaG9sZGVyU2l6ZTohMSxmb3JjZUhlbHBlclNpemU6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaXRlbXM6Ij4gKiIsb3BhY2l0eTohMSxwbGFjZWhvbGRlcjohMSxyZXZlcnQ6ITEsc2Nyb2xsOiEwLHNjcm9sbFNlbnNpdGl2aXR5OjIwLHNjcm9sbFNwZWVkOjIwLHNjb3BlOiJkZWZhdWx0Iix0b2xlcmFuY2U6ImludGVyc2VjdCIsekluZGV4OjFlM30sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLmNvbnRhaW5lckNhY2hlPXt9LHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc29ydGFibGUiKSx0aGlzLnJlZnJlc2goKSx0aGlzLmZsb2F0aW5nPXRoaXMuaXRlbXMubGVuZ3RoP2UuYXhpcz09PSJ4Inx8L2xlZnR8cmlnaHQvLnRlc3QodGhpcy5pdGVtc1swXS5pdGVtLmNzcygiZmxvYXQiKSl8fC9pbmxpbmV8dGFibGUtY2VsbC8udGVzdCh0aGlzLml0ZW1zWzBdLml0ZW0uY3NzKCJkaXNwbGF5IikpOiExLHRoaXMub2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSx0aGlzLl9tb3VzZUluaXQoKSx0aGlzLnJlYWR5PSEwfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc29ydGFibGUgdWktc29ydGFibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZURlc3Ryb3koKTtmb3IodmFyIGU9dGhpcy5pdGVtcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLml0ZW1zW2VdLml0ZW0ucmVtb3ZlRGF0YSh0aGlzLndpZGdldE5hbWUrIi1pdGVtIik7cmV0dXJuIHRoaXN9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxuKXt0PT09ImRpc2FibGVkIj8odGhpcy5vcHRpb25zW3RdPW4sdGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcygidWktc29ydGFibGUtZGlzYWJsZWQiLCEhbikpOmUuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX21vdXNlQ2FwdHVyZTpmdW5jdGlvbih0LG4pe3ZhciByPXRoaXM7aWYodGhpcy5yZXZlcnRpbmcpcmV0dXJuITE7aWYodGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLm9wdGlvbnMudHlwZT09InN0YXRpYyIpcmV0dXJuITE7dGhpcy5fcmVmcmVzaEl0ZW1zKHQpO3ZhciBpPW51bGwscz1lKHQudGFyZ2V0KS5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe2lmKGUuZGF0YSh0aGlzLHIud2lkZ2V0TmFtZSsiLWl0ZW0iKT09cilyZXR1cm4gaT1lKHRoaXMpLCExfSk7ZS5kYXRhKHQudGFyZ2V0LHIud2lkZ2V0TmFtZSsiLWl0ZW0iKT09ciYmKGk9ZSh0LnRhcmdldCkpO2lmKCFpKXJldHVybiExO2lmKHRoaXMub3B0aW9ucy5oYW5kbGUmJiFuKXt2YXIgbz0hMTtlKHRoaXMub3B0aW9ucy5oYW5kbGUsaSkuZmluZCgiKiIpLmFuZFNlbGYoKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09dC50YXJnZXQmJihvPSEwKX0pO2lmKCFvKXJldHVybiExfXJldHVybiB0aGlzLmN1cnJlbnRJdGVtPWksdGhpcy5fcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXMoKSwhMH0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXMub3B0aW9uczt0aGlzLmN1cnJlbnRDb250YWluZXI9dGhpcyx0aGlzLnJlZnJlc2hQb3NpdGlvbnMoKSx0aGlzLmhlbHBlcj10aGlzLl9jcmVhdGVIZWxwZXIodCksdGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLHRoaXMuX2NhY2hlTWFyZ2lucygpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpLHRoaXMub2Zmc2V0PXRoaXMuY3VycmVudEl0ZW0ub2Zmc2V0KCksdGhpcy5vZmZzZXQ9e3RvcDp0aGlzLm9mZnNldC50b3AtdGhpcy5tYXJnaW5zLnRvcCxsZWZ0OnRoaXMub2Zmc2V0LmxlZnQtdGhpcy5tYXJnaW5zLmxlZnR9LGUuZXh0ZW5kKHRoaXMub2Zmc2V0LHtjbGljazp7bGVmdDp0LnBhZ2VYLXRoaXMub2Zmc2V0LmxlZnQsdG9wOnQucGFnZVktdGhpcy5vZmZzZXQudG9wfSxwYXJlbnQ6dGhpcy5fZ2V0UGFyZW50T2Zmc2V0KCkscmVsYXRpdmU6dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKX0pLHRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iLCJhYnNvbHV0ZSIpLHRoaXMuY3NzUG9zaXRpb249dGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIpLHRoaXMub3JpZ2luYWxQb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQpLHRoaXMub3JpZ2luYWxQYWdlWD10LnBhZ2VYLHRoaXMub3JpZ2luYWxQYWdlWT10LnBhZ2VZLGkuY3Vyc29yQXQmJnRoaXMuX2FkanVzdE9mZnNldEZyb21IZWxwZXIoaS5jdXJzb3JBdCksdGhpcy5kb21Qb3NpdGlvbj17cHJldjp0aGlzLmN1cnJlbnRJdGVtLnByZXYoKVswXSxwYXJlbnQ6dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXX0sdGhpcy5oZWxwZXJbMF0hPXRoaXMuY3VycmVudEl0ZW1bMF0mJnRoaXMuY3VycmVudEl0ZW0uaGlkZSgpLHRoaXMuX2NyZWF0ZVBsYWNlaG9sZGVyKCksaS5jb250YWlubWVudCYmdGhpcy5fc2V0Q29udGFpbm1lbnQoKSxpLmN1cnNvciYmKGUoImJvZHkiKS5jc3MoImN1cnNvciIpJiYodGhpcy5fc3RvcmVkQ3Vyc29yPWUoImJvZHkiKS5jc3MoImN1cnNvciIpKSxlKCJib2R5IikuY3NzKCJjdXJzb3IiLGkuY3Vyc29yKSksaS5vcGFjaXR5JiYodGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikmJih0aGlzLl9zdG9yZWRPcGFjaXR5PXRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIpKSx0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiLGkub3BhY2l0eSkpLGkuekluZGV4JiYodGhpcy5oZWxwZXIuY3NzKCJ6SW5kZXgiKSYmKHRoaXMuX3N0b3JlZFpJbmRleD10aGlzLmhlbHBlci5jc3MoInpJbmRleCIpKSx0aGlzLmhlbHBlci5jc3MoInpJbmRleCIsaS56SW5kZXgpKSx0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJnRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIiYmKHRoaXMub3ZlcmZsb3dPZmZzZXQ9dGhpcy5zY3JvbGxQYXJlbnQub2Zmc2V0KCkpLHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0LHRoaXMuX3VpSGFzaCgpKSx0aGlzLl9wcmVzZXJ2ZUhlbHBlclByb3BvcnRpb25zfHx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCk7aWYoIXIpZm9yKHZhciBzPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtzPj0wO3MtLSl0aGlzLmNvbnRhaW5lcnNbc10uX3RyaWdnZXIoImFjdGl2YXRlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSk7cmV0dXJuIGUudWkuZGRtYW5hZ2VyJiYoZS51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSxlLnVpLmRkbWFuYWdlciYmIWkuZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyx0KSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKSx0aGlzLl9tb3VzZURyYWcodCksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7dGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKHQpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksdGhpcy5sYXN0UG9zaXRpb25BYnN8fCh0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzKTtpZih0aGlzLm9wdGlvbnMuc2Nyb2xsKXt2YXIgbj10aGlzLm9wdGlvbnMscj0hMTt0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJnRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUhPSJIVE1MIj8odGhpcy5vdmVyZmxvd09mZnNldC50b3ArdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LXQucGFnZVk8bi5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Arbi5zY3JvbGxTcGVlZDp0LnBhZ2VZLXRoaXMub3ZlcmZsb3dPZmZzZXQudG9wPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Atbi5zY3JvbGxTcGVlZCksdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0K3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldFdpZHRoLXQucGFnZVg8bi5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCtuLnNjcm9sbFNwZWVkOnQucGFnZVgtdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0PG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdC1uLnNjcm9sbFNwZWVkKSk6KHQucGFnZVktZShkb2N1bWVudCkuc2Nyb2xsVG9wKCk8bi5zY3JvbGxTZW5zaXRpdml0eT9yPWUoZG9jdW1lbnQpLnNjcm9sbFRvcChlKGRvY3VtZW50KS5zY3JvbGxUb3AoKS1uLnNjcm9sbFNwZWVkKTplKHdpbmRvdykuaGVpZ2h0KCktKHQucGFnZVktZShkb2N1bWVudCkuc2Nyb2xsVG9wKCkpPG4uc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPWUoZG9jdW1lbnQpLnNjcm9sbFRvcChlKGRvY3VtZW50KS5zY3JvbGxUb3AoKStuLnNjcm9sbFNwZWVkKSksdC5wYWdlWC1lKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk8bi5zY3JvbGxTZW5zaXRpdml0eT9yPWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoZShkb2N1bWVudCkuc2Nyb2xsTGVmdCgpLW4uc2Nyb2xsU3BlZWQpOmUod2luZG93KS53aWR0aCgpLSh0LnBhZ2VYLWUoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSk8bi5zY3JvbGxTZW5zaXRpdml0eSYmKHI9ZShkb2N1bWVudCkuc2Nyb2xsTGVmdChlKGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrbi5zY3JvbGxTcGVlZCkpKSxyIT09ITEmJmUudWkuZGRtYW5hZ2VyJiYhbi5kcm9wQmVoYXZpb3VyJiZlLnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLHQpfXRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIik7aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9InkiKXRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCI7aWYoIXRoaXMub3B0aW9ucy5heGlzfHx0aGlzLm9wdGlvbnMuYXhpcyE9IngiKXRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiO2Zvcih2YXIgaT10aGlzLml0ZW1zLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgcz10aGlzLml0ZW1zW2ldLG89cy5pdGVtWzBdLHU9dGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKHMpO2lmKCF1KWNvbnRpbnVlO2lmKHMuaW5zdGFuY2UhPT10aGlzLmN1cnJlbnRDb250YWluZXIpY29udGludWU7aWYobyE9dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5wbGFjZWhvbGRlclt1PT0xPyJuZXh0IjoicHJldiJdKClbMF0hPW8mJiFlLmNvbnRhaW5zKHRoaXMucGxhY2Vob2xkZXJbMF0sbykmJih0aGlzLm9wdGlvbnMudHlwZT09InNlbWktZHluYW1pYyI/IWUuY29udGFpbnModGhpcy5lbGVtZW50WzBdLG8pOiEwKSl7dGhpcy5kaXJlY3Rpb249dT09MT8iZG93biI6InVwIjtpZih0aGlzLm9wdGlvbnMudG9sZXJhbmNlIT0icG9pbnRlciImJiF0aGlzLl9pbnRlcnNlY3RzV2l0aFNpZGVzKHMpKWJyZWFrO3RoaXMuX3JlYXJyYW5nZSh0LHMpLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIsdCx0aGlzLl91aUhhc2goKSk7YnJlYWt9fXJldHVybiB0aGlzLl9jb250YWN0Q29udGFpbmVycyh0KSxlLnVpLmRkbWFuYWdlciYmZS51aS5kZG1hbmFnZXIuZHJhZyh0aGlzLHQpLHRoaXMuX3RyaWdnZXIoInNvcnQiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMubGFzdFBvc2l0aW9uQWJzPXRoaXMucG9zaXRpb25BYnMsITF9LF9tb3VzZVN0b3A6ZnVuY3Rpb24odCxuKXtpZighdClyZXR1cm47ZS51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmZS51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLHQpO2lmKHRoaXMub3B0aW9ucy5yZXZlcnQpe3ZhciByPXRoaXMsaT10aGlzLnBsYWNlaG9sZGVyLm9mZnNldCgpO3RoaXMucmV2ZXJ0aW5nPSEwLGUodGhpcy5oZWxwZXIpLmFuaW1hdGUoe2xlZnQ6aS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0Kyh0aGlzLm9mZnNldFBhcmVudFswXT09ZG9jdW1lbnQuYm9keT8wOnRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbExlZnQpLHRvcDppLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsVG9wKX0scGFyc2VJbnQodGhpcy5vcHRpb25zLnJldmVydCwxMCl8fDUwMCxmdW5jdGlvbigpe3IuX2NsZWFyKHQpfSl9ZWxzZSB0aGlzLl9jbGVhcih0LG4pO3JldHVybiExfSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmRyYWdnaW5nKXt0aGlzLl9tb3VzZVVwKHt0YXJnZXQ6bnVsbH0pLHRoaXMub3B0aW9ucy5oZWxwZXI9PSJvcmlnaW5hbCI/dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIik6dGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHZhciB0PXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTt0Pj0wO3QtLSl0aGlzLmNvbnRhaW5lcnNbdF0uX3RyaWdnZXIoImRlYWN0aXZhdGUiLG51bGwsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbdF0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHRoaXMuY29udGFpbmVyc1t0XS5fdHJpZ2dlcigib3V0IixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3RdLmNvbnRhaW5lckNhY2hlLm92ZXI9MCl9cmV0dXJuIHRoaXMucGxhY2Vob2xkZXImJih0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUmJnRoaXMucGxhY2Vob2xkZXJbMF0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKSx0aGlzLm9wdGlvbnMuaGVscGVyIT0ib3JpZ2luYWwiJiZ0aGlzLmhlbHBlciYmdGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksZS5leHRlbmQodGhpcyx7aGVscGVyOm51bGwsZHJhZ2dpbmc6ITEscmV2ZXJ0aW5nOiExLF9ub0ZpbmFsU29ydDpudWxsfSksdGhpcy5kb21Qb3NpdGlvbi5wcmV2P2UodGhpcy5kb21Qb3NpdGlvbi5wcmV2KS5hZnRlcih0aGlzLmN1cnJlbnRJdGVtKTplKHRoaXMuZG9tUG9zaXRpb24ucGFyZW50KS5wcmVwZW5kKHRoaXMuY3VycmVudEl0ZW0pKSx0aGlzfSxzZXJpYWxpemU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeSh0JiZ0LmNvbm5lY3RlZCkscj1bXTtyZXR1cm4gdD10fHx7fSxlKG4pLmVhY2goZnVuY3Rpb24oKXt2YXIgbj0oZSh0Lml0ZW18fHRoaXMpLmF0dHIodC5hdHRyaWJ1dGV8fCJpZCIpfHwiIikubWF0Y2godC5leHByZXNzaW9ufHwvKC4rKVstPV9dKC4rKS8pO24mJnIucHVzaCgodC5rZXl8fG5bMV0rIltdIikrIj0iKyh0LmtleSYmdC5leHByZXNzaW9uP25bMV06blsyXSkpfSksIXIubGVuZ3RoJiZ0LmtleSYmci5wdXNoKHQua2V5KyI9Iiksci5qb2luKCImIil9LHRvQXJyYXk6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeSh0JiZ0LmNvbm5lY3RlZCkscj1bXTtyZXR1cm4gdD10fHx7fSxuLmVhY2goZnVuY3Rpb24oKXtyLnB1c2goZSh0Lml0ZW18fHRoaXMpLmF0dHIodC5hdHRyaWJ1dGV8fCJpZCIpfHwiIil9KSxyfSxfaW50ZXJzZWN0c1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LG49dCt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHI9dGhpcy5wb3NpdGlvbkFicy50b3AsaT1yK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LHM9ZS5sZWZ0LG89cytlLndpZHRoLHU9ZS50b3AsYT11K2UuaGVpZ2h0LGY9dGhpcy5vZmZzZXQuY2xpY2sudG9wLGw9dGhpcy5vZmZzZXQuY2xpY2subGVmdCxjPXIrZj51JiZyK2Y8YSYmdCtsPnMmJnQrbDxvO3JldHVybiB0aGlzLm9wdGlvbnMudG9sZXJhbmNlPT0icG9pbnRlciJ8fHRoaXMub3B0aW9ucy5mb3JjZVBvaW50ZXJGb3JDb250YWluZXJzfHx0aGlzLm9wdGlvbnMudG9sZXJhbmNlIT0icG9pbnRlciImJnRoaXMuaGVscGVyUHJvcG9ydGlvbnNbdGhpcy5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiXT5lW3RoaXMuZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0Il0/YzpzPHQrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZuLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMjxvJiZ1PHIrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMiYmaS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC8yPGF9LF9pbnRlcnNlY3RzV2l0aFBvaW50ZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLmF4aXM9PT0ieCJ8fGUudWkuaXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsdC50b3AsdC5oZWlnaHQpLHI9dGhpcy5vcHRpb25zLmF4aXM9PT0ieSJ8fGUudWkuaXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLmxlZnQrdGhpcy5vZmZzZXQuY2xpY2subGVmdCx0LmxlZnQsdC53aWR0aCksaT1uJiZyLHM9dGhpcy5fZ2V0RHJhZ1ZlcnRpY2FsRGlyZWN0aW9uKCksbz10aGlzLl9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbigpO3JldHVybiBpP3RoaXMuZmxvYXRpbmc/byYmbz09InJpZ2h0Inx8cz09ImRvd24iPzI6MTpzJiYocz09ImRvd24iPzI6MSk6ITF9LF9pbnRlcnNlY3RzV2l0aFNpZGVzOmZ1bmN0aW9uKHQpe3ZhciBuPWUudWkuaXNPdmVyQXhpcyh0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsdC50b3ArdC5oZWlnaHQvMix0LmhlaWdodCkscj1lLnVpLmlzT3ZlckF4aXModGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0K3Qud2lkdGgvMix0LndpZHRoKSxpPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLHM9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gdGhpcy5mbG9hdGluZyYmcz9zPT0icmlnaHQiJiZyfHxzPT0ibGVmdCImJiFyOmkmJihpPT0iZG93biImJm58fGk9PSJ1cCImJiFuKX0sX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMudG9wLXRoaXMubGFzdFBvc2l0aW9uQWJzLnRvcDtyZXR1cm4gZSE9MCYmKGU+MD8iZG93biI6InVwIil9LF9nZXREcmFnSG9yaXpvbnRhbERpcmVjdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMucG9zaXRpb25BYnMubGVmdC10aGlzLmxhc3RQb3NpdGlvbkFicy5sZWZ0O3JldHVybiBlIT0wJiYoZT4wPyJyaWdodCI6ImxlZnQiKX0scmVmcmVzaDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fcmVmcmVzaEl0ZW1zKGUpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXN9LF9jb25uZWN0V2l0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucztyZXR1cm4gZS5jb25uZWN0V2l0aC5jb25zdHJ1Y3Rvcj09U3RyaW5nP1tlLmNvbm5lY3RXaXRoXTplLmNvbm5lY3RXaXRofSxfZ2V0SXRlbXNBc2pRdWVyeTpmdW5jdGlvbih0KXt2YXIgbj1bXSxyPVtdLGk9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihpJiZ0KWZvcih2YXIgcz1pLmxlbmd0aC0xO3M+PTA7cy0tKXt2YXIgbz1lKGlbc10pO2Zvcih2YXIgdT1vLmxlbmd0aC0xO3U+PTA7dS0tKXt2YXIgYT1lLmRhdGEob1t1XSx0aGlzLndpZGdldE5hbWUpO2EmJmEhPXRoaXMmJiFhLm9wdGlvbnMuZGlzYWJsZWQmJnIucHVzaChbZS5pc0Z1bmN0aW9uKGEub3B0aW9ucy5pdGVtcyk/YS5vcHRpb25zLml0ZW1zLmNhbGwoYS5lbGVtZW50KTplKGEub3B0aW9ucy5pdGVtcyxhLmVsZW1lbnQpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpLm5vdCgiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIiksYV0pfX1yLnB1c2goW2UuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudCxudWxsLHtvcHRpb25zOnRoaXMub3B0aW9ucyxpdGVtOnRoaXMuY3VycmVudEl0ZW19KTplKHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpLm5vdCgiLnVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIiksdGhpc10pO2Zvcih2YXIgcz1yLmxlbmd0aC0xO3M+PTA7cy0tKXJbc11bMF0uZWFjaChmdW5jdGlvbigpe24ucHVzaCh0aGlzKX0pO3JldHVybiBlKG4pfSxfcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmN1cnJlbnRJdGVtLmZpbmQoIjpkYXRhKCIrdGhpcy53aWRnZXROYW1lKyItaXRlbSkiKTt0aGlzLml0ZW1zPWUuZ3JlcCh0aGlzLml0ZW1zLGZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl09PWUuaXRlbVswXSlyZXR1cm4hMTtyZXR1cm4hMH0pfSxfcmVmcmVzaEl0ZW1zOmZ1bmN0aW9uKHQpe3RoaXMuaXRlbXM9W10sdGhpcy5jb250YWluZXJzPVt0aGlzXTt2YXIgbj10aGlzLml0ZW1zLHI9W1tlLmlzRnVuY3Rpb24odGhpcy5vcHRpb25zLml0ZW1zKT90aGlzLm9wdGlvbnMuaXRlbXMuY2FsbCh0aGlzLmVsZW1lbnRbMF0sdCx7aXRlbTp0aGlzLmN1cnJlbnRJdGVtfSk6ZSh0aGlzLm9wdGlvbnMuaXRlbXMsdGhpcy5lbGVtZW50KSx0aGlzXV0saT10aGlzLl9jb25uZWN0V2l0aCgpO2lmKGkmJnRoaXMucmVhZHkpZm9yKHZhciBzPWkubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBvPWUoaVtzXSk7Zm9yKHZhciB1PW8ubGVuZ3RoLTE7dT49MDt1LS0pe3ZhciBhPWUuZGF0YShvW3VdLHRoaXMud2lkZ2V0TmFtZSk7YSYmYSE9dGhpcyYmIWEub3B0aW9ucy5kaXNhYmxlZCYmKHIucHVzaChbZS5pc0Z1bmN0aW9uKGEub3B0aW9ucy5pdGVtcyk/YS5vcHRpb25zLml0ZW1zLmNhbGwoYS5lbGVtZW50WzBdLHQse2l0ZW06dGhpcy5jdXJyZW50SXRlbX0pOmUoYS5vcHRpb25zLml0ZW1zLGEuZWxlbWVudCksYV0pLHRoaXMuY29udGFpbmVycy5wdXNoKGEpKX19Zm9yKHZhciBzPXIubGVuZ3RoLTE7cz49MDtzLS0pe3ZhciBmPXJbc11bMV0sbD1yW3NdWzBdO2Zvcih2YXIgdT0wLGM9bC5sZW5ndGg7dTxjO3UrKyl7dmFyIGg9ZShsW3VdKTtoLmRhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIsZiksbi5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6Zix3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfX19LHJlZnJlc2hQb3NpdGlvbnM6ZnVuY3Rpb24odCl7dGhpcy5vZmZzZXRQYXJlbnQmJnRoaXMuaGVscGVyJiYodGhpcy5vZmZzZXQucGFyZW50PXRoaXMuX2dldFBhcmVudE9mZnNldCgpKTtmb3IodmFyIG49dGhpcy5pdGVtcy5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIHI9dGhpcy5pdGVtc1tuXTtpZihyLmluc3RhbmNlIT10aGlzLmN1cnJlbnRDb250YWluZXImJnRoaXMuY3VycmVudENvbnRhaW5lciYmci5pdGVtWzBdIT10aGlzLmN1cnJlbnRJdGVtWzBdKWNvbnRpbnVlO3ZhciBpPXRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50P2UodGhpcy5vcHRpb25zLnRvbGVyYW5jZUVsZW1lbnQsci5pdGVtKTpyLml0ZW07dHx8KHIud2lkdGg9aS5vdXRlcldpZHRoKCksci5oZWlnaHQ9aS5vdXRlckhlaWdodCgpKTt2YXIgcz1pLm9mZnNldCgpO3IubGVmdD1zLmxlZnQsci50b3A9cy50b3B9aWYodGhpcy5vcHRpb25zLmN1c3RvbSYmdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycyl0aGlzLm9wdGlvbnMuY3VzdG9tLnJlZnJlc2hDb250YWluZXJzLmNhbGwodGhpcyk7ZWxzZSBmb3IodmFyIG49dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgcz10aGlzLmNvbnRhaW5lcnNbbl0uZWxlbWVudC5vZmZzZXQoKTt0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUubGVmdD1zLmxlZnQsdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLnRvcD1zLnRvcCx0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUud2lkdGg9dGhpcy5jb250YWluZXJzW25dLmVsZW1lbnQub3V0ZXJXaWR0aCgpLHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS5oZWlnaHQ9dGhpcy5jb250YWluZXJzW25dLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX1yZXR1cm4gdGhpc30sX2NyZWF0ZVBsYWNlaG9sZGVyOmZ1bmN0aW9uKHQpe3Q9dHx8dGhpczt2YXIgbj10Lm9wdGlvbnM7aWYoIW4ucGxhY2Vob2xkZXJ8fG4ucGxhY2Vob2xkZXIuY29uc3RydWN0b3I9PVN0cmluZyl7dmFyIHI9bi5wbGFjZWhvbGRlcjtuLnBsYWNlaG9sZGVyPXtlbGVtZW50OmZ1bmN0aW9uKCl7dmFyIG49ZShkb2N1bWVudC5jcmVhdGVFbGVtZW50KHQuY3VycmVudEl0ZW1bMF0ubm9kZU5hbWUpKS5hZGRDbGFzcyhyfHx0LmN1cnJlbnRJdGVtWzBdLmNsYXNzTmFtZSsiIHVpLXNvcnRhYmxlLXBsYWNlaG9sZGVyIikucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpWzBdO3JldHVybiByfHwobi5zdHlsZS52aXNpYmlsaXR5PSJoaWRkZW4iKSxufSx1cGRhdGU6ZnVuY3Rpb24oZSxpKXtpZihyJiYhbi5mb3JjZVBsYWNlaG9sZGVyU2l6ZSlyZXR1cm47aS5oZWlnaHQoKXx8aS5oZWlnaHQodC5jdXJyZW50SXRlbS5pbm5lckhlaWdodCgpLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nVG9wIil8fDAsMTApLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nQm90dG9tIil8fDAsMTApKSxpLndpZHRoKCl8fGkud2lkdGgodC5jdXJyZW50SXRlbS5pbm5lcldpZHRoKCktcGFyc2VJbnQodC5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdMZWZ0Iil8fDAsMTApLXBhcnNlSW50KHQuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nUmlnaHQiKXx8MCwxMCkpfX19dC5wbGFjZWhvbGRlcj1lKG4ucGxhY2Vob2xkZXIuZWxlbWVudC5jYWxsKHQuZWxlbWVudCx0LmN1cnJlbnRJdGVtKSksdC5jdXJyZW50SXRlbS5hZnRlcih0LnBsYWNlaG9sZGVyKSxuLnBsYWNlaG9sZGVyLnVwZGF0ZSh0LHQucGxhY2Vob2xkZXIpfSxfY29udGFjdENvbnRhaW5lcnM6ZnVuY3Rpb24odCl7dmFyIG49bnVsbCxyPW51bGw7Zm9yKHZhciBpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSl7aWYoZS5jb250YWlucyh0aGlzLmN1cnJlbnRJdGVtWzBdLHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50WzBdKSljb250aW51ZTtpZih0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUpKXtpZihuJiZlLmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50WzBdLG4uZWxlbWVudFswXSkpY29udGludWU7bj10aGlzLmNvbnRhaW5lcnNbaV0scj1pfWVsc2UgdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbaV0uX3RyaWdnZXIoIm91dCIsdCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS5vdmVyPTApfWlmKCFuKXJldHVybjtpZih0aGlzLmNvbnRhaW5lcnMubGVuZ3RoPT09MSl0aGlzLmNvbnRhaW5lcnNbcl0uX3RyaWdnZXIoIm92ZXIiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbcl0uY29udGFpbmVyQ2FjaGUub3Zlcj0xO2Vsc2V7dmFyIHM9MWU0LG89bnVsbCx1PXRoaXMuY29udGFpbmVyc1tyXS5mbG9hdGluZz8ibGVmdCI6InRvcCIsYT10aGlzLmNvbnRhaW5lcnNbcl0uZmxvYXRpbmc/IndpZHRoIjoiaGVpZ2h0IixmPXRoaXMucG9zaXRpb25BYnNbdV0rdGhpcy5vZmZzZXQuY2xpY2tbdV07Zm9yKHZhciBsPXRoaXMuaXRlbXMubGVuZ3RoLTE7bD49MDtsLS0pe2lmKCFlLmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tyXS5lbGVtZW50WzBdLHRoaXMuaXRlbXNbbF0uaXRlbVswXSkpY29udGludWU7aWYodGhpcy5pdGVtc1tsXS5pdGVtWzBdPT10aGlzLmN1cnJlbnRJdGVtWzBdKWNvbnRpbnVlO3ZhciBjPXRoaXMuaXRlbXNbbF0uaXRlbS5vZmZzZXQoKVt1XSxoPSExO01hdGguYWJzKGMtZik+TWF0aC5hYnMoYyt0aGlzLml0ZW1zW2xdW2FdLWYpJiYoaD0hMCxjKz10aGlzLml0ZW1zW2xdW2FdKSxNYXRoLmFicyhjLWYpPHMmJihzPU1hdGguYWJzKGMtZiksbz10aGlzLml0ZW1zW2xdLHRoaXMuZGlyZWN0aW9uPWg/InVwIjoiZG93biIpfWlmKCFvJiYhdGhpcy5vcHRpb25zLmRyb3BPbkVtcHR5KXJldHVybjt0aGlzLmN1cnJlbnRDb250YWluZXI9dGhpcy5jb250YWluZXJzW3JdLG8/dGhpcy5fcmVhcnJhbmdlKHQsbyxudWxsLCEwKTp0aGlzLl9yZWFycmFuZ2UodCxudWxsLHRoaXMuY29udGFpbmVyc1tyXS5lbGVtZW50LCEwKSx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLHQsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY29udGFpbmVyc1tyXS5fdHJpZ2dlcigiY2hhbmdlIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyLnVwZGF0ZSh0aGlzLmN1cnJlbnRDb250YWluZXIsdGhpcy5wbGFjZWhvbGRlciksdGhpcy5jb250YWluZXJzW3JdLl90cmlnZ2VyKCJvdmVyIix0LHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW3JdLmNvbnRhaW5lckNhY2hlLm92ZXI9MX19LF9jcmVhdGVIZWxwZXI6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI9ZS5pc0Z1bmN0aW9uKG4uaGVscGVyKT9lKG4uaGVscGVyLmFwcGx5KHRoaXMuZWxlbWVudFswXSxbdCx0aGlzLmN1cnJlbnRJdGVtXSkpOm4uaGVscGVyPT0iY2xvbmUiP3RoaXMuY3VycmVudEl0ZW0uY2xvbmUoKTp0aGlzLmN1cnJlbnRJdGVtO3JldHVybiByLnBhcmVudHMoImJvZHkiKS5sZW5ndGh8fGUobi5hcHBlbmRUbyE9InBhcmVudCI/bi5hcHBlbmRUbzp0aGlzLmN1cnJlbnRJdGVtWzBdLnBhcmVudE5vZGUpWzBdLmFwcGVuZENoaWxkKHJbMF0pLHJbMF09PXRoaXMuY3VycmVudEl0ZW1bMF0mJih0aGlzLl9zdG9yZWRDU1M9e3dpZHRoOnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUud2lkdGgsaGVpZ2h0OnRoaXMuY3VycmVudEl0ZW1bMF0uc3R5bGUuaGVpZ2h0LHBvc2l0aW9uOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJwb3NpdGlvbiIpLHRvcDp0aGlzLmN1cnJlbnRJdGVtLmNzcygidG9wIiksbGVmdDp0aGlzLmN1cnJlbnRJdGVtLmNzcygibGVmdCIpfSksKHJbMF0uc3R5bGUud2lkdGg9PSIifHxuLmZvcmNlSGVscGVyU2l6ZSkmJnIud2lkdGgodGhpcy5jdXJyZW50SXRlbS53aWR0aCgpKSwoclswXS5zdHlsZS5oZWlnaHQ9PSIifHxuLmZvcmNlSGVscGVyU2l6ZSkmJnIuaGVpZ2h0KHRoaXMuY3VycmVudEl0ZW0uaGVpZ2h0KCkpLHJ9LF9hZGp1c3RPZmZzZXRGcm9tSGVscGVyOmZ1bmN0aW9uKHQpe3R5cGVvZiB0PT0ic3RyaW5nIiYmKHQ9dC5zcGxpdCgiICIpKSxlLmlzQXJyYXkodCkmJih0PXtsZWZ0Oit0WzBdLHRvcDordFsxXXx8MH0pLCJsZWZ0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXQubGVmdCt0aGlzLm1hcmdpbnMubGVmdCksInJpZ2h0ImluIHQmJih0aGlzLm9mZnNldC5jbGljay5sZWZ0PXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdC5yaWdodCt0aGlzLm1hcmdpbnMubGVmdCksInRvcCJpbiB0JiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXQudG9wK3RoaXMubWFyZ2lucy50b3ApLCJib3R0b20iaW4gdCYmKHRoaXMub2Zmc2V0LmNsaWNrLnRvcD10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10LmJvdHRvbSt0aGlzLm1hcmdpbnMudG9wKX0sX2dldFBhcmVudE9mZnNldDpmdW5jdGlvbigpe3RoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpO3ZhciB0PXRoaXMub2Zmc2V0UGFyZW50Lm9mZnNldCgpO3RoaXMuY3NzUG9zaXRpb249PSJhYnNvbHV0ZSImJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSkmJih0LmxlZnQrPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKSx0LnRvcCs9dGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCkpO2lmKHRoaXMub2Zmc2V0UGFyZW50WzBdPT1kb2N1bWVudC5ib2R5fHx0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lJiZ0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCk9PSJodG1sIiYmZS51aS5pZSl0PXt0b3A6MCxsZWZ0OjB9O3JldHVybnt0b3A6dC50b3ArKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLGxlZnQ6dC5sZWZ0KyhwYXJzZUludCh0aGlzLm9mZnNldFBhcmVudC5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCl9fSxfZ2V0UmVsYXRpdmVPZmZzZXQ6ZnVuY3Rpb24oKXtpZih0aGlzLmNzc1Bvc2l0aW9uPT0icmVsYXRpdmUiKXt2YXIgZT10aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7cmV0dXJue3RvcDplLnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6ZS5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9uczt0LmNvbnRhaW5tZW50PT0icGFyZW50IiYmKHQuY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSk7aWYodC5jb250YWlubWVudD09ImRvY3VtZW50Inx8dC5jb250YWlubWVudD09IndpbmRvdyIpdGhpcy5jb250YWlubWVudD1bMC10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LDAtdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wLXRoaXMub2Zmc2V0LnBhcmVudC50b3AsZSh0LmNvbnRhaW5tZW50PT0iZG9jdW1lbnQiP2RvY3VtZW50OndpbmRvdykud2lkdGgoKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LChlKHQuY29udGFpbm1lbnQ9PSJkb2N1bWVudCI/ZG9jdW1lbnQ6d2luZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF07aWYoIS9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdCh0LmNvbnRhaW5tZW50KSl7dmFyIG49ZSh0LmNvbnRhaW5tZW50KVswXSxyPWUodC5jb250YWlubWVudCkub2Zmc2V0KCksaT1lKG4pLmNzcygib3ZlcmZsb3ciKSE9ImhpZGRlbiI7dGhpcy5jb250YWlubWVudD1bci5sZWZ0KyhwYXJzZUludChlKG4pLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShuKS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKS10aGlzLm1hcmdpbnMubGVmdCxyLnRvcCsocGFyc2VJbnQoZShuKS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoZShuKS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLXRoaXMubWFyZ2lucy50b3Asci5sZWZ0KyhpP01hdGgubWF4KG4uc2Nyb2xsV2lkdGgsbi5vZmZzZXRXaWR0aCk6bi5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGUobikuY3NzKCJib3JkZXJMZWZ0V2lkdGgiKSwxMCl8fDApLShwYXJzZUludChlKG4pLmNzcygicGFkZGluZ1JpZ2h0IiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLXRoaXMubWFyZ2lucy5sZWZ0LHIudG9wKyhpP01hdGgubWF4KG4uc2Nyb2xsSGVpZ2h0LG4ub2Zmc2V0SGVpZ2h0KTpuLm9mZnNldEhlaWdodCktKHBhcnNlSW50KGUobikuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KGUobikuY3NzKCJwYWRkaW5nQm90dG9tIiksMTApfHwwKS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXX19LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbih0LG4pe258fChuPXRoaXMucG9zaXRpb24pO3ZhciByPXQ9PSJhYnNvbHV0ZSI/MTotMSxpPXRoaXMub3B0aW9ucyxzPXRoaXMuY3NzUG9zaXRpb24hPSJhYnNvbHV0ZSJ8fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT1kb2N1bWVudCYmISFlLmNvbnRhaW5zKHRoaXMuc2Nyb2xsUGFyZW50WzBdLHRoaXMub2Zmc2V0UGFyZW50WzBdKT90aGlzLnNjcm9sbFBhcmVudDp0aGlzLm9mZnNldFBhcmVudCxvPS8oaHRtbHxib2R5KS9pLnRlc3Qoc1swXS50YWdOYW1lKTtyZXR1cm57dG9wOm4udG9wK3RoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcCpyK3RoaXMub2Zmc2V0LnBhcmVudC50b3Aqci0odGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6bz8wOnMuc2Nyb2xsVG9wKCkpKnIsbGVmdDpuLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpyK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnItKHRoaXMuY3NzUG9zaXRpb249PSJmaXhlZCI/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTpvPzA6cy5zY3JvbGxMZWZ0KCkpKnJ9fSxfZ2VuZXJhdGVQb3NpdGlvbjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzLmNzc1Bvc2l0aW9uIT0iYWJzb2x1dGUifHx0aGlzLnNjcm9sbFBhcmVudFswXSE9ZG9jdW1lbnQmJiEhZS5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQsaT0vKGh0bWx8Ym9keSkvaS50ZXN0KHJbMF0udGFnTmFtZSk7dGhpcy5jc3NQb3NpdGlvbj09InJlbGF0aXZlIiYmKHRoaXMuc2Nyb2xsUGFyZW50WzBdPT1kb2N1bWVudHx8dGhpcy5zY3JvbGxQYXJlbnRbMF09PXRoaXMub2Zmc2V0UGFyZW50WzBdKSYmKHRoaXMub2Zmc2V0LnJlbGF0aXZlPXRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCkpO3ZhciBzPXQucGFnZVgsbz10LnBhZ2VZO2lmKHRoaXMub3JpZ2luYWxQb3NpdGlvbil7dGhpcy5jb250YWlubWVudCYmKHQucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdJiYocz10aGlzLmNvbnRhaW5tZW50WzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLHQucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0mJihvPXRoaXMuY29udGFpbm1lbnRbMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSx0LnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXSYmKHM9dGhpcy5jb250YWlubWVudFsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSx0LnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdJiYobz10aGlzLmNvbnRhaW5tZW50WzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpO2lmKG4uZ3JpZCl7dmFyIHU9dGhpcy5vcmlnaW5hbFBhZ2VZK01hdGgucm91bmQoKG8tdGhpcy5vcmlnaW5hbFBhZ2VZKS9uLmdyaWRbMV0pKm4uZ3JpZFsxXTtvPXRoaXMuY29udGFpbm1lbnQ/dS10aGlzLm9mZnNldC5jbGljay50b3A8dGhpcy5jb250YWlubWVudFsxXXx8dS10aGlzLm9mZnNldC5jbGljay50b3A+dGhpcy5jb250YWlubWVudFszXT91LXRoaXMub2Zmc2V0LmNsaWNrLnRvcDx0aGlzLmNvbnRhaW5tZW50WzFdP3Urbi5ncmlkWzFdOnUtbi5ncmlkWzFdOnU6dTt2YXIgYT10aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgocy10aGlzLm9yaWdpbmFsUGFnZVgpL24uZ3JpZFswXSkqbi5ncmlkWzBdO3M9dGhpcy5jb250YWlubWVudD9hLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ8dGhpcy5jb250YWlubWVudFswXXx8YS10aGlzLm9mZnNldC5jbGljay5sZWZ0PnRoaXMuY29udGFpbm1lbnRbMl0/YS10aGlzLm9mZnNldC5jbGljay5sZWZ0PHRoaXMuY29udGFpbm1lbnRbMF0/YStuLmdyaWRbMF06YS1uLmdyaWRbMF06YTphfX1yZXR1cm57dG9wOm8tdGhpcy5vZmZzZXQuY2xpY2sudG9wLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wKyh0aGlzLmNzc1Bvc2l0aW9uPT0iZml4ZWQiPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxUb3AoKTppPzA6ci5zY3JvbGxUb3AoKSksbGVmdDpzLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCsodGhpcy5jc3NQb3NpdGlvbj09ImZpeGVkIj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpOmk/MDpyLnNjcm9sbExlZnQoKSl9fSxfcmVhcnJhbmdlOmZ1bmN0aW9uKGUsdCxuLHIpe24/blswXS5hcHBlbmRDaGlsZCh0aGlzLnBsYWNlaG9sZGVyWzBdKTp0Lml0ZW1bMF0ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5wbGFjZWhvbGRlclswXSx0aGlzLmRpcmVjdGlvbj09ImRvd24iP3QuaXRlbVswXTp0Lml0ZW1bMF0ubmV4dFNpYmxpbmcpLHRoaXMuY291bnRlcj10aGlzLmNvdW50ZXI/Kyt0aGlzLmNvdW50ZXI6MTt2YXIgaT10aGlzLmNvdW50ZXI7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtpPT10aGlzLmNvdW50ZXImJnRoaXMucmVmcmVzaFBvc2l0aW9ucyghcil9KX0sX2NsZWFyOmZ1bmN0aW9uKHQsbil7dGhpcy5yZXZlcnRpbmc9ITE7dmFyIHI9W107IXRoaXMuX25vRmluYWxTb3J0JiZ0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpLmxlbmd0aCYmdGhpcy5wbGFjZWhvbGRlci5iZWZvcmUodGhpcy5jdXJyZW50SXRlbSksdGhpcy5fbm9GaW5hbFNvcnQ9bnVsbDtpZih0aGlzLmhlbHBlclswXT09dGhpcy5jdXJyZW50SXRlbVswXSl7Zm9yKHZhciBpIGluIHRoaXMuX3N0b3JlZENTUylpZih0aGlzLl9zdG9yZWRDU1NbaV09PSJhdXRvInx8dGhpcy5fc3RvcmVkQ1NTW2ldPT0ic3RhdGljIil0aGlzLl9zdG9yZWRDU1NbaV09IiI7dGhpcy5jdXJyZW50SXRlbS5jc3ModGhpcy5fc3RvcmVkQ1NTKS5yZW1vdmVDbGFzcygidWktc29ydGFibGUtaGVscGVyIil9ZWxzZSB0aGlzLmN1cnJlbnRJdGVtLnNob3coKTt0aGlzLmZyb21PdXRzaWRlJiYhbiYmci5wdXNoKGZ1bmN0aW9uKGUpe3RoaXMuX3RyaWdnZXIoInJlY2VpdmUiLGUsdGhpcy5fdWlIYXNoKHRoaXMuZnJvbU91dHNpZGUpKX0pLCh0aGlzLmZyb21PdXRzaWRlfHx0aGlzLmRvbVBvc2l0aW9uLnByZXYhPXRoaXMuY3VycmVudEl0ZW0ucHJldigpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpWzBdfHx0aGlzLmRvbVBvc2l0aW9uLnBhcmVudCE9dGhpcy5jdXJyZW50SXRlbS5wYXJlbnQoKVswXSkmJiFuJiZyLnB1c2goZnVuY3Rpb24oZSl7dGhpcy5fdHJpZ2dlcigidXBkYXRlIixlLHRoaXMuX3VpSGFzaCgpKX0pLHRoaXMhPT10aGlzLmN1cnJlbnRDb250YWluZXImJihufHwoci5wdXNoKGZ1bmN0aW9uKGUpe3RoaXMuX3RyaWdnZXIoInJlbW92ZSIsZSx0aGlzLl91aUhhc2goKSl9KSxyLnB1c2goZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuX3RyaWdnZXIoInJlY2VpdmUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmN1cnJlbnRDb250YWluZXIpKSxyLnB1c2goZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuX3RyaWdnZXIoInVwZGF0ZSIsdCx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpKSk7Zm9yKHZhciBpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSlufHxyLnB1c2goZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe2UuX3RyaWdnZXIoImRlYWN0aXZhdGUiLHQsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbaV0pKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHIucHVzaChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7ZS5fdHJpZ2dlcigib3V0Iix0LHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jb250YWluZXJzW2ldKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7dGhpcy5fc3RvcmVkQ3Vyc29yJiZlKCJib2R5IikuY3NzKCJjdXJzb3IiLHRoaXMuX3N0b3JlZEN1cnNvciksdGhpcy5fc3RvcmVkT3BhY2l0eSYmdGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5Iix0aGlzLl9zdG9yZWRPcGFjaXR5KSx0aGlzLl9zdG9yZWRaSW5kZXgmJnRoaXMuaGVscGVyLmNzcygiekluZGV4Iix0aGlzLl9zdG9yZWRaSW5kZXg9PSJhdXRvIj8iIjp0aGlzLl9zdG9yZWRaSW5kZXgpLHRoaXMuZHJhZ2dpbmc9ITE7aWYodGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsKXtpZighbil7dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsdCx0aGlzLl91aUhhc2goKSk7Zm9yKHZhciBpPTA7aTxyLmxlbmd0aDtpKyspcltpXS5jYWxsKHRoaXMsdCk7dGhpcy5fdHJpZ2dlcigic3RvcCIsdCx0aGlzLl91aUhhc2goKSl9cmV0dXJuIHRoaXMuZnJvbU91dHNpZGU9ITEsITF9bnx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuaGVscGVyWzBdIT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0aGlzLmhlbHBlcj1udWxsO2lmKCFuKXtmb3IodmFyIGk9MDtpPHIubGVuZ3RoO2krKylyW2ldLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKCJzdG9wIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMH0sX3RyaWdnZXI6ZnVuY3Rpb24oKXtlLldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpPT09ITEmJnRoaXMuY2FuY2VsKCl9LF91aUhhc2g6ZnVuY3Rpb24odCl7dmFyIG49dHx8dGhpcztyZXR1cm57aGVscGVyOm4uaGVscGVyLHBsYWNlaG9sZGVyOm4ucGxhY2Vob2xkZXJ8fGUoW10pLHBvc2l0aW9uOm4ucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjpuLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0Om4ucG9zaXRpb25BYnMsaXRlbTpuLmN1cnJlbnRJdGVtLHNlbmRlcjp0P3QuZWxlbWVudDpudWxsfX19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lbGVtZW50LnZhbCgpO2UuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX3JlZnJlc2goKSx0IT09dGhpcy5lbGVtZW50LnZhbCgpJiZ0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiKX19ZS53aWRnZXQoInVpLnNwaW5uZXIiLHt2ZXJzaW9uOiIxLjkuMiIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLHdpZGdldEV2ZW50UHJlZml4OiJzcGluIixvcHRpb25zOntjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246InVpLWljb24tdHJpYW5nbGUtMS1zIix1cDoidWktaWNvbi10cmlhbmdsZS0xLW4ifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oIm1heCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKCJtaW4iLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbigic3RlcCIsdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3ZhbHVlKHRoaXMuZWxlbWVudC52YWwoKSwhMCksdGhpcy5fZHJhdygpLHRoaXMuX29uKHRoaXMuX2V2ZW50cyksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIil9fSl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIHQ9e30sbj10aGlzLmVsZW1lbnQ7cmV0dXJuIGUuZWFjaChbIm1pbiIsIm1heCIsInN0ZXAiXSxmdW5jdGlvbihlLHIpe3ZhciBpPW4uYXR0cihyKTtpIT09dW5kZWZpbmVkJiZpLmxlbmd0aCYmKHRbcl09aSl9KSx0fSxfZXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX3N0YXJ0KGUpJiZ0aGlzLl9rZXlkb3duKGUpJiZlLnByZXZlbnREZWZhdWx0KCl9LGtleXVwOiJfc3RvcCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbihlKXtpZih0aGlzLmNhbmNlbEJsdXIpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXI7cmV0dXJufXRoaXMuX3JlZnJlc2goKSx0aGlzLnByZXZpb3VzIT09dGhpcy5lbGVtZW50LnZhbCgpJiZ0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLGUpfSxtb3VzZXdoZWVsOmZ1bmN0aW9uKGUsdCl7aWYoIXQpcmV0dXJuO2lmKCF0aGlzLnNwaW5uaW5nJiYhdGhpcy5fc3RhcnQoZSkpcmV0dXJuITE7dGhpcy5fc3BpbigodD4wPzE6LTEpKnRoaXMub3B0aW9ucy5zdGVwLGUpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5tb3VzZXdoZWVsVGltZXI9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnNwaW5uaW5nJiZ0aGlzLl9zdG9wKGUpfSwxMDApLGUucHJldmVudERlZmF1bHQoKX0sIm1vdXNlZG93biAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXt2YXIgZT10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ7ZXx8KHRoaXMuZWxlbWVudC5mb2N1cygpLHRoaXMucHJldmlvdXM9bix0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMucHJldmlvdXM9bn0pKX12YXIgbjtuPXRoaXMuZWxlbWVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudD90aGlzLnByZXZpb3VzOnRoaXMuZWxlbWVudC52YWwoKSx0LnByZXZlbnREZWZhdWx0KCksci5jYWxsKHRoaXMpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsci5jYWxsKHRoaXMpfSk7aWYodGhpcy5fc3RhcnQodCk9PT0hMSlyZXR1cm47dGhpcy5fcmVwZWF0KG51bGwsZSh0LmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zcGlubmVyLXVwIik/MTotMSx0KX0sIm1vdXNldXAgLnVpLXNwaW5uZXItYnV0dG9uIjoiX3N0b3AiLCJtb3VzZWVudGVyIC51aS1zcGlubmVyLWJ1dHRvbiI6ZnVuY3Rpb24odCl7aWYoIWUodC5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3RhdGUtYWN0aXZlIikpcmV0dXJuO2lmKHRoaXMuX3N0YXJ0KHQpPT09ITEpcmV0dXJuITE7dGhpcy5fcmVwZWF0KG51bGwsZSh0LmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zcGlubmVyLXVwIik/MTotMSx0KX0sIm1vdXNlbGVhdmUgLnVpLXNwaW5uZXItYnV0dG9uIjoiX3N0b3AifSxfZHJhdzpmdW5jdGlvbigpe3ZhciBlPXRoaXMudWlTcGlubmVyPXRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLndyYXAodGhpcy5fdWlTcGlubmVySHRtbCgpKS5wYXJlbnQoKS5hcHBlbmQodGhpcy5fYnV0dG9uSHRtbCgpKTt0aGlzLmVsZW1lbnQuYXR0cigicm9sZSIsInNwaW5idXR0b24iKSx0aGlzLmJ1dHRvbnM9ZS5maW5kKCIudWktc3Bpbm5lci1idXR0b24iKS5hdHRyKCJ0YWJJbmRleCIsLTEpLmJ1dHRvbigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIiksdGhpcy5idXR0b25zLmhlaWdodCgpPk1hdGguY2VpbChlLmhlaWdodCgpKi41KSYmZS5oZWlnaHQoKT4wJiZlLmhlaWdodChlLmhlaWdodCgpKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZGlzYWJsZSgpfSxfa2V5ZG93bjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscj1lLnVpLmtleUNvZGU7c3dpdGNoKHQua2V5Q29kZSl7Y2FzZSByLlVQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwxLHQpLCEwO2Nhc2Ugci5ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtMSx0KSwhMDtjYXNlIHIuUEFHRV9VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsbi5wYWdlLHQpLCEwO2Nhc2Ugci5QQUdFX0RPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC1uLnBhZ2UsdCksITB9cmV0dXJuITF9LF91aVNwaW5uZXJIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxzcGFuIGNsYXNzPSd1aS1zcGlubmVyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsJz48L3NwYW4+In0sX2J1dHRvbkh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4iPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItdXAgdWktY29ybmVyLXRyJz48c3BhbiBjbGFzcz0ndWktaWNvbiAiK3RoaXMub3B0aW9ucy5pY29ucy51cCsiJz4mIzk2NTA7PC9zcGFuPiIrIjwvYT4iKyI8YSBjbGFzcz0ndWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci1kb3duIHVpLWNvcm5lci1icic+IisiPHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMuZG93bisiJz4mIzk2NjA7PC9zcGFuPiIrIjwvYT4ifSxfc3RhcnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIXRoaXMuc3Bpbm5pbmcmJnRoaXMuX3RyaWdnZXIoInN0YXJ0IixlKT09PSExPyExOih0aGlzLmNvdW50ZXJ8fCh0aGlzLmNvdW50ZXI9MSksdGhpcy5zcGlubmluZz0hMCwhMCl9LF9yZXBlYXQ6ZnVuY3Rpb24oZSx0LG4pe2U9ZXx8NTAwLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fcmVwZWF0KDQwLHQsbil9LGUpLHRoaXMuX3NwaW4odCp0aGlzLm9wdGlvbnMuc3RlcCxuKX0sX3NwaW46ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLnZhbHVlKCl8fDA7dGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLG49dGhpcy5fYWRqdXN0VmFsdWUobitlKnRoaXMuX2luY3JlbWVudCh0aGlzLmNvdW50ZXIpKTtpZighdGhpcy5zcGlubmluZ3x8dGhpcy5fdHJpZ2dlcigic3BpbiIsdCx7dmFsdWU6bn0pIT09ITEpdGhpcy5fdmFsdWUobiksdGhpcy5jb3VudGVyKyt9LF9pbmNyZW1lbnQ6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLmluY3JlbWVudGFsO3JldHVybiBuP2UuaXNGdW5jdGlvbihuKT9uKHQpOk1hdGguZmxvb3IodCp0KnQvNWU0LXQqdC81MDArMTcqdC8yMDArMSk6MX0sX3ByZWNpc2lvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3ByZWNpc2lvbk9mKHRoaXMub3B0aW9ucy5zdGVwKTtyZXR1cm4gdGhpcy5vcHRpb25zLm1pbiE9PW51bGwmJihlPU1hdGgubWF4KGUsdGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLm1pbikpKSxlfSxfcHJlY2lzaW9uT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygpLG49dC5pbmRleE9mKCIuIik7cmV0dXJuIG49PT0tMT8wOnQubGVuZ3RoLW4tMX0sX2FkanVzdFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0LG4scj10aGlzLm9wdGlvbnM7cmV0dXJuIHQ9ci5taW4hPT1udWxsP3IubWluOjAsbj1lLXQsbj1NYXRoLnJvdW5kKG4vci5zdGVwKSpyLnN0ZXAsZT10K24sZT1wYXJzZUZsb2F0KGUudG9GaXhlZCh0aGlzLl9wcmVjaXNpb24oKSkpLHIubWF4IT09bnVsbCYmZT5yLm1heD9yLm1heDpyLm1pbiE9PW51bGwmJmU8ci5taW4/ci5taW46ZX0sX3N0b3A6ZnVuY3Rpb24oZSl7aWYoIXRoaXMuc3Bpbm5pbmcpcmV0dXJuO2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSxjbGVhclRpbWVvdXQodGhpcy5tb3VzZXdoZWVsVGltZXIpLHRoaXMuY291bnRlcj0wLHRoaXMuc3Bpbm5pbmc9ITEsdGhpcy5fdHJpZ2dlcigic3RvcCIsZSl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSx0KXtpZihlPT09ImN1bHR1cmUifHxlPT09Im51bWJlckZvcm1hdCIpe3ZhciBuPXRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7dGhpcy5vcHRpb25zW2VdPXQsdGhpcy5lbGVtZW50LnZhbCh0aGlzLl9mb3JtYXQobikpO3JldHVybn0oZT09PSJtYXgifHxlPT09Im1pbiJ8fGU9PT0ic3RlcCIpJiZ0eXBlb2YgdD09InN0cmluZyImJih0PXRoaXMuX3BhcnNlKHQpKSx0aGlzLl9zdXBlcihlLHQpLGU9PT0iZGlzYWJsZWQiJiYodD8odGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMCksdGhpcy5idXR0b25zLmJ1dHRvbigiZGlzYWJsZSIpKToodGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMSksdGhpcy5idXR0b25zLmJ1dHRvbigiZW5hYmxlIikpKX0sX3NldE9wdGlvbnM6dChmdW5jdGlvbihlKXt0aGlzLl9zdXBlcihlKSx0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCkpfSksX3BhcnNlOmZ1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZT09InN0cmluZyImJmUhPT0iIiYmKGU9d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUucGFyc2VGbG9hdChlLDEwLHRoaXMub3B0aW9ucy5jdWx0dXJlKTorZSksZT09PSIifHxpc05hTihlKT9udWxsOmV9LF9mb3JtYXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0iIj8iIjp3aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5mb3JtYXQoZSx0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0LHRoaXMub3B0aW9ucy5jdWx0dXJlKTplfSxfcmVmcmVzaDpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5hdHRyKHsiYXJpYS12YWx1ZW1pbiI6dGhpcy5vcHRpb25zLm1pbiwiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6dGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKX0pfSxfdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbjtlIT09IiImJihuPXRoaXMuX3BhcnNlKGUpLG4hPT1udWxsJiYodHx8KG49dGhpcy5fYWRqdXN0VmFsdWUobikpLGU9dGhpcy5fZm9ybWF0KG4pKSksdGhpcy5lbGVtZW50LnZhbChlKSx0aGlzLl9yZWZyZXNoKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zcGlubmVyLWlucHV0IikucHJvcCgiZGlzYWJsZWQiLCExKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1pbiIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtYXgiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy51aVNwaW5uZXIucmVwbGFjZVdpdGgodGhpcy5lbGVtZW50KX0sc3RlcFVwOnQoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKGUpfSksX3N0ZXBVcDpmdW5jdGlvbihlKXt0aGlzLl9zcGluKChlfHwxKSp0aGlzLm9wdGlvbnMuc3RlcCl9LHN0ZXBEb3duOnQoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcERvd24oZSl9KSxfc3RlcERvd246ZnVuY3Rpb24oZSl7dGhpcy5fc3BpbigoZXx8MSkqLXRoaXMub3B0aW9ucy5zdGVwKX0scGFnZVVwOnQoZnVuY3Rpb24oZSl7dGhpcy5fc3RlcFVwKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSxwYWdlRG93bjp0KGZ1bmN0aW9uKGUpe3RoaXMuX3N0ZXBEb3duKChlfHwxKSp0aGlzLm9wdGlvbnMucGFnZSl9KSx2YWx1ZTpmdW5jdGlvbihlKXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gdGhpcy5fcGFyc2UodGhpcy5lbGVtZW50LnZhbCgpKTt0KHRoaXMuX3ZhbHVlKS5jYWxsKHRoaXMsZSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpU3Bpbm5lcn19KX0pKGpRdWVyeSk7KGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gaSgpe3JldHVybisrbn1mdW5jdGlvbiBzKGUpe3JldHVybiBlLmhhc2gubGVuZ3RoPjEmJmUuaHJlZi5yZXBsYWNlKHIsIiIpPT09bG9jYXRpb24uaHJlZi5yZXBsYWNlKHIsIiIpLnJlcGxhY2UoL1xzL2csIiUyMCIpfXZhciBuPTAscj0vIy4qJC87ZS53aWRnZXQoInVpLnRhYnMiLHt2ZXJzaW9uOiIxLjkuMiIsZGVsYXk6MzAwLG9wdGlvbnM6e2FjdGl2ZTpudWxsLGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVpZ2h0U3R5bGU6ImNvbnRlbnQiLGhpZGU6bnVsbCxzaG93Om51bGwsYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsLGJlZm9yZUxvYWQ6bnVsbCxsb2FkOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49dGhpcy5vcHRpb25zLHI9bi5hY3RpdmUsaT1sb2NhdGlvbi5oYXNoLnN1YnN0cmluZygxKTt0aGlzLnJ1bm5pbmc9ITEsdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS10YWJzIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIikudG9nZ2xlQ2xhc3MoInVpLXRhYnMtY29sbGFwc2libGUiLG4uY29sbGFwc2libGUpLmRlbGVnYXRlKCIudWktdGFicy1uYXYgPiBsaSIsIm1vdXNlZG93biIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbih0KXtlKHRoaXMpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdC5wcmV2ZW50RGVmYXVsdCgpfSkuZGVsZWdhdGUoIi51aS10YWJzLWFuY2hvciIsImZvY3VzIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7ZSh0aGlzKS5jbG9zZXN0KCJsaSIpLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5ibHVyKCl9KSx0aGlzLl9wcm9jZXNzVGFicygpO2lmKHI9PT1udWxsKXtpJiZ0aGlzLnRhYnMuZWFjaChmdW5jdGlvbih0LG4pe2lmKGUobikuYXR0cigiYXJpYS1jb250cm9scyIpPT09aSlyZXR1cm4gcj10LCExfSkscj09PW51bGwmJihyPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKCIudWktdGFicy1hY3RpdmUiKSkpO2lmKHI9PT1udWxsfHxyPT09LTEpcj10aGlzLnRhYnMubGVuZ3RoPzA6ITF9ciE9PSExJiYocj10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmVxKHIpKSxyPT09LTEmJihyPW4uY29sbGFwc2libGU/ITE6MCkpLG4uYWN0aXZlPXIsIW4uY29sbGFwc2libGUmJm4uYWN0aXZlPT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJihuLmFjdGl2ZT0wKSxlLmlzQXJyYXkobi5kaXNhYmxlZCkmJihuLmRpc2FibGVkPWUudW5pcXVlKG4uZGlzYWJsZWQuY29uY2F0KGUubWFwKHRoaXMudGFicy5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLGZ1bmN0aW9uKGUpe3JldHVybiB0LnRhYnMuaW5kZXgoZSl9KSkpLnNvcnQoKSksdGhpcy5vcHRpb25zLmFjdGl2ZSE9PSExJiZ0aGlzLmFuY2hvcnMubGVuZ3RoP3RoaXMuYWN0aXZlPXRoaXMuX2ZpbmRBY3RpdmUodGhpcy5vcHRpb25zLmFjdGl2ZSk6dGhpcy5hY3RpdmU9ZSgpLHRoaXMuX3JlZnJlc2goKSx0aGlzLmFjdGl2ZS5sZW5ndGgmJnRoaXMubG9hZChuLmFjdGl2ZSl9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGFiOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSk6ZSgpfX0sX3RhYktleWRvd246ZnVuY3Rpb24odCl7dmFyIG49ZSh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoImxpIikscj10aGlzLnRhYnMuaW5kZXgobiksaT0hMDtpZih0aGlzLl9oYW5kbGVQYWdlTmF2KHQpKXJldHVybjtzd2l0Y2godC5rZXlDb2RlKXtjYXNlIGUudWkua2V5Q29kZS5SSUdIVDpjYXNlIGUudWkua2V5Q29kZS5ET1dOOnIrKzticmVhaztjYXNlIGUudWkua2V5Q29kZS5VUDpjYXNlIGUudWkua2V5Q29kZS5MRUZUOmk9ITEsci0tO2JyZWFrO2Nhc2UgZS51aS5rZXlDb2RlLkVORDpyPXRoaXMuYW5jaG9ycy5sZW5ndGgtMTticmVhaztjYXNlIGUudWkua2V5Q29kZS5IT01FOnI9MDticmVhaztjYXNlIGUudWkua2V5Q29kZS5TUEFDRTp0LnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUocik7cmV0dXJuO2Nhc2UgZS51aS5rZXlDb2RlLkVOVEVSOnQucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShyPT09dGhpcy5vcHRpb25zLmFjdGl2ZT8hMTpyKTtyZXR1cm47ZGVmYXVsdDpyZXR1cm59dC5wcmV2ZW50RGVmYXVsdCgpLGNsZWFyVGltZW91dCh0aGlzLmFjdGl2YXRpbmcpLHI9dGhpcy5fZm9jdXNOZXh0VGFiKHIsaSksdC5jdHJsS2V5fHwobi5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSx0aGlzLnRhYnMuZXEocikuYXR0cigiYXJpYS1zZWxlY3RlZCIsInRydWUiKSx0aGlzLmFjdGl2YXRpbmc9dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLm9wdGlvbigiYWN0aXZlIixyKX0sdGhpcy5kZWxheSkpfSxfcGFuZWxLZXlkb3duOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX2hhbmRsZVBhZ2VOYXYodCkpcmV0dXJuO3QuY3RybEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlVQJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlLmZvY3VzKCkpfSxfaGFuZGxlUGFnZU5hdjpmdW5jdGlvbih0KXtpZih0LmFsdEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlBBR0VfVVApcmV0dXJuIHRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZvY3VzTmV4dFRhYih0aGlzLm9wdGlvbnMuYWN0aXZlLTEsITEpKSwhMDtpZih0LmFsdEtleSYmdC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLlBBR0VfRE9XTilyZXR1cm4gdGhpcy5fYWN0aXZhdGUodGhpcy5fZm9jdXNOZXh0VGFiKHRoaXMub3B0aW9ucy5hY3RpdmUrMSwhMCkpLCEwfSxfZmluZE5leHRUYWI6ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBpKCl7cmV0dXJuIHQ+ciYmKHQ9MCksdDwwJiYodD1yKSx0fXZhciByPXRoaXMudGFicy5sZW5ndGgtMTt3aGlsZShlLmluQXJyYXkoaSgpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCkhPT0tMSl0PW4/dCsxOnQtMTtyZXR1cm4gdH0sX2ZvY3VzTmV4dFRhYjpmdW5jdGlvbihlLHQpe3JldHVybiBlPXRoaXMuX2ZpbmROZXh0VGFiKGUsdCksdGhpcy50YWJzLmVxKGUpLmZvY3VzKCksZX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2lmKGU9PT0iYWN0aXZlIil7dGhpcy5fYWN0aXZhdGUodCk7cmV0dXJufWlmKGU9PT0iZGlzYWJsZWQiKXt0aGlzLl9zZXR1cERpc2FibGVkKHQpO3JldHVybn10aGlzLl9zdXBlcihlLHQpLGU9PT0iY29sbGFwc2libGUiJiYodGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS10YWJzLWNvbGxhcHNpYmxlIix0KSwhdCYmdGhpcy5vcHRpb25zLmFjdGl2ZT09PSExJiZ0aGlzLl9hY3RpdmF0ZSgwKSksZT09PSJldmVudCImJnRoaXMuX3NldHVwRXZlbnRzKHQpLGU9PT0iaGVpZ2h0U3R5bGUiJiZ0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHQpfSxfdGFiSWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXR0cigiYXJpYS1jb250cm9scyIpfHwidWktdGFicy0iK2koKX0sX3Nhbml0aXplU2VsZWN0b3I6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/ZS5yZXBsYWNlKC9bISIkJSYnKCkqKywuXC86Ozw9Pj9AXFtcXVxeYHt8fX5dL2csIlxcJCYiKToiIn0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucyxuPXRoaXMudGFibGlzdC5jaGlsZHJlbigiOmhhcyhhW2hyZWZdKSIpO3QuZGlzYWJsZWQ9ZS5tYXAobi5maWx0ZXIoIi51aS1zdGF0ZS1kaXNhYmxlZCIpLGZ1bmN0aW9uKGUpe3JldHVybiBuLmluZGV4KGUpfSksdGhpcy5fcHJvY2Vzc1RhYnMoKSx0LmFjdGl2ZT09PSExfHwhdGhpcy5hbmNob3JzLmxlbmd0aD8odC5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9ZSgpKTp0aGlzLmFjdGl2ZS5sZW5ndGgmJiFlLmNvbnRhaW5zKHRoaXMudGFibGlzdFswXSx0aGlzLmFjdGl2ZVswXSk/dGhpcy50YWJzLmxlbmd0aD09PXQuZGlzYWJsZWQubGVuZ3RoPyh0LmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT1lKCkpOnRoaXMuX2FjdGl2YXRlKHRoaXMuX2ZpbmROZXh0VGFiKE1hdGgubWF4KDAsdC5hY3RpdmUtMSksITEpKTp0LmFjdGl2ZT10aGlzLnRhYnMuaW5kZXgodGhpcy5hY3RpdmUpLHRoaXMuX3JlZnJlc2goKX0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLl9zZXR1cERpc2FibGVkKHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fc2V0dXBFdmVudHModGhpcy5vcHRpb25zLmV2ZW50KSx0aGlzLl9zZXR1cEhlaWdodFN0eWxlKHRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSksdGhpcy50YWJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscy5ub3QodGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpKS5oaWRlKCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSx0aGlzLmFjdGl2ZS5sZW5ndGg/KHRoaXMuYWN0aXZlLmFkZENsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KSx0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSkuc2hvdygpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSkpOnRoaXMudGFicy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCl9LF9wcm9jZXNzVGFiczpmdW5jdGlvbigpe3ZhciB0PXRoaXM7dGhpcy50YWJsaXN0PXRoaXMuX2dldExpc3QoKS5hZGRDbGFzcygidWktdGFicy1uYXYgdWktaGVscGVyLXJlc2V0IHVpLWhlbHBlci1jbGVhcmZpeCB1aS13aWRnZXQtaGVhZGVyIHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwidGFibGlzdCIpLHRoaXMudGFicz10aGlzLnRhYmxpc3QuZmluZCgiPiBsaTpoYXMoYVtocmVmXSkiKS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItdG9wIikuYXR0cih7cm9sZToidGFiIix0YWJJbmRleDotMX0pLHRoaXMuYW5jaG9ycz10aGlzLnRhYnMubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGUoImEiLHRoaXMpWzBdfSkuYWRkQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikuYXR0cih7cm9sZToicHJlc2VudGF0aW9uIix0YWJJbmRleDotMX0pLHRoaXMucGFuZWxzPWUoKSx0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbihuLHIpe3ZhciBpLG8sdSxhPWUocikudW5pcXVlSWQoKS5hdHRyKCJpZCIpLGY9ZShyKS5jbG9zZXN0KCJsaSIpLGw9Zi5hdHRyKCJhcmlhLWNvbnRyb2xzIik7cyhyKT8oaT1yLmhhc2gsbz10LmVsZW1lbnQuZmluZCh0Ll9zYW5pdGl6ZVNlbGVjdG9yKGkpKSk6KHU9dC5fdGFiSWQoZiksaT0iIyIrdSxvPXQuZWxlbWVudC5maW5kKGkpLG8ubGVuZ3RofHwobz10Ll9jcmVhdGVQYW5lbCh1KSxvLmluc2VydEFmdGVyKHQucGFuZWxzW24tMV18fHQudGFibGlzdCkpLG8uYXR0cigiYXJpYS1saXZlIiwicG9saXRlIikpLG8ubGVuZ3RoJiYodC5wYW5lbHM9dC5wYW5lbHMuYWRkKG8pKSxsJiZmLmRhdGEoInVpLXRhYnMtYXJpYS1jb250cm9scyIsbCksZi5hdHRyKHsiYXJpYS1jb250cm9scyI6aS5zdWJzdHJpbmcoMSksImFyaWEtbGFiZWxsZWRieSI6YX0pLG8uYXR0cigiYXJpYS1sYWJlbGxlZGJ5IixhKX0pLHRoaXMucGFuZWxzLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5hdHRyKCJyb2xlIiwidGFicGFuZWwiKX0sX2dldExpc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50LmZpbmQoIm9sLHVsIikuZXEoMCl9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbih0KXtyZXR1cm4gZSgiPGRpdj4iKS5hdHRyKCJpZCIsdCkuYWRkQ2xhc3MoInVpLXRhYnMtcGFuZWwgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWJvdHRvbSIpLmRhdGEoInVpLXRhYnMtZGVzdHJveSIsITApfSxfc2V0dXBEaXNhYmxlZDpmdW5jdGlvbih0KXtlLmlzQXJyYXkodCkmJih0Lmxlbmd0aD90Lmxlbmd0aD09PXRoaXMuYW5jaG9ycy5sZW5ndGgmJih0PSEwKTp0PSExKTtmb3IodmFyIG49MCxyO3I9dGhpcy50YWJzW25dO24rKyl0PT09ITB8fGUuaW5BcnJheShuLHQpIT09LTE/ZShyKS5hZGRDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpOmUocikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikucmVtb3ZlQXR0cigiYXJpYS1kaXNhYmxlZCIpO3RoaXMub3B0aW9ucy5kaXNhYmxlZD10fSxfc2V0dXBFdmVudHM6ZnVuY3Rpb24odCl7dmFyIG49e2NsaWNrOmZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX19O3QmJmUuZWFjaCh0LnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtuW3RdPSJfZXZlbnRIYW5kbGVyIn0pLHRoaXMuX29mZih0aGlzLmFuY2hvcnMuYWRkKHRoaXMudGFicykuYWRkKHRoaXMucGFuZWxzKSksdGhpcy5fb24odGhpcy5hbmNob3JzLG4pLHRoaXMuX29uKHRoaXMudGFicyx7a2V5ZG93bjoiX3RhYktleWRvd24ifSksdGhpcy5fb24odGhpcy5wYW5lbHMse2tleWRvd246Il9wYW5lbEtleWRvd24ifSksdGhpcy5fZm9jdXNhYmxlKHRoaXMudGFicyksdGhpcy5faG92ZXJhYmxlKHRoaXMudGFicyl9LF9zZXR1cEhlaWdodFN0eWxlOmZ1bmN0aW9uKHQpe3ZhciBuLHIsaT10aGlzLmVsZW1lbnQucGFyZW50KCk7dD09PSJmaWxsIj8oZS5zdXBwb3J0Lm1pbkhlaWdodHx8KHI9aS5jc3MoIm92ZXJmbG93IiksaS5jc3MoIm92ZXJmbG93IiwiaGlkZGVuIikpLG49aS5oZWlnaHQoKSx0aGlzLmVsZW1lbnQuc2libGluZ3MoIjp2aXNpYmxlIikuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcykscj10LmNzcygicG9zaXRpb24iKTtpZihyPT09ImFic29sdXRlInx8cj09PSJmaXhlZCIpcmV0dXJuO24tPXQub3V0ZXJIZWlnaHQoITApfSksciYmaS5jc3MoIm92ZXJmbG93IixyKSx0aGlzLmVsZW1lbnQuY2hpbGRyZW4oKS5ub3QodGhpcy5wYW5lbHMpLmVhY2goZnVuY3Rpb24oKXtuLT1lKHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKXtlKHRoaXMpLmhlaWdodChNYXRoLm1heCgwLG4tZSh0aGlzKS5pbm5lckhlaWdodCgpK2UodGhpcykuaGVpZ2h0KCkpKX0pLmNzcygib3ZlcmZsb3ciLCJhdXRvIikpOnQ9PT0iYXV0byImJihuPTAsdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe249TWF0aC5tYXgobixlKHRoaXMpLmhlaWdodCgiIikuaGVpZ2h0KCkpfSkuaGVpZ2h0KG4pKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLm9wdGlvbnMscj10aGlzLmFjdGl2ZSxpPWUodC5jdXJyZW50VGFyZ2V0KSxzPWkuY2xvc2VzdCgibGkiKSxvPXNbMF09PT1yWzBdLHU9byYmbi5jb2xsYXBzaWJsZSxhPXU/ZSgpOnRoaXMuX2dldFBhbmVsRm9yVGFiKHMpLGY9ci5sZW5ndGg/dGhpcy5fZ2V0UGFuZWxGb3JUYWIocik6ZSgpLGw9e29sZFRhYjpyLG9sZFBhbmVsOmYsbmV3VGFiOnU/ZSgpOnMsbmV3UGFuZWw6YX07dC5wcmV2ZW50RGVmYXVsdCgpO2lmKHMuaGFzQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIil8fHMuaGFzQ2xhc3MoInVpLXRhYnMtbG9hZGluZyIpfHx0aGlzLnJ1bm5pbmd8fG8mJiFuLmNvbGxhcHNpYmxlfHx0aGlzLl90cmlnZ2VyKCJiZWZvcmVBY3RpdmF0ZSIsdCxsKT09PSExKXJldHVybjtuLmFjdGl2ZT11PyExOnRoaXMudGFicy5pbmRleChzKSx0aGlzLmFjdGl2ZT1vP2UoKTpzLHRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpLCFmLmxlbmd0aCYmIWEubGVuZ3RoJiZlLmVycm9yKCJqUXVlcnkgVUkgVGFiczogTWlzbWF0Y2hpbmcgZnJhZ21lbnQgaWRlbnRpZmllci4iKSxhLmxlbmd0aCYmdGhpcy5sb2FkKHRoaXMudGFicy5pbmRleChzKSx0KSx0aGlzLl90b2dnbGUodCxsKX0sX3RvZ2dsZTpmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIG8oKXtyLnJ1bm5pbmc9ITEsci5fdHJpZ2dlcigiYWN0aXZhdGUiLHQsbil9ZnVuY3Rpb24gdSgpe24ubmV3VGFiLmNsb3Nlc3QoImxpIikuYWRkQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLGkubGVuZ3RoJiZyLm9wdGlvbnMuc2hvdz9yLl9zaG93KGksci5vcHRpb25zLnNob3csbyk6KGkuc2hvdygpLG8oKSl9dmFyIHI9dGhpcyxpPW4ubmV3UGFuZWwscz1uLm9sZFBhbmVsO3RoaXMucnVubmluZz0hMCxzLmxlbmd0aCYmdGhpcy5vcHRpb25zLmhpZGU/dGhpcy5faGlkZShzLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7bi5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksdSgpfSk6KG4ub2xkVGFiLmNsb3Nlc3QoImxpIikucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIpLHMuaGlkZSgpLHUoKSkscy5hdHRyKHsiYXJpYS1leHBhbmRlZCI6ImZhbHNlIiwiYXJpYS1oaWRkZW4iOiJ0cnVlIn0pLG4ub2xkVGFiLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLGkubGVuZ3RoJiZzLmxlbmd0aD9uLm9sZFRhYi5hdHRyKCJ0YWJJbmRleCIsLTEpOmkubGVuZ3RoJiZ0aGlzLnRhYnMuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcykuYXR0cigidGFiSW5kZXgiKT09PTB9KS5hdHRyKCJ0YWJJbmRleCIsLTEpLGkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJ0cnVlIiwiYXJpYS1oaWRkZW4iOiJmYWxzZSJ9KSxuLm5ld1RhYi5hdHRyKHsiYXJpYS1zZWxlY3RlZCI6InRydWUiLHRhYkluZGV4OjB9KX0sX2FjdGl2YXRlOmZ1bmN0aW9uKHQpe3ZhciBuLHI9dGhpcy5fZmluZEFjdGl2ZSh0KTtpZihyWzBdPT09dGhpcy5hY3RpdmVbMF0pcmV0dXJuO3IubGVuZ3RofHwocj10aGlzLmFjdGl2ZSksbj1yLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0Om4sY3VycmVudFRhcmdldDpuLHByZXZlbnREZWZhdWx0OmUubm9vcH0pfSxfZmluZEFjdGl2ZTpmdW5jdGlvbih0KXtyZXR1cm4gdD09PSExP2UoKTp0aGlzLnRhYnMuZXEodCl9LF9nZXRJbmRleDpmdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGU9PSJzdHJpbmciJiYoZT10aGlzLmFuY2hvcnMuaW5kZXgodGhpcy5hbmNob3JzLmZpbHRlcigiW2hyZWYkPSciK2UrIiddIikpKSxlfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS10YWJzLWNvbGxhcHNpYmxlIiksdGhpcy50YWJsaXN0LnJlbW92ZUNsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKSx0aGlzLmFuY2hvcnMucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlRGF0YSgiaHJlZi50YWJzIikucmVtb3ZlRGF0YSgibG9hZC50YWJzIikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLnRhYnMuYWRkKHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7ZS5kYXRhKHRoaXMsInVpLXRhYnMtZGVzdHJveSIpP2UodGhpcykucmVtb3ZlKCk6ZSh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQgdWktY29ybmVyLXRvcCB1aS1jb3JuZXItYm90dG9tIHVpLXdpZGdldC1jb250ZW50IHVpLXRhYnMtYWN0aXZlIHVpLXRhYnMtcGFuZWwiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoImFyaWEtbGl2ZSIpLnJlbW92ZUF0dHIoImFyaWEtYnVzeSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJyb2xlIil9KSx0aGlzLnRhYnMuZWFjaChmdW5jdGlvbigpe3ZhciB0PWUodGhpcyksbj10LmRhdGEoInVpLXRhYnMtYXJpYS1jb250cm9scyIpO24/dC5hdHRyKCJhcmlhLWNvbnRyb2xzIixuKTp0LnJlbW92ZUF0dHIoImFyaWEtY29udHJvbHMiKX0pLHRoaXMucGFuZWxzLnNob3coKSx0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUhPT0iY29udGVudCImJnRoaXMucGFuZWxzLmNzcygiaGVpZ2h0IiwiIil9LGVuYWJsZTpmdW5jdGlvbihuKXt2YXIgcj10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7aWYocj09PSExKXJldHVybjtuPT09dD9yPSExOihuPXRoaXMuX2dldEluZGV4KG4pLGUuaXNBcnJheShyKT9yPWUubWFwKHIsZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1uP2U6bnVsbH0pOnI9ZS5tYXAodGhpcy50YWJzLGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQhPT1uP3Q6bnVsbH0pKSx0aGlzLl9zZXR1cERpc2FibGVkKHIpfSxkaXNhYmxlOmZ1bmN0aW9uKG4pe3ZhciByPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZihyPT09ITApcmV0dXJuO2lmKG49PT10KXI9ITA7ZWxzZXtuPXRoaXMuX2dldEluZGV4KG4pO2lmKGUuaW5BcnJheShuLHIpIT09LTEpcmV0dXJuO2UuaXNBcnJheShyKT9yPWUubWVyZ2UoW25dLHIpLnNvcnQoKTpyPVtuXX10aGlzLl9zZXR1cERpc2FibGVkKHIpfSxsb2FkOmZ1bmN0aW9uKHQsbil7dD10aGlzLl9nZXRJbmRleCh0KTt2YXIgcj10aGlzLGk9dGhpcy50YWJzLmVxKHQpLG89aS5maW5kKCIudWktdGFicy1hbmNob3IiKSx1PXRoaXMuX2dldFBhbmVsRm9yVGFiKGkpLGE9e3RhYjppLHBhbmVsOnV9O2lmKHMob1swXSkpcmV0dXJuO3RoaXMueGhyPWUuYWpheCh0aGlzLl9hamF4U2V0dGluZ3MobyxuLGEpKSx0aGlzLnhociYmdGhpcy54aHIuc3RhdHVzVGV4dCE9PSJjYW5jZWxlZCImJihpLmFkZENsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSx1LmF0dHIoImFyaWEtYnVzeSIsInRydWUiKSx0aGlzLnhoci5zdWNjZXNzKGZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt1Lmh0bWwoZSksci5fdHJpZ2dlcigibG9hZCIsbixhKX0sMSl9KS5jb21wbGV0ZShmdW5jdGlvbihlLHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0PT09ImFib3J0IiYmci5wYW5lbHMuc3RvcCghMSwhMCksaS5yZW1vdmVDbGFzcygidWktdGFicy1sb2FkaW5nIiksdS5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKSxlPT09ci54aHImJmRlbGV0ZSByLnhocn0sMSl9KSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXM7cmV0dXJue3VybDp0LmF0dHIoImhyZWYiKSxiZWZvcmVTZW5kOmZ1bmN0aW9uKHQscyl7cmV0dXJuIGkuX3RyaWdnZXIoImJlZm9yZUxvYWQiLG4sZS5leHRlbmQoe2pxWEhSOnQsYWpheFNldHRpbmdzOnN9LHIpKX19fSxfZ2V0UGFuZWxGb3JUYWI6ZnVuY3Rpb24odCl7dmFyIG49ZSh0KS5hdHRyKCJhcmlhLWNvbnRyb2xzIik7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKHRoaXMuX3Nhbml0aXplU2VsZWN0b3IoIiMiK24pKX19KSxlLnVpQmFja0NvbXBhdCE9PSExJiYoZS51aS50YWJzLnByb3RvdHlwZS5fdWk9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dGFiOmUscGFuZWw6dCxpbmRleDp0aGlzLmFuY2hvcnMuaW5kZXgoZSl9fSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHt1cmw6ZnVuY3Rpb24oZSx0KXt0aGlzLmFuY2hvcnMuZXEoZSkuYXR0cigiaHJlZiIsdCl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7YWpheE9wdGlvbnM6bnVsbCxjYWNoZTohMX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCk7dmFyIHQ9dGhpczt0aGlzLl9vbih7dGFic2JlZm9yZWxvYWQ6ZnVuY3Rpb24obixyKXtpZihlLmRhdGEoci50YWJbMF0sImNhY2hlLnRhYnMiKSl7bi5wcmV2ZW50RGVmYXVsdCgpO3JldHVybn1yLmpxWEhSLnN1Y2Nlc3MoZnVuY3Rpb24oKXt0Lm9wdGlvbnMuY2FjaGUmJmUuZGF0YShyLnRhYlswXSwiY2FjaGUudGFicyIsITApfSl9fSl9LF9hamF4U2V0dGluZ3M6ZnVuY3Rpb24odCxuLHIpe3ZhciBpPXRoaXMub3B0aW9ucy5hamF4T3B0aW9ucztyZXR1cm4gZS5leHRlbmQoe30saSx7ZXJyb3I6ZnVuY3Rpb24oZSx0KXt0cnl7aS5lcnJvcihlLHQsci50YWIuY2xvc2VzdCgibGkiKS5pbmRleCgpLHIudGFiWzBdKX1jYXRjaChuKXt9fX0sdGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpKX0sX3NldE9wdGlvbjpmdW5jdGlvbihlLHQpe2U9PT0iY2FjaGUiJiZ0PT09ITEmJnRoaXMuYW5jaG9ycy5yZW1vdmVEYXRhKCJjYWNoZS50YWJzIiksdGhpcy5fc3VwZXIoZSx0KX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmFuY2hvcnMucmVtb3ZlRGF0YSgiY2FjaGUudGFicyIpLHRoaXMuX3N1cGVyKCl9LHVybDpmdW5jdGlvbihlKXt0aGlzLmFuY2hvcnMuZXEoZSkucmVtb3ZlRGF0YSgiY2FjaGUudGFicyIpLHRoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHthYm9ydDpmdW5jdGlvbigpe3RoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e3NwaW5uZXI6IjxlbT5Mb2FkaW5nJiM4MjMwOzwvZW0+In0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX3N1cGVyKCksdGhpcy5fb24oe3RhYnNiZWZvcmVsb2FkOmZ1bmN0aW9uKGUsdCl7aWYoZS50YXJnZXQhPT10aGlzLmVsZW1lbnRbMF18fCF0aGlzLm9wdGlvbnMuc3Bpbm5lcilyZXR1cm47dmFyIG49dC50YWIuZmluZCgic3BhbiIpLHI9bi5odG1sKCk7bi5odG1sKHRoaXMub3B0aW9ucy5zcGlubmVyKSx0LmpxWEhSLmNvbXBsZXRlKGZ1bmN0aW9uKCl7bi5odG1sKHIpfSl9fSl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7ZW5hYmxlOm51bGwsZGlzYWJsZTpudWxsfSxlbmFibGU6ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5vcHRpb25zLHI7aWYodCYmbi5kaXNhYmxlZD09PSEwfHxlLmlzQXJyYXkobi5kaXNhYmxlZCkmJmUuaW5BcnJheSh0LG4uZGlzYWJsZWQpIT09LTEpcj0hMDt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksciYmdGhpcy5fdHJpZ2dlcigiZW5hYmxlIixudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1t0XSx0aGlzLnBhbmVsc1t0XSkpfSxkaXNhYmxlOmZ1bmN0aW9uKHQpe3ZhciBuPXRoaXMub3B0aW9ucyxyO2lmKHQmJm4uZGlzYWJsZWQ9PT0hMXx8ZS5pc0FycmF5KG4uZGlzYWJsZWQpJiZlLmluQXJyYXkodCxuLmRpc2FibGVkKT09PS0xKXI9ITA7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHImJnRoaXMuX3RyaWdnZXIoImRpc2FibGUiLG51bGwsdGhpcy5fdWkodGhpcy5hbmNob3JzW3RdLHRoaXMucGFuZWxzW3RdKSl9fSksZS53aWRnZXQoInVpLnRhYnMiLGUudWkudGFicyx7b3B0aW9uczp7YWRkOm51bGwscmVtb3ZlOm51bGwsdGFiVGVtcGxhdGU6IjxsaT48YSBocmVmPScje2hyZWZ9Jz48c3Bhbj4je2xhYmVsfTwvc3Bhbj48L2E+PC9saT4ifSxhZGQ6ZnVuY3Rpb24obixyLGkpe2k9PT10JiYoaT10aGlzLmFuY2hvcnMubGVuZ3RoKTt2YXIgcyxvLHU9dGhpcy5vcHRpb25zLGE9ZSh1LnRhYlRlbXBsYXRlLnJlcGxhY2UoLyNce2hyZWZcfS9nLG4pLnJlcGxhY2UoLyNce2xhYmVsXH0vZyxyKSksZj1uLmluZGV4T2YoIiMiKT90aGlzLl90YWJJZChhKTpuLnJlcGxhY2UoIiMiLCIiKTtyZXR1cm4gYS5hZGRDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItdG9wIikuZGF0YSgidWktdGFicy1kZXN0cm95IiwhMCksYS5hdHRyKCJhcmlhLWNvbnRyb2xzIixmKSxzPWk+PXRoaXMudGFicy5sZW5ndGgsbz10aGlzLmVsZW1lbnQuZmluZCgiIyIrZiksby5sZW5ndGh8fChvPXRoaXMuX2NyZWF0ZVBhbmVsKGYpLHM/aT4wP28uaW5zZXJ0QWZ0ZXIodGhpcy5wYW5lbHMuZXEoLTEpKTpvLmFwcGVuZFRvKHRoaXMuZWxlbWVudCk6by5pbnNlcnRCZWZvcmUodGhpcy5wYW5lbHNbaV0pKSxvLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5oaWRlKCkscz9hLmFwcGVuZFRvKHRoaXMudGFibGlzdCk6YS5pbnNlcnRCZWZvcmUodGhpcy50YWJzW2ldKSx1LmRpc2FibGVkPWUubWFwKHUuZGlzYWJsZWQsZnVuY3Rpb24oZSl7cmV0dXJuIGU+PWk/KytlOmV9KSx0aGlzLnJlZnJlc2goKSx0aGlzLnRhYnMubGVuZ3RoPT09MSYmdS5hY3RpdmU9PT0hMSYmdGhpcy5vcHRpb24oImFjdGl2ZSIsMCksdGhpcy5fdHJpZ2dlcigiYWRkIixudWxsLHRoaXMuX3VpKHRoaXMuYW5jaG9yc1tpXSx0aGlzLnBhbmVsc1tpXSkpLHRoaXN9LHJlbW92ZTpmdW5jdGlvbih0KXt0PXRoaXMuX2dldEluZGV4KHQpO3ZhciBuPXRoaXMub3B0aW9ucyxyPXRoaXMudGFicy5lcSh0KS5yZW1vdmUoKSxpPXRoaXMuX2dldFBhbmVsRm9yVGFiKHIpLnJlbW92ZSgpO3JldHVybiByLmhhc0NsYXNzKCJ1aS10YWJzLWFjdGl2ZSIpJiZ0aGlzLmFuY2hvcnMubGVuZ3RoPjImJnRoaXMuX2FjdGl2YXRlKHQrKHQrMTx0aGlzLmFuY2hvcnMubGVuZ3RoPzE6LTEpKSxuLmRpc2FibGVkPWUubWFwKGUuZ3JlcChuLmRpc2FibGVkLGZ1bmN0aW9uKGUpe3JldHVybiBlIT09dH0pLGZ1bmN0aW9uKGUpe3JldHVybiBlPj10Py0tZTplfSksdGhpcy5yZWZyZXNoKCksdGhpcy5fdHJpZ2dlcigicmVtb3ZlIixudWxsLHRoaXMuX3VpKHIuZmluZCgiYSIpWzBdLGlbMF0pKSx0aGlzfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse2xlbmd0aDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFuY2hvcnMubGVuZ3RofX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2lkUHJlZml4OiJ1aS10YWJzLSJ9LF90YWJJZDpmdW5jdGlvbih0KXt2YXIgbj10LmlzKCJsaSIpP3QuZmluZCgiYVtocmVmXSIpOnQ7cmV0dXJuIG49blswXSxlKG4pLmNsb3Nlc3QoImxpIikuYXR0cigiYXJpYS1jb250cm9scyIpfHxuLnRpdGxlJiZuLnRpdGxlLnJlcGxhY2UoL1xzL2csIl8iKS5yZXBsYWNlKC9bXlx3XHUwMGMwLVx1RkZGRlwtXS9nLCIiKXx8dGhpcy5vcHRpb25zLmlkUHJlZml4K2koKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntwYW5lbFRlbXBsYXRlOiI8ZGl2PjwvZGl2PiJ9LF9jcmVhdGVQYW5lbDpmdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLm9wdGlvbnMucGFuZWxUZW1wbGF0ZSkuYXR0cigiaWQiLHQpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCEwKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO2UuYWN0aXZlPT09bnVsbCYmZS5zZWxlY3RlZCE9PXQmJihlLmFjdGl2ZT1lLnNlbGVjdGVkPT09LTE/ITE6ZS5zZWxlY3RlZCksdGhpcy5fc3VwZXIoKSxlLnNlbGVjdGVkPWUuYWN0aXZlLGUuc2VsZWN0ZWQ9PT0hMSYmKGUuc2VsZWN0ZWQ9LTEpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsdCl7aWYoZSE9PSJzZWxlY3RlZCIpcmV0dXJuIHRoaXMuX3N1cGVyKGUsdCk7dmFyIG49dGhpcy5vcHRpb25zO3RoaXMuX3N1cGVyKCJhY3RpdmUiLHQ9PT0tMT8hMTp0KSxuLnNlbGVjdGVkPW4uYWN0aXZlLG4uc2VsZWN0ZWQ9PT0hMSYmKG4uc2VsZWN0ZWQ9LTEpfSxfZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXJBcHBseShhcmd1bWVudHMpLHRoaXMub3B0aW9ucy5zZWxlY3RlZD10aGlzLm9wdGlvbnMuYWN0aXZlLHRoaXMub3B0aW9ucy5zZWxlY3RlZD09PSExJiYodGhpcy5vcHRpb25zLnNlbGVjdGVkPS0xKX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtvcHRpb25zOntzaG93Om51bGwsc2VsZWN0Om51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5hY3RpdmUhPT0hMSYmdGhpcy5fdHJpZ2dlcigic2hvdyIsbnVsbCx0aGlzLl91aSh0aGlzLmFjdGl2ZS5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSx0aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSlbMF0pKX0sX3RyaWdnZXI6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGkscz10aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyk7cmV0dXJuIHM/KGU9PT0iYmVmb3JlQWN0aXZhdGUiPyhyPW4ubmV3VGFiLmxlbmd0aD9uLm5ld1RhYjpuLm9sZFRhYixpPW4ubmV3UGFuZWwubGVuZ3RoP24ubmV3UGFuZWw6bi5vbGRQYW5lbCxzPXRoaXMuX3N1cGVyKCJzZWxlY3QiLHQse3RhYjpyLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHBhbmVsOmlbMF0saW5kZXg6ci5jbG9zZXN0KCJsaSIpLmluZGV4KCl9KSk6ZT09PSJhY3RpdmF0ZSImJm4ubmV3VGFiLmxlbmd0aCYmKHM9dGhpcy5fc3VwZXIoInNob3ciLHQse3RhYjpuLm5ld1RhYi5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSxwYW5lbDpuLm5ld1BhbmVsWzBdLGluZGV4Om4ubmV3VGFiLmNsb3Nlc3QoImxpIikuaW5kZXgoKX0pKSxzKTohMX19KSxlLndpZGdldCgidWkudGFicyIsZS51aS50YWJzLHtzZWxlY3Q6ZnVuY3Rpb24oZSl7ZT10aGlzLl9nZXRJbmRleChlKTtpZihlPT09LTEpe2lmKCF0aGlzLm9wdGlvbnMuY29sbGFwc2libGV8fHRoaXMub3B0aW9ucy5zZWxlY3RlZD09PS0xKXJldHVybjtlPXRoaXMub3B0aW9ucy5zZWxlY3RlZH10aGlzLmFuY2hvcnMuZXEoZSkudHJpZ2dlcih0aGlzLm9wdGlvbnMuZXZlbnQrdGhpcy5ldmVudE5hbWVzcGFjZSl9fSksZnVuY3Rpb24oKXt2YXIgdD0wO2Uud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2Nvb2tpZTpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLHQ7ZS5hY3RpdmU9PW51bGwmJmUuY29va2llJiYodD1wYXJzZUludCh0aGlzLl9jb29raWUoKSwxMCksdD09PS0xJiYodD0hMSksZS5hY3RpdmU9dCksdGhpcy5fc3VwZXIoKX0sX2Nvb2tpZTpmdW5jdGlvbihuKXt2YXIgcj1bdGhpcy5jb29raWV8fCh0aGlzLmNvb2tpZT10aGlzLm9wdGlvbnMuY29va2llLm5hbWV8fCJ1aS10YWJzLSIrICsrdCldO3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiYoci5wdXNoKG49PT0hMT8tMTpuKSxyLnB1c2godGhpcy5vcHRpb25zLmNvb2tpZSkpLGUuY29va2llLmFwcGx5KG51bGwscil9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc3VwZXIoKSx0aGlzLm9wdGlvbnMuY29va2llJiZ0aGlzLl9jb29raWUodGhpcy5vcHRpb25zLmFjdGl2ZSx0aGlzLm9wdGlvbnMuY29va2llKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbigpe3RoaXMuX3N1cGVyQXBwbHkoYXJndW1lbnRzKSx0aGlzLm9wdGlvbnMuY29va2llJiZ0aGlzLl9jb29raWUodGhpcy5vcHRpb25zLmFjdGl2ZSx0aGlzLm9wdGlvbnMuY29va2llKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9zdXBlcigpLHRoaXMub3B0aW9ucy5jb29raWUmJnRoaXMuX2Nvb2tpZShudWxsLHRoaXMub3B0aW9ucy5jb29raWUpfX0pfSgpLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse190cmlnZ2VyOmZ1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmV4dGVuZCh7fSxyKTtyZXR1cm4gdD09PSJsb2FkIiYmKGkucGFuZWw9aS5wYW5lbFswXSxpLnRhYj1pLnRhYi5maW5kKCIudWktdGFicy1hbmNob3IiKVswXSksdGhpcy5fc3VwZXIodCxuLGkpfX0pLGUud2lkZ2V0KCJ1aS50YWJzIixlLnVpLnRhYnMse29wdGlvbnM6e2Z4Om51bGx9LF9nZXRGeDpmdW5jdGlvbigpe3ZhciB0LG4scj10aGlzLm9wdGlvbnMuZng7cmV0dXJuIHImJihlLmlzQXJyYXkocik/KHQ9clswXSxuPXJbMV0pOnQ9bj1yKSxyP3tzaG93Om4saGlkZTp0fTpudWxsfSxfdG9nZ2xlOmZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbygpe24ucnVubmluZz0hMSxuLl90cmlnZ2VyKCJhY3RpdmF0ZSIsZSx0KX1mdW5jdGlvbiB1KCl7dC5uZXdUYWIuY2xvc2VzdCgibGkiKS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksci5sZW5ndGgmJnMuc2hvdz9yLmFuaW1hdGUocy5zaG93LHMuc2hvdy5kdXJhdGlvbixmdW5jdGlvbigpe28oKX0pOihyLnNob3coKSxvKCkpfXZhciBuPXRoaXMscj10Lm5ld1BhbmVsLGk9dC5vbGRQYW5lbCxzPXRoaXMuX2dldEZ4KCk7aWYoIXMpcmV0dXJuIHRoaXMuX3N1cGVyKGUsdCk7bi5ydW5uaW5nPSEwLGkubGVuZ3RoJiZzLmhpZGU/aS5hbmltYXRlKHMuaGlkZSxzLmhpZGUuZHVyYXRpb24sZnVuY3Rpb24oKXt0Lm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSx1KCl9KToodC5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksaS5oaWRlKCksdSgpKX19KSl9KShqUXVlcnkpOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsbil7dmFyIHI9KHQuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpfHwiIikuc3BsaXQoL1xzKy8pO3IucHVzaChuKSx0LmRhdGEoInVpLXRvb2x0aXAtaWQiLG4pLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiLGUudHJpbShyLmpvaW4oIiAiKSkpfWZ1bmN0aW9uIHIodCl7dmFyIG49dC5kYXRhKCJ1aS10b29sdGlwLWlkIikscj0odC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil8fCIiKS5zcGxpdCgvXHMrLyksaT1lLmluQXJyYXkobixyKTtpIT09LTEmJnIuc3BsaWNlKGksMSksdC5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLWlkIikscj1lLnRyaW0oci5qb2luKCIgIikpLHI/dC5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5IixyKTp0LnJlbW92ZUF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKX12YXIgdD0wO2Uud2lkZ2V0KCJ1aS50b29sdGlwIix7dmVyc2lvbjoiMS45LjIiLG9wdGlvbnM6e2NvbnRlbnQ6ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzKS5hdHRyKCJ0aXRsZSIpfSxoaWRlOiEwLGl0ZW1zOiJbdGl0bGVdOm5vdChbZGlzYWJsZWRdKSIscG9zaXRpb246e215OiJsZWZ0IHRvcCsxNSIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246ImZsaXBmaXQgZmxpcCJ9LHNob3c6ITAsdG9vbHRpcENsYXNzOm51bGwsdHJhY2s6ITEsY2xvc2U6bnVsbCxvcGVuOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vbih7bW91c2VvdmVyOiJvcGVuIixmb2N1c2luOiJvcGVuIn0pLHRoaXMudG9vbHRpcHM9e30sdGhpcy5wYXJlbnRzPXt9LHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsbil7dmFyIHI9dGhpcztpZih0PT09ImRpc2FibGVkIil7dGhpc1tuPyJfZGlzYWJsZSI6Il9lbmFibGUiXSgpLHRoaXMub3B0aW9uc1t0XT1uO3JldHVybn10aGlzLl9zdXBlcih0LG4pLHQ9PT0iY29udGVudCImJmUuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGUsdCl7ci5fdXBkYXRlQ29udGVudCh0KX0pfSxfZGlzYWJsZTpmdW5jdGlvbigpe3ZhciB0PXRoaXM7ZS5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24obixyKXt2YXIgaT1lLkV2ZW50KCJibHVyIik7aS50YXJnZXQ9aS5jdXJyZW50VGFyZ2V0PXJbMF0sdC5jbG9zZShpLCEwKX0pLHRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuaXMoIlt0aXRsZV0iKSYmdC5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIix0LmF0dHIoInRpdGxlIikpLmF0dHIoInRpdGxlIiwiIil9KX0sX2VuYWJsZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuYW5kU2VsZigpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpO3QuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZ0LmF0dHIoInRpdGxlIix0LmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSl9KX0sb3BlbjpmdW5jdGlvbih0KXt2YXIgbj10aGlzLHI9ZSh0P3QudGFyZ2V0OnRoaXMuZWxlbWVudCkuY2xvc2VzdCh0aGlzLm9wdGlvbnMuaXRlbXMpO2lmKCFyLmxlbmd0aHx8ci5kYXRhKCJ1aS10b29sdGlwLWlkIikpcmV0dXJuO3IuYXR0cigidGl0bGUiKSYmci5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIixyLmF0dHIoInRpdGxlIikpLHIuZGF0YSgidWktdG9vbHRpcC1vcGVuIiwhMCksdCYmdC50eXBlPT09Im1vdXNlb3ZlciImJnIucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMpLHI7dC5kYXRhKCJ1aS10b29sdGlwLW9wZW4iKSYmKHI9ZS5FdmVudCgiYmx1ciIpLHIudGFyZ2V0PXIuY3VycmVudFRhcmdldD10aGlzLG4uY2xvc2UociwhMCkpLHQuYXR0cigidGl0bGUiKSYmKHQudW5pcXVlSWQoKSxuLnBhcmVudHNbdGhpcy5pZF09e2VsZW1lbnQ6dGhpcyx0aXRsZTp0LmF0dHIoInRpdGxlIil9LHQuYXR0cigidGl0bGUiLCIiKSl9KSx0aGlzLl91cGRhdGVDb250ZW50KHIsdCl9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj10aGlzLm9wdGlvbnMuY29udGVudCxpPXRoaXMscz10P3QudHlwZTpudWxsO2lmKHR5cGVvZiByPT0ic3RyaW5nIilyZXR1cm4gdGhpcy5fb3Blbih0LGUscik7bj1yLmNhbGwoZVswXSxmdW5jdGlvbihuKXtpZighZS5kYXRhKCJ1aS10b29sdGlwLW9wZW4iKSlyZXR1cm47aS5fZGVsYXkoZnVuY3Rpb24oKXt0JiYodC50eXBlPXMpLHRoaXMuX29wZW4odCxlLG4pfSl9KSxuJiZ0aGlzLl9vcGVuKHQsZSxuKX0sX29wZW46ZnVuY3Rpb24odCxyLGkpe2Z1bmN0aW9uIGYoZSl7YS5vZj1lO2lmKHMuaXMoIjpoaWRkZW4iKSlyZXR1cm47cy5wb3NpdGlvbihhKX12YXIgcyxvLHUsYT1lLmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pO2lmKCFpKXJldHVybjtzPXRoaXMuX2ZpbmQocik7aWYocy5sZW5ndGgpe3MuZmluZCgiLnVpLXRvb2x0aXAtY29udGVudCIpLmh0bWwoaSk7cmV0dXJufXIuaXMoIlt0aXRsZV0iKSYmKHQmJnQudHlwZT09PSJtb3VzZW92ZXIiP3IuYXR0cigidGl0bGUiLCIiKTpyLnJlbW92ZUF0dHIoInRpdGxlIikpLHM9dGhpcy5fdG9vbHRpcChyKSxuKHIscy5hdHRyKCJpZCIpKSxzLmZpbmQoIi51aS10b29sdGlwLWNvbnRlbnQiKS5odG1sKGkpLHRoaXMub3B0aW9ucy50cmFjayYmdCYmL15tb3VzZS8udGVzdCh0LnR5cGUpPyh0aGlzLl9vbih0aGlzLmRvY3VtZW50LHttb3VzZW1vdmU6Zn0pLGYodCkpOnMucG9zaXRpb24oZS5leHRlbmQoe29mOnJ9LHRoaXMub3B0aW9ucy5wb3NpdGlvbikpLHMuaGlkZSgpLHRoaXMuX3Nob3cocyx0aGlzLm9wdGlvbnMuc2hvdyksdGhpcy5vcHRpb25zLnNob3cmJnRoaXMub3B0aW9ucy5zaG93LmRlbGF5JiYodT1zZXRJbnRlcnZhbChmdW5jdGlvbigpe3MuaXMoIjp2aXNpYmxlIikmJihmKGEub2YpLGNsZWFySW50ZXJ2YWwodSkpfSxlLmZ4LmludGVydmFsKSksdGhpcy5fdHJpZ2dlcigib3BlbiIsdCx7dG9vbHRpcDpzfSksbz17a2V5dXA6ZnVuY3Rpb24odCl7aWYodC5rZXlDb2RlPT09ZS51aS5rZXlDb2RlLkVTQ0FQRSl7dmFyIG49ZS5FdmVudCh0KTtuLmN1cnJlbnRUYXJnZXQ9clswXSx0aGlzLmNsb3NlKG4sITApfX0scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlVG9vbHRpcChzKX19O2lmKCF0fHx0LnR5cGU9PT0ibW91c2VvdmVyIilvLm1vdXNlbGVhdmU9ImNsb3NlIjtpZighdHx8dC50eXBlPT09ImZvY3VzaW4iKW8uZm9jdXNvdXQ9ImNsb3NlIjt0aGlzLl9vbighMCxyLG8pfSxjbG9zZTpmdW5jdGlvbih0KXt2YXIgbj10aGlzLGk9ZSh0P3QuY3VycmVudFRhcmdldDp0aGlzLmVsZW1lbnQpLHM9dGhpcy5fZmluZChpKTtpZih0aGlzLmNsb3NpbmcpcmV0dXJuO2kuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpJiZpLmF0dHIoInRpdGxlIixpLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSkscihpKSxzLnN0b3AoITApLHRoaXMuX2hpZGUocyx0aGlzLm9wdGlvbnMuaGlkZSxmdW5jdGlvbigpe24uX3JlbW92ZVRvb2x0aXAoZSh0aGlzKSl9KSxpLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtb3BlbiIpLHRoaXMuX29mZihpLCJtb3VzZWxlYXZlIGZvY3Vzb3V0IGtleXVwIiksaVswXSE9PXRoaXMuZWxlbWVudFswXSYmdGhpcy5fb2ZmKGksInJlbW92ZSIpLHRoaXMuX29mZih0aGlzLmRvY3VtZW50LCJtb3VzZW1vdmUiKSx0JiZ0LnR5cGU9PT0ibW91c2VsZWF2ZSImJmUuZWFjaCh0aGlzLnBhcmVudHMsZnVuY3Rpb24odCxyKXtlKHIuZWxlbWVudCkuYXR0cigidGl0bGUiLHIudGl0bGUpLGRlbGV0ZSBuLnBhcmVudHNbdF19KSx0aGlzLmNsb3Npbmc9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLHQse3Rvb2x0aXA6c30pLHRoaXMuY2xvc2luZz0hMX0sX3Rvb2x0aXA6ZnVuY3Rpb24obil7dmFyIHI9InVpLXRvb2x0aXAtIit0KyssaT1lKCI8ZGl2PiIpLmF0dHIoe2lkOnIscm9sZToidG9vbHRpcCJ9KS5hZGRDbGFzcygidWktdG9vbHRpcCB1aS13aWRnZXQgdWktY29ybmVyLWFsbCB1aS13aWRnZXQtY29udGVudCAiKyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzfHwiIikpO3JldHVybiBlKCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS10b29sdGlwLWNvbnRlbnQiKS5hcHBlbmRUbyhpKSxpLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksZS5mbi5iZ2lmcmFtZSYmaS5iZ2lmcmFtZSgpLHRoaXMudG9vbHRpcHNbcl09bixpfSxfZmluZDpmdW5jdGlvbih0KXt2YXIgbj10LmRhdGEoInVpLXRvb2x0aXAtaWQiKTtyZXR1cm4gbj9lKCIjIituKTplKCl9LF9yZW1vdmVUb29sdGlwOmZ1bmN0aW9uKGUpe2UucmVtb3ZlKCksZGVsZXRlIHRoaXMudG9vbHRpcHNbZS5hdHRyKCJpZCIpXX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdD10aGlzO2UuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKG4scil7dmFyIGk9ZS5FdmVudCgiYmx1ciIpO2kudGFyZ2V0PWkuY3VycmVudFRhcmdldD1yWzBdLHQuY2xvc2UoaSwhMCksZSgiIyIrbikucmVtb3ZlKCksci5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJihyLmF0dHIoInRpdGxlIixyLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSksci5yZW1vdmVEYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSl9fSl9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/jquery.highlighttextarea.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpRdWVyeSBoaWdobGlnaHRUZXh0YXJlYSAyLjAKICoKICogQ29weXJpZ2h0IDIwMTIsIERhbWllbiAiTWlzdGljIiBTb3JlbAogKiAgICBodHRwOi8vd3d3LnN0cmFuZ2VwbGFuZXQuZnIKICovCgouaGlnaGxpZ2h0VGV4dGFyZWEgewogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5oaWdobGlnaHRUZXh0YXJlYSAgLmhpZ2hsaWdodGVyQ29udGFpbmVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgYm9yZGVyOiBub25lOwogIG1hcmdpbjogMDsKICBvdmVyZmxvdzogaGlkZGVuOwp9Ci5oaWdobGlnaHRUZXh0YXJlYSAgLmhpZ2hsaWdodGVyIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgYm9yZGVyOiBub25lOwogIHBhZGRpbmc6IDA7CiAgbWFyZ2luOiAwOwogIGNvbG9yOiB0cmFuc3BhcmVudDsKICBjdXJzb3I6IHRleHQ7CiAgb3ZlcmZsb3c6IGhpZGRlbjsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgd29yZC13cmFwOiBicmVhay13b3JkOwp9Ci5oaWdobGlnaHRUZXh0YXJlYSAgLmhpZ2hsaWdodGVyLmRlYnVnIHsKICBjb2xvcjogI2YwMDsKICBib3JkZXI6IDFweCBzb2xpZCAjZjAwOwogIG1hcmdpbjogLTFweDsKfQouaGlnaGxpZ2h0VGV4dGFyZWEgdGV4dGFyZWEgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBsZWZ0OiAwOwogIHRvcDogMDsKICByZXNpemU6IG5vbmU7CiAgd2hpdGUtc3BhY2VzOiBwcmUtd3JhcDsKICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Cn0KLmhpZ2hsaWdodFRleHRhcmVhICAuaGlnaGxpZ2h0IHsKICBsaW5lLWhlaWdodDogaW5oZXJpdDsKfQouaGlnaGxpZ2h0VGV4dGFyZWEgLnVpLXJlc2l6YWJsZS1zZSB7CiAgYm90dG9tOiAxM3B4OwogIHJpZ2h0OiAxcHg7Cn0=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/jquery.highlighttextarea.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIGpRdWVyeSBoaWdobGlnaHRUZXh0YXJlYSAyLjAKICoKICogQ29weXJpZ2h0IDIwMTIsIERhbWllbiAiTWlzdGljIiBTb3JlbAogKiAgICBodHRwOi8vd3d3LnN0cmFuZ2VwbGFuZXQuZnIKICoKICogdGhhbmtzIHRvIEp1bGllbiBMIGZvciB0aGUgbWFpbiBhbGdvcnl0aG0KICogICAgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzU5OTE5OQogKgogKiB0aGFua3MgdG8gUGFzY2FsIFdhY2tlciBmb3IgalF1ZXJ5IHdyYXBwZXIgYW5kIEFQSSBtZXRob2RzCiAqICAgIHBhc2NhbC53YWNrZXJAdGlsbGxhdGUuY29tCiAqCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAzIGxpY2Vuc2VzLgogKiAgICBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocAogKiAgICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwKICoKICogRGVwZW5kczoKICoJICBqcXVlcnkuanMKICogICAganF1ZXJ5LXVpLmpzIHwgcmVzaXphYmxlIChvcHRpb25hbCkKICovCiAgCgooZnVuY3Rpb24oJCkgewogICAgLyoqCiAgICAgKiBQbHVnaW4gZGVjbGFyYXRpb24KICAgICAqLwogICAgJC5mbi5oaWdobGlnaHRUZXh0YXJlYSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHsKICAgICAgICAvLyBjYWxsYWJsZSBwdWJsaWMgbWV0aG9kcwogICAgICAgIHZhciBjYWxsYWJsZSA9IFsnaGlnaGxpZ2h0JywnZW5hYmxlJywnZGlzYWJsZScsJ3NldE9wdGlvbnMnLCdzZXRXb3JkcyddOwogICAgICAgIAogICAgICAgIHZhciBwbHVnaW4gPSAkKHRoaXMpLmRhdGEoJ2hpZ2hsaWdodFRleHRhcmVhJyk7CiAgICAgICAgCiAgICAgICAgLy8gYWxyZWFkeSBpbnN0YW50aWF0ZWQgYW5kIHRyeWluZyB0byBleGVjdXRlIGEgbWV0aG9kCiAgICAgICAgaWYgKHBsdWdpbiAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgaWYgKCQuaW5BcnJheShvcHRpb25zLGNhbGxhYmxlKSE9PWZhbHNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcGx1Z2luW29wdGlvbnNdLmFwcGx5KHBsdWdpbiwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyAnTWV0aG9kICInICsgb3B0aW9ucyArICciIGRvZXMgbm90IGV4aXN0IG9uIGpRdWVyeS5oaWdobGlnaHRUZXh0YXJlYSc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gbm90IGluc3RhbnRpYXRlZCBhbmQgdHJ5aW5nIHRvIHBhc3Mgb3B0aW9ucyBvYmplY3QgKG9yIG5vdGhpbmcpCiAgICAgICAgZWxzZSBpZiAoIXBsdWdpbiAmJiAodHlwZW9mIG9wdGlvbnMgPT09ICdvYmplY3QnIHx8ICFvcHRpb25zKSkgewogICAgICAgICAgICBpZiAoIW9wdGlvbnMpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZXh0ZW5kIGRlZmF1bHRzCiAgICAgICAgICAgIG9wdGlvbnMgPSAkLmV4dGVuZCh7fSwgJC5mbi5oaWdobGlnaHRUZXh0YXJlYS5kZWZhdWx0cywgb3B0aW9ucyk7CiAgICAgICAgICAgIG9wdGlvbnMucmVnUGFyYW0gPSBvcHRpb25zLmNhc2VTZW5zaXRpdmUgPyAnZycgOiAnZ2knOwoKICAgICAgICAgICAgLy8gZm9yIGVhY2ggZWxlbWVudCBpbnN0YW50aWF0ZSB0aGUgcGx1Z2luCiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICB2YXIgcGx1Z2luID0gJCh0aGlzKS5kYXRhKCdoaWdobGlnaHRUZXh0YXJlYScpOwoKICAgICAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2Ugb2YgdGhlIHBsdWdpbiBpZiB0aGUgcGx1Z2luIGlzbid0IGluaXRpYWxpc2VkCiAgICAgICAgICAgICAgICBpZiAoIXBsdWdpbikgewogICAgICAgICAgICAgICAgICAgIHBsdWdpbiA9IG5ldyAkLmhpZ2hsaWdodFRleHRhcmVhKCQodGhpcyksIG9wdGlvbnMpOwogICAgICAgICAgICAgICAgICAgIHBsdWdpbi5pbml0KCk7CiAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5kYXRhKCdoaWdobGlnaHRUZXh0YXJlYScsIHBsdWdpbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLyoqCiAgICAgKiBEZWZhdWx0cwogICAgICovCiAgICAkLmZuLmhpZ2hsaWdodFRleHRhcmVhLmRlZmF1bHRzID0gewogICAgICAgIHdvcmRzOiAgICAgICAgIFtdLAogICAgICAgIGNvbG9yOiAgICAgICAgICcjZmZmZjAwJywKICAgICAgICBjYXNlU2Vuc2l0aXZlOiB0cnVlLAogICAgICAgIHJlc2l6YWJsZTogICAgIGZhbHNlLAogICAgICAgIGlkOiAgICAgICAgICAgIG51bGwsCiAgICAgICAgZGVidWc6ICAgICAgICAgZmFsc2UKICAgIH07CgogICAgLyoqCiAgICAgKiBNYWluIHBsdWdpbiBmdW5jdGlvbgogICAgICovCiAgICAkLmhpZ2hsaWdodFRleHRhcmVhID0gZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykgewogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgICAgCiAgICAgICAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBqUXVlcnkpIHsKICAgICAgICAgICAgdGhpcy4kdGV4dGFyZWEgPSBlbGVtZW50OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdGhpcy4kdGV4dGFyZWEgPSAkKGVsZW1lbnQpOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB0aGlzLiRtYWluID0gbnVsbDsKICAgICAgICB0aGlzLiRoaWdobGlnaHRlckNvbnRhaW5lciA9IG51bGw7CiAgICAgICAgdGhpcy4kaGlnaGxpZ2h0ZXIgPSBudWxsOwogICAgICAgIAogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgICogaW5pdCB0aGUgcGx1Z2luCiAgICAgICAgICogc2NvcGU6IHByaXZhdGUKICAgICAgICAgKi8KICAgICAgICB0aGlzLmluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gYnVpbGQgdGhlIEhUTUwgd3JhcHBlcgogICAgICAgICAgICBpZiAodGhpcy4kdGV4dGFyZWEuY2xvc2VzdCgnLmhpZ2hsaWdodFRleHRhcmVhJykubGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuJHRleHRhcmVhLndyYXAoJzxkaXYgY2xhc3M9ImhpZ2hsaWdodFRleHRhcmVhIiAvPicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJG1haW4gPSB0aGlzLiR0ZXh0YXJlYS5wYXJlbnQoJy5oaWdobGlnaHRUZXh0YXJlYScpOwoKICAgICAgICAgICAgaWYgKHRoaXMuJG1haW4uZmluZCgnLmhpZ2hsaWdodGVyQ29udGFpbmVyJykubGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1haW4ucHJlcGVuZCgnPGRpdiBjbGFzcz0iaGlnaGxpZ2h0ZXJDb250YWluZXIiPjwvZGl2PicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodGVyQ29udGFpbmVyID0gdGhpcy4kbWFpbi5jaGlsZHJlbignLmhpZ2hsaWdodGVyQ29udGFpbmVyJyk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAodGhpcy4kaGlnaGxpZ2h0ZXJDb250YWluZXIuZmluZCgnLmhpZ2hsaWdodGVyJykubGVuZ3RoIDw9IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodGVyQ29udGFpbmVyLmh0bWwoJzxkaXYgY2xhc3M9ImhpZ2hsaWdodGVyIj48L2Rpdj4nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRlciA9IHRoaXMuJGhpZ2hsaWdodGVyQ29udGFpbmVyLmNoaWxkcmVuKCcuaGlnaGxpZ2h0ZXInKTsKCiAgICAgICAgICAgIC8vIHNldCBpZAogICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmlkICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuJG1haW4uYXR0cignaWQnLCB0aGlzLm9wdGlvbnMuaWQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBzZXQgY3NzCiAgICAgICAgICAgIHRoaXMudXBkYXRlQ3NzKCk7CgogICAgICAgICAgICAvLyBiaW5kIHRoZSBldmVudHMKICAgICAgICAgICAgdGhpcy5iaW5kRXZlbnRzKCk7CgogICAgICAgICAgICAvLyBhcHBseSB0aGUgcmVzaXplYWJsZQogICAgICAgICAgICB0aGlzLmFwcGx5UmVzaXphYmxlKCk7CgogICAgICAgICAgICAvLyBoaWdobGlnaHQgY29udGVudAogICAgICAgICAgICB0aGlzLmhpZ2hsaWdodCgpOwogICAgICAgIH0KCiAgICAgICAgLyoKICAgICAgICAgKiBjb21wdXRlIGhpZ2hsaWdodAogICAgICAgICAqIEBwYXJhbSBkZWxheTogYm9vbGVhbiAtIHVzZSBhIGRlbGF5ZWQgdXBkYXRlCiAgICAgICAgICogc2NvcGU6IHB1YmxpYwogICAgICAgICAqLwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ID0gZnVuY3Rpb24oZGVsYXkpIHsKICAgICAgICAgICAgaWYgKGRlbGF5PT1udWxsIHx8IGRlbGF5PT1mYWxzZSkgewogICAgICAgICAgICAgICAgdGhpcy5hcHBseVRleHQodGhpcy4kdGV4dGFyZWEudmFsKCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5jb25kZW5zYXRvcigkLnByb3h5KGZ1bmN0aW9uKCl7IAogICAgICAgICAgICAgICAgICB0aGlzLmFwcGx5VGV4dCh0aGlzLiR0ZXh0YXJlYS52YWwoKSk7IAogICAgICAgICAgICAgICAgfSwgdGhpcyksIDEwMCwgMzAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHRoaXMuJHRleHRhcmVhLmRhdGEoJ2hpZ2hsaWdodFRleHRhcmVhRXZlbnRzJyk9PT10cnVlOwogICAgICAgIH0KCiAgICAgICAgLyoKICAgICAgICAgKiB1cGRhdGUgcGx1Z2luIG9wdGlvbnMKICAgICAgICAgKiBzY29wZTogcHVibGljCiAgICAgICAgICovCiAgICAgICAgdGhpcy5zZXRPcHRpb25zID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT0gJ29iamVjdCcpIHsKICAgICAgICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgdGhpcy5vcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgb3B0aW9ucyk7CiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5yZWdQYXJhbSA9IHRoaXMub3B0aW9ucy5jYXNlU2Vuc2l0aXZlID8gJ2cnIDogJ2dpJzsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGVidWcpIHsKICAgICAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodGVyLmFkZENsYXNzKCdkZWJ1ZycpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy4kaGlnaGxpZ2h0ZXIucmVtb3ZlQ2xhc3MoJ2RlYnVnJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLiR0ZXh0YXJlYS5kYXRhKCdoaWdobGlnaHRUZXh0YXJlYUV2ZW50cycpPT09dHJ1ZSkgewogICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvKgogICAgICAgICAqIHVwZGF0ZSB3b3JkcyBsaXN0CiAgICAgICAgICogc2NvcGU6IHB1YmxpYwogICAgICAgICAqLwogICAgICAgIHRoaXMuc2V0V29yZHMgPSBmdW5jdGlvbih3b3JkcykgewogICAgICAgICAgICBpZiAodHlwZW9mIHdvcmRzICE9PSAnc3RyaW5nJyAmJiAhKHdvcmRzIGluc3RhbmNlb2YgQXJyYXkpKSB7CiAgICAgICAgICAgICAgICB3b3JkcyA9IFtdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB3b3JkcyA9PT0gJ3N0cmluZycpIHsKICAgICAgICAgICAgICAgIHdvcmRzID0gW3dvcmRzXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLm9wdGlvbnMud29yZHMgPSB3b3JkczsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLiR0ZXh0YXJlYS5kYXRhKCdoaWdobGlnaHRUZXh0YXJlYUV2ZW50cycpPT09dHJ1ZSkgewogICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQoKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgICogYWRkIGV2ZW50cyBoYW5kbGVycwogICAgICAgICAqIHNjb3BlOiBwcml2YXRlCiAgICAgICAgICovCiAgICAgICAgdGhpcy5iaW5kRXZlbnRzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBldmVudHMgPSB0aGlzLiR0ZXh0YXJlYS5kYXRhKCdoaWdobGlnaHRUZXh0YXJlYUV2ZW50cycpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKHR5cGVvZiBldmVudHMgIT0gJ2Jvb2xlYW4nIHx8IGV2ZW50cyAhPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgLy8gcHJldmVuZCBwb3NpdGlvbm5pbmcgZXJyb3JzIGJ5IGFsbHdheXMgZm9jdXNpbmcgdGhlIHRleHRhcmVhCiAgICAgICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRlci5vbih7CiAgICAgICAgICAgICAgICAgICdjbGljay5oaWdobGlnaHRUZXh0YXJlYScgOiAkLnByb3h5KGZ1bmN0aW9uKCl7IHRoaXMuJHRleHRhcmVhLmZvY3VzKCk7IH0sIHRoaXMpCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgLy8gYWRkIHRyaWdnZXJzIHRvIHRleHRhcmVhCiAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0YXJlYS5vbih7CiAgICAgICAgICAgICAgICAgICAgJ2lucHV0LmhpZ2hsaWdodFRleHRhcmVhJyA6ICAkLnByb3h5KGZ1bmN0aW9uKCl7IHRoaXMuaGlnaGxpZ2h0KHRydWUpOyB9LCB0aGlzKSwKICAgICAgICAgICAgICAgICAgICAncmVzaXplLmhpZ2hsaWdodFRleHRhcmVhJyA6ICQucHJveHkoZnVuY3Rpb24oKXsgdGhpcy51cGRhdGVTaXplUG9zaXRpb24odHJ1ZSk7IH0sIHRoaXMpLAogICAgICAgICAgICAgICAgICAgICdzY3JvbGwuaGlnaGxpZ2h0VGV4dGFyZWEnIDogJC5wcm94eShmdW5jdGlvbigpeyB0aGlzLnVwZGF0ZVNpemVQb3NpdGlvbigpOyB9LCB0aGlzKQogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgdGhpcy4kdGV4dGFyZWEuZGF0YSgnaGlnaGxpZ2h0VGV4dGFyZWFFdmVudHMnLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgIAogICAgICAgIC8qCiAgICAgICAgICogcmVtb3ZlIGV2ZW50IGhhbmRsZXJzCiAgICAgICAgICogc2NvcGU6IHByaXZhdGUKICAgICAgICAgKi8KICAgICAgICB0aGlzLnVuYmluZEV2ZW50cyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRlci5vZmYoJ2NsaWNrLmhpZ2hsaWdodFRleHRhcmVhJyk7CiAgICAgICAgICAgIHRoaXMuJHRleHRhcmVhLm9mZignaW5wdXQuaGlnaGxpZ2h0VGV4dGFyZWEgc2Nyb2xsLmhpZ2hsaWdodFRleHRhcmVhIHJlc2l6ZS5oaWdobGlnaHRUZXh0YXJlYScpOwogICAgICAgICAgICB0aGlzLiR0ZXh0YXJlYS5kYXRhKCdoaWdobGlnaHRUZXh0YXJlYUV2ZW50cycsIGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICAgKiBlbmFibGUgdGhlIGhpZ2hsaWdodGluZwogICAgICAgICAqIHNjb3BlOiBwdWJsaWMKICAgICAgICAgKi8KICAgICAgICB0aGlzLmVuYWJsZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmJpbmRFdmVudHMoKTsKICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQoKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLyoKICAgICAgICAgKiBkaXNhYmxlIHRoZSBoaWdobGlnaHRpbmcKICAgICAgICAgKiBzY29wZTogcHVibGljCiAgICAgICAgICovCiAgICAgICAgdGhpcy5kaXNhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMudW5iaW5kRXZlbnRzKCk7CiAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodGVyLmh0bWwodGhpcy5odG1sX2VudGl0aWVzKHRoaXMuJHRleHRhcmVhLnZhbCgpKSk7CiAgICAgICAgfQoKICAgICAgICAvKgogICAgICAgICAqIHNldCBzdHlsZSBvZiBjb250YWluZXJzCiAgICAgICAgICogc2NvcGU6IHByaXZhdGUKICAgICAgICAgKi8KICAgICAgICB0aGlzLnVwZGF0ZUNzcyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250YWluZXIgaGFzIHRoZSBzYW1lIHNpemUgYW5kIHBvc2l0aW9uIHRoYW4gdGhlIG9yaWdpbmFsIHRleHRhcmVhCiAgICAgICAgICAgIHRoaXMuY2xvbmVDc3ModGhpcy4kdGV4dGFyZWEsIHRoaXMuJG1haW4sIFsKICAgICAgICAgICAgICAgICdmbG9hdCcsJ3ZlcnRpY2FsLWFsaWduJwogICAgICAgICAgICBdKTsKICAgICAgICAgICAgdGhpcy4kbWFpbi5jc3MoewogICAgICAgICAgICAgICAgJ3dpZHRoJzogIHRoaXMuJHRleHRhcmVhLm91dGVyV2lkdGgodHJ1ZSksCiAgICAgICAgICAgICAgICAnaGVpZ2h0JzogdGhpcy4kdGV4dGFyZWEub3V0ZXJIZWlnaHQodHJ1ZSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyB0aGUgaGlnaGxpZ2h0ZXIgY29udGFpbmVyIGlzIHBvc2l0aW9ubmVkIGF0ICJyZWFsIiB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlIHRleHRhcmVhIGFuZCB0YWtlcyBpdHMgYmFja2dyb3VuZAogICAgICAgICAgICB0aGlzLmNsb25lQ3NzKHRoaXMuJHRleHRhcmVhLCB0aGlzLiRoaWdobGlnaHRlckNvbnRhaW5lciwgWwogICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnLCdiYWNrZ3JvdW5kLWltYWdlJywnYmFja2dyb3VuZC1jb2xvcicsJ2JhY2tncm91bmQtcG9zaXRpb24nLCdiYWNrZ3JvdW5kLXJlcGVhdCcsJ2JhY2tncm91bmQtb3JpZ2luJywnYmFja2dyb3VuZC1jbGlwJywnYmFja2dyb3VuZC1zaXplJywKICAgICAgICAgICAgICAgICdwYWRkaW5nLXRvcCcsJ3BhZGRpbmctcmlnaHQnLCdwYWRkaW5nLWJvdHRvbScsJ3BhZGRpbmctbGVmdCcKICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodGVyQ29udGFpbmVyLmNzcyh7CiAgICAgICAgICAgICAgICAndG9wJzogICAgdGhpcy50b1B4KHRoaXMuJHRleHRhcmVhLmNzcygnbWFyZ2luLXRvcCcpKSArIHRoaXMudG9QeCh0aGlzLiR0ZXh0YXJlYS5jc3MoJ2JvcmRlci10b3Atd2lkdGgnKSksCiAgICAgICAgICAgICAgICAnbGVmdCc6ICAgdGhpcy50b1B4KHRoaXMuJHRleHRhcmVhLmNzcygnbWFyZ2luLWxlZnQnKSkgKyB0aGlzLnRvUHgodGhpcy4kdGV4dGFyZWEuY3NzKCdib3JkZXItbGVmdC13aWR0aCcpKSwKICAgICAgICAgICAgICAgICd3aWR0aCc6ICB0aGlzLiR0ZXh0YXJlYS53aWR0aCgpLAogICAgICAgICAgICAgICAgJ2hlaWdodCc6IHRoaXMuJHRleHRhcmVhLmhlaWdodCgpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gdGhlIGhpZ2hsaWdodGVyIGhhcyB0aGUgc2FtZSBzaXplIHRoYW4gdGhlICJpbm5lciIgdGV4dGFyZWEgYW5kIG11c3QgaGF2ZSB0aGUgc2FtZSBmb250IHByb3BlcnRpZXMKICAgICAgICAgICAgdGhpcy5jbG9uZUNzcyh0aGlzLiR0ZXh0YXJlYSwgdGhpcy4kaGlnaGxpZ2h0ZXIsIFsKICAgICAgICAgICAgICAgICdmb250LXNpemUnLCdmb250LWZhbWlseScsJ2ZvbnQtc3R5bGUnLCdmb250LXdlaWdodCcsJ2xpbmUtaGVpZ2h0JywKICAgICAgICAgICAgICAgICd2ZXJ0aWNhbC1hbGlnbicsJ3dvcmQtc3BhY2luZycsJ3RleHQtYWxpZ24nCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRlci5jc3MoewogICAgICAgICAgICAgICAgJ3dpZHRoJzogIHRoaXMuJHRleHRhcmVhLndpZHRoKCksCiAgICAgICAgICAgICAgICAnaGVpZ2h0JzogdGhpcy4kdGV4dGFyZWEuaGVpZ2h0KCkKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBub3cgbWFrZSB0aGUgdGV4dGFyZWEgdHJhbnNwYXJlbnQgdG8gc2VlIHRoZSBoaWdobGlnaHRlciB0aHJvdWdodAogICAgICAgICAgICB0aGlzLiR0ZXh0YXJlYS5jc3MoewogICAgICAgICAgICAgICAgJ2JhY2tncm91bmQnOiAnbm9uZScsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gZGlzcGxheSBoaWdobGlnaHRlciB0ZXh0IGZvciBkZWJ1Z2luZwogICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmRlYnVnKSB7CiAgICAgICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRlci5hZGRDbGFzcygnZGVidWcnKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKgogICAgICAgICAqIHNldCB0ZXh0YXJlYSBhcyByZXNpemFibGUKICAgICAgICAgKiBzY29wZTogcHJpdmF0ZQogICAgICAgICAqLwogICAgICAgIHRoaXMuYXBwbHlSZXNpemFibGUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5yZXNpemFibGUgJiYgalF1ZXJ5LnVpKSB7CiAgICAgICAgICAgICAgICB0aGlzLiR0ZXh0YXJlYS5yZXNpemFibGUoewogICAgICAgICAgICAgICAgICAgICdoYW5kbGVzJzogJ3NlJywKICAgICAgICAgICAgICAgICAgICAncmVzaXplJzogICQucHJveHkoZnVuY3Rpb24oKSB7IHRoaXMudXBkYXRlU2l6ZVBvc2l0aW9uKHRydWUpOyB9LCB0aGlzKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgICogcmVwbGFjZSAkaGlnaGxpZ2h0ZXIgaHRtbCB3aXRoIGZvcm1hdGVkICR0ZXh0YXJlYSBjb250ZW50CiAgICAgICAgICogc2NvcGU6IHByaXZhdGUKICAgICAgICAgKi8KICAgICAgICB0aGlzLmFwcGx5VGV4dCA9IGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICAgICAgdGV4dCA9IHRoaXMuaHRtbF9lbnRpdGllcyh0ZXh0KTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMud29yZHMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgcmVwbGFjZSA9IG5ldyBBcnJheSgpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8dGhpcy5vcHRpb25zLndvcmRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgIHJlcGxhY2UucHVzaCh0aGlzLmh0bWxfZW50aXRpZXModGhpcy5vcHRpb25zLndvcmRzW2ldKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoCiAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoJygnK3JlcGxhY2Uuam9pbignfCcpKycpJywgdGhpcy5vcHRpb25zLnJlZ1BhcmFtKSwgCiAgICAgICAgICAgICAgICAgICI8c3BhbiBjbGFzcz1cImhpZ2hsaWdodFwiIHN0eWxlPVwiYmFja2dyb3VuZC1jb2xvcjoiK3RoaXMub3B0aW9ucy5jb2xvcisiO1wiPiQxPC9zcGFuPiIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHRoaXMuJGhpZ2hsaWdodGVyLmh0bWwodGV4dCk7CiAgICAgICAgICAgIHRoaXMudXBkYXRlU2l6ZVBvc2l0aW9uKCk7CiAgICAgICAgfQoKICAgICAgICAvKgogICAgICAgICAqIGFkYXB0ICRoaWdobGlnaHRlciBzaXplIGFuZCBwb3NpdGlvbiBhY2NvcmRpbmcgdG8gJHRleHRhcmVhIHNpemUgYW5kIHNjcm9sbCBiYXIKICAgICAgICAgKiBAcGFyYW0gZm9yY2VkOiBib29sZWFuIC0gdXBkYXRlIGNvbnRhaW5lcnMgc2l6ZQogICAgICAgICAqIHNjb3BlOiBwcml2YXRlCiAgICAgICAgICovCiAgICAgICAgdGhpcy51cGRhdGVTaXplUG9zaXRpb24gPSBmdW5jdGlvbihmb3JjZWQpIHsKICAgICAgICAgICAgLy8gcmVzaXplIGNvbnRhaW5lcnMKICAgICAgICAgICAgaWYgKGZvcmNlZCkgewogICAgICAgICAgICAgICAgdGhpcy4kbWFpbi5jc3MoewogICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICB0aGlzLiR0ZXh0YXJlYS5vdXRlcldpZHRoKHRydWUpLAogICAgICAgICAgICAgICAgICAgICdoZWlnaHQnOiB0aGlzLiR0ZXh0YXJlYS5vdXRlckhlaWdodCh0cnVlKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRlckNvbnRhaW5lci5jc3MoewogICAgICAgICAgICAgICAgICAgICd3aWR0aCc6ICB0aGlzLiR0ZXh0YXJlYS53aWR0aCgpLAogICAgICAgICAgICAgICAgICAgICdoZWlnaHQnOiB0aGlzLiR0ZXh0YXJlYS5oZWlnaHQoKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAodGhpcy4kdGV4dGFyZWFbMF0uY2xpZW50SGVpZ2h0IDwgdGhpcy4kdGV4dGFyZWFbMF0uc2Nyb2xsSGVpZ2h0ICYmIHRoaXMuJHRleHRhcmVhLmNzcygnb3ZlcmZsb3cnKSAhPSAnaGlkZGVuJyAmJiB0aGlzLiR0ZXh0YXJlYS5jc3MoJ292ZXJmbG93LXknKSAhPSAnaGlkZGVuJykKICAgICAgICAgICAgICB8fCB0aGlzLiR0ZXh0YXJlYS5jc3MoJ292ZXJmbG93JykgPT0gJ3Njcm9sbCcgfHwgdGhpcy4kdGV4dGFyZWEuY3NzKCdvdmVyZmxvdy15JykgPT0gJ3Njcm9sbCcKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICB2YXIgcGFkZGluZyA9IDE4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdmFyIHBhZGRpbmcgPSA1OwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB0aGlzLiRoaWdobGlnaHRlci5jc3MoewogICAgICAgICAgICAgICAgJ3dpZHRoJzogICAgICAgICB0aGlzLiR0ZXh0YXJlYS53aWR0aCgpLXBhZGRpbmcsCiAgICAgICAgICAgICAgICAnaGVpZ2h0JzogICAgICAgIHRoaXMuJHRleHRhcmVhLmhlaWdodCgpK3RoaXMuJHRleHRhcmVhLnNjcm9sbFRvcCgpLAogICAgICAgICAgICAgICAgJ3BhZGRpbmctcmlnaHQnOiBwYWRkaW5nLAogICAgICAgICAgICAgICAgJ3RvcCc6ICAgICAgICAgICAtdGhpcy4kdGV4dGFyZWEuc2Nyb2xsVG9wKCkKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICAvKgogICAgICAgICAqIHNldCAndG8nIGNzcyBhdHRyaWJ1dGVzIGxpc3RlZCBpbiAnd2hhdCcgYXMgZGVmaW5lZCBmb3IgJ2Zyb20nCiAgICAgICAgICogc2NvcGU6IHByaXZhdGUKICAgICAgICAgKi8KICAgICAgICB0aGlzLmNsb25lQ3NzID0gZnVuY3Rpb24oZnJvbSwgdG8sIHdoYXQpIHsKICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPHdoYXQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIHRvLmNzcyh3aGF0W2ldLCBmcm9tLmNzcyh3aGF0W2ldKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8qCiAgICAgICAgICogY2xlYW4vY29udmVydCBweCBhbmQgZW0gc2l6ZSB0byBweCBzaXplICh3aXRob3V0ICdweCcgc3VmZml4KQogICAgICAgICAqIHNjb3BlOiBwcml2YXRlCiAgICAgICAgICovCiAgICAgICAgdGhpcy50b1B4ID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgaWYgKHZhbHVlICE9IHZhbHVlLnJlcGxhY2UoJ2VtJywgJycpKSB7CiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmlsYW1lbnRncm91cC9qUXVlcnktUGl4ZWwtRW0tQ29udmVydGVyCiAgICAgICAgICAgICAgICB2YXIgdGhhdCA9IHBhcnNlRmxvYXQodmFsdWUucmVwbGFjZSgnZW0nLCAnJykpLAogICAgICAgICAgICAgICAgICAgIHNjb3BlVGVzdCA9ICQoJzxkaXYgc3R5bGU9ImRpc3BsYXk6bm9uZTtmb250LXNpemU6MWVtO21hcmdpbjowO3BhZGRpbmc6MDtoZWlnaHQ6YXV0bztsaW5lLWhlaWdodDoxO2JvcmRlcjowOyI+Jm5ic3A7PC9kaXY+JykuYXBwZW5kVG8oJ2JvZHknKSwKICAgICAgICAgICAgICAgICAgICBzY29wZVZhbCA9IHNjb3BlVGVzdC5oZWlnaHQoKTsKICAgICAgICAgICAgICAgIHNjb3BlVGVzdC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoYXQgKiBzY29wZVZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUgIT0gdmFsdWUucmVwbGFjZSgncHgnLCAnJykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZS5yZXBsYWNlKCdweCcsICcnKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQodmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qCiAgICAgICAgICogYXBwbHkgaHRtbCBlbnRpdGllcwogICAgICAgICAqIHNjb3BlOiBwcml2YXRlCiAgICAgICAgICovCiAgICAgICAgdGhpcy5odG1sX2VudGl0aWVzID0gZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgaWYgKHZhbHVlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJCgnPGRpdiAvPicpLnRleHQodmFsdWUpLmh0bWwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKgogICAgICAgICAqIGFkZCBhIGRlbGF5IHdpdGggYWdlIGxpbWl0IHRvIGEgbWV0aG9kCiAgICAgICAgICogc2NvcGU6IHByaXZhdGUKICAgICAgICAgKi8KICAgICAgICB2YXIgdGltZXIgPSBudWxsOwogICAgICAgIHZhciBzdGFydFRpbWUgPSBudWxsOwogICAgICAgIHRoaXMuY29uZGVuc2F0b3IgPSBmdW5jdGlvbihjYWxsYmFjaywgbXMsIGxpbWl0KSB7CiAgICAgICAgICAgIGlmIChsaW1pdD09bnVsbCkgewogICAgICAgICAgICAgIGxpbWl0PW1zOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZiAoc3RhcnRUaW1lPT1udWxsKSB7CiAgICAgICAgICAgICAgICBzdGFydFRpbWUgPSBkYXRlLmdldFRpbWUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKGRhdGUuZ2V0VGltZSgpIC0gc3RhcnRUaW1lID4gbGltaXQpIHsKICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwoKTsKICAgICAgICAgICAgICAgIHN0YXJ0VGltZSA9IGRhdGUuZ2V0VGltZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGNhbGxiYWNrLCBtcyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Owp9KShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAe0lEQVRoge3OMQHAIBAAMcC/kjdZJHTI0A4XBdkz86wfO18H3hRUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUF8O8A8WdY6opAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_flat_75_ffffff_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAeUlEQVRoge3OMQHAIBAAsVL/nh8JDDfAkCjImpn5HvbfDpwIVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVhtqiwTEKTLXTgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAP0lEQVQ4je3PMQrAMABC0a/3v2zX0mCXNkOgc6C4PARd5DqPGKCU8luS8SbAQhiCQRgJE56kZTfbbP9RSvnkBsWcEAZRWcgqAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_glass_65_ffffff_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAMElEQVQ4je3LIQ4AIBTD0O3f/8wrFgmKhMy8pKJKwkhSKeVbbGuAPU9f4PIopTxgAeS0DRtI4yK0AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_glass_75_dadada_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANklEQVQ4jWN48uTJfyYGBgaGUWKUGCWGLfHt2zcoi5GREYNgYmJCZiG42IiB98woMUqMEtgIAMdjCdyg+eEBAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANUlEQVQ4je3LMQoAIBADwb38/6t5wFXaWAiCtUiaYZvF9hBACOFbuntVVe11B0CSjjeE8BwThQIJ8dhEl0YAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAPklEQVQ4je3PMQqAMABD0Z/c/7aCIAXjJIhD10LJ8vgZw30eMUApZV/GhZNgSTjoLYElY/hNMJ/S6gullCkPiCIPCr4NiEwAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAALElEQVQYlWN49OjRfyYGBgaGIUT8//8fSqBx0Yh///4RL8vAwAAVQ2MNOwIAl6g6KkOJwk8AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-icons_2e83ff_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvwsgvzLrJBNAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-icons_222222_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiQkIiTww4gUAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-icons_454545_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEVERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkRERkQfbf86AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-icons_888888_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEWMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMioyMiozJxoFPAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/images/ui-icons_cd0a0a_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEXMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzMCgzrDkZjAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBkdW1teSBpbmRleC5odG1sIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/smoothness/jquery-ui-1.8.4.custom.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IFVJIENTUyBGcmFtZXdvcmsgQFZFUlNJT04KICoKICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RoZW1pbmcvQVBJCiAqLwoKLyogTGF5b3V0IGhlbHBlcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi51aS1oZWxwZXItaGlkZGVuIHsgZGlzcGxheTogbm9uZTsgfQoudWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIHsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAtOTk5OTk5OTlweDsgfQoudWktaGVscGVyLXJlc2V0IHsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBib3JkZXI6IDA7IG91dGxpbmU6IDA7IGxpbmUtaGVpZ2h0OiAxLjM7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgZm9udC1zaXplOiAxMDAlOyBsaXN0LXN0eWxlOiBub25lOyB9Ci51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXIgeyBjb250ZW50OiAiLiI7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDA7IGNsZWFyOiBib3RoOyB2aXNpYmlsaXR5OiBoaWRkZW47IH0KLnVpLWhlbHBlci1jbGVhcmZpeCB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQovKiByZXF1aXJlZCBjb21tZW50IGZvciBjbGVhcmZpeCB0byB3b3JrIGluIE9wZXJhIFwqLwoqIGh0bWwgLnVpLWhlbHBlci1jbGVhcmZpeCB7IGhlaWdodDoxJTsgfQoudWktaGVscGVyLWNsZWFyZml4IHsgZGlzcGxheTpibG9jazsgfQovKiBlbmQgY2xlYXJmaXggKi8KLnVpLWhlbHBlci16Zml4IHsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgdG9wOiAwOyBsZWZ0OiAwOyBwb3NpdGlvbjogYWJzb2x1dGU7IG9wYWNpdHk6IDA7IGZpbHRlcjpBbHBoYShPcGFjaXR5PTApOyB9CgoKLyogSW50ZXJhY3Rpb24gQ3VlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLnVpLXN0YXRlLWRpc2FibGVkIHsgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7IH0KCgovKiBJY29ucwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qIHN0YXRlcyBhbmQgaW1hZ2VzICovCi51aS1pY29uIHsgZGlzcGxheTogYmxvY2s7IHRleHQtaW5kZW50OiAtOTk5OTlweDsgb3ZlcmZsb3c6IGhpZGRlbjsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgfQoKCi8qIE1pc2MgdmlzdWFscwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCi8qIE92ZXJsYXlzICovCi51aS13aWRnZXQtb3ZlcmxheSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyB9CgoKLyoKICogalF1ZXJ5IFVJIENTUyBGcmFtZXdvcmsgQFZFUlNJT04KICoKICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RoZW1pbmcvQVBJCiAqCiAqIFRvIHZpZXcgYW5kIG1vZGlmeSB0aGlzIHRoZW1lLCB2aXNpdCBodHRwOi8vanF1ZXJ5dWkuY29tL3RoZW1lcm9sbGVyLz9mZkRlZmF1bHQ9VmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmJmZ3RGVmYXVsdD1ub3JtYWwmZnNEZWZhdWx0PTEuMWVtJmNvcm5lclJhZGl1cz00cHgmYmdDb2xvckhlYWRlcj1jY2NjY2MmYmdUZXh0dXJlSGVhZGVyPTAzX2hpZ2hsaWdodF9zb2Z0LnBuZyZiZ0ltZ09wYWNpdHlIZWFkZXI9NzUmYm9yZGVyQ29sb3JIZWFkZXI9YWFhYWFhJmZjSGVhZGVyPTIyMjIyMiZpY29uQ29sb3JIZWFkZXI9MjIyMjIyJmJnQ29sb3JDb250ZW50PWZmZmZmZiZiZ1RleHR1cmVDb250ZW50PTAxX2ZsYXQucG5nJmJnSW1nT3BhY2l0eUNvbnRlbnQ9NzUmYm9yZGVyQ29sb3JDb250ZW50PWFhYWFhYSZmY0NvbnRlbnQ9MjIyMjIyJmljb25Db2xvckNvbnRlbnQ9MjIyMjIyJmJnQ29sb3JEZWZhdWx0PWU2ZTZlNiZiZ1RleHR1cmVEZWZhdWx0PTAyX2dsYXNzLnBuZyZiZ0ltZ09wYWNpdHlEZWZhdWx0PTc1JmJvcmRlckNvbG9yRGVmYXVsdD1kM2QzZDMmZmNEZWZhdWx0PTU1NTU1NSZpY29uQ29sb3JEZWZhdWx0PTg4ODg4OCZiZ0NvbG9ySG92ZXI9ZGFkYWRhJmJnVGV4dHVyZUhvdmVyPTAyX2dsYXNzLnBuZyZiZ0ltZ09wYWNpdHlIb3Zlcj03NSZib3JkZXJDb2xvckhvdmVyPTk5OTk5OSZmY0hvdmVyPTIxMjEyMSZpY29uQ29sb3JIb3Zlcj00NTQ1NDUmYmdDb2xvckFjdGl2ZT1mZmZmZmYmYmdUZXh0dXJlQWN0aXZlPTAyX2dsYXNzLnBuZyZiZ0ltZ09wYWNpdHlBY3RpdmU9NjUmYm9yZGVyQ29sb3JBY3RpdmU9YWFhYWFhJmZjQWN0aXZlPTIxMjEyMSZpY29uQ29sb3JBY3RpdmU9NDU0NTQ1JmJnQ29sb3JIaWdobGlnaHQ9ZmJmOWVlJmJnVGV4dHVyZUhpZ2hsaWdodD0wMl9nbGFzcy5wbmcmYmdJbWdPcGFjaXR5SGlnaGxpZ2h0PTU1JmJvcmRlckNvbG9ySGlnaGxpZ2h0PWZjZWZhMSZmY0hpZ2hsaWdodD0zNjM2MzYmaWNvbkNvbG9ySGlnaGxpZ2h0PTJlODNmZiZiZ0NvbG9yRXJyb3I9ZmVmMWVjJmJnVGV4dHVyZUVycm9yPTAyX2dsYXNzLnBuZyZiZ0ltZ09wYWNpdHlFcnJvcj05NSZib3JkZXJDb2xvckVycm9yPWNkMGEwYSZmY0Vycm9yPWNkMGEwYSZpY29uQ29sb3JFcnJvcj1jZDBhMGEmYmdDb2xvck92ZXJsYXk9YWFhYWFhJmJnVGV4dHVyZU92ZXJsYXk9MDFfZmxhdC5wbmcmYmdJbWdPcGFjaXR5T3ZlcmxheT0wJm9wYWNpdHlPdmVybGF5PTMwJmJnQ29sb3JTaGFkb3c9YWFhYWFhJmJnVGV4dHVyZVNoYWRvdz0wMV9mbGF0LnBuZyZiZ0ltZ09wYWNpdHlTaGFkb3c9MCZvcGFjaXR5U2hhZG93PTMwJnRoaWNrbmVzc1NoYWRvdz04cHgmb2Zmc2V0VG9wU2hhZG93PS04cHgmb2Zmc2V0TGVmdFNoYWRvdz0tOHB4JmNvcm5lclJhZGl1c1NoYWRvdz04cHgKICovCgoKLyogQ29tcG9uZW50IGNvbnRhaW5lcnMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi51aS13aWRnZXQgeyBmb250LWZhbWlseTogVmVyZGFuYSxBcmlhbCxzYW5zLXNlcmlmOyBmb250LXNpemU6IDEuMWVtOyB9Ci51aS13aWRnZXQgLnVpLXdpZGdldCB7IGZvbnQtc2l6ZTogMWVtOyB9Ci51aS13aWRnZXQgaW5wdXQsIC51aS13aWRnZXQgc2VsZWN0LCAudWktd2lkZ2V0IHRleHRhcmVhLCAudWktd2lkZ2V0IGJ1dHRvbiB7IGZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLHNhbnMtc2VyaWY7IGZvbnQtc2l6ZTogMWVtOyB9Ci51aS13aWRnZXQtY29udGVudCB7IGJvcmRlcjogMXB4IHNvbGlkICNhYWFhYWE7IGJhY2tncm91bmQ6ICNmZmZmZmYgdXJsKGltYWdlcy91aS1iZ19mbGF0Xzc1X2ZmZmZmZl80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBjb2xvcjogIzIyMjIyMjsgfQoudWktd2lkZ2V0LWNvbnRlbnQgYSB7IGNvbG9yOiAjMjIyMjIyOyB9Ci51aS13aWRnZXQtaGVhZGVyIHsgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsgYmFja2dyb3VuZDogI2NjY2NjYyB1cmwoaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2NjY2NjY18xeDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7IGNvbG9yOiAjMjIyMjIyOyBmb250LXdlaWdodDogYm9sZDsgfQoudWktd2lkZ2V0LWhlYWRlciBhIHsgY29sb3I6ICMyMjIyMjI7IH0KCi8qIEludGVyYWN0aW9uIHN0YXRlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLnVpLXN0YXRlLWRlZmF1bHQsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRlZmF1bHQgeyBib3JkZXI6IDFweCBzb2xpZCAjZDNkM2QzOyBiYWNrZ3JvdW5kOiAjZTZlNmU2IHVybChpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZTZlNmU2XzF4NDAwLnBuZykgNTAlIDUwJSByZXBlYXQteDsgZm9udC13ZWlnaHQ6IG5vcm1hbDsgY29sb3I6ICM1NTU1NTU7IH0KLnVpLXN0YXRlLWRlZmF1bHQgYSwgLnVpLXN0YXRlLWRlZmF1bHQgYTpsaW5rLCAudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWQgeyBjb2xvcjogIzU1NTU1NTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ci51aS1zdGF0ZS1ob3ZlciwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhvdmVyLCAudWktc3RhdGUtZm9jdXMsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsIC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1mb2N1cyB7IGJvcmRlcjogMXB4IHNvbGlkICM5OTk5OTk7IGJhY2tncm91bmQ6ICNkYWRhZGEgdXJsKGltYWdlcy91aS1iZ19nbGFzc183NV9kYWRhZGFfMXg0MDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBmb250LXdlaWdodDogbm9ybWFsOyBjb2xvcjogIzIxMjEyMTsgfQoudWktc3RhdGUtaG92ZXIgYSwgLnVpLXN0YXRlLWhvdmVyIGE6aG92ZXIgeyBjb2xvcjogIzIxMjEyMTsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9Ci51aS1zdGF0ZS1hY3RpdmUsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtYWN0aXZlLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtYWN0aXZlIHsgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsgYmFja2dyb3VuZDogI2ZmZmZmZiB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzY1X2ZmZmZmZl8xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7IGZvbnQtd2VpZ2h0OiBub3JtYWw7IGNvbG9yOiAjMjEyMTIxOyB9Ci51aS1zdGF0ZS1hY3RpdmUgYSwgLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssIC51aS1zdGF0ZS1hY3RpdmUgYTp2aXNpdGVkIHsgY29sb3I6ICMyMTIxMjE7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQoudWktd2lkZ2V0IDphY3RpdmUgeyBvdXRsaW5lOiBub25lOyB9CgovKiBJbnRlcmFjdGlvbiBDdWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoudWktc3RhdGUtaGlnaGxpZ2h0LCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWhpZ2hsaWdodCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCAge2JvcmRlcjogMXB4IHNvbGlkICNmY2VmYTE7IGJhY2tncm91bmQ6ICNmYmY5ZWUgdXJsKGltYWdlcy91aS1iZ19nbGFzc181NV9mYmY5ZWVfMXg0MDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBjb2xvcjogIzM2MzYzNjsgfQoudWktc3RhdGUtaGlnaGxpZ2h0IGEsIC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWhpZ2hsaWdodCBhIHsgY29sb3I6ICMzNjM2MzY7IH0KLnVpLXN0YXRlLWVycm9yLCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkICNjZDBhMGE7IGJhY2tncm91bmQ6ICNmZWYxZWMgdXJsKGltYWdlcy91aS1iZ19nbGFzc185NV9mZWYxZWNfMXg0MDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBjb2xvcjogI2NkMGEwYTsgfQoudWktc3RhdGUtZXJyb3IgYSwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciBhLCAudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3IgYSB7IGNvbG9yOiAjY2QwYTBhOyB9Ci51aS1zdGF0ZS1lcnJvci10ZXh0LCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLXRleHQsIC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1lcnJvci10ZXh0IHsgY29sb3I6ICNjZDBhMGE7IH0KLnVpLXByaW9yaXR5LXByaW1hcnksIC51aS13aWRnZXQtY29udGVudCAudWktcHJpb3JpdHktcHJpbWFyeSwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXByaW1hcnkgeyBmb250LXdlaWdodDogYm9sZDsgfQoudWktcHJpb3JpdHktc2Vjb25kYXJ5LCAudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXNlY29uZGFyeSwgIC51aS13aWRnZXQtaGVhZGVyIC51aS1wcmlvcml0eS1zZWNvbmRhcnkgeyBvcGFjaXR5OiAuNzsgZmlsdGVyOkFscGhhKE9wYWNpdHk9NzApOyBmb250LXdlaWdodDogbm9ybWFsOyB9Ci51aS1zdGF0ZS1kaXNhYmxlZCwgLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1kaXNhYmxlZCwgLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVkIHsgb3BhY2l0eTogLjM1OyBmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zNSk7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IH0KCi8qIEljb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKLyogc3RhdGVzIGFuZCBpbWFnZXMgKi8KLnVpLWljb24geyB3aWR0aDogMTZweDsgaGVpZ2h0OiAxNnB4OyBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyk7IH0KLnVpLXdpZGdldC1jb250ZW50IC51aS1pY29uIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzIyMjIyMl8yNTZ4MjQwLnBuZyk7IH0KLnVpLXdpZGdldC1oZWFkZXIgLnVpLWljb24ge2JhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nKTsgfQoudWktc3RhdGUtZGVmYXVsdCAudWktaWNvbiB7IGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvdWktaWNvbnNfODg4ODg4XzI1NngyNDAucG5nKTsgfQoudWktc3RhdGUtaG92ZXIgLnVpLWljb24sIC51aS1zdGF0ZS1mb2N1cyAudWktaWNvbiB7YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy91aS1pY29uc180NTQ1NDVfMjU2eDI0MC5wbmcpOyB9Ci51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb24ge2JhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvdWktaWNvbnNfNDU0NTQ1XzI1NngyNDAucG5nKTsgfQoudWktc3RhdGUtaGlnaGxpZ2h0IC51aS1pY29uIHtiYWNrZ3JvdW5kLWltYWdlOiB1cmwoaW1hZ2VzL3VpLWljb25zXzJlODNmZl8yNTZ4MjQwLnBuZyk7IH0KLnVpLXN0YXRlLWVycm9yIC51aS1pY29uLCAudWktc3RhdGUtZXJyb3ItdGV4dCAudWktaWNvbiB7YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy91aS1pY29uc19jZDBhMGFfMjU2eDI0MC5wbmcpOyB9CgovKiBwb3NpdGlvbmluZyAqLwoudWktaWNvbi1jYXJhdC0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH0KLnVpLWljb24tY2FyYXQtMS1uZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7IH0KLnVpLWljb24tY2FyYXQtMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggMDsgfQoudWktaWNvbi1jYXJhdC0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggMDsgfQoudWktaWNvbi1jYXJhdC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAwOyB9Ci51aS1pY29uLWNhcmF0LTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAwOyB9Ci51aS1pY29uLWNhcmF0LTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IDA7IH0KLnVpLWljb24tY2FyYXQtMS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAwOyB9Ci51aS1pY29uLWNhcmF0LTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IDA7IH0KLnVpLWljb24tY2FyYXQtMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggMDsgfQoudWktaWNvbi10cmlhbmdsZS0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4OyB9Ci51aS1pY29uLXRyaWFuZ2xlLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsgfQoudWktaWNvbi10cmlhbmdsZS0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTZweDsgfQoudWktaWNvbi10cmlhbmdsZS0xLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE2cHg7IH0KLnVpLWljb24tdHJpYW5nbGUtMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE2cHg7IH0KLnVpLWljb24tdHJpYW5nbGUtMS1zdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNnB4OyB9Ci51aS1pY29uLXRyaWFuZ2xlLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNnB4OyB9Ci51aS1pY29uLXRyaWFuZ2xlLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE2cHg7IH0KLnVpLWljb24tdHJpYW5nbGUtMi1uLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTE2cHg7IH0KLnVpLWljb24tdHJpYW5nbGUtMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE2cHg7IH0KLnVpLWljb24tYXJyb3ctMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMzJweDsgfQoudWktaWNvbi1hcnJvdy0xLW5lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93LTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93LTEtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMzJweDsgfQoudWktaWNvbi1hcnJvdy0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMzJweDsgfQoudWktaWNvbi1hcnJvdy0xLW53IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93LTItbi1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93LTItbmUtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMi1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTMycHg7IH0KLnVpLWljb24tYXJyb3ctMi1zZS1udyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtMzJweDsgfQoudWktaWNvbi1hcnJvd3N0b3AtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93c3RvcC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjA4cHggLTMycHg7IH0KLnVpLWljb24tYXJyb3dzdG9wLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMzJweDsgfQoudWktaWNvbi1hcnJvd3N0b3AtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC0zMnB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTEtbmUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMS1zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2stMS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGljay0xLXN3IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGljay0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTEtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGljay0yLW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTItbmUtc3cgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGljay0yLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrLTItc2UtbncgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTc2cHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtNDhweDsgfQoudWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTQ4cHg7IH0KLnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTI0MHB4IC00OHB4OyB9Ci51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTY0cHg7IH0KLnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JldHVybi0xLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JldHVybi0xLW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JldHVybi0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JldHVybi0xLXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTY0cHg7IH0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtNjRweDsgfQoudWktaWNvbi1hcnJvd3JlZnJlc2gtMS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC02NHB4OyB9Ci51aS1pY29uLWFycm93cmVmcmVzaC0xLWUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTYwcHggLTY0cHg7IH0KLnVpLWljb24tYXJyb3dyZWZyZXNoLTEtcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNzZweCAtNjRweDsgfQoudWktaWNvbi1hcnJvdy00IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtODBweDsgfQoudWktaWNvbi1hcnJvdy00LWRpYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtODBweDsgfQoudWktaWNvbi1leHRsaW5rIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTgwcHg7IH0KLnVpLWljb24tbmV3d2luIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTgwcHg7IH0KLnVpLWljb24tcmVmcmVzaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC04MHB4OyB9Ci51aS1pY29uLXNodWZmbGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtODBweDsgfQoudWktaWNvbi10cmFuc2Zlci1lLXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtODBweDsgfQoudWktaWNvbi10cmFuc2ZlcnRoaWNrLWUtdyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtODBweDsgfQoudWktaWNvbi1mb2xkZXItY29sbGFwc2VkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtOTZweDsgfQoudWktaWNvbi1mb2xkZXItb3BlbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC05NnB4OyB9Ci51aS1pY29uLWRvY3VtZW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTk2cHg7IH0KLnVpLWljb24tZG9jdW1lbnQtYiB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC05NnB4OyB9Ci51aS1pY29uLW5vdGUgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtOTZweDsgfQoudWktaWNvbi1tYWlsLWNsb3NlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC05NnB4OyB9Ci51aS1pY29uLW1haWwtb3BlbiB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC05NnB4OyB9Ci51aS1pY29uLXN1aXRjYXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC05NnB4OyB9Ci51aS1pY29uLWNvbW1lbnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTk2cHg7IH0KLnVpLWljb24tcGVyc29uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC05NnB4OyB9Ci51aS1pY29uLXByaW50IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC05NnB4OyB9Ci51aS1pY29uLXRyYXNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC05NnB4OyB9Ci51aS1pY29uLWxvY2tlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtOTZweDsgfQoudWktaWNvbi11bmxvY2tlZCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtOTZweDsgfQoudWktaWNvbi1ib29rbWFyayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtOTZweDsgfQoudWktaWNvbi10YWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjQwcHggLTk2cHg7IH0KLnVpLWljb24taG9tZSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTExMnB4OyB9Ci51aS1pY29uLWZsYWcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTEycHg7IH0KLnVpLWljb24tY2FsZW5kYXIgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTEycHg7IH0KLnVpLWljb24tY2FydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0xMTJweDsgfQoudWktaWNvbi1wZW5jaWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTEycHg7IH0KLnVpLWljb24tY2xvY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTEycHg7IH0KLnVpLWljb24tZGlzayB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xMTJweDsgfQoudWktaWNvbi1jYWxjdWxhdG9yIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xMTJweDsgfQoudWktaWNvbi16b29taW4geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTI4cHggLTExMnB4OyB9Ci51aS1pY29uLXpvb21vdXQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTExMnB4OyB9Ci51aS1pY29uLXNlYXJjaCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNjBweCAtMTEycHg7IH0KLnVpLWljb24td3JlbmNoIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMTJweDsgfQoudWktaWNvbi1nZWFyIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMTJweDsgfQoudWktaWNvbi1oZWFydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTEycHg7IH0KLnVpLWljb24tc3RhciB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMjRweCAtMTEycHg7IH0KLnVpLWljb24tbGluayB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTEycHg7IH0KLnVpLWljb24tY2FuY2VsIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMTI4cHg7IH0KLnVpLWljb24tcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IC0xMjhweDsgfQoudWktaWNvbi1wbHVzdGhpY2sgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMTI4cHg7IH0KLnVpLWljb24tbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTI4cHg7IH0KLnVpLWljb24tbWludXN0aGljayB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0xMjhweDsgfQoudWktaWNvbi1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xMjhweDsgfQoudWktaWNvbi1jbG9zZXRoaWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTEyOHB4OyB9Ci51aS1pY29uLWtleSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTI4cHg7IH0KLnVpLWljb24tbGlnaHRidWxiIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xMjhweDsgfQoudWktaWNvbi1zY2lzc29ycyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTI4cHg7IH0KLnVpLWljb24tY2xpcGJvYXJkIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xMjhweDsgfQoudWktaWNvbi1jb3B5IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xMjhweDsgfQoudWktaWNvbi1jb250YWN0IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE5MnB4IC0xMjhweDsgfQoudWktaWNvbi1pbWFnZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yMDhweCAtMTI4cHg7IH0KLnVpLWljb24tdmlkZW8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMjI0cHggLTEyOHB4OyB9Ci51aS1pY29uLXNjcmlwdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0yNDBweCAtMTI4cHg7IH0KLnVpLWljb24tYWxlcnQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNDRweDsgfQoudWktaWNvbi1pbmZvIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE0NHB4OyB9Ci51aS1pY29uLW5vdGljZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNDRweDsgfQoudWktaWNvbi1oZWxwIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE0NHB4OyB9Ci51aS1pY29uLWNoZWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE0NHB4OyB9Ci51aS1pY29uLWJ1bGxldCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNDRweDsgfQoudWktaWNvbi1yYWRpby1vZmYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTQ0cHg7IH0KLnVpLWljb24tcmFkaW8tb24geyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTEycHggLTE0NHB4OyB9Ci51aS1pY29uLXBpbi13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEyOHB4IC0xNDRweDsgfQoudWktaWNvbi1waW4tcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xNDRweCAtMTQ0cHg7IH0KLnVpLWljb24tcGxheSB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2MHB4OyB9Ci51aS1pY29uLXBhdXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE2MHB4OyB9Ci51aS1pY29uLXNlZWstbmV4dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNjBweDsgfQoudWktaWNvbi1zZWVrLXByZXYgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTYwcHg7IH0KLnVpLWljb24tc2Vlay1lbmQgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNjRweCAtMTYwcHg7IH0KLnVpLWljb24tc2Vlay1zdGFydCB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNjBweDsgfQovKiB1aS1pY29uLXNlZWstZmlyc3QgaXMgZGVwcmVjYXRlZCwgdXNlIHVpLWljb24tc2Vlay1zdGFydCBpbnN0ZWFkICovCi51aS1pY29uLXNlZWstZmlyc3QgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMTYwcHg7IH0KLnVpLWljb24tc3RvcCB7IGJhY2tncm91bmQtcG9zaXRpb246IC05NnB4IC0xNjBweDsgfQoudWktaWNvbi1lamVjdCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMTJweCAtMTYwcHg7IH0KLnVpLWljb24tdm9sdW1lLW9mZiB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTYwcHg7IH0KLnVpLWljb24tdm9sdW1lLW9uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0NHB4IC0xNjBweDsgfQoudWktaWNvbi1wb3dlciB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE3NnB4OyB9Ci51aS1pY29uLXNpZ25hbC1kaWFnIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2cHggLTE3NnB4OyB9Ci51aS1pY29uLXNpZ25hbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0xNzZweDsgfQoudWktaWNvbi1iYXR0ZXJ5LTAgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMTc2cHg7IH0KLnVpLWljb24tYmF0dGVyeS0xIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE3NnB4OyB9Ci51aS1pY29uLWJhdHRlcnktMiB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0xNzZweDsgfQoudWktaWNvbi1iYXR0ZXJ5LTMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtOTZweCAtMTc2cHg7IH0KLnVpLWljb24tY2lyY2xlLXBsdXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGUtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLWNsb3NlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTMycHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTQ4cHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1zIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS10cmlhbmdsZS13IHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTgwcHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS10cmlhbmdsZS1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTk2cHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS1hcnJvdy1lIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTExMnB4IC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGUtYXJyb3ctcyB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xMjhweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLWFycm93LXcgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTQ0cHggLTE5MnB4OyB9Ci51aS1pY29uLWNpcmNsZS1hcnJvdy1uIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE2MHB4IC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGUtem9vbWluIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE3NnB4IC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGUtem9vbW91dCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0xOTJweCAtMTkycHg7IH0KLnVpLWljb24tY2lyY2xlLWNoZWNrIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTIwOHB4IC0xOTJweDsgfQoudWktaWNvbi1jaXJjbGVzbWFsbC1wbHVzIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAtMjA4cHg7IH0KLnVpLWljb24tY2lyY2xlc21hbGwtbWludXMgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjA4cHg7IH0KLnVpLWljb24tY2lyY2xlc21hbGwtY2xvc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMzJweCAtMjA4cHg7IH0KLnVpLWljb24tc3F1YXJlc21hbGwtcGx1cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC00OHB4IC0yMDhweDsgfQoudWktaWNvbi1zcXVhcmVzbWFsbC1taW51cyB7IGJhY2tncm91bmQtcG9zaXRpb246IC02NHB4IC0yMDhweDsgfQoudWktaWNvbi1zcXVhcmVzbWFsbC1jbG9zZSB7IGJhY2tncm91bmQtcG9zaXRpb246IC04MHB4IC0yMDhweDsgfQoudWktaWNvbi1ncmlwLWRvdHRlZC12ZXJ0aWNhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IDAgLTIyNHB4OyB9Ci51aS1pY29uLWdyaXAtZG90dGVkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMjI0cHg7IH0KLnVpLWljb24tZ3JpcC1zb2xpZC12ZXJ0aWNhbCB7IGJhY2tncm91bmQtcG9zaXRpb246IC0zMnB4IC0yMjRweDsgfQoudWktaWNvbi1ncmlwLXNvbGlkLWhvcml6b250YWwgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtNDhweCAtMjI0cHg7IH0KLnVpLWljb24tZ3JpcHNtYWxsLWRpYWdvbmFsLXNlIHsgYmFja2dyb3VuZC1wb3NpdGlvbjogLTY0cHggLTIyNHB4OyB9Ci51aS1pY29uLWdyaXAtZGlhZ29uYWwtc2UgeyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtODBweCAtMjI0cHg7IH0KCgovKiBNaXNjIHZpc3VhbHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKiBDb3JuZXIgcmFkaXVzICovCi51aS1jb3JuZXItdGwgeyAtbW96LWJvcmRlci1yYWRpdXMtdG9wbGVmdDogNHB4OyAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OyB9Ci51aS1jb3JuZXItdHIgeyAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDRweDsgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OyB9Ci51aS1jb3JuZXItYmwgeyAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tbGVmdDogNHB4OyAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDRweDsgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OyB9Ci51aS1jb3JuZXItYnIgeyAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDRweDsgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OyB9Ci51aS1jb3JuZXItdG9wIHsgLW1vei1ib3JkZXItcmFkaXVzLXRvcGxlZnQ6IDRweDsgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7IGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDsgLW1vei1ib3JkZXItcmFkaXVzLXRvcHJpZ2h0OiA0cHg7IC13ZWJraXQtYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDsgfQoudWktY29ybmVyLWJvdHRvbSB7IC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA0cHg7IC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7IC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21yaWdodDogNHB4OyAtd2Via2l0LWJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7IGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7IH0KLnVpLWNvcm5lci1yaWdodCB7ICAtbW96LWJvcmRlci1yYWRpdXMtdG9wcmlnaHQ6IDRweDsgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OyBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4OyAtbW96LWJvcmRlci1yYWRpdXMtYm90dG9tcmlnaHQ6IDRweDsgLXdlYmtpdC1ib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OyBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogNHB4OyB9Ci51aS1jb3JuZXItbGVmdCB7IC1tb3otYm9yZGVyLXJhZGl1cy10b3BsZWZ0OiA0cHg7IC13ZWJraXQtYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogNHB4OyBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7IC1tb3otYm9yZGVyLXJhZGl1cy1ib3R0b21sZWZ0OiA0cHg7IC13ZWJraXQtYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4OyBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7IH0KLnVpLWNvcm5lci1hbGwgeyAtbW96LWJvcmRlci1yYWRpdXM6IDRweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA0cHg7IGJvcmRlci1yYWRpdXM6IDRweDsgfQoKLyogT3ZlcmxheXMgKi8KLnVpLXdpZGdldC1vdmVybGF5IHsgYmFja2dyb3VuZDogI2FhYWFhYSB1cmwoaW1hZ2VzL3VpLWJnX2ZsYXRfMF9hYWFhYWFfNDB4MTAwLnBuZykgNTAlIDUwJSByZXBlYXQteDsgb3BhY2l0eTogLjMwO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTMwKTsgfQoudWktd2lkZ2V0LXNoYWRvdyB7IG1hcmdpbjogLThweCAwIDAgLThweDsgcGFkZGluZzogOHB4OyBiYWNrZ3JvdW5kOiAjYWFhYWFhIHVybChpbWFnZXMvdWktYmdfZmxhdF8wX2FhYWFhYV80MHgxMDAucG5nKSA1MCUgNTAlIHJlcGVhdC14OyBvcGFjaXR5OiAuMzA7ZmlsdGVyOkFscGhhKE9wYWNpdHk9MzApOyAtbW96LWJvcmRlci1yYWRpdXM6IDhweDsgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA4cHg7IGJvcmRlci1yYWRpdXM6IDhweDsgfS8qCiAqIGpRdWVyeSBVSSBSZXNpemFibGUgQFZFUlNJT04KICoKICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1Jlc2l6YWJsZSN0aGVtaW5nCiAqLwoudWktcmVzaXphYmxlIHsgcG9zaXRpb246IHJlbGF0aXZlO30KLnVpLXJlc2l6YWJsZS1oYW5kbGUgeyBwb3NpdGlvbjogYWJzb2x1dGU7Zm9udC1zaXplOiAwLjFweDt6LWluZGV4OiA5OTk5OTsgZGlzcGxheTogYmxvY2s7fQoudWktcmVzaXphYmxlLWRpc2FibGVkIC51aS1yZXNpemFibGUtaGFuZGxlLCAudWktcmVzaXphYmxlLWF1dG9oaWRlIC51aS1yZXNpemFibGUtaGFuZGxlIHsgZGlzcGxheTogbm9uZTsgfQoudWktcmVzaXphYmxlLW4geyBjdXJzb3I6IG4tcmVzaXplOyBoZWlnaHQ6IDdweDsgd2lkdGg6IDEwMCU7IHRvcDogLTVweDsgbGVmdDogMDsgfQoudWktcmVzaXphYmxlLXMgeyBjdXJzb3I6IHMtcmVzaXplOyBoZWlnaHQ6IDdweDsgd2lkdGg6IDEwMCU7IGJvdHRvbTogLTVweDsgbGVmdDogMDsgfQoudWktcmVzaXphYmxlLWUgeyBjdXJzb3I6IGUtcmVzaXplOyB3aWR0aDogN3B4OyByaWdodDogLTVweDsgdG9wOiAwOyBoZWlnaHQ6IDEwMCU7IH0KLnVpLXJlc2l6YWJsZS13IHsgY3Vyc29yOiB3LXJlc2l6ZTsgd2lkdGg6IDdweDsgbGVmdDogLTVweDsgdG9wOiAwOyBoZWlnaHQ6IDEwMCU7IH0KLnVpLXJlc2l6YWJsZS1zZSB7IGN1cnNvcjogc2UtcmVzaXplOyB3aWR0aDogMTJweDsgaGVpZ2h0OiAxMnB4OyByaWdodDogMXB4OyBib3R0b206IDFweDsgfQoudWktcmVzaXphYmxlLXN3IHsgY3Vyc29yOiBzdy1yZXNpemU7IHdpZHRoOiA5cHg7IGhlaWdodDogOXB4OyBsZWZ0OiAtNXB4OyBib3R0b206IC01cHg7IH0KLnVpLXJlc2l6YWJsZS1udyB7IGN1cnNvcjogbnctcmVzaXplOyB3aWR0aDogOXB4OyBoZWlnaHQ6IDlweDsgbGVmdDogLTVweDsgdG9wOiAtNXB4OyB9Ci51aS1yZXNpemFibGUtbmUgeyBjdXJzb3I6IG5lLXJlc2l6ZTsgd2lkdGg6IDlweDsgaGVpZ2h0OiA5cHg7IHJpZ2h0OiAtNXB4OyB0b3A6IC01cHg7fS8qCiAqIGpRdWVyeSBVSSBTZWxlY3RhYmxlIEBWRVJTSU9OCiAqCiAqIENvcHlyaWdodCAyMDEwLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9TZWxlY3RhYmxlI3RoZW1pbmcKICovCi51aS1zZWxlY3RhYmxlLWhlbHBlciB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTAwOyBib3JkZXI6MXB4IGRvdHRlZCBibGFjazsgfQovKgogKiBqUXVlcnkgVUkgQWNjb3JkaW9uIEBWRVJTSU9OCiAqCiAqIENvcHlyaWdodCAyMDEwLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9BY2NvcmRpb24jdGhlbWluZwogKi8KLyogSUUvV2luIC0gRml4IGFuaW1hdGlvbiBidWcgLSAjNDYxNSAqLwoudWktYWNjb3JkaW9uIHsgd2lkdGg6IDEwMCU7IH0KLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciB7IGN1cnNvcjogcG9pbnRlcjsgcG9zaXRpb246IHJlbGF0aXZlOyBtYXJnaW4tdG9wOiAxcHg7IHpvb206IDE7IH0KLnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWxpLWZpeCB7IGRpc3BsYXk6IGlubGluZTsgfQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB7IGJvcmRlci1ib3R0b206IDAgIWltcG9ydGFudDsgfQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIGEgeyBkaXNwbGF5OiBibG9jazsgZm9udC1zaXplOiAxZW07IHBhZGRpbmc6IC41ZW0gLjVlbSAuNWVtIC43ZW07IH0KLnVpLWFjY29yZGlvbi1pY29ucyAudWktYWNjb3JkaW9uLWhlYWRlciBhIHsgcGFkZGluZy1sZWZ0OiAyLjJlbTsgfQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taGVhZGVyIC51aS1pY29uIHsgcG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAuNWVtOyB0b3A6IDUwJTsgbWFyZ2luLXRvcDogLThweDsgfQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudCB7IHBhZGRpbmc6IDFlbSAyLjJlbTsgYm9yZGVyLXRvcDogMDsgbWFyZ2luLXRvcDogLTJweDsgcG9zaXRpb246IHJlbGF0aXZlOyB0b3A6IDFweDsgbWFyZ2luLWJvdHRvbTogMnB4OyBvdmVyZmxvdzogYXV0bzsgZGlzcGxheTogbm9uZTsgem9vbTogMTsgfQoudWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUgeyBkaXNwbGF5OiBibG9jazsgfS8qCiAqIGpRdWVyeSBVSSBBdXRvY29tcGxldGUgQFZFUlNJT04KICoKICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0F1dG9jb21wbGV0ZSN0aGVtaW5nCiAqLwoudWktYXV0b2NvbXBsZXRlIHsgcG9zaXRpb246IGFic29sdXRlOyBjdXJzb3I6IGRlZmF1bHQ7IH0JCgovKiB3b3JrYXJvdW5kcyAqLwoqIGh0bWwgLnVpLWF1dG9jb21wbGV0ZSB7IHdpZHRoOjFweDsgfSAvKiB3aXRob3V0IHRoaXMsIHRoZSBtZW51IGV4cGFuZHMgdG8gMTAwJSBpbiBJRTYgKi8KCi8qCiAqIGpRdWVyeSBVSSBNZW51IEBWRVJTSU9OCiAqCiAqIENvcHlyaWdodCAyMDEwLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9NZW51I3RoZW1pbmcKICovCi51aS1tZW51IHsKCWxpc3Qtc3R5bGU6bm9uZTsKCXBhZGRpbmc6IDJweDsKCW1hcmdpbjogMDsKCWRpc3BsYXk6YmxvY2s7CglmbG9hdDogbGVmdDsKfQoudWktbWVudSAudWktbWVudSB7CgltYXJnaW4tdG9wOiAtM3B4Owp9Ci51aS1tZW51IC51aS1tZW51LWl0ZW0gewoJbWFyZ2luOjA7CglwYWRkaW5nOiAwOwoJem9vbTogMTsKCWZsb2F0OiBsZWZ0OwoJY2xlYXI6IGxlZnQ7Cgl3aWR0aDogMTAwJTsKfQoudWktbWVudSAudWktbWVudS1pdGVtIGEgewoJdGV4dC1kZWNvcmF0aW9uOm5vbmU7CglkaXNwbGF5OmJsb2NrOwoJcGFkZGluZzouMmVtIC40ZW07CglsaW5lLWhlaWdodDoxLjU7Cgl6b29tOjE7Cn0KLnVpLW1lbnUgLnVpLW1lbnUtaXRlbSBhLnVpLXN0YXRlLWhvdmVyLAoudWktbWVudSAudWktbWVudS1pdGVtIGEudWktc3RhdGUtYWN0aXZlIHsKCWZvbnQtd2VpZ2h0OiBub3JtYWw7CgltYXJnaW46IC0xcHg7Cn0KLyoKICogalF1ZXJ5IFVJIEJ1dHRvbiBAVkVSU0lPTgogKgogKiBDb3B5cmlnaHQgMjAxMCwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvQnV0dG9uI3RoZW1pbmcKICovCi51aS1idXR0b24geyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZzogMDsgbWFyZ2luLXJpZ2h0OiAuMWVtOyB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsgY3Vyc29yOiBwb2ludGVyOyB0ZXh0LWFsaWduOiBjZW50ZXI7IHpvb206IDE7IG92ZXJmbG93OiB2aXNpYmxlOyB9IC8qIHRoZSBvdmVyZmxvdyBwcm9wZXJ0eSByZW1vdmVzIGV4dHJhIHdpZHRoIGluIElFICovCi51aS1idXR0b24taWNvbi1vbmx5IHsgd2lkdGg6IDIuMmVtOyB9IC8qIHRvIG1ha2Ugcm9vbSBmb3IgdGhlIGljb24sIGEgd2lkdGggbmVlZHMgdG8gYmUgc2V0IGhlcmUgKi8KYnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHkgeyB3aWR0aDogMi40ZW07IH0gLyogYnV0dG9uIGVsZW1lbnRzIHNlZW0gdG8gbmVlZCBhIGxpdHRsZSBtb3JlIHdpZHRoICovCi51aS1idXR0b24taWNvbnMtb25seSB7IHdpZHRoOiAzLjRlbTsgfSAKYnV0dG9uLnVpLWJ1dHRvbi1pY29ucy1vbmx5IHsgd2lkdGg6IDMuN2VtOyB9IAoKLypidXR0b24gdGV4dCBlbGVtZW50ICovCi51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0IHsgZGlzcGxheTogYmxvY2s7IGxpbmUtaGVpZ2h0OiAxLjQ7ICB9Ci51aS1idXR0b24tdGV4dC1vbmx5IC51aS1idXR0b24tdGV4dCB7IHBhZGRpbmc6IC40ZW0gMWVtOyB9Ci51aS1idXR0b24taWNvbi1vbmx5IC51aS1idXR0b24tdGV4dCwgLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24tdGV4dCB7IHBhZGRpbmc6IC40ZW07IHRleHQtaW5kZW50OiAtOTk5OTk5OXB4OyB9Ci51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi10ZXh0LCAudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHsgcGFkZGluZzogLjRlbSAxZW0gLjRlbSAyLjFlbTsgfQoudWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi10ZXh0LCAudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHsgcGFkZGluZzogLjRlbSAyLjFlbSAuNGVtIDFlbTsgfQoudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0IHsgcGFkZGluZy1sZWZ0OiAyLjFlbTsgcGFkZGluZy1yaWdodDogMi4xZW07IH0KLyogbm8gaWNvbiBzdXBwb3J0IGZvciBpbnB1dCBlbGVtZW50cywgcHJvdmlkZSBwYWRkaW5nIGJ5IGRlZmF1bHQgKi8KaW5wdXQudWktYnV0dG9uIHsgcGFkZGluZzogLjRlbSAxZW07IH0KCi8qYnV0dG9uIGljb24gZWxlbWVudChzKSAqLwoudWktYnV0dG9uLWljb24tb25seSAudWktaWNvbiwgLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbiwgLnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1pY29uLCAudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWljb24sIC51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbiB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA1MCU7IG1hcmdpbi10b3A6IC04cHg7IH0KLnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24geyBsZWZ0OiA1MCU7IG1hcmdpbi1sZWZ0OiAtOHB4OyB9Ci51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksIC51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLWljb24tcHJpbWFyeSwgLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24taWNvbi1wcmltYXJ5IHsgbGVmdDogLjVlbTsgfQoudWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSwgLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHsgcmlnaHQ6IC41ZW07IH0KLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksIC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHsgcmlnaHQ6IC41ZW07IH0KCi8qYnV0dG9uIHNldHMqLwoudWktYnV0dG9uc2V0IHsgbWFyZ2luLXJpZ2h0OiA3cHg7IH0KLnVpLWJ1dHRvbnNldCAudWktYnV0dG9uIHsgbWFyZ2luLWxlZnQ6IDA7IG1hcmdpbi1yaWdodDogLS4zZW07IH0KCi8qIHdvcmthcm91bmRzICovCmJ1dHRvbi51aS1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIgeyBib3JkZXI6IDA7IHBhZGRpbmc6IDA7IH0gLyogcmVzZXQgZXh0cmEgcGFkZGluZyBpbiBGaXJlZm94ICovCi8qCiAqIGpRdWVyeSBVSSBEaWFsb2cgQFZFUlNJT04KICoKICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0RpYWxvZyN0aGVtaW5nCiAqLwoudWktZGlhbG9nIHsgcG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAuMmVtOyB3aWR0aDogMzAwcHg7IG92ZXJmbG93OiBoaWRkZW47IH0KLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyIHsgcGFkZGluZzogLjVlbSAxZW0gLjNlbTsgcG9zaXRpb246IHJlbGF0aXZlOyAgfQoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGUgeyBmbG9hdDogbGVmdDsgbWFyZ2luOiAuMWVtIDE2cHggLjJlbSAwOyB9IAoudWktZGlhbG9nIC51aS1kaWFsb2ctdGl0bGViYXItY2xvc2UgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHJpZ2h0OiAuM2VtOyB0b3A6IDUwJTsgd2lkdGg6IDE5cHg7IG1hcmdpbjogLTEwcHggMCAwIDA7IHBhZGRpbmc6IDFweDsgaGVpZ2h0OiAxOHB4OyB9Ci51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSBzcGFuIHsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogMXB4OyB9Ci51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZTpob3ZlciwgLnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlOmZvY3VzIHsgcGFkZGluZzogMDsgfQoudWktZGlhbG9nIC51aS1kaWFsb2ctY29udGVudCB7IHBvc2l0aW9uOiByZWxhdGl2ZTsgYm9yZGVyOiAwOyBwYWRkaW5nOiAuNWVtIDFlbTsgYmFja2dyb3VuZDogbm9uZTsgb3ZlcmZsb3c6IGF1dG87IHpvb206IDE7IH0KLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgeyB0ZXh0LWFsaWduOiBsZWZ0OyBib3JkZXItd2lkdGg6IDFweCAwIDAgMDsgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsgbWFyZ2luOiAuNWVtIDAgMCAwOyBwYWRkaW5nOiAuM2VtIDFlbSAuNWVtIC40ZW07IH0KLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgLnVpLWRpYWxvZy1idXR0b25zZXQgeyBmbG9hdDogcmlnaHQ7IH0KLnVpLWRpYWxvZyAudWktZGlhbG9nLWJ1dHRvbnBhbmUgYnV0dG9uIHsgbWFyZ2luOiAuNWVtIC40ZW0gLjVlbSAwOyBjdXJzb3I6IHBvaW50ZXI7IH0KLnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXNlIHsgd2lkdGg6IDE0cHg7IGhlaWdodDogMTRweDsgcmlnaHQ6IDNweDsgYm90dG9tOiAzcHg7IH0KLnVpLWRyYWdnYWJsZSAudWktZGlhbG9nLXRpdGxlYmFyIHsgY3Vyc29yOiBtb3ZlOyB9Ci8qCiAqIGpRdWVyeSBVSSBTbGlkZXIgQFZFUlNJT04KICoKICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1NsaWRlciN0aGVtaW5nCiAqLwoudWktc2xpZGVyIHsgcG9zaXRpb246IHJlbGF0aXZlOyB0ZXh0LWFsaWduOiBsZWZ0OyB9Ci51aS1zbGlkZXIgLnVpLXNsaWRlci1oYW5kbGUgeyBwb3NpdGlvbjogYWJzb2x1dGU7IHotaW5kZXg6IDI7IHdpZHRoOiAxLjJlbTsgaGVpZ2h0OiAxLjJlbTsgY3Vyc29yOiBkZWZhdWx0OyB9Ci51aS1zbGlkZXIgLnVpLXNsaWRlci1yYW5nZSB7IHBvc2l0aW9uOiBhYnNvbHV0ZTsgei1pbmRleDogMTsgZm9udC1zaXplOiAuN2VtOyBkaXNwbGF5OiBibG9jazsgYm9yZGVyOiAwOyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDA7IH0KCi51aS1zbGlkZXItaG9yaXpvbnRhbCB7IGhlaWdodDogLjhlbTsgfQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1oYW5kbGUgeyB0b3A6IC0uM2VtOyBtYXJnaW4tbGVmdDogLS42ZW07IH0KLnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UgeyB0b3A6IDA7IGhlaWdodDogMTAwJTsgfQoudWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1yYW5nZS1taW4geyBsZWZ0OiAwOyB9Ci51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdlLW1heCB7IHJpZ2h0OiAwOyB9CgoudWktc2xpZGVyLXZlcnRpY2FsIHsgd2lkdGg6IC44ZW07IGhlaWdodDogMTAwcHg7IH0KLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLWhhbmRsZSB7IGxlZnQ6IC0uM2VtOyBtYXJnaW4tbGVmdDogMDsgbWFyZ2luLWJvdHRvbTogLS42ZW07IH0KLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlIHsgbGVmdDogMDsgd2lkdGg6IDEwMCU7IH0KLnVpLXNsaWRlci12ZXJ0aWNhbCAudWktc2xpZGVyLXJhbmdlLW1pbiB7IGJvdHRvbTogMDsgfQoudWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWF4IHsgdG9wOiAwOyB9LyoKICogalF1ZXJ5IFVJIFRhYnMgQFZFUlNJT04KICoKICogQ29weXJpZ2h0IDIwMTAsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL1RhYnMjdGhlbWluZwogKi8KLnVpLXRhYnMgeyBwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmc6IC4yZW07IHpvb206IDE7IH0gLyogcG9zaXRpb246IHJlbGF0aXZlIHByZXZlbnRzIElFIHNjcm9sbCBidWcgKGVsZW1lbnQgd2l0aCBwb3NpdGlvbjogcmVsYXRpdmUgaW5zaWRlIGNvbnRhaW5lciB3aXRoIG92ZXJmbG93OiBhdXRvIGFwcGVhciBhcyAiZml4ZWQiKSAqLwoudWktdGFicyAudWktdGFicy1uYXYgeyBtYXJnaW46IDA7IHBhZGRpbmc6IC4yZW0gLjJlbSAwOyB9Ci51aS10YWJzIC51aS10YWJzLW5hdiBsaSB7IGxpc3Qtc3R5bGU6IG5vbmU7IGZsb2F0OiBsZWZ0OyBwb3NpdGlvbjogcmVsYXRpdmU7IHRvcDogMXB4OyBtYXJnaW46IDAgLjJlbSAxcHggMDsgYm9yZGVyLWJvdHRvbTogMCAhaW1wb3J0YW50OyBwYWRkaW5nOiAwOyB3aGl0ZS1zcGFjZTogbm93cmFwOyB9Ci51aS10YWJzIC51aS10YWJzLW5hdiBsaSBhIHsgZmxvYXQ6IGxlZnQ7IHBhZGRpbmc6IC41ZW0gMWVtOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KLnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtc2VsZWN0ZWQgeyBtYXJnaW4tYm90dG9tOiAwOyBwYWRkaW5nLWJvdHRvbTogMXB4OyB9Ci51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS10YWJzLXNlbGVjdGVkIGEsIC51aS10YWJzIC51aS10YWJzLW5hdiBsaS51aS1zdGF0ZS1kaXNhYmxlZCBhLCAudWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtcHJvY2Vzc2luZyBhIHsgY3Vyc29yOiB0ZXh0OyB9Ci51aS10YWJzIC51aS10YWJzLW5hdiBsaSBhLCAudWktdGFicy51aS10YWJzLWNvbGxhcHNpYmxlIC51aS10YWJzLW5hdiBsaS51aS10YWJzLXNlbGVjdGVkIGEgeyBjdXJzb3I6IHBvaW50ZXI7IH0gLyogZmlyc3Qgc2VsZWN0b3IgaW4gZ3JvdXAgc2VlbXMgb2Jzb2xldGUsIGJ1dCByZXF1aXJlZCB0byBvdmVyY29tZSBidWcgaW4gT3BlcmEgYXBwbHlpbmcgY3Vyc29yOiB0ZXh0IG92ZXJhbGwgaWYgZGVmaW5lZCBlbHNld2hlcmUuLi4gKi8KLnVpLXRhYnMgLnVpLXRhYnMtcGFuZWwgeyBkaXNwbGF5OiBibG9jazsgYm9yZGVyLXdpZHRoOiAwOyBwYWRkaW5nOiAxZW0gMS40ZW07IGJhY2tncm91bmQ6IG5vbmU7IH0KLnVpLXRhYnMgLnVpLXRhYnMtaGlkZSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsgfQovKgogKiBqUXVlcnkgVUkgRGF0ZXBpY2tlciBAVkVSU0lPTgogKgogKiBDb3B5cmlnaHQgMjAxMCwgQVVUSE9SUy50eHQgKGh0dHA6Ly9qcXVlcnl1aS5jb20vYWJvdXQpCiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLgogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVUkvRGF0ZXBpY2tlciN0aGVtaW5nCiAqLwoudWktZGF0ZXBpY2tlciB7IHdpZHRoOiAxN2VtOyBwYWRkaW5nOiAuMmVtIC4yZW0gMDsgfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1oZWFkZXIgeyBwb3NpdGlvbjpyZWxhdGl2ZTsgcGFkZGluZzouMmVtIDA7IH0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldiwgLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCB7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6IDJweDsgd2lkdGg6IDEuOGVtOyBoZWlnaHQ6IDEuOGVtOyB9Ci51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYtaG92ZXIsIC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXIgeyB0b3A6IDFweDsgfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHsgbGVmdDoycHg7IH0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dCB7IHJpZ2h0OjJweDsgfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVyIHsgbGVmdDoxcHg7IH0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciB7IHJpZ2h0OjFweDsgfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2IHNwYW4sIC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQgc3BhbiB7IGRpc3BsYXk6IGJsb2NrOyBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDUwJTsgbWFyZ2luLWxlZnQ6IC04cHg7IHRvcDogNTAlOyBtYXJnaW4tdG9wOiAtOHB4OyAgfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci10aXRsZSB7IG1hcmdpbjogMCAyLjNlbTsgbGluZS1oZWlnaHQ6IDEuOGVtOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItdGl0bGUgc2VsZWN0IHsgZm9udC1zaXplOjFlbTsgbWFyZ2luOjFweCAwOyB9Ci51aS1kYXRlcGlja2VyIHNlbGVjdC51aS1kYXRlcGlja2VyLW1vbnRoLXllYXIge3dpZHRoOiAxMDAlO30KLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIAoudWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyIHsgd2lkdGg6IDQ5JTt9Ci51aS1kYXRlcGlja2VyIHRhYmxlIHt3aWR0aDogMTAwJTsgZm9udC1zaXplOiAuOWVtOyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyBtYXJnaW46MCAwIC40ZW07IH0KLnVpLWRhdGVwaWNrZXIgdGggeyBwYWRkaW5nOiAuN2VtIC4zZW07IHRleHQtYWxpZ246IGNlbnRlcjsgZm9udC13ZWlnaHQ6IGJvbGQ7IGJvcmRlcjogMDsgIH0KLnVpLWRhdGVwaWNrZXIgdGQgeyBib3JkZXI6IDA7IHBhZGRpbmc6IDFweDsgfQoudWktZGF0ZXBpY2tlciB0ZCBzcGFuLCAudWktZGF0ZXBpY2tlciB0ZCBhIHsgZGlzcGxheTogYmxvY2s7IHBhZGRpbmc6IC4yZW07IHRleHQtYWxpZ246IHJpZ2h0OyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IH0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB7IGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7IG1hcmdpbjogLjdlbSAwIDAgMDsgcGFkZGluZzowIC4yZW07IGJvcmRlci1sZWZ0OiAwOyBib3JkZXItcmlnaHQ6IDA7IGJvcmRlci1ib3R0b206IDA7IH0KLnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24geyBmbG9hdDogcmlnaHQ7IG1hcmdpbjogLjVlbSAuMmVtIC40ZW07IGN1cnNvcjogcG9pbnRlcjsgcGFkZGluZzogLjJlbSAuNmVtIC4zZW0gLjZlbTsgd2lkdGg6YXV0bzsgb3ZlcmZsb3c6dmlzaWJsZTsgfQoudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIGJ1dHRvbi51aS1kYXRlcGlja2VyLWN1cnJlbnQgeyBmbG9hdDpsZWZ0OyB9CgovKiB3aXRoIG11bHRpcGxlIGNhbGVuZGFycyAqLwoudWktZGF0ZXBpY2tlci51aS1kYXRlcGlja2VyLW11bHRpIHsgd2lkdGg6YXV0bzsgfQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cCB7IGZsb2F0OmxlZnQ7IH0KLnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItZ3JvdXAgdGFibGUgeyB3aWR0aDo5NSU7IG1hcmdpbjowIGF1dG8gLjRlbTsgfQoudWktZGF0ZXBpY2tlci1tdWx0aS0yIC51aS1kYXRlcGlja2VyLWdyb3VwIHsgd2lkdGg6NTAlOyB9Ci51aS1kYXRlcGlja2VyLW11bHRpLTMgLnVpLWRhdGVwaWNrZXItZ3JvdXAgeyB3aWR0aDozMy4zJTsgfQoudWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3VwIHsgd2lkdGg6MjUlOyB9Ci51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsgYm9yZGVyLWxlZnQtd2lkdGg6MDsgfQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsgYm9yZGVyLWxlZnQtd2lkdGg6MDsgfQoudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1idXR0b25wYW5lIHsgY2xlYXI6bGVmdDsgfQoudWktZGF0ZXBpY2tlci1yb3ctYnJlYWsgeyBjbGVhcjpib3RoOyB3aWR0aDoxMDAlOyB9CgovKiBSVEwgc3VwcG9ydCAqLwoudWktZGF0ZXBpY2tlci1ydGwgeyBkaXJlY3Rpb246IHJ0bDsgfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItcHJldiB7IHJpZ2h0OiAycHg7IGxlZnQ6IGF1dG87IH0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQgeyBsZWZ0OiAycHg7IHJpZ2h0OiBhdXRvOyB9Ci51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVyIHsgcmlnaHQ6IDFweDsgbGVmdDogYXV0bzsgfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dDpob3ZlciB7IGxlZnQ6IDFweDsgcmlnaHQ6IGF1dG87IH0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgeyBjbGVhcjpyaWdodDsgfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24geyBmbG9hdDogbGVmdDsgfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50IHsgZmxvYXQ6cmlnaHQ7IH0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwIHsgZmxvYXQ6cmlnaHQ7IH0KLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QgLnVpLWRhdGVwaWNrZXItaGVhZGVyIHsgYm9yZGVyLXJpZ2h0LXdpZHRoOjA7IGJvcmRlci1sZWZ0LXdpZHRoOjFweDsgfQoudWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIC51aS1kYXRlcGlja2VyLWhlYWRlciB7IGJvcmRlci1yaWdodC13aWR0aDowOyBib3JkZXItbGVmdC13aWR0aDoxcHg7IH0KCi8qIElFNiBJRlJBTUUgRklYICh0YWtlbiBmcm9tIGRhdGVwaWNrZXIgMS41LjMgKi8KLnVpLWRhdGVwaWNrZXItY292ZXIgewogICAgZGlzcGxheTogbm9uZTsgLypzb3JyeSBmb3IgSUU1Ki8KICAgIGRpc3BsYXkvKiovOiBibG9jazsgLypzb3JyeSBmb3IgSUU1Ki8KICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgLyptdXN0IGhhdmUqLwogICAgei1pbmRleDogLTE7IC8qbXVzdCBoYXZlKi8KICAgIGZpbHRlcjogbWFzaygpOyAvKm11c3QgaGF2ZSovCiAgICB0b3A6IC00cHg7IC8qbXVzdCBoYXZlKi8KICAgIGxlZnQ6IC00cHg7IC8qbXVzdCBoYXZlKi8KICAgIHdpZHRoOiAyMDBweDsgLyptdXN0IGhhdmUqLwogICAgaGVpZ2h0OiAyMDBweDsgLyptdXN0IGhhdmUqLwp9LyoKICogalF1ZXJ5IFVJIFByb2dyZXNzYmFyIEBWRVJTSU9OCiAqCiAqIENvcHlyaWdodCAyMDEwLCBBVVRIT1JTLnR4dCAoaHR0cDovL2pxdWVyeXVpLmNvbS9hYm91dCkKICogRHVhbCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIG9yIEdQTCBWZXJzaW9uIDIgbGljZW5zZXMuCiAqIGh0dHA6Ly9qcXVlcnkub3JnL2xpY2Vuc2UKICoKICogaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VSS9Qcm9ncmVzc2JhciN0aGVtaW5nCiAqLwoudWktcHJvZ3Jlc3NiYXIgeyBoZWlnaHQ6MmVtOyB0ZXh0LWFsaWduOiBsZWZ0OyB9Ci51aS1wcm9ncmVzc2JhciAudWktcHJvZ3Jlc3NiYXItdmFsdWUge21hcmdpbjogLTFweDsgaGVpZ2h0OjEwMCU7IH0=]]></data>
	</file>
	<file>
	  <filename>/lib/jquery/versioncompare.jquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqICBqUXVlcnkgdmVyc2lvbiBjb21wYXJlIHBsdWdpbgogKgogKiAgVXNhZ2U6CiAqICAgICQudmVyc2lvbmNvbXBhcmUodmVyc2lvbjFbLCB2ZXJzaW9uMiA9IGpRdWVyeS5mbi5qcXVlcnldKQogKgogKiAgRXhhbXBsZToKICogICAgY29uc29sZS5sb2coJC52ZXJzaW9uY29tcGFyZSgiMS40IiwgIjEuNi40IikpOwogKgogKiAgUmV0dXJuOgogKiAgICAwIGlmIHR3byBwYXJhbXMgYXJlIGVxdWFsCiAqICAgIDEgaWYgdGhlIHNlY29uZCBpcyBsb3dlcgogKiAgIC0xIGlmIHRoZSBzZWNvbmQgaXMgaGlnaGVyCiAqCiAqICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUOgogKiAgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAKICoKICogIENvcHlyaWdodCAoYykgMjAxMSwgTm9idSBGdW5ha2kgQHp1emFyYQogKi8KKGZ1bmN0aW9uKCQpewogICQudmVyc2lvbmNvbXBhcmUgPSBmdW5jdGlvbih2ZXJzaW9uMSwgdmVyc2lvbjIpewogICAgaWYgKCd1bmRlZmluZWQnID09PSB0eXBlb2YgdmVyc2lvbjEpIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCIkLnZlcnNpb25jb21wYXJlIG5lZWRzIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuIik7CiAgICB9CiAgICB2ZXJzaW9uMiA9IHZlcnNpb24yIHx8ICQuZm4uanF1ZXJ5OwogICAgaWYgKHZlcnNpb24xID09IHZlcnNpb24yKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgdmFyIHYxID0gbm9ybWFsaXplKHZlcnNpb24xKTsKICAgIHZhciB2MiA9IG5vcm1hbGl6ZSh2ZXJzaW9uMik7CiAgICB2YXIgbGVuID0gTWF0aC5tYXgodjEubGVuZ3RoLCB2Mi5sZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICB2MVtpXSA9IHYxW2ldIHx8IDA7CiAgICAgIHYyW2ldID0gdjJbaV0gfHwgMDsKICAgICAgaWYgKHYxW2ldID09IHYyW2ldKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHYxW2ldID4gdjJbaV0gPyAxIDogLTE7CiAgICB9CiAgICByZXR1cm4gMDsKICB9OwogIGZ1bmN0aW9uIG5vcm1hbGl6ZSh2ZXJzaW9uKXsKICAgIHJldHVybiAkLm1hcCh2ZXJzaW9uLnNwbGl0KCcuJyksIGZ1bmN0aW9uKHZhbHVlKXsKICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7CiAgICB9KTsKICB9Cn0oalF1ZXJ5KSk7]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/CHANGELOG.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Tm8gY2hhbmdlbG9nIHlldCwgc29ycnku]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/COPYRIGHT.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QmVubnUgLSBBbiBvYmplY3Qtb3JpZW50ZWQgaUNhbGVuZGFyIChSRkMyNDQ1KSBpbXBsZW1lbnRhdGlvbiBpbiBQSFANCmh0dHA6Ly9iZW5udS5zb3VyY2Vmb3JnZS5uZXQNCg0KQmVubnUgaXMgY29weXJpZ2h0IChDKSAyMDA1IGJ5IElvYW5uaXMgUGFwYWlvYW5ub3UgKHBqQHVvbS5ncikuDQoNClRoZSBmdWxsIHRleHQgb2YgdGhlIExHTFAgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiBMSUNFTlNFLnR4dA0KDQpUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yDQptb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQpMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCnZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KDQpUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQ0KTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCg0KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0bzoNClRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCjUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vcg0KQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBDQo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/lib/bennu.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gJElkOiBiZW5udS5pbmMucGhwLHYgMS4zIDIwMDUvMDcvMjEgMjI6MzE6NDQgZGVmYWNlciBFeHAgJA0KDQppZighZGVmaW5lZCgnX0JFTk5VX1ZFUlNJT04nKSkgew0KICAgIGRlZmluZSgnX0JFTk5VX1ZFUlNJT04nLCAnMC4xJyk7DQogICAgaW5jbHVkZSgnaUNhbGVuZGFyX3JmYzI0NDUucGhwJyk7DQogICAgaW5jbHVkZSgnaUNhbGVuZGFyX2NvbXBvbmVudHMucGhwJyk7DQogICAgaW5jbHVkZSgnaUNhbGVuZGFyX3Byb3BlcnRpZXMucGhwJyk7DQogICAgaW5jbHVkZSgnaUNhbGVuZGFyX3BhcmFtZXRlcnMucGhwJyk7DQp9DQoNCj8+DQo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/lib/iCalendar_components.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gJElkOiBpQ2FsZW5kYXJfY29tcG9uZW50cy5waHAsdiAxLjggMjAwNS8wNy8yMSAyMjozMTo0NCBkZWZhY2VyIEV4cCAkDQoNCmNsYXNzIGlDYWxlbmRhcl9jb21wb25lbnQgew0KICAgIHZhciAkbmFtZSAgICAgICAgICAgICA9IE5VTEw7DQogICAgdmFyICRwcm9wZXJ0aWVzICAgICAgID0gTlVMTDsNCiAgICB2YXIgJGNvbXBvbmVudHMgICAgICAgPSBOVUxMOw0KICAgIHZhciAkdmFsaWRfcHJvcGVydGllcyA9IE5VTEw7DQogICAgdmFyICR2YWxpZF9jb21wb25lbnRzID0gTlVMTDsNCg0KICAgIGZ1bmN0aW9uIGlDYWxlbmRhcl9jb21wb25lbnQoKSB7DQogICAgICAgICR0aGlzLT5jb25zdHJ1Y3QoKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbXBvbmVudHMgYXJyYXkNCiAgICAgICAgaWYoZW1wdHkoJHRoaXMtPmNvbXBvbmVudHMpKSB7DQogICAgICAgICAgICAkdGhpcy0+Y29tcG9uZW50cyA9IGFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT52YWxpZF9jb21wb25lbnRzIGFzICRuYW1lKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmNvbXBvbmVudHNbJG5hbWVdID0gYXJyYXkoKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGdldF9uYW1lKCkgew0KICAgICAgICByZXR1cm4gJHRoaXMtPm5hbWU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gYWRkX3Byb3BlcnR5KCRuYW1lLCAkdmFsdWUgPSBOVUxMLCAkcGFyYW1ldGVycyA9IE5VTEwpIHsNCg0KICAgICAgICAvLyBVcHBlcmNhc2UgZmlyc3Qgb2YgYWxsDQogICAgICAgICRuYW1lID0gc3RydG91cHBlcigkbmFtZSk7DQoNCiAgICAgICAgLy8gQXJlIHdlIHRyeWluZyB0byBhZGQgYSB2YWxpZCBwcm9wZXJ0eT8NCiAgICAgICAgJHhuYW1lID0gZmFsc2U7DQogICAgICAgIGlmKCFpc3NldCgkdGhpcy0+dmFsaWRfcHJvcGVydGllc1skbmFtZV0pKSB7DQogICAgICAgICAgICAvLyBJZiBub3QsIGlzIGl0IGFuIHgtbmFtZSBhcyBwZXIgUkZDIDI0NDU/DQogICAgICAgICAgICBpZighcmZjMjQ0NV9pc194bmFtZSgkbmFtZSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAvLyBTaW5jZSB0aGlzIGlzIGFuIHhuYW1lLCBhbGwgY29tcG9uZW50cyBhcmUgc3VwcG9zZWQgdG8gYWxsb3cgdGhpcyBwcm9wZXJ0eQ0KICAgICAgICAgICAgJHhuYW1lID0gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIENyZWF0ZSBhIHByb3BlcnR5IG9iamVjdCBvZiB0aGUgY29ycmVjdCBjbGFzcw0KICAgICAgICBpZigkeG5hbWUpIHsNCiAgICAgICAgICAgICRwcm9wZXJ0eSA9IG5ldyBpQ2FsZW5kYXJfcHJvcGVydHlfeDsNCiAgICAgICAgICAgICRwcm9wZXJ0eS0+c2V0X25hbWUoJG5hbWUpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgJGNsYXNzbmFtZSA9ICdpQ2FsZW5kYXJfcHJvcGVydHlfJy5zdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCctJywgJ18nLCAkbmFtZSkpOw0KICAgICAgICAgICAgJHByb3BlcnR5ID0gbmV3ICRjbGFzc25hbWU7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBJZiAkdmFsdWUgaXMgTlVMTCwgdGhlbiB0aGlzIHByb3BlcnR5IG11c3QgZGVmaW5lIGEgZGVmYXVsdCB2YWx1ZS4NCiAgICAgICAgaWYoJHZhbHVlID09PSBOVUxMKSB7DQogICAgICAgICAgICAkdmFsdWUgPSAkcHJvcGVydHktPmRlZmF1bHRfdmFsdWUoKTsNCiAgICAgICAgICAgIGlmKCR2YWx1ZSA9PT0gTlVMTCkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFNldCB0aGlzIHByb3BlcnR5J3MgcGFyZW50IGNvbXBvbmVudCB0byBvdXJzZWx2ZXMsIGJlY2F1c2Ugc29tZQ0KICAgICAgICAvLyBwcm9wZXJ0aWVzIGJlaGF2ZSBkaWZmZXJlbnRseSBhY2NvcmRpbmcgdG8gd2hhdCBjb21wb25lbnQgdGhleSBhcHBseSB0by4NCiAgICAgICAgJHByb3BlcnR5LT5zZXRfcGFyZW50X2NvbXBvbmVudCgkdGhpcy0+bmFtZSk7DQoNCiAgICAgICAgLy8gU2V0IHBhcmFtZXRlcnMgYmVmb3JlIHZhbHVlOyB0aGlzIGhlbHBzIHdpdGggc29tZSBwcm9wZXJ0aWVzIHdoaWNoDQogICAgICAgIC8vIGFjY2VwdCBhIFZBTFVFIHBhcmFtZXRlciwgYW5kIHRodXMgY2hhbmdlIHRoZWlyIGRlZmF1bHQgdmFsdWUgdHlwZS4NCg0KICAgICAgICAvLyBUaGUgcGFyYW1ldGVycyBtdXN0IGJlIHZhbGlkIGFjY29yZGluZyB0byBwcm9wZXJ0eSBzcGVjaWZpY2F0aW9ucw0KICAgICAgICBpZighZW1wdHkoJHBhcmFtZXRlcnMpKSB7DQogICAgICAgICAgICBmb3JlYWNoKCRwYXJhbWV0ZXJzIGFzICRwYXJhbW5hbWUgPT4gJHBhcmFtdmFsdWUpIHsNCiAgICAgICAgICAgICAgICBpZighJHByb3BlcnR5LT5zZXRfcGFyYW1ldGVyKCRwYXJhbW5hbWUsICRwYXJhbXZhbHVlKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBTb21lIHBhcmFtZXRlcnMgaW50ZXJhY3QgYW1vbmcgdGhlbXNlbHZlcyAoZS5nLiBFTkNPRElORyBhbmQgVkFMVUUpDQogICAgICAgICAgICAvLyBzbyBtYWtlIHN1cmUgdGhhdCBhZnRlciB0aGUgZHVzdCBzZXR0bGVzLCB0aGVzZSBpbnZhcmlhbnRzIGhvbGQgdHJ1ZQ0KICAgICAgICAgICAgaWYoISRwcm9wZXJ0eS0+aW52YXJpYW50X2hvbGRzKCkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyAkdmFsdWUgTVVTVCBiZSB2YWxpZCBhY2NvcmRpbmcgdG8gdGhlIHByb3BlcnR5IGRhdGEgdHlwZQ0KICAgICAgICBpZighJHByb3BlcnR5LT5zZXRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gSWYgdGhpcyBwcm9wZXJ0eSBpcyByZXN0cmljdGVkIHRvIG9ubHkgb25jZSwgYmxpbmRseSBvdmVyd3JpdGUgdmFsdWUNCiAgICAgICAgaWYoISR4bmFtZSAmJiAkdGhpcy0+dmFsaWRfcHJvcGVydGllc1skbmFtZV0gJiBSRkMyNDQ1X09OQ0UpIHsNCiAgICAgICAgICAgICR0aGlzLT5wcm9wZXJ0aWVzWyRuYW1lXSA9IGFycmF5KCRwcm9wZXJ0eSk7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBPdGhlcndpc2UgYWRkIGl0IHRvIHRoZSBpbnN0YW5jZSBhcnJheSBmb3IgdGhpcyBwcm9wZXJ0eQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICR0aGlzLT5wcm9wZXJ0aWVzWyRuYW1lXVtdID0gJHByb3BlcnR5Ow0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRmluYWxseTogYWZ0ZXIgYWxsIHRoZXNlLCBkb2VzIHRoZSBjb21wb25lbnQgaW52YXJpYW50IGhvbGQ/DQogICAgICAgIGlmKCEkdGhpcy0+aW52YXJpYW50X2hvbGRzKCkpIHsNCiAgICAgICAgICAgIC8vIElmIG5vdCwgY29tcGxldGVseSB1bmRvIHRoZSBwcm9wZXJ0eSBhZGRpdGlvbg0KICAgICAgICAgICAgYXJyYXlfcG9wKCR0aGlzLT5wcm9wZXJ0aWVzWyRuYW1lXSk7DQogICAgICAgICAgICBpZihlbXB0eSgkdGhpcy0+cHJvcGVydGllc1skbmFtZV0pKSB7DQogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPnByb3BlcnRpZXNbJG5hbWVdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOyAgICAgICAgDQogICAgICAgIA0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGFkZF9jb21wb25lbnQoJGNvbXBvbmVudCkgew0KDQogICAgICAgIC8vIFdpdGggdGhlIGRldGFpbGVkIGludGVyZmFjZSwgeW91IGNhbiBhZGQgb25seSBjb21wb25lbnRzIHdpdGggdGhpcyBmdW5jdGlvbg0KICAgICAgICBpZighaXNfb2JqZWN0KCRjb21wb25lbnQpIHx8ICFpc19zdWJjbGFzc19vZigkY29tcG9uZW50LCAnaUNhbGVuZGFyX2NvbXBvbmVudCcpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICAkbmFtZSA9ICRjb21wb25lbnQtPmdldF9uYW1lKCk7DQoNCiAgICAgICAgLy8gT25seSB2YWxpZCBjb21wb25lbnRzIGFzIHNwZWNpZmllZCBieSB0aGlzIGNvbXBvbmVudCBhcmUgYWxsb3dlZA0KICAgICAgICBpZighaW5fYXJyYXkoJG5hbWUsICR0aGlzLT52YWxpZF9jb21wb25lbnRzKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQWRkIGl0DQogICAgICAgICR0aGlzLT5jb21wb25lbnRzWyRuYW1lXVtdID0gJGNvbXBvbmVudDsNCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRfcHJvcGVydHlfbGlzdCgkbmFtZSkgew0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGludmFyaWFudF9ob2xkcygpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNfdmFsaWQoKSB7DQogICAgICAgIC8vIElmIHdlIGhhdmUgYW55IGNoaWxkIGNvbXBvbmVudHMsIGNoZWNrIHRoYXQgdGhleSBhcmUgYWxsIHZhbGlkDQogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+Y29tcG9uZW50cykpIHsNCiAgICAgICAgICAgIGZvcmVhY2goJHRoaXMtPmNvbXBvbmVudHMgYXMgJGNvbXBvbmVudCA9PiAkaW5zdGFuY2VzKSB7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkaW5zdGFuY2VzIGFzICRudW1iZXIgPT4gJGluc3RhbmNlKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCEkaW5zdGFuY2UtPmlzX3ZhbGlkKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIEZpbmFsbHksIGNoZWNrIHRoZSB2YWxpZCBwcm9wZXJ0eSBsaXN0IGZvciBhbnkgbWFuZGF0b3J5IHByb3BlcnRpZXMNCiAgICAgICAgLy8gdGhhdCBoYXZlIG5vdCBiZWVuIHNldCBhbmQgZG8gbm90IGhhdmUgYSBkZWZhdWx0IHZhbHVlDQogICAgICAgIGZvcmVhY2goJHRoaXMtPnZhbGlkX3Byb3BlcnRpZXMgYXMgJHByb3BlcnR5ID0+ICRwcm9wZGF0YSkgew0KICAgICAgICAgICAgaWYoKCRwcm9wZGF0YSAmIFJGQzI0NDVfUkVRVUlSRUQpICYmIGVtcHR5KCR0aGlzLT5wcm9wZXJ0aWVzWyRwcm9wZXJ0eV0pKSB7DQogICAgICAgICAgICAgICAgJGNsYXNzbmFtZSA9ICdpQ2FsZW5kYXJfcHJvcGVydHlfJy5zdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCctJywgJ18nLCAkcHJvcGVydHkpKTsNCiAgICAgICAgICAgICAgICAkb2JqZWN0ICAgID0gbmV3ICRjbGFzc25hbWU7DQogICAgICAgICAgICAgICAgaWYoJG9iamVjdC0+ZGVmYXVsdF92YWx1ZSgpID09PSBOVUxMKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdW5zZXQoJG9iamVjdCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQogICAgDQogICAgZnVuY3Rpb24gc2VyaWFsaXplKCkgew0KICAgICAgICAvLyBDaGVjayBmb3IgdmFsaWRpdHkgb2YgdGhlIG9iamVjdA0KICAgICAgICBpZighJHRoaXMtPmlzX3ZhbGlkKCkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIE1heWJlIHRoZSBvYmplY3QgaXMgdmFsaWQsIGJ1dCB0aGVyZSBhcmUgc29tZSByZXF1aXJlZCBwcm9wZXJ0aWVzIHRoYXQNCiAgICAgICAgLy8gaGF2ZSBub3QgYmVlbiBnaXZlbiBleHBsaWNpdCB2YWx1ZXMuIEluIHRoYXQgY2FzZSwgc2V0IHRoZW0gdG8gZGVmYXVsdHMuDQogICAgICAgIGZvcmVhY2goJHRoaXMtPnZhbGlkX3Byb3BlcnRpZXMgYXMgJHByb3BlcnR5ID0+ICRwcm9wZGF0YSkgew0KICAgICAgICAgICAgaWYoKCRwcm9wZGF0YSAmIFJGQzI0NDVfUkVRVUlSRUQpICYmIGVtcHR5KCR0aGlzLT5wcm9wZXJ0aWVzWyRwcm9wZXJ0eV0pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPmFkZF9wcm9wZXJ0eSgkcHJvcGVydHkpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU3RhcnQgdGFnDQogICAgICAgICRzdHJpbmcgPSByZmMyNDQ1X2ZvbGQoJ0JFR0lOOicuJHRoaXMtPm5hbWUpIC4gUkZDMjQ0NV9DUkxGOw0KDQogICAgICAgIC8vIExpc3Qgb2YgcHJvcGVydGllcw0KICAgICAgICBpZighZW1wdHkoJHRoaXMtPnByb3BlcnRpZXMpKSB7DQogICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5wcm9wZXJ0aWVzIGFzICRuYW1lID0+ICRwcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkcHJvcGVydGllcyBhcyAkcHJvcGVydHkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHN0cmluZyAuPSAkcHJvcGVydHktPnNlcmlhbGl6ZSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIC8vIExpc3Qgb2YgY29tcG9uZW50cw0KICAgICAgICBpZighZW1wdHkoJHRoaXMtPmNvbXBvbmVudHMpKSB7DQogICAgICAgICAgICBmb3JlYWNoKCR0aGlzLT5jb21wb25lbnRzIGFzICRuYW1lID0+ICRjb21wb25lbnRzKSB7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkY29tcG9uZW50cyBhcyAkY29tcG9uZW50KSB7DQogICAgICAgICAgICAgICAgICAgICRzdHJpbmcgLj0gJGNvbXBvbmVudC0+c2VyaWFsaXplKCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gRW5kIHRhZw0KICAgICAgICAkc3RyaW5nIC49IHJmYzI0NDVfZm9sZCgnRU5EOicuJHRoaXMtPm5hbWUpIC4gUkZDMjQ0NV9DUkxGOw0KDQogICAgICAgIHJldHVybiAkc3RyaW5nOw0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXIgZXh0ZW5kcyBpQ2FsZW5kYXJfY29tcG9uZW50IHsNCiAgICB2YXIgJG5hbWUgPSAnVkNBTEVOREFSJzsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3Byb3BlcnRpZXMgPSBhcnJheSgNCiAgICAgICAgICAgICdDQUxTQ0FMRScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdNRVRIT0QnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdQUk9ESUQnICAgICAgPT4gUkZDMjQ0NV9SRVFVSVJFRCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdWRVJTSU9OJyAgICAgPT4gUkZDMjQ0NV9SRVFVSVJFRCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTCANCiAgICAgICAgKTsNCg0KICAgICAgICAkdGhpcy0+dmFsaWRfY29tcG9uZW50cyA9IGFycmF5KA0KICAgICAgICAgICAgJ1ZFVkVOVCcNCiAgICAgICAgICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciB0aGUgb3RoZXIgY29tcG9uZW50IHR5cGVzDQogICAgICAgICAgICAvLywgJ1ZUT0RPJywgJ1ZKT1VSTkFMJywgJ1ZGUkVFQlVTWScsICdWVElNRVpPTkUnLCAnVkFMQVJNJw0KICAgICAgICApOw0KICAgICAgICBwYXJlbnQ6OmNvbnN0cnVjdCgpOw0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfZXZlbnQgZXh0ZW5kcyBpQ2FsZW5kYXJfY29tcG9uZW50IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICA9ICdWRVZFTlQnOw0KICAgIHZhciAkcHJvcGVydGllczsNCiAgICANCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgIA0KICAgICAgICAkdGhpcy0+dmFsaWRfY29tcG9uZW50cyA9IGFycmF5KCdWQUxBUk0nKTsNCg0KICAgICAgICAkdGhpcy0+dmFsaWRfcHJvcGVydGllcyA9IGFycmF5KA0KICAgICAgICAgICAgJ0NMQVNTJyAgICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0NSRUFURUQnICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0RFU0NSSVBUSU9OJyAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgLy8gU3RhbmRhcmQgYW1iaWd1b3VzIGhlcmU6IGluIDQuNi4xIGl0IHNheXMgdGhhdCBEVFNUQU1QIGluIG9wdGlvbmFsLA0KICAgICAgICAgICAgLy8gd2hpbGUgaW4gNC44LjcuMiBpdCBzYXlzIGl0J3MgUkVRVUlSRUQuIEdvIHdpdGggUkVRVUlSRUQuDQogICAgICAgICAgICAnRFRTVEFNUCcgICAgICAgID0+IFJGQzI0NDVfUkVRVUlSRUQgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAvLyBTdGFuZGFyZCBhbWJpZ3VvdXMgaGVyZTogaW4gNC42LjEgaXQgc2F5cyB0aGF0IERUU1RBUlQgaW4gb3B0aW9uYWwsDQogICAgICAgICAgICAvLyB3aGlsZSBpbiA0LjguMi40IGl0IHNheXMgaXQncyBSRVFVSVJFRC4gR28gd2l0aCBSRVFVSVJFRC4NCiAgICAgICAgICAgICdEVFNUQVJUJyAgICAgICAgPT4gUkZDMjQ0NV9SRVFVSVJFRCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdHRU8nICAgICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdMQVNULU1PRElGSUVEJyAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdMT0NBVElPTicgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdPUkdBTklaRVInICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdQUklPUklUWScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdTRVFVRU5DRScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdTVEFUVVMnICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdTVU1NQVJZJyAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdUUkFOU1AnICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIC8vIFN0YW5kYXJkIGFtYmlndW91cyBoZXJlOiBpbiA0LjYuMSBpdCBzYXlzIHRoYXQgVUlEIGluIG9wdGlvbmFsLA0KICAgICAgICAgICAgLy8gd2hpbGUgaW4gNC44LjQuNyBpdCBzYXlzIGl0J3MgUkVRVUlSRUQuIEdvIHdpdGggUkVRVUlSRUQuDQogICAgICAgICAgICAnVUlEJyAgICAgICAgICAgID0+IFJGQzI0NDVfUkVRVUlSRUQgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnVVJMJyAgICAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnUkVDVVJSRU5DRS1JRCcgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnRFRFTkQnICAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnRFVSQVRJT04nICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnQVRUQUNIJyAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnQVRURU5ERUUnICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnQ0FURUdPUklFUycgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnQ09NTUVOVCcgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnQ09OVEFDVCcgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnRVhEQVRFJyAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnRVhSVUxFJyAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnUkVRVUVTVC1TVEFUVVMnID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnUkVMQVRFRC1UTycgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnUkVTT1VSQ0VTJyAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnUkRBVEUnICAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICAnUlJVTEUnICAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FICAgID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCg0KICAgICAgICBwYXJlbnQ6OmNvbnN0cnVjdCgpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGludmFyaWFudF9ob2xkcygpIHsNCiAgICAgICAgLy8gRFRFTkQgYW5kIERVUkFUSU9OIG11c3Qgbm90IGFwcGVhciB0b2dldGhlcg0KICAgICAgICBpZihpc3NldCgkdGhpcy0+cHJvcGVydGllc1snRFRFTkQnXSkgJiYgaXNzZXQoJHRoaXMtPnByb3BlcnRpZXNbJ0RVUkFUSU9OJ10pKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICANCiAgICAgICAgaWYoaXNzZXQoJHRoaXMtPnByb3BlcnRpZXNbJ0RURU5EJ10pICYmIGlzc2V0KCR0aGlzLT5wcm9wZXJ0aWVzWydEVFNUQVJUJ10pKSB7DQogICAgICAgICAgICAvLyBEVEVORCBtdXN0IGJlIGxhdGVyIHRoYW4gRFRTVEFSVA0KICAgICAgICAgICAgLy8gVGhlIHN0YW5kYXJkIGlzIG5vdCBjbGVhciBvbiBob3cgdG8gaGFuZGUgZGlmZmVyZW50IHZhbHVlIHR5cGVzIHRob3VnaA0KICAgICAgICAgICAgLy8gVE9ETzogaGFuZGxlIHRoaXMgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIHZhbHVlIHR5cGVzIGFyZSBkaWZmZXJlbnQNCiAgICAgICAgICAgIGlmKCR0aGlzLT5wcm9wZXJ0aWVzWydEVEVORCddWzBdLT52YWx1ZSA8PSAkdGhpcy0+cHJvcGVydGllc1snRFRTVEFSVCddWzBdLT52YWx1ZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gRFRFTkQgYW5kIERUU1RBUlQgbXVzdCBoYXZlIHRoZSBzYW1lIHZhbHVlIHR5cGUNCiAgICAgICAgICAgIGlmKCR0aGlzLT5wcm9wZXJ0aWVzWydEVEVORCddWzBdLT52YWxfdHlwZSAhPSAkdGhpcy0+cHJvcGVydGllc1snRFRTVEFSVCddWzBdLT52YWxfdHlwZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICB9DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfdG9kbyBleHRlbmRzIGlDYWxlbmRhcl9jb21wb25lbnQgew0KICAgIHZhciAkbmFtZSAgICAgICA9ICdWVE9ETyc7DQogICAgdmFyICRwcm9wZXJ0aWVzOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KDQogICAgICAgICR0aGlzLT5wcm9wZXJ0aWVzID0gYXJyYXkoDQogICAgICAgICAgICAnY2xhc3MnICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnY29tcGxldGVkJyAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnY3JlYXRlZCcgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnZGVzY3JpcHRpb24nID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnZHRzdGFtcCcgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnZHRzdGFydCcgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnZ2VvJyAgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnbGFzdC1tb2RpZmllZCcgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdsb2NhdGlvbicgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdvcmdhbml6ZXInICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdwZXJjZW50JyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdwcmlvcml0eScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdyZWN1cmlkJyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdzZXF1ZW5jZScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdzdGF0dXMnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdzdW1tYXJ5JyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICd1aWQnICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICd1cmwnICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdkdWUnICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdkdXJhdGlvbicgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdhdHRhY2gnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdhdHRlbmRlZScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdjYXRlZ29yaWVzJyAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdjb21tZW50JyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdjb250YWN0JyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdleGRhdGUnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdleHJ1bGUnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdyc3RhdHVzJyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdyZWxhdGVkJyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdyZXNvdXJjZXMnICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdyZGF0ZScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICdycnVsZScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCwNCiAgICAgICAgICAgICd4cHJvcCcgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KDQogICAgICAgIHBhcmVudDo6Y29uc3RydWN0KCk7DQogICAgICAgIC8vIFRPRE86DQogICAgICAgIC8vIGVpdGhlciAnZHVlJyBvciAnZHVyYXRpb24nIG1heSBhcHBlYXIgaW4gIGEgJ2V2ZW50cHJvcCcsIGJ1dCAnZHVlJw0KICAgICAgICAvLyBhbmQgJ2R1cmF0aW9uJyBNVVNUIE5PVCBvY2N1ciBpbiB0aGUgc2FtZSAnZXZlbnRwcm9wJw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX2pvdXJuYWwgZXh0ZW5kcyBpQ2FsZW5kYXJfY29tcG9uZW50IHsNCiAgICAvLyBUT0RPOiBpbXBsZW1lbnQNCn0NCg0KY2xhc3MgaUNhbGVuZGFyX2ZyZWVidXN5IGV4dGVuZHMgaUNhbGVuZGFyX2NvbXBvbmVudCB7DQogICAgLy8gVE9ETzogaW1wbGVtZW50DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9hbGFybSBleHRlbmRzIGlDYWxlbmRhcl9jb21wb25lbnQgew0KICAgIC8vIFRPRE86IGltcGxlbWVudA0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfdGltZXpvbmUgZXh0ZW5kcyBpQ2FsZW5kYXJfY29tcG9uZW50IHsNCiAgICB2YXIgJG5hbWUgICAgICAgPSAnVlRJTUVaT05FJzsNCiAgICB2YXIgJHByb3BlcnRpZXM7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQoNCiAgICAgICAgJHRoaXMtPnByb3BlcnRpZXMgPSBhcnJheSgNCiAgICAgICAgICAgICd0emlkJyAgICAgICAgPT4gUkZDMjQ0NV9SRVFVSVJFRCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdsYXN0LW1vZGlmaWVkJyAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ3R6dXJsJyAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgLy8gVE9ETzogdGhlIG5leHQgdHdvIGFyZSBjb21wb25lbnRzIG9mIHRoZWlyIG93biENCiAgICAgICAgICAgICdzdGFuZGFyZGMnICAgPT4gUkZDMjQ0NV9SRVFVSVJFRCwNCiAgICAgICAgICAgICdkYXlsaWdodGMnICAgPT4gUkZDMjQ0NV9SRVFVSVJFRCwNCiAgICAgICAgICAgICd4LXByb3AnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgICAgICANCiAgICAgICAgcGFyZW50Ojpjb25zdHJ1Y3QoKTsNCiAgICB9DQoNCn0NCg0KLy8gUkVNSU5ERVI6IERURU5EIG11c3QgYmUgbGF0ZXIgdGhhbiBEVFNUQVJUIGZvciBhbGwgY29tcG9uZW50cyB3aGljaCBzdXBwb3J0IGJvdGgNCi8vIFJFTUlOREVSOiBEVUUgbXVzdCBiZSBsYXRlciB0aGFuIERUU1RBUlQgZm9yIGFsbCBjb21wb25lbnRzIHdoaWNoIHN1cHBvcnQgYm90aA0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/lib/iCalendar_parameters.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gJElkOiBpQ2FsZW5kYXJfcGFyYW1ldGVycy5waHAsdiAxLjcgMjAwNS8wNy8yMSAyMzoxNzoyMSBkZWZhY2VyIEV4cCAkDQoNCmNsYXNzIGlDYWxlbmRhcl9wYXJhbWV0ZXIgew0KICAgIGZ1bmN0aW9uIG11bHRpcGxlX3ZhbHVlc19hbGxvd2VkKCRwYXJhbWV0ZXIpIHsNCiAgICAgICAgc3dpdGNoKCRwYXJhbWV0ZXIpIHsNCiAgICAgICAgICAgIGNhc2UgJ0RFTEVHQVRFRC1GUk9NJzoNCiAgICAgICAgICAgIGNhc2UgJ0RFTEVHQVRFRC1UTyc6DQogICAgICAgICAgICBjYXNlICdNRU1CRVInOg0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkZWZhdWx0X3ZhbHVlKCRwYXJhbWV0ZXIpIHsNCiAgICAgICAgc3dpdGNoKCRwYXJhbWV0ZXIpIHsNCiAgICAgICAgICAgIGNhc2UgJ0NVVFlQRSc6ICAgcmV0dXJuICdJTkRJVklEVUFMJzsNCiAgICAgICAgICAgIGNhc2UgJ0ZCVFlQRSc6ICAgcmV0dXJuICdCVVNZJzsNCiAgICAgICAgICAgIGNhc2UgJ1BBUlRTVEFUJzogcmV0dXJuICdORUVEUy1BQ1RJT04nOw0KICAgICAgICAgICAgY2FzZSAnUkVMQVRFRCc6ICByZXR1cm4gJ1NUQVJUJzsNCiAgICAgICAgICAgIGNhc2UgJ1JFTFRZUEUnOiAgcmV0dXJuICdQQVJFTlQnOw0KICAgICAgICAgICAgY2FzZSAnUk9MRSc6ICAgICByZXR1cm4gJ1JFUS1QQVJUSUNJUEFOVCc7DQogICAgICAgICAgICBjYXNlICdSU1ZQJzogICAgIHJldHVybiAnRkFMU0UnOw0KICAgICAgICAgICAgZGVmYXVsdDogICAgICAgICByZXR1cm4gTlVMTDsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3ZhbHVlKCYkcGFyZW50X3Byb3BlcnR5LCAkcGFyYW1ldGVyLCAkdmFsdWUpIHsNCiAgICAgICAgc3dpdGNoKCRwYXJhbWV0ZXIpIHsNCiAgICAgICAgICAgIC8vIFRoZXNlIG11c3QgYWxsIGJlIGEgVVJJDQogICAgICAgICAgICBjYXNlICdBTFRSRVAnOg0KICAgICAgICAgICAgY2FzZSAnRElSJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gcmZjMjQ0NV9pc192YWxpZF92YWx1ZSgkdmFsdWUsIFJGQzI0NDVfVFlQRV9VUkkpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIC8vIFRoZXNlIG11c3QgYmUgQ0FMLUFERFJFU1MsIHdoaWNoIGlzIGVxdWl2YWxlbnQgdG8gVVJJDQogICAgICAgICAgICBjYXNlICdERUxFR0FURUQtRlJPTSc6DQogICAgICAgICAgICBjYXNlICdERUxFR0FURUQtVE8nOg0KICAgICAgICAgICAgY2FzZSAnTUVNQkVSJzoNCiAgICAgICAgICAgIGNhc2UgJ1NFTlQtQlknOg0KICAgICAgICAgICAgICAgIHJldHVybiByZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSwgUkZDMjQ0NV9UWVBFX0NBTF9BRERSRVNTKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAvLyBUaGVzZSBhcmUgdGV4dHVhbCBwYXJhbWV0ZXJzLCBzbyB0aGUgTVVTVCBOT1QgY29udGFpbiBkb3VibGUgcXVvdGVzDQogICAgICAgICAgICBjYXNlICdDTic6DQogICAgICAgICAgICAgICAgcmV0dXJuIChzdHJwb3MoJHZhbHVlLCAnIicpID09PSBmYWxzZSk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgLy8gVGhlc2UgaGF2ZSBlbnVtZXJhdGVkIGxlZ2FsIHZhbHVlcw0KICAgICAgICAgICAgY2FzZSAnQ1VUWVBFJzoNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJ0b3VwcGVyKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuICgkdmFsdWUgPT0gJ0lORElWSURVQUwnIHx8ICR2YWx1ZSA9PSAnR1JPVVAnIHx8ICR2YWx1ZSA9PSAnUkVTT1VSQ0UnIHx8ICR2YWx1ZSA9PSAnUk9PTScgfHwgJHZhbHVlID09ICdVTktOT1dOJyB8fCByZmMyNDQ1X2lzX3huYW1lKCR2YWx1ZSkpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ0VOQ09ESU5HJzoNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJ0b3VwcGVyKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuICgkdmFsdWUgPT0gJzhCSVQnIHx8ICR2YWx1ZSA9PSAnQkFTRTY0JyB8fCByZmMyNDQ1X2lzX3huYW1lKCR2YWx1ZSkpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ0ZCVFlQRSc6DQogICAgICAgICAgICAgICAgJHZhbHVlID0gc3RydG91cHBlcigkdmFsdWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoJHZhbHVlID09ICdGUkVFJyB8fCAkdmFsdWUgPT0gJ0JVU1knIHx8ICR2YWx1ZSA9PSAnQlVTWS1VTkFWQUlMQUJMRScgfHwgJHZhbHVlID09ICdCVVNZLVRFTlRBVElWRScgfHwgcmZjMjQ0NV9pc194bmFtZSgkdmFsdWUpKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlICdGTVRUWVBFJzoNCiAgICAgICAgICAgICAgICAkZm10dHlwZXMgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAgICAgICAgICdURVhUJyAgICAgICAgPT4gYXJyYXkoJ1BMQUlOJywgJ1JJQ0hURVhUJywgJ0VOUklDSEVEJywgJ1RBQi1TRVBBUkFURUQtVkFMVUVTJywgJ0hUTUwnLCAnU0dNTCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWTkQuTEFURVgtWicsICdWTkQuRk1JLkZMRVhTVE9SJyksDQogICAgICAgICAgICAgICAgICAgICAgICAnTVVMVElQQVJUJyAgID0+IGFycmF5KCdNSVhFRCcsICdBTFRFUk5BVElWRScsICdESUdFU1QnLCAnUEFSQUxMRUwnLCAnQVBQTEVET1VCTEUnLCAnSEVBREVSLVNFVCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGT1JNLURBVEEnLCAnUkVMQVRFRCcsICdSRVBPUlQnLCAnVk9JQ0UtTUVTU0FHRScsICdTSUdORUQnLCAnRU5DUllQVEVEJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0JZVEVSQU5HRVMnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdNRVNTQUdFJyAgICAgPT4gYXJyYXkoJ1JGQzgyMicsICdQQVJUSUFMJywgJ0VYVEVSTkFMLUJPRFknLCAnTkVXUycsICdIVFRQJyksDQogICAgICAgICAgICAgICAgICAgICAgICAnQVBQTElDQVRJT04nID0+IGFycmF5KCdPQ1RFVC1TVFJFQU0nLCAnUE9TVFNDUklQVCcsICdPREEnLCAnQVRPTUlDTUFJTCcsICdBTkRSRVctSU5TRVQnLCAnU0xBVEUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnV0lUQScsICdERUMtRFgnLCAnRENBLVJGVCcsICdBQ1RJVkVNRVNTQUdFJywgJ1JURicsICdBUFBMRUZJTEUnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTUFDLUJJTkhFWDQwJywgJ05FV1MtTUVTU0FHRS1JRCcsICdORVdTLVRSQU5TTUlTU0lPTicsICdXT1JEUEVSRkVDVDUuMScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQREYnLCAnWklQJywgJ01BQ1dSSVRFSUknLCAnTVNXT1JEJywgJ1JFTU9URS1QUklOVElORycsICdNQVRIRU1BVElDQScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDWUJFUkNBU0gnLCAnQ09NTU9OR1JPVU5EJywgJ0lHRVMnLCAnUklTQ09TJywgJ0VTSE9QJywgJ1g0MDAtQlAnLCAnU0dNTCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDQUxTLTE4NDAnLCAnUEdQLUVOQ1JZUFRFRCcsICdQR1AtU0lHTkFUVVJFJywgJ1BHUC1LRVlTJywgJ1ZORC5GUkFNRU1BS0VSJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZORC5NSUYnLCAnVk5ELk1TLUVYQ0VMJywgJ1ZORC5NUy1QT1dFUlBPSU5UJywgJ1ZORC5NUy1QUk9KRUNUJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZORC5NUy1XT1JLUycsICdWTkQuTVMtVE5FRicsICdWTkQuU1ZEJywgJ1ZORC5NVVNJQy1OSUZGJywgJ1ZORC5NUy1BUlRHQUxSWScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWTkQuVFJVRURPQycsICdWTkQuS09BTicsICdWTkQuU1RSRUVULVNUUkVBTScsICdWTkQuRkRGJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NFVC1QQVlNRU5ULUlOSVRJQVRJT04nLCAnU0VULVBBWU1FTlQnLCAnU0VULVJFR0lTVFJBVElPTi1JTklUSUFUSU9OJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1NFVC1SRUdJU1RSQVRJT04nLCAnVk5ELlNFRU1BSUwnLCAnVk5ELkJVU0lORVNTT0JKRUNUUycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWTkQuTUVSSURJQU4tU0xJTkdTSE9UJywgJ1ZORC5YQVJBJywgJ1NHTUwtT1BFTi1DQVRBTE9HJywgJ1ZORC5SQVBJRCcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdWTkQuRU5MSVZFTicsICdWTkQuSkFQQU5ORVQtUkVHSVNUUkFUSU9OLVdBS0VVUCcsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVk5ELkpBUEFOTkVULVZFUklGSUNBVElPTi1XQUtFVVAnLCAnVk5ELkpBUEFOTkVULVBBWU1FTlQtV0FLRVVQJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZORC5KQVBBTk5FVC1ESVJFQ1RPUlktU0VSVklDRScsICdWTkQuSU5URVJUUlVTVC5ESUdJQk9YJywgJ1ZORC5JTlRFUlRSVVNULk5OQ1AnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdJTUFHRScgICAgICAgPT4gYXJyYXkoJ0pQRUcnLCAnR0lGJywgJ0lFRicsICdHM0ZBWCcsICdUSUZGJywgJ0NHTScsICdOQVBMUFMnLCAnVk5ELkRXRycsICdWTkQuU1ZGJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1ZORC5EWEYnLCAnUE5HJywgJ1ZORC5GUFgnLCAnVk5ELk5FVC1GUFgnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdBVURJTycgICAgICAgPT4gYXJyYXkoJ0JBU0lDJywgJzMyS0FEUENNJywgJ1ZORC5RQ0VMUCcpLA0KICAgICAgICAgICAgICAgICAgICAgICAgJ1ZJREVPJyAgICAgICA9PiBhcnJheSgnTVBFRycsICdRVUlDS1RJTUUnLCAnVk5ELlZJVk8nLCAnVk5ELk1PVE9ST0xBLlZJREVPJywgJ1ZORC5NT1RPUk9MQS5WSURFT1AnKQ0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgJHZhbHVlID0gc3RydG91cHBlcigkdmFsdWUpOw0KICAgICAgICAgICAgICAgIGlmKHJmYzI0NDVfaXNfeG5hbWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgQGxpc3QoJHR5cGUsICRzdWJ0eXBlKSA9IGV4cGxvZGUoJy8nLCAkdmFsdWUpOw0KICAgICAgICAgICAgICAgIGlmKGVtcHR5KCR0eXBlKSB8fCBlbXB0eSgkc3VidHlwZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZighaXNzZXQoJGZtdHR5cGVzWyR0eXBlXSkgfHwgIWluX2FycmF5KCRzdWJ0eXBlLCAkZm10dHlwZXNbJHR5cGVdKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ0xBTkdVQUdFJzoNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJ0b3VwcGVyKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLScsICR2YWx1ZSk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkcGFydHMgYXMgJHBhcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkoJHBhcnQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgaWYoc3Ryc3BuKCRwYXJ0LCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5JykgIT0gc3RybGVuKCRwYXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ1BBUlRTVEFUJzoNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJ0b3VwcGVyKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgc3dpdGNoKCRwYXJlbnRfcHJvcGVydHktPnBhcmVudF9jb21wb25lbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVkVWRU5UJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoJHZhbHVlID09ICdORUVEUy1BQ1RJT04nIHx8ICR2YWx1ZSA9PSAnQUNDRVBURUQnIHx8ICR2YWx1ZSA9PSAnREVDTElORUQnIHx8ICR2YWx1ZSA9PSAnVEVOVEFUSVZFJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkdmFsdWUgPT0gJ0RFTEVHQVRFRCcgfHwgcmZjMjQ0NV9pc194bmFtZSgkdmFsdWUpKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1ZUT0RPJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoJHZhbHVlID09ICdORUVEUy1BQ1RJT04nIHx8ICR2YWx1ZSA9PSAnQUNDRVBURUQnIHx8ICR2YWx1ZSA9PSAnREVDTElORUQnIHx8ICR2YWx1ZSA9PSAnVEVOVEFUSVZFJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAkdmFsdWUgPT0gJ0RFTEVHQVRFRCcgfHwgJHZhbHVlID09ICdDT01QTEVURUQnIHx8ICR2YWx1ZSA9PSAnSU4tUFJPQ0VTUycgfHwgcmZjMjQ0NV9pc194bmFtZSgkdmFsdWUpKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1ZKT1VSTkFMJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoJHZhbHVlID09ICdORUVEUy1BQ1RJT04nIHx8ICR2YWx1ZSA9PSAnQUNDRVBURUQnIHx8ICR2YWx1ZSA9PSAnREVDTElORUQnIHx8IHJmYzI0NDVfaXNfeG5hbWUoJHZhbHVlKSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAnUkFOR0UnOg0KICAgICAgICAgICAgICAgICR2YWx1ZSA9IHN0cnRvdXBwZXIoJHZhbHVlKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKCR2YWx1ZSA9PSAnVEhJU0FORFBSSU9SJyB8fCAkdmFsdWUgPT0gJ1RISVNBTkRGVVRVUkUnKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlICdSRUxBVEVEJzoNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJ0b3VwcGVyKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuICgkdmFsdWUgPT0gJ1NUQVJUJyB8fCAkdmFsdWUgPT0gJ0VORCcpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgJ1JFTFRZUEUnOg0KICAgICAgICAgICAgICAgICR2YWx1ZSA9IHN0cnRvdXBwZXIoJHZhbHVlKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKCR2YWx1ZSA9PSAnUEFSRU5UJyB8fCAkdmFsdWUgPT0gJ0NISUxEJyB8fCAkdmFsdWUgPT0gJ1NJQkxJTkcnIHx8IHJmYzI0NDVfaXNfeG5hbWUoJHZhbHVlKSk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAnUk9MRSc6DQogICAgICAgICAgICAgICAgJHZhbHVlID0gc3RydG91cHBlcigkdmFsdWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoJHZhbHVlID09ICdDSEFJUicgfHwgJHZhbHVlID09ICdSRVEtUEFSVElDSVBBTlQnIHx8ICR2YWx1ZSA9PSAnT1BULVBBUlRJQ0lQQU5UJyB8fCAkdmFsdWUgPT0gJ05PTi1QQVJUSUNJUEFOVCcgfHwgcmZjMjQ0NV9pc194bmFtZSgkdmFsdWUpKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlICdSU1ZQJzoNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdHJ0b3VwcGVyKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgcmV0dXJuICgkdmFsdWUgPT0gJ1RSVUUnIHx8ICR2YWx1ZSA9PSAnRkFMU0UnKTsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlICdUWklEJzoNCiAgICAgICAgICAgICAgICBpZihlbXB0eSgkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuIChzdHJjc3BuKCR2YWx1ZSwgJyI7OiwnKSA9PSBzdHJsZW4oJHZhbHVlKSk7DQogICAgICAgICAgICBicmVhazsNCg0KICAgICAgICAgICAgY2FzZSAnVkFMVUUnOg0KICAgICAgICAgICAgICAgICR2YWx1ZSA9IHN0cnRvdXBwZXIoJHZhbHVlKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gKCR2YWx1ZSA9PSAnQklOQVJZJyAgICB8fCAkdmFsdWUgPT0gJ0JPT0xFQU4nICAgIHx8ICR2YWx1ZSA9PSAnQ0FMLUFERFJFU1MnIHx8ICR2YWx1ZSA9PSAnREFURScgICAgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9PSAnREFURS1USU1FJyB8fCAkdmFsdWUgPT0gJ0RVUkFUSU9OJyAgIHx8ICR2YWx1ZSA9PSAnRkxPQVQnICAgICAgIHx8ICR2YWx1ZSA9PSAnSU5URUdFUicgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9PSAnUEVSSU9EJyAgICB8fCAkdmFsdWUgPT0gJ1JFQ1VSJyAgICAgIHx8ICR2YWx1ZSA9PSAnVEVYVCcgICAgICAgIHx8ICR2YWx1ZSA9PSAnVElNRScgICAgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgICR2YWx1ZSA9PSAnVVJJJyAgICAgICB8fCAkdmFsdWUgPT0gJ1VUQy1PRkZTRVQnIHx8IHJmYzI0NDVfaXNfeG5hbWUoJHZhbHVlKSk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGRvX3ZhbHVlX2Zvcm1hdHRpbmcoJHBhcmFtZXRlciwgJHZhbHVlKSB7DQogICAgICAgIHN3aXRjaCgkcGFyYW1ldGVyKSB7DQogICAgICAgICAgICAvLyBQYXJhbWV0ZXJzIG9mIHR5cGUgQ0FMLUFERFJFU1Mgb3IgVVJJIE1VU1QgYmUgZG91YmxlLXF1b3RlZA0KICAgICAgICAgICAgY2FzZSAnQUxUUkVQJzoNCiAgICAgICAgICAgIGNhc2UgJ0RJUic6DQogICAgICAgICAgICBjYXNlICdERUxFR0FURUQtRlJPTSc6DQogICAgICAgICAgICBjYXNlICdERUxFR0FURUQtVE8nOg0KICAgICAgICAgICAgY2FzZSAnTUVNQkVSJzoNCiAgICAgICAgICAgIGNhc2UgJ1NFTlQtQlknOg0KICAgICAgICAgICAgICAgIHJldHVybiAnIicuJHZhbHVlLiciJzsNCiAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAvLyBUZXh0dWFsIHBhcmFtZXRlciB0eXBlcyBtdXN0IGJlIGRvdWJsZSBxdW90ZWQgaWYgdGhleSBjb250YWluIENPTE9OLCBTRU1JQ09MT04NCiAgICAgICAgICAgIC8vIG9yIENPTU1BLiBRdW90aW5nIGFsd2F5cyBzb3VuZHMgZWFzaWVyIGFuZCBzdGFuZGFyZHMtY29uZm9ybWFudCB0aG91Z2guDQogICAgICAgICAgICBjYXNlICdDTic6DQogICAgICAgICAgICAgICAgcmV0dXJuICciJy4kdmFsdWUuJyInOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIC8vIFBhcmFtZXRlcnMgd2l0aCBlbnVtZXJhdGVkIGxlZ2FsIHZhbHVlcywganVzdCBtYWtlIHRoZW0gYWxsIGNhcHMNCiAgICAgICAgICAgIGNhc2UgJ0NVVFlQRSc6DQogICAgICAgICAgICBjYXNlICdFTkNPRElORyc6DQogICAgICAgICAgICBjYXNlICdGQlRZUEUnOg0KICAgICAgICAgICAgY2FzZSAnRk1UVFlQRSc6DQogICAgICAgICAgICBjYXNlICdMQU5HVUFHRSc6DQogICAgICAgICAgICBjYXNlICdQQVJUU1RBVCc6DQogICAgICAgICAgICBjYXNlICdSQU5HRSc6DQogICAgICAgICAgICBjYXNlICdSRUxBVEVEJzoNCiAgICAgICAgICAgIGNhc2UgJ1JFTFRZUEUnOg0KICAgICAgICAgICAgY2FzZSAnUk9MRSc6DQogICAgICAgICAgICBjYXNlICdSU1ZQJzoNCiAgICAgICAgICAgIGNhc2UgJ1ZBTFVFJzoNCiAgICAgICAgICAgICAgICByZXR1cm4gc3RydG91cHBlcigkdmFsdWUpOw0KICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIC8vIFBhcmFtZXRlcnMgd2Ugc2hvdWxkbid0IGJlIG1lc3Npbmcgd2l0aA0KICAgICAgICAgICAgY2FzZSAnVFpJRCc6DQogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgZnVuY3Rpb24gdW5kb192YWx1ZV9mb3JtYXR0aW5nKCRwYXJhbWV0ZXIsICR2YWx1ZSkgew0KICAgIH0NCg0KfQ0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/lib/iCalendar_properties.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gJElkOiBpQ2FsZW5kYXJfcHJvcGVydGllcy5waHAsdiAxLjEzIDIwMDUvMDcvMjEgMjI6NDI6MTMgZGVmYWNlciBFeHAgJA0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KICAgIC8vIFByb3BlcnRpZXMgY2FuIGhhdmUgcGFyYW1ldGVycywgYnV0IGNhbm5vdCBoYXZlIG90aGVyIHByb3BlcnRpZXMgb3IgY29tcG9uZW50cw0KDQogICAgdmFyICRwYXJlbnRfY29tcG9uZW50ID0gTlVMTDsNCiAgICB2YXIgJHZhbHVlICAgICAgICAgICAgPSBOVUxMOw0KICAgIHZhciAkcGFyYW1ldGVycyAgICAgICA9IE5VTEw7DQogICAgdmFyICR2YWxpZF9wYXJhbWV0ZXJzID0gTlVMTDsNCg0KICAgIC8vIFRoZXNlIGFyZSBjb21tb24gZm9yIDk1JSBvZiBwcm9wZXJ0aWVzLCBzbyBkZWZpbmUgdGhlbSBoZXJlIGFuZCBvdmVycmlkZSBhcyBuZWNlc3NhcnkNCiAgICB2YXIgJHZhbF9tdWx0aSAgICAgICAgPSBmYWxzZTsNCiAgICB2YXIgJHZhbF9kZWZhdWx0ICAgICAgPSBOVUxMOw0KDQogICAgZnVuY3Rpb24gaUNhbGVuZGFyX3Byb3BlcnR5KCkgew0KICAgICAgICAkdGhpcy0+Y29uc3RydWN0KCk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+cGFyYW1ldGVycyA9IGFycmF5KCk7DQogICAgfQ0KDQogICAgLy8gSWYgc29tZSBwcm9wZXJ0eSBuZWVkcyBleHRyYSBjYXJlIHdpdGggaXRzIHBhcmFtZXRlcnMsIG92ZXJyaWRlIHRoaXMNCiAgICAvLyBJTVBPUlRBTlQ6IHRoZSBwYXJhbWV0ZXIgbmFtZSBNVVNUIEJFIENBUElUQUxJWkVEIQ0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3BhcmFtZXRlcigkcGFyYW1ldGVyLCAkdmFsdWUpIHsNCg0KICAgICAgICBpZihpc19hcnJheSgkdmFsdWUpKSB7DQogICAgICAgICAgICBpZighaUNhbGVuZGFyX3BhcmFtZXRlcjo6bXVsdGlwbGVfdmFsdWVzX2FsbG93ZWQoJHBhcmFtZXRlcikpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3JlYWNoKCR2YWx1ZSBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgIGlmKCFpQ2FsZW5kYXJfcGFyYW1ldGVyOjppc192YWxpZF92YWx1ZSgkdGhpcywgJHBhcmFtZXRlciwgJGl0ZW0pKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBpQ2FsZW5kYXJfcGFyYW1ldGVyOjppc192YWxpZF92YWx1ZSgkdGhpcywgJHBhcmFtZXRlciwgJHZhbHVlKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpbnZhcmlhbnRfaG9sZHMoKSB7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIC8vIElmIHNvbWUgcHJvcGVydHkgaXMgdmVyeSBwaWNreSBhYm91dCBpdHMgdmFsdWVzLCBpdCBzaG91bGQgZG8gdGhlIHdvcmsgaXRzZWxmDQogICAgLy8gT25seSBkYXRhIHR5cGUgdmFsaWRhdGlvbiBpcyBkb25lIGhlcmUNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoaXNfYXJyYXkoJHZhbHVlKSkgew0KICAgICAgICAgICAgaWYoISR0aGlzLT52YWxfbXVsdGkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR2YWx1ZSBhcyAkb25ldmFsKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCFyZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCRvbmV2YWwsICR0aGlzLT52YWxfdHlwZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiByZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSwgJHRoaXMtPnZhbF90eXBlKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBkZWZhdWx0X3ZhbHVlKCkgew0KICAgICAgICByZXR1cm4gJHRoaXMtPnZhbF9kZWZhdWx0Ow0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNldF9wYXJlbnRfY29tcG9uZW50KCRjb21wb25lbnRuYW1lKSB7DQogICAgICAgIGlmKGNsYXNzX2V4aXN0cygnaUNhbGVuZGFyXycuc3RydG9sb3dlcihzdWJzdHIoJGNvbXBvbmVudG5hbWUsIDEpKSkpIHsNCiAgICAgICAgICAgICR0aGlzLT5wYXJlbnRfY29tcG9uZW50ID0gc3RydG91cHBlcigkY29tcG9uZW50bmFtZSk7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzZXRfdmFsdWUoJHZhbHVlKSB7DQogICAgICAgIGlmKCR0aGlzLT5pc192YWxpZF92YWx1ZSgkdmFsdWUpKSB7DQogICAgICAgICAgICAvLyBUaGlzIHRyYW5zcGFyZW50bHkgZm9ybWF0cyBhbnkgdmFsdWUgdHlwZSBhY2NvcmRpbmcgdG8gdGhlIGlDYWxlbmRhciBzcGVjcw0KICAgICAgICAgICAgaWYoaXNfYXJyYXkoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIGZvcmVhY2goJHZhbHVlIGFzICRrZXkgPT4gJGl0ZW0pIHsNCiAgICAgICAgICAgICAgICAgICAgJHZhbHVlWyRrZXldID0gcmZjMjQ0NV9kb192YWx1ZV9mb3JtYXR0aW5nKCRpdGVtLCAkdGhpcy0+dmFsX3R5cGUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGhpcy0+dmFsdWUgPSBpbXBsb2RlKCcsJywgJHZhbHVlKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICR0aGlzLT52YWx1ZSA9IHJmYzI0NDVfZG9fdmFsdWVfZm9ybWF0dGluZygkdmFsdWUsICR0aGlzLT52YWxfdHlwZSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBnZXRfdmFsdWUoKSB7DQogICAgICAgIC8vIEZpcnN0IG9mIGFsbCwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBtdWx0aXBsZSB2YWx1ZXMNCiAgICAgICAgJHZhbGFycmF5ID0gZXhwbG9kZSgnXFwsJywgJHRoaXMtPnZhbHVlKTsNCg0KICAgICAgICAvLyBVbmRvIHRyYW5zcGFyZW50IGZvcm1hdHRpbmcNCiAgICAgICAgJHJlcGxhY2VfZnVuY3Rpb24gPSBjcmVhdGVfZnVuY3Rpb24oJyRhJywgJ3JldHVybiByZmMyNDQ1X3VuZG9fdmFsdWVfZm9ybWF0dGluZygkYSwgJy4kdGhpcy0+dmFsX3R5cGUuJyk7Jyk7DQogICAgICAgICR2YWxhcnJheSA9IGFycmF5X21hcCgkcmVwbGFjZV9mdW5jdGlvbiwgJHZhbGFycmF5KTsNCg0KICAgICAgICAvLyBOb3csIGlmIHRoaXMgcHJvcGVydHkgY2Fubm90IGhhdmUgbXVsdGlwbGUgdmFsdWVzLCBkb24ndCByZXR1cm4gYXMgYW4gYXJyYXkNCiAgICAgICAgaWYoISR0aGlzLT52YWxfbXVsdGkpIHsNCiAgICAgICAgICAgIHJldHVybiAkdmFsYXJyYXlbMF07DQogICAgICAgIH0NCg0KICAgICAgICAvLyBPdGhlcndpc2UgcmV0dXJuIGFuIGFycmF5IGV2ZW4gaWYgaXQgaGFzIG9uZSBlbGVtZW50LCBmb3IgdW5pZm9ybWl0eQ0KICAgICAgICByZXR1cm4gJHZhbGFycmF5Ow0KDQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0X3BhcmFtZXRlcigkbmFtZSwgJHZhbHVlKSB7DQoNCiAgICAgICAgLy8gVXBwZXJjYXNlDQogICAgICAgICRuYW1lID0gc3RydG91cHBlcigkbmFtZSk7DQoNCiAgICAgICAgLy8gQXJlIHdlIHRyeWluZyB0byBhZGQgYSB2YWxpZCBwYXJhbWV0ZXI/DQogICAgICAgICR4bmFtZSA9IGZhbHNlOw0KICAgICAgICBpZighaXNzZXQoJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnNbJG5hbWVdKSkgew0KICAgICAgICAgICAgLy8gSWYgbm90LCBpcyBpdCBhbiB4LW5hbWUgYXMgcGVyIFJGQyAyNDQ1Pw0KICAgICAgICAgICAgaWYoIXJmYzI0NDVfaXNfeG5hbWUoJG5hbWUpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgLy8gTm8gbW9yZSBjaGVja3MgLS0gYWxsIGNvbXBvbmVudHMgYXJlIHN1cHBvc2VkIHRvIGFsbG93IHgtbmFtZSBwYXJhbWV0ZXJzDQogICAgICAgICAgICAkeG5hbWUgPSB0cnVlOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoISR0aGlzLT5pc192YWxpZF9wYXJhbWV0ZXIoJG5hbWUsICR2YWx1ZSkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmKGlzX2FycmF5KCR2YWx1ZSkpIHsNCiAgICAgICAgICAgIGZvcmVhY2goJHZhbHVlIGFzICRrZXkgPT4gJGVsZW1lbnQpIHsNCiAgICAgICAgICAgICAgICAkdmFsdWVbJGtleV0gPSBpQ2FsZW5kYXJfcGFyYW1ldGVyOjpkb192YWx1ZV9mb3JtYXR0aW5nKCRuYW1lLCAkZWxlbWVudCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAkdmFsdWUgPSBpQ2FsZW5kYXJfcGFyYW1ldGVyOjpkb192YWx1ZV9mb3JtYXR0aW5nKCRuYW1lLCAkdmFsdWUpOw0KICAgICAgICB9DQoNCiAgICAgICAgJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdID0gJHZhbHVlOw0KDQogICAgICAgIC8vIFNwZWNpYWwgY2FzZTogaWYgd2UganVzdCBjaGFuZ2VkIHRoZSBWQUxVRSBwYXJhbWV0ZXIsIHJlZmxlY3QgdGhpcw0KICAgICAgICAvLyBpbiB0aGUgb2JqZWN0J3Mgc3RhdHVzIHNvIHRoYXQgaXQgb25seSBhY2NlcHRzIGNvcnJlY3QgdHlwZSB2YWx1ZXMNCiAgICAgICAgaWYoJG5hbWUgPT0gJ1ZBTFVFJykgew0KICAgICAgICAgICAgLy8gVE9ETzogd2hhdCBpZiB0aGlzIGludmFsaWRhdGVzIGFuIGFscmVhZHktc2V0IHZhbHVlPw0KICAgICAgICAgICAgJHRoaXMtPnZhbF90eXBlID0gY29uc3RhbnQoJ1JGQzI0NDVfVFlQRV8nLnN0cl9yZXBsYWNlKCctJywgJ18nLCAkdmFsdWUpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgfQ0KDQogICAgZnVuY3Rpb24gZ2V0X3BhcmFtZXRlcigkbmFtZSkgew0KDQogICAgICAgIC8vIFVwcGVyY2FzZQ0KICAgICAgICAkbmFtZSA9IHN0cnRvdXBwZXIoJG5hbWUpOw0KDQogICAgICAgIGlmKGlzc2V0KCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSkpIHsNCiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgZG91YmxlIHF1b3RlcyBpbiB0aGUgdmFsdWUsIGludmlzaWJseSBzdHJpcCB0aGVtDQogICAgICAgICAgICBpZihpc19hcnJheSgkdGhpcy0+cGFyYW1ldGVyc1skbmFtZV0pKSB7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdGhpcy0+cGFyYW1ldGVyc1skbmFtZV0gYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoc3Vic3RyKCR2YWx1ZSwgMCwgMSkgPT0gJyInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXVska2V5XSA9IHN1YnN0cigkdmFsdWUsIDEsIHN0cmxlbigkdmFsdWUpIC0gMik7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgaWYoc3Vic3RyKCR0aGlzLT5wYXJhbWV0ZXJzWyRuYW1lXSwgMCwgMSkgPT0gJyInKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdHIoJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdLCAxLCBzdHJsZW4oJHRoaXMtPnBhcmFtZXRlcnNbJG5hbWVdKSAtIDIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBOVUxMOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIHsNCiAgICAgICAgJHN0cmluZyA9ICR0aGlzLT5uYW1lOw0KDQogICAgICAgIGlmKCFlbXB0eSgkdGhpcy0+cGFyYW1ldGVycykpIHsNCiAgICAgICAgICAgIGZvcmVhY2goJHRoaXMtPnBhcmFtZXRlcnMgYXMgJG5hbWUgPT4gJHZhbHVlKSB7DQogICAgICAgICAgICAgICAgJHN0cmluZyAuPSAnOycuJG5hbWUuJz0nOw0KICAgICAgICAgICAgICAgIGlmKGlzX2FycmF5KCR2YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHN0cmluZyAuPSBpbXBsb2RlKCcsJywgJHZhbHVlKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRzdHJpbmcgLj0gJHZhbHVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgICRzdHJpbmcgLj0gJzonLiR0aGlzLT52YWx1ZTsNCg0KICAgICAgICByZXR1cm4gcmZjMjQ0NV9mb2xkKCRzdHJpbmcpIC4gUkZDMjQ0NV9DUkxGOw0KICAgIH0NCn0NCg0KLy8gNC43IENhbGVuZGFyIFByb3BlcnRpZXMNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9jYWxzY2FsZSBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ0NBTFNDQUxFJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgLy8gVGhpcyBpcyBjYXNlLXNlbnNpdGl2ZQ0KICAgICAgICByZXR1cm4gKCR2YWx1ZSA9PT0gJ0dSRUdPUklBTicpOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X21ldGhvZCBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ01FVEhPRCc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9URVhUOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNfdmFsaWRfdmFsdWUoJHZhbHVlKSB7DQogICAgICAgIC8vIFRoaXMgaXMgY2FzZS1zZW5zaXRpdmUNCiAgICAgICAgLy8gTWV0aG9kcyBmcm9tIFJGQyAyNDQ2DQogICAgICAgICRtZXRob2RzID09IGFycmF5KCdQVUJMSVNIJywgJ1JFUVVFU1QnLCAnUkVQTFknLCAnQUREJywgJ0NBTkNFTCcsICdSRUZSRVNIJywgJ0NPVU5URVInLCAnREVDTElORUNPVU5URVInKTsNCiAgICAgICAgcmV0dXJuIGluX2FycmF5KCR2YWx1ZSwgJG1ldGhvZHMpOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X3Byb2RpZCBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ1BST0RJRCc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9URVhUOw0KICAgIHZhciAkdmFsX2RlZmF1bHQgPSBOVUxMOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsX2RlZmF1bHQgPSAnLS8vSm9obiBQYXBhaW9hbm5vdS9OT05TR01MIEJlbm51ICcuX0JFTk5VX1ZFUlNJT04uJy8vRU4nOw0KDQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV92ZXJzaW9uIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnVkVSU0lPTic7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9URVhUOw0KICAgIHZhciAkdmFsX2RlZmF1bHQgPSAnMi4wJzsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSkgew0KICAgICAgICByZXR1cm4oJHZhbHVlID09PSAnMi4wJyB8fCAkdmFsdWUgPT09IDIuMCk7DQogICAgfQ0KDQp9DQoNCi8vIDQuOC4xIERlc2NyaXB0aXZlIENvbXBvbmVudCBQcm9wZXJ0aWVzDQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfYXR0YWNoIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnQVRUQUNIJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1VSSTsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdGTVRUWVBFJyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdFTkNPRElORycgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdWQUxVRScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGludmFyaWFudF9ob2xkcygpIHsNCiAgICAgICAgaWYoaXNzZXQoJHRoaXMtPnBhcmFtZXRlcnNbJ0VOQ09ESU5HJ10pICYmICFpc3NldCgkdGhpcy0+cGFyYW1ldGVyc1snVkFMVUUnXSkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZihpc3NldCgkdGhpcy0+cGFyYW1ldGVyc1snVkFMVUUnXSkgJiYgIWlzc2V0KCR0aGlzLT5wYXJhbWV0ZXJzWydFTkNPRElORyddKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNfdmFsaWRfcGFyYW1ldGVyKCRwYXJhbWV0ZXIsICR2YWx1ZSkgew0KDQogICAgICAgICRwYXJhbWV0ZXIgPSBzdHJ0b3VwcGVyKCRwYXJhbWV0ZXIpOw0KDQogICAgICAgIGlmKCFwYXJlbnQ6OmlzX3ZhbGlkX3BhcmFtZXRlcigkcGFyYW1ldGVyLCAkdmFsdWUpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICBpZigkcGFyYW1ldGVyID09PSAnRU5DT0RJTkcnICYmIHN0cnRvdXBwZXIoJHZhbHVlKSAhPSAnQkFTRTY0Jykgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoJHBhcmFtZXRlciA9PT0gJ1ZBTFVFJyAmJiBzdHJ0b3VwcGVyKCR2YWx1ZSkgIT0gJ0JJTkFSWScpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X2NhdGVnb3JpZXMgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdDQVRFR09SSUVTJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQogICAgdmFyICR2YWxfbXVsdGkgICA9IHRydWU7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnTEFOR1VBR0UnICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9jbGFzcyBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ0NMQVNTJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQogICAgdmFyICR2YWxfZGVmYXVsdCA9ICdQVUJMSUMnOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNfdmFsaWRfdmFsdWUoJHZhbHVlKSB7DQogICAgICAgIC8vIElmIHRoaXMgaXMgbm90IGFuIHhuYW1lLCBpdCBpcyBjYXNlLXNlbnNpdGl2ZQ0KICAgICAgICByZXR1cm4gKCR2YWx1ZSA9PT0gJ1BVQkxJQycgfHwgJHZhbHVlID09PSAnUFJJVkFURScgfHwgJHZhbHVlID09PSAnQ09ORklERU5USUFMJyB8fCByZmMyNDQ1X2lzX3huYW1lKHN0cnRvdXBwZXIoJHZhbHVlKSkpOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X2NvbW1lbnQgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdDT01NRU5UJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnQUxUUkVQJyAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnTEFOR1VBR0UnICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9kZXNjcmlwdGlvbiBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ0RFU0NSSVBUSU9OJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnQUxUUkVQJyAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnTEFOR1VBR0UnICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9nZW8gZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdHRU8nOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfVEVYVDsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdBTFRSRVAnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdMQU5HVUFHRScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSkgew0KICAgICAgICAvLyBUaGlzIE1VU1QgYmUgdHdvIGZsb2F0cyBzZXBhcmF0ZWQgYnkgYSBzZW1pY29sb24NCiAgICAgICAgaWYoIWlzX3N0cmluZygkdmFsdWUpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICAkZmxvYXRzID0gZXhwbG9kZSgnOycsICR2YWx1ZSk7DQogICAgICAgIGlmKGNvdW50KCRmbG9hdHMpICE9IDIpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiByZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCRmbG9hdHNbMF0sIFJGQzI0NDVfVFlQRV9GTE9BVCkgJiYgcmZjMjQ0NV9pc192YWxpZF92YWx1ZSgkZmxvYXRzWzFdLCBSRkMyNDQ1X1RZUEVfRkxPQVQpOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHNldF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgLy8gTXVzdCBvdmVycmlkZSB0aGlzLCBvdGhlcndpc2UgdGhlIHNlbWljb2xvbiBzZXBhcmF0aW5nDQogICAgICAgIC8vIHRoZSB0d28gZmxvYXRzIHdvdWxkIGdldCBhdXRvLXF1b3RlZCwgd2hpY2ggaXMgaWxsZWdhbA0KICAgICAgICBpZigkdGhpcy0+aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOw0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9sb2NhdGlvbiBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ0xPQ0FUSU9OJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnQUxUUkVQJyAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnTEFOR1VBR0UnICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9wZXJjZW50X2NvbXBsZXRlIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnUEVSQ0VOVC1DT01QTEVURSc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9JTlRFR0VSOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNfdmFsaWRfdmFsdWUoJHZhbHVlKSB7DQogICAgICAgIC8vIE9ubHkgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAxMDAgaW5jbHVzaXZlIGFsbG93ZWQNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgICR2YWx1ZSA9IGludHZhbCgkdmFsdWUpOw0KICAgICAgICByZXR1cm4gKCR2YWx1ZSA+PSAwICYmICR2YWx1ZSA8PSAxMDApOw0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfcHJpb3JpdHkgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdQUklPUklUWSc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9JTlRFR0VSOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNfdmFsaWRfdmFsdWUoJHZhbHVlKSB7DQogICAgICAgIC8vIE9ubHkgaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCA5IGluY2x1c2l2ZSBhbGxvd2VkICAgICAgICANCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgJHZhbHVlID0gaW50dmFsKCR2YWx1ZSk7DQogICAgICAgIHJldHVybiAoJHZhbHVlID49IDAgJiYgJHZhbHVlIDw9IDkpOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X3Jlc291cmNlcyBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ1JFU09VUkNFUyc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9URVhUOw0KICAgIHZhciAkdmFsX211bHRpICAgPSB0cnVlOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgJ0FMVFJFUCcgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0xBTkdVQUdFJyAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfc3RhdHVzIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnU1RBVFVTJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgLy8gVGhpcyBpcyBjYXNlLXNlbnNpdGl2ZQ0KICAgICAgICBzd2l0Y2ggKCR0aGlzLT5wYXJlbnRfY29tcG9uZW50KSB7DQogICAgICAgICAgICBjYXNlICdWRVZFTlQnOg0KICAgICAgICAgICAgICAgICRhbGxvd2VkID0gYXJyYXkoJ1RFTlRBVElWRScsICdDT05GSVJNRUQnLCAnQ0FOQ0VMTEVEJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ1ZUT0RPJzoNCiAgICAgICAgICAgICAgICAkYWxsb3dlZCA9IGFycmF5KCdORUVEUy1BQ1RJT04nLCAnQ09NUExFVEVEJywgJ0lOLVBST0NFU1MnLCAnQ0FOQ0VMTEVEJyk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ1ZKT1VSTkFMJzoNCiAgICAgICAgICAgICAgICAkYWxsb3dlZCA9IGFycmF5KCdEUkFGVCcsICdGSU5BTCcsICdDQU5DRUxMRUQnKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBpbl9hcnJheSgkdmFsdWUsICRhbGxvd2VkKTsNCg0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfc3VtbWFyeSBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ1NVTU1BUlknOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfVEVYVDsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdBTFRSRVAnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdMQU5HVUFHRScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCn0NCg0KLy8gNC44LjIgRGF0ZSBhbmQgVGltZSBDb21wb25lbnQgUHJvcGVydGllcw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfY29tcGxldGVkIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnQ09NUExFVEVEJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX0RBVEVfVElNRTsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSkgew0KICAgICAgICBpZighcGFyZW50Ojppc192YWxpZF92YWx1ZSgkdmFsdWUpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgLy8gVGltZSBNVVNUIGJlIGluIFVUQyBmb3JtYXQNCiAgICAgICAgcmV0dXJuKHN1YnN0cigkdmFsdWUsIC0xKSA9PSAnWicpOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X2R0ZW5kIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnRFRFTkQnOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfREFURV9USU1FOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgJ1ZBTFVFJyAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ1RaSUQnICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gaXNfdmFsaWRfdmFsdWUoJHZhbHVlKSB7DQogICAgICAgIGlmKCFwYXJlbnQ6OmlzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIElmIHByZXNlbnQgaW4gYSBGUkVFQlVTWSBjb21wb25lbnQsIG11c3QgYmUgaW4gVVRDIGZvcm1hdA0KICAgICAgICBpZigkdGhpcy0+cGFyZW50X2NvbXBvbmVudCA9PSAnVkZSRUVCVVNZJyAmJiBzdWJzdHIoJHZhbHVlLCAtMSkgIT0gJ1onKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCg0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3BhcmFtZXRlcigkcGFyYW1ldGVyLCAkdmFsdWUpIHsNCg0KICAgICAgICAkcGFyYW1ldGVyID0gc3RydG91cHBlcigkcGFyYW1ldGVyKTsNCg0KICAgICAgICBpZighcGFyZW50Ojppc192YWxpZF9wYXJhbWV0ZXIoJHBhcmFtZXRlciwgJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGlmKCRwYXJhbWV0ZXIgPT0gJ1ZBTFVFJyAmJiAhKCR2YWx1ZSA9PSAnREFURScgfHwgJHZhbHVlID09ICdEQVRFLVRJTUUnKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfZHVlIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnRFVFJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX0RBVEVfVElNRTsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdWQUxVRScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdUWklEJyAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSkgew0KICAgICAgICBpZighcGFyZW50Ojppc192YWxpZF92YWx1ZSgkdmFsdWUpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBJZiBwcmVzZW50IGluIGEgRlJFRUJVU1kgY29tcG9uZW50LCBtdXN0IGJlIGluIFVUQyBmb3JtYXQNCiAgICAgICAgaWYoJHRoaXMtPnBhcmVudF9jb21wb25lbnQgPT0gJ1ZGUkVFQlVTWScgJiYgc3Vic3RyKCR2YWx1ZSwgLTEpICE9ICdaJykgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQoNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF9wYXJhbWV0ZXIoJHBhcmFtZXRlciwgJHZhbHVlKSB7DQoNCiAgICAgICAgJHBhcmFtZXRlciA9IHN0cnRvdXBwZXIoJHBhcmFtZXRlcik7DQoNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfcGFyYW1ldGVyKCRwYXJhbWV0ZXIsICR2YWx1ZSkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZigkcGFyYW1ldGVyID09ICdWQUxVRScgJiYgISgkdmFsdWUgPT0gJ0RBVEUnIHx8ICR2YWx1ZSA9PSAnREFURS1USU1FJykpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X2R0c3RhcnQgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdEVFNUQVJUJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX0RBVEVfVElNRTsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdWQUxVRScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdUWklEJyAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIC8vIFRPRE86IHVuaW1wbGVtZW50ZWQgc3R1ZmYgd2hlbiBwYXJlbnQgaXMgYSBWVElNRVpPTkUgY29tcG9uZW50DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gSWYgcHJlc2VudCBpbiBhIEZSRUVCVVNZIGNvbXBvbmVudCwgbXVzdCBiZSBpbiBVVEMgZm9ybWF0DQogICAgICAgIGlmKCR0aGlzLT5wYXJlbnRfY29tcG9uZW50ID09ICdWRlJFRUJVU1knICYmIHN1YnN0cigkdmFsdWUsIC0xKSAhPSAnWicpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3BhcmFtZXRlcigkcGFyYW1ldGVyLCAkdmFsdWUpIHsNCg0KICAgICAgICAkcGFyYW1ldGVyID0gc3RydG91cHBlcigkcGFyYW1ldGVyKTsNCg0KICAgICAgICBpZighcGFyZW50Ojppc192YWxpZF9wYXJhbWV0ZXIoJHBhcmFtZXRlciwgJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGlmKCRwYXJhbWV0ZXIgPT0gJ1ZBTFVFJyAmJiAhKCR2YWx1ZSA9PSAnREFURScgfHwgJHZhbHVlID09ICdEQVRFLVRJTUUnKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfZHVyYXRpb24gZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdEVVJBVElPTic7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9EVVJBVElPTjsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSkgew0KICAgICAgICBpZighcGFyZW50Ojppc192YWxpZF92YWx1ZSgkdmFsdWUpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBWYWx1ZSBtdXN0IGJlIHBvc2l0aXZlDQogICAgICAgIHJldHVybiAoJHZhbHVlezB9ICE9ICctJyk7DQogICAgfQ0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfZnJlZWJ1c3kgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdGUkVFQlVTWSc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9QRVJJT0Q7DQogICAgdmFyICR2YWxfbXVsdGkgICA9IHRydWU7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnRkJUWVBFJyAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgJHBvcyA9IHN0cnBvcygkdmFsdWUsICcvJyk7IC8vIFdlIGtub3cgdGhlcmUncyBvbmx5IG9uZSAvIGluIHRoZXJlDQogICAgICAgIGlmKCR2YWx1ZXskcG9zIC0gMX0gIT0gJ1onKSB7DQogICAgICAgICAgICAvLyBTdGFydCB0aW1lIE1VU1QgYmUgaW4gVVRDDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgaWYoJHZhbHVleyRwb3MgKyAxfSAhPSAnUCcgJiYgJHN1YnN0cigkdmFsdWUsIC0xKSAhPSAnWicpIHsNCiAgICAgICAgICAgIC8vIElmIHRoZSBzZWNvbmQgcGFydCBpcyBub3QgYSBwZXJpb2QsIGl0IE1VU1QgYmUgaW4gVVRDDQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICB9DQoNCiAgICAvLyBUT0RPOiB0aGVzZSBwcm9wZXJ0aWVzIFNIT1VMRCBiZSBzaG9ydGVkIGluIGFzY2VuZGluZyBvcmRlciAoYnkgc3RhcnQgdGltZSBhbmQgZW5kIHRpbWUgYXMgdGllYnJlYWspDQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV90cmFuc3AgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdUUkFOU1AnOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfVEVYVDsNCiAgICB2YXIgJHZhbF9kZWZhdWx0ID0gJ09QQVFVRSc7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgcmV0dXJuICgkdmFsdWUgPT09ICdUUkFOU1BBUkVOVCcgfHwgJHZhbHVlID09PSAnT1BBUVVFJyk7DQogICAgfQ0KfQ0KDQovLyBUT0RPOiA0LjguMyB0aW1lem9uZSBjb21wb25lbnQgcHJvcGVydGllcw0KDQoNCi8vIDQuOC40IFJlbGF0aW9uc2hpcCBDb21wb25lbnQgUHJvcGVydGllcw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9hdHRlbmRlZSBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ0FUVEVOREVFJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX0NBTF9BRERSRVNTOw0KDQogICAgLy8gVE9ETzogTVVTVCBOT1QgYmUgc3BlY2lmaWVkIHdoZW4gdGhlIGNhbGVuZGFyIG9iamVjdCBoYXMgTUVUSE9EPVBVQkxJU0gNCiAgICAvLyBUT0RPOiBzdGFuZGFyZCBoYXMgbG90cyBvZiBkZXRhaWwgaGVyZSwgbWFrZSB0cmlwbGUgc3VyZSB0aGF0IHdlIGV2ZW50dWFsbHkgY29uZm9ybQ0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgJ0xBTkdVQUdFJyAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0NOJyAgICAgICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ1JPTEUnICAgICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ1BBUlRTVEFUJyAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ1JTVlAnICAgICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0NVVFlQRScgICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ01FTUJFUicgICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0RFTEVHQVRFRC1UTycgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0RFTEVHQVRFRC1GUk9NJyA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ1NFTlQtQlknICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgJ0RJUicgICAgICAgICAgICA9PiBSRkMyNDQ1X09QVElPTkFMIHwgUkZDMjQ0NV9PTkNFLA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSAgICA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0X3BhcmVudF9jb21wb25lbnQoJGNvbXBvbmVudG5hbWUpIHsNCiAgICAgICAgaWYoIXBhcmVudDo6c2V0X3BhcmVudF9jb21wb25lbnQoJGNvbXBvbmVudG5hbWUpKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICBpZigkdGhpcy0+cGFyZW50X2NvbXBvbmVudCA9PSAnVkZSRUVCVVNZJyB8fCAkdGhpcy0+cGFyZW50X2NvbXBvbmVudCA9PSAnVkFMQVJNJykgew0KICAgICAgICAgICAgLy8gTW9zdCBwYXJhbWV0ZXJzIGJlY29tZSBpbnZhbGlkIGluIHRoaXMgY2FzZSwgdGhlIGZ1bGwgYWxsb3dlZCBzZXQgaXMgbm93Og0KICAgICAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICAgICAnTEFOR1VBR0UnICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSAgICA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICAgICApOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfY29udGFjdCBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ0NPTlRBQ1QnOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfVEVYVDsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdBTFRSRVAnICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdMQU5HVUFHRScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCn0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X29yZ2FuaXplciBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ09SR0FOSVpFUic7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9DQUxfQUREUkVTUzsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdDTicgICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdESVInICAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdTRU5ULUJZJyAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdMQU5HVUFHRScgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIC8vIFRPRE86DQovKiAgICANCiAgIENvbmZvcm1hbmNlOiBUaGlzIHByb3BlcnR5IE1VU1QgYmUgc3BlY2lmaWVkIGluIGFuIGlDYWxlbmRhciBvYmplY3QNCiAgIHRoYXQgc3BlY2lmaWVzIGEgZ3JvdXAgc2NoZWR1bGVkIGNhbGVuZGFyIGVudGl0eS4gVGhpcyBwcm9wZXJ0eSBNVVNUDQogICBiZSBzcGVjaWZpZWQgaW4gYW4gaUNhbGVuZGFyIG9iamVjdCB0aGF0IHNwZWNpZmllcyB0aGUgcHVibGljYXRpb24gb2YNCiAgIGEgY2FsZW5kYXIgdXNlcidzIGJ1c3kgdGltZS4gVGhpcyBwcm9wZXJ0eSBNVVNUIE5PVCBiZSBzcGVjaWZpZWQgaW4NCiAgIGFuIGlDYWxlbmRhciBvYmplY3QgdGhhdCBzcGVjaWZpZXMgb25seSBhIHRpbWUgem9uZSBkZWZpbml0aW9uIG9yDQogICB0aGF0IGRlZmluZXMgY2FsZW5kYXIgZW50aXRpZXMgdGhhdCBhcmUgbm90IGdyb3VwIHNjaGVkdWxlZCBlbnRpdGllcywNCiAgIGJ1dCBhcmUgZW50aXRpZXMgb25seSBvbiBhIHNpbmdsZSB1c2VyJ3MgY2FsZW5kYXIuDQoqLw0KDQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9yZWN1cnJlbmNlX2lkIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIC8vIFRPRE86IGNhbiBvbmx5IGJlIHNwZWNpZmllZCB3aGVuIGRlZmluaW5nIHJlY3VycmluZyBjb21wb25lbnRzIGluIHRoZSBjYWxlbmRhcg0KLyoNCiAgIENvbmZvcm1hbmNlOiBUaGlzIHByb3BlcnR5IGNhbiBiZSBzcGVjaWZpZWQgaW4gYW4gaUNhbGVuZGFyIG9iamVjdA0KICAgY29udGFpbmluZyBhIHJlY3VycmluZyBjYWxlbmRhciBjb21wb25lbnQuDQoNCiAgIERlc2NyaXB0aW9uOiBUaGUgZnVsbCByYW5nZSBvZiBjYWxlbmRhciBjb21wb25lbnRzIHNwZWNpZmllZCBieSBhDQogICByZWN1cnJlbmNlIHNldCBpcyByZWZlcmVuY2VkIGJ5IHJlZmVycmluZyB0byBqdXN0IHRoZSAiVUlEIiBwcm9wZXJ0eQ0KICAgdmFsdWUgY29ycmVzcG9uZGluZyB0byB0aGUgY2FsZW5kYXIgY29tcG9uZW50LiBUaGUgIlJFQ1VSUkVOQ0UtSUQiDQogICBwcm9wZXJ0eSBhbGxvd3MgdGhlIHJlZmVyZW5jZSB0byBhbiBpbmRpdmlkdWFsIGluc3RhbmNlIHdpdGhpbiB0aGUNCiAgIHJlY3VycmVuY2Ugc2V0Lg0KKi8NCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnUkVDVVJSRU5DRS1JRCc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9EQVRFX1RJTUU7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnUkFOR0UnICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnVFpJRCcgICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICAnVkFMVUUnICAgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF9wYXJhbWV0ZXIoJHBhcmFtZXRlciwgJHZhbHVlKSB7DQoNCiAgICAgICAgJHBhcmFtZXRlciA9IHN0cnRvdXBwZXIoJHBhcmFtZXRlcik7DQoNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfcGFyYW1ldGVyKCRwYXJhbWV0ZXIsICR2YWx1ZSkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBpZigkcGFyYW1ldGVyID09ICdWQUxVRScgJiYgISgkdmFsdWUgPT0gJ0RBVEUnIHx8ICR2YWx1ZSA9PSAnREFURS1USU1FJykpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfcmVsYXRlZF90byBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ1JFTEFURUQtVE8nOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfVEVYVDsNCg0KICAgIC8vIFRPRE86IHRoZSB2YWx1ZSBvZiB0aGlzIHByb3BlcnR5IG11c3QgcmVmZXJlbmNlIGFub3RoZXIgY29tcG9uZW50J3MgVUlEDQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnUkVMVFlQRScgICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV91cmwgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdVUkwnOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfVVJJOw0KDQogICAgZnVuY3Rpb24gY29uc3RydWN0KCkgew0KICAgICAgICAkdGhpcy0+dmFsaWRfcGFyYW1ldGVycyA9IGFycmF5KA0KICAgICAgICAgICAgUkZDMjQ0NV9YTkFNRSA9PiBSRkMyNDQ1X09QVElPTkFMDQogICAgICAgICk7DQogICAgfQ0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfdWlkIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnVUlEJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBUaGUgZXhjZXB0aW9uIHRvIHRoZSBydWxlOiB0aGlzIGlzIG5vdCBhIHN0YXRpYyB2YWx1ZSwgc28gd2UNCiAgICAgICAgLy8gZ2VuZXJhdGUgaXQgb24tdGhlLWZseSBoZXJlLiBHdWFyYW50ZWVkIHRvIGJlIGRpZmZlcmVudCBmb3INCiAgICAgICAgLy8gZWFjaCBpbnN0YW5jZSBvZiB0aGlzIHByb3BlcnR5LCB0b28uIE5pY2UuDQogICAgICAgICR0aGlzLT52YWxfZGVmYXVsdCA9IHJmYzI0NDVfZ3VpZCgpOw0KICAgIH0NCn0NCg0KLy8gNC44LjUgUmVjdXJyZW5jZSBDb21wb25lbnQgUHJvcGVydGllcw0KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfZXhkYXRlIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnRVhEQVRFJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX0RBVEVfVElNRTsNCiAgICB2YXIgJHZhbF9tdWx0aSAgID0gdHJ1ZTsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdUWklEJyAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdWQUxVRScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3BhcmFtZXRlcigkcGFyYW1ldGVyLCAkdmFsdWUpIHsNCg0KICAgICAgICAkcGFyYW1ldGVyID0gc3RydG91cHBlcigkcGFyYW1ldGVyKTsNCg0KICAgICAgICBpZighcGFyZW50Ojppc192YWxpZF9wYXJhbWV0ZXIoJHBhcmFtZXRlciwgJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGlmKCRwYXJhbWV0ZXIgPT0gJ1ZBTFVFJyAmJiAhKCR2YWx1ZSA9PSAnREFURScgfHwgJHZhbHVlID09ICdEQVRFLVRJTUUnKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9leHJ1bGUgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdFWFJVTEUnOw0KICAgIHZhciAkdmFsX3R5cGUgICAgPSBSRkMyNDQ1X1RZUEVfUkVDVVI7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9yZGF0ZSBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ1JEQVRFJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX0RBVEVfVElNRTsNCiAgICB2YXIgJHZhbF9tdWx0aSAgID0gdHJ1ZTsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgICdUWklEJyAgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgICdWQUxVRScgICAgICAgPT4gUkZDMjQ0NV9PUFRJT05BTCB8IFJGQzI0NDVfT05DRSwNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIGlzX3ZhbGlkX3BhcmFtZXRlcigkcGFyYW1ldGVyLCAkdmFsdWUpIHsNCg0KICAgICAgICAkcGFyYW1ldGVyID0gc3RydG91cHBlcigkcGFyYW1ldGVyKTsNCg0KICAgICAgICBpZighcGFyZW50Ojppc192YWxpZF9wYXJhbWV0ZXIoJHBhcmFtZXRlciwgJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGlmKCRwYXJhbWV0ZXIgPT0gJ1ZBTFVFJyAmJiAhKCR2YWx1ZSA9PSAnREFURScgfHwgJHZhbHVlID09ICdEQVRFLVRJTUUnIHx8ICR2YWx1ZSA9PSAnUEVSSU9EJykpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCg0KfQ0KDQpjbGFzcyBpQ2FsZW5kYXJfcHJvcGVydHlfcnJ1bGUgZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9ICdSUlVMRSc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9SRUNVUjsNCg0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdCgpIHsNCiAgICAgICAgJHRoaXMtPnZhbGlkX3BhcmFtZXRlcnMgPSBhcnJheSgNCiAgICAgICAgICAgIFJGQzI0NDVfWE5BTUUgPT4gUkZDMjQ0NV9PUFRJT05BTA0KICAgICAgICApOw0KICAgIH0NCn0NCg0KLy8gVE9ETzogNC44LjYgQWxhcm0gQ29tcG9uZW50IFByb3BlcnRpZXMNCg0KLy8gNC44LjcgQ2hhbmdlIE1hbmFnZW1lbnQgQ29tcG9uZW50IFByb3BlcnRpZXMNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9jcmVhdGVkIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnQ1JFQVRFRCc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9EQVRFX1RJTUU7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIC8vIFRpbWUgTVVTVCBiZSBpbiBVVEMgZm9ybWF0DQogICAgICAgIHJldHVybihzdWJzdHIoJHZhbHVlLCAtMSkgPT0gJ1onKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9kdHN0YW1wIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnRFRTVEFNUCc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9EQVRFX1RJTUU7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIC8vIFRpbWUgTVVTVCBiZSBpbiBVVEMgZm9ybWF0DQogICAgICAgIHJldHVybihzdWJzdHIoJHZhbHVlLCAtMSkgPT0gJ1onKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9sYXN0X21vZGlmaWVkIGV4dGVuZHMgaUNhbGVuZGFyX3Byb3BlcnR5IHsNCg0KICAgIHZhciAkbmFtZSAgICAgICAgPSAnTEFTVC1NT0RJRklFRCc7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IFJGQzI0NDVfVFlQRV9EQVRFX1RJTUU7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIC8vIFRpbWUgTVVTVCBiZSBpbiBVVEMgZm9ybWF0DQogICAgICAgIHJldHVybihzdWJzdHIoJHZhbHVlLCAtMSkgPT0gJ1onKTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9zZXF1ZW5jZSBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ1NFUVVFTkNFJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX0lOVEVHRVI7DQogICAgdmFyICR2YWxfZGVmYXVsdCA9IDA7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoIXBhcmVudDo6aXNfdmFsaWRfdmFsdWUoJHZhbHVlKSkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgICR2YWx1ZSA9IGludHZhbCgkdmFsdWUpOw0KICAgICAgICByZXR1cm4gKCR2YWx1ZSA+PSAwKTsNCiAgICB9DQp9DQoNCi8vIDQuOC44IE1pc2NlbGxhbmVvdXMgQ29tcG9uZW50IFByb3BlcnRpZXMNCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KY2xhc3MgaUNhbGVuZGFyX3Byb3BlcnR5X3ggZXh0ZW5kcyBpQ2FsZW5kYXJfcHJvcGVydHkgew0KDQogICAgdmFyICRuYW1lICAgICAgICA9IFJGQzI0NDVfWE5BTUU7DQogICAgdmFyICR2YWxfdHlwZSAgICA9IE5VTEw7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnTEFOR1VBR0UnICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBzZXRfbmFtZSgkbmFtZSkgew0KDQogICAgICAgICRuYW1lID0gc3RydG91cHBlcigkbmFtZSk7DQoNCiAgICAgICAgaWYocmZjMjQ0NV9pc194bmFtZSgkbmFtZSkpIHsNCiAgICAgICAgICAgICR0aGlzLT5uYW1lID0gJG5hbWU7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQp9DQoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9yZXF1ZXN0X3N0YXR1cyBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICAvLyBJTVBPUlRBTlQgTk9URTogVGhpcyBwcm9wZXJ0eSB2YWx1ZSBpbmNsdWRlcyBURVhUIGZpZWxkcw0KICAgIC8vIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLiBVbmZvcnR1bmF0ZWx5LCBhdXRvLXZhbHVlLWZvcm1hdHRpbmcNCiAgICAvLyBjYW5ub3QgYmUgdXNlZCBpbiB0aGlzIGNhc2UuIEFzIGFuIGV4Y2VwdGlvbiwgdGhlIHZhbHVlIHBhc3NlZA0KICAgIC8vIHRvIHRoaXMgcHJvcGVydHkgTVVTVCBiZSBhbHJlYWR5IGVzY2FwZWQuDQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ1JFUVVFU1QtU1RBVFVTJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnTEFOR1VBR0UnICAgID0+IFJGQzI0NDVfT1BUSU9OQUwgfCBSRkMyNDQ1X09OQ0UsDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBmdW5jdGlvbiBpc192YWxpZF92YWx1ZSgkdmFsdWUpIHsNCiAgICAgICAgaWYoIWlzX3N0cmluZygkdmFsdWUpIHx8IGVtcHR5KCR2YWx1ZSkpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgICRsZW4gICA9IHN0cmxlbigkdmFsdWUpOw0KICAgICAgICAkcGFydHMgPSBhcnJheSgpOw0KICAgICAgICAkZnJvbSAgPSAwOw0KICAgICAgICAkZXNjY2ggPSBmYWxzZTsNCg0KICAgICAgICBmb3IoJGkgPSAwOyAkaSA8ICRsZW47ICsrJGkpIHsNCiAgICAgICAgICAgIGlmKCR2YWx1ZXskaX0gPT0gJzsnICYmICEkZXNjY2gpIHsNCiAgICAgICAgICAgICAgICAvLyBUb2tlbiBjb21wbGV0ZWQNCiAgICAgICAgICAgICAgICAkcGFydHNbXSA9IHN1YnN0cigkdmFsdWUsICRmcm9tLCAkaSAtICRmcm9tKTsNCiAgICAgICAgICAgICAgICAkZnJvbSA9ICRpICsgMTsNCiAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRlc2NjaCA9ICgkdmFsdWV7JGl9ID09ICdcXCcpOw0KICAgICAgICB9DQogICAgICAgIC8vIEFkZCBvbmUgbGFzdCB0b2tlbiB3aXRoIHRoZSByZW1haW5pbmcgdGV4dDsgaWYgdGhlIHZhbHVlDQogICAgICAgIC8vIGVuZGVkIHdpdGggYSAnOycgaXQgd2FzIGlsbGVnYWwsIHNvIGNoZWNrIHRoYXQgdGhpcyB0b2tlbg0KICAgICAgICAvLyBpcyBub3QgdGhlIGVtcHR5IHN0cmluZy4NCiAgICAgICAgJHBhcnRzW10gPSBzdWJzdHIoJHZhbHVlLCAkZnJvbSk7DQoNCiAgICAgICAgJGNvdW50ID0gY291bnQoJHBhcnRzKTsNCg0KICAgICAgICAvLyBNYXkgaGF2ZSAyIG9yIDMgdG9rZW5zIChsYXN0IG9uZSBpcyBvcHRpb25hbCkNCiAgICAgICAgaWYoJGNvdW50ICE9IDIgJiYgJGNvdW50ICE9IDMpIHsNCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFJFTUVNQkVSOiBpZiBBTlkgcGFydCBpcyBlbXB0eSwgd2UgaGF2ZSBhbiBpbGxlZ2FsIHZhbHVlDQoNCiAgICAgICAgLy8gRmlyc3QgdG9rZW4gbXVzdCBiZSBoaWVyYXJjaGljYWwgbnVtZXJpYyBzdGF0dXMgKDMgbGV2ZWxzIG1heCkNCiAgICAgICAgaWYoc3RybGVuKCRwYXJ0c1swXSkgPT0gMCkgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYoJHBhcnRzWzBdezB9IDwgJzEnIHx8ICRwYXJ0c1swXXswfSA+ICc0Jykgew0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgJGxlbiA9IHN0cmxlbigkcGFydHNbMF0pOw0KDQogICAgICAgIC8vIE1heCAzIGxldmVscywgYW5kIGNhbid0IGVuZCB3aXRoIGEgcGVyaW9kDQogICAgICAgIGlmKCRsZW4gPiA1IHx8ICRwYXJ0c1swXXskbGVuIC0gMX0gPT0gJy4nKSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICBmb3IoJGkgPSAxOyAkaSA8ICRsZW47ICsrJGkpIHsNCiAgICAgICAgICAgIGlmKCgkaSAmIDEpID09IDEgJiYgJHBhcnRzWzBdeyRpfSAhPSAnLicpIHsNCiAgICAgICAgICAgICAgICAvLyBFdmVuLWluZGV4ZWQgY2hhcnMgbXVzdCBiZSBwZXJpb2RzDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZigoJGkgJiAxKSA9PSAwICYmICgkcGFydHNbMF17JGl9IDwgJzAnIHx8ICRwYXJ0c1swXXskaX0gPiAnOScpKSB7DQogICAgICAgICAgICAgICAgLy8gT2RkLWluZGV4ZWQgY2hhcnMgbXVzdCBiZSBudW1iZXJzDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgLy8gU2Vjb25kIGFuZCB0aGlyZCB0b2tlbnMgbXVzdCBiZSBURVhULCBhbmQgYWxyZWFkeSBlc2NhcGVkLCBzbw0KICAgICAgICAvLyB0aGV5IGFyZSBub3QgYWxsb3dlZCB0byBoYXZlIFVORVNDQVBFRCBzZW1pY29sb25zLCBjb21tYXMsIHNsYXNoZXMsDQogICAgICAgIC8vIG9yIGFueSBuZXdsaW5lcyBhdCBhbGwNCg0KICAgICAgICBmb3IoJGkgPSAxOyAkaSA8ICRjb3VudDsgKyskaSkgew0KICAgICAgICAgICAgaWYoc3RycG9zKCRwYXJ0c1skaV0sICJcbiIpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkcGFydHNbJGldKTsNCiAgICAgICAgICAgIGlmKCRsZW4gPT0gMCkgew0KICAgICAgICAgICAgICAgIC8vIENhbm5vdCBiZSBlbXB0eQ0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHBhcnRzWyRpXSAuPSAnIyc7IC8vIFRoaXMgZ3VhcmQgdG9rZW4gc2F2ZXMgc29tZSBjb25kaXRpb25hbHMgaW4gdGhlIGxvb3ANCg0KICAgICAgICAgICAgZm9yKCRqID0gMDsgJGogPCAkbGVuOyArKyRqKSB7DQogICAgICAgICAgICAgICAgJHRoaXNjaGFyID0gJHBhcnRzWyRpXXskan07DQogICAgICAgICAgICAgICAgJG5leHRjaGFyID0gJHBhcnRzWyRpXXskaiArIDF9Ow0KICAgICAgICAgICAgICAgIGlmKCR0aGlzY2hhciA9PSAnXFwnKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIE5leHQgY2hhciBtdXN0IG5vdyBiZSBvbmUgb2YgIjssXG5OIg0KICAgICAgICAgICAgICAgICAgICBpZigkbmV4dGNoYXIgIT0gJzsnICYmICRuZXh0Y2hhciAhPSAnLCcgJiYgJG5leHRjaGFyICE9ICdcXCcgJiYNCiAgICAgICAgICAgICAgICAgICAgICAgJG5leHRjaGFyICE9ICduJyAmJiAkbmV4dGNoYXIgIT0gJ04nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAvLyBPSywgdGhpcyBlc2NhcGVkIHNlcXVlbmNlIGlzIGNvcnJlY3QsIGJ5cGFzcyBuZXh0IGNoYXINCiAgICAgICAgICAgICAgICAgICAgKyskajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmKCR0aGlzY2hhciA9PSAnOycgfHwgJHRoaXNjaGFyID09ICcsJyB8fCAkdGhpc2NoYXIgPT0gJ1xcJykgew0KICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHdhc24ndCBlc2NhcGVkIGFzIGl0IHNob3VsZA0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQoNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgZnVuY3Rpb24gc2V0X3ZhbHVlKCR2YWx1ZSkgew0KICAgICAgICAvLyBNdXN0IG92ZXJyaWRlIHRoaXMsIG90aGVyd2lzZSB0aGUgdmFsdWUgd291bGQgYmUgcXVvdGVkIGFnYWluDQogICAgICAgIGlmKCR0aGlzLT5pc192YWxpZF92YWx1ZSgkdmFsdWUpKSB7DQogICAgICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiBmYWxzZTsNCiAgICB9DQoNCn0NCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLyoNCmNsYXNzIGlDYWxlbmRhcl9wcm9wZXJ0eV9jbGFzcyBleHRlbmRzIGlDYWxlbmRhcl9wcm9wZXJ0eSB7DQoNCiAgICB2YXIgJG5hbWUgICAgICAgID0gJ0NMQVNTJzsNCiAgICB2YXIgJHZhbF90eXBlICAgID0gUkZDMjQ0NV9UWVBFX1RFWFQ7DQoNCiAgICBmdW5jdGlvbiBjb25zdHJ1Y3QoKSB7DQogICAgICAgICR0aGlzLT52YWxpZF9wYXJhbWV0ZXJzID0gYXJyYXkoDQogICAgICAgICAgICBSRkMyNDQ1X1hOQU1FID0+IFJGQzI0NDVfT1BUSU9OQUwNCiAgICAgICAgKTsNCiAgICB9DQp9DQoqLw0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/lib/iCalendar_rfc2445.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gJElkOiBpQ2FsZW5kYXJfcmZjMjQ0NS5waHAsdiAxLjcgMjAwNS8wNy8yMSAyMzoyMzo0OCBkZWZhY2VyIEV4cCAkDQoNCi8qDQoNCiAgIEFsbCBuYW1lcyBvZiBwcm9wZXJ0aWVzLCBwcm9wZXJ0eSBwYXJhbWV0ZXJzLCBlbnVtZXJhdGVkIHByb3BlcnR5DQogICB2YWx1ZXMgYW5kIHByb3BlcnR5IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuIEhvd2V2ZXIsDQogICBhbGwgb3RoZXIgcHJvcGVydHkgdmFsdWVzIGFyZSBjYXNlLXNlbnNpdGl2ZSwgdW5sZXNzIG90aGVyd2lzZQ0KICAgc3RhdGVkLg0KDQoqLw0KDQpkZWZpbmUoJ1JGQzI0NDVfQ1JMRicsICAgICAgICAgICAgICAgIlxyXG4iKTsNCmRlZmluZSgnUkZDMjQ0NV9XU1AnLCAgICAgICAgICAgICAgICAiXHQgIik7DQpkZWZpbmUoJ1JGQzI0NDVfV0VFS0RBWVMnLCAgICAgICAgICAgJ01PLFRVLFdFLFRILEZSLFNBLFNVJyk7DQpkZWZpbmUoJ1JGQzI0NDVfRk9MREVEX0xJTkVfTEVOR1RIJywgNzUpOw0KDQpkZWZpbmUoJ1JGQzI0NDVfUkVRVUlSRUQnLCAweDAxKTsNCmRlZmluZSgnUkZDMjQ0NV9PUFRJT05BTCcsIDB4MDIpOw0KZGVmaW5lKCdSRkMyNDQ1X09OQ0UnLCAgICAgMHgwNCk7DQoNCmRlZmluZSgnUkZDMjQ0NV9QUk9QX0ZMQUdTJywgICAgICAgMCk7DQpkZWZpbmUoJ1JGQzI0NDVfUFJPUF9UWVBFJywgICAgICAgIDEpOw0KZGVmaW5lKCdSRkMyNDQ1X1BST1BfREVGQVVMVCcsICAgICAyKTsNCg0KZGVmaW5lKCdSRkMyNDQ1X1hOQU1FJywgJ1gtJyk7DQoNCmRlZmluZSgnUkZDMjQ0NV9UWVBFX0JJTkFSWScsICAgICAgIDApOw0KZGVmaW5lKCdSRkMyNDQ1X1RZUEVfQk9PTEVBTicsICAgICAgMSk7DQpkZWZpbmUoJ1JGQzI0NDVfVFlQRV9DQUxfQUREUkVTUycsICAyKTsNCmRlZmluZSgnUkZDMjQ0NV9UWVBFX0RBVEUnLCAgICAgICAgIDMpOw0KZGVmaW5lKCdSRkMyNDQ1X1RZUEVfREFURV9USU1FJywgICAgNCk7DQpkZWZpbmUoJ1JGQzI0NDVfVFlQRV9EVVJBVElPTicsICAgICA1KTsNCmRlZmluZSgnUkZDMjQ0NV9UWVBFX0ZMT0FUJywgICAgICAgIDYpOw0KZGVmaW5lKCdSRkMyNDQ1X1RZUEVfSU5URUdFUicsICAgICAgNyk7DQpkZWZpbmUoJ1JGQzI0NDVfVFlQRV9QRVJJT0QnLCAgICAgICA4KTsNCmRlZmluZSgnUkZDMjQ0NV9UWVBFX1JFQ1VSJywgICAgICAgIDkpOw0KZGVmaW5lKCdSRkMyNDQ1X1RZUEVfVEVYVCcsICAgICAgICAxMCk7DQpkZWZpbmUoJ1JGQzI0NDVfVFlQRV9USU1FJywgICAgICAgIDExKTsNCmRlZmluZSgnUkZDMjQ0NV9UWVBFX1VSSScsICAgICAgICAgMTIpOyAvLyBDQUxfQUREUkVTUyA9PT0gVVJJDQpkZWZpbmUoJ1JGQzI0NDVfVFlQRV9VVENfT0ZGU0VUJywgIDEzKTsNCg0KDQpmdW5jdGlvbiByZmMyNDQ1X2ZvbGQoJHN0cmluZykgew0KICAgIGlmKHN0cmxlbigkc3RyaW5nKSA8PSBSRkMyNDQ1X0ZPTERFRF9MSU5FX0xFTkdUSCkgew0KICAgICAgICByZXR1cm4gJHN0cmluZzsNCiAgICB9DQoNCiAgICAkcmV0dmFsID0gJyc7DQoNCiAgICB3aGlsZShzdHJsZW4oJHN0cmluZykgPiBSRkMyNDQ1X0ZPTERFRF9MSU5FX0xFTkdUSCkgew0KICAgICAgICAkcmV0dmFsIC49IHN1YnN0cigkc3RyaW5nLCAwLCBSRkMyNDQ1X0ZPTERFRF9MSU5FX0xFTkdUSCAtIDEpIC4gUkZDMjQ0NV9DUkxGIC4gJyAnOw0KICAgICAgICAkc3RyaW5nICA9IHN1YnN0cigkc3RyaW5nLCBSRkMyNDQ1X0ZPTERFRF9MSU5FX0xFTkdUSCAtIDEpOw0KICAgIH0NCg0KICAgICRyZXR2YWwgLj0gJHN0cmluZzsNCiAgICANCiAgICByZXR1cm4gJHJldHZhbDsNCg0KfQ0KDQpmdW5jdGlvbiByZmMyNDQ1X3VuZm9sZCgkc3RyaW5nKSB7DQogICAgZm9yKCRpID0gMDsgJGkgPCBzdHJsZW4oUkZDMjQ0NV9XU1ApOyArKyRpKSB7DQogICAgICAgICRzdHJpbmcgPSBzdHJfcmVwbGFjZShSRkMyNDQ1X0NSTEYuc3Vic3RyKFJGQzI0NDVfV1NQLCAkaSwgMSksICcnLCAkc3RyaW5nKTsNCiAgICB9DQoNCiAgICByZXR1cm4gJHN0cmluZzsNCn0NCg0KZnVuY3Rpb24gcmZjMjQ0NV9pc194bmFtZSgkbmFtZSkgew0KDQogICAgLy8gSWYgaXQncyBsZXNzIHRoYW4gMyBjaGFycywgaXQgY2Fubm90IGJlIGxlZ2FsDQogICAgaWYoc3RybGVuKCRuYW1lKSA8IDMpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8vIElmIGl0IGNvbnRhaW5zIGFuIGlsbGVnYWwgY2hhciBhbnl3aGVyZSwgcmVqZWN0IGl0DQogICAgaWYoc3Ryc3BuKCRuYW1lLCAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5LScpICE9IHN0cmxlbigkbmFtZSkpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0NCg0KICAgIC8vIFRvIGJlIGxlZ2FsLCBpdCBtdXN0IHN0aWxsIHN0YXJ0IHdpdGggIlgtIg0KICAgIHJldHVybiBzdWJzdHIoJG5hbWUsIDAsIDIpID09PSAnWC0nOw0KfQ0KDQpmdW5jdGlvbiByZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCR2YWx1ZSwgJHR5cGUpIHsNCg0KICAgIC8vIFRoaXMgYnJhbmNoIHNob3VsZCBvbmx5IGJlIHRha2VuIHdpdGggeG5hbWUgdmFsdWVzDQogICAgaWYoJHR5cGUgPT09IE5VTEwpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KDQogICAgc3dpdGNoKCR0eXBlKSB7DQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX0NBTF9BRERSRVNTOg0KICAgICAgICBjYXNlIFJGQzI0NDVfVFlQRV9VUkk6DQogICAgICAgICAgICBpZighaXNfc3RyaW5nKCR2YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICR2YWxpZF9zY2hlbWVzID0gYXJyYXkoJ2Z0cCcsICdodHRwJywgJ2xkYXAnLCAnZ29waGVyJywgJ21haWx0bycsICduZXdzJywgJ25udHAnLCAndGVsbmV0JywgJ3dhaXMnLCAnZmlsZScsICdwcm9zcGVybycpOw0KDQogICAgICAgICAgICAkcG9zID0gc3RycG9zKCR2YWx1ZSwgJzonKTsNCiAgICAgICAgICAgIGlmKCEkcG9zKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgICAgICRzY2hlbWUgPSBzdHJ0b2xvd2VyKHN1YnN0cigkdmFsdWUsIDAsICRwb3MpKTsNCiAgICAgICAgICAgICRyZW1haW4gPSBzdWJzdHIoJHZhbHVlLCAkcG9zICsgMSk7DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmKCFpbl9hcnJheSgkc2NoZW1lLCAkdmFsaWRfc2NoZW1lcykpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAgICAgaWYoJHNjaGVtZSA9PT0gJ21haWx0bycpIHsNCiAgICAgICAgICAgICAgICAkcmVnZXhwID0gJ15bYS16QS1aMC05XStbX2EtekEtWjAtOVwtXSooXC5bX2EtejAtOVwtXSspKkAoKFswLTlhLXpBLVpcLV0rXC4pK1thLXpBLVpdWzAtOWEtekEtWlwtXSt8KFswLTldezEsM31cLil7M31bMC05XXsxLDN9KSQnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgJHJlZ2V4cCA9ICdeLy8oLisoOi4qKT9AKT8oKFswLTlhLXpBLVpcLV0rXC4pK1thLXpBLVpdWzAtOWEtekEtWlwtXSt8KFswLTldezEsM31cLil7M31bMC05XXsxLDN9KSg6WzAtOV17MSw1fSk/KC8uKik/JCc7DQogICAgICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAgICAgcmV0dXJuIGVyZWcoJHJlZ2V4cCwgJHJlbWFpbik7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX0JJTkFSWToNCiAgICAgICAgICAgIGlmKCFpc19zdHJpbmcoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkdmFsdWUpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZigkbGVuICUgNCAhPSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBmb3IoJGkgPSAwOyAkaSA8ICRsZW47ICsrJGkpIHsNCiAgICAgICAgICAgICAgICAkY2ggPSAkdmFsdWV7JGl9Ow0KICAgICAgICAgICAgICAgIGlmKCEoJGNoID49ICdhJyAmJiAkY2ggPD0gJ3onIHx8ICRjaCA+PSAnQScgJiYgJGNoIDw9ICdaJyB8fCAkY2ggPj0gJzAnICYmICRjaCA8PSAnOScgfHwgJGNoID09ICctJyB8fCAkY2ggPT0gJysnKSkgew0KICAgICAgICAgICAgICAgICAgICBpZigkY2ggPT0gJz0nICYmICRsZW4gLSAkaSA8PSAyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX0JPT0xFQU46DQogICAgICAgICAgICBpZihpc19ib29sKCR2YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKGlzX3N0cmluZygkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgJHZhbHVlID0gc3RydG91cHBlcigkdmFsdWUpOw0KICAgICAgICAgICAgICAgIHJldHVybiAoJHZhbHVlID09ICdUUlVFJyB8fCAkdmFsdWUgPT0gJ0ZBTFNFJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX0RBVEU6DQogICAgICAgICAgICBpZihpc19pbnQoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIGlmKCR2YWx1ZSA8IDApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdmFsdWUgPSAiJHZhbHVlIjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYoIWlzX3N0cmluZygkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZihzdHJsZW4oJHZhbHVlKSAhPSA4KSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkeSA9IGludHZhbChzdWJzdHIoJHZhbHVlLCAwLCA0KSk7DQogICAgICAgICAgICAkbSA9IGludHZhbChzdWJzdHIoJHZhbHVlLCA0LCAyKSk7DQogICAgICAgICAgICAkZCA9IGludHZhbChzdWJzdHIoJHZhbHVlLCA2LCAyKSk7DQoNCiAgICAgICAgICAgIHJldHVybiBjaGVja2RhdGUoJG0sICRkLCAkeSk7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX0RBVEVfVElNRToNCiAgICAgICAgICAgIGlmKCFpc19zdHJpbmcoJHZhbHVlKSB8fCBzdHJsZW4oJHZhbHVlKSA8IDE1KSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICByZXR1cm4oJHZhbHVlezh9ID09ICdUJyAmJiANCiAgICAgICAgICAgICAgICAgICByZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKHN1YnN0cigkdmFsdWUsIDAsIDgpLCBSRkMyNDQ1X1RZUEVfREFURSkgJiYNCiAgICAgICAgICAgICAgICAgICByZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKHN1YnN0cigkdmFsdWUsIDkpLCBSRkMyNDQ1X1RZUEVfVElNRSkpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIFJGQzI0NDVfVFlQRV9EVVJBVElPTjoNCiAgICAgICAgICAgIGlmKCFpc19zdHJpbmcoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkdmFsdWUpOw0KDQogICAgICAgICAgICBpZigkbGVuIDwgMykgew0KICAgICAgICAgICAgICAgIC8vIE1pbmltdW0gY29uZm9ybWFudCBsZW5ndGg6ICJQMVciDQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZigkdmFsdWV7MH0gPT0gJysnIHx8ICR2YWx1ZXswfSA9PSAnLScpIHsNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAxKTsNCiAgICAgICAgICAgICAgICAtLSRsZW47IC8vIERvbid0IGZvcmdldCB0byB1cGRhdGUgdGhpcyENCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYoJHZhbHVlezB9ICE9ICdQJykgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gT0ssIG5vdyBicmVhayBpdCB1cA0KICAgICAgICAgICAgJG51bSA9ICcnOw0KICAgICAgICAgICAgJGFsbG93ZWQgPSAnV0RUJzsNCg0KICAgICAgICAgICAgZm9yKCRpID0gMTsgJGkgPCAkbGVuOyArKyRpKSB7DQogICAgICAgICAgICAgICAgJGNoID0gJHZhbHVleyRpfTsNCiAgICAgICAgICAgICAgICBpZigkY2ggPj0gJzAnICYmICRjaCA8PSAnOScpIHsNCiAgICAgICAgICAgICAgICAgICAgJG51bSAuPSAkY2g7DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihzdHJwb3MoJGFsbG93ZWQsICRjaCkgPT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgIC8vIE5vbi1udW1lcmljIGNoYXJhY3RlciB3aGljaCBzaG91bGRuJ3QgYmUgaGVyZQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmKCRudW0gPT09ICcnICYmICRjaCAhPSAnVCcpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gQWxsb3dlZCBub24tbnVtZXJpYyBjaGFyYWN0ZXIsIGJ1dCBubyBkaWdpdHMgY2FtZSBiZWZvcmUgaXQNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIE9LLCAkY2ggbm93IGhvbGRzIGEgY2hhcmFjdGVyIHdoaWNoIHRlbGxzIHVzIHdoYXQgJG51bSBpcw0KICAgICAgICAgICAgICAgIHN3aXRjaCgkY2gpIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVyc6DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBkdXJhdGlvbiBpbiB3ZWVrcyBpcyBzcGVjaWZpZWQsIHRoaXMgbXVzdCBlbmQgdGhlIHN0cmluZw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgkaSA9PSAkbGVuIC0gMSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0QnOg0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGF5cyBzcGVjaWZpZWQsIG5vdyBpZiBhbnl0aGluZyBjb21lcyBhZnRlciBpdCBtdXN0IGJlIGEgJ1QnDQogICAgICAgICAgICAgICAgICAgICAgICAkYWxsb3dlZCA9ICdUJzsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdGFydGluZyB0byBzcGVjaWZ5IHRpbWUsIEggTSBTIGFyZSBub3cgdmFsaWQgZGVsaW1pdGVycw0KICAgICAgICAgICAgICAgICAgICAgICAgJGFsbG93ZWQgPSAnSE1TJzsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnSCc6DQogICAgICAgICAgICAgICAgICAgICAgICAkYWxsb3dlZCA9ICdNJzsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTSc6DQogICAgICAgICAgICAgICAgICAgICAgICAkYWxsb3dlZCA9ICdTJzsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnUyc6DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCRpID09ICRsZW4gLSAxKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gSWYgd2UgJ3JlIGdvaW5nIHRvIGNvbnRpbnVlLCByZXNldCAkbnVtDQogICAgICAgICAgICAgICAgJG51bSA9ICcnOw0KDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vICRudW0gaXMga2VwdCBmb3IgdGhpcyByZWFzb246IGlmIHdlICdyZSBoZXJlLCB3ZSByYW4gb3V0IG9mIGNoYXJzDQogICAgICAgICAgICAvLyB0aGVyZWZvcmUgJG51bSBtdXN0IGJlIGVtcHR5IGZvciB0aGUgcGVyaW9kIHRvIGJlIGxlZ2FsDQogICAgICAgICAgICByZXR1cm4gKCRudW0gPT09ICcnICYmICRjaCAhPSAnVCcpOw0KDQogICAgICAgIGJyZWFrOw0KICAgICAgICANCiAgICAgICAgY2FzZSBSRkMyNDQ1X1RZUEVfRkxPQVQ6DQogICAgICAgICAgICBpZihpc19mbG9hdCgkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZighaXNfc3RyaW5nKCR2YWx1ZSkgfHwgJHZhbHVlID09PSAnJykgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGRvdCA9IGZhbHNlOw0KICAgICAgICAgICAgJGludCA9IGZhbHNlOw0KICAgICAgICAgICAgJGxlbiA9IHN0cmxlbigkdmFsdWUpOw0KICAgICAgICAgICAgZm9yKCRpID0gMDsgJGkgPCAkbGVuOyArKyRpKSB7DQogICAgICAgICAgICAgICAgc3dpdGNoKCR2YWx1ZXskaX0pIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6IGNhc2UgJysnOg0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gQSBzaWduIGNhbiBvbmx5IGJlIHNlZW4gYXQgcG9zaXRpb24gMCBhbmQgY2Fubm90IGJlIHRoZSBvbmx5IGNoYXINCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRpICE9IDAgfHwgJGxlbiA9PSAxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnLic6DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBBIHNlY29uZCBkb3QgaXMgYW4gZXJyb3INCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYWQgYXQgbGVhc3Qgb25lIGludCBiZWZvcmUgdGhlIGRvdA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGRvdCB8fCAhJGludCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRkb3QgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhbHNvIHN1cmUgdGhhdCB0aGUgZmxvYXQgZG9lc24ndCBlbmQgd2l0aCBhIGRvdA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGkgPT0gJGxlbiAtIDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICBjYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6DQogICAgICAgICAgICAgICAgICAgIGNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICRpbnQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFueSBvdGhlciBjaGFyIGlzIGEgbm8tbm8NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX0lOVEVHRVI6DQogICAgICAgICAgICBpZihpc19pbnQoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYoIWlzX3N0cmluZygkdmFsdWUpIHx8ICR2YWx1ZSA9PT0gJycpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmKCR2YWx1ZXswfSA9PSAnKycgfHwgJHZhbHVlezB9ID09ICctJykgew0KICAgICAgICAgICAgICAgIGlmKHN0cmxlbigkdmFsdWUpID09IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAxKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYoc3Ryc3BuKCR2YWx1ZSwgJzAxMjM0NTY3ODknKSAhPSBzdHJsZW4oJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgcmV0dXJuICgkdmFsdWUgPj0gLTIxNDc0ODM2NDggJiYgJHZhbHVlIDw9IDIxNDc0ODM2NDcpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIFJGQzI0NDVfVFlQRV9QRVJJT0Q6DQogICAgICAgICAgICBpZighaXNfc3RyaW5nKCR2YWx1ZSkgfHwgZW1wdHkoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnLycsICR2YWx1ZSk7DQogICAgICAgICAgICBpZihjb3VudCgkcGFydHMpICE9IDIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmKCFyZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCRwYXJ0c1swXSwgUkZDMjQ0NV9UWVBFX0RBVEVfVElNRSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIFR3byBsZWdhbCBjYXNlcyBmb3IgdGhlIHNlY29uZCBwYXJ0Og0KICAgICAgICAgICAgaWYocmZjMjQ0NV9pc192YWxpZF92YWx1ZSgkcGFydHNbMV0sIFJGQzI0NDVfVFlQRV9EQVRFX1RJTUUpKSB7DQogICAgICAgICAgICAgICAgLy8gSXQgaGFzIHRvIGJlIGFmdGVyIHRoZSBzdGFydCB0aW1lLCBzbw0KICAgICAgICAgICAgICAgIHJldHVybiAoJHBhcnRzWzFdID4gJHBhcnRzWzBdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2UgaWYocmZjMjQ0NV9pc192YWxpZF92YWx1ZSgkcGFydHNbMV0sIFJGQzI0NDVfVFlQRV9EVVJBVElPTikpIHsNCiAgICAgICAgICAgICAgICAvLyBUaGUgcGVyaW9kIE1VU1QgTk9UIGJlIG5lZ2F0aXZlDQogICAgICAgICAgICAgICAgcmV0dXJuICgkcGFydHNbMV17MH0gIT0gJy0nKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gSXQgc2VlbXMgdG8gYmUgaWxsZWdhbA0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIFJGQzI0NDVfVFlQRV9SRUNVUjoNCiAgICAgICAgICAgIGlmKCFpc19zdHJpbmcoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnOycsIHN0cnRvdXBwZXIoJHZhbHVlKSk7DQoNCiAgICAgICAgICAgIC8vIEZpcnN0IG9mIGFsbCwgd2UgbmVlZCBhdCBsZWFzdCBhIEZSRVEgYW5kIGEgVU5USUwgb3IgQ09VTlQgcGFydCwgc28uLi4NCiAgICAgICAgICAgIGlmKGNvdW50KCRwYXJ0cykgPCAyKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBMZXQncyBnZXQgdGhhdCBpbnRvIGEgbW9yZSBlYXNpbHkgY29tcHJlaGVuc2libGUgZm9ybWF0DQogICAgICAgICAgICAkdmFycyA9IGFycmF5KCk7DQogICAgICAgICAgICBmb3JlYWNoKCRwYXJ0cyBhcyAkcGFydCkgew0KDQogICAgICAgICAgICAgICAgJHBpZWNlcyA9IGV4cGxvZGUoJz0nLCAkcGFydCk7DQogICAgICAgICAgICAgICAgLy8gVGhlcmUgbXVzdCBiZSBleGFjdGx5IDIgcGllY2VzLCBlLmcuIEZSRVE9V0VFS0xZDQogICAgICAgICAgICAgICAgaWYoY291bnQoJHBpZWNlcykgIT0gMikgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gSXQncyBpbGxlZ2FsIGZvciBhIHZhcmlhYmxlIHRvIGFwcGVhciB0d2ljZQ0KICAgICAgICAgICAgICAgIGlmKGlzc2V0KCR2YXJzWyRwaWVjZXNbMF1dKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgLy8gU291bmRzIGdvb2QNCiAgICAgICAgICAgICAgICAkdmFyc1skcGllY2VzWzBdXSA9ICRwaWVjZXNbMV07DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIE9LLi4uIG5vdyB0byB0ZXN0IGV2ZXJ5dGhpbmcgZWxzZQ0KDQogICAgICAgICAgICAvLyBGUkVRIG11c3QgYmUgdGhlIGZpcnN0IHRoaW5nIGFwcGVhcmluZw0KICAgICAgICAgICAgcmVzZXQoJHZhcnMpOw0KICAgICAgICAgICAgaWYoa2V5KCR2YXJzKSAhPSAnRlJFUScpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIEl0J3MgaWxsZWdhbCB0byBoYXZlIGJvdGggVU5USUwgYW5kIENPVU5UIGFwcGVhcg0KICAgICAgICAgICAgaWYoaXNzZXQoJHZhcnNbJ1VOVElMJ10pICYmIGlzc2V0KCR2YXJzWydDT1VOVCddKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlOiBCWVdFRUtOTyBpcyBvbmx5IHZhbGlkIGZvciBGUkVRPVlFQVJMWQ0KICAgICAgICAgICAgaWYoaXNzZXQoJHZhcnNbJ0JZV0VFS05PJ10pICYmICR2YXJzWydGUkVRJ10gIT0gJ1lFQVJMWScpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIFNwZWNpYWwgY2FzZTogQllTRVRQT1MgaXMgb25seSB2YWxpZCBpZiBhbm90aGVyIEJZIG9wdGlvbiBpcyBzcGVjaWZpZWQNCiAgICAgICAgICAgIGlmKGlzc2V0KCR2YXJzWydCWVNFVFBPUyddKSkgew0KICAgICAgICAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJ0JZU0VDT05EJywgJ0JZTUlOVVRFJywgJ0JZSE9VUicsICdCWURBWScsICdCWU1PTlRIREFZJywgJ0JZWUVBUkRBWScsICdCWVdFRUtOTycsICdCWU1PTlRIJyk7DQogICAgICAgICAgICAgICAgJGRlZmluZWQgPSBhcnJheV9rZXlzKCR2YXJzKTsNCiAgICAgICAgICAgICAgICAkY29tbW9uICA9IGFycmF5X2ludGVyc2VjdCgkb3B0aW9ucywgJGRlZmluZWQpOw0KICAgICAgICAgICAgICAgIGlmKGVtcHR5KCRjb21tb24pKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIE9LLCBub3cgc2ltcGx5IGNoZWNrIGlmIGVhY2ggZWxlbWVudCBoYXMgYSB2YWxpZCB2YWx1ZSwNCiAgICAgICAgICAgIC8vIHVuc2V0dGluZyB0aGVtIG9uIHRoZSB3YXkuIElmIGF0IHRoZSBlbmQgdGhlIGFycmF5IHN0aWxsDQogICAgICAgICAgICAvLyBoYXMgc29tZSBlbGVtZW50cywgdGhleSBhcmUgaWxsZWdhbC4NCg0KICAgICAgICAgICAgaWYoJHZhcnNbJ0ZSRVEnXSAhPSAnU0VDT05ETFknICYmICR2YXJzWydGUkVRJ10gIT0gJ01JTlVURUxZJyAmJiAkdmFyc1snRlJFUSddICE9ICdIT1VSTFknICYmIA0KICAgICAgICAgICAgICAgJHZhcnNbJ0ZSRVEnXSAhPSAnREFJTFknICAgICYmICR2YXJzWydGUkVRJ10gIT0gJ1dFRUtMWScgJiYNCiAgICAgICAgICAgICAgICR2YXJzWydGUkVRJ10gIT0gJ01PTlRITFknICAmJiAkdmFyc1snRlJFUSddICE9ICdZRUFSTFknKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdW5zZXQoJHZhcnNbJ0ZSRVEnXSk7DQoNCiAgICAgICAgICAgIC8vIFNldCB0aGlzLCB3ZSBtYXkgbmVlZCBpdCBsYXRlcg0KICAgICAgICAgICAgJHdlZWtkYXlzID0gZXhwbG9kZSgnLCcsIFJGQzI0NDVfV0VFS0RBWVMpOw0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snVU5USUwnXSkpIHsNCiAgICAgICAgICAgICAgICBpZihyZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCR2YXJzWydVTlRJTCddLCBSRkMyNDQ1X1RZUEVfREFURV9USU1FKSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdGltZSBNVVNUIGJlIGluIFVUQyBmb3JtYXQNCiAgICAgICAgICAgICAgICAgICAgaWYoIShzdWJzdHIoJHZhcnNbJ1VOVElMJ10sIC0xKSA9PSAnWicpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWxzZSBpZighcmZjMjQ0NV9pc192YWxpZF92YWx1ZSgkdmFyc1snVU5USUwnXSwgUkZDMjQ0NV9UWVBFX0RBVEVfVElNRSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVuc2V0KCR2YXJzWydVTlRJTCddKTsNCg0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQ09VTlQnXSkpIHsNCiAgICAgICAgICAgICAgICBpZihlbXB0eSgkdmFyc1snQ09VTlQnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbHNvIGNhdGNoZXMgdGhlIHN0cmluZyAnMCcsIHdoaWNoIG1ha2VzIG5vIHNlbnNlDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoc3Ryc3BuKCR2YXJzWydDT1VOVCddLCAnMDEyMzQ1Njc4OScpICE9IHN0cmxlbigkdmFyc1snQ09VTlQnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVuc2V0KCR2YXJzWydDT1VOVCddKTsNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snSU5URVJWQUwnXSkpIHsNCiAgICAgICAgICAgICAgICBpZihlbXB0eSgkdmFyc1snSU5URVJWQUwnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhbHNvIGNhdGNoZXMgdGhlIHN0cmluZyAnMCcsIHdoaWNoIG1ha2VzIG5vIHNlbnNlDQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoc3Ryc3BuKCR2YXJzWydJTlRFUlZBTCddLCAnMDEyMzQ1Njc4OScpICE9IHN0cmxlbigkdmFyc1snSU5URVJWQUwnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVuc2V0KCR2YXJzWydJTlRFUlZBTCddKTsNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllTRUNPTkQnXSkpIHsNCiAgICAgICAgICAgICAgICBpZigkdmFyc1snQllTRUNPTkQnXSA9PSAnJykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIENvbW1hIGFsc28gYWxsb3dlZA0KICAgICAgICAgICAgICAgIGlmKHN0cnNwbigkdmFyc1snQllTRUNPTkQnXSwgJzAxMjM0NTY3ODksJykgIT0gc3RybGVuKCR2YXJzWydCWVNFQ09ORCddKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzZWNzID0gZXhwbG9kZSgnLCcsICR2YXJzWydCWVNFQ09ORCddKTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRzZWNzIGFzICRzZWMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHNlYyA9PSAnJyB8fCAkc2VjIDwgMCB8fCAkc2VjID4gNTkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVuc2V0KCR2YXJzWydCWVNFQ09ORCddKTsNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllNSU5VVEUnXSkpIHsNCiAgICAgICAgICAgICAgICBpZigkdmFyc1snQllNSU5VVEUnXSA9PSAnJykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vIENvbW1hIGFsc28gYWxsb3dlZA0KICAgICAgICAgICAgICAgIGlmKHN0cnNwbigkdmFyc1snQllNSU5VVEUnXSwgJzAxMjM0NTY3ODksJykgIT0gc3RybGVuKCR2YXJzWydCWU1JTlVURSddKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRtaW5zID0gZXhwbG9kZSgnLCcsICR2YXJzWydCWU1JTlVURSddKTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRtaW5zIGFzICRtaW4pIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoJG1pbiA9PSAnJyB8fCAkbWluIDwgMCB8fCAkbWluID4gNTkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVuc2V0KCR2YXJzWydCWU1JTlVURSddKTsNCg0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllIT1VSJ10pKSB7DQogICAgICAgICAgICAgICAgaWYoJHZhcnNbJ0JZSE9VUiddID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gQ29tbWEgYWxzbyBhbGxvd2VkDQogICAgICAgICAgICAgICAgaWYoc3Ryc3BuKCR2YXJzWydCWUhPVVInXSwgJzAxMjM0NTY3ODksJykgIT0gc3RybGVuKCR2YXJzWydCWUhPVVInXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkaG91cnMgPSBleHBsb2RlKCcsJywgJHZhcnNbJ0JZSE9VUiddKTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRob3VycyBhcyAkaG91cikgew0KICAgICAgICAgICAgICAgICAgICBpZigkaG91ciA9PSAnJyB8fCAkaG91ciA8IDAgfHwgJGhvdXIgPiAyMykgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdW5zZXQoJHZhcnNbJ0JZSE9VUiddKTsNCiAgICAgICAgICAgIA0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllEQVknXSkpIHsNCiAgICAgICAgICAgICAgICBpZihlbXB0eSgkdmFyc1snQllEQVknXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vIEZpcnN0IG9mZiwgc3BsaXQgdXAgYWxsIHZhbHVlcyB3ZSBtYXkgaGF2ZQ0KICAgICAgICAgICAgICAgICRkYXlzID0gZXhwbG9kZSgnLCcsICR2YXJzWydCWURBWSddKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRkYXlzIGFzICRkYXkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGRheXBhcnQgPSBzdWJzdHIoJGRheSwgLTIpOw0KICAgICAgICAgICAgICAgICAgICBpZighaW5fYXJyYXkoJGRheXBhcnQsICR3ZWVrZGF5cykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmKHN0cmxlbigkZGF5KSA+IDIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRpbnRwYXJ0ID0gc3Vic3RyKCRkYXksIDAsIHN0cmxlbigkZGF5KSAtIDIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoIXJmYzI0NDVfaXNfdmFsaWRfdmFsdWUoJGludHBhcnQsIFJGQzI0NDVfVFlQRV9JTlRFR0VSKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGludHZhbCgkaW50cGFydCkgPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVuc2V0KCR2YXJzWydCWURBWSddKTsNCg0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllNT05USERBWSddKSkgew0KICAgICAgICAgICAgICAgIGlmKGVtcHR5KCR2YXJzWydCWU1PTlRIREFZJ10pKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG1kYXlzID0gZXhwbG9kZSgnLCcsICR2YXJzWydCWU1PTlRIREFZJ10pOw0KICAgICAgICAgICAgICAgIGZvcmVhY2goJG1kYXlzIGFzICRtZGF5KSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCFyZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCRtZGF5LCBSRkMyNDQ1X1RZUEVfSU5URUdFUikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkbWRheSA9IGFicyhpbnR2YWwoJG1kYXkpKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJG1kYXkgPT0gMCB8fCAkbWRheSA+IDMxKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB1bnNldCgkdmFyc1snQllNT05USERBWSddKTsNCg0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllZRUFSREFZJ10pKSB7DQogICAgICAgICAgICAgICAgaWYoZW1wdHkoJHZhcnNbJ0JZWUVBUkRBWSddKSkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR5ZGF5cyA9IGV4cGxvZGUoJywnLCAkdmFyc1snQllZRUFSREFZJ10pOw0KICAgICAgICAgICAgICAgIGZvcmVhY2goJHlkYXlzIGFzICR5ZGF5KSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCFyZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCR5ZGF5LCBSRkMyNDQ1X1RZUEVfSU5URUdFUikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkeWRheSA9IGFicyhpbnR2YWwoJHlkYXkpKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHlkYXkgPT0gMCB8fCAkeWRheSA+IDM2Nikgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdW5zZXQoJHZhcnNbJ0JZWUVBUkRBWSddKTsNCg0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllXRUVLTk8nXSkpIHsNCiAgICAgICAgICAgICAgICBpZihlbXB0eSgkdmFyc1snQllXRUVLTk8nXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkd2Vla25vcyA9IGV4cGxvZGUoJywnLCAkdmFyc1snQllXRUVLTk8nXSk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkd2Vla25vcyBhcyAkd2Vla25vKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCFyZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCR3ZWVrbm8sIFJGQzI0NDVfVFlQRV9JTlRFR0VSKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICR3ZWVrbm8gPSBhYnMoaW50dmFsKCR3ZWVrbm8pKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHdlZWtubyA9PSAwIHx8ICR3ZWVrbm8gPiA1Mykgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdW5zZXQoJHZhcnNbJ0JZV0VFS05PJ10pOw0KDQoNCiAgICAgICAgICAgIGlmKGlzc2V0KCR2YXJzWydCWU1PTlRIJ10pKSB7DQogICAgICAgICAgICAgICAgaWYoZW1wdHkoJHZhcnNbJ0JZTU9OVEgnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyBDb21tYSBhbHNvIGFsbG93ZWQNCiAgICAgICAgICAgICAgICBpZihzdHJzcG4oJHZhcnNbJ0JZTU9OVEgnXSwgJzAxMjM0NTY3ODksJykgIT0gc3RybGVuKCR2YXJzWydCWU1PTlRIJ10pKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG1vbnRocyA9IGV4cGxvZGUoJywnLCAkdmFyc1snQllNT05USCddKTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCRtb250aHMgYXMgJG1vbnRoKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCRtb250aCA9PSAnJyB8fCAkbW9udGggPCAxIHx8ICRtb250aCA+IDEyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB1bnNldCgkdmFyc1snQllNT05USCddKTsNCg0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snQllTRVRQT1MnXSkpIHsNCiAgICAgICAgICAgICAgICBpZihlbXB0eSgkdmFyc1snQllTRVRQT1MnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkc2V0cyA9IGV4cGxvZGUoJywnLCAkdmFyc1snQllTRVRQT1MnXSk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCgkc2V0cyBhcyAkc2V0KSB7DQogICAgICAgICAgICAgICAgICAgIGlmKCFyZmMyNDQ1X2lzX3ZhbGlkX3ZhbHVlKCRzZXQsIFJGQzI0NDVfVFlQRV9JTlRFR0VSKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICRzZXQgPSBhYnMoaW50dmFsKCRzZXQpKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJHNldCA9PSAwIHx8ICRzZXQgPiAzNjYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHVuc2V0KCR2YXJzWydCWVNFVFBPUyddKTsNCg0KDQogICAgICAgICAgICBpZihpc3NldCgkdmFyc1snV0tTVCddKSkgew0KICAgICAgICAgICAgICAgIGlmKCFpbl9hcnJheSgkdmFyc1snV0tTVCddLCAkd2Vla2RheXMpKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICB1bnNldCgkdmFyc1snV0tTVCddKTsNCg0KDQogICAgICAgICAgICAvLyBBbnkgcmVtYWluaW5nIHZhcnMgbXVzdCBiZSB4LW5hbWVzDQogICAgICAgICAgICBpZihlbXB0eSgkdmFycykpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgZm9yZWFjaCgkdmFycyBhcyAkbmFtZSA9PiAkdmFyKSB7DQogICAgICAgICAgICAgICAgaWYoIXJmYzI0NDVfaXNfeG5hbWUoJG5hbWUpKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8vIEF0IGxhc3QsIGFsbCBpcyBPSyENCiAgICAgICAgICAgIHJldHVybiB0cnVlOw0KDQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX1RFWFQ6DQogICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgY2FzZSBSRkMyNDQ1X1RZUEVfVElNRToNCiAgICAgICAgICAgIGlmKGlzX2ludCgkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgaWYoJHZhbHVlIDwgMCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICR2YWx1ZSA9ICIkdmFsdWUiOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWxzZSBpZighaXNfc3RyaW5nKCR2YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmKHN0cmxlbigkdmFsdWUpID09IDcpIHsNCiAgICAgICAgICAgICAgICBpZihzdHJ0b3VwcGVyKHN1YnN0cigkdmFsdWUsIC0xKSkgIT0gJ1onKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHZhbHVlID0gc3Vic3RyKCR2YWx1ZSwgMCwgNik7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZihzdHJsZW4oJHZhbHVlKSAhPSA2KSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkaCA9IGludHZhbChzdWJzdHIoJHZhbHVlLCAwLCAyKSk7DQogICAgICAgICAgICAkbSA9IGludHZhbChzdWJzdHIoJHZhbHVlLCAyLCAyKSk7DQogICAgICAgICAgICAkcyA9IGludHZhbChzdWJzdHIoJHZhbHVlLCA0LCAyKSk7DQoNCiAgICAgICAgICAgIHJldHVybiAoJGggPD0gMjMgJiYgJG0gPD0gNTkgJiYgJHMgPD0gNjApOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlIFJGQzI0NDVfVFlQRV9VVENfT0ZGU0VUOg0KICAgICAgICAgICAgaWYoaXNfaW50KCR2YWx1ZSkpIHsNCiAgICAgICAgICAgICAgICBpZigkdmFsdWUgPj0gMCkgew0KICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiKyR2YWx1ZSI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSAiJHZhbHVlIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlIGlmKCFpc19zdHJpbmcoJHZhbHVlKSkgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYoc3RybGVuKCR2YWx1ZSkgPT0gNykgew0KICAgICAgICAgICAgICAgICRzID0gaW50dmFsKHN1YnN0cigkdmFsdWUsIDUsIDIpKTsNCiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAwLCA1KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmKHN0cmxlbigkdmFsdWUpICE9IDUgfHwgJHZhbHVlID09ICItMDAwMCIpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmKCR2YWx1ZXswfSAhPSAnKycgJiYgJHZhbHVlezB9ICE9ICctJykgew0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJGggPSBpbnR2YWwoc3Vic3RyKCR2YWx1ZSwgMSwgMikpOw0KICAgICAgICAgICAgJG0gPSBpbnR2YWwoc3Vic3RyKCR2YWx1ZSwgMywgMikpOw0KDQogICAgICAgICAgICByZXR1cm4gKCRoIDw9IDIzICYmICRtIDw9IDU5ICYmICRzIDw9IDU5KTsNCiAgICAgICAgYnJlYWs7DQogICAgfQ0KDQogICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMgYXNzZXJ0aW9uDQogICAgdHJpZ2dlcl9lcnJvcignYmFkIGNvZGUgcGF0aCcsIEVfVVNFUl9XQVJOSU5HKTsNCiAgICB2YXJfZHVtcCgkdHlwZSk7DQogICAgcmV0dXJuIGZhbHNlOw0KfQ0KDQpmdW5jdGlvbiByZmMyNDQ1X2RvX3ZhbHVlX2Zvcm1hdHRpbmcoJHZhbHVlLCAkdHlwZSkgew0KICAgIC8vIE5vdGU6IHRoaXMgZG9lcyBub3Qgb25seSBkbyBmb3JtYXR0aW5nOyBpdCBhbHNvIGRvZXMgY29udmVyc2lvbiB0byBzdHJpbmchDQogICAgc3dpdGNoKCR0eXBlKSB7DQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX0NBTF9BRERSRVNTOg0KICAgICAgICBjYXNlIFJGQzI0NDVfVFlQRV9VUkk6DQogICAgICAgICAgICAvLyBFbmNsb3NlIGluIGRvdWJsZSBxdW90ZXMNCiAgICAgICAgICAgICR2YWx1ZSA9ICciJy4kdmFsdWUuJyInOw0KICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBSRkMyNDQ1X1RZUEVfVEVYVDoNCiAgICAgICAgICAgIC8vIEVzY2FwZSBlbnRpdGllcw0KICAgICAgICAgICAgJHZhbHVlID0gc3RydHIoJHZhbHVlLCBhcnJheSgiXG4iID0+ICdcXG4nLCAnXFwnID0+ICdcXFxcJywgJywnID0+ICdcXCwnLCAnOycgPT4gJ1xcOycpKTsNCiAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgIHJldHVybiAkdmFsdWU7DQp9DQoNCmZ1bmN0aW9uIHJmYzI0NDVfdW5kb192YWx1ZV9mb3JtYXR0aW5nKCR2YWx1ZSwgJHR5cGUpIHsNCiAgICBzd2l0Y2goJHR5cGUpIHsNCiAgICAgICAgY2FzZSBSRkMyNDQ1X1RZUEVfQ0FMX0FERFJFU1M6DQogICAgICAgIGNhc2UgUkZDMjQ0NV9UWVBFX1VSSToNCiAgICAgICAgICAgIC8vIFRyaW0gYmVnaW5uaW5nIGFuZCBlbmQgZG91YmxlIHF1b3RlDQogICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAxLCBzdHJsZW4oJHZhbHVlKSAtIDIpOw0KICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSBSRkMyNDQ1X1RZUEVfVEVYVDoNCiAgICAgICAgICAgIC8vIFVuZXNjYXBlIGVudGl0aWVzDQogICAgICAgICAgICAkdmFsdWUgPSBzdHJ0cigkdmFsdWUsIGFycmF5KCdcXG4nID0+ICJcbiIsICdcXE4nID0+ICJcbiIsICdcXFxcJyA9PiAnXFwnLCAnXFwsJyA9PiAnLCcsICdcXDsnID0+ICc7JykpOw0KICAgICAgICBicmVhazsNCiAgICB9DQogICAgcmV0dXJuICR2YWx1ZTsNCn0NCg0KLy8gVGhpcyBpcyBjaGVhdGluZzogR1VJRHMgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggUkZDIDI0NDUNCg0KZnVuY3Rpb24gcmZjMjQ0NV9ndWlkKCkgew0KICAgIC8vIEltcGxlbWVudGVkIGFzIHBlciB0aGUgTmV0d29yayBXb3JraW5nIEdyb3VwIGRyYWZ0IG9uIFVVSURzIGFuZCBHVUlEcw0KDQogICAgLy8gVGhlc2UgdHdvIG9jdGV0cyBnZXQgc3BlY2lhbCB0cmVhdG1lbnQNCiAgICAkdGltZV9oaV9hbmRfdmVyc2lvbiAgICAgICA9IHNwcmludGYoJyUwMngnLCAoMSA8PCA2KSArIG10X3JhbmQoMCwgMTUpKTsgLy8gMDEwMCBwbHVzIDQgcmFuZG9tIGJpdHMNCiAgICAkY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZCA9IHNwcmludGYoJyUwMngnLCAoMSA8PCA3KSArIG10X3JhbmQoMCwgNjMpKTsgLy8gMTAgcGx1cyA2IHJhbmRvbSBiaXRzDQoNCiAgICAvLyBOZWVkIGFub3RoZXIgMTQgcmFuZG9tIG9jdGVjdHMNCiAgICAkcG9vbCA9ICcnOw0KICAgIGZvcigkaSA9IDA7ICRpIDwgNzsgKyskaSkgew0KICAgICAgICAkcG9vbCAuPSBzcHJpbnRmKCclMDR4JywgbXRfcmFuZCgwLCA2NTUzNSkpOw0KICAgIH0NCg0KICAgIC8vIHRpbWVfbG93ID0gNCBvY3RldHMNCiAgICAkcmFuZG9tICA9IHN1YnN0cigkcG9vbCwgMCwgOCkuJy0nOw0KDQogICAgLy8gdGltZV9taWQgPSAyIG9jdGV0cw0KICAgICRyYW5kb20gLj0gc3Vic3RyKCRwb29sLCA4LCA0KS4nLSc7DQoNCiAgICAvLyB0aW1lX2hpZ2hfYW5kX3ZlcnNpb24gPSAyIG9jdGV0cw0KICAgICRyYW5kb20gLj0gJHRpbWVfaGlfYW5kX3ZlcnNpb24uc3Vic3RyKCRwb29sLCAxMiwgMikuJy0nOw0KDQogICAgLy8gY2xvY2tfc2VxX2hpZ2hfYW5kX3Jlc2VydmVkID0gMSBvY3RldA0KICAgICRyYW5kb20gLj0gJGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWQ7DQoNCiAgICAvLyBjbG9ja19zZXFfbG93ID0gMSBvY3RldA0KICAgICRyYW5kb20gLj0gc3Vic3RyKCRwb29sLCAxMywgMikuJy0nOw0KDQogICAgLy8gbm9kZSA9IDYgb2N0ZXRzDQogICAgJHJhbmRvbSAuPSBzdWJzdHIoJHBvb2wsIDE0LCAxMik7DQoNCiAgICByZXR1cm4gJHJhbmRvbTsNCn0NCg0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQ0KCQkgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkNCg0KIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCiAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0ENCiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMNCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4NCg0KW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cw0KIGFzIHRoZSBzdWNjZXNzb3Igb2YgdGhlIEdOVSBMaWJyYXJ5IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGhlbmNlDQogdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dDQoNCgkJCSAgICBQcmVhbWJsZQ0KDQogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXINCmZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljDQpMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlDQpmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuDQoNCiAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQ0Kc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQ0KRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91DQpjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyDQp0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcg0Kc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuDQoNCiAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLA0Kbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdA0KeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQ0KZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldA0KaXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mDQppdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8NCnRoZXNlIHRoaW5ncy4NCg0KICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkDQpkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlDQpyaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3INCnlvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4NCg0KICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcw0Kb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQ0KeW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQ0KY29kZS4gIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQ0KY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtDQp3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZw0KaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuDQoNCiAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQ0KbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwNCnBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5Lg0KDQogIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdA0KdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcw0KbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93DQp0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwNCmF1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQ0KaW50cm9kdWNlZCBieSBvdGhlcnMuDQoMDQogIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mDQphbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90DQplZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGENCnJlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0DQphbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlDQpjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4NCg0KICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQ0Kb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyDQpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZA0KaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UNCnRoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UNCmxpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLg0KDQogIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nDQphIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGENCmNvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQ0KR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUNCmVudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsDQpQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aA0KdGhlIGxpYnJhcnkuDQoNCiAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdA0KZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXIncyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwNClB1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcw0Kb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcw0KYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55DQpsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluDQpzcGVjaWFsIGNpcmN1bXN0YW5jZXMuDQoNCiAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8NCmVuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzDQphIGRlLWZhY3RvIHN0YW5kYXJkLiAgVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0IGJlDQphbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlDQpsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMNCmNhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQ0Kc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4NCg0KICBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUNCnByb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZg0KZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbg0Kbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VDQpvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZw0Kc3lzdGVtLg0KDQogIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlDQp1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcw0KbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuDQp0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5Lg0KDQogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kDQptb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGENCiJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlDQpmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0DQpiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4NCgwNCgkJICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UNCiAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTg0KDQogIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSBvciBvdGhlcg0KcHJvZ3JhbSB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3INCm90aGVyIGF1dGhvcml6ZWQgcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YNCnRoaXMgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKGFsc28gY2FsbGVkICJ0aGlzIExpY2Vuc2UiKS4NCkVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLg0KDQogIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGENCnByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcw0KKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4NCg0KICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaw0Kd2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQ0KTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXINCmNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhDQpwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkDQpzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzDQppbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQ0KDQogICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yDQptYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zDQphbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZA0KaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uDQphbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5Lg0KDQogIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90DQpjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mDQpydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tDQpzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkDQpvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yDQp3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzDQphbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4NCiAgDQogIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncw0KY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQNCnlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuDQphcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdA0KYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkNCndhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlDQpMaWJyYXJ5Lg0KDQogIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksDQphbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhDQpmZWUuDQoMDQogIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24NCm9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQNCmRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQ0KYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoNCg0KICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4NCg0KICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcw0KICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuDQoNCiAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8NCiAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4NCg0KICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQ0KICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMNCiAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5DQogICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsDQogICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yDQogICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YNCiAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuDQoNCiAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcw0KICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUNCiAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQ0KICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0DQogICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUNCiAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQ0KDQpUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmDQppZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LA0KYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluDQp0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlDQpzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UNCmRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZA0Kb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mDQp0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQ0KZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlDQppdC4NCg0KVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0DQp5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8NCmV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcg0KY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4NCg0KSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQ0Kd2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mDQphIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcg0KdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4NCg0KICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYw0KTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbw0KdGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbw0KdGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLA0KaW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQ0Kb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQ0KdGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbg0KdGhlc2Ugbm90aWNlcy4NCgwNCiAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcg0KdGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwNCnN1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuDQoNCiAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mDQp0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuDQoNCiAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3INCmRlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtDQp1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkNCml0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gNCm11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQ0KbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLg0KDQogIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5DQpmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQ0Kc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvDQpkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90DQpjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLg0KDQogIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlDQpMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yDQpsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQ0Kd29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZA0KdGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4NCg0KICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5DQpjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQNCmNvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlDQpsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4NClNlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLg0KDQogIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlDQp0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGENCmRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90Lg0KV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUNCmxpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlDQp0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3Lg0KDQogIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhDQpzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUNCmZ1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QNCmZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUNCndvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlDQpMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQ0KDQogIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5DQpkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4NCkFueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LA0Kd2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLg0KDA0KICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcg0KbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGENCndvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrDQp1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0DQptb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UNCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLg0KDQogIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQ0KTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5DQp0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrDQpkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQ0KY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQ0KZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQ0Kb2YgdGhlc2UgdGhpbmdzOg0KDQogICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcNCiAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXINCiAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcg0KICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkDQogICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0DQogICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUNCiAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZA0KICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kDQogICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlDQogICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24NCiAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikNCg0KICAgIGIpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZQ0KICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhDQogICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sDQogICAgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpDQogICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZg0KICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcw0KICAgIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLg0KDQogICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQNCiAgICBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMNCiAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlDQogICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLg0KDQogICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkNCiAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUNCiAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuDQoNCiAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UNCiAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4NCg0KICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUNCkxpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yDQpyZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwNCnRoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzDQpub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3INCmNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24NCndoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMNCnRoZSBleGVjdXRhYmxlLg0KDQogIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlDQpyZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5DQphY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90DQp1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91DQpkaXN0cmlidXRlLg0KDA0KICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlDQpMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQ0KZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZA0KbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uDQp0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UNCnBlcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6DQoNCiAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaw0KICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkNCiAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUNCiAgICBTZWN0aW9ucyBhYm92ZS4NCg0KICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0DQogICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcNCiAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuDQoNCiAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUNCnRoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55DQphdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3INCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cg0KcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLA0Kb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcw0KdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLg0KDQogIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdA0Kc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3INCmRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQ0KcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQ0KbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlDQpMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZA0KYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZw0KdGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuDQoNCiAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUNCkxpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlDQpvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5DQpzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyDQpyZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uDQpZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoDQp0aGlzIExpY2Vuc2UuDQoMDQogIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50DQppbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLA0KY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcg0Kb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdA0KZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QNCmRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMNCkxpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UNCm1heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQNCmxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkNCmFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbg0KdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bw0KcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4NCg0KSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQ0KcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LA0KYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4NCg0KSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQ0KcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkNCnN1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUNCmludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzDQppbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUNCmdlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQNCnRocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0DQpzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nDQp0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QNCmltcG9zZSB0aGF0IGNob2ljZS4NCg0KVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvDQpiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4NCg0KICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4NCmNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQ0Kb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkDQphbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywNCnNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cw0KZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYNCndyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLg0KDQogIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldw0KdmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLg0KU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLA0KYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLg0KDQpFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBMaWJyYXJ5DQpzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQNCiJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQNCmNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkNCnRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGENCmxpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5DQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KDA0KICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlDQpwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsDQp3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcw0KY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUNClNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXINCmRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMNCm9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nDQphbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5Lg0KDQoJCQkgICAgTk8gV0FSUkFOVFkNCg0KICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8NCldBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuDQpFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUg0KT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkNCktJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSDQpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUNCkxJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FDQpUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uDQoNCiAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4NCldSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZDQpBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQ0KRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUg0KQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUNCkxJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcNClJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBDQpGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGDQpTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIDQpEQU1BR0VTLg0KDQoJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TDQoMDQogICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMNCg0KICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0DQpwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQNCmV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZw0KcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlDQpvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4NCg0KICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzDQpzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQ0KY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlDQoiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLg0KDQogICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4NCiAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPg0KDQogICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCiAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXINCiAgICB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCg0KICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCiAgICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KDQogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYw0KICAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQ0KDQpBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4NCg0KWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXINCnNjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmDQpuZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6DQoNCiAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUNCiAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4NCg0KICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTANCiAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UNCg0KVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCENCg0KDQo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/README.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[QmVubnUgLSBBbiBvYmplY3Qtb3JpZW50ZWQgaUNhbGVuZGFyIChSRkMyNDQ1KSBpbXBsZW1lbnRhdGlvbiBpbiBQSFANCmh0dHA6Ly9iZW5udS5zb3VyY2Vmb3JnZS5uZXQNCg0KQmVubnUgaXMgY29weXJpZ2h0IChDKSAyMDA1IGJ5IElvYW5uaXMgUGFwYWlvYW5ub3UgKHBqQHVvbS5ncikuDQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQogICAgVEFCTEUgT0YgQ09OVEVOVFMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCjEuIEFib3V0IEJlbm51DQogICAgMS4xLiBXaGF0IGlzIEJlbm51Pw0KICAgIDEuMi4gV2hhdCBpcyBpQ2FsZW5kYXI/DQogICAgMS4zLiBCZW5udSBsaWNlbnNlDQoNCjIuIFVzaW5nIEJlbm51DQogICAgMi4xLiBJbnRlZ3JhdGluZyBCZW5udSBpbiB5b3VyIGFwcGxpY2F0aW9uDQogICAgMi4yLiBVc2FnZSBleGFtcGxlcw0KDQozLiBCdWdzIGFuZCBsaW1pdGF0aW9ucw0KICAgIDMuMS4gS25vd24gbGltaXRhdGlvbnMNCg0KNC4gQ29udGFjdCBpbmZvcm1hdGlvbg0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMS4gQWJvdXQgQmVubnUNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCjEuMS4gV2hhdCBpcyBCZW5udT8NCg0KICAgIEJlbm51IGlzIGEgc29mdHdhcmUgbGlicmFyeSB3cml0dGVuIGluIFBIUCB0aGF0IGltcGxlbWVudHMgdGhlIA0KICAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIElFVEYgaUNhbGVuZGFyIDIuMCBzcGVjaWZpY2F0aW9uIChSRkMgMjQ0NSkuIA0KICAgIEl0cyBwdXJwb3NlIGlzIHRvIGVuYWJsZSBhcHBsaWNhdGlvbnMgd2hpY2ggaGF2ZSBhbiBpbnRlcmVzdCBpbiANCiAgICB0aGlzIGZvcm1hdCAoZS5nLiBjYWxlbmRhcmluZywgc2NoZWR1bGVyIGFuZCBvcmdhbml6ZXIgcHJvZ3JhbXMpIA0KICAgIHRvIHN1cHBvcnQgaUNhbGVuZGFyIGluIGFuIGVhc3ksIHBvd2VyZnVsLCBhbmQgZXh0ZW5zaWJsZSB3YXkuDQoNCiAgICBJbiBvdGhlciB3b3JkcywgQmVubnUgZXhpc3RzIHNvIHRoYXQgZGV2ZWxvcGVycyB3b3JraW5nIG9uIHN1Y2ggDQogICAgYXBwbGljYXRpb25zIGRvbid0IGhhdmUgdG8gd2FzdGUgcGFpbmZ1bCBob3VycyBnb2luZyB0aHJvdWdoIHRoZSANCiAgICBzdGFuZGFyZCBhbmQgd3JpdGluZyB0aGUgY29kZSB0byBpbXBsZW1lbnQgaXQuIEluc3RlYWQsIHRoZXkgY2FuIA0KICAgIGluY2x1ZGUgdGhpcyBsaWJyYXJ5IGluIHRoZWlyIGFwcGxpY2F0aW9uIGFuZCBnZXQgdG8gdGhlIGZ1biBwYXJ0IA0KICAgIGFscmVhZHk6IGNvZGluZyBUSEVJUiBwcm9ncmFtLg0KDQoxLjIuIFdoYXQgaXMgaUNhbGVuZGFyPw0KDQogICAgVGhlIGlDYWxlbmRhciBzcGVjaWZpY2F0aW9uIGlzIGEgcmVzdWx0IG9mIHRoZSB3b3JrIG9mIHRoZSBJRVRGIA0KICAgIChJbnRlcm5ldCBFbmdpbmVlcmluZyBUYXNrIEZvcmNlKSwgQ2FsZW5kYXJpbmcgYW5kIFNjaGVkdWxpbmcgDQogICAgV29ya2luZyBHcm91cC4gSXQgd2FzIGF1dGhvcmVkIGJ5IEZyYW5rIERhd3NvbiBvZiBMb3R1cyANCiAgICBEZXZlbG9wbWVudCBDb3Jwb3JhdGlvbiBhbmQgRGVyaWsgU3RlbmVyc29uIG9mIE1pY3Jvc29mdCANCiAgICBDb3Jwb3JhdGlvbi4gaUNhbGVuZGFyIGlzIGhlYXZpbHkgYmFzZWQgb24gdGhlIGVhcmxpZXIgdkNhbGVuZGFyIA0KICAgIGluZHVzdHJ5IHNwZWNpZmljYXRpb24gYnkgdGhlIEludGVybmV0IE1haWwgQ29uc29ydGl1bSAoSU1DKSwgDQogICAgd2hpY2ggaXQgZXh0ZW5kcyBhbmQgc2Vla3MgdG8gcmVwbGFjZS4NCiAgICANCiAgICBJbiBwcmFjdGljYWwgdGVybXMsIGlDYWxlbmRhciBpcyB0aGUgbnVtYmVyIG9uZSBmb3JtYXQgdXNlZCB0b2RheSANCiAgICBieSBjYWxlbmRhcmluZyBhbmQgc2NoZWR1bGVyIGFwcGxpY2F0aW9ucyB0byBpbXBvcnQgYW5kIGV4cG9ydCANCiAgICBkYXRhLiBBcHBsaWNhdGlvbnMgd2hpY2ggcHJvdmlkZSBzdXBwb3J0IGZvciBpQ2FsZW5kYXIgaW5jbHVkZToNCiAgICANCiAgICAqIE1pY3Jvc29mdCBPdXRsb29rDQogICAgKiBBcHBsZSBpQ2FsDQogICAgKiBNb3ppbGxhIENhbGVuZGFyIChhbmQgTW96aWxsYSBTdW5iaXJkKQ0KICAgICogTXVsYmVycnkNCiAgICAqIEtvcmdhbml6ZXINCiAgICAqIFhpbWlhbiBFdm9sdXRpb24NCg0KICAgIEVmZmVjdGl2ZWx5LCB0aGlzIG1lYW5zIHRoYXQgaUNhbGVuZGFyIGlzIGFraW4gdG8gYSAiY29tbW9uIA0KICAgIGxhbmd1YWdlIiB3aGljaCBhbGwgdGhlc2UgYXBwbGljYXRpb25zIHNwZWFrLiBJZiB5b3UgYXJlIHdyaXRpbmcgDQogICAgYW4gYXBwbGljYXRpb24gd2hpY2ggaW5jbHVkZXMgc2NoZWR1bGluZyBvciBjYWxlbmRhcmluZyBlbGVtZW50cywgDQogICAgYW5kIHlvdSB3YW50IGl0IHRvIGJlIGFibGUgdG8gc3luY2hyb25pemUgd2l0aCBvdGhlciBzdWNoIA0KICAgIHByb2dyYW1zLCB5b3UgbmVlZCB0byBzdXBwb3J0IGlDYWxlbmRhci4gQmVubnUgaXMgYW4gZWFzeSB3YXkgdG8gDQogICAgZG8gZXhhY3RseSB0aGF0LCBhcyBsb25nIGFzIHlvdSBhcmUgY29kaW5nIGluIFBIUC4NCg0KMS4zLiBCZW5udSBsaWNlbnNlDQoNCiAgICBCZW5udSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIA0KICAgIChMR1BMKS4gSW4gc2hvcnQsIHRoaXMgbWVhbnMgdGhhdDoNCiAgICANCiAgICAqIFlvdSBhcmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvdXJjZSBjb2RlIG9mIA0KICAgICAgQmVubnUNCiAgICAqIFlvdSBhcmUgYWxsb3dlZCB0byB1c2UgQmVubnUgb3IgYW55IG1vZGlmaWVkIHZlcnNpb24gb2YgaXQgaW4gYSANCiAgICAgIGNvbW1lcmNpYWwgYXBwbGljYXRpb24NCiAgICAqIFlvdSBkbyBub3QgaGF2ZSB0byBwYXkgYW55IGZlZXMgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUNCiAgICAgIEJlbm51DQogICAgKiBZb3UgY2FuIGNoYXJnZSBvdGhlcnMgZm9yIGRpc3RyaWJ1dGluZyBCZW5udSBvciBkZXJpdmVkIHZlcnNpb25zDQogICAgKiBIb3dldmVyLCBpbiBBTEwgT0YgVEhFIEFCT1ZFIENBU0VTLCB5b3UgTVVTVCBwcm92aWRlIHRoZSBzb3VyY2UgDQogICAgICBjb2RlIGZvciBCZW5udSAob3IgYW55IG1vZGlmaWVkIHZlcnNpb24geW91IG1heSBoYXZlIHByb2R1Y2VkKSwgDQogICAgICBhbmQgdGhhdCBzb3VyY2UgY29kZSBNVVNUIGJlIHByb3ZpZGVkIHVuZGVyIHRoZSBHTlUgR1BMIC1vci0gdGhlIA0KICAgICAgR05VIExHUEwgbGljZW5zZS4gRnVydGhlcm1vcmUsIHlvdSBNVVNUIGluY2x1ZGUgdGhlIG9yaWdpbmFsIA0KICAgICAgY29weXJpZ2h0IG5vdGljZXMgYW5kIGNyZWRpdHMgdGhhdCB5b3UgcmVjZWl2ZWQgdGhlIHNvdXJjZSBjb2RlIA0KICAgICAgd2l0aCB3aGVuIHlvdSBkaXN0cmlidXRlIGl0IElOVEFDVC4NCiAgICAqIEluIGFueSBjYXNlLCB0aGUgY29weXJpZ2h0IHRvIEJlbm51IGlzIHJldGFpbmVkIGJ5IG1lLCANCiAgICAgIElvYW5uaXMgUGFwYWlvYW5ub3UuDQoNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICAjIyAgRElTQ0xBSU1FUiAgIyMNCiAgICAjIyMjIyMjIyMjIyMjIyMjIyMNCiAgICANCiAgICBQbGVhc2UgYmUgYWR2aXNlZCB0aGF0IHRoZSBhYm92ZSBpcyBhIHZlcnkgc2hvcnQgYW5kIHRvIHRoZSBwb2ludCANCiAgICBleHBsYW5hdGlvbiBvZiB0aGUgR05VIExHUEwgdGVybXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgYW5kIGl0IGlzIA0KICAgIG9ubHkgbXkgcGVyc29uYWwgb3Bpbmlvbi4gSVQgSVMgTk9UIFRIRSBBQ1RVQUwgTElDRU5TRSBVTkRFUiBXSElDSCANCiAgICBCRU5OVSBJUyBSRUxFQVNFRC4gSXQgaXMgU1RST05HTFkgUkVDT01NRU5ERUQgdGhhdCB5b3UgcmVhZCB0aGUgDQogICAgZnVsbCB0ZXh0IG9mIHRoZSBMR1BMIGluIG9yZGVyIHRvIGF2b2lkIGFueSBtaXN1bmRlcnN0YW5kaW5ncyANCiAgICB3aGljaCBtYXkgYmUgY2F1c2VkIGJ5IHJlYWRpbmcgbXkgaW50ZXJwcmV0YXRpb24gb2YgaXQuIFlvdSBjYW4gDQogICAgZmluZCB0aGUgZnVsbCB0ZXh0IG9mIHRoZSBMR1BMIGluIHRoZSBmaWxlIExJQ0VOU0UuVFhULCB3aGljaCB5b3UgDQogICAgbXVzdCBoYXZlIHJlY2VpdmVkIGFzIHBhcnQgb2YgdGhlIEJlbm51IGRpc3RyaWJ1dGlvbi4gSWYgeW91IGhhdmUgDQogICAgbm90IHJlY2VpdmVkIHN1Y2ggYSBmaWxlLCBwbGVhc2UgZW1haWwgbWUgbWVudGlvbmluZyB3aGVyZSB5b3UgDQogICAgb2J0YWluZWQgeW91ciBjb3B5IG9mIEJlbm51Lg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMi4gVXNpbmcgQmVubnUNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCjIuMS4gSW50ZWdyYXRpbmcgQmVubnUgaW4geW91ciBhcHBsaWNhdGlvbg0KDQogICAgVG8gaW5jbHVkZSBCZW5udSBpbiB5b3VyIGFwcGxpY2F0aW9uLCB5b3Ugb25seSBuZWVkIHRvIGluY2x1ZGUgb25lIA0KICAgIFBIUCBmaWxlLCBsaWtlIHRoaXM6DQogICAgDQogICAgPD9waHANCiAgICAgICBpbmNsdWRlKCRwYXRoX3RvX2Jlbm51LicvbGlicmFyeS9saWIvYmVubnUuaW5jLnBocCcpOw0KICAgICAgIA0KICAgICAgIC8vIHRoZSByZXN0IG9mIHlvdXIgY29kZSBnb2VzIGhlcmUNCiAgICA/Pg0KDQoyLjIuIFVzYWdlIGV4YW1wbGVzDQoNCiAgICBQbGVhc2UgbG9vayBhdCB0aGUgL2V4YW1wbGVzLyBkaXJlY3RvcnkgZm9yIHJlYWR5LXRvLXJ1biBleGFtcGxlcyANCiAgICBpbGx1c3RyYXRpbmcgaG93IEJlbm51IGlzIHRvIGJlIHVzZWQuIFRoaXMgc2VjdGlvbiB3aWxsIGJlIA0KICAgIHJldmlzaXRlZCBhbmQgcHJvcGVybHkgd3JpdHRlbiB3aGVuIHRoZSBzb3VyY2UgY29kZSByZWFjaGVzIGFuIA0KICAgIGFjY2VwdGFibGUgbGV2ZWwgb2YgZmVhdHVyZXMgYW5kIG1ldHVyaXR5IChubywgSSBkb24ndCBrbm93IHdoZW4gDQogICAgdGhhdCB3aWxsIGJlKS4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjMuIEJ1Z3MgYW5kIGxpbWl0YXRpb25zDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQozLjEuIEtub3duIGxpbWl0YXRpb25zDQoNCiAgICAqIExBTkdVQUdFIHByb3BlcnR5IHBhcmFtZXRlcnMgYXJlbid0IHNlbWFudGljYWxseSBjaGVja2VkLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNC4gQ29udGFjdCBpbmZvcm1hdGlvbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KICAgIFlvdSBjYW4gY29udGFjdCBtZSBhdCB0aGUgZW1haWwgYWRkcmVzcyBwakB1b20uZ3IgZm9yIGFueSANCiAgICBzdWdnZXN0aW9ucywgaWRlYXMsIG9yIGJ1ZyByZXBvcnRzIHJlZ2FyZGluZyBCZW5udS4NCiAgICANCiAgICBBdCBzb21lIHBvaW50IHRoZXJlIHdpbGwgYWxzbyBiZSBhIHNpdGUgd2hpY2ggeW91IGNhbiB1c2UgdG8gZG8gDQogICAgYW55dGhpbmcgcmVsYXRlZCB0byBCZW5udSwgYnV0IHNhZGx5IG5vdCB0b2RheS4gSWYgeW91IHdhbnQgdG8gDQogICAgdm9sdW50ZWVyIGFuZCBnaXZlIGEgaGFuZCwgSSAnbGwgYmUgaGFwcHkgdG8gY29sbGFib3JhdGUuDQo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/tests/leftovers.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoNCmlmKHVuZm9sZChmb2xkKCR0ZXN0KSkgPT09ICR0ZXN0KSB7DQogICAgJHRlc3QgPSAnKjEyMzQ1Njc4OSoxMjM0NTY3ODkqMTIzNDU2Nzg5KjEyMzQ1Njc4OSoxMjM0NTY3ODkqMTIzNDU2Nzg5KjEyMzQ1Njc4OSoxMjM0NTY3ODkqMTIzNDU2Nzg5KjEyMzQ1Njc4OSoxMjM0NTY3ODkqMTIzNDU2Nzg5KjEyMzQ1Njc4OSoxMjM0NTY3ODkqMTIzNDU2Nzg5KjEyMzQ1Njc4OSc7DQogICAgZWNobyAncGFzcyEnOw0KfQ0KKi8NCg0KDQo/Pg0K]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/bennu/TODO.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[DQoqIFRha2UgYSBsb29rIGF0IGFsbCB0aG9zZSB0ZXh0IHZhbHVlcy4gQ29udHJvbCBjaGFycyBzaG91bGRuJ3QgYmUgYWxsb3dlZC4=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/vendor/select2/bower.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic2VsZWN0MiIsCiAgICAidmVyc2lvbiI6ICIzLjQuMyIsCiAgICAibWFpbiI6IFsic2VsZWN0Mi5qcyIsICJzZWxlY3QyLmNzcyIsICJzZWxlY3QyLnBuZyIsICJzZWxlY3QyeDIucG5nIiwgInNlbGVjdDItc3Bpbm5lci5naWYiXSwKICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgImpxdWVyeSI6ICI+PSAxLjcuMSIKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IDIwMTIgSWdvciBWYXluYmVyZwoKVmVyc2lvbjogQEB2ZXJAQCBUaW1lc3RhbXA6IEBAdGltZXN0YW1wQEAKClRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJBcGFjaGUgTGljZW5zZSIpIG9yIHRoZSBHTlUKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIExpY2Vuc2UiKS4gWW91IG1heSBjaG9vc2UgZWl0aGVyIGxpY2Vuc2UgdG8gZ292ZXJuIHlvdXIKdXNlIG9mIHRoaXMgc29mdHdhcmUgb25seSB1cG9uIHRoZSBjb25kaXRpb24gdGhhdCB5b3UgYWNjZXB0IGFsbCBvZiB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBBcGFjaGUKTGljZW5zZSBvciB0aGUgR1BMIExpY2Vuc2UuCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEFwYWNoZSBMaWNlbnNlIGFuZCB0aGUgR1BMIExpY2Vuc2UgYXQ6CgpodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAuaHRtbAoKVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UKb3IgdGhlIEdQTCBMaWNlc25zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBBcGFjaGUgTGljZW5zZSBhbmQgdGhlIEdQTCBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCnBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgYW5kIHRoZSBHUEwgTGljZW5zZS4=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[U2VsZWN0Mgo9PT09PT09CgpTZWxlY3QyIGlzIGEgalF1ZXJ5LWJhc2VkIHJlcGxhY2VtZW50IGZvciBzZWxlY3QgYm94ZXMuIEl0IHN1cHBvcnRzIHNlYXJjaGluZywgcmVtb3RlIGRhdGEgc2V0cywgYW5kIGluZmluaXRlIHNjcm9sbGluZyBvZiByZXN1bHRzLgoKVG8gZ2V0IHN0YXJ0ZWQsIGNoZWNrb3V0IGV4YW1wbGVzIGFuZCBkb2N1bWVudGF0aW9uIGF0IGh0dHA6Ly9pdmF5bmJlcmcuZ2l0aHViLmNvbS9zZWxlY3QyCgpVc2UgY2FzZXMKLS0tLS0tLS0tCgoqIEVuaGFuY2luZyBuYXRpdmUgc2VsZWN0cyB3aXRoIHNlYXJjaC4KKiBFbmhhbmNpbmcgbmF0aXZlIHNlbGVjdHMgd2l0aCBhIGJldHRlciBtdWx0aS1zZWxlY3QgaW50ZXJmYWNlLgoqIExvYWRpbmcgZGF0YSBmcm9tIEphdmFTY3JpcHQ6IGVhc2lseSBsb2FkIGl0ZW1zIHZpYSBhamF4IGFuZCBoYXZlIHRoZW0gc2VhcmNoYWJsZS4KKiBOZXN0aW5nIG9wdGdyb3VwczogbmF0aXZlIHNlbGVjdHMgb25seSBzdXBwb3J0IG9uZSBsZXZlbCBvZiBuZXN0ZWQuIFNlbGVjdDIgZG9lcyBub3QgaGF2ZSB0aGlzIHJlc3RyaWN0aW9uLgoqIFRhZ2dpbmc6IGFiaWxpdHkgdG8gYWRkIG5ldyBpdGVtcyBvbiB0aGUgZmx5LgoqIFdvcmtpbmcgd2l0aCBsYXJnZSwgcmVtb3RlIGRhdGFzZXRzOiBhYmlsaXR5IHRvIHBhcnRpYWxseSBsb2FkIGEgZGF0YXNldCBiYXNlZCBvbiB0aGUgc2VhcmNoIHRlcm0uCiogUGFnaW5nIG9mIGxhcmdlIGRhdGFzZXRzOiBlYXN5IHN1cHBvcnQgZm9yIGxvYWRpbmcgbW9yZSBwYWdlcyB3aGVuIHRoZSByZXN1bHRzIGFyZSBzY3JvbGxlZCB0byB0aGUgZW5kLgoqIFRlbXBsYXRpbmc6IHN1cHBvcnQgZm9yIGN1c3RvbSByZW5kZXJpbmcgb2YgcmVzdWx0cyBhbmQgc2VsZWN0aW9ucy4KCkJyb3dzZXIgY29tcGF0aWJpbGl0eQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KKiBJRSA4KwoqIENocm9tZSA4KwoqIEZpcmVmb3ggMTArCiogU2FmYXJpIDMrCiogT3BlcmEgMTAuNisKCkludGVncmF0aW9ucwotLS0tLS0tLS0tLS0KCiogW1dpY2tldC1TZWxlY3QyXShodHRwczovL2dpdGh1Yi5jb20vaXZheW5iZXJnL3dpY2tldC1zZWxlY3QyKSAoSmF2YSAvIFtBcGFjaGUgV2lja2V0XShodHRwOi8vd2lja2V0LmFwYWNoZS5vcmcpKQoqIFtzZWxlY3QyLXJhaWxzXShodHRwczovL2dpdGh1Yi5jb20vYXJnZXJpbS9zZWxlY3QyLXJhaWxzKSAoUnVieSBvbiBSYWlscykKKiBbQW5ndWxhclVJXShodHRwOi8vYW5ndWxhci11aS5naXRodWIuY29tLyNkaXJlY3RpdmVzLXNlbGVjdDIpIChbQW5ndWxhckpTXShhbmd1bGFyanMub3JnKSkKKiBbRGphbmdvXShodHRwczovL2dpdGh1Yi5jb20vYXBwbGVncmV3L2RqYW5nby1zZWxlY3QyKQoqIFtTeW1mb255XShodHRwczovL2dpdGh1Yi5jb20vMTlHZXJoYXJkODUvc2ZTZWxlY3QyV2lkZ2V0c1BsdWdpbikKKiBbQm9vdHN0cmFwXShodHRwczovL2dpdGh1Yi5jb20vdDBtL3NlbGVjdDItYm9vdHN0cmFwLWNzcykgKENTUyBza2luKQoqIFtZaWldKGh0dHBzOi8vZ2l0aHViLmNvbS90b255Ym9semFuL3lpaS1zZWxlY3QyKQoKSW50ZXJuYXRpb25hbGl6YXRpb24gKGkxOG4pCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKU2VsZWN0MiBzdXBwb3J0cyBtdWx0aXBsZSBsYW5ndWFnZXMgYnkgc2ltcGx5IGluY2x1ZGluZyB0aGUgcmlnaHQKbGFuZ3VhZ2UgSlMgZmlsZSAoYHNlbGVjdDJfbG9jYWxlX2l0LmpzYCwgYHNlbGVjdDJfbG9jYWxlX25sLmpzYCwgZXRjLikuCgpNaXNzaW5nIGEgbGFuZ3VhZ2U/IEp1c3QgY29weSBgc2VsZWN0Ml9sb2NhbGVfZW4uanMudGVtcGxhdGVgLCB0cmFuc2xhdGUKaXQsIGFuZCBtYWtlIGEgcHVsbCByZXF1ZXN0IGJhY2sgdG8gU2VsZWN0MiBoZXJlIG9uIEdpdEh1Yi4KCkJ1ZyB0cmFja2VyCi0tLS0tLS0tLS0tCgpIYXZlIGEgYnVnPyBQbGVhc2UgY3JlYXRlIGFuIGlzc3VlIGhlcmUgb24gR2l0SHViIQoKaHR0cHM6Ly9naXRodWIuY29tL2l2YXluYmVyZy9zZWxlY3QyL2lzc3VlcwoKTWFpbGluZyBsaXN0Ci0tLS0tLS0tLS0tLQoKSGF2ZSBhIHF1ZXN0aW9uPyBBc2sgb24gb3VyIG1haWxpbmcgbGlzdCEKCnNlbGVjdDJAZ29vZ2xlZ3JvdXBzLmNvbQoKaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9kL2ZvcnVtL3NlbGVjdDIKCgpDb3B5cmlnaHQgYW5kIGxpY2Vuc2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpDb3B5cmlnaHQgMjAxMiBJZ29yIFZheW5iZXJnCgpUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiQXBhY2hlIExpY2Vuc2UiKSBvciB0aGUgR05VCkdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyICh0aGUgIkdQTCBMaWNlbnNlIikuIFlvdSBtYXkgY2hvb3NlIGVpdGhlciBsaWNlbnNlIHRvIGdvdmVybiB5b3VyCnVzZSBvZiB0aGlzIHNvZnR3YXJlIG9ubHkgdXBvbiB0aGUgY29uZGl0aW9uIHRoYXQgeW91IGFjY2VwdCBhbGwgb2YgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGUgQXBhY2hlCkxpY2Vuc2Ugb3IgdGhlIEdQTCBMaWNlbnNlLgoKWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBBcGFjaGUgTGljZW5zZSBhbmQgdGhlIEdQTCBMaWNlbnNlIGluIHRoZSBMSUNFTlNFIGZpbGUsIG9yIGF0OgoKaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCmh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLmh0bWwKClVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlCm9yIHRoZSBHUEwgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwKZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBBcGFjaGUgTGljZW5zZSBhbmQgdGhlIEdQTCBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCnBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgYW5kIHRoZSBHUEwgTGljZW5zZS4K]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/release.sh</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvYmluL2Jhc2gKc2V0IC1lCgplY2hvIC1uICJFbnRlciB0aGUgdmVyc2lvbiBmb3IgdGhpcyByZWxlYXNlOiAiCgpyZWFkIHZlcgoKaWYgWyAhICR2ZXIgXTsgdGhlbiAKCWVjaG8gIkludmFsaWQgdmVyc2lvbi4iCglleGl0CmZpCgpuYW1lPSJzZWxlY3QyIgpqcz0iJG5hbWUuanMiCm1pbmk9IiRuYW1lLm1pbi5qcyIKY3NzPSIkbmFtZS5jc3MiCnJlbGVhc2U9IiRuYW1lLSR2ZXIiCnRhZz0iJHZlciIKYnJhbmNoPSJidWlsZC0kdmVyIgpjdXJicmFuY2g9YGdpdCBicmFuY2ggfCBncmVwICIqIiB8IHNlZCAicy8qIC8vImAKdGltZXN0YW1wPSQoZGF0ZSkKdG9rZW5zPSJzL0BAdmVyQEAvJHZlci9nO3MvXEBAdGltZXN0YW1wQEAvJHRpbWVzdGFtcC9nIgpyZW1vdGU9ImdpdGh1YiIKCmVjaG8gIlVwZGF0aW5nIFZlcnNpb24gSWRlbnRpZmllcnMiCgpzZWQgLUUgLWUgInMvXCJ2ZXJzaW9uXCI6IFwiKFswLTlcLl0rKVwiLC9cInZlcnNpb25cIjogXCIkdmVyXCIsL2ciIC1pICIiIGJvd2VyLmpzb24gc2VsZWN0Mi5qcXVlcnkuanNvbgpnaXQgYWRkIGJvd2VyLmpzb24KZ2l0IGFkZCBzZWxlY3QyLmpxdWVyeS5qc29uCmdpdCBjb21taXQgLW0gIm1vZGlmaWVkIHZlcnNpb24gaWRlbnRpZmllcnMgaW4gZGVzY3JpcHRvcnMgZm9yIHJlbGVhc2UgJHZlciIKZ2l0IHB1c2gKIApnaXQgYnJhbmNoICIkYnJhbmNoIgpnaXQgY2hlY2tvdXQgIiRicmFuY2giCgplY2hvICJUb2tlbml6aW5nLi4uIgoKZmluZCAuIC1uYW1lICIkanMiIHwgeGFyZ3MgLUl7fSBzZWQgLWUgIiR0b2tlbnMiIC1pICIiIHt9IApmaW5kIC4gLW5hbWUgIiRjc3MiIHwgeGFyZ3MgLUl7fSBzZWQgLWUgIiR0b2tlbnMiIC1pICIiIHt9CnNlZCAtZSAicy9sYXRlc3QvJHZlci9nIiAtaSAiIiBib3dlci5qc29uCgpnaXQgYWRkICIkanMiCmdpdCBhZGQgIiRjc3MiCgplY2hvICJNaW5pZnlpbmcuLi4iCgplY2hvICIvKiIgPiAiJG1pbmkiCmNhdCBMSUNFTlNFIHwgc2VkICIkdG9rZW5zIiA+PiAiJG1pbmkiCmVjaG8gIiovIiA+PiAiJG1pbmkiCgpjdXJsIC1zIFwKCS0tZGF0YS11cmxlbmNvZGUgImpzX2NvZGVAJGpzIiBcCglodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL3VnbGlmeWpzIFwKCT4+ICIkbWluaSIKCmdpdCBhZGQgIiRtaW5pIgoJCmdpdCBjb21taXQgLW0gInJlbGVhc2UgJHZlciIKCmVjaG8gIlRhZ2dpbmcuLi4iCmdpdCB0YWcgLWEgIiR0YWciIC1tICJ0YWdnZWQgdmVyc2lvbiAkdmVyIgpnaXQgcHVzaCAiJHJlbW90ZSIgLS10YWdzCgplY2hvICJDbGVhbmluZyBVcC4uLiIKCmdpdCBjaGVja291dCAiJGN1cmJyYW5jaCIKZ2l0IGJyYW5jaCAtRCAiJGJyYW5jaCIKCmVjaG8gIkRvbmUiCg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2-bootstrap.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmZvcm0tY29udHJvbCAuc2VsZWN0Mi1jaG9pY2UgewogICAgYm9yZGVyOiAwOwogICAgYm9yZGVyLXJhZGl1czogMnB4Owp9CgouZm9ybS1jb250cm9sIC5zZWxlY3QyLWNob2ljZSAuc2VsZWN0Mi1hcnJvdyB7CiAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsgICAKfQoKLmZvcm0tY29udHJvbC5zZWxlY3QyLWNvbnRhaW5lciB7CiAgICBoZWlnaHQ6IGF1dG8gIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDBweDsKfQoKLmZvcm0tY29udHJvbC5zZWxlY3QyLWNvbnRhaW5lci5zZWxlY3QyLWRyb3Bkb3duLW9wZW4gewogICAgYm9yZGVyLWNvbG9yOiAjNTg5N0ZCOwogICAgYm9yZGVyLXJhZGl1czogM3B4IDNweCAwIDA7Cn0KCi5mb3JtLWNvbnRyb2wgLnNlbGVjdDItY29udGFpbmVyLnNlbGVjdDItZHJvcGRvd24tb3BlbiAuc2VsZWN0Mi1jaG9pY2VzIHsKICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwp9CgouZm9ybS1jb250cm9sLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZXMgewogICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7Cn0KCi5jb250cm9sLWdyb3VwLndhcm5pbmcgLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZSwKLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlcywKLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuc2VsZWN0Mi1jb250YWluZXItYWN0aXZlIC5zZWxlY3QyLWNob2ljZSwKLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuc2VsZWN0Mi1jb250YWluZXItYWN0aXZlIC5zZWxlY3QyLWNob2ljZXMsCi5jb250cm9sLWdyb3VwLndhcm5pbmcgLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlLAouY29udHJvbC1ncm91cC53YXJuaW5nIC5zZWxlY3QyLWRyb3Bkb3duLW9wZW4uc2VsZWN0Mi1kcm9wLWFib3ZlIC5zZWxlY3QyLWNob2ljZXMsCi5jb250cm9sLWdyb3VwLndhcm5pbmcgLnNlbGVjdDItY29udGFpbmVyLW11bHRpLnNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSAuc2VsZWN0Mi1jaG9pY2VzIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNDMDk4NTMgIWltcG9ydGFudDsKfQoKLmNvbnRyb2wtZ3JvdXAud2FybmluZyAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlIGRpdiB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNDMDk4NTMgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNGQ0Y4RTMgIWltcG9ydGFudDsKfQoKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZSwKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZXMsCi5jb250cm9sLWdyb3VwLmVycm9yIC5zZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUgLnNlbGVjdDItY2hvaWNlLAouY29udHJvbC1ncm91cC5lcnJvciAuc2VsZWN0Mi1jb250YWluZXItYWN0aXZlIC5zZWxlY3QyLWNob2ljZXMsCi5jb250cm9sLWdyb3VwLmVycm9yIC5zZWxlY3QyLWRyb3Bkb3duLW9wZW4uc2VsZWN0Mi1kcm9wLWFib3ZlIC5zZWxlY3QyLWNob2ljZSwKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlcywKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnNlbGVjdDItY29udGFpbmVyLW11bHRpLnNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSAuc2VsZWN0Mi1jaG9pY2VzIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNCOTRBNDggIWltcG9ydGFudDsKfQoKLmNvbnRyb2wtZ3JvdXAuZXJyb3IgLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZSBkaXYgewogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjQjk0QTQ4ICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiAjRjJERURFICFpbXBvcnRhbnQ7Cn0KCi5jb250cm9sLWdyb3VwLmluZm8gLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZSwKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlcywKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuc2VsZWN0Mi1jb250YWluZXItYWN0aXZlIC5zZWxlY3QyLWNob2ljZSwKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuc2VsZWN0Mi1jb250YWluZXItYWN0aXZlIC5zZWxlY3QyLWNob2ljZXMsCi5jb250cm9sLWdyb3VwLmluZm8gLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlLAouY29udHJvbC1ncm91cC5pbmZvIC5zZWxlY3QyLWRyb3Bkb3duLW9wZW4uc2VsZWN0Mi1kcm9wLWFib3ZlIC5zZWxlY3QyLWNob2ljZXMsCi5jb250cm9sLWdyb3VwLmluZm8gLnNlbGVjdDItY29udGFpbmVyLW11bHRpLnNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSAuc2VsZWN0Mi1jaG9pY2VzIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICMzQTg3QUQgIWltcG9ydGFudDsKfQoKLmNvbnRyb2wtZ3JvdXAuaW5mbyAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlIGRpdiB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMzQTg3QUQgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNEOUVERjcgIWltcG9ydGFudDsKfQoKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlLAouY29udHJvbC1ncm91cC5zdWNjZXNzIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1jaG9pY2VzLAouY29udHJvbC1ncm91cC5zdWNjZXNzIC5zZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUgLnNlbGVjdDItY2hvaWNlLAouY29udHJvbC1ncm91cC5zdWNjZXNzIC5zZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUgLnNlbGVjdDItY2hvaWNlcywKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuc2VsZWN0Mi1kcm9wZG93bi1vcGVuLnNlbGVjdDItZHJvcC1hYm92ZSAuc2VsZWN0Mi1jaG9pY2UsCi5jb250cm9sLWdyb3VwLnN1Y2Nlc3MgLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlcywKLmNvbnRyb2wtZ3JvdXAuc3VjY2VzcyAuc2VsZWN0Mi1jb250YWluZXItbXVsdGkuc2VsZWN0Mi1jb250YWluZXItYWN0aXZlIC5zZWxlY3QyLWNob2ljZXMgewogICAgYm9yZGVyOiAxcHggc29saWQgIzQ2ODg0NyAhaW1wb3J0YW50Owp9CgouY29udHJvbC1ncm91cC5zdWNjZXNzIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1jaG9pY2UgZGl2IHsKICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgIzQ2ODg0NyAhaW1wb3J0YW50OwogICAgYmFja2dyb3VuZDogI0RGRjBEOCAhaW1wb3J0YW50Owp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2-spinner.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPQAAP///wAAAPDw8IqKiuDg4EZGRnp6egAAAFhYWCQkJKysrL6+vhQUFJycnAQEBDY2NmhoaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAAFdyAgAgIJIeWoAkRCCMdBkKtIHIngyMKsErPBYbADpkSCwhDmQCBethRB6Vj4kFCkQPG4IlWDgrNRIwnO4UKBXDufzQvDMaoSDBgFb886MiQadgNABAokfCwzBA8LCg0Egl8jAggGAA1kBIA1BAYzlyILczULC2UhACH5BAkKAAAALAAAAAAQABAAAAV2ICACAmlAZTmOREEIyUEQjLKKxPHADhEvqxlgcGgkGI1DYSVAIAWMx+lwSKkICJ0QsHi9RgKBwnVTiRQQgwF4I4UFDQQEwi6/3YSGWRRmjhEETAJfIgMFCnAKM0KDV4EEEAQLiF18TAYNXDaSe3x6mjidN1s3IQAh+QQJCgAAACwAAAAAEAAQAAAFeCAgAgLZDGU5jgRECEUiCI+yioSDwDJyLKsXoHFQxBSHAoAAFBhqtMJg8DgQBgfrEsJAEAg4YhZIEiwgKtHiMBgtpg3wbUZXGO7kOb1MUKRFMysCChAoggJCIg0GC2aNe4gqQldfL4l/Ag1AXySJgn5LcoE3QXI3IQAh+QQJCgAAACwAAAAAEAAQAAAFdiAgAgLZNGU5joQhCEjxIssqEo8bC9BRjy9Ag7GILQ4QEoE0gBAEBcOpcBA0DoxSK/e8LRIHn+i1cK0IyKdg0VAoljYIg+GgnRrwVS/8IAkICyosBIQpBAMoKy9dImxPhS+GKkFrkX+TigtLlIyKXUF+NjagNiEAIfkECQoAAAAsAAAAABAAEAAABWwgIAICaRhlOY4EIgjH8R7LKhKHGwsMvb4AAy3WODBIBBKCsYA9TjuhDNDKEVSERezQEL0WrhXucRUQGuik7bFlngzqVW9LMl9XWvLdjFaJtDFqZ1cEZUB0dUgvL3dgP4WJZn4jkomWNpSTIyEAIfkECQoAAAAsAAAAABAAEAAABX4gIAICuSxlOY6CIgiD8RrEKgqGOwxwUrMlAoSwIzAGpJpgoSDAGifDY5kopBYDlEpAQBwevxfBtRIUGi8xwWkDNBCIwmC9Vq0aiQQDQuK+VgQPDXV9hCJjBwcFYU5pLwwHXQcMKSmNLQcIAExlbH8JBwttaX0ABAcNbWVbKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICSRBlOY7CIghN8zbEKsKoIjdFzZaEgUBHKChMJtRwcWpAWoWnifm6ESAMhO8lQK0EEAV3rFopIBCEcGwDKAqPh4HUrY4ICHH1dSoTFgcHUiZjBhAJB2AHDykpKAwHAwdzf19KkASIPl9cDgcnDkdtNwiMJCshACH5BAkKAAAALAAAAAAQABAAAAV3ICACAkkQZTmOAiosiyAoxCq+KPxCNVsSMRgBsiClWrLTSWFoIQZHl6pleBh6suxKMIhlvzbAwkBWfFWrBQTxNLq2RG2yhSUkDs2b63AYDAoJXAcFRwADeAkJDX0AQCsEfAQMDAIPBz0rCgcxky0JRWE1AmwpKyEAIfkECQoAAAAsAAAAABAAEAAABXkgIAICKZzkqJ4nQZxLqZKv4NqNLKK2/Q4Ek4lFXChsg5ypJjs1II3gEDUSRInEGYAw6B6zM4JhrDAtEosVkLUtHA7RHaHAGJQEjsODcEg0FBAFVgkQJQ1pAwcDDw8KcFtSInwJAowCCA6RIwqZAgkPNgVpWndjdyohACH5BAkKAAAALAAAAAAQABAAAAV5ICACAimc5KieLEuUKvm2xAKLqDCfC2GaO9eL0LABWTiBYmA06W6kHgvCqEJiAIJiu3gcvgUsscHUERm+kaCxyxa+zRPk0SgJEgfIvbAdIAQLCAYlCj4DBw0IBQsMCjIqBAcPAooCBg9pKgsJLwUFOhCZKyQDA3YqIQAh+QQJCgAAACwAAAAAEAAQAAAFdSAgAgIpnOSonmxbqiThCrJKEHFbo8JxDDOZYFFb+A41E4H4OhkOipXwBElYITDAckFEOBgMQ3arkMkUBdxIUGZpEb7kaQBRlASPg0FQQHAbEEMGDSVEAA1QBhAED1E0NgwFAooCDWljaQIQCE5qMHcNhCkjIQAh+QQJCgAAACwAAAAAEAAQAAAFeSAgAgIpnOSoLgxxvqgKLEcCC65KEAByKK8cSpA4DAiHQ/DkKhGKh4ZCtCyZGo6F6iYYPAqFgYy02xkSaLEMV34tELyRYNEsCQyHlvWkGCzsPgMCEAY7Cg04Uk48LAsDhRA8MVQPEF0GAgqYYwSRlycNcWskCkApIyEAOwAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKVmVyc2lvbjogQEB2ZXJAQCBUaW1lc3RhbXA6IEBAdGltZXN0YW1wQEAKKi8KLnNlbGVjdDItY29udGFpbmVyIHsKICAgIG1hcmdpbjogMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIC8qIGlubGluZS1ibG9jayBmb3IgaWU3ICovCiAgICB6b29tOiAxOwogICAgKmRpc3BsYXk6IGlubGluZTsKICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cn0KCi5zZWxlY3QyLWNvbnRhaW5lciwKLnNlbGVjdDItZHJvcCwKLnNlbGVjdDItc2VhcmNoLAouc2VsZWN0Mi1zZWFyY2ggaW5wdXQgewogIC8qCiAgICBGb3JjZSBib3JkZXItYm94IHNvIHRoYXQgJSB3aWR0aHMgZml0IHRoZSBwYXJlbnQKICAgIGNvbnRhaW5lciB3aXRob3V0IG92ZXJsYXAgYmVjYXVzZSBvZiBtYXJnaW4vcGFkZGluZy4KCiAgICBNb3JlIEluZm8gOiBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2Nzcy9ib3guaHRtbAogICovCiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OyAvKiB3ZWJraXQgKi8KICAgICAtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIGZpcmVmb3ggKi8KICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7IC8qIGNzczMgKi8KfQoKLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZSB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIGhlaWdodDogMjZweDsKICAgIHBhZGRpbmc6IDAgMCAwIDhweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CgogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBsaW5lLWhlaWdodDogMjZweDsKICAgIGNvbG9yOiAjNDQ0OwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwoKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKCiAgICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94OwoKICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgY29sb3Itc3RvcCgwLCAjZWVlKSwgY29sb3Itc3RvcCgwLjUsICNmZmYpKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNlZWUgMCUsICNmZmYgNTAlKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNlZWUgMCUsICNmZmYgNTAlKTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHIgPSAnI2ZmZmZmZicsIGVuZENvbG9yc3RyID0gJyNlZWVlZWUnLCBHcmFkaWVudFR5cGUgPSAwKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNmZmYgMCUsICNlZWUgNTAlKTsKfQoKLnNlbGVjdDItY29udGFpbmVyLnNlbGVjdDItZHJvcC1hYm92ZSAuc2VsZWN0Mi1jaG9pY2UgewogICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2FhYTsKCiAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDsKCiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDAsICNlZWUpLCBjb2xvci1zdG9wKDAuOSwgI2ZmZikpOwogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgI2VlZSAwJSwgI2ZmZiA5MCUpOwogICAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQoY2VudGVyIGJvdHRvbSwgI2VlZSAwJSwgI2ZmZiA5MCUpOwogICAgZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuZ3JhZGllbnQoc3RhcnRDb2xvcnN0cj0nI2ZmZmZmZicsIGVuZENvbG9yc3RyPScjZWVlZWVlJywgR3JhZGllbnRUeXBlPTApOwogICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZSAwJSwgI2ZmZiA5MCUpOwp9Cgouc2VsZWN0Mi1jb250YWluZXIuc2VsZWN0Mi1hbGxvd2NsZWFyIC5zZWxlY3QyLWNob2ljZSAuc2VsZWN0Mi1jaG9zZW4gewogICAgbWFyZ2luLXJpZ2h0OiA0MnB4Owp9Cgouc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlID4gLnNlbGVjdDItY2hvc2VuIHsKICAgIG1hcmdpbi1yaWdodDogMjZweDsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKCiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwoKICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwp9Cgouc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlIGFiYnIgewogICAgZGlzcGxheTogbm9uZTsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDI0cHg7CiAgICB0b3A6IDhweDsKCiAgICBmb250LXNpemU6IDFweDsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKCiAgICBib3JkZXI6IDA7CiAgICBiYWNrZ3JvdW5kOiB1cmwoJ3NlbGVjdDIucG5nJykgcmlnaHQgdG9wIG5vLXJlcGVhdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIG91dGxpbmU6IDA7Cn0KCi5zZWxlY3QyLWNvbnRhaW5lci5zZWxlY3QyLWFsbG93Y2xlYXIgLnNlbGVjdDItY2hvaWNlIGFiYnIgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwp9Cgouc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlIGFiYnI6aG92ZXIgewogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogcmlnaHQgLTExcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7Cn0KCi5zZWxlY3QyLWRyb3AtbWFzayB7CiAgICBib3JkZXI6IDA7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgcG9zaXRpb246IGZpeGVkOwogICAgbGVmdDogMDsKICAgIHRvcDogMDsKICAgIG1pbi1oZWlnaHQ6IDEwMCU7CiAgICBtaW4td2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IGF1dG87CiAgICB3aWR0aDogYXV0bzsKICAgIG9wYWNpdHk6IDA7CiAgICB6LWluZGV4OiA5OTk4OwogICAgLyogc3R5bGVzIHJlcXVpcmVkIGZvciBJRSB0byB3b3JrICovCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgZmlsdGVyOiBhbHBoYShvcGFjaXR5PTApOwp9Cgouc2VsZWN0Mi1kcm9wIHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWFyZ2luLXRvcDogLTFweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHotaW5kZXg6IDk5OTk7CiAgICB0b3A6IDEwMCU7CgogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGNvbG9yOiAjMDAwOwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICAgIGJvcmRlci10b3A6IDA7CgogICAgYm9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7CgogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDRweCA1cHggcmdiYSgwLCAwLCAwLCAuMTUpOwogICAgICAgICAgICBib3gtc2hhZG93OiAwIDRweCA1cHggcmdiYSgwLCAwLCAwLCAuMTUpOwp9Cgouc2VsZWN0Mi1kcm9wLWF1dG8td2lkdGggewogICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhYWE7CiAgICB3aWR0aDogYXV0bzsKfQoKLnNlbGVjdDItZHJvcC1hdXRvLXdpZHRoIC5zZWxlY3QyLXNlYXJjaCB7CiAgICBwYWRkaW5nLXRvcDogNHB4Owp9Cgouc2VsZWN0Mi1kcm9wLnNlbGVjdDItZHJvcC1hYm92ZSB7CiAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2FhYTsKICAgIGJvcmRlci1ib3R0b206IDA7CgogICAgYm9yZGVyLXJhZGl1czogNHB4IDRweCAwIDA7CgogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIC00cHggNXB4IHJnYmEoMCwgMCwgMCwgLjE1KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAtNHB4IDVweCByZ2JhKDAsIDAsIDAsIC4xNSk7Cn0KCi5zZWxlY3QyLWRyb3AtYWN0aXZlIHsKICAgIGJvcmRlcjogMXB4IHNvbGlkICM1ODk3ZmI7CiAgICBib3JkZXItdG9wOiBub25lOwp9Cgouc2VsZWN0Mi1kcm9wLnNlbGVjdDItZHJvcC1hYm92ZS5zZWxlY3QyLWRyb3AtYWN0aXZlIHsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjNTg5N2ZiOwp9Cgouc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlIC5zZWxlY3QyLWFycm93IHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHdpZHRoOiAxOHB4OwogICAgaGVpZ2h0OiAxMDAlOwogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgcmlnaHQ6IDA7CiAgICB0b3A6IDA7CgogICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYWFhOwogICAgYm9yZGVyLXJhZGl1czogMCA0cHggNHB4IDA7CgogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKCiAgICBiYWNrZ3JvdW5kOiAjY2NjOwogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgYm90dG9tLCBsZWZ0IHRvcCwgY29sb3Itc3RvcCgwLCAjY2NjKSwgY29sb3Itc3RvcCgwLjYsICNlZWUpKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNjY2MgMCUsICNlZWUgNjAlKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNjY2MgMCUsICNlZWUgNjAlKTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHIgPSAnI2VlZWVlZScsIGVuZENvbG9yc3RyID0gJyNjY2NjY2MnLCBHcmFkaWVudFR5cGUgPSAwKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0b3AsICNjY2MgMCUsICNlZWUgNjAlKTsKfQoKLnNlbGVjdDItY29udGFpbmVyIC5zZWxlY3QyLWNob2ljZSAuc2VsZWN0Mi1hcnJvdyBiIHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiB1cmwoJ3NlbGVjdDIucG5nJykgbm8tcmVwZWF0IDAgMXB4Owp9Cgouc2VsZWN0Mi1zZWFyY2ggewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgd2lkdGg6IDEwMCU7CiAgICBtaW4taGVpZ2h0OiAyNnB4OwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZy1sZWZ0OiA0cHg7CiAgICBwYWRkaW5nLXJpZ2h0OiA0cHg7CgogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgei1pbmRleDogMTAwMDA7CgogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnNlbGVjdDItc2VhcmNoIGlucHV0IHsKICAgIHdpZHRoOiAxMDAlOwogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBtaW4taGVpZ2h0OiAyNnB4OwogICAgcGFkZGluZzogNHB4IDIwcHggNHB4IDVweDsKICAgIG1hcmdpbjogMDsKCiAgICBvdXRsaW5lOiAwOwogICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICBmb250LXNpemU6IDFlbTsKCiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwogICAgYm9yZGVyLXJhZGl1czogMDsKCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CgogICAgYmFja2dyb3VuZDogI2ZmZiB1cmwoJ3NlbGVjdDIucG5nJykgbm8tcmVwZWF0IDEwMCUgLTIycHg7CiAgICBiYWNrZ3JvdW5kOiB1cmwoJ3NlbGVjdDIucG5nJykgbm8tcmVwZWF0IDEwMCUgLTIycHgsIC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IGJvdHRvbSwgbGVmdCB0b3AsIGNvbG9yLXN0b3AoMC44NSwgI2ZmZiksIGNvbG9yLXN0b3AoMC45OSwgI2VlZSkpOwogICAgYmFja2dyb3VuZDogdXJsKCdzZWxlY3QyLnBuZycpIG5vLXJlcGVhdCAxMDAlIC0yMnB4LCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZmZmIDg1JSwgI2VlZSA5OSUpOwogICAgYmFja2dyb3VuZDogdXJsKCdzZWxlY3QyLnBuZycpIG5vLXJlcGVhdCAxMDAlIC0yMnB4LCAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZmZmIDg1JSwgI2VlZSA5OSUpOwogICAgYmFja2dyb3VuZDogdXJsKCdzZWxlY3QyLnBuZycpIG5vLXJlcGVhdCAxMDAlIC0yMnB4LCBsaW5lYXItZ3JhZGllbnQodG9wLCAjZmZmIDg1JSwgI2VlZSA5OSUpOwp9Cgouc2VsZWN0Mi1kcm9wLnNlbGVjdDItZHJvcC1hYm92ZSAuc2VsZWN0Mi1zZWFyY2ggaW5wdXQgewogICAgbWFyZ2luLXRvcDogNHB4Owp9Cgouc2VsZWN0Mi1zZWFyY2ggaW5wdXQuc2VsZWN0Mi1hY3RpdmUgewogICAgYmFja2dyb3VuZDogI2ZmZiB1cmwoJ3NlbGVjdDItc3Bpbm5lci5naWYnKSBuby1yZXBlYXQgMTAwJTsKICAgIGJhY2tncm91bmQ6IHVybCgnc2VsZWN0Mi1zcGlubmVyLmdpZicpIG5vLXJlcGVhdCAxMDAlLCAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgbGVmdCBib3R0b20sIGxlZnQgdG9wLCBjb2xvci1zdG9wKDAuODUsICNmZmYpLCBjb2xvci1zdG9wKDAuOTksICNlZWUpKTsKICAgIGJhY2tncm91bmQ6IHVybCgnc2VsZWN0Mi1zcGlubmVyLmdpZicpIG5vLXJlcGVhdCAxMDAlLCAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZmZmIDg1JSwgI2VlZSA5OSUpOwogICAgYmFja2dyb3VuZDogdXJsKCdzZWxlY3QyLXNwaW5uZXIuZ2lmJykgbm8tcmVwZWF0IDEwMCUsIC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciBib3R0b20sICNmZmYgODUlLCAjZWVlIDk5JSk7CiAgICBiYWNrZ3JvdW5kOiB1cmwoJ3NlbGVjdDItc3Bpbm5lci5naWYnKSBuby1yZXBlYXQgMTAwJSwgbGluZWFyLWdyYWRpZW50KHRvcCwgI2ZmZiA4NSUsICNlZWUgOTklKTsKfQoKLnNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSAuc2VsZWN0Mi1jaG9pY2UsCi5zZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUgLnNlbGVjdDItY2hvaWNlcyB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjNTg5N2ZiOwogICAgb3V0bGluZTogbm9uZTsKCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAuMyk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAuMyk7Cn0KCi5zZWxlY3QyLWRyb3Bkb3duLW9wZW4gLnNlbGVjdDItY2hvaWNlIHsKICAgIGJvcmRlci1ib3R0b20tY29sb3I6IHRyYW5zcGFyZW50OwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDFweCAwICNmZmYgaW5zZXQ7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDAgI2ZmZiBpbnNldDsKCiAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7CgogICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCBsZWZ0IGJvdHRvbSwgbGVmdCB0b3AsIGNvbG9yLXN0b3AoMCwgI2ZmZiksIGNvbG9yLXN0b3AoMC41LCAjZWVlKSk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZmZmIDAlLCAjZWVlIDUwJSk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChjZW50ZXIgYm90dG9tLCAjZmZmIDAlLCAjZWVlIDUwJSk7CiAgICBmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5ncmFkaWVudChzdGFydENvbG9yc3RyPScjZWVlZWVlJywgZW5kQ29sb3JzdHI9JyNmZmZmZmYnLCBHcmFkaWVudFR5cGU9MCk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZmZmIDAlLCAjZWVlIDUwJSk7Cn0KCi5zZWxlY3QyLWRyb3Bkb3duLW9wZW4uc2VsZWN0Mi1kcm9wLWFib3ZlIC5zZWxlY3QyLWNob2ljZSwKLnNlbGVjdDItZHJvcGRvd24tb3Blbi5zZWxlY3QyLWRyb3AtYWJvdmUgLnNlbGVjdDItY2hvaWNlcyB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjNTg5N2ZiOwogICAgYm9yZGVyLXRvcC1jb2xvcjogdHJhbnNwYXJlbnQ7CgogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIGxlZnQgdG9wLCBsZWZ0IGJvdHRvbSwgY29sb3Itc3RvcCgwLCAjZmZmKSwgY29sb3Itc3RvcCgwLjUsICNlZWUpKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGNlbnRlciB0b3AsICNmZmYgMCUsICNlZWUgNTAlKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC1tb3otbGluZWFyLWdyYWRpZW50KGNlbnRlciB0b3AsICNmZmYgMCUsICNlZWUgNTAlKTsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNlZWVlZWUnLCBlbmRDb2xvcnN0cj0nI2ZmZmZmZicsIEdyYWRpZW50VHlwZT0wKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChib3R0b20sICNmZmYgMCUsICNlZWUgNTAlKTsKfQoKLnNlbGVjdDItZHJvcGRvd24tb3BlbiAuc2VsZWN0Mi1jaG9pY2UgLnNlbGVjdDItYXJyb3cgewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGZpbHRlcjogbm9uZTsKfQouc2VsZWN0Mi1kcm9wZG93bi1vcGVuIC5zZWxlY3QyLWNob2ljZSAuc2VsZWN0Mi1hcnJvdyBiIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xOHB4IDFweDsKfQoKLyogcmVzdWx0cyAqLwouc2VsZWN0Mi1yZXN1bHRzIHsKICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgcGFkZGluZzogMCAwIDAgNHB4OwogICAgbWFyZ2luOiA0cHggNHB4IDRweCAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgb3ZlcmZsb3cteTogYXV0bzsKICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKTsKfQoKLnNlbGVjdDItcmVzdWx0cyB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZy1sZWZ0OiAwOwp9Cgouc2VsZWN0Mi1yZXN1bHRzIHVsLnNlbGVjdDItcmVzdWx0LXN1YiA+IGxpIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7IHBhZGRpbmctbGVmdDogMjBweCB9Ci5zZWxlY3QyLXJlc3VsdHMgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiA+IGxpIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7IHBhZGRpbmctbGVmdDogNDBweCB9Ci5zZWxlY3QyLXJlc3VsdHMgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgPiBsaSAuc2VsZWN0Mi1yZXN1bHQtbGFiZWwgeyBwYWRkaW5nLWxlZnQ6IDYwcHggfQouc2VsZWN0Mi1yZXN1bHRzIHVsLnNlbGVjdDItcmVzdWx0LXN1YiB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiA+IGxpIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7IHBhZGRpbmctbGVmdDogODBweCB9Ci5zZWxlY3QyLXJlc3VsdHMgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiA+IGxpIC5zZWxlY3QyLXJlc3VsdC1sYWJlbCB7IHBhZGRpbmctbGVmdDogMTAwcHggfQouc2VsZWN0Mi1yZXN1bHRzIHVsLnNlbGVjdDItcmVzdWx0LXN1YiB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViID4gbGkgLnNlbGVjdDItcmVzdWx0LWxhYmVsIHsgcGFkZGluZy1sZWZ0OiAxMTBweCB9Ci5zZWxlY3QyLXJlc3VsdHMgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViIHVsLnNlbGVjdDItcmVzdWx0LXN1YiB1bC5zZWxlY3QyLXJlc3VsdC1zdWIgdWwuc2VsZWN0Mi1yZXN1bHQtc3ViID4gbGkgLnNlbGVjdDItcmVzdWx0LWxhYmVsIHsgcGFkZGluZy1sZWZ0OiAxMjBweCB9Cgouc2VsZWN0Mi1yZXN1bHRzIGxpIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBkaXNwbGF5OiBsaXN0LWl0ZW07CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwp9Cgouc2VsZWN0Mi1yZXN1bHRzIGxpLnNlbGVjdDItcmVzdWx0LXdpdGgtY2hpbGRyZW4gPiAuc2VsZWN0Mi1yZXN1bHQtbGFiZWwgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCi5zZWxlY3QyLXJlc3VsdHMgLnNlbGVjdDItcmVzdWx0LWxhYmVsIHsKICAgIHBhZGRpbmc6IDNweCA3cHggNHB4OwogICAgbWFyZ2luOiAwOwogICAgY3Vyc29yOiBwb2ludGVyOwoKICAgIG1pbi1oZWlnaHQ6IDFlbTsKCiAgICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7Cn0KCi5zZWxlY3QyLXJlc3VsdHMgLnNlbGVjdDItaGlnaGxpZ2h0ZWQgewogICAgYmFja2dyb3VuZDogIzM4NzVkNzsKICAgIGNvbG9yOiAjZmZmOwp9Cgouc2VsZWN0Mi1yZXN1bHRzIGxpIGVtIHsKICAgIGJhY2tncm91bmQ6ICNmZWZmZGU7CiAgICBmb250LXN0eWxlOiBub3JtYWw7Cn0KCi5zZWxlY3QyLXJlc3VsdHMgLnNlbGVjdDItaGlnaGxpZ2h0ZWQgZW0gewogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7Cn0KCi5zZWxlY3QyLXJlc3VsdHMgLnNlbGVjdDItaGlnaGxpZ2h0ZWQgdWwgewogICAgYmFja2dyb3VuZDogI2ZmZjsKICAgIGNvbG9yOiAjMDAwOwp9CgoKLnNlbGVjdDItcmVzdWx0cyAuc2VsZWN0Mi1uby1yZXN1bHRzLAouc2VsZWN0Mi1yZXN1bHRzIC5zZWxlY3QyLXNlYXJjaGluZywKLnNlbGVjdDItcmVzdWx0cyAuc2VsZWN0Mi1zZWxlY3Rpb24tbGltaXQgewogICAgYmFja2dyb3VuZDogI2Y0ZjRmNDsKICAgIGRpc3BsYXk6IGxpc3QtaXRlbTsKfQoKLyoKZGlzYWJsZWQgbG9vayBmb3IgZGlzYWJsZWQgY2hvaWNlcyBpbiB0aGUgcmVzdWx0cyBkcm9wZG93bgoqLwouc2VsZWN0Mi1yZXN1bHRzIC5zZWxlY3QyLWRpc2FibGVkLnNlbGVjdDItaGlnaGxpZ2h0ZWQgewogICAgY29sb3I6ICM2NjY7CiAgICBiYWNrZ3JvdW5kOiAjZjRmNGY0OwogICAgZGlzcGxheTogbGlzdC1pdGVtOwogICAgY3Vyc29yOiBkZWZhdWx0Owp9Ci5zZWxlY3QyLXJlc3VsdHMgLnNlbGVjdDItZGlzYWJsZWQgewogIGJhY2tncm91bmQ6ICNmNGY0ZjQ7CiAgZGlzcGxheTogbGlzdC1pdGVtOwogIGN1cnNvcjogZGVmYXVsdDsKfQoKLnNlbGVjdDItcmVzdWx0cyAuc2VsZWN0Mi1zZWxlY3RlZCB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgouc2VsZWN0Mi1tb3JlLXJlc3VsdHMuc2VsZWN0Mi1hY3RpdmUgewogICAgYmFja2dyb3VuZDogI2Y0ZjRmNCB1cmwoJ3NlbGVjdDItc3Bpbm5lci5naWYnKSBuby1yZXBlYXQgMTAwJTsKfQoKLnNlbGVjdDItbW9yZS1yZXN1bHRzIHsKICAgIGJhY2tncm91bmQ6ICNmNGY0ZjQ7CiAgICBkaXNwbGF5OiBsaXN0LWl0ZW07Cn0KCi8qIGRpc2FibGVkIHN0eWxlcyAqLwoKLnNlbGVjdDItY29udGFpbmVyLnNlbGVjdDItY29udGFpbmVyLWRpc2FibGVkIC5zZWxlY3QyLWNob2ljZSB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgICBjdXJzb3I6IGRlZmF1bHQ7Cn0KCi5zZWxlY3QyLWNvbnRhaW5lci5zZWxlY3QyLWNvbnRhaW5lci1kaXNhYmxlZCAuc2VsZWN0Mi1jaG9pY2UgLnNlbGVjdDItYXJyb3cgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDsKICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7CiAgICBib3JkZXItbGVmdDogMDsKfQoKLnNlbGVjdDItY29udGFpbmVyLnNlbGVjdDItY29udGFpbmVyLWRpc2FibGVkIC5zZWxlY3QyLWNob2ljZSBhYmJyIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KCgovKiBtdWx0aXNlbGVjdCAqLwoKLnNlbGVjdDItY29udGFpbmVyLW11bHRpIC5zZWxlY3QyLWNob2ljZXMgewogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDElOwogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKCiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWFhOwogICAgY3Vyc29yOiB0ZXh0OwogICAgb3ZlcmZsb3c6IGhpZGRlbjsKCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOwogICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAlIDAlLCAwJSAxMDAlLCBjb2xvci1zdG9wKDElLCAjZWVlKSwgY29sb3Itc3RvcCgxNSUsICNmZmYpKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2VlZSAxJSwgI2ZmZiAxNSUpOwogICAgYmFja2dyb3VuZC1pbWFnZTogLW1vei1saW5lYXItZ3JhZGllbnQodG9wLCAjZWVlIDElLCAjZmZmIDE1JSk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZWVlIDElLCAjZmZmIDE1JSk7Cn0KCi5zZWxlY3QyLWxvY2tlZCB7CiAgcGFkZGluZzogM3B4IDVweCAzcHggNXB4ICFpbXBvcnRhbnQ7Cn0KCi5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aSAuc2VsZWN0Mi1jaG9pY2VzIHsKICAgIG1pbi1oZWlnaHQ6IDI2cHg7Cn0KCi5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aS5zZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUgLnNlbGVjdDItY2hvaWNlcyB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjNTg5N2ZiOwogICAgb3V0bGluZTogbm9uZTsKCiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAuMyk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCA1cHggcmdiYSgwLCAwLCAwLCAuMyk7Cn0KLnNlbGVjdDItY29udGFpbmVyLW11bHRpIC5zZWxlY3QyLWNob2ljZXMgbGkgewogICAgZmxvYXQ6IGxlZnQ7CiAgICBsaXN0LXN0eWxlOiBub25lOwp9Ci5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aSAuc2VsZWN0Mi1jaG9pY2VzIC5zZWxlY3QyLXNlYXJjaC1maWVsZCB7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKfQoKLnNlbGVjdDItY29udGFpbmVyLW11bHRpIC5zZWxlY3QyLWNob2ljZXMgLnNlbGVjdDItc2VhcmNoLWZpZWxkIGlucHV0IHsKICAgIHBhZGRpbmc6IDVweDsKICAgIG1hcmdpbjogMXB4IDA7CgogICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICBmb250LXNpemU6IDEwMCU7CiAgICBjb2xvcjogIzY2NjsKICAgIG91dGxpbmU6IDA7CiAgICBib3JkZXI6IDA7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50Owp9Cgouc2VsZWN0Mi1jb250YWluZXItbXVsdGkgLnNlbGVjdDItY2hvaWNlcyAuc2VsZWN0Mi1zZWFyY2gtZmllbGQgaW5wdXQuc2VsZWN0Mi1hY3RpdmUgewogICAgYmFja2dyb3VuZDogI2ZmZiB1cmwoJ3NlbGVjdDItc3Bpbm5lci5naWYnKSBuby1yZXBlYXQgMTAwJSAhaW1wb3J0YW50Owp9Cgouc2VsZWN0Mi1kZWZhdWx0IHsKICAgIGNvbG9yOiAjOTk5ICFpbXBvcnRhbnQ7Cn0KCi5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aSAuc2VsZWN0Mi1jaG9pY2VzIC5zZWxlY3QyLXNlYXJjaC1jaG9pY2UgewogICAgcGFkZGluZzogM3B4IDVweCAzcHggMThweDsKICAgIG1hcmdpbjogM3B4IDAgM3B4IDVweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKCiAgICBsaW5lLWhlaWdodDogMTNweDsKICAgIGNvbG9yOiAjMzMzOwogICAgY3Vyc29yOiBkZWZhdWx0OwogICAgYm9yZGVyOiAxcHggc29saWQgI2FhYWFhYTsKCiAgICBib3JkZXItcmFkaXVzOiAzcHg7CgogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDAgMnB4ICNmZmYgaW5zZXQsIDAgMXB4IDAgcmdiYSgwLCAwLCAwLCAwLjA1KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDJweCAjZmZmIGluc2V0LCAwIDFweCAwIHJnYmEoMCwgMCwgMCwgMC4wNSk7CgogICAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDsKCiAgICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CgogICAgYmFja2dyb3VuZC1jb2xvcjogI2U0ZTRlNDsKICAgIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KHN0YXJ0Q29sb3JzdHI9JyNlZWVlZWUnLCBlbmRDb2xvcnN0cj0nI2Y0ZjRmNCcsIEdyYWRpZW50VHlwZT0wKTsKICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwJSAwJSwgMCUgMTAwJSwgY29sb3Itc3RvcCgyMCUsICNmNGY0ZjQpLCBjb2xvci1zdG9wKDUwJSwgI2YwZjBmMCksIGNvbG9yLXN0b3AoNTIlLCAjZThlOGU4KSwgY29sb3Itc3RvcCgxMDAlLCAjZWVlKSk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0b3AsICNmNGY0ZjQgMjAlLCAjZjBmMGYwIDUwJSwgI2U4ZThlOCA1MiUsICNlZWUgMTAwJSk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudCh0b3AsICNmNGY0ZjQgMjAlLCAjZjBmMGYwIDUwJSwgI2U4ZThlOCA1MiUsICNlZWUgMTAwJSk7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG9wLCAjZjRmNGY0IDIwJSwgI2YwZjBmMCA1MCUsICNlOGU4ZTggNTIlLCAjZWVlIDEwMCUpOwp9Ci5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aSAuc2VsZWN0Mi1jaG9pY2VzIC5zZWxlY3QyLXNlYXJjaC1jaG9pY2UgLnNlbGVjdDItY2hvc2VuIHsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQouc2VsZWN0Mi1jb250YWluZXItbXVsdGkgLnNlbGVjdDItY2hvaWNlcyAuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIHsKICAgIGJhY2tncm91bmQ6ICNkNGQ0ZDQ7Cn0KCi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2UgewogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTNweDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAzcHg7CiAgICB0b3A6IDRweDsKCiAgICBmb250LXNpemU6IDFweDsKICAgIG91dGxpbmU6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiB1cmwoJ3NlbGVjdDIucG5nJykgcmlnaHQgdG9wIG5vLXJlcGVhdDsKfQoKLnNlbGVjdDItY29udGFpbmVyLW11bHRpIC5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2UgewogICAgbGVmdDogM3B4Owp9Cgouc2VsZWN0Mi1jb250YWluZXItbXVsdGkgLnNlbGVjdDItY2hvaWNlcyAuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIC5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2U6aG92ZXIgewogIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IC0xMXB4Owp9Ci5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aSAuc2VsZWN0Mi1jaG9pY2VzIC5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtZm9jdXMgLnNlbGVjdDItc2VhcmNoLWNob2ljZS1jbG9zZSB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiByaWdodCAtMTFweDsKfQoKLyogZGlzYWJsZWQgc3R5bGVzICovCi5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aS5zZWxlY3QyLWNvbnRhaW5lci1kaXNhYmxlZCAuc2VsZWN0Mi1jaG9pY2VzIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwogICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgIGN1cnNvcjogZGVmYXVsdDsKfQoKLnNlbGVjdDItY29udGFpbmVyLW11bHRpLnNlbGVjdDItY29udGFpbmVyLWRpc2FibGVkIC5zZWxlY3QyLWNob2ljZXMgLnNlbGVjdDItc2VhcmNoLWNob2ljZSB7CiAgICBwYWRkaW5nOiAzcHggNXB4IDNweCA1cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7Cn0KCi5zZWxlY3QyLWNvbnRhaW5lci1tdWx0aS5zZWxlY3QyLWNvbnRhaW5lci1kaXNhYmxlZCAuc2VsZWN0Mi1jaG9pY2VzIC5zZWxlY3QyLXNlYXJjaC1jaG9pY2UgLnNlbGVjdDItc2VhcmNoLWNob2ljZS1jbG9zZSB7ICAgIGRpc3BsYXk6IG5vbmU7CiAgICBiYWNrZ3JvdW5kOiBub25lOwp9Ci8qIGVuZCBtdWx0aXNlbGVjdCAqLwoKCi5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlIC5zZWxlY3QyLW1hdGNoLAouc2VsZWN0Mi1yZXN1bHQtdW5zZWxlY3RhYmxlIC5zZWxlY3QyLW1hdGNoIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9Cgouc2VsZWN0Mi1vZmZzY3JlZW4sIC5zZWxlY3QyLW9mZnNjcmVlbjpmb2N1cyB7CiAgICBjbGlwOiByZWN0KDAgMCAwIDApICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogMXB4ICFpbXBvcnRhbnQ7CiAgICBoZWlnaHQ6IDFweCAhaW1wb3J0YW50OwogICAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7CiAgICBtYXJnaW46IDAgIWltcG9ydGFudDsKICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsKICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50OwogICAgb3V0bGluZTogMCAhaW1wb3J0YW50OwogICAgbGVmdDogMHB4ICFpbXBvcnRhbnQ7CiAgICB0b3A6IDBweCAhaW1wb3J0YW50Owp9Cgouc2VsZWN0Mi1kaXNwbGF5LW5vbmUgewogICAgZGlzcGxheTogbm9uZTsKfQoKLnNlbGVjdDItbWVhc3VyZS1zY3JvbGxiYXIgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgdG9wOiAtMTAwMDBweDsKICAgIGxlZnQ6IC0xMDAwMHB4OwogICAgd2lkdGg6IDEwMHB4OwogICAgaGVpZ2h0OiAxMDBweDsKICAgIG92ZXJmbG93OiBzY3JvbGw7Cn0KLyogUmV0aW5hLWl6ZSBpY29ucyAqLwoKQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAoLXdlYmtpdC1taW4tZGV2aWNlLXBpeGVsLXJhdGlvOiAxLjUpLCBvbmx5IHNjcmVlbiBhbmQgKG1pbi1yZXNvbHV0aW9uOiAxNDRkcGkpICB7CiAgLnNlbGVjdDItc2VhcmNoIGlucHV0LCAuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWNsb3NlLCAuc2VsZWN0Mi1jb250YWluZXIgLnNlbGVjdDItY2hvaWNlIGFiYnIsIC5zZWxlY3QyLWNvbnRhaW5lciAuc2VsZWN0Mi1jaG9pY2UgLnNlbGVjdDItYXJyb3cgYiB7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnc2VsZWN0MngyLnBuZycpICFpbXBvcnRhbnQ7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQgIWltcG9ydGFudDsKICAgICAgYmFja2dyb3VuZC1zaXplOiA2MHB4IDQwcHggIWltcG9ydGFudDsKICB9CiAgLnNlbGVjdDItc2VhcmNoIGlucHV0IHsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMTAwJSAtMjFweCAhaW1wb3J0YW50OwogIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2.jquery.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic2VsZWN0MiIsCiAgICAidGl0bGUiOiAiU2VsZWN0MiIsCiAgICAiZGVzY3JpcHRpb24iOiAiU2VsZWN0MiBpcyBhIGpRdWVyeSBiYXNlZCByZXBsYWNlbWVudCBmb3Igc2VsZWN0IGJveGVzLiBJdCBzdXBwb3J0cyBzZWFyY2hpbmcsIHJlbW90ZSBkYXRhIHNldHMsIGFuZCBpbmZpbml0ZSBzY3JvbGxpbmcgb2YgcmVzdWx0cy4iLAogICAgImtleXdvcmRzIjogWwogICAgICAgICJzZWxlY3QiLAogICAgICAgICJhdXRvY29tcGxldGUiLAogICAgICAgICJ0eXBlYWhlYWQiLAogICAgICAgICJkcm9wZG93biIsCiAgICAgICAgIm11bHRpc2VsZWN0IiwKICAgICAgICAidGFnIiwKICAgICAgICAidGFnZ2luZyIKICAgIF0sCiAgICAidmVyc2lvbiI6ICIzLjQuMyIsCiAgICAiYXV0aG9yIjogewogICAgICAgICJuYW1lIjogIklnb3IgVmF5bmJlcmciLAogICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2l2YXluYmVyZyIKICAgIH0sCiAgICAibGljZW5zZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAidHlwZSI6ICJBcGFjaGUiLAogICAgICAgICAgICAidXJsIjogImh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgInR5cGUiOiAiR1BMIHYyIiwKICAgICAgICAgICAgInVybCI6ICJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sIgogICAgICAgIH0KICAgIF0sCiAgICAiYnVncyI6ICJodHRwczovL2dpdGh1Yi5jb20vaXZheW5iZXJnL3NlbGVjdDIvaXNzdWVzIiwKICAgICJob21lcGFnZSI6ICJodHRwOi8vaXZheW5iZXJnLmdpdGh1Yi5jb20vc2VsZWN0MiIsCiAgICAiZG9jcyI6ICJodHRwOi8vaXZheW5iZXJnLmdpdGh1Yi5jb20vc2VsZWN0Mi8iLAogICAgImRvd25sb2FkIjogImh0dHBzOi8vZ2l0aHViLmNvbS9pdmF5bmJlcmcvc2VsZWN0Mi90YWdzIiwKICAgICJkZXBlbmRlbmNpZXMiOiB7CiAgICAgICAgImpxdWVyeSI6ICI+PTEuNy4xIgogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKQ29weXJpZ2h0IDIwMTIgSWdvciBWYXluYmVyZwoKVmVyc2lvbjogQEB2ZXJAQCBUaW1lc3RhbXA6IEBAdGltZXN0YW1wQEAKClRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJBcGFjaGUgTGljZW5zZSIpIG9yIHRoZSBHTlUKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgKHRoZSAiR1BMIExpY2Vuc2UiKS4gWW91IG1heSBjaG9vc2UgZWl0aGVyIGxpY2Vuc2UgdG8gZ292ZXJuIHlvdXIKdXNlIG9mIHRoaXMgc29mdHdhcmUgb25seSB1cG9uIHRoZSBjb25kaXRpb24gdGhhdCB5b3UgYWNjZXB0IGFsbCBvZiB0aGUgdGVybXMgb2YgZWl0aGVyIHRoZSBBcGFjaGUKTGljZW5zZSBvciB0aGUgR1BMIExpY2Vuc2UuCgpZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEFwYWNoZSBMaWNlbnNlIGFuZCB0aGUgR1BMIExpY2Vuc2UgYXQ6CgogICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgICBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC5odG1sCgpVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZQpBcGFjaGUgTGljZW5zZSBvciB0aGUgR1BMIExpY2VzbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUgpDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIEFwYWNoZSBMaWNlbnNlIGFuZCB0aGUgR1BMIExpY2Vuc2UgZm9yCnRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBhbmQgdGhlIEdQTCBMaWNlbnNlLgoqLwooZnVuY3Rpb24gKCQpIHsKICAgIGlmKHR5cGVvZiAkLmZuLmVhY2gyID09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgJC5leHRlbmQoJC5mbiwgewogICAgICAgICAgICAvKgogICAgICAgICAgICAqIDQtMTAgdGltZXMgZmFzdGVyIC5lYWNoIHJlcGxhY2VtZW50CiAgICAgICAgICAgICogdXNlIGl0IGNhcmVmdWxseSwgYXMgaXQgb3ZlcnJpZGVzIGpRdWVyeSBjb250ZXh0IG9mIGVsZW1lbnQgb24gZWFjaCBpdGVyYXRpb24KICAgICAgICAgICAgKi8KICAgICAgICAgICAgZWFjaDIgOiBmdW5jdGlvbiAoYykgewogICAgICAgICAgICAgICAgdmFyIGogPSAkKFswXSksIGkgPSAtMSwgbCA9IHRoaXMubGVuZ3RoOwogICAgICAgICAgICAgICAgd2hpbGUgKAogICAgICAgICAgICAgICAgICAgICsraSA8IGwKICAgICAgICAgICAgICAgICAgICAmJiAoai5jb250ZXh0ID0galswXSA9IHRoaXNbaV0pCiAgICAgICAgICAgICAgICAgICAgJiYgYy5jYWxsKGpbMF0sIGksIGopICE9PSBmYWxzZSAvLyJ0aGlzIj1ET00sIGk9aW5kZXgsIGo9alF1ZXJ5IG9iamVjdAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9Cn0pKGpRdWVyeSk7CgooZnVuY3Rpb24gKCQsIHVuZGVmaW5lZCkgewogICAgInVzZSBzdHJpY3QiOwogICAgLypnbG9iYWwgZG9jdW1lbnQsIHdpbmRvdywgalF1ZXJ5LCBjb25zb2xlICovCgogICAgaWYgKHdpbmRvdy5TZWxlY3QyICE9PSB1bmRlZmluZWQpIHsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgdmFyIEtFWSwgQWJzdHJhY3RTZWxlY3QyLCBTaW5nbGVTZWxlY3QyLCBNdWx0aVNlbGVjdDIsIG5leHRVaWQsIHNpemVyLAogICAgICAgIGxhc3RNb3VzZVBvc2l0aW9uPXt4OjAseTowfSwgJGRvY3VtZW50LCBzY3JvbGxCYXJEaW1lbnNpb25zLAoKICAgIEtFWSA9IHsKICAgICAgICBUQUI6IDksCiAgICAgICAgRU5URVI6IDEzLAogICAgICAgIEVTQzogMjcsCiAgICAgICAgU1BBQ0U6IDMyLAogICAgICAgIExFRlQ6IDM3LAogICAgICAgIFVQOiAzOCwKICAgICAgICBSSUdIVDogMzksCiAgICAgICAgRE9XTjogNDAsCiAgICAgICAgU0hJRlQ6IDE2LAogICAgICAgIENUUkw6IDE3LAogICAgICAgIEFMVDogMTgsCiAgICAgICAgUEFHRV9VUDogMzMsCiAgICAgICAgUEFHRV9ET1dOOiAzNCwKICAgICAgICBIT01FOiAzNiwKICAgICAgICBFTkQ6IDM1LAogICAgICAgIEJBQ0tTUEFDRTogOCwKICAgICAgICBERUxFVEU6IDQ2LAogICAgICAgIGlzQXJyb3c6IGZ1bmN0aW9uIChrKSB7CiAgICAgICAgICAgIGsgPSBrLndoaWNoID8gay53aGljaCA6IGs7CiAgICAgICAgICAgIHN3aXRjaCAoaykgewogICAgICAgICAgICBjYXNlIEtFWS5MRUZUOgogICAgICAgICAgICBjYXNlIEtFWS5SSUdIVDoKICAgICAgICAgICAgY2FzZSBLRVkuVVA6CiAgICAgICAgICAgIGNhc2UgS0VZLkRPV046CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSwKICAgICAgICBpc0NvbnRyb2w6IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciBrID0gZS53aGljaDsKICAgICAgICAgICAgc3dpdGNoIChrKSB7CiAgICAgICAgICAgIGNhc2UgS0VZLlNISUZUOgogICAgICAgICAgICBjYXNlIEtFWS5DVFJMOgogICAgICAgICAgICBjYXNlIEtFWS5BTFQ6CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGUubWV0YUtleSkgcmV0dXJuIHRydWU7CgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSwKICAgICAgICBpc0Z1bmN0aW9uS2V5OiBmdW5jdGlvbiAoaykgewogICAgICAgICAgICBrID0gay53aGljaCA/IGsud2hpY2ggOiBrOwogICAgICAgICAgICByZXR1cm4gayA+PSAxMTIgJiYgayA8PSAxMjM7CiAgICAgICAgfQogICAgfSwKICAgIE1FQVNVUkVfU0NST0xMQkFSX1RFTVBMQVRFID0gIjxkaXYgY2xhc3M9J3NlbGVjdDItbWVhc3VyZS1zY3JvbGxiYXInPjwvZGl2PiIsCgogICAgRElBQ1JJVElDUyA9IHsiXHUyNEI2IjoiQSIsIlx1RkYyMSI6IkEiLCJcdTAwQzAiOiJBIiwiXHUwMEMxIjoiQSIsIlx1MDBDMiI6IkEiLCJcdTFFQTYiOiJBIiwiXHUxRUE0IjoiQSIsIlx1MUVBQSI6IkEiLCJcdTFFQTgiOiJBIiwiXHUwMEMzIjoiQSIsIlx1MDEwMCI6IkEiLCJcdTAxMDIiOiJBIiwiXHUxRUIwIjoiQSIsIlx1MUVBRSI6IkEiLCJcdTFFQjQiOiJBIiwiXHUxRUIyIjoiQSIsIlx1MDIyNiI6IkEiLCJcdTAxRTAiOiJBIiwiXHUwMEM0IjoiQSIsIlx1MDFERSI6IkEiLCJcdTFFQTIiOiJBIiwiXHUwMEM1IjoiQSIsIlx1MDFGQSI6IkEiLCJcdTAxQ0QiOiJBIiwiXHUwMjAwIjoiQSIsIlx1MDIwMiI6IkEiLCJcdTFFQTAiOiJBIiwiXHUxRUFDIjoiQSIsIlx1MUVCNiI6IkEiLCJcdTFFMDAiOiJBIiwiXHUwMTA0IjoiQSIsIlx1MDIzQSI6IkEiLCJcdTJDNkYiOiJBIiwiXHVBNzMyIjoiQUEiLCJcdTAwQzYiOiJBRSIsIlx1MDFGQyI6IkFFIiwiXHUwMUUyIjoiQUUiLCJcdUE3MzQiOiJBTyIsIlx1QTczNiI6IkFVIiwiXHVBNzM4IjoiQVYiLCJcdUE3M0EiOiJBViIsIlx1QTczQyI6IkFZIiwiXHUyNEI3IjoiQiIsIlx1RkYyMiI6IkIiLCJcdTFFMDIiOiJCIiwiXHUxRTA0IjoiQiIsIlx1MUUwNiI6IkIiLCJcdTAyNDMiOiJCIiwiXHUwMTgyIjoiQiIsIlx1MDE4MSI6IkIiLCJcdTI0QjgiOiJDIiwiXHVGRjIzIjoiQyIsIlx1MDEwNiI6IkMiLCJcdTAxMDgiOiJDIiwiXHUwMTBBIjoiQyIsIlx1MDEwQyI6IkMiLCJcdTAwQzciOiJDIiwiXHUxRTA4IjoiQyIsIlx1MDE4NyI6IkMiLCJcdTAyM0IiOiJDIiwiXHVBNzNFIjoiQyIsIlx1MjRCOSI6IkQiLCJcdUZGMjQiOiJEIiwiXHUxRTBBIjoiRCIsIlx1MDEwRSI6IkQiLCJcdTFFMEMiOiJEIiwiXHUxRTEwIjoiRCIsIlx1MUUxMiI6IkQiLCJcdTFFMEUiOiJEIiwiXHUwMTEwIjoiRCIsIlx1MDE4QiI6IkQiLCJcdTAxOEEiOiJEIiwiXHUwMTg5IjoiRCIsIlx1QTc3OSI6IkQiLCJcdTAxRjEiOiJEWiIsIlx1MDFDNCI6IkRaIiwiXHUwMUYyIjoiRHoiLCJcdTAxQzUiOiJEeiIsIlx1MjRCQSI6IkUiLCJcdUZGMjUiOiJFIiwiXHUwMEM4IjoiRSIsIlx1MDBDOSI6IkUiLCJcdTAwQ0EiOiJFIiwiXHUxRUMwIjoiRSIsIlx1MUVCRSI6IkUiLCJcdTFFQzQiOiJFIiwiXHUxRUMyIjoiRSIsIlx1MUVCQyI6IkUiLCJcdTAxMTIiOiJFIiwiXHUxRTE0IjoiRSIsIlx1MUUxNiI6IkUiLCJcdTAxMTQiOiJFIiwiXHUwMTE2IjoiRSIsIlx1MDBDQiI6IkUiLCJcdTFFQkEiOiJFIiwiXHUwMTFBIjoiRSIsIlx1MDIwNCI6IkUiLCJcdTAyMDYiOiJFIiwiXHUxRUI4IjoiRSIsIlx1MUVDNiI6IkUiLCJcdTAyMjgiOiJFIiwiXHUxRTFDIjoiRSIsIlx1MDExOCI6IkUiLCJcdTFFMTgiOiJFIiwiXHUxRTFBIjoiRSIsIlx1MDE5MCI6IkUiLCJcdTAxOEUiOiJFIiwiXHUyNEJCIjoiRiIsIlx1RkYyNiI6IkYiLCJcdTFFMUUiOiJGIiwiXHUwMTkxIjoiRiIsIlx1QTc3QiI6IkYiLCJcdTI0QkMiOiJHIiwiXHVGRjI3IjoiRyIsIlx1MDFGNCI6IkciLCJcdTAxMUMiOiJHIiwiXHUxRTIwIjoiRyIsIlx1MDExRSI6IkciLCJcdTAxMjAiOiJHIiwiXHUwMUU2IjoiRyIsIlx1MDEyMiI6IkciLCJcdTAxRTQiOiJHIiwiXHUwMTkzIjoiRyIsIlx1QTdBMCI6IkciLCJcdUE3N0QiOiJHIiwiXHVBNzdFIjoiRyIsIlx1MjRCRCI6IkgiLCJcdUZGMjgiOiJIIiwiXHUwMTI0IjoiSCIsIlx1MUUyMiI6IkgiLCJcdTFFMjYiOiJIIiwiXHUwMjFFIjoiSCIsIlx1MUUyNCI6IkgiLCJcdTFFMjgiOiJIIiwiXHUxRTJBIjoiSCIsIlx1MDEyNiI6IkgiLCJcdTJDNjciOiJIIiwiXHUyQzc1IjoiSCIsIlx1QTc4RCI6IkgiLCJcdTI0QkUiOiJJIiwiXHVGRjI5IjoiSSIsIlx1MDBDQyI6IkkiLCJcdTAwQ0QiOiJJIiwiXHUwMENFIjoiSSIsIlx1MDEyOCI6IkkiLCJcdTAxMkEiOiJJIiwiXHUwMTJDIjoiSSIsIlx1MDEzMCI6IkkiLCJcdTAwQ0YiOiJJIiwiXHUxRTJFIjoiSSIsIlx1MUVDOCI6IkkiLCJcdTAxQ0YiOiJJIiwiXHUwMjA4IjoiSSIsIlx1MDIwQSI6IkkiLCJcdTFFQ0EiOiJJIiwiXHUwMTJFIjoiSSIsIlx1MUUyQyI6IkkiLCJcdTAxOTciOiJJIiwiXHUyNEJGIjoiSiIsIlx1RkYyQSI6IkoiLCJcdTAxMzQiOiJKIiwiXHUwMjQ4IjoiSiIsIlx1MjRDMCI6IksiLCJcdUZGMkIiOiJLIiwiXHUxRTMwIjoiSyIsIlx1MDFFOCI6IksiLCJcdTFFMzIiOiJLIiwiXHUwMTM2IjoiSyIsIlx1MUUzNCI6IksiLCJcdTAxOTgiOiJLIiwiXHUyQzY5IjoiSyIsIlx1QTc0MCI6IksiLCJcdUE3NDIiOiJLIiwiXHVBNzQ0IjoiSyIsIlx1QTdBMiI6IksiLCJcdTI0QzEiOiJMIiwiXHVGRjJDIjoiTCIsIlx1MDEzRiI6IkwiLCJcdTAxMzkiOiJMIiwiXHUwMTNEIjoiTCIsIlx1MUUzNiI6IkwiLCJcdTFFMzgiOiJMIiwiXHUwMTNCIjoiTCIsIlx1MUUzQyI6IkwiLCJcdTFFM0EiOiJMIiwiXHUwMTQxIjoiTCIsIlx1MDIzRCI6IkwiLCJcdTJDNjIiOiJMIiwiXHUyQzYwIjoiTCIsIlx1QTc0OCI6IkwiLCJcdUE3NDYiOiJMIiwiXHVBNzgwIjoiTCIsIlx1MDFDNyI6IkxKIiwiXHUwMUM4IjoiTGoiLCJcdTI0QzIiOiJNIiwiXHVGRjJEIjoiTSIsIlx1MUUzRSI6Ik0iLCJcdTFFNDAiOiJNIiwiXHUxRTQyIjoiTSIsIlx1MkM2RSI6Ik0iLCJcdTAxOUMiOiJNIiwiXHUyNEMzIjoiTiIsIlx1RkYyRSI6Ik4iLCJcdTAxRjgiOiJOIiwiXHUwMTQzIjoiTiIsIlx1MDBEMSI6Ik4iLCJcdTFFNDQiOiJOIiwiXHUwMTQ3IjoiTiIsIlx1MUU0NiI6Ik4iLCJcdTAxNDUiOiJOIiwiXHUxRTRBIjoiTiIsIlx1MUU0OCI6Ik4iLCJcdTAyMjAiOiJOIiwiXHUwMTlEIjoiTiIsIlx1QTc5MCI6Ik4iLCJcdUE3QTQiOiJOIiwiXHUwMUNBIjoiTkoiLCJcdTAxQ0IiOiJOaiIsIlx1MjRDNCI6Ik8iLCJcdUZGMkYiOiJPIiwiXHUwMEQyIjoiTyIsIlx1MDBEMyI6Ik8iLCJcdTAwRDQiOiJPIiwiXHUxRUQyIjoiTyIsIlx1MUVEMCI6Ik8iLCJcdTFFRDYiOiJPIiwiXHUxRUQ0IjoiTyIsIlx1MDBENSI6Ik8iLCJcdTFFNEMiOiJPIiwiXHUwMjJDIjoiTyIsIlx1MUU0RSI6Ik8iLCJcdTAxNEMiOiJPIiwiXHUxRTUwIjoiTyIsIlx1MUU1MiI6Ik8iLCJcdTAxNEUiOiJPIiwiXHUwMjJFIjoiTyIsIlx1MDIzMCI6Ik8iLCJcdTAwRDYiOiJPIiwiXHUwMjJBIjoiTyIsIlx1MUVDRSI6Ik8iLCJcdTAxNTAiOiJPIiwiXHUwMUQxIjoiTyIsIlx1MDIwQyI6Ik8iLCJcdTAyMEUiOiJPIiwiXHUwMUEwIjoiTyIsIlx1MUVEQyI6Ik8iLCJcdTFFREEiOiJPIiwiXHUxRUUwIjoiTyIsIlx1MUVERSI6Ik8iLCJcdTFFRTIiOiJPIiwiXHUxRUNDIjoiTyIsIlx1MUVEOCI6Ik8iLCJcdTAxRUEiOiJPIiwiXHUwMUVDIjoiTyIsIlx1MDBEOCI6Ik8iLCJcdTAxRkUiOiJPIiwiXHUwMTg2IjoiTyIsIlx1MDE5RiI6Ik8iLCJcdUE3NEEiOiJPIiwiXHVBNzRDIjoiTyIsIlx1MDFBMiI6Ik9JIiwiXHVBNzRFIjoiT08iLCJcdTAyMjIiOiJPVSIsIlx1MjRDNSI6IlAiLCJcdUZGMzAiOiJQIiwiXHUxRTU0IjoiUCIsIlx1MUU1NiI6IlAiLCJcdTAxQTQiOiJQIiwiXHUyQzYzIjoiUCIsIlx1QTc1MCI6IlAiLCJcdUE3NTIiOiJQIiwiXHVBNzU0IjoiUCIsIlx1MjRDNiI6IlEiLCJcdUZGMzEiOiJRIiwiXHVBNzU2IjoiUSIsIlx1QTc1OCI6IlEiLCJcdTAyNEEiOiJRIiwiXHUyNEM3IjoiUiIsIlx1RkYzMiI6IlIiLCJcdTAxNTQiOiJSIiwiXHUxRTU4IjoiUiIsIlx1MDE1OCI6IlIiLCJcdTAyMTAiOiJSIiwiXHUwMjEyIjoiUiIsIlx1MUU1QSI6IlIiLCJcdTFFNUMiOiJSIiwiXHUwMTU2IjoiUiIsIlx1MUU1RSI6IlIiLCJcdTAyNEMiOiJSIiwiXHUyQzY0IjoiUiIsIlx1QTc1QSI6IlIiLCJcdUE3QTYiOiJSIiwiXHVBNzgyIjoiUiIsIlx1MjRDOCI6IlMiLCJcdUZGMzMiOiJTIiwiXHUxRTlFIjoiUyIsIlx1MDE1QSI6IlMiLCJcdTFFNjQiOiJTIiwiXHUwMTVDIjoiUyIsIlx1MUU2MCI6IlMiLCJcdTAxNjAiOiJTIiwiXHUxRTY2IjoiUyIsIlx1MUU2MiI6IlMiLCJcdTFFNjgiOiJTIiwiXHUwMjE4IjoiUyIsIlx1MDE1RSI6IlMiLCJcdTJDN0UiOiJTIiwiXHVBN0E4IjoiUyIsIlx1QTc4NCI6IlMiLCJcdTI0QzkiOiJUIiwiXHVGRjM0IjoiVCIsIlx1MUU2QSI6IlQiLCJcdTAxNjQiOiJUIiwiXHUxRTZDIjoiVCIsIlx1MDIxQSI6IlQiLCJcdTAxNjIiOiJUIiwiXHUxRTcwIjoiVCIsIlx1MUU2RSI6IlQiLCJcdTAxNjYiOiJUIiwiXHUwMUFDIjoiVCIsIlx1MDFBRSI6IlQiLCJcdTAyM0UiOiJUIiwiXHVBNzg2IjoiVCIsIlx1QTcyOCI6IlRaIiwiXHUyNENBIjoiVSIsIlx1RkYzNSI6IlUiLCJcdTAwRDkiOiJVIiwiXHUwMERBIjoiVSIsIlx1MDBEQiI6IlUiLCJcdTAxNjgiOiJVIiwiXHUxRTc4IjoiVSIsIlx1MDE2QSI6IlUiLCJcdTFFN0EiOiJVIiwiXHUwMTZDIjoiVSIsIlx1MDBEQyI6IlUiLCJcdTAxREIiOiJVIiwiXHUwMUQ3IjoiVSIsIlx1MDFENSI6IlUiLCJcdTAxRDkiOiJVIiwiXHUxRUU2IjoiVSIsIlx1MDE2RSI6IlUiLCJcdTAxNzAiOiJVIiwiXHUwMUQzIjoiVSIsIlx1MDIxNCI6IlUiLCJcdTAyMTYiOiJVIiwiXHUwMUFGIjoiVSIsIlx1MUVFQSI6IlUiLCJcdTFFRTgiOiJVIiwiXHUxRUVFIjoiVSIsIlx1MUVFQyI6IlUiLCJcdTFFRjAiOiJVIiwiXHUxRUU0IjoiVSIsIlx1MUU3MiI6IlUiLCJcdTAxNzIiOiJVIiwiXHUxRTc2IjoiVSIsIlx1MUU3NCI6IlUiLCJcdTAyNDQiOiJVIiwiXHUyNENCIjoiViIsIlx1RkYzNiI6IlYiLCJcdTFFN0MiOiJWIiwiXHUxRTdFIjoiViIsIlx1MDFCMiI6IlYiLCJcdUE3NUUiOiJWIiwiXHUwMjQ1IjoiViIsIlx1QTc2MCI6IlZZIiwiXHUyNENDIjoiVyIsIlx1RkYzNyI6IlciLCJcdTFFODAiOiJXIiwiXHUxRTgyIjoiVyIsIlx1MDE3NCI6IlciLCJcdTFFODYiOiJXIiwiXHUxRTg0IjoiVyIsIlx1MUU4OCI6IlciLCJcdTJDNzIiOiJXIiwiXHUyNENEIjoiWCIsIlx1RkYzOCI6IlgiLCJcdTFFOEEiOiJYIiwiXHUxRThDIjoiWCIsIlx1MjRDRSI6IlkiLCJcdUZGMzkiOiJZIiwiXHUxRUYyIjoiWSIsIlx1MDBERCI6IlkiLCJcdTAxNzYiOiJZIiwiXHUxRUY4IjoiWSIsIlx1MDIzMiI6IlkiLCJcdTFFOEUiOiJZIiwiXHUwMTc4IjoiWSIsIlx1MUVGNiI6IlkiLCJcdTFFRjQiOiJZIiwiXHUwMUIzIjoiWSIsIlx1MDI0RSI6IlkiLCJcdTFFRkUiOiJZIiwiXHUyNENGIjoiWiIsIlx1RkYzQSI6IloiLCJcdTAxNzkiOiJaIiwiXHUxRTkwIjoiWiIsIlx1MDE3QiI6IloiLCJcdTAxN0QiOiJaIiwiXHUxRTkyIjoiWiIsIlx1MUU5NCI6IloiLCJcdTAxQjUiOiJaIiwiXHUwMjI0IjoiWiIsIlx1MkM3RiI6IloiLCJcdTJDNkIiOiJaIiwiXHVBNzYyIjoiWiIsIlx1MjREMCI6ImEiLCJcdUZGNDEiOiJhIiwiXHUxRTlBIjoiYSIsIlx1MDBFMCI6ImEiLCJcdTAwRTEiOiJhIiwiXHUwMEUyIjoiYSIsIlx1MUVBNyI6ImEiLCJcdTFFQTUiOiJhIiwiXHUxRUFCIjoiYSIsIlx1MUVBOSI6ImEiLCJcdTAwRTMiOiJhIiwiXHUwMTAxIjoiYSIsIlx1MDEwMyI6ImEiLCJcdTFFQjEiOiJhIiwiXHUxRUFGIjoiYSIsIlx1MUVCNSI6ImEiLCJcdTFFQjMiOiJhIiwiXHUwMjI3IjoiYSIsIlx1MDFFMSI6ImEiLCJcdTAwRTQiOiJhIiwiXHUwMURGIjoiYSIsIlx1MUVBMyI6ImEiLCJcdTAwRTUiOiJhIiwiXHUwMUZCIjoiYSIsIlx1MDFDRSI6ImEiLCJcdTAyMDEiOiJhIiwiXHUwMjAzIjoiYSIsIlx1MUVBMSI6ImEiLCJcdTFFQUQiOiJhIiwiXHUxRUI3IjoiYSIsIlx1MUUwMSI6ImEiLCJcdTAxMDUiOiJhIiwiXHUyQzY1IjoiYSIsIlx1MDI1MCI6ImEiLCJcdUE3MzMiOiJhYSIsIlx1MDBFNiI6ImFlIiwiXHUwMUZEIjoiYWUiLCJcdTAxRTMiOiJhZSIsIlx1QTczNSI6ImFvIiwiXHVBNzM3IjoiYXUiLCJcdUE3MzkiOiJhdiIsIlx1QTczQiI6ImF2IiwiXHVBNzNEIjoiYXkiLCJcdTI0RDEiOiJiIiwiXHVGRjQyIjoiYiIsIlx1MUUwMyI6ImIiLCJcdTFFMDUiOiJiIiwiXHUxRTA3IjoiYiIsIlx1MDE4MCI6ImIiLCJcdTAxODMiOiJiIiwiXHUwMjUzIjoiYiIsIlx1MjREMiI6ImMiLCJcdUZGNDMiOiJjIiwiXHUwMTA3IjoiYyIsIlx1MDEwOSI6ImMiLCJcdTAxMEIiOiJjIiwiXHUwMTBEIjoiYyIsIlx1MDBFNyI6ImMiLCJcdTFFMDkiOiJjIiwiXHUwMTg4IjoiYyIsIlx1MDIzQyI6ImMiLCJcdUE3M0YiOiJjIiwiXHUyMTg0IjoiYyIsIlx1MjREMyI6ImQiLCJcdUZGNDQiOiJkIiwiXHUxRTBCIjoiZCIsIlx1MDEwRiI6ImQiLCJcdTFFMEQiOiJkIiwiXHUxRTExIjoiZCIsIlx1MUUxMyI6ImQiLCJcdTFFMEYiOiJkIiwiXHUwMTExIjoiZCIsIlx1MDE4QyI6ImQiLCJcdTAyNTYiOiJkIiwiXHUwMjU3IjoiZCIsIlx1QTc3QSI6ImQiLCJcdTAxRjMiOiJkeiIsIlx1MDFDNiI6ImR6IiwiXHUyNEQ0IjoiZSIsIlx1RkY0NSI6ImUiLCJcdTAwRTgiOiJlIiwiXHUwMEU5IjoiZSIsIlx1MDBFQSI6ImUiLCJcdTFFQzEiOiJlIiwiXHUxRUJGIjoiZSIsIlx1MUVDNSI6ImUiLCJcdTFFQzMiOiJlIiwiXHUxRUJEIjoiZSIsIlx1MDExMyI6ImUiLCJcdTFFMTUiOiJlIiwiXHUxRTE3IjoiZSIsIlx1MDExNSI6ImUiLCJcdTAxMTciOiJlIiwiXHUwMEVCIjoiZSIsIlx1MUVCQiI6ImUiLCJcdTAxMUIiOiJlIiwiXHUwMjA1IjoiZSIsIlx1MDIwNyI6ImUiLCJcdTFFQjkiOiJlIiwiXHUxRUM3IjoiZSIsIlx1MDIyOSI6ImUiLCJcdTFFMUQiOiJlIiwiXHUwMTE5IjoiZSIsIlx1MUUxOSI6ImUiLCJcdTFFMUIiOiJlIiwiXHUwMjQ3IjoiZSIsIlx1MDI1QiI6ImUiLCJcdTAxREQiOiJlIiwiXHUyNEQ1IjoiZiIsIlx1RkY0NiI6ImYiLCJcdTFFMUYiOiJmIiwiXHUwMTkyIjoiZiIsIlx1QTc3QyI6ImYiLCJcdTI0RDYiOiJnIiwiXHVGRjQ3IjoiZyIsIlx1MDFGNSI6ImciLCJcdTAxMUQiOiJnIiwiXHUxRTIxIjoiZyIsIlx1MDExRiI6ImciLCJcdTAxMjEiOiJnIiwiXHUwMUU3IjoiZyIsIlx1MDEyMyI6ImciLCJcdTAxRTUiOiJnIiwiXHUwMjYwIjoiZyIsIlx1QTdBMSI6ImciLCJcdTFENzkiOiJnIiwiXHVBNzdGIjoiZyIsIlx1MjRENyI6ImgiLCJcdUZGNDgiOiJoIiwiXHUwMTI1IjoiaCIsIlx1MUUyMyI6ImgiLCJcdTFFMjciOiJoIiwiXHUwMjFGIjoiaCIsIlx1MUUyNSI6ImgiLCJcdTFFMjkiOiJoIiwiXHUxRTJCIjoiaCIsIlx1MUU5NiI6ImgiLCJcdTAxMjciOiJoIiwiXHUyQzY4IjoiaCIsIlx1MkM3NiI6ImgiLCJcdTAyNjUiOiJoIiwiXHUwMTk1IjoiaHYiLCJcdTI0RDgiOiJpIiwiXHVGRjQ5IjoiaSIsIlx1MDBFQyI6ImkiLCJcdTAwRUQiOiJpIiwiXHUwMEVFIjoiaSIsIlx1MDEyOSI6ImkiLCJcdTAxMkIiOiJpIiwiXHUwMTJEIjoiaSIsIlx1MDBFRiI6ImkiLCJcdTFFMkYiOiJpIiwiXHUxRUM5IjoiaSIsIlx1MDFEMCI6ImkiLCJcdTAyMDkiOiJpIiwiXHUwMjBCIjoiaSIsIlx1MUVDQiI6ImkiLCJcdTAxMkYiOiJpIiwiXHUxRTJEIjoiaSIsIlx1MDI2OCI6ImkiLCJcdTAxMzEiOiJpIiwiXHUyNEQ5IjoiaiIsIlx1RkY0QSI6ImoiLCJcdTAxMzUiOiJqIiwiXHUwMUYwIjoiaiIsIlx1MDI0OSI6ImoiLCJcdTI0REEiOiJrIiwiXHVGRjRCIjoiayIsIlx1MUUzMSI6ImsiLCJcdTAxRTkiOiJrIiwiXHUxRTMzIjoiayIsIlx1MDEzNyI6ImsiLCJcdTFFMzUiOiJrIiwiXHUwMTk5IjoiayIsIlx1MkM2QSI6ImsiLCJcdUE3NDEiOiJrIiwiXHVBNzQzIjoiayIsIlx1QTc0NSI6ImsiLCJcdUE3QTMiOiJrIiwiXHUyNERCIjoibCIsIlx1RkY0QyI6ImwiLCJcdTAxNDAiOiJsIiwiXHUwMTNBIjoibCIsIlx1MDEzRSI6ImwiLCJcdTFFMzciOiJsIiwiXHUxRTM5IjoibCIsIlx1MDEzQyI6ImwiLCJcdTFFM0QiOiJsIiwiXHUxRTNCIjoibCIsIlx1MDE3RiI6ImwiLCJcdTAxNDIiOiJsIiwiXHUwMTlBIjoibCIsIlx1MDI2QiI6ImwiLCJcdTJDNjEiOiJsIiwiXHVBNzQ5IjoibCIsIlx1QTc4MSI6ImwiLCJcdUE3NDciOiJsIiwiXHUwMUM5IjoibGoiLCJcdTI0REMiOiJtIiwiXHVGRjREIjoibSIsIlx1MUUzRiI6Im0iLCJcdTFFNDEiOiJtIiwiXHUxRTQzIjoibSIsIlx1MDI3MSI6Im0iLCJcdTAyNkYiOiJtIiwiXHUyNEREIjoibiIsIlx1RkY0RSI6Im4iLCJcdTAxRjkiOiJuIiwiXHUwMTQ0IjoibiIsIlx1MDBGMSI6Im4iLCJcdTFFNDUiOiJuIiwiXHUwMTQ4IjoibiIsIlx1MUU0NyI6Im4iLCJcdTAxNDYiOiJuIiwiXHUxRTRCIjoibiIsIlx1MUU0OSI6Im4iLCJcdTAxOUUiOiJuIiwiXHUwMjcyIjoibiIsIlx1MDE0OSI6Im4iLCJcdUE3OTEiOiJuIiwiXHVBN0E1IjoibiIsIlx1MDFDQyI6Im5qIiwiXHUyNERFIjoibyIsIlx1RkY0RiI6Im8iLCJcdTAwRjIiOiJvIiwiXHUwMEYzIjoibyIsIlx1MDBGNCI6Im8iLCJcdTFFRDMiOiJvIiwiXHUxRUQxIjoibyIsIlx1MUVENyI6Im8iLCJcdTFFRDUiOiJvIiwiXHUwMEY1IjoibyIsIlx1MUU0RCI6Im8iLCJcdTAyMkQiOiJvIiwiXHUxRTRGIjoibyIsIlx1MDE0RCI6Im8iLCJcdTFFNTEiOiJvIiwiXHUxRTUzIjoibyIsIlx1MDE0RiI6Im8iLCJcdTAyMkYiOiJvIiwiXHUwMjMxIjoibyIsIlx1MDBGNiI6Im8iLCJcdTAyMkIiOiJvIiwiXHUxRUNGIjoibyIsIlx1MDE1MSI6Im8iLCJcdTAxRDIiOiJvIiwiXHUwMjBEIjoibyIsIlx1MDIwRiI6Im8iLCJcdTAxQTEiOiJvIiwiXHUxRUREIjoibyIsIlx1MUVEQiI6Im8iLCJcdTFFRTEiOiJvIiwiXHUxRURGIjoibyIsIlx1MUVFMyI6Im8iLCJcdTFFQ0QiOiJvIiwiXHUxRUQ5IjoibyIsIlx1MDFFQiI6Im8iLCJcdTAxRUQiOiJvIiwiXHUwMEY4IjoibyIsIlx1MDFGRiI6Im8iLCJcdTAyNTQiOiJvIiwiXHVBNzRCIjoibyIsIlx1QTc0RCI6Im8iLCJcdTAyNzUiOiJvIiwiXHUwMUEzIjoib2kiLCJcdTAyMjMiOiJvdSIsIlx1QTc0RiI6Im9vIiwiXHUyNERGIjoicCIsIlx1RkY1MCI6InAiLCJcdTFFNTUiOiJwIiwiXHUxRTU3IjoicCIsIlx1MDFBNSI6InAiLCJcdTFEN0QiOiJwIiwiXHVBNzUxIjoicCIsIlx1QTc1MyI6InAiLCJcdUE3NTUiOiJwIiwiXHUyNEUwIjoicSIsIlx1RkY1MSI6InEiLCJcdTAyNEIiOiJxIiwiXHVBNzU3IjoicSIsIlx1QTc1OSI6InEiLCJcdTI0RTEiOiJyIiwiXHVGRjUyIjoiciIsIlx1MDE1NSI6InIiLCJcdTFFNTkiOiJyIiwiXHUwMTU5IjoiciIsIlx1MDIxMSI6InIiLCJcdTAyMTMiOiJyIiwiXHUxRTVCIjoiciIsIlx1MUU1RCI6InIiLCJcdTAxNTciOiJyIiwiXHUxRTVGIjoiciIsIlx1MDI0RCI6InIiLCJcdTAyN0QiOiJyIiwiXHVBNzVCIjoiciIsIlx1QTdBNyI6InIiLCJcdUE3ODMiOiJyIiwiXHUyNEUyIjoicyIsIlx1RkY1MyI6InMiLCJcdTAwREYiOiJzIiwiXHUwMTVCIjoicyIsIlx1MUU2NSI6InMiLCJcdTAxNUQiOiJzIiwiXHUxRTYxIjoicyIsIlx1MDE2MSI6InMiLCJcdTFFNjciOiJzIiwiXHUxRTYzIjoicyIsIlx1MUU2OSI6InMiLCJcdTAyMTkiOiJzIiwiXHUwMTVGIjoicyIsIlx1MDIzRiI6InMiLCJcdUE3QTkiOiJzIiwiXHVBNzg1IjoicyIsIlx1MUU5QiI6InMiLCJcdTI0RTMiOiJ0IiwiXHVGRjU0IjoidCIsIlx1MUU2QiI6InQiLCJcdTFFOTciOiJ0IiwiXHUwMTY1IjoidCIsIlx1MUU2RCI6InQiLCJcdTAyMUIiOiJ0IiwiXHUwMTYzIjoidCIsIlx1MUU3MSI6InQiLCJcdTFFNkYiOiJ0IiwiXHUwMTY3IjoidCIsIlx1MDFBRCI6InQiLCJcdTAyODgiOiJ0IiwiXHUyQzY2IjoidCIsIlx1QTc4NyI6InQiLCJcdUE3MjkiOiJ0eiIsIlx1MjRFNCI6InUiLCJcdUZGNTUiOiJ1IiwiXHUwMEY5IjoidSIsIlx1MDBGQSI6InUiLCJcdTAwRkIiOiJ1IiwiXHUwMTY5IjoidSIsIlx1MUU3OSI6InUiLCJcdTAxNkIiOiJ1IiwiXHUxRTdCIjoidSIsIlx1MDE2RCI6InUiLCJcdTAwRkMiOiJ1IiwiXHUwMURDIjoidSIsIlx1MDFEOCI6InUiLCJcdTAxRDYiOiJ1IiwiXHUwMURBIjoidSIsIlx1MUVFNyI6InUiLCJcdTAxNkYiOiJ1IiwiXHUwMTcxIjoidSIsIlx1MDFENCI6InUiLCJcdTAyMTUiOiJ1IiwiXHUwMjE3IjoidSIsIlx1MDFCMCI6InUiLCJcdTFFRUIiOiJ1IiwiXHUxRUU5IjoidSIsIlx1MUVFRiI6InUiLCJcdTFFRUQiOiJ1IiwiXHUxRUYxIjoidSIsIlx1MUVFNSI6InUiLCJcdTFFNzMiOiJ1IiwiXHUwMTczIjoidSIsIlx1MUU3NyI6InUiLCJcdTFFNzUiOiJ1IiwiXHUwMjg5IjoidSIsIlx1MjRFNSI6InYiLCJcdUZGNTYiOiJ2IiwiXHUxRTdEIjoidiIsIlx1MUU3RiI6InYiLCJcdTAyOEIiOiJ2IiwiXHVBNzVGIjoidiIsIlx1MDI4QyI6InYiLCJcdUE3NjEiOiJ2eSIsIlx1MjRFNiI6InciLCJcdUZGNTciOiJ3IiwiXHUxRTgxIjoidyIsIlx1MUU4MyI6InciLCJcdTAxNzUiOiJ3IiwiXHUxRTg3IjoidyIsIlx1MUU4NSI6InciLCJcdTFFOTgiOiJ3IiwiXHUxRTg5IjoidyIsIlx1MkM3MyI6InciLCJcdTI0RTciOiJ4IiwiXHVGRjU4IjoieCIsIlx1MUU4QiI6IngiLCJcdTFFOEQiOiJ4IiwiXHUyNEU4IjoieSIsIlx1RkY1OSI6InkiLCJcdTFFRjMiOiJ5IiwiXHUwMEZEIjoieSIsIlx1MDE3NyI6InkiLCJcdTFFRjkiOiJ5IiwiXHUwMjMzIjoieSIsIlx1MUU4RiI6InkiLCJcdTAwRkYiOiJ5IiwiXHUxRUY3IjoieSIsIlx1MUU5OSI6InkiLCJcdTFFRjUiOiJ5IiwiXHUwMUI0IjoieSIsIlx1MDI0RiI6InkiLCJcdTFFRkYiOiJ5IiwiXHUyNEU5IjoieiIsIlx1RkY1QSI6InoiLCJcdTAxN0EiOiJ6IiwiXHUxRTkxIjoieiIsIlx1MDE3QyI6InoiLCJcdTAxN0UiOiJ6IiwiXHUxRTkzIjoieiIsIlx1MUU5NSI6InoiLCJcdTAxQjYiOiJ6IiwiXHUwMjI1IjoieiIsIlx1MDI0MCI6InoiLCJcdTJDNkMiOiJ6IiwiXHVBNzYzIjoieiJ9OwoKICAgICRkb2N1bWVudCA9ICQoZG9jdW1lbnQpOwoKICAgIG5leHRVaWQ9KGZ1bmN0aW9uKCkgeyB2YXIgY291bnRlcj0xOyByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBjb3VudGVyKys7IH07IH0oKSk7CgoKICAgIGZ1bmN0aW9uIHN0cmlwRGlhY3JpdGljcyhzdHIpIHsKICAgICAgICB2YXIgcmV0LCBpLCBsLCBjOwoKICAgICAgICBpZiAoIXN0ciB8fCBzdHIubGVuZ3RoIDwgMSkgcmV0dXJuIHN0cjsKCiAgICAgICAgcmV0ID0gIiI7CiAgICAgICAgZm9yIChpID0gMCwgbCA9IHN0ci5sZW5ndGg7IGkgPCBsOyBpKyspIHsKICAgICAgICAgICAgYyA9IHN0ci5jaGFyQXQoaSk7CiAgICAgICAgICAgIHJldCArPSBESUFDUklUSUNTW2NdIHx8IGM7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXQ7CiAgICB9CgogICAgZnVuY3Rpb24gaW5kZXhPZih2YWx1ZSwgYXJyYXkpIHsKICAgICAgICB2YXIgaSA9IDAsIGwgPSBhcnJheS5sZW5ndGg7CiAgICAgICAgZm9yICg7IGkgPCBsOyBpID0gaSArIDEpIHsKICAgICAgICAgICAgaWYgKGVxdWFsKHZhbHVlLCBhcnJheVtpXSkpIHJldHVybiBpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gLTE7CiAgICB9CgogICAgZnVuY3Rpb24gbWVhc3VyZVNjcm9sbGJhciAoKSB7CiAgICAgICAgdmFyICR0ZW1wbGF0ZSA9ICQoIE1FQVNVUkVfU0NST0xMQkFSX1RFTVBMQVRFICk7CiAgICAgICAgJHRlbXBsYXRlLmFwcGVuZFRvKCdib2R5Jyk7CgogICAgICAgIHZhciBkaW0gPSB7CiAgICAgICAgICAgIHdpZHRoOiAkdGVtcGxhdGUud2lkdGgoKSAtICR0ZW1wbGF0ZVswXS5jbGllbnRXaWR0aCwKICAgICAgICAgICAgaGVpZ2h0OiAkdGVtcGxhdGUuaGVpZ2h0KCkgLSAkdGVtcGxhdGVbMF0uY2xpZW50SGVpZ2h0CiAgICAgICAgfTsKICAgICAgICAkdGVtcGxhdGUucmVtb3ZlKCk7CgogICAgICAgIHJldHVybiBkaW07CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wYXJlcyBlcXVhbGl0eSBvZiBhIGFuZCBiCiAgICAgKiBAcGFyYW0gYQogICAgICogQHBhcmFtIGIKICAgICAqLwogICAgZnVuY3Rpb24gZXF1YWwoYSwgYikgewogICAgICAgIGlmIChhID09PSBiKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkIHx8IGIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChhID09PSBudWxsIHx8IGIgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgICAvLyBDaGVjayB3aGV0aGVyICdhJyBvciAnYicgaXMgYSBzdHJpbmcgKHByaW1pdGl2ZSBvciBvYmplY3QpLgogICAgICAgIC8vIFRoZSBjb25jYXRlbmF0aW9uIG9mIGFuIGVtcHR5IHN0cmluZyAoKycnKSBjb252ZXJ0cyBpdHMgYXJndW1lbnQgdG8gYSBzdHJpbmcncyBwcmltaXRpdmUuCiAgICAgICAgaWYgKGEuY29uc3RydWN0b3IgPT09IFN0cmluZykgcmV0dXJuIGErJycgPT09IGIrJyc7IC8vIGErJycgLSBpbiBjYXNlICdhJyBpcyBhIFN0cmluZyBvYmplY3QKICAgICAgICBpZiAoYi5jb25zdHJ1Y3RvciA9PT0gU3RyaW5nKSByZXR1cm4gYisnJyA9PT0gYSsnJzsgLy8gYisnJyAtIGluIGNhc2UgJ2InIGlzIGEgU3RyaW5nIG9iamVjdAogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGl0cyB0aGUgc3RyaW5nIGludG8gYW4gYXJyYXkgb2YgdmFsdWVzLCB0cmltbWluZyBlYWNoIHZhbHVlLiBBbiBlbXB0eSBhcnJheSBpcyByZXR1cm5lZCBmb3IgbnVsbHMgb3IgZW1wdHkKICAgICAqIHN0cmluZ3MKICAgICAqIEBwYXJhbSBzdHJpbmcKICAgICAqIEBwYXJhbSBzZXBhcmF0b3IKICAgICAqLwogICAgZnVuY3Rpb24gc3BsaXRWYWwoc3RyaW5nLCBzZXBhcmF0b3IpIHsKICAgICAgICB2YXIgdmFsLCBpLCBsOwogICAgICAgIGlmIChzdHJpbmcgPT09IG51bGwgfHwgc3RyaW5nLmxlbmd0aCA8IDEpIHJldHVybiBbXTsKICAgICAgICB2YWwgPSBzdHJpbmcuc3BsaXQoc2VwYXJhdG9yKTsKICAgICAgICBmb3IgKGkgPSAwLCBsID0gdmFsLmxlbmd0aDsgaSA8IGw7IGkgPSBpICsgMSkgdmFsW2ldID0gJC50cmltKHZhbFtpXSk7CiAgICAgICAgcmV0dXJuIHZhbDsKICAgIH0KCiAgICBmdW5jdGlvbiBnZXRTaWRlQm9yZGVyUGFkZGluZyhlbGVtZW50KSB7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQub3V0ZXJXaWR0aChmYWxzZSkgLSBlbGVtZW50LndpZHRoKCk7CiAgICB9CgogICAgZnVuY3Rpb24gaW5zdGFsbEtleVVwQ2hhbmdlRXZlbnQoZWxlbWVudCkgewogICAgICAgIHZhciBrZXk9ImtleXVwLWNoYW5nZS12YWx1ZSI7CiAgICAgICAgZWxlbWVudC5vbigia2V5ZG93biIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKCQuZGF0YShlbGVtZW50LCBrZXkpID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICQuZGF0YShlbGVtZW50LCBrZXksIGVsZW1lbnQudmFsKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWxlbWVudC5vbigia2V5dXAiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB2YWw9ICQuZGF0YShlbGVtZW50LCBrZXkpOwogICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQgJiYgZWxlbWVudC52YWwoKSAhPT0gdmFsKSB7CiAgICAgICAgICAgICAgICAkLnJlbW92ZURhdGEoZWxlbWVudCwga2V5KTsKICAgICAgICAgICAgICAgIGVsZW1lbnQudHJpZ2dlcigia2V5dXAtY2hhbmdlIik7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICAkZG9jdW1lbnQub24oIm1vdXNlbW92ZSIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgbGFzdE1vdXNlUG9zaXRpb24ueCA9IGUucGFnZVg7CiAgICAgICAgbGFzdE1vdXNlUG9zaXRpb24ueSA9IGUucGFnZVk7CiAgICB9KTsKCiAgICAvKioKICAgICAqIGZpbHRlcnMgbW91c2UgZXZlbnRzIHNvIGFuIGV2ZW50IGlzIGZpcmVkIG9ubHkgaWYgdGhlIG1vdXNlIG1vdmVkLgogICAgICoKICAgICAqIGZpbHRlcnMgb3V0IG1vdXNlIGV2ZW50cyB0aGF0IG9jY3VyIHdoZW4gbW91c2UgaXMgc3RhdGlvbmFyeSBidXQKICAgICAqIHRoZSBlbGVtZW50cyB1bmRlciB0aGUgcG9pbnRlciBhcmUgc2Nyb2xsZWQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGluc3RhbGxGaWx0ZXJlZE1vdXNlTW92ZShlbGVtZW50KSB7CiAgICAgICAgZWxlbWVudC5vbigibW91c2Vtb3ZlIiwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIGxhc3Rwb3MgPSBsYXN0TW91c2VQb3NpdGlvbjsKICAgICAgICAgICAgaWYgKGxhc3Rwb3MgPT09IHVuZGVmaW5lZCB8fCBsYXN0cG9zLnggIT09IGUucGFnZVggfHwgbGFzdHBvcy55ICE9PSBlLnBhZ2VZKSB7CiAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS50cmlnZ2VyKCJtb3VzZW1vdmUtZmlsdGVyZWQiLCBlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogRGVib3VuY2VzIGEgZnVuY3Rpb24uIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNhbGxzIHRoZSBvcmlnaW5hbCBmbiBmdW5jdGlvbiBvbmx5IGlmIG5vIGludm9jYXRpb25zIGhhdmUgYmVlbiBtYWRlCiAgICAgKiB3aXRoaW4gdGhlIGxhc3QgcXVpZXRNaWxsaXMgbWlsbGlzZWNvbmRzLgogICAgICoKICAgICAqIEBwYXJhbSBxdWlldE1pbGxpcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIGludm9raW5nIGZuCiAgICAgKiBAcGFyYW0gZm4gZnVuY3Rpb24gdG8gYmUgZGVib3VuY2VkCiAgICAgKiBAcGFyYW0gY3R4IG9iamVjdCB0byBiZSB1c2VkIGFzIHRoaXMgcmVmZXJlbmNlIHdpdGhpbiBmbgogICAgICogQHJldHVybiBkZWJvdW5jZWQgdmVyc2lvbiBvZiBmbgogICAgICovCiAgICBmdW5jdGlvbiBkZWJvdW5jZShxdWlldE1pbGxpcywgZm4sIGN0eCkgewogICAgICAgIGN0eCA9IGN0eCB8fCB1bmRlZmluZWQ7CiAgICAgICAgdmFyIHRpbWVvdXQ7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7CiAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dCk7CiAgICAgICAgICAgIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGZuLmFwcGx5KGN0eCwgYXJncyk7CiAgICAgICAgICAgIH0sIHF1aWV0TWlsbGlzKTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogQSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgYSB0aHVuawogICAgICogQHBhcmFtIGZvcm11bGEgZnVuY3Rpb24gdXNlZCB0byBsYXppbHkgaW5pdGlhbGl6ZSB0aGUgdGh1bmsKICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufQogICAgICovCiAgICBmdW5jdGlvbiB0aHVuayhmb3JtdWxhKSB7CiAgICAgICAgdmFyIGV2YWx1YXRlZCA9IGZhbHNlLAogICAgICAgICAgICB2YWx1ZTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChldmFsdWF0ZWQgPT09IGZhbHNlKSB7IHZhbHVlID0gZm9ybXVsYSgpOyBldmFsdWF0ZWQgPSB0cnVlOyB9CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICB9OwogICAgfTsKCiAgICBmdW5jdGlvbiBpbnN0YWxsRGVib3VuY2VkU2Nyb2xsKHRocmVzaG9sZCwgZWxlbWVudCkgewogICAgICAgIHZhciBub3RpZnkgPSBkZWJvdW5jZSh0aHJlc2hvbGQsIGZ1bmN0aW9uIChlKSB7IGVsZW1lbnQudHJpZ2dlcigic2Nyb2xsLWRlYm91bmNlZCIsIGUpO30pOwogICAgICAgIGVsZW1lbnQub24oInNjcm9sbCIsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIGlmIChpbmRleE9mKGUudGFyZ2V0LCBlbGVtZW50LmdldCgpKSA+PSAwKSBub3RpZnkoZSk7CiAgICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gZm9jdXMoJGVsKSB7CiAgICAgICAgaWYgKCRlbFswXSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkgcmV0dXJuOwoKICAgICAgICAvKiBzZXQgdGhlIGZvY3VzIGluIGEgMCB0aW1lb3V0IC0gdGhhdCB3YXkgdGhlIGZvY3VzIGlzIHNldCBhZnRlciB0aGUgcHJvY2Vzc2luZwogICAgICAgICAgICBvZiB0aGUgY3VycmVudCBldmVudCBoYXMgZmluaXNoZWQgLSB3aGljaCBzZWVtcyBsaWtlIHRoZSBvbmx5IHJlbGlhYmxlIHdheQogICAgICAgICAgICB0byBzZXQgZm9jdXMgKi8KICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGVsPSRlbFswXSwgcG9zPSRlbC52YWwoKS5sZW5ndGgsIHJhbmdlOwoKICAgICAgICAgICAgJGVsLmZvY3VzKCk7CgogICAgICAgICAgICAvKiBtYWtlIHN1cmUgZWwgcmVjZWl2ZWQgZm9jdXMgc28gd2UgZG8gbm90IGVycm9yIG91dCB3aGVuIHRyeWluZyB0byBtYW5pcHVsYXRlIHRoZSBjYXJldC4KICAgICAgICAgICAgICAgIHNvbWV0aW1lcyBtb2RhbHMgb3Igb3RoZXJzIGxpc3RlbmVycyBtYXkgc3RlYWwgaXQgYWZ0ZXIgaXRzIHNldCAqLwogICAgICAgICAgICBpZiAoJGVsLmlzKCI6dmlzaWJsZSIpICYmIGVsID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50KSB7CgogICAgICAgICAgICAgICAgLyogYWZ0ZXIgdGhlIGZvY3VzIGlzIHNldCBtb3ZlIHRoZSBjYXJldCB0byB0aGUgZW5kLCBuZWNlc3Nhcnkgd2hlbiB3ZSB2YWwoKQogICAgICAgICAgICAgICAgICAgIGp1c3QgYmVmb3JlIHNldHRpbmcgZm9jdXMgKi8KICAgICAgICAgICAgICAgIGlmKGVsLnNldFNlbGVjdGlvblJhbmdlKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGVsLnNldFNlbGVjdGlvblJhbmdlKHBvcywgcG9zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkgewogICAgICAgICAgICAgICAgICAgIHJhbmdlID0gZWwuY3JlYXRlVGV4dFJhbmdlKCk7CiAgICAgICAgICAgICAgICAgICAgcmFuZ2UuY29sbGFwc2UoZmFsc2UpOwogICAgICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwgMCk7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0Q3Vyc29ySW5mbyhlbCkgewogICAgICAgIGVsID0gJChlbClbMF07CiAgICAgICAgdmFyIG9mZnNldCA9IDA7CiAgICAgICAgdmFyIGxlbmd0aCA9IDA7CiAgICAgICAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZWwpIHsKICAgICAgICAgICAgb2Zmc2V0ID0gZWwuc2VsZWN0aW9uU3RhcnQ7CiAgICAgICAgICAgIGxlbmd0aCA9IGVsLnNlbGVjdGlvbkVuZCAtIG9mZnNldDsKICAgICAgICB9IGVsc2UgaWYgKCdzZWxlY3Rpb24nIGluIGRvY3VtZW50KSB7CiAgICAgICAgICAgIGVsLmZvY3VzKCk7CiAgICAgICAgICAgIHZhciBzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKICAgICAgICAgICAgbGVuZ3RoID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCkudGV4dC5sZW5ndGg7CiAgICAgICAgICAgIHNlbC5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC1lbC52YWx1ZS5sZW5ndGgpOwogICAgICAgICAgICBvZmZzZXQgPSBzZWwudGV4dC5sZW5ndGggLSBsZW5ndGg7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IG9mZnNldDogb2Zmc2V0LCBsZW5ndGg6IGxlbmd0aCB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGtpbGxFdmVudChldmVudCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICB9CiAgICBmdW5jdGlvbiBraWxsRXZlbnRJbW1lZGlhdGVseShldmVudCkgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CiAgICB9CgogICAgZnVuY3Rpb24gbWVhc3VyZVRleHRXaWR0aChlKSB7CiAgICAgICAgaWYgKCFzaXplcil7CiAgICAgICAgICAgIHZhciBzdHlsZSA9IGVbMF0uY3VycmVudFN0eWxlIHx8IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVbMF0sIG51bGwpOwogICAgICAgICAgICBzaXplciA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmNzcyh7CiAgICAgICAgICAgICAgICBwb3NpdGlvbjogImFic29sdXRlIiwKICAgICAgICAgICAgICAgIGxlZnQ6ICItMTAwMDBweCIsCiAgICAgICAgICAgICAgICB0b3A6ICItMTAwMDBweCIsCiAgICAgICAgICAgICAgICBkaXNwbGF5OiAibm9uZSIsCiAgICAgICAgICAgICAgICBmb250U2l6ZTogc3R5bGUuZm9udFNpemUsCiAgICAgICAgICAgICAgICBmb250RmFtaWx5OiBzdHlsZS5mb250RmFtaWx5LAogICAgICAgICAgICAgICAgZm9udFN0eWxlOiBzdHlsZS5mb250U3R5bGUsCiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiBzdHlsZS5mb250V2VpZ2h0LAogICAgICAgICAgICAgICAgbGV0dGVyU3BhY2luZzogc3R5bGUubGV0dGVyU3BhY2luZywKICAgICAgICAgICAgICAgIHRleHRUcmFuc2Zvcm06IHN0eWxlLnRleHRUcmFuc2Zvcm0sCiAgICAgICAgICAgICAgICB3aGl0ZVNwYWNlOiAibm93cmFwIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc2l6ZXIuYXR0cigiY2xhc3MiLCJzZWxlY3QyLXNpemVyIik7CiAgICAgICAgICAgICQoImJvZHkiKS5hcHBlbmQoc2l6ZXIpOwogICAgICAgIH0KICAgICAgICBzaXplci50ZXh0KGUudmFsKCkpOwogICAgICAgIHJldHVybiBzaXplci53aWR0aCgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHN5bmNDc3NDbGFzc2VzKGRlc3QsIHNyYywgYWRhcHRlcikgewogICAgICAgIHZhciBjbGFzc2VzLCByZXBsYWNlbWVudHMgPSBbXSwgYWRhcHRlZDsKCiAgICAgICAgY2xhc3NlcyA9IGRlc3QuYXR0cigiY2xhc3MiKTsKICAgICAgICBpZiAoY2xhc3NlcykgewogICAgICAgICAgICBjbGFzc2VzID0gJycgKyBjbGFzc2VzOyAvLyBmb3IgSUUgd2hpY2ggcmV0dXJucyBvYmplY3QKICAgICAgICAgICAgJChjbGFzc2VzLnNwbGl0KCIgIikpLmVhY2gyKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5kZXhPZigic2VsZWN0Mi0iKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgIHJlcGxhY2VtZW50cy5wdXNoKHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY2xhc3NlcyA9IHNyYy5hdHRyKCJjbGFzcyIpOwogICAgICAgIGlmIChjbGFzc2VzKSB7CiAgICAgICAgICAgIGNsYXNzZXMgPSAnJyArIGNsYXNzZXM7IC8vIGZvciBJRSB3aGljaCByZXR1cm5zIG9iamVjdAogICAgICAgICAgICAkKGNsYXNzZXMuc3BsaXQoIiAiKSkuZWFjaDIoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbmRleE9mKCJzZWxlY3QyLSIpICE9PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYWRhcHRlZCA9IGFkYXB0ZXIodGhpcyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFkYXB0ZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZW1lbnRzLnB1c2godGhpcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgZGVzdC5hdHRyKCJjbGFzcyIsIHJlcGxhY2VtZW50cy5qb2luKCIgIikpOwogICAgfQoKCiAgICBmdW5jdGlvbiBtYXJrTWF0Y2godGV4dCwgdGVybSwgbWFya3VwLCBlc2NhcGVNYXJrdXApIHsKICAgICAgICB2YXIgbWF0Y2g9c3RyaXBEaWFjcml0aWNzKHRleHQudG9VcHBlckNhc2UoKSkuaW5kZXhPZihzdHJpcERpYWNyaXRpY3ModGVybS50b1VwcGVyQ2FzZSgpKSksCiAgICAgICAgICAgIHRsPXRlcm0ubGVuZ3RoOwoKICAgICAgICBpZiAobWF0Y2g8MCkgewogICAgICAgICAgICBtYXJrdXAucHVzaChlc2NhcGVNYXJrdXAodGV4dCkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBtYXJrdXAucHVzaChlc2NhcGVNYXJrdXAodGV4dC5zdWJzdHJpbmcoMCwgbWF0Y2gpKSk7CiAgICAgICAgbWFya3VwLnB1c2goIjxzcGFuIGNsYXNzPSdzZWxlY3QyLW1hdGNoJz4iKTsKICAgICAgICBtYXJrdXAucHVzaChlc2NhcGVNYXJrdXAodGV4dC5zdWJzdHJpbmcobWF0Y2gsIG1hdGNoICsgdGwpKSk7CiAgICAgICAgbWFya3VwLnB1c2goIjwvc3Bhbj4iKTsKICAgICAgICBtYXJrdXAucHVzaChlc2NhcGVNYXJrdXAodGV4dC5zdWJzdHJpbmcobWF0Y2ggKyB0bCwgdGV4dC5sZW5ndGgpKSk7CiAgICB9CgogICAgZnVuY3Rpb24gZGVmYXVsdEVzY2FwZU1hcmt1cChtYXJrdXApIHsKICAgICAgICB2YXIgcmVwbGFjZV9tYXAgPSB7CiAgICAgICAgICAgICdcXCc6ICcmIzkyOycsCiAgICAgICAgICAgICcmJzogJyZhbXA7JywKICAgICAgICAgICAgJzwnOiAnJmx0OycsCiAgICAgICAgICAgICc+JzogJyZndDsnLAogICAgICAgICAgICAnIic6ICcmcXVvdDsnLAogICAgICAgICAgICAiJyI6ICcmIzM5OycsCiAgICAgICAgICAgICIvIjogJyYjNDc7JwogICAgICAgIH07CgogICAgICAgIHJldHVybiBTdHJpbmcobWFya3VwKS5yZXBsYWNlKC9bJjw+IidcL1xcXS9nLCBmdW5jdGlvbiAobWF0Y2gpIHsKICAgICAgICAgICAgcmV0dXJuIHJlcGxhY2VfbWFwW21hdGNoXTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFByb2R1Y2VzIGFuIGFqYXgtYmFzZWQgcXVlcnkgZnVuY3Rpb24KICAgICAqCiAgICAgKiBAcGFyYW0gb3B0aW9ucyBvYmplY3QgY29udGFpbmluZyBjb25maWd1cmF0aW9uIHBhcmFtdGVycwogICAgICogQHBhcmFtIG9wdGlvbnMucGFyYW1zIHBhcmFtZXRlciBtYXAgZm9yIHRoZSB0cmFuc3BvcnQgYWpheCBjYWxsLCBjYW4gY29udGFpbiBzdWNoIG9wdGlvbnMgYXMgY2FjaGUsIGpzb25wQ2FsbGJhY2ssIGV0Yy4gc2VlICQuYWpheAogICAgICogQHBhcmFtIG9wdGlvbnMudHJhbnNwb3J0IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGV4ZWN1dGUgdGhlIGFqYXggcmVxdWVzdC4gbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggcGFyYW1ldGVycyBzdXBwb3J0ZWQgYnkgJC5hamF4CiAgICAgKiBAcGFyYW0gb3B0aW9ucy51cmwgdXJsIGZvciB0aGUgZGF0YQogICAgICogQHBhcmFtIG9wdGlvbnMuZGF0YSBhIGZ1bmN0aW9uKHNlYXJjaFRlcm0sIHBhZ2VOdW1iZXIsIGNvbnRleHQpIHRoYXQgc2hvdWxkIHJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBmb3IgdGhlIGFib3ZlIHVybC4KICAgICAqIEBwYXJhbSBvcHRpb25zLmRhdGFUeXBlIHJlcXVlc3QgZGF0YSB0eXBlOiBhamF4LCBqc29ucCwgb3RoZXIgZGF0YXRhdHlwZXMgc3VwcG9ydGVkIGJ5IGpRdWVyeSdzICQuYWpheCBmdW5jdGlvbiBvciB0aGUgdHJhbnNwb3J0IGZ1bmN0aW9uIGlmIHNwZWNpZmllZAogICAgICogQHBhcmFtIG9wdGlvbnMucXVpZXRNaWxsaXMgKG9wdGlvbmFsKSBtaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgbWFraW5nIHRoZSBhamF4UmVxdWVzdCwgaGVscHMgZGVib3VuY2UgdGhlIGFqYXggZnVuY3Rpb24gaWYgaW52b2tlZCB0b28gb2Z0ZW4KICAgICAqIEBwYXJhbSBvcHRpb25zLnJlc3VsdHMgYSBmdW5jdGlvbihyZW1vdGVEYXRhLCBwYWdlTnVtYmVyKSB0aGF0IGNvbnZlcnRzIGRhdGEgcmV0dXJuZWQgZm9ybSB0aGUgcmVtb3RlIHJlcXVlc3QgdG8gdGhlIGZvcm1hdCBleHBlY3RlZCBieSBTZWxlY3QyLgogICAgICogICAgICBUaGUgZXhwZWN0ZWQgZm9ybWF0IGlzIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcga2V5czoKICAgICAqICAgICAgcmVzdWx0cyBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGNob2ljZXMKICAgICAqICAgICAgbW9yZSAob3B0aW9uYWwpIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZXJlIGFyZSBtb3JlIHJlc3VsdHMgYXZhaWxhYmxlCiAgICAgKiAgICAgIEV4YW1wbGU6IHtyZXN1bHRzOlt7aWQ6MSwgdGV4dDonUmVkJ30se2lkOjIsIHRleHQ6J0JsdWUnfV0sIG1vcmU6dHJ1ZX0KICAgICAqLwogICAgZnVuY3Rpb24gYWpheChvcHRpb25zKSB7CiAgICAgICAgdmFyIHRpbWVvdXQsIC8vIGN1cnJlbnQgc2NoZWR1bGVkIGJ1dCBub3QgeWV0IGV4ZWN1dGVkIHJlcXVlc3QKICAgICAgICAgICAgaGFuZGxlciA9IG51bGwsCiAgICAgICAgICAgIHF1aWV0TWlsbGlzID0gb3B0aW9ucy5xdWlldE1pbGxpcyB8fCAxMDAsCiAgICAgICAgICAgIGFqYXhVcmwgPSBvcHRpb25zLnVybCwKICAgICAgICAgICAgc2VsZiA9IHRoaXM7CgogICAgICAgIHJldHVybiBmdW5jdGlvbiAocXVlcnkpIHsKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lb3V0KTsKICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhLCAvLyBhamF4IGRhdGEgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICB1cmwgPSBhamF4VXJsLCAvLyBhamF4IHVybCBzdHJpbmcgb3IgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBvcHRpb25zLnRyYW5zcG9ydCB8fCAkLmZuLnNlbGVjdDIuYWpheERlZmF1bHRzLnRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAvLyBkZXByZWNhdGVkIC0gdG8gYmUgcmVtb3ZlZCBpbiA0LjAgIC0gdXNlIHBhcmFtcyBpbnN0ZWFkCiAgICAgICAgICAgICAgICAgICAgZGVwcmVjYXRlZCA9IHsKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogb3B0aW9ucy50eXBlIHx8ICdHRVQnLCAvLyBzZXQgdHlwZSBvZiByZXF1ZXN0IChHRVQgb3IgUE9TVCkKICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGU6IG9wdGlvbnMuY2FjaGUgfHwgZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzb25wQ2FsbGJhY2s6IG9wdGlvbnMuanNvbnBDYWxsYmFja3x8dW5kZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogb3B0aW9ucy5kYXRhVHlwZXx8Impzb24iCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBwYXJhbXMgPSAkLmV4dGVuZCh7fSwgJC5mbi5zZWxlY3QyLmFqYXhEZWZhdWx0cy5wYXJhbXMsIGRlcHJlY2F0ZWQpOwoKICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhID8gZGF0YS5jYWxsKHNlbGYsIHF1ZXJ5LnRlcm0sIHF1ZXJ5LnBhZ2UsIHF1ZXJ5LmNvbnRleHQpIDogbnVsbDsKICAgICAgICAgICAgICAgIHVybCA9ICh0eXBlb2YgdXJsID09PSAnZnVuY3Rpb24nKSA/IHVybC5jYWxsKHNlbGYsIHF1ZXJ5LnRlcm0sIHF1ZXJ5LnBhZ2UsIHF1ZXJ5LmNvbnRleHQpIDogdXJsOwoKICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyKSB7IGhhbmRsZXIuYWJvcnQoKTsgfQoKICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmFtcykgewogICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24ob3B0aW9ucy5wYXJhbXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQuZXh0ZW5kKHBhcmFtcywgb3B0aW9ucy5wYXJhbXMuY2FsbChzZWxmKSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJC5leHRlbmQocGFyYW1zLCBvcHRpb25zLnBhcmFtcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICQuZXh0ZW5kKHBhcmFtcywgewogICAgICAgICAgICAgICAgICAgIHVybDogdXJsLAogICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBvcHRpb25zLmRhdGFUeXBlLAogICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsCiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyAtIHJlcGxhY2UgcXVlcnkucGFnZSB3aXRoIHF1ZXJ5IHNvIHVzZXJzIGhhdmUgYWNjZXNzIHRvIHRlcm0sIHBhZ2UsIGV0Yy4KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBvcHRpb25zLnJlc3VsdHMoZGF0YSwgcXVlcnkucGFnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmNhbGxiYWNrKHJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgaGFuZGxlciA9IHRyYW5zcG9ydC5jYWxsKHNlbGYsIHBhcmFtcyk7CiAgICAgICAgICAgIH0sIHF1aWV0TWlsbGlzKTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogUHJvZHVjZXMgYSBxdWVyeSBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggYSBsb2NhbCBhcnJheQogICAgICoKICAgICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4gVGhlIG9wdGlvbnMgcGFyYW1ldGVyIGNhbiBlaXRoZXIgYmUgYW4gYXJyYXkgb3IgYW4KICAgICAqIG9iamVjdC4KICAgICAqCiAgICAgKiBJZiB0aGUgYXJyYXkgZm9ybSBpcyB1c2VkIGl0IGlzIGFzc3VtZWQgdGhhdCBpdCBjb250YWlucyBvYmplY3RzIHdpdGggJ2lkJyBhbmQgJ3RleHQnIGtleXMuCiAgICAgKgogICAgICogSWYgdGhlIG9iamVjdCBmb3JtIGlzIHVzZWQgdGkgaXMgYXNzdW1lZCB0aGF0IGl0IGNvbnRhaW5zICdkYXRhJyBhbmQgJ3RleHQnIGtleXMuIFRoZSAnZGF0YScga2V5IHNob3VsZCBjb250YWluCiAgICAgKiBhbiBhcnJheSBvZiBvYmplY3RzIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGNob2ljZXMuIFRoZXNlIG9iamVjdHMgbXVzdCBjb250YWluIGF0IGxlYXN0IGFuICdpZCcga2V5LiBUaGUgJ3RleHQnCiAgICAgKiBrZXkgY2FuIGVpdGhlciBiZSBhIFN0cmluZyBpbiB3aGljaCBjYXNlIGl0IGlzIGV4cGVjdGVkIHRoYXQgZWFjaCBlbGVtZW50IGluIHRoZSAnZGF0YScgYXJyYXkgaGFzIGEga2V5IHdpdGggdGhlCiAgICAgKiB2YWx1ZSBvZiAndGV4dCcgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIG1hdGNoIGNob2ljZXMuIEFsdGVybmF0aXZlbHksIHRleHQgY2FuIGJlIGEgZnVuY3Rpb24oaXRlbSkgdGhhdCBjYW4gZXh0cmFjdAogICAgICogdGhlIHRleHQuCiAgICAgKi8KICAgIGZ1bmN0aW9uIGxvY2FsKG9wdGlvbnMpIHsKICAgICAgICB2YXIgZGF0YSA9IG9wdGlvbnMsIC8vIGRhdGEgZWxlbWVudHMKICAgICAgICAgICAgZGF0YVRleHQsCiAgICAgICAgICAgIHRtcCwKICAgICAgICAgICAgdGV4dCA9IGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiAiIitpdGVtLnRleHQ7IH07IC8vIGZ1bmN0aW9uIHVzZWQgdG8gcmV0cmlldmUgdGhlIHRleHQgcG9ydGlvbiBvZiBhIGRhdGEgaXRlbSB0aGF0IGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgc2VhcmNoCgogICAgICAgICBpZiAoJC5pc0FycmF5KGRhdGEpKSB7CiAgICAgICAgICAgIHRtcCA9IGRhdGE7CiAgICAgICAgICAgIGRhdGEgPSB7IHJlc3VsdHM6IHRtcCB9OwogICAgICAgIH0KCiAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24oZGF0YSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRtcCA9IGRhdGE7CiAgICAgICAgICAgIGRhdGEgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRtcDsgfTsKICAgICAgICB9CgogICAgICAgIHZhciBkYXRhSXRlbSA9IGRhdGEoKTsKICAgICAgICBpZiAoZGF0YUl0ZW0udGV4dCkgewogICAgICAgICAgICB0ZXh0ID0gZGF0YUl0ZW0udGV4dDsKICAgICAgICAgICAgLy8gaWYgdGV4dCBpcyBub3QgYSBmdW5jdGlvbiB3ZSBhc3N1bWUgaXQgdG8gYmUgYSBrZXkgbmFtZQogICAgICAgICAgICBpZiAoISQuaXNGdW5jdGlvbih0ZXh0KSkgewogICAgICAgICAgICAgICAgZGF0YVRleHQgPSBkYXRhSXRlbS50ZXh0OyAvLyB3ZSBuZWVkIHRvIHN0b3JlIHRoaXMgaW4gYSBzZXBhcmF0ZSB2YXJpYWJsZSBiZWNhdXNlIGluIHRoZSBuZXh0IHN0ZXAgZGF0YSBnZXRzIHJlc2V0IGFuZCBkYXRhLnRleHQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgdGV4dCA9IGZ1bmN0aW9uIChpdGVtKSB7IHJldHVybiBpdGVtW2RhdGFUZXh0XTsgfTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChxdWVyeSkgewogICAgICAgICAgICB2YXIgdCA9IHF1ZXJ5LnRlcm0sIGZpbHRlcmVkID0geyByZXN1bHRzOiBbXSB9LCBwcm9jZXNzOwogICAgICAgICAgICBpZiAodCA9PT0gIiIpIHsKICAgICAgICAgICAgICAgIHF1ZXJ5LmNhbGxiYWNrKGRhdGEoKSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByb2Nlc3MgPSBmdW5jdGlvbihkYXR1bSwgY29sbGVjdGlvbikgewogICAgICAgICAgICAgICAgdmFyIGdyb3VwLCBhdHRyOwogICAgICAgICAgICAgICAgZGF0dW0gPSBkYXR1bVswXTsKICAgICAgICAgICAgICAgIGlmIChkYXR1bS5jaGlsZHJlbikgewogICAgICAgICAgICAgICAgICAgIGdyb3VwID0ge307CiAgICAgICAgICAgICAgICAgICAgZm9yIChhdHRyIGluIGRhdHVtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXR1bS5oYXNPd25Qcm9wZXJ0eShhdHRyKSkgZ3JvdXBbYXR0cl09ZGF0dW1bYXR0cl07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGdyb3VwLmNoaWxkcmVuPVtdOwogICAgICAgICAgICAgICAgICAgICQoZGF0dW0uY2hpbGRyZW4pLmVhY2gyKGZ1bmN0aW9uKGksIGNoaWxkRGF0dW0pIHsgcHJvY2VzcyhjaGlsZERhdHVtLCBncm91cC5jaGlsZHJlbik7IH0pOwogICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5jaGlsZHJlbi5sZW5ndGggfHwgcXVlcnkubWF0Y2hlcih0LCB0ZXh0KGdyb3VwKSwgZGF0dW0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChncm91cCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkubWF0Y2hlcih0LCB0ZXh0KGRhdHVtKSwgZGF0dW0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChkYXR1bSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwoKICAgICAgICAgICAgJChkYXRhKCkucmVzdWx0cykuZWFjaDIoZnVuY3Rpb24oaSwgZGF0dW0pIHsgcHJvY2VzcyhkYXR1bSwgZmlsdGVyZWQucmVzdWx0cyk7IH0pOwogICAgICAgICAgICBxdWVyeS5jYWxsYmFjayhmaWx0ZXJlZCk7CiAgICAgICAgfTsKICAgIH0KCiAgICAvLyBUT0RPIGphdmFkb2MKICAgIGZ1bmN0aW9uIHRhZ3MoZGF0YSkgewogICAgICAgIHZhciBpc0Z1bmMgPSAkLmlzRnVuY3Rpb24oZGF0YSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChxdWVyeSkgewogICAgICAgICAgICB2YXIgdCA9IHF1ZXJ5LnRlcm0sIGZpbHRlcmVkID0ge3Jlc3VsdHM6IFtdfTsKICAgICAgICAgICAgJChpc0Z1bmMgPyBkYXRhKCkgOiBkYXRhKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBpc09iamVjdCA9IHRoaXMudGV4dCAhPT0gdW5kZWZpbmVkLAogICAgICAgICAgICAgICAgICAgIHRleHQgPSBpc09iamVjdCA/IHRoaXMudGV4dCA6IHRoaXM7CiAgICAgICAgICAgICAgICBpZiAodCA9PT0gIiIgfHwgcXVlcnkubWF0Y2hlcih0LCB0ZXh0KSkgewogICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnJlc3VsdHMucHVzaChpc09iamVjdCA/IHRoaXMgOiB7aWQ6IHRoaXMsIHRleHQ6IHRoaXN9KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHF1ZXJ5LmNhbGxiYWNrKGZpbHRlcmVkKTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIHRoZSBmb3JtYXR0ZXIgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQuCiAgICAgKgogICAgICogVGhyb3dzIGFuIGVycm9yIGlmIGl0IGlzIG5vdCBhIGZ1bmN0aW9uLiBSZXR1cm5zIHRydWUgaWYgaXQgc2hvdWxkIGJlIHVzZWQsCiAgICAgKiBmYWxzZSBpZiBubyBmb3JtYXR0aW5nIHNob3VsZCBiZSBwZXJmb3JtZWQuCiAgICAgKgogICAgICogQHBhcmFtIGZvcm1hdHRlcgogICAgICovCiAgICBmdW5jdGlvbiBjaGVja0Zvcm1hdHRlcihmb3JtYXR0ZXIsIGZvcm1hdHRlck5hbWUpIHsKICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKGZvcm1hdHRlcikpIHJldHVybiB0cnVlOwogICAgICAgIGlmICghZm9ybWF0dGVyKSByZXR1cm4gZmFsc2U7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGZvcm1hdHRlck5hbWUgKyIgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGEgZmFsc3kgdmFsdWUiKTsKICAgIH0KCiAgICBmdW5jdGlvbiBldmFsdWF0ZSh2YWwpIHsKICAgICAgICByZXR1cm4gJC5pc0Z1bmN0aW9uKHZhbCkgPyB2YWwoKSA6IHZhbDsKICAgIH0KCiAgICBmdW5jdGlvbiBjb3VudFJlc3VsdHMocmVzdWx0cykgewogICAgICAgIHZhciBjb3VudCA9IDA7CiAgICAgICAgJC5lYWNoKHJlc3VsdHMsIGZ1bmN0aW9uKGksIGl0ZW0pIHsKICAgICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgIGNvdW50ICs9IGNvdW50UmVzdWx0cyhpdGVtLmNoaWxkcmVuKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gY291bnQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZWZhdWx0IHRva2VuaXplci4gVGhpcyBmdW5jdGlvbiB1c2VzIGJyZWFrcyB0aGUgaW5wdXQgb24gc3Vic3RyaW5nIG1hdGNoIG9mIGFueSBzdHJpbmcgZnJvbSB0aGUKICAgICAqIG9wdHMudG9rZW5TZXBhcmF0b3JzIGFycmF5IGFuZCB1c2VzIG9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlIHRvIGNyZWF0ZSB0aGUgY2hvaWNlIG9iamVjdC4gQm90aCBvZiB0aG9zZQogICAgICogdHdvIG9wdGlvbnMgaGF2ZSB0byBiZSBkZWZpbmVkIGluIG9yZGVyIGZvciB0aGUgdG9rZW5pemVyIHRvIHdvcmsuCiAgICAgKgogICAgICogQHBhcmFtIGlucHV0IHRleHQgdXNlciBoYXMgdHlwZWQgc28gZmFyIG9yIHBhc3RlZCBpbnRvIHRoZSBzZWFyY2ggZmllbGQKICAgICAqIEBwYXJhbSBzZWxlY3Rpb24gY3VycmVudGx5IHNlbGVjdGVkIGNob2ljZXMKICAgICAqIEBwYXJhbSBzZWxlY3RDYWxsYmFjayBmdW5jdGlvbihjaG9pY2UpIGNhbGxiYWNrIHRobyBhZGQgdGhlIGNob2ljZSB0byBzZWxlY3Rpb24KICAgICAqIEBwYXJhbSBvcHRzIHNlbGVjdDIncyBvcHRzCiAgICAgKiBAcmV0dXJuIHVuZGVmaW5lZC9udWxsIHRvIGxlYXZlIHRoZSBjdXJyZW50IGlucHV0IHVuY2hhbmdlZCwgb3IgYSBzdHJpbmcgdG8gY2hhbmdlIHRoZSBpbnB1dCB0byB0aGUgcmV0dXJuZWQgdmFsdWUKICAgICAqLwogICAgZnVuY3Rpb24gZGVmYXVsdFRva2VuaXplcihpbnB1dCwgc2VsZWN0aW9uLCBzZWxlY3RDYWxsYmFjaywgb3B0cykgewogICAgICAgIHZhciBvcmlnaW5hbCA9IGlucHV0LCAvLyBzdG9yZSB0aGUgb3JpZ2luYWwgc28gd2UgY2FuIGNvbXBhcmUgYW5kIGtub3cgaWYgd2UgbmVlZCB0byB0ZWxsIHRoZSBzZWFyY2ggdG8gdXBkYXRlIGl0cyB0ZXh0CiAgICAgICAgICAgIGR1cGUgPSBmYWxzZSwgLy8gY2hlY2sgZm9yIHdoZXRoZXIgYSB0b2tlbiB3ZSBleHRyYWN0ZWQgcmVwcmVzZW50cyBhIGR1cGxpY2F0ZSBzZWxlY3RlZCBjaG9pY2UKICAgICAgICAgICAgdG9rZW4sIC8vIHRva2VuCiAgICAgICAgICAgIGluZGV4LCAvLyBwb3NpdGlvbiBhdCB3aGljaCB0aGUgc2VwYXJhdG9yIHdhcyBmb3VuZAogICAgICAgICAgICBpLCBsLCAvLyBsb29waW5nIHZhcmlhYmxlcwogICAgICAgICAgICBzZXBhcmF0b3I7IC8vIHRoZSBtYXRjaGVkIHNlcGFyYXRvcgoKICAgICAgICBpZiAoIW9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlIHx8ICFvcHRzLnRva2VuU2VwYXJhdG9ycyB8fCBvcHRzLnRva2VuU2VwYXJhdG9ycy5sZW5ndGggPCAxKSByZXR1cm4gdW5kZWZpbmVkOwoKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBpbmRleCA9IC0xOwoKICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IG9wdHMudG9rZW5TZXBhcmF0b3JzLmxlbmd0aDsgaSA8IGw7IGkrKykgewogICAgICAgICAgICAgICAgc2VwYXJhdG9yID0gb3B0cy50b2tlblNlcGFyYXRvcnNbaV07CiAgICAgICAgICAgICAgICBpbmRleCA9IGlucHV0LmluZGV4T2Yoc2VwYXJhdG9yKTsKICAgICAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSBicmVhazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkgYnJlYWs7IC8vIGRpZCBub3QgZmluZCBhbnkgdG9rZW4gc2VwYXJhdG9yIGluIHRoZSBpbnB1dCBzdHJpbmcsIGJhaWwKCiAgICAgICAgICAgIHRva2VuID0gaW5wdXQuc3Vic3RyaW5nKDAsIGluZGV4KTsKICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5zdWJzdHJpbmcoaW5kZXggKyBzZXBhcmF0b3IubGVuZ3RoKTsKCiAgICAgICAgICAgIGlmICh0b2tlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICB0b2tlbiA9IG9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlLmNhbGwodGhpcywgdG9rZW4sIHNlbGVjdGlvbik7CiAgICAgICAgICAgICAgICBpZiAodG9rZW4gIT09IHVuZGVmaW5lZCAmJiB0b2tlbiAhPT0gbnVsbCAmJiBvcHRzLmlkKHRva2VuKSAhPT0gdW5kZWZpbmVkICYmIG9wdHMuaWQodG9rZW4pICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgZHVwZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBzZWxlY3Rpb24ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbChvcHRzLmlkKHRva2VuKSwgb3B0cy5pZChzZWxlY3Rpb25baV0pKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwZSA9IHRydWU7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoIWR1cGUpIHNlbGVjdENhbGxiYWNrKHRva2VuKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKG9yaWdpbmFsIT09aW5wdXQpIHJldHVybiBpbnB1dDsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgY2xhc3MKICAgICAqCiAgICAgKiBAcGFyYW0gc3VwZXJDbGFzcwogICAgICogQHBhcmFtIG1ldGhvZHMKICAgICAqLwogICAgZnVuY3Rpb24gY2xhenooU3VwZXJDbGFzcywgbWV0aG9kcykgewogICAgICAgIHZhciBjb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHt9OwogICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBTdXBlckNsYXNzOwogICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yOwogICAgICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5wYXJlbnQgPSBTdXBlckNsYXNzLnByb3RvdHlwZTsKICAgICAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSAkLmV4dGVuZChjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIG1ldGhvZHMpOwogICAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgIH0KCiAgICBBYnN0cmFjdFNlbGVjdDIgPSBjbGF6eihPYmplY3QsIHsKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBiaW5kOiBmdW5jdGlvbiAoZnVuYykgewogICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHNlbGYsIGFyZ3VtZW50cyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBpbml0OiBmdW5jdGlvbiAob3B0cykgewogICAgICAgICAgICB2YXIgcmVzdWx0cywgc2VhcmNoLCByZXN1bHRzU2VsZWN0b3IgPSAiLnNlbGVjdDItcmVzdWx0cyIsIGRpc2FibGVkLCByZWFkb25seTsKCiAgICAgICAgICAgIC8vIHByZXBhcmUgb3B0aW9ucwogICAgICAgICAgICB0aGlzLm9wdHMgPSBvcHRzID0gdGhpcy5wcmVwYXJlT3B0cyhvcHRzKTsKCiAgICAgICAgICAgIHRoaXMuaWQ9b3B0cy5pZDsKCiAgICAgICAgICAgIC8vIGRlc3Ryb3kgaWYgY2FsbGVkIG9uIGFuIGV4aXN0aW5nIGNvbXBvbmVudAogICAgICAgICAgICBpZiAob3B0cy5lbGVtZW50LmRhdGEoInNlbGVjdDIiKSAhPT0gdW5kZWZpbmVkICYmCiAgICAgICAgICAgICAgICBvcHRzLmVsZW1lbnQuZGF0YSgic2VsZWN0MiIpICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBvcHRzLmVsZW1lbnQuZGF0YSgic2VsZWN0MiIpLmRlc3Ryb3koKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSB0aGlzLmNyZWF0ZUNvbnRhaW5lcigpOwoKICAgICAgICAgICAgdGhpcy5jb250YWluZXJJZD0iczJpZF8iKyhvcHRzLmVsZW1lbnQuYXR0cigiaWQiKSB8fCAiYXV0b2dlbiIrbmV4dFVpZCgpKTsKICAgICAgICAgICAgdGhpcy5jb250YWluZXJTZWxlY3Rvcj0iIyIrdGhpcy5jb250YWluZXJJZC5yZXBsYWNlKC8oWzsmLFwuXCtcKlx+JzoiXCFcXiMkJUBcW1xdXChcKT0+XHxdKS9nLCAnXFwkMScpOwogICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hdHRyKCJpZCIsIHRoaXMuY29udGFpbmVySWQpOwoKICAgICAgICAgICAgLy8gY2FjaGUgdGhlIGJvZHkgc28gZnV0dXJlIGxvb2t1cHMgYXJlIGNoZWFwCiAgICAgICAgICAgIHRoaXMuYm9keSA9IHRodW5rKGZ1bmN0aW9uKCkgeyByZXR1cm4gb3B0cy5lbGVtZW50LmNsb3Nlc3QoImJvZHkiKTsgfSk7CgogICAgICAgICAgICBzeW5jQ3NzQ2xhc3Nlcyh0aGlzLmNvbnRhaW5lciwgdGhpcy5vcHRzLmVsZW1lbnQsIHRoaXMub3B0cy5hZGFwdENvbnRhaW5lckNzc0NsYXNzKTsKCiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmF0dHIoInN0eWxlIiwgb3B0cy5lbGVtZW50LmF0dHIoInN0eWxlIikpOwogICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5jc3MoZXZhbHVhdGUob3B0cy5jb250YWluZXJDc3MpKTsKICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoZXZhbHVhdGUob3B0cy5jb250YWluZXJDc3NDbGFzcykpOwoKICAgICAgICAgICAgdGhpcy5lbGVtZW50VGFiSW5kZXggPSB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJ0YWJpbmRleCIpOwoKICAgICAgICAgICAgLy8gc3dhcCBjb250YWluZXIgZm9yIHRoZSBlbGVtZW50CiAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50CiAgICAgICAgICAgICAgICAuZGF0YSgic2VsZWN0MiIsIHRoaXMpCiAgICAgICAgICAgICAgICAuYXR0cigidGFiaW5kZXgiLCAiLTEiKQogICAgICAgICAgICAgICAgLmJlZm9yZSh0aGlzLmNvbnRhaW5lcikKICAgICAgICAgICAgICAgIC5vbigiY2xpY2suc2VsZWN0MiIsIGtpbGxFdmVudCk7IC8vIGRvIG5vdCBsZWFrIGNsaWNrIGV2ZW50cwoKICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZGF0YSgic2VsZWN0MiIsIHRoaXMpOwoKICAgICAgICAgICAgdGhpcy5kcm9wZG93biA9IHRoaXMuY29udGFpbmVyLmZpbmQoIi5zZWxlY3QyLWRyb3AiKTsKCiAgICAgICAgICAgIHN5bmNDc3NDbGFzc2VzKHRoaXMuZHJvcGRvd24sIHRoaXMub3B0cy5lbGVtZW50LCB0aGlzLm9wdHMuYWRhcHREcm9wZG93bkNzc0NsYXNzKTsKCiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uYWRkQ2xhc3MoZXZhbHVhdGUob3B0cy5kcm9wZG93bkNzc0NsYXNzKSk7CiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZGF0YSgic2VsZWN0MiIsIHRoaXMpOwogICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9uKCJjbGljayIsIGtpbGxFdmVudCk7CgogICAgICAgICAgICB0aGlzLnJlc3VsdHMgPSByZXN1bHRzID0gdGhpcy5jb250YWluZXIuZmluZChyZXN1bHRzU2VsZWN0b3IpOwogICAgICAgICAgICB0aGlzLnNlYXJjaCA9IHNlYXJjaCA9IHRoaXMuY29udGFpbmVyLmZpbmQoImlucHV0LnNlbGVjdDItaW5wdXQiKTsKCiAgICAgICAgICAgIHRoaXMucXVlcnlDb3VudCA9IDA7CiAgICAgICAgICAgIHRoaXMucmVzdWx0c1BhZ2UgPSAwOwogICAgICAgICAgICB0aGlzLmNvbnRleHQgPSBudWxsOwoKICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyCiAgICAgICAgICAgIHRoaXMuaW5pdENvbnRhaW5lcigpOwoKICAgICAgICAgICAgdGhpcy5jb250YWluZXIub24oImNsaWNrIiwga2lsbEV2ZW50KTsKCiAgICAgICAgICAgIGluc3RhbGxGaWx0ZXJlZE1vdXNlTW92ZSh0aGlzLnJlc3VsdHMpOwogICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9uKCJtb3VzZW1vdmUtZmlsdGVyZWQgdG91Y2hzdGFydCB0b3VjaG1vdmUgdG91Y2hlbmQiLCByZXN1bHRzU2VsZWN0b3IsIHRoaXMuYmluZCh0aGlzLmhpZ2hsaWdodFVuZGVyRXZlbnQpKTsKCiAgICAgICAgICAgIGluc3RhbGxEZWJvdW5jZWRTY3JvbGwoODAsIHRoaXMucmVzdWx0cyk7CiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub24oInNjcm9sbC1kZWJvdW5jZWQiLCByZXN1bHRzU2VsZWN0b3IsIHRoaXMuYmluZCh0aGlzLmxvYWRNb3JlSWZOZWVkZWQpKTsKCiAgICAgICAgICAgIC8vIGRvIG5vdCBwcm9wYWdhdGUgY2hhbmdlIGV2ZW50IGZyb20gdGhlIHNlYXJjaCBmaWVsZCBvdXQgb2YgdGhlIGNvbXBvbmVudAogICAgICAgICAgICAkKHRoaXMuY29udGFpbmVyKS5vbigiY2hhbmdlIiwgIi5zZWxlY3QyLWlucHV0IiwgZnVuY3Rpb24oZSkge2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSk7CiAgICAgICAgICAgICQodGhpcy5kcm9wZG93bikub24oImNoYW5nZSIsICIuc2VsZWN0Mi1pbnB1dCIsIGZ1bmN0aW9uKGUpIHtlLnN0b3BQcm9wYWdhdGlvbigpO30pOwoKICAgICAgICAgICAgLy8gaWYganF1ZXJ5Lm1vdXNld2hlZWwgcGx1Z2luIGlzIGluc3RhbGxlZCB3ZSBjYW4gcHJldmVudCBvdXQtb2YtYm91bmRzIHNjcm9sbGluZyBvZiByZXN1bHRzIHZpYSBtb3VzZXdoZWVsCiAgICAgICAgICAgIGlmICgkLmZuLm1vdXNld2hlZWwpIHsKICAgICAgICAgICAgICAgIHJlc3VsdHMubW91c2V3aGVlbChmdW5jdGlvbiAoZSwgZGVsdGEsIGRlbHRhWCwgZGVsdGFZKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRvcCA9IHJlc3VsdHMuc2Nyb2xsVG9wKCksIGhlaWdodDsKICAgICAgICAgICAgICAgICAgICBpZiAoZGVsdGFZID4gMCAmJiB0b3AgLSBkZWx0YVkgPD0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLnNjcm9sbFRvcCgwKTsKICAgICAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVsdGFZIDwgMCAmJiByZXN1bHRzLmdldCgwKS5zY3JvbGxIZWlnaHQgLSByZXN1bHRzLnNjcm9sbFRvcCgpICsgZGVsdGFZIDw9IHJlc3VsdHMuaGVpZ2h0KCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5zY3JvbGxUb3AocmVzdWx0cy5nZXQoMCkuc2Nyb2xsSGVpZ2h0IC0gcmVzdWx0cy5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5zdGFsbEtleVVwQ2hhbmdlRXZlbnQoc2VhcmNoKTsKICAgICAgICAgICAgc2VhcmNoLm9uKCJrZXl1cC1jaGFuZ2UgaW5wdXQgcGFzdGUiLCB0aGlzLmJpbmQodGhpcy51cGRhdGVSZXN1bHRzKSk7CiAgICAgICAgICAgIHNlYXJjaC5vbigiZm9jdXMiLCBmdW5jdGlvbiAoKSB7IHNlYXJjaC5hZGRDbGFzcygic2VsZWN0Mi1mb2N1c2VkIik7IH0pOwogICAgICAgICAgICBzZWFyY2gub24oImJsdXIiLCBmdW5jdGlvbiAoKSB7IHNlYXJjaC5yZW1vdmVDbGFzcygic2VsZWN0Mi1mb2N1c2VkIik7fSk7CgogICAgICAgICAgICB0aGlzLmRyb3Bkb3duLm9uKCJtb3VzZXVwIiwgcmVzdWx0c1NlbGVjdG9yLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc2VsZWN0Mi1yZXN1bHQtc2VsZWN0YWJsZSIpLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodFVuZGVyRXZlbnQoZSk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RIaWdobGlnaHRlZChlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgLy8gdHJhcCBhbGwgbW91c2UgZXZlbnRzIGZyb20gbGVhdmluZyB0aGUgZHJvcGRvd24uIHNvbWV0aW1lcyB0aGVyZSBtYXkgYmUgYSBtb2RhbCB0aGF0IGlzIGxpc3RlbmluZwogICAgICAgICAgICAvLyBmb3IgbW91c2UgZXZlbnRzIG91dHNpZGUgb2YgaXRzZWxmIHNvIGl0IGNhbiBjbG9zZSBpdHNlbGYuIHNpbmNlIHRoZSBkcm9wZG93biBpcyBub3cgb3V0c2lkZSB0aGUgc2VsZWN0MidzCiAgICAgICAgICAgIC8vIGRvbSBpdCB3aWxsIHRyaWdnZXIgdGhlIHBvcHVwIGNsb3NlLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50CiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24ub24oImNsaWNrIG1vdXNldXAgbW91c2Vkb3duIiwgZnVuY3Rpb24gKGUpIHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgfSk7CgogICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRoaXMub3B0cy5pbml0U2VsZWN0aW9uKSkgewogICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBzZWxlY3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHNvdXJjZSBlbGVtZW50CiAgICAgICAgICAgICAgICB0aGlzLmluaXRTZWxlY3Rpb24oKTsKCiAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdXNlciBoYXMgcHJvdmlkZWQgYSBmdW5jdGlvbiB0aGF0IGNhbiBzZXQgc2VsZWN0aW9uIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgc291cmNlIGVsZW1lbnQKICAgICAgICAgICAgICAgIC8vIHdlIG1vbml0b3IgdGhlIGNoYW5nZSBldmVudCBvbiB0aGUgZWxlbWVudCBhbmQgdHJpZ2dlciBpdCwgYWxsb3dpbmcgZm9yIHR3byB3YXkgc3luY2hyb25pemF0aW9uCiAgICAgICAgICAgICAgICB0aGlzLm1vbml0b3JTb3VyY2UoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKG9wdHMubWF4aW11bUlucHV0TGVuZ3RoICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5hdHRyKCJtYXhsZW5ndGgiLCBvcHRzLm1heGltdW1JbnB1dExlbmd0aCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHZhciBkaXNhYmxlZCA9IG9wdHMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIpOwogICAgICAgICAgICBpZiAoZGlzYWJsZWQgPT09IHVuZGVmaW5lZCkgZGlzYWJsZWQgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5lbmFibGUoIWRpc2FibGVkKTsKCiAgICAgICAgICAgIHZhciByZWFkb25seSA9IG9wdHMuZWxlbWVudC5wcm9wKCJyZWFkb25seSIpOwogICAgICAgICAgICBpZiAocmVhZG9ubHkgPT09IHVuZGVmaW5lZCkgcmVhZG9ubHkgPSBmYWxzZTsKICAgICAgICAgICAgdGhpcy5yZWFkb25seShyZWFkb25seSk7CgogICAgICAgICAgICAvLyBDYWxjdWxhdGUgc2l6ZSBvZiBzY3JvbGxiYXIKICAgICAgICAgICAgc2Nyb2xsQmFyRGltZW5zaW9ucyA9IHNjcm9sbEJhckRpbWVuc2lvbnMgfHwgbWVhc3VyZVNjcm9sbGJhcigpOwoKICAgICAgICAgICAgdGhpcy5hdXRvZm9jdXMgPSBvcHRzLmVsZW1lbnQucHJvcCgiYXV0b2ZvY3VzIik7CiAgICAgICAgICAgIG9wdHMuZWxlbWVudC5wcm9wKCJhdXRvZm9jdXMiLCBmYWxzZSk7CiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9mb2N1cykgdGhpcy5mb2N1cygpOwoKICAgICAgICAgICAgdGhpcy5uZXh0U2VhcmNoVGVybSA9IHVuZGVmaW5lZDsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQ9dGhpcy5vcHRzLmVsZW1lbnQsIHNlbGVjdDIgPSBlbGVtZW50LmRhdGEoInNlbGVjdDIiKTsKCiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKCiAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5T2JzZXJ2ZXIpIHsgZGVsZXRlIHRoaXMucHJvcGVydHlPYnNlcnZlcjsgdGhpcy5wcm9wZXJ0eU9ic2VydmVyID0gbnVsbDsgfQoKICAgICAgICAgICAgaWYgKHNlbGVjdDIgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgc2VsZWN0Mi5jb250YWluZXIucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICBzZWxlY3QyLmRyb3Bkb3duLnJlbW92ZSgpOwogICAgICAgICAgICAgICAgZWxlbWVudAogICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygic2VsZWN0Mi1vZmZzY3JlZW4iKQogICAgICAgICAgICAgICAgICAgIC5yZW1vdmVEYXRhKCJzZWxlY3QyIikKICAgICAgICAgICAgICAgICAgICAub2ZmKCIuc2VsZWN0MiIpCiAgICAgICAgICAgICAgICAgICAgLnByb3AoImF1dG9mb2N1cyIsIHRoaXMuYXV0b2ZvY3VzIHx8IGZhbHNlKTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmVsZW1lbnRUYWJJbmRleCkgewogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXR0cih7dGFiaW5kZXg6IHRoaXMuZWxlbWVudFRhYkluZGV4fSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cigidGFiaW5kZXgiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsZW1lbnQuc2hvdygpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBvcHRpb25Ub0RhdGE6IGZ1bmN0aW9uKGVsZW1lbnQpIHsKICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXMoIm9wdGlvbiIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIGlkOmVsZW1lbnQucHJvcCgidmFsdWUiKSwKICAgICAgICAgICAgICAgICAgICB0ZXh0OmVsZW1lbnQudGV4dCgpLAogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgY3NzOiBlbGVtZW50LmF0dHIoImNsYXNzIiksCiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGVsZW1lbnQucHJvcCgiZGlzYWJsZWQiKSwKICAgICAgICAgICAgICAgICAgICBsb2NrZWQ6IGVxdWFsKGVsZW1lbnQuYXR0cigibG9ja2VkIiksICJsb2NrZWQiKSB8fCBlcXVhbChlbGVtZW50LmRhdGEoImxvY2tlZCIpLCB0cnVlKQogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzKCJvcHRncm91cCIpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgICAgIHRleHQ6ZWxlbWVudC5hdHRyKCJsYWJlbCIpLAogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOltdLAogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGVsZW1lbnQuZ2V0KCksCiAgICAgICAgICAgICAgICAgICAgY3NzOiBlbGVtZW50LmF0dHIoImNsYXNzIikKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIHByZXBhcmVPcHRzOiBmdW5jdGlvbiAob3B0cykgewogICAgICAgICAgICB2YXIgZWxlbWVudCwgc2VsZWN0LCBpZEtleSwgYWpheFVybCwgc2VsZiA9IHRoaXM7CgogICAgICAgICAgICBlbGVtZW50ID0gb3B0cy5lbGVtZW50OwoKICAgICAgICAgICAgaWYgKGVsZW1lbnQuZ2V0KDApLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gInNlbGVjdCIpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ID0gc2VsZWN0ID0gb3B0cy5lbGVtZW50OwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2VsZWN0KSB7CiAgICAgICAgICAgICAgICAvLyB0aGVzZSBvcHRpb25zIGFyZSBub3QgYWxsb3dlZCB3aGVuIGF0dGFjaGVkIHRvIGEgc2VsZWN0IGJlY2F1c2UgdGhleSBhcmUgcGlja2VkIHVwIG9mZiB0aGUgZWxlbWVudCBpdHNlbGYKICAgICAgICAgICAgICAgICQuZWFjaChbImlkIiwgIm11bHRpcGxlIiwgImFqYXgiLCAicXVlcnkiLCAiY3JlYXRlU2VhcmNoQ2hvaWNlIiwgImluaXRTZWxlY3Rpb24iLCAiZGF0YSIsICJ0YWdzIl0sIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyBpbiBvcHRzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiT3B0aW9uICciICsgdGhpcyArICInIGlzIG5vdCBhbGxvd2VkIGZvciBTZWxlY3QyIHdoZW4gYXR0YWNoZWQgdG8gYSA8c2VsZWN0PiBlbGVtZW50LiIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBvcHRzID0gJC5leHRlbmQoe30sIHsKICAgICAgICAgICAgICAgIHBvcHVsYXRlUmVzdWx0czogZnVuY3Rpb24oY29udGFpbmVyLCByZXN1bHRzLCBxdWVyeSkgewogICAgICAgICAgICAgICAgICAgIHZhciBwb3B1bGF0ZSwgIGRhdGEsIHJlc3VsdCwgY2hpbGRyZW4sIGlkPXRoaXMub3B0cy5pZDsKCiAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGU9ZnVuY3Rpb24ocmVzdWx0cywgY29udGFpbmVyLCBkZXB0aCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGksIGwsIHJlc3VsdCwgc2VsZWN0YWJsZSwgZGlzYWJsZWQsIGNvbXBvdW5kLCBub2RlLCBsYWJlbCwgaW5uZXJDb250YWluZXIsIGZvcm1hdHRlZDsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBvcHRzLnNvcnRSZXN1bHRzKHJlc3VsdHMsIGNvbnRhaW5lciwgcXVlcnkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IHJlc3VsdHMubGVuZ3RoOyBpIDwgbDsgaSA9IGkgKyAxKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0PXJlc3VsdHNbaV07CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgPSAocmVzdWx0LmRpc2FibGVkID09PSB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGFibGUgPSAoIWRpc2FibGVkKSAmJiAoaWQocmVzdWx0KSAhPT0gdW5kZWZpbmVkKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wb3VuZD1yZXN1bHQuY2hpbGRyZW4gJiYgcmVzdWx0LmNoaWxkcmVuLmxlbmd0aCA+IDA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZT0kKCI8bGk+PC9saT4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0cy1kZXB0LSIrZGVwdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hZGRDbGFzcygic2VsZWN0Mi1yZXN1bHQiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3Moc2VsZWN0YWJsZSA/ICJzZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlIiA6ICJzZWxlY3QyLXJlc3VsdC11bnNlbGVjdGFibGUiKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlZCkgeyBub2RlLmFkZENsYXNzKCJzZWxlY3QyLWRpc2FibGVkIik7IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb3VuZCkgeyBub2RlLmFkZENsYXNzKCJzZWxlY3QyLXJlc3VsdC13aXRoLWNoaWxkcmVuIik7IH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuYWRkQ2xhc3Moc2VsZi5vcHRzLmZvcm1hdFJlc3VsdENzc0NsYXNzKHJlc3VsdCkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWwuYWRkQ2xhc3MoInNlbGVjdDItcmVzdWx0LWxhYmVsIik7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVkPW9wdHMuZm9ybWF0UmVzdWx0KHJlc3VsdCwgbGFiZWwsIHF1ZXJ5LCBzZWxmLm9wdHMuZXNjYXBlTWFya3VwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb3JtYXR0ZWQhPT11bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbC5odG1sKGZvcm1hdHRlZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmQobGFiZWwpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb21wb3VuZCkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNvbnRhaW5lcj0kKCI8dWw+PC91bD4iKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1yZXN1bHQtc3ViIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wdWxhdGUocmVzdWx0LmNoaWxkcmVuLCBpbm5lckNvbnRhaW5lciwgZGVwdGgrMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmQoaW5uZXJDb250YWluZXIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuZGF0YSgic2VsZWN0Mi1kYXRhIiwgcmVzdWx0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmQobm9kZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICBwb3B1bGF0ZShyZXN1bHRzLCBjb250YWluZXIsIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCAkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIG9wdHMpOwoKICAgICAgICAgICAgaWYgKHR5cGVvZihvcHRzLmlkKSAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICAgICAgaWRLZXkgPSBvcHRzLmlkOwogICAgICAgICAgICAgICAgb3B0cy5pZCA9IGZ1bmN0aW9uIChlKSB7IHJldHVybiBlW2lkS2V5XTsgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCQuaXNBcnJheShvcHRzLmVsZW1lbnQuZGF0YSgic2VsZWN0MlRhZ3MiKSkpIHsKICAgICAgICAgICAgICAgIGlmICgidGFncyIgaW4gb3B0cykgewogICAgICAgICAgICAgICAgICAgIHRocm93ICJ0YWdzIHNwZWNpZmllZCBhcyBib3RoIGFuIGF0dHJpYnV0ZSAnZGF0YS1zZWxlY3QyLXRhZ3MnIGFuZCBpbiBvcHRpb25zIG9mIFNlbGVjdDIgIiArIG9wdHMuZWxlbWVudC5hdHRyKCJpZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgb3B0cy50YWdzPW9wdHMuZWxlbWVudC5kYXRhKCJzZWxlY3QyVGFncyIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoc2VsZWN0KSB7CiAgICAgICAgICAgICAgICBvcHRzLnF1ZXJ5ID0gdGhpcy5iaW5kKGZ1bmN0aW9uIChxdWVyeSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkYXRhID0geyByZXN1bHRzOiBbXSwgbW9yZTogZmFsc2UgfSwKICAgICAgICAgICAgICAgICAgICAgICAgdGVybSA9IHF1ZXJ5LnRlcm0sCiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLCBwbGFjZWhvbGRlck9wdGlvbiwgcHJvY2VzczsKCiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzcz1mdW5jdGlvbihlbGVtZW50LCBjb2xsZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBncm91cDsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXMoIm9wdGlvbiIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVlcnkubWF0Y2hlcih0ZXJtLCBlbGVtZW50LnRleHQoKSwgZWxlbWVudCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uLnB1c2goc2VsZi5vcHRpb25Ub0RhdGEoZWxlbWVudCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXMoIm9wdGdyb3VwIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwPXNlbGYub3B0aW9uVG9EYXRhKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jaGlsZHJlbigpLmVhY2gyKGZ1bmN0aW9uKGksIGVsbSkgeyBwcm9jZXNzKGVsbSwgZ3JvdXAuY2hpbGRyZW4pOyB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChncm91cC5jaGlsZHJlbi5sZW5ndGg+MCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24ucHVzaChncm91cCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbj1lbGVtZW50LmNoaWxkcmVuKCk7CgogICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSB0aGUgcGxhY2Vob2xkZXIgb3B0aW9uIGlmIHRoZXJlIGlzIG9uZQogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmdldFBsYWNlaG9sZGVyKCkgIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyT3B0aW9uID0gdGhpcy5nZXRQbGFjZWhvbGRlck9wdGlvbigpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAocGxhY2Vob2xkZXJPcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuPWNoaWxkcmVuLm5vdChwbGFjZWhvbGRlck9wdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLmVhY2gyKGZ1bmN0aW9uKGksIGVsbSkgeyBwcm9jZXNzKGVsbSwgZGF0YS5yZXN1bHRzKTsgfSk7CgogICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmNhbGxiYWNrKGRhdGEpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAvLyB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIGluc2lkZSB2YWwoKSB3ZSBjb25zdHJ1Y3QgY2hvaWNlcyBmcm9tIG9wdGlvbnMgYW5kIHRoZXJlIGlkIGlzIGhhcmRjb2RlZAogICAgICAgICAgICAgICAgb3B0cy5pZD1mdW5jdGlvbihlKSB7IHJldHVybiBlLmlkOyB9OwogICAgICAgICAgICAgICAgb3B0cy5mb3JtYXRSZXN1bHRDc3NDbGFzcyA9IGZ1bmN0aW9uKGRhdGEpIHsgcmV0dXJuIGRhdGEuY3NzOyB9OwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCEoInF1ZXJ5IiBpbiBvcHRzKSkgewoKICAgICAgICAgICAgICAgICAgICBpZiAoImFqYXgiIGluIG9wdHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYWpheFVybCA9IG9wdHMuZWxlbWVudC5kYXRhKCJhamF4LXVybCIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWpheFVybCAmJiBhamF4VXJsLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMuYWpheC51cmwgPSBhamF4VXJsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIG9wdHMucXVlcnkgPSBhamF4LmNhbGwob3B0cy5lbGVtZW50LCBvcHRzLmFqYXgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoImRhdGEiIGluIG9wdHMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5xdWVyeSA9IGxvY2FsKG9wdHMuZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgidGFncyIgaW4gb3B0cykgewogICAgICAgICAgICAgICAgICAgICAgICBvcHRzLnF1ZXJ5ID0gdGFncyhvcHRzLnRhZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0cy5jcmVhdGVTZWFyY2hDaG9pY2UgPT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cy5jcmVhdGVTZWFyY2hDaG9pY2UgPSBmdW5jdGlvbiAodGVybSkgeyByZXR1cm4ge2lkOiAkLnRyaW0odGVybSksIHRleHQ6ICQudHJpbSh0ZXJtKX07IH07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdHMuaW5pdFNlbGVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRzLmluaXRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoZWxlbWVudCwgY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFtdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoc3BsaXRWYWwoZWxlbWVudC52YWwoKSwgb3B0cy5zZXBhcmF0b3IpKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9iaiA9IHsgaWQ6IHRoaXMsIHRleHQ6IHRoaXMgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MgPSBvcHRzLnRhZ3M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkLmlzRnVuY3Rpb24odGFncykpIHRhZ3M9dGFncygpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRhZ3MpLmVhY2goZnVuY3Rpb24oKSB7IGlmIChlcXVhbCh0aGlzLmlkLCBvYmouaWQpKSB7IG9iaiA9IHRoaXM7IHJldHVybiBmYWxzZTsgfSB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKG9iaik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodHlwZW9mKG9wdHMucXVlcnkpICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgICAgICB0aHJvdyAicXVlcnkgZnVuY3Rpb24gbm90IGRlZmluZWQgZm9yIFNlbGVjdDIgIiArIG9wdHMuZWxlbWVudC5hdHRyKCJpZCIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gb3B0czsKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBNb25pdG9yIHRoZSBvcmlnaW5hbCBlbGVtZW50IGZvciBjaGFuZ2VzIGFuZCB1cGRhdGUgc2VsZWN0MiBhY2NvcmRpbmdseQogICAgICAgICAqLwogICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgbW9uaXRvclNvdXJjZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZWwgPSB0aGlzLm9wdHMuZWxlbWVudCwgc3luYzsKCiAgICAgICAgICAgIGVsLm9uKCJjaGFuZ2Uuc2VsZWN0MiIsIHRoaXMuYmluZChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5lbGVtZW50LmRhdGEoInNlbGVjdDItY2hhbmdlLXRyaWdnZXJlZCIpICE9PSB0cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0U2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgIHN5bmMgPSB0aGlzLmJpbmQoZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgICAgIHZhciBlbmFibGVkLCByZWFkb25seSwgc2VsZiA9IHRoaXM7CgogICAgICAgICAgICAgICAgLy8gc3luYyBlbmFibGVkIHN0YXRlCiAgICAgICAgICAgICAgICB2YXIgZGlzYWJsZWQgPSBlbC5wcm9wKCJkaXNhYmxlZCIpOwogICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkID09PSB1bmRlZmluZWQpIGRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZSghZGlzYWJsZWQpOwoKICAgICAgICAgICAgICAgIHZhciByZWFkb25seSA9IGVsLnByb3AoInJlYWRvbmx5Iik7CiAgICAgICAgICAgICAgICBpZiAocmVhZG9ubHkgPT09IHVuZGVmaW5lZCkgcmVhZG9ubHkgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHRoaXMucmVhZG9ubHkocmVhZG9ubHkpOwoKICAgICAgICAgICAgICAgIHN5bmNDc3NDbGFzc2VzKHRoaXMuY29udGFpbmVyLCB0aGlzLm9wdHMuZWxlbWVudCwgdGhpcy5vcHRzLmFkYXB0Q29udGFpbmVyQ3NzQ2xhc3MpOwogICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoZXZhbHVhdGUodGhpcy5vcHRzLmNvbnRhaW5lckNzc0NsYXNzKSk7CgogICAgICAgICAgICAgICAgc3luY0Nzc0NsYXNzZXModGhpcy5kcm9wZG93biwgdGhpcy5vcHRzLmVsZW1lbnQsIHRoaXMub3B0cy5hZGFwdERyb3Bkb3duQ3NzQ2xhc3MpOwogICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFzcyhldmFsdWF0ZSh0aGlzLm9wdHMuZHJvcGRvd25Dc3NDbGFzcykpOwoKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBtb3ppbGxhIGFuZCBJRQogICAgICAgICAgICBlbC5vbigicHJvcGVydHljaGFuZ2Uuc2VsZWN0MiBET01BdHRyTW9kaWZpZWQuc2VsZWN0MiIsIHN5bmMpOwoKCiAgICAgICAgICAgIC8vIGhvbGQgb250byBhIHJlZmVyZW5jZSBvZiB0aGUgY2FsbGJhY2sgdG8gd29yayBhcm91bmQgYSBjaHJvbWl1bSBidWcKICAgICAgICAgICAgaWYgKHRoaXMubXV0YXRpb25DYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICB0aGlzLm11dGF0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiAobXV0YXRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgbXV0YXRpb25zLmZvckVhY2goc3luYyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNhZmFyaSBhbmQgY2hyb21lCiAgICAgICAgICAgIGlmICh0eXBlb2YgV2ViS2l0TXV0YXRpb25PYnNlcnZlciAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BlcnR5T2JzZXJ2ZXIpIHsgZGVsZXRlIHRoaXMucHJvcGVydHlPYnNlcnZlcjsgdGhpcy5wcm9wZXJ0eU9ic2VydmVyID0gbnVsbDsgfQogICAgICAgICAgICAgICAgdGhpcy5wcm9wZXJ0eU9ic2VydmVyID0gbmV3IFdlYktpdE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5tdXRhdGlvbkNhbGxiYWNrKTsKICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydHlPYnNlcnZlci5vYnNlcnZlKGVsLmdldCgwKSwgeyBhdHRyaWJ1dGVzOnRydWUsIHN1YnRyZWU6ZmFsc2UgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIHRyaWdnZXJTZWxlY3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICAgICAgdmFyIGV2dCA9ICQuRXZlbnQoInNlbGVjdDItc2VsZWN0aW5nIiwgeyB2YWw6IHRoaXMuaWQoZGF0YSksIG9iamVjdDogZGF0YSB9KTsKICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcihldnQpOwogICAgICAgICAgICByZXR1cm4gIWV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBUcmlnZ2VycyB0aGUgY2hhbmdlIGV2ZW50IG9uIHRoZSBzb3VyY2UgZWxlbWVudAogICAgICAgICAqLwogICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgdHJpZ2dlckNoYW5nZTogZnVuY3Rpb24gKGRldGFpbHMpIHsKCiAgICAgICAgICAgIGRldGFpbHMgPSBkZXRhaWxzIHx8IHt9OwogICAgICAgICAgICBkZXRhaWxzPSAkLmV4dGVuZCh7fSwgZGV0YWlscywgeyB0eXBlOiAiY2hhbmdlIiwgdmFsOiB0aGlzLnZhbCgpIH0pOwogICAgICAgICAgICAvLyBwcmV2ZW50cyByZWN1cnNpdmUgdHJpZ2dlcmluZwogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5kYXRhKCJzZWxlY3QyLWNoYW5nZS10cmlnZ2VyZWQiLCB0cnVlKTsKICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcihkZXRhaWxzKTsKICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQuZGF0YSgic2VsZWN0Mi1jaGFuZ2UtdHJpZ2dlcmVkIiwgZmFsc2UpOwoKICAgICAgICAgICAgLy8gc29tZSB2YWxpZGF0aW9uIGZyYW1ld29ya3MgaWdub3JlIHRoZSBjaGFuZ2UgZXZlbnQgYW5kIGxpc3RlbiBpbnN0ZWFkIHRvIGtleXVwLCBjbGljayBmb3Igc2VsZWN0cwogICAgICAgICAgICAvLyBzbyBoZXJlIHdlIHRyaWdnZXIgdGhlIGNsaWNrIGV2ZW50IG1hbnVhbGx5CiAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LmNsaWNrKCk7CgogICAgICAgICAgICAvLyBWYWxpZGF0aW9uRW5naW5lIGlnbm9yZWEgdGhlIGNoYW5nZSBldmVudCBhbmQgbGlzdGVucyBpbnN0ZWFkIHRvIGJsdXIKICAgICAgICAgICAgLy8gc28gaGVyZSB3ZSB0cmlnZ2VyIHRoZSBibHVyIGV2ZW50IG1hbnVhbGx5IGlmIHNvIGRlc2lyZWQKICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5ibHVyT25DaGFuZ2UpCiAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5ibHVyKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy9hYnN0cmFjdAogICAgICAgIGlzSW50ZXJmYWNlRW5hYmxlZDogZnVuY3Rpb24oKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZW5hYmxlZEludGVyZmFjZSA9PT0gdHJ1ZTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGVuYWJsZUludGVyZmFjZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBlbmFibGVkID0gdGhpcy5fZW5hYmxlZCAmJiAhdGhpcy5fcmVhZG9ubHksCiAgICAgICAgICAgICAgICBkaXNhYmxlZCA9ICFlbmFibGVkOwoKICAgICAgICAgICAgaWYgKGVuYWJsZWQgPT09IHRoaXMuZW5hYmxlZEludGVyZmFjZSkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgdGhpcy5jb250YWluZXIudG9nZ2xlQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLWRpc2FibGVkIiwgZGlzYWJsZWQpOwogICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICAgIHRoaXMuZW5hYmxlZEludGVyZmFjZSA9IGVuYWJsZWQ7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGVuYWJsZTogZnVuY3Rpb24oZW5hYmxlZCkgewogICAgICAgICAgICBpZiAoZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSBlbmFibGVkID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQgPT09IGVuYWJsZWQpIHJldHVybjsKICAgICAgICAgICAgdGhpcy5fZW5hYmxlZCA9IGVuYWJsZWQ7CgogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5wcm9wKCJkaXNhYmxlZCIsICFlbmFibGVkKTsKICAgICAgICAgICAgdGhpcy5lbmFibGVJbnRlcmZhY2UoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGRpc2FibGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmVuYWJsZShmYWxzZSk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICByZWFkb25seTogZnVuY3Rpb24oZW5hYmxlZCkgewogICAgICAgICAgICBpZiAoZW5hYmxlZCA9PT0gdW5kZWZpbmVkKSBlbmFibGVkID0gZmFsc2U7CiAgICAgICAgICAgIGlmICh0aGlzLl9yZWFkb25seSA9PT0gZW5hYmxlZCkgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB0aGlzLl9yZWFkb25seSA9IGVuYWJsZWQ7CgogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5wcm9wKCJyZWFkb25seSIsIGVuYWJsZWQpOwogICAgICAgICAgICB0aGlzLmVuYWJsZUludGVyZmFjZSgpOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIG9wZW5lZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuaGFzQ2xhc3MoInNlbGVjdDItZHJvcGRvd24tb3BlbiIpOwogICAgICAgIH0sCgogICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgcG9zaXRpb25Ecm9wZG93bjogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciAkZHJvcGRvd24gPSB0aGlzLmRyb3Bkb3duLmhpZGUoKSwKICAgICAgICAgICAgICAgIG9mZnNldCA9IHRoaXMuY29udGFpbmVyLm9mZnNldCgpLAogICAgICAgICAgICAgICAgaGVpZ2h0ID0gdGhpcy5jb250YWluZXIub3V0ZXJIZWlnaHQoZmFsc2UpLAogICAgICAgICAgICAgICAgd2lkdGggPSB0aGlzLmNvbnRhaW5lci5vdXRlcldpZHRoKGZhbHNlKSwKICAgICAgICAgICAgICAgIGRyb3BIZWlnaHQgPSAkZHJvcGRvd24ub3V0ZXJIZWlnaHQoZmFsc2UpLAogICAgICAgICAgICAgICAgdmlld1BvcnRSaWdodCA9ICQod2luZG93KS5zY3JvbGxMZWZ0KCkgKyAkKHdpbmRvdykud2lkdGgoKSwKICAgICAgICAgICAgICAgIHZpZXdwb3J0Qm90dG9tID0gJCh3aW5kb3cpLnNjcm9sbFRvcCgpICsgJCh3aW5kb3cpLmhlaWdodCgpLAogICAgICAgICAgICAgICAgZHJvcFRvcCA9IG9mZnNldC50b3AgKyBoZWlnaHQsCiAgICAgICAgICAgICAgICBkcm9wTGVmdCA9IG9mZnNldC5sZWZ0LAogICAgICAgICAgICAgICAgZW5vdWdoUm9vbUJlbG93ID0gZHJvcFRvcCArIGRyb3BIZWlnaHQgPD0gdmlld3BvcnRCb3R0b20sCiAgICAgICAgICAgICAgICBlbm91Z2hSb29tQWJvdmUgPSAob2Zmc2V0LnRvcCAtIGRyb3BIZWlnaHQpID49IHRoaXMuYm9keSgpLnNjcm9sbFRvcCgpLAogICAgICAgICAgICAgICAgZHJvcFdpZHRoID0gJGRyb3Bkb3duLm91dGVyV2lkdGgoZmFsc2UpLAogICAgICAgICAgICAgICAgZW5vdWdoUm9vbU9uUmlnaHQgPSBkcm9wTGVmdCArIGRyb3BXaWR0aCA8PSB2aWV3UG9ydFJpZ2h0LAogICAgICAgICAgICAgICAgYWJvdmVOb3cgPSAkZHJvcGRvd24uaGFzQ2xhc3MoInNlbGVjdDItZHJvcC1hYm92ZSIpLAogICAgICAgICAgICAgICAgYm9keU9mZnNldCwKICAgICAgICAgICAgICAgIGFib3ZlLAogICAgICAgICAgICAgICAgY3NzLAogICAgICAgICAgICAgICAgcmVzdWx0c0xpc3ROb2RlOwoKICAgICAgICAgICAgJGRyb3Bkb3duLnNob3coKTsKCiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuZHJvcGRvd25BdXRvV2lkdGgpIHsKICAgICAgICAgICAgICAgIHJlc3VsdHNMaXN0Tm9kZSA9ICQoJy5zZWxlY3QyLXJlc3VsdHMnLCAkZHJvcGRvd24pWzBdOwogICAgICAgICAgICAgICAgJGRyb3Bkb3duLmFkZENsYXNzKCdzZWxlY3QyLWRyb3AtYXV0by13aWR0aCcpOwogICAgICAgICAgICAgICAgJGRyb3Bkb3duLmNzcygnd2lkdGgnLCAnJyk7CiAgICAgICAgICAgICAgICAvLyBBZGQgc2Nyb2xsYmFyIHdpZHRoIHRvIGRyb3Bkb3duIGlmIHZlcnRpY2FsIHNjcm9sbGJhciBpcyBwcmVzZW50CiAgICAgICAgICAgICAgICBkcm9wV2lkdGggPSAkZHJvcGRvd24ub3V0ZXJXaWR0aChmYWxzZSkgKyAocmVzdWx0c0xpc3ROb2RlLnNjcm9sbEhlaWdodCA9PT0gcmVzdWx0c0xpc3ROb2RlLmNsaWVudEhlaWdodCA/IDAgOiBzY3JvbGxCYXJEaW1lbnNpb25zLndpZHRoKTsKICAgICAgICAgICAgICAgIGRyb3BXaWR0aCA+IHdpZHRoID8gd2lkdGggPSBkcm9wV2lkdGggOiBkcm9wV2lkdGggPSB3aWR0aDsKICAgICAgICAgICAgICAgIGVub3VnaFJvb21PblJpZ2h0ID0gZHJvcExlZnQgKyBkcm9wV2lkdGggPD0gdmlld1BvcnRSaWdodDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNsYXNzKCdzZWxlY3QyLWRyb3AtYXV0by13aWR0aCcpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2NvbnNvbGUubG9nKCJiZWxvdy8gZHJvcHRvcDoiLCBkcm9wVG9wLCAiZHJvcEhlaWdodCIsIGRyb3BIZWlnaHQsICJzdW0iLCAoZHJvcFRvcCtkcm9wSGVpZ2h0KSsiIHZpZXdwb3J0IGJvdHRvbSIsIHZpZXdwb3J0Qm90dG9tLCAiZW5vdWdoPyIsIGVub3VnaFJvb21CZWxvdyk7CiAgICAgICAgICAgIC8vY29uc29sZS5sb2coImFib3ZlLyBvZmZzZXQudG9wIiwgb2Zmc2V0LnRvcCwgImRyb3BIZWlnaHQiLCBkcm9wSGVpZ2h0LCAidG9wIiwgKG9mZnNldC50b3AtZHJvcEhlaWdodCksICJzY3JvbGxUb3AiLCB0aGlzLmJvZHkoKS5zY3JvbGxUb3AoKSwgImVub3VnaD8iLCBlbm91Z2hSb29tQWJvdmUpOwoKICAgICAgICAgICAgLy8gZml4IHBvc2l0aW9uaW5nIHdoZW4gYm9keSBoYXMgYW4gb2Zmc2V0IGFuZCBpcyBub3QgcG9zaXRpb246IHN0YXRpYwogICAgICAgICAgICBpZiAodGhpcy5ib2R5KCkuY3NzKCdwb3NpdGlvbicpICE9PSAnc3RhdGljJykgewogICAgICAgICAgICAgICAgYm9keU9mZnNldCA9IHRoaXMuYm9keSgpLm9mZnNldCgpOwogICAgICAgICAgICAgICAgZHJvcFRvcCAtPSBib2R5T2Zmc2V0LnRvcDsKICAgICAgICAgICAgICAgIGRyb3BMZWZ0IC09IGJvZHlPZmZzZXQubGVmdDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gYWx3YXlzIHByZWZlciB0aGUgY3VycmVudCBhYm92ZS9iZWxvdyBhbGlnbm1lbnQsIHVubGVzcyB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20KICAgICAgICAgICAgaWYgKGFib3ZlTm93KSB7CiAgICAgICAgICAgICAgICBhYm92ZSA9IHRydWU7CiAgICAgICAgICAgICAgICBpZiAoIWVub3VnaFJvb21BYm92ZSAmJiBlbm91Z2hSb29tQmVsb3cpIGFib3ZlID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBhYm92ZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgaWYgKCFlbm91Z2hSb29tQmVsb3cgJiYgZW5vdWdoUm9vbUFib3ZlKSBhYm92ZSA9IHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghZW5vdWdoUm9vbU9uUmlnaHQpIHsKICAgICAgICAgICAgICAgZHJvcExlZnQgPSBvZmZzZXQubGVmdCArIHdpZHRoIC0gZHJvcFdpZHRoOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoYWJvdmUpIHsKICAgICAgICAgICAgICAgIGRyb3BUb3AgPSBvZmZzZXQudG9wIC0gZHJvcEhlaWdodDsKICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCJzZWxlY3QyLWRyb3AtYWJvdmUiKTsKICAgICAgICAgICAgICAgICRkcm9wZG93bi5hZGRDbGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAgICAgICAgICAgICAgICAkZHJvcGRvd24ucmVtb3ZlQ2xhc3MoInNlbGVjdDItZHJvcC1hYm92ZSIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjc3MgPSAkLmV4dGVuZCh7CiAgICAgICAgICAgICAgICB0b3A6IGRyb3BUb3AsCiAgICAgICAgICAgICAgICBsZWZ0OiBkcm9wTGVmdCwKICAgICAgICAgICAgICAgIHdpZHRoOiB3aWR0aAogICAgICAgICAgICB9LCBldmFsdWF0ZSh0aGlzLm9wdHMuZHJvcGRvd25Dc3MpKTsKCiAgICAgICAgICAgICRkcm9wZG93bi5jc3MoY3NzKTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIHNob3VsZE9wZW46IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB2YXIgZXZlbnQ7CgogICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQoKSkgcmV0dXJuIGZhbHNlOwoKICAgICAgICAgICAgaWYgKHRoaXMuX2VuYWJsZWQgPT09IGZhbHNlIHx8IHRoaXMuX3JlYWRvbmx5ID09PSB0cnVlKSByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICBldmVudCA9ICQuRXZlbnQoInNlbGVjdDItb3BlbmluZyIpOwogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKGV2ZW50KTsKICAgICAgICAgICAgcmV0dXJuICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGNsZWFyRHJvcGRvd25BbGlnbm1lbnRQcmVmZXJlbmNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gY2xlYXIgdGhlIGNsYXNzZXMgdXNlZCB0byBmaWd1cmUgb3V0IHRoZSBwcmVmZXJlbmNlIG9mIHdoZXJlIHRoZSBkcm9wZG93biBzaG91bGQgYmUgb3BlbmVkCiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWRyb3AtYWJvdmUiKTsKICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5yZW1vdmVDbGFzcygic2VsZWN0Mi1kcm9wLWFib3ZlIik7CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogT3BlbnMgdGhlIGRyb3Bkb3duCiAgICAgICAgICoKICAgICAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB3aGV0aGVyIG9yIG5vdCBkcm9wZG93biB3YXMgb3BlbmVkLiBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBmYWxzZSBpZiwgZm9yIGV4YW1wbGUsCiAgICAgICAgICogdGhlIGRyb3Bkb3duIGlzIGFscmVhZHkgb3Blbiwgb3IgaWYgdGhlICdvcGVuJyBldmVudCBsaXN0ZW5lciBvbiB0aGUgZWxlbWVudCBjYWxsZWQgcHJldmVudERlZmF1bHQoKS4KICAgICAgICAgKi8KICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIG9wZW46IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIGlmICghdGhpcy5zaG91bGRPcGVuKCkpIHJldHVybiBmYWxzZTsKCiAgICAgICAgICAgIHRoaXMub3BlbmluZygpOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogUGVyZm9ybXMgdGhlIG9wZW5pbmcgb2YgdGhlIGRyb3Bkb3duCiAgICAgICAgICovCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBvcGVuaW5nOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGNpZCA9IHRoaXMuY29udGFpbmVySWQsCiAgICAgICAgICAgICAgICBzY3JvbGwgPSAic2Nyb2xsLiIgKyBjaWQsCiAgICAgICAgICAgICAgICByZXNpemUgPSAicmVzaXplLiIrY2lkLAogICAgICAgICAgICAgICAgb3JpZW50ID0gIm9yaWVudGF0aW9uY2hhbmdlLiIrY2lkLAogICAgICAgICAgICAgICAgbWFzaywgbWFza0NzczsKCiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCJzZWxlY3QyLWRyb3Bkb3duLW9wZW4iKS5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CgogICAgICAgICAgICB0aGlzLmNsZWFyRHJvcGRvd25BbGlnbm1lbnRQcmVmZXJlbmNlKCk7CgogICAgICAgICAgICBpZih0aGlzLmRyb3Bkb3duWzBdICE9PSB0aGlzLmJvZHkoKS5jaGlsZHJlbigpLmxhc3QoKVswXSkgewogICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5kZXRhY2goKS5hcHBlbmRUbyh0aGlzLmJvZHkoKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgZHJvcGRvd24gbWFzayBpZiBkb2VzbnQgYWxyZWFkeSBleGlzdAogICAgICAgICAgICBtYXNrID0gJCgiI3NlbGVjdDItZHJvcC1tYXNrIik7CiAgICAgICAgICAgIGlmIChtYXNrLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgICBtYXNrID0gJChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSk7CiAgICAgICAgICAgICAgICBtYXNrLmF0dHIoImlkIiwic2VsZWN0Mi1kcm9wLW1hc2siKS5hdHRyKCJjbGFzcyIsInNlbGVjdDItZHJvcC1tYXNrIik7CiAgICAgICAgICAgICAgICBtYXNrLmhpZGUoKTsKICAgICAgICAgICAgICAgIG1hc2suYXBwZW5kVG8odGhpcy5ib2R5KCkpOwogICAgICAgICAgICAgICAgbWFzay5vbigibW91c2Vkb3duIHRvdWNoc3RhcnQgY2xpY2siLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBkcm9wZG93biA9ICQoIiNzZWxlY3QyLWRyb3AiKSwgc2VsZjsKICAgICAgICAgICAgICAgICAgICBpZiAoZHJvcGRvd24ubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxmPWRyb3Bkb3duLmRhdGEoInNlbGVjdDIiKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYub3B0cy5zZWxlY3RPbkJsdXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0SGlnaGxpZ2h0ZWQoe25vRm9jdXM6IHRydWV9KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKHtmb2N1czpmYWxzZX0pOwogICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGVuc3VyZSB0aGUgbWFzayBpcyBhbHdheXMgcmlnaHQgYmVmb3JlIHRoZSBkcm9wZG93bgogICAgICAgICAgICBpZiAodGhpcy5kcm9wZG93bi5wcmV2KClbMF0gIT09IG1hc2tbMF0pIHsKICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uYmVmb3JlKG1hc2spOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBtb3ZlIHRoZSBnbG9iYWwgaWQgdG8gdGhlIGNvcnJlY3QgZHJvcGRvd24KICAgICAgICAgICAgJCgiI3NlbGVjdDItZHJvcCIpLnJlbW92ZUF0dHIoImlkIik7CiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uYXR0cigiaWQiLCAic2VsZWN0Mi1kcm9wIik7CgogICAgICAgICAgICAvLyBzaG93IHRoZSBlbGVtZW50cwogICAgICAgICAgICBtYXNrLnNob3coKTsKCiAgICAgICAgICAgIHRoaXMucG9zaXRpb25Ecm9wZG93bigpOwogICAgICAgICAgICB0aGlzLmRyb3Bkb3duLnNob3coKTsKICAgICAgICAgICAgdGhpcy5wb3NpdGlvbkRyb3Bkb3duKCk7CgogICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmFkZENsYXNzKCJzZWxlY3QyLWRyb3AtYWN0aXZlIik7CgogICAgICAgICAgICAvLyBhdHRhY2ggbGlzdGVuZXJzIHRvIGV2ZW50cyB0aGF0IGNhbiBjaGFuZ2UgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250YWluZXIgYW5kIHRodXMgcmVxdWlyZQogICAgICAgICAgICAvLyB0aGUgcG9zaXRpb24gb2YgdGhlIGRyb3Bkb3duIHRvIGJlIHVwZGF0ZWQgYXMgd2VsbCBzbyBpdCBkb2VzIG5vdCBjb21lIHVuZ2x1ZWQgZnJvbSB0aGUgY29udGFpbmVyCiAgICAgICAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgICAgICAgdGhpcy5jb250YWluZXIucGFyZW50cygpLmFkZCh3aW5kb3cpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgJCh0aGlzKS5vbihyZXNpemUrIiAiK3Njcm9sbCsiICIrb3JpZW50LCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICAgIHRoYXQucG9zaXRpb25Ecm9wZG93bigpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0pOwoKCiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBjbG9zZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoIXRoaXMub3BlbmVkKCkpIHJldHVybjsKCiAgICAgICAgICAgIHZhciBjaWQgPSB0aGlzLmNvbnRhaW5lcklkLAogICAgICAgICAgICAgICAgc2Nyb2xsID0gInNjcm9sbC4iICsgY2lkLAogICAgICAgICAgICAgICAgcmVzaXplID0gInJlc2l6ZS4iK2NpZCwKICAgICAgICAgICAgICAgIG9yaWVudCA9ICJvcmllbnRhdGlvbmNoYW5nZS4iK2NpZDsKCiAgICAgICAgICAgIC8vIHVuYmluZCBldmVudCBsaXN0ZW5lcnMKICAgICAgICAgICAgdGhpcy5jb250YWluZXIucGFyZW50cygpLmFkZCh3aW5kb3cpLmVhY2goZnVuY3Rpb24gKCkgeyAkKHRoaXMpLm9mZihzY3JvbGwpLm9mZihyZXNpemUpLm9mZihvcmllbnQpOyB9KTsKCiAgICAgICAgICAgIHRoaXMuY2xlYXJEcm9wZG93bkFsaWdubWVudFByZWZlcmVuY2UoKTsKCiAgICAgICAgICAgICQoIiNzZWxlY3QyLWRyb3AtbWFzayIpLmhpZGUoKTsKICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5yZW1vdmVBdHRyKCJpZCIpOyAvLyBvbmx5IHRoZSBhY3RpdmUgZHJvcGRvd24gaGFzIHRoZSBzZWxlY3QyLWRyb3AgaWQKICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5oaWRlKCk7CiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWRyb3Bkb3duLW9wZW4iKS5yZW1vdmVDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5lbXB0eSgpOwoKCiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTsKICAgICAgICAgICAgdGhpcy5zZWFyY2gucmVtb3ZlQ2xhc3MoInNlbGVjdDItYWN0aXZlIik7CiAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoJC5FdmVudCgic2VsZWN0Mi1jbG9zZSIpKTsKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBPcGVucyBjb250cm9sLCBzZXRzIGlucHV0IHZhbHVlLCBhbmQgdXBkYXRlcyByZXN1bHRzLgogICAgICAgICAqLwogICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgZXh0ZXJuYWxTZWFyY2g6IGZ1bmN0aW9uICh0ZXJtKSB7CiAgICAgICAgICAgIHRoaXMub3BlbigpOwogICAgICAgICAgICB0aGlzLnNlYXJjaC52YWwodGVybSk7CiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVzdWx0cyhmYWxzZSk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBjbGVhclNlYXJjaDogZnVuY3Rpb24gKCkgewoKICAgICAgICB9LAoKICAgICAgICAvL2Fic3RyYWN0CiAgICAgICAgZ2V0TWF4aW11bVNlbGVjdGlvblNpemU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gZXZhbHVhdGUodGhpcy5vcHRzLm1heGltdW1TZWxlY3Rpb25TaXplKTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGVuc3VyZUhpZ2hsaWdodFZpc2libGU6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSB0aGlzLnJlc3VsdHMsIGNoaWxkcmVuLCBpbmRleCwgY2hpbGQsIGhiLCByYiwgeSwgbW9yZTsKCiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5oaWdobGlnaHQoKTsKCiAgICAgICAgICAgIGlmIChpbmRleCA8IDApIHJldHVybjsKCiAgICAgICAgICAgIGlmIChpbmRleCA9PSAwKSB7CgogICAgICAgICAgICAgICAgLy8gaWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgaGlnaGxpZ2h0ZWQgc2Nyb2xsIGFsbCB0aGUgd2F5IHRvIHRoZSB0b3AsCiAgICAgICAgICAgICAgICAvLyB0aGF0IHdheSBhbnkgdW5zZWxlY3RhYmxlIGhlYWRlcnMgYWJvdmUgaXQgd2lsbCBhbHNvIGJlIHNjcm9sbGVkCiAgICAgICAgICAgICAgICAvLyBpbnRvIHZpZXcKCiAgICAgICAgICAgICAgICByZXN1bHRzLnNjcm9sbFRvcCgwKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2hpbGRyZW4gPSB0aGlzLmZpbmRIaWdobGlnaHRhYmxlQ2hvaWNlcygpLmZpbmQoJy5zZWxlY3QyLXJlc3VsdC1sYWJlbCcpOwoKICAgICAgICAgICAgY2hpbGQgPSAkKGNoaWxkcmVuW2luZGV4XSk7CgogICAgICAgICAgICBoYiA9IGNoaWxkLm9mZnNldCgpLnRvcCArIGNoaWxkLm91dGVySGVpZ2h0KHRydWUpOwoKICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyB0aGUgbGFzdCBjaGlsZCBsZXRzIGFsc28gbWFrZSBzdXJlIHNlbGVjdDItbW9yZS1yZXN1bHRzIGlzIHZpc2libGUKICAgICAgICAgICAgaWYgKGluZGV4ID09PSBjaGlsZHJlbi5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgICBtb3JlID0gcmVzdWx0cy5maW5kKCJsaS5zZWxlY3QyLW1vcmUtcmVzdWx0cyIpOwogICAgICAgICAgICAgICAgaWYgKG1vcmUubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIGhiID0gbW9yZS5vZmZzZXQoKS50b3AgKyBtb3JlLm91dGVySGVpZ2h0KHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByYiA9IHJlc3VsdHMub2Zmc2V0KCkudG9wICsgcmVzdWx0cy5vdXRlckhlaWdodCh0cnVlKTsKICAgICAgICAgICAgaWYgKGhiID4gcmIpIHsKICAgICAgICAgICAgICAgIHJlc3VsdHMuc2Nyb2xsVG9wKHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyAoaGIgLSByYikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHkgPSBjaGlsZC5vZmZzZXQoKS50b3AgLSByZXN1bHRzLm9mZnNldCgpLnRvcDsKCiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgdG9wIG9mIHRoZSBlbGVtZW50IGlzIHZpc2libGUKICAgICAgICAgICAgaWYgKHkgPCAwICYmIGNoaWxkLmNzcygnZGlzcGxheScpICE9ICdub25lJyApIHsKICAgICAgICAgICAgICAgIHJlc3VsdHMuc2Nyb2xsVG9wKHJlc3VsdHMuc2Nyb2xsVG9wKCkgKyB5KTsgLy8geSBpcyBuZWdhdGl2ZQogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBmaW5kSGlnaGxpZ2h0YWJsZUNob2ljZXM6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHRzLmZpbmQoIi5zZWxlY3QyLXJlc3VsdC1zZWxlY3RhYmxlOm5vdCguc2VsZWN0Mi1kaXNhYmxlZCkiKTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIG1vdmVIaWdobGlnaHQ6IGZ1bmN0aW9uIChkZWx0YSkgewogICAgICAgICAgICB2YXIgY2hvaWNlcyA9IHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2VzKCksCiAgICAgICAgICAgICAgICBpbmRleCA9IHRoaXMuaGlnaGxpZ2h0KCk7CgogICAgICAgICAgICB3aGlsZSAoaW5kZXggPiAtMSAmJiBpbmRleCA8IGNob2ljZXMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpbmRleCArPSBkZWx0YTsKICAgICAgICAgICAgICAgIHZhciBjaG9pY2UgPSAkKGNob2ljZXNbaW5kZXhdKTsKICAgICAgICAgICAgICAgIGlmIChjaG9pY2UuaGFzQ2xhc3MoInNlbGVjdDItcmVzdWx0LXNlbGVjdGFibGUiKSAmJiAhY2hvaWNlLmhhc0NsYXNzKCJzZWxlY3QyLWRpc2FibGVkIikgJiYgIWNob2ljZS5oYXNDbGFzcygic2VsZWN0Mi1zZWxlY3RlZCIpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHQoaW5kZXgpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBoaWdobGlnaHQ6IGZ1bmN0aW9uIChpbmRleCkgewogICAgICAgICAgICB2YXIgY2hvaWNlcyA9IHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2VzKCksCiAgICAgICAgICAgICAgICBjaG9pY2UsCiAgICAgICAgICAgICAgICBkYXRhOwoKICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiBpbmRleE9mKGNob2ljZXMuZmlsdGVyKCIuc2VsZWN0Mi1oaWdobGlnaHRlZCIpWzBdLCBjaG9pY2VzLmdldCgpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKGluZGV4ID49IGNob2ljZXMubGVuZ3RoKSBpbmRleCA9IGNob2ljZXMubGVuZ3RoIC0gMTsKICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSAwOwoKICAgICAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTsKCiAgICAgICAgICAgIGNob2ljZSA9ICQoY2hvaWNlc1tpbmRleF0pOwogICAgICAgICAgICBjaG9pY2UuYWRkQ2xhc3MoInNlbGVjdDItaGlnaGxpZ2h0ZWQiKTsKCiAgICAgICAgICAgIHRoaXMuZW5zdXJlSGlnaGxpZ2h0VmlzaWJsZSgpOwoKICAgICAgICAgICAgZGF0YSA9IGNob2ljZS5kYXRhKCJzZWxlY3QyLWRhdGEiKTsKICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoeyB0eXBlOiAic2VsZWN0Mi1oaWdobGlnaHQiLCB2YWw6IHRoaXMuaWQoZGF0YSksIGNob2ljZTogZGF0YSB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIHJlbW92ZUhpZ2hsaWdodDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRoaXMucmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1oaWdobGlnaHRlZCIpLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWhpZ2hsaWdodGVkIik7CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBjb3VudFNlbGVjdGFibGVSZXN1bHRzOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2VzKCkubGVuZ3RoOwogICAgICAgIH0sCgogICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgaGlnaGxpZ2h0VW5kZXJFdmVudDogZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICAgIHZhciBlbCA9ICQoZXZlbnQudGFyZ2V0KS5jbG9zZXN0KCIuc2VsZWN0Mi1yZXN1bHQtc2VsZWN0YWJsZSIpOwogICAgICAgICAgICBpZiAoZWwubGVuZ3RoID4gMCAmJiAhZWwuaXMoIi5zZWxlY3QyLWhpZ2hsaWdodGVkIikpIHsKICAgICAgICAgICAgICAgIHZhciBjaG9pY2VzID0gdGhpcy5maW5kSGlnaGxpZ2h0YWJsZUNob2ljZXMoKTsKICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0KGNob2ljZXMuaW5kZXgoZWwpKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChlbC5sZW5ndGggPT0gMCkgewogICAgICAgICAgICAgICAgLy8gaWYgd2UgYXJlIG92ZXIgYW4gdW5zZWxlY3RhYmxlIGl0ZW0gcmVtb3ZlIGFsbCBoaWdobGlnaHRzCiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUhpZ2hsaWdodCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBsb2FkTW9yZUlmTmVlZGVkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciByZXN1bHRzID0gdGhpcy5yZXN1bHRzLAogICAgICAgICAgICAgICAgbW9yZSA9IHJlc3VsdHMuZmluZCgibGkuc2VsZWN0Mi1tb3JlLXJlc3VsdHMiKSwKICAgICAgICAgICAgICAgIGJlbG93LCAvLyBwaXhlbHMgdGhlIGVsZW1lbnQgaXMgYmVsb3cgdGhlIHNjcm9sbCBmb2xkLCBiZWxvdz09MCBpcyB3aGVuIHRoZSBlbGVtZW50IGlzIHN0YXJ0aW5nIHRvIGJlIHZpc2libGUKICAgICAgICAgICAgICAgIG9mZnNldCA9IC0xLCAvLyBpbmRleCBvZiBmaXJzdCBlbGVtZW50IHdpdGhvdXQgZGF0YQogICAgICAgICAgICAgICAgcGFnZSA9IHRoaXMucmVzdWx0c1BhZ2UgKyAxLAogICAgICAgICAgICAgICAgc2VsZj10aGlzLAogICAgICAgICAgICAgICAgdGVybT10aGlzLnNlYXJjaC52YWwoKSwKICAgICAgICAgICAgICAgIGNvbnRleHQ9dGhpcy5jb250ZXh0OwoKICAgICAgICAgICAgaWYgKG1vcmUubGVuZ3RoID09PSAwKSByZXR1cm47CiAgICAgICAgICAgIGJlbG93ID0gbW9yZS5vZmZzZXQoKS50b3AgLSByZXN1bHRzLm9mZnNldCgpLnRvcCAtIHJlc3VsdHMuaGVpZ2h0KCk7CgogICAgICAgICAgICBpZiAoYmVsb3cgPD0gdGhpcy5vcHRzLmxvYWRNb3JlUGFkZGluZykgewogICAgICAgICAgICAgICAgbW9yZS5hZGRDbGFzcygic2VsZWN0Mi1hY3RpdmUiKTsKICAgICAgICAgICAgICAgIHRoaXMub3B0cy5xdWVyeSh7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHRoaXMub3B0cy5lbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICB0ZXJtOiB0ZXJtLAogICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiBwYWdlLAogICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyOiB0aGlzLm9wdHMubWF0Y2hlciwKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuYmluZChmdW5jdGlvbiAoZGF0YSkgewoKICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgYSByZXNwb25zZSBpZiB0aGUgc2VsZWN0MiBoYXMgYmVlbiBjbG9zZWQgYmVmb3JlIGl0IHdhcyByZWNlaXZlZAogICAgICAgICAgICAgICAgICAgIGlmICghc2VsZi5vcGVuZWQoKSkgcmV0dXJuOwoKCiAgICAgICAgICAgICAgICAgICAgc2VsZi5vcHRzLnBvcHVsYXRlUmVzdWx0cy5jYWxsKHRoaXMsIHJlc3VsdHMsIGRhdGEucmVzdWx0cywge3Rlcm06IHRlcm0sIHBhZ2U6IHBhZ2UsIGNvbnRleHQ6Y29udGV4dH0pOwogICAgICAgICAgICAgICAgICAgIHNlbGYucG9zdHByb2Nlc3NSZXN1bHRzKGRhdGEsIGZhbHNlLCBmYWxzZSk7CgogICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLm1vcmU9PT10cnVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUuZGV0YWNoKCkuYXBwZW5kVG8ocmVzdWx0cykudGV4dChzZWxmLm9wdHMuZm9ybWF0TG9hZE1vcmUocGFnZSsxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBzZWxmLmxvYWRNb3JlSWZOZWVkZWQoKTsgfSwgMTApOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1vcmUucmVtb3ZlKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHNlbGYucG9zaXRpb25Ecm9wZG93bigpOwogICAgICAgICAgICAgICAgICAgIHNlbGYucmVzdWx0c1BhZ2UgPSBwYWdlOwogICAgICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGRhdGEuY29udGV4dDsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKHsgdHlwZTogInNlbGVjdDItbG9hZGVkIiwgaXRlbXM6IGRhdGEgfSk7CiAgICAgICAgICAgICAgICB9KX0pOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogRGVmYXVsdCB0b2tlbml6ZXIgZnVuY3Rpb24gd2hpY2ggZG9lcyBub3RoaW5nCiAgICAgICAgICovCiAgICAgICAgdG9rZW5pemU6IGZ1bmN0aW9uKCkgewoKICAgICAgICB9LAoKICAgICAgICAvKioKICAgICAgICAgKiBAcGFyYW0gaW5pdGlhbCB3aGV0aGVyIG9yIG5vdCB0aGlzIGlzIHRoZSBjYWxsIHRvIHRoaXMgbWV0aG9kIHJpZ2h0IGFmdGVyIHRoZSBkcm9wZG93biBoYXMgYmVlbiBvcGVuZWQKICAgICAgICAgKi8KICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIHVwZGF0ZVJlc3VsdHM6IGZ1bmN0aW9uIChpbml0aWFsKSB7CiAgICAgICAgICAgIHZhciBzZWFyY2ggPSB0aGlzLnNlYXJjaCwKICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB0aGlzLnJlc3VsdHMsCiAgICAgICAgICAgICAgICBvcHRzID0gdGhpcy5vcHRzLAogICAgICAgICAgICAgICAgZGF0YSwKICAgICAgICAgICAgICAgIHNlbGYgPSB0aGlzLAogICAgICAgICAgICAgICAgaW5wdXQsCiAgICAgICAgICAgICAgICB0ZXJtID0gc2VhcmNoLnZhbCgpLAogICAgICAgICAgICAgICAgbGFzdFRlcm0gPSAkLmRhdGEodGhpcy5jb250YWluZXIsICJzZWxlY3QyLWxhc3QtdGVybSIpLAogICAgICAgICAgICAgICAgLy8gc2VxdWVuY2UgbnVtYmVyIHVzZWQgdG8gZHJvcCBvdXQtb2Ytb3JkZXIgcmVzcG9uc2VzCiAgICAgICAgICAgICAgICBxdWVyeU51bWJlcjsKCiAgICAgICAgICAgIC8vIHByZXZlbnQgZHVwbGljYXRlIHF1ZXJpZXMgYWdhaW5zdCB0aGUgc2FtZSB0ZXJtCiAgICAgICAgICAgIGlmIChpbml0aWFsICE9PSB0cnVlICYmIGxhc3RUZXJtICYmIGVxdWFsKHRlcm0sIGxhc3RUZXJtKSkgcmV0dXJuOwoKICAgICAgICAgICAgJC5kYXRhKHRoaXMuY29udGFpbmVyLCAic2VsZWN0Mi1sYXN0LXRlcm0iLCB0ZXJtKTsKCiAgICAgICAgICAgIC8vIGlmIHRoZSBzZWFyY2ggaXMgY3VycmVudGx5IGhpZGRlbiB3ZSBkbyBub3QgYWx0ZXIgdGhlIHJlc3VsdHMKICAgICAgICAgICAgaWYgKGluaXRpYWwgIT09IHRydWUgJiYgKHRoaXMuc2hvd1NlYXJjaElucHV0ID09PSBmYWxzZSB8fCAhdGhpcy5vcGVuZWQoKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZnVuY3Rpb24gcG9zdFJlbmRlcigpIHsKICAgICAgICAgICAgICAgIHNlYXJjaC5yZW1vdmVDbGFzcygic2VsZWN0Mi1hY3RpdmUiKTsKICAgICAgICAgICAgICAgIHNlbGYucG9zaXRpb25Ecm9wZG93bigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmdW5jdGlvbiByZW5kZXIoaHRtbCkgewogICAgICAgICAgICAgICAgcmVzdWx0cy5odG1sKGh0bWwpOwogICAgICAgICAgICAgICAgcG9zdFJlbmRlcigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBxdWVyeU51bWJlciA9ICsrdGhpcy5xdWVyeUNvdW50OwoKICAgICAgICAgICAgdmFyIG1heFNlbFNpemUgPSB0aGlzLmdldE1heGltdW1TZWxlY3Rpb25TaXplKCk7CiAgICAgICAgICAgIGlmIChtYXhTZWxTaXplID49MSkgewogICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuZGF0YSgpOwogICAgICAgICAgICAgICAgaWYgKCQuaXNBcnJheShkYXRhKSAmJiBkYXRhLmxlbmd0aCA+PSBtYXhTZWxTaXplICYmIGNoZWNrRm9ybWF0dGVyKG9wdHMuZm9ybWF0U2VsZWN0aW9uVG9vQmlnLCAiZm9ybWF0U2VsZWN0aW9uVG9vQmlnIikpIHsKICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0nc2VsZWN0Mi1zZWxlY3Rpb24tbGltaXQnPiIgKyBvcHRzLmZvcm1hdFNlbGVjdGlvblRvb0JpZyhtYXhTZWxTaXplKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHNlYXJjaC52YWwoKS5sZW5ndGggPCBvcHRzLm1pbmltdW1JbnB1dExlbmd0aCkgewogICAgICAgICAgICAgICAgaWYgKGNoZWNrRm9ybWF0dGVyKG9wdHMuZm9ybWF0SW5wdXRUb29TaG9ydCwgImZvcm1hdElucHV0VG9vU2hvcnQiKSkgewogICAgICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPSdzZWxlY3QyLW5vLXJlc3VsdHMnPiIgKyBvcHRzLmZvcm1hdElucHV0VG9vU2hvcnQoc2VhcmNoLnZhbCgpLCBvcHRzLm1pbmltdW1JbnB1dExlbmd0aCkgKyAiPC9saT4iKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmVuZGVyKCIiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpbml0aWFsICYmIHRoaXMuc2hvd1NlYXJjaCkgdGhpcy5zaG93U2VhcmNoKHRydWUpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAob3B0cy5tYXhpbXVtSW5wdXRMZW5ndGggJiYgc2VhcmNoLnZhbCgpLmxlbmd0aCA+IG9wdHMubWF4aW11bUlucHV0TGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoY2hlY2tGb3JtYXR0ZXIob3B0cy5mb3JtYXRJbnB1dFRvb0xvbmcsICJmb3JtYXRJbnB1dFRvb0xvbmciKSkgewogICAgICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPSdzZWxlY3QyLW5vLXJlc3VsdHMnPiIgKyBvcHRzLmZvcm1hdElucHV0VG9vTG9uZyhzZWFyY2gudmFsKCksIG9wdHMubWF4aW11bUlucHV0TGVuZ3RoKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZW5kZXIoIiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAob3B0cy5mb3JtYXRTZWFyY2hpbmcgJiYgdGhpcy5maW5kSGlnaGxpZ2h0YWJsZUNob2ljZXMoKS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIHJlbmRlcigiPGxpIGNsYXNzPSdzZWxlY3QyLXNlYXJjaGluZyc+IiArIG9wdHMuZm9ybWF0U2VhcmNoaW5nKCkgKyAiPC9saT4iKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc2VhcmNoLmFkZENsYXNzKCJzZWxlY3QyLWFjdGl2ZSIpOwoKICAgICAgICAgICAgdGhpcy5yZW1vdmVIaWdobGlnaHQoKTsKCiAgICAgICAgICAgIC8vIGdpdmUgdGhlIHRva2VuaXplciBhIGNoYW5jZSB0byBwcmUtcHJvY2VzcyB0aGUgaW5wdXQKICAgICAgICAgICAgaW5wdXQgPSB0aGlzLnRva2VuaXplKCk7CiAgICAgICAgICAgIGlmIChpbnB1dCAhPSB1bmRlZmluZWQgJiYgaW5wdXQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgc2VhcmNoLnZhbChpbnB1dCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHRoaXMucmVzdWx0c1BhZ2UgPSAxOwoKICAgICAgICAgICAgb3B0cy5xdWVyeSh7CiAgICAgICAgICAgICAgICBlbGVtZW50OiBvcHRzLmVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgdGVybTogc2VhcmNoLnZhbCgpLAogICAgICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMucmVzdWx0c1BhZ2UsCiAgICAgICAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICAgICAgICBtYXRjaGVyOiBvcHRzLm1hdGNoZXIsCiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6IHRoaXMuYmluZChmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICAgICAgdmFyIGRlZjsgLy8gZGVmYXVsdCBjaG9pY2UKCiAgICAgICAgICAgICAgICAvLyBpZ25vcmUgb2xkIHJlc3BvbnNlcwogICAgICAgICAgICAgICAgaWYgKHF1ZXJ5TnVtYmVyICE9IHRoaXMucXVlcnlDb3VudCkgewogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgLy8gaWdub3JlIGEgcmVzcG9uc2UgaWYgdGhlIHNlbGVjdDIgaGFzIGJlZW4gY2xvc2VkIGJlZm9yZSBpdCB3YXMgcmVjZWl2ZWQKICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcGVuZWQoKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWFjdGl2ZSIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBzYXZlIGNvbnRleHQsIGlmIGFueQogICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0ID0gKGRhdGEuY29udGV4dD09PXVuZGVmaW5lZCkgPyBudWxsIDogZGF0YS5jb250ZXh0OwogICAgICAgICAgICAgICAgLy8gY3JlYXRlIGEgZGVmYXVsdCBjaG9pY2UgYW5kIHByZXBlbmQgaXQgdG8gdGhlIGxpc3QKICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlICYmIHNlYXJjaC52YWwoKSAhPT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICBkZWYgPSB0aGlzLm9wdHMuY3JlYXRlU2VhcmNoQ2hvaWNlLmNhbGwoc2VsZiwgc2VhcmNoLnZhbCgpLCBkYXRhLnJlc3VsdHMpOwogICAgICAgICAgICAgICAgICAgIGlmIChkZWYgIT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IG51bGwgJiYgc2VsZi5pZChkZWYpICE9PSB1bmRlZmluZWQgJiYgc2VsZi5pZChkZWYpICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkKGRhdGEucmVzdWx0cykuZmlsdGVyKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcXVhbChzZWxmLmlkKHRoaXMpLCBzZWxmLmlkKGRlZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnJlc3VsdHMudW5zaGlmdChkZWYpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdHMubGVuZ3RoID09PSAwICYmIGNoZWNrRm9ybWF0dGVyKG9wdHMuZm9ybWF0Tm9NYXRjaGVzLCAiZm9ybWF0Tm9NYXRjaGVzIikpIHsKICAgICAgICAgICAgICAgICAgICByZW5kZXIoIjxsaSBjbGFzcz0nc2VsZWN0Mi1uby1yZXN1bHRzJz4iICsgb3B0cy5mb3JtYXROb01hdGNoZXMoc2VhcmNoLnZhbCgpKSArICI8L2xpPiIpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXN1bHRzLmVtcHR5KCk7CiAgICAgICAgICAgICAgICBzZWxmLm9wdHMucG9wdWxhdGVSZXN1bHRzLmNhbGwodGhpcywgcmVzdWx0cywgZGF0YS5yZXN1bHRzLCB7dGVybTogc2VhcmNoLnZhbCgpLCBwYWdlOiB0aGlzLnJlc3VsdHNQYWdlLCBjb250ZXh0Om51bGx9KTsKCiAgICAgICAgICAgICAgICBpZiAoZGF0YS5tb3JlID09PSB0cnVlICYmIGNoZWNrRm9ybWF0dGVyKG9wdHMuZm9ybWF0TG9hZE1vcmUsICJmb3JtYXRMb2FkTW9yZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoIjxsaSBjbGFzcz0nc2VsZWN0Mi1tb3JlLXJlc3VsdHMnPiIgKyBzZWxmLm9wdHMuZXNjYXBlTWFya3VwKG9wdHMuZm9ybWF0TG9hZE1vcmUodGhpcy5yZXN1bHRzUGFnZSkpICsgIjwvbGk+Iik7CiAgICAgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHNlbGYubG9hZE1vcmVJZk5lZWRlZCgpOyB9LCAxMCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5wb3N0cHJvY2Vzc1Jlc3VsdHMoZGF0YSwgaW5pdGlhbCk7CgogICAgICAgICAgICAgICAgcG9zdFJlbmRlcigpOwoKICAgICAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoeyB0eXBlOiAic2VsZWN0Mi1sb2FkZWQiLCBpdGVtczogZGF0YSB9KTsKICAgICAgICAgICAgfSl9KTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGNhbmNlbDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBibHVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIGlmIHNlbGVjdE9uQmx1ciA9PSB0cnVlLCBzZWxlY3QgdGhlIGN1cnJlbnRseSBoaWdobGlnaHRlZCBvcHRpb24KICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5zZWxlY3RPbkJsdXIpCiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEhpZ2hsaWdodGVkKHtub0ZvY3VzOiB0cnVlfSk7CgogICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUiKTsKICAgICAgICAgICAgLy8gc3lub255bW91cyB0byAuaXMoJzpmb2N1cycpLCB3aGljaCBpcyBhdmFpbGFibGUgaW4ganF1ZXJ5ID49IDEuNgogICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hbMF0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHsgdGhpcy5zZWFyY2guYmx1cigpOyB9CiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWFyY2goKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyIpLnJlbW92ZUNsYXNzKCJzZWxlY3QyLXNlYXJjaC1jaG9pY2UtZm9jdXMiKTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIGZvY3VzU2VhcmNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGZvY3VzKHRoaXMuc2VhcmNoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBhYnN0cmFjdAogICAgICAgIHNlbGVjdEhpZ2hsaWdodGVkOiBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgICB2YXIgaW5kZXg9dGhpcy5oaWdobGlnaHQoKSwKICAgICAgICAgICAgICAgIGhpZ2hsaWdodGVkPXRoaXMucmVzdWx0cy5maW5kKCIuc2VsZWN0Mi1oaWdobGlnaHRlZCIpLAogICAgICAgICAgICAgICAgZGF0YSA9IGhpZ2hsaWdodGVkLmNsb3Nlc3QoJy5zZWxlY3QyLXJlc3VsdCcpLmRhdGEoInNlbGVjdDItZGF0YSIpOwoKICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0KGluZGV4KTsKICAgICAgICAgICAgICAgIHRoaXMub25TZWxlY3QoZGF0YSwgb3B0aW9ucyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm5vRm9jdXMpIHsKICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgZ2V0UGxhY2Vob2xkZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyT3B0aW9uOwogICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRzLmVsZW1lbnQuYXR0cigicGxhY2Vob2xkZXIiKSB8fAogICAgICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQuYXR0cigiZGF0YS1wbGFjZWhvbGRlciIpIHx8IC8vIGpxdWVyeSAxLjQgY29tcGF0CiAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5kYXRhKCJwbGFjZWhvbGRlciIpIHx8CiAgICAgICAgICAgICAgICB0aGlzLm9wdHMucGxhY2Vob2xkZXIgfHwKICAgICAgICAgICAgICAgICgocGxhY2Vob2xkZXJPcHRpb24gPSB0aGlzLmdldFBsYWNlaG9sZGVyT3B0aW9uKCkpICE9PSB1bmRlZmluZWQgPyBwbGFjZWhvbGRlck9wdGlvbi50ZXh0KCkgOiB1bmRlZmluZWQpOwogICAgICAgIH0sCgogICAgICAgIC8vIGFic3RyYWN0CiAgICAgICAgZ2V0UGxhY2Vob2xkZXJPcHRpb246IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHsKICAgICAgICAgICAgICAgIHZhciBmaXJzdE9wdGlvbiA9IHRoaXMuc2VsZWN0LmNoaWxkcmVuKCdvcHRpb24nKS5maXJzdCgpOwogICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5wbGFjZWhvbGRlck9wdGlvbiAhPT0gdW5kZWZpbmVkICkgewogICAgICAgICAgICAgICAgICAgIC8vRGV0ZXJtaW5lIHRoZSBwbGFjZWhvbGRlciBvcHRpb24gYmFzZWQgb24gdGhlIHNwZWNpZmllZCBwbGFjZWhvbGRlck9wdGlvbiBzZXR0aW5nCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMucGxhY2Vob2xkZXJPcHRpb24gPT09ICJmaXJzdCIgJiYgZmlyc3RPcHRpb24pIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2YgdGhpcy5vcHRzLnBsYWNlaG9sZGVyT3B0aW9uID09PSAiZnVuY3Rpb24iICYmIHRoaXMub3B0cy5wbGFjZWhvbGRlck9wdGlvbih0aGlzLnNlbGVjdCkpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJzdE9wdGlvbi50ZXh0KCkgPT09ICIiICYmIGZpcnN0T3B0aW9uLnZhbCgpID09PSAiIikgewogICAgICAgICAgICAgICAgICAgIC8vTm8gZXhwbGljaXQgcGxhY2Vob2xkZXIgb3B0aW9uIHNwZWNpZmllZCwgdXNlIHRoZSBmaXJzdCBpZiBpdCdzIGJsYW5rCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0T3B0aW9uOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogR2V0IHRoZSBkZXNpcmVkIHdpZHRoIGZvciB0aGUgY29udGFpbmVyIGVsZW1lbnQuICBUaGlzIGlzCiAgICAgICAgICogZGVyaXZlZCBmaXJzdCBmcm9tIG9wdGlvbiBgd2lkdGhgIHBhc3NlZCB0byBzZWxlY3QyLCB0aGVuCiAgICAgICAgICogdGhlIGlubGluZSAnc3R5bGUnIG9uIHRoZSBvcmlnaW5hbCBlbGVtZW50LCBhbmQgZmluYWxseQogICAgICAgICAqIGZhbGxzIGJhY2sgdG8gdGhlIGpRdWVyeSBjYWxjdWxhdGVkIGVsZW1lbnQgd2lkdGguCiAgICAgICAgICovCiAgICAgICAgLy8gYWJzdHJhY3QKICAgICAgICBpbml0Q29udGFpbmVyV2lkdGg6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgZnVuY3Rpb24gcmVzb2x2ZUNvbnRhaW5lcldpZHRoKCkgewogICAgICAgICAgICAgICAgdmFyIHN0eWxlLCBhdHRycywgbWF0Y2hlcywgaSwgbDsKCiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRzLndpZHRoID09PSAib2ZmIikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMud2lkdGggPT09ICJlbGVtZW50Iil7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5lbGVtZW50Lm91dGVyV2lkdGgoZmFsc2UpID09PSAwID8gJ2F1dG8nIDogdGhpcy5vcHRzLmVsZW1lbnQub3V0ZXJXaWR0aChmYWxzZSkgKyAncHgnOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdHMud2lkdGggPT09ICJjb3B5IiB8fCB0aGlzLm9wdHMud2lkdGggPT09ICJyZXNvbHZlIikgewogICAgICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZXJlIGlzIGlubGluZSBzdHlsZSBvbiB0aGUgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHdpZHRoCiAgICAgICAgICAgICAgICAgICAgc3R5bGUgPSB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCdzdHlsZScpOwogICAgICAgICAgICAgICAgICAgIGlmIChzdHlsZSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJzID0gc3R5bGUuc3BsaXQoJzsnKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGF0dHJzLmxlbmd0aDsgaSA8IGw7IGkgPSBpICsgMSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcyA9IGF0dHJzW2ldLnJlcGxhY2UoL1xzL2csICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXRjaCgvW14tXXdpZHRoOigoWy0rXT8oWzAtOV0qXC4pP1swLTldKykocHh8ZW18ZXh8JXxpbnxjbXxtbXxwdHxwYykpL2kpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMgIT09IG51bGwgJiYgbWF0Y2hlcy5sZW5ndGggPj0gMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlc1sxXTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy53aWR0aCA9PT0gInJlc29sdmUiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5leHQgY2hlY2sgaWYgY3NzKCd3aWR0aCcpIGNhbiByZXNvbHZlIGEgd2lkdGggdGhhdCBpcyBwZXJjZW50IGJhc2VkLCB0aGlzIGlzIHNvbWV0aW1lcyBwb3NzaWJsZQogICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIGF0dGFjaGVkIHRvIGlucHV0IHR5cGU9aGlkZGVuIG9yIGVsZW1lbnRzIGhpZGRlbiB2aWEgY3NzCiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlID0gdGhpcy5vcHRzLmVsZW1lbnQuY3NzKCd3aWR0aCcpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3R5bGUuaW5kZXhPZigiJSIpID4gMCkgcmV0dXJuIHN0eWxlOwoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmluYWxseSwgZmFsbGJhY2sgb24gdGhlIGNhbGN1bGF0ZWQgd2lkdGggb2YgdGhlIGVsZW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0aGlzLm9wdHMuZWxlbWVudC5vdXRlcldpZHRoKGZhbHNlKSA9PT0gMCA/ICdhdXRvJyA6IHRoaXMub3B0cy5lbGVtZW50Lm91dGVyV2lkdGgoZmFsc2UpICsgJ3B4Jyk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJC5pc0Z1bmN0aW9uKHRoaXMub3B0cy53aWR0aCkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5vcHRzLndpZHRoKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdHMud2lkdGg7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHZhciB3aWR0aCA9IHJlc29sdmVDb250YWluZXJXaWR0aC5jYWxsKHRoaXMpOwogICAgICAgICAgICBpZiAod2lkdGggIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmNzcygid2lkdGgiLCB3aWR0aCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICBTaW5nbGVTZWxlY3QyID0gY2xhenooQWJzdHJhY3RTZWxlY3QyLCB7CgogICAgICAgIC8vIHNpbmdsZQoKICAgICAgICBjcmVhdGVDb250YWluZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9ICQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmF0dHIoewogICAgICAgICAgICAgICAgImNsYXNzIjogInNlbGVjdDItY29udGFpbmVyIgogICAgICAgICAgICB9KS5odG1sKFsKICAgICAgICAgICAgICAgICI8YSBocmVmPSdqYXZhc2NyaXB0OnZvaWQoMCknIG9uY2xpY2s9J3JldHVybiBmYWxzZTsnIGNsYXNzPSdzZWxlY3QyLWNob2ljZScgdGFiaW5kZXg9Jy0xJz4iLAogICAgICAgICAgICAgICAgIiAgIDxzcGFuIGNsYXNzPSdzZWxlY3QyLWNob3Nlbic+Jm5ic3A7PC9zcGFuPjxhYmJyIGNsYXNzPSdzZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2UnPjwvYWJicj4iLAogICAgICAgICAgICAgICAgIiAgIDxzcGFuIGNsYXNzPSdzZWxlY3QyLWFycm93Jz48Yj48L2I+PC9zcGFuPiIsCiAgICAgICAgICAgICAgICAiPC9hPiIsCiAgICAgICAgICAgICAgICAiPGlucHV0IGNsYXNzPSdzZWxlY3QyLWZvY3Vzc2VyIHNlbGVjdDItb2Zmc2NyZWVuJyB0eXBlPSd0ZXh0Jy8+IiwKICAgICAgICAgICAgICAgICI8ZGl2IGNsYXNzPSdzZWxlY3QyLWRyb3Agc2VsZWN0Mi1kaXNwbGF5LW5vbmUnPiIsCiAgICAgICAgICAgICAgICAiICAgPGRpdiBjbGFzcz0nc2VsZWN0Mi1zZWFyY2gnPiIsCiAgICAgICAgICAgICAgICAiICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBhdXRvY29tcGxldGU9J29mZicgYXV0b2NvcnJlY3Q9J29mZicgYXV0b2NhcGl0YWxpemU9J29mZicgc3BlbGxjaGVjaz0nZmFsc2UnIGNsYXNzPSdzZWxlY3QyLWlucHV0Jy8+IiwKICAgICAgICAgICAgICAgICIgICA8L2Rpdj4iLAogICAgICAgICAgICAgICAgIiAgIDx1bCBjbGFzcz0nc2VsZWN0Mi1yZXN1bHRzJz4iLAogICAgICAgICAgICAgICAgIiAgIDwvdWw+IiwKICAgICAgICAgICAgICAgICI8L2Rpdj4iXS5qb2luKCIiKSk7CiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI7CiAgICAgICAgfSwKCiAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgZW5hYmxlSW50ZXJmYWNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50LmVuYWJsZUludGVyZmFjZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSB7CiAgICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnByb3AoImRpc2FibGVkIiwgIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgb3BlbmluZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgZWwsIHJhbmdlLCBsZW47CgogICAgICAgICAgICBpZiAodGhpcy5vcHRzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoID49IDApIHsKICAgICAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaCh0cnVlKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5wYXJlbnQub3BlbmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NlYXJjaElucHV0ICE9PSBmYWxzZSkgewogICAgICAgICAgICAgICAgLy8gSUUgYXBwZW5kcyBmb2N1c3Nlci52YWwoKSBhdCB0aGUgZW5kIG9mIGZpZWxkIDovIHNvIHdlIG1hbnVhbGx5IGluc2VydCBpdCBhdCB0aGUgYmVnaW5uaW5nIHVzaW5nIGEgcmFuZ2UKICAgICAgICAgICAgICAgIC8vIGFsbCBvdGhlciBicm93c2VycyBoYW5kbGUgdGhpcyBqdXN0IGZpbmUKCiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC52YWwodGhpcy5mb2N1c3Nlci52YWwoKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKICAgICAgICAgICAgLy8gbW92ZSB0aGUgY3Vyc29yIHRvIHRoZSBlbmQgYWZ0ZXIgZm9jdXNzaW5nLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBhdCB0aGUgYmVnaW5uaW5nIGFuZAogICAgICAgICAgICAvLyBuZXcgdGV4dCB3aWxsIGFwcGVhciAqYmVmb3JlKiBmb2N1c3Nlci52YWwoKQogICAgICAgICAgICBlbCA9IHRoaXMuc2VhcmNoLmdldCgwKTsKICAgICAgICAgICAgaWYgKGVsLmNyZWF0ZVRleHRSYW5nZSkgewogICAgICAgICAgICAgICAgcmFuZ2UgPSBlbC5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgICAgICAgICAgIHJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICAgICAgICAgIHJhbmdlLnNlbGVjdCgpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnNldFNlbGVjdGlvblJhbmdlKSB7CiAgICAgICAgICAgICAgICBsZW4gPSB0aGlzLnNlYXJjaC52YWwoKS5sZW5ndGg7CiAgICAgICAgICAgICAgICBlbC5zZXRTZWxlY3Rpb25SYW5nZShsZW4sIGxlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGluaXRpYWxpemVzIHNlYXJjaCdzIHZhbHVlIHdpdGggbmV4dFNlYXJjaFRlcm0gKGlmIGRlZmluZWQgYnkgdXNlcikKICAgICAgICAgICAgLy8gaWdub3JlIG5leHRTZWFyY2hUZXJtIGlmIHRoZSBkcm9wZG93biBpcyBvcGVuZWQgYnkgdGhlIHVzZXIgcHJlc3NpbmcgYSBsZXR0ZXIKICAgICAgICAgICAgaWYodGhpcy5zZWFyY2gudmFsKCkgPT09ICIiKSB7CiAgICAgICAgICAgICAgICBpZih0aGlzLm5leHRTZWFyY2hUZXJtICE9IHVuZGVmaW5lZCl7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2gudmFsKHRoaXMubmV4dFNlYXJjaFRlcm0pOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnNlbGVjdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnByb3AoImRpc2FibGVkIiwgdHJ1ZSkudmFsKCIiKTsKICAgICAgICAgICAgdGhpcy51cGRhdGVSZXN1bHRzKHRydWUpOwogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKCQuRXZlbnQoInNlbGVjdDItb3BlbiIpKTsKICAgICAgICB9LAoKICAgICAgICAvLyBzaW5nbGUKICAgICAgICBjbG9zZTogZnVuY3Rpb24gKHBhcmFtcykgewogICAgICAgICAgICBpZiAoIXRoaXMub3BlbmVkKCkpIHJldHVybjsKICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2xvc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgICAgICAgIHBhcmFtcyA9IHBhcmFtcyB8fCB7Zm9jdXM6IHRydWV9OwogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CgogICAgICAgICAgICBpZiAocGFyYW1zLmZvY3VzKSB7CiAgICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZvY3VzKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBzaW5nbGUKICAgICAgICBmb2N1czogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAodGhpcy5vcGVuZWQoKSkgewogICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5yZW1vdmVBdHRyKCJkaXNhYmxlZCIpOwogICAgICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5mb2N1cygpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgaXNGb2N1c2VkOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CiAgICAgICAgfSwKCiAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgY2FuY2VsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMucGFyZW50LmNhbmNlbC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnJlbW92ZUF0dHIoImRpc2FibGVkIik7CiAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIuZm9jdXMoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBzaW5nbGUKICAgICAgICBkZXN0cm95OiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgJCgibGFiZWxbZm9yPSciICsgdGhpcy5mb2N1c3Nlci5hdHRyKCdpZCcpICsgIiddIikKICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpZCIpKTsKICAgICAgICAgICAgdGhpcy5wYXJlbnQuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH0sCgogICAgICAgIC8vIHNpbmdsZQogICAgICAgIGluaXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHsKCiAgICAgICAgICAgIHZhciBzZWxlY3Rpb24sCiAgICAgICAgICAgICAgICBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lciwKICAgICAgICAgICAgICAgIGRyb3Bkb3duID0gdGhpcy5kcm9wZG93bjsKCiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPCAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNob3dTZWFyY2goZmFsc2UpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoKHRydWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IGNvbnRhaW5lci5maW5kKCIuc2VsZWN0Mi1jaG9pY2UiKTsKCiAgICAgICAgICAgIHRoaXMuZm9jdXNzZXIgPSBjb250YWluZXIuZmluZCgiLnNlbGVjdDItZm9jdXNzZXIiKTsKCiAgICAgICAgICAgIC8vIHJld3JpdGUgbGFiZWxzIGZyb20gb3JpZ2luYWwgZWxlbWVudCB0byBmb2N1c3NlcgogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmF0dHIoImlkIiwgInMyaWRfYXV0b2dlbiIrbmV4dFVpZCgpKTsKCiAgICAgICAgICAgICQoImxhYmVsW2Zvcj0nIiArIHRoaXMub3B0cy5lbGVtZW50LmF0dHIoImlkIikgKyAiJ10iKQogICAgICAgICAgICAgICAgLmF0dHIoJ2ZvcicsIHRoaXMuZm9jdXNzZXIuYXR0cignaWQnKSk7CgogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmF0dHIoInRhYmluZGV4IiwgdGhpcy5lbGVtZW50VGFiSW5kZXgpOwoKICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImtleWRvd24iLCB0aGlzLmJpbmQoZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ludGVyZmFjZUVuYWJsZWQoKSkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09PSBLRVkuUEFHRV9VUCB8fCBlLndoaWNoID09PSBLRVkuUEFHRV9ET1dOKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCB0aGUgcGFnZSBmcm9tIHNjcm9sbGluZwogICAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3dpdGNoIChlLndoaWNoKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuVVA6CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuRE9XTjoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlSGlnaGxpZ2h0KChlLndoaWNoID09PSBLRVkuVVApID8gLTEgOiAxKTsKICAgICAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuRU5URVI6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SGlnaGxpZ2h0ZWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuVEFCOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEhpZ2hsaWdodGVkKHtub0ZvY3VzOiB0cnVlfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICBjYXNlIEtFWS5FU0M6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsKGUpOwogICAgICAgICAgICAgICAgICAgICAgICBraWxsRXZlbnQoZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImJsdXIiLCB0aGlzLmJpbmQoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAgLy8gYSB3b3JrYXJvdW5kIGZvciBjaHJvbWUgdG8ga2VlcCB0aGUgc2VhcmNoIGZpZWxkIGZvY3Vzc2VkIHdoZW4gdGhlIHNjcm9sbCBiYXIgaXMgdXNlZCB0byBzY3JvbGwgdGhlIGRyb3Bkb3duLgogICAgICAgICAgICAgICAgLy8gd2l0aG91dCB0aGlzIHRoZSBzZWFyY2ggZmllbGQgbG9zZXMgZm9jdXMgd2hpY2ggaXMgYW5ub3lpbmcKICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSB0aGlzLmJvZHkoKS5nZXQoMCkpIHsKICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCh0aGlzLmJpbmQoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLmZvY3VzKCk7CiAgICAgICAgICAgICAgICAgICAgfSksIDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KSk7CgogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLm9uKCJrZXlkb3duIiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKCiAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gS0VZLlRBQiB8fCBLRVkuaXNDb250cm9sKGUpIHx8IEtFWS5pc0Z1bmN0aW9uS2V5KGUpIHx8IGUud2hpY2ggPT09IEtFWS5FU0MpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5vcGVuT25FbnRlciA9PT0gZmFsc2UgJiYgZS53aGljaCA9PT0gS0VZLkVOVEVSKSB7CiAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PSBLRVkuRE9XTiB8fCBlLndoaWNoID09IEtFWS5VUAogICAgICAgICAgICAgICAgICAgIHx8IChlLndoaWNoID09IEtFWS5FTlRFUiAmJiB0aGlzLm9wdHMub3Blbk9uRW50ZXIpKSB7CgogICAgICAgICAgICAgICAgICAgIGlmIChlLmFsdEtleSB8fCBlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLm1ldGFLZXkpIHJldHVybjsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7CiAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PSBLRVkuREVMRVRFIHx8IGUud2hpY2ggPT0gS0VZLkJBQ0tTUEFDRSkgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuYWxsb3dDbGVhcikgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCgogICAgICAgICAgICBpbnN0YWxsS2V5VXBDaGFuZ2VFdmVudCh0aGlzLmZvY3Vzc2VyKTsKICAgICAgICAgICAgdGhpcy5mb2N1c3Nlci5vbigia2V5dXAtY2hhbmdlIGlucHV0IiwgdGhpcy5iaW5kKGZ1bmN0aW9uKGUpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMubWluaW11bVJlc3VsdHNGb3JTZWFyY2ggPj0gMCkgewogICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKCkpIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgc2VsZWN0aW9uLm9uKCJtb3VzZWRvd24iLCAiYWJiciIsIHRoaXMuYmluZChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKCk7CiAgICAgICAgICAgICAgICBraWxsRXZlbnRJbW1lZGlhdGVseShlKTsKICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmZvY3VzKCk7CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgIHNlbGVjdGlvbi5vbigibW91c2Vkb3duIiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CgogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIikpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKCQuRXZlbnQoInNlbGVjdDItZm9jdXMiKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRoaXMub3BlbmVkKCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wZW4oKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBraWxsRXZlbnQoZSk7CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgIGRyb3Bkb3duLm9uKCJtb3VzZWRvd24iLCB0aGlzLmJpbmQoZnVuY3Rpb24oKSB7IHRoaXMuc2VhcmNoLmZvY3VzKCk7IH0pKTsKCiAgICAgICAgICAgIHNlbGVjdGlvbi5vbigiZm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rpb24oZSkgewogICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICB9KSk7CgogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLm9uKCJmb2N1cyIsIHRoaXMuYmluZChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIikpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKCQuRXZlbnQoInNlbGVjdDItZm9jdXMiKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CiAgICAgICAgICAgIH0pKS5vbigiYmx1ciIsIHRoaXMuYmluZChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcGVuZWQoKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUiKTsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKCQuRXZlbnQoInNlbGVjdDItYmx1ciIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB0aGlzLnNlYXJjaC5vbigiZm9jdXMiLCB0aGlzLmJpbmQoZnVuY3Rpb24oKXsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb250YWluZXIuaGFzQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcigkLkV2ZW50KCJzZWxlY3QyLWZvY3VzIikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoInNlbGVjdDItY29udGFpbmVyLWFjdGl2ZSIpOwogICAgICAgICAgICB9KSk7CgogICAgICAgICAgICB0aGlzLmluaXRDb250YWluZXJXaWR0aCgpOwogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC5hZGRDbGFzcygic2VsZWN0Mi1vZmZzY3JlZW4iKTsKICAgICAgICAgICAgdGhpcy5zZXRQbGFjZWhvbGRlcigpOwoKICAgICAgICB9LAoKICAgICAgICAvLyBzaW5nbGUKICAgICAgICBjbGVhcjogZnVuY3Rpb24odHJpZ2dlckNoYW5nZSkgewogICAgICAgICAgICB2YXIgZGF0YT10aGlzLnNlbGVjdGlvbi5kYXRhKCJzZWxlY3QyLWRhdGEiKTsKICAgICAgICAgICAgaWYgKGRhdGEpIHsgLy8gZ3VhcmQgYWdhaW5zdCBxdWV1ZWQgcXVpY2sgY29uc2VjdXRpdmUgY2xpY2tzCiAgICAgICAgICAgICAgICB2YXIgZXZ0ID0gJC5FdmVudCgic2VsZWN0Mi1jbGVhcmluZyIpOwogICAgICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcihldnQpOwogICAgICAgICAgICAgICAgaWYgKGV2dC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlck9wdGlvbiA9IHRoaXMuZ2V0UGxhY2Vob2xkZXJPcHRpb24oKTsKICAgICAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnZhbChwbGFjZWhvbGRlck9wdGlvbiA/IHBsYWNlaG9sZGVyT3B0aW9uLnZhbCgpIDogIiIpOwogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItY2hvc2VuIikuZW1wdHkoKTsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJlbW92ZURhdGEoInNlbGVjdDItZGF0YSIpOwogICAgICAgICAgICAgICAgdGhpcy5zZXRQbGFjZWhvbGRlcigpOwoKICAgICAgICAgICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICE9PSBmYWxzZSl7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcih7IHR5cGU6ICJzZWxlY3QyLXJlbW92ZWQiLCB2YWw6IHRoaXMuaWQoZGF0YSksIGNob2ljZTogZGF0YSB9KTsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2Uoe3JlbW92ZWQ6ZGF0YX0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLyoqCiAgICAgICAgICogU2V0cyBzZWxlY3Rpb24gYmFzZWQgb24gc291cmNlIGVsZW1lbnQncyB2YWx1ZQogICAgICAgICAqLwogICAgICAgIC8vIHNpbmdsZQogICAgICAgIGluaXRTZWxlY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHNlbGVjdGVkOwogICAgICAgICAgICBpZiAodGhpcy5pc1BsYWNlaG9sZGVyT3B0aW9uU2VsZWN0ZWQoKSkgewogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24obnVsbCk7CiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICB0aGlzLnNldFBsYWNlaG9sZGVyKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICAgICAgICAgICB0aGlzLm9wdHMuaW5pdFNlbGVjdGlvbi5jYWxsKG51bGwsIHRoaXMub3B0cy5lbGVtZW50LCBmdW5jdGlvbihzZWxlY3RlZCl7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQgJiYgc2VsZWN0ZWQgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0UGxhY2Vob2xkZXIoKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIGlzUGxhY2Vob2xkZXJPcHRpb25TZWxlY3RlZDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHZhciBwbGFjZWhvbGRlck9wdGlvbjsKICAgICAgICAgICAgaWYgKCF0aGlzLmdldFBsYWNlaG9sZGVyKCkpIHJldHVybiBmYWxzZTsgLy8gbm8gcGxhY2Vob2xkZXIgc3BlY2lmaWVkIHNvIG5vIG9wdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZAogICAgICAgICAgICByZXR1cm4gKChwbGFjZWhvbGRlck9wdGlvbiA9IHRoaXMuZ2V0UGxhY2Vob2xkZXJPcHRpb24oKSkgIT09IHVuZGVmaW5lZCAmJiBwbGFjZWhvbGRlck9wdGlvbi5pcygnOnNlbGVjdGVkJykpCiAgICAgICAgICAgICAgICB8fCAodGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPT09ICIiKQogICAgICAgICAgICAgICAgfHwgKHRoaXMub3B0cy5lbGVtZW50LnZhbCgpID09PSB1bmRlZmluZWQpCiAgICAgICAgICAgICAgICB8fCAodGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPT09IG51bGwpOwogICAgICAgIH0sCgogICAgICAgIC8vIHNpbmdsZQogICAgICAgIHByZXBhcmVPcHRzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBvcHRzID0gdGhpcy5wYXJlbnQucHJlcGFyZU9wdHMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwKICAgICAgICAgICAgICAgIHNlbGY9dGhpczsKCiAgICAgICAgICAgIGlmIChvcHRzLmVsZW1lbnQuZ2V0KDApLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gInNlbGVjdCIpIHsKICAgICAgICAgICAgICAgIC8vIGluc3RhbGwgdGhlIHNlbGVjdGlvbiBpbml0aWFsaXplcgogICAgICAgICAgICAgICAgb3B0cy5pbml0U2VsZWN0aW9uID0gZnVuY3Rpb24gKGVsZW1lbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVkID0gZWxlbWVudC5maW5kKCI6c2VsZWN0ZWQiKTsKICAgICAgICAgICAgICAgICAgICAvLyBhIHNpbmdsZSBzZWxlY3QgYm94IGFsd2F5cyBoYXMgYSB2YWx1ZSwgbm8gbmVlZCB0byBudWxsIGNoZWNrICdzZWxlY3RlZCcKICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhzZWxmLm9wdGlvblRvRGF0YShzZWxlY3RlZCkpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIGlmICgiZGF0YSIgaW4gb3B0cykgewogICAgICAgICAgICAgICAgLy8gaW5zdGFsbCBkZWZhdWx0IGluaXRTZWxlY3Rpb24gd2hlbiBhcHBsaWVkIHRvIGhpZGRlbiBpbnB1dCBhbmQgZGF0YSBpcyBsb2NhbAogICAgICAgICAgICAgICAgb3B0cy5pbml0U2VsZWN0aW9uID0gb3B0cy5pbml0U2VsZWN0aW9uIHx8IGZ1bmN0aW9uIChlbGVtZW50LCBjYWxsYmFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZCA9IGVsZW1lbnQudmFsKCk7CiAgICAgICAgICAgICAgICAgICAgLy9zZWFyY2ggaW4gZGF0YSBieSBpZCwgc3RvcmluZyB0aGUgYWN0dWFsIG1hdGNoaW5nIGl0ZW0KICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBudWxsOwogICAgICAgICAgICAgICAgICAgIG9wdHMucXVlcnkoewogICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVyOiBmdW5jdGlvbih0ZXJtLCB0ZXh0LCBlbCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXNfbWF0Y2ggPSBlcXVhbChpZCwgb3B0cy5pZChlbCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX21hdGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSBlbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpc19tYXRjaDsKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2s6ICEkLmlzRnVuY3Rpb24oY2FsbGJhY2spID8gJC5ub29wIDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhtYXRjaCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBvcHRzOwogICAgICAgIH0sCgogICAgICAgIC8vIHNpbmdsZQogICAgICAgIGdldFBsYWNlaG9sZGVyOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgLy8gaWYgYSBwbGFjZWhvbGRlciBpcyBzcGVjaWZpZWQgb24gYSBzaW5nbGUgc2VsZWN0IHdpdGhvdXQgYSB2YWxpZCBwbGFjZWhvbGRlciBvcHRpb24gaWdub3JlIGl0CiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0UGxhY2Vob2xkZXJPcHRpb24oKSA9PT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50LmdldFBsYWNlaG9sZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgc2V0UGxhY2Vob2xkZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwoKICAgICAgICAgICAgaWYgKHRoaXMuaXNQbGFjZWhvbGRlck9wdGlvblNlbGVjdGVkKCkgJiYgcGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCkgewoKICAgICAgICAgICAgICAgIC8vIGNoZWNrIGZvciBhIHBsYWNlaG9sZGVyIG9wdGlvbiBpZiBhdHRhY2hlZCB0byBhIHNlbGVjdAogICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ICYmIHRoaXMuZ2V0UGxhY2Vob2xkZXJPcHRpb24oKSA9PT0gdW5kZWZpbmVkKSByZXR1cm47CgogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItY2hvc2VuIikuaHRtbCh0aGlzLm9wdHMuZXNjYXBlTWFya3VwKHBsYWNlaG9sZGVyKSk7CgogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uYWRkQ2xhc3MoInNlbGVjdDItZGVmYXVsdCIpOwoKICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLnJlbW92ZUNsYXNzKCJzZWxlY3QyLWFsbG93Y2xlYXIiKTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIHNpbmdsZQogICAgICAgIHBvc3Rwcm9jZXNzUmVzdWx0czogZnVuY3Rpb24gKGRhdGEsIGluaXRpYWwsIG5vSGlnaGxpZ2h0VXBkYXRlKSB7CiAgICAgICAgICAgIHZhciBzZWxlY3RlZCA9IDAsIHNlbGYgPSB0aGlzLCBzaG93U2VhcmNoSW5wdXQgPSB0cnVlOwoKICAgICAgICAgICAgLy8gZmluZCB0aGUgc2VsZWN0ZWQgZWxlbWVudCBpbiB0aGUgcmVzdWx0IGxpc3QKCiAgICAgICAgICAgIHRoaXMuZmluZEhpZ2hsaWdodGFibGVDaG9pY2VzKCkuZWFjaDIoZnVuY3Rpb24gKGksIGVsbSkgewogICAgICAgICAgICAgICAgaWYgKGVxdWFsKHNlbGYuaWQoZWxtLmRhdGEoInNlbGVjdDItZGF0YSIpKSwgc2VsZi5vcHRzLmVsZW1lbnQudmFsKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQgPSBpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyBhbmQgaGlnaGxpZ2h0IGl0CiAgICAgICAgICAgIGlmIChub0hpZ2hsaWdodFVwZGF0ZSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIGlmIChpbml0aWFsID09PSB0cnVlICYmIHNlbGVjdGVkID49IDApIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZ2hsaWdodChzZWxlY3RlZCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0KDApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBoaWRlIHRoZSBzZWFyY2ggYm94IGlmIHRoaXMgaXMgdGhlIGZpcnN0IHdlIGdvdCB0aGUgcmVzdWx0cyBhbmQgdGhlcmUgYXJlIGVub3VnaCBvZiB0aGVtIGZvciBzZWFyY2gKCiAgICAgICAgICAgIGlmIChpbml0aWFsID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgICB2YXIgbWluID0gdGhpcy5vcHRzLm1pbmltdW1SZXN1bHRzRm9yU2VhcmNoOwogICAgICAgICAgICAgICAgaWYgKG1pbiA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoKGNvdW50UmVzdWx0cyhkYXRhLnJlc3VsdHMpID49IG1pbik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBzaW5nbGUKICAgICAgICBzaG93U2VhcmNoOiBmdW5jdGlvbihzaG93U2VhcmNoSW5wdXQpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NlYXJjaElucHV0ID09PSBzaG93U2VhcmNoSW5wdXQpIHJldHVybjsKCiAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaElucHV0ID0gc2hvd1NlYXJjaElucHV0OwoKICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5maW5kKCIuc2VsZWN0Mi1zZWFyY2giKS50b2dnbGVDbGFzcygic2VsZWN0Mi1zZWFyY2gtaGlkZGVuIiwgIXNob3dTZWFyY2hJbnB1dCk7CiAgICAgICAgICAgIHRoaXMuZHJvcGRvd24uZmluZCgiLnNlbGVjdDItc2VhcmNoIikudG9nZ2xlQ2xhc3MoInNlbGVjdDItb2Zmc2NyZWVuIiwgIXNob3dTZWFyY2hJbnB1dCk7CiAgICAgICAgICAgIC8vYWRkICJzZWxlY3QyLXdpdGgtc2VhcmNoYm94IiB0byB0aGUgY29udGFpbmVyIGlmIHNlYXJjaCBib3ggaXMgc2hvd24KICAgICAgICAgICAgJCh0aGlzLmRyb3Bkb3duLCB0aGlzLmNvbnRhaW5lcikudG9nZ2xlQ2xhc3MoInNlbGVjdDItd2l0aC1zZWFyY2hib3giLCBzaG93U2VhcmNoSW5wdXQpOwogICAgICAgIH0sCgogICAgICAgIC8vIHNpbmdsZQogICAgICAgIG9uU2VsZWN0OiBmdW5jdGlvbiAoZGF0YSwgb3B0aW9ucykgewoKICAgICAgICAgICAgaWYgKCF0aGlzLnRyaWdnZXJTZWxlY3QoZGF0YSkpIHsgcmV0dXJuOyB9CgogICAgICAgICAgICB2YXIgb2xkID0gdGhpcy5vcHRzLmVsZW1lbnQudmFsKCksCiAgICAgICAgICAgICAgICBvbGREYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC52YWwodGhpcy5pZChkYXRhKSk7CiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKGRhdGEpOwoKICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcih7IHR5cGU6ICJzZWxlY3QyLXNlbGVjdGVkIiwgdmFsOiB0aGlzLmlkKGRhdGEpLCBjaG9pY2U6IGRhdGEgfSk7CgogICAgICAgICAgICB0aGlzLm5leHRTZWFyY2hUZXJtID0gdGhpcy5vcHRzLm5leHRTZWFyY2hUZXJtKGRhdGEsIHRoaXMuc2VhcmNoLnZhbCgpKTsKICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwoKICAgICAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLm5vRm9jdXMpCiAgICAgICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLmZvY3VzKCk7CgogICAgICAgICAgICBpZiAoIWVxdWFsKG9sZCwgdGhpcy5pZChkYXRhKSkpIHsgdGhpcy50cmlnZ2VyQ2hhbmdlKHthZGRlZDpkYXRhLHJlbW92ZWQ6b2xkRGF0YX0pOyB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgdXBkYXRlU2VsZWN0aW9uOiBmdW5jdGlvbiAoZGF0YSkgewoKICAgICAgICAgICAgdmFyIGNvbnRhaW5lcj10aGlzLnNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1jaG9zZW4iKSwgZm9ybWF0dGVkLCBjc3NDbGFzczsKCiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRhdGEoInNlbGVjdDItZGF0YSIsIGRhdGEpOwoKICAgICAgICAgICAgY29udGFpbmVyLmVtcHR5KCk7CiAgICAgICAgICAgIGlmIChkYXRhICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBmb3JtYXR0ZWQ9dGhpcy5vcHRzLmZvcm1hdFNlbGVjdGlvbihkYXRhLCBjb250YWluZXIsIHRoaXMub3B0cy5lc2NhcGVNYXJrdXApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChmb3JtYXR0ZWQgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZChmb3JtYXR0ZWQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNzc0NsYXNzPXRoaXMub3B0cy5mb3JtYXRTZWxlY3Rpb25Dc3NDbGFzcyhkYXRhLCBjb250YWluZXIpOwogICAgICAgICAgICBpZiAoY3NzQ2xhc3MgIT09IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgY29udGFpbmVyLmFkZENsYXNzKGNzc0NsYXNzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmVtb3ZlQ2xhc3MoInNlbGVjdDItZGVmYXVsdCIpOwoKICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5hbGxvd0NsZWFyICYmIHRoaXMuZ2V0UGxhY2Vob2xkZXIoKSAhPT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1hbGxvd2NsZWFyIik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBzaW5nbGUKICAgICAgICB2YWw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHZhbCwKICAgICAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UgPSBmYWxzZSwKICAgICAgICAgICAgICAgIGRhdGEgPSBudWxsLAogICAgICAgICAgICAgICAgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgICAgICBvbGREYXRhID0gdGhpcy5kYXRhKCk7CgogICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0cy5lbGVtZW50LnZhbCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICB2YWwgPSBhcmd1bWVudHNbMF07CgogICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgICAgICAgIHRyaWdnZXJDaGFuZ2UgPSBhcmd1bWVudHNbMV07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QKICAgICAgICAgICAgICAgICAgICAudmFsKHZhbCkKICAgICAgICAgICAgICAgICAgICAuZmluZCgiOnNlbGVjdGVkIikuZWFjaDIoZnVuY3Rpb24gKGksIGVsbSkgewogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5vcHRpb25Ub0RhdGEoZWxtKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oZGF0YSk7CiAgICAgICAgICAgICAgICB0aGlzLnNldFBsYWNlaG9sZGVyKCk7CiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSh7YWRkZWQ6IGRhdGEsIHJlbW92ZWQ6b2xkRGF0YX0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gdmFsIGlzIGFuIGlkLiAhdmFsIGlzIHRydWUgZm9yIFt1bmRlZmluZWQsbnVsbCwnJywwXSAtIDAgaXMgbGVnYWwKICAgICAgICAgICAgICAgIGlmICghdmFsICYmIHZhbCAhPT0gMCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2xlYXIodHJpZ2dlckNoYW5nZSk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5pbml0U2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImNhbm5vdCBjYWxsIHZhbCgpIGlmIGluaXRTZWxlY3Rpb24oKSBpcyBub3QgZGVmaW5lZCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudmFsKHZhbCk7CiAgICAgICAgICAgICAgICB0aGlzLm9wdHMuaW5pdFNlbGVjdGlvbih0aGlzLm9wdHMuZWxlbWVudCwgZnVuY3Rpb24oZGF0YSl7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5vcHRzLmVsZW1lbnQudmFsKCFkYXRhID8gIiIgOiBzZWxmLmlkKGRhdGEpKTsKICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihkYXRhKTsKICAgICAgICAgICAgICAgICAgICBzZWxmLnNldFBsYWNlaG9sZGVyKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyQ2hhbmdlKHthZGRlZDogZGF0YSwgcmVtb3ZlZDpvbGREYXRhfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBzaW5nbGUKICAgICAgICBjbGVhclNlYXJjaDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLnNlYXJjaC52YWwoIiIpOwogICAgICAgICAgICB0aGlzLmZvY3Vzc2VyLnZhbCgiIik7CiAgICAgICAgfSwKCiAgICAgICAgLy8gc2luZ2xlCiAgICAgICAgZGF0YTogZnVuY3Rpb24odmFsdWUpIHsKICAgICAgICAgICAgdmFyIGRhdGEsCiAgICAgICAgICAgICAgICB0cmlnZ2VyQ2hhbmdlID0gZmFsc2U7CgogICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgICAgZGF0YSA9IHRoaXMuc2VsZWN0aW9uLmRhdGEoInNlbGVjdDItZGF0YSIpOwogICAgICAgICAgICAgICAgaWYgKGRhdGEgPT0gdW5kZWZpbmVkKSBkYXRhID0gbnVsbDsKICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlckNoYW5nZSA9IGFyZ3VtZW50c1sxXTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyKHRyaWdnZXJDaGFuZ2UpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBkYXRhID0gdGhpcy5kYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudmFsKCF2YWx1ZSA/ICIiIDogdGhpcy5pZCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2Uoe2FkZGVkOiB2YWx1ZSwgcmVtb3ZlZDpkYXRhfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CgogICAgTXVsdGlTZWxlY3QyID0gY2xhenooQWJzdHJhY3RTZWxlY3QyLCB7CgogICAgICAgIC8vIG11bHRpCiAgICAgICAgY3JlYXRlQ29udGFpbmVyOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBjb250YWluZXIgPSAkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5hdHRyKHsKICAgICAgICAgICAgICAgICJjbGFzcyI6ICJzZWxlY3QyLWNvbnRhaW5lciBzZWxlY3QyLWNvbnRhaW5lci1tdWx0aSIKICAgICAgICAgICAgfSkuaHRtbChbCiAgICAgICAgICAgICAgICAiPHVsIGNsYXNzPSdzZWxlY3QyLWNob2ljZXMnPiIsCiAgICAgICAgICAgICAgICAiICA8bGkgY2xhc3M9J3NlbGVjdDItc2VhcmNoLWZpZWxkJz4iLAogICAgICAgICAgICAgICAgIiAgICA8aW5wdXQgdHlwZT0ndGV4dCcgYXV0b2NvbXBsZXRlPSdvZmYnIGF1dG9jb3JyZWN0PSdvZmYnIGF1dG9jYXBpdGFsaXplPSdvZmYnIHNwZWxsY2hlY2s9J2ZhbHNlJyBjbGFzcz0nc2VsZWN0Mi1pbnB1dCc+IiwKICAgICAgICAgICAgICAgICIgIDwvbGk+IiwKICAgICAgICAgICAgICAgICI8L3VsPiIsCiAgICAgICAgICAgICAgICAiPGRpdiBjbGFzcz0nc2VsZWN0Mi1kcm9wIHNlbGVjdDItZHJvcC1tdWx0aSBzZWxlY3QyLWRpc3BsYXktbm9uZSc+IiwKICAgICAgICAgICAgICAgICIgICA8dWwgY2xhc3M9J3NlbGVjdDItcmVzdWx0cyc+IiwKICAgICAgICAgICAgICAgICIgICA8L3VsPiIsCiAgICAgICAgICAgICAgICAiPC9kaXY+Il0uam9pbigiIikpOwogICAgICAgICAgICByZXR1cm4gY29udGFpbmVyOwogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgcHJlcGFyZU9wdHM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIG9wdHMgPSB0aGlzLnBhcmVudC5wcmVwYXJlT3B0cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLAogICAgICAgICAgICAgICAgc2VsZj10aGlzOwoKICAgICAgICAgICAgLy8gVE9ETyB2YWxpZGF0ZSBwbGFjZWhvbGRlciBpcyBhIHN0cmluZyBpZiBzcGVjaWZpZWQKCiAgICAgICAgICAgIGlmIChvcHRzLmVsZW1lbnQuZ2V0KDApLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gInNlbGVjdCIpIHsKICAgICAgICAgICAgICAgIC8vIGluc3RhbGwgc3RoZSBzZWxlY3Rpb24gaW5pdGlhbGl6ZXIKICAgICAgICAgICAgICAgIG9wdHMuaW5pdFNlbGVjdGlvbiA9IGZ1bmN0aW9uIChlbGVtZW50LCBjYWxsYmFjaykgewoKICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IFtdOwoKICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZpbmQoIjpzZWxlY3RlZCIpLmVhY2gyKGZ1bmN0aW9uIChpLCBlbG0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5wdXNoKHNlbGYub3B0aW9uVG9EYXRhKGVsbSkpOwogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfSBlbHNlIGlmICgiZGF0YSIgaW4gb3B0cykgewogICAgICAgICAgICAgICAgLy8gaW5zdGFsbCBkZWZhdWx0IGluaXRTZWxlY3Rpb24gd2hlbiBhcHBsaWVkIHRvIGhpZGRlbiBpbnB1dCBhbmQgZGF0YSBpcyBsb2NhbAogICAgICAgICAgICAgICAgb3B0cy5pbml0U2VsZWN0aW9uID0gb3B0cy5pbml0U2VsZWN0aW9uIHx8IGZ1bmN0aW9uIChlbGVtZW50LCBjYWxsYmFjaykgewogICAgICAgICAgICAgICAgICAgIHZhciBpZHMgPSBzcGxpdFZhbChlbGVtZW50LnZhbCgpLCBvcHRzLnNlcGFyYXRvcik7CiAgICAgICAgICAgICAgICAgICAgLy9zZWFyY2ggaW4gZGF0YSBieSBhcnJheSBvZiBpZHMsIHN0b3JpbmcgbWF0Y2hpbmcgaXRlbXMgaW4gYSBsaXN0CiAgICAgICAgICAgICAgICAgICAgdmFyIG1hdGNoZXMgPSBbXTsKICAgICAgICAgICAgICAgICAgICBvcHRzLnF1ZXJ5KHsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcjogZnVuY3Rpb24odGVybSwgdGV4dCwgZWwpewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlzX21hdGNoID0gJC5ncmVwKGlkcywgZnVuY3Rpb24oaWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXF1YWwoaWQsIG9wdHMuaWQoZWwpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19tYXRjaCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMucHVzaChlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNfbWF0Y2g7CiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrOiAhJC5pc0Z1bmN0aW9uKGNhbGxiYWNrKSA/ICQubm9vcCA6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVvcmRlciBtYXRjaGVzIGJhc2VkIG9uIHRoZSBvcmRlciB0aGV5IGFwcGVhciBpbiB0aGUgaWRzIGFycmF5IGJlY2F1c2UgcmlnaHQgbm93CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGV5IGFyZSBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gZGF0YSBhcnJheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9yZGVyZWQgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaWRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gaWRzW2ldOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWF0Y2hlcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBtYXRjaGVzW2pdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXF1YWwoaWQsIG9wdHMuaWQobWF0Y2gpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JkZXJlZC5wdXNoKG1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuc3BsaWNlKGosIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhvcmRlcmVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIG9wdHM7CiAgICAgICAgfSwKCiAgICAgICAgc2VsZWN0Q2hvaWNlOiBmdW5jdGlvbiAoY2hvaWNlKSB7CgogICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSB0aGlzLmNvbnRhaW5lci5maW5kKCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIik7CiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggJiYgY2hvaWNlICYmIGNob2ljZVswXSA9PSBzZWxlY3RlZFswXSkgewoKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKCJjaG9pY2UtZGVzZWxlY3RlZCIsIHNlbGVjdGVkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHNlbGVjdGVkLnJlbW92ZUNsYXNzKCJzZWxlY3QyLXNlYXJjaC1jaG9pY2UtZm9jdXMiKTsKICAgICAgICAgICAgICAgIGlmIChjaG9pY2UgJiYgY2hvaWNlLmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICAgICAgICAgICAgICBjaG9pY2UuYWRkQ2xhc3MoInNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyIpOwogICAgICAgICAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoImNob2ljZS1zZWxlY3RlZCIsIGNob2ljZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkKCJsYWJlbFtmb3I9JyIgKyB0aGlzLnNlYXJjaC5hdHRyKCdpZCcpICsgIiddIikKICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpZCIpKTsKICAgICAgICAgICAgdGhpcy5wYXJlbnQuZGVzdHJveS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKCkgewoKICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gIi5zZWxlY3QyLWNob2ljZXMiLCBzZWxlY3Rpb247CgogICAgICAgICAgICB0aGlzLnNlYXJjaENvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1maWVsZCIpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHNlbGVjdGlvbiA9IHRoaXMuY29udGFpbmVyLmZpbmQoc2VsZWN0b3IpOwoKICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ub24oImNsaWNrIiwgIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2U6bm90KC5zZWxlY3QyLWxvY2tlZCkiLCBmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgLy9raWxsRXZlbnQoZSk7CiAgICAgICAgICAgICAgICBfdGhpcy5zZWFyY2hbMF0uZm9jdXMoKTsKICAgICAgICAgICAgICAgIF90aGlzLnNlbGVjdENob2ljZSgkKHRoaXMpKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvLyByZXdyaXRlIGxhYmVscyBmcm9tIG9yaWdpbmFsIGVsZW1lbnQgdG8gZm9jdXNzZXIKICAgICAgICAgICAgdGhpcy5zZWFyY2guYXR0cigiaWQiLCAiczJpZF9hdXRvZ2VuIituZXh0VWlkKCkpOwogICAgICAgICAgICAkKCJsYWJlbFtmb3I9JyIgKyB0aGlzLm9wdHMuZWxlbWVudC5hdHRyKCJpZCIpICsgIiddIikKICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCB0aGlzLnNlYXJjaC5hdHRyKCdpZCcpKTsKCiAgICAgICAgICAgIHRoaXMuc2VhcmNoLm9uKCJpbnB1dCBwYXN0ZSIsIHRoaXMuYmluZChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ludGVyZmFjZUVuYWJsZWQoKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLm9wZW5lZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pKTsKCiAgICAgICAgICAgIHRoaXMuc2VhcmNoLmF0dHIoInRhYmluZGV4IiwgdGhpcy5lbGVtZW50VGFiSW5kZXgpOwoKICAgICAgICAgICAgdGhpcy5rZXlkb3ducyA9IDA7CiAgICAgICAgICAgIHRoaXMuc2VhcmNoLm9uKCJrZXlkb3duIiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKCiAgICAgICAgICAgICAgICArK3RoaXMua2V5ZG93bnM7CiAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3Rpb24uZmluZCgiLnNlbGVjdDItc2VhcmNoLWNob2ljZS1mb2N1cyIpOwogICAgICAgICAgICAgICAgdmFyIHByZXYgPSBzZWxlY3RlZC5wcmV2KCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlOm5vdCguc2VsZWN0Mi1sb2NrZWQpIik7CiAgICAgICAgICAgICAgICB2YXIgbmV4dCA9IHNlbGVjdGVkLm5leHQoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2U6bm90KC5zZWxlY3QyLWxvY2tlZCkiKTsKICAgICAgICAgICAgICAgIHZhciBwb3MgPSBnZXRDdXJzb3JJbmZvKHRoaXMuc2VhcmNoKTsKCiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQubGVuZ3RoICYmCiAgICAgICAgICAgICAgICAgICAgKGUud2hpY2ggPT0gS0VZLkxFRlQgfHwgZS53aGljaCA9PSBLRVkuUklHSFQgfHwgZS53aGljaCA9PSBLRVkuQkFDS1NQQUNFIHx8IGUud2hpY2ggPT0gS0VZLkRFTEVURSB8fCBlLndoaWNoID09IEtFWS5FTlRFUikpIHsKICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0ZWRDaG9pY2UgPSBzZWxlY3RlZDsKICAgICAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PSBLRVkuTEVGVCAmJiBwcmV2Lmxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZENob2ljZSA9IHByZXY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGUud2hpY2ggPT0gS0VZLlJJR0hUKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hvaWNlID0gbmV4dC5sZW5ndGggPyBuZXh0IDogbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZS53aGljaCA9PT0gS0VZLkJBQ0tTUEFDRSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0KHNlbGVjdGVkLmZpcnN0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hvaWNlID0gcHJldi5sZW5ndGggPyBwcmV2IDogbmV4dDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gS0VZLkRFTEVURSkgewogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0KHNlbGVjdGVkLmZpcnN0KCkpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hvaWNlID0gbmV4dC5sZW5ndGggPyBuZXh0IDogbnVsbDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUud2hpY2ggPT0gS0VZLkVOVEVSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hvaWNlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q2hvaWNlKHNlbGVjdGVkQ2hvaWNlKTsKICAgICAgICAgICAgICAgICAgICBraWxsRXZlbnQoZSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZENob2ljZSB8fCAhc2VsZWN0ZWRDaG9pY2UubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCgoZS53aGljaCA9PT0gS0VZLkJBQ0tTUEFDRSAmJiB0aGlzLmtleWRvd25zID09IDEpCiAgICAgICAgICAgICAgICAgICAgfHwgZS53aGljaCA9PSBLRVkuTEVGVCkgJiYgKHBvcy5vZmZzZXQgPT0gMCAmJiAhcG9zLmxlbmd0aCkpIHsKCiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDaG9pY2Uoc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2U6bm90KC5zZWxlY3QyLWxvY2tlZCkiKS5sYXN0KCkpOwogICAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q2hvaWNlKG51bGwpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wZW5lZCgpKSB7CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChlLndoaWNoKSB7CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuVVA6CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuRE9XTjoKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb3ZlSGlnaGxpZ2h0KChlLndoaWNoID09PSBLRVkuVVApID8gLTEgOiAxKTsKICAgICAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuRU5URVI6CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0SGlnaGxpZ2h0ZWQoKTsKICAgICAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuVEFCOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEhpZ2hsaWdodGVkKHtub0ZvY3VzOnRydWV9KTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgY2FzZSBLRVkuRVNDOgogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbChlKTsKICAgICAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09PSBLRVkuVEFCIHx8IEtFWS5pc0NvbnRyb2woZSkgfHwgS0VZLmlzRnVuY3Rpb25LZXkoZSkKICAgICAgICAgICAgICAgICB8fCBlLndoaWNoID09PSBLRVkuQkFDS1NQQUNFIHx8IGUud2hpY2ggPT09IEtFWS5FU0MpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGUud2hpY2ggPT09IEtFWS5FTlRFUikgewogICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdHMub3Blbk9uRW50ZXIgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLnNoaWZ0S2V5IHx8IGUubWV0YUtleSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRoaXMub3BlbigpOwoKICAgICAgICAgICAgICAgIGlmIChlLndoaWNoID09PSBLRVkuUEFHRV9VUCB8fCBlLndoaWNoID09PSBLRVkuUEFHRV9ET1dOKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCB0aGUgcGFnZSBmcm9tIHNjcm9sbGluZwogICAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gS0VZLkVOVEVSKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gcHJldmVudCBmb3JtIGZyb20gYmVpbmcgc3VibWl0dGVkCiAgICAgICAgICAgICAgICAgICAga2lsbEV2ZW50KGUpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgdGhpcy5zZWFyY2gub24oImtleXVwIiwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICB0aGlzLmtleWRvd25zID0gMDsKICAgICAgICAgICAgICAgIHRoaXMucmVzaXplU2VhcmNoKCk7CiAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CgogICAgICAgICAgICB0aGlzLnNlYXJjaC5vbigiYmx1ciIsIHRoaXMuYmluZChmdW5jdGlvbihlKSB7CiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5yZW1vdmVDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC5yZW1vdmVDbGFzcygic2VsZWN0Mi1mb2N1c2VkIik7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdENob2ljZShudWxsKTsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5vcGVuZWQoKSkgdGhpcy5jbGVhclNlYXJjaCgpOwogICAgICAgICAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTsKICAgICAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoJC5FdmVudCgic2VsZWN0Mi1ibHVyIikpOwogICAgICAgICAgICB9KSk7CgogICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5vbigiY2xpY2siLCBzZWxlY3RvciwgdGhpcy5iaW5kKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKICAgICAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5jbG9zZXN0KCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIikubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIC8vIGNsaWNrZWQgaW5zaWRlIGEgc2VsZWN0MiBzZWFyY2ggY2hvaWNlLCBkbyBub3Qgb3BlbgogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q2hvaWNlKG51bGwpOwogICAgICAgICAgICAgICAgdGhpcy5jbGVhclBsYWNlaG9sZGVyKCk7CiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29udGFpbmVyLmhhc0NsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUiKSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoJC5FdmVudCgic2VsZWN0Mi1mb2N1cyIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMub3BlbigpOwogICAgICAgICAgICAgICAgdGhpcy5mb2N1c1NlYXJjaCgpOwogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICB9KSk7CgogICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5vbigiZm9jdXMiLCBzZWxlY3RvciwgdGhpcy5iaW5kKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0ludGVyZmFjZUVuYWJsZWQoKSkgcmV0dXJuOwogICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNvbnRhaW5lci5oYXNDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIikpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKCQuRXZlbnQoInNlbGVjdDItZm9jdXMiKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5hZGRDbGFzcygic2VsZWN0Mi1jb250YWluZXItYWN0aXZlIik7CiAgICAgICAgICAgICAgICB0aGlzLmRyb3Bkb3duLmFkZENsYXNzKCJzZWxlY3QyLWRyb3AtYWN0aXZlIik7CiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyUGxhY2Vob2xkZXIoKTsKICAgICAgICAgICAgfSkpOwoKICAgICAgICAgICAgdGhpcy5pbml0Q29udGFpbmVyV2lkdGgoKTsKICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQuYWRkQ2xhc3MoInNlbGVjdDItb2Zmc2NyZWVuIik7CgogICAgICAgICAgICAvLyBzZXQgdGhlIHBsYWNlaG9sZGVyIGlmIG5lY2Vzc2FyeQogICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBlbmFibGVJbnRlcmZhY2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5wYXJlbnQuZW5hYmxlSW50ZXJmYWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnByb3AoImRpc2FibGVkIiwgIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBpbml0U2VsZWN0aW9uOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBkYXRhOwogICAgICAgICAgICBpZiAodGhpcy5vcHRzLmVsZW1lbnQudmFsKCkgPT09ICIiICYmIHRoaXMub3B0cy5lbGVtZW50LnRleHQoKSA9PT0gIiIpIHsKICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKFtdKTsKICAgICAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgcGxhY2Vob2xkZXIgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0IHx8IHRoaXMub3B0cy5lbGVtZW50LnZhbCgpICE9PSAiIikgewogICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgICAgICAgdGhpcy5vcHRzLmluaXRTZWxlY3Rpb24uY2FsbChudWxsLCB0aGlzLm9wdHMuZWxlbWVudCwgZnVuY3Rpb24oZGF0YSl7CiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT09IHVuZGVmaW5lZCAmJiBkYXRhICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlU2VsZWN0aW9uKGRhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNldCB0aGUgcGxhY2Vob2xkZXIgaWYgbmVjZXNzYXJ5CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xlYXJTZWFyY2goKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgY2xlYXJTZWFyY2g6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpLAogICAgICAgICAgICAgICAgbWF4V2lkdGggPSB0aGlzLmdldE1heFNlYXJjaFdpZHRoKCk7CgogICAgICAgICAgICBpZiAocGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCAgJiYgdGhpcy5nZXRWYWwoKS5sZW5ndGggPT09IDAgJiYgdGhpcy5zZWFyY2guaGFzQ2xhc3MoInNlbGVjdDItZm9jdXNlZCIpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgdGhpcy5zZWFyY2gudmFsKHBsYWNlaG9sZGVyKS5hZGRDbGFzcygic2VsZWN0Mi1kZWZhdWx0Iik7CiAgICAgICAgICAgICAgICAvLyBzdHJldGNoIHRoZSBzZWFyY2ggYm94IHRvIGZ1bGwgd2lkdGggb2YgdGhlIGNvbnRhaW5lciBzbyBhcyBtdWNoIG9mIHRoZSBwbGFjZWhvbGRlciBpcyB2aXNpYmxlIGFzIHBvc3NpYmxlCiAgICAgICAgICAgICAgICAvLyB3ZSBjb3VsZCBjYWxsIHRoaXMucmVzaXplU2VhcmNoKCksIGJ1dCB3ZSBkbyBub3QgYmVjYXVzZSB0aGF0IHJlcXVpcmVzIGEgc2l6ZXIgYW5kIHdlIGRvIG5vdCB3YW50IHRvIGNyZWF0ZSBvbmUgc28gZWFybHkgYmVjYXVzZSBvZiBhIGZpcmVmb3ggYnVnLCBzZWUgIzk0NAogICAgICAgICAgICAgICAgdGhpcy5zZWFyY2gud2lkdGgobWF4V2lkdGggPiAwID8gbWF4V2lkdGggOiB0aGlzLmNvbnRhaW5lci5jc3MoIndpZHRoIikpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhpcy5zZWFyY2gudmFsKCIiKS53aWR0aCgxMCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIGNsZWFyUGxhY2Vob2xkZXI6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoLmhhc0NsYXNzKCJzZWxlY3QyLWRlZmF1bHQiKSkgewogICAgICAgICAgICAgICAgdGhpcy5zZWFyY2gudmFsKCIiKS5yZW1vdmVDbGFzcygic2VsZWN0Mi1kZWZhdWx0Iik7CiAgICAgICAgICAgIH0KICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIG9wZW5pbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5jbGVhclBsYWNlaG9sZGVyKCk7IC8vIHNob3VsZCBiZSBkb25lIGJlZm9yZSBzdXBlciBzbyBwbGFjZWhvbGRlciBpcyBub3QgdXNlZCB0byBzZWFyY2gKICAgICAgICAgICAgdGhpcy5yZXNpemVTZWFyY2goKTsKCiAgICAgICAgICAgIHRoaXMucGFyZW50Lm9wZW5pbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKCiAgICAgICAgICAgIHRoaXMuZm9jdXNTZWFyY2goKTsKCiAgICAgICAgICAgIHRoaXMudXBkYXRlUmVzdWx0cyh0cnVlKTsKICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKICAgICAgICAgICAgdGhpcy5vcHRzLmVsZW1lbnQudHJpZ2dlcigkLkV2ZW50KCJzZWxlY3QyLW9wZW4iKSk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBjbG9zZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICBpZiAoIXRoaXMub3BlbmVkKCkpIHJldHVybjsKICAgICAgICAgICAgdGhpcy5wYXJlbnQuY2xvc2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIGZvY3VzOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgICAgICAgdGhpcy5zZWFyY2guZm9jdXMoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIGlzRm9jdXNlZDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5zZWFyY2guaGFzQ2xhc3MoInNlbGVjdDItZm9jdXNlZCIpOwogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgdXBkYXRlU2VsZWN0aW9uOiBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICB2YXIgaWRzID0gW10sIGZpbHRlcmVkID0gW10sIHNlbGYgPSB0aGlzOwoKICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBkdXBsaWNhdGVzCiAgICAgICAgICAgICQoZGF0YSkuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZihzZWxmLmlkKHRoaXMpLCBpZHMpIDwgMCkgewogICAgICAgICAgICAgICAgICAgIGlkcy5wdXNoKHNlbGYuaWQodGhpcykpOwogICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkLnB1c2godGhpcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkYXRhID0gZmlsdGVyZWQ7CgogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIikucmVtb3ZlKCk7CiAgICAgICAgICAgICQoZGF0YSkuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBzZWxmLmFkZFNlbGVjdGVkQ2hvaWNlKHRoaXMpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgc2VsZi5wb3N0cHJvY2Vzc1Jlc3VsdHMoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIHRva2VuaXplOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGlucHV0ID0gdGhpcy5zZWFyY2gudmFsKCk7CiAgICAgICAgICAgIGlucHV0ID0gdGhpcy5vcHRzLnRva2VuaXplci5jYWxsKHRoaXMsIGlucHV0LCB0aGlzLmRhdGEoKSwgdGhpcy5iaW5kKHRoaXMub25TZWxlY3QpLCB0aGlzLm9wdHMpOwogICAgICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBpbnB1dCAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLnZhbChpbnB1dCk7CiAgICAgICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICAgIHRoaXMub3BlbigpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgb25TZWxlY3Q6IGZ1bmN0aW9uIChkYXRhLCBvcHRpb25zKSB7CgogICAgICAgICAgICBpZiAoIXRoaXMudHJpZ2dlclNlbGVjdChkYXRhKSkgeyByZXR1cm47IH0KCiAgICAgICAgICAgIHRoaXMuYWRkU2VsZWN0ZWRDaG9pY2UoZGF0YSk7CgogICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC50cmlnZ2VyKHsgdHlwZTogInNlbGVjdGVkIiwgdmFsOiB0aGlzLmlkKGRhdGEpLCBjaG9pY2U6IGRhdGEgfSk7CgogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3QgfHwgIXRoaXMub3B0cy5jbG9zZU9uU2VsZWN0KSB0aGlzLnBvc3Rwcm9jZXNzUmVzdWx0cyhkYXRhLCBmYWxzZSwgdGhpcy5vcHRzLmNsb3NlT25TZWxlY3Q9PT10cnVlKTsKCiAgICAgICAgICAgIGlmICh0aGlzLm9wdHMuY2xvc2VPblNlbGVjdCkgewogICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgdGhpcy5zZWFyY2gud2lkdGgoMTApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRTZWxlY3RhYmxlUmVzdWx0cygpPjApIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaC53aWR0aCgxMCk7CiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVTZWFyY2goKTsKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRNYXhpbXVtU2VsZWN0aW9uU2l6ZSgpID4gMCAmJiB0aGlzLnZhbCgpLmxlbmd0aCA+PSB0aGlzLmdldE1heGltdW1TZWxlY3Rpb25TaXplKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgd2UgcmVhY2hlZCBtYXggc2VsZWN0aW9uIHNpemUgcmVwYWludCB0aGUgcmVzdWx0cyBzbyBjaG9pY2VzCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBtYXggc2VsZWN0aW9uIHJlYWNoZWQgbWVzc2FnZQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJlc3VsdHModHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHRoaXMucG9zaXRpb25Ecm9wZG93bigpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAvLyBpZiBub3RoaW5nIGxlZnQgdG8gc2VsZWN0IGNsb3NlCiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoLndpZHRoKDEwKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gc2luY2UgaXRzIG5vdCBwb3NzaWJsZSB0byBzZWxlY3QgYW4gZWxlbWVudCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KICAgICAgICAgICAgLy8gYWRkZWQgd2UgZG8gbm90IG5lZWQgdG8gY2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBlbGVtZW50IGJlZm9yZSBmaXJpbmcgY2hhbmdlCiAgICAgICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSh7IGFkZGVkOiBkYXRhIH0pOwoKICAgICAgICAgICAgaWYgKCFvcHRpb25zIHx8ICFvcHRpb25zLm5vRm9jdXMpCiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7CiAgICAgICAgfSwKCiAgICAgICAgYWRkU2VsZWN0ZWRDaG9pY2U6IGZ1bmN0aW9uIChkYXRhKSB7CiAgICAgICAgICAgIHZhciBlbmFibGVDaG9pY2UgPSAhZGF0YS5sb2NrZWQsCiAgICAgICAgICAgICAgICBlbmFibGVkSXRlbSA9ICQoCiAgICAgICAgICAgICAgICAgICAgIjxsaSBjbGFzcz0nc2VsZWN0Mi1zZWFyY2gtY2hvaWNlJz4iICsKICAgICAgICAgICAgICAgICAgICAiICAgIDxkaXY+PC9kaXY+IiArCiAgICAgICAgICAgICAgICAgICAgIiAgICA8YSBocmVmPScjJyBvbmNsaWNrPSdyZXR1cm4gZmFsc2U7JyBjbGFzcz0nc2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWNsb3NlJyB0YWJpbmRleD0nLTEnPjwvYT4iICsKICAgICAgICAgICAgICAgICAgICAiPC9saT4iKSwKICAgICAgICAgICAgICAgIGRpc2FibGVkSXRlbSA9ICQoCiAgICAgICAgICAgICAgICAgICAgIjxsaSBjbGFzcz0nc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIHNlbGVjdDItbG9ja2VkJz4iICsKICAgICAgICAgICAgICAgICAgICAiPGRpdj48L2Rpdj4iICsKICAgICAgICAgICAgICAgICAgICAiPC9saT4iKTsKICAgICAgICAgICAgdmFyIGNob2ljZSA9IGVuYWJsZUNob2ljZSA/IGVuYWJsZWRJdGVtIDogZGlzYWJsZWRJdGVtLAogICAgICAgICAgICAgICAgaWQgPSB0aGlzLmlkKGRhdGEpLAogICAgICAgICAgICAgICAgdmFsID0gdGhpcy5nZXRWYWwoKSwKICAgICAgICAgICAgICAgIGZvcm1hdHRlZCwKICAgICAgICAgICAgICAgIGNzc0NsYXNzOwoKICAgICAgICAgICAgZm9ybWF0dGVkPXRoaXMub3B0cy5mb3JtYXRTZWxlY3Rpb24oZGF0YSwgY2hvaWNlLmZpbmQoImRpdiIpLCB0aGlzLm9wdHMuZXNjYXBlTWFya3VwKTsKICAgICAgICAgICAgaWYgKGZvcm1hdHRlZCAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGNob2ljZS5maW5kKCJkaXYiKS5yZXBsYWNlV2l0aCgiPGRpdj4iK2Zvcm1hdHRlZCsiPC9kaXY+Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3NzQ2xhc3M9dGhpcy5vcHRzLmZvcm1hdFNlbGVjdGlvbkNzc0NsYXNzKGRhdGEsIGNob2ljZS5maW5kKCJkaXYiKSk7CiAgICAgICAgICAgIGlmIChjc3NDbGFzcyAhPSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgIGNob2ljZS5hZGRDbGFzcyhjc3NDbGFzcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmKGVuYWJsZUNob2ljZSl7CiAgICAgICAgICAgICAgY2hvaWNlLmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtY2xvc2UiKQogICAgICAgICAgICAgICAgICAub24oIm1vdXNlZG93biIsIGtpbGxFdmVudCkKICAgICAgICAgICAgICAgICAgLm9uKCJjbGljayBkYmxjbGljayIsIHRoaXMuYmluZChmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNJbnRlcmZhY2VFbmFibGVkKCkpIHJldHVybjsKCiAgICAgICAgICAgICAgICAgICQoZS50YXJnZXQpLmNsb3Nlc3QoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UiKS5mYWRlT3V0KCdmYXN0JywgdGhpcy5iaW5kKGZ1bmN0aW9uKCl7CiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0KCQoZS50YXJnZXQpKTsKICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UtZm9jdXMiKS5yZW1vdmVDbGFzcygic2VsZWN0Mi1zZWFyY2gtY2hvaWNlLWZvY3VzIik7CiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzU2VhcmNoKCk7CiAgICAgICAgICAgICAgICAgIH0pKS5kZXF1ZXVlKCk7CiAgICAgICAgICAgICAgICAgIGtpbGxFdmVudChlKTsKICAgICAgICAgICAgICB9KSkub24oImZvY3VzIiwgdGhpcy5iaW5kKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmlzSW50ZXJmYWNlRW5hYmxlZCgpKSByZXR1cm47CiAgICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFkZENsYXNzKCJzZWxlY3QyLWNvbnRhaW5lci1hY3RpdmUiKTsKICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bi5hZGRDbGFzcygic2VsZWN0Mi1kcm9wLWFjdGl2ZSIpOwogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2hvaWNlLmRhdGEoInNlbGVjdDItZGF0YSIsIGRhdGEpOwogICAgICAgICAgICBjaG9pY2UuaW5zZXJ0QmVmb3JlKHRoaXMuc2VhcmNoQ29udGFpbmVyKTsKCiAgICAgICAgICAgIHZhbC5wdXNoKGlkKTsKICAgICAgICAgICAgdGhpcy5zZXRWYWwodmFsKTsKICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIHVuc2VsZWN0OiBmdW5jdGlvbiAoc2VsZWN0ZWQpIHsKICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsKCksCiAgICAgICAgICAgICAgICBkYXRhLAogICAgICAgICAgICAgICAgaW5kZXg7CgogICAgICAgICAgICBzZWxlY3RlZCA9IHNlbGVjdGVkLmNsb3Nlc3QoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UiKTsKCiAgICAgICAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIHRocm93ICJJbnZhbGlkIGFyZ3VtZW50OiAiICsgc2VsZWN0ZWQgKyAiLiBNdXN0IGJlIC5zZWxlY3QyLXNlYXJjaC1jaG9pY2UiOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkYXRhID0gc2VsZWN0ZWQuZGF0YSgic2VsZWN0Mi1kYXRhIik7CgogICAgICAgICAgICBpZiAoIWRhdGEpIHsKICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiB3aGVuIHRoZSAneCcgaXMgY2xpY2tlZCByZWFsbHkgZmFzdCByZXBlYXRlZGx5IHRoZSBldmVudCBjYW4gYmUgcXVldWVkCiAgICAgICAgICAgICAgICAvLyBhbmQgaW52b2tlZCBvbiBhbiBlbGVtZW50IGFscmVhZHkgcmVtb3ZlZAogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICB3aGlsZSgoaW5kZXggPSBpbmRleE9mKHRoaXMuaWQoZGF0YSksIHZhbCkpID49IDApIHsKICAgICAgICAgICAgICAgIHZhbC5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgICAgICAgICAgdGhpcy5zZXRWYWwodmFsKTsKICAgICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgdGhpcy5wb3N0cHJvY2Vzc1Jlc3VsdHMoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzZWxlY3RlZC5yZW1vdmUoKTsKCiAgICAgICAgICAgIHRoaXMub3B0cy5lbGVtZW50LnRyaWdnZXIoeyB0eXBlOiAicmVtb3ZlZCIsIHZhbDogdGhpcy5pZChkYXRhKSwgY2hvaWNlOiBkYXRhIH0pOwogICAgICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoeyByZW1vdmVkOiBkYXRhIH0pOwogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgcG9zdHByb2Nlc3NSZXN1bHRzOiBmdW5jdGlvbiAoZGF0YSwgaW5pdGlhbCwgbm9IaWdobGlnaHRVcGRhdGUpIHsKICAgICAgICAgICAgdmFyIHZhbCA9IHRoaXMuZ2V0VmFsKCksCiAgICAgICAgICAgICAgICBjaG9pY2VzID0gdGhpcy5yZXN1bHRzLmZpbmQoIi5zZWxlY3QyLXJlc3VsdCIpLAogICAgICAgICAgICAgICAgY29tcG91bmQgPSB0aGlzLnJlc3VsdHMuZmluZCgiLnNlbGVjdDItcmVzdWx0LXdpdGgtY2hpbGRyZW4iKSwKICAgICAgICAgICAgICAgIHNlbGYgPSB0aGlzOwoKICAgICAgICAgICAgY2hvaWNlcy5lYWNoMihmdW5jdGlvbiAoaSwgY2hvaWNlKSB7CiAgICAgICAgICAgICAgICB2YXIgaWQgPSBzZWxmLmlkKGNob2ljZS5kYXRhKCJzZWxlY3QyLWRhdGEiKSk7CiAgICAgICAgICAgICAgICBpZiAoaW5kZXhPZihpZCwgdmFsKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgY2hvaWNlLmFkZENsYXNzKCJzZWxlY3QyLXNlbGVjdGVkIik7CiAgICAgICAgICAgICAgICAgICAgLy8gbWFyayBhbGwgY2hpbGRyZW4gb2YgdGhlIHNlbGVjdGVkIHBhcmVudCBhcyBzZWxlY3RlZAogICAgICAgICAgICAgICAgICAgIGNob2ljZS5maW5kKCIuc2VsZWN0Mi1yZXN1bHQtc2VsZWN0YWJsZSIpLmFkZENsYXNzKCJzZWxlY3QyLXNlbGVjdGVkIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgY29tcG91bmQuZWFjaDIoZnVuY3Rpb24oaSwgY2hvaWNlKSB7CiAgICAgICAgICAgICAgICAvLyBoaWRlIGFuIG9wdGdyb3VwIGlmIGl0IGRvZXNudCBoYXZlIGFueSBzZWxlY3RhYmxlIGNoaWxkcmVuCiAgICAgICAgICAgICAgICBpZiAoIWNob2ljZS5pcygnLnNlbGVjdDItcmVzdWx0LXNlbGVjdGFibGUnKQogICAgICAgICAgICAgICAgICAgICYmIGNob2ljZS5maW5kKCIuc2VsZWN0Mi1yZXN1bHQtc2VsZWN0YWJsZTpub3QoLnNlbGVjdDItc2VsZWN0ZWQpIikubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgY2hvaWNlLmFkZENsYXNzKCJzZWxlY3QyLXNlbGVjdGVkIik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwoKICAgICAgICAgICAgaWYgKHRoaXMuaGlnaGxpZ2h0KCkgPT0gLTEgJiYgbm9IaWdobGlnaHRVcGRhdGUgIT09IGZhbHNlKXsKICAgICAgICAgICAgICAgIHNlbGYuaGlnaGxpZ2h0KDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL0lmIGFsbCByZXN1bHRzIGFyZSBjaG9zZW4gcmVuZGVyIGZvcm1hdE5vTUF0Y2hlcwogICAgICAgICAgICBpZighdGhpcy5vcHRzLmNyZWF0ZVNlYXJjaENob2ljZSAmJiAhY2hvaWNlcy5maWx0ZXIoJy5zZWxlY3QyLXJlc3VsdDpub3QoLnNlbGVjdDItc2VsZWN0ZWQpJykubGVuZ3RoID4gMCl7CiAgICAgICAgICAgICAgICBpZighZGF0YSB8fCBkYXRhICYmICFkYXRhLm1vcmUgJiYgdGhpcy5yZXN1bHRzLmZpbmQoIi5zZWxlY3QyLW5vLXJlc3VsdHMiKS5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tGb3JtYXR0ZXIoc2VsZi5vcHRzLmZvcm1hdE5vTWF0Y2hlcywgImZvcm1hdE5vTWF0Y2hlcyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0cy5hcHBlbmQoIjxsaSBjbGFzcz0nc2VsZWN0Mi1uby1yZXN1bHRzJz4iICsgc2VsZi5vcHRzLmZvcm1hdE5vTWF0Y2hlcyhzZWxmLnNlYXJjaC52YWwoKSkgKyAiPC9saT4iKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBnZXRNYXhTZWFyY2hXaWR0aDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbi53aWR0aCgpIC0gZ2V0U2lkZUJvcmRlclBhZGRpbmcodGhpcy5zZWFyY2gpOwogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgcmVzaXplU2VhcmNoOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBtaW5pbXVtV2lkdGgsIGxlZnQsIG1heFdpZHRoLCBjb250YWluZXJMZWZ0LCBzZWFyY2hXaWR0aCwKICAgICAgICAgICAgICAgIHNpZGVCb3JkZXJQYWRkaW5nID0gZ2V0U2lkZUJvcmRlclBhZGRpbmcodGhpcy5zZWFyY2gpOwoKICAgICAgICAgICAgbWluaW11bVdpZHRoID0gbWVhc3VyZVRleHRXaWR0aCh0aGlzLnNlYXJjaCkgKyAxMDsKCiAgICAgICAgICAgIGxlZnQgPSB0aGlzLnNlYXJjaC5vZmZzZXQoKS5sZWZ0OwoKICAgICAgICAgICAgbWF4V2lkdGggPSB0aGlzLnNlbGVjdGlvbi53aWR0aCgpOwogICAgICAgICAgICBjb250YWluZXJMZWZ0ID0gdGhpcy5zZWxlY3Rpb24ub2Zmc2V0KCkubGVmdDsKCiAgICAgICAgICAgIHNlYXJjaFdpZHRoID0gbWF4V2lkdGggLSAobGVmdCAtIGNvbnRhaW5lckxlZnQpIC0gc2lkZUJvcmRlclBhZGRpbmc7CgogICAgICAgICAgICBpZiAoc2VhcmNoV2lkdGggPCBtaW5pbXVtV2lkdGgpIHsKICAgICAgICAgICAgICAgIHNlYXJjaFdpZHRoID0gbWF4V2lkdGggLSBzaWRlQm9yZGVyUGFkZGluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHNlYXJjaFdpZHRoIDwgNDApIHsKICAgICAgICAgICAgICAgIHNlYXJjaFdpZHRoID0gbWF4V2lkdGggLSBzaWRlQm9yZGVyUGFkZGluZzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKHNlYXJjaFdpZHRoIDw9IDApIHsKICAgICAgICAgICAgICBzZWFyY2hXaWR0aCA9IG1pbmltdW1XaWR0aDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdGhpcy5zZWFyY2gud2lkdGgoTWF0aC5mbG9vcihzZWFyY2hXaWR0aCkpOwogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgZ2V0VmFsOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciB2YWw7CiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdCkgewogICAgICAgICAgICAgICAgdmFsID0gdGhpcy5zZWxlY3QudmFsKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsID09PSBudWxsID8gW10gOiB2YWw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YWwgPSB0aGlzLm9wdHMuZWxlbWVudC52YWwoKTsKICAgICAgICAgICAgICAgIHJldHVybiBzcGxpdFZhbCh2YWwsIHRoaXMub3B0cy5zZXBhcmF0b3IpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBzZXRWYWw6IGZ1bmN0aW9uICh2YWwpIHsKICAgICAgICAgICAgdmFyIHVuaXF1ZTsKICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdC52YWwodmFsKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHVuaXF1ZSA9IFtdOwogICAgICAgICAgICAgICAgLy8gZmlsdGVyIG91dCBkdXBsaWNhdGVzCiAgICAgICAgICAgICAgICAkKHZhbCkuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4T2YodGhpcywgdW5pcXVlKSA8IDApIHVuaXF1ZS5wdXNoKHRoaXMpOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC52YWwodW5pcXVlLmxlbmd0aCA9PT0gMCA/ICIiIDogdW5pcXVlLmpvaW4odGhpcy5vcHRzLnNlcGFyYXRvcikpOwogICAgICAgICAgICB9CiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBidWlsZENoYW5nZURldGFpbHM6IGZ1bmN0aW9uIChvbGQsIGN1cnJlbnQpIHsKICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBjdXJyZW50LnNsaWNlKDApLAogICAgICAgICAgICAgICAgb2xkID0gb2xkLnNsaWNlKDApOwoKICAgICAgICAgICAgLy8gcmVtb3ZlIGludGVyc2VjdGlvbiBmcm9tIGVhY2ggYXJyYXkKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjdXJyZW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9sZC5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgICAgIGlmIChlcXVhbCh0aGlzLm9wdHMuaWQoY3VycmVudFtpXSksIHRoaXMub3B0cy5pZChvbGRbal0pKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LnNwbGljZShpLCAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgaS0tOwogICAgICAgICAgICAgICAgICAgICAgICBvbGQuc3BsaWNlKGosIDEpOwogICAgICAgICAgICAgICAgICAgICAgICBqLS07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4ge2FkZGVkOiBjdXJyZW50LCByZW1vdmVkOiBvbGR9OwogICAgICAgIH0sCgoKICAgICAgICAvLyBtdWx0aQogICAgICAgIHZhbDogZnVuY3Rpb24gKHZhbCwgdHJpZ2dlckNoYW5nZSkgewogICAgICAgICAgICB2YXIgb2xkRGF0YSwgc2VsZj10aGlzLCBjaGFuZ2VEZXRhaWxzOwoKICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbCgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBvbGREYXRhPXRoaXMuZGF0YSgpOwogICAgICAgICAgICBpZiAoIW9sZERhdGEubGVuZ3RoKSBvbGREYXRhPVtdOwoKICAgICAgICAgICAgLy8gdmFsIGlzIGFuIGlkLiAhdmFsIGlzIHRydWUgZm9yIFt1bmRlZmluZWQsbnVsbCwnJywwXSAtIDAgaXMgbGVnYWwKICAgICAgICAgICAgaWYgKCF2YWwgJiYgdmFsICE9PSAwKSB7CiAgICAgICAgICAgICAgICB0aGlzLm9wdHMuZWxlbWVudC52YWwoIiIpOwogICAgICAgICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24oW10pOwogICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpOwogICAgICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2Uoe2FkZGVkOiB0aGlzLmRhdGEoKSwgcmVtb3ZlZDogb2xkRGF0YX0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyB2YWwgaXMgYSBsaXN0IG9mIGlkcwogICAgICAgICAgICB0aGlzLnNldFZhbCh2YWwpOwoKICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0KSB7CiAgICAgICAgICAgICAgICB0aGlzLm9wdHMuaW5pdFNlbGVjdGlvbih0aGlzLnNlbGVjdCwgdGhpcy5iaW5kKHRoaXMudXBkYXRlU2VsZWN0aW9uKSk7CiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSh0aGlzLmJ1aWxkQ2hhbmdlRGV0YWlscyhvbGREYXRhLCB0aGlzLmRhdGEoKSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHRoaXMub3B0cy5pbml0U2VsZWN0aW9uID09PSB1bmRlZmluZWQpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoInZhbCgpIGNhbm5vdCBiZSBjYWxsZWQgaWYgaW5pdFNlbGVjdGlvbigpIGlzIG5vdCBkZWZpbmVkIik7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGhpcy5vcHRzLmluaXRTZWxlY3Rpb24odGhpcy5vcHRzLmVsZW1lbnQsIGZ1bmN0aW9uKGRhdGEpewogICAgICAgICAgICAgICAgICAgIHZhciBpZHM9JC5tYXAoZGF0YSwgc2VsZi5pZCk7CiAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXRWYWwoaWRzKTsKICAgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZVNlbGVjdGlvbihkYXRhKTsKICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyU2VhcmNoKCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHRyaWdnZXJDaGFuZ2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50cmlnZ2VyQ2hhbmdlKHNlbGYuYnVpbGRDaGFuZ2VEZXRhaWxzKG9sZERhdGEsIHRoaXMuZGF0YSgpKSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpOwogICAgICAgIH0sCgogICAgICAgIC8vIG11bHRpCiAgICAgICAgb25Tb3J0U3RhcnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICBpZiAodGhpcy5zZWxlY3QpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiU29ydGluZyBvZiBlbGVtZW50cyBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gYXR0YWNoZWQgdG8gPHNlbGVjdD4uIEF0dGFjaCB0byA8aW5wdXQgdHlwZT0naGlkZGVuJy8+IGluc3RlYWQuIik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGNvbGxhcHNlIHNlYXJjaCBmaWVsZCBpbnRvIDAgd2lkdGggc28gaXRzIGNvbnRhaW5lciBjYW4gYmUgY29sbGFwc2VkIGFzIHdlbGwKICAgICAgICAgICAgdGhpcy5zZWFyY2gud2lkdGgoMCk7CiAgICAgICAgICAgIC8vIGhpZGUgdGhlIGNvbnRhaW5lcgogICAgICAgICAgICB0aGlzLnNlYXJjaENvbnRhaW5lci5oaWRlKCk7CiAgICAgICAgfSwKCiAgICAgICAgLy8gbXVsdGkKICAgICAgICBvblNvcnRFbmQ6ZnVuY3Rpb24oKSB7CgogICAgICAgICAgICB2YXIgdmFsPVtdLCBzZWxmPXRoaXM7CgogICAgICAgICAgICAvLyBzaG93IHNlYXJjaCBhbmQgbW92ZSBpdCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CiAgICAgICAgICAgIHRoaXMuc2VhcmNoQ29udGFpbmVyLnNob3coKTsKICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBzZWFyY2ggY29udGFpbmVyIGlzIHRoZSBsYXN0IGl0ZW0gaW4gdGhlIGxpc3QKICAgICAgICAgICAgdGhpcy5zZWFyY2hDb250YWluZXIuYXBwZW5kVG8odGhpcy5zZWFyY2hDb250YWluZXIucGFyZW50KCkpOwogICAgICAgICAgICAvLyBzaW5jZSB3ZSBjb2xsYXBzZWQgdGhlIHdpZHRoIGluIGRyYWdTdGFydGVkLCB3ZSByZXNpemUgaXQgaGVyZQogICAgICAgICAgICB0aGlzLnJlc2l6ZVNlYXJjaCgpOwoKICAgICAgICAgICAgLy8gdXBkYXRlIHNlbGVjdGlvbgogICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5maW5kKCIuc2VsZWN0Mi1zZWFyY2gtY2hvaWNlIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhbC5wdXNoKHNlbGYub3B0cy5pZCgkKHRoaXMpLmRhdGEoInNlbGVjdDItZGF0YSIpKSk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLnNldFZhbCh2YWwpOwogICAgICAgICAgICB0aGlzLnRyaWdnZXJDaGFuZ2UoKTsKICAgICAgICB9LAoKICAgICAgICAvLyBtdWx0aQogICAgICAgIGRhdGE6IGZ1bmN0aW9uKHZhbHVlcywgdHJpZ2dlckNoYW5nZSkgewogICAgICAgICAgICB2YXIgc2VsZj10aGlzLCBpZHMsIG9sZDsKICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb24KICAgICAgICAgICAgICAgICAgICAgLmZpbmQoIi5zZWxlY3QyLXNlYXJjaC1jaG9pY2UiKQogICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uKCkgeyByZXR1cm4gJCh0aGlzKS5kYXRhKCJzZWxlY3QyLWRhdGEiKTsgfSkKICAgICAgICAgICAgICAgICAgICAgLmdldCgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgb2xkID0gdGhpcy5kYXRhKCk7CiAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcykgeyB2YWx1ZXMgPSBbXTsgfQogICAgICAgICAgICAgICAgaWRzID0gJC5tYXAodmFsdWVzLCBmdW5jdGlvbihlKSB7IHJldHVybiBzZWxmLm9wdHMuaWQoZSk7IH0pOwogICAgICAgICAgICAgICAgdGhpcy5zZXRWYWwoaWRzKTsKICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHZhbHVlcyk7CiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7CiAgICAgICAgICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSkgewogICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckNoYW5nZSh0aGlzLmJ1aWxkQ2hhbmdlRGV0YWlscyhvbGQsIHRoaXMuZGF0YSgpKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCiAgICAkLmZuLnNlbGVjdDIgPSBmdW5jdGlvbiAoKSB7CgogICAgICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSwKICAgICAgICAgICAgb3B0cywKICAgICAgICAgICAgc2VsZWN0MiwKICAgICAgICAgICAgbWV0aG9kLCB2YWx1ZSwgbXVsdGlwbGUsCiAgICAgICAgICAgIGFsbG93ZWRNZXRob2RzID0gWyJ2YWwiLCAiZGVzdHJveSIsICJvcGVuZWQiLCAib3BlbiIsICJjbG9zZSIsICJmb2N1cyIsICJpc0ZvY3VzZWQiLCAiY29udGFpbmVyIiwgImRyb3Bkb3duIiwgIm9uU29ydFN0YXJ0IiwgIm9uU29ydEVuZCIsICJlbmFibGUiLCAiZGlzYWJsZSIsICJyZWFkb25seSIsICJwb3NpdGlvbkRyb3Bkb3duIiwgImRhdGEiLCAic2VhcmNoIl0sCiAgICAgICAgICAgIHZhbHVlTWV0aG9kcyA9IFsib3BlbmVkIiwgImlzRm9jdXNlZCIsICJjb250YWluZXIiLCAiZHJvcGRvd24iXSwKICAgICAgICAgICAgcHJvcGVydHlNZXRob2RzID0gWyJ2YWwiLCAiZGF0YSJdLAogICAgICAgICAgICBtZXRob2RzTWFwID0geyBzZWFyY2g6ICJleHRlcm5hbFNlYXJjaCIgfTsKCiAgICAgICAgdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwIHx8IHR5cGVvZihhcmdzWzBdKSA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgICAgIG9wdHMgPSBhcmdzLmxlbmd0aCA9PT0gMCA/IHt9IDogJC5leHRlbmQoe30sIGFyZ3NbMF0pOwogICAgICAgICAgICAgICAgb3B0cy5lbGVtZW50ID0gJCh0aGlzKTsKCiAgICAgICAgICAgICAgICBpZiAob3B0cy5lbGVtZW50LmdldCgwKS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICJzZWxlY3QiKSB7CiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgPSBvcHRzLmVsZW1lbnQucHJvcCgibXVsdGlwbGUiKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgPSBvcHRzLm11bHRpcGxlIHx8IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmICgidGFncyIgaW4gb3B0cykge29wdHMubXVsdGlwbGUgPSBtdWx0aXBsZSA9IHRydWU7fQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNlbGVjdDIgPSBtdWx0aXBsZSA/IG5ldyBNdWx0aVNlbGVjdDIoKSA6IG5ldyBTaW5nbGVTZWxlY3QyKCk7CiAgICAgICAgICAgICAgICBzZWxlY3QyLmluaXQob3B0cyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mKGFyZ3NbMF0pID09PSAic3RyaW5nIikgewoKICAgICAgICAgICAgICAgIGlmIChpbmRleE9mKGFyZ3NbMF0sIGFsbG93ZWRNZXRob2RzKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyAiVW5rbm93biBtZXRob2Q6ICIgKyBhcmdzWzBdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHZhbHVlID0gdW5kZWZpbmVkOwogICAgICAgICAgICAgICAgc2VsZWN0MiA9ICQodGhpcykuZGF0YSgic2VsZWN0MiIpOwogICAgICAgICAgICAgICAgaWYgKHNlbGVjdDIgPT09IHVuZGVmaW5lZCkgcmV0dXJuOwoKICAgICAgICAgICAgICAgIG1ldGhvZD1hcmdzWzBdOwoKICAgICAgICAgICAgICAgIGlmIChtZXRob2QgPT09ICJjb250YWluZXIiKSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3QyLmNvbnRhaW5lcjsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobWV0aG9kID09PSAiZHJvcGRvd24iKSB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxlY3QyLmRyb3Bkb3duOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAobWV0aG9kc01hcFttZXRob2RdKSBtZXRob2QgPSBtZXRob2RzTWFwW21ldGhvZF07CgogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZWN0MlttZXRob2RdLmFwcGx5KHNlbGVjdDIsIGFyZ3Muc2xpY2UoMSkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGluZGV4T2YoYXJnc1swXSwgdmFsdWVNZXRob2RzKSA+PSAwCiAgICAgICAgICAgICAgICAgICAgfHwgKGluZGV4T2YoYXJnc1swXSwgcHJvcGVydHlNZXRob2RzKSAmJiBhcmdzLmxlbmd0aCA9PSAxKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gYWJvcnQgdGhlIGl0ZXJhdGlvbiwgcmVhZHkgdG8gcmV0dXJuIGZpcnN0IG1hdGNoZWQgdmFsdWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93ICJJbnZhbGlkIGFyZ3VtZW50cyB0byBzZWxlY3QyIHBsdWdpbjogIiArIGFyZ3M7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gKHZhbHVlID09PSB1bmRlZmluZWQpID8gdGhpcyA6IHZhbHVlOwogICAgfTsKCiAgICAvLyBwbHVnaW4gZGVmYXVsdHMsIGFjY2Vzc2libGUgdG8gdXNlcnMKICAgICQuZm4uc2VsZWN0Mi5kZWZhdWx0cyA9IHsKICAgICAgICB3aWR0aDogImNvcHkiLAogICAgICAgIGxvYWRNb3JlUGFkZGluZzogMCwKICAgICAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLAogICAgICAgIG9wZW5PbkVudGVyOiB0cnVlLAogICAgICAgIGNvbnRhaW5lckNzczoge30sCiAgICAgICAgZHJvcGRvd25Dc3M6IHt9LAogICAgICAgIGNvbnRhaW5lckNzc0NsYXNzOiAiIiwKICAgICAgICBkcm9wZG93bkNzc0NsYXNzOiAiIiwKICAgICAgICBmb3JtYXRSZXN1bHQ6IGZ1bmN0aW9uKHJlc3VsdCwgY29udGFpbmVyLCBxdWVyeSwgZXNjYXBlTWFya3VwKSB7CiAgICAgICAgICAgIHZhciBtYXJrdXA9W107CiAgICAgICAgICAgIG1hcmtNYXRjaChyZXN1bHQudGV4dCwgcXVlcnkudGVybSwgbWFya3VwLCBlc2NhcGVNYXJrdXApOwogICAgICAgICAgICByZXR1cm4gbWFya3VwLmpvaW4oIiIpOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uOiBmdW5jdGlvbiAoZGF0YSwgY29udGFpbmVyLCBlc2NhcGVNYXJrdXApIHsKICAgICAgICAgICAgcmV0dXJuIGRhdGEgPyBlc2NhcGVNYXJrdXAoZGF0YS50ZXh0KSA6IHVuZGVmaW5lZDsKICAgICAgICB9LAogICAgICAgIHNvcnRSZXN1bHRzOiBmdW5jdGlvbiAocmVzdWx0cywgY29udGFpbmVyLCBxdWVyeSkgewogICAgICAgICAgICByZXR1cm4gcmVzdWx0czsKICAgICAgICB9LAogICAgICAgIGZvcm1hdFJlc3VsdENzc0NsYXNzOiBmdW5jdGlvbihkYXRhKSB7cmV0dXJuIHVuZGVmaW5lZDt9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvbkNzc0NsYXNzOiBmdW5jdGlvbihkYXRhLCBjb250YWluZXIpIHtyZXR1cm4gdW5kZWZpbmVkO30sCiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiTm8gbWF0Y2hlcyBmb3VuZCI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAiUGxlYXNlIGVudGVyICIgKyBuICsgIiBtb3JlIGNoYXJhY3RlciIgKyAobiA9PSAxPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJQbGVhc2UgZGVsZXRlICIgKyBuICsgIiBjaGFyYWN0ZXIiICsgKG4gPT0gMT8gIiIgOiAicyIpOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAiWW91IGNhbiBvbmx5IHNlbGVjdCAiICsgbGltaXQgKyAiIGl0ZW0iICsgKGxpbWl0ID09IDEgPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiTG9hZGluZyBtb3JlIHJlc3VsdHMuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlNlYXJjaGluZy4uLiI7IH0sCiAgICAgICAgbWluaW11bVJlc3VsdHNGb3JTZWFyY2g6IDAsCiAgICAgICAgbWluaW11bUlucHV0TGVuZ3RoOiAwLAogICAgICAgIG1heGltdW1JbnB1dExlbmd0aDogbnVsbCwKICAgICAgICBtYXhpbXVtU2VsZWN0aW9uU2l6ZTogMCwKICAgICAgICBpZDogZnVuY3Rpb24gKGUpIHsgcmV0dXJuIGUuaWQ7IH0sCiAgICAgICAgbWF0Y2hlcjogZnVuY3Rpb24odGVybSwgdGV4dCkgewogICAgICAgICAgICByZXR1cm4gc3RyaXBEaWFjcml0aWNzKCcnK3RleHQpLnRvVXBwZXJDYXNlKCkuaW5kZXhPZihzdHJpcERpYWNyaXRpY3MoJycrdGVybSkudG9VcHBlckNhc2UoKSkgPj0gMDsKICAgICAgICB9LAogICAgICAgIHNlcGFyYXRvcjogIiwiLAogICAgICAgIHRva2VuU2VwYXJhdG9yczogW10sCiAgICAgICAgdG9rZW5pemVyOiBkZWZhdWx0VG9rZW5pemVyLAogICAgICAgIGVzY2FwZU1hcmt1cDogZGVmYXVsdEVzY2FwZU1hcmt1cCwKICAgICAgICBibHVyT25DaGFuZ2U6IGZhbHNlLAogICAgICAgIHNlbGVjdE9uQmx1cjogZmFsc2UsCiAgICAgICAgYWRhcHRDb250YWluZXJDc3NDbGFzczogZnVuY3Rpb24oYykgeyByZXR1cm4gYzsgfSwKICAgICAgICBhZGFwdERyb3Bkb3duQ3NzQ2xhc3M6IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIG51bGw7IH0sCiAgICAgICAgbmV4dFNlYXJjaFRlcm06IGZ1bmN0aW9uKHNlbGVjdGVkT2JqZWN0LCBjdXJyZW50U2VhcmNoVGVybSkgeyByZXR1cm4gdW5kZWZpbmVkOyB9CiAgICB9OwoKICAgICQuZm4uc2VsZWN0Mi5hamF4RGVmYXVsdHMgPSB7CiAgICAgICAgdHJhbnNwb3J0OiAkLmFqYXgsCiAgICAgICAgcGFyYW1zOiB7CiAgICAgICAgICAgIHR5cGU6ICJHRVQiLAogICAgICAgICAgICBjYWNoZTogZmFsc2UsCiAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIKICAgICAgICB9CiAgICB9OwoKICAgIC8vIGV4cG9ydHMKICAgIHdpbmRvdy5TZWxlY3QyID0gewogICAgICAgIHF1ZXJ5OiB7CiAgICAgICAgICAgIGFqYXg6IGFqYXgsCiAgICAgICAgICAgIGxvY2FsOiBsb2NhbCwKICAgICAgICAgICAgdGFnczogdGFncwogICAgICAgIH0sIHV0aWw6IHsKICAgICAgICAgICAgZGVib3VuY2U6IGRlYm91bmNlLAogICAgICAgICAgICBtYXJrTWF0Y2g6IG1hcmtNYXRjaCwKICAgICAgICAgICAgZXNjYXBlTWFya3VwOiBkZWZhdWx0RXNjYXBlTWFya3VwLAogICAgICAgICAgICBzdHJpcERpYWNyaXRpY3M6IHN0cmlwRGlhY3JpdGljcwogICAgICAgIH0sICJjbGFzcyI6IHsKICAgICAgICAgICAgImFic3RyYWN0IjogQWJzdHJhY3RTZWxlY3QyLAogICAgICAgICAgICAic2luZ2xlIjogU2luZ2xlU2VsZWN0MiwKICAgICAgICAgICAgIm11bHRpIjogTXVsdGlTZWxlY3QyCiAgICAgICAgfQogICAgfTsKCn0oalF1ZXJ5KSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAADwAAAAoCAYAAACiu5n/AAACLElEQVR42u3Zz0sUYRzH8bUISoyF1i5iXSooyYgOEXapZNYNojwU/aAfUAT9A4YhUgdxt1To0KFIBCMIvEcUEXntUtivpYuUhYFIdDBMmD69he/hObgsbSnb13ngdZjZhX3eO8/MDrMpSctKErwsg//HUSgU7uNYsB3hHla4CybqEoRPaMJGFCEMewxuxnsIk5iALPqg1yVdj9eQGUdjiuE1eAs+QOYztrsMJqwFk8EyHguW95klD+ZD08gsYvBFCBPYgHXBOT1UNpg3ncQpnAicRbrCCQ3j8SIf5QvYEWxvxnlb0mWDr0MIvcOaCiayC78gRKmlH+WDbaIjkJnDzgq/+VHIvMWqag3ehBkIAxXGdkAIDVRlsE24H9//4ty9hju4Hej710c5m83WYging32HMYjMnwSvx75UlQ+iOiDEaEMLZiA8dPc7TFQDnkGYxQ8Iz9Hs8k4riqIa4l5ApojVbm8tiduPL5CZRs5lMGFH8DNYxo+C5d3tMfgohJeow0qMQujxuqRb0RBsZ3DA2ZIuP5LgJDgJToKr4ZHOWjTOy+fzNa6DiezCFGReod1lMGF3IYzjMm5B5rirYIJyEJ4iHezfjW+YRr2n4EHE2LrAa1cg5DwFj2DWLlKljn67p+B+CIdKPAaOsddTcBOEKbTZvjp0Qvjo8Sp9DjJFfIVMjBsef4f34AHeYAxX0VfqMbDnfw97IXMTta6DLbobcxBa3Qdb9BPE2LZQ8G98530ecQi/2QAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2x2.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAHgAAABQCAYAAADSm7GJAAADFElEQVR42u2dsW4TQRBAI0ERCYpDpAUdJX/hAlxQ3SekovYXIIvKEiBRIUF1lHT+BP+Br0TCCCsFLW5cmCS3jKWNNFrdZu+EOG7sd9Irkl0p8r3s7Mzs5XLinIMD5uhvAIIBwYBgaMnNNZvNyj0nkUvPQbAdtDjnCSU3zkGwEbS4iOToHATbE6wptVwEGyUhcaW/JkTbT7JcCpIse4K7SC4pk4wRXreE5ZUMUwezgh03lT0YyKKBOhjoZHUi1oCf7mkYohd9ACVFrj50HgxzmtQifKwF15L1fxC8UD9/EQxzHtxC8KiD4FHPNWMhuIACwd33h3kLuXOZ2mc4yyLRZS1kCG6H3uc2Mbl+LO9Z8FRwEaYINnpDdWKVIEdwC/QVC4l97nk6sUqwQHA3wbGEa9Sj4CCxSlIguHtZMg8Tq/4Edy/bLNXB4/G4FKJ1sJ7zTwTrhMuTU3f+NVqc84SSG+bEJR99a3BoaHERybE5HDYYFKwptVwEGyUhcRX5PufBRoiH4Tg80WFMcBfJPJNljfC6JSzzVCUrGMHswUAWDdTBQCcLOveiCdEBnCYBb9kBBAOCAcGAYEDw0XP0NwDBgGBAMCAYEAwIHvD7QzJhIlSCE2rF0o9lav4eBBt5JWHR8EfzdYATfgkFgg2g5J4LdSD1WrjyXDeIPkfwsNErV6/Y38J34aXwWHgkvBJWwi74RSgQPGD8nrtRwrbCe+G0YX9+KHzyc2rPRsgQPFzBEyVrJ7xLvNTsjvBBuFQreYLg4Qpeqv32m3BP+YxJPhUulOAKwQMl2HsnymNK8mudeCF44IK9rCcdBD8XrhBsS/BTBBOibwTPCNEGCFqSX4X7LeSeCRdK8BLBwy6TdIPjo3A3kUF/pkyy1+ioPVsv8KxB7gPhi7BVcndCpqYheKCtSt1+vBR+CG+EZ8IL4a3wU69cRYlgC4cN4UFD/LDBNVAi2NZxYa0Ixe5ikhFs58B/2SC48mOZUMYkI/jw/61diWDzgtOSEWxdcFpyhWDTgtOSEWxccCgZwfZJ9akrJXiKYEDwMfAHMSYobVemsdsAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ar.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgQXJhYmljIHRyYW5zbGF0aW9uLgogKiAKICogQXV0aG9yOiBZb3VyIE5hbWUgPGFtZWRoYXQzQGdtYWlsLmNvbT4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gItmE2Kcg2KrZiNis2K8g2YbYqtin2KbYrCI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAi2YXZhiDZgdi22YTZgyDYo9iv2K7ZhCAiICsgbiArICIg2K3YsdmI2YEg2KPZg9ir2LEiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAi2YXZhiDZgdi22YTZgyDYo9it2LDZgSAgIiArIG4gKyAiINit2LHZiNmBIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gItmK2YXZg9mG2YMg2KfZhiDYqtiu2KrYp9ixICIgKyBsaW1pdCArICIg2KPYrtiq2YrYp9ix2KfYqiDZgdmC2LciOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gItiq2K3ZhdmEINin2YTZhdiw2YrYryDZhdmGINin2YTZhtiq2KfYptisIC4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi2KzYp9ix2Yog2KfZhNio2K3YqyAuLi4iOyB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_bg.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgPExhbmd1YWdlPiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogTHVib21pciBWaWtldiA8bHVib21pcnZpa2V2QGdtYWlsLmNvbT4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gItCd0Y/QvNCwINC90LDQvNC10YDQtdC90Lgg0YHRitCy0L/QsNC00LXQvdC40Y8iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gItCc0L7Qu9GPINCy0YrQstC10LTQtdGC0LUg0L7RidC1ICIgKyBuICsgIiDRgdC40LzQstC+0LsiICsgKG4gPT0gMSA/ICIiIDogItCwIik7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICLQnNC+0LvRjyDQstGK0LLQtdC00LXRgtC1INGBICIgKyBuICsgIiDQv9C+LdC80LDQu9C60L4g0YHQuNC80LLQvtC7IiArIChuID09IDE/ICIiIDogItCwIik7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICLQnNC+0LbQtdGC0LUg0LTQsCDQvdCw0L/RgNCw0LLQuNGC0LUg0LTQviAiICsgbGltaXQgKyAobGltaXQgPT0gMSA/ICIg0LjQt9Cx0L7RgCIgOiAiINC40LfQsdC+0YDQsCIpOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gItCX0LDRgNC10LbQtNCw0YIg0YHQtSDQvtGJ0LUuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gItCi0YrRgNGB0LXQvdC1Li4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ca.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgQ2F0YWxhbiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogRGF2aWQgUGxhbmVsbGEgPGRhdmlkLnBsYW5lbGxhQGdtYWlsLmNvbT4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIk5vIHMnaGEgdHJvYmF0IGNhcCBjb2luY2lkw6huY2lhIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICJJbnRyb2R1w691ICIgKyBuICsgIiBjYXLDoGN0ZXIiICsgKG4gPT0gMSA/ICIiIDogInMiKSArICIgbcOpcyI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJJbnRyb2R1w691ICIgKyBuICsgIiBjYXLDoGN0ZXIiICsgKG4gPT0gMT8gIiIgOiAicyIpICsgIm1lbnlzIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIk5vbcOpcyBwb2RldSBzZWxlY2Npb25hciAiICsgbGltaXQgKyAiIGVsZW1lbnQiICsgKGxpbWl0ID09IDEgPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiUydlc3RhbiBjYXJyZWdhbnQgbcOpcyByZXN1bHRhdHMuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlMnZXN0w6AgY2VyY2FudC4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_cs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgQ3plY2ggdHJhbnNsYXRpb24uCiAqIAogKiBBdXRob3I6IE1pY2hhbCBNYXJlayA8YWhvakBtaWNoYWwtbWFyZWsuY3o+CiAqIEF1dGhvciAtIHNrbG9ub3Zhbmk6IERhdmlkIFZhbGxuZXIgPGRhdmlkQHZhbGxuZXIubmV0PgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAvLyB1c2UgdGV4dCBmb3IgdGhlIG51bWJlcnMgMiB0aHJvdWdoIDQKICAgIHZhciBzbWFsbE51bWJlcnMgPSB7CiAgICAgICAgMjogZnVuY3Rpb24obWFzYykgeyByZXR1cm4gKG1hc2MgPyAiZHZhIiA6ICJkdsSbIik7IH0sCiAgICAgICAgMzogZnVuY3Rpb24oKSB7IHJldHVybiAidMWZaSI7IH0sCiAgICAgICAgNDogZnVuY3Rpb24oKSB7IHJldHVybiAixI10ecWZaSI7IH0KICAgIH0KICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIk5lbmFsZXplbnkgxb7DoWRuw6kgcG9sb8W+a3kiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7CiAgICAgICAgICAgIHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOwogICAgICAgICAgICBpZiAobiA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIlByb3PDrW0gemFkZWp0ZSBqZcWhdMSbIGplZGVuIHpuYWsiOwogICAgICAgICAgICB9IGVsc2UgaWYgKG4gPD0gNCkgewogICAgICAgICAgICAgICAgcmV0dXJuICJQcm9zw61tIHphZGVqdGUgamXFoXTEmyBkYWzFocOtICIrc21hbGxOdW1iZXJzW25dKHRydWUpKyIgem5ha3kiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICJQcm9zw61tIHphZGVqdGUgamXFoXTEmyBkYWzFocOtY2ggIituKyIgem5ha8WvIjsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgewogICAgICAgICAgICB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsKICAgICAgICAgICAgaWYgKG4gPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuICJQcm9zw61tIHphZGVqdGUgbyBqZWRlbiB6bmFrIG3DqW7EmyI7CiAgICAgICAgICAgIH0gZWxzZSBpZiAobiA8PSA0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIlByb3PDrW0gemFkZWp0ZSBvICIrc21hbGxOdW1iZXJzW25dKHRydWUpKyIgem5ha3kgbcOpbsSbIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAiUHJvc8OtbSB6YWRlanRlIG8gIituKyIgem5ha8WvIG3DqW7EmyI7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7CiAgICAgICAgICAgIGlmIChsaW1pdCA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIk3Fr8W+ZXRlIHp2b2xpdCBqZW4gamVkbnUgcG9sb8W+a3UiOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxpbWl0IDw9IDQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiTcWvxb5ldGUgenZvbGl0IG1heGltw6FsbsSbICIrc21hbGxOdW1iZXJzW2xpbWl0XShmYWxzZSkrIiBwb2xvxb5reSI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIk3Fr8W+ZXRlIHp2b2xpdCBtYXhpbcOhbG7EmyAiK2xpbWl0KyIgcG9sb8W+ZWsiOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICJOYcSNw610YWrDrSBzZSBkYWzFocOtIHbDvXNsZWRreS4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiVnlobGVkw6F2w6Fuw60uLi4iOyB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_da.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgRGFuaXNoIHRyYW5zbGF0aW9uLgogKgogKiBBdXRob3I6IEFuZGVycyBKZW5ibyA8YW5kZXJzQGplbmJvLmRrPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiSW5nZW4gcmVzdWx0YXRlciBmdW5kZXQiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIkFuZ2l2IHZlbmxpZ3N0ICIgKyBuICsgIiB0ZWduIG1lcmUiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiQW5naXYgdmVubGlnc3QgIiArIG4gKyAiIHRlZ24gbWluZHJlIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIkR1IGthbiBrdW4gdsOmbGdlICIgKyBsaW1pdCArICIgZW1uZSIgKyAobGltaXQgPT09IDEgPyAiIiA6ICJyIik7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiSW5kbMOmc2VyIGZsZXJlIHJlc3VsdGF0ZXLigKYiOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlPDuGdlcuKApiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_de.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgR2VybWFuIHRyYW5zbGF0aW9uCiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJLZWluZSDDnGJlcmVpbnN0aW1tdW5nZW4gZ2VmdW5kZW4iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIkJpdHRlICIgKyBuICsgIiBaZWljaGVuIG1laHIgZWluZ2ViZW4iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiQml0dGUgIiArIG4gKyAiIFplaWNoZW4gd2VuaWdlciBlaW5nZWJlbiI7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJTaWUga8O2bm5lbiBudXIgIiArIGxpbWl0ICsgIiBFaW50ciIgKyAobGltaXQgPT09IDEgPyAiYWciIDogIsOkZ2UiKSArICIgYXVzd8OkaGxlbiI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiTGFkZSBtZWhyIEVyZ2Vibmlzc2UuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlN1Y2hlLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_el.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgPExhbmd1YWdlPiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogWW91ciBOYW1lIDx5b3VyQGVtYWlsPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAizpTOtc69IM6yz4HOrc64zrfOus6xzr0gzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICLOoM6xz4HOsc66zrHOu86/z43OvM61IM61zrnPg86szrPOtc+EzrUgIiArIG4gKyAiIM+AzrXPgc65z4PPg8+Mz4TOtc+Bzr/Phc+CIM+HzrHPgc6xzrrPhM6uz4HOtc+CIiArIChuID09IDEgPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICLOoM6xz4HOsc66zrHOu86/z43OvM61IM60zrnOsc6zz4HOrM+Iz4TOtSAiICsgbiArICIgz4fOsc+BzrHOus+Ezq7Pgc61z4IiICsgKG4gPT0gMSA/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIs6cz4DOv8+BzrXOr8+EzrUgzr3OsSDOtc+AzrnOu86tzr7Otc+EzrUgzrzPjM69zr8gIiArIGxpbWl0ICsgIiDOsc69z4TOuc66zrXOr868zrXOvc6/IiArIChsaW1pdCA9PSAxID8gIiIgOiAicyIpOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIs6mz4zPgc+Ez4nPg863IM+AzrXPgc65z4PPg8+Mz4TOtc+Bz4nOvS4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAizpHOvc6xzrbOrs+EzrfPg863Li4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_en.js.template</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgPExhbmd1YWdlPiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogWW91ciBOYW1lIDx5b3VyQGVtYWlsPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiTm8gbWF0Y2hlcyBmb3VuZCI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAiUGxlYXNlIGVudGVyICIgKyBuICsgIiBtb3JlIGNoYXJhY3RlciIgKyAobiA9PSAxID8gIiIgOiAicyIpOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiUGxlYXNlIGRlbGV0ZSAiICsgbiArICIgY2hhcmFjdGVyIiArIChuID09IDEgPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJZb3UgY2FuIG9ubHkgc2VsZWN0ICIgKyBsaW1pdCArICIgaXRlbSIgKyAobGltaXQgPT0gMSA/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICJMb2FkaW5nIG1vcmUgcmVzdWx0cy4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiU2VhcmNoaW5nLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_es.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgU3BhbmlzaCB0cmFuc2xhdGlvbgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiTm8gc2UgZW5jb250cmFyb24gcmVzdWx0YWRvcyI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAiUG9yIGZhdm9yLCBpbnRyb2R1emNhICIgKyBuICsgIiBjYXIiICsgKG4gPT0gMT8gIsOhIiA6ICJhIikgKyAiY3RlciIgKyAobiA9PSAxPyAiIiA6ICJlcyIpOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiUG9yIGZhdm9yLCBlbGltaW5lICIgKyBuICsgIiBjYXIiICsgKG4gPT0gMT8gIsOhIiA6ICJhIikgKyAiY3RlciIgKyAobiA9PSAxPyAiIiA6ICJlcyIpOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAiU8OzbG8gcHVlZGUgc2VsZWNjaW9uYXIgIiArIGxpbWl0ICsgIiBlbGVtZW50byIgKyAobGltaXQgPT0gMSA/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICJDYXJnYW5kbyBtw6FzIHJlc3VsdGFkb3MuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIkJ1c2NhbmRvLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_et.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgRXN0b25pYW4gdHJhbnNsYXRpb24uCiAqCiAqIEF1dGhvcjogS3VsZGFyIEthbHZpayA8a3VsZGFyQGthbHZpay5lZT4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlR1bGVtdXNlZCBwdXVkdXZhZCI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAiU2lzZXN0YSAiICsgbiArICIgdMOkaHQiICsgKG4gPT0gMSA/ICIiIDogImUiKSArICIgcm9oa2VtIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gIlNpc2VzdGEgIiArIG4gKyAiIHTDpGh0IiArIChuID09IDE/ICIiIDogImUiKSArICIgdsOkaGVtIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIlNhYWQgdmFpZCAiICsgbGltaXQgKyAiIHR1bGVtdXMiICsgKGxpbWl0ID09IDEgPyAiZSIgOiAidCIpICsgIiB2YWxpZGEiOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIkxhZW4gdHVsZW11c2kuLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiT3RzaW4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_eu.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgQmFzcXVlIHRyYW5zbGF0aW9uLgogKgogKiBBdXRob3I6IEp1bGVuIFJ1aXogQWl6cHVydSA8anVsZW54IGF0IGdtYWlsIGRvdCBjb20+CiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiAiRXogZGEgYmF0IGRhdG9ycmVuaWsgYXVya2l0dSI7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgewogICAgICAgICAgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7CiAgICAgICAgICBpZiAobiA9PT0gMSkgewogICAgICAgICAgICByZXR1cm4gIklkYXR6aSBrYXJha3RlcmUgYmF0IGdlaGlhZ28iOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuICJJZGF0emkgIiArIG4gKyAiIGthcmFrdGVyZSBnZWhpYWdvIjsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsKICAgICAgICAgIHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OwogICAgICAgICAgaWYgKG4gPT09IDEpIHsKICAgICAgICAgICAgcmV0dXJuICJJZGF0emkga2FyYWt0ZXJlIGJhdCBndXR4aWFnbyI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gIklkYXR6aSAiICsgbiArICIga2FyYWt0ZXJlIGd1dHhpYWdvIjsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7CiAgICAgICAgICBpZiAobGltaXQgPT09IDEgKSB7CiAgICAgICAgICAgIHJldHVybiAiRWxlbWVudHUgYmFrYXJyYSBoYXV0YSBkZXpha2V6dSI7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbGltaXQgKyAiIGVsZW1lbnR1IGhhdXRhIGRpdHpha2V6dSBzb2lsaWsiOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7CiAgICAgICAgICByZXR1cm4gIkVtYWl0emEgZ2VoaWFnbyBrYXJnYXR6ZW4uLi4iOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gIkJpbGF0emVuLi4uIjsKICAgICAgICB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_fa.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgPGZhPiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogQWxpIENob29wYW4gPGNob29wYW5AYXJzaC5jbz4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gItmG2KrbjNis2YfigIzYp9uMINuM2KfZgdiqINmG2LTYry4iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIiDZhNi32YHYpyDYqNuM2LQg2KfYsiIrbisi2qnYp9ix2Kfaqdiq2LEg2YjYp9ix2K8g2YbZhdin24zbjNivICI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICIg2YTYt9mB2KciICsgbiArICIg2qnYp9ix2Kfaqdiq2LEg2LHYpyDYrdiw2YEg2qnZhtuM2K8uIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIti02YXYpyDZgdmC2Lcg2YXbjOKAjNiq2YjYp9mG24zYryAiICsgbGltaXQgKyAiINmF2YjYsdivINix2Kcg2KfZhtiq2K7Yp9ioINqp2YbbjNivIjsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICLYr9ixINit2KfZhCDYqNin2LHar9iw2KfYsduMINmF2YjYp9ix2K8g2KjbjNi02KrYsSAuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gItiv2LEg2K3Yp9mEINis2LPYqtis2YgiOyB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_fi.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgRmlubmlzaCB0cmFuc2xhdGlvbgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICJFaSB0dWxva3NpYSI7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgewogICAgICAgICAgICB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuICJPbGUgaHl2w6QgamEgYW5uYSAiICsgbiArICIgbWVya2tpw6QgbGlzw6TDpC4iOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgewogICAgICAgICAgICB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsKICAgICAgICAgICAgcmV0dXJuICJPbGUgaHl2w6QgamEgYW5uYXIgIiArIG4gKyAiIG1lcmtracOkIHbDpGhlbW3DpG4uIjsKICAgICAgICB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7CiAgICAgICAgICAgIHJldHVybiAiVm9pdCB2YWxpdGEgYWlub2FzdGFhbiAiICsgbGltaXQgKyAiIGtwbCI7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuICJMYWRhdGFhbiBsaXPDpMOkIHR1bG9rc2lhLi4uIjsKICAgICAgICB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gIkV0c2l0w6TDpG4uLi4iOwogICAgICAgIH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_fr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgRnJlbmNoIHRyYW5zbGF0aW9uCiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJBdWN1biByw6lzdWx0YXQgdHJvdXbDqSI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAiTWVyY2kgZGUgc2Fpc2lyICIgKyBuICsgIiBjYXJhY3TDqHJlIiArIChuID09IDE/ICIiIDogInMiKSArICIgZGUgcGx1cyI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJNZXJjaSBkZSBzdXBwcmltZXIgIiArIG4gKyAiIGNhcmFjdMOocmUiICsgKG4gPT0gMT8gIiIgOiAicyIpOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAiVm91cyBwb3V2ZXogc2V1bGVtZW50IHPDqWxlY3Rpb25uZXIgIiArIGxpbWl0ICsgIiDDqWzDqW1lbnQiICsgKGxpbWl0ID09IDEgPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiQ2hhcmdlbWVudCBkZSByw6lzdWx0YXRzIHN1cHBsw6ltZW50YWlyZXMuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlJlY2hlcmNoZSBlbiBjb3Vycy4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_gl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgR2FsaWNpYW4gdHJhbnNsYXRpb24KICogCiAqIEF1dGhvcjogTGVhbmRybyBSZWd1ZWlybyA8bGVhbmRyby5yZWd1ZWlyb0BnbWFpbC5jb20+CiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICJOb24gc2UgYXRvcGFyb24gcmVzdWx0YWRvcyI7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgewogICAgICAgICAgICB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsKICAgICAgICAgICAgaWYgKG4gPT09IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiRW5nYWRhIHVuIGNhcsOhY3RlciI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIkVuZ2FkYSAiICsgbiArICIgY2FyYWN0ZXJlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsKICAgICAgICAgICAgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7CiAgICAgICAgICAgIGlmIChuID09PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIkVsaW1pbmUgdW4gY2Fyw6FjdGVyIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAiRWxpbWluZSAiICsgbiArICIgY2FyYWN0ZXJlcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7CiAgICAgICAgICAgIGlmIChsaW1pdCA9PT0gMSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAiU8OzIHBvZGUgc2VsZWNjaW9uYXIgdW4gZWxlbWVudG8iOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICJTw7MgcG9kZSBzZWxlY2Npb25hciAiICsgbGltaXQgKyAiIGVsZW1lbnRvcyI7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgewogICAgICAgICAgICByZXR1cm4gIkNhcmdhbmRvIG3DoWlzIHJlc3VsdGFkb3MuLi4iOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiAiQnVzY2FuZG8uLi4iOwogICAgICAgIH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_he.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiogU2VsZWN0MiBIZWJyZXcgdHJhbnNsYXRpb24uCioKKiBBdXRob3I6IFlha2lyIFNpdGJvbiA8aHR0cDovL3d3dy55YWtpcnMubmV0Lz4KKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi15zXkCDXoNee16bXkNeVINeU16rXkNee15XXqiI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAi16DXkCDXnNeU15bXmdefINei15XXkyAiICsgbiArICIg16rXldeV15nXnSDXoNeV16HXpNeZ150iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAi16DXkCDXnNeU15bXmdefINek15fXldeqICIgKyBuICsgIiDXqteV15XXmdedIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIteg15nXqtefINec15HXl9eV16ggIiArIGxpbWl0ICsgIiDXpNeo15nXmNeZ150iOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIteY15XXotefINeq15XXpteQ15XXqiDXoNeV16HXpNeV16ouLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gItee15fXpNepLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_hr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgQ3JvYXRpYW4gdHJhbnNsYXRpb24uCiAqCiAqIEF1dGhvcjogRWRpIE1vZHJpxIcgPGVkaS5tb2RyaWNAZ21haWwuY29tPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgdmFyIHNwZWNpYWxOdW1iZXJzID0gewogICAgICAgIDE6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIChuICUgMTAwICE9IDExID8gInpuYWsiIDogInpuYWtvdmEiKTsgfSwKICAgICAgICAyOiBmdW5jdGlvbihuKSB7IHJldHVybiAobiAlIDEwMCAhPSAxMiA/ICJ6bmFrYSIgOiAiem5ha292YSIpOyB9LAogICAgICAgIDM6IGZ1bmN0aW9uKG4pIHsgcmV0dXJuIChuICUgMTAwICE9IDEzID8gInpuYWthIiA6ICJ6bmFrb3ZhIik7IH0sCiAgICAgICAgNDogZnVuY3Rpb24obikgeyByZXR1cm4gKG4gJSAxMDAgIT0gMTQgPyAiem5ha2EiIDogInpuYWtvdmEiKTsgfQogICAgfTsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJOZW1hIHJlenVsdGF0YSI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsKICAgICAgICAgICAgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7CiAgICAgICAgICAgIHZhciBuTW9kMTAgPSBuICUgMTA7CgogICAgICAgICAgICBpZiAobk1vZDEwID4gMCAmJiBuTW9kMTAgPCA1KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIlVuZXNpdGUgam/FoSAiICsgbiArICIgIiArIHNwZWNpYWxOdW1iZXJzW25Nb2QxMF0obik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAiVW5lc2l0ZSBqb8WhICIgKyBuICsgIiB6bmFrb3ZhIjsKICAgICAgICB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsKICAgICAgICAgICAgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7CiAgICAgICAgICAgIHZhciBuTW9kMTAgPSBuICUgMTA7CgogICAgICAgICAgICBpZiAobk1vZDEwID4gMCAmJiBuTW9kMTAgPCA1KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIlVuZXNpdGUgIiArIG4gKyAiICIgKyBzcGVjaWFsTnVtYmVyc1tuTW9kMTBdKG4pICsgIiBtYW5qZSI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAiVW5lc2l0ZSAiICsgbiArICIgem5ha292YSBtYW5qZSI7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIk1ha3NpbWFsYW4gYnJvaiBvZGFicmFuaWggc3RhdmtpIGplICIgKyBsaW1pdDsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICJVxI1pdGF2YW5qZSByZXp1bHRhdGEuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlByZXRyYWdhLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_hu.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgSHVuZ2FyaWFuIHRyYW5zbGF0aW9uCiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJOaW5jcyB0YWzDoWxhdC4iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIlTDumwgcsO2dmlkLiBNw6lnICIgKyBuICsgIiBrYXJha3RlciBoacOhbnl6aWsuIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gIlTDumwgaG9zc3rDui4gIiArIG4gKyAiIGtlcmVrdGVycmVsIHTDtmJiIG1pbnQga2VsbGVuZS4iOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAiQ3NhayAiICsgbGltaXQgKyAiIGVsZW1ldCBsZWhldCBraXbDoWxhc3p0YW5pLiI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiVMO2bHTDqXMuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIktlcmVzw6lzLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_id.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgSW5kb25lc2lhbiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogSWJyYWhpbSBZdXN1ZiA8aWJyYWhpbTd1c3VmQGdtYWlsLmNvbT4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlRpZGFrIGFkYSBkYXRhIHlhbmcgc2VzdWFpIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICJNYXN1a2thbiAiICsgbiArICIgaHVydWYgbGFnaSIgKyAobiA9PSAxID8gIiIgOiAicyIpOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiSGFwdXMgIiArIG4gKyAiIGh1cnVmIiArIChuID09IDEgPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJBbmRhIGhhbnlhIGRhcGF0IG1lbWlsaWggIiArIGxpbWl0ICsgIiBwaWxpaGFuIiArIChsaW1pdCA9PSAxID8gIiIgOiAicyIpOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIk1lbmdhbWJpbCBkYXRhLi4uIjsgfSwKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJNZW5jYXJpLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_is.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgSWNlbGFuZGljIHRyYW5zbGF0aW9uLgogKiAKICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIkVra2VydCBmYW5uc3QiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIlZpbnNhbWxlZ2FzdCBza3JpZmnDsCAiICsgbiArICIgc3RhZiIgKyAobiA9PSAxID8gIiIgOiAiaSIpICsgIiDDrSB2acOwYsOzdCI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJWaW5zYW1sZWdhc3Qgc3R5dHRpw7AgdGV4dGEgdW0gIiArIG4gKyAiIHN0YWYiICsgKG4gPT0gMSA/ICIiIDogImkiKTsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIsOew7ogZ2V0dXIgYcOwZWlucyB2YWxpw7AgIiArIGxpbWl0ICsgIiBhdHJpw7BpIjsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICJTw6ZraSBmbGVpcmkgbmnDsHVyc3TDtsOwdXIuLi4iOyB9LCAKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJMZWl0YS4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_it.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgSXRhbGlhbiB0cmFuc2xhdGlvbgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiTmVzc3VuYSBjb3JyaXNwb25kZW56YSB0cm92YXRhIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICJJbnNlcmlzY2kgYW5jb3JhICIgKyBuICsgIiBjYXJhdHRlciIgKyAobiA9PSAxPyAiZSIgOiAiaSIpOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiSW5zZXJpc2NpICIgKyBuICsgIiBjYXJhdHRlciIgKyAobiA9PSAxPyAiZSIgOiAiaSIpICsgIiBpbiBtZW5vIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIlB1b2kgc2VsZXppb25hcmUgc29sbyAiICsgbGltaXQgKyAiIGVsZW1lbnQiICsgKGxpbWl0ID09IDEgPyAibyIgOiAiaSIpOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIkNhcmljYW1lbnRvIGluIGNvcnNvLi4uIjsgfSwKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJSaWNlcmNhLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ja.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgSmFwYW5lc2UgdHJhbnNsYXRpb24uCiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICLoqbLlvZPjgarjgZciOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIuW+jCIgKyBuICsgIuaWh+Wtl+WFpeOCjOOBpuOBj+OBoOOBleOBhCI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICLmpJzntKLmloflrZfliJfjgYwiICsgbiArICLmloflrZfplbfjgZnjgY7jgb7jgZkiOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAi5pyA5aSa44GnIiArIGxpbWl0ICsgIumgheebruOBvuOBp+OBl+OBi+mBuOaKnuOBp+OBjeOBvuOBm+OCkyI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAi6Kqt6L685Lit772l772l772lIjsgfSwKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICLmpJzntKLkuK3vvaXvvaXvvaUiOyB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ko.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgPExhbmd1YWdlPiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogU3dlbiBNdW4gPGxvbmdmaW5mdW5uZWxAZ21haWwuY29tPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi6rKw6rO8IOyXhuydjCI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAi64SI66y0IOynp+yKteuLiOuLpC4gIituKyLquIDsnpAg642UIOyeheugpe2VtOyjvOyEuOyalC4iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAi64SI66y0IOq5geuLiOuLpC4gIituKyLquIDsnpAg7KeA7JuM7KO87IS47JqULiI7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICLstZzrjIAgIitsaW1pdCsi6rCc6rmM7KeA66eMIOyEoO2Dne2VmOyLpCDsiJgg7J6I7Iq164uI64ukLiI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAi67aI65+s7Jik64qUIOykkeKApiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi6rKA7IOJIOykkeKApiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_lt.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgbGl0aHVhbmlhbiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogQ1JPTlVTIEthcm1hbGFrYXMgPGNyb251cyBkb3Qga2FybWFsYWthcyBhdCBnbWFpbCBkb3QgY29tPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiQXRpdGlrbWVuxbMgbmVyYXN0YSI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsKICAgICAgICAJdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGgsCiAgICAgICAgCSAgICBzdWZmaXggPSAobiAlIDEwID09IDEpICYmIChuICUgMTAwICE9IDExKSA/ICfErycgOiAoKChuICUgMTAgPj0gMikgJiYgKChuICUgMTAwIDwgMTApIHx8IChuICUgMTAwID49IDIwKSkpID8gJ2l1cycgOiAnacWzJyk7CiAgICAgICAgCXJldHVybiAixK5yYcWheWtpdGUgZGFyICIgKyBuICsgIiBzaW1ib2wiICsgc3VmZml4OwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgewogICAgICAgIAl2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heCwKICAgICAgICAJICAgIHN1ZmZpeCA9IChuICUgMTAgPT0gMSkgJiYgKG4gJSAxMDAgIT0gMTEpID8gJ8SvJyA6ICgoKG4gJSAxMCA+PSAyKSAmJiAoKG4gJSAxMDAgPCAxMCkgfHwgKG4gJSAxMDAgPj0gMjApKSkgPyAnaXVzJyA6ICdpxbMnKTsKICAgICAgICAJcmV0dXJuICJQYcWhYWxpbmtpdGUgIiArIG4gKyAiIHNpbWJvbCIgKyBzdWZmaXg7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgewogICAgICAgIAl2YXIgbiA9IGxpbWl0LAogICAgICAgICAgICAgICAgc3VmZml4ID0gKG4gJSAxMCA9PSAxKSAmJiAobiAlIDEwMCAhPSAxMSkgPyAnxIUnIDogKCgobiAlIDEwID49IDIpICYmICgobiAlIDEwMCA8IDEwKSB8fCAobiAlIDEwMCA+PSAyMCkpKSA/ICd1cycgOiAnxbMnKTsKICAgICAgICAJcmV0dXJuICJKxatzIGdhbGl0ZSBwYXNpcmlua3RpIHRpayAiICsgbGltaXQgKyAiIGVsZW1lbnQiICsgc3VmZml4OwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiS3JhdW5hbWEgZGF1Z2lhdSByZXp1bHRhdMWzLi4uIjsgfSwKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJJZcWha29tYS4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_lv.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgTGF0dmlhbiB0cmFuc2xhdGlvbgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiU2Frcml0xKtidSBuYXYiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIkzFq2R6dSBpZXZhZGlldCB2xJNsICIgKyBuICsgIiBzaW1ib2wiICsgKG4gPT0gMTEgPyAidXMiIDogKC9eXGQqWzFdJC9pbS50ZXN0KG4pPyAidSIgOiAidXMiKSk7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJMxatkenUgaWV2YWRpZXQgcGFyICIgKyBuICsgIiBzaW1ib2wiICsgKG4gPT0gMTEgPyAiaWVtIiA6ICgvXlxkKlsxXSQvaW0udGVzdChuKT8gInUiIDogImllbSIpKSArICIgbWF6xIFrIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIkrFq3MgdmFyYXQgaXp2xJNsxJN0aWVzIG5lIHZhaXLEgWsga8SBICIgKyBsaW1pdCArICIgZWxlbWVudCIgKyAobGltaXQgPT0gMTEgPyAidXMiIDogKC9eXGQqWzFdJC9pbS50ZXN0KGxpbWl0KT8gInUiIDogInVzIikpOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIkRhdHUgaWVsxIFkZS4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiTWVrbMSTxaFhbmEuLi4iOyB9CiAgICB9KTsKCQp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_mk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgTWFjZWRvbmlhbiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogTWFya28gQWxla3NpYyA8cHN5YmFyb25AZ21haWwuY29tPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi0J3QtdC80LAg0L/RgNC+0L3QsNGY0LTQtdC90L4g0YHQvtCy0L/QsNGT0LDRmtCwIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICLQktC1INC80L7Qu9C40LzQtSDQstC90LXRgdC10YLQtSDRg9GI0YLQtSAiICsgbiArICIg0LrQsNGA0LDQutGC0LXRgCIgKyAobiA9PSAxID8gIiIgOiAi0LgiKTsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gItCS0LUg0LzQvtC70LjQvNC1INCy0L3QtdGB0LXRgtC1ICIgKyBuICsgIiDQv9C+0LzQsNC70LrRgyDQutCw0YDQsNC60YLQtdGAIiArIChuID09IDE/ICIiIDogItC4Iik7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICLQnNC+0LbQtdGC0LUg0LTQsCDQuNC30LHQtdGA0LXRgtC1INGB0LDQvNC+ICIgKyBsaW1pdCArICIg0YHRgtCw0LLQuiIgKyAobGltaXQgPT0gMSA/ICLQsCIgOiAi0LgiKTsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICLQktGH0LjRgtGD0LLQsNGa0LUg0YDQtdC30YPQu9GC0LDRgtC4Li4uIjsgfSwKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICLQn9GA0LXQsdCw0YDRg9Cy0LDRmtC1Li4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ms.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgTWFsYXkgdHJhbnNsYXRpb24uCiAqIAogKiBBdXRob3I6IEtlcG93ZXJhbiA8a2Vwb3dlcmFuQGdtYWlsLmNvbT4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlRpYWRhIHBhZGFuYW4geWFuZyBkaXRlbXVpIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICJTaWxhIG1hc3Vra2FuICIgKyBuICsgIiBha3NhcmEgbGFnaSI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJTaWxhIGhhcHVza2FuICIgKyBuICsgIiBha3NhcmEiOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAiQW5kYSBoYW55YSBib2xlaCBtZW1pbGloICIgKyBsaW1pdCArICIgcGlsaWhhbiI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiU2VkYW5nIG1lbXVhdGthbiBrZXB1dHVzYW4uLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIk1lbmNhcmkuLi4iOyB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_nl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgRHV0Y2ggdHJhbnNsYXRpb24KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIkdlZW4gcmVzdWx0YXRlbiBnZXZvbmRlbiI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAiVnVsICIgKyBuICsgIiBrYXJha3RlciIgKyAobiA9PSAxPyAiIiA6ICJzIikgKyAiIG1lZXIgaW4iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiVnVsICIgKyBuICsgIiBrYXJha3RlciIgKyAobiA9PSAxPyAiIiA6ICJzIikgKyAiIG1pbmRlciBpbiI7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJNYXhpbWFhbCAiICsgbGltaXQgKyAiIGl0ZW0iICsgKGxpbWl0ID09IDEgPyAiIiA6ICJzIikgKyAiIHRvZWdlc3RhYW4iOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIk1lZXIgcmVzdWx0YXRlbiBsYWRlbi4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiWm9la2VuLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_no.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgTm9yd2VnaWFuIHRyYW5zbGF0aW9uLgogKgogKiBBdXRob3I6IFRvcmdlaXIgVmVpbW8gPHRvcmdlaXIudmVpbW9AZ21haWwuY29tPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiSW5nZW4gdHJlZmYiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIlZlbm5saWdzdCBza3JpdiBpbm4gIiArIG4gKyAobj4xID8gIiBmbGVyZSB0ZWduIiA6ICIgdGVnbiB0aWwiKTsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gIlZlbm5saWdzdCBmamVybiAiICsgbiArICIgdGVnbiI7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsgcmV0dXJuICJEdSBrYW4gdmVsZ2UgbWFrcyAiICsgbGltaXQgKyAiIGVsZW1lbnRlciI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiTGFzdGVyIGZsZXJlIHJlc3VsdGF0ZXIuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlPDuGtlci4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwoK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_pl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgUG9saXNoIHRyYW5zbGF0aW9uLgogKiAKICogQXV0aG9yOiBKYW4gS29uZHJhdG93aWN6IDxqYW5Aa29uZHJhdG93aWN6LnBsPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAKICAgIHZhciBwbF9zdWZmaXggPSBmdW5jdGlvbihuKSB7CiAgICAgICAgaWYobiA9PSAxKSByZXR1cm4gIiI7CiAgICAgICAgaWYoKG4lMTAwID4gMSAmJiBuJTEwMCA8IDUpIHx8IChuJTEwMCA+IDIwICYmIG4lMTAgPiAxICYmIG4lMTAgPCA1KSkgcmV0dXJuICJpIjsKICAgICAgICByZXR1cm4gIsOzdyI7CiAgICB9OwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gIkJyYWsgd3luaWvDs3cuIjsKICAgICAgICB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7CiAgICAgICAgICAgIHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gIldwaXN6IGplc3pjemUgIiArIG4gKyAiIHpuYWsiICsgcGxfc3VmZml4KG4pICsgIi4iOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgewogICAgICAgICAgICB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsKICAgICAgICAgICAgcmV0dXJuICJXcGlzYW5hIGZyYXphIGplc3QgemEgZMWCdWdhIG8gIiArIG4gKyAiIHpuYWsiICsgcGxfc3VmZml4KG4pICsgIi4iOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsKICAgICAgICAgICAgcmV0dXJuICJNb8W8ZXN6IHphem5hY3p5xIcgbmFqd3nFvGVqICIgKyBsaW1pdCArICIgZWxlbWVudCIgKyBwbF9zdWZmaXgobGltaXQpICsgIi4iOwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7CiAgICAgICAgICAgIHJldHVybiAixYFhZG93YW5pZSB3eW5pa8Ozdy4uLiI7CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuICJTenVrYW5pZS4uLiI7CiAgICAgICAgfQogICAgfSk7Cn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_pt-BR.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgQnJhemlsaWFuIFBvcnR1Z3Vlc2UgdHJhbnNsYXRpb24KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIk5lbmh1bSByZXN1bHRhZG8gZW5jb250cmFkbyI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAiSW5mb3JtZSAiICsgbiArICIgY2FyYWN0ZXJlIiArIChuID09IDE/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gIkFwYWd1ZSAiICsgbiArICIgY2FyYWN0ZXJlIiArIChuID09IDE/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIlPDsyDDqSBwb3Nzw612ZWwgc2VsZWNpb25hciAiICsgbGltaXQgKyAiIGVsZW1lbnRvIiArIChsaW1pdCA9PSAxID8gIiIgOiAicyIpOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIkNhcnJlZ2FuZG8gbWFpcyByZXN1bHRhZG9zLi4uIjsgfSwKICAgICAgICBmb3JtYXRTZWFyY2hpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJCdXNjYW5kby4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_pt-PT.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgUG9ydHVndWVzZSAoUG9ydHVnYWwpIHRyYW5zbGF0aW9uCiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJOZW5odW0gcmVzdWx0YWRvIGVuY29udHJhZG8iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIkludHJvZHV6YSAiICsgbiArICIgY2FyIiArIChuID09IDEgPyAiw6FjdGVyIiA6ICJhY3RlcmVzIik7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJBcGFndWUgIiArIG4gKyAiIGNhciIgKyAobiA9PSAxID8gIsOhY3RlciIgOiAiYWN0ZXJlcyIpOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAiU8OzIMOpIHBvc3PDrXZlbCBzZWxlY2lvbmFyICIgKyBsaW1pdCArICIgZWxlbWVudG8iICsgKGxpbWl0ID09IDEgPyAiIiA6ICJzIik7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiQSBjYXJyZWdhciBtYWlzIHJlc3VsdGFkb3MuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIkEgcGVzcXVpc2FyLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ro.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgUm9tYW5pYW4gdHJhbnNsYXRpb24uCiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJOdSBhIGZvc3QgZ8SDc2l0IG5pbWljIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICJWxIMgcnVnxINtIHPEgyBpbnRyb2R1Y2XIm2kgaW5jxIMgIiArIG4gKyAiIGNhcmFjdGVyIiArIChuID09IDEgPyAiIiA6ICJlIik7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuICJWxIMgcnVnxINtIHPEgyBpbnRyb2R1Y2XIm2kgbWFpIHB1yJtpbiBkZSAiICsgbiArICIgY2FyYWN0ZXIiICsgKG4gPT0gMT8gIiIgOiAiZSIpOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAiQXZlyJtpIHZvaWUgc8SDIHNlbGVjdGHIm2kgY2VsIG11bHQgIiArIGxpbWl0ICsgIiBlbGVtZW50IiArIChsaW1pdCA9PSAxID8gIiIgOiAiZSIpOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIlNlIMOubmNhcmPEgy4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiQ8SDdXRhcmUuLi4iOyB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ru.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgUnVzc2lhbiB0cmFuc2xhdGlvbgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi0KHQvtCy0L/QsNC00LXQvdC40Lkg0L3QtSDQvdCw0LnQtNC10L3QviI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC10YnQtSAiICsgbiArICIg0YHQuNC80LLQvtC7IiArIChuID09IDEgPyAiIiA6ICgobiA+IDEpJiYobiA8IDUpID8gItCwIiA6ICLQvtCyIikpOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAi0J/QvtC20LDQu9GD0LnRgdGC0LAsINCy0LLQtdC00LjRgtC1INC90LAgIiArIG4gKyAiINGB0LjQvNCy0L7QuyIgKyAobiA9PSAxID8gIiIgOiAoKG4gPiAxKSYmKG4gPCA1KT8gItCwIiA6ICLQvtCyIikpICsgIiDQvNC10L3RjNGI0LUiOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAi0JLRiyDQvNC+0LbQtdGC0LUg0LLRi9Cx0YDQsNGC0Ywg0L3QtSDQsdC+0LvQtdC1ICIgKyBsaW1pdCArICIg0Y3Qu9C10LzQtdC90YIiICsgKGxpbWl0ID09IDEgPyAi0LAiIDogItC+0LIiKTsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICLQl9Cw0LPRgNGD0LfQutCwINC00LDQvdC90YvRhS4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi0J/QvtC40YHQui4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_sk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgU2xvdmFrIHRyYW5zbGF0aW9uLgogKgogKiBBdXRob3I6IERhdmlkIFZhbGxuZXIgPGRhdmlkQHZhbGxuZXIubmV0PgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAvLyB1c2UgdGV4dCBmb3IgdGhlIG51bWJlcnMgMiB0aHJvdWdoIDQKICAgIHZhciBzbWFsbE51bWJlcnMgPSB7CiAgICAgICAgMjogZnVuY3Rpb24obWFzYykgeyByZXR1cm4gKG1hc2MgPyAiZHZhIiA6ICJkdmUiKTsgfSwKICAgICAgICAzOiBmdW5jdGlvbigpIHsgcmV0dXJuICJ0cmkiOyB9LAogICAgICAgIDQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gIsWhdHlyaSI7IH0KICAgIH0KICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIk5lbmHFoWxpIHNhIMW+aWFkbmUgcG9sb8W+a3kiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7CiAgICAgICAgICAgIHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOwogICAgICAgICAgICBpZiAobiA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIlByb3PDrW0gemFkYWp0ZSBlxaF0ZSBqZWRlbiB6bmFrIjsKICAgICAgICAgICAgfSBlbHNlIGlmIChuIDw9IDQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiUHJvc8OtbSB6YWRhanRlIGXFoXRlIMSPYWzFoWllICIrc21hbGxOdW1iZXJzW25dKHRydWUpKyIgem5ha3kiOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuICJQcm9zw61tIHphZGFqdGUgZcWhdGUgxI9hbMWhw61jaCAiK24rIiB6bmFrb3YiOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7CiAgICAgICAgICAgIHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OwogICAgICAgICAgICBpZiAobiA9PSAxKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIlByb3PDrW0gemFkYWp0ZSBvIGplZGVuIHpuYWsgbWVuZWoiOwogICAgICAgICAgICB9IGVsc2UgaWYgKG4gPD0gNCkgewogICAgICAgICAgICAgICAgcmV0dXJuICJQcm9zw61tIHphZGFqdGUgbyAiK3NtYWxsTnVtYmVyc1tuXSh0cnVlKSsiIHpuYWt5IG1lbmVqIjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAiUHJvc8OtbSB6YWRhanRlIG8gIituKyIgem5ha292IG1lbmVqIjsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHsKICAgICAgICAgICAgaWYgKGxpbWl0ID09IDEpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiTcO0xb5ldGUgenZvbGnFpSBsZW4gamVkbnUgcG9sb8W+a3UiOwogICAgICAgICAgICB9IGVsc2UgaWYgKGxpbWl0IDw9IDQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAiTcO0xb5ldGUgenZvbGnFpSBuYWp2aWFjICIrc21hbGxOdW1iZXJzW2xpbWl0XShmYWxzZSkrIiBwb2xvxb5reSI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gIk3DtMW+ZXRlIHp2b2xpxaUgbmFqdmlhYyAiK2xpbWl0KyIgcG9sb8W+aWVrIjsKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiTmHEjcOtdGF2YWrDuiBzYSDEj2FsxaFpZSB2w71zbGVka3kuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlZ5aMS+YWTDoXZhbmllLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_sv.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgU3dlZGlzaCB0cmFuc2xhdGlvbi4KICoKICogQXV0aG9yOiBKZW5zIFJhbnRpbCA8amVucy5yYW50aWxAdGVsYXZveC5jb20+CiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJJbmdhIHRyw6RmZmFyIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICJWYXIgZ29kIHNrcml2IGluICIgKyBuICsgKG4+MSA/ICIgdGlsbCB0ZWNrZW4iIDogIiB0ZWNrZW4gdGlsbCIpOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAiVmFyIGdvZCBzdWRkYSB1dCAiICsgbiArICIgdGVja2VuIjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIkR1IGthbiBtYXggdsOkbGphICIgKyBsaW1pdCArICIgZWxlbWVudCI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiTGFkZGFyIGZsZXIgcmVzdWx0YXQuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIlPDtmtlci4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_th.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgVGhhaSB0cmFuc2xhdGlvbi4KICoKICogQXV0aG9yOiBBdHNhd2luIENoYW93YW5ha3JpdHNhbmFrdWwgPGpva2VAbmFraG9uLm5ldD4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gIuC5hOC4oeC5iOC4nuC4muC4guC5ieC4reC4oeC4ueC4pSI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29TaG9ydDogZnVuY3Rpb24gKGlucHV0LCBtaW4pIHsgdmFyIG4gPSBtaW4gLSBpbnB1dC5sZW5ndGg7IHJldHVybiAi4LmC4Lib4Lij4LiU4Lie4Li04Lih4Lie4LmM4LmA4Lie4Li04LmI4Lih4Lit4Li14LiBICIgKyBuICsgIiDguJXguLHguKfguK3guLHguIHguKnguKMiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vTG9uZzogZnVuY3Rpb24gKGlucHV0LCBtYXgpIHsgdmFyIG4gPSBpbnB1dC5sZW5ndGggLSBtYXg7IHJldHVybiAi4LmC4Lib4Lij4LiU4Lil4Lia4Lit4Lit4LiBICIgKyBuICsgIiDguJXguLHguKfguK3guLHguIHguKnguKMiOyB9LAogICAgICAgIGZvcm1hdFNlbGVjdGlvblRvb0JpZzogZnVuY3Rpb24gKGxpbWl0KSB7IHJldHVybiAi4LiE4Li44LiT4Liq4Liy4Lih4Liy4Lij4LiW4LmA4Lil4Li34Lit4LiB4LmE4LiU4LmJ4LmE4Lih4LmI4LmA4LiB4Li04LiZICIgKyBsaW1pdCArICIg4Lij4Liy4Lii4LiB4Liy4LijIjsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICLguIHguLPguKXguLHguIfguITguYnguJnguILguYnguK3guKHguLnguKXguYDguJ7guLTguYjguKEuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gIuC4geC4s+C4peC4seC4h+C4hOC5ieC4meC4guC5ieC4reC4oeC4ueC4pS4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwo=]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_tr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgVHVya2lzaCB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogU2FsaW0gS0FZQUJBxZ5JIDxzYWxpbS5rYXlhYmFzaUBnbWFpbC5jb20+CiAqLwooZnVuY3Rpb24gKCQpIHsKICAgICJ1c2Ugc3RyaWN0IjsKCiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICJTb251w6cgYnVsdW5hbWFkxLEiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIkVuIGF6ICIgKyBuICsgIiBrYXJha3RlciBkYWhhIGdpcm1lbGlzaW5peiI7IH0sCiAgICAgICAgZm9ybWF0SW5wdXRUb29Mb25nOiBmdW5jdGlvbiAoaW5wdXQsIG1heCkgeyB2YXIgbiA9IGlucHV0Lmxlbmd0aCAtIG1heDsgcmV0dXJuIG4gKyAiIGthcmFrdGVyIGF6YWx0bWFsxLFzxLFuxLF6IjsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIlNhZGVjZSAiICsgbGltaXQgKyAiIHNlw6dpbSB5YXBhYmlsaXJzaW5peiI7IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAiRGFoYSBmYXpsYS4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiQXJhbsSxeW9yLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_ua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgPExhbmd1YWdlPiB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogYmlnbWloYWlsIDxiaWdtaWhhaWxAYmlnbWlyLm5ldD4KICovCihmdW5jdGlvbiAoJCkgewogICAgInVzZSBzdHJpY3QiOwoKICAgICQuZXh0ZW5kKCQuZm4uc2VsZWN0Mi5kZWZhdWx0cywgewogICAgICAgIGZvcm1hdE5vTWF0Y2hlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gItCd0ZbRh9C+0LPQviDQvdC1INC30L3QsNC50LTQtdC90L4iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoLCBzID0gWyIiLCAi0LgiLCAi0ZbQsiJdLCBwID0gWzIsMCwxLDEsMSwyXTsgcmV0dXJuICLQktCy0LXQtNGW0YLRjCDQsdGD0LvRjCDQu9Cw0YHQutCwINGJ0LUgIiArIG4gKyAiINGB0LjQvNCy0L7QuyIgKyBzWyAobiUxMDA+NCAmJiBuJTEwMDw9MjApPyAyIDogcFtNYXRoLm1pbihuJTEwLCA1KV0gXTsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4LCBzID0gWyIiLCAi0LgiLCAi0ZbQsiJdLCBwID0gWzIsMCwxLDEsMSwyXTsgcmV0dXJuICLQktCy0LXQtNGW0YLRjCDQsdGD0LvRjCDQu9Cw0YHQutCwINC90LAgIiArIG4gKyAiINGB0LjQvNCy0L7QuyIgKyBzWyAobiUxMDA+NCAmJiBuJTEwMDw9MjApPyAyIDogcFtNYXRoLm1pbihuJTEwLCA1KV0gXSArICIg0LzQtdC90YjQtSI7IH0sCiAgICAgICAgZm9ybWF0U2VsZWN0aW9uVG9vQmlnOiBmdW5jdGlvbiAobGltaXQpIHt2YXIgcyA9IFsiIiwgItC4IiwgItGW0LIiXSwgcCA9IFsyLDAsMSwxLDEsMl07ICByZXR1cm4gItCS0Lgg0LzQvtC20LXRgtC1INCy0LjQsdGA0LDRgtC4INC70LjRiNC1ICIgKyBsaW1pdCArICIg0LXQu9C10LzQtdC90YIiICsgc1sgKGxpbWl0JTEwMD40ICYmIGxpbWl0JTEwMDw9MjApPyAyIDogcFtNYXRoLm1pbihsaW1pdCUxMCwgNSldIF07IH0sCiAgICAgICAgZm9ybWF0TG9hZE1vcmU6IGZ1bmN0aW9uIChwYWdlTnVtYmVyKSB7IHJldHVybiAi0JfQsNCy0LDQvdGC0LDQttC10L3QvdGPINC00LDQvdC40YUuLi4iOyB9LAogICAgICAgIGZvcm1hdFNlYXJjaGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gItCf0L7RiNGD0LouLi4iOyB9CiAgICB9KTsKfSkoalF1ZXJ5KTsK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_vi.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgVmlldG5hbWVzZSB0cmFuc2xhdGlvbi4KICogCiAqIEF1dGhvcjogTG9uZyBOZ3V5ZW4gPG9scmFnb25AZ21haWwuY29tPgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CgogICAgJC5leHRlbmQoJC5mbi5zZWxlY3QyLmRlZmF1bHRzLCB7CiAgICAgICAgZm9ybWF0Tm9NYXRjaGVzOiBmdW5jdGlvbiAoKSB7IHJldHVybiAiS2jDtG5nIHTDrG0gdGjhuqV5IGvhur90IHF14bqjIjsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb1Nob3J0OiBmdW5jdGlvbiAoaW5wdXQsIG1pbikgeyB2YXIgbiA9IG1pbiAtIGlucHV0Lmxlbmd0aDsgcmV0dXJuICJWdWkgbMOybmcgbmjhuq1wIG5oaeG7gXUgaMahbiAiICsgbiArICIga8O9IHThu7EiICsgKG4gPT0gMSA/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gIlZ1aSBsw7JuZyBuaOG6rXAgw610IGjGoW4gIiArIG4gKyAiIGvDvSB04buxIiArIChuID09IDE/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIkNo4buJIGPDsyB0aOG7gyBjaOG7jW4gxJHGsOG7o2MgIiArIGxpbWl0ICsgIiB0w7l5IGNo4buNbiIgKyAobGltaXQgPT0gMSA/ICIiIDogInMiKTsgfSwKICAgICAgICBmb3JtYXRMb2FkTW9yZTogZnVuY3Rpb24gKHBhZ2VOdW1iZXIpIHsgcmV0dXJuICLEkGFuZyBs4bqleSB0aMOqbSBr4bq/dCBxdeG6oy4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAixJBhbmcgdMOsbS4uLiI7IH0KICAgIH0pOwp9KShqUXVlcnkpOwoK]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_zh-CN.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgQ2hpbmVzZSB0cmFuc2xhdGlvbgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICLmsqHmnInmib7liLDljLnphY3pobkiOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIuivt+WGjei+k+WFpSIgKyBuICsgIuS4quWtl+espiI7fSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gIuivt+WIoOaOiSIgKyBuICsgIuS4quWtl+espiI7fSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIuS9oOWPquiDvemAieaLqeacgOWkmiIgKyBsaW1pdCArICLpobkiOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIuWKoOi9vee7k+aenOS4rS4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi5pCc57Si5LitLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/lib/vendor/select2/select2_locale_zh-TW.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIFNlbGVjdDIgVHJhZGl0aW9uYWwgQ2hpbmVzZSB0cmFuc2xhdGlvbgogKi8KKGZ1bmN0aW9uICgkKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICAkLmV4dGVuZCgkLmZuLnNlbGVjdDIuZGVmYXVsdHMsIHsKICAgICAgICBmb3JtYXROb01hdGNoZXM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuICLmspLmnInmib7liLDnm7jnrKbnmoTpoIXnm64iOyB9LAogICAgICAgIGZvcm1hdElucHV0VG9vU2hvcnQ6IGZ1bmN0aW9uIChpbnB1dCwgbWluKSB7IHZhciBuID0gbWluIC0gaW5wdXQubGVuZ3RoOyByZXR1cm4gIuiri+WGjei8uOWFpSIgKyBuICsgIuWAi+Wtl+WFgyI7fSwKICAgICAgICBmb3JtYXRJbnB1dFRvb0xvbmc6IGZ1bmN0aW9uIChpbnB1dCwgbWF4KSB7IHZhciBuID0gaW5wdXQubGVuZ3RoIC0gbWF4OyByZXR1cm4gIuiri+WIquaOiSIgKyBuICsgIuWAi+Wtl+WFgyI7fSwKICAgICAgICBmb3JtYXRTZWxlY3Rpb25Ub29CaWc6IGZ1bmN0aW9uIChsaW1pdCkgeyByZXR1cm4gIuS9oOWPquiDvemBuOaTh+acgOWkmiIgKyBsaW1pdCArICLpoIUiOyB9LAogICAgICAgIGZvcm1hdExvYWRNb3JlOiBmdW5jdGlvbiAocGFnZU51bWJlcikgeyByZXR1cm4gIui8ieWFpeS4rS4uLiI7IH0sCiAgICAgICAgZm9ybWF0U2VhcmNoaW5nOiBmdW5jdGlvbiAoKSB7IHJldHVybiAi5pCc5bCL5LitLi4uIjsgfQogICAgfSk7Cn0pKGpRdWVyeSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/MCFactory.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IE1DRmFjdG9yeSAtIFRoaXMgbW9kdWxlIGlzIGEgc29ydCBvZiAmcXVvdDtTdXBlciZxdW90OyBNb2R1bGVNYWtlciB3aXRoIGxvdHMgb2YgZnVuY3Rpb25hbGl0aWVzCiMgVmVyc2lvbjogMC4wLjEsIEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllcgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA4IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMgVGhpcyBmaWxlIG9yaWdpbmFsbHkgY3JlYXRlZCBieSBNb2R1bGVNYWtlciBtb2R1bGUsIHZlcnNpb24gMC4zLjEKIyBDb3B5cmlnaHQgKGMpIDIwMDggYnkgU2FtdWVsIEdvbGRzdGVpbiAoc2pnQGNtc21hZGVzaW1wbGUub3JnKSAKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBNQ0ZhY3RvcnkgZXh0ZW5kcyBDTVNNb2R1bGUKewoKICAgIHByb3RlY3RlZCAkYWN0aW9uOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXROYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJ01DRmFjdG9yeSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICdNJkMgRmFjdG9yeSc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogICAgewogICAgICAgIHJldHVybiAnMy40LjkyJzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gJ0plYW4tQ2hyaXN0b3BoZSBDdXZlbGllcic7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICAgIHsKICAgICAgICByZXR1cm4gJ2pjY0Btb3JyaXMtY2hhcG1hbi5jb20nOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBIYXNBZG1pbigpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnYWRtaW5kZXNjcmlwdGlvbicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tBY2Nlc3MoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gQ2hlY2tBY2Nlc3MoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgTUNGYWN0b3J5Jyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoKQogICAgewogICAgICAgIGVjaG8gJHRoaXMtPkxhbmcoJ2Rpc3BsYXlfZXJyb3InKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVwZW5kZW5jaWVzKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoJ0NNU0Zvcm1zJyA9PiAnMS4xMC4xNCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnaW5zdGFsbHBvc3RtZXNzYWdlJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygndW5pbnN0YWxscHJlbWVzc2FnZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQb3N0TWVzc2FnZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCd1bmluc3RhbGxwb3N0bWVzc2FnZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBIYW5kbGVzRXZlbnRzKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogICAgewogICAgICAgIC8vIFRPRE86IEN1dCB0byAxLjEwIHdpdGggTUNGIDMuMTAKICAgICAgICByZXR1cm4gJzEuOSc7CiAgICB9CgoKICAgIGZ1bmN0aW9uIEluaXRpYWxpemVGcm9udGVuZCgpCiAgICB7CiAgICAgICAgLy8gTk9USUNFOiBEdWUgdG8gdGhlIGR5bmFtaWMgYmVoaW5kIE1DRmFjdG9yeSwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNsZWFuIHBhcmFtZXRlcnMgcHJvcGVybHkuIEFsdGhvdWdoIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBoYXZlIHRoZSBhZG1pbiBsb2dzIGZ1bGwgb2YgYWxlcnQuIEZvciB0aGUgbW9tZW50LCB0aGlzIGlzIHRoZSBvbmx5IGFsdGVybmF0aXZlLgogICAgICAgIC8vIFRPRE86IE5PVCBXT1JLSU5HICEhIQogICAgICAgICR0aGlzLT5SZXN0cmljdFVua25vd25QYXJhbXModHJ1ZSk7CiAgICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21vZHVsZV9pZCcsIENMRUFOX1NUUklORyk7CgoKICAgICAgICAvLyBUbyByZW1vdmUgb25lIGRheQogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKENMRUFOX1JFR0VYUCAuICcvWy1hLXpBLVowLTlfXSovJywgQ0xFQU5fTk9ORSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIERvRXZlbnQoJG9yaWdpbmF0b3IsICRldmVudG5hbWUsICYkcGFyYW1zKQogICAgewogICAgICAgIGlmICgkZXZlbnRuYW1lID09ICdDb250ZW50RWRpdFBvc3QnKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRBdHRyaWJ1dGUoJ2xhc3RfbW9kaWZpZWRfZGF0ZScsIHRpbWUoKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoJG5hbWUsICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRyZXN1bHQgPSAkZGItPmV4ZWN1dGUoJ1NFTEVDVCBhdHRyaWJ1dGVfdmFsdWUgRlJPTSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfYXR0cmlidXRlcyBXSEVSRSBhdHRyaWJ1dGVfbmFtZSA9ID8nLCBhcnJheSgkbmFtZSkpOwogICAgICAgIGlmICgkcmVzdWx0ICYmICgkcm93ID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkpIHsKICAgICAgICAgICAgcmV0dXJuICRyb3dbJ2F0dHJpYnV0ZV92YWx1ZSddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdDsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIERpc3BsYXlJbWFnZSgkaW1hZ2UsICR0aXRsZSA9ICcnKQogICAgewogICAgICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKCiAgICAgICAgcmV0dXJuICc8aW1nIHNyYz0iJyAuICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAnL21vZHVsZXMvTUNGYWN0b3J5L2ltYWdlcy8nIC4gJGltYWdlIC4gJyIgdGl0bGU9IicgLiAkdGl0bGUgLiAnIiBhbHQ9IicgLiAkdGl0bGUgLiAnIiAvPic7CgovLwkJKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAnRWRpdCcsICcnLCAnJywgJ3N5c3RlbWljb24nKQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZSgkaW1hZ2UpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5HZXRNb2R1bGVVUkxQYXRoKCkgLiAnL2ltYWdlcy8nIC4gJGltYWdlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUoJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRyZXN1bHQgPSAkZGItPmV4ZWN1dGUoJ1NFTEVDVCBpZCBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9hdHRyaWJ1dGVzIFdIRVJFIGF0dHJpYnV0ZV9uYW1lID0gPycsIGFycmF5KCRuYW1lKSk7CiAgICAgICAgaWYgKCRyZXN1bHQgJiYgKCRyb3cgPSAkcmVzdWx0LT5GZXRjaFJvdygpKSkgewogICAgICAgICAgICAkZGItPmV4ZWN1dGUoJ1VQREFURSAnIC4gY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfYXR0cmlidXRlcyBTRVQgYXR0cmlidXRlX3ZhbHVlID0gPyBXSEVSRSBpZCA9ID8nLCBhcnJheSgkdmFsdWUsICRyb3dbJ2lkJ10pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZGItPmV4ZWN1dGUoJ0lOU0VSVCBJTlRPICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9hdHRyaWJ1dGVzIFNFVCBpZCA9ID8sIGF0dHJpYnV0ZV9uYW1lID0gPywgYXR0cmlidXRlX3ZhbHVlID0gPycsIGFycmF5KCRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfYXR0cmlidXRlc19zZXEnKSwgJG5hbWUsICR2YWx1ZSkpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gR2V0SGVhZGVySFRNTCgpCiAgICB7CiAgICAgICAgJHRoaXMtPlNob3dNZXNzYWdlcygpOwoKICAgICAgICAkY29uZmlnID0gY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7CgogICAgICAgICRodG1sID0gJyc7Ci8vICAgICAgICAkaHRtbCAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJyAuICR0aGlzLT5sb2FkUmVzb3VyY2UoJ3B1YmxpYy9jc3MvanF1ZXJ5LXVpLm1pbi5jc3MnKSAuICciIC8+JzsKLy8gICAgICAgICRodG1sIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4gJHRoaXMtPmxvYWRSZXNvdXJjZSgncHVibGljL2pzL2pxdWVyeS11aS5taW4uanMnKSAuICciPjwvc2NyaXB0Pic7Ci8vICAgICAgICAkaHRtbCAuPSAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJyAuICR0aGlzLT5sb2FkUmVzb3VyY2UoJ3B1YmxpYy9qcy9qcXVlcnktMS4xMC4yLm1pbi5qcycpIC4gJyI+PC9zY3JpcHQ+JzsKLy8gICAgICAgICRodG1sIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4gJHRoaXMtPmxvYWRSZXNvdXJjZSgncHVibGljL2pzL2pxdWVyeS11aS5taW4uanMnKSAuICciPjwvc2NyaXB0Pic7CgovLyAgICAgICAgJGh0bWwgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiAkY29uZmlnWydyb290X3VybCddIC4gJy9saWIvanF1ZXJ5L2pzL2pxdWVyeS51aS5uZXN0ZWRTb3J0YWJsZS0xLjMuNC5qcyI+PC9zY3JpcHQ+JzsKLy8gICAgICAgICRodG1sIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4gJGNvbmZpZ1sncm9vdF91cmwnXSAuICcvbGliL2pxdWVyeS9qcy9qcXVlcnkuanNvbi0yLjMubWluLmpzIj48L3NjcmlwdD4nOwovLyAgICAgICAgJGh0bWwgLj0gJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicgLiAkdGhpcy0+bG9hZFJlc291cmNlKCdwdWJsaWMvanMvanF1ZXJ5LnVpLnRhYnMuanMnKSAuICciPjwvc2NyaXB0Pic7CgoKICAgICAgICByZXR1cm4gJGh0bWw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRSZXNvdXJjZSgkZmlsZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPkdldE1vZHVsZVVSTFBhdGgoKSAuICcvcmVzb3VyY2VzLycgLiAkZmlsZTsKICAgIH0KCiAgICAvKioKICAgICAqIERpc3BsYXkgRmxhc2ggbWVzc2FnZXMgZnJvbSB0aGUgbW9kdWxlCiAgICAgKi8KCiAgICBwdWJsaWMgZnVuY3Rpb24gU2hvd01lc3NhZ2VzKCkKICAgIHsKICAgICAgICAkbWVzc2FnZXMgPSAkdGhpcy0+R2V0Rmxhc2hNZXNzYWdlcygpOwoKICAgICAgICBpZiAoY291bnQoJG1lc3NhZ2VzKSkgewogICAgICAgICAgICAvKiogQHZhciBBZG1pblRoZW1lICR0aGVtZU9iamVjdCAqLwogICAgICAgICAgICAkdGhlbWVPYmplY3QgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCiAgICAgICAgICAgIGZvcmVhY2ggKCRtZXNzYWdlcyBhcyAkdHlwZSA9PiAkbXNncykgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJG1zZ3MgYXMgJG1lc3NhZ2UpIHsKICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZU9iamVjdC0+U2hvd0Vycm9ycygkbWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZU9iamVjdC0+U2hvd01lc3NhZ2UoJG1lc3NhZ2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU3RvcmUgbWVzc2FnZXMgZm9yIHRoZSBuZXh0IGRpc3BsYXkKICAgICAqIEBwYXJhbSAkbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzdG9yZSBmb3IgbmV4dCBkaXNwbGF5CiAgICAgKiBAcGFyYW0gc3RyaW5nICR0eXBlIGFsZXJ0LCBpbmZvCiAgICAgKi8KCiAgICBwdWJsaWMgZnVuY3Rpb24gU2V0Rmxhc2hNZXNzYWdlKCRtZXNzYWdlLCAkdHlwZSA9ICdpbmZvJykKICAgIHsKICAgICAgICAkX1NFU1NJT05bJ0NNU01TJ11bJ01vZHVsZXMnXVskdGhpcy0+R2V0TmFtZSgpXVsnTWVzc2FnZXMnXVskdHlwZV1bXSA9ICRtZXNzYWdlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRoZSBtZXNzYWdlcyBmb3IgdGhlIGN1cnJlbnQgZGlzcGxheSBhbmQgY2xlYXIgaXQKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwoKICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGbGFzaE1lc3NhZ2VzKCkKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJF9TRVNTSU9OWydDTVNNUyddWydNb2R1bGVzJ11bJHRoaXMtPkdldE5hbWUoKV1bJ01lc3NhZ2VzJ10pKSB7CiAgICAgICAgICAgICRtZXNzYWdlcyA9ICRfU0VTU0lPTlsnQ01TTVMnXVsnTW9kdWxlcyddWyR0aGlzLT5HZXROYW1lKCldWydNZXNzYWdlcyddOwogICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bJ0NNU01TJ11bJ01vZHVsZXMnXVskdGhpcy0+R2V0TmFtZSgpXVsnTWVzc2FnZXMnXSk7CiAgICAgICAgICAgIHJldHVybiAkbWVzc2FnZXM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyAkY291bnRyaWVzID0gYXJyYXkoCiAgICAgICAgJ0FEJyA9PiAnQW5kb3JyYScsCiAgICAgICAgJ0FFJyA9PiAnVW5pdGVkIEFyYWIgRW1pcmF0ZXMnLAogICAgICAgICdBRicgPT4gJ0FmZ2hhbmlzdGFuJywKICAgICAgICAnQUcnID0+ICdBbnRpZ3VhIGFuZCBCYXJidWRhJywKICAgICAgICAnQUknID0+ICdBbmd1aWxsYScsCiAgICAgICAgJ0FMJyA9PiAnQWxiYW5pYScsCiAgICAgICAgJ0FNJyA9PiAnQXJtZW5pYScsCiAgICAgICAgJ0FOJyA9PiAnTmV0aGVybGFuZHMgQW50aWxsZXMnLAogICAgICAgICdBTycgPT4gJ0FuZ29sYScsCiAgICAgICAgJ0FRJyA9PiAnQW50YXJjdGljYScsCiAgICAgICAgJ0FSJyA9PiAnQXJnZW50aW5hJywKICAgICAgICAnQVMnID0+ICdBbWVyaWNhbiBTYW1vYScsCiAgICAgICAgJ0FUJyA9PiAnQXVzdHJpYScsCiAgICAgICAgJ0FVJyA9PiAnQXVzdHJhbGlhJywKICAgICAgICAnQVcnID0+ICdBcnViYScsCiAgICAgICAgJ0FaJyA9PiAnQXplcmJhaWphbicsCiAgICAgICAgJ0JBJyA9PiAnQm9zbmlhIGFuZCBIZXJ6ZWdvdmluYScsCiAgICAgICAgJ0JCJyA9PiAnQmFyYmFkb3MnLAogICAgICAgICdCRCcgPT4gJ0JhbmdsYWRlc2gnLAogICAgICAgICdCRScgPT4gJ0JlbGdpdW0nLAogICAgICAgICdCRicgPT4gJ0J1cmtpbmEgRmFzbycsCiAgICAgICAgJ0JHJyA9PiAnQnVsZ2FyaWEnLAogICAgICAgICdCSCcgPT4gJ0JhaHJhaW4nLAogICAgICAgICdCSScgPT4gJ0J1cnVuZGknLAogICAgICAgICdCSicgPT4gJ0JlbmluJywKICAgICAgICAnQk0nID0+ICdCZXJtdWRhJywKICAgICAgICAnQk4nID0+ICdCcnVuZWknLAogICAgICAgICdCTycgPT4gJ0JvbGl2aWEnLAogICAgICAgICdCUicgPT4gJ0JyYXppbCcsCiAgICAgICAgJ0JTJyA9PiAnQmFoYW1hcycsCiAgICAgICAgJ0JUJyA9PiAnQmh1dGFuJywKICAgICAgICAnQlYnID0+ICdCb3V2ZXQgSXNsYW5kJywKICAgICAgICAnQlcnID0+ICdCb3Rzd2FuYScsCiAgICAgICAgJ0JZJyA9PiAnQmVsYXJ1cycsCiAgICAgICAgJ0JaJyA9PiAnQmVsaXplJywKICAgICAgICAnQ0EnID0+ICdDYW5hZGEnLAogICAgICAgICdDQycgPT4gJ0NvY29zIChLZWVsaW5nKSBJc2xhbmRzJywKICAgICAgICAnQ0QnID0+ICdEZW1vY3JhdGljIFJlcHVibGljIG9mIHRoZSBDb25nbycsCiAgICAgICAgJ0NGJyA9PiAnQ2VudHJhbCBBZnJpY2FuIFJlcHVibGljJywKICAgICAgICAnQ0cnID0+ICdDb25nbycsCiAgICAgICAgJ0NIJyA9PiAnU3dpdHplcmxhbmQnLAogICAgICAgICdDSScgPT4gJ0PDtHRlIGRcJ0l2b2lyZScsCiAgICAgICAgJ0NLJyA9PiAnQ29vayBJc2xhbmRzJywKICAgICAgICAnQ0wnID0+ICdDaGlsZScsCiAgICAgICAgJ0NNJyA9PiAnQ2FtZXJvb24nLAogICAgICAgICdDTicgPT4gJ0NoaW5hJywKICAgICAgICAnQ08nID0+ICdDb2xvbWJpYScsCiAgICAgICAgJ0NSJyA9PiAnQ29zdGEgUmljYScsCiAgICAgICAgJ0NVJyA9PiAnQ3ViYScsCiAgICAgICAgJ0NWJyA9PiAnQ2FwZSBWZXJkZScsCiAgICAgICAgJ0NYJyA9PiAnQ2hyaXN0bWFzIElzbGFuZCcsCiAgICAgICAgJ0NZJyA9PiAnQ3lwcnVzJywKICAgICAgICAnQ1onID0+ICdDemVjaCBSZXB1YmxpYycsCiAgICAgICAgJ0RFJyA9PiAnR2VybWFueScsCiAgICAgICAgJ0RKJyA9PiAnRGppYm91dGknLAogICAgICAgICdESycgPT4gJ0Rlbm1hcmsnLAogICAgICAgICdETScgPT4gJ0RvbWluaWNhJywKICAgICAgICAnRE8nID0+ICdEb21pbmljYW4gUmVwdWJsaWMnLAogICAgICAgICdEWicgPT4gJ0FsZ2VyaWEnLAogICAgICAgICdFQycgPT4gJ0VjdWFkb3InLAogICAgICAgICdFRScgPT4gJ0VzdG9uaWEnLAogICAgICAgICdFRycgPT4gJ0VneXB0JywKICAgICAgICAnRUgnID0+ICdXZXN0ZXJuIFNhaGFyYScsCiAgICAgICAgJ0VSJyA9PiAnRXJpdHJlYScsCiAgICAgICAgJ0VTJyA9PiAnU3BhaW4nLAogICAgICAgICdFVCcgPT4gJ0V0aGlvcGlhJywKICAgICAgICAnRkknID0+ICdGaW5sYW5kJywKICAgICAgICAnRkonID0+ICdGaWppJywKICAgICAgICAnRksnID0+ICdGYWxrbGFuZCBJc2xhbmRzJywKICAgICAgICAnRk0nID0+ICdNaWNyb25lc2lhJywKICAgICAgICAnRk8nID0+ICdGYXJvZSBJc2xhbmRzJywKICAgICAgICAnRlInID0+ICdGcmFuY2UnLAogICAgICAgICdHQScgPT4gJ0dhYm9uJywKICAgICAgICAnR0InID0+ICdVbml0ZWQgS2luZ2RvbScsCiAgICAgICAgJ0dEJyA9PiAnR3JlbmFkYScsCiAgICAgICAgJ0dFJyA9PiAnR2VvcmdpYScsCiAgICAgICAgJ0dGJyA9PiAnRnJlbmNoIEd1aWFuYScsCiAgICAgICAgJ0dIJyA9PiAnR2hhbmEnLAogICAgICAgICdHSScgPT4gJ0dpYnJhbHRhcicsCiAgICAgICAgJ0dMJyA9PiAnR3JlZW5sYW5kJywKICAgICAgICAnR00nID0+ICdHYW1iaWEnLAogICAgICAgICdHTicgPT4gJ0d1aW5lYScsCiAgICAgICAgJ0dQJyA9PiAnR3VhZGVsb3VwZScsCiAgICAgICAgJ0dRJyA9PiAnRXF1YXRvcmlhbCBHdWluZWEnLAogICAgICAgICdHUicgPT4gJ0dyZWVjZScsCiAgICAgICAgJ0dTJyA9PiAnU291dGggR2VvcmdpYSBhbmQgdGhlIFNvdXRoIFNhbmR3aWNoIElzbGFuZHMnLAogICAgICAgICdHVCcgPT4gJ0d1YXRlbWFsYScsCiAgICAgICAgJ0dVJyA9PiAnR3VhbScsCiAgICAgICAgJ0dXJyA9PiAnR3VpbmVhLUJpc3NhdScsCiAgICAgICAgJ0dZJyA9PiAnR3V5YW5hJywKICAgICAgICAnSEsnID0+ICdIb25nIEtvbmcgUy5BLlIuLCBDaGluYScsCiAgICAgICAgJ0hNJyA9PiAnSGVhcmQgSXNsYW5kIGFuZCBNY0RvbmFsZCBJc2xhbmRzJywKICAgICAgICAnSE4nID0+ICdIb25kdXJhcycsCiAgICAgICAgJ0hSJyA9PiAnQ3JvYXRpYScsCiAgICAgICAgJ0hUJyA9PiAnSGFpdGknLAogICAgICAgICdIVScgPT4gJ0h1bmdhcnknLAogICAgICAgICdJRCcgPT4gJ0luZG9uZXNpYScsCiAgICAgICAgJ0lFJyA9PiAnSXJlbGFuZCcsCiAgICAgICAgJ0lMJyA9PiAnSXNyYWVsJywKICAgICAgICAnSU4nID0+ICdJbmRpYScsCiAgICAgICAgJ0lPJyA9PiAnQnJpdGlzaCBJbmRpYW4gT2NlYW4gVGVycml0b3J5JywKICAgICAgICAnSVEnID0+ICdJcmFxJywKICAgICAgICAnSVInID0+ICdJcmFuJywKICAgICAgICAnSVMnID0+ICdJY2VsYW5kJywKICAgICAgICAnSVQnID0+ICdJdGFseScsCiAgICAgICAgJ0pNJyA9PiAnSmFtYWljYScsCiAgICAgICAgJ0pPJyA9PiAnSm9yZGFuJywKICAgICAgICAnSlAnID0+ICdKYXBhbicsCiAgICAgICAgJ0tFJyA9PiAnS2VueWEnLAogICAgICAgICdLRycgPT4gJ0t5cmd5enN0YW4nLAogICAgICAgICdLSCcgPT4gJ0NhbWJvZGlhJywKICAgICAgICAnS0knID0+ICdLaXJpYmF0aScsCiAgICAgICAgJ0tNJyA9PiAnQ29tb3JvcycsCiAgICAgICAgJ0tOJyA9PiAnU2FpbnQgS2l0dHMgYW5kIE5ldmlzJywKICAgICAgICAnS1AnID0+ICdOb3J0aCBLb3JlYScsCiAgICAgICAgJ0tSJyA9PiAnU291dGggS29yZWEnLAogICAgICAgICdLVycgPT4gJ0t1d2FpdCcsCiAgICAgICAgJ0tZJyA9PiAnQ2F5bWFuIElzbGFuZHMnLAogICAgICAgICdLWicgPT4gJ0themFraHN0YW4nLAogICAgICAgICdMQScgPT4gJ0xhb3MnLAogICAgICAgICdMQicgPT4gJ0xlYmFub24nLAogICAgICAgICdMQycgPT4gJ1NhaW50IEx1Y2lhJywKICAgICAgICAnTEknID0+ICdMaWVjaHRlbnN0ZWluJywKICAgICAgICAnTEsnID0+ICdTcmkgTGFua2EnLAogICAgICAgICdMUicgPT4gJ0xpYmVyaWEnLAogICAgICAgICdMUycgPT4gJ0xlc290aG8nLAogICAgICAgICdMVCcgPT4gJ0xpdGh1YW5pYScsCiAgICAgICAgJ0xVJyA9PiAnTHV4ZW1ib3VyZycsCiAgICAgICAgJ0xWJyA9PiAnTGF0dmlhJywKICAgICAgICAnTFknID0+ICdMaWJ5YScsCiAgICAgICAgJ01BJyA9PiAnTW9yb2NjbycsCiAgICAgICAgJ01DJyA9PiAnTW9uYWNvJywKICAgICAgICAnTUQnID0+ICdNb2xkb3ZhJywKICAgICAgICAnTUcnID0+ICdNYWRhZ2FzY2FyJywKICAgICAgICAnTUgnID0+ICdNYXJzaGFsbCBJc2xhbmRzJywKICAgICAgICAnTUsnID0+ICdNYWNlZG9uaWEnLAogICAgICAgICdNTCcgPT4gJ01hbGknLAogICAgICAgICdNTScgPT4gJ015YW5tYXInLAogICAgICAgICdNTicgPT4gJ01vbmdvbGlhJywKICAgICAgICAnTU8nID0+ICdNYWNhbyBTLkEuUi4sIENoaW5hJywKICAgICAgICAnTVAnID0+ICdOb3J0aGVybiBNYXJpYW5hIElzbGFuZHMnLAogICAgICAgICdNUScgPT4gJ01hcnRpbmlxdWUnLAogICAgICAgICdNUicgPT4gJ01hdXJpdGFuaWEnLAogICAgICAgICdNUycgPT4gJ01vbnRzZXJyYXQnLAogICAgICAgICdNVCcgPT4gJ01hbHRhJywKICAgICAgICAnTVUnID0+ICdNYXVyaXRpdXMnLAogICAgICAgICdNVicgPT4gJ01hbGRpdmVzJywKICAgICAgICAnTVcnID0+ICdNYWxhd2knLAogICAgICAgICdNWCcgPT4gJ01leGljbycsCiAgICAgICAgJ01ZJyA9PiAnTWFsYXlzaWEnLAogICAgICAgICdNWicgPT4gJ01vemFtYmlxdWUnLAogICAgICAgICdOQScgPT4gJ05hbWliaWEnLAogICAgICAgICdOQycgPT4gJ05ldyBDYWxlZG9uaWEnLAogICAgICAgICdORScgPT4gJ05pZ2VyJywKICAgICAgICAnTkYnID0+ICdOb3Jmb2xrIElzbGFuZCcsCiAgICAgICAgJ05HJyA9PiAnTmlnZXJpYScsCiAgICAgICAgJ05JJyA9PiAnTmljYXJhZ3VhJywKICAgICAgICAnTkwnID0+ICdOZXRoZXJsYW5kcycsCiAgICAgICAgJ05PJyA9PiAnTm9yd2F5JywKICAgICAgICAnTlAnID0+ICdOZXBhbCcsCiAgICAgICAgJ05SJyA9PiAnTmF1cnUnLAogICAgICAgICdOVScgPT4gJ05pdWUnLAogICAgICAgICdOWicgPT4gJ05ldyBaZWFsYW5kJywKICAgICAgICAnT00nID0+ICdPbWFuJywKICAgICAgICAnUEEnID0+ICdQYW5hbWEnLAogICAgICAgICdQRScgPT4gJ1BlcnUnLAogICAgICAgICdQRicgPT4gJ0ZyZW5jaCBQb2x5bmVzaWEnLAogICAgICAgICdQRycgPT4gJ1BhcHVhIE5ldyBHdWluZWEnLAogICAgICAgICdQSCcgPT4gJ1BoaWxpcHBpbmVzJywKICAgICAgICAnUEsnID0+ICdQYWtpc3RhbicsCiAgICAgICAgJ1BMJyA9PiAnUG9sYW5kJywKICAgICAgICAnUE0nID0+ICdTYWludCBQaWVycmUgYW5kIE1pcXVlbG9uJywKICAgICAgICAnUE4nID0+ICdQaXRjYWlybicsCiAgICAgICAgJ1BSJyA9PiAnUHVlcnRvIFJpY28nLAogICAgICAgICdQUycgPT4gJ1BhbGVzdGluaWFuIFRlcnJpdG9yeScsCiAgICAgICAgJ1BUJyA9PiAnUG9ydHVnYWwnLAogICAgICAgICdQVycgPT4gJ1BhbGF1JywKICAgICAgICAnUFknID0+ICdQYXJhZ3VheScsCiAgICAgICAgJ1FBJyA9PiAnUWF0YXInLAogICAgICAgICdSRScgPT4gJ1LDqXVuaW9uJywKICAgICAgICAnUlMnID0+ICdTZXJiaWEnLAogICAgICAgICdSTycgPT4gJ1JvbWFuaWEnLAogICAgICAgICdSVScgPT4gJ1J1c3NpYScsCiAgICAgICAgJ1JXJyA9PiAnUndhbmRhJywKICAgICAgICAnU0EnID0+ICdTYXVkaSBBcmFiaWEnLAogICAgICAgICdTQicgPT4gJ1NvbG9tb24gSXNsYW5kcycsCiAgICAgICAgJ1NDJyA9PiAnU2V5Y2hlbGxlcycsCiAgICAgICAgJ1NEJyA9PiAnU3VkYW4nLAogICAgICAgICdTRScgPT4gJ1N3ZWRlbicsCiAgICAgICAgJ1NHJyA9PiAnU2luZ2Fwb3JlJywKICAgICAgICAnU0gnID0+ICdTYWludCBIZWxlbmEnLAogICAgICAgICdTSScgPT4gJ1Nsb3ZlbmlhJywKICAgICAgICAnU0onID0+ICdTdmFsYmFyZCBhbmQgSmFuIE1heWVuJywKICAgICAgICAnU0snID0+ICdTbG92YWtpYScsCiAgICAgICAgJ1NMJyA9PiAnU2llcnJhIExlb25lJywKICAgICAgICAnU00nID0+ICdTYW4gTWFyaW5vJywKICAgICAgICAnU04nID0+ICdTZW5lZ2FsJywKICAgICAgICAnU08nID0+ICdTb21hbGlhJywKICAgICAgICAnU1AnID0+ICdTZXJiaWEnLAogICAgICAgICdTUicgPT4gJ1N1cmluYW1lJywKICAgICAgICAnU1QnID0+ICdTYW8gVG9tZSBhbmQgUHJpbmNpcGUnLAogICAgICAgICdTVicgPT4gJ0VsIFNhbHZhZG9yJywKICAgICAgICAnU1knID0+ICdTeXJpYScsCiAgICAgICAgJ1NaJyA9PiAnU3dhemlsYW5kJywKICAgICAgICAnVEMnID0+ICdUdXJrcyBhbmQgQ2FpY29zIElzbGFuZHMnLAogICAgICAgICdURCcgPT4gJ0NoYWQnLAogICAgICAgICdURicgPT4gJ0ZyZW5jaCBTb3V0aGVybiBUZXJyaXRvcmllcycsCiAgICAgICAgJ1RHJyA9PiAnVG9nbycsCiAgICAgICAgJ1RIJyA9PiAnVGhhaWxhbmQnLAogICAgICAgICdUSicgPT4gJ1RhamlraXN0YW4nLAogICAgICAgICdUSycgPT4gJ1Rva2VsYXUnLAogICAgICAgICdUTCcgPT4gJ1RpbW9yLUxlc3RlJywKICAgICAgICAnVE0nID0+ICdUdXJrbWVuaXN0YW4nLAogICAgICAgICdUTicgPT4gJ1R1bmlzaWEnLAogICAgICAgICdUTycgPT4gJ1RvbmdhJywKICAgICAgICAnVFInID0+ICdUdXJrZXknLAogICAgICAgICdUVCcgPT4gJ1RyaW5pZGFkIGFuZCBUb2JhZ28nLAogICAgICAgICdUVicgPT4gJ1R1dmFsdScsCiAgICAgICAgJ1RXJyA9PiAnVGFpd2FuJywKICAgICAgICAnVFonID0+ICdUYW56YW5pYScsCiAgICAgICAgJ1VBJyA9PiAnVWtyYWluZScsCiAgICAgICAgJ1VHJyA9PiAnVWdhbmRhJywKICAgICAgICAnVU0nID0+ICdVbml0ZWQgU3RhdGVzIE1pbm9yIE91dGx5aW5nIElzbGFuZHMnLAogICAgICAgICdVUycgPT4gJ1VuaXRlZCBTdGF0ZXMnLAogICAgICAgICdVWScgPT4gJ1VydWd1YXknLAogICAgICAgICdVWicgPT4gJ1V6YmVraXN0YW4nLAogICAgICAgICdWQScgPT4gJ1ZhdGljYW4nLAogICAgICAgICdWQycgPT4gJ1NhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzJywKICAgICAgICAnVkUnID0+ICdWZW5lenVlbGEnLAogICAgICAgICdWRycgPT4gJ0JyaXRpc2ggVmlyZ2luIElzbGFuZHMnLAogICAgICAgICdWSScgPT4gJ1UuUy4gVmlyZ2luIElzbGFuZHMnLAogICAgICAgICdWTicgPT4gJ1ZpZXRuYW0nLAogICAgICAgICdWVScgPT4gJ1ZhbnVhdHUnLAogICAgICAgICdXRicgPT4gJ1dhbGxpcyBhbmQgRnV0dW5hJywKICAgICAgICAnV1MnID0+ICdTYW1vYScsCiAgICAgICAgJ1lFJyA9PiAnWWVtZW4nLAogICAgICAgICdZVCcgPT4gJ01heW90dGUnLAogICAgICAgICdZVScgPT4gJ1l1Z29zbGF2aWEnLAogICAgICAgICdaQScgPT4gJ1NvdXRoIEFmcmljYScsCiAgICAgICAgJ1pNJyA9PiAnWmFtYmlhJywKICAgICAgICAnWlcnID0+ICdaaW1iYWJ3ZScsCgogICAgICAgIC8vIFRPRE8gOiBDSEVDSyBGT1IgS09TT1ZPIElTTyBDT0RFLiBJTiBUSEUgTUVBTlRJTUUsIFdFJ0xMIFVTRSBUSEUgQ0lBIFdvcmxkIEZhY3Rib29rIGNvZGUuCiAgICAgICAgJ0tWJyA9PiAnS29zb3ZvJwogICAgKTsKCn0KCg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCnJlcXVpcmVfb25jZSgnYXV0b2xvYWRlci5waHAnKTsKCiRkYiA9ICR0aGlzLT5HZXREYigpOwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKJGZsZHMgPSBhcnJheSgKCSdpZCBJIEtFWScsCgknbW9kdWxlX25hbWUgQygyNTUpJywKCSdtb2R1bGVfZnJpZW5kbHluYW1lIEMoMjU1KScsCgknbW9kdWxlX3ZlcnNpb24gSScsCgkncGFyZW50X21vZHVsZSBJJywKCSdhZG1pbl9zZWN0aW9uIEMoMjU1KScsCgknY3JlYXRlZF9hdCBEJywKCSdjcmVhdGVkX2J5IEknLAoJJ3VwZGF0ZWRfYXQgRCcsCgkndXBkYXRlZF9ieSBJJywKCSd0aXRsZV9sYWJlbCBDKDI1NSknLAoJJ3Nob3dfbW9kdWxlIEknLAoJJ2lzX3VzZXJfbW9kdWxlIEknLAoJJ2FwaV9lbmFibGVkIEknLAoJJ2lzX3Byb3RlY3RlZCBJJywKCSdmaWxlc19wYXRoIFhMJywJCgknZXh0cmFfZmllbGRzIFgnLAoJJ3N0cnVjdHVyZSBYJywKCSdmaWx0ZXJzIFgnLAoJJ21vZHVsZV9sb2dpYwlYTCcsCgkndGVtcGxhdGVzX2RhdGEgWEwnLAoJJ2V4dHJhX2ZlYXR1cmVzIFhMJwopOwokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMnLCBpbXBsb2RlKCcsJywgJGZsZHMpLCBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpKTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzX3NlcScpOwoKTUNGTW9kdWxlRmllbGQ6OmNyZWF0ZVRhYmxlKCk7Ck1DRk1vZHVsZUFkbWluVGVtcGxhdGU6OmNyZWF0ZVRhYmxlKCk7CgokZmxkcyA9IGFycmF5KAoJJ2lkIEkgS0VZIEFVVE8nLAkKCSdjcmVhdGVkX2F0IEQnLAoJJ2NyZWF0ZWRfYnkgSScsCgkndXBkYXRlZF9hdCBEJywKCSd1cGRhdGVkX2J5IEknLAoJJ21vZHVsZV9pZCBJJywKCSduYW1lIEMoMjU1KScsCgknY29kZSBYTCcsCgknaXNfcHVibGljIEknLAoJJ2hhdmVfcGVybWlzc2lvbiBJJywKCSdidXR0b25fbmFtZSBDKDI1NSknLAoJJ2J1dHRvbiBDKDI1NSknCik7Cgokc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZV9hY3Rpb25zJywgaW1wbG9kZSgnLCcsICRmbGRzKSwgYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CgokZmxkcyA9IGFycmF5KAoJJ2lkIEkgS0VZJywKCSdhdHRyaWJ1dGVfbmFtZSBDKDI1NSknLAoJJ2F0dHJpYnV0ZV92YWx1ZSBDKDI1NSknCik7CiRzcWwgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfYXR0cmlidXRlcycsIGltcGxvZGUoJywnLCAkZmxkcyksIGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJykpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X2F0dHJpYnV0ZXNfc2VxJyk7CgokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTWFuYWdlIE1DRmFjdG9yeScsICdNYW5hZ2UgTUMgRmFjdG9yeScpOwokdGhpcy0+QWRkRXZlbnRIYW5kbGVyKCdDb3JlJywgJ0NvbnRlbnRFZGl0UG9zdCcsIGZhbHNlKTsKJHRoaXMtPkF1ZGl0KDAsICR0aGlzLT5HZXROYW1lKCksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCAkdGhpcy0+R2V0VmVyc2lvbigpKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiRkYiA9ICR0aGlzLT5HZXREYigpOwoKJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKJHNxbCA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlcycpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokZGItPkRyb3BTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzX3NlcScpOwoKTUNGTW9kdWxlRmllbGQ6OmRlbGV0ZVRhYmxlKCk7Ck1DRk1vZHVsZUFkbWluVGVtcGxhdGU6OmRlbGV0ZVRhYmxlKCk7Cgokc3FsID0gJGRpY3QtPkRyb3BUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVfYWN0aW9ucycpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwoKJHNxbCA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfYXR0cmlidXRlcycpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwokZGItPkRyb3BTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9hdHRyaWJ1dGVzX3NlcScpOwoKJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oJ01hbmFnZSBNQ0ZhY3RvcnknKTsKJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignQ29yZScsICdDb250ZW50RWRpdFBvc3QnKTsKCgokdGhpcy0+QXVkaXQoMCwgJHRoaXMtPmdldEZyaWVuZGx5TmFtZSgpLCAkdGhpcy0+TGFuZygndW5pbnN0YWxsZWQnKSk7Cgo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKcmVxdWlyZV9vbmNlKCdhdXRvbG9hZGVyLnBocCcpOwoKJGRiID0gJHRoaXMtPkdldERiKCk7CiRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCnN3aXRjaCAodHJ1ZSkgewogICAgY2FzZSB2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sICcwLjEnLCAnPCcpOgogICAgICAgICRzcWwgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMnLCAnZmlsdGVycyBYJyk7CiAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMC4zJywgJzwnKToKICAgICAgICAkc3FsID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzJywgJ3BhcmVudF9tb2R1bGUgSScpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzEuMC4xJywgJzwnKToKICAgICAgICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTWFuYWdlIE1DRmFjdG9yeScsICdNYW5hZ2UgTUNGYWN0b3J5Jyk7CiAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzEuMScsICc8Jyk6CiAgICAgICAgJGZsZHMgPSBhcnJheSgKICAgICAgICAgICAgJ2lkIEkgS0VZJywKICAgICAgICAgICAgJ2F0dHJpYnV0ZV9uYW1lIEMoMjU1KScsCiAgICAgICAgICAgICdhdHRyaWJ1dGVfdmFsdWUgQygyNTUpJwogICAgICAgICk7CiAgICAgICAgJHNxbCA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9hdHRyaWJ1dGVzJywgaW1wbG9kZSgnLCcsICRmbGRzKSwgYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKSk7CiAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgICAgICAkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X2F0dHJpYnV0ZXNfc2VxJyk7CiAgICAgICAgJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsICdDb250ZW50RWRpdFBvc3QnLCBmYWxzZSk7CiAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzIuNy4xJywgJzwnKToKICAgICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgICAgICRtb2R1bGVzID0gTUNGTW9kdWxlOjpkb1NlbGVjdCgkYyk7CiAgICAgICAgZm9yZWFjaCAoJG1vZHVsZXMgYXMgJG1vZHVsZSkgewogICAgICAgICAgICAkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfJyAuIHN0cnRvbG93ZXIoJG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpKSwgJ2Z1bGxfdGV4dF9zZWFyY2ggWEwnKTsKICAgICAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgICAgIH0KICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMi44LjYnLCAnPCcpOgogICAgICAgICRzcWwgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMnLCAnc2hvd19tb2R1bGUgSScpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzIuOS4xJywgJzwnKToKICAgICAgICAkc3FsID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzJywgJ21vZHVsZV9sb2dpYwlYTCcpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzIuOS4xNScsICc8Jyk6CiAgICAgICAgJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlcycsICdpc191c2VyX21vZHVsZQlJJyk7CiAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMi4xMC4xMCcsICc8Jyk6CiAgICAgICAgJGZsZHMgPSBhcnJheSgKICAgICAgICAgICAgJ2lkIEkgS0VZIEFVVE8nLAogICAgICAgICAgICAnY3JlYXRlZF9hdCBEJywKICAgICAgICAgICAgJ2NyZWF0ZWRfYnkgSScsCiAgICAgICAgICAgICd1cGRhdGVkX2F0IEQnLAogICAgICAgICAgICAndXBkYXRlZF9ieSBJJywKICAgICAgICAgICAgJ21vZHVsZV9pZCBJJywKICAgICAgICAgICAgJ25hbWUgQygyNTUpJywKICAgICAgICAgICAgJ2NvZGUgWEwnLAogICAgICAgICAgICAnaXNfcHVibGljIEknLAogICAgICAgICAgICAnaGF2ZV9wZXJtaXNzaW9uIEknCiAgICAgICAgKTsKICAgICAgICAkc3FsID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZV9hY3Rpb25zJywgaW1wbG9kZSgnLCcsICRmbGRzKSwgYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKSk7CiAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgICAgICAkc3FsID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzJywgJ3RlbXBsYXRlc19kYXRhCVhMJyk7CiAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMi4xMC4xMycsICc8Jyk6CiAgICAgICAgJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlcycsICdhZG1pbl9zZWN0aW9uIEMoMjU1KScpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzIuMTEuNCcsICc8Jyk6CiAgICAgICAgJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlcycsICdpc19wcm90ZWN0ZWQgSScpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICAgICAgJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlcycsICdmaWxlc19wYXRoIFhMJyk7CiAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMi4xMi43JywgJzwnKToKICAgICAgICAkc3FsID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzJywgJ3RpdGxlX2xhYmVsIEMoMjU1KScpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICAgICAgJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlcycsICdzdHJ1Y3R1cmUgWEwnKTsKICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwogICAgY2FzZSB2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sICczLjIuNScsICc8Jyk6CiAgICAgICAgJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlX2FjdGlvbnMnLCAnYnV0dG9uIEMoMjU1KScpOwogICAgICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbCk7CiAgICAgICAgJHNxbCA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV9tY2ZhY3RvcnlfbW9kdWxlX2FjdGlvbnMnLCAnYnV0dG9uX25hbWUgQygyNTUpJyk7CiAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMy4yLjE2JywgJzwnKToKICAgICAgICAkc3FsID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX21jZmFjdG9yeV9tb2R1bGVzJywgJ2FwaV9lbmFibGVkIEknKTsKICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwogICAgY2FzZSB2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sICczLjIuMzUnLCAnPCcpOgogICAgICAgICRzcWwgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfbWNmYWN0b3J5X21vZHVsZXMnLCAnZXh0cmFfZmVhdHVyZXMgWEwnKTsKICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWwpOwogICAgY2FzZSB2ZXJzaW9uX2NvbXBhcmUoJG9sZHZlcnNpb24sICczLjQuOTInLCAnPCcpOgogICAgICAgIE1DRk1vZHVsZUZpZWxkOjpjcmVhdGVUYWJsZSgpOwogICAgICAgIE1DRk1vZHVsZUFkbWluVGVtcGxhdGU6OmNyZWF0ZVRhYmxlKCk7Cn0KCiR0aGlzLT5BdWRpdCgwLCAkdGhpcy0+Z2V0RnJpZW5kbHlOYW1lKCksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsICR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCg==]]></data>
	</file>
	<file>
	  <filename>/plugins/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/plugins/function.country_name.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmZ1bmN0aW9uIHNtYXJ0eV9jbXNfZnVuY3Rpb25fY291bnRyeV9uYW1lKCRwYXJhbXMsICYkc21hcnR5KSB7CglpZiAoJHBhcmFtc1snY29kZSddKSB7CgkJJGNvZGUgPSBzdHJ0b3VwcGVyKCRwYXJhbXNbJ2NvZGUnXSk7CgkJaWYgKGlzc2V0KE1DRmFjdG9yeTo6JGNvdW50cmllc1skY29kZV0pKSB7CgkJCXJldHVybiBNQ0ZhY3Rvcnk6OiRjb3VudHJpZXNbJGNvZGVdOwoJCX0KICAgICAgICByZXR1cm4gbnVsbDsKCX0KfQoK]]></data>
	</file>
	<file>
	  <filename>/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[TSZDIEZhY3RvcnkKPT09PT09PT09PT0KCkNNUyBNYWRlIFNpbXBsZSBNJmFtcDtDIEZhY3RvcnkgbW9kdWxlCgpNQyBGYWN0b3J5IGlzIGEgbW9kdWxlIGdlbmVyYXRvciBtYWRlIGZvciBub24tZGV2ZWxvcGVycyBhbmQgZGV2ZWxvcGVycy4gWW91IGNhbiBnZW5lcmF0ZSBhIG5ldyBtb2R1bGUKd2l0aCBjdXN0b20gZmllbGRzIHdpdGhvdXQgYW55IGtub3dsZWRnZSBvZiBQSFAgb3IgTXlTUUwuIEl0IGluY2x1ZGUgbWFueSBmZWF0dXJlcyBsaWtlIGN1c3RvbSBmaWVsZHMsIHByZXR0eSB1cmxzLAp1cGdyYWRhYmlsaXR5LCBjb21wYXRpYmlsaXR5IHdpdGggdGhlIE1vZHVsZVh0ZW5kZXIgYW5kIGl0J3MgcmVsYXRpb25zaGlwIGZlYXR1cmUuIEV2ZW4gaWYgeW91IGFyZSBhIGRldmVsb3BlciwKeW91IHNob3VsZCBnaXZlIGl0IGEgdHJ5ICEgOi0pCgpNb3JlIGluZm8gb24gdGhlIFtwcm9qZWN0IGhvbWVwYWdlXShodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL21jZmFjdG9yeSkgb24gQ01TIE1hZGUgU2ltcGxlIEZvcmdlLg==]]></data>
	</file>
	<file>
	  <filename>/resources/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/resources/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABgAAAAIAAAAGAAAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAUAAAABAAAQAABpAGNid3NwYmxvYgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAYAcAB1AGIAbABpAGNid3NwYmxvYgAAANxicGxpc3QwMNgBAgMEBQYHCAkKCQoJDg8JXVNob3dTdGF0dXNCYXJbU2hvd1BhdGhiYXJbU2hvd1Rvb2xiYXJbU2hvd1RhYlZpZXdfEBRDb250YWluZXJTaG93U2lkZWJhclxXaW5kb3dCb3VuZHNcU2lkZWJhcldpZHRoW1Nob3dTaWRlYmFyCQgJCAlfEBh7ezE3MiwgMTA4fSwgezk1OSwgODQ2fX0QrQkIGSczP0tib3yIiYqLjI2oqgAAAAAAAAEBAAAAAAAAABEAAAAAAAAAAAAAAAAAAACrAAAABgBwAHUAYgBsAGkAY2RzY2xib29sAQAAAAYAcAB1AGIAbABpAGNsc3ZQYmxvYgAAAm9icGxpc3QwMNgBAgMEBQYHCAkJCwxEFUVGXxAQdXNlUmVsYXRpdmVEYXRlc18QD3Nob3dJY29uUHJldmlld18QEWNhbGN1bGF0ZUFsbFNpemVzV2NvbHVtbnNYdGV4dFNpemVac29ydENvbHVtblhpY29uU2l6ZV8QEnZpZXdPcHRpb25zVmVyc2lvbgkJCKoNFhsfJCkuMzg91A4PEBEJEwkVV3Zpc2libGVVd2lkdGhZYXNjZW5kaW5nWmlkZW50aWZpZXIJEQGICVRuYW1l1A4PEBEJGAsaCRC1CFxkYXRlTW9kaWZpZWTUDg8QEQsYCx4ICFtkYXRlQ3JlYXRlZNQODxARCSELIwkQYQhUc2l6ZdQODxARCSYJKAkQcwlUa2luZNQODxARCysJLQgQZAlVbGFiZWzUDg8QEQswCTIIEEsJV3ZlcnNpb27UDg8QEQs1CTcIEQEsCVhjb21tZW50c9QODxARCzoLPAgQyAheZGF0ZUxhc3RPcGVuZWTUPj9AEQsYC0NXdmlzaWJsZVV3aWR0aFlhc2NlbmRpbmcICFlkYXRlQWRkZWQjQCgAAAAAAAAjQDAAAAAAAAAQAQAIABkALAA+AFIAWgBjAG4AdwCMAI0AjgCPAJoAowCrALEAuwDGAMcAygDLANAA2QDaANwA3QDqAPMA9AD1AQEBCgELAQ0BDgETARwBHQEfASABJQEuAS8BMQEyATgBQQFCAUQBRQFNAVYBVwFaAVsBZAFtAW4BcAFxAYABiQGRAZcBoQGiAaMBrQG2Ab8AAAAAAAACAQAAAAAAAABHAAAAAAAAAAAAAAAAAAABwQAAAAYAcAB1AGIAbABpAGNsc3ZwYmxvYgAAAldicGxpc3QwMNgBAgMEBQYHCAkJCwxGFEdFXxAQdXNlUmVsYXRpdmVEYXRlc18QD3Nob3dJY29uUHJldmlld18QEWNhbGN1bGF0ZUFsbFNpemVzV2NvbHVtbnNYdGV4dFNpemVac29ydENvbHVtblhpY29uU2l6ZV8QEnZpZXdPcHRpb25zVmVyc2lvbgkJCNkNDg8QERITFBUWHyQpLjM4PUJYY29tbWVudHNeZGF0ZUxhc3RPcGVuZWRbZGF0ZUNyZWF0ZWRUc2l6ZVVsYWJlbFRraW5kV3ZlcnNpb25UbmFtZVxkYXRlTW9kaWZpZWTUFxgZGgscCR5XdmlzaWJsZVV3aWR0aFlhc2NlbmRpbmdVaW5kZXgIEQEsCRAH1BcYGRoLIQsjCBDICBAI1BcYGRoLJgsoCBC1CBAC1BcYGRoJKwstCRBhCBAD1BcYGRoLMAkyCBBkCRAF1BcYGRoJNQk3CRBzCRAE1BcYGRoLOgk8CBBLCRAG1BcYGRoJPwlBCREBiAkQANQXGBkaCSYLRQkIEAEjQCgAAAAAAAAjQDAAAAAAAAAACAAZACwAPgBSAFoAYwBuAHcAjACNAI4AjwCiAKsAugDGAMsA0QDWAN4A4wDwAPkBAQEHAREBFwEYARsBHAEeAScBKAEqASsBLQE2ATcBOQE6ATwBRQFGAUgBSQFLAVQBVQFXAVgBWgFjAWQBZgFnAWkBcgFzAXUBdgF4AYEBggGFAYYBiAGRAZIBkwGVAZ4AAAAAAAACAQAAAAAAAABIAAAAAAAAAAAAAAAAAAABpwAAAAYAcAB1AGIAbABpAGN2U3JubG9uZwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAYCwAAAEUAABALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEERFNEQgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAgAAAAYAAAAAAAAAABAAAAgAAAAAEAAAEAAAAAAQAAAgAAAAABAAAEAAAAAAEAAAgAAAAAAAAAAAEAACAAAAAAAQAAQAAAAAABAACAAAAAAAEAAQAAAAAAAQACAAAAAAABAAQAAAAAAAEACAAAAAAAAQAQAAAAAAABACAAAAAAAAEAQAAAAAAAAQCAAAAAAAABAQAAAAAAAAECAAAAAAAAAQQAAAAAAAABCAAAAAAAAAEQAAAAAAAAASAAAAAAAAABQAAAAAAAAAAIEALUFxgZGgkrCy0JEGEIEAPUFxgZGgswCTIIEGQJEAXUFxgZGgk1CTcJEHMJEATUFxgZGgs6CTwIEEsJEAbUFxgZGgk/CUEJEQGICRAA1BcYGRoJJgtFCQgQASNAKAAAAAAAACNAMAAAAAAAAAAIABkALAA+AFIAWgBjAG4AdwCMAI0AjgCPAKIAqwC6AMYAywDRANYA3gDjAPAA+QEBAQcBEQEXARgBGwEcAR4BJwEoASoBKwEtATYBNwE5AToBPAFFAUYBSAFJAUsBVAFVAVcBWAFaAWMBZAFmAWcBaQFyAXMBdQF2AXgBgQGCAYUBhgGIAZEBkgGTAZUBngAAAAAAAAIBAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAGnAAAABgBwAHUAYgBsAGkAY3ZTcm5sb25nAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/resources/public/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/resources/public/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAABAAAQAGNsYm9vbAEAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAGMAcwBzZHNjbGJvb2wBAAAAAgBqAHNkc2NsYm9vbAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAABAAAAwAAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAAIAAAAGAAAAAAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/resources/public/css/.DS_Store</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAAAUJ1ZDEAABAAAAAIAAAAEAAAAACGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAEAAAABAAAQAABlAHNkc2NsYm9vbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAGAGkAbQBhAGcAZQBzZHNjbGJvb2wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAgLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAACAAAAABAAAAQAAAAAEAAACAAAAAAQAAAQAAAAABAAACAAAAAAEAAAQAAAAAAAAAAAEAABAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAEAsAAABFAAAAhgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBERTREIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIAAAAGAAAAABAAAAwAAAAAAAAAABAAABAAAAAAEAAAIAAAAAAQAABAAAAAACAAAIAAAAGAAAAAAAAAAAAQAAIAAAAAABAABAAAAAAAEAAIAAAAAAAQABAAAAAAABAAIAAAAAAAEABAAAAAAAAQAIAAAAAAABABAAAAAAAAEAIAAAAAAAAQBAAAAAAAABAIAAAAAAAAEBAAAAAAAAAQIAAAAAAAABBAAAAAAAAAEIAAAAAAAAARAAAAAAAAABIAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/admin_template_edit.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmZpZWxkIHsKICAgIGJvcmRlcjogMXB4IGRhc2hlZCBncmF5OyBtYXJnaW46IDVweDsgcGFkZGluZzogMnB4Owp9CgojZGlhbG9nIGxhYmVsLCAjZGlhbG9nIGlucHV0IHsgZGlzcGxheTpibG9jazsgfQojZGlhbG9nIGxhYmVsIHsgbWFyZ2luLXRvcDogMC41ZW07IH0KI2RpYWxvZyBpbnB1dCwgI2RpYWxvZyB0ZXh0YXJlYSB7IHdpZHRoOiA5NSU7IH0KI3RhYnMgeyBtYXJnaW4tdG9wOiAxZW07IH0KI3RhYnMgbGkgLnVpLWljb24tY2xvc2UgeyBmbG9hdDogbGVmdDsgbWFyZ2luOiAwLjRlbSAwLjJlbSAwIDA7IGN1cnNvcjogcG9pbnRlcjsgfQojYWRkX3RhYiB7IGN1cnNvcjogcG9pbnRlcjsgfQ==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/resources/public/css/images/animated-overlay.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_flat_0_aaaaaa_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAe0lEQVRoge3OMQHAIBAAMcC/kjdZJHTI0A4XBdkz86wfO18H3hRUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUBVVBVVAVVAVVQVVQFVQFVUFVUBVUF8O8A8WdY6opAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_flat_75_ffffff_40x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACgAAABkCAYAAAD0ZHJ6AAAAeUlEQVRoge3OMQHAIBAAsVL/nh8JDDfAkCjImpn5HvbfDpwIVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVoKVYCVYCVaClWAlWAlWgpVgJVgJVhtqiwTEKTLXTgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_glass_55_fbf9ee_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAP0lEQVQ4je3PMQrAMABC0a/3v2zX0mCXNkOgc6C4PARd5DqPGKCU8luS8SbAQhiCQRgJE56kZTfbbP9RSvnkBsWcEAZRWcgqAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_glass_65_ffffff_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAMElEQVQ4je3LIQ4AIBTD0O3f/8wrFgmKhMy8pKJKwkhSKeVbbGuAPU9f4PIopTxgAeS0DRtI4yK0AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_glass_75_dadada_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANklEQVQ4jWN48uTJfyYGBgaGUWKUGCWGLfHt2zcoi5GREYNgYmJCZiG42IiB98woMUqMEtgIAMdjCdyg+eEBAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_glass_75_e6e6e6_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAANUlEQVQ4je3LMQoAIBADwb38/6t5wFXaWAiCtUiaYZvF9hBACOFbuntVVe11B0CSjjeE8BwThQIJ8dhEl0YAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_glass_95_fef1ec_1x400.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAAGQCAYAAABvWArbAAAAPklEQVQ4je3PMQqAMABD0Z/c/7aCIAXjJIhD10LJ8vgZw30eMUApZV/GhZNgSTjoLYElY/hNMJ/S6gullCkPiCIPCr4NiEwAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-bg_highlight-soft_75_cccccc_1x100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAAEAAABkCAYAAABHLFpgAAAALElEQVQYlWN49OjRfyYGBgaGIUT8//8fSqBx0Yh///4RL8vAwAAVQ2MNOwIAl6g6KkOJwk8AAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-icons_2e83ff_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8ug/8lgcyYAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-icons_222222_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEUiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiJdmhHzAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-icons_454545_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUVFRUWG2rLCAAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-icons_888888_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEWIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIighcp7AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/images/ui-icons_cd0a0a_256x240.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAQAAAADwCAMAAADYSUr5AAAA7VBMVEXNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrNCgrqN5j8AAAATnRSTlMAGBAyBAhQv4OZLiJUcEBmYBoSzQwgPBZCSEoeWiYwUiyFNIeBw2rJz8c4RBy9uXyrtaWNqa2zKP2fJO8KBgKPo2KVoa9s351GPm5+kWho0kj9AAAPhUlEQVR4nO1djWLbthEGyUiq5YSSLXtp7FpLOmfzkmxr126tmi2p03RJ1/Xe/3EGgARxPyAgRbIk2/hkSz4CJO4+HsE7AJSVysjI2AMUUOxahZ2iANhzBtZWr4BoIRSYAVN5u4QwDwQDRbcwfUi5KS3wFuDmFnQLa4Dtb//cqktwD5QEFFwfUs7PoCCA7y4bEJVFizcIob8KmhAplwwqVjt+9FBl3uINQniwEiryEyw9JHqGpQdEFNi+B4QQ7QOiHhysIPoAxUqxvdvvA9K42bsAv4S2fxfYOe57IJSRkZGRkZGxx7jxSHDHcRBXQMTyIjInBgHwBJ/bEx8PEANC+uhbpSSggCBAVODVabpI1S/k4WLZpTn6NpMhoX9Y40hxYERFpMcqUs4AloCtDQdID1YhnyXZ2hLjAYWiO9Dy1PDB7tPhIqLx+uMB8grZaR+Qxl2/C2RkZGRkZGRk7A7rBf7J0DR5/LUTjzUPIPSPGvQJiVJiB7kcQCiUOJrcFNtDZIf2xarQ3aGvLNxAVIFAabz90BFiBIlycTBhgWwOWCH0FLYHlPqwHaCvcIn2ZbosCevfPTRiFFcgvHukCjWwrc3GrGh1fsAof8EaUReKXkCB4/MzFNo97qLpFiKFYv/kNR5YQxQbQEofkZ2OuEOHqqT6gFTpru8CN7x/+jaZkZGRkZGRcV+x/rLUNcMMqUAscgnFocmpqkTzqymwVAPxfJ5PnIUUQOUKT04tEdWZyv3JCQSn96WS4pD97QfyW25A7NhSAbyhmVj0FEltA4vdiygBibXhoUYgykCUP7HwPTDeEqAIcHVMkZg7Zx4k0uFANs63hPQXCoRLAwdgGsr9Az7Qv7sgQGgg1aPl/BJLExBWgG4RFRLFImGmIquPC/klEGyCG0AuAXaJJC+B8FVe9NYQDEcXB8g6AQcjYJ1goJIggHWCrFR0S6kRHN5+4BzFi8NaoN35NRxUvL+JJdZr7PV4wK6fj8nIyMjIyNhr3OxdXAYq7FHZwB6bDSzSh4sF0utChqo0NAvaT1hLzXwFinmCzmeDucEQK18TTaQoFgP7bNC+RZ4OT4T6gQogDFYk+1QxQlj19QGSAWKiLYp8P0Ag1Gbz1ULfWHLg9iUnQNK5QQJcukm04blKLH2GgEJCY+HzXAZWCvHKco3Bp6MIaCjSXXRJyOxeqhnzEaF93MfFGW/O16ZvDL5TM4MJIjujz/cHypkQuuzRwWJ93BKdIt+wCRAPl9kpe2Ikkb2mFgGlxh/i40d3EHfdvoyMjIyMu43ylt/IAmGHnN5iIt7wKfbv01RAcJqFRl9lcjYQSnbQqKgC4fYOwSJt6N6trE0twZ9kN/PqNpTQeICvr4TLsDYC06U7BMjshS+v1/aT7IwQYD5LcgRQXMT2FrBfBLjZ6151jDElk9tPFfpUgk2yregusX25BJbwAFEfM+YI6vGAti4bTtizB+TjfQCrERyhKb2X8D6A9wX75P4t4neBYJeP6pdhg/gQl8MWvytzeSTjgOQBynQdh/iXKdxOrGJ/RkZGRsb9QmXihGr5+g8GGg9uTh+KoVZuNIzV+CwRucFBEyr1mVjx4irOxwM1BhirB6Q+2eNQi4eqR+aF6mELtoMzCR7V9RAFe/ZvQogNiyY8FPSUTFsLp8TeTmMui5mtw7bcaT0Yw2AA4wFRQIlkgq+1DQrNhkmoxS5Jq+u6bMAIGRECEANgXHTgWzwgBOhDH2l0oTQ4D8D5NMktBgNywAEMjo8rwATMZrPY7JGxBoJCkIBDQiAY09EGTUiBCWkUpISfGPR5AAwBfZiG2z7Ayc1yeKTxid39xBNwfHr4O0LA48ePFTvhYrF1r4tyAoz9n2MCqEuBtp/6GDR0oAYfG/R6wJExHYZHfhygsv7fEWCOj4bYmsP5A+pL4MkTfAnMlD4F+r3bobKvTyTA2P/w7PN+Agq2QW8piqMCpTBwenoKvX0AHGkGtP2YAPvTEWA7QUTAudn7/NxtOG46wWNmDtpBEkBzN7rBEvAFHp+YTB/q97qPAN4gHFqgBi8uLsC7qPCA6mg41G/+ErByPwEXDdoNxRhOx+M5jPEzQugS0ht+b1/Y3gEnYMAIAOIBE29/hIDucE8tmMsNOgK4B1RHFu4UCRlMHzv0xzcajcfdXWDs2h8TArBCkoDUJYDLmz6w7ip3BFS0ve5wTRwAn6keMA9I3QYbfSZ0DKbyt+7OXjGI1idPcfNyAyfAMlCrzaGqphYrxHocLHRJVycnfGUcbtT+jIyMjIw9x7Nn8fJSzG0TmFtO8rZT+XT3S3ub+tKJbbLd5diTVp50+zahyeHSslJ/YPrU0fuazrZO2CZ92/ZCCVXlGRiZKPJyPPRxyIFWeXLQBXJBKiq/3divEAN6ZwM200Qjm7EJBZeWm/PRWVCbYK7s7u2l4XaCz+lzgOfMfhMonXr7TWzeZb98dbgIzBT8Ub8eYYUqfZ4rVJ/MDbIDgPqTulJ/xvntWAtjIisqnwxOkGz0n077FARoY79GdA6HPE4rOy196NiMWHTZlSSApcOgXpy/fHV2joaNKu3ffsAnRcBf4K/6NcIG6tIxk3HyoXPjASqfUgXbYN5PzpL2njkR9QMjeDTVHDTCgRuxOegjoO0FvKzP/t/gmVdI24+G7NIe8JX6Wv3dDyldMA+4YB5wwTygtd+dwRqaTqrLb1l73zTSN52CNpnHuQOYPsDblybgxfkXh/oVtr+N1DEBJdhRJyd/Bd/q1z+cbNrD17iVKyajcnv9arhOkRPgsruuD6DmNPwpDNrLw2CoTgHni4yALr0L29+tiKAEIPn868ejx//8rpWP3OEOl5On9OwpcQm0MhafP/ey8f1uvDNIgGLQG8z4YO99ENgg95etwv4uYJYY8fUGHYH6j6fscHFZMftlAl9i+9XL73X3N/n+ZStOzfVfRvYXhrbdKOpEgVQTg/wsDuDD3kwOfQNMTJ5y+/ltUDWLunyxnRF46IqlBzGMY4X7inggREFioIyMjIyMHWCIB6ZNKAcXseo3vLTQTkVE7348dlwJJSz0+wLfmi8BhZqfw3D4ww/wHVLnEd5/fgYvXsDZ3MlsvYUbbnDjDZ3MN3TJG4+bxjAaDl8TBri9qxEw1ccao2wTNAMLHo2f+sjrXwb/9qHoYqgPMBXJTVfOpmrZH23y6uvo0LHSyY6fHGwKfHJlAuMFvObjDYrIqxBgQi20h7Hd/nYVLmno+eaNUm/eeH2GCuopntnhBJAlI2AHo9CCh1I1QxUdAbqqGY9BBLwyc3W4wYVhvY8A4BoIc1l5M7vnPWphZW9/Ses3n37y9a0uGqFwFQZsQQbd386DogpgEk+dzynsAZMJXq8+ns9NeukJ0PYrNATGGefJQlhkLo7DTXr+y3bNiOsDvrXTz/C2q1DXZH84iRNwrP88Nj+u2DjYEE6RBxD9Knj16ujVHC67A7422o02RwD3gB+t7EblWvu9geOFxSnd3ROmT+nJyQkhoPlsxVONc/3TEdBos+jtA+ZzcwHgTvD1cDjaYCcItA8w9i88A8b+mqSjc6Pvqd998QguEQPmQMeo23ODN86+p0/bn1buBkT6+oBhNZ/PYY4ZAHYb3PRd4LkZmPX68NRtMZn4ASvdA+qf0jMA5MP9eeg28Nug9QiLnj5A33U1MAES6xHAUNpz/9zFAYE1gqQDMT3G6xI9pwdw/aIgKoHCS1YGlRnSq9yCjdXjgN3j+N27YyROHxmuNAeNKPpYuXIyIyMjYy0M8eros59MF/PT2c602T7eA7zvhJ9dr/vzDjXaLp4Yc5+0wllzxzHv3gdmMMM7/CcQzKgVBqYTmFn+Z+mKm8J7k0A5F/jgCfjQ1WBhQyiOqD0lYuqBb+AyzMw9Ha2G3m6c8qQx+AlqnIceQp+Sb6i9UyQWbhr54+AjnZ0VzW2TAN0DmBT6PWmc6jDBE2PK2u+nF43dyP7Q0t1pOcX2fdRvH0mF2Q4JqN35rnHjVIeaXfIAVyUuw/aHCCiJy9iF5l1621zweI8KZrPZ9iJdb7DXJ3US0OSrtZ10imt7wHY7QesAzUMz1oZ3noB3qFJ/H18j97FYuw8QDN4oeKf30osvcSW2ExLo+VcbuAuo/sUIm8fMG9xocO3Ea19J9gFYivnHJ2KnyfovZlgW3v6ySx32abQiIyMjIyPjhlFDTLxpwIgFMnTp6A3g4IDKNY+stkwAMAoIAbasxBXqUWneSAWTMjt50lTqT29rFjvXohjsDNm2YPXDFlICmrJOZ3t6tHm8AiEAl0sCeLIIorIRt+cFbew/QRsoAXb4o1XSfoywzm0FTMAoYBNvLyFu8v8HpLBtD1iKgC17wHb7AI6d9wFbvguAIGTHd4E9wG7jgIyMjIyM+434c2R3HeV/Ffx6jtZu6ijl8h59T655jhR+rdHzDOP6beABCheb8O8/WFXeOyzgf5oAhVYnKxP7CwaAf1afJu8bSrhS6tdaXeGnrRenOqOlz9d6QwYnA/3TLd+GE7qe3chA5YF5DfY0vK3adfOX/gyNp2BW25MHdxAB9qvRiiP3/XpQQFGYDU4+Mi///XumXG8pjvaUAOsBGlf4jJt+YYEzeEzAdw06F19R3juM7D1wita86GR0CKfDHgLuXCc4Bri6vMLdfjMc4VNSUNsdodo2xu/1+Xl/K5+az8jIyMhYG/z5gJTMF1GtKq/a3rpyCvz5gJTMl9GtKq/a3rpyCmfQ4WwZmS+kXFVetb115ST48wEf/AGcfG1iw+tWbpbS2vJ3nQxcVr3lH3z5h972FUTLzYpOVk7l5hD+eYcYwDcAnewOotrZ4OtrPDucqi/LRX0/RR4qx7Nn4U8g+qjffvuN6Gf+nC85vwauHjaYyubqvWYKY4VEfSUMitdnBCT1Ue63R5439m+OgCn6DroAAaHPVQxKth/wkJgHmG8bmQMsT0D6EjDfvhVRKO3ywOQUgRA7nmL1uawZmHf1k+DPBwQ6NdcJ+k6Md1LA5f5ONdhJ8vZ5J0vLHT99srkGOjmJbd/G1r2Nriqnse1AZt1AalU5jW2HsuuG0qvKGRkZGRkZGRG0gcONyXsP9v8D0/IdJADiBNiXl3327WRGgOL/9HC/0XwlIURkRhC4tz6Z/fu7fUf2gHvfB9z3u0BGRkZGRkbGplHcnkgguQoSqtUXuhbs/wPtMwqV0HUJAvj5vk32b8IDuL23yn7qAXZ5u32hbRX7d3o82Df1FZXvbh9QOfhyxldr/+3xgXU9oKmvsHyr7F/XA269/eveBXrsv7N9QALe/tvjA0kPWAXGbvebkbHn+D/J5nMcHzx1UAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/resources/public/css/jquery-ui.min.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjEwLjMgLSAyMDEzLTA1LTAzCiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5jc3MsIGpxdWVyeS51aS5hY2NvcmRpb24uY3NzLCBqcXVlcnkudWkuYXV0b2NvbXBsZXRlLmNzcywganF1ZXJ5LnVpLmJ1dHRvbi5jc3MsIGpxdWVyeS51aS5kYXRlcGlja2VyLmNzcywganF1ZXJ5LnVpLmRpYWxvZy5jc3MsIGpxdWVyeS51aS5tZW51LmNzcywganF1ZXJ5LnVpLnByb2dyZXNzYmFyLmNzcywganF1ZXJ5LnVpLnJlc2l6YWJsZS5jc3MsIGpxdWVyeS51aS5zZWxlY3RhYmxlLmNzcywganF1ZXJ5LnVpLnNsaWRlci5jc3MsIGpxdWVyeS51aS5zcGlubmVyLmNzcywganF1ZXJ5LnVpLnRhYnMuY3NzLCBqcXVlcnkudWkudG9vbHRpcC5jc3MsIGpxdWVyeS51aS50aGVtZS5jc3MKKiBDb3B5cmlnaHQgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzOyBMaWNlbnNlZCBNSVQgKi8gLnVpLWhlbHBlci1oaWRkZW57ZGlzcGxheTpub25lfS51aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGV7Ym9yZGVyOjA7Y2xpcDpyZWN0KDAgMCAwIDApO2hlaWdodDoxcHg7bWFyZ2luOi0xcHg7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxcHh9LnVpLWhlbHBlci1yZXNldHttYXJnaW46MDtwYWRkaW5nOjA7Ym9yZGVyOjA7b3V0bGluZTowO2xpbmUtaGVpZ2h0OjEuMzt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTAwJTtsaXN0LXN0eWxlOm5vbmV9LnVpLWhlbHBlci1jbGVhcmZpeDpiZWZvcmUsLnVpLWhlbHBlci1jbGVhcmZpeDphZnRlcntjb250ZW50OiIiO2Rpc3BsYXk6dGFibGU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS51aS1oZWxwZXItY2xlYXJmaXg6YWZ0ZXJ7Y2xlYXI6Ym90aH0udWktaGVscGVyLWNsZWFyZml4e21pbi1oZWlnaHQ6MH0udWktaGVscGVyLXpmaXh7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt0b3A6MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7b3BhY2l0eTowO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTApfS51aS1mcm9udHt6LWluZGV4OjEwMH0udWktc3RhdGUtZGlzYWJsZWR7Y3Vyc29yOmRlZmF1bHQhaW1wb3J0YW50fS51aS1pY29ue2Rpc3BsYXk6YmxvY2s7dGV4dC1pbmRlbnQ6LTk5OTk5cHg7b3ZlcmZsb3c6aGlkZGVuO2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdH0udWktd2lkZ2V0LW92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCV9LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlcntkaXNwbGF5OmJsb2NrO2N1cnNvcjpwb2ludGVyO3Bvc2l0aW9uOnJlbGF0aXZlO21hcmdpbi10b3A6MnB4O3BhZGRpbmc6LjVlbSAuNWVtIC41ZW0gLjdlbTttaW4taGVpZ2h0OjB9LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWljb25ze3BhZGRpbmctbGVmdDoyLjJlbX0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tbm9pY29uc3twYWRkaW5nLWxlZnQ6LjdlbX0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24taWNvbnMgLnVpLWFjY29yZGlvbi1pY29uc3twYWRkaW5nLWxlZnQ6Mi4yZW19LnVpLWFjY29yZGlvbiAudWktYWNjb3JkaW9uLWhlYWRlciAudWktYWNjb3JkaW9uLWhlYWRlci1pY29ue3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LjVlbTt0b3A6NTAlO21hcmdpbi10b3A6LThweH0udWktYWNjb3JkaW9uIC51aS1hY2NvcmRpb24tY29udGVudHtwYWRkaW5nOjFlbSAyLjJlbTtib3JkZXItdG9wOjA7b3ZlcmZsb3c6YXV0b30udWktYXV0b2NvbXBsZXRle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjdXJzb3I6ZGVmYXVsdH0udWktYnV0dG9ue2Rpc3BsYXk6aW5saW5lLWJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmc6MDtsaW5lLWhlaWdodDpub3JtYWw7bWFyZ2luLXJpZ2h0Oi4xZW07Y3Vyc29yOnBvaW50ZXI7dmVydGljYWwtYWxpZ246bWlkZGxlO3RleHQtYWxpZ246Y2VudGVyO292ZXJmbG93OnZpc2libGV9LnVpLWJ1dHRvbiwudWktYnV0dG9uOmxpbmssLnVpLWJ1dHRvbjp2aXNpdGVkLC51aS1idXR0b246aG92ZXIsLnVpLWJ1dHRvbjphY3RpdmV7dGV4dC1kZWNvcmF0aW9uOm5vbmV9LnVpLWJ1dHRvbi1pY29uLW9ubHl7d2lkdGg6Mi4yZW19YnV0dG9uLnVpLWJ1dHRvbi1pY29uLW9ubHl7d2lkdGg6Mi40ZW19LnVpLWJ1dHRvbi1pY29ucy1vbmx5e3dpZHRoOjMuNGVtfWJ1dHRvbi51aS1idXR0b24taWNvbnMtb25seXt3aWR0aDozLjdlbX0udWktYnV0dG9uIC51aS1idXR0b24tdGV4dHtkaXNwbGF5OmJsb2NrO2xpbmUtaGVpZ2h0Om5vcm1hbH0udWktYnV0dG9uLXRleHQtb25seSAudWktYnV0dG9uLXRleHR7cGFkZGluZzouNGVtIDFlbX0udWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQsLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24tdGV4dHtwYWRkaW5nOi40ZW07dGV4dC1pbmRlbnQ6LTk5OTk5OTlweH0udWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IC51aS1idXR0b24tdGV4dCwudWktYnV0dG9uLXRleHQtaWNvbnMgLnVpLWJ1dHRvbi10ZXh0e3BhZGRpbmc6LjRlbSAxZW0gLjRlbSAyLjFlbX0udWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWJ1dHRvbi10ZXh0LC51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHR7cGFkZGluZzouNGVtIDIuMWVtIC40ZW0gMWVtfS51aS1idXR0b24tdGV4dC1pY29ucyAudWktYnV0dG9uLXRleHR7cGFkZGluZy1sZWZ0OjIuMWVtO3BhZGRpbmctcmlnaHQ6Mi4xZW19aW5wdXQudWktYnV0dG9ue3BhZGRpbmc6LjRlbSAxZW19LnVpLWJ1dHRvbi1pY29uLW9ubHkgLnVpLWljb24sLnVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSAudWktaWNvbiwudWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgLnVpLWljb24sLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1pY29uLC51aS1idXR0b24taWNvbnMtb25seSAudWktaWNvbntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO21hcmdpbi10b3A6LThweH0udWktYnV0dG9uLWljb24tb25seSAudWktaWNvbntsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4fS51aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgLnVpLWJ1dHRvbi1pY29uLXByaW1hcnksLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1wcmltYXJ5LC51aS1idXR0b24taWNvbnMtb25seSAudWktYnV0dG9uLWljb24tcHJpbWFyeXtsZWZ0Oi41ZW19LnVpLWJ1dHRvbi10ZXh0LWljb24tc2Vjb25kYXJ5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksLnVpLWJ1dHRvbi10ZXh0LWljb25zIC51aS1idXR0b24taWNvbi1zZWNvbmRhcnksLnVpLWJ1dHRvbi1pY29ucy1vbmx5IC51aS1idXR0b24taWNvbi1zZWNvbmRhcnl7cmlnaHQ6LjVlbX0udWktYnV0dG9uc2V0e21hcmdpbi1yaWdodDo3cHh9LnVpLWJ1dHRvbnNldCAudWktYnV0dG9ue21hcmdpbi1sZWZ0OjA7bWFyZ2luLXJpZ2h0Oi0uM2VtfWlucHV0LnVpLWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixidXR0b24udWktYnV0dG9uOjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH0udWktZGF0ZXBpY2tlcnt3aWR0aDoxN2VtO3BhZGRpbmc6LjJlbSAuMmVtIDA7ZGlzcGxheTpub25lfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWhlYWRlcntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOi4yZW0gMH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LC51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHR7cG9zaXRpb246YWJzb2x1dGU7dG9wOjJweDt3aWR0aDoxLjhlbTtoZWlnaHQ6MS44ZW19LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0LWhvdmVye3RvcDoxcHh9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItcHJldntsZWZ0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0e3JpZ2h0OjJweH0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1wcmV2LWhvdmVye2xlZnQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLW5leHQtaG92ZXJ7cmlnaHQ6MXB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXByZXYgc3BhbiwudWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1uZXh0IHNwYW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O3RvcDo1MCU7bWFyZ2luLXRvcDotOHB4fS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxle21hcmdpbjowIDIuM2VtO2xpbmUtaGVpZ2h0OjEuOGVtO3RleHQtYWxpZ246Y2VudGVyfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLXRpdGxlIHNlbGVjdHtmb250LXNpemU6MWVtO21hcmdpbjoxcHggMH0udWktZGF0ZXBpY2tlciBzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aC15ZWFye3dpZHRoOjEwMCV9LnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsLnVpLWRhdGVwaWNrZXIgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhcnt3aWR0aDo0OSV9LnVpLWRhdGVwaWNrZXIgdGFibGV7d2lkdGg6MTAwJTtmb250LXNpemU6LjllbTtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7bWFyZ2luOjAgMCAuNGVtfS51aS1kYXRlcGlja2VyIHRoe3BhZGRpbmc6LjdlbSAuM2VtO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OjcwMDtib3JkZXI6MH0udWktZGF0ZXBpY2tlciB0ZHtib3JkZXI6MDtwYWRkaW5nOjFweH0udWktZGF0ZXBpY2tlciB0ZCBzcGFuLC51aS1kYXRlcGlja2VyIHRkIGF7ZGlzcGxheTpibG9jaztwYWRkaW5nOi4yZW07dGV4dC1hbGlnbjpyaWdodDt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktZGF0ZXBpY2tlciAudWktZGF0ZXBpY2tlci1idXR0b25wYW5le2JhY2tncm91bmQtaW1hZ2U6bm9uZTttYXJnaW46LjdlbSAwIDA7cGFkZGluZzowIC4yZW07Ym9yZGVyLWxlZnQ6MDtib3JkZXItcmlnaHQ6MDtib3JkZXItYm90dG9tOjB9LnVpLWRhdGVwaWNrZXIgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6cmlnaHQ7bWFyZ2luOi41ZW0gLjJlbSAuNGVtO2N1cnNvcjpwb2ludGVyO3BhZGRpbmc6LjJlbSAuNmVtIC4zZW07d2lkdGg6YXV0bztvdmVyZmxvdzp2aXNpYmxlfS51aS1kYXRlcGlja2VyIC51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUgYnV0dG9uLnVpLWRhdGVwaWNrZXItY3VycmVudHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLnVpLWRhdGVwaWNrZXItbXVsdGl7d2lkdGg6YXV0b30udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpsZWZ0fS51aS1kYXRlcGlja2VyLW11bHRpIC51aS1kYXRlcGlja2VyLWdyb3VwIHRhYmxle3dpZHRoOjk1JTttYXJnaW46MCBhdXRvIC40ZW19LnVpLWRhdGVwaWNrZXItbXVsdGktMiAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDo1MCV9LnVpLWRhdGVwaWNrZXItbXVsdGktMyAudWktZGF0ZXBpY2tlci1ncm91cHt3aWR0aDozMy4zJX0udWktZGF0ZXBpY2tlci1tdWx0aS00IC51aS1kYXRlcGlja2VyLWdyb3Vwe3dpZHRoOjI1JX0udWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1sYXN0IC51aS1kYXRlcGlja2VyLWhlYWRlciwudWktZGF0ZXBpY2tlci1tdWx0aSAudWktZGF0ZXBpY2tlci1ncm91cC1taWRkbGUgLnVpLWRhdGVwaWNrZXItaGVhZGVye2JvcmRlci1sZWZ0LXdpZHRoOjB9LnVpLWRhdGVwaWNrZXItbXVsdGkgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpsZWZ0fS51aS1kYXRlcGlja2VyLXJvdy1icmVha3tjbGVhcjpib3RoO3dpZHRoOjEwMCU7Zm9udC1zaXplOjB9LnVpLWRhdGVwaWNrZXItcnRse2RpcmVjdGlvbjpydGx9LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLXByZXZ7cmlnaHQ6MnB4O2xlZnQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItbmV4dHtsZWZ0OjJweDtyaWdodDphdXRvfS51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1wcmV2OmhvdmVye3JpZ2h0OjFweDtsZWZ0OmF1dG99LnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLW5leHQ6aG92ZXJ7bGVmdDoxcHg7cmlnaHQ6YXV0b30udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZXtjbGVhcjpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b257ZmxvYXQ6bGVmdH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSBidXR0b24udWktZGF0ZXBpY2tlci1jdXJyZW50LC51aS1kYXRlcGlja2VyLXJ0bCAudWktZGF0ZXBpY2tlci1ncm91cHtmbG9hdDpyaWdodH0udWktZGF0ZXBpY2tlci1ydGwgLnVpLWRhdGVwaWNrZXItZ3JvdXAtbGFzdCAudWktZGF0ZXBpY2tlci1oZWFkZXIsLnVpLWRhdGVwaWNrZXItcnRsIC51aS1kYXRlcGlja2VyLWdyb3VwLW1pZGRsZSAudWktZGF0ZXBpY2tlci1oZWFkZXJ7Ym9yZGVyLXJpZ2h0LXdpZHRoOjA7Ym9yZGVyLWxlZnQtd2lkdGg6MXB4fS51aS1kaWFsb2d7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3BhZGRpbmc6LjJlbTtvdXRsaW5lOjB9LnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxlYmFye3BhZGRpbmc6LjRlbSAxZW07cG9zaXRpb246cmVsYXRpdmV9LnVpLWRpYWxvZyAudWktZGlhbG9nLXRpdGxle2Zsb2F0OmxlZnQ7bWFyZ2luOi4xZW0gMDt3aGl0ZS1zcGFjZTpub3dyYXA7d2lkdGg6OTAlO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS51aS1kaWFsb2cgLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZXtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDouM2VtO3RvcDo1MCU7d2lkdGg6MjFweDttYXJnaW46LTEwcHggMCAwIDA7cGFkZGluZzoxcHg7aGVpZ2h0OjIwcHh9LnVpLWRpYWxvZyAudWktZGlhbG9nLWNvbnRlbnR7cG9zaXRpb246cmVsYXRpdmU7Ym9yZGVyOjA7cGFkZGluZzouNWVtIDFlbTtiYWNrZ3JvdW5kOjA7b3ZlcmZsb3c6YXV0b30udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZXt0ZXh0LWFsaWduOmxlZnQ7Ym9yZGVyLXdpZHRoOjFweCAwIDA7YmFja2dyb3VuZC1pbWFnZTpub25lO21hcmdpbi10b3A6LjVlbTtwYWRkaW5nOi4zZW0gMWVtIC41ZW0gLjRlbX0udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSAudWktZGlhbG9nLWJ1dHRvbnNldHtmbG9hdDpyaWdodH0udWktZGlhbG9nIC51aS1kaWFsb2ctYnV0dG9ucGFuZSBidXR0b257bWFyZ2luOi41ZW0gLjRlbSAuNWVtIDA7Y3Vyc29yOnBvaW50ZXJ9LnVpLWRpYWxvZyAudWktcmVzaXphYmxlLXNle3dpZHRoOjEycHg7aGVpZ2h0OjEycHg7cmlnaHQ6LTVweDtib3R0b206LTVweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjE2cHggMTZweH0udWktZHJhZ2dhYmxlIC51aS1kaWFsb2ctdGl0bGViYXJ7Y3Vyc29yOm1vdmV9LnVpLW1lbnV7bGlzdC1zdHlsZTpub25lO3BhZGRpbmc6MnB4O21hcmdpbjowO2Rpc3BsYXk6YmxvY2s7b3V0bGluZTowfS51aS1tZW51IC51aS1tZW51e21hcmdpbi10b3A6LTNweDtwb3NpdGlvbjphYnNvbHV0ZX0udWktbWVudSAudWktbWVudS1pdGVte21hcmdpbjowO3BhZGRpbmc6MDt3aWR0aDoxMDAlO2xpc3Qtc3R5bGUtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvZ2lmO2Jhc2U2NCxSMGxHT0RsaEFRQUJBSUFBQUFBQUFQLy8veUg1QkFFQUFBQUFMQUFBQUFBQkFBRUFBQUlCUkFBNyl9LnVpLW1lbnUgLnVpLW1lbnUtZGl2aWRlcnttYXJnaW46NXB4IC0ycHggNXB4IC0ycHg7aGVpZ2h0OjA7Zm9udC1zaXplOjA7bGluZS1oZWlnaHQ6MDtib3JkZXItd2lkdGg6MXB4IDAgMH0udWktbWVudSAudWktbWVudS1pdGVtIGF7dGV4dC1kZWNvcmF0aW9uOm5vbmU7ZGlzcGxheTpibG9jaztwYWRkaW5nOjJweCAuNGVtO2xpbmUtaGVpZ2h0OjEuNTttaW4taGVpZ2h0OjA7Zm9udC13ZWlnaHQ6NDAwfS51aS1tZW51IC51aS1tZW51LWl0ZW0gYS51aS1zdGF0ZS1mb2N1cywudWktbWVudSAudWktbWVudS1pdGVtIGEudWktc3RhdGUtYWN0aXZle2ZvbnQtd2VpZ2h0OjQwMDttYXJnaW46LTFweH0udWktbWVudSAudWktc3RhdGUtZGlzYWJsZWR7Zm9udC13ZWlnaHQ6NDAwO21hcmdpbjouNGVtIDAgLjJlbTtsaW5lLWhlaWdodDoxLjV9LnVpLW1lbnUgLnVpLXN0YXRlLWRpc2FibGVkIGF7Y3Vyc29yOmRlZmF1bHR9LnVpLW1lbnUtaWNvbnN7cG9zaXRpb246cmVsYXRpdmV9LnVpLW1lbnUtaWNvbnMgLnVpLW1lbnUtaXRlbSBhe3Bvc2l0aW9uOnJlbGF0aXZlO3BhZGRpbmctbGVmdDoyZW19LnVpLW1lbnUgLnVpLWljb257cG9zaXRpb246YWJzb2x1dGU7dG9wOi4yZW07bGVmdDouMmVtfS51aS1tZW51IC51aS1tZW51LWljb257cG9zaXRpb246c3RhdGljO2Zsb2F0OnJpZ2h0fS51aS1wcm9ncmVzc2JhcntoZWlnaHQ6MmVtO3RleHQtYWxpZ246bGVmdDtvdmVyZmxvdzpoaWRkZW59LnVpLXByb2dyZXNzYmFyIC51aS1wcm9ncmVzc2Jhci12YWx1ZXttYXJnaW46LTFweDtoZWlnaHQ6MTAwJX0udWktcHJvZ3Jlc3NiYXIgLnVpLXByb2dyZXNzYmFyLW92ZXJsYXl7YmFja2dyb3VuZDp1cmwoaW1hZ2VzL2FuaW1hdGVkLW92ZXJsYXkuZ2lmKTtoZWlnaHQ6MTAwJTtmaWx0ZXI6YWxwaGEob3BhY2l0eT0yNSk7b3BhY2l0eTouMjV9LnVpLXByb2dyZXNzYmFyLWluZGV0ZXJtaW5hdGUgLnVpLXByb2dyZXNzYmFyLXZhbHVle2JhY2tncm91bmQtaW1hZ2U6bm9uZX0udWktcmVzaXphYmxle3Bvc2l0aW9uOnJlbGF0aXZlfS51aS1yZXNpemFibGUtaGFuZGxle3Bvc2l0aW9uOmFic29sdXRlO2ZvbnQtc2l6ZTouMXB4O2Rpc3BsYXk6YmxvY2t9LnVpLXJlc2l6YWJsZS1kaXNhYmxlZCAudWktcmVzaXphYmxlLWhhbmRsZSwudWktcmVzaXphYmxlLWF1dG9oaWRlIC51aS1yZXNpemFibGUtaGFuZGxle2Rpc3BsYXk6bm9uZX0udWktcmVzaXphYmxlLW57Y3Vyc29yOm4tcmVzaXplO2hlaWdodDo3cHg7d2lkdGg6MTAwJTt0b3A6LTVweDtsZWZ0OjB9LnVpLXJlc2l6YWJsZS1ze2N1cnNvcjpzLXJlc2l6ZTtoZWlnaHQ6N3B4O3dpZHRoOjEwMCU7Ym90dG9tOi01cHg7bGVmdDowfS51aS1yZXNpemFibGUtZXtjdXJzb3I6ZS1yZXNpemU7d2lkdGg6N3B4O3JpZ2h0Oi01cHg7dG9wOjA7aGVpZ2h0OjEwMCV9LnVpLXJlc2l6YWJsZS13e2N1cnNvcjp3LXJlc2l6ZTt3aWR0aDo3cHg7bGVmdDotNXB4O3RvcDowO2hlaWdodDoxMDAlfS51aS1yZXNpemFibGUtc2V7Y3Vyc29yOnNlLXJlc2l6ZTt3aWR0aDoxMnB4O2hlaWdodDoxMnB4O3JpZ2h0OjFweDtib3R0b206MXB4fS51aS1yZXNpemFibGUtc3d7Y3Vyc29yOnN3LXJlc2l6ZTt3aWR0aDo5cHg7aGVpZ2h0OjlweDtsZWZ0Oi01cHg7Ym90dG9tOi01cHh9LnVpLXJlc2l6YWJsZS1ud3tjdXJzb3I6bnctcmVzaXplO3dpZHRoOjlweDtoZWlnaHQ6OXB4O2xlZnQ6LTVweDt0b3A6LTVweH0udWktcmVzaXphYmxlLW5le2N1cnNvcjpuZS1yZXNpemU7d2lkdGg6OXB4O2hlaWdodDo5cHg7cmlnaHQ6LTVweDt0b3A6LTVweH0udWktc2VsZWN0YWJsZS1oZWxwZXJ7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDoxMDA7Ym9yZGVyOjFweCBkb3R0ZWQgIzAwMH0udWktc2xpZGVye3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdH0udWktc2xpZGVyIC51aS1zbGlkZXItaGFuZGxle3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6Mjt3aWR0aDoxLjJlbTtoZWlnaHQ6MS4yZW07Y3Vyc29yOmRlZmF1bHR9LnVpLXNsaWRlciAudWktc2xpZGVyLXJhbmdle3Bvc2l0aW9uOmFic29sdXRlO3otaW5kZXg6MTtmb250LXNpemU6LjdlbTtkaXNwbGF5OmJsb2NrO2JvcmRlcjowO2JhY2tncm91bmQtcG9zaXRpb246MCAwfS51aS1zbGlkZXIudWktc3RhdGUtZGlzYWJsZWQgLnVpLXNsaWRlci1oYW5kbGUsLnVpLXNsaWRlci51aS1zdGF0ZS1kaXNhYmxlZCAudWktc2xpZGVyLXJhbmdle2ZpbHRlcjppbmhlcml0fS51aS1zbGlkZXItaG9yaXpvbnRhbHtoZWlnaHQ6LjhlbX0udWktc2xpZGVyLWhvcml6b250YWwgLnVpLXNsaWRlci1oYW5kbGV7dG9wOi0uM2VtO21hcmdpbi1sZWZ0Oi0uNmVtfS51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdle3RvcDowO2hlaWdodDoxMDAlfS51aS1zbGlkZXItaG9yaXpvbnRhbCAudWktc2xpZGVyLXJhbmdlLW1pbntsZWZ0OjB9LnVpLXNsaWRlci1ob3Jpem9udGFsIC51aS1zbGlkZXItcmFuZ2UtbWF4e3JpZ2h0OjB9LnVpLXNsaWRlci12ZXJ0aWNhbHt3aWR0aDouOGVtO2hlaWdodDoxMDBweH0udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItaGFuZGxle2xlZnQ6LS4zZW07bWFyZ2luLWxlZnQ6MDttYXJnaW4tYm90dG9tOi0uNmVtfS51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZXtsZWZ0OjA7d2lkdGg6MTAwJX0udWktc2xpZGVyLXZlcnRpY2FsIC51aS1zbGlkZXItcmFuZ2UtbWlue2JvdHRvbTowfS51aS1zbGlkZXItdmVydGljYWwgLnVpLXNsaWRlci1yYW5nZS1tYXh7dG9wOjB9LnVpLXNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmc6MDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGV9LnVpLXNwaW5uZXItaW5wdXR7Ym9yZGVyOjA7YmFja2dyb3VuZDowO2NvbG9yOmluaGVyaXQ7cGFkZGluZzowO21hcmdpbjouMmVtIDA7dmVydGljYWwtYWxpZ246bWlkZGxlO21hcmdpbi1sZWZ0Oi40ZW07bWFyZ2luLXJpZ2h0OjIycHh9LnVpLXNwaW5uZXItYnV0dG9ue3dpZHRoOjE2cHg7aGVpZ2h0OjUwJTtmb250LXNpemU6LjVlbTtwYWRkaW5nOjA7bWFyZ2luOjA7dGV4dC1hbGlnbjpjZW50ZXI7cG9zaXRpb246YWJzb2x1dGU7Y3Vyc29yOmRlZmF1bHQ7ZGlzcGxheTpibG9jaztvdmVyZmxvdzpoaWRkZW47cmlnaHQ6MH0udWktc3Bpbm5lciBhLnVpLXNwaW5uZXItYnV0dG9ue2JvcmRlci10b3A6MDtib3JkZXItYm90dG9tOjA7Ym9yZGVyLXJpZ2h0OjB9LnVpLXNwaW5uZXIgLnVpLWljb257cG9zaXRpb246YWJzb2x1dGU7bWFyZ2luLXRvcDotOHB4O3RvcDo1MCU7bGVmdDowfS51aS1zcGlubmVyLXVwe3RvcDowfS51aS1zcGlubmVyLWRvd257Ym90dG9tOjB9LnVpLXNwaW5uZXIgLnVpLWljb24tdHJpYW5nbGUtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY1cHggLTE2cHh9LnVpLXRhYnN7cG9zaXRpb246cmVsYXRpdmU7cGFkZGluZzouMmVtfS51aS10YWJzIC51aS10YWJzLW5hdnttYXJnaW46MDtwYWRkaW5nOi4yZW0gLjJlbSAwfS51aS10YWJzIC51aS10YWJzLW5hdiBsaXtsaXN0LXN0eWxlOm5vbmU7ZmxvYXQ6bGVmdDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6MDttYXJnaW46MXB4IC4yZW0gMCAwO2JvcmRlci1ib3R0b20td2lkdGg6MDtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm93cmFwfS51aS10YWJzIC51aS10YWJzLW5hdiBsaSBhe2Zsb2F0OmxlZnQ7cGFkZGluZzouNWVtIDFlbTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmV7bWFyZ2luLWJvdHRvbTotMXB4O3BhZGRpbmctYm90dG9tOjFweH0udWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1hY3RpdmUgYSwudWktdGFicyAudWktdGFicy1uYXYgbGkudWktc3RhdGUtZGlzYWJsZWQgYSwudWktdGFicyAudWktdGFicy1uYXYgbGkudWktdGFicy1sb2FkaW5nIGF7Y3Vyc29yOnRleHR9LnVpLXRhYnMgLnVpLXRhYnMtbmF2IGxpIGEsLnVpLXRhYnMtY29sbGFwc2libGUgLnVpLXRhYnMtbmF2IGxpLnVpLXRhYnMtYWN0aXZlIGF7Y3Vyc29yOnBvaW50ZXJ9LnVpLXRhYnMgLnVpLXRhYnMtcGFuZWx7ZGlzcGxheTpibG9jaztib3JkZXItd2lkdGg6MDtwYWRkaW5nOjFlbSAxLjRlbTtiYWNrZ3JvdW5kOjB9LnVpLXRvb2x0aXB7cGFkZGluZzo4cHg7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDo5OTk5O21heC13aWR0aDozMDBweDstd2Via2l0LWJveC1zaGFkb3c6MCAwIDVweCAjYWFhO2JveC1zaGFkb3c6MCAwIDVweCAjYWFhfWJvZHkgLnVpLXRvb2x0aXB7Ym9yZGVyLXdpZHRoOjJweH0udWktd2lkZ2V0e2ZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MS4xZW19LnVpLXdpZGdldCAudWktd2lkZ2V0e2ZvbnQtc2l6ZToxZW19LnVpLXdpZGdldCBpbnB1dCwudWktd2lkZ2V0IHNlbGVjdCwudWktd2lkZ2V0IHRleHRhcmVhLC51aS13aWRnZXQgYnV0dG9ue2ZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MWVtfS51aS13aWRnZXQtY29udGVudHtib3JkZXI6MXB4IHNvbGlkICNhYWE7YmFja2dyb3VuZDojZmZmIHVybChpbWFnZXMvdWktYmdfZmxhdF83NV9mZmZmZmZfNDB4MTAwLnBuZykgNTAlIDUwJSByZXBlYXQteDtjb2xvcjojMjIyfS51aS13aWRnZXQtY29udGVudCBhe2NvbG9yOiMyMjJ9LnVpLXdpZGdldC1oZWFkZXJ7Ym9yZGVyOjFweCBzb2xpZCAjYWFhO2JhY2tncm91bmQ6I2NjYyB1cmwoaW1hZ2VzL3VpLWJnX2hpZ2hsaWdodC1zb2Z0Xzc1X2NjY2NjY18xeDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Y29sb3I6IzIyMjtmb250LXdlaWdodDo3MDB9LnVpLXdpZGdldC1oZWFkZXIgYXtjb2xvcjojMjIyfS51aS1zdGF0ZS1kZWZhdWx0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGVmYXVsdCwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZGVmYXVsdHtib3JkZXI6MXB4IHNvbGlkICNkM2QzZDM7YmFja2dyb3VuZDojZTZlNmU2IHVybChpbWFnZXMvdWktYmdfZ2xhc3NfNzVfZTZlNmU2XzF4NDAwLnBuZykgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzU1NX0udWktc3RhdGUtZGVmYXVsdCBhLC51aS1zdGF0ZS1kZWZhdWx0IGE6bGluaywudWktc3RhdGUtZGVmYXVsdCBhOnZpc2l0ZWR7Y29sb3I6IzU1NTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaG92ZXIsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1ob3ZlciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaG92ZXIsLnVpLXN0YXRlLWZvY3VzLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZm9jdXMsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWZvY3Vze2JvcmRlcjoxcHggc29saWQgIzk5OTtiYWNrZ3JvdW5kOiNkYWRhZGEgdXJsKGltYWdlcy91aS1iZ19nbGFzc183NV9kYWRhZGFfMXg0MDAucG5nKSA1MCUgNTAlIHJlcGVhdC14O2ZvbnQtd2VpZ2h0OjQwMDtjb2xvcjojMjEyMTIxfS51aS1zdGF0ZS1ob3ZlciBhLC51aS1zdGF0ZS1ob3ZlciBhOmhvdmVyLC51aS1zdGF0ZS1ob3ZlciBhOmxpbmssLnVpLXN0YXRlLWhvdmVyIGE6dmlzaXRlZHtjb2xvcjojMjEyMTIxO3RleHQtZGVjb3JhdGlvbjpub25lfS51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1hY3RpdmUsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWFjdGl2ZXtib3JkZXI6MXB4IHNvbGlkICNhYWE7YmFja2dyb3VuZDojZmZmIHVybChpbWFnZXMvdWktYmdfZ2xhc3NfNjVfZmZmZmZmXzF4NDAwLnBuZykgNTAlIDUwJSByZXBlYXQteDtmb250LXdlaWdodDo0MDA7Y29sb3I6IzIxMjEyMX0udWktc3RhdGUtYWN0aXZlIGEsLnVpLXN0YXRlLWFjdGl2ZSBhOmxpbmssLnVpLXN0YXRlLWFjdGl2ZSBhOnZpc2l0ZWR7Y29sb3I6IzIxMjEyMTt0ZXh0LWRlY29yYXRpb246bm9uZX0udWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtaGlnaGxpZ2h0LC51aS13aWRnZXQtaGVhZGVyIC51aS1zdGF0ZS1oaWdobGlnaHR7Ym9yZGVyOjFweCBzb2xpZCAjZmNlZmExO2JhY2tncm91bmQ6I2ZiZjllZSB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzU1X2ZiZjllZV8xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtaGlnaGxpZ2h0IGEsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1oaWdobGlnaHQgYSwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtaGlnaGxpZ2h0IGF7Y29sb3I6IzM2MzYzNn0udWktc3RhdGUtZXJyb3IsLnVpLXdpZGdldC1jb250ZW50IC51aS1zdGF0ZS1lcnJvciwudWktd2lkZ2V0LWhlYWRlciAudWktc3RhdGUtZXJyb3J7Ym9yZGVyOjFweCBzb2xpZCAjY2QwYTBhO2JhY2tncm91bmQ6I2ZlZjFlYyB1cmwoaW1hZ2VzL3VpLWJnX2dsYXNzXzk1X2ZlZjFlY18xeDQwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7Y29sb3I6I2NkMGEwYX0udWktc3RhdGUtZXJyb3IgYSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yIGEsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yIGF7Y29sb3I6I2NkMGEwYX0udWktc3RhdGUtZXJyb3ItdGV4dCwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXN0YXRlLWVycm9yLXRleHQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWVycm9yLXRleHR7Y29sb3I6I2NkMGEwYX0udWktcHJpb3JpdHktcHJpbWFyeSwudWktd2lkZ2V0LWNvbnRlbnQgLnVpLXByaW9yaXR5LXByaW1hcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXByaW1hcnl7Zm9udC13ZWlnaHQ6NzAwfS51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1jb250ZW50IC51aS1wcmlvcml0eS1zZWNvbmRhcnksLnVpLXdpZGdldC1oZWFkZXIgLnVpLXByaW9yaXR5LXNlY29uZGFyeXtvcGFjaXR5Oi43O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTcwKTtmb250LXdlaWdodDo0MDB9LnVpLXN0YXRlLWRpc2FibGVkLC51aS13aWRnZXQtY29udGVudCAudWktc3RhdGUtZGlzYWJsZWQsLnVpLXdpZGdldC1oZWFkZXIgLnVpLXN0YXRlLWRpc2FibGVke29wYWNpdHk6LjM1O2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KTtiYWNrZ3JvdW5kLWltYWdlOm5vbmV9LnVpLXN0YXRlLWRpc2FibGVkIC51aS1pY29ue2ZpbHRlcjpBbHBoYShPcGFjaXR5PTM1KX0udWktaWNvbnt3aWR0aDoxNnB4O2hlaWdodDoxNnB4fS51aS1pY29uLC51aS13aWRnZXQtY29udGVudCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nKX0udWktd2lkZ2V0LWhlYWRlciAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdWktaWNvbnNfMjIyMjIyXzI1NngyNDAucG5nKX0udWktc3RhdGUtZGVmYXVsdCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdWktaWNvbnNfODg4ODg4XzI1NngyNDAucG5nKX0udWktc3RhdGUtaG92ZXIgLnVpLWljb24sLnVpLXN0YXRlLWZvY3VzIC51aS1pY29ue2JhY2tncm91bmQtaW1hZ2U6dXJsKGltYWdlcy91aS1pY29uc180NTQ1NDVfMjU2eDI0MC5wbmcpfS51aS1zdGF0ZS1hY3RpdmUgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3VpLWljb25zXzQ1NDU0NV8yNTZ4MjQwLnBuZyl9LnVpLXN0YXRlLWhpZ2hsaWdodCAudWktaWNvbntiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvdWktaWNvbnNfMmU4M2ZmXzI1NngyNDAucG5nKX0udWktc3RhdGUtZXJyb3IgLnVpLWljb24sLnVpLXN0YXRlLWVycm9yLXRleHQgLnVpLWljb257YmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL3VpLWljb25zX2NkMGEwYV8yNTZ4MjQwLnBuZyl9LnVpLWljb24tYmxhbmt7YmFja2dyb3VuZC1wb3NpdGlvbjoxNnB4IDE2cHh9LnVpLWljb24tY2FyYXQtMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAwfS51aS1pY29uLWNhcmF0LTEtbmV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAwfS51aS1pY29uLWNhcmF0LTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IDB9LnVpLWljb24tY2FyYXQtMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IDB9LnVpLWljb24tY2FyYXQtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggMH0udWktaWNvbi1jYXJhdC0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggMH0udWktaWNvbi1jYXJhdC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAwfS51aS1pY29uLWNhcmF0LTEtbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggMH0udWktaWNvbi1jYXJhdC0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAwfS51aS1pY29uLWNhcmF0LTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IDB9LnVpLWljb24tdHJpYW5nbGUtMS1ue2JhY2tncm91bmQtcG9zaXRpb246MCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE2cHh9LnVpLWljb24tdHJpYW5nbGUtMS1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTEtc3d7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTZweH0udWktaWNvbi10cmlhbmdsZS0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTItbi1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNnB4fS51aS1pY29uLXRyaWFuZ2xlLTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xNnB4fS51aS1pY29uLWFycm93LTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTMycHh9LnVpLWljb24tYXJyb3ctMS1uZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0zMnB4fS51aS1pY29uLWFycm93LTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMzJweH0udWktaWNvbi1hcnJvdy0xLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTMycHh9LnVpLWljb24tYXJyb3ctMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTMycHh9LnVpLWljb24tYXJyb3ctMS1ud3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLW4tc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMzJweH0udWktaWNvbi1hcnJvdy0yLW5lLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC0zMnB4fS51aS1pY29uLWFycm93LTItc2Utbnd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMzJweH0udWktaWNvbi1hcnJvd3N0b3AtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTIwOHB4IC0zMnB4fS51aS1pY29uLWFycm93c3RvcC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTMycHh9LnVpLWljb24tYXJyb3dzdG9wLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtMzJweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLW5le2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrLTEtc3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS1zd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0xLW53e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1uLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLW5lLXN3e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2stMi1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGljay0yLXNlLW53e2JhY2tncm91bmQtcG9zaXRpb246LTE3NnB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtNDhweH0udWktaWNvbi1hcnJvd3RoaWNrc3RvcC0xLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTQ4cHh9LnVpLWljb24tYXJyb3d0aGlja3N0b3AtMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC00OHB4fS51aS1pY29uLWFycm93dGhpY2tzdG9wLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0yNDBweCAtNDhweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm50aGljay0xLW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtNjRweH0udWktaWNvbi1hcnJvd3JldHVybnRoaWNrLTEtZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC02NHB4fS51aS1pY29uLWFycm93cmV0dXJudGhpY2stMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS13e2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS1ue2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS1le2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZXR1cm4tMS1ze2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTI4cHggLTY0cHh9LnVpLWljb24tYXJyb3dyZWZyZXNoLTEtbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtNjRweH0udWktaWNvbi1hcnJvd3JlZnJlc2gtMS1le2JhY2tncm91bmQtcG9zaXRpb246LTE2MHB4IC02NHB4fS51aS1pY29uLWFycm93cmVmcmVzaC0xLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTY0cHh9LnVpLWljb24tYXJyb3ctNHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTgwcHh9LnVpLWljb24tYXJyb3ctNC1kaWFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTgwcHh9LnVpLWljb24tZXh0bGlua3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC04MHB4fS51aS1pY29uLW5ld3dpbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC04MHB4fS51aS1pY29uLXJlZnJlc2h7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtODBweH0udWktaWNvbi1zaHVmZmxle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTgwcHh9LnVpLWljb24tdHJhbnNmZXItZS13e2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTgwcHh9LnVpLWljb24tdHJhbnNmZXJ0aGljay1lLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTgwcHh9LnVpLWljb24tZm9sZGVyLWNvbGxhcHNlZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTk2cHh9LnVpLWljb24tZm9sZGVyLW9wZW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtOTZweH0udWktaWNvbi1kb2N1bWVudHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC05NnB4fS51aS1pY29uLWRvY3VtZW50LWJ7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtOTZweH0udWktaWNvbi1ub3Rle2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTk2cHh9LnVpLWljb24tbWFpbC1jbG9zZWR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtOTZweH0udWktaWNvbi1tYWlsLW9wZW57YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtOTZweH0udWktaWNvbi1zdWl0Y2FzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtOTZweH0udWktaWNvbi1jb21tZW50e2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC05NnB4fS51aS1pY29uLXBlcnNvbntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtOTZweH0udWktaWNvbi1wcmludHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtOTZweH0udWktaWNvbi10cmFzaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtOTZweH0udWktaWNvbi1sb2NrZWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMTkycHggLTk2cHh9LnVpLWljb24tdW5sb2NrZWR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTk2cHh9LnVpLWljb24tYm9va21hcmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTk2cHh9LnVpLWljb24tdGFne2JhY2tncm91bmQtcG9zaXRpb246LTI0MHB4IC05NnB4fS51aS1pY29uLWhvbWV7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xMTJweH0udWktaWNvbi1mbGFne2JhY2tncm91bmQtcG9zaXRpb246LTE2cHggLTExMnB4fS51aS1pY29uLWNhbGVuZGFye2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTExMnB4fS51aS1pY29uLWNhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTEycHh9LnVpLWljb24tcGVuY2lse2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTExMnB4fS51aS1pY29uLWNsb2Nre2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTExMnB4fS51aS1pY29uLWRpc2t7YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTEycHh9LnVpLWljb24tY2FsY3VsYXRvcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMTJweCAtMTEycHh9LnVpLWljb24tem9vbWlue2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xMTJweH0udWktaWNvbi16b29tb3V0e2JhY2tncm91bmQtcG9zaXRpb246LTE0NHB4IC0xMTJweH0udWktaWNvbi1zZWFyY2h7YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTExMnB4fS51aS1pY29uLXdyZW5jaHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTEycHh9LnVpLWljb24tZ2VhcntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTEycHh9LnVpLWljb24taGVhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTExMnB4fS51aS1pY29uLXN0YXJ7YmFja2dyb3VuZC1wb3NpdGlvbjotMjI0cHggLTExMnB4fS51aS1pY29uLWxpbmt7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTExMnB4fS51aS1pY29uLWNhbmNlbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTEyOHB4fS51aS1pY29uLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTI4cHh9LnVpLWljb24tcGx1c3RoaWNre2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTEyOHB4fS51aS1pY29uLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTEyOHB4fS51aS1pY29uLW1pbnVzdGhpY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTI4cHh9LnVpLWljb24tY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTI4cHh9LnVpLWljb24tY2xvc2V0aGlja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xMjhweH0udWktaWNvbi1rZXl7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTEyOHB4fS51aS1pY29uLWxpZ2h0YnVsYntiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTI4cHh9LnVpLWljb24tc2Npc3NvcnN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTEyOHB4fS51aS1pY29uLWNsaXBib2FyZHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNjBweCAtMTI4cHh9LnVpLWljb24tY29weXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNzZweCAtMTI4cHh9LnVpLWljb24tY29udGFjdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xOTJweCAtMTI4cHh9LnVpLWljb24taW1hZ2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTEyOHB4fS51aS1pY29uLXZpZGVve2JhY2tncm91bmQtcG9zaXRpb246LTIyNHB4IC0xMjhweH0udWktaWNvbi1zY3JpcHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMjQwcHggLTEyOHB4fS51aS1pY29uLWFsZXJ0e2JhY2tncm91bmQtcG9zaXRpb246MCAtMTQ0cHh9LnVpLWljb24taW5mb3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNDRweH0udWktaWNvbi1ub3RpY2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTQ0cHh9LnVpLWljb24taGVscHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNDRweH0udWktaWNvbi1jaGVja3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi02NHB4IC0xNDRweH0udWktaWNvbi1idWxsZXR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTQ0cHh9LnVpLWljb24tcmFkaW8tb257YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTQ0cHh9LnVpLWljb24tcmFkaW8tb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xNDRweH0udWktaWNvbi1waW4td3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xMjhweCAtMTQ0cHh9LnVpLWljb24tcGluLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE0NHB4fS51aS1pY29uLXBsYXl7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0xNjBweH0udWktaWNvbi1wYXVzZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xNjBweH0udWktaWNvbi1zZWVrLW5leHR7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTYwcHh9LnVpLWljb24tc2Vlay1wcmV2e2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTE2MHB4fS51aS1pY29uLXNlZWstZW5ke2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTE2MHB4fS51aS1pY29uLXNlZWstc3RhcnR7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTYwcHh9LnVpLWljb24tc2Vlay1maXJzdHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0xNjBweH0udWktaWNvbi1zdG9we2JhY2tncm91bmQtcG9zaXRpb246LTk2cHggLTE2MHB4fS51aS1pY29uLWVqZWN0e2JhY2tncm91bmQtcG9zaXRpb246LTExMnB4IC0xNjBweH0udWktaWNvbi12b2x1bWUtb2Zme2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xNjBweH0udWktaWNvbi12b2x1bWUtb257YmFja2dyb3VuZC1wb3NpdGlvbjotMTQ0cHggLTE2MHB4fS51aS1pY29uLXBvd2Vye2JhY2tncm91bmQtcG9zaXRpb246MCAtMTc2cHh9LnVpLWljb24tc2lnbmFsLWRpYWd7YmFja2dyb3VuZC1wb3NpdGlvbjotMTZweCAtMTc2cHh9LnVpLWljb24tc2lnbmFse2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktMHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0xNzZweH0udWktaWNvbi1iYXR0ZXJ5LTF7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTc2cHh9LnVpLWljb24tYmF0dGVyeS0ye2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTE3NnB4fS51aS1pY29uLWJhdHRlcnktM3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi05NnB4IC0xNzZweH0udWktaWNvbi1jaXJjbGUtcGx1c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgLTE5MnB4fS51aS1pY29uLWNpcmNsZS1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtY2xvc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotMzJweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLWV7YmFja2dyb3VuZC1wb3NpdGlvbjotNDhweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXN7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLXd7YmFja2dyb3VuZC1wb3NpdGlvbjotODBweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLW57YmFja2dyb3VuZC1wb3NpdGlvbjotOTZweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LWV7YmFja2dyb3VuZC1wb3NpdGlvbjotMTEycHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS1hcnJvdy1ze2JhY2tncm91bmQtcG9zaXRpb246LTEyOHB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtYXJyb3ctd3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNDRweCAtMTkycHh9LnVpLWljb24tY2lyY2xlLWFycm93LW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTYwcHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS16b29taW57YmFja2dyb3VuZC1wb3NpdGlvbjotMTc2cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZS16b29tb3V0e2JhY2tncm91bmQtcG9zaXRpb246LTE5MnB4IC0xOTJweH0udWktaWNvbi1jaXJjbGUtY2hlY2t7YmFja2dyb3VuZC1wb3NpdGlvbjotMjA4cHggLTE5MnB4fS51aS1pY29uLWNpcmNsZXNtYWxsLXBsdXN7YmFja2dyb3VuZC1wb3NpdGlvbjowIC0yMDhweH0udWktaWNvbi1jaXJjbGVzbWFsbC1taW51c3tiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0yMDhweH0udWktaWNvbi1jaXJjbGVzbWFsbC1jbG9zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0zMnB4IC0yMDhweH0udWktaWNvbi1zcXVhcmVzbWFsbC1wbHVze2JhY2tncm91bmQtcG9zaXRpb246LTQ4cHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLW1pbnVze2JhY2tncm91bmQtcG9zaXRpb246LTY0cHggLTIwOHB4fS51aS1pY29uLXNxdWFyZXNtYWxsLWNsb3Nle2JhY2tncm91bmQtcG9zaXRpb246LTgwcHggLTIwOHB4fS51aS1pY29uLWdyaXAtZG90dGVkLXZlcnRpY2Fse2JhY2tncm91bmQtcG9zaXRpb246MCAtMjI0cHh9LnVpLWljb24tZ3JpcC1kb3R0ZWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi0xNnB4IC0yMjRweH0udWktaWNvbi1ncmlwLXNvbGlkLXZlcnRpY2Fse2JhY2tncm91bmQtcG9zaXRpb246LTMycHggLTIyNHB4fS51aS1pY29uLWdyaXAtc29saWQtaG9yaXpvbnRhbHtiYWNrZ3JvdW5kLXBvc2l0aW9uOi00OHB4IC0yMjRweH0udWktaWNvbi1ncmlwc21hbGwtZGlhZ29uYWwtc2V7YmFja2dyb3VuZC1wb3NpdGlvbjotNjRweCAtMjI0cHh9LnVpLWljb24tZ3JpcC1kaWFnb25hbC1zZXtiYWNrZ3JvdW5kLXBvc2l0aW9uOi04MHB4IC0yMjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLXRvcCwudWktY29ybmVyLWxlZnQsLnVpLWNvcm5lci10bHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjRweH0udWktY29ybmVyLWFsbCwudWktY29ybmVyLXRvcCwudWktY29ybmVyLXJpZ2h0LC51aS1jb3JuZXItdHJ7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItYm90dG9tLC51aS1jb3JuZXItbGVmdCwudWktY29ybmVyLWJse2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6NHB4fS51aS1jb3JuZXItYWxsLC51aS1jb3JuZXItYm90dG9tLC51aS1jb3JuZXItcmlnaHQsLnVpLWNvcm5lci1icntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czo0cHh9LnVpLXdpZGdldC1vdmVybGF5e2JhY2tncm91bmQ6I2FhYSB1cmwoaW1hZ2VzL3VpLWJnX2ZsYXRfMF9hYWFhYWFfNDB4MTAwLnBuZykgNTAlIDUwJSByZXBlYXQteDtvcGFjaXR5Oi4zO2ZpbHRlcjpBbHBoYShPcGFjaXR5PTMwKX0udWktd2lkZ2V0LXNoYWRvd3ttYXJnaW46LThweCAwIDAgLThweDtwYWRkaW5nOjhweDtiYWNrZ3JvdW5kOiNhYWEgdXJsKGltYWdlcy91aS1iZ19mbGF0XzBfYWFhYWFhXzQweDEwMC5wbmcpIDUwJSA1MCUgcmVwZWF0LXg7b3BhY2l0eTouMztmaWx0ZXI6QWxwaGEoT3BhY2l0eT0zMCk7Ym9yZGVyLXJhZGl1czo4cHh9]]></data>
	</file>
	<file>
	  <filename>/resources/public/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/resources/public/js/admin_template_edit.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChmdW5jdGlvbigpIHsKICAgIHZhciB0YWJUaXRsZSA9ICQoICIjdGFiX3RpdGxlIiApLAoKICAgICAgICB0YWJUZW1wbGF0ZSA9ICI8bGk+PGEgaHJlZj0nI3tocmVmfSc+I3tsYWJlbH08L2E+IDxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2xvc2UnIHJvbGU9J3ByZXNlbnRhdGlvbic+UmVtb3ZlIFRhYjwvc3Bhbj48L2xpPiIsCiAgICAgICAgdGFiQ291bnRlciA9IDI7CgogICAgdmFyIHRhYnMgPSAkKCAiI3RhYnMiICkudGFicygpOwoKICAgIC8vIG1vZGFsIGRpYWxvZyBpbml0OiBjdXN0b20gYnV0dG9ucyBhbmQgYSAiY2xvc2UiIGNhbGxiYWNrIHJlc2V0aW5nIHRoZSBmb3JtIGluc2lkZQogICAgdmFyIGRpYWxvZyA9ICQoICIjZGlhbG9nIiApLmRpYWxvZyh7CiAgICAgICAgYXV0b09wZW46IGZhbHNlLAogICAgICAgIG1vZGFsOiB0cnVlLAogICAgICAgIGJ1dHRvbnM6IHsKICAgICAgICAgICAgQWRkOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIGFkZFRhYigpOwogICAgICAgICAgICAgICAgJCggdGhpcyApLmRpYWxvZyggImNsb3NlIiApOwogICAgICAgICAgICB9LAogICAgICAgICAgICBDYW5jZWw6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgJCggdGhpcyApLmRpYWxvZyggImNsb3NlIiApOwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjbG9zZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvcm1bIDAgXS5yZXNldCgpOwogICAgICAgIH0KICAgIH0pOwoKICAgIC8vIGFkZFRhYiBmb3JtOiBjYWxscyBhZGRUYWIgZnVuY3Rpb24gb24gc3VibWl0IGFuZCBjbG9zZXMgdGhlIGRpYWxvZwogICAgdmFyIGZvcm0gPSBkaWFsb2cuZmluZCggImZvcm0iICkuc3VibWl0KGZ1bmN0aW9uKCBldmVudCApIHsKICAgICAgICBhZGRUYWIoKTsKICAgICAgICBkaWFsb2cuZGlhbG9nKCAiY2xvc2UiICk7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIH0pOwoKICAgIC8vIGFjdHVhbCBhZGRUYWIgZnVuY3Rpb246IGFkZHMgbmV3IHRhYiB1c2luZyB0aGUgaW5wdXQgZnJvbSB0aGUgZm9ybSBhYm92ZQogICAgZnVuY3Rpb24gYWRkVGFiKCkgewogICAgICAgIHZhciBsYWJlbCA9IHRhYlRpdGxlLnZhbCgpIHx8ICJUYWIgIiArIHRhYkNvdW50ZXIsCiAgICAgICAgICAgIGlkID0gInRhYnMtIiArIHRhYkNvdW50ZXIsCiAgICAgICAgICAgIGxpID0gJCggdGFiVGVtcGxhdGUucmVwbGFjZSggLyNce2hyZWZcfS9nLCAiIyIgKyBpZCApLnJlcGxhY2UoIC8jXHtsYWJlbFx9L2csIGxhYmVsICkgKSwKICAgICAgICAgICAgdGFiQ29udGVudEh0bWwgPSAiIjsKCiAgICAgICAgdGFicy5maW5kKCAiLnVpLXRhYnMtbmF2IiApLmFwcGVuZCggbGkgKTsKICAgICAgICB0YWJzLmFwcGVuZCggIjxkaXYgaWQ9JyIgKyBpZCArICInPiIgKyB0YWJDb250ZW50SHRtbCArICItLS0tLTwvZGl2PiIgKTsKICAgICAgICB0YWJzLnRhYnMoICJyZWZyZXNoIiApOwogICAgICAgIHRhYkNvdW50ZXIrKzsKICAgIH0KCiAgICAvLyBhZGRUYWIgYnV0dG9uOiBqdXN0IG9wZW5zIHRoZSBkaWFsb2cKICAgICQoICIjYWRkX3RhYiIgKQogICAgICAgIC5idXR0b24oKQogICAgICAgIC5jbGljayhmdW5jdGlvbigpIHsKICAgICAgICAgICAgZGlhbG9nLmRpYWxvZyggIm9wZW4iICk7CiAgICAgICAgfSk7CgogICAgLy8gY2xvc2UgaWNvbjogcmVtb3ZpbmcgdGhlIHRhYiBvbiBjbGljawogICAgdGFicy5kZWxlZ2F0ZSggInNwYW4udWktaWNvbi1jbG9zZSIsICJjbGljayIsIGZ1bmN0aW9uKCkgewogICAgICAgIGNvbnNvbGUubG9nKCQoIHRoaXMgKS5jbG9zZXN0KCAibGkiICkpOwogICAgICAgIHZhciBwYW5lbElkID0gJCggdGhpcyApLmNsb3Nlc3QoICJsaSIgKS5yZW1vdmUoKS5hdHRyKCAiYXJpYS1jb250cm9scyIgKTsKICAgICAgICBjb25zb2xlLmxvZyhwYW5lbElkKTsKICAgICAgICAkKCAiIyIgKyBwYW5lbElkICkucmVtb3ZlKCk7CiAgICAgICAgdGFicy50YWJzKCAicmVmcmVzaCIgKTsKICAgIH0pOwoKICAgIHRhYnMuYmluZCggImtleXVwIiwgZnVuY3Rpb24oIGV2ZW50ICkgewogICAgICAgIGlmICggZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5CQUNLU1BBQ0UgKSB7CiAgICAgICAgICAgIHZhciBwYW5lbElkID0gdGFicy5maW5kKCAiLnVpLXRhYnMtYWN0aXZlIiApLnJlbW92ZSgpLmF0dHIoICJhcmlhLWNvbnRyb2xzIiApOwogICAgICAgICAgICAkKCAiIyIgKyBwYW5lbElkICkucmVtb3ZlKCk7CiAgICAgICAgICAgIHRhYnMudGFicyggInJlZnJlc2giICk7CiAgICAgICAgfQogICAgfSk7Cn0pOw==]]></data>
	</file>
	<file>
	  <filename>/resources/public/js/jquery-1.10.2.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSB2MS4xMC4yIHwgKGMpIDIwMDUsIDIwMTMgalF1ZXJ5IEZvdW5kYXRpb24sIEluYy4gfCBqcXVlcnkub3JnL2xpY2Vuc2UKLy9AIHNvdXJjZU1hcHBpbmdVUkw9anF1ZXJ5LTEuMTAuMi5taW4ubWFwCiovCihmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT10eXBlb2YgdCxvPWUubG9jYXRpb24sYT1lLmRvY3VtZW50LHM9YS5kb2N1bWVudEVsZW1lbnQsbD1lLmpRdWVyeSx1PWUuJCxjPXt9LHA9W10sZj0iMS4xMC4yIixkPXAuY29uY2F0LGg9cC5wdXNoLGc9cC5zbGljZSxtPXAuaW5kZXhPZix5PWMudG9TdHJpbmcsdj1jLmhhc093blByb3BlcnR5LGI9Zi50cmltLHg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IHguZm4uaW5pdChlLHQscil9LHc9L1srLV0/KD86XGQqXC58KVxkKyg/OltlRV1bKy1dP1xkK3wpLy5zb3VyY2UsVD0vXFMrL2csQz0vXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csTj0vXig/OlxzKig8W1x3XFddKz4pW14+XSp8IyhbXHctXSopKSQvLGs9L148KFx3KylccypcLz8+KD86PFwvXDE+fCkkLyxFPS9eW1xdLDp7fVxzXSokLyxTPS8oPzpefDp8LCkoPzpccypcWykrL2csQT0vXFwoPzpbIlxcXC9iZm5ydF18dVtcZGEtZkEtRl17NH0pL2csaj0vIlteIlxcXHJcbl0qInx0cnVlfGZhbHNlfG51bGx8LT8oPzpcZCtcLnwpXGQrKD86W2VFXVsrLV0/XGQrfCkvZyxEPS9eLW1zLS8sTD0vLShbXGRhLXpdKS9naSxIPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQudG9VcHBlckNhc2UoKX0scT1mdW5jdGlvbihlKXsoYS5hZGRFdmVudExpc3RlbmVyfHwibG9hZCI9PT1lLnR5cGV8fCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpJiYoXygpLHgucmVhZHkoKSl9LF89ZnVuY3Rpb24oKXthLmFkZEV2ZW50TGlzdGVuZXI/KGEucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIscSwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixxLCExKSk6KGEuZGV0YWNoRXZlbnQoIm9ucmVhZHlzdGF0ZWNoYW5nZSIscSksZS5kZXRhY2hFdmVudCgib25sb2FkIixxKSl9O3guZm49eC5wcm90b3R5cGU9e2pxdWVyeTpmLGNvbnN0cnVjdG9yOngsaW5pdDpmdW5jdGlvbihlLG4scil7dmFyIGksbztpZighZSlyZXR1cm4gdGhpcztpZigic3RyaW5nIj09dHlwZW9mIGUpe2lmKGk9IjwiPT09ZS5jaGFyQXQoMCkmJiI+Ij09PWUuY2hhckF0KGUubGVuZ3RoLTEpJiZlLmxlbmd0aD49Mz9bbnVsbCxlLG51bGxdOk4uZXhlYyhlKSwhaXx8IWlbMV0mJm4pcmV0dXJuIW58fG4uanF1ZXJ5PyhufHxyKS5maW5kKGUpOnRoaXMuY29uc3RydWN0b3IobikuZmluZChlKTtpZihpWzFdKXtpZihuPW4gaW5zdGFuY2VvZiB4P25bMF06bix4Lm1lcmdlKHRoaXMseC5wYXJzZUhUTUwoaVsxXSxuJiZuLm5vZGVUeXBlP24ub3duZXJEb2N1bWVudHx8bjphLCEwKSksay50ZXN0KGlbMV0pJiZ4LmlzUGxhaW5PYmplY3QobikpZm9yKGkgaW4gbil4LmlzRnVuY3Rpb24odGhpc1tpXSk/dGhpc1tpXShuW2ldKTp0aGlzLmF0dHIoaSxuW2ldKTtyZXR1cm4gdGhpc31pZihvPWEuZ2V0RWxlbWVudEJ5SWQoaVsyXSksbyYmby5wYXJlbnROb2RlKXtpZihvLmlkIT09aVsyXSlyZXR1cm4gci5maW5kKGUpO3RoaXMubGVuZ3RoPTEsdGhpc1swXT1vfXJldHVybiB0aGlzLmNvbnRleHQ9YSx0aGlzLnNlbGVjdG9yPWUsdGhpc31yZXR1cm4gZS5ub2RlVHlwZT8odGhpcy5jb250ZXh0PXRoaXNbMF09ZSx0aGlzLmxlbmd0aD0xLHRoaXMpOnguaXNGdW5jdGlvbihlKT9yLnJlYWR5KGUpOihlLnNlbGVjdG9yIT09dCYmKHRoaXMuc2VsZWN0b3I9ZS5zZWxlY3Rvcix0aGlzLmNvbnRleHQ9ZS5jb250ZXh0KSx4Lm1ha2VBcnJheShlLHRoaXMpKX0sc2VsZWN0b3I6IiIsbGVuZ3RoOjAsdG9BcnJheTpmdW5jdGlvbigpe3JldHVybiBnLmNhbGwodGhpcyl9LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT90aGlzLnRvQXJyYXkoKTowPmU/dGhpc1t0aGlzLmxlbmd0aCtlXTp0aGlzW2VdfSxwdXNoU3RhY2s6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5tZXJnZSh0aGlzLmNvbnN0cnVjdG9yKCksZSk7cmV0dXJuIHQucHJldk9iamVjdD10aGlzLHQuY29udGV4dD10aGlzLmNvbnRleHQsdH0sZWFjaDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmVhY2godGhpcyxlLHQpfSxyZWFkeTpmdW5jdGlvbihlKXtyZXR1cm4geC5yZWFkeS5wcm9taXNlKCkuZG9uZShlKSx0aGlzfSxzbGljZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnB1c2hTdGFjayhnLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LGZpcnN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZXEoMCl9LGxhc3Q6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lcSgtMSl9LGVxOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGVuZ3RoLG49K2UrKDA+ZT90OjApO3JldHVybiB0aGlzLnB1c2hTdGFjayhuPj0wJiZ0Pm4/W3RoaXNbbl1dOltdKX0sbWFwOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnB1c2hTdGFjayh4Lm1hcCh0aGlzLGZ1bmN0aW9uKHQsbil7cmV0dXJuIGUuY2FsbCh0LG4sdCl9KSl9LGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnByZXZPYmplY3R8fHRoaXMuY29uc3RydWN0b3IobnVsbCl9LHB1c2g6aCxzb3J0OltdLnNvcnQsc3BsaWNlOltdLnNwbGljZX0seC5mbi5pbml0LnByb3RvdHlwZT14LmZuLHguZXh0ZW5kPXguZm4uZXh0ZW5kPWZ1bmN0aW9uKCl7dmFyIGUsbixyLGksbyxhLHM9YXJndW1lbnRzWzBdfHx7fSxsPTEsdT1hcmd1bWVudHMubGVuZ3RoLGM9ITE7Zm9yKCJib29sZWFuIj09dHlwZW9mIHMmJihjPXMscz1hcmd1bWVudHNbMV18fHt9LGw9MiksIm9iamVjdCI9PXR5cGVvZiBzfHx4LmlzRnVuY3Rpb24ocyl8fChzPXt9KSx1PT09bCYmKHM9dGhpcywtLWwpO3U+bDtsKyspaWYobnVsbCE9KG89YXJndW1lbnRzW2xdKSlmb3IoaSBpbiBvKWU9c1tpXSxyPW9baV0scyE9PXImJihjJiZyJiYoeC5pc1BsYWluT2JqZWN0KHIpfHwobj14LmlzQXJyYXkocikpKT8obj8obj0hMSxhPWUmJnguaXNBcnJheShlKT9lOltdKTphPWUmJnguaXNQbGFpbk9iamVjdChlKT9lOnt9LHNbaV09eC5leHRlbmQoYyxhLHIpKTpyIT09dCYmKHNbaV09cikpO3JldHVybiBzfSx4LmV4dGVuZCh7ZXhwYW5kbzoialF1ZXJ5IisoZitNYXRoLnJhbmRvbSgpKS5yZXBsYWNlKC9cRC9nLCIiKSxub0NvbmZsaWN0OmZ1bmN0aW9uKHQpe3JldHVybiBlLiQ9PT14JiYoZS4kPXUpLHQmJmUualF1ZXJ5PT09eCYmKGUualF1ZXJ5PWwpLHh9LGlzUmVhZHk6ITEscmVhZHlXYWl0OjEsaG9sZFJlYWR5OmZ1bmN0aW9uKGUpe2U/eC5yZWFkeVdhaXQrKzp4LnJlYWR5KCEwKX0scmVhZHk6ZnVuY3Rpb24oZSl7aWYoZT09PSEwPyEtLXgucmVhZHlXYWl0OiF4LmlzUmVhZHkpe2lmKCFhLmJvZHkpcmV0dXJuIHNldFRpbWVvdXQoeC5yZWFkeSk7eC5pc1JlYWR5PSEwLGUhPT0hMCYmLS14LnJlYWR5V2FpdD4wfHwobi5yZXNvbHZlV2l0aChhLFt4XSkseC5mbi50cmlnZ2VyJiZ4KGEpLnRyaWdnZXIoInJlYWR5Iikub2ZmKCJyZWFkeSIpKX19LGlzRnVuY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09PXgudHlwZShlKX0saXNBcnJheTpBcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iYXJyYXkiPT09eC50eXBlKGUpfSxpc1dpbmRvdzpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbCE9ZSYmZT09ZS53aW5kb3d9LGlzTnVtZXJpYzpmdW5jdGlvbihlKXtyZXR1cm4haXNOYU4ocGFyc2VGbG9hdChlKSkmJmlzRmluaXRlKGUpfSx0eXBlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lP2UrIiI6Im9iamVjdCI9PXR5cGVvZiBlfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9jW3kuY2FsbChlKV18fCJvYmplY3QiOnR5cGVvZiBlfSxpc1BsYWluT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciBuO2lmKCFlfHwib2JqZWN0IiE9PXgudHlwZShlKXx8ZS5ub2RlVHlwZXx8eC5pc1dpbmRvdyhlKSlyZXR1cm4hMTt0cnl7aWYoZS5jb25zdHJ1Y3RvciYmIXYuY2FsbChlLCJjb25zdHJ1Y3RvciIpJiYhdi5jYWxsKGUuY29uc3RydWN0b3IucHJvdG90eXBlLCJpc1Byb3RvdHlwZU9mIikpcmV0dXJuITF9Y2F0Y2gocil7cmV0dXJuITF9aWYoeC5zdXBwb3J0Lm93bkxhc3QpZm9yKG4gaW4gZSlyZXR1cm4gdi5jYWxsKGUsbik7Zm9yKG4gaW4gZSk7cmV0dXJuIG49PT10fHx2LmNhbGwoZSxuKX0saXNFbXB0eU9iamVjdDpmdW5jdGlvbihlKXt2YXIgdDtmb3IodCBpbiBlKXJldHVybiExO3JldHVybiEwfSxlcnJvcjpmdW5jdGlvbihlKXt0aHJvdyBFcnJvcihlKX0scGFyc2VIVE1MOmZ1bmN0aW9uKGUsdCxuKXtpZighZXx8InN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBudWxsOyJib29sZWFuIj09dHlwZW9mIHQmJihuPXQsdD0hMSksdD10fHxhO3ZhciByPWsuZXhlYyhlKSxpPSFuJiZbXTtyZXR1cm4gcj9bdC5jcmVhdGVFbGVtZW50KHJbMV0pXToocj14LmJ1aWxkRnJhZ21lbnQoW2VdLHQsaSksaSYmeChpKS5yZW1vdmUoKSx4Lm1lcmdlKFtdLHIuY2hpbGROb2RlcykpfSxwYXJzZUpTT046ZnVuY3Rpb24obil7cmV0dXJuIGUuSlNPTiYmZS5KU09OLnBhcnNlP2UuSlNPTi5wYXJzZShuKTpudWxsPT09bj9uOiJzdHJpbmciPT10eXBlb2YgbiYmKG49eC50cmltKG4pLG4mJkUudGVzdChuLnJlcGxhY2UoQSwiQCIpLnJlcGxhY2UoaiwiXSIpLnJlcGxhY2UoUywiIikpKT9GdW5jdGlvbigicmV0dXJuICIrbikoKTooeC5lcnJvcigiSW52YWxpZCBKU09OOiAiK24pLHQpfSxwYXJzZVhNTDpmdW5jdGlvbihuKXt2YXIgcixpO2lmKCFufHwic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIG51bGw7dHJ5e2UuRE9NUGFyc2VyPyhpPW5ldyBET01QYXJzZXIscj1pLnBhcnNlRnJvbVN0cmluZyhuLCJ0ZXh0L3htbCIpKToocj1uZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTERPTSIpLHIuYXN5bmM9ImZhbHNlIixyLmxvYWRYTUwobikpfWNhdGNoKG8pe3I9dH1yZXR1cm4gciYmci5kb2N1bWVudEVsZW1lbnQmJiFyLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwYXJzZXJlcnJvciIpLmxlbmd0aHx8eC5lcnJvcigiSW52YWxpZCBYTUw6ICIrbikscn0sbm9vcDpmdW5jdGlvbigpe30sZ2xvYmFsRXZhbDpmdW5jdGlvbih0KXt0JiZ4LnRyaW0odCkmJihlLmV4ZWNTY3JpcHR8fGZ1bmN0aW9uKHQpe2UuZXZhbC5jYWxsKGUsdCl9KSh0KX0sY2FtZWxDYXNlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoRCwibXMtIikucmVwbGFjZShMLEgpfSxub2RlTmFtZTpmdW5jdGlvbihlLHQpe3JldHVybiBlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT10LnRvTG93ZXJDYXNlKCl9LGVhY2g6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKTtpZihuKXtpZihhKXtmb3IoO28+aTtpKyspaWYocj10LmFwcGx5KGVbaV0sbikscj09PSExKWJyZWFrfWVsc2UgZm9yKGkgaW4gZSlpZihyPXQuYXBwbHkoZVtpXSxuKSxyPT09ITEpYnJlYWt9ZWxzZSBpZihhKXtmb3IoO28+aTtpKyspaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVha31lbHNlIGZvcihpIGluIGUpaWYocj10LmNhbGwoZVtpXSxpLGVbaV0pLHI9PT0hMSlicmVhaztyZXR1cm4gZX0sdHJpbTpiJiYhYi5jYWxsKCJcdWZlZmZcdTAwYTAiKT9mdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZT8iIjpiLmNhbGwoZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOihlKyIiKS5yZXBsYWNlKEMsIiIpfSxtYWtlQXJyYXk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10fHxbXTtyZXR1cm4gbnVsbCE9ZSYmKE0oT2JqZWN0KGUpKT94Lm1lcmdlKG4sInN0cmluZyI9PXR5cGVvZiBlP1tlXTplKTpoLmNhbGwobixlKSksbn0saW5BcnJheTpmdW5jdGlvbihlLHQsbil7dmFyIHI7aWYodCl7aWYobSlyZXR1cm4gbS5jYWxsKHQsZSxuKTtmb3Iocj10Lmxlbmd0aCxuPW4/MD5uP01hdGgubWF4KDAscituKTpuOjA7cj5uO24rKylpZihuIGluIHQmJnRbbl09PT1lKXJldHVybiBufXJldHVybi0xfSxtZXJnZTpmdW5jdGlvbihlLG4pe3ZhciByPW4ubGVuZ3RoLGk9ZS5sZW5ndGgsbz0wO2lmKCJudW1iZXIiPT10eXBlb2Ygcilmb3IoO3I+bztvKyspZVtpKytdPW5bb107ZWxzZSB3aGlsZShuW29dIT09dCllW2krK109bltvKytdO3JldHVybiBlLmxlbmd0aD1pLGV9LGdyZXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9W10sbz0wLGE9ZS5sZW5ndGg7Zm9yKG49ISFuO2E+bztvKyspcj0hIXQoZVtvXSxvKSxuIT09ciYmaS5wdXNoKGVbb10pO3JldHVybiBpfSxtYXA6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGk9MCxvPWUubGVuZ3RoLGE9TShlKSxzPVtdO2lmKGEpZm9yKDtvPmk7aSsrKXI9dChlW2ldLGksbiksbnVsbCE9ciYmKHNbcy5sZW5ndGhdPXIpO2Vsc2UgZm9yKGkgaW4gZSlyPXQoZVtpXSxpLG4pLG51bGwhPXImJihzW3MubGVuZ3RoXT1yKTtyZXR1cm4gZC5hcHBseShbXSxzKX0sZ3VpZDoxLHByb3h5OmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvO3JldHVybiJzdHJpbmciPT10eXBlb2YgbiYmKG89ZVtuXSxuPWUsZT1vKSx4LmlzRnVuY3Rpb24oZSk/KHI9Zy5jYWxsKGFyZ3VtZW50cywyKSxpPWZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkobnx8dGhpcyxyLmNvbmNhdChnLmNhbGwoYXJndW1lbnRzKSkpfSxpLmd1aWQ9ZS5ndWlkPWUuZ3VpZHx8eC5ndWlkKyssaSk6dH0sYWNjZXNzOmZ1bmN0aW9uKGUsbixyLGksbyxhLHMpe3ZhciBsPTAsdT1lLmxlbmd0aCxjPW51bGw9PXI7aWYoIm9iamVjdCI9PT14LnR5cGUocikpe289ITA7Zm9yKGwgaW4gcil4LmFjY2VzcyhlLG4sbCxyW2xdLCEwLGEscyl9ZWxzZSBpZihpIT09dCYmKG89ITAseC5pc0Z1bmN0aW9uKGkpfHwocz0hMCksYyYmKHM/KG4uY2FsbChlLGkpLG49bnVsbCk6KGM9bixuPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gYy5jYWxsKHgoZSksbil9KSksbikpZm9yKDt1Pmw7bCsrKW4oZVtsXSxyLHM/aTppLmNhbGwoZVtsXSxsLG4oZVtsXSxyKSkpO3JldHVybiBvP2U6Yz9uLmNhbGwoZSk6dT9uKGVbMF0scik6YX0sbm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9LHN3YXA6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhPXt9O2ZvcihvIGluIHQpYVtvXT1lLnN0eWxlW29dLGUuc3R5bGVbb109dFtvXTtpPW4uYXBwbHkoZSxyfHxbXSk7Zm9yKG8gaW4gdCllLnN0eWxlW29dPWFbb107cmV0dXJuIGl9fSkseC5yZWFkeS5wcm9taXNlPWZ1bmN0aW9uKHQpe2lmKCFuKWlmKG49eC5EZWZlcnJlZCgpLCJjb21wbGV0ZSI9PT1hLnJlYWR5U3RhdGUpc2V0VGltZW91dCh4LnJlYWR5KTtlbHNlIGlmKGEuYWRkRXZlbnRMaXN0ZW5lcilhLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLHEsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIscSwhMSk7ZWxzZXthLmF0dGFjaEV2ZW50KCJvbnJlYWR5c3RhdGVjaGFuZ2UiLHEpLGUuYXR0YWNoRXZlbnQoIm9ubG9hZCIscSk7dmFyIHI9ITE7dHJ5e3I9bnVsbD09ZS5mcmFtZUVsZW1lbnQmJmEuZG9jdW1lbnRFbGVtZW50fWNhdGNoKGkpe31yJiZyLmRvU2Nyb2xsJiZmdW5jdGlvbiBvKCl7aWYoIXguaXNSZWFkeSl7dHJ5e3IuZG9TY3JvbGwoImxlZnQiKX1jYXRjaChlKXtyZXR1cm4gc2V0VGltZW91dChvLDUwKX1fKCkseC5yZWFkeSgpfX0oKX1yZXR1cm4gbi5wcm9taXNlKHQpfSx4LmVhY2goIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXtjWyJbb2JqZWN0ICIrdCsiXSJdPXQudG9Mb3dlckNhc2UoKX0pO2Z1bmN0aW9uIE0oZSl7dmFyIHQ9ZS5sZW5ndGgsbj14LnR5cGUoZSk7cmV0dXJuIHguaXNXaW5kb3coZSk/ITE6MT09PWUubm9kZVR5cGUmJnQ/ITA6ImFycmF5Ij09PW58fCJmdW5jdGlvbiIhPT1uJiYoMD09PXR8fCJudW1iZXIiPT10eXBlb2YgdCYmdD4wJiZ0LTEgaW4gZSl9cj14KGEpLGZ1bmN0aW9uKGUsdCl7dmFyIG4scixpLG8sYSxzLGwsdSxjLHAsZixkLGgsZyxtLHksdixiPSJzaXp6bGUiKy1uZXcgRGF0ZSx3PWUuZG9jdW1lbnQsVD0wLEM9MCxOPXN0KCksaz1zdCgpLEU9c3QoKSxTPSExLEE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/KFM9ITAsMCk6MH0saj10eXBlb2YgdCxEPTE8PDMxLEw9e30uaGFzT3duUHJvcGVydHksSD1bXSxxPUgucG9wLF89SC5wdXNoLE09SC5wdXNoLE89SC5zbGljZSxGPUguaW5kZXhPZnx8ZnVuY3Rpb24oZSl7dmFyIHQ9MCxuPXRoaXMubGVuZ3RoO2Zvcig7bj50O3QrKylpZih0aGlzW3RdPT09ZSlyZXR1cm4gdDtyZXR1cm4tMX0sQj0iY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufGlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWQiLFA9IltcXHgyMFxcdFxcclxcblxcZl0iLFI9Iig/OlxcXFwufFtcXHctXXxbXlxceDAwLVxceGEwXSkrIixXPVIucmVwbGFjZSgidyIsIncjIiksJD0iXFxbIitQKyIqKCIrUisiKSIrUCsiKig/OihbKl4kfCF+XT89KSIrUCsiKig/OihbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCIrVysiKXwpfCkiK1ArIipcXF0iLEk9IjooIitSKyIpKD86XFwoKChbJ1wiXSkoKD86XFxcXC58W15cXFxcXSkqPylcXDN8KCg/OlxcXFwufFteXFxcXCgpW1xcXV18IiskLnJlcGxhY2UoMyw4KSsiKSopfC4qKVxcKXwpIix6PVJlZ0V4cCgiXiIrUCsiK3woKD86XnxbXlxcXFxdKSg/OlxcXFwuKSopIitQKyIrJCIsImciKSxYPVJlZ0V4cCgiXiIrUCsiKiwiK1ArIioiKSxVPVJlZ0V4cCgiXiIrUCsiKihbPit+XXwiK1ArIikiK1ArIioiKSxWPVJlZ0V4cChQKyIqWyt+XSIpLFk9UmVnRXhwKCI9IitQKyIqKFteXFxdJ1wiXSopIitQKyIqXFxdIiwiZyIpLEo9UmVnRXhwKEkpLEc9UmVnRXhwKCJeIitXKyIkIiksUT17SUQ6UmVnRXhwKCJeIygiK1IrIikiKSxDTEFTUzpSZWdFeHAoIl5cXC4oIitSKyIpIiksVEFHOlJlZ0V4cCgiXigiK1IucmVwbGFjZSgidyIsIncqIikrIikiKSxBVFRSOlJlZ0V4cCgiXiIrJCksUFNFVURPOlJlZ0V4cCgiXiIrSSksQ0hJTEQ6UmVnRXhwKCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXCgiK1ArIiooZXZlbnxvZGR8KChbKy1dfCkoXFxkKilufCkiK1ArIiooPzooWystXXwpIitQKyIqKFxcZCspfCkpIitQKyIqXFwpfCkiLCJpIiksYm9vbDpSZWdFeHAoIl4oPzoiK0IrIikkIiwiaSIpLG5lZWRzQ29udGV4dDpSZWdFeHAoIl4iK1ArIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcKCIrUCsiKigoPzotXFxkKT9cXGQqKSIrUCsiKlxcKXwpKD89W14tXXwkKSIsImkiKX0sSz0vXltee10rXHtccypcW25hdGl2ZSBcdy8sWj0vXig/OiMoW1x3LV0rKXwoXHcrKXxcLihbXHctXSspKSQvLGV0PS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksdHQ9L15oXGQkL2ksbnQ9Lyd8XFwvZyxydD1SZWdFeHAoIlxcXFwoW1xcZGEtZl17MSw2fSIrUCsiP3woIitQKyIpfC4pIiwiaWciKSxpdD1mdW5jdGlvbihlLHQsbil7dmFyIHI9IjB4Iit0LTY1NTM2O3JldHVybiByIT09cnx8bj90OjA+cj9TdHJpbmcuZnJvbUNoYXJDb2RlKHIrNjU1MzYpOlN0cmluZy5mcm9tQ2hhckNvZGUoNTUyOTZ8cj4+MTAsNTYzMjB8MTAyMyZyKX07dHJ5e00uYXBwbHkoSD1PLmNhbGwody5jaGlsZE5vZGVzKSx3LmNoaWxkTm9kZXMpLEhbdy5jaGlsZE5vZGVzLmxlbmd0aF0ubm9kZVR5cGV9Y2F0Y2gob3Qpe009e2FwcGx5OkgubGVuZ3RoP2Z1bmN0aW9uKGUsdCl7Xy5hcHBseShlLE8uY2FsbCh0KSl9OmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS5sZW5ndGgscj0wO3doaWxlKGVbbisrXT10W3IrK10pO2UubGVuZ3RoPW4tMX19fWZ1bmN0aW9uIGF0KGUsdCxuLGkpe3ZhciBvLGEscyxsLHUsYyxkLG0seSx4O2lmKCh0P3Qub3duZXJEb2N1bWVudHx8dDp3KSE9PWYmJnAodCksdD10fHxmLG49bnx8W10sIWV8fCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4gbjtpZigxIT09KGw9dC5ub2RlVHlwZSkmJjkhPT1sKXJldHVybltdO2lmKGgmJiFpKXtpZihvPVouZXhlYyhlKSlpZihzPW9bMV0pe2lmKDk9PT1sKXtpZihhPXQuZ2V0RWxlbWVudEJ5SWQocyksIWF8fCFhLnBhcmVudE5vZGUpcmV0dXJuIG47aWYoYS5pZD09PXMpcmV0dXJuIG4ucHVzaChhKSxufWVsc2UgaWYodC5vd25lckRvY3VtZW50JiYoYT10Lm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocykpJiZ2KHQsYSkmJmEuaWQ9PT1zKXJldHVybiBuLnB1c2goYSksbn1lbHNle2lmKG9bMl0pcmV0dXJuIE0uYXBwbHkobix0LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpKSxuO2lmKChzPW9bM10pJiZyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSlyZXR1cm4gTS5hcHBseShuLHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShzKSksbn1pZihyLnFzYSYmKCFnfHwhZy50ZXN0KGUpKSl7aWYobT1kPWIseT10LHg9OT09PWwmJmUsMT09PWwmJiJvYmplY3QiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXtjPW10KGUpLChkPXQuZ2V0QXR0cmlidXRlKCJpZCIpKT9tPWQucmVwbGFjZShudCwiXFwkJiIpOnQuc2V0QXR0cmlidXRlKCJpZCIsbSksbT0iW2lkPSciK20rIiddICIsdT1jLmxlbmd0aDt3aGlsZSh1LS0pY1t1XT1tK3l0KGNbdV0pO3k9Vi50ZXN0KGUpJiZ0LnBhcmVudE5vZGV8fHQseD1jLmpvaW4oIiwiKX1pZih4KXRyeXtyZXR1cm4gTS5hcHBseShuLHkucXVlcnlTZWxlY3RvckFsbCh4KSksbn1jYXRjaChUKXt9ZmluYWxseXtkfHx0LnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX19fXJldHVybiBrdChlLnJlcGxhY2UoeiwiJDEiKSx0LG4saSl9ZnVuY3Rpb24gc3QoKXt2YXIgZT1bXTtmdW5jdGlvbiB0KG4scil7cmV0dXJuIGUucHVzaChuKz0iICIpPm8uY2FjaGVMZW5ndGgmJmRlbGV0ZSB0W2Uuc2hpZnQoKV0sdFtuXT1yfXJldHVybiB0fWZ1bmN0aW9uIGx0KGUpe3JldHVybiBlW2JdPSEwLGV9ZnVuY3Rpb24gdXQoZSl7dmFyIHQ9Zi5jcmVhdGVFbGVtZW50KCJkaXYiKTt0cnl7cmV0dXJuISFlKHQpfWNhdGNoKG4pe3JldHVybiExfWZpbmFsbHl7dC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCksdD1udWxsfX1mdW5jdGlvbiBjdChlLHQpe3ZhciBuPWUuc3BsaXQoInwiKSxyPWUubGVuZ3RoO3doaWxlKHItLSlvLmF0dHJIYW5kbGVbbltyXV09dH1mdW5jdGlvbiBwdChlLHQpe3ZhciBuPXQmJmUscj1uJiYxPT09ZS5ub2RlVHlwZSYmMT09PXQubm9kZVR5cGUmJih+dC5zb3VyY2VJbmRleHx8RCktKH5lLnNvdXJjZUluZGV4fHxEKTtpZihyKXJldHVybiByO2lmKG4pd2hpbGUobj1uLm5leHRTaWJsaW5nKWlmKG49PT10KXJldHVybi0xO3JldHVybiBlPzE6LTF9ZnVuY3Rpb24gZnQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iaW5wdXQiPT09biYmdC50eXBlPT09ZX19ZnVuY3Rpb24gZHQoZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciBuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4oImlucHV0Ij09PW58fCJidXR0b24iPT09bikmJnQudHlwZT09PWV9fWZ1bmN0aW9uIGh0KGUpe3JldHVybiBsdChmdW5jdGlvbih0KXtyZXR1cm4gdD0rdCxsdChmdW5jdGlvbihuLHIpe3ZhciBpLG89ZShbXSxuLmxlbmd0aCx0KSxhPW8ubGVuZ3RoO3doaWxlKGEtLSluW2k9b1thXV0mJihuW2ldPSEocltpXT1uW2ldKSl9KX0pfXM9YXQuaXNYTUw9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmKGUub3duZXJEb2N1bWVudHx8ZSkuZG9jdW1lbnRFbGVtZW50O3JldHVybiB0PyJIVE1MIiE9PXQubm9kZU5hbWU6ITF9LHI9YXQuc3VwcG9ydD17fSxwPWF0LnNldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciBuPWU/ZS5vd25lckRvY3VtZW50fHxlOncsaT1uLmRlZmF1bHRWaWV3O3JldHVybiBuIT09ZiYmOT09PW4ubm9kZVR5cGUmJm4uZG9jdW1lbnRFbGVtZW50PyhmPW4sZD1uLmRvY3VtZW50RWxlbWVudCxoPSFzKG4pLGkmJmkuYXR0YWNoRXZlbnQmJmkhPT1pLnRvcCYmaS5hdHRhY2hFdmVudCgib25iZWZvcmV1bmxvYWQiLGZ1bmN0aW9uKCl7cCgpfSksci5hdHRyaWJ1dGVzPXV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmNsYXNzTmFtZT0iaSIsIWUuZ2V0QXR0cmlidXRlKCJjbGFzc05hbWUiKX0pLHIuZ2V0RWxlbWVudHNCeVRhZ05hbWU9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYXBwZW5kQ2hpbGQobi5jcmVhdGVDb21tZW50KCIiKSksIWUuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKS5sZW5ndGh9KSxyLmdldEVsZW1lbnRzQnlDbGFzc05hbWU9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaW5uZXJIVE1MPSI8ZGl2IGNsYXNzPSdhJz48L2Rpdj48ZGl2IGNsYXNzPSdhIGknPjwvZGl2PiIsZS5maXJzdENoaWxkLmNsYXNzTmFtZT0iaSIsMj09PWUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgiaSIpLmxlbmd0aH0pLHIuZ2V0QnlJZD11dChmdW5jdGlvbihlKXtyZXR1cm4gZC5hcHBlbmRDaGlsZChlKS5pZD1iLCFuLmdldEVsZW1lbnRzQnlOYW1lfHwhbi5nZXRFbGVtZW50c0J5TmFtZShiKS5sZW5ndGh9KSxyLmdldEJ5SWQ/KG8uZmluZC5JRD1mdW5jdGlvbihlLHQpe2lmKHR5cGVvZiB0LmdldEVsZW1lbnRCeUlkIT09aiYmaCl7dmFyIG49dC5nZXRFbGVtZW50QnlJZChlKTtyZXR1cm4gbiYmbi5wYXJlbnROb2RlP1tuXTpbXX19LG8uZmlsdGVyLklEPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShydCxpdCk7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBlLmdldEF0dHJpYnV0ZSgiaWQiKT09PXR9fSk6KGRlbGV0ZSBvLmZpbmQuSUQsby5maWx0ZXIuSUQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHJ0LGl0KTtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIG49dHlwZW9mIGUuZ2V0QXR0cmlidXRlTm9kZSE9PWomJmUuZ2V0QXR0cmlidXRlTm9kZSgiaWQiKTtyZXR1cm4gbiYmbi52YWx1ZT09PXR9fSksby5maW5kLlRBRz1yLmdldEVsZW1lbnRzQnlUYWdOYW1lP2Z1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlUYWdOYW1lIT09aj9uLmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpOnR9OmZ1bmN0aW9uKGUsdCl7dmFyIG4scj1bXSxpPTAsbz10LmdldEVsZW1lbnRzQnlUYWdOYW1lKGUpO2lmKCIqIj09PWUpe3doaWxlKG49b1tpKytdKTE9PT1uLm5vZGVUeXBlJiZyLnB1c2gobik7cmV0dXJuIHJ9cmV0dXJuIG99LG8uZmluZC5DTEFTUz1yLmdldEVsZW1lbnRzQnlDbGFzc05hbWUmJmZ1bmN0aW9uKGUsbil7cmV0dXJuIHR5cGVvZiBuLmdldEVsZW1lbnRzQnlDbGFzc05hbWUhPT1qJiZoP24uZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShlKTp0fSxtPVtdLGc9W10sKHIucXNhPUsudGVzdChuLnF1ZXJ5U2VsZWN0b3JBbGwpKSYmKHV0KGZ1bmN0aW9uKGUpe2UuaW5uZXJIVE1MPSI8c2VsZWN0PjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+IixlLnF1ZXJ5U2VsZWN0b3JBbGwoIltzZWxlY3RlZF0iKS5sZW5ndGh8fGcucHVzaCgiXFxbIitQKyIqKD86dmFsdWV8IitCKyIpIiksZS5xdWVyeVNlbGVjdG9yQWxsKCI6Y2hlY2tlZCIpLmxlbmd0aHx8Zy5wdXNoKCI6Y2hlY2tlZCIpfSksdXQoZnVuY3Rpb24oZSl7dmFyIHQ9bi5jcmVhdGVFbGVtZW50KCJpbnB1dCIpO3Quc2V0QXR0cmlidXRlKCJ0eXBlIiwiaGlkZGVuIiksZS5hcHBlbmRDaGlsZCh0KS5zZXRBdHRyaWJ1dGUoInQiLCIiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIlt0Xj0nJ10iKS5sZW5ndGgmJmcucHVzaCgiWypeJF09IitQKyIqKD86Jyd8XCJcIikiKSxlLnF1ZXJ5U2VsZWN0b3JBbGwoIjplbmFibGVkIikubGVuZ3RofHxnLnB1c2goIjplbmFibGVkIiwiOmRpc2FibGVkIiksZS5xdWVyeVNlbGVjdG9yQWxsKCIqLDp4IiksZy5wdXNoKCIsLio6Iil9KSksKHIubWF0Y2hlc1NlbGVjdG9yPUsudGVzdCh5PWQud2Via2l0TWF0Y2hlc1NlbGVjdG9yfHxkLm1vek1hdGNoZXNTZWxlY3Rvcnx8ZC5vTWF0Y2hlc1NlbGVjdG9yfHxkLm1zTWF0Y2hlc1NlbGVjdG9yKSkmJnV0KGZ1bmN0aW9uKGUpe3IuZGlzY29ubmVjdGVkTWF0Y2g9eS5jYWxsKGUsImRpdiIpLHkuY2FsbChlLCJbcyE9JyddOngiKSxtLnB1c2goIiE9IixJKX0pLGc9Zy5sZW5ndGgmJlJlZ0V4cChnLmpvaW4oInwiKSksbT1tLmxlbmd0aCYmUmVnRXhwKG0uam9pbigifCIpKSx2PUsudGVzdChkLmNvbnRhaW5zKXx8ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe3ZhciBuPTk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUscj10JiZ0LnBhcmVudE5vZGU7cmV0dXJuIGU9PT1yfHwhKCFyfHwxIT09ci5ub2RlVHlwZXx8IShuLmNvbnRhaW5zP24uY29udGFpbnMocik6ZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmMTYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihyKSkpfTpmdW5jdGlvbihlLHQpe2lmKHQpd2hpbGUodD10LnBhcmVudE5vZGUpaWYodD09PWUpcmV0dXJuITA7cmV0dXJuITF9LEE9ZC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbj9mdW5jdGlvbihlLHQpe2lmKGU9PT10KXJldHVybiBTPSEwLDA7dmFyIGk9dC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KTtyZXR1cm4gaT8xJml8fCFyLnNvcnREZXRhY2hlZCYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihlKT09PWk/ZT09PW58fHYodyxlKT8tMTp0PT09bnx8dih3LHQpPzE6Yz9GLmNhbGwoYyxlKS1GLmNhbGwoYyx0KTowOjQmaT8tMToxOmUuY29tcGFyZURvY3VtZW50UG9zaXRpb24/LTE6MX06ZnVuY3Rpb24oZSx0KXt2YXIgcixpPTAsbz1lLnBhcmVudE5vZGUsYT10LnBhcmVudE5vZGUscz1bZV0sbD1bdF07aWYoZT09PXQpcmV0dXJuIFM9ITAsMDtpZighb3x8IWEpcmV0dXJuIGU9PT1uPy0xOnQ9PT1uPzE6bz8tMTphPzE6Yz9GLmNhbGwoYyxlKS1GLmNhbGwoYyx0KTowO2lmKG89PT1hKXJldHVybiBwdChlLHQpO3I9ZTt3aGlsZShyPXIucGFyZW50Tm9kZSlzLnVuc2hpZnQocik7cj10O3doaWxlKHI9ci5wYXJlbnROb2RlKWwudW5zaGlmdChyKTt3aGlsZShzW2ldPT09bFtpXSlpKys7cmV0dXJuIGk/cHQoc1tpXSxsW2ldKTpzW2ldPT09dz8tMTpsW2ldPT09dz8xOjB9LG4pOmZ9LGF0Lm1hdGNoZXM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXQoZSxudWxsLG51bGwsdCl9LGF0Lm1hdGNoZXNTZWxlY3Rvcj1mdW5jdGlvbihlLHQpe2lmKChlLm93bmVyRG9jdW1lbnR8fGUpIT09ZiYmcChlKSx0PXQucmVwbGFjZShZLCI9JyQxJ10iKSwhKCFyLm1hdGNoZXNTZWxlY3Rvcnx8IWh8fG0mJm0udGVzdCh0KXx8ZyYmZy50ZXN0KHQpKSl0cnl7dmFyIG49eS5jYWxsKGUsdCk7aWYobnx8ci5kaXNjb25uZWN0ZWRNYXRjaHx8ZS5kb2N1bWVudCYmMTEhPT1lLmRvY3VtZW50Lm5vZGVUeXBlKXJldHVybiBufWNhdGNoKGkpe31yZXR1cm4gYXQodCxmLG51bGwsW2VdKS5sZW5ndGg+MH0sYXQuY29udGFpbnM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4oZS5vd25lckRvY3VtZW50fHxlKSE9PWYmJnAoZSksdihlLHQpfSxhdC5hdHRyPWZ1bmN0aW9uKGUsbil7KGUub3duZXJEb2N1bWVudHx8ZSkhPT1mJiZwKGUpO3ZhciBpPW8uYXR0ckhhbmRsZVtuLnRvTG93ZXJDYXNlKCldLGE9aSYmTC5jYWxsKG8uYXR0ckhhbmRsZSxuLnRvTG93ZXJDYXNlKCkpP2koZSxuLCFoKTp0O3JldHVybiBhPT09dD9yLmF0dHJpYnV0ZXN8fCFoP2UuZ2V0QXR0cmlidXRlKG4pOihhPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJmEuc3BlY2lmaWVkP2EudmFsdWU6bnVsbDphfSxhdC5lcnJvcj1mdW5jdGlvbihlKXt0aHJvdyBFcnJvcigiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogIitlKX0sYXQudW5pcXVlU29ydD1mdW5jdGlvbihlKXt2YXIgdCxuPVtdLGk9MCxvPTA7aWYoUz0hci5kZXRlY3REdXBsaWNhdGVzLGM9IXIuc29ydFN0YWJsZSYmZS5zbGljZSgwKSxlLnNvcnQoQSksUyl7d2hpbGUodD1lW28rK10pdD09PWVbb10mJihpPW4ucHVzaChvKSk7d2hpbGUoaS0tKWUuc3BsaWNlKG5baV0sMSl9cmV0dXJuIGV9LGE9YXQuZ2V0VGV4dD1mdW5jdGlvbihlKXt2YXIgdCxuPSIiLHI9MCxpPWUubm9kZVR5cGU7aWYoaSl7aWYoMT09PWl8fDk9PT1pfHwxMT09PWkpe2lmKCJzdHJpbmciPT10eXBlb2YgZS50ZXh0Q29udGVudClyZXR1cm4gZS50ZXh0Q29udGVudDtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpbis9YShlKX1lbHNlIGlmKDM9PT1pfHw0PT09aSlyZXR1cm4gZS5ub2RlVmFsdWV9ZWxzZSBmb3IoO3Q9ZVtyXTtyKyspbis9YSh0KTtyZXR1cm4gbn0sbz1hdC5zZWxlY3RvcnM9e2NhY2hlTGVuZ3RoOjUwLGNyZWF0ZVBzZXVkbzpsdCxtYXRjaDpRLGF0dHJIYW5kbGU6e30sZmluZDp7fSxyZWxhdGl2ZTp7Ij4iOntkaXI6InBhcmVudE5vZGUiLGZpcnN0OiEwfSwiICI6e2RpcjoicGFyZW50Tm9kZSJ9LCIrIjp7ZGlyOiJwcmV2aW91c1NpYmxpbmciLGZpcnN0OiEwfSwifiI6e2RpcjoicHJldmlvdXNTaWJsaW5nIn19LHByZUZpbHRlcjp7QVRUUjpmdW5jdGlvbihlKXtyZXR1cm4gZVsxXT1lWzFdLnJlcGxhY2UocnQsaXQpLGVbM109KGVbNF18fGVbNV18fCIiKS5yZXBsYWNlKHJ0LGl0KSwifj0iPT09ZVsyXSYmKGVbM109IiAiK2VbM10rIiAiKSxlLnNsaWNlKDAsNCl9LENISUxEOmZ1bmN0aW9uKGUpe3JldHVybiBlWzFdPWVbMV0udG9Mb3dlckNhc2UoKSwibnRoIj09PWVbMV0uc2xpY2UoMCwzKT8oZVszXXx8YXQuZXJyb3IoZVswXSksZVs0XT0rKGVbNF0/ZVs1XSsoZVs2XXx8MSk6MiooImV2ZW4iPT09ZVszXXx8Im9kZCI9PT1lWzNdKSksZVs1XT0rKGVbN10rZVs4XXx8Im9kZCI9PT1lWzNdKSk6ZVszXSYmYXQuZXJyb3IoZVswXSksZX0sUFNFVURPOmZ1bmN0aW9uKGUpe3ZhciBuLHI9IWVbNV0mJmVbMl07cmV0dXJuIFEuQ0hJTEQudGVzdChlWzBdKT9udWxsOihlWzNdJiZlWzRdIT09dD9lWzJdPWVbNF06ciYmSi50ZXN0KHIpJiYobj1tdChyLCEwKSkmJihuPXIuaW5kZXhPZigiKSIsci5sZW5ndGgtbiktci5sZW5ndGgpJiYoZVswXT1lWzBdLnNsaWNlKDAsbiksZVsyXT1yLnNsaWNlKDAsbikpLGUuc2xpY2UoMCwzKSl9fSxmaWx0ZXI6e1RBRzpmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UocnQsaXQpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIioiPT09ZT9mdW5jdGlvbigpe3JldHVybiEwfTpmdW5jdGlvbihlKXtyZXR1cm4gZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPT09dH19LENMQVNTOmZ1bmN0aW9uKGUpe3ZhciB0PU5bZSsiICJdO3JldHVybiB0fHwodD1SZWdFeHAoIihefCIrUCsiKSIrZSsiKCIrUCsifCQpIikpJiZOKGUsZnVuY3Rpb24oZSl7cmV0dXJuIHQudGVzdCgic3RyaW5nIj09dHlwZW9mIGUuY2xhc3NOYW1lJiZlLmNsYXNzTmFtZXx8dHlwZW9mIGUuZ2V0QXR0cmlidXRlIT09aiYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzIil8fCIiKX0pfSxBVFRSOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24ocil7dmFyIGk9YXQuYXR0cihyLGUpO3JldHVybiBudWxsPT1pPyIhPSI9PT10OnQ/KGkrPSIiLCI9Ij09PXQ/aT09PW46IiE9Ij09PXQ/aSE9PW46Il49Ij09PXQ/biYmMD09PWkuaW5kZXhPZihuKToiKj0iPT09dD9uJiZpLmluZGV4T2Yobik+LTE6IiQ9Ij09PXQ/biYmaS5zbGljZSgtbi5sZW5ndGgpPT09bjoifj0iPT09dD8oIiAiK2krIiAiKS5pbmRleE9mKG4pPi0xOiJ8PSI9PT10P2k9PT1ufHxpLnNsaWNlKDAsbi5sZW5ndGgrMSk9PT1uKyItIjohMSk6ITB9fSxDSElMRDpmdW5jdGlvbihlLHQsbixyLGkpe3ZhciBvPSJudGgiIT09ZS5zbGljZSgwLDMpLGE9Imxhc3QiIT09ZS5zbGljZSgtNCkscz0ib2YtdHlwZSI9PT10O3JldHVybiAxPT09ciYmMD09PWk/ZnVuY3Rpb24oZSl7cmV0dXJuISFlLnBhcmVudE5vZGV9OmZ1bmN0aW9uKHQsbixsKXt2YXIgdSxjLHAsZixkLGgsZz1vIT09YT8ibmV4dFNpYmxpbmciOiJwcmV2aW91c1NpYmxpbmciLG09dC5wYXJlbnROb2RlLHk9cyYmdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHY9IWwmJiFzO2lmKG0pe2lmKG8pe3doaWxlKGcpe3A9dDt3aGlsZShwPXBbZ10paWYocz9wLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk9PT15OjE9PT1wLm5vZGVUeXBlKXJldHVybiExO2g9Zz0ib25seSI9PT1lJiYhaCYmIm5leHRTaWJsaW5nIn1yZXR1cm4hMH1pZihoPVthP20uZmlyc3RDaGlsZDptLmxhc3RDaGlsZF0sYSYmdil7Yz1tW2JdfHwobVtiXT17fSksdT1jW2VdfHxbXSxkPXVbMF09PT1UJiZ1WzFdLGY9dVswXT09PVQmJnVbMl0scD1kJiZtLmNoaWxkTm9kZXNbZF07d2hpbGUocD0rK2QmJnAmJnBbZ118fChmPWQ9MCl8fGgucG9wKCkpaWYoMT09PXAubm9kZVR5cGUmJisrZiYmcD09PXQpe2NbZV09W1QsZCxmXTticmVha319ZWxzZSBpZih2JiYodT0odFtiXXx8KHRbYl09e30pKVtlXSkmJnVbMF09PT1UKWY9dVsxXTtlbHNlIHdoaWxlKHA9KytkJiZwJiZwW2ddfHwoZj1kPTApfHxoLnBvcCgpKWlmKChzP3Aubm9kZU5hbWUudG9Mb3dlckNhc2UoKT09PXk6MT09PXAubm9kZVR5cGUpJiYrK2YmJih2JiYoKHBbYl18fChwW2JdPXt9KSlbZV09W1QsZl0pLHA9PT10KSlicmVhaztyZXR1cm4gZi09aSxmPT09cnx8MD09PWYlciYmZi9yPj0wfX19LFBTRVVETzpmdW5jdGlvbihlLHQpe3ZhciBuLHI9by5wc2V1ZG9zW2VdfHxvLnNldEZpbHRlcnNbZS50b0xvd2VyQ2FzZSgpXXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIHBzZXVkbzogIitlKTtyZXR1cm4gcltiXT9yKHQpOnIubGVuZ3RoPjE/KG49W2UsZSwiIix0XSxvLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoZS50b0xvd2VyQ2FzZSgpKT9sdChmdW5jdGlvbihlLG4pe3ZhciBpLG89cihlLHQpLGE9by5sZW5ndGg7d2hpbGUoYS0tKWk9Ri5jYWxsKGUsb1thXSksZVtpXT0hKG5baV09b1thXSl9KTpmdW5jdGlvbihlKXtyZXR1cm4gcihlLDAsbil9KTpyfX0scHNldWRvczp7bm90Omx0KGZ1bmN0aW9uKGUpe3ZhciB0PVtdLG49W10scj1sKGUucmVwbGFjZSh6LCIkMSIpKTtyZXR1cm4gcltiXT9sdChmdW5jdGlvbihlLHQsbixpKXt2YXIgbyxhPXIoZSxudWxsLGksW10pLHM9ZS5sZW5ndGg7d2hpbGUocy0tKShvPWFbc10pJiYoZVtzXT0hKHRbc109bykpfSk6ZnVuY3Rpb24oZSxpLG8pe3JldHVybiB0WzBdPWUscih0LG51bGwsbyxuKSwhbi5wb3AoKX19KSxoYXM6bHQoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBhdChlLHQpLmxlbmd0aD4wfX0pLGNvbnRhaW5zOmx0KGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4odC50ZXh0Q29udGVudHx8dC5pbm5lclRleHR8fGEodCkpLmluZGV4T2YoZSk+LTF9fSksbGFuZzpsdChmdW5jdGlvbihlKXtyZXR1cm4gRy50ZXN0KGV8fCIiKXx8YXQuZXJyb3IoInVuc3VwcG9ydGVkIGxhbmc6ICIrZSksZT1lLnJlcGxhY2UocnQsaXQpLnRvTG93ZXJDYXNlKCksZnVuY3Rpb24odCl7dmFyIG47ZG8gaWYobj1oP3QubGFuZzp0LmdldEF0dHJpYnV0ZSgieG1sOmxhbmciKXx8dC5nZXRBdHRyaWJ1dGUoImxhbmciKSlyZXR1cm4gbj1uLnRvTG93ZXJDYXNlKCksbj09PWV8fDA9PT1uLmluZGV4T2YoZSsiLSIpO3doaWxlKCh0PXQucGFyZW50Tm9kZSkmJjE9PT10Lm5vZGVUeXBlKTtyZXR1cm4hMX19KSx0YXJnZXQ6ZnVuY3Rpb24odCl7dmFyIG49ZS5sb2NhdGlvbiYmZS5sb2NhdGlvbi5oYXNoO3JldHVybiBuJiZuLnNsaWNlKDEpPT09dC5pZH0scm9vdDpmdW5jdGlvbihlKXtyZXR1cm4gZT09PWR9LGZvY3VzOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09Zi5hY3RpdmVFbGVtZW50JiYoIWYuaGFzRm9jdXN8fGYuaGFzRm9jdXMoKSkmJiEhKGUudHlwZXx8ZS5ocmVmfHx+ZS50YWJJbmRleCl9LGVuYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMX0sZGlzYWJsZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuZGlzYWJsZWQ9PT0hMH0sY2hlY2tlZDpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiEhZS5jaGVja2VkfHwib3B0aW9uIj09PXQmJiEhZS5zZWxlY3RlZH0sc2VsZWN0ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucGFyZW50Tm9kZSYmZS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXgsZS5zZWxlY3RlZD09PSEwfSxlbXB0eTpmdW5jdGlvbihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZTtlPWUubmV4dFNpYmxpbmcpaWYoZS5ub2RlTmFtZT4iQCJ8fDM9PT1lLm5vZGVUeXBlfHw0PT09ZS5ub2RlVHlwZSlyZXR1cm4hMTtyZXR1cm4hMH0scGFyZW50OmZ1bmN0aW9uKGUpe3JldHVybiFvLnBzZXVkb3MuZW1wdHkoZSl9LGhlYWRlcjpmdW5jdGlvbihlKXtyZXR1cm4gdHQudGVzdChlLm5vZGVOYW1lKX0saW5wdXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV0LnRlc3QoZS5ub2RlTmFtZSl9LGJ1dHRvbjpmdW5jdGlvbihlKXt2YXIgdD1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuImlucHV0Ij09PXQmJiJidXR0b24iPT09ZS50eXBlfHwiYnV0dG9uIj09PXR9LHRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuImlucHV0Ij09PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSYmInRleHQiPT09ZS50eXBlJiYobnVsbD09KHQ9ZS5nZXRBdHRyaWJ1dGUoInR5cGUiKSl8fHQudG9Mb3dlckNhc2UoKT09PWUudHlwZSl9LGZpcnN0Omh0KGZ1bmN0aW9uKCl7cmV0dXJuWzBdfSksbGFzdDpodChmdW5jdGlvbihlLHQpe3JldHVyblt0LTFdfSksZXE6aHQoZnVuY3Rpb24oZSx0LG4pe3JldHVyblswPm4/bit0Om5dfSksZXZlbjpodChmdW5jdGlvbihlLHQpe3ZhciBuPTA7Zm9yKDt0Pm47bis9MillLnB1c2gobik7cmV0dXJuIGV9KSxvZGQ6aHQoZnVuY3Rpb24oZSx0KXt2YXIgbj0xO2Zvcig7dD5uO24rPTIpZS5wdXNoKG4pO3JldHVybiBlfSksbHQ6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoOy0tcj49MDspZS5wdXNoKHIpO3JldHVybiBlfSksZ3Q6aHQoZnVuY3Rpb24oZSx0LG4pe3ZhciByPTA+bj9uK3Q6bjtmb3IoO3Q+KytyOyllLnB1c2gocik7cmV0dXJuIGV9KX19LG8ucHNldWRvcy5udGg9by5wc2V1ZG9zLmVxO2ZvcihuIGlue3JhZGlvOiEwLGNoZWNrYm94OiEwLGZpbGU6ITAscGFzc3dvcmQ6ITAsaW1hZ2U6ITB9KW8ucHNldWRvc1tuXT1mdChuKTtmb3IobiBpbntzdWJtaXQ6ITAscmVzZXQ6ITB9KW8ucHNldWRvc1tuXT1kdChuKTtmdW5jdGlvbiBndCgpe31ndC5wcm90b3R5cGU9by5maWx0ZXJzPW8ucHNldWRvcyxvLnNldEZpbHRlcnM9bmV3IGd0O2Z1bmN0aW9uIG10KGUsdCl7dmFyIG4scixpLGEscyxsLHUsYz1rW2UrIiAiXTtpZihjKXJldHVybiB0PzA6Yy5zbGljZSgwKTtzPWUsbD1bXSx1PW8ucHJlRmlsdGVyO3doaWxlKHMpeyghbnx8KHI9WC5leGVjKHMpKSkmJihyJiYocz1zLnNsaWNlKHJbMF0ubGVuZ3RoKXx8cyksbC5wdXNoKGk9W10pKSxuPSExLChyPVUuZXhlYyhzKSkmJihuPXIuc2hpZnQoKSxpLnB1c2goe3ZhbHVlOm4sdHlwZTpyWzBdLnJlcGxhY2UoeiwiICIpfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7Zm9yKGEgaW4gby5maWx0ZXIpIShyPVFbYV0uZXhlYyhzKSl8fHVbYV0mJiEocj11W2FdKHIpKXx8KG49ci5zaGlmdCgpLGkucHVzaCh7dmFsdWU6bix0eXBlOmEsbWF0Y2hlczpyfSkscz1zLnNsaWNlKG4ubGVuZ3RoKSk7aWYoIW4pYnJlYWt9cmV0dXJuIHQ/cy5sZW5ndGg6cz9hdC5lcnJvcihlKTprKGUsbCkuc2xpY2UoMCl9ZnVuY3Rpb24geXQoZSl7dmFyIHQ9MCxuPWUubGVuZ3RoLHI9IiI7Zm9yKDtuPnQ7dCsrKXIrPWVbdF0udmFsdWU7cmV0dXJuIHJ9ZnVuY3Rpb24gdnQoZSx0LG4pe3ZhciByPXQuZGlyLG89biYmInBhcmVudE5vZGUiPT09cixhPUMrKztyZXR1cm4gdC5maXJzdD9mdW5jdGlvbih0LG4saSl7d2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKXJldHVybiBlKHQsbixpKX06ZnVuY3Rpb24odCxuLHMpe3ZhciBsLHUsYyxwPVQrIiAiK2E7aWYocyl7d2hpbGUodD10W3JdKWlmKCgxPT09dC5ub2RlVHlwZXx8bykmJmUodCxuLHMpKXJldHVybiEwfWVsc2Ugd2hpbGUodD10W3JdKWlmKDE9PT10Lm5vZGVUeXBlfHxvKWlmKGM9dFtiXXx8KHRbYl09e30pLCh1PWNbcl0pJiZ1WzBdPT09cCl7aWYoKGw9dVsxXSk9PT0hMHx8bD09PWkpcmV0dXJuIGw9PT0hMH1lbHNlIGlmKHU9Y1tyXT1bcF0sdVsxXT1lKHQsbixzKXx8aSx1WzFdPT09ITApcmV0dXJuITB9fWZ1bmN0aW9uIGJ0KGUpe3JldHVybiBlLmxlbmd0aD4xP2Z1bmN0aW9uKHQsbixyKXt2YXIgaT1lLmxlbmd0aDt3aGlsZShpLS0paWYoIWVbaV0odCxuLHIpKXJldHVybiExO3JldHVybiEwfTplWzBdfWZ1bmN0aW9uIHh0KGUsdCxuLHIsaSl7dmFyIG8sYT1bXSxzPTAsbD1lLmxlbmd0aCx1PW51bGwhPXQ7Zm9yKDtsPnM7cysrKShvPWVbc10pJiYoIW58fG4obyxyLGkpKSYmKGEucHVzaChvKSx1JiZ0LnB1c2gocykpO3JldHVybiBhfWZ1bmN0aW9uIHd0KGUsdCxuLHIsaSxvKXtyZXR1cm4gciYmIXJbYl0mJihyPXd0KHIpKSxpJiYhaVtiXSYmKGk9d3QoaSxvKSksbHQoZnVuY3Rpb24obyxhLHMsbCl7dmFyIHUsYyxwLGY9W10sZD1bXSxoPWEubGVuZ3RoLGc9b3x8TnQodHx8IioiLHMubm9kZVR5cGU/W3NdOnMsW10pLG09IWV8fCFvJiZ0P2c6eHQoZyxmLGUscyxsKSx5PW4/aXx8KG8/ZTpofHxyKT9bXTphOm07aWYobiYmbihtLHkscyxsKSxyKXt1PXh0KHksZCkscih1LFtdLHMsbCksYz11Lmxlbmd0aDt3aGlsZShjLS0pKHA9dVtjXSkmJih5W2RbY11dPSEobVtkW2NdXT1wKSl9aWYobyl7aWYoaXx8ZSl7aWYoaSl7dT1bXSxjPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmdS5wdXNoKG1bY109cCk7aShudWxsLHk9W10sdSxsKX1jPXkubGVuZ3RoO3doaWxlKGMtLSkocD15W2NdKSYmKHU9aT9GLmNhbGwobyxwKTpmW2NdKT4tMSYmKG9bdV09IShhW3VdPXApKX19ZWxzZSB5PXh0KHk9PT1hP3kuc3BsaWNlKGgseS5sZW5ndGgpOnkpLGk/aShudWxsLGEseSxsKTpNLmFwcGx5KGEseSl9KX1mdW5jdGlvbiBUdChlKXt2YXIgdCxuLHIsaT1lLmxlbmd0aCxhPW8ucmVsYXRpdmVbZVswXS50eXBlXSxzPWF8fG8ucmVsYXRpdmVbIiAiXSxsPWE/MTowLGM9dnQoZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT10fSxzLCEwKSxwPXZ0KGZ1bmN0aW9uKGUpe3JldHVybiBGLmNhbGwodCxlKT4tMX0scywhMCksZj1bZnVuY3Rpb24oZSxuLHIpe3JldHVybiFhJiYocnx8biE9PXUpfHwoKHQ9bikubm9kZVR5cGU/YyhlLG4scik6cChlLG4scikpfV07Zm9yKDtpPmw7bCsrKWlmKG49by5yZWxhdGl2ZVtlW2xdLnR5cGVdKWY9W3Z0KGJ0KGYpLG4pXTtlbHNle2lmKG49by5maWx0ZXJbZVtsXS50eXBlXS5hcHBseShudWxsLGVbbF0ubWF0Y2hlcyksbltiXSl7Zm9yKHI9KytsO2k+cjtyKyspaWYoby5yZWxhdGl2ZVtlW3JdLnR5cGVdKWJyZWFrO3JldHVybiB3dChsPjEmJmJ0KGYpLGw+MSYmeXQoZS5zbGljZSgwLGwtMSkuY29uY2F0KHt2YWx1ZToiICI9PT1lW2wtMl0udHlwZT8iKiI6IiJ9KSkucmVwbGFjZSh6LCIkMSIpLG4scj5sJiZUdChlLnNsaWNlKGwscikpLGk+ciYmVHQoZT1lLnNsaWNlKHIpKSxpPnImJnl0KGUpKX1mLnB1c2gobil9cmV0dXJuIGJ0KGYpfWZ1bmN0aW9uIEN0KGUsdCl7dmFyIG49MCxyPXQubGVuZ3RoPjAsYT1lLmxlbmd0aD4wLHM9ZnVuY3Rpb24ocyxsLGMscCxkKXt2YXIgaCxnLG0seT1bXSx2PTAsYj0iMCIseD1zJiZbXSx3PW51bGwhPWQsQz11LE49c3x8YSYmby5maW5kLlRBRygiKiIsZCYmbC5wYXJlbnROb2RlfHxsKSxrPVQrPW51bGw9PUM/MTpNYXRoLnJhbmRvbSgpfHwuMTtmb3IodyYmKHU9bCE9PWYmJmwsaT1uKTtudWxsIT0oaD1OW2JdKTtiKyspe2lmKGEmJmgpe2c9MDt3aGlsZShtPWVbZysrXSlpZihtKGgsbCxjKSl7cC5wdXNoKGgpO2JyZWFrfXcmJihUPWssaT0rK24pfXImJigoaD0hbSYmaCkmJnYtLSxzJiZ4LnB1c2goaCkpfWlmKHYrPWIsciYmYiE9PXYpe2c9MDt3aGlsZShtPXRbZysrXSltKHgseSxsLGMpO2lmKHMpe2lmKHY+MCl3aGlsZShiLS0peFtiXXx8eVtiXXx8KHlbYl09cS5jYWxsKHApKTt5PXh0KHkpfU0uYXBwbHkocCx5KSx3JiYhcyYmeS5sZW5ndGg+MCYmdit0Lmxlbmd0aD4xJiZhdC51bmlxdWVTb3J0KHApfXJldHVybiB3JiYoVD1rLHU9QykseH07cmV0dXJuIHI/bHQocyk6c31sPWF0LmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXt2YXIgbixyPVtdLGk9W10sbz1FW2UrIiAiXTtpZighbyl7dHx8KHQ9bXQoZSkpLG49dC5sZW5ndGg7d2hpbGUobi0tKW89VHQodFtuXSksb1tiXT9yLnB1c2gobyk6aS5wdXNoKG8pO289RShlLEN0KGkscikpfXJldHVybiBvfTtmdW5jdGlvbiBOdChlLHQsbil7dmFyIHI9MCxpPXQubGVuZ3RoO2Zvcig7aT5yO3IrKylhdChlLHRbcl0sbik7cmV0dXJuIG59ZnVuY3Rpb24ga3QoZSx0LG4saSl7dmFyIGEscyx1LGMscCxmPW10KGUpO2lmKCFpJiYxPT09Zi5sZW5ndGgpe2lmKHM9ZlswXT1mWzBdLnNsaWNlKDApLHMubGVuZ3RoPjImJiJJRCI9PT0odT1zWzBdKS50eXBlJiZyLmdldEJ5SWQmJjk9PT10Lm5vZGVUeXBlJiZoJiZvLnJlbGF0aXZlW3NbMV0udHlwZV0pe2lmKHQ9KG8uZmluZC5JRCh1Lm1hdGNoZXNbMF0ucmVwbGFjZShydCxpdCksdCl8fFtdKVswXSwhdClyZXR1cm4gbjtlPWUuc2xpY2Uocy5zaGlmdCgpLnZhbHVlLmxlbmd0aCl9YT1RLm5lZWRzQ29udGV4dC50ZXN0KGUpPzA6cy5sZW5ndGg7d2hpbGUoYS0tKXtpZih1PXNbYV0sby5yZWxhdGl2ZVtjPXUudHlwZV0pYnJlYWs7aWYoKHA9by5maW5kW2NdKSYmKGk9cCh1Lm1hdGNoZXNbMF0ucmVwbGFjZShydCxpdCksVi50ZXN0KHNbMF0udHlwZSkmJnQucGFyZW50Tm9kZXx8dCkpKXtpZihzLnNwbGljZShhLDEpLGU9aS5sZW5ndGgmJnl0KHMpLCFlKXJldHVybiBNLmFwcGx5KG4saSksbjticmVha319fXJldHVybiBsKGUsZikoaSx0LCFoLG4sVi50ZXN0KGUpKSxufXIuc29ydFN0YWJsZT1iLnNwbGl0KCIiKS5zb3J0KEEpLmpvaW4oIiIpPT09YixyLmRldGVjdER1cGxpY2F0ZXM9UyxwKCksci5zb3J0RGV0YWNoZWQ9dXQoZnVuY3Rpb24oZSl7cmV0dXJuIDEmZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihmLmNyZWF0ZUVsZW1lbnQoImRpdiIpKX0pLHV0KGZ1bmN0aW9uKGUpe3JldHVybiBlLmlubmVySFRNTD0iPGEgaHJlZj0nIyc+PC9hPiIsIiMiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgiaHJlZiIpfSl8fGN0KCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoIixmdW5jdGlvbihlLG4scil7cmV0dXJuIHI/dDplLmdldEF0dHJpYnV0ZShuLCJ0eXBlIj09PW4udG9Mb3dlckNhc2UoKT8xOjIpfSksci5hdHRyaWJ1dGVzJiZ1dChmdW5jdGlvbihlKXtyZXR1cm4gZS5pbm5lckhUTUw9IjxpbnB1dC8+IixlLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIpLCIiPT09ZS5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSgidmFsdWUiKX0pfHxjdCgidmFsdWUiLGZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcnx8ImlucHV0IiE9PWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKT90OmUuZGVmYXVsdFZhbHVlfSksdXQoZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PWUuZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpfSl8fGN0KEIsZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiByP3Q6KGk9ZS5nZXRBdHRyaWJ1dGVOb2RlKG4pKSYmaS5zcGVjaWZpZWQ/aS52YWx1ZTplW25dPT09ITA/bi50b0xvd2VyQ2FzZSgpOm51bGx9KSx4LmZpbmQ9YXQseC5leHByPWF0LnNlbGVjdG9ycyx4LmV4cHJbIjoiXT14LmV4cHIucHNldWRvcyx4LnVuaXF1ZT1hdC51bmlxdWVTb3J0LHgudGV4dD1hdC5nZXRUZXh0LHguaXNYTUxEb2M9YXQuaXNYTUwseC5jb250YWlucz1hdC5jb250YWluc30oZSk7dmFyIE89e307ZnVuY3Rpb24gRihlKXt2YXIgdD1PW2VdPXt9O3JldHVybiB4LmVhY2goZS5tYXRjaChUKXx8W10sZnVuY3Rpb24oZSxuKXt0W25dPSEwfSksdH14LkNhbGxiYWNrcz1mdW5jdGlvbihlKXtlPSJzdHJpbmciPT10eXBlb2YgZT9PW2VdfHxGKGUpOnguZXh0ZW5kKHt9LGUpO3ZhciBuLHIsaSxvLGEscyxsPVtdLHU9IWUub25jZSYmW10sYz1mdW5jdGlvbih0KXtmb3Iocj1lLm1lbW9yeSYmdCxpPSEwLGE9c3x8MCxzPTAsbz1sLmxlbmd0aCxuPSEwO2wmJm8+YTthKyspaWYobFthXS5hcHBseSh0WzBdLHRbMV0pPT09ITEmJmUuc3RvcE9uRmFsc2Upe3I9ITE7YnJlYWt9bj0hMSxsJiYodT91Lmxlbmd0aCYmYyh1LnNoaWZ0KCkpOnI/bD1bXTpwLmRpc2FibGUoKSl9LHA9e2FkZDpmdW5jdGlvbigpe2lmKGwpe3ZhciB0PWwubGVuZ3RoOyhmdW5jdGlvbiBpKHQpe3guZWFjaCh0LGZ1bmN0aW9uKHQsbil7dmFyIHI9eC50eXBlKG4pOyJmdW5jdGlvbiI9PT1yP2UudW5pcXVlJiZwLmhhcyhuKXx8bC5wdXNoKG4pOm4mJm4ubGVuZ3RoJiYic3RyaW5nIiE9PXImJmkobil9KX0pKGFyZ3VtZW50cyksbj9vPWwubGVuZ3RoOnImJihzPXQsYyhyKSl9cmV0dXJuIHRoaXN9LHJlbW92ZTpmdW5jdGlvbigpe3JldHVybiBsJiZ4LmVhY2goYXJndW1lbnRzLGZ1bmN0aW9uKGUsdCl7dmFyIHI7d2hpbGUoKHI9eC5pbkFycmF5KHQsbCxyKSk+LTEpbC5zcGxpY2UociwxKSxuJiYobz49ciYmby0tLGE+PXImJmEtLSl9KSx0aGlzfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU/eC5pbkFycmF5KGUsbCk+LTE6ISghbHx8IWwubGVuZ3RoKX0sZW1wdHk6ZnVuY3Rpb24oKXtyZXR1cm4gbD1bXSxvPTAsdGhpc30sZGlzYWJsZTpmdW5jdGlvbigpe3JldHVybiBsPXU9cj10LHRoaXN9LGRpc2FibGVkOmZ1bmN0aW9uKCl7cmV0dXJuIWx9LGxvY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdT10LHJ8fHAuZGlzYWJsZSgpLHRoaXN9LGxvY2tlZDpmdW5jdGlvbigpe3JldHVybiF1fSxmaXJlV2l0aDpmdW5jdGlvbihlLHQpe3JldHVybiFsfHxpJiYhdXx8KHQ9dHx8W10sdD1bZSx0LnNsaWNlP3Quc2xpY2UoKTp0XSxuP3UucHVzaCh0KTpjKHQpKSx0aGlzfSxmaXJlOmZ1bmN0aW9uKCl7cmV0dXJuIHAuZmlyZVdpdGgodGhpcyxhcmd1bWVudHMpLHRoaXN9LGZpcmVkOmZ1bmN0aW9uKCl7cmV0dXJuISFpfX07cmV0dXJuIHB9LHguZXh0ZW5kKHtEZWZlcnJlZDpmdW5jdGlvbihlKXt2YXIgdD1bWyJyZXNvbHZlIiwiZG9uZSIseC5DYWxsYmFja3MoIm9uY2UgbWVtb3J5IiksInJlc29sdmVkIl0sWyJyZWplY3QiLCJmYWlsIix4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSwicmVqZWN0ZWQiXSxbIm5vdGlmeSIsInByb2dyZXNzIix4LkNhbGxiYWNrcygibWVtb3J5IildXSxuPSJwZW5kaW5nIixyPXtzdGF0ZTpmdW5jdGlvbigpe3JldHVybiBufSxhbHdheXM6ZnVuY3Rpb24oKXtyZXR1cm4gaS5kb25lKGFyZ3VtZW50cykuZmFpbChhcmd1bWVudHMpLHRoaXN9LHRoZW46ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHM7cmV0dXJuIHguRGVmZXJyZWQoZnVuY3Rpb24obil7eC5lYWNoKHQsZnVuY3Rpb24odCxvKXt2YXIgYT1vWzBdLHM9eC5pc0Z1bmN0aW9uKGVbdF0pJiZlW3RdO2lbb1sxXV0oZnVuY3Rpb24oKXt2YXIgZT1zJiZzLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtlJiZ4LmlzRnVuY3Rpb24oZS5wcm9taXNlKT9lLnByb21pc2UoKS5kb25lKG4ucmVzb2x2ZSkuZmFpbChuLnJlamVjdCkucHJvZ3Jlc3Mobi5ub3RpZnkpOm5bYSsiV2l0aCJdKHRoaXM9PT1yP24ucHJvbWlzZSgpOnRoaXMscz9bZV06YXJndW1lbnRzKX0pfSksZT1udWxsfSkucHJvbWlzZSgpfSxwcm9taXNlOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lP3guZXh0ZW5kKGUscik6cn19LGk9e307cmV0dXJuIHIucGlwZT1yLnRoZW4seC5lYWNoKHQsZnVuY3Rpb24oZSxvKXt2YXIgYT1vWzJdLHM9b1szXTtyW29bMV1dPWEuYWRkLHMmJmEuYWRkKGZ1bmN0aW9uKCl7bj1zfSx0WzFeZV1bMl0uZGlzYWJsZSx0WzJdWzJdLmxvY2spLGlbb1swXV09ZnVuY3Rpb24oKXtyZXR1cm4gaVtvWzBdKyJXaXRoIl0odGhpcz09PWk/cjp0aGlzLGFyZ3VtZW50cyksdGhpc30saVtvWzBdKyJXaXRoIl09YS5maXJlV2l0aH0pLHIucHJvbWlzZShpKSxlJiZlLmNhbGwoaSxpKSxpfSx3aGVuOmZ1bmN0aW9uKGUpe3ZhciB0PTAsbj1nLmNhbGwoYXJndW1lbnRzKSxyPW4ubGVuZ3RoLGk9MSE9PXJ8fGUmJnguaXNGdW5jdGlvbihlLnByb21pc2UpP3I6MCxvPTE9PT1pP2U6eC5EZWZlcnJlZCgpLGE9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBmdW5jdGlvbihyKXt0W2VdPXRoaXMsbltlXT1hcmd1bWVudHMubGVuZ3RoPjE/Zy5jYWxsKGFyZ3VtZW50cyk6cixuPT09cz9vLm5vdGlmeVdpdGgodCxuKTotLWl8fG8ucmVzb2x2ZVdpdGgodCxuKX19LHMsbCx1O2lmKHI+MSlmb3Iocz1BcnJheShyKSxsPUFycmF5KHIpLHU9QXJyYXkocik7cj50O3QrKyluW3RdJiZ4LmlzRnVuY3Rpb24oblt0XS5wcm9taXNlKT9uW3RdLnByb21pc2UoKS5kb25lKGEodCx1LG4pKS5mYWlsKG8ucmVqZWN0KS5wcm9ncmVzcyhhKHQsbCxzKSk6LS1pO3JldHVybiBpfHxvLnJlc29sdmVXaXRoKHUsbiksby5wcm9taXNlKCl9fSkseC5zdXBwb3J0PWZ1bmN0aW9uKHQpe3ZhciBuLHIsbyxzLGwsdSxjLHAsZixkPWEuY3JlYXRlRWxlbWVudCgiZGl2Iik7aWYoZC5zZXRBdHRyaWJ1dGUoImNsYXNzTmFtZSIsInQiKSxkLmlubmVySFRNTD0iICA8bGluay8+PHRhYmxlPjwvdGFibGU+PGEgaHJlZj0nL2EnPmE8L2E+PGlucHV0IHR5cGU9J2NoZWNrYm94Jy8+IixuPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIioiKXx8W10scj1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJhIilbMF0sIXJ8fCFyLnN0eWxlfHwhbi5sZW5ndGgpcmV0dXJuIHQ7cz1hLmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpLHU9cy5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKSxvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImlucHV0IilbMF0sci5zdHlsZS5jc3NUZXh0PSJ0b3A6MXB4O2Zsb2F0OmxlZnQ7b3BhY2l0eTouNSIsdC5nZXRTZXRBdHRyaWJ1dGU9InQiIT09ZC5jbGFzc05hbWUsdC5sZWFkaW5nV2hpdGVzcGFjZT0zPT09ZC5maXJzdENoaWxkLm5vZGVUeXBlLHQudGJvZHk9IWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IikubGVuZ3RoLHQuaHRtbFNlcmlhbGl6ZT0hIWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGgsdC5zdHlsZT0vdG9wLy50ZXN0KHIuZ2V0QXR0cmlidXRlKCJzdHlsZSIpKSx0LmhyZWZOb3JtYWxpemVkPSIvYSI9PT1yLmdldEF0dHJpYnV0ZSgiaHJlZiIpLHQub3BhY2l0eT0vXjAuNS8udGVzdChyLnN0eWxlLm9wYWNpdHkpLHQuY3NzRmxvYXQ9ISFyLnN0eWxlLmNzc0Zsb2F0LHQuY2hlY2tPbj0hIW8udmFsdWUsdC5vcHRTZWxlY3RlZD11LnNlbGVjdGVkLHQuZW5jdHlwZT0hIWEuY3JlYXRlRWxlbWVudCgiZm9ybSIpLmVuY3R5cGUsdC5odG1sNUNsb25lPSI8Om5hdj48LzpuYXY+IiE9PWEuY3JlYXRlRWxlbWVudCgibmF2IikuY2xvbmVOb2RlKCEwKS5vdXRlckhUTUwsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PSExLHQuc2hyaW5rV3JhcEJsb2Nrcz0hMSx0LnBpeGVsUG9zaXRpb249ITEsdC5kZWxldGVFeHBhbmRvPSEwLHQubm9DbG9uZUV2ZW50PSEwLHQucmVsaWFibGVNYXJnaW5SaWdodD0hMCx0LmJveFNpemluZ1JlbGlhYmxlPSEwLG8uY2hlY2tlZD0hMCx0Lm5vQ2xvbmVDaGVja2VkPW8uY2xvbmVOb2RlKCEwKS5jaGVja2VkLHMuZGlzYWJsZWQ9ITAsdC5vcHREaXNhYmxlZD0hdS5kaXNhYmxlZDt0cnl7ZGVsZXRlIGQudGVzdH1jYXRjaChoKXt0LmRlbGV0ZUV4cGFuZG89ITF9bz1hLmNyZWF0ZUVsZW1lbnQoImlucHV0Iiksby5zZXRBdHRyaWJ1dGUoInZhbHVlIiwiIiksdC5pbnB1dD0iIj09PW8uZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLG8udmFsdWU9InQiLG8uc2V0QXR0cmlidXRlKCJ0eXBlIiwicmFkaW8iKSx0LnJhZGlvVmFsdWU9InQiPT09by52YWx1ZSxvLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsInQiKSxvLnNldEF0dHJpYnV0ZSgibmFtZSIsInQiKSxsPWEuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGwuYXBwZW5kQ2hpbGQobyksdC5hcHBlbmRDaGVja2VkPW8uY2hlY2tlZCx0LmNoZWNrQ2xvbmU9bC5jbG9uZU5vZGUoITApLmNsb25lTm9kZSghMCkubGFzdENoaWxkLmNoZWNrZWQsZC5hdHRhY2hFdmVudCYmKGQuYXR0YWNoRXZlbnQoIm9uY2xpY2siLGZ1bmN0aW9uKCl7dC5ub0Nsb25lRXZlbnQ9ITF9KSxkLmNsb25lTm9kZSghMCkuY2xpY2soKSk7Zm9yKGYgaW57c3VibWl0OiEwLGNoYW5nZTohMCxmb2N1c2luOiEwfSlkLnNldEF0dHJpYnV0ZShjPSJvbiIrZiwidCIpLHRbZisiQnViYmxlcyJdPWMgaW4gZXx8ZC5hdHRyaWJ1dGVzW2NdLmV4cGFuZG89PT0hMTtkLnN0eWxlLmJhY2tncm91bmRDbGlwPSJjb250ZW50LWJveCIsZC5jbG9uZU5vZGUoITApLnN0eWxlLmJhY2tncm91bmRDbGlwPSIiLHQuY2xlYXJDbG9uZVN0eWxlPSJjb250ZW50LWJveCI9PT1kLnN0eWxlLmJhY2tncm91bmRDbGlwO2ZvcihmIGluIHgodCkpYnJlYWs7cmV0dXJuIHQub3duTGFzdD0iMCIhPT1mLHgoZnVuY3Rpb24oKXt2YXIgbixyLG8scz0icGFkZGluZzowO21hcmdpbjowO2JvcmRlcjowO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpjb250ZW50LWJveDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94OyIsbD1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJib2R5IilbMF07bCYmKG49YS5jcmVhdGVFbGVtZW50KCJkaXYiKSxuLnN0eWxlLmNzc1RleHQ9ImJvcmRlcjowO3dpZHRoOjA7aGVpZ2h0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDotOTk5OXB4O21hcmdpbi10b3A6MXB4IixsLmFwcGVuZENoaWxkKG4pLmFwcGVuZENoaWxkKGQpLGQuaW5uZXJIVE1MPSI8dGFibGU+PHRyPjx0ZD48L3RkPjx0ZD50PC90ZD48L3RyPjwvdGFibGU+IixvPWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRkIiksb1swXS5zdHlsZS5jc3NUZXh0PSJwYWRkaW5nOjA7bWFyZ2luOjA7Ym9yZGVyOjA7ZGlzcGxheTpub25lIixwPTA9PT1vWzBdLm9mZnNldEhlaWdodCxvWzBdLnN0eWxlLmRpc3BsYXk9IiIsb1sxXS5zdHlsZS5kaXNwbGF5PSJub25lIix0LnJlbGlhYmxlSGlkZGVuT2Zmc2V0cz1wJiYwPT09b1swXS5vZmZzZXRIZWlnaHQsZC5pbm5lckhUTUw9IiIsZC5zdHlsZS5jc3NUZXh0PSJib3gtc2l6aW5nOmJvcmRlci1ib3g7LW1vei1ib3gtc2l6aW5nOmJvcmRlci1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzoxcHg7Ym9yZGVyOjFweDtkaXNwbGF5OmJsb2NrO3dpZHRoOjRweDttYXJnaW4tdG9wOjElO3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxJTsiLHguc3dhcChsLG51bGwhPWwuc3R5bGUuem9vbT97em9vbToxfTp7fSxmdW5jdGlvbigpe3QuYm94U2l6aW5nPTQ9PT1kLm9mZnNldFdpZHRofSksZS5nZXRDb21wdXRlZFN0eWxlJiYodC5waXhlbFBvc2l0aW9uPSIxJSIhPT0oZS5nZXRDb21wdXRlZFN0eWxlKGQsbnVsbCl8fHt9KS50b3AsdC5ib3hTaXppbmdSZWxpYWJsZT0iNHB4Ij09PShlLmdldENvbXB1dGVkU3R5bGUoZCxudWxsKXx8e3dpZHRoOiI0cHgifSkud2lkdGgscj1kLmFwcGVuZENoaWxkKGEuY3JlYXRlRWxlbWVudCgiZGl2IikpLHIuc3R5bGUuY3NzVGV4dD1kLnN0eWxlLmNzc1RleHQ9cyxyLnN0eWxlLm1hcmdpblJpZ2h0PXIuc3R5bGUud2lkdGg9IjAiLGQuc3R5bGUud2lkdGg9IjFweCIsdC5yZWxpYWJsZU1hcmdpblJpZ2h0PSFwYXJzZUZsb2F0KChlLmdldENvbXB1dGVkU3R5bGUocixudWxsKXx8e30pLm1hcmdpblJpZ2h0KSksdHlwZW9mIGQuc3R5bGUuem9vbSE9PWkmJihkLmlubmVySFRNTD0iIixkLnN0eWxlLmNzc1RleHQ9cysid2lkdGg6MXB4O3BhZGRpbmc6MXB4O2Rpc3BsYXk6aW5saW5lO3pvb206MSIsdC5pbmxpbmVCbG9ja05lZWRzTGF5b3V0PTM9PT1kLm9mZnNldFdpZHRoLGQuc3R5bGUuZGlzcGxheT0iYmxvY2siLGQuaW5uZXJIVE1MPSI8ZGl2PjwvZGl2PiIsZC5maXJzdENoaWxkLnN0eWxlLndpZHRoPSI1cHgiLHQuc2hyaW5rV3JhcEJsb2Nrcz0zIT09ZC5vZmZzZXRXaWR0aCx0LmlubGluZUJsb2NrTmVlZHNMYXlvdXQmJihsLnN0eWxlLnpvb209MSkpLGwucmVtb3ZlQ2hpbGQobiksbj1kPW89cj1udWxsKX0pLG49cz1sPXU9cj1vPW51bGwsdAp9KHt9KTt2YXIgQj0vKD86XHtbXHNcU10qXH18XFtbXHNcU10qXF0pJC8sUD0vKFtBLVpdKS9nO2Z1bmN0aW9uIFIoZSxuLHIsaSl7aWYoeC5hY2NlcHREYXRhKGUpKXt2YXIgbyxhLHM9eC5leHBhbmRvLGw9ZS5ub2RlVHlwZSx1PWw/eC5jYWNoZTplLGM9bD9lW3NdOmVbc10mJnM7aWYoYyYmdVtjXSYmKGl8fHVbY10uZGF0YSl8fHIhPT10fHwic3RyaW5nIiE9dHlwZW9mIG4pcmV0dXJuIGN8fChjPWw/ZVtzXT1wLnBvcCgpfHx4Lmd1aWQrKzpzKSx1W2NdfHwodVtjXT1sP3t9Ont0b0pTT046eC5ub29wfSksKCJvYmplY3QiPT10eXBlb2Ygbnx8ImZ1bmN0aW9uIj09dHlwZW9mIG4pJiYoaT91W2NdPXguZXh0ZW5kKHVbY10sbik6dVtjXS5kYXRhPXguZXh0ZW5kKHVbY10uZGF0YSxuKSksYT11W2NdLGl8fChhLmRhdGF8fChhLmRhdGE9e30pLGE9YS5kYXRhKSxyIT09dCYmKGFbeC5jYW1lbENhc2UobildPXIpLCJzdHJpbmciPT10eXBlb2Ygbj8obz1hW25dLG51bGw9PW8mJihvPWFbeC5jYW1lbENhc2UobildKSk6bz1hLG99fWZ1bmN0aW9uIFcoZSx0LG4pe2lmKHguYWNjZXB0RGF0YShlKSl7dmFyIHIsaSxvPWUubm9kZVR5cGUsYT1vP3guY2FjaGU6ZSxzPW8/ZVt4LmV4cGFuZG9dOnguZXhwYW5kbztpZihhW3NdKXtpZih0JiYocj1uP2Fbc106YVtzXS5kYXRhKSl7eC5pc0FycmF5KHQpP3Q9dC5jb25jYXQoeC5tYXAodCx4LmNhbWVsQ2FzZSkpOnQgaW4gcj90PVt0XToodD14LmNhbWVsQ2FzZSh0KSx0PXQgaW4gcj9bdF06dC5zcGxpdCgiICIpKSxpPXQubGVuZ3RoO3doaWxlKGktLSlkZWxldGUgclt0W2ldXTtpZihuPyFJKHIpOiF4LmlzRW1wdHlPYmplY3QocikpcmV0dXJufShufHwoZGVsZXRlIGFbc10uZGF0YSxJKGFbc10pKSkmJihvP3guY2xlYW5EYXRhKFtlXSwhMCk6eC5zdXBwb3J0LmRlbGV0ZUV4cGFuZG98fGEhPWEud2luZG93P2RlbGV0ZSBhW3NdOmFbc109bnVsbCl9fX14LmV4dGVuZCh7Y2FjaGU6e30sbm9EYXRhOnthcHBsZXQ6ITAsZW1iZWQ6ITAsb2JqZWN0OiJjbHNpZDpEMjdDREI2RS1BRTZELTExY2YtOTZCOC00NDQ1NTM1NDAwMDAifSxoYXNEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUubm9kZVR5cGU/eC5jYWNoZVtlW3guZXhwYW5kb11dOmVbeC5leHBhbmRvXSwhIWUmJiFJKGUpfSxkYXRhOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gUihlLHQsbil9LHJlbW92ZURhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gVyhlLHQpfSxfZGF0YTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIFIoZSx0LG4sITApfSxfcmVtb3ZlRGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBXKGUsdCwhMCl9LGFjY2VwdERhdGE6ZnVuY3Rpb24oZSl7aWYoZS5ub2RlVHlwZSYmMSE9PWUubm9kZVR5cGUmJjkhPT1lLm5vZGVUeXBlKXJldHVybiExO3ZhciB0PWUubm9kZU5hbWUmJngubm9EYXRhW2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKV07cmV0dXJuIXR8fHQhPT0hMCYmZS5nZXRBdHRyaWJ1dGUoImNsYXNzaWQiKT09PXR9fSkseC5mbi5leHRlbmQoe2RhdGE6ZnVuY3Rpb24oZSxuKXt2YXIgcixpLG89bnVsbCxhPTAscz10aGlzWzBdO2lmKGU9PT10KXtpZih0aGlzLmxlbmd0aCYmKG89eC5kYXRhKHMpLDE9PT1zLm5vZGVUeXBlJiYheC5fZGF0YShzLCJwYXJzZWRBdHRycyIpKSl7Zm9yKHI9cy5hdHRyaWJ1dGVzO3IubGVuZ3RoPmE7YSsrKWk9clthXS5uYW1lLDA9PT1pLmluZGV4T2YoImRhdGEtIikmJihpPXguY2FtZWxDYXNlKGkuc2xpY2UoNSkpLCQocyxpLG9baV0pKTt4Ll9kYXRhKHMsInBhcnNlZEF0dHJzIiwhMCl9cmV0dXJuIG99cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP3RoaXMuZWFjaChmdW5jdGlvbigpe3guZGF0YSh0aGlzLGUpfSk6YXJndW1lbnRzLmxlbmd0aD4xP3RoaXMuZWFjaChmdW5jdGlvbigpe3guZGF0YSh0aGlzLGUsbil9KTpzPyQocyxlLHguZGF0YShzLGUpKTpudWxsfSxyZW1vdmVEYXRhOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKXt4LnJlbW92ZURhdGEodGhpcyxlKX0pfX0pO2Z1bmN0aW9uICQoZSxuLHIpe2lmKHI9PT10JiYxPT09ZS5ub2RlVHlwZSl7dmFyIGk9ImRhdGEtIituLnJlcGxhY2UoUCwiLSQxIikudG9Mb3dlckNhc2UoKTtpZihyPWUuZ2V0QXR0cmlidXRlKGkpLCJzdHJpbmciPT10eXBlb2Ygcil7dHJ5e3I9InRydWUiPT09cj8hMDoiZmFsc2UiPT09cj8hMToibnVsbCI9PT1yP251bGw6K3IrIiI9PT1yPytyOkIudGVzdChyKT94LnBhcnNlSlNPTihyKTpyfWNhdGNoKG8pe314LmRhdGEoZSxuLHIpfWVsc2Ugcj10fXJldHVybiByfWZ1bmN0aW9uIEkoZSl7dmFyIHQ7Zm9yKHQgaW4gZSlpZigoImRhdGEiIT09dHx8IXguaXNFbXB0eU9iamVjdChlW3RdKSkmJiJ0b0pTT04iIT09dClyZXR1cm4hMTtyZXR1cm4hMH14LmV4dGVuZCh7cXVldWU6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpO3JldHVybiBlPyhuPShufHwiZngiKSsicXVldWUiLGk9eC5fZGF0YShlLG4pLHImJighaXx8eC5pc0FycmF5KHIpP2k9eC5fZGF0YShlLG4seC5tYWtlQXJyYXkocikpOmkucHVzaChyKSksaXx8W10pOnR9LGRlcXVldWU6ZnVuY3Rpb24oZSx0KXt0PXR8fCJmeCI7dmFyIG49eC5xdWV1ZShlLHQpLHI9bi5sZW5ndGgsaT1uLnNoaWZ0KCksbz14Ll9xdWV1ZUhvb2tzKGUsdCksYT1mdW5jdGlvbigpe3guZGVxdWV1ZShlLHQpfTsiaW5wcm9ncmVzcyI9PT1pJiYoaT1uLnNoaWZ0KCksci0tKSxpJiYoImZ4Ij09PXQmJm4udW5zaGlmdCgiaW5wcm9ncmVzcyIpLGRlbGV0ZSBvLnN0b3AsaS5jYWxsKGUsYSxvKSksIXImJm8mJm8uZW1wdHkuZmlyZSgpfSxfcXVldWVIb29rczpmdW5jdGlvbihlLHQpe3ZhciBuPXQrInF1ZXVlSG9va3MiO3JldHVybiB4Ll9kYXRhKGUsbil8fHguX2RhdGEoZSxuLHtlbXB0eTp4LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKS5hZGQoZnVuY3Rpb24oKXt4Ll9yZW1vdmVEYXRhKGUsdCsicXVldWUiKSx4Ll9yZW1vdmVEYXRhKGUsbil9KX0pfX0pLHguZm4uZXh0ZW5kKHtxdWV1ZTpmdW5jdGlvbihlLG4pe3ZhciByPTI7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYobj1lLGU9ImZ4IixyLS0pLHI+YXJndW1lbnRzLmxlbmd0aD94LnF1ZXVlKHRoaXNbMF0sZSk6bj09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD14LnF1ZXVlKHRoaXMsZSxuKTt4Ll9xdWV1ZUhvb2tzKHRoaXMsZSksImZ4Ij09PWUmJiJpbnByb2dyZXNzIiE9PXRbMF0mJnguZGVxdWV1ZSh0aGlzLGUpfSl9LGRlcXVldWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3guZGVxdWV1ZSh0aGlzLGUpfSl9LGRlbGF5OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9eC5meD94LmZ4LnNwZWVkc1tlXXx8ZTplLHQ9dHx8ImZ4Iix0aGlzLnF1ZXVlKHQsZnVuY3Rpb24odCxuKXt2YXIgcj1zZXRUaW1lb3V0KHQsZSk7bi5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KHIpfX0pfSxjbGVhclF1ZXVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXVlKGV8fCJmeCIsW10pfSxwcm9taXNlOmZ1bmN0aW9uKGUsbil7dmFyIHIsaT0xLG89eC5EZWZlcnJlZCgpLGE9dGhpcyxzPXRoaXMubGVuZ3RoLGw9ZnVuY3Rpb24oKXstLWl8fG8ucmVzb2x2ZVdpdGgoYSxbYV0pfTsic3RyaW5nIiE9dHlwZW9mIGUmJihuPWUsZT10KSxlPWV8fCJmeCI7d2hpbGUocy0tKXI9eC5fZGF0YShhW3NdLGUrInF1ZXVlSG9va3MiKSxyJiZyLmVtcHR5JiYoaSsrLHIuZW1wdHkuYWRkKGwpKTtyZXR1cm4gbCgpLG8ucHJvbWlzZShuKX19KTt2YXIgeixYLFU9L1tcdFxyXG5cZl0vZyxWPS9cci9nLFk9L14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9ufG9iamVjdCkkL2ksSj0vXig/OmF8YXJlYSkkL2ksRz0vXig/OmNoZWNrZWR8c2VsZWN0ZWQpJC9pLFE9eC5zdXBwb3J0LmdldFNldEF0dHJpYnV0ZSxLPXguc3VwcG9ydC5pbnB1dDt4LmZuLmV4dGVuZCh7YXR0cjpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHguYXR0cixlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5yZW1vdmVBdHRyKHRoaXMsZSl9KX0scHJvcDpmdW5jdGlvbihlLHQpe3JldHVybiB4LmFjY2Vzcyh0aGlzLHgucHJvcCxlLHQsYXJndW1lbnRzLmxlbmd0aD4xKX0scmVtb3ZlUHJvcDpmdW5jdGlvbihlKXtyZXR1cm4gZT14LnByb3BGaXhbZV18fGUsdGhpcy5lYWNoKGZ1bmN0aW9uKCl7dHJ5e3RoaXNbZV09dCxkZWxldGUgdGhpc1tlXX1jYXRjaChuKXt9fSl9LGFkZENsYXNzOmZ1bmN0aW9uKGUpe3ZhciB0LG4scixpLG8sYT0wLHM9dGhpcy5sZW5ndGgsbD0ic3RyaW5nIj09dHlwZW9mIGUmJmU7aWYoeC5pc0Z1bmN0aW9uKGUpKXJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24odCl7eCh0aGlzKS5hZGRDbGFzcyhlLmNhbGwodGhpcyx0LHRoaXMuY2xhc3NOYW1lKSl9KTtpZihsKWZvcih0PShlfHwiIikubWF0Y2goVCl8fFtdO3M+YTthKyspaWYobj10aGlzW2FdLHI9MT09PW4ubm9kZVR5cGUmJihuLmNsYXNzTmFtZT8oIiAiK24uY2xhc3NOYW1lKyIgIikucmVwbGFjZShVLCIgIik6IiAiKSl7bz0wO3doaWxlKGk9dFtvKytdKTA+ci5pbmRleE9mKCIgIitpKyIgIikmJihyKz1pKyIgIik7bi5jbGFzc05hbWU9eC50cmltKHIpfXJldHVybiB0aGlzfSxyZW1vdmVDbGFzczpmdW5jdGlvbihlKXt2YXIgdCxuLHIsaSxvLGE9MCxzPXRoaXMubGVuZ3RoLGw9MD09PWFyZ3VtZW50cy5sZW5ndGh8fCJzdHJpbmciPT10eXBlb2YgZSYmZTtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLnJlbW92ZUNsYXNzKGUuY2FsbCh0aGlzLHQsdGhpcy5jbGFzc05hbWUpKX0pO2lmKGwpZm9yKHQ9KGV8fCIiKS5tYXRjaChUKXx8W107cz5hO2ErKylpZihuPXRoaXNbYV0scj0xPT09bi5ub2RlVHlwZSYmKG4uY2xhc3NOYW1lPygiICIrbi5jbGFzc05hbWUrIiAiKS5yZXBsYWNlKFUsIiAiKToiIikpe289MDt3aGlsZShpPXRbbysrXSl3aGlsZShyLmluZGV4T2YoIiAiK2krIiAiKT49MClyPXIucmVwbGFjZSgiICIraSsiICIsIiAiKTtuLmNsYXNzTmFtZT1lP3gudHJpbShyKToiIn1yZXR1cm4gdGhpc30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oZSx0KXt2YXIgbj10eXBlb2YgZTtyZXR1cm4iYm9vbGVhbiI9PXR5cGVvZiB0JiYic3RyaW5nIj09PW4/dD90aGlzLmFkZENsYXNzKGUpOnRoaXMucmVtb3ZlQ2xhc3MoZSk6eC5pc0Z1bmN0aW9uKGUpP3RoaXMuZWFjaChmdW5jdGlvbihuKXt4KHRoaXMpLnRvZ2dsZUNsYXNzKGUuY2FsbCh0aGlzLG4sdGhpcy5jbGFzc05hbWUsdCksdCl9KTp0aGlzLmVhY2goZnVuY3Rpb24oKXtpZigic3RyaW5nIj09PW4pe3ZhciB0LHI9MCxvPXgodGhpcyksYT1lLm1hdGNoKFQpfHxbXTt3aGlsZSh0PWFbcisrXSlvLmhhc0NsYXNzKHQpP28ucmVtb3ZlQ2xhc3ModCk6by5hZGRDbGFzcyh0KX1lbHNlKG49PT1pfHwiYm9vbGVhbiI9PT1uKSYmKHRoaXMuY2xhc3NOYW1lJiZ4Ll9kYXRhKHRoaXMsIl9fY2xhc3NOYW1lX18iLHRoaXMuY2xhc3NOYW1lKSx0aGlzLmNsYXNzTmFtZT10aGlzLmNsYXNzTmFtZXx8ZT09PSExPyIiOnguX2RhdGEodGhpcywiX19jbGFzc05hbWVfXyIpfHwiIil9KX0saGFzQ2xhc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9IiAiK2UrIiAiLG49MCxyPXRoaXMubGVuZ3RoO2Zvcig7cj5uO24rKylpZigxPT09dGhpc1tuXS5ub2RlVHlwZSYmKCIgIit0aGlzW25dLmNsYXNzTmFtZSsiICIpLnJlcGxhY2UoVSwiICIpLmluZGV4T2YodCk+PTApcmV0dXJuITA7cmV0dXJuITF9LHZhbDpmdW5jdGlvbihlKXt2YXIgbixyLGksbz10aGlzWzBdO3tpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBpPXguaXNGdW5jdGlvbihlKSx0aGlzLmVhY2goZnVuY3Rpb24obil7dmFyIG87MT09PXRoaXMubm9kZVR5cGUmJihvPWk/ZS5jYWxsKHRoaXMsbix4KHRoaXMpLnZhbCgpKTplLG51bGw9PW8/bz0iIjoibnVtYmVyIj09dHlwZW9mIG8/bys9IiI6eC5pc0FycmF5KG8pJiYobz14Lm1hcChvLGZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lPyIiOmUrIiJ9KSkscj14LnZhbEhvb2tzW3RoaXMudHlwZV18fHgudmFsSG9va3NbdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXSxyJiYic2V0ImluIHImJnIuc2V0KHRoaXMsbywidmFsdWUiKSE9PXR8fCh0aGlzLnZhbHVlPW8pKX0pO2lmKG8pcmV0dXJuIHI9eC52YWxIb29rc1tvLnR5cGVdfHx4LnZhbEhvb2tzW28ubm9kZU5hbWUudG9Mb3dlckNhc2UoKV0sciYmImdldCJpbiByJiYobj1yLmdldChvLCJ2YWx1ZSIpKSE9PXQ/bjoobj1vLnZhbHVlLCJzdHJpbmciPT10eXBlb2Ygbj9uLnJlcGxhY2UoViwiIik6bnVsbD09bj8iIjpuKX19fSkseC5leHRlbmQoe3ZhbEhvb2tzOntvcHRpb246e2dldDpmdW5jdGlvbihlKXt2YXIgdD14LmZpbmQuYXR0cihlLCJ2YWx1ZSIpO3JldHVybiBudWxsIT10P3Q6ZS50ZXh0fX0sc2VsZWN0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQsbixyPWUub3B0aW9ucyxpPWUuc2VsZWN0ZWRJbmRleCxvPSJzZWxlY3Qtb25lIj09PWUudHlwZXx8MD5pLGE9bz9udWxsOltdLHM9bz9pKzE6ci5sZW5ndGgsbD0wPmk/czpvP2k6MDtmb3IoO3M+bDtsKyspaWYobj1yW2xdLCEoIW4uc2VsZWN0ZWQmJmwhPT1pfHwoeC5zdXBwb3J0Lm9wdERpc2FibGVkP24uZGlzYWJsZWQ6bnVsbCE9PW4uZ2V0QXR0cmlidXRlKCJkaXNhYmxlZCIpKXx8bi5wYXJlbnROb2RlLmRpc2FibGVkJiZ4Lm5vZGVOYW1lKG4ucGFyZW50Tm9kZSwib3B0Z3JvdXAiKSkpe2lmKHQ9eChuKS52YWwoKSxvKXJldHVybiB0O2EucHVzaCh0KX1yZXR1cm4gYX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG4scixpPWUub3B0aW9ucyxvPXgubWFrZUFycmF5KHQpLGE9aS5sZW5ndGg7d2hpbGUoYS0tKXI9aVthXSwoci5zZWxlY3RlZD14LmluQXJyYXkoeChyKS52YWwoKSxvKT49MCkmJihuPSEwKTtyZXR1cm4gbnx8KGUuc2VsZWN0ZWRJbmRleD0tMSksb319fSxhdHRyOmZ1bmN0aW9uKGUsbixyKXt2YXIgbyxhLHM9ZS5ub2RlVHlwZTtpZihlJiYzIT09cyYmOCE9PXMmJjIhPT1zKXJldHVybiB0eXBlb2YgZS5nZXRBdHRyaWJ1dGU9PT1pP3gucHJvcChlLG4scik6KDE9PT1zJiZ4LmlzWE1MRG9jKGUpfHwobj1uLnRvTG93ZXJDYXNlKCksbz14LmF0dHJIb29rc1tuXXx8KHguZXhwci5tYXRjaC5ib29sLnRlc3Qobik/WDp6KSkscj09PXQ/byYmImdldCJpbiBvJiZudWxsIT09KGE9by5nZXQoZSxuKSk/YTooYT14LmZpbmQuYXR0cihlLG4pLG51bGw9PWE/dDphKTpudWxsIT09cj9vJiYic2V0ImluIG8mJihhPW8uc2V0KGUscixuKSkhPT10P2E6KGUuc2V0QXR0cmlidXRlKG4scisiIikscik6KHgucmVtb3ZlQXR0cihlLG4pLHQpKX0scmVtb3ZlQXR0cjpmdW5jdGlvbihlLHQpe3ZhciBuLHIsaT0wLG89dCYmdC5tYXRjaChUKTtpZihvJiYxPT09ZS5ub2RlVHlwZSl3aGlsZShuPW9baSsrXSlyPXgucHJvcEZpeFtuXXx8bix4LmV4cHIubWF0Y2guYm9vbC50ZXN0KG4pP0smJlF8fCFHLnRlc3Qobik/ZVtyXT0hMTplW3guY2FtZWxDYXNlKCJkZWZhdWx0LSIrbildPWVbcl09ITE6eC5hdHRyKGUsbiwiIiksZS5yZW1vdmVBdHRyaWJ1dGUoUT9uOnIpfSxhdHRySG9va3M6e3R5cGU6e3NldDpmdW5jdGlvbihlLHQpe2lmKCF4LnN1cHBvcnQucmFkaW9WYWx1ZSYmInJhZGlvIj09PXQmJngubm9kZU5hbWUoZSwiaW5wdXQiKSl7dmFyIG49ZS52YWx1ZTtyZXR1cm4gZS5zZXRBdHRyaWJ1dGUoInR5cGUiLHQpLG4mJihlLnZhbHVlPW4pLHR9fX19LHByb3BGaXg6eyJmb3IiOiJodG1sRm9yIiwiY2xhc3MiOiJjbGFzc05hbWUifSxwcm9wOmZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1lLm5vZGVUeXBlO2lmKGUmJjMhPT1zJiY4IT09cyYmMiE9PXMpcmV0dXJuIGE9MSE9PXN8fCF4LmlzWE1MRG9jKGUpLGEmJihuPXgucHJvcEZpeFtuXXx8bixvPXgucHJvcEhvb2tzW25dKSxyIT09dD9vJiYic2V0ImluIG8mJihpPW8uc2V0KGUscixuKSkhPT10P2k6ZVtuXT1yOm8mJiJnZXQiaW4gbyYmbnVsbCE9PShpPW8uZ2V0KGUsbikpP2k6ZVtuXX0scHJvcEhvb2tzOnt0YWJJbmRleDp7Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXguZmluZC5hdHRyKGUsInRhYmluZGV4Iik7cmV0dXJuIHQ/cGFyc2VJbnQodCwxMCk6WS50ZXN0KGUubm9kZU5hbWUpfHxKLnRlc3QoZS5ub2RlTmFtZSkmJmUuaHJlZj8wOi0xfX19fSksWD17c2V0OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdD09PSExP3gucmVtb3ZlQXR0cihlLG4pOksmJlF8fCFHLnRlc3Qobik/ZS5zZXRBdHRyaWJ1dGUoIVEmJngucHJvcEZpeFtuXXx8bixuKTplW3guY2FtZWxDYXNlKCJkZWZhdWx0LSIrbildPWVbbl09ITAsbn19LHguZWFjaCh4LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goL1x3Ky9nKSxmdW5jdGlvbihlLG4pe3ZhciByPXguZXhwci5hdHRySGFuZGxlW25dfHx4LmZpbmQuYXR0cjt4LmV4cHIuYXR0ckhhbmRsZVtuXT1LJiZRfHwhRy50ZXN0KG4pP2Z1bmN0aW9uKGUsbixpKXt2YXIgbz14LmV4cHIuYXR0ckhhbmRsZVtuXSxhPWk/dDooeC5leHByLmF0dHJIYW5kbGVbbl09dCkhPXIoZSxuLGkpP24udG9Mb3dlckNhc2UoKTpudWxsO3JldHVybiB4LmV4cHIuYXR0ckhhbmRsZVtuXT1vLGF9OmZ1bmN0aW9uKGUsbixyKXtyZXR1cm4gcj90OmVbeC5jYW1lbENhc2UoImRlZmF1bHQtIituKV0/bi50b0xvd2VyQ2FzZSgpOm51bGx9fSksSyYmUXx8KHguYXR0ckhvb2tzLnZhbHVlPXtzZXQ6ZnVuY3Rpb24oZSxuLHIpe3JldHVybiB4Lm5vZGVOYW1lKGUsImlucHV0Iik/KGUuZGVmYXVsdFZhbHVlPW4sdCk6eiYmei5zZXQoZSxuLHIpfX0pLFF8fCh6PXtzZXQ6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpPWUuZ2V0QXR0cmlidXRlTm9kZShyKTtyZXR1cm4gaXx8ZS5zZXRBdHRyaWJ1dGVOb2RlKGk9ZS5vd25lckRvY3VtZW50LmNyZWF0ZUF0dHJpYnV0ZShyKSksaS52YWx1ZT1uKz0iIiwidmFsdWUiPT09cnx8bj09PWUuZ2V0QXR0cmlidXRlKHIpP246dH19LHguZXhwci5hdHRySGFuZGxlLmlkPXguZXhwci5hdHRySGFuZGxlLm5hbWU9eC5leHByLmF0dHJIYW5kbGUuY29vcmRzPWZ1bmN0aW9uKGUsbixyKXt2YXIgaTtyZXR1cm4gcj90OihpPWUuZ2V0QXR0cmlidXRlTm9kZShuKSkmJiIiIT09aS52YWx1ZT9pLnZhbHVlOm51bGx9LHgudmFsSG9va3MuYnV0dG9uPXtnZXQ6ZnVuY3Rpb24oZSxuKXt2YXIgcj1lLmdldEF0dHJpYnV0ZU5vZGUobik7cmV0dXJuIHImJnIuc3BlY2lmaWVkP3IudmFsdWU6dH0sc2V0Onouc2V0fSx4LmF0dHJIb29rcy5jb250ZW50ZWRpdGFibGU9e3NldDpmdW5jdGlvbihlLHQsbil7ei5zZXQoZSwiIj09PXQ/ITE6dCxuKX19LHguZWFjaChbIndpZHRoIiwiaGVpZ2h0Il0sZnVuY3Rpb24oZSxuKXt4LmF0dHJIb29rc1tuXT17c2V0OmZ1bmN0aW9uKGUscil7cmV0dXJuIiI9PT1yPyhlLnNldEF0dHJpYnV0ZShuLCJhdXRvIikscik6dH19fSkpLHguc3VwcG9ydC5ocmVmTm9ybWFsaXplZHx8eC5lYWNoKFsiaHJlZiIsInNyYyJdLGZ1bmN0aW9uKGUsdCl7eC5wcm9wSG9va3NbdF09e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBdHRyaWJ1dGUodCw0KX19fSkseC5zdXBwb3J0LnN0eWxlfHwoeC5hdHRySG9va3Muc3R5bGU9e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0fHx0fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5zdHlsZS5jc3NUZXh0PXQrIiJ9fSkseC5zdXBwb3J0Lm9wdFNlbGVjdGVkfHwoeC5wcm9wSG9va3Muc2VsZWN0ZWQ9e2dldDpmdW5jdGlvbihlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJih0LnNlbGVjdGVkSW5kZXgsdC5wYXJlbnROb2RlJiZ0LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleCksbnVsbH19KSx4LmVhY2goWyJ0YWJJbmRleCIsInJlYWRPbmx5IiwibWF4TGVuZ3RoIiwiY2VsbFNwYWNpbmciLCJjZWxsUGFkZGluZyIsInJvd1NwYW4iLCJjb2xTcGFuIiwidXNlTWFwIiwiZnJhbWVCb3JkZXIiLCJjb250ZW50RWRpdGFibGUiXSxmdW5jdGlvbigpe3gucHJvcEZpeFt0aGlzLnRvTG93ZXJDYXNlKCldPXRoaXN9KSx4LnN1cHBvcnQuZW5jdHlwZXx8KHgucHJvcEZpeC5lbmN0eXBlPSJlbmNvZGluZyIpLHguZWFjaChbInJhZGlvIiwiY2hlY2tib3giXSxmdW5jdGlvbigpe3gudmFsSG9va3NbdGhpc109e3NldDpmdW5jdGlvbihlLG4pe3JldHVybiB4LmlzQXJyYXkobik/ZS5jaGVja2VkPXguaW5BcnJheSh4KGUpLnZhbCgpLG4pPj0wOnR9fSx4LnN1cHBvcnQuY2hlY2tPbnx8KHgudmFsSG9va3NbdGhpc10uZ2V0PWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09ZS5nZXRBdHRyaWJ1dGUoInZhbHVlIik/Im9uIjplLnZhbHVlfSl9KTt2YXIgWj0vXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYSkkL2ksZXQ9L15rZXkvLHR0PS9eKD86bW91c2V8Y29udGV4dG1lbnUpfGNsaWNrLyxudD0vXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8scnQ9L14oW14uXSopKD86XC4oLispfCkkLztmdW5jdGlvbiBpdCgpe3JldHVybiEwfWZ1bmN0aW9uIG90KCl7cmV0dXJuITF9ZnVuY3Rpb24gYXQoKXt0cnl7cmV0dXJuIGEuYWN0aXZlRWxlbWVudH1jYXRjaChlKXt9fXguZXZlbnQ9e2dsb2JhbDp7fSxhZGQ6ZnVuY3Rpb24oZSxuLHIsbyxhKXt2YXIgcyxsLHUsYyxwLGYsZCxoLGcsbSx5LHY9eC5fZGF0YShlKTtpZih2KXtyLmhhbmRsZXImJihjPXIscj1jLmhhbmRsZXIsYT1jLnNlbGVjdG9yKSxyLmd1aWR8fChyLmd1aWQ9eC5ndWlkKyspLChsPXYuZXZlbnRzKXx8KGw9di5ldmVudHM9e30pLChmPXYuaGFuZGxlKXx8KGY9di5oYW5kbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiB4PT09aXx8ZSYmeC5ldmVudC50cmlnZ2VyZWQ9PT1lLnR5cGU/dDp4LmV2ZW50LmRpc3BhdGNoLmFwcGx5KGYuZWxlbSxhcmd1bWVudHMpfSxmLmVsZW09ZSksbj0obnx8IiIpLm1hdGNoKFQpfHxbIiJdLHU9bi5sZW5ndGg7d2hpbGUodS0tKXM9cnQuZXhlYyhuW3VdKXx8W10sZz15PXNbMV0sbT0oc1syXXx8IiIpLnNwbGl0KCIuIikuc29ydCgpLGcmJihwPXguZXZlbnQuc3BlY2lhbFtnXXx8e30sZz0oYT9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8ZyxwPXguZXZlbnQuc3BlY2lhbFtnXXx8e30sZD14LmV4dGVuZCh7dHlwZTpnLG9yaWdUeXBlOnksZGF0YTpvLGhhbmRsZXI6cixndWlkOnIuZ3VpZCxzZWxlY3RvcjphLG5lZWRzQ29udGV4dDphJiZ4LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoYSksbmFtZXNwYWNlOm0uam9pbigiLiIpfSxjKSwoaD1sW2ddKXx8KGg9bFtnXT1bXSxoLmRlbGVnYXRlQ291bnQ9MCxwLnNldHVwJiZwLnNldHVwLmNhbGwoZSxvLG0sZikhPT0hMXx8KGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIoZyxmLCExKTplLmF0dGFjaEV2ZW50JiZlLmF0dGFjaEV2ZW50KCJvbiIrZyxmKSkpLHAuYWRkJiYocC5hZGQuY2FsbChlLGQpLGQuaGFuZGxlci5ndWlkfHwoZC5oYW5kbGVyLmd1aWQ9ci5ndWlkKSksYT9oLnNwbGljZShoLmRlbGVnYXRlQ291bnQrKywwLGQpOmgucHVzaChkKSx4LmV2ZW50Lmdsb2JhbFtnXT0hMCk7ZT1udWxsfX0scmVtb3ZlOmZ1bmN0aW9uKGUsdCxuLHIsaSl7dmFyIG8sYSxzLGwsdSxjLHAsZixkLGgsZyxtPXguaGFzRGF0YShlKSYmeC5fZGF0YShlKTtpZihtJiYoYz1tLmV2ZW50cykpe3Q9KHR8fCIiKS5tYXRjaChUKXx8WyIiXSx1PXQubGVuZ3RoO3doaWxlKHUtLSlpZihzPXJ0LmV4ZWModFt1XSl8fFtdLGQ9Zz1zWzFdLGg9KHNbMl18fCIiKS5zcGxpdCgiLiIpLnNvcnQoKSxkKXtwPXguZXZlbnQuc3BlY2lhbFtkXXx8e30sZD0ocj9wLmRlbGVnYXRlVHlwZTpwLmJpbmRUeXBlKXx8ZCxmPWNbZF18fFtdLHM9c1syXSYmUmVnRXhwKCIoXnxcXC4pIitoLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpLGw9bz1mLmxlbmd0aDt3aGlsZShvLS0pYT1mW29dLCFpJiZnIT09YS5vcmlnVHlwZXx8biYmbi5ndWlkIT09YS5ndWlkfHxzJiYhcy50ZXN0KGEubmFtZXNwYWNlKXx8ciYmciE9PWEuc2VsZWN0b3ImJigiKioiIT09cnx8IWEuc2VsZWN0b3IpfHwoZi5zcGxpY2UobywxKSxhLnNlbGVjdG9yJiZmLmRlbGVnYXRlQ291bnQtLSxwLnJlbW92ZSYmcC5yZW1vdmUuY2FsbChlLGEpKTtsJiYhZi5sZW5ndGgmJihwLnRlYXJkb3duJiZwLnRlYXJkb3duLmNhbGwoZSxoLG0uaGFuZGxlKSE9PSExfHx4LnJlbW92ZUV2ZW50KGUsZCxtLmhhbmRsZSksZGVsZXRlIGNbZF0pfWVsc2UgZm9yKGQgaW4gYyl4LmV2ZW50LnJlbW92ZShlLGQrdFt1XSxuLHIsITApO3guaXNFbXB0eU9iamVjdChjKSYmKGRlbGV0ZSBtLmhhbmRsZSx4Ll9yZW1vdmVEYXRhKGUsImV2ZW50cyIpKX19LHRyaWdnZXI6ZnVuY3Rpb24obixyLGksbyl7dmFyIHMsbCx1LGMscCxmLGQsaD1baXx8YV0sZz12LmNhbGwobiwidHlwZSIpP24udHlwZTpuLG09di5jYWxsKG4sIm5hbWVzcGFjZSIpP24ubmFtZXNwYWNlLnNwbGl0KCIuIik6W107aWYodT1mPWk9aXx8YSwzIT09aS5ub2RlVHlwZSYmOCE9PWkubm9kZVR5cGUmJiFudC50ZXN0KGcreC5ldmVudC50cmlnZ2VyZWQpJiYoZy5pbmRleE9mKCIuIik+PTAmJihtPWcuc3BsaXQoIi4iKSxnPW0uc2hpZnQoKSxtLnNvcnQoKSksbD0wPmcuaW5kZXhPZigiOiIpJiYib24iK2csbj1uW3guZXhwYW5kb10/bjpuZXcgeC5FdmVudChnLCJvYmplY3QiPT10eXBlb2YgbiYmbiksbi5pc1RyaWdnZXI9bz8yOjMsbi5uYW1lc3BhY2U9bS5qb2luKCIuIiksbi5uYW1lc3BhY2VfcmU9bi5uYW1lc3BhY2U/UmVnRXhwKCIoXnxcXC4pIittLmpvaW4oIlxcLig/Oi4qXFwufCkiKSsiKFxcLnwkKSIpOm51bGwsbi5yZXN1bHQ9dCxuLnRhcmdldHx8KG4udGFyZ2V0PWkpLHI9bnVsbD09cj9bbl06eC5tYWtlQXJyYXkocixbbl0pLHA9eC5ldmVudC5zcGVjaWFsW2ddfHx7fSxvfHwhcC50cmlnZ2VyfHxwLnRyaWdnZXIuYXBwbHkoaSxyKSE9PSExKSl7aWYoIW8mJiFwLm5vQnViYmxlJiYheC5pc1dpbmRvdyhpKSl7Zm9yKGM9cC5kZWxlZ2F0ZVR5cGV8fGcsbnQudGVzdChjK2cpfHwodT11LnBhcmVudE5vZGUpO3U7dT11LnBhcmVudE5vZGUpaC5wdXNoKHUpLGY9dTtmPT09KGkub3duZXJEb2N1bWVudHx8YSkmJmgucHVzaChmLmRlZmF1bHRWaWV3fHxmLnBhcmVudFdpbmRvd3x8ZSl9ZD0wO3doaWxlKCh1PWhbZCsrXSkmJiFuLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpbi50eXBlPWQ+MT9jOnAuYmluZFR5cGV8fGcscz0oeC5fZGF0YSh1LCJldmVudHMiKXx8e30pW24udHlwZV0mJnguX2RhdGEodSwiaGFuZGxlIikscyYmcy5hcHBseSh1LHIpLHM9bCYmdVtsXSxzJiZ4LmFjY2VwdERhdGEodSkmJnMuYXBwbHkmJnMuYXBwbHkodSxyKT09PSExJiZuLnByZXZlbnREZWZhdWx0KCk7aWYobi50eXBlPWcsIW8mJiFuLmlzRGVmYXVsdFByZXZlbnRlZCgpJiYoIXAuX2RlZmF1bHR8fHAuX2RlZmF1bHQuYXBwbHkoaC5wb3AoKSxyKT09PSExKSYmeC5hY2NlcHREYXRhKGkpJiZsJiZpW2ddJiYheC5pc1dpbmRvdyhpKSl7Zj1pW2xdLGYmJihpW2xdPW51bGwpLHguZXZlbnQudHJpZ2dlcmVkPWc7dHJ5e2lbZ10oKX1jYXRjaCh5KXt9eC5ldmVudC50cmlnZ2VyZWQ9dCxmJiYoaVtsXT1mKX1yZXR1cm4gbi5yZXN1bHR9fSxkaXNwYXRjaDpmdW5jdGlvbihlKXtlPXguZXZlbnQuZml4KGUpO3ZhciBuLHIsaSxvLGEscz1bXSxsPWcuY2FsbChhcmd1bWVudHMpLHU9KHguX2RhdGEodGhpcywiZXZlbnRzIil8fHt9KVtlLnR5cGVdfHxbXSxjPXguZXZlbnQuc3BlY2lhbFtlLnR5cGVdfHx7fTtpZihsWzBdPWUsZS5kZWxlZ2F0ZVRhcmdldD10aGlzLCFjLnByZURpc3BhdGNofHxjLnByZURpc3BhdGNoLmNhbGwodGhpcyxlKSE9PSExKXtzPXguZXZlbnQuaGFuZGxlcnMuY2FsbCh0aGlzLGUsdSksbj0wO3doaWxlKChvPXNbbisrXSkmJiFlLmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpe2UuY3VycmVudFRhcmdldD1vLmVsZW0sYT0wO3doaWxlKChpPW8uaGFuZGxlcnNbYSsrXSkmJiFlLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpKCFlLm5hbWVzcGFjZV9yZXx8ZS5uYW1lc3BhY2VfcmUudGVzdChpLm5hbWVzcGFjZSkpJiYoZS5oYW5kbGVPYmo9aSxlLmRhdGE9aS5kYXRhLHI9KCh4LmV2ZW50LnNwZWNpYWxbaS5vcmlnVHlwZV18fHt9KS5oYW5kbGV8fGkuaGFuZGxlcikuYXBwbHkoby5lbGVtLGwpLHIhPT10JiYoZS5yZXN1bHQ9cik9PT0hMSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKSl9cmV0dXJuIGMucG9zdERpc3BhdGNoJiZjLnBvc3REaXNwYXRjaC5jYWxsKHRoaXMsZSksZS5yZXN1bHR9fSxoYW5kbGVyczpmdW5jdGlvbihlLG4pe3ZhciByLGksbyxhLHM9W10sbD1uLmRlbGVnYXRlQ291bnQsdT1lLnRhcmdldDtpZihsJiZ1Lm5vZGVUeXBlJiYoIWUuYnV0dG9ufHwiY2xpY2siIT09ZS50eXBlKSlmb3IoO3UhPXRoaXM7dT11LnBhcmVudE5vZGV8fHRoaXMpaWYoMT09PXUubm9kZVR5cGUmJih1LmRpc2FibGVkIT09ITB8fCJjbGljayIhPT1lLnR5cGUpKXtmb3Iobz1bXSxhPTA7bD5hO2ErKylpPW5bYV0scj1pLnNlbGVjdG9yKyIgIixvW3JdPT09dCYmKG9bcl09aS5uZWVkc0NvbnRleHQ/eChyLHRoaXMpLmluZGV4KHUpPj0wOnguZmluZChyLHRoaXMsbnVsbCxbdV0pLmxlbmd0aCksb1tyXSYmby5wdXNoKGkpO28ubGVuZ3RoJiZzLnB1c2goe2VsZW06dSxoYW5kbGVyczpvfSl9cmV0dXJuIG4ubGVuZ3RoPmwmJnMucHVzaCh7ZWxlbTp0aGlzLGhhbmRsZXJzOm4uc2xpY2UobCl9KSxzfSxmaXg6ZnVuY3Rpb24oZSl7aWYoZVt4LmV4cGFuZG9dKXJldHVybiBlO3ZhciB0LG4scixpPWUudHlwZSxvPWUscz10aGlzLmZpeEhvb2tzW2ldO3N8fCh0aGlzLmZpeEhvb2tzW2ldPXM9dHQudGVzdChpKT90aGlzLm1vdXNlSG9va3M6ZXQudGVzdChpKT90aGlzLmtleUhvb2tzOnt9KSxyPXMucHJvcHM/dGhpcy5wcm9wcy5jb25jYXQocy5wcm9wcyk6dGhpcy5wcm9wcyxlPW5ldyB4LkV2ZW50KG8pLHQ9ci5sZW5ndGg7d2hpbGUodC0tKW49clt0XSxlW25dPW9bbl07cmV0dXJuIGUudGFyZ2V0fHwoZS50YXJnZXQ9by5zcmNFbGVtZW50fHxhKSwzPT09ZS50YXJnZXQubm9kZVR5cGUmJihlLnRhcmdldD1lLnRhcmdldC5wYXJlbnROb2RlKSxlLm1ldGFLZXk9ISFlLm1ldGFLZXkscy5maWx0ZXI/cy5maWx0ZXIoZSxvKTplfSxwcm9wczoiYWx0S2V5IGJ1YmJsZXMgY2FuY2VsYWJsZSBjdHJsS2V5IGN1cnJlbnRUYXJnZXQgZXZlbnRQaGFzZSBtZXRhS2V5IHJlbGF0ZWRUYXJnZXQgc2hpZnRLZXkgdGFyZ2V0IHRpbWVTdGFtcCB2aWV3IHdoaWNoIi5zcGxpdCgiICIpLGZpeEhvb2tzOnt9LGtleUhvb2tzOntwcm9wczoiY2hhciBjaGFyQ29kZSBrZXkga2V5Q29kZSIuc3BsaXQoIiAiKSxmaWx0ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbnVsbD09ZS53aGljaCYmKGUud2hpY2g9bnVsbCE9dC5jaGFyQ29kZT90LmNoYXJDb2RlOnQua2V5Q29kZSksZX19LG1vdXNlSG9va3M6e3Byb3BzOiJidXR0b24gYnV0dG9ucyBjbGllbnRYIGNsaWVudFkgZnJvbUVsZW1lbnQgb2Zmc2V0WCBvZmZzZXRZIHBhZ2VYIHBhZ2VZIHNjcmVlblggc2NyZWVuWSB0b0VsZW1lbnQiLnNwbGl0KCIgIiksZmlsdGVyOmZ1bmN0aW9uKGUsbil7dmFyIHIsaSxvLHM9bi5idXR0b24sbD1uLmZyb21FbGVtZW50O3JldHVybiBudWxsPT1lLnBhZ2VYJiZudWxsIT1uLmNsaWVudFgmJihpPWUudGFyZ2V0Lm93bmVyRG9jdW1lbnR8fGEsbz1pLmRvY3VtZW50RWxlbWVudCxyPWkuYm9keSxlLnBhZ2VYPW4uY2xpZW50WCsobyYmby5zY3JvbGxMZWZ0fHxyJiZyLnNjcm9sbExlZnR8fDApLShvJiZvLmNsaWVudExlZnR8fHImJnIuY2xpZW50TGVmdHx8MCksZS5wYWdlWT1uLmNsaWVudFkrKG8mJm8uc2Nyb2xsVG9wfHxyJiZyLnNjcm9sbFRvcHx8MCktKG8mJm8uY2xpZW50VG9wfHxyJiZyLmNsaWVudFRvcHx8MCkpLCFlLnJlbGF0ZWRUYXJnZXQmJmwmJihlLnJlbGF0ZWRUYXJnZXQ9bD09PWUudGFyZ2V0P24udG9FbGVtZW50OmwpLGUud2hpY2h8fHM9PT10fHwoZS53aGljaD0xJnM/MToyJnM/Mzo0JnM/MjowKSxlfX0sc3BlY2lhbDp7bG9hZDp7bm9CdWJibGU6ITB9LGZvY3VzOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7aWYodGhpcyE9PWF0KCkmJnRoaXMuZm9jdXMpdHJ5e3JldHVybiB0aGlzLmZvY3VzKCksITF9Y2F0Y2goZSl7fX0sZGVsZWdhdGVUeXBlOiJmb2N1c2luIn0sYmx1cjp7dHJpZ2dlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzPT09YXQoKSYmdGhpcy5ibHVyPyh0aGlzLmJsdXIoKSwhMSk6dH0sZGVsZWdhdGVUeXBlOiJmb2N1c291dCJ9LGNsaWNrOnt0cmlnZ2VyOmZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZU5hbWUodGhpcywiaW5wdXQiKSYmImNoZWNrYm94Ij09PXRoaXMudHlwZSYmdGhpcy5jbGljaz8odGhpcy5jbGljaygpLCExKTp0fSxfZGVmYXVsdDpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLnRhcmdldCwiYSIpfX0sYmVmb3JldW5sb2FkOntwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5yZXN1bHQhPT10JiYoZS5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlPWUucmVzdWx0KX19fSxzaW11bGF0ZTpmdW5jdGlvbihlLHQsbixyKXt2YXIgaT14LmV4dGVuZChuZXcgeC5FdmVudCxuLHt0eXBlOmUsaXNTaW11bGF0ZWQ6ITAsb3JpZ2luYWxFdmVudDp7fX0pO3I/eC5ldmVudC50cmlnZ2VyKGksbnVsbCx0KTp4LmV2ZW50LmRpc3BhdGNoLmNhbGwodCxpKSxpLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZuLnByZXZlbnREZWZhdWx0KCl9fSx4LnJlbW92ZUV2ZW50PWEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9mdW5jdGlvbihlLHQsbil7ZS5yZW1vdmVFdmVudExpc3RlbmVyJiZlLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKX06ZnVuY3Rpb24oZSx0LG4pe3ZhciByPSJvbiIrdDtlLmRldGFjaEV2ZW50JiYodHlwZW9mIGVbcl09PT1pJiYoZVtyXT1udWxsKSxlLmRldGFjaEV2ZW50KHIsbikpfSx4LkV2ZW50PWZ1bmN0aW9uKGUsbil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiB4LkV2ZW50PyhlJiZlLnR5cGU/KHRoaXMub3JpZ2luYWxFdmVudD1lLHRoaXMudHlwZT1lLnR5cGUsdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9ZS5kZWZhdWx0UHJldmVudGVkfHxlLnJldHVyblZhbHVlPT09ITF8fGUuZ2V0UHJldmVudERlZmF1bHQmJmUuZ2V0UHJldmVudERlZmF1bHQoKT9pdDpvdCk6dGhpcy50eXBlPWUsbiYmeC5leHRlbmQodGhpcyxuKSx0aGlzLnRpbWVTdGFtcD1lJiZlLnRpbWVTdGFtcHx8eC5ub3coKSx0aGlzW3guZXhwYW5kb109ITAsdCk6bmV3IHguRXZlbnQoZSxuKX0seC5FdmVudC5wcm90b3R5cGU9e2lzRGVmYXVsdFByZXZlbnRlZDpvdCxpc1Byb3BhZ2F0aW9uU3RvcHBlZDpvdCxpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDpvdCxwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1pdCxlJiYoZS5wcmV2ZW50RGVmYXVsdD9lLnByZXZlbnREZWZhdWx0KCk6ZS5yZXR1cm5WYWx1ZT0hMSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3JpZ2luYWxFdmVudDt0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWl0LGUmJihlLnN0b3BQcm9wYWdhdGlvbiYmZS5zdG9wUHJvcGFnYXRpb24oKSxlLmNhbmNlbEJ1YmJsZT0hMCl9LHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3RoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ9aXQsdGhpcy5zdG9wUHJvcGFnYXRpb24oKX19LHguZWFjaCh7bW91c2VlbnRlcjoibW91c2VvdmVyIixtb3VzZWxlYXZlOiJtb3VzZW91dCJ9LGZ1bmN0aW9uKGUsdCl7eC5ldmVudC5zcGVjaWFsW2VdPXtkZWxlZ2F0ZVR5cGU6dCxiaW5kVHlwZTp0LGhhbmRsZTpmdW5jdGlvbihlKXt2YXIgbixyPXRoaXMsaT1lLnJlbGF0ZWRUYXJnZXQsbz1lLmhhbmRsZU9iajtyZXR1cm4oIWl8fGkhPT1yJiYheC5jb250YWlucyhyLGkpKSYmKGUudHlwZT1vLm9yaWdUeXBlLG49by5oYW5kbGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlLnR5cGU9dCksbn19fSkseC5zdXBwb3J0LnN1Ym1pdEJ1YmJsZXN8fCh4LmV2ZW50LnNwZWNpYWwuc3VibWl0PXtzZXR1cDpmdW5jdGlvbigpe3JldHVybiB4Lm5vZGVOYW1lKHRoaXMsImZvcm0iKT8hMTooeC5ldmVudC5hZGQodGhpcywiY2xpY2suX3N1Ym1pdCBrZXlwcmVzcy5fc3VibWl0IixmdW5jdGlvbihlKXt2YXIgbj1lLnRhcmdldCxyPXgubm9kZU5hbWUobiwiaW5wdXQiKXx8eC5ub2RlTmFtZShuLCJidXR0b24iKT9uLmZvcm06dDtyJiYheC5fZGF0YShyLCJzdWJtaXRCdWJibGVzIikmJih4LmV2ZW50LmFkZChyLCJzdWJtaXQuX3N1Ym1pdCIsZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZT0hMH0pLHguX2RhdGEociwic3VibWl0QnViYmxlcyIsITApKX0pLHQpfSxwb3N0RGlzcGF0Y2g6ZnVuY3Rpb24oZSl7ZS5fc3VibWl0X2J1YmJsZSYmKGRlbGV0ZSBlLl9zdWJtaXRfYnViYmxlLHRoaXMucGFyZW50Tm9kZSYmIWUuaXNUcmlnZ2VyJiZ4LmV2ZW50LnNpbXVsYXRlKCJzdWJtaXQiLHRoaXMucGFyZW50Tm9kZSxlLCEwKSl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7cmV0dXJuIHgubm9kZU5hbWUodGhpcywiZm9ybSIpPyExOih4LmV2ZW50LnJlbW92ZSh0aGlzLCIuX3N1Ym1pdCIpLHQpfX0pLHguc3VwcG9ydC5jaGFuZ2VCdWJibGVzfHwoeC5ldmVudC5zcGVjaWFsLmNoYW5nZT17c2V0dXA6ZnVuY3Rpb24oKXtyZXR1cm4gWi50ZXN0KHRoaXMubm9kZU5hbWUpPygoImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZSkmJih4LmV2ZW50LmFkZCh0aGlzLCJwcm9wZXJ0eWNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXsiY2hlY2tlZCI9PT1lLm9yaWdpbmFsRXZlbnQucHJvcGVydHlOYW1lJiYodGhpcy5fanVzdF9jaGFuZ2VkPSEwKX0pLHguZXZlbnQuYWRkKHRoaXMsImNsaWNrLl9jaGFuZ2UiLGZ1bmN0aW9uKGUpe3RoaXMuX2p1c3RfY2hhbmdlZCYmIWUuaXNUcmlnZ2VyJiYodGhpcy5fanVzdF9jaGFuZ2VkPSExKSx4LmV2ZW50LnNpbXVsYXRlKCJjaGFuZ2UiLHRoaXMsZSwhMCl9KSksITEpOih4LmV2ZW50LmFkZCh0aGlzLCJiZWZvcmVhY3RpdmF0ZS5fY2hhbmdlIixmdW5jdGlvbihlKXt2YXIgdD1lLnRhcmdldDtaLnRlc3QodC5ub2RlTmFtZSkmJiF4Ll9kYXRhKHQsImNoYW5nZUJ1YmJsZXMiKSYmKHguZXZlbnQuYWRkKHQsImNoYW5nZS5fY2hhbmdlIixmdW5jdGlvbihlKXshdGhpcy5wYXJlbnROb2RlfHxlLmlzU2ltdWxhdGVkfHxlLmlzVHJpZ2dlcnx8eC5ldmVudC5zaW11bGF0ZSgiY2hhbmdlIix0aGlzLnBhcmVudE5vZGUsZSwhMCl9KSx4Ll9kYXRhKHQsImNoYW5nZUJ1YmJsZXMiLCEwKSl9KSx0KX0saGFuZGxlOmZ1bmN0aW9uKGUpe3ZhciBuPWUudGFyZ2V0O3JldHVybiB0aGlzIT09bnx8ZS5pc1NpbXVsYXRlZHx8ZS5pc1RyaWdnZXJ8fCJyYWRpbyIhPT1uLnR5cGUmJiJjaGVja2JveCIhPT1uLnR5cGU/ZS5oYW5kbGVPYmouaGFuZGxlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dH0sdGVhcmRvd246ZnVuY3Rpb24oKXtyZXR1cm4geC5ldmVudC5yZW1vdmUodGhpcywiLl9jaGFuZ2UiKSwhWi50ZXN0KHRoaXMubm9kZU5hbWUpfX0pLHguc3VwcG9ydC5mb2N1c2luQnViYmxlc3x8eC5lYWNoKHtmb2N1czoiZm9jdXNpbiIsYmx1cjoiZm9jdXNvdXQifSxmdW5jdGlvbihlLHQpe3ZhciBuPTAscj1mdW5jdGlvbihlKXt4LmV2ZW50LnNpbXVsYXRlKHQsZS50YXJnZXQseC5ldmVudC5maXgoZSksITApfTt4LmV2ZW50LnNwZWNpYWxbdF09e3NldHVwOmZ1bmN0aW9uKCl7MD09PW4rKyYmYS5hZGRFdmVudExpc3RlbmVyKGUsciwhMCl9LHRlYXJkb3duOmZ1bmN0aW9uKCl7MD09PS0tbiYmYS5yZW1vdmVFdmVudExpc3RlbmVyKGUsciwhMCl9fX0pLHguZm4uZXh0ZW5kKHtvbjpmdW5jdGlvbihlLG4scixpLG8pe3ZhciBhLHM7aWYoIm9iamVjdCI9PXR5cGVvZiBlKXsic3RyaW5nIiE9dHlwZW9mIG4mJihyPXJ8fG4sbj10KTtmb3IoYSBpbiBlKXRoaXMub24oYSxuLHIsZVthXSxvKTtyZXR1cm4gdGhpc31pZihudWxsPT1yJiZudWxsPT1pPyhpPW4scj1uPXQpOm51bGw9PWkmJigic3RyaW5nIj09dHlwZW9mIG4/KGk9cixyPXQpOihpPXIscj1uLG49dCkpLGk9PT0hMSlpPW90O2Vsc2UgaWYoIWkpcmV0dXJuIHRoaXM7cmV0dXJuIDE9PT1vJiYocz1pLGk9ZnVuY3Rpb24oZSl7cmV0dXJuIHgoKS5vZmYoZSkscy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGkuZ3VpZD1zLmd1aWR8fChzLmd1aWQ9eC5ndWlkKyspKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt4LmV2ZW50LmFkZCh0aGlzLGUsaSxyLG4pfSl9LG9uZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbihlLHQsbixyLDEpfSxvZmY6ZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG87aWYoZSYmZS5wcmV2ZW50RGVmYXVsdCYmZS5oYW5kbGVPYmopcmV0dXJuIGk9ZS5oYW5kbGVPYmoseChlLmRlbGVnYXRlVGFyZ2V0KS5vZmYoaS5uYW1lc3BhY2U/aS5vcmlnVHlwZSsiLiIraS5uYW1lc3BhY2U6aS5vcmlnVHlwZSxpLnNlbGVjdG9yLGkuaGFuZGxlciksdGhpcztpZigib2JqZWN0Ij09dHlwZW9mIGUpe2ZvcihvIGluIGUpdGhpcy5vZmYobyxuLGVbb10pO3JldHVybiB0aGlzfXJldHVybihuPT09ITF8fCJmdW5jdGlvbiI9PXR5cGVvZiBuKSYmKHI9bixuPXQpLHI9PT0hMSYmKHI9b3QpLHRoaXMuZWFjaChmdW5jdGlvbigpe3guZXZlbnQucmVtb3ZlKHRoaXMsZSxyLG4pfSl9LHRyaWdnZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7eC5ldmVudC50cmlnZ2VyKGUsdCx0aGlzKX0pfSx0cmlnZ2VySGFuZGxlcjpmdW5jdGlvbihlLG4pe3ZhciByPXRoaXNbMF07cmV0dXJuIHI/eC5ldmVudC50cmlnZ2VyKGUsbixyLCEwKTp0fX0pO3ZhciBzdD0vXi5bXjojXFtcLixdKiQvLGx0PS9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLHV0PXguZXhwci5tYXRjaC5uZWVkc0NvbnRleHQsY3Q9e2NoaWxkcmVuOiEwLGNvbnRlbnRzOiEwLG5leHQ6ITAscHJldjohMH07eC5mbi5leHRlbmQoe2ZpbmQ6ZnVuY3Rpb24oZSl7dmFyIHQsbj1bXSxyPXRoaXMsaT1yLmxlbmd0aDtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHRoaXMucHVzaFN0YWNrKHgoZSkuZmlsdGVyKGZ1bmN0aW9uKCl7Zm9yKHQ9MDtpPnQ7dCsrKWlmKHguY29udGFpbnMoclt0XSx0aGlzKSlyZXR1cm4hMH0pKTtmb3IodD0wO2k+dDt0KyspeC5maW5kKGUsclt0XSxuKTtyZXR1cm4gbj10aGlzLnB1c2hTdGFjayhpPjE/eC51bmlxdWUobik6biksbi5zZWxlY3Rvcj10aGlzLnNlbGVjdG9yP3RoaXMuc2VsZWN0b3IrIiAiK2U6ZSxufSxoYXM6ZnVuY3Rpb24oZSl7dmFyIHQsbj14KGUsdGhpcykscj1uLmxlbmd0aDtyZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oKXtmb3IodD0wO3I+dDt0KyspaWYoeC5jb250YWlucyh0aGlzLG5bdF0pKXJldHVybiEwfSl9LG5vdDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wdXNoU3RhY2soZnQodGhpcyxlfHxbXSwhMCkpfSxmaWx0ZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGZ0KHRoaXMsZXx8W10sITEpKX0saXM6ZnVuY3Rpb24oZSl7cmV0dXJuISFmdCh0aGlzLCJzdHJpbmciPT10eXBlb2YgZSYmdXQudGVzdChlKT94KGUpOmV8fFtdLCExKS5sZW5ndGh9LGNsb3Nlc3Q6ZnVuY3Rpb24oZSx0KXt2YXIgbixyPTAsaT10aGlzLmxlbmd0aCxvPVtdLGE9dXQudGVzdChlKXx8InN0cmluZyIhPXR5cGVvZiBlP3goZSx0fHx0aGlzLmNvbnRleHQpOjA7Zm9yKDtpPnI7cisrKWZvcihuPXRoaXNbcl07biYmbiE9PXQ7bj1uLnBhcmVudE5vZGUpaWYoMTE+bi5ub2RlVHlwZSYmKGE/YS5pbmRleChuKT4tMToxPT09bi5ub2RlVHlwZSYmeC5maW5kLm1hdGNoZXNTZWxlY3RvcihuLGUpKSl7bj1vLnB1c2gobik7YnJlYWt9cmV0dXJuIHRoaXMucHVzaFN0YWNrKG8ubGVuZ3RoPjE/eC51bmlxdWUobyk6byl9LGluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlPyJzdHJpbmciPT10eXBlb2YgZT94LmluQXJyYXkodGhpc1swXSx4KGUpKTp4LmluQXJyYXkoZS5qcXVlcnk/ZVswXTplLHRoaXMpOnRoaXNbMF0mJnRoaXNbMF0ucGFyZW50Tm9kZT90aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aDotMX0sYWRkOmZ1bmN0aW9uKGUsdCl7dmFyIG49InN0cmluZyI9PXR5cGVvZiBlP3goZSx0KTp4Lm1ha2VBcnJheShlJiZlLm5vZGVUeXBlP1tlXTplKSxyPXgubWVyZ2UodGhpcy5nZXQoKSxuKTtyZXR1cm4gdGhpcy5wdXNoU3RhY2soeC51bmlxdWUocikpfSxhZGRCYWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmFkZChudWxsPT1lP3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKGUpKX19KTtmdW5jdGlvbiBwdChlLHQpe2RvIGU9ZVt0XTt3aGlsZShlJiYxIT09ZS5ub2RlVHlwZSk7cmV0dXJuIGV9eC5lYWNoKHtwYXJlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJlbnROb2RlO3JldHVybiB0JiYxMSE9PXQubm9kZVR5cGU/dDpudWxsfSxwYXJlbnRzOmZ1bmN0aW9uKGUpe3JldHVybiB4LmRpcihlLCJwYXJlbnROb2RlIil9LHBhcmVudHNVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsInBhcmVudE5vZGUiLG4pfSxuZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJuZXh0U2libGluZyIpfSxwcmV2OmZ1bmN0aW9uKGUpe3JldHVybiBwdChlLCJwcmV2aW91c1NpYmxpbmciKX0sbmV4dEFsbDpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwibmV4dFNpYmxpbmciKX0scHJldkFsbDpmdW5jdGlvbihlKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIil9LG5leHRVbnRpbDpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHguZGlyKGUsIm5leHRTaWJsaW5nIixuKX0scHJldlVudGlsOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4geC5kaXIoZSwicHJldmlvdXNTaWJsaW5nIixuKX0sc2libGluZ3M6ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZygoZS5wYXJlbnROb2RlfHx7fSkuZmlyc3RDaGlsZCxlKX0sY2hpbGRyZW46ZnVuY3Rpb24oZSl7cmV0dXJuIHguc2libGluZyhlLmZpcnN0Q2hpbGQpfSxjb250ZW50czpmdW5jdGlvbihlKXtyZXR1cm4geC5ub2RlTmFtZShlLCJpZnJhbWUiKT9lLmNvbnRlbnREb2N1bWVudHx8ZS5jb250ZW50V2luZG93LmRvY3VtZW50OngubWVyZ2UoW10sZS5jaGlsZE5vZGVzKX19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihuLHIpe3ZhciBpPXgubWFwKHRoaXMsdCxuKTtyZXR1cm4iVW50aWwiIT09ZS5zbGljZSgtNSkmJihyPW4pLHImJiJzdHJpbmciPT10eXBlb2YgciYmKGk9eC5maWx0ZXIocixpKSksdGhpcy5sZW5ndGg+MSYmKGN0W2VdfHwoaT14LnVuaXF1ZShpKSksbHQudGVzdChlKSYmKGk9aS5yZXZlcnNlKCkpKSx0aGlzLnB1c2hTdGFjayhpKX19KSx4LmV4dGVuZCh7ZmlsdGVyOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj10WzBdO3JldHVybiBuJiYoZT0iOm5vdCgiK2UrIikiKSwxPT09dC5sZW5ndGgmJjE9PT1yLm5vZGVUeXBlP3guZmluZC5tYXRjaGVzU2VsZWN0b3IocixlKT9bcl06W106eC5maW5kLm1hdGNoZXMoZSx4LmdyZXAodCxmdW5jdGlvbihlKXtyZXR1cm4gMT09PWUubm9kZVR5cGV9KSl9LGRpcjpmdW5jdGlvbihlLG4scil7dmFyIGk9W10sbz1lW25dO3doaWxlKG8mJjkhPT1vLm5vZGVUeXBlJiYocj09PXR8fDEhPT1vLm5vZGVUeXBlfHwheChvKS5pcyhyKSkpMT09PW8ubm9kZVR5cGUmJmkucHVzaChvKSxvPW9bbl07cmV0dXJuIGl9LHNpYmxpbmc6ZnVuY3Rpb24oZSx0KXt2YXIgbj1bXTtmb3IoO2U7ZT1lLm5leHRTaWJsaW5nKTE9PT1lLm5vZGVUeXBlJiZlIT09dCYmbi5wdXNoKGUpO3JldHVybiBufX0pO2Z1bmN0aW9uIGZ0KGUsdCxuKXtpZih4LmlzRnVuY3Rpb24odCkpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUscil7cmV0dXJuISF0LmNhbGwoZSxyLGUpIT09bn0pO2lmKHQubm9kZVR5cGUpcmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiBlPT09dCE9PW59KTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2lmKHN0LnRlc3QodCkpcmV0dXJuIHguZmlsdGVyKHQsZSxuKTt0PXguZmlsdGVyKHQsZSl9cmV0dXJuIHguZ3JlcChlLGZ1bmN0aW9uKGUpe3JldHVybiB4LmluQXJyYXkoZSx0KT49MCE9PW59KX1mdW5jdGlvbiBkdChlKXt2YXIgdD1odC5zcGxpdCgifCIpLG49ZS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7aWYobi5jcmVhdGVFbGVtZW50KXdoaWxlKHQubGVuZ3RoKW4uY3JlYXRlRWxlbWVudCh0LnBvcCgpKTtyZXR1cm4gbn12YXIgaHQ9ImFiYnJ8YXJ0aWNsZXxhc2lkZXxhdWRpb3xiZGl8Y2FudmFzfGRhdGF8ZGF0YWxpc3R8ZGV0YWlsc3xmaWdjYXB0aW9ufGZpZ3VyZXxmb290ZXJ8aGVhZGVyfGhncm91cHxtYXJrfG1ldGVyfG5hdnxvdXRwdXR8cHJvZ3Jlc3N8c2VjdGlvbnxzdW1tYXJ5fHRpbWV8dmlkZW8iLGd0PS8galF1ZXJ5XGQrPSIoPzpudWxsfFxkKykiL2csbXQ9UmVnRXhwKCI8KD86IitodCsiKVtcXHMvPl0iLCJpIikseXQ9L15ccysvLHZ0PS88KD8hYXJlYXxicnxjb2x8ZW1iZWR8aHJ8aW1nfGlucHV0fGxpbmt8bWV0YXxwYXJhbSkoKFtcdzpdKylbXj5dKilcLz4vZ2ksYnQ9LzwoW1x3Ol0rKS8seHQ9Lzx0Ym9keS9pLHd0PS88fCYjP1x3KzsvLFR0PS88KD86c2NyaXB0fHN0eWxlfGxpbmspL2ksQ3Q9L14oPzpjaGVja2JveHxyYWRpbykkL2ksTnQ9L2NoZWNrZWRccyooPzpbXj1dfD1ccyouY2hlY2tlZC4pL2ksa3Q9L14kfFwvKD86amF2YXxlY21hKXNjcmlwdC9pLEV0PS9edHJ1ZVwvKC4qKS8sU3Q9L15ccyo8ISg/OlxbQ0RBVEFcW3wtLSl8KD86XF1cXXwtLSk+XHMqJC9nLEF0PXtvcHRpb246WzEsIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz4iLCI8L3NlbGVjdD4iXSxsZWdlbmQ6WzEsIjxmaWVsZHNldD4iLCI8L2ZpZWxkc2V0PiJdLGFyZWE6WzEsIjxtYXA+IiwiPC9tYXA+Il0scGFyYW06WzEsIjxvYmplY3Q+IiwiPC9vYmplY3Q+Il0sdGhlYWQ6WzEsIjx0YWJsZT4iLCI8L3RhYmxlPiJdLHRyOlsyLCI8dGFibGU+PHRib2R5PiIsIjwvdGJvZHk+PC90YWJsZT4iXSxjb2w6WzIsIjx0YWJsZT48dGJvZHk+PC90Ym9keT48Y29sZ3JvdXA+IiwiPC9jb2xncm91cD48L3RhYmxlPiJdLHRkOlszLCI8dGFibGU+PHRib2R5Pjx0cj4iLCI8L3RyPjwvdGJvZHk+PC90YWJsZT4iXSxfZGVmYXVsdDp4LnN1cHBvcnQuaHRtbFNlcmlhbGl6ZT9bMCwiIiwiIl06WzEsIlg8ZGl2PiIsIjwvZGl2PiJdfSxqdD1kdChhKSxEdD1qdC5hcHBlbmRDaGlsZChhLmNyZWF0ZUVsZW1lbnQoImRpdiIpKTtBdC5vcHRncm91cD1BdC5vcHRpb24sQXQudGJvZHk9QXQudGZvb3Q9QXQuY29sZ3JvdXA9QXQuY2FwdGlvbj1BdC50aGVhZCxBdC50aD1BdC50ZCx4LmZuLmV4dGVuZCh7dGV4dDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXtyZXR1cm4gZT09PXQ/eC50ZXh0KHRoaXMpOnRoaXMuZW1wdHkoKS5hcHBlbmQoKHRoaXNbMF0mJnRoaXNbMF0ub3duZXJEb2N1bWVudHx8YSkuY3JlYXRlVGV4dE5vZGUoZSkpfSxudWxsLGUsYXJndW1lbnRzLmxlbmd0aCl9LGFwcGVuZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRvbU1hbmlwKGFyZ3VtZW50cyxmdW5jdGlvbihlKXtpZigxPT09dGhpcy5ub2RlVHlwZXx8MTE9PT10aGlzLm5vZGVUeXBlfHw5PT09dGhpcy5ub2RlVHlwZSl7dmFyIHQ9THQodGhpcyxlKTt0LmFwcGVuZENoaWxkKGUpfX0pfSxwcmVwZW5kOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLm5vZGVUeXBlfHwxMT09PXRoaXMubm9kZVR5cGV8fDk9PT10aGlzLm5vZGVUeXBlKXt2YXIgdD1MdCh0aGlzLGUpO3QuaW5zZXJ0QmVmb3JlKGUsdC5maXJzdENoaWxkKX19KX0sYmVmb3JlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMpfSl9LGFmdGVyOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKGUpe3RoaXMucGFyZW50Tm9kZSYmdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHRoaXMubmV4dFNpYmxpbmcpfSl9LHJlbW92ZTpmdW5jdGlvbihlLHQpe3ZhciBuLHI9ZT94LmZpbHRlcihlLHRoaXMpOnRoaXMsaT0wO2Zvcig7bnVsbCE9KG49cltpXSk7aSsrKXR8fDEhPT1uLm5vZGVUeXBlfHx4LmNsZWFuRGF0YShGdChuKSksbi5wYXJlbnROb2RlJiYodCYmeC5jb250YWlucyhuLm93bmVyRG9jdW1lbnQsbikmJl90KEZ0KG4sInNjcmlwdCIpKSxuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobikpO3JldHVybiB0aGlzfSxlbXB0eTpmdW5jdGlvbigpe3ZhciBlLHQ9MDtmb3IoO251bGwhPShlPXRoaXNbdF0pO3QrKyl7MT09PWUubm9kZVR5cGUmJnguY2xlYW5EYXRhKEZ0KGUsITEpKTt3aGlsZShlLmZpcnN0Q2hpbGQpZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2Uub3B0aW9ucyYmeC5ub2RlTmFtZShlLCJzZWxlY3QiKSYmKGUub3B0aW9ucy5sZW5ndGg9MCl9cmV0dXJuIHRoaXN9LGNsb25lOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9bnVsbD09ZT8hMTplLHQ9bnVsbD09dD9lOnQsdGhpcy5tYXAoZnVuY3Rpb24oKXtyZXR1cm4geC5jbG9uZSh0aGlzLGUsdCl9KX0saHRtbDpmdW5jdGlvbihlKXtyZXR1cm4geC5hY2Nlc3ModGhpcyxmdW5jdGlvbihlKXt2YXIgbj10aGlzWzBdfHx7fSxyPTAsaT10aGlzLmxlbmd0aDtpZihlPT09dClyZXR1cm4gMT09PW4ubm9kZVR5cGU/bi5pbm5lckhUTUwucmVwbGFjZShndCwiIik6dDtpZighKCJzdHJpbmciIT10eXBlb2YgZXx8VHQudGVzdChlKXx8IXguc3VwcG9ydC5odG1sU2VyaWFsaXplJiZtdC50ZXN0KGUpfHwheC5zdXBwb3J0LmxlYWRpbmdXaGl0ZXNwYWNlJiZ5dC50ZXN0KGUpfHxBdFsoYnQuZXhlYyhlKXx8WyIiLCIiXSlbMV0udG9Mb3dlckNhc2UoKV0pKXtlPWUucmVwbGFjZSh2dCwiPCQxPjwvJDI+Iik7dHJ5e2Zvcig7aT5yO3IrKyluPXRoaXNbcl18fHt9LDE9PT1uLm5vZGVUeXBlJiYoeC5jbGVhbkRhdGEoRnQobiwhMSkpLG4uaW5uZXJIVE1MPWUpO249MH1jYXRjaChvKXt9fW4mJnRoaXMuZW1wdHkoKS5hcHBlbmQoZSl9LG51bGwsZSxhcmd1bWVudHMubGVuZ3RoKX0scmVwbGFjZVdpdGg6ZnVuY3Rpb24oKXt2YXIgZT14Lm1hcCh0aGlzLGZ1bmN0aW9uKGUpe3JldHVybltlLm5leHRTaWJsaW5nLGUucGFyZW50Tm9kZV19KSx0PTA7cmV0dXJuIHRoaXMuZG9tTWFuaXAoYXJndW1lbnRzLGZ1bmN0aW9uKG4pe3ZhciByPWVbdCsrXSxpPWVbdCsrXTtpJiYociYmci5wYXJlbnROb2RlIT09aSYmKHI9dGhpcy5uZXh0U2libGluZykseCh0aGlzKS5yZW1vdmUoKSxpLmluc2VydEJlZm9yZShuLHIpKX0sITApLHQ/dGhpczp0aGlzLnJlbW92ZSgpfSxkZXRhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMucmVtb3ZlKGUsITApfSxkb21NYW5pcDpmdW5jdGlvbihlLHQsbil7ZT1kLmFwcGx5KFtdLGUpO3ZhciByLGksbyxhLHMsbCx1PTAsYz10aGlzLmxlbmd0aCxwPXRoaXMsZj1jLTEsaD1lWzBdLGc9eC5pc0Z1bmN0aW9uKGgpO2lmKGd8fCEoMT49Y3x8InN0cmluZyIhPXR5cGVvZiBofHx4LnN1cHBvcnQuY2hlY2tDbG9uZSkmJk50LnRlc3QoaCkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbihyKXt2YXIgaT1wLmVxKHIpO2cmJihlWzBdPWguY2FsbCh0aGlzLHIsaS5odG1sKCkpKSxpLmRvbU1hbmlwKGUsdCxuKX0pO2lmKGMmJihsPXguYnVpbGRGcmFnbWVudChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCwhMSwhbiYmdGhpcykscj1sLmZpcnN0Q2hpbGQsMT09PWwuY2hpbGROb2Rlcy5sZW5ndGgmJihsPXIpLHIpKXtmb3IoYT14Lm1hcChGdChsLCJzY3JpcHQiKSxIdCksbz1hLmxlbmd0aDtjPnU7dSsrKWk9bCx1IT09ZiYmKGk9eC5jbG9uZShpLCEwLCEwKSxvJiZ4Lm1lcmdlKGEsRnQoaSwic2NyaXB0IikpKSx0LmNhbGwodGhpc1t1XSxpLHUpO2lmKG8pZm9yKHM9YVthLmxlbmd0aC0xXS5vd25lckRvY3VtZW50LHgubWFwKGEscXQpLHU9MDtvPnU7dSsrKWk9YVt1XSxrdC50ZXN0KGkudHlwZXx8IiIpJiYheC5fZGF0YShpLCJnbG9iYWxFdmFsIikmJnguY29udGFpbnMocyxpKSYmKGkuc3JjP3guX2V2YWxVcmwoaS5zcmMpOnguZ2xvYmFsRXZhbCgoaS50ZXh0fHxpLnRleHRDb250ZW50fHxpLmlubmVySFRNTHx8IiIpLnJlcGxhY2UoU3QsIiIpKSk7bD1yPW51bGx9cmV0dXJuIHRoaXN9fSk7ZnVuY3Rpb24gTHQoZSx0KXtyZXR1cm4geC5ub2RlTmFtZShlLCJ0YWJsZSIpJiZ4Lm5vZGVOYW1lKDE9PT10Lm5vZGVUeXBlP3Q6dC5maXJzdENoaWxkLCJ0ciIpP2UuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRib2R5IilbMF18fGUuYXBwZW5kQ2hpbGQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRib2R5IikpOmV9ZnVuY3Rpb24gSHQoZSl7cmV0dXJuIGUudHlwZT0obnVsbCE9PXguZmluZC5hdHRyKGUsInR5cGUiKSkrIi8iK2UudHlwZSxlfWZ1bmN0aW9uIHF0KGUpe3ZhciB0PUV0LmV4ZWMoZS50eXBlKTtyZXR1cm4gdD9lLnR5cGU9dFsxXTplLnJlbW92ZUF0dHJpYnV0ZSgidHlwZSIpLGV9ZnVuY3Rpb24gX3QoZSx0KXt2YXIgbixyPTA7Zm9yKDtudWxsIT0obj1lW3JdKTtyKyspeC5fZGF0YShuLCJnbG9iYWxFdmFsIiwhdHx8eC5fZGF0YSh0W3JdLCJnbG9iYWxFdmFsIikpfWZ1bmN0aW9uIE10KGUsdCl7aWYoMT09PXQubm9kZVR5cGUmJnguaGFzRGF0YShlKSl7dmFyIG4scixpLG89eC5fZGF0YShlKSxhPXguX2RhdGEodCxvKSxzPW8uZXZlbnRzO2lmKHMpe2RlbGV0ZSBhLmhhbmRsZSxhLmV2ZW50cz17fTtmb3IobiBpbiBzKWZvcihyPTAsaT1zW25dLmxlbmd0aDtpPnI7cisrKXguZXZlbnQuYWRkKHQsbixzW25dW3JdKX1hLmRhdGEmJihhLmRhdGE9eC5leHRlbmQoe30sYS5kYXRhKSl9fWZ1bmN0aW9uIE90KGUsdCl7dmFyIG4scixpO2lmKDE9PT10Lm5vZGVUeXBlKXtpZihuPXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwheC5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmdFt4LmV4cGFuZG9dKXtpPXguX2RhdGEodCk7Zm9yKHIgaW4gaS5ldmVudHMpeC5yZW1vdmVFdmVudCh0LHIsaS5oYW5kbGUpO3QucmVtb3ZlQXR0cmlidXRlKHguZXhwYW5kbyl9InNjcmlwdCI9PT1uJiZ0LnRleHQhPT1lLnRleHQ/KEh0KHQpLnRleHQ9ZS50ZXh0LHF0KHQpKToib2JqZWN0Ij09PW4/KHQucGFyZW50Tm9kZSYmKHQub3V0ZXJIVE1MPWUub3V0ZXJIVE1MKSx4LnN1cHBvcnQuaHRtbDVDbG9uZSYmZS5pbm5lckhUTUwmJiF4LnRyaW0odC5pbm5lckhUTUwpJiYodC5pbm5lckhUTUw9ZS5pbm5lckhUTUwpKToiaW5wdXQiPT09biYmQ3QudGVzdChlLnR5cGUpPyh0LmRlZmF1bHRDaGVja2VkPXQuY2hlY2tlZD1lLmNoZWNrZWQsdC52YWx1ZSE9PWUudmFsdWUmJih0LnZhbHVlPWUudmFsdWUpKToib3B0aW9uIj09PW4/dC5kZWZhdWx0U2VsZWN0ZWQ9dC5zZWxlY3RlZD1lLmRlZmF1bHRTZWxlY3RlZDooImlucHV0Ij09PW58fCJ0ZXh0YXJlYSI9PT1uKSYmKHQuZGVmYXVsdFZhbHVlPWUuZGVmYXVsdFZhbHVlKX19eC5lYWNoKHthcHBlbmRUbzoiYXBwZW5kIixwcmVwZW5kVG86InByZXBlbmQiLGluc2VydEJlZm9yZToiYmVmb3JlIixpbnNlcnRBZnRlcjoiYWZ0ZXIiLHJlcGxhY2VBbGw6InJlcGxhY2VXaXRoIn0sZnVuY3Rpb24oZSx0KXt4LmZuW2VdPWZ1bmN0aW9uKGUpe3ZhciBuLHI9MCxpPVtdLG89eChlKSxhPW8ubGVuZ3RoLTE7Zm9yKDthPj1yO3IrKyluPXI9PT1hP3RoaXM6dGhpcy5jbG9uZSghMCkseChvW3JdKVt0XShuKSxoLmFwcGx5KGksbi5nZXQoKSk7cmV0dXJuIHRoaXMucHVzaFN0YWNrKGkpfX0pO2Z1bmN0aW9uIEZ0KGUsbil7dmFyIHIsbyxhPTAscz10eXBlb2YgZS5nZXRFbGVtZW50c0J5VGFnTmFtZSE9PWk/ZS5nZXRFbGVtZW50c0J5VGFnTmFtZShufHwiKiIpOnR5cGVvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwhPT1pP2UucXVlcnlTZWxlY3RvckFsbChufHwiKiIpOnQ7aWYoIXMpZm9yKHM9W10scj1lLmNoaWxkTm9kZXN8fGU7bnVsbCE9KG89clthXSk7YSsrKSFufHx4Lm5vZGVOYW1lKG8sbik/cy5wdXNoKG8pOngubWVyZ2UocyxGdChvLG4pKTtyZXR1cm4gbj09PXR8fG4mJngubm9kZU5hbWUoZSxuKT94Lm1lcmdlKFtlXSxzKTpzfWZ1bmN0aW9uIEJ0KGUpe0N0LnRlc3QoZS50eXBlKSYmKGUuZGVmYXVsdENoZWNrZWQ9ZS5jaGVja2VkKX14LmV4dGVuZCh7Y2xvbmU6ZnVuY3Rpb24oZSx0LG4pe3ZhciByLGksbyxhLHMsbD14LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKTtpZih4LnN1cHBvcnQuaHRtbDVDbG9uZXx8eC5pc1hNTERvYyhlKXx8IW10LnRlc3QoIjwiK2Uubm9kZU5hbWUrIj4iKT9vPWUuY2xvbmVOb2RlKCEwKTooRHQuaW5uZXJIVE1MPWUub3V0ZXJIVE1MLER0LnJlbW92ZUNoaWxkKG89RHQuZmlyc3RDaGlsZCkpLCEoeC5zdXBwb3J0Lm5vQ2xvbmVFdmVudCYmeC5zdXBwb3J0Lm5vQ2xvbmVDaGVja2VkfHwxIT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlfHx4LmlzWE1MRG9jKGUpKSlmb3Iocj1GdChvKSxzPUZ0KGUpLGE9MDtudWxsIT0oaT1zW2FdKTsrK2EpclthXSYmT3QoaSxyW2FdKTtpZih0KWlmKG4pZm9yKHM9c3x8RnQoZSkscj1yfHxGdChvKSxhPTA7bnVsbCE9KGk9c1thXSk7YSsrKU10KGksclthXSk7ZWxzZSBNdChlLG8pO3JldHVybiByPUZ0KG8sInNjcmlwdCIpLHIubGVuZ3RoPjAmJl90KHIsIWwmJkZ0KGUsInNjcmlwdCIpKSxyPXM9aT1udWxsLG99LGJ1aWxkRnJhZ21lbnQ6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGksbyxhLHMsbCx1LGMscD1lLmxlbmd0aCxmPWR0KHQpLGQ9W10saD0wO2Zvcig7cD5oO2grKylpZihvPWVbaF0sb3x8MD09PW8paWYoIm9iamVjdCI9PT14LnR5cGUobykpeC5tZXJnZShkLG8ubm9kZVR5cGU/W29dOm8pO2Vsc2UgaWYod3QudGVzdChvKSl7cz1zfHxmLmFwcGVuZENoaWxkKHQuY3JlYXRlRWxlbWVudCgiZGl2IikpLGw9KGJ0LmV4ZWMobyl8fFsiIiwiIl0pWzFdLnRvTG93ZXJDYXNlKCksYz1BdFtsXXx8QXQuX2RlZmF1bHQscy5pbm5lckhUTUw9Y1sxXStvLnJlcGxhY2UodnQsIjwkMT48LyQyPiIpK2NbMl0saT1jWzBdO3doaWxlKGktLSlzPXMubGFzdENoaWxkO2lmKCF4LnN1cHBvcnQubGVhZGluZ1doaXRlc3BhY2UmJnl0LnRlc3QobykmJmQucHVzaCh0LmNyZWF0ZVRleHROb2RlKHl0LmV4ZWMobylbMF0pKSwheC5zdXBwb3J0LnRib2R5KXtvPSJ0YWJsZSIhPT1sfHx4dC50ZXN0KG8pPyI8dGFibGU+IiE9PWNbMV18fHh0LnRlc3Qobyk/MDpzOnMuZmlyc3RDaGlsZCxpPW8mJm8uY2hpbGROb2Rlcy5sZW5ndGg7d2hpbGUoaS0tKXgubm9kZU5hbWUodT1vLmNoaWxkTm9kZXNbaV0sInRib2R5IikmJiF1LmNoaWxkTm9kZXMubGVuZ3RoJiZvLnJlbW92ZUNoaWxkKHUpfXgubWVyZ2UoZCxzLmNoaWxkTm9kZXMpLHMudGV4dENvbnRlbnQ9IiI7d2hpbGUocy5maXJzdENoaWxkKXMucmVtb3ZlQ2hpbGQocy5maXJzdENoaWxkKTtzPWYubGFzdENoaWxkfWVsc2UgZC5wdXNoKHQuY3JlYXRlVGV4dE5vZGUobykpO3MmJmYucmVtb3ZlQ2hpbGQocykseC5zdXBwb3J0LmFwcGVuZENoZWNrZWR8fHguZ3JlcChGdChkLCJpbnB1dCIpLEJ0KSxoPTA7d2hpbGUobz1kW2grK10paWYoKCFyfHwtMT09PXguaW5BcnJheShvLHIpKSYmKGE9eC5jb250YWlucyhvLm93bmVyRG9jdW1lbnQsbykscz1GdChmLmFwcGVuZENoaWxkKG8pLCJzY3JpcHQiKSxhJiZfdChzKSxuKSl7aT0wO3doaWxlKG89c1tpKytdKWt0LnRlc3Qoby50eXBlfHwiIikmJm4ucHVzaChvKX1yZXR1cm4gcz1udWxsLGZ9LGNsZWFuRGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuLHIsbyxhLHM9MCxsPXguZXhwYW5kbyx1PXguY2FjaGUsYz14LnN1cHBvcnQuZGVsZXRlRXhwYW5kbyxmPXguZXZlbnQuc3BlY2lhbDtmb3IoO251bGwhPShuPWVbc10pO3MrKylpZigodHx8eC5hY2NlcHREYXRhKG4pKSYmKG89bltsXSxhPW8mJnVbb10pKXtpZihhLmV2ZW50cylmb3IociBpbiBhLmV2ZW50cylmW3JdP3guZXZlbnQucmVtb3ZlKG4scik6eC5yZW1vdmVFdmVudChuLHIsYS5oYW5kbGUpOwp1W29dJiYoZGVsZXRlIHVbb10sYz9kZWxldGUgbltsXTp0eXBlb2Ygbi5yZW1vdmVBdHRyaWJ1dGUhPT1pP24ucmVtb3ZlQXR0cmlidXRlKGwpOm5bbF09bnVsbCxwLnB1c2gobykpfX0sX2V2YWxVcmw6ZnVuY3Rpb24oZSl7cmV0dXJuIHguYWpheCh7dXJsOmUsdHlwZToiR0VUIixkYXRhVHlwZToic2NyaXB0Iixhc3luYzohMSxnbG9iYWw6ITEsInRocm93cyI6ITB9KX19KSx4LmZuLmV4dGVuZCh7d3JhcEFsbDpmdW5jdGlvbihlKXtpZih4LmlzRnVuY3Rpb24oZSkpcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbih0KXt4KHRoaXMpLndyYXBBbGwoZS5jYWxsKHRoaXMsdCkpfSk7aWYodGhpc1swXSl7dmFyIHQ9eChlLHRoaXNbMF0ub3duZXJEb2N1bWVudCkuZXEoMCkuY2xvbmUoITApO3RoaXNbMF0ucGFyZW50Tm9kZSYmdC5pbnNlcnRCZWZvcmUodGhpc1swXSksdC5tYXAoZnVuY3Rpb24oKXt2YXIgZT10aGlzO3doaWxlKGUuZmlyc3RDaGlsZCYmMT09PWUuZmlyc3RDaGlsZC5ub2RlVHlwZSllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX0pLmFwcGVuZCh0aGlzKX1yZXR1cm4gdGhpc30sd3JhcElubmVyOmZ1bmN0aW9uKGUpe3JldHVybiB4LmlzRnVuY3Rpb24oZSk/dGhpcy5lYWNoKGZ1bmN0aW9uKHQpe3godGhpcykud3JhcElubmVyKGUuY2FsbCh0aGlzLHQpKX0pOnRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0PXgodGhpcyksbj10LmNvbnRlbnRzKCk7bi5sZW5ndGg/bi53cmFwQWxsKGUpOnQuYXBwZW5kKGUpfSl9LHdyYXA6ZnVuY3Rpb24oZSl7dmFyIHQ9eC5pc0Z1bmN0aW9uKGUpO3JldHVybiB0aGlzLmVhY2goZnVuY3Rpb24obil7eCh0aGlzKS53cmFwQWxsKHQ/ZS5jYWxsKHRoaXMsbik6ZSl9KX0sdW53cmFwOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFyZW50KCkuZWFjaChmdW5jdGlvbigpe3gubm9kZU5hbWUodGhpcywiYm9keSIpfHx4KHRoaXMpLnJlcGxhY2VXaXRoKHRoaXMuY2hpbGROb2Rlcyl9KS5lbmQoKX19KTt2YXIgUHQsUnQsV3QsJHQ9L2FscGhhXChbXildKlwpL2ksSXQ9L29wYWNpdHlccyo9XHMqKFteKV0qKS8senQ9L14odG9wfHJpZ2h0fGJvdHRvbXxsZWZ0KSQvLFh0PS9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxVdD0vXm1hcmdpbi8sVnQ9UmVnRXhwKCJeKCIrdysiKSguKikkIiwiaSIpLFl0PVJlZ0V4cCgiXigiK3crIikoPyFweClbYS16JV0rJCIsImkiKSxKdD1SZWdFeHAoIl4oWystXSk9KCIrdysiKSIsImkiKSxHdD17Qk9EWToiYmxvY2sifSxRdD17cG9zaXRpb246ImFic29sdXRlIix2aXNpYmlsaXR5OiJoaWRkZW4iLGRpc3BsYXk6ImJsb2NrIn0sS3Q9e2xldHRlclNwYWNpbmc6MCxmb250V2VpZ2h0OjQwMH0sWnQ9WyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxlbj1bIldlYmtpdCIsIk8iLCJNb3oiLCJtcyJdO2Z1bmN0aW9uIHRuKGUsdCl7aWYodCBpbiBlKXJldHVybiB0O3ZhciBuPXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKSxyPXQsaT1lbi5sZW5ndGg7d2hpbGUoaS0tKWlmKHQ9ZW5baV0rbix0IGluIGUpcmV0dXJuIHQ7cmV0dXJuIHJ9ZnVuY3Rpb24gbm4oZSx0KXtyZXR1cm4gZT10fHxlLCJub25lIj09PXguY3NzKGUsImRpc3BsYXkiKXx8IXguY29udGFpbnMoZS5vd25lckRvY3VtZW50LGUpfWZ1bmN0aW9uIHJuKGUsdCl7dmFyIG4scixpLG89W10sYT0wLHM9ZS5sZW5ndGg7Zm9yKDtzPmE7YSsrKXI9ZVthXSxyLnN0eWxlJiYob1thXT14Ll9kYXRhKHIsIm9sZGRpc3BsYXkiKSxuPXIuc3R5bGUuZGlzcGxheSx0PyhvW2FdfHwibm9uZSIhPT1ufHwoci5zdHlsZS5kaXNwbGF5PSIiKSwiIj09PXIuc3R5bGUuZGlzcGxheSYmbm4ocikmJihvW2FdPXguX2RhdGEociwib2xkZGlzcGxheSIsbG4oci5ub2RlTmFtZSkpKSk6b1thXXx8KGk9bm4ociksKG4mJiJub25lIiE9PW58fCFpKSYmeC5fZGF0YShyLCJvbGRkaXNwbGF5IixpP246eC5jc3MociwiZGlzcGxheSIpKSkpO2ZvcihhPTA7cz5hO2ErKylyPWVbYV0sci5zdHlsZSYmKHQmJiJub25lIiE9PXIuc3R5bGUuZGlzcGxheSYmIiIhPT1yLnN0eWxlLmRpc3BsYXl8fChyLnN0eWxlLmRpc3BsYXk9dD9vW2FdfHwiIjoibm9uZSIpKTtyZXR1cm4gZX14LmZuLmV4dGVuZCh7Y3NzOmZ1bmN0aW9uKGUsbil7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24oZSxuLHIpe3ZhciBpLG8sYT17fSxzPTA7aWYoeC5pc0FycmF5KG4pKXtmb3Iobz1SdChlKSxpPW4ubGVuZ3RoO2k+cztzKyspYVtuW3NdXT14LmNzcyhlLG5bc10sITEsbyk7cmV0dXJuIGF9cmV0dXJuIHIhPT10P3guc3R5bGUoZSxuLHIpOnguY3NzKGUsbil9LGUsbixhcmd1bWVudHMubGVuZ3RoPjEpfSxzaG93OmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMsITApfSxoaWRlOmZ1bmN0aW9uKCl7cmV0dXJuIHJuKHRoaXMpfSx0b2dnbGU6ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZT9lP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpOnRoaXMuZWFjaChmdW5jdGlvbigpe25uKHRoaXMpP3godGhpcykuc2hvdygpOngodGhpcykuaGlkZSgpfSl9fSkseC5leHRlbmQoe2Nzc0hvb2tzOntvcGFjaXR5OntnZXQ6ZnVuY3Rpb24oZSx0KXtpZih0KXt2YXIgbj1XdChlLCJvcGFjaXR5Iik7cmV0dXJuIiI9PT1uPyIxIjpufX19fSxjc3NOdW1iZXI6e2NvbHVtbkNvdW50OiEwLGZpbGxPcGFjaXR5OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUhlaWdodDohMCxvcGFjaXR5OiEwLG9yZGVyOiEwLG9ycGhhbnM6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwfSxjc3NQcm9wczp7ImZsb2F0Ijp4LnN1cHBvcnQuY3NzRmxvYXQ/ImNzc0Zsb2F0Ijoic3R5bGVGbG9hdCJ9LHN0eWxlOmZ1bmN0aW9uKGUsbixyLGkpe2lmKGUmJjMhPT1lLm5vZGVUeXBlJiY4IT09ZS5ub2RlVHlwZSYmZS5zdHlsZSl7dmFyIG8sYSxzLGw9eC5jYW1lbENhc2UobiksdT1lLnN0eWxlO2lmKG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4odSxsKSkscz14LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHI9PT10KXJldHVybiBzJiYiZ2V0ImluIHMmJihvPXMuZ2V0KGUsITEsaSkpIT09dD9vOnVbbl07aWYoYT10eXBlb2Ygciwic3RyaW5nIj09PWEmJihvPUp0LmV4ZWMocikpJiYocj0ob1sxXSsxKSpvWzJdK3BhcnNlRmxvYXQoeC5jc3MoZSxuKSksYT0ibnVtYmVyIiksIShudWxsPT1yfHwibnVtYmVyIj09PWEmJmlzTmFOKHIpfHwoIm51bWJlciIhPT1hfHx4LmNzc051bWJlcltsXXx8KHIrPSJweCIpLHguc3VwcG9ydC5jbGVhckNsb25lU3R5bGV8fCIiIT09cnx8MCE9PW4uaW5kZXhPZigiYmFja2dyb3VuZCIpfHwodVtuXT0iaW5oZXJpdCIpLHMmJiJzZXQiaW4gcyYmKHI9cy5zZXQoZSxyLGkpKT09PXQpKSl0cnl7dVtuXT1yfWNhdGNoKGMpe319fSxjc3M6ZnVuY3Rpb24oZSxuLHIsaSl7dmFyIG8sYSxzLGw9eC5jYW1lbENhc2Uobik7cmV0dXJuIG49eC5jc3NQcm9wc1tsXXx8KHguY3NzUHJvcHNbbF09dG4oZS5zdHlsZSxsKSkscz14LmNzc0hvb2tzW25dfHx4LmNzc0hvb2tzW2xdLHMmJiJnZXQiaW4gcyYmKGE9cy5nZXQoZSwhMCxyKSksYT09PXQmJihhPVd0KGUsbixpKSksIm5vcm1hbCI9PT1hJiZuIGluIEt0JiYoYT1LdFtuXSksIiI9PT1yfHxyPyhvPXBhcnNlRmxvYXQoYSkscj09PSEwfHx4LmlzTnVtZXJpYyhvKT9vfHwwOmEpOmF9fSksZS5nZXRDb21wdXRlZFN0eWxlPyhSdD1mdW5jdGlvbih0KXtyZXR1cm4gZS5nZXRDb21wdXRlZFN0eWxlKHQsbnVsbCl9LFd0PWZ1bmN0aW9uKGUsbixyKXt2YXIgaSxvLGEscz1yfHxSdChlKSxsPXM/cy5nZXRQcm9wZXJ0eVZhbHVlKG4pfHxzW25dOnQsdT1lLnN0eWxlO3JldHVybiBzJiYoIiIhPT1sfHx4LmNvbnRhaW5zKGUub3duZXJEb2N1bWVudCxlKXx8KGw9eC5zdHlsZShlLG4pKSxZdC50ZXN0KGwpJiZVdC50ZXN0KG4pJiYoaT11LndpZHRoLG89dS5taW5XaWR0aCxhPXUubWF4V2lkdGgsdS5taW5XaWR0aD11Lm1heFdpZHRoPXUud2lkdGg9bCxsPXMud2lkdGgsdS53aWR0aD1pLHUubWluV2lkdGg9byx1Lm1heFdpZHRoPWEpKSxsfSk6YS5kb2N1bWVudEVsZW1lbnQuY3VycmVudFN0eWxlJiYoUnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuY3VycmVudFN0eWxlfSxXdD1mdW5jdGlvbihlLG4scil7dmFyIGksbyxhLHM9cnx8UnQoZSksbD1zP3Nbbl06dCx1PWUuc3R5bGU7cmV0dXJuIG51bGw9PWwmJnUmJnVbbl0mJihsPXVbbl0pLFl0LnRlc3QobCkmJiF6dC50ZXN0KG4pJiYoaT11LmxlZnQsbz1lLnJ1bnRpbWVTdHlsZSxhPW8mJm8ubGVmdCxhJiYoby5sZWZ0PWUuY3VycmVudFN0eWxlLmxlZnQpLHUubGVmdD0iZm9udFNpemUiPT09bj8iMWVtIjpsLGw9dS5waXhlbExlZnQrInB4Iix1LmxlZnQ9aSxhJiYoby5sZWZ0PWEpKSwiIj09PWw/ImF1dG8iOmx9KTtmdW5jdGlvbiBvbihlLHQsbil7dmFyIHI9VnQuZXhlYyh0KTtyZXR1cm4gcj9NYXRoLm1heCgwLHJbMV0tKG58fDApKSsoclsyXXx8InB4Iik6dH1mdW5jdGlvbiBhbihlLHQsbixyLGkpe3ZhciBvPW49PT0ocj8iYm9yZGVyIjoiY29udGVudCIpPzQ6IndpZHRoIj09PXQ/MTowLGE9MDtmb3IoOzQ+bztvKz0yKSJtYXJnaW4iPT09biYmKGErPXguY3NzKGUsbitadFtvXSwhMCxpKSkscj8oImNvbnRlbnQiPT09biYmKGEtPXguY3NzKGUsInBhZGRpbmciK1p0W29dLCEwLGkpKSwibWFyZ2luIiE9PW4mJihhLT14LmNzcyhlLCJib3JkZXIiK1p0W29dKyJXaWR0aCIsITAsaSkpKTooYSs9eC5jc3MoZSwicGFkZGluZyIrWnRbb10sITAsaSksInBhZGRpbmciIT09biYmKGErPXguY3NzKGUsImJvcmRlciIrWnRbb10rIldpZHRoIiwhMCxpKSkpO3JldHVybiBhfWZ1bmN0aW9uIHNuKGUsdCxuKXt2YXIgcj0hMCxpPSJ3aWR0aCI9PT10P2Uub2Zmc2V0V2lkdGg6ZS5vZmZzZXRIZWlnaHQsbz1SdChlKSxhPXguc3VwcG9ydC5ib3hTaXppbmcmJiJib3JkZXItYm94Ij09PXguY3NzKGUsImJveFNpemluZyIsITEsbyk7aWYoMD49aXx8bnVsbD09aSl7aWYoaT1XdChlLHQsbyksKDA+aXx8bnVsbD09aSkmJihpPWUuc3R5bGVbdF0pLFl0LnRlc3QoaSkpcmV0dXJuIGk7cj1hJiYoeC5zdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlfHxpPT09ZS5zdHlsZVt0XSksaT1wYXJzZUZsb2F0KGkpfHwwfXJldHVybiBpK2FuKGUsdCxufHwoYT8iYm9yZGVyIjoiY29udGVudCIpLHIsbykrInB4In1mdW5jdGlvbiBsbihlKXt2YXIgdD1hLG49R3RbZV07cmV0dXJuIG58fChuPXVuKGUsdCksIm5vbmUiIT09biYmbnx8KFB0PShQdHx8eCgiPGlmcmFtZSBmcmFtZWJvcmRlcj0nMCcgd2lkdGg9JzAnIGhlaWdodD0nMCcvPiIpLmNzcygiY3NzVGV4dCIsImRpc3BsYXk6YmxvY2sgIWltcG9ydGFudCIpKS5hcHBlbmRUbyh0LmRvY3VtZW50RWxlbWVudCksdD0oUHRbMF0uY29udGVudFdpbmRvd3x8UHRbMF0uY29udGVudERvY3VtZW50KS5kb2N1bWVudCx0LndyaXRlKCI8IWRvY3R5cGUgaHRtbD48aHRtbD48Ym9keT4iKSx0LmNsb3NlKCksbj11bihlLHQpLFB0LmRldGFjaCgpKSxHdFtlXT1uKSxufWZ1bmN0aW9uIHVuKGUsdCl7dmFyIG49eCh0LmNyZWF0ZUVsZW1lbnQoZSkpLmFwcGVuZFRvKHQuYm9keSkscj14LmNzcyhuWzBdLCJkaXNwbGF5Iik7cmV0dXJuIG4ucmVtb3ZlKCkscn14LmVhY2goWyJoZWlnaHQiLCJ3aWR0aCJdLGZ1bmN0aW9uKGUsbil7eC5jc3NIb29rc1tuXT17Z2V0OmZ1bmN0aW9uKGUscixpKXtyZXR1cm4gcj8wPT09ZS5vZmZzZXRXaWR0aCYmWHQudGVzdCh4LmNzcyhlLCJkaXNwbGF5IikpP3guc3dhcChlLFF0LGZ1bmN0aW9uKCl7cmV0dXJuIHNuKGUsbixpKX0pOnNuKGUsbixpKTp0fSxzZXQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBpPXImJlJ0KGUpO3JldHVybiBvbihlLHQscj9hbihlLG4scix4LnN1cHBvcnQuYm94U2l6aW5nJiYiYm9yZGVyLWJveCI9PT14LmNzcyhlLCJib3hTaXppbmciLCExLGkpLGkpOjApfX19KSx4LnN1cHBvcnQub3BhY2l0eXx8KHguY3NzSG9va3Mub3BhY2l0eT17Z2V0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEl0LnRlc3QoKHQmJmUuY3VycmVudFN0eWxlP2UuY3VycmVudFN0eWxlLmZpbHRlcjplLnN0eWxlLmZpbHRlcil8fCIiKT8uMDEqcGFyc2VGbG9hdChSZWdFeHAuJDEpKyIiOnQ/IjEiOiIifSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLnN0eWxlLHI9ZS5jdXJyZW50U3R5bGUsaT14LmlzTnVtZXJpYyh0KT8iYWxwaGEob3BhY2l0eT0iKzEwMCp0KyIpIjoiIixvPXImJnIuZmlsdGVyfHxuLmZpbHRlcnx8IiI7bi56b29tPTEsKHQ+PTF8fCIiPT09dCkmJiIiPT09eC50cmltKG8ucmVwbGFjZSgkdCwiIikpJiZuLnJlbW92ZUF0dHJpYnV0ZSYmKG4ucmVtb3ZlQXR0cmlidXRlKCJmaWx0ZXIiKSwiIj09PXR8fHImJiFyLmZpbHRlcil8fChuLmZpbHRlcj0kdC50ZXN0KG8pP28ucmVwbGFjZSgkdCxpKTpvKyIgIitpKX19KSx4KGZ1bmN0aW9uKCl7eC5zdXBwb3J0LnJlbGlhYmxlTWFyZ2luUmlnaHR8fCh4LmNzc0hvb2tzLm1hcmdpblJpZ2h0PXtnZXQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4gbj94LnN3YXAoZSx7ZGlzcGxheToiaW5saW5lLWJsb2NrIn0sV3QsW2UsIm1hcmdpblJpZ2h0Il0pOnR9fSksIXguc3VwcG9ydC5waXhlbFBvc2l0aW9uJiZ4LmZuLnBvc2l0aW9uJiZ4LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24oZSxuKXt4LmNzc0hvb2tzW25dPXtnZXQ6ZnVuY3Rpb24oZSxyKXtyZXR1cm4gcj8ocj1XdChlLG4pLFl0LnRlc3Qocik/eChlKS5wb3NpdGlvbigpW25dKyJweCI6cik6dH19fSl9KSx4LmV4cHImJnguZXhwci5maWx0ZXJzJiYoeC5leHByLmZpbHRlcnMuaGlkZGVuPWZ1bmN0aW9uKGUpe3JldHVybiAwPj1lLm9mZnNldFdpZHRoJiYwPj1lLm9mZnNldEhlaWdodHx8IXguc3VwcG9ydC5yZWxpYWJsZUhpZGRlbk9mZnNldHMmJiJub25lIj09PShlLnN0eWxlJiZlLnN0eWxlLmRpc3BsYXl8fHguY3NzKGUsImRpc3BsYXkiKSl9LHguZXhwci5maWx0ZXJzLnZpc2libGU9ZnVuY3Rpb24oZSl7cmV0dXJuIXguZXhwci5maWx0ZXJzLmhpZGRlbihlKX0pLHguZWFjaCh7bWFyZ2luOiIiLHBhZGRpbmc6IiIsYm9yZGVyOiJXaWR0aCJ9LGZ1bmN0aW9uKGUsdCl7eC5jc3NIb29rc1tlK3RdPXtleHBhbmQ6ZnVuY3Rpb24obil7dmFyIHI9MCxpPXt9LG89InN0cmluZyI9PXR5cGVvZiBuP24uc3BsaXQoIiAiKTpbbl07Zm9yKDs0PnI7cisrKWlbZStadFtyXSt0XT1vW3JdfHxvW3ItMl18fG9bMF07cmV0dXJuIGl9fSxVdC50ZXN0KGUpfHwoeC5jc3NIb29rc1tlK3RdLnNldD1vbil9KTt2YXIgY249LyUyMC9nLHBuPS9cW1xdJC8sZm49L1xyP1xuL2csZG49L14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLGhuPS9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTt4LmZuLmV4dGVuZCh7c2VyaWFsaXplOmZ1bmN0aW9uKCl7cmV0dXJuIHgucGFyYW0odGhpcy5zZXJpYWxpemVBcnJheSgpKX0sc2VyaWFsaXplQXJyYXk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24oKXt2YXIgZT14LnByb3AodGhpcywiZWxlbWVudHMiKTtyZXR1cm4gZT94Lm1ha2VBcnJheShlKTp0aGlzfSkuZmlsdGVyKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50eXBlO3JldHVybiB0aGlzLm5hbWUmJiF4KHRoaXMpLmlzKCI6ZGlzYWJsZWQiKSYmaG4udGVzdCh0aGlzLm5vZGVOYW1lKSYmIWRuLnRlc3QoZSkmJih0aGlzLmNoZWNrZWR8fCFDdC50ZXN0KGUpKX0pLm1hcChmdW5jdGlvbihlLHQpe3ZhciBuPXgodGhpcykudmFsKCk7cmV0dXJuIG51bGw9PW4/bnVsbDp4LmlzQXJyYXkobik/eC5tYXAobixmdW5jdGlvbihlKXtyZXR1cm57bmFtZTp0Lm5hbWUsdmFsdWU6ZS5yZXBsYWNlKGZuLCJcclxuIil9fSk6e25hbWU6dC5uYW1lLHZhbHVlOm4ucmVwbGFjZShmbiwiXHJcbiIpfX0pLmdldCgpfX0pLHgucGFyYW09ZnVuY3Rpb24oZSxuKXt2YXIgcixpPVtdLG89ZnVuY3Rpb24oZSx0KXt0PXguaXNGdW5jdGlvbih0KT90KCk6bnVsbD09dD8iIjp0LGlbaS5sZW5ndGhdPWVuY29kZVVSSUNvbXBvbmVudChlKSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpfTtpZihuPT09dCYmKG49eC5hamF4U2V0dGluZ3MmJnguYWpheFNldHRpbmdzLnRyYWRpdGlvbmFsKSx4LmlzQXJyYXkoZSl8fGUuanF1ZXJ5JiYheC5pc1BsYWluT2JqZWN0KGUpKXguZWFjaChlLGZ1bmN0aW9uKCl7byh0aGlzLm5hbWUsdGhpcy52YWx1ZSl9KTtlbHNlIGZvcihyIGluIGUpZ24ocixlW3JdLG4sbyk7cmV0dXJuIGkuam9pbigiJiIpLnJlcGxhY2UoY24sIisiKX07ZnVuY3Rpb24gZ24oZSx0LG4scil7dmFyIGk7aWYoeC5pc0FycmF5KHQpKXguZWFjaCh0LGZ1bmN0aW9uKHQsaSl7bnx8cG4udGVzdChlKT9yKGUsaSk6Z24oZSsiWyIrKCJvYmplY3QiPT10eXBlb2YgaT90OiIiKSsiXSIsaSxuLHIpfSk7ZWxzZSBpZihufHwib2JqZWN0IiE9PXgudHlwZSh0KSlyKGUsdCk7ZWxzZSBmb3IoaSBpbiB0KWduKGUrIlsiK2krIl0iLHRbaV0sbixyKX14LmVhY2goImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCBsb2FkIHJlc2l6ZSBzY3JvbGwgdW5sb2FkIGNsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIGNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgZXJyb3IgY29udGV4dG1lbnUiLnNwbGl0KCIgIiksZnVuY3Rpb24oZSx0KXt4LmZuW3RdPWZ1bmN0aW9uKGUsbil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+MD90aGlzLm9uKHQsbnVsbCxlLG4pOnRoaXMudHJpZ2dlcih0KX19KSx4LmZuLmV4dGVuZCh7aG92ZXI6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tb3VzZWVudGVyKGUpLm1vdXNlbGVhdmUodHx8ZSl9LGJpbmQ6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9uKGUsbnVsbCx0LG4pfSx1bmJpbmQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vZmYoZSxudWxsLHQpfSxkZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gdGhpcy5vbih0LGUsbixyKX0sdW5kZWxlZ2F0ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMub2ZmKGUsIioqIik6dGhpcy5vZmYodCxlfHwiKioiLG4pfX0pO3ZhciBtbix5bix2bj14Lm5vdygpLGJuPS9cPy8seG49LyMuKiQvLHduPS8oWz8mXSlfPVteJl0qLyxUbj0vXiguKj8pOlsgXHRdKihbXlxyXG5dKilccj8kL2dtLENuPS9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLE5uPS9eKD86R0VUfEhFQUQpJC8sa249L15cL1wvLyxFbj0vXihbXHcuKy1dKzopKD86XC9cLyhbXlwvPyM6XSopKD86OihcZCspfCl8KS8sU249eC5mbi5sb2FkLEFuPXt9LGpuPXt9LERuPSIqLyIuY29uY2F0KCIqIik7dHJ5e3luPW8uaHJlZn1jYXRjaChMbil7eW49YS5jcmVhdGVFbGVtZW50KCJhIikseW4uaHJlZj0iIix5bj15bi5ocmVmfW1uPUVuLmV4ZWMoeW4udG9Mb3dlckNhc2UoKSl8fFtdO2Z1bmN0aW9uIEhuKGUpe3JldHVybiBmdW5jdGlvbih0LG4peyJzdHJpbmciIT10eXBlb2YgdCYmKG49dCx0PSIqIik7dmFyIHIsaT0wLG89dC50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxbXTtpZih4LmlzRnVuY3Rpb24obikpd2hpbGUocj1vW2krK10pIisiPT09clswXT8ocj1yLnNsaWNlKDEpfHwiKiIsKGVbcl09ZVtyXXx8W10pLnVuc2hpZnQobikpOihlW3JdPWVbcl18fFtdKS5wdXNoKG4pfX1mdW5jdGlvbiBxbihlLG4scixpKXt2YXIgbz17fSxhPWU9PT1qbjtmdW5jdGlvbiBzKGwpe3ZhciB1O3JldHVybiBvW2xdPSEwLHguZWFjaChlW2xdfHxbXSxmdW5jdGlvbihlLGwpe3ZhciBjPWwobixyLGkpO3JldHVybiJzdHJpbmciIT10eXBlb2YgY3x8YXx8b1tjXT9hPyEodT1jKTp0OihuLmRhdGFUeXBlcy51bnNoaWZ0KGMpLHMoYyksITEpfSksdX1yZXR1cm4gcyhuLmRhdGFUeXBlc1swXSl8fCFvWyIqIl0mJnMoIioiKX1mdW5jdGlvbiBfbihlLG4pe3ZhciByLGksbz14LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9uc3x8e307Zm9yKGkgaW4gbiluW2ldIT09dCYmKChvW2ldP2U6cnx8KHI9e30pKVtpXT1uW2ldKTtyZXR1cm4gciYmeC5leHRlbmQoITAsZSxyKSxlfXguZm4ubG9hZD1mdW5jdGlvbihlLG4scil7aWYoInN0cmluZyIhPXR5cGVvZiBlJiZTbilyZXR1cm4gU24uYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBpLG8sYSxzPXRoaXMsbD1lLmluZGV4T2YoIiAiKTtyZXR1cm4gbD49MCYmKGk9ZS5zbGljZShsLGUubGVuZ3RoKSxlPWUuc2xpY2UoMCxsKSkseC5pc0Z1bmN0aW9uKG4pPyhyPW4sbj10KTpuJiYib2JqZWN0Ij09dHlwZW9mIG4mJihhPSJQT1NUIikscy5sZW5ndGg+MCYmeC5hamF4KHt1cmw6ZSx0eXBlOmEsZGF0YVR5cGU6Imh0bWwiLGRhdGE6bn0pLmRvbmUoZnVuY3Rpb24oZSl7bz1hcmd1bWVudHMscy5odG1sKGk/eCgiPGRpdj4iKS5hcHBlbmQoeC5wYXJzZUhUTUwoZSkpLmZpbmQoaSk6ZSl9KS5jb21wbGV0ZShyJiZmdW5jdGlvbihlLHQpe3MuZWFjaChyLG98fFtlLnJlc3BvbnNlVGV4dCx0LGVdKX0pLHRoaXN9LHguZWFjaChbImFqYXhTdGFydCIsImFqYXhTdG9wIiwiYWpheENvbXBsZXRlIiwiYWpheEVycm9yIiwiYWpheFN1Y2Nlc3MiLCJhamF4U2VuZCJdLGZ1bmN0aW9uKGUsdCl7eC5mblt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vbih0LGUpfX0pLHguZXh0ZW5kKHthY3RpdmU6MCxsYXN0TW9kaWZpZWQ6e30sZXRhZzp7fSxhamF4U2V0dGluZ3M6e3VybDp5bix0eXBlOiJHRVQiLGlzTG9jYWw6Q24udGVzdChtblsxXSksZ2xvYmFsOiEwLHByb2Nlc3NEYXRhOiEwLGFzeW5jOiEwLGNvbnRlbnRUeXBlOiJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLTgiLGFjY2VwdHM6eyIqIjpEbix0ZXh0OiJ0ZXh0L3BsYWluIixodG1sOiJ0ZXh0L2h0bWwiLHhtbDoiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsanNvbjoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0In0sY29udGVudHM6e3htbDoveG1sLyxodG1sOi9odG1sLyxqc29uOi9qc29uL30scmVzcG9uc2VGaWVsZHM6e3htbDoicmVzcG9uc2VYTUwiLHRleHQ6InJlc3BvbnNlVGV4dCIsanNvbjoicmVzcG9uc2VKU09OIn0sY29udmVydGVyczp7IiogdGV4dCI6U3RyaW5nLCJ0ZXh0IGh0bWwiOiEwLCJ0ZXh0IGpzb24iOngucGFyc2VKU09OLCJ0ZXh0IHhtbCI6eC5wYXJzZVhNTH0sZmxhdE9wdGlvbnM6e3VybDohMCxjb250ZXh0OiEwfX0sYWpheFNldHVwOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHQ/X24oX24oZSx4LmFqYXhTZXR0aW5ncyksdCk6X24oeC5hamF4U2V0dGluZ3MsZSl9LGFqYXhQcmVmaWx0ZXI6SG4oQW4pLGFqYXhUcmFuc3BvcnQ6SG4oam4pLGFqYXg6ZnVuY3Rpb24oZSxuKXsib2JqZWN0Ij09dHlwZW9mIGUmJihuPWUsZT10KSxuPW58fHt9O3ZhciByLGksbyxhLHMsbCx1LGMscD14LmFqYXhTZXR1cCh7fSxuKSxmPXAuY29udGV4dHx8cCxkPXAuY29udGV4dCYmKGYubm9kZVR5cGV8fGYuanF1ZXJ5KT94KGYpOnguZXZlbnQsaD14LkRlZmVycmVkKCksZz14LkNhbGxiYWNrcygib25jZSBtZW1vcnkiKSxtPXAuc3RhdHVzQ29kZXx8e30seT17fSx2PXt9LGI9MCx3PSJjYW5jZWxlZCIsQz17cmVhZHlTdGF0ZTowLGdldFJlc3BvbnNlSGVhZGVyOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKDI9PT1iKXtpZighYyl7Yz17fTt3aGlsZSh0PVRuLmV4ZWMoYSkpY1t0WzFdLnRvTG93ZXJDYXNlKCldPXRbMl19dD1jW2UudG9Mb3dlckNhc2UoKV19cmV0dXJuIG51bGw9PXQ/bnVsbDp0fSxnZXRBbGxSZXNwb25zZUhlYWRlcnM6ZnVuY3Rpb24oKXtyZXR1cm4gMj09PWI/YTpudWxsfSxzZXRSZXF1ZXN0SGVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZS50b0xvd2VyQ2FzZSgpO3JldHVybiBifHwoZT12W25dPXZbbl18fGUseVtlXT10KSx0aGlzfSxvdmVycmlkZU1pbWVUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiBifHwocC5taW1lVHlwZT1lKSx0aGlzfSxzdGF0dXNDb2RlOmZ1bmN0aW9uKGUpe3ZhciB0O2lmKGUpaWYoMj5iKWZvcih0IGluIGUpbVt0XT1bbVt0XSxlW3RdXTtlbHNlIEMuYWx3YXlzKGVbQy5zdGF0dXNdKTtyZXR1cm4gdGhpc30sYWJvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZXx8dztyZXR1cm4gdSYmdS5hYm9ydCh0KSxrKDAsdCksdGhpc319O2lmKGgucHJvbWlzZShDKS5jb21wbGV0ZT1nLmFkZCxDLnN1Y2Nlc3M9Qy5kb25lLEMuZXJyb3I9Qy5mYWlsLHAudXJsPSgoZXx8cC51cmx8fHluKSsiIikucmVwbGFjZSh4biwiIikucmVwbGFjZShrbixtblsxXSsiLy8iKSxwLnR5cGU9bi5tZXRob2R8fG4udHlwZXx8cC5tZXRob2R8fHAudHlwZSxwLmRhdGFUeXBlcz14LnRyaW0ocC5kYXRhVHlwZXx8IioiKS50b0xvd2VyQ2FzZSgpLm1hdGNoKFQpfHxbIiJdLG51bGw9PXAuY3Jvc3NEb21haW4mJihyPUVuLmV4ZWMocC51cmwudG9Mb3dlckNhc2UoKSkscC5jcm9zc0RvbWFpbj0hKCFyfHxyWzFdPT09bW5bMV0mJnJbMl09PT1tblsyXSYmKHJbM118fCgiaHR0cDoiPT09clsxXT8iODAiOiI0NDMiKSk9PT0obW5bM118fCgiaHR0cDoiPT09bW5bMV0/IjgwIjoiNDQzIikpKSkscC5kYXRhJiZwLnByb2Nlc3NEYXRhJiYic3RyaW5nIiE9dHlwZW9mIHAuZGF0YSYmKHAuZGF0YT14LnBhcmFtKHAuZGF0YSxwLnRyYWRpdGlvbmFsKSkscW4oQW4scCxuLEMpLDI9PT1iKXJldHVybiBDO2w9cC5nbG9iYWwsbCYmMD09PXguYWN0aXZlKysmJnguZXZlbnQudHJpZ2dlcigiYWpheFN0YXJ0IikscC50eXBlPXAudHlwZS50b1VwcGVyQ2FzZSgpLHAuaGFzQ29udGVudD0hTm4udGVzdChwLnR5cGUpLG89cC51cmwscC5oYXNDb250ZW50fHwocC5kYXRhJiYobz1wLnVybCs9KGJuLnRlc3Qobyk/IiYiOiI/IikrcC5kYXRhLGRlbGV0ZSBwLmRhdGEpLHAuY2FjaGU9PT0hMSYmKHAudXJsPXduLnRlc3Qobyk/by5yZXBsYWNlKHduLCIkMV89Iit2bisrKTpvKyhibi50ZXN0KG8pPyImIjoiPyIpKyJfPSIrdm4rKykpLHAuaWZNb2RpZmllZCYmKHgubGFzdE1vZGlmaWVkW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoIklmLU1vZGlmaWVkLVNpbmNlIix4Lmxhc3RNb2RpZmllZFtvXSkseC5ldGFnW29dJiZDLnNldFJlcXVlc3RIZWFkZXIoIklmLU5vbmUtTWF0Y2giLHguZXRhZ1tvXSkpLChwLmRhdGEmJnAuaGFzQ29udGVudCYmcC5jb250ZW50VHlwZSE9PSExfHxuLmNvbnRlbnRUeXBlKSYmQy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLHAuY29udGVudFR5cGUpLEMuc2V0UmVxdWVzdEhlYWRlcigiQWNjZXB0IixwLmRhdGFUeXBlc1swXSYmcC5hY2NlcHRzW3AuZGF0YVR5cGVzWzBdXT9wLmFjY2VwdHNbcC5kYXRhVHlwZXNbMF1dKygiKiIhPT1wLmRhdGFUeXBlc1swXT8iLCAiK0RuKyI7IHE9MC4wMSI6IiIpOnAuYWNjZXB0c1siKiJdKTtmb3IoaSBpbiBwLmhlYWRlcnMpQy5zZXRSZXF1ZXN0SGVhZGVyKGkscC5oZWFkZXJzW2ldKTtpZihwLmJlZm9yZVNlbmQmJihwLmJlZm9yZVNlbmQuY2FsbChmLEMscCk9PT0hMXx8Mj09PWIpKXJldHVybiBDLmFib3J0KCk7dz0iYWJvcnQiO2ZvcihpIGlue3N1Y2Nlc3M6MSxlcnJvcjoxLGNvbXBsZXRlOjF9KUNbaV0ocFtpXSk7aWYodT1xbihqbixwLG4sQykpe0MucmVhZHlTdGF0ZT0xLGwmJmQudHJpZ2dlcigiYWpheFNlbmQiLFtDLHBdKSxwLmFzeW5jJiZwLnRpbWVvdXQ+MCYmKHM9c2V0VGltZW91dChmdW5jdGlvbigpe0MuYWJvcnQoInRpbWVvdXQiKX0scC50aW1lb3V0KSk7dHJ5e2I9MSx1LnNlbmQoeSxrKX1jYXRjaChOKXtpZighKDI+YikpdGhyb3cgTjtrKC0xLE4pfX1lbHNlIGsoLTEsIk5vIFRyYW5zcG9ydCIpO2Z1bmN0aW9uIGsoZSxuLHIsaSl7dmFyIGMseSx2LHcsVCxOPW47MiE9PWImJihiPTIscyYmY2xlYXJUaW1lb3V0KHMpLHU9dCxhPWl8fCIiLEMucmVhZHlTdGF0ZT1lPjA/NDowLGM9ZT49MjAwJiYzMDA+ZXx8MzA0PT09ZSxyJiYodz1NbihwLEMscikpLHc9T24ocCx3LEMsYyksYz8ocC5pZk1vZGlmaWVkJiYoVD1DLmdldFJlc3BvbnNlSGVhZGVyKCJMYXN0LU1vZGlmaWVkIiksVCYmKHgubGFzdE1vZGlmaWVkW29dPVQpLFQ9Qy5nZXRSZXNwb25zZUhlYWRlcigiZXRhZyIpLFQmJih4LmV0YWdbb109VCkpLDIwND09PWV8fCJIRUFEIj09PXAudHlwZT9OPSJub2NvbnRlbnQiOjMwND09PWU/Tj0ibm90bW9kaWZpZWQiOihOPXcuc3RhdGUseT13LmRhdGEsdj13LmVycm9yLGM9IXYpKToodj1OLChlfHwhTikmJihOPSJlcnJvciIsMD5lJiYoZT0wKSkpLEMuc3RhdHVzPWUsQy5zdGF0dXNUZXh0PShufHxOKSsiIixjP2gucmVzb2x2ZVdpdGgoZixbeSxOLENdKTpoLnJlamVjdFdpdGgoZixbQyxOLHZdKSxDLnN0YXR1c0NvZGUobSksbT10LGwmJmQudHJpZ2dlcihjPyJhamF4U3VjY2VzcyI6ImFqYXhFcnJvciIsW0MscCxjP3k6dl0pLGcuZmlyZVdpdGgoZixbQyxOXSksbCYmKGQudHJpZ2dlcigiYWpheENvbXBsZXRlIixbQyxwXSksLS14LmFjdGl2ZXx8eC5ldmVudC50cmlnZ2VyKCJhamF4U3RvcCIpKSl9cmV0dXJuIEN9LGdldEpTT046ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB4LmdldChlLHQsbiwianNvbiIpfSxnZXRTY3JpcHQ6ZnVuY3Rpb24oZSxuKXtyZXR1cm4geC5nZXQoZSx0LG4sInNjcmlwdCIpfX0pLHguZWFjaChbImdldCIsInBvc3QiXSxmdW5jdGlvbihlLG4pe3hbbl09ZnVuY3Rpb24oZSxyLGksbyl7cmV0dXJuIHguaXNGdW5jdGlvbihyKSYmKG89b3x8aSxpPXIscj10KSx4LmFqYXgoe3VybDplLHR5cGU6bixkYXRhVHlwZTpvLGRhdGE6cixzdWNjZXNzOml9KX19KTtmdW5jdGlvbiBNbihlLG4scil7dmFyIGksbyxhLHMsbD1lLmNvbnRlbnRzLHU9ZS5kYXRhVHlwZXM7d2hpbGUoIioiPT09dVswXSl1LnNoaWZ0KCksbz09PXQmJihvPWUubWltZVR5cGV8fG4uZ2V0UmVzcG9uc2VIZWFkZXIoIkNvbnRlbnQtVHlwZSIpKTtpZihvKWZvcihzIGluIGwpaWYobFtzXSYmbFtzXS50ZXN0KG8pKXt1LnVuc2hpZnQocyk7YnJlYWt9aWYodVswXWluIHIpYT11WzBdO2Vsc2V7Zm9yKHMgaW4gcil7aWYoIXVbMF18fGUuY29udmVydGVyc1tzKyIgIit1WzBdXSl7YT1zO2JyZWFrfWl8fChpPXMpfWE9YXx8aX1yZXR1cm4gYT8oYSE9PXVbMF0mJnUudW5zaGlmdChhKSxyW2FdKTp0fWZ1bmN0aW9uIE9uKGUsdCxuLHIpe3ZhciBpLG8sYSxzLGwsdT17fSxjPWUuZGF0YVR5cGVzLnNsaWNlKCk7aWYoY1sxXSlmb3IoYSBpbiBlLmNvbnZlcnRlcnMpdVthLnRvTG93ZXJDYXNlKCldPWUuY29udmVydGVyc1thXTtvPWMuc2hpZnQoKTt3aGlsZShvKWlmKGUucmVzcG9uc2VGaWVsZHNbb10mJihuW2UucmVzcG9uc2VGaWVsZHNbb11dPXQpLCFsJiZyJiZlLmRhdGFGaWx0ZXImJih0PWUuZGF0YUZpbHRlcih0LGUuZGF0YVR5cGUpKSxsPW8sbz1jLnNoaWZ0KCkpaWYoIioiPT09bylvPWw7ZWxzZSBpZigiKiIhPT1sJiZsIT09byl7aWYoYT11W2wrIiAiK29dfHx1WyIqICIrb10sIWEpZm9yKGkgaW4gdSlpZihzPWkuc3BsaXQoIiAiKSxzWzFdPT09byYmKGE9dVtsKyIgIitzWzBdXXx8dVsiKiAiK3NbMF1dKSl7YT09PSEwP2E9dVtpXTp1W2ldIT09ITAmJihvPXNbMF0sYy51bnNoaWZ0KHNbMV0pKTticmVha31pZihhIT09ITApaWYoYSYmZVsidGhyb3dzIl0pdD1hKHQpO2Vsc2UgdHJ5e3Q9YSh0KX1jYXRjaChwKXtyZXR1cm57c3RhdGU6InBhcnNlcmVycm9yIixlcnJvcjphP3A6Ik5vIGNvbnZlcnNpb24gZnJvbSAiK2wrIiB0byAiK299fX1yZXR1cm57c3RhdGU6InN1Y2Nlc3MiLGRhdGE6dH19eC5hamF4U2V0dXAoe2FjY2VwdHM6e3NjcmlwdDoidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQifSxjb250ZW50czp7c2NyaXB0Oi8oPzpqYXZhfGVjbWEpc2NyaXB0L30sY29udmVydGVyczp7InRleHQgc2NyaXB0IjpmdW5jdGlvbihlKXtyZXR1cm4geC5nbG9iYWxFdmFsKGUpLGV9fX0pLHguYWpheFByZWZpbHRlcigic2NyaXB0IixmdW5jdGlvbihlKXtlLmNhY2hlPT09dCYmKGUuY2FjaGU9ITEpLGUuY3Jvc3NEb21haW4mJihlLnR5cGU9IkdFVCIsZS5nbG9iYWw9ITEpfSkseC5hamF4VHJhbnNwb3J0KCJzY3JpcHQiLGZ1bmN0aW9uKGUpe2lmKGUuY3Jvc3NEb21haW4pe3ZhciBuLHI9YS5oZWFkfHx4KCJoZWFkIilbMF18fGEuZG9jdW1lbnRFbGVtZW50O3JldHVybntzZW5kOmZ1bmN0aW9uKHQsaSl7bj1hLmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpLG4uYXN5bmM9ITAsZS5zY3JpcHRDaGFyc2V0JiYobi5jaGFyc2V0PWUuc2NyaXB0Q2hhcnNldCksbi5zcmM9ZS51cmwsbi5vbmxvYWQ9bi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oZSx0KXsodHx8IW4ucmVhZHlTdGF0ZXx8L2xvYWRlZHxjb21wbGV0ZS8udGVzdChuLnJlYWR5U3RhdGUpKSYmKG4ub25sb2FkPW4ub25yZWFkeXN0YXRlY2hhbmdlPW51bGwsbi5wYXJlbnROb2RlJiZuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobiksbj1udWxsLHR8fGkoMjAwLCJzdWNjZXNzIikpfSxyLmluc2VydEJlZm9yZShuLHIuZmlyc3RDaGlsZCl9LGFib3J0OmZ1bmN0aW9uKCl7biYmbi5vbmxvYWQodCwhMCl9fX19KTt2YXIgRm49W10sQm49Lyg9KVw/KD89JnwkKXxcP1w/Lzt4LmFqYXhTZXR1cCh7anNvbnA6ImNhbGxiYWNrIixqc29ucENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIGU9Rm4ucG9wKCl8fHguZXhwYW5kbysiXyIrdm4rKztyZXR1cm4gdGhpc1tlXT0hMCxlfX0pLHguYWpheFByZWZpbHRlcigianNvbiBqc29ucCIsZnVuY3Rpb24obixyLGkpe3ZhciBvLGEscyxsPW4uanNvbnAhPT0hMSYmKEJuLnRlc3Qobi51cmwpPyJ1cmwiOiJzdHJpbmciPT10eXBlb2Ygbi5kYXRhJiYhKG4uY29udGVudFR5cGV8fCIiKS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSYmQm4udGVzdChuLmRhdGEpJiYiZGF0YSIpO3JldHVybiBsfHwianNvbnAiPT09bi5kYXRhVHlwZXNbMF0/KG89bi5qc29ucENhbGxiYWNrPXguaXNGdW5jdGlvbihuLmpzb25wQ2FsbGJhY2spP24uanNvbnBDYWxsYmFjaygpOm4uanNvbnBDYWxsYmFjayxsP25bbF09bltsXS5yZXBsYWNlKEJuLCIkMSIrbyk6bi5qc29ucCE9PSExJiYobi51cmwrPShibi50ZXN0KG4udXJsKT8iJiI6Ij8iKStuLmpzb25wKyI9IitvKSxuLmNvbnZlcnRlcnNbInNjcmlwdCBqc29uIl09ZnVuY3Rpb24oKXtyZXR1cm4gc3x8eC5lcnJvcihvKyIgd2FzIG5vdCBjYWxsZWQiKSxzWzBdfSxuLmRhdGFUeXBlc1swXT0ianNvbiIsYT1lW29dLGVbb109ZnVuY3Rpb24oKXtzPWFyZ3VtZW50c30saS5hbHdheXMoZnVuY3Rpb24oKXtlW29dPWEsbltvXSYmKG4uanNvbnBDYWxsYmFjaz1yLmpzb25wQ2FsbGJhY2ssRm4ucHVzaChvKSkscyYmeC5pc0Z1bmN0aW9uKGEpJiZhKHNbMF0pLHM9YT10fSksInNjcmlwdCIpOnR9KTt2YXIgUG4sUm4sV249MCwkbj1lLkFjdGl2ZVhPYmplY3QmJmZ1bmN0aW9uKCl7dmFyIGU7Zm9yKGUgaW4gUG4pUG5bZV0odCwhMCl9O2Z1bmN0aW9uIEluKCl7dHJ5e3JldHVybiBuZXcgZS5YTUxIdHRwUmVxdWVzdH1jYXRjaCh0KXt9fWZ1bmN0aW9uIHpuKCl7dHJ5e3JldHVybiBuZXcgZS5BY3RpdmVYT2JqZWN0KCJNaWNyb3NvZnQuWE1MSFRUUCIpfWNhdGNoKHQpe319eC5hamF4U2V0dGluZ3MueGhyPWUuQWN0aXZlWE9iamVjdD9mdW5jdGlvbigpe3JldHVybiF0aGlzLmlzTG9jYWwmJkluKCl8fHpuKCl9OkluLFJuPXguYWpheFNldHRpbmdzLnhocigpLHguc3VwcG9ydC5jb3JzPSEhUm4mJiJ3aXRoQ3JlZGVudGlhbHMiaW4gUm4sUm49eC5zdXBwb3J0LmFqYXg9ISFSbixSbiYmeC5hamF4VHJhbnNwb3J0KGZ1bmN0aW9uKG4pe2lmKCFuLmNyb3NzRG9tYWlufHx4LnN1cHBvcnQuY29ycyl7dmFyIHI7cmV0dXJue3NlbmQ6ZnVuY3Rpb24oaSxvKXt2YXIgYSxzLGw9bi54aHIoKTtpZihuLnVzZXJuYW1lP2wub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyxuLnVzZXJuYW1lLG4ucGFzc3dvcmQpOmwub3BlbihuLnR5cGUsbi51cmwsbi5hc3luYyksbi54aHJGaWVsZHMpZm9yKHMgaW4gbi54aHJGaWVsZHMpbFtzXT1uLnhockZpZWxkc1tzXTtuLm1pbWVUeXBlJiZsLm92ZXJyaWRlTWltZVR5cGUmJmwub3ZlcnJpZGVNaW1lVHlwZShuLm1pbWVUeXBlKSxuLmNyb3NzRG9tYWlufHxpWyJYLVJlcXVlc3RlZC1XaXRoIl18fChpWyJYLVJlcXVlc3RlZC1XaXRoIl09IlhNTEh0dHBSZXF1ZXN0Iik7dHJ5e2ZvcihzIGluIGkpbC5zZXRSZXF1ZXN0SGVhZGVyKHMsaVtzXSl9Y2F0Y2godSl7fWwuc2VuZChuLmhhc0NvbnRlbnQmJm4uZGF0YXx8bnVsbCkscj1mdW5jdGlvbihlLGkpe3ZhciBzLHUsYyxwO3RyeXtpZihyJiYoaXx8ND09PWwucmVhZHlTdGF0ZSkpaWYocj10LGEmJihsLm9ucmVhZHlzdGF0ZWNoYW5nZT14Lm5vb3AsJG4mJmRlbGV0ZSBQblthXSksaSk0IT09bC5yZWFkeVN0YXRlJiZsLmFib3J0KCk7ZWxzZXtwPXt9LHM9bC5zdGF0dXMsdT1sLmdldEFsbFJlc3BvbnNlSGVhZGVycygpLCJzdHJpbmciPT10eXBlb2YgbC5yZXNwb25zZVRleHQmJihwLnRleHQ9bC5yZXNwb25zZVRleHQpO3RyeXtjPWwuc3RhdHVzVGV4dH1jYXRjaChmKXtjPSIifXN8fCFuLmlzTG9jYWx8fG4uY3Jvc3NEb21haW4/MTIyMz09PXMmJihzPTIwNCk6cz1wLnRleHQ/MjAwOjQwNH19Y2F0Y2goZCl7aXx8bygtMSxkKX1wJiZvKHMsYyxwLHUpfSxuLmFzeW5jPzQ9PT1sLnJlYWR5U3RhdGU/c2V0VGltZW91dChyKTooYT0rK1duLCRuJiYoUG58fChQbj17fSx4KGUpLnVubG9hZCgkbikpLFBuW2FdPXIpLGwub25yZWFkeXN0YXRlY2hhbmdlPXIpOnIoKX0sYWJvcnQ6ZnVuY3Rpb24oKXtyJiZyKHQsITApfX19fSk7dmFyIFhuLFVuLFZuPS9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxZbj1SZWdFeHAoIl4oPzooWystXSk9fCkoIit3KyIpKFthLXolXSopJCIsImkiKSxKbj0vcXVldWVIb29rcyQvLEduPVtucl0sUW49eyIqIjpbZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmNyZWF0ZVR3ZWVuKGUsdCkscj1uLmN1cigpLGk9WW4uZXhlYyh0KSxvPWkmJmlbM118fCh4LmNzc051bWJlcltlXT8iIjoicHgiKSxhPSh4LmNzc051bWJlcltlXXx8InB4IiE9PW8mJityKSYmWW4uZXhlYyh4LmNzcyhuLmVsZW0sZSkpLHM9MSxsPTIwO2lmKGEmJmFbM10hPT1vKXtvPW98fGFbM10saT1pfHxbXSxhPStyfHwxO2RvIHM9c3x8Ii41IixhLz1zLHguc3R5bGUobi5lbGVtLGUsYStvKTt3aGlsZShzIT09KHM9bi5jdXIoKS9yKSYmMSE9PXMmJi0tbCl9cmV0dXJuIGkmJihhPW4uc3RhcnQ9K2F8fCtyfHwwLG4udW5pdD1vLG4uZW5kPWlbMV0/YSsoaVsxXSsxKSppWzJdOitpWzJdKSxufV19O2Z1bmN0aW9uIEtuKCl7cmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtYbj10fSksWG49eC5ub3coKX1mdW5jdGlvbiBabihlLHQsbil7dmFyIHIsaT0oUW5bdF18fFtdKS5jb25jYXQoUW5bIioiXSksbz0wLGE9aS5sZW5ndGg7Zm9yKDthPm87bysrKWlmKHI9aVtvXS5jYWxsKG4sdCxlKSlyZXR1cm4gcn1mdW5jdGlvbiBlcihlLHQsbil7dmFyIHIsaSxvPTAsYT1Hbi5sZW5ndGgscz14LkRlZmVycmVkKCkuYWx3YXlzKGZ1bmN0aW9uKCl7ZGVsZXRlIGwuZWxlbX0pLGw9ZnVuY3Rpb24oKXtpZihpKXJldHVybiExO3ZhciB0PVhufHxLbigpLG49TWF0aC5tYXgoMCx1LnN0YXJ0VGltZSt1LmR1cmF0aW9uLXQpLHI9bi91LmR1cmF0aW9ufHwwLG89MS1yLGE9MCxsPXUudHdlZW5zLmxlbmd0aDtmb3IoO2w+YTthKyspdS50d2VlbnNbYV0ucnVuKG8pO3JldHVybiBzLm5vdGlmeVdpdGgoZSxbdSxvLG5dKSwxPm8mJmw/bjoocy5yZXNvbHZlV2l0aChlLFt1XSksITEpfSx1PXMucHJvbWlzZSh7ZWxlbTplLHByb3BzOnguZXh0ZW5kKHt9LHQpLG9wdHM6eC5leHRlbmQoITAse3NwZWNpYWxFYXNpbmc6e319LG4pLG9yaWdpbmFsUHJvcGVydGllczp0LG9yaWdpbmFsT3B0aW9uczpuLHN0YXJ0VGltZTpYbnx8S24oKSxkdXJhdGlvbjpuLmR1cmF0aW9uLHR3ZWVuczpbXSxjcmVhdGVUd2VlbjpmdW5jdGlvbih0LG4pe3ZhciByPXguVHdlZW4oZSx1Lm9wdHMsdCxuLHUub3B0cy5zcGVjaWFsRWFzaW5nW3RdfHx1Lm9wdHMuZWFzaW5nKTtyZXR1cm4gdS50d2VlbnMucHVzaChyKSxyfSxzdG9wOmZ1bmN0aW9uKHQpe3ZhciBuPTAscj10P3UudHdlZW5zLmxlbmd0aDowO2lmKGkpcmV0dXJuIHRoaXM7Zm9yKGk9ITA7cj5uO24rKyl1LnR3ZWVuc1tuXS5ydW4oMSk7cmV0dXJuIHQ/cy5yZXNvbHZlV2l0aChlLFt1LHRdKTpzLnJlamVjdFdpdGgoZSxbdSx0XSksdGhpc319KSxjPXUucHJvcHM7Zm9yKHRyKGMsdS5vcHRzLnNwZWNpYWxFYXNpbmcpO2E+bztvKyspaWYocj1HbltvXS5jYWxsKHUsZSxjLHUub3B0cykpcmV0dXJuIHI7cmV0dXJuIHgubWFwKGMsWm4sdSkseC5pc0Z1bmN0aW9uKHUub3B0cy5zdGFydCkmJnUub3B0cy5zdGFydC5jYWxsKGUsdSkseC5meC50aW1lcih4LmV4dGVuZChsLHtlbGVtOmUsYW5pbTp1LHF1ZXVlOnUub3B0cy5xdWV1ZX0pKSx1LnByb2dyZXNzKHUub3B0cy5wcm9ncmVzcykuZG9uZSh1Lm9wdHMuZG9uZSx1Lm9wdHMuY29tcGxldGUpLmZhaWwodS5vcHRzLmZhaWwpLmFsd2F5cyh1Lm9wdHMuYWx3YXlzKX1mdW5jdGlvbiB0cihlLHQpe3ZhciBuLHIsaSxvLGE7Zm9yKG4gaW4gZSlpZihyPXguY2FtZWxDYXNlKG4pLGk9dFtyXSxvPWVbbl0seC5pc0FycmF5KG8pJiYoaT1vWzFdLG89ZVtuXT1vWzBdKSxuIT09ciYmKGVbcl09byxkZWxldGUgZVtuXSksYT14LmNzc0hvb2tzW3JdLGEmJiJleHBhbmQiaW4gYSl7bz1hLmV4cGFuZChvKSxkZWxldGUgZVtyXTtmb3IobiBpbiBvKW4gaW4gZXx8KGVbbl09b1tuXSx0W25dPWkpfWVsc2UgdFtyXT1pfXguQW5pbWF0aW9uPXguZXh0ZW5kKGVyLHt0d2VlbmVyOmZ1bmN0aW9uKGUsdCl7eC5pc0Z1bmN0aW9uKGUpPyh0PWUsZT1bIioiXSk6ZT1lLnNwbGl0KCIgIik7dmFyIG4scj0wLGk9ZS5sZW5ndGg7Zm9yKDtpPnI7cisrKW49ZVtyXSxRbltuXT1RbltuXXx8W10sUW5bbl0udW5zaGlmdCh0KX0scHJlZmlsdGVyOmZ1bmN0aW9uKGUsdCl7dD9Hbi51bnNoaWZ0KGUpOkduLnB1c2goZSl9fSk7ZnVuY3Rpb24gbnIoZSx0LG4pe3ZhciByLGksbyxhLHMsbCx1PXRoaXMsYz17fSxwPWUuc3R5bGUsZj1lLm5vZGVUeXBlJiZubihlKSxkPXguX2RhdGEoZSwiZnhzaG93Iik7bi5xdWV1ZXx8KHM9eC5fcXVldWVIb29rcyhlLCJmeCIpLG51bGw9PXMudW5xdWV1ZWQmJihzLnVucXVldWVkPTAsbD1zLmVtcHR5LmZpcmUscy5lbXB0eS5maXJlPWZ1bmN0aW9uKCl7cy51bnF1ZXVlZHx8bCgpfSkscy51bnF1ZXVlZCsrLHUuYWx3YXlzKGZ1bmN0aW9uKCl7dS5hbHdheXMoZnVuY3Rpb24oKXtzLnVucXVldWVkLS0seC5xdWV1ZShlLCJmeCIpLmxlbmd0aHx8cy5lbXB0eS5maXJlKCl9KX0pKSwxPT09ZS5ub2RlVHlwZSYmKCJoZWlnaHQiaW4gdHx8IndpZHRoImluIHQpJiYobi5vdmVyZmxvdz1bcC5vdmVyZmxvdyxwLm92ZXJmbG93WCxwLm92ZXJmbG93WV0sImlubGluZSI9PT14LmNzcyhlLCJkaXNwbGF5IikmJiJub25lIj09PXguY3NzKGUsImZsb2F0IikmJih4LnN1cHBvcnQuaW5saW5lQmxvY2tOZWVkc0xheW91dCYmImlubGluZSIhPT1sbihlLm5vZGVOYW1lKT9wLnpvb209MTpwLmRpc3BsYXk9ImlubGluZS1ibG9jayIpKSxuLm92ZXJmbG93JiYocC5vdmVyZmxvdz0iaGlkZGVuIix4LnN1cHBvcnQuc2hyaW5rV3JhcEJsb2Nrc3x8dS5hbHdheXMoZnVuY3Rpb24oKXtwLm92ZXJmbG93PW4ub3ZlcmZsb3dbMF0scC5vdmVyZmxvd1g9bi5vdmVyZmxvd1sxXSxwLm92ZXJmbG93WT1uLm92ZXJmbG93WzJdfSkpO2ZvcihyIGluIHQpaWYoaT10W3JdLFZuLmV4ZWMoaSkpe2lmKGRlbGV0ZSB0W3JdLG89b3x8InRvZ2dsZSI9PT1pLGk9PT0oZj8iaGlkZSI6InNob3ciKSljb250aW51ZTtjW3JdPWQmJmRbcl18fHguc3R5bGUoZSxyKX1pZigheC5pc0VtcHR5T2JqZWN0KGMpKXtkPyJoaWRkZW4iaW4gZCYmKGY9ZC5oaWRkZW4pOmQ9eC5fZGF0YShlLCJmeHNob3ciLHt9KSxvJiYoZC5oaWRkZW49IWYpLGY/eChlKS5zaG93KCk6dS5kb25lKGZ1bmN0aW9uKCl7eChlKS5oaWRlKCl9KSx1LmRvbmUoZnVuY3Rpb24oKXt2YXIgdDt4Ll9yZW1vdmVEYXRhKGUsImZ4c2hvdyIpO2Zvcih0IGluIGMpeC5zdHlsZShlLHQsY1t0XSl9KTtmb3IociBpbiBjKWE9Wm4oZj9kW3JdOjAscix1KSxyIGluIGR8fChkW3JdPWEuc3RhcnQsZiYmKGEuZW5kPWEuc3RhcnQsYS5zdGFydD0id2lkdGgiPT09cnx8ImhlaWdodCI9PT1yPzE6MCkpfX1mdW5jdGlvbiBycihlLHQsbixyLGkpe3JldHVybiBuZXcgcnIucHJvdG90eXBlLmluaXQoZSx0LG4scixpKX14LlR3ZWVuPXJyLHJyLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cnIsaW5pdDpmdW5jdGlvbihlLHQsbixyLGksbyl7dGhpcy5lbGVtPWUsdGhpcy5wcm9wPW4sdGhpcy5lYXNpbmc9aXx8InN3aW5nIix0aGlzLm9wdGlvbnM9dCx0aGlzLnN0YXJ0PXRoaXMubm93PXRoaXMuY3VyKCksdGhpcy5lbmQ9cix0aGlzLnVuaXQ9b3x8KHguY3NzTnVtYmVyW25dPyIiOiJweCIpfSxjdXI6ZnVuY3Rpb24oKXt2YXIgZT1yci5wcm9wSG9va3NbdGhpcy5wcm9wXTtyZXR1cm4gZSYmZS5nZXQ/ZS5nZXQodGhpcyk6cnIucHJvcEhvb2tzLl9kZWZhdWx0LmdldCh0aGlzKX0scnVuOmZ1bmN0aW9uKGUpe3ZhciB0LG49cnIucHJvcEhvb2tzW3RoaXMucHJvcF07cmV0dXJuIHRoaXMucG9zPXQ9dGhpcy5vcHRpb25zLmR1cmF0aW9uP3guZWFzaW5nW3RoaXMuZWFzaW5nXShlLHRoaXMub3B0aW9ucy5kdXJhdGlvbiplLDAsMSx0aGlzLm9wdGlvbnMuZHVyYXRpb24pOmUsdGhpcy5ub3c9KHRoaXMuZW5kLXRoaXMuc3RhcnQpKnQrdGhpcy5zdGFydCx0aGlzLm9wdGlvbnMuc3RlcCYmdGhpcy5vcHRpb25zLnN0ZXAuY2FsbCh0aGlzLmVsZW0sdGhpcy5ub3csdGhpcyksbiYmbi5zZXQ/bi5zZXQodGhpcyk6cnIucHJvcEhvb2tzLl9kZWZhdWx0LnNldCh0aGlzKSx0aGlzfX0scnIucHJvdG90eXBlLmluaXQucHJvdG90eXBlPXJyLnByb3RvdHlwZSxyci5wcm9wSG9va3M9e19kZWZhdWx0OntnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG51bGw9PWUuZWxlbVtlLnByb3BdfHxlLmVsZW0uc3R5bGUmJm51bGwhPWUuZWxlbS5zdHlsZVtlLnByb3BdPyh0PXguY3NzKGUuZWxlbSxlLnByb3AsIiIpLHQmJiJhdXRvIiE9PXQ/dDowKTplLmVsZW1bZS5wcm9wXX0sc2V0OmZ1bmN0aW9uKGUpe3guZnguc3RlcFtlLnByb3BdP3guZnguc3RlcFtlLnByb3BdKGUpOmUuZWxlbS5zdHlsZSYmKG51bGwhPWUuZWxlbS5zdHlsZVt4LmNzc1Byb3BzW2UucHJvcF1dfHx4LmNzc0hvb2tzW2UucHJvcF0pP3guc3R5bGUoZS5lbGVtLGUucHJvcCxlLm5vdytlLnVuaXQpOmUuZWxlbVtlLnByb3BdPWUubm93fX19LHJyLnByb3BIb29rcy5zY3JvbGxUb3A9cnIucHJvcEhvb2tzLnNjcm9sbExlZnQ9e3NldDpmdW5jdGlvbihlKXtlLmVsZW0ubm9kZVR5cGUmJmUuZWxlbS5wYXJlbnROb2RlJiYoZS5lbGVtW2UucHJvcF09ZS5ub3cpfX0seC5lYWNoKFsidG9nZ2xlIiwic2hvdyIsImhpZGUiXSxmdW5jdGlvbihlLHQpe3ZhciBuPXguZm5bdF07eC5mblt0XT1mdW5jdGlvbihlLHIsaSl7cmV0dXJuIG51bGw9PWV8fCJib29sZWFuIj09dHlwZW9mIGU/bi5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dGhpcy5hbmltYXRlKGlyKHQsITApLGUscixpKX19KSx4LmZuLmV4dGVuZCh7ZmFkZVRvOmZ1bmN0aW9uKGUsdCxuLHIpe3JldHVybiB0aGlzLmZpbHRlcihubikuY3NzKCJvcGFjaXR5IiwwKS5zaG93KCkuZW5kKCkuYW5pbWF0ZSh7b3BhY2l0eTp0fSxlLG4scil9LGFuaW1hdGU6ZnVuY3Rpb24oZSx0LG4scil7dmFyIGk9eC5pc0VtcHR5T2JqZWN0KGUpLG89eC5zcGVlZCh0LG4sciksYT1mdW5jdGlvbigpe3ZhciB0PWVyKHRoaXMseC5leHRlbmQoe30sZSksbyk7KGl8fHguX2RhdGEodGhpcywiZmluaXNoIikpJiZ0LnN0b3AoITApfTtyZXR1cm4gYS5maW5pc2g9YSxpfHxvLnF1ZXVlPT09ITE/dGhpcy5lYWNoKGEpOnRoaXMucXVldWUoby5xdWV1ZSxhKX0sc3RvcDpmdW5jdGlvbihlLG4scil7dmFyIGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdG9wO2RlbGV0ZSBlLnN0b3AsdChyKX07cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlJiYocj1uLG49ZSxlPXQpLG4mJmUhPT0hMSYmdGhpcy5xdWV1ZShlfHwiZngiLFtdKSx0aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgdD0hMCxuPW51bGwhPWUmJmUrInF1ZXVlSG9va3MiLG89eC50aW1lcnMsYT14Ll9kYXRhKHRoaXMpO2lmKG4pYVtuXSYmYVtuXS5zdG9wJiZpKGFbbl0pO2Vsc2UgZm9yKG4gaW4gYSlhW25dJiZhW25dLnN0b3AmJkpuLnRlc3QobikmJmkoYVtuXSk7Zm9yKG49by5sZW5ndGg7bi0tOylvW25dLmVsZW0hPT10aGlzfHxudWxsIT1lJiZvW25dLnF1ZXVlIT09ZXx8KG9bbl0uYW5pbS5zdG9wKHIpLHQ9ITEsby5zcGxpY2UobiwxKSk7KHR8fCFyKSYmeC5kZXF1ZXVlKHRoaXMsZSl9KX0sZmluaXNoOmZ1bmN0aW9uKGUpe3JldHVybiBlIT09ITEmJihlPWV8fCJmeCIpLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciB0LG49eC5fZGF0YSh0aGlzKSxyPW5bZSsicXVldWUiXSxpPW5bZSsicXVldWVIb29rcyJdLG89eC50aW1lcnMsYT1yP3IubGVuZ3RoOjA7Zm9yKG4uZmluaXNoPSEwLHgucXVldWUodGhpcyxlLFtdKSxpJiZpLnN0b3AmJmkuc3RvcC5jYWxsKHRoaXMsITApLHQ9by5sZW5ndGg7dC0tOylvW3RdLmVsZW09PT10aGlzJiZvW3RdLnF1ZXVlPT09ZSYmKG9bdF0uYW5pbS5zdG9wKCEwKSxvLnNwbGljZSh0LDEpKTtmb3IodD0wO2E+dDt0Kyspclt0XSYmclt0XS5maW5pc2gmJnJbdF0uZmluaXNoLmNhbGwodGhpcyk7ZGVsZXRlIG4uZmluaXNofSl9fSk7ZnVuY3Rpb24gaXIoZSx0KXt2YXIgbixyPXtoZWlnaHQ6ZX0saT0wO2Zvcih0PXQ/MTowOzQ+aTtpKz0yLXQpbj1adFtpXSxyWyJtYXJnaW4iK25dPXJbInBhZGRpbmciK25dPWU7cmV0dXJuIHQmJihyLm9wYWNpdHk9ci53aWR0aD1lKSxyfXguZWFjaCh7c2xpZGVEb3duOmlyKCJzaG93Iiksc2xpZGVVcDppcigiaGlkZSIpLHNsaWRlVG9nZ2xlOmlyKCJ0b2dnbGUiKSxmYWRlSW46e29wYWNpdHk6InNob3cifSxmYWRlT3V0OntvcGFjaXR5OiJoaWRlIn0sZmFkZVRvZ2dsZTp7b3BhY2l0eToidG9nZ2xlIn19LGZ1bmN0aW9uKGUsdCl7eC5mbltlXT1mdW5jdGlvbihlLG4scil7cmV0dXJuIHRoaXMuYW5pbWF0ZSh0LGUsbixyKX19KSx4LnNwZWVkPWZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1lJiYib2JqZWN0Ij09dHlwZW9mIGU/eC5leHRlbmQoe30sZSk6e2NvbXBsZXRlOm58fCFuJiZ0fHx4LmlzRnVuY3Rpb24oZSkmJmUsZHVyYXRpb246ZSxlYXNpbmc6biYmdHx8dCYmIXguaXNGdW5jdGlvbih0KSYmdH07cmV0dXJuIHIuZHVyYXRpb249eC5meC5vZmY/MDoibnVtYmVyIj09dHlwZW9mIHIuZHVyYXRpb24/ci5kdXJhdGlvbjpyLmR1cmF0aW9uIGluIHguZnguc3BlZWRzP3guZnguc3BlZWRzW3IuZHVyYXRpb25dOnguZnguc3BlZWRzLl9kZWZhdWx0LChudWxsPT1yLnF1ZXVlfHxyLnF1ZXVlPT09ITApJiYoci5xdWV1ZT0iZngiKSxyLm9sZD1yLmNvbXBsZXRlLHIuY29tcGxldGU9ZnVuY3Rpb24oKXt4LmlzRnVuY3Rpb24oci5vbGQpJiZyLm9sZC5jYWxsKHRoaXMpLHIucXVldWUmJnguZGVxdWV1ZSh0aGlzLHIucXVldWUpfSxyfSx4LmVhc2luZz17bGluZWFyOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxzd2luZzpmdW5jdGlvbihlKXtyZXR1cm4uNS1NYXRoLmNvcyhlKk1hdGguUEkpLzJ9fSx4LnRpbWVycz1bXSx4LmZ4PXJyLnByb3RvdHlwZS5pbml0LHguZngudGljaz1mdW5jdGlvbigpe3ZhciBlLG49eC50aW1lcnMscj0wO2ZvcihYbj14Lm5vdygpO24ubGVuZ3RoPnI7cisrKWU9bltyXSxlKCl8fG5bcl0hPT1lfHxuLnNwbGljZShyLS0sMSk7bi5sZW5ndGh8fHguZnguc3RvcCgpLFhuPXR9LHguZngudGltZXI9ZnVuY3Rpb24oZSl7ZSgpJiZ4LnRpbWVycy5wdXNoKGUpJiZ4LmZ4LnN0YXJ0KCl9LHguZnguaW50ZXJ2YWw9MTMseC5meC5zdGFydD1mdW5jdGlvbigpe1VufHwoVW49c2V0SW50ZXJ2YWwoeC5meC50aWNrLHguZnguaW50ZXJ2YWwpKX0seC5meC5zdG9wPWZ1bmN0aW9uKCl7Y2xlYXJJbnRlcnZhbChVbiksVW49bnVsbH0seC5meC5zcGVlZHM9e3Nsb3c6NjAwLGZhc3Q6MjAwLF9kZWZhdWx0OjQwMH0seC5meC5zdGVwPXt9LHguZXhwciYmeC5leHByLmZpbHRlcnMmJih4LmV4cHIuZmlsdGVycy5hbmltYXRlZD1mdW5jdGlvbihlKXtyZXR1cm4geC5ncmVwKHgudGltZXJzLGZ1bmN0aW9uKHQpe3JldHVybiBlPT09dC5lbGVtfSkubGVuZ3RofSkseC5mbi5vZmZzZXQ9ZnVuY3Rpb24oZSl7aWYoYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gZT09PXQ/dGhpczp0aGlzLmVhY2goZnVuY3Rpb24odCl7eC5vZmZzZXQuc2V0T2Zmc2V0KHRoaXMsZSx0KX0pO3ZhciBuLHIsbz17dG9wOjAsbGVmdDowfSxhPXRoaXNbMF0scz1hJiZhLm93bmVyRG9jdW1lbnQ7aWYocylyZXR1cm4gbj1zLmRvY3VtZW50RWxlbWVudCx4LmNvbnRhaW5zKG4sYSk/KHR5cGVvZiBhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCE9PWkmJihvPWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpLHI9b3Iocykse3RvcDpvLnRvcCsoci5wYWdlWU9mZnNldHx8bi5zY3JvbGxUb3ApLShuLmNsaWVudFRvcHx8MCksbGVmdDpvLmxlZnQrKHIucGFnZVhPZmZzZXR8fG4uc2Nyb2xsTGVmdCktKG4uY2xpZW50TGVmdHx8MCl9KTpvfSx4Lm9mZnNldD17c2V0T2Zmc2V0OmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj14LmNzcyhlLCJwb3NpdGlvbiIpOyJzdGF0aWMiPT09ciYmKGUuc3R5bGUucG9zaXRpb249InJlbGF0aXZlIik7dmFyIGk9eChlKSxvPWkub2Zmc2V0KCksYT14LmNzcyhlLCJ0b3AiKSxzPXguY3NzKGUsImxlZnQiKSxsPSgiYWJzb2x1dGUiPT09cnx8ImZpeGVkIj09PXIpJiZ4LmluQXJyYXkoImF1dG8iLFthLHNdKT4tMSx1PXt9LGM9e30scCxmO2w/KGM9aS5wb3NpdGlvbigpLHA9Yy50b3AsZj1jLmxlZnQpOihwPXBhcnNlRmxvYXQoYSl8fDAsZj1wYXJzZUZsb2F0KHMpfHwwKSx4LmlzRnVuY3Rpb24odCkmJih0PXQuY2FsbChlLG4sbykpLG51bGwhPXQudG9wJiYodS50b3A9dC50b3Atby50b3ArcCksbnVsbCE9dC5sZWZ0JiYodS5sZWZ0PXQubGVmdC1vLmxlZnQrZiksInVzaW5nImluIHQ/dC51c2luZy5jYWxsKGUsdSk6aS5jc3ModSl9fSx4LmZuLmV4dGVuZCh7cG9zaXRpb246ZnVuY3Rpb24oKXtpZih0aGlzWzBdKXt2YXIgZSx0LG49e3RvcDowLGxlZnQ6MH0scj10aGlzWzBdO3JldHVybiJmaXhlZCI9PT14LmNzcyhyLCJwb3NpdGlvbiIpP3Q9ci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTooZT10aGlzLm9mZnNldFBhcmVudCgpLHQ9dGhpcy5vZmZzZXQoKSx4Lm5vZGVOYW1lKGVbMF0sImh0bWwiKXx8KG49ZS5vZmZzZXQoKSksbi50b3ArPXguY3NzKGVbMF0sImJvcmRlclRvcFdpZHRoIiwhMCksbi5sZWZ0Kz14LmNzcyhlWzBdLCJib3JkZXJMZWZ0V2lkdGgiLCEwKSkse3RvcDp0LnRvcC1uLnRvcC14LmNzcyhyLCJtYXJnaW5Ub3AiLCEwKSxsZWZ0OnQubGVmdC1uLmxlZnQteC5jc3MociwibWFyZ2luTGVmdCIsITApfX19LG9mZnNldFBhcmVudDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMub2Zmc2V0UGFyZW50fHxzO3doaWxlKGUmJiF4Lm5vZGVOYW1lKGUsImh0bWwiKSYmInN0YXRpYyI9PT14LmNzcyhlLCJwb3NpdGlvbiIpKWU9ZS5vZmZzZXRQYXJlbnQ7cmV0dXJuIGV8fHN9KX19KSx4LmVhY2goe3Njcm9sbExlZnQ6InBhZ2VYT2Zmc2V0IixzY3JvbGxUb3A6InBhZ2VZT2Zmc2V0In0sZnVuY3Rpb24oZSxuKXt2YXIgcj0vWS8udGVzdChuKTt4LmZuW2VdPWZ1bmN0aW9uKGkpe3JldHVybiB4LmFjY2Vzcyh0aGlzLGZ1bmN0aW9uKGUsaSxvKXt2YXIgYT1vcihlKTtyZXR1cm4gbz09PXQ/YT9uIGluIGE/YVtuXTphLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtpXTplW2ldOihhP2Euc2Nyb2xsVG8ocj94KGEpLnNjcm9sbExlZnQoKTpvLHI/bzp4KGEpLnNjcm9sbFRvcCgpKTplW2ldPW8sdCl9LGUsaSxhcmd1bWVudHMubGVuZ3RoLG51bGwpfX0pO2Z1bmN0aW9uIG9yKGUpe3JldHVybiB4LmlzV2luZG93KGUpP2U6OT09PWUubm9kZVR5cGU/ZS5kZWZhdWx0Vmlld3x8ZS5wYXJlbnRXaW5kb3c6ITF9eC5lYWNoKHtIZWlnaHQ6ImhlaWdodCIsV2lkdGg6IndpZHRoIn0sZnVuY3Rpb24oZSxuKXt4LmVhY2goe3BhZGRpbmc6ImlubmVyIitlLGNvbnRlbnQ6biwiIjoib3V0ZXIiK2V9LGZ1bmN0aW9uKHIsaSl7eC5mbltpXT1mdW5jdGlvbihpLG8pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGgmJihyfHwiYm9vbGVhbiIhPXR5cGVvZiBpKSxzPXJ8fChpPT09ITB8fG89PT0hMD8ibWFyZ2luIjoiYm9yZGVyIik7cmV0dXJuIHguYWNjZXNzKHRoaXMsZnVuY3Rpb24obixyLGkpe3ZhciBvO3JldHVybiB4LmlzV2luZG93KG4pP24uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyJjbGllbnQiK2VdOjk9PT1uLm5vZGVUeXBlPyhvPW4uZG9jdW1lbnRFbGVtZW50LE1hdGgubWF4KG4uYm9keVsic2Nyb2xsIitlXSxvWyJzY3JvbGwiK2VdLG4uYm9keVsib2Zmc2V0IitlXSxvWyJvZmZzZXQiK2VdLG9bImNsaWVudCIrZV0pKTppPT09dD94LmNzcyhuLHIscyk6eC5zdHlsZShuLHIsaSxzKX0sbixhP2k6dCxhLG51bGwpfX0pfSkseC5mbi5zaXplPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubGVuZ3RofSx4LmZuLmFuZFNlbGY9eC5mbi5hZGRCYWNrLCJvYmplY3QiPT10eXBlb2YgbW9kdWxlJiZtb2R1bGUmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9eDooZS5qUXVlcnk9ZS4kPXgsImZ1bmN0aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZCYmZGVmaW5lKCJqcXVlcnkiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIHh9KSl9KSh3aW5kb3cpOwo=]]></data>
	</file>
	<file>
	  <filename>/resources/public/js/jquery-ui.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohIGpRdWVyeSBVSSAtIHYxLjEwLjMgLSAyMDEzLTA1LTAzCiogaHR0cDovL2pxdWVyeXVpLmNvbQoqIEluY2x1ZGVzOiBqcXVlcnkudWkuY29yZS5qcywganF1ZXJ5LnVpLndpZGdldC5qcywganF1ZXJ5LnVpLm1vdXNlLmpzLCBqcXVlcnkudWkuZHJhZ2dhYmxlLmpzLCBqcXVlcnkudWkuZHJvcHBhYmxlLmpzLCBqcXVlcnkudWkucmVzaXphYmxlLmpzLCBqcXVlcnkudWkuc2VsZWN0YWJsZS5qcywganF1ZXJ5LnVpLnNvcnRhYmxlLmpzLCBqcXVlcnkudWkuZWZmZWN0LmpzLCBqcXVlcnkudWkuYWNjb3JkaW9uLmpzLCBqcXVlcnkudWkuYXV0b2NvbXBsZXRlLmpzLCBqcXVlcnkudWkuYnV0dG9uLmpzLCBqcXVlcnkudWkuZGF0ZXBpY2tlci5qcywganF1ZXJ5LnVpLmRpYWxvZy5qcywganF1ZXJ5LnVpLmVmZmVjdC1ibGluZC5qcywganF1ZXJ5LnVpLmVmZmVjdC1ib3VuY2UuanMsIGpxdWVyeS51aS5lZmZlY3QtY2xpcC5qcywganF1ZXJ5LnVpLmVmZmVjdC1kcm9wLmpzLCBqcXVlcnkudWkuZWZmZWN0LWV4cGxvZGUuanMsIGpxdWVyeS51aS5lZmZlY3QtZmFkZS5qcywganF1ZXJ5LnVpLmVmZmVjdC1mb2xkLmpzLCBqcXVlcnkudWkuZWZmZWN0LWhpZ2hsaWdodC5qcywganF1ZXJ5LnVpLmVmZmVjdC1wdWxzYXRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNjYWxlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNoYWtlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXNsaWRlLmpzLCBqcXVlcnkudWkuZWZmZWN0LXRyYW5zZmVyLmpzLCBqcXVlcnkudWkubWVudS5qcywganF1ZXJ5LnVpLnBvc2l0aW9uLmpzLCBqcXVlcnkudWkucHJvZ3Jlc3NiYXIuanMsIGpxdWVyeS51aS5zbGlkZXIuanMsIGpxdWVyeS51aS5zcGlubmVyLmpzLCBqcXVlcnkudWkudGFicy5qcywganF1ZXJ5LnVpLnRvb2x0aXAuanMKKiBDb3B5cmlnaHQgMjAxMyBqUXVlcnkgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzOyBMaWNlbnNlZCBNSVQgKi8KKGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaShlLGkpe3ZhciBuLG8sYSxyPWUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4iYXJlYSI9PT1yPyhuPWUucGFyZW50Tm9kZSxvPW4ubmFtZSxlLmhyZWYmJm8mJiJtYXAiPT09bi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpPyhhPXQoImltZ1t1c2VtYXA9IyIrbysiXSIpWzBdLCEhYSYmcyhhKSk6ITEpOigvaW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbnxvYmplY3QvLnRlc3Qocik/IWUuZGlzYWJsZWQ6ImEiPT09cj9lLmhyZWZ8fGk6aSkmJnMoZSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gdC5leHByLmZpbHRlcnMudmlzaWJsZShlKSYmIXQoZSkucGFyZW50cygpLmFkZEJhY2soKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4iaGlkZGVuIj09PXQuY3NzKHRoaXMsInZpc2liaWxpdHkiKX0pLmxlbmd0aH12YXIgbj0wLG89L151aS1pZC1cZCskLzt0LnVpPXQudWl8fHt9LHQuZXh0ZW5kKHQudWkse3ZlcnNpb246IjEuMTAuMyIsa2V5Q29kZTp7QkFDS1NQQUNFOjgsQ09NTUE6MTg4LERFTEVURTo0NixET1dOOjQwLEVORDozNSxFTlRFUjoxMyxFU0NBUEU6MjcsSE9NRTozNixMRUZUOjM3LE5VTVBBRF9BREQ6MTA3LE5VTVBBRF9ERUNJTUFMOjExMCxOVU1QQURfRElWSURFOjExMSxOVU1QQURfRU5URVI6MTA4LE5VTVBBRF9NVUxUSVBMWToxMDYsTlVNUEFEX1NVQlRSQUNUOjEwOSxQQUdFX0RPV046MzQsUEFHRV9VUDozMyxQRVJJT0Q6MTkwLFJJR0hUOjM5LFNQQUNFOjMyLFRBQjo5LFVQOjM4fX0pLHQuZm4uZXh0ZW5kKHtmb2N1czpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSxzKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGk/dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dGhpcztzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7dChlKS5mb2N1cygpLHMmJnMuY2FsbChlKX0saSl9KTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KHQuZm4uZm9jdXMpLHNjcm9sbFBhcmVudDpmdW5jdGlvbigpe3ZhciBlO3JldHVybiBlPXQudWkuaWUmJi8oc3RhdGljfHJlbGF0aXZlKS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSl8fC9hYnNvbHV0ZS8udGVzdCh0aGlzLmNzcygicG9zaXRpb24iKSk/dGhpcy5wYXJlbnRzKCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuLyhyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZCkvLnRlc3QodC5jc3ModGhpcywicG9zaXRpb24iKSkmJi8oYXV0b3xzY3JvbGwpLy50ZXN0KHQuY3NzKHRoaXMsIm92ZXJmbG93IikrdC5jc3ModGhpcywib3ZlcmZsb3cteSIpK3QuY3NzKHRoaXMsIm92ZXJmbG93LXgiKSl9KS5lcSgwKTp0aGlzLnBhcmVudHMoKS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4vKGF1dG98c2Nyb2xsKS8udGVzdCh0LmNzcyh0aGlzLCJvdmVyZmxvdyIpK3QuY3NzKHRoaXMsIm92ZXJmbG93LXkiKSt0LmNzcyh0aGlzLCJvdmVyZmxvdy14IikpfSkuZXEoMCksL2ZpeGVkLy50ZXN0KHRoaXMuY3NzKCJwb3NpdGlvbiIpKXx8IWUubGVuZ3RoP3QoZG9jdW1lbnQpOmV9LHpJbmRleDpmdW5jdGlvbihpKXtpZihpIT09ZSlyZXR1cm4gdGhpcy5jc3MoInpJbmRleCIsaSk7aWYodGhpcy5sZW5ndGgpZm9yKHZhciBzLG4sbz10KHRoaXNbMF0pO28ubGVuZ3RoJiZvWzBdIT09ZG9jdW1lbnQ7KXtpZihzPW8uY3NzKCJwb3NpdGlvbiIpLCgiYWJzb2x1dGUiPT09c3x8InJlbGF0aXZlIj09PXN8fCJmaXhlZCI9PT1zKSYmKG49cGFyc2VJbnQoby5jc3MoInpJbmRleCIpLDEwKSwhaXNOYU4obikmJjAhPT1uKSlyZXR1cm4gbjtvPW8ucGFyZW50KCl9cmV0dXJuIDB9LHVuaXF1ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3RoaXMuaWR8fCh0aGlzLmlkPSJ1aS1pZC0iKyArK24pfSl9LHJlbW92ZVVuaXF1ZUlkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe28udGVzdCh0aGlzLmlkKSYmdCh0aGlzKS5yZW1vdmVBdHRyKCJpZCIpfSl9fSksdC5leHRlbmQodC5leHByWyI6Il0se2RhdGE6dC5leHByLmNyZWF0ZVBzZXVkbz90LmV4cHIuY3JlYXRlUHNldWRvKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpKXtyZXR1cm4hIXQuZGF0YShpLGUpfX0pOmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4hIXQuZGF0YShlLHNbM10pfSxmb2N1c2FibGU6ZnVuY3Rpb24oZSl7cmV0dXJuIGkoZSwhaXNOYU4odC5hdHRyKGUsInRhYmluZGV4IikpKX0sdGFiYmFibGU6ZnVuY3Rpb24oZSl7dmFyIHM9dC5hdHRyKGUsInRhYmluZGV4Iiksbj1pc05hTihzKTtyZXR1cm4obnx8cz49MCkmJmkoZSwhbil9fSksdCgiPGE+Iikub3V0ZXJXaWR0aCgxKS5qcXVlcnl8fHQuZWFjaChbIldpZHRoIiwiSGVpZ2h0Il0sZnVuY3Rpb24oaSxzKXtmdW5jdGlvbiBuKGUsaSxzLG4pe3JldHVybiB0LmVhY2gobyxmdW5jdGlvbigpe2ktPXBhcnNlRmxvYXQodC5jc3MoZSwicGFkZGluZyIrdGhpcykpfHwwLHMmJihpLT1wYXJzZUZsb2F0KHQuY3NzKGUsImJvcmRlciIrdGhpcysiV2lkdGgiKSl8fDApLG4mJihpLT1wYXJzZUZsb2F0KHQuY3NzKGUsIm1hcmdpbiIrdGhpcykpfHwwKX0pLGl9dmFyIG89IldpZHRoIj09PXM/WyJMZWZ0IiwiUmlnaHQiXTpbIlRvcCIsIkJvdHRvbSJdLGE9cy50b0xvd2VyQ2FzZSgpLHI9e2lubmVyV2lkdGg6dC5mbi5pbm5lcldpZHRoLGlubmVySGVpZ2h0OnQuZm4uaW5uZXJIZWlnaHQsb3V0ZXJXaWR0aDp0LmZuLm91dGVyV2lkdGgsb3V0ZXJIZWlnaHQ6dC5mbi5vdXRlckhlaWdodH07dC5mblsiaW5uZXIiK3NdPWZ1bmN0aW9uKGkpe3JldHVybiBpPT09ZT9yWyJpbm5lciIrc10uY2FsbCh0aGlzKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmNzcyhhLG4odGhpcyxpKSsicHgiKX0pfSx0LmZuWyJvdXRlciIrc109ZnVuY3Rpb24oZSxpKXtyZXR1cm4ibnVtYmVyIiE9dHlwZW9mIGU/clsib3V0ZXIiK3NdLmNhbGwodGhpcyxlKTp0aGlzLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmNzcyhhLG4odGhpcyxlLCEwLGkpKyJweCIpfSl9fSksdC5mbi5hZGRCYWNrfHwodC5mbi5hZGRCYWNrPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmFkZChudWxsPT10P3RoaXMucHJldk9iamVjdDp0aGlzLnByZXZPYmplY3QuZmlsdGVyKHQpKX0pLHQoIjxhPiIpLmRhdGEoImEtYiIsImEiKS5yZW1vdmVEYXRhKCJhLWIiKS5kYXRhKCJhLWIiKSYmKHQuZm4ucmVtb3ZlRGF0YT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oaSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZS5jYWxsKHRoaXMsdC5jYW1lbENhc2UoaSkpOmUuY2FsbCh0aGlzKX19KHQuZm4ucmVtb3ZlRGF0YSkpLHQudWkuaWU9ISEvbXNpZSBbXHcuXSsvLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpKSx0LnN1cHBvcnQuc2VsZWN0c3RhcnQ9Im9uc2VsZWN0c3RhcnQiaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksdC5mbi5leHRlbmQoe2Rpc2FibGVTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaW5kKCh0LnN1cHBvcnQuc2VsZWN0c3RhcnQ/InNlbGVjdHN0YXJ0IjoibW91c2Vkb3duIikrIi51aS1kaXNhYmxlU2VsZWN0aW9uIixmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9KX0sZW5hYmxlU2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudW5iaW5kKCIudWktZGlzYWJsZVNlbGVjdGlvbiIpfX0pLHQuZXh0ZW5kKHQudWkse3BsdWdpbjp7YWRkOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvPXQudWlbZV0ucHJvdG90eXBlO2ZvcihuIGluIHMpby5wbHVnaW5zW25dPW8ucGx1Z2luc1tuXXx8W10sby5wbHVnaW5zW25dLnB1c2goW2ksc1tuXV0pfSxjYWxsOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcyxuPXQucGx1Z2luc1tlXTtpZihuJiZ0LmVsZW1lbnRbMF0ucGFyZW50Tm9kZSYmMTEhPT10LmVsZW1lbnRbMF0ucGFyZW50Tm9kZS5ub2RlVHlwZSlmb3Iocz0wO24ubGVuZ3RoPnM7cysrKXQub3B0aW9uc1tuW3NdWzBdXSYmbltzXVsxXS5hcHBseSh0LmVsZW1lbnQsaSl9fSxoYXNTY3JvbGw6ZnVuY3Rpb24oZSxpKXtpZigiaGlkZGVuIj09PXQoZSkuY3NzKCJvdmVyZmxvdyIpKXJldHVybiExO3ZhciBzPWkmJiJsZWZ0Ij09PWk/InNjcm9sbExlZnQiOiJzY3JvbGxUb3AiLG49ITE7cmV0dXJuIGVbc10+MD8hMDooZVtzXT0xLG49ZVtzXT4wLGVbc109MCxuKX19KX0pKGpRdWVyeSksZnVuY3Rpb24odCxlKXt2YXIgaT0wLHM9QXJyYXkucHJvdG90eXBlLnNsaWNlLG49dC5jbGVhbkRhdGE7dC5jbGVhbkRhdGE9ZnVuY3Rpb24oZSl7Zm9yKHZhciBpLHM9MDtudWxsIT0oaT1lW3NdKTtzKyspdHJ5e3QoaSkudHJpZ2dlckhhbmRsZXIoInJlbW92ZSIpfWNhdGNoKG8pe31uKGUpfSx0LndpZGdldD1mdW5jdGlvbihpLHMsbil7dmFyIG8sYSxyLGgsbD17fSxjPWkuc3BsaXQoIi4iKVswXTtpPWkuc3BsaXQoIi4iKVsxXSxvPWMrIi0iK2ksbnx8KG49cyxzPXQuV2lkZ2V0KSx0LmV4cHJbIjoiXVtvLnRvTG93ZXJDYXNlKCldPWZ1bmN0aW9uKGUpe3JldHVybiEhdC5kYXRhKGUsbyl9LHRbY109dFtjXXx8e30sYT10W2NdW2ldLHI9dFtjXVtpXT1mdW5jdGlvbih0LGkpe3JldHVybiB0aGlzLl9jcmVhdGVXaWRnZXQ/KGFyZ3VtZW50cy5sZW5ndGgmJnRoaXMuX2NyZWF0ZVdpZGdldCh0LGkpLGUpOm5ldyByKHQsaSl9LHQuZXh0ZW5kKHIsYSx7dmVyc2lvbjpuLnZlcnNpb24sX3Byb3RvOnQuZXh0ZW5kKHt9LG4pLF9jaGlsZENvbnN0cnVjdG9yczpbXX0pLGg9bmV3IHMsaC5vcHRpb25zPXQud2lkZ2V0LmV4dGVuZCh7fSxoLm9wdGlvbnMpLHQuZWFjaChuLGZ1bmN0aW9uKGksbil7cmV0dXJuIHQuaXNGdW5jdGlvbihuKT8obFtpXT1mdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7cmV0dXJuIHMucHJvdG90eXBlW2ldLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sZT1mdW5jdGlvbih0KXtyZXR1cm4gcy5wcm90b3R5cGVbaV0uYXBwbHkodGhpcyx0KX07cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGkscz10aGlzLl9zdXBlcixvPXRoaXMuX3N1cGVyQXBwbHk7cmV0dXJuIHRoaXMuX3N1cGVyPXQsdGhpcy5fc3VwZXJBcHBseT1lLGk9bi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fc3VwZXI9cyx0aGlzLl9zdXBlckFwcGx5PW8saX19KCksZSk6KGxbaV09bixlKX0pLHIucHJvdG90eXBlPXQud2lkZ2V0LmV4dGVuZChoLHt3aWRnZXRFdmVudFByZWZpeDphP2gud2lkZ2V0RXZlbnRQcmVmaXg6aX0sbCx7Y29uc3RydWN0b3I6cixuYW1lc3BhY2U6Yyx3aWRnZXROYW1lOmksd2lkZ2V0RnVsbE5hbWU6b30pLGE/KHQuZWFjaChhLl9jaGlsZENvbnN0cnVjdG9ycyxmdW5jdGlvbihlLGkpe3ZhciBzPWkucHJvdG90eXBlO3Qud2lkZ2V0KHMubmFtZXNwYWNlKyIuIitzLndpZGdldE5hbWUscixpLl9wcm90byl9KSxkZWxldGUgYS5fY2hpbGRDb25zdHJ1Y3RvcnMpOnMuX2NoaWxkQ29uc3RydWN0b3JzLnB1c2gociksdC53aWRnZXQuYnJpZGdlKGkscil9LHQud2lkZ2V0LmV4dGVuZD1mdW5jdGlvbihpKXtmb3IodmFyIG4sbyxhPXMuY2FsbChhcmd1bWVudHMsMSkscj0wLGg9YS5sZW5ndGg7aD5yO3IrKylmb3IobiBpbiBhW3JdKW89YVtyXVtuXSxhW3JdLmhhc093blByb3BlcnR5KG4pJiZvIT09ZSYmKGlbbl09dC5pc1BsYWluT2JqZWN0KG8pP3QuaXNQbGFpbk9iamVjdChpW25dKT90LndpZGdldC5leHRlbmQoe30saVtuXSxvKTp0LndpZGdldC5leHRlbmQoe30sbyk6byk7cmV0dXJuIGl9LHQud2lkZ2V0LmJyaWRnZT1mdW5jdGlvbihpLG4pe3ZhciBvPW4ucHJvdG90eXBlLndpZGdldEZ1bGxOYW1lfHxpO3QuZm5baV09ZnVuY3Rpb24oYSl7dmFyIHI9InN0cmluZyI9PXR5cGVvZiBhLGg9cy5jYWxsKGFyZ3VtZW50cywxKSxsPXRoaXM7cmV0dXJuIGE9IXImJmgubGVuZ3RoP3Qud2lkZ2V0LmV4dGVuZC5hcHBseShudWxsLFthXS5jb25jYXQoaCkpOmEscj90aGlzLmVhY2goZnVuY3Rpb24oKXt2YXIgcyxuPXQuZGF0YSh0aGlzLG8pO3JldHVybiBuP3QuaXNGdW5jdGlvbihuW2FdKSYmIl8iIT09YS5jaGFyQXQoMCk/KHM9blthXS5hcHBseShuLGgpLHMhPT1uJiZzIT09ZT8obD1zJiZzLmpxdWVyeT9sLnB1c2hTdGFjayhzLmdldCgpKTpzLCExKTplKTp0LmVycm9yKCJubyBzdWNoIG1ldGhvZCAnIithKyInIGZvciAiK2krIiB3aWRnZXQgaW5zdGFuY2UiKTp0LmVycm9yKCJjYW5ub3QgY2FsbCBtZXRob2RzIG9uICIraSsiIHByaW9yIHRvIGluaXRpYWxpemF0aW9uOyAiKyJhdHRlbXB0ZWQgdG8gY2FsbCBtZXRob2QgJyIrYSsiJyIpfSk6dGhpcy5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dC5kYXRhKHRoaXMsbyk7ZT9lLm9wdGlvbihhfHx7fSkuX2luaXQoKTp0LmRhdGEodGhpcyxvLG5ldyBuKGEsdGhpcykpfSksbH19LHQuV2lkZ2V0PWZ1bmN0aW9uKCl7fSx0LldpZGdldC5fY2hpbGRDb25zdHJ1Y3RvcnM9W10sdC5XaWRnZXQucHJvdG90eXBlPXt3aWRnZXROYW1lOiJ3aWRnZXQiLHdpZGdldEV2ZW50UHJlZml4OiIiLGRlZmF1bHRFbGVtZW50OiI8ZGl2PiIsb3B0aW9uczp7ZGlzYWJsZWQ6ITEsY3JlYXRlOm51bGx9LF9jcmVhdGVXaWRnZXQ6ZnVuY3Rpb24oZSxzKXtzPXQoc3x8dGhpcy5kZWZhdWx0RWxlbWVudHx8dGhpcylbMF0sdGhpcy5lbGVtZW50PXQocyksdGhpcy51dWlkPWkrKyx0aGlzLmV2ZW50TmFtZXNwYWNlPSIuIit0aGlzLndpZGdldE5hbWUrdGhpcy51dWlkLHRoaXMub3B0aW9ucz10LndpZGdldC5leHRlbmQoe30sdGhpcy5vcHRpb25zLHRoaXMuX2dldENyZWF0ZU9wdGlvbnMoKSxlKSx0aGlzLmJpbmRpbmdzPXQoKSx0aGlzLmhvdmVyYWJsZT10KCksdGhpcy5mb2N1c2FibGU9dCgpLHMhPT10aGlzJiYodC5kYXRhKHMsdGhpcy53aWRnZXRGdWxsTmFtZSx0aGlzKSx0aGlzLl9vbighMCx0aGlzLmVsZW1lbnQse3JlbW92ZTpmdW5jdGlvbih0KXt0LnRhcmdldD09PXMmJnRoaXMuZGVzdHJveSgpfX0pLHRoaXMuZG9jdW1lbnQ9dChzLnN0eWxlP3Mub3duZXJEb2N1bWVudDpzLmRvY3VtZW50fHxzKSx0aGlzLndpbmRvdz10KHRoaXMuZG9jdW1lbnRbMF0uZGVmYXVsdFZpZXd8fHRoaXMuZG9jdW1lbnRbMF0ucGFyZW50V2luZG93KSksdGhpcy5fY3JlYXRlKCksdGhpcy5fdHJpZ2dlcigiY3JlYXRlIixudWxsLHRoaXMuX2dldENyZWF0ZUV2ZW50RGF0YSgpKSx0aGlzLl9pbml0KCl9LF9nZXRDcmVhdGVPcHRpb25zOnQubm9vcCxfZ2V0Q3JlYXRlRXZlbnREYXRhOnQubm9vcCxfY3JlYXRlOnQubm9vcCxfaW5pdDp0Lm5vb3AsZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuX2Rlc3Ryb3koKSx0aGlzLmVsZW1lbnQudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZURhdGEodGhpcy53aWRnZXROYW1lKS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0RnVsbE5hbWUpLnJlbW92ZURhdGEodC5jYW1lbENhc2UodGhpcy53aWRnZXRGdWxsTmFtZSkpLHRoaXMud2lkZ2V0KCkudW5iaW5kKHRoaXMuZXZlbnROYW1lc3BhY2UpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5yZW1vdmVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgIisidWktc3RhdGUtZGlzYWJsZWQiKSx0aGlzLmJpbmRpbmdzLnVuYmluZCh0aGlzLmV2ZW50TmFtZXNwYWNlKSx0aGlzLmhvdmVyYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtaG92ZXIiKSx0aGlzLmZvY3VzYWJsZS5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0sX2Rlc3Ryb3k6dC5ub29wLHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVsZW1lbnR9LG9wdGlvbjpmdW5jdGlvbihpLHMpe3ZhciBuLG8sYSxyPWk7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIHQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnMpO2lmKCJzdHJpbmciPT10eXBlb2YgaSlpZihyPXt9LG49aS5zcGxpdCgiLiIpLGk9bi5zaGlmdCgpLG4ubGVuZ3RoKXtmb3Iobz1yW2ldPXQud2lkZ2V0LmV4dGVuZCh7fSx0aGlzLm9wdGlvbnNbaV0pLGE9MDtuLmxlbmd0aC0xPmE7YSsrKW9bblthXV09b1tuW2FdXXx8e30sbz1vW25bYV1dO2lmKGk9bi5wb3AoKSxzPT09ZSlyZXR1cm4gb1tpXT09PWU/bnVsbDpvW2ldO29baV09c31lbHNle2lmKHM9PT1lKXJldHVybiB0aGlzLm9wdGlvbnNbaV09PT1lP251bGw6dGhpcy5vcHRpb25zW2ldO3JbaV09c31yZXR1cm4gdGhpcy5fc2V0T3B0aW9ucyhyKSx0aGlzfSxfc2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZTtmb3IoZSBpbiB0KXRoaXMuX3NldE9wdGlvbihlLHRbZV0pO3JldHVybiB0aGlzfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMub3B0aW9uc1t0XT1lLCJkaXNhYmxlZCI9PT10JiYodGhpcy53aWRnZXQoKS50b2dnbGVDbGFzcyh0aGlzLndpZGdldEZ1bGxOYW1lKyItZGlzYWJsZWQgdWktc3RhdGUtZGlzYWJsZWQiLCEhZSkuYXR0cigiYXJpYS1kaXNhYmxlZCIsZSksdGhpcy5ob3ZlcmFibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdGhpcy5mb2N1c2FibGUucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIikpLHRoaXN9LGVuYWJsZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIiwhMSl9LGRpc2FibGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsITApfSxfb246ZnVuY3Rpb24oaSxzLG4pe3ZhciBvLGE9dGhpczsiYm9vbGVhbiIhPXR5cGVvZiBpJiYobj1zLHM9aSxpPSExKSxuPyhzPW89dChzKSx0aGlzLmJpbmRpbmdzPXRoaXMuYmluZGluZ3MuYWRkKHMpKToobj1zLHM9dGhpcy5lbGVtZW50LG89dGhpcy53aWRnZXQoKSksdC5lYWNoKG4sZnVuY3Rpb24obixyKXtmdW5jdGlvbiBoKCl7cmV0dXJuIGl8fGEub3B0aW9ucy5kaXNhYmxlZCE9PSEwJiYhdCh0aGlzKS5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKT8oInN0cmluZyI9PXR5cGVvZiByP2Fbcl06cikuYXBwbHkoYSxhcmd1bWVudHMpOmV9InN0cmluZyIhPXR5cGVvZiByJiYoaC5ndWlkPXIuZ3VpZD1yLmd1aWR8fGguZ3VpZHx8dC5ndWlkKyspO3ZhciBsPW4ubWF0Y2goL14oXHcrKVxzKiguKikkLyksYz1sWzFdK2EuZXZlbnROYW1lc3BhY2UsdT1sWzJdO3U/by5kZWxlZ2F0ZSh1LGMsaCk6cy5iaW5kKGMsaCl9KX0sX29mZjpmdW5jdGlvbih0LGUpe2U9KGV8fCIiKS5zcGxpdCgiICIpLmpvaW4odGhpcy5ldmVudE5hbWVzcGFjZSsiICIpK3RoaXMuZXZlbnROYW1lc3BhY2UsdC51bmJpbmQoZSkudW5kZWxlZ2F0ZShlKX0sX2RlbGF5OmZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSgpe3JldHVybigic3RyaW5nIj09dHlwZW9mIHQ/c1t0XTp0KS5hcHBseShzLGFyZ3VtZW50cyl9dmFyIHM9dGhpcztyZXR1cm4gc2V0VGltZW91dChpLGV8fDApfSxfaG92ZXJhYmxlOmZ1bmN0aW9uKGUpe3RoaXMuaG92ZXJhYmxlPXRoaXMuaG92ZXJhYmxlLmFkZChlKSx0aGlzLl9vbihlLHttb3VzZWVudGVyOmZ1bmN0aW9uKGUpe3QoZS5jdXJyZW50VGFyZ2V0KS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKX0sbW91c2VsZWF2ZTpmdW5jdGlvbihlKXt0KGUuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil9fSl9LF9mb2N1c2FibGU6ZnVuY3Rpb24oZSl7dGhpcy5mb2N1c2FibGU9dGhpcy5mb2N1c2FibGUuYWRkKGUpLHRoaXMuX29uKGUse2ZvY3VzaW46ZnVuY3Rpb24oZSl7dChlLmN1cnJlbnRUYXJnZXQpLmFkZENsYXNzKCJ1aS1zdGF0ZS1mb2N1cyIpfSxmb2N1c291dDpmdW5jdGlvbihlKXt0KGUuY3VycmVudFRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIil9fSl9LF90cmlnZ2VyOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbixvLGE9dGhpcy5vcHRpb25zW2VdO2lmKHM9c3x8e30saT10LkV2ZW50KGkpLGkudHlwZT0oZT09PXRoaXMud2lkZ2V0RXZlbnRQcmVmaXg/ZTp0aGlzLndpZGdldEV2ZW50UHJlZml4K2UpLnRvTG93ZXJDYXNlKCksaS50YXJnZXQ9dGhpcy5lbGVtZW50WzBdLG89aS5vcmlnaW5hbEV2ZW50KWZvcihuIGluIG8pbiBpbiBpfHwoaVtuXT1vW25dKTtyZXR1cm4gdGhpcy5lbGVtZW50LnRyaWdnZXIoaSxzKSwhKHQuaXNGdW5jdGlvbihhKSYmYS5hcHBseSh0aGlzLmVsZW1lbnRbMF0sW2ldLmNvbmNhdChzKSk9PT0hMXx8aS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSl9fSx0LmVhY2goe3Nob3c6ImZhZGVJbiIsaGlkZToiZmFkZU91dCJ9LGZ1bmN0aW9uKGUsaSl7dC5XaWRnZXQucHJvdG90eXBlWyJfIitlXT1mdW5jdGlvbihzLG4sbyl7InN0cmluZyI9PXR5cGVvZiBuJiYobj17ZWZmZWN0Om59KTt2YXIgYSxyPW4/bj09PSEwfHwibnVtYmVyIj09dHlwZW9mIG4/aTpuLmVmZmVjdHx8aTplO249bnx8e30sIm51bWJlciI9PXR5cGVvZiBuJiYobj17ZHVyYXRpb246bn0pLGE9IXQuaXNFbXB0eU9iamVjdChuKSxuLmNvbXBsZXRlPW8sbi5kZWxheSYmcy5kZWxheShuLmRlbGF5KSxhJiZ0LmVmZmVjdHMmJnQuZWZmZWN0cy5lZmZlY3Rbcl0/c1tlXShuKTpyIT09ZSYmc1tyXT9zW3JdKG4uZHVyYXRpb24sbi5lYXNpbmcsbyk6cy5xdWV1ZShmdW5jdGlvbihpKXt0KHRoaXMpW2VdKCksbyYmby5jYWxsKHNbMF0pLGkoKX0pfX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe3ZhciBlPSExO3QoZG9jdW1lbnQpLm1vdXNldXAoZnVuY3Rpb24oKXtlPSExfSksdC53aWRnZXQoInVpLm1vdXNlIix7dmVyc2lvbjoiMS4xMC4zIixvcHRpb25zOntjYW5jZWw6ImlucHV0LHRleHRhcmVhLGJ1dHRvbixzZWxlY3Qsb3B0aW9uIixkaXN0YW5jZToxLGRlbGF5OjB9LF9tb3VzZUluaXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZWxlbWVudC5iaW5kKCJtb3VzZWRvd24uIit0aGlzLndpZGdldE5hbWUsZnVuY3Rpb24odCl7cmV0dXJuIGUuX21vdXNlRG93bih0KX0pLmJpbmQoImNsaWNrLiIrdGhpcy53aWRnZXROYW1lLGZ1bmN0aW9uKGkpe3JldHVybiEwPT09dC5kYXRhKGkudGFyZ2V0LGUud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50Iik/KHQucmVtb3ZlRGF0YShpLnRhcmdldCxlLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpLGkuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksITEpOnVuZGVmaW5lZH0pLHRoaXMuc3RhcnRlZD0hMX0sX21vdXNlRGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC51bmJpbmQoIi4iK3RoaXMud2lkZ2V0TmFtZSksdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUmJnQoZG9jdW1lbnQpLnVuYmluZCgibW91c2Vtb3ZlLiIrdGhpcy53aWRnZXROYW1lLHRoaXMuX21vdXNlTW92ZURlbGVnYXRlKS51bmJpbmQoIm1vdXNldXAuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VVcERlbGVnYXRlKX0sX21vdXNlRG93bjpmdW5jdGlvbihpKXtpZighZSl7dGhpcy5fbW91c2VTdGFydGVkJiZ0aGlzLl9tb3VzZVVwKGkpLHRoaXMuX21vdXNlRG93bkV2ZW50PWk7dmFyIHM9dGhpcyxuPTE9PT1pLndoaWNoLG89InN0cmluZyI9PXR5cGVvZiB0aGlzLm9wdGlvbnMuY2FuY2VsJiZpLnRhcmdldC5ub2RlTmFtZT90KGkudGFyZ2V0KS5jbG9zZXN0KHRoaXMub3B0aW9ucy5jYW5jZWwpLmxlbmd0aDohMTtyZXR1cm4gbiYmIW8mJnRoaXMuX21vdXNlQ2FwdHVyZShpKT8odGhpcy5tb3VzZURlbGF5TWV0PSF0aGlzLm9wdGlvbnMuZGVsYXksdGhpcy5tb3VzZURlbGF5TWV0fHwodGhpcy5fbW91c2VEZWxheVRpbWVyPXNldFRpbWVvdXQoZnVuY3Rpb24oKXtzLm1vdXNlRGVsYXlNZXQ9ITB9LHRoaXMub3B0aW9ucy5kZWxheSkpLHRoaXMuX21vdXNlRGlzdGFuY2VNZXQoaSkmJnRoaXMuX21vdXNlRGVsYXlNZXQoaSkmJih0aGlzLl9tb3VzZVN0YXJ0ZWQ9dGhpcy5fbW91c2VTdGFydChpKSE9PSExLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpPyhpLnByZXZlbnREZWZhdWx0KCksITApOighMD09PXQuZGF0YShpLnRhcmdldCx0aGlzLndpZGdldE5hbWUrIi5wcmV2ZW50Q2xpY2tFdmVudCIpJiZ0LnJlbW92ZURhdGEoaS50YXJnZXQsdGhpcy53aWRnZXROYW1lKyIucHJldmVudENsaWNrRXZlbnQiKSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZT1mdW5jdGlvbih0KXtyZXR1cm4gcy5fbW91c2VNb3ZlKHQpfSx0aGlzLl9tb3VzZVVwRGVsZWdhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHMuX21vdXNlVXAodCl9LHQoZG9jdW1lbnQpLmJpbmQoIm1vdXNlbW92ZS4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZU1vdmVEZWxlZ2F0ZSkuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLGkucHJldmVudERlZmF1bHQoKSxlPSEwLCEwKSk6ITB9fSxfbW91c2VNb3ZlOmZ1bmN0aW9uKGUpe3JldHVybiB0LnVpLmllJiYoIWRvY3VtZW50LmRvY3VtZW50TW9kZXx8OT5kb2N1bWVudC5kb2N1bWVudE1vZGUpJiYhZS5idXR0b24/dGhpcy5fbW91c2VVcChlKTp0aGlzLl9tb3VzZVN0YXJ0ZWQ/KHRoaXMuX21vdXNlRHJhZyhlKSxlLnByZXZlbnREZWZhdWx0KCkpOih0aGlzLl9tb3VzZURpc3RhbmNlTWV0KGUpJiZ0aGlzLl9tb3VzZURlbGF5TWV0KGUpJiYodGhpcy5fbW91c2VTdGFydGVkPXRoaXMuX21vdXNlU3RhcnQodGhpcy5fbW91c2VEb3duRXZlbnQsZSkhPT0hMSx0aGlzLl9tb3VzZVN0YXJ0ZWQ/dGhpcy5fbW91c2VEcmFnKGUpOnRoaXMuX21vdXNlVXAoZSkpLCF0aGlzLl9tb3VzZVN0YXJ0ZWQpfSxfbW91c2VVcDpmdW5jdGlvbihlKXtyZXR1cm4gdChkb2N1bWVudCkudW5iaW5kKCJtb3VzZW1vdmUuIit0aGlzLndpZGdldE5hbWUsdGhpcy5fbW91c2VNb3ZlRGVsZWdhdGUpLnVuYmluZCgibW91c2V1cC4iK3RoaXMud2lkZ2V0TmFtZSx0aGlzLl9tb3VzZVVwRGVsZWdhdGUpLHRoaXMuX21vdXNlU3RhcnRlZCYmKHRoaXMuX21vdXNlU3RhcnRlZD0hMSxlLnRhcmdldD09PXRoaXMuX21vdXNlRG93bkV2ZW50LnRhcmdldCYmdC5kYXRhKGUudGFyZ2V0LHRoaXMud2lkZ2V0TmFtZSsiLnByZXZlbnRDbGlja0V2ZW50IiwhMCksdGhpcy5fbW91c2VTdG9wKGUpKSwhMX0sX21vdXNlRGlzdGFuY2VNZXQ6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VYLXQucGFnZVgpLE1hdGguYWJzKHRoaXMuX21vdXNlRG93bkV2ZW50LnBhZ2VZLXQucGFnZVkpKT49dGhpcy5vcHRpb25zLmRpc3RhbmNlfSxfbW91c2VEZWxheU1ldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1vdXNlRGVsYXlNZXR9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKCl7fSxfbW91c2VEcmFnOmZ1bmN0aW9uKCl7fSxfbW91c2VTdG9wOmZ1bmN0aW9uKCl7fSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKCl7cmV0dXJuITB9fSl9KGpRdWVyeSksZnVuY3Rpb24odCl7dC53aWRnZXQoInVpLmRyYWdnYWJsZSIsdC51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMC4zIix3aWRnZXRFdmVudFByZWZpeDoiZHJhZyIsb3B0aW9uczp7YWRkQ2xhc3NlczohMCxhcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RUb1NvcnRhYmxlOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZ3JpZDohMSxoYW5kbGU6ITEsaGVscGVyOiJvcmlnaW5hbCIsaWZyYW1lRml4OiExLG9wYWNpdHk6ITEscmVmcmVzaFBvc2l0aW9uczohMSxyZXZlcnQ6ITEscmV2ZXJ0RHVyYXRpb246NTAwLHNjb3BlOiJkZWZhdWx0IixzY3JvbGw6ITAsc2Nyb2xsU2Vuc2l0aXZpdHk6MjAsc2Nyb2xsU3BlZWQ6MjAsc25hcDohMSxzbmFwTW9kZToiYm90aCIsc25hcFRvbGVyYW5jZToyMCxzdGFjazohMSx6SW5kZXg6ITEsZHJhZzpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7Im9yaWdpbmFsIiE9PXRoaXMub3B0aW9ucy5oZWxwZXJ8fC9eKD86cnxhfGYpLy50ZXN0KHRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIikpfHwodGhpcy5lbGVtZW50WzBdLnN0eWxlLnBvc2l0aW9uPSJyZWxhdGl2ZSIpLHRoaXMub3B0aW9ucy5hZGRDbGFzc2VzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWRyYWdnYWJsZSIpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZGlzYWJsZWQiKSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZSB1aS1kcmFnZ2FibGUtZHJhZ2dpbmcgdWktZHJhZ2dhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZUNhcHR1cmU6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5vcHRpb25zO3JldHVybiB0aGlzLmhlbHBlcnx8aS5kaXNhYmxlZHx8dChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5sZW5ndGg+MD8hMToodGhpcy5oYW5kbGU9dGhpcy5fZ2V0SGFuZGxlKGUpLHRoaXMuaGFuZGxlPyh0KGkuaWZyYW1lRml4PT09ITA/ImlmcmFtZSI6aS5pZnJhbWVGaXgpLmVhY2goZnVuY3Rpb24oKXt0KCI8ZGl2IGNsYXNzPSd1aS1kcmFnZ2FibGUtaWZyYW1lRml4JyBzdHlsZT0nYmFja2dyb3VuZDogI2ZmZjsnPjwvZGl2PiIpLmNzcyh7d2lkdGg6dGhpcy5vZmZzZXRXaWR0aCsicHgiLGhlaWdodDp0aGlzLm9mZnNldEhlaWdodCsicHgiLHBvc2l0aW9uOiJhYnNvbHV0ZSIsb3BhY2l0eToiMC4wMDEiLHpJbmRleDoxZTN9KS5jc3ModCh0aGlzKS5vZmZzZXQoKSkuYXBwZW5kVG8oImJvZHkiKX0pLCEwKTohMSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucztyZXR1cm4gdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGUpLHRoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1kcmFnZ2FibGUtZHJhZ2dpbmciKSx0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdC51aS5kZG1hbmFnZXImJih0LnVpLmRkbWFuYWdlci5jdXJyZW50PXRoaXMpLHRoaXMuX2NhY2hlTWFyZ2lucygpLHRoaXMuY3NzUG9zaXRpb249dGhpcy5oZWxwZXIuY3NzKCJwb3NpdGlvbiIpLHRoaXMuc2Nyb2xsUGFyZW50PXRoaXMuaGVscGVyLnNjcm9sbFBhcmVudCgpLHRoaXMub2Zmc2V0UGFyZW50PXRoaXMuaGVscGVyLm9mZnNldFBhcmVudCgpLHRoaXMub2Zmc2V0UGFyZW50Q3NzUG9zaXRpb249dGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJwb3NpdGlvbiIpLHRoaXMub2Zmc2V0PXRoaXMucG9zaXRpb25BYnM9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSx0aGlzLm9mZnNldC5zY3JvbGw9ITEsdC5leHRlbmQodGhpcy5vZmZzZXQse2NsaWNrOntsZWZ0OmUucGFnZVgtdGhpcy5vZmZzZXQubGVmdCx0b3A6ZS5wYWdlWS10aGlzLm9mZnNldC50b3B9LHBhcmVudDp0aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSxyZWxhdGl2ZTp0aGlzLl9nZXRSZWxhdGl2ZU9mZnNldCgpfSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXRoaXMucG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlKSx0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWSxpLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGkuY3Vyc29yQXQpLHRoaXMuX3NldENvbnRhaW5tZW50KCksdGhpcy5fdHJpZ2dlcigic3RhcnQiLGUpPT09ITE/KHRoaXMuX2NsZWFyKCksITEpOih0aGlzLl9jYWNoZUhlbHBlclByb3BvcnRpb25zKCksdC51aS5kZG1hbmFnZXImJiFpLmRyb3BCZWhhdmlvdXImJnQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKHRoaXMsZSksdGhpcy5fbW91c2VEcmFnKGUsITApLHQudWkuZGRtYW5hZ2VyJiZ0LnVpLmRkbWFuYWdlci5kcmFnU3RhcnQodGhpcyxlKSwhMCl9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSxpKXtpZigiZml4ZWQiPT09dGhpcy5vZmZzZXRQYXJlbnRDc3NQb3NpdGlvbiYmKHRoaXMub2Zmc2V0LnBhcmVudD10aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSksdGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksIWkpe3ZhciBzPXRoaXMuX3VpSGFzaCgpO2lmKHRoaXMuX3RyaWdnZXIoImRyYWciLGUscyk9PT0hMSlyZXR1cm4gdGhpcy5fbW91c2VVcCh7fSksITE7dGhpcy5wb3NpdGlvbj1zLnBvc2l0aW9ufXJldHVybiB0aGlzLm9wdGlvbnMuYXhpcyYmInkiPT09dGhpcy5vcHRpb25zLmF4aXN8fCh0aGlzLmhlbHBlclswXS5zdHlsZS5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiKSx0aGlzLm9wdGlvbnMuYXhpcyYmIngiPT09dGhpcy5vcHRpb25zLmF4aXN8fCh0aGlzLmhlbHBlclswXS5zdHlsZS50b3A9dGhpcy5wb3NpdGlvbi50b3ArInB4IiksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxlKSwhMX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLHM9ITE7cmV0dXJuIHQudWkuZGRtYW5hZ2VyJiYhdGhpcy5vcHRpb25zLmRyb3BCZWhhdmlvdXImJihzPXQudWkuZGRtYW5hZ2VyLmRyb3AodGhpcyxlKSksdGhpcy5kcm9wcGVkJiYocz10aGlzLmRyb3BwZWQsdGhpcy5kcm9wcGVkPSExKSwib3JpZ2luYWwiIT09dGhpcy5vcHRpb25zLmhlbHBlcnx8dC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0ub3duZXJEb2N1bWVudCx0aGlzLmVsZW1lbnRbMF0pPygiaW52YWxpZCI9PT10aGlzLm9wdGlvbnMucmV2ZXJ0JiYhc3x8InZhbGlkIj09PXRoaXMub3B0aW9ucy5yZXZlcnQmJnN8fHRoaXMub3B0aW9ucy5yZXZlcnQ9PT0hMHx8dC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5yZXZlcnQpJiZ0aGlzLm9wdGlvbnMucmV2ZXJ0LmNhbGwodGhpcy5lbGVtZW50LHMpP3QodGhpcy5oZWxwZXIpLmFuaW1hdGUodGhpcy5vcmlnaW5hbFBvc2l0aW9uLHBhcnNlSW50KHRoaXMub3B0aW9ucy5yZXZlcnREdXJhdGlvbiwxMCksZnVuY3Rpb24oKXtpLl90cmlnZ2VyKCJzdG9wIixlKSE9PSExJiZpLl9jbGVhcigpfSk6dGhpcy5fdHJpZ2dlcigic3RvcCIsZSkhPT0hMSYmdGhpcy5fY2xlYXIoKSwhMSk6ITF9LF9tb3VzZVVwOmZ1bmN0aW9uKGUpe3JldHVybiB0KCJkaXYudWktZHJhZ2dhYmxlLWlmcmFtZUZpeCIpLmVhY2goZnVuY3Rpb24oKXt0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KSx0LnVpLmRkbWFuYWdlciYmdC51aS5kZG1hbmFnZXIuZHJhZ1N0b3AodGhpcyxlKSx0LnVpLm1vdXNlLnByb3RvdHlwZS5fbW91c2VVcC5jYWxsKHRoaXMsZSl9LGNhbmNlbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhlbHBlci5pcygiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpP3RoaXMuX21vdXNlVXAoe30pOnRoaXMuX2NsZWFyKCksdGhpc30sX2dldEhhbmRsZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vcHRpb25zLmhhbmRsZT8hIXQoZS50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLmhhbmRsZSkpLmxlbmd0aDohMH0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMscz10LmlzRnVuY3Rpb24oaS5oZWxwZXIpP3QoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtlXSkpOiJjbG9uZSI9PT1pLmhlbHBlcj90aGlzLmVsZW1lbnQuY2xvbmUoKS5yZW1vdmVBdHRyKCJpZCIpOnRoaXMuZWxlbWVudDtyZXR1cm4gcy5wYXJlbnRzKCJib2R5IikubGVuZ3RofHxzLmFwcGVuZFRvKCJwYXJlbnQiPT09aS5hcHBlbmRUbz90aGlzLmVsZW1lbnRbMF0ucGFyZW50Tm9kZTppLmFwcGVuZFRvKSxzWzBdPT09dGhpcy5lbGVtZW50WzBdfHwvKGZpeGVkfGFic29sdXRlKS8udGVzdChzLmNzcygicG9zaXRpb24iKSl8fHMuY3NzKCJwb3NpdGlvbiIsImFic29sdXRlIiksc30sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KCIgIikpLHQuaXNBcnJheShlKSYmKGU9e2xlZnQ6K2VbMF0sdG9wOitlWzFdfHwwfSksImxlZnQiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9ZS5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1lLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIGUmJih0aGlzLm9mZnNldC5jbGljay50b3A9ZS50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LWUuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7cmV0dXJuImFic29sdXRlIj09PXRoaXMuY3NzUG9zaXRpb24mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZS5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksZS50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT1kb2N1bWVudC5ib2R5fHx0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lJiYiaHRtbCI9PT10aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJnQudWkuaWUpJiYoZT17dG9wOjAsbGVmdDowfSkse3RvcDplLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDplLmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKCJyZWxhdGl2ZSI9PT10aGlzLmNzc1Bvc2l0aW9uKXt2YXIgdD10aGlzLmVsZW1lbnQucG9zaXRpb24oKTtyZXR1cm57dG9wOnQudG9wLShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoInRvcCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCksbGVmdDp0LmxlZnQtKHBhcnNlSW50KHRoaXMuaGVscGVyLmNzcygibGVmdCIpLDEwKXx8MCkrdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsTGVmdCgpfX1yZXR1cm57dG9wOjAsbGVmdDowfX0sX2NhY2hlTWFyZ2luczpmdW5jdGlvbigpe3RoaXMubWFyZ2lucz17bGVmdDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5MZWZ0IiksMTApfHwwLHRvcDpwYXJzZUludCh0aGlzLmVsZW1lbnQuY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDAscmlnaHQ6cGFyc2VJbnQodGhpcy5lbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSwxMCl8fDAsYm90dG9tOnBhcnNlSW50KHRoaXMuZWxlbWVudC5jc3MoIm1hcmdpbkJvdHRvbSIpLDEwKXx8MH19LF9jYWNoZUhlbHBlclByb3BvcnRpb25zOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXJQcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5oZWxwZXIub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmhlbHBlci5vdXRlckhlaWdodCgpfX0sX3NldENvbnRhaW5tZW50OmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG49dGhpcy5vcHRpb25zO3JldHVybiBuLmNvbnRhaW5tZW50PyJ3aW5kb3ciPT09bi5jb250YWlubWVudD8odGhpcy5jb250YWlubWVudD1bdCh3aW5kb3cpLnNjcm9sbExlZnQoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0LXRoaXMub2Zmc2V0LnBhcmVudC5sZWZ0LHQod2luZG93KS5zY3JvbGxUb3AoKS10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCx0KHdpbmRvdykuc2Nyb2xsTGVmdCgpK3Qod2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsdCh3aW5kb3cpLnNjcm9sbFRvcCgpKyh0KHdpbmRvdykuaGVpZ2h0KCl8fGRvY3VtZW50LmJvZHkucGFyZW50Tm9kZS5zY3JvbGxIZWlnaHQpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3BdLHVuZGVmaW5lZCk6ImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/KHRoaXMuY29udGFpbm1lbnQ9WzAsMCx0KGRvY3VtZW50KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKHQoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0KS10aGlzLmhlbHBlclByb3BvcnRpb25zLmhlaWdodC10aGlzLm1hcmdpbnMudG9wXSx1bmRlZmluZWQpOm4uY29udGFpbm1lbnQuY29uc3RydWN0b3I9PT1BcnJheT8odGhpcy5jb250YWlubWVudD1uLmNvbnRhaW5tZW50LHVuZGVmaW5lZCk6KCJwYXJlbnQiPT09bi5jb250YWlubWVudCYmKG4uY29udGFpbm1lbnQ9dGhpcy5oZWxwZXJbMF0ucGFyZW50Tm9kZSksaT10KG4uY29udGFpbm1lbnQpLHM9aVswXSxzJiYoZT0iaGlkZGVuIiE9PWkuY3NzKCJvdmVyZmxvdyIpLHRoaXMuY29udGFpbm1lbnQ9WyhwYXJzZUludChpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdMZWZ0IiksMTApfHwwKSwocGFyc2VJbnQoaS5jc3MoImJvcmRlclRvcFdpZHRoIiksMTApfHwwKSsocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdUb3AiKSwxMCl8fDApLChlP01hdGgubWF4KHMuc2Nyb2xsV2lkdGgscy5vZmZzZXRXaWR0aCk6cy5vZmZzZXRXaWR0aCktKHBhcnNlSW50KGkuY3NzKCJib3JkZXJSaWdodFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdC10aGlzLm1hcmdpbnMucmlnaHQsKGU/TWF0aC5tYXgocy5zY3JvbGxIZWlnaHQscy5vZmZzZXRIZWlnaHQpOnMub2Zmc2V0SGVpZ2h0KS0ocGFyc2VJbnQoaS5jc3MoImJvcmRlckJvdHRvbVdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQoaS5jc3MoInBhZGRpbmdCb3R0b20iKSwxMCl8fDApLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LXRoaXMubWFyZ2lucy50b3AtdGhpcy5tYXJnaW5zLmJvdHRvbV0sdGhpcy5yZWxhdGl2ZV9jb250YWluZXI9aSksdW5kZWZpbmVkKToodGhpcy5jb250YWlubWVudD1udWxsLHVuZGVmaW5lZCl9LF9jb252ZXJ0UG9zaXRpb25UbzpmdW5jdGlvbihlLGkpe2l8fChpPXRoaXMucG9zaXRpb24pO3ZhciBzPSJhYnNvbHV0ZSI9PT1lPzE6LTEsbj0iYWJzb2x1dGUiIT09dGhpcy5jc3NQb3NpdGlvbnx8dGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1kb2N1bWVudCYmdC5jb250YWlucyh0aGlzLnNjcm9sbFBhcmVudFswXSx0aGlzLm9mZnNldFBhcmVudFswXSk/dGhpcy5zY3JvbGxQYXJlbnQ6dGhpcy5vZmZzZXRQYXJlbnQ7cmV0dXJuIHRoaXMub2Zmc2V0LnNjcm9sbHx8KHRoaXMub2Zmc2V0LnNjcm9sbD17dG9wOm4uc2Nyb2xsVG9wKCksbGVmdDpuLnNjcm9sbExlZnQoKX0pLHt0b3A6aS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnMrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpzLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6dGhpcy5vZmZzZXQuc2Nyb2xsLnRvcCkqcyxsZWZ0OmkubGVmdCt0aGlzLm9mZnNldC5yZWxhdGl2ZS5sZWZ0KnMrdGhpcy5vZmZzZXQucGFyZW50LmxlZnQqcy0oImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKTp0aGlzLm9mZnNldC5zY3JvbGwubGVmdCkqc319LF9nZW5lcmF0ZVBvc2l0aW9uOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGE9dGhpcy5vcHRpb25zLHI9ImFic29sdXRlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGg9ZS5wYWdlWCxsPWUucGFnZVk7cmV0dXJuIHRoaXMub2Zmc2V0LnNjcm9sbHx8KHRoaXMub2Zmc2V0LnNjcm9sbD17dG9wOnIuc2Nyb2xsVG9wKCksbGVmdDpyLnNjcm9sbExlZnQoKX0pLHRoaXMub3JpZ2luYWxQb3NpdGlvbiYmKHRoaXMuY29udGFpbm1lbnQmJih0aGlzLnJlbGF0aXZlX2NvbnRhaW5lcj8ocz10aGlzLnJlbGF0aXZlX2NvbnRhaW5lci5vZmZzZXQoKSxpPVt0aGlzLmNvbnRhaW5tZW50WzBdK3MubGVmdCx0aGlzLmNvbnRhaW5tZW50WzFdK3MudG9wLHRoaXMuY29udGFpbm1lbnRbMl0rcy5sZWZ0LHRoaXMuY29udGFpbm1lbnRbM10rcy50b3BdKTppPXRoaXMuY29udGFpbm1lbnQsZS5wYWdlWC10aGlzLm9mZnNldC5jbGljay5sZWZ0PGlbMF0mJihoPWlbMF0rdGhpcy5vZmZzZXQuY2xpY2subGVmdCksZS5wYWdlWS10aGlzLm9mZnNldC5jbGljay50b3A8aVsxXSYmKGw9aVsxXSt0aGlzLm9mZnNldC5jbGljay50b3ApLGUucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdD5pWzJdJiYoaD1pWzJdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPmlbM10mJihsPWlbM10rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSksYS5ncmlkJiYobj1hLmdyaWRbMV0/dGhpcy5vcmlnaW5hbFBhZ2VZK01hdGgucm91bmQoKGwtdGhpcy5vcmlnaW5hbFBhZ2VZKS9hLmdyaWRbMV0pKmEuZ3JpZFsxXTp0aGlzLm9yaWdpbmFsUGFnZVksbD1pP24tdGhpcy5vZmZzZXQuY2xpY2sudG9wPj1pWzFdfHxuLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD5pWzNdP246bi10aGlzLm9mZnNldC5jbGljay50b3A+PWlbMV0/bi1hLmdyaWRbMV06bithLmdyaWRbMV06bixvPWEuZ3JpZFswXT90aGlzLm9yaWdpbmFsUGFnZVgrTWF0aC5yb3VuZCgoaC10aGlzLm9yaWdpbmFsUGFnZVgpL2EuZ3JpZFswXSkqYS5ncmlkWzBdOnRoaXMub3JpZ2luYWxQYWdlWCxoPWk/by10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj1pWzBdfHxvLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+aVsyXT9vOm8tdGhpcy5vZmZzZXQuY2xpY2subGVmdD49aVswXT9vLWEuZ3JpZFswXTpvK2EuZ3JpZFswXTpvKSkse3RvcDpsLXRoaXMub2Zmc2V0LmNsaWNrLnRvcC10aGlzLm9mZnNldC5yZWxhdGl2ZS50b3AtdGhpcy5vZmZzZXQucGFyZW50LnRvcCsoImZpeGVkIj09PXRoaXMuY3NzUG9zaXRpb24/LXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpOnRoaXMub2Zmc2V0LnNjcm9sbC50b3ApLGxlZnQ6aC10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6dGhpcy5vZmZzZXQuc2Nyb2xsLmxlZnQpfX0sX2NsZWFyOmZ1bmN0aW9uKCl7dGhpcy5oZWxwZXIucmVtb3ZlQ2xhc3MoInVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLHRoaXMuaGVscGVyWzBdPT09dGhpcy5lbGVtZW50WzBdfHx0aGlzLmNhbmNlbEhlbHBlclJlbW92YWx8fHRoaXMuaGVscGVyLnJlbW92ZSgpLHRoaXMuaGVscGVyPW51bGwsdGhpcy5jYW5jZWxIZWxwZXJSZW1vdmFsPSExfSxfdHJpZ2dlcjpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHM9c3x8dGhpcy5fdWlIYXNoKCksdC51aS5wbHVnaW4uY2FsbCh0aGlzLGUsW2ksc10pLCJkcmFnIj09PWUmJih0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpKSx0LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuY2FsbCh0aGlzLGUsaSxzKX0scGx1Z2luczp7fSxfdWlIYXNoOmZ1bmN0aW9uKCl7cmV0dXJue2hlbHBlcjp0aGlzLmhlbHBlcixwb3NpdGlvbjp0aGlzLnBvc2l0aW9uLG9yaWdpbmFsUG9zaXRpb246dGhpcy5vcmlnaW5hbFBvc2l0aW9uLG9mZnNldDp0aGlzLnBvc2l0aW9uQWJzfX19KSx0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsImNvbm5lY3RUb1NvcnRhYmxlIix7c3RhcnQ6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLG49cy5vcHRpb25zLG89dC5leHRlbmQoe30saSx7aXRlbTpzLmVsZW1lbnR9KTtzLnNvcnRhYmxlcz1bXSx0KG4uY29ubmVjdFRvU29ydGFibGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgaT10LmRhdGEodGhpcywidWktc29ydGFibGUiKTtpJiYhaS5vcHRpb25zLmRpc2FibGVkJiYocy5zb3J0YWJsZXMucHVzaCh7aW5zdGFuY2U6aSxzaG91bGRSZXZlcnQ6aS5vcHRpb25zLnJldmVydH0pLGkucmVmcmVzaFBvc2l0aW9ucygpLGkuX3RyaWdnZXIoImFjdGl2YXRlIixlLG8pKX0pfSxzdG9wOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSxuPXQuZXh0ZW5kKHt9LGkse2l0ZW06cy5lbGVtZW50fSk7dC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7dGhpcy5pbnN0YW5jZS5pc092ZXI/KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAscy5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2UuY2FuY2VsSGVscGVyUmVtb3ZhbD0hMSx0aGlzLnNob3VsZFJldmVydCYmKHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9dGhpcy5zaG91bGRSZXZlcnQpLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RvcChlKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyPXRoaXMuaW5zdGFuY2Uub3B0aW9ucy5faGVscGVyLCJvcmlnaW5hbCI9PT1zLm9wdGlvbnMuaGVscGVyJiZ0aGlzLmluc3RhbmNlLmN1cnJlbnRJdGVtLmNzcyh7dG9wOiJhdXRvIixsZWZ0OiJhdXRvIn0pKToodGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSExLHRoaXMuaW5zdGFuY2UuX3RyaWdnZXIoImRlYWN0aXZhdGUiLGUsbikpfSl9LGRyYWc6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLG49dGhpczt0LmVhY2gocy5zb3J0YWJsZXMsZnVuY3Rpb24oKXt2YXIgbz0hMSxhPXRoaXM7dGhpcy5pbnN0YW5jZS5wb3NpdGlvbkFicz1zLnBvc2l0aW9uQWJzLHRoaXMuaW5zdGFuY2UuaGVscGVyUHJvcG9ydGlvbnM9cy5oZWxwZXJQcm9wb3J0aW9ucyx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljaz1zLm9mZnNldC5jbGljayx0aGlzLmluc3RhbmNlLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmluc3RhbmNlLmNvbnRhaW5lckNhY2hlKSYmKG89ITAsdC5lYWNoKHMuc29ydGFibGVzLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5zdGFuY2UucG9zaXRpb25BYnM9cy5wb3NpdGlvbkFicyx0aGlzLmluc3RhbmNlLmhlbHBlclByb3BvcnRpb25zPXMuaGVscGVyUHJvcG9ydGlvbnMsdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2s9cy5vZmZzZXQuY2xpY2ssdGhpcyE9PWEmJnRoaXMuaW5zdGFuY2UuX2ludGVyc2VjdHNXaXRoKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyQ2FjaGUpJiZ0LmNvbnRhaW5zKGEuaW5zdGFuY2UuZWxlbWVudFswXSx0aGlzLmluc3RhbmNlLmVsZW1lbnRbMF0pJiYobz0hMSksb30pKSxvPyh0aGlzLmluc3RhbmNlLmlzT3Zlcnx8KHRoaXMuaW5zdGFuY2UuaXNPdmVyPTEsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbT10KG4pLmNsb25lKCkucmVtb3ZlQXR0cigiaWQiKS5hcHBlbmRUbyh0aGlzLmluc3RhbmNlLmVsZW1lbnQpLmRhdGEoInVpLXNvcnRhYmxlLWl0ZW0iLCEwKSx0aGlzLmluc3RhbmNlLm9wdGlvbnMuX2hlbHBlcj10aGlzLmluc3RhbmNlLm9wdGlvbnMuaGVscGVyLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9ZnVuY3Rpb24oKXtyZXR1cm4gaS5oZWxwZXJbMF19LGUudGFyZ2V0PXRoaXMuaW5zdGFuY2UuY3VycmVudEl0ZW1bMF0sdGhpcy5pbnN0YW5jZS5fbW91c2VDYXB0dXJlKGUsITApLHRoaXMuaW5zdGFuY2UuX21vdXNlU3RhcnQoZSwhMCwhMCksdGhpcy5pbnN0YW5jZS5vZmZzZXQuY2xpY2sudG9wPXMub2Zmc2V0LmNsaWNrLnRvcCx0aGlzLmluc3RhbmNlLm9mZnNldC5jbGljay5sZWZ0PXMub2Zmc2V0LmNsaWNrLmxlZnQsdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LmxlZnQtPXMub2Zmc2V0LnBhcmVudC5sZWZ0LXRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC5sZWZ0LHRoaXMuaW5zdGFuY2Uub2Zmc2V0LnBhcmVudC50b3AtPXMub2Zmc2V0LnBhcmVudC50b3AtdGhpcy5pbnN0YW5jZS5vZmZzZXQucGFyZW50LnRvcCxzLl90cmlnZ2VyKCJ0b1NvcnRhYmxlIixlKSxzLmRyb3BwZWQ9dGhpcy5pbnN0YW5jZS5lbGVtZW50LHMuY3VycmVudEl0ZW09cy5lbGVtZW50LHRoaXMuaW5zdGFuY2UuZnJvbU91dHNpZGU9cyksdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbSYmdGhpcy5pbnN0YW5jZS5fbW91c2VEcmFnKGUpKTp0aGlzLmluc3RhbmNlLmlzT3ZlciYmKHRoaXMuaW5zdGFuY2UuaXNPdmVyPTAsdGhpcy5pbnN0YW5jZS5jYW5jZWxIZWxwZXJSZW1vdmFsPSEwLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5yZXZlcnQ9ITEsdGhpcy5pbnN0YW5jZS5fdHJpZ2dlcigib3V0IixlLHRoaXMuaW5zdGFuY2UuX3VpSGFzaCh0aGlzLmluc3RhbmNlKSksdGhpcy5pbnN0YW5jZS5fbW91c2VTdG9wKGUsITApLHRoaXMuaW5zdGFuY2Uub3B0aW9ucy5oZWxwZXI9dGhpcy5pbnN0YW5jZS5vcHRpb25zLl9oZWxwZXIsdGhpcy5pbnN0YW5jZS5jdXJyZW50SXRlbS5yZW1vdmUoKSx0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyJiZ0aGlzLmluc3RhbmNlLnBsYWNlaG9sZGVyLnJlbW92ZSgpLHMuX3RyaWdnZXIoImZyb21Tb3J0YWJsZSIsZSkscy5kcm9wcGVkPSExKX0pfX0pLHQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwiY3Vyc29yIix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgZT10KCJib2R5IiksaT10KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLm9wdGlvbnM7ZS5jc3MoImN1cnNvciIpJiYoaS5fY3Vyc29yPWUuY3NzKCJjdXJzb3IiKSksZS5jc3MoImN1cnNvciIsaS5jdXJzb3IpfSxzdG9wOmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zO2UuX2N1cnNvciYmdCgiYm9keSIpLmNzcygiY3Vyc29yIixlLl9jdXJzb3IpfX0pLHQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwib3BhY2l0eSIse3N0YXJ0OmZ1bmN0aW9uKGUsaSl7dmFyIHM9dChpLmhlbHBlciksbj10KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLm9wdGlvbnM7cy5jc3MoIm9wYWNpdHkiKSYmKG4uX29wYWNpdHk9cy5jc3MoIm9wYWNpdHkiKSkscy5jc3MoIm9wYWNpdHkiLG4ub3BhY2l0eSl9LHN0b3A6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLm9wdGlvbnM7cy5fb3BhY2l0eSYmdChpLmhlbHBlcikuY3NzKCJvcGFjaXR5IixzLl9vcGFjaXR5KX19KSx0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNjcm9sbCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKTtlLnNjcm9sbFBhcmVudFswXSE9PWRvY3VtZW50JiYiSFRNTCIhPT1lLnNjcm9sbFBhcmVudFswXS50YWdOYW1lJiYoZS5vdmVyZmxvd09mZnNldD1lLnNjcm9sbFBhcmVudC5vZmZzZXQoKSl9LGRyYWc6ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSxzPWkub3B0aW9ucyxuPSExO2kuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJiJIVE1MIiE9PWkuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWU/KHMuYXhpcyYmIngiPT09cy5heGlzfHwoaS5vdmVyZmxvd09mZnNldC50b3AraS5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LWUucGFnZVk8cy5zY3JvbGxTZW5zaXRpdml0eT9pLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9bj1pLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Arcy5zY3JvbGxTcGVlZDplLnBhZ2VZLWkub3ZlcmZsb3dPZmZzZXQudG9wPHMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9bj1pLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3Atcy5zY3JvbGxTcGVlZCkpLHMuYXhpcyYmInkiPT09cy5heGlzfHwoaS5vdmVyZmxvd09mZnNldC5sZWZ0K2kuc2Nyb2xsUGFyZW50WzBdLm9mZnNldFdpZHRoLWUucGFnZVg8cy5zY3JvbGxTZW5zaXRpdml0eT9pLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PW49aS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCtzLnNjcm9sbFNwZWVkOmUucGFnZVgtaS5vdmVyZmxvd09mZnNldC5sZWZ0PHMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihpLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PW49aS5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdC1zLnNjcm9sbFNwZWVkKSkpOihzLmF4aXMmJiJ4Ij09PXMuYXhpc3x8KGUucGFnZVktdChkb2N1bWVudCkuc2Nyb2xsVG9wKCk8cy5zY3JvbGxTZW5zaXRpdml0eT9uPXQoZG9jdW1lbnQpLnNjcm9sbFRvcCh0KGRvY3VtZW50KS5zY3JvbGxUb3AoKS1zLnNjcm9sbFNwZWVkKTp0KHdpbmRvdykuaGVpZ2h0KCktKGUucGFnZVktdChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpPHMuc2Nyb2xsU2Vuc2l0aXZpdHkmJihuPXQoZG9jdW1lbnQpLnNjcm9sbFRvcCh0KGRvY3VtZW50KS5zY3JvbGxUb3AoKStzLnNjcm9sbFNwZWVkKSkpLHMuYXhpcyYmInkiPT09cy5heGlzfHwoZS5wYWdlWC10KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk8cy5zY3JvbGxTZW5zaXRpdml0eT9uPXQoZG9jdW1lbnQpLnNjcm9sbExlZnQodChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpLXMuc2Nyb2xsU3BlZWQpOnQod2luZG93KS53aWR0aCgpLShlLnBhZ2VYLXQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSk8cy5zY3JvbGxTZW5zaXRpdml0eSYmKG49dChkb2N1bWVudCkuc2Nyb2xsTGVmdCh0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrcy5zY3JvbGxTcGVlZCkpKSksbiE9PSExJiZ0LnVpLmRkbWFuYWdlciYmIXMuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoaSxlKX19KSx0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInNuYXAiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykuZGF0YSgidWktZHJhZ2dhYmxlIiksaT1lLm9wdGlvbnM7ZS5zbmFwRWxlbWVudHM9W10sdChpLnNuYXAuY29uc3RydWN0b3IhPT1TdHJpbmc/aS5zbmFwLml0ZW1zfHwiOmRhdGEodWktZHJhZ2dhYmxlKSI6aS5zbmFwKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9dCh0aGlzKSxzPWkub2Zmc2V0KCk7dGhpcyE9PWUuZWxlbWVudFswXSYmZS5zbmFwRWxlbWVudHMucHVzaCh7aXRlbTp0aGlzLHdpZHRoOmkub3V0ZXJXaWR0aCgpLGhlaWdodDppLm91dGVySGVpZ2h0KCksdG9wOnMudG9wLGxlZnQ6cy5sZWZ0fSl9KX0sZHJhZzpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhLHIsaCxsLGMsdSxkLHA9dCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKSxmPXAub3B0aW9ucyxnPWYuc25hcFRvbGVyYW5jZSxtPWkub2Zmc2V0LmxlZnQsdj1tK3AuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsXz1pLm9mZnNldC50b3AsYj1fK3AuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0O2Zvcih1PXAuc25hcEVsZW1lbnRzLmxlbmd0aC0xO3U+PTA7dS0tKXI9cC5zbmFwRWxlbWVudHNbdV0ubGVmdCxoPXIrcC5zbmFwRWxlbWVudHNbdV0ud2lkdGgsbD1wLnNuYXBFbGVtZW50c1t1XS50b3AsYz1sK3Auc25hcEVsZW1lbnRzW3VdLmhlaWdodCxyLWc+dnx8bT5oK2d8fGwtZz5ifHxfPmMrZ3x8IXQuY29udGFpbnMocC5zbmFwRWxlbWVudHNbdV0uaXRlbS5vd25lckRvY3VtZW50LHAuc25hcEVsZW1lbnRzW3VdLml0ZW0pPyhwLnNuYXBFbGVtZW50c1t1XS5zbmFwcGluZyYmcC5vcHRpb25zLnNuYXAucmVsZWFzZSYmcC5vcHRpb25zLnNuYXAucmVsZWFzZS5jYWxsKHAuZWxlbWVudCxlLHQuZXh0ZW5kKHAuX3VpSGFzaCgpLHtzbmFwSXRlbTpwLnNuYXBFbGVtZW50c1t1XS5pdGVtfSkpLHAuc25hcEVsZW1lbnRzW3VdLnNuYXBwaW5nPSExKTooImlubmVyIiE9PWYuc25hcE1vZGUmJihzPWc+PU1hdGguYWJzKGwtYiksbj1nPj1NYXRoLmFicyhjLV8pLG89Zz49TWF0aC5hYnMoci12KSxhPWc+PU1hdGguYWJzKGgtbSkscyYmKGkucG9zaXRpb24udG9wPXAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpsLXAuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LGxlZnQ6MH0pLnRvcC1wLm1hcmdpbnMudG9wKSxuJiYoaS5wb3NpdGlvbi50b3A9cC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmMsbGVmdDowfSkudG9wLXAubWFyZ2lucy50b3ApLG8mJihpLnBvc2l0aW9uLmxlZnQ9cC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpyLXAuaGVscGVyUHJvcG9ydGlvbnMud2lkdGh9KS5sZWZ0LXAubWFyZ2lucy5sZWZ0KSxhJiYoaS5wb3NpdGlvbi5sZWZ0PXAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDowLGxlZnQ6aH0pLmxlZnQtcC5tYXJnaW5zLmxlZnQpKSxkPXN8fG58fG98fGEsIm91dGVyIiE9PWYuc25hcE1vZGUmJihzPWc+PU1hdGguYWJzKGwtXyksbj1nPj1NYXRoLmFicyhjLWIpLG89Zz49TWF0aC5hYnMoci1tKSxhPWc+PU1hdGguYWJzKGgtdikscyYmKGkucG9zaXRpb24udG9wPXAuX2NvbnZlcnRQb3NpdGlvblRvKCJyZWxhdGl2ZSIse3RvcDpsLGxlZnQ6MH0pLnRvcC1wLm1hcmdpbnMudG9wKSxuJiYoaS5wb3NpdGlvbi50b3A9cC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOmMtcC5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQsbGVmdDowfSkudG9wLXAubWFyZ2lucy50b3ApLG8mJihpLnBvc2l0aW9uLmxlZnQ9cC5fY29udmVydFBvc2l0aW9uVG8oInJlbGF0aXZlIix7dG9wOjAsbGVmdDpyfSkubGVmdC1wLm1hcmdpbnMubGVmdCksYSYmKGkucG9zaXRpb24ubGVmdD1wLl9jb252ZXJ0UG9zaXRpb25UbygicmVsYXRpdmUiLHt0b3A6MCxsZWZ0OmgtcC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aH0pLmxlZnQtcC5tYXJnaW5zLmxlZnQpKSwhcC5zbmFwRWxlbWVudHNbdV0uc25hcHBpbmcmJihzfHxufHxvfHxhfHxkKSYmcC5vcHRpb25zLnNuYXAuc25hcCYmcC5vcHRpb25zLnNuYXAuc25hcC5jYWxsKHAuZWxlbWVudCxlLHQuZXh0ZW5kKHAuX3VpSGFzaCgpLHtzbmFwSXRlbTpwLnNuYXBFbGVtZW50c1t1XS5pdGVtfSkpLHAuc25hcEVsZW1lbnRzW3VdLnNuYXBwaW5nPXN8fG58fG98fGF8fGQpfX0pLHQudWkucGx1Z2luLmFkZCgiZHJhZ2dhYmxlIiwic3RhY2siLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zLHM9dC5tYWtlQXJyYXkodChpLnN0YWNrKSkuc29ydChmdW5jdGlvbihlLGkpe3JldHVybihwYXJzZUludCh0KGUpLmNzcygiekluZGV4IiksMTApfHwwKS0ocGFyc2VJbnQodChpKS5jc3MoInpJbmRleCIpLDEwKXx8MCl9KTtzLmxlbmd0aCYmKGU9cGFyc2VJbnQodChzWzBdKS5jc3MoInpJbmRleCIpLDEwKXx8MCx0KHMpLmVhY2goZnVuY3Rpb24oaSl7dCh0aGlzKS5jc3MoInpJbmRleCIsZStpKX0pLHRoaXMuY3NzKCJ6SW5kZXgiLGUrcy5sZW5ndGgpKX19KSx0LnVpLnBsdWdpbi5hZGQoImRyYWdnYWJsZSIsInpJbmRleCIse3N0YXJ0OmZ1bmN0aW9uKGUsaSl7dmFyIHM9dChpLmhlbHBlciksbj10KHRoaXMpLmRhdGEoInVpLWRyYWdnYWJsZSIpLm9wdGlvbnM7cy5jc3MoInpJbmRleCIpJiYobi5fekluZGV4PXMuY3NzKCJ6SW5kZXgiKSkscy5jc3MoInpJbmRleCIsbi56SW5kZXgpfSxzdG9wOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKS5kYXRhKCJ1aS1kcmFnZ2FibGUiKS5vcHRpb25zO3MuX3pJbmRleCYmdChpLmhlbHBlcikuY3NzKCJ6SW5kZXgiLHMuX3pJbmRleCl9fSl9KGpRdWVyeSksZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUsaSl7cmV0dXJuIHQ+ZSYmZStpPnR9dC53aWRnZXQoInVpLmRyb3BwYWJsZSIse3ZlcnNpb246IjEuMTAuMyIsd2lkZ2V0RXZlbnRQcmVmaXg6ImRyb3AiLG9wdGlvbnM6e2FjY2VwdDoiKiIsYWN0aXZlQ2xhc3M6ITEsYWRkQ2xhc3NlczohMCxncmVlZHk6ITEsaG92ZXJDbGFzczohMSxzY29wZToiZGVmYXVsdCIsdG9sZXJhbmNlOiJpbnRlcnNlY3QiLGFjdGl2YXRlOm51bGwsZGVhY3RpdmF0ZTpudWxsLGRyb3A6bnVsbCxvdXQ6bnVsbCxvdmVyOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm9wdGlvbnMsaT1lLmFjY2VwdDt0aGlzLmlzb3Zlcj0hMSx0aGlzLmlzb3V0PSEwLHRoaXMuYWNjZXB0PXQuaXNGdW5jdGlvbihpKT9pOmZ1bmN0aW9uKHQpe3JldHVybiB0LmlzKGkpCn0sdGhpcy5wcm9wb3J0aW9ucz17d2lkdGg6dGhpcy5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSx0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uuc2NvcGVdPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5zY29wZV18fFtdLHQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5zY29wZV0ucHVzaCh0aGlzKSxlLmFkZENsYXNzZXMmJnRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktZHJvcHBhYmxlIil9LF9kZXN0cm95OmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsaT10LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW3RoaXMub3B0aW9ucy5zY29wZV07aS5sZW5ndGg+ZTtlKyspaVtlXT09PXRoaXMmJmkuc3BsaWNlKGUsMSk7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1kcm9wcGFibGUgdWktZHJvcHBhYmxlLWRpc2FibGVkIil9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXsiYWNjZXB0Ij09PWUmJih0aGlzLmFjY2VwdD10LmlzRnVuY3Rpb24oaSk/aTpmdW5jdGlvbih0KXtyZXR1cm4gdC5pcyhpKX0pLHQuV2lkZ2V0LnByb3RvdHlwZS5fc2V0T3B0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sX2FjdGl2YXRlOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7dGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSxpJiZ0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsZSx0aGlzLnVpKGkpKX0sX2RlYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGk9dC51aS5kZG1hbmFnZXIuY3VycmVudDt0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuYWN0aXZlQ2xhc3MpLGkmJnRoaXMuX3RyaWdnZXIoImRlYWN0aXZhdGUiLGUsdGhpcy51aShpKSl9LF9vdmVyOmZ1bmN0aW9uKGUpe3ZhciBpPXQudWkuZGRtYW5hZ2VyLmN1cnJlbnQ7aSYmKGkuY3VycmVudEl0ZW18fGkuZWxlbWVudClbMF0hPT10aGlzLmVsZW1lbnRbMF0mJnRoaXMuYWNjZXB0LmNhbGwodGhpcy5lbGVtZW50WzBdLGkuY3VycmVudEl0ZW18fGkuZWxlbWVudCkmJih0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LmFkZENsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJvdmVyIixlLHRoaXMudWkoaSkpKX0sX291dDpmdW5jdGlvbihlKXt2YXIgaT10LnVpLmRkbWFuYWdlci5jdXJyZW50O2kmJihpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxpLmN1cnJlbnRJdGVtfHxpLmVsZW1lbnQpJiYodGhpcy5vcHRpb25zLmhvdmVyQ2xhc3MmJnRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyksdGhpcy5fdHJpZ2dlcigib3V0IixlLHRoaXMudWkoaSkpKX0sX2Ryb3A6ZnVuY3Rpb24oZSxpKXt2YXIgcz1pfHx0LnVpLmRkbWFuYWdlci5jdXJyZW50LG49ITE7cmV0dXJuIHMmJihzLmN1cnJlbnRJdGVtfHxzLmVsZW1lbnQpWzBdIT09dGhpcy5lbGVtZW50WzBdPyh0aGlzLmVsZW1lbnQuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLm5vdCgiLnVpLWRyYWdnYWJsZS1kcmFnZ2luZyIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10LmRhdGEodGhpcywidWktZHJvcHBhYmxlIik7cmV0dXJuIGUub3B0aW9ucy5ncmVlZHkmJiFlLm9wdGlvbnMuZGlzYWJsZWQmJmUub3B0aW9ucy5zY29wZT09PXMub3B0aW9ucy5zY29wZSYmZS5hY2NlcHQuY2FsbChlLmVsZW1lbnRbMF0scy5jdXJyZW50SXRlbXx8cy5lbGVtZW50KSYmdC51aS5pbnRlcnNlY3Qocyx0LmV4dGVuZChlLHtvZmZzZXQ6ZS5lbGVtZW50Lm9mZnNldCgpfSksZS5vcHRpb25zLnRvbGVyYW5jZSk/KG49ITAsITEpOnVuZGVmaW5lZH0pLG4/ITE6dGhpcy5hY2NlcHQuY2FsbCh0aGlzLmVsZW1lbnRbMF0scy5jdXJyZW50SXRlbXx8cy5lbGVtZW50KT8odGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzJiZ0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmFjdGl2ZUNsYXNzKSx0aGlzLm9wdGlvbnMuaG92ZXJDbGFzcyYmdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5ob3ZlckNsYXNzKSx0aGlzLl90cmlnZ2VyKCJkcm9wIixlLHRoaXMudWkocykpLHRoaXMuZWxlbWVudCk6ITEpOiExfSx1aTpmdW5jdGlvbih0KXtyZXR1cm57ZHJhZ2dhYmxlOnQuY3VycmVudEl0ZW18fHQuZWxlbWVudCxoZWxwZXI6dC5oZWxwZXIscG9zaXRpb246dC5wb3NpdGlvbixvZmZzZXQ6dC5wb3NpdGlvbkFic319fSksdC51aS5pbnRlcnNlY3Q9ZnVuY3Rpb24odCxpLHMpe2lmKCFpLm9mZnNldClyZXR1cm4hMTt2YXIgbixvLGE9KHQucG9zaXRpb25BYnN8fHQucG9zaXRpb24uYWJzb2x1dGUpLmxlZnQscj1hK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgsaD0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wLGw9aCt0LmhlbHBlclByb3BvcnRpb25zLmhlaWdodCxjPWkub2Zmc2V0LmxlZnQsdT1jK2kucHJvcG9ydGlvbnMud2lkdGgsZD1pLm9mZnNldC50b3AscD1kK2kucHJvcG9ydGlvbnMuaGVpZ2h0O3N3aXRjaChzKXtjYXNlImZpdCI6cmV0dXJuIGE+PWMmJnU+PXImJmg+PWQmJnA+PWw7Y2FzZSJpbnRlcnNlY3QiOnJldHVybiBhK3QuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgvMj5jJiZ1PnItdC5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yJiZoK3QuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI+ZCYmcD5sLXQuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LzI7Y2FzZSJwb2ludGVyIjpyZXR1cm4gbj0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkubGVmdCsodC5jbGlja09mZnNldHx8dC5vZmZzZXQuY2xpY2spLmxlZnQsbz0odC5wb3NpdGlvbkFic3x8dC5wb3NpdGlvbi5hYnNvbHV0ZSkudG9wKyh0LmNsaWNrT2Zmc2V0fHx0Lm9mZnNldC5jbGljaykudG9wLGUobyxkLGkucHJvcG9ydGlvbnMuaGVpZ2h0KSYmZShuLGMsaS5wcm9wb3J0aW9ucy53aWR0aCk7Y2FzZSJ0b3VjaCI6cmV0dXJuKGg+PWQmJnA+PWh8fGw+PWQmJnA+PWx8fGQ+aCYmbD5wKSYmKGE+PWMmJnU+PWF8fHI+PWMmJnU+PXJ8fGM+YSYmcj51KTtkZWZhdWx0OnJldHVybiExfX0sdC51aS5kZG1hbmFnZXI9e2N1cnJlbnQ6bnVsbCxkcm9wcGFibGVzOnsiZGVmYXVsdCI6W119LHByZXBhcmVPZmZzZXRzOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvPXQudWkuZGRtYW5hZ2VyLmRyb3BwYWJsZXNbZS5vcHRpb25zLnNjb3BlXXx8W10sYT1pP2kudHlwZTpudWxsLHI9KGUuY3VycmVudEl0ZW18fGUuZWxlbWVudCkuZmluZCgiOmRhdGEodWktZHJvcHBhYmxlKSIpLmFkZEJhY2soKTt0OmZvcihzPTA7by5sZW5ndGg+cztzKyspaWYoIShvW3NdLm9wdGlvbnMuZGlzYWJsZWR8fGUmJiFvW3NdLmFjY2VwdC5jYWxsKG9bc10uZWxlbWVudFswXSxlLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQpKSl7Zm9yKG49MDtyLmxlbmd0aD5uO24rKylpZihyW25dPT09b1tzXS5lbGVtZW50WzBdKXtvW3NdLnByb3BvcnRpb25zLmhlaWdodD0wO2NvbnRpbnVlIHR9b1tzXS52aXNpYmxlPSJub25lIiE9PW9bc10uZWxlbWVudC5jc3MoImRpc3BsYXkiKSxvW3NdLnZpc2libGUmJigibW91c2Vkb3duIj09PWEmJm9bc10uX2FjdGl2YXRlLmNhbGwob1tzXSxpKSxvW3NdLm9mZnNldD1vW3NdLmVsZW1lbnQub2Zmc2V0KCksb1tzXS5wcm9wb3J0aW9ucz17d2lkdGg6b1tzXS5lbGVtZW50WzBdLm9mZnNldFdpZHRoLGhlaWdodDpvW3NdLmVsZW1lbnRbMF0ub2Zmc2V0SGVpZ2h0fSl9fSxkcm9wOmZ1bmN0aW9uKGUsaSl7dmFyIHM9ITE7cmV0dXJuIHQuZWFjaCgodC51aS5kZG1hbmFnZXIuZHJvcHBhYmxlc1tlLm9wdGlvbnMuc2NvcGVdfHxbXSkuc2xpY2UoKSxmdW5jdGlvbigpe3RoaXMub3B0aW9ucyYmKCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMudmlzaWJsZSYmdC51aS5pbnRlcnNlY3QoZSx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UpJiYocz10aGlzLl9kcm9wLmNhbGwodGhpcyxpKXx8cyksIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy52aXNpYmxlJiZ0aGlzLmFjY2VwdC5jYWxsKHRoaXMuZWxlbWVudFswXSxlLmN1cnJlbnRJdGVtfHxlLmVsZW1lbnQpJiYodGhpcy5pc291dD0hMCx0aGlzLmlzb3Zlcj0hMSx0aGlzLl9kZWFjdGl2YXRlLmNhbGwodGhpcyxpKSkpfSksc30sZHJhZ1N0YXJ0OmZ1bmN0aW9uKGUsaSl7ZS5lbGVtZW50LnBhcmVudHNVbnRpbCgiYm9keSIpLmJpbmQoInNjcm9sbC5kcm9wcGFibGUiLGZ1bmN0aW9uKCl7ZS5vcHRpb25zLnJlZnJlc2hQb3NpdGlvbnN8fHQudWkuZGRtYW5hZ2VyLnByZXBhcmVPZmZzZXRzKGUsaSl9KX0sZHJhZzpmdW5jdGlvbihlLGkpe2Uub3B0aW9ucy5yZWZyZXNoUG9zaXRpb25zJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyhlLGkpLHQuZWFjaCh0LnVpLmRkbWFuYWdlci5kcm9wcGFibGVzW2Uub3B0aW9ucy5zY29wZV18fFtdLGZ1bmN0aW9uKCl7aWYoIXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmIXRoaXMuZ3JlZWR5Q2hpbGQmJnRoaXMudmlzaWJsZSl7dmFyIHMsbixvLGE9dC51aS5pbnRlcnNlY3QoZSx0aGlzLHRoaXMub3B0aW9ucy50b2xlcmFuY2UpLHI9IWEmJnRoaXMuaXNvdmVyPyJpc291dCI6YSYmIXRoaXMuaXNvdmVyPyJpc292ZXIiOm51bGw7ciYmKHRoaXMub3B0aW9ucy5ncmVlZHkmJihuPXRoaXMub3B0aW9ucy5zY29wZSxvPXRoaXMuZWxlbWVudC5wYXJlbnRzKCI6ZGF0YSh1aS1kcm9wcGFibGUpIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0YSh0aGlzLCJ1aS1kcm9wcGFibGUiKS5vcHRpb25zLnNjb3BlPT09bn0pLG8ubGVuZ3RoJiYocz10LmRhdGEob1swXSwidWktZHJvcHBhYmxlIikscy5ncmVlZHlDaGlsZD0iaXNvdmVyIj09PXIpKSxzJiYiaXNvdmVyIj09PXImJihzLmlzb3Zlcj0hMSxzLmlzb3V0PSEwLHMuX291dC5jYWxsKHMsaSkpLHRoaXNbcl09ITAsdGhpc1siaXNvdXQiPT09cj8iaXNvdmVyIjoiaXNvdXQiXT0hMSx0aGlzWyJpc292ZXIiPT09cj8iX292ZXIiOiJfb3V0Il0uY2FsbCh0aGlzLGkpLHMmJiJpc291dCI9PT1yJiYocy5pc291dD0hMSxzLmlzb3Zlcj0hMCxzLl9vdmVyLmNhbGwocyxpKSkpfX0pfSxkcmFnU3RvcDpmdW5jdGlvbihlLGkpe2UuZWxlbWVudC5wYXJlbnRzVW50aWwoImJvZHkiKS51bmJpbmQoInNjcm9sbC5kcm9wcGFibGUiKSxlLm9wdGlvbnMucmVmcmVzaFBvc2l0aW9uc3x8dC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHMoZSxpKX19fShqUXVlcnkpLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7cmV0dXJuIHBhcnNlSW50KHQsMTApfHwwfWZ1bmN0aW9uIGkodCl7cmV0dXJuIWlzTmFOKHBhcnNlSW50KHQsMTApKX10LndpZGdldCgidWkucmVzaXphYmxlIix0LnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjEwLjMiLHdpZGdldEV2ZW50UHJlZml4OiJyZXNpemUiLG9wdGlvbnM6e2Fsc29SZXNpemU6ITEsYW5pbWF0ZTohMSxhbmltYXRlRHVyYXRpb246InNsb3ciLGFuaW1hdGVFYXNpbmc6InN3aW5nIixhc3BlY3RSYXRpbzohMSxhdXRvSGlkZTohMSxjb250YWlubWVudDohMSxnaG9zdDohMSxncmlkOiExLGhhbmRsZXM6ImUscyxzZSIsaGVscGVyOiExLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjEwLG1pbldpZHRoOjEwLHpJbmRleDo5MCxyZXNpemU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlLGkscyxuLG8sYT10aGlzLHI9dGhpcy5vcHRpb25zO2lmKHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktcmVzaXphYmxlIiksdC5leHRlbmQodGhpcyx7X2FzcGVjdFJhdGlvOiEhci5hc3BlY3RSYXRpbyxhc3BlY3RSYXRpbzpyLmFzcGVjdFJhdGlvLG9yaWdpbmFsRWxlbWVudDp0aGlzLmVsZW1lbnQsX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHM6W10sX2hlbHBlcjpyLmhlbHBlcnx8ci5naG9zdHx8ci5hbmltYXRlP3IuaGVscGVyfHwidWktcmVzaXphYmxlLWhlbHBlciI6bnVsbH0pLHRoaXMuZWxlbWVudFswXS5ub2RlTmFtZS5tYXRjaCgvY2FudmFzfHRleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b258aW1nL2kpJiYodGhpcy5lbGVtZW50LndyYXAodCgiPGRpdiBjbGFzcz0ndWktd3JhcHBlcicgc3R5bGU9J292ZXJmbG93OiBoaWRkZW47Jz48L2Rpdj4iKS5jc3Moe3Bvc2l0aW9uOnRoaXMuZWxlbWVudC5jc3MoInBvc2l0aW9uIiksd2lkdGg6dGhpcy5lbGVtZW50Lm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCksdG9wOnRoaXMuZWxlbWVudC5jc3MoInRvcCIpLGxlZnQ6dGhpcy5lbGVtZW50LmNzcygibGVmdCIpfSkpLHRoaXMuZWxlbWVudD10aGlzLmVsZW1lbnQucGFyZW50KCkuZGF0YSgidWktcmVzaXphYmxlIix0aGlzLmVsZW1lbnQuZGF0YSgidWktcmVzaXphYmxlIikpLHRoaXMuZWxlbWVudElzV3JhcHBlcj0hMCx0aGlzLmVsZW1lbnQuY3NzKHttYXJnaW5MZWZ0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luTGVmdCIpLG1hcmdpblRvcDp0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoIm1hcmdpblRvcCIpLG1hcmdpblJpZ2h0OnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luUmlnaHQiKSxtYXJnaW5Cb3R0b206dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJtYXJnaW5Cb3R0b20iKX0pLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luTGVmdDowLG1hcmdpblRvcDowLG1hcmdpblJpZ2h0OjAsbWFyZ2luQm90dG9tOjB9KSx0aGlzLm9yaWdpbmFsUmVzaXplU3R5bGU9dGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKCJyZXNpemUiKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsIm5vbmUiKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZUVsZW1lbnRzLnB1c2godGhpcy5vcmlnaW5hbEVsZW1lbnQuY3NzKHtwb3NpdGlvbjoic3RhdGljIix6b29tOjEsZGlzcGxheToiYmxvY2sifSkpLHRoaXMub3JpZ2luYWxFbGVtZW50LmNzcyh7bWFyZ2luOnRoaXMub3JpZ2luYWxFbGVtZW50LmNzcygibWFyZ2luIil9KSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0aGlzLmhhbmRsZXM9ci5oYW5kbGVzfHwodCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiLHRoaXMuZWxlbWVudCkubGVuZ3RoP3tuOiIudWktcmVzaXphYmxlLW4iLGU6Ii51aS1yZXNpemFibGUtZSIsczoiLnVpLXJlc2l6YWJsZS1zIix3OiIudWktcmVzaXphYmxlLXciLHNlOiIudWktcmVzaXphYmxlLXNlIixzdzoiLnVpLXJlc2l6YWJsZS1zdyIsbmU6Ii51aS1yZXNpemFibGUtbmUiLG53OiIudWktcmVzaXphYmxlLW53In06ImUscyxzZSIpLHRoaXMuaGFuZGxlcy5jb25zdHJ1Y3Rvcj09PVN0cmluZylmb3IoImFsbCI9PT10aGlzLmhhbmRsZXMmJih0aGlzLmhhbmRsZXM9Im4sZSxzLHcsc2Usc3csbmUsbnciKSxlPXRoaXMuaGFuZGxlcy5zcGxpdCgiLCIpLHRoaXMuaGFuZGxlcz17fSxpPTA7ZS5sZW5ndGg+aTtpKyspcz10LnRyaW0oZVtpXSksbz0idWktcmVzaXphYmxlLSIrcyxuPXQoIjxkaXYgY2xhc3M9J3VpLXJlc2l6YWJsZS1oYW5kbGUgIitvKyInPjwvZGl2PiIpLG4uY3NzKHt6SW5kZXg6ci56SW5kZXh9KSwic2UiPT09cyYmbi5hZGRDbGFzcygidWktaWNvbiB1aS1pY29uLWdyaXBzbWFsbC1kaWFnb25hbC1zZSIpLHRoaXMuaGFuZGxlc1tzXT0iLnVpLXJlc2l6YWJsZS0iK3MsdGhpcy5lbGVtZW50LmFwcGVuZChuKTt0aGlzLl9yZW5kZXJBeGlzPWZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvO2U9ZXx8dGhpcy5lbGVtZW50O2ZvcihpIGluIHRoaXMuaGFuZGxlcyl0aGlzLmhhbmRsZXNbaV0uY29uc3RydWN0b3I9PT1TdHJpbmcmJih0aGlzLmhhbmRsZXNbaV09dCh0aGlzLmhhbmRsZXNbaV0sdGhpcy5lbGVtZW50KS5zaG93KCkpLHRoaXMuZWxlbWVudElzV3JhcHBlciYmdGhpcy5vcmlnaW5hbEVsZW1lbnRbMF0ubm9kZU5hbWUubWF0Y2goL3RleHRhcmVhfGlucHV0fHNlbGVjdHxidXR0b24vaSkmJihzPXQodGhpcy5oYW5kbGVzW2ldLHRoaXMuZWxlbWVudCksbz0vc3d8bmV8bnd8c2V8bnxzLy50ZXN0KGkpP3Mub3V0ZXJIZWlnaHQoKTpzLm91dGVyV2lkdGgoKSxuPVsicGFkZGluZyIsL25lfG53fG4vLnRlc3QoaSk/IlRvcCI6L3NlfHN3fHMvLnRlc3QoaSk/IkJvdHRvbSI6L15lJC8udGVzdChpKT8iUmlnaHQiOiJMZWZ0Il0uam9pbigiIiksZS5jc3MobixvKSx0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0KHRoaXMuaGFuZGxlc1tpXSkubGVuZ3RofSx0aGlzLl9yZW5kZXJBeGlzKHRoaXMuZWxlbWVudCksdGhpcy5faGFuZGxlcz10KCIudWktcmVzaXphYmxlLWhhbmRsZSIsdGhpcy5lbGVtZW50KS5kaXNhYmxlU2VsZWN0aW9uKCksdGhpcy5faGFuZGxlcy5tb3VzZW92ZXIoZnVuY3Rpb24oKXthLnJlc2l6aW5nfHwodGhpcy5jbGFzc05hbWUmJihuPXRoaXMuY2xhc3NOYW1lLm1hdGNoKC91aS1yZXNpemFibGUtKHNlfHN3fG5lfG53fG58ZXxzfHcpL2kpKSxhLmF4aXM9biYmblsxXT9uWzFdOiJzZSIpfSksci5hdXRvSGlkZSYmKHRoaXMuX2hhbmRsZXMuaGlkZSgpLHQodGhpcy5lbGVtZW50KS5hZGRDbGFzcygidWktcmVzaXphYmxlLWF1dG9oaWRlIikubW91c2VlbnRlcihmdW5jdGlvbigpe3IuZGlzYWJsZWR8fCh0KHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtYXV0b2hpZGUiKSxhLl9oYW5kbGVzLnNob3coKSl9KS5tb3VzZWxlYXZlKGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8YS5yZXNpemluZ3x8KHQodGhpcykuYWRkQ2xhc3MoInVpLXJlc2l6YWJsZS1hdXRvaGlkZSIpLGEuX2hhbmRsZXMuaGlkZSgpKX0pKSx0aGlzLl9tb3VzZUluaXQoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt0aGlzLl9tb3VzZURlc3Ryb3koKTt2YXIgZSxpPWZ1bmN0aW9uKGUpe3QoZSkucmVtb3ZlQ2xhc3MoInVpLXJlc2l6YWJsZSB1aS1yZXNpemFibGUtZGlzYWJsZWQgdWktcmVzaXphYmxlLXJlc2l6aW5nIikucmVtb3ZlRGF0YSgicmVzaXphYmxlIikucmVtb3ZlRGF0YSgidWktcmVzaXphYmxlIikudW5iaW5kKCIucmVzaXphYmxlIikuZmluZCgiLnVpLXJlc2l6YWJsZS1oYW5kbGUiKS5yZW1vdmUoKX07cmV0dXJuIHRoaXMuZWxlbWVudElzV3JhcHBlciYmKGkodGhpcy5lbGVtZW50KSxlPXRoaXMuZWxlbWVudCx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3Moe3Bvc2l0aW9uOmUuY3NzKCJwb3NpdGlvbiIpLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCksdG9wOmUuY3NzKCJ0b3AiKSxsZWZ0OmUuY3NzKCJsZWZ0Iil9KS5pbnNlcnRBZnRlcihlKSxlLnJlbW92ZSgpKSx0aGlzLm9yaWdpbmFsRWxlbWVudC5jc3MoInJlc2l6ZSIsdGhpcy5vcmlnaW5hbFJlc2l6ZVN0eWxlKSxpKHRoaXMub3JpZ2luYWxFbGVtZW50KSx0aGlzfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbj0hMTtmb3IoaSBpbiB0aGlzLmhhbmRsZXMpcz10KHRoaXMuaGFuZGxlc1tpXSlbMF0sKHM9PT1lLnRhcmdldHx8dC5jb250YWlucyhzLGUudGFyZ2V0KSkmJihuPSEwKTtyZXR1cm4hdGhpcy5vcHRpb25zLmRpc2FibGVkJiZufSxfbW91c2VTdGFydDpmdW5jdGlvbihpKXt2YXIgcyxuLG8sYT10aGlzLm9wdGlvbnMscj10aGlzLmVsZW1lbnQucG9zaXRpb24oKSxoPXRoaXMuZWxlbWVudDtyZXR1cm4gdGhpcy5yZXNpemluZz0hMCwvYWJzb2x1dGUvLnRlc3QoaC5jc3MoInBvc2l0aW9uIikpP2guY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDpoLmNzcygidG9wIiksbGVmdDpoLmNzcygibGVmdCIpfSk6aC5pcygiLnVpLWRyYWdnYWJsZSIpJiZoLmNzcyh7cG9zaXRpb246ImFic29sdXRlIix0b3A6ci50b3AsbGVmdDpyLmxlZnR9KSx0aGlzLl9yZW5kZXJQcm94eSgpLHM9ZSh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSksbj1lKHRoaXMuaGVscGVyLmNzcygidG9wIikpLGEuY29udGFpbm1lbnQmJihzKz10KGEuY29udGFpbm1lbnQpLnNjcm9sbExlZnQoKXx8MCxuKz10KGEuY29udGFpbm1lbnQpLnNjcm9sbFRvcCgpfHwwKSx0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSx0aGlzLnBvc2l0aW9uPXtsZWZ0OnMsdG9wOm59LHRoaXMuc2l6ZT10aGlzLl9oZWxwZXI/e3dpZHRoOmgub3V0ZXJXaWR0aCgpLGhlaWdodDpoLm91dGVySGVpZ2h0KCl9Ont3aWR0aDpoLndpZHRoKCksaGVpZ2h0OmguaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxTaXplPXRoaXMuX2hlbHBlcj97d2lkdGg6aC5vdXRlcldpZHRoKCksaGVpZ2h0Omgub3V0ZXJIZWlnaHQoKX06e3dpZHRoOmgud2lkdGgoKSxoZWlnaHQ6aC5oZWlnaHQoKX0sdGhpcy5vcmlnaW5hbFBvc2l0aW9uPXtsZWZ0OnMsdG9wOm59LHRoaXMuc2l6ZURpZmY9e3dpZHRoOmgub3V0ZXJXaWR0aCgpLWgud2lkdGgoKSxoZWlnaHQ6aC5vdXRlckhlaWdodCgpLWguaGVpZ2h0KCl9LHRoaXMub3JpZ2luYWxNb3VzZVBvc2l0aW9uPXtsZWZ0OmkucGFnZVgsdG9wOmkucGFnZVl9LHRoaXMuYXNwZWN0UmF0aW89Im51bWJlciI9PXR5cGVvZiBhLmFzcGVjdFJhdGlvP2EuYXNwZWN0UmF0aW86dGhpcy5vcmlnaW5hbFNpemUud2lkdGgvdGhpcy5vcmlnaW5hbFNpemUuaGVpZ2h0fHwxLG89dCgiLnVpLXJlc2l6YWJsZS0iK3RoaXMuYXhpcykuY3NzKCJjdXJzb3IiKSx0KCJib2R5IikuY3NzKCJjdXJzb3IiLCJhdXRvIj09PW8/dGhpcy5heGlzKyItcmVzaXplIjpvKSxoLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0YXJ0IixpKSwhMH0sX21vdXNlRHJhZzpmdW5jdGlvbihlKXt2YXIgaSxzPXRoaXMuaGVscGVyLG49e30sbz10aGlzLm9yaWdpbmFsTW91c2VQb3NpdGlvbixhPXRoaXMuYXhpcyxyPXRoaXMucG9zaXRpb24udG9wLGg9dGhpcy5wb3NpdGlvbi5sZWZ0LGw9dGhpcy5zaXplLndpZHRoLGM9dGhpcy5zaXplLmhlaWdodCx1PWUucGFnZVgtby5sZWZ0fHwwLGQ9ZS5wYWdlWS1vLnRvcHx8MCxwPXRoaXMuX2NoYW5nZVthXTtyZXR1cm4gcD8oaT1wLmFwcGx5KHRoaXMsW2UsdSxkXSksdGhpcy5fdXBkYXRlVmlydHVhbEJvdW5kYXJpZXMoZS5zaGlmdEtleSksKHRoaXMuX2FzcGVjdFJhdGlvfHxlLnNoaWZ0S2V5KSYmKGk9dGhpcy5fdXBkYXRlUmF0aW8oaSxlKSksaT10aGlzLl9yZXNwZWN0U2l6ZShpLGUpLHRoaXMuX3VwZGF0ZUNhY2hlKGkpLHRoaXMuX3Byb3BhZ2F0ZSgicmVzaXplIixlKSx0aGlzLnBvc2l0aW9uLnRvcCE9PXImJihuLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiKSx0aGlzLnBvc2l0aW9uLmxlZnQhPT1oJiYobi5sZWZ0PXRoaXMucG9zaXRpb24ubGVmdCsicHgiKSx0aGlzLnNpemUud2lkdGghPT1sJiYobi53aWR0aD10aGlzLnNpemUud2lkdGgrInB4IiksdGhpcy5zaXplLmhlaWdodCE9PWMmJihuLmhlaWdodD10aGlzLnNpemUuaGVpZ2h0KyJweCIpLHMuY3NzKG4pLCF0aGlzLl9oZWxwZXImJnRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpLHQuaXNFbXB0eU9iamVjdChuKXx8dGhpcy5fdHJpZ2dlcigicmVzaXplIixlLHRoaXMudWkoKSksITEpOiExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUpe3RoaXMucmVzaXppbmc9ITE7dmFyIGkscyxuLG8sYSxyLGgsbD10aGlzLm9wdGlvbnMsYz10aGlzO3JldHVybiB0aGlzLl9oZWxwZXImJihpPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMscz1pLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChpWzBdLm5vZGVOYW1lKSxuPXMmJnQudWkuaGFzU2Nyb2xsKGlbMF0sImxlZnQiKT8wOmMuc2l6ZURpZmYuaGVpZ2h0LG89cz8wOmMuc2l6ZURpZmYud2lkdGgsYT17d2lkdGg6Yy5oZWxwZXIud2lkdGgoKS1vLGhlaWdodDpjLmhlbHBlci5oZWlnaHQoKS1ufSxyPXBhcnNlSW50KGMuZWxlbWVudC5jc3MoImxlZnQiKSwxMCkrKGMucG9zaXRpb24ubGVmdC1jLm9yaWdpbmFsUG9zaXRpb24ubGVmdCl8fG51bGwsaD1wYXJzZUludChjLmVsZW1lbnQuY3NzKCJ0b3AiKSwxMCkrKGMucG9zaXRpb24udG9wLWMub3JpZ2luYWxQb3NpdGlvbi50b3ApfHxudWxsLGwuYW5pbWF0ZXx8dGhpcy5lbGVtZW50LmNzcyh0LmV4dGVuZChhLHt0b3A6aCxsZWZ0OnJ9KSksYy5oZWxwZXIuaGVpZ2h0KGMuc2l6ZS5oZWlnaHQpLGMuaGVscGVyLndpZHRoKGMuc2l6ZS53aWR0aCksdGhpcy5faGVscGVyJiYhbC5hbmltYXRlJiZ0aGlzLl9wcm9wb3J0aW9uYWxseVJlc2l6ZSgpKSx0KCJib2R5IikuY3NzKCJjdXJzb3IiLCJhdXRvIiksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1yZXNpemFibGUtcmVzaXppbmciKSx0aGlzLl9wcm9wYWdhdGUoInN0b3AiLGUpLHRoaXMuX2hlbHBlciYmdGhpcy5oZWxwZXIucmVtb3ZlKCksITF9LF91cGRhdGVWaXJ0dWFsQm91bmRhcmllczpmdW5jdGlvbih0KXt2YXIgZSxzLG4sbyxhLHI9dGhpcy5vcHRpb25zO2E9e21pbldpZHRoOmkoci5taW5XaWR0aCk/ci5taW5XaWR0aDowLG1heFdpZHRoOmkoci5tYXhXaWR0aCk/ci5tYXhXaWR0aDoxLzAsbWluSGVpZ2h0Omkoci5taW5IZWlnaHQpP3IubWluSGVpZ2h0OjAsbWF4SGVpZ2h0Omkoci5tYXhIZWlnaHQpP3IubWF4SGVpZ2h0OjEvMH0sKHRoaXMuX2FzcGVjdFJhdGlvfHx0KSYmKGU9YS5taW5IZWlnaHQqdGhpcy5hc3BlY3RSYXRpbyxuPWEubWluV2lkdGgvdGhpcy5hc3BlY3RSYXRpbyxzPWEubWF4SGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW8sbz1hLm1heFdpZHRoL3RoaXMuYXNwZWN0UmF0aW8sZT5hLm1pbldpZHRoJiYoYS5taW5XaWR0aD1lKSxuPmEubWluSGVpZ2h0JiYoYS5taW5IZWlnaHQ9biksYS5tYXhXaWR0aD5zJiYoYS5tYXhXaWR0aD1zKSxhLm1heEhlaWdodD5vJiYoYS5tYXhIZWlnaHQ9bykpLHRoaXMuX3ZCb3VuZGFyaWVzPWF9LF91cGRhdGVDYWNoZTpmdW5jdGlvbih0KXt0aGlzLm9mZnNldD10aGlzLmhlbHBlci5vZmZzZXQoKSxpKHQubGVmdCkmJih0aGlzLnBvc2l0aW9uLmxlZnQ9dC5sZWZ0KSxpKHQudG9wKSYmKHRoaXMucG9zaXRpb24udG9wPXQudG9wKSxpKHQuaGVpZ2h0KSYmKHRoaXMuc2l6ZS5oZWlnaHQ9dC5oZWlnaHQpLGkodC53aWR0aCkmJih0aGlzLnNpemUud2lkdGg9dC53aWR0aCl9LF91cGRhdGVSYXRpbzpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnBvc2l0aW9uLHM9dGhpcy5zaXplLG49dGhpcy5heGlzO3JldHVybiBpKHQuaGVpZ2h0KT90LndpZHRoPXQuaGVpZ2h0KnRoaXMuYXNwZWN0UmF0aW86aSh0LndpZHRoKSYmKHQuaGVpZ2h0PXQud2lkdGgvdGhpcy5hc3BlY3RSYXRpbyksInN3Ij09PW4mJih0LmxlZnQ9ZS5sZWZ0KyhzLndpZHRoLXQud2lkdGgpLHQudG9wPW51bGwpLCJudyI9PT1uJiYodC50b3A9ZS50b3ArKHMuaGVpZ2h0LXQuaGVpZ2h0KSx0LmxlZnQ9ZS5sZWZ0KyhzLndpZHRoLXQud2lkdGgpKSx0fSxfcmVzcGVjdFNpemU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdkJvdW5kYXJpZXMscz10aGlzLmF4aXMsbj1pKHQud2lkdGgpJiZlLm1heFdpZHRoJiZlLm1heFdpZHRoPHQud2lkdGgsbz1pKHQuaGVpZ2h0KSYmZS5tYXhIZWlnaHQmJmUubWF4SGVpZ2h0PHQuaGVpZ2h0LGE9aSh0LndpZHRoKSYmZS5taW5XaWR0aCYmZS5taW5XaWR0aD50LndpZHRoLHI9aSh0LmhlaWdodCkmJmUubWluSGVpZ2h0JiZlLm1pbkhlaWdodD50LmhlaWdodCxoPXRoaXMub3JpZ2luYWxQb3NpdGlvbi5sZWZ0K3RoaXMub3JpZ2luYWxTaXplLndpZHRoLGw9dGhpcy5wb3NpdGlvbi50b3ArdGhpcy5zaXplLmhlaWdodCxjPS9zd3xud3x3Ly50ZXN0KHMpLHU9L253fG5lfG4vLnRlc3Qocyk7cmV0dXJuIGEmJih0LndpZHRoPWUubWluV2lkdGgpLHImJih0LmhlaWdodD1lLm1pbkhlaWdodCksbiYmKHQud2lkdGg9ZS5tYXhXaWR0aCksbyYmKHQuaGVpZ2h0PWUubWF4SGVpZ2h0KSxhJiZjJiYodC5sZWZ0PWgtZS5taW5XaWR0aCksbiYmYyYmKHQubGVmdD1oLWUubWF4V2lkdGgpLHImJnUmJih0LnRvcD1sLWUubWluSGVpZ2h0KSxvJiZ1JiYodC50b3A9bC1lLm1heEhlaWdodCksdC53aWR0aHx8dC5oZWlnaHR8fHQubGVmdHx8IXQudG9wP3Qud2lkdGh8fHQuaGVpZ2h0fHx0LnRvcHx8IXQubGVmdHx8KHQubGVmdD1udWxsKTp0LnRvcD1udWxsLHR9LF9wcm9wb3J0aW9uYWxseVJlc2l6ZTpmdW5jdGlvbigpe2lmKHRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoKXt2YXIgdCxlLGkscyxuLG89dGhpcy5oZWxwZXJ8fHRoaXMuZWxlbWVudDtmb3IodD0wO3RoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMubGVuZ3RoPnQ7dCsrKXtpZihuPXRoaXMuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHNbdF0sIXRoaXMuYm9yZGVyRGlmKWZvcih0aGlzLmJvcmRlckRpZj1bXSxpPVtuLmNzcygiYm9yZGVyVG9wV2lkdGgiKSxuLmNzcygiYm9yZGVyUmlnaHRXaWR0aCIpLG4uY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLG4uY3NzKCJib3JkZXJMZWZ0V2lkdGgiKV0scz1bbi5jc3MoInBhZGRpbmdUb3AiKSxuLmNzcygicGFkZGluZ1JpZ2h0Iiksbi5jc3MoInBhZGRpbmdCb3R0b20iKSxuLmNzcygicGFkZGluZ0xlZnQiKV0sZT0wO2kubGVuZ3RoPmU7ZSsrKXRoaXMuYm9yZGVyRGlmW2VdPShwYXJzZUludChpW2VdLDEwKXx8MCkrKHBhcnNlSW50KHNbZV0sMTApfHwwKTtuLmNzcyh7aGVpZ2h0Om8uaGVpZ2h0KCktdGhpcy5ib3JkZXJEaWZbMF0tdGhpcy5ib3JkZXJEaWZbMl18fDAsd2lkdGg6by53aWR0aCgpLXRoaXMuYm9yZGVyRGlmWzFdLXRoaXMuYm9yZGVyRGlmWzNdfHwwfSl9fX0sX3JlbmRlclByb3h5OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LGk9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudE9mZnNldD1lLm9mZnNldCgpLHRoaXMuX2hlbHBlcj8odGhpcy5oZWxwZXI9dGhpcy5oZWxwZXJ8fHQoIjxkaXYgc3R5bGU9J292ZXJmbG93OmhpZGRlbjsnPjwvZGl2PiIpLHRoaXMuaGVscGVyLmFkZENsYXNzKHRoaXMuX2hlbHBlcikuY3NzKHt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLTEsaGVpZ2h0OnRoaXMuZWxlbWVudC5vdXRlckhlaWdodCgpLTEscG9zaXRpb246ImFic29sdXRlIixsZWZ0OnRoaXMuZWxlbWVudE9mZnNldC5sZWZ0KyJweCIsdG9wOnRoaXMuZWxlbWVudE9mZnNldC50b3ArInB4Iix6SW5kZXg6KytpLnpJbmRleH0pLHRoaXMuaGVscGVyLmFwcGVuZFRvKCJib2R5IikuZGlzYWJsZVNlbGVjdGlvbigpKTp0aGlzLmhlbHBlcj10aGlzLmVsZW1lbnR9LF9jaGFuZ2U6e2U6ZnVuY3Rpb24odCxlKXtyZXR1cm57d2lkdGg6dGhpcy5vcmlnaW5hbFNpemUud2lkdGgrZX19LHc6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLm9yaWdpbmFsU2l6ZSxzPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57bGVmdDpzLmxlZnQrZSx3aWR0aDppLndpZHRoLWV9fSxuOmZ1bmN0aW9uKHQsZSxpKXt2YXIgcz10aGlzLm9yaWdpbmFsU2l6ZSxuPXRoaXMub3JpZ2luYWxQb3NpdGlvbjtyZXR1cm57dG9wOm4udG9wK2ksaGVpZ2h0OnMuaGVpZ2h0LWl9fSxzOmZ1bmN0aW9uKHQsZSxpKXtyZXR1cm57aGVpZ2h0OnRoaXMub3JpZ2luYWxTaXplLmhlaWdodCtpfX0sc2U6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uucy5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLmUuYXBwbHkodGhpcyxbZSxpLHNdKSl9LHN3OmZ1bmN0aW9uKGUsaSxzKXtyZXR1cm4gdC5leHRlbmQodGhpcy5fY2hhbmdlLnMuYXBwbHkodGhpcyxhcmd1bWVudHMpLHRoaXMuX2NoYW5nZS53LmFwcGx5KHRoaXMsW2UsaSxzXSkpfSxuZTpmdW5jdGlvbihlLGkscyl7cmV0dXJuIHQuZXh0ZW5kKHRoaXMuX2NoYW5nZS5uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0aGlzLl9jaGFuZ2UuZS5hcHBseSh0aGlzLFtlLGksc10pKX0sbnc6ZnVuY3Rpb24oZSxpLHMpe3JldHVybiB0LmV4dGVuZCh0aGlzLl9jaGFuZ2Uubi5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fY2hhbmdlLncuYXBwbHkodGhpcyxbZSxpLHNdKSl9fSxfcHJvcGFnYXRlOmZ1bmN0aW9uKGUsaSl7dC51aS5wbHVnaW4uY2FsbCh0aGlzLGUsW2ksdGhpcy51aSgpXSksInJlc2l6ZSIhPT1lJiZ0aGlzLl90cmlnZ2VyKGUsaSx0aGlzLnVpKCkpfSxwbHVnaW5zOnt9LHVpOmZ1bmN0aW9uKCl7cmV0dXJue29yaWdpbmFsRWxlbWVudDp0aGlzLm9yaWdpbmFsRWxlbWVudCxlbGVtZW50OnRoaXMuZWxlbWVudCxoZWxwZXI6dGhpcy5oZWxwZXIscG9zaXRpb246dGhpcy5wb3NpdGlvbixzaXplOnRoaXMuc2l6ZSxvcmlnaW5hbFNpemU6dGhpcy5vcmlnaW5hbFNpemUsb3JpZ2luYWxQb3NpdGlvbjp0aGlzLm9yaWdpbmFsUG9zaXRpb259fX0pLHQudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiYW5pbWF0ZSIse3N0b3A6ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSxzPWkub3B0aW9ucyxuPWkuX3Byb3BvcnRpb25hbGx5UmVzaXplRWxlbWVudHMsbz1uLmxlbmd0aCYmL3RleHRhcmVhL2kudGVzdChuWzBdLm5vZGVOYW1lKSxhPW8mJnQudWkuaGFzU2Nyb2xsKG5bMF0sImxlZnQiKT8wOmkuc2l6ZURpZmYuaGVpZ2h0LHI9bz8wOmkuc2l6ZURpZmYud2lkdGgsaD17d2lkdGg6aS5zaXplLndpZHRoLXIsaGVpZ2h0Omkuc2l6ZS5oZWlnaHQtYX0sbD1wYXJzZUludChpLmVsZW1lbnQuY3NzKCJsZWZ0IiksMTApKyhpLnBvc2l0aW9uLmxlZnQtaS5vcmlnaW5hbFBvc2l0aW9uLmxlZnQpfHxudWxsLGM9cGFyc2VJbnQoaS5lbGVtZW50LmNzcygidG9wIiksMTApKyhpLnBvc2l0aW9uLnRvcC1pLm9yaWdpbmFsUG9zaXRpb24udG9wKXx8bnVsbDtpLmVsZW1lbnQuYW5pbWF0ZSh0LmV4dGVuZChoLGMmJmw/e3RvcDpjLGxlZnQ6bH06e30pLHtkdXJhdGlvbjpzLmFuaW1hdGVEdXJhdGlvbixlYXNpbmc6cy5hbmltYXRlRWFzaW5nLHN0ZXA6ZnVuY3Rpb24oKXt2YXIgcz17d2lkdGg6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygid2lkdGgiKSwxMCksaGVpZ2h0OnBhcnNlSW50KGkuZWxlbWVudC5jc3MoImhlaWdodCIpLDEwKSx0b3A6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygidG9wIiksMTApLGxlZnQ6cGFyc2VJbnQoaS5lbGVtZW50LmNzcygibGVmdCIpLDEwKX07biYmbi5sZW5ndGgmJnQoblswXSkuY3NzKHt3aWR0aDpzLndpZHRoLGhlaWdodDpzLmhlaWdodH0pLGkuX3VwZGF0ZUNhY2hlKHMpLGkuX3Byb3BhZ2F0ZSgicmVzaXplIixlKX19KX19KSx0LnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImNvbnRhaW5tZW50Iix7c3RhcnQ6ZnVuY3Rpb24oKXt2YXIgaSxzLG4sbyxhLHIsaCxsPXQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksYz1sLm9wdGlvbnMsdT1sLmVsZW1lbnQsZD1jLmNvbnRhaW5tZW50LHA9ZCBpbnN0YW5jZW9mIHQ/ZC5nZXQoMCk6L3BhcmVudC8udGVzdChkKT91LnBhcmVudCgpLmdldCgwKTpkO3AmJihsLmNvbnRhaW5lckVsZW1lbnQ9dChwKSwvZG9jdW1lbnQvLnRlc3QoZCl8fGQ9PT1kb2N1bWVudD8obC5jb250YWluZXJPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0sbC5jb250YWluZXJQb3NpdGlvbj17bGVmdDowLHRvcDowfSxsLnBhcmVudERhdGE9e2VsZW1lbnQ6dChkb2N1bWVudCksbGVmdDowLHRvcDowLHdpZHRoOnQoZG9jdW1lbnQpLndpZHRoKCksaGVpZ2h0OnQoZG9jdW1lbnQpLmhlaWdodCgpfHxkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuc2Nyb2xsSGVpZ2h0fSk6KGk9dChwKSxzPVtdLHQoWyJUb3AiLCJSaWdodCIsIkxlZnQiLCJCb3R0b20iXSkuZWFjaChmdW5jdGlvbih0LG4pe3NbdF09ZShpLmNzcygicGFkZGluZyIrbikpfSksbC5jb250YWluZXJPZmZzZXQ9aS5vZmZzZXQoKSxsLmNvbnRhaW5lclBvc2l0aW9uPWkucG9zaXRpb24oKSxsLmNvbnRhaW5lclNpemU9e2hlaWdodDppLmlubmVySGVpZ2h0KCktc1szXSx3aWR0aDppLmlubmVyV2lkdGgoKS1zWzFdfSxuPWwuY29udGFpbmVyT2Zmc2V0LG89bC5jb250YWluZXJTaXplLmhlaWdodCxhPWwuY29udGFpbmVyU2l6ZS53aWR0aCxyPXQudWkuaGFzU2Nyb2xsKHAsImxlZnQiKT9wLnNjcm9sbFdpZHRoOmEsaD10LnVpLmhhc1Njcm9sbChwKT9wLnNjcm9sbEhlaWdodDpvLGwucGFyZW50RGF0YT17ZWxlbWVudDpwLGxlZnQ6bi5sZWZ0LHRvcDpuLnRvcCx3aWR0aDpyLGhlaWdodDpofSkpfSxyZXNpemU6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT10KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpLHI9YS5vcHRpb25zLGg9YS5jb250YWluZXJPZmZzZXQsbD1hLnBvc2l0aW9uLGM9YS5fYXNwZWN0UmF0aW98fGUuc2hpZnRLZXksdT17dG9wOjAsbGVmdDowfSxkPWEuY29udGFpbmVyRWxlbWVudDtkWzBdIT09ZG9jdW1lbnQmJi9zdGF0aWMvLnRlc3QoZC5jc3MoInBvc2l0aW9uIikpJiYodT1oKSxsLmxlZnQ8KGEuX2hlbHBlcj9oLmxlZnQ6MCkmJihhLnNpemUud2lkdGg9YS5zaXplLndpZHRoKyhhLl9oZWxwZXI/YS5wb3NpdGlvbi5sZWZ0LWgubGVmdDphLnBvc2l0aW9uLmxlZnQtdS5sZWZ0KSxjJiYoYS5zaXplLmhlaWdodD1hLnNpemUud2lkdGgvYS5hc3BlY3RSYXRpbyksYS5wb3NpdGlvbi5sZWZ0PXIuaGVscGVyP2gubGVmdDowKSxsLnRvcDwoYS5faGVscGVyP2gudG9wOjApJiYoYS5zaXplLmhlaWdodD1hLnNpemUuaGVpZ2h0KyhhLl9oZWxwZXI/YS5wb3NpdGlvbi50b3AtaC50b3A6YS5wb3NpdGlvbi50b3ApLGMmJihhLnNpemUud2lkdGg9YS5zaXplLmhlaWdodCphLmFzcGVjdFJhdGlvKSxhLnBvc2l0aW9uLnRvcD1hLl9oZWxwZXI/aC50b3A6MCksYS5vZmZzZXQubGVmdD1hLnBhcmVudERhdGEubGVmdCthLnBvc2l0aW9uLmxlZnQsYS5vZmZzZXQudG9wPWEucGFyZW50RGF0YS50b3ArYS5wb3NpdGlvbi50b3AsaT1NYXRoLmFicygoYS5faGVscGVyP2Eub2Zmc2V0LmxlZnQtdS5sZWZ0OmEub2Zmc2V0LmxlZnQtdS5sZWZ0KSthLnNpemVEaWZmLndpZHRoKSxzPU1hdGguYWJzKChhLl9oZWxwZXI/YS5vZmZzZXQudG9wLXUudG9wOmEub2Zmc2V0LnRvcC1oLnRvcCkrYS5zaXplRGlmZi5oZWlnaHQpLG49YS5jb250YWluZXJFbGVtZW50LmdldCgwKT09PWEuZWxlbWVudC5wYXJlbnQoKS5nZXQoMCksbz0vcmVsYXRpdmV8YWJzb2x1dGUvLnRlc3QoYS5jb250YWluZXJFbGVtZW50LmNzcygicG9zaXRpb24iKSksbiYmbyYmKGktPWEucGFyZW50RGF0YS5sZWZ0KSxpK2Euc2l6ZS53aWR0aD49YS5wYXJlbnREYXRhLndpZHRoJiYoYS5zaXplLndpZHRoPWEucGFyZW50RGF0YS53aWR0aC1pLGMmJihhLnNpemUuaGVpZ2h0PWEuc2l6ZS53aWR0aC9hLmFzcGVjdFJhdGlvKSkscythLnNpemUuaGVpZ2h0Pj1hLnBhcmVudERhdGEuaGVpZ2h0JiYoYS5zaXplLmhlaWdodD1hLnBhcmVudERhdGEuaGVpZ2h0LXMsYyYmKGEuc2l6ZS53aWR0aD1hLnNpemUuaGVpZ2h0KmEuYXNwZWN0UmF0aW8pKX0sc3RvcDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksaT1lLm9wdGlvbnMscz1lLmNvbnRhaW5lck9mZnNldCxuPWUuY29udGFpbmVyUG9zaXRpb24sbz1lLmNvbnRhaW5lckVsZW1lbnQsYT10KGUuaGVscGVyKSxyPWEub2Zmc2V0KCksaD1hLm91dGVyV2lkdGgoKS1lLnNpemVEaWZmLndpZHRoLGw9YS5vdXRlckhlaWdodCgpLWUuc2l6ZURpZmYuaGVpZ2h0O2UuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3JlbGF0aXZlLy50ZXN0KG8uY3NzKCJwb3NpdGlvbiIpKSYmdCh0aGlzKS5jc3Moe2xlZnQ6ci5sZWZ0LW4ubGVmdC1zLmxlZnQsd2lkdGg6aCxoZWlnaHQ6bH0pLGUuX2hlbHBlciYmIWkuYW5pbWF0ZSYmL3N0YXRpYy8udGVzdChvLmNzcygicG9zaXRpb24iKSkmJnQodGhpcykuY3NzKHtsZWZ0OnIubGVmdC1uLmxlZnQtcy5sZWZ0LHdpZHRoOmgsaGVpZ2h0Omx9KX19KSx0LnVpLnBsdWdpbi5hZGQoInJlc2l6YWJsZSIsImFsc29SZXNpemUiLHtzdGFydDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksaT1lLm9wdGlvbnMscz1mdW5jdGlvbihlKXt0KGUpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpO2UuZGF0YSgidWktcmVzaXphYmxlLWFsc29yZXNpemUiLHt3aWR0aDpwYXJzZUludChlLndpZHRoKCksMTApLGhlaWdodDpwYXJzZUludChlLmhlaWdodCgpLDEwKSxsZWZ0OnBhcnNlSW50KGUuY3NzKCJsZWZ0IiksMTApLHRvcDpwYXJzZUludChlLmNzcygidG9wIiksMTApfSl9KX07Im9iamVjdCIhPXR5cGVvZiBpLmFsc29SZXNpemV8fGkuYWxzb1Jlc2l6ZS5wYXJlbnROb2RlP3MoaS5hbHNvUmVzaXplKTppLmFsc29SZXNpemUubGVuZ3RoPyhpLmFsc29SZXNpemU9aS5hbHNvUmVzaXplWzBdLHMoaS5hbHNvUmVzaXplKSk6dC5lYWNoKGkuYWxzb1Jlc2l6ZSxmdW5jdGlvbih0KXtzKHQpfSl9LHJlc2l6ZTpmdW5jdGlvbihlLGkpe3ZhciBzPXQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksbj1zLm9wdGlvbnMsbz1zLm9yaWdpbmFsU2l6ZSxhPXMub3JpZ2luYWxQb3NpdGlvbixyPXtoZWlnaHQ6cy5zaXplLmhlaWdodC1vLmhlaWdodHx8MCx3aWR0aDpzLnNpemUud2lkdGgtby53aWR0aHx8MCx0b3A6cy5wb3NpdGlvbi50b3AtYS50b3B8fDAsbGVmdDpzLnBvc2l0aW9uLmxlZnQtYS5sZWZ0fHwwfSxoPWZ1bmN0aW9uKGUscyl7dChlKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxuPXQodGhpcykuZGF0YSgidWktcmVzaXphYmxlLWFsc29yZXNpemUiKSxvPXt9LGE9cyYmcy5sZW5ndGg/czplLnBhcmVudHMoaS5vcmlnaW5hbEVsZW1lbnRbMF0pLmxlbmd0aD9bIndpZHRoIiwiaGVpZ2h0Il06WyJ3aWR0aCIsImhlaWdodCIsInRvcCIsImxlZnQiXTt0LmVhY2goYSxmdW5jdGlvbih0LGUpe3ZhciBpPShuW2VdfHwwKSsocltlXXx8MCk7aSYmaT49MCYmKG9bZV09aXx8bnVsbCl9KSxlLmNzcyhvKX0pfTsib2JqZWN0IiE9dHlwZW9mIG4uYWxzb1Jlc2l6ZXx8bi5hbHNvUmVzaXplLm5vZGVUeXBlP2gobi5hbHNvUmVzaXplKTp0LmVhY2gobi5hbHNvUmVzaXplLGZ1bmN0aW9uKHQsZSl7aCh0LGUpfSl9LHN0b3A6ZnVuY3Rpb24oKXt0KHRoaXMpLnJlbW92ZURhdGEoInJlc2l6YWJsZS1hbHNvcmVzaXplIil9fSksdC51aS5wbHVnaW4uYWRkKCJyZXNpemFibGUiLCJnaG9zdCIse3N0YXJ0OmZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKS5kYXRhKCJ1aS1yZXNpemFibGUiKSxpPWUub3B0aW9ucyxzPWUuc2l6ZTtlLmdob3N0PWUub3JpZ2luYWxFbGVtZW50LmNsb25lKCksZS5naG9zdC5jc3Moe29wYWNpdHk6LjI1LGRpc3BsYXk6ImJsb2NrIixwb3NpdGlvbjoicmVsYXRpdmUiLGhlaWdodDpzLmhlaWdodCx3aWR0aDpzLndpZHRoLG1hcmdpbjowLGxlZnQ6MCx0b3A6MH0pLmFkZENsYXNzKCJ1aS1yZXNpemFibGUtZ2hvc3QiKS5hZGRDbGFzcygic3RyaW5nIj09dHlwZW9mIGkuZ2hvc3Q/aS5naG9zdDoiIiksZS5naG9zdC5hcHBlbmRUbyhlLmhlbHBlcil9LHJlc2l6ZTpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIik7ZS5naG9zdCYmZS5naG9zdC5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSIsaGVpZ2h0OmUuc2l6ZS5oZWlnaHQsd2lkdGg6ZS5zaXplLndpZHRofSl9LHN0b3A6ZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLmRhdGEoInVpLXJlc2l6YWJsZSIpO2UuZ2hvc3QmJmUuaGVscGVyJiZlLmhlbHBlci5nZXQoMCkucmVtb3ZlQ2hpbGQoZS5naG9zdC5nZXQoMCkpfX0pLHQudWkucGx1Z2luLmFkZCgicmVzaXphYmxlIiwiZ3JpZCIse3Jlc2l6ZTpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykuZGF0YSgidWktcmVzaXphYmxlIiksaT1lLm9wdGlvbnMscz1lLnNpemUsbj1lLm9yaWdpbmFsU2l6ZSxvPWUub3JpZ2luYWxQb3NpdGlvbixhPWUuYXhpcyxyPSJudW1iZXIiPT10eXBlb2YgaS5ncmlkP1tpLmdyaWQsaS5ncmlkXTppLmdyaWQsaD1yWzBdfHwxLGw9clsxXXx8MSxjPU1hdGgucm91bmQoKHMud2lkdGgtbi53aWR0aCkvaCkqaCx1PU1hdGgucm91bmQoKHMuaGVpZ2h0LW4uaGVpZ2h0KS9sKSpsLGQ9bi53aWR0aCtjLHA9bi5oZWlnaHQrdSxmPWkubWF4V2lkdGgmJmQ+aS5tYXhXaWR0aCxnPWkubWF4SGVpZ2h0JiZwPmkubWF4SGVpZ2h0LG09aS5taW5XaWR0aCYmaS5taW5XaWR0aD5kLHY9aS5taW5IZWlnaHQmJmkubWluSGVpZ2h0PnA7aS5ncmlkPXIsbSYmKGQrPWgpLHYmJihwKz1sKSxmJiYoZC09aCksZyYmKHAtPWwpLC9eKHNlfHN8ZSkkLy50ZXN0KGEpPyhlLnNpemUud2lkdGg9ZCxlLnNpemUuaGVpZ2h0PXApOi9eKG5lKSQvLnRlc3QoYSk/KGUuc2l6ZS53aWR0aD1kLGUuc2l6ZS5oZWlnaHQ9cCxlLnBvc2l0aW9uLnRvcD1vLnRvcC11KTovXihzdykkLy50ZXN0KGEpPyhlLnNpemUud2lkdGg9ZCxlLnNpemUuaGVpZ2h0PXAsZS5wb3NpdGlvbi5sZWZ0PW8ubGVmdC1jKTooZS5zaXplLndpZHRoPWQsZS5zaXplLmhlaWdodD1wLGUucG9zaXRpb24udG9wPW8udG9wLXUsZS5wb3NpdGlvbi5sZWZ0PW8ubGVmdC1jKX19KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt0LndpZGdldCgidWkuc2VsZWN0YWJsZSIsdC51aS5tb3VzZSx7dmVyc2lvbjoiMS4xMC4zIixvcHRpb25zOnthcHBlbmRUbzoiYm9keSIsYXV0b1JlZnJlc2g6ITAsZGlzdGFuY2U6MCxmaWx0ZXI6IioiLHRvbGVyYW5jZToidG91Y2giLHNlbGVjdGVkOm51bGwsc2VsZWN0aW5nOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGwsdW5zZWxlY3RlZDpudWxsLHVuc2VsZWN0aW5nOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZSxpPXRoaXM7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RhYmxlIiksdGhpcy5kcmFnZ2VkPSExLHRoaXMucmVmcmVzaD1mdW5jdGlvbigpe2U9dChpLm9wdGlvbnMuZmlsdGVyLGkuZWxlbWVudFswXSksZS5hZGRDbGFzcygidWktc2VsZWN0ZWUiKSxlLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLGk9ZS5vZmZzZXQoKTt0LmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIix7ZWxlbWVudDp0aGlzLCRlbGVtZW50OmUsbGVmdDppLmxlZnQsdG9wOmkudG9wLHJpZ2h0OmkubGVmdCtlLm91dGVyV2lkdGgoKSxib3R0b206aS50b3ArZS5vdXRlckhlaWdodCgpLHN0YXJ0c2VsZWN0ZWQ6ITEsc2VsZWN0ZWQ6ZS5oYXNDbGFzcygidWktc2VsZWN0ZWQiKSxzZWxlY3Rpbmc6ZS5oYXNDbGFzcygidWktc2VsZWN0aW5nIiksdW5zZWxlY3Rpbmc6ZS5oYXNDbGFzcygidWktdW5zZWxlY3RpbmciKX0pfSl9LHRoaXMucmVmcmVzaCgpLHRoaXMuc2VsZWN0ZWVzPWUuYWRkQ2xhc3MoInVpLXNlbGVjdGVlIiksdGhpcy5fbW91c2VJbml0KCksdGhpcy5oZWxwZXI9dCgiPGRpdiBjbGFzcz0ndWktc2VsZWN0YWJsZS1oZWxwZXInPjwvZGl2PiIpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuc2VsZWN0ZWVzLnJlbW92ZUNsYXNzKCJ1aS1zZWxlY3RlZSIpLnJlbW92ZURhdGEoInNlbGVjdGFibGUtaXRlbSIpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0YWJsZSB1aS1zZWxlY3RhYmxlLWRpc2FibGVkIiksdGhpcy5fbW91c2VEZXN0cm95KCl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy5vcG9zPVtlLnBhZ2VYLGUucGFnZVldLHRoaXMub3B0aW9ucy5kaXNhYmxlZHx8KHRoaXMuc2VsZWN0ZWVzPXQocy5maWx0ZXIsdGhpcy5lbGVtZW50WzBdKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSksdChzLmFwcGVuZFRvKS5hcHBlbmQodGhpcy5oZWxwZXIpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDplLnBhZ2VYLHRvcDplLnBhZ2VZLHdpZHRoOjAsaGVpZ2h0OjB9KSxzLmF1dG9SZWZyZXNoJiZ0aGlzLnJlZnJlc2goKSx0aGlzLnNlbGVjdGVlcy5maWx0ZXIoIi51aS1zZWxlY3RlZCIpLmVhY2goZnVuY3Rpb24oKXt2YXIgcz10LmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cy5zdGFydHNlbGVjdGVkPSEwLGUubWV0YUtleXx8ZS5jdHJsS2V5fHwocy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0ZWQiKSxzLnNlbGVjdGVkPSExLHMuJGVsZW1lbnQuYWRkQ2xhc3MoInVpLXVuc2VsZWN0aW5nIikscy51bnNlbGVjdGluZz0hMCxpLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsZSx7dW5zZWxlY3Rpbmc6cy5lbGVtZW50fSkpfSksdChlLnRhcmdldCkucGFyZW50cygpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHMsbj10LmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cmV0dXJuIG4/KHM9IWUubWV0YUtleSYmIWUuY3RybEtleXx8IW4uJGVsZW1lbnQuaGFzQ2xhc3MoInVpLXNlbGVjdGVkIiksbi4kZWxlbWVudC5yZW1vdmVDbGFzcyhzPyJ1aS11bnNlbGVjdGluZyI6InVpLXNlbGVjdGVkIikuYWRkQ2xhc3Mocz8idWktc2VsZWN0aW5nIjoidWktdW5zZWxlY3RpbmciKSxuLnVuc2VsZWN0aW5nPSFzLG4uc2VsZWN0aW5nPXMsbi5zZWxlY3RlZD1zLHM/aS5fdHJpZ2dlcigic2VsZWN0aW5nIixlLHtzZWxlY3Rpbmc6bi5lbGVtZW50fSk6aS5fdHJpZ2dlcigidW5zZWxlY3RpbmciLGUse3Vuc2VsZWN0aW5nOm4uZWxlbWVudH0pLCExKTp1bmRlZmluZWR9KSl9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7aWYodGhpcy5kcmFnZ2VkPSEwLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQpe3ZhciBpLHM9dGhpcyxuPXRoaXMub3B0aW9ucyxvPXRoaXMub3Bvc1swXSxhPXRoaXMub3Bvc1sxXSxyPWUucGFnZVgsaD1lLnBhZ2VZO3JldHVybiBvPnImJihpPXIscj1vLG89aSksYT5oJiYoaT1oLGg9YSxhPWkpLHRoaXMuaGVscGVyLmNzcyh7bGVmdDpvLHRvcDphLHdpZHRoOnItbyxoZWlnaHQ6aC1hfSksdGhpcy5zZWxlY3RlZXMuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQuZGF0YSh0aGlzLCJzZWxlY3RhYmxlLWl0ZW0iKSxsPSExO2kmJmkuZWxlbWVudCE9PXMuZWxlbWVudFswXSYmKCJ0b3VjaCI9PT1uLnRvbGVyYW5jZT9sPSEoaS5sZWZ0PnJ8fG8+aS5yaWdodHx8aS50b3A+aHx8YT5pLmJvdHRvbSk6ImZpdCI9PT1uLnRvbGVyYW5jZSYmKGw9aS5sZWZ0Pm8mJnI+aS5yaWdodCYmaS50b3A+YSYmaD5pLmJvdHRvbSksbD8oaS5zZWxlY3RlZCYmKGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksaS5zZWxlY3RlZD0hMSksaS51bnNlbGVjdGluZyYmKGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXVuc2VsZWN0aW5nIiksaS51bnNlbGVjdGluZz0hMSksaS5zZWxlY3Rpbmd8fChpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS1zZWxlY3RpbmciKSxpLnNlbGVjdGluZz0hMCxzLl90cmlnZ2VyKCJzZWxlY3RpbmciLGUse3NlbGVjdGluZzppLmVsZW1lbnR9KSkpOihpLnNlbGVjdGluZyYmKChlLm1ldGFLZXl8fGUuY3RybEtleSkmJmkuc3RhcnRzZWxlY3RlZD8oaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksaS5zZWxlY3Rpbmc9ITEsaS4kZWxlbWVudC5hZGRDbGFzcygidWktc2VsZWN0ZWQiKSxpLnNlbGVjdGVkPSEwKTooaS4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2VsZWN0aW5nIiksaS5zZWxlY3Rpbmc9ITEsaS5zdGFydHNlbGVjdGVkJiYoaS4kZWxlbWVudC5hZGRDbGFzcygidWktdW5zZWxlY3RpbmciKSxpLnVuc2VsZWN0aW5nPSEwKSxzLl90cmlnZ2VyKCJ1bnNlbGVjdGluZyIsZSx7dW5zZWxlY3Rpbmc6aS5lbGVtZW50fSkpKSxpLnNlbGVjdGVkJiYoZS5tZXRhS2V5fHxlLmN0cmxLZXl8fGkuc3RhcnRzZWxlY3RlZHx8KGkuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGVkIiksaS5zZWxlY3RlZD0hMSxpLiRlbGVtZW50LmFkZENsYXNzKCJ1aS11bnNlbGVjdGluZyIpLGkudW5zZWxlY3Rpbmc9ITAscy5fdHJpZ2dlcigidW5zZWxlY3RpbmciLGUse3Vuc2VsZWN0aW5nOmkuZWxlbWVudH0pKSkpKX0pLCExfX0sX21vdXNlU3RvcDpmdW5jdGlvbihlKXt2YXIgaT10aGlzO3JldHVybiB0aGlzLmRyYWdnZWQ9ITEsdCgiLnVpLXVuc2VsZWN0aW5nIix0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt2YXIgcz10LmRhdGEodGhpcywic2VsZWN0YWJsZS1pdGVtIik7cy4kZWxlbWVudC5yZW1vdmVDbGFzcygidWktdW5zZWxlY3RpbmciKSxzLnVuc2VsZWN0aW5nPSExLHMuc3RhcnRzZWxlY3RlZD0hMSxpLl90cmlnZ2VyKCJ1bnNlbGVjdGVkIixlLHt1bnNlbGVjdGVkOnMuZWxlbWVudH0pfSksdCgiLnVpLXNlbGVjdGluZyIsdGhpcy5lbGVtZW50WzBdKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIHM9dC5kYXRhKHRoaXMsInNlbGVjdGFibGUtaXRlbSIpO3MuJGVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLXNlbGVjdGluZyIpLmFkZENsYXNzKCJ1aS1zZWxlY3RlZCIpLHMuc2VsZWN0aW5nPSExLHMuc2VsZWN0ZWQ9ITAscy5zdGFydHNlbGVjdGVkPSEwLGkuX3RyaWdnZXIoInNlbGVjdGVkIixlLHtzZWxlY3RlZDpzLmVsZW1lbnR9KX0pLHRoaXMuX3RyaWdnZXIoInN0b3AiLGUpLHRoaXMuaGVscGVyLnJlbW92ZSgpLCExfX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCxlLGkpe3JldHVybiB0PmUmJmUraT50fWZ1bmN0aW9uIGkodCl7cmV0dXJuL2xlZnR8cmlnaHQvLnRlc3QodC5jc3MoImZsb2F0IikpfHwvaW5saW5lfHRhYmxlLWNlbGwvLnRlc3QodC5jc3MoImRpc3BsYXkiKSl9dC53aWRnZXQoInVpLnNvcnRhYmxlIix0LnVpLm1vdXNlLHt2ZXJzaW9uOiIxLjEwLjMiLHdpZGdldEV2ZW50UHJlZml4OiJzb3J0IixyZWFkeTohMSxvcHRpb25zOnthcHBlbmRUbzoicGFyZW50IixheGlzOiExLGNvbm5lY3RXaXRoOiExLGNvbnRhaW5tZW50OiExLGN1cnNvcjoiYXV0byIsY3Vyc29yQXQ6ITEsZHJvcE9uRW1wdHk6ITAsZm9yY2VQbGFjZWhvbGRlclNpemU6ITEsZm9yY2VIZWxwZXJTaXplOiExLGdyaWQ6ITEsaGFuZGxlOiExLGhlbHBlcjoib3JpZ2luYWwiLGl0ZW1zOiI+ICoiLG9wYWNpdHk6ITEscGxhY2Vob2xkZXI6ITEscmV2ZXJ0OiExLHNjcm9sbDohMCxzY3JvbGxTZW5zaXRpdml0eToyMCxzY3JvbGxTcGVlZDoyMCxzY29wZToiZGVmYXVsdCIsdG9sZXJhbmNlOiJpbnRlcnNlY3QiLHpJbmRleDoxZTMsYWN0aXZhdGU6bnVsbCxiZWZvcmVTdG9wOm51bGwsY2hhbmdlOm51bGwsZGVhY3RpdmF0ZTpudWxsLG91dDpudWxsLG92ZXI6bnVsbCxyZWNlaXZlOm51bGwscmVtb3ZlOm51bGwsc29ydDpudWxsLHN0YXJ0Om51bGwsc3RvcDpudWxsLHVwZGF0ZTpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zO3RoaXMuY29udGFpbmVyQ2FjaGU9e30sdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zb3J0YWJsZSIpLHRoaXMucmVmcmVzaCgpLHRoaXMuZmxvYXRpbmc9dGhpcy5pdGVtcy5sZW5ndGg/IngiPT09dC5heGlzfHxpKHRoaXMuaXRlbXNbMF0uaXRlbSk6ITEsdGhpcy5vZmZzZXQ9dGhpcy5lbGVtZW50Lm9mZnNldCgpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMucmVhZHk9ITB9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZSB1aS1zb3J0YWJsZS1kaXNhYmxlZCIpLHRoaXMuX21vdXNlRGVzdHJveSgpO2Zvcih2YXIgdD10aGlzLml0ZW1zLmxlbmd0aC0xO3Q+PTA7dC0tKXRoaXMuaXRlbXNbdF0uaXRlbS5yZW1vdmVEYXRhKHRoaXMud2lkZ2V0TmFtZSsiLWl0ZW0iKTtyZXR1cm4gdGhpc30sX3NldE9wdGlvbjpmdW5jdGlvbihlLGkpeyJkaXNhYmxlZCI9PT1lPyh0aGlzLm9wdGlvbnNbZV09aSx0aGlzLndpZGdldCgpLnRvZ2dsZUNsYXNzKCJ1aS1zb3J0YWJsZS1kaXNhYmxlZCIsISFpKSk6dC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUsaSl7dmFyIHM9bnVsbCxuPSExLG89dGhpcztyZXR1cm4gdGhpcy5yZXZlcnRpbmc/ITE6dGhpcy5vcHRpb25zLmRpc2FibGVkfHwic3RhdGljIj09PXRoaXMub3B0aW9ucy50eXBlPyExOih0aGlzLl9yZWZyZXNoSXRlbXMoZSksdChlLnRhcmdldCkucGFyZW50cygpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRhKHRoaXMsby53aWRnZXROYW1lKyItaXRlbSIpPT09bz8ocz10KHRoaXMpLCExKTp1bmRlZmluZWR9KSx0LmRhdGEoZS50YXJnZXQsby53aWRnZXROYW1lKyItaXRlbSIpPT09byYmKHM9dChlLnRhcmdldCkpLHM/IXRoaXMub3B0aW9ucy5oYW5kbGV8fGl8fCh0KHRoaXMub3B0aW9ucy5oYW5kbGUscykuZmluZCgiKiIpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dGhpcz09PWUudGFyZ2V0JiYobj0hMCl9KSxuKT8odGhpcy5jdXJyZW50SXRlbT1zLHRoaXMuX3JlbW92ZUN1cnJlbnRzRnJvbUl0ZW1zKCksITApOiExOiExKX0sX21vdXNlU3RhcnQ6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuLG8sYT10aGlzLm9wdGlvbnM7aWYodGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMsdGhpcy5yZWZyZXNoUG9zaXRpb25zKCksdGhpcy5oZWxwZXI9dGhpcy5fY3JlYXRlSGVscGVyKGUpLHRoaXMuX2NhY2hlSGVscGVyUHJvcG9ydGlvbnMoKSx0aGlzLl9jYWNoZU1hcmdpbnMoKSx0aGlzLnNjcm9sbFBhcmVudD10aGlzLmhlbHBlci5zY3JvbGxQYXJlbnQoKSx0aGlzLm9mZnNldD10aGlzLmN1cnJlbnRJdGVtLm9mZnNldCgpLHRoaXMub2Zmc2V0PXt0b3A6dGhpcy5vZmZzZXQudG9wLXRoaXMubWFyZ2lucy50b3AsbGVmdDp0aGlzLm9mZnNldC5sZWZ0LXRoaXMubWFyZ2lucy5sZWZ0fSx0LmV4dGVuZCh0aGlzLm9mZnNldCx7Y2xpY2s6e2xlZnQ6ZS5wYWdlWC10aGlzLm9mZnNldC5sZWZ0LHRvcDplLnBhZ2VZLXRoaXMub2Zmc2V0LnRvcH0scGFyZW50OnRoaXMuX2dldFBhcmVudE9mZnNldCgpLHJlbGF0aXZlOnRoaXMuX2dldFJlbGF0aXZlT2Zmc2V0KCl9KSx0aGlzLmhlbHBlci5jc3MoInBvc2l0aW9uIiwiYWJzb2x1dGUiKSx0aGlzLmNzc1Bvc2l0aW9uPXRoaXMuaGVscGVyLmNzcygicG9zaXRpb24iKSx0aGlzLm9yaWdpbmFsUG9zaXRpb249dGhpcy5fZ2VuZXJhdGVQb3NpdGlvbihlKSx0aGlzLm9yaWdpbmFsUGFnZVg9ZS5wYWdlWCx0aGlzLm9yaWdpbmFsUGFnZVk9ZS5wYWdlWSxhLmN1cnNvckF0JiZ0aGlzLl9hZGp1c3RPZmZzZXRGcm9tSGVscGVyKGEuY3Vyc29yQXQpLHRoaXMuZG9tUG9zaXRpb249e3ByZXY6dGhpcy5jdXJyZW50SXRlbS5wcmV2KClbMF0scGFyZW50OnRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF19LHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5jdXJyZW50SXRlbS5oaWRlKCksdGhpcy5fY3JlYXRlUGxhY2Vob2xkZXIoKSxhLmNvbnRhaW5tZW50JiZ0aGlzLl9zZXRDb250YWlubWVudCgpLGEuY3Vyc29yJiYiYXV0byIhPT1hLmN1cnNvciYmKG89dGhpcy5kb2N1bWVudC5maW5kKCJib2R5IiksdGhpcy5zdG9yZWRDdXJzb3I9by5jc3MoImN1cnNvciIpLG8uY3NzKCJjdXJzb3IiLGEuY3Vyc29yKSx0aGlzLnN0b3JlZFN0eWxlc2hlZXQ9dCgiPHN0eWxlPip7IGN1cnNvcjogIithLmN1cnNvcisiICFpbXBvcnRhbnQ7IH08L3N0eWxlPiIpLmFwcGVuZFRvKG8pKSxhLm9wYWNpdHkmJih0aGlzLmhlbHBlci5jc3MoIm9wYWNpdHkiKSYmKHRoaXMuX3N0b3JlZE9wYWNpdHk9dGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5IikpLHRoaXMuaGVscGVyLmNzcygib3BhY2l0eSIsYS5vcGFjaXR5KSksYS56SW5kZXgmJih0aGlzLmhlbHBlci5jc3MoInpJbmRleCIpJiYodGhpcy5fc3RvcmVkWkluZGV4PXRoaXMuaGVscGVyLmNzcygiekluZGV4IikpLHRoaXMuaGVscGVyLmNzcygiekluZGV4IixhLnpJbmRleCkpLHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJiJIVE1MIiE9PXRoaXMuc2Nyb2xsUGFyZW50WzBdLnRhZ05hbWUmJih0aGlzLm92ZXJmbG93T2Zmc2V0PXRoaXMuc2Nyb2xsUGFyZW50Lm9mZnNldCgpKSx0aGlzLl90cmlnZ2VyKCJzdGFydCIsZSx0aGlzLl91aUhhc2goKSksdGhpcy5fcHJlc2VydmVIZWxwZXJQcm9wb3J0aW9uc3x8dGhpcy5fY2FjaGVIZWxwZXJQcm9wb3J0aW9ucygpLCFzKWZvcihuPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtuPj0wO24tLSl0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoImFjdGl2YXRlIixlLHRoaXMuX3VpSGFzaCh0aGlzKSk7cmV0dXJuIHQudWkuZGRtYW5hZ2VyJiYodC51aS5kZG1hbmFnZXIuY3VycmVudD10aGlzKSx0LnVpLmRkbWFuYWdlciYmIWEuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIucHJlcGFyZU9mZnNldHModGhpcyxlKSx0aGlzLmRyYWdnaW5nPSEwLHRoaXMuaGVscGVyLmFkZENsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKSx0aGlzLl9tb3VzZURyYWcoZSksITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT10aGlzLm9wdGlvbnMscj0hMTtmb3IodGhpcy5wb3NpdGlvbj10aGlzLl9nZW5lcmF0ZVBvc2l0aW9uKGUpLHRoaXMucG9zaXRpb25BYnM9dGhpcy5fY29udmVydFBvc2l0aW9uVG8oImFic29sdXRlIiksdGhpcy5sYXN0UG9zaXRpb25BYnN8fCh0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzKSx0aGlzLm9wdGlvbnMuc2Nyb2xsJiYodGhpcy5zY3JvbGxQYXJlbnRbMF0hPT1kb2N1bWVudCYmIkhUTUwiIT09dGhpcy5zY3JvbGxQYXJlbnRbMF0udGFnTmFtZT8odGhpcy5vdmVyZmxvd09mZnNldC50b3ArdGhpcy5zY3JvbGxQYXJlbnRbMF0ub2Zmc2V0SGVpZ2h0LWUucGFnZVk8YS5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3ArYS5zY3JvbGxTcGVlZDplLnBhZ2VZLXRoaXMub3ZlcmZsb3dPZmZzZXQudG9wPGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3A9cj10aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxUb3AtYS5zY3JvbGxTcGVlZCksdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0K3RoaXMuc2Nyb2xsUGFyZW50WzBdLm9mZnNldFdpZHRoLWUucGFnZVg8YS5zY3JvbGxTZW5zaXRpdml0eT90aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdCthLnNjcm9sbFNwZWVkOmUucGFnZVgtdGhpcy5vdmVyZmxvd09mZnNldC5sZWZ0PGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJih0aGlzLnNjcm9sbFBhcmVudFswXS5zY3JvbGxMZWZ0PXI9dGhpcy5zY3JvbGxQYXJlbnRbMF0uc2Nyb2xsTGVmdC1hLnNjcm9sbFNwZWVkKSk6KGUucGFnZVktdChkb2N1bWVudCkuc2Nyb2xsVG9wKCk8YS5zY3JvbGxTZW5zaXRpdml0eT9yPXQoZG9jdW1lbnQpLnNjcm9sbFRvcCh0KGRvY3VtZW50KS5zY3JvbGxUb3AoKS1hLnNjcm9sbFNwZWVkKTp0KHdpbmRvdykuaGVpZ2h0KCktKGUucGFnZVktdChkb2N1bWVudCkuc2Nyb2xsVG9wKCkpPGEuc2Nyb2xsU2Vuc2l0aXZpdHkmJihyPXQoZG9jdW1lbnQpLnNjcm9sbFRvcCh0KGRvY3VtZW50KS5zY3JvbGxUb3AoKSthLnNjcm9sbFNwZWVkKSksZS5wYWdlWC10KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCk8YS5zY3JvbGxTZW5zaXRpdml0eT9yPXQoZG9jdW1lbnQpLnNjcm9sbExlZnQodChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpLWEuc2Nyb2xsU3BlZWQpOnQod2luZG93KS53aWR0aCgpLShlLnBhZ2VYLXQoZG9jdW1lbnQpLnNjcm9sbExlZnQoKSk8YS5zY3JvbGxTZW5zaXRpdml0eSYmKHI9dChkb2N1bWVudCkuc2Nyb2xsTGVmdCh0KGRvY3VtZW50KS5zY3JvbGxMZWZ0KCkrYS5zY3JvbGxTcGVlZCkpKSxyIT09ITEmJnQudWkuZGRtYW5hZ2VyJiYhYS5kcm9wQmVoYXZpb3VyJiZ0LnVpLmRkbWFuYWdlci5wcmVwYXJlT2Zmc2V0cyh0aGlzLGUpKSx0aGlzLnBvc2l0aW9uQWJzPXRoaXMuX2NvbnZlcnRQb3NpdGlvblRvKCJhYnNvbHV0ZSIpLHRoaXMub3B0aW9ucy5heGlzJiYieSI9PT10aGlzLm9wdGlvbnMuYXhpc3x8KHRoaXMuaGVscGVyWzBdLnN0eWxlLmxlZnQ9dGhpcy5wb3NpdGlvbi5sZWZ0KyJweCIpLHRoaXMub3B0aW9ucy5heGlzJiYieCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8KHRoaXMuaGVscGVyWzBdLnN0eWxlLnRvcD10aGlzLnBvc2l0aW9uLnRvcCsicHgiKSxpPXRoaXMuaXRlbXMubGVuZ3RoLTE7aT49MDtpLS0paWYocz10aGlzLml0ZW1zW2ldLG49cy5pdGVtWzBdLG89dGhpcy5faW50ZXJzZWN0c1dpdGhQb2ludGVyKHMpLG8mJnMuaW5zdGFuY2U9PT10aGlzLmN1cnJlbnRDb250YWluZXImJm4hPT10aGlzLmN1cnJlbnRJdGVtWzBdJiZ0aGlzLnBsYWNlaG9sZGVyWzE9PT1vPyJuZXh0IjoicHJldiJdKClbMF0hPT1uJiYhdC5jb250YWlucyh0aGlzLnBsYWNlaG9sZGVyWzBdLG4pJiYoInNlbWktZHluYW1pYyI9PT10aGlzLm9wdGlvbnMudHlwZT8hdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sbik6ITApKXtpZih0aGlzLmRpcmVjdGlvbj0xPT09bz8iZG93biI6InVwIiwicG9pbnRlciIhPT10aGlzLm9wdGlvbnMudG9sZXJhbmNlJiYhdGhpcy5faW50ZXJzZWN0c1dpdGhTaWRlcyhzKSlicmVhazsKdGhpcy5fcmVhcnJhbmdlKGUscyksdGhpcy5fdHJpZ2dlcigiY2hhbmdlIixlLHRoaXMuX3VpSGFzaCgpKTticmVha31yZXR1cm4gdGhpcy5fY29udGFjdENvbnRhaW5lcnMoZSksdC51aS5kZG1hbmFnZXImJnQudWkuZGRtYW5hZ2VyLmRyYWcodGhpcyxlKSx0aGlzLl90cmlnZ2VyKCJzb3J0IixlLHRoaXMuX3VpSGFzaCgpKSx0aGlzLmxhc3RQb3NpdGlvbkFicz10aGlzLnBvc2l0aW9uQWJzLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKGUsaSl7aWYoZSl7aWYodC51aS5kZG1hbmFnZXImJiF0aGlzLm9wdGlvbnMuZHJvcEJlaGF2aW91ciYmdC51aS5kZG1hbmFnZXIuZHJvcCh0aGlzLGUpLHRoaXMub3B0aW9ucy5yZXZlcnQpe3ZhciBzPXRoaXMsbj10aGlzLnBsYWNlaG9sZGVyLm9mZnNldCgpLG89dGhpcy5vcHRpb25zLmF4aXMsYT17fTtvJiYieCIhPT1vfHwoYS5sZWZ0PW4ubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdC10aGlzLm1hcmdpbnMubGVmdCsodGhpcy5vZmZzZXRQYXJlbnRbMF09PT1kb2N1bWVudC5ib2R5PzA6dGhpcy5vZmZzZXRQYXJlbnRbMF0uc2Nyb2xsTGVmdCkpLG8mJiJ5IiE9PW98fChhLnRvcD1uLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLXRoaXMubWFyZ2lucy50b3ArKHRoaXMub2Zmc2V0UGFyZW50WzBdPT09ZG9jdW1lbnQuYm9keT8wOnRoaXMub2Zmc2V0UGFyZW50WzBdLnNjcm9sbFRvcCkpLHRoaXMucmV2ZXJ0aW5nPSEwLHQodGhpcy5oZWxwZXIpLmFuaW1hdGUoYSxwYXJzZUludCh0aGlzLm9wdGlvbnMucmV2ZXJ0LDEwKXx8NTAwLGZ1bmN0aW9uKCl7cy5fY2xlYXIoZSl9KX1lbHNlIHRoaXMuX2NsZWFyKGUsaSk7cmV0dXJuITF9fSxjYW5jZWw6ZnVuY3Rpb24oKXtpZih0aGlzLmRyYWdnaW5nKXt0aGlzLl9tb3VzZVVwKHt0YXJnZXQ6bnVsbH0pLCJvcmlnaW5hbCI9PT10aGlzLm9wdGlvbnMuaGVscGVyP3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpOnRoaXMuY3VycmVudEl0ZW0uc2hvdygpO2Zvcih2YXIgZT10aGlzLmNvbnRhaW5lcnMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy5jb250YWluZXJzW2VdLl90cmlnZ2VyKCJkZWFjdGl2YXRlIixudWxsLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jb250YWluZXJzW2VdLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbZV0uX3RyaWdnZXIoIm91dCIsbnVsbCx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tlXS5jb250YWluZXJDYWNoZS5vdmVyPTApfXJldHVybiB0aGlzLnBsYWNlaG9sZGVyJiYodGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlJiZ0aGlzLnBsYWNlaG9sZGVyWzBdLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5wbGFjZWhvbGRlclswXSksIm9yaWdpbmFsIiE9PXRoaXMub3B0aW9ucy5oZWxwZXImJnRoaXMuaGVscGVyJiZ0aGlzLmhlbHBlclswXS5wYXJlbnROb2RlJiZ0aGlzLmhlbHBlci5yZW1vdmUoKSx0LmV4dGVuZCh0aGlzLHtoZWxwZXI6bnVsbCxkcmFnZ2luZzohMSxyZXZlcnRpbmc6ITEsX25vRmluYWxTb3J0Om51bGx9KSx0aGlzLmRvbVBvc2l0aW9uLnByZXY/dCh0aGlzLmRvbVBvc2l0aW9uLnByZXYpLmFmdGVyKHRoaXMuY3VycmVudEl0ZW0pOnQodGhpcy5kb21Qb3NpdGlvbi5wYXJlbnQpLnByZXBlbmQodGhpcy5jdXJyZW50SXRlbSkpLHRoaXN9LHNlcmlhbGl6ZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9nZXRJdGVtc0FzalF1ZXJ5KGUmJmUuY29ubmVjdGVkKSxzPVtdO3JldHVybiBlPWV8fHt9LHQoaSkuZWFjaChmdW5jdGlvbigpe3ZhciBpPSh0KGUuaXRlbXx8dGhpcykuYXR0cihlLmF0dHJpYnV0ZXx8ImlkIil8fCIiKS5tYXRjaChlLmV4cHJlc3Npb258fC8oLispW1wtPV9dKC4rKS8pO2kmJnMucHVzaCgoZS5rZXl8fGlbMV0rIltdIikrIj0iKyhlLmtleSYmZS5leHByZXNzaW9uP2lbMV06aVsyXSkpfSksIXMubGVuZ3RoJiZlLmtleSYmcy5wdXNoKGUua2V5KyI9Iikscy5qb2luKCImIil9LHRvQXJyYXk6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0SXRlbXNBc2pRdWVyeShlJiZlLmNvbm5lY3RlZCkscz1bXTtyZXR1cm4gZT1lfHx7fSxpLmVhY2goZnVuY3Rpb24oKXtzLnB1c2godChlLml0ZW18fHRoaXMpLmF0dHIoZS5hdHRyaWJ1dGV8fCJpZCIpfHwiIil9KSxzfSxfaW50ZXJzZWN0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LGk9ZSt0aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLHM9dGhpcy5wb3NpdGlvbkFicy50b3Asbj1zK3RoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LG89dC5sZWZ0LGE9byt0LndpZHRoLHI9dC50b3AsaD1yK3QuaGVpZ2h0LGw9dGhpcy5vZmZzZXQuY2xpY2sudG9wLGM9dGhpcy5vZmZzZXQuY2xpY2subGVmdCx1PSJ4Ij09PXRoaXMub3B0aW9ucy5heGlzfHxzK2w+ciYmaD5zK2wsZD0ieSI9PT10aGlzLm9wdGlvbnMuYXhpc3x8ZStjPm8mJmE+ZStjLHA9dSYmZDtyZXR1cm4icG9pbnRlciI9PT10aGlzLm9wdGlvbnMudG9sZXJhbmNlfHx0aGlzLm9wdGlvbnMuZm9yY2VQb2ludGVyRm9yQ29udGFpbmVyc3x8InBvaW50ZXIiIT09dGhpcy5vcHRpb25zLnRvbGVyYW5jZSYmdGhpcy5oZWxwZXJQcm9wb3J0aW9uc1t0aGlzLmZsb2F0aW5nPyJ3aWR0aCI6ImhlaWdodCJdPnRbdGhpcy5mbG9hdGluZz8id2lkdGgiOiJoZWlnaHQiXT9wOmUrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC8yPm8mJmE+aS10aGlzLmhlbHBlclByb3BvcnRpb25zLndpZHRoLzImJnMrdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMj5yJiZoPm4tdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQvMn0sX2ludGVyc2VjdHNXaXRoUG9pbnRlcjpmdW5jdGlvbih0KXt2YXIgaT0ieCI9PT10aGlzLm9wdGlvbnMuYXhpc3x8ZSh0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsdC50b3AsdC5oZWlnaHQpLHM9InkiPT09dGhpcy5vcHRpb25zLmF4aXN8fGUodGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0LHQud2lkdGgpLG49aSYmcyxvPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLGE9dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gbj90aGlzLmZsb2F0aW5nP2EmJiJyaWdodCI9PT1hfHwiZG93biI9PT1vPzI6MTpvJiYoImRvd24iPT09bz8yOjEpOiExfSxfaW50ZXJzZWN0c1dpdGhTaWRlczpmdW5jdGlvbih0KXt2YXIgaT1lKHRoaXMucG9zaXRpb25BYnMudG9wK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCx0LnRvcCt0LmhlaWdodC8yLHQuaGVpZ2h0KSxzPWUodGhpcy5wb3NpdGlvbkFicy5sZWZ0K3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQsdC5sZWZ0K3Qud2lkdGgvMix0LndpZHRoKSxuPXRoaXMuX2dldERyYWdWZXJ0aWNhbERpcmVjdGlvbigpLG89dGhpcy5fZ2V0RHJhZ0hvcml6b250YWxEaXJlY3Rpb24oKTtyZXR1cm4gdGhpcy5mbG9hdGluZyYmbz8icmlnaHQiPT09byYmc3x8ImxlZnQiPT09byYmIXM6biYmKCJkb3duIj09PW4mJml8fCJ1cCI9PT1uJiYhaSl9LF9nZXREcmFnVmVydGljYWxEaXJlY3Rpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBvc2l0aW9uQWJzLnRvcC10aGlzLmxhc3RQb3NpdGlvbkFicy50b3A7cmV0dXJuIDAhPT10JiYodD4wPyJkb3duIjoidXAiKX0sX2dldERyYWdIb3Jpem9udGFsRGlyZWN0aW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wb3NpdGlvbkFicy5sZWZ0LXRoaXMubGFzdFBvc2l0aW9uQWJzLmxlZnQ7cmV0dXJuIDAhPT10JiYodD4wPyJyaWdodCI6ImxlZnQiKX0scmVmcmVzaDpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVmcmVzaEl0ZW1zKHQpLHRoaXMucmVmcmVzaFBvc2l0aW9ucygpLHRoaXN9LF9jb25uZWN0V2l0aDpmdW5jdGlvbigpe3ZhciB0PXRoaXMub3B0aW9ucztyZXR1cm4gdC5jb25uZWN0V2l0aC5jb25zdHJ1Y3Rvcj09PVN0cmluZz9bdC5jb25uZWN0V2l0aF06dC5jb25uZWN0V2l0aH0sX2dldEl0ZW1zQXNqUXVlcnk6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYT1bXSxyPVtdLGg9dGhpcy5fY29ubmVjdFdpdGgoKTtpZihoJiZlKWZvcihpPWgubGVuZ3RoLTE7aT49MDtpLS0pZm9yKG49dChoW2ldKSxzPW4ubGVuZ3RoLTE7cz49MDtzLS0pbz10LmRhdGEobltzXSx0aGlzLndpZGdldEZ1bGxOYW1lKSxvJiZvIT09dGhpcyYmIW8ub3B0aW9ucy5kaXNhYmxlZCYmci5wdXNoKFt0LmlzRnVuY3Rpb24oby5vcHRpb25zLml0ZW1zKT9vLm9wdGlvbnMuaXRlbXMuY2FsbChvLmVsZW1lbnQpOnQoby5vcHRpb25zLml0ZW1zLG8uZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSxvXSk7Zm9yKHIucHVzaChbdC5pc0Z1bmN0aW9uKHRoaXMub3B0aW9ucy5pdGVtcyk/dGhpcy5vcHRpb25zLml0ZW1zLmNhbGwodGhpcy5lbGVtZW50LG51bGwse29wdGlvbnM6dGhpcy5vcHRpb25zLGl0ZW06dGhpcy5jdXJyZW50SXRlbX0pOnQodGhpcy5vcHRpb25zLml0ZW1zLHRoaXMuZWxlbWVudCkubm90KCIudWktc29ydGFibGUtaGVscGVyIikubm90KCIudWktc29ydGFibGUtcGxhY2Vob2xkZXIiKSx0aGlzXSksaT1yLmxlbmd0aC0xO2k+PTA7aS0tKXJbaV1bMF0uZWFjaChmdW5jdGlvbigpe2EucHVzaCh0aGlzKX0pO3JldHVybiB0KGEpfSxfcmVtb3ZlQ3VycmVudHNGcm9tSXRlbXM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnRJdGVtLmZpbmQoIjpkYXRhKCIrdGhpcy53aWRnZXROYW1lKyItaXRlbSkiKTt0aGlzLml0ZW1zPXQuZ3JlcCh0aGlzLml0ZW1zLGZ1bmN0aW9uKHQpe2Zvcih2YXIgaT0wO2UubGVuZ3RoPmk7aSsrKWlmKGVbaV09PT10Lml0ZW1bMF0pcmV0dXJuITE7cmV0dXJuITB9KX0sX3JlZnJlc2hJdGVtczpmdW5jdGlvbihlKXt0aGlzLml0ZW1zPVtdLHRoaXMuY29udGFpbmVycz1bdGhpc107dmFyIGkscyxuLG8sYSxyLGgsbCxjPXRoaXMuaXRlbXMsdT1bW3QuaXNGdW5jdGlvbih0aGlzLm9wdGlvbnMuaXRlbXMpP3RoaXMub3B0aW9ucy5pdGVtcy5jYWxsKHRoaXMuZWxlbWVudFswXSxlLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTp0KHRoaXMub3B0aW9ucy5pdGVtcyx0aGlzLmVsZW1lbnQpLHRoaXNdXSxkPXRoaXMuX2Nvbm5lY3RXaXRoKCk7aWYoZCYmdGhpcy5yZWFkeSlmb3IoaT1kLmxlbmd0aC0xO2k+PTA7aS0tKWZvcihuPXQoZFtpXSkscz1uLmxlbmd0aC0xO3M+PTA7cy0tKW89dC5kYXRhKG5bc10sdGhpcy53aWRnZXRGdWxsTmFtZSksbyYmbyE9PXRoaXMmJiFvLm9wdGlvbnMuZGlzYWJsZWQmJih1LnB1c2goW3QuaXNGdW5jdGlvbihvLm9wdGlvbnMuaXRlbXMpP28ub3B0aW9ucy5pdGVtcy5jYWxsKG8uZWxlbWVudFswXSxlLHtpdGVtOnRoaXMuY3VycmVudEl0ZW19KTp0KG8ub3B0aW9ucy5pdGVtcyxvLmVsZW1lbnQpLG9dKSx0aGlzLmNvbnRhaW5lcnMucHVzaChvKSk7Zm9yKGk9dS5sZW5ndGgtMTtpPj0wO2ktLSlmb3IoYT11W2ldWzFdLHI9dVtpXVswXSxzPTAsbD1yLmxlbmd0aDtsPnM7cysrKWg9dChyW3NdKSxoLmRhdGEodGhpcy53aWRnZXROYW1lKyItaXRlbSIsYSksYy5wdXNoKHtpdGVtOmgsaW5zdGFuY2U6YSx3aWR0aDowLGhlaWdodDowLGxlZnQ6MCx0b3A6MH0pfSxyZWZyZXNoUG9zaXRpb25zOmZ1bmN0aW9uKGUpe3RoaXMub2Zmc2V0UGFyZW50JiZ0aGlzLmhlbHBlciYmKHRoaXMub2Zmc2V0LnBhcmVudD10aGlzLl9nZXRQYXJlbnRPZmZzZXQoKSk7dmFyIGkscyxuLG87Zm9yKGk9dGhpcy5pdGVtcy5sZW5ndGgtMTtpPj0wO2ktLSlzPXRoaXMuaXRlbXNbaV0scy5pbnN0YW5jZSE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmdGhpcy5jdXJyZW50Q29udGFpbmVyJiZzLml0ZW1bMF0hPT10aGlzLmN1cnJlbnRJdGVtWzBdfHwobj10aGlzLm9wdGlvbnMudG9sZXJhbmNlRWxlbWVudD90KHRoaXMub3B0aW9ucy50b2xlcmFuY2VFbGVtZW50LHMuaXRlbSk6cy5pdGVtLGV8fChzLndpZHRoPW4ub3V0ZXJXaWR0aCgpLHMuaGVpZ2h0PW4ub3V0ZXJIZWlnaHQoKSksbz1uLm9mZnNldCgpLHMubGVmdD1vLmxlZnQscy50b3A9by50b3ApO2lmKHRoaXMub3B0aW9ucy5jdXN0b20mJnRoaXMub3B0aW9ucy5jdXN0b20ucmVmcmVzaENvbnRhaW5lcnMpdGhpcy5vcHRpb25zLmN1c3RvbS5yZWZyZXNoQ29udGFpbmVycy5jYWxsKHRoaXMpO2Vsc2UgZm9yKGk9dGhpcy5jb250YWluZXJzLmxlbmd0aC0xO2k+PTA7aS0tKW89dGhpcy5jb250YWluZXJzW2ldLmVsZW1lbnQub2Zmc2V0KCksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLmxlZnQ9by5sZWZ0LHRoaXMuY29udGFpbmVyc1tpXS5jb250YWluZXJDYWNoZS50b3A9by50b3AsdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLndpZHRoPXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVyV2lkdGgoKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyc1tpXS5lbGVtZW50Lm91dGVySGVpZ2h0KCk7cmV0dXJuIHRoaXN9LF9jcmVhdGVQbGFjZWhvbGRlcjpmdW5jdGlvbihlKXtlPWV8fHRoaXM7dmFyIGkscz1lLm9wdGlvbnM7cy5wbGFjZWhvbGRlciYmcy5wbGFjZWhvbGRlci5jb25zdHJ1Y3RvciE9PVN0cmluZ3x8KGk9cy5wbGFjZWhvbGRlcixzLnBsYWNlaG9sZGVyPXtlbGVtZW50OmZ1bmN0aW9uKCl7dmFyIHM9ZS5jdXJyZW50SXRlbVswXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLG49dCgiPCIrcysiPiIsZS5kb2N1bWVudFswXSkuYWRkQ2xhc3MoaXx8ZS5jdXJyZW50SXRlbVswXS5jbGFzc05hbWUrIiB1aS1zb3J0YWJsZS1wbGFjZWhvbGRlciIpLnJlbW92ZUNsYXNzKCJ1aS1zb3J0YWJsZS1oZWxwZXIiKTtyZXR1cm4idHIiPT09cz9lLmN1cnJlbnRJdGVtLmNoaWxkcmVuKCkuZWFjaChmdW5jdGlvbigpe3QoIjx0ZD4mIzE2MDs8L3RkPiIsZS5kb2N1bWVudFswXSkuYXR0cigiY29sc3BhbiIsdCh0aGlzKS5hdHRyKCJjb2xzcGFuIil8fDEpLmFwcGVuZFRvKG4pfSk6ImltZyI9PT1zJiZuLmF0dHIoInNyYyIsZS5jdXJyZW50SXRlbS5hdHRyKCJzcmMiKSksaXx8bi5jc3MoInZpc2liaWxpdHkiLCJoaWRkZW4iKSxufSx1cGRhdGU6ZnVuY3Rpb24odCxuKXsoIWl8fHMuZm9yY2VQbGFjZWhvbGRlclNpemUpJiYobi5oZWlnaHQoKXx8bi5oZWlnaHQoZS5jdXJyZW50SXRlbS5pbm5lckhlaWdodCgpLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nVG9wIil8fDAsMTApLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nQm90dG9tIil8fDAsMTApKSxuLndpZHRoKCl8fG4ud2lkdGgoZS5jdXJyZW50SXRlbS5pbm5lcldpZHRoKCktcGFyc2VJbnQoZS5jdXJyZW50SXRlbS5jc3MoInBhZGRpbmdMZWZ0Iil8fDAsMTApLXBhcnNlSW50KGUuY3VycmVudEl0ZW0uY3NzKCJwYWRkaW5nUmlnaHQiKXx8MCwxMCkpKX19KSxlLnBsYWNlaG9sZGVyPXQocy5wbGFjZWhvbGRlci5lbGVtZW50LmNhbGwoZS5lbGVtZW50LGUuY3VycmVudEl0ZW0pKSxlLmN1cnJlbnRJdGVtLmFmdGVyKGUucGxhY2Vob2xkZXIpLHMucGxhY2Vob2xkZXIudXBkYXRlKGUsZS5wbGFjZWhvbGRlcil9LF9jb250YWN0Q29udGFpbmVyczpmdW5jdGlvbihzKXt2YXIgbixvLGEscixoLGwsYyx1LGQscCxmPW51bGwsZz1udWxsO2ZvcihuPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtuPj0wO24tLSlpZighdC5jb250YWlucyh0aGlzLmN1cnJlbnRJdGVtWzBdLHRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50WzBdKSlpZih0aGlzLl9pbnRlcnNlY3RzV2l0aCh0aGlzLmNvbnRhaW5lcnNbbl0uY29udGFpbmVyQ2FjaGUpKXtpZihmJiZ0LmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tuXS5lbGVtZW50WzBdLGYuZWxlbWVudFswXSkpY29udGludWU7Zj10aGlzLmNvbnRhaW5lcnNbbl0sZz1ufWVsc2UgdGhpcy5jb250YWluZXJzW25dLmNvbnRhaW5lckNhY2hlLm92ZXImJih0aGlzLmNvbnRhaW5lcnNbbl0uX3RyaWdnZXIoIm91dCIscyx0aGlzLl91aUhhc2godGhpcykpLHRoaXMuY29udGFpbmVyc1tuXS5jb250YWluZXJDYWNoZS5vdmVyPTApO2lmKGYpaWYoMT09PXRoaXMuY29udGFpbmVycy5sZW5ndGgpdGhpcy5jb250YWluZXJzW2ddLmNvbnRhaW5lckNhY2hlLm92ZXJ8fCh0aGlzLmNvbnRhaW5lcnNbZ10uX3RyaWdnZXIoIm92ZXIiLHMsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbZ10uY29udGFpbmVyQ2FjaGUub3Zlcj0xKTtlbHNle2ZvcihhPTFlNCxyPW51bGwscD1mLmZsb2F0aW5nfHxpKHRoaXMuY3VycmVudEl0ZW0pLGg9cD8ibGVmdCI6InRvcCIsbD1wPyJ3aWR0aCI6ImhlaWdodCIsYz10aGlzLnBvc2l0aW9uQWJzW2hdK3RoaXMub2Zmc2V0LmNsaWNrW2hdLG89dGhpcy5pdGVtcy5sZW5ndGgtMTtvPj0wO28tLSl0LmNvbnRhaW5zKHRoaXMuY29udGFpbmVyc1tnXS5lbGVtZW50WzBdLHRoaXMuaXRlbXNbb10uaXRlbVswXSkmJnRoaXMuaXRlbXNbb10uaXRlbVswXSE9PXRoaXMuY3VycmVudEl0ZW1bMF0mJighcHx8ZSh0aGlzLnBvc2l0aW9uQWJzLnRvcCt0aGlzLm9mZnNldC5jbGljay50b3AsdGhpcy5pdGVtc1tvXS50b3AsdGhpcy5pdGVtc1tvXS5oZWlnaHQpKSYmKHU9dGhpcy5pdGVtc1tvXS5pdGVtLm9mZnNldCgpW2hdLGQ9ITEsTWF0aC5hYnModS1jKT5NYXRoLmFicyh1K3RoaXMuaXRlbXNbb11bbF0tYykmJihkPSEwLHUrPXRoaXMuaXRlbXNbb11bbF0pLGE+TWF0aC5hYnModS1jKSYmKGE9TWF0aC5hYnModS1jKSxyPXRoaXMuaXRlbXNbb10sdGhpcy5kaXJlY3Rpb249ZD8idXAiOiJkb3duIikpO2lmKCFyJiYhdGhpcy5vcHRpb25zLmRyb3BPbkVtcHR5KXJldHVybjtpZih0aGlzLmN1cnJlbnRDb250YWluZXI9PT10aGlzLmNvbnRhaW5lcnNbZ10pcmV0dXJuO3I/dGhpcy5fcmVhcnJhbmdlKHMscixudWxsLCEwKTp0aGlzLl9yZWFycmFuZ2UocyxudWxsLHRoaXMuY29udGFpbmVyc1tnXS5lbGVtZW50LCEwKSx0aGlzLl90cmlnZ2VyKCJjaGFuZ2UiLHMsdGhpcy5fdWlIYXNoKCkpLHRoaXMuY29udGFpbmVyc1tnXS5fdHJpZ2dlcigiY2hhbmdlIixzLHRoaXMuX3VpSGFzaCh0aGlzKSksdGhpcy5jdXJyZW50Q29udGFpbmVyPXRoaXMuY29udGFpbmVyc1tnXSx0aGlzLm9wdGlvbnMucGxhY2Vob2xkZXIudXBkYXRlKHRoaXMuY3VycmVudENvbnRhaW5lcix0aGlzLnBsYWNlaG9sZGVyKSx0aGlzLmNvbnRhaW5lcnNbZ10uX3RyaWdnZXIoIm92ZXIiLHMsdGhpcy5fdWlIYXNoKHRoaXMpKSx0aGlzLmNvbnRhaW5lcnNbZ10uY29udGFpbmVyQ2FjaGUub3Zlcj0xfX0sX2NyZWF0ZUhlbHBlcjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMscz10LmlzRnVuY3Rpb24oaS5oZWxwZXIpP3QoaS5oZWxwZXIuYXBwbHkodGhpcy5lbGVtZW50WzBdLFtlLHRoaXMuY3VycmVudEl0ZW1dKSk6ImNsb25lIj09PWkuaGVscGVyP3RoaXMuY3VycmVudEl0ZW0uY2xvbmUoKTp0aGlzLmN1cnJlbnRJdGVtO3JldHVybiBzLnBhcmVudHMoImJvZHkiKS5sZW5ndGh8fHQoInBhcmVudCIhPT1pLmFwcGVuZFRvP2kuYXBwZW5kVG86dGhpcy5jdXJyZW50SXRlbVswXS5wYXJlbnROb2RlKVswXS5hcHBlbmRDaGlsZChzWzBdKSxzWzBdPT09dGhpcy5jdXJyZW50SXRlbVswXSYmKHRoaXMuX3N0b3JlZENTUz17d2lkdGg6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS53aWR0aCxoZWlnaHQ6dGhpcy5jdXJyZW50SXRlbVswXS5zdHlsZS5oZWlnaHQscG9zaXRpb246dGhpcy5jdXJyZW50SXRlbS5jc3MoInBvc2l0aW9uIiksdG9wOnRoaXMuY3VycmVudEl0ZW0uY3NzKCJ0b3AiKSxsZWZ0OnRoaXMuY3VycmVudEl0ZW0uY3NzKCJsZWZ0Iil9KSwoIXNbMF0uc3R5bGUud2lkdGh8fGkuZm9yY2VIZWxwZXJTaXplKSYmcy53aWR0aCh0aGlzLmN1cnJlbnRJdGVtLndpZHRoKCkpLCghc1swXS5zdHlsZS5oZWlnaHR8fGkuZm9yY2VIZWxwZXJTaXplKSYmcy5oZWlnaHQodGhpcy5jdXJyZW50SXRlbS5oZWlnaHQoKSksc30sX2FkanVzdE9mZnNldEZyb21IZWxwZXI6ZnVuY3Rpb24oZSl7InN0cmluZyI9PXR5cGVvZiBlJiYoZT1lLnNwbGl0KCIgIikpLHQuaXNBcnJheShlKSYmKGU9e2xlZnQ6K2VbMF0sdG9wOitlWzFdfHwwfSksImxlZnQiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9ZS5sZWZ0K3RoaXMubWFyZ2lucy5sZWZ0KSwicmlnaHQiaW4gZSYmKHRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ9dGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC1lLnJpZ2h0K3RoaXMubWFyZ2lucy5sZWZ0KSwidG9wImluIGUmJih0aGlzLm9mZnNldC5jbGljay50b3A9ZS50b3ArdGhpcy5tYXJnaW5zLnRvcCksImJvdHRvbSJpbiBlJiYodGhpcy5vZmZzZXQuY2xpY2sudG9wPXRoaXMuaGVscGVyUHJvcG9ydGlvbnMuaGVpZ2h0LWUuYm90dG9tK3RoaXMubWFyZ2lucy50b3ApfSxfZ2V0UGFyZW50T2Zmc2V0OmZ1bmN0aW9uKCl7dGhpcy5vZmZzZXRQYXJlbnQ9dGhpcy5oZWxwZXIub2Zmc2V0UGFyZW50KCk7dmFyIGU9dGhpcy5vZmZzZXRQYXJlbnQub2Zmc2V0KCk7cmV0dXJuImFic29sdXRlIj09PXRoaXMuY3NzUG9zaXRpb24mJnRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pJiYoZS5sZWZ0Kz10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCksZS50b3ArPXRoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpKSwodGhpcy5vZmZzZXRQYXJlbnRbMF09PT1kb2N1bWVudC5ib2R5fHx0aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lJiYiaHRtbCI9PT10aGlzLm9mZnNldFBhcmVudFswXS50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJnQudWkuaWUpJiYoZT17dG9wOjAsbGVmdDowfSkse3RvcDplLnRvcCsocGFyc2VJbnQodGhpcy5vZmZzZXRQYXJlbnQuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCksbGVmdDplLmxlZnQrKHBhcnNlSW50KHRoaXMub2Zmc2V0UGFyZW50LmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKX19LF9nZXRSZWxhdGl2ZU9mZnNldDpmdW5jdGlvbigpe2lmKCJyZWxhdGl2ZSI9PT10aGlzLmNzc1Bvc2l0aW9uKXt2YXIgdD10aGlzLmN1cnJlbnRJdGVtLnBvc2l0aW9uKCk7cmV0dXJue3RvcDp0LnRvcC0ocGFyc2VJbnQodGhpcy5oZWxwZXIuY3NzKCJ0b3AiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbFRvcCgpLGxlZnQ6dC5sZWZ0LShwYXJzZUludCh0aGlzLmhlbHBlci5jc3MoImxlZnQiKSwxMCl8fDApK3RoaXMuc2Nyb2xsUGFyZW50LnNjcm9sbExlZnQoKX19cmV0dXJue3RvcDowLGxlZnQ6MH19LF9jYWNoZU1hcmdpbnM6ZnVuY3Rpb24oKXt0aGlzLm1hcmdpbnM9e2xlZnQ6cGFyc2VJbnQodGhpcy5jdXJyZW50SXRlbS5jc3MoIm1hcmdpbkxlZnQiKSwxMCl8fDAsdG9wOnBhcnNlSW50KHRoaXMuY3VycmVudEl0ZW0uY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDB9fSxfY2FjaGVIZWxwZXJQcm9wb3J0aW9uczpmdW5jdGlvbigpe3RoaXMuaGVscGVyUHJvcG9ydGlvbnM9e3dpZHRoOnRoaXMuaGVscGVyLm91dGVyV2lkdGgoKSxoZWlnaHQ6dGhpcy5oZWxwZXIub3V0ZXJIZWlnaHQoKX19LF9zZXRDb250YWlubWVudDpmdW5jdGlvbigpe3ZhciBlLGkscyxuPXRoaXMub3B0aW9uczsicGFyZW50Ij09PW4uY29udGFpbm1lbnQmJihuLmNvbnRhaW5tZW50PXRoaXMuaGVscGVyWzBdLnBhcmVudE5vZGUpLCgiZG9jdW1lbnQiPT09bi5jb250YWlubWVudHx8IndpbmRvdyI9PT1uLmNvbnRhaW5tZW50KSYmKHRoaXMuY29udGFpbm1lbnQ9WzAtdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdC10aGlzLm9mZnNldC5wYXJlbnQubGVmdCwwLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wLHQoImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/ZG9jdW1lbnQ6d2luZG93KS53aWR0aCgpLXRoaXMuaGVscGVyUHJvcG9ydGlvbnMud2lkdGgtdGhpcy5tYXJnaW5zLmxlZnQsKHQoImRvY3VtZW50Ij09PW4uY29udGFpbm1lbnQ/ZG9jdW1lbnQ6d2luZG93KS5oZWlnaHQoKXx8ZG9jdW1lbnQuYm9keS5wYXJlbnROb2RlLnNjcm9sbEhlaWdodCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0pLC9eKGRvY3VtZW50fHdpbmRvd3xwYXJlbnQpJC8udGVzdChuLmNvbnRhaW5tZW50KXx8KGU9dChuLmNvbnRhaW5tZW50KVswXSxpPXQobi5jb250YWlubWVudCkub2Zmc2V0KCkscz0iaGlkZGVuIiE9PXQoZSkuY3NzKCJvdmVyZmxvdyIpLHRoaXMuY29udGFpbm1lbnQ9W2kubGVmdCsocGFyc2VJbnQodChlKS5jc3MoImJvcmRlckxlZnRXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KHQoZSkuY3NzKCJwYWRkaW5nTGVmdCIpLDEwKXx8MCktdGhpcy5tYXJnaW5zLmxlZnQsaS50b3ArKHBhcnNlSW50KHQoZSkuY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KHQoZSkuY3NzKCJwYWRkaW5nVG9wIiksMTApfHwwKS10aGlzLm1hcmdpbnMudG9wLGkubGVmdCsocz9NYXRoLm1heChlLnNjcm9sbFdpZHRoLGUub2Zmc2V0V2lkdGgpOmUub2Zmc2V0V2lkdGgpLShwYXJzZUludCh0KGUpLmNzcygiYm9yZGVyTGVmdFdpZHRoIiksMTApfHwwKS0ocGFyc2VJbnQodChlKS5jc3MoInBhZGRpbmdSaWdodCIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy53aWR0aC10aGlzLm1hcmdpbnMubGVmdCxpLnRvcCsocz9NYXRoLm1heChlLnNjcm9sbEhlaWdodCxlLm9mZnNldEhlaWdodCk6ZS5vZmZzZXRIZWlnaHQpLShwYXJzZUludCh0KGUpLmNzcygiYm9yZGVyVG9wV2lkdGgiKSwxMCl8fDApLShwYXJzZUludCh0KGUpLmNzcygicGFkZGluZ0JvdHRvbSIpLDEwKXx8MCktdGhpcy5oZWxwZXJQcm9wb3J0aW9ucy5oZWlnaHQtdGhpcy5tYXJnaW5zLnRvcF0pfSxfY29udmVydFBvc2l0aW9uVG86ZnVuY3Rpb24oZSxpKXtpfHwoaT10aGlzLnBvc2l0aW9uKTt2YXIgcz0iYWJzb2x1dGUiPT09ZT8xOi0xLG49ImFic29sdXRlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LG89LyhodG1sfGJvZHkpL2kudGVzdChuWzBdLnRhZ05hbWUpO3JldHVybnt0b3A6aS50b3ArdGhpcy5vZmZzZXQucmVsYXRpdmUudG9wKnMrdGhpcy5vZmZzZXQucGFyZW50LnRvcCpzLSgiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6bz8wOm4uc2Nyb2xsVG9wKCkpKnMsbGVmdDppLmxlZnQrdGhpcy5vZmZzZXQucmVsYXRpdmUubGVmdCpzK3RoaXMub2Zmc2V0LnBhcmVudC5sZWZ0KnMtKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6bz8wOm4uc2Nyb2xsTGVmdCgpKSpzfX0sX2dlbmVyYXRlUG9zaXRpb246ZnVuY3Rpb24oZSl7dmFyIGkscyxuPXRoaXMub3B0aW9ucyxvPWUucGFnZVgsYT1lLnBhZ2VZLHI9ImFic29sdXRlIiE9PXRoaXMuY3NzUG9zaXRpb258fHRoaXMuc2Nyb2xsUGFyZW50WzBdIT09ZG9jdW1lbnQmJnQuY29udGFpbnModGhpcy5zY3JvbGxQYXJlbnRbMF0sdGhpcy5vZmZzZXRQYXJlbnRbMF0pP3RoaXMuc2Nyb2xsUGFyZW50OnRoaXMub2Zmc2V0UGFyZW50LGg9LyhodG1sfGJvZHkpL2kudGVzdChyWzBdLnRhZ05hbWUpO3JldHVybiJyZWxhdGl2ZSIhPT10aGlzLmNzc1Bvc2l0aW9ufHx0aGlzLnNjcm9sbFBhcmVudFswXSE9PWRvY3VtZW50JiZ0aGlzLnNjcm9sbFBhcmVudFswXSE9PXRoaXMub2Zmc2V0UGFyZW50WzBdfHwodGhpcy5vZmZzZXQucmVsYXRpdmU9dGhpcy5fZ2V0UmVsYXRpdmVPZmZzZXQoKSksdGhpcy5vcmlnaW5hbFBvc2l0aW9uJiYodGhpcy5jb250YWlubWVudCYmKGUucGFnZVgtdGhpcy5vZmZzZXQuY2xpY2subGVmdDx0aGlzLmNvbnRhaW5tZW50WzBdJiYobz10aGlzLmNvbnRhaW5tZW50WzBdK3RoaXMub2Zmc2V0LmNsaWNrLmxlZnQpLGUucGFnZVktdGhpcy5vZmZzZXQuY2xpY2sudG9wPHRoaXMuY29udGFpbm1lbnRbMV0mJihhPXRoaXMuY29udGFpbm1lbnRbMV0rdGhpcy5vZmZzZXQuY2xpY2sudG9wKSxlLnBhZ2VYLXRoaXMub2Zmc2V0LmNsaWNrLmxlZnQ+dGhpcy5jb250YWlubWVudFsyXSYmKG89dGhpcy5jb250YWlubWVudFsyXSt0aGlzLm9mZnNldC5jbGljay5sZWZ0KSxlLnBhZ2VZLXRoaXMub2Zmc2V0LmNsaWNrLnRvcD50aGlzLmNvbnRhaW5tZW50WzNdJiYoYT10aGlzLmNvbnRhaW5tZW50WzNdK3RoaXMub2Zmc2V0LmNsaWNrLnRvcCkpLG4uZ3JpZCYmKGk9dGhpcy5vcmlnaW5hbFBhZ2VZK01hdGgucm91bmQoKGEtdGhpcy5vcmlnaW5hbFBhZ2VZKS9uLmdyaWRbMV0pKm4uZ3JpZFsxXSxhPXRoaXMuY29udGFpbm1lbnQ/aS10aGlzLm9mZnNldC5jbGljay50b3A+PXRoaXMuY29udGFpbm1lbnRbMV0mJmktdGhpcy5vZmZzZXQuY2xpY2sudG9wPD10aGlzLmNvbnRhaW5tZW50WzNdP2k6aS10aGlzLm9mZnNldC5jbGljay50b3A+PXRoaXMuY29udGFpbm1lbnRbMV0/aS1uLmdyaWRbMV06aStuLmdyaWRbMV06aSxzPXRoaXMub3JpZ2luYWxQYWdlWCtNYXRoLnJvdW5kKChvLXRoaXMub3JpZ2luYWxQYWdlWCkvbi5ncmlkWzBdKSpuLmdyaWRbMF0sbz10aGlzLmNvbnRhaW5tZW50P3MtdGhpcy5vZmZzZXQuY2xpY2subGVmdD49dGhpcy5jb250YWlubWVudFswXSYmcy10aGlzLm9mZnNldC5jbGljay5sZWZ0PD10aGlzLmNvbnRhaW5tZW50WzJdP3M6cy10aGlzLm9mZnNldC5jbGljay5sZWZ0Pj10aGlzLmNvbnRhaW5tZW50WzBdP3Mtbi5ncmlkWzBdOnMrbi5ncmlkWzBdOnMpKSx7dG9wOmEtdGhpcy5vZmZzZXQuY2xpY2sudG9wLXRoaXMub2Zmc2V0LnJlbGF0aXZlLnRvcC10aGlzLm9mZnNldC5wYXJlbnQudG9wKygiZml4ZWQiPT09dGhpcy5jc3NQb3NpdGlvbj8tdGhpcy5zY3JvbGxQYXJlbnQuc2Nyb2xsVG9wKCk6aD8wOnIuc2Nyb2xsVG9wKCkpLGxlZnQ6by10aGlzLm9mZnNldC5jbGljay5sZWZ0LXRoaXMub2Zmc2V0LnJlbGF0aXZlLmxlZnQtdGhpcy5vZmZzZXQucGFyZW50LmxlZnQrKCJmaXhlZCI9PT10aGlzLmNzc1Bvc2l0aW9uPy10aGlzLnNjcm9sbFBhcmVudC5zY3JvbGxMZWZ0KCk6aD8wOnIuc2Nyb2xsTGVmdCgpKX19LF9yZWFycmFuZ2U6ZnVuY3Rpb24odCxlLGkscyl7aT9pWzBdLmFwcGVuZENoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pOmUuaXRlbVswXS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLnBsYWNlaG9sZGVyWzBdLCJkb3duIj09PXRoaXMuZGlyZWN0aW9uP2UuaXRlbVswXTplLml0ZW1bMF0ubmV4dFNpYmxpbmcpLHRoaXMuY291bnRlcj10aGlzLmNvdW50ZXI/Kyt0aGlzLmNvdW50ZXI6MTt2YXIgbj10aGlzLmNvdW50ZXI7dGhpcy5fZGVsYXkoZnVuY3Rpb24oKXtuPT09dGhpcy5jb3VudGVyJiZ0aGlzLnJlZnJlc2hQb3NpdGlvbnMoIXMpfSl9LF9jbGVhcjpmdW5jdGlvbih0LGUpe3RoaXMucmV2ZXJ0aW5nPSExO3ZhciBpLHM9W107aWYoIXRoaXMuX25vRmluYWxTb3J0JiZ0aGlzLmN1cnJlbnRJdGVtLnBhcmVudCgpLmxlbmd0aCYmdGhpcy5wbGFjZWhvbGRlci5iZWZvcmUodGhpcy5jdXJyZW50SXRlbSksdGhpcy5fbm9GaW5hbFNvcnQ9bnVsbCx0aGlzLmhlbHBlclswXT09PXRoaXMuY3VycmVudEl0ZW1bMF0pe2ZvcihpIGluIHRoaXMuX3N0b3JlZENTUykoImF1dG8iPT09dGhpcy5fc3RvcmVkQ1NTW2ldfHwic3RhdGljIj09PXRoaXMuX3N0b3JlZENTU1tpXSkmJih0aGlzLl9zdG9yZWRDU1NbaV09IiIpO3RoaXMuY3VycmVudEl0ZW0uY3NzKHRoaXMuX3N0b3JlZENTUykucmVtb3ZlQ2xhc3MoInVpLXNvcnRhYmxlLWhlbHBlciIpfWVsc2UgdGhpcy5jdXJyZW50SXRlbS5zaG93KCk7Zm9yKHRoaXMuZnJvbU91dHNpZGUmJiFlJiZzLnB1c2goZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcigicmVjZWl2ZSIsdCx0aGlzLl91aUhhc2godGhpcy5mcm9tT3V0c2lkZSkpfSksIXRoaXMuZnJvbU91dHNpZGUmJnRoaXMuZG9tUG9zaXRpb24ucHJldj09PXRoaXMuY3VycmVudEl0ZW0ucHJldigpLm5vdCgiLnVpLXNvcnRhYmxlLWhlbHBlciIpWzBdJiZ0aGlzLmRvbVBvc2l0aW9uLnBhcmVudD09PXRoaXMuY3VycmVudEl0ZW0ucGFyZW50KClbMF18fGV8fHMucHVzaChmdW5jdGlvbih0KXt0aGlzLl90cmlnZ2VyKCJ1cGRhdGUiLHQsdGhpcy5fdWlIYXNoKCkpfSksdGhpcyE9PXRoaXMuY3VycmVudENvbnRhaW5lciYmKGV8fChzLnB1c2goZnVuY3Rpb24odCl7dGhpcy5fdHJpZ2dlcigicmVtb3ZlIix0LHRoaXMuX3VpSGFzaCgpKX0pLHMucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5fdHJpZ2dlcigicmVjZWl2ZSIsZSx0aGlzLl91aUhhc2godGhpcykpfX0uY2FsbCh0aGlzLHRoaXMuY3VycmVudENvbnRhaW5lcikpLHMucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5fdHJpZ2dlcigidXBkYXRlIixlLHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jdXJyZW50Q29udGFpbmVyKSkpKSxpPXRoaXMuY29udGFpbmVycy5sZW5ndGgtMTtpPj0wO2ktLSllfHxzLnB1c2goZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3QuX3RyaWdnZXIoImRlYWN0aXZhdGUiLGUsdGhpcy5fdWlIYXNoKHRoaXMpKX19LmNhbGwodGhpcyx0aGlzLmNvbnRhaW5lcnNbaV0pKSx0aGlzLmNvbnRhaW5lcnNbaV0uY29udGFpbmVyQ2FjaGUub3ZlciYmKHMucHVzaChmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7dC5fdHJpZ2dlcigib3V0IixlLHRoaXMuX3VpSGFzaCh0aGlzKSl9fS5jYWxsKHRoaXMsdGhpcy5jb250YWluZXJzW2ldKSksdGhpcy5jb250YWluZXJzW2ldLmNvbnRhaW5lckNhY2hlLm92ZXI9MCk7aWYodGhpcy5zdG9yZWRDdXJzb3ImJih0aGlzLmRvY3VtZW50LmZpbmQoImJvZHkiKS5jc3MoImN1cnNvciIsdGhpcy5zdG9yZWRDdXJzb3IpLHRoaXMuc3RvcmVkU3R5bGVzaGVldC5yZW1vdmUoKSksdGhpcy5fc3RvcmVkT3BhY2l0eSYmdGhpcy5oZWxwZXIuY3NzKCJvcGFjaXR5Iix0aGlzLl9zdG9yZWRPcGFjaXR5KSx0aGlzLl9zdG9yZWRaSW5kZXgmJnRoaXMuaGVscGVyLmNzcygiekluZGV4IiwiYXV0byI9PT10aGlzLl9zdG9yZWRaSW5kZXg/IiI6dGhpcy5fc3RvcmVkWkluZGV4KSx0aGlzLmRyYWdnaW5nPSExLHRoaXMuY2FuY2VsSGVscGVyUmVtb3ZhbCl7aWYoIWUpe2Zvcih0aGlzLl90cmlnZ2VyKCJiZWZvcmVTdG9wIix0LHRoaXMuX3VpSGFzaCgpKSxpPTA7cy5sZW5ndGg+aTtpKyspc1tpXS5jYWxsKHRoaXMsdCk7dGhpcy5fdHJpZ2dlcigic3RvcCIsdCx0aGlzLl91aUhhc2goKSl9cmV0dXJuIHRoaXMuZnJvbU91dHNpZGU9ITEsITF9aWYoZXx8dGhpcy5fdHJpZ2dlcigiYmVmb3JlU3RvcCIsdCx0aGlzLl91aUhhc2goKSksdGhpcy5wbGFjZWhvbGRlclswXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMucGxhY2Vob2xkZXJbMF0pLHRoaXMuaGVscGVyWzBdIT09dGhpcy5jdXJyZW50SXRlbVswXSYmdGhpcy5oZWxwZXIucmVtb3ZlKCksdGhpcy5oZWxwZXI9bnVsbCwhZSl7Zm9yKGk9MDtzLmxlbmd0aD5pO2krKylzW2ldLmNhbGwodGhpcyx0KTt0aGlzLl90cmlnZ2VyKCJzdG9wIix0LHRoaXMuX3VpSGFzaCgpKX1yZXR1cm4gdGhpcy5mcm9tT3V0c2lkZT0hMSwhMH0sX3RyaWdnZXI6ZnVuY3Rpb24oKXt0LldpZGdldC5wcm90b3R5cGUuX3RyaWdnZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpPT09ITEmJnRoaXMuY2FuY2VsKCl9LF91aUhhc2g6ZnVuY3Rpb24oZSl7dmFyIGk9ZXx8dGhpcztyZXR1cm57aGVscGVyOmkuaGVscGVyLHBsYWNlaG9sZGVyOmkucGxhY2Vob2xkZXJ8fHQoW10pLHBvc2l0aW9uOmkucG9zaXRpb24sb3JpZ2luYWxQb3NpdGlvbjppLm9yaWdpbmFsUG9zaXRpb24sb2Zmc2V0OmkucG9zaXRpb25BYnMsaXRlbTppLmN1cnJlbnRJdGVtLHNlbmRlcjplP2UuZWxlbWVudDpudWxsfX19KX0oalF1ZXJ5KSxmdW5jdGlvbih0LGUpe3ZhciBpPSJ1aS1lZmZlY3RzLSI7dC5lZmZlY3RzPXtlZmZlY3Q6e319LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gaSh0LGUsaSl7dmFyIHM9dVtlLnR5cGVdfHx7fTtyZXR1cm4gbnVsbD09dD9pfHwhZS5kZWY/bnVsbDplLmRlZjoodD1zLmZsb29yP35+dDpwYXJzZUZsb2F0KHQpLGlzTmFOKHQpP2UuZGVmOnMubW9kPyh0K3MubW9kKSVzLm1vZDowPnQ/MDp0PnMubWF4P3MubWF4OnQpfWZ1bmN0aW9uIHMoaSl7dmFyIHM9bCgpLG49cy5fcmdiYT1bXTtyZXR1cm4gaT1pLnRvTG93ZXJDYXNlKCksZihoLGZ1bmN0aW9uKHQsbyl7dmFyIGEscj1vLnJlLmV4ZWMoaSksaD1yJiZvLnBhcnNlKHIpLGw9by5zcGFjZXx8InJnYmEiO3JldHVybiBoPyhhPXNbbF0oaCksc1tjW2xdLmNhY2hlXT1hW2NbbF0uY2FjaGVdLG49cy5fcmdiYT1hLl9yZ2JhLCExKTplfSksbi5sZW5ndGg/KCIwLDAsMCwwIj09PW4uam9pbigpJiZ0LmV4dGVuZChuLG8udHJhbnNwYXJlbnQpLHMpOm9baV19ZnVuY3Rpb24gbih0LGUsaSl7cmV0dXJuIGk9KGkrMSklMSwxPjYqaT90KzYqKGUtdCkqaToxPjIqaT9lOjI+MyppP3QrNiooZS10KSooMi8zLWkpOnR9dmFyIG8sYT0iYmFja2dyb3VuZENvbG9yIGJvcmRlckJvdHRvbUNvbG9yIGJvcmRlckxlZnRDb2xvciBib3JkZXJSaWdodENvbG9yIGJvcmRlclRvcENvbG9yIGNvbG9yIGNvbHVtblJ1bGVDb2xvciBvdXRsaW5lQ29sb3IgdGV4dERlY29yYXRpb25Db2xvciB0ZXh0RW1waGFzaXNDb2xvciIscj0vXihbXC0rXSk9XHMqKFxkK1wuP1xkKikvLGg9W3tyZTovcmdiYT9cKFxzKihcZHsxLDN9KVxzKixccyooXGR7MSwzfSlccyosXHMqKFxkezEsM30pXHMqKD86LFxzKihcZD8oPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblt0WzFdLHRbMl0sdFszXSx0WzRdXX19LHtyZTovcmdiYT9cKFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqLFxzKihcZCsoPzpcLlxkKyk/KVwlXHMqKD86LFxzKihcZD8oPzpcLlxkKyk/KVxzKik/XCkvLHBhcnNlOmZ1bmN0aW9uKHQpe3JldHVyblsyLjU1KnRbMV0sMi41NSp0WzJdLDIuNTUqdFszXSx0WzRdXX19LHtyZTovIyhbYS1mMC05XXsyfSkoW2EtZjAtOV17Mn0pKFthLWYwLTldezJ9KS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3BhcnNlSW50KHRbMV0sMTYpLHBhcnNlSW50KHRbMl0sMTYpLHBhcnNlSW50KHRbM10sMTYpXX19LHtyZTovIyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8scGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3BhcnNlSW50KHRbMV0rdFsxXSwxNikscGFyc2VJbnQodFsyXSt0WzJdLDE2KSxwYXJzZUludCh0WzNdK3RbM10sMTYpXX19LHtyZTovaHNsYT9cKFxzKihcZCsoPzpcLlxkKyk/KVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKixccyooXGQrKD86XC5cZCspPylcJVxzKig/OixccyooXGQ/KD86XC5cZCspPylccyopP1wpLyxzcGFjZToiaHNsYSIscGFyc2U6ZnVuY3Rpb24odCl7cmV0dXJuW3RbMV0sdFsyXS8xMDAsdFszXS8xMDAsdFs0XV19fV0sbD10LkNvbG9yPWZ1bmN0aW9uKGUsaSxzLG4pe3JldHVybiBuZXcgdC5Db2xvci5mbi5wYXJzZShlLGkscyxuKX0sYz17cmdiYTp7cHJvcHM6e3JlZDp7aWR4OjAsdHlwZToiYnl0ZSJ9LGdyZWVuOntpZHg6MSx0eXBlOiJieXRlIn0sYmx1ZTp7aWR4OjIsdHlwZToiYnl0ZSJ9fX0saHNsYTp7cHJvcHM6e2h1ZTp7aWR4OjAsdHlwZToiZGVncmVlcyJ9LHNhdHVyYXRpb246e2lkeDoxLHR5cGU6InBlcmNlbnQifSxsaWdodG5lc3M6e2lkeDoyLHR5cGU6InBlcmNlbnQifX19fSx1PXsiYnl0ZSI6e2Zsb29yOiEwLG1heDoyNTV9LHBlcmNlbnQ6e21heDoxfSxkZWdyZWVzOnttb2Q6MzYwLGZsb29yOiEwfX0sZD1sLnN1cHBvcnQ9e30scD10KCI8cD4iKVswXSxmPXQuZWFjaDtwLnN0eWxlLmNzc1RleHQ9ImJhY2tncm91bmQtY29sb3I6cmdiYSgxLDEsMSwuNSkiLGQucmdiYT1wLnN0eWxlLmJhY2tncm91bmRDb2xvci5pbmRleE9mKCJyZ2JhIik+LTEsZihjLGZ1bmN0aW9uKHQsZSl7ZS5jYWNoZT0iXyIrdCxlLnByb3BzLmFscGhhPXtpZHg6Myx0eXBlOiJwZXJjZW50IixkZWY6MX19KSxsLmZuPXQuZXh0ZW5kKGwucHJvdG90eXBlLHtwYXJzZTpmdW5jdGlvbihuLGEscixoKXtpZihuPT09ZSlyZXR1cm4gdGhpcy5fcmdiYT1bbnVsbCxudWxsLG51bGwsbnVsbF0sdGhpczsobi5qcXVlcnl8fG4ubm9kZVR5cGUpJiYobj10KG4pLmNzcyhhKSxhPWUpO3ZhciB1PXRoaXMsZD10LnR5cGUobikscD10aGlzLl9yZ2JhPVtdO3JldHVybiBhIT09ZSYmKG49W24sYSxyLGhdLGQ9ImFycmF5IiksInN0cmluZyI9PT1kP3RoaXMucGFyc2UocyhuKXx8by5fZGVmYXVsdCk6ImFycmF5Ij09PWQ/KGYoYy5yZ2JhLnByb3BzLGZ1bmN0aW9uKHQsZSl7cFtlLmlkeF09aShuW2UuaWR4XSxlKX0pLHRoaXMpOiJvYmplY3QiPT09ZD8obiBpbnN0YW5jZW9mIGw/ZihjLGZ1bmN0aW9uKHQsZSl7bltlLmNhY2hlXSYmKHVbZS5jYWNoZV09bltlLmNhY2hlXS5zbGljZSgpKX0pOmYoYyxmdW5jdGlvbihlLHMpe3ZhciBvPXMuY2FjaGU7ZihzLnByb3BzLGZ1bmN0aW9uKHQsZSl7aWYoIXVbb10mJnMudG8pe2lmKCJhbHBoYSI9PT10fHxudWxsPT1uW3RdKXJldHVybjt1W29dPXMudG8odS5fcmdiYSl9dVtvXVtlLmlkeF09aShuW3RdLGUsITApfSksdVtvXSYmMD50LmluQXJyYXkobnVsbCx1W29dLnNsaWNlKDAsMykpJiYodVtvXVszXT0xLHMuZnJvbSYmKHUuX3JnYmE9cy5mcm9tKHVbb10pKSl9KSx0aGlzKTplfSxpczpmdW5jdGlvbih0KXt2YXIgaT1sKHQpLHM9ITAsbj10aGlzO3JldHVybiBmKGMsZnVuY3Rpb24odCxvKXt2YXIgYSxyPWlbby5jYWNoZV07cmV0dXJuIHImJihhPW5bby5jYWNoZV18fG8udG8mJm8udG8obi5fcmdiYSl8fFtdLGYoby5wcm9wcyxmdW5jdGlvbih0LGkpe3JldHVybiBudWxsIT1yW2kuaWR4XT9zPXJbaS5pZHhdPT09YVtpLmlkeF06ZX0pKSxzfSksc30sX3NwYWNlOmZ1bmN0aW9uKCl7dmFyIHQ9W10sZT10aGlzO3JldHVybiBmKGMsZnVuY3Rpb24oaSxzKXtlW3MuY2FjaGVdJiZ0LnB1c2goaSl9KSx0LnBvcCgpfSx0cmFuc2l0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIHM9bCh0KSxuPXMuX3NwYWNlKCksbz1jW25dLGE9MD09PXRoaXMuYWxwaGEoKT9sKCJ0cmFuc3BhcmVudCIpOnRoaXMscj1hW28uY2FjaGVdfHxvLnRvKGEuX3JnYmEpLGg9ci5zbGljZSgpO3JldHVybiBzPXNbby5jYWNoZV0sZihvLnByb3BzLGZ1bmN0aW9uKHQsbil7dmFyIG89bi5pZHgsYT1yW29dLGw9c1tvXSxjPXVbbi50eXBlXXx8e307bnVsbCE9PWwmJihudWxsPT09YT9oW29dPWw6KGMubW9kJiYobC1hPmMubW9kLzI/YSs9Yy5tb2Q6YS1sPmMubW9kLzImJihhLT1jLm1vZCkpLGhbb109aSgobC1hKSplK2EsbikpKX0pLHRoaXNbbl0oaCl9LGJsZW5kOmZ1bmN0aW9uKGUpe2lmKDE9PT10aGlzLl9yZ2JhWzNdKXJldHVybiB0aGlzO3ZhciBpPXRoaXMuX3JnYmEuc2xpY2UoKSxzPWkucG9wKCksbj1sKGUpLl9yZ2JhO3JldHVybiBsKHQubWFwKGksZnVuY3Rpb24odCxlKXtyZXR1cm4oMS1zKSpuW2VdK3MqdH0pKX0sdG9SZ2JhU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9InJnYmEoIixpPXQubWFwKHRoaXMuX3JnYmEsZnVuY3Rpb24odCxlKXtyZXR1cm4gbnVsbD09dD9lPjI/MTowOnR9KTtyZXR1cm4gMT09PWlbM10mJihpLnBvcCgpLGU9InJnYigiKSxlK2kuam9pbigpKyIpIn0sdG9Ic2xhU3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9ImhzbGEoIixpPXQubWFwKHRoaXMuaHNsYSgpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIG51bGw9PXQmJih0PWU+Mj8xOjApLGUmJjM+ZSYmKHQ9TWF0aC5yb3VuZCgxMDAqdCkrIiUiKSx0fSk7cmV0dXJuIDE9PT1pWzNdJiYoaS5wb3AoKSxlPSJoc2woIiksZStpLmpvaW4oKSsiKSJ9LHRvSGV4U3RyaW5nOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuX3JnYmEuc2xpY2UoKSxzPWkucG9wKCk7cmV0dXJuIGUmJmkucHVzaCh+figyNTUqcykpLCIjIit0Lm1hcChpLGZ1bmN0aW9uKHQpe3JldHVybiB0PSh0fHwwKS50b1N0cmluZygxNiksMT09PXQubGVuZ3RoPyIwIit0OnR9KS5qb2luKCIiKX0sdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuX3JnYmFbM10/InRyYW5zcGFyZW50Ijp0aGlzLnRvUmdiYVN0cmluZygpfX0pLGwuZm4ucGFyc2UucHJvdG90eXBlPWwuZm4sYy5oc2xhLnRvPWZ1bmN0aW9uKHQpe2lmKG51bGw9PXRbMF18fG51bGw9PXRbMV18fG51bGw9PXRbMl0pcmV0dXJuW251bGwsbnVsbCxudWxsLHRbM11dO3ZhciBlLGkscz10WzBdLzI1NSxuPXRbMV0vMjU1LG89dFsyXS8yNTUsYT10WzNdLHI9TWF0aC5tYXgocyxuLG8pLGg9TWF0aC5taW4ocyxuLG8pLGw9ci1oLGM9citoLHU9LjUqYztyZXR1cm4gZT1oPT09cj8wOnM9PT1yPzYwKihuLW8pL2wrMzYwOm49PT1yPzYwKihvLXMpL2wrMTIwOjYwKihzLW4pL2wrMjQwLGk9MD09PWw/MDouNT49dT9sL2M6bC8oMi1jKSxbTWF0aC5yb3VuZChlKSUzNjAsaSx1LG51bGw9PWE/MTphXX0sYy5oc2xhLmZyb209ZnVuY3Rpb24odCl7aWYobnVsbD09dFswXXx8bnVsbD09dFsxXXx8bnVsbD09dFsyXSlyZXR1cm5bbnVsbCxudWxsLG51bGwsdFszXV07dmFyIGU9dFswXS8zNjAsaT10WzFdLHM9dFsyXSxvPXRbM10sYT0uNT49cz9zKigxK2kpOnMraS1zKmkscj0yKnMtYTtyZXR1cm5bTWF0aC5yb3VuZCgyNTUqbihyLGEsZSsxLzMpKSxNYXRoLnJvdW5kKDI1NSpuKHIsYSxlKSksTWF0aC5yb3VuZCgyNTUqbihyLGEsZS0xLzMpKSxvXX0sZihjLGZ1bmN0aW9uKHMsbil7dmFyIG89bi5wcm9wcyxhPW4uY2FjaGUsaD1uLnRvLGM9bi5mcm9tO2wuZm5bc109ZnVuY3Rpb24ocyl7aWYoaCYmIXRoaXNbYV0mJih0aGlzW2FdPWgodGhpcy5fcmdiYSkpLHM9PT1lKXJldHVybiB0aGlzW2FdLnNsaWNlKCk7dmFyIG4scj10LnR5cGUocyksdT0iYXJyYXkiPT09cnx8Im9iamVjdCI9PT1yP3M6YXJndW1lbnRzLGQ9dGhpc1thXS5zbGljZSgpO3JldHVybiBmKG8sZnVuY3Rpb24odCxlKXt2YXIgcz11WyJvYmplY3QiPT09cj90OmUuaWR4XTtudWxsPT1zJiYocz1kW2UuaWR4XSksZFtlLmlkeF09aShzLGUpfSksYz8obj1sKGMoZCkpLG5bYV09ZCxuKTpsKGQpfSxmKG8sZnVuY3Rpb24oZSxpKXtsLmZuW2VdfHwobC5mbltlXT1mdW5jdGlvbihuKXt2YXIgbyxhPXQudHlwZShuKSxoPSJhbHBoYSI9PT1lP3RoaXMuX2hzbGE/ImhzbGEiOiJyZ2JhIjpzLGw9dGhpc1toXSgpLGM9bFtpLmlkeF07cmV0dXJuInVuZGVmaW5lZCI9PT1hP2M6KCJmdW5jdGlvbiI9PT1hJiYobj1uLmNhbGwodGhpcyxjKSxhPXQudHlwZShuKSksbnVsbD09biYmaS5lbXB0eT90aGlzOigic3RyaW5nIj09PWEmJihvPXIuZXhlYyhuKSxvJiYobj1jK3BhcnNlRmxvYXQob1syXSkqKCIrIj09PW9bMV0/MTotMSkpKSxsW2kuaWR4XT1uLHRoaXNbaF0obCkpKX0pfSl9KSxsLmhvb2s9ZnVuY3Rpb24oZSl7dmFyIGk9ZS5zcGxpdCgiICIpO2YoaSxmdW5jdGlvbihlLGkpe3QuY3NzSG9va3NbaV09e3NldDpmdW5jdGlvbihlLG4pe3ZhciBvLGEscj0iIjtpZigidHJhbnNwYXJlbnQiIT09biYmKCJzdHJpbmciIT09dC50eXBlKG4pfHwobz1zKG4pKSkpe2lmKG49bChvfHxuKSwhZC5yZ2JhJiYxIT09bi5fcmdiYVszXSl7Zm9yKGE9ImJhY2tncm91bmRDb2xvciI9PT1pP2UucGFyZW50Tm9kZTplOygiIj09PXJ8fCJ0cmFuc3BhcmVudCI9PT1yKSYmYSYmYS5zdHlsZTspdHJ5e3I9dC5jc3MoYSwiYmFja2dyb3VuZENvbG9yIiksYT1hLnBhcmVudE5vZGV9Y2F0Y2goaCl7fW49bi5ibGVuZChyJiYidHJhbnNwYXJlbnQiIT09cj9yOiJfZGVmYXVsdCIpfW49bi50b1JnYmFTdHJpbmcoKX10cnl7ZS5zdHlsZVtpXT1ufWNhdGNoKGgpe319fSx0LmZ4LnN0ZXBbaV09ZnVuY3Rpb24oZSl7ZS5jb2xvckluaXR8fChlLnN0YXJ0PWwoZS5lbGVtLGkpLGUuZW5kPWwoZS5lbmQpLGUuY29sb3JJbml0PSEwKSx0LmNzc0hvb2tzW2ldLnNldChlLmVsZW0sZS5zdGFydC50cmFuc2l0aW9uKGUuZW5kLGUucG9zKSl9fSl9LGwuaG9vayhhKSx0LmNzc0hvb2tzLmJvcmRlckNvbG9yPXtleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIGYoWyJUb3AiLCJSaWdodCIsIkJvdHRvbSIsIkxlZnQiXSxmdW5jdGlvbihpLHMpe2VbImJvcmRlciIrcysiQ29sb3IiXT10fSksZX19LG89dC5Db2xvci5uYW1lcz17YXF1YToiIzAwZmZmZiIsYmxhY2s6IiMwMDAwMDAiLGJsdWU6IiMwMDAwZmYiLGZ1Y2hzaWE6IiNmZjAwZmYiLGdyYXk6IiM4MDgwODAiLGdyZWVuOiIjMDA4MDAwIixsaW1lOiIjMDBmZjAwIixtYXJvb246IiM4MDAwMDAiLG5hdnk6IiMwMDAwODAiLG9saXZlOiIjODA4MDAwIixwdXJwbGU6IiM4MDAwODAiLHJlZDoiI2ZmMDAwMCIsc2lsdmVyOiIjYzBjMGMwIix0ZWFsOiIjMDA4MDgwIix3aGl0ZToiI2ZmZmZmZiIseWVsbG93OiIjZmZmZjAwIix0cmFuc3BhcmVudDpbbnVsbCxudWxsLG51bGwsMF0sX2RlZmF1bHQ6IiNmZmZmZmYifX0oalF1ZXJ5KSxmdW5jdGlvbigpe2Z1bmN0aW9uIGkoZSl7dmFyIGkscyxuPWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldz9lLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShlLG51bGwpOmUuY3VycmVudFN0eWxlLG89e307aWYobiYmbi5sZW5ndGgmJm5bMF0mJm5bblswXV0pZm9yKHM9bi5sZW5ndGg7cy0tOylpPW5bc10sInN0cmluZyI9PXR5cGVvZiBuW2ldJiYob1t0LmNhbWVsQ2FzZShpKV09bltpXSk7ZWxzZSBmb3IoaSBpbiBuKSJzdHJpbmciPT10eXBlb2YgbltpXSYmKG9baV09bltpXSk7cmV0dXJuIG99ZnVuY3Rpb24gcyhlLGkpe3ZhciBzLG4sYT17fTtmb3IocyBpbiBpKW49aVtzXSxlW3NdIT09biYmKG9bc118fCh0LmZ4LnN0ZXBbc118fCFpc05hTihwYXJzZUZsb2F0KG4pKSkmJihhW3NdPW4pKTtyZXR1cm4gYX12YXIgbj1bImFkZCIsInJlbW92ZSIsInRvZ2dsZSJdLG89e2JvcmRlcjoxLGJvcmRlckJvdHRvbToxLGJvcmRlckNvbG9yOjEsYm9yZGVyTGVmdDoxLGJvcmRlclJpZ2h0OjEsYm9yZGVyVG9wOjEsYm9yZGVyV2lkdGg6MSxtYXJnaW46MSxwYWRkaW5nOjF9O3QuZWFjaChbImJvcmRlckxlZnRTdHlsZSIsImJvcmRlclJpZ2h0U3R5bGUiLCJib3JkZXJCb3R0b21TdHlsZSIsImJvcmRlclRvcFN0eWxlIl0sZnVuY3Rpb24oZSxpKXt0LmZ4LnN0ZXBbaV09ZnVuY3Rpb24odCl7KCJub25lIiE9PXQuZW5kJiYhdC5zZXRBdHRyfHwxPT09dC5wb3MmJiF0LnNldEF0dHIpJiYoalF1ZXJ5LnN0eWxlKHQuZWxlbSxpLHQuZW5kKSx0LnNldEF0dHI9ITApfX0pLHQuZm4uYWRkQmFja3x8KHQuZm4uYWRkQmFjaz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5hZGQobnVsbD09dD90aGlzLnByZXZPYmplY3Q6dGhpcy5wcmV2T2JqZWN0LmZpbHRlcih0KSl9KSx0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzPWZ1bmN0aW9uKGUsbyxhLHIpe3ZhciBoPXQuc3BlZWQobyxhLHIpO3JldHVybiB0aGlzLnF1ZXVlKGZ1bmN0aW9uKCl7dmFyIG8sYT10KHRoaXMpLHI9YS5hdHRyKCJjbGFzcyIpfHwiIixsPWguY2hpbGRyZW4/YS5maW5kKCIqIikuYWRkQmFjaygpOmE7bD1sLm1hcChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJue2VsOmUsc3RhcnQ6aSh0aGlzKX19KSxvPWZ1bmN0aW9uKCl7dC5lYWNoKG4sZnVuY3Rpb24odCxpKXtlW2ldJiZhW2krIkNsYXNzIl0oZVtpXSl9KX0sbygpLGw9bC5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbmQ9aSh0aGlzLmVsWzBdKSx0aGlzLmRpZmY9cyh0aGlzLnN0YXJ0LHRoaXMuZW5kKSx0aGlzfSksYS5hdHRyKCJjbGFzcyIsciksbD1sLm1hcChmdW5jdGlvbigpe3ZhciBlPXRoaXMsaT10LkRlZmVycmVkKCkscz10LmV4dGVuZCh7fSxoLHtxdWV1ZTohMSxjb21wbGV0ZTpmdW5jdGlvbigpe2kucmVzb2x2ZShlKX19KTtyZXR1cm4gdGhpcy5lbC5hbmltYXRlKHRoaXMuZGlmZixzKSxpLnByb21pc2UoKX0pLHQud2hlbi5hcHBseSh0LGwuZ2V0KCkpLmRvbmUoZnVuY3Rpb24oKXtvKCksdC5lYWNoKGFyZ3VtZW50cyxmdW5jdGlvbigpe3ZhciBlPXRoaXMuZWw7dC5lYWNoKHRoaXMuZGlmZixmdW5jdGlvbih0KXtlLmNzcyh0LCIiKX0pfSksaC5jb21wbGV0ZS5jYWxsKGFbMF0pfSl9KX0sdC5mbi5leHRlbmQoe2FkZENsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpLHMsbixvKXtyZXR1cm4gcz90LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOml9LHMsbixvKTplLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19KHQuZm4uYWRkQ2xhc3MpLHJlbW92ZUNsYXNzOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbihpLHMsbixvKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD4xP3QuZWZmZWN0cy5hbmltYXRlQ2xhc3MuY2FsbCh0aGlzLHtyZW1vdmU6aX0scyxuLG8pOmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0odC5mbi5yZW1vdmVDbGFzcyksdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKHMsbixvLGEscil7cmV0dXJuImJvb2xlYW4iPT10eXBlb2Ygbnx8bj09PWU/bz90LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyxuP3thZGQ6c306e3JlbW92ZTpzfSxvLGEscik6aS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dC5lZmZlY3RzLmFuaW1hdGVDbGFzcy5jYWxsKHRoaXMse3RvZ2dsZTpzfSxuLG8sYSl9fSh0LmZuLnRvZ2dsZUNsYXNzKSxzd2l0Y2hDbGFzczpmdW5jdGlvbihlLGkscyxuLG8pe3JldHVybiB0LmVmZmVjdHMuYW5pbWF0ZUNsYXNzLmNhbGwodGhpcyx7YWRkOmkscmVtb3ZlOmV9LHMsbixvKX19KX0oKSxmdW5jdGlvbigpe2Z1bmN0aW9uIHMoZSxpLHMsbil7cmV0dXJuIHQuaXNQbGFpbk9iamVjdChlKSYmKGk9ZSxlPWUuZWZmZWN0KSxlPXtlZmZlY3Q6ZX0sbnVsbD09aSYmKGk9e30pLHQuaXNGdW5jdGlvbihpKSYmKG49aSxzPW51bGwsaT17fSksKCJudW1iZXIiPT10eXBlb2YgaXx8dC5meC5zcGVlZHNbaV0pJiYobj1zLHM9aSxpPXt9KSx0LmlzRnVuY3Rpb24ocykmJihuPXMscz1udWxsKSxpJiZ0LmV4dGVuZChlLGkpLHM9c3x8aS5kdXJhdGlvbixlLmR1cmF0aW9uPXQuZngub2ZmPzA6Im51bWJlciI9PXR5cGVvZiBzP3M6cyBpbiB0LmZ4LnNwZWVkcz90LmZ4LnNwZWVkc1tzXTp0LmZ4LnNwZWVkcy5fZGVmYXVsdCxlLmNvbXBsZXRlPW58fGkuY29tcGxldGUsZX1mdW5jdGlvbiBuKGUpe3JldHVybiFlfHwibnVtYmVyIj09dHlwZW9mIGV8fHQuZnguc3BlZWRzW2VdPyEwOiJzdHJpbmciIT10eXBlb2YgZXx8dC5lZmZlY3RzLmVmZmVjdFtlXT90LmlzRnVuY3Rpb24oZSk/ITA6Im9iamVjdCIhPXR5cGVvZiBlfHxlLmVmZmVjdD8hMTohMDohMH10LmV4dGVuZCh0LmVmZmVjdHMse3ZlcnNpb246IjEuMTAuMyIsc2F2ZTpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcz0wO2UubGVuZ3RoPnM7cysrKW51bGwhPT1lW3NdJiZ0LmRhdGEoaStlW3NdLHRbMF0uc3R5bGVbZVtzXV0pfSxyZXN0b3JlOmZ1bmN0aW9uKHQscyl7dmFyIG4sbztmb3Iobz0wO3MubGVuZ3RoPm87bysrKW51bGwhPT1zW29dJiYobj10LmRhdGEoaStzW29dKSxuPT09ZSYmKG49IiIpLHQuY3NzKHNbb10sbikpfSxzZXRNb2RlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuInRvZ2dsZSI9PT1lJiYoZT10LmlzKCI6aGlkZGVuIik/InNob3ciOiJoaWRlIiksZX0sZ2V0QmFzZWxpbmU6ZnVuY3Rpb24odCxlKXt2YXIgaSxzO3N3aXRjaCh0WzBdKXtjYXNlInRvcCI6aT0wO2JyZWFrO2Nhc2UibWlkZGxlIjppPS41O2JyZWFrO2Nhc2UiYm90dG9tIjppPTE7YnJlYWs7ZGVmYXVsdDppPXRbMF0vZS5oZWlnaHR9c3dpdGNoKHRbMV0pe2Nhc2UibGVmdCI6cz0wO2JyZWFrO2Nhc2UiY2VudGVyIjpzPS41O2JyZWFrO2Nhc2UicmlnaHQiOnM9MTticmVhaztkZWZhdWx0OnM9dFsxXS9lLndpZHRofXJldHVybnt4OnMseTppfX0sY3JlYXRlV3JhcHBlcjpmdW5jdGlvbihlKXtpZihlLnBhcmVudCgpLmlzKCIudWktZWZmZWN0cy13cmFwcGVyIikpcmV0dXJuIGUucGFyZW50KCk7dmFyIGk9e3dpZHRoOmUub3V0ZXJXaWR0aCghMCksaGVpZ2h0OmUub3V0ZXJIZWlnaHQoITApLCJmbG9hdCI6ZS5jc3MoImZsb2F0Iil9LHM9dCgiPGRpdj48L2Rpdj4iKS5hZGRDbGFzcygidWktZWZmZWN0cy13cmFwcGVyIikuY3NzKHtmb250U2l6ZToiMTAwJSIsYmFja2dyb3VuZDoidHJhbnNwYXJlbnQiLGJvcmRlcjoibm9uZSIsbWFyZ2luOjAscGFkZGluZzowfSksbj17d2lkdGg6ZS53aWR0aCgpLGhlaWdodDplLmhlaWdodCgpfSxvPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7dHJ5e28uaWR9Y2F0Y2goYSl7bz1kb2N1bWVudC5ib2R5fXJldHVybiBlLndyYXAocyksKGVbMF09PT1vfHx0LmNvbnRhaW5zKGVbMF0sbykpJiZ0KG8pLmZvY3VzKCkscz1lLnBhcmVudCgpLCJzdGF0aWMiPT09ZS5jc3MoInBvc2l0aW9uIik/KHMuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUifSksZS5jc3Moe3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9KSk6KHQuZXh0ZW5kKGkse3Bvc2l0aW9uOmUuY3NzKCJwb3NpdGlvbiIpLHpJbmRleDplLmNzcygiei1pbmRleCIpfSksdC5lYWNoKFsidG9wIiwibGVmdCIsImJvdHRvbSIsInJpZ2h0Il0sZnVuY3Rpb24odCxzKXtpW3NdPWUuY3NzKHMpLGlzTmFOKHBhcnNlSW50KGlbc10sMTApKSYmKGlbc109ImF1dG8iKX0pLGUuY3NzKHtwb3NpdGlvbjoicmVsYXRpdmUiLHRvcDowLGxlZnQ6MCxyaWdodDoiYXV0byIsYm90dG9tOiJhdXRvIn0pKSxlLmNzcyhuKSxzLmNzcyhpKS5zaG93KCl9LHJlbW92ZVdyYXBwZXI6ZnVuY3Rpb24oZSl7dmFyIGk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtyZXR1cm4gZS5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpJiYoZS5wYXJlbnQoKS5yZXBsYWNlV2l0aChlKSwoZVswXT09PWl8fHQuY29udGFpbnMoZVswXSxpKSkmJnQoaSkuZm9jdXMoKSksZX0sc2V0VHJhbnNpdGlvbjpmdW5jdGlvbihlLGkscyxuKXtyZXR1cm4gbj1ufHx7fSx0LmVhY2goaSxmdW5jdGlvbih0LGkpe3ZhciBvPWUuY3NzVW5pdChpKTtvWzBdPjAmJihuW2ldPW9bMF0qcytvWzFdKX0pLG59fSksdC5mbi5leHRlbmQoe2VmZmVjdDpmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7ZnVuY3Rpb24gcygpe3QuaXNGdW5jdGlvbihvKSYmby5jYWxsKG5bMF0pLHQuaXNGdW5jdGlvbihlKSYmZSgpfXZhciBuPXQodGhpcyksbz1pLmNvbXBsZXRlLHI9aS5tb2RlOyhuLmlzKCI6aGlkZGVuIik/ImhpZGUiPT09cjoic2hvdyI9PT1yKT8obltyXSgpLHMoKSk6YS5jYWxsKG5bMF0saSxzKX12YXIgaT1zLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxuPWkubW9kZSxvPWkucXVldWUsYT10LmVmZmVjdHMuZWZmZWN0W2kuZWZmZWN0XTtyZXR1cm4gdC5meC5vZmZ8fCFhP24/dGhpc1tuXShpLmR1cmF0aW9uLGkuY29tcGxldGUpOnRoaXMuZWFjaChmdW5jdGlvbigpe2kuY29tcGxldGUmJmkuY29tcGxldGUuY2FsbCh0aGlzKX0pOm89PT0hMT90aGlzLmVhY2goZSk6dGhpcy5xdWV1ZShvfHwiZngiLGUpfSxzaG93OmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihuKGUpKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaT1zLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaS5tb2RlPSJzaG93Iix0aGlzLmVmZmVjdC5jYWxsKHRoaXMsaSl9fSh0LmZuLnNob3cpLGhpZGU6ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKG4oZSkpcmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3ZhciBpPXMuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBpLm1vZGU9ImhpZGUiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxpKX19KHQuZm4uaGlkZSksdG9nZ2xlOmZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihuKGUpfHwiYm9vbGVhbiI9PXR5cGVvZiBlKXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgaT1zLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtyZXR1cm4gaS5tb2RlPSJ0b2dnbGUiLHRoaXMuZWZmZWN0LmNhbGwodGhpcyxpKX19KHQuZm4udG9nZ2xlKSxjc3NVbml0OmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMuY3NzKGUpLHM9W107cmV0dXJuIHQuZWFjaChbImVtIiwicHgiLCIlIiwicHQiXSxmdW5jdGlvbih0LGUpe2kuaW5kZXhPZihlKT4wJiYocz1bcGFyc2VGbG9hdChpKSxlXSl9KSxzfX0pfSgpLGZ1bmN0aW9uKCl7dmFyIGU9e307dC5lYWNoKFsiUXVhZCIsIkN1YmljIiwiUXVhcnQiLCJRdWludCIsIkV4cG8iXSxmdW5jdGlvbih0LGkpe2VbaV09ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucG93KGUsdCsyKX19KSx0LmV4dGVuZChlLHtTaW5lOmZ1bmN0aW9uKHQpe3JldHVybiAxLU1hdGguY29zKHQqTWF0aC5QSS8yKX0sQ2lyYzpmdW5jdGlvbih0KXtyZXR1cm4gMS1NYXRoLnNxcnQoMS10KnQpfSxFbGFzdGljOmZ1bmN0aW9uKHQpe3JldHVybiAwPT09dHx8MT09PXQ/dDotTWF0aC5wb3coMiw4Kih0LTEpKSpNYXRoLnNpbigoODAqKHQtMSktNy41KSpNYXRoLlBJLzE1KX0sQmFjazpmdW5jdGlvbih0KXtyZXR1cm4gdCp0KigzKnQtMil9LEJvdW5jZTpmdW5jdGlvbih0KXtmb3IodmFyIGUsaT00OygoZT1NYXRoLnBvdygyLC0taSkpLTEpLzExPnQ7KTtyZXR1cm4gMS9NYXRoLnBvdyg0LDMtaSktNy41NjI1Kk1hdGgucG93KCgzKmUtMikvMjItdCwyKX19KSx0LmVhY2goZSxmdW5jdGlvbihlLGkpe3QuZWFzaW5nWyJlYXNlSW4iK2VdPWksdC5lYXNpbmdbImVhc2VPdXQiK2VdPWZ1bmN0aW9uKHQpe3JldHVybiAxLWkoMS10KX0sdC5lYXNpbmdbImVhc2VJbk91dCIrZV09ZnVuY3Rpb24odCl7cmV0dXJuLjU+dD9pKDIqdCkvMjoxLWkoLTIqdCsyKS8yfX0pfSgpfShqUXVlcnkpLGZ1bmN0aW9uKHQpe3ZhciBlPTAsaT17fSxzPXt9O2kuaGVpZ2h0PWkucGFkZGluZ1RvcD1pLnBhZGRpbmdCb3R0b209aS5ib3JkZXJUb3BXaWR0aD1pLmJvcmRlckJvdHRvbVdpZHRoPSJoaWRlIixzLmhlaWdodD1zLnBhZGRpbmdUb3A9cy5wYWRkaW5nQm90dG9tPXMuYm9yZGVyVG9wV2lkdGg9cy5ib3JkZXJCb3R0b21XaWR0aD0ic2hvdyIsdC53aWRnZXQoInVpLmFjY29yZGlvbiIse3ZlcnNpb246IjEuMTAuMyIsb3B0aW9uczp7YWN0aXZlOjAsYW5pbWF0ZTp7fSxjb2xsYXBzaWJsZTohMSxldmVudDoiY2xpY2siLGhlYWRlcjoiPiBsaSA+IDpmaXJzdC1jaGlsZCw+IDpub3QobGkpOmV2ZW4iLGhlaWdodFN0eWxlOiJhdXRvIixpY29uczp7YWN0aXZlSGVhZGVyOiJ1aS1pY29uLXRyaWFuZ2xlLTEtcyIsaGVhZGVyOiJ1aS1pY29uLXRyaWFuZ2xlLTEtZSJ9LGFjdGl2YXRlOm51bGwsYmVmb3JlQWN0aXZhdGU6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9uczt0aGlzLnByZXZTaG93PXRoaXMucHJldkhpZGU9dCgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktYWNjb3JkaW9uIHVpLXdpZGdldCB1aS1oZWxwZXItcmVzZXQiKS5hdHRyKCJyb2xlIiwidGFibGlzdCIpLGUuY29sbGFwc2libGV8fGUuYWN0aXZlIT09ITEmJm51bGwhPWUuYWN0aXZlfHwoZS5hY3RpdmU9MCksdGhpcy5fcHJvY2Vzc1BhbmVscygpLDA+ZS5hY3RpdmUmJihlLmFjdGl2ZSs9dGhpcy5oZWFkZXJzLmxlbmd0aCksdGhpcy5fcmVmcmVzaCgpfSxfZ2V0Q3JlYXRlRXZlbnREYXRhOmZ1bmN0aW9uKCl7cmV0dXJue2hlYWRlcjp0aGlzLmFjdGl2ZSxwYW5lbDp0aGlzLmFjdGl2ZS5sZW5ndGg/dGhpcy5hY3RpdmUubmV4dCgpOnQoKSxjb250ZW50OnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLmFjdGl2ZS5uZXh0KCk6dCgpfX0sX2NyZWF0ZUljb25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmljb25zO2UmJih0KCI8c3Bhbj4iKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlci1pY29uIHVpLWljb24gIitlLmhlYWRlcikucHJlcGVuZFRvKHRoaXMuaGVhZGVycyksdGhpcy5hY3RpdmUuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhlLmhlYWRlcikuYWRkQ2xhc3MoZS5hY3RpdmVIZWFkZXIpLHRoaXMuaGVhZGVycy5hZGRDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikpCn0sX2Rlc3Ryb3lJY29uczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWljb25zIikuY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmUoKX0sX2Rlc3Ryb3k6ZnVuY3Rpb24oKXt2YXIgdDt0aGlzLmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWFjY29yZGlvbiB1aS13aWRnZXQgdWktaGVscGVyLXJlc2V0IikucmVtb3ZlQXR0cigicm9sZSIpLHRoaXMuaGVhZGVycy5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWFjdGl2ZSB1aS1zdGF0ZS1kaXNhYmxlZCB1aS1jb3JuZXItdG9wIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWNvbnRyb2xzIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5lYWNoKGZ1bmN0aW9uKCl7L151aS1hY2NvcmRpb24vLnRlc3QodGhpcy5pZCkmJnRoaXMucmVtb3ZlQXR0cmlidXRlKCJpZCIpfSksdGhpcy5fZGVzdHJveUljb25zKCksdD10aGlzLmhlYWRlcnMubmV4dCgpLmNzcygiZGlzcGxheSIsIiIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVDbGFzcygidWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20gdWktYWNjb3JkaW9uLWNvbnRlbnQgdWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIHVpLXN0YXRlLWRpc2FibGVkIikuZWFjaChmdW5jdGlvbigpey9edWktYWNjb3JkaW9uLy50ZXN0KHRoaXMuaWQpJiZ0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaWQiKX0pLCJjb250ZW50IiE9PXRoaXMub3B0aW9ucy5oZWlnaHRTdHlsZSYmdC5jc3MoImhlaWdodCIsIiIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuImFjdGl2ZSI9PT10Pyh0aGlzLl9hY3RpdmF0ZShlKSx1bmRlZmluZWQpOigiZXZlbnQiPT09dCYmKHRoaXMub3B0aW9ucy5ldmVudCYmdGhpcy5fb2ZmKHRoaXMuaGVhZGVycyx0aGlzLm9wdGlvbnMuZXZlbnQpLHRoaXMuX3NldHVwRXZlbnRzKGUpKSx0aGlzLl9zdXBlcih0LGUpLCJjb2xsYXBzaWJsZSIhPT10fHxlfHx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITF8fHRoaXMuX2FjdGl2YXRlKDApLCJpY29ucyI9PT10JiYodGhpcy5fZGVzdHJveUljb25zKCksZSYmdGhpcy5fY3JlYXRlSWNvbnMoKSksImRpc2FibGVkIj09PXQmJnRoaXMuaGVhZGVycy5hZGQodGhpcy5oZWFkZXJzLm5leHQoKSkudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIiwhIWUpLHVuZGVmaW5lZCl9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe2lmKCFlLmFsdEtleSYmIWUuY3RybEtleSl7dmFyIGk9dC51aS5rZXlDb2RlLHM9dGhpcy5oZWFkZXJzLmxlbmd0aCxuPXRoaXMuaGVhZGVycy5pbmRleChlLnRhcmdldCksbz0hMTtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIGkuUklHSFQ6Y2FzZSBpLkRPV046bz10aGlzLmhlYWRlcnNbKG4rMSklc107YnJlYWs7Y2FzZSBpLkxFRlQ6Y2FzZSBpLlVQOm89dGhpcy5oZWFkZXJzWyhuLTErcyklc107YnJlYWs7Y2FzZSBpLlNQQUNFOmNhc2UgaS5FTlRFUjp0aGlzLl9ldmVudEhhbmRsZXIoZSk7YnJlYWs7Y2FzZSBpLkhPTUU6bz10aGlzLmhlYWRlcnNbMF07YnJlYWs7Y2FzZSBpLkVORDpvPXRoaXMuaGVhZGVyc1tzLTFdfW8mJih0KGUudGFyZ2V0KS5hdHRyKCJ0YWJJbmRleCIsLTEpLHQobykuYXR0cigidGFiSW5kZXgiLDApLG8uZm9jdXMoKSxlLnByZXZlbnREZWZhdWx0KCkpfX0sX3BhbmVsS2V5RG93bjpmdW5jdGlvbihlKXtlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuVVAmJmUuY3RybEtleSYmdChlLmN1cnJlbnRUYXJnZXQpLnByZXYoKS5mb2N1cygpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zO3RoaXMuX3Byb2Nlc3NQYW5lbHMoKSxlLmFjdGl2ZT09PSExJiZlLmNvbGxhcHNpYmxlPT09ITB8fCF0aGlzLmhlYWRlcnMubGVuZ3RoPyhlLmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT10KCkpOmUuYWN0aXZlPT09ITE/dGhpcy5fYWN0aXZhdGUoMCk6dGhpcy5hY3RpdmUubGVuZ3RoJiYhdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMuaGVhZGVycy5sZW5ndGg9PT10aGlzLmhlYWRlcnMuZmluZCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoPyhlLmFjdGl2ZT0hMSx0aGlzLmFjdGl2ZT10KCkpOnRoaXMuX2FjdGl2YXRlKE1hdGgubWF4KDAsZS5hY3RpdmUtMSkpOmUuYWN0aXZlPXRoaXMuaGVhZGVycy5pbmRleCh0aGlzLmFjdGl2ZSksdGhpcy5fZGVzdHJveUljb25zKCksdGhpcy5fcmVmcmVzaCgpfSxfcHJvY2Vzc1BhbmVsczpmdW5jdGlvbigpe3RoaXMuaGVhZGVycz10aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaGVhZGVyKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWhlYWRlciB1aS1oZWxwZXItcmVzZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIiksdGhpcy5oZWFkZXJzLm5leHQoKS5hZGRDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQgdWktaGVscGVyLXJlc2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5maWx0ZXIoIjpub3QoLnVpLWFjY29yZGlvbi1jb250ZW50LWFjdGl2ZSkiKS5oaWRlKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGkscz10aGlzLm9wdGlvbnMsbj1zLmhlaWdodFN0eWxlLG89dGhpcy5lbGVtZW50LnBhcmVudCgpLGE9dGhpcy5hY2NvcmRpb25JZD0idWktYWNjb3JkaW9uLSIrKHRoaXMuZWxlbWVudC5hdHRyKCJpZCIpfHwrK2UpO3RoaXMuYWN0aXZlPXRoaXMuX2ZpbmRBY3RpdmUocy5hY3RpdmUpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIiksdGhpcy5hY3RpdmUubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKS5zaG93KCksdGhpcy5oZWFkZXJzLmF0dHIoInJvbGUiLCJ0YWIiKS5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPXQodGhpcykscz1pLmF0dHIoImlkIiksbj1pLm5leHQoKSxvPW4uYXR0cigiaWQiKTtzfHwocz1hKyItaGVhZGVyLSIrZSxpLmF0dHIoImlkIixzKSksb3x8KG89YSsiLXBhbmVsLSIrZSxuLmF0dHIoImlkIixvKSksaS5hdHRyKCJhcmlhLWNvbnRyb2xzIixvKSxuLmF0dHIoImFyaWEtbGFiZWxsZWRieSIscyl9KS5uZXh0KCkuYXR0cigicm9sZSIsInRhYnBhbmVsIiksdGhpcy5oZWFkZXJzLm5vdCh0aGlzLmFjdGl2ZSkuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJmYWxzZSIsdGFiSW5kZXg6LTF9KS5uZXh0KCkuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KS5oaWRlKCksdGhpcy5hY3RpdmUubGVuZ3RoP3RoaXMuYWN0aXZlLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pLm5leHQoKS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pOnRoaXMuaGVhZGVycy5lcSgwKS5hdHRyKCJ0YWJJbmRleCIsMCksdGhpcy5fY3JlYXRlSWNvbnMoKSx0aGlzLl9zZXR1cEV2ZW50cyhzLmV2ZW50KSwiZmlsbCI9PT1uPyhpPW8uaGVpZ2h0KCksdGhpcy5lbGVtZW50LnNpYmxpbmdzKCI6dmlzaWJsZSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLHM9ZS5jc3MoInBvc2l0aW9uIik7ImFic29sdXRlIiE9PXMmJiJmaXhlZCIhPT1zJiYoaS09ZS5vdXRlckhlaWdodCghMCkpfSksdGhpcy5oZWFkZXJzLmVhY2goZnVuY3Rpb24oKXtpLT10KHRoaXMpLm91dGVySGVpZ2h0KCEwKX0pLHRoaXMuaGVhZGVycy5uZXh0KCkuZWFjaChmdW5jdGlvbigpe3QodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsaS10KHRoaXMpLmlubmVySGVpZ2h0KCkrdCh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKCJvdmVyZmxvdyIsImF1dG8iKSk6ImF1dG8iPT09biYmKGk9MCx0aGlzLmhlYWRlcnMubmV4dCgpLmVhY2goZnVuY3Rpb24oKXtpPU1hdGgubWF4KGksdCh0aGlzKS5jc3MoImhlaWdodCIsIiIpLmhlaWdodCgpKX0pLmhlaWdodChpKSl9LF9hY3RpdmF0ZTpmdW5jdGlvbihlKXt2YXIgaT10aGlzLl9maW5kQWN0aXZlKGUpWzBdO2khPT10aGlzLmFjdGl2ZVswXSYmKGk9aXx8dGhpcy5hY3RpdmVbMF0sdGhpcy5fZXZlbnRIYW5kbGVyKHt0YXJnZXQ6aSxjdXJyZW50VGFyZ2V0OmkscHJldmVudERlZmF1bHQ6dC5ub29wfSkpfSxfZmluZEFjdGl2ZTpmdW5jdGlvbihlKXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGU/dGhpcy5oZWFkZXJzLmVxKGUpOnQoKX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKGUpe3ZhciBpPXtrZXlkb3duOiJfa2V5ZG93biJ9O2UmJnQuZWFjaChlLnNwbGl0KCIgIiksZnVuY3Rpb24odCxlKXtpW2VdPSJfZXZlbnRIYW5kbGVyIn0pLHRoaXMuX29mZih0aGlzLmhlYWRlcnMuYWRkKHRoaXMuaGVhZGVycy5uZXh0KCkpKSx0aGlzLl9vbih0aGlzLmhlYWRlcnMsaSksdGhpcy5fb24odGhpcy5oZWFkZXJzLm5leHQoKSx7a2V5ZG93bjoiX3BhbmVsS2V5RG93biJ9KSx0aGlzLl9ob3ZlcmFibGUodGhpcy5oZWFkZXJzKSx0aGlzLl9mb2N1c2FibGUodGhpcy5oZWFkZXJzKX0sX2V2ZW50SGFuZGxlcjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMscz10aGlzLmFjdGl2ZSxuPXQoZS5jdXJyZW50VGFyZ2V0KSxvPW5bMF09PT1zWzBdLGE9byYmaS5jb2xsYXBzaWJsZSxyPWE/dCgpOm4ubmV4dCgpLGg9cy5uZXh0KCksbD17b2xkSGVhZGVyOnMsb2xkUGFuZWw6aCxuZXdIZWFkZXI6YT90KCk6bixuZXdQYW5lbDpyfTtlLnByZXZlbnREZWZhdWx0KCksbyYmIWkuY29sbGFwc2libGV8fHRoaXMuX3RyaWdnZXIoImJlZm9yZUFjdGl2YXRlIixlLGwpPT09ITF8fChpLmFjdGl2ZT1hPyExOnRoaXMuaGVhZGVycy5pbmRleChuKSx0aGlzLmFjdGl2ZT1vP3QoKTpuLHRoaXMuX3RvZ2dsZShsKSxzLnJlbW92ZUNsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxpLmljb25zJiZzLmNoaWxkcmVuKCIudWktYWNjb3JkaW9uLWhlYWRlci1pY29uIikucmVtb3ZlQ2xhc3MoaS5pY29ucy5hY3RpdmVIZWFkZXIpLmFkZENsYXNzKGkuaWNvbnMuaGVhZGVyKSxvfHwobi5yZW1vdmVDbGFzcygidWktY29ybmVyLWFsbCIpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24taGVhZGVyLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUgdWktY29ybmVyLXRvcCIpLGkuaWNvbnMmJm4uY2hpbGRyZW4oIi51aS1hY2NvcmRpb24taGVhZGVyLWljb24iKS5yZW1vdmVDbGFzcyhpLmljb25zLmhlYWRlcikuYWRkQ2xhc3MoaS5pY29ucy5hY3RpdmVIZWFkZXIpLG4ubmV4dCgpLmFkZENsYXNzKCJ1aS1hY2NvcmRpb24tY29udGVudC1hY3RpdmUiKSkpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUpe3ZhciBpPWUubmV3UGFuZWwscz10aGlzLnByZXZTaG93Lmxlbmd0aD90aGlzLnByZXZTaG93OmUub2xkUGFuZWw7dGhpcy5wcmV2U2hvdy5hZGQodGhpcy5wcmV2SGlkZSkuc3RvcCghMCwhMCksdGhpcy5wcmV2U2hvdz1pLHRoaXMucHJldkhpZGU9cyx0aGlzLm9wdGlvbnMuYW5pbWF0ZT90aGlzLl9hbmltYXRlKGkscyxlKToocy5oaWRlKCksaS5zaG93KCksdGhpcy5fdG9nZ2xlQ29tcGxldGUoZSkpLHMuYXR0cih7ImFyaWEtZXhwYW5kZWQiOiJmYWxzZSIsImFyaWEtaGlkZGVuIjoidHJ1ZSJ9KSxzLnByZXYoKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwiZmFsc2UiKSxpLmxlbmd0aCYmcy5sZW5ndGg/cy5wcmV2KCkuYXR0cigidGFiSW5kZXgiLC0xKTppLmxlbmd0aCYmdGhpcy5oZWFkZXJzLmZpbHRlcihmdW5jdGlvbigpe3JldHVybiAwPT09dCh0aGlzKS5hdHRyKCJ0YWJJbmRleCIpfSkuYXR0cigidGFiSW5kZXgiLC0xKSxpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoidHJ1ZSIsImFyaWEtaGlkZGVuIjoiZmFsc2UifSkucHJldigpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYW5pbWF0ZTpmdW5jdGlvbih0LGUsbil7dmFyIG8sYSxyLGg9dGhpcyxsPTAsYz10Lmxlbmd0aCYmKCFlLmxlbmd0aHx8dC5pbmRleCgpPGUuaW5kZXgoKSksdT10aGlzLm9wdGlvbnMuYW5pbWF0ZXx8e30sZD1jJiZ1LmRvd258fHUscD1mdW5jdGlvbigpe2guX3RvZ2dsZUNvbXBsZXRlKG4pfTtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIGQmJihyPWQpLCJzdHJpbmciPT10eXBlb2YgZCYmKGE9ZCksYT1hfHxkLmVhc2luZ3x8dS5lYXNpbmcscj1yfHxkLmR1cmF0aW9ufHx1LmR1cmF0aW9uLGUubGVuZ3RoP3QubGVuZ3RoPyhvPXQuc2hvdygpLm91dGVySGVpZ2h0KCksZS5hbmltYXRlKGkse2R1cmF0aW9uOnIsZWFzaW5nOmEsc3RlcDpmdW5jdGlvbih0LGUpe2Uubm93PU1hdGgucm91bmQodCl9fSksdC5oaWRlKCkuYW5pbWF0ZShzLHtkdXJhdGlvbjpyLGVhc2luZzphLGNvbXBsZXRlOnAsc3RlcDpmdW5jdGlvbih0LGkpe2kubm93PU1hdGgucm91bmQodCksImhlaWdodCIhPT1pLnByb3A/bCs9aS5ub3c6ImNvbnRlbnQiIT09aC5vcHRpb25zLmhlaWdodFN0eWxlJiYoaS5ub3c9TWF0aC5yb3VuZChvLWUub3V0ZXJIZWlnaHQoKS1sKSxsPTApfX0pLHVuZGVmaW5lZCk6ZS5hbmltYXRlKGkscixhLHApOnQuYW5pbWF0ZShzLHIsYSxwKX0sX3RvZ2dsZUNvbXBsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXQub2xkUGFuZWw7ZS5yZW1vdmVDbGFzcygidWktYWNjb3JkaW9uLWNvbnRlbnQtYWN0aXZlIikucHJldigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItdG9wIikuYWRkQ2xhc3MoInVpLWNvcm5lci1hbGwiKSxlLmxlbmd0aCYmKGUucGFyZW50KClbMF0uY2xhc3NOYW1lPWUucGFyZW50KClbMF0uY2xhc3NOYW1lKSx0aGlzLl90cmlnZ2VyKCJhY3RpdmF0ZSIsbnVsbCx0KX19KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt2YXIgZT0wO3Qud2lkZ2V0KCJ1aS5hdXRvY29tcGxldGUiLHt2ZXJzaW9uOiIxLjEwLjMiLGRlZmF1bHRFbGVtZW50OiI8aW5wdXQ+IixvcHRpb25zOnthcHBlbmRUbzpudWxsLGF1dG9Gb2N1czohMSxkZWxheTozMDAsbWluTGVuZ3RoOjEscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246Im5vbmUifSxzb3VyY2U6bnVsbCxjaGFuZ2U6bnVsbCxjbG9zZTpudWxsLGZvY3VzOm51bGwsb3BlbjpudWxsLHJlc3BvbnNlOm51bGwsc2VhcmNoOm51bGwsc2VsZWN0Om51bGx9LHBlbmRpbmc6MCxfY3JlYXRlOmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG49dGhpcy5lbGVtZW50WzBdLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbz0idGV4dGFyZWEiPT09bixhPSJpbnB1dCI9PT1uO3RoaXMuaXNNdWx0aUxpbmU9bz8hMDphPyExOnRoaXMuZWxlbWVudC5wcm9wKCJpc0NvbnRlbnRFZGl0YWJsZSIpLHRoaXMudmFsdWVNZXRob2Q9dGhpcy5lbGVtZW50W298fGE/InZhbCI6InRleHQiXSx0aGlzLmlzTmV3TWVudT0hMCx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLHRoaXMuX29uKHRoaXMuZWxlbWVudCx7a2V5ZG93bjpmdW5jdGlvbihuKXtpZih0aGlzLmVsZW1lbnQucHJvcCgicmVhZE9ubHkiKSlyZXR1cm4gZT0hMCxzPSEwLGk9ITAsdW5kZWZpbmVkO2U9ITEscz0hMSxpPSExO3ZhciBvPXQudWkua2V5Q29kZTtzd2l0Y2gobi5rZXlDb2RlKXtjYXNlIG8uUEFHRV9VUDplPSEwLHRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIsbik7YnJlYWs7Y2FzZSBvLlBBR0VfRE9XTjplPSEwLHRoaXMuX21vdmUoIm5leHRQYWdlIixuKTticmVhaztjYXNlIG8uVVA6ZT0hMCx0aGlzLl9rZXlFdmVudCgicHJldmlvdXMiLG4pO2JyZWFrO2Nhc2Ugby5ET1dOOmU9ITAsdGhpcy5fa2V5RXZlbnQoIm5leHQiLG4pO2JyZWFrO2Nhc2Ugby5FTlRFUjpjYXNlIG8uTlVNUEFEX0VOVEVSOnRoaXMubWVudS5hY3RpdmUmJihlPSEwLG4ucHJldmVudERlZmF1bHQoKSx0aGlzLm1lbnUuc2VsZWN0KG4pKTticmVhaztjYXNlIG8uVEFCOnRoaXMubWVudS5hY3RpdmUmJnRoaXMubWVudS5zZWxlY3Qobik7YnJlYWs7Y2FzZSBvLkVTQ0FQRTp0aGlzLm1lbnUuZWxlbWVudC5pcygiOnZpc2libGUiKSYmKHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5jbG9zZShuKSxuLnByZXZlbnREZWZhdWx0KCkpO2JyZWFrO2RlZmF1bHQ6aT0hMCx0aGlzLl9zZWFyY2hUaW1lb3V0KG4pfX0sa2V5cHJlc3M6ZnVuY3Rpb24ocyl7aWYoZSlyZXR1cm4gZT0hMSwoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKSYmcy5wcmV2ZW50RGVmYXVsdCgpLHVuZGVmaW5lZDtpZighaSl7dmFyIG49dC51aS5rZXlDb2RlO3N3aXRjaChzLmtleUNvZGUpe2Nhc2Ugbi5QQUdFX1VQOnRoaXMuX21vdmUoInByZXZpb3VzUGFnZSIscyk7YnJlYWs7Y2FzZSBuLlBBR0VfRE9XTjp0aGlzLl9tb3ZlKCJuZXh0UGFnZSIscyk7YnJlYWs7Y2FzZSBuLlVQOnRoaXMuX2tleUV2ZW50KCJwcmV2aW91cyIscyk7YnJlYWs7Y2FzZSBuLkRPV046dGhpcy5fa2V5RXZlbnQoIm5leHQiLHMpfX19LGlucHV0OmZ1bmN0aW9uKHQpe3JldHVybiBzPyhzPSExLHQucHJldmVudERlZmF1bHQoKSx1bmRlZmluZWQpOih0aGlzLl9zZWFyY2hUaW1lb3V0KHQpLHVuZGVmaW5lZCl9LGZvY3VzOmZ1bmN0aW9uKCl7dGhpcy5zZWxlY3RlZEl0ZW09bnVsbCx0aGlzLnByZXZpb3VzPXRoaXMuX3ZhbHVlKCl9LGJsdXI6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2FuY2VsQmx1cj8oZGVsZXRlIHRoaXMuY2FuY2VsQmx1cix1bmRlZmluZWQpOihjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuY2xvc2UodCksdGhpcy5fY2hhbmdlKHQpLHVuZGVmaW5lZCl9fSksdGhpcy5faW5pdFNvdXJjZSgpLHRoaXMubWVudT10KCI8dWw+IikuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZSB1aS1mcm9udCIpLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLm1lbnUoe3JvbGU6bnVsbH0pLmhpZGUoKS5kYXRhKCJ1aS1tZW51IiksdGhpcy5fb24odGhpcy5tZW51LmVsZW1lbnQse21vdXNlZG93bjpmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksdGhpcy5jYW5jZWxCbHVyPSEwLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMuY2FuY2VsQmx1cn0pO3ZhciBpPXRoaXMubWVudS5lbGVtZW50WzBdO3QoZS50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKS5sZW5ndGh8fHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dmFyIGU9dGhpczt0aGlzLmRvY3VtZW50Lm9uZSgibW91c2Vkb3duIixmdW5jdGlvbihzKXtzLnRhcmdldD09PWUuZWxlbWVudFswXXx8cy50YXJnZXQ9PT1pfHx0LmNvbnRhaW5zKGkscy50YXJnZXQpfHxlLmNsb3NlKCl9KX0pfSxtZW51Zm9jdXM6ZnVuY3Rpb24oZSxpKXtpZih0aGlzLmlzTmV3TWVudSYmKHRoaXMuaXNOZXdNZW51PSExLGUub3JpZ2luYWxFdmVudCYmL15tb3VzZS8udGVzdChlLm9yaWdpbmFsRXZlbnQudHlwZSkpKXJldHVybiB0aGlzLm1lbnUuYmx1cigpLHRoaXMuZG9jdW1lbnQub25lKCJtb3VzZW1vdmUiLGZ1bmN0aW9uKCl7dChlLnRhcmdldCkudHJpZ2dlcihlLm9yaWdpbmFsRXZlbnQpfSksdW5kZWZpbmVkO3ZhciBzPWkuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpOyExIT09dGhpcy5fdHJpZ2dlcigiZm9jdXMiLGUse2l0ZW06c30pP2Uub3JpZ2luYWxFdmVudCYmL15rZXkvLnRlc3QoZS5vcmlnaW5hbEV2ZW50LnR5cGUpJiZ0aGlzLl92YWx1ZShzLnZhbHVlKTp0aGlzLmxpdmVSZWdpb24udGV4dChzLnZhbHVlKX0sbWVudXNlbGVjdDpmdW5jdGlvbih0LGUpe3ZhciBpPWUuaXRlbS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIpLHM9dGhpcy5wcmV2aW91czt0aGlzLmVsZW1lbnRbMF0hPT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQmJih0aGlzLmVsZW1lbnQuZm9jdXMoKSx0aGlzLnByZXZpb3VzPXMsdGhpcy5fZGVsYXkoZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXMsdGhpcy5zZWxlY3RlZEl0ZW09aX0pKSwhMSE9PXRoaXMuX3RyaWdnZXIoInNlbGVjdCIsdCx7aXRlbTppfSkmJnRoaXMuX3ZhbHVlKGkudmFsdWUpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHRoaXMuY2xvc2UodCksdGhpcy5zZWxlY3RlZEl0ZW09aX19KSx0aGlzLmxpdmVSZWdpb249dCgiPHNwYW4+Iix7cm9sZToic3RhdHVzIiwiYXJpYS1saXZlIjoicG9saXRlIn0pLmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKS5pbnNlcnRCZWZvcmUodGhpcy5lbGVtZW50KSx0aGlzLl9vbih0aGlzLndpbmRvdyx7YmVmb3JldW5sb2FkOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImF1dG9jb21wbGV0ZSIpfX0pfSxfZGVzdHJveTpmdW5jdGlvbigpe2NsZWFyVGltZW91dCh0aGlzLnNlYXJjaGluZyksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1hdXRvY29tcGxldGUtaW5wdXQiKS5yZW1vdmVBdHRyKCJhdXRvY29tcGxldGUiKSx0aGlzLm1lbnUuZWxlbWVudC5yZW1vdmUoKSx0aGlzLmxpdmVSZWdpb24ucmVtb3ZlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXt0aGlzLl9zdXBlcih0LGUpLCJzb3VyY2UiPT09dCYmdGhpcy5faW5pdFNvdXJjZSgpLCJhcHBlbmRUbyI9PT10JiZ0aGlzLm1lbnUuZWxlbWVudC5hcHBlbmRUbyh0aGlzLl9hcHBlbmRUbygpKSwiZGlzYWJsZWQiPT09dCYmZSYmdGhpcy54aHImJnRoaXMueGhyLmFib3J0KCl9LF9hcHBlbmRUbzpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucy5hcHBlbmRUbztyZXR1cm4gZSYmKGU9ZS5qcXVlcnl8fGUubm9kZVR5cGU/dChlKTp0aGlzLmRvY3VtZW50LmZpbmQoZSkuZXEoMCkpLGV8fChlPXRoaXMuZWxlbWVudC5jbG9zZXN0KCIudWktZnJvbnQiKSksZS5sZW5ndGh8fChlPXRoaXMuZG9jdW1lbnRbMF0uYm9keSksZX0sX2luaXRTb3VyY2U6ZnVuY3Rpb24oKXt2YXIgZSxpLHM9dGhpczt0LmlzQXJyYXkodGhpcy5vcHRpb25zLnNvdXJjZSk/KGU9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihpLHMpe3ModC51aS5hdXRvY29tcGxldGUuZmlsdGVyKGUsaS50ZXJtKSl9KToic3RyaW5nIj09dHlwZW9mIHRoaXMub3B0aW9ucy5zb3VyY2U/KGk9dGhpcy5vcHRpb25zLnNvdXJjZSx0aGlzLnNvdXJjZT1mdW5jdGlvbihlLG4pe3MueGhyJiZzLnhoci5hYm9ydCgpLHMueGhyPXQuYWpheCh7dXJsOmksZGF0YTplLGRhdGFUeXBlOiJqc29uIixzdWNjZXNzOmZ1bmN0aW9uKHQpe24odCl9LGVycm9yOmZ1bmN0aW9uKCl7bihbXSl9fSl9KTp0aGlzLnNvdXJjZT10aGlzLm9wdGlvbnMuc291cmNlfSxfc2VhcmNoVGltZW91dDpmdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodGhpcy5zZWFyY2hpbmcpLHRoaXMuc2VhcmNoaW5nPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy50ZXJtIT09dGhpcy5fdmFsdWUoKSYmKHRoaXMuc2VsZWN0ZWRJdGVtPW51bGwsdGhpcy5zZWFyY2gobnVsbCx0KSl9LHRoaXMub3B0aW9ucy5kZWxheSl9LHNlYXJjaDpmdW5jdGlvbih0LGUpe3JldHVybiB0PW51bGwhPXQ/dDp0aGlzLl92YWx1ZSgpLHRoaXMudGVybT10aGlzLl92YWx1ZSgpLHQubGVuZ3RoPHRoaXMub3B0aW9ucy5taW5MZW5ndGg/dGhpcy5jbG9zZShlKTp0aGlzLl90cmlnZ2VyKCJzZWFyY2giLGUpIT09ITE/dGhpcy5fc2VhcmNoKHQpOnVuZGVmaW5lZH0sX3NlYXJjaDpmdW5jdGlvbih0KXt0aGlzLnBlbmRpbmcrKyx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIiksdGhpcy5jYW5jZWxTZWFyY2g9ITEsdGhpcy5zb3VyY2Uoe3Rlcm06dH0sdGhpcy5fcmVzcG9uc2UoKSl9LF9yZXNwb25zZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsaT0rK2U7cmV0dXJuIGZ1bmN0aW9uKHMpe2k9PT1lJiZ0Ll9fcmVzcG9uc2UocyksdC5wZW5kaW5nLS0sdC5wZW5kaW5nfHx0LmVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWF1dG9jb21wbGV0ZS1sb2FkaW5nIil9fSxfX3Jlc3BvbnNlOmZ1bmN0aW9uKHQpe3QmJih0PXRoaXMuX25vcm1hbGl6ZSh0KSksdGhpcy5fdHJpZ2dlcigicmVzcG9uc2UiLG51bGwse2NvbnRlbnQ6dH0pLCF0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnQmJnQubGVuZ3RoJiYhdGhpcy5jYW5jZWxTZWFyY2g/KHRoaXMuX3N1Z2dlc3QodCksdGhpcy5fdHJpZ2dlcigib3BlbiIpKTp0aGlzLl9jbG9zZSgpfSxjbG9zZTpmdW5jdGlvbih0KXt0aGlzLmNhbmNlbFNlYXJjaD0hMCx0aGlzLl9jbG9zZSh0KX0sX2Nsb3NlOmZ1bmN0aW9uKHQpe3RoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpJiYodGhpcy5tZW51LmVsZW1lbnQuaGlkZSgpLHRoaXMubWVudS5ibHVyKCksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5fdHJpZ2dlcigiY2xvc2UiLHQpKX0sX2NoYW5nZTpmdW5jdGlvbih0KXt0aGlzLnByZXZpb3VzIT09dGhpcy5fdmFsdWUoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LHtpdGVtOnRoaXMuc2VsZWN0ZWRJdGVtfSl9LF9ub3JtYWxpemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubGVuZ3RoJiZlWzBdLmxhYmVsJiZlWzBdLnZhbHVlP2U6dC5tYXAoZSxmdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGU/e2xhYmVsOmUsdmFsdWU6ZX06dC5leHRlbmQoe2xhYmVsOmUubGFiZWx8fGUudmFsdWUsdmFsdWU6ZS52YWx1ZXx8ZS5sYWJlbH0sZSl9KX0sX3N1Z2dlc3Q6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5tZW51LmVsZW1lbnQuZW1wdHkoKTt0aGlzLl9yZW5kZXJNZW51KGksZSksdGhpcy5pc05ld01lbnU9ITAsdGhpcy5tZW51LnJlZnJlc2goKSxpLnNob3coKSx0aGlzLl9yZXNpemVNZW51KCksaS5wb3NpdGlvbih0LmV4dGVuZCh7b2Y6dGhpcy5lbGVtZW50fSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSx0aGlzLm9wdGlvbnMuYXV0b0ZvY3VzJiZ0aGlzLm1lbnUubmV4dCgpfSxfcmVzaXplTWVudTpmdW5jdGlvbigpe3ZhciB0PXRoaXMubWVudS5lbGVtZW50O3Qub3V0ZXJXaWR0aChNYXRoLm1heCh0LndpZHRoKCIiKS5vdXRlcldpZHRoKCkrMSx0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpKSl9LF9yZW5kZXJNZW51OmZ1bmN0aW9uKGUsaSl7dmFyIHM9dGhpczt0LmVhY2goaSxmdW5jdGlvbih0LGkpe3MuX3JlbmRlckl0ZW1EYXRhKGUsaSl9KX0sX3JlbmRlckl0ZW1EYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3JlbmRlckl0ZW0odCxlKS5kYXRhKCJ1aS1hdXRvY29tcGxldGUtaXRlbSIsZSl9LF9yZW5kZXJJdGVtOmZ1bmN0aW9uKGUsaSl7cmV0dXJuIHQoIjxsaT4iKS5hcHBlbmQodCgiPGE+IikudGV4dChpLmxhYmVsKSkuYXBwZW5kVG8oZSl9LF9tb3ZlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpP3RoaXMubWVudS5pc0ZpcnN0SXRlbSgpJiYvXnByZXZpb3VzLy50ZXN0KHQpfHx0aGlzLm1lbnUuaXNMYXN0SXRlbSgpJiYvXm5leHQvLnRlc3QodCk/KHRoaXMuX3ZhbHVlKHRoaXMudGVybSksdGhpcy5tZW51LmJsdXIoKSx1bmRlZmluZWQpOih0aGlzLm1lbnVbdF0oZSksdW5kZWZpbmVkKToodGhpcy5zZWFyY2gobnVsbCxlKSx1bmRlZmluZWQpfSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZW51LmVsZW1lbnR9LF92YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZhbHVlTWV0aG9kLmFwcGx5KHRoaXMuZWxlbWVudCxhcmd1bWVudHMpfSxfa2V5RXZlbnQ6ZnVuY3Rpb24odCxlKXsoIXRoaXMuaXNNdWx0aUxpbmV8fHRoaXMubWVudS5lbGVtZW50LmlzKCI6dmlzaWJsZSIpKSYmKHRoaXMuX21vdmUodCxlKSxlLnByZXZlbnREZWZhdWx0KCkpfX0pLHQuZXh0ZW5kKHQudWkuYXV0b2NvbXBsZXRlLHtlc2NhcGVSZWdleDpmdW5jdGlvbih0KXtyZXR1cm4gdC5yZXBsYWNlKC9bXC1cW1xde30oKSorPy4sXFxcXiR8I1xzXS9nLCJcXCQmIil9LGZpbHRlcjpmdW5jdGlvbihlLGkpe3ZhciBzPVJlZ0V4cCh0LnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleChpKSwiaSIpO3JldHVybiB0LmdyZXAoZSxmdW5jdGlvbih0KXtyZXR1cm4gcy50ZXN0KHQubGFiZWx8fHQudmFsdWV8fHQpfSl9fSksdC53aWRnZXQoInVpLmF1dG9jb21wbGV0ZSIsdC51aS5hdXRvY29tcGxldGUse29wdGlvbnM6e21lc3NhZ2VzOntub1Jlc3VsdHM6Ik5vIHNlYXJjaCByZXN1bHRzLiIscmVzdWx0czpmdW5jdGlvbih0KXtyZXR1cm4gdCsodD4xPyIgcmVzdWx0cyBhcmUiOiIgcmVzdWx0IGlzIikrIiBhdmFpbGFibGUsIHVzZSB1cCBhbmQgZG93biBhcnJvdyBrZXlzIHRvIG5hdmlnYXRlLiJ9fX0sX19yZXNwb25zZTpmdW5jdGlvbih0KXt2YXIgZTt0aGlzLl9zdXBlckFwcGx5KGFyZ3VtZW50cyksdGhpcy5vcHRpb25zLmRpc2FibGVkfHx0aGlzLmNhbmNlbFNlYXJjaHx8KGU9dCYmdC5sZW5ndGg/dGhpcy5vcHRpb25zLm1lc3NhZ2VzLnJlc3VsdHModC5sZW5ndGgpOnRoaXMub3B0aW9ucy5tZXNzYWdlcy5ub1Jlc3VsdHMsdGhpcy5saXZlUmVnaW9uLnRleHQoZSkpfX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe3ZhciBlLGkscyxuLG89InVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIixhPSJ1aS1zdGF0ZS1ob3ZlciB1aS1zdGF0ZS1hY3RpdmUgIixyPSJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IixoPWZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZS5maW5kKCI6dWktYnV0dG9uIikuYnV0dG9uKCJyZWZyZXNoIil9LDEpfSxsPWZ1bmN0aW9uKGUpe3ZhciBpPWUubmFtZSxzPWUuZm9ybSxuPXQoW10pO3JldHVybiBpJiYoaT1pLnJlcGxhY2UoLycvZywiXFwnIiksbj1zP3QocykuZmluZCgiW25hbWU9JyIraSsiJ10iKTp0KCJbbmFtZT0nIitpKyInXSIsZS5vd25lckRvY3VtZW50KS5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4hdGhpcy5mb3JtfSkpLG59O3Qud2lkZ2V0KCJ1aS5idXR0b24iLHt2ZXJzaW9uOiIxLjEwLjMiLGRlZmF1bHRFbGVtZW50OiI8YnV0dG9uPiIsb3B0aW9uczp7ZGlzYWJsZWQ6bnVsbCx0ZXh0OiEwLGxhYmVsOm51bGwsaWNvbnM6e3ByaW1hcnk6bnVsbCxzZWNvbmRhcnk6bnVsbH19LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuY2xvc2VzdCgiZm9ybSIpLnVuYmluZCgicmVzZXQiK3RoaXMuZXZlbnROYW1lc3BhY2UpLmJpbmQoInJlc2V0Iit0aGlzLmV2ZW50TmFtZXNwYWNlLGgpLCJib29sZWFuIiE9dHlwZW9mIHRoaXMub3B0aW9ucy5kaXNhYmxlZD90aGlzLm9wdGlvbnMuZGlzYWJsZWQ9ISF0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiKTp0aGlzLmVsZW1lbnQucHJvcCgiZGlzYWJsZWQiLHRoaXMub3B0aW9ucy5kaXNhYmxlZCksdGhpcy5fZGV0ZXJtaW5lQnV0dG9uVHlwZSgpLHRoaXMuaGFzVGl0bGU9ISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cigidGl0bGUiKTt2YXIgYT10aGlzLHI9dGhpcy5vcHRpb25zLGM9ImNoZWNrYm94Ij09PXRoaXMudHlwZXx8InJhZGlvIj09PXRoaXMudHlwZSx1PWM/IiI6InVpLXN0YXRlLWFjdGl2ZSIsZD0idWktc3RhdGUtZm9jdXMiO251bGw9PT1yLmxhYmVsJiYoci5sYWJlbD0iaW5wdXQiPT09dGhpcy50eXBlP3RoaXMuYnV0dG9uRWxlbWVudC52YWwoKTp0aGlzLmJ1dHRvbkVsZW1lbnQuaHRtbCgpKSx0aGlzLl9ob3ZlcmFibGUodGhpcy5idXR0b25FbGVtZW50KSx0aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MobykuYXR0cigicm9sZSIsImJ1dHRvbiIpLmJpbmQoIm1vdXNlZW50ZXIiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtyLmRpc2FibGVkfHx0aGlzPT09ZSYmdCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KS5iaW5kKCJtb3VzZWxlYXZlIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7ci5kaXNhYmxlZHx8dCh0aGlzKS5yZW1vdmVDbGFzcyh1KX0pLmJpbmQoImNsaWNrIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKHQpe3IuZGlzYWJsZWQmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKSl9KSx0aGlzLmVsZW1lbnQuYmluZCgiZm9jdXMiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXthLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoZCl9KS5iaW5kKCJibHVyIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7YS5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKGQpfSksYyYmKHRoaXMuZWxlbWVudC5iaW5kKCJjaGFuZ2UiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtufHxhLnJlZnJlc2goKX0pLHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24odCl7ci5kaXNhYmxlZHx8KG49ITEsaT10LnBhZ2VYLHM9dC5wYWdlWSl9KS5iaW5kKCJtb3VzZXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKHQpe3IuZGlzYWJsZWR8fChpIT09dC5wYWdlWHx8cyE9PXQucGFnZVkpJiYobj0hMCl9KSksImNoZWNrYm94Ij09PXRoaXMudHlwZT90aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtyZXR1cm4gci5kaXNhYmxlZHx8bj8hMTp1bmRlZmluZWR9KToicmFkaW8iPT09dGhpcy50eXBlP3RoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJjbGljayIrdGhpcy5ldmVudE5hbWVzcGFjZSxmdW5jdGlvbigpe2lmKHIuZGlzYWJsZWR8fG4pcmV0dXJuITE7dCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksYS5idXR0b25FbGVtZW50LmF0dHIoImFyaWEtcHJlc3NlZCIsInRydWUiKTt2YXIgZT1hLmVsZW1lbnRbMF07bChlKS5ub3QoZSkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSk6KHRoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJtb3VzZWRvd24iK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXtyZXR1cm4gci5kaXNhYmxlZD8hMToodCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksZT10aGlzLGEuZG9jdW1lbnQub25lKCJtb3VzZXVwIixmdW5jdGlvbigpe2U9bnVsbH0pLHVuZGVmaW5lZCl9KS5iaW5kKCJtb3VzZXVwIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7cmV0dXJuIHIuZGlzYWJsZWQ/ITE6KHQodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHVuZGVmaW5lZCl9KS5iaW5kKCJrZXlkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKGUpe3JldHVybiByLmRpc2FibGVkPyExOigoZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlNQQUNFfHxlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuRU5URVIpJiZ0KHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKSx1bmRlZmluZWQpfSkuYmluZCgia2V5dXAiK3RoaXMuZXZlbnROYW1lc3BhY2UrIiBibHVyIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKCl7dCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIil9KSx0aGlzLmJ1dHRvbkVsZW1lbnQuaXMoImEiKSYmdGhpcy5idXR0b25FbGVtZW50LmtleXVwKGZ1bmN0aW9uKGUpe2Uua2V5Q29kZT09PXQudWkua2V5Q29kZS5TUEFDRSYmdCh0aGlzKS5jbGljaygpfSkpLHRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLHIuZGlzYWJsZWQpLHRoaXMuX3Jlc2V0QnV0dG9uKCl9LF9kZXRlcm1pbmVCdXR0b25UeXBlOmZ1bmN0aW9uKCl7dmFyIHQsZSxpO3RoaXMudHlwZT10aGlzLmVsZW1lbnQuaXMoIlt0eXBlPWNoZWNrYm94XSIpPyJjaGVja2JveCI6dGhpcy5lbGVtZW50LmlzKCJbdHlwZT1yYWRpb10iKT8icmFkaW8iOnRoaXMuZWxlbWVudC5pcygiaW5wdXQiKT8iaW5wdXQiOiJidXR0b24iLCJjaGVja2JveCI9PT10aGlzLnR5cGV8fCJyYWRpbyI9PT10aGlzLnR5cGU/KHQ9dGhpcy5lbGVtZW50LnBhcmVudHMoKS5sYXN0KCksZT0ibGFiZWxbZm9yPSciK3RoaXMuZWxlbWVudC5hdHRyKCJpZCIpKyInXSIsdGhpcy5idXR0b25FbGVtZW50PXQuZmluZChlKSx0aGlzLmJ1dHRvbkVsZW1lbnQubGVuZ3RofHwodD10Lmxlbmd0aD90LnNpYmxpbmdzKCk6dGhpcy5lbGVtZW50LnNpYmxpbmdzKCksdGhpcy5idXR0b25FbGVtZW50PXQuZmlsdGVyKGUpLHRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGh8fCh0aGlzLmJ1dHRvbkVsZW1lbnQ9dC5maW5kKGUpKSksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKSxpPXRoaXMuZWxlbWVudC5pcygiOmNoZWNrZWQiKSxpJiZ0aGlzLmJ1dHRvbkVsZW1lbnQuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuYnV0dG9uRWxlbWVudC5wcm9wKCJhcmlhLXByZXNzZWQiLGkpKTp0aGlzLmJ1dHRvbkVsZW1lbnQ9dGhpcy5lbGVtZW50fSx3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b25FbGVtZW50fSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIiksdGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKG8rIiAiK2ErIiAiK3IpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXByZXNzZWQiKS5odG1sKHRoaXMuYnV0dG9uRWxlbWVudC5maW5kKCIudWktYnV0dG9uLXRleHQiKS5odG1sKCkpLHRoaXMuaGFzVGl0bGV8fHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVBdHRyKCJ0aXRsZSIpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3N1cGVyKHQsZSksImRpc2FibGVkIj09PXQ/KGU/dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMCk6dGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMSksdW5kZWZpbmVkKToodGhpcy5fcmVzZXRCdXR0b24oKSx1bmRlZmluZWQpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5lbGVtZW50LmlzKCJpbnB1dCwgYnV0dG9uIik/dGhpcy5lbGVtZW50LmlzKCI6ZGlzYWJsZWQiKTp0aGlzLmVsZW1lbnQuaGFzQ2xhc3MoInVpLWJ1dHRvbi1kaXNhYmxlZCIpO2UhPT10aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLGUpLCJyYWRpbyI9PT10aGlzLnR5cGU/bCh0aGlzLmVsZW1lbnRbMF0pLmVhY2goZnVuY3Rpb24oKXt0KHRoaXMpLmlzKCI6Y2hlY2tlZCIpP3QodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwidHJ1ZSIpOnQodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pOiJjaGVja2JveCI9PT10aGlzLnR5cGUmJih0aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIik/dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpKX0sX3Jlc2V0QnV0dG9uOmZ1bmN0aW9uKCl7aWYoImlucHV0Ij09PXRoaXMudHlwZSlyZXR1cm4gdGhpcy5vcHRpb25zLmxhYmVsJiZ0aGlzLmVsZW1lbnQudmFsKHRoaXMub3B0aW9ucy5sYWJlbCksdW5kZWZpbmVkO3ZhciBlPXRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcyhyKSxpPXQoIjxzcGFuPjwvc3Bhbj4iLHRoaXMuZG9jdW1lbnRbMF0pLmFkZENsYXNzKCJ1aS1idXR0b24tdGV4dCIpLmh0bWwodGhpcy5vcHRpb25zLmxhYmVsKS5hcHBlbmRUbyhlLmVtcHR5KCkpLnRleHQoKSxzPXRoaXMub3B0aW9ucy5pY29ucyxuPXMucHJpbWFyeSYmcy5zZWNvbmRhcnksbz1bXTtzLnByaW1hcnl8fHMuc2Vjb25kYXJ5Pyh0aGlzLm9wdGlvbnMudGV4dCYmby5wdXNoKCJ1aS1idXR0b24tdGV4dC1pY29uIisobj8icyI6cy5wcmltYXJ5PyItcHJpbWFyeSI6Ii1zZWNvbmRhcnkiKSkscy5wcmltYXJ5JiZlLnByZXBlbmQoIjxzcGFuIGNsYXNzPSd1aS1idXR0b24taWNvbi1wcmltYXJ5IHVpLWljb24gIitzLnByaW1hcnkrIic+PC9zcGFuPiIpLHMuc2Vjb25kYXJ5JiZlLmFwcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXNlY29uZGFyeSB1aS1pY29uICIrcy5zZWNvbmRhcnkrIic+PC9zcGFuPiIpLHRoaXMub3B0aW9ucy50ZXh0fHwoby5wdXNoKG4/InVpLWJ1dHRvbi1pY29ucy1vbmx5IjoidWktYnV0dG9uLWljb24tb25seSIpLHRoaXMuaGFzVGl0bGV8fGUuYXR0cigidGl0bGUiLHQudHJpbShpKSkpKTpvLnB1c2goInVpLWJ1dHRvbi10ZXh0LW9ubHkiKSxlLmFkZENsYXNzKG8uam9pbigiICIpKX19KSx0LndpZGdldCgidWkuYnV0dG9uc2V0Iix7dmVyc2lvbjoiMS4xMC4zIixvcHRpb25zOntpdGVtczoiYnV0dG9uLCBpbnB1dFt0eXBlPWJ1dHRvbl0sIGlucHV0W3R5cGU9c3VibWl0XSwgaW5wdXRbdHlwZT1yZXNldF0sIGlucHV0W3R5cGU9Y2hlY2tib3hdLCBpbnB1dFt0eXBlPXJhZGlvXSwgYSwgOmRhdGEodWktYnV0dG9uKSJ9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLWJ1dHRvbnNldCIpfSxfaW5pdDpmdW5jdGlvbigpe3RoaXMucmVmcmVzaCgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7ImRpc2FibGVkIj09PXQmJnRoaXMuYnV0dG9ucy5idXR0b24oIm9wdGlvbiIsdCxlKSx0aGlzLl9zdXBlcih0LGUpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9InJ0bCI9PT10aGlzLmVsZW1lbnQuY3NzKCJkaXJlY3Rpb24iKTt0aGlzLmJ1dHRvbnM9dGhpcy5lbGVtZW50LmZpbmQodGhpcy5vcHRpb25zLml0ZW1zKS5maWx0ZXIoIjp1aS1idXR0b24iKS5idXR0b24oInJlZnJlc2giKS5lbmQoKS5ub3QoIjp1aS1idXR0b24iKS5idXR0b24oKS5lbmQoKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZmlsdGVyKCI6Zmlyc3QiKS5hZGRDbGFzcyhlPyJ1aS1jb3JuZXItcmlnaHQiOiJ1aS1jb3JuZXItbGVmdCIpLmVuZCgpLmZpbHRlcigiOmxhc3QiKS5hZGRDbGFzcyhlPyJ1aS1jb3JuZXItbGVmdCI6InVpLWNvcm5lci1yaWdodCIpLmVuZCgpLmVuZCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYnV0dG9uc2V0IiksdGhpcy5idXR0b25zLm1hcChmdW5jdGlvbigpe3JldHVybiB0KHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZW5kKCkuYnV0dG9uKCJkZXN0cm95Iil9fSl9KGpRdWVyeSksZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKCl7dGhpcy5fY3VySW5zdD1udWxsLHRoaXMuX2tleUV2ZW50PSExLHRoaXMuX2Rpc2FibGVkSW5wdXRzPVtdLHRoaXMuX2RhdGVwaWNrZXJTaG93aW5nPSExLHRoaXMuX2luRGlhbG9nPSExLHRoaXMuX21haW5EaXZJZD0idWktZGF0ZXBpY2tlci1kaXYiLHRoaXMuX2lubGluZUNsYXNzPSJ1aS1kYXRlcGlja2VyLWlubGluZSIsdGhpcy5fYXBwZW5kQ2xhc3M9InVpLWRhdGVwaWNrZXItYXBwZW5kIix0aGlzLl90cmlnZ2VyQ2xhc3M9InVpLWRhdGVwaWNrZXItdHJpZ2dlciIsdGhpcy5fZGlhbG9nQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlhbG9nIix0aGlzLl9kaXNhYmxlQ2xhc3M9InVpLWRhdGVwaWNrZXItZGlzYWJsZWQiLHRoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzPSJ1aS1kYXRlcGlja2VyLXVuc2VsZWN0YWJsZSIsdGhpcy5fY3VycmVudENsYXNzPSJ1aS1kYXRlcGlja2VyLWN1cnJlbnQtZGF5Iix0aGlzLl9kYXlPdmVyQ2xhc3M9InVpLWRhdGVwaWNrZXItZGF5cy1jZWxsLW92ZXIiLHRoaXMucmVnaW9uYWw9W10sdGhpcy5yZWdpb25hbFsiIl09e2Nsb3NlVGV4dDoiRG9uZSIscHJldlRleHQ6IlByZXYiLG5leHRUZXh0OiJOZXh0IixjdXJyZW50VGV4dDoiVG9kYXkiLG1vbnRoTmFtZXM6WyJKYW51YXJ5IiwiRmVicnVhcnkiLCJNYXJjaCIsIkFwcmlsIiwiTWF5IiwiSnVuZSIsIkp1bHkiLCJBdWd1c3QiLCJTZXB0ZW1iZXIiLCJPY3RvYmVyIiwiTm92ZW1iZXIiLCJEZWNlbWJlciJdLG1vbnRoTmFtZXNTaG9ydDpbIkphbiIsIkZlYiIsIk1hciIsIkFwciIsIk1heSIsIkp1biIsIkp1bCIsIkF1ZyIsIlNlcCIsIk9jdCIsIk5vdiIsIkRlYyJdLGRheU5hbWVzOlsiU3VuZGF5IiwiTW9uZGF5IiwiVHVlc2RheSIsIldlZG5lc2RheSIsIlRodXJzZGF5IiwiRnJpZGF5IiwiU2F0dXJkYXkiXSxkYXlOYW1lc1Nob3J0OlsiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0Il0sZGF5TmFtZXNNaW46WyJTdSIsIk1vIiwiVHUiLCJXZSIsIlRoIiwiRnIiLCJTYSJdLHdlZWtIZWFkZXI6IldrIixkYXRlRm9ybWF0OiJtbS9kZC95eSIsZmlyc3REYXk6MCxpc1JUTDohMSxzaG93TW9udGhBZnRlclllYXI6ITEseWVhclN1ZmZpeDoiIn0sdGhpcy5fZGVmYXVsdHM9e3Nob3dPbjoiZm9jdXMiLHNob3dBbmltOiJmYWRlSW4iLHNob3dPcHRpb25zOnt9LGRlZmF1bHREYXRlOm51bGwsYXBwZW5kVGV4dDoiIixidXR0b25UZXh0OiIuLi4iLGJ1dHRvbkltYWdlOiIiLGJ1dHRvbkltYWdlT25seTohMSxoaWRlSWZOb1ByZXZOZXh0OiExLG5hdmlnYXRpb25Bc0RhdGVGb3JtYXQ6ITEsZ290b0N1cnJlbnQ6ITEsY2hhbmdlTW9udGg6ITEsY2hhbmdlWWVhcjohMSx5ZWFyUmFuZ2U6ImMtMTA6YysxMCIsc2hvd090aGVyTW9udGhzOiExLHNlbGVjdE90aGVyTW9udGhzOiExLHNob3dXZWVrOiExLGNhbGN1bGF0ZVdlZWs6dGhpcy5pc284NjAxV2VlayxzaG9ydFllYXJDdXRvZmY6IisxMCIsbWluRGF0ZTpudWxsLG1heERhdGU6bnVsbCxkdXJhdGlvbjoiZmFzdCIsYmVmb3JlU2hvd0RheTpudWxsLGJlZm9yZVNob3c6bnVsbCxvblNlbGVjdDpudWxsLG9uQ2hhbmdlTW9udGhZZWFyOm51bGwsb25DbG9zZTpudWxsLG51bWJlck9mTW9udGhzOjEsc2hvd0N1cnJlbnRBdFBvczowLHN0ZXBNb250aHM6MSxzdGVwQmlnTW9udGhzOjEyLGFsdEZpZWxkOiIiLGFsdEZvcm1hdDoiIixjb25zdHJhaW5JbnB1dDohMCxzaG93QnV0dG9uUGFuZWw6ITEsYXV0b1NpemU6ITEsZGlzYWJsZWQ6ITF9LHQuZXh0ZW5kKHRoaXMuX2RlZmF1bHRzLHRoaXMucmVnaW9uYWxbIiJdKSx0aGlzLmRwRGl2PXModCgiPGRpdiBpZD0nIit0aGlzLl9tYWluRGl2SWQrIicgY2xhc3M9J3VpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj4iKSl9ZnVuY3Rpb24gcyhlKXt2YXIgaT0iYnV0dG9uLCAudWktZGF0ZXBpY2tlci1wcmV2LCAudWktZGF0ZXBpY2tlci1uZXh0LCAudWktZGF0ZXBpY2tlci1jYWxlbmRhciB0ZCBhIjtyZXR1cm4gZS5kZWxlZ2F0ZShpLCJtb3VzZW91dCIsZnVuY3Rpb24oKXt0KHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1ob3ZlciIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1wcmV2IikmJnQodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItcHJldi1ob3ZlciIpLC0xIT09dGhpcy5jbGFzc05hbWUuaW5kZXhPZigidWktZGF0ZXBpY2tlci1uZXh0IikmJnQodGhpcykucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbmV4dC1ob3ZlciIpfSkuZGVsZWdhdGUoaSwibW91c2VvdmVyIixmdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5faXNEaXNhYmxlZERhdGVwaWNrZXIoby5pbmxpbmU/ZS5wYXJlbnQoKVswXTpvLmlucHV0WzBdKXx8KHQodGhpcykucGFyZW50cygiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKS5maW5kKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWhvdmVyIiksdCh0aGlzKS5hZGRDbGFzcygidWktc3RhdGUtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItcHJldiIpJiZ0KHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLXByZXYtaG92ZXIiKSwtMSE9PXRoaXMuY2xhc3NOYW1lLmluZGV4T2YoInVpLWRhdGVwaWNrZXItbmV4dCIpJiZ0KHRoaXMpLmFkZENsYXNzKCJ1aS1kYXRlcGlja2VyLW5leHQtaG92ZXIiKSl9KX1mdW5jdGlvbiBuKGUsaSl7dC5leHRlbmQoZSxpKTtmb3IodmFyIHMgaW4gaSludWxsPT1pW3NdJiYoZVtzXT1pW3NdKTtyZXR1cm4gZX10LmV4dGVuZCh0LnVpLHtkYXRlcGlja2VyOnt2ZXJzaW9uOiIxLjEwLjMifX0pO3ZhciBvLGE9ImRhdGVwaWNrZXIiO3QuZXh0ZW5kKGkucHJvdG90eXBlLHttYXJrZXJDbGFzc05hbWU6Imhhc0RhdGVwaWNrZXIiLG1heFJvd3M6NCxfd2lkZ2V0RGF0ZXBpY2tlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRwRGl2fSxzZXREZWZhdWx0czpmdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLl9kZWZhdWx0cyx0fHx7fSksdGhpc30sX2F0dGFjaERhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcyxuLG87cz1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksbj0iZGl2Ij09PXN8fCJzcGFuIj09PXMsZS5pZHx8KHRoaXMudXVpZCs9MSxlLmlkPSJkcCIrdGhpcy51dWlkKSxvPXRoaXMuX25ld0luc3QodChlKSxuKSxvLnNldHRpbmdzPXQuZXh0ZW5kKHt9LGl8fHt9KSwiaW5wdXQiPT09cz90aGlzLl9jb25uZWN0RGF0ZXBpY2tlcihlLG8pOm4mJnRoaXMuX2lubGluZURhdGVwaWNrZXIoZSxvKX0sX25ld0luc3Q6ZnVuY3Rpb24oZSxpKXt2YXIgbj1lWzBdLmlkLnJlcGxhY2UoLyhbXkEtWmEtejAtOV9cLV0pL2csIlxcXFwkMSIpO3JldHVybntpZDpuLGlucHV0OmUsc2VsZWN0ZWREYXk6MCxzZWxlY3RlZE1vbnRoOjAsc2VsZWN0ZWRZZWFyOjAsZHJhd01vbnRoOjAsZHJhd1llYXI6MCxpbmxpbmU6aSxkcERpdjppP3ModCgiPGRpdiBjbGFzcz0nIit0aGlzLl9pbmxpbmVDbGFzcysiIHVpLWRhdGVwaWNrZXIgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsJz48L2Rpdj4iKSk6dGhpcy5kcERpdn19LF9jb25uZWN0RGF0ZXBpY2tlcjpmdW5jdGlvbihlLGkpe3ZhciBzPXQoZSk7aS5hcHBlbmQ9dChbXSksaS50cmlnZ2VyPXQoW10pLHMuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwodGhpcy5fYXR0YWNobWVudHMocyxpKSxzLmFkZENsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKS5rZXlkb3duKHRoaXMuX2RvS2V5RG93bikua2V5cHJlc3ModGhpcy5fZG9LZXlQcmVzcykua2V5dXAodGhpcy5fZG9LZXlVcCksdGhpcy5fYXV0b1NpemUoaSksdC5kYXRhKGUsYSxpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSl9LF9hdHRhY2htZW50czpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPXRoaXMuX2dldChpLCJhcHBlbmRUZXh0Iikscj10aGlzLl9nZXQoaSwiaXNSVEwiKTtpLmFwcGVuZCYmaS5hcHBlbmQucmVtb3ZlKCksYSYmKGkuYXBwZW5kPXQoIjxzcGFuIGNsYXNzPSciK3RoaXMuX2FwcGVuZENsYXNzKyInPiIrYSsiPC9zcGFuPiIpLGVbcj8iYmVmb3JlIjoiYWZ0ZXIiXShpLmFwcGVuZCkpLGUudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLGkudHJpZ2dlciYmaS50cmlnZ2VyLnJlbW92ZSgpLHM9dGhpcy5fZ2V0KGksInNob3dPbiIpLCgiZm9jdXMiPT09c3x8ImJvdGgiPT09cykmJmUuZm9jdXModGhpcy5fc2hvd0RhdGVwaWNrZXIpLCgiYnV0dG9uIj09PXN8fCJib3RoIj09PXMpJiYobj10aGlzLl9nZXQoaSwiYnV0dG9uVGV4dCIpLG89dGhpcy5fZ2V0KGksImJ1dHRvbkltYWdlIiksaS50cmlnZ2VyPXQodGhpcy5fZ2V0KGksImJ1dHRvbkltYWdlT25seSIpP3QoIjxpbWcvPiIpLmFkZENsYXNzKHRoaXMuX3RyaWdnZXJDbGFzcykuYXR0cih7c3JjOm8sYWx0Om4sdGl0bGU6bn0pOnQoIjxidXR0b24gdHlwZT0nYnV0dG9uJz48L2J1dHRvbj4iKS5hZGRDbGFzcyh0aGlzLl90cmlnZ2VyQ2xhc3MpLmh0bWwobz90KCI8aW1nLz4iKS5hdHRyKHtzcmM6byxhbHQ6bix0aXRsZTpufSk6bikpLGVbcj8iYmVmb3JlIjoiYWZ0ZXIiXShpLnRyaWdnZXIpLGkudHJpZ2dlci5jbGljayhmdW5jdGlvbigpe3JldHVybiB0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiZ0LmRhdGVwaWNrZXIuX2xhc3RJbnB1dD09PWVbMF0/dC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpOnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fbGFzdElucHV0IT09ZVswXT8odC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpLHQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSkpOnQuZGF0ZXBpY2tlci5fc2hvd0RhdGVwaWNrZXIoZVswXSksITF9KSl9LF9hdXRvU2l6ZTpmdW5jdGlvbih0KXtpZih0aGlzLl9nZXQodCwiYXV0b1NpemUiKSYmIXQuaW5saW5lKXt2YXIgZSxpLHMsbixvPW5ldyBEYXRlKDIwMDksMTEsMjApLGE9dGhpcy5fZ2V0KHQsImRhdGVGb3JtYXQiKTthLm1hdGNoKC9bRE1dLykmJihlPWZ1bmN0aW9uKHQpe2ZvcihpPTAscz0wLG49MDt0Lmxlbmd0aD5uO24rKyl0W25dLmxlbmd0aD5pJiYoaT10W25dLmxlbmd0aCxzPW4pO3JldHVybiBzfSxvLnNldE1vbnRoKGUodGhpcy5fZ2V0KHQsYS5tYXRjaCgvTU0vKT8ibW9udGhOYW1lcyI6Im1vbnRoTmFtZXNTaG9ydCIpKSksby5zZXREYXRlKGUodGhpcy5fZ2V0KHQsYS5tYXRjaCgvREQvKT8iZGF5TmFtZXMiOiJkYXlOYW1lc1Nob3J0IikpKzIwLW8uZ2V0RGF5KCkpKSx0LmlucHV0LmF0dHIoInNpemUiLHRoaXMuX2Zvcm1hdERhdGUodCxvKS5sZW5ndGgpfX0sX2lubGluZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSxpKXt2YXIgcz10KGUpO3MuaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpfHwocy5hZGRDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkuYXBwZW5kKGkuZHBEaXYpLHQuZGF0YShlLGEsaSksdGhpcy5fc2V0RGF0ZShpLHRoaXMuX2dldERlZmF1bHREYXRlKGkpLCEwKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShpKSxpLnNldHRpbmdzLmRpc2FibGVkJiZ0aGlzLl9kaXNhYmxlRGF0ZXBpY2tlcihlKSxpLmRwRGl2LmNzcygiZGlzcGxheSIsImJsb2NrIikpfSxfZGlhbG9nRGF0ZXBpY2tlcjpmdW5jdGlvbihlLGkscyxvLHIpe3ZhciBoLGwsYyx1LGQscD10aGlzLl9kaWFsb2dJbnN0O3JldHVybiBwfHwodGhpcy51dWlkKz0xLGg9ImRwIit0aGlzLnV1aWQsdGhpcy5fZGlhbG9nSW5wdXQ9dCgiPGlucHV0IHR5cGU9J3RleHQnIGlkPSciK2grIicgc3R5bGU9J3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAtMTAwcHg7IHdpZHRoOiAwcHg7Jy8+IiksdGhpcy5fZGlhbG9nSW5wdXQua2V5ZG93bih0aGlzLl9kb0tleURvd24pLHQoImJvZHkiKS5hcHBlbmQodGhpcy5fZGlhbG9nSW5wdXQpLHA9dGhpcy5fZGlhbG9nSW5zdD10aGlzLl9uZXdJbnN0KHRoaXMuX2RpYWxvZ0lucHV0LCExKSxwLnNldHRpbmdzPXt9LHQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxhLHApKSxuKHAuc2V0dGluZ3Msb3x8e30pLGk9aSYmaS5jb25zdHJ1Y3Rvcj09PURhdGU/dGhpcy5fZm9ybWF0RGF0ZShwLGkpOmksdGhpcy5fZGlhbG9nSW5wdXQudmFsKGkpLHRoaXMuX3Bvcz1yP3IubGVuZ3RoP3I6W3IucGFnZVgsci5wYWdlWV06bnVsbCx0aGlzLl9wb3N8fChsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCxjPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQsdT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LGQ9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbFRvcHx8ZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AsdGhpcy5fcG9zPVtsLzItMTAwK3UsYy8yLTE1MCtkXSksdGhpcy5fZGlhbG9nSW5wdXQuY3NzKCJsZWZ0Iix0aGlzLl9wb3NbMF0rMjArInB4IikuY3NzKCJ0b3AiLHRoaXMuX3Bvc1sxXSsicHgiKSxwLnNldHRpbmdzLm9uU2VsZWN0PXMsdGhpcy5faW5EaWFsb2c9ITAsdGhpcy5kcERpdi5hZGRDbGFzcyh0aGlzLl9kaWFsb2dDbGFzcyksdGhpcy5fc2hvd0RhdGVwaWNrZXIodGhpcy5fZGlhbG9nSW5wdXRbMF0pLHQuYmxvY2tVSSYmdC5ibG9ja1VJKHRoaXMuZHBEaXYpLHQuZGF0YSh0aGlzLl9kaWFsb2dJbnB1dFswXSxhLHApLHRoaXN9LF9kZXN0cm95RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxzPXQoZSksbj10LmRhdGEoZSxhKTtzLmhhc0NsYXNzKHRoaXMubWFya2VyQ2xhc3NOYW1lKSYmKGk9ZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLHQucmVtb3ZlRGF0YShlLGEpLCJpbnB1dCI9PT1pPyhuLmFwcGVuZC5yZW1vdmUoKSxuLnRyaWdnZXIucmVtb3ZlKCkscy5yZW1vdmVDbGFzcyh0aGlzLm1hcmtlckNsYXNzTmFtZSkudW5iaW5kKCJmb2N1cyIsdGhpcy5fc2hvd0RhdGVwaWNrZXIpLnVuYmluZCgia2V5ZG93biIsdGhpcy5fZG9LZXlEb3duKS51bmJpbmQoImtleXByZXNzIix0aGlzLl9kb0tleVByZXNzKS51bmJpbmQoImtleXVwIix0aGlzLl9kb0tleVVwKSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJnMucmVtb3ZlQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpLmVtcHR5KCkpfSxfZW5hYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxzLG49dChlKSxvPXQuZGF0YShlLGEpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksImlucHV0Ij09PWk/KGUuZGlzYWJsZWQ9ITEsby50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITF9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMS4wIixjdXJzb3I6IiJ9KSk6KCJkaXYiPT09aXx8InNwYW4iPT09aSkmJihzPW4uY2hpbGRyZW4oIi4iK3RoaXMuX2lubGluZUNsYXNzKSxzLmNoaWxkcmVuKCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikscy5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci1tb250aCwgc2VsZWN0LnVpLWRhdGVwaWNrZXIteWVhciIpLnByb3AoImRpc2FibGVkIiwhMSkpLHRoaXMuX2Rpc2FibGVkSW5wdXRzPXQubWFwKHRoaXMuX2Rpc2FibGVkSW5wdXRzLGZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZT9udWxsOnR9KSl9LF9kaXNhYmxlRGF0ZXBpY2tlcjpmdW5jdGlvbihlKXt2YXIgaSxzLG49dChlKSxvPXQuZGF0YShlLGEpO24uaGFzQ2xhc3ModGhpcy5tYXJrZXJDbGFzc05hbWUpJiYoaT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksImlucHV0Ij09PWk/KGUuZGlzYWJsZWQ9ITAsby50cmlnZ2VyLmZpbHRlcigiYnV0dG9uIikuZWFjaChmdW5jdGlvbigpe3RoaXMuZGlzYWJsZWQ9ITB9KS5lbmQoKS5maWx0ZXIoImltZyIpLmNzcyh7b3BhY2l0eToiMC41IixjdXJzb3I6ImRlZmF1bHQifSkpOigiZGl2Ij09PWl8fCJzcGFuIj09PWkpJiYocz1uLmNoaWxkcmVuKCIuIit0aGlzLl9pbmxpbmVDbGFzcykscy5jaGlsZHJlbigpLmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLHMuZmluZCgic2VsZWN0LnVpLWRhdGVwaWNrZXItbW9udGgsIHNlbGVjdC51aS1kYXRlcGlja2VyLXllYXIiKS5wcm9wKCJkaXNhYmxlZCIsITApKSx0aGlzLl9kaXNhYmxlZElucHV0cz10Lm1hcCh0aGlzLl9kaXNhYmxlZElucHV0cyxmdW5jdGlvbih0KXtyZXR1cm4gdD09PWU/bnVsbDp0fSksdGhpcy5fZGlzYWJsZWRJbnB1dHNbdGhpcy5fZGlzYWJsZWRJbnB1dHMubGVuZ3RoXT1lKX0sX2lzRGlzYWJsZWREYXRlcGlja2VyOmZ1bmN0aW9uKHQpe2lmKCF0KXJldHVybiExO2Zvcih2YXIgZT0wO3RoaXMuX2Rpc2FibGVkSW5wdXRzLmxlbmd0aD5lO2UrKylpZih0aGlzLl9kaXNhYmxlZElucHV0c1tlXT09PXQpcmV0dXJuITA7cmV0dXJuITF9LF9nZXRJbnN0OmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdC5kYXRhKGUsYSl9Y2F0Y2goaSl7dGhyb3ciTWlzc2luZyBpbnN0YW5jZSBkYXRhIGZvciB0aGlzIGRhdGVwaWNrZXIifX0sX29wdGlvbkRhdGVwaWNrZXI6ZnVuY3Rpb24oaSxzLG8pe3ZhciBhLHIsaCxsLGM9dGhpcy5fZ2V0SW5zdChpKTtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJzdHJpbmciPT10eXBlb2Ygcz8iZGVmYXVsdHMiPT09cz90LmV4dGVuZCh7fSx0LmRhdGVwaWNrZXIuX2RlZmF1bHRzKTpjPyJhbGwiPT09cz90LmV4dGVuZCh7fSxjLnNldHRpbmdzKTp0aGlzLl9nZXQoYyxzKTpudWxsOihhPXN8fHt9LCJzdHJpbmciPT10eXBlb2YgcyYmKGE9e30sYVtzXT1vKSxjJiYodGhpcy5fY3VySW5zdD09PWMmJnRoaXMuX2hpZGVEYXRlcGlja2VyKCkscj10aGlzLl9nZXREYXRlRGF0ZXBpY2tlcihpLCEwKSxoPXRoaXMuX2dldE1pbk1heERhdGUoYywibWluIiksbD10aGlzLl9nZXRNaW5NYXhEYXRlKGMsIm1heCIpLG4oYy5zZXR0aW5ncyxhKSxudWxsIT09aCYmYS5kYXRlRm9ybWF0IT09ZSYmYS5taW5EYXRlPT09ZSYmKGMuc2V0dGluZ3MubWluRGF0ZT10aGlzLl9mb3JtYXREYXRlKGMsaCkpLG51bGwhPT1sJiZhLmRhdGVGb3JtYXQhPT1lJiZhLm1heERhdGU9PT1lJiYoYy5zZXR0aW5ncy5tYXhEYXRlPXRoaXMuX2Zvcm1hdERhdGUoYyxsKSksImRpc2FibGVkImluIGEmJihhLmRpc2FibGVkP3RoaXMuX2Rpc2FibGVEYXRlcGlja2VyKGkpOnRoaXMuX2VuYWJsZURhdGVwaWNrZXIoaSkpLHRoaXMuX2F0dGFjaG1lbnRzKHQoaSksYyksdGhpcy5fYXV0b1NpemUoYyksdGhpcy5fc2V0RGF0ZShjLHIpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShjKSx0aGlzLl91cGRhdGVEYXRlcGlja2VyKGMpKSxlKX0sX2NoYW5nZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxlLGkpe3RoaXMuX29wdGlvbkRhdGVwaWNrZXIodCxlLGkpfSxfcmVmcmVzaERhdGVwaWNrZXI6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0SW5zdCh0KTtlJiZ0aGlzLl91cGRhdGVEYXRlcGlja2VyKGUpfSxfc2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRJbnN0KHQpO2kmJih0aGlzLl9zZXREYXRlKGksZSksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihpKSx0aGlzLl91cGRhdGVBbHRlcm5hdGUoaSkpfSxfZ2V0RGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRJbnN0KHQpO3JldHVybiBpJiYhaS5pbmxpbmUmJnRoaXMuX3NldERhdGVGcm9tRmllbGQoaSxlKSxpP3RoaXMuX2dldERhdGUoaSk6bnVsbH0sX2RvS2V5RG93bjpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbz10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpLGE9ITAscj1vLmRwRGl2LmlzKCIudWktZGF0ZXBpY2tlci1ydGwiKTtpZihvLl9rZXlFdmVudD0hMCx0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nKXN3aXRjaChlLmtleUNvZGUpe2Nhc2UgOTp0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCksYT0hMTticmVhaztjYXNlIDEzOnJldHVybiBuPXQoInRkLiIrdC5kYXRlcGlja2VyLl9kYXlPdmVyQ2xhc3MrIjpub3QoLiIrdC5kYXRlcGlja2VyLl9jdXJyZW50Q2xhc3MrIikiLG8uZHBEaXYpLG5bMF0mJnQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KGUudGFyZ2V0LG8uc2VsZWN0ZWRNb250aCxvLnNlbGVjdGVkWWVhcixuWzBdKSxpPXQuZGF0ZXBpY2tlci5fZ2V0KG8sIm9uU2VsZWN0IiksaT8ocz10LmRhdGVwaWNrZXIuX2Zvcm1hdERhdGUobyksaS5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbcyxvXSkpOnQuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKSwhMTsKY2FzZSAyNzp0LmRhdGVwaWNrZXIuX2hpZGVEYXRlcGlja2VyKCk7YnJlYWs7Y2FzZSAzMzp0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChvLCJzdGVwQmlnTW9udGhzIik6LXQuZGF0ZXBpY2tlci5fZ2V0KG8sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzQ6dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LGUuY3RybEtleT8rdC5kYXRlcGlja2VyLl9nZXQobywic3RlcEJpZ01vbnRocyIpOit0LmRhdGVwaWNrZXIuX2dldChvLCJzdGVwTW9udGhzIiksIk0iKTticmVhaztjYXNlIDM1OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fY2xlYXJEYXRlKGUudGFyZ2V0KSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5O2JyZWFrO2Nhc2UgMzY6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9nb3RvVG9kYXkoZS50YXJnZXQpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7Y2FzZSAzNzooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQscj8xOi0xLCJEIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleSxlLm9yaWdpbmFsRXZlbnQuYWx0S2V5JiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsZS5jdHJsS2V5Py10LmRhdGVwaWNrZXIuX2dldChvLCJzdGVwQmlnTW9udGhzIik6LXQuZGF0ZXBpY2tlci5fZ2V0KG8sInN0ZXBNb250aHMiKSwiTSIpO2JyZWFrO2Nhc2UgMzg6KGUuY3RybEtleXx8ZS5tZXRhS2V5KSYmdC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKGUudGFyZ2V0LC03LCJEIiksYT1lLmN0cmxLZXl8fGUubWV0YUtleTticmVhaztjYXNlIDM5OihlLmN0cmxLZXl8fGUubWV0YUtleSkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxyPy0xOjEsIkQiKSxhPWUuY3RybEtleXx8ZS5tZXRhS2V5LGUub3JpZ2luYWxFdmVudC5hbHRLZXkmJnQuZGF0ZXBpY2tlci5fYWRqdXN0RGF0ZShlLnRhcmdldCxlLmN0cmxLZXk/K3QuZGF0ZXBpY2tlci5fZ2V0KG8sInN0ZXBCaWdNb250aHMiKTordC5kYXRlcGlja2VyLl9nZXQobywic3RlcE1vbnRocyIpLCJNIik7YnJlYWs7Y2FzZSA0MDooZS5jdHJsS2V5fHxlLm1ldGFLZXkpJiZ0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUoZS50YXJnZXQsNywiRCIpLGE9ZS5jdHJsS2V5fHxlLm1ldGFLZXk7YnJlYWs7ZGVmYXVsdDphPSExfWVsc2UgMzY9PT1lLmtleUNvZGUmJmUuY3RybEtleT90LmRhdGVwaWNrZXIuX3Nob3dEYXRlcGlja2VyKHRoaXMpOmE9ITE7YSYmKGUucHJldmVudERlZmF1bHQoKSxlLnN0b3BQcm9wYWdhdGlvbigpKX0sX2RvS2V5UHJlc3M6ZnVuY3Rpb24oaSl7dmFyIHMsbixvPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChpLnRhcmdldCk7cmV0dXJuIHQuZGF0ZXBpY2tlci5fZ2V0KG8sImNvbnN0cmFpbklucHV0Iik/KHM9dC5kYXRlcGlja2VyLl9wb3NzaWJsZUNoYXJzKHQuZGF0ZXBpY2tlci5fZ2V0KG8sImRhdGVGb3JtYXQiKSksbj1TdHJpbmcuZnJvbUNoYXJDb2RlKG51bGw9PWkuY2hhckNvZGU/aS5rZXlDb2RlOmkuY2hhckNvZGUpLGkuY3RybEtleXx8aS5tZXRhS2V5fHwiICI+bnx8IXN8fHMuaW5kZXhPZihuKT4tMSk6ZX0sX2RvS2V5VXA6ZnVuY3Rpb24oZSl7dmFyIGkscz10LmRhdGVwaWNrZXIuX2dldEluc3QoZS50YXJnZXQpO2lmKHMuaW5wdXQudmFsKCkhPT1zLmxhc3RWYWwpdHJ5e2k9dC5kYXRlcGlja2VyLnBhcnNlRGF0ZSh0LmRhdGVwaWNrZXIuX2dldChzLCJkYXRlRm9ybWF0Iikscy5pbnB1dD9zLmlucHV0LnZhbCgpOm51bGwsdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcocykpLGkmJih0LmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQocyksdC5kYXRlcGlja2VyLl91cGRhdGVBbHRlcm5hdGUocyksdC5kYXRlcGlja2VyLl91cGRhdGVEYXRlcGlja2VyKHMpKX1jYXRjaChuKXt9cmV0dXJuITB9LF9zaG93RGF0ZXBpY2tlcjpmdW5jdGlvbihlKXtpZihlPWUudGFyZ2V0fHxlLCJpbnB1dCIhPT1lLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkmJihlPXQoImlucHV0IixlLnBhcmVudE5vZGUpWzBdKSwhdC5kYXRlcGlja2VyLl9pc0Rpc2FibGVkRGF0ZXBpY2tlcihlKSYmdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQhPT1lKXt2YXIgaSxzLG8sYSxyLGgsbDtpPXQuZGF0ZXBpY2tlci5fZ2V0SW5zdChlKSx0LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fY3VySW5zdCE9PWkmJih0LmRhdGVwaWNrZXIuX2N1ckluc3QuZHBEaXYuc3RvcCghMCwhMCksaSYmdC5kYXRlcGlja2VyLl9kYXRlcGlja2VyU2hvd2luZyYmdC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcih0LmRhdGVwaWNrZXIuX2N1ckluc3QuaW5wdXRbMF0pKSxzPXQuZGF0ZXBpY2tlci5fZ2V0KGksImJlZm9yZVNob3ciKSxvPXM/cy5hcHBseShlLFtlLGldKTp7fSxvIT09ITEmJihuKGkuc2V0dGluZ3MsbyksaS5sYXN0VmFsPW51bGwsdC5kYXRlcGlja2VyLl9sYXN0SW5wdXQ9ZSx0LmRhdGVwaWNrZXIuX3NldERhdGVGcm9tRmllbGQoaSksdC5kYXRlcGlja2VyLl9pbkRpYWxvZyYmKGUudmFsdWU9IiIpLHQuZGF0ZXBpY2tlci5fcG9zfHwodC5kYXRlcGlja2VyLl9wb3M9dC5kYXRlcGlja2VyLl9maW5kUG9zKGUpLHQuZGF0ZXBpY2tlci5fcG9zWzFdKz1lLm9mZnNldEhlaWdodCksYT0hMSx0KGUpLnBhcmVudHMoKS5lYWNoKGZ1bmN0aW9uKCl7cmV0dXJuIGF8PSJmaXhlZCI9PT10KHRoaXMpLmNzcygicG9zaXRpb24iKSwhYX0pLHI9e2xlZnQ6dC5kYXRlcGlja2VyLl9wb3NbMF0sdG9wOnQuZGF0ZXBpY2tlci5fcG9zWzFdfSx0LmRhdGVwaWNrZXIuX3Bvcz1udWxsLGkuZHBEaXYuZW1wdHkoKSxpLmRwRGl2LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixkaXNwbGF5OiJibG9jayIsdG9wOiItMTAwMHB4In0pLHQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcihpKSxyPXQuZGF0ZXBpY2tlci5fY2hlY2tPZmZzZXQoaSxyLGEpLGkuZHBEaXYuY3NzKHtwb3NpdGlvbjp0LmRhdGVwaWNrZXIuX2luRGlhbG9nJiZ0LmJsb2NrVUk/InN0YXRpYyI6YT8iZml4ZWQiOiJhYnNvbHV0ZSIsZGlzcGxheToibm9uZSIsbGVmdDpyLmxlZnQrInB4Iix0b3A6ci50b3ArInB4In0pLGkuaW5saW5lfHwoaD10LmRhdGVwaWNrZXIuX2dldChpLCJzaG93QW5pbSIpLGw9dC5kYXRlcGlja2VyLl9nZXQoaSwiZHVyYXRpb24iKSxpLmRwRGl2LnpJbmRleCh0KGUpLnpJbmRleCgpKzEpLHQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmc9ITAsdC5lZmZlY3RzJiZ0LmVmZmVjdHMuZWZmZWN0W2hdP2kuZHBEaXYuc2hvdyhoLHQuZGF0ZXBpY2tlci5fZ2V0KGksInNob3dPcHRpb25zIiksbCk6aS5kcERpdltofHwic2hvdyJdKGg/bDpudWxsKSx0LmRhdGVwaWNrZXIuX3Nob3VsZEZvY3VzSW5wdXQoaSkmJmkuaW5wdXQuZm9jdXMoKSx0LmRhdGVwaWNrZXIuX2N1ckluc3Q9aSkpfX0sX3VwZGF0ZURhdGVwaWNrZXI6ZnVuY3Rpb24oZSl7dGhpcy5tYXhSb3dzPTQsbz1lLGUuZHBEaXYuZW1wdHkoKS5hcHBlbmQodGhpcy5fZ2VuZXJhdGVIVE1MKGUpKSx0aGlzLl9hdHRhY2hIYW5kbGVycyhlKSxlLmRwRGl2LmZpbmQoIi4iK3RoaXMuX2RheU92ZXJDbGFzcysiIGEiKS5tb3VzZW92ZXIoKTt2YXIgaSxzPXRoaXMuX2dldE51bWJlck9mTW9udGhzKGUpLG49c1sxXSxhPTE3O2UuZHBEaXYucmVtb3ZlQ2xhc3MoInVpLWRhdGVwaWNrZXItbXVsdGktMiB1aS1kYXRlcGlja2VyLW11bHRpLTMgdWktZGF0ZXBpY2tlci1tdWx0aS00Iikud2lkdGgoIiIpLG4+MSYmZS5kcERpdi5hZGRDbGFzcygidWktZGF0ZXBpY2tlci1tdWx0aS0iK24pLmNzcygid2lkdGgiLGEqbisiZW0iKSxlLmRwRGl2WygxIT09c1swXXx8MSE9PXNbMV0/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLW11bHRpIiksZS5kcERpdlsodGhpcy5fZ2V0KGUsImlzUlRMIik/ImFkZCI6InJlbW92ZSIpKyJDbGFzcyJdKCJ1aS1kYXRlcGlja2VyLXJ0bCIpLGU9PT10LmRhdGVwaWNrZXIuX2N1ckluc3QmJnQuZGF0ZXBpY2tlci5fZGF0ZXBpY2tlclNob3dpbmcmJnQuZGF0ZXBpY2tlci5fc2hvdWxkRm9jdXNJbnB1dChlKSYmZS5pbnB1dC5mb2N1cygpLGUueWVhcnNodG1sJiYoaT1lLnllYXJzaHRtbCxzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aT09PWUueWVhcnNodG1sJiZlLnllYXJzaHRtbCYmZS5kcERpdi5maW5kKCJzZWxlY3QudWktZGF0ZXBpY2tlci15ZWFyOmZpcnN0IikucmVwbGFjZVdpdGgoZS55ZWFyc2h0bWwpLGk9ZS55ZWFyc2h0bWw9bnVsbH0sMCkpfSxfc2hvdWxkRm9jdXNJbnB1dDpmdW5jdGlvbih0KXtyZXR1cm4gdC5pbnB1dCYmdC5pbnB1dC5pcygiOnZpc2libGUiKSYmIXQuaW5wdXQuaXMoIjpkaXNhYmxlZCIpJiYhdC5pbnB1dC5pcygiOmZvY3VzIil9LF9jaGVja09mZnNldDpmdW5jdGlvbihlLGkscyl7dmFyIG49ZS5kcERpdi5vdXRlcldpZHRoKCksbz1lLmRwRGl2Lm91dGVySGVpZ2h0KCksYT1lLmlucHV0P2UuaW5wdXQub3V0ZXJXaWR0aCgpOjAscj1lLmlucHV0P2UuaW5wdXQub3V0ZXJIZWlnaHQoKTowLGg9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKyhzPzA6dChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpKSxsPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQrKHM/MDp0KGRvY3VtZW50KS5zY3JvbGxUb3AoKSk7cmV0dXJuIGkubGVmdC09dGhpcy5fZ2V0KGUsImlzUlRMIik/bi1hOjAsaS5sZWZ0LT1zJiZpLmxlZnQ9PT1lLmlucHV0Lm9mZnNldCgpLmxlZnQ/dChkb2N1bWVudCkuc2Nyb2xsTGVmdCgpOjAsaS50b3AtPXMmJmkudG9wPT09ZS5pbnB1dC5vZmZzZXQoKS50b3Arcj90KGRvY3VtZW50KS5zY3JvbGxUb3AoKTowLGkubGVmdC09TWF0aC5taW4oaS5sZWZ0LGkubGVmdCtuPmgmJmg+bj9NYXRoLmFicyhpLmxlZnQrbi1oKTowKSxpLnRvcC09TWF0aC5taW4oaS50b3AsaS50b3Arbz5sJiZsPm8/TWF0aC5hYnMobytyKTowKSxpfSxfZmluZFBvczpmdW5jdGlvbihlKXtmb3IodmFyIGkscz10aGlzLl9nZXRJbnN0KGUpLG49dGhpcy5fZ2V0KHMsImlzUlRMIik7ZSYmKCJoaWRkZW4iPT09ZS50eXBlfHwxIT09ZS5ub2RlVHlwZXx8dC5leHByLmZpbHRlcnMuaGlkZGVuKGUpKTspZT1lW24/InByZXZpb3VzU2libGluZyI6Im5leHRTaWJsaW5nIl07cmV0dXJuIGk9dChlKS5vZmZzZXQoKSxbaS5sZWZ0LGkudG9wXX0sX2hpZGVEYXRlcGlja2VyOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLHI9dGhpcy5fY3VySW5zdDshcnx8ZSYmciE9PXQuZGF0YShlLGEpfHx0aGlzLl9kYXRlcGlja2VyU2hvd2luZyYmKGk9dGhpcy5fZ2V0KHIsInNob3dBbmltIikscz10aGlzLl9nZXQociwiZHVyYXRpb24iKSxuPWZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl90aWR5RGlhbG9nKHIpfSx0LmVmZmVjdHMmJih0LmVmZmVjdHMuZWZmZWN0W2ldfHx0LmVmZmVjdHNbaV0pP3IuZHBEaXYuaGlkZShpLHQuZGF0ZXBpY2tlci5fZ2V0KHIsInNob3dPcHRpb25zIikscyxuKTpyLmRwRGl2WyJzbGlkZURvd24iPT09aT8ic2xpZGVVcCI6ImZhZGVJbiI9PT1pPyJmYWRlT3V0IjoiaGlkZSJdKGk/czpudWxsLG4pLGl8fG4oKSx0aGlzLl9kYXRlcGlja2VyU2hvd2luZz0hMSxvPXRoaXMuX2dldChyLCJvbkNsb3NlIiksbyYmby5hcHBseShyLmlucHV0P3IuaW5wdXRbMF06bnVsbCxbci5pbnB1dD9yLmlucHV0LnZhbCgpOiIiLHJdKSx0aGlzLl9sYXN0SW5wdXQ9bnVsbCx0aGlzLl9pbkRpYWxvZyYmKHRoaXMuX2RpYWxvZ0lucHV0LmNzcyh7cG9zaXRpb246ImFic29sdXRlIixsZWZ0OiIwIix0b3A6Ii0xMDBweCJ9KSx0LmJsb2NrVUkmJih0LnVuYmxvY2tVSSgpLHQoImJvZHkiKS5hcHBlbmQodGhpcy5kcERpdikpKSx0aGlzLl9pbkRpYWxvZz0hMSl9LF90aWR5RGlhbG9nOmZ1bmN0aW9uKHQpe3QuZHBEaXYucmVtb3ZlQ2xhc3ModGhpcy5fZGlhbG9nQ2xhc3MpLnVuYmluZCgiLnVpLWRhdGVwaWNrZXItY2FsZW5kYXIiKX0sX2NoZWNrRXh0ZXJuYWxDbGljazpmdW5jdGlvbihlKXtpZih0LmRhdGVwaWNrZXIuX2N1ckluc3Qpe3ZhciBpPXQoZS50YXJnZXQpLHM9dC5kYXRlcGlja2VyLl9nZXRJbnN0KGlbMF0pOyhpWzBdLmlkIT09dC5kYXRlcGlja2VyLl9tYWluRGl2SWQmJjA9PT1pLnBhcmVudHMoIiMiK3QuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGgmJiFpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiYhaS5jbG9zZXN0KCIuIit0LmRhdGVwaWNrZXIuX3RyaWdnZXJDbGFzcykubGVuZ3RoJiZ0LmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nJiYoIXQuZGF0ZXBpY2tlci5faW5EaWFsb2d8fCF0LmJsb2NrVUkpfHxpLmhhc0NsYXNzKHQuZGF0ZXBpY2tlci5tYXJrZXJDbGFzc05hbWUpJiZ0LmRhdGVwaWNrZXIuX2N1ckluc3QhPT1zKSYmdC5kYXRlcGlja2VyLl9oaWRlRGF0ZXBpY2tlcigpfX0sX2FkanVzdERhdGU6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPXQoZSksbz10aGlzLl9nZXRJbnN0KG5bMF0pO3RoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKG5bMF0pfHwodGhpcy5fYWRqdXN0SW5zdERhdGUobyxpKygiTSI9PT1zP3RoaXMuX2dldChvLCJzaG93Q3VycmVudEF0UG9zIik6MCkscyksdGhpcy5fdXBkYXRlRGF0ZXBpY2tlcihvKSl9LF9nb3RvVG9kYXk6ZnVuY3Rpb24oZSl7dmFyIGkscz10KGUpLG49dGhpcy5fZ2V0SW5zdChzWzBdKTt0aGlzLl9nZXQobiwiZ290b0N1cnJlbnQiKSYmbi5jdXJyZW50RGF5PyhuLnNlbGVjdGVkRGF5PW4uY3VycmVudERheSxuLmRyYXdNb250aD1uLnNlbGVjdGVkTW9udGg9bi5jdXJyZW50TW9udGgsbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1uLmN1cnJlbnRZZWFyKTooaT1uZXcgRGF0ZSxuLnNlbGVjdGVkRGF5PWkuZ2V0RGF0ZSgpLG4uZHJhd01vbnRoPW4uc2VsZWN0ZWRNb250aD1pLmdldE1vbnRoKCksbi5kcmF3WWVhcj1uLnNlbGVjdGVkWWVhcj1pLmdldEZ1bGxZZWFyKCkpLHRoaXMuX25vdGlmeUNoYW5nZShuKSx0aGlzLl9hZGp1c3REYXRlKHMpfSxfc2VsZWN0TW9udGhZZWFyOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10KGUpLG89dGhpcy5fZ2V0SW5zdChuWzBdKTtvWyJzZWxlY3RlZCIrKCJNIj09PXM/Ik1vbnRoIjoiWWVhciIpXT1vWyJkcmF3IisoIk0iPT09cz8iTW9udGgiOiJZZWFyIildPXBhcnNlSW50KGkub3B0aW9uc1tpLnNlbGVjdGVkSW5kZXhdLnZhbHVlLDEwKSx0aGlzLl9ub3RpZnlDaGFuZ2UobyksdGhpcy5fYWRqdXN0RGF0ZShuKX0sX3NlbGVjdERheTpmdW5jdGlvbihlLGkscyxuKXt2YXIgbyxhPXQoZSk7dChuKS5oYXNDbGFzcyh0aGlzLl91bnNlbGVjdGFibGVDbGFzcyl8fHRoaXMuX2lzRGlzYWJsZWREYXRlcGlja2VyKGFbMF0pfHwobz10aGlzLl9nZXRJbnN0KGFbMF0pLG8uc2VsZWN0ZWREYXk9by5jdXJyZW50RGF5PXQoImEiLG4pLmh0bWwoKSxvLnNlbGVjdGVkTW9udGg9by5jdXJyZW50TW9udGg9aSxvLnNlbGVjdGVkWWVhcj1vLmN1cnJlbnRZZWFyPXMsdGhpcy5fc2VsZWN0RGF0ZShlLHRoaXMuX2Zvcm1hdERhdGUobyxvLmN1cnJlbnREYXksby5jdXJyZW50TW9udGgsby5jdXJyZW50WWVhcikpKX0sX2NsZWFyRGF0ZTpmdW5jdGlvbihlKXt2YXIgaT10KGUpO3RoaXMuX3NlbGVjdERhdGUoaSwiIil9LF9zZWxlY3REYXRlOmZ1bmN0aW9uKGUsaSl7dmFyIHMsbj10KGUpLG89dGhpcy5fZ2V0SW5zdChuWzBdKTtpPW51bGwhPWk/aTp0aGlzLl9mb3JtYXREYXRlKG8pLG8uaW5wdXQmJm8uaW5wdXQudmFsKGkpLHRoaXMuX3VwZGF0ZUFsdGVybmF0ZShvKSxzPXRoaXMuX2dldChvLCJvblNlbGVjdCIpLHM/cy5hcHBseShvLmlucHV0P28uaW5wdXRbMF06bnVsbCxbaSxvXSk6by5pbnB1dCYmby5pbnB1dC50cmlnZ2VyKCJjaGFuZ2UiKSxvLmlubGluZT90aGlzLl91cGRhdGVEYXRlcGlja2VyKG8pOih0aGlzLl9oaWRlRGF0ZXBpY2tlcigpLHRoaXMuX2xhc3RJbnB1dD1vLmlucHV0WzBdLCJvYmplY3QiIT10eXBlb2Ygby5pbnB1dFswXSYmby5pbnB1dC5mb2N1cygpLHRoaXMuX2xhc3RJbnB1dD1udWxsKX0sX3VwZGF0ZUFsdGVybmF0ZTpmdW5jdGlvbihlKXt2YXIgaSxzLG4sbz10aGlzLl9nZXQoZSwiYWx0RmllbGQiKTtvJiYoaT10aGlzLl9nZXQoZSwiYWx0Rm9ybWF0Iil8fHRoaXMuX2dldChlLCJkYXRlRm9ybWF0Iikscz10aGlzLl9nZXREYXRlKGUpLG49dGhpcy5mb3JtYXREYXRlKGkscyx0aGlzLl9nZXRGb3JtYXRDb25maWcoZSkpLHQobykuZWFjaChmdW5jdGlvbigpe3QodGhpcykudmFsKG4pfSkpfSxub1dlZWtlbmRzOmZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0RGF5KCk7cmV0dXJuW2U+MCYmNj5lLCIiXX0saXNvODYwMVdlZWs6ZnVuY3Rpb24odCl7dmFyIGUsaT1uZXcgRGF0ZSh0LmdldFRpbWUoKSk7cmV0dXJuIGkuc2V0RGF0ZShpLmdldERhdGUoKSs0LShpLmdldERheSgpfHw3KSksZT1pLmdldFRpbWUoKSxpLnNldE1vbnRoKDApLGkuc2V0RGF0ZSgxKSxNYXRoLmZsb29yKE1hdGgucm91bmQoKGUtaSkvODY0ZTUpLzcpKzF9LHBhcnNlRGF0ZTpmdW5jdGlvbihpLHMsbil7aWYobnVsbD09aXx8bnVsbD09cyl0aHJvdyJJbnZhbGlkIGFyZ3VtZW50cyI7aWYocz0ib2JqZWN0Ij09dHlwZW9mIHM/IiIrczpzKyIiLCIiPT09cylyZXR1cm4gbnVsbDt2YXIgbyxhLHIsaCxsPTAsYz0obj9uLnNob3J0WWVhckN1dG9mZjpudWxsKXx8dGhpcy5fZGVmYXVsdHMuc2hvcnRZZWFyQ3V0b2ZmLHU9InN0cmluZyIhPXR5cGVvZiBjP2M6KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpJTEwMCtwYXJzZUludChjLDEwKSxkPShuP24uZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxwPShuP24uZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGY9KG4/bi5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxnPShuP24ubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxtPS0xLHY9LTEsXz0tMSxiPS0xLHk9ITEsdz1mdW5jdGlvbih0KXt2YXIgZT1pLmxlbmd0aD5vKzEmJmkuY2hhckF0KG8rMSk9PT10O3JldHVybiBlJiZvKyssZX0saz1mdW5jdGlvbih0KXt2YXIgZT13KHQpLGk9IkAiPT09dD8xNDoiISI9PT10PzIwOiJ5Ij09PXQmJmU/NDoibyI9PT10PzM6MixuPVJlZ0V4cCgiXlxcZHsxLCIraSsifSIpLG89cy5zdWJzdHJpbmcobCkubWF0Y2gobik7aWYoIW8pdGhyb3ciTWlzc2luZyBudW1iZXIgYXQgcG9zaXRpb24gIitsO3JldHVybiBsKz1vWzBdLmxlbmd0aCxwYXJzZUludChvWzBdLDEwKX0seD1mdW5jdGlvbihpLG4sbyl7dmFyIGE9LTEscj10Lm1hcCh3KGkpP286bixmdW5jdGlvbih0LGUpe3JldHVybltbZSx0XV19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuLSh0WzFdLmxlbmd0aC1lWzFdLmxlbmd0aCl9KTtpZih0LmVhY2gocixmdW5jdGlvbih0LGkpe3ZhciBuPWlbMV07cmV0dXJuIHMuc3Vic3RyKGwsbi5sZW5ndGgpLnRvTG93ZXJDYXNlKCk9PT1uLnRvTG93ZXJDYXNlKCk/KGE9aVswXSxsKz1uLmxlbmd0aCwhMSk6ZX0pLC0xIT09YSlyZXR1cm4gYSsxO3Rocm93IlVua25vd24gbmFtZSBhdCBwb3NpdGlvbiAiK2x9LEQ9ZnVuY3Rpb24oKXtpZihzLmNoYXJBdChsKSE9PWkuY2hhckF0KG8pKXRocm93IlVuZXhwZWN0ZWQgbGl0ZXJhbCBhdCBwb3NpdGlvbiAiK2w7bCsrfTtmb3Iobz0wO2kubGVuZ3RoPm87bysrKWlmKHkpIiciIT09aS5jaGFyQXQobyl8fHcoIiciKT9EKCk6eT0hMTtlbHNlIHN3aXRjaChpLmNoYXJBdChvKSl7Y2FzZSJkIjpfPWsoImQiKTticmVhaztjYXNlIkQiOngoIkQiLGQscCk7YnJlYWs7Y2FzZSJvIjpiPWsoIm8iKTticmVhaztjYXNlIm0iOnY9aygibSIpO2JyZWFrO2Nhc2UiTSI6dj14KCJNIixmLGcpO2JyZWFrO2Nhc2UieSI6bT1rKCJ5Iik7YnJlYWs7Y2FzZSJAIjpoPW5ldyBEYXRlKGsoIkAiKSksbT1oLmdldEZ1bGxZZWFyKCksdj1oLmdldE1vbnRoKCkrMSxfPWguZ2V0RGF0ZSgpO2JyZWFrO2Nhc2UiISI6aD1uZXcgRGF0ZSgoaygiISIpLXRoaXMuX3RpY2tzVG8xOTcwKS8xZTQpLG09aC5nZXRGdWxsWWVhcigpLHY9aC5nZXRNb250aCgpKzEsXz1oLmdldERhdGUoKTticmVhaztjYXNlIiciOncoIiciKT9EKCk6eT0hMDticmVhaztkZWZhdWx0OkQoKX1pZihzLmxlbmd0aD5sJiYocj1zLnN1YnN0cihsKSwhL15ccysvLnRlc3QocikpKXRocm93IkV4dHJhL3VucGFyc2VkIGNoYXJhY3RlcnMgZm91bmQgaW4gZGF0ZTogIityO2lmKC0xPT09bT9tPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKToxMDA+bSYmKG0rPShuZXcgRGF0ZSkuZ2V0RnVsbFllYXIoKS0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwKyh1Pj1tPzA6LTEwMCkpLGI+LTEpZm9yKHY9MSxfPWI7Oyl7aWYoYT10aGlzLl9nZXREYXlzSW5Nb250aChtLHYtMSksYT49XylicmVhazt2KyssXy09YX1pZihoPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKG0sdi0xLF8pKSxoLmdldEZ1bGxZZWFyKCkhPT1tfHxoLmdldE1vbnRoKCkrMSE9PXZ8fGguZ2V0RGF0ZSgpIT09Xyl0aHJvdyJJbnZhbGlkIGRhdGUiO3JldHVybiBofSxBVE9NOiJ5eS1tbS1kZCIsQ09PS0lFOiJELCBkZCBNIHl5IixJU09fODYwMToieXktbW0tZGQiLFJGQ184MjI6IkQsIGQgTSB5IixSRkNfODUwOiJERCwgZGQtTS15IixSRkNfMTAzNjoiRCwgZCBNIHkiLFJGQ18xMTIzOiJELCBkIE0geXkiLFJGQ18yODIyOiJELCBkIE0geXkiLFJTUzoiRCwgZCBNIHkiLFRJQ0tTOiIhIixUSU1FU1RBTVA6IkAiLFczQzoieXktbW0tZGQiLF90aWNrc1RvMTk3MDoxZTcqNjAqNjAqMjQqKDcxODY4NStNYXRoLmZsb29yKDQ5Mi41KS1NYXRoLmZsb29yKDE5LjcpK01hdGguZmxvb3IoNC45MjUpKSxmb3JtYXREYXRlOmZ1bmN0aW9uKHQsZSxpKXtpZighZSlyZXR1cm4iIjt2YXIgcyxuPShpP2kuZGF5TmFtZXNTaG9ydDpudWxsKXx8dGhpcy5fZGVmYXVsdHMuZGF5TmFtZXNTaG9ydCxvPShpP2kuZGF5TmFtZXM6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLmRheU5hbWVzLGE9KGk/aS5tb250aE5hbWVzU2hvcnQ6bnVsbCl8fHRoaXMuX2RlZmF1bHRzLm1vbnRoTmFtZXNTaG9ydCxyPShpP2kubW9udGhOYW1lczpudWxsKXx8dGhpcy5fZGVmYXVsdHMubW9udGhOYW1lcyxoPWZ1bmN0aW9uKGUpe3ZhciBpPXQubGVuZ3RoPnMrMSYmdC5jaGFyQXQocysxKT09PWU7cmV0dXJuIGkmJnMrKyxpfSxsPWZ1bmN0aW9uKHQsZSxpKXt2YXIgcz0iIitlO2lmKGgodCkpZm9yKDtpPnMubGVuZ3RoOylzPSIwIitzO3JldHVybiBzfSxjPWZ1bmN0aW9uKHQsZSxpLHMpe3JldHVybiBoKHQpP3NbZV06aVtlXX0sdT0iIixkPSExO2lmKGUpZm9yKHM9MDt0Lmxlbmd0aD5zO3MrKylpZihkKSInIiE9PXQuY2hhckF0KHMpfHxoKCInIik/dSs9dC5jaGFyQXQocyk6ZD0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChzKSl7Y2FzZSJkIjp1Kz1sKCJkIixlLmdldERhdGUoKSwyKTticmVhaztjYXNlIkQiOnUrPWMoIkQiLGUuZ2V0RGF5KCksbixvKTticmVhaztjYXNlIm8iOnUrPWwoIm8iLE1hdGgucm91bmQoKG5ldyBEYXRlKGUuZ2V0RnVsbFllYXIoKSxlLmdldE1vbnRoKCksZS5nZXREYXRlKCkpLmdldFRpbWUoKS1uZXcgRGF0ZShlLmdldEZ1bGxZZWFyKCksMCwwKS5nZXRUaW1lKCkpLzg2NGU1KSwzKTticmVhaztjYXNlIm0iOnUrPWwoIm0iLGUuZ2V0TW9udGgoKSsxLDIpO2JyZWFrO2Nhc2UiTSI6dSs9YygiTSIsZS5nZXRNb250aCgpLGEscik7YnJlYWs7Y2FzZSJ5Ijp1Kz1oKCJ5Iik/ZS5nZXRGdWxsWWVhcigpOigxMD5lLmdldFllYXIoKSUxMDA/IjAiOiIiKStlLmdldFllYXIoKSUxMDA7YnJlYWs7Y2FzZSJAIjp1Kz1lLmdldFRpbWUoKTticmVhaztjYXNlIiEiOnUrPTFlNCplLmdldFRpbWUoKSt0aGlzLl90aWNrc1RvMTk3MDticmVhaztjYXNlIiciOmgoIiciKT91Kz0iJyI6ZD0hMDticmVhaztkZWZhdWx0OnUrPXQuY2hhckF0KHMpfXJldHVybiB1fSxfcG9zc2libGVDaGFyczpmdW5jdGlvbih0KXt2YXIgZSxpPSIiLHM9ITEsbj1mdW5jdGlvbihpKXt2YXIgcz10Lmxlbmd0aD5lKzEmJnQuY2hhckF0KGUrMSk9PT1pO3JldHVybiBzJiZlKyssc307Zm9yKGU9MDt0Lmxlbmd0aD5lO2UrKylpZihzKSInIiE9PXQuY2hhckF0KGUpfHxuKCInIik/aSs9dC5jaGFyQXQoZSk6cz0hMTtlbHNlIHN3aXRjaCh0LmNoYXJBdChlKSl7Y2FzZSJkIjpjYXNlIm0iOmNhc2UieSI6Y2FzZSJAIjppKz0iMDEyMzQ1Njc4OSI7YnJlYWs7Y2FzZSJEIjpjYXNlIk0iOnJldHVybiBudWxsO2Nhc2UiJyI6bigiJyIpP2krPSInIjpzPSEwO2JyZWFrO2RlZmF1bHQ6aSs9dC5jaGFyQXQoZSl9cmV0dXJuIGl9LF9nZXQ6ZnVuY3Rpb24odCxpKXtyZXR1cm4gdC5zZXR0aW5nc1tpXSE9PWU/dC5zZXR0aW5nc1tpXTp0aGlzLl9kZWZhdWx0c1tpXX0sX3NldERhdGVGcm9tRmllbGQ6ZnVuY3Rpb24odCxlKXtpZih0LmlucHV0LnZhbCgpIT09dC5sYXN0VmFsKXt2YXIgaT10aGlzLl9nZXQodCwiZGF0ZUZvcm1hdCIpLHM9dC5sYXN0VmFsPXQuaW5wdXQ/dC5pbnB1dC52YWwoKTpudWxsLG49dGhpcy5fZ2V0RGVmYXVsdERhdGUodCksbz1uLGE9dGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpO3RyeXtvPXRoaXMucGFyc2VEYXRlKGkscyxhKXx8bn1jYXRjaChyKXtzPWU/IiI6c310LnNlbGVjdGVkRGF5PW8uZ2V0RGF0ZSgpLHQuZHJhd01vbnRoPXQuc2VsZWN0ZWRNb250aD1vLmdldE1vbnRoKCksdC5kcmF3WWVhcj10LnNlbGVjdGVkWWVhcj1vLmdldEZ1bGxZZWFyKCksdC5jdXJyZW50RGF5PXM/by5nZXREYXRlKCk6MCx0LmN1cnJlbnRNb250aD1zP28uZ2V0TW9udGgoKTowLHQuY3VycmVudFllYXI9cz9vLmdldEZ1bGxZZWFyKCk6MCx0aGlzLl9hZGp1c3RJbnN0RGF0ZSh0KX19LF9nZXREZWZhdWx0RGF0ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVzdHJpY3RNaW5NYXgodCx0aGlzLl9kZXRlcm1pbmVEYXRlKHQsdGhpcy5fZ2V0KHQsImRlZmF1bHREYXRlIiksbmV3IERhdGUpKX0sX2RldGVybWluZURhdGU6ZnVuY3Rpb24oZSxpLHMpe3ZhciBuPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBEYXRlO3JldHVybiBlLnNldERhdGUoZS5nZXREYXRlKCkrdCksZX0sbz1mdW5jdGlvbihpKXt0cnl7cmV0dXJuIHQuZGF0ZXBpY2tlci5wYXJzZURhdGUodC5kYXRlcGlja2VyLl9nZXQoZSwiZGF0ZUZvcm1hdCIpLGksdC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZSkpfWNhdGNoKHMpe31mb3IodmFyIG49KGkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXmMvKT90LmRhdGVwaWNrZXIuX2dldERhdGUoZSk6bnVsbCl8fG5ldyBEYXRlLG89bi5nZXRGdWxsWWVhcigpLGE9bi5nZXRNb250aCgpLHI9bi5nZXREYXRlKCksaD0vKFsrXC1dP1swLTldKylccyooZHxEfHd8V3xtfE18eXxZKT8vZyxsPWguZXhlYyhpKTtsOyl7c3dpdGNoKGxbMl18fCJkIil7Y2FzZSJkIjpjYXNlIkQiOnIrPXBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UidyI6Y2FzZSJXIjpyKz03KnBhcnNlSW50KGxbMV0sMTApO2JyZWFrO2Nhc2UibSI6Y2FzZSJNIjphKz1wYXJzZUludChsWzFdLDEwKSxyPU1hdGgubWluKHIsdC5kYXRlcGlja2VyLl9nZXREYXlzSW5Nb250aChvLGEpKTticmVhaztjYXNlInkiOmNhc2UiWSI6bys9cGFyc2VJbnQobFsxXSwxMCkscj1NYXRoLm1pbihyLHQuZGF0ZXBpY2tlci5fZ2V0RGF5c0luTW9udGgobyxhKSl9bD1oLmV4ZWMoaSl9cmV0dXJuIG5ldyBEYXRlKG8sYSxyKX0sYT1udWxsPT1pfHwiIj09PWk/czoic3RyaW5nIj09dHlwZW9mIGk/byhpKToibnVtYmVyIj09dHlwZW9mIGk/aXNOYU4oaSk/czpuKGkpOm5ldyBEYXRlKGkuZ2V0VGltZSgpKTtyZXR1cm4gYT1hJiYiSW52YWxpZCBEYXRlIj09IiIrYT9zOmEsYSYmKGEuc2V0SG91cnMoMCksYS5zZXRNaW51dGVzKDApLGEuc2V0U2Vjb25kcygwKSxhLnNldE1pbGxpc2Vjb25kcygwKSksdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoYSl9LF9kYXlsaWdodFNhdmluZ0FkanVzdDpmdW5jdGlvbih0KXtyZXR1cm4gdD8odC5zZXRIb3Vycyh0LmdldEhvdXJzKCk+MTI/dC5nZXRIb3VycygpKzI6MCksdCk6bnVsbH0sX3NldERhdGU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzPSFlLG49dC5zZWxlY3RlZE1vbnRoLG89dC5zZWxlY3RlZFllYXIsYT10aGlzLl9yZXN0cmljdE1pbk1heCh0LHRoaXMuX2RldGVybWluZURhdGUodCxlLG5ldyBEYXRlKSk7dC5zZWxlY3RlZERheT10LmN1cnJlbnREYXk9YS5nZXREYXRlKCksdC5kcmF3TW9udGg9dC5zZWxlY3RlZE1vbnRoPXQuY3VycmVudE1vbnRoPWEuZ2V0TW9udGgoKSx0LmRyYXdZZWFyPXQuc2VsZWN0ZWRZZWFyPXQuY3VycmVudFllYXI9YS5nZXRGdWxsWWVhcigpLG49PT10LnNlbGVjdGVkTW9udGgmJm89PT10LnNlbGVjdGVkWWVhcnx8aXx8dGhpcy5fbm90aWZ5Q2hhbmdlKHQpLHRoaXMuX2FkanVzdEluc3REYXRlKHQpLHQuaW5wdXQmJnQuaW5wdXQudmFsKHM/IiI6dGhpcy5fZm9ybWF0RGF0ZSh0KSl9LF9nZXREYXRlOmZ1bmN0aW9uKHQpe3ZhciBlPSF0LmN1cnJlbnRZZWFyfHx0LmlucHV0JiYiIj09PXQuaW5wdXQudmFsKCk/bnVsbDp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSkpO3JldHVybiBlfSxfYXR0YWNoSGFuZGxlcnM6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcy5fZ2V0KGUsInN0ZXBNb250aHMiKSxzPSIjIitlLmlkLnJlcGxhY2UoL1xcXFwvZywiXFwiKTtlLmRwRGl2LmZpbmQoIltkYXRhLWhhbmRsZXJdIikubWFwKGZ1bmN0aW9uKCl7dmFyIGU9e3ByZXY6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2FkanVzdERhdGUocywtaSwiTSIpfSxuZXh0OmZ1bmN0aW9uKCl7dC5kYXRlcGlja2VyLl9hZGp1c3REYXRlKHMsK2ksIk0iKX0saGlkZTpmdW5jdGlvbigpe3QuZGF0ZXBpY2tlci5faGlkZURhdGVwaWNrZXIoKX0sdG9kYXk6ZnVuY3Rpb24oKXt0LmRhdGVwaWNrZXIuX2dvdG9Ub2RheShzKX0sc2VsZWN0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHQuZGF0ZXBpY2tlci5fc2VsZWN0RGF5KHMsK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLW1vbnRoIiksK3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLXllYXIiKSx0aGlzKSwhMX0sc2VsZWN0TW9udGg6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJNIiksITF9LHNlbGVjdFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdC5kYXRlcGlja2VyLl9zZWxlY3RNb250aFllYXIocyx0aGlzLCJZIiksITF9fTt0KHRoaXMpLmJpbmQodGhpcy5nZXRBdHRyaWJ1dGUoImRhdGEtZXZlbnQiKSxlW3RoaXMuZ2V0QXR0cmlidXRlKCJkYXRhLWhhbmRsZXIiKV0pfSl9LF9nZW5lcmF0ZUhUTUw6ZnVuY3Rpb24odCl7dmFyIGUsaSxzLG4sbyxhLHIsaCxsLGMsdSxkLHAsZixnLG0sdixfLGIseSx3LGsseCxELEMsSSxQLFQsTSxTLHosQSxILEUsTixXLE8sRixSLEw9bmV3IERhdGUsaj10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShMLmdldEZ1bGxZZWFyKCksTC5nZXRNb250aCgpLEwuZ2V0RGF0ZSgpKSksWT10aGlzLl9nZXQodCwiaXNSVEwiKSxCPXRoaXMuX2dldCh0LCJzaG93QnV0dG9uUGFuZWwiKSxWPXRoaXMuX2dldCh0LCJoaWRlSWZOb1ByZXZOZXh0IiksSz10aGlzLl9nZXQodCwibmF2aWdhdGlvbkFzRGF0ZUZvcm1hdCIpLFU9dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCkscT10aGlzLl9nZXQodCwic2hvd0N1cnJlbnRBdFBvcyIpLFE9dGhpcy5fZ2V0KHQsInN0ZXBNb250aHMiKSxYPTEhPT1VWzBdfHwxIT09VVsxXSwkPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KHQuY3VycmVudERheT9uZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSk6bmV3IERhdGUoOTk5OSw5LDkpKSxHPXRoaXMuX2dldE1pbk1heERhdGUodCwibWluIiksSj10aGlzLl9nZXRNaW5NYXhEYXRlKHQsIm1heCIpLFo9dC5kcmF3TW9udGgtcSx0ZT10LmRyYXdZZWFyO2lmKDA+WiYmKForPTEyLHRlLS0pLEopZm9yKGU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUoSi5nZXRGdWxsWWVhcigpLEouZ2V0TW9udGgoKS1VWzBdKlVbMV0rMSxKLmdldERhdGUoKSkpLGU9RyYmRz5lP0c6ZTt0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0ZSxaLDEpKT5lOylaLS0sMD5aJiYoWj0xMSx0ZS0tKTtmb3IodC5kcmF3TW9udGg9Wix0LmRyYXdZZWFyPXRlLGk9dGhpcy5fZ2V0KHQsInByZXZUZXh0IiksaT1LP3RoaXMuZm9ybWF0RGF0ZShpLHRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHRlLFotUSwxKSksdGhpcy5fZ2V0Rm9ybWF0Q29uZmlnKHQpKTppLHM9dGhpcy5fY2FuQWRqdXN0TW9udGgodCwtMSx0ZSxaKT8iPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J3ByZXYnIGRhdGEtZXZlbnQ9J2NsaWNrJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiI6Vj8iIjoiPGEgY2xhc3M9J3VpLWRhdGVwaWNrZXItcHJldiB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWRpc2FibGVkJyB0aXRsZT0nIitpKyInPjxzcGFuIGNsYXNzPSd1aS1pY29uIHVpLWljb24tY2lyY2xlLXRyaWFuZ2xlLSIrKFk/ImUiOiJ3IikrIic+IitpKyI8L3NwYW4+PC9hPiIsbj10aGlzLl9nZXQodCwibmV4dFRleHQiKSxuPUs/dGhpcy5mb3JtYXREYXRlKG4sdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUodGUsWitRLDEpKSx0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOm4sbz10aGlzLl9jYW5BZGp1c3RNb250aCh0LDEsdGUsWik/IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCcgZGF0YS1oYW5kbGVyPSduZXh0JyBkYXRhLWV2ZW50PSdjbGljaycgdGl0bGU9JyIrbisiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrbisiPC9zcGFuPjwvYT4iOlY/IiI6IjxhIGNsYXNzPSd1aS1kYXRlcGlja2VyLW5leHQgdWktY29ybmVyLWFsbCB1aS1zdGF0ZS1kaXNhYmxlZCcgdGl0bGU9JyIrbisiJz48c3BhbiBjbGFzcz0ndWktaWNvbiB1aS1pY29uLWNpcmNsZS10cmlhbmdsZS0iKyhZPyJ3IjoiZSIpKyInPiIrbisiPC9zcGFuPjwvYT4iLGE9dGhpcy5fZ2V0KHQsImN1cnJlbnRUZXh0Iikscj10aGlzLl9nZXQodCwiZ290b0N1cnJlbnQiKSYmdC5jdXJyZW50RGF5PyQ6aixhPUs/dGhpcy5mb3JtYXREYXRlKGEscix0aGlzLl9nZXRGb3JtYXRDb25maWcodCkpOmEsaD10LmlubGluZT8iIjoiPGJ1dHRvbiB0eXBlPSdidXR0b24nIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNsb3NlIHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktcHJpbWFyeSB1aS1jb3JuZXItYWxsJyBkYXRhLWhhbmRsZXI9J2hpZGUnIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK3RoaXMuX2dldCh0LCJjbG9zZVRleHQiKSsiPC9idXR0b24+IixsPUI/IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItYnV0dG9ucGFuZSB1aS13aWRnZXQtY29udGVudCc+IisoWT9oOiIiKSsodGhpcy5faXNJblJhbmdlKHQscik/IjxidXR0b24gdHlwZT0nYnV0dG9uJyBjbGFzcz0ndWktZGF0ZXBpY2tlci1jdXJyZW50IHVpLXN0YXRlLWRlZmF1bHQgdWktcHJpb3JpdHktc2Vjb25kYXJ5IHVpLWNvcm5lci1hbGwnIGRhdGEtaGFuZGxlcj0ndG9kYXknIGRhdGEtZXZlbnQ9J2NsaWNrJz4iK2ErIjwvYnV0dG9uPiI6IiIpKyhZPyIiOmgpKyI8L2Rpdj4iOiIiLGM9cGFyc2VJbnQodGhpcy5fZ2V0KHQsImZpcnN0RGF5IiksMTApLGM9aXNOYU4oYyk/MDpjLHU9dGhpcy5fZ2V0KHQsInNob3dXZWVrIiksZD10aGlzLl9nZXQodCwiZGF5TmFtZXMiKSxwPXRoaXMuX2dldCh0LCJkYXlOYW1lc01pbiIpLGY9dGhpcy5fZ2V0KHQsIm1vbnRoTmFtZXMiKSxnPXRoaXMuX2dldCh0LCJtb250aE5hbWVzU2hvcnQiKSxtPXRoaXMuX2dldCh0LCJiZWZvcmVTaG93RGF5Iiksdj10aGlzLl9nZXQodCwic2hvd090aGVyTW9udGhzIiksXz10aGlzLl9nZXQodCwic2VsZWN0T3RoZXJNb250aHMiKSxiPXRoaXMuX2dldERlZmF1bHREYXRlKHQpLHk9IiIsaz0wO1VbMF0+aztrKyspe2Zvcih4PSIiLHRoaXMubWF4Um93cz00LEQ9MDtVWzFdPkQ7RCsrKXtpZihDPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHRlLFosdC5zZWxlY3RlZERheSkpLEk9IiB1aS1jb3JuZXItYWxsIixQPSIiLFgpe2lmKFArPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWdyb3VwIixVWzFdPjEpc3dpdGNoKEQpe2Nhc2UgMDpQKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtZmlyc3QiLEk9IiB1aS1jb3JuZXItIisoWT8icmlnaHQiOiJsZWZ0Iik7YnJlYWs7Y2FzZSBVWzFdLTE6UCs9IiB1aS1kYXRlcGlja2VyLWdyb3VwLWxhc3QiLEk9IiB1aS1jb3JuZXItIisoWT8ibGVmdCI6InJpZ2h0Iik7YnJlYWs7ZGVmYXVsdDpQKz0iIHVpLWRhdGVwaWNrZXItZ3JvdXAtbWlkZGxlIixJPSIifVArPSInPiJ9Zm9yKFArPSI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLWhlYWRlciB1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCIrSSsiJz4iKygvYWxsfGxlZnQvLnRlc3QoSSkmJjA9PT1rP1k/bzpzOiIiKSsoL2FsbHxyaWdodC8udGVzdChJKSYmMD09PWs/WT9zOm86IiIpK3RoaXMuX2dlbmVyYXRlTW9udGhZZWFySGVhZGVyKHQsWix0ZSxHLEosaz4wfHxEPjAsZixnKSsiPC9kaXY+PHRhYmxlIGNsYXNzPSd1aS1kYXRlcGlja2VyLWNhbGVuZGFyJz48dGhlYWQ+IisiPHRyPiIsVD11PyI8dGggY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIrdGhpcy5fZ2V0KHQsIndlZWtIZWFkZXIiKSsiPC90aD4iOiIiLHc9MDs3Pnc7dysrKU09KHcrYyklNyxUKz0iPHRoIisoKHcrYys2KSU3Pj01PyIgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1lbmQnIjoiIikrIj4iKyI8c3BhbiB0aXRsZT0nIitkW01dKyInPiIrcFtNXSsiPC9zcGFuPjwvdGg+Ijtmb3IoUCs9VCsiPC90cj48L3RoZWFkPjx0Ym9keT4iLFM9dGhpcy5fZ2V0RGF5c0luTW9udGgodGUsWiksdGU9PT10LnNlbGVjdGVkWWVhciYmWj09PXQuc2VsZWN0ZWRNb250aCYmKHQuc2VsZWN0ZWREYXk9TWF0aC5taW4odC5zZWxlY3RlZERheSxTKSksej0odGhpcy5fZ2V0Rmlyc3REYXlPZk1vbnRoKHRlLFopLWMrNyklNyxBPU1hdGguY2VpbCgoeitTKS83KSxIPVg/dGhpcy5tYXhSb3dzPkE/dGhpcy5tYXhSb3dzOkE6QSx0aGlzLm1heFJvd3M9SCxFPXRoaXMuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKHRlLFosMS16KSksTj0wO0g+TjtOKyspe2ZvcihQKz0iPHRyPiIsVz11PyI8dGQgY2xhc3M9J3VpLWRhdGVwaWNrZXItd2Vlay1jb2wnPiIrdGhpcy5fZ2V0KHQsImNhbGN1bGF0ZVdlZWsiKShFKSsiPC90ZD4iOiIiLHc9MDs3Pnc7dysrKU89bT9tLmFwcGx5KHQuaW5wdXQ/dC5pbnB1dFswXTpudWxsLFtFXSk6WyEwLCIiXSxGPUUuZ2V0TW9udGgoKSE9PVosUj1GJiYhX3x8IU9bMF18fEcmJkc+RXx8SiYmRT5KLFcrPSI8dGQgY2xhc3M9JyIrKCh3K2MrNiklNz49NT8iIHVpLWRhdGVwaWNrZXItd2Vlay1lbmQiOiIiKSsoRj8iIHVpLWRhdGVwaWNrZXItb3RoZXItbW9udGgiOiIiKSsoRS5nZXRUaW1lKCk9PT1DLmdldFRpbWUoKSYmWj09PXQuc2VsZWN0ZWRNb250aCYmdC5fa2V5RXZlbnR8fGIuZ2V0VGltZSgpPT09RS5nZXRUaW1lKCkmJmIuZ2V0VGltZSgpPT09Qy5nZXRUaW1lKCk/IiAiK3RoaXMuX2RheU92ZXJDbGFzczoiIikrKFI/IiAiK3RoaXMuX3Vuc2VsZWN0YWJsZUNsYXNzKyIgdWktc3RhdGUtZGlzYWJsZWQiOiIiKSsoRiYmIXY/IiI6IiAiK09bMV0rKEUuZ2V0VGltZSgpPT09JC5nZXRUaW1lKCk/IiAiK3RoaXMuX2N1cnJlbnRDbGFzczoiIikrKEUuZ2V0VGltZSgpPT09ai5nZXRUaW1lKCk/IiB1aS1kYXRlcGlja2VyLXRvZGF5IjoiIikpKyInIisoRiYmIXZ8fCFPWzJdPyIiOiIgdGl0bGU9JyIrT1syXS5yZXBsYWNlKC8nL2csIiYjMzk7IikrIiciKSsoUj8iIjoiIGRhdGEtaGFuZGxlcj0nc2VsZWN0RGF5JyBkYXRhLWV2ZW50PSdjbGljaycgZGF0YS1tb250aD0nIitFLmdldE1vbnRoKCkrIicgZGF0YS15ZWFyPSciK0UuZ2V0RnVsbFllYXIoKSsiJyIpKyI+IisoRiYmIXY/IiYjeGEwOyI6Uj8iPHNwYW4gY2xhc3M9J3VpLXN0YXRlLWRlZmF1bHQnPiIrRS5nZXREYXRlKCkrIjwvc3Bhbj4iOiI8YSBjbGFzcz0ndWktc3RhdGUtZGVmYXVsdCIrKEUuZ2V0VGltZSgpPT09ai5nZXRUaW1lKCk/IiB1aS1zdGF0ZS1oaWdobGlnaHQiOiIiKSsoRS5nZXRUaW1lKCk9PT0kLmdldFRpbWUoKT8iIHVpLXN0YXRlLWFjdGl2ZSI6IiIpKyhGPyIgdWktcHJpb3JpdHktc2Vjb25kYXJ5IjoiIikrIicgaHJlZj0nIyc+IitFLmdldERhdGUoKSsiPC9hPiIpKyI8L3RkPiIsRS5zZXREYXRlKEUuZ2V0RGF0ZSgpKzEpLEU9dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QoRSk7UCs9VysiPC90cj4ifVorKyxaPjExJiYoWj0wLHRlKyspLFArPSI8L3Rib2R5PjwvdGFibGU+IisoWD8iPC9kaXY+IisoVVswXT4wJiZEPT09VVsxXS0xPyI8ZGl2IGNsYXNzPSd1aS1kYXRlcGlja2VyLXJvdy1icmVhayc+PC9kaXY+IjoiIik6IiIpLHgrPVB9eSs9eH1yZXR1cm4geSs9bCx0Ll9rZXlFdmVudD0hMSx5fSxfZ2VuZXJhdGVNb250aFllYXJIZWFkZXI6ZnVuY3Rpb24odCxlLGkscyxuLG8sYSxyKXt2YXIgaCxsLGMsdSxkLHAsZixnLG09dGhpcy5fZ2V0KHQsImNoYW5nZU1vbnRoIiksdj10aGlzLl9nZXQodCwiY2hhbmdlWWVhciIpLF89dGhpcy5fZ2V0KHQsInNob3dNb250aEFmdGVyWWVhciIpLGI9IjxkaXYgY2xhc3M9J3VpLWRhdGVwaWNrZXItdGl0bGUnPiIseT0iIjtpZihvfHwhbSl5Kz0iPHNwYW4gY2xhc3M9J3VpLWRhdGVwaWNrZXItbW9udGgnPiIrYVtlXSsiPC9zcGFuPiI7ZWxzZXtmb3IoaD1zJiZzLmdldEZ1bGxZZWFyKCk9PT1pLGw9biYmbi5nZXRGdWxsWWVhcigpPT09aSx5Kz0iPHNlbGVjdCBjbGFzcz0ndWktZGF0ZXBpY2tlci1tb250aCcgZGF0YS1oYW5kbGVyPSdzZWxlY3RNb250aCcgZGF0YS1ldmVudD0nY2hhbmdlJz4iLGM9MDsxMj5jO2MrKykoIWh8fGM+PXMuZ2V0TW9udGgoKSkmJighbHx8bi5nZXRNb250aCgpPj1jKSYmKHkrPSI8b3B0aW9uIHZhbHVlPSciK2MrIiciKyhjPT09ZT8iIHNlbGVjdGVkPSdzZWxlY3RlZCciOiIiKSsiPiIrcltjXSsiPC9vcHRpb24+Iik7eSs9Ijwvc2VsZWN0PiJ9aWYoX3x8KGIrPXkrKCFvJiZtJiZ2PyIiOiImI3hhMDsiKSksIXQueWVhcnNodG1sKWlmKHQueWVhcnNodG1sPSIiLG98fCF2KWIrPSI8c3BhbiBjbGFzcz0ndWktZGF0ZXBpY2tlci15ZWFyJz4iK2krIjwvc3Bhbj4iO2Vsc2V7Zm9yKHU9dGhpcy5fZ2V0KHQsInllYXJSYW5nZSIpLnNwbGl0KCI6IiksZD0obmV3IERhdGUpLmdldEZ1bGxZZWFyKCkscD1mdW5jdGlvbih0KXt2YXIgZT10Lm1hdGNoKC9jWytcLV0uKi8pP2krcGFyc2VJbnQodC5zdWJzdHJpbmcoMSksMTApOnQubWF0Y2goL1srXC1dLiovKT9kK3BhcnNlSW50KHQsMTApOnBhcnNlSW50KHQsMTApO3JldHVybiBpc05hTihlKT9kOmV9LGY9cCh1WzBdKSxnPU1hdGgubWF4KGYscCh1WzFdfHwiIikpLGY9cz9NYXRoLm1heChmLHMuZ2V0RnVsbFllYXIoKSk6ZixnPW4/TWF0aC5taW4oZyxuLmdldEZ1bGxZZWFyKCkpOmcsdC55ZWFyc2h0bWwrPSI8c2VsZWN0IGNsYXNzPSd1aS1kYXRlcGlja2VyLXllYXInIGRhdGEtaGFuZGxlcj0nc2VsZWN0WWVhcicgZGF0YS1ldmVudD0nY2hhbmdlJz4iO2c+PWY7ZisrKXQueWVhcnNodG1sKz0iPG9wdGlvbiB2YWx1ZT0nIitmKyInIisoZj09PWk/IiBzZWxlY3RlZD0nc2VsZWN0ZWQnIjoiIikrIj4iK2YrIjwvb3B0aW9uPiI7dC55ZWFyc2h0bWwrPSI8L3NlbGVjdD4iLGIrPXQueWVhcnNodG1sLHQueWVhcnNodG1sPW51bGx9cmV0dXJuIGIrPXRoaXMuX2dldCh0LCJ5ZWFyU3VmZml4IiksXyYmKGIrPSghbyYmbSYmdj8iIjoiJiN4YTA7IikreSksYis9IjwvZGl2PiJ9LF9hZGp1c3RJbnN0RGF0ZTpmdW5jdGlvbih0LGUsaSl7dmFyIHM9dC5kcmF3WWVhcisoIlkiPT09aT9lOjApLG49dC5kcmF3TW9udGgrKCJNIj09PWk/ZTowKSxvPU1hdGgubWluKHQuc2VsZWN0ZWREYXksdGhpcy5fZ2V0RGF5c0luTW9udGgocyxuKSkrKCJEIj09PWk/ZTowKSxhPXRoaXMuX3Jlc3RyaWN0TWluTWF4KHQsdGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocyxuLG8pKSk7dC5zZWxlY3RlZERheT1hLmdldERhdGUoKSx0LmRyYXdNb250aD10LnNlbGVjdGVkTW9udGg9YS5nZXRNb250aCgpLHQuZHJhd1llYXI9dC5zZWxlY3RlZFllYXI9YS5nZXRGdWxsWWVhcigpLCgiTSI9PT1pfHwiWSI9PT1pKSYmdGhpcy5fbm90aWZ5Q2hhbmdlKHQpfSxfcmVzdHJpY3RNaW5NYXg6ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLl9nZXRNaW5NYXhEYXRlKHQsIm1pbiIpLHM9dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LCJtYXgiKSxuPWkmJmk+ZT9pOmU7cmV0dXJuIHMmJm4+cz9zOm59LF9ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0KHQsIm9uQ2hhbmdlTW9udGhZZWFyIik7ZSYmZS5hcHBseSh0LmlucHV0P3QuaW5wdXRbMF06bnVsbCxbdC5zZWxlY3RlZFllYXIsdC5zZWxlY3RlZE1vbnRoKzEsdF0pfSxfZ2V0TnVtYmVyT2ZNb250aHM6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fZ2V0KHQsIm51bWJlck9mTW9udGhzIik7cmV0dXJuIG51bGw9PWU/WzEsMV06Im51bWJlciI9PXR5cGVvZiBlP1sxLGVdOmV9LF9nZXRNaW5NYXhEYXRlOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2RldGVybWluZURhdGUodCx0aGlzLl9nZXQodCxlKyJEYXRlIiksbnVsbCl9LF9nZXREYXlzSW5Nb250aDpmdW5jdGlvbih0LGUpe3JldHVybiAzMi10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LGUsMzIpKS5nZXREYXRlKCl9LF9nZXRGaXJzdERheU9mTW9udGg6ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IERhdGUodCxlLDEpLmdldERheSgpfSxfY2FuQWRqdXN0TW9udGg6ZnVuY3Rpb24odCxlLGkscyl7dmFyIG49dGhpcy5fZ2V0TnVtYmVyT2ZNb250aHModCksbz10aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZShpLHMrKDA+ZT9lOm5bMF0qblsxXSksMSkpO3JldHVybiAwPmUmJm8uc2V0RGF0ZSh0aGlzLl9nZXREYXlzSW5Nb250aChvLmdldEZ1bGxZZWFyKCksby5nZXRNb250aCgpKSksdGhpcy5faXNJblJhbmdlKHQsbyl9LF9pc0luUmFuZ2U6ZnVuY3Rpb24odCxlKXt2YXIgaSxzLG49dGhpcy5fZ2V0TWluTWF4RGF0ZSh0LCJtaW4iKSxvPXRoaXMuX2dldE1pbk1heERhdGUodCwibWF4IiksYT1udWxsLHI9bnVsbCxoPXRoaXMuX2dldCh0LCJ5ZWFyUmFuZ2UiKTtyZXR1cm4gaCYmKGk9aC5zcGxpdCgiOiIpLHM9KG5ldyBEYXRlKS5nZXRGdWxsWWVhcigpLGE9cGFyc2VJbnQoaVswXSwxMCkscj1wYXJzZUludChpWzFdLDEwKSxpWzBdLm1hdGNoKC9bK1wtXS4qLykmJihhKz1zKSxpWzFdLm1hdGNoKC9bK1wtXS4qLykmJihyKz1zKSksKCFufHxlLmdldFRpbWUoKT49bi5nZXRUaW1lKCkpJiYoIW98fGUuZ2V0VGltZSgpPD1vLmdldFRpbWUoKSkmJighYXx8ZS5nZXRGdWxsWWVhcigpPj1hKSYmKCFyfHxyPj1lLmdldEZ1bGxZZWFyKCkpfSxfZ2V0Rm9ybWF0Q29uZmlnOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2dldCh0LCJzaG9ydFllYXJDdXRvZmYiKTtyZXR1cm4gZT0ic3RyaW5nIiE9dHlwZW9mIGU/ZToobmV3IERhdGUpLmdldEZ1bGxZZWFyKCklMTAwK3BhcnNlSW50KGUsMTApLHtzaG9ydFllYXJDdXRvZmY6ZSxkYXlOYW1lc1Nob3J0OnRoaXMuX2dldCh0LCJkYXlOYW1lc1Nob3J0IiksZGF5TmFtZXM6dGhpcy5fZ2V0KHQsImRheU5hbWVzIiksbW9udGhOYW1lc1Nob3J0OnRoaXMuX2dldCh0LCJtb250aE5hbWVzU2hvcnQiKSxtb250aE5hbWVzOnRoaXMuX2dldCh0LCJtb250aE5hbWVzIil9fSxfZm9ybWF0RGF0ZTpmdW5jdGlvbih0LGUsaSxzKXtlfHwodC5jdXJyZW50RGF5PXQuc2VsZWN0ZWREYXksdC5jdXJyZW50TW9udGg9dC5zZWxlY3RlZE1vbnRoLHQuY3VycmVudFllYXI9dC5zZWxlY3RlZFllYXIpO3ZhciBuPWU/Im9iamVjdCI9PXR5cGVvZiBlP2U6dGhpcy5fZGF5bGlnaHRTYXZpbmdBZGp1c3QobmV3IERhdGUocyxpLGUpKTp0aGlzLl9kYXlsaWdodFNhdmluZ0FkanVzdChuZXcgRGF0ZSh0LmN1cnJlbnRZZWFyLHQuY3VycmVudE1vbnRoLHQuY3VycmVudERheSkpO3JldHVybiB0aGlzLmZvcm1hdERhdGUodGhpcy5fZ2V0KHQsImRhdGVGb3JtYXQiKSxuLHRoaXMuX2dldEZvcm1hdENvbmZpZyh0KSl9fSksdC5mbi5kYXRlcGlja2VyPWZ1bmN0aW9uKGUpe2lmKCF0aGlzLmxlbmd0aClyZXR1cm4gdGhpczt0LmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWR8fCh0KGRvY3VtZW50KS5tb3VzZWRvd24odC5kYXRlcGlja2VyLl9jaGVja0V4dGVybmFsQ2xpY2spLHQuZGF0ZXBpY2tlci5pbml0aWFsaXplZD0hMCksMD09PXQoIiMiK3QuZGF0ZXBpY2tlci5fbWFpbkRpdklkKS5sZW5ndGgmJnQoImJvZHkiKS5hcHBlbmQodC5kYXRlcGlja2VyLmRwRGl2KTt2YXIgaT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlfHwiaXNEaXNhYmxlZCIhPT1lJiYiZ2V0RGF0ZSIhPT1lJiYid2lkZ2V0IiE9PWU/Im9wdGlvbiI9PT1lJiYyPT09YXJndW1lbnRzLmxlbmd0aCYmInN0cmluZyI9PXR5cGVvZiBhcmd1bWVudHNbMV0/dC5kYXRlcGlja2VyWyJfIitlKyJEYXRlcGlja2VyIl0uYXBwbHkodC5kYXRlcGlja2VyLFt0aGlzWzBdXS5jb25jYXQoaSkpOnRoaXMuZWFjaChmdW5jdGlvbigpeyJzdHJpbmciPT10eXBlb2YgZT90LmRhdGVwaWNrZXJbIl8iK2UrIkRhdGVwaWNrZXIiXS5hcHBseSh0LmRhdGVwaWNrZXIsW3RoaXNdLmNvbmNhdChpKSk6dC5kYXRlcGlja2VyLl9hdHRhY2hEYXRlcGlja2VyKHRoaXMsZSl9KTp0LmRhdGVwaWNrZXJbIl8iK2UrIkRhdGVwaWNrZXIiXS5hcHBseSh0LmRhdGVwaWNrZXIsW3RoaXNbMF1dLmNvbmNhdChpKSl9LHQuZGF0ZXBpY2tlcj1uZXcgaSx0LmRhdGVwaWNrZXIuaW5pdGlhbGl6ZWQ9ITEsdC5kYXRlcGlja2VyLnV1aWQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksdC5kYXRlcGlja2VyLnZlcnNpb249IjEuMTAuMyJ9KGpRdWVyeSksZnVuY3Rpb24odCl7dmFyIGU9e2J1dHRvbnM6ITAsaGVpZ2h0OiEwLG1heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITAsd2lkdGg6ITB9LGk9e21heEhlaWdodDohMCxtYXhXaWR0aDohMCxtaW5IZWlnaHQ6ITAsbWluV2lkdGg6ITB9O3Qud2lkZ2V0KCJ1aS5kaWFsb2ciLHt2ZXJzaW9uOiIxLjEwLjMiLG9wdGlvbnM6e2FwcGVuZFRvOiJib2R5IixhdXRvT3BlbjohMCxidXR0b25zOltdLGNsb3NlT25Fc2NhcGU6ITAsY2xvc2VUZXh0OiJjbG9zZSIsZGlhbG9nQ2xhc3M6IiIsZHJhZ2dhYmxlOiEwLGhpZGU6bnVsbCxoZWlnaHQ6ImF1dG8iLG1heEhlaWdodDpudWxsLG1heFdpZHRoOm51bGwsbWluSGVpZ2h0OjE1MCxtaW5XaWR0aDoxNTAsbW9kYWw6ITEscG9zaXRpb246e215OiJjZW50ZXIiLGF0OiJjZW50ZXIiLG9mOndpbmRvdyxjb2xsaXNpb246ImZpdCIsdXNpbmc6ZnVuY3Rpb24oZSl7dmFyIGk9dCh0aGlzKS5jc3MoZSkub2Zmc2V0KCkudG9wOzA+aSYmdCh0aGlzKS5jc3MoInRvcCIsZS50b3AtaSl9fSxyZXNpemFibGU6ITAsc2hvdzpudWxsLHRpdGxlOm51bGwsd2lkdGg6MzAwLGJlZm9yZUNsb3NlOm51bGwsY2xvc2U6bnVsbCxkcmFnOm51bGwsZHJhZ1N0YXJ0Om51bGwsZHJhZ1N0b3A6bnVsbCxmb2N1czpudWxsLG9wZW46bnVsbCxyZXNpemU6bnVsbCxyZXNpemVTdGFydDpudWxsLHJlc2l6ZVN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMub3JpZ2luYWxDc3M9e2Rpc3BsYXk6dGhpcy5lbGVtZW50WzBdLnN0eWxlLmRpc3BsYXksd2lkdGg6dGhpcy5lbGVtZW50WzBdLnN0eWxlLndpZHRoLG1pbkhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWluSGVpZ2h0LG1heEhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUubWF4SGVpZ2h0LGhlaWdodDp0aGlzLmVsZW1lbnRbMF0uc3R5bGUuaGVpZ2h0fSx0aGlzLm9yaWdpbmFsUG9zaXRpb249e3BhcmVudDp0aGlzLmVsZW1lbnQucGFyZW50KCksaW5kZXg6dGhpcy5lbGVtZW50LnBhcmVudCgpLmNoaWxkcmVuKCkuaW5kZXgodGhpcy5lbGVtZW50KX0sdGhpcy5vcmlnaW5hbFRpdGxlPXRoaXMuZWxlbWVudC5hdHRyKCJ0aXRsZSIpLHRoaXMub3B0aW9ucy50aXRsZT10aGlzLm9wdGlvbnMudGl0bGV8fHRoaXMub3JpZ2luYWxUaXRsZSx0aGlzLl9jcmVhdGVXcmFwcGVyKCksdGhpcy5lbGVtZW50LnNob3coKS5yZW1vdmVBdHRyKCJ0aXRsZSIpLmFkZENsYXNzKCJ1aS1kaWFsb2ctY29udGVudCB1aS13aWRnZXQtY29udGVudCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHRoaXMuX2NyZWF0ZVRpdGxlYmFyKCksdGhpcy5fY3JlYXRlQnV0dG9uUGFuZSgpLHRoaXMub3B0aW9ucy5kcmFnZ2FibGUmJnQuZm4uZHJhZ2dhYmxlJiZ0aGlzLl9tYWtlRHJhZ2dhYmxlKCksdGhpcy5vcHRpb25zLnJlc2l6YWJsZSYmdC5mbi5yZXNpemFibGUmJnRoaXMuX21ha2VSZXNpemFibGUoKSx0aGlzLl9pc09wZW49ITF9LF9pbml0OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLmF1dG9PcGVuJiZ0aGlzLm9wZW4oKX0sX2FwcGVuZFRvOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLmFwcGVuZFRvO3JldHVybiBlJiYoZS5qcXVlcnl8fGUubm9kZVR5cGUpP3QoZSk6dGhpcy5kb2N1bWVudC5maW5kKGV8fCJib2R5IikuZXEoMCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLm9yaWdpbmFsUG9zaXRpb247dGhpcy5fZGVzdHJveU92ZXJsYXkoKSx0aGlzLmVsZW1lbnQucmVtb3ZlVW5pcXVlSWQoKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWNvbnRlbnQgdWktd2lkZ2V0LWNvbnRlbnQiKS5jc3ModGhpcy5vcmlnaW5hbENzcykuZGV0YWNoKCksdGhpcy51aURpYWxvZy5zdG9wKCEwLCEwKS5yZW1vdmUoKSx0aGlzLm9yaWdpbmFsVGl0bGUmJnRoaXMuZWxlbWVudC5hdHRyKCJ0aXRsZSIsdGhpcy5vcmlnaW5hbFRpdGxlKSx0PWUucGFyZW50LmNoaWxkcmVuKCkuZXEoZS5pbmRleCksdC5sZW5ndGgmJnRbMF0hPT10aGlzLmVsZW1lbnRbMF0/dC5iZWZvcmUodGhpcy5lbGVtZW50KTplLnBhcmVudC5hcHBlbmQodGhpcy5lbGVtZW50KX0sd2lkZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudWlEaWFsb2d9LGRpc2FibGU6dC5ub29wLGVuYWJsZTp0Lm5vb3AsY2xvc2U6ZnVuY3Rpb24oZSl7dmFyIGk9dGhpczt0aGlzLl9pc09wZW4mJnRoaXMuX3RyaWdnZXIoImJlZm9yZUNsb3NlIixlKSE9PSExJiYodGhpcy5faXNPcGVuPSExLHRoaXMuX2Rlc3Ryb3lPdmVybGF5KCksdGhpcy5vcGVuZXIuZmlsdGVyKCI6Zm9jdXNhYmxlIikuZm9jdXMoKS5sZW5ndGh8fHQodGhpcy5kb2N1bWVudFswXS5hY3RpdmVFbGVtZW50KS5ibHVyKCksdGhpcy5faGlkZSh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7aS5fdHJpZ2dlcigiY2xvc2UiLGUpfSkpfSxpc09wZW46ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNPcGVufSxtb3ZlVG9Ub3A6ZnVuY3Rpb24oKXt0aGlzLl9tb3ZlVG9Ub3AoKX0sX21vdmVUb1RvcDpmdW5jdGlvbih0LGUpe3ZhciBpPSEhdGhpcy51aURpYWxvZy5uZXh0QWxsKCI6dmlzaWJsZSIpLmluc2VydEJlZm9yZSh0aGlzLnVpRGlhbG9nKS5sZW5ndGg7cmV0dXJuIGkmJiFlJiZ0aGlzLl90cmlnZ2VyKCJmb2N1cyIsdCksaX0sb3BlbjpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuX2lzT3Blbj8odGhpcy5fbW92ZVRvVG9wKCkmJnRoaXMuX2ZvY3VzVGFiYmFibGUoKSx1bmRlZmluZWQpOih0aGlzLl9pc09wZW49ITAsdGhpcy5vcGVuZXI9dCh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbigpLHRoaXMuX2NyZWF0ZU92ZXJsYXkoKSx0aGlzLl9tb3ZlVG9Ub3AobnVsbCwhMCksdGhpcy5fc2hvdyh0aGlzLnVpRGlhbG9nLHRoaXMub3B0aW9ucy5zaG93LGZ1bmN0aW9uKCl7ZS5fZm9jdXNUYWJiYWJsZSgpLGUuX3RyaWdnZXIoImZvY3VzIil9KSx0aGlzLl90cmlnZ2VyKCJvcGVuIiksdW5kZWZpbmVkKX0sX2ZvY3VzVGFiYmFibGU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVsZW1lbnQuZmluZCgiW2F1dG9mb2N1c10iKTt0Lmxlbmd0aHx8KHQ9dGhpcy5lbGVtZW50LmZpbmQoIjp0YWJiYWJsZSIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZ0J1dHRvblBhbmUuZmluZCgiOnRhYmJhYmxlIikpLHQubGVuZ3RofHwodD10aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZS5maWx0ZXIoIjp0YWJiYWJsZSIpKSx0Lmxlbmd0aHx8KHQ9dGhpcy51aURpYWxvZyksdC5lcSgwKS5mb2N1cygpfSxfa2VlcEZvY3VzOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXt2YXIgZT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQsaT10aGlzLnVpRGlhbG9nWzBdPT09ZXx8dC5jb250YWlucyh0aGlzLnVpRGlhbG9nWzBdLGUpO2l8fHRoaXMuX2ZvY3VzVGFiYmFibGUoKX1lLnByZXZlbnREZWZhdWx0KCksaS5jYWxsKHRoaXMpLHRoaXMuX2RlbGF5KGkpfSxfY3JlYXRlV3JhcHBlcjpmdW5jdGlvbigpe3RoaXMudWlEaWFsb2c9dCgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLWZyb250ICIrdGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5oaWRlKCkuYXR0cih7dGFiSW5kZXg6LTEscm9sZToiZGlhbG9nIn0pLmFwcGVuZFRvKHRoaXMuX2FwcGVuZFRvKCkpLHRoaXMuX29uKHRoaXMudWlEaWFsb2cse2tleWRvd246ZnVuY3Rpb24oZSl7aWYodGhpcy5vcHRpb25zLmNsb3NlT25Fc2NhcGUmJiFlLmlzRGVmYXVsdFByZXZlbnRlZCgpJiZlLmtleUNvZGUmJmUua2V5Q29kZT09PXQudWkua2V5Q29kZS5FU0NBUEUpcmV0dXJuIGUucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKGUpLHVuZGVmaW5lZDtpZihlLmtleUNvZGU9PT10LnVpLmtleUNvZGUuVEFCKXt2YXIgaT10aGlzLnVpRGlhbG9nLmZpbmQoIjp0YWJiYWJsZSIpLHM9aS5maWx0ZXIoIjpmaXJzdCIpLG49aS5maWx0ZXIoIjpsYXN0Iik7ZS50YXJnZXQhPT1uWzBdJiZlLnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fGUuc2hpZnRLZXk/ZS50YXJnZXQhPT1zWzBdJiZlLnRhcmdldCE9PXRoaXMudWlEaWFsb2dbMF18fCFlLnNoaWZ0S2V5fHwobi5mb2N1cygxKSxlLnByZXZlbnREZWZhdWx0KCkpOihzLmZvY3VzKDEpLGUucHJldmVudERlZmF1bHQoKSl9fSxtb3VzZWRvd246ZnVuY3Rpb24odCl7dGhpcy5fbW92ZVRvVG9wKHQpJiZ0aGlzLl9mb2N1c1RhYmJhYmxlKCl9fSksdGhpcy5lbGVtZW50LmZpbmQoIlthcmlhLWRlc2NyaWJlZGJ5XSIpLmxlbmd0aHx8dGhpcy51aURpYWxvZy5hdHRyKHsiYXJpYS1kZXNjcmliZWRieSI6dGhpcy5lbGVtZW50LnVuaXF1ZUlkKCkuYXR0cigiaWQiKX0pfSxfY3JlYXRlVGl0bGViYXI6ZnVuY3Rpb24oKXt2YXIgZTt0aGlzLnVpRGlhbG9nVGl0bGViYXI9dCgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCB1aS1oZWxwZXItY2xlYXJmaXgiKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZyksdGhpcy5fb24odGhpcy51aURpYWxvZ1RpdGxlYmFyLHttb3VzZWRvd246ZnVuY3Rpb24oZSl7dChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLWRpYWxvZy10aXRsZWJhci1jbG9zZSIpfHx0aGlzLnVpRGlhbG9nLmZvY3VzKCl9fSksdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2U9dCgiPGJ1dHRvbj48L2J1dHRvbj4iKS5idXR0b24oe2xhYmVsOnRoaXMub3B0aW9ucy5jbG9zZVRleHQsaWNvbnM6e3ByaW1hcnk6InVpLWljb24tY2xvc2V0aGljayJ9LHRleHQ6ITF9KS5hZGRDbGFzcygidWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIikuYXBwZW5kVG8odGhpcy51aURpYWxvZ1RpdGxlYmFyKSx0aGlzLl9vbih0aGlzLnVpRGlhbG9nVGl0bGViYXJDbG9zZSx7Y2xpY2s6ZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuY2xvc2UodCl9fSksZT10KCI8c3Bhbj4iKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1kaWFsb2ctdGl0bGUiKS5wcmVwZW5kVG8odGhpcy51aURpYWxvZ1RpdGxlYmFyKSx0aGlzLl90aXRsZShlKSx0aGlzLnVpRGlhbG9nLmF0dHIoeyJhcmlhLWxhYmVsbGVkYnkiOmUuYXR0cigiaWQiKX0pfSxfdGl0bGU6ZnVuY3Rpb24odCl7dGhpcy5vcHRpb25zLnRpdGxlfHx0Lmh0bWwoIiYjMTYwOyIpLHQudGV4dCh0aGlzLm9wdGlvbnMudGl0bGUpfSxfY3JlYXRlQnV0dG9uUGFuZTpmdW5jdGlvbigpe3RoaXMudWlEaWFsb2dCdXR0b25QYW5lPXQoIjxkaXY+IikuYWRkQ2xhc3MoInVpLWRpYWxvZy1idXR0b25wYW5lIHVpLXdpZGdldC1jb250ZW50IHVpLWhlbHBlci1jbGVhcmZpeCIpLHRoaXMudWlCdXR0b25TZXQ9dCgiPGRpdj4iKS5hZGRDbGFzcygidWktZGlhbG9nLWJ1dHRvbnNldCIpLmFwcGVuZFRvKHRoaXMudWlEaWFsb2dCdXR0b25QYW5lKSx0aGlzLl9jcmVhdGVCdXR0b25zKCl9LF9jcmVhdGVCdXR0b25zOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxpPXRoaXMub3B0aW9ucy5idXR0b25zO3JldHVybiB0aGlzLnVpRGlhbG9nQnV0dG9uUGFuZS5yZW1vdmUoKSx0aGlzLnVpQnV0dG9uU2V0LmVtcHR5KCksdC5pc0VtcHR5T2JqZWN0KGkpfHx0LmlzQXJyYXkoaSkmJiFpLmxlbmd0aD8odGhpcy51aURpYWxvZy5yZW1vdmVDbGFzcygidWktZGlhbG9nLWJ1dHRvbnMiKSx1bmRlZmluZWQpOih0LmVhY2goaSxmdW5jdGlvbihpLHMpe3ZhciBuLG87cz10LmlzRnVuY3Rpb24ocyk/e2NsaWNrOnMsdGV4dDppfTpzLHM9dC5leHRlbmQoe3R5cGU6ImJ1dHRvbiJ9LHMpLG49cy5jbGljayxzLmNsaWNrPWZ1bmN0aW9uKCl7bi5hcHBseShlLmVsZW1lbnRbMF0sYXJndW1lbnRzKX0sbz17aWNvbnM6cy5pY29ucyx0ZXh0OnMuc2hvd1RleHR9LGRlbGV0ZSBzLmljb25zLGRlbGV0ZSBzLnNob3dUZXh0LHQoIjxidXR0b24+PC9idXR0b24+IixzKS5idXR0b24obykuYXBwZW5kVG8oZS51aUJ1dHRvblNldCl9KSx0aGlzLnVpRGlhbG9nLmFkZENsYXNzKCJ1aS1kaWFsb2ctYnV0dG9ucyIpLHRoaXMudWlEaWFsb2dCdXR0b25QYW5lLmFwcGVuZFRvKHRoaXMudWlEaWFsb2cpLHVuZGVmaW5lZCl9LF9tYWtlRHJhZ2dhYmxlOmZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm57cG9zaXRpb246dC5wb3NpdGlvbixvZmZzZXQ6dC5vZmZzZXR9fXZhciBpPXRoaXMscz10aGlzLm9wdGlvbnM7dGhpcy51aURpYWxvZy5kcmFnZ2FibGUoe2NhbmNlbDoiLnVpLWRpYWxvZy1jb250ZW50LCAudWktZGlhbG9nLXRpdGxlYmFyLWNsb3NlIixoYW5kbGU6Ii51aS1kaWFsb2ctdGl0bGViYXIiLGNvbnRhaW5tZW50OiJkb2N1bWVudCIsc3RhcnQ6ZnVuY3Rpb24ocyxuKXt0KHRoaXMpLmFkZENsYXNzKCJ1aS1kaWFsb2ctZHJhZ2dpbmciKSxpLl9ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoImRyYWdTdGFydCIscyxlKG4pKX0sZHJhZzpmdW5jdGlvbih0LHMpe2kuX3RyaWdnZXIoImRyYWciLHQsZShzKSl9LHN0b3A6ZnVuY3Rpb24obixvKXtzLnBvc2l0aW9uPVtvLnBvc2l0aW9uLmxlZnQtaS5kb2N1bWVudC5zY3JvbGxMZWZ0KCksby5wb3NpdGlvbi50b3AtaS5kb2N1bWVudC5zY3JvbGxUb3AoKV0sdCh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLWRyYWdnaW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoImRyYWdTdG9wIixuLGUobykpfX0pfSxfbWFrZVJlc2l6YWJsZTpmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7cmV0dXJue29yaWdpbmFsUG9zaXRpb246dC5vcmlnaW5hbFBvc2l0aW9uLG9yaWdpbmFsU2l6ZTp0Lm9yaWdpbmFsU2l6ZSxwb3NpdGlvbjp0LnBvc2l0aW9uLHNpemU6dC5zaXplfQp9dmFyIGk9dGhpcyxzPXRoaXMub3B0aW9ucyxuPXMucmVzaXphYmxlLG89dGhpcy51aURpYWxvZy5jc3MoInBvc2l0aW9uIiksYT0ic3RyaW5nIj09dHlwZW9mIG4/bjoibixlLHMsdyxzZSxzdyxuZSxudyI7dGhpcy51aURpYWxvZy5yZXNpemFibGUoe2NhbmNlbDoiLnVpLWRpYWxvZy1jb250ZW50Iixjb250YWlubWVudDoiZG9jdW1lbnQiLGFsc29SZXNpemU6dGhpcy5lbGVtZW50LG1heFdpZHRoOnMubWF4V2lkdGgsbWF4SGVpZ2h0OnMubWF4SGVpZ2h0LG1pbldpZHRoOnMubWluV2lkdGgsbWluSGVpZ2h0OnRoaXMuX21pbkhlaWdodCgpLGhhbmRsZXM6YSxzdGFydDpmdW5jdGlvbihzLG4pe3QodGhpcykuYWRkQ2xhc3MoInVpLWRpYWxvZy1yZXNpemluZyIpLGkuX2Jsb2NrRnJhbWVzKCksaS5fdHJpZ2dlcigicmVzaXplU3RhcnQiLHMsZShuKSl9LHJlc2l6ZTpmdW5jdGlvbih0LHMpe2kuX3RyaWdnZXIoInJlc2l6ZSIsdCxlKHMpKX0sc3RvcDpmdW5jdGlvbihuLG8pe3MuaGVpZ2h0PXQodGhpcykuaGVpZ2h0KCkscy53aWR0aD10KHRoaXMpLndpZHRoKCksdCh0aGlzKS5yZW1vdmVDbGFzcygidWktZGlhbG9nLXJlc2l6aW5nIiksaS5fdW5ibG9ja0ZyYW1lcygpLGkuX3RyaWdnZXIoInJlc2l6ZVN0b3AiLG4sZShvKSl9fSkuY3NzKCJwb3NpdGlvbiIsbyl9LF9taW5IZWlnaHQ6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLm9wdGlvbnM7cmV0dXJuImF1dG8iPT09dC5oZWlnaHQ/dC5taW5IZWlnaHQ6TWF0aC5taW4odC5taW5IZWlnaHQsdC5oZWlnaHQpfSxfcG9zaXRpb246ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnVpRGlhbG9nLmlzKCI6dmlzaWJsZSIpO3R8fHRoaXMudWlEaWFsb2cuc2hvdygpLHRoaXMudWlEaWFsb2cucG9zaXRpb24odGhpcy5vcHRpb25zLnBvc2l0aW9uKSx0fHx0aGlzLnVpRGlhbG9nLmhpZGUoKX0sX3NldE9wdGlvbnM6ZnVuY3Rpb24ocyl7dmFyIG49dGhpcyxvPSExLGE9e307dC5lYWNoKHMsZnVuY3Rpb24odCxzKXtuLl9zZXRPcHRpb24odCxzKSx0IGluIGUmJihvPSEwKSx0IGluIGkmJihhW3RdPXMpfSksbyYmKHRoaXMuX3NpemUoKSx0aGlzLl9wb3NpdGlvbigpKSx0aGlzLnVpRGlhbG9nLmlzKCI6ZGF0YSh1aS1yZXNpemFibGUpIikmJnRoaXMudWlEaWFsb2cucmVzaXphYmxlKCJvcHRpb24iLGEpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuPXRoaXMudWlEaWFsb2c7ImRpYWxvZ0NsYXNzIj09PXQmJm4ucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLmRpYWxvZ0NsYXNzKS5hZGRDbGFzcyhlKSwiZGlzYWJsZWQiIT09dCYmKHRoaXMuX3N1cGVyKHQsZSksImFwcGVuZFRvIj09PXQmJnRoaXMudWlEaWFsb2cuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksImJ1dHRvbnMiPT09dCYmdGhpcy5fY3JlYXRlQnV0dG9ucygpLCJjbG9zZVRleHQiPT09dCYmdGhpcy51aURpYWxvZ1RpdGxlYmFyQ2xvc2UuYnV0dG9uKHtsYWJlbDoiIitlfSksImRyYWdnYWJsZSI9PT10JiYoaT1uLmlzKCI6ZGF0YSh1aS1kcmFnZ2FibGUpIiksaSYmIWUmJm4uZHJhZ2dhYmxlKCJkZXN0cm95IiksIWkmJmUmJnRoaXMuX21ha2VEcmFnZ2FibGUoKSksInBvc2l0aW9uIj09PXQmJnRoaXMuX3Bvc2l0aW9uKCksInJlc2l6YWJsZSI9PT10JiYocz1uLmlzKCI6ZGF0YSh1aS1yZXNpemFibGUpIikscyYmIWUmJm4ucmVzaXphYmxlKCJkZXN0cm95IikscyYmInN0cmluZyI9PXR5cGVvZiBlJiZuLnJlc2l6YWJsZSgib3B0aW9uIiwiaGFuZGxlcyIsZSksc3x8ZT09PSExfHx0aGlzLl9tYWtlUmVzaXphYmxlKCkpLCJ0aXRsZSI9PT10JiZ0aGlzLl90aXRsZSh0aGlzLnVpRGlhbG9nVGl0bGViYXIuZmluZCgiLnVpLWRpYWxvZy10aXRsZSIpKSl9LF9zaXplOmZ1bmN0aW9uKCl7dmFyIHQsZSxpLHM9dGhpcy5vcHRpb25zO3RoaXMuZWxlbWVudC5zaG93KCkuY3NzKHt3aWR0aDoiYXV0byIsbWluSGVpZ2h0OjAsbWF4SGVpZ2h0OiJub25lIixoZWlnaHQ6MH0pLHMubWluV2lkdGg+cy53aWR0aCYmKHMud2lkdGg9cy5taW5XaWR0aCksdD10aGlzLnVpRGlhbG9nLmNzcyh7aGVpZ2h0OiJhdXRvIix3aWR0aDpzLndpZHRofSkub3V0ZXJIZWlnaHQoKSxlPU1hdGgubWF4KDAscy5taW5IZWlnaHQtdCksaT0ibnVtYmVyIj09dHlwZW9mIHMubWF4SGVpZ2h0P01hdGgubWF4KDAscy5tYXhIZWlnaHQtdCk6Im5vbmUiLCJhdXRvIj09PXMuaGVpZ2h0P3RoaXMuZWxlbWVudC5jc3Moe21pbkhlaWdodDplLG1heEhlaWdodDppLGhlaWdodDoiYXV0byJ9KTp0aGlzLmVsZW1lbnQuaGVpZ2h0KE1hdGgubWF4KDAscy5oZWlnaHQtdCkpLHRoaXMudWlEaWFsb2cuaXMoIjpkYXRhKHVpLXJlc2l6YWJsZSkiKSYmdGhpcy51aURpYWxvZy5yZXNpemFibGUoIm9wdGlvbiIsIm1pbkhlaWdodCIsdGhpcy5fbWluSGVpZ2h0KCkpfSxfYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2Nrcz10aGlzLmRvY3VtZW50LmZpbmQoImlmcmFtZSIpLm1hcChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyk7cmV0dXJuIHQoIjxkaXY+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHdpZHRoOmUub3V0ZXJXaWR0aCgpLGhlaWdodDplLm91dGVySGVpZ2h0KCl9KS5hcHBlbmRUbyhlLnBhcmVudCgpKS5vZmZzZXQoZS5vZmZzZXQoKSlbMF19KX0sX3VuYmxvY2tGcmFtZXM6ZnVuY3Rpb24oKXt0aGlzLmlmcmFtZUJsb2NrcyYmKHRoaXMuaWZyYW1lQmxvY2tzLnJlbW92ZSgpLGRlbGV0ZSB0aGlzLmlmcmFtZUJsb2Nrcyl9LF9hbGxvd0ludGVyYWN0aW9uOmZ1bmN0aW9uKGUpe3JldHVybiB0KGUudGFyZ2V0KS5jbG9zZXN0KCIudWktZGlhbG9nIikubGVuZ3RoPyEwOiEhdChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLWRhdGVwaWNrZXIiKS5sZW5ndGh9LF9jcmVhdGVPdmVybGF5OmZ1bmN0aW9uKCl7aWYodGhpcy5vcHRpb25zLm1vZGFsKXt2YXIgZT10aGlzLGk9dGhpcy53aWRnZXRGdWxsTmFtZTt0LnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzfHx0aGlzLl9kZWxheShmdW5jdGlvbigpe3QudWkuZGlhbG9nLm92ZXJsYXlJbnN0YW5jZXMmJnRoaXMuZG9jdW1lbnQuYmluZCgiZm9jdXNpbi5kaWFsb2ciLGZ1bmN0aW9uKHMpe2UuX2FsbG93SW50ZXJhY3Rpb24ocyl8fChzLnByZXZlbnREZWZhdWx0KCksdCgiLnVpLWRpYWxvZzp2aXNpYmxlOmxhc3QgLnVpLWRpYWxvZy1jb250ZW50IikuZGF0YShpKS5fZm9jdXNUYWJiYWJsZSgpKX0pfSksdGhpcy5vdmVybGF5PXQoIjxkaXY+IikuYWRkQ2xhc3MoInVpLXdpZGdldC1vdmVybGF5IHVpLWZyb250IikuYXBwZW5kVG8odGhpcy5fYXBwZW5kVG8oKSksdGhpcy5fb24odGhpcy5vdmVybGF5LHttb3VzZWRvd246Il9rZWVwRm9jdXMifSksdC51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlcysrfX0sX2Rlc3Ryb3lPdmVybGF5OmZ1bmN0aW9uKCl7dGhpcy5vcHRpb25zLm1vZGFsJiZ0aGlzLm92ZXJsYXkmJih0LnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzLS0sdC51aS5kaWFsb2cub3ZlcmxheUluc3RhbmNlc3x8dGhpcy5kb2N1bWVudC51bmJpbmQoImZvY3VzaW4uZGlhbG9nIiksdGhpcy5vdmVybGF5LnJlbW92ZSgpLHRoaXMub3ZlcmxheT1udWxsKX19KSx0LnVpLmRpYWxvZy5vdmVybGF5SW5zdGFuY2VzPTAsdC51aUJhY2tDb21wYXQhPT0hMSYmdC53aWRnZXQoInVpLmRpYWxvZyIsdC51aS5kaWFsb2cse19wb3NpdGlvbjpmdW5jdGlvbigpe3ZhciBlLGk9dGhpcy5vcHRpb25zLnBvc2l0aW9uLHM9W10sbj1bMCwwXTtpPygoInN0cmluZyI9PXR5cGVvZiBpfHwib2JqZWN0Ij09dHlwZW9mIGkmJiIwImluIGkpJiYocz1pLnNwbGl0P2kuc3BsaXQoIiAiKTpbaVswXSxpWzFdXSwxPT09cy5sZW5ndGgmJihzWzFdPXNbMF0pLHQuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbih0LGUpeytzW3RdPT09c1t0XSYmKG5bdF09c1t0XSxzW3RdPWUpfSksaT17bXk6c1swXSsoMD5uWzBdP25bMF06IisiK25bMF0pKyIgIitzWzFdKygwPm5bMV0/blsxXToiKyIrblsxXSksYXQ6cy5qb2luKCIgIil9KSxpPXQuZXh0ZW5kKHt9LHQudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uLGkpKTppPXQudWkuZGlhbG9nLnByb3RvdHlwZS5vcHRpb25zLnBvc2l0aW9uLGU9dGhpcy51aURpYWxvZy5pcygiOnZpc2libGUiKSxlfHx0aGlzLnVpRGlhbG9nLnNob3coKSx0aGlzLnVpRGlhbG9nLnBvc2l0aW9uKGkpLGV8fHRoaXMudWlEaWFsb2cuaGlkZSgpfX0pfShqUXVlcnkpLGZ1bmN0aW9uKHQpe3ZhciBlPS91cHxkb3dufHZlcnRpY2FsLyxpPS91cHxsZWZ0fHZlcnRpY2FsfGhvcml6b250YWwvO3QuZWZmZWN0cy5lZmZlY3QuYmxpbmQ9ZnVuY3Rpb24ocyxuKXt2YXIgbyxhLHIsaD10KHRoaXMpLGw9WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsImhlaWdodCIsIndpZHRoIl0sYz10LmVmZmVjdHMuc2V0TW9kZShoLHMubW9kZXx8ImhpZGUiKSx1PXMuZGlyZWN0aW9ufHwidXAiLGQ9ZS50ZXN0KHUpLHA9ZD8iaGVpZ2h0Ijoid2lkdGgiLGY9ZD8idG9wIjoibGVmdCIsZz1pLnRlc3QodSksbT17fSx2PSJzaG93Ij09PWM7aC5wYXJlbnQoKS5pcygiLnVpLWVmZmVjdHMtd3JhcHBlciIpP3QuZWZmZWN0cy5zYXZlKGgucGFyZW50KCksbCk6dC5lZmZlY3RzLnNhdmUoaCxsKSxoLnNob3coKSxvPXQuZWZmZWN0cy5jcmVhdGVXcmFwcGVyKGgpLmNzcyh7b3ZlcmZsb3c6ImhpZGRlbiJ9KSxhPW9bcF0oKSxyPXBhcnNlRmxvYXQoby5jc3MoZikpfHwwLG1bcF09dj9hOjAsZ3x8KGguY3NzKGQ/ImJvdHRvbSI6InJpZ2h0IiwwKS5jc3MoZD8idG9wIjoibGVmdCIsImF1dG8iKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSJ9KSxtW2ZdPXY/cjphK3IpLHYmJihvLmNzcyhwLDApLGd8fG8uY3NzKGYscithKSksby5hbmltYXRlKG0se2R1cmF0aW9uOnMuZHVyYXRpb24sZWFzaW5nOnMuZWFzaW5nLHF1ZXVlOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7ImhpZGUiPT09YyYmaC5oaWRlKCksdC5lZmZlY3RzLnJlc3RvcmUoaCxsKSx0LmVmZmVjdHMucmVtb3ZlV3JhcHBlcihoKSxuKCl9fSl9fShqUXVlcnkpLGZ1bmN0aW9uKHQpe3QuZWZmZWN0cy5lZmZlY3QuYm91bmNlPWZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvLGE9dCh0aGlzKSxyPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLGg9dC5lZmZlY3RzLnNldE1vZGUoYSxlLm1vZGV8fCJlZmZlY3QiKSxsPSJoaWRlIj09PWgsYz0ic2hvdyI9PT1oLHU9ZS5kaXJlY3Rpb258fCJ1cCIsZD1lLmRpc3RhbmNlLHA9ZS50aW1lc3x8NSxmPTIqcCsoY3x8bD8xOjApLGc9ZS5kdXJhdGlvbi9mLG09ZS5lYXNpbmcsdj0idXAiPT09dXx8ImRvd24iPT09dT8idG9wIjoibGVmdCIsXz0idXAiPT09dXx8ImxlZnQiPT09dSxiPWEucXVldWUoKSx5PWIubGVuZ3RoO2ZvcigoY3x8bCkmJnIucHVzaCgib3BhY2l0eSIpLHQuZWZmZWN0cy5zYXZlKGEsciksYS5zaG93KCksdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIoYSksZHx8KGQ9YVsidG9wIj09PXY/Im91dGVySGVpZ2h0Ijoib3V0ZXJXaWR0aCJdKCkvMyksYyYmKG89e29wYWNpdHk6MX0sb1t2XT0wLGEuY3NzKCJvcGFjaXR5IiwwKS5jc3ModixfPzIqLWQ6MipkKS5hbmltYXRlKG8sZyxtKSksbCYmKGQvPU1hdGgucG93KDIscC0xKSksbz17fSxvW3ZdPTAscz0wO3A+cztzKyspbj17fSxuW3ZdPShfPyItPSI6Iis9IikrZCxhLmFuaW1hdGUobixnLG0pLmFuaW1hdGUobyxnLG0pLGQ9bD8yKmQ6ZC8yO2wmJihuPXtvcGFjaXR5OjB9LG5bdl09KF8/Ii09IjoiKz0iKStkLGEuYW5pbWF0ZShuLGcsbSkpLGEucXVldWUoZnVuY3Rpb24oKXtsJiZhLmhpZGUoKSx0LmVmZmVjdHMucmVzdG9yZShhLHIpLHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGEpLGkoKX0pLHk+MSYmYi5zcGxpY2UuYXBwbHkoYixbMSwwXS5jb25jYXQoYi5zcGxpY2UoeSxmKzEpKSksYS5kZXF1ZXVlKCl9fShqUXVlcnkpLGZ1bmN0aW9uKHQpe3QuZWZmZWN0cy5lZmZlY3QuY2xpcD1mdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPXQodGhpcykscj1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxoPXQuZWZmZWN0cy5zZXRNb2RlKGEsZS5tb2RlfHwiaGlkZSIpLGw9InNob3ciPT09aCxjPWUuZGlyZWN0aW9ufHwidmVydGljYWwiLHU9InZlcnRpY2FsIj09PWMsZD11PyJoZWlnaHQiOiJ3aWR0aCIscD11PyJ0b3AiOiJsZWZ0IixmPXt9O3QuZWZmZWN0cy5zYXZlKGEsciksYS5zaG93KCkscz10LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihhKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbj0iSU1HIj09PWFbMF0udGFnTmFtZT9zOmEsbz1uW2RdKCksbCYmKG4uY3NzKGQsMCksbi5jc3MocCxvLzIpKSxmW2RdPWw/bzowLGZbcF09bD8wOm8vMixuLmFuaW1hdGUoZix7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXtsfHxhLmhpZGUoKSx0LmVmZmVjdHMucmVzdG9yZShhLHIpLHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGEpLGkoKX19KX19KGpRdWVyeSksZnVuY3Rpb24odCl7dC5lZmZlY3RzLmVmZmVjdC5kcm9wPWZ1bmN0aW9uKGUsaSl7dmFyIHMsbj10KHRoaXMpLG89WyJwb3NpdGlvbiIsInRvcCIsImJvdHRvbSIsImxlZnQiLCJyaWdodCIsIm9wYWNpdHkiLCJoZWlnaHQiLCJ3aWR0aCJdLGE9dC5lZmZlY3RzLnNldE1vZGUobixlLm1vZGV8fCJoaWRlIikscj0ic2hvdyI9PT1hLGg9ZS5kaXJlY3Rpb258fCJsZWZ0IixsPSJ1cCI9PT1ofHwiZG93biI9PT1oPyJ0b3AiOiJsZWZ0IixjPSJ1cCI9PT1ofHwibGVmdCI9PT1oPyJwb3MiOiJuZWciLHU9e29wYWNpdHk6cj8xOjB9O3QuZWZmZWN0cy5zYXZlKG4sbyksbi5zaG93KCksdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobikscz1lLmRpc3RhbmNlfHxuWyJ0b3AiPT09bD8ib3V0ZXJIZWlnaHQiOiJvdXRlcldpZHRoIl0oITApLzIsciYmbi5jc3MoIm9wYWNpdHkiLDApLmNzcyhsLCJwb3MiPT09Yz8tczpzKSx1W2xdPShyPyJwb3MiPT09Yz8iKz0iOiItPSI6InBvcyI9PT1jPyItPSI6Iis9IikrcyxuLmFuaW1hdGUodSx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXsiaGlkZSI9PT1hJiZuLmhpZGUoKSx0LmVmZmVjdHMucmVzdG9yZShuLG8pLHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKG4pLGkoKX19KX19KGpRdWVyeSksZnVuY3Rpb24odCl7dC5lZmZlY3RzLmVmZmVjdC5leHBsb2RlPWZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gcygpe2IucHVzaCh0aGlzKSxiLmxlbmd0aD09PXUqZCYmbigpfWZ1bmN0aW9uIG4oKXtwLmNzcyh7dmlzaWJpbGl0eToidmlzaWJsZSJ9KSx0KGIpLnJlbW92ZSgpLGd8fHAuaGlkZSgpLGkoKX12YXIgbyxhLHIsaCxsLGMsdT1lLnBpZWNlcz9NYXRoLnJvdW5kKE1hdGguc3FydChlLnBpZWNlcykpOjMsZD11LHA9dCh0aGlzKSxmPXQuZWZmZWN0cy5zZXRNb2RlKHAsZS5tb2RlfHwiaGlkZSIpLGc9InNob3ciPT09ZixtPXAuc2hvdygpLmNzcygidmlzaWJpbGl0eSIsImhpZGRlbiIpLm9mZnNldCgpLHY9TWF0aC5jZWlsKHAub3V0ZXJXaWR0aCgpL2QpLF89TWF0aC5jZWlsKHAub3V0ZXJIZWlnaHQoKS91KSxiPVtdO2ZvcihvPTA7dT5vO28rKylmb3IoaD1tLnRvcCtvKl8sYz1vLSh1LTEpLzIsYT0wO2Q+YTthKyspcj1tLmxlZnQrYSp2LGw9YS0oZC0xKS8yLHAuY2xvbmUoKS5hcHBlbmRUbygiYm9keSIpLndyYXAoIjxkaXY+PC9kaXY+IikuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHZpc2liaWxpdHk6InZpc2libGUiLGxlZnQ6LWEqdix0b3A6LW8qX30pLnBhcmVudCgpLmFkZENsYXNzKCJ1aS1lZmZlY3RzLWV4cGxvZGUiKS5jc3Moe3Bvc2l0aW9uOiJhYnNvbHV0ZSIsb3ZlcmZsb3c6ImhpZGRlbiIsd2lkdGg6dixoZWlnaHQ6XyxsZWZ0OnIrKGc/bCp2OjApLHRvcDpoKyhnP2MqXzowKSxvcGFjaXR5Omc/MDoxfSkuYW5pbWF0ZSh7bGVmdDpyKyhnPzA6bCp2KSx0b3A6aCsoZz8wOmMqXyksb3BhY2l0eTpnPzE6MH0sZS5kdXJhdGlvbnx8NTAwLGUuZWFzaW5nLHMpfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt0LmVmZmVjdHMuZWZmZWN0LmZhZGU9ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49dC5lZmZlY3RzLnNldE1vZGUocyxlLm1vZGV8fCJ0b2dnbGUiKTtzLmFuaW1hdGUoe29wYWNpdHk6bn0se3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOml9KX19KGpRdWVyeSksZnVuY3Rpb24odCl7dC5lZmZlY3RzLmVmZmVjdC5mb2xkPWZ1bmN0aW9uKGUsaSl7dmFyIHMsbixvPXQodGhpcyksYT1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0IiwiaGVpZ2h0Iiwid2lkdGgiXSxyPXQuZWZmZWN0cy5zZXRNb2RlKG8sZS5tb2RlfHwiaGlkZSIpLGg9InNob3ciPT09cixsPSJoaWRlIj09PXIsYz1lLnNpemV8fDE1LHU9LyhbMC05XSspJS8uZXhlYyhjKSxkPSEhZS5ob3JpekZpcnN0LHA9aCE9PWQsZj1wP1sid2lkdGgiLCJoZWlnaHQiXTpbImhlaWdodCIsIndpZHRoIl0sZz1lLmR1cmF0aW9uLzIsbT17fSx2PXt9O3QuZWZmZWN0cy5zYXZlKG8sYSksby5zaG93KCkscz10LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihvKS5jc3Moe292ZXJmbG93OiJoaWRkZW4ifSksbj1wP1tzLndpZHRoKCkscy5oZWlnaHQoKV06W3MuaGVpZ2h0KCkscy53aWR0aCgpXSx1JiYoYz1wYXJzZUludCh1WzFdLDEwKS8xMDAqbltsPzA6MV0pLGgmJnMuY3NzKGQ/e2hlaWdodDowLHdpZHRoOmN9OntoZWlnaHQ6Yyx3aWR0aDowfSksbVtmWzBdXT1oP25bMF06Yyx2W2ZbMV1dPWg/blsxXTowLHMuYW5pbWF0ZShtLGcsZS5lYXNpbmcpLmFuaW1hdGUodixnLGUuZWFzaW5nLGZ1bmN0aW9uKCl7bCYmby5oaWRlKCksdC5lZmZlY3RzLnJlc3RvcmUobyxhKSx0LmVmZmVjdHMucmVtb3ZlV3JhcHBlcihvKSxpKCl9KX19KGpRdWVyeSksZnVuY3Rpb24odCl7dC5lZmZlY3RzLmVmZmVjdC5oaWdobGlnaHQ9ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49WyJiYWNrZ3JvdW5kSW1hZ2UiLCJiYWNrZ3JvdW5kQ29sb3IiLCJvcGFjaXR5Il0sbz10LmVmZmVjdHMuc2V0TW9kZShzLGUubW9kZXx8InNob3ciKSxhPXtiYWNrZ3JvdW5kQ29sb3I6cy5jc3MoImJhY2tncm91bmRDb2xvciIpfTsiaGlkZSI9PT1vJiYoYS5vcGFjaXR5PTApLHQuZWZmZWN0cy5zYXZlKHMsbikscy5zaG93KCkuY3NzKHtiYWNrZ3JvdW5kSW1hZ2U6Im5vbmUiLGJhY2tncm91bmRDb2xvcjplLmNvbG9yfHwiI2ZmZmY5OSJ9KS5hbmltYXRlKGEse3F1ZXVlOiExLGR1cmF0aW9uOmUuZHVyYXRpb24sZWFzaW5nOmUuZWFzaW5nLGNvbXBsZXRlOmZ1bmN0aW9uKCl7ImhpZGUiPT09byYmcy5oaWRlKCksdC5lZmZlY3RzLnJlc3RvcmUocyxuKSxpKCl9fSl9fShqUXVlcnkpLGZ1bmN0aW9uKHQpe3QuZWZmZWN0cy5lZmZlY3QucHVsc2F0ZT1mdW5jdGlvbihlLGkpe3ZhciBzLG49dCh0aGlzKSxvPXQuZWZmZWN0cy5zZXRNb2RlKG4sZS5tb2RlfHwic2hvdyIpLGE9InNob3ciPT09byxyPSJoaWRlIj09PW8saD1hfHwiaGlkZSI9PT1vLGw9MiooZS50aW1lc3x8NSkrKGg/MTowKSxjPWUuZHVyYXRpb24vbCx1PTAsZD1uLnF1ZXVlKCkscD1kLmxlbmd0aDtmb3IoKGF8fCFuLmlzKCI6dmlzaWJsZSIpKSYmKG4uY3NzKCJvcGFjaXR5IiwwKS5zaG93KCksdT0xKSxzPTE7bD5zO3MrKyluLmFuaW1hdGUoe29wYWNpdHk6dX0sYyxlLmVhc2luZyksdT0xLXU7bi5hbmltYXRlKHtvcGFjaXR5OnV9LGMsZS5lYXNpbmcpLG4ucXVldWUoZnVuY3Rpb24oKXtyJiZuLmhpZGUoKSxpKCl9KSxwPjEmJmQuc3BsaWNlLmFwcGx5KGQsWzEsMF0uY29uY2F0KGQuc3BsaWNlKHAsbCsxKSkpLG4uZGVxdWV1ZSgpfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt0LmVmZmVjdHMuZWZmZWN0LnB1ZmY9ZnVuY3Rpb24oZSxpKXt2YXIgcz10KHRoaXMpLG49dC5lZmZlY3RzLnNldE1vZGUocyxlLm1vZGV8fCJoaWRlIiksbz0iaGlkZSI9PT1uLGE9cGFyc2VJbnQoZS5wZXJjZW50LDEwKXx8MTUwLHI9YS8xMDAsaD17aGVpZ2h0OnMuaGVpZ2h0KCksd2lkdGg6cy53aWR0aCgpLG91dGVySGVpZ2h0OnMub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOnMub3V0ZXJXaWR0aCgpfTt0LmV4dGVuZChlLHtlZmZlY3Q6InNjYWxlIixxdWV1ZTohMSxmYWRlOiEwLG1vZGU6bixjb21wbGV0ZTppLHBlcmNlbnQ6bz9hOjEwMCxmcm9tOm8/aDp7aGVpZ2h0OmguaGVpZ2h0KnIsd2lkdGg6aC53aWR0aCpyLG91dGVySGVpZ2h0Omgub3V0ZXJIZWlnaHQqcixvdXRlcldpZHRoOmgub3V0ZXJXaWR0aCpyfX0pLHMuZWZmZWN0KGUpfSx0LmVmZmVjdHMuZWZmZWN0LnNjYWxlPWZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKSxuPXQuZXh0ZW5kKCEwLHt9LGUpLG89dC5lZmZlY3RzLnNldE1vZGUocyxlLm1vZGV8fCJlZmZlY3QiKSxhPXBhcnNlSW50KGUucGVyY2VudCwxMCl8fCgwPT09cGFyc2VJbnQoZS5wZXJjZW50LDEwKT8wOiJoaWRlIj09PW8/MDoxMDApLHI9ZS5kaXJlY3Rpb258fCJib3RoIixoPWUub3JpZ2luLGw9e2hlaWdodDpzLmhlaWdodCgpLHdpZHRoOnMud2lkdGgoKSxvdXRlckhlaWdodDpzLm91dGVySGVpZ2h0KCksb3V0ZXJXaWR0aDpzLm91dGVyV2lkdGgoKX0sYz17eToiaG9yaXpvbnRhbCIhPT1yP2EvMTAwOjEseDoidmVydGljYWwiIT09cj9hLzEwMDoxfTtuLmVmZmVjdD0ic2l6ZSIsbi5xdWV1ZT0hMSxuLmNvbXBsZXRlPWksImVmZmVjdCIhPT1vJiYobi5vcmlnaW49aHx8WyJtaWRkbGUiLCJjZW50ZXIiXSxuLnJlc3RvcmU9ITApLG4uZnJvbT1lLmZyb218fCgic2hvdyI9PT1vP3toZWlnaHQ6MCx3aWR0aDowLG91dGVySGVpZ2h0OjAsb3V0ZXJXaWR0aDowfTpsKSxuLnRvPXtoZWlnaHQ6bC5oZWlnaHQqYy55LHdpZHRoOmwud2lkdGgqYy54LG91dGVySGVpZ2h0Omwub3V0ZXJIZWlnaHQqYy55LG91dGVyV2lkdGg6bC5vdXRlcldpZHRoKmMueH0sbi5mYWRlJiYoInNob3ciPT09byYmKG4uZnJvbS5vcGFjaXR5PTAsbi50by5vcGFjaXR5PTEpLCJoaWRlIj09PW8mJihuLmZyb20ub3BhY2l0eT0xLG4udG8ub3BhY2l0eT0wKSkscy5lZmZlY3Qobil9LHQuZWZmZWN0cy5lZmZlY3Quc2l6ZT1mdW5jdGlvbihlLGkpe3ZhciBzLG4sbyxhPXQodGhpcykscj1bInBvc2l0aW9uIiwidG9wIiwiYm90dG9tIiwibGVmdCIsInJpZ2h0Iiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxoPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJvdmVyZmxvdyIsIm9wYWNpdHkiXSxsPVsid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyJdLGM9WyJmb250U2l6ZSJdLHU9WyJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbVdpZHRoIiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iXSxkPVsiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHRXaWR0aCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0Il0scD10LmVmZmVjdHMuc2V0TW9kZShhLGUubW9kZXx8ImVmZmVjdCIpLGY9ZS5yZXN0b3JlfHwiZWZmZWN0IiE9PXAsZz1lLnNjYWxlfHwiYm90aCIsbT1lLm9yaWdpbnx8WyJtaWRkbGUiLCJjZW50ZXIiXSx2PWEuY3NzKCJwb3NpdGlvbiIpLF89Zj9yOmgsYj17aGVpZ2h0OjAsd2lkdGg6MCxvdXRlckhlaWdodDowLG91dGVyV2lkdGg6MH07InNob3ciPT09cCYmYS5zaG93KCkscz17aGVpZ2h0OmEuaGVpZ2h0KCksd2lkdGg6YS53aWR0aCgpLG91dGVySGVpZ2h0OmEub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOmEub3V0ZXJXaWR0aCgpfSwidG9nZ2xlIj09PWUubW9kZSYmInNob3ciPT09cD8oYS5mcm9tPWUudG98fGIsYS50bz1lLmZyb218fHMpOihhLmZyb209ZS5mcm9tfHwoInNob3ciPT09cD9iOnMpLGEudG89ZS50b3x8KCJoaWRlIj09PXA/YjpzKSksbz17ZnJvbTp7eTphLmZyb20uaGVpZ2h0L3MuaGVpZ2h0LHg6YS5mcm9tLndpZHRoL3Mud2lkdGh9LHRvOnt5OmEudG8uaGVpZ2h0L3MuaGVpZ2h0LHg6YS50by53aWR0aC9zLndpZHRofX0sKCJib3giPT09Z3x8ImJvdGgiPT09ZykmJihvLmZyb20ueSE9PW8udG8ueSYmKF89Xy5jb25jYXQodSksYS5mcm9tPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsdSxvLmZyb20ueSxhLmZyb20pLGEudG89dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSx1LG8udG8ueSxhLnRvKSksby5mcm9tLnghPT1vLnRvLngmJihfPV8uY29uY2F0KGQpLGEuZnJvbT10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihhLGQsby5mcm9tLngsYS5mcm9tKSxhLnRvPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsZCxvLnRvLngsYS50bykpKSwoImNvbnRlbnQiPT09Z3x8ImJvdGgiPT09ZykmJm8uZnJvbS55IT09by50by55JiYoXz1fLmNvbmNhdChjKS5jb25jYXQobCksYS5mcm9tPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGEsYyxvLmZyb20ueSxhLmZyb20pLGEudG89dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oYSxjLG8udG8ueSxhLnRvKSksdC5lZmZlY3RzLnNhdmUoYSxfKSxhLnNob3coKSx0LmVmZmVjdHMuY3JlYXRlV3JhcHBlcihhKSxhLmNzcygib3ZlcmZsb3ciLCJoaWRkZW4iKS5jc3MoYS5mcm9tKSxtJiYobj10LmVmZmVjdHMuZ2V0QmFzZWxpbmUobSxzKSxhLmZyb20udG9wPShzLm91dGVySGVpZ2h0LWEub3V0ZXJIZWlnaHQoKSkqbi55LGEuZnJvbS5sZWZ0PShzLm91dGVyV2lkdGgtYS5vdXRlcldpZHRoKCkpKm4ueCxhLnRvLnRvcD0ocy5vdXRlckhlaWdodC1hLnRvLm91dGVySGVpZ2h0KSpuLnksYS50by5sZWZ0PShzLm91dGVyV2lkdGgtYS50by5vdXRlcldpZHRoKSpuLngpLGEuY3NzKGEuZnJvbSksKCJjb250ZW50Ij09PWd8fCJib3RoIj09PWcpJiYodT11LmNvbmNhdChbIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSJdKS5jb25jYXQoYyksZD1kLmNvbmNhdChbIm1hcmdpbkxlZnQiLCJtYXJnaW5SaWdodCJdKSxsPXIuY29uY2F0KHUpLmNvbmNhdChkKSxhLmZpbmQoIipbd2lkdGhdIikuZWFjaChmdW5jdGlvbigpe3ZhciBpPXQodGhpcykscz17aGVpZ2h0OmkuaGVpZ2h0KCksd2lkdGg6aS53aWR0aCgpLG91dGVySGVpZ2h0Omkub3V0ZXJIZWlnaHQoKSxvdXRlcldpZHRoOmkub3V0ZXJXaWR0aCgpfTtmJiZ0LmVmZmVjdHMuc2F2ZShpLGwpLGkuZnJvbT17aGVpZ2h0OnMuaGVpZ2h0Km8uZnJvbS55LHdpZHRoOnMud2lkdGgqby5mcm9tLngsb3V0ZXJIZWlnaHQ6cy5vdXRlckhlaWdodCpvLmZyb20ueSxvdXRlcldpZHRoOnMub3V0ZXJXaWR0aCpvLmZyb20ueH0saS50bz17aGVpZ2h0OnMuaGVpZ2h0Km8udG8ueSx3aWR0aDpzLndpZHRoKm8udG8ueCxvdXRlckhlaWdodDpzLmhlaWdodCpvLnRvLnksb3V0ZXJXaWR0aDpzLndpZHRoKm8udG8ueH0sby5mcm9tLnkhPT1vLnRvLnkmJihpLmZyb209dC5lZmZlY3RzLnNldFRyYW5zaXRpb24oaSx1LG8uZnJvbS55LGkuZnJvbSksaS50bz10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLHUsby50by55LGkudG8pKSxvLmZyb20ueCE9PW8udG8ueCYmKGkuZnJvbT10LmVmZmVjdHMuc2V0VHJhbnNpdGlvbihpLGQsby5mcm9tLngsaS5mcm9tKSxpLnRvPXQuZWZmZWN0cy5zZXRUcmFuc2l0aW9uKGksZCxvLnRvLngsaS50bykpLGkuY3NzKGkuZnJvbSksaS5hbmltYXRlKGkudG8sZS5kdXJhdGlvbixlLmVhc2luZyxmdW5jdGlvbigpe2YmJnQuZWZmZWN0cy5yZXN0b3JlKGksbCl9KX0pKSxhLmFuaW1hdGUoYS50byx7cXVldWU6ITEsZHVyYXRpb246ZS5kdXJhdGlvbixlYXNpbmc6ZS5lYXNpbmcsY29tcGxldGU6ZnVuY3Rpb24oKXswPT09YS50by5vcGFjaXR5JiZhLmNzcygib3BhY2l0eSIsYS5mcm9tLm9wYWNpdHkpLCJoaWRlIj09PXAmJmEuaGlkZSgpLHQuZWZmZWN0cy5yZXN0b3JlKGEsXyksZnx8KCJzdGF0aWMiPT09dj9hLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIix0b3A6YS50by50b3AsbGVmdDphLnRvLmxlZnR9KTp0LmVhY2goWyJ0b3AiLCJsZWZ0Il0sZnVuY3Rpb24odCxlKXthLmNzcyhlLGZ1bmN0aW9uKGUsaSl7dmFyIHM9cGFyc2VJbnQoaSwxMCksbj10P2EudG8ubGVmdDphLnRvLnRvcDtyZXR1cm4iYXV0byI9PT1pP24rInB4IjpzK24rInB4In0pfSkpLHQuZWZmZWN0cy5yZW1vdmVXcmFwcGVyKGEpLGkoKX19KX19KGpRdWVyeSksZnVuY3Rpb24odCl7dC5lZmZlY3RzLmVmZmVjdC5zaGFrZT1mdW5jdGlvbihlLGkpe3ZhciBzLG49dCh0aGlzKSxvPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJoZWlnaHQiLCJ3aWR0aCJdLGE9dC5lZmZlY3RzLnNldE1vZGUobixlLm1vZGV8fCJlZmZlY3QiKSxyPWUuZGlyZWN0aW9ufHwibGVmdCIsaD1lLmRpc3RhbmNlfHwyMCxsPWUudGltZXN8fDMsYz0yKmwrMSx1PU1hdGgucm91bmQoZS5kdXJhdGlvbi9jKSxkPSJ1cCI9PT1yfHwiZG93biI9PT1yPyJ0b3AiOiJsZWZ0IixwPSJ1cCI9PT1yfHwibGVmdCI9PT1yLGY9e30sZz17fSxtPXt9LHY9bi5xdWV1ZSgpLF89di5sZW5ndGg7Zm9yKHQuZWZmZWN0cy5zYXZlKG4sbyksbi5zaG93KCksdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobiksZltkXT0ocD8iLT0iOiIrPSIpK2gsZ1tkXT0ocD8iKz0iOiItPSIpKzIqaCxtW2RdPShwPyItPSI6Iis9IikrMipoLG4uYW5pbWF0ZShmLHUsZS5lYXNpbmcpLHM9MTtsPnM7cysrKW4uYW5pbWF0ZShnLHUsZS5lYXNpbmcpLmFuaW1hdGUobSx1LGUuZWFzaW5nKTtuLmFuaW1hdGUoZyx1LGUuZWFzaW5nKS5hbmltYXRlKGYsdS8yLGUuZWFzaW5nKS5xdWV1ZShmdW5jdGlvbigpeyJoaWRlIj09PWEmJm4uaGlkZSgpLHQuZWZmZWN0cy5yZXN0b3JlKG4sbyksdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfSksXz4xJiZ2LnNwbGljZS5hcHBseSh2LFsxLDBdLmNvbmNhdCh2LnNwbGljZShfLGMrMSkpKSxuLmRlcXVldWUoKX19KGpRdWVyeSksZnVuY3Rpb24odCl7dC5lZmZlY3RzLmVmZmVjdC5zbGlkZT1mdW5jdGlvbihlLGkpe3ZhciBzLG49dCh0aGlzKSxvPVsicG9zaXRpb24iLCJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiLCJ3aWR0aCIsImhlaWdodCJdLGE9dC5lZmZlY3RzLnNldE1vZGUobixlLm1vZGV8fCJzaG93Iikscj0ic2hvdyI9PT1hLGg9ZS5kaXJlY3Rpb258fCJsZWZ0IixsPSJ1cCI9PT1ofHwiZG93biI9PT1oPyJ0b3AiOiJsZWZ0IixjPSJ1cCI9PT1ofHwibGVmdCI9PT1oLHU9e307dC5lZmZlY3RzLnNhdmUobixvKSxuLnNob3coKSxzPWUuZGlzdGFuY2V8fG5bInRvcCI9PT1sPyJvdXRlckhlaWdodCI6Im91dGVyV2lkdGgiXSghMCksdC5lZmZlY3RzLmNyZWF0ZVdyYXBwZXIobikuY3NzKHtvdmVyZmxvdzoiaGlkZGVuIn0pLHImJm4uY3NzKGwsYz9pc05hTihzKT8iLSIrczotczpzKSx1W2xdPShyP2M/Iis9IjoiLT0iOmM/Ii09IjoiKz0iKStzLG4uYW5pbWF0ZSh1LHtxdWV1ZTohMSxkdXJhdGlvbjplLmR1cmF0aW9uLGVhc2luZzplLmVhc2luZyxjb21wbGV0ZTpmdW5jdGlvbigpeyJoaWRlIj09PWEmJm4uaGlkZSgpLHQuZWZmZWN0cy5yZXN0b3JlKG4sbyksdC5lZmZlY3RzLnJlbW92ZVdyYXBwZXIobiksaSgpfX0pfX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt0LmVmZmVjdHMuZWZmZWN0LnRyYW5zZmVyPWZ1bmN0aW9uKGUsaSl7dmFyIHM9dCh0aGlzKSxuPXQoZS50byksbz0iZml4ZWQiPT09bi5jc3MoInBvc2l0aW9uIiksYT10KCJib2R5Iikscj1vP2Euc2Nyb2xsVG9wKCk6MCxoPW8/YS5zY3JvbGxMZWZ0KCk6MCxsPW4ub2Zmc2V0KCksYz17dG9wOmwudG9wLXIsbGVmdDpsLmxlZnQtaCxoZWlnaHQ6bi5pbm5lckhlaWdodCgpLHdpZHRoOm4uaW5uZXJXaWR0aCgpfSx1PXMub2Zmc2V0KCksZD10KCI8ZGl2IGNsYXNzPSd1aS1lZmZlY3RzLXRyYW5zZmVyJz48L2Rpdj4iKS5hcHBlbmRUbyhkb2N1bWVudC5ib2R5KS5hZGRDbGFzcyhlLmNsYXNzTmFtZSkuY3NzKHt0b3A6dS50b3AtcixsZWZ0OnUubGVmdC1oLGhlaWdodDpzLmlubmVySGVpZ2h0KCksd2lkdGg6cy5pbm5lcldpZHRoKCkscG9zaXRpb246bz8iZml4ZWQiOiJhYnNvbHV0ZSJ9KS5hbmltYXRlKGMsZS5kdXJhdGlvbixlLmVhc2luZyxmdW5jdGlvbigpe2QucmVtb3ZlKCksaSgpfSl9fShqUXVlcnkpLGZ1bmN0aW9uKHQpe3Qud2lkZ2V0KCJ1aS5tZW51Iix7dmVyc2lvbjoiMS4xMC4zIixkZWZhdWx0RWxlbWVudDoiPHVsPiIsZGVsYXk6MzAwLG9wdGlvbnM6e2ljb25zOntzdWJtZW51OiJ1aS1pY29uLWNhcmF0LTEtZSJ9LG1lbnVzOiJ1bCIscG9zaXRpb246e215OiJsZWZ0IHRvcCIsYXQ6InJpZ2h0IHRvcCJ9LHJvbGU6Im1lbnUiLGJsdXI6bnVsbCxmb2N1czpudWxsLHNlbGVjdDpudWxsfSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVNZW51PXRoaXMuZWxlbWVudCx0aGlzLm1vdXNlSGFuZGxlZD0hMSx0aGlzLmVsZW1lbnQudW5pcXVlSWQoKS5hZGRDbGFzcygidWktbWVudSB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnRvZ2dsZUNsYXNzKCJ1aS1tZW51LWljb25zIiwhIXRoaXMuZWxlbWVudC5maW5kKCIudWktaWNvbiIpLmxlbmd0aCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSx0YWJJbmRleDowfSkuYmluZCgiY2xpY2siK3RoaXMuZXZlbnROYW1lc3BhY2UsdC5wcm94eShmdW5jdGlvbih0KXt0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnQucHJldmVudERlZmF1bHQoKX0sdGhpcykpLHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLmF0dHIoImFyaWEtZGlzYWJsZWQiLCJ0cnVlIiksdGhpcy5fb24oeyJtb3VzZWRvd24gLnVpLW1lbnUtaXRlbSA+IGEiOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sImNsaWNrIC51aS1zdGF0ZS1kaXNhYmxlZCA+IGEiOmZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKX0sImNsaWNrIC51aS1tZW51LWl0ZW06aGFzKGEpIjpmdW5jdGlvbihlKXt2YXIgaT10KGUudGFyZ2V0KS5jbG9zZXN0KCIudWktbWVudS1pdGVtIik7IXRoaXMubW91c2VIYW5kbGVkJiZpLm5vdCgiLnVpLXN0YXRlLWRpc2FibGVkIikubGVuZ3RoJiYodGhpcy5tb3VzZUhhbmRsZWQ9ITAsdGhpcy5zZWxlY3QoZSksaS5oYXMoIi51aS1tZW51IikubGVuZ3RoP3RoaXMuZXhwYW5kKGUpOnRoaXMuZWxlbWVudC5pcygiOmZvY3VzIil8fCh0aGlzLmVsZW1lbnQudHJpZ2dlcigiZm9jdXMiLFshMF0pLHRoaXMuYWN0aXZlJiYxPT09dGhpcy5hY3RpdmUucGFyZW50cygiLnVpLW1lbnUiKS5sZW5ndGgmJmNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSkpfSwibW91c2VlbnRlciAudWktbWVudS1pdGVtIjpmdW5jdGlvbihlKXt2YXIgaT10KGUuY3VycmVudFRhcmdldCk7aS5zaWJsaW5ncygpLmNoaWxkcmVuKCIudWktc3RhdGUtYWN0aXZlIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuZm9jdXMoZSxpKX0sbW91c2VsZWF2ZToiY29sbGFwc2VBbGwiLCJtb3VzZWxlYXZlIC51aS1tZW51IjoiY29sbGFwc2VBbGwiLGZvY3VzOmZ1bmN0aW9uKHQsZSl7dmFyIGk9dGhpcy5hY3RpdmV8fHRoaXMuZWxlbWVudC5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmVxKDApO2V8fHRoaXMuZm9jdXModCxpKX0sYmx1cjpmdW5jdGlvbihlKXt0aGlzLl9kZWxheShmdW5jdGlvbigpe3QuY29udGFpbnModGhpcy5lbGVtZW50WzBdLHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCl8fHRoaXMuY29sbGFwc2VBbGwoZSl9KX0sa2V5ZG93bjoiX2tleWRvd24ifSksdGhpcy5yZWZyZXNoKCksdGhpcy5fb24odGhpcy5kb2N1bWVudCx7Y2xpY2s6ZnVuY3Rpb24oZSl7dChlLnRhcmdldCkuY2xvc2VzdCgiLnVpLW1lbnUiKS5sZW5ndGh8fHRoaXMuY29sbGFwc2VBbGwoZSksdGhpcy5tb3VzZUhhbmRsZWQ9ITF9fSl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIpLmZpbmQoIi51aS1tZW51IikuYWRkQmFjaygpLnJlbW92ZUNsYXNzKCJ1aS1tZW51IHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIHVpLW1lbnUtaWNvbnMiKS5yZW1vdmVBdHRyKCJyb2xlIikucmVtb3ZlQXR0cigidGFiSW5kZXgiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWV4cGFuZGVkIikucmVtb3ZlQXR0cigiYXJpYS1oaWRkZW4iKS5yZW1vdmVBdHRyKCJhcmlhLWRpc2FibGVkIikucmVtb3ZlVW5pcXVlSWQoKS5zaG93KCksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWl0ZW0iKS5yZW1vdmVDbGFzcygidWktbWVudS1pdGVtIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKS5jaGlsZHJlbigiYSIpLnJlbW92ZVVuaXF1ZUlkKCkucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwgdWktc3RhdGUtaG92ZXIiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLWhhc3BvcHVwIikuY2hpbGRyZW4oKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtlLmRhdGEoInVpLW1lbnUtc3VibWVudS1jYXJhdCIpJiZlLnJlbW92ZSgpfSksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWRpdmlkZXIiKS5yZW1vdmVDbGFzcygidWktbWVudS1kaXZpZGVyIHVpLXdpZGdldC1jb250ZW50Iil9LF9rZXlkb3duOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkodCl7cmV0dXJuIHQucmVwbGFjZSgvW1wtXFtcXXt9KCkqKz8uLFxcXF4kfCNcc10vZywiXFwkJiIpfXZhciBzLG4sbyxhLHIsaD0hMDtzd2l0Y2goZS5rZXlDb2RlKXtjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOnRoaXMucHJldmlvdXNQYWdlKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlBBR0VfRE9XTjp0aGlzLm5leHRQYWdlKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkhPTUU6dGhpcy5fbW92ZSgiZmlyc3QiLCJmaXJzdCIsZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOnRoaXMuX21vdmUoImxhc3QiLCJsYXN0IixlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5VUDp0aGlzLnByZXZpb3VzKGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkRPV046dGhpcy5uZXh0KGUpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLkxFRlQ6dGhpcy5jb2xsYXBzZShlKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5SSUdIVDp0aGlzLmFjdGl2ZSYmIXRoaXMuYWN0aXZlLmlzKCIudWktc3RhdGUtZGlzYWJsZWQiKSYmdGhpcy5leHBhbmQoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5URVI6Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6dGhpcy5fYWN0aXZhdGUoZSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRVNDQVBFOnRoaXMuY29sbGFwc2UoZSk7YnJlYWs7ZGVmYXVsdDpoPSExLG49dGhpcy5wcmV2aW91c0ZpbHRlcnx8IiIsbz1TdHJpbmcuZnJvbUNoYXJDb2RlKGUua2V5Q29kZSksYT0hMSxjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lciksbz09PW4/YT0hMDpvPW4rbyxyPVJlZ0V4cCgiXiIraShvKSwiaSIpLHM9dGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIudGVzdCh0KHRoaXMpLmNoaWxkcmVuKCJhIikudGV4dCgpKX0pLHM9YSYmLTEhPT1zLmluZGV4KHRoaXMuYWN0aXZlLm5leHQoKSk/dGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpOnMscy5sZW5ndGh8fChvPVN0cmluZy5mcm9tQ2hhckNvZGUoZS5rZXlDb2RlKSxyPVJlZ0V4cCgiXiIraShvKSwiaSIpLHM9dGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIikuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIHIudGVzdCh0KHRoaXMpLmNoaWxkcmVuKCJhIikudGV4dCgpKX0pKSxzLmxlbmd0aD8odGhpcy5mb2N1cyhlLHMpLHMubGVuZ3RoPjE/KHRoaXMucHJldmlvdXNGaWx0ZXI9byx0aGlzLmZpbHRlclRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7ZGVsZXRlIHRoaXMucHJldmlvdXNGaWx0ZXJ9LDFlMykpOmRlbGV0ZSB0aGlzLnByZXZpb3VzRmlsdGVyKTpkZWxldGUgdGhpcy5wcmV2aW91c0ZpbHRlcn1oJiZlLnByZXZlbnREZWZhdWx0KCl9LF9hY3RpdmF0ZTpmdW5jdGlvbih0KXt0aGlzLmFjdGl2ZS5pcygiLnVpLXN0YXRlLWRpc2FibGVkIil8fCh0aGlzLmFjdGl2ZS5jaGlsZHJlbigiYVthcmlhLWhhc3BvcHVwPSd0cnVlJ10iKS5sZW5ndGg/dGhpcy5leHBhbmQodCk6dGhpcy5zZWxlY3QodCkpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGUsaT10aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSxzPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5tZW51cyk7cy5maWx0ZXIoIjpub3QoLnVpLW1lbnUpIikuYWRkQ2xhc3MoInVpLW1lbnUgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS5oaWRlKCkuYXR0cih7cm9sZTp0aGlzLm9wdGlvbnMucm9sZSwiYXJpYS1oaWRkZW4iOiJ0cnVlIiwiYXJpYS1leHBhbmRlZCI6ImZhbHNlIn0pLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpLHM9ZS5wcmV2KCJhIiksbj10KCI8c3Bhbj4iKS5hZGRDbGFzcygidWktbWVudS1pY29uIHVpLWljb24gIitpKS5kYXRhKCJ1aS1tZW51LXN1Ym1lbnUtY2FyYXQiLCEwKTtzLmF0dHIoImFyaWEtaGFzcG9wdXAiLCJ0cnVlIikucHJlcGVuZChuKSxlLmF0dHIoImFyaWEtbGFiZWxsZWRieSIscy5hdHRyKCJpZCIpKX0pLGU9cy5hZGQodGhpcy5lbGVtZW50KSxlLmNoaWxkcmVuKCI6bm90KC51aS1tZW51LWl0ZW0pOmhhcyhhKSIpLmFkZENsYXNzKCJ1aS1tZW51LWl0ZW0iKS5hdHRyKCJyb2xlIiwicHJlc2VudGF0aW9uIikuY2hpbGRyZW4oImEiKS51bmlxdWVJZCgpLmFkZENsYXNzKCJ1aS1jb3JuZXItYWxsIikuYXR0cih7dGFiSW5kZXg6LTEscm9sZTp0aGlzLl9pdGVtUm9sZSgpfSksZS5jaGlsZHJlbigiOm5vdCgudWktbWVudS1pdGVtKSIpLmVhY2goZnVuY3Rpb24oKXt2YXIgZT10KHRoaXMpOy9bXlwtXHUyMDE0XHUyMDEzXHNdLy50ZXN0KGUudGV4dCgpKXx8ZS5hZGRDbGFzcygidWktd2lkZ2V0LWNvbnRlbnQgdWktbWVudS1kaXZpZGVyIil9KSxlLmNoaWxkcmVuKCIudWktc3RhdGUtZGlzYWJsZWQiKS5hdHRyKCJhcmlhLWRpc2FibGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZlJiYhdC5jb250YWlucyh0aGlzLmVsZW1lbnRbMF0sdGhpcy5hY3RpdmVbMF0pJiZ0aGlzLmJsdXIoKX0sX2l0ZW1Sb2xlOmZ1bmN0aW9uKCl7cmV0dXJue21lbnU6Im1lbnVpdGVtIixsaXN0Ym94OiJvcHRpb24ifVt0aGlzLm9wdGlvbnMucm9sZV19LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXsiaWNvbnMiPT09dCYmdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51LWljb24iKS5yZW1vdmVDbGFzcyh0aGlzLm9wdGlvbnMuaWNvbnMuc3VibWVudSkuYWRkQ2xhc3MoZS5zdWJtZW51KSx0aGlzLl9zdXBlcih0LGUpfSxmb2N1czpmdW5jdGlvbih0LGUpe3ZhciBpLHM7dGhpcy5ibHVyKHQsdCYmImZvY3VzIj09PXQudHlwZSksdGhpcy5fc2Nyb2xsSW50b1ZpZXcoZSksdGhpcy5hY3RpdmU9ZS5maXJzdCgpLHM9dGhpcy5hY3RpdmUuY2hpbGRyZW4oImEiKS5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKSx0aGlzLm9wdGlvbnMucm9sZSYmdGhpcy5lbGVtZW50LmF0dHIoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIscy5hdHRyKCJpZCIpKSx0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIikuY2hpbGRyZW4oImE6Zmlyc3QiKS5hZGRDbGFzcygidWktc3RhdGUtYWN0aXZlIiksdCYmImtleWRvd24iPT09dC50eXBlP3RoaXMuX2Nsb3NlKCk6dGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuX2Nsb3NlKCl9LHRoaXMuZGVsYXkpLGk9ZS5jaGlsZHJlbigiLnVpLW1lbnUiKSxpLmxlbmd0aCYmL15tb3VzZS8udGVzdCh0LnR5cGUpJiZ0aGlzLl9zdGFydE9wZW5pbmcoaSksdGhpcy5hY3RpdmVNZW51PWUucGFyZW50KCksdGhpcy5fdHJpZ2dlcigiZm9jdXMiLHQse2l0ZW06ZX0pfSxfc2Nyb2xsSW50b1ZpZXc6ZnVuY3Rpb24oZSl7dmFyIGkscyxuLG8sYSxyO3RoaXMuX2hhc1Njcm9sbCgpJiYoaT1wYXJzZUZsb2F0KHQuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwiYm9yZGVyVG9wV2lkdGgiKSl8fDAscz1wYXJzZUZsb2F0KHQuY3NzKHRoaXMuYWN0aXZlTWVudVswXSwicGFkZGluZ1RvcCIpKXx8MCxuPWUub2Zmc2V0KCkudG9wLXRoaXMuYWN0aXZlTWVudS5vZmZzZXQoKS50b3AtaS1zLG89dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcCgpLGE9dGhpcy5hY3RpdmVNZW51LmhlaWdodCgpLHI9ZS5oZWlnaHQoKSwwPm4/dGhpcy5hY3RpdmVNZW51LnNjcm9sbFRvcChvK24pOm4rcj5hJiZ0aGlzLmFjdGl2ZU1lbnUuc2Nyb2xsVG9wKG8rbi1hK3IpKX0sYmx1cjpmdW5jdGlvbih0LGUpe2V8fGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLmFjdGl2ZSYmKHRoaXMuYWN0aXZlLmNoaWxkcmVuKCJhIikucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWZvY3VzIiksdGhpcy5hY3RpdmU9bnVsbCx0aGlzLl90cmlnZ2VyKCJibHVyIix0LHtpdGVtOnRoaXMuYWN0aXZlfSkpfSxfc3RhcnRPcGVuaW5nOmZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0aGlzLnRpbWVyKSwidHJ1ZSI9PT10LmF0dHIoImFyaWEtaGlkZGVuIikmJih0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fY2xvc2UoKSx0aGlzLl9vcGVuKHQpfSx0aGlzLmRlbGF5KSl9LF9vcGVuOmZ1bmN0aW9uKGUpe3ZhciBpPXQuZXh0ZW5kKHtvZjp0aGlzLmFjdGl2ZX0sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51Iikubm90KGUucGFyZW50cygiLnVpLW1lbnUiKSkuaGlkZSgpLmF0dHIoImFyaWEtaGlkZGVuIiwidHJ1ZSIpLGUuc2hvdygpLnJlbW92ZUF0dHIoImFyaWEtaGlkZGVuIikuYXR0cigiYXJpYS1leHBhbmRlZCIsInRydWUiKS5wb3NpdGlvbihpKX0sY29sbGFwc2VBbGw6ZnVuY3Rpb24oZSxpKXtjbGVhclRpbWVvdXQodGhpcy50aW1lciksdGhpcy50aW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3ZhciBzPWk/dGhpcy5lbGVtZW50OnQoZSYmZS50YXJnZXQpLmNsb3Nlc3QodGhpcy5lbGVtZW50LmZpbmQoIi51aS1tZW51IikpO3MubGVuZ3RofHwocz10aGlzLmVsZW1lbnQpLHRoaXMuX2Nsb3NlKHMpLHRoaXMuYmx1cihlKSx0aGlzLmFjdGl2ZU1lbnU9c30sdGhpcy5kZWxheSl9LF9jbG9zZTpmdW5jdGlvbih0KXt0fHwodD10aGlzLmFjdGl2ZT90aGlzLmFjdGl2ZS5wYXJlbnQoKTp0aGlzLmVsZW1lbnQpLHQuZmluZCgiLnVpLW1lbnUiKS5oaWRlKCkuYXR0cigiYXJpYS1oaWRkZW4iLCJ0cnVlIikuYXR0cigiYXJpYS1leHBhbmRlZCIsImZhbHNlIikuZW5kKCkuZmluZCgiYS51aS1zdGF0ZS1hY3RpdmUiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIil9LGNvbGxhcHNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuYWN0aXZlJiZ0aGlzLmFjdGl2ZS5wYXJlbnQoKS5jbG9zZXN0KCIudWktbWVudS1pdGVtIix0aGlzLmVsZW1lbnQpO2UmJmUubGVuZ3RoJiYodGhpcy5fY2xvc2UoKSx0aGlzLmZvY3VzKHQsZSkpfSxleHBhbmQ6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5hY3RpdmUmJnRoaXMuYWN0aXZlLmNoaWxkcmVuKCIudWktbWVudSAiKS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpLmZpcnN0KCk7ZSYmZS5sZW5ndGgmJih0aGlzLl9vcGVuKGUucGFyZW50KCkpLHRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5mb2N1cyh0LGUpfSkpfSxuZXh0OmZ1bmN0aW9uKHQpe3RoaXMuX21vdmUoIm5leHQiLCJmaXJzdCIsdCl9LHByZXZpb3VzOmZ1bmN0aW9uKHQpe3RoaXMuX21vdmUoInByZXYiLCJsYXN0Iix0KX0saXNGaXJzdEl0ZW06ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmUmJiF0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikubGVuZ3RofSxpc0xhc3RJdGVtOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYWN0aXZlJiYhdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmxlbmd0aH0sX21vdmU6ZnVuY3Rpb24odCxlLGkpe3ZhciBzO3RoaXMuYWN0aXZlJiYocz0iZmlyc3QiPT09dHx8Imxhc3QiPT09dD90aGlzLmFjdGl2ZVsiZmlyc3QiPT09dD8icHJldkFsbCI6Im5leHRBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKC0xKTp0aGlzLmFjdGl2ZVt0KyJBbGwiXSgiLnVpLW1lbnUtaXRlbSIpLmVxKDApKSxzJiZzLmxlbmd0aCYmdGhpcy5hY3RpdmV8fChzPXRoaXMuYWN0aXZlTWVudS5jaGlsZHJlbigiLnVpLW1lbnUtaXRlbSIpW2VdKCkpLHRoaXMuZm9jdXMoaSxzKX0sbmV4dFBhZ2U6ZnVuY3Rpb24oZSl7dmFyIGkscyxuO3JldHVybiB0aGlzLmFjdGl2ZT8odGhpcy5pc0xhc3RJdGVtKCl8fCh0aGlzLl9oYXNTY3JvbGwoKT8ocz10aGlzLmFjdGl2ZS5vZmZzZXQoKS50b3Asbj10aGlzLmVsZW1lbnQuaGVpZ2h0KCksdGhpcy5hY3RpdmUubmV4dEFsbCgiLnVpLW1lbnUtaXRlbSIpLmVhY2goZnVuY3Rpb24oKXtyZXR1cm4gaT10KHRoaXMpLDA+aS5vZmZzZXQoKS50b3Atcy1ufSksdGhpcy5mb2N1cyhlLGkpKTp0aGlzLmZvY3VzKGUsdGhpcy5hY3RpdmVNZW51LmNoaWxkcmVuKCIudWktbWVudS1pdGVtIilbdGhpcy5hY3RpdmU/Imxhc3QiOiJmaXJzdCJdKCkpKSx1bmRlZmluZWQpOih0aGlzLm5leHQoZSksdW5kZWZpbmVkKX0scHJldmlvdXNQYWdlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbjtyZXR1cm4gdGhpcy5hY3RpdmU/KHRoaXMuaXNGaXJzdEl0ZW0oKXx8KHRoaXMuX2hhc1Njcm9sbCgpPyhzPXRoaXMuYWN0aXZlLm9mZnNldCgpLnRvcCxuPXRoaXMuZWxlbWVudC5oZWlnaHQoKSx0aGlzLmFjdGl2ZS5wcmV2QWxsKCIudWktbWVudS1pdGVtIikuZWFjaChmdW5jdGlvbigpe3JldHVybiBpPXQodGhpcyksaS5vZmZzZXQoKS50b3AtcytuPjB9KSx0aGlzLmZvY3VzKGUsaSkpOnRoaXMuZm9jdXMoZSx0aGlzLmFjdGl2ZU1lbnUuY2hpbGRyZW4oIi51aS1tZW51LWl0ZW0iKS5maXJzdCgpKSksdW5kZWZpbmVkKToodGhpcy5uZXh0KGUpLHVuZGVmaW5lZCl9LF9oYXNTY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCk8dGhpcy5lbGVtZW50LnByb3AoInNjcm9sbEhlaWdodCIpfSxzZWxlY3Q6ZnVuY3Rpb24oZSl7dGhpcy5hY3RpdmU9dGhpcy5hY3RpdmV8fHQoZS50YXJnZXQpLmNsb3Nlc3QoIi51aS1tZW51LWl0ZW0iKTt2YXIgaT17aXRlbTp0aGlzLmFjdGl2ZX07dGhpcy5hY3RpdmUuaGFzKCIudWktbWVudSIpLmxlbmd0aHx8dGhpcy5jb2xsYXBzZUFsbChlLCEwKSx0aGlzLl90cmlnZ2VyKCJzZWxlY3QiLGUsaSl9fSl9KGpRdWVyeSksZnVuY3Rpb24odCxlKXtmdW5jdGlvbiBpKHQsZSxpKXtyZXR1cm5bcGFyc2VGbG9hdCh0WzBdKSoocC50ZXN0KHRbMF0pP2UvMTAwOjEpLHBhcnNlRmxvYXQodFsxXSkqKHAudGVzdCh0WzFdKT9pLzEwMDoxKV19ZnVuY3Rpb24gcyhlLGkpe3JldHVybiBwYXJzZUludCh0LmNzcyhlLGkpLDEwKXx8MH1mdW5jdGlvbiBuKGUpe3ZhciBpPWVbMF07cmV0dXJuIDk9PT1pLm5vZGVUeXBlP3t3aWR0aDplLndpZHRoKCksaGVpZ2h0OmUuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6MCxsZWZ0OjB9fTp0LmlzV2luZG93KGkpP3t3aWR0aDplLndpZHRoKCksaGVpZ2h0OmUuaGVpZ2h0KCksb2Zmc2V0Ont0b3A6ZS5zY3JvbGxUb3AoKSxsZWZ0OmUuc2Nyb2xsTGVmdCgpfX06aS5wcmV2ZW50RGVmYXVsdD97d2lkdGg6MCxoZWlnaHQ6MCxvZmZzZXQ6e3RvcDppLnBhZ2VZLGxlZnQ6aS5wYWdlWH19Ont3aWR0aDplLm91dGVyV2lkdGgoKSxoZWlnaHQ6ZS5vdXRlckhlaWdodCgpLG9mZnNldDplLm9mZnNldCgpfX10LnVpPXQudWl8fHt9O3ZhciBvLGE9TWF0aC5tYXgscj1NYXRoLmFicyxoPU1hdGgucm91bmQsbD0vbGVmdHxjZW50ZXJ8cmlnaHQvLGM9L3RvcHxjZW50ZXJ8Ym90dG9tLyx1PS9bXCtcLV1cZCsoXC5bXGRdKyk/JT8vLGQ9L15cdysvLHA9LyUkLyxmPXQuZm4ucG9zaXRpb247dC5wb3NpdGlvbj17c2Nyb2xsYmFyV2lkdGg6ZnVuY3Rpb24oKXtpZihvIT09ZSlyZXR1cm4gbzt2YXIgaSxzLG49dCgiPGRpdiBzdHlsZT0nZGlzcGxheTpibG9jazt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPjxkaXYgc3R5bGU9J2hlaWdodDoxMDBweDt3aWR0aDphdXRvOyc+PC9kaXY+PC9kaXY+IiksYT1uLmNoaWxkcmVuKClbMF07cmV0dXJuIHQoImJvZHkiKS5hcHBlbmQobiksaT1hLm9mZnNldFdpZHRoLG4uY3NzKCJvdmVyZmxvdyIsInNjcm9sbCIpLHM9YS5vZmZzZXRXaWR0aCxpPT09cyYmKHM9blswXS5jbGllbnRXaWR0aCksbi5yZW1vdmUoKSxvPWktc30sZ2V0U2Nyb2xsSW5mbzpmdW5jdGlvbihlKXt2YXIgaT1lLmlzV2luZG93PyIiOmUuZWxlbWVudC5jc3MoIm92ZXJmbG93LXgiKSxzPWUuaXNXaW5kb3c/IiI6ZS5lbGVtZW50LmNzcygib3ZlcmZsb3cteSIpLG49InNjcm9sbCI9PT1pfHwiYXV0byI9PT1pJiZlLndpZHRoPGUuZWxlbWVudFswXS5zY3JvbGxXaWR0aCxvPSJzY3JvbGwiPT09c3x8ImF1dG8iPT09cyYmZS5oZWlnaHQ8ZS5lbGVtZW50WzBdLnNjcm9sbEhlaWdodDtyZXR1cm57d2lkdGg6bz90LnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MCxoZWlnaHQ6bj90LnBvc2l0aW9uLnNjcm9sbGJhcldpZHRoKCk6MH19LGdldFdpdGhpbkluZm86ZnVuY3Rpb24oZSl7dmFyIGk9dChlfHx3aW5kb3cpLHM9dC5pc1dpbmRvdyhpWzBdKTtyZXR1cm57ZWxlbWVudDppLGlzV2luZG93OnMsb2Zmc2V0Omkub2Zmc2V0KCl8fHtsZWZ0OjAsdG9wOjB9LHNjcm9sbExlZnQ6aS5zY3JvbGxMZWZ0KCksc2Nyb2xsVG9wOmkuc2Nyb2xsVG9wKCksd2lkdGg6cz9pLndpZHRoKCk6aS5vdXRlcldpZHRoKCksaGVpZ2h0OnM/aS5oZWlnaHQoKTppLm91dGVySGVpZ2h0KCl9fX0sdC5mbi5wb3NpdGlvbj1mdW5jdGlvbihlKXtpZighZXx8IWUub2YpcmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpO2U9dC5leHRlbmQoe30sZSk7dmFyIG8scCxnLG0sdixfLGI9dChlLm9mKSx5PXQucG9zaXRpb24uZ2V0V2l0aGluSW5mbyhlLndpdGhpbiksdz10LnBvc2l0aW9uLmdldFNjcm9sbEluZm8oeSksaz0oZS5jb2xsaXNpb258fCJmbGlwIikuc3BsaXQoIiAiKSx4PXt9O3JldHVybiBfPW4oYiksYlswXS5wcmV2ZW50RGVmYXVsdCYmKGUuYXQ9ImxlZnQgdG9wIikscD1fLndpZHRoLGc9Xy5oZWlnaHQsbT1fLm9mZnNldCx2PXQuZXh0ZW5kKHt9LG0pLHQuZWFjaChbIm15IiwiYXQiXSxmdW5jdGlvbigpe3ZhciB0LGkscz0oZVt0aGlzXXx8IiIpLnNwbGl0KCIgIik7MT09PXMubGVuZ3RoJiYocz1sLnRlc3Qoc1swXSk/cy5jb25jYXQoWyJjZW50ZXIiXSk6Yy50ZXN0KHNbMF0pP1siY2VudGVyIl0uY29uY2F0KHMpOlsiY2VudGVyIiwiY2VudGVyIl0pLHNbMF09bC50ZXN0KHNbMF0pP3NbMF06ImNlbnRlciIsc1sxXT1jLnRlc3Qoc1sxXSk/c1sxXToiY2VudGVyIix0PXUuZXhlYyhzWzBdKSxpPXUuZXhlYyhzWzFdKSx4W3RoaXNdPVt0P3RbMF06MCxpP2lbMF06MF0sZVt0aGlzXT1bZC5leGVjKHNbMF0pWzBdLGQuZXhlYyhzWzFdKVswXV19KSwxPT09ay5sZW5ndGgmJihrWzFdPWtbMF0pLCJyaWdodCI9PT1lLmF0WzBdP3YubGVmdCs9cDoiY2VudGVyIj09PWUuYXRbMF0mJih2LmxlZnQrPXAvMiksImJvdHRvbSI9PT1lLmF0WzFdP3YudG9wKz1nOiJjZW50ZXIiPT09ZS5hdFsxXSYmKHYudG9wKz1nLzIpLG89aSh4LmF0LHAsZyksdi5sZWZ0Kz1vWzBdLHYudG9wKz1vWzFdLHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuLGwsYz10KHRoaXMpLHU9Yy5vdXRlcldpZHRoKCksZD1jLm91dGVySGVpZ2h0KCksZj1zKHRoaXMsIm1hcmdpbkxlZnQiKSxfPXModGhpcywibWFyZ2luVG9wIiksRD11K2Yrcyh0aGlzLCJtYXJnaW5SaWdodCIpK3cud2lkdGgsQz1kK18rcyh0aGlzLCJtYXJnaW5Cb3R0b20iKSt3LmhlaWdodCxJPXQuZXh0ZW5kKHt9LHYpLFA9aSh4Lm15LGMub3V0ZXJXaWR0aCgpLGMub3V0ZXJIZWlnaHQoKSk7InJpZ2h0Ij09PWUubXlbMF0/SS5sZWZ0LT11OiJjZW50ZXIiPT09ZS5teVswXSYmKEkubGVmdC09dS8yKSwiYm90dG9tIj09PWUubXlbMV0/SS50b3AtPWQ6ImNlbnRlciI9PT1lLm15WzFdJiYoSS50b3AtPWQvMiksSS5sZWZ0Kz1QWzBdLEkudG9wKz1QWzFdLHQuc3VwcG9ydC5vZmZzZXRGcmFjdGlvbnN8fChJLmxlZnQ9aChJLmxlZnQpLEkudG9wPWgoSS50b3ApKSxuPXttYXJnaW5MZWZ0OmYsbWFyZ2luVG9wOl99LHQuZWFjaChbImxlZnQiLCJ0b3AiXSxmdW5jdGlvbihpLHMpe3QudWkucG9zaXRpb25ba1tpXV0mJnQudWkucG9zaXRpb25ba1tpXV1bc10oSSx7dGFyZ2V0V2lkdGg6cCx0YXJnZXRIZWlnaHQ6ZyxlbGVtV2lkdGg6dSxlbGVtSGVpZ2h0OmQsY29sbGlzaW9uUG9zaXRpb246bixjb2xsaXNpb25XaWR0aDpELGNvbGxpc2lvbkhlaWdodDpDLG9mZnNldDpbb1swXStQWzBdLG9bMV0rUFsxXV0sbXk6ZS5teSxhdDplLmF0LHdpdGhpbjp5LGVsZW06Y30pfSksZS51c2luZyYmKGw9ZnVuY3Rpb24odCl7dmFyIGk9bS5sZWZ0LUkubGVmdCxzPWkrcC11LG49bS50b3AtSS50b3Asbz1uK2ctZCxoPXt0YXJnZXQ6e2VsZW1lbnQ6YixsZWZ0Om0ubGVmdCx0b3A6bS50b3Asd2lkdGg6cCxoZWlnaHQ6Z30sZWxlbWVudDp7ZWxlbWVudDpjLGxlZnQ6SS5sZWZ0LHRvcDpJLnRvcCx3aWR0aDp1LGhlaWdodDpkfSxob3Jpem9udGFsOjA+cz8ibGVmdCI6aT4wPyJyaWdodCI6ImNlbnRlciIsdmVydGljYWw6MD5vPyJ0b3AiOm4+MD8iYm90dG9tIjoibWlkZGxlIn07dT5wJiZwPnIoaStzKSYmKGguaG9yaXpvbnRhbD0iY2VudGVyIiksZD5nJiZnPnIobitvKSYmKGgudmVydGljYWw9Im1pZGRsZSIpLGguaW1wb3J0YW50PWEocihpKSxyKHMpKT5hKHIobikscihvKSk/Imhvcml6b250YWwiOiJ2ZXJ0aWNhbCIsZS51c2luZy5jYWxsKHRoaXMsdCxoKX0pLGMub2Zmc2V0KHQuZXh0ZW5kKEkse3VzaW5nOmx9KSl9KX0sdC51aS5wb3NpdGlvbj17Zml0OntsZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIGkscz1lLndpdGhpbixuPXMuaXNXaW5kb3c/cy5zY3JvbGxMZWZ0OnMub2Zmc2V0LmxlZnQsbz1zLndpZHRoLHI9dC5sZWZ0LWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCxoPW4tcixsPXIrZS5jb2xsaXNpb25XaWR0aC1vLW47ZS5jb2xsaXNpb25XaWR0aD5vP2g+MCYmMD49bD8oaT10LmxlZnQraCtlLmNvbGxpc2lvbldpZHRoLW8tbix0LmxlZnQrPWgtaSk6dC5sZWZ0PWw+MCYmMD49aD9uOmg+bD9uK28tZS5jb2xsaXNpb25XaWR0aDpuOmg+MD90LmxlZnQrPWg6bD4wP3QubGVmdC09bDp0LmxlZnQ9YSh0LmxlZnQtcix0LmxlZnQpfSx0b3A6ZnVuY3Rpb24odCxlKXt2YXIgaSxzPWUud2l0aGluLG49cy5pc1dpbmRvdz9zLnNjcm9sbFRvcDpzLm9mZnNldC50b3Asbz1lLndpdGhpbi5oZWlnaHQscj10LnRvcC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxoPW4tcixsPXIrZS5jb2xsaXNpb25IZWlnaHQtby1uO2UuY29sbGlzaW9uSGVpZ2h0Pm8/aD4wJiYwPj1sPyhpPXQudG9wK2grZS5jb2xsaXNpb25IZWlnaHQtby1uLHQudG9wKz1oLWkpOnQudG9wPWw+MCYmMD49aD9uOmg+bD9uK28tZS5jb2xsaXNpb25IZWlnaHQ6bjpoPjA/dC50b3ArPWg6bD4wP3QudG9wLT1sOnQudG9wPWEodC50b3Atcix0LnRvcCl9fSxmbGlwOntsZWZ0OmZ1bmN0aW9uKHQsZSl7dmFyIGkscyxuPWUud2l0aGluLG89bi5vZmZzZXQubGVmdCtuLnNjcm9sbExlZnQsYT1uLndpZHRoLGg9bi5pc1dpbmRvdz9uLnNjcm9sbExlZnQ6bi5vZmZzZXQubGVmdCxsPXQubGVmdC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsYz1sLWgsdT1sK2UuY29sbGlzaW9uV2lkdGgtYS1oLGQ9ImxlZnQiPT09ZS5teVswXT8tZS5lbGVtV2lkdGg6InJpZ2h0Ij09PWUubXlbMF0/ZS5lbGVtV2lkdGg6MCxwPSJsZWZ0Ij09PWUuYXRbMF0/ZS50YXJnZXRXaWR0aDoicmlnaHQiPT09ZS5hdFswXT8tZS50YXJnZXRXaWR0aDowLGY9LTIqZS5vZmZzZXRbMF07MD5jPyhpPXQubGVmdCtkK3ArZitlLmNvbGxpc2lvbldpZHRoLWEtbywoMD5pfHxyKGMpPmkpJiYodC5sZWZ0Kz1kK3ArZikpOnU+MCYmKHM9dC5sZWZ0LWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCtkK3ArZi1oLChzPjB8fHU+cihzKSkmJih0LmxlZnQrPWQrcCtmKSl9LHRvcDpmdW5jdGlvbih0LGUpe3ZhciBpLHMsbj1lLndpdGhpbixvPW4ub2Zmc2V0LnRvcCtuLnNjcm9sbFRvcCxhPW4uaGVpZ2h0LGg9bi5pc1dpbmRvdz9uLnNjcm9sbFRvcDpuLm9mZnNldC50b3AsbD10LnRvcC1lLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpblRvcCxjPWwtaCx1PWwrZS5jb2xsaXNpb25IZWlnaHQtYS1oLGQ9InRvcCI9PT1lLm15WzFdLHA9ZD8tZS5lbGVtSGVpZ2h0OiJib3R0b20iPT09ZS5teVsxXT9lLmVsZW1IZWlnaHQ6MCxmPSJ0b3AiPT09ZS5hdFsxXT9lLnRhcmdldEhlaWdodDoiYm90dG9tIj09PWUuYXRbMV0/LWUudGFyZ2V0SGVpZ2h0OjAsZz0tMiplLm9mZnNldFsxXTswPmM/KHM9dC50b3ArcCtmK2crZS5jb2xsaXNpb25IZWlnaHQtYS1vLHQudG9wK3ArZitnPmMmJigwPnN8fHIoYyk+cykmJih0LnRvcCs9cCtmK2cpKTp1PjAmJihpPXQudG9wLWUuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luVG9wK3ArZitnLWgsdC50b3ArcCtmK2c+dSYmKGk+MHx8dT5yKGkpKSYmKHQudG9wKz1wK2YrZykpfX0sZmxpcGZpdDp7bGVmdDpmdW5jdGlvbigpe3QudWkucG9zaXRpb24uZmxpcC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LnVpLnBvc2l0aW9uLmZpdC5sZWZ0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdG9wOmZ1bmN0aW9uKCl7dC51aS5wb3NpdGlvbi5mbGlwLnRvcC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdC51aS5wb3NpdGlvbi5maXQudG9wLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19fSxmdW5jdGlvbigpe3ZhciBlLGkscyxuLG8sYT1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiYm9keSIpWzBdLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7ZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGE/ImRpdiI6ImJvZHkiKSxzPXt2aXNpYmlsaXR5OiJoaWRkZW4iLHdpZHRoOjAsaGVpZ2h0OjAsYm9yZGVyOjAsbWFyZ2luOjAsYmFja2dyb3VuZDoibm9uZSJ9LGEmJnQuZXh0ZW5kKHMse3Bvc2l0aW9uOiJhYnNvbHV0ZSIsbGVmdDoiLTEwMDBweCIsdG9wOiItMTAwMHB4In0pO2ZvcihvIGluIHMpZS5zdHlsZVtvXT1zW29dO2UuYXBwZW5kQ2hpbGQociksaT1hfHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsaS5pbnNlcnRCZWZvcmUoZSxpLmZpcnN0Q2hpbGQpLHIuc3R5bGUuY3NzVGV4dD0icG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMC43NDMyMjIycHg7IixuPXQocikub2Zmc2V0KCkubGVmdCx0LnN1cHBvcnQub2Zmc2V0RnJhY3Rpb25zPW4+MTAmJjExPm4sZS5pbm5lckhUTUw9IiIsaS5yZW1vdmVDaGlsZChlKX0oKX0oalF1ZXJ5KSxmdW5jdGlvbih0LGUpe3Qud2lkZ2V0KCJ1aS5wcm9ncmVzc2JhciIse3ZlcnNpb246IjEuMTAuMyIsb3B0aW9uczp7bWF4OjEwMCx2YWx1ZTowLGNoYW5nZTpudWxsLGNvbXBsZXRlOm51bGx9LG1pbjowLF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLm9sZFZhbHVlPXRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKCksdGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLmF0dHIoe3JvbGU6InByb2dyZXNzYmFyIiwiYXJpYS12YWx1ZW1pbiI6dGhpcy5taW59KSx0aGlzLnZhbHVlRGl2PXQoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLXZhbHVlIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWxlZnQnPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksdGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9kZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1wcm9ncmVzc2JhciB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWluIikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW1heCIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVub3ciKSx0aGlzLnZhbHVlRGl2LnJlbW92ZSgpCn0sdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PT1lP3RoaXMub3B0aW9ucy52YWx1ZToodGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX2NvbnN0cmFpbmVkVmFsdWUodCksdGhpcy5fcmVmcmVzaFZhbHVlKCksZSl9LF9jb25zdHJhaW5lZFZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0PT09ZSYmKHQ9dGhpcy5vcHRpb25zLnZhbHVlKSx0aGlzLmluZGV0ZXJtaW5hdGU9dD09PSExLCJudW1iZXIiIT10eXBlb2YgdCYmKHQ9MCksdGhpcy5pbmRldGVybWluYXRlPyExOk1hdGgubWluKHRoaXMub3B0aW9ucy5tYXgsTWF0aC5tYXgodGhpcy5taW4sdCkpfSxfc2V0T3B0aW9uczpmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlO2RlbGV0ZSB0LnZhbHVlLHRoaXMuX3N1cGVyKHQpLHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl9jb25zdHJhaW5lZFZhbHVlKGUpLHRoaXMuX3JlZnJlc2hWYWx1ZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKHQsZSl7Im1heCI9PT10JiYoZT1NYXRoLm1heCh0aGlzLm1pbixlKSksdGhpcy5fc3VwZXIodCxlKX0sX3BlcmNlbnRhZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmRldGVybWluYXRlPzEwMDoxMDAqKHRoaXMub3B0aW9ucy52YWx1ZS10aGlzLm1pbikvKHRoaXMub3B0aW9ucy5tYXgtdGhpcy5taW4pfSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLnZhbHVlLGk9dGhpcy5fcGVyY2VudGFnZSgpO3RoaXMudmFsdWVEaXYudG9nZ2xlKHRoaXMuaW5kZXRlcm1pbmF0ZXx8ZT50aGlzLm1pbikudG9nZ2xlQ2xhc3MoInVpLWNvcm5lci1yaWdodCIsZT09PXRoaXMub3B0aW9ucy5tYXgpLndpZHRoKGkudG9GaXhlZCgwKSsiJSIpLHRoaXMuZWxlbWVudC50b2dnbGVDbGFzcygidWktcHJvZ3Jlc3NiYXItaW5kZXRlcm1pbmF0ZSIsdGhpcy5pbmRldGVybWluYXRlKSx0aGlzLmluZGV0ZXJtaW5hdGU/KHRoaXMuZWxlbWVudC5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbm93IiksdGhpcy5vdmVybGF5RGl2fHwodGhpcy5vdmVybGF5RGl2PXQoIjxkaXYgY2xhc3M9J3VpLXByb2dyZXNzYmFyLW92ZXJsYXknPjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMudmFsdWVEaXYpKSk6KHRoaXMuZWxlbWVudC5hdHRyKHsiYXJpYS12YWx1ZW1heCI6dGhpcy5vcHRpb25zLm1heCwiYXJpYS12YWx1ZW5vdyI6ZX0pLHRoaXMub3ZlcmxheURpdiYmKHRoaXMub3ZlcmxheURpdi5yZW1vdmUoKSx0aGlzLm92ZXJsYXlEaXY9bnVsbCkpLHRoaXMub2xkVmFsdWUhPT1lJiYodGhpcy5vbGRWYWx1ZT1lLHRoaXMuX3RyaWdnZXIoImNoYW5nZSIpKSxlPT09dGhpcy5vcHRpb25zLm1heCYmdGhpcy5fdHJpZ2dlcigiY29tcGxldGUiKX19KX0oalF1ZXJ5KSxmdW5jdGlvbih0KXt2YXIgZT01O3Qud2lkZ2V0KCJ1aS5zbGlkZXIiLHQudWkubW91c2Use3ZlcnNpb246IjEuMTAuMyIsd2lkZ2V0RXZlbnRQcmVmaXg6InNsaWRlIixvcHRpb25zOnthbmltYXRlOiExLGRpc3RhbmNlOjAsbWF4OjEwMCxtaW46MCxvcmllbnRhdGlvbjoiaG9yaXpvbnRhbCIscmFuZ2U6ITEsc3RlcDoxLHZhbHVlOjAsdmFsdWVzOm51bGwsY2hhbmdlOm51bGwsc2xpZGU6bnVsbCxzdGFydDpudWxsLHN0b3A6bnVsbH0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuX2tleVNsaWRpbmc9ITEsdGhpcy5fbW91c2VTbGlkaW5nPSExLHRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5faGFuZGxlSW5kZXg9bnVsbCx0aGlzLl9kZXRlY3RPcmllbnRhdGlvbigpLHRoaXMuX21vdXNlSW5pdCgpLHRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci0iK3RoaXMub3JpZW50YXRpb24rIiB1aS13aWRnZXQiKyIgdWktd2lkZ2V0LWNvbnRlbnQiKyIgdWktY29ybmVyLWFsbCIpLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9zZXRPcHRpb24oImRpc2FibGVkIix0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX2FuaW1hdGVPZmY9ITF9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fY3JlYXRlUmFuZ2UoKSx0aGlzLl9jcmVhdGVIYW5kbGVzKCksdGhpcy5fc2V0dXBFdmVudHMoKSx0aGlzLl9yZWZyZXNoVmFsdWUoKX0sX2NyZWF0ZUhhbmRsZXM6ZnVuY3Rpb24oKXt2YXIgZSxpLHM9dGhpcy5vcHRpb25zLG49dGhpcy5lbGVtZW50LmZpbmQoIi51aS1zbGlkZXItaGFuZGxlIikuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCIpLG89IjxhIGNsYXNzPSd1aS1zbGlkZXItaGFuZGxlIHVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLWFsbCcgaHJlZj0nIyc+PC9hPiIsYT1bXTtmb3IoaT1zLnZhbHVlcyYmcy52YWx1ZXMubGVuZ3RofHwxLG4ubGVuZ3RoPmkmJihuLnNsaWNlKGkpLnJlbW92ZSgpLG49bi5zbGljZSgwLGkpKSxlPW4ubGVuZ3RoO2k+ZTtlKyspYS5wdXNoKG8pO3RoaXMuaGFuZGxlcz1uLmFkZCh0KGEuam9pbigiIikpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCkpLHRoaXMuaGFuZGxlPXRoaXMuaGFuZGxlcy5lcSgwKSx0aGlzLmhhbmRsZXMuZWFjaChmdW5jdGlvbihlKXt0KHRoaXMpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiLGUpfSl9LF9jcmVhdGVSYW5nZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3B0aW9ucyxpPSIiO2UucmFuZ2U/KGUucmFuZ2U9PT0hMCYmKGUudmFsdWVzP2UudmFsdWVzLmxlbmd0aCYmMiE9PWUudmFsdWVzLmxlbmd0aD9lLnZhbHVlcz1bZS52YWx1ZXNbMF0sZS52YWx1ZXNbMF1dOnQuaXNBcnJheShlLnZhbHVlcykmJihlLnZhbHVlcz1lLnZhbHVlcy5zbGljZSgwKSk6ZS52YWx1ZXM9W3RoaXMuX3ZhbHVlTWluKCksdGhpcy5fdmFsdWVNaW4oKV0pLHRoaXMucmFuZ2UmJnRoaXMucmFuZ2UubGVuZ3RoP3RoaXMucmFuZ2UucmVtb3ZlQ2xhc3MoInVpLXNsaWRlci1yYW5nZS1taW4gdWktc2xpZGVyLXJhbmdlLW1heCIpLmNzcyh7bGVmdDoiIixib3R0b206IiJ9KToodGhpcy5yYW5nZT10KCI8ZGl2PjwvZGl2PiIpLmFwcGVuZFRvKHRoaXMuZWxlbWVudCksaT0idWktc2xpZGVyLXJhbmdlIHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLHRoaXMucmFuZ2UuYWRkQ2xhc3MoaSsoIm1pbiI9PT1lLnJhbmdlfHwibWF4Ij09PWUucmFuZ2U/IiB1aS1zbGlkZXItcmFuZ2UtIitlLnJhbmdlOiIiKSkpOnRoaXMucmFuZ2U9dChbXSl9LF9zZXR1cEV2ZW50czpmdW5jdGlvbigpe3ZhciB0PXRoaXMuaGFuZGxlcy5hZGQodGhpcy5yYW5nZSkuZmlsdGVyKCJhIik7dGhpcy5fb2ZmKHQpLHRoaXMuX29uKHQsdGhpcy5faGFuZGxlRXZlbnRzKSx0aGlzLl9ob3ZlcmFibGUodCksdGhpcy5fZm9jdXNhYmxlKHQpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuaGFuZGxlcy5yZW1vdmUoKSx0aGlzLnJhbmdlLnJlbW92ZSgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc2xpZGVyIHVpLXNsaWRlci1ob3Jpem9udGFsIHVpLXNsaWRlci12ZXJ0aWNhbCB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIpLHRoaXMuX21vdXNlRGVzdHJveSgpfSxfbW91c2VDYXB0dXJlOmZ1bmN0aW9uKGUpe3ZhciBpLHMsbixvLGEscixoLGwsYz10aGlzLHU9dGhpcy5vcHRpb25zO3JldHVybiB1LmRpc2FibGVkPyExOih0aGlzLmVsZW1lbnRTaXplPXt3aWR0aDp0aGlzLmVsZW1lbnQub3V0ZXJXaWR0aCgpLGhlaWdodDp0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKX0sdGhpcy5lbGVtZW50T2Zmc2V0PXRoaXMuZWxlbWVudC5vZmZzZXQoKSxpPXt4OmUucGFnZVgseTplLnBhZ2VZfSxzPXRoaXMuX25vcm1WYWx1ZUZyb21Nb3VzZShpKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSsxLHRoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKGUpe3ZhciBpPU1hdGguYWJzKHMtYy52YWx1ZXMoZSkpOyhuPml8fG49PT1pJiYoZT09PWMuX2xhc3RDaGFuZ2VkVmFsdWV8fGMudmFsdWVzKGUpPT09dS5taW4pKSYmKG49aSxvPXQodGhpcyksYT1lKX0pLHI9dGhpcy5fc3RhcnQoZSxhKSxyPT09ITE/ITE6KHRoaXMuX21vdXNlU2xpZGluZz0hMCx0aGlzLl9oYW5kbGVJbmRleD1hLG8uYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmZvY3VzKCksaD1vLm9mZnNldCgpLGw9IXQoZS50YXJnZXQpLnBhcmVudHMoKS5hZGRCYWNrKCkuaXMoIi51aS1zbGlkZXItaGFuZGxlIiksdGhpcy5fY2xpY2tPZmZzZXQ9bD97bGVmdDowLHRvcDowfTp7bGVmdDplLnBhZ2VYLWgubGVmdC1vLndpZHRoKCkvMix0b3A6ZS5wYWdlWS1oLnRvcC1vLmhlaWdodCgpLzItKHBhcnNlSW50KG8uY3NzKCJib3JkZXJUb3BXaWR0aCIpLDEwKXx8MCktKHBhcnNlSW50KG8uY3NzKCJib3JkZXJCb3R0b21XaWR0aCIpLDEwKXx8MCkrKHBhcnNlSW50KG8uY3NzKCJtYXJnaW5Ub3AiKSwxMCl8fDApfSx0aGlzLmhhbmRsZXMuaGFzQ2xhc3MoInVpLXN0YXRlLWhvdmVyIil8fHRoaXMuX3NsaWRlKGUsYSxzKSx0aGlzLl9hbmltYXRlT2ZmPSEwLCEwKSl9LF9tb3VzZVN0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuITB9LF9tb3VzZURyYWc6ZnVuY3Rpb24odCl7dmFyIGU9e3g6dC5wYWdlWCx5OnQucGFnZVl9LGk9dGhpcy5fbm9ybVZhbHVlRnJvbU1vdXNlKGUpO3JldHVybiB0aGlzLl9zbGlkZSh0LHRoaXMuX2hhbmRsZUluZGV4LGkpLCExfSxfbW91c2VTdG9wOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmhhbmRsZXMucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHRoaXMuX21vdXNlU2xpZGluZz0hMSx0aGlzLl9zdG9wKHQsdGhpcy5faGFuZGxlSW5kZXgpLHRoaXMuX2NoYW5nZSh0LHRoaXMuX2hhbmRsZUluZGV4KSx0aGlzLl9oYW5kbGVJbmRleD1udWxsLHRoaXMuX2NsaWNrT2Zmc2V0PW51bGwsdGhpcy5fYW5pbWF0ZU9mZj0hMSwhMX0sX2RldGVjdE9yaWVudGF0aW9uOmZ1bmN0aW9uKCl7dGhpcy5vcmllbnRhdGlvbj0idmVydGljYWwiPT09dGhpcy5vcHRpb25zLm9yaWVudGF0aW9uPyJ2ZXJ0aWNhbCI6Imhvcml6b250YWwifSxfbm9ybVZhbHVlRnJvbU1vdXNlOmZ1bmN0aW9uKHQpe3ZhciBlLGkscyxuLG87cmV0dXJuImhvcml6b250YWwiPT09dGhpcy5vcmllbnRhdGlvbj8oZT10aGlzLmVsZW1lbnRTaXplLndpZHRoLGk9dC54LXRoaXMuZWxlbWVudE9mZnNldC5sZWZ0LSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC5sZWZ0OjApKTooZT10aGlzLmVsZW1lbnRTaXplLmhlaWdodCxpPXQueS10aGlzLmVsZW1lbnRPZmZzZXQudG9wLSh0aGlzLl9jbGlja09mZnNldD90aGlzLl9jbGlja09mZnNldC50b3A6MCkpLHM9aS9lLHM+MSYmKHM9MSksMD5zJiYocz0wKSwidmVydGljYWwiPT09dGhpcy5vcmllbnRhdGlvbiYmKHM9MS1zKSxuPXRoaXMuX3ZhbHVlTWF4KCktdGhpcy5fdmFsdWVNaW4oKSxvPXRoaXMuX3ZhbHVlTWluKCkrcypuLHRoaXMuX3RyaW1BbGlnblZhbHVlKG8pfSxfc3RhcnQ6ZnVuY3Rpb24odCxlKXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1tlXSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3JldHVybiB0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGkudmFsdWU9dGhpcy52YWx1ZXMoZSksaS52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigic3RhcnQiLHQsaSl9LF9zbGlkZTpmdW5jdGlvbih0LGUsaSl7dmFyIHMsbixvO3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoPyhzPXRoaXMudmFsdWVzKGU/MDoxKSwyPT09dGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgmJnRoaXMub3B0aW9ucy5yYW5nZT09PSEwJiYoMD09PWUmJmk+c3x8MT09PWUmJnM+aSkmJihpPXMpLGkhPT10aGlzLnZhbHVlcyhlKSYmKG49dGhpcy52YWx1ZXMoKSxuW2VdPWksbz10aGlzLl90cmlnZ2VyKCJzbGlkZSIsdCx7aGFuZGxlOnRoaXMuaGFuZGxlc1tlXSx2YWx1ZTppLHZhbHVlczpufSkscz10aGlzLnZhbHVlcyhlPzA6MSksbyE9PSExJiZ0aGlzLnZhbHVlcyhlLGksITApKSk6aSE9PXRoaXMudmFsdWUoKSYmKG89dGhpcy5fdHJpZ2dlcigic2xpZGUiLHQse2hhbmRsZTp0aGlzLmhhbmRsZXNbZV0sdmFsdWU6aX0pLG8hPT0hMSYmdGhpcy52YWx1ZShpKSl9LF9zdG9wOmZ1bmN0aW9uKHQsZSl7dmFyIGk9e2hhbmRsZTp0aGlzLmhhbmRsZXNbZV0sdmFsdWU6dGhpcy52YWx1ZSgpfTt0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCYmKGkudmFsdWU9dGhpcy52YWx1ZXMoZSksaS52YWx1ZXM9dGhpcy52YWx1ZXMoKSksdGhpcy5fdHJpZ2dlcigic3RvcCIsdCxpKX0sX2NoYW5nZTpmdW5jdGlvbih0LGUpe2lmKCF0aGlzLl9rZXlTbGlkaW5nJiYhdGhpcy5fbW91c2VTbGlkaW5nKXt2YXIgaT17aGFuZGxlOnRoaXMuaGFuZGxlc1tlXSx2YWx1ZTp0aGlzLnZhbHVlKCl9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoJiYoaS52YWx1ZT10aGlzLnZhbHVlcyhlKSxpLnZhbHVlcz10aGlzLnZhbHVlcygpKSx0aGlzLl9sYXN0Q2hhbmdlZFZhbHVlPWUsdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0LGkpfX0sdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl90cmltQWxpZ25WYWx1ZSh0KSx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx1bmRlZmluZWQpOnRoaXMuX3ZhbHVlKCl9LHZhbHVlczpmdW5jdGlvbihlLGkpe3ZhciBzLG4sbztpZihhcmd1bWVudHMubGVuZ3RoPjEpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXNbZV09dGhpcy5fdHJpbUFsaWduVmFsdWUoaSksdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fY2hhbmdlKG51bGwsZSksdW5kZWZpbmVkO2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiB0aGlzLl92YWx1ZXMoKTtpZighdC5pc0FycmF5KGFyZ3VtZW50c1swXSkpcmV0dXJuIHRoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuX3ZhbHVlcyhlKTp0aGlzLnZhbHVlKCk7Zm9yKHM9dGhpcy5vcHRpb25zLnZhbHVlcyxuPWFyZ3VtZW50c1swXSxvPTA7cy5sZW5ndGg+bztvKz0xKXNbb109dGhpcy5fdHJpbUFsaWduVmFsdWUobltvXSksdGhpcy5fY2hhbmdlKG51bGwsbyk7dGhpcy5fcmVmcmVzaFZhbHVlKCl9LF9zZXRPcHRpb246ZnVuY3Rpb24oZSxpKXt2YXIgcyxuPTA7c3dpdGNoKCJyYW5nZSI9PT1lJiZ0aGlzLm9wdGlvbnMucmFuZ2U9PT0hMCYmKCJtaW4iPT09aT8odGhpcy5vcHRpb25zLnZhbHVlPXRoaXMuX3ZhbHVlcygwKSx0aGlzLm9wdGlvbnMudmFsdWVzPW51bGwpOiJtYXgiPT09aSYmKHRoaXMub3B0aW9ucy52YWx1ZT10aGlzLl92YWx1ZXModGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGgtMSksdGhpcy5vcHRpb25zLnZhbHVlcz1udWxsKSksdC5pc0FycmF5KHRoaXMub3B0aW9ucy52YWx1ZXMpJiYobj10aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCksdC5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpLGUpe2Nhc2Uib3JpZW50YXRpb24iOnRoaXMuX2RldGVjdE9yaWVudGF0aW9uKCksdGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zbGlkZXItaG9yaXpvbnRhbCB1aS1zbGlkZXItdmVydGljYWwiKS5hZGRDbGFzcygidWktc2xpZGVyLSIrdGhpcy5vcmllbnRhdGlvbiksdGhpcy5fcmVmcmVzaFZhbHVlKCk7YnJlYWs7Y2FzZSJ2YWx1ZSI6dGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSx0aGlzLl9jaGFuZ2UobnVsbCwwKSx0aGlzLl9hbmltYXRlT2ZmPSExO2JyZWFrO2Nhc2UidmFsdWVzIjpmb3IodGhpcy5fYW5pbWF0ZU9mZj0hMCx0aGlzLl9yZWZyZXNoVmFsdWUoKSxzPTA7bj5zO3MrPTEpdGhpcy5fY2hhbmdlKG51bGwscyk7dGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlIm1pbiI6Y2FzZSJtYXgiOnRoaXMuX2FuaW1hdGVPZmY9ITAsdGhpcy5fcmVmcmVzaFZhbHVlKCksdGhpcy5fYW5pbWF0ZU9mZj0hMTticmVhaztjYXNlInJhbmdlIjp0aGlzLl9hbmltYXRlT2ZmPSEwLHRoaXMuX3JlZnJlc2goKSx0aGlzLl9hbmltYXRlT2ZmPSExfX0sX3ZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5vcHRpb25zLnZhbHVlO3JldHVybiB0PXRoaXMuX3RyaW1BbGlnblZhbHVlKHQpfSxfdmFsdWVzOmZ1bmN0aW9uKHQpe3ZhciBlLGkscztpZihhcmd1bWVudHMubGVuZ3RoKXJldHVybiBlPXRoaXMub3B0aW9ucy52YWx1ZXNbdF0sZT10aGlzLl90cmltQWxpZ25WYWx1ZShlKTtpZih0aGlzLm9wdGlvbnMudmFsdWVzJiZ0aGlzLm9wdGlvbnMudmFsdWVzLmxlbmd0aCl7Zm9yKGk9dGhpcy5vcHRpb25zLnZhbHVlcy5zbGljZSgpLHM9MDtpLmxlbmd0aD5zO3MrPTEpaVtzXT10aGlzLl90cmltQWxpZ25WYWx1ZShpW3NdKTtyZXR1cm4gaX1yZXR1cm5bXX0sX3RyaW1BbGlnblZhbHVlOmZ1bmN0aW9uKHQpe2lmKHRoaXMuX3ZhbHVlTWluKCk+PXQpcmV0dXJuIHRoaXMuX3ZhbHVlTWluKCk7aWYodD49dGhpcy5fdmFsdWVNYXgoKSlyZXR1cm4gdGhpcy5fdmFsdWVNYXgoKTt2YXIgZT10aGlzLm9wdGlvbnMuc3RlcD4wP3RoaXMub3B0aW9ucy5zdGVwOjEsaT0odC10aGlzLl92YWx1ZU1pbigpKSVlLHM9dC1pO3JldHVybiAyKk1hdGguYWJzKGkpPj1lJiYocys9aT4wP2U6LWUpLHBhcnNlRmxvYXQocy50b0ZpeGVkKDUpKX0sX3ZhbHVlTWluOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3B0aW9ucy5taW59LF92YWx1ZU1heDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9wdGlvbnMubWF4fSxfcmVmcmVzaFZhbHVlOmZ1bmN0aW9uKCl7dmFyIGUsaSxzLG4sbyxhPXRoaXMub3B0aW9ucy5yYW5nZSxyPXRoaXMub3B0aW9ucyxoPXRoaXMsbD10aGlzLl9hbmltYXRlT2ZmPyExOnIuYW5pbWF0ZSxjPXt9O3RoaXMub3B0aW9ucy52YWx1ZXMmJnRoaXMub3B0aW9ucy52YWx1ZXMubGVuZ3RoP3RoaXMuaGFuZGxlcy5lYWNoKGZ1bmN0aW9uKHMpe2k9MTAwKigoaC52YWx1ZXMocyktaC5fdmFsdWVNaW4oKSkvKGguX3ZhbHVlTWF4KCktaC5fdmFsdWVNaW4oKSkpLGNbImhvcml6b250YWwiPT09aC5vcmllbnRhdGlvbj8ibGVmdCI6ImJvdHRvbSJdPWkrIiUiLHQodGhpcykuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXShjLHIuYW5pbWF0ZSksaC5vcHRpb25zLnJhbmdlPT09ITAmJigiaG9yaXpvbnRhbCI9PT1oLm9yaWVudGF0aW9uPygwPT09cyYmaC5yYW5nZS5zdG9wKDEsMSlbbD8iYW5pbWF0ZSI6ImNzcyJdKHtsZWZ0OmkrIiUifSxyLmFuaW1hdGUpLDE9PT1zJiZoLnJhbmdlW2w/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6aS1lKyIlIn0se3F1ZXVlOiExLGR1cmF0aW9uOnIuYW5pbWF0ZX0pKTooMD09PXMmJmgucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7Ym90dG9tOmkrIiUifSxyLmFuaW1hdGUpLDE9PT1zJiZoLnJhbmdlW2w/ImFuaW1hdGUiOiJjc3MiXSh7aGVpZ2h0OmktZSsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSkpLGU9aX0pOihzPXRoaXMudmFsdWUoKSxuPXRoaXMuX3ZhbHVlTWluKCksbz10aGlzLl92YWx1ZU1heCgpLGk9byE9PW4/MTAwKigocy1uKS8oby1uKSk6MCxjWyJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24/ImxlZnQiOiJib3R0b20iXT1pKyIlIix0aGlzLmhhbmRsZS5zdG9wKDEsMSlbbD8iYW5pbWF0ZSI6ImNzcyJdKGMsci5hbmltYXRlKSwibWluIj09PWEmJiJob3Jpem9udGFsIj09PXRoaXMub3JpZW50YXRpb24mJnRoaXMucmFuZ2Uuc3RvcCgxLDEpW2w/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6aSsiJSJ9LHIuYW5pbWF0ZSksIm1heCI9PT1hJiYiaG9yaXpvbnRhbCI9PT10aGlzLm9yaWVudGF0aW9uJiZ0aGlzLnJhbmdlW2w/ImFuaW1hdGUiOiJjc3MiXSh7d2lkdGg6MTAwLWkrIiUifSx7cXVldWU6ITEsZHVyYXRpb246ci5hbmltYXRlfSksIm1pbiI9PT1hJiYidmVydGljYWwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZS5zdG9wKDEsMSlbbD8iYW5pbWF0ZSI6ImNzcyJdKHtoZWlnaHQ6aSsiJSJ9LHIuYW5pbWF0ZSksIm1heCI9PT1hJiYidmVydGljYWwiPT09dGhpcy5vcmllbnRhdGlvbiYmdGhpcy5yYW5nZVtsPyJhbmltYXRlIjoiY3NzIl0oe2hlaWdodDoxMDAtaSsiJSJ9LHtxdWV1ZTohMSxkdXJhdGlvbjpyLmFuaW1hdGV9KSl9LF9oYW5kbGVFdmVudHM6e2tleWRvd246ZnVuY3Rpb24oaSl7dmFyIHMsbixvLGEscj10KGkudGFyZ2V0KS5kYXRhKCJ1aS1zbGlkZXItaGFuZGxlLWluZGV4Iik7c3dpdGNoKGkua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpjYXNlIHQudWkua2V5Q29kZS5FTkQ6Y2FzZSB0LnVpLmtleUNvZGUuUEFHRV9VUDpjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046Y2FzZSB0LnVpLmtleUNvZGUuVVA6Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjpjYXNlIHQudWkua2V5Q29kZS5MRUZUOmlmKGkucHJldmVudERlZmF1bHQoKSwhdGhpcy5fa2V5U2xpZGluZyYmKHRoaXMuX2tleVNsaWRpbmc9ITAsdChpLnRhcmdldCkuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLHM9dGhpcy5fc3RhcnQoaSxyKSxzPT09ITEpKXJldHVybn1zd2l0Y2goYT10aGlzLm9wdGlvbnMuc3RlcCxuPW89dGhpcy5vcHRpb25zLnZhbHVlcyYmdGhpcy5vcHRpb25zLnZhbHVlcy5sZW5ndGg/dGhpcy52YWx1ZXMocik6dGhpcy52YWx1ZSgpLGkua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpvPXRoaXMuX3ZhbHVlTWluKCk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRU5EOm89dGhpcy5fdmFsdWVNYXgoKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX1VQOm89dGhpcy5fdHJpbUFsaWduVmFsdWUobisodGhpcy5fdmFsdWVNYXgoKS10aGlzLl92YWx1ZU1pbigpKS9lKTticmVhaztjYXNlIHQudWkua2V5Q29kZS5QQUdFX0RPV046bz10aGlzLl90cmltQWxpZ25WYWx1ZShuLSh0aGlzLl92YWx1ZU1heCgpLXRoaXMuX3ZhbHVlTWluKCkpL2UpO2JyZWFrO2Nhc2UgdC51aS5rZXlDb2RlLlVQOmNhc2UgdC51aS5rZXlDb2RlLlJJR0hUOmlmKG49PT10aGlzLl92YWx1ZU1heCgpKXJldHVybjtvPXRoaXMuX3RyaW1BbGlnblZhbHVlKG4rYSk7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjpjYXNlIHQudWkua2V5Q29kZS5MRUZUOmlmKG49PT10aGlzLl92YWx1ZU1pbigpKXJldHVybjtvPXRoaXMuX3RyaW1BbGlnblZhbHVlKG4tYSl9dGhpcy5fc2xpZGUoaSxyLG8pfSxjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9LGtleXVwOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZS50YXJnZXQpLmRhdGEoInVpLXNsaWRlci1oYW5kbGUtaW5kZXgiKTt0aGlzLl9rZXlTbGlkaW5nJiYodGhpcy5fa2V5U2xpZGluZz0hMSx0aGlzLl9zdG9wKGUsaSksdGhpcy5fY2hhbmdlKGUsaSksdChlLnRhcmdldCkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpKX19fSl9KGpRdWVyeSksZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLmVsZW1lbnQudmFsKCk7dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksdGhpcy5fcmVmcmVzaCgpLGUhPT10aGlzLmVsZW1lbnQudmFsKCkmJnRoaXMuX3RyaWdnZXIoImNoYW5nZSIpfX10LndpZGdldCgidWkuc3Bpbm5lciIse3ZlcnNpb246IjEuMTAuMyIsZGVmYXVsdEVsZW1lbnQ6IjxpbnB1dD4iLHdpZGdldEV2ZW50UHJlZml4OiJzcGluIixvcHRpb25zOntjdWx0dXJlOm51bGwsaWNvbnM6e2Rvd246InVpLWljb24tdHJpYW5nbGUtMS1zIix1cDoidWktaWNvbi10cmlhbmdsZS0xLW4ifSxpbmNyZW1lbnRhbDohMCxtYXg6bnVsbCxtaW46bnVsbCxudW1iZXJGb3JtYXQ6bnVsbCxwYWdlOjEwLHN0ZXA6MSxjaGFuZ2U6bnVsbCxzcGluOm51bGwsc3RhcnQ6bnVsbCxzdG9wOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9zZXRPcHRpb24oIm1heCIsdGhpcy5vcHRpb25zLm1heCksdGhpcy5fc2V0T3B0aW9uKCJtaW4iLHRoaXMub3B0aW9ucy5taW4pLHRoaXMuX3NldE9wdGlvbigic3RlcCIsdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3ZhbHVlKHRoaXMuZWxlbWVudC52YWwoKSwhMCksdGhpcy5fZHJhdygpLHRoaXMuX29uKHRoaXMuX2V2ZW50cyksdGhpcy5fcmVmcmVzaCgpLHRoaXMuX29uKHRoaXMud2luZG93LHtiZWZvcmV1bmxvYWQ6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIil9fSl9LF9nZXRDcmVhdGVPcHRpb25zOmZ1bmN0aW9uKCl7dmFyIGU9e30saT10aGlzLmVsZW1lbnQ7cmV0dXJuIHQuZWFjaChbIm1pbiIsIm1heCIsInN0ZXAiXSxmdW5jdGlvbih0LHMpe3ZhciBuPWkuYXR0cihzKTt2b2lkIDAhPT1uJiZuLmxlbmd0aCYmKGVbc109bil9KSxlfSxfZXZlbnRzOntrZXlkb3duOmZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0KHQpJiZ0aGlzLl9rZXlkb3duKHQpJiZ0LnByZXZlbnREZWZhdWx0KCl9LGtleXVwOiJfc3RvcCIsZm9jdXM6ZnVuY3Rpb24oKXt0aGlzLnByZXZpb3VzPXRoaXMuZWxlbWVudC52YWwoKX0sYmx1cjpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jYW5jZWxCbHVyPyhkZWxldGUgdGhpcy5jYW5jZWxCbHVyLHZvaWQgMCk6KHRoaXMuX3N0b3AoKSx0aGlzLl9yZWZyZXNoKCksdGhpcy5wcmV2aW91cyE9PXRoaXMuZWxlbWVudC52YWwoKSYmdGhpcy5fdHJpZ2dlcigiY2hhbmdlIix0KSx2b2lkIDApfSxtb3VzZXdoZWVsOmZ1bmN0aW9uKHQsZSl7aWYoZSl7aWYoIXRoaXMuc3Bpbm5pbmcmJiF0aGlzLl9zdGFydCh0KSlyZXR1cm4hMTt0aGlzLl9zcGluKChlPjA/MTotMSkqdGhpcy5vcHRpb25zLnN0ZXAsdCksY2xlYXJUaW1lb3V0KHRoaXMubW91c2V3aGVlbFRpbWVyKSx0aGlzLm1vdXNld2hlZWxUaW1lcj10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMuc3Bpbm5pbmcmJnRoaXMuX3N0b3AodCl9LDEwMCksdC5wcmV2ZW50RGVmYXVsdCgpfX0sIm1vdXNlZG93biAudWktc3Bpbm5lci1idXR0b24iOmZ1bmN0aW9uKGUpe2Z1bmN0aW9uIGkoKXt2YXIgdD10aGlzLmVsZW1lbnRbMF09PT10aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQ7dHx8KHRoaXMuZWxlbWVudC5mb2N1cygpLHRoaXMucHJldmlvdXM9cyx0aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMucHJldmlvdXM9c30pKX12YXIgcztzPXRoaXMuZWxlbWVudFswXT09PXRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudD90aGlzLnByZXZpb3VzOnRoaXMuZWxlbWVudC52YWwoKSxlLnByZXZlbnREZWZhdWx0KCksaS5jYWxsKHRoaXMpLHRoaXMuY2FuY2VsQmx1cj0hMCx0aGlzLl9kZWxheShmdW5jdGlvbigpe2RlbGV0ZSB0aGlzLmNhbmNlbEJsdXIsaS5jYWxsKHRoaXMpfSksdGhpcy5fc3RhcnQoZSkhPT0hMSYmdGhpcy5fcmVwZWF0KG51bGwsdChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zcGlubmVyLXVwIik/MTotMSxlKX0sIm1vdXNldXAgLnVpLXNwaW5uZXItYnV0dG9uIjoiX3N0b3AiLCJtb3VzZWVudGVyIC51aS1zcGlubmVyLWJ1dHRvbiI6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoZS5jdXJyZW50VGFyZ2V0KS5oYXNDbGFzcygidWktc3RhdGUtYWN0aXZlIik/dGhpcy5fc3RhcnQoZSk9PT0hMT8hMToodGhpcy5fcmVwZWF0KG51bGwsdChlLmN1cnJlbnRUYXJnZXQpLmhhc0NsYXNzKCJ1aS1zcGlubmVyLXVwIik/MTotMSxlKSx2b2lkIDApOnZvaWQgMH0sIm1vdXNlbGVhdmUgLnVpLXNwaW5uZXItYnV0dG9uIjoiX3N0b3AifSxfZHJhdzpmdW5jdGlvbigpe3ZhciB0PXRoaXMudWlTcGlubmVyPXRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLmF0dHIoImF1dG9jb21wbGV0ZSIsIm9mZiIpLndyYXAodGhpcy5fdWlTcGlubmVySHRtbCgpKS5wYXJlbnQoKS5hcHBlbmQodGhpcy5fYnV0dG9uSHRtbCgpKTt0aGlzLmVsZW1lbnQuYXR0cigicm9sZSIsInNwaW5idXR0b24iKSx0aGlzLmJ1dHRvbnM9dC5maW5kKCIudWktc3Bpbm5lci1idXR0b24iKS5hdHRyKCJ0YWJJbmRleCIsLTEpLmJ1dHRvbigpLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIiksdGhpcy5idXR0b25zLmhlaWdodCgpPk1hdGguY2VpbCguNSp0LmhlaWdodCgpKSYmdC5oZWlnaHQoKT4wJiZ0LmhlaWdodCh0LmhlaWdodCgpKSx0aGlzLm9wdGlvbnMuZGlzYWJsZWQmJnRoaXMuZGlzYWJsZSgpfSxfa2V5ZG93bjpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMscz10LnVpLmtleUNvZGU7c3dpdGNoKGUua2V5Q29kZSl7Y2FzZSBzLlVQOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwxLGUpLCEwO2Nhc2Ugcy5ET1dOOnJldHVybiB0aGlzLl9yZXBlYXQobnVsbCwtMSxlKSwhMDtjYXNlIHMuUEFHRV9VUDpyZXR1cm4gdGhpcy5fcmVwZWF0KG51bGwsaS5wYWdlLGUpLCEwO2Nhc2Ugcy5QQUdFX0RPV046cmV0dXJuIHRoaXMuX3JlcGVhdChudWxsLC1pLnBhZ2UsZSksITB9cmV0dXJuITF9LF91aVNwaW5uZXJIdG1sOmZ1bmN0aW9uKCl7cmV0dXJuIjxzcGFuIGNsYXNzPSd1aS1zcGlubmVyIHVpLXdpZGdldCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsJz48L3NwYW4+In0sX2J1dHRvbkh0bWw6ZnVuY3Rpb24oKXtyZXR1cm4iPGEgY2xhc3M9J3VpLXNwaW5uZXItYnV0dG9uIHVpLXNwaW5uZXItdXAgdWktY29ybmVyLXRyJz48c3BhbiBjbGFzcz0ndWktaWNvbiAiK3RoaXMub3B0aW9ucy5pY29ucy51cCsiJz4mIzk2NTA7PC9zcGFuPiIrIjwvYT4iKyI8YSBjbGFzcz0ndWktc3Bpbm5lci1idXR0b24gdWktc3Bpbm5lci1kb3duIHVpLWNvcm5lci1icic+IisiPHNwYW4gY2xhc3M9J3VpLWljb24gIit0aGlzLm9wdGlvbnMuaWNvbnMuZG93bisiJz4mIzk2NjA7PC9zcGFuPiIrIjwvYT4ifSxfc3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc3Bpbm5pbmd8fHRoaXMuX3RyaWdnZXIoInN0YXJ0Iix0KSE9PSExPyh0aGlzLmNvdW50ZXJ8fCh0aGlzLmNvdW50ZXI9MSksdGhpcy5zcGlubmluZz0hMCwhMCk6ITF9LF9yZXBlYXQ6ZnVuY3Rpb24odCxlLGkpe3Q9dHx8NTAwLGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKSx0aGlzLnRpbWVyPXRoaXMuX2RlbGF5KGZ1bmN0aW9uKCl7dGhpcy5fcmVwZWF0KDQwLGUsaSl9LHQpLHRoaXMuX3NwaW4oZSp0aGlzLm9wdGlvbnMuc3RlcCxpKX0sX3NwaW46ZnVuY3Rpb24odCxlKXt2YXIgaT10aGlzLnZhbHVlKCl8fDA7dGhpcy5jb3VudGVyfHwodGhpcy5jb3VudGVyPTEpLGk9dGhpcy5fYWRqdXN0VmFsdWUoaSt0KnRoaXMuX2luY3JlbWVudCh0aGlzLmNvdW50ZXIpKSx0aGlzLnNwaW5uaW5nJiZ0aGlzLl90cmlnZ2VyKCJzcGluIixlLHt2YWx1ZTppfSk9PT0hMXx8KHRoaXMuX3ZhbHVlKGkpLHRoaXMuY291bnRlcisrKX0sX2luY3JlbWVudDpmdW5jdGlvbihlKXt2YXIgaT10aGlzLm9wdGlvbnMuaW5jcmVtZW50YWw7cmV0dXJuIGk/dC5pc0Z1bmN0aW9uKGkpP2koZSk6TWF0aC5mbG9vcihlKmUqZS81ZTQtZSplLzUwMCsxNyplLzIwMCsxKToxfSxfcHJlY2lzaW9uOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcHJlY2lzaW9uT2YodGhpcy5vcHRpb25zLnN0ZXApO3JldHVybiBudWxsIT09dGhpcy5vcHRpb25zLm1pbiYmKHQ9TWF0aC5tYXgodCx0aGlzLl9wcmVjaXNpb25PZih0aGlzLm9wdGlvbnMubWluKSkpLHR9LF9wcmVjaXNpb25PZjpmdW5jdGlvbih0KXt2YXIgZT0iIit0LGk9ZS5pbmRleE9mKCIuIik7cmV0dXJuLTE9PT1pPzA6ZS5sZW5ndGgtaS0xfSxfYWRqdXN0VmFsdWU6ZnVuY3Rpb24odCl7dmFyIGUsaSxzPXRoaXMub3B0aW9ucztyZXR1cm4gZT1udWxsIT09cy5taW4/cy5taW46MCxpPXQtZSxpPU1hdGgucm91bmQoaS9zLnN0ZXApKnMuc3RlcCx0PWUraSx0PXBhcnNlRmxvYXQodC50b0ZpeGVkKHRoaXMuX3ByZWNpc2lvbigpKSksbnVsbCE9PXMubWF4JiZ0PnMubWF4P3MubWF4Om51bGwhPT1zLm1pbiYmcy5taW4+dD9zLm1pbjp0fSxfc3RvcDpmdW5jdGlvbih0KXt0aGlzLnNwaW5uaW5nJiYoY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpLGNsZWFyVGltZW91dCh0aGlzLm1vdXNld2hlZWxUaW1lciksdGhpcy5jb3VudGVyPTAsdGhpcy5zcGlubmluZz0hMSx0aGlzLl90cmlnZ2VyKCJzdG9wIix0KSl9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxlKXtpZigiY3VsdHVyZSI9PT10fHwibnVtYmVyRm9ybWF0Ij09PXQpe3ZhciBpPXRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSk7cmV0dXJuIHRoaXMub3B0aW9uc1t0XT1lLHRoaXMuZWxlbWVudC52YWwodGhpcy5fZm9ybWF0KGkpKSx2b2lkIDB9KCJtYXgiPT09dHx8Im1pbiI9PT10fHwic3RlcCI9PT10KSYmInN0cmluZyI9PXR5cGVvZiBlJiYoZT10aGlzLl9wYXJzZShlKSksImljb25zIj09PXQmJih0aGlzLmJ1dHRvbnMuZmlyc3QoKS5maW5kKCIudWktaWNvbiIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29ucy51cCkuYWRkQ2xhc3MoZS51cCksdGhpcy5idXR0b25zLmxhc3QoKS5maW5kKCIudWktaWNvbiIpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5pY29ucy5kb3duKS5hZGRDbGFzcyhlLmRvd24pKSx0aGlzLl9zdXBlcih0LGUpLCJkaXNhYmxlZCI9PT10JiYoZT8odGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMCksdGhpcy5idXR0b25zLmJ1dHRvbigiZGlzYWJsZSIpKToodGhpcy5lbGVtZW50LnByb3AoImRpc2FibGVkIiwhMSksdGhpcy5idXR0b25zLmJ1dHRvbigiZW5hYmxlIikpKX0sX3NldE9wdGlvbnM6ZShmdW5jdGlvbih0KXt0aGlzLl9zdXBlcih0KSx0aGlzLl92YWx1ZSh0aGlzLmVsZW1lbnQudmFsKCkpfSksX3BhcnNlOmZ1bmN0aW9uKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmIiIhPT10JiYodD13aW5kb3cuR2xvYmFsaXplJiZ0aGlzLm9wdGlvbnMubnVtYmVyRm9ybWF0P0dsb2JhbGl6ZS5wYXJzZUZsb2F0KHQsMTAsdGhpcy5vcHRpb25zLmN1bHR1cmUpOit0KSwiIj09PXR8fGlzTmFOKHQpP251bGw6dH0sX2Zvcm1hdDpmdW5jdGlvbih0KXtyZXR1cm4iIj09PXQ/IiI6d2luZG93Lkdsb2JhbGl6ZSYmdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdD9HbG9iYWxpemUuZm9ybWF0KHQsdGhpcy5vcHRpb25zLm51bWJlckZvcm1hdCx0aGlzLm9wdGlvbnMuY3VsdHVyZSk6dH0sX3JlZnJlc2g6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuYXR0cih7ImFyaWEtdmFsdWVtaW4iOnRoaXMub3B0aW9ucy5taW4sImFyaWEtdmFsdWVtYXgiOnRoaXMub3B0aW9ucy5tYXgsImFyaWEtdmFsdWVub3ciOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9KX0sX3ZhbHVlOmZ1bmN0aW9uKHQsZSl7dmFyIGk7IiIhPT10JiYoaT10aGlzLl9wYXJzZSh0KSxudWxsIT09aSYmKGV8fChpPXRoaXMuX2FkanVzdFZhbHVlKGkpKSx0PXRoaXMuX2Zvcm1hdChpKSkpLHRoaXMuZWxlbWVudC52YWwodCksdGhpcy5fcmVmcmVzaCgpfSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktc3Bpbm5lci1pbnB1dCIpLnByb3AoImRpc2FibGVkIiwhMSkucmVtb3ZlQXR0cigiYXV0b2NvbXBsZXRlIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoImFyaWEtdmFsdWVtaW4iKS5yZW1vdmVBdHRyKCJhcmlhLXZhbHVlbWF4IikucmVtb3ZlQXR0cigiYXJpYS12YWx1ZW5vdyIpLHRoaXMudWlTcGlubmVyLnJlcGxhY2VXaXRoKHRoaXMuZWxlbWVudCl9LHN0ZXBVcDplKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBVcCh0KX0pLF9zdGVwVXA6ZnVuY3Rpb24odCl7dGhpcy5fc3RhcnQoKSYmKHRoaXMuX3NwaW4oKHR8fDEpKnRoaXMub3B0aW9ucy5zdGVwKSx0aGlzLl9zdG9wKCkpfSxzdGVwRG93bjplKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBEb3duKHQpfSksX3N0ZXBEb3duOmZ1bmN0aW9uKHQpe3RoaXMuX3N0YXJ0KCkmJih0aGlzLl9zcGluKCh0fHwxKSotdGhpcy5vcHRpb25zLnN0ZXApLHRoaXMuX3N0b3AoKSl9LHBhZ2VVcDplKGZ1bmN0aW9uKHQpe3RoaXMuX3N0ZXBVcCgodHx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSkscGFnZURvd246ZShmdW5jdGlvbih0KXt0aGlzLl9zdGVwRG93bigodHx8MSkqdGhpcy5vcHRpb25zLnBhZ2UpfSksdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGUodGhpcy5fdmFsdWUpLmNhbGwodGhpcyx0KSx2b2lkIDApOnRoaXMuX3BhcnNlKHRoaXMuZWxlbWVudC52YWwoKSl9LHdpZGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnVpU3Bpbm5lcn19KX0oalF1ZXJ5KSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIGkoKXtyZXR1cm4rK259ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdC5oYXNoLmxlbmd0aD4xJiZkZWNvZGVVUklDb21wb25lbnQodC5ocmVmLnJlcGxhY2UobywiIikpPT09ZGVjb2RlVVJJQ29tcG9uZW50KGxvY2F0aW9uLmhyZWYucmVwbGFjZShvLCIiKSl9dmFyIG49MCxvPS8jLiokLzt0LndpZGdldCgidWkudGFicyIse3ZlcnNpb246IjEuMTAuMyIsZGVsYXk6MzAwLG9wdGlvbnM6e2FjdGl2ZTpudWxsLGNvbGxhcHNpYmxlOiExLGV2ZW50OiJjbGljayIsaGVpZ2h0U3R5bGU6ImNvbnRlbnQiLGhpZGU6bnVsbCxzaG93Om51bGwsYWN0aXZhdGU6bnVsbCxiZWZvcmVBY3RpdmF0ZTpudWxsLGJlZm9yZUxvYWQ6bnVsbCxsb2FkOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLGk9dGhpcy5vcHRpb25zO3RoaXMucnVubmluZz0hMSx0aGlzLmVsZW1lbnQuYWRkQ2xhc3MoInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwiKS50b2dnbGVDbGFzcygidWktdGFicy1jb2xsYXBzaWJsZSIsaS5jb2xsYXBzaWJsZSkuZGVsZWdhdGUoIi51aS10YWJzLW5hdiA+IGxpIiwibW91c2Vkb3duIit0aGlzLmV2ZW50TmFtZXNwYWNlLGZ1bmN0aW9uKGUpe3QodGhpcykuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpJiZlLnByZXZlbnREZWZhdWx0KCl9KS5kZWxlZ2F0ZSgiLnVpLXRhYnMtYW5jaG9yIiwiZm9jdXMiK3RoaXMuZXZlbnROYW1lc3BhY2UsZnVuY3Rpb24oKXt0KHRoaXMpLmNsb3Nlc3QoImxpIikuaXMoIi51aS1zdGF0ZS1kaXNhYmxlZCIpJiZ0aGlzLmJsdXIoKX0pLHRoaXMuX3Byb2Nlc3NUYWJzKCksaS5hY3RpdmU9dGhpcy5faW5pdGlhbEFjdGl2ZSgpLHQuaXNBcnJheShpLmRpc2FibGVkKSYmKGkuZGlzYWJsZWQ9dC51bmlxdWUoaS5kaXNhYmxlZC5jb25jYXQodC5tYXAodGhpcy50YWJzLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIiksZnVuY3Rpb24odCl7cmV0dXJuIGUudGFicy5pbmRleCh0KX0pKSkuc29ydCgpKSx0aGlzLmFjdGl2ZT10aGlzLm9wdGlvbnMuYWN0aXZlIT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5fZmluZEFjdGl2ZShpLmFjdGl2ZSk6dCgpLHRoaXMuX3JlZnJlc2goKSx0aGlzLmFjdGl2ZS5sZW5ndGgmJnRoaXMubG9hZChpLmFjdGl2ZSl9LF9pbml0aWFsQWN0aXZlOmZ1bmN0aW9uKCl7dmFyIGk9dGhpcy5vcHRpb25zLmFjdGl2ZSxzPXRoaXMub3B0aW9ucy5jb2xsYXBzaWJsZSxuPWxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKDEpO3JldHVybiBudWxsPT09aSYmKG4mJnRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKHMsbyl7cmV0dXJuIHQobykuYXR0cigiYXJpYS1jb250cm9scyIpPT09bj8oaT1zLCExKTplfSksbnVsbD09PWkmJihpPXRoaXMudGFicy5pbmRleCh0aGlzLnRhYnMuZmlsdGVyKCIudWktdGFicy1hY3RpdmUiKSkpLChudWxsPT09aXx8LTE9PT1pKSYmKGk9dGhpcy50YWJzLmxlbmd0aD8wOiExKSksaSE9PSExJiYoaT10aGlzLnRhYnMuaW5kZXgodGhpcy50YWJzLmVxKGkpKSwtMT09PWkmJihpPXM/ITE6MCkpLCFzJiZpPT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGgmJihpPTApLGl9LF9nZXRDcmVhdGVFdmVudERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57dGFiOnRoaXMuYWN0aXZlLHBhbmVsOnRoaXMuYWN0aXZlLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYih0aGlzLmFjdGl2ZSk6dCgpfX0sX3RhYktleWRvd246ZnVuY3Rpb24oaSl7dmFyIHM9dCh0aGlzLmRvY3VtZW50WzBdLmFjdGl2ZUVsZW1lbnQpLmNsb3Nlc3QoImxpIiksbj10aGlzLnRhYnMuaW5kZXgocyksbz0hMDtpZighdGhpcy5faGFuZGxlUGFnZU5hdihpKSl7c3dpdGNoKGkua2V5Q29kZSl7Y2FzZSB0LnVpLmtleUNvZGUuUklHSFQ6Y2FzZSB0LnVpLmtleUNvZGUuRE9XTjpuKys7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuVVA6Y2FzZSB0LnVpLmtleUNvZGUuTEVGVDpvPSExLG4tLTticmVhaztjYXNlIHQudWkua2V5Q29kZS5FTkQ6bj10aGlzLmFuY2hvcnMubGVuZ3RoLTE7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuSE9NRTpuPTA7YnJlYWs7Y2FzZSB0LnVpLmtleUNvZGUuU1BBQ0U6cmV0dXJuIGkucHJldmVudERlZmF1bHQoKSxjbGVhclRpbWVvdXQodGhpcy5hY3RpdmF0aW5nKSx0aGlzLl9hY3RpdmF0ZShuKSxlO2Nhc2UgdC51aS5rZXlDb2RlLkVOVEVSOnJldHVybiBpLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksdGhpcy5fYWN0aXZhdGUobj09PXRoaXMub3B0aW9ucy5hY3RpdmU/ITE6biksZTtkZWZhdWx0OnJldHVybn1pLnByZXZlbnREZWZhdWx0KCksY2xlYXJUaW1lb3V0KHRoaXMuYWN0aXZhdGluZyksbj10aGlzLl9mb2N1c05leHRUYWIobixvKSxpLmN0cmxLZXl8fChzLmF0dHIoImFyaWEtc2VsZWN0ZWQiLCJmYWxzZSIpLHRoaXMudGFicy5lcShuKS5hdHRyKCJhcmlhLXNlbGVjdGVkIiwidHJ1ZSIpLHRoaXMuYWN0aXZhdGluZz10aGlzLl9kZWxheShmdW5jdGlvbigpe3RoaXMub3B0aW9uKCJhY3RpdmUiLG4pfSx0aGlzLmRlbGF5KSl9fSxfcGFuZWxLZXlkb3duOmZ1bmN0aW9uKGUpe3RoaXMuX2hhbmRsZVBhZ2VOYXYoZSl8fGUuY3RybEtleSYmZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLlVQJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHRoaXMuYWN0aXZlLmZvY3VzKCkpfSxfaGFuZGxlUGFnZU5hdjpmdW5jdGlvbihpKXtyZXR1cm4gaS5hbHRLZXkmJmkua2V5Q29kZT09PXQudWkua2V5Q29kZS5QQUdFX1VQPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZS0xLCExKSksITApOmkuYWx0S2V5JiZpLmtleUNvZGU9PT10LnVpLmtleUNvZGUuUEFHRV9ET1dOPyh0aGlzLl9hY3RpdmF0ZSh0aGlzLl9mb2N1c05leHRUYWIodGhpcy5vcHRpb25zLmFjdGl2ZSsxLCEwKSksITApOmV9LF9maW5kTmV4dFRhYjpmdW5jdGlvbihlLGkpe2Z1bmN0aW9uIHMoKXtyZXR1cm4gZT5uJiYoZT0wKSwwPmUmJihlPW4pLGV9Zm9yKHZhciBuPXRoaXMudGFicy5sZW5ndGgtMTstMSE9PXQuaW5BcnJheShzKCksdGhpcy5vcHRpb25zLmRpc2FibGVkKTspZT1pP2UrMTplLTE7cmV0dXJuIGV9LF9mb2N1c05leHRUYWI6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD10aGlzLl9maW5kTmV4dFRhYih0LGUpLHRoaXMudGFicy5lcSh0KS5mb2N1cygpLHR9LF9zZXRPcHRpb246ZnVuY3Rpb24odCxpKXtyZXR1cm4iYWN0aXZlIj09PXQ/KHRoaXMuX2FjdGl2YXRlKGkpLGUpOiJkaXNhYmxlZCI9PT10Pyh0aGlzLl9zZXR1cERpc2FibGVkKGkpLGUpOih0aGlzLl9zdXBlcih0LGkpLCJjb2xsYXBzaWJsZSI9PT10JiYodGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCJ1aS10YWJzLWNvbGxhcHNpYmxlIixpKSxpfHx0aGlzLm9wdGlvbnMuYWN0aXZlIT09ITF8fHRoaXMuX2FjdGl2YXRlKDApKSwiZXZlbnQiPT09dCYmdGhpcy5fc2V0dXBFdmVudHMoaSksImhlaWdodFN0eWxlIj09PXQmJnRoaXMuX3NldHVwSGVpZ2h0U3R5bGUoaSksZSl9LF90YWJJZDpmdW5jdGlvbih0KXtyZXR1cm4gdC5hdHRyKCJhcmlhLWNvbnRyb2xzIil8fCJ1aS10YWJzLSIraSgpfSxfc2FuaXRpemVTZWxlY3RvcjpmdW5jdGlvbih0KXtyZXR1cm4gdD90LnJlcGxhY2UoL1shIiQlJicoKSorLC5cLzo7PD0+P0BcW1xdXF5ge3x9fl0vZywiXFwkJiIpOiIifSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5vcHRpb25zLGk9dGhpcy50YWJsaXN0LmNoaWxkcmVuKCI6aGFzKGFbaHJlZl0pIik7ZS5kaXNhYmxlZD10Lm1hcChpLmZpbHRlcigiLnVpLXN0YXRlLWRpc2FibGVkIiksZnVuY3Rpb24odCl7cmV0dXJuIGkuaW5kZXgodCl9KSx0aGlzLl9wcm9jZXNzVGFicygpLGUuYWN0aXZlIT09ITEmJnRoaXMuYW5jaG9ycy5sZW5ndGg/dGhpcy5hY3RpdmUubGVuZ3RoJiYhdC5jb250YWlucyh0aGlzLnRhYmxpc3RbMF0sdGhpcy5hY3RpdmVbMF0pP3RoaXMudGFicy5sZW5ndGg9PT1lLmRpc2FibGVkLmxlbmd0aD8oZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKTp0aGlzLl9hY3RpdmF0ZSh0aGlzLl9maW5kTmV4dFRhYihNYXRoLm1heCgwLGUuYWN0aXZlLTEpLCExKSk6ZS5hY3RpdmU9dGhpcy50YWJzLmluZGV4KHRoaXMuYWN0aXZlKTooZS5hY3RpdmU9ITEsdGhpcy5hY3RpdmU9dCgpKSx0aGlzLl9yZWZyZXNoKCl9LF9yZWZyZXNoOmZ1bmN0aW9uKCl7dGhpcy5fc2V0dXBEaXNhYmxlZCh0aGlzLm9wdGlvbnMuZGlzYWJsZWQpLHRoaXMuX3NldHVwRXZlbnRzKHRoaXMub3B0aW9ucy5ldmVudCksdGhpcy5fc2V0dXBIZWlnaHRTdHlsZSh0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUpLHRoaXMudGFicy5ub3QodGhpcy5hY3RpdmUpLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoiZmFsc2UiLHRhYkluZGV4Oi0xfSksdGhpcy5wYW5lbHMubm90KHRoaXMuX2dldFBhbmVsRm9yVGFiKHRoaXMuYWN0aXZlKSkuaGlkZSgpLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSksdGhpcy5hY3RpdmUubGVuZ3RoPyh0aGlzLmFjdGl2ZS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIikuYXR0cih7ImFyaWEtc2VsZWN0ZWQiOiJ0cnVlIix0YWJJbmRleDowfSksdGhpcy5fZ2V0UGFuZWxGb3JUYWIodGhpcy5hY3RpdmUpLnNob3coKS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pKTp0aGlzLnRhYnMuZXEoMCkuYXR0cigidGFiSW5kZXgiLDApfSxfcHJvY2Vzc1RhYnM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMudGFibGlzdD10aGlzLl9nZXRMaXN0KCkuYWRkQ2xhc3MoInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIikuYXR0cigicm9sZSIsInRhYmxpc3QiKSx0aGlzLnRhYnM9dGhpcy50YWJsaXN0LmZpbmQoIj4gbGk6aGFzKGFbaHJlZl0pIikuYWRkQ2xhc3MoInVpLXN0YXRlLWRlZmF1bHQgdWktY29ybmVyLXRvcCIpLmF0dHIoe3JvbGU6InRhYiIsdGFiSW5kZXg6LTF9KSx0aGlzLmFuY2hvcnM9dGhpcy50YWJzLm1hcChmdW5jdGlvbigpe3JldHVybiB0KCJhIix0aGlzKVswXX0pLmFkZENsYXNzKCJ1aS10YWJzLWFuY2hvciIpLmF0dHIoe3JvbGU6InByZXNlbnRhdGlvbiIsdGFiSW5kZXg6LTF9KSx0aGlzLnBhbmVscz10KCksdGhpcy5hbmNob3JzLmVhY2goZnVuY3Rpb24oaSxuKXt2YXIgbyxhLHIsaD10KG4pLnVuaXF1ZUlkKCkuYXR0cigiaWQiKSxsPXQobikuY2xvc2VzdCgibGkiKSxjPWwuYXR0cigiYXJpYS1jb250cm9scyIpO3Mobik/KG89bi5oYXNoLGE9ZS5lbGVtZW50LmZpbmQoZS5fc2FuaXRpemVTZWxlY3RvcihvKSkpOihyPWUuX3RhYklkKGwpLG89IiMiK3IsYT1lLmVsZW1lbnQuZmluZChvKSxhLmxlbmd0aHx8KGE9ZS5fY3JlYXRlUGFuZWwociksYS5pbnNlcnRBZnRlcihlLnBhbmVsc1tpLTFdfHxlLnRhYmxpc3QpKSxhLmF0dHIoImFyaWEtbGl2ZSIsInBvbGl0ZSIpKSxhLmxlbmd0aCYmKGUucGFuZWxzPWUucGFuZWxzLmFkZChhKSksYyYmbC5kYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiLGMpLGwuYXR0cih7ImFyaWEtY29udHJvbHMiOm8uc3Vic3RyaW5nKDEpLCJhcmlhLWxhYmVsbGVkYnkiOmh9KSxhLmF0dHIoImFyaWEtbGFiZWxsZWRieSIsaCl9KSx0aGlzLnBhbmVscy5hZGRDbGFzcygidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIikuYXR0cigicm9sZSIsInRhYnBhbmVsIil9LF9nZXRMaXN0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCJvbCx1bCIpLmVxKDApfSxfY3JlYXRlUGFuZWw6ZnVuY3Rpb24oZSl7cmV0dXJuIHQoIjxkaXY+IikuYXR0cigiaWQiLGUpLmFkZENsYXNzKCJ1aS10YWJzLXBhbmVsIHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1ib3R0b20iKS5kYXRhKCJ1aS10YWJzLWRlc3Ryb3kiLCEwKX0sX3NldHVwRGlzYWJsZWQ6ZnVuY3Rpb24oZSl7dC5pc0FycmF5KGUpJiYoZS5sZW5ndGg/ZS5sZW5ndGg9PT10aGlzLmFuY2hvcnMubGVuZ3RoJiYoZT0hMCk6ZT0hMSk7Zm9yKHZhciBpLHM9MDtpPXRoaXMudGFic1tzXTtzKyspZT09PSEwfHwtMSE9PXQuaW5BcnJheShzLGUpP3QoaSkuYWRkQ2xhc3MoInVpLXN0YXRlLWRpc2FibGVkIikuYXR0cigiYXJpYS1kaXNhYmxlZCIsInRydWUiKTp0KGkpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1kaXNhYmxlZCIpLnJlbW92ZUF0dHIoImFyaWEtZGlzYWJsZWQiKTt0aGlzLm9wdGlvbnMuZGlzYWJsZWQ9ZX0sX3NldHVwRXZlbnRzOmZ1bmN0aW9uKGUpe3ZhciBpPXtjbGljazpmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCl9fTtlJiZ0LmVhY2goZS5zcGxpdCgiICIpLGZ1bmN0aW9uKHQsZSl7aVtlXT0iX2V2ZW50SGFuZGxlciJ9KSx0aGlzLl9vZmYodGhpcy5hbmNob3JzLmFkZCh0aGlzLnRhYnMpLmFkZCh0aGlzLnBhbmVscykpLHRoaXMuX29uKHRoaXMuYW5jaG9ycyxpKSx0aGlzLl9vbih0aGlzLnRhYnMse2tleWRvd246Il90YWJLZXlkb3duIn0pLHRoaXMuX29uKHRoaXMucGFuZWxzLHtrZXlkb3duOiJfcGFuZWxLZXlkb3duIn0pLHRoaXMuX2ZvY3VzYWJsZSh0aGlzLnRhYnMpLHRoaXMuX2hvdmVyYWJsZSh0aGlzLnRhYnMpfSxfc2V0dXBIZWlnaHRTdHlsZTpmdW5jdGlvbihlKXt2YXIgaSxzPXRoaXMuZWxlbWVudC5wYXJlbnQoKTsiZmlsbCI9PT1lPyhpPXMuaGVpZ2h0KCksaS09dGhpcy5lbGVtZW50Lm91dGVySGVpZ2h0KCktdGhpcy5lbGVtZW50LmhlaWdodCgpLHRoaXMuZWxlbWVudC5zaWJsaW5ncygiOnZpc2libGUiKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKSxzPWUuY3NzKCJwb3NpdGlvbiIpOyJhYnNvbHV0ZSIhPT1zJiYiZml4ZWQiIT09cyYmKGktPWUub3V0ZXJIZWlnaHQoITApKX0pLHRoaXMuZWxlbWVudC5jaGlsZHJlbigpLm5vdCh0aGlzLnBhbmVscykuZWFjaChmdW5jdGlvbigpe2ktPXQodGhpcykub3V0ZXJIZWlnaHQoITApfSksdGhpcy5wYW5lbHMuZWFjaChmdW5jdGlvbigpe3QodGhpcykuaGVpZ2h0KE1hdGgubWF4KDAsaS10KHRoaXMpLmlubmVySGVpZ2h0KCkrdCh0aGlzKS5oZWlnaHQoKSkpfSkuY3NzKCJvdmVyZmxvdyIsImF1dG8iKSk6ImF1dG8iPT09ZSYmKGk9MCx0aGlzLnBhbmVscy5lYWNoKGZ1bmN0aW9uKCl7aT1NYXRoLm1heChpLHQodGhpcykuaGVpZ2h0KCIiKS5oZWlnaHQoKSl9KS5oZWlnaHQoaSkpfSxfZXZlbnRIYW5kbGVyOmZ1bmN0aW9uKGUpe3ZhciBpPXRoaXMub3B0aW9ucyxzPXRoaXMuYWN0aXZlLG49dChlLmN1cnJlbnRUYXJnZXQpLG89bi5jbG9zZXN0KCJsaSIpLGE9b1swXT09PXNbMF0scj1hJiZpLmNvbGxhcHNpYmxlLGg9cj90KCk6dGhpcy5fZ2V0UGFuZWxGb3JUYWIobyksbD1zLmxlbmd0aD90aGlzLl9nZXRQYW5lbEZvclRhYihzKTp0KCksYz17b2xkVGFiOnMsb2xkUGFuZWw6bCxuZXdUYWI6cj90KCk6byxuZXdQYW5lbDpofTtlLnByZXZlbnREZWZhdWx0KCksby5oYXNDbGFzcygidWktc3RhdGUtZGlzYWJsZWQiKXx8by5oYXNDbGFzcygidWktdGFicy1sb2FkaW5nIil8fHRoaXMucnVubmluZ3x8YSYmIWkuY29sbGFwc2libGV8fHRoaXMuX3RyaWdnZXIoImJlZm9yZUFjdGl2YXRlIixlLGMpPT09ITF8fChpLmFjdGl2ZT1yPyExOnRoaXMudGFicy5pbmRleChvKSx0aGlzLmFjdGl2ZT1hP3QoKTpvLHRoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpLGwubGVuZ3RofHxoLmxlbmd0aHx8dC5lcnJvcigialF1ZXJ5IFVJIFRhYnM6IE1pc21hdGNoaW5nIGZyYWdtZW50IGlkZW50aWZpZXIuIiksaC5sZW5ndGgmJnRoaXMubG9hZCh0aGlzLnRhYnMuaW5kZXgobyksZSksdGhpcy5fdG9nZ2xlKGUsYykpfSxfdG9nZ2xlOmZ1bmN0aW9uKGUsaSl7ZnVuY3Rpb24gcygpe28ucnVubmluZz0hMSxvLl90cmlnZ2VyKCJhY3RpdmF0ZSIsZSxpKX1mdW5jdGlvbiBuKCl7aS5uZXdUYWIuY2xvc2VzdCgibGkiKS5hZGRDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksYS5sZW5ndGgmJm8ub3B0aW9ucy5zaG93P28uX3Nob3coYSxvLm9wdGlvbnMuc2hvdyxzKTooYS5zaG93KCkscygpKX12YXIgbz10aGlzLGE9aS5uZXdQYW5lbCxyPWkub2xkUGFuZWw7dGhpcy5ydW5uaW5nPSEwLHIubGVuZ3RoJiZ0aGlzLm9wdGlvbnMuaGlkZT90aGlzLl9oaWRlKHIsdGhpcy5vcHRpb25zLmhpZGUsZnVuY3Rpb24oKXtpLm9sZFRhYi5jbG9zZXN0KCJsaSIpLnJlbW92ZUNsYXNzKCJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiKSxuKCl9KTooaS5vbGRUYWIuY2xvc2VzdCgibGkiKS5yZW1vdmVDbGFzcygidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiksci5oaWRlKCksbigpKSxyLmF0dHIoeyJhcmlhLWV4cGFuZGVkIjoiZmFsc2UiLCJhcmlhLWhpZGRlbiI6InRydWUifSksaS5vbGRUYWIuYXR0cigiYXJpYS1zZWxlY3RlZCIsImZhbHNlIiksYS5sZW5ndGgmJnIubGVuZ3RoP2kub2xkVGFiLmF0dHIoInRhYkluZGV4IiwtMSk6YS5sZW5ndGgmJnRoaXMudGFicy5maWx0ZXIoZnVuY3Rpb24oKXtyZXR1cm4gMD09PXQodGhpcykuYXR0cigidGFiSW5kZXgiKX0pLmF0dHIoInRhYkluZGV4IiwtMSksYS5hdHRyKHsiYXJpYS1leHBhbmRlZCI6InRydWUiLCJhcmlhLWhpZGRlbiI6ImZhbHNlIn0pLGkubmV3VGFiLmF0dHIoeyJhcmlhLXNlbGVjdGVkIjoidHJ1ZSIsdGFiSW5kZXg6MH0pfSxfYWN0aXZhdGU6ZnVuY3Rpb24oZSl7dmFyIGkscz10aGlzLl9maW5kQWN0aXZlKGUpO3NbMF0hPT10aGlzLmFjdGl2ZVswXSYmKHMubGVuZ3RofHwocz10aGlzLmFjdGl2ZSksaT1zLmZpbmQoIi51aS10YWJzLWFuY2hvciIpWzBdLHRoaXMuX2V2ZW50SGFuZGxlcih7dGFyZ2V0OmksY3VycmVudFRhcmdldDppLHByZXZlbnREZWZhdWx0OnQubm9vcH0pKX0sX2ZpbmRBY3RpdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT0hMT90KCk6dGhpcy50YWJzLmVxKGUpfSxfZ2V0SW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0JiYodD10aGlzLmFuY2hvcnMuaW5kZXgodGhpcy5hbmNob3JzLmZpbHRlcigiW2hyZWYkPSciK3QrIiddIikpKSx0fSxfZGVzdHJveTpmdW5jdGlvbigpe3RoaXMueGhyJiZ0aGlzLnhoci5hYm9ydCgpLHRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCB1aS10YWJzLWNvbGxhcHNpYmxlIiksdGhpcy50YWJsaXN0LnJlbW92ZUNsYXNzKCJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIpLnJlbW92ZUF0dHIoInJvbGUiKSx0aGlzLmFuY2hvcnMucmVtb3ZlQ2xhc3MoInVpLXRhYnMtYW5jaG9yIikucmVtb3ZlQXR0cigicm9sZSIpLnJlbW92ZUF0dHIoInRhYkluZGV4IikucmVtb3ZlVW5pcXVlSWQoKSx0aGlzLnRhYnMuYWRkKHRoaXMucGFuZWxzKS5lYWNoKGZ1bmN0aW9uKCl7dC5kYXRhKHRoaXMsInVpLXRhYnMtZGVzdHJveSIpP3QodGhpcykucmVtb3ZlKCk6dCh0aGlzKS5yZW1vdmVDbGFzcygidWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQgdWktY29ybmVyLXRvcCB1aS1jb3JuZXItYm90dG9tIHVpLXdpZGdldC1jb250ZW50IHVpLXRhYnMtYWN0aXZlIHVpLXRhYnMtcGFuZWwiKS5yZW1vdmVBdHRyKCJ0YWJJbmRleCIpLnJlbW92ZUF0dHIoImFyaWEtbGl2ZSIpLnJlbW92ZUF0dHIoImFyaWEtYnVzeSIpLnJlbW92ZUF0dHIoImFyaWEtc2VsZWN0ZWQiKS5yZW1vdmVBdHRyKCJhcmlhLWxhYmVsbGVkYnkiKS5yZW1vdmVBdHRyKCJhcmlhLWhpZGRlbiIpLnJlbW92ZUF0dHIoImFyaWEtZXhwYW5kZWQiKS5yZW1vdmVBdHRyKCJyb2xlIil9KSx0aGlzLnRhYnMuZWFjaChmdW5jdGlvbigpe3ZhciBlPXQodGhpcyksaT1lLmRhdGEoInVpLXRhYnMtYXJpYS1jb250cm9scyIpO2k/ZS5hdHRyKCJhcmlhLWNvbnRyb2xzIixpKS5yZW1vdmVEYXRhKCJ1aS10YWJzLWFyaWEtY29udHJvbHMiKTplLnJlbW92ZUF0dHIoImFyaWEtY29udHJvbHMiKX0pLHRoaXMucGFuZWxzLnNob3coKSwiY29udGVudCIhPT10aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUmJnRoaXMucGFuZWxzLmNzcygiaGVpZ2h0IiwiIil9LGVuYWJsZTpmdW5jdGlvbihpKXt2YXIgcz10aGlzLm9wdGlvbnMuZGlzYWJsZWQ7cyE9PSExJiYoaT09PWU/cz0hMTooaT10aGlzLl9nZXRJbmRleChpKSxzPXQuaXNBcnJheShzKT90Lm1hcChzLGZ1bmN0aW9uKHQpe3JldHVybiB0IT09aT90Om51bGx9KTp0Lm1hcCh0aGlzLnRhYnMsZnVuY3Rpb24odCxlKXtyZXR1cm4gZSE9PWk/ZTpudWxsfSkpLHRoaXMuX3NldHVwRGlzYWJsZWQocykpfSxkaXNhYmxlOmZ1bmN0aW9uKGkpe3ZhciBzPXRoaXMub3B0aW9ucy5kaXNhYmxlZDtpZihzIT09ITApe2lmKGk9PT1lKXM9ITA7ZWxzZXtpZihpPXRoaXMuX2dldEluZGV4KGkpLC0xIT09dC5pbkFycmF5KGkscykpcmV0dXJuO3M9dC5pc0FycmF5KHMpP3QubWVyZ2UoW2ldLHMpLnNvcnQoKTpbaV19dGhpcy5fc2V0dXBEaXNhYmxlZChzKX19LGxvYWQ6ZnVuY3Rpb24oZSxpKXtlPXRoaXMuX2dldEluZGV4KGUpO3ZhciBuPXRoaXMsbz10aGlzLnRhYnMuZXEoZSksYT1vLmZpbmQoIi51aS10YWJzLWFuY2hvciIpLHI9dGhpcy5fZ2V0UGFuZWxGb3JUYWIobyksaD17dGFiOm8scGFuZWw6cn07cyhhWzBdKXx8KHRoaXMueGhyPXQuYWpheCh0aGlzLl9hamF4U2V0dGluZ3MoYSxpLGgpKSx0aGlzLnhociYmImNhbmNlbGVkIiE9PXRoaXMueGhyLnN0YXR1c1RleHQmJihvLmFkZENsYXNzKCJ1aS10YWJzLWxvYWRpbmciKSxyLmF0dHIoImFyaWEtYnVzeSIsInRydWUiKSx0aGlzLnhoci5zdWNjZXNzKGZ1bmN0aW9uKHQpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXtyLmh0bWwodCksbi5fdHJpZ2dlcigibG9hZCIsaSxoKX0sMSl9KS5jb21wbGV0ZShmdW5jdGlvbih0LGUpe3NldFRpbWVvdXQoZnVuY3Rpb24oKXsiYWJvcnQiPT09ZSYmbi5wYW5lbHMuc3RvcCghMSwhMCksby5yZW1vdmVDbGFzcygidWktdGFicy1sb2FkaW5nIiksci5yZW1vdmVBdHRyKCJhcmlhLWJ1c3kiKSx0PT09bi54aHImJmRlbGV0ZSBuLnhocn0sMSl9KSkpfSxfYWpheFNldHRpbmdzOmZ1bmN0aW9uKGUsaSxzKXt2YXIgbj10aGlzO3JldHVybnt1cmw6ZS5hdHRyKCJocmVmIiksYmVmb3JlU2VuZDpmdW5jdGlvbihlLG8pe3JldHVybiBuLl90cmlnZ2VyKCJiZWZvcmVMb2FkIixpLHQuZXh0ZW5kKHtqcVhIUjplLGFqYXhTZXR0aW5nczpvfSxzKSl9fX0sX2dldFBhbmVsRm9yVGFiOmZ1bmN0aW9uKGUpe3ZhciBpPXQoZSkuYXR0cigiYXJpYS1jb250cm9scyIpO3JldHVybiB0aGlzLmVsZW1lbnQuZmluZCh0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCIjIitpKSl9fSl9KGpRdWVyeSksZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLGkpe3ZhciBzPShlLmF0dHIoImFyaWEtZGVzY3JpYmVkYnkiKXx8IiIpLnNwbGl0KC9ccysvKTtzLnB1c2goaSksZS5kYXRhKCJ1aS10b29sdGlwLWlkIixpKS5hdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iix0LnRyaW0ocy5qb2luKCIgIikpKX1mdW5jdGlvbiBpKGUpe3ZhciBpPWUuZGF0YSgidWktdG9vbHRpcC1pZCIpLHM9KGUuYXR0cigiYXJpYS1kZXNjcmliZWRieSIpfHwiIikuc3BsaXQoL1xzKy8pLG49dC5pbkFycmF5KGkscyk7LTEhPT1uJiZzLnNwbGljZShuLDEpLGUucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1pZCIpLHM9dC50cmltKHMuam9pbigiICIpKSxzP2UuYXR0cigiYXJpYS1kZXNjcmliZWRieSIscyk6ZS5yZW1vdmVBdHRyKCJhcmlhLWRlc2NyaWJlZGJ5Iil9dmFyIHM9MDt0LndpZGdldCgidWkudG9vbHRpcCIse3ZlcnNpb246IjEuMTAuMyIsb3B0aW9uczp7Y29udGVudDpmdW5jdGlvbigpe3ZhciBlPXQodGhpcykuYXR0cigidGl0bGUiKXx8IiI7cmV0dXJuIHQoIjxhPiIpLnRleHQoZSkuaHRtbCgpfSxoaWRlOiEwLGl0ZW1zOiJbdGl0bGVdOm5vdChbZGlzYWJsZWRdKSIscG9zaXRpb246e215OiJsZWZ0IHRvcCsxNSIsYXQ6ImxlZnQgYm90dG9tIixjb2xsaXNpb246ImZsaXBmaXQgZmxpcCJ9LHNob3c6ITAsdG9vbHRpcENsYXNzOm51bGwsdHJhY2s6ITEsY2xvc2U6bnVsbCxvcGVuOm51bGx9LF9jcmVhdGU6ZnVuY3Rpb24oKXt0aGlzLl9vbih7bW91c2VvdmVyOiJvcGVuIixmb2N1c2luOiJvcGVuIn0pLHRoaXMudG9vbHRpcHM9e30sdGhpcy5wYXJlbnRzPXt9LHRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fZGlzYWJsZSgpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGUsaSl7dmFyIHM9dGhpcztyZXR1cm4iZGlzYWJsZWQiPT09ZT8odGhpc1tpPyJfZGlzYWJsZSI6Il9lbmFibGUiXSgpLHRoaXMub3B0aW9uc1tlXT1pLHZvaWQgMCk6KHRoaXMuX3N1cGVyKGUsaSksImNvbnRlbnQiPT09ZSYmdC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24odCxlKXtzLl91cGRhdGVDb250ZW50KGUpfSksdm9pZCAwKX0sX2Rpc2FibGU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3QuZWFjaCh0aGlzLnRvb2x0aXBzLGZ1bmN0aW9uKGkscyl7dmFyIG49dC5FdmVudCgiYmx1ciIpO24udGFyZ2V0PW4uY3VycmVudFRhcmdldD1zWzBdLGUuY2xvc2UobiwhMCl9KSx0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtlLmlzKCJbdGl0bGVdIikmJmUuZGF0YSgidWktdG9vbHRpcC10aXRsZSIsZS5hdHRyKCJ0aXRsZSIpKS5hdHRyKCJ0aXRsZSIsIiIpfSl9LF9lbmFibGU6ZnVuY3Rpb24oKXt0aGlzLmVsZW1lbnQuZmluZCh0aGlzLm9wdGlvbnMuaXRlbXMpLmFkZEJhY2soKS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGU9dCh0aGlzKTtlLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmZS5hdHRyKCJ0aXRsZSIsZS5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikpfSl9LG9wZW46ZnVuY3Rpb24oZSl7dmFyIGk9dGhpcyxzPXQoZT9lLnRhcmdldDp0aGlzLmVsZW1lbnQpLmNsb3Nlc3QodGhpcy5vcHRpb25zLml0ZW1zKTtzLmxlbmd0aCYmIXMuZGF0YSgidWktdG9vbHRpcC1pZCIpJiYocy5hdHRyKCJ0aXRsZSIpJiZzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiLHMuYXR0cigidGl0bGUiKSkscy5kYXRhKCJ1aS10b29sdGlwLW9wZW4iLCEwKSxlJiYibW91c2VvdmVyIj09PWUudHlwZSYmcy5wYXJlbnRzKCkuZWFjaChmdW5jdGlvbigpe3ZhciBlLHM9dCh0aGlzKTtzLmRhdGEoInVpLXRvb2x0aXAtb3BlbiIpJiYoZT10LkV2ZW50KCJibHVyIiksZS50YXJnZXQ9ZS5jdXJyZW50VGFyZ2V0PXRoaXMsaS5jbG9zZShlLCEwKSkscy5hdHRyKCJ0aXRsZSIpJiYocy51bmlxdWVJZCgpLGkucGFyZW50c1t0aGlzLmlkXT17ZWxlbWVudDp0aGlzLHRpdGxlOnMuYXR0cigidGl0bGUiKX0scy5hdHRyKCJ0aXRsZSIsIiIpKX0pLHRoaXMuX3VwZGF0ZUNvbnRlbnQocyxlKSl9LF91cGRhdGVDb250ZW50OmZ1bmN0aW9uKHQsZSl7dmFyIGkscz10aGlzLm9wdGlvbnMuY29udGVudCxuPXRoaXMsbz1lP2UudHlwZTpudWxsO3JldHVybiJzdHJpbmciPT10eXBlb2Ygcz90aGlzLl9vcGVuKGUsdCxzKTooaT1zLmNhbGwodFswXSxmdW5jdGlvbihpKXt0LmRhdGEoInVpLXRvb2x0aXAtb3BlbiIpJiZuLl9kZWxheShmdW5jdGlvbigpe2UmJihlLnR5cGU9byksdGhpcy5fb3BlbihlLHQsaSl9KX0pLGkmJnRoaXMuX29wZW4oZSx0LGkpLHZvaWQgMCl9LF9vcGVuOmZ1bmN0aW9uKGkscyxuKXtmdW5jdGlvbiBvKHQpe2wub2Y9dCxhLmlzKCI6aGlkZGVuIil8fGEucG9zaXRpb24obCl9dmFyIGEscixoLGw9dC5leHRlbmQoe30sdGhpcy5vcHRpb25zLnBvc2l0aW9uKTsKaWYobil7aWYoYT10aGlzLl9maW5kKHMpLGEubGVuZ3RoKXJldHVybiBhLmZpbmQoIi51aS10b29sdGlwLWNvbnRlbnQiKS5odG1sKG4pLHZvaWQgMDtzLmlzKCJbdGl0bGVdIikmJihpJiYibW91c2VvdmVyIj09PWkudHlwZT9zLmF0dHIoInRpdGxlIiwiIik6cy5yZW1vdmVBdHRyKCJ0aXRsZSIpKSxhPXRoaXMuX3Rvb2x0aXAocyksZShzLGEuYXR0cigiaWQiKSksYS5maW5kKCIudWktdG9vbHRpcC1jb250ZW50IikuaHRtbChuKSx0aGlzLm9wdGlvbnMudHJhY2smJmkmJi9ebW91c2UvLnRlc3QoaS50eXBlKT8odGhpcy5fb24odGhpcy5kb2N1bWVudCx7bW91c2Vtb3ZlOm99KSxvKGkpKTphLnBvc2l0aW9uKHQuZXh0ZW5kKHtvZjpzfSx0aGlzLm9wdGlvbnMucG9zaXRpb24pKSxhLmhpZGUoKSx0aGlzLl9zaG93KGEsdGhpcy5vcHRpb25zLnNob3cpLHRoaXMub3B0aW9ucy5zaG93JiZ0aGlzLm9wdGlvbnMuc2hvdy5kZWxheSYmKGg9dGhpcy5kZWxheWVkU2hvdz1zZXRJbnRlcnZhbChmdW5jdGlvbigpe2EuaXMoIjp2aXNpYmxlIikmJihvKGwub2YpLGNsZWFySW50ZXJ2YWwoaCkpfSx0LmZ4LmludGVydmFsKSksdGhpcy5fdHJpZ2dlcigib3BlbiIsaSx7dG9vbHRpcDphfSkscj17a2V5dXA6ZnVuY3Rpb24oZSl7aWYoZS5rZXlDb2RlPT09dC51aS5rZXlDb2RlLkVTQ0FQRSl7dmFyIGk9dC5FdmVudChlKTtpLmN1cnJlbnRUYXJnZXQ9c1swXSx0aGlzLmNsb3NlKGksITApfX0scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5fcmVtb3ZlVG9vbHRpcChhKX19LGkmJiJtb3VzZW92ZXIiIT09aS50eXBlfHwoci5tb3VzZWxlYXZlPSJjbG9zZSIpLGkmJiJmb2N1c2luIiE9PWkudHlwZXx8KHIuZm9jdXNvdXQ9ImNsb3NlIiksdGhpcy5fb24oITAscyxyKX19LGNsb3NlOmZ1bmN0aW9uKGUpe3ZhciBzPXRoaXMsbj10KGU/ZS5jdXJyZW50VGFyZ2V0OnRoaXMuZWxlbWVudCksbz10aGlzLl9maW5kKG4pO3RoaXMuY2xvc2luZ3x8KGNsZWFySW50ZXJ2YWwodGhpcy5kZWxheWVkU2hvdyksbi5kYXRhKCJ1aS10b29sdGlwLXRpdGxlIikmJm4uYXR0cigidGl0bGUiLG4uZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSxpKG4pLG8uc3RvcCghMCksdGhpcy5faGlkZShvLHRoaXMub3B0aW9ucy5oaWRlLGZ1bmN0aW9uKCl7cy5fcmVtb3ZlVG9vbHRpcCh0KHRoaXMpKX0pLG4ucmVtb3ZlRGF0YSgidWktdG9vbHRpcC1vcGVuIiksdGhpcy5fb2ZmKG4sIm1vdXNlbGVhdmUgZm9jdXNvdXQga2V5dXAiKSxuWzBdIT09dGhpcy5lbGVtZW50WzBdJiZ0aGlzLl9vZmYobiwicmVtb3ZlIiksdGhpcy5fb2ZmKHRoaXMuZG9jdW1lbnQsIm1vdXNlbW92ZSIpLGUmJiJtb3VzZWxlYXZlIj09PWUudHlwZSYmdC5lYWNoKHRoaXMucGFyZW50cyxmdW5jdGlvbihlLGkpe3QoaS5lbGVtZW50KS5hdHRyKCJ0aXRsZSIsaS50aXRsZSksZGVsZXRlIHMucGFyZW50c1tlXX0pLHRoaXMuY2xvc2luZz0hMCx0aGlzLl90cmlnZ2VyKCJjbG9zZSIsZSx7dG9vbHRpcDpvfSksdGhpcy5jbG9zaW5nPSExKX0sX3Rvb2x0aXA6ZnVuY3Rpb24oZSl7dmFyIGk9InVpLXRvb2x0aXAtIitzKyssbj10KCI8ZGl2PiIpLmF0dHIoe2lkOmkscm9sZToidG9vbHRpcCJ9KS5hZGRDbGFzcygidWktdG9vbHRpcCB1aS13aWRnZXQgdWktY29ybmVyLWFsbCB1aS13aWRnZXQtY29udGVudCAiKyh0aGlzLm9wdGlvbnMudG9vbHRpcENsYXNzfHwiIikpO3JldHVybiB0KCI8ZGl2PiIpLmFkZENsYXNzKCJ1aS10b29sdGlwLWNvbnRlbnQiKS5hcHBlbmRUbyhuKSxuLmFwcGVuZFRvKHRoaXMuZG9jdW1lbnRbMF0uYm9keSksdGhpcy50b29sdGlwc1tpXT1lLG59LF9maW5kOmZ1bmN0aW9uKGUpe3ZhciBpPWUuZGF0YSgidWktdG9vbHRpcC1pZCIpO3JldHVybiBpP3QoIiMiK2kpOnQoKX0sX3JlbW92ZVRvb2x0aXA6ZnVuY3Rpb24odCl7dC5yZW1vdmUoKSxkZWxldGUgdGhpcy50b29sdGlwc1t0LmF0dHIoImlkIildfSxfZGVzdHJveTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7dC5lYWNoKHRoaXMudG9vbHRpcHMsZnVuY3Rpb24oaSxzKXt2YXIgbj10LkV2ZW50KCJibHVyIik7bi50YXJnZXQ9bi5jdXJyZW50VGFyZ2V0PXNbMF0sZS5jbG9zZShuLCEwKSx0KCIjIitpKS5yZW1vdmUoKSxzLmRhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSYmKHMuYXR0cigidGl0bGUiLHMuZGF0YSgidWktdG9vbHRpcC10aXRsZSIpKSxzLnJlbW92ZURhdGEoInVpLXRvb2x0aXAtdGl0bGUiKSl9KX19KX0oalF1ZXJ5KTs=]]></data>
	</file>
	<file>
	  <filename>/resources/public/js/jquery.ui.tabs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyohCiAqIGpRdWVyeSBVSSBUYWJzIDEuMTAuMwogKiBodHRwOi8vanF1ZXJ5dWkuY29tCiAqCiAqIENvcHlyaWdodCAyMDEzIGpRdWVyeSBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnMKICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLgogKiBodHRwOi8vanF1ZXJ5Lm9yZy9saWNlbnNlCiAqCiAqIGh0dHA6Ly9hcGkuanF1ZXJ5dWkuY29tL3RhYnMvCiAqCiAqIERlcGVuZHM6CiAqCWpxdWVyeS51aS5jb3JlLmpzCiAqCWpxdWVyeS51aS53aWRnZXQuanMKICovCihmdW5jdGlvbiggJCwgdW5kZWZpbmVkICkgewoKdmFyIHRhYklkID0gMCwKCXJoYXNoID0gLyMuKiQvOwoKZnVuY3Rpb24gZ2V0TmV4dFRhYklkKCkgewoJcmV0dXJuICsrdGFiSWQ7Cn0KCmZ1bmN0aW9uIGlzTG9jYWwoIGFuY2hvciApIHsKCXJldHVybiBhbmNob3IuaGFzaC5sZW5ndGggPiAxICYmCgkJZGVjb2RlVVJJQ29tcG9uZW50KCBhbmNob3IuaHJlZi5yZXBsYWNlKCByaGFzaCwgIiIgKSApID09PQoJCQlkZWNvZGVVUklDb21wb25lbnQoIGxvY2F0aW9uLmhyZWYucmVwbGFjZSggcmhhc2gsICIiICkgKTsKfQoKJC53aWRnZXQoICJ1aS50YWJzIiwgewoJdmVyc2lvbjogIjEuMTAuMyIsCglkZWxheTogMzAwLAoJb3B0aW9uczogewoJCWFjdGl2ZTogbnVsbCwKCQljb2xsYXBzaWJsZTogZmFsc2UsCgkJZXZlbnQ6ICJjbGljayIsCgkJaGVpZ2h0U3R5bGU6ICJjb250ZW50IiwKCQloaWRlOiBudWxsLAoJCXNob3c6IG51bGwsCgoJCS8vIGNhbGxiYWNrcwoJCWFjdGl2YXRlOiBudWxsLAoJCWJlZm9yZUFjdGl2YXRlOiBudWxsLAoJCWJlZm9yZUxvYWQ6IG51bGwsCgkJbG9hZDogbnVsbAoJfSwKCglfY3JlYXRlOiBmdW5jdGlvbigpIHsKCQl2YXIgdGhhdCA9IHRoaXMsCgkJCW9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CgoJCXRoaXMucnVubmluZyA9IGZhbHNlOwoKCQl0aGlzLmVsZW1lbnQKCQkJLmFkZENsYXNzKCAidWktdGFicyB1aS13aWRnZXQgdWktd2lkZ2V0LWNvbnRlbnQgdWktY29ybmVyLWFsbCIgKQoJCQkudG9nZ2xlQ2xhc3MoICJ1aS10YWJzLWNvbGxhcHNpYmxlIiwgb3B0aW9ucy5jb2xsYXBzaWJsZSApCgkJCS8vIFByZXZlbnQgdXNlcnMgZnJvbSBmb2N1c2luZyBkaXNhYmxlZCB0YWJzIHZpYSBjbGljawoJCQkuZGVsZWdhdGUoICIudWktdGFicy1uYXYgPiBsaSIsICJtb3VzZWRvd24iICsgdGhpcy5ldmVudE5hbWVzcGFjZSwgZnVuY3Rpb24oIGV2ZW50ICkgewoJCQkJaWYgKCAkKCB0aGlzICkuaXMoICIudWktc3RhdGUtZGlzYWJsZWQiICkgKSB7CgkJCQkJZXZlbnQucHJldmVudERlZmF1bHQoKTsKCQkJCX0KCQkJfSkKCQkJLy8gc3VwcG9ydDogSUUgPDkKCQkJLy8gUHJldmVudGluZyB0aGUgZGVmYXVsdCBhY3Rpb24gaW4gbW91c2Vkb3duIGRvZXNuJ3QgcHJldmVudCBJRQoJCQkvLyBmcm9tIGZvY3VzaW5nIHRoZSBlbGVtZW50LCBzbyBpZiB0aGUgYW5jaG9yIGdldHMgZm9jdXNlZCwgYmx1ci4KCQkJLy8gV2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBmb2N1c2luZyB0aGUgcHJldmlvdXNseSBmb2N1c2VkCgkJCS8vIGVsZW1lbnQgc2luY2UgY2xpY2tpbmcgb24gYSBub24tZm9jdXNhYmxlIGVsZW1lbnQgc2hvdWxkIGZvY3VzCgkJCS8vIHRoZSBib2R5IGFueXdheS4KCQkJLmRlbGVnYXRlKCAiLnVpLXRhYnMtYW5jaG9yIiwgImZvY3VzIiArIHRoaXMuZXZlbnROYW1lc3BhY2UsIGZ1bmN0aW9uKCkgewoJCQkJaWYgKCAkKCB0aGlzICkuY2xvc2VzdCggImxpIiApLmlzKCAiLnVpLXN0YXRlLWRpc2FibGVkIiApICkgewoJCQkJCXRoaXMuYmx1cigpOwoJCQkJfQoJCQl9KTsKCgkJdGhpcy5fcHJvY2Vzc1RhYnMoKTsKCQlvcHRpb25zLmFjdGl2ZSA9IHRoaXMuX2luaXRpYWxBY3RpdmUoKTsKCgkJLy8gVGFrZSBkaXNhYmxpbmcgdGFicyB2aWEgY2xhc3MgYXR0cmlidXRlIGZyb20gSFRNTAoJCS8vIGludG8gYWNjb3VudCBhbmQgdXBkYXRlIG9wdGlvbiBwcm9wZXJseS4KCQlpZiAoICQuaXNBcnJheSggb3B0aW9ucy5kaXNhYmxlZCApICkgewoJCQlvcHRpb25zLmRpc2FibGVkID0gJC51bmlxdWUoIG9wdGlvbnMuZGlzYWJsZWQuY29uY2F0KAoJCQkJJC5tYXAoIHRoaXMudGFicy5maWx0ZXIoICIudWktc3RhdGUtZGlzYWJsZWQiICksIGZ1bmN0aW9uKCBsaSApIHsKCQkJCQlyZXR1cm4gdGhhdC50YWJzLmluZGV4KCBsaSApOwoJCQkJfSkKCQkJKSApLnNvcnQoKTsKCQl9CgoJCS8vIGNoZWNrIGZvciBsZW5ndGggYXZvaWRzIGVycm9yIHdoZW4gaW5pdGlhbGl6aW5nIGVtcHR5IGxpc3QKCQlpZiAoIHRoaXMub3B0aW9ucy5hY3RpdmUgIT09IGZhbHNlICYmIHRoaXMuYW5jaG9ycy5sZW5ndGggKSB7CgkJCXRoaXMuYWN0aXZlID0gdGhpcy5fZmluZEFjdGl2ZSggb3B0aW9ucy5hY3RpdmUgKTsKCQl9IGVsc2UgewoJCQl0aGlzLmFjdGl2ZSA9ICQoKTsKCQl9CgoJCXRoaXMuX3JlZnJlc2goKTsKCgkJaWYgKCB0aGlzLmFjdGl2ZS5sZW5ndGggKSB7CgkJCXRoaXMubG9hZCggb3B0aW9ucy5hY3RpdmUgKTsKCQl9Cgl9LAoKCV9pbml0aWFsQWN0aXZlOiBmdW5jdGlvbigpIHsKCQl2YXIgYWN0aXZlID0gdGhpcy5vcHRpb25zLmFjdGl2ZSwKCQkJY29sbGFwc2libGUgPSB0aGlzLm9wdGlvbnMuY29sbGFwc2libGUsCgkJCWxvY2F0aW9uSGFzaCA9IGxvY2F0aW9uLmhhc2guc3Vic3RyaW5nKCAxICk7CgoJCWlmICggYWN0aXZlID09PSBudWxsICkgewoJCQkvLyBjaGVjayB0aGUgZnJhZ21lbnQgaWRlbnRpZmllciBpbiB0aGUgVVJMCgkJCWlmICggbG9jYXRpb25IYXNoICkgewoJCQkJdGhpcy50YWJzLmVhY2goZnVuY3Rpb24oIGksIHRhYiApIHsKCQkJCQlpZiAoICQoIHRhYiApLmF0dHIoICJhcmlhLWNvbnRyb2xzIiApID09PSBsb2NhdGlvbkhhc2ggKSB7CgkJCQkJCWFjdGl2ZSA9IGk7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQl9KTsKCQkJfQoKCQkJLy8gY2hlY2sgZm9yIGEgdGFiIG1hcmtlZCBhY3RpdmUgdmlhIGEgY2xhc3MKCQkJaWYgKCBhY3RpdmUgPT09IG51bGwgKSB7CgkJCQlhY3RpdmUgPSB0aGlzLnRhYnMuaW5kZXgoIHRoaXMudGFicy5maWx0ZXIoICIudWktdGFicy1hY3RpdmUiICkgKTsKCQkJfQoKCQkJLy8gbm8gYWN0aXZlIHRhYiwgc2V0IHRvIGZhbHNlCgkJCWlmICggYWN0aXZlID09PSBudWxsIHx8IGFjdGl2ZSA9PT0gLTEgKSB7CgkJCQlhY3RpdmUgPSB0aGlzLnRhYnMubGVuZ3RoID8gMCA6IGZhbHNlOwoJCQl9CgkJfQoKCQkvLyBoYW5kbGUgbnVtYmVyczogbmVnYXRpdmUsIG91dCBvZiByYW5nZQoJCWlmICggYWN0aXZlICE9PSBmYWxzZSApIHsKCQkJYWN0aXZlID0gdGhpcy50YWJzLmluZGV4KCB0aGlzLnRhYnMuZXEoIGFjdGl2ZSApICk7CgkJCWlmICggYWN0aXZlID09PSAtMSApIHsKCQkJCWFjdGl2ZSA9IGNvbGxhcHNpYmxlID8gZmFsc2UgOiAwOwoJCQl9CgkJfQoKCQkvLyBkb24ndCBhbGxvdyBjb2xsYXBzaWJsZTogZmFsc2UgYW5kIGFjdGl2ZTogZmFsc2UKCQlpZiAoICFjb2xsYXBzaWJsZSAmJiBhY3RpdmUgPT09IGZhbHNlICYmIHRoaXMuYW5jaG9ycy5sZW5ndGggKSB7CgkJCWFjdGl2ZSA9IDA7CgkJfQoKCQlyZXR1cm4gYWN0aXZlOwoJfSwKCglfZ2V0Q3JlYXRlRXZlbnREYXRhOiBmdW5jdGlvbigpIHsKCQlyZXR1cm4gewoJCQl0YWI6IHRoaXMuYWN0aXZlLAoJCQlwYW5lbDogIXRoaXMuYWN0aXZlLmxlbmd0aCA/ICQoKSA6IHRoaXMuX2dldFBhbmVsRm9yVGFiKCB0aGlzLmFjdGl2ZSApCgkJfTsKCX0sCgoJX3RhYktleWRvd246IGZ1bmN0aW9uKCBldmVudCApIHsKCQkvKmpzaGludCBtYXhjb21wbGV4aXR5OjE1Ki8KCQl2YXIgZm9jdXNlZFRhYiA9ICQoIHRoaXMuZG9jdW1lbnRbMF0uYWN0aXZlRWxlbWVudCApLmNsb3Nlc3QoICJsaSIgKSwKCQkJc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFicy5pbmRleCggZm9jdXNlZFRhYiApLAoJCQlnb2luZ0ZvcndhcmQgPSB0cnVlOwoKCQlpZiAoIHRoaXMuX2hhbmRsZVBhZ2VOYXYoIGV2ZW50ICkgKSB7CgkJCXJldHVybjsKCQl9CgoJCXN3aXRjaCAoIGV2ZW50LmtleUNvZGUgKSB7CgkJCWNhc2UgJC51aS5rZXlDb2RlLlJJR0hUOgoJCQljYXNlICQudWkua2V5Q29kZS5ET1dOOgoJCQkJc2VsZWN0ZWRJbmRleCsrOwoJCQkJYnJlYWs7CgkJCWNhc2UgJC51aS5rZXlDb2RlLlVQOgoJCQljYXNlICQudWkua2V5Q29kZS5MRUZUOgoJCQkJZ29pbmdGb3J3YXJkID0gZmFsc2U7CgkJCQlzZWxlY3RlZEluZGV4LS07CgkJCQlicmVhazsKCQkJY2FzZSAkLnVpLmtleUNvZGUuRU5EOgoJCQkJc2VsZWN0ZWRJbmRleCA9IHRoaXMuYW5jaG9ycy5sZW5ndGggLSAxOwoJCQkJYnJlYWs7CgkJCWNhc2UgJC51aS5rZXlDb2RlLkhPTUU6CgkJCQlzZWxlY3RlZEluZGV4ID0gMDsKCQkJCWJyZWFrOwoJCQljYXNlICQudWkua2V5Q29kZS5TUEFDRToKCQkJCS8vIEFjdGl2YXRlIG9ubHksIG5vIGNvbGxhcHNpbmcKCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCQljbGVhclRpbWVvdXQoIHRoaXMuYWN0aXZhdGluZyApOwoJCQkJdGhpcy5fYWN0aXZhdGUoIHNlbGVjdGVkSW5kZXggKTsKCQkJCXJldHVybjsKCQkJY2FzZSAkLnVpLmtleUNvZGUuRU5URVI6CgkJCQkvLyBUb2dnbGUgKGNhbmNlbCBkZWxheWVkIGFjdGl2YXRpb24sIGFsbG93IGNvbGxhcHNpbmcpCgkJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQkJY2xlYXJUaW1lb3V0KCB0aGlzLmFjdGl2YXRpbmcgKTsKCQkJCS8vIERldGVybWluZSBpZiB3ZSBzaG91bGQgY29sbGFwc2Ugb3IgYWN0aXZhdGUKCQkJCXRoaXMuX2FjdGl2YXRlKCBzZWxlY3RlZEluZGV4ID09PSB0aGlzLm9wdGlvbnMuYWN0aXZlID8gZmFsc2UgOiBzZWxlY3RlZEluZGV4ICk7CgkJCQlyZXR1cm47CgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm47CgkJfQoKCQkvLyBGb2N1cyB0aGUgYXBwcm9wcmlhdGUgdGFiLCBiYXNlZCBvbiB3aGljaCBrZXkgd2FzIHByZXNzZWQKCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCWNsZWFyVGltZW91dCggdGhpcy5hY3RpdmF0aW5nICk7CgkJc2VsZWN0ZWRJbmRleCA9IHRoaXMuX2ZvY3VzTmV4dFRhYiggc2VsZWN0ZWRJbmRleCwgZ29pbmdGb3J3YXJkICk7CgoJCS8vIE5hdmlnYXRpbmcgd2l0aCBjb250cm9sIGtleSB3aWxsIHByZXZlbnQgYXV0b21hdGljIGFjdGl2YXRpb24KCQlpZiAoICFldmVudC5jdHJsS2V5ICkgewoJCQkvLyBVcGRhdGUgYXJpYS1zZWxlY3RlZCBpbW1lZGlhdGVseSBzbyB0aGF0IEFUIHRoaW5rIHRoZSB0YWIgaXMgYWxyZWFkeSBzZWxlY3RlZC4KCQkJLy8gT3RoZXJ3aXNlIEFUIG1heSBjb25mdXNlIHRoZSB1c2VyIGJ5IHN0YXRpbmcgdGhhdCB0aGV5IG5lZWQgdG8gYWN0aXZhdGUgdGhlIHRhYiwKCQkJLy8gYnV0IHRoZSB0YWIgd2lsbCBhbHJlYWR5IGJlIGFjdGl2YXRlZCBieSB0aGUgdGltZSB0aGUgYW5ub3VuY2VtZW50IGZpbmlzaGVzLgoJCQlmb2N1c2VkVGFiLmF0dHIoICJhcmlhLXNlbGVjdGVkIiwgImZhbHNlIiApOwoJCQl0aGlzLnRhYnMuZXEoIHNlbGVjdGVkSW5kZXggKS5hdHRyKCAiYXJpYS1zZWxlY3RlZCIsICJ0cnVlIiApOwoKCQkJdGhpcy5hY3RpdmF0aW5nID0gdGhpcy5fZGVsYXkoZnVuY3Rpb24oKSB7CgkJCQl0aGlzLm9wdGlvbiggImFjdGl2ZSIsIHNlbGVjdGVkSW5kZXggKTsKCQkJfSwgdGhpcy5kZWxheSApOwoJCX0KCX0sCgoJX3BhbmVsS2V5ZG93bjogZnVuY3Rpb24oIGV2ZW50ICkgewoJCWlmICggdGhpcy5faGFuZGxlUGFnZU5hdiggZXZlbnQgKSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJLy8gQ3RybCt1cCBtb3ZlcyBmb2N1cyB0byB0aGUgY3VycmVudCB0YWIKCQlpZiAoIGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlVQICkgewoJCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoJCQl0aGlzLmFjdGl2ZS5mb2N1cygpOwoJCX0KCX0sCgoJLy8gQWx0K3BhZ2UgdXAvZG93biBtb3ZlcyBmb2N1cyB0byB0aGUgcHJldmlvdXMvbmV4dCB0YWIgKGFuZCBhY3RpdmF0ZXMpCglfaGFuZGxlUGFnZU5hdjogZnVuY3Rpb24oIGV2ZW50ICkgewoJCWlmICggZXZlbnQuYWx0S2V5ICYmIGV2ZW50LmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5QQUdFX1VQICkgewoJCQl0aGlzLl9hY3RpdmF0ZSggdGhpcy5fZm9jdXNOZXh0VGFiKCB0aGlzLm9wdGlvbnMuYWN0aXZlIC0gMSwgZmFsc2UgKSApOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9CgkJaWYgKCBldmVudC5hbHRLZXkgJiYgZXZlbnQua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlBBR0VfRE9XTiApIHsKCQkJdGhpcy5fYWN0aXZhdGUoIHRoaXMuX2ZvY3VzTmV4dFRhYiggdGhpcy5vcHRpb25zLmFjdGl2ZSArIDEsIHRydWUgKSApOwoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9LAoKCV9maW5kTmV4dFRhYjogZnVuY3Rpb24oIGluZGV4LCBnb2luZ0ZvcndhcmQgKSB7CgkJdmFyIGxhc3RUYWJJbmRleCA9IHRoaXMudGFicy5sZW5ndGggLSAxOwoKCQlmdW5jdGlvbiBjb25zdHJhaW4oKSB7CgkJCWlmICggaW5kZXggPiBsYXN0VGFiSW5kZXggKSB7CgkJCQlpbmRleCA9IDA7CgkJCX0KCQkJaWYgKCBpbmRleCA8IDAgKSB7CgkJCQlpbmRleCA9IGxhc3RUYWJJbmRleDsKCQkJfQoJCQlyZXR1cm4gaW5kZXg7CgkJfQoKCQl3aGlsZSAoICQuaW5BcnJheSggY29uc3RyYWluKCksIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApICE9PSAtMSApIHsKCQkJaW5kZXggPSBnb2luZ0ZvcndhcmQgPyBpbmRleCArIDEgOiBpbmRleCAtIDE7CgkJfQoKCQlyZXR1cm4gaW5kZXg7Cgl9LAoKCV9mb2N1c05leHRUYWI6IGZ1bmN0aW9uKCBpbmRleCwgZ29pbmdGb3J3YXJkICkgewoJCWluZGV4ID0gdGhpcy5fZmluZE5leHRUYWIoIGluZGV4LCBnb2luZ0ZvcndhcmQgKTsKCQl0aGlzLnRhYnMuZXEoIGluZGV4ICkuZm9jdXMoKTsKCQlyZXR1cm4gaW5kZXg7Cgl9LAoKCV9zZXRPcHRpb246IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkgewoJCWlmICgga2V5ID09PSAiYWN0aXZlIiApIHsKCQkJLy8gX2FjdGl2YXRlKCkgd2lsbCBoYW5kbGUgaW52YWxpZCB2YWx1ZXMgYW5kIHVwZGF0ZSB0aGlzLm9wdGlvbnMKCQkJdGhpcy5fYWN0aXZhdGUoIHZhbHVlICk7CgkJCXJldHVybjsKCQl9CgoJCWlmICgga2V5ID09PSAiZGlzYWJsZWQiICkgewoJCQkvLyBkb24ndCB1c2UgdGhlIHdpZGdldCBmYWN0b3J5J3MgZGlzYWJsZWQgaGFuZGxpbmcKCQkJdGhpcy5fc2V0dXBEaXNhYmxlZCggdmFsdWUgKTsKCQkJcmV0dXJuOwoJCX0KCgkJdGhpcy5fc3VwZXIoIGtleSwgdmFsdWUpOwoKCQlpZiAoIGtleSA9PT0gImNvbGxhcHNpYmxlIiApIHsKCQkJdGhpcy5lbGVtZW50LnRvZ2dsZUNsYXNzKCAidWktdGFicy1jb2xsYXBzaWJsZSIsIHZhbHVlICk7CgkJCS8vIFNldHRpbmcgY29sbGFwc2libGU6IGZhbHNlIHdoaWxlIGNvbGxhcHNlZDsgb3BlbiBmaXJzdCBwYW5lbAoJCQlpZiAoICF2YWx1ZSAmJiB0aGlzLm9wdGlvbnMuYWN0aXZlID09PSBmYWxzZSApIHsKCQkJCXRoaXMuX2FjdGl2YXRlKCAwICk7CgkJCX0KCQl9CgoJCWlmICgga2V5ID09PSAiZXZlbnQiICkgewoJCQl0aGlzLl9zZXR1cEV2ZW50cyggdmFsdWUgKTsKCQl9CgoJCWlmICgga2V5ID09PSAiaGVpZ2h0U3R5bGUiICkgewoJCQl0aGlzLl9zZXR1cEhlaWdodFN0eWxlKCB2YWx1ZSApOwoJCX0KCX0sCgoJX3RhYklkOiBmdW5jdGlvbiggdGFiICkgewoJCXJldHVybiB0YWIuYXR0ciggImFyaWEtY29udHJvbHMiICkgfHwgInVpLXRhYnMtIiArIGdldE5leHRUYWJJZCgpOwoJfSwKCglfc2FuaXRpemVTZWxlY3RvcjogZnVuY3Rpb24oIGhhc2ggKSB7CgkJcmV0dXJuIGhhc2ggPyBoYXNoLnJlcGxhY2UoIC9bISIkJSYnKCkqKywuXC86Ozw9Pj9AXFtcXVxeYHt8fX5dL2csICJcXCQmIiApIDogIiI7Cgl9LAoKCXJlZnJlc2g6IGZ1bmN0aW9uKCkgewoJCXZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zLAoJCQlsaXMgPSB0aGlzLnRhYmxpc3QuY2hpbGRyZW4oICI6aGFzKGFbaHJlZl0pIiApOwoKCQkvLyBnZXQgZGlzYWJsZWQgdGFicyBmcm9tIGNsYXNzIGF0dHJpYnV0ZSBmcm9tIEhUTUwKCQkvLyB0aGlzIHdpbGwgZ2V0IGNvbnZlcnRlZCB0byBhIGJvb2xlYW4gaWYgbmVlZGVkIGluIF9yZWZyZXNoKCkKCQlvcHRpb25zLmRpc2FibGVkID0gJC5tYXAoIGxpcy5maWx0ZXIoICIudWktc3RhdGUtZGlzYWJsZWQiICksIGZ1bmN0aW9uKCB0YWIgKSB7CgkJCXJldHVybiBsaXMuaW5kZXgoIHRhYiApOwoJCX0pOwoKCQl0aGlzLl9wcm9jZXNzVGFicygpOwoKCQkvLyB3YXMgY29sbGFwc2VkIG9yIG5vIHRhYnMKCQlpZiAoIG9wdGlvbnMuYWN0aXZlID09PSBmYWxzZSB8fCAhdGhpcy5hbmNob3JzLmxlbmd0aCApIHsKCQkJb3B0aW9ucy5hY3RpdmUgPSBmYWxzZTsKCQkJdGhpcy5hY3RpdmUgPSAkKCk7CgkJLy8gd2FzIGFjdGl2ZSwgYnV0IGFjdGl2ZSB0YWIgaXMgZ29uZQoJCX0gZWxzZSBpZiAoIHRoaXMuYWN0aXZlLmxlbmd0aCAmJiAhJC5jb250YWlucyggdGhpcy50YWJsaXN0WyAwIF0sIHRoaXMuYWN0aXZlWyAwIF0gKSApIHsKCQkJLy8gYWxsIHJlbWFpbmluZyB0YWJzIGFyZSBkaXNhYmxlZAoJCQlpZiAoIHRoaXMudGFicy5sZW5ndGggPT09IG9wdGlvbnMuZGlzYWJsZWQubGVuZ3RoICkgewoJCQkJb3B0aW9ucy5hY3RpdmUgPSBmYWxzZTsKCQkJCXRoaXMuYWN0aXZlID0gJCgpOwoJCQkvLyBhY3RpdmF0ZSBwcmV2aW91cyB0YWIKCQkJfSBlbHNlIHsKCQkJCXRoaXMuX2FjdGl2YXRlKCB0aGlzLl9maW5kTmV4dFRhYiggTWF0aC5tYXgoIDAsIG9wdGlvbnMuYWN0aXZlIC0gMSApLCBmYWxzZSApICk7CgkJCX0KCQkvLyB3YXMgYWN0aXZlLCBhY3RpdmUgdGFiIHN0aWxsIGV4aXN0cwoJCX0gZWxzZSB7CgkJCS8vIG1ha2Ugc3VyZSBhY3RpdmUgaW5kZXggaXMgY29ycmVjdAoJCQlvcHRpb25zLmFjdGl2ZSA9IHRoaXMudGFicy5pbmRleCggdGhpcy5hY3RpdmUgKTsKCQl9CgoJCXRoaXMuX3JlZnJlc2goKTsKCX0sCgoJX3JlZnJlc2g6IGZ1bmN0aW9uKCkgewoJCXRoaXMuX3NldHVwRGlzYWJsZWQoIHRoaXMub3B0aW9ucy5kaXNhYmxlZCApOwoJCXRoaXMuX3NldHVwRXZlbnRzKCB0aGlzLm9wdGlvbnMuZXZlbnQgKTsKCQl0aGlzLl9zZXR1cEhlaWdodFN0eWxlKCB0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUgKTsKCgkJdGhpcy50YWJzLm5vdCggdGhpcy5hY3RpdmUgKS5hdHRyKHsKCQkJImFyaWEtc2VsZWN0ZWQiOiAiZmFsc2UiLAoJCQl0YWJJbmRleDogLTEKCQl9KTsKCQl0aGlzLnBhbmVscy5ub3QoIHRoaXMuX2dldFBhbmVsRm9yVGFiKCB0aGlzLmFjdGl2ZSApICkKCQkJLmhpZGUoKQoJCQkuYXR0cih7CgkJCQkiYXJpYS1leHBhbmRlZCI6ICJmYWxzZSIsCgkJCQkiYXJpYS1oaWRkZW4iOiAidHJ1ZSIKCQkJfSk7CgoJCS8vIE1ha2Ugc3VyZSBvbmUgdGFiIGlzIGluIHRoZSB0YWIgb3JkZXIKCQlpZiAoICF0aGlzLmFjdGl2ZS5sZW5ndGggKSB7CgkJCXRoaXMudGFicy5lcSggMCApLmF0dHIoICJ0YWJJbmRleCIsIDAgKTsKCQl9IGVsc2UgewoJCQl0aGlzLmFjdGl2ZQoJCQkJLmFkZENsYXNzKCAidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiApCgkJCQkuYXR0cih7CgkJCQkJImFyaWEtc2VsZWN0ZWQiOiAidHJ1ZSIsCgkJCQkJdGFiSW5kZXg6IDAKCQkJCX0pOwoJCQl0aGlzLl9nZXRQYW5lbEZvclRhYiggdGhpcy5hY3RpdmUgKQoJCQkJLnNob3coKQoJCQkJLmF0dHIoewoJCQkJCSJhcmlhLWV4cGFuZGVkIjogInRydWUiLAoJCQkJCSJhcmlhLWhpZGRlbiI6ICJmYWxzZSIKCQkJCX0pOwoJCX0KCX0sCgoJX3Byb2Nlc3NUYWJzOiBmdW5jdGlvbigpIHsKCQl2YXIgdGhhdCA9IHRoaXM7CgoJCXRoaXMudGFibGlzdCA9IHRoaXMuX2dldExpc3QoKQoJCQkuYWRkQ2xhc3MoICJ1aS10YWJzLW5hdiB1aS1oZWxwZXItcmVzZXQgdWktaGVscGVyLWNsZWFyZml4IHVpLXdpZGdldC1oZWFkZXIgdWktY29ybmVyLWFsbCIgKQoJCQkuYXR0ciggInJvbGUiLCAidGFibGlzdCIgKTsKCgkJdGhpcy50YWJzID0gdGhpcy50YWJsaXN0LmZpbmQoICI+IGxpOmhhcyhhW2hyZWZdKSIgKQoJCQkuYWRkQ2xhc3MoICJ1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci10b3AiICkKCQkJLmF0dHIoewoJCQkJcm9sZTogInRhYiIsCgkJCQl0YWJJbmRleDogLTEKCQkJfSk7CgoJCXRoaXMuYW5jaG9ycyA9IHRoaXMudGFicy5tYXAoZnVuY3Rpb24oKSB7CgkJCQlyZXR1cm4gJCggImEiLCB0aGlzIClbIDAgXTsKCQkJfSkKCQkJLmFkZENsYXNzKCAidWktdGFicy1hbmNob3IiICkKCQkJLmF0dHIoewoJCQkJcm9sZTogInByZXNlbnRhdGlvbiIsCgkJCQl0YWJJbmRleDogLTEKCQkJfSk7CgoJCXRoaXMucGFuZWxzID0gJCgpOwoKCQl0aGlzLmFuY2hvcnMuZWFjaChmdW5jdGlvbiggaSwgYW5jaG9yICkgewoJCQl2YXIgc2VsZWN0b3IsIHBhbmVsLCBwYW5lbElkLAoJCQkJYW5jaG9ySWQgPSAkKCBhbmNob3IgKS51bmlxdWVJZCgpLmF0dHIoICJpZCIgKSwKCQkJCXRhYiA9ICQoIGFuY2hvciApLmNsb3Nlc3QoICJsaSIgKSwKCQkJCW9yaWdpbmFsQXJpYUNvbnRyb2xzID0gdGFiLmF0dHIoICJhcmlhLWNvbnRyb2xzIiApOwoKCQkJLy8gaW5saW5lIHRhYgoJCQlpZiAoIGlzTG9jYWwoIGFuY2hvciApICkgewoJCQkJc2VsZWN0b3IgPSBhbmNob3IuaGFzaDsKCQkJCXBhbmVsID0gdGhhdC5lbGVtZW50LmZpbmQoIHRoYXQuX3Nhbml0aXplU2VsZWN0b3IoIHNlbGVjdG9yICkgKTsKCQkJLy8gcmVtb3RlIHRhYgoJCQl9IGVsc2UgewoJCQkJcGFuZWxJZCA9IHRoYXQuX3RhYklkKCB0YWIgKTsKCQkJCXNlbGVjdG9yID0gIiMiICsgcGFuZWxJZDsKCQkJCXBhbmVsID0gdGhhdC5lbGVtZW50LmZpbmQoIHNlbGVjdG9yICk7CgkJCQlpZiAoICFwYW5lbC5sZW5ndGggKSB7CgkJCQkJcGFuZWwgPSB0aGF0Ll9jcmVhdGVQYW5lbCggcGFuZWxJZCApOwoJCQkJCXBhbmVsLmluc2VydEFmdGVyKCB0aGF0LnBhbmVsc1sgaSAtIDEgXSB8fCB0aGF0LnRhYmxpc3QgKTsKCQkJCX0KCQkJCXBhbmVsLmF0dHIoICJhcmlhLWxpdmUiLCAicG9saXRlIiApOwoJCQl9CgoJCQlpZiAoIHBhbmVsLmxlbmd0aCkgewoJCQkJdGhhdC5wYW5lbHMgPSB0aGF0LnBhbmVscy5hZGQoIHBhbmVsICk7CgkJCX0KCQkJaWYgKCBvcmlnaW5hbEFyaWFDb250cm9scyApIHsKCQkJCXRhYi5kYXRhKCAidWktdGFicy1hcmlhLWNvbnRyb2xzIiwgb3JpZ2luYWxBcmlhQ29udHJvbHMgKTsKCQkJfQoJCQl0YWIuYXR0cih7CgkJCQkiYXJpYS1jb250cm9scyI6IHNlbGVjdG9yLnN1YnN0cmluZyggMSApLAoJCQkJImFyaWEtbGFiZWxsZWRieSI6IGFuY2hvcklkCgkJCX0pOwoJCQlwYW5lbC5hdHRyKCAiYXJpYS1sYWJlbGxlZGJ5IiwgYW5jaG9ySWQgKTsKCQl9KTsKCgkJdGhpcy5wYW5lbHMKCQkJLmFkZENsYXNzKCAidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIiApCgkJCS5hdHRyKCAicm9sZSIsICJ0YWJwYW5lbCIgKTsKCX0sCgoJLy8gYWxsb3cgb3ZlcnJpZGluZyBob3cgdG8gZmluZCB0aGUgbGlzdCBmb3IgcmFyZSB1c2FnZSBzY2VuYXJpb3MgKCM3NzE1KQoJX2dldExpc3Q6IGZ1bmN0aW9uKCkgewoJCXJldHVybiB0aGlzLmVsZW1lbnQuZmluZCggIm9sLHVsIiApLmVxKCAwICk7Cgl9LAoKCV9jcmVhdGVQYW5lbDogZnVuY3Rpb24oIGlkICkgewoJCXJldHVybiAkKCAiPGRpdj4iICkKCQkJLmF0dHIoICJpZCIsIGlkICkKCQkJLmFkZENsYXNzKCAidWktdGFicy1wYW5lbCB1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYm90dG9tIiApCgkJCS5kYXRhKCAidWktdGFicy1kZXN0cm95IiwgdHJ1ZSApOwoJfSwKCglfc2V0dXBEaXNhYmxlZDogZnVuY3Rpb24oIGRpc2FibGVkICkgewoJCWlmICggJC5pc0FycmF5KCBkaXNhYmxlZCApICkgewoJCQlpZiAoICFkaXNhYmxlZC5sZW5ndGggKSB7CgkJCQlkaXNhYmxlZCA9IGZhbHNlOwoJCQl9IGVsc2UgaWYgKCBkaXNhYmxlZC5sZW5ndGggPT09IHRoaXMuYW5jaG9ycy5sZW5ndGggKSB7CgkJCQlkaXNhYmxlZCA9IHRydWU7CgkJCX0KCQl9CgoJCS8vIGRpc2FibGUgdGFicwoJCWZvciAoIHZhciBpID0gMCwgbGk7ICggbGkgPSB0aGlzLnRhYnNbIGkgXSApOyBpKysgKSB7CgkJCWlmICggZGlzYWJsZWQgPT09IHRydWUgfHwgJC5pbkFycmF5KCBpLCBkaXNhYmxlZCApICE9PSAtMSApIHsKCQkJCSQoIGxpICkKCQkJCQkuYWRkQ2xhc3MoICJ1aS1zdGF0ZS1kaXNhYmxlZCIgKQoJCQkJCS5hdHRyKCAiYXJpYS1kaXNhYmxlZCIsICJ0cnVlIiApOwoJCQl9IGVsc2UgewoJCQkJJCggbGkgKQoJCQkJCS5yZW1vdmVDbGFzcyggInVpLXN0YXRlLWRpc2FibGVkIiApCgkJCQkJLnJlbW92ZUF0dHIoICJhcmlhLWRpc2FibGVkIiApOwoJCQl9CgkJfQoKCQl0aGlzLm9wdGlvbnMuZGlzYWJsZWQgPSBkaXNhYmxlZDsKCX0sCgoJX3NldHVwRXZlbnRzOiBmdW5jdGlvbiggZXZlbnQgKSB7CgkJdmFyIGV2ZW50cyA9IHsKCQkJY2xpY2s6IGZ1bmN0aW9uKCBldmVudCApIHsKCQkJCWV2ZW50LnByZXZlbnREZWZhdWx0KCk7CgkJCX0KCQl9OwoJCWlmICggZXZlbnQgKSB7CgkJCSQuZWFjaCggZXZlbnQuc3BsaXQoIiAiKSwgZnVuY3Rpb24oIGluZGV4LCBldmVudE5hbWUgKSB7CgkJCQlldmVudHNbIGV2ZW50TmFtZSBdID0gIl9ldmVudEhhbmRsZXIiOwoJCQl9KTsKCQl9CgoJCXRoaXMuX29mZiggdGhpcy5hbmNob3JzLmFkZCggdGhpcy50YWJzICkuYWRkKCB0aGlzLnBhbmVscyApICk7CgkJdGhpcy5fb24oIHRoaXMuYW5jaG9ycywgZXZlbnRzICk7CgkJdGhpcy5fb24oIHRoaXMudGFicywgeyBrZXlkb3duOiAiX3RhYktleWRvd24iIH0gKTsKCQl0aGlzLl9vbiggdGhpcy5wYW5lbHMsIHsga2V5ZG93bjogIl9wYW5lbEtleWRvd24iIH0gKTsKCgkJdGhpcy5fZm9jdXNhYmxlKCB0aGlzLnRhYnMgKTsKCQl0aGlzLl9ob3ZlcmFibGUoIHRoaXMudGFicyApOwoJfSwKCglfc2V0dXBIZWlnaHRTdHlsZTogZnVuY3Rpb24oIGhlaWdodFN0eWxlICkgewoJCXZhciBtYXhIZWlnaHQsCgkJCXBhcmVudCA9IHRoaXMuZWxlbWVudC5wYXJlbnQoKTsKCgkJaWYgKCBoZWlnaHRTdHlsZSA9PT0gImZpbGwiICkgewoJCQltYXhIZWlnaHQgPSBwYXJlbnQuaGVpZ2h0KCk7CgkJCW1heEhlaWdodCAtPSB0aGlzLmVsZW1lbnQub3V0ZXJIZWlnaHQoKSAtIHRoaXMuZWxlbWVudC5oZWlnaHQoKTsKCgkJCXRoaXMuZWxlbWVudC5zaWJsaW5ncyggIjp2aXNpYmxlIiApLmVhY2goZnVuY3Rpb24oKSB7CgkJCQl2YXIgZWxlbSA9ICQoIHRoaXMgKSwKCQkJCQlwb3NpdGlvbiA9IGVsZW0uY3NzKCAicG9zaXRpb24iICk7CgoJCQkJaWYgKCBwb3NpdGlvbiA9PT0gImFic29sdXRlIiB8fCBwb3NpdGlvbiA9PT0gImZpeGVkIiApIHsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCQltYXhIZWlnaHQgLT0gZWxlbS5vdXRlckhlaWdodCggdHJ1ZSApOwoJCQl9KTsKCgkJCXRoaXMuZWxlbWVudC5jaGlsZHJlbigpLm5vdCggdGhpcy5wYW5lbHMgKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJbWF4SGVpZ2h0IC09ICQoIHRoaXMgKS5vdXRlckhlaWdodCggdHJ1ZSApOwoJCQl9KTsKCgkJCXRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQkkKCB0aGlzICkuaGVpZ2h0KCBNYXRoLm1heCggMCwgbWF4SGVpZ2h0IC0KCQkJCQkkKCB0aGlzICkuaW5uZXJIZWlnaHQoKSArICQoIHRoaXMgKS5oZWlnaHQoKSApICk7CgkJCX0pCgkJCS5jc3MoICJvdmVyZmxvdyIsICJhdXRvIiApOwoJCX0gZWxzZSBpZiAoIGhlaWdodFN0eWxlID09PSAiYXV0byIgKSB7CgkJCW1heEhlaWdodCA9IDA7CgkJCXRoaXMucGFuZWxzLmVhY2goZnVuY3Rpb24oKSB7CgkJCQltYXhIZWlnaHQgPSBNYXRoLm1heCggbWF4SGVpZ2h0LCAkKCB0aGlzICkuaGVpZ2h0KCAiIiApLmhlaWdodCgpICk7CgkJCX0pLmhlaWdodCggbWF4SGVpZ2h0ICk7CgkJfQoJfSwKCglfZXZlbnRIYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7CgkJdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsCgkJCWFjdGl2ZSA9IHRoaXMuYWN0aXZlLAoJCQlhbmNob3IgPSAkKCBldmVudC5jdXJyZW50VGFyZ2V0ICksCgkJCXRhYiA9IGFuY2hvci5jbG9zZXN0KCAibGkiICksCgkJCWNsaWNrZWRJc0FjdGl2ZSA9IHRhYlsgMCBdID09PSBhY3RpdmVbIDAgXSwKCQkJY29sbGFwc2luZyA9IGNsaWNrZWRJc0FjdGl2ZSAmJiBvcHRpb25zLmNvbGxhcHNpYmxlLAoJCQl0b1Nob3cgPSBjb2xsYXBzaW5nID8gJCgpIDogdGhpcy5fZ2V0UGFuZWxGb3JUYWIoIHRhYiApLAoJCQl0b0hpZGUgPSAhYWN0aXZlLmxlbmd0aCA/ICQoKSA6IHRoaXMuX2dldFBhbmVsRm9yVGFiKCBhY3RpdmUgKSwKCQkJZXZlbnREYXRhID0gewoJCQkJb2xkVGFiOiBhY3RpdmUsCgkJCQlvbGRQYW5lbDogdG9IaWRlLAoJCQkJbmV3VGFiOiBjb2xsYXBzaW5nID8gJCgpIDogdGFiLAoJCQkJbmV3UGFuZWw6IHRvU2hvdwoJCQl9OwoKCQlldmVudC5wcmV2ZW50RGVmYXVsdCgpOwoKCQlpZiAoIHRhYi5oYXNDbGFzcyggInVpLXN0YXRlLWRpc2FibGVkIiApIHx8CgkJCQkvLyB0YWIgaXMgYWxyZWFkeSBsb2FkaW5nCgkJCQl0YWIuaGFzQ2xhc3MoICJ1aS10YWJzLWxvYWRpbmciICkgfHwKCQkJCS8vIGNhbid0IHN3aXRjaCBkdXJuaW5nIGFuIGFuaW1hdGlvbgoJCQkJdGhpcy5ydW5uaW5nIHx8CgkJCQkvLyBjbGljayBvbiBhY3RpdmUgaGVhZGVyLCBidXQgbm90IGNvbGxhcHNpYmxlCgkJCQkoIGNsaWNrZWRJc0FjdGl2ZSAmJiAhb3B0aW9ucy5jb2xsYXBzaWJsZSApIHx8CgkJCQkvLyBhbGxvdyBjYW5jZWxpbmcgYWN0aXZhdGlvbgoJCQkJKCB0aGlzLl90cmlnZ2VyKCAiYmVmb3JlQWN0aXZhdGUiLCBldmVudCwgZXZlbnREYXRhICkgPT09IGZhbHNlICkgKSB7CgkJCXJldHVybjsKCQl9CgoJCW9wdGlvbnMuYWN0aXZlID0gY29sbGFwc2luZyA/IGZhbHNlIDogdGhpcy50YWJzLmluZGV4KCB0YWIgKTsKCgkJdGhpcy5hY3RpdmUgPSBjbGlja2VkSXNBY3RpdmUgPyAkKCkgOiB0YWI7CgkJaWYgKCB0aGlzLnhociApIHsKCQkJdGhpcy54aHIuYWJvcnQoKTsKCQl9CgoJCWlmICggIXRvSGlkZS5sZW5ndGggJiYgIXRvU2hvdy5sZW5ndGggKSB7CgkJCSQuZXJyb3IoICJqUXVlcnkgVUkgVGFiczogTWlzbWF0Y2hpbmcgZnJhZ21lbnQgaWRlbnRpZmllci4iICk7CgkJfQoKCQlpZiAoIHRvU2hvdy5sZW5ndGggKSB7CgkJCXRoaXMubG9hZCggdGhpcy50YWJzLmluZGV4KCB0YWIgKSwgZXZlbnQgKTsKCQl9CgkJdGhpcy5fdG9nZ2xlKCBldmVudCwgZXZlbnREYXRhICk7Cgl9LAoKCS8vIGhhbmRsZXMgc2hvdy9oaWRlIGZvciBzZWxlY3RpbmcgdGFicwoJX3RvZ2dsZTogZnVuY3Rpb24oIGV2ZW50LCBldmVudERhdGEgKSB7CgkJdmFyIHRoYXQgPSB0aGlzLAoJCQl0b1Nob3cgPSBldmVudERhdGEubmV3UGFuZWwsCgkJCXRvSGlkZSA9IGV2ZW50RGF0YS5vbGRQYW5lbDsKCgkJdGhpcy5ydW5uaW5nID0gdHJ1ZTsKCgkJZnVuY3Rpb24gY29tcGxldGUoKSB7CgkJCXRoYXQucnVubmluZyA9IGZhbHNlOwoJCQl0aGF0Ll90cmlnZ2VyKCAiYWN0aXZhdGUiLCBldmVudCwgZXZlbnREYXRhICk7CgkJfQoKCQlmdW5jdGlvbiBzaG93KCkgewoJCQlldmVudERhdGEubmV3VGFiLmNsb3Nlc3QoICJsaSIgKS5hZGRDbGFzcyggInVpLXRhYnMtYWN0aXZlIHVpLXN0YXRlLWFjdGl2ZSIgKTsKCgkJCWlmICggdG9TaG93Lmxlbmd0aCAmJiB0aGF0Lm9wdGlvbnMuc2hvdyApIHsKCQkJCXRoYXQuX3Nob3coIHRvU2hvdywgdGhhdC5vcHRpb25zLnNob3csIGNvbXBsZXRlICk7CgkJCX0gZWxzZSB7CgkJCQl0b1Nob3cuc2hvdygpOwoJCQkJY29tcGxldGUoKTsKCQkJfQoJCX0KCgkJLy8gc3RhcnQgb3V0IGJ5IGhpZGluZywgdGhlbiBzaG93aW5nLCB0aGVuIGNvbXBsZXRpbmcKCQlpZiAoIHRvSGlkZS5sZW5ndGggJiYgdGhpcy5vcHRpb25zLmhpZGUgKSB7CgkJCXRoaXMuX2hpZGUoIHRvSGlkZSwgdGhpcy5vcHRpb25zLmhpZGUsIGZ1bmN0aW9uKCkgewoJCQkJZXZlbnREYXRhLm9sZFRhYi5jbG9zZXN0KCAibGkiICkucmVtb3ZlQ2xhc3MoICJ1aS10YWJzLWFjdGl2ZSB1aS1zdGF0ZS1hY3RpdmUiICk7CgkJCQlzaG93KCk7CgkJCX0pOwoJCX0gZWxzZSB7CgkJCWV2ZW50RGF0YS5vbGRUYWIuY2xvc2VzdCggImxpIiApLnJlbW92ZUNsYXNzKCAidWktdGFicy1hY3RpdmUgdWktc3RhdGUtYWN0aXZlIiApOwoJCQl0b0hpZGUuaGlkZSgpOwoJCQlzaG93KCk7CgkJfQoKCQl0b0hpZGUuYXR0cih7CgkJCSJhcmlhLWV4cGFuZGVkIjogImZhbHNlIiwKCQkJImFyaWEtaGlkZGVuIjogInRydWUiCgkJfSk7CgkJZXZlbnREYXRhLm9sZFRhYi5hdHRyKCAiYXJpYS1zZWxlY3RlZCIsICJmYWxzZSIgKTsKCQkvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgdGFicywgcmVtb3ZlIHRoZSBvbGQgdGFiIGZyb20gdGhlIHRhYiBvcmRlci4KCQkvLyBJZiB3ZSdyZSBvcGVuaW5nIGZyb20gY29sbGFwc2VkIHN0YXRlLCByZW1vdmUgdGhlIHByZXZpb3VzIHRhYiBmcm9tIHRoZSB0YWIgb3JkZXIuCgkJLy8gSWYgd2UncmUgY29sbGFwc2luZywgdGhlbiBrZWVwIHRoZSBjb2xsYXBzaW5nIHRhYiBpbiB0aGUgdGFiIG9yZGVyLgoJCWlmICggdG9TaG93Lmxlbmd0aCAmJiB0b0hpZGUubGVuZ3RoICkgewoJCQlldmVudERhdGEub2xkVGFiLmF0dHIoICJ0YWJJbmRleCIsIC0xICk7CgkJfSBlbHNlIGlmICggdG9TaG93Lmxlbmd0aCApIHsKCQkJdGhpcy50YWJzLmZpbHRlcihmdW5jdGlvbigpIHsKCQkJCXJldHVybiAkKCB0aGlzICkuYXR0ciggInRhYkluZGV4IiApID09PSAwOwoJCQl9KQoJCQkuYXR0ciggInRhYkluZGV4IiwgLTEgKTsKCQl9CgoJCXRvU2hvdy5hdHRyKHsKCQkJImFyaWEtZXhwYW5kZWQiOiAidHJ1ZSIsCgkJCSJhcmlhLWhpZGRlbiI6ICJmYWxzZSIKCQl9KTsKCQlldmVudERhdGEubmV3VGFiLmF0dHIoewoJCQkiYXJpYS1zZWxlY3RlZCI6ICJ0cnVlIiwKCQkJdGFiSW5kZXg6IDAKCQl9KTsKCX0sCgoJX2FjdGl2YXRlOiBmdW5jdGlvbiggaW5kZXggKSB7CgkJdmFyIGFuY2hvciwKCQkJYWN0aXZlID0gdGhpcy5fZmluZEFjdGl2ZSggaW5kZXggKTsKCgkJLy8gdHJ5aW5nIHRvIGFjdGl2YXRlIHRoZSBhbHJlYWR5IGFjdGl2ZSBwYW5lbAoJCWlmICggYWN0aXZlWyAwIF0gPT09IHRoaXMuYWN0aXZlWyAwIF0gKSB7CgkJCXJldHVybjsKCQl9CgoJCS8vIHRyeWluZyB0byBjb2xsYXBzZSwgc2ltdWxhdGUgYSBjbGljayBvbiB0aGUgY3VycmVudCBhY3RpdmUgaGVhZGVyCgkJaWYgKCAhYWN0aXZlLmxlbmd0aCApIHsKCQkJYWN0aXZlID0gdGhpcy5hY3RpdmU7CgkJfQoKCQlhbmNob3IgPSBhY3RpdmUuZmluZCggIi51aS10YWJzLWFuY2hvciIgKVsgMCBdOwoJCXRoaXMuX2V2ZW50SGFuZGxlcih7CgkJCXRhcmdldDogYW5jaG9yLAoJCQljdXJyZW50VGFyZ2V0OiBhbmNob3IsCgkJCXByZXZlbnREZWZhdWx0OiAkLm5vb3AKCQl9KTsKCX0sCgoJX2ZpbmRBY3RpdmU6IGZ1bmN0aW9uKCBpbmRleCApIHsKCQlyZXR1cm4gaW5kZXggPT09IGZhbHNlID8gJCgpIDogdGhpcy50YWJzLmVxKCBpbmRleCApOwoJfSwKCglfZ2V0SW5kZXg6IGZ1bmN0aW9uKCBpbmRleCApIHsKCQkvLyBtZXRhLWZ1bmN0aW9uIHRvIGdpdmUgdXNlcnMgb3B0aW9uIHRvIHByb3ZpZGUgYSBocmVmIHN0cmluZyBpbnN0ZWFkIG9mIGEgbnVtZXJpY2FsIGluZGV4LgoJCWlmICggdHlwZW9mIGluZGV4ID09PSAic3RyaW5nIiApIHsKCQkJaW5kZXggPSB0aGlzLmFuY2hvcnMuaW5kZXgoIHRoaXMuYW5jaG9ycy5maWx0ZXIoICJbaHJlZiQ9JyIgKyBpbmRleCArICInXSIgKSApOwoJCX0KCgkJcmV0dXJuIGluZGV4OwoJfSwKCglfZGVzdHJveTogZnVuY3Rpb24oKSB7CgkJaWYgKCB0aGlzLnhociApIHsKCQkJdGhpcy54aHIuYWJvcnQoKTsKCQl9CgoJCXRoaXMuZWxlbWVudC5yZW1vdmVDbGFzcyggInVpLXRhYnMgdWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1hbGwgdWktdGFicy1jb2xsYXBzaWJsZSIgKTsKCgkJdGhpcy50YWJsaXN0CgkJCS5yZW1vdmVDbGFzcyggInVpLXRhYnMtbmF2IHVpLWhlbHBlci1yZXNldCB1aS1oZWxwZXItY2xlYXJmaXggdWktd2lkZ2V0LWhlYWRlciB1aS1jb3JuZXItYWxsIiApCgkJCS5yZW1vdmVBdHRyKCAicm9sZSIgKTsKCgkJdGhpcy5hbmNob3JzCgkJCS5yZW1vdmVDbGFzcyggInVpLXRhYnMtYW5jaG9yIiApCgkJCS5yZW1vdmVBdHRyKCAicm9sZSIgKQoJCQkucmVtb3ZlQXR0ciggInRhYkluZGV4IiApCgkJCS5yZW1vdmVVbmlxdWVJZCgpOwoKCQl0aGlzLnRhYnMuYWRkKCB0aGlzLnBhbmVscyApLmVhY2goZnVuY3Rpb24oKSB7CgkJCWlmICggJC5kYXRhKCB0aGlzLCAidWktdGFicy1kZXN0cm95IiApICkgewoJCQkJJCggdGhpcyApLnJlbW92ZSgpOwoJCQl9IGVsc2UgewoJCQkJJCggdGhpcyApCgkJCQkJLnJlbW92ZUNsYXNzKCAidWktc3RhdGUtZGVmYXVsdCB1aS1zdGF0ZS1hY3RpdmUgdWktc3RhdGUtZGlzYWJsZWQgIiArCgkJCQkJCSJ1aS1jb3JuZXItdG9wIHVpLWNvcm5lci1ib3R0b20gdWktd2lkZ2V0LWNvbnRlbnQgdWktdGFicy1hY3RpdmUgdWktdGFicy1wYW5lbCIgKQoJCQkJCS5yZW1vdmVBdHRyKCAidGFiSW5kZXgiICkKCQkJCQkucmVtb3ZlQXR0ciggImFyaWEtbGl2ZSIgKQoJCQkJCS5yZW1vdmVBdHRyKCAiYXJpYS1idXN5IiApCgkJCQkJLnJlbW92ZUF0dHIoICJhcmlhLXNlbGVjdGVkIiApCgkJCQkJLnJlbW92ZUF0dHIoICJhcmlhLWxhYmVsbGVkYnkiICkKCQkJCQkucmVtb3ZlQXR0ciggImFyaWEtaGlkZGVuIiApCgkJCQkJLnJlbW92ZUF0dHIoICJhcmlhLWV4cGFuZGVkIiApCgkJCQkJLnJlbW92ZUF0dHIoICJyb2xlIiApOwoJCQl9CgkJfSk7CgoJCXRoaXMudGFicy5lYWNoKGZ1bmN0aW9uKCkgewoJCQl2YXIgbGkgPSAkKCB0aGlzICksCgkJCQlwcmV2ID0gbGkuZGF0YSggInVpLXRhYnMtYXJpYS1jb250cm9scyIgKTsKCQkJaWYgKCBwcmV2ICkgewoJCQkJbGkKCQkJCQkuYXR0ciggImFyaWEtY29udHJvbHMiLCBwcmV2ICkKCQkJCQkucmVtb3ZlRGF0YSggInVpLXRhYnMtYXJpYS1jb250cm9scyIgKTsKCQkJfSBlbHNlIHsKCQkJCWxpLnJlbW92ZUF0dHIoICJhcmlhLWNvbnRyb2xzIiApOwoJCQl9CgkJfSk7CgoJCXRoaXMucGFuZWxzLnNob3coKTsKCgkJaWYgKCB0aGlzLm9wdGlvbnMuaGVpZ2h0U3R5bGUgIT09ICJjb250ZW50IiApIHsKCQkJdGhpcy5wYW5lbHMuY3NzKCAiaGVpZ2h0IiwgIiIgKTsKCQl9Cgl9LAoKCWVuYWJsZTogZnVuY3Rpb24oIGluZGV4ICkgewoJCXZhciBkaXNhYmxlZCA9IHRoaXMub3B0aW9ucy5kaXNhYmxlZDsKCQlpZiAoIGRpc2FibGVkID09PSBmYWxzZSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCBpbmRleCA9PT0gdW5kZWZpbmVkICkgewoJCQlkaXNhYmxlZCA9IGZhbHNlOwoJCX0gZWxzZSB7CgkJCWluZGV4ID0gdGhpcy5fZ2V0SW5kZXgoIGluZGV4ICk7CgkJCWlmICggJC5pc0FycmF5KCBkaXNhYmxlZCApICkgewoJCQkJZGlzYWJsZWQgPSAkLm1hcCggZGlzYWJsZWQsIGZ1bmN0aW9uKCBudW0gKSB7CgkJCQkJcmV0dXJuIG51bSAhPT0gaW5kZXggPyBudW0gOiBudWxsOwoJCQkJfSk7CgkJCX0gZWxzZSB7CgkJCQlkaXNhYmxlZCA9ICQubWFwKCB0aGlzLnRhYnMsIGZ1bmN0aW9uKCBsaSwgbnVtICkgewoJCQkJCXJldHVybiBudW0gIT09IGluZGV4ID8gbnVtIDogbnVsbDsKCQkJCX0pOwoJCQl9CgkJfQoJCXRoaXMuX3NldHVwRGlzYWJsZWQoIGRpc2FibGVkICk7Cgl9LAoKCWRpc2FibGU6IGZ1bmN0aW9uKCBpbmRleCApIHsKCQl2YXIgZGlzYWJsZWQgPSB0aGlzLm9wdGlvbnMuZGlzYWJsZWQ7CgkJaWYgKCBkaXNhYmxlZCA9PT0gdHJ1ZSApIHsKCQkJcmV0dXJuOwoJCX0KCgkJaWYgKCBpbmRleCA9PT0gdW5kZWZpbmVkICkgewoJCQlkaXNhYmxlZCA9IHRydWU7CgkJfSBlbHNlIHsKCQkJaW5kZXggPSB0aGlzLl9nZXRJbmRleCggaW5kZXggKTsKCQkJaWYgKCAkLmluQXJyYXkoIGluZGV4LCBkaXNhYmxlZCApICE9PSAtMSApIHsKCQkJCXJldHVybjsKCQkJfQoJCQlpZiAoICQuaXNBcnJheSggZGlzYWJsZWQgKSApIHsKCQkJCWRpc2FibGVkID0gJC5tZXJnZSggWyBpbmRleCBdLCBkaXNhYmxlZCApLnNvcnQoKTsKCQkJfSBlbHNlIHsKCQkJCWRpc2FibGVkID0gWyBpbmRleCBdOwoJCQl9CgkJfQoJCXRoaXMuX3NldHVwRGlzYWJsZWQoIGRpc2FibGVkICk7Cgl9LAoKCWxvYWQ6IGZ1bmN0aW9uKCBpbmRleCwgZXZlbnQgKSB7CgkJaW5kZXggPSB0aGlzLl9nZXRJbmRleCggaW5kZXggKTsKCQl2YXIgdGhhdCA9IHRoaXMsCgkJCXRhYiA9IHRoaXMudGFicy5lcSggaW5kZXggKSwKCQkJYW5jaG9yID0gdGFiLmZpbmQoICIudWktdGFicy1hbmNob3IiICksCgkJCXBhbmVsID0gdGhpcy5fZ2V0UGFuZWxGb3JUYWIoIHRhYiApLAoJCQlldmVudERhdGEgPSB7CgkJCQl0YWI6IHRhYiwKCQkJCXBhbmVsOiBwYW5lbAoJCQl9OwoKCQkvLyBub3QgcmVtb3RlCgkJaWYgKCBpc0xvY2FsKCBhbmNob3JbIDAgXSApICkgewoJCQlyZXR1cm47CgkJfQoKCQl0aGlzLnhociA9ICQuYWpheCggdGhpcy5fYWpheFNldHRpbmdzKCBhbmNob3IsIGV2ZW50LCBldmVudERhdGEgKSApOwoKCQkvLyBzdXBwb3J0OiBqUXVlcnkgPDEuOAoJCS8vIGpRdWVyeSA8MS44IHJldHVybnMgZmFsc2UgaWYgdGhlIHJlcXVlc3QgaXMgY2FuY2VsZWQgaW4gYmVmb3JlU2VuZCwKCQkvLyBidXQgYXMgb2YgMS44LCAkLmFqYXgoKSBhbHdheXMgcmV0dXJucyBhIGpxWEhSIG9iamVjdC4KCQlpZiAoIHRoaXMueGhyICYmIHRoaXMueGhyLnN0YXR1c1RleHQgIT09ICJjYW5jZWxlZCIgKSB7CgkJCXRhYi5hZGRDbGFzcyggInVpLXRhYnMtbG9hZGluZyIgKTsKCQkJcGFuZWwuYXR0ciggImFyaWEtYnVzeSIsICJ0cnVlIiApOwoKCQkJdGhpcy54aHIKCQkJCS5zdWNjZXNzKGZ1bmN0aW9uKCByZXNwb25zZSApIHsKCQkJCQkvLyBzdXBwb3J0OiBqUXVlcnkgPDEuOAoJCQkJCS8vIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzExNzc4CgkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQkJcGFuZWwuaHRtbCggcmVzcG9uc2UgKTsKCQkJCQkJdGhhdC5fdHJpZ2dlciggImxvYWQiLCBldmVudCwgZXZlbnREYXRhICk7CgkJCQkJfSwgMSApOwoJCQkJfSkKCQkJCS5jb21wbGV0ZShmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHsKCQkJCQkvLyBzdXBwb3J0OiBqUXVlcnkgPDEuOAoJCQkJCS8vIGh0dHA6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzExNzc4CgkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsKCQkJCQkJaWYgKCBzdGF0dXMgPT09ICJhYm9ydCIgKSB7CgkJCQkJCQl0aGF0LnBhbmVscy5zdG9wKCBmYWxzZSwgdHJ1ZSApOwoJCQkJCQl9CgoJCQkJCQl0YWIucmVtb3ZlQ2xhc3MoICJ1aS10YWJzLWxvYWRpbmciICk7CgkJCQkJCXBhbmVsLnJlbW92ZUF0dHIoICJhcmlhLWJ1c3kiICk7CgoJCQkJCQlpZiAoIGpxWEhSID09PSB0aGF0LnhociApIHsKCQkJCQkJCWRlbGV0ZSB0aGF0LnhocjsKCQkJCQkJfQoJCQkJCX0sIDEgKTsKCQkJCX0pOwoJCX0KCX0sCgoJX2FqYXhTZXR0aW5nczogZnVuY3Rpb24oIGFuY2hvciwgZXZlbnQsIGV2ZW50RGF0YSApIHsKCQl2YXIgdGhhdCA9IHRoaXM7CgkJcmV0dXJuIHsKCQkJdXJsOiBhbmNob3IuYXR0ciggImhyZWYiICksCgkJCWJlZm9yZVNlbmQ6IGZ1bmN0aW9uKCBqcVhIUiwgc2V0dGluZ3MgKSB7CgkJCQlyZXR1cm4gdGhhdC5fdHJpZ2dlciggImJlZm9yZUxvYWQiLCBldmVudCwKCQkJCQkkLmV4dGVuZCggeyBqcVhIUiA6IGpxWEhSLCBhamF4U2V0dGluZ3M6IHNldHRpbmdzIH0sIGV2ZW50RGF0YSApICk7CgkJCX0KCQl9OwoJfSwKCglfZ2V0UGFuZWxGb3JUYWI6IGZ1bmN0aW9uKCB0YWIgKSB7CgkJdmFyIGlkID0gJCggdGFiICkuYXR0ciggImFyaWEtY29udHJvbHMiICk7CgkJcmV0dXJuIHRoaXMuZWxlbWVudC5maW5kKCB0aGlzLl9zYW5pdGl6ZVNlbGVjdG9yKCAiIyIgKyBpZCApICk7Cgl9Cn0pOwoKfSkoIGpRdWVyeSApOwo=]]></data>
	</file>
	<file>
	  <filename>/smarty/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/smarty/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/smarty/templates/action.api.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCnt7aWYgJG1vZHVsZS0+Z2V0QVBJRW5hYmxlZCgpID09IDF9fQogIAogIGlmKGlzc2V0KCRwYXJhbXNbJ2NvbW1hbmQnXSkpCiAgewogICAgaWYoJ2xpc3QnID09ICRwYXJhbXNbJ2NvbW1hbmQnXSkKICAgIHsKICAgICAge3tmb3JlYWNoIGZyb209JGZpbHRlcnMgaXRlbT1maWx0ZXJ9fQogICAgICBpZiAoaXNzZXQoJF9SRVFVRVNUWyd7eyRmaWx0ZXIubmFtZX19J10pICYmICgkX1JFUVVFU1RbJ3t7JGZpbHRlci5uYW1lfX0nXSAhPSAnJykgJiYgIWlzc2V0KCRwYXJhbXNbJ3t7JGZpbHRlci5uYW1lfX0nXSkpIHsKICAgICAgICAkcGFyYW1zWyd7eyRmaWx0ZXIubmFtZX19J10gPSAkX1JFUVVFU1RbJ3t7JGZpbHRlci5uYW1lfX0nXTsKICAgICAgfQogICAgICB7ey9mb3JlYWNofX0KICAgICAgCiAgICAgIAogICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgICAkYy0+YWRkKCdwdWJsaXNoZWQnLCAnMScpOwogICAgICB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpidWlsZEZyb250ZW5kRmlsdGVycygkYywgJHBhcmFtcyk7CiAgICAgIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6Omdsb2JhbEZyb250ZW5kRmlsdGVycygkYywgJHBhcmFtcyk7CiAgICAgICRpdGVtcyA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0KCRjKTsKICAgICAgCiAgICAgIGlmKGlzX2FycmF5KCRpdGVtcykpCiAgICAgIHsKICAgICAgICAkanNvbiA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCgkaXRlbXMgYXMgJGtleSA9PiAkaXRlbSkKICAgICAgICB7CiAgICAgICAgICAkanNvblska2V5XSA9ICRpdGVtLT50b0FycmF5KCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRjYWxsYmFjayA9ICRfUkVRVUVTVFsnY2FsbGJhY2snXTsKICAgICAgICBpZiAoJGNhbGxiYWNrKSB7CiAgICAgICAgICAgIGhlYWRlcignQ29udGVudC10eXBlOiB0ZXh0L2phdmFzY3JpcHQnKTsKICAgICAgICAgIGVjaG8gJGNhbGxiYWNrIC4gJygnIC4gdXRmOF9lbmNvZGUoanNvbl9lbmNvZGUoJGpzb24pKSAuICcpOyc7CiAgICAgICAgfSBlbHNlIHsgICAgICAgIAogICAgICAgICAgICBoZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1qc29uJyk7CiAgICAgICAgICAgIGVjaG8gdXRmOF9lbmNvZGUoanNvbl9lbmNvZGUoJGpzb24pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgCiAgCnt7ZWxzZX19CiAgZWNobyAnQVBJIGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIG1vZHVsZSc7Cnt7L2lmfX0=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.assigntitles.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiR0aGlzLT5BdWRpdCgkaXRlbS0+Z2V0SWQoKSwgJHRoaXMtPkdldEZyaWVuZGx5TmFtZSgpLCAnW0RFUFJFQ0FURURdIC0gVGhlIGFjdGlvbiBhc3NpZ250aXRsZXMgaXMgZGVwcmVjYXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkJyk7CiAKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZXMnLCB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpnZXRUaXRsZXMoKSk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.calendar.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiRjLT5hZGQoJ3B1Ymxpc2hlZCcsICcxJyk7Cgp7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpidWlsZEZyb250ZW5kRmlsdGVycygkYywgJHBhcmFtcyk7Cnt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6Omdsb2JhbEZyb250ZW5kRmlsdGVycygkYyk7CgovLyBEZWZpbmUgc2NvcGUKCmlmKGlzc2V0KCRwYXJhbXNbJ2ZvcmdldF9zY29wZSddKSkKewogIHVuc2V0KCRfU0VTU0lPTlsnbW9kdWxlcyddWyd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19J11bJ2NhbGVuZGFyJ11bJ3Njb3BlJ10pOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snc2NvcGUnXSkpCnsKCSRzY29wZSA9ICRwYXJhbXNbJ3Njb3BlJ107Cn0KZWxzZWlmKGlzc2V0KCRfU0VTU0lPTlsnbW9kdWxlcyddWyd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19J11bJ2NhbGVuZGFyJ11bJ3Njb3BlJ10pKQp7CiAgJHNjb3BlID0gJF9TRVNTSU9OWydtb2R1bGVzJ11bJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nXVsnY2FsZW5kYXInXVsnc2NvcGUnXTsKfQplbHNlCnsKICAkc2NvcGUgPSB0aW1lKCk7Cn0KCmlmKCFpc3NldCgkcGFyYW1zWydmb3JnZXRfc2NvcGUnXSkpCnsKICAkX1NFU1NJT05bJ21vZHVsZXMnXVsne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSddWydjYWxlbmRhciddWydzY29wZSddID0gJHNjb3BlOwp9CgovLyBJbml0IGNhbGVuZGFyCgokY2FsZW5kYXIgPSBuZXcgTUNGQ2FsZW5kYXIoJHNjb3BlKTsKCiRjLT5hZGQoJ3N0YXJ0X2RhdGUnLCBkYXRlKCdZL20vZCcsICRjYWxlbmRhci0+ZW5kX2RhdGUpLCBNQ0ZDcml0ZXJpYTo6TEVTU19FUVVBTCk7CiRjLT5hZGQoJ2VuZF9kYXRlJywgZGF0ZSgnWS9tL2QnLCAkY2FsZW5kYXItPnN0YXJ0X2RhdGUpLCBNQ0ZDcml0ZXJpYTo6R1JFQVRFUl9FUVVBTCk7CgokaXRlbXMgPSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0Ojpkb1NlbGVjdCgkYyk7CgokZGV0YWlscGFnZSA9ICRyZXR1cm5pZDsKaWYgKGlzc2V0KCRwYXJhbXNbJ2RldGFpbHBhZ2UnXSkpIHsKICAgICRtYW5hZ2VyID0gY21zbXMoKS0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwogICAgJG5vZGUgPSAkbWFuYWdlci0+c3VyZUdldE5vZGVCeUFsaWFzKCRwYXJhbXNbJ2RldGFpbHBhZ2UnXSk7CiAgICBpZiAoJG5vZGUpIHsKICAgICAgICAkY29udGVudCA9ICRub2RlLT5HZXRDb250ZW50KCk7CiAgICAgICAgaWYgKCRjb250ZW50KQogICAgICAgIHsKICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkY29udGVudC0+SWQoKTsKICAgICAgICB9CiAgICB9IGVsc2UgewogICAgICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkcGFyYW1zWydkZXRhaWxwYWdlJ10pOwogICAgICAgIGlmICgkbm9kZSkgewogICAgICAgICAgICAkZGV0YWlscGFnZSA9ICRwYXJhbXNbJ2RldGFpbHBhZ2UnXTsKICAgICAgICB9CiAgICB9CiAgICAkcGFyYW1zWydvcmlnaWQnXSA9ICRyZXR1cm5pZDsKfQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RldGFpbHBhZ2UnLCRkZXRhaWxwYWdlKTsKCgovLyBNWCBQcmVsb2FkaW5nCiRpZHMgPSBhcnJheSgpOwpmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pCnsKCSRpZHNbXSA9ICRpdGVtLT5nZXRJZCgpOwp9CmlmKGNsYXNzX2V4aXN0cygnTVhfWHRlbmRlZE1vZHVsZScpKSB7CiAgTVhfWHRlbmRlZE1vZHVsZTo6cHJlbG9hZFJlbGF0ZWRJdGVtcygkdGhpcy0+Z2V0TmFtZSgpLCAkaWRzKTsKfQoKZm9yZWFjaCAoJGl0ZW1zIGFzICYkaXRlbSkgewoJJHBhcmFtc1snaXRlbV9pZCddID0gJGl0ZW0tPmdldElkKCk7CgkkcGFyYW1zWyd0aXRsZSddID0gJGl0ZW0tPmdldENvcmVTbHVnKCk7CgkkbmV3cGFyYW1zID0gJHBhcmFtczsKCXVuc2V0KCRuZXdwYXJhbXNbJ3Nob3d0ZW1wbGF0ZSddKTsKCXVuc2V0KCRuZXdwYXJhbXNbJ2RldGFpbHBhZ2UnXSk7Cgl1bnNldCgkbmV3cGFyYW1zWyd0ZW1wbGF0ZSddKTsKCSRpdGVtLT5kZXRhaWxfbGluayA9ICR0aGlzLT5jcmVhdGVMaW5rKCRpZCwgJ2NhbGVuZGFyJywgJGRldGFpbHBhZ2UsICRjb250ZW50cz0nJywgJG5ld3BhcmFtcywgJycsIHRydWUsIHRydWUpOwoJaWYoY2xhc3NfZXhpc3RzKCdNWF9YdGVuZGVkTW9kdWxlJykpIHsKCSAgJGl0ZW0tPnh0ZW5kZWRfZmVsaXN0ID0gTVhfWHRlbmRlZE1vZHVsZTo6Z2V0UmVsYXRlZEl0ZW1zKCR0aGlzLT5nZXROYW1lKCksICRpdGVtLT5nZXRJZCgpKTsKCX0KCn0KdW5zZXQoJGl0ZW0pOwoKJGNhbGVuZGFyLT5wcm9jZXNzRXZlbnRzKCRpdGVtcyk7CiRjYWxlbmRhci0+cHJvY2Vzc0NhbGVuZGFyKCk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbGVuZGFyJywgJGNhbGVuZGFyLT5jYWxlbmRhcl90YWJsZSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignbWNmY2FsZW5kYXInLCAkY2FsZW5kYXItPmNhbGVuZGFyX3RhYmxlKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjdXJyZW50X21vbnRoJywgJHNjb3BlKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaXJzdF9kYXknLCRjYWxlbmRhci0+Zmlyc3RfZGF5KTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsYXN0X2RheScsJGNhbGVuZGFyLT5sYXN0X2RheSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignbmV4dF9tb250aCcsICR0aGlzLT5jcmVhdGVMaW5rKCRpZCwnY2FsZW5kYXInLCAkZGV0YWlscGFnZSwgJGNvbnRlbnRzPScnLCAKCWFycmF5X21lcmdlKAoJCSRwYXJhbXMsIAoJCWFycmF5KAoJCQknc2NvcGUnID0+IHN0cnRvdGltZSgnKyAxIE1PTlRIJywkc2NvcGUpCgkJCSkKCQkpCgksICcnLCB0cnVlLCB0cnVlKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3ByZXZpb3VzX21vbnRoJywgJHRoaXMtPmNyZWF0ZUxpbmsoJGlkLCAnY2FsZW5kYXInLCAkZGV0YWlscGFnZSwgJGNvbnRlbnRzPScnLCAKCWFycmF5X21lcmdlKAoJCSRwYXJhbXMsICAgCgkJYXJyYXkoCgkJCSdzY29wZScgPT4gc3RydG90aW1lKCctIDEgTU9OVEgnLCAkc2NvcGUpCgkJCSkKCQkpCgksICcnLCB0cnVlLCB0cnVlKSk7CgoKaWYgKGlzc2V0KCRwYXJhbXNbJ3ZhciddKSkgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ3ZhciddLCAkaXRlbXMpOwp9IGVsc2UgewogICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCAkaXRlbXMpOwogICR0aGlzLT5zbWFydHktPmFzc2lnbigne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsICRpdGVtcyk7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKXxsb3dlcn19JywgJGl0ZW1zKTsKICAkcGFyYW1zb2JqID0gbmV3IHN0ZENsYXNzKCk7CiAgJHBhcmFtc29iai0+cGFyYW1zID0gJHBhcmFtczsKICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21jZmFjdG9yeScsICRwYXJhbXNvYmopOwoKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZvcignY2FsZW5kYXInLCAkcGFyYW1zKTsKfQoKcmV0dXJuOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.count.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiRjLT5hZGQoJ3B1Ymxpc2hlZCcsICcxJyk7Cgp7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpidWlsZEZyb250ZW5kRmlsdGVycygkYywgJHBhcmFtcyk7Cnt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6Omdsb2JhbEZyb250ZW5kRmlsdGVycygkYyk7CgppZiAoaXNzZXQoJHBhcmFtc1snY3VycmVudHBhZ2UnXSkpIHsKICBpZihjbGFzc19leGlzdHMoJ01YX1JlbGF0aW9uTGluaycpKSB7CiAgICAkYy0+YWRkKCdpZCcsIE1YX1JlbGF0aW9uTGluazo6Z2V0UmVsYXRlZEl0ZW1zSWRzKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdjb250ZW50X2lkJyksICdwYWdlcycpLCBNQ0ZDcml0ZXJpYTo6SU4pOwogIH0KfQppZiAoaXNzZXQoJHBhcmFtc1sncGFnZXMnXSkpIHsKCSRnbHVlID0gaXNzZXQoJHBhcmFtc1snYWxsX3BhZ2VzJ10pID8gJ0FORCcgOiAnT1InOwogIGlmKGNsYXNzX2V4aXN0cygnTVhfUmVsYXRpb25MaW5rJykpIHsKICAgICRjLT5hZGQoJ2lkJywgTVhfUmVsYXRpb25MaW5rOjpnZXRSZWxhdGVkSXRlbXNJZHMoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCBleHBsb2RlKCcsJywgJHBhcmFtc1sncGFnZXMnXSksICdwYWdlcycsICRnbHVlKSwgTUNGQ3JpdGVyaWE6OklOKTsKICB9Cn0KaWYgKGlzc2V0KCRwYXJhbXNbJ29wdGlvbnMnXSkpIHsKCSRnbHVlID0gaXNzZXQoJHBhcmFtc1snYWxsX29wdGlvbnMnXSkgPyAnQU5EJyA6ICdPUic7CiAgaWYoY2xhc3NfZXhpc3RzKCdNWF9SZWxhdGlvbkxpbmsnKSkgewogICAgJGMtPmFkZCgnaWQnLCBNWF9SZWxhdGlvbkxpbms6OmdldFJlbGF0ZWRJdGVtc0lkcygne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsIGV4cGxvZGUoJywnLCAkcGFyYW1zWydvcHRpb25zJ10pLCAnb3B0aW9ucycsICRnbHVlKSwgTUNGQ3JpdGVyaWE6OklOKTsKICB9Cn0KCnt7Zm9yZWFjaCBmcm9tPSRmaWx0ZXJzIGl0ZW09ZmlsdGVyfX0KaWYgKGlzc2V0KCRwYXJhbXNbJ3t7JGZpbHRlci5uYW1lfX0nXSkgJiYgIWVtcHR5KCRwYXJhbXNbJ3t7JGZpbHRlci5uYW1lfX0nXSkpIHsKCXt7aWYgaW5fYXJyYXkoJGZpbHRlci50eXBlLCBhcnJheSgnbGVzcycsICdsZXNzX2VxdWFsJywgJ2dyZWF0ZXInLCAnZ3JlYXRlcl9lcXVhbCcpKX19CgkkYy0+YWRkKCdDQVNUKHt7JGZpbHRlci5maWVsZH19IEFTIFVOU0lHTkVEKScsICRwYXJhbXNbJ3t7JGZpbHRlci5uYW1lfX0nXSwgTUNGQ3JpdGVyaWE6Ont7JGZpbHRlci5jcml0ZXJpYX19KTsKCXt7ZWxzZX19CgkkYy0+YWRkKCd7eyRmaWx0ZXIuZmllbGR9fScsICRwYXJhbXNbJ3t7JGZpbHRlci5uYW1lfX0nXSwgTUNGQ3JpdGVyaWE6Ont7JGZpbHRlci5jcml0ZXJpYX19KTsKCXt7L2lmfX0KfQp7ey9mb3JlYWNofX0KCmlmIChpc3NldCgkcGFyYW1zWydsaW1pdCddKSkgewoJJGMtPnNldExpbWl0KCRwYXJhbXNbJ2xpbWl0J10pOwp9CgplY2hvIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvQ291bnQoJGMpOw==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.default.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CmlmKGlzc2V0KCRwYXJhbXNbJ3Nob3dfdXNlcl9pdGVtcyddKSAmJiBNQ0ZUb29sczo6SXNNb2R1bGVBY3RpdmUoJ0NNU1VzZXJzJykpCnsKCSR1c2VyID0gQ01TVXNlcnM6OmdldFVzZXJPckxvZ2luKCk7CglpZiAoaXNfb2JqZWN0KCR1c2VyKSkKCXsKCQkkYy0+YWRkKCd1c2VyX2lkJywgJHVzZXItPmdldElkKCkpOwoJfQoJZWxzZQoJewoJCSRjLT5hZGQoJ3B1Ymxpc2hlZCcsICcxJyk7Cgl9Cn0KZWxzZQp7CgkkYy0+YWRkKCdwdWJsaXNoZWQnLCAnMScpOwp9CgoKe3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6YnVpbGRGcm9udGVuZEZpbHRlcnMoJGMsICRwYXJhbXMpOwp7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpnbG9iYWxGcm9udGVuZEZpbHRlcnMoJGMsICRwYXJhbXMpOwoKCmlmIChpc3NldCgkcGFyYW1zWydjYWxlbmRhciddKSAmJiBpc3NldCgkcGFyYW1zWydzdGFydF9kYXRlJ10pICYmIGlzc2V0KCRwYXJhbXNbJ2VuZF9kYXRlJ10pKQp7CgkkY2FsZW5kYXIgPSBuZXcgTUNGQ2FsZW5kYXIodGltZSgpKTsKICAkYy0+YWRkKCdzdGFydF9kYXRlJywgJHBhcmFtc1snc3RhcnRfZGF0ZSddLCBNQ0ZDcml0ZXJpYTo6TEVTU19FUVVBTCk7CiAgJGMtPmFkZCgnZW5kX2RhdGUnLCAkcGFyYW1zWydlbmRfZGF0ZSddLCBNQ0ZDcml0ZXJpYTo6R1JFQVRFUl9FUVVBTCk7CgkKfQplbHNlaWYgKGlzc2V0KCRwYXJhbXNbJ2NhbGVuZGFyJ10pICYmIGlzc2V0KCRwYXJhbXNbJ21vbnRoX2Zyb21fZGF0ZSddKSkKewogICAkY2FsZW5kYXJfdGltZSA9IHN0cnRvdGltZSgkcGFyYW1zWydtb250aF9mcm9tX2RhdGUnXSk7CiAgICRjYWxlbmRhciA9IG5ldyBNQ0ZDYWxlbmRhcigkY2FsZW5kYXJfdGltZSk7CiAgICRjLT5hZGQoJ3N0YXJ0X2RhdGUnLCBkYXRlKCdZL20vZCcsICRjYWxlbmRhci0+ZW5kX2RhdGUpLCBNQ0ZDcml0ZXJpYTo6TEVTU19FUVVBTCk7CiAgICRjLT5hZGQoJ2VuZF9kYXRlJywgZGF0ZSgnWS9tL2QnLCAkY2FsZW5kYXItPnN0YXJ0X2RhdGUpLCBNQ0ZDcml0ZXJpYTo6R1JFQVRFUl9FUVVBTCk7Cn0KZWxzZWlmICgKCWlzc2V0KCRwYXJhbXNbJ2NhbGVuZGFyJ10pIAoJJiYgCglpc3NldCgkX1NFU1NJT05bJ21vZHVsZXMnXVsne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSddWydjYWxlbmRhciddWydzY29wZSddKQoJJiYKCSghaXNzZXQoJHBhcmFtc1snbmV4dF9ldmVudHMnXSkpCgkmJgoJKCFpc3NldCgkcGFyYW1zWydwcmV2aW91c19ldmVudHMnXSkpCgkpCnsKCSAkY2FsZW5kYXIgPSBuZXcgTUNGQ2FsZW5kYXIoJF9TRVNTSU9OWydtb2R1bGVzJ11bJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nXVsnY2FsZW5kYXInXVsnc2NvcGUnXSk7CiAgICRjLT5hZGQoJ3N0YXJ0X2RhdGUnLCBkYXRlKCdZL20vZCcsICRjYWxlbmRhci0+ZW5kX2RhdGUpLCBNQ0ZDcml0ZXJpYTo6TEVTU19FUVVBTCk7CiAgICRjLT5hZGQoJ2VuZF9kYXRlJywgZGF0ZSgnWS9tL2QnLCAkY2FsZW5kYXItPnN0YXJ0X2RhdGUpLCBNQ0ZDcml0ZXJpYTo6R1JFQVRFUl9FUVVBTCk7Cn0KZWxzZWlmIChpc3NldCgkcGFyYW1zWydjYWxlbmRhciddKSkKewogICAkY2FsZW5kYXJfdGltZSA9IGlzc2V0KCRwYXJhbXNbJ2NhbF90aW1lJ10pPyRwYXJhbXNbJ2NhbF90aW1lJ106dGltZSgpOwogICAkY2FsZW5kYXIgPSBuZXcgTUNGQ2FsZW5kYXIoJGNhbGVuZGFyX3RpbWUpOwogICAkYy0+YWRkKCdzdGFydF9kYXRlJywgZGF0ZSgnWS9tL2QnLCAkY2FsZW5kYXItPmVuZF9kYXRlKSwgTUNGQ3JpdGVyaWE6OkxFU1NfRVFVQUwpOwogICAkYy0+YWRkKCdlbmRfZGF0ZScsIGRhdGUoJ1kvbS9kJywgJGNhbGVuZGFyLT5zdGFydF9kYXRlKSwgTUNGQ3JpdGVyaWE6OkdSRUFURVJfRVFVQUwpOwp9CgoKaWYgKGlzc2V0KCRwYXJhbXNbJ25leHRfZXZlbnRzJ10pKQp7CiAgICRjLT5hZGQoJ2VuZF9kYXRlJywgZGF0ZSgnWS9tL2QnKSwgTUNGQ3JpdGVyaWE6OkdSRUFURVJfRVFVQUwpOwp9CmlmIChpc3NldCgkcGFyYW1zWydwcmV2aW91c19ldmVudHMnXSkpCnsKICAgJGMtPmFkZCgnZW5kX2RhdGUnLCBkYXRlKCdZL20vZCcpLCBNQ0ZDcml0ZXJpYTo6TEVTU19USEFOKTsKfQoKCgokbW9kdWxleHRlbmRlciA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnTW9kdWxlWHRlbmRlcicpOwoKaWYoaXNfb2JqZWN0KCRtb2R1bGV4dGVuZGVyKSkgIHsKICBpZiAoJG1vZHVsZXh0ZW5kZXItPmlzWHRlbmRlZE1vZHVsZSgne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScpKSB7CiAgICAkbXhmaWx0ZXJzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKE1YX1JlbGF0aW9uOjpnZXRGaWx0ZXJzKCR0aGlzLT5nZXROYW1lKCkpIGFzICRmaWx0ZXIpIHsKICAgICAgaWYgKCRmaWx0ZXItPmdldFR5cGUoKSA9PSAnY2F0ZWdvcnknKSB7CiAgICAgICAgaWYoaXNzZXQoJHBhcmFtc1sndGl0bGVfZmlsdGVyX2NhdGVnb3J5XycuJGZpbHRlci0+Z2V0SWQoKV0pKSB7CiAgICAgICAgICAkdmFsdWVzID0gYXJyYXkoJHBhcmFtc1sndGl0bGVfZmlsdGVyX2NhdGVnb3J5XycuJGZpbHRlci0+Z2V0SWQoKV0gPT4gMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICR2YWx1ZXMgPSBhcnJheSgkZmlsdGVyLT5nZXRUaXRsZShmYWxzZSwgdHJ1ZSkgPT4gMCk7CiAgICAgICAgfQogICAgICAKICAgICAgICBmb3JlYWNoICgkZmlsdGVyLT5nZXRSZWxhdGVkSXRlbXMoKSBhcyAkaXRlbSkgewogICAgICAgICAgJHZhbHVlc1skaXRlbS0+dGl0bGVdID0gJGl0ZW0tPmlkOwogICAgICAgIH0KICAgICAgCiAgICAgICAgJG14ZmlsdGVyc1skZmlsdGVyLT5nZXRJZCgpXSA9ICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ214ZmlsdGVyc19vcHRpb25zWycgLiAkZmlsdGVyLT5pZCAuICddJywgJHZhbHVlcywgLTEsIGlzc2V0KCRwYXJhbXNbJ214ZmlsdGVyc19vcHRpb25zJ11bJGZpbHRlci0+aWRdKSA/ICRwYXJhbXNbJ214ZmlsdGVyc19vcHRpb25zJ11bJGZpbHRlci0+aWRdIDogJycpOwogICAgICB9IGVsc2VpZiAoJGZpbHRlci0+Z2V0VHlwZSgpID09ICdwYWdlJykgewogICAgICAgIGlmKGlzc2V0KCRwYXJhbXNbJ3RpdGxlX2ZpbHRlcl9wYWdlXycuJGZpbHRlci0+Z2V0SWQoKV0pKSB7CiAgICAgICAgICAkdmFsdWVzID0gYXJyYXkoJHBhcmFtc1sndGl0bGVfZmlsdGVyX3BhZ2VfJy4kZmlsdGVyLT5nZXRJZCgpXSA9PiAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgJHZhbHVlcyA9IGFycmF5KCRmaWx0ZXItPmdldFRpdGxlKGZhbHNlLCB0cnVlKSA9PiAwKTsKICAgICAgICB9CiAgICAgIAogICAgICAgIGZvcmVhY2ggKCRmaWx0ZXItPmdldFJlbGF0ZWRJdGVtcygpIGFzICRpdGVtKSB7CiAgICAgICAgICAkdmFsdWVzWyRpdGVtLT50aXRsZV0gPSAkaXRlbS0+aWQ7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRteGZpbHRlcnNbJGZpbHRlci0+Z2V0SWQoKV0gPSAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdteGZpbHRlcnNfcGFnZXNbJyAuICRmaWx0ZXItPmlkIC4gJ10nLCAkdmFsdWVzLCAtMSwgaXNzZXQoJHBhcmFtc1snbXhmaWx0ZXJzX3BhZ2VzJ11bJGZpbHRlci0+aWRdKSA/ICRwYXJhbXNbJ214ZmlsdGVyc19wYWdlcyddWyRmaWx0ZXItPmlkXSA6ICcnKTsKICAgICAgfQogICAgfQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdteGZpbHRlcnMnLCAkbXhmaWx0ZXJzKTsKICB9Cn0KCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVmaWx0ZXInLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2ZpbHRlcl90aXRsZScsIGlzc2V0KCRwYXJhbXNbJ2ZpbHRlcl90aXRsZSddKSA/IGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydmaWx0ZXJfdGl0bGUnXSkgOiAnJywgMjApKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaWx0ZXJfYWxsJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdmaWx0ZXJfYWxsJywgaXNzZXQoJHBhcmFtc1snZmlsdGVyX2FsbCddKSA/IGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydmaWx0ZXJfYWxsJ10pIDogJycsIDIwKSk7CgppZihpc3NldCgkcGFyYW1zWydvcmRlcl9ieSddKSkgJHBhcmFtc1snb3JkZXJieSddID0gJHBhcmFtc1snb3JkZXJfYnknXTsKCmlmIChpc3NldCgkcGFyYW1zWydyYW5kb20nXSkpIAp7CgkkYy0+YWRkQXNjZW5kaW5nT3JkZXJCeUNvbHVtbignUkFORCgpJyk7Cn0gCmVsc2VpZiAoaXNzZXQoJHBhcmFtc1snb3JkZXJieSddKSkgCnsKCSRjbGF1c2VzID0gZXhwbG9kZSgnLCcsICRwYXJhbXNbJ29yZGVyYnknXSk7Cglmb3JlYWNoICgkY2xhdXNlcyBhcyAkY2xhdXNlKSB7CgkJJGNsYXVzZSA9IHRyaW0oJGNsYXVzZSk7CgkJaWYgKHByZWdfbWF0Y2goJy8oXHcrKSg/OlxzKyhhc2N8ZGVzYykpPy9pJywgJGNsYXVzZSwgJG1hdGNoZXMpKSB7CgkJCSRjb2x1bW4gPSAkbWF0Y2hlc1sxXTsKCQkJJG9yZGVyID0gaXNzZXQoJG1hdGNoZXNbMl0pID8gc3RydG9sb3dlcigkbWF0Y2hlc1syXSkgOiAnYXNjJzsKCQkJaWYgKCRvcmRlciA9PSAnZGVzYycpIHsKCQkJCSRjLT5hZGREZXNjZW5kaW5nT3JkZXJCeUNvbHVtbigkY29sdW1uKTsKCQkJfSBlbHNlIHsKCQkJCSRjLT5hZGRBc2NlbmRpbmdPcmRlckJ5Q29sdW1uKCRjb2x1bW4pOwoJCQl9CgkJfQoJfQp9IGVsc2UgewogICAgJGMtPmFkZEFzY2VuZGluZ09yZGVyQnlDb2x1bW4oJ29yZGVyX2J5Jyk7Cn0KCmlmKGlzc2V0KCRwYXJhbXNbJ2dyb3VwX2J5J10pKQp7CiAgJGdyb3VwcyA9IGV4cGxvZGUoJywnLCAkcGFyYW1zWydncm91cF9ieSddKTsKICBmb3JlYWNoKCRncm91cHMgYXMgJGdyb3VwKQogIHsKICAgJGMtPmFkZEdyb3VwQnlDb2x1bW4odHJpbSgkZ3JvdXApKTsgCiAgfQp9CgppZiAoaXNzZXQoJHBhcmFtc1snbGltaXQnXSkpIHsKCWlmIChpc3NldCgkcGFyYW1zWydwYWdlJ10pKSB7CgkJJHBhZ2UgPSAkcGFyYW1zWydwYWdlJ107CgkJJGMtPnNldE9mZnNldCgoJHBhZ2UgLSAxKSAqICRwYXJhbXNbJ2xpbWl0J10pOwoJfSBlbHNlIHsKCQkkcGFnZSA9IDE7Cgl9CglpZihpc3NldCgkcGFyYW1zWydvZmZzZXQnXSkpCgl7CgkJJGMtPnNldE9mZnNldCgkcGFyYW1zWydvZmZzZXQnXSk7Cgl9CgkkYy0+c2V0TGltaXQoJHBhcmFtc1snbGltaXQnXSk7Cn0KCiRpdGVtcyA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0KCRjKTsKCmlmKGlzc2V0KCRwYXJhbXNbJ3JldmVyc2UnXSkpCnsKCSRpdGVtcyA9IGFycmF5X3JldmVyc2UoJGl0ZW1zLCB0cnVlKTsKfQoKaWYgKCgkdGhpcy0+Z2V0UHJlZmVyZW5jZSgnc2hvd19wYXJlbnQnLCAnMCcpID09IDEpICYmIGlzc2V0KCRwYXJhbXNbJ2dldF90cmVlJ10pKQp7CiAgJHRyZWUgPSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpidWlsZFRyZWUoJGl0ZW1zKTsKICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfGxvd2VyfX1fdHJlZScsICR0cmVlKTsgCn0KCmlmIChpc3NldCgkcGFyYW1zWydsaW1pdCddKSkgewoJJGMtPnNldE9mZnNldCgwKTsKCSRjLT5zZXRMaW1pdCgwKTsKCSR0b3RhbCA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvQ291bnQoJGMpOwoJJHRvdGFscGFnZXMgPSBjZWlsKCR0b3RhbCAvICRwYXJhbXNbJ2xpbWl0J10pOwoJJHBhZ2UgPSAkcGFyYW1zWydwYWdlJ10gPyAkcGFyYW1zWydwYWdlJ10gOiAxOwoJJHBhZ2VyID0gYXJyYXkoKTsKCSRwYWdlclsnaGFzX3RvX3BhZ2luYXRlJ10gPSAkdG90YWxwYWdlcyA+IDE7CgkkcGFnZXJbJ2N1cnJlbnQnXSA9ICRwYWdlOwoJJHBhZ2VyWyd0b3RhbF9wYWdlcyddID0gJHRvdGFscGFnZXM7CgkkcGFnZXJbJ3RvdGFsX3Jlc3VsdHMnXSA9ICR0b3RhbDsKCSRwYWdlclsncGFnZXMnXSA9IGFycmF5KCk7CgkKCWZvciAoJGkgPSAxOyAkaSA8PSAkdG90YWxwYWdlczsgKyskaSkgewoJCSRwYWdlclsncGFnZXMnXVtdID0gKCRpID09ICRwYWdlKSA/ICRpIDogJHRoaXMtPmNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJGksIAoJCSR0aGlzLT5QYXJhbXNGb3JMaW5rKCRwYXJhbXMsIGFycmF5KCdwYWdlJyA9PiAkaSkpCgkJLCAnJyk7Cgl9CgkkcGFnZXJbJ3ByZXZpb3VzX3BhZ2UnXSA9ICgkcGFnZSA+IDEpID8gJHRoaXMtPmNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJycsIAoJJHRoaXMtPlBhcmFtc0ZvckxpbmsoJHBhcmFtcywgYXJyYXkoJ3BhZ2UnID0+ICRwYWdlIC0gMSkpCgksICcnLCB0cnVlLCB0cnVlKSA6IGZhbHNlOwoJJHBhZ2VyWyduZXh0X3BhZ2UnXSA9ICgkcGFnZSA8ICR0b3RhbHBhZ2VzKSA/ICR0aGlzLT5jcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsICRyZXR1cm5pZCwgJycsIAoJJHRoaXMtPlBhcmFtc0ZvckxpbmsoJHBhcmFtcywgYXJyYXkoJ3BhZ2UnID0+ICRwYWdlICsgMSkpCgksICcnLCB0cnVlLCB0cnVlKSA6IGZhbHNlOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYWdlcicsICRwYWdlcik7Cn0KCiRkZXRhaWxwYWdlID0gJHJldHVybmlkOwppZiAoaXNzZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKSkgewogICAgJG1hbmFnZXIgPSBjbXNtcygpLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAkbm9kZSA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJHBhcmFtc1snZGV0YWlscGFnZSddKTsKICAgIGlmICgkbm9kZSkgewogICAgICAgICRjb250ZW50ID0gJG5vZGUtPkdldENvbnRlbnQoKTsKICAgICAgICBpZiAoJGNvbnRlbnQpCiAgICAgICAgewogICAgICAgICAgICAkZGV0YWlscGFnZSA9ICRjb250ZW50LT5JZCgpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgJG5vZGUgPSAkbWFuYWdlci0+c3VyZUdldE5vZGVCeUlkKCRwYXJhbXNbJ2RldGFpbHBhZ2UnXSk7CiAgICAgICAgaWYgKCRub2RlKSB7CiAgICAgICAgICAgICRkZXRhaWxwYWdlID0gJHBhcmFtc1snZGV0YWlscGFnZSddOwogICAgICAgIH0KICAgIH0KICAgICRwYXJhbXNbJ29yaWdpZCddID0gJHJldHVybmlkOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RldGFpbHBhZ2UnLCRkZXRhaWxwYWdlKTsKCi8vIE1YIFByZWxvYWRpbmcKJGlkcyA9IGFycmF5KCk7CmZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkKewoJJGlkc1tdID0gJGl0ZW0tPmdldElkKCk7Cn0KaWYoY2xhc3NfZXhpc3RzKCdNWF9YdGVuZGVkTW9kdWxlJykpIHsKICBNWF9YdGVuZGVkTW9kdWxlOjpwcmVsb2FkUmVsYXRlZEl0ZW1zKCR0aGlzLT5nZXROYW1lKCksICRpZHMpOwp9CgoKJG5ld3BhcmFtcyA9ICRwYXJhbXM7CnVuc2V0KCRuZXdwYXJhbXNbJ3Nob3d0ZW1wbGF0ZSddKTsKdW5zZXQoJG5ld3BhcmFtc1snZGV0YWlscGFnZSddKTsKdW5zZXQoJG5ld3BhcmFtc1sndGVtcGxhdGUnXSk7Cgpmb3JlYWNoICgkaXRlbXMgYXMgJiRpdGVtKSB7CgkkbmV3cGFyYW1zWydpdGVtX2lkJ10gPSAkaXRlbS0+Z2V0SWQoKTsKCSRuZXdwYXJhbXNbJ3RpdGxlJ10gPSAkaXRlbS0+Z2V0Q29yZVNsdWcoKTsKCSRpdGVtLT5kZXRhaWxfbGluayA9ICR0aGlzLT5jcmVhdGVMaW5rKCRpZCwgJ2RldGFpbCcsICRkZXRhaWxwYWdlLCAkY29udGVudHM9JycsICRuZXdwYXJhbXMsICcnLCB0cnVlKTsKCWlmKGNsYXNzX2V4aXN0cygnTVhfWHRlbmRlZE1vZHVsZScpKSB7CgkgICR4dGVuZGVkX2ZlbGlzdCA9IE1YX1h0ZW5kZWRNb2R1bGU6OmdldFJlbGF0ZWRJdGVtcygkdGhpcy0+Z2V0TmFtZSgpLCAkaXRlbS0+Z2V0SWQoKSk7CgkgICRpdGVtLT54dGVuZGVkX2ZlbGlzdCA9ICR4dGVuZGVkX2ZlbGlzdDsKCX0KfQp1bnNldCgkaXRlbSk7CgppZiAoaXNzZXQoJHBhcmFtc1snY2FsZW5kYXInXSkpCnsKICAgJGNhbGVuZGFyLT5wcm9jZXNzRXZlbnRzKCRpdGVtcyk7CiAgICRjYWxlbmRhci0+cHJvY2Vzc0NhbGVuZGFyKCk7CgogICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbGVuZGFyJywgJGNhbGVuZGFyLT5jYWxlbmRhcl90YWJsZSk7CiAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY3VycmVudF9tb250aCcsICRjYWxlbmRhcl90aW1lKTsKICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduZXh0X21vbnRoJywgJHRoaXMtPmNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywgJGRldGFpbHBhZ2UsICRjb250ZW50cz0nJywgYXJyYXlfbWVyZ2UoJHBhcmFtcywgYXJyYXkoJ2NhbF90aW1lJyA9PiBzdHJ0b3RpbWUoJysgMSBNT05USCcsJGNhbGVuZGFyX3RpbWUpKSksICcnLCB0cnVlLCB0cnVlKSk7CiAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJldmlvdXNfbW9udGgnLCAkdGhpcy0+Y3JlYXRlTGluaygkaWQsICdkZWZhdWx0JywgJGRldGFpbHBhZ2UsICRjb250ZW50cz0nJywgYXJyYXlfbWVyZ2UoJHBhcmFtcywgICBhcnJheSgnY2FsX3RpbWUnID0+IHN0cnRvdGltZSgnLSAxIE1PTlRIJywgJGNhbGVuZGFyX3RpbWUpKSksICcnLCB0cnVlLCB0cnVlKSk7Cn0KCi8vIEpTT04KaWYoaXNzZXQoJF9SRVFVRVNUWydqc29uJ10pKQp7CQoJJGpzb24gPSBhcnJheSgpOwoJZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pCgl7CgkJJGpzb25bXSA9ICRpdGVtLT5nZXRBc0FycmF5KCk7Cgl9CgkKCSRjYWxsYmFjayA9ICRfUkVRVUVTVFsnY2FsbGJhY2snXTsKCWlmICgkY2FsbGJhY2spIHsKCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogdGV4dC9qYXZhc2NyaXB0Jyk7CgkgIGVjaG8gJGNhbGxiYWNrIC4gJygnIC4gdXRmOF9lbmNvZGUoanNvbl9lbmNvZGUoJGpzb24pKSAuICcpOyc7Cgl9IGVsc2UgewkJCgkJaGVhZGVyKCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtanNvbicpOwoJCWVjaG8gdXRmOF9lbmNvZGUoanNvbl9lbmNvZGUoJGpzb24pKTsKCX0KCWV4aXQ7CglkaWUoKTsKfQoKCmlmIChpc3NldCgkcGFyYW1zWyd2YXInXSkpIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigkcGFyYW1zWyd2YXInXSwgJGl0ZW1zKTsKfSBlbHNlIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCAkaXRlbXMpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgJGl0ZW1zKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fScsICRpdGVtcyk7CiAgICAkcGFyYW1zb2JqID0gbmV3IHN0ZENsYXNzKCk7CiAgICAkcGFyYW1zb2JqLT5wYXJhbXMgPSAkcGFyYW1zOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtY2ZhY3RvcnknLCAkcGFyYW1zb2JqKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fV9wYXJhbXMnLCAkcGFyYW1zb2JqKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Zvcm1fc3RhcnQnLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2RlZmF1bHQnLCAkZGV0YWlscGFnZSwgJ3Bvc3QnKSk7CgkKCQkkaW5wdXRzX2hpZGRlbiA9ICcnOwoJCSRuZXdwYXJhbXMgPSAkcGFyYW1zOwoJCXVuc2V0KCRuZXdwYXJhbXNbJ21vZHVsZSddKTsKCQl1bnNldCgkbmV3cGFyYW1zWydhY3Rpb24nXSk7CgkJdW5zZXQoJG5ld3BhcmFtc1sncGFnZSddKTsKCQl1bnNldCgkbmV3cGFyYW1zWydyZXR1cm5pZCddKTsKCQlmb3JlYWNoKCRuZXdwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUpCgkJewoJCQkkaW5wdXRzX2hpZGRlbiAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCRrZXksJHZhbHVlKTsKCQl9CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dHNfaGlkZGVuJywgJGlucHV0c19oaWRkZW4pOwoJCgkJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRm9yKCdkZWZhdWx0JywgJHBhcmFtcyk7CgkKCXJldHVybjsKe3sqCiAgICAvLyBpZiAoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGUnXSkgJiYgJHRoaXMtPkdldFRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pKSB7CiAgICAvLyAJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pOwogICAgLy8gfSBlbHNlIHsKICAgIC8vIAllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2Rpc3BsYXlfbGlzdCcpOwogICAgLy8gfQoqfX0KfQoKPz4K]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.defaultadmin.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghKCR0aGlzLT5DaGVja0FjY2VzcygpIHx8ICR0aGlzLT5DaGVja0FjY2VzcygnTW9kaWZ5IFRlbXBsYXRlcycpKSkgewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CgokdGFicyA9IGFycmF5KAovLwknaXRlbXMnID0+IGZhbHNlLAovLwkndGVtcGxhdGVzJyA9PiBmYWxzZSwKLy8JJ29wdGlvbnMnID0+IGZhbHNlLAovLwknaGVscCcgPT4gZmFsc2UKKTsKCmlmICgkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkgewogJHRhYnNbJ2l0ZW1zJ10gPSBmYWxzZTsgCn0KCmlmICgkdGhpcy0+Q2hlY2tBY2Nlc3MoJ01vZGlmeSBUZW1wbGF0ZXMnKSkgeyAKICAkdGFic1sndGVtcGxhdGVzJ10gPSBmYWxzZTsKfSAKaWYgKCR0aGlzLT5DaGVja0FjY2VzcygnQWRtaW4ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScpKSB7IAogICR0YWJzWydvcHRpb25zJ10gPSBmYWxzZTsKfSAKJHRhYnNbJ2hlbHAnXSA9IGZhbHNlOyAKCmlmIChpc3NldCgkcGFyYW1zWydhY3RpdmVfdGFiJ10pKSB7CgkkdGFic1skcGFyYW1zWydhY3RpdmVfdGFiJ11dID0gdHJ1ZTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmZvcmVhY2ggKCR0YWJzIGFzICR0YWIgPT4gJHNlbGVjdGVkKSB7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJHRhYiwgJHRoaXMtPkxhbmcoJ3RhYl8nIC4gJHRhYiksICRzZWxlY3RlZCk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CmZvcmVhY2ggKCR0YWJzIGFzICR0YWIgPT4gJHNlbGVjdGVkKSB7CgllY2hvICR0aGlzLT5TdGFydFRhYigkdGFiKTsKCWluY2x1ZGUgJ2Z1bmN0aW9uLmRlZmF1bHRhZG1pbi4nLiR0YWIuJy5waHAnOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwoKZWNobyAnPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiQoIi5hY3Rpb25idXR0b24iKS5idXR0b24oKTs8L3NjcmlwdD4nOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.delete.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKJHZpZXcgPSBuZXcgTUNGTGlzdFZpZXcoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkcGFyYW1zKTsKCmlmIChpc3NldCgkcGFyYW1zWydpdGVtX2lkJ10pICYmICFlbXB0eSgkcGFyYW1zWydpdGVtX2lkJ10pKSB7CgkkaXRlbSA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmdldEJ5SWQoJHBhcmFtc1snaXRlbV9pZCddKTsKCSRvcmRlciA9ICRpdGVtLT5nZXRPcmRlckJ5KCk7CgkkaXRlbS0+ZGVsZXRlKCk7CglpZiAoJG9yZGVyKSB7CgkJJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKCQkkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfe3skdGFibGVfbmFtZX19IFNFVCBvcmRlcl9ieSA9ICBvcmRlcl9ieSAtIDEgV0hFUkUgb3JkZXJfYnkgPiA/JzsKCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkb3JkZXIpKTsKCX0KfQoKe3tpZiAkcGFyZW50X21vZHVsZX19CiRwYXJlbnQgPSBuZXcge3skcGFyZW50X21vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0oKTsKJHBhcmVudC0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCksICdpdGVtX2lkJyA9PiAkaXRlbS0+Z2V0UGFyZW50SXRlbSgpKSk7Cnt7ZWxzZX19CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpKSk7Cnt7L2lmfX0KZXhpdDsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.deletetemplate.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCdNYW5hZ2UgTUMgRmFjdG9yeScpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cn0KCiR2aWV3ID0gbmV3IE1DRkxpc3RWaWV3KCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgJHBhcmFtcyk7CgppZiAoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGUnXSkgJiYgIWVtcHR5KCRwYXJhbXNbJ3RlbXBsYXRlJ10pKSB7CiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGUnXSk7Cn0KCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpKSk7CmV4aXQ7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.detail.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiRjLT5hZGQoJ2lkJywgJHBhcmFtc1snaXRlbV9pZCddKTsKCiRwdWJsaXNoaW5nX2NoZWNrcyA9IHRydWU7CmlmKGlzc2V0KCRwYXJhbXNbJ3Nob3dfdXNlcl9pdGVtcyddKSAmJiBNQ0ZUb29sczo6SXNNb2R1bGVBY3RpdmUoJ0NNU1VzZXJzJykpCnsKCSR1c2VyID0gQ01TVXNlcnM6OmdldFVzZXJPckxvZ2luKCk7CglpZiAoaXNfb2JqZWN0KCR1c2VyKSkKCXsKCQkkYy0+YWRkKCd1c2VyX2lkJywgJHVzZXItPmdldElkKCkpOwoJCSRwdWJsaXNoaW5nX2NoZWNrcyA9IGZhbHNlOwoJfQoKfQppZiAoJHB1Ymxpc2hpbmdfY2hlY2tzICYmICghKGlzc2V0KCRwYXJhbXNbJ3ByZXZpZXdfa2V5J10pICYmICRfU0VTU0lPTlsne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSddWydwcmV2aWV3X2tleSddID09ICRwYXJhbXNbJ3ByZXZpZXdfa2V5J10pKSkKewoJJGMtPmFkZCgncHVibGlzaGVkJywgJzEnKTsJCgl7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpnbG9iYWxGcm9udGVuZEZpbHRlcnMoJGMpOwp9CgokaXRlbSA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0T25lKCRjKTsKCmlmIChpc19vYmplY3QoJGl0ZW0pICYmIGNsYXNzX2V4aXN0cygnWFRfWHRlbmRlZE1vZHVsZScpICYmIFhUX1h0ZW5kZWRNb2R1bGU6OmlzWHRlbmRlZE1vZHVsZSgkdGhpcy0+Z2V0TmFtZSgpKSkKewoJLyogQXR0YWNoZWQgbGlzdHMgKi8KICAkeHRlbmRlZF9mZWxpc3QgPSBNWF9YdGVuZGVkTW9kdWxlOjpnZXRSZWxhdGVkSXRlbXMoJHRoaXMtPmdldE5hbWUoKSwgJGl0ZW0tPmdldElkKCkpOwoJJGl0ZW0tPnh0ZW5kZWRfZmVsaXN0ID0gJHh0ZW5kZWRfZmVsaXN0OwoJLy8gZGVwcmVjYXRlZAoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd4dGVuZGVkX2ZlbGlzdCcsICR4dGVuZGVkX2ZlbGlzdCk7CgkKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ3ZhciddKSkgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRwYXJhbXNbJ3ZhciddLCAkaXRlbSk7Cn0gZWxzZSB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW0nLCAkaXRlbSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkaXRlbSk7CiAgICAkcGFyYW1zb2JqID0gbmV3IHN0ZENsYXNzKCk7CiAgICAkcGFyYW1zb2JqLT5wYXJhbXMgPSAkcGFyYW1zOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtY2ZhY3RvcnknLCAkcGFyYW1zb2JqKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fV9wYXJhbXMnLCAkcGFyYW1zb2JqKTsKICAgIAoJCWlmIChpc3NldCgkcGFyYW1zWydkZXRhaWx0ZW1wbGF0ZSddKSkgJHBhcmFtc1sndGVtcGxhdGUnXSA9ICRwYXJhbXNbJ2RldGFpbHRlbXBsYXRlJ107CgoJCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZvcignZGV0YWlsJywgJHBhcmFtcyk7CgkJcmV0dXJuOwp7eyoKICAgIC8vIGlmIChpc3NldCgkcGFyYW1zWydkZXRhaWx0ZW1wbGF0ZSddKSAmJiAkdGhpcy0+R2V0VGVtcGxhdGUoJHBhcmFtc1snZGV0YWlsdGVtcGxhdGUnXSkpIHsKICAgIC8vIAllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHBhcmFtc1snZGV0YWlsdGVtcGxhdGUnXSk7CiAgICAvLyB9IGVsc2UgewogICAgLy8gCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnZGlzcGxheV9kZXRhaWxzJyk7CiAgICAvLyB9Cip9fQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.download.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCiRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiRjLT5hZGQoJ2lkJywgJHBhcmFtc1snaXRlbV9pZCddKTsKCiRwdWJsaXNoaW5nX2NoZWNrcyA9IHRydWU7CmlmKGlzc2V0KCRwYXJhbXNbJ3Nob3dfdXNlcl9pdGVtcyddKSAmJiBNQ0ZUb29sczo6SXNNb2R1bGVBY3RpdmUoJ0NNU1VzZXJzJykpCnsKCSR1c2VyID0gQ01TVXNlcnM6OmdldFVzZXJPckxvZ2luKCk7CglpZiAoaXNfb2JqZWN0KCR1c2VyKSkKCXsKCQkkYy0+YWRkKCd1c2VyX2lkJywgJHVzZXItPmdldElkKCkpOwoJCSRwdWJsaXNoaW5nX2NoZWNrcyA9IGZhbHNlOwoJfQoKfQppZiAoJHB1Ymxpc2hpbmdfY2hlY2tzICYmICghKGlzc2V0KCRwYXJhbXNbJ3ByZXZpZXdfa2V5J10pICYmICRfU0VTU0lPTlsne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSddWydwcmV2aWV3X2tleSddID09ICRwYXJhbXNbJ3ByZXZpZXdfa2V5J10pKSkKewoJJGMtPmFkZCgncHVibGlzaGVkJywgJzEnKTsJCgl7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpnbG9iYWxGcm9udGVuZEZpbHRlcnMoJGMpOwp9CiRpdGVtID0ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6ZG9TZWxlY3RPbmUoJGMpOwppZihpc19vYmplY3QoJGl0ZW0pKSBlY2hvICRpdGVtLT5kb3dubG9hZE1DRkZpbGUoJHBhcmFtc1snZmllbGQnXSk7]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.edit.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKICByZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cn0KCiR2aWV3ID0gbmV3IE1DRkxpc3RWaWV3KCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgJHBhcmFtcyk7CgoKCmlmIChpc3NldCgkcGFyYW1zWydpdGVtX2lkJ10pICYmICFlbXB0eSgkcGFyYW1zWydpdGVtX2lkJ10pKSB7CiAgJGl0ZW0gPSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpnZXRCeUlkKCRwYXJhbXNbJ2l0ZW1faWQnXSk7Cn0gZWxzZSB7CiAgJGl0ZW0gPSBuZXcge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdCgpOwogICRpdGVtLT5zZXRQYXJlbnRJdGVtKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pdGVtJ10pID8gJHBhcmFtc1sncGFyZW50X2l0ZW0nXSA6IDApOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pKSB7CiAge3tpZiAkcGFyZW50X21vZHVsZX19CiAgJHBhcmVudCA9IG5ldyB7eyRwYXJlbnRfbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSgpOwogICRwYXJlbnQtPlJlZGlyZWN0KCRpZCwgJ2VkaXQnLCAkcmV0dXJuaWQsIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpLCAnaXRlbV9pZCcgPT4gJGl0ZW0tPmdldFBhcmVudEl0ZW0oKSkpOwogIHt7ZWxzZX19CiAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCkpKTsKICB7ey9pZn19CiAgZXhpdDsKfQoKJGZvcm0gPSBuZXcgQ01TRm9ybSgne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsICRpZCwnZWRpdCcsJHJldHVybmlkKTsKJGJ1dHRvbnMgPSBhcnJheSgnc3VibWl0JywnYXBwbHknLCdjYW5jZWwnKTsKaWYoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3NhdmVfYWRkJywgZmFsc2UpID09ICcxJykKewogICRidXR0b25zID0gYXJyYXkoJ3N1Ym1pdCcsJ3NhdmVfYWRkJywnYXBwbHknLCdjYW5jZWwnKTsgIAogICRmb3JtLT5zZXRMYWJlbCgnc2F2ZV9hZGQnLCAkdGhpcy0+TGFuZygnc2F2ZV9hZGQnKSk7Cn0KJGZvcm0tPnNldEJ1dHRvbnMoJGJ1dHRvbnMpOwokZm9ybS0+c2V0TXVsdGlwYXJ0Rm9ybSgpOwokZm9ybS0+c2V0TGFiZWwoJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdzYXZlJykpOwokZm9ybS0+c2V0TGFiZWwoJ2FwcGx5JywgJHRoaXMtPkxhbmcoJ3NhdmVfY29udGludWUnKSk7CiRmb3JtLT5zZXRMYWJlbCgnY2FuY2VsJywgJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKTsKCiRmb3JtLT5zZXRXaWRnZXQoJ3ZpZXcnLCdoaWRkZW4nLCBhcnJheSgndmFsdWUnID0+ICR2aWV3LT5nZXRWaWV3KCkpKTsKJGZvcm0tPnNldFdpZGdldCgnaXRlbV9pZCcsICdoaWRkZW4nLCBhcnJheSgnb2JqZWN0JyA9PiAmJGl0ZW0sICdmaWVsZF9uYW1lJyA9PiAnaWQnKSk7CiRmb3JtLT5zZXRXaWRnZXQoJ3BhcmVudF9pdGVtJywgJ2hpZGRlbicsIGFycmF5KCdvYmplY3QnID0+ICYkaXRlbSkpOwoKe3tpZiBpc3NldCgkZmlyc3RfdGFiX2ZpZWxkc2V0LnRhYl9rZXkpfX0KICAkZm9ybS0+c2V0RmllbGRzZXQoJ3t7JGZpcnN0X3RhYl9maWVsZHNldC50YWJfa2V5fX0tLS17eyRmaXJzdF90YWJfZmllbGRzZXQuZmllbGRzZXRfa2V5fX0nLCAne3skZmlyc3RfdGFiX2ZpZWxkc2V0LmZpZWxkc2V0X25hbWV9fScpOwogICRmb3JtLT5nZXRGaWVsZHNldCgne3skZmlyc3RfdGFiX2ZpZWxkc2V0LnRhYl9rZXl9fS0tLXt7JGZpcnN0X3RhYl9maWVsZHNldC5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3RpdGxlJywgJ3RleHQnLCBhcnJheSgnbGFiZWwnID0+ICd7eyR0aXRsZV9sYWJlbH19Jywnb2JqZWN0JyA9PiAmJGl0ZW0sICdzaXplJyA9PiA1MCkpOwogIAogIGlmICgkdGhpcy0+Z2V0UHJlZmVyZW5jZSgnc2hvd19wYXJlbnQnLCAnMCcpID09IDEpCiAgewogICAgJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaXJzdF90YWJfZmllbGRzZXQudGFiX2tleX19LS0te3skZmlyc3RfdGFiX2ZpZWxkc2V0LmZpZWxkc2V0X2tleX19JyktPnNldFdpZGdldCgncGFyZW50X2lkJywgJ3NlbGVjdCcsIGFycmF5KAogICAgICAnb2JqZWN0JyA9PiAmJGl0ZW0sIAogICAgICAndmFsdWVzJyA9PiBhcnJheSgwID0+ICcnKSArICRpdGVtLT5nZXRQb3NzaWJsZVBhcmVudHNIaWVyYXJjaHkoJyAtICcsICR0aGlzLT5nZXRQcmVmZXJlbmNlKCdzaG93X3BhcmVudF9maXJzdF9sZXZlbCcsICcwJykpCiAgICAgICkpOwogIH0KICAKe3tlbHNlfX0KICAkZm9ybS0+c2V0V2lkZ2V0KCd0aXRsZScsICd0ZXh0JywgYXJyYXkoJ2xhYmVsJyA9PiAne3skdGl0bGVfbGFiZWx9fScsJ29iamVjdCcgPT4gJiRpdGVtLCAnc2l6ZScgPT4gNTApKTsKe3svaWZ9fQoKLy8gQ3VzdG9tIHBhcnQKJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwoKe3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fVZpZXdzOjpjcmVhdGVGb3JtKCR0aGlzLCRmb3JtLCRpdGVtKTsKCgoKCgovLyBTVUIgTU9EVUxFUyBTRUNUSU9OCiRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiRjLT5hZGQoJ3BhcmVudF9tb2R1bGUnLCB7eyRtb2R1bGUtPmdldElkKCl9fSwgTUNGQ3JpdGVyaWE6OkVRVUFMKTsKJGNoaWxkX21vZHVsZXMgPSBNQ0ZNb2R1bGU6OmRvU2VsZWN0KCRjKTsKJHN1Ym1vZHVsZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkY2hpbGRfbW9kdWxlcyBhcyAkY2hpbGQpIHsKICBpZiAoTUNGVG9vbHM6OklzTW9kdWxlQWN0aXZlKCRjaGlsZC0+R2V0TW9kdWxlTmFtZSgpKSkKICB7CiAgICAkc3VibW9kdWxlc1skY2hpbGQtPmdldElkKCldID0gYXJyYXkoJ2duYW1lJyA9PiAkY2hpbGQtPkdldE1vZHVsZU5hbWUoKSwgJ25hbWUnID0+ICRjaGlsZC0+R2V0TW9kdWxlRnJpZW5kbHlOYW1lKCksICdpdGVtcycgPT4gYXJyYXkoKSk7CiAgICBpZiAoISRpdGVtLT5pc05ldygpKSB7CiAgICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAgICRjLT5hZGQoJ3BhcmVudF9pdGVtJywgJGl0ZW0tPmdldElkKCkpOwogICAgICAkYy0+YWRkQXNjZW5kaW5nT3JkZXJCeUNvbHVtbignb3JkZXJfYnknKTsKICAgICAgJGNsYXNzbmFtZSA9ICRjaGlsZC0+R2V0TW9kdWxlTmFtZSgpOwogICAgICAkbW9kID0gbmV3ICRjbGFzc25hbWUoKTsKICAgICAgLy8gdmFyX2R1bXAoJGNsYXNzbmFtZSk7CiAgICAgICRpdGVtcyA9IGNhbGxfdXNlcl9mdW5jKGFycmF5KCRjaGlsZC0+R2V0TW9kdWxlTmFtZSgpIC4gJ09iamVjdCcsICdkb1NlbGVjdCcpLCAkYyk7CiAgICAgICRzdWJtb2R1bGVzWyRjaGlsZC0+Z2V0SWQoKV1bJ3RlbXBsYXRlJ10gPSBjYWxsX3VzZXJfZnVuYyhhcnJheSgkY2hpbGQtPkdldE1vZHVsZU5hbWUoKSAuICdWaWV3cycsICdhZG1pbkl0ZW1zJyksJG1vZCwkaWQsJHJldHVybmlkLCR2aWV3LCRpdGVtcywkaXRlbS0+Z2V0SWQoKSk7CiAgICAgICRzdWJtb2R1bGVzWyRjaGlsZC0+Z2V0SWQoKV1bJ2FkZF9pdGVtX2xpbmsnXSA9ICRtb2QtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgJG1vZC0+TGFuZygnYWRkX2l0ZW1fZm9yJywgJGNoaWxkLT5HZXRNb2R1bGVGcmllbmRseU5hbWUoKSksIGFycmF5KCdwYXJlbnRfaXRlbScgPT4gJGl0ZW0tPmdldElkKCkpKTsKICAgICAgJHN1Ym1vZHVsZXNbJGNoaWxkLT5nZXRJZCgpXVsnYWRkX2l0ZW1faWNvbiddID0gJG1vZC0+Q3JlYXRlTGluaygkaWQsICdlZGl0JywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICRtb2QtPkxhbmcoJ2FkZF9pdGVtX2ZvcicsICRjaGlsZC0+R2V0TW9kdWxlRnJpZW5kbHlOYW1lKCkpLCAnJywgJycsICdzeXN0ZW1pY29uJykpOwogICAgfQogIH0KfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtb2R1bGVzJywgJHN1Ym1vZHVsZXMpOwoKLy8gTU9EVUxFIFhURU5ERVIgU0VDVElPTgoKJG1vZHVsZXh0ZW5kZXIgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01vZHVsZVh0ZW5kZXInKTsKCmlmIChpc19vYmplY3QoJG1vZHVsZXh0ZW5kZXIpICYmICRtb2R1bGV4dGVuZGVyLT5pc1h0ZW5kZWRNb2R1bGUoJHRoaXMtPmdldE5hbWUoKSkpIHsgIAogICR0aGlzLT5zbWFydHktPmFzc2lnbigneHRlbmRlZF9mb3JtJywgJG1vZHVsZXh0ZW5kZXItPlh0ZW5kTW9kdWxlRm9ybSgne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsICRpdGVtLT5nZXRJZCgpLCAkaWQpKTsKfSBlbHNlIHsKICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3h0ZW5kZWRfZm9ybScsICcnKTsKfQoKCiRmb3JtLT5zZXRGaWVsZHNldCgnbW9kdWxlLS0tb3B0aW9ucycsICR0aGlzLT5sYW5nKCdtb2R1bGVfb3B0aW9ucycpKTsKCgovLyBpZiAoJHRoaXMtPmdldFByZWZlcmVuY2UoJ3Nob3dfcGFyZW50JywgJzAnKSA9PSAxKQovLyB7Ci8vICAgJGZvcm0tPmdldEZpZWxkc2V0KCdtb2R1bGUtLS1vcHRpb25zJyktPnNldFdpZGdldCgncGFyZW50X2lkJywgJ3NlbGVjdCcsIGFycmF5KAovLyAgICAgJ29iamVjdCcgPT4gJiRpdGVtLCAKLy8gICAgICd2YWx1ZXMnID0+IGFycmF5KDAgPT4gJycpICsgJGl0ZW0tPmdldFBvc3NpYmxlUGFyZW50c0hpZXJhcmNoeSgnIC0gJywgJHRoaXMtPmdldFByZWZlcmVuY2UoJ3Nob3dfcGFyZW50X2ZpcnN0X2xldmVsJywgJzAnKSkKLy8gICAgICkpOwovLyB9Cgp7e2lmIGlzc2V0KCRpc191c2VyX21vZHVsZSl9fQppZiAoY2xhc3NfZXhpc3RzKCdDTVNVc2VyJykpCnsgIAogICRmb3JtLT5nZXRGaWVsZHNldCgnbW9kdWxlLS0tb3B0aW9ucycpLT5zZXRXaWRnZXQoJ3VzZXJfaWQnLCAnc2VsZWN0JywgYXJyYXkoCiAgICAndmFsdWVzJyA9PiAgYXJyYXkoJycgPT4gJyZsYXF1bzsgJyAuICR0aGlzLT5sYW5nKCdzZWxlY3Rfb25lJykgLiAnICZyYXF1bzsnKSArIENNU1VzZXI6OmdldFVzZXJMaXN0KCksICAKICAgICdnZXRfbWV0aG9kJyA9PiAnZ2V0VXNlcklkJywgCiAgICAnc2V0X21ldGhvZCcgPT4gJ3NldFVzZXJJZCcsIAogICAgJ29iamVjdCcgPT4gJiRpdGVtCiAgKSk7Cn0Ke3svaWZ9fQoKaWYoIWlzX251bGwoJGl0ZW0tPmdldENyZWF0ZWRCeSgpKSkgJGZvcm0tPmdldEZpZWxkc2V0KCdtb2R1bGUtLS1vcHRpb25zJyktPnNldFdpZGdldCgnY3JlYXRlZF9ieScsICdzdGF0aWMnLCBhcnJheSgnbGFiZWwnID0+ICdDcmVhdGVkIGJ5JywgICd2YWx1ZScgPT4gY21zbXMoKS0+R2V0VXNlck9wZXJhdGlvbnMoKS0+TG9hZFVzZXJCeUlEKCRpdGVtLT5nZXRDcmVhdGVkQnkoKSktPnVzZXJuYW1lIC4gJyBvbiAnIC4gJGl0ZW0tPmdldENyZWF0ZWRBdCgpKSk7CiRmb3JtLT5nZXRGaWVsZHNldCgnbW9kdWxlLS0tb3B0aW9ucycpLT5zZXRXaWRnZXQoJ21jZmlfY3JlYXRlZF90aW1lc3RhbXAnLCAnc3RhdGljJywgYXJyYXkoJ2xhYmVsJyA9PiAnQ3JlYXRpb24gZXhhY3QgdGltZScsICd2YWx1ZScgPT4gZGF0ZSgnZC1NLVkgSDppOnMnLCAkaXRlbS0+Z2V0TWNmaUNyZWF0ZWRUaW1lc3RhbXAoKSkgKSk7CmlmKCFpc19udWxsKCRpdGVtLT5nZXRVcGRhdGVkQnkoKSkpICRmb3JtLT5nZXRGaWVsZHNldCgnbW9kdWxlLS0tb3B0aW9ucycpLT5zZXRXaWRnZXQoJ3VwZGF0ZWRfYnknLCAnc3RhdGljJywgYXJyYXkoJ2xhYmVsJyA9PiAnTGFzdCB1cGRhdGVkIGJ5JywgICd2YWx1ZScgPT4gY21zbXMoKS0+R2V0VXNlck9wZXJhdGlvbnMoKS0+TG9hZFVzZXJCeUlEKCRpdGVtLT5nZXRVcGRhdGVkQnkoKSktPnVzZXJuYW1lIC4gJyBvbiAnIC4gJGl0ZW0tPmdldFVwZGF0ZWRBdCgpKSk7CiRmb3JtLT5nZXRGaWVsZHNldCgnbW9kdWxlLS0tb3B0aW9ucycpLT5zZXRXaWRnZXQoJ21jZmlfdXBkYXRlZF90aW1lc3RhbXAnLCAnc3RhdGljJywgYXJyYXkoJ2xhYmVsJyA9PiAnVXBkYXRlIGV4YWN0IHRpbWUnLCAndmFsdWUnID0+IGRhdGUoJ2QtTS1ZIEg6aTpzJywgJGl0ZW0tPmdldE1jZmlVcGRhdGVkVGltZXN0YW1wKCkpICkpOwoKJHB1Yl9hcnJheSA9IGFycmF5KCdsYWJlbCcgPT4gJ1B1Ymxpc2hlZCcsICdvYmplY3QnID0+ICYkaXRlbSk7CmlmKGlzX251bGwoJGl0ZW0tPmdldElkKCkpKQp7CiAgJHB1Yl9hcnJheVsnZGVmYXVsdF92YWx1ZSddID0gMTsKfQoKJGZvcm0tPmdldEZpZWxkc2V0KCdtb2R1bGUtLS1vcHRpb25zJyktPnNldFdpZGdldCgncHVibGlzaGVkJywgJ2NoZWNrYm94JywgJHB1Yl9hcnJheSk7CgppZihjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0RpZ2VzdCcpKQp7CiAgJGRpZ19hcnJheSA9IGFycmF5KCdsYWJlbCcgPT4gJ1NlbmQgdXBkYXRlIGltbWVkaWF0ZWx5JywgJ29iamVjdCcgPT4gJiRpdGVtKTsKICBpZihpc19udWxsKCRpdGVtLT5nZXRJZCgpKSkKICB7CiAgICAkZGlnX2FycmF5WydkZWZhdWx0X3ZhbHVlJ10gPSAxOwogIH0KICAKICAkZm9ybS0+Z2V0RmllbGRzZXQoJ21vZHVsZS0tLW9wdGlvbnMnKS0+c2V0V2lkZ2V0KCdzZW5kX3VwZGF0ZV9pbW1lZGlhdGVseScsICdjaGVja2JveCcsICRkaWdfYXJyYXkpOwp9CgoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtJywgJGZvcm0pOwoKLy8gRk9STSBQUk9DRVNTSU5HCgppZiAoJGZvcm0tPmlzUG9zdGVkKCkpIHsKICAkZm9ybS0+cHJvY2VzcygpOwogIGlmICgkZm9ybS0+Tm9FcnJvcigpKQogIHsKICAgIGlmKCRpdGVtLT5pc05ldygpKQogICAgewogICAgICAkbG9nX21lc3NhZ2UgPSAnSXRlbSBjcmVhdGVkJzsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJGxvZ19tZXNzYWdlID0gJ0l0ZW0gdXBkYXRlZCc7CiAgICB9CiAgICAKICAgIAogICAgJGl0ZW0tPmRlbGV0ZUZpbGVzKCRwYXJhbXMpOyAgCiAgICAkaXRlbS0+dXBsb2FkRmlsZXMoJGlkKTsKICAgICRpdGVtLT5zYXZlKCk7CiAgICAKICAJJHRoaXMtPkF1ZGl0KCRpdGVtLT5nZXRJZCgpLCAkdGhpcy0+R2V0RnJpZW5kbHlOYW1lKCksICRsb2dfbWVzc2FnZSk7CiAgICAKICAgIGlmIChpc19vYmplY3QoJG1vZHVsZXh0ZW5kZXIpICYmICRtb2R1bGV4dGVuZGVyLT5pc1h0ZW5kZWRNb2R1bGUoJHRoaXMtPmdldE5hbWUoKSkpIHsKICAgICAgJG1vZHVsZXh0ZW5kZXItPmdldEZvcm1JbnB1dCgkdGhpcy0+Z2V0TmFtZSgpLCAkaXRlbS0+Z2V0SWQoKSwgJHBhcmFtcyk7CiAgICB9CiAgICAkaXRlbS0+cG9zdEFjdGlvbnMoKTsgLy8gVXNlIHRvIGFsbG93IHBlb3BsZSB0byB0d2VhayB0aGluZ3MuCiAgICBpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pKSB7CiAgICAgIHt7aWYgJHBhcmVudF9tb2R1bGV9fQogICAgICAkcGFyZW50ID0gbmV3IHt7JHBhcmVudF9tb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19KCk7CiAgICAgICRwYXJlbnQtPlJlZGlyZWN0KCRpZCwgJ2VkaXQnLCAkcmV0dXJuaWQsIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpLCAnaXRlbV9pZCcgPT4gJGl0ZW0tPmdldFBhcmVudEl0ZW0oKSwgJ3RhYicgPT4gJHRoaXMtPmdldE5hbWUoKSkpOwogICAgICB7e2Vsc2V9fQogICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSkpOwogICAgICB7ey9pZn19CiAgICAgIGV4aXQ7CiAgICB9CiAgICBlbHNlaWYoaXNzZXQoJHBhcmFtc1snc2F2ZV9hZGQnXSkpIHsKICAgICAge3tpZiAkcGFyZW50X21vZHVsZX19CiAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0JywgJHJldHVybmlkLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSwgJ3BhcmVudF9pdGVtJyA9PiAkaXRlbS0+Z2V0UGFyZW50SXRlbSgpKSk7CiAgICAgIHt7ZWxzZX19CiAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdlZGl0JywgJHJldHVybmlkLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSkpOwogICAgICB7ey9pZn19CiAgICAgIGV4aXQ7CiAgICB9IGVsc2UgewogICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCksICdpdGVtX2lkJyA9PiAkaXRlbS0+Z2V0SWQoKSkpOwogICAgICBleGl0OwogICAgfQogIH0KfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWInLCBpc3NldCgkcGFyYW1zWyd0YWInXSk/JHBhcmFtc1sndGFiJ106bnVsbCk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2VkaXQudHBsJyk7Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.edittemplate.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ01hbmFnZSBNQyBGYWN0b3J5JykpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKLyogLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KCiAgIENvZGUgZm9yIERvY3VtZW50c0xpYnJhcnkgIm1hbmFnZVRlbXBsYXRlIiBhZG1pbiBhY3Rpb24KICAgCiAgIC09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCiAgIAogICBUeXBpY2FsbHksIHRoaXMgd2lsbCBkaXNwbGF5IHNvbWV0aGluZyBmcm9tIGEgdGVtcGxhdGUKICAgb3IgZG8gc29tZSBvdGhlciB0YXNrLgogICAKKi8KCi8vIFJPQ0sgQU5EIExPQUQKCmlmIChpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZSddKSAmJiAkcGFyYW1zWyd0ZW1wbGF0ZSddICE9ICcnKQp7CgkkdGl0bGUgPSAkcGFyYW1zWyd0ZW1wbGF0ZSddOwoJCglpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0YnV0dG9uJ10pIHx8IGlzc2V0KCRwYXJhbXNbJ2FwcGx5YnV0dG9uJ10pKQoJewoJCSR0aGlzLT5TZXRUZW1wbGF0ZSgkcGFyYW1zWyd0ZW1wbGF0ZSddLCAkcGFyYW1zWyd0ZW1wbGF0ZWRldGFpbHMnXSk7CgkJCgkJaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdGJ1dHRvbiddKSkKCQl7CgkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJykpOwoJCX0KCX0KfQplbHNlIAp7CgkkdGl0bGUgPSAnJzsKfQoKLy8gREVUQUlMUwoJCQoJCgkJCgkKCQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lkJywgJGlkKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybV9zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkKSk7CgkKCQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV90ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCd0aXRsZVRlbXBsYXRlJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90ZW1wbGF0ZScsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICd0ZW1wbGF0ZScsICR0aXRsZSwgNTApKTsKCQoJaWYgKGlzc2V0KCRwYXJhbXNbJ3Jlc3RvcmVsaXN0J10pKQoJewoJCSR0ZW1wbGF0ZWNvZGUgPSAkdGhpcy0+R2V0VGVtcGxhdGVGcm9tRmlsZSgndGVtcGxhdGUubGlzdCcpOwoJfQkKCWVsc2VpZiAoaXNzZXQoJHBhcmFtc1sncmVzdG9yZWRldGFpbHMnXSkpCgl7CgkJJHRlbXBsYXRlY29kZSA9ICR0aGlzLT5HZXRUZW1wbGF0ZUZyb21GaWxlKCd0ZW1wbGF0ZS5kZXRhaWxzJyk7Cgl9CgllbHNlaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICYmICRwYXJhbXNbJ3RlbXBsYXRlJ10gIT0gJycpCgl7CgkJJHRlbXBsYXRlY29kZSA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKTsKCX0KCWVsc2VpZiAoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGVkZXRhaWxzJ10pKQoJewoJCSR0ZW1wbGF0ZWNvZGUgPSAkcGFyYW1zWyd0ZW1wbGF0ZWRldGFpbHMnXTsKCX0KCWVsc2UgCgl7CgkJJHRlbXBsYXRlY29kZSA9ICcnOwoJfQoJCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvZGVfdGVtcGxhdGUnLCAkdGhpcy0+TGFuZygnY29kZVRlbXBsYXRlJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZXh0YXJlYV90ZW1wbGF0ZScsICR0aGlzLT5DcmVhdGVUZXh0QXJlYSh0cnVlLCAkaWQsICR0ZW1wbGF0ZWNvZGUsICd0ZW1wbGF0ZWRldGFpbHMnLCAncGFnZWJpZ3RleHRhcmVhJywgJycsJycsICcnLCA5MCwgMTUsICdFZGl0QXJlYScpKTsKCQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX2RldGFpbHNfc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdGJ1dHRvbicsICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX2RldGFpbHNfYXBwbHknLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnYXBwbHlidXR0b24nLCAkdGhpcy0+TGFuZygnYXBwbHknKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX2RldGFpbHNfcmVzdG9yZWxpc3QnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAncmVzdG9yZWxpc3QnLCAkdGhpcy0+TGFuZygncmVzdG9yZWxpc3QnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtX2RldGFpbHNfcmVzdG9yZWRldGFpbHMnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAncmVzdG9yZWRldGFpbHMnLCAkdGhpcy0+TGFuZygncmVzdG9yZWRldGFpbHMnKSkpOwoKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZWRpdHRlbXBsYXRlLnRwbCcpOwoJCj8+]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.export.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ01hbmFnZSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JykpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKJGRhdGFzID0gYXJyYXkoKTsKCi8vIE1haW4gZW50cmllcwokZGF0YXNbJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlRnJpZW5kbHlOYW1lKCl9fSddID0ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fTo6RXhwb3J0RGF0YXMoKTsKCnt7Zm9yZWFjaCBmcm9tPSRjaGlsZF9tb2R1bGVzIGl0ZW09Y2hpbGRfbW9kdWxlfX0KJGRhdGFzWyd7eyRjaGlsZF9tb2R1bGUtPmdldE1vZHVsZUZyaWVuZGx5TmFtZSgpfX0nXSA9IHt7JGNoaWxkX21vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX06OkV4cG9ydERhdGFzKCk7Cnt7L2ZvcmVhY2h9fQoKLy8gQnkgZGVmYXVsdCwgYW5kIGlmIHRoZSBtb2R1bGUgQ01TIEV4Y2VsIGV4aXN0cywgd2UgZXhwb3J0IHRvIGV4Y2VsLgoKaWYgKE1DRlRvb2xzOjpJc01vZHVsZUFjdGl2ZSgnQ01TRXhjZWwnKSkKewoJJHBhcmFtcyA9IGFycmF5KAoJCSdjcmVhdG9yJyA9PiAnTSZDIEZhY3RvcnknLAoJCSd0aXRsZScgPT4gJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlRnJpZW5kbHlOYW1lKCl9fSBleHBvcnQnLAoJCSdzdWJqZWN0JyA9PiAne3skbW9kdWxlLT5nZXRNb2R1bGVGcmllbmRseU5hbWUoKX19IGV4cG9ydCcsCgkJKTsKCQoJJHN0YWNrID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDTVNFeGNlbCcpLT5idWlsZEV4Y2VsKCRkYXRhcywkcGFyYW1zKTsKCQoJJGxpbmsgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NNU0V4Y2VsJyktPmdldEV4Y2VsTGluaygkc3RhY2ssYXJyYXkoJ2ZpbGVuYW1lJyA9PiAne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fV9leHBvcnRfJy5kYXRlKCdZLW0tZF9ILWktcycpLicueGxzJykpOwoJCgllY2hvICc8aDM+Jy4kdGhpcy0+bGFuZygnZXhwb3J0JykuJzwvaDM+PHA+PGEgaHJlZj0iJy4kbGluay4nIiByZWw9ImV4dGVybmFsIiA+Jy4kdGhpcy0+bGFuZygnZG93bmxvYWQnKS4nPC9hPjwvcD4nOwp9CmVsc2UKewoJPz4KCTxoMz48P3BocCBlY2hvICR0aGlzLT5sYW5nKCdzZXJpYWxpemVkX2RhdGFzJyk7Pz48L2gzPgoJPHRleHRhcmVhPjw/cGhwIGVjaG8gc2VyaWFsaXplKCRkYXRhcyk7ID8+PC90ZXh0YXJlYT4gCgk8ZW0+KFRyeSB0byBpbnN0YWxsIHRoZSBDTVNFeGNlbCBtb2R1bGUgdG8gaGF2ZSBhIGJldHRlciBleHBvcnQgc3VwcG9ydCk8L2VtPgoJPHA+PGEgaHJlZj0iPD9waHAgZWNobyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2V4cG9ydF9kYXQnLCRkZXRhaWxwYWdlLCcnLGFycmF5KCksJycsdHJ1ZSxmYWxzZSwnJyxmYWxzZSwnJyk7ID8+JnNob3d0ZW1wbGF0ZT1mYWxzZSIgdGFyZ2V0PSJfbmV3Ij5Eb3dubG9hZCBhcyBmaWxlPC9hPjwvcD4KCTxwPjxhIGhyZWY9Ijw/cGhwIGVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdleHBvcnRfZGInLCRkZXRhaWxwYWdlLCcnLGFycmF5KCksJycsdHJ1ZSxmYWxzZSwnJyxmYWxzZSwnJyk7ID8+JnNob3d0ZW1wbGF0ZT1mYWxzZSIgdGFyZ2V0PSJfbmV3Ij5Eb3dubG9hZCBmdWxsIGVudHJpZXMgYXMgb2JqZWN0czwvYT48L3A+Cgk8cD48YSBocmVmPSI8P3BocCBlY2hvICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnaW1wb3J0X2RiJywkZGV0YWlscGFnZSwnJyxhcnJheSgpLCcnLHRydWUsZmFsc2UsJycsZmFsc2UsJycpOyA/PiI+SW1wb3J0IGVudHJpZXMgZnJvbSAuZGF0IGZpbGU8L2E+PC9wPgoJPD9waHAKfQ==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.export_dat.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ0FkbWluIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nKSkgewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CgokZGF0YXMgPSBhcnJheSgpOwoKLy8gTWFpbiBlbnRyaWVzCiRkYXRhc1sne3skbW9kdWxlLT5nZXRNb2R1bGVGcmllbmRseU5hbWUoKX19J10gPSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19OjpFeHBvcnREYXRhcygpOwoKaGVhZGVyKCdDb250ZW50LXR5cGU6IHRleHQvcGxhaW4nKTsKaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0ie3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS5kYXQiJyk7CmVjaG8gc2VyaWFsaXplKCRkYXRhcyk7CmV4aXQ7]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.export_db.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ0FkbWluIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nKSkgewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CgokZGF0YXMgPSBhcnJheSgpOwoKLy8gTWFpbiBlbnRyaWVzCiRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiRlbnRyaWVzID0ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6ZG9TZWxlY3QoJGMpOwoKaGVhZGVyKCdDb250ZW50LXR5cGU6IHRleHQvcGxhaW4nKTsKaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0ie3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fV9lbnRyaWVzLmRhdCInKTsKZWNobyBiYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkZW50cmllcykpOwpleGl0Ow==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.fefilter.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0Ow==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.geturl.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIERFUFJFQ0FURUQKCiR1cmxhY3Rpb24gPSBpc3NldCgkcGFyYW1zWyd1cmxhY3Rpb24nXSkgPyAkcGFyYW1zWyd1cmxhY3Rpb24nXSA6ICdkZWZhdWx0JzsKdW5zZXQoJHBhcmFtc1sndXJsYWN0aW9uJ10pOwoKJGRldGFpbHBhZ2UgPSAkcmV0dXJuaWQ7CmlmIChpc3NldCgkcGFyYW1zWydkZXRhaWxwYWdlJ10pKSB7CiAgICAkbWFuYWdlciA9IGNtc21zKCktPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICRub2RlID0mICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJHBhcmFtc1snZGV0YWlscGFnZSddKTsKICAgIGlmIChpc3NldCgkbm9kZSkpIHsKICAgICAgICAkY29udGVudCA9JiAkbm9kZS0+R2V0Q29udGVudCgpOwogICAgICAgIGlmIChpc3NldCgkY29udGVudCkpCiAgICAgICAgewogICAgICAgICAgICAkZGV0YWlscGFnZSA9ICRjb250ZW50LT5JZCgpOwogICAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgICAgJG5vZGUgPSYgJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkcGFyYW1zWydkZXRhaWxwYWdlJ10pOwogICAgICAgIGlmIChpc3NldCgkbm9kZSkpIHsKICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkcGFyYW1zWydkZXRhaWxwYWdlJ107CiAgICAgICAgfQogICAgfQoKICAgICRwYXJhbXNbJ29yaWdpZCddID0gJHJldHVybmlkOwp9CgoKZWNobyAkdGhpcy0+Y3JlYXRlTGluaygkaWQsICR1cmxhY3Rpb24sICRkZXRhaWxwYWdlLCAkY29udGVudHM9JycsICRwYXJhbXMsICcnLCB0cnVlKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.ical.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYoaXNzZXQoJHBhcmFtc1snaXRlbV9pZCddKSAmJiAhaXNzZXQoJHBhcmFtc1snZXZlbnRfaWQnXSkpICRwYXJhbXNbJ2V2ZW50X2lkJ10gPSAkcGFyYW1zWydpdGVtX2lkJ107CgppZiAoaXNzZXQoJHBhcmFtc1snZXZlbnRfaWQnXSkgfHwgaXNzZXQoJHBhcmFtc1snZXZlbnRfaWRzJ10pKQp7CgkKCSRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CgkkYy0+YWRkKCdwdWJsaXNoZWQnLCAnMScpOwoJCglpZiAoaXNzZXQoJHBhcmFtc1snZXZlbnRfaWQnXSkpCgl7CQkKCQkkYy0+YWRkKCdpZCcsICRwYXJhbXNbJ2V2ZW50X2lkJ10pOwoJfQoJZWxzZQoJewoJCSRjLT5hZGQoJ2lkJywgJHBhcmFtc1snZXZlbnRfaWRzJ10sIE1DRkNyaXRlcmlhOjpJTik7Cgl9CgkKCXt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6Omdsb2JhbEZyb250ZW5kRmlsdGVycygkYyk7CgkKCSRpdGVtcyA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0KCRjKTsKCQoJaWYoTUNGQ2FsZW5kYXI6OmNoZWNrQ29tcGF0aWJpbGl0eSgne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdCcpKQoJewoJCU1DRkNhbGVuZGFyOjpsb2FkaUNhbExpYnJhcmllcygpOwoJCQoJCSRhID0gbmV3IGlDYWxlbmRhcjsKCQkKCQlmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pCgkJewoJCQkkZXYgPSBuZXcgaUNhbGVuZGFyX2V2ZW50OwoKCQkJLy8gQ29udmVuaWVuY2U6IGlmIHlvdSBkb24ndCBzcGVjaWZ5IHRoaXMsIG9uZSB3aWxsIGJlIGF1dG8tZ2VuZXJhdGVkCgkJCS8vJGV2LT5hZGRfcHJvcGVydHkoJ3VpZCcsICc0MzA2ZjkzZS1lMzc5LTExZDktYmQ1Ny1mZjBlN2UwZDVkNTAnKTsKCQkJLy8kZXYtPmFkZF9wcm9wZXJ0eSgndWlkJywgcmZjMjQ0NV9ndWlkKCkpOwoJCQkvLyBBdHRhY2htZW50czogYW4gYXBwbGljYXRpb24gYW5kIGEgVVJMCgkJCS8vJGV2LT5hZGRfcHJvcGVydHkoJ2F0dGFjaCcsIGJhc2U2NF9lbmNvZGUoJ0FwcGxpY2F0aW9uLURhdGEtT2N0ZXRzJyksIGFycmF5KCdmbXR0eXBlJyA9PiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgJ2VuY29kaW5nJyA9PiAnQkFTZTY0JywgJ3ZhbHVlJyA9PiAnYmluQVJZJykpOwoJCQkvLyRldi0+YWRkX3Byb3BlcnR5KCdhdHRhY2gnLCAnaHR0cDovL3d3dy5tb29kbGUub3JnLycpOwoKCQkJLy8gU3VtbWFyeSBhbmQgZGVzY3JpcHRpb247IGFsc28gcmVzb3VyY2VzCgkJCSRldi0+YWRkX3Byb3BlcnR5KCdzdW1tYXJ5JywgJGl0ZW0tPmdldFRpdGxlKCkpOwoJCQlpZiAobWV0aG9kX2V4aXN0cygkaXRlbSwgJ2dldERlc2NyaXB0aW9uJykpCgkJCXsKCQkJCSRldi0+YWRkX3Byb3BlcnR5KCdkZXNjcmlwdGlvbicsICRpdGVtLT5nZXREZXNjcmlwdGlvbigpKTsKCQkJfQoJCQlpZiAobWV0aG9kX2V4aXN0cygkaXRlbSwgJ2dldFJlc291cmNlcycpKQoJCQl7CgkJCQkkZXYtPmFkZF9wcm9wZXJ0eSgncmVzb3VyY2VzJywgZXhwbG9kZSgnLCcsJGl0ZW0tPmdldFJlc291cmNlcygpKSk7CQkJCQoJCQl9CgkJCS8vIFN0YXJ0LWVuZCBkYXRlCgkJCS8vJGV2LT5hZGRfcHJvcGVydHkoJ2NsYXNzJywgJ1BSSVZBVEUnKTsKCQkJCgkJCSRkdHN0YXJ0ID0gZGF0ZSgnWW1kJywgc3RydG90aW1lKCRpdGVtLT5nZXRTdGFydERhdGUoKSkpOwoJCQkKCQkJaWYoJHN0YXJ0X3RpbWUgPSAkaXRlbS0+c3RhcnRfdGltZSkKCQkJewkKCQkJCSRkdHN0YXJ0IC49ICdUJyAuIGRhdGUoJ0hpcycsIHN0cnRvdGltZSgkc3RhcnRfdGltZSkpOwoJCQkJJGV2LT5hZGRfcHJvcGVydHkoJ2R0c3RhcnQnLCAkZHRzdGFydCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkZXYtPmFkZF9wcm9wZXJ0eSgnZHRzdGFydCcsICRkdHN0YXJ0LCBhcnJheSgndmFsdWUnID0+ICdEQVRFJykpOwoJCQl9CgoJCQlpZigoJGVuZF90aW1lID0gJGl0ZW0tPmVuZF90aW1lKSAmJiAoKCRlbmRfdGltZSAhPSAkc3RhcnRfdGltZSkgfHwgKCR0aGlzLT5lbmRfZGF0ZSAhPSAkdGhpcy0+c3RhcnRfZGF0ZSkpKQoJCQl7CgkJCQkkZHRlbmQgPSBkYXRlKCdZbWQnLCBzdHJ0b3RpbWUoJGl0ZW0tPmdldEVuZERhdGUoKSkpIC4gJ1QnIC4gZGF0ZSgnSGlzJywgc3RydG90aW1lKCRlbmRfdGltZSkpOwoJCQkJJGV2LT5hZGRfcHJvcGVydHkoJ2R0ZW5kJywgJGR0ZW5kKTsgCgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkZHRlbmQgPSBkYXRlKCdZbWQnLCBzdHJ0b3RpbWUoJGl0ZW0tPmdldEVuZERhdGUoKSAuJyArIDEgZGF5JykpOyAvLyBOZWVkIHRvIHB1dCBvbmUgZGF5IGxhdGVyIGZvciB0aGlzIHRvIHdvcmsuIERvbid0IGFzayB3aHkuLi4KCQkJCSRldi0+YWRkX3Byb3BlcnR5KCdkdGVuZCcsICRkdGVuZCAsIGFycmF5KCd2YWx1ZScgPT4gJ0RBVEUnKSk7IAoJCQl9CgoKCQkJCQkJCgoJCQkvLwkkZXYtPmFkZF9wcm9wZXJ0eSgnZHRzdGFtcCcsICcyMDA1MDYyMlQyMzU2MDFaJyk7CgoJCQkkZXYtPmFkZF9wcm9wZXJ0eSgnZHRzdGFtcCcsIGRhdGUoJ1ltZFxUSGlzXFonLCBzdHJ0b3RpbWUoJGl0ZW0tPmdldENyZWF0ZWRBdCgpKSkpOwoJCQkJCQkKCQkJLy8JJGV2LT5hZGRfcHJvcGVydHkoJ2F0dGVuZGVlJywgJ21haWx0bzpwakB1b20uZ3InLCBhcnJheSgnY24nID0+ICdKb2huIFBhcGFpb2Fubm91JywgJ2RlbGVnYXRlZC1mcm9tJyA9PiBhcnJheSgnbWFpbHRvOmJsYUBzb21lLm5ldCcsICdtYWlsdG86YmxhQHNvbWUubmV0JykpKTsKCQkJLy8kZXYtPmFkZF9wcm9wZXJ0eSgnZXhkYXRlJywgYXJyYXkoJzIwMDUwNjIyVDIzNTYwMVonLCAnMjAwNjA2MjJUMjM1NjAxWicpKTsKCQkJLy8kZXYtPmFkZF9wcm9wZXJ0eSgnZXhydWxlJywgJ0ZSRVE9V0VFS0xZO0NPVU5UPTQ7SU5URVJWQUw9MjtCWURBWT1UVSxUSCcpOwoJCQkvLyRldi0+YWRkX3Byb3BlcnR5KCdyZXF1ZXN0LXN0YXR1cycsICcyLjMuMTtTb21lIGV4cGxhbmF0aW9uIGZvciB0aGUgcmVxdWVzdCBzdGF0dXMgY29kZScpOwoJCQkvLyRldi0+YWRkX3Byb3BlcnR5KCdyZWN1cnJlbmNlLWlkJywgJzIwMDUwNjIyVDIzNTYwMVonLCBhcnJheSgndmFsdWUnID0+ICdEQVRFLVRJTUUnLCAncmFuZ2UnID0+ICd0aGlzQU5ERlVUVVJFJykpOwoJCQkvLyRldi0+YWRkX3Byb3BlcnR5KCdyZGF0ZScsIGFycmF5KCcxOTk2MDQwM1QwMjAwMDBaLzE5OTYwNDAzVDA0MDAwMFonLCcxOTk2MDQwNFQwMTAwMDBaL1BUM0gnKSwgYXJyYXkoJ3ZhbHVlJyA9PiAnUEVSSU9EJykpOwoJCQkvLyRldi0+YWRkX3Byb3BlcnR5KCdyZGF0ZScsIGFycmF5KDE5OTcwMTAxLDE5OTcwMTIwLDE5OTcwMjE3LDE5OTcwNDIxLDE5OTcwNTI2LDE5OTcwNzA0LDE5OTcwOTAxLDE5OTcxMDE0LDE5OTcxMTI4LDE5OTcxMTI5LDE5OTcxMjI1KSwgYXJyYXkoJ3ZhbHVlJyA9PiAnREFURScpKTsKCQkJLy8kZXYtPmFkZF9wcm9wZXJ0eSgnZ2VvJywgYXJyYXkoMzcuMzg2MDEzLC0xMjIuMDgyOTMyKSk7CgkJCS8vJGV2LT5hZGRfcHJvcGVydHkoJ29yZ2FuaXplcicsICdNQUlMVE86anNtaXRoQGhvc3QxLmNvbScsIGFycmF5KCdjbicgPT4gJ0pvaG4gQy4gU21pdGgnLCAnZGlyJyA9PiAnbGRhcDovL2hvc3QuY29tOjY2NjYvbz0zRERDJTIwQXNzb2NpYXRlcyxjPTNEVVM/Pyhjbj0zREpvaG4lMjBTbWl0aCknKSk7CgoJCQkkYS0+YWRkX2NvbXBvbmVudCgkZXYpOwoJCX0KCgkJJGEtPmFkZF9wcm9wZXJ0eSgncHJvZGlkJywgJy0vL00mQyAtIEplYW4tQ2hyaXN0b3BoZSBDdXZlbGllci8vTSZDIEZhY3RvcnkgJy5kYXRlKCdZJykuJy8vRU4nKTsKCS8vCSRhLT5hZGRfcHJvcGVydHkoJ3ZlcnNpb24nLCAnMi4wJyk7CgkJJGEtPmFkZF9wcm9wZXJ0eSgnY2Fsc2NhbGUnLCAnR1JFR09SSUFOJyk7CgkvLwkkYS0+YWRkX3Byb3BlcnR5KCdtZXRob2QnLCAnUFVCTElTSCcpOwoJCgkJLy9oZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9jYWxlbmRhciIpOwoJCWNtc21zKCktPnNldF92YXJpYWJsZSgnY29udGVudC10eXBlJywgJ3RleHQvY2FsZW5kYXInKTsKCSAgCWhlYWRlcigiQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT1pQ2FsLmljcyIpOwoJCQoJCWVjaG8gJGEtPnNlcmlhbGl6ZSgpOwoKCX0JCn0=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.import_db.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ0FkbWluIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nKSkgewoJcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CgokZm9ybSA9IG5ldyBDTVNGb3JtKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgJGlkLCdpbXBvcnRfZGInLCRyZXR1cm5pZCk7CgppZigkZm9ybS0+aXNQb3N0ZWQoKSkKewogIAp9CmVsc2UKewogICRmb3JtLT5zZXRMYWJlbCgnc3VibWl0JywgJ0ltcG9ydCcpOwogICRmb3JtLT5zZXRXaWRnZXQoJ2ZpbGUnLCAnZmlsZScpOwp9CgoKZWNobyAkZm9ybS0+cmVuZGVyKCk7]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.link_to.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWNtc21zKCkpIGV4aXQ7CgppZihpc3NldCgkcGFyYW1zWydtYWN0aW9uJ10pKQp7Cgl1bnNldCgkcGFyYW1zWydhY3Rpb24nXSk7CgkkYWN0aW9uID0gJHBhcmFtc1snbWFjdGlvbiddOwoJdW5zZXQoJHBhcmFtc1snbWFjdGlvbiddKTsKCQoJJGRldGFpbHBhZ2UgPSAkcmV0dXJuaWQ7CglpZiAoaXNzZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKSkgewoJICAgICRtYW5hZ2VyID0gY21zbXMoKS0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoJICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlBbGlhcygkcGFyYW1zWydkZXRhaWxwYWdlJ10pOwoJICAgIGlmICgkbm9kZSkgewoJICAgICAgICAkY29udGVudCA9ICRub2RlLT5HZXRDb250ZW50KCk7CgkgICAgICAgIGlmICgkY29udGVudCkKCSAgICAgICAgewoJICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkY29udGVudC0+SWQoKTsKCSAgICAgICAgfQoJICAgIH0gZWxzZSB7CgkgICAgICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkcGFyYW1zWydkZXRhaWxwYWdlJ10pOwoJICAgICAgICBpZiAoJG5vZGUpIHsKCSAgICAgICAgICAgICRkZXRhaWxwYWdlID0gJHBhcmFtc1snZGV0YWlscGFnZSddOwoJICAgICAgICB9CgkgICAgfQoJICAgICRwYXJhbXNbJ29yaWdpZCddID0gJHJldHVybmlkOwoJfQoJdW5zZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKTsJCgkkdGl0bGUgPSBpc3NldCgkcGFyYW1zWyd0aXRsZSddKT8kcGFyYW1zWyd0aXRsZSddOidsaW5rJzsKCXVuc2V0KCRwYXJhbXNbJ3RpdGxlJ10pOwoJdW5zZXQoJHBhcmFtc1snb3JpZ2lkJ10pOwoKCgkkd2l0aHNsYXNoID0gKGlzc2V0KCRwYXJhbXNbJ3dpdGhzbGFzaCddKSk/dHJ1ZTpmYWxzZTsKCQoJdW5zZXQoJHBhcmFtc1snd2l0aHNsYXNoJ10pOwoKCWVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCRhY3Rpb24sJGRldGFpbHBhZ2UsJHRpdGxlLCRwYXJhbXMsJycsZmFsc2UsZmFsc2UsJycsZmFsc2UsJycsJHdpdGhzbGFzaCk7Cn0KcmV0dXJuOwo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.module_action.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy8gQXV0by1nZW5lcmF0ZSBGaWxlCmlmICghY21zbXMoKSkgZXhpdDsKCnt7aWYgJGFjdGlvbl9vYmotPmlzX3B1YmxpYyBuZSAxfX0KaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ01hbmFnZSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JykpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQp7ey9pZn19CgovLyBTUEVDSUZJQyBDT0RFIEZPUiBUSEUgQUNUSU9OCgp7eyRhY3Rpb25fb2JqLT5nZXRDbGVhbkNvZGUoKX19]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.movedown.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKJHZpZXcgPSBuZXcgTUNGTGlzdFZpZXcoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkcGFyYW1zKTsKCmlmIChpc3NldCgkcGFyYW1zWydpdGVtX2lkJ10pICYmICFlbXB0eSgkcGFyYW1zWydpdGVtX2lkJ10pKSB7CgkkaXRlbSA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmdldEJ5SWQoJHBhcmFtc1snaXRlbV9pZCddKTsKCSRwb3MxID0gJGl0ZW0tPmdldE9yZGVyQnkoKTsKCSRwYXJlbnRfaXRlbSA9ICRpdGVtLT5nZXRQYXJlbnRJdGVtKCk7CgkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoJJGMtPmFkZCgnb3JkZXJfYnknLCAkcG9zMSwgTUNGQ3JpdGVyaWE6OkdSRUFURVJfVEhBTik7CglpZiAoJHBhcmVudF9pdGVtKSB7CgkgICAgJGMtPmFkZCgncGFyZW50X2l0ZW0nLCAkcGFyZW50X2l0ZW0pOwoJfQoJCglpZiAoJHRoaXMtPmdldFByZWZlcmVuY2UoJ3Nob3dfcGFyZW50JywgJzAnKSA9PSAxKQoJewoJCWlmKCRpdGVtLT5nZXRQYXJlbnRJZCgpID4gMCkKCQl7CgkJCSRjLT5hZGQoJ3BhcmVudF9pZCcsICRpdGVtLT5nZXRQYXJlbnRJZCgpKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGMtPmFkZCgncGFyZW50X2lkJywgMCwgTUNGQ3JpdGVyaWE6OkVRVUFMLCAnIE9SIHBhcmVudF9pZCBJUyBOVUxMJyk7CgkJfQoJfQoJCgkkYy0+YWRkQXNjZW5kaW5nT3JkZXJCeUNvbHVtbignb3JkZXJfYnknKTsKCSRjLT5zZXRMaW1pdCgxKTsKCWlmICgkbmV4dCA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0T25lKCRjKSkgewoJICAgICRwb3MyID0gJG5leHQtPmdldE9yZGVyQnkoKTsKCSAgICAkbmV4dC0+c2V0T3JkZXJCeSgkcG9zMSk7CgkgICAgJG5leHQtPnNhdmUoKTsKCSAgICAkaXRlbS0+c2V0T3JkZXJCeSgkcG9zMSsxKTsKCSAgICAkaXRlbS0+c2F2ZSgpOwoJfQp9Cgp7e2lmICRwYXJlbnRfbW9kdWxlfX0KJHBhcmVudCA9IG5ldyB7eyRwYXJlbnRfbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSgpOwokcGFyZW50LT5SZWRpcmVjdCgkaWQsICdlZGl0JywgJHJldHVybmlkLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSwgJ2l0ZW1faWQnID0+ICRpdGVtLT5nZXRQYXJlbnRJdGVtKCkpKTsKe3tlbHNlfX0KJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgYXJyYXkoJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCkpKTsKe3svaWZ9fQpleGl0OwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.moveup.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKJHZpZXcgPSBuZXcgTUNGTGlzdFZpZXcoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkcGFyYW1zKTsKCmlmIChpc3NldCgkcGFyYW1zWydpdGVtX2lkJ10pICYmICFlbXB0eSgkcGFyYW1zWydpdGVtX2lkJ10pKSB7CgkkaXRlbSA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmdldEJ5SWQoJHBhcmFtc1snaXRlbV9pZCddKTsKCSRwb3MxID0gJGl0ZW0tPmdldE9yZGVyQnkoKTsKCSRwYXJlbnRfaXRlbSA9ICRpdGVtLT5nZXRQYXJlbnRJdGVtKCk7CgkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoJJGMtPmFkZCgnb3JkZXJfYnknLCAkcG9zMSwgTUNGQ3JpdGVyaWE6OkxFU1NfVEhBTik7CglpZiAoJHBhcmVudF9pdGVtKSB7CgkgICAgJGMtPmFkZCgncGFyZW50X2l0ZW0nLCAkcGFyZW50X2l0ZW0pOwoJfQoJCglpZiAoJHRoaXMtPmdldFByZWZlcmVuY2UoJ3Nob3dfcGFyZW50JywgJzAnKSA9PSAxKQoJewoJCWlmKCRpdGVtLT5nZXRQYXJlbnRJZCgpID4gMCkKCQl7CgkJCSRjLT5hZGQoJ3BhcmVudF9pZCcsICRpdGVtLT5nZXRQYXJlbnRJZCgpKTsKCQl9CgkJZWxzZQoJCXsKCQkJJGMtPmFkZCgncGFyZW50X2lkJywgMCwgTUNGQ3JpdGVyaWE6OkVRVUFMLCAnIE9SIHBhcmVudF9pZCBJUyBOVUxMJyk7CgkJfQoJfQoJCgkkYy0+YWRkRGVzY2VuZGluZ09yZGVyQnlDb2x1bW4oJ29yZGVyX2J5Jyk7CgkkYy0+c2V0TGltaXQoMSk7CglpZiAoJHByZXYgPSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0Ojpkb1NlbGVjdE9uZSgkYykpIHsKCSAgICAkcG9zMiA9ICRwcmV2LT5nZXRPcmRlckJ5KCk7CgkgICAgJHByZXYtPnNldE9yZGVyQnkoJHBvczIrMSk7CgkgICAgJHByZXYtPnNhdmUoKTsKCSAgICAkaXRlbS0+c2V0T3JkZXJCeSgkcG9zMik7CgkgICAgJGl0ZW0tPnNhdmUoKTsKCX0KCWVsc2VpZigkaXRlbS0+b3JkZXJfYnkgPiAxKQoJewoJCSRpdGVtLT5zZXRPcmRlckJ5KDEpOwogICAgJGl0ZW0tPnNhdmUoKTsKCX0KfQoKe3tpZiAkcGFyZW50X21vZHVsZX19CiRwYXJlbnQgPSBuZXcge3skcGFyZW50X21vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0oKTsKJHBhcmVudC0+UmVkaXJlY3QoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgYXJyYXkoJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCksICdpdGVtX2lkJyA9PiAkaXRlbS0+Z2V0UGFyZW50SXRlbSgpKSk7Cnt7ZWxzZX19CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpKSk7Cnt7L2lmfX0KZXhpdDsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.publish.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKCmlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCkpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKJHZpZXcgPSBuZXcgTUNGTGlzdFZpZXcoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkcGFyYW1zKTsKCiRpdGVtID0ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6Z2V0QnlJZCgkcGFyYW1zWydpdGVtX2lkJ10pOwokaXRlbS0+c2V0UHVibGlzaGVkKCRpdGVtLT5nZXRQdWJsaXNoZWQoKSA/IDAgOiAxKTsKJGl0ZW0tPnNhdmUoKTsKCnt7aWYgJHBhcmVudF9tb2R1bGV9fQokcGFyZW50ID0gbmV3IHt7JHBhcmVudF9tb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19KCk7CiRwYXJlbnQtPlJlZGlyZWN0KCRpZCwgJ2VkaXQnLCAkcmV0dXJuaWQsIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpLCAnaXRlbV9pZCcgPT4gJGl0ZW0tPmdldFBhcmVudEl0ZW0oKSwgJ3RhYicgPT4gJHRoaXMtPmdldE5hbWUoKSkpOwp7e2Vsc2V9fQokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSkpOwp7ey9pZn19Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.rss.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKJGMtPmFkZCgncHVibGlzaGVkJywgJzEnKTsKCiAgaWYgKGlzc2V0KCRwYXJhbXNbJ2N1cnJlbnRwYWdlJ10pKSB7CiAgICBpZihjbGFzc19leGlzdHMoJ01YX1JlbGF0aW9uTGluaycpKSB7CiAgICAgICRjLT5hZGQoJ2lkJywgTVhfUmVsYXRpb25MaW5rOjpnZXRSZWxhdGVkSXRlbXNJZHMoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2NvbnRlbnRfaWQnKSwgJ3BhZ2VzJyksIE1DRkNyaXRlcmlhOjpJTik7CiAgICB9CiAgfQogIGlmIChpc3NldCgkcGFyYW1zWydwYWdlcyddKSkgewogIAkkZ2x1ZSA9IGlzc2V0KCRwYXJhbXNbJ2FsbF9wYWdlcyddKSA/ICdBTkQnIDogJ09SJzsKICAgIGlmKGNsYXNzX2V4aXN0cygnTVhfUmVsYXRpb25MaW5rJykpIHsKICAgICAgJGMtPmFkZCgnaWQnLCBNWF9SZWxhdGlvbkxpbms6OmdldFJlbGF0ZWRJdGVtc0lkcygne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsIGV4cGxvZGUoJywnLCAkcGFyYW1zWydwYWdlcyddKSwgJ3BhZ2VzJywgJGdsdWUpLCBNQ0ZDcml0ZXJpYTo6SU4pOwogICAgfQogIH0KICBpZiAoaXNzZXQoJHBhcmFtc1snb3B0aW9ucyddKSkgewogIAkkZ2x1ZSA9IGlzc2V0KCRwYXJhbXNbJ2FsbF9vcHRpb25zJ10pID8gJ0FORCcgOiAnT1InOwogICAgaWYoY2xhc3NfZXhpc3RzKCdNWF9SZWxhdGlvbkxpbmsnKSkgewogICAgICAkYy0+YWRkKCdpZCcsIE1YX1JlbGF0aW9uTGluazo6Z2V0UmVsYXRlZEl0ZW1zSWRzKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgZXhwbG9kZSgnLCcsICRwYXJhbXNbJ29wdGlvbnMnXSksICdvcHRpb25zJywgJGdsdWUpLCBNQ0ZDcml0ZXJpYTo6SU4pOwogICAgfQogIH0KICBpZiAoaXNzZXQoJHBhcmFtc1snbXhmaWx0ZXJzX29wdGlvbnMnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snbXhmaWx0ZXJzX29wdGlvbnMnXSkpIHsKICAJJG9wdGlvbnMgPSBhcnJheSgpOwogIAlmb3JlYWNoICgkcGFyYW1zWydteGZpbHRlcnNfb3B0aW9ucyddIGFzICRvcHRpb24pIHsKICAJCWlmICgkb3B0aW9uKSB7CiAgCQkJJG9wdGlvbnNbXSA9ICRvcHRpb247CiAgCQl9CiAgCX0KICAJaWYgKGNvdW50KCRvcHRpb25zKSkgewogICAgICBpZihjbGFzc19leGlzdHMoJ01YX1JlbGF0aW9uTGluaycpKSB7CiAgICAgICAgJGMtPmFkZCgnaWQnLCBNWF9SZWxhdGlvbkxpbms6OmdldFJlbGF0ZWRJdGVtc0lkcygne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsICRvcHRpb25zLCAnb3B0aW9ucycsICdBTkQnKSwgTUNGQ3JpdGVyaWE6OklOKTsKICAgICAgfQogIAl9CiAgfQoKCgp7e2ZvcmVhY2ggZnJvbT0kZmlsdGVycyBpdGVtPWZpbHRlcn19CmlmIChpc3NldCgkcGFyYW1zWyd7eyRmaWx0ZXIubmFtZX19J10pKSB7Cgl7e2lmIGluX2FycmF5KCRmaWx0ZXIudHlwZSwgYXJyYXkoJ2xlc3MnLCAnbGVzc19lcXVhbCcsICdncmVhdGVyJywgJ2dyZWF0ZXJfZXF1YWwnKSl9fQoJJGMtPmFkZCgnQ0FTVCh7eyRmaWx0ZXIuZmllbGR9fSBBUyBVTlNJR05FRCknLCAkcGFyYW1zWyd7eyRmaWx0ZXIubmFtZX19J10sIE1DRkNyaXRlcmlhOjp7eyRmaWx0ZXIuY3JpdGVyaWF9fSk7Cgl7e2Vsc2VpZiAgaW5fYXJyYXkoJGZpbHRlci50eXBlLCBhcnJheSgnbGlrZV93aWxkJykpfX0KCSRjLT5hZGQoJyV7eyRmaWx0ZXIuZmllbGR9fSUnLCAkcGFyYW1zWyd7eyRmaWx0ZXIubmFtZX19J10sIE1DRkNyaXRlcmlhOjp7eyRmaWx0ZXIuY3JpdGVyaWF9fSk7Cgl7e2Vsc2V9fQoJJGMtPmFkZCgne3skZmlsdGVyLmZpZWxkfX0nLCAkcGFyYW1zWyd7eyRmaWx0ZXIubmFtZX19J10sIE1DRkNyaXRlcmlhOjp7eyRmaWx0ZXIuY3JpdGVyaWF9fSk7Cgl7ey9pZn19Cn0Ke3svZm9yZWFjaH19CgppZiAoaXNzZXQoJHBhcmFtc1snbGltaXQnXSkpIHsKCSRjLT5zZXRMaW1pdCgkcGFyYW1zWydsaW1pdCddKTsKfQplbHNlCnsKCSRjLT5zZXRMaW1pdCgyNSk7Cn0KCiRjLT5hZGREZXNjZW5kaW5nT3JkZXJCeUNvbHVtbigndXBkYXRlZF9hdCcpOwokYy0+YWRkRGVzY2VuZGluZ09yZGVyQnlDb2x1bW4oJ2lkJyk7Cgp7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpnbG9iYWxGcm9udGVuZEZpbHRlcnMoJGMpOwoKJGl0ZW1zID0ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6ZG9TZWxlY3QoJGMpOwokdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdpdGVtcycsICRpdGVtcyk7CiRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduX2J5X3JlZigncm9vdF91cmwnLCAkY29uZmlnWydyb290X3VybCddKTsKCmlmKCBwcmVnX21hdGNoKCAnL01vemlsbGEvJywgJF9TRVJWRVJbIkhUVFBfVVNFUl9BR0VOVCJdICkgKQp7CiAgY21zbXMoKS0+c2V0X3ZhcmlhYmxlKCdjb250ZW50LXR5cGUnLCAndGV4dC94bWwnKTsKfQplbHNlIAp7CiAgY21zbXMoKS0+c2V0X3ZhcmlhYmxlKCdjb250ZW50LXR5cGUnLCAnYXBwbGljYXRpb24vcnNzK3htbCcpOwp9CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGb3IoJ3JzcycsICRwYXJhbXMpOw==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.search.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+R2V0TmFtZSgpLCAkaWQsJ2RlZmF1bHQnLChpc3NldCgkcGFyYW1zWydyZXR1cm5pZCddKSA/ICRwYXJhbXNbJ3JldHVybmlkJ10gOiAkcmV0dXJuaWQpKTsKJGZvcm0tPnNldEJ1dHRvbnMoYXJyYXkoJ3N1Ym1pdCcpKTsKJGZvcm0tPnNldExhYmVsKCdzdWJtaXQnLCBpc3NldCgkcGFyYW1zWydzZWFyY2hfbGFiZWwnXSk/JHBhcmFtc1snc2VhcmNoX2xhYmVsJ106J1NlYXJjaCcpOwoKaWYoaXNzZXQoJHBhcmFtc1snZmlsdGVyX3RpdGxlJ10pKSAgJGZvcm0tPnNldFdpZGdldCgnZmlsdGVyX3RpdGxlJywgJ3RleHQnLCBhcnJheSgnc2l6ZScgPT4gMjAsICdkZWZhdWx0X3ZhbHVlJyA9PiBpc3NldCgkcGFyYW1zWydmaWx0ZXJfdGl0bGUnXSk/JHBhcmFtc1snZmlsdGVyX3RpdGxlJ106JycpKTsKCmlmKGlzc2V0KCRwYXJhbXNbJ2ZpbHRlcl9hbGwnXSkpICAkZm9ybS0+c2V0V2lkZ2V0KCdmaWx0ZXJfYWxsJywgJ3RleHQnLCBhcnJheSgnc2l6ZScgPT4gMjAsICdkZWZhdWx0X3ZhbHVlJyA9PiBpc3NldCgkcGFyYW1zWydmaWx0ZXJfYWxsJ10pPyRwYXJhbXNbJ2ZpbHRlcl90aXRsZSddOicnKSk7CgppZiAoaXNzZXQoJHBhcmFtc1snZmlsdGVycyddKSkKewoJJGZpbHRlcnMgPSBleHBsb2RlKCd8JywgJHBhcmFtc1snZmlsdGVycyddKTsKCWZvcmVhY2ggKCRmaWx0ZXJzIGFzICRmaWx0ZXIpCgl7CgkJJG9wdCA9IGV4cGxvZGUoJzsnLCAkZmlsdGVyKTsKCQkkb3B0aW9ucyA9IGFycmF5KCk7CgkJZm9yZWFjaCgkb3B0IGFzICRvcCkKCQl7CgkJCSRvID0gZXhwbG9kZSgnPScsICRvcCk7CgkJCSRvcHRpb25zW3RyaW0oJG9bMF0pXSA9IHRyaW0oJG9bMV0pOwoJCX0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ25hbWUnXSkpCgkJewoJCQkkbmFtZSA9ICRvcHRpb25zWyduYW1lJ107CgkJCXVuc2V0KCRvcHRpb25zWyduYW1lJ10pOwoJCQlpZihpc3NldCgkcGFyYW1zWydjdXJyZW50X3ZhbHVlcyddWyRuYW1lXSkpICRvcHRpb25zWyd2YWx1ZSddID0gJHBhcmFtc1snY3VycmVudF92YWx1ZXMnXVskbmFtZV07CgkJCXt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmdldEZFRmlsdGVyKCRmb3JtLCAkbmFtZSwgJG9wdGlvbnMpOwoJCX0KCX0KfQoKJG14ZmlsdGVycyA9IGFycmF5KCk7CiRtb2R1bGV4dGVuZGVyID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdNb2R1bGVYdGVuZGVyJyk7CmlmKGlzX29iamVjdCgkbW9kdWxleHRlbmRlcikpCnsKICBpZiAoJG1vZHVsZXh0ZW5kZXItPmlzWHRlbmRlZE1vZHVsZSgne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScpKSB7CiAgCWZvcmVhY2ggKE1YX1JlbGF0aW9uOjpnZXRGaWx0ZXJzKCR0aGlzLT5nZXROYW1lKCkpIGFzICRmaWx0ZXIpIHsKICAJICAgIGlmICgkZmlsdGVyLT5nZXRUeXBlKCkgPT0gJ2NhdGVnb3J5JykgewogIAkJCWlmKGlzc2V0KCRwYXJhbXNbJ3RpdGxlX2ZpbHRlcl9jYXRlZ29yeV8nLiRmaWx0ZXItPmdldElkKCldKSkKICAJCQl7CiAgCQkJCSR2YWx1ZXMgPSBhcnJheSgkcGFyYW1zWyd0aXRsZV9maWx0ZXJfY2F0ZWdvcnlfJy4kZmlsdGVyLT5nZXRJZCgpXSA9PiAwKTsKICAJCQl9CiAgCQkJZWxzZQogIAkJCXsJCQkJCiAgCQkgICAgICR2YWx1ZXMgPSBhcnJheSgkZmlsdGVyLT5nZXRUaXRsZShmYWxzZSwgdHJ1ZSkgPT4gMCk7CiAgCQkJfQogICAgICAJCWZvcmVhY2ggKCRmaWx0ZXItPmdldFJlbGF0ZWRJdGVtcygpIGFzICRpdGVtKSB7CiAgICAgIAkJCSR2YWx1ZXNbJGl0ZW0tPnRpdGxlXSA9ICRpdGVtLT5pZDsKICAgICAgCQl9CgoKICAJCQkJLy8kbXhmaWx0ZXJzWyRmaWx0ZXItPmdldElkKCldID0gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCAnbXhmaWx0ZXJzX29wdGlvbnNbJyAuICRmaWx0ZXItPmlkIC4gJ10nLCAkdmFsdWVzLCAtMSwgaXNzZXQoJHBhcmFtc1snbXhmaWx0ZXJzX29wdGlvbnMnXVskZmlsdGVyLT5pZF0pID8gJHBhcmFtc1snbXhmaWx0ZXJzX29wdGlvbnMnXVskZmlsdGVyLT5pZF0gOiAnJyk7CiAgCQkJCSRmb3JtLT5zZXRXaWRnZXQoJ214ZmlsdGVyc19vcHRpb25zWycgLiAkZmlsdGVyLT5pZCAuICddJywgJ3NlbGVjdCcsIGFycmF5KAogIAkJCQkJJ3ZhbHVlcycgPT4gJHZhbHVlcwogIAkJCQkJLCd2YWx1ZScgPT4gaXNzZXQoJHBhcmFtc1snbXhmaWx0ZXJzX29wdGlvbnMnXVskZmlsdGVyLT5pZF0pID8gJHBhcmFtc1snbXhmaWx0ZXJzX29wdGlvbnMnXVskZmlsdGVyLT5pZF0gOiAnJwogIAkJCQkpKTsKICAJICAgIH0gCiAgCQkJZWxzZWlmICgkZmlsdGVyLT5nZXRUeXBlKCkgPT0gJ3BhZ2UnKSAKICAJCQl7CiAgCQkJCWlmKGlzc2V0KCRwYXJhbXNbJ3RpdGxlX2ZpbHRlcl9wYWdlXycuJGZpbHRlci0+Z2V0SWQoKV0pKQogIAkJCQl7CiAgCQkJCQkkdmFsdWVzID0gYXJyYXkoJHBhcmFtc1sndGl0bGVfZmlsdGVyX3BhZ2VfJy4kZmlsdGVyLT5nZXRJZCgpXSA9PiAwKTsKICAJCQkJfQogIAkJCQllbHNlCiAgCQkJCXsJCQkJCiAgCQkgICAgICAkdmFsdWVzID0gYXJyYXkoJGZpbHRlci0+Z2V0VGl0bGUoZmFsc2UsIHRydWUpID0+IDApOwogIAkJCQl9CiAgICAgIAkJZm9yZWFjaCAoJGZpbHRlci0+Z2V0UmVsYXRlZEl0ZW1zKCkgYXMgJGl0ZW0pIHsKICAgICAgCQkJJHZhbHVlc1skaXRlbS0+dGl0bGVdID0gJGl0ZW0tPmlkOwogICAgICAJCX0KCiAgCQkJCS8vJG14ZmlsdGVyc1skZmlsdGVyLT5nZXRJZCgpXSA9ICR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwgJ214ZmlsdGVyc19wYWdlc1snIC4gJGZpbHRlci0+aWQgLiAnXScsICR2YWx1ZXMsIC0xLCBpc3NldCgkcGFyYW1zWydteGZpbHRlcnNfcGFnZXMnXVskZmlsdGVyLT5pZF0pID8gJHBhcmFtc1snbXhmaWx0ZXJzX3BhZ2VzJ11bJGZpbHRlci0+aWRdIDogJycpOwogIAkJCQkkZm9ybS0+c2V0V2lkZ2V0KCdteGZpbHRlcnNfcGFnZXNbJyAuICRmaWx0ZXItPmlkIC4gJ10nLCAnc2VsZWN0JywgYXJyYXkoCiAgCQkJCQkndmFsdWVzJyA9PiAkdmFsdWVzCiAgCQkJCQksJ3ZhbHVlJyA9PiBpc3NldCgkcGFyYW1zWydteGZpbHRlcnNfcGFnZXMnXVskZmlsdGVyLT5pZF0pID8gJHBhcmFtc1snbXhmaWx0ZXJzX3BhZ2VzJ11bJGZpbHRlci0+aWRdIDogJycKICAJCQkJKSk7CiAgCSAgICB9CiAgCX0KICB9CiAgCn0KCgovKgoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpZCcsICRpZCk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZm9ybV9zdGFydCcsICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAnZGVmYXVsdCcsIChpc3NldCgkcGFyYW1zWydyZXR1cm5pZCddKSA/ICRwYXJhbXNbJ3JldHVybmlkJ10gOiAkcmV0dXJuaWQpLCAncG9zdCcpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYXJhbWV0ZXJzJywgJHBhcmFtcyk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignbXhmaWx0ZXJzJywgJG14ZmlsdGVycyk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVmaWx0ZXInLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2ZpbHRlcl90aXRsZScsIGlzc2V0KCRwYXJhbXNbJ2ZpbHRlcl90aXRsZSddKSA/IGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydmaWx0ZXJfdGl0bGUnXSkgOiAnJywgMjApKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaWx0ZXJfYWxsJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdmaWx0ZXJfYWxsJywgaXNzZXQoJHBhcmFtc1snZmlsdGVyX2FsbCddKSA/IGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydmaWx0ZXJfYWxsJ10pIDogJycsIDIwKSk7CgovKiovCgoKCgppZihpc3NldCgkcGFyYW1zWyd2aWV3X3RlbXBsYXRlJ10pKQp7CgkkZm9ybS0+c2V0V2lkZ2V0KCd0ZW1wbGF0ZScsICdoaWRkZW4nLCBhcnJheSgndmFsdWUnID0+ICRwYXJhbXNbJ3ZpZXdfdGVtcGxhdGUnXSkpOwp9CgokbmV3cGFyYW1zID0gJHBhcmFtczsKdW5zZXQoJG5ld3BhcmFtc1snbW9kdWxlJ10pOwp1bnNldCgkbmV3cGFyYW1zWydhY3Rpb24nXSk7CnVuc2V0KCRuZXdwYXJhbXNbJ3BhZ2UnXSk7CnVuc2V0KCRuZXdwYXJhbXNbJ3JldHVybmlkJ10pOwp1bnNldCgkbmV3cGFyYW1zWyd2aWV3X3RlbXBsYXRlJ10pOwp1bnNldCgkbmV3cGFyYW1zWydmaWx0ZXJzJ10pOwp1bnNldCgkbmV3cGFyYW1zWydjdXJyZW50X3ZhbHVlcyddKTsKZm9yZWFjaCgkbmV3cGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKQp7CgkkZm9ybS0+c2V0V2lkZ2V0KCRrZXksICdoaWRkZW4nLCBhcnJheSgndmFsdWUnID0+ICR2YWx1ZSkpOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Zvcm0nLCAkZm9ybSk7CmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZvcignc2VhcmNoJywgJHBhcmFtcyk7CnJldHVybjsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.tagcloud.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKJGMtPmFkZCgncHVibGlzaGVkJywgJzEnKTsKCnt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmJ1aWxkRnJvbnRlbmRGaWx0ZXJzKCRjLCAkcGFyYW1zKTsKe3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6Z2xvYmFsRnJvbnRlbmRGaWx0ZXJzKCRjKTsKJGl0ZW1zID0ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6ZG9TZWxlY3QoJGMpOwoKJHRhZ3MgPSBhcnJheSgpOwpmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pCnsKCWlmIChtZXRob2RfZXhpc3RzKCRpdGVtLCAnZ2V0VGFncycpKQoJewkKCQkkdGFnbGluZSA9ICRpdGVtLT5nZXRUYWdzKGlzc2V0KCRwYXJhbXNbJ2Nsb3VkdHlwZSddKT8kcGFyYW1zWydjbG91ZHR5cGUnXTpudWxsKTsKCQlpZighZW1wdHkoJHRhZ2xpbmUpKQogICAgewoJCQkkZWxlbWVudHMgPSBleHBsb2RlKCcsJywgJHRhZ2xpbmUpOwoKCQkJZm9yZWFjaCAoJGVsZW1lbnRzIGFzICRlbGVtZW50KQoJCQl7CgkJCQlpZiAoaXNzZXQoJHRhZ3NbdHJpbSgkZWxlbWVudCldKSkKCQkJCXsKCQkJCQkkdGFnc1t0cmltKCRlbGVtZW50KV0rKzsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkdGFnc1t0cmltKCRlbGVtZW50KV0gPSAxOwoJCQkJfQoJCQl9CgkJfQoJfQkKfQphcnNvcnQoJHRhZ3MpOwoKaWYoaXNzZXQoJHBhcmFtc1snbGltaXQnXSkpCnsKCWlmICgkcGFyYW1zWydsaW1pdCddID4gMCkJJHRhZ3MgPSBhcnJheV9zbGljZSgkdGFncywgMCwgJHBhcmFtc1snbGltaXQnXSwgdHJ1ZSk7Cn0KZWxzZQp7CQoJJHRhZ3MgPSBhcnJheV9zbGljZSgkdGFncywgMCwgMTUsIHRydWUpOwp9CgovLyBOb3cgY2FsY3VsYXRlIHBlcmNlbnQKCiRtYXggPSBtYXgoJHRhZ3MpOwoKJG50YWdzID0gYXJyYXkoKTsKCmZvcmVhY2goJHRhZ3MgYXMgJHRhZyA9PiAkcG9wdWxhcml0eSkKewoJJG50YWdzW10gPSBhcnJheSgnY2xhc3MnID0+IGZsb29yKCRwb3B1bGFyaXR5LyRtYXgqMTApLCAndGFnJyA9PiAkdGFnLCAncG9wdWxhcml0eScgPT4gJHBvcHVsYXJpdHkpOwp9CgppZiAoIWlzc2V0KCRwYXJhbXNbJ25vc2h1ZmZsZSddKSkgc2h1ZmZsZSgkbnRhZ3MpOwoKCiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFncycsICRudGFncyk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGb3IoJ3RhZ2Nsb3VkJywgJHBhcmFtcyk7CnJldHVybjsKe3sqCi8vIAovLyBpZiAoaXNzZXQoJHBhcmFtc1sndGVtcGxhdGUnXSkgJiYgJHRoaXMtPkdldFRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pKSB7Ci8vIAllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHBhcmFtc1sndGVtcGxhdGUnXSk7Ci8vIH0gZWxzZSB7Ci8vIAllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2Rpc3BsYXlfbGlzdCcpOwovLyB9Cip9fQ==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.template.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwogIAogICR0aGlzLT5zbWFydHktPmFzc2lnbignbXhfcGFyYW1zJywgJHBhcmFtcyk7CiAgCiAgaWYoaXNzZXQoJHBhcmFtc1snaXRlbSddKSkKICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW0nLCAkcGFyYW1zWydpdGVtJ10pOwogIH0KCiAgaWYoaXNzZXQoJHBhcmFtc1snaXRlbXMnXSkpCiAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsICRwYXJhbXNbJ2l0ZW1zJ10pOwogIH0KCQogICRwYXJhbXNvYmogPSBuZXcgc3RkQ2xhc3MoKTsKICAkcGFyYW1zb2JqLT5wYXJhbXMgPSAkcGFyYW1zOwogICR0aGlzLT5zbWFydHktPmFzc2lnbignbWNmYWN0b3J5JywgJHBhcmFtc29iaik7CgogIGlmIChpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZSddKSAmJiAkdGhpcy0+R2V0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGUnXSkpCiAgewogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pOwogIH0KICBlbHNlCiAgewogIAllY2hvICc8cD4nIC4gJHRoaXMtPmxhbmcoJ3Vua25vd25fdGVtcGxhdGUnKSAuICc8L3A+JzsKICB9CiAgCj8+]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.template_delete.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWNtc21zKCkpIGV4aXQ7CmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnTW9kaWZ5IFRlbXBsYXRlcycpKSAvLyBSZXN0cmljdCB0byBhZG1pbiBwYW5lbCBhbmQgdXNlcnMgd2l0aCBwZXJtaXNzaW9uCnsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJZXhpdDsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICYmICFlbXB0eSgkcGFyYW1zWyd0ZW1wbGF0ZSddKSkgewogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCRwYXJhbXNbJ3RlbXBsYXRlJ10pOwoJCSR0aGlzLT5SZW1vdmVEZWZhdWx0VGVtcGxhdGUoJHBhcmFtc1sndGVtcGxhdGUnXSk7Cn0KCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJykpOwpleGl0Owo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.template_edit.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWNtc21zKCkpIGV4aXQ7CmlmICghICR0aGlzLT5DaGVja0FjY2VzcygnTW9kaWZ5IFRlbXBsYXRlcycpKSAvLyBSZXN0cmljdCB0byBhZG1pbiBwYW5lbCBhbmQgdXNlcnMgd2l0aCBwZXJtaXNzaW9uCnsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJZXhpdDsKfQoKJGZvcm0gPSBuZXcgQ01TRm9ybSgkdGhpcy0+R2V0TmFtZSgpLCAkaWQsICd0ZW1wbGF0ZV9lZGl0JywkcmV0dXJuaWQpOwokZm9ybS0+c2V0QnV0dG9ucyhhcnJheSgnc3VibWl0JywnYXBwbHknLCdjYW5jZWwnKSk7CiRmb3JtLT5zZXRNZXRob2QoJ3Bvc3QnKTsKJGZvcm0tPnNldFdpZGdldCgndGVtcGxhdGUnLCd0ZXh0JyxhcnJheSgndmFsaWRhdG9ycycgPT4gYXJyYXkoJ25vdF9lbXB0eScgPT4gdHJ1ZSkpKTsKJGZvcm0tPnNldFdpZGdldCgnY29kZScsICdjb2RlYXJlYScpOwokZm9ybS0+c2V0V2lkZ2V0KCdyZXN0b3JlX3RlbXBsYXRlX2Zyb20nLCAnc2VsZWN0JywgYXJyYXkoJ3ZhbHVlcycgPT4gYXJyYXlfbWVyZ2UoYXJyYXkoJ3NlbGVjdCcgPT4gJHRoaXMtPmxhbmcoJ3NlbGVjdCBvbmUnKSkse3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fTo6JGZyb250ZW5kX3RlbXBsYXRlcykpKTsKJGZvcm0tPnNldFdpZGdldCgnZGVmYXVsdF90ZW1wbGF0ZV9mb3InLCAnc2VsZWN0JywgYXJyYXkoJ3ZhbHVlcycgPT4gYXJyYXlfbWVyZ2UoYXJyYXkoJ3NlbGVjdCcgPT4gJHRoaXMtPmxhbmcoJ3NlbGVjdCBvbmUnKSkse3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fTo6JGZyb250ZW5kX3RlbXBsYXRlcykpKTsKCmlmICghJGZvcm0tPmdldFdpZGdldCgndGVtcGxhdGUnKS0+aXNFbXB0eSgpKQp7CglpZiAoJGZvcm0tPmdldFdpZGdldCgnY29kZScpLT5pc0VtcHR5KCkgJiYgISRmb3JtLT5pc1Bvc3RlZCgpKQoJewoJCSRmb3JtLT5nZXRXaWRnZXQoJ2NvZGUnKS0+c2V0VmFsdWVzKCR0aGlzLT5nZXRUZW1wbGF0ZSgkZm9ybS0+Z2V0V2lkZ2V0KCd0ZW1wbGF0ZScpLT5nZXRWYWx1ZSgpKSk7Cgl9CgkKCSRhY3Rpb24gPSAkdGhpcy0+aXNEZWZhdWx0VGVtcGxhdGUoJGZvcm0tPmdldFdpZGdldCgndGVtcGxhdGUnKS0+Z2V0VmFsdWUoKSk7CglpZiAoJGZvcm0tPmdldFdpZGdldCgnZGVmYXVsdF90ZW1wbGF0ZV9mb3InKS0+aXNFbXB0eSgpICYmICgkYWN0aW9uICE9PSBmYWxzZSkpCgl7CgkJJGZvcm0tPmdldFdpZGdldCgnZGVmYXVsdF90ZW1wbGF0ZV9mb3InKS0+c2V0VmFsdWVzKCRhY3Rpb24pOwoJfQp9CgppZiAoJGZvcm0tPmlzUG9zdGVkKCkpCnsKCSRyZXN0b3JlID0gJGZvcm0tPmdldFdpZGdldCgncmVzdG9yZV90ZW1wbGF0ZV9mcm9tJyktPmdldFZhbHVlKCk7CglpZiAoJHJlc3RvcmUgIT0gJycpCgl7CgkJaWYgKGlzX2ZpbGUoZGlybmFtZShfX0ZJTEVfXykgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3RlbXBsYXRlcycgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ2Zyb250ZW5kLicuJHJlc3RvcmUgLiAnLnRwbCcpKQoJCXsKCQkJJGZvcm0tPmdldFdpZGdldCgnY29kZScpLT5zZXRWYWx1ZXMoJHRoaXMtPkdldFRlbXBsYXRlRnJvbUZpbGUoJ2Zyb250ZW5kLicuJHJlc3RvcmUpKTsKCQkJJGZvcm0tPmdldFdpZGdldCgncmVzdG9yZV90ZW1wbGF0ZV9mcm9tJyktPnNldFZhbHVlcygnJyk7CgkJfQoJfQoJCgkkZm9ybS0+cHJvY2VzcygpOwoJCglpZighJGZvcm0tPmhhc0Vycm9ycygpKQoJewoJCQkkdGhpcy0+U2V0VGVtcGxhdGUoJGZvcm0tPmdldFdpZGdldCgndGVtcGxhdGUnKS0+Z2V0VmFsdWUoKSwgJGZvcm0tPmdldFdpZGdldCgnY29kZScpLT5nZXRWYWx1ZSgpKTsKCQkJCgkJCSRhY3Rpb24gPSAkZm9ybS0+Z2V0V2lkZ2V0KCdkZWZhdWx0X3RlbXBsYXRlX2ZvcicpLT5nZXRWYWx1ZSgpOwoKCQkJaWYgKCRhY3Rpb24gPT0gJ3NlbGVjdCcpCgkJCXsKCQkJCSR0aGlzLT5SZW1vdmVEZWZhdWx0VGVtcGxhdGUoJGZvcm0tPmdldFdpZGdldCgndGVtcGxhdGUnKS0+Z2V0VmFsdWUoKSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkKCQkJCSR0aGlzLT5BZGREZWZhdWx0VGVtcGxhdGUoJGFjdGlvbiwgJGZvcm0tPmdldFdpZGdldCgndGVtcGxhdGUnKS0+Z2V0VmFsdWUoKSk7CgkJCQkkZm9ybS0+Z2V0V2lkZ2V0KCdkZWZhdWx0X3RlbXBsYXRlX2ZvcicpLT5zZXRWYWx1ZXMoJGFjdGlvbik7CgkJCX0KCQkJCgkJCWlmICgkZm9ybS0+aXNTdWJtaXR0ZWQoKSkKCQkJewoJCQkJCXJldHVybiAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpKTsKCQkJfQoJfQp9CgppZiAoJGZvcm0tPmlzQ2FuY2VsbGVkKCkpCnsKCQkJcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJykpOwp9CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lkJywgJGlkKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtJywgJGZvcm0pOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbi50ZW1wbGF0ZV9lZGl0LnRwbCcpOw==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.updateObjects.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghY21zbXMoKSkgZXhpdDsKaWYgKCEkdGhpcy0+Q2hlY2tBY2Nlc3MoJ01hbmFnZSBNQyBGYWN0b3J5JykpIHsKCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQp7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0Ojp1cGRhdGVPYmplY3RzKCk7CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOw==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.url_for.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYoIWNtc21zKCkpIGV4aXQ7CgppZihpc3NldCgkcGFyYW1zWydtYWN0aW9uJ10pKQp7Cgl1bnNldCgkcGFyYW1zWydhY3Rpb24nXSk7CgkkYWN0aW9uID0gJHBhcmFtc1snbWFjdGlvbiddOwoJdW5zZXQoJHBhcmFtc1snbWFjdGlvbiddKTsKCWlmKGVtcHR5KCRyZXR1cm5pZCkpICRyZXR1cm5pZCA9ICR0aGlzLT5nZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3BhZ2UnLCBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5HZXREZWZhdWx0UGFnZUlEKCkpOwoJJGRldGFpbHBhZ2UgPSAkcmV0dXJuaWQ7CglpZiAoaXNzZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKSkgewoJICAgICRtYW5hZ2VyID0gY21zbXMoKS0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoJICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlBbGlhcygkcGFyYW1zWydkZXRhaWxwYWdlJ10pOwoJICAgIGlmICgkbm9kZSkgewoJICAgICAgICAkY29udGVudCA9ICRub2RlLT5HZXRDb250ZW50KCk7CgkgICAgICAgIGlmICgkY29udGVudCkKCSAgICAgICAgewoJICAgICAgICAgICAgJGRldGFpbHBhZ2UgPSAkY29udGVudC0+SWQoKTsKCSAgICAgICAgfQoJICAgIH0gZWxzZSB7CgkgICAgICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkcGFyYW1zWydkZXRhaWxwYWdlJ10pOwoJICAgICAgICBpZiAoJG5vZGUpIHsKCSAgICAgICAgICAgICRkZXRhaWxwYWdlID0gJHBhcmFtc1snZGV0YWlscGFnZSddOwoJICAgICAgICB9CgkgICAgfQoJICAgICRwYXJhbXNbJ29yaWdpZCddID0gJHJldHVybmlkOwoJfQoJdW5zZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKTsJCgl1bnNldCgkcGFyYW1zWydhc3NpZ24nXSk7CQoJdW5zZXQoJHBhcmFtc1snb3JpZ2lkJ10pOwkKCQoJaWYoaXNzZXQoJHBhcmFtc1snY2xlYW5fZW1wdHlfdmFsdWVzJ10pKQoJewoJCWZvcmVhY2goJHBhcmFtcyBhcyAka2V5ID0+ICR2YWx1ZSkKCQl7CgkJCWlmIChlbXB0eSgkdmFsdWUpKQoJCQl7CgkJCQl1bnNldCgkcGFyYW1zWyRrZXldKTsKCQkJfQoJCX0KCQl1bnNldCgkcGFyYW1zWydjbGVhbl9lbXB0eV92YWx1ZXMnXSk7Cgl9CgkKCSR3aXRoc2xhc2ggPSAoaXNzZXQoJHBhcmFtc1snd2l0aHNsYXNoJ10pKT90cnVlOmZhbHNlOwkKCXVuc2V0KCRwYXJhbXNbJ3dpdGhzbGFzaCddKTsKCWVjaG8gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCRhY3Rpb24sJGRldGFpbHBhZ2UsJycsJHBhcmFtcywnJyx0cnVlLGZhbHNlLCcnLGZhbHNlLCcnLCR3aXRoc2xhc2gpOwp9CnJldHVybjs=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/action.user_form.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKLyoKCVRoaXMgYWxsb3dzIEZyb250ZW5kIEZvcm1zIGZvciB0aGUgbW9kdWxlCiovCmlmICghe3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6Y2hlY2tQZXJtaXNzaW9ucygkcGFyYW1zKSkKewoJZWNobyAkdGhpcy0+bGFuZygneW91IGRvIG5vdCBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGlzIGFjdGlvbicpOwoJZXhpdDsKfQppZiAoaXNfb2JqZWN0KGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ01TVXNlcnMnKSkpIC8vIE9ubHkgd29yayB3aXRoIENNU1VzZXJzIGZvciBub3cuLi4KewoJJHVzZXIgPSBDTVNVc2Vyczo6Z2V0VXNlck9yTG9naW4oKTsKCQoJaWYgKGlzc2V0KCRwYXJhbXNbJ2l0ZW1faWQnXSkgJiYgIWVtcHR5KCRwYXJhbXNbJ2l0ZW1faWQnXSkpIHsKCQkkaXRlbSA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmdldEJ5SWQoJHBhcmFtc1snaXRlbV9pZCddKTsKCQlpZiAoJGl0ZW0tPmdldFVzZXJJZCgpICE9ICR1c2VyLT5nZXRJZCgpKQoJCXsKCQkJdW5zZXQoJGl0ZW0pOwoJCX0KCQlpZihpc19udWxsKCRpdGVtKSkKCQl7CgkJCXVuc2V0KCRpdGVtKTsKCQl9CgkJCgl9IAkKCWlmICghaXNzZXQoJGl0ZW0pKQoJIHsKCQkkaXRlbSA9IG5ldyB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0KCk7CgkJJGl0ZW0tPnNldFVzZXJJZCgkdXNlci0+Z2V0SWQoKSk7Cgl9CgkKCgkKCS8vIFRoZSBmb3JtCgkKCSRmb3JtID0gbmV3IENNU0Zvcm0oJHRoaXMtPkdldE5hbWUoKSwgJGlkLCAndXNlcl9mb3JtJywgJHJldHVybmlkKTsKCWlmKGlzc2V0KCRwYXJhbXNbJ2J1dHRvbnMnXSkpCgl7CgkJJGJ1dHRvbnMgPSBhcnJheSgpOwoJCSRsYWJlbHMgPSBhcnJheSgpOwoJCSRlYWNoID0gZXhwbG9kZSgnOycsaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbJ2J1dHRvbnMnXSkpOwoJCWZvcmVhY2goJGVhY2ggYXMgJGJ1dHRuKQoJCXsKCQkJbGlzdCgkYnV0dG9uLCAkbGFiZWwpID0gZXhwbG9kZSgnPT4nLCBodG1sX2VudGl0eV9kZWNvZGUoJGJ1dHRuKSk7CgkJCSRidXR0b25zW10gPSB0cmltKCRidXR0b24pOwoJCQkkbGFiZWxzW3RyaW0oJGJ1dHRvbildID0gdHJpbSgkbGFiZWwpOwoJCX0KCQkkZm9ybS0+c2V0QnV0dG9ucygkYnV0dG9ucyk7CgkJZm9yZWFjaCgkbGFiZWxzIGFzICRidXR0b24gPT4gJGxhYmVsKQoJCXsKCQkJJGZvcm0tPnNldExhYmVsKCRidXR0b24sICRsYWJlbCk7CgkJfQoJfQoJJGZvcm0tPnNldFdpZGdldCgnaXRlbV9pZCcsICdoaWRkZW4nLCBhcnJheSgnb2JqZWN0JyA9PiAmJGl0ZW0sICdmaWVsZF9uYW1lJyA9PiAnaWQnKSk7CQoJLy8gaWYoaXNzZXQoJHBhcmFtc1snaXRlbV9pZCddKSAmJiAhaXNfbnVsbCgkcGFyYW1zWydpdGVtX2lkJ10pKQoJLy8gewoJLy8gCSRmb3JtLT5nZXRXaWRnZXQoJ2l0ZW1faWQnKS0+c2V0VmFsdWVzKGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydpdGVtX2lkJ10pKTsKCS8vIH0KCSRmb3JtLT5zZXRXaWRnZXQoJ3RpdGxlJywgJ3RleHQnLCBhcnJheSgnb2JqZWN0JyA9PiAmJGl0ZW0pKTsJCgkkZm9ybS0+c2V0V2lkZ2V0KCdkaXNhYmxlZCcsICdoaWRkZW4nKTsJCgkJaWYoaXNzZXQoJHBhcmFtc1snZGlzYWJsZWQnXSkgJiYgIWlzX251bGwoJHBhcmFtc1snZGlzYWJsZWQnXSkpCgkJewoJCQkkZm9ybS0+Z2V0V2lkZ2V0KCdkaXNhYmxlZCcpLT5zZXRWYWx1ZXMoaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbJ2Rpc2FibGVkJ10pKTsKCQl9CgkkZm9ybS0+c2V0V2lkZ2V0KCdoaWRkZW4nLCAnaGlkZGVuJyk7CQoJCWlmKGlzc2V0KCRwYXJhbXNbJ2hpZGRlbiddKSAmJiAhaXNfbnVsbCgkcGFyYW1zWydoaWRkZW4nXSkpCgkJewoJCQkkZm9ybS0+Z2V0V2lkZ2V0KCdoaWRkZW4nKS0+c2V0VmFsdWVzKGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydoaWRkZW4nXSkpOwoJCX0KCSRmb3JtLT5zZXRXaWRnZXQoJ2J1dHRvbnMnLCAnaGlkZGVuJyk7CQoJCWlmKGlzc2V0KCRwYXJhbXNbJ2J1dHRvbnMnXSkgJiYgIWlzX251bGwoJHBhcmFtc1snYnV0dG9ucyddKSkKCQl7CgkJCSRmb3JtLT5nZXRXaWRnZXQoJ2J1dHRvbnMnKS0+c2V0VmFsdWVzKGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydidXR0b25zJ10pKTsKCQl9CgkkZm9ybS0+c2V0TXVsdGlwYXJ0Rm9ybSgpOwoJCglpZiAoJHRoaXMtPmdldFByZWZlcmVuY2UoJ3Nob3dfcGFyZW50JywgJzAnKSA9PSAxKQoJewoJCSRmb3JtLT5zZXRXaWRnZXQoJ3BhcmVudF9pZCcsICdzZWxlY3QnLCBhcnJheSgKCQkJJ29iamVjdCcgPT4gJiRpdGVtLCAKCQkJJ3ZhbHVlcycgPT4gYXJyYXkoMCA9PiAnJykgKyAkaXRlbS0+Z2V0UG9zc2libGVQYXJlbnRzSGllcmFyY2h5KCkKCQkJKSk7CgkJCQoJCQlpZihpc3NldCgkcGFyYW1zWydwYXJlbnRfaWQnXSkgJiYgIWlzX251bGwoJHBhcmFtc1sncGFyZW50X2lkJ10pKQoJCQl7CgkJCQkkZm9ybS0+Z2V0V2lkZ2V0KCdwYXJlbnRfaWQnKS0+c2V0VmFsdWVzKCRwYXJhbXNbJ3BhcmVudF9pZCddKTsKCQkJfQoJfQoJCglpZihpc3NldCgkcGFyYW1zWydnb2JhY2snXSkpCgl7CgkJJGZvcm0tPnNldFdpZGdldCgnZ29iYWNrJywgJ2hpZGRlbicsYXJyYXkoJ3ZhbHVlJyA9PiAgJ3RydWUnKSk7CgkJJGZvcm0tPnNldFdpZGdldCgncmVkaXJlY3RfdXJsJywgJ2hpZGRlbicsYXJyYXkoJ3ZhbHVlJyA9PiAgJ2h0dHA6Ly8nIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pKTsKCX0KCiRwYXJhbXNbJ2Zyb250ZW5kJ10gPSB0cnVlOwoKe3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fVZpZXdzOjpjcmVhdGVGb3JtKCR0aGlzLCYkZm9ybSwmJGl0ZW0sJHBhcmFtcyk7CgovL3Zhcl9kdW1wKCRwYXJhbXMpOwoKLy8gZm9yZWFjaCgpCgppZihpc3NldCgkcGFyYW1zWydkaXNhYmxlZCddKSkKewoJJGRpc2FibGVkID0gZXhwbG9kZSgnOycsICRwYXJhbXNbJ2Rpc2FibGVkJ10pOwoJZm9yZWFjaCgkZGlzYWJsZWQgYXMgJGRpc2FibGUpCgl7CgkJJGZvcm0tPnJlbW92ZVdpZGdldCgkZGlzYWJsZSk7Cgl9Cn0KCmlmKGlzc2V0KCRwYXJhbXNbJ2hpZGRlbiddKSkKewoJJGhpZGRlbiA9IGV4cGxvZGUoJzsnLCAkcGFyYW1zWydoaWRkZW4nXSk7Cglmb3JlYWNoKCRoaWRkZW4gYXMgJGhpZGUpCgl7CgkJJGZvcm0tPmhpZGVXaWRnZXQoJGhpZGUpOwoJfQp9IAoKaWYgKCRmb3JtLT5pc1Bvc3RlZCgpKQp7CQoJJGZvcm0tPnByb2Nlc3MoKTsKCWlmKCRmb3JtLT5ub0Vycm9yKCkpCgl7CgkJJGl0ZW0tPnVwbG9hZEZpbGVzKCRpZCk7CgkJJGl0ZW0tPnNhdmUoYXJyYXkoJ2Zyb250ZW5kJyA9PiB0cnVlKSk7CgkJJGl0ZW0tPnVzZXJQb3N0QWN0aW9ucygkaWQsJHJldHVybmlkLCRmb3JtKTsKCQkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW0nLCAkaXRlbSk7CgkJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWNjZXNzX21lc3NhZ2UnLCAkdGhpcy0+bGFuZygnaXRlbSBwb3N0ZWQnKSk7CgkJCgkJaWYgKCRmb3JtLT5nZXRXaWRnZXQoJ3JlZGlyZWN0X3VybCcpICYmICEkZm9ybS0+Z2V0V2lkZ2V0KCdyZWRpcmVjdF91cmwnKS0+aXNFbXB0eSgpKQoJCXsKCQkJcmV0dXJuIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX06Omp1bXBUbygkZm9ybS0+Z2V0V2lkZ2V0KCdyZWRpcmVjdF91cmwnKS0+Z2V0VmFsdWUoKSk7CgkJfQoJCQkJCQkKCQllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGb3IoJ3VzZXJfZm9ybV9zdWNjZXNzJyk7CgkJcmV0dXJuOwoJfQp9CgppZigkaXRlbS0+Z2V0SWQoKSA+IDApCnsKCSRmb3JtLT5nZXRXaWRnZXQoJ2l0ZW1faWQnKS0+c2V0VmFsdWVzKCRpdGVtLT5nZXRJZCgpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbV9pZCcsICRpdGVtLT5nZXRJZCgpKTsKfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtJywgJGZvcm0pOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRm9yKCd1c2VyX2Zvcm0nLCAkcGFyYW1zKTsKfQ==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/function.defaultadmin.help.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmVjaG8gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/function.defaultadmin.items.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwoKaWYoaXNzZXQoJF9TRVNTSU9OWyd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19J11bJ3ZpZXcnXSkgJiYgIWlzc2V0KCRwYXJhbXNbJ3ZpZXcnXSkpCnsKCSRwYXJhbXNbJ3ZpZXcnXSA9ICRfU0VTU0lPTlsne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSddWyd2aWV3J107Cn0KCQoJJHZpZXcgPSBuZXcgTUNGTGlzdFZpZXcoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkcGFyYW1zKTsKCQoJaWYoaXNzZXQoJHBhcmFtc1snb3Blbl9icmFuY2hlJ10pKQoJewoJCSR2aWV3LT5hZGRBY3RpdmVCcmFuY2hlKCRwYXJhbXNbJ29wZW5fYnJhbmNoZSddKTsKCX0KCQoJaWYoaXNzZXQoJHBhcmFtc1snY2xvc2VfYnJhbmNoZSddKSkKCXsKCQkkdmlldy0+cmVtb3ZlQWN0aXZlQnJhbmNoZSgkcGFyYW1zWydjbG9zZV9icmFuY2hlJ10pOwkJCgl9CgkKCglpZiAoJHRoaXMtPmdldFByZWZlcmVuY2UoJ3Nob3dfcGFyZW50JywgJzAnKSA9PSAxKQoJewoJCS8vIFdlIHN3aXRjaCB0byBwYXJlbnRzIG1vZGUKCQkkdmlldy0+c2V0T3JkZXJCeSgncGFyZW50X2lkIEFTQywgb3JkZXJfYnkgQVNDJyk7CQkKCQkkdmlldy0+c2V0SXNUcmVlKCk7Cgl9CgllbHNlCgl7CgkJJHZpZXctPnNldE9yZGVyQnkoJHRoaXMtPmdldFByZWZlcmVuY2UoJ29yZGVyX2J5JywgJ29yZGVyX2J5JykgLiAnICcgLiAkdGhpcy0+Z2V0UHJlZmVyZW5jZSgnb3JkZXJfYnlfZGlyZWN0aW9uJywgJ2FzYycpKTsKCQkkdmlldy0+c2V0SXRlbXNQZXJQYWdlKCR0aGlzLT5nZXRQcmVmZXJlbmNlKCdpdGVtc19wZXJfcGFnZScsICcyNScpKTsKCX0KCgoKJGl0ZW1zID0gJHZpZXctPmdldEl0ZW1zKCk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1zX3RvcCcsICR0aGlzLT5nZXRCdXR0b25zRm9yKCdpdGVtc190b3AnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXNfYm90dG9tJywgJHRoaXMtPmdldEJ1dHRvbnNGb3IoJ2l0ZW1zX2JvdHRvbScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmaWx0ZXJzX2J1dHRvbnMnLCAkdGhpcy0+Z2V0QnV0dG9uc0ZvcignZmlsdGVycycpKTsKCmVjaG8ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fVZpZXdzOjphZG1pbkl0ZW1zKCR0aGlzLCRpZCwkcmV0dXJuaWQsJHZpZXcsJGl0ZW1zKTsJCgokX1NFU1NJT05bJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nXVsndmlldyddID0gJHZpZXctPmdldFZpZXcoKTs=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/function.defaultadmin.options.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFjbXNtcygpKSBleGl0OwppZiAoISR0aGlzLT5DaGVja0FjY2VzcygnQWRtaW4ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpCnsKCXJldHVybiAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBhcnJheSgnYWN0aXZlX3RhYicgPT4gJ29wdGlvbnMnKSk7Cn0KCiRmaWVsZHMgPSBhcnJheSgndGl0bGUnLCAnY3JlYXRlZF9hdCcsICd1cGRhdGVkX2F0JywgJ29yZGVyX2J5JywgJ21jZmlfY3JlYXRlZF90aW1lc3RhbXAnLCAnbWNmaV91cGRhdGVkX3RpbWVzdGFtcCcpOwp7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQokZmllbGRzW10gPSAne3skZmllbGQubmFtZX19JzsKe3svZm9yZWFjaH19CiRmaWVsZHMgPSBhcnJheV9jb21iaW5lKCRmaWVsZHMsICRmaWVsZHMpOwoKaWYgKGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSkgewoJaWYgKGlzc2V0KCRwYXJhbXNbJ2luZGV4X2NvbnRlbnQnXSkpCgl7CgkJaWYgKCR0aGlzLT5nZXRQcmVmZXJlbmNlKCdpbmRleF9jb250ZW50JykgPT0gJzAnIHx8ICR0aGlzLT5nZXRQcmVmZXJlbmNlKCdpbmRleF9jb250ZW50JykgPT0gJycpCgkJewkJCQkJCgkJCSR0aGlzLT5TZWFyY2hSZWluZGV4KCk7CgkJfQoJfQoJZWxzZQoJewoJCWlmICgkdGhpcy0+Z2V0UHJlZmVyZW5jZSgnaW5kZXhfY29udGVudCcpID09ICcxJykKCQl7CQkJCgkJCSR0aGlzLT5TZWFyY2hEZWluZGV4KCk7CgkJfQoJfQkKfQoKJHRlbXBsYXRlcyA9ICR0aGlzLT5MaXN0VGVtcGxhdGVzKCk7CiR0ZW1wbGF0ZXNfbGlzdCA9IGFycmF5KCk7CmZvcmVhY2goJHRlbXBsYXRlcyBhcyAkdGVtcGxhdGUpCnsKCSR0ZW1wbGF0ZXNfbGlzdFskdGVtcGxhdGVdID0gJHRlbXBsYXRlOwp9CgokZm9ybSA9IG5ldyBDTVNGb3JtKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCk7CiRmb3JtLT5zZXRMYWJlbCgnc3VibWl0JywgJ1NhdmUnKTsKJGZvcm0tPnNldFdpZGdldCgnYWN0aXZlX3RhYicsICdoaWRkZW4nLCBhcnJheSgndmFsdWUnID0+ICdvcHRpb25zJykpOwokZm9ybS0+c2V0V2lkZ2V0KCdvcmRlcl9ieScsICdzZWxlY3QnLCBhcnJheSgndmFsdWVzJyA9PiAkZmllbGRzLCAncHJlZmVyZW5jZScgPT4gJ29yZGVyX2J5JykpOwokZm9ybS0+c2V0V2lkZ2V0KCdvcmRlcl9ieV9kaXJlY3Rpb24nLCAnc2VsZWN0JywgYXJyYXkoJ3ZhbHVlcycgPT4gYXJyYXkoJ0FTQycgPT4gJ0FzY2VuZGluZycsICdERVNDJyA9PiAnRGVzY2VuZGluZycpLCAncHJlZmVyZW5jZScgPT4gJ29yZGVyX2J5X2RpcmVjdGlvbicpKTsKJGZvcm0tPnNldFdpZGdldCgnaXRlbXNfcGVyX3BhZ2UnLCAndGV4dCcsIGFycmF5KCdkZWZhdWx0X3ZhbHVlJyA9PiBhcnJheSgyNSksICdwcmVmZXJlbmNlJyA9PiAnaXRlbXNfcGVyX3BhZ2UnLCAnc2l6ZScgPT4gNSkpOwokZm9ybS0+c2V0V2lkZ2V0KCdkYXRlX2Zvcm1hdCcsICd0ZXh0JywgYXJyYXkoJ2RlZmF1bHRfdmFsdWUnID0+IGFycmF5KCdkL20vWScpLCAncHJlZmVyZW5jZScgPT4gJ2RhdGVfZm9ybWF0JywgJ3NpemUnID0+IDEwKSk7CiRmb3JtLT5zZXRXaWRnZXQoJ2RlZmF1bHRfcGFnZScsICdwYWdlcycsIGFycmF5KCdkZWZhdWx0X3ZhbHVlJyA9PiAgY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0RGVmYXVsdFBhZ2VJRCgpLCAncHJlZmVyZW5jZScgPT4gJ2RlZmF1bHRfcGFnZScpKTsKJGZvcm0tPnNldFdpZGdldCgnc2hvd19wYXJlbnQnLCAnY2hlY2tib3gnLCBhcnJheSgncHJlZmVyZW5jZScgPT4gJ3Nob3dfcGFyZW50JykpOwokZm9ybS0+c2V0V2lkZ2V0KCdzaG93X3BhcmVudF9maXJzdF9sZXZlbCcsICdjaGVja2JveCcsIGFycmF5KCdwcmVmZXJlbmNlJyA9PiAnc2hvd19wYXJlbnRfZmlyc3RfbGV2ZWwnKSk7CiRmb3JtLT5zZXRXaWRnZXQoJ3NhdmVfYWRkJywgJ2NoZWNrYm94JywgYXJyYXkoJ3ByZWZlcmVuY2UnID0+ICdzYXZlX2FkZCcpKTsKJGZvcm0tPnNldFdpZGdldCgnaW5kZXhfY29udGVudCcsICdjaGVja2JveCcsIGFycmF5KCdwcmVmZXJlbmNlJyA9PiAnaW5kZXhfY29udGVudCcsICdkZWZhdWx0X3ZhbHVlJyA9PiAwKSk7CgppZiAoTUNGVG9vbHM6OklzTW9kdWxlQWN0aXZlKCdDTW9uJykpCnsKCSRmb3JtLT5zZXRXaWRnZXQoJ3VzZV9jbW9uJywgJ2NoZWNrYm94JywgYXJyYXkoJ3ByZWZlcmVuY2UnID0+ICd1c2VfY21vbicpKTsKCSRmb3JtLT5zZXRXaWRnZXQoJ2Ntb25fZnJvbScsICd0ZXh0JywgYXJyYXkoJ3ByZWZlcmVuY2UnID0+ICdjbW9uX2Zyb20nKSk7CgkkZm9ybS0+c2V0V2lkZ2V0KCdjbW9uX2Zyb21fZW1haWwnLCAndGV4dCcsIGFycmF5KCdwcmVmZXJlbmNlJyA9PiAnY21vbl9mcm9tX2VtYWlsJykpOwoJJGZvcm0tPnNldFdpZGdldCgnY21vbl90ZW1wbGF0ZScsICdzZWxlY3QnLCBhcnJheSgncHJlZmVyZW5jZScgPT4gJ2Ntb25fdGVtcGxhdGUnLCAndmFsdWVzJyA9PiAkdGVtcGxhdGVzX2xpc3QpKTsKCSRmb3JtLT5zZXRXaWRnZXQoJ2Ntb25fdGVtcGxhdGVfcGxhaW4nLCAnc2VsZWN0JywgYXJyYXkoJ3ByZWZlcmVuY2UnID0+ICdjbW9uX3RlbXBsYXRlX3BsYWluJywgJ3ZhbHVlcycgPT4gJHRlbXBsYXRlc19saXN0KSk7CgkkZm9ybS0+c2V0V2lkZ2V0KCdjbW9uX2RlZmF1bHRfcGFnZScsICdwYWdlcycsIGFycmF5KCdkZWZhdWx0X3ZhbHVlJyA9PiAgY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0RGVmYXVsdFBhZ2VJRCgpLCAncHJlZmVyZW5jZScgPT4gJ2Ntb25fZGVmYXVsdF9wYWdlJykpOwp9CgppZiAoTUNGVG9vbHM6OklzTW9kdWxlQWN0aXZlKCdUd2l0dGVyJykpCnsJCgkkZm9ybS0+c2V0V2lkZ2V0KCd1c2VfdHdpdHRlcicsICdjaGVja2JveCcsIGFycmF5KCdwcmVmZXJlbmNlJyA9PiAndXNlX3R3aXR0ZXInKSk7CgkkZm9ybS0+c2V0V2lkZ2V0KCd0d2l0dGVyX3RlbXBsYXRlJywgJ3RleHRhcmVhJywgYXJyYXkoJ3ByZWZlcmVuY2UnID0+ICd0d2l0dGVyX3RlbXBsYXRlJykpOwp9CgppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pKQp7CgkkZm9ybS0+cHJvY2VzcygpOwoJcmV0dXJuICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsIGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnb3B0aW9ucycpKTsKfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdmb3JtJywgJGZvcm0pOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VwZGF0ZV9vYmplY3RzJywgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAndXBkYXRlT2JqZWN0cycsICRyZXR1cm5pZCwgJHRoaXMtPmxhbmcoJ3VwZGF0ZV9vYmplY3RzJyksIGFycmF5KCdjbGFzcycgPT4gJ2FjdGlvbmJ1dHRvbicpKSk7CgokZXhwb3J0ID0gIG5ldyBDTVNGb3JtKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JywgJGlkLCdleHBvcnQnLCRyZXR1cm5pZCk7CiRleHBvcnQtPnNldEJ1dHRvbnMoYXJyYXkoJ3N1Ym1pdCcpKTsKJGV4cG9ydC0+c2V0TGFiZWwoJ3N1Ym1pdCcsICR0aGlzLT5sYW5nKCdleHBvcnQnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignZXhwb3J0JywgJGV4cG9ydC0+cmVuZGVyKCkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdvcHRpb25zX3RvcCcsICR0aGlzLT5nZXRCdXR0b25zRm9yKCdvcHRpb25zX3RvcCcpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdvcHRpb25zX2JvdHRvbScsICR0aGlzLT5nZXRCdXR0b25zRm9yKCdvcHRpb25zX2JvdHRvbScpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZGVmYXVsdGFkbWluLm9wdGlvbnMudHBsJyk7Cgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/function.defaultadmin.templates.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKe3sqCi8vIGlmICghJHRoaXMtPkNoZWNrQWNjZXNzKCdBZG1pbiB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JykpIHsKLy8gCXJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKLy8gfQovLyAKLy8gCi8vIAovLyBpZiAoIWNtc21zKCkpIGV4aXQ7Ci8vIAovLyAkdGVtcGxhdGVzID0gJHRoaXMtPkxpc3RUZW1wbGF0ZXMoKTsKLy8gJHJvd3MgPSBhcnJheSgpOwovLyBmb3JlYWNoKCR0ZW1wbGF0ZXMgYXMgJHRlbXBsYXRlKSB7Ci8vIAkkcm93c1tdID0gYXJyYXkoCi8vIAkJJ3RpdGxlbGluaycgPT4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLCAkdGVtcGxhdGUsIGFycmF5KCd0ZW1wbGF0ZScgPT4gJHRlbXBsYXRlKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJpdGVtbGluayInKSwKLy8gCQknZGVsZXRlbGluaycgPT4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRldGVtcGxhdGUnLCAkcmV0dXJuaWQsIGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgJHRoaXMtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCd0ZW1wbGF0ZScgPT4gJHRlbXBsYXRlKSwgJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZT8nKSwKLy8gCQknZWRpdGxpbmsnID0+ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRlbXBsYXRlLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCd0ZW1wbGF0ZScgPT4gJHRlbXBsYXRlKSkKLy8gCSk7Ci8vIH0KLy8gJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdyb3dzJywgJHJvd3MpOwovLyAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZF9pdGVtX2xpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdlZGl0dGVtcGxhdGUnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhZGRfaXRlbScpKSk7Ci8vICR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkX2l0ZW1faWNvbicsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYWRkX2l0ZW0nKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKSk7Ci8vIAovLyBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2RlZmF1bHRhZG1pbi50ZW1wbGF0ZXMudHBsJyk7CgoqfX0KLy8gTkVXCgppZiAoISR0aGlzLT5DaGVja0FjY2VzcygnTW9kaWZ5IFRlbXBsYXRlcycpKSB7CglyZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7Cn0KCiRsaXN0X3RlbXBsYXRlcyA9ICR0aGlzLT5MaXN0VGVtcGxhdGVzKCk7CiR0ZW1wbGF0ZXMgPSBhcnJheSgpOwpmb3JlYWNoKCRsaXN0X3RlbXBsYXRlcyBhcyAkdGVtcGxhdGUpIHsKCSRyb3cgPSBhcnJheSgKCQkndGl0bGVsaW5rJyA9PiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0ZW1wbGF0ZV9lZGl0JywgJHJldHVybmlkLCAkdGVtcGxhdGUsIGFycmF5KCd0ZW1wbGF0ZScgPT4gJHRlbXBsYXRlKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJpdGVtbGluayInKSwKCQknZGVsZXRlbGluaycgPT4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAndGVtcGxhdGVfZGVsZXRlJywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgndGVtcGxhdGUnID0+ICR0ZW1wbGF0ZSksICR0aGlzLT5sYW5nKCdhcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdGVtcGxhdGUnKSksCgkJJ2VkaXRsaW5rJyA9PiAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0ZW1wbGF0ZV9lZGl0JywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCAkdGVtcGxhdGUsICcnLCAnJywgJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3RlbXBsYXRlJyA9PiAkdGVtcGxhdGUpKQoJKTsKCQoJaWYgKCR0aGlzLT5pc0RlZmF1bHRUZW1wbGF0ZSgkdGVtcGxhdGUpICE9PSBmYWxzZSkKCXsKCQkkcm93WydkZWZhdWx0J10gPSAkdGhpcy0+bGFuZygnZGVmYXVsdCB0ZW1wbGF0ZSBmb3InLCAkdGhpcy0+aXNEZWZhdWx0VGVtcGxhdGUoJHRlbXBsYXRlKSk7Cgl9CgllbHNlCgl7CgkJJHJvd1snZGVmYXVsdCddID0gJyc7Cgl9CgkKCSR0ZW1wbGF0ZXNbXSA9ICRyb3c7Cn0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZW1wbGF0ZXMnLCAkdGVtcGxhdGVzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRfdGVtcGxhdGVzX2xpbmsnLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0ZW1wbGF0ZV9lZGl0JywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkIHRlbXBsYXRlJykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRfdGVtcGxhdGVzX2ljb24nLCAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICd0ZW1wbGF0ZV9lZGl0JywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGQgdGVtcGxhdGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluLnRlbXBsYXRlcy50cGwnKTs=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/smarty/templates/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhQABAAOZ/ANSxsfb29t/f39A1Nb69vcPCw4aEhdra2vNOTuRqavqCgsN9ffz8/PZ1dunp6fj4+OIAAOkAAPL+/uHh4fNBQfr6+tbW1urx8eY1NbBdXbOys3p4efDw8M7Ozu7u7qg4OeXs7PVmZbQWFtYAAPLy8tff32VjZKOhotDQ0Ozs7PRfX5aVlcrKytSZmfRWVp6dnvj+/qYgINsSEsxAQPT09P7+/s7b2+Tk5K2rrN27u+YrK+fn5/VtbfTi4u4XF9Xi4r3Jyeg+PvH09NwAALdpaqgSEs8BAefPz+0MDO5zdNHP0OO/v/GTk/z//9UJCZYLDOvKyvEAAPA8PNkODu5DQ+Ho6OnAwMvKy3NwcYyLjOvr68fHx8/Pz+Pi4ri3uPHx8ZmXmOfv79fX18zLy5GPkPVQT6+6u/n5+dwfH9vb293c3PPz88MbHMjIyLa8vH0AAPRISO/39/lra9tSUvXZ2eBAQNTT1LCvr/f396CtrqelpsXJyWxqa5GbnO4AAP///yH5BAEAAH8ALAAAAABAAEAAAAf/gH+Cg4SFhoeIiYqLjI2Oj5CRkpOODJaXmJmam5yXNZSDHB1KpKWmSiipqigdHapcsLGyKKUdFgygfzc3eL2+v8C+drzBxb8HZ7kTHpI3NJJqeLkCKZLJkmkBuWrVNTU9GeHi4+Tl5hkL3p9pz6AH1bhHb3MJ9fb3+Pn3STEffzW4DpDIJSYFwD9HniRQwLChw4cQH87wZ+nPAQ65LGhhUAHhEx4NQoocSbLkSAUT/1SoUOMAM1B2UjA40+RIkRA8curcybPnzgYTm1Q4w0DMS0ootFR4UFOEihBQo0qdSlWqnDr+zjwoqiVXBy1n8MCAwkaF2bNo06pVW2cGjAd4/4o6yDXGw4MAY9m42Mu3r9+/f4PMkNCr6I5cWwR4IDEWTRkEkCNLnkxZchkpbmlw0HLlMKgCYgRMALEEDZzTqFOrXr0awwwQag6o2dIlV4EDEwRUyWHEiQw0OnRgkEKcgvHjyIlLwaADDZopRgaUOJBGQGLbuHXzNsK9e28nU6bIGE8+vBMn3rtLp279ACgGBNR0mbB7hP37+PPr3z9iffU2YrxHgAA3dFHFEkMkqOCCDDbo4BD+CdCGHQJOsAtpEGSo4YYcdughBBhM918HoJzhRRcXLvHhiixmGCJ7LFwBygNe3LDDDmFYEcGOPPbo449ARvBidSy0AUoAXjhwY/+OQTbp5I5DCjBGAaDQkKQDDlxghR9cdunll2CG6UeIaaghJZWUrOFFClhecAQSYsYppx9z/CCbAB0QAAoHXnighRYpXEDFnIR6GUULdprJhZ6UcKABBx54kEIcWxZaqA5iHHBnnjPeoQWkkUqQhKVzIgHAdLJNUACalNyRBgkcxMpBHCGQKiYSiFqgqXwauAfKFQQ8ICsHQsTBg62G+tCCDXboKtsBemhz5AlarPEFCSR8IYQETMBpaxQ6AGADCnZkekAXXniRiyAE4MDAGvDCS4MEUAxaaBR+JFAAK+TqqoYFK1Sz7gNgdMAADQgnLEEATPggZxRRYNACEHtc4Ur/ubKBweq6NxggAAMBhCyyWD0k4a2hUaCxgBtAFLDFGBeHdsILn6w7CAoGqPEHHgH4EjIMMNDRgMN+QIwGETiY4QUBLsNcrhonkCGtzYNsYQCFWj2g9dZA96CADgMQ8UIeOGiwdNO2WAAGGRhRXQgXGxAA0Bl01003DH8IkEUfL+hR9tkv28FCFmSs4fYhE2ywAjMcreR4RxNksULffzPNAgp3YHFCR4cfwsELGxSAiyZ/RD6532YTwAIBWYTe+SIFYJGFrwBV1IXklGtAAAEvYEGGZ68rwsEJfJAhwCCf3IC7HhpoAAYWG2wR/CNqkFE8hYIoD8YJJ2TBBxYaGD498SR2ZGGCAQWs4QAZZGxgAhY4HDV+JAKAYQIf3puwgRdfzL+uA14wQMGu4b8CGjASRDlgLhjAgRsIQAAOmJoCHVEBDzhQNLmB4BpwMUFFMMCCXUDRLkYYwh3QoGYdJAQDvrADG93ohTC80Q0imMJBBEALO8CSDnfIQx1ygIMKXKEDAJWCIhrxiEgsogNSIEH/nQFUkYqiFKdIxUhtsIB4iNUXtsjFLnrxi1zkAAmAGLwHkGANNIiXGtfIRjam8YrBO4PI5kjHOtrRjmSkGgO2xsc++vGPgEyg2zpByEJuAoXrUociF8nIRjpSHQxAZA2nFwgAOw==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/index.html.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/smarty/templates/lang/en_US.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmcgPSBhcnJheSgKJ3Bvc3RpbnN0YWxsJyA9PiAnUG9zdCBJbnN0YWxsIE1lc3NhZ2UuJywKJ3Bvc3R1bmluc3RhbGwnID0+ICcnLAoncmVhbGx5X3VuaW5zdGFsbCcgPT4gJ1JlYWxseT8gQXJlIHlvdSBzdXJlCnlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nLAondW5pbnN0YWxsZWQnID0+ICdNb2R1bGUgVW5pbnN0YWxsZWQuJywKJ2luc3RhbGxlZCcgPT4gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nLAondXBncmFkZWQnID0+ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nLAonbW9kZGVzY3JpcHRpb24nID0+ICdUaGlzIG1vZHVsZSBpcyBnZW5lcmF0ZWQgYnkgTSZDIEZhY3RvcnknLAoKJ3RhYl9pdGVtcycgPT4gJ0l0ZW1zJywKJ3RhYl90ZW1wbGF0ZXMnID0+ICdUZW1wbGF0ZXMnLAondGFiX29wdGlvbnMnID0+ICdPcHRpb25zJywKJ3RhYl9oZWxwJyA9PiAnSGVscCcsCgonZXJyb3InID0+ICdFcnJvciEnLAonYWRtaW5fdGl0bGUnID0+ICd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19IEFkbWluIFBhbmVsJywKJ2FkbWluZGVzY3JpcHRpb24nID0+ICdUaGlzIG1vZHVsZSBoZWxwcyB5b3UgdG8gbWFuYWdlIHNwZWNpZmljIGl0ZW1zJywKJ3RpdGxlVGVtcGxhdGUnID0+ICdUaXRsZScsCidjb2RlVGVtcGxhdGUnID0+ICdUZW1wbGF0ZScsCidhY2Nlc3NkZW5pZWQnID0+ICdBY2Nlc3MgRGVuaWVkLiBQbGVhc2UgY2hlY2sgeW91ciBwZXJtaXNzaW9ucy4nLAoncG9zdGluc3RhbGwnID0+ICdCZSBzdXJlIHRvIHNldCAiTWFuYWdlIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0iIHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSEnLAoKJ3N1Ym1pdCcgPT4gJ1N1Ym1pdCcsCidhcHBseScgPT4gJ0FwcGx5JywKJ2NhbmNlbCcgPT4gJ0NhbmNlbCcsCidyZXN0b3JlbGlzdCcgPT4gJ1Jlc3RvcmUgbGlzdCcsCidyZXN0b3JlZGV0YWlscycgPT4gJ1Jlc3RvcmUgZGV0YWlscycsCidwdWJsaXNoJyA9PiAnUHVibGlzaCcsCid1bnB1Ymxpc2gnID0+ICdVbnB1Ymxpc2gnLAoKCidhZGQgdGVtcGxhdGUnID0+ICdBZGQgdGVtcGxhdGUnLAonc2VsZWN0IG9uZScgPT4gJ1NlbGVjdCBvbmUnLAonZm9ybV90ZW1wbGF0ZScgPT4gJ1RlbXBsYXRlJywKJ2Zvcm1fcmVzdG9yZV90ZW1wbGF0ZV9mcm9tJyA9PiAnUmVzdG9yZSB0ZW1wbGF0ZSBmcm9tJywKJ2Zvcm1fY29kZScgPT4gJ0NvZGUnLAonZm9ybV9kZWZhdWx0X3RlbXBsYXRlX2ZvcicgPT4gJ0RlZmF1bHQgdGVtcGxhdGUgZm9yJywKJ2RlZmF1bHQgdGVtcGxhdGUgZm9yJyA9PiAnZGVmYXVsdCB0ZW1wbGF0ZSBmb3IgIiVzIiBhY3Rpb24nLAoKLy8gdXNlciBmb3JtCid5b3UgZG8gbm90IGhhdmUgdGhlIHBlcm1pc3Npb24gdG8gdXNlIHRoaXMgYWN0aW9uJyA9PiAnWW91IGRvIG5vdCBoYXZlIHRoZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGlzIGFjdGlvbicsCidmb3JtX3VzZXJfaWQnID0+ICdVc2VyIGlkJywKJ2Zvcm1fdGl0bGUnID0+ICdUaXRsZScsCidpdGVtIHBvc3RlZCcgPT4gJ0l0ZW0gc3VjY2Vzc2Z1bGx5IHBvc3RlZCcsCgonc2F2ZScgPT4gJ1NhdmUnLAonc2F2ZV9hZGQnID0+ICdTYXZlICZhbXA7IGFkZCBhIG5ldyBpdGVtJywKJ3NhdmVfY29udGludWUnID0+ICdTYXZlICYgY29udGludWUgZWRpdGluZycsCidkZWxldGUnID0+ICdEZWxldGUnLAonYWRkX2l0ZW0nID0+ICdBZGQgaXRlbScsCidhZGRfaXRlbV9mb3InID0+ICdBZGQgaXRlbSBmb3IgWyVzXScsCidlZGl0X2l0ZW0nID0+ICdFZGl0IGl0ZW0nLAondXBkYXRlX29iamVjdHMnID0+ICdVcGRhdGUgb2JqZWN0cycsCidwcmV2aWV3X3MnID0+ICdQcmV2aWV3IFslc10nLAoKJ2Zvcm1fcGFyZW50X2lkJyA9PiAnUGFyZW50JywKJ2Zvcm1fb3JkZXJfYnknID0+ICdPcmRlciBieScsCidmb3JtX29yZGVyX2J5X2RpcmVjdGlvbicgPT4gJ09yZGVyIGRpcmVjdGlvbicsCidmb3JtX2l0ZW1zX3Blcl9wYWdlJyA9PiAnSXRlbXMgcGVyIHBhZ2UnLAonZm9ybV9kYXRlX2Zvcm1hdCcgPT4gJ0RhdGUgZm9ybWF0JywKJ2Zvcm1fZGVmYXVsdF9wYWdlJyA9PiAnRGVmYXVsdCBwYWdlJywKJ2Zvcm1fc2hvd19wYXJlbnQnID0+ICdTaG93IHBhcmVudHMgZHJvcGRvd24nLAonZm9ybV9zaG93X3BhcmVudF9maXJzdF9sZXZlbCcgPT4gJ1Nob3cgcGFyZW50cyBmaXJzdCBsZXZlbCBvbmx5JywKJ2Zvcm1fc2F2ZV9hZGQnID0+ICdTaG93IFNhdmUgJmFtcDsgYWRkIGJ1dHRvbicsCidmb3JtX2luZGV4X2NvbnRlbnQnID0+ICdJbmRleCBjb250ZW50JywKJ2Zvcm1fdXNlX2Ntb24nID0+ICdVc2UgQ2FtcGFpZ24gTW9uaXRvcicsCidmb3JtX2Ntb25fZnJvbScgPT4gJ0NhbXBhaWduIE1vbml0b3IgRnJvbScsCidmb3JtX2Ntb25fZnJvbV9lbWFpbCcgPT4gJ0NhbXBhaWduIE1vbml0b3IgRnJvbSBlbWFpbCcsCidmb3JtX2Ntb25fdGVtcGxhdGUnID0+ICdDYW1wYWlnbiBNb25pdG9yIHRlbXBsYXRlJywKJ2Zvcm1fY21vbl90ZW1wbGF0ZV9wbGFpbicgPT4gJ0NhbXBhaWduIE1vbml0b3IgdGVtcGxhdGUgKHBsYWluIHRleHQgdmVyc2lvbiknLAonZm9ybV9jbW9uX2RlZmF1bHRfcGFnZScgPT4gJ0RlZmF1bHQgcGFnZSBmb3IgQ2FtcGFpZ24gTW9uaXRvciBIVE1MJywKJ2Zvcm1fdXNlX3R3aXR0ZXInID0+ICdVc2UgVHdpdHRlcicsCidmb3JtX3R3aXR0ZXJfdGVtcGxhdGUnID0+ICdUd2l0dGVyIHRlbXBsYXRlIChhdmFpbGFibGUgZmllbGRzOiB7JHRpdGxlfSwgeyR1cmx9KScsCidtb2R1bGVfb3B0aW9ucycgPT4gJ09wdGlvbnMnLAoKJ3NlbGVjdF9vbmUnID0+ICdTZWxlY3Qgb25lJywKJ2V4cG9ydCcgPT4gJ0V4cG9ydCcsCidzZXJpYWxpemVkX2RhdGFzJyA9PiAnUEhQIFNlcmlhbGl6ZWQgYXJyYXknLAonZG93bmxvYWQnID0+ICdEb3dubG9hZCcsCgoKJ2NoYW5nZWxvZycgPT4gJzx1bD4KPGxpPlZlcnNpb24gMC4wLjEgLSAyOSBTZXB0ZW1iZXIgMjAwOC4gSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjwvdWw+JywKJ2hlbHAnID0+ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+VGhpcyBtb2R1bGUgd2FzIGdlbmVyYXRlZCBieSBNJkMgRmFjdG9yeS48L3A+CjxoMj5BdmFpbGFibGUgYWN0aW9uczwvaDI+Cgo8aDM+RGVmYXVsdDwvaDM+CjxwPlRoaXMgYWN0aW9uIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGxpc3Qgb2YgYWxsIGl0ZW1zIG9mIHRoZSBtb2R1bGUuPC9wPgo8aDQ+UGFyYW1zPC9oND4KPGRsPgoJPGR0PjxlbT5vcmRlcmJ5PC9lbT48L2R0PgoJPGRkPkNvbW1hLXNlcGVyYXRlZCBsaXN0IG9mIG9yZGVyYnkgY2xhdXNlcy4gRWcuICJjb2x1bW4xLCBjb2x1bW4yIERFU0MiLjwvZGQ+Cgk8ZHQ+PGVtPmxpbWl0PC9lbT48L2R0PgoJPGRkPk51bWJlciBvZiBpdGVtcyB0byByZXR1cm4uPC9kZD4KCTxkdD48ZW0+b2Zmc2V0PC9lbT48L2R0PgoJPGRkPlN0YXJ0IGZyb20gdGhpcyBvZmZzZXQuPC9kZD4KCTxkdD48ZW0+cmFuZG9tPC9lbT48L2R0PgoJPGRkPlJhbmRvbWl6ZSB0aGUgb3JkZXIgb2YgdGhlIHJlc3VsdC48L2RkPgoJPGR0PjxlbT5jdXJyZW50cGFnZTwvZW0+IChNb2R1bGVYdGVuZGVyKTwvZHQ+Cgk8ZGQ+Qm9vbGVhbi4gRmlsdGVyIHJlc3VsdHMgb24gY3VycmVudCBwYWdlLjwvZGQ+Cgk8ZHQ+PGVtPnBhZ2VzPC9lbT4gKE1vZHVsZVh0ZW5kZXIpPC9kdD4KCTxkZD5Db21tYS1zZXBlcmF0ZWQgbGlzdCBvZiBwYWdlcyB0byBmaWx0ZXIgb24uPC9kZD4KCTxkdD48ZW0+b3B0aW9uczwvZW0+IChNb2R1bGVYdGVuZGVyKTwvZHQ+Cgk8ZGQ+Q29tbWEtc2VwZXJhdGVkIGxpc3Qgb2Ygb3B0aW9ucyB0byBmaWx0ZXIgb24uPC9kZD4KCTxkdD5kYXRlX2ZpZWxkPGR0PgoJPGRkPkFsbG93cyB5b3UgdG8gc3BlY2lmeSB0aGUgZGF0ZV9maWVsZCB0byB0YWtlIGluIGNvdW50IGZvciB0aGUgZGlnZXN0PC9kZD4KPC9kbD4KCjxwPkluIHRoZSBkZWZhdWx0IHRlbXBsYXRlLCB5b3UgY2FuIGdldCB0aGUgcGFyYW1zIGJ5IGNhbGxpbmcge3tsaXRlcmFsfX17e3svbGl0ZXJhbH19JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1fcGFyYW1zLT5wYXJhbXN9IHdoZXJlICItPnBhcmFtcyIgaXMgYW4gYXJyYXkgb2YgcGFyYW1zLjxwPgoKPGgzPkRldGFpbDwvaDM+CjxwPlRoaXMgaXMgdGhlIGRldGFpbCBhY3Rpb24gZm9yIGFuIGl0ZW0uIFRoZSBkZWZhdWx0IHRlbXBsYXRlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCB5b3UgY2FuIHJlc3RvcmUgaXQgdG8gdW5kZXJzdGFuZCBob3cgdG8gdXNlIGl0PzwvcD4KPGg0PlBhcmFtczwvaDQ+CjxwPlRPRE88L3A+Cgo8aDM+U29tZSBhY3Rpb25zIHRoYXQgeW91IGNhbiBwZWZvcm0gb24gdGhlICRpdGVtIG9iamVjdDwvaDM+CjxwPkZvciBmaWxlcyAocmVwbGFjZSBGaWVsZG5hbWUgYnkgdGhlIG5hbWUgb2YgeW91ciBmaWxlIGZpZWxkKTwvcD4KPHVsPgoJPGxpPjxzdHJvbmc+JGl0ZW0tPmdldEZpZWxkbmFtZUljb24oKTwvc3Ryb25nPjogUmV0dXJuIGFuIGljb24gcmVsYXRlZCB0byB0aGUgZmlsZSB0eXBlLjwvbGk+Cgk8bGk+PHN0cm9uZz4kaXRlbS0+Z2V0RmllbGRuYW1lU2l6ZSgkcmVhZGFibGUgPSB0cnVlKTwvc3Ryb25nPjogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSBmaWxlLCBodW1hbiByZWFkYWJsZSBieSBkZWZhdWx0LjwvbGk+Cgk8bGk+PHN0cm9uZz4kaXRlbS0+Z2V0RmllbGRuYW1lRXh0KCk8L3N0cm9uZz46IFJldHVybiB0aGUgZmlsZSB0eXBlIG9yIGV4dGVuc2lvbi48L2xpPgoJPGxpPjxzdHJvbmc+JGl0ZW0tPmdldEZpZWxkbmFtZVVybCgpPC9zdHJvbmc+OiBSZXR1cm4gdGhlIHVybC4gKHVzZWZ1bCBpbiBjYXNlIG9mIHByb3RlY3RlZCBzeXN0ZW0pLjwvbGk+Cgk8bGk+PHN0cm9uZz4kaXRlbS0+Z2V0RmllbGRuYW1lT3JpZ2luYWxQaWN0dXJlVXJsKCk8L3N0cm9uZz46IFJldHVybiB0aGUgb3JpZ2luYWwgcGljdHVyZSB1cmwuPC9saT4KPC91bD4KPHA+Rm9yIG1vZHVsZXMgKHJlcGxhY2UgRmllbGRuYW1lIGJ5IHRoZSBuYW1lIG9mIHlvdXIgbW9kdWxlIGZpZWxkKTwvcD4KPHVsPgoJPGxpPjxzdHJvbmc+JGl0ZW0tPmdldEZpZWxkbmFtZU9iamVjdCgpPC9zdHJvbmc+OiAoU2luZ2xlIHZhbHVlKSB0aGlzIGZ1bmN0aW9uIGV4aXN0cyBhbmQgZ2l2ZXMgeW91IHRoZSBpdGVtIG9iamVjdCBvZiB0aGUgcmVsYXRlZCBtb2R1bGUuPC9saT4KCTxsaT48c3Ryb25nPiRpdGVtLT5nZXRGaWVsZG5hbWVJdGVtcygpPC9zdHJvbmc+OiAoTXVsdGlwbGUgdmFsdWVzKSBTYW1lIGFzIHByZWNlZGVudCBidXQgcmV0dXJucyBhbiBhcnJheSBvZiBvYmplY3RzLjwvbGk+CjwvcD4KCjxoMz5GaWx0ZXJzPC9oMz4KPHA+WW91IGNhbiB1c2UgZmlsdGVycyB0byBmaWx0ZXIgdGhlIGxpc3RzIG9yIG1ha2UgYSBzZWFyY2ggdG9vbC48L3A+CjxwPk5hbWUgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbHRlciB5b3Ugd2FudCB0byBjcmVhdGUuIERvIG5vdCB1c2Ugc3BlY2lhbCBjaGFycyBvciBzcGFjZS4gSnVzdCBudW1iZXJzLCBsZXR0ZXJzIGFuZCBbXy1dIGNoYXJzLjwvcD4KPHA+RmllbGQgaXMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkIHlvdSB3YW50IHRvIGZpbHRlci48L3A+CjxwPlR5cGUgaXMgdGhlIHR5cGUgb2Ygc3FsIHF1ZXJ5IHlvdSB3YW50IHRvIHBlcmZvcm0uPC9wPgo8cD5FeGFtcGxlOjwvcD4KPHVsPgoJPGxpPjxzdHJvbmc+U2VhcmNoPC9zdHJvbmc+OiB7e2xpdGVyYWx9fXt7ey9saXRlcmFsfX17eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19IGFjdGlvbj0ic2VhcmNoIn08L2xpPiAKCTxsaT48c3Ryb25nPkZpbHRlcjwvc3Ryb25nPjoge3tsaXRlcmFsfX17e3svbGl0ZXJhbH19e3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSBuYW1lX29mX215X2ZpbHRlcj0idmFsdWVfZm9yX2ZpbHRlciJ9PC9saT4gCjwvdWw+CjxoMz5TZWFyY2g8L2gzPgo8cD5Zb3UgY2FuIHVzZSB0aGUgc2VhcmNoIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIHNwZWNpZmljIHNlYXJjaCBlbmdpbmUgZm9yIHlvdXIgbW9kdWxlLjwvcD4KPHA+RXhhbXBsZToge3tsaXRlcmFsfX17e3svbGl0ZXJhbH19e3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSBhY3Rpb249InNlYXJjaCJ9PC9wPgo8cD5QYXJhbXM6PC9wPgo8dWw+CiAgPGxpPjxzdHJvbmc+ZmlsdGVyX2FsbDwvc3Ryb25nPjogVGhpcyBwYXJhbSB3aWxsIGNyZWF0ZSBhIHRleHQgZmllbGQgdG8gc2VhcmNoIG9uIGFsbCB0aGUgdGV4dCBmaWVsZHMgb2YgeW91ciBtb2R1bGUuIFlvdSBjYW4gY3JlYXRlIGl0IGVtcHR5IChsaWtlIGZpbHRlcl9hbGw9IiIpIG90aGVyd2lzZSBpdCB3aWxsIGNvbWUgd2l0aCBhIGRlZmF1bHQgdmFsdWUgdGhhdCB5b3VcJ3ZlIGVudGVyZWQuPC9saT4KICA8bGk+PHN0cm9uZz5maWx0ZXJfdGl0bGU8L3N0cm9uZz46IFNhbWUgYXMgZmlsdGVyX2FsbCwgZXhjZXB0IGl0IG9ubHkgc2VhcmNoIG9uIHRpdGxlPC9saT4KICA8bGk+PHN0cm9uZz5maWx0ZXJzPC9zdHJvbmc+OiBsaXN0IG9mIGZpbHRlcnMgeW91IHdhbnQgdG8gYWRkLiBUaGV5IGhhdmUgdG8gZXhpc3QgaW4geW91ciBtb2R1bGVcJ3MgZmlsdGVycy4gVGhlIGxpc3QgaXMgc2VwYXJhdGUgYnkgcGlwZXMgKHwpIGFuZCB0aGUgb3B0aW9ucyBvZiBlYWNoIG1vZHVsZXMgYXJlIHNlcGFyYXRlZCBieSA7LiBFeGFtcGxlOiBmaWx0ZXJzPSJuYW1lPWNhdGVnb3J5O2luY2x1ZGVfY3VzdG9tOlNlbGVjdCBhIGNhdGVnb3J5fG5hbWU9dHlwZSI8L2xpPgo8L3VsPgo8aDM+dXJsX2ZvcjwvaDM+CjxwPlRoaXMgYWN0aW9uIGFsbG93cyB5b3UgdG8gZ2VuZXJhdGUgYW4gdXJsIGZvciBhIHNwZWNpZmljIGFjdGlvbiAoc3BlY2lmaWVkIHdpdGggdGhlIHBhcmFtICJtYWN0aW9uIikuIEFsbCB0aGUgZ2l2ZW4gcGFyYW1zIGFyZSB0cmFuc21pdHRlZCB0byB0aGUgYWN0aW9uLjwvcD4KPHA+WW91IGNhbiB1c2UgdGhlICJjbGVhbl9lbXB0eV92YWx1ZXMiIHBhcmFtIHRvIHJlbW92ZSBlbXB0eSB2YWx1ZXMuPC9wPgoKPGgzPmxpbmtfdG88L2gzPgo8cD5UaGlzIGFjdGlvbiBnZW5lcmF0ZSBhIGxpbmsgbGlrZSB1cmxfZm9yIGJ1dCBwcmUgZm9ybWF0dGVkLiBZb3UgY2FuIHNwZWNpZnkgdGhlIHRpdGxlIHdpdGggdGhlIHBhcmFtICJ0aXRsZSIuPC9wPgoKPGgzPmlDYWw8L2gzPgo8cD5Zb3UgY2FuIGdlbmVyYXRlIGlDYWwodkNhbCkgY29tcGF0aWJsZSB4bWwgd2l0aCB0aGlzIG1vZHVsZS4gSnVzdCBjYWxsIHRoZSBmdW5jdGlvbiB7e2xpdGVyYWx9fXt7ey9saXRlcmFsfX17eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19IGFjdGlvbj0iaWNhbCIgaWQ9Im15X2Rlc2lyZWRfaWQifSB0byBnZW5lcmF0ZSB0aGUgeG1sIG9yIHRoZSBmdW5jdGlvbiB7e2xpdGVyYWx9fXt7ey9saXRlcmFsfX17eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19IGFjdGlvbj0idXJsX2ZvciIgbWFjdGlvbj0iaWNhbCIgaWQ9Im15X2Rlc2lyZWRfaWQiIHNob3d0ZW1wbGF0ZT0iZmFsc2UifSBpZiB5b3Ugd2FudCB0aGUgZGlyZWN0IGxpbmsgdG8gdGhlIGljYWwgeG1sLjwvcD4KCjxoMz5DYWxlbmRhcjwvaDM+CjxwPlRoZSBjYWxlbmRhciBuZWVkcyB0aGUgZm9sbG93aW5nIGZpZWxkczogc3RhcnRfZGF0ZSBhbmQgZW5kX2RhdGUuIE9uY2UgdGhvc2UgaGF2ZSBiZWVuIGRlZmluZWQsIHlvdSBjYW4gYnVpbGQgdGhlIGNhbGVuZGFyIHVzaW5nIHRoZSBwYXJhbSBcJ2NhbGVuZGFyXCcuIEl0IHdpbGwgY3JlYXRlIHRoZSBmb2xsb3dpbmcgc21hcnR5IHZhcnM6ICRjYWxlbmRhciwgJGN1cnJlbnRfbW9udGgsICRuZXh0X21vbnRoLCAkcHJldmlvdXNfbW9udGguPC9wPgoKPGgzPlJTUzwvaDM+CjxwPllvdSBjYW4gZXhwb3J0IHlvdXIgZW50cmllcyB0byBSU1MgZmVlZHMuIElmIHlvdSBoYXZlIG1vZF9yZXdyaXRlIGluc3RhbGxlZCwganVzdCBjYWxsIHRoZSB1cmwgIi97eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKXxsb3dlcn19L3Jzcy94bWwiLiBZb3UgY2FuIGFsc28gY2FsbCB0aGUgYWN0aW9uICJyc3MiIGFuZCBwYXNzIHNvbWUgcGFyYW1ldGVycyBsaWtlIGZvciB0aGUgZGVmYXVsdCBhY3Rpb24uPC9wPgoKPGgzPlVzZXJzIGNvbnRlbnQ8L2gzPgo8cD5Zb3UgY2FuIGxldCB1c2VycyBzdWJtaXQgY29udGVudCB2aWEgdGhlIG1vZHVsZS4gRm9yIHRoZSBmb3JtIHlvdSBjYW4gdXNlIHRoZSBhY3Rpb24gInVzZXJfZm9ybSIuIFlvdSBjYW4gdGhlbiBtb2RpZnkgdGhlIGZvcm0gdGVtcGxhdGUgaW4gdGhlIGFkbWluLjwvcD4KPHA+VG8gbGV0IGFuIHVzZXIgcmV2aWV3IGhpcyBvd24gc3VibWlzc2lvbnMsIHlvdSBjYW4gdXNlIHRoZSBkZWZhdWx0IGFjdGlvbiBhbmQgc3BlY2lmeSB0aGUgcGFyYW0gInNob3dfdXNlcl9pdGVtcyIuIFRoaXMgd2lsbCBhbGxvdyBhIGxvZ2dlZCB1c2VyIHRvIHNob3cgaGlzIG93biBzdWJtaXNzaW9ucyBldmVuIHRoZSB1bnB1Ymxpc2hlZCBvbmVzLjwvcD4KPHA+V2l0aCB0aGlzIGxpc3QgeW91IGNhbiBhbHNvIGFsbG93IGhpbSB0byBlZGl0IGhpcyBvd24gcG9zdHMgYnkgdXNpbmcgdGhlIGFjdGlvbiB1cmxfZm9yIHdpdGggbWFjdGlvbiAidXNlcl9mb3JtIiBhbmQgc3BlY2lmeWluZyBpdGVtX2lkLiBJdCB3aWxsIG9ubHkgd29yayB3aXRoIHVzZXJcJ3MgcG9zdHMuPC9wPgo8cD5Zb3UgY2FuIGFsc28gY2hlY2sgdGhlIHBlcm1pc3Npb25zIGZvciBwdWJsaXNoaW5nL2VkaXRpbmcsIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIG1ldGhvZCAiY2hlY2tQZXJtaXNzaW9ucyIgaW4gdGhlIE0mQyBGYWN0b3J5IGN1c3RvbSBsb2dpYy4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgb3IgZmFsc2UgYW5kIHJlY2VpdmUgdGhlICRwYXJhbXMgYXMgYW4gYXJyYXkuPC9wPgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEwLCBKZWFuLUNocmlzdG9waGUgQ3V2ZWxpZXIgPGEgaHJlZj0ibWFpbHRvOmpjY0Btb3JyaXMtY2hhcG1hbi5jb20iPiZsdDtqY2NAbW9ycmlzLWNoYXBtYW4uY29tJmd0OzwvYT4gLSBNb3JyaXMgJmFtcDsgQ2hhcG1hbi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPicKKTs=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/smarty/templates/lib/class.MCFModuleBase.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCgljbGFzcyB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19QmFzZSBleHRlbmRzIENNU01vZHVsZSB7CgkJCgkJCgl9]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/lib/class.MCFModuleObject.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3QgZXh0ZW5kcyB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0QmFzZSB7Cgp7eyRtb2R1bGUtPmdldE1vZHVsZUxvZ2ljKCl8cmVwbGFjZTonPD9waHAnOicnfX0KCn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/lib/class.MCFModuleObjectBase.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwpyZXF1aXJlX29uY2UoY21zX2pvaW5fcGF0aCgkY29uZmlnWydyb290X3BhdGgnXSwgJ2xpYicsICdjbGFzc2VzJywgJ21vZHVsZV9zdXBwb3J0JywgJ21vZHRlbXBsYXRlcy5pbmMucGhwJykpOwoKY2xhc3Mge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdEJhc2UgZXh0ZW5kcyBNQ0ZNb2R1bGVPYmplY3QgewoKICBwcm90ZWN0ZWQgJGNoaWxkcmVuczsKICBwcm90ZWN0ZWQgJGxldmVsOwoKICBjb25zdCBNT0RVTEVfTkFNRSA9ICd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19JzsKICBjb25zdCBNT0RVTEVfT0JKRUNUX05BTUUgPSAne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdCc7CgogIGNvbnN0IERCX05BTUUgPSAnbW9kdWxlX3t7JHRhYmxlX25hbWV9fSc7CiAgY29uc3QgREJfSVRFTSA9ICd7eyR0YWJsZV9uYW1lfX0nOwogIGNvbnN0IFVQTE9BRFNfUkVMQVRJVkVfVVJMID0gJy91cGxvYWRzL01vZHVsZXMve3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSc7CgogIHByb3RlY3RlZCBzdGF0aWMgJGZpZWxkcyA9IGFycmF5KCd0aXRsZScsICAncGFyZW50X2lkJywgICdwYXJlbnRfaXRlbScsICAnb3JkZXJfYnknLCAncHVibGlzaGVkJywgJ3NlbmRfdXBkYXRlX2ltbWVkaWF0ZWx5Jyx7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fSAne3skZmllbGQubmFtZX19JywgIHt7L2ZvcmVhY2h9fSAgJ2Z1bGxfdGV4dF9zZWFyY2gnICApOwoKICB7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQogIAogIHt7aWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAnc2VsZWN0J319CiAgCiAgcHVibGljIHN0YXRpYyAke3skZmllbGQubmFtZX19X29wdGlvbnMgPSB7eyRmaWVsZC5zZWxlY3Rfb3B0aW9uc319OwogIAogIHt7L2lmfX0KICAKICB7ey9mb3JlYWNofX0KCgogIC8qKgogICAqIEBwYXJhbSAkbmFtZQogICAqIEBwYXJhbSAkdmFsdWUKICAgKiBAZGVwcmVjYXRlZAogICAqLwogIHB1YmxpYyBmdW5jdGlvbiBzZXQoJG5hbWUsICR2YWx1ZSkgewogICAgaWYgKCR0aGlzLT4kbmFtZSAhPSAkdmFsdWUpIHsKICAgICAgJHRoaXMtPl9fc2V0KCRuYW1lLCAkdmFsdWUpOwogICAgfQogIH0KCiAgLyoqCiAgICogQHBhcmFtICRuYW1lCiAgICogQHJldHVybiBtaXhlZAogICAqIEBkZXByZWNhdGVkCiAgICovCiAgcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSkgewogICAgLy8gREVQUkVDQVRFRAogICAgcmV0dXJuICR0aGlzLT5fX2dldCgkbmFtZSk7CiAgfQoKCgogIHB1YmxpYyBmdW5jdGlvbiBmdWxsX3RleHRfc2VhcmNoKCkgIHsKICAgICR0ZXh0ID0gJHRoaXMtPnRpdGxlOwogICAge3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KICAgICAge3tpZiAkZmllbGQudHlwZSA9PSAndGV4dGFyZWEnIHx8ICRmaWVsZC50eXBlID09ICd0ZXh0JyB8fCAkZmllbGQudHlwZSA9PSAndGV4dGFyZWFfcGxhaW4nIHx8ICRmaWVsZC50eXBlID09ICd0ZXh0YXJlYV9jb2RlJ319CiAgICAgICAgJHRleHQgLj0gJyAnIC4gJHRoaXMtPnt7JGZpZWxkLm5hbWV9fTsKICAgICAge3svaWZ9fQogICAge3svZm9yZWFjaH19CiAgICByZXR1cm4gJHRleHQ7CiAgfQoKICAvLyBPTEQgV0FZCiAgICB7eyogVE9ETzogTWFrZSBpdCBkeW5hbWljICp9fQogIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gKHN0cmluZykkdGhpcy0+dGl0bGU7CiAgICB9CgoJLy8gUGFyZW50IElEIGlzIHRoZSBwYXJlbnQgSUQgb2YgdGhlIHNhbWUgbW9kdWxlCiAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmVudElkKCkgewogICAgcmV0dXJuICR0aGlzLT5wYXJlbnRfaWQ7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGl0bGUoKSB7CiAgICByZXR1cm4gJHRoaXMtPnRpdGxlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldENyZWF0ZWRBdCgpIHsKICAgIHJldHVybiAkdGhpcy0+Y3JlYXRlZF9hdDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRDcmVhdGVkQnkoKSB7CiAgICByZXR1cm4gJHRoaXMtPmNyZWF0ZWRfYnk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBkYXRlZEF0KCkgewogICAgcmV0dXJuICR0aGlzLT51cGRhdGVkX2F0OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldFVwZGF0ZWRCeSgpIHsKICAgIHJldHVybiAkdGhpcy0+dXBkYXRlZF9ieTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRPcmRlckJ5KCkgewogICAgcmV0dXJuICR0aGlzLT5vcmRlcl9ieTsKICB9CgoJLy8gUGFyZW50IEl0ZW0gaXMgdGhlIHBhcmVudCBJRCBvZiB0aGUgcGFyZW50IG1vZHVsZSAobm90IHRoZSBzYW1lIG9uZSkKICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbSgpIHsKICAgIHJldHVybiAkdGhpcy0+cGFyZW50X2l0ZW07CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbU9iamVjdCgpIHsKICAgIHJldHVybiB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0Ojpkb1NlbGVjdE9uZShhcnJheSgnd2hlcmUnID0+IGFycmF5KCdpZCcgPT4gJHRoaXMtPnBhcmVudF9pdGVtKSkpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldFB1Ymxpc2hlZCgpIHsKICAgIHJldHVybiAkdGhpcy0+cHVibGlzaGVkOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29yZVNsdWcoKSB7CiAgICByZXR1cm4gJHRoaXMtPnRpdGxlOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldEZ1bGxUZXh0U2VhcmNoKCkgewogICAgcmV0dXJuICR0aGlzLT5mdWxsX3RleHRfc2VhcmNoKCk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyZW50SWQoJHZhbHVlKSB7CiAgICAkdGhpcy0+X19zZXQoJ3BhcmVudF9pZCcsICR2YWx1ZSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0VGl0bGUoJHZhbHVlKSB7CiAgICAkdGhpcy0+X19zZXQoJ3RpdGxlJywgJHZhbHVlKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRDcmVhdGVkQXQoJHZhbHVlKSB7CiAgICAkdGhpcy0+Y3JlYXRlZF9hdCA9ICR2YWx1ZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRDcmVhdGVkQnkoJHZhbHVlKSB7CiAgICAkdGhpcy0+Y3JlYXRlZF9ieSA9ICR2YWx1ZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRVcGRhdGVkQXQoJHZhbHVlKSB7CiAgICAkdGhpcy0+dXBkYXRlZF9hdCA9ICR2YWx1ZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRVcGRhdGVkQnkoJHZhbHVlKSB7CiAgICAkdGhpcy0+dXBkYXRlZF9ieSA9ICR2YWx1ZTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRPcmRlckJ5KCR2YWx1ZSkgewogICAgJHRoaXMtPl9fc2V0KCdvcmRlcl9ieScsICR2YWx1ZSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2V0UGFyZW50SXRlbSgkdmFsdWUpIHsKICAgICR0aGlzLT5fX3NldCgncGFyZW50X2l0ZW0nLCAkdmFsdWUpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldFB1Ymxpc2hlZCgkdmFsdWUpIHsKICAgICR0aGlzLT5fX3NldCgncHVibGlzaGVkJywgJHZhbHVlKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRGdWxsVGV4dFNlYXJjaCgkdmFsdWUpIHsKICAgICR0aGlzLT5fX3NldCgnZnVsbF90ZXh0X3NlYXJjaCcsICR2YWx1ZSk7CiAgfQoKICB7e2lmIGlzc2V0KCRpc191c2VyX21vZHVsZSl9fQogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXNlckdldEVkaXRMaW5rKCR1c2VyX2lkLCRpZCkgewogICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICRjLT5hZGQoJ3VzZXJfaWQnLCAkdXNlcl9pZCk7CiAgICAkdXNlciA9IHNlbGY6OmRvU2VsZWN0T25lKCRjKTsKICAgIGlmICgkdXNlcikKICAgIHsKICAgICAgcmV0dXJuIGNtc191dGlsczo6Z2V0X21vZHVsZShzZWxmOjpNT0RVTEVfTkFNRSktPkNyZWF0ZUxpbmsoJGlkLCdlZGl0JywnJywnJyxhcnJheSgnaXRlbV9pZCcgPT4gJHVzZXItPmdldElkKCkpLCcnLHRydWUsZmFsc2UsJycsZmFsc2UpOwogICAgfQogICAgZWxzZQogICAgewogICAgICByZXR1cm4gY21zX3V0aWxzOjpnZXRfbW9kdWxlKHNlbGY6Ok1PRFVMRV9OQU1FKS0+Q3JlYXRlTGluaygkaWQsJ2VkaXQnLCcnLCcnLGFycmF5KCd1c2VyX2lkJyA9PiAkdXNlcl9pZCksJycsdHJ1ZSxmYWxzZSwnJyxmYWxzZSk7CiAgICB9CiAgfQogIHt7L2lmfX0KCgogIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CgoKICAvKioKICAgICogQHBhcmFtIGJvb2wgJHBhcnNlCiAgICAqLwogIHB1YmxpYyBmdW5jdGlvbiBnZXR7eyRmaWVsZC5jYW1lbGNhc2V9fSgkcGFyc2UgPSB7e2lmICRmaWVsZC50eXBlID09ICd0ZXh0YXJlYSd9fXRydWV7e2Vsc2V9fWZhbHNle3svaWZ9fSkgewogICAgaWYgKCRwYXJzZSkgewogICAgICByZXR1cm4gY21zX21vZHVsZV9Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YShuZXcgc3RkQ2xhc3MoKSwgJHRoaXMtPnt7JGZpZWxkLm5hbWV9fSk7CiAgICB9CiAgICByZXR1cm4gJHRoaXMtPnt7JGZpZWxkLm5hbWV9fTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXR7eyRmaWVsZC5jYW1lbGNhc2V9fSgkdmFsdWUpIHsKICAgIHt7aWYgJGZpZWxkLnR5cGUgPT0gJ2RhdGUnfX0KICAgIGlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCd5ZWFyJykpIHsKICAgICAgICAkdmFsdWUgPSAkdmFsdWVbJ3llYXInXSAuICctJyAuICR2YWx1ZVsnbW9udGgnXSAuICctJyAuICR2YWx1ZVsnZGF5J107CiAgICAgIH0gZWxzZSAgewogICAgICAgICR2YWx1ZSA9ICR2YWx1ZVsnMCddIC4gJy0nIC4gJHZhbHVlWycxJ10gLiAnLScgLiAkdmFsdWVbJzInXTsKICAgICAgfQogICAgfQogICAgJHZhbHVlID0gc3RyX3JlcGxhY2UoJ3wnLCctJyxzdHJfcmVwbGFjZSgnLycsJy0nLCR2YWx1ZSkpOwogICAge3svaWZ9fQogICAgJHRoaXMtPl9fc2V0KCd7eyRmaWVsZC5uYW1lfX0nLCAkdmFsdWUpOwogIH0KCiAge3tpZiAkZmllbGQuZm9ybV90eXBlID09ICdtb2R1bGUnfX0KICAgIHt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm11bHRpcGxlKX19CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1JdGVtcygpICB7CiAgICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAgICRjLT5hZGQoJ2lkJywgZXhwbG9kZSgnfHx8JywgJHRoaXMtPnt7JGZpZWxkLm5hbWV9fSksIE1DRkNyaXRlcmlhOjpJTik7CiAgICAgIHJldHVybiB7eyRmaWVsZC5mb3B0aW9ucy5tb2R1bGVfbmFtZX19T2JqZWN0Ojpkb1NlbGVjdCgkYyk7CiAgICB9CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1WYWx1ZXMoJHNlcGFyYXRvciA9IG51bGwpIHsKICAgICAgaWYoIWlzX251bGwoJHNlcGFyYXRvcikpICB7CiAgICAgICAgcmV0dXJuIGltcGxvZGUoJHNlcGFyYXRvciwgJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19SXRlbXMoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fUl0ZW1zKCk7CiAgICAgIH0KICAgIH0KICAgIHt7ZWxzZX19CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1PYmplY3QoKSB7CiAgICAgIHJldHVybiB7eyRmaWVsZC5mb3B0aW9ucy5tb2R1bGVfbmFtZX19T2JqZWN0OjpnZXRCeUlkKCR0aGlzLT57eyRmaWVsZC5uYW1lfX0pOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWUoKSAgewogICAgICByZXR1cm4gJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19T2JqZWN0KCk7CiAgICB9CiAgICB7ey9pZn19CiAge3svaWZ9fQoKICB7e2lmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ3BhZ2UnfX0KICAgIHt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm11bHRpcGxlKX19CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1WYWx1ZXMoJHNlcGFyYXRvciA9IG51bGwpIHsKICAgICAgJGl0ZW1zID0gZXhwbG9kZSgnfHx8JywgJHRoaXMtPnt7JGZpZWxkLm5hbWV9fSk7CiAgICAgIGlmKCFpc19udWxsKCRzZXBhcmF0b3IpKSAgewogICAgICAgIHJldHVybiBpbXBsb2RlKCRzZXBhcmF0b3IsICRpdGVtcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICRpdGVtczsKICAgICAgfQogICAgfQogICAge3tlbHNlfX0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVZhbHVlKCkgIHsKICAgICAgcmV0dXJuICR0aGlzLT57eyRmaWVsZC5uYW1lfX07CiAgICB9CiAgICB7ey9pZn19CiAge3svaWZ9fQoKICB7e2lmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ3NlbGVjdCd9fQogICAge3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVZhbHVlcygkc2VwYXJhdG9yID0gbnVsbCkgewogICAgICAkdmFsdWVzID0gZXhwbG9kZSgnfHx8JywgJHRoaXMtPnt7JGZpZWxkLm5hbWV9fSk7CiAgICAgICRsYWJlbHMgPSBzZWxmOjoke3skZmllbGQubmFtZX19X29wdGlvbnM7CiAgICAgICRpdGVtcyA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkdmFsdWUpCiAgICAgIHsKICAgICAgICBpZihpc3NldCgkbGFiZWxzWyR2YWx1ZV0pKSAgJGl0ZW1zWyR2YWx1ZV0gPSAkbGFiZWxzWyR2YWx1ZV07CiAgICAgIH0KICAgICAgaWYoIWlzX251bGwoJHNlcGFyYXRvcikpICB7CiAgICAgICAgcmV0dXJuIGltcGxvZGUoJHNlcGFyYXRvciwgJGl0ZW1zKTsKICAgICAgfQogICAgICByZXR1cm4gJGl0ZW1zOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWUoJGNvbmNhbmF0b3IgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBpbXBsb2RlKCRjb25jYW5hdG9yLCAkdGhpcy0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX1WYWx1ZXMoKSk7CiAgICB9CiAgICB7e2Vsc2V9fQogICAgcHVibGljIGZ1bmN0aW9uIGdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWUoKSAgewogICAgICAkdmFsdWVzID0gIHNlbGY6OiR7eyRmaWVsZC5uYW1lfX1fb3B0aW9uczsKICAgICAgaWYoaXNzZXQoJHZhbHVlc1skdGhpcy0+e3skZmllbGQubmFtZX19XSkpICByZXR1cm4gJHZhbHVlc1skdGhpcy0+e3skZmllbGQubmFtZX19XTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB7ey9pZn19CiAge3svaWZ9fQoKICB7e2lmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ2dyb3VwJ319CiAgICB7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5tdWx0aXBsZSl9fQogICAgcHVibGljIGZ1bmN0aW9uIGdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWVzKCkgewogICAgICAkdmFsdWVzID0gZXhwbG9kZSgnfHx8JywgJHRoaXMtPnt7JGZpZWxkLm5hbWV9fSk7CiAgICAgICRpdGVtcyA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkdmFsdWUpCiAgICAgIHsKICAgICAgICAkaXRlbXNbJHZhbHVlXSA9IChzdHJpbmcpQ01TR3JvdXA6OnJldHJpZXZlQnlQaygkdmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiAkaXRlbXM7CiAgICB9CiAgICB7e2Vsc2V9fQogICAgcHVibGljIGZ1bmN0aW9uIGdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWUoKSAgewogICAgICByZXR1cm4gKHN0cmluZylDTVNHcm91cDo6cmV0cmlldmVCeVBrKCR0aGlzLT57eyRmaWVsZC5uYW1lfX0pOwogICAgfQogICAge3svaWZ9fQogIHt7L2lmfX0KCiAge3tpZiAkZmllbGQuZm9ybV90eXBlID09ICd1c2VyJ319CiAgICB7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5tdWx0aXBsZSl9fQogICAgcHVibGljIGZ1bmN0aW9uIGdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWVzKCkgewogICAgICAkdmFsdWVzID0gZXhwbG9kZSgnfHx8JywgJHRoaXMtPnt7JGZpZWxkLm5hbWV9fSk7CiAgICAgICRpdGVtcyA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkdmFsdWUpCiAgICAgIHsKICAgICAgICAkaXRlbXNbJHZhbHVlXSA9IChzdHJpbmcpQ01TVXNlcjo6Z2V0VXNlck5hbWVCeUlkKCR2YWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuICRpdGVtczsKICAgIH0KICAgIHt7ZWxzZX19CiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1WYWx1ZSgpICB7CiAgICAgIHJldHVybiAoc3RyaW5nKUNNU1VzZXI6OmdldFVzZXJOYW1lQnlJZCgkdGhpcy0+e3skZmllbGQubmFtZX19KTsKICAgIH0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV0cmlldmVMaW5rRm9ye3skZmllbGQuY2FtZWxjYXNlfX0oJHVzZXJfaWQsICRpZCkgewogICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgICAkYy0+YWRkKCd7eyRmaWVsZC5uYW1lfX0nLCAkdXNlcl9pZCk7CiAgICAgICR1c2VyID0gc2VsZjo6ZG9TZWxlY3RPbmUoJGMpOwogICAgICBpZiAoJHVzZXIpICB7CiAgICAgICAgcmV0dXJuIGNtc191dGlsczo6Z2V0X21vZHVsZShzZWxmOjpNT0RVTEVfTkFNRSktPkNyZWF0ZUxpbmsoJGlkLCdlZGl0JywnJywnJyxhcnJheSgnaXRlbV9pZCcgPT4gJHVzZXItPmdldElkKCkpLCcnLHRydWUsZmFsc2UsJycsZmFsc2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoc2VsZjo6TU9EVUxFX05BTUUpLT5DcmVhdGVMaW5rKCRpZCwnZWRpdCcsJycsJycsYXJyYXkoJ3t7JGZpZWxkLm5hbWV9fScgPT4gJHVzZXJfaWQpLCcnLHRydWUsZmFsc2UsJycsZmFsc2UpOwogICAgICB9CiAgICB9CiAgICB7ey9pZn19CiAge3svaWZ9fQoKICB7e2lmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ2ZpbGUnfX0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVNpemUoJHJlYWRhYmxlID0gdHJ1ZSkgewogICAgICAkZmlsZSA9IHNlbGY6OmdldEZpbGVzUGF0aCgpIC5ESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHRoaXMtPnt7JGZpZWxkLm5hbWV9fTsKICAgICAgcmV0dXJuIE1DRlRvb2xzOjpnZXRGaWxlU2l6ZSgkZmlsZSwgJHJlYWRhYmxlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1JY29uKCRpY29uX3R5cGUgPSAnc21hbGwnKSB7CiAgICAgICRmaWxlID0gc2VsZjo6Z2V0RmlsZXNQYXRoKCkgLkRJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGhpcy0+e3skZmllbGQubmFtZX19OwogICAgICByZXR1cm4gTUNGVG9vbHM6OmdldEZpbGVJY29uKCRmaWxlLCAkaWNvbl90eXBlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1FeHQoKSAgewogICAgICByZXR1cm4gZW5kKGV4cGxvZGUoJy4nLCR0aGlzLT57eyRmaWVsZC5uYW1lfX0pKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV0cmlldmV7eyRmaWVsZC5jYW1lbGNhc2V9fUZpbGVuYW1lKCkgIHsKICAgICAgcmV0dXJuIGVuZChleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJHRoaXMtPnt7JGZpZWxkLm5hbWV9fSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVVybCgkaWQgPSBudWxsKSB7CiAgICAgIGlmKCR0aGlzLT5nZXRJZCgpID09ICcnKQogICAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgCiAgICAgIGlmIChpc19udWxsKCRpZCkpCiAgICAgIHsKICAgICAgICAkaWQgPSBzZWxmOjpyZXRyaWV2ZUNvbnRleHRJZCgpOwogICAgICB9CiAgICAgICRwcmV0dHl1cmwgPSAne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fS9kb3dubG9hZC8nLiR0aGlzLT5nZXRJZCgpLicve3skZmllbGQubmFtZX19Lycuc2VsZjo6cmV0cmlldmVGaWxlbmFtZSgkdGhpcy0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX0oKSk7CiAgICAgIHJldHVybiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoc2VsZjo6TU9EVUxFX05BTUUpLT5DcmVhdGVMaW5rKCRpZCwnZG93bmxvYWQnLCcnLCcnLGFycmF5KCdpdGVtX2lkJyA9PiAkdGhpcy0+Z2V0SWQoKSwgJ2ZpZWxkJyA9PiAne3skZmllbGQubmFtZX19JyksJycsdHJ1ZSxmYWxzZSwnJyxmYWxzZSwkcHJldHR5dXJsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1DbGVhblVybCgpIHsKICAgICAge3tpZiAkZmlsZXNfcGF0aCAhPSAnJ319CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVVybCgpOwogICAgICB7e2Vsc2V9fQogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZShESVJFQ1RPUllfU0VQQVJBVE9SLCAnLycsICR0aGlzLT57eyRmaWVsZC5uYW1lfX0pOwogICAgICB7ey9pZn19CiAgICB9CgogICAge3tpZiAoJGZpZWxkLnR5cGUgPT0gJ2ltYWdlJykgJiYgJGZpZWxkLmltYWdlX3dpZHRoICYmICRmaWVsZC5pbWFnZV9oZWlnaHR9fQogICAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0e3skZmllbGQuY2FtZWxjYXNlfX1PcmlnaW5hbFBpY3R1cmUoKSAgewogICAgICAgIHJldHVybiBzdHJfcmVwbGFjZSgne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nLCAnJywgJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCkpOwogICAgICB9ICAKICAgICAgcHVibGljIGZ1bmN0aW9uIGdldHt7JGZpZWxkLmNhbWVsY2FzZX19T3JpZ2luYWxQaWN0dXJlVXJsKCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICAgIC8vIFRPRE86IFJldHVybiBzb21ldGhpbmcKICAgICAgICAvL3JldHVybiBzdHJfcmVwbGFjZSgne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nLCAnJywgJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCkpOwogICAgICB9CiAgICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVSZXNpemVkSW1hZ2VGb3J7eyRmaWVsZC5jYW1lbGNhc2V9fSgkZmlsZW5hbWUpIHsKICAgICAgICAkZGVzdGluYXRpb24gPSBzZWxmOjpnZXRGaWxlc0Z1bGxQYXRoKCkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGZpbGVuYW1lOwogICAgICAgIGxpc3QoJGltYWdlX3dpZHRoLCAkaW1hZ2VfaGVpZ2h0LCAkaW1hZ2VfdHlwZSkgPSBnZXRpbWFnZXNpemUoJGRlc3RpbmF0aW9uKTsKICAgICAgICBzd2l0Y2ggKCRpbWFnZV90eXBlKSB7CiAgICAgICAgICBjYXNlIElNQUdFVFlQRV9HSUY6CiAgICAgICAgICAgICRpbWcgPSBpbWFnZWNyZWF0ZWZyb21naWYoJGRlc3RpbmF0aW9uKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIElNQUdFVFlQRV9KUEVHOgogICAgICAgICAgICAkaW1nID0gaW1hZ2VjcmVhdGVmcm9tanBlZygkZGVzdGluYXRpb24pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX1BORzoKICAgICAgICAgICAgJGltZyA9IGltYWdlY3JlYXRlZnJvbXBuZygkZGVzdGluYXRpb24pOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgJGZhY3RvciA9IG1heCgkaW1hZ2Vfd2lkdGggLyB7eyRmaWVsZC5pbWFnZV93aWR0aH19LCAkaW1hZ2VfaGVpZ2h0IC8ge3skZmllbGQuaW1hZ2VfaGVpZ2h0fX0pOwogICAgICAgICRuZXdfd2lkdGggPSBtaW4ocm91bmQoJGltYWdlX3dpZHRoIC8gJGZhY3RvciksICRpbWFnZV93aWR0aCk7CiAgICAgICAgJG5ld19oZWlnaHQgPSBtaW4ocm91bmQoJGltYWdlX2hlaWdodCAvICRmYWN0b3IpLCAkaW1hZ2VfaGVpZ2h0KTsKICAgICAgICAkbmV3X2ltZyA9IGltYWdlY3JlYXRldHJ1ZWNvbG9yKCRuZXdfd2lkdGgsICRuZXdfaGVpZ2h0KTsKICAgICAgICBpbWFnZWNvcHlyZXNhbXBsZWQoJG5ld19pbWcsICRpbWcsIDAsIDAsIDAsIDAsICRuZXdfd2lkdGgsICRuZXdfaGVpZ2h0LCAkaW1hZ2Vfd2lkdGgsICRpbWFnZV9oZWlnaHQpOwogICAgICAgIHN3aXRjaCAoJGltYWdlX3R5cGUpIHsKICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX0dJRjoKICAgICAgICAgICAgaW1hZ2VnaWYoJG5ld19pbWcsIHNlbGY6OmdldEZpbGVzRnVsbFBhdGgoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nIC4gJGZpbGVuYW1lKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIElNQUdFVFlQRV9KUEVHOgogICAgICAgICAgICBpbWFnZWpwZWcoJG5ld19pbWcsIHNlbGY6OmdldEZpbGVzRnVsbFBhdGgoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nIC4gJGZpbGVuYW1lKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIElNQUdFVFlQRV9QTkc6CiAgICAgICAgICAgIGltYWdlcG5nKCRuZXdfaW1nLCBzZWxmOjpnZXRGaWxlc0Z1bGxQYXRoKCkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJ3t7JGZpZWxkLmltYWdlX3dpZHRofX1fe3skZmllbGQuaW1hZ2VfaGVpZ2h0fX1fJyAuICRmaWxlbmFtZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2VsZjo6VVBMT0FEU19SRUxBVElWRV9VUkwgLiAnLycgLiAne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nIC4gJGZpbGVuYW1lOwogICAgICB9CiAgICB7ey9pZn19CgogICAgcHVibGljIGZ1bmN0aW9uIHVwbG9hZHt7JGZpZWxkLmNhbWVsY2FzZX19KCRpZCkgewogICAgICBpZiAoaXNzZXQoJF9GSUxFU1skaWQuJ3t7JGZpZWxkLm5hbWV9fSddKSAmJiAoJF9GSUxFU1skaWQuJ3t7JGZpZWxkLm5hbWV9fSddWydzaXplJ10gPiAwKSkgewogICAgICAgICRmaWxlbmFtZSA9IHNlbGY6OmNoZWNrRmlsZW5hbWUoJF9GSUxFU1skaWQuJ3t7JGZpZWxkLm5hbWV9fSddKTsKCiAgICAgICAgaWYgKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyRpZC4ne3skZmllbGQubmFtZX19J11bJ3RtcF9uYW1lJ10sIHNlbGY6OmdldEZpbGVzRnVsbFBhdGgoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmlsZW5hbWUpKSB7CiAgICAgICAgICAkZmlsZSA9IHNlbGY6OlVQTE9BRFNfUkVMQVRJVkVfVVJMIC4gJy8nIC4gJGZpbGVuYW1lOwogICAgICAgICAge3tpZiAoJGZpZWxkLnR5cGUgPT0gJ2ltYWdlJykgJiYgJGZpZWxkLmltYWdlX3dpZHRoICYmICRmaWVsZC5pbWFnZV9oZWlnaHR9fQogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5jcmVhdGVSZXNpemVkSW1hZ2VGb3J7eyRmaWVsZC5jYW1lbGNhc2V9fSgkZmlsZW5hbWUpOwogICAgICAgICAge3svaWZ9fQogICAgICAgIH0KCiAgICAgICAgLy8gJHRoaXMtPmRlbGV0ZXt7JGZpZWxkLmNhbWVsY2FzZX19KCk7CiAgICAgICAgJHRoaXMtPnNldHt7JGZpZWxkLmNhbWVsY2FzZX19KCRmaWxlKTsKICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkb3dubG9hZHt7JGZpZWxkLmNhbWVsY2FzZX19KCkgIHsKICAgICAgJGZpbGUgPSBzZWxmOjpnZXRGaWxlc1BhdGgoKSAuIHN0cl9yZXBsYWNlKCcvJywgRElSRUNUT1JZX1NFUEFSQVRPUiwgJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCkpOwogICAgICBpZihpc19maWxlKCRmaWxlKSkgIHsKICAgICAgICAvLyRwYXRoaW5mbyA9IHBhdGhpbmZvKCRmaWxlKTsKICAgICAgICBoZWFkZXIoIkNvbnRlbnQtTGVuZ3RoOiAiLmZpbGVzaXplKCRmaWxlKSk7CiAgICAgICAgaGVhZGVyKCdDb250ZW50LXR5cGU6ICcgLiBzZWxmOjpnZXRNaW1lVHlwZSgkZmlsZSkpOwogICAgICAgIGhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lOyBmaWxlbmFtZT0iJyAuIHNlbGY6OnJldHJpZXZlRmlsZW5hbWUoJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCkpIC4gJyInKTsKICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBoZWFkZXIoIkhUVFAvMS4wIDQwNCBOb3QgRm91bmQiKTsKICAgICAgfQogICAgICBleGl0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZWxldGV7eyRmaWVsZC5jYW1lbGNhc2V9fSgpICB7CiAgICAgIGlmKCR0aGlzLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fSgpICE9ICcnKSAgewogICAgICAgIGRlYnVnX2Rpc3BsYXkoJ0RlbGV0aW5nIGZpbGUge3skZmllbGQuY2FtZWxjYXNlfX0gLSAnLnNlbGY6OmdldEZpbGVzUGF0aCgpIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICR0aGlzLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fSgpKTsKICAgICAgICBpZiAoaXNfZmlsZShzZWxmOjpnZXRGaWxlc1BhdGgoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGhpcy0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX0oKSkpIHsKICAgICAgICAgICRyZXN1bHQgPSB1bmxpbmsoc2VsZjo6Z2V0RmlsZXNQYXRoKCkgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCkpOwogICAgICAgICAgZGVidWdfZGlzcGxheSgnRGVsZXRlICcgLiBzZWxmOjpnZXRGaWxlc1BhdGgoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkdGhpcy0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX0oKSAuICcgUmVzdWx0OiAnIC4gJHJlc3VsdCk7CiAgICAgICAgfSAgCiAgICAgICAge3tpZiAoJGZpZWxkLnR5cGUgPT0gJ2ltYWdlJykgJiYgJGZpZWxkLmltYWdlX3dpZHRoICYmICRmaWVsZC5pbWFnZV9oZWlnaHR9fQogICAgICAgICAgaWYgKGlzX2ZpbGUoc2VsZjo6Z2V0RmlsZXNQYXRoKCkgIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICAkdGhpcy0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX1PcmlnaW5hbFBpY3R1cmUoKSkpICB7CiAgICAgICAgICAgICRyZXN1bHQgPSB1bmxpbmsoc2VsZjo6Z2V0RmlsZXNQYXRoKCkgIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICAkdGhpcy0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX1PcmlnaW5hbFBpY3R1cmUoKSk7IC8vIERlbGV0aW5nIHRoZSBvcmlnaW5hbCBwaWN0dXJlIGFzIHdlbGwKICAgICAgICAgICAgZGVidWdfZGlzcGxheSgnRGVsZXRlICcgLiBzZWxmOjpnZXRGaWxlc1BhdGgoKSAgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gICR0aGlzLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fU9yaWdpbmFsUGljdHVyZSgpIC4gJyBSZXN1bHQ6ICcgLiAkcmVzdWx0KTsKICAgICAgICAgIH0gIAogICAgICAgIHt7L2lmfX0KICAgICAgICAkdGhpcy0+c2V0e3skZmllbGQuY2FtZWxjYXNlfX0oJycpOwogICAgICB9CiAgICB9CiAge3svaWZ9fQoKICB7ey9mb3JlYWNofX0KCiAgcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRGaWxlc1BhdGgoKSAgewogICAge3tpZiAkZmlsZXNfcGF0aCAhPSAnJ319CiAgICAkcGF0aCA9ICd7eyRmaWxlc19wYXRofX0nOwogICAge3tlbHNlfX0KICAgICRjb25maWcgPSBjbXNfdXRpbHM6OmdldF9jb25maWcoKTsKICAgICRwYXRoID0gJGNvbmZpZ1sncm9vdF9wYXRoJ107CiAgICB7ey9pZn19CiAgICBpZiAoIWlzX2RpcigkcGF0aCAuIHNlbGY6OmdldFVwbG9hZHNSZWxhdGl2ZVBhdGgoKSkpCiAgICB7CiAgICAgIG1rZGlyKCRwYXRoIC4gc2VsZjo6Z2V0VXBsb2Fkc1JlbGF0aXZlUGF0aCgpLDA3NzcsdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gJHBhdGg7CiAgfQogIAogIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZXNGdWxsUGF0aCgpICB7CiAgICByZXR1cm4gc2VsZjo6Z2V0RmlsZXNQYXRoKCkgLiBzZWxmOjpnZXRVcGxvYWRzUmVsYXRpdmVQYXRoKCk7CiAgfQogIAogIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0VXBsb2Fkc1JlbGF0aXZlUGF0aCgpICB7CiAgICByZXR1cm4gc3RyX3JlcGxhY2UoJy8nLCBESVJFQ1RPUllfU0VQQVJBVE9SLCBzZWxmOjpVUExPQURTX1JFTEFUSVZFX1VSTCk7CiAgfQogIAogIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gcmV0cmlldmVGaWxlbmFtZSgkZmlsZW5hbWUpICB7CiAgICAvLyBUbyB0cnk6IHJldHVybiBlbmQoZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkZmlsZW5hbWUpKTsKICAgICRjbGVhbiA9IHN0cl9yZXBsYWNlKHNlbGY6OlVQTE9BRFNfUkVMQVRJVkVfVVJMLCAnJywgJGZpbGVuYW1lKTsKICAgICRjbGVhbiA9IHN0cl9yZXBsYWNlKCcvJywgJycsICRjbGVhbik7CiAgICAkY2xlYW4gPSBzdHJfcmVwbGFjZSgnXFwnLCAnJywgJGNsZWFuKTsKICAgIHJldHVybiAkY2xlYW47CiAgfQoKICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tGaWxlbmFtZSgkZmlsZSkgIHsKICAgICRwYXRoaW5mbyA9IHBhdGhpbmZvKCRmaWxlWyduYW1lJ10pOwogICAgJGZpbGVuYW1lID0gc2VsZjo6Y2xlYW5GaWxlbmFtZSgkcGF0aGluZm9bJ2ZpbGVuYW1lJ10pOwogICAgJGZpbmFsX2ZpbGVuYW1lID0gc2VsZjo6Y2xlYW5GaWxlbmFtZSgkcGF0aGluZm9bJ2ZpbGVuYW1lJ10pOwogICAgJGkgPSAyOwogICAgd2hpbGUgKGZpbGVfZXhpc3RzKHNlbGY6OmdldEZpbGVzRnVsbFBhdGgoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkZmluYWxfZmlsZW5hbWUgLiAnLicgLiAkcGF0aGluZm9bJ2V4dGVuc2lvbiddKSkgewogICAgICAkZmluYWxfZmlsZW5hbWUgPSAkZmlsZW5hbWUuJy0nLiRpOwogICAgICArKyRpOwogICAgfQogICAgcmV0dXJuICRmaW5hbF9maWxlbmFtZSAuICcuJyAuICRwYXRoaW5mb1snZXh0ZW5zaW9uJ107CiAgfQoKICAvL2Z1bmN0aW9uCgogICAgcHVibGljIGZ1bmN0aW9uIGRvd25sb2FkTUNGRmlsZSgkZmllbGQpIHsKICAgICAgc3dpdGNoKCRmaWVsZCkKICAgICAgewogICAgICB7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQogICAgICB7e2lmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ2ZpbGUnfX0KICAgICAgY2FzZSAne3skZmllbGQubmFtZX19JzoKICAgICAgICByZXR1cm4gJHRoaXMtPmRvd25sb2Fke3skZmllbGQuY2FtZWxjYXNlfX0oKTsKICAgICAgICBicmVhazsKICAgICAge3svaWZ9fQogICAgICB7ey9mb3JlYWNofX0KICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgcHVibGljIGZ1bmN0aW9uIGRlbGV0ZUZpbGVzKCRwYXJhbXMpIHsKICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgIHt7aWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAnZmlsZSd9fQogICAgICBpZihpc3NldCgkcGFyYW1zWyd7eyRmaWVsZC5uYW1lfX1fZGVsZXRlJ10pKSAgJHRoaXMtPmRlbGV0ZXt7JGZpZWxkLmNhbWVsY2FzZX19KCk7CiAgICAgIHt7L2lmfX0KICAgIHt7L2ZvcmVhY2h9fQogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHVwbG9hZEZpbGVzKCRpZCkgewogICAge3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KICAgICAge3tpZiAkZmllbGQuZm9ybV90eXBlID09ICdmaWxlJ319CiAgICAgICAgJHRoaXMtPnVwbG9hZHt7JGZpZWxkLmNhbWVsY2FzZX19KCRpZCk7CiAgICAgIHt7L2lmfX0KICAgIHt7L2ZvcmVhY2h9fQogICAgCiAgICB7eyp9fQogICAgJGNvbmZpZyA9IGNtc191dGlsczo6Z2V0X2NvbmZpZygpOwogICAgJHVwbG9hZF9wYXRoID0gc2VsZjo6VVBMT0FEU19SRUxBVElWRV9VUkwgLiAnLyc7IC8vJy91cGxvYWRzL01vZHVsZXMve3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS8nOwogICAgJHVwbG9hZF9mdWxsX3BhdGggPSAkY29uZmlnWydyb290X3BhdGgnXS4kdXBsb2FkX3BhdGg7CiAgICAKICAgIGlmICghaXNfZGlyKCR1cGxvYWRfZnVsbF9wYXRoKSkKICAgIHsKICAgICAgbWtkaXIoJHVwbG9hZF9mdWxsX3BhdGgsMDc3Nyx0cnVlKTsKICAgIH0KICAgIAogICAge3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KICAgICAge3tpZiAkZmllbGQuZm9ybV90eXBlID09ICdmaWxlJ319CiAgICAgIGlmIChpc3NldCgkX1BPU1RbJGlkLid7eyRmaWVsZC5uYW1lfX1fZGVsZXRlJ10pKSB7CiAgICAgICAgJHRoaXMtPnNldHt7JGZpZWxkLmNhbWVsY2FzZX19KCcnKTsKICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfRklMRVNbJGlkLid7eyRmaWVsZC5uYW1lfX0nXSkgJiYgKCRfRklMRVNbJGlkLid7eyRmaWVsZC5uYW1lfX0nXVsnc2l6ZSddID4gMCkpIHsKICAgICAgICAkcGF0aGluZm8gPSBwYXRoaW5mbygkX0ZJTEVTWyRpZC4ne3skZmllbGQubmFtZX19J11bJ25hbWUnXSk7CiAgICAgICAgJGZpbGVuYW1lID0gJHBhdGhpbmZvWydiYXNlbmFtZSddOwogICAgICAgICRpID0gMjsKICAgICAgICB3aGlsZSAoZmlsZV9leGlzdHMoJHVwbG9hZF9mdWxsX3BhdGguJGZpbGVuYW1lKSkgewogICAgICAgICAgJGZpbGVuYW1lID0gJHBhdGhpbmZvWydmaWxlbmFtZSddLictJy4kaS4nLicuJHBhdGhpbmZvWydleHRlbnNpb24nXTsKICAgICAgICAgICsrJGk7CiAgICAgICAgfQogICAgICAgICRkZXN0aW5hdGlvbiA9ICR1cGxvYWRfZnVsbF9wYXRoLiRmaWxlbmFtZTsKICAgICAgICBpZiAobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJGlkLid7eyRmaWVsZC5uYW1lfX0nXVsndG1wX25hbWUnXSwgJGRlc3RpbmF0aW9uKSkgewogICAgICAgICAgJHRoaXMtPnNldHt7JGZpZWxkLmNhbWVsY2FzZX19KCR1cGxvYWRfcGF0aC4kZmlsZW5hbWUpOwogICAgICAgICAge3tpZiAoJGZpZWxkLnR5cGUgPT0gJ2ltYWdlJykgJiYgJGZpZWxkLmltYWdlX3dpZHRoICYmICRmaWVsZC5pbWFnZV9oZWlnaHR9fQogICAgICAgICAgbGlzdCgkaW1hZ2Vfd2lkdGgsICRpbWFnZV9oZWlnaHQsICRpbWFnZV90eXBlKSA9IGdldGltYWdlc2l6ZSgkZGVzdGluYXRpb24pOwogICAgICAgICAgc3dpdGNoICgkaW1hZ2VfdHlwZSkgewogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9HSUY6CiAgICAgICAgICAgICAgJGltZyA9IGltYWdlY3JlYXRlZnJvbWdpZigkZGVzdGluYXRpb24pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIElNQUdFVFlQRV9KUEVHOgogICAgICAgICAgICAgICRpbWcgPSBpbWFnZWNyZWF0ZWZyb21qcGVnKCRkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX1BORzoKICAgICAgICAgICAgICAkaW1nID0gaW1hZ2VjcmVhdGVmcm9tcG5nKCRkZXN0aW5hdGlvbik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICAkZmFjdG9yID0gbWF4KCRpbWFnZV93aWR0aCAvIHt7JGZpZWxkLmltYWdlX3dpZHRofX0sICRpbWFnZV9oZWlnaHQgLyB7eyRmaWVsZC5pbWFnZV9oZWlnaHR9fSk7CiAgICAgICAgICAkbmV3X3dpZHRoID0gbWluKHJvdW5kKCRpbWFnZV93aWR0aCAvICRmYWN0b3IpLCAkaW1hZ2Vfd2lkdGgpOwogICAgICAgICAgJG5ld19oZWlnaHQgPSBtaW4ocm91bmQoJGltYWdlX2hlaWdodCAvICRmYWN0b3IpLCAkaW1hZ2VfaGVpZ2h0KTsKICAgICAgICAgICRuZXdfaW1nID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJG5ld193aWR0aCwgJG5ld19oZWlnaHQpOwogICAgICAgICAgaW1hZ2Vjb3B5cmVzYW1wbGVkKCRuZXdfaW1nLCAkaW1nLCAwLCAwLCAwLCAwLCAkbmV3X3dpZHRoLCAkbmV3X2hlaWdodCwgJGltYWdlX3dpZHRoLCAkaW1hZ2VfaGVpZ2h0KTsKICAgICAgICAgIHN3aXRjaCAoJGltYWdlX3R5cGUpIHsKICAgICAgICAgICAgY2FzZSBJTUFHRVRZUEVfR0lGOgogICAgICAgICAgICAgIGltYWdlZ2lmKCRuZXdfaW1nLCAkdXBsb2FkX2Z1bGxfcGF0aC4ne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nLmJhc2VuYW1lKCRfRklMRVNbJGlkLid7eyRmaWVsZC5uYW1lfX0nXVsnbmFtZSddKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX0pQRUc6CiAgICAgICAgICAgICAgaW1hZ2VqcGVnKCRuZXdfaW1nLCAkdXBsb2FkX2Z1bGxfcGF0aC4ne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nLmJhc2VuYW1lKCRfRklMRVNbJGlkLid7eyRmaWVsZC5uYW1lfX0nXVsnbmFtZSddKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgSU1BR0VUWVBFX1BORzoKICAgICAgICAgICAgICBpbWFnZXBuZygkbmV3X2ltZywgJHVwbG9hZF9mdWxsX3BhdGguJ3t7JGZpZWxkLmltYWdlX3dpZHRofX1fe3skZmllbGQuaW1hZ2VfaGVpZ2h0fX1fJy5iYXNlbmFtZSgkX0ZJTEVTWyRpZC4ne3skZmllbGQubmFtZX19J11bJ25hbWUnXSkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgJHRoaXMtPnNldHt7JGZpZWxkLmNhbWVsY2FzZX19KCR1cGxvYWRfcGF0aC4ne3skZmllbGQuaW1hZ2Vfd2lkdGh9fV97eyRmaWVsZC5pbWFnZV9oZWlnaHR9fV8nLmJhc2VuYW1lKCRfRklMRVNbJGlkLid7eyRmaWVsZC5uYW1lfX0nXVsnbmFtZSddKSk7CiAgICAgICAgICB7ey9pZn19CiAgICAgICAgfQogICAgICB9CiAgICAgIHt7L2lmfX0KICAgIHt7L2ZvcmVhY2gqfX0KICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRTZWFyY2hTdHJpbmcoKSB7CiAgICAkZmllbGRzW10gPSAkdGhpcy0+Z2V0VGl0bGUoKTsKICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgIHt7aWYgJGZpZWxkLmNvbHVtbl90eXBlID09ICdDKDI1NSknIHx8ICRmaWVsZC5jb2x1bW5fdHlwZSA9PSAnWCd9fQogICAgICAkZmllbGRzW10gPSAkdGhpcy0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX0oKTsKICAgICAge3svaWZ9fQogICAge3svZm9yZWFjaH19CiAgICByZXR1cm4gaW1wbG9kZSgnICcsICRmaWVsZHMpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldEFzQXJyYXkoKSAgewogICAgJGFycmF5ID0gJHRoaXMtPnZhcnM7CiAgICAkYXJyYXlbJ2lkJ10gPSAkdGhpcy0+aWQ7CiAgICAkYXJyYXlbJ2l0ZW1faWQnXSA9ICR0aGlzLT5nZXRJZCgpOwoKCiAgICB7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQoKICAgIHt7aWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAnc2VsZWN0J319CiAgICB7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5tdWx0aXBsZSl9fQogICAgJGFycmF5Wyd2YWx1ZXMnXVt7eyRmaWVsZC5uYW1lfX1dID0gIGltcGxvZGUoJywgJywgJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWVzKCkpOwogICAge3tlbHNlfX0KICAgICRhcnJheVsndmFsdWVzJ11be3skZmllbGQubmFtZX19XSA9IChzdHJpbmcpJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWUoKTsKICAgIHt7L2lmfX0KICAgIHt7L2lmfX0KICAgIAogICAge3tpZiAkZmllbGQuZm9ybV90eXBlID09ICdtb2R1bGUnfX0KICAgIHt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm11bHRpcGxlKX19CiAgICAkYXJyYXlbJ3ZhbHVlcyddW3t7JGZpZWxkLm5hbWV9fV0gPSBpbXBsb2RlKCcsICcsICR0aGlzLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fUl0ZW1zKCkpOwogICAge3tlbHNlfX0KICAgICRhcnJheVsndmFsdWVzJ11be3skZmllbGQubmFtZX19XSA9IChzdHJpbmcpJHRoaXMtPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19T2JqZWN0KCk7CiAgICB7ey9pZn19CiAgICB7ey9pZn19CiAgICAgIAogICAge3svZm9yZWFjaH19CiAgICAKLy8gICAgdW5zZXQoJGFycmF5Wyd4dGVuZGVkX2ZlbGlzdCddKTsKLy8gICAgdW5zZXQoJGFycmF5WydmdWxsX3RleHRfc2VhcmNoJ10pOwogICAgcmV0dXJuICRhcnJheTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRKc29uKCkgIHsKICAgIHJldHVybiBqc29uX2VuY29kZSgkdGhpcy0+Z2V0QXNBcnJheSgpKTsKICB9CgogIHt7aWYgaXNzZXQoJHBhcmVudF9tb2R1bGUpICYmICRwYXJlbnRfbW9kdWxlIG5lICcnfX0KICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyZW50TW9kdWxlKCkgIHsKICAgIC8vIERFUFJFQ0FURUQKICAgIHJldHVybiAkdGhpcy0+Z2V0UGFyZW50TW9kdWxlSXRlbSgpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyZW50TW9kdWxlSXRlbSgpICB7CiAgICAgaWYgKCR0aGlzLT5wYXJlbnRfaXRlbSkgICAgewogICAgICAgcmV0dXJuIHt7JHBhcmVudF9tb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpnZXRCeUlkKCR0aGlzLT5wYXJlbnRfaXRlbSk7CiAgICAgfQogICAgIHJldHVybiBudWxsOwogICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmVudE1vZHVsZUxpc3QoTUNGQ3JpdGVyaWEgJGMpICB7CiAgICAkaXRlbXMgPSBzZWxmOjpkb1NlbGVjdCgkYyk7CiAgICAkbGlzdCA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCRpdGVtcyBhcyAkaXRlbSkKICAgIHsKICAgICAgJGxpc3RbJGl0ZW0tPmdldFBhcmVudE1vZHVsZSgpLT5fX3RvU3RyaW5nKCldWyRpdGVtLT5nZXRJZCgpXSA9ICRpdGVtOwogICAgfQogICAgcmV0dXJuICRsaXN0OwogIH0KICB7ey9pZn19CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXJlbnQoKSB7CiAgICAgIGlmICgkdGhpcy0+cGFyZW50X2lkKSB7CiAgICAgICAgICByZXR1cm4gc2VsZjo6Z2V0QnlJZCgkdGhpcy0+cGFyZW50X2lkKTsKICAgICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9zc2libGVQYXJlbnRzKCkgewogICAgJG9iamVjdHMgPSBzZWxmOjpkb1NlbGVjdChuZXcgTUNGQ3JpdGVyaWEoKSk7CiAgICAkcG9zc2libGVfb2JqZWN0cyA9IGFycmF5KDAgPT4gJycpOwogICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJG9iamVjdCkgewogICAgICBpZiAoKCRvYmplY3QtPmdldElkKCkgIT0gJHRoaXMtPmdldElkKCkpICYmICEkb2JqZWN0LT5pc0Rlc2NlbmRhbnRPZigkdGhpcy0+Z2V0SWQoKSkpIHsKICAgICAgICAkcG9zc2libGVfb2JqZWN0c1skb2JqZWN0LT5nZXRJZCgpXSA9IChzdHJpbmcpJG9iamVjdDsKICAgICAgfQogICAgfQoKICAgIHJldHVybiAkcG9zc2libGVfb2JqZWN0czsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGdldFBvc3NpYmxlUGFyZW50c0hpZXJhcmNoeSgkc2VwYXJhdG9yID0gJyAtICcsICRyb290X29ubHkgPSBmYWxzZSkgIHsKICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAkYy0+YWRkKCdwYXJlbnRfaWQnLCAnJywgTUNGQ3JpdGVyaWE6OklTRU1QVFkpOwogICAgaWYoJHRoaXMtPmdldElkKCkgIT0gJycpCiAgICAkYy0+YWRkKCdpZCcsICR0aGlzLT5nZXRJZCgpLCBNQ0ZDcml0ZXJpYTo6Tk9UX0VRVUFMKTsKICAgICRyb290cyA9IHNlbGY6OmRvU2VsZWN0KCRjKTsKICAgICRhcnJheSA9IGFycmF5KCk7CgogICAgZm9yZWFjaCgkcm9vdHMgYXMgJHJvb3QpCiAgICB7CiAgICAgICRhcnJheVskcm9vdC0+Z2V0SWQoKV0gPSAoc3RyaW5nKSRyb290OwogICAgICBpZighJHJvb3Rfb25seSkKICAgICAgewogICAgICAgJGFycmF5ID0gJGFycmF5ICsgc2VsZjo6Z2V0Q2hpbGRyZW5IaWVyYXJjaHkoJHJvb3QtPmdldElkKCksICRzZXBhcmF0b3IsIDEsICR0aGlzLT5nZXRJZCgpKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiAkYXJyYXk7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2hpbGRyZW5IaWVyYXJjaHkoJGlkLCRzZXBhcmF0b3IgPSAnIC0gJywgJGxldmVsID0gMSwgJHdpdGhvdXRfY2hpbGRyZW5zX29mID0gbnVsbCkgewogICAgJGFycmF5ID0gYXJyYXkoKTsKICAgICRkaXJlY3RfY2hpbGRyZW5zID0gc2VsZjo6Z2V0Q2hpbGRyZW5zT2YoJGlkKTsKICAgIGZvcmVhY2goJGRpcmVjdF9jaGlsZHJlbnMgYXMgJGNoaWxkcmVuKQogICAgewogICAgICBpZiAoJGNoaWxkcmVuLT5nZXRJZCgpICE9ICR3aXRob3V0X2NoaWxkcmVuc19vZikKICAgICAgewogICAgICAgICRzZXAgPSAnJzsKICAgICAgICBmb3IoJGkgPSAwOyAkaSA8ICRsZXZlbDsgJGkrKyl7JHNlcCAuPSAkc2VwYXJhdG9yO30KICAgICAgICAkYXJyYXlbJGNoaWxkcmVuLT5nZXRJZCgpXSA9ICRzZXAgLiAkY2hpbGRyZW4tPmdldFRpdGxlKCk7CiAgICAgICAgJGFycmF5ID0gJGFycmF5ICsgc2VsZjo6Z2V0Q2hpbGRyZW5IaWVyYXJjaHkoJGNoaWxkcmVuLT5nZXRJZCgpLCAkc2VwYXJhdG9yLCAkbGV2ZWwrMSwkd2l0aG91dF9jaGlsZHJlbnNfb2YpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJGFycmF5OwogIH0KICAKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENoaWxkcmVuc09mKCRpZCkgIHsKICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAkYy0+YWRkKCdwYXJlbnRfaWQnLCAkaWQsIE1DRkNyaXRlcmlhOjpFUVVBTCk7CiAgICByZXR1cm4gc2VsZjo6ZG9TZWxlY3QoJGMpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hpbGRyZW5zKCkgIHsKICAgIGlmKCFpc3NldCgkdGhpcy0+Y2hpbGRyZW5zKSkKICAgIHsKICAgICAgJHRoaXMtPmNoaWxkcmVucyA9IHNlbGY6OmdldENoaWxkcmVuc09mKCR0aGlzLT5nZXRJZCgpKTsKICAgIH0KICAgIHJldHVybiAkdGhpcy0+Y2hpbGRyZW5zOwogIH0KCglwdWJsaWMgZnVuY3Rpb24gc2V0TGV2ZWwoJHZhbHVlKQoJewoJCSR0aGlzLT5sZXZlbCA9IChpbnQpJHZhbHVlOwoJfQoJCglwdWJsaWMgZnVuY3Rpb24gZ2V0TGV2ZWwoKQoJewoJCXJldHVybiAkdGhpcy0+bGV2ZWw7Cgl9CgogIHB1YmxpYyBmdW5jdGlvbiByZXRyaWV2ZUNoaWxkcmVuc0l0ZW1zKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPmNoaWxkcmVuczsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGFkZENoaWxkcmVuSXRlbSgmJGl0ZW0pCiAgewogICAgJHRoaXMtPmNoaWxkcmVuc1skaXRlbS0+Z2V0SWQoKV0gPSAkaXRlbTsKICB9CgoJcHVibGljIGZ1bmN0aW9uIHB1c2hDaGlsZHJlbnMoJiRjaGlsZHJlbmRzKQoJewoJCWZvcmVhY2goJGNoaWxkcmVuZHMgYXMgJiRpdGVtKQoJCXsKCQkJJHRoaXMtPmFkZENoaWxkcmVuSXRlbSgkaXRlbSk7CgkJfQoJfQoJCglwdWJsaWMgZnVuY3Rpb24gaGFzQ2hpbGRyZW5zKCkKCXsKCQlpZighaXNfYXJyYXkoJHRoaXMtPmNoaWxkcmVuZHMpKQoJCXsKCQkJJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKCSAgICAkYy0+YWRkKCdwYXJlbnRfaWQnLCAkdGhpcy0+Z2V0SWQoKSwgTUNGQ3JpdGVyaWE6OkVRVUFMKTsKCSAgICByZXR1cm4gKGJvb2wpc2VsZjo6ZG9Db3VudCgkYyk7CgkJfQoJCWVsc2VpZihpc19hcnJheSgkdGhpcy0+Y2hpbGRyZW5kcykgJiYgY291bnQoJHRoaXMtPmNoaWxkcmVuZHMpID4gMCkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgogIHB1YmxpYyBmdW5jdGlvbiBpc0Rlc2NlbmRhbnRPZigkaWQpIHsKICAgICRpdGVtID0gJHRoaXM7CiAgICB3aGlsZSAoJGl0ZW0gPSAkaXRlbS0+Z2V0UGFyZW50KCkpIHsKICAgICAgaWYgKCRpdGVtLT5nZXRJZCgpID09ICRpZCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCXB1YmxpYyBmdW5jdGlvbiBjb3VudFNpYmxpbmcoJHBhcmVudF9rZXkgPSAncGFyZW50X2lkJykKCXsKCQkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwoJCXN3aXRjaCgkcGFyZW50X2tleSkKCQl7CgkJCWNhc2UgJ3BhcmVudF9pdGVtJzoKCQkJCSRjLT5hZGQoJ3BhcmVudF9pdGVtJywgJHRoaXMtPnBhcmVudF9pdGVtKTsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJJGMtPmFkZCgncGFyZW50X2lkJywgJHRoaXMtPnBhcmVudF9pZCk7CgkJCQlicmVhazsKCQl9CgkJcmV0dXJuIHNlbGY6OmRvQ291bnQoJGMpOwoJfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvQ291bnQoTUNGQ3JpdGVyaWEgJGNyaXQpIHsKICAgICRjID0gY2xvbmUgJGNyaXQ7CiAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgJGMtPmFkZFNlbGVjdENvbHVtbignQ09VTlQoKikgQVMgbmJpdGVtcycpOwogICAgJHF1ZXJ5ID0gJGMtPmJ1aWxkUXVlcnkoY21zX2RiX3ByZWZpeCgpLnNlbGY6OkRCX05BTUUpOwogICAgJHJlc3VsdCA9ICRkYi0+ZXhlY3V0ZSgkcXVlcnksICRjLT52YWx1ZXMpOwogICAgaWYoJHJlc3VsdCkKICAgIHsKICAgICAgJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgIHJldHVybiAkcm93WyduYml0ZW1zJ107CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KICAKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkT2JqZWN0cygkcmVzdWx0LCAkZXh0cmFfZmllbGRzID0gYXJyYXkoKSwgJGJ5X2lkID0gdHJ1ZSkKICB7CiAgICAkb2JqZWN0cyA9IGFycmF5KCk7CiAgICB3aGlsZSAoJHJlc3VsdCAmJiAkcm93ID0gJHJlc3VsdC0+RmV0Y2hSb3coKSkgewogICAgICAkb2JqZWN0ID0gbmV3IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3QoKTsKICAgICAgJG9iamVjdC0+cG9wdWxhdGVGcm9tQXJyYXkoJHJvdyk7CiAgICAgICRvYmplY3QtPmlzX21vZGlmaWVkID0gZmFsc2U7CiAgICAgIGlmKGNvdW50KCRleHRyYV9maWVsZHMpKQogICAgICB7CiAgICAgICAgZm9yZWFjaCgkZXh0cmFfZmllbGRzIGFzICRrZXkgPT4gJGNvbCkKICAgICAgICB7CiAgICAgICAgICAkb2JqZWN0LT4ka2V5ID0gJHJvd1skY29sXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYoJGJ5X2lkKQogICAgICB7CiAgICAgICAgJG9iamVjdHNbJG9iamVjdC0+Z2V0SWQoKV0gPSAkb2JqZWN0OwogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRvYmplY3RzW10gPSAkb2JqZWN0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJG9iamVjdHM7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJ1aWxkVHJlZSgmJHJlc3VsdHMpCiAgewogICAgJHRyZWUgPSBhcnJheSgpOwogICAgZm9yZWFjaCgkcmVzdWx0cyBhcyAmJHJlc3VsdCkKICAgIHsKICAgICAgaWYoaXNfbnVsbCgkcmVzdWx0LT5wYXJlbnRfaWQpIHx8ICgkcmVzdWx0LT5wYXJlbnRfaWQgPT0gMCkpCiAgICAgIHsKICAgICAgICAkdHJlZVskcmVzdWx0LT5nZXRJZCgpXSA9ICRyZXN1bHQ7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgaWYoaXNzZXQoJHJlc3VsdHNbJHJlc3VsdC0+cGFyZW50X2lkXSkpCiAgICAgICAgewogICAgICAgICAgLy8gV2Ugd2FudCB0aGUgZnVsbCB0cmVlIHRvIHRoZSByb290cyB3aXRob3V0IG9ycGhhbnMuLi4gUG9vciBvZiB0aGVtLgogICAgICAgICAgJHJlc3VsdHNbJHJlc3VsdC0+cGFyZW50X2lkXS0+YWRkQ2hpbGRyZW5JdGVtKCRyZXN1bHQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuICR0cmVlOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkb1NlbGVjdChNQ0ZDcml0ZXJpYSAkY3JpdCkgewogICAgJGMgPSBjbG9uZSAkY3JpdDsKICAgICRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CiAgICAkcXVlcnkgPSAkYy0+YnVpbGRRdWVyeShjbXNfZGJfcHJlZml4KCkuc2VsZjo6REJfTkFNRSwgdHJ1ZSk7CiAgICAkcmVzdWx0ID0gJGRiLT5leGVjdXRlKCRxdWVyeSwgJGMtPnZhbHVlcyk7CiAgICByZXR1cm4gc2VsZjo6YnVpbGRPYmplY3RzKCRyZXN1bHQpOwogIH0KCiAgLyoqIEByZXR1cm4ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdCAqLwoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvU2VsZWN0T25lKE1DRkNyaXRlcmlhICRjcml0KSB7CiAgICAkYyA9IGNsb25lICRjcml0OwogICAgJGMtPnNldExpbWl0KDEpOwogICAgJG9iamVjdHMgPSBzZWxmOjpkb1NlbGVjdCgkYyk7CiAgICByZXR1cm4gY3VycmVudCgkb2JqZWN0cyk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEJ5SWQoJGlkKSB7CiAgICByZXR1cm4gc2VsZjo6cmV0cmlldmVCeVBrKCRpZCk7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV0cmlldmVCeVBrKCRpZCkgIHsKICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAkYy0+YWRkKCdpZCcsICRpZCk7CiAgICByZXR1cm4gc2VsZjo6ZG9TZWxlY3RPbmUoJGMpOwogIH0KICAKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlQnlVc2VyKCR1c2VyX2lkKQogIHsKICAgIC8vIEZvciBwcm9maWxlcwogICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICRjLT5hZGQoJ3VzZXJfaWQnLCAkdXNlcl9pZCk7CiAgICByZXR1cm4gc2VsZjo6ZG9TZWxlY3RPbmUoJGMpOwogIH0KCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlQnlQYXJlbnRJdGVtKCRwYXJlbnRfaXRlbSkKCXsKCQkkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgJGMtPmFkZCgncGFyZW50X2l0ZW0nLCAkcGFyZW50X2l0ZW0pOwogICAgcmV0dXJuIHNlbGY6OmRvU2VsZWN0KCRjKTsKCX0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUaXRsZXMoKSB7CiAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICRjLT5hZGRBc2NlbmRpbmdPcmRlckJ5Q29sdW1uKGNtc191dGlsczo6Z2V0X21vZHVsZShzZWxmOjpNT0RVTEVfTkFNRSktPmdldFByZWZlcmVuY2UoJ29yZGVyX2J5JywgJ29yZGVyX2J5JykpOwogICAgJHF1ZXJ5ID0gJGMtPmJ1aWxkUXVlcnkoY21zX2RiX3ByZWZpeCgpLnNlbGY6OkRCX05BTUUpOwogICAgJHJlc3VsdCA9ICRkYi0+ZXhlY3V0ZSgkcXVlcnksICRjLT52YWx1ZXMpOwogICAgJG9iamVjdHMgPSBhcnJheSgpOwogICAgd2hpbGUgKCRyZXN1bHQgJiYgJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpIHsKICAgICAgJG9iamVjdHNbJHJvd1snaWQnXV0gPSAkcm93Wyd0aXRsZSddOwogICAgfQogICAgLy9hc29ydCgkb2JqZWN0cyk7CiAgICByZXR1cm4gJG9iamVjdHM7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHF1ZXJ5KCRzcWwsICR2YWx1ZXMgPSBhcnJheSgpKSB7CiAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgcmV0dXJuICRkYi0+ZXhlY3V0ZSgkc3FsLCAkdmFsdWVzKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIHBvcHVsYXRlRnJvbUFycmF5KGFycmF5ICRwYXJhbXMsICRwcmVmaXggPSBudWxsKSB7CiAgICBpZighaXNfbnVsbCgkcHJlZml4KSkgJHByZWZpeCAuPSAnLic7CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4LidpZCddKSkgewogICAgICAkdGhpcy0+c2V0SWQoJHBhcmFtc1skcHJlZml4LidpZCddKTsKICAgIH0KICAgIGlmIChpc3NldCgkcGFyYW1zWyRwcmVmaXguJ3VzZXJfaWQnXSkpIHsKICAgICAgJHRoaXMtPnNldFVzZXJJZCgkcGFyYW1zWyRwcmVmaXguJ3VzZXJfaWQnXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4LidwYXJlbnRfaWQnXSkpIHsKICAgICAgJHRoaXMtPnBhcmVudF9pZCA9ICRwYXJhbXNbJHByZWZpeC4ncGFyZW50X2lkJ107CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4Lid0aXRsZSddKSkgewogICAgICAkdGhpcy0+c2V0VGl0bGUoJHBhcmFtc1skcHJlZml4Lid0aXRsZSddKTsKICAgIH0KICAgIGlmIChpc3NldCgkcGFyYW1zWyRwcmVmaXguJ2NyZWF0ZWRfYXQnXSkpIHsKICAgICAgJHRoaXMtPnNldENyZWF0ZWRBdCgkcGFyYW1zWyRwcmVmaXguJ2NyZWF0ZWRfYXQnXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4LidjcmVhdGVkX2J5J10pKSB7CiAgICAgICR0aGlzLT5zZXRDcmVhdGVkQnkoJHBhcmFtc1skcHJlZml4LidjcmVhdGVkX2J5J10pOwogICAgfQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJHByZWZpeC4ndXBkYXRlZF9hdCddKSkgewogICAgICAkdGhpcy0+c2V0VXBkYXRlZEF0KCRwYXJhbXNbJHByZWZpeC4ndXBkYXRlZF9hdCddKTsKICAgIH0KICAgIGlmIChpc3NldCgkcGFyYW1zWyRwcmVmaXguJ3VwZGF0ZWRfYnknXSkpIHsKICAgICAgJHRoaXMtPnNldFVwZGF0ZWRCeSgkcGFyYW1zWyRwcmVmaXguJ3VwZGF0ZWRfYnknXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4LidtY2ZpX2NyZWF0ZWRfdGltZXN0YW1wJ10pKSB7CiAgICAgICR0aGlzLT5zZXRNY2ZpQ3JlYXRlZFRpbWVzdGFtcCgkcGFyYW1zWyRwcmVmaXguJ21jZmlfY3JlYXRlZF90aW1lc3RhbXAnXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4LidtY2ZpX3VwZGF0ZWRfdGltZXN0YW1wJ10pKSB7CiAgICAgICR0aGlzLT5zZXRNY2ZpVXBkYXRlZFRpbWVzdGFtcCgkcGFyYW1zWyRwcmVmaXguJ21jZmlfdXBkYXRlZF90aW1lc3RhbXAnXSk7CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4LidvcmRlcl9ieSddKSkgewogICAgICAkdGhpcy0+c2V0T3JkZXJCeSgkcGFyYW1zWyRwcmVmaXguJ29yZGVyX2J5J10pOwogICAgfQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJHByZWZpeC4ncGFyZW50X2l0ZW0nXSkpIHsKICAgICAgJHRoaXMtPnNldFBhcmVudEl0ZW0oJHBhcmFtc1skcHJlZml4LidwYXJlbnRfaXRlbSddKTsKICAgIH0KICAgIGlmIChpc3NldCgkcGFyYW1zWyRwcmVmaXguJ3B1Ymxpc2hlZCddKSkgewogICAgICAkdGhpcy0+c2V0UHVibGlzaGVkKCRwYXJhbXNbJHByZWZpeC4ncHVibGlzaGVkJ10pOwogICAgfQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJHByZWZpeC4nc2VuZF91cGRhdGVfaW1tZWRpYXRlbHknXSkpIHsKICAgICAgJHRoaXMtPnNlbmRfdXBkYXRlX2ltbWVkaWF0ZWx5ID0gJHBhcmFtc1skcHJlZml4LidzZW5kX3VwZGF0ZV9pbW1lZGlhdGVseSddOwogICAgfQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJHByZWZpeC4nZnVsbF90ZXh0X3NlYXJjaCddKSkKICAgIHsKICAgICAgJHRoaXMtPnNldEZ1bGxUZXh0U2VhcmNoKCRwYXJhbXNbJHByZWZpeC4nZnVsbF90ZXh0X3NlYXJjaCddKTsKICAgIH0KICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICBpZiAoaXNzZXQoJHBhcmFtc1skcHJlZml4Lid7eyRmaWVsZC5uYW1lfX0nXSkpIHsKICAgICAgJHRoaXMtPnNldHt7JGZpZWxkLmNhbWVsY2FzZX19KCRwYXJhbXNbJHByZWZpeC4ne3skZmllbGQubmFtZX19J10pOwogICAgfQogICAge3svZm9yZWFjaH19CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpCiAgewogICAgJGFycmF5ID0gYXJyYXkoKTsKCiAgICAkYXJyYXlbJ2lkJ10gPSAkdGhpcy0+Z2V0SWQoKTsKICAgICRhcnJheVsndXNlcl9pZCddID0gJHRoaXMtPmdldFVzZXJJZCgpOwogICAgJGFycmF5WydwYXJlbnRfaWQnXSA9ICR0aGlzLT5wYXJlbnRfaWQ7CiAgICAkYXJyYXlbJ3RpdGxlJ10gPSAkdGhpcy0+dGl0bGU7CiAgICAkYXJyYXlbJ2NyZWF0ZWRfYXQnXSA9ICR0aGlzLT5jcmVhdGVkX2F0OwogICAgJGFycmF5WydjcmVhdGVkX2J5J10gPSAkdGhpcy0+Y3JlYXRlZF9ieTsKICAgICRhcnJheVsndXBkYXRlZF9hdCddID0gJHRoaXMtPnVwZGF0ZWRfYXQ7CiAgICAkYXJyYXlbJ3VwZGF0ZWRfYnknXSA9ICR0aGlzLT51cGRhdGVkX2J5OwogICAgJGFycmF5WydtY2ZpX2NyZWF0ZWRfdGltZXN0YW1wJ10gPSAkdGhpcy0+bWNmaV9jcmVhdGVkX3RpbWVzdGFtcDsKICAgICRhcnJheVsnbWNmaV91cGRhdGVkX3RpbWVzdGFtcCddID0gJHRoaXMtPm1jZmlfdXBkYXRlZF90aW1lc3RhbXA7CiAgICAkYXJyYXlbJ3BhcmVudF9pdGVtJ10gPSAkdGhpcy0+cGFyZW50X2l0ZW07CiAgICAkYXJyYXlbJ3B1Ymxpc2hlZCddID0gJHRoaXMtPnB1Ymxpc2hlZDsKCiAgICB7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQogICAgJGFycmF5Wyd7eyRmaWVsZC5uYW1lfX0nXSA9ICR0aGlzLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fSgpOwogICAge3svZm9yZWFjaH19CiAgICAKICAgIHJldHVybiAkYXJyYXk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gaXNOZXcoKSB7CiAgICByZXR1cm4gJHRoaXMtPmdldElkKCkgPyBmYWxzZSA6IHRydWU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gcG9wdWxhdGUoJHJvdykgIHsKICAgIGlmIChpc3NldCgkcm93W3NlbGY6OkRCX0lURU0uJ19faWQnXSkpCiAgICB7CiAgICAgICR0aGlzLT5zZXRJZCgkcm93W3NlbGY6OkRCX0lURU0uJ19faWQnXSk7CiAgICB9CgogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3VzZXJfaWQnXSkpIHsKICAgICAgICAkdGhpcy0+dXNlcl9pZCA9ICRyb3dbc2VsZjo6REJfSVRFTS4nX191c2VyX2lkJ107IC8vJHBhcmFtc1snY3JlYXRlZF9hdCddOwogICAgfQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2NyZWF0ZWRfYXQnXSkpIHsKICAgICAgICAkdGhpcy0+Y3JlYXRlZF9hdCA9ICRyb3dbc2VsZjo6REJfSVRFTS4nX19jcmVhdGVkX2F0J107IC8vJHBhcmFtc1snY3JlYXRlZF9hdCddOwogICAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1snY3JlYXRlZF9ieSddKSkgewogICAgICAkdGhpcy0+Y3JlYXRlZF9ieSA9ICRyb3dbc2VsZjo6REJfSVRFTS4nX19jcmVhdGVkX2J5J107IC8vJHBhcmFtc1snY3JlYXRlZF9ieSddOwogICAgfQogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3VwZGF0ZWRfYXQnXSkpIHsKICAgICAgJHRoaXMtPnVwZGF0ZWRfYXQgPSAkcm93W3NlbGY6OkRCX0lURU0uJ19fdXBkYXRlZF9hdCddOyAvLyRwYXJhbXNbJ3VwZGF0ZWRfYXQnXTsKICAgIH0KICAgIGlmIChpc3NldCgkcGFyYW1zWyd1cGRhdGVkX2J5J10pKSB7CiAgICAgICR0aGlzLT51cGRhdGVkX2J5ID0gJHJvd1tzZWxmOjpEQl9JVEVNLidfX3VwZGF0ZWRfYnknXTsgLy8kcGFyYW1zWyd1cGRhdGVkX2J5J107CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1snbWNmaV9jcmVhdGVkX3RpbWVzdGFtcCddKSkgewogICAgICAkdGhpcy0+bWNmaV9jcmVhdGVkX3RpbWVzdGFtcCA9ICRyb3dbc2VsZjo6REJfSVRFTS4nX19tY2ZpX2NyZWF0ZWRfdGltZXN0YW1wJ107CiAgICB9CiAgICBpZiAoaXNzZXQoJHBhcmFtc1snbWNmaV91cGRhdGVkX3RpbWVzdGFtcCddKSkgewogICAgICAkdGhpcy0+bWNmaV91cGRhdGVkX3RpbWVzdGFtcCA9ICRyb3dbc2VsZjo6REJfSVRFTS4nX19tY2ZpX3VwZGF0ZWRfdGltZXN0YW1wJ107CiAgICB9CgoKCiAgICBmb3JlYWNoIChzZWxmOjokZmllbGRzIGFzICRmaWVsZCkKICAgIHsKICAgICAgaWYgKGlzc2V0KCRyb3dbc2VsZjo6REJfSVRFTS4nX18nLiRmaWVsZF0pKQogICAgICB7CiAgICAgICAgJHRoaXMtPiRmaWVsZCA9ICRyb3dbc2VsZjo6REJfSVRFTS4nX18nLiRmaWVsZF07CiAgICAgIH0KICAgIH0KICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2VuZXJhdGVTZWxlY3RMaXN0KCkgIHsKICAgICRmaWVsZHMgPSBhcnJheV9tZXJnZShhcnJheSgnaWQnLCd1c2VyX2lkJywnY3JlYXRlZF9hdCcsJ2NyZWF0ZWRfYnknLCd1cGRhdGVkX2F0JywndXBkYXRlZF9ieScsICdtY2ZpX2NyZWF0ZWRfdGltZXN0YW1wJywgJ21jZmlfdXBkYXRlZF90aW1lc3RhbXAnKSwgc2VsZjo6JGZpZWxkcyk7CiAgICAkbGlzdCA9IGFycmF5KCk7CiAgICBmb3JlYWNoICgkZmllbGRzIGFzICRmaWVsZCkKICAgIHsKICAgICAgJGxpc3RbXSA9IHNlbGY6OkRCX0lURU0gLiAnLicuJGZpZWxkLicgYXMgJy4gc2VsZjo6Z2V0Um93TmFtZSgkZmllbGQpOwogICAgfQogICAgcmV0dXJuIGltcGxvZGUoJyAsICcsJGxpc3QpOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSb3dOYW1lKCRuYW1lKSAgewogICAgcmV0dXJuIHNlbGY6OkRCX0lURU0gLiAnX18nIC4gJG5hbWU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgkcGFyYW1zID0gYXJyYXkoKSwgJGZvcmNlX3NhdmUgPSBmYWxzZSkgewogICAgJHRoaXMtPnByZVNhdmUoKTsKICAgIGlmICgkdGhpcy0+Z2V0SWQoKSAmJiAhJGZvcmNlX3NhdmUpIHsKICAgICAgICBpZiAoJHRoaXMtPmlzX21vZGlmaWVkKSB7CiAgICAgICAgICAgICR0aGlzLT51cGRhdGUoJHBhcmFtcyk7CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgJHRoaXMtPmluc2VydCgkcGFyYW1zKTsKICAgIH0KICAgICR0aGlzLT5wb3N0U2F2ZSgpOwogICAgY21zX3V0aWxzOjpnZXRfbW9kdWxlKHNlbGY6Ok1PRFVMRV9OQU1FKS0+aW5kZXgoJHRoaXMpOwogICAgLy8gIGRlYnVnX2Rpc3BsYXkoJGVudHJ5KTsgLy8gVE8gSU1QTEVNRU5UOiBTaG93IGRhdGFzIGZvciBkZWJ1ZwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCkgewogICAgaWYgKCR0aGlzLT5nZXRJZCgpKSB7CiAgICAgICRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS5zZWxmOjpEQl9OQU1FIC4nIFdIRVJFIGlkID0gPyc7CiAgICAgICR0aGlzLT5xdWVyeSgkcXVlcnksIGFycmF5KCR0aGlzLT5pZCkpOwogICAgICBpZihjbGFzc19leGlzdHMoJ01YX1JlbGF0aW9uTGluaycpKSAgewogICAgICAgIE1YX1JlbGF0aW9uTGluazo6Y2xlYW5SZWxhdGVkSXRlbXMoc2VsZjo6TU9EVUxFX05BTUUsICR0aGlzLT5nZXRJZCgpKTsKICAgICAgfQogICAgfQogICAgLy8gREVMRVRFIEFMTCBSRUxBVEVEIERPQ1VNRU5UUwogICAge3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KICAgICAge3tpZiAkZmllbGQuZm9ybV90eXBlID09ICdmaWxlJ319CiAgICAgICAgJHRoaXMtPmRlbGV0ZXt7JGZpZWxkLmNhbWVsY2FzZX19KCk7CiAgICAgIHt7L2lmfX0KICAgIHt7L2ZvcmVhY2h9fQogICAgY21zX3V0aWxzOjpnZXRfbW9kdWxlKHNlbGY6Ok1PRFVMRV9OQU1FKS0+ZGVpbmRleCgkdGhpcyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHByb3RlY3RlZCBmdW5jdGlvbiBpbnNlcnQoJHBhcmFtcyA9IGFycmF5KCkpIHsKICAgICRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CgogICAgaWYoJHRoaXMtPmdldElkKCkgPT0gbnVsbCkgICR0aGlzLT5zZXRJZCgkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4gc2VsZjo6REJfTkFNRSAuICdfc2VxJykpOwoKICAgICRxdWVyeSA9ICdTRUxFQ1QgTUFYKG9yZGVyX2J5KSArIDEgQVMgb3JkZXJfYnkgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS5zZWxmOjpEQl9OQU1FOwogICAgJHZhbHVlcyA9IGFycmF5KCk7CiAgICBpZiAoJHRoaXMtPnBhcmVudF9pdGVtKSB7CiAgICAgICRxdWVyeSAuPSAnIFdIRVJFIHBhcmVudF9pdGVtID0gPyc7CiAgICAgICR2YWx1ZXNbXSA9ICR0aGlzLT5wYXJlbnRfaXRlbTsKICAgIH0gZWxzZWlmICgkdGhpcy0+cGFyZW50X2lkID4gMCkgewogICAgICAkcXVlcnkgLj0gJyBXSEVSRSBwYXJlbnRfaWQgPSA/JzsKICAgICAgJHZhbHVlc1tdID0gJHRoaXMtPnBhcmVudF9pZDsKCQl9IGVsc2UgewoJCQkkcXVlcnkgLj0gJyBXSEVSRSBwYXJlbnRfaWQgPSAwIE9SIHBhcmVudF9pZCBJUyBOVUxMJzsKCQl9CgkJJHJlc3VsdCA9ICRkYi0+ZXhlY3V0ZSgkcXVlcnksICR2YWx1ZXMpOwoJCWlmKCEkcmVzdWx0KSByZXR1cm4gZmFsc2U7CiAgICAkcm93ID0gJHJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICRvcmRlcl9ieSA9ICRyb3dbJ29yZGVyX2J5J10gPyAkcm93WydvcmRlcl9ieSddIDogMTsKICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2Zyb250ZW5kJ10pKQogICAgewogICAgICAkdXNlcmlkID0gbnVsbDsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKICAgIH0KICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS5zZWxmOjpEQl9OQU1FIC4gJwogICAgICBTRVQgaWQgPSA/LAogICAgICAgIHVzZXJfaWQgPSA/LAogICAgICAgIHBhcmVudF9pZCA9ID8sCiAgICAgICAgdGl0bGUgPSA/LAogICAgICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgICAge3skZmllbGQubmFtZX19ID0gPywKICAgICAgICB7ey9mb3JlYWNofX0KICAgICAgICBjcmVhdGVkX2J5ID0gPywKICAgICAgICBjcmVhdGVkX2F0ID0gTk9XKCksCiAgICAgICAgbWNmaV9jcmVhdGVkX3RpbWVzdGFtcCA9ID8sCiAgICAgICAgdXBkYXRlZF9ieSA9ID8sCiAgICAgICAgdXBkYXRlZF9hdCA9IE5PVygpLAogICAgICAgIG1jZmlfdXBkYXRlZF90aW1lc3RhbXAgPSA/LAogICAgICAgIG9yZGVyX2J5ID0gPywKICAgICAgICBwYXJlbnRfaXRlbSA9ID8sCiAgICAgICAgcHVibGlzaGVkID0gPywKICAgICAgICBzZW5kX3VwZGF0ZV9pbW1lZGlhdGVseSA9ID8sCiAgICAgICAgZnVsbF90ZXh0X3NlYXJjaCA9ID8nOwogICAgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoCiAgICAgICAgJHRoaXMtPmlkLAogICAgICAgICR0aGlzLT51c2VyX2lkLAogICAgICAkdGhpcy0+cGFyZW50X2lkLAogICAgICAkdGhpcy0+dGl0bGUsCiAgICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgICR0aGlzLT57eyRmaWVsZC5uYW1lfX0sCiAgICAgIHt7L2ZvcmVhY2h9fQogICAgICAkdXNlcmlkLAogICAgICB0aW1lKCksCiAgICAgICR1c2VyaWQsCiAgICAgIHRpbWUoKSwKICAgICAgJG9yZGVyX2J5LAogICAgICAkdGhpcy0+cGFyZW50X2l0ZW0sCiAgICAgICR0aGlzLT5wdWJsaXNoZWQsCiAgICAgICR0aGlzLT5zZW5kX3VwZGF0ZV9pbW1lZGlhdGVseSwKICAgICAgJHRoaXMtPmZ1bGxfdGV4dF9zZWFyY2goKQogICAgKSk7CiAgICBjbXNfdXRpbHM6OmdldF9tb2R1bGUoc2VsZjo6TU9EVUxFX05BTUUpLT5TZW5kRXZlbnQoJ0NvbnRlbnRFZGl0UG9zdCcsIGFycmF5KCkpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBwcm90ZWN0ZWQgZnVuY3Rpb24gdXBkYXRlKCRwYXJhbXMgPSBhcnJheSgpKSB7CiAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgaWYoaXNzZXQoJHBhcmFtc1snZnJvbnRlbmQnXSkpCiAgICB7CiAgICAgICR1c2VyaWQgPSBudWxsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkdXNlcmlkID0gZ2V0X3VzZXJpZCgpOwogICAgfQogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS5zZWxmOjpEQl9OQU1FLiAnCiAgICAgIFNFVCAKICAgICAgICB1c2VyX2lkID0gPywKICAgICAgICBwYXJlbnRfaWQgPSA/LAogICAgICAgIHRpdGxlID0gPywKICAgICAgICB7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQogICAgICAgIHt7JGZpZWxkLm5hbWV9fSA9ID8sCiAgICAgICAge3svZm9yZWFjaH19CiAgICAgICAgdXBkYXRlZF9ieSA9ID8sCiAgICAgICAgdXBkYXRlZF9hdCA9IE5PVygpLAogICAgICAgIG1jZmlfdXBkYXRlZF90aW1lc3RhbXAgPSA/LAogICAgICAgIG9yZGVyX2J5ID0gPywKICAgICAgICBwYXJlbnRfaXRlbSA9ID8sCiAgICAgICAgcHVibGlzaGVkID0gPywKICAgICAgICBzZW5kX3VwZGF0ZV9pbW1lZGlhdGVseSA9ID8sCiAgICAgICAgZnVsbF90ZXh0X3NlYXJjaCA9ID8KICAgICAgV0hFUkUgaWQgPSA/JzsKICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KAogICAgICAkdGhpcy0+dXNlcl9pZCwKICAgICAgJHRoaXMtPnBhcmVudF9pZCwKICAgICAgJHRoaXMtPnRpdGxlLAogICAgICB7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQogICAgICAkdGhpcy0+e3skZmllbGQubmFtZX19LAogICAgICB7ey9mb3JlYWNofX0KICAgICAgJHVzZXJpZCwKICAgICAgdGltZSgpLAogICAgICAkdGhpcy0+b3JkZXJfYnksCiAgICAgICR0aGlzLT5wYXJlbnRfaXRlbSwKICAgICAgJHRoaXMtPnB1Ymxpc2hlZCwKICAgICAgJHRoaXMtPnNlbmRfdXBkYXRlX2ltbWVkaWF0ZWx5LAogICAgICAkdGhpcy0+ZnVsbF90ZXh0X3NlYXJjaCgpLAogICAgICAkdGhpcy0+aWQKICAgICkpOwogICAgY21zX3V0aWxzOjpnZXRfbW9kdWxlKHNlbGY6Ok1PRFVMRV9OQU1FKS0+U2VuZEV2ZW50KCdDb250ZW50RWRpdFBvc3QnLGFycmF5KCkpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXBkYXRlT2JqZWN0cygpICB7CiAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgJG9iamVjdHMgPSBzZWxmOjpkb1NlbGVjdCgkYyk7CiAgICBmb3JlYWNoKCRvYmplY3RzIGFzICRvYmplY3QpCiAgICB7CiAgICAgICRvYmplY3QtPmlzX21vZGlmaWVkID0gdHJ1ZTsKICAgICAgJG9iamVjdC0+c2F2ZSgpOwogICAgfQogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZm9yY2VVcGRhdGVPYmplY3QoJG1hZ2ljKSAgewogICAgaWYgKCRtYWdpYyA9ICdtYWdpYycpCiAgICB7CiAgICAgICR0aGlzLT5pc19tb2RpZmllZCA9IHRydWU7CiAgICAgICR0aGlzLT5zYXZlKCk7CiAgICB9CiAgfQoKICAvKiogICBAZGVwcmVjYXRlZCAqLwoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJldHJpZXZlQ29udGV4dElkKCkKICB7CiAgICAgIHJldHVybiBNQ0ZUb29sczo6cmV0cmlldmVDb250ZXh0SWQoKTsKICB9CiAgCiAgLy8gRklMVEVSUwogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gYnVpbGRGaWx0ZXJzV2lkZ2V0cyhDTVNGb3JtICYkZm9ybSwgJGZpbHRlcnMpICB7CiAgICB7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQogICAgICB7e2lmICRmaWVsZC5maWx0ZXIgPT0gdHJ1ZX19CiAgICAgICAge3tpZiAkZmllbGQudHlwZSA9PSAndGV4dCcgfHwgJGZpZWxkLnR5cGUgPT0gJ3RleHRhcmVhJyB8fCAkZmllbGQudHlwZSA9PSAndGV4dGFyZWFfcGxhaW4nIHx8ICRmaWVsZC50eXBlID09ICd0ZXh0YXJlYV9jb2RlJ319CiAgICAgICAgICAkZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVGaWx0ZXJzW3t7JGZpZWxkLm5hbWV9fV0nLCAndGV4dCcsIGFycmF5KCdzaXplJyA9PiAnMTInLCAnbGFiZWwnID0+ICd7eyRmaWVsZC5sYWJlbH19JywKICAgICAgICAgICAndmFsdWUnID0+IGlzc2V0KCRmaWx0ZXJzWyd7eyRmaWVsZC5uYW1lfX0nXSk/JGZpbHRlcnNbJ3t7JGZpZWxkLm5hbWV9fSddOm51bGwKICAgICAgICAgICkpOwogICAgICAgIHt7ZWxzZWlmICRmaWVsZC50eXBlID09ICdtb2R1bGUnfX0KICAgICAgICAgIGlmKGNsYXNzX2V4aXN0cygne3skZmllbGQuZm9wdGlvbnMubW9kdWxlX25hbWV9fU9iamVjdCcpKQogICAgICAgICAgewogICAgICAgICAgICAkaXRlbXMgPSB7eyRmaWVsZC5mb3B0aW9ucy5tb2R1bGVfbmFtZX19T2JqZWN0OjpnZXRUaXRsZXMoKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgJGl0ZW1zID0gYXJyYXkoKTsKICAgICAgICAgIH0KICAgICAgICAgICRmb3JtLT5zZXRXaWRnZXQoJ21vZHVsZUZpbHRlcnNbe3skZmllbGQubmFtZX19XScsICdzZWxlY3QnLCBhcnJheSgKICAgICAgICAgICAgJ3ZhbHVlcycgPT4KICAgICAgICAgICAgICAgIGFycmF5KCcnID0+ICcmbGFxdW87IHt7JGZpZWxkLmxhYmVsfX0gJnJhcXVvOycpICsKICAgICAgICAgICAgICAgICRpdGVtcwogICAgICAgICAgICAgICwKICAgICAgICAgICAgICAnbGFiZWwnID0+ICcnLAogICAgICAgICAgICAgICd2YWx1ZScgPT4gaXNzZXQoJGZpbHRlcnNbJ3t7JGZpZWxkLm5hbWV9fSddKT8kZmlsdGVyc1sne3skZmllbGQubmFtZX19J106bnVsbAogICAgICAgICAgICApKTsKICAgICAgICB7e2Vsc2VpZiAkZmllbGQuZm9ybV90eXBlID09ICdzZWxlY3QnfX0KICAgICAgICAgICRmb3JtLT5zZXRXaWRnZXQoJ21vZHVsZUZpbHRlcnNbe3skZmllbGQubmFtZX19XScsICdzZWxlY3QnLCBhcnJheSgKICAgICAgICAgICAgJ3ZhbHVlcycgPT4KICAgICAgICAgICAgICAgIGFycmF5KCcnID0+ICcmbGFxdW87IHt7JGZpZWxkLmxhYmVsfX0gJnJhcXVvOycpICsKICAgICAgICAgICAgICAgIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OiR7eyRmaWVsZC5uYW1lfX1fb3B0aW9ucwogICAgICAgICAgICAgICwKICAgICAgICAgICAgICAnbGFiZWwnID0+ICcnLAogICAgICAgICAgICAgICd2YWx1ZScgPT4gaXNzZXQoJGZpbHRlcnNbJ3t7JGZpZWxkLm5hbWV9fSddKT8kZmlsdGVyc1sne3skZmllbGQubmFtZX19J106bnVsbAogICAgICAgICAgICApKTsKICAgICAgICB7e2Vsc2VpZiAkZmllbGQudHlwZSA9PSAndXNlcid9fQogICAgICAgICAgaWYoY2xhc3NfZXhpc3RzKCdDTVNVc2VyJykpCiAgICAgICAgICB7CiAgICAgICAgICAgICR1c2VycyA9IENNU1VzZXI6OmdldFVzZXJMaXN0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgICR1c2VycyA9IGFycmF5KCk7CiAgICAgICAgICB9CiAgICAgICAgCiAgICAgICAgICAkZm9ybS0+c2V0V2lkZ2V0KCdtb2R1bGVGaWx0ZXJzW3t7JGZpZWxkLm5hbWV9fV0nLCAnc2VsZWN0JywgYXJyYXkoCiAgICAgICAgICAgICd2YWx1ZXMnID0+CiAgICAgICAgICAgICAgICBhcnJheSgwID0+ICcmbGFxdW87IHt7JGZpZWxkLmxhYmVsfX0gJnJhcXVvOycpICsKICAgICAgICAgICAgICAgICR1c2VycwogICAgICAgICAgICAgICwKICAgICAgICAgICAgICAnbGFiZWwnID0+ICcnLAogICAgICAgICAgICAgICd2YWx1ZScgPT4gaXNzZXQoJGZpbHRlcnNbJ3t7JGZpZWxkLm5hbWV9fSddKT8kZmlsdGVyc1sne3skZmllbGQubmFtZX19J106bnVsbAogICAgICAgICAgICApKTsKICAgICAgICB7ey9pZn19CgogICAgICB7ey9pZn19CiAgICB7ey9mb3JlYWNofX0KICAgIAogICAgCiAgICB7e2lmIGlzc2V0KCRpc191c2VyX21vZHVsZSl9fQogICAgICBpZihjbGFzc19leGlzdHMoJ0NNU1VzZXInKSkKICAgICAgewogICAgICAgICR1c2VycyA9IENNU1VzZXI6OmdldFVzZXJMaXN0KCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgJHVzZXJzID0gYXJyYXkoKTsKICAgICAgfQogICAgJGZvcm0tPnNldFdpZGdldCgnbW9kdWxlRmlsdGVyc1t1c2VyX2lkXScsICdzZWxlY3QnLCBhcnJheSgKICAgICAgJ3ZhbHVlcycgPT4KICAgICAgICAgIGFycmF5KDAgPT4gJyZsYXF1bzsgVXNlciAmcmFxdW87JykgKyAkdXNlcnMKICAgICAgICAsCiAgICAgICAgJ2xhYmVsJyA9PiAnJywKICAgICAgICAndmFsdWUnID0+IGlzc2V0KCRmaWx0ZXJzWyd1c2VyX2lkJ10pPyRmaWx0ZXJzWyd1c2VyX2lkJ106bnVsbAogICAgICApKTsKICAgIHt7L2lmfX0KICB9CiAgCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZEZpbHRlcnNDcml0ZXJpYShNQ0ZDcml0ZXJpYSAmJGMsICRmaWx0ZXJzKSAgewogICAge3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KICAgICAge3tpZiAkZmllbGQuZmlsdGVyID09IHRydWV9fQogICAgICAgIHt7aWYgJGZpZWxkLnR5cGUgPT0gJ3RleHQnIHx8ICRmaWVsZC50eXBlID09ICd0ZXh0YXJlYScgfHwgJGZpZWxkLnR5cGUgPT0gJ3RleHRhcmVhX3BsYWluJyB8fCAkZmllbGQudHlwZSA9PSAndGV4dGFyZWFfY29kZSd9fQogICAgICAgICAgaWYgKGlzc2V0KCRmaWx0ZXJzWyd7eyRmaWVsZC5uYW1lfX0nXSkpCiAgICAgICAgICB7CiAgICAgICAgICAgICAgJGMtPmFkZCgne3skZmllbGQubmFtZX19JywgJyUnLiRmaWx0ZXJzWyd7eyRmaWVsZC5uYW1lfX0nXS4nJScsIE1DRkNyaXRlcmlhOjpMSUtFKTsKICAgICAgICAgIH0KICAgICAgICB7e2Vsc2VpZiAkZmllbGQudHlwZSA9PSAnbW9kdWxlJyB8fCAkZmllbGQudHlwZSA9PSAndXNlcicgfHwgJGZpZWxkLmZvcm1fdHlwZSA9PSAnc2VsZWN0J319CiAgICAgICAgICBpZiAoaXNzZXQoJGZpbHRlcnNbJ3t7JGZpZWxkLm5hbWV9fSddKSkKICAgICAgICAgIHsKICAgICAgICAgICAge3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0KICAgICAgICAgICAgICAkYy0+YWRkKCd7eyRmaWVsZC5uYW1lfX0nLCAkZmlsdGVyc1sne3skZmllbGQubmFtZX19J10sIE1DRkNyaXRlcmlhOjpNVUxUSUxJS0UpOwogICAgICAgICAgICB7e2Vsc2V9fQogICAgICAgICAgICAgICRjLT5hZGQoJ3t7JGZpZWxkLm5hbWV9fScsICRmaWx0ZXJzWyd7eyRmaWVsZC5uYW1lfX0nXSwgTUNGQ3JpdGVyaWE6OkVRVUFMKTsKICAgICAgICAgICAge3svaWZ9fQogICAgICAgICAgfQogICAgICAgIHt7L2lmfX0KICAgICAge3svaWZ9fQogICAge3svZm9yZWFjaH19CiAgICB7e2lmIGlzc2V0KCRpc191c2VyX21vZHVsZSl9fQogICAgICAgICRjLT5hZGQoJ3VzZXJfaWQnLCAkZmlsdGVyc1sndXNlcl9pZCddLCBNQ0ZDcml0ZXJpYTo6RVFVQUwpOwogICAge3svaWZ9fQogIH0KICAKICAvLyBGUk9OVEVORCBXSURHRVRTCiAgCiAge3tmb3JlYWNoIGZyb209JGZpbHRlcnMgaXRlbT1maWx0ZXJ9fQogICAge3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KICAgICAge3tpZiAkZmlsdGVyLmZpZWxkID09ICRmaWVsZC5uYW1lfX0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmZUZpbHRlcnt7JGZpZWxkLmNhbWVsY2FzZX19X3t7JGZpbHRlci5uYW1lfX0oJiRmb3JtLCAkb3B0aW9ucyA9IGFycmF5KCkpIHsKCiAgICAgICAgICBpZiAoIWlzc2V0KCRvcHRpb25zWydsYWJlbCddKSkgJG9wdGlvbnNbJ2xhYmVsJ10gPSAne3skZmllbGQubGFiZWx9fSc7CgogICAgICAgICAge3tpZiAkZmllbGQudHlwZSA9PSAndGV4dCcgb3IgJGZpZWxkLnR5cGUgPT0gJ3RleHRhcmVhJyBvciAkZmllbGQudHlwZSA9PSAndGV4dGFyZWFfcGxhaW4nfX0KICAgICAgICAgICAgJGZvcm0tPnNldFdpZGdldCgne3skZmlsdGVyLm5hbWV9fScsICd0ZXh0JywgJG9wdGlvbnMpOwogICAgICAgICAge3tlbHNlaWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAnc2VsZWN0J319CiAgICAgICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ2luY2x1ZGVfY3VzdG9tJ10pKSAkb3B0aW9uc1snaW5jbHVkZV9jdXN0b20nXSA9ICcmbGFxdW87ICcgLiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoc2VsZjo6TU9EVUxFX05BTUUpLT5sYW5nKCdzZWxlY3Rfb25lJykgLiAnICZyYXF1bzsnOwogICAgICAgICAgICB7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5mZXNlbGVjdG9yKSAmJiBpc3NldCgkZmllbGQuZm9wdGlvbnMubW9kdWxlX25hbWUpfX0KICAgICAgICAgICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgICAgICAgICAgICRjLT5hZGQoJ3B1Ymxpc2hlZCcsIDEpOwogICAgICAgICAgICAgICRvcHRpb25zWyd2YWx1ZXMnXSA9IHt7JGZpZWxkLmZvcHRpb25zLm1vZHVsZV9uYW1lfX1PYmplY3Q6Ont7JGZpZWxkLmZvcHRpb25zLmZlc2VsZWN0b3J9fSgkYyk7CiAgICAgICAgICAgIHt7ZWxzZWlmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5zZWxlY3RvcikgJiYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm1vZHVsZV9uYW1lKX19CiAgICAgICAgICAgICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICAgICAgICAgICAkYy0+YWRkKCdwdWJsaXNoZWQnLCAxKTsKICAgICAgICAgICAgICAkb3B0aW9uc1sndmFsdWVzJ10gPSB7eyRmaWVsZC5mb3B0aW9ucy5tb2R1bGVfbmFtZX19T2JqZWN0Ojp7eyRmaWVsZC5mb3B0aW9ucy5zZWxlY3Rvcn19KCRjKTsKICAgICAgICAgICAge3tlbHNlfX0KICAgICAgICAgICAgICAkb3B0aW9uc1sndmFsdWVzJ10gPSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0Ojoke3skZmllbGQubmFtZX19X29wdGlvbnM7CiAgICAgICAgICAgIHt7L2lmfX0KICAgICAgICAgICAgJGZvcm0tPnNldFdpZGdldCgne3skZmlsdGVyLm5hbWV9fScsICdzZWxlY3QnLCAkb3B0aW9ucyk7CiAgICAgICAgICB7e2Vsc2VpZiAkZmllbGQudHlwZSA9PSAnbW9kdWxlJ319CiAgICAgICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ2luY2x1ZGVfY3VzdG9tJ10pKSAkb3B0aW9uc1snaW5jbHVkZV9jdXN0b20nXSA9ICcmbGFxdW87ICcgLiBjbXNfdXRpbHM6OmdldF9tb2R1bGUoc2VsZjo6TU9EVUxFX05BTUUpLT5sYW5nKCdzZWxlY3Rfb25lJykgLiAnICZyYXF1bzsnOwogICAgICAgICAgICB7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5mZXNlbGVjdG9yKX19CiAgICAgICAgICAgICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICAgICAgICAgICAkYy0+YWRkKCdwdWJsaXNoZWQnLCAxKTsKICAgICAgICAgICAgICAkb3B0aW9uc1sndmFsdWVzJ10gPSB7eyRmaWVsZC5mb3B0aW9ucy5tb2R1bGVfbmFtZX19T2JqZWN0Ojp7eyRmaWVsZC5mb3B0aW9ucy5mZXNlbGVjdG9yfX0oJGMpOwogICAgICAgICAgICB7ey9pZn19CiAgICAgICAgICAgIGlmKCFpc3NldCgkb3B0aW9uc1sndmFsdWVzJ10pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYoY2xhc3NfZXhpc3RzKCd7eyRmaWVsZC5mb3B0aW9ucy5tb2R1bGVfbmFtZX19T2JqZWN0JykpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ3ZhbHVlcyddID0ge3skZmllbGQuZm9wdGlvbnMubW9kdWxlX25hbWV9fU9iamVjdDo6Z2V0VGl0bGVzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkb3B0aW9uc1sndmFsdWVzJ10gPSBhcnJheSgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSAgICAgICAgICAgCiAgICAgICAgICAgICRmb3JtLT5zZXRXaWRnZXQoJ3t7JGZpbHRlci5uYW1lfX0nLCAnc2VsZWN0JywgJG9wdGlvbnMpOwogICAgICAgICAge3tlbHNlaWYgJGZpZWxkLnR5cGUgPT0gJ2RhdGUnfX0KICAgICAgICAgICAgLy8gREFURVMKICAgICAgICAgICAgICRmb3JtLT5zZXRXaWRnZXQoJ3t7JGZpbHRlci5uYW1lfX0nLCAndGV4dCcsICRvcHRpb25zKTsKICAgICAgICAgIHt7L2lmfX0KICAgIAogICAgCiAgfQoKICAgICAge3svaWZ9fQogICAge3svZm9yZWFjaH19CiAge3svZm9yZWFjaH19CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RkVGaWx0ZXIoJiRmb3JtLCAkZmlsdGVyLCAkb3B0aW9ucyA9IGFycmF5KCkpICB7CiAgICBzd2l0Y2goJGZpbHRlcikKICAgIHsKICAgIHt7Zm9yZWFjaCBmcm9tPSRmaWx0ZXJzIGl0ZW09ZmlsdGVyfX0KICAgIGNhc2UgJ3t7JGZpbHRlci5uYW1lfX0nOgogICAge3tpZiAkZmlsdGVyLmZpZWxkID09ICd0aXRsZSd9fQogICAgICAkZm9ybS0+c2V0V2lkZ2V0KCd0aXRsZScsJ3RleHQnLCAkb3B0aW9ucyk7CgkJe3tlbHNlaWYgJGZpbHRlci5maWVsZCA9PSAnZnVsbF90ZXh0X3NlYXJjaCd9fQoJCQlpZiAoIWlzc2V0KCRvcHRpb25zWydsYWJlbCddKSkgJG9wdGlvbnNbJ2xhYmVsJ10gPSAne3skZmllbGQubGFiZWx9fSc7CgkJCSRmb3JtLT5zZXRXaWRnZXQoJ2ZpbHRlcl9hbGwnLCAndGV4dCcsICRvcHRpb25zKTsKICAgIHt7ZWxzZX19CiAgICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgICAge3tpZiAkZmlsdGVyLmZpZWxkID09ICRmaWVsZC5uYW1lfX0KCiAgICAgICAgICB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpmZUZpbHRlcnt7JGZpZWxkLmNhbWVsY2FzZX19X3t7JGZpbHRlci5uYW1lfX0oJGZvcm0sJG9wdGlvbnMpOwoKICAgICAgICB7ey9pZn19CiAgICAgIHt7L2ZvcmVhY2h9fQogICAge3svaWZ9fQogICAgYnJlYWs7CiAgICB7ey9mb3JlYWNofX0KICAgICAgZGVmYXVsdDoKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIC8vIEV4ZWN1dGVkIGJlZm9yZSB0aGUgc2F2ZSBhY3Rpb24gaXMgZmlyZWQKICBwdWJsaWMgZnVuY3Rpb24gcHJlU2F2ZSgpICB7CgogIH0KICAKICAvLyBFeGVjdXRlZCBhZnRlciB0aGUgc2FjZSBhY3Rpb24gaXMgZmlyZWQKICBwdWJsaWMgZnVuY3Rpb24gcG9zdFNhdmUoKQogIHsKICAgIGlmKCR0aGlzLT5wdWJsaXNoZWQgJiYgJHRoaXMtPnNlbmRfdXBkYXRlX2ltbWVkaWF0ZWx5KQogICAgewogICAgICBpZigkZGlnZXN0ID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdEaWdlc3QnKSkKICAgICAgewogICAgICAgIGlmKG1ldGhvZF9leGlzdHMoJGRpZ2VzdCwgJ3NlbmRVcGRhdGVJbW1lZGlhdGVseScpKQogICAgICAgIHsKICAgICAgICAgICRyZXN1bHQgPSAkZGlnZXN0LT5zZW5kVXBkYXRlSW1tZWRpYXRlbHkoc2VsZjo6TU9EVUxFX05BTUUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gVE9ETzogTU9WRSBUSEUgVFdPIEZVTkNUSU9OUwogIAogIHB1YmxpYyBmdW5jdGlvbiBnZXRVcGRhdGVTdWJqZWN0KCkKICB7CiAgICByZXR1cm4gJHRoaXMtPnRpdGxlOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBkYXRlQm9keSgpCiAgewogICAgJG1vZHVsZSA9IGNtc191dGlsczo6Z2V0X21vZHVsZShzZWxmOjpNT0RVTEVfTkFNRSk7CiAgICAkbW9kdWxlLT5zbWFydHktPmFzc2lnbignaXRlbScsICR0aGlzKTsKICAgIHJldHVybiAkbW9kdWxlLT5Qcm9jZXNzVGVtcGxhdGVGb3IoJ2RpcmVjdF9lbWFpbCcsIGFycmF5KCkpOwogIH0KCiAgLy8gRXhlY3V0ZWQgaW4gdGhlIGVkaXQgYWN0aW9uIHdoZW4gZXZlcnl0aGluZyB3ZW50IGZpbmUgKEV4ZWN1dGVkIGFmdGVyIGl0ZW0gc2F2ZSB0aG91Z2gpCiAgcHVibGljIGZ1bmN0aW9uIHBvc3RBY3Rpb25zKCkgIHsKCiAgfQogIAogIC8vIEFsbG93IHlvdSB0byByZXN0cmljdCB0aGUgZnJvbnRlbmQgbGlzdCBhbmQgZGV0YWlscyB3aXRoIHJlcXVpcmVkIGZpbHRlcnMKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdsb2JhbEZyb250ZW5kRmlsdGVycyhNQ0ZDcml0ZXJpYSAmJGMsICRwYXJhbXMgPSBhcnJheSgpKSAgewoKICB9CiAgCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBidWlsZEZyb250ZW5kRmlsdGVycyhNQ0ZDcml0ZXJpYSAmJGMsICRwYXJhbXMpICB7CiAgICAvLyBNb2R1bGUgWHRlbmRlciBmaWx0ZXJzCiAgICBpZiAoaXNzZXQoJHBhcmFtc1snY3VycmVudHBhZ2UnXSkgJiYgY2xhc3NfZXhpc3RzKCdNWF9SZWxhdGlvbkxpbmsnKSkgewogICAgICAkYy0+YWRkKCdpZCcsIE1YX1JlbGF0aW9uTGluazo6Z2V0UmVsYXRlZEl0ZW1zSWRzKHNlbGY6Ok1PRFVMRV9OQU1FLCBjbXNfdXRpbHM6OmdldF9jdXJyZW50X3BhZ2VpZCgpLCAncGFnZXMnKSwgTUNGQ3JpdGVyaWE6OklOKTsKICAgIH0KICAgIGlmIChpc3NldCgkcGFyYW1zWydwYWdlcyddKSAmJiBjbGFzc19leGlzdHMoJ01YX1JlbGF0aW9uTGluaycpKSB7CiAgICAgICRnbHVlID0gaXNzZXQoJHBhcmFtc1snYWxsX3BhZ2VzJ10pID8gJ0FORCcgOiAnT1InOwogICAgICAkYy0+YWRkKCdpZCcsIE1YX1JlbGF0aW9uTGluazo6Z2V0UmVsYXRlZEl0ZW1zSWRzKHNlbGY6Ok1PRFVMRV9OQU1FLCBleHBsb2RlKCcsJywgJHBhcmFtc1sncGFnZXMnXSksICdwYWdlcycsICRnbHVlKSwgTUNGQ3JpdGVyaWE6OklOKTsKICAgIH0KICAgIGlmIChpc3NldCgkcGFyYW1zWydvcHRpb25zJ10pICYmIGNsYXNzX2V4aXN0cygnTVhfUmVsYXRpb25MaW5rJykpIHsKICAgICAgJGdsdWUgPSBpc3NldCgkcGFyYW1zWydhbGxfb3B0aW9ucyddKSA/ICdBTkQnIDogJ09SJzsKICAgICAgJGMtPmFkZCgnaWQnLCBNWF9SZWxhdGlvbkxpbms6OmdldFJlbGF0ZWRJdGVtc0lkcyhzZWxmOjpNT0RVTEVfTkFNRSwgZXhwbG9kZSgnLCcsICRwYXJhbXNbJ29wdGlvbnMnXSksICdvcHRpb25zJywgJGdsdWUpLCBNQ0ZDcml0ZXJpYTo6SU4pOwogICAgfQoKICAgIGlmIChpc3NldCgkcGFyYW1zWydteGZpbHRlcnNfb3B0aW9ucyddKSAmJiBpc19hcnJheSgkcGFyYW1zWydteGZpbHRlcnNfb3B0aW9ucyddKSkgewogICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2ggKCRwYXJhbXNbJ214ZmlsdGVyc19vcHRpb25zJ10gYXMgJG9wdGlvbikgewogICAgICAgIGlmICgkb3B0aW9uKSB7CiAgICAgICAgICAkb3B0aW9uc1tdID0gJG9wdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNvdW50KCRvcHRpb25zKSAgJiYgY2xhc3NfZXhpc3RzKCdNWF9SZWxhdGlvbkxpbmsnKSkgewogICAgICAgICRjLT5hZGQoJ2lkJywgTVhfUmVsYXRpb25MaW5rOjpnZXRSZWxhdGVkSXRlbXNJZHMoc2VsZjo6TU9EVUxFX05BTUUsICRvcHRpb25zLCAnb3B0aW9ucycsICdBTkQnKSwgTUNGQ3JpdGVyaWE6OklOKTsKICAgICAgfQogICAgfQoKICAgIGlmIChpc3NldCgkcGFyYW1zWydteGZpbHRlcnNfcGFnZXMnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snbXhmaWx0ZXJzX3BhZ2VzJ10pKSB7CiAgICAgICRwYWdlcyA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2ggKCRwYXJhbXNbJ214ZmlsdGVyc19wYWdlcyddIGFzICRwYWdlKSB7CiAgICAgICAgaWYgKCRwYWdlKSB7CiAgICAgICAgICAkcGFnZXNbXSA9ICRwYWdlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY291bnQoJHBhZ2VzKSAgJiYgY2xhc3NfZXhpc3RzKCdNWF9SZWxhdGlvbkxpbmsnKSkgewogICAgICAgICRjLT5hZGQoJ2lkJywgTVhfUmVsYXRpb25MaW5rOjpnZXRSZWxhdGVkSXRlbXNJZHMoc2VsZjo6TU9EVUxFX05BTUUsICRwYWdlcywgJ3BhZ2VzJywgJ0FORCcpLCBNQ0ZDcml0ZXJpYTo6SU4pOwogICAgICB9CiAgICB9CgogICAgLy8gU0VBUkNICgogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2ZpbHRlcl90aXRsZSddKSkgewogICAgICAkZmlsdGVyX3RpdGxlID0gdHJpbShodG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snZmlsdGVyX3RpdGxlJ10pKTsKICAgICAgJGZpbHRlcl90aXRsZSA9IHN0cl9yZXBsYWNlKGFycmF5KCclJywgJz8nKSwgJyAnLCAkZmlsdGVyX3RpdGxlKTsKICAgICAgaWYgKCFlbXB0eSgkZmlsdGVyX3RpdGxlKSkgewogICAgICAgIHByZWdfbWF0Y2hfYWxsKCcvKD86IihbXiJdKykiKXwoXHcrKS8nLCAkZmlsdGVyX3RpdGxlLCAkbWF0Y2hlcyk7CiAgICAgICAgJGNsYXVzZXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRtYXRjaGVzWzBdIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAkY2xhdXNlc1ska2V5XSA9ICRtYXRjaGVzWzFdWyRrZXldID8gJG1hdGNoZXNbMV1bJGtleV0gOiAkbWF0Y2hlc1syXVska2V5XTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoJGNsYXVzZXMgYXMgJGNsYXVzZSkgewogICAgICAgICAgJGMtPmFkZCgndGl0bGUnLCAnJScgLiAkY2xhdXNlIC4gJyUnLCBNQ0ZDcml0ZXJpYTo6TElLRSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2ZpbHRlcl9hbGwnXSkpIHsKICAgICAgJGZpbHRlcl9hbGwgPSB0cmltKGh0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydmaWx0ZXJfYWxsJ10pKTsKICAgICAgJGZpbHRlcl9hbGwgPSBzdHJfcmVwbGFjZShhcnJheSgnJScsICc/JyksICcgJywgJGZpbHRlcl9hbGwpOwogICAgICBpZiAoIWVtcHR5KCRmaWx0ZXJfYWxsKSkgewogICAgICAgIHByZWdfbWF0Y2hfYWxsKCcvKD86IihbXiJdKykiKXwoXHcrKS8nLCAkZmlsdGVyX2FsbCwgJG1hdGNoZXMpOwogICAgICAgICRjbGF1c2VzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkbWF0Y2hlc1swXSBhcyAka2V5ID0+ICR2YWx1ZSkgewogICAgICAgICAgJGNsYXVzZXNbJGtleV0gPSAkbWF0Y2hlc1sxXVska2V5XSA/ICRtYXRjaGVzWzFdWyRrZXldIDogJG1hdGNoZXNbMl1bJGtleV07CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRjbGF1c2VzIGFzICRjbGF1c2UpIHsKICAgICAgICAgICRjLT5hZGQoJ2Z1bGxfdGV4dF9zZWFyY2gnLCAnJScgLiAkY2xhdXNlIC4gJyUnLCBNQ0ZDcml0ZXJpYTo6TElLRSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gTW9kdWxlIEZpbHRlcnMKCiAgICB7e2ZvcmVhY2ggZnJvbT0kZmlsdGVycyBpdGVtPWZpbHRlcn19CiAgICBpZiAoaXNzZXQoJHBhcmFtc1sne3skZmlsdGVyLm5hbWV9fSddKSAmJiAkcGFyYW1zWyd7eyRmaWx0ZXIubmFtZX19J10gIT0gJycpIHsKICAgICAge3tpZiBpbl9hcnJheSgkZmlsdGVyLnR5cGUsIGFycmF5KCdsZXNzJywgJ2xlc3NfZXF1YWwnLCAnZ3JlYXRlcicsICdncmVhdGVyX2VxdWFsJykpfX0KICAgICAgICAkYy0+YWRkKCd7eyRmaWx0ZXIuZmllbGR9fScsIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmNsZWFuRmlsdGVyVmFsdWUoJ3t7JGZpbHRlci5maWVsZH19JywgJHBhcmFtc1sne3skZmlsdGVyLm5hbWV9fSddKSwgTUNGQ3JpdGVyaWE6Ont7JGZpbHRlci5jcml0ZXJpYX19KTsKICAgICAge3tlbHNlaWYgIGluX2FycmF5KCRmaWx0ZXIudHlwZSwgYXJyYXkoJ2xpa2Vfd2lsZCcpKX19CiAgICAgICAgJGMtPmFkZCgne3skZmlsdGVyLmZpZWxkfX0nLCAnJScgLiB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpjbGVhbkZpbHRlclZhbHVlKCd7eyRmaWx0ZXIuZmllbGR9fScsICRwYXJhbXNbJ3t7JGZpbHRlci5uYW1lfX0nXSkgLiAnJScsIE1DRkNyaXRlcmlhOjp7eyRmaWx0ZXIuY3JpdGVyaWF9fSk7CiAgICAgIHt7ZWxzZWlmICBpbl9hcnJheSgkZmlsdGVyLnR5cGUsIGFycmF5KCdpbicpKX19CiAgICAgICAgJGMtPmFkZCgne3skZmlsdGVyLmZpZWxkfX0nLCBleHBsb2RlKCcsJyx7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpjbGVhbkZpbHRlclZhbHVlKCd7eyRmaWx0ZXIuZmllbGR9fScsICRwYXJhbXNbJ3t7JGZpbHRlci5uYW1lfX0nXSkpLCBNQ0ZDcml0ZXJpYTo6e3skZmlsdGVyLmNyaXRlcmlhfX0pOwogICAgICB7e2Vsc2V9fQogICAgICAgICRjLT5hZGQoJ3t7JGZpbHRlci5maWVsZH19Jywge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6Y2xlYW5GaWx0ZXJWYWx1ZSgne3skZmlsdGVyLmZpZWxkfX0nLCAkcGFyYW1zWyd7eyRmaWx0ZXIubmFtZX19J10pLCBNQ0ZDcml0ZXJpYTo6e3skZmlsdGVyLmNyaXRlcmlhfX0pOwogICAgICB7ey9pZn19CiAgICB9CiAgICB7ey9mb3JlYWNofX0KCiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFuRmlsdGVyVmFsdWUoJG5hbWUsICR2YWx1ZSkKICB7CiAgICAkdmFsdWUgPSBodG1sZW50aXRpZXMoJHZhbHVlKTsKICAgIHN3aXRjaCgkbmFtZSkKICAgIHsKICAgICAge3tmb3JlYWNoIGZyb209JGZpbHRlcnMgaXRlbT1maWx0ZXJ9fQogICAgICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgICAgICB7e2lmICRmaWx0ZXIuZmllbGQgPT0gJGZpZWxkLm5hbWV9fQogICAgICAgICAgICB7e2lmICRmaWVsZC50eXBlID09ICdkYXRlJyAmJiAkZmlsdGVyLmNyaXRlcmlhICE9ICdMSUtFJ319CiAgICAgIGNhc2UgJ3t7JGZpbHRlci5maWVsZH19JzoKICAgICAgICBpZihwcmVnX21hdGNoKCcvXihbMC05XXsyLDR9KS0oWzAtMV1bMC05XSktKFswLTNdWzAtOV0pPyQvJywgJHZhbHVlKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGlmKHByZWdfbWF0Y2goJy9eKFswLTNdWzAtOV0pXC8oWzAtMV1bMC05XSlcLyhbMC05XXs0fSk/JC8nLCAkdmFsdWUpICE9IDApCiAgICAgICAgICB7CiAgICAgICAgICAgIGxpc3QoJGQsJG0sJHkpID0gZXhwbG9kZSgnLycsJHZhbHVlKTsKICAgICAgICAgICAgJHZhbHVlID0gJHkuJy0nLiRtLictJy4kZDsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgICAkdmFsdWUgPSBkYXRlKCdZLW0tZCcsIHN0cnRvdGltZSgkdmFsdWUpKTsKICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICAgICAgICB7ey9pZn19CiAgICAgICAgICB7ey9pZn19CiAgICAgICAge3svZm9yZWFjaH19CiAgICAgIHt7L2ZvcmVhY2h9fQogICAgICBkZWZhdWx0OgogICAgICAgIGJyZWFrOwogICAgfQogICAgCiAgICByZXR1cm4gJHZhbHVlOwogIH0KCiAgLy8gRnJvbnRlbmQgZXZlbnRzCiAgCiAgcHVibGljIGZ1bmN0aW9uIGV2ZW50KCRldmVudCkKICB7CiAgICAvLyBUaGlzIGFsbG93cyB5b3UgdG8gdHJhY2sgZXZlbnRzIGZyb20gc3BlY2lmaWMgYWN0aW9ucwogICAgcmV0dXJuIG51bGw7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXZlbnRzKCRldmVudCwgJGl0ZW1zKQogIHsKICAgIC8vIFRoaXMgYWxsb3dzIHlvdSB0byB0cmFjayBldmVudHMgZnJvbSBzcGVjaWZpYyBhY3Rpb25zCiAgICByZXR1cm4gbnVsbDsKICB9CiAgCiAgCiAgLy8gRlJPTlRFTkQgRk9STVMgOiBDSEVDSyBQRVJNSVNTSU9OUwogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2hlY2tQZXJtaXNzaW9ucygkcGFyYW1zID0gYXJyYXkoKSkgIHsKICAgIHJldHVybiB0cnVlOyAvLyBDYW4gYmUgb3ZlcmlkZSBpbiB0aGUgY3VzdG9tIGxvZ2ljCiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBpc1VzZXJJdGVtKCkgIHsKICAgICR1c2VyID0gQ01TVXNlcnM6OmdldFVzZXIoKTsKICAgIGlmIChpc19vYmplY3QoJHVzZXIpKQogICAgewogICAgICBpZiAoJHVzZXItPmdldElkKCkgPT0gJGl0ZW0tPmdlVXNlcklkKCkpCiAgICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICAvLyBFeGVjdXRlZCBpbiB0aGUgdXNlcl9mb3JtIGFjdGlvbiB3aGVuIGV2ZXJ5dGhpbmcgd2VudCBmaW5lCiAgcHVibGljIGZ1bmN0aW9uIHVzZXJQb3N0QWN0aW9ucygkaWQsICRyZXR1cm5pZCwkZm9ybSA9IG51bGwpICB7CiAgICAkdGhpcy0+cG9zdEFjdGlvbnMoKTsKICB9Cn0KCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/lib/class.MCFModuleObjectPeer.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3RQZWVyIHsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvU2VsZWN0KE1DRkNyaXRlcmlhICRjID0gbnVsbCkgewoJCSRkYiA9IGNtc191dGlsczo6Z2V0X2RiKCk7CgkJJGMgPSBjbG9uZSAkYzsKCQkkcXVlcnkgPSAkYy0+YnVpbGRRdWVyeShjbXNfZGJfcHJlZml4KCkgLiAnbW9kdWxlX3t7JHRhYmxlX25hbWV9fScpOwoJCSRyZXN1bHQgPSAkZGItPmV4ZWN1dGUoJHF1ZXJ5LCAkYy0+dmFsdWVzKTsKCQkkb2JqZWN0cyA9IGFycmF5KCk7CgkJd2hpbGUgKCRyZXN1bHQgJiYgJHJvdyA9ICRyZXN1bHQtPkZldGNoUm93KCkpIHsKCQkJJG9iamVjdCA9IG5ldyBzZWxmKCk7CgkJCSRvYmplY3QtPnBvcHVsYXRlRnJvbUFycmF5KCRyb3cpOwoJCQkkb2JqZWN0LT5pc19tb2RpZmllZCA9IGZhbHNlOwoJCQkkb2JqZWN0c1tdID0gJG9iamVjdDsKCQl9CgkJcmV0dXJuICRvYmplY3RzOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZG9TZWxlY3RPbmUoTUNGQ3JpdGVyaWEgJGMgPSBudWxsKSB7CiAgICAgICAgCiAgICB9Cgp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/lib/class.MCFModuleViews.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCgkvLyBDTEFTUyBUTyBIQU5ETEUgVEhFIFZJRVdTCiovCgpjbGFzcyB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19Vmlld3MgewoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZG1pbkl0ZW1zKCRtb2R1bGUsJGlkLCRyZXR1cm5pZCwkdmlldywkaXRlbXMsJHBhcmVudF9pZD1udWxsKQp7CglpZiAoIWNtc21zKCkpIGV4aXQ7CgoJLy8gUHJldmlldyBjb2RlCglpZiAoIWlzc2V0KCRfU0VTU0lPTlsne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSddWydwcmV2aWV3X2tleSddKSkKCXsKCQkkX1NFU1NJT05bJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nXVsncHJldmlld19rZXknXSA9IGJhc2U2NF9lbmNvZGUodGltZSgpKTsKCX0KCglpZiAoaXNfbnVsbCgkcGFyZW50X2lkKSAmJiAhJHZpZXctPmdldElzVHJlZSgpKQoJewoJCSR0b3RhbEl0ZW1zID0gJHZpZXctPmdldFRvdGFsSXRlbXMoKTsKCX0KCWVsc2UKCXsKCQkkdG90YWxJdGVtcyA9IGNvdW50KCRpdGVtcyk7Cgl9CgkJCgkkbW9kdWxlLT5zbWFydHktPmFzc2lnbigndG90YWxfaXRlbXMnLCAkdG90YWxJdGVtcyk7CgkJCgkkaWRzID0gYXJyYXkoKTsKCSRyb3dzID0gYXJyYXkoKTsKCQoJLy8gVFJFRQoJCglpZigkdmlldy0+Z2V0SXNUcmVlKCkpCgl7CgkJJHRyZWUgPSBuZXcgTUNGVHJlZSgkaXRlbXMsICdwYXJlbnRfaWQnKTsKCQkkaXRlbXMgPSAkdHJlZS0+Z2V0RmxhdGVuVHJlZSgpOwoJfQoJCgkvLyBFTkQgVFJFRQoKCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewoJCSRpZHNbXSA9ICRpdGVtLT5nZXRJZCgpOwoJCSRyb3dzWyRpdGVtLT5nZXRJZCgpXSA9IGFycmF5KAoJCSAgJ2lkJyA9PiAkaXRlbS0+Z2V0SWQoKSwKCQkgICdwYXJlbnRfaWQnID0+ICRpdGVtLT5nZXRQYXJlbnRJZCgpLAoJCQkndGl0bGVsaW5rJyA9PiAkbW9kdWxlLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXQnLCAkcmV0dXJuaWQsIChzdHJpbmcpJGl0ZW0sIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpLCAnaXRlbV9pZCcgPT4gJGl0ZW0tPmdldElkKCkpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9Iml0ZW1saW5rIicpLAoJCQkncHVibGlzaGxpbmsnID0+ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAncHVibGlzaCcsICRyZXR1cm5pZCwgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgoJGl0ZW0tPmdldFB1Ymxpc2hlZCgpID8gJ2ljb25zL3N5c3RlbS90cnVlLmdpZicgOiAnaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZicpLCAoJGl0ZW0tPmdldFB1Ymxpc2hlZCgpID8gJG1vZHVsZS0+TGFuZygndW5wdWJsaXNoJykgOiAkbW9kdWxlLT5MYW5nKCdwdWJsaXNoJykpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpLCAnaXRlbV9pZCcgPT4gJGl0ZW0tPmdldElkKCkpKSwKCQkJJ2RlbGV0ZWxpbmsnID0+ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRlJywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICRtb2R1bGUtPkxhbmcoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpLCAnaXRlbV9pZCcgPT4gJGl0ZW0tPmdldElkKCkpLCAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGVudHJ5PycpLAoJCQknZWRpdGxpbmsnID0+ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgY21zbXMoKS0+Z2V0X3ZhcmlhYmxlKCdhZG1pbnRoZW1lJyktPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJGl0ZW0tPmdldFRpdGxlKCksICcnLCAnJywgJ3N5c3RlbWljb24nKSwgYXJyYXkoJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCksICdpdGVtX2lkJyA9PiAkaXRlbS0+Z2V0SWQoKSkpLAoJCQkncHJldmlld2xpbmsnID0+ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZGV0YWlsJywgJG1vZHVsZS0+Z2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9wYWdlJyksIGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS92aWV3LmdpZicsICRtb2R1bGUtPmxhbmcoJ3ByZXZpZXdfcycsJGl0ZW0tPmdldFRpdGxlKCkpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdwcmV2aWV3X2tleScgPT4gJF9TRVNTSU9OWyd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19J11bJ3ByZXZpZXdfa2V5J10sICdpdGVtX2lkJyA9PiAkaXRlbS0+Z2V0SWQoKSksICcnLCBmYWxzZSxmYWxzZSwnIHRhcmdldD0iX25ldyInLCB0cnVlKQoKCQkpOwoJCQoJCWlmKCR2aWV3LT5nZXRJc1RyZWUoKSkJewoJCQkkcm93c1skaXRlbS0+Z2V0SWQoKV1bJ2xldmVsJ10gPSAkaXRlbS0+Z2V0TGV2ZWwoKTsKCQkJCgkJCWlmKCRpdGVtLT5oYXNDaGlsZHJlbnMoKSkKCQkJewoJCQkJaWYoJHZpZXctPmlzQnJhbmNoZU9wZW4oJGl0ZW0tPmdldElkKCkpKQoJCQkJewoJCQkJCSRyb3dzWyRpdGVtLT5nZXRJZCgpXVsnYXJyb3cnXSA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vY29udHJhY3QuZ2lmJywgJG1vZHVsZS0+bGFuZygnY29sbGFwc2UnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgnY2xvc2VfYnJhbmNoZScgPT4gJGl0ZW0tPmdldElkKCksJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCkpLCAnJywgZmFsc2UsZmFsc2UsJycsIHRydWUpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSRyb3dzWyRpdGVtLT5nZXRJZCgpXVsnYXJyb3cnXSA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZXhwYW5kLmdpZicsICRtb2R1bGUtPmxhbmcoJ2V4cGFuZCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksIGFycmF5KCdvcGVuX2JyYW5jaGUnID0+ICRpdGVtLT5nZXRJZCgpLCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpKSwgJycsIGZhbHNlLGZhbHNlLCcnLCB0cnVlKTsKCQkJCX0KCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRyb3dzWyRpdGVtLT5nZXRJZCgpXVsnYXJyb3cnXSA9IGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL2V4dHJhL3NwYWNlLmdpZicsICcnLCAxMSwgMTYsICdzeXN0ZW1pY29uJyk7CgkJCX0KCQkJLy8gJHJvd3NbJGl0ZW0tPmdldElkKCldWydmcm9udHNwYWNlJ10gPSAkaXRlbS0+Z2V0TGV2ZWwoKSAqICcmbmJzcDsmbmJzcDsnOwoJCX0KCQkJCQoJCWlmKCRtb2R1bGUtPmdldFByZWZlcmVuY2UoJ3VzZV9jbW9uJywgJzAnKSA9PSAnMScpCgkJewoJCQkkdXJsID0gJG1vZHVsZS0+Q3JlYXRlTGluaygkaWQsICdkZXRhaWwnLCAkbW9kdWxlLT5nZXRQcmVmZXJlbmNlKCdjbW9uX2RlZmF1bHRfcGFnZScpLCAnJywgYXJyYXkoJ2RldGFpbHRlbXBsYXRlJyA9PiAkbW9kdWxlLT5nZXRQcmVmZXJlbmNlKCdjbW9uX3RlbXBsYXRlJyksICdpdGVtX2lkJyA9PiAkaXRlbS0+Z2V0SWQoKSksICcnLCB0cnVlLGZhbHNlLCcnLCB0cnVlKTsKCQkJJHBsYWluX3VybCA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZGV0YWlsJywgJG1vZHVsZS0+Z2V0UHJlZmVyZW5jZSgnY21vbl9kZWZhdWx0X3BhZ2UnKSwgJycsIGFycmF5KCdzaG93dGVtcGxhdGUnID0+ICdmYWxzZScsICdkZXRhaWx0ZW1wbGF0ZScgPT4gJG1vZHVsZS0+Z2V0UHJlZmVyZW5jZSgnY21vbl90ZW1wbGF0ZV9wbGFpbicpLCAnaXRlbV9pZCcgPT4gJGl0ZW0tPmdldElkKCkpLCAnJywgdHJ1ZSxmYWxzZSwnJywgdHJ1ZSk7CgkJCQoJCQkkZnJvbSA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2Ntb25fZnJvbScsIG51bGwpOwoJCQkkZnJvbV9lbWFpbCA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2Ntb25fZnJvbV9lbWFpbCcsIG51bGwpOwoJCQkKCQkJJGNtb24gPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0NNb24nKTsKCQkJCgkJCWlmKCRjbW9uKQoJCQl7CgkJCQkkcm93c1skaXRlbS0+Z2V0SWQoKV1bJ2Ntb24nXSA9ICAkY21vbi0+Y3JlYXRlU2VuZExpbmsoJGlkLCRyZXR1cm5pZCwkdXJsLCRwbGFpbl91cmwsICRmcm9tLCAkZnJvbV9lbWFpbCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkcm93c1skaXRlbS0+Z2V0SWQoKV1bJ2Ntb24nXSA9ICAnJzsKCQkJfQoJCQkKCQl9CgkJZWxzZQoJCXsKCQkJJHJvd3NbJGl0ZW0tPmdldElkKCldWydjbW9uJ10gPSAnJzsKCQl9CgkJCgkJaWYgKCgkbW9kdWxlLT5nZXRQcmVmZXJlbmNlKCd1c2VfdHdpdHRlcicsICcwJykgPT0gJzEnKSAmJiBNQ0ZUb29sczo6SXNNb2R1bGVBY3RpdmUoJ1R3aXR0ZXInKSkKCQl7CgkJCSR1cmwgPSAkbW9kdWxlLT5DcmVhdGVMaW5rKCRpZCwgJ2RldGFpbCcsICRtb2R1bGUtPmdldFByZWZlcmVuY2UoJ2RlZmF1bHRfcGFnZScpLCAnJywgYXJyYXkoJ2RldGFpbHRlbXBsYXRlJyA9PiAkbW9kdWxlLT5nZXRQcmVmZXJlbmNlKCdjbW9uX3RlbXBsYXRlJyksICdpdGVtX2lkJyA9PiAkaXRlbS0+Z2V0SWQoKSksICcnLCB0cnVlLGZhbHNlLCcnLCB0cnVlKTsKCQkJJHRpdGxlID0gJGl0ZW0tPmdldFRpdGxlKCk7CgkJCQoJCQkkc3RhdHVzID0gc3RyX3JlcGxhY2UoJ3skdGl0bGV9JywgJHRpdGxlLCBzdHJfcmVwbGFjZSgneyR1cmx9JywgJHVybCwgJG1vZHVsZS0+Z2V0UHJlZmVyZW5jZSgndHdpdHRlcl90ZW1wbGF0ZScsICd7JHRpdGxlfSAtIHskdXJsfScpKSk7IC8vIFRPRE86IFJlcGxhY2UgdGhhdCBieSByZWFsIHNtYXJ0eQoJCQkKCQkJJHJvd3NbJGl0ZW0tPmdldElkKCldWyd0d2l0dGVyJ10gPSAgY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdUd2l0dGVyJyktPmNyZWF0ZVNlbmRMaW5rKCRpZCwkcmV0dXJuaWQsYXJyYXkoJ3N0YXR1cycgPT4gJHN0YXR1cykpOwoJCX0KCQllbHNlCgkJewoJCQkkcm93c1skaXRlbS0+Z2V0SWQoKV1bJ3R3aXR0ZXInXSA9ICcnOwoJCX0KCQkKCQlpZiAoISR2aWV3LT5pc0N1c3RvbU9yZGVyKCkgfHwgJHZpZXctPmdldElzVHJlZSgpKSB7IC8vJiYgaXNfbnVsbCgkcGFyZW50X2lkKQoJCQkKCQkgICAgLy8gJGluZGV4ID0gKCR2aWV3LT5nZXRQYWdlKCkgLSAxKSAqICR2aWV3LT5nZXRJdGVtc1BlclBhZ2UoKSArICRpOyAvLyAkaSB0byByZXBsYWNlCgkJICAJCgkJCQlpZigkdmlldy0+Z2V0SXNUcmVlKCkpCgkJCQl7CgkJCQkJJHNpYmxpbmcgPSAkaXRlbS0+Y291bnRTaWJsaW5nKCk7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHNpYmxpbmcgPSAkaXRlbS0+Y291bnRTaWJsaW5nKCdwYXJlbnRfaXRlbScpOwkJCQkJCgkJCQl9CgkJCQoJCSAgCWlmICgkaXRlbS0+b3JkZXJfYnkgPiAxKSB7CgkgICAgCQkkcm93c1skaXRlbS0+Z2V0SWQoKV1bJ21vdmV1cGxpbmsnXSA9ICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnbW92ZXVwJywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vYXJyb3ctdS5naWYnLCAkaXRlbS0+Z2V0VGl0bGUoKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSwgJ2l0ZW1faWQnID0+ICRpdGVtLT5nZXRJZCgpKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJpdGVtbGluayInKTsKCSAgICAJfQoJICAgIAlpZiAoJGl0ZW0tPm9yZGVyX2J5IDwgJHNpYmxpbmcpIHsKCSAgICAJCSRyb3dzWyRpdGVtLT5nZXRJZCgpXVsnbW92ZWRvd25saW5rJ10gPSAkbW9kdWxlLT5DcmVhdGVMaW5rKCRpZCwgJ21vdmVkb3duJywgJHJldHVybmlkLCBjbXNtcygpLT5nZXRfdmFyaWFibGUoJ2FkbWludGhlbWUnKS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vYXJyb3ctZC5naWYnLCAkaXRlbS0+Z2V0VGl0bGUoKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSwgJ2l0ZW1faWQnID0+ICRpdGVtLT5nZXRJZCgpKSwgJycsIGZhbHNlLCBmYWxzZSwgJ2NsYXNzPSJpdGVtbGluayInKTsKCSAgICAJfQoJCX0KCX0KCQoJJG1vZHVsZS0+c21hcnR5LT5hc3NpZ24oJ3Jvd3MnLCAkcm93cyk7CgkKCS8vIEVYVFJBIENPTFVNTlMKCSRyZXN1bHRzID0gYXJyYXkoKTsKCQoJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKQoJewoJCQoJe3tpZiBpc3NldCgkaXNfdXNlcl9tb2R1bGUpfX0KCQkkcmVzdWx0c1snVXNlciddWyRpdGVtLT5nZXRJZCgpXVtdID0gKHN0cmluZykkaXRlbS0+Z2V0VXNlcigpOwoJe3svaWZ9fQoJCgl7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQoJe3tpZiAkZmllbGQuY29sdW1uID09ICd0cnVlJyB8fCAkZmllbGQuY29sdW1uID09ICcxJ319CgkJe3tpZiAkZmllbGQudHlwZSA9PSAnZGF0ZSd9fQoJCQkkcmVzdWx0c1sne3skZmllbGQubGFiZWx9fSddWyRpdGVtLT5nZXRJZCgpXVtdID0gZGF0ZSgkbW9kdWxlLT5nZXRQcmVmZXJlbmNlKCdkYXRlX2Zvcm1hdCcsICdkL20vWScpLCBzdHJ0b3RpbWUoJGl0ZW0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCkpKTsKCQl7e2Vsc2VpZiAkZmllbGQudHlwZSA9PSAnZGF0ZXRpbWUnfX0KCQkJJHJlc3VsdHNbJ3t7JGZpZWxkLmxhYmVsfX0nXVskaXRlbS0+Z2V0SWQoKV1bXSA9IGRhdGUoJG1vZHVsZS0+Z2V0UHJlZmVyZW5jZSgnZGF0ZV9mb3JtYXQnLCAnZC9tL1kgSDppOnMnKSwgJGl0ZW0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCkpOwoJCXt7ZWxzZWlmICRmaWVsZC50eXBlID09ICdtb2R1bGUnfX0KCQkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0KCQkJCSRyZXN1bHRzWyd7eyRmaWVsZC5sYWJlbH19J11bJGl0ZW0tPmdldElkKCldW10gPSBpbXBsb2RlKCcsICcsICRpdGVtLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fUl0ZW1zKCkpOwoJCQl7e2Vsc2V9fQoJCQkJJHJlc3VsdHNbJ3t7JGZpZWxkLmxhYmVsfX0nXVskaXRlbS0+Z2V0SWQoKV1bXSA9ICRpdGVtLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fU9iamVjdCgpOwkJCgkJCXt7L2lmfX0JCQoJCXt7ZWxzZWlmICRmaWVsZC50eXBlID09ICdzZWxlY3QnfX0KCQkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0KCQkJCSRyZXN1bHRzWyd7eyRmaWVsZC5sYWJlbH19J11bJGl0ZW0tPmdldElkKCldW10gPSBpbXBsb2RlKCcsICcsICRpdGVtLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVZhbHVlcygpKTsKCQkJe3tlbHNlfX0KCQkJCSRyZXN1bHRzWyd7eyRmaWVsZC5sYWJlbH19J11bJGl0ZW0tPmdldElkKCldW10gPSAkaXRlbS0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX1WYWx1ZSgpOwkJCgkJCXt7L2lmfX0JCQkJCQoJCXt7ZWxzZWlmICRmaWVsZC50eXBlID09ICdncm91cCd9fQoJCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5tdWx0aXBsZSl9fQoJCQkJJHJlc3VsdHNbJ3t7JGZpZWxkLmxhYmVsfX0nXVskaXRlbS0+Z2V0SWQoKV1bXSA9IGltcGxvZGUoJywgJywgJGl0ZW0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWVzKCkpOwoJCQl7e2Vsc2V9fQoJCQkJJHJlc3VsdHNbJ3t7JGZpZWxkLmxhYmVsfX0nXVskaXRlbS0+Z2V0SWQoKV1bXSA9ICRpdGVtLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVZhbHVlKCk7CQkKCQkJe3svaWZ9fQkKCQl7e2Vsc2VpZiAkZmllbGQudHlwZSA9PSAndXNlcid9fQoJCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5tdWx0aXBsZSl9fQoJCQkJJHJlc3VsdHNbJ3t7JGZpZWxkLmxhYmVsfX0nXVskaXRlbS0+Z2V0SWQoKV1bXSA9IGltcGxvZGUoJywgJywgJGl0ZW0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWVzKCkpOwoJCQl7e2Vsc2V9fQoJCQkJJHJlc3VsdHNbJ3t7JGZpZWxkLmxhYmVsfX0nXVskaXRlbS0+Z2V0SWQoKV1bXSA9ICRpdGVtLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVZhbHVlKCk7CQkKCQkJe3svaWZ9fQkJCgkJe3tlbHNlaWYgJGZpZWxkLnR5cGUgPT0gJ2NvdW50cnknfX0KCQkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0KCQkJCSRyZXN1bHRzWyd7eyRmaWVsZC5sYWJlbH19J11bJGl0ZW0tPmdldElkKCldW10gPSBpbXBsb2RlKCcsICcsICRpdGVtLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVZhbHVlcygpKTsKCQkJe3tlbHNlfX0KCQkJCSRyZXN1bHRzWyd7eyRmaWVsZC5sYWJlbH19J11bJGl0ZW0tPmdldElkKCldW10gPSAkaXRlbS0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX1WYWx1ZSgpOwkJCgkJCXt7L2lmfX0KCQl7e2Vsc2VpZiAkZmllbGQudHlwZSA9PSAndXNlcid9fQoJCQlpZihjbGFzc19leGlzdHMoJ0NNU1VzZXInKSkKCQkJewoJCQkJJHJlc3VsdHNbJ3t7JGZpZWxkLmxhYmVsfX0nXVskaXRlbS0+Z2V0SWQoKV1bXSA9IENNU1VzZXI6OmdldFVzZXJOYW1lQnlJZCgkaXRlbS0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX0oKSk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkcmVzdWx0c1sne3skZmllbGQubGFiZWx9fSddWyRpdGVtLT5nZXRJZCgpXVtdID0gJGl0ZW0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCk7CgkJCX0KCQl7e2Vsc2V9fQoJCQkkcmVzdWx0c1sne3skZmllbGQubGFiZWx9fSddWyRpdGVtLT5nZXRJZCgpXVtdID0gJGl0ZW0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCk7CgkJe3svaWZ9fQoJe3svaWZ9fQoJe3svZm9yZWFjaH19Cgl9CgogIGlmKGNsYXNzX2V4aXN0cygnTVhfUmVsYXRpb24nKSkKICB7CiAgICAkY29sdW1ucyA9IE1YX1JlbGF0aW9uOjpnZXRDb2x1bW5zKCRtb2R1bGUtPmdldE5hbWUoKSk7CiAgCWZvcmVhY2ggKCRjb2x1bW5zIGFzICRjb2x1bW4pIAogIAl7CiAgCSAgJHJlc3VsdHNbJGNvbHVtbi0+Z2V0VGl0bGUoZmFsc2UsIHRydWUpXSA9IE1YX1JlbGF0aW9uTGluazo6Z2V0UmVsYXRlZEl0ZW1zQnlSZWxhdGlvbnMoJGNvbHVtbiwgJGlkcyk7CiAgCX0KICB9CgogCSRtb2R1bGUtPnNtYXJ0eS0+YXNzaWduKCdjb2x1bW5zJywgJHJlc3VsdHMpOwoJLy8gRU5EIEVYVFJBIENPTFVNTlMKCgkkdG90YWxQYWdlcyA9ICR2aWV3LT5nZXRUb3RhbFBhZ2VzKCk7CgoJaWYgKGlzX251bGwoJHBhcmVudF9pZCkpCgl7CgkJJHBhZ2VzID0gYXJyYXkoKTsKCQlmb3IgKCRpID0gMTsgJGkgPD0gJHRvdGFsUGFnZXM7ICsrJGkpIHsKCQkJJHBhZ2VzW10gPSAkbW9kdWxlLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJGksIGFycmF5KCd2aWV3JyA9PiAkdmlldy0+Z2V0VmlldygpLCAncGFnZScgPT4gJGkpLCAnJywgZmFsc2UsIGZhbHNlKTsKCQl9CgkJCgkJJG1vZHVsZS0+c21hcnR5LT5hc3NpZ24oJ3BhZ2VzJywgJHBhZ2VzKTsKCQkkbW9kdWxlLT5zbWFydHktPmFzc2lnbignY3VycmVudFBhZ2UnLCAkdmlldy0+Z2V0UGFnZSgpKTsKCQkkbW9kdWxlLT5zbWFydHktPmFzc2lnbignYWRkX2l0ZW1fbGluaycsICRtb2R1bGUtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdCcsICRyZXR1cm5pZCwgJ0FkZCBpdGVtJywgYXJyYXkoJ3ZpZXcnID0+ICR2aWV3LT5nZXRWaWV3KCkpKSk7CgkJJG1vZHVsZS0+c21hcnR5LT5hc3NpZ24oJ2FkZF9pdGVtX2ljb24nLCAkbW9kdWxlLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXQnLCAkcmV0dXJuaWQsIGNtc21zKCktPmdldF92YXJpYWJsZSgnYWRtaW50aGVtZScpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJG1vZHVsZS0+TGFuZygnYWRkX2l0ZW0nKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLCBhcnJheSgndmlldycgPT4gJHZpZXctPmdldFZpZXcoKSkpKTsKCgoJCSRjdXJyZW50Q2F0ZWdvcnlGaWx0ZXJzID0gJHZpZXctPmdldENhdGVnb3J5RmlsdGVycygpOwoJCSRjdXJyZW50UGFnZUZpbHRlcnMgPSAkdmlldy0+Z2V0UGFnZUZpbHRlcnMoKTsKCQkkY3VycmVudE1vZHVsZUZpbHRlcnMgPSAkdmlldy0+Z2V0TW9kdWxlRmlsdGVycygpOwoJCQoJCSRmb3JtID0gbmV3IENNU0Zvcm0oJG1vZHVsZS0+R2V0TmFtZSgpLCAkaWQsJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCk7CgkJJGZvcm0tPnNldEJ1dHRvbnMoYXJyYXkoJ2ZpbHRlcicsJ2NsZWFyX2ZpbHRlcnMnKSk7CgkJJGZvcm0tPnNldE11bHRpcGFydEZvcm0oKTsKCQkkZm9ybS0+c2V0TGFiZWwoJ2ZpbHRlcicsICdGaWx0ZXInKTsKCQkkZm9ybS0+c2V0TGFiZWwoJ2NsZWFyX2ZpbHRlcnMnLCAnQ2xlYXInKTsKCQkkZm9ybS0+c2V0V2lkZ2V0KCd0aXRsZUZpbHRlcicsICd0ZXh0JywgYXJyYXkoJ2xhYmVsJz0+JycsICd2YWx1ZScgPT4gJHZpZXctPmdldFRpdGxlRmlsdGVyKCksICdzaXplJyA9PiAxMCkpOwoJCQoJCS8vIFRPRE86IEluc2VydCBtb2R1bGVzIGZpbHRlcnMgaGVyZQoJCXt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmJ1aWxkRmlsdGVyc1dpZGdldHMoJGZvcm0sICRjdXJyZW50TW9kdWxlRmlsdGVycyk7CQkKCgkJJG1vZHVsZXh0ZW5kZXIgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01vZHVsZVh0ZW5kZXInKTsKCQkKCQlpZiAoaXNfb2JqZWN0KCRtb2R1bGV4dGVuZGVyKSAmJiAkbW9kdWxleHRlbmRlci0+aXNYdGVuZGVkTW9kdWxlKCRtb2R1bGUtPkdldE5hbWUoKSkpCgkJewoJCQkJZm9yZWFjaCAoTVhfUmVsYXRpb246OmdldEZpbHRlcnMoJG1vZHVsZS0+Z2V0TmFtZSgpKSBhcyAka2V5ID0+ICRmaWx0ZXIpIAoJCQkJewoJCQkJCWlmICgkZmlsdGVyLT5nZXRUeXBlKCkgPT0gJ2NhdGVnb3J5JykgewoJCQkgICAgICAgICR2YWx1ZXMgPSBhcnJheSgwID0+ICcmbGFxdW87ICcgLiAkZmlsdGVyLT5nZXRUaXRsZShmYWxzZSwgdHJ1ZSkgLiAnICZyYXF1bzsnKTsKCQkgICAgCQlmb3JlYWNoICgkZmlsdGVyLT5nZXRSZWxhdGVkSXRlbXMoKSBhcyAkaXRlbSkgewoJCSAgICAJCQkkdmFsdWVzWyRpdGVtLT5pZF0gPSAkaXRlbS0+dGl0bGU7CgkJICAgIAkJfQkJCQoJCQkJCQkkZm9ybS0+c2V0V2lkZ2V0KCdjYXRlZ29yeUZpbHRlcnNbXScgLiAkZmlsdGVyLT5pZCwgJ3NlbGVjdCcsIGFycmF5KCdsYWJlbCcgPT4nJywgJ3ZhbHVlcycgPT4gJHZhbHVlcywgJ3ZhbHVlJyA9PiAoJGN1cnJlbnRDYXRlZ29yeUZpbHRlcnMpKSk7CQkKCQkJICAgIH0gZWxzZWlmICgkZmlsdGVyLT5nZXRUeXBlKCkgPT0gJ3BhZ2UnKSB7CgkJCSAgICAgICAgJHZhbHVlcyA9IGFycmF5KDAgPT4gJyZsYXF1bzsgJyAuICRmaWx0ZXItPmdldFRpdGxlKGZhbHNlLCB0cnVlKSAuICcgJnJhcXVvOycpOwoJCSAgICAJCWZvcmVhY2ggKCRmaWx0ZXItPmdldFJlbGF0ZWRJdGVtcygpIGFzICRpdGVtKSB7CgkJICAgIAkJCSR2YWx1ZXNbJGl0ZW0tPmlkXSA9ICRpdGVtLT50aXRsZTsKCQkgICAgCQl9CgkJCQkJCSRmb3JtLT5zZXRXaWRnZXQoJ3BhZ2VGaWx0ZXJzW10nIC4gJGZpbHRlci0+aWQsICdzZWxlY3QnLCBhcnJheSgnbGFiZWwnID0+JycsICd2YWx1ZXMnID0+ICR2YWx1ZXMsICd2YWx1ZScgPT4gKCRjdXJyZW50UGFnZUZpbHRlcnMpKSk7CgkJCSAgICB9CgkJCQl9CgkJfQoJCQoJCWlmICgkZm9ybS0+aXNQdXNoZWQoJ2NsZWFyX2ZpbHRlcnMnKSkJCQoJCXsKCQkJJGZvcm0tPmdldFdpZGdldCgndGl0bGVGaWx0ZXInKS0+c2V0VmFsdWUoJycpOwoJCX0KCQkkbW9kdWxlLT5zbWFydHktPmFzc2lnbignZmlsdGVyc19mb3JtJywgJGZvcm0pOwoJfQoKCQoJcmV0dXJuICRtb2R1bGUtPlByb2Nlc3NUZW1wbGF0ZSgnZGVmYXVsdGFkbWluLml0ZW1zLnRwbCcpOwp9CgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVGb3JtKCRtb2R1bGUsJiRmb3JtLCYkaXRlbSwkcGFyYW1zPWFycmF5KCkpCnsKICAkY29uZmlnID0gY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7CiAgCiAge3tmb3JlYWNoIGZyb209JHN0cnVjdHVyZS0+Z2V0VGFicygpIGl0ZW09dGFicyBrZXk9dGFiX2tleX19CgkKCQl7e2ZvcmVhY2ggZnJvbT0kdGFicy5maWVsZHNldHMgaXRlbT1maWVsZHNldCBrZXk9ZmllbGRzZXRfa2V5fX0KCQkKCQkJJGZvcm0tPnNldEZpZWxkc2V0KCd7eyR0YWJfa2V5fX0tLS17eyRmaWVsZHNldF9rZXl9fScsICd7eyRmaWVsZHNldC5uYW1lfX0nKTsKCQkJCgkJCXt7KmZvcmVhY2ggZnJvbT0kZmllbGRzZXQuZmllbGRzIGl0ZW09ZmllbGQgfX0KCQkJJGZvcm0tPmdldEZpZWxkc2V0KCd7eyR0YWJfa2V5fX0tLS17eyRmaWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScpOwoJCQl7ey9mb3JlYWNoKn19CgkJCgkJe3svZm9yZWFjaH19CgkKCXt7L2ZvcmVhY2h9fQogIAogIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICB7e2lmICRmaWVsZC5mcm9udGVuZCAhPSAxIH19ICBpZighaXNzZXQoJHBhcmFtc1snZnJvbnRlbmQnXSkpIHsgIHt7L2lmfX0KICAgIHt7aWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAnc2VsZWN0J319CiAgICAgICRjbGFzcyA9IGFycmF5KCdjaHpuLXNlbGVjdCcpOwogIAkgIHt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmNsYXNzKX19JGNsYXNzW10gPSAne3skZmllbGQuZm9wdGlvbnMuY2xhc3N9fSc7e3svaWZ9fQogICAgCiAgCSAgJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaWVsZC5wbGFjZS50YWJfa2V5fX0tLS17eyRmaWVsZC5wbGFjZS5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScsICdzZWxlY3QnLCBhcnJheSgKICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm11bHRpcGxlKSB8fCBpc3NldCgkZmllbGQuZm9wdGlvbnMuZXhwYW5kZWQpfX0KICAJCSd2YWx1ZXMnID0+IHt7JGZpZWxkLnNlbGVjdF9vcHRpb25zfX0sCiAgCQl7e2Vsc2V9fQogIAkJJ3ZhbHVlcycgPT4gYXJyYXkoJycgPT4gJyZsYXF1bzsgJyAuICRtb2R1bGUtPmxhbmcoJ3NlbGVjdF9vbmUnKSAuICcgJnJhcXVvOycpICsge3skZmllbGQuc2VsZWN0X29wdGlvbnN9fSwKICAJCXt7L2lmfX0gCiAgCQknbGFiZWwnID0+ICd7eyRmaWVsZC5sYWJlbH19JywgCiAgCQknZ2V0X21ldGhvZCcgPT4gJ2dldHt7JGZpZWxkLmNhbWVsY2FzZX19JywgCiAgCQknb2JqZWN0JyA9PiAmJGl0ZW0sCiAgCQknY2xhc3MnID0+ICRjbGFzcwogIAkJLCdhZGR0ZXh0JyA9PiAnIHN0eWxlPSJtaW4td2lkdGg6IDM1MHB4OyInCiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5tdWx0aXBsZSl9fSwgJ211bHRpcGxlJyA9PiB0cnVle3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuc2l6ZSl9fSwgJ3NpemUnID0+IHt7JGZpZWxkLmZvcHRpb25zLnNpemV9fXt7L2lmfX0KICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmV4cGFuZGVkKX19LCAnZXhwYW5kZWQnID0+IHRydWV7ey9pZn19CgogIAkJLCdkZWZhdWx0X3ZhbHVlJyA9PiBpc3NldCgkcGFyYW1zWyd7eyRmaWVsZC5uYW1lfX0nXSk/JHBhcmFtc1sne3skZmllbGQubmFtZX19J106e3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuZGVmYXVsdF92YWx1ZSl9fSd7eyRmaWVsZC5mb3B0aW9ucy5kZWZhdWx0X3ZhbHVlfX0ne3tlbHNlfX1udWxse3svaWZ9fQogIAkpKTsKICAgIHt7ZWxzZWlmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ2NoZWNrYm94J319CiAgICAkZm9ybS0+Z2V0RmllbGRzZXQoJ3t7JGZpZWxkLnBsYWNlLnRhYl9rZXl9fS0tLXt7JGZpZWxkLnBsYWNlLmZpZWxkc2V0X2tleX19JyktPnNldFdpZGdldCgne3skZmllbGQubmFtZX19JywgJ3NlbGVjdCcsIGFycmF5KAogICAgICAndmFsdWVzJyA9PiBhcnJheSgnMScgPT4gJ3t7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnRleHQpfX17eyRmaWVsZC5mb3B0aW9ucy50ZXh0fX17e2Vsc2V9fXt7JGZpZWxkLmxhYmVsfX17ey9pZn19JyksCiAgICAgICdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLAogICAgICAnb2JqZWN0JyA9PiAmJGl0ZW0sCiAgICAgICdnZXRfbWV0aG9kJyA9PiAnZ2V0e3skZmllbGQuY2FtZWxjYXNlfX0nLCAKICAgICAgJ211bHRpcGxlJyA9PiB0cnVlLAogICAgICAnZXhwYW5kZWQnID0+IHRydWUKICAgICAge3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMudGlwcyl9fSwgJ3RpcHMnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy50aXBzfX0ne3svaWZ9fQogICAgICB7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5jaGVja2VkKX19LCAnZGVmYXVsdF92YWx1ZScgPT4gJzEne3svaWZ9fQogICAgKSk7CiAgCXt7ZWxzZWlmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ3RleHRhcmVhJ319CiAgCSRmb3JtLT5nZXRGaWVsZHNldCgne3skZmllbGQucGxhY2UudGFiX2tleX19LS0te3skZmllbGQucGxhY2UuZmllbGRzZXRfa2V5fX0nKS0+c2V0V2lkZ2V0KCd7eyRmaWVsZC5uYW1lfX0nLCAndGV4dGFyZWEnLCBhcnJheSgKICAJCSdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLCAKICAJCSdvYmplY3QnID0+ICYkaXRlbSwKICAJCSdzaG93X3d5c2l3eWcnID0+IHRydWUKICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnRpcHMpfX0sICd0aXBzJyA9PiAne3skZmllbGQuZm9wdGlvbnMudGlwc319J3t7L2lmfX0KICAJCSwnZGVmYXVsdF92YWx1ZScgPT4gaXNzZXQoJHBhcmFtc1sne3skZmllbGQubmFtZX19J10pPyRwYXJhbXNbJ3t7JGZpZWxkLm5hbWV9fSddOm51bGwKICAJCSkpOwogIAl7e2Vsc2VpZiAkZmllbGQuZm9ybV90eXBlID09ICd0ZXh0YXJlYV9wbGFpbid9fQogIAkkZm9ybS0+Z2V0RmllbGRzZXQoJ3t7JGZpZWxkLnBsYWNlLnRhYl9rZXl9fS0tLXt7JGZpZWxkLnBsYWNlLmZpZWxkc2V0X2tleX19JyktPnNldFdpZGdldCgne3skZmllbGQubmFtZX19JywgJ3RleHRhcmVhJywgYXJyYXkoCiAgCQknbGFiZWwnID0+ICd7eyRmaWVsZC5sYWJlbH19JywgCiAgCQknb2JqZWN0JyA9PiAmJGl0ZW0KICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnRpcHMpfX0sICd0aXBzJyA9PiAne3skZmllbGQuZm9wdGlvbnMudGlwc319J3t7L2lmfX0KICAJCSwnZGVmYXVsdF92YWx1ZScgPT4gaXNzZXQoJHBhcmFtc1sne3skZmllbGQubmFtZX19J10pPyRwYXJhbXNbJ3t7JGZpZWxkLm5hbWV9fSddOm51bGwKICAJCSkpOwogIAl7e2Vsc2VpZiAkZmllbGQuZm9ybV90eXBlID09ICd0ZXh0YXJlYV9jb2RlJ319CiAgCSRmb3JtLT5nZXRGaWVsZHNldCgne3skZmllbGQucGxhY2UudGFiX2tleX19LS0te3skZmllbGQucGxhY2UuZmllbGRzZXRfa2V5fX0nKS0+c2V0V2lkZ2V0KCd7eyRmaWVsZC5uYW1lfX0nLCAnY29kZWFyZWEnLCBhcnJheSgKICAJCSdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLCAKICAJCSdvYmplY3QnID0+ICYkaXRlbQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMudGlwcyl9fSwgJ3RpcHMnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy50aXBzfX0ne3svaWZ9fQogIAkJLCdkZWZhdWx0X3ZhbHVlJyA9PiBpc3NldCgkcGFyYW1zWyd7eyRmaWVsZC5uYW1lfX0nXSk/JHBhcmFtc1sne3skZmllbGQubmFtZX19J106bnVsbAogIAkJKSk7CiAgCXt7ZWxzZWlmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ2ZpbGUnfX0KICAJJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaWVsZC5wbGFjZS50YWJfa2V5fX0tLS17eyRmaWVsZC5wbGFjZS5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScsICdmaWxlJywgYXJyYXkoCiAgCQknbGFiZWwnID0+ICd7eyRmaWVsZC5sYWJlbH19JywgCiAgCQknb2JqZWN0JyA9PiAmJGl0ZW0sCiAgCQkvLyAnZGlyZWN0X2xpbmsnID0+ICRpdGVtLT5nZXR7eyRmaWVsZC5jYW1lbGNhc2V9fVVybCgpLCAvLyBGSVhNRTogSXNzdWUgaW4gQ01TTVMgMS4xMQogIAkJJ2RpcmVjdF9saW5rJyA9PiAkaXRlbS0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX1DbGVhblVybCgpLAogIAkJJ2Jhc2VfdXJsJyA9PiAkY29uZmlnWydyb290X3VybCddLAogIAkJJ2RlbGV0ZV9jaGVja2JveCcgPT4gJ3t7JGZpZWxkLm5hbWV9fV9kZWxldGUnCiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy50aXBzKX19LCAndGlwcycgPT4gJ3t7JGZpZWxkLmZvcHRpb25zLnRpcHN9fSd7ey9pZn19CiAgCQksJ2RlZmF1bHRfdmFsdWUnID0+IGlzc2V0KCRwYXJhbXNbJ3t7JGZpZWxkLm5hbWV9fSddKT8kcGFyYW1zWyd7eyRmaWVsZC5uYW1lfX0nXTpudWxsCiAgCSkpOwogIAl7e2Vsc2VpZiAkZmllbGQudHlwZSA9PSAnZGF0ZSd9fQogIAkkZm9ybS0+Z2V0RmllbGRzZXQoJ3t7JGZpZWxkLnBsYWNlLnRhYl9rZXl9fS0tLXt7JGZpZWxkLnBsYWNlLmZpZWxkc2V0X2tleX19JyktPnNldFdpZGdldCgne3skZmllbGQubmFtZX19JywgJ2RhdGUnLCBhcnJheSgKICAJCSdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLCAKICAJCSdvYmplY3QnID0+ICYkaXRlbSwgCgkJCSdldXJvcGVhbl9kYXRlJyA9PiB0cnVlLCAKICAJCSdzZXRfbWV0aG9kJyA9PiAnc2V0e3skZmllbGQuY2FtZWxjYXNlfX0nLAkJCiAgCQknZGVmYXVsdF92YWx1ZScgPT4gaXNzZXQoJHBhcmFtc1sne3skZmllbGQubmFtZX19J10pPyRwYXJhbXNbJ3t7JGZpZWxkLm5hbWV9fSddOmFycmF5KGRhdGUoJ1knKSxkYXRlKCdtJyksZGF0ZSgnZCcpKQogIAkJe3tpZiBpc3NldCgkZmllbGQuZGF0ZV9vcHRpb25zLnN0YXJ0X3llYXIpfX0sICdzdGFydF95ZWFyJyA9PiB7eyRmaWVsZC5kYXRlX29wdGlvbnMuc3RhcnRfeWVhcn19e3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZGF0ZV9vcHRpb25zLm51bWJlcl95ZWFycyl9fSwgJ251bWJlcl95ZWFycycgPT4ge3skZmllbGQuZGF0ZV9vcHRpb25zLm51bWJlcl95ZWFyc319e3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMudGlwcyl9fSwgJ3RpcHMnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy50aXBzfX0ne3svaWZ9fQogIAkpKTsKICAJe3tlbHNlaWYgJGZpZWxkLnR5cGUgPT0gJ3RpbWUnfX0KICAJJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaWVsZC5wbGFjZS50YWJfa2V5fX0tLS17eyRmaWVsZC5wbGFjZS5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScsICd0aW1lJywgYXJyYXkoCiAgCQknbGFiZWwnID0+ICd7eyRmaWVsZC5sYWJlbH19JywgCiAgCQknb2JqZWN0JyA9PiAmJGl0ZW0sCiAgCQknc2V0X21ldGhvZCcgPT4gJ3NldHt7JGZpZWxkLmNhbWVsY2FzZX19JywKICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm1pZG5pZ2h0KX19CiAgCQknZGVmYXVsdF92YWx1ZScgPT4gYXJyYXkoMCwwLDApIHt7KiBUT0RPOiBGSVggKn19CiAgCQl7e2Vsc2V9fQkJCiAgCQknZGVmYXVsdF92YWx1ZScgPT4gYXJyYXkoZGF0ZSgnSCcpLGRhdGUoJ2knKSxkYXRlKCdzJykpCiAgCQl7ey9pZn19CiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy50aXBzKX19LCAndGlwcycgPT4gJ3t7JGZpZWxkLmZvcHRpb25zLnRpcHN9fSd7ey9pZn19CiAgCSkpOwoJCXt7ZWxzZWlmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ2RhdGV0aW1lJ319CiAgCSRmb3JtLT5nZXRGaWVsZHNldCgne3skZmllbGQucGxhY2UudGFiX2tleX19LS0te3skZmllbGQucGxhY2UuZmllbGRzZXRfa2V5fX0nKS0+c2V0V2lkZ2V0KCd7eyRmaWVsZC5uYW1lfX0nLCAnZGF0ZXRpbWUnLCBhcnJheSgKICAJCSdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLCAKICAJCSdvYmplY3QnID0+ICYkaXRlbSwKCQkJJ2V1cm9wZWFuX2RhdGUnID0+IHRydWUsIAogIAkJJ3NldF9tZXRob2QnID0+ICdzZXR7eyRmaWVsZC5jYW1lbGNhc2V9fScsCiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5taWRuaWdodCkgJiYgJGZpZWxkLmZvcHRpb25zLm1pZG5pZ2h0ID09ICd0cnVlJ319CiAgCQknZGVmYXVsdF92YWx1ZScgPT4gYXJyYXkoZGF0ZSgnWScpLGRhdGUoJ20nKSxkYXRlKCdkJyksMCwwLDApIHt7KiBUTyBGSVggKn19CiAgCQl7e2Vsc2V9fQkJCiAgCQknZGVmYXVsdF92YWx1ZScgPT4gYXJyYXkoZGF0ZSgnWScpLGRhdGUoJ20nKSxkYXRlKCdkJyksZGF0ZSgnSCcpLGRhdGUoJ2knKSxkYXRlKCdzJykpCiAgCQl7ey9pZn19CgkJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnN0YXJ0X3llYXIpfX0sICdzdGFydF95ZWFyJyA9PiB7eyRmaWVsZC5mb3B0aW9ucy5zdGFydF95ZWFyfX17ey9pZn19CgkJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm51bWJlcl95ZWFycyl9fSwgJ251bWJlcl95ZWFycycgPT4ge3skZmllbGQuZm9wdGlvbnMubnVtYmVyX3llYXJzfX17ey9pZn19CiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy50aXBzKX19LCAndGlwcycgPT4gJ3t7JGZpZWxkLmZvcHRpb25zLnRpcHN9fSd7ey9pZn19CiAgCSkpOwogIAl7e2Vsc2VpZiAkZmllbGQuZm9ybV90eXBlID09ICdtb2R1bGUnfX0KICAJaWYgKGNsYXNzX2V4aXN0cygne3skZmllbGQuZm9wdGlvbnMubW9kdWxlX25hbWV9fU9iamVjdCcpKQogIAl7CQogIAkgICRjbGFzcyA9IGFycmF5KCdjaHpuLXNlbGVjdCcpOwogIAkgIHt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmNsYXNzKX19JGNsYXNzW10gPSAne3skZmllbGQuZm9wdGlvbnMuY2xhc3N9fSc7e3svaWZ9fQogIAkgIAogIAkJJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAJCSRjLT5hZGQoJ3B1Ymxpc2hlZCcsIDEpOwogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuc2VsZWN0b3IpfX0KICAJCSRtb2RfaXRlbXMgPSB7eyRmaWVsZC5mb3B0aW9ucy5tb2R1bGVfbmFtZX19T2JqZWN0Ojp7eyRmaWVsZC5mb3B0aW9ucy5zZWxlY3Rvcn19KCRjKTsKICAJCXt7ZWxzZX19CiAgCQkkbW9kX2l0ZW1zID0ge3skZmllbGQuZm9wdGlvbnMubW9kdWxlX25hbWV9fU9iamVjdDo6ZG9TZWxlY3QoJGMpOwogIAkJe3svaWZ9fQogIAkJJGxpc3QgPSBhcnJheSgpOwogIAkkZm9ybS0+Z2V0RmllbGRzZXQoJ3t7JGZpZWxkLnBsYWNlLnRhYl9rZXl9fS0tLXt7JGZpZWxkLnBsYWNlLmZpZWxkc2V0X2tleX19JyktPnNldFdpZGdldCgne3skZmllbGQubmFtZX19JywgJ3NlbGVjdCcsIGFycmF5KAogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpIHx8IGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5leHBhbmRlZCl9fQogIAkJJ3ZhbHVlcycgPT4JJG1vZF9pdGVtcywgCiAgCQl7e2Vsc2V9fQogIAkJJ3ZhbHVlcycgPT4JYXJyYXkoJycgPT4gJyZsYXF1bzsgJyAuICRtb2R1bGUtPmxhbmcoJ3NlbGVjdF9vbmUnKSAuICcgJnJhcXVvOycpICsgJG1vZF9pdGVtcywgCiAgCQl7ey9pZn19CiAgCQknbGFiZWwnID0+ICd7eyRmaWVsZC5sYWJlbH19JywgCiAgCQknZ2V0X21ldGhvZCcgPT4gJ2dldHt7JGZpZWxkLmNhbWVsY2FzZX19JywgCiAgCQknb2JqZWN0JyA9PiAmJGl0ZW0sCiAgCQknY2xhc3MnID0+ICRjbGFzcwogIAkJLCdhZGR0ZXh0JyA9PiAnIHN0eWxlPSJtaW4td2lkdGg6IDM1MHB4OyInCiAgCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm11bHRpcGxlKX19LCAnbXVsdGlwbGUnID0+IHRydWV7ey9pZn19ICAJCiAgCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnNpemUpfX0sICdzaXplJyA9PiB7eyRmaWVsZC5mb3B0aW9ucy5zaXplfX17ey9pZn19CiAgCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmV4cGFuZGVkKX19LCAnZXhwYW5kZWQnID0+IHRydWV7ey9pZn19CiAgCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnRpcHMpfX0sICd0aXBzJyA9PiAne3skZmllbGQuZm9wdGlvbnMudGlwc319J3t7L2lmfX0KICAJLCdkZWZhdWx0X3ZhbHVlJyA9PiBpc3NldCgkcGFyYW1zWyd7eyRmaWVsZC5uYW1lfX0nXSk/JHBhcmFtc1sne3skZmllbGQubmFtZX19J106bnVsbAogIAkpKTsKICAJfQogIAl7e2Vsc2VpZiAkZmllbGQuZm9ybV90eXBlID09ICdwYWdlJ319CiAgCSAgJGNsYXNzID0gYXJyYXkoJ2Noem4tc2VsZWN0Jyk7CgkgICAge3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuY2xhc3MpfX0kY2xhc3NbXSA9ICd7eyRmaWVsZC5mb3B0aW9ucy5jbGFzc319Jzt7ey9pZn19CiAgCSAgJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaWVsZC5wbGFjZS50YWJfa2V5fX0tLS17eyRmaWVsZC5wbGFjZS5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScsICdwYWdlcycsIGFycmF5KAogIAkJJ2xhYmVsJyA9PiAne3skZmllbGQubGFiZWx9fScgCiAgCQksJ29iamVjdCcgPT4gJiRpdGVtCiAgCQksJ2NsYXNzJyA9PiAkY2xhc3MKICAJCSwnYWRkdGV4dCcgPT4gJyBzdHlsZT0ibWluLXdpZHRoOiAzNTBweDsiJwogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuc3RhcnRfcGFnZSl9fSwgJ3N0YXJ0X3BhZ2UnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy5zdGFydF9wYWdlfX0ne3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuY2hpbGRyZW5vZil9fSwgJ2NoaWxkcmVub2YnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy5jaGlsZHJlbm9mfX0ne3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMudGlwcyl9fSwgJ3RpcHMnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy50aXBzfX0ne3svaWZ9fQkJCiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5zaXplKX19LCAnc2l6ZScgPT4ge3skZmllbGQuZm9wdGlvbnMuc2l6ZX19e3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0sICdtdWx0aXBsZScgPT4gdHJ1ZXt7L2lmfX0KICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmV4cGFuZGVkKX19LCAnZXhwYW5kZWQnID0+IHRydWV7ey9pZn19CiAgCQksJ2RlZmF1bHRfdmFsdWUnID0+IGlzc2V0KCRwYXJhbXNbJ3t7JGZpZWxkLm5hbWV9fSddKT8kcGFyYW1zWyd7eyRmaWVsZC5uYW1lfX0nXTpudWxsCiAgCQkpKTsKICAJe3tlbHNlaWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAnc3RhdGljJ319CiAgCSAgJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaWVsZC5wbGFjZS50YWJfa2V5fX0tLS17eyRmaWVsZC5wbGFjZS5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScsICdzdGF0aWMnLCBhcnJheSgKICAJCSdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLCAKICAJCSdvYmplY3QnID0+ICYkaXRlbQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMudGlwcyl9fSwgJ3RpcHMnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy50aXBzfX0ne3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMucHJlZml4KX19LCAncHJlZml4JyA9PiAne3skZmllbGQuZm9wdGlvbnMucHJlZml4fX0ne3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuc3VmaXgpfX0sICdzdWZpeCcgPT4gJ3t7JGZpZWxkLmZvcHRpb25zLnN1Zml4fX0ne3svaWZ9fQogIAkJLCdkZWZhdWx0X3ZhbHVlJyA9PiBpc3NldCgkcGFyYW1zWyd7eyRmaWVsZC5uYW1lfX0nXSk/JHBhcmFtc1sne3skZmllbGQubmFtZX19J106bnVsbAogIAkJKSk7CiAgCXt7ZWxzZWlmICRmaWVsZC5mb3JtX3R5cGUgPT0gJ25vbmUnfX0KICAJe3tlbHNlaWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAndXNlcid9fQogIAkgICRjbGFzcyA9IGFycmF5KCdjaHpuLXNlbGVjdCcpOwoJICAgIHt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmNsYXNzKX19JGNsYXNzW10gPSAne3skZmllbGQuZm9wdGlvbnMuY2xhc3N9fSc7e3svaWZ9fQogIAkgICR7eyRmaWVsZC5uYW1lfX1fbGlzdCA9IENNU1VzZXI6OmdldFVzZXJMaXN0KCk7CiAgCSAgJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaWVsZC5wbGFjZS50YWJfa2V5fX0tLS17eyRmaWVsZC5wbGFjZS5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScsICdzZWxlY3QnLCBhcnJheSgKICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm11bHRpcGxlKSB8fCBpc3NldCgkZmllbGQuZm9wdGlvbnMuZXhwYW5kZWQpfX0KICAJCSd2YWx1ZXMnID0+IHt7JGZpZWxkLnNlbGVjdF9vcHRpb25zfX0sCiAgCQl7e2Vsc2V9fQogIAkJJ3ZhbHVlcycgPT4gYXJyYXkoJycgPT4gJyZsYXF1bzsgJyAuICRtb2R1bGUtPmxhbmcoJ3NlbGVjdF9vbmUnKSAuICcgJnJhcXVvOycpICsgJHt7JGZpZWxkLm5hbWV9fV9saXN0LAogIAkJe3svaWZ9fSAKICAJCSdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLCAKICAJLy8JJ2dldF9tZXRob2QnID0+ICdnZXR7eyRmaWVsZC5jYW1lbGNhc2V9fScsIAogIAkJJ29iamVjdCcgPT4gJiRpdGVtLAogIAkJJ2NsYXNzJyA9PiAkY2xhc3MKICAJCSwnYWRkdGV4dCcgPT4gJyBzdHlsZT0ibWluLXdpZHRoOiAzNTBweDsiJwogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0sICdtdWx0aXBsZScgPT4gdHJ1ZXt7L2lmfX0KICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnNpemUpfX0sICdzaXplJyA9PiB7eyRmaWVsZC5mb3B0aW9ucy5zaXplfX17ey9pZn19CiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5leHBhbmRlZCl9fSwgJ2V4cGFuZGVkJyA9PiB0cnVle3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMudGlwcyl9fSwgJ3RpcHMnID0+ICd7eyRmaWVsZC5mb3B0aW9ucy50aXBzfX0ne3svaWZ9fQogIAkpKTsKICAJe3tlbHNlaWYgJGZpZWxkLmZvcm1fdHlwZSA9PSAnZ3JvdXAnfX0KICAJICAkY2xhc3MgPSBhcnJheSgnY2h6bi1zZWxlY3QnKTsKCSAgICB7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5jbGFzcyl9fSRjbGFzc1tdID0gJ3t7JGZpZWxkLmZvcHRpb25zLmNsYXNzfX0nO3t7L2lmfX0KICAJICAke3skZmllbGQubmFtZX19X2xpc3QgPSBDTVNHcm91cDo6Z2V0R3JvdXBMaXN0KCk7CiAgCSAgJGZvcm0tPmdldEZpZWxkc2V0KCd7eyRmaWVsZC5wbGFjZS50YWJfa2V5fX0tLS17eyRmaWVsZC5wbGFjZS5maWVsZHNldF9rZXl9fScpLT5zZXRXaWRnZXQoJ3t7JGZpZWxkLm5hbWV9fScsICdzZWxlY3QnLCBhcnJheSgKICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLm11bHRpcGxlKSB8fCBpc3NldCgkZmllbGQuZm9wdGlvbnMuZXhwYW5kZWQpfX0KICAJCSd2YWx1ZXMnID0+ICR7eyRmaWVsZC5uYW1lfX1fbGlzdCwKICAJCXt7ZWxzZX19CiAgCQkndmFsdWVzJyA9PiBhcnJheSgnJyA9PiAnJmxhcXVvOyAnIC4gJG1vZHVsZS0+bGFuZygnc2VsZWN0X29uZScpIC4gJyAmcmFxdW87JykgKyAke3skZmllbGQubmFtZX19X2xpc3QsCiAgCQl7ey9pZn19IAogIAkJJ2xhYmVsJyA9PiAne3skZmllbGQubGFiZWx9fScsIAogIAkvLwknZ2V0X21ldGhvZCcgPT4gJ2dldHt7JGZpZWxkLmNhbWVsY2FzZX19JywgCiAgCQknb2JqZWN0JyA9PiAmJGl0ZW0sCiAgCQknY2xhc3MnID0+ICRjbGFzcwogIAkJLCdhZGR0ZXh0JyA9PiAnIHN0eWxlPSJtaW4td2lkdGg6IDM1MHB4OyInCiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy5tdWx0aXBsZSl9fSwgJ211bHRpcGxlJyA9PiB0cnVle3svaWZ9fQogIAkJe3tpZiBpc3NldCgkZmllbGQuZm9wdGlvbnMuc2l6ZSl9fSwgJ3NpemUnID0+IHt7JGZpZWxkLmZvcHRpb25zLnNpemV9fXt7L2lmfX0KICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmV4cGFuZGVkKX19LCAnZXhwYW5kZWQnID0+IHRydWV7ey9pZn19CiAgCQl7e2lmIGlzc2V0KCRmaWVsZC5mb3B0aW9ucy50aXBzKX19LCAndGlwcycgPT4gJ3t7JGZpZWxkLmZvcHRpb25zLnRpcHN9fSd7ey9pZn19CiAgCSkpOwogIAl7e2Vsc2V9fQogIAkgICRmb3JtLT5nZXRGaWVsZHNldCgne3skZmllbGQucGxhY2UudGFiX2tleX19LS0te3skZmllbGQucGxhY2UuZmllbGRzZXRfa2V5fX0nKS0+c2V0V2lkZ2V0KCd7eyRmaWVsZC5uYW1lfX0nLCAne3skZmllbGQuZm9ybV90eXBlfX0nLCBhcnJheSgKICAJCSdsYWJlbCcgPT4gJ3t7JGZpZWxkLmxhYmVsfX0nLCAKICAJCSdvYmplY3QnID0+ICYkaXRlbSwgCiAgCQknc2l6ZScgPT4gNTAKICAJCXt7aWYgaXNzZXQoJGZpZWxkLmZvcHRpb25zLnRpcHMpfX0sICd0aXBzJyA9PiAne3skZmllbGQuZm9wdGlvbnMudGlwc319J3t7L2lmfX0KICAJCSkpOwogIAl7ey9pZn19CiAgICB7e2lmICRmaWVsZC5mcm9udGVuZCAhPSAxIH19fXt7L2lmfX0KCXt7L2ZvcmVhY2h9fQp9CgoKfQo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/MCFModule.module.php.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiRHTE9CQUxTWydBRE9EQl9RVU9URV9GSUVMRE5BTUVTJ10gPSB0cnVlOwoKY2xhc3Mge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSBleHRlbmRzIENNU01vZHVsZSB7Cnt7KiBUT0RPIGNsYXNzIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0gZXh0ZW5kcyB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19QmFzZSB7ICp9fQoKICBwdWJsaWMgc3RhdGljICRmcm9udGVuZF90ZW1wbGF0ZXMgPSBhcnJheSgKICAgICAgJ2RlZmF1bHQnICAgICA9PiAnZGVmYXVsdCAobGlzdCknLAogICAgICAnZGV0YWlsJyAgICAgICA9PiAnZGV0YWlsJywgCiAgICAgICdzZWFyY2gnICAgICAgID0+ICdzZWFyY2gnLAogICAgICAnY2FsZW5kYXInICAgICA9PiAnY2FsZW5kYXInLAogICAgICAndGFnY2xvdWQnICAgICA9PiAndGFnY2xvdWQnLCAvLyBUT0RPCiAgICAgICdyc3MnICAgICAgICAgPT4gJ3JzcycsCiAgICAgICdwYWdpbmF0ZWQnICAgPT4gJ3BhZ2luYXRlZCcsCiAgICAgICd1c2VyX2Zvcm0nICAgPT4gJ3VzZXJfZm9ybScsCiAgICAgICd1c2VyX2Zvcm1fc3VjY2VzJyAgID0+ICd1c2VyX2Zvcm1fc3VjY2VzJywKICAgICAgJ2RpcmVjdF9lbWFpbCcgICA9PiAnZGlyZWN0X2VtYWlsJwogICAgKTsKCiAgY29uc3QgTU9EVUxFX09CSkVDVF9OQU1FID0gJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3QnOwoKICBwdWJsaWMgZnVuY3Rpb24gRG9BY3Rpb24oJG5hbWUsICRpZCwgJHBhcmFtcywgJHJldHVybmlkID0gJycpIHsKICAgICRtZXRob2RzID0gZ2V0X2NsYXNzX21ldGhvZHMoJHRoaXMpOwogICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG1ldGhvZCkgewogICAgICBpZiAoc3RycG9zKCRtZXRob2QsICdtb2RpZmllcicpID09PSAwKSB7CiAgICAgICAgJG1vZGlmaWVyID1zdWJzdHIoJG1ldGhvZCwgOCk7CiAgICAgICAgJG1vZGlmaWVyezB9ID0gc3RydG9sb3dlcigkbW9kaWZpZXJ7MH0pOwogICAgICAgICR0aGlzLT5zbWFydHktPnJlZ2lzdGVyX21vZGlmaWVyKCRtb2RpZmllciwgYXJyYXkoJHRoaXMsICRtZXRob2QpKTsKICAgICAgfQogICAgfQogICAgcGFyZW50OjpEb0FjdGlvbigkbmFtZSwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkgewogICAgcGFyZW50OjpfX2NvbnN0cnVjdCgpOwogICAgJHRoaXMtPkluaXRpYWxpemVHbG9iYWwoKTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBHZXROYW1lKCkgeyAgICAgICAgICAgICAgIHJldHVybiAne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSc7ICB9CiAgcHVibGljIGZ1bmN0aW9uIEdldE9iamVjdE5hbWUoKSB7ICAgICAgICAgcmV0dXJuICd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0JzsgIH0KICBwdWJsaWMgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkgeyAgICAgICByZXR1cm4gJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlRnJpZW5kbHlOYW1lKCl9fSc7ICB9CiAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7ICAgICAgICAgICAgcmV0dXJuICd7eyRtb2R1bGUtPmdldE1vZHVsZVZlcnNpb24oKX19JzsgIH0KICBwdWJsaWMgIGZ1bmN0aW9uIEdldEhlbHAoKSB7ICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsgIH0KICBwdWJsaWMgIGZ1bmN0aW9uIEdldEF1dGhvcigpIHsgICAgICAgICAgICByZXR1cm4gJ0F1dG8tZ2VuZXJhdGVkIGJ5IE0mQyBGYWN0b3J5JzsgIH0KICBwdWJsaWMgIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgeyAgICAgICByZXR1cm4gJ2pjY0Btb3JyaXMtY2hhcG1hbi5jb20nOyAgfQogIHB1YmxpYyAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgeyAgICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7ICB9CiAgcHVibGljICBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgICAgICAgcmV0dXJuIHRydWU7ICB9CiAgcHVibGljICBmdW5jdGlvbiBIYXNBZG1pbigpIHsgICAgICAgICAgICAgcmV0dXJuIHt7JGhhc19hZG1pbn19O30KICBwdWJsaWMgIGZ1bmN0aW9uIEdldEFkbWluU2VjdGlvbigpIHsgICAgICByZXR1cm4gJ3t7JGFkbWluX3NlY3Rpb259fSc7ICB9CiAgcHVibGljICBmdW5jdGlvbiBHZXRBZG1pbkRlc2NyaXB0aW9uKCkgeyAgcmV0dXJuICR0aGlzLT5MYW5nKCdhZG1pbmRlc2NyaXB0aW9uJyk7ICB9CiAgcHVibGljICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKSB7ICAgcmV0dXJuICgkdGhpcy0+Q2hlY2tBY2Nlc3MoKSB8fCAkdGhpcy0+Q2hlY2tBY2Nlc3MoJ01vZGlmeSBUZW1wbGF0ZXMnKSk7IH0KICBwdWJsaWMgIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpIHsgICAgICByZXR1cm4gYXJyYXkoJ01DRmFjdG9yeScgPT4gJ3t7JG1jZmFjdG9yeXZlcnNpb259fScpOyAgfQogIHB1YmxpYyAgZnVuY3Rpb24gQ2hlY2tBY2Nlc3MoJHBlcm1pc3Npb24gPSAnTWFuYWdlIHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nKSB7ICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCRwZXJtaXNzaW9uKTsgIH0KICAKICBwdWJsaWMgIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2U9JycpIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ25fYnlfcmVmKCdtZXNzYWdlJywgJG1lc3NhZ2UpOwogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICB9CiAgCiAgcHVibGljICBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zPWFycmF5KCkpIHsKICAgICRjYXBhYmlsaXRpZXMgPSBhcnJheSgKICAgICAgJ2RpZ2VzdF9leHBvcnQnLAogICAgICAnY21zX3VzZXJzJwogICAgKTsKICAgIAogICAgaWYgKGluX2FycmF5KCRjYXBhYmlsaXR5LCAkY2FwYWJpbGl0aWVzKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsgICAgICAgICAgICByZXR1cm4gJzEuOSc7ICB9CiAgZnVuY3Rpb24gSW5zdGFsbFBvc3RNZXNzYWdlKCkgeyAgICAgICAgICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOyAgfQogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgeyAgICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOyAgfQogIGZ1bmN0aW9uIFVuaW5zdGFsbFByZU1lc3NhZ2UoKSB7ICAgICAgICAgIHJldHVybiAkdGhpcy0+TGFuZygncmVhbGx5X3VuaW5zdGFsbCcpOyAgfQogIHB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsKCkgewogICAgCiAgICAkY29uZmlnID0gY21zX3V0aWxzOjpnZXRfY29uZmlnKCk7CiAgICAkZGIgPSBjbXNfdXRpbHM6OmdldF9kYigpOwogICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKICAgICRmaWVsZHMgPSBhcnJheSgKICAgIAknaWQgSSBLRVknLAoJCSd1c2VyX2lkIEknLAoJCSdwYXJlbnRfaWQgSScsCgkJJ3RpdGxlIEMoMjU1KScsCgkJe3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KCQkne3skZmllbGQubmFtZX19IHt7JGZpZWxkLmNvbHVtbl90eXBlfX0nLAoJCXt7L2ZvcmVhY2h9fQoJCSdjcmVhdGVkX2F0IEQnLAoJCSdjcmVhdGVkX2J5IEknLAoJCSdtY2ZpX2NyZWF0ZWRfdGltZXN0YW1wIEknLAoJCSd1cGRhdGVkX2F0IEQnLAoJCSd1cGRhdGVkX2J5IEknLAoJCSdtY2ZpX3VwZGF0ZWRfdGltZXN0YW1wIEknLAoJCSdzZW5kX3VwZGF0ZV9pbW1lZGlhdGVseSBJJywKCQknb3JkZXJfYnkgSScsCgkJJ3B1Ymxpc2hlZCBJJywKCQkncGFyZW50X2l0ZW0gSScsCgkJJ2Z1bGxfdGV4dF9zZWFyY2ggWEwnCiAgICApOwoKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV97eyR0YWJsZV9uYW1lfX0nLCBpbXBsb2RlKCcsJywkZmllbGRzKSk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkZGItPkNyZWF0ZVNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3t7JHRhYmxlX25hbWV9fV9zZXEnKTsKICAgIAogICAgLy8kdGhpcy0+U2V0VGVtcGxhdGUoJ2Rpc3BsYXlfbGlzdCcsICR0aGlzLT5HZXRUZW1wbGF0ZUZyb21GaWxlKCd0ZW1wbGF0ZS5saXN0JykpOwogICAgLy8kdGhpcy0+U2V0VGVtcGxhdGUoJ2Rpc3BsYXlfcGFnaW5hdGVkJywgJHRoaXMtPkdldFRlbXBsYXRlRnJvbUZpbGUoJ3RlbXBsYXRlLnBhZ2luYXRlZCcpKTsKICAgIC8vJHRoaXMtPlNldFRlbXBsYXRlKCdkaXNwbGF5X2RldGFpbHMnLCAkdGhpcy0+R2V0VGVtcGxhdGVGcm9tRmlsZSgndGVtcGxhdGUuZGV0YWlscycpKTsKICAgIC8vJHRoaXMtPlNldFRlbXBsYXRlKCdkaXNwbGF5X3NlYXJjaCcsICR0aGlzLT5HZXRUZW1wbGF0ZUZyb21GaWxlKCd0ZW1wbGF0ZS5zZWFyY2gnKSk7CiAgICAvLyR0aGlzLT5TZXRUZW1wbGF0ZSgnZGlzcGxheV9jYWxlbmRhcicsICR0aGlzLT5HZXRUZW1wbGF0ZUZyb21GaWxlKCd0ZW1wbGF0ZS5jYWxlbmRhcicpKTsKICAgIAogICAgLy9AbWtkaXIoJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy91cGxvYWRzL3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nKTsKICAgICR0aGlzLT5DcmVhdGVFdmVudCgnQ29udGVudEVkaXRQb3N0Jyk7CiAgICBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ01DRmFjdG9yeScpLT5BZGRFdmVudEhhbmRsZXIoJHRoaXMtPmdldE5hbWUoKSwgJ0NvbnRlbnRFZGl0UG9zdCcsIGZhbHNlKTsKICAgICR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdNYW5hZ2Uge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsICdNYW5hZ2Uge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScpOyAgCiAgICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignQWRtaW4ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fScsICdBZG1pbiB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19Jyk7ICAKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpbmRleF9jb250ZW50JywgJ3RydWUnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0d2l0dGVyX3RlbXBsYXRlJywgJ3skdGl0bGV9IC0geyR1cmx9Jyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWNmYWN0b3J5X3ZlcnNpb24nLCAne3skbWNmYWN0b3J5X3ZlcnNpb259fScpOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIFVwZ3JhZGUoJG9sZHZlcnNpb24sICRuZXd2ZXJzaW9uKSAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAKICAgICRvbGR2ZXJzaW9uID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ21jZmFjdG9yeV92ZXJzaW9uJywgJzIuNS4wJyk7CiAgICAKICAgIHN3aXRjaCh0cnVlKSB7CiAgICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMi45LjAnLCAnPCcpOgogICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpbmRleF9jb250ZW50JywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaW5kZXhfY29udGVudCcsICd0cnVlJykpOwogICAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzIuOS45JywgJzwnKToKICAgICAgICAkdGhpcy0+QWRkRGVmYXVsdFRlbXBsYXRlKCdkZWZhdWx0JywgJ2Rpc3BsYXlfbGlzdCcpOwogICAgICAgICR0aGlzLT5BZGREZWZhdWx0VGVtcGxhdGUoJ2RldGFpbCcsICdkaXNwbGF5X2RldGFpbHMnKTsKICAgICAgICAkdGhpcy0+QWRkRGVmYXVsdFRlbXBsYXRlKCdwYWdpbmF0ZWQnLCAnZGlzcGxheV9wYWdpbmF0ZWQnKTsKICAgICAgICAkdGhpcy0+QWRkRGVmYXVsdFRlbXBsYXRlKCdzZWFyY2gnLCAnZGlzcGxheV9zZWFyY2gnKTsKICAgICAgICAkdGhpcy0+QWRkRGVmYXVsdFRlbXBsYXRlKCdjYWxlbmRhcicsICdkaXNwbGF5X2NhbGVuZGFyJyk7CiAgICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMi45LjE2JywgJzwnKToKICAgICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV97eyR0YWJsZV9uYW1lfX0nLCAndXNlcl9pZCBJJyk7CiAgICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAgIGNhc2UgdmVyc2lvbl9jb21wYXJlKCRvbGR2ZXJzaW9uLCAnMi4xMi4xJywgJzwnKToKICAgICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV97eyR0YWJsZV9uYW1lfX0nLCAnbWNmaV9jcmVhdGVkX3RpbWVzdGFtcCBJJyk7CiAgICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAgICAgICAkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKSAuICdtb2R1bGVfe3skdGFibGVfbmFtZX19JywgJ21jZmlfdXBkYXRlZF90aW1lc3RhbXAgSScpOwogICAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgICBjYXNlIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzMuMS44JywgJzwnKToKICAgICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpIC4gJ21vZHVsZV97eyR0YWJsZV9uYW1lfX0nLCAnc2VuZF91cGRhdGVfaW1tZWRpYXRlbHkgSScpOwogICAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgICAKICAgICAgCiAgICB9CiAgICAKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtY2ZhY3RvcnlfdmVyc2lvbicsICd7eyRtY2ZhY3RvcnlfdmVyc2lvbn19Jyk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsKCkgewogICAgJGRiID0gY21zX3V0aWxzOjpnZXRfZGIoKTsKICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICRzcWwgPSAkZGljdC0+RHJvcFRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3t7JHRhYmxlX25hbWV9fScpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsKTsKICAgICRkYi0+RHJvcFNlcXVlbmNlKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3t7JHRhYmxlX25hbWV9fV9zZXEnKTsKICAgIGNtc191dGlsczo6Z2V0X21vZHVsZSgnTUNGYWN0b3J5JyktPlJlbW92ZUV2ZW50SGFuZGxlcigkdGhpcy0+Z2V0TmFtZSgpLCAnQ29udGVudEVkaXRQb3N0Jyk7CiAgICAkdGhpcy0+UmVtb3ZlRXZlbnQoJ0NvbnRlbnRFZGl0UG9zdCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoKTsKICB9CgogIGZ1bmN0aW9uIFh0ZW5kZWRNb2R1bGUgKCkgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBHZXRIZWFkZXJIVE1MKCkgewogICAgJGh0bWwgPSAnJzsKICAgIAogICAgJG1jZiA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnTUNGYWN0b3J5Jyk7CiAgICAKICAgIGlmKGlzX29iamVjdCgkbWNmKSkKICAgIHsgICAgICAKICAgICAgICAkaHRtbCAuPSAnPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJyAuICRtY2YtPmxvYWRSZXNvdXJjZSgncHVibGljL2Nzcy9qcXVlcnktdWkubWluLmNzcycpIC4gJyIgLz4nOwoKICAgICAgICAvLyBTRUxFQ1QyCiAgICAgICAgJGh0bWwgLj0gJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJG1jZi0+R2V0TW9kdWxlVVJMUGF0aCgpLiAnL2xpYi92ZW5kb3Ivc2VsZWN0Mi9zZWxlY3QyLmNzcyIgLz4nOwogICAgICAgICRodG1sIC49ICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRtY2YtPkdldE1vZHVsZVVSTFBhdGgoKS4gJy9saWIvdmVuZG9yL3NlbGVjdDIvc2VsZWN0Mi5qcyI+PC9zY3JpcHQ+JzsKICAgICAgICAKICAgICAgICAkaHRtbCAuPSAnCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICAgICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICQoIi5jaHpuLXNlbGVjdCIpLnNlbGVjdDIoKTsKICAgICAgICAgIH0pOwogICAgICAgIDwvc2NyaXB0Pic7CiAgICB9CiAgICAKICAgIHJldHVybiAkaHRtbDsKICB9CgogIGZ1bmN0aW9uIHNldFBhcmFtZXRlcnMoKSAgeyAgJHRoaXMtPkluaXRpYWxpemVHbG9iYWwoKTsgfQoKICBmdW5jdGlvbiBJbml0aWFsaXplR2xvYmFsKCkgeyAgCiAgICAkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKICAgIC8vICR0aGlzLT5SZWdpc3RlclJvdXRlKCcve3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fVwvKD9QPGl0ZW1faWQ+WzAtOV0rKShcLy4qPyk/JC8nLCBhcnJheSgnYWN0aW9uJyA9PiAnZGV0YWlsJywgJ3JldHVybmlkJyA9PiBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5HZXREZWZhdWx0UGFnZUlEKCkpKTsKICAgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcve3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fVwvKD9QPGl0ZW1faWQ+WzAtOV0rKVwvKD9QPHJldHVybmlkPlswLTldKykoXC8uKj8pPyQvJywgYXJyYXkoJ2FjdGlvbicgPT4gJ2RldGFpbCcpKTsKICAgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcve3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fVwvcnNzXC8oP1A8bWFjdGlvbj5bYS16QS1aMC05Xy1dKykoXC8uKj8pPyQvJywgYXJyYXkoJ2FjdGlvbicgPT4gJ3JzcycsICdzaG93dGVtcGxhdGUnID0+ICdmYWxzZScsJ3JldHVybmlkJyA9PiBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5HZXREZWZhdWx0UGFnZUlEKCkpKTsKICAgICR0aGlzLT5SZWdpc3RlclJvdXRlKCcve3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fVwvYXBpXC8oP1A8Y29tbWFuZD5bYS16QS1aMC05Xy1dKykoXC8uKj8pPyQvJywgYXJyYXkoJ2FjdGlvbicgPT4gJ2FwaScsICdzaG93dGVtcGxhdGUnID0+ICdmYWxzZScsJ3JldHVybmlkJyA9PiBjbXNtcygpLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5HZXREZWZhdWx0UGFnZUlEKCkpKTsKICAgIAogICAgJHRoaXMtPlJlZ2lzdGVyUm91dGUoJy97eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKXxsb3dlcn19XC9kb3dubG9hZFwvKD9QPGl0ZW1faWQ+WzAtOV0rKVwvKD9QPGZpZWxkPlthLXpBLVowLTlfLV0rKShcLy4qPyk/JC8nLCAKICAgICAgYXJyYXkoCiAgICAgICdhY3Rpb24nID0+ICdkb3dubG9hZCcsIAogICAgICAnc2hvd3RlbXBsYXRlJyA9PiAnZmFsc2UnLAogICAgICAncmV0dXJuaWQnID0+IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRQYWdlSUQoKQogICAgICApKTsKCgkJJHRoaXMtPlJlZ2lzdGVyUGFyYW1ldGVycygpOwogIH0KCgoJcHJpdmF0ZSBmdW5jdGlvbiBSZWdpc3RlclBhcmFtZXRlcnMoKQoJewogICAgICAgIC8vIE5PVElDRTogRHVlIHRvIHRoZSBkeW5hbWljIGJlaGluZCBNQ0ZhY3RvcnksIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjbGVhbiBwYXJhbWV0ZXJzIHByb3Blcmx5LiBBbHRob3VnaCBpdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSB0aGUgYWRtaW4gbG9ncyBmdWxsIG9mIGFsZXJ0LiBGb3IgdGhlIG1vbWVudCwgdGhpcyBpcyB0aGUgb25seSBhbHRlcm5hdGl2ZS4KCQkkdGhpcy0+UmVzdHJpY3RVbmtub3duUGFyYW1zKHRydWUpOwogICAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKENMRUFOX1JFR0VYUCAuICcvWy1hLXpBLVowLTlfXSovJyxDTEVBTl9OT05FKTsKCX0KCQogIGZ1bmN0aW9uIGNyZWF0ZUxpbmsoJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQ9JycsICRjb250ZW50cz0nJywgJHBhcmFtcz1hcnJheSgpLCAkd2Fybl9tZXNzYWdlPScnLCAkb25seWhyZWY9ZmFsc2UsICRpbmxpbmU9ZmFsc2UsICRhZGR0dGV4dD0nJywgJHRhcmdldGNvbnRlbnRvbmx5PWZhbHNlLCAkcHJldHR5dXJsPScnLCAgJHdpdGhzbGFzaCA9IGZhbHNlKSB7CiAgICBpZiAoJHRhcmdldGNvbnRlbnRvbmx5IHx8ICgkcmV0dXJuaWQgIT0gJycgJiYgISRpbmxpbmUpKSB7CiAgICAgICRpZCA9ICdjbnRudDAxJzsKICAgIH0KICAgIGlmICghJHJldHVybmlkKSB7ICAKICAgICAgICAkcmV0dXJuaWQgPSBjbXNfdXRpbHM6OmdldF9jdXJyZW50X3BhZ2VpZCgpOwogICAgfQogICAgCiAgICBpZiAoZW1wdHkoJHByZXR0eXVybCkpIHsKICAgICAgaWYgKCRhY3Rpb24gPT0gJ2RldGFpbCcpIHsKICAgICAgICAkaXRlbV9pZCA9ICRwYXJhbXNbJ2l0ZW1faWQnXTsKICAgICAgICAkcHJldHR5dXJsID0gJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfGxvd2VyfX0vJyAuICRpdGVtX2lkIC4gJy8nIC4gJHJldHVybmlkOwogICAgICAgCiAgICAgICAgaWYgKCFlbXB0eSgkcGFyYW1zWyd0aXRsZSddKSkgewogICAgICAgICAgJHByZXR0eXVybCAuPSAnLycgLiBtdW5nZV9zdHJpbmdfdG9fdXJsKCRwYXJhbXNbJ3RpdGxlJ10sZmFsc2UsJHdpdGhzbGFzaCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgICRxdWVyeSA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKICAgICAgICAgIGlmICghaW5fYXJyYXkoJG5hbWUsIGFycmF5KAogICAgICAgICAgICAnbW9kdWxlJywgJ2FjdGlvbicsICdpdGVtX2lkJywgJ3RpdGxlJywKICAgICAgICAgICAgJ29yZGVyYnknLCdsaW1pdCcKICAgICAgICAgICAgKSkpIHsKICAgICAgICAgICAgJHF1ZXJ5WyRpZCAuICRuYW1lXSA9ICR2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNvdW50KCRxdWVyeSkpIHsKICAgICAgICAgICRwcmV0dHl1cmwgLj0gJz8nIC4gaHR0cF9idWlsZF9xdWVyeSgkcXVlcnkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcmVudDo6Y3JlYXRlTGluaygkaWQsICRhY3Rpb24sICRyZXR1cm5pZCwgJGNvbnRlbnRzLCAkcGFyYW1zLCAkd2Fybl9tZXNzYWdlLCAkb25seWhyZWYsICRpbmxpbmUsICRhZGR0dGV4dCwgJHRhcmdldGNvbnRlbnRvbmx5LCAkcHJldHR5dXJsKTsKICB9CgogIGZ1bmN0aW9uIFNlYXJjaFJlaW5kZXgoKSB7CiAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgJGMtPmFkZCgncHVibGlzaGVkJywgMSk7CiAgICAkaXRlbXMgPSB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0Ojpkb1NlbGVjdCgkYyk7CiAgICBmb3JlYWNoICgkaXRlbXMgYXMgJGl0ZW0pIHsKICAgICAgJHRoaXMtPmluZGV4KCRpdGVtLCB0cnVlKTsKICAgIH0KICB9CiAgCiAgZnVuY3Rpb24gU2VhcmNoRGVpbmRleCgpIHsKICAgICRjID0gbmV3IE1DRkNyaXRlcmlhKCk7CiAgICAkYy0+YWRkKCdwdWJsaXNoZWQnLCAxKTsKICAgICRpdGVtcyA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0KCRjKTsKICAgIGZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewogICAgICAkdGhpcy0+ZGVpbmRleCgkaXRlbSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpbmRleCgkaXRlbSwgJGZvcmNlID0gZmFsc2UpIHsKICAgIGlmICgkdGhpcy0+Z2V0UHJlZmVyZW5jZSgnaW5kZXhfY29udGVudCcpID09ICd0cnVlJyB8fCAkdGhpcy0+Z2V0UHJlZmVyZW5jZSgnaW5kZXhfY29udGVudCcpID09ICcxJyB8fCAkZm9yY2UpCiAgICB7CiAgICAgICRzZWFyY2ggPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ1NlYXJjaCcpOwogICAgICBpZiAoJHNlYXJjaCkgewogICAgICAgICRzZWFyY2gtPkFkZFdvcmRzKAogICAgICAgICAgJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLAogICAgICAgICAgJGl0ZW0tPmdldElkKCksCiAgICAgICAgICAne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fV9pdGVtJywKICAgICAgICAgICRpdGVtLT5nZXRTZWFyY2hTdHJpbmcoKQogICAgICAgICk7CiAgICAgIH0KICAgIH0KICB9CgogIGZ1bmN0aW9uIGRlaW5kZXgoJGl0ZW0pIHsKICAgICRzZWFyY2ggPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ1NlYXJjaCcpOwogICAgaWYgKCRzZWFyY2gpIHsKICAgICAgJHNlYXJjaC0+RGVsZXRlV29yZHMoJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkaXRlbS0+Z2V0SWQoKSwgJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfGxvd2VyfX1faXRlbScpOwogICAgfQogIH0KCiAgZnVuY3Rpb24gU2VhcmNoUmVzdWx0KCRyZXR1cm5pZCwgJGlkLCAkYXR0ciA9ICcnKSB7CiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgIGlmICgkYXR0ciA9PSAne3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl8bG93ZXJ9fV9pdGVtJykgewogICAgICAkYyA9IG5ldyBNQ0ZDcml0ZXJpYSgpOwogICAgICAkYy0+YWRkKCdpZCcsICRpZCk7CiAgICAgICRjLT5hZGQoJ3B1Ymxpc2hlZCcsIDEpOwogICAgICAkaXRlbSA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0T25lKCRjKTsKICAgICAgaWYgKCRpdGVtKSB7CiAgICAgICAgJHJlc3VsdFswXSA9ICR0aGlzLT5HZXRGcmllbmRseU5hbWUoKTsKICAgICAgICAkcmVzdWx0WzFdID0gJGl0ZW0tPmdldFRpdGxlKCk7CiAgICAgICAgJHJlc3VsdFsyXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCdjbnRudDAxJywgJ2RldGFpbCcsICRyZXR1cm5pZCwgJycsIGFycmF5KCdpdGVtX2lkJyA9PiAkaWQsICd0aXRsZScgPT4gJGl0ZW0tPmdldFRpdGxlKCkpLCAnJywgdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KICAKICAvKgogICogRGlnZXN0OiBOZXcgbm90aWZpY2F0aW9uIHRvb2wgZnVuY3Rpb24KICAqLwogIAogIHB1YmxpYyBmdW5jdGlvbiBEaWdlc3QoJHRpbWVzdGFtcCwgJHBhcmFtcykKICB7CiAgICByZXR1cm4gJHRoaXMtPk5UTGlzdChkYXRlKCdZLW0tZCcsICR0aW1lc3RhbXApLCAkcGFyYW1zWyd0ZW1wbGF0ZSddLCAkcGFyYW1zKTsKICB9CiAgCiAgLyoqCiAgICogTlRMaXN0OiBOb3RpZmljYXRpb24gVG9vbCBmdW5jdGlvbjogUmV0dXJuIHRoZSBsaXN0IG9mIGl0ZW1zIHVwbG9hZGVkIHNpbmNlIGEgY2VydGFpbiBkYXRlIAogICAqLwoKICBmdW5jdGlvbiBOVExpc3QoJGRhdGUsICR0ZW1wbGF0ZSA9IG51bGwsICRwYXJhbXMgPSBhcnJheSgpKQogIHsKICAgICRyZXR1cm5pZCA9ICR0aGlzLT5nZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3BhZ2UnLCAkdGhpcy0+Y21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpLT5HZXREZWZhdWx0UGFnZUlEKCkpOwogICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICRjLT5hZGQoJ3B1Ymxpc2hlZCcsICcxJyk7CiAgICBpZihpc3NldCgkcGFyYW1zWydjcmVhdGVkX2F0J10pKQogICAgewogICAgICAkYy0+YWRkKCdjcmVhdGVkX2F0JywgJGRhdGUsIE1DRkNyaXRlcmlhOjpHUkVBVEVSX0VRVUFMKTsgIAogICAgfQogICAgZWxzZWlmKGlzc2V0KCRwYXJhbXNbJ2RhdGVfZmllbGQnXSkpCiAgICB7CiAgICAgICRjLT5hZGQoJHBhcmFtc1snZGF0ZV9maWVsZCddLCAkZGF0ZSwgTUNGQ3JpdGVyaWE6OkdSRUFURVJfRVFVQUwpOyAgCiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICRjLT5hZGQoJ3VwZGF0ZWRfYXQnLCAkZGF0ZSwgTUNGQ3JpdGVyaWE6OkdSRUFURVJfRVFVQUwpOwogICAgfSAgICAKICAgIAogICAge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6YnVpbGRGcm9udGVuZEZpbHRlcnMoJGMsICRwYXJhbXMpOwogICAgJGMtPmFkZEFzY2VuZGluZ09yZGVyQnlDb2x1bW4oJ3VwZGF0ZWRfYXQnKTsKICAgICRpdGVtcyA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0KCRjKTsKCiAgICBpZiAoZW1wdHkoJGl0ZW1zKSkKICAgIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAKICAgIGlmICghaXNfbnVsbCgkdGVtcGxhdGUpKQogICAgewogICAgICAkcGFyYW1zWyd0ZW1wbGF0ZSddID0gJHRlbXBsYXRlOwogICAgfQoKICAgICRkZXRhaWxwYWdlID0gJHJldHVybmlkOwogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2RldGFpbHBhZ2UnXSkpIHsKICAgICAgICAkbWFuYWdlciA9IGNtc21zKCktPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICAgICAkbm9kZSA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5QWxpYXMoJHBhcmFtc1snZGV0YWlscGFnZSddKTsKICAgICAgICBpZiAoJG5vZGUpIHsKICAgICAgICAgICAgJGNvbnRlbnQgPSAkbm9kZS0+R2V0Q29udGVudCgpOwogICAgICAgICAgICBpZiAoJGNvbnRlbnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRkZXRhaWxwYWdlID0gJGNvbnRlbnQtPklkKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbm9kZSA9ICRtYW5hZ2VyLT5zdXJlR2V0Tm9kZUJ5SWQoJHBhcmFtc1snZGV0YWlscGFnZSddKTsKICAgICAgICAgICAgaWYgKCRub2RlKSB7CiAgICAgICAgICAgICAgICAkZGV0YWlscGFnZSA9ICRwYXJhbXNbJ2RldGFpbHBhZ2UnXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcGFyYW1zWydvcmlnaWQnXSA9ICRyZXR1cm5pZDsKICAgIH0KCiAgICBmb3JlYWNoICgkaXRlbXMgYXMgJiRpdGVtKSB7CiAgICAgICRwYXJhbXNbJ2l0ZW1faWQnXSA9ICRpdGVtLT5nZXRJZCgpOwogICAgICAkcGFyYW1zWyd0aXRsZSddID0gJGl0ZW0tPmdldFRpdGxlKCk7CiAgICAgICRuZXdwYXJhbXMgPSAkcGFyYW1zOwogICAgICB1bnNldCgkbmV3cGFyYW1zWydzaG93dGVtcGxhdGUnXSk7CiAgICAgICRpdGVtLT5kZXRhaWxfbGluayA9ICR0aGlzLT5jcmVhdGVMaW5rKCRpZCwgJ2RldGFpbCcsICRkZXRhaWxwYWdlLCAkY29udGVudHM9JycsICRuZXdwYXJhbXMsICcnLCB0cnVlKTsKICAgICAgaWYoY2xhc3NfZXhpc3RzKCdNWF9YdGVuZGVkTW9kdWxlJykpCiAgICAgIHsKICAgICAgICAkeHRlbmRlZF9mZWxpc3QgPSBNWF9YdGVuZGVkTW9kdWxlOjpnZXRSZWxhdGVkSXRlbXMoJHRoaXMtPmdldE5hbWUoKSwgJGl0ZW0tPmdldElkKCkpOyAgICAgICAgCiAgICAgIH0KICAgIH0KICAgIHVuc2V0KCRpdGVtKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJGl0ZW1zKTsgICAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0nLCAkaXRlbXMpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKXxsb3dlcn19JywgJGl0ZW1zKTsKICAgICRwYXJhbXNvYmogPSBuZXcgc3RkQ2xhc3MoKTsKICAgICRwYXJhbXNvYmotPnBhcmFtcyA9ICRwYXJhbXM7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21jZmFjdG9yeScsICRwYXJhbXNvYmopOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKXxsb3dlcn19X3BhcmFtcycsICRwYXJhbXNvYmopOwogICAgcmV0dXJuICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGb3IoJ2RlZmF1bHQnLCAkcGFyYW1zKTsKICB9CiAgCiAge3tpZiBpc3NldCgkcmF0YWJsZSl9fQogIC8vIFJhdGFibGUgbW9kdWxlCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1cGRhdGVSYXRlKCRpdGVtX2lkLCAkcmF0ZSkKICB7CiAgICAkaXRlbSA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OnJldHJpZXZlQnlQaygkaXRlbV9pZCk7CgogICAgaWYgKCRpdGVtICE9PSBmYWxzZSkKICAgIHsKICAgICAgJGl0ZW0tPnJhdGUgPSAkcmF0ZTsKICAgICAgJGl0ZW0tPnNhdmUoKTsKICAgIH0KICB9CiAge3svaWZ9fQogIAogIHB1YmxpYyBmdW5jdGlvbiB1cGRhdGVJdGVtKCRpdGVtX2lkKQogIHsKICAgICRpdGVtID0ge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6cmV0cmlldmVCeVBrKCRpdGVtX2lkKTsKICAgIAogICAgaWYgKCRpdGVtICE9PSBmYWxzZSkKICAgIHsKICAgICAgJGl0ZW0tPmZvcmNlVXBkYXRlT2JqZWN0KCdtYWdpYycpOyAgCiAgICB9CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0QWRtaW5MaXN0KCRpZCwkcmV0dXJuaWQsJHRoaXJkPW51bGwpCiAgewoKICB9CiAgCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBFeHBvcnREYXRhcygpICB7CiAgICAkZGF0YXMgPSBhcnJheSgpOwogICAgJGMgPSBuZXcgTUNGQ3JpdGVyaWEoKTsKICAgICRpdGVtcyA9IHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX1PYmplY3Q6OmRvU2VsZWN0KCRjKTsKCiAgICAkZGF0YXNbMF0gPSBhcnJheSgKICAgICAgJ2lkJywKICAgICAgJ3RpdGxlJywKICAgICAge3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KICAgICAgICB7e2lmICEgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmV4Y2x1ZGVfZnJvbV9leHBvcnQpfX0KICAgICAgICAne3skZmllbGQuZnJpZW5kbHluYW1lfX0nLAogICAgICAgIHt7L2lmfX0KICAgICAge3svZm9yZWFjaH19CiAgICAgICdjcmVhdGVkX2F0JywKICAgICAgJ2NyZWF0ZWRfYnknLAogICAgICAnbWNmaV9jcmVhdGVkX3RpbWVzdGFtcCcsCiAgICAgICd1cGRhdGVkX2F0JywKICAgICAgJ3VwZGF0ZWRfYnknLAogICAgICAnbWNmaV91cGRhdGVkX3RpbWVzdGFtcCcsCiAgICAgICdvcmRlcl9ieScsCiAgICAgICdwdWJsaXNoZWQnLAogICAgICAncGFyZW50X2l0ZW0nLAogICAgICAncGFyZW50X2lkJywKICAgICAgJ3VzZXJfaWQnCiAgICAgICk7CiAgICAgIAogICAgZm9yZWFjaCgkaXRlbXMgYXMgJGl0ZW0pCiAgICB7CiAgICAgICRkYXRhc1tdID0gYXJyYXkoCiAgICAgICAgJ2lkJyA9PiAkaXRlbS0+Z2V0SWQoKSwKICAgICAgICAndGl0bGUnID0+ICRpdGVtLT5nZXRUaXRsZSgpLAogICAgICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgICAgICB7e2lmICEgaXNzZXQoJGZpZWxkLmZvcHRpb25zLmV4Y2x1ZGVfZnJvbV9leHBvcnQpfX0KICAgICAgICAgICd7eyRmaWVsZC5mcmllbmRseW5hbWV9fScgPT4gJGl0ZW0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19KCksCiAgICAgICAgICB7ey9pZn19CiAgICAgICAge3svZm9yZWFjaH19CiAgICAgICAgJ2NyZWF0ZWRfYXQnID0+ICRpdGVtLT5nZXRDcmVhdGVkQXQoKSwKICAgICAgICAnY3JlYXRlZF9ieScgPT4gJGl0ZW0tPmdldENyZWF0ZWRCeSgpLAogICAgICAgICdtY2ZpX2NyZWF0ZWRfdGltZXN0YW1wJyA9PiAkaXRlbS0+Z2V0TWNmaUNyZWF0ZWRUaW1lc3RhbXAoKSwKICAgICAgICAndXBkYXRlZF9hdCcgPT4gJGl0ZW0tPmdldFVwZGF0ZWRBdCgpLAogICAgICAgICd1cGRhdGVkX2J5JyA9PiAkaXRlbS0+Z2V0VXBkYXRlZEJ5KCksCiAgICAgICAgJ21jZmlfdXBkYXRlZF90aW1lc3RhbXAnID0+ICAkaXRlbS0+Z2V0TWNmaVVwZGF0ZWRUaW1lc3RhbXAoKSwKICAgICAgICAnb3JkZXJfYnknID0+ICRpdGVtLT5nZXRPcmRlckJ5KCksCiAgICAgICAgJ3B1Ymxpc2hlZCcgPT4gJGl0ZW0tPmdldFB1Ymxpc2hlZCgpLAogICAgICAgICdwYXJlbnRfaXRlbScgPT4gJGl0ZW0tPmdldFBhcmVudEl0ZW0oKSwKICAgICAgICAncGFyZW50X2lkJyA9PiAkaXRlbS0+Z2V0UGFyZW50SWQoKSwKICAgICAgICAndXNlcl9pZCcgPT4gJGl0ZW0tPmdldFVzZXJJZCgpCiAgICAgICk7CiAgICB9CiAgICAgIAogICAgcmV0dXJuICRkYXRhczsKICB9CiAgCiAgLy8gQ01TIFVzZXIKICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckZ1bmN0aW9uKCkKICB7CiAgICAvLyBJcyBVc2VyIE1vZHVsZSA/CiAgICB7e2lmIGlzc2V0KCRpc191c2VyX21vZHVsZSl9fQogICAgICByZXR1cm4gJ3VzZXJHZXRFZGl0TGluayc7CiAgICB7e2Vsc2V9fQogICAgICAvLyBGaXJzdCBvbmUgd2luCiAgICAgIHt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19CiAgICAgICAge3tpZiAkZmllbGQuZm9ybV90eXBlID09ICd1c2VyJ319CiAgICAgICAgICB7e2lmICFpc3NldCgkZmllbGQuZm9wdGlvbnMubXVsdGlwbGUpfX0KICAgICAgICAgICAgcmV0dXJuICdyZXRyaWV2ZUxpbmtGb3J7eyRmaWVsZC5jYW1lbGNhc2V9fSc7CiAgICAgICAgICB7ey9pZn19CiAgICAgICAge3svaWZ9fQogICAgICB7ey9mb3JlYWNofX0KICAgIHt7L2lmfX0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgCiAgLy8gVEVNUExBVEVTCiAgCiAgcHVibGljIGZ1bmN0aW9uIEdldERlZmF1bHRUZW1wbGF0ZXMoKQogIHsKICAgICRhcnJheSA9IHVuc2VyaWFsaXplKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3RlbXBsYXRlcycpKTsKICAgIGlmIChpc19hcnJheSgkYXJyYXkpKQogICAgewogICAgICByZXR1cm4gJGFycmF5OwogICAgfQogICAgcmV0dXJuIGFycmF5KCk7CiAgfSAKICAKICBwdWJsaWMgZnVuY3Rpb24gU2V0RGVmYXVsdFRlbXBsYXRlcygkbGlzdCA9IGFycmF5KCkpCiAgewogICAgcmV0dXJuICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3RlbXBsYXRlcycsIHNlcmlhbGl6ZSgkbGlzdCkpOwogIH0KICAKICBwdWJsaWMgZnVuY3Rpb24gQWRkRGVmYXVsdFRlbXBsYXRlKCRhY3Rpb24sICR0ZW1wbGF0ZSkKICB7CiAgICAkbGlzdCA9ICR0aGlzLT5HZXREZWZhdWx0VGVtcGxhdGVzKCk7CiAgICAkbGlzdFskYWN0aW9uXSA9ICR0ZW1wbGF0ZTsKICAgICR0aGlzLT5TZXREZWZhdWx0VGVtcGxhdGVzKCRsaXN0KTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIEdldERlZmF1bHRUZW1wbGF0ZSgkYWN0aW9uKQogIHsKICAgICAgJGxpc3QgPSAkdGhpcy0+R2V0RGVmYXVsdFRlbXBsYXRlcygpOwogICAgICBpZiAoIWlzX2FycmF5KCRsaXN0KSkgJGxpc3QgPSBhcnJheSgpOwogICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkYWN0aW9uLCAkbGlzdCkpIC8vIFRPRE86IFBvc3NpYmxlIHByb2JsZW0gd2l0aCBsaXN0CiAgICAgIHsKICAgICAgICByZXR1cm4gJGxpc3RbJGFjdGlvbl07CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBpc0RlZmF1bHRUZW1wbGF0ZSgkdGVtcGxhdGUpCiAgeyAgICAKICAgICRsaXN0ID0gJHRoaXMtPkdldERlZmF1bHRUZW1wbGF0ZXMoKTsKICAgICRhY3Rpb24gPSBhcnJheV9zZWFyY2goJHRlbXBsYXRlLCAkbGlzdCk7CiAgICBpZigkYWN0aW9uICE9PSBmYWxzZSkKICAgIHsKICAgICAgcmV0dXJuICRhY3Rpb247CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfSAgCiAgCiAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZURlZmF1bHRUZW1wbGF0ZSgkdGVtcGxhdGUpCiAgeyAgICAKICAgICRsaXN0ID0gJHRoaXMtPkdldERlZmF1bHRUZW1wbGF0ZXMoKTsKICAgICRhY3Rpb24gPSBhcnJheV9zZWFyY2goJHRlbXBsYXRlLCAkbGlzdCk7CiAgICBpZigkYWN0aW9uICE9PSBmYWxzZSkKICAgIHsKICAgICAgdW5zZXQoJGxpc3RbJGFjdGlvbl0pOwogICAgICAkdGhpcy0+U2V0RGVmYXVsdFRlbXBsYXRlcygkbGlzdCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIAogIHB1YmxpYyBmdW5jdGlvbiBQcm9jZXNzVGVtcGxhdGVGb3IoJGFjdGlvbiwgJHBhcmFtcyA9IGFycmF5KCkpCiAgewogICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlJ10pICYmICR0aGlzLT5HZXRUZW1wbGF0ZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKSkgewogICAgICByZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgkcGFyYW1zWyd0ZW1wbGF0ZSddKTsKICAgIH0KICAgIGVsc2VpZiAoKCR0ZW1wbGF0ZSA9ICR0aGlzLT5HZXREZWZhdWx0VGVtcGxhdGUoJGFjdGlvbikpICAmJiAgKCR0aGlzLT5HZXRUZW1wbGF0ZSgkdGVtcGxhdGUpICE9PSBmYWxzZSkpCiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCR0ZW1wbGF0ZSk7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIHJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdmcm9udGVuZC4nLiRhY3Rpb24uJy50cGwnKTsKICAgIH0KICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIFBhcmFtc0ZvckxpbmsoJHBhcmFtcywkaW5jbHVkZSA9IGFycmF5KCksJGV4Y2x1ZGUgPSBhcnJheSgpKQogIHsKICAgICRuZXdfcGFyYW1zID0gYXJyYXkoKTsKICAgIAogICAgZm9yZWFjaCgkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlKQogICAgewogICAgICBpZiAoIWluX2FycmF5KCRrZXksICRleGNsdWRlKSkKICAgICAgewogICAgICAgICRuZXdfcGFyYW1zWyRrZXldID0gJHZhbHVlOwogICAgICB9CiAgICB9CiAgICAKICAgIGZvcmVhY2goJGluY2x1ZGUgYXMgJGtleSA9PiAkdmFsdWUpCiAgICB7CiAgICAgIGlmICghaW5fYXJyYXkoJGtleSwgJGV4Y2x1ZGUpKQogICAgICB7CiAgICAgICAgJG5ld19wYXJhbXNbJGtleV0gPSAkdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIAogICAgLy8gTm93IHdlJ2xsIHRyZWF0aCB0aGUgY29tcGxleCBhcnJheSBwcm9ibGVtCiAgICAKICAgICRxdWVyeSA9IGh0dHBfYnVpbGRfcXVlcnkoJG5ld19wYXJhbXMpOwogICAgJGVudHJpZXMgPSBleHBsb2RlKCcmJywgJHF1ZXJ5KTsKICAgICRvdXRwdXQgPSBhcnJheSgpOwogICAgZm9yZWFjaCgkZW50cmllcyBhcyAkZW50cnkpCiAgICB7CiAgICAgICRkYXRhID0gZXhwbG9kZSgnPScsICRlbnRyeSk7CiAgICAgICRvdXRwdXRbJGRhdGFbMF1dID0gdXJsZGVjb2RlKCRkYXRhWzFdKTsKICAgIH0gIAogICAgCiAgICByZXR1cm4gJG91dHB1dDsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkRmlsdGVyc0NyaXRlcmlhKE1DRkNyaXRlcmlhICYkYywgJGZpbHRlcnMpCiAgewogICAgLy8gREVQUkVDQVRFRAogICAge3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fU9iamVjdDo6YnVpbGRGaWx0ZXJzQ3JpdGVyaWEoJGMsICRmaWx0ZXJzKTsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGJ1aWxkRnJvbnRlbmRGaWx0ZXJzKE1DRkNyaXRlcmlhICYkYywgJHBhcmFtcykKICB7CiAgICAvLyBERVBSRUNBVEVECiAgICB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0OjpidWlsZEZyb250ZW5kRmlsdGVycygkYywgJHBhcmFtcyk7CiAgfQogIAogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24ganVtcFRvKCR1cmwpCiAgewogICAgJHVybCA9IHNlbGY6OnBhcnNlVXJsKCR1cmwpOwogICAgaWYgKGhlYWRlcnNfc2VudCgpKQogICAgewogICAgICBlY2hvICcKICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICA8IS0tCiAgICAgICAgbG9jYXRpb24ucmVwbGFjZSgiJy4kdXJsLiciKTsKICAgICAgLy8gLS0+CiAgICAgIDwvc2NyaXB0PgogICAgICA8bm9zY3JpcHQ+CiAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iUmVmcmVzaCIgY29udGVudD0iMDtVUkw9Jy4kdXJsLiciPgogICAgICA8L25vc2NyaXB0Pic7CiAgICAgIGV4aXQ7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgIGhlYWRlcignTG9jYXRpb246ICcuJHVybCk7CiAgICB9CiAgfQogIAogIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHBhcnNlVXJsKCR1cmwpCiAgewogICAgaWYgKHN0cnBvcygkdXJsLCdodHRwJykgPT09IDApCiAgICB7CiAgICAgIHJldHVybiAkdXJsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAkbWFuYWdlciA9IGNtc21zKCktPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICAgJG5vZGUgPSAkbWFuYWdlci0+c3VyZUdldE5vZGVCeUFsaWFzKCR1cmwpOwogICAgICBpZiAoJG5vZGUpIHsKICAgICAgICAkY29udGVudCA9ICRub2RlLT5HZXRDb250ZW50KCk7CiAgICAgICAgaWYgKCRjb250ZW50KQogICAgICAgIHsKICAgICAgICAgIHJldHVybiAkY29udGVudC0+R2V0VXJsKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UKICAgICAgewogICAgICAgICRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkdXJsKTsKICAgICAgICBpZiAoJG5vZGUpIHsKICAgICAgICAgICRjb250ZW50ID0gJG5vZGUtPkdldENvbnRlbnQoKTsKICAgICAgICAgIGlmICgkY29udGVudCkKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRjb250ZW50LT5HZXRVcmwoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gIAogICAgcmV0dXJuIG51bGw7CiAgfQoKCXt7aWYgJGV2ZW50c3xAY291bnQgPiAwfX0KCXB1YmxpYyBmdW5jdGlvbiBIYW5kbGVzRXZlbnRzKCkJewlyZXR1cm4gdHJ1ZTsJfQoJCglwdWJsaWMgZnVuY3Rpb24gRG9FdmVudCgkb3JpZ2luYXRvciwgJGV2ZW50bmFtZSwgJiRwYXJhbXMpIHsKCQl7e2ZvcmVhY2ggZnJvbT0kZXZlbnRzIGtleT1tb2R1bGVfbmFtZSBpdGVtPWV2ZW50c19uYW1lfX0KCQlpZigne3skbW9kdWxlX25hbWV9fScgPT0gJG9yaWdpbmF0b3IpCXsKCQkJe3tmb3JlYWNoIGZyb209JGV2ZW50c19uYW1lIGtleT1ldmVudF9uYW1lIGl0ZW09ZXZlbnR9fQoJCQlpZigne3skZXZlbnRfbmFtZX19JyA9PSAkZXZlbnRuYW1lKQl7CgkJCQl7eyRldmVudH19CgkJCX0KCQkJe3svZm9yZWFjaH19CgkJfQoJCXt7L2ZvcmVhY2h9fQoJfQoJe3svaWZ9fQogIAogIC8vIEVYVFJBIEFDVElPTlMKICAKICBwdWJsaWMgZnVuY3Rpb24gZ2V0QnV0dG9uc0ZvcigkcGxhY2UpCiAgewogICAgZ2xvYmFsICRpZDsKICAgIGdsb2JhbCAkcmV0dXJuaWQ7CiAgICAKICAgIHN3aXRjaCgkcGxhY2UpCiAgICB7CiAgICAgIHt7Zm9yZWFjaCBmcm9tPSRidXR0b25zIGl0ZW09YnV0dG9uIGtleT1wbGFjZX19CiAgICAgIGNhc2UgJ3t7JHBsYWNlfX0nOgogICAgICAgICRodG1sID0gJyc7CiAgICAgICAge3tmb3JlYWNoIGZyb209JGJ1dHRvbiBpdGVtPWFjdGlvbn19CiAgICAgICAgJGh0bWwgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAne3skYWN0aW9uLT5uYW1lfX0nLCAkcmV0dXJuaWQsICd7eyRhY3Rpb24tPmJ1dHRvbl9uYW1lfX0nLCBhcnJheSgnY2xhc3MnID0+ICdhY3Rpb25idXR0b24nKSk7CiAgICAgICAge3svZm9yZWFjaH19CiAgICAgICAgcmV0dXJuICRodG1sOwogICAgICAgIGJyZWFrOwogICAgICB7ey9mb3JlYWNofX0KICAgICAgZGVmYXVsdDoKICAgICAgYnJlYWs7CiAgICB9CgogIH0KICAKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRpdGxlTGFiZWwoKQogIHsKICAgIHJldHVybiAoc3RyaW5nKSd7eyR0aXRsZV9sYWJlbH19JzsKICB9CgoJcHVibGljIGZ1bmN0aW9uIGRvU2VsZWN0KE1DRkNyaXRlcmlhICRjKQoJewoJCXJldHVybiB7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19T2JqZWN0Ojpkb1NlbGVjdCgkYyk7Cgl9Cn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/rss/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/smarty/templates/rss/rss.css.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogY3NzIGZvciBSU1MgeHNsICovCgpib2R5e2JhY2tncm91bmQtY29sb3I6I2ZmZjtib3JkZXI6MHB4O21hcmdpbjoxMHB4O2ZvbnQtZmFtaWx5OlZlcmRhbmEsQXJpYWwsSGVsdmV0aWNhLHNhbnMtc2VyaWYsIk1TIHNhbnMgc2VyaWYiO2ZvbnQtc2l6ZTo4MCU7Zm9udC13ZWlnaHQ6bm9ybWFsO2NvbG9yOiMwMDAwMDA7fQpmb3Jte21hcmdpbjowcHg7cGFkZGluZzowcHg7fQpoMnttYXJnaW46MHB4O3BhZGRpbmc6NXB4IDBweDtmb250LXNpemU6MTQwJTt9CnB7bWFyZ2luOjBweDtwYWRkaW5nOjVweCAwcHg7fQoKYTpsaW5re3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMDAlO2NvbG9yOiMwMDAwOTk7fQphOnZpc2l0ZWR7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Zm9udC1zaXplOjEwMCU7Y29sb3I6IzY2NjZDQzt9CmE6YWN0aXZle3RleHQtZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMDAlO2NvbG9yOiMwMDAwOTk7fQphOmhvdmVye2ZvbnQtc2l6ZToxMDAlO2NvbG9yOiMwMDAwOTk7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9CgphLml0ZW06bGlua3tmb250LXdlaWdodDpib2xkO30KYS5pdGVtOnZpc2l0ZWR7Zm9udC13ZWlnaHQ6Ym9sZDt9CmEuaXRlbTphY3RpdmV7Zm9udC13ZWlnaHQ6Ym9sZDt9CmEuaXRlbTpob3Zlcntmb250LXdlaWdodDpib2xkO30KCi50b3Bib3h7d2lkdGg6MTAwJTt9Ci5iYW5ib3h7d2lkdGg6MTAwJTt9CgoubWFpbmJveHt3aWR0aDoxMDAlO3BhZGRpbmctdG9wOjEwcHg7fQouaXRlbWJveHt3aWR0aDo2MiU7ZmxvYXQ6bGVmdDtwYWRkaW5nLXRvcDoxMHB4O30KLnJoc2JveHtib3JkZXItbGVmdDoxcHggZGFzaGVkICM5OTk7d2lkdGg6MzYlO2Zsb2F0OnJpZ2h0O30KLmZvb3RlcmJveHtjbGVhcjpib3RoO3dpZHRoOjEwMCU7Ym9yZGVyLXRvcDoxcHggc29saWQgIzAwMDt9CgojaXRlbSB1bCB7bGlzdC1zdHlsZTpub25lO21hcmdpbjowcHg7cGFkZGluZzowcHg7Ym9yZGVyOm5vbmU7fQojaXRlbSBsaSB7bWFyZ2luOjA7cGFkZGluZzo1cHggMHB4O30KLnJoc2JveCB1bCB7bGlzdC1zdHlsZS10eXBlOmRpc2M7bWFyZ2luOjBweCAyMHB4O3BhZGRpbmc6MHB4O2JvcmRlcjpub25lO30KLnJoc2JveCBsaSB7bWFyZ2luOjA7cGFkZGluZzo1cHggMHB4O30KCi5wYWR0b3Bib3h7cGFkZGluZzoxMHB4O2JvcmRlcjoxcHggc29saWQgIzk5OTt9Ci5wYWRpdGVtYm94e3BhZGRpbmc6MTBweCA1cHggMTBweCAxMHB4O30KLnBhZGJhbmJveHtwYWRkaW5nOjIwcHggMTBweCAxMHB4IDEwcHg7fQoucGFkcmhzYm94e3BhZGRpbmc6MTBweCAwcHggMjBweCAxMHB4O30KCi5zdWJoZWFke2ZvbnQtd2VpZ2h0OmJvbGQ7fQouZGlzY2xhaW17Zm9udC1zaXplOjExcHg7Y29sb3I6Izk5OTt9CgoubXZie21hcmdpbi1ib3R0b206NXB4O30KLmZsdGx7ZmxvYXQ6bGVmdDt9Ci5mbHRjbGVhcntjbGVhcjpib3RoO30KCg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/rss/style.xsl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8eHNsOnN0eWxlc2hlZXQgdmVyc2lvbj0iMS4xIiB4bWxuczp4c2w9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvWFNML1RyYW5zZm9ybSI+CiAgPHhzbDpvdXRwdXQgbWV0aG9kPSJodG1sIiAvPiAgIAogICA8eHNsOnZhcmlhYmxlIG5hbWU9InRpdGxlIiBzZWxlY3Q9Ii9yc3MvY2hhbm5lbC90aXRsZSIvPiAgIAogIDx4c2w6dGVtcGxhdGUgbWF0Y2g9Ii8iPgogICAgPGh0bWw+CiAgICAgIDxoZWFkPgogICAgICAgIDx0aXRsZT4KICAgICAgICAgIDx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdGl0bGUiLz4gWE1MIEZlZWQ8L3RpdGxlPgogICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii9tb2R1bGVzL3t7JG1vZHVsZS0+R2V0TW9kdWxlTmFtZSgpfX0vcnNzL3Jzcy5jc3MiIHR5cGU9InRleHQvY3NzIi8+CiAgICAgIAogICAgICA8L2hlYWQ+IAogICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJyc3MvY2hhbm5lbCIvPiAgIAogICAgPC9odG1sPgogIDwveHNsOnRlbXBsYXRlPgogIAogICAgPHhzbDp0ZW1wbGF0ZSBtYXRjaD0iY2hhbm5lbCI+CiAgICA8Ym9keT4gICAgICAgICAKICAgICAgPGRpdiBjbGFzcz0idG9wYm94Ij4KICAgICAgPGRpdiBjbGFzcz0icGFkdG9wYm94Ij4KICAgICAgPGgyPldoYXQgaXMgdGhpcyBwYWdlPzwvaDI+CiAgICAgIDxwPlRoaXMgaXMgYW4gUlNTIGZlZWQgZnJvbSB0aGUgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImltYWdlL3RpdGxlIiAvPiB3ZWJzaXRlLiBSU1MgZmVlZHMgYWxsb3cgeW91IHRvIHN0YXkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBsYXRlc3QgbmV3cyBhbmQgZmVhdHVyZXMgeW91IHdhbnQgZnJvbSAgPHhzbDp2YWx1ZS1vZiBzZWxlY3Q9ImltYWdlL3RpdGxlIiAvPi48L3A+CiAgICAgIDxwPlRvIHN1YnNjcmliZSB0byBpdCwgeW91IHdpbGwgbmVlZCBhIE5ld3MgUmVhZGVyIG9yIG90aGVyIHNpbWlsYXIgZGV2aWNlLjwvcD4KICAgICAgPHA+CjxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUnNzIj48c3Ryb25nPkhlbHA8L3N0cm9uZz4sIEkgZG9uJ3Qga25vdyB3aGF0IGEgbmV3cyByZWFkZXIgaXMgYW5kIHN0aWxsIGRvbid0IGtub3cgd2hhdCB0aGlzIGlzIGFib3V0LjwvYT48YnIgY2xlYXI9ImFsbCIgLz4KICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgICAgPC9kaXY+ICAgIAogICAgICAKICAgICAgPGRpdiBjbGFzcz0iYmFuYm94Ij4KICAgICAgPGRpdiBjbGFzcz0icGFkYmFuYm94Ij4gICAgIAogICAgICA8ZGl2IGNsYXNzPSJtdmIiPgogICAgICA8ZGl2IGNsYXNzPSJmbHRsIj48c3BhbiBjbGFzcz0ic3ViaGVhZCI+UlNTIEZlZWQgRm9yOiA8L3NwYW4+PC9kaXY+PGEgaHJlZj0iIyIgY2xhc3M9Iml0ZW0iPjx4c2w6dmFsdWUtb2Ygc2VsZWN0PSIkdGl0bGUiLz48L2E+PGJyIGNsZWFyPSJhbGwiIC8+CiAgICAgICA8L2Rpdj4KICAgICAgIAogICAgCiAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4gICAgCiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhZGl0ZW1ib3giPgogICAgICAgICAgPHhzbDphcHBseS10ZW1wbGF0ZXMgc2VsZWN0PSJpdGVtIi8+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4gIAogICAgICAgIDxkaXYgY2xhc3M9InJoc2JveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWRyaHNib3giPgogICAgICAgICAgPGgyPlN1YnNjcmliZSB0byB0aGlzIGZlZWQ8L2gyPgogICAgICAgICAgPHA+WW91IGNhbiBzdWJzY3JpYmUgdG8gdGhpcyBSU1MgZmVlZCBpbiBhIG51bWJlciBvZiB3YXlzLCBpbmNsdWRpbmcgdGhlIGZvbGxvd2luZzo8L3A+CiAgICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+RHJhZyB0aGUgb3JhbmdlIFJTUyBidXR0b24gaW50byB5b3VyIE5ld3MgUmVhZGVyPC9saT4KICAgICAgICAgIDxsaT5EcmFnIHRoZSBVUkwgb2YgdGhlIFJTUyBmZWVkIGludG8geW91ciBOZXdzIFJlYWRlcjwvbGk+CiAgICAgICAgICA8bGk+Q3V0IGFuZCBwYXN0ZSB0aGUgVVJMIG9mIHRoZSBSU1MgZmVlZCBpbnRvIHlvdXIgTmV3cyBSZWFkZXI8L2xpPgogICAgICAgICAgPC91bD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgIDwvZGl2PiAgICAKICAgICAgICA8L2Rpdj4gIAogICAgICA8L2Rpdj4gIAogICAgICAKICAgIDxkaXYgY2xhc3M9ImZvb3RlcmJveCI+CgogICAgPC9kaXY+CiAgICAgICAgCiAgICA8L2JvZHk+CiAgPC94c2w6dGVtcGxhdGU+CiAgICAKICA8eHNsOnRlbXBsYXRlIG1hdGNoPSJpdGVtIj4KICA8ZGl2IGlkPSJpdGVtIj4KICA8dWw+CiAgICAgIDxsaT4KICAgICAgICA8YSBocmVmPSJ7bGlua30iIGNsYXNzPSJpdGVtIj4KICAgICAgICAgIDx4c2w6dmFsdWUtb2YgZGlzYWJsZS1vdXRwdXQtZXNjYXBpbmc9InllcyIgc2VsZWN0PSJ0aXRsZSIvPgogICAgICAgIDwvYT48YnIvPiAgICAgCiAgICAgICAgPGRpdj4KICAgICAgICA8eHNsOnZhbHVlLW9mIGRpc2FibGUtb3V0cHV0LWVzY2FwaW5nPSJ5ZXMiIHNlbGVjdD0iZGVzY3JpcHRpb24iIC8+ICAgICAgICAgCiAgICAgICAgPC9kaXY+ICAKICAgICAgICA8L2xpPgogICAgPC91bD4KICA8L2Rpdj4gICAgCiAgPC94c2w6dGVtcGxhdGU+CjwveHNsOnN0eWxlc2hlZXQ+]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/smarty/templates/templates/admin.itemsTable.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgIDx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGg+e3skdGl0bGVfbGFiZWx9fTwvdGg+CiAgICAgICAgICAgICAgICB7Zm9yZWFjaCBmcm9tPSRjb2x1bW5zIGl0ZW09Y29sdW1uIGtleT1uYW1lIG5hbWU9Zm9vfQogICAgICAgICAgICAgICAgICAgIDx0aD57JG5hbWV9PC90aD4KICAgICAgICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICAgICAgICAgIDx0aCBjb2xzcGFuPSI1IiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48L3RoPgogICAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGhlYWQ+CiAgICAgICAgPHRib2R5PgogICAgICAgIHtpZiAkcm93c3xAY291bnQgPiAwfQogICAgICAgICAgICB7Zm9yZWFjaCBmcm9tPSRyb3dzIGl0ZW09cm93fQogICAgICAgICAgICA8dHIgY2xhc3M9IntjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9JzsiPgogICAgICAgICAgICAgICAgPHRkPnskcm93LnRpdGxlbGlua308L3RkPgogICAgICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kY29sdW1ucyBpdGVtPWNvbHVtbn08dGQ+e2ZvcmVhY2ggbmFtZT1jb2xsb29wIGZyb209JGNvbHVtblskcm93LmlkXSBpdGVtPXZhbHVlfXskdmFsdWUtPmdldFRpdGxlKCl9e2lmICEkc21hcnR5LmZvcmVhY2guY29sbG9vcC5sYXN0fSx7L2lmfSB7L2ZvcmVhY2h9PC90ZD57L2ZvcmVhY2h9CiAgICAgICAgICAgICAgICA8dGQ+eyRyb3cucHVibGlzaGxpbmt9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD57JHJvdy5lZGl0bGlua308L3RkPgogICAgICAgICAgICAgICAgPHRkPnskcm93LmRlbGV0ZWxpbmt9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD57JHJvdy5tb3ZldXBsaW5rfTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+eyRyb3cubW92ZWRvd25saW5rfTwvdGQ+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICB7ZWxzZX0KICAgICAgICAgICAgPHRyPjx0ZD4KICAgICAgICAgICAgICAgIFRoZXJlIGFyZSBubyByZXN1bHRzIG1hdGNoaW5nIHlvdXIgY3JpdGVyaWEuCiAgICAgICAgICAgIDwvdGQ+PC90cj4KICAgICAgICB7L2lmfQogICAgICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgogICAge2lmICRwYWdlc3xAY291bnQgPiAxfTxwPlBhZ2U6IHtmb3JlYWNoIGZyb209JHBhZ2VzIGl0ZW09bGluayBrZXk9aX17aWYgKCRpICsgMSkgPT0gJGN1cnJlbnRQYWdlfTxzdHJvbmc+eyRsaW5rfTwvc3Ryb25nPntlbHNlfXskbGlua317L2lmfSB7L2ZvcmVhY2h9PC9wPnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkX2l0ZW1faWNvbn0geyRhZGRfaXRlbV9saW5rfTwvcD4KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/admin.templates.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICR0ZW1wbGF0ZXN8Y291bnQgPiAwfQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogIDx0aGVhZD4KICAgIDx0cj4KICAgICAgPHRoPjwvdGg+CiAgICAgIDx0aD48L3RoPgogICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgogICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgogICAgPC90cj4KICA8L3RoZWFkPgogIDx0Ym9keT4KICB7Zm9yZWFjaCBmcm9tPSR0ZW1wbGF0ZXMgaXRlbT1yb3d9CiAgICA8dHIgY2xhc3M9IntjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3tjeWNsZSB2YWx1ZXM9InJvdzEscm93MiJ9JzsiPgogICAgICA8dGQ+eyRyb3cudGl0bGVsaW5rfTwvdGQ+CiAgICAgIDx0ZD57JHJvdy5kZWZhdWx0fTwvdGQ+CiAgICAgIDx0ZD57JHJvdy5lZGl0bGlua308L3RkPgogICAgICA8dGQ+eyRyb3cuZGVsZXRlbGlua308L3RkPgogICAgPC90cj4Key9mb3JlYWNofQogIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+Cgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkX3RlbXBsYXRlc19pY29ufSB7JGFkZF90ZW1wbGF0ZXNfbGlua308L3A+CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/admin.template_edit.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0KCTxkaXYgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGZvcm0tPnNob3dFcnJvcnMoKX08L2Rpdj4KCXskZm9ybS0+Z2V0SGVhZGVycygpfQoJPHAgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+CgkJeyRmb3JtLT5nZXRCdXR0b25zKCl9Cgk8L3A+CgoJCTxkaXYgc3R5bGU9ImZsb2F0OiByaWdodDsiPgoJCTxwPjxzdHJvbmc+QXZhaWxhYmxlIGZpZWxkczwvc3Ryb25nPjwvcD4KCQk8dWwgY2xhc3M9ImV4dHJhX2ZpZWxkcyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwOyBwYWRkaW5nLWxlZnQ6IDA7Ij4KCQkJe3tmb3JlYWNoIGZyb209JGV4dHJhX2ZpZWxkcyBpdGVtPWZpZWxkfX0KCQkJPGxpPjxhIGhyZWY9IiMiPiRpdGVtLT57eyRmaWVsZC5uYW1lfX08L2E+PC9saT4KCQkJe3svZm9yZWFjaH19CgkJPC91bD4KCQk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJe2xpdGVyYWx9CgkJKGZ1bmN0aW9uKCQpIHsKCQkJJC5mbi5pbnNlcnRBdENhcmV0ID0gZnVuY3Rpb24gKG15VmFsdWUpIHsKCQkJICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7CgkJCSAgICAgICAgICAgICAgICAvL0lFIHN1cHBvcnQKCQkJICAgICAgICAgICAgICAgIGlmIChkb2N1bWVudC5zZWxlY3Rpb24pIHsKCQkJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpOwoJCQkgICAgICAgICAgICAgICAgICAgICAgICBzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsKCQkJICAgICAgICAgICAgICAgICAgICAgICAgc2VsLnRleHQgPSBteVZhbHVlOwoJCQkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7CgkJCSAgICAgICAgICAgICAgICB9CgkJCSAgICAgICAgICAgICAgICAvL01PWklMTEEvTkVUU0NBUEUgc3VwcG9ydAoJCQkgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25TdGFydCB8fCB0aGlzLnNlbGVjdGlvblN0YXJ0ID09ICcwJykgewoJCQkgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3RhcnRQb3MgPSB0aGlzLnNlbGVjdGlvblN0YXJ0OwoJCQkgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZW5kUG9zID0gdGhpcy5zZWxlY3Rpb25FbmQ7CgkJCSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDsKCQkJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0UG9zKQoJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgbXlWYWx1ZQoJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMudmFsdWUuc3Vic3RyaW5nKGVuZFBvcywKCQkJdGhpcy52YWx1ZS5sZW5ndGgpOwoJCQkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7CgkJCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSBzdGFydFBvcyArIG15VmFsdWUubGVuZ3RoOwoJCQkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkVuZCA9IHN0YXJ0UG9zICsgbXlWYWx1ZS5sZW5ndGg7CgkJCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9wID0gc2Nyb2xsVG9wOwoJCQkgICAgICAgICAgICAgICAgfSBlbHNlIHsKCQkJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZSArPSBteVZhbHVlOwoJCQkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7CgkJCSAgICAgICAgICAgICAgICB9CgkJCSAgICAgICAgfSk7CgoJCQl9OwoJCQkkKCcuZXh0cmFfZmllbGRzIGEnKS5jbGljayhmdW5jdGlvbigpIHsKCQkJCXZhciBmaWVsZCA9ICd7JyskKHRoaXMpLnRleHQoKSsnfSc7CgkJCQkkKCdbbmFtZT17L2xpdGVyYWx9eyRpZH17bGl0ZXJhbH1jb2RlXScpLmluc2VydEF0Q2FyZXQoZmllbGQpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9KTsKCQl9KShqUXVlcnkpOwoJCXsvbGl0ZXJhbH0KCQk8L3NjcmlwdD4KCQk8L2Rpdj4KCgl7JGZvcm0tPnNob3dXaWRnZXRzKCc8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4lTEFCRUwlOjwvZGl2PgoJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+JUlOUFVUJSA8ZW0+JVRJUFMlPC9lbT48L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiIHN0eWxlPSJjb2xvcjogcmVkOyI+JUVSUk9SUyU8L2Rpdj4KCTwvZGl2PicpfQoKCTxwIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgbWFyZ2luLXRvcDogMTVweDsiPgoJCXskZm9ybS0+Z2V0QnV0dG9ucygpfQoJPC9wPgoJeyRmb3JtLT5nZXRGb290ZXJzKCl9CnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/defaultadmin.items.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmaWx0ZXJzX2Zvcm0pfQogICAgPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggc29saWQgI2VlZTsiPgoJeyRmaWx0ZXJzX2Zvcm0tPmdldEhlYWRlcnMoKX0KCUZpbHRlciBieToKCXskZmlsdGVyc19mb3JtLT5zaG93V2lkZ2V0cygnJUxBQkVMJSAlSU5QVVQlICcpfQoJCXskZmlsdGVyc19mb3JtLT5nZXRCdXR0b25zKCl9Cgl7JGZpbHRlcnNfZm9ybS0+Z2V0Rm9vdGVycygpfQogICAgPC9kaXY+CnsvaWZ9CnskZmlsdGVyc19idXR0b25zfQo8ZGl2IHN0eWxlPSJmbG9hdDpyaWdodDsiPntpZiAkaXRlbXNfdG9wICE9ICcnfTxkaXYgc3R5bGU9Im1hcmdpbi1ib3R0b206IDE1cHg7Ij57JGl0ZW1zX3RvcH0gPC9kaXY+ey9pZn0gKDxzdHJvbmc+eyR0b3RhbF9pdGVtc30gaXRlbXtpZiAkdG90YWxfaXRlbXMgZ3QgMX1zey9pZn08L3N0cm9uZz4pIDwvZGl2Pgo8ZGl2IHN0eWxlPSJjbGVhcjogYm90aDsiPjwvZGl2PgoKe2lmICRyb3dzfEBjb3VudH0KCXtpZiBpc3NldCgkYWRkX2l0ZW1faWNvbil9Cgk8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+CgkgICAgICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JGFkZF9pdGVtX2ljb259IHskYWRkX2l0ZW1fbGlua308L3A+Cgk8L2Rpdj4KCXsvaWZ9CnsvaWZ9CgogICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIiBpZD0idHJlZXRhYmxlIj4KICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0aD57eyR0aXRsZV9sYWJlbH19PC90aD4KICAgICAgICAgICAgICAgIHtmb3JlYWNoIGZyb209JGNvbHVtbnMgaXRlbT1jb2x1bW4ga2V5PW5hbWUgbmFtZT1mb299CiAgICAgICAgICAgICAgICAgICAgPHRoPnskbmFtZX08L3RoPgogICAgICAgICAgICAgICAgey9mb3JlYWNofQogICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjgiIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPjwvdGg+CiAgICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90aGVhZD4KICAgICAgICA8dGJvZHk+CiAgICAgICAge2lmICRyb3dzfEBjb3VudCA+IDB9CiAgICAgICAgICAgIHtmb3JlYWNoIGZyb209JHJvd3MgaXRlbT1yb3d9CiAgICAgICAgICAgIDx0ciBjbGFzcz0ie2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn0iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0ne2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn1ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0ne2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn0nOyIgZGF0YS10dC1pZD0ieyRyb3cuaWR9IiBkYXRhLXR0LXBhcmVudC1pZD0ieyRyb3cucGFyZW50X2lkfSI+CiAgICAgICAgICAgICAgICA8dGQ+e2lmIGlzc2V0KCRyb3cubGV2ZWwpfXskcm93LmFycm93fSZuYnNwO3tzZWN0aW9uIG5hbWU9bGV2ZWwgc3RhcnQ9MSBsb29wPSRyb3cubGV2ZWx9LSZuYnNwOyZuYnNwOyZuYnNwO3svc2VjdGlvbn17L2lmfXskcm93LnRpdGxlbGlua308L3RkPgogICAgICAgICAgICAgICAge2ZvcmVhY2ggZnJvbT0kY29sdW1ucyBpdGVtPWNvbHVtbn08dGQ+e2ZvcmVhY2ggbmFtZT1jb2xsb29wIGZyb209JGNvbHVtblskcm93LmlkXSBpdGVtPXZhbHVlfXskdmFsdWV9e2lmICEkc21hcnR5LmZvcmVhY2guY29sbG9vcC5sYXN0fSx7L2lmfSB7L2ZvcmVhY2h9PC90ZD57L2ZvcmVhY2h9CiAgICAgICAgICAgICAgICA8dGQ+eyRyb3cucHVibGlzaGxpbmt9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD57JHJvdy5wcmV2aWV3bGlua308L3RkPgogICAgICAgICAgICAgICAgPHRkPnskcm93LmNtb259PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD57JHJvdy50d2l0dGVyfTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+eyRyb3cuZWRpdGxpbmt9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZD57JHJvdy5kZWxldGVsaW5rfTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+e2lmIGlzc2V0KCRyb3cubW92ZXVwbGluayl9eyRyb3cubW92ZXVwbGlua317L2lmfTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQ+e2lmIGlzc2V0KCRyb3cubW92ZWRvd25saW5rKX17JHJvdy5tb3ZlZG93bmxpbmt9ey9pZn08L3RkPgogICAgICAgICAgICA8L3RyPgogICAgICAgICAgICB7L2ZvcmVhY2h9CiAgICAgICAge2Vsc2V9CiAgICAgICAgICAgIDx0cj48dGQ+CiAgICAgICAgICAgICAgICBUaGVyZSBhcmUgbm8gcmVzdWx0cyBtYXRjaGluZyB5b3VyIGNyaXRlcmlhLgogICAgICAgICAgICA8L3RkPjwvdHI+CiAgICAgICAgey9pZn0KICAgICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KCXtpZiBpc3NldCgkcGFnZXMpfQogICAge2lmICRwYWdlc3xAY291bnQgPiAxfTxwPlBhZ2U6IHtmb3JlYWNoIGZyb209JHBhZ2VzIGl0ZW09bGluayBrZXk9aX17aWYgKCRpICsgMSkgPT0gJGN1cnJlbnRQYWdlfTxzdHJvbmc+eyRsaW5rfTwvc3Ryb25nPntlbHNlfXskbGlua317L2lmfSB7L2ZvcmVhY2h9PC9wPnsvaWZ9Cgl7L2lmfQp7aWYgaXNzZXQoJGFkZF9pdGVtX2ljb24pfQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkX2l0ZW1faWNvbn0geyRhZGRfaXRlbV9saW5rfTwvcD4KPC9kaXY+CnsvaWZ9CjxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0OyI+eyRpdGVtc19ib3R0b219PC9kaXY+PGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/defaultadmin.options.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij57JGV4cG9ydH17JG9wdGlvbnNfdG9wfTwvZGl2PgoKCntpZiBpc3NldCgkZm9ybSl9Cgk8ZGl2IHN0eWxlPSJjb2xvcjogcmVkOyI+eyRmb3JtLT5zaG93RXJyb3JzKCl9PC9kaXY+Cgl7JGZvcm0tPmdldEhlYWRlcnMoKX0KCXskZm9ybS0+c2hvd1dpZGdldHMoJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4lTEFCRUwlOjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4lSU5QVVQlPC9wPgoJPC9kaXY+Jyl9Cgk8cCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij4KCQl7JGZvcm0tPmdldEJ1dHRvbnMoKX0KCTwvcD4KCXskZm9ybS0+Z2V0Rm9vdGVycygpfQp7L2lmfQoKPGRpdiBzdHlsZT0iZmxvYXQ6cmlnaHQ7Ij57JHVwZGF0ZV9vYmplY3RzfXskb3B0aW9uc19ib3R0b219PC9kaXY+PGRpdiBzdHlsZT0iY2xlYXI6Ym90aDsiPjwvZGl2PgoK]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/defaultadmin.templates.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRyb3dzfGNvdW50ID4gMH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KICA8dGhlYWQ+CiAgICA8dHI+CiAgICAgIDx0aD48L3RoPgogICAgICA8dGg+PC90aD4KICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KICAgIDwvdHI+CiAgPC90aGVhZD4KICA8dGJvZHk+CiAge2ZvcmVhY2ggZnJvbT0kcm93cyBpdGVtPXJvd30KICAgIDx0ciBjbGFzcz0ie2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn0iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0ne2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn1ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0ne2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn0nOyI+CiAgICAgIDx0ZD57JHJvdy50aXRsZWxpbmt9PC90ZD4KICAgICAgPHRkPjwvdGQ+CiAgICAgIDx0ZD57JHJvdy5lZGl0bGlua308L3RkPgogICAgICA8dGQ+eyRyb3cuZGVsZXRlbGlua308L3RkPgogICAgPC90cj4Key9mb3JlYWNofQogIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+Cgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkX2l0ZW1faWNvbn0geyRhZGRfaXRlbV9saW5rfTwvcD4KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/edit.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0KCTxkaXYgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGZvcm0tPnNob3dFcnJvcnMoKX08L2Rpdj4KCXskZm9ybS0+Z2V0SGVhZGVycygpfQoJPHAgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+CgkJeyRmb3JtLT5nZXRCdXR0b25zKCl9Cgk8L3A+CgkKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgp7bGl0ZXJhbH0KICBqUXVlcnkoZnVuY3Rpb24oJCkgewoJCSQoICIjc3RydWN0dXJlIiApLnRhYnMoKTsJCQkKICAgIH0pOyAgCnsvbGl0ZXJhbH0KPC9zY3JpcHQ+CgoJCgk8ZGl2IGlkPSJzdHJ1Y3R1cmUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiA3cHg7Ij4KCTx1bD4KCQl7e2ZvcmVhY2ggZnJvbT0kc3RydWN0dXJlLT5nZXRUYWJzKCkgaXRlbT10YWIga2V5PXRhYl9rZXl9fQoJCTxsaXt7aWYgaXNzZXQoJGFjdGl2ZV9maWVsZHNfdGFiKX19e3tpZiAkYWN0aXZlX2ZpZWxkc190YWIgZXEgJHRhYl9rZXl9fSBjbGFzcz0idWktdGFicy1zZWxlY3RlZCB1aS1zdGF0ZS1hY3RpdmUie3svaWZ9fXt7L2lmfX0+PGEgaHJlZj0iI3N0cnVjLXt7JHRhYl9rZXl9fSI+e3skdGFiLm5hbWV9fTwvYT48L2xpPgoJCXt7L2ZvcmVhY2h9fQoJCXtmb3JlYWNoIGZyb209JHN1Ym1vZHVsZXMgaXRlbT1tb2R1bGV9CgkJPGxpe2lmICR0YWIgPT0gJG1vZHVsZS5nbmFtZX0gY2xhc3M9InVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlInsvaWZ9PjxhIGhyZWY9IiNzdHJ1Yy17JG1vZHVsZS5nbmFtZX0iPnskbW9kdWxlLm5hbWV9PC9hPjwvbGk+CgkJey9mb3JlYWNofQoJCXtpZiAkeHRlbmRlZF9mb3JtICE9ICcnfQoJCTxsaXtpZiAkdGFiID09ICdyZWxhdGVkJ30gY2xhc3M9InVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlInsvaWZ9PjxhIGhyZWY9IiNzdHJ1Yy1yZWxhdGVkIj5SZWxhdGVkIGl0ZW1zPC9hPjwvbGk+CiAgICB7L2lmfQogICAgPGxpPjxhIGhyZWY9IiNtb2R1bGUtLS1vcHRpb25zIj5PcHRpb25zPC9hPjwvbGk+Cgk8L3VsPgoJe3tmb3JlYWNoIGZyb209JHN0cnVjdHVyZS0+Z2V0VGFicygpIGl0ZW09dGFiIGtleT10YWJfa2V5fX0KCQk8ZGl2IGlkPSJzdHJ1Yy17eyR0YWJfa2V5fX0iPgoJCXt7Zm9yZWFjaCBmcm9tPSR0YWIuZmllbGRzZXRzIGl0ZW09ZmllbGRzZXQga2V5PWZpZWxkc2V0X2tleX19CgkJCXskZm9ybS0+cmVuZGVyRmllbGRzZXQoJ3t7JHRhYl9rZXl9fS0tLXt7JGZpZWxkc2V0X2tleX19JywnPGRpdiBjbGFzcz0iZm9ybWZpZWxkIj4KCQkJCQk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+JUxBQkVMJTo8L2Rpdj4KCQkJCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPiVJTlBVVCUgPGVtPiVUSVBTJTwvZW0+PC9kaXY+CgkJCQkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+CgkJCTwvZGl2PicpfQoJCXt7L2ZvcmVhY2h9fQoJCTwvZGl2PgoJe3svZm9yZWFjaH19CQoJe2ZvcmVhY2ggZnJvbT0kc3VibW9kdWxlcyBpdGVtPW1vZHVsZX0KCSAgPGRpdiBpZD0ic3RydWMteyRtb2R1bGUuZ25hbWV9Ij4KICAgIAkJCXskbW9kdWxlLnRlbXBsYXRlfQogICAgCQkJPHA+e2lmICRtb2R1bGUuYWRkX2l0ZW1fbGlua317JG1vZHVsZS5hZGRfaXRlbV9pY29ufSB7JG1vZHVsZS5hZGRfaXRlbV9saW5rfXtlbHNlfTxlbT5GaXJzdCBjbGljayBvbiAiU2F2ZSAmYW1wOyBjb250aW51ZSBlZGl0aW5nIiB0byBiZSBhYmxlIHRvIGFkZCB7JG1vZHVsZS5uYW1lfSBpdGVtcy48L2VtPnsvaWZ9PC9wPgoJICA8L2Rpdj4KCXsvZm9yZWFjaH0KCXtpZiAkeHRlbmRlZF9mb3JtICE9ICcnfQoJPGRpdiBpZD0ic3RydWMtcmVsYXRlZCI+CgkgIHskeHRlbmRlZF9mb3JtfQoJPC9kaXY+Cgl7L2lmfQkKCTxkaXYgaWQ9Im1vZHVsZS0tLW9wdGlvbnMiPgoJICB7JGZvcm0tPnJlbmRlckZpZWxkc2V0KCdtb2R1bGUtLS1vcHRpb25zJywnPGRpdiBjbGFzcz0iZm9ybWZpZWxkIj4KCQkJCTxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4lTEFCRUwlOjwvZGl2PgoJCQkJPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4lSU5QVVQlIDxlbT4lVElQUyU8L2VtPjwvZGl2PgoJCQkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+CgkJPC9kaXY+Jyl9Cgk8L2Rpdj4KCTwvZGl2PgoJCgl7JGZvcm0tPnJlbmRlckZpZWxkc2V0cygnPGRpdiBjbGFzcz0iZm9ybWZpZWxkIj4KCQk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+JUxBQkVMJTo8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPiVJTlBVVCUgPGVtPiVUSVBTJTwvZW0+PC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+Cgk8L2Rpdj4nKX0KCgl7JGZvcm0tPnNob3dXaWRnZXRzKCc8ZGl2IGNsYXNzPSJmb3JtZmllbGQiPgoJCTxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4lTEFCRUwlOjwvZGl2PgkKCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPiVJTlBVVCUgPGVtPiVUSVBTJTwvZW0+PC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+Cgk8L2Rpdj4nKX0KCgk8cCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IG1hcmdpbi10b3A6IDE1cHg7Ij4KCQl7JGZvcm0tPmdldEJ1dHRvbnMoKX0KCTwvcD4KCXskZm9ybS0+Z2V0Rm9vdGVycygpfQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/edittemplate.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3JtX3N0YXJ0fQoKPGRpdiBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyB3aWR0aDogMjAwcHg7Ij4KPHA+PHN0cm9uZz5BdmFpbGFibGUgZmllbGRzPC9zdHJvbmc+PC9wPgo8dWwgY2xhc3M9ImV4dHJhX2ZpZWxkcyIgc3R5bGU9Im1hcmdpbi1sZWZ0OiAwOyBwYWRkaW5nLWxlZnQ6IDA7Ij4KCXt7Zm9yZWFjaCBmcm9tPSRleHRyYV9maWVsZHMgaXRlbT1maWVsZH19Cgk8bGk+PGEgaHJlZj0iIyI+JGl0ZW0tPnt7JGZpZWxkLm5hbWV9fTwvYT48L2xpPgoJe3svZm9yZWFjaH19CjwvdWw+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4Ke2xpdGVyYWx9CihmdW5jdGlvbigkKSB7CgkkLmZuLmluc2VydEF0Q2FyZXQgPSBmdW5jdGlvbiAobXlWYWx1ZSkgewoJICAgICAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCl7CgkgICAgICAgICAgICAgICAgLy9JRSBzdXBwb3J0CgkgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikgewoJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpOwoJICAgICAgICAgICAgICAgICAgICAgICAgc2VsID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CgkgICAgICAgICAgICAgICAgICAgICAgICBzZWwudGV4dCA9IG15VmFsdWU7CgkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzKCk7CgkgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgIC8vTU9aSUxMQS9ORVRTQ0FQRSBzdXBwb3J0CgkgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zZWxlY3Rpb25TdGFydCB8fCB0aGlzLnNlbGVjdGlvblN0YXJ0ID09ICcwJykgewoJICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXJ0UG9zID0gdGhpcy5zZWxlY3Rpb25TdGFydDsKCSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbmRQb3MgPSB0aGlzLnNlbGVjdGlvbkVuZDsKCSAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzY3JvbGxUb3AgPSB0aGlzLnNjcm9sbFRvcDsKCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnZhbHVlLnN1YnN0cmluZygwLCBzdGFydFBvcykKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBteVZhbHVlCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIHRoaXMudmFsdWUuc3Vic3RyaW5nKGVuZFBvcywKCXRoaXMudmFsdWUubGVuZ3RoKTsKCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTsKCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uU3RhcnQgPSBzdGFydFBvcyArIG15VmFsdWUubGVuZ3RoOwoJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25FbmQgPSBzdGFydFBvcyArIG15VmFsdWUubGVuZ3RoOwoJICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7CgkgICAgICAgICAgICAgICAgfSBlbHNlIHsKCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUgKz0gbXlWYWx1ZTsKCSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXMoKTsKCSAgICAgICAgICAgICAgICB9CgkgICAgICAgIH0pOwoKCX07CgkkKCcuZXh0cmFfZmllbGRzIGEnKS5jbGljayhmdW5jdGlvbigpIHsKCQl2YXIgZmllbGQgPSAneycrJCh0aGlzKS50ZXh0KCkrJ30nOwoJCSQoJ1tuYW1lPXsvbGl0ZXJhbH17JGlkfXtsaXRlcmFsfXRlbXBsYXRlZGV0YWlsc10nKS5pbnNlcnRBdENhcmV0KGZpZWxkKTsKCQlyZXR1cm4gZmFsc2U7Cgl9KTsKfSkoalF1ZXJ5KTsKey9saXRlcmFsfQo8L3NjcmlwdD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV90ZW1wbGF0ZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGVtcGxhdGV9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JGNvZGVfdGVtcGxhdGV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRleHRhcmVhX3RlbXBsYXRlfTwvcD4KPC9kaXY+CgoKCXskZm9ybV9kZXRhaWxzX3N1Ym1pdH0KCXskZm9ybV9kZXRhaWxzX2FwcGx5fQoJeyRmb3JtX2RldGFpbHNfcmVzdG9yZWxpc3R9Cgl7JGZvcm1fZGV0YWlsc19yZXN0b3JlZGV0YWlsc30KCjwvZm9ybT4K]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/error.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZV9lcnJvcn0KeyRtZXNzYWdlfQo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.calendar.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHRhYmxlIGNsYXNzPSJjYWxlbmRhciI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGggY2xhc3M9InByZXZpb3VzIj48YSBocmVmPSJ7JHByZXZpb3VzX21vbnRofSI+Jmx0OzwvYT48L3RoPgoJCQk8dGggY2xhc3M9Im1vbnRoIiBjb2xzcGFuPSI1Ij57JGN1cnJlbnRfbW9udGh8ZGF0ZV9mb3JtYXQ6IiViICVZIn08L3RoPgoJCQk8dGggY2xhc3M9Im5leHQiPjxhIGhyZWY9InskbmV4dF9tb250aH0iPiZndDs8L2E+PC90aD4KCQk8L3RyPgoJCTx0cj4KCQkJPHRkPk1vbjwvdGQ+CgkJCTx0ZD5UdWU8L3RkPgoJCQk8dGQ+V2VkPC90ZD4KCQkJPHRkPlRodTwvdGQ+CgkJCTx0ZD5Gcmk8L3RkPgoJCQk8dGQ+U2F0PC90ZD4KCQkJPHRkPlN1bjwvdGQ+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+CgkJe2ZvcmVhY2ggZnJvbT0kbWNmY2FsZW5kYXIgaXRlbT13ZWVrfQoJCQk8dHI+CgkJCQl7Zm9yZWFjaCBmcm9tPSR3ZWVrIGl0ZW09ZGF5fQoJCQkJPHRkIGNsYXNzPSJ7aWYgJGRheS5jdXJyZW50fWN1cnJlbnQgey9pZn17aWYgJGRheS50b2RheX10b2RheSB7L2lmfXtpZiAkZGF5LmV2ZW50c3xAY291bnR9IGhhcy1ldmVudHN7L2lmfSI+CgkJCQkJPHA+eyRkYXkuZGF0ZXxkYXRlX2Zvcm1hdDoiJWUifTwvcD4KCQkJCQl7aWYgJGRheS5ldmVudHN8QGNvdW50fQoJCQkJCTx1bD4KCQkJCQkJe2ZvcmVhY2ggZnJvbT0kZGF5LmV2ZW50cyBpdGVtPWl0ZW19CgkJCQkJCTxsaT48YSBocmVmPSJ7JGl0ZW0tPmRldGFpbF9saW5rfSI+eyRpdGVtLT50aXRsZX08L2E+PC9saT4KCQkJCQkJey9mb3JlYWNofQoJCQkJCTwvdWw+CgkJCQkJey9pZn0KCQkJCQl7KiBBbHRlcm5hdGl2ZTogTGluayB0byBhbGwgZXZlbnRzIG9mIHRoZSBjdXJyZW50IGRhdGUgfQoJCQkJCQl7aWYgJGRheS5ldmVudHN8QGNvdW50fQoJCQkJCQkJPGEgaHJlZj0ie3tsaXRlcmFsfX17e3svbGl0ZXJhbH19e3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSBhY3Rpb249InVybF9mb3IiIG1hY3Rpb249ImRlZmF1bHQiIGNhbGVuZGFyPTEgc3RhcnRfZGF0ZT0kZGF5LmRhdGV8ZGF0ZV9mb3JtYXQ6IiVZLSVtLSVkIiBlbmRfZGF0ZT0kZGF5LmRhdGV8ZGF0ZV9mb3JtYXQ6IiVZLSVtLSVkIn0iPnskZGF5LmRhdGV8ZGF0ZV9mb3JtYXQ6IiVlIn08L2E+CgkJCQkJCXtlbHNlfQoJCQkJCQkJeyRkYXkuZGF0ZXxkYXRlX2Zvcm1hdDoiJWUifQoJCQkJCQl7L2lmfQoJCQkJCXsqKn0KCQkJCTwvdGQ+CgkJCQl7L2ZvcmVhY2h9CgkJCTwvdHI+CgkJey9mb3JlYWNofQoJPC90Ym9keT4KPC90YWJsZT4K]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.default.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPg0KCXtmb3JlYWNoIGZyb209JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0gaXRlbT1pdGVtfQ0KCTxsaT48YSBocmVmPSJ7e2xpdGVyYWx9fXt7ey9saXRlcmFsfX17eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19IGFjdGlvbj0idXJsX2ZvciIgbWFjdGlvbj0iZGV0YWlsIiBpdGVtX2lkPSRpdGVtLT5nZXRJZCgpIGRldGFpbHBhZ2U9JGRldGFpbHBhZ2UgdGl0bGU9JGl0ZW0tPnRpdGxlfSI+eyRpdGVtLT50aXRsZX08L2E+PC9saT4NCgl7L2ZvcmVhY2h9DQo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.detail.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0ibWNmX3t7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfGxvd2VyfX0iPg0KCTxoMj57JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnRpdGxlfTwvaDI+DQoJDQp7e2ZvcmVhY2ggZnJvbT0kZXh0cmFfZmllbGRzIGl0ZW09ZmllbGR9fQ0Ke3tpZiAkZmllbGQuZm9ybV90eXBlIG5lICdub25lJ319DQoJe2lmICR7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19LT57eyRmaWVsZC5uYW1lfX0gbmUgJyd9DQoJPHA+PHN0cm9uZz57eyRmaWVsZC5sYWJlbH19Ojwvc3Ryb25nPiANCnt7aWYgJGZpZWxkLnR5cGUgPT0gJ2ltYWdlJ319DQoJCTxpbWcgc3JjPSJ7JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19VXJsKCRpZCl9IiAvPg0Ke3tlbHNlaWYgJGZpZWxkLnR5cGUgPT0gJ2RvY3VtZW50J319DQoJCTxhIGhyZWY9Inske3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS0+Z2V0e3skZmllbGQuY2FtZWxjYXNlfX1VcmwoJGlkKX0iIHJlbD0iZXh0ZXJuYWwiPkRvd25sb2FkPC9hPg0Ke3tlbHNlaWYgJGZpZWxkLnR5cGUgPT0gJ3BhZ2UnfX0NCgl7Y21zX3NlbGZsaW5rIHBhZ2U9JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnt7JGZpZWxkLm5hbWV9fX0NCnt7ZWxzZWlmICRmaWVsZC50eXBlID09ICdzZWxlY3QnfX0NCgl7JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPmdldHt7JGZpZWxkLmNhbWVsY2FzZX19VmFsdWUoKX0NCnt7ZWxzZX19DQoJeyR7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19LT57eyRmaWVsZC5uYW1lfX19DQp7ey9pZn19DQoJPC9wPg0KCXsvaWZ9DQp7ey9pZn19DQp7ey9mb3JlYWNofX0NCjwvZGl2Pg0KDQp7KiBDYWxsIGNoaWxkIG1vZHVsZXMgKn0NCg0Ke3tpZiAkY2hpbGRfbW9kdWxlc3xAY291bnQgPiAwfX0NCjxkaXYgY2xhc3M9Im1jZl9jaGlsZHMiPg0Ke3tmb3JlYWNoIGZyb209JGNoaWxkX21vZHVsZXMgaXRlbT1jaGlsZF9tb2R1bGV9fQ0KDQo8ZGl2IGNsYXNzPSJtY2ZfY2hpbGRfe3skY2hpbGRfbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fSI+DQp7e2xpdGVyYWx9fXt7ey9saXRlcmFsfX17eyRjaGlsZF9tb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19IHBhcmVudF9pdGVtPSR7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19LT5nZXRJZCgpfQ0KPC9kaXY+DQp7ey9mb3JlYWNofX0NCjwvZGl2Pg0Ke3svaWZ9fQ0KDQp7KiBDYWxsIE1vZHVsZVh0ZW5kZXIgaXRlbXMgKn0NCg0Ke2lmIGlzc2V0KCR7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19LT54dGVuZGVkX2ZlbGlzdCl9DQo8ZGl2IGNsYXNzPSJtY2ZfbW9kdWxleHRlbmRlciI+DQp7aWYgJHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnh0ZW5kZWRfZmVsaXN0LT5kb2N1bWVudHN8QGNvdW50IGd0IDB9DQo8dWwgY2xhc3M9Im14X2RvY3VtZW50cyI+DQoJe2ZvcmVhY2ggZnJvbT0ke3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS0+eHRlbmRlZF9mZWxpc3QtPmRvY3VtZW50cyBpdGVtPWRvY3VtZW50fQ0KCTxsaT4NCgkJPGltZyBzcmM9InskZG9jdW1lbnQtPmdldEljb24oKX0iIGFsaWduPSJhYnNtaWRkbGUiIC8+DQoJCTxhIGhyZWY9InskZG9jdW1lbnQtPmdldERvY3VtZW50VXJsKCl9IiByZWw9ImV4dGVybmFsIj4NCgl7aWYgJGRvY3VtZW50LT5nZXRUaXRsZSgpIG5lICcnfXskZG9jdW1lbnQtPmdldFRpdGxlKCl9e2Vsc2V9eyRkb2N1bWVudC0+Z2V0RmlsZW5hbWUoKX17L2lmfQ0KCTwvYT4gKHskZG9jdW1lbnQtPmdldFNpemUodHJ1ZSl9KTwvbGk+DQoJey9mb3JlYWNofQ0KPC91bD4NCnsvaWZ9DQoNCntpZiAke3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS0+eHRlbmRlZF9mZWxpc3QtPmltYWdlc3xAY291bnQgZ3QgMH0NCjx1bCBjbGFzcz0ibXhfaW1hZ2VzIj4NCgl7Zm9yZWFjaCBmcm9tPSR7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19LT54dGVuZGVkX2ZlbGlzdC0+aW1hZ2VzIGl0ZW09aW1hZ2V9DQoJPGxpPjxhIGhyZWY9InskaW1hZ2UtPnVybH0iIHJlbD0iZXh0ZXJuYWwiPg0KCTxpbWcgc3JjPSJ7JGltYWdlLT5yZXNpemVkX2ltYWdlcy50aHVtYm5haWx9IiAvPg0KCTwvYT48L2xpPg0KCXsvZm9yZWFjaH0NCjwvdWw+DQp7L2lmfQ0KDQp7aWYgJHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnh0ZW5kZWRfZmVsaXN0LT5saW5rc3xAY291bnQgZ3QgMH0NCjx1bCBjbGFzcz0ibXhfbGlua3MiPg0KCXtmb3JlYWNoIGZyb209JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnh0ZW5kZWRfZmVsaXN0LT5saW5rcyBpdGVtPWxpbmt9DQoJPGxpPjxhIGhyZWY9InskbGluay0+dXJsfSJ7aWYgJGxpbmstPmlzX25ld193aW5kb3cgPT0gMX0gcmVsPSJleHRlcm5hbCJ7L2lmfT4NCgl7aWYgJGxpbmstPnRpdGxlIG5lICcnfXskbGluay0+dGl0bGV9e2Vsc2V9eyRsaW5rLT51cmx9ey9pZn0NCgk8L2E+PC9saT4NCgl7L2ZvcmVhY2h9DQo8L3VsPg0Key9pZn0NCg0Ke2lmICR7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19LT54dGVuZGVkX2ZlbGlzdC0+Y2F0ZWdvcmllc3xAY291bnQgZ3QgMH0NCjx1bCBjbGFzcz0ibXhfY2F0ZWdvcmllcyI+DQoJe2ZvcmVhY2ggZnJvbT0ke3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS0+eHRlbmRlZF9mZWxpc3QtPmNhdGVnb3JpZXMgaXRlbT1vcHRpb25zIGtleT1jYXRlZ29yeX0NCgk8bGk+PHN0cm9uZz57JGNhdGVnb3J5fTwvc3Ryb25nPg0KCQk8dWw+DQoJCQl7Zm9yZWFjaCBmcm9tPSRvcHRpb25zIGl0ZW09b3B0aW9ufQ0KCQkJPGxpPnskb3B0aW9uLT5nZXRUaXRsZSgpfTwvbGk+DQoJCQl7L2ZvcmVhY2h9DQoJCTwvdWw+DQoJPC9saT4NCgl7L2ZvcmVhY2h9DQo8L3VsPg0Key9pZn0NCg0KeyogRkVBVFVSRSBESVNBQkxFRCBCWSBERUZBVUxUIChSRU1PVkUgU01BUlRZIENPTU1FTlRTIFRPIE1BS0UgSVQgV09SSyl9DQp7aWYgJHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnh0ZW5kZWRfZmVsaXN0LT5wYWdlc3xAY291bnQgZ3QgMH0NCjx1bCBjbGFzcz0ibXhfcGFnZXMiPg0KCXtmb3JlYWNoIGZyb209JHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnh0ZW5kZWRfZmVsaXN0LT5wYWdlcyBpdGVtPXBhZ2V9DQoJPGxpPntjbXNfc2VsZmxpbmsgcGFnZT0kcGFnZS0+YWxpYXN9PC9saT4NCgl7L2ZvcmVhY2h9DQo8L3VsPg0Key9pZn0NCnsqKn0NCg0KeyogRkVBVFVSRSBESVNBQkxFRCBCWSBERUZBVUxUIChSRU1PVkUgU01BUlRZIENPTU1FTlRTIFRPIE1BS0UgSVQgV09SSyl9DQp7aWYgJHt7JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpfX0tPnh0ZW5kZWRfZmVsaXN0LT5tb2R1bGVzfEBjb3VudCBndCAwfQ0KPHVsIGNsYXNzPSJteF9tb2R1bGVzIj4NCgl7Zm9yZWFjaCBmcm9tPSR7eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19LT54dGVuZGVkX2ZlbGlzdC0+bW9kdWxlcyBpdGVtPW1vZHVsZX0NCgk8bGk+PGEgaHJlZj0ie2Ntc19tb2R1bGUgbW9kdWxlPSRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKSBpdGVtX2lkPSRtb2R1bGUtPmdldElkKCkgYWN0aW9uPSJnZXR1cmwiIHVybGFjdGlvbj0iZGV0YWlsIn0iPnskbW9kdWxlLT5nZXRUaXRsZSgpfTwvYT48L2xpPg0KCXsvZm9yZWFjaH0NCjwvdWw+DQp7L2lmfQ0KeyoqfQ0KDQp7KiBGRUFUVVJFIERJU0FCTEVEIEJZIERFRkFVTFQgKFJFTU9WRSBTTUFSVFkgQ09NTUVOVFMgVE8gTUFLRSBJVCBXT1JLKX0NCntpZiAke3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS0+eHRlbmRlZF9mZWxpc3QtPnRhcmdldF9tb2R1bGVzfEBjb3VudCBndCAwfQ0KPHVsIGNsYXNzPSJteF90YXJnZXRfbW9kdWxlcyI+DQoJe2ZvcmVhY2ggZnJvbT0ke3skbW9kdWxlLT5nZXRNb2R1bGVOYW1lKCl9fS0+eHRlbmRlZF9mZWxpc3QtPnRhcmdldF9tb2R1bGVzIGl0ZW09bW9kdWxlfQ0KCTxsaT48YSBocmVmPSJ7Y21zX21vZHVsZSBtb2R1bGU9JG1vZHVsZS0+Z2V0TW9kdWxlTmFtZSgpIGl0ZW1faWQ9JG1vZHVsZS0+Z2V0SWQoKSBhY3Rpb249ImdldHVybCIgdXJsYWN0aW9uPSJkZXRhaWwifSI+eyRtb2R1bGUtPmdldFRpdGxlKCl9PC9hPjwvbGk+DQoJey9mb3JlYWNofQ0KPC91bD4NCnsvaWZ9DQp7Kip9DQoNCjwvZGl2Pg0Key9pZn0=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.direct_email.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRpdGVtLT50aXRsZX0=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.paginated.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWl0ZW19Cgk8bGk+PGEgaHJlZj0ieyRpdGVtLT5kZXRhaWxfbGlua30iPnskaXRlbS0+dGl0bGV9PC9hPjwvbGk+CnsvZm9yZWFjaH0KPC91bD4KCntpZiAkcGFnZXIuaGFzX3RvX3BhZ2luYXRlfQo8dWwgY2xhc3M9InBhZ2VyIj4KCXtpZiAkcGFnZXIucHJldmlvdXNfcGFnZX08bGkgY2xhc3M9InByZXZpb3VzIj48YSBocmVmPSJ7JHBhZ2VyLnByZXZpb3VzX3BhZ2V9Ij5QcmV2aW91cyBwYWdlPC9hPjwvbGk+ey9pZn0KCXtmb3JlYWNoIGZyb209JHBhZ2VyLnBhZ2VzIGl0ZW09cGFnZX0KCTxsaT57JHBhZ2V9PC9saT4KCXsvZm9yZWFjaH0KCXtpZiAkcGFnZXIubmV4dF9wYWdlfTxsaSBjbGFzcz0ibmV4dCI+PGEgaHJlZj0ieyRwYWdlci5uZXh0X3BhZ2V9Ij5OZXh0IHBhZ2U8L2E+PC9saT57L2lmfQo8L3VsPgp7L2lmfQo=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.rss.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPD94bWwtc3R5bGVzaGVldCB0aXRsZT0iWFNMX2Zvcm1hdHRpbmciIHR5cGU9InRleHQveHNsIiBocmVmPSIvbW9kdWxlcy97eyRtb2R1bGUtPkdldE1vZHVsZU5hbWUoKX19L3Jzcy9zdHlsZS54c2wiPz4KPHJzcyB2ZXJzaW9uPSIyLjAiID4KCTxjaGFubmVsPgoJCTx0aXRsZT57eyRtb2R1bGUtPkdldE1vZHVsZU5hbWUoKX19IFJTUyBmZWVkPC90aXRsZT4KCQk8bGluaz57JHJvb3RfdXJsfTwvbGluaz4KCQk8ZGVzY3JpcHRpb24+e3skbW9kdWxlLT5HZXRNb2R1bGVOYW1lKCl9fTwvZGVzY3JpcHRpb24+CgkJPGxhc3RCdWlsZERhdGU+eyRzbWFydHkubm93fGRhdGVfZm9ybWF0OiIlQSwgJUIgJWUsICVZIn08L2xhc3RCdWlsZERhdGU+CgkJPGxhbmd1YWdlPmVuLWVuPC9sYW5ndWFnZT4KCQl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWl0ZW19CgkJPGl0ZW0+CgkJPHRpdGxlPnskaXRlbS0+dGl0bGV9PC90aXRsZT4KCQk8bGluaz57JGl0ZW0tPmRldGFpbF9saW5rfTwvbGluaz4KCQk8Z3VpZD57JGl0ZW0tPmRldGFpbF9saW5rfTwvZ3VpZD4KCQkgPHB1YkRhdGU+eyRpdGVtLT5jcmVhdGVkX2F0fGRhdGVfZm9ybWF0OiIlYSwgJWQgJWIgJVkgJVQgR01UIn08L3B1YkRhdGU+CgkJPGRlc2NyaXB0aW9uPjwhW0NEQVRBWyB7JGl0ZW0tPnN1bW1hcnl9IF1dPjwvZGVzY3JpcHRpb24+CgkJPC9pdGVtPgoJCXsvZm9yZWFjaH0JCQoJPC9jaGFubmVsPgo8L3Jzcz4=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.search.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0Ke2lmICRmb3JtLT5oYXNFcnJvcnMoKX08ZGl2IHN0eWxlPSJjb2xvcjogcmVkOyI+eyRmb3JtLT5zaG93RXJyb3JzKCl9PC9kaXY+ey9pZn0KCXskZm9ybS0+Z2V0SGVhZGVycygpfQoJCgl7JGZvcm0tPnNob3dXaWRnZXRzKCc8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxkaXYgY2xhc3M9InBhZ2V0ZXh0Ij4lTEFCRUwlOjwvZGl2PgoJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+JUlOUFVUJSA8ZW0+JVRJUFMlPC9lbT48L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiIHN0eWxlPSJjb2xvcjogcmVkOyI+JUVSUk9SUyU8L2Rpdj4KCTwvZGl2PicpfQoKCTxwPgoJCXskZm9ybS0+Z2V0QnV0dG9ucygpfQoJPC9wPgoJeyRmb3JtLT5nZXRGb290ZXJzKCl9CnsvaWZ9Cnt7Kgp7JGZvcm1fc3RhcnR9Cgl7e2ZvcmVhY2ggZnJvbT0kZmlsdGVycyBpdGVtPWZpbHRlcn19Cgk8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRpZH17eyRmaWx0ZXIubmFtZX19Ij4KCXt7L2ZvcmVhY2h9fQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNlYXJjaCBvbGQiIC8+CjwvZm9ybT4KKn19]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.tagcloud.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsIGNsYXNzPSJ0YWdjbG91ZCI+CiAgICB7Zm9yZWFjaCBmcm9tPSR0YWdzIGl0ZW09dGFnfQogICAgICAgIHtjYXB0dXJlIGFzc2lnbj12YWx1ZX0leyR0YWcudGFnfSV7L2NhcHR1cmV9CiAgICAgICAgPGxpIGNsYXNzPSJ3ZWlnaHQteyR0YWcuY2xhc3N9Ij48YSBocmVmPSJ7e2xpdGVyYWx9fXt7ey9saXRlcmFsfX17eyRtb2R1bGUtPmdldE1vZHVsZU5hbWUoKX19IGFjdGlvbj0idXJsX2ZvciIgbGltaXQ9MjAgdGFnPSR2YWx1ZX0iPnskdGFnLnRhZ308L2E+PC9saT4KICAgIHsvZm9yZWFjaH0KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.user_form.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0KCTxkaXYgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JGZvcm0tPnNob3dFcnJvcnMoKX08L2Rpdj4KCXskZm9ybS0+Z2V0SGVhZGVycygpfQoJeyRmb3JtLT5zaG93V2lkZ2V0cygnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+JUxBQkVMJTo8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPiVJTlBVVCU8L2Rpdj4KCTwvZGl2PicpfQogICAgeyRmb3JtLT5yZW5kZXJGaWVsZHNldHMoJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPGRpdiBjbGFzcz0icGFnZXRleHQiPiVMQUJFTCU6PC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4lSU5QVVQlIDxlbT4lVElQUyU8L2VtPjwvZGl2PgoJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCIgc3R5bGU9ImNvbG9yOiByZWQ7Ij4lRVJST1JTJTwvZGl2PgoJPC9kaXY+Jyl9Cgk8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTVweDsiPgoJCXskZm9ybS0+Z2V0QnV0dG9ucygpfQoJPC9wPgoJeyRmb3JtLT5nZXRGb290ZXJzKCl9CnsvaWZ9Cg==]]></data>
	</file>
	<file>
	  <filename>/smarty/templates/templates/frontend.user_form_success.tpl.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHA+eyRzdWNjZXNzX21lc3NhZ2V9PC9wPg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/admin.module_design.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGEgaHJlZj0ieyRhZGR9Ij5DcmVhdGUgYSBuZXcgZGVzaWduPC9hPg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin.module_templates_edit.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgxPkhlbGxvLCBXb3JsZCE8L2gxPgoKCjxkaXYgaWQ9ImRpYWxvZyIgdGl0bGU9IlRhYiBkYXRhIj4KICAgIDxmb3JtPgogICAgICAgIDxmaWVsZHNldCBjbGFzcz0idWktaGVscGVyLXJlc2V0Ij4KICAgICAgICAgICAgPGxhYmVsIGZvcj0idGFiX3RpdGxlIj5UaXRsZTwvbGFiZWw+CiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ0YWJfdGl0bGUiIGlkPSJ0YWJfdGl0bGUiIHZhbHVlPSIiIGNsYXNzPSJ1aS13aWRnZXQtY29udGVudCB1aS1jb3JuZXItYWxsIiAvPgogICAgICAgIDwvZmllbGRzZXQ+CiAgICA8L2Zvcm0+CjwvZGl2PgoKPGJ1dHRvbiBpZD0iYWRkX3RhYiI+QWRkIFRhYjwvYnV0dG9uPgoKPGRpdiBpZD0idGFicyI+CiAgICA8dWw+CiAgICAgICAgPGxpPjxhIGhyZWY9IiN0YWJzLTEiPk51bmMgdGluY2lkdW50PC9hPiA8c3BhbiBjbGFzcz0idWktaWNvbiB1aS1pY29uLWNsb3NlIiByb2xlPSJwcmVzZW50YXRpb24iPlJlbW92ZSBUYWI8L3NwYW4+PC9saT4KICAgIDwvdWw+CiAgICA8ZGl2IGlkPSJ0YWJzLTEiPgogICAgICAgIDxwPlByb2luIGVsaXQgYXJjdSwgcnV0cnVtIGNvbW1vZG8sIHZlaGljdWxhIHRlbXB1cywgY29tbW9kbyBhLCByaXN1cy4gQ3VyYWJpdHVyIG5lYyBhcmN1LiBEb25lYyBzb2xsaWNpdHVkaW4gbWkgc2l0IGFtZXQgbWF1cmlzLiBOYW0gZWxlbWVudHVtIHF1YW0gdWxsYW1jb3JwZXIgYW50ZS4gRXRpYW0gYWxpcXVldCBtYXNzYSBldCBsb3JlbS4gTWF1cmlzIGRhcGlidXMgbGFjdXMgYXVjdG9yIHJpc3VzLiBBZW5lYW4gdGVtcG9yIHVsbGFtY29ycGVyIGxlby4gVml2YW11cyBzZWQgbWFnbmEgcXVpcyBsaWd1bGEgZWxlaWZlbmQgYWRpcGlzY2luZy4gRHVpcyBvcmNpLiBBbGlxdWFtIHNvZGFsZXMgdG9ydG9yIHZpdGFlIGlwc3VtLiBBbGlxdWFtIG51bGxhLiBEdWlzIGFsaXF1YW0gbW9sZXN0aWUgZXJhdC4gVXQgZXQgbWF1cmlzIHZlbCBwZWRlIHZhcml1cyBzb2xsaWNpdHVkaW4uIFNlZCB1dCBkb2xvciBuZWMgb3JjaSB0aW5jaWR1bnQgaW50ZXJkdW0uIFBoYXNlbGx1cyBpcHN1bS4gTnVuYyB0cmlzdGlxdWUgdGVtcHVzIGxlY3R1cy48L3A+CiAgICA8L2Rpdj4KPC9kaXY+CgoKCntpZiBpc3NldCgkdGVtcGxhdGVfZm9ybSl9CiAgICB7aWYgJHRlbXBsYXRlX2Zvcm0tPmhhc0Vycm9ycygpfTxkaXYgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JHRlbXBsYXRlX2Zvcm0tPnNob3dFcnJvcnMoKX08L2Rpdj57L2lmfQogICAgeyR0ZW1wbGF0ZV9mb3JtLT5nZXRIZWFkZXJzKCl9CgogICAge2ZvcmVhY2ggZnJvbT0kZmllbGRzIGl0ZW09ZmllbGR9CiAgICAgICAgPGRpdiBpZD0iZmllbGRfeyRmaWVsZC0+Z2V0SWQoKX0iIGNsYXNzPSJmaWVsZCI+CiAgICAgICAgICAgIHskdGVtcGxhdGVfZm9ybS0+c2hvd1dpZGdldCgkZmllbGQtPmdldEZpZWxkTmFtZSgpKX0KICAgICAgICA8L2Rpdj4KICAgIHsvZm9yZWFjaH0KCiAgICB7JHRlbXBsYXRlX2Zvcm0tPnNob3dXaWRnZXRzKCl9CgogICAgeyR0ZW1wbGF0ZV9mb3JtLT5yZW5kZXJGaWVsZHNldHMoKX0KCiAgICA8cD4KICAgICAgICB7JHRlbXBsYXRlX2Zvcm0tPmdldEJ1dHRvbnMoKX0KICAgIDwvcD4KICAgIHskdGVtcGxhdGVfZm9ybS0+Z2V0Rm9vdGVycygpfQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/admin.module_wizard_step1.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0KICAgIDxoMT5Nb2R1bGUgY3JlYXRpb24gd2l6YXJkPC9oMT4KICAgIDxoMj4xLiBNb2R1bGUgbmFtZTwvaDI+CiAgICB7JGZvcm19CnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/templates/admin.module_wizard_step2.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmb3JtKX0KICAgIDxoMT5Nb2R1bGUgY3JlYXRpb24gd2l6YXJkIC0geyRtb2R1bGVfbmFtZX08L2gxPgogICAgPGgyPjIuIE1vZHVsZSBmaWVsZHM8L2gyPgogICAgeyRmb3JtfQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/defaultadmin.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRyb3dzfEBjb3VudH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KICAgIDx0aGVhZD4KICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0aD5Nb2R1bGUgbmFtZTwvdGg+CiAgICAgICAgICAgIDx0aD5TbWFydHk8L3RoPgogICAgICAgICAgICA8dGggY2xhc3M9InBhZ2VpY29uIiBzdHlsZT0id2lkdGg6MTZweDsiPiZuYnNwOzwvdGg+CiAgICAgICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iIHN0eWxlPSJ3aWR0aDoxNnB4OyI+Jm5ic3A7PC90aD4KICAgICAgICAgICAgPHRoIGNsYXNzPSJwYWdlaWNvbiIgc3R5bGU9IndpZHRoOjE2cHg7Ij4mbmJzcDs8L3RoPgogICAgICAgICAgICA8dGggY2xhc3M9InBhZ2VpY29uIiBzdHlsZT0id2lkdGg6MTZweDsiPiZuYnNwOzwvdGg+CiAgICAgICAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iIHN0eWxlPSJ3aWR0aDoxNnB4OyI+Jm5ic3A7PC90aD4KICAgICAgICA8L3RyPgogICAgPC90aGVhZD4KICAgIDx0Ym9keT4KICAgICAgICB7Zm9yZWFjaCBmcm9tPSRyb3dzIGl0ZW09cm93fQogICAgICAgIDx0ciBjbGFzcz0ie2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn0iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT0ne2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn1ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0ne2N5Y2xlIHZhbHVlcz0icm93MSxyb3cyIn0nOyI+CiAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAwcHg7Ij4KICAgICAgICAgICAgICAgIDxhIGhyZWY9Inskcm93LmVkaXRfbGlua30iPnskcm93Lm1vZHVsZV9mcmllbmRseW5hbWV9PC9hPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgICA8dGQ+e2xkZWxpbX17JHJvdy5tb2R1bGVfbmFtZX17cmRlbGltfTwvZW0+PC90ZD4KICAgICAgICAgICAgPHRkPnskcm93LnB1Ymxpc2h9PC90ZD4KICAgICAgICAgICAgPHRkPnskcm93LmV4cG9ydH08L3RkPgogICAgICAgICAgICA8dGQ+eyRyb3cudmlld308L3RkPgoJCQkJCQk8dGQ+eyRyb3cuZWRpdH08L3RkPgogICAgICAgICAgICA8dGQ+eyRyb3cuZGVsZXRlfTwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICB7L2ZvcmVhY2h9CiAgICA8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQoKPHA+eyRhZGRfaWNvbn0gIHskYWRkfTwvcD4KCntpZiBpc3NldCgkZm9ybSl9Cgk8ZGl2IHN0eWxlPSJjb2xvcjogcmVkOyI+eyRmb3JtLT5zaG93RXJyb3JzKCl9PC9kaXY+Cgl7JGZvcm0tPmdldEhlYWRlcnMoKX0KCXskZm9ybS0+c2hvd1dpZGdldHMoJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPGRpdiBjbGFzcz0icGFnZXRleHQiPiVMQUJFTCU6PC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0Ij4lSU5QVVQlIDxlbT4lVElQUyU8L2VtPjwvZGl2PgoJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCIgc3R5bGU9ImNvbG9yOiByZWQ7Ij4lRVJST1JTJTwvZGl2PgoJPC9kaXY+Jyl9Cgl7JGZvcm0tPnJlbmRlckZpZWxkc2V0cygnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8ZGl2IGNsYXNzPSJwYWdldGV4dCI+JUxBQkVMJTo8L2Rpdj4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQiPiVJTlBVVCUgPGVtPiVUSVBTJTwvZW0+PC9kaXY+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+Cgk8L2Rpdj4nKX0KCQl7JGZvcm0tPmdldEJ1dHRvbnMoKX0KCXskZm9ybS0+Z2V0Rm9vdGVycygpfQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/edit.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyo8ZGl2Pip9CiAgICB7KntpZiBpc3NldCgkbW9kdWxlX2Rlc2lnbil9Kn0KICAgICAgICB7KjxhIGhyZWY9InskbW9kdWxlX2Rlc2lnbn0iIGNsYXNzPSJidG4iPkRlc2lnbjwvYT4qfQogICAgeyp7L2lmfSp9CnsqPC9kaXY+Kn0KCnskZm9ybV9zdGFydH0KeyRpbnB1dF9tb2R1bGVfaWR9CjxwIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPgoJeyRwdWJsaXNoX2J1dHRvbn0KCXskc2F2ZV9idXR0b259Cgl7JGNhbmNlbF9idXR0b259CjwvcD4KCnskdGFiX2hlYWRlcnN9Cgp7JHN0YXJ0X21haW5fdGFifQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3cyIj4KICA8cCBjbGFzcz0icGFnZXRleHQyIj5Nb2R1bGUgbmFtZTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dDIiPnskaW5wdXRfbW9kdWxlX2ZyaWVuZGx5bmFtZX08L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93MiI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0MiI+VGl0bGUgbGFiZWw6PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQyIj57JGlucHV0X3RpdGxlX2xhYmVsfTwvcD4KPC9kaXY+Cgo8ZGl2IGlkPSJzdHJ1Y3R1cmUiIHN0eWxlPSJtYXJnaW4tYm90dG9tOiA3cHg7Ij4KCiAgICA8YnV0dG9uIGlkPSJjcmVhdGUtdGFiIj4rIEFkZCBhIG5ldyB0YWI8L2J1dHRvbj4KCgk8dWw+CgkJe2ZvcmVhY2ggZnJvbT0kc3RydWN0dXJlLT5nZXRUYWJzKCkgaXRlbT10YWIga2V5PXRhYl9rZXl9CgkJPGxpe2lmICRhY3RpdmVfZmllbGRzX3RhYiBlcSAkdGFiX2tleX0gY2xhc3M9InVpLXRhYnMtc2VsZWN0ZWQgdWktc3RhdGUtYWN0aXZlInsvaWZ9PjxhIGhyZWY9IiNzdHJ1Yy17JHRhYl9rZXl9Ij57JHRhYi5uYW1lfTwvYT48L2xpPgoJCXsvZm9yZWFjaH0KCTwvdWw+CgkKCXtmb3JlYWNoIGZyb209JHN0cnVjdHVyZS0+Z2V0VGFicygpIGl0ZW09dGFiIGtleT10YWJfa2V5fQoJCTxkaXYgaWQ9InN0cnVjLXskdGFiX2tleX0iPgoJCQk8cCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48YnV0dG9uIGlkPSJyZW1vdmUtdGFiLXskdGFiX2tleX0iPlJlbW92ZSB0aGlzIHRhYjwvYnV0dG9uPjwvcD4KCQkJCgkJCTx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IiBjbGFzcz0icGFnZXRhYmxlIj4KCQkJPHRoZWFkPgoJCQkJPHRoIGNvbHNwYW49IjIiPjwvdGg+CgkJCQk8dGg+TGFiZWw8L3RoPgoJCQkJPHRoPk5hbWU8L3RoPgoJCQkJPHRoPlR5cGU8L3RoPgoJCQkJPHRoPk9wdGlvbnM8L3RoPgoJCQkJPHRoPkNvbHVtbjwvdGg+CgkJCQk8dGg+RmlsdGVyPC90aD4KCQkJCTx0aD5Gcm9udGVuZDwvdGg+CgkJCQk8dGg+PC90aD4KCQkJPC90aGVhZD4KCQkJPHRib2R5PgoJCQkKCQkJe2ZvcmVhY2ggZnJvbT0kdGFiLmZpZWxkc2V0cyBpdGVtPWZpZWxkc2V0IGtleT1maWVsZHNldF9rZXl9CgkJCTx0ciBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI2FhYTsiPgoJCQkJPHRkIGNvbHNwYW49IjkiPgoJCQkJCTxzdHJvbmc+eyRmaWVsZHNldC5uYW1lfTwvc3Ryb25nPgoJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InskbW9kdWxlX2lkfWZpZWxkc19vcmRlcmVkW3skdGFiX2tleX1dW3skZmllbGRzZXRfa2V5fV0iIC8+CgkJCQk8L3RkPgoJCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPgoJCQkJCTxzcGFuIGNsYXNzPSJyZW1vdmUtZmllbGRzZXQiIG5hbWU9J3tsZGVsaW19InRhYl9rZXkiOiJ7JHRhYl9rZXl9IiwgInJlbW92ZV9maWVsZHNldCI6InskZmllbGRzZXRfa2V5fSJ7cmRlbGltfSc+eyRyZW1vdmVfaWNvbn08L3NwYW4+CgkJCQk8L3RkPgoJCQk8L3RyPgoJCQkKCQkJeyogRklFTERTICp9CgkJCQoJCQl7aWYgaXNzZXQoJGZpZWxkc2V0LmZpZWxkcyl9CgkJCTx0Ym9keSBpZD0ic29ydGFibGUteyR0YWJfa2V5fS17JGZpZWxkc2V0X2tleX0iPgoJCQl7Zm9yZWFjaCBmcm9tPSRmaWVsZHNldC5maWVsZHMgaXRlbT1maWVsZH0JCQkKCQkJPHRyIG5hbWU9InskZmllbGQubmFtZX0iIGNsYXNzPSJ7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIifSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIifWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIifSc7Ij4KCQkJCTx0ZCBjb2xzcGFuPSIyIj48L3RkPgoJCQkJPHRkPnskZmllbGQubGFiZWx9PC90ZD4KCQkJCTx0ZD57JGZpZWxkLm5hbWV9PC90ZD4KCQkJCTx0ZD57JGZpZWxkLnR5cGV9PC90ZD4KCQkJCTx0ZD57JGZpZWxkLm9wdGlvbnN9PC90ZD4KCQkJCTx0ZD57JGZpZWxkLmNvbHVtbn08L3RkPgoJCQkJPHRkPnskZmllbGQuZmlsdGVyfTwvdGQ+CgkJCQk8dGQ+eyRmaWVsZC5mcm9udGVuZH08L3RkPgoJCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiIHdpZHRoPSIxMDAiPgkJCQkJCgkJCQkJPHNwYW4gY2xhc3M9ImVkaXQtZmllbGQiIG5hbWU9J3tsZGVsaW19InRhYl9rZXkiOiJ7JHRhYl9rZXl9IiwgImZpZWxkc2V0X2tleSI6InskZmllbGRzZXRfa2V5fSIsImxhYmVsIjoieyRmaWVsZC5sYWJlbH0iLCJuYW1lIjoieyRmaWVsZC5uYW1lfSIsInR5cGUiOiJ7JGZpZWxkLnR5cGV9Iiwib3B0aW9ucyI6InskZmllbGQub3B0aW9uc30iLCJjb2x1bW4iOiJ7JGZpZWxkLmNvbHVtbn0iLCJmaWx0ZXIiOiJ7JGZpZWxkLmZpbHRlcn0iLCJmcm9udGVuZCI6InskZmllbGQuZnJvbnRlbmR9IntyZGVsaW19Jz57JGVkaXRfaWNvbn08L3NwYW4+CgkJCQkJPHNwYW4gY2xhc3M9InJlbW92ZS1maWVsZCIgbmFtZT0ne2xkZWxpbX0idGFiX2tleSI6InskdGFiX2tleX0iLCAiZmllbGRzZXRfa2V5IjoieyRmaWVsZHNldF9rZXl9IiwiZmllbGQiOiJ7JGZpZWxkLm5hbWV9IntyZGVsaW19Jz57JHJlbW92ZV9pY29ufTwvc3Bhbj4KCQkJCTwvdGQ+CgkJCTwvdHI+CQkJCgkJCXsvZm9yZWFjaH0JCQoJCQk8L3Rib2R5PgoJCQl7L2lmfQoJCQkKCQkJPHRyIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZWZlZmVmOyI+CgkJCQk8dGQgY29sc3Bhbj0iOSI+PC90ZD4KCQkJCTx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48c3BhbiBjbGFzcz0iYWRkLWZpZWxkIiBuYW1lPSd7bGRlbGltfSJ0YWJfa2V5IjoieyR0YWJfa2V5fSIsICJmaWVsZHNldF9rZXkiOiJ7JGZpZWxkc2V0X2tleX0ie3JkZWxpbX0nPkFkZCBmaWVsZDwvc3Bhbj48L3RkPgoJCQk8L3RyPgoJCQl7L2ZvcmVhY2h9CgkJCTwvdGJvZHk+CgkJPC90YWJsZT4KCQkJCQkJCQkKCQk8cCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij48YnV0dG9uIGNsYXNzPSJhZGQtZmllbGRzZXQiIG5hbWU9InskdGFiX2tleX0iPkFkZCBhIGZpZWxkc2V0PC9idXR0b24+PC9wPgkJCQoJCQoJCTwvZGl2PgoJey9mb3JlYWNofQo8L2Rpdj4KCgoKPHA+eyogU1BBQ0VSICp9PC9wPgoKCgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3cyIj4KCTxwIGNsYXNzPSJwYWdldGV4dDIiPkZpbHRlcnM6PC9wPgoJPGRpdiBjbGFzcz0icGFnZWlucHV0MiI+CgkJPGRpdiBpZD0iZmlsdGVycyI+CgkJCXtmb3JlYWNoIGZyb209JGZpbHRlcnMga2V5PWkgaXRlbT1maWx0ZXJ9CgkJCTxwIGNsYXNzPSJmaWx0ZXJzX2l0ZW0iPgoJCQkJPGxhYmVsIGZvcj0ieyRtb2R1bGVfaWR9ZmlsdGVyc197JGl9X25hbWUiPk5hbWU6PC9sYWJlbD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJ7JG1vZHVsZV9pZH1maWx0ZXJzX3skaX1fbmFtZSIgbmFtZT0ieyRtb2R1bGVfaWR9ZmlsdGVyc1t7JGl9XVtuYW1lXSIgdmFsdWU9InskZmlsdGVyLm5hbWV9IiBzaXplPSIzMCIgLz4KCQkJCTxsYWJlbCBmb3I9InskbW9kdWxlX2lkfWZpbHRlcnNfeyRpfV9maWVsZCI+RmllbGQ6PC9sYWJlbD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSJ7JG1vZHVsZV9pZH1maWx0ZXJzX3skaX1fZmllbGQiIG5hbWU9InskbW9kdWxlX2lkfWZpbHRlcnNbeyRpfV1bZmllbGRdIiB2YWx1ZT0ieyRmaWx0ZXIuZmllbGR9IiBzaXplPSIxMCIgLz4KCQkJCTxsYWJlbCBmb3I9InskbW9kdWxlX2lkfWZpbHRlcnNfeyRpfV90eXBlIj5UeXBlOjwvbGFiZWw+IDxzZWxlY3QgaWQ9InskbW9kdWxlX2lkfWZpbHRlcnNfeyRpfV90eXBlIiBuYW1lPSJ7JG1vZHVsZV9pZH1maWx0ZXJzW3skaX1dW3R5cGVdIj4KCQkJCQl7Zm9yZWFjaCBmcm9tPSRmaWx0ZXJfdHlwZXMgaXRlbT1maWx0ZXJfdHlwZX0KCQkJCQk8b3B0aW9uIHZhbHVlPSJ7JGZpbHRlcl90eXBlLnR5cGV9IiB7aWYgJGZpbHRlci50eXBlID09ICRmaWx0ZXJfdHlwZS50eXBlfXNlbGVjdGVkPSJzZWxlY3RlZCJ7L2lmfT57JGZpbHRlcl90eXBlLmxhYmVsfTwvb3B0aW9uPgoJCQkJCXsvZm9yZWFjaH0KCQkJCTwvc2VsZWN0PgoJCQkJPGEgaHJlZj0iIyIgY2xhc3M9ImZpbHRlcl9yZW1vdmUiPlJlbW92ZSBmaWx0ZXI8L2E+CgkJCTwvcD4KCQkJey9mb3JlYWNofQoJCTwvZGl2PgoJCTxwPjxidXR0b24gaWQ9ImZpbHRlcl9hZGQiPkFkZCBmaWx0ZXI8L2J1dHRvbj48L3A+Cgk8L2Rpdj4KPC9kaXY+CgoKeyRlbmRfdGFifQoKeyRzdGFydF9hY3Rpb25zX3RhYn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93MiI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0MiI+U3BlY2lmaWMgbW9kdWxlIGFjdGlvbnM8L3A+CgkJPGRpdiBjbGFzcz0icGFnZWlucHV0MiI+CgkJCQk8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlOyIgY2xhc3M9InBhZ2V0YWJsZSI+CgkJCQkJPHRoZWFkPgoJCQkJCQk8dGg+TmFtZTwvdGg+CgkJCQkJCTx0aD5JcyBhIHB1YmxpYyBhY3Rpb248L3RoPgoJCQkJCQk8dGg+PC90aD4KCQkJCQk8L3RoZWFkPgoJCQkJCTx0Ym9keSBpZD0iYWN0aW9ucyI+CgkJCQkJCXtmb3JlYWNoIGZyb209JGFjdGlvbnMgaXRlbT1hY3Rpb259CgkJCQkJCTx0cj4KCQkJCQkJCTx0ZD57JGFjdGlvbi0+bmFtZX08L3RkPgoJCQkJCQkJPHRkPnskYWN0aW9uLT5pc19wdWJsaWNfaWNvbn08L3RkPgoJCQkJCQkJPHRkPnskYWN0aW9uLT5lZGl0X3VybH0geyRhY3Rpb24tPmRlbGV0ZV91cmx9PC90ZD4KCQkJCQkJPC90cj4KCQkJCQkJey9mb3JlYWNofQoJCQkJCTwvdGJvZHk+CgkJCQk8L3RhYmxlPgoJCQk8cD48aW5wdXQgdHlwZT0iYnV0dG9uIiBpZD0iYWN0aW9uX2FkZCIgdmFsdWU9IkFkZCBhY3Rpb24iIG9uQ2xpY2s9InJldHVybiBwYXJlbnQubG9jYXRpb249J3skYWRkX2FjdGlvbl91cmx9JyIgLz48L3A+CgkJPC9kaXY+CjwvZGl2Pgp7JGVuZF90YWJ9Cgp7JHN0YXJ0X2V4dHJhX2ZlYXR1cmVzX3RhYn0KPGgyPkV4dHJhIGZlYXR1cmVzPC9oMj4KCTxwPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJBZGQgZXZlbnQiIG9uQ2xpY2s9InJldHVybiBwYXJlbnQubG9jYXRpb249J3skYWRkX2V2ZW50fSciIC8+PC9wPgoKe2lmICRldmVudHN8QGNvdW50ID4gMH0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93MiI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0MiI+U3BlY2lmaWMgbW9kdWxlIGV2ZW50czwvcD4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQyIj4KCQkJCTx0YWJsZSBzdHlsZT0id2lkdGg6IDEwMCU7IiBjbGFzcz0icGFnZXRhYmxlIj4KCQkJCQk8dGhlYWQ+CgkJCQkJCTx0aD5Nb2R1bGUgbmFtZTwvdGg+CgkJCQkJCTx0aD5FdmVudCBuYW1lPC90aD4KCQkJCQkJPHRoPjwvdGg+CgkJCQkJPC90aGVhZD4KCQkJCQk8dGJvZHkgaWQ9ImFjdGlvbnMiPgoJCQkJCQl7Zm9yZWFjaCBmcm9tPSRldmVudHMgaXRlbT1ldmVudH0KCQkJCQkJPHRyPgoJCQkJCQkJPHRkPnskZXZlbnQubW9kdWxlX25hbWV9PC90ZD4KCQkJCQkJCTx0ZD57JGV2ZW50LmV2ZW50X25hbWV9PC90ZD4KCQkJCQkJCTx0ZD57JGV2ZW50LmVkaXR9IHskZXZlbnQuZGVsZXRlfTwvdGQ+CgkJCQkJCTwvdHI+CgkJCQkJCXsvZm9yZWFjaH0KCQkJCQk8L3Rib2R5PgoJCQkJPC90YWJsZT4KCQkJPHA+PGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9ImFjdGlvbl9hZGQiIHZhbHVlPSJBZGQgYWN0aW9uIiBvbkNsaWNrPSJyZXR1cm4gcGFyZW50LmxvY2F0aW9uPSd7JGFkZF9hY3Rpb25fdXJsfSciIC8+PC9wPgoJCTwvZGl2Pgo8L2Rpdj4Key9pZn0KCTxwPjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJBZGQgZXZlbnQiIG9uQ2xpY2s9InJldHVybiBwYXJlbnQubG9jYXRpb249J3skYWRkX2V2ZW50fSciIC8+PC9wPgp7JGVuZF90YWJ9Cgp7JHN0YXJ0X2xvZ2ljX3RhYn0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93MiI+Cgk8cCBjbGFzcz0icGFnZXRleHQyIj5TcGVjaWZpYyBtb2R1bGUgb2JqZWN0IGxvZ2ljIChleHRlbmRzIHRoZSBtb2R1bGUgaXRlbSBjbGFzcyk6PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dDIiPnskbW9kdWxlX2xvZ2ljfTwvcD4KPC9kaXY+CnskZW5kX3RhYn0KCnskc3RhcnRfb3B0aW9uc190YWJ9Cgp7aWYgaXNzZXQoJGZvcm1fbW9kdWxlX29wdGlvbnMpfQogICAge2lmICRmb3JtX21vZHVsZV9vcHRpb25zLT5oYXNFcnJvcnMoKX08ZGl2IHN0eWxlPSJjb2xvcjogcmVkOyI+eyRmb3JtX21vZHVsZV9vcHRpb25zLT5zaG93RXJyb3JzKCl9PC9kaXY+ey9pZn0KCiAgICB7JGZvcm1fbW9kdWxlX29wdGlvbnMtPnNob3dXaWRnZXRzKCl9CgogICAgeyRmb3JtX21vZHVsZV9vcHRpb25zLT5yZW5kZXJGaWVsZHNldHMoKX0KCiAgICA8aHIgLz4Key9pZn0KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdzIiPgoJCTxwIGNsYXNzPSJwYWdldGV4dDIiPlJlc3RvcmUgbW9kdWxlIHRlbXBsYXRlczwvcD4KCQk8ZGl2IGNsYXNzPSJwYWdlaW5wdXQyIj4KCQkJPHA+PGlucHV0IHR5cGU9ImJ1dHRvbiIgaWQ9InRlbXBsYXRlc19yZXN0b3JlIiB2YWx1ZT0iUmVzdG9yZSB0ZW1wbGF0ZXMiIG9uQ2xpY2s9InJldHVybiBwYXJlbnQubG9jYXRpb249J3skdGVtcGxhdGVzX3Jlc3RvcmVfdXJsfSciIC8+PC9wPgoJCTwvZGl2Pgo8L2Rpdj4KPGhyIC8+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdzIiPgoJPHAgY2xhc3M9InBhZ2V0ZXh0MiI+Q3JlYXRlZCBieTo8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0MiI+eyRjcmVhdGVkX2J5fSBvbiB7JGNyZWF0ZWRfYXR9PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdzIiPgoJPHAgY2xhc3M9InBhZ2V0ZXh0MiI+TGFzdCB1cGRhdGVkIGJ5OjwvcD4KCTxwIGNsYXNzPSJwYWdlaW5wdXQyIj57JHVwZGF0ZWRfYnl9IG9uIHskdXBkYXRlZF9hdH08L3A+CjwvZGl2Pgp7JGVuZF90YWJ9Cgp7JHRhYl9mb290ZXJzfQoKPHAgc3R5bGU9InRleHQtYWxpZ246IHJpZ2h0OyI+Cgl7JHB1Ymxpc2hfYnV0dG9ufQoJeyRzYXZlX2J1dHRvbn0KCXskY2FuY2VsX2J1dHRvbn0KPC9wPgoKPC9mb3JtPgoKeyogTU9EQUwgQk9YRVMgKn0KPGRpdiBpZD0idGFiLWZvcm0iIHRpdGxlPSJDcmVhdGUgYSBuZXcgdGFiIj4KCXtpZiBpc3NldCgkdGFiX2Zvcm0pfQoJCXskdGFiX2Zvcm0tPnJlbmRlcigpfQoJey9pZn0KPC9kaXY+Cgo8ZGl2IGlkPSJhZGQtZmllbGRzZXQtZm9ybSIgdGl0bGU9IkNyZWF0ZSBhIG5ldyBmaWVsZHNldCI+Cgl7aWYgaXNzZXQoJGZpZWxkc2V0X2Zvcm0pfQoJCXskZmllbGRzZXRfZm9ybS0+cmVuZGVyKCl9Cgl7L2lmfQo8L2Rpdj4KCjxkaXYgaWQ9InJlbW92ZS1maWVsZHNldC1mb3JtIiB0aXRsZT0iUmVtb3ZlIGZpZWxkc2V0Ij4KCQk8cD5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSBmaWVsZHNldD8gVGhpcyB3aWxsIGFsc28gcmVtb3ZlIGFsbCB0aGUgZmllbGRzIG9mIHRoaXMgZmllbGRzZXQuPC9wPgoJe2lmIGlzc2V0KCRyZW1vdmVfZmllbGRzZXRfZm9ybSl9CgkJeyRyZW1vdmVfZmllbGRzZXRfZm9ybS0+cmVuZGVyKCl9Cgl7L2lmfQo8L2Rpdj4KCjxkaXYgaWQ9ImFkZC1maWVsZC1mb3JtIiB0aXRsZT0iQWRkIGZpZWxkIj4KCXtpZiBpc3NldCgkYWRkX2ZpZWxkX2Zvcm0pfQoJCXskYWRkX2ZpZWxkX2Zvcm0tPnJlbmRlcigpfQoJey9pZn0KPC9kaXY+Cgo8ZGl2IGlkPSJyZW1vdmUtZmllbGQtZm9ybSIgdGl0bGU9IlJlbW92ZSBmaWVsZCI+Cgk8cD5BcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZmllbGQ/PC9wPgoJe2lmIGlzc2V0KCRyZW1vdmVfZmllbGRfZm9ybSl9CgkJeyRyZW1vdmVfZmllbGRfZm9ybS0+cmVuZGVyKCl9Cgl7L2lmfQo8L2Rpdj4KCgp7Zm9yZWFjaCBmcm9tPSRzdHJ1Y3R1cmUtPmdldFRhYnMoKSBpdGVtPXRhYiBrZXk9dGFiX2tleX0KCjxkaXYgaWQ9InJlbW92ZS10YWItbWVzc2FnZS17JHRhYl9rZXl9IiB0aXRsZT0nUmVtb3ZlIHRhYiAieyR0YWIubmFtZX0iJz4KCTxwPkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhlIHRhYiAieyR0YWIubmFtZX0iPyBUaGlzIHdpbGwgYWxzbyByZW1vdmUgYWxsIHRoZSBmaWVsZHNldHMgYW5kIGZpZWxkcy48L3A+Cgl7aWYgaXNzZXQoJHRhYl9yZW1vdmVfZm9ybSl9CgkJe2lmICR0YWJfcmVtb3ZlX2Zvcm0tPmhhc0Vycm9ycygpfTxkaXYgc3R5bGU9ImNvbG9yOiByZWQ7Ij57JHRhYl9yZW1vdmVfZm9ybS0+c2hvd0Vycm9ycygpfTwvZGl2PnsvaWZ9CgkJeyR0YWJfcmVtb3ZlX2Zvcm0tPmdldEhlYWRlcnMoKX0KCQoJCXskdGFiX3JlbW92ZV9mb3JtLT5zaG93V2lkZ2V0cygnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJPGRpdiBjbGFzcz0icGFnZXRleHQiPiVMQUJFTCU6PC9kaXY+CgkJCTxkaXYgY2xhc3M9InBhZ2VpbnB1dCI+JUlOUFVUJSA8ZW0+JVRJUFMlPC9lbT48L2Rpdj4KCQkJPGRpdiBjbGFzcz0icGFnZWlucHV0IiBzdHlsZT0iY29sb3I6IHJlZDsiPiVFUlJPUlMlPC9kaXY+CgkJPC9kaXY+JywgJ3RydWUnKX0KCQl7JHRhYl9yZW1vdmVfZm9ybS0+Z2V0Rm9vdGVycygpfQoJey9pZn0KPC9kaXY+Cgp7L2ZvcmVhY2h9CgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoKICAKCXZhciBvcHRpb25zX2RlZmF1bHQgPSBuZXcgT2JqZWN0KCk7Cgl7Zm9yZWFjaCBmcm9tPSRmaWVsZF90eXBlcyBpdGVtPWZpZWxkX3R5cGV9b3B0aW9uc19kZWZhdWx0Wyd7JGZpZWxkX3R5cGUudHlwZX0nXSA9ICd7aWYgaXNzZXQoJGZpZWxkX3R5cGUub3B0aW9uc19kZWZhdWx0KX17JGZpZWxkX3R5cGUub3B0aW9uc19kZWZhdWx0fXsvaWZ9Jzt7L2ZvcmVhY2h9CiAgLy9jb25zb2xlLmxvZyhvcHRpb25zX2RlZmF1bHQpOwogIHtsaXRlcmFsfQogIChmdW5jdGlvbigkKSB7CgkJJCggIiNzdHJ1Y3R1cmUiICkudGFicygpOwoJCSQoIiN0YWItZm9ybSIpLmRpYWxvZyh7CgkJCWF1dG9PcGVuOiBmYWxzZSwKCQkJaGVpZ2h0OiAxNTAsCgkJCXdpZHRoOiAzNTAsCgkJCW1vZGFsOiB0cnVlLAoJCQlidXR0b25zOiB7CgkJCQkiQ3JlYXRlIHRhYiI6IGZ1bmN0aW9uKCl7CgkJCQkJJCgiI3RhYi1mb3JtID4gZm9ybSIpLnN1Ym1pdCgpOwoJCQkJfSwKCQkJCUNhbmNlbDogZnVuY3Rpb24oKXsKCQkJCQkkKHRoaXMpLmRpYWxvZygiY2xvc2UiKTsKCQkJCX0KCQkJfQoJCX0pOwoJCQoJCSQoIiNjcmVhdGUtdGFiIikKCQkJLmJ1dHRvbigpCgkJCS5jbGljayhmdW5jdGlvbigpewoJCQkJJCgiI3RhYi1mb3JtIikuZGlhbG9nKCJvcGVuIik7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0pOwoJCXsvbGl0ZXJhbH0KCQl7Zm9yZWFjaCBmcm9tPSRzdHJ1Y3R1cmUtPmdldFRhYnMoKSBpdGVtPXRhYiBrZXk9dGFiX2tleX0KCQkKCQkJJCgiI3JlbW92ZS10YWItbWVzc2FnZS17JHRhYl9rZXl9IikuZGlhbG9nKAoJCQkJe2xpdGVyYWx9CgkJCQl7CgkJCQkJYXV0b09wZW46IGZhbHNlLAoJCQkJCW1vZGFsOiB0cnVlLAoJCQkJCWJ1dHRvbnM6IHsKCQkJCQkJIlJlbW92ZSI6IGZ1bmN0aW9uKCl7CgkJCQkJCQkkKCIjcmVtb3ZlLXRhYi1tZXNzYWdlLXsvbGl0ZXJhbH17JHRhYl9rZXl9e2xpdGVyYWx9ID4gZm9ybSA+IGlucHV0W25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1yZW1vdmVfdGFiJ10iKS52YWwoJ3svbGl0ZXJhbH17JHRhYl9rZXl9e2xpdGVyYWx9Jyk7CgkJCQkJCQkkKCIjcmVtb3ZlLXRhYi1tZXNzYWdlLXsvbGl0ZXJhbH17JHRhYl9rZXl9e2xpdGVyYWx9ID4gZm9ybSIpLnN1Ym1pdCgpOwoJCQkJCQl9LAoJCQkJCQlDYW5jZWw6IGZ1bmN0aW9uKCl7CgkJCQkJCQkkKHRoaXMpLmRpYWxvZygiY2xvc2UiKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCXsvbGl0ZXJhbH0KCQkJKTsKCQkKCQkJJCgiI3JlbW92ZS10YWIteyR0YWJfa2V5fSIpCgkJCQkuYnV0dG9uKCkKCQkJCS5jbGljayhmdW5jdGlvbigpe2xkZWxpbX0KCQkJCQkkKCIjcmVtb3ZlLXRhYi1tZXNzYWdlLXskdGFiX2tleX0iKS5kaWFsb2coIm9wZW4iKTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl7cmRlbGltfSk7CQkKCQkJCgkJCXtmb3JlYWNoIGZyb209JHRhYi5maWVsZHNldHMgaXRlbT1maWVsZHNldCBrZXk9ZmllbGRzZXRfa2V5fQoJCQkKCQkJCSQoICIjc29ydGFibGUteyR0YWJfa2V5fS17JGZpZWxkc2V0X2tleX0iICkuc29ydGFibGUoe2xkZWxpbX0KCQkJCXBsYWNlaG9sZGVyOiAidWktc3RhdGUtaGlnaGxpZ2h0IiwKCQkJCXVwZGF0ZTogZnVuY3Rpb24oZXZlbnQsdWkpe2xkZWxpbX0KCQkJCQl2YXIgcmVvcmRlcmVkX2ZpZWxkcyA9IFtdCgkJCQkJJCh0aGlzKS5maW5kKCd0cicpLmVhY2goZnVuY3Rpb24oKXtsZGVsaW19CgkJCQkJCXJlb3JkZXJlZF9maWVsZHMucHVzaCgkKHRoaXMpLmF0dHIoJ25hbWUnKSkKCQkJCQkJLy9jb25zb2xlLmxvZygpOwoJCQkJCXtyZGVsaW19KTsKCQkJCQkvLyBjb25zb2xlLmxvZyhyZW9yZGVyZWRfZmllbGRzKTsKCQkJCQkkKCJpbnB1dFtuYW1lPSd7JG1vZHVsZV9pZH1maWVsZHNfb3JkZXJlZFt7JHRhYl9rZXl9XVt7JGZpZWxkc2V0X2tleX1dJ10iKS52YWwocmVvcmRlcmVkX2ZpZWxkcyk7CgkJCQkJLy8geyRtb2R1bGVfaWR9ZmllbGRzX29yZGVyW3skdGFiX2tleX1dW3skZmllbGRzZXRfa2V5fV0KCQkJCQkvLyBjb25zb2xlLmxvZyhyZW9yZGVyZWRfZmllbGRzKTsKCQkJCQkvLyBjb25zb2xlLmxvZygkKHRoaXMpLmZpbmQoJ3RyJykuYXR0cignaWQnKSk7CgkJCQl7cmRlbGltfQoJCQkJe3JkZWxpbX0pOwoJCQkJJCggIiNzb3J0YWJsZS17JHRhYl9rZXl9LXskZmllbGRzZXRfa2V5fSIgKS5kaXNhYmxlU2VsZWN0aW9uKCk7CgkJCQoJCQl7L2ZvcmVhY2h9CgoJCXsvZm9yZWFjaH0KCQl7bGl0ZXJhbH0KCQkKCQkkKCIuYWRkLWZpZWxkc2V0IikKCQkJLmJ1dHRvbigpCgkJCS5jbGljayhmdW5jdGlvbigpewoJCQkJCXZhciB0YWJfa2V5ID0gJCh0aGlzKS5hdHRyKCJuYW1lIik7CgkJCQkJJCgiI2FkZC1maWVsZHNldC1mb3JtID4gZm9ybSA+IGlucHV0W25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH10YWJfa2V5J10iKQoJCQkJCQkJCS52YWwodGFiX2tleSk7CgkJCQkJJCgiI2FkZC1maWVsZHNldC1mb3JtIikuZGlhbG9nKCJvcGVuIik7CgkJCQkJcmV0dXJuIGZhbHNlOwoJCQl9KTsKCQkJCgkJJCgiI2FkZC1maWVsZHNldC1mb3JtIikuZGlhbG9nKAoJCQkJewoJCQkJCWF1dG9PcGVuOiBmYWxzZSwKCQkJCQltb2RhbDogdHJ1ZSwKCQkJCQlidXR0b25zOiB7CgkJCQkJCSJDcmVhdGUgZmllbGRzZXQiOiBmdW5jdGlvbigpewkJCQkJCQkKCQkJCQkJCSQoIiNhZGQtZmllbGRzZXQtZm9ybSA+IGZvcm0iKS5zdWJtaXQoKTsKCQkJCQkJfSwKCQkJCQkJQ2FuY2VsOiBmdW5jdGlvbigpewoJCQkJCQkJJCh0aGlzKS5kaWFsb2coImNsb3NlIik7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCSk7CQoJCQkKCQkkKCIucmVtb3ZlLWZpZWxkc2V0IikKCQkJLmJ1dHRvbigpCgkJCS5jbGljayhmdW5jdGlvbigpewoJCQkJdmFyIG9wdGlvbnMgPSAkLnBhcnNlSlNPTigkKHRoaXMpLmF0dHIoIm5hbWUiKSk7CgkJCQkkKCIjcmVtb3ZlLWZpZWxkc2V0LWZvcm0gPiBmb3JtID4gaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXRhYl9rZXknXSIpCgkJCQkJLnZhbChvcHRpb25zLnRhYl9rZXkpOwoJCQkJJCgiI3JlbW92ZS1maWVsZHNldC1mb3JtID4gZm9ybSA+IGlucHV0W25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1yZW1vdmVfZmllbGRzZXQnXSIpCgkJCQkJLnZhbChvcHRpb25zLnJlbW92ZV9maWVsZHNldCk7CgkJCQkkKCIjcmVtb3ZlLWZpZWxkc2V0LWZvcm0iKS5kaWFsb2coIm9wZW4iKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSk7CgkJCgkJCQkJCgkJJCgiI3JlbW92ZS1maWVsZHNldC1mb3JtIikuZGlhbG9nKAoJCQkJewoJCQkJCWF1dG9PcGVuOiBmYWxzZSwKCQkJCQltb2RhbDogdHJ1ZSwKCQkJCQlidXR0b25zOiB7CgkJCQkJCSJEZWxldGUgZmllbGRzZXQiOiBmdW5jdGlvbigpewkJCQkJCQkKCQkJCQkJCSQoIiNyZW1vdmUtZmllbGRzZXQtZm9ybSA+IGZvcm0iKS5zdWJtaXQoKTsKCQkJCQkJfSwKCQkJCQkJQ2FuY2VsOiBmdW5jdGlvbigpewoJCQkJCQkJJCh0aGlzKS5kaWFsb2coImNsb3NlIik7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCSk7CQoJCQkKCQkkKCIuZWRpdC1maWVsZCIpCgkJCS5idXR0b24oKQoJCQkuY2xpY2soZnVuY3Rpb24oKXsKCQkJCXZhciBvcHRpb25zID0gJC5wYXJzZUpTT04oJCh0aGlzKS5hdHRyKCJuYW1lIikpOwoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBpbnB1dFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9dGFiX2tleSddIikKCQkJCQkudmFsKG9wdGlvbnMudGFiX2tleSk7CgkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIGlucHV0W25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1maWVsZHNldF9rZXknXSIpCgkJCQkJLnZhbChvcHRpb25zLmZpZWxkc2V0X2tleSk7CgkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIGlucHV0W25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1sYWJlbCddIikKCQkJCQkudmFsKG9wdGlvbnMubGFiZWwpOwoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBpbnB1dFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9bmFtZSddIikKCQkJCQkudmFsKG9wdGlvbnMubmFtZSk7CgkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9dHlwZSddIikKCQkJCSAJLnZhbChvcHRpb25zLnR5cGUpOyAvLy5hdHRyKCJkaXNhYmxlZCIsICJkaXNhYmxlZCIpOwoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXR5cGVfc2VsZWN0J10iKQoJCQkJIAkudmFsKG9wdGlvbnMudHlwZSkuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gW25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1vcHRpb25zJ10iKQoJCQkJCS52YWwob3B0aW9ucy5vcHRpb25zKTsKCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gW25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1wbGFjZSddIikKCQkJCSAJLnZhbChvcHRpb25zLnRhYl9rZXkrJy0tLScrb3B0aW9ucy5maWVsZHNldF9rZXkpCgkJCQkJLmNoYW5nZShmdW5jdGlvbigpewoJCQkJCQkJIAl2YXIgbmV3X3BsYWNlID0gJCh0aGlzKS52YWwoKS5zcGxpdCgnLS0tJyk7CgkJCQkJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBpbnB1dFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9dGFiX2tleSddIikKCQkJCQkJCQkJLnZhbChuZXdfcGxhY2VbMF0pOwoJCQkJCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfWZpZWxkc2V0X2tleSddIikKCQkJCQkJCQkJLnZhbChuZXdfcGxhY2VbMV0pOwoJCQkJCQkJCQkJfSk7CQkJCQoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXBsYWNlJ10iKS5yZW1vdmVBdHRyKCdkaXNhYmxlZCcpOwoJCQkJaWYob3B0aW9ucy5jb2x1bW4gPT0gMSkKCQkJCXsJCgkJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfWNvbHVtbiddIikKCQkJCQkuYXR0cignY2hlY2tlZCcsJ2NoZWNrZWQnKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9Y29sdW1uJ10iKQoJCQkJCS5yZW1vdmVBdHRyKCJjaGVja2VkIik7CgkJCQl9CgkJCQlpZihvcHRpb25zLmZpbHRlciA9PSAxKQoJCQkJewkKCQkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9ZmlsdGVyJ10iKQoJCQkJCS5hdHRyKCdjaGVja2VkJywnY2hlY2tlZCcpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gW25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1maWx0ZXInXSIpCgkJCQkJLnJlbW92ZUF0dHIoImNoZWNrZWQiKTsKCQkJCX0KCQkJCWlmKG9wdGlvbnMuZnJvbnRlbmQgPT0gMSkKCQkJCXsJCgkJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfWZyb250ZW5kJ10iKQoJCQkJCS5hdHRyKCdjaGVja2VkJywnY2hlY2tlZCcpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gW25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH1mcm9udGVuZCddIikKCQkJCQkucmVtb3ZlQXR0cigiY2hlY2tlZCIpOwoJCQkJfQkKCQkJCQkKCQkJCQkkKCIjYWRkLWZpZWxkLWZvcm0iKS5kaWFsb2coeyB0aXRsZTogJ0VkaXQgZmllbGQgWycrb3B0aW9ucy5uYW1lKyddJywgYnV0dG9uczogewoJCQkJCQkiRWRpdCI6IGZ1bmN0aW9uKCl7CgkJCQkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIikuc3VibWl0KCk7CgkJCQkJCX0sCgkJCQkJCUNhbmNlbDogZnVuY3Rpb24oKXsKCQkJCQkJCSQodGhpcykuZGlhbG9nKCJjbG9zZSIpOwoJCQkJCQl9CgkJCQkJfX0pOwkKCQkJCSQoIiNhZGQtZmllbGQtZm9ybSIpLmRpYWxvZygib3BlbiIpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9KTsKCQkJCgkJJCgiLmFkZC1maWVsZCIpCgkJCS5idXR0b24oKQoJCQkuY2xpY2soZnVuY3Rpb24oKXsKCQkJCXZhciBvcHRpb25zID0gJC5wYXJzZUpTT04oJCh0aGlzKS5hdHRyKCJuYW1lIikpOwoJCQkJLy8gQ2xlYW5pbmcgZm9ybQoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSAgaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfWxhYmVsJ10iKS52YWwoJycpOwoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSAgaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfW5hbWUnXSIpLnZhbCgnJyk7CgkJCQkgLy8gdmFyIHNlbGVjdCA9ICQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gIGlucHV0W25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH10eXBlJ10iKTsKCQkJCSAvLyAJCQkJIAkJCQlzZWxlY3QudmFsKCQoJ29wdGlvbnM6Zmlyc3QnLHNlbGVjdCkudmFsKCkpOwoJCQkJCgkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9dHlwZV9zZWxlY3QnXSIpCgkJCQkJLmZpbmQoJ29wdGlvbjpmaXJzdCcpLmF0dHIoJ3NlbGVjdGVkJywgJ3NlbGVjdGVkJykucGFyZW50KCdzZWxlY3QnKTsKCQkJICAkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9dHlwZV9zZWxlY3QnXSIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CgoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSAgW25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH10eXBlJ10iKQoJCQkJICAudmFsKCQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gW25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH10eXBlX3NlbGVjdCddIikudmFsKCkpOwoJCQkJCgkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9b3B0aW9ucyddIikKCQkJCQkudmFsKCcnKTsKCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfWNvbHVtbiddIikKCQkJCQkucmVtb3ZlQXR0cigiY2hlY2tlZCIpOwoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBpbnB1dFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9ZmlsdGVyJ10iKQoJCQkJLnJlbW92ZUF0dHIoImNoZWNrZWQiKTsKCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfWZyb250ZW5kJ10iKQoJCQkJLnJlbW92ZUF0dHIoImNoZWNrZWQiKTsKCQkJCQoJCQkJCQoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSA+IGlucHV0W25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH10YWJfa2V5J10iKQoJCQkJCS52YWwob3B0aW9ucy50YWJfa2V5KTsKCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gPiBpbnB1dFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9ZmllbGRzZXRfa2V5J10iKQoJCQkJCS52YWwob3B0aW9ucy5maWVsZHNldF9rZXkpOwoJCQkJCQoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXBsYWNlJ10iKQoJCQkJIAkudmFsKG9wdGlvbnMudGFiX2tleSsnLS0tJytvcHRpb25zLmZpZWxkc2V0X2tleSkuYXR0cigiZGlzYWJsZWQiLCAiZGlzYWJsZWQiKTsKCiAgCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gW25hbWU9J3svbGl0ZXJhbH17JG1vZHVsZV9pZH17bGl0ZXJhbH10eXBlX3NlbGVjdCddIikKICAJCQkJCS5maW5kKCdvcHRpb246Zmlyc3QnKS5hdHRyKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpLnBhcmVudCgnc2VsZWN0Jyk7CiAgCQkJICAkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9dHlwZV9zZWxlY3QnXSIpLnJlbW92ZUF0dHIoJ2Rpc2FibGVkJyk7CgogIAkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtICBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXR5cGUnXSIpCiAgCQkJCSAgLnZhbCgkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9dHlwZV9zZWxlY3QnXSIpLnZhbCgpKTsKCgoJCQkJJCgiI2FkZC1maWVsZC1mb3JtID4gZm9ybSBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXR5cGVfc2VsZWN0J10iKQoJCQkJCS5jaGFuZ2UoZnVuY3Rpb24oKXsKICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJCh0aGlzKS52YWwoKSk7CiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG9wdGlvbnNfZGVmYXVsdFskKHRoaXMpLnZhbCgpXSk7CgkJCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0gIFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9b3B0aW9ucyddIikKCQkJCQkJLnZhbChvcHRpb25zX2RlZmF1bHRbJCh0aGlzKS52YWwoKV0pOwoJCQkJCQkkKCIjYWRkLWZpZWxkLWZvcm0gPiBmb3JtICBbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXR5cGUnXSIpCgkJCQkJCS52YWwoJCh0aGlzKS52YWwoKSk7CgkJCQkJfSk7CgkJCQkJCQoJCQkJJCgiI2FkZC1maWVsZC1mb3JtIikuZGlhbG9nKHsgdGl0bGU6ICJBZGQgZmllbGQiLCBidXR0b25zOiB7CgkJCQkJCSJBZGQiOiBmdW5jdGlvbigpewoJCQkJCQkJLy9jb25zb2xlLmxvZygkKHRoaXMpLmNoaWxkcmVuKCJmb3JtID4gaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXR5cGUnXSIpKTsJCQkJCgkJCQkJCQkJCQkKCQkJCQkJCSQoIiNhZGQtZmllbGQtZm9ybSA+IGZvcm0iKS5zdWJtaXQoKTsKCQkJCQkJfSwKCQkJCQkJQ2FuY2VsOiBmdW5jdGlvbigpewoJCQkJCQkJJCh0aGlzKS5kaWFsb2coImNsb3NlIik7CgkJCQkJCX0KCQkJCQl9fSk7CQkJCgkJCQkkKCIjYWRkLWZpZWxkLWZvcm0iKS5kaWFsb2coIm9wZW4iKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSk7CgkJCQoJCQkkKCIjYWRkLWZpZWxkLWZvcm0iKS5kaWFsb2coCgkJCQl7CgkJCQkJYXV0b09wZW46IGZhbHNlLAoJCQkJCW1vZGFsOiB0cnVlLAoJCQkJCXdpZHRoOiAzNTAKCQkJCX0KCQkJKTsJCgkJCQoJCQkkKCIjcmVtb3ZlLWZpZWxkLWZvcm0iKS5kaWFsb2coCgkJCQl7CgkJCQkJYXV0b09wZW46IGZhbHNlLAoJCQkJCW1vZGFsOiB0cnVlLAoJCQkJCWJ1dHRvbnM6IHsKCQkJCQkJIkRlbGV0ZSBmaWVsZCI6IGZ1bmN0aW9uKCl7CQkJCQkJCQoJCQkJCQkJJCgiI3JlbW92ZS1maWVsZC1mb3JtID4gZm9ybSIpLnN1Ym1pdCgpOwoJCQkJCQl9LAoJCQkJCQlDYW5jZWw6IGZ1bmN0aW9uKCl7CgkJCQkJCQkkKHRoaXMpLmRpYWxvZygiY2xvc2UiKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJKTsKCQkJCgkJCSQoIi5yZW1vdmUtZmllbGQiKQoJCQkuYnV0dG9uKCkKCQkJLmNsaWNrKGZ1bmN0aW9uKCl7CgkJCQl2YXIgb3B0aW9ucyA9ICQucGFyc2VKU09OKCQodGhpcykuYXR0cigibmFtZSIpKTsKCQkJCSQoIiNyZW1vdmUtZmllbGQtZm9ybSA+IGZvcm0gaW5wdXRbbmFtZT0ney9saXRlcmFsfXskbW9kdWxlX2lkfXtsaXRlcmFsfXRhYl9rZXknXSIpCgkJCQkJLnZhbChvcHRpb25zLnRhYl9rZXkpOwoJCQkJJCgiI3JlbW92ZS1maWVsZC1mb3JtID4gZm9ybSBpbnB1dFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9ZmllbGRzZXRfa2V5J10iKQoJCQkJCS52YWwob3B0aW9ucy5maWVsZHNldF9rZXkpOwoJCQkJJCgiI3JlbW92ZS1maWVsZC1mb3JtID4gZm9ybSBpbnB1dFtuYW1lPSd7L2xpdGVyYWx9eyRtb2R1bGVfaWR9e2xpdGVyYWx9ZmllbGQnXSIpCgkJCQkJLnZhbChvcHRpb25zLmZpZWxkKTsKCQkJCSQoIiNyZW1vdmUtZmllbGQtZm9ybSIpLmRpYWxvZygib3BlbiIpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9KTsJCQogIHsvbGl0ZXJhbH0KCgl2YXIgcHJlZml4ID0gInskbW9kdWxlX2lkfSI7Cgl2YXIgb3B0aW9ucyA9ICd7Zm9yZWFjaCBmcm9tPSRmaWVsZF90eXBlcyBpdGVtPWZpZWxkX3R5cGV9PG9wdGlvbiB2YWx1ZT0ieyRmaWVsZF90eXBlLnR5cGV9Ij57JGZpZWxkX3R5cGUubGFiZWx9PC9vcHRpb24+ey9mb3JlYWNofSc7Cgl2YXIgZmllbGRfdHlwZXNfd2l0aF9vcHRpb25zID0gW3tmb3JlYWNoIG5hbWU9dHlwZXMgZnJvbT0kZmllbGRfdHlwZXNfd2l0aF9vcHRpb25zIGl0ZW09ZmllbGRfdHlwZX0ieyRmaWVsZF90eXBlfSJ7aWYgISRzbWFydHkuZm9yZWFjaC50eXBlcy5sYXN0fSwgey9pZn17L2ZvcmVhY2h9XTsKCXZhciBvcHRpb25zX2RlZmF1bHQgPSBbXTsKCXtmb3JlYWNoIGZyb209JGZpZWxkX3R5cGVzIGl0ZW09ZmllbGRfdHlwZX0KCW9wdGlvbnNfZGVmYXVsdFsneyRmaWVsZF90eXBlLnR5cGV9J10gPSAne2lmIGlzc2V0KCRmaWVsZF90eXBlLm9wdGlvbnNfZGVmYXVsdCl9eyRmaWVsZF90eXBlLm9wdGlvbnNfZGVmYXVsdH17L2lmfSc7Cgl7L2ZvcmVhY2h9Cgl7bGl0ZXJhbH0KCSQoJyNmaWVsZHMgYS5maWVsZF9yZW1vdmUnKS5jbGljayhmdW5jdGlvbigpIHsKCQkkKHRoaXMpLnBhcmVudHMoJ2Zvcm0nKS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrcHJlZml4KydkZWxldGVfZmllbGRzW10iIHZhbHVlPSInICsgJCh0aGlzKS5wYXJlbnRzKCJ0cjpmaXJzdCIpLmZpbmQoJy5maWVsZF9uYW1lJykudmFsKCkgKyAnIiAvPicpOwoJCSQodGhpcykucGFyZW50cygidHI6Zmlyc3QiKS5yZW1vdmUoKTsKCQlyZXR1cm4gZmFsc2U7Cgl9KTsKCXZhciBpID0gJCgiI2ZpZWxkcyB0ciIpLmxlbmd0aDsKCSQoIiNmaWVsZF9hZGQiKS5jbGljayhmdW5jdGlvbigpIHsKCQkkKCc8dHI+PHRkIHdpZHRoPSIzMiIgY29sc3Bhbj0iMiI+PC90ZD48dGQ+PCEtLTxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJytwcmVmaXgrJ2V4dHJhX2ZpZWxkc1snK2krJ11bbGFiZWxdIiBuYW1lPSInK3ByZWZpeCsnZXh0cmFfZmllbGRzWycraSsnXVtsYWJlbF0iIHNpemU9IjMwIiAvPi0tPjwvdGQ+PHRkIHdpZHRoPSIzMDAiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IicrcHJlZml4KydleHRyYV9maWVsZHNbJytpKyddW25ld10iIHZhbHVlPSIxIiAvPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJytwcmVmaXgrJ2V4dHJhX2ZpZWxkc1snK2krJ11bbmFtZV0iIG5hbWU9IicrcHJlZml4KydleHRyYV9maWVsZHNbJytpKyddW25hbWVdIiBzaXplPSIzMCIgLz48L3RkPjx0ZD48c2VsZWN0IGlkPSInK3ByZWZpeCsnZXh0cmFfZmllbGRzWycraSsnXVt0eXBlXSIgbmFtZT0iJytwcmVmaXgrJ2V4dHJhX2ZpZWxkc1snK2krJ11bdHlwZV0iIGNsYXNzPSJmaWVsZF90eXBlIj4nICsgb3B0aW9ucyArICc8L3NlbGVjdD48L3RkPjx0ZD48c3BhbiBjbGFzcz0iZmllbGRfb3B0aW9ucyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iJytwcmVmaXgrJ2V4dHJhX2ZpZWxkc1snK2krJ11bb3B0aW9uc10iIG5hbWU9IicrcHJlZml4KydleHRyYV9maWVsZHNbJytpKyddW29wdGlvbnNdIiBzaXplPSIzMCIgLz48L3NwYW4+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PC90ZD48dGQ+PGEgaHJlZj0iIyIgY2xhc3M9ImZpZWxkX3JlbW92ZSI+ey9saXRlcmFsfXsqUmVtb3ZlIGZpZWxkKn17JHJlbW92ZV9pY29ufXtsaXRlcmFsfTwvYT48L3RkPjwvdHI+JykKCQkJLmZpbmQoInNlbGVjdC5maWVsZF90eXBlIikuY2hhbmdlKGZ1bmN0aW9uKCkgewoJCQkJaWYgKCQuaW5BcnJheSgkKHRoaXMpLnZhbCgpLCBmaWVsZF90eXBlc193aXRoX29wdGlvbnMpICE9IC0xKSB7CgkJCQkJJCh0aGlzKS5wYXJlbnRzKCJ0cjpmaXJzdCIpLmZpbmQoInNwYW4uZmllbGRfb3B0aW9ucyIpLmZpbmQoIjppbnB1dCIpLnZhbChvcHRpb25zX2RlZmF1bHRbJCh0aGlzKS52YWwoKV0pLmVuZCgpLmNzcygiZGlzcGxheSIsICJpbmxpbmUiKTsKCQkJCX0gZWxzZSB7CgkJCQkJJCh0aGlzKS5wYXJlbnRzKCJ0cjpmaXJzdCIpLmZpbmQoInNwYW4uZmllbGRfb3B0aW9ucyIpLmNzcygiZGlzcGxheSIsICJub25lIik7CgkJCQl9CgkJCX0pCgkJCS5lbmQoKQoJCQkuZmluZCgiYS5maWVsZF9yZW1vdmUiKS5jbGljayhmdW5jdGlvbigpIHsKCQkJCSQodGhpcykucGFyZW50cygidHI6Zmlyc3QiKS5yZW1vdmUoKTsKCQkJCXJldHVybiBmYWxzZTsKCQkJfSkKCQkJLmVuZCgpCgkJCS5hcHBlbmRUbygiI2ZpZWxkcyIpOwoJCWkrKzsKCQlyZXR1cm4gZmFsc2U7Cgl9KTsKCXsvbGl0ZXJhbH0Ke3JkZWxpbX0pKGpRdWVyeSk7Cjwvc2NyaXB0PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogIChmdW5jdGlvbigkKSB7bGRlbGltfQoJICB2YXIgcHJlZml4ID0gInskbW9kdWxlX2lkfSI7CgkgIHZhciBvcHRpb25zID0gJ3tmb3JlYWNoIGZyb209JGZpbHRlcl90eXBlcyBpdGVtPWZpbHRlcl90eXBlfTxvcHRpb24gdmFsdWU9InskZmlsdGVyX3R5cGUudHlwZX0iPnskZmlsdGVyX3R5cGUubGFiZWx9PC9vcHRpb24+ey9mb3JlYWNofSc7CgkgIHtsaXRlcmFsfQoJICAKCSAgJCgiYS5maWx0ZXJfcmVtb3ZlIikuY2xpY2soZnVuY3Rpb24oKSB7CgkJICAkKHRoaXMpLnBhcmVudHMoInAuZmlsdGVyc19pdGVtIikucmVtb3ZlKCk7CgkJICByZXR1cm4gZmFsc2U7CgkgIH0pOwoJICAKCSAgdmFyIGkgPSAkKCIjZmlsdGVycyBwLmZpbHRlcnNfaXRlbSIpLmxlbmd0aCsxOwoJICAKCSAgJCgiI2ZpbHRlcl9hZGQiKS5idXR0b24oKS5jbGljayhmdW5jdGlvbigpIHsKCQkgICQoJzxwIGNsYXNzPSJmaWx0ZXJzX2l0ZW0iPjxsYWJlbCBmb3I9IicrcHJlZml4KydmaWx0ZXJzXycraSsnX25hbWUiPk5hbWU6PC9sYWJlbD4gPGlucHV0IHR5cGU9InRleHQiIGlkPSInK3ByZWZpeCsnZmlsdGVyc18nK2krJ19uYW1lIiBuYW1lPSInK3ByZWZpeCsnZmlsdGVyc1snK2krJ11bbmFtZV0iIHNpemU9IjMwIiAvPiBGaWVsZDogPGlucHV0IHR5cGU9InRleHQiIGlkPSInK3ByZWZpeCsnZmlsdGVyc1snK2krJ11bZmllbGRdIiBuYW1lPSInK3ByZWZpeCsnZmlsdGVyc1snK2krJ11bZmllbGRdIiBzaXplPSIxMCIgLz4gPGxhYmVsIGZvcj0iJytwcmVmaXgrJ2ZpbHRlcnNbJytpKyddW3R5cGVdIj5UeXBlOjwvbGFiZWw+IDxzZWxlY3QgaWQ9IicrcHJlZml4KydmaWx0ZXJzWycraSsnXVt0eXBlXSIgbmFtZT0iJytwcmVmaXgrJ2ZpbHRlcnNbJytpKyddW3R5cGVdIiBjbGFzcz0iZmlsdGVyX3R5cGUiPicgKyBvcHRpb25zICsgJzwvc2VsZWN0PiA8YSBocmVmPSIjIiBjbGFzcz0iZmlsdGVyX3JlbW92ZSI+UmVtb3ZlIGZpbHRlcjwvYT48L3A+JykKCQkJLmZpbmQoImEuZmlsdGVyX3JlbW92ZSIpLmNsaWNrKGZ1bmN0aW9uKCkgewoJCQkJJCh0aGlzKS5wYXJlbnRzKCJwLmZpbHRlcnNfaXRlbSIpLnJlbW92ZSgpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9KQoJCQkuZW5kKCkKCQkJLmFwcGVuZFRvKCIjZmlsdGVycyIpOwoJCSAgaSsrOwoJCSAgcmV0dXJuIGZhbHNlOwoJICB9KTsKCSAgey9saXRlcmFsfQogIHtyZGVsaW19KShqUXVlcnkpOwo8L3NjcmlwdD4=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPkFjY2VzcyBEZW5pZWQ8L2gzPgo8cD5Zb3UgZG8gbm90IGhhdmUgc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIG1hbmFnZSB0aGlzIG1vZHVsZS48L3A+Cg==]]></data>
	</file>
</module>
