<?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>SEOTools2</name>
	<version>1.0.10</version>
  <mincmsversion>1.9.2</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlNFT1Rvb2xzMiBoZWxwcyB5b3UgdG8gZ2V0IHlvdXIgU0VPIChTZWFyY2ggRW5naW5lIE9wdGltaXphdGlvbikgcmlnaHQuIFRoZSBtb2R1bGUgYWRkcyBzZXZlcmFsIFNFTyBjYXBhYmlsaXRpZXMgdG8geW91ciBDTVNNUyBpbnN0YWxsYXRpb24gYW5kIGFsZXJ0cyB5b3UgaWYgeW91IG1pc3NlZCBvdXQgb24gc29tZXRoaW5nIFNFTyByZWxhdGVkLiBDdXJyZW50bHksIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDo8L3A+Cjx1bD4KPGxpPi0gZ2VuZXJhdGVzIE1ldGEgdGFncyBpbiBzdGFuZGFyZCBodG1sLCBEdWJsaW4gQ29yZSBhbmQgT3BlbkdyYXBoIGZvcm1hdHM8L2xpPgo8bGk+LSBhdXRvbWF0aWNhbGx5IGV4dHJhY3RzIGtleXdvcmRzIGZyb20geW91ciBwYWdlcyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBtZXRhIHRhZ3MgYW5kIHBhZ2UgdGl0bGU8L2xpPgo8bGk+LSBsZXRzIHlvdSBkZXRlcm1pbmUgd2l0aCBhIHNpbmdsZSBjbGljayB3aGV0aGVyIGNlcnRhaW4gcGFnZXMgc2hvdWxkIGJlIGluZGV4ZWQgYnkgc2VhcmNoIGVuZ2luZXMgb3Igbm90PC9saT4KPGxpPi0gZ2VuZXJhdGVzIGEgc2l0ZW1hcC54bWwgZmlsZSB3aXRoIHlvdXIgcGFnZXMgd2hpbGUgZ2l2aW5nIHlvdSBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgcHJpb3JpdGllcyBvZiB5b3VyIHBhZ2VzPC9saT4KPGxpPi0gZ2VuZXJhdGVzIGEgcm9ib3RzLnR4dCBmaWxlIGV4cGxpY2l0bHkgZGlzYWxsb3dpbmcgYWNjZXNzIHRvIHBhZ2VzIHlvdSBkb24ndCB3YW50IHRvIGJlIGluZGV4ZWQ8L2xpPgo8bGk+LSBhbGVydHMgeW91IHdoZW4gdGhlcmUgYXJlIHNldmVyYWwgcGFnZXMgZmVhdHVyaW5nIHRoZSBzYW1lIHBhZ2UgdGl0bGVzIGFuZCBkZXNjcmlwdGlvbnM8L2xpPgo8bGk+LSBhbGVydHMgeW91IHdoZW4gdmVyeSBzaG9ydCBwYWdlIG1ldGEgZGVzY3JpcHRpb25zIGFyZSBkZXRlY3RlZDwvbGk+CjxsaT4tIGF1dG9tYXRpY2FsbHkgc3VibWl0cyB5b3VyIHNpdGVtYXAgZmlsZSB0byBHb29nbGUgd2hlbiB5b3UgY2hhbmdlIHlvdXIgY29udGVudDwvbGk+CjwvdWw+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5GaXJzdCwgb3BlbiBhbGwgdGVtcGxhdGVzIHdoZXJlIHlvdSB3YW50IGRvIHVzZSBTRU9Ub29sczIuIFJlbW92ZSB0aGUgY29tcGxldGUgJmx0O3RpdGxlJmd0OyB0YWcgYW5kIHRoZSB7bWV0YWRhdGF9IHRhZyAoZXZlbiBpZiBpdCBzYXlzIHRvIG5ldmVyIHJlbW92ZSBpdCkgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZSB0YWc8L3A+CjxwcmU+CntTRU9Ub29sczJ9CjwvcHJlPjxiciAvPgo8cD5OZXh0LCBhdCB0aGUgYm90dG9tIG9mIHlvdXIgdGVtcGxhdGUgKGFmdGVyIHRoZSBjbG9zaW5nICZsdDsvYm9keSZndDsgdGFnKSwgaW5zZXJ0IHRoZSBmb2xsb3dpbmcgY29kZTo8L3A+CjxwcmU+CntjYXB0dXJlIGFzc2lnbj0ibWV0YWRlc2NyaXB0aW9uIn17Y29udGVudCBibG9jaz0ibWV0YWRlc2NyaXB0aW9uIiBsYWJlbD0iUGFnZSBEZXNjcmlwdGlvbiIgb25lbGluZT0idHJ1ZSJ9ey9jYXB0dXJlfQo8L3ByZT48YnIgLz4KPHA+VGhpcyBpcyB3aGVyZSB5b3UnbGwgZW50ZXIgYSBzaG9ydCBwYWdlIGRlc2NyaXB0aW9uIChvbmUgb3IgdHdvIHNlbnRlbmNlcykgdGhhdCB3aWxsIGFwcGVhciBpbiB0aGUgc2VhcmNoIGVuZ2luZSdzIHJlc3VsdHMgYW5kIGlmLCBmb3IgZXhhbXBsZSwgc29tZW9uZSBzaGFyZXMgYSBsaW5rIHRvIHlvdXIgcGFnZSBvbiBmYWNlYm9vay48L3A+CjxwPk5vdywgdmlzaXQgdGhlIHNldHRpbmdzIHRhYnMgZm9yIHBhZ2UgdGl0bGUgJiBtZXRhIGluZm9ybWF0aW9uLCB0aGUgc2l0ZW1hcCAmIGNyYXdsZXIgc2V0dGluZ3MgYW5kIHRoZSBrZXl3b3JkIGdlbmVyYXRvciBzZXR0aW5ncyBhbmQgZmlsbCBpbiBhbGwgcmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIHlvdXIgcGFnZS4gVW5kZXIgIk5hbWUgb2YgcGFnZSBkZXNjcmlwdGlvbiBjb250ZW50IGJsb2NrIiB5b3UgbmVlZCB0byBlbnRlciB0aGUgbmFtZSBvZiB0aGUgY29udGVudCBibG9jayB5b3UganVzdCBhZGRlZCB0byB5b3VyIHRlbXBsYXRlcyAoIlBhZ2UgRGVzY3JpcHRpb24iIGluIG91ciBleGFtcGxlKS4gVGhlIHRhYiAiU0VPIEFsZXJ0cyIgd2lsbCBhbGVydCB5b3UgaWYgaXQgZGV0ZWN0cyBhbnl0aGluZyB0aGF0IGlzIHJlcXVpcmVkIGJ1dCBub3QgYWN0aXZhdGVkIG9yIGZpbGxlZCBpbi4gWW91IHNob3VsZCBhbHNvIGNvbnNpZGVyIHNpZ25pbmcgdXAgeW91cgpzaXRlIHdpdGggR29vZ2xlIFdlYm1hc3RlciB0b29scy4gVGhlcmUsIHNlbGVjdCAiTWV0YSB0YWcgdmFsaWRhdGlvbiIgYW5kIHBhc3RlIHRoZSB2ZXJpZmljYXRpb24gY29kZSAocXVpdGUgYSBsb25nIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGFuZCBudW1iZXJzKSBpbnRvIHRoZSBib3ggIlZlcmlmaWNhdGlvbiBDb2RlIiBpbiAiU0VPIFNldHRpbmdzIiB0byBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGF0IHlvdSBhcmUgcmVhbGx5CnRoZSBvd25lciBvZiB5b3VyIHBhZ2UgKG5vIG5lZWQgdG8gcGFzdGUgdGhlIEdvb2dsZSBNZXRhLWNvZGUgaW50byB5b3VyIHRlbXBsYXRlKS48L3A+CjxwPkFzIHNvb24gYXMgZXZlcnl0aGluZyBpcyBzZXQgdXAsIGxvb2sgYXQgdGhlICJTRU8gQWxlcnRzIiB0YWIgYW5kIGZpeCBhbGwgcHJvYmxlbXMgZGV0ZWN0ZWQgaGVyZS4gVGFrZSBjYXJlIHRvIGluc2VydCBhICh1bmlxdWUpIHBhZ2UgZGVzY3JpcHRpb24gb24gZXZlcnkgcGFnZSB5b3UgZWRpdCBpbiB0aGUgZmllbGQgIlBhZ2UgRGVzY3JpcHRpb24iIGF0IHRoZSBib3R0b20gb2YgeW91ciAiRWRpdCBQYWdlIiBmb3JtLjwvcD4KPHA+VG8gc2V0IHlvdXIgb3duIGtleXdvcmRzIChpbnN0ZWFkIG9mIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBvbmVzKSBvciBPcGVuR3JhcGggdHlwZSBmb3IgY2VydGFpbiBwYWdlcywgdmlzaXQgdGhlICJQYWdlIHNldHRpbmdzIiB0YWIgd2hlcmUgeW91J2xsIGZpbmQgYSBsaXN0IG9mIGFsbCBwYWdlcyB5b3UgaGF2ZSBpbiB5b3VyIHN5c3RlbS4gVGhlcmUsIHlvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIHNpdGVtYXAgcHJpb3JpdHkgKHdoaWNoIGlzIGF1dG8tY2FsY3VsYXRlZCBieSBkZWZhdWx0KSBvZiBhIHBhZ2UgdG8gaW5kaWNhdGUgdGhhdCBpdCBzaG91bGQKYmUgY29uc2lkZXJlZCBtb3JlIGltcG9ydGFudCBmb3Igc2VhcmNoIGVuZ2luZSBtYXRjaGVzIG9uIHlvdXIgcGFnZSBvciBleGNsdWRlIGNlcnRhaW4gcGFnZXMgZnJvbSB0aGUgc2VhcmNoIGluZGV4LjwvcD4KPHA+U0VPVG9vbHMyIHdpbGwgYWxzbyBhdXRvbWF0aWNhbGx5IGluc2VydCBhIGxpbmsgdG8gdGhlIGltYWdlIHRvIGJlIHVzZWQgYXMgdGhlIG1haW4gaW1hZ2Ugb2YgeW91ciBwYWdlIGlmIHlvdSBzZWxlY3QgYW4gIkltYWdlIiBmb3IgdGhlIHBhZ2UgZnJvbSB3aXRoaW4geW91ciBwYWdlJ3MgIk9wdGlvbnMiIHRhYiAodGhpcyBpcyBpbXBvcnRhbnQgZm9yIHBlb3BsZSBzdWJtaXR0aW5nIGEgbGluayB0byB5b3VyIHBhZ2UgZS5nLiBvbiBmYWNlYm9vaykuIEFsc28sIGlmIHlvdSBhcmUgdXNpbmcgT3BlbkdyYXBoLCB0aGUgaW1hZ2Ugc2VsZWN0ZWQgaGVyZQp3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0IE9wZW5HcmFwaCBpbWFnZSB5b3Ugc3BlY2lmaWVkIGZyb20gd2l0aGluICJTRU8gU2V0dGluZ3MiLiBQbGVhc2UgYmUgYXdhcmUgdGhhdCB5b3UgbmVlZCB0byB1cGxvYWQgdGhvc2UgaW1hZ2VzIHRvIHlvdXIgL3VwbG9hZHMvaW1hZ2VzIGRpcmVjdG9yeS48L3A+CjxoMz5DYW4gSSB1c2Ugc21hcnR5IHZhcmlhYmxlcz88L2gzPgo8cD5Zb3UgY2FuIHVzZSBhbGwgc21hcnR5IHZhcmlhYmxlcyBhbmQgVURUcyB3aXRoaW4gdGhlIHNldHRpbmdzIGZpZWxkcyA8aT5QYWdlIHRpdGxlPC9pPiwgPGk+TWV0YSBwYWdlIHRpdGxlPC9pPiwgPGk+QXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZGVzY3JpcHRpb25zPC9pPiBhbmQgPGk+QWRkaXRpb25hbCBtZXRhIHRhZ3M8L2k+LiBFbnRlciA8Y29kZT57ZGVidWd9PC9jb2RlPiB0byBzZWUgYSBsaXN0IG9mIGFsbCBhdmFpbGFibGUgdmFyaWFibGVzLjwvcD4KPGgzPldoaWNoIHNtYXJ0eSB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkIGJ5IFNFT1Rvb2xzMj88L2gzPgo8Y29kZT57JHNlb19rZXl3b3Jkc308L2NvZGU+OiBBIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsbCBrZXl3b3JkcyBzZXQgZm9yIHRoZSBwYWdlIChpbmNsdWRpbmcgdGhlIGRlZmF1bHQga2V5d29yZHMpPGJyIC8+Cjxjb2RlPnskdGl0bGVfa2V5d29yZHN9PC9jb2RlPjogQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGwga2V5d29yZHMgc2V0IGZvciB0aGUgcGFnZSAoaW5jbHVkaW5nIHRoZSBkZWZhdWx0IGtleXdvcmRzKTxiciAvPgo8Y29kZT57JGRlZmF1bHRfa2V5d29yZHN9PC9jb2RlPjogQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGwgZGVmYXVsdCBrZXl3b3JkczxiciAvPgo8Y29kZT57JHBhZ2Vfa2V5d29yZHN9PC9jb2RlPjogQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBhbGwga2V5d29yZHMgc2V0IGZvciB0aGUgcGFnZSAod2l0aG91dCB0aGUgZGVmYXVsdCBrZXl3b3JkcykKPGgzPlN1cHBvcnQ8L2gzPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDEyLCBDbGlwIE1hZ2ljIDxhIGhyZWY9Im1haWx0bzphZG1pbkBjbGlwbWFnaWMuY29tLmF1Ij4mbHQ7YWRtaW5AY2xpcG1hZ2ljLmNvbS5hdSZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gc2hvd2Jhc2U9InRydWUiIC0gU2V0IHRoaXMgcGFyYW1ldGVyIHRvIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBzdXBwcmVzcyB0aGUgb3V0cHV0IG9mIHRoZSBiYXNlIGhyZWYgdGFnLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBDbGlwIE1hZ2ljICZsdDthZG1pbkBjbGlwbWFnaWMuY29tLmF1Jmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC4xMDxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPjx1bD4KPGxpPlZlcnNpb24gMS4wIC0gMjUgSmFudWFyeSAyMDEyLiBJbml0aWFsIHJlbGVhc2UuIFRoaXMgaXMgYSBmb3JrIG9mIHRoZSBTRU9Ub29scyBtb2R1bGUgd2l0aCBDTVNNUyAxLjEwKyBjb21wYXRpYmlsaXR5LiBDaGFuZ2VzIGluY2x1ZGU6Cgk8dWw+CgkJPGxpPlNldCBwcmVmZXJlbmNlcyBvbiBpbnN0YWxsPC9saT4KCQk8bGk+UmVtb3ZlIHByZWZlcmVuY2VzIG9uIHVuaW5zdGFsbDwvbGk+CgkJPGxpPlJlcGxhY2UgYWxsIHJlZmVyZW5jZSB0byBIaWVyYXJjaHlNYW5hZ2VyIG9iamVjdHMgd2l0aCBDb250ZW50T3BlcmF0aW9ucyBvYmplY3RzPC9saT4KCQk8bGk+R2VuZXJhdGUgYWxsIGtleXdvcmRzLCBrZXl3b3JkIHN1Z2dlc3Rpb25zLCBkZXNjcmlwdGlvbnMgYW5kIGRlZmF1bHQgZGVzY3JpcHRpb25zPC9saT4KCQk8bGk+R2VuZXJhdGUgc2l0ZW1hcC54bWwgYW5kIHJvYm90cy50eHQgZmlsZXM8L2xpPgoJCTxsaT5SZXRhaW4gY2hlY2tib3ggcHJlZmVyZW5jZSBzZXR0aW5ncyBhZnRlciBzdWJtaXQ8L2xpPgoJCTxsaT5PbiBmcm9udGVuZCBwYWdlIGxvYWQsIGVuc3VyZSB0aGF0IGEgY29ycmVzcG9uZGluZyByZWNvcmQgZXhpc3RzIGluIHRoZSBzZW90b29sczIgZGF0YWJhc2UgdGFibGU8L2xpPgoJPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4wLjEgLSAyNSBKYW51YXJ5IDIwMTIuIE1pbm9yIGJ1ZyBmaXg8L2xpPgo8bGk+VmVyc2lvbiAxLjAuMiAtIDEgRmVicnVhcnkgMjAxMi4gQnVnIGZpeDwvbGk+CjxsaT5WZXJzaW9uIDEuMC4zIC0gMSBGZWJydWFyeSAyMDEyLiBCdWcgZml4PC9saT4KPGxpPlZlcnNpb24gMS4wLjQgLSAxIEZlYnJ1YXJ5IDIwMTIuIENvcnJlY3Rpb248L2xpPgo8bGk+VmVyc2lvbiAxLjAuNSAtIDYgRmVicnVhcnkgMjAxMi4gQWRkIGV2ZW50IGhhbmRsZXJzIHRvIHB1c2ggc2l0ZW1hcCB0byBHb29nbGUgd2VibWFzdGVyczwvbGk+CjxsaT5WZXJzaW9uIDEuMC42IC0gNSBNYXJjaCAyMDEyLiBJbXByb3ZlZCBoYW5kbGluZyBvZiBzc2wgdXJscyBhbmQgYnVnIGZpeCB3aGVuIHRoZXJlIGFyZSBubyBzaG9ydCBtZXRhIGRlc2NyaXB0aW9uczwvbGk+CjxsaT5WZXJzaW9uIDEuMC43IC0gOSBBcHJpbCAyMDEyLiBCdWcgZml4PC9saT4KPGxpPlZlcnNpb24gMS4wLjggLSA5IEFwcmlsIDIwMTIuIEJ1ZyBmaXg8L2xpPgo8bGk+VmVyc2lvbiAxLjAuOSAtIDExIEFwcmlsIDIwMTIuCiAgICA8dWw+CiAgICAgICAgPGxpPk1vcmUgaW1wcm92ZW1lbnRzIHRvIHNzbCBoYW5kbGluZyBlc3BlY2lhbGx5IGluIHRoZSBzaXRlbWFwLnhtbCAodGhhbmtzIGFuZHJpZXNpbmZvc2Vydik8L2xpPgogICAgICAgIDxsaT5BYmlsaXR5IHRvIHNob3cgYW55IEFjdGl2ZSBwYWdlLCBub3QganVzdCBwYWdlcyB3aXRoIEFjdGl2ZSBhbmQgU2hvdyBJbiBNZW51IGluIHRoZSBzaXRlbWFwLnhtbCAodGhhbmtzIE1hdHQpPC9saT4KICAgIDwvdWw+CjxsaT5WZXJzaW9uIDEuMC4xMCAtIDI0IE1heSAyMDEyIC0gbW9zdGx5IGltcHJvdmVtZW50cyBpbiB0aGUgc2l0ZW1hcCBhcmVhLCBpZToKICAgIDx1bD4KICAgICAgICA8bGk+QWxsb3dzIHNpdGVtYXAgaW5kZXhpbmcgb2YgaW50ZXJuYWwgYW5kIGV4dGVybmFsIFVSTCBsaW5rczwvbGk+CiAgICAgICAgPGxpPkZpbHRlcnMgb3V0IEVycm9yIFBhZ2UgZnJvbSBzaXRlbWFwLnhtbDwvbGk+CiAgICA8L3VsPgo8L3VsPjxiciAvPg==]]></about>
	<description><![CDATA[Helps with SEO in general, automatically generating XML sitemaps and comprehensive meta descriptions]]></description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.changesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoIkVkaXQgU0VPIFNldHRpbmdzIikpCnsKICByZXR1cm4gJHRoaXMtPkRpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKfQoKLyogLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KCkNvZGUgZm9yIFNFT1Rvb2xzMiAiY2hhbmdlc2V0dGluZ3MiIGFkbWluIGFjdGlvbgogCi09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCiAKVHlwaWNhbGx5LCB0aGlzIHdpbGwgZGlzcGxheSBzb21ldGhpbmcgZnJvbSBhIHRlbXBsYXRlCm9yIGRvIHNvbWUgb3RoZXIgdGFzay4KIAoqLwoKLy8gUmVnZW5lcmF0ZSBTaXRlbWFwIGFuZCByb2JvdHMudHh0CmlmIChpc3NldCgkX1BPU1RbJ2RvX3JlZ2VuZXJhdGUnXSkpIHsKICAkdGhpcy0+Y3JlYXRlU2l0ZW1hcCgkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHVzaF9zaXRlbWFwJywxKSA9PSAxKTsKICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9yb2JvdHMnLDEpID09IDEpIHsKICAgICR0aGlzLT5jcmVhdGVSb2JvdHNUWFQoKTsKICB9CiAgJHRoaXMtPmF1ZGl0KCJUZXN0IiwiU0VPIFRvb2xzIiwiTWFudWFsbHkgcmVnZW5lcmF0ZWQgc2l0ZW1hcC54bWwgYW5kIHJvYm90cy50eHQiKTsKICAkdGhpcy0+UmVkaXJlY3QoJHRoaXMtPmlkLCAnZGVmYXVsdGFkbWluJywgJycsIEFycmF5KCdtZXNzYWdlJz0+J3NpdGVtYXBfcmVnZW5lcmF0ZWQnLCd0YWInPT4nc2l0ZW1hcHNldHRpbmdzJykpOwp9CgppZiAoaXNzZXQoJF9QT1NUWydzYXZlX21ldGFfc2V0dGluZ3MnXSkpIHsKICAkbWV0YV9zdGFuZGFyZCA9IGlzc2V0KCRfUE9TVFsnbWV0YV9zdGFuZGFyZCddKSA/IDEgOiAwOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX3N0YW5kYXJkJywkbWV0YV9zdGFuZGFyZCk7CgogICRtZXRhX2R1YmxpbmNvcmUgPSBpc3NldCgkX1BPU1RbJ21ldGFfZHVibGluY29yZSddKSA/IDEgOiAwOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX2R1YmxpbmNvcmUnLCRtZXRhX2R1YmxpbmNvcmUpOwoKICAkbWV0YV9vcGVuZ3JhcGggPSBpc3NldCgkX1BPU1RbJ21ldGFfb3BlbmdyYXBoJ10pID8gMSA6IDA7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoJywkbWV0YV9vcGVuZ3JhcGgpOwoKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnYWRkaXRpb25hbF9tZXRhX3RhZ3MnLCRfUE9TVFsnYWRkaXRpb25hbF9tZXRhX3RhZ3MnXSk7CgogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX3B1Ymxpc2hlcicsJF9QT1NUWydtZXRhX3B1Ymxpc2hlciddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWV0YV9jb250cmlidXRvcicsJF9QT1NUWydtZXRhX2NvbnRyaWJ1dG9yJ10pOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX2NvcHlyaWdodCcsJF9QT1NUWydtZXRhX2NvcHlyaWdodCddKTsKCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfbG9jYXRpb24nLCRfUE9TVFsnbWV0YV9sb2NhdGlvbiddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWV0YV9yZWdpb24nLCRfUE9TVFsnbWV0YV9yZWdpb24nXSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfbGF0aXR1ZGUnLCRfUE9TVFsnbWV0YV9sYXRpdHVkZSddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWV0YV9sb25naXR1ZGUnLCRfUE9TVFsnbWV0YV9sb25naXR1ZGUnXSk7CgogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF90aXRsZScsJF9QT1NUWydtZXRhX29wZW5ncmFwaF90aXRsZSddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfdHlwZScsJF9QT1NUWydtZXRhX29wZW5ncmFwaF90eXBlJ10pOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZScsJF9QT1NUWydtZXRhX29wZW5ncmFwaF9zaXRlbmFtZSddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfaW1hZ2UnLCRfUE9TVFsnbWV0YV9vcGVuZ3JhcGhfaW1hZ2UnXSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FkbWlucycsJF9QT1NUWydtZXRhX29wZW5ncmFwaF9hZG1pbnMnXSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJywkX1BPU1RbJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJ10pOwoKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndGl0bGUnLCRfUE9TVFsndGl0bGUnXSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3RpdGxlX21ldGEnLCRfUE9TVFsndGl0bGVfbWV0YSddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYmxvY2snLCRfUE9TVFsnZGVzY3JpcHRpb25fYmxvY2snXSk7CgoKICAkZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZSA9IGlzc2V0KCRfUE9TVFsnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZSddKSA/IDEgOiAwOwoKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZScsJGRlc2NyaXB0aW9uX2F1dG9fZ2VuZXJhdGUpOwoKCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG8nLCRfUE9TVFsnZGVzY3JpcHRpb25fYXV0byddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9rZXl3b3JkcycsJF9QT1NUWydkZWZhdWx0X2tleXdvcmRzJ10pOwoKICAkdGhpcy0+YXVkaXQoIlRlc3QiLCJTRU8gVG9vbHMiLCJFZGl0ZWQgTWV0YSBzZXR0aW5ncyIpOwogICR0aGlzLT5SZWRpcmVjdCgkdGhpcy0+aWQsICdkZWZhdWx0YWRtaW4nLCAnJywgQXJyYXkoJ21lc3NhZ2UnPT4nc2V0dGluZ3NfdXBkYXRlZCcsJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7Cn0KCmlmIChpc3NldCgkX1BPU1RbJ3NhdmVfc2l0ZW1hcF9zZXR0aW5ncyddKSkgewoKICAkY3JlYXRlX3NpdGVtYXAgPSBpc3NldCgkX1BPU1RbJ2NyZWF0ZV9zaXRlbWFwJ10pID8gMSA6IDA7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NyZWF0ZV9zaXRlbWFwJywkY3JlYXRlX3NpdGVtYXApOwoKICAkcHVzaF9zaXRlbWFwID0gaXNzZXQoJF9QT1NUWydwdXNoX3NpdGVtYXAnXSkgPyAxIDogMDsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHVzaF9zaXRlbWFwJywkcHVzaF9zaXRlbWFwKTsKCiAgJGNyZWF0ZV9yb2JvdHMgPSBpc3NldCgkX1BPU1RbJ2NyZWF0ZV9yb2JvdHMnXSkgPyAxIDogMDsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY3JlYXRlX3JvYm90cycsJGNyZWF0ZV9yb2JvdHMpOwoKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndmVyaWZpY2F0aW9uJywkX1BPU1RbJ3ZlcmlmaWNhdGlvbiddKTsKCiAgJHRoaXMtPmF1ZGl0KCJUZXN0IiwiU0VPIFRvb2xzIiwiRWRpdGVkIFNpdGVtYXAgc2V0dGluZ3MiKTsKICAkdGhpcy0+UmVkaXJlY3QoJHRoaXMtPmlkLCAnZGVmYXVsdGFkbWluJywgJycsIEFycmF5KCdtZXNzYWdlJz0+J3NldHRpbmdzX3VwZGF0ZWQnLCd0YWInPT4nc2l0ZW1hcHNldHRpbmdzJykpOwp9CgppZiAoaXNzZXQoJF9QT1NUWydzYXZlX2tleXdvcmRfc2V0dGluZ3MnXSkpIHsKCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2tleXdvcmRfbWlubGVuZ3RoJywkX1BPU1RbJ2tleXdvcmRfbWlubGVuZ3RoJ10pOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdrZXl3b3JkX3RpdGxlX3dlaWdodCcsJF9QT1NUWydrZXl3b3JkX3RpdGxlX3dlaWdodCddKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgna2V5d29yZF9kZXNjcmlwdGlvbl93ZWlnaHQnLCRfUE9TVFsna2V5d29yZF9kZXNjcmlwdGlvbl93ZWlnaHQnXSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2tleXdvcmRfaGVhZGxpbmVfd2VpZ2h0JywkX1BPU1RbJ2tleXdvcmRfaGVhZGxpbmVfd2VpZ2h0J10pOwogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0JywkX1BPU1RbJ2tleXdvcmRfY29udGVudF93ZWlnaHQnXSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2tleXdvcmRfbWluaW11bV93ZWlnaHQnLCRfUE9TVFsna2V5d29yZF9taW5pbXVtX3dlaWdodCddKTsKCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2tleXdvcmRfZXhjbHVkZScsJF9QT1NUWydrZXl3b3JkX2V4Y2x1ZGUnXSk7CgoKCiAgJHRoaXMtPmF1ZGl0KCJUZXN0IiwiU0VPIFRvb2xzIiwiRWRpdGVkIEtleXdvcmQgc2V0dGluZ3MiKTsKICAkdGhpcy0+UmVkaXJlY3QoJHRoaXMtPmlkLCAnZGVmYXVsdGFkbWluJywgJycsIEFycmF5KCdtZXNzYWdlJz0+J3NldHRpbmdzX3VwZGF0ZWQnLCd0YWInPT4na2V5d29yZHNldHRpbmdzJykpOwp9CgovLyBEbyBldmVudHMKJHRoaXMtPlNlbmRFdmVudCgnUHJlZnNVcGRhdGVkJywkX1BPU1QpOwoKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.default-orig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQovKiAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQ0KDQogICBDb2RlIGZvciBTRU9Ub29sczIgImRlZmF1bHQiIGFjdGlvbg0KDQogICAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQ0KICAgDQogICBUeXBpY2FsbHksIHRoaXMgd2lsbCBkaXNwbGF5IHNvbWV0aGluZyBmcm9tIGEgdGVtcGxhdGUNCiAgIG9yIGRvIHNvbWUgb3RoZXIgdGFzay4NCiAgIA0KKi8NCg0KLy8gR2V0IHBhZ2UgZGF0YQ0KJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOw0KJGRiID0mIGNtc21zKCktPkdldERiKCk7DQokY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQoNCiRyb290X3VybCA9IGVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSA/ICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10gOiAkZ0Ntcy0+Y29uZmlnWydzc2xfdXJsJ107DQoNCi8vIEZpcnN0IHVwLCB3ZSBkbyBzb21lIGRhdGFiYXNlIG1haW50ZW5hbmNlDQovLyBFbnN1cmUgYWxsIHRoZSBhY3RpdmUgcGFnZXMgYXJlIGluIHRoZSBzZW90b29sczIgZGF0YWJhc2UNCiRxdWVyeSA9ICdTRUxFQ1QgYGNvbnRlbnRfaWRgIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnQgV0hFUkUgYHR5cGVgIExJS0UgIiVjb250ZW50JSIgQU5EIGBjb250ZW50X2lkYCBOT1QgSU4gKFNFTEVDVCBgY29udGVudF9pZGAgRlJPTSAnIC4gY21zX2RiX3ByZWZpeCgpLiAnbW9kdWxlX3Nlb3Rvb2xzMiknOw0KaWYgKCEkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSkpIHsNCiAgZWNobyAiPGJyIC8+UHJvYmxlbSB3aXRoIHRoZSBkYXRhYmFzZSEgUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLiI7DQogIGRpZTsNCn0NCg0KaWYgKCRyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKSB7DQovLyBPSyB3ZSBoYXZlIHNvbWUgbmV3IHBhZ2VzDQoJJHEyID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFNFVCBjb250ZW50X2lkID0gPywgaW5kZXhhYmxlID0gPyc7DQoJd2hpbGUgKCRvbmVfcGFnZSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsNCgkJJGRiLT5FeGVjdXRlKCRxMixhcnJheSgkb25lX3BhZ2VbJ2NvbnRlbnRfaWQnXSwxKSk7DQoJfQ0KfQ0KDQovLyBOb3cgY2hlY2sgdGhhdCB3ZSBoYXZlIHJlbW92ZWQgZnJvbSBzZW90b29sczIgYW55IHBhZ2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQNCiRxdWVyeSA9ICdTRUxFQ1QgYGNvbnRlbnRfaWRgIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgV0hFUkUgYGNvbnRlbnRfaWRgIE5PVCBJTiAoU0VMRUNUIGBjb250ZW50X2lkYCBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkuICdjb250ZW50KSc7DQppZiAoISRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KSkgew0KCWVjaG8gIjxiciAvPlByb2JsZW0gd2l0aCB0aGUgZGF0YWJhc2UhIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4iOw0KCWRpZTsNCn0NCmlmICgkcmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkgew0KLy8gT0sgd2UgaGF2ZSBzb21lIGRlbGV0ZWQgcGFnZXMNCgkkcTMgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgV0hFUkUgY29udGVudF9pZCA9ID8nOw0KCXdoaWxlICgkb25lX3BhZ2UgPSAkcmVzdWx0LT5mZXRjaFJvdygpKSB7DQoJCSRkYi0+RXhlY3V0ZSgkcTMsYXJyYXkoJG9uZV9wYWdlWydjb250ZW50X2lkJ10sMSkpOw0KCX0NCn0NCg0KLy8gTGFzdGx5LCBlbnN1cmUgdGhhdCBhbGwgaW5hY3RpdmUgcGFnZXMgYXJlIG1hcmtlZCBhcyBub3QgaW5kZXhhYmxlIGluIHNlb3Rvb2xzMg0KJHF1ZXJ5ID0gJ1NFTEVDVCBjb250ZW50X2lkIEZST00gJyAuIGNtc19kYl9wcmVmaXgoKSAuICdjb250ZW50IFdIRVJFIGFjdGl2ZSA9IDAnOw0KaWYgKCEkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSkpIHsNCgllY2hvICI8YnIgLz5Qcm9ibGVtIHdpdGggdGhlIGRhdGFiYXNlISBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuIjsNCglkaWU7DQp9DQoNCmlmICgkcmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkgew0KLy8gT0sgd2UgaGF2ZSB0byBwcmV2ZW50IHRoZSBpbmFjdGl2ZSBwYWdlcyBmcm9tIGJlaW5nIGluZGV4ZWQuDQoJJHE0ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBTRVQgaW5kZXhhYmxlID0gMCBXSEVSRSBjb250ZW50X2lkID0gPyc7DQoJd2hpbGUgKCRvbmVfcGFnZSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsNCgkJJGRiLT5FeGVjdXRlKCRxNCxhcnJheSgkb25lX3BhZ2VbJ2NvbnRlbnRfaWQnXSkpOw0KCX0NCn0NCg0KLy8gUGhldywgdGhhdCdzIGFsbCBkb25lIHNvIHdlIGNhbiBtb3ZlIG9uIHRvIHRoZSByZWFsIGJ1c2luZXNzIG9mIHRoZSBkYXkNCg0KJHRwbF92YXJzID0gJHNtYXJ0eS0+Z2V0X3RlbXBsYXRlX3ZhcnMoKTsNCiRjdXJjb250ZW50ID0gJHRwbF92YXJzWydjb250ZW50X29iaiddOw0KDQokcGFnZV91cmwgPSAkY3VyY29udGVudC0+R2V0VVJMKCk7DQokcGFnZV9pZCA9ICRjdXJjb250ZW50LT5JZCgpOw0KDQokbW9kaWZpZWRfZGF0ZSA9ICRjdXJjb250ZW50LT5nZXRNb2RpZmllZERhdGUoKTsNCiRtb2RpZmllZF9kYXRlID0gZGF0ZSgnWS1tLWRcVEg6aTpzUCcsJG1vZGlmaWVkX2RhdGUpOw0KDQovLyBLZXl3b3JkIGdlbmVyYXRvcg0KJGtleXdvcmRzID0gZXhwbG9kZSgnICcsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfa2V5d29yZHMnLCcnKSk7DQoNCg0KJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgV0hFUkUgY29udGVudF9pZCA9ID8nOw0KaWYgKCEkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkcGFnZV9pZCkpKSB7DQogIGVjaG8gIlByb2JsZW0gd2l0aCB0aGUgZGF0YWJhc2UhIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4iOw0KICBkaWU7DQp9DQoNCiRwYWdlX2luZm8gPSAkcmVzdWx0LT5GZXRjaFJvdygpOw0KDQppZiAoJHBhZ2VfaW5mb1sna2V5d29yZHMnXSAhPSAiIikgew0KCSRvdGhlcl9rZXl3b3JkcyA9IGFycmF5X2ZsaXAoZXhwbG9kZSgnICcsJHBhZ2VfaW5mb1sna2V5d29yZHMnXSkpOw0KfWVsc2V7DQoJJG90aGVyX2tleXdvcmRzID0gJHRoaXMtPmdldEtleXdvcmRTdWdnZXN0aW9ucygkcGFnZV9pZCk7DQp9DQoNCiRzZW9fa2V5d29yZHMgPSBpbXBsb2RlKCcsICcsYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRrZXl3b3JkcywgYXJyYXlfZmxpcCgkb3RoZXJfa2V5d29yZHMpKSkpOw0KJHNtYXJ0eS0+YXNzaWduKCdzZW9fa2V5d29yZHMnLCAkc2VvX2tleXdvcmRzKTsNCiR0aXRsZV9rZXl3b3JkcyA9IGltcGxvZGUoJyAnLGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgka2V5d29yZHMsIGFycmF5X2ZsaXAoJG90aGVyX2tleXdvcmRzKSkpKTsNCiRzbWFydHktPmFzc2lnbigndGl0bGVfa2V5d29yZHMnLCAkdGl0bGVfa2V5d29yZHMpOw0KJHNtYXJ0eS0+YXNzaWduKCdkZWZhdWx0X2tleXdvcmRzJywgaW1wbG9kZSgnICcsICRrZXl3b3JkcykpOw0KJHNtYXJ0eS0+YXNzaWduKCdwYWdlX2tleXdvcmRzJywgaW1wbG9kZSgnICcsIGFycmF5X2ZsaXAoJG90aGVyX2tleXdvcmRzKSkpOw0KDQovLyBQYWdlIGRlc2NyaXB0aW9uDQokZGVzY3JpcHRpb25faWQgPSBzdHJfcmVwbGFjZSgnICcsJ18nLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9ibG9jaycsJycpKTsNCiRkZXNjcmlwdGlvbiA9IHN0cmlwX3RhZ3MoJGN1cmNvbnRlbnQtPkdldFByb3BlcnR5VmFsdWUoJGRlc2NyaXB0aW9uX2lkKSk7DQoNCmlmICgoJGRlc2NyaXB0aW9uID09ICIiKSAmJiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG9fZ2VuZXJhdGUnLDEpID09IDEpKSB7DQogICRrdyA9IGFycmF5X2ZsaXAoJG90aGVyX2tleXdvcmRzKTsNCiAgJGxhc3Rfa2V5d29yZCA9IGFycmF5X3BvcCgka3cpOw0KICAka2V5d29yZHMgPSBpbXBsb2RlKCcsICcsJGt3KSAuICIgIiAuICR0aGlzLT5sYW5nKCdhbmQnKSAuICIgIiAuICRsYXN0X2tleXdvcmQ7DQogICRkZXNjcmlwdGlvbiA9IHN0cl9yZXBsYWNlKCd7a2V5d29yZHN9Jywka2V5d29yZHMsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG8nLCcnKSk7DQogICRkZXNjcmlwdGlvbiA9IHN0cl9yZXBsYWNlKCd7dGl0bGV9JywkY3VyY29udGVudC0+TmFtZSgpLCRkZXNjcmlwdGlvbik7DQogICRkZXNjcmlwdGlvbiA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkZGVzY3JpcHRpb24pOw0KfQ0KDQovLyBTaG93IGJhc2U/DQppZiAoaXNzZXQoJHBhcmFtc1snc2hvd2Jhc2UnXSkgJiYgJHBhcmFtc1snc2hvd2Jhc2UnXSAhPSAnZmFsc2UnKSB7DQoJICAgIGVjaG8gIjxiYXNlIGhyZWY9JyIuJHJvb3RfdXJsLiIvJyAvPlxuIjsNCn0NCg0KDQovLyBQYWdlIHRpdGxlDQokdGl0bGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGl0bGUnLCd7dGl0bGV9IHwge3NpdGVuYW1lfSAtIHtzZW9fa2V5d29yZHN9Jyk7DQokdGl0bGUgPSBzdHJfcmVwbGFjZSgne3RpdGxlfScsJGN1cmNvbnRlbnQtPk5hbWUoKSwkdGl0bGUpOw0KJHRpdGxlID0gc3RyX3JlcGxhY2UoJ3tzaXRlbmFtZX0nLCRnQ21zLT5zaXRlcHJlZnNbJ3NpdGVuYW1lJ10sJHRpdGxlKTsNCiR0aXRsZSA9IHN0cl9yZXBsYWNlKCd7c2VvX2tleXdvcmRzfScsJHRpdGxlX2tleXdvcmRzLCR0aXRsZSk7DQokdGl0bGUgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRpdGxlKTsNCg0KJG1ldGFfdGl0bGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGl0bGVfbWV0YScsJ3t0aXRsZX0gfCB7c2l0ZW5hbWV9Jyk7DQokbWV0YV90aXRsZSA9IHN0cl9yZXBsYWNlKCd7dGl0bGV9JywkY3VyY29udGVudC0+TmFtZSgpLCRtZXRhX3RpdGxlKTsNCiRtZXRhX3RpdGxlID0gc3RyX3JlcGxhY2UoJ3tzaXRlbmFtZX0nLCR0cGxfdmFyc1snc2l0ZW5hbWUnXSwkbWV0YV90aXRsZSk7DQokbWV0YV90aXRsZSA9IHN0cl9yZXBsYWNlKCd7c2VvX2tleXdvcmRzfScsJHRpdGxlX2tleXdvcmRzLCRtZXRhX3RpdGxlKTsNCiRtZXRhX3RpdGxlID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCRtZXRhX3RpdGxlKTsNCg0KJG9wZW5ncmFwaF90aXRsZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF90aXRsZScsJ3t0aXRsZX0nKTsNCiRvcGVuZ3JhcGhfdGl0bGUgPSBzdHJfcmVwbGFjZSgne3RpdGxlfScsJGN1cmNvbnRlbnQtPk5hbWUoKSwkb3BlbmdyYXBoX3RpdGxlKTsNCiRvcGVuZ3JhcGhfdGl0bGUgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJG9wZW5ncmFwaF90aXRsZSk7DQoNCmVjaG8gIjx0aXRsZT4iLiR0aXRsZS4iPC90aXRsZT5cbiI7DQoNCi8vIE1FVEEgdGFncyBmb3IgY29udGVudCB0eXBlIGV0Yy4NCmVjaG8gIjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIuJGdDbXMtPmNvbmZpZ1snZGVmYXVsdF9lbmNvZGluZyddLiInIC8+XG4iOw0KaWYgKCgkcGFnZV9pbmZvWydpbmRleGFibGUnXSA9PSAiIikgfHwgKCRwYWdlX2luZm9bJ2luZGV4YWJsZSddID09ICIxIikpIHsNCgllY2hvICI8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J2luZGV4LCBmb2xsb3cnIC8+XG4iOw0KfWVsc2V7DQoJZWNobyAiPG1ldGEgbmFtZT0ncm9ib3RzJyBjb250ZW50PSdub2luZGV4JyAvPlxuIjsNCn0NCg0KaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd2ZXJpZmljYXRpb24nLCcnKSAhPSAnJykgew0KCWVjaG8gIjxtZXRhIG5hbWU9J2dvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbicgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgndmVyaWZpY2F0aW9uJywnJykuIicgLz5cbiI7DQp9DQoNCi8vIFN0YW5kYXJkIE1FVEEgdGFncw0KaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3N0YW5kYXJkJywxKSA9PSAxKSB7DQoJZWNobyAiPG1ldGEgbmFtZT0ndGl0bGUnIGNvbnRlbnQ9JyRtZXRhX3RpdGxlJyAvPlxuIjsNCgllY2hvICI8bWV0YSBuYW1lPSdkZXNjcmlwdGlvbicgY29udGVudD0nJGRlc2NyaXB0aW9uJyAvPlxuIjsNCiAgICBlY2hvICI8bWV0YSBuYW1lPSdrZXl3b3JkcycgY29udGVudD0nJHNlb19rZXl3b3JkcycgLz5cbiI7DQogICAgZWNobyAiPG1ldGEgbmFtZT0nZGF0ZScgY29udGVudD0nJG1vZGlmaWVkX2RhdGUnIC8+XG4iOw0KICAgIGVjaG8gIjxtZXRhIG5hbWU9J2xhc3R1cGRhdGUnIGNvbnRlbnQ9JyRtb2RpZmllZF9kYXRlJyAvPlxuIjsNCiAgICBlY2hvICI8bWV0YSBuYW1lPSdyZXZpc2VkJyBjb250ZW50PSckbW9kaWZpZWRfZGF0ZScgLz5cbiI7DQogICAgZWNobyAiPG1ldGEgbmFtZT0nYXV0aG9yJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3B1Ymxpc2hlcicsJycpLiInIC8+XG4iOw0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicsJycpICE9ICIiKSB7DQogICAgICBlY2hvICI8bWV0YSBuYW1lPSdnZW8ucGxhY2VuYW1lJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xvY2F0aW9uJywnJykuIicgLz5cbiI7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9yZWdpb24nLCcnKSAhPSAiIikgew0KICAgICAgZWNobyAiPG1ldGEgbmFtZT0nZ2VvLnJlZ2lvbicgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9yZWdpb24nLCcnKS4iJyAvPlxuIjsNCiAgICB9DQogICAgaWYgKCgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sYXRpdHVkZScsJycpICE9ICIiKSAmJiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbG9uZ2l0dWRlJywnJykgIT0gIiIpKSB7DQogICAgICBlY2hvICI8bWV0YSBuYW1lPSdnZW8ucG9zaXRpb24nIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbGF0aXR1ZGUnLCcnKS4iOyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbG9uZ2l0dWRlJywnJykuIicgLz5cbiI7DQogICAgICBlY2hvICI8bWV0YSBuYW1lPSdJQ0JNJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xhdGl0dWRlJywnJykuIiwgIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb25naXR1ZGUnLCcnKS4iJyAvPlxuIjsNCiAgICB9DQp9DQoNCmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWRkaXRpb25hbF9tZXRhX3RhZ3MnLCcnKSAhPSAnJykgew0KCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhZGRpdGlvbmFsX21ldGFfdGFncycsJycpKTsNCn0NCg0KLy8gRHVibGluQ29yZSBNRVRBIHRhZ3MNCmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9kdWJsaW5jb3JlJywwKSA9PSAxKSB7DQogICAgZWNobyAiPGxpbmsgcmVsPSdzY2hlbWEuREMnIGhyZWY9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJyAvPlxuIjsNCiAgICBlY2hvICI8bGluayByZWw9J3NjaGVtYS5EQ1RFUk1TJyBocmVmPSdodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvJyAvPlxuIjsNCiAgICBlY2hvICI8bWV0YSBuYW1lPSdEQy50eXBlJyBjb250ZW50PSdUZXh0JyBzY2hlbWU9J0RDVEVSTVMuRENNSVR5cGUnIC8+XG4iOw0KICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLmZvcm1hdCcgY29udGVudD0ndGV4dC9odG1sJyBzY2hlbWU9J0RDVEVSTVMuSU1UJyAvPlxuIjsNCiAgICBlY2hvICI8bWV0YSBuYW1lPSdEQy5yZWxhdGlvbicgY29udGVudD0naHR0cDovL2R1YmxpbmNvcmUub3JnLycgc2NoZW1lPSdEQ1RFUk1TLlVSSScgLz5cbiI7DQogICAgZWNobyAiPG1ldGEgbmFtZT0nREMucHVibGlzaGVyJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3B1Ymxpc2hlcicsJycpLiInIC8+XG4iOw0KICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLmNvbnRyaWJ1dG9yJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2NvbnRyaWJ1dG9yJywnJykuIicgLz5cbiI7DQogICAgDQogICAgDQovLyAgICBlY2hvICI8bWV0YSBuYW1lPSdEQy5sYW5ndWFnZScgY29udGVudD0nIi4kZ0Ntcy0+c2l0ZXByZWZzWydmcm9udGVuZGxhbmcnXS4iJyBzY2hlbWU9J0RDVEVSTVMuUkZDMzA2NicgLz5cbiI7DQoNCiAgICBpZigkZmVsYW5nID0gY21zX3NpdGVwcmVmczo6Z2V0KCdmcm9udGVuZGxhbmcnKSkNCiAgICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLmxhbmd1YWdlJyBjb250ZW50PSciLiRmZWxhbmcuIicgc2NoZW1lPSdEQ1RFUk1TLlJGQzMwNjYnIC8+XG4iOw0KICAgIA0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9jb3B5cmlnaHQnLCcnKSAhPSAiIikNCiAgICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLnJpZ2h0cycgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9jb3B5cmlnaHQnLCcnKS4iJyAvPlxuIjsNCiAgICAgIA0KICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLnRpdGxlJyBjb250ZW50PSckbWV0YV90aXRsZScgLz5cbiI7DQogICAgZWNobyAiPG1ldGEgbmFtZT0nREMuZGVzY3JpcHRpb24nIGNvbnRlbnQ9JyRkZXNjcmlwdGlvbicgLz5cbiI7DQogICAgZWNobyAiPG1ldGEgbmFtZT0nREMuZGF0ZScgY29udGVudD0nJG1vZGlmaWVkX2RhdGUnIHNjaGVtZT0nRENURVJNUy5XM0NEVEYnIC8+XG4iOw0KICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLmlkZW50aWZpZXInIGNvbnRlbnQ9JyRwYWdlX3VybCcgc2NoZW1lPSdEQ1RFUk1TLlVSSScgLz5cbiI7DQp9DQoNCi8vIE9wZW5HcmFwaCBNRVRBIHRhZ3MNCmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGgnLDApID09IDEpIHsNCiAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6dGl0bGUnIGNvbnRlbnQ9JyRvcGVuZ3JhcGhfdGl0bGUnIC8+XG4iOw0KICAgIGlmICgkcGFnZV9pbmZvWydvZ3R5cGUnXSA9PSAiIikgew0KICAgICAgZWNobyAiPG1ldGEgcHJvcGVydHk9J29nOnR5cGUnIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKS4iJyAvPlxuIjsNCiAgICB9ZWxzZXsNCiAgICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzp0eXBlJyBjb250ZW50PSciLiRwYWdlX2luZm9bJ29ndHlwZSddLiInIC8+XG4iOw0KICAgIH0NCiAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6dXJsJyBjb250ZW50PSckcGFnZV91cmwnIC8+XG4iOw0KICAgIA0KICAgICRpbWcgPSAkY3VyY29udGVudC0+UHJvcGVydGllcygpLT5HZXRWYWx1ZSgnaW1hZ2UnKTsNCiAgICBpZiAoKCRpbWcgIT0gLTEpICYmICgkaW1nICE9ICIiKSkgIHsNCiAgICAJJGltYWdlID0gJGltZzsNCiAgICAJDQogICAgfWVsc2V7DQogICAgCSRpbWFnZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9pbWFnZScsJycpOw0KICAgIH0NCiAgICANCiAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6aW1hZ2UnIGNvbnRlbnQ9JyIuJGNvbmZpZ1sncm9vdF91cmwnXS4iL3VwbG9hZHMvaW1hZ2VzLyRpbWFnZScgLz5cbiI7DQovLyAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6c2l0ZV9uYW1lJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZScsJGdDbXMtPkdldFByZWZlcmVuY2UoJ3NpdGVuYW1lJykpLiInIC8+XG4iOw0KICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzpzaXRlX25hbWUnIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3NpdGVuYW1lJyxjbXNfc2l0ZXByZWZzOjpnZXQoJ3NpdGVuYW1lJykpLiInIC8+XG4iOw0KICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzpkZXNjcmlwdGlvbicgY29udGVudD0nJGRlc2NyaXB0aW9uJyAvPlxuIjsNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJywnJykgIT0gIiIpIHsNCiAgICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdmYjphcHBfaWQnIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJywnJykuIicgLz5cbiI7DQogICAgfWVsc2V7DQogICAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nZmI6YWRtaW5zJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hZG1pbnMnLCcnKS4iJyAvPlxuIjsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xvY2F0aW9uJywnJykgIT0gIiIpIHsNCiAgICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzpsb2NhbGl0eScgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicsJycpLiInIC8+XG4iOw0KICAgIH0NCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfcmVnaW9uJywnJykgIT0gIiIpIHsNCiAgICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzpyZWdpb24nIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfcmVnaW9uJywnJykuIicgLz5cbiI7DQogICAgfQ0KICAgIGlmICgoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbGF0aXR1ZGUnLCcnKSAhPSAiIikgJiYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xvbmdpdHVkZScsJycpICE9ICIiKSkgew0KICAgICAgZWNobyAiPG1ldGEgcHJvcGVydHk9J29nOmxhdGl0dWRlJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xhdGl0dWRlJywnJykuIicgLz5cbiI7DQogICAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6bG9uZ2l0dWRlJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xvbmdpdHVkZScsJycpLiInIC8+XG4iOw0KICAgIH0NCn0NCg0KLy8gSW1hZ2UtTGluaw0KDQovL2lmICgoJGN1cmNvbnRlbnQtPkdldFByb3BlcnR5VmFsdWUoJ2ltYWdlJykgIT0gLTEpICYmICgkY3VyY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgnaW1hZ2UnKSAhPSAiIikpICB7DQogICAgaWYgKCgkaW1nICE9IC0xKSAmJiAoJGltZyAhPSAiIikpICB7DQogICAgICBlY2hvICI8bGluayByZWw9J2ltYWdlX3NyYycgaHJlZj0nIi4kcm9vdF91cmwuIi91cGxvYWRzL2ltYWdlcy8iLiRpbWcuIicgLz4iOw0KICAgIH0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovKiAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQoKICAgQ29kZSBmb3IgU0VPVG9vbHMyICJkZWZhdWx0IiBhY3Rpb24KCiAgIC09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCiAgIAogICBUeXBpY2FsbHksIHRoaXMgd2lsbCBkaXNwbGF5IHNvbWV0aGluZyBmcm9tIGEgdGVtcGxhdGUKICAgb3IgZG8gc29tZSBvdGhlciB0YXNrLgogICAKKi8KCi8vIEdldCBwYWdlIGRhdGEKJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwokZGIgPSYgY21zbXMoKS0+R2V0RGIoKTsKJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwoKJHJvb3RfdXJsID0gZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pID8gJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXSA6ICRnQ21zLT5jb25maWdbJ3NzbF91cmwnXTsKCi8vIEZpcnN0IHVwLCB3ZSBkbyBzb21lIGRhdGFiYXNlIG1haW50ZW5hbmNlCi8vIEVuc3VyZSBhbGwgdGhlIGFjdGl2ZSBwYWdlcyBhcmUgaW4gdGhlIHNlb3Rvb2xzMiBkYXRhYmFzZQokcXVlcnkgPSAnU0VMRUNUIGBjb250ZW50X2lkYCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IFdIRVJFIChgdHlwZWAgTElLRSAiJWNvbnRlbnQlIiBPUiBgdHlwZWAgTElLRSAiJWxpbmslIiApQU5EIGBjb250ZW50X2lkYCBOT1QgSU4gKFNFTEVDVCBgY29udGVudF9pZGAgRlJPTSAnIC4gY21zX2RiX3ByZWZpeCgpLiAnbW9kdWxlX3Nlb3Rvb2xzMiknOwppZiAoISRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KSkgewogIGVjaG8gIjxiciAvPlByb2JsZW0gd2l0aCB0aGUgZGF0YWJhc2UhIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4iOwogIGRpZTsKfQoKaWYgKCRyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKSB7Ci8vIE9LIHdlIGhhdmUgc29tZSBuZXcgcGFnZXMKCSRxMiA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBTRVQgY29udGVudF9pZCA9ID8sIGluZGV4YWJsZSA9ID8nOwoJd2hpbGUgKCRvbmVfcGFnZSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsKCQkkZGItPkV4ZWN1dGUoJHEyLGFycmF5KCRvbmVfcGFnZVsnY29udGVudF9pZCddLDEpKTsKCX0KfQoKLy8gTm93IGNoZWNrIHRoYXQgd2UgaGF2ZSByZW1vdmVkIGZyb20gc2VvdG9vbHMyIGFueSBwYWdlcyB0aGF0IGhhdmUgYmVlbiBkZWxldGVkCiRxdWVyeSA9ICdTRUxFQ1QgYGNvbnRlbnRfaWRgIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgV0hFUkUgYGNvbnRlbnRfaWRgIE5PVCBJTiAoU0VMRUNUIGBjb250ZW50X2lkYCBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkuICdjb250ZW50KSc7CmlmICghJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpKSB7CgllY2hvICI8YnIgLz5Qcm9ibGVtIHdpdGggdGhlIGRhdGFiYXNlISBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuIjsKCWRpZTsKfQppZiAoJHJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApIHsKLy8gT0sgd2UgaGF2ZSBzb21lIGRlbGV0ZWQgcGFnZXMKCSRxMyA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBXSEVSRSBjb250ZW50X2lkID0gPyc7Cgl3aGlsZSAoJG9uZV9wYWdlID0gJHJlc3VsdC0+ZmV0Y2hSb3coKSkgewoJCSRkYi0+RXhlY3V0ZSgkcTMsYXJyYXkoJG9uZV9wYWdlWydjb250ZW50X2lkJ10sMSkpOwoJfQp9CgovLyBMYXN0bHksIGVuc3VyZSB0aGF0IGFsbCBpbmFjdGl2ZSBwYWdlcyBhcmUgbWFya2VkIGFzIG5vdCBpbmRleGFibGUgaW4gc2VvdG9vbHMyCiRxdWVyeSA9ICdTRUxFQ1QgY29udGVudF9pZCBGUk9NICcgLiBjbXNfZGJfcHJlZml4KCkgLiAnY29udGVudCBXSEVSRSBhY3RpdmUgPSAwJzsKaWYgKCEkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSkpIHsKCWVjaG8gIjxiciAvPlByb2JsZW0gd2l0aCB0aGUgZGF0YWJhc2UhIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4iOwoJZGllOwp9CgppZiAoJHJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApIHsKLy8gT0sgd2UgaGF2ZSB0byBwcmV2ZW50IHRoZSBpbmFjdGl2ZSBwYWdlcyBmcm9tIGJlaW5nIGluZGV4ZWQuCgkkcTQgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFNFVCBpbmRleGFibGUgPSAwIFdIRVJFIGNvbnRlbnRfaWQgPSA/JzsKCXdoaWxlICgkb25lX3BhZ2UgPSAkcmVzdWx0LT5mZXRjaFJvdygpKSB7CgkJJGRiLT5FeGVjdXRlKCRxNCxhcnJheSgkb25lX3BhZ2VbJ2NvbnRlbnRfaWQnXSkpOwoJfQp9CgovLyBQaGV3LCB0aGF0J3MgYWxsIGRvbmUgc28gd2UgY2FuIG1vdmUgb24gdG8gdGhlIHJlYWwgYnVzaW5lc3Mgb2YgdGhlIGRheQoKJHRwbF92YXJzID0gJHNtYXJ0eS0+Z2V0X3RlbXBsYXRlX3ZhcnMoKTsKJGN1cmNvbnRlbnQgPSAkdHBsX3ZhcnNbJ2NvbnRlbnRfb2JqJ107CgokcGFnZV91cmwgPSAkY3VyY29udGVudC0+R2V0VVJMKCk7CiRwYWdlX2lkID0gJGN1cmNvbnRlbnQtPklkKCk7CgokbW9kaWZpZWRfZGF0ZSA9ICRjdXJjb250ZW50LT5nZXRNb2RpZmllZERhdGUoKTsKJG1vZGlmaWVkX2RhdGUgPSBkYXRlKCdZLW0tZFxUSDppOnNQJywkbW9kaWZpZWRfZGF0ZSk7CgovLyBLZXl3b3JkIGdlbmVyYXRvcgoka2V5d29yZHMgPSBleHBsb2RlKCcgJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9rZXl3b3JkcycsJycpKTsKCgokcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBXSEVSRSBjb250ZW50X2lkID0gPyc7CmlmICghJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHBhZ2VfaWQpKSkgewogIGVjaG8gIlByb2JsZW0gd2l0aCB0aGUgZGF0YWJhc2UhIFBsZWFzZSBjb250YWN0IHlvdXIgYWRtaW5pc3RyYXRvci4iOwogIGRpZTsKfQoKJHBhZ2VfaW5mbyA9ICRyZXN1bHQtPkZldGNoUm93KCk7CgppZiAoJHBhZ2VfaW5mb1sna2V5d29yZHMnXSAhPSAiIikgewoJJG90aGVyX2tleXdvcmRzID0gYXJyYXlfZmxpcChleHBsb2RlKCcgJywkcGFnZV9pbmZvWydrZXl3b3JkcyddKSk7Cn1lbHNlewoJJG90aGVyX2tleXdvcmRzID0gJHRoaXMtPmdldEtleXdvcmRTdWdnZXN0aW9ucygkcGFnZV9pZCk7Cn0KCiRzZW9fa2V5d29yZHMgPSBpbXBsb2RlKCcsICcsYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRrZXl3b3JkcywgYXJyYXlfZmxpcCgkb3RoZXJfa2V5d29yZHMpKSkpOwokc21hcnR5LT5hc3NpZ24oJ3Nlb19rZXl3b3JkcycsICRzZW9fa2V5d29yZHMpOwokdGl0bGVfa2V5d29yZHMgPSBpbXBsb2RlKCcgJyxhcnJheV91bmlxdWUoYXJyYXlfbWVyZ2UoJGtleXdvcmRzLCBhcnJheV9mbGlwKCRvdGhlcl9rZXl3b3JkcykpKSk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfa2V5d29yZHMnLCAkdGl0bGVfa2V5d29yZHMpOwokc21hcnR5LT5hc3NpZ24oJ2RlZmF1bHRfa2V5d29yZHMnLCBpbXBsb2RlKCcgJywgJGtleXdvcmRzKSk7CiRzbWFydHktPmFzc2lnbigncGFnZV9rZXl3b3JkcycsIGltcGxvZGUoJyAnLCBhcnJheV9mbGlwKCRvdGhlcl9rZXl3b3JkcykpKTsKCi8vIFBhZ2UgZGVzY3JpcHRpb24KJGRlc2NyaXB0aW9uX2lkID0gc3RyX3JlcGxhY2UoJyAnLCdfJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYmxvY2snLCcnKSk7CiRkZXNjcmlwdGlvbiA9IHN0cmlwX3RhZ3MoJGN1cmNvbnRlbnQtPkdldFByb3BlcnR5VmFsdWUoJGRlc2NyaXB0aW9uX2lkKSk7CgppZiAoKCRkZXNjcmlwdGlvbiA9PSAiIikgJiYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9hdXRvX2dlbmVyYXRlJywxKSA9PSAxKSkgewogICRrdyA9IGFycmF5X2ZsaXAoJG90aGVyX2tleXdvcmRzKTsKICAkbGFzdF9rZXl3b3JkID0gYXJyYXlfcG9wKCRrdyk7CiAgJGtleXdvcmRzID0gaW1wbG9kZSgnLCAnLCRrdykgLiAiICIgLiAkdGhpcy0+bGFuZygnYW5kJykgLiAiICIgLiAkbGFzdF9rZXl3b3JkOwogICRkZXNjcmlwdGlvbiA9IHN0cl9yZXBsYWNlKCd7a2V5d29yZHN9Jywka2V5d29yZHMsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG8nLCcnKSk7CiAgJGRlc2NyaXB0aW9uID0gc3RyX3JlcGxhY2UoJ3t0aXRsZX0nLCRjdXJjb250ZW50LT5OYW1lKCksJGRlc2NyaXB0aW9uKTsKICAkZGVzY3JpcHRpb24gPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJGRlc2NyaXB0aW9uKTsKfQoKLy8gU2hvdyBiYXNlPwppZiAoaXNzZXQoJHBhcmFtc1snc2hvd2Jhc2UnXSkgJiYgJHBhcmFtc1snc2hvd2Jhc2UnXSAhPSAnZmFsc2UnKSB7CgkgICAgZWNobyAiPGJhc2UgaHJlZj0nIi4kcm9vdF91cmwuIi8nIC8+XG4iOwp9CgoKLy8gUGFnZSB0aXRsZQokdGl0bGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGl0bGUnLCd7dGl0bGV9IHwge3NpdGVuYW1lfSAtIHtzZW9fa2V5d29yZHN9Jyk7CiR0aXRsZSA9IHN0cl9yZXBsYWNlKCd7dGl0bGV9JywkY3VyY29udGVudC0+TmFtZSgpLCR0aXRsZSk7CiR0aXRsZSA9IHN0cl9yZXBsYWNlKCd7c2l0ZW5hbWV9JywkZ0Ntcy0+c2l0ZXByZWZzWydzaXRlbmFtZSddLCR0aXRsZSk7CiR0aXRsZSA9IHN0cl9yZXBsYWNlKCd7c2VvX2tleXdvcmRzfScsJHRpdGxlX2tleXdvcmRzLCR0aXRsZSk7CiR0aXRsZSA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdGl0bGUpOwoKJG1ldGFfdGl0bGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGl0bGVfbWV0YScsJ3t0aXRsZX0gfCB7c2l0ZW5hbWV9Jyk7CiRtZXRhX3RpdGxlID0gc3RyX3JlcGxhY2UoJ3t0aXRsZX0nLCRjdXJjb250ZW50LT5OYW1lKCksJG1ldGFfdGl0bGUpOwokbWV0YV90aXRsZSA9IHN0cl9yZXBsYWNlKCd7c2l0ZW5hbWV9JywkdHBsX3ZhcnNbJ3NpdGVuYW1lJ10sJG1ldGFfdGl0bGUpOwokbWV0YV90aXRsZSA9IHN0cl9yZXBsYWNlKCd7c2VvX2tleXdvcmRzfScsJHRpdGxlX2tleXdvcmRzLCRtZXRhX3RpdGxlKTsKJG1ldGFfdGl0bGUgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJG1ldGFfdGl0bGUpOwoKJG9wZW5ncmFwaF90aXRsZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF90aXRsZScsJ3t0aXRsZX0nKTsKJG9wZW5ncmFwaF90aXRsZSA9IHN0cl9yZXBsYWNlKCd7dGl0bGV9JywkY3VyY29udGVudC0+TmFtZSgpLCRvcGVuZ3JhcGhfdGl0bGUpOwokb3BlbmdyYXBoX3RpdGxlID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCRvcGVuZ3JhcGhfdGl0bGUpOwoKZWNobyAiPHRpdGxlPiIuJHRpdGxlLiI8L3RpdGxlPlxuIjsKCi8vIE1FVEEgdGFncyBmb3IgY29udGVudCB0eXBlIGV0Yy4KZWNobyAiPG1ldGEgaHR0cC1lcXVpdj0nQ29udGVudC1UeXBlJyBjb250ZW50PSd0ZXh0L2h0bWw7IGNoYXJzZXQ9Ii4kZ0Ntcy0+Y29uZmlnWydkZWZhdWx0X2VuY29kaW5nJ10uIicgLz5cbiI7CmlmICgoJHBhZ2VfaW5mb1snaW5kZXhhYmxlJ10gPT0gIiIpIHx8ICgkcGFnZV9pbmZvWydpbmRleGFibGUnXSA9PSAiMSIpKSB7CgllY2hvICI8bWV0YSBuYW1lPSdyb2JvdHMnIGNvbnRlbnQ9J2luZGV4LCBmb2xsb3cnIC8+XG4iOwp9ZWxzZXsKCWVjaG8gIjxtZXRhIG5hbWU9J3JvYm90cycgY29udGVudD0nbm9pbmRleCcgLz5cbiI7Cn0KCmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgndmVyaWZpY2F0aW9uJywnJykgIT0gJycpIHsKCWVjaG8gIjxtZXRhIG5hbWU9J2dvb2dsZS1zaXRlLXZlcmlmaWNhdGlvbicgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgndmVyaWZpY2F0aW9uJywnJykuIicgLz5cbiI7Cn0KCi8vIFN0YW5kYXJkIE1FVEEgdGFncwppZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfc3RhbmRhcmQnLDEpID09IDEpIHsKCWVjaG8gIjxtZXRhIG5hbWU9J3RpdGxlJyBjb250ZW50PSckbWV0YV90aXRsZScgLz5cbiI7CgllY2hvICI8bWV0YSBuYW1lPSdkZXNjcmlwdGlvbicgY29udGVudD0nJGRlc2NyaXB0aW9uJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J2tleXdvcmRzJyBjb250ZW50PSckc2VvX2tleXdvcmRzJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J2RhdGUnIGNvbnRlbnQ9JyRtb2RpZmllZF9kYXRlJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J2xhc3R1cGRhdGUnIGNvbnRlbnQ9JyRtb2RpZmllZF9kYXRlJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J3JldmlzZWQnIGNvbnRlbnQ9JyRtb2RpZmllZF9kYXRlJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J2F1dGhvcicgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9wdWJsaXNoZXInLCcnKS4iJyAvPlxuIjsKICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicsJycpICE9ICIiKSB7CiAgICAgIGVjaG8gIjxtZXRhIG5hbWU9J2dlby5wbGFjZW5hbWUnIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbG9jYXRpb24nLCcnKS4iJyAvPlxuIjsKICAgIH0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9yZWdpb24nLCcnKSAhPSAiIikgewogICAgICBlY2hvICI8bWV0YSBuYW1lPSdnZW8ucmVnaW9uJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3JlZ2lvbicsJycpLiInIC8+XG4iOwogICAgfQogICAgaWYgKCgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sYXRpdHVkZScsJycpICE9ICIiKSAmJiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbG9uZ2l0dWRlJywnJykgIT0gIiIpKSB7CiAgICAgIGVjaG8gIjxtZXRhIG5hbWU9J2dlby5wb3NpdGlvbicgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sYXRpdHVkZScsJycpLiI7Ii4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb25naXR1ZGUnLCcnKS4iJyAvPlxuIjsKICAgICAgZWNobyAiPG1ldGEgbmFtZT0nSUNCTScgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sYXRpdHVkZScsJycpLiIsICIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbG9uZ2l0dWRlJywnJykuIicgLz5cbiI7CiAgICB9Cn0KCmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWRkaXRpb25hbF9tZXRhX3RhZ3MnLCcnKSAhPSAnJykgewoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FkZGl0aW9uYWxfbWV0YV90YWdzJywnJykpOwp9CgovLyBEdWJsaW5Db3JlIE1FVEEgdGFncwppZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfZHVibGluY29yZScsMCkgPT0gMSkgewogICAgZWNobyAiPGxpbmsgcmVsPSdzY2hlbWEuREMnIGhyZWY9J2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJyAvPlxuIjsKICAgIGVjaG8gIjxsaW5rIHJlbD0nc2NoZW1hLkRDVEVSTVMnIGhyZWY9J2h0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy8nIC8+XG4iOwogICAgZWNobyAiPG1ldGEgbmFtZT0nREMudHlwZScgY29udGVudD0nVGV4dCcgc2NoZW1lPSdEQ1RFUk1TLkRDTUlUeXBlJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLmZvcm1hdCcgY29udGVudD0ndGV4dC9odG1sJyBzY2hlbWU9J0RDVEVSTVMuSU1UJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLnJlbGF0aW9uJyBjb250ZW50PSdodHRwOi8vZHVibGluY29yZS5vcmcvJyBzY2hlbWU9J0RDVEVSTVMuVVJJJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLnB1Ymxpc2hlcicgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9wdWJsaXNoZXInLCcnKS4iJyAvPlxuIjsKICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLmNvbnRyaWJ1dG9yJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2NvbnRyaWJ1dG9yJywnJykuIicgLz5cbiI7CiAgICAKICAgIAovLyAgICBlY2hvICI8bWV0YSBuYW1lPSdEQy5sYW5ndWFnZScgY29udGVudD0nIi4kZ0Ntcy0+c2l0ZXByZWZzWydmcm9udGVuZGxhbmcnXS4iJyBzY2hlbWU9J0RDVEVSTVMuUkZDMzA2NicgLz5cbiI7CgogICAgaWYoJGZlbGFuZyA9IGNtc19zaXRlcHJlZnM6OmdldCgnZnJvbnRlbmRsYW5nJykpCiAgICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLmxhbmd1YWdlJyBjb250ZW50PSciLiRmZWxhbmcuIicgc2NoZW1lPSdEQ1RFUk1TLlJGQzMwNjYnIC8+XG4iOwogICAgCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfY29weXJpZ2h0JywnJykgIT0gIiIpCiAgICAgIGVjaG8gIjxtZXRhIG5hbWU9J0RDLnJpZ2h0cycgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9jb3B5cmlnaHQnLCcnKS4iJyAvPlxuIjsKICAgICAgCiAgICBlY2hvICI8bWV0YSBuYW1lPSdEQy50aXRsZScgY29udGVudD0nJG1ldGFfdGl0bGUnIC8+XG4iOwogICAgZWNobyAiPG1ldGEgbmFtZT0nREMuZGVzY3JpcHRpb24nIGNvbnRlbnQ9JyRkZXNjcmlwdGlvbicgLz5cbiI7CiAgICBlY2hvICI8bWV0YSBuYW1lPSdEQy5kYXRlJyBjb250ZW50PSckbW9kaWZpZWRfZGF0ZScgc2NoZW1lPSdEQ1RFUk1TLlczQ0RURicgLz5cbiI7CiAgICBlY2hvICI8bWV0YSBuYW1lPSdEQy5pZGVudGlmaWVyJyBjb250ZW50PSckcGFnZV91cmwnIHNjaGVtZT0nRENURVJNUy5VUkknIC8+XG4iOwp9CgovLyBPcGVuR3JhcGggTUVUQSB0YWdzCmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGgnLDApID09IDEpIHsKICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzp0aXRsZScgY29udGVudD0nJG9wZW5ncmFwaF90aXRsZScgLz5cbiI7CiAgICBpZiAoJHBhZ2VfaW5mb1snb2d0eXBlJ10gPT0gIiIpIHsKICAgICAgZWNobyAiPG1ldGEgcHJvcGVydHk9J29nOnR5cGUnIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKS4iJyAvPlxuIjsKICAgIH1lbHNlewogICAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6dHlwZScgY29udGVudD0nIi4kcGFnZV9pbmZvWydvZ3R5cGUnXS4iJyAvPlxuIjsKICAgIH0KICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzp1cmwnIGNvbnRlbnQ9JyRwYWdlX3VybCcgLz5cbiI7CiAgICAKICAgICRpbWcgPSAkY3VyY29udGVudC0+UHJvcGVydGllcygpLT5HZXRWYWx1ZSgnaW1hZ2UnKTsKICAgIGlmICgoJGltZyAhPSAtMSkgJiYgKCRpbWcgIT0gIiIpKSAgewogICAgCSRpbWFnZSA9ICRpbWc7CiAgICAJCiAgICB9ZWxzZXsKICAgIAkkaW1hZ2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfaW1hZ2UnLCcnKTsKICAgIH0KICAgIAogICAgZWNobyAiPG1ldGEgcHJvcGVydHk9J29nOmltYWdlJyBjb250ZW50PSciLiRjb25maWdbJ3Jvb3RfdXJsJ10uIi91cGxvYWRzL2ltYWdlcy8kaW1hZ2UnIC8+XG4iOwovLyAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6c2l0ZV9uYW1lJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZScsJGdDbXMtPkdldFByZWZlcmVuY2UoJ3NpdGVuYW1lJykpLiInIC8+XG4iOwogICAgZWNobyAiPG1ldGEgcHJvcGVydHk9J29nOnNpdGVfbmFtZScgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfc2l0ZW5hbWUnLGNtc19zaXRlcHJlZnM6OmdldCgnc2l0ZW5hbWUnKSkuIicgLz5cbiI7CiAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nb2c6ZGVzY3JpcHRpb24nIGNvbnRlbnQ9JyRkZXNjcmlwdGlvbicgLz5cbiI7CiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJywnJykgIT0gIiIpIHsKICAgICAgZWNobyAiPG1ldGEgcHJvcGVydHk9J2ZiOmFwcF9pZCcgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfYXBwbGljYXRpb24nLCcnKS4iJyAvPlxuIjsKICAgIH1lbHNlewogICAgICBlY2hvICI8bWV0YSBwcm9wZXJ0eT0nZmI6YWRtaW5zJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hZG1pbnMnLCcnKS4iJyAvPlxuIjsKICAgIH0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicsJycpICE9ICIiKSB7CiAgICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzpsb2NhbGl0eScgY29udGVudD0nIi4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicsJycpLiInIC8+XG4iOwogICAgfQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3JlZ2lvbicsJycpICE9ICIiKSB7CiAgICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzpyZWdpb24nIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfcmVnaW9uJywnJykuIicgLz5cbiI7CiAgICB9CiAgICBpZiAoKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xhdGl0dWRlJywnJykgIT0gIiIpICYmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb25naXR1ZGUnLCcnKSAhPSAiIikpIHsKICAgICAgZWNobyAiPG1ldGEgcHJvcGVydHk9J29nOmxhdGl0dWRlJyBjb250ZW50PSciLiR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xhdGl0dWRlJywnJykuIicgLz5cbiI7CiAgICAgIGVjaG8gIjxtZXRhIHByb3BlcnR5PSdvZzpsb25naXR1ZGUnIGNvbnRlbnQ9JyIuJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbG9uZ2l0dWRlJywnJykuIicgLz5cbiI7CiAgICB9Cn0KCi8vIEltYWdlLUxpbmsKCi8vaWYgKCgkY3VyY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgnaW1hZ2UnKSAhPSAtMSkgJiYgKCRjdXJjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCdpbWFnZScpICE9ICIiKSkgIHsKLy8gICAgaWYgKCgkaW1nICE9IC0xKSAmJiAoJGltZyAhPSAiIikpICB7Ci8vICAgICAgZWNobyAiPGxpbmsgcmVsPSdpbWFnZV9zcmMnIGhyZWY9JyIuJHJvb3RfdXJsLiIvdXBsb2Fkcy9pbWFnZXMvIi4kaW1nLiInIC8+IjsKLy8gICAgfQoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin-orig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCmlmICghaXNzZXQoJGdDbXMpKSBleGl0Ow0KDQppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkNCiAgICB7DQogICAgcmV0dXJuICR0aGlzLT5EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7DQogICAgfQ0KDQovKiAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQ0KDQogICBDb2RlIGZvciBTRU9Ub29sczIgImRlZmF1bHRhZG1pbiIgYWRtaW4gYWN0aW9uDQogICANCiAgIC09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tDQogICANCiAgIFR5cGljYWxseSwgdGhpcyB3aWxsIGRpc3BsYXkgc29tZXRoaW5nIGZyb20gYSB0ZW1wbGF0ZQ0KICAgb3IgZG8gc29tZSBvdGhlciB0YXNrLg0KICAgDQoqLw0KJGRiID0gJiRnQ21zLT5HZXREYigpOw0KJG1lc3NhZ2UgPSAnJzsNCg0KLy8gRG8gdGhlIGFjdGlvbg0KaWYgKGlzc2V0KCRfR0VUWyd3aGF0J10pICYmICRfR0VUWyd3aGF0J10gPT0gJ3RvZ2dsZV9pbmRleCcpIHsNCiAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBXSEVSRSBjb250ZW50X2lkID0gJy4kX0dFVFsnY29udGVudF9pZCddOw0KICAgICRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQogICAgJGluZm8gPSAkcmVzdWx0LT5mZXRjaFJvdygpOw0KICAgIGlmICgkaW5mb1snaW5kZXhhYmxlJ10gPT0gIjEiKSB7DQogICAgICAgICRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgU0VUIGluZGV4YWJsZSA9IDAgV0hFUkUgY29udGVudF9pZCA9ICcuJF9HRVRbJ2NvbnRlbnRfaWQnXTsNCiAgICB9ZWxzZXsNCiAgICAgICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFNFVCBjb250ZW50X2lkID0gJy4kX0dFVFsnY29udGVudF9pZCddLicsIGluZGV4YWJsZSA9IDAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgaW5kZXhhYmxlID0gMSc7DQogICAgfQ0KICAgICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgIA0KICAgIA0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3JvYm90cycsMSkgPT0gMSkgew0KICAgICAgICAkdGhpcy0+Y3JlYXRlUm9ib3RzVFhUKCk7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3NpdGVtYXAnLDEpID09IDEpIHsNCiAgICAgICAgJHRoaXMtPmNyZWF0ZVNpdGVtYXAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3B1c2hfc2l0ZW1hcCcsMSkgPT0gMSk7DQogICAgfQ0KICAgICRfR0VUWyd0YWInXSA9ICdwYWdlZGVzY3JpcHRpb25zJzsNCn0NCg0KaWYgKGlzc2V0KCRfR0VUWyd3aGF0J10pICYmICRfR0VUWyd3aGF0J10gPT0gJ3NldF9wcmlvcml0eScpIHsNCiAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgU0VUIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ10uJywgcHJpb3JpdHkgPSAnLiRfR0VUWydwcmlvcml0eSddLicgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgcHJpb3JpdHkgPSAnLiRfR0VUWydwcmlvcml0eSddOw0KICAgICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICRfR0VUWyd0YWInXSA9ICdwYWdlZGVzY3JpcHRpb25zJzsNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9zaXRlbWFwJywxKSA9PSAxKSB7DQogICAgICAgICR0aGlzLT5jcmVhdGVTaXRlbWFwKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwdXNoX3NpdGVtYXAnLDEpID09IDEpOw0KICAgIH0NCn0NCg0KaWYgKGlzc2V0KCRfR0VUWyd3aGF0J10pICYmICRfR0VUWyd3aGF0J10gPT0gJ3Jlc2V0X3ByaW9yaXR5Jykgew0KICAgICRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgU0VUIHByaW9yaXR5ID0gTlVMTCBXSEVSRSBjb250ZW50X2lkID0gJy4kX0dFVFsnY29udGVudF9pZCddOw0KICAgICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICRfR0VUWyd0YWInXSA9ICdwYWdlZGVzY3JpcHRpb25zJzsNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9zaXRlbWFwJywxKSA9PSAxKSB7DQogICAgICAgICR0aGlzLT5jcmVhdGVTaXRlbWFwKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwdXNoX3NpdGVtYXAnLDEpID09IDEpOw0KICAgIH0NCn0NCg0KaWYgKGlzc2V0KCRfR0VUWyd3aGF0J10pICYmICRfR0VUWyd3aGF0J10gPT0gJ3Jlc2V0X29ndHlwZScpIHsNCiAgICAkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFNFVCBvZ3R5cGUgPSBOVUxMIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ107DQogICAgJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQogICAgJF9HRVRbJ3RhYiddID0gJ3BhZ2VkZXNjcmlwdGlvbnMnOw0KfQ0KDQppZiAoaXNzZXQoJF9HRVRbJ3doYXQnXSkgJiYgJF9HRVRbJ3doYXQnXSA9PSAncmVzZXRfa2V5d29yZHMnKSB7DQogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBTRVQga2V5d29yZHMgPSBOVUxMIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ107DQogICAgJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQogICAgJF9HRVRbJ3RhYiddID0gJ3BhZ2VkZXNjcmlwdGlvbnMnOw0KfQ0KDQppZiAoaXNzZXQoJF9HRVRbJ3doYXQnXSkgJiYgJF9HRVRbJ3doYXQnXSA9PSAnZWRpdF9vZ3R5cGUnKSB7DQogICAgZWNobyAkdGhpcy0+UmVkaXJlY3QobnVsbCwgJ2VkaXRfb2d0eXBlJywgJHRoaXMtPnJldHVybmlkLCBBcnJheSgnY29udGVudF9pZCc9PiRfR0VUWydjb250ZW50X2lkJ10pKTsNCn0NCg0KaWYgKGlzc2V0KCRfR0VUWyd3aGF0J10pICYmICRfR0VUWyd3aGF0J10gPT0gJ2VkaXRfa2V5d29yZHMnKSB7DQogICAgZWNobyAkdGhpcy0+UmVkaXJlY3QobnVsbCwgJ2VkaXRfa2V5d29yZHMnLCAkdGhpcy0+cmV0dXJuaWQsIEFycmF5KCdjb250ZW50X2lkJz0+JF9HRVRbJ2NvbnRlbnRfaWQnXSkpOw0KfQ0KICAgIA0KICAgIA0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfaGVhZGVycycsJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpLg0KICAgICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3Nlb2FsZXJ0cycsJHRoaXMtPkxhbmcoJ3RpdGxlX3Nlb2FsZXJ0cycpKS4NCiAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdwYWdlZGVzY3JpcHRpb25zJywkdGhpcy0+TGFuZygndGl0bGVfcGFnZWRlc2NyaXB0aW9ucycpLCAoaXNzZXQoJF9HRVRbJ3RhYiddKSAmJiAkX0dFVFsndGFiJ10gPT0gJ3BhZ2VkZXNjcmlwdGlvbnMnKSkuDQogICAgJHRoaXMtPlNldFRhYkhlYWRlcignbWV0YXNldHRpbmdzJywkdGhpcy0+TGFuZygndGl0bGVfbWV0YXNldHRpbmdzJyksIChpc3NldCgkX0dFVFsndGFiJ10pICYmICRfR0VUWyd0YWInXSA9PSAnbWV0YXNldHRpbmdzJykpLg0KICAgICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3NpdGVtYXBzZXR0aW5ncycsJHRoaXMtPkxhbmcoJ3RpdGxlX3NpdGVtYXBzZXR0aW5ncycpLCAoaXNzZXQoJF9HRVRbJ3RhYiddKSAmJiAkX0dFVFsndGFiJ10gPT0gJ3NpdGVtYXBzZXR0aW5ncycpKS4NCiAgICAkdGhpcy0+U2V0VGFiSGVhZGVyKCdrZXl3b3Jkc2V0dGluZ3MnLCR0aGlzLT5MYW5nKCd0aXRsZV9rZXl3b3Jkc2V0dGluZ3MnKSwgKGlzc2V0KCRfR0VUWyd0YWInXSkgJiYgJF9HRVRbJ3RhYiddID09ICdrZXl3b3Jkc2V0dGluZ3MnKSkuDQogICAgJHRoaXMtPkVuZFRhYkhlYWRlcnMoKS4kdGhpcy0+U3RhcnRUYWJDb250ZW50KCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRfdGFiJywkdGhpcy0+RW5kVGFiKCkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfZm9vdGVycycsJHRoaXMtPkVuZFRhYkNvbnRlbnQoKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X3Nlb2FsZXJ0c190YWInLCR0aGlzLT5TdGFydFRhYignc2VvYWxlcnRzJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9wYWdlZGVzY3JpcHRpb25zX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdwYWdlZGVzY3JpcHRpb25zJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydF9tZXRhc2V0dGluZ3NfdGFiJywkdGhpcy0+U3RhcnRUYWIoJ21ldGFzZXR0aW5ncycpKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfc2l0ZW1hcHNldHRpbmdzX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdzaXRlbWFwc2V0dGluZ3MnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X2tleXdvcmRzZXR0aW5nc190YWInLCR0aGlzLT5TdGFydFRhYigna2V5d29yZHNldHRpbmdzJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9zZWN0aW9uJywnZGVmYXVsdGFkbWluJyk7DQoNCmlmIChpc3NldCgkX0dFVFsnbWVzc2FnZSddKSkgew0KICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCR0aGlzLT5zaG93TWVzc2FnZSgkdGhpcy0+bGFuZygkX0dFVFsnbWVzc2FnZSddKSkpOw0KfSBlbHNlIHsNCiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywnJyk7DQp9DQoNCi8qIFNFTyBBbGVydHMgVGFiICovDQoNCiRhbGVydHMgID0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ2FsZXJ0c191cmdlbnQnLCAkdGhpcy0+TGFuZygndGl0bGVfYWxlcnRzX3VyZ2VudCcpKTsNCg0KJHVyZ2VudF9hbGVydHMgPSAkdGhpcy0+Z2V0VXJnZW50QWxlcnRzKCk7DQoNCmlmIChjb3VudCgkdXJnZW50X2FsZXJ0cykgPT0gMCkgew0KICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL3N5c3RlbS90cnVlLmdpZiIgYWxpZ249ImFic21pZGRsZSIgLz4gJy4kdGhpcy0+bGFuZygnbm90aGluZ190b19iZV9maXhlZCcpLic8YnIgLz48YnIgLz4nOw0KfWVsc2V7DQogICRncm91cHMgPSBBcnJheSgpOw0KICBmb3JlYWNoICgkdXJnZW50X2FsZXJ0cyBhcyAkYWxlcnQpIHsNCiAgICAkZ3JvdXBzWyRhbGVydFsnZ3JvdXAnXV1bXSA9ICRhbGVydDsNCiAgfQ0KICBmb3JlYWNoKCRncm91cHMgYXMgJGdyb3VwID0+ICRnYWxlcnRzKSB7DQogIAkkY291bnQgPSBjb3VudCgkZ2FsZXJ0cyk7DQogICAgaWYgKGNvdW50KCRnYWxlcnRzKSA+IDIwKSB7DQogICAgICAgICRwYXJ0cyA9IGFycmF5X2NodW5rKCRnYWxlcnRzLCAyMCk7DQogICAgICAgICRnYWxlcnRzID0gJHBhcnRzWzBdOw0KICAgICAgICAkY291bnQgPSAiPiAyMCI7DQogICAgfQ0KICAgIGlmIChjb3VudCgkZ2FsZXJ0cykgPT0gMSkgew0KICAgICAgICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL05vdGlmaWNhdGlvbnMvMS5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+IDxiPicuJGdhbGVydHNbMF1bJ21lc3NhZ2UnXS4nPC9iPiBbJy5pbXBsb2RlKCcgfCAnLCRnYWxlcnRzWzBdWydsaW5rcyddKS4nXTxiciAvPjxiciAvPic7DQogICAgfWVsc2V7DQogICAgICAkZ3JvdXBfdGl0bGUgPSAkdGhpcy0+bGFuZygnZ3JvdXB0aXRsZV8nLiRncm91cCwgQXJyYXkoJGNvdW50KSk7DQogICAgICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL05vdGlmaWNhdGlvbnMvMS5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+IDxiPicuJGdyb3VwX3RpdGxlLic8L2I+IFs8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQobnVsbCkiIG9uQ2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwndXJnZW50X2dyb3VwXycuJGdyb3VwLidcJykuc3R5bGUuZGlzcGxheSA9IFwnYmxvY2tcJyI+Jy4kdGhpcy0+bGFuZygndmlld19hbGwnKS4nPC9hPl08YnIgLz48YnIgLz4nOw0KICAgICAgJGFsZXJ0cyAuPSAnPGRpdiBpZD0idXJnZW50X2dyb3VwXycuJGdyb3VwLiciIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDMwcHg7IGRpc3BsYXk6IG5vbmU7Ij4nOw0KICAgICAgZm9yZWFjaCAoJGdhbGVydHMgYXMgJGFsZXJ0KSB7DQogICAgICAgICRhbGVydHMgLj0gJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvTm90aWZpY2F0aW9ucy8xLmdpZiIgYWxpZ249ImFic21pZGRsZSIgLz4gPGI+Jy4kYWxlcnRbJ21lc3NhZ2UnXS4nPC9iPiBbJy5pbXBsb2RlKCcgfCAnLCRhbGVydFsnbGlua3MnXSkuJ108YnIgLz48YnIgLz4nOw0KICAgICAgfQ0KICAgICAgJGFsZXJ0cyAuPSAnPC9kaXY+JzsNCiAgICB9DQogIH0NCn0NCg0KJGFsZXJ0cyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsNCg0KJGFsZXJ0cyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydChudWxsLCAnYWxlcnRzX2ltcG9ydGFudCcsICR0aGlzLT5MYW5nKCd0aXRsZV9hbGVydHNfaW1wb3J0YW50JykpOw0KDQokaW1wb3J0YW50X2FsZXJ0cyA9ICR0aGlzLT5nZXRJbXBvcnRhbnRBbGVydHMoKTsNCmlmIChjb3VudCgkaW1wb3J0YW50X2FsZXJ0cykgPT0gMCkgew0KICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL3N5c3RlbS90cnVlLmdpZiIgYWxpZ249ImFic21pZGRsZSIgLz4gJy4kdGhpcy0+bGFuZygnbm90aGluZ190b19iZV9maXhlZCcpLic8YnIgLz48YnIgLz4nOw0KfWVsc2V7DQogICRncm91cHMgPSBBcnJheSgpOw0KICBmb3JlYWNoICgkaW1wb3J0YW50X2FsZXJ0cyBhcyAkYWxlcnQpIHsNCiAgICAkZ3JvdXBzWyRhbGVydFsnZ3JvdXAnXV1bXSA9ICRhbGVydDsNCiAgfQ0KICBmb3JlYWNoKCRncm91cHMgYXMgJGdyb3VwID0+ICRnYWxlcnRzKSB7DQogICAgJGNvdW50ID0gY291bnQoJGdhbGVydHMpOw0KICAgIGlmIChjb3VudCgkZ2FsZXJ0cykgPiAyMCkgew0KICAgICAgICAkcGFydHMgPSBhcnJheV9jaHVuaygkZ2FsZXJ0cywgMjApOw0KICAgICAgICAkZ2FsZXJ0cyA9ICRwYXJ0c1swXTsNCiAgICAgICAgJGNvdW50ID0gIj4gMjAiOw0KICAgIH0NCiAgICBpZiAoY291bnQoJGdhbGVydHMpID09IDEpIHsNCiAgICAgICAgJGFsZXJ0cyAuPSAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9Ob3RpZmljYXRpb25zLzIuZ2lmIiBhbGlnbj0iYWJzbWlkZGxlIiAvPiA8Yj4nLiRnYWxlcnRzWzBdWydtZXNzYWdlJ10uJzwvYj4gWycuaW1wbG9kZSgnIHwgJywkZ2FsZXJ0c1swXVsnbGlua3MnXSkuJ108YnIgLz48YnIgLz4nOw0KICAgIH1lbHNlew0KICAgICAgJGdyb3VwX3RpdGxlID0gJHRoaXMtPmxhbmcoJ2dyb3VwdGl0bGVfJy4kZ3JvdXAsIEFycmF5KCRjb3VudCkpOw0KICAgICAgJGFsZXJ0cyAuPSAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9Ob3RpZmljYXRpb25zLzIuZ2lmIiBhbGlnbj0iYWJzbWlkZGxlIiAvPiA8Yj4nLiRncm91cF90aXRsZS4nPC9iPiBbPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKG51bGwpIiBvbkNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ2ltcG9ydGFudF9ncm91cF8nLiRncm91cC4nXCcpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCciPicuJHRoaXMtPmxhbmcoJ3ZpZXdfYWxsJykuJzwvYT5dPGJyIC8+PGJyIC8+JzsNCiAgICAgICRhbGVydHMgLj0gJzxkaXYgaWQ9ImltcG9ydGFudF9ncm91cF8nLiRncm91cC4nIiBzdHlsZT0icGFkZGluZy1sZWZ0OiAzMHB4OyBkaXNwbGF5OiBub25lOyI+JzsNCiAgICAgIGZvcmVhY2ggKCRnYWxlcnRzIGFzICRhbGVydCkgew0KICAgICAgICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL05vdGlmaWNhdGlvbnMvMi5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+IDxiPicuJGFsZXJ0WydtZXNzYWdlJ10uJzwvYj4gWycuaW1wbG9kZSgnIHwgJywkYWxlcnRbJ2xpbmtzJ10pLiddPGJyIC8+PGJyIC8+JzsNCiAgICAgIH0NCiAgICAgICRhbGVydHMgLj0gJzwvZGl2Pic7DQogICAgfQ0KICB9DQp9DQoNCiRhbGVydHMgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7DQoNCiRhbGVydHMgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ2FsZXJ0c19ub3RpY2VzJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2FsZXJ0c19ub3RpY2VzJykpOw0KDQokbm90aWNlX2FsZXJ0cyA9ICR0aGlzLT5nZXROb3RpY2VBbGVydHMoKTsNCmlmIChjb3VudCgkbm90aWNlX2FsZXJ0cykgPT0gMCkgew0KICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL3N5c3RlbS90cnVlLmdpZiIgYWxpZ249ImFic21pZGRsZSIgLz4gJy4kdGhpcy0+bGFuZygnbm90aGluZ190b19iZV9maXhlZCcpLic8YnIgLz48YnIgLz4nOw0KfWVsc2V7DQogIGZvcmVhY2ggKCRub3RpY2VfYWxlcnRzIGFzICRhbGVydCkgew0KICAgICRhbGVydHMgLj0gJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvaWNvbnMvTm90aWZpY2F0aW9ucy8zLmdpZiIgYWxpZ249ImFic21pZGRsZSIgLz4gPGI+Jy4kYWxlcnRbJ21lc3NhZ2UnXS4nPC9iPiBbJy5pbXBsb2RlKCcgfCAnLCRhbGVydFsnbGlua3MnXSkuJ108YnIgLz48YnIgLz4nOw0KICB9DQp9DQoNCiRhbGVydHMgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7DQoNCg0KDQovKiBQYWdlIHNldHRpbmdzIFRhYiAqLw0KDQokcGFnZXNldHRpbmdzICA9ICc8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+JzsNCiRwYWdlc2V0dGluZ3MgLj0gJzx0cj4nOw0KJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ3BhZ2VfaWQnKS4nPC90aD4nOw0KJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ3BhZ2VfbmFtZScpLic8L3RoPic7DQokcGFnZXNldHRpbmdzIC49ICc8dGg+Jy4kdGhpcy0+bGFuZygncHJpb3JpdHknKS4nPC90aD4nOw0KJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ29nX3R5cGUnKS4nPC90aD4nOw0KJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ2tleXdvcmRzJykuJzwvdGg+JzsNCiRwYWdlc2V0dGluZ3MgLj0gJzx0aD4nLiR0aGlzLT5sYW5nKCdkZXNjcmlwdGlvbicpLic8L3RoPic7DQokcGFnZXNldHRpbmdzIC49ICc8dGg+Jy4kdGhpcy0+bGFuZygnaW5kZXgnKS4nPC90aD4nOw0KJHBhZ2VzZXR0aW5ncyAuPSAnPC90cj4nOw0KDQoNCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IE9SREVSIEJZIGhpZXJhcmNoeSBBU0MnOw0KJHJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCg0KJGogPSAwOw0Kd2hpbGUgKCRwYWdlID0gJHJlc3VsdC0+ZmV0Y2hSb3coKSkgew0KCQ0KICAgICRwcmVmaXggPSAiIjsNCiAgICAkYXV0b19wcmlvcml0eSA9IDgwOw0KICAgIGZvciAoJGkgPSAwOyAkaSA8IHN1YnN0cl9jb3VudCgkcGFnZVsnaGllcmFyY2h5J10sJy4nKTsgJGkrKykgew0KICAgICAgICAkcHJlZml4IC49ICcmcmFxdW87ICc7DQogICAgICAgICRhdXRvX3ByaW9yaXR5ICA9ICRhdXRvX3ByaW9yaXR5IC8gMjsNCiAgICB9DQogICAgaWYgKCRwYWdlWydkZWZhdWx0X2NvbnRlbnQnXSA9PSAxKSB7DQogICAgICAgICRhdXRvX3ByaW9yaXR5ID0gMTAwOw0KICAgIH0NCiAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nY29udGVudF9wcm9wcyBXSEVSRSBjb250ZW50X2lkID0gJy4kcGFnZVsnY29udGVudF9pZCddLicgQU5EIHByb3BfbmFtZSA9ICInLnN0cl9yZXBsYWNlKCcgJywnXycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2Jsb2NrJywnJykpLiciJzsNCiAgICAkcmVzdWx0MSA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCiAgICAkZGVzYyA9ICRyZXN1bHQxLT5mZXRjaFJvdygpOw0KICAgICRkZXNjcmlwdGlvbiA9ICRkZXNjWydjb250ZW50J107DQoNCiAgICAka3cgPSBhcnJheV9mbGlwKCR0aGlzLT5nZXRLZXl3b3JkU3VnZ2VzdGlvbnMoJHBhZ2VbJ2NvbnRlbnRfaWQnXSkpOw0KICAgIA0KICAgICRkZXNjcmlwdGlvbl9hdXRvID0gZmFsc2U7DQogICAgaWYgKCgkZGVzY3JpcHRpb24gPT0gIiIpICYmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZScsJ2ZhbHNlJykgPT0gJ3RydWUnKSkgew0KICAgIAkkbGFzdF9rZXl3b3JkID0gYXJyYXlfcG9wKCRrdyk7DQogICAgCSRrZXl3b3JkcyA9IGltcGxvZGUoJywgJywka3cpIC4gIiAiIC4gJHRoaXMtPmxhbmcoJ2FuZCcpIC4gIiAiIC4gJGxhc3Rfa2V5d29yZDsNCiAgICAJJGRlc2NyaXB0aW9uID0gJHRoaXMtPmxhbmcoJ2F1dG9fZ2VuZXJhdGVkJykuIjogIi5zdHJfcmVwbGFjZSgne2tleXdvcmRzfScsJGtleXdvcmRzLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9hdXRvJywnJykpOw0KICAgIAkkZGVzY3JpcHRpb24gPSBzdHJfcmVwbGFjZSgne3RpdGxlfScsJHBhZ2VbJ2NvbnRlbnRfbmFtZSddLCRkZXNjcmlwdGlvbik7DQogICAgCSRkZXNjcmlwdGlvbl9hdXRvID0gdHJ1ZTsNCiAgICB9DQogICAgDQogICAgJGRlZmF1bHRfb2d0eXBlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKTsNCg0KICAgICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRwYWdlWydjb250ZW50X2lkJ107DQogICAgJHJlc3VsdDIgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQogICAgJGluZm8gPSAkcmVzdWx0Mi0+ZmV0Y2hSb3coKTsNCiAgICAgICAgDQogICAgJHByaW9yaXR5ID0gJyhhdXRvKSAnLiRhdXRvX3ByaW9yaXR5LiclICc7DQogICAgJG9ndHlwZSA9ICcoZGVmYXVsdCkgJy4kZGVmYXVsdF9vZ3R5cGUuJyAnLiR0aGlzLT5DcmVhdGVUb29sdGlwTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgJycsICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy9TRU9Ub29sczIvaW1nL2VkaXQucG5nIiBhbGlnbj0iYWJzbWlkZGxlIiAvPicsICR0aGlzLT5sYW5nKCdlZGl0X3ZhbHVlJyksIEFycmF5KCJ3aGF0Ij0+ImVkaXRfb2d0eXBlIiwiY29udGVudF9pZCI9PiRwYWdlWydjb250ZW50X2lkJ10pKTsNCiAgICAka2V5d29yZHMgPSAnKGF1dG8pICcuY291bnQoJGt3KS4nICcuJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL1NFT1Rvb2xzMi9pbWcvZWRpdC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgaW1wbG9kZSgnLCAnLCRrdykuJzsgJy4kdGhpcy0+bGFuZygnZWRpdF92YWx1ZScpLCBBcnJheSgid2hhdCI9PiJlZGl0X2tleXdvcmRzIiwiY29udGVudF9pZCI9PiRwYWdlWydjb250ZW50X2lkJ10pKTsNCiAgICAkaW5kZXhhYmxlID0gJ3RydWUnOw0KICAgIGlmICgkaW5mb1snY29udGVudF9pZCddICE9ICIiKSB7DQogICAgICAgIGlmICgkaW5mb1sncHJpb3JpdHknXSAhPSAwKSB7DQogICAgICAgICAgJHByaW9yaXR5ID0gJzxiPicuJGluZm9bJ3ByaW9yaXR5J10gLiAnJSAnLiR0aGlzLT5DcmVhdGVUb29sdGlwTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgJycsICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy9TRU9Ub29sczIvaW1nL3Jlc2V0LnBuZyIgYWxpZ249ImFic21pZGRsZSIgLz4nLCAkdGhpcy0+bGFuZygncmVzZXRfdG9fZGVmYXVsdCcpLCBBcnJheSgid2hhdCI9PiJyZXNldF9wcmlvcml0eSIsImNvbnRlbnRfaWQiPT4kcGFnZVsnY29udGVudF9pZCddKSkgLiAnPC9iPic7DQogICAgICAgICAgJGF1dG9fcHJpb3JpdHkgPSAkaW5mb1sncHJpb3JpdHknXTsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGluZm9bJ29ndHlwZSddICE9ICIiKSB7DQogICAgICAgICAgJG9ndHlwZSA9ICc8Yj4nLiRpbmZvWydvZ3R5cGUnXSAuICcgJyAuICR0aGlzLT5DcmVhdGVUb29sdGlwTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgJycsICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvbW9kdWxlcy9TRU9Ub29sczIvaW1nL3Jlc2V0LnBuZyIgYWxpZ249ImFic21pZGRsZSIgLz4nLCAkdGhpcy0+bGFuZygncmVzZXRfdG9fZGVmYXVsdCcpLCBBcnJheSgid2hhdCI9PiJyZXNldF9vZ3R5cGUiLCJjb250ZW50X2lkIj0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpIC4gJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL1NFT1Rvb2xzMi9pbWcvZWRpdC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ2VkaXRfdmFsdWUnKSwgQXJyYXkoIndoYXQiPT4iZWRpdF9vZ3R5cGUiLCJjb250ZW50X2lkIj0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpLic8L2I+JzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGluZm9bJ2tleXdvcmRzJ10gIT0gIiIpIHsNCiAgICAgICAgICAgICRrZXl3b3JkcyA9ICc8Yj4nLmNvdW50KGV4cGxvZGUoJyAnLCRpbmZvWydrZXl3b3JkcyddKSkgLiAkdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nL21vZHVsZXMvU0VPVG9vbHMyL2ltZy9yZXNldC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ3Jlc2V0X3RvX2RlZmF1bHQnKSwgQXJyYXkoIndoYXQiPT4icmVzZXRfa2V5d29yZHMiLCJjb250ZW50X2lkIj0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpIC4gJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL1NFT1Rvb2xzMi9pbWcvZWRpdC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ2VkaXRfdmFsdWUnKSwgQXJyYXkoIndoYXQiPT4iZWRpdF9rZXl3b3JkcyIsImNvbnRlbnRfaWQiPT4kcGFnZVsnY29udGVudF9pZCddKSkuJzwvYj4nOw0KICAgICAgICB9DQogICAgICAgIGlmICgkaW5mb1snaW5kZXhhYmxlJ10gPT0gMCkgew0KICAgICAgICAgICRpbmRleGFibGUgPSAnZmFsc2UnOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgICR1cGRvd24gID0gJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvaWNvbnMvc3lzdGVtL2Fycm93LWQuZ2lmIiBib3JkZXI9IjAiIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ2RlY3JlYXNlX3ByaW9yaXR5JyksIEFycmF5KCd3aGF0Jz0+J3NldF9wcmlvcml0eScsJ3ByaW9yaXR5Jz0+JGF1dG9fcHJpb3JpdHktMTAsJ2NvbnRlbnRfaWQnPT4kcGFnZVsnY29udGVudF9pZCddKSk7DQogICAgJHVwZG93biAuPSAkdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vYXJyb3ctdS5naWYiIGJvcmRlcj0iMCIgYWxpZ249ImFic21pZGRsZSIgLz4nLCAkdGhpcy0+bGFuZygnaW5jcmVhc2VfcHJpb3JpdHknKSwgQXJyYXkoJ3doYXQnPT4nc2V0X3ByaW9yaXR5JywncHJpb3JpdHknPT4kYXV0b19wcmlvcml0eSsxMCwnY29udGVudF9pZCc9PiRwYWdlWydjb250ZW50X2lkJ10pKTsNCiAgICANCiAgICAkcGFnZXNldHRpbmdzIC49ICc8dHIgY2xhc3M9InJvdycuKCRqICUgMiArIDEpLiciPic7DQogICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPicuJHBhZ2VbJ2NvbnRlbnRfaWQnXS4nPC90ZD4nOw0KICAgICRwYWdlc2V0dGluZ3MgLj0gJzx0ZD4nLiRwcmVmaXggLicgJy4kcGFnZVsnY29udGVudF9uYW1lJ10uJzwvdGQ+JzsNCiAgICBpZiAoJHBhZ2VbJ3R5cGUnXSA9PSAnY29udGVudCcgfHwgJHBhZ2VbJ3R5cGUnXSA9PSAnY29udGVudDInICkgew0KICAgICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPicuJHVwZG93bi4nICcuJHByaW9yaXR5Lic8L3RkPic7DQogICAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+Jy4kb2d0eXBlLic8L3RkPic7DQogICAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+Jy4ka2V5d29yZHMuJzwvdGQ+JzsNCiAgICAgIGlmICgkZGVzY3JpcHRpb24gIT0gIiIpIHsNCiAgICAgICAgaWYgKCRkZXNjcmlwdGlvbl9hdXRvKSB7DQogICAgICAJICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+PGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vd2FybmluZy5naWYiIHRpdGxlPSInLnN0cmlwX3RhZ3MoJGRlc2NyaXB0aW9uKS4nIiAvPjwvdGQ+JzsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPjxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvaWNvbnMvc3lzdGVtL3RydWUuZ2lmIiB0aXRsZT0iJy5zdHJpcF90YWdzKCRkZXNjcmlwdGlvbikuJyIgLz48L3RkPic7DQogICAgICAgIH0NCiAgICAgIH1lbHNlew0KICAgICAgICANCiAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydzcF8nXSkpDQogICAgICAgICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPjxhIGhyZWY9ImVkaXRjb250ZW50LnBocD9zcF89Jy4kX0dFVFsnc3BfJ10uJyZjb250ZW50X2lkPScuJHBhZ2VbJ2NvbnRlbnRfaWQnXS4nIj48aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL3N5c3RlbS9mYWxzZS5naWYiIGJvcmRlcj0iMCIgdGl0bGU9IicuJHRoaXMtPmxhbmcoJ2NsaWNrX3RvX2FkZF9kZXNjcmlwdGlvbicpLiciIC8+PC9hPjwvdGQ+JzsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICRwYWdlc2V0dGluZ3MgLj0gJzx0ZD48YSBocmVmPSJlZGl0Y29udGVudC5waHA/X3N4Xz0nLiRfR0VUWydfc3hfJ10uJyZjb250ZW50X2lkPScuJHBhZ2VbJ2NvbnRlbnRfaWQnXS4nIj48aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL3N5c3RlbS9mYWxzZS5naWYiIGJvcmRlcj0iMCIgdGl0bGU9IicuJHRoaXMtPmxhbmcoJ2NsaWNrX3RvX2FkZF9kZXNjcmlwdGlvbicpLiciIC8+PC9hPjwvdGQ+JzsNCiAgICAgICAgDQogICAgICB9DQogICAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+Jy4kdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vJy4kaW5kZXhhYmxlLicuZ2lmIiAvPicsICR0aGlzLT5sYW5nKCd0b2dnbGUnKSwgQXJyYXkoJ3doYXQnPT4ndG9nZ2xlX2luZGV4JywnY29udGVudF9pZCc9PiRwYWdlWydjb250ZW50X2lkJ10pKS4nPC90ZD4nOw0KICAgIH1lbHNlew0KICAgIAkkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOw0KICAgIAkkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOw0KICAgIAkkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOw0KICAgIAkkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOw0KICAgIAkkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOw0KICAgIH0NCiAgICAkcGFnZXNldHRpbmdzIC49ICc8L3RyPic7DQogICAgJGorKzsNCiAgICANCn0NCg0KJHBhZ2VzZXR0aW5ncyAuPSAnPC90YWJsZT4nOw0KDQovKiBTRU8gU2V0dGluZ3MgVGFiICovDQoNCi8vIEdldCBpbWFnZSBmaWxlcyBmcm9tIC91cGxvYWRzL2ltYWdlcw0KJGZpbGVzX2xpc3QgPSBBcnJheSgkdGhpcy0+bGFuZygnbm9uZScpPT4iIik7DQokZHAgPSBvcGVuZGlyKCRnQ21zLT5jb25maWdbJ3Jvb3RfcGF0aCddLicvdXBsb2Fkcy9pbWFnZXMnKTsNCndoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRwKSkgew0KICAgIGlmIChzdHJwb3Moc3Vic3RyKCRmaWxlLCAtNSksJy5naWYnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgJGZpbGVzX2xpc3RbJGZpbGVdID0gJGZpbGU7DQogICAgfQ0KICAgIGlmIChzdHJwb3Moc3Vic3RyKCRmaWxlLCAtNSksJy5wbmcnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgJGZpbGVzX2xpc3RbJGZpbGVdID0gJGZpbGU7DQogICAgfQ0KICAgIGlmIChzdHJwb3Moc3Vic3RyKCRmaWxlLCAtNSksJy5qcGcnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgJGZpbGVzX2xpc3RbJGZpbGVdID0gJGZpbGU7DQogICAgfQ0KICAgIGlmIChzdHJwb3Moc3Vic3RyKCRmaWxlLCAtNSksJy5qcGVnJykgIT09IGZhbHNlKSB7DQogICAgICAgICRmaWxlc19saXN0WyRmaWxlXSA9ICRmaWxlOw0KICAgIH0NCn0NCmNsb3NlZGlyKCRkcCk7DQoNCiRzZXR0aW5ncyAgPSAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KG51bGwsICdjaGFuZ2VzZXR0aW5ncycpOw0KDQovKiBQYWdlIFRpdGxlICovDQokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ3RpdGxlX2Rlc2NyaXB0aW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3RpdGxlX2Rlc2NyaXB0aW9uJykpOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ3RpdGxlX3RpdGxlJykuJzo8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICd0aXRsZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aXRsZScsJ3t0aXRsZX0gfCB7JHNpdGVuYW1lfSAtIHskdGl0bGVfa2V5d29yZHN9JyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ3RpdGxlX3RpdGxlX2hlbHAnKS4nPC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygndGl0bGVfbWV0YV90aXRsZScpLic6PC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAndGl0bGVfbWV0YScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aXRsZV9tZXRhJywne3RpdGxlfSB8IHskc2l0ZW5hbWV9JyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ3RpdGxlX21ldGFfaGVscCcpLic8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdkZXNjcmlwdGlvbl9ibG9ja190aXRsZScpLic6PC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAnZGVzY3JpcHRpb25fYmxvY2snLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYmxvY2snLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnZGVzY3JpcHRpb25fYmxvY2tfaGVscCcpLic8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nIC4gJHRoaXMtPkxhbmcoJ2Rlc2NyaXB0aW9uX2F1dG9fZ2VuZXJhdGUnKSAuICc6ICcgLiAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveChudWxsLCAnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZScsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9hdXRvX2dlbmVyYXRlJywxKSkgLiAnPC9wPic7DQoNCg0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ2Rlc2NyaXB0aW9uX2F1dG9fdGl0bGUnKS4nOjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ2Rlc2NyaXB0aW9uX2F1dG8nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYXV0bycsJ1RoaXMgcGFnZSBjb3ZlcnMgdGhlIHRvcGljcyB7a2V5d29yZHN9JyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ2Rlc2NyaXB0aW9uX2F1dG9faGVscCcpLic8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdkZWZhdWx0X2tleXdvcmRzX3RpdGxlJykuJzo8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdkZWZhdWx0X2tleXdvcmRzJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfa2V5d29yZHMnLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnZGVmYXVsdF9rZXl3b3Jkc19oZWxwJykuJzwvcD4nOw0KJHNldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOw0KDQovKiBNRVRBIFR5cGVzICovDQokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ21ldGFfdHlwZScsICR0aGlzLT5MYW5nKCd0aXRsZV9tZXRhX3R5cGUnKSk7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+JyAuICR0aGlzLT5MYW5nKCdtZXRhX2NyZWF0ZV9zdGFuZGFyZCcpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdtZXRhX3N0YW5kYXJkJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfc3RhbmRhcmQnLDEpKSAuICc8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nIC4gJHRoaXMtPkxhbmcoJ21ldGFfY3JlYXRlX2R1YmxpbmNvcmUnKSAuICc6ICcgLiAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveChudWxsLCAnbWV0YV9kdWJsaW5jb3JlJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfZHVibGluY29yZScsMSkpIC4gJzwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicgLiAkdGhpcy0+TGFuZygnbWV0YV9jcmVhdGVfb3BlbmdyYXBoJykgLiAnOiAnIC4gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3gobnVsbCwgJ21ldGFfb3BlbmdyYXBoJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoJywxKSkgLiAnPC9wPic7DQokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7DQoNCi8qIE1FVEEgRGVmYXVsdHMgKi8NCiRzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydChudWxsLCAnbWV0YV9kZWZhdWx0cycsICR0aGlzLT5MYW5nKCd0aXRsZV9tZXRhX2RlZmF1bHRzJykpOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfcHVibGlzaGVyJykuJzo8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX3B1Ymxpc2hlcicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3B1Ymxpc2hlcicsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX3B1Ymxpc2hlcl9oZWxwJykuJzwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfY29udHJpYnV0b3InKS4nOjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfY29udHJpYnV0b3InLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9jb250cmlidXRvcicsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX2NvbnRyaWJ1dG9yX2hlbHAnKS4nPC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9jb3B5cmlnaHQnKS4nOjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfY29weXJpZ2h0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfY29weXJpZ2h0JywnKEMpICcuZGF0ZSgnWScpLicuIEFsbCByaWdodHMgcmVzZXJ2ZWQuJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ21ldGFfY29weXJpZ2h0X2hlbHAnKS4nPC9wPjxiciAvPic7DQoNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGI+Jy4kdGhpcy0+bGFuZygnbWV0YV9sb2NhdGlvbl9kZXNjcmlwdGlvbicpLic8L2I+PC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9sb2NhdGlvbicpLic6PC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAnbWV0YV9sb2NhdGlvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xvY2F0aW9uJywnJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ21ldGFfbG9jYXRpb25faGVscCcpLic8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX3JlZ2lvbicpLic6PC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAnbWV0YV9yZWdpb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9yZWdpb24nLCcnKSwgNSwgNSkuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX3JlZ2lvbl9oZWxwJykuJzwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfbGF0aXR1ZGUnKS4nOjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfbGF0aXR1ZGUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sYXRpdHVkZScsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX2xhdGl0dWRlX2hlbHAnKS4nPC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9sb25naXR1ZGUnKS4nOjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfbG9uZ2l0dWRlJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfbG9uZ2l0dWRlJywnJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ21ldGFfbG9uZ2l0dWRlX2hlbHAnKS4nPC9wPjxiciAvPic7DQoNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGI+Jy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfZGVzY3JpcHRpb24nKS4nPC9iPjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfb3BlbmdyYXBoX3RpdGxlJykuJzo8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX29wZW5ncmFwaF90aXRsZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF90aXRsZScsJ3t0aXRsZX0nKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfdGl0bGVfaGVscCcpLic8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX29wZW5ncmFwaF90eXBlJykuJzo8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX29wZW5ncmFwaF90eXBlJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfdHlwZV9oZWxwJykuJzwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfb3BlbmdyYXBoX3NpdGVuYW1lJykuJzo8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZScsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZV9oZWxwJykuJzwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfb3BlbmdyYXBoX2ltYWdlJykuJzo8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bihudWxsLCAnbWV0YV9vcGVuZ3JhcGhfaW1hZ2UnLCAkZmlsZXNfbGlzdCwgbnVsbCwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2ltYWdlJywnJykpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfaW1hZ2VfaGVscCcpLic8L3A+JzsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX29wZW5ncmFwaF9hZG1pbnMnKS4nOjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfb3BlbmdyYXBoX2FkbWlucycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hZG1pbnMnLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfYWRtaW5zX2hlbHAnKS4nPC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfYXBwbGljYXRpb24nKS4nOjwvcD4nOw0KJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJywnJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uX2hlbHAnKS4nPC9wPic7DQokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7DQoNCi8qIEFkZGl0aW9uYWwgTWV0YSBUYWdzICovDQokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ2FkZGl0aW9uYWxfbWV0YScsICR0aGlzLT5MYW5nKCd0aXRsZV9hZGRpdGlvbmFsX21ldGFfdGFncycpKTsNCiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdhZGRpdGlvbmFsX21ldGFfdGFnc190aXRsZScpLic6PC9wPic7DQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCBudWxsLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWRkaXRpb25hbF9tZXRhX3RhZ3MnLCcnKSwgJ2FkZGl0aW9uYWxfbWV0YV90YWdzJykuJyAnLiR0aGlzLT5sYW5nKCdhZGRpdGlvbmFsX21ldGFfdGFnc19oZWxwJykuJzwvcD4nOw0KJHNldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOw0KDQokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KG51bGwsICdzYXZlX21ldGFfc2V0dGluZ3MnLCAkdGhpcy0+bGFuZygnc2F2ZScpKS4nPC9wPic7DQokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsNCg0KJHNldHRpbmdzIC49ICc8YnIgLz48YnIgLz4nLiR0aGlzLT5sYW5nKCdoZWxwX2Rlc2NyaXB0aW9uX2NvbnRlbnQnKTsNCg0KLyogU0lURU1BUCBTZXR0aW5ncyAqLw0KDQokc3NldHRpbmdzICA9ICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQobnVsbCwgJ2NoYW5nZXNldHRpbmdzJyk7DQoNCiRzc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ3NpdGVtYXBfZGVzY3JpcHRpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfc2l0ZW1hcF9kZXNjcmlwdGlvbicpKTsNCiRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+JyAuICR0aGlzLT5MYW5nKCdjcmVhdGVfc2l0ZW1hcF90aXRsZScpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdjcmVhdGVfc2l0ZW1hcCcsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfc2l0ZW1hcCcsMSkpIC4gJzwvcD4nOw0KaWYgKGluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpKSB7DQogICRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+JyAuICR0aGlzLT5MYW5nKCdwdXNoX3NpdGVtYXBfdGl0bGUnKSAuICc6ICcgLiAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveChudWxsLCAncHVzaF9zaXRlbWFwJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3B1c2hfc2l0ZW1hcCcsMCkpIC4gJzwvcD4nOw0KfWVsc2V7DQogICRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+JyAuICR0aGlzLT5MYW5nKCdwdXNoX3NpdGVtYXBfdGl0bGUnKSAuICc6ICcgLiAkdGhpcy0+TGFuZygnbm9fdXJsX2ZvcGVuJykgLiAnPC9wPic7DQp9DQokc3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicgLiAkdGhpcy0+TGFuZygnY3JlYXRlX3JvYm90c190aXRsZScpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdjcmVhdGVfcm9ib3RzJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9yb2JvdHMnLDEpKSAuICc8L3A+JzsNCg0KJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCd2ZXJpZmljYXRpb25fdGl0bGUnKS4nOjwvcD4nOw0KJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICd2ZXJpZmljYXRpb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndmVyaWZpY2F0aW9uJywnJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ3ZlcmlmaWNhdGlvbl9oZWxwJykuJzwvcD4nOw0KJHNzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsNCg0KJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQobnVsbCwgJ3NhdmVfc2l0ZW1hcF9zZXR0aW5ncycsICR0aGlzLT5sYW5nKCdzYXZlJykpLic8L3A+JzsNCg0KJHNzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOw0KDQokc3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQobnVsbCwgJ2NoYW5nZXNldHRpbmdzJyk7DQokc3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KG51bGwsICdyZWdlbmVyYXRlX3NpdGVtYXAnLCAkdGhpcy0+TGFuZygndGl0bGVfcmVnZW5lcmF0ZV9zaXRlbWFwJykpOw0KJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+JzsNCiRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KG51bGwsICdkb19yZWdlbmVyYXRlJywgJHRoaXMtPmxhbmcoJ2J1dHRvbl9yZWdlbmVyYXRlX3NpdGVtYXAnKSkuJzwvcD4nOw0KJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+JzsNCiRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPmxhbmcoJ3RleHRfcmVnZW5lcmF0ZV9zaXRlbWFwJykuJzwvcD4nOw0KJHNzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsNCiRzc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsNCg0KJHNzZXR0aW5ncyAuPSAnPGJyIC8+PGJyIC8+Jy4kdGhpcy0+bGFuZygnaGVscF9zaXRlbWFwX3JvYm90cycpOw0KDQovKiBLRVlXT1JEIFNldHRpbmdzICovDQoNCiRrc2V0dGluZ3MgID0gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydChudWxsLCAnY2hhbmdlc2V0dGluZ3MnKTsNCg0KJGtzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydChudWxsLCAna2V5d29yZF93ZWlnaHRfZGVzY3JpcHRpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfa2V5d29yZF93ZWlnaHQnKSk7DQoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ2tleXdvcmRfbWlubGVuZ3RoX3RpdGxlJykuJzo8L3A+JzsNCiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAna2V5d29yZF9taW5sZW5ndGgnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5sZW5ndGgnLCc2JyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF9taW5sZW5ndGhfaGVscCcpLic8L3A+JzsNCiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygna2V5d29yZF90aXRsZV93ZWlnaHRfdGl0bGUnKS4nOjwvcD4nOw0KJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdrZXl3b3JkX3RpdGxlX3dlaWdodCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdrZXl3b3JkX3RpdGxlX3dlaWdodCcsJzYnKSwgMikuJyAnLiR0aGlzLT5sYW5nKCdrZXl3b3JkX3RpdGxlX3dlaWdodF9oZWxwJykuJzwvcD4nOw0KJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdrZXl3b3JkX2Rlc2NyaXB0aW9uX3dlaWdodF90aXRsZScpLic6PC9wPic7DQoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ2tleXdvcmRfZGVzY3JpcHRpb25fd2VpZ2h0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2tleXdvcmRfZGVzY3JpcHRpb25fd2VpZ2h0JywnNCcpLCAyKS4nICcuJHRoaXMtPmxhbmcoJ2tleXdvcmRfZGVzY3JpcHRpb25fd2VpZ2h0X2hlbHAnKS4nPC9wPic7DQoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ2tleXdvcmRfaGVhZGxpbmVfd2VpZ2h0X3RpdGxlJykuJzo8L3A+JzsNCiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAna2V5d29yZF9oZWFkbGluZV93ZWlnaHQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9oZWFkbGluZV93ZWlnaHQnLCcyJyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF9oZWFkbGluZV93ZWlnaHRfaGVscCcpLic8L3A+JzsNCiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygna2V5d29yZF9jb250ZW50X3dlaWdodF90aXRsZScpLic6PC9wPic7DQoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ2tleXdvcmRfY29udGVudF93ZWlnaHQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9jb250ZW50X3dlaWdodCcsJzEnKSwgMikuJyAnLiR0aGlzLT5sYW5nKCdrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0X2hlbHAnKS4nPC9wPic7DQoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ2tleXdvcmRfbWluaW11bV93ZWlnaHRfdGl0bGUnKS4nOjwvcD4nOw0KJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdrZXl3b3JkX21pbmltdW1fd2VpZ2h0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2tleXdvcmRfbWluaW11bV93ZWlnaHQnLCc3JyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF9taW5pbXVtX3dlaWdodF9oZWxwJykuJzwvcD4nOw0KJGtzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsNCg0KJGtzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydChudWxsLCAna2V5d29yZF9leGNsdWRlX2Rlc2NyaXB0aW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX2tleXdvcmRfZXhjbHVkZScpKTsNCiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygna2V5d29yZF9leGNsdWRlX3RpdGxlJykuJzo8L3A+JzsNCiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCBudWxsLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9leGNsdWRlJywnJyksICdrZXl3b3JkX2V4Y2x1ZGUnKS4nICcuJHRoaXMtPmxhbmcoJ2tleXdvcmRfZXhjbHVkZV9oZWxwJykuJzwvcD4nOw0KJGtzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsNCg0KJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQobnVsbCwgJ3NhdmVfa2V5d29yZF9zZXR0aW5ncycsICR0aGlzLT5sYW5nKCdzYXZlJykpLic8L3A+JzsNCiRrc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsNCg0KJGtzZXR0aW5ncyAuPSAnPGJyIC8+PGJyIC8+Jy4kdGhpcy0+bGFuZygnaGVscF9rZXl3b3JkX2dlbmVyYXRvcicpOw0KDQoNCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxlcnRzJywkYWxlcnRzKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbigncGFnZXNldHRpbmdzJywkcGFnZXNldHRpbmdzKTsNCiR0aGlzLT5zbWFydHktPmFzc2lnbignbWV0YV9mb3JtJywkc2V0dGluZ3MpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzaXRlbWFwX2Zvcm0nLCRzc2V0dGluZ3MpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdrZXl3b3JkX2Zvcm0nLCRrc2V0dGluZ3MpOw0KDQplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWlucGFuZWwudHBsJyk7DQoNCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiAoISAkdGhpcy0+Q2hlY2tBY2Nlc3MoKSkKewogIHJldHVybiAkdGhpcy0+RGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwp9CgovKiAtPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQoKQ29kZSBmb3IgU0VPVG9vbHMyICJkZWZhdWx0YWRtaW4iIGFkbWluIGFjdGlvbgogCi09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCiAKVHlwaWNhbGx5LCB0aGlzIHdpbGwgZGlzcGxheSBzb21ldGhpbmcgZnJvbSBhIHRlbXBsYXRlCm9yIGRvIHNvbWUgb3RoZXIgdGFzay4KIAoqLwokZGIgPSAmJGdDbXMtPkdldERiKCk7CiRtZXNzYWdlID0gJyc7CgovLyBEbyB0aGUgYWN0aW9uCmlmIChpc3NldCgkX0dFVFsnd2hhdCddKSAmJiAkX0dFVFsnd2hhdCddID09ICd0b2dnbGVfaW5kZXgnKSB7CiAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgV0hFUkUgY29udGVudF9pZCA9ICcuJF9HRVRbJ2NvbnRlbnRfaWQnXTsKICAkcmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICRpbmZvID0gJHJlc3VsdC0+ZmV0Y2hSb3coKTsKICBpZiAoJGluZm9bJ2luZGV4YWJsZSddID09ICIxIikgewogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBTRVQgaW5kZXhhYmxlID0gMCBXSEVSRSBjb250ZW50X2lkID0gJy4kX0dFVFsnY29udGVudF9pZCddOwogIH1lbHNlewogICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFNFVCBjb250ZW50X2lkID0gJy4kX0dFVFsnY29udGVudF9pZCddLicsIGluZGV4YWJsZSA9IDAgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgaW5kZXhhYmxlID0gMSc7CiAgfQogICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKCiAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfcm9ib3RzJywxKSA9PSAxKSB7CiAgICAkdGhpcy0+Y3JlYXRlUm9ib3RzVFhUKCk7CiAgfQogIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3NpdGVtYXAnLDEpID09IDEpIHsKICAgICR0aGlzLT5jcmVhdGVTaXRlbWFwKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwdXNoX3NpdGVtYXAnLDEpID09IDEpOwogIH0KICAkX0dFVFsndGFiJ10gPSAncGFnZWRlc2NyaXB0aW9ucyc7Cn0KCmlmIChpc3NldCgkX0dFVFsnd2hhdCddKSAmJiAkX0dFVFsnd2hhdCddID09ICdzZXRfcHJpb3JpdHknKSB7CiAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFNFVCBjb250ZW50X2lkID0gJy4kX0dFVFsnY29udGVudF9pZCddLicsIHByaW9yaXR5ID0gJy4kX0dFVFsncHJpb3JpdHknXS4nIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIHByaW9yaXR5ID0gJy4kX0dFVFsncHJpb3JpdHknXTsKICAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKICAkX0dFVFsndGFiJ10gPSAncGFnZWRlc2NyaXB0aW9ucyc7CiAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfc2l0ZW1hcCcsMSkgPT0gMSkgewogICAgJHRoaXMtPmNyZWF0ZVNpdGVtYXAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ3B1c2hfc2l0ZW1hcCcsMSkgPT0gMSk7CiAgfQp9CgppZiAoaXNzZXQoJF9HRVRbJ3doYXQnXSkgJiYgJF9HRVRbJ3doYXQnXSA9PSAncmVzZXRfcHJpb3JpdHknKSB7CiAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBTRVQgcHJpb3JpdHkgPSBOVUxMIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ107CiAgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgJF9HRVRbJ3RhYiddID0gJ3BhZ2VkZXNjcmlwdGlvbnMnOwogIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3NpdGVtYXAnLDEpID09IDEpIHsKICAgICR0aGlzLT5jcmVhdGVTaXRlbWFwKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwdXNoX3NpdGVtYXAnLDEpID09IDEpOwogIH0KfQoKaWYgKGlzc2V0KCRfR0VUWyd3aGF0J10pICYmICRfR0VUWyd3aGF0J10gPT0gJ3Jlc2V0X29ndHlwZScpIHsKICAkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFNFVCBvZ3R5cGUgPSBOVUxMIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ107CiAgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgJF9HRVRbJ3RhYiddID0gJ3BhZ2VkZXNjcmlwdGlvbnMnOwp9CgppZiAoaXNzZXQoJF9HRVRbJ3doYXQnXSkgJiYgJF9HRVRbJ3doYXQnXSA9PSAncmVzZXRfa2V5d29yZHMnKSB7CiAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3Nlb3Rvb2xzMiBTRVQga2V5d29yZHMgPSBOVUxMIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ107CiAgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgJF9HRVRbJ3RhYiddID0gJ3BhZ2VkZXNjcmlwdGlvbnMnOwp9CgppZiAoaXNzZXQoJF9HRVRbJ3doYXQnXSkgJiYgJF9HRVRbJ3doYXQnXSA9PSAnZWRpdF9vZ3R5cGUnKSB7CiAgZWNobyAkdGhpcy0+UmVkaXJlY3QobnVsbCwgJ2VkaXRfb2d0eXBlJywgJHRoaXMtPnJldHVybmlkLCBBcnJheSgnY29udGVudF9pZCc9PiRfR0VUWydjb250ZW50X2lkJ10pKTsKfQoKaWYgKGlzc2V0KCRfR0VUWyd3aGF0J10pICYmICRfR0VUWyd3aGF0J10gPT0gJ2VkaXRfa2V5d29yZHMnKSB7CiAgZWNobyAkdGhpcy0+UmVkaXJlY3QobnVsbCwgJ2VkaXRfa2V5d29yZHMnLCAkdGhpcy0+cmV0dXJuaWQsIEFycmF5KCdjb250ZW50X2lkJz0+JF9HRVRbJ2NvbnRlbnRfaWQnXSkpOwp9CgoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJfaGVhZGVycycsJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpLgokdGhpcy0+U2V0VGFiSGVhZGVyKCdzZW9hbGVydHMnLCR0aGlzLT5MYW5nKCd0aXRsZV9zZW9hbGVydHMnKSkuCiR0aGlzLT5TZXRUYWJIZWFkZXIoJ3BhZ2VkZXNjcmlwdGlvbnMnLCR0aGlzLT5MYW5nKCd0aXRsZV9wYWdlZGVzY3JpcHRpb25zJyksIChpc3NldCgkX0dFVFsndGFiJ10pICYmICRfR0VUWyd0YWInXSA9PSAncGFnZWRlc2NyaXB0aW9ucycpKS4KJHRoaXMtPlNldFRhYkhlYWRlcignbWV0YXNldHRpbmdzJywkdGhpcy0+TGFuZygndGl0bGVfbWV0YXNldHRpbmdzJyksIChpc3NldCgkX0dFVFsndGFiJ10pICYmICRfR0VUWyd0YWInXSA9PSAnbWV0YXNldHRpbmdzJykpLgokdGhpcy0+U2V0VGFiSGVhZGVyKCdzaXRlbWFwc2V0dGluZ3MnLCR0aGlzLT5MYW5nKCd0aXRsZV9zaXRlbWFwc2V0dGluZ3MnKSwgKGlzc2V0KCRfR0VUWyd0YWInXSkgJiYgJF9HRVRbJ3RhYiddID09ICdzaXRlbWFwc2V0dGluZ3MnKSkuCiR0aGlzLT5TZXRUYWJIZWFkZXIoJ2tleXdvcmRzZXR0aW5ncycsJHRoaXMtPkxhbmcoJ3RpdGxlX2tleXdvcmRzZXR0aW5ncycpLCAoaXNzZXQoJF9HRVRbJ3RhYiddKSAmJiAkX0dFVFsndGFiJ10gPT0gJ2tleXdvcmRzZXR0aW5ncycpKS4KJHRoaXMtPkVuZFRhYkhlYWRlcnMoKS4kdGhpcy0+U3RhcnRUYWJDb250ZW50KCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZF90YWInLCR0aGlzLT5FbmRUYWIoKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGFiX2Zvb3RlcnMnLCR0aGlzLT5FbmRUYWJDb250ZW50KCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X3Nlb2FsZXJ0c190YWInLCR0aGlzLT5TdGFydFRhYignc2VvYWxlcnRzJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0X3BhZ2VkZXNjcmlwdGlvbnNfdGFiJywkdGhpcy0+U3RhcnRUYWIoJ3BhZ2VkZXNjcmlwdGlvbnMnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfbWV0YXNldHRpbmdzX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdtZXRhc2V0dGluZ3MnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfc2l0ZW1hcHNldHRpbmdzX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdzaXRlbWFwc2V0dGluZ3MnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRfa2V5d29yZHNldHRpbmdzX3RhYicsJHRoaXMtPlN0YXJ0VGFiKCdrZXl3b3Jkc2V0dGluZ3MnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfc2VjdGlvbicsJ2RlZmF1bHRhZG1pbicpOwoKaWYgKGlzc2V0KCRfR0VUWydtZXNzYWdlJ10pKSB7CiAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywkdGhpcy0+c2hvd01lc3NhZ2UoJHRoaXMtPmxhbmcoJF9HRVRbJ21lc3NhZ2UnXSkpKTsKfSBlbHNlIHsKICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCcnKTsKfQoKLyogU0VPIEFsZXJ0cyBUYWIgKi8KCiRhbGVydHMgID0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ2FsZXJ0c191cmdlbnQnLCAkdGhpcy0+TGFuZygndGl0bGVfYWxlcnRzX3VyZ2VudCcpKTsKCiR1cmdlbnRfYWxlcnRzID0gJHRoaXMtPmdldFVyZ2VudEFsZXJ0cygpOwoKaWYgKGNvdW50KCR1cmdlbnRfYWxlcnRzKSA9PSAwKSB7CiAgJGFsZXJ0cyAuPSAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vdHJ1ZS5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+ICcuJHRoaXMtPmxhbmcoJ25vdGhpbmdfdG9fYmVfZml4ZWQnKS4nPGJyIC8+PGJyIC8+JzsKfWVsc2V7CiAgJGdyb3VwcyA9IEFycmF5KCk7CiAgZm9yZWFjaCAoJHVyZ2VudF9hbGVydHMgYXMgJGFsZXJ0KSB7CiAgICAkZ3JvdXBzWyRhbGVydFsnZ3JvdXAnXV1bXSA9ICRhbGVydDsKICB9CiAgZm9yZWFjaCgkZ3JvdXBzIGFzICRncm91cCA9PiAkZ2FsZXJ0cykgewogICAgJGNvdW50ID0gY291bnQoJGdhbGVydHMpOwogICAgaWYgKGNvdW50KCRnYWxlcnRzKSA+IDIwKSB7CiAgICAgICRwYXJ0cyA9IGFycmF5X2NodW5rKCRnYWxlcnRzLCAyMCk7CiAgICAgICRnYWxlcnRzID0gJHBhcnRzWzBdOwogICAgICAkY291bnQgPSAiPiAyMCI7CiAgICB9CiAgICBpZiAoY291bnQoJGdhbGVydHMpID09IDEpIHsKICAgICAgJGFsZXJ0cyAuPSAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9Ob3RpZmljYXRpb25zLzEuZ2lmIiBhbGlnbj0iYWJzbWlkZGxlIiAvPiA8Yj4nLiRnYWxlcnRzWzBdWydtZXNzYWdlJ10uJzwvYj4gWycuaW1wbG9kZSgnIHwgJywkZ2FsZXJ0c1swXVsnbGlua3MnXSkuJ108YnIgLz48YnIgLz4nOwogICAgfWVsc2V7CiAgICAgICRncm91cF90aXRsZSA9ICR0aGlzLT5sYW5nKCdncm91cHRpdGxlXycuJGdyb3VwLCBBcnJheSgkY291bnQpKTsKICAgICAgJGFsZXJ0cyAuPSAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9Ob3RpZmljYXRpb25zLzEuZ2lmIiBhbGlnbj0iYWJzbWlkZGxlIiAvPiA8Yj4nLiRncm91cF90aXRsZS4nPC9iPiBbPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKG51bGwpIiBvbkNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcJ3VyZ2VudF9ncm91cF8nLiRncm91cC4nXCcpLnN0eWxlLmRpc3BsYXkgPSBcJ2Jsb2NrXCciPicuJHRoaXMtPmxhbmcoJ3ZpZXdfYWxsJykuJzwvYT5dPGJyIC8+PGJyIC8+JzsKICAgICAgJGFsZXJ0cyAuPSAnPGRpdiBpZD0idXJnZW50X2dyb3VwXycuJGdyb3VwLiciIHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDMwcHg7IGRpc3BsYXk6IG5vbmU7Ij4nOwogICAgICBmb3JlYWNoICgkZ2FsZXJ0cyBhcyAkYWxlcnQpIHsKICAgICAgICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL05vdGlmaWNhdGlvbnMvMS5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+IDxiPicuJGFsZXJ0WydtZXNzYWdlJ10uJzwvYj4gWycuaW1wbG9kZSgnIHwgJywkYWxlcnRbJ2xpbmtzJ10pLiddPGJyIC8+PGJyIC8+JzsKICAgICAgfQogICAgICAkYWxlcnRzIC49ICc8L2Rpdj4nOwogICAgfQogIH0KfQoKJGFsZXJ0cyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsKCiRhbGVydHMgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ2FsZXJ0c19pbXBvcnRhbnQnLCAkdGhpcy0+TGFuZygndGl0bGVfYWxlcnRzX2ltcG9ydGFudCcpKTsKCiRpbXBvcnRhbnRfYWxlcnRzID0gJHRoaXMtPmdldEltcG9ydGFudEFsZXJ0cygpOwppZiAoY291bnQoJGltcG9ydGFudF9hbGVydHMpID09IDApIHsKICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL3N5c3RlbS90cnVlLmdpZiIgYWxpZ249ImFic21pZGRsZSIgLz4gJy4kdGhpcy0+bGFuZygnbm90aGluZ190b19iZV9maXhlZCcpLic8YnIgLz48YnIgLz4nOwp9ZWxzZXsKICAkZ3JvdXBzID0gQXJyYXkoKTsKICBmb3JlYWNoICgkaW1wb3J0YW50X2FsZXJ0cyBhcyAkYWxlcnQpIHsKICAgICRncm91cHNbJGFsZXJ0Wydncm91cCddXVtdID0gJGFsZXJ0OwogIH0KICBmb3JlYWNoKCRncm91cHMgYXMgJGdyb3VwID0+ICRnYWxlcnRzKSB7CiAgICAkY291bnQgPSBjb3VudCgkZ2FsZXJ0cyk7CiAgICBpZiAoY291bnQoJGdhbGVydHMpID4gMjApIHsKICAgICAgJHBhcnRzID0gYXJyYXlfY2h1bmsoJGdhbGVydHMsIDIwKTsKICAgICAgJGdhbGVydHMgPSAkcGFydHNbMF07CiAgICAgICRjb3VudCA9ICI+IDIwIjsKICAgIH0KICAgIGlmIChjb3VudCgkZ2FsZXJ0cykgPT0gMSkgewogICAgICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL05vdGlmaWNhdGlvbnMvMi5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+IDxiPicuJGdhbGVydHNbMF1bJ21lc3NhZ2UnXS4nPC9iPiBbJy5pbXBsb2RlKCcgfCAnLCRnYWxlcnRzWzBdWydsaW5rcyddKS4nXTxiciAvPjxiciAvPic7CiAgICB9ZWxzZXsKICAgICAgJGdyb3VwX3RpdGxlID0gJHRoaXMtPmxhbmcoJ2dyb3VwdGl0bGVfJy4kZ3JvdXAsIEFycmF5KCRjb3VudCkpOwogICAgICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL05vdGlmaWNhdGlvbnMvMi5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+IDxiPicuJGdyb3VwX3RpdGxlLic8L2I+IFs8YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQobnVsbCkiIG9uQ2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwnaW1wb3J0YW50X2dyb3VwXycuJGdyb3VwLidcJykuc3R5bGUuZGlzcGxheSA9IFwnYmxvY2tcJyI+Jy4kdGhpcy0+bGFuZygndmlld19hbGwnKS4nPC9hPl08YnIgLz48YnIgLz4nOwogICAgICAkYWxlcnRzIC49ICc8ZGl2IGlkPSJpbXBvcnRhbnRfZ3JvdXBfJy4kZ3JvdXAuJyIgc3R5bGU9InBhZGRpbmctbGVmdDogMzBweDsgZGlzcGxheTogbm9uZTsiPic7CiAgICAgIGZvcmVhY2ggKCRnYWxlcnRzIGFzICRhbGVydCkgewogICAgICAgICRhbGVydHMgLj0gJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvaWNvbnMvTm90aWZpY2F0aW9ucy8yLmdpZiIgYWxpZ249ImFic21pZGRsZSIgLz4gPGI+Jy4kYWxlcnRbJ21lc3NhZ2UnXS4nPC9iPiBbJy5pbXBsb2RlKCcgfCAnLCRhbGVydFsnbGlua3MnXSkuJ108YnIgLz48YnIgLz4nOwogICAgICB9CiAgICAgICRhbGVydHMgLj0gJzwvZGl2Pic7CiAgICB9CiAgfQp9CgokYWxlcnRzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwoKJGFsZXJ0cyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydChudWxsLCAnYWxlcnRzX25vdGljZXMnLCAkdGhpcy0+TGFuZygndGl0bGVfYWxlcnRzX25vdGljZXMnKSk7Cgokbm90aWNlX2FsZXJ0cyA9ICR0aGlzLT5nZXROb3RpY2VBbGVydHMoKTsKaWYgKGNvdW50KCRub3RpY2VfYWxlcnRzKSA9PSAwKSB7CiAgJGFsZXJ0cyAuPSAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vdHJ1ZS5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+ICcuJHRoaXMtPmxhbmcoJ25vdGhpbmdfdG9fYmVfZml4ZWQnKS4nPGJyIC8+PGJyIC8+JzsKfWVsc2V7CiAgZm9yZWFjaCAoJG5vdGljZV9hbGVydHMgYXMgJGFsZXJ0KSB7CiAgICAkYWxlcnRzIC49ICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL05vdGlmaWNhdGlvbnMvMy5naWYiIGFsaWduPSJhYnNtaWRkbGUiIC8+IDxiPicuJGFsZXJ0WydtZXNzYWdlJ10uJzwvYj4gWycuaW1wbG9kZSgnIHwgJywkYWxlcnRbJ2xpbmtzJ10pLiddPGJyIC8+PGJyIC8+JzsKICB9Cn0KCiRhbGVydHMgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7CgoKCi8qIFBhZ2Ugc2V0dGluZ3MgVGFiICovCgokcGFnZXNldHRpbmdzICA9ICc8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSI+JzsKJHBhZ2VzZXR0aW5ncyAuPSAnPHRyPic7CiRwYWdlc2V0dGluZ3MgLj0gJzx0aD4nLiR0aGlzLT5sYW5nKCdwYWdlX2lkJykuJzwvdGg+JzsKJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ3BhZ2VfbmFtZScpLic8L3RoPic7CiRwYWdlc2V0dGluZ3MgLj0gJzx0aD4nLiR0aGlzLT5sYW5nKCdwcmlvcml0eScpLic8L3RoPic7CiRwYWdlc2V0dGluZ3MgLj0gJzx0aD4nLiR0aGlzLT5sYW5nKCdvZ190eXBlJykuJzwvdGg+JzsKJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ2tleXdvcmRzJykuJzwvdGg+JzsKJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ2Rlc2NyaXB0aW9uJykuJzwvdGg+JzsKJHBhZ2VzZXR0aW5ncyAuPSAnPHRoPicuJHRoaXMtPmxhbmcoJ2luZGV4JykuJzwvdGg+JzsKJHBhZ2VzZXR0aW5ncyAuPSAnPC90cj4nOwoKCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IE9SREVSIEJZIGhpZXJhcmNoeSBBU0MnOwokcmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKJGogPSAwOwp3aGlsZSAoJHBhZ2UgPSAkcmVzdWx0LT5mZXRjaFJvdygpKSB7CgogICRwcmVmaXggPSAiIjsKICAkYXV0b19wcmlvcml0eSA9IDgwOwogIGZvciAoJGkgPSAwOyAkaSA8IHN1YnN0cl9jb3VudCgkcGFnZVsnaGllcmFyY2h5J10sJy4nKTsgJGkrKykgewogICAgJHByZWZpeCAuPSAnJnJhcXVvOyAnOwogICAgJGF1dG9fcHJpb3JpdHkgID0gJGF1dG9fcHJpb3JpdHkgLyAyOwogIH0KICBpZiAoJHBhZ2VbJ2RlZmF1bHRfY29udGVudCddID09IDEpIHsKICAgICRhdXRvX3ByaW9yaXR5ID0gMTAwOwogIH0KICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nY29udGVudF9wcm9wcyBXSEVSRSBjb250ZW50X2lkID0gJy4kcGFnZVsnY29udGVudF9pZCddLicgQU5EIHByb3BfbmFtZSA9ICInLnN0cl9yZXBsYWNlKCcgJywnXycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2Jsb2NrJywnJykpLiciJzsKICAkcmVzdWx0MSA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKICAkZGVzYyA9ICRyZXN1bHQxLT5mZXRjaFJvdygpOwogICRkZXNjcmlwdGlvbiA9ICRkZXNjWydjb250ZW50J107CgogICRrdyA9IGFycmF5X2ZsaXAoJHRoaXMtPmdldEtleXdvcmRTdWdnZXN0aW9ucygkcGFnZVsnY29udGVudF9pZCddKSk7CgogICRkZXNjcmlwdGlvbl9hdXRvID0gZmFsc2U7CiAgaWYgKCgkZGVzY3JpcHRpb24gPT0gIiIpICYmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZScsJ2ZhbHNlJykgPT0gJ3RydWUnKSkgewogICAgJGxhc3Rfa2V5d29yZCA9IGFycmF5X3BvcCgka3cpOwogICAgJGtleXdvcmRzID0gaW1wbG9kZSgnLCAnLCRrdykgLiAiICIgLiAkdGhpcy0+bGFuZygnYW5kJykgLiAiICIgLiAkbGFzdF9rZXl3b3JkOwogICAgJGRlc2NyaXB0aW9uID0gJHRoaXMtPmxhbmcoJ2F1dG9fZ2VuZXJhdGVkJykuIjogIi5zdHJfcmVwbGFjZSgne2tleXdvcmRzfScsJGtleXdvcmRzLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9hdXRvJywnJykpOwogICAgJGRlc2NyaXB0aW9uID0gc3RyX3JlcGxhY2UoJ3t0aXRsZX0nLCRwYWdlWydjb250ZW50X25hbWUnXSwkZGVzY3JpcHRpb24pOwogICAgJGRlc2NyaXB0aW9uX2F1dG8gPSB0cnVlOwogIH0KCiAgJGRlZmF1bHRfb2d0eXBlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKTsKCiAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgV0hFUkUgY29udGVudF9pZCA9ICcuJHBhZ2VbJ2NvbnRlbnRfaWQnXTsKICAkcmVzdWx0MiA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKICAkaW5mbyA9ICRyZXN1bHQyLT5mZXRjaFJvdygpOwoKICAkcHJpb3JpdHkgPSAnKGF1dG8pICcuJGF1dG9fcHJpb3JpdHkuJyUgJzsKICAkb2d0eXBlID0gJyhkZWZhdWx0KSAnLiRkZWZhdWx0X29ndHlwZS4nICcuJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL1NFT1Rvb2xzMi9pbWcvZWRpdC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ2VkaXRfdmFsdWUnKSwgQXJyYXkoIndoYXQiPT4iZWRpdF9vZ3R5cGUiLCJjb250ZW50X2lkIj0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpOwogICRrZXl3b3JkcyA9ICcoYXV0bykgJy5jb3VudCgka3cpLicgJy4kdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nL21vZHVsZXMvU0VPVG9vbHMyL2ltZy9lZGl0LnBuZyIgYWxpZ249ImFic21pZGRsZSIgLz4nLCBpbXBsb2RlKCcsICcsJGt3KS4nOyAnLiR0aGlzLT5sYW5nKCdlZGl0X3ZhbHVlJyksIEFycmF5KCJ3aGF0Ij0+ImVkaXRfa2V5d29yZHMiLCJjb250ZW50X2lkIj0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpOwogICRpbmRleGFibGUgPSAndHJ1ZSc7CiAgaWYgKCRpbmZvWydjb250ZW50X2lkJ10gIT0gIiIpIHsKICAgIGlmICgkaW5mb1sncHJpb3JpdHknXSAhPSAwKSB7CiAgICAgICRwcmlvcml0eSA9ICc8Yj4nLiRpbmZvWydwcmlvcml0eSddIC4gJyUgJy4kdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nL21vZHVsZXMvU0VPVG9vbHMyL2ltZy9yZXNldC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ3Jlc2V0X3RvX2RlZmF1bHQnKSwgQXJyYXkoIndoYXQiPT4icmVzZXRfcHJpb3JpdHkiLCJjb250ZW50X2lkIj0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpIC4gJzwvYj4nOwogICAgICAkYXV0b19wcmlvcml0eSA9ICRpbmZvWydwcmlvcml0eSddOwogICAgfQogICAgaWYgKCRpbmZvWydvZ3R5cGUnXSAhPSAiIikgewogICAgICAkb2d0eXBlID0gJzxiPicuJGluZm9bJ29ndHlwZSddIC4gJyAnIC4gJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL1NFT1Rvb2xzMi9pbWcvcmVzZXQucG5nIiBhbGlnbj0iYWJzbWlkZGxlIiAvPicsICR0aGlzLT5sYW5nKCdyZXNldF90b19kZWZhdWx0JyksIEFycmF5KCJ3aGF0Ij0+InJlc2V0X29ndHlwZSIsImNvbnRlbnRfaWQiPT4kcGFnZVsnY29udGVudF9pZCddKSkgLiAkdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nL21vZHVsZXMvU0VPVG9vbHMyL2ltZy9lZGl0LnBuZyIgYWxpZ249ImFic21pZGRsZSIgLz4nLCAkdGhpcy0+bGFuZygnZWRpdF92YWx1ZScpLCBBcnJheSgid2hhdCI9PiJlZGl0X29ndHlwZSIsImNvbnRlbnRfaWQiPT4kcGFnZVsnY29udGVudF9pZCddKSkuJzwvYj4nOwogICAgfQogICAgaWYgKCRpbmZvWydrZXl3b3JkcyddICE9ICIiKSB7CiAgICAgICRrZXl3b3JkcyA9ICc8Yj4nLmNvdW50KGV4cGxvZGUoJyAnLCRpbmZvWydrZXl3b3JkcyddKSkgLiAkdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nL21vZHVsZXMvU0VPVG9vbHMyL2ltZy9yZXNldC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ3Jlc2V0X3RvX2RlZmF1bHQnKSwgQXJyYXkoIndoYXQiPT4icmVzZXRfa2V5d29yZHMiLCJjb250ZW50X2lkIj0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpIC4gJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy9tb2R1bGVzL1NFT1Rvb2xzMi9pbWcvZWRpdC5wbmciIGFsaWduPSJhYnNtaWRkbGUiIC8+JywgJHRoaXMtPmxhbmcoJ2VkaXRfdmFsdWUnKSwgQXJyYXkoIndoYXQiPT4iZWRpdF9rZXl3b3JkcyIsImNvbnRlbnRfaWQiPT4kcGFnZVsnY29udGVudF9pZCddKSkuJzwvYj4nOwogICAgfQogICAgaWYgKCRpbmZvWydpbmRleGFibGUnXSA9PSAwKSB7CiAgICAgICRpbmRleGFibGUgPSAnZmFsc2UnOwogICAgfQogIH0KCiAgJHVwZG93biAgPSAkdGhpcy0+Q3JlYXRlVG9vbHRpcExpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsICcnLCAnPGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vYXJyb3ctZC5naWYiIGJvcmRlcj0iMCIgYWxpZ249ImFic21pZGRsZSIgLz4nLCAkdGhpcy0+bGFuZygnZGVjcmVhc2VfcHJpb3JpdHknKSwgQXJyYXkoJ3doYXQnPT4nc2V0X3ByaW9yaXR5JywncHJpb3JpdHknPT4kYXV0b19wcmlvcml0eS0xMCwnY29udGVudF9pZCc9PiRwYWdlWydjb250ZW50X2lkJ10pKTsKICAkdXBkb3duIC49ICR0aGlzLT5DcmVhdGVUb29sdGlwTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgJycsICc8aW1nIHNyYz0iJy4kZ0Ntcy0+Y29uZmlnWydyb290X3VybCddLicvJy4kZ0Ntcy0+Y29uZmlnWydhZG1pbl9kaXInXS4nL3RoZW1lcy8nLiRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+dGhlbWVOYW1lLicvaW1hZ2VzL2ljb25zL3N5c3RlbS9hcnJvdy11LmdpZiIgYm9yZGVyPSIwIiBhbGlnbj0iYWJzbWlkZGxlIiAvPicsICR0aGlzLT5sYW5nKCdpbmNyZWFzZV9wcmlvcml0eScpLCBBcnJheSgnd2hhdCc9PidzZXRfcHJpb3JpdHknLCdwcmlvcml0eSc9PiRhdXRvX3ByaW9yaXR5KzEwLCdjb250ZW50X2lkJz0+JHBhZ2VbJ2NvbnRlbnRfaWQnXSkpOwoKICAkcGFnZXNldHRpbmdzIC49ICc8dHIgY2xhc3M9InJvdycuKCRqICUgMiArIDEpLiciPic7CiAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPicuJHBhZ2VbJ2NvbnRlbnRfaWQnXS4nPC90ZD4nOwogICRwYWdlc2V0dGluZ3MgLj0gJzx0ZD4nLiRwcmVmaXggLicgJy4kcGFnZVsnY29udGVudF9uYW1lJ10uJzwvdGQ+JzsKCgogIGlmIChzdHJwb3MoJHBhZ2VbJ3R5cGUnXSwgJ2NvbnRlbnQnKSAhPT0gZmFsc2UgfHwgc3RycG9zKCRwYWdlWyd0eXBlJ10sICdsaW5rJykgIT09IGZhbHNlICkgewogICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPicuJHVwZG93bi4nICcuJHByaW9yaXR5Lic8L3RkPic7CiAgICAvLyAgICAgICRwYWdlc2V0dGluZ3MgLj0gJzx0ZD4nLiAkb2d0eXBlLic8L3RkPic7CiAgICAkcGFnZXNldHRpbmdzIC49IHN0cnBvcygkcGFnZVsndHlwZSddLCAnbGluaycpICE9PSBmYWxzZSA/ICc8dGQ+LS0tPC90ZD4nIDogJzx0ZD4nLiAkb2d0eXBlLic8L3RkPic7CiAgICAkcGFnZXNldHRpbmdzIC49IHN0cnBvcygkcGFnZVsndHlwZSddLCAnbGluaycpICE9PSBmYWxzZSA/ICc8dGQ+LS0tPC90ZD4nIDogJzx0ZD4nLiAka2V5d29yZHMuJzwvdGQ+JzsKCiAgICAvLyAgICAgICRwYWdlc2V0dGluZ3MgLj0gJzx0ZD4nLiRrZXl3b3Jkcy4nPC90ZD4nOwogICAgaWYgKHN0cnBvcygkcGFnZVsndHlwZSddLCAnY29udGVudCcpICE9PSBmYWxzZSApIHsKICAgICAgaWYgKCRkZXNjcmlwdGlvbiAhPSAiIikgewogICAgICAgIGlmICgkZGVzY3JpcHRpb25fYXV0bykgewogICAgICAgICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPjxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvaWNvbnMvc3lzdGVtL3dhcm5pbmcuZ2lmIiB0aXRsZT0iJy5zdHJpcF90YWdzKCRkZXNjcmlwdGlvbikuJyIgLz48L3RkPic7CiAgICAgICAgfWVsc2V7CiAgICAgICAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+PGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vdHJ1ZS5naWYiIHRpdGxlPSInLnN0cmlwX3RhZ3MoJGRlc2NyaXB0aW9uKS4nIiAvPjwvdGQ+JzsKICAgICAgICB9CiAgICAgIH1lbHNlewoKICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ3NwXyddKSkKICAgICAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+PGEgaHJlZj0iZWRpdGNvbnRlbnQucGhwP3NwXz0nLiRfR0VUWydzcF8nXS4nJmNvbnRlbnRfaWQ9Jy4kcGFnZVsnY29udGVudF9pZCddLiciPjxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvaWNvbnMvc3lzdGVtL2ZhbHNlLmdpZiIgYm9yZGVyPSIwIiB0aXRsZT0iJy4kdGhpcy0+bGFuZygnY2xpY2tfdG9fYWRkX2Rlc2NyaXB0aW9uJykuJyIgLz48L2E+PC90ZD4nOwogICAgICAgIGVsc2UKICAgICAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+PGEgaHJlZj0iZWRpdGNvbnRlbnQucGhwP19zeF89Jy4kX0dFVFsnX3N4XyddLicmY29udGVudF9pZD0nLiRwYWdlWydjb250ZW50X2lkJ10uJyI+PGltZyBzcmM9IicuJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXS4nLycuJGdDbXMtPmNvbmZpZ1snYWRtaW5fZGlyJ10uJy90aGVtZXMvJy4kZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPnRoZW1lTmFtZS4nL2ltYWdlcy9pY29ucy9zeXN0ZW0vZmFsc2UuZ2lmIiBib3JkZXI9IjAiIHRpdGxlPSInLiR0aGlzLT5sYW5nKCdjbGlja190b19hZGRfZGVzY3JpcHRpb24nKS4nIiAvPjwvYT48L3RkPic7CgogICAgICB9CiAgICB9IGVsc2UgewogICAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOwogICAgfQogICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPicuJHRoaXMtPkNyZWF0ZVRvb2x0aXBMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJzxpbWcgc3JjPSInLiRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uJy8nLiRnQ21zLT5jb25maWdbJ2FkbWluX2RpciddLicvdGhlbWVzLycuJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT50aGVtZU5hbWUuJy9pbWFnZXMvaWNvbnMvc3lzdGVtLycuJGluZGV4YWJsZS4nLmdpZiIgLz4nLCAkdGhpcy0+bGFuZygndG9nZ2xlJyksIEFycmF5KCd3aGF0Jz0+J3RvZ2dsZV9pbmRleCcsJ2NvbnRlbnRfaWQnPT4kcGFnZVsnY29udGVudF9pZCddKSkuJzwvdGQ+JzsKICB9ZWxzZXsKICAgICRwYWdlc2V0dGluZ3MgLj0gJzx0ZD4tLS08L3RkPic7CiAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOwogICAgJHBhZ2VzZXR0aW5ncyAuPSAnPHRkPi0tLTwvdGQ+JzsKICAgICRwYWdlc2V0dGluZ3MgLj0gJzx0ZD4tLS08L3RkPic7CiAgICAkcGFnZXNldHRpbmdzIC49ICc8dGQ+LS0tPC90ZD4nOwogIH0KICAkcGFnZXNldHRpbmdzIC49ICc8L3RyPic7CiAgJGorKzsKCn0KCiRwYWdlc2V0dGluZ3MgLj0gJzwvdGFibGU+JzsKCi8qIFNFTyBTZXR0aW5ncyBUYWIgKi8KCi8vIEdldCBpbWFnZSBmaWxlcyBmcm9tIC91cGxvYWRzL2ltYWdlcwokZmlsZXNfbGlzdCA9IEFycmF5KCR0aGlzLT5sYW5nKCdub25lJyk9PiIiKTsKJGRwID0gb3BlbmRpcigkZ0Ntcy0+Y29uZmlnWydyb290X3BhdGgnXS4nL3VwbG9hZHMvaW1hZ2VzJyk7CndoaWxlICgkZmlsZSA9IHJlYWRkaXIoJGRwKSkgewogIGlmIChzdHJwb3Moc3Vic3RyKCRmaWxlLCAtNSksJy5naWYnKSAhPT0gZmFsc2UpIHsKICAgICRmaWxlc19saXN0WyRmaWxlXSA9ICRmaWxlOwogIH0KICBpZiAoc3RycG9zKHN1YnN0cigkZmlsZSwgLTUpLCcucG5nJykgIT09IGZhbHNlKSB7CiAgICAkZmlsZXNfbGlzdFskZmlsZV0gPSAkZmlsZTsKICB9CiAgaWYgKHN0cnBvcyhzdWJzdHIoJGZpbGUsIC01KSwnLmpwZycpICE9PSBmYWxzZSkgewogICAgJGZpbGVzX2xpc3RbJGZpbGVdID0gJGZpbGU7CiAgfQogIGlmIChzdHJwb3Moc3Vic3RyKCRmaWxlLCAtNSksJy5qcGVnJykgIT09IGZhbHNlKSB7CiAgICAkZmlsZXNfbGlzdFskZmlsZV0gPSAkZmlsZTsKICB9Cn0KY2xvc2VkaXIoJGRwKTsKCiRzZXR0aW5ncyAgPSAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KG51bGwsICdjaGFuZ2VzZXR0aW5ncycpOwoKLyogUGFnZSBUaXRsZSAqLwokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ3RpdGxlX2Rlc2NyaXB0aW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3RpdGxlX2Rlc2NyaXB0aW9uJykpOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygndGl0bGVfdGl0bGUnKS4nOjwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAndGl0bGUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGl0bGUnLCd7dGl0bGV9IHwgeyRzaXRlbmFtZX0gLSB7JHRpdGxlX2tleXdvcmRzfScpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCd0aXRsZV90aXRsZV9oZWxwJykuJzwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygndGl0bGVfbWV0YV90aXRsZScpLic6PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICd0aXRsZV9tZXRhJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpdGxlX21ldGEnLCd7dGl0bGV9IHwgeyRzaXRlbmFtZX0nKSwgMzIpLicgJy4kdGhpcy0+bGFuZygndGl0bGVfbWV0YV9oZWxwJykuJzwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnZGVzY3JpcHRpb25fYmxvY2tfdGl0bGUnKS4nOjwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAnZGVzY3JpcHRpb25fYmxvY2snLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYmxvY2snLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnZGVzY3JpcHRpb25fYmxvY2tfaGVscCcpLic8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicgLiAkdGhpcy0+TGFuZygnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZScpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdkZXNjcmlwdGlvbl9hdXRvX2dlbmVyYXRlJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG9fZ2VuZXJhdGUnLDEpKSAuICc8L3A+JzsKCgokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnZGVzY3JpcHRpb25fYXV0b190aXRsZScpLic6PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdkZXNjcmlwdGlvbl9hdXRvJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG8nLCdUaGlzIHBhZ2UgY292ZXJzIHRoZSB0b3BpY3Mge2tleXdvcmRzfScpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdkZXNjcmlwdGlvbl9hdXRvX2hlbHAnKS4nPC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdkZWZhdWx0X2tleXdvcmRzX3RpdGxlJykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ2RlZmF1bHRfa2V5d29yZHMnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9rZXl3b3JkcycsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdkZWZhdWx0X2tleXdvcmRzX2hlbHAnKS4nPC9wPic7CiRzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRFbmQoKTsKCi8qIE1FVEEgVHlwZXMgKi8KJHNldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KG51bGwsICdtZXRhX3R5cGUnLCAkdGhpcy0+TGFuZygndGl0bGVfbWV0YV90eXBlJykpOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+JyAuICR0aGlzLT5MYW5nKCdtZXRhX2NyZWF0ZV9zdGFuZGFyZCcpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdtZXRhX3N0YW5kYXJkJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfc3RhbmRhcmQnLDEpKSAuICc8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicgLiAkdGhpcy0+TGFuZygnbWV0YV9jcmVhdGVfZHVibGluY29yZScpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdtZXRhX2R1YmxpbmNvcmUnLCAxLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9kdWJsaW5jb3JlJywxKSkgLiAnPC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nIC4gJHRoaXMtPkxhbmcoJ21ldGFfY3JlYXRlX29wZW5ncmFwaCcpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdtZXRhX29wZW5ncmFwaCcsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaCcsMSkpIC4gJzwvcD4nOwokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7CgovKiBNRVRBIERlZmF1bHRzICovCiRzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydChudWxsLCAnbWV0YV9kZWZhdWx0cycsICR0aGlzLT5MYW5nKCd0aXRsZV9tZXRhX2RlZmF1bHRzJykpOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9wdWJsaXNoZXInKS4nOjwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAnbWV0YV9wdWJsaXNoZXInLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9wdWJsaXNoZXInLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9wdWJsaXNoZXJfaGVscCcpLic8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfY29udHJpYnV0b3InKS4nOjwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAnbWV0YV9jb250cmlidXRvcicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2NvbnRyaWJ1dG9yJywnJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ21ldGFfY29udHJpYnV0b3JfaGVscCcpLic8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfY29weXJpZ2h0JykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfY29weXJpZ2h0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfY29weXJpZ2h0JywnKEMpICcuZGF0ZSgnWScpLicuIEFsbCByaWdodHMgcmVzZXJ2ZWQuJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ21ldGFfY29weXJpZ2h0X2hlbHAnKS4nPC9wPjxiciAvPic7Cgokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+PGI+Jy4kdGhpcy0+bGFuZygnbWV0YV9sb2NhdGlvbl9kZXNjcmlwdGlvbicpLic8L2I+PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX2xvY2F0aW9uJykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfbG9jYXRpb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX2xvY2F0aW9uX2hlbHAnKS4nPC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX3JlZ2lvbicpLic6PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX3JlZ2lvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3JlZ2lvbicsJycpLCA1LCA1KS4nICcuJHRoaXMtPmxhbmcoJ21ldGFfcmVnaW9uX2hlbHAnKS4nPC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX2xhdGl0dWRlJykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfbGF0aXR1ZGUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9sYXRpdHVkZScsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX2xhdGl0dWRlX2hlbHAnKS4nPC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX2xvbmdpdHVkZScpLic6PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX2xvbmdpdHVkZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX2xvbmdpdHVkZScsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX2xvbmdpdHVkZV9oZWxwJykuJzwvcD48YnIgLz4nOwoKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPjxiPicuJHRoaXMtPmxhbmcoJ21ldGFfb3BlbmdyYXBoX2Rlc2NyaXB0aW9uJykuJzwvYj48L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfb3BlbmdyYXBoX3RpdGxlJykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfb3BlbmdyYXBoX3RpdGxlJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3RpdGxlJywne3RpdGxlfScpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX29wZW5ncmFwaF90aXRsZV9oZWxwJykuJzwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfdHlwZScpLic6PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX29wZW5ncmFwaF90eXBlJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfdHlwZV9oZWxwJykuJzwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfc2l0ZW5hbWUnKS4nOjwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAnbWV0YV9vcGVuZ3JhcGhfc2l0ZW5hbWUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfc2l0ZW5hbWUnLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfc2l0ZW5hbWVfaGVscCcpLic8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ21ldGFfb3BlbmdyYXBoX2ltYWdlJykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKG51bGwsICdtZXRhX29wZW5ncmFwaF9pbWFnZScsICRmaWxlc19saXN0LCBudWxsLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfaW1hZ2UnLCcnKSkuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX29wZW5ncmFwaF9pbWFnZV9oZWxwJykuJzwvcD4nOwokc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfYWRtaW5zJykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ21ldGFfb3BlbmdyYXBoX2FkbWlucycsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hZG1pbnMnLCcnKSwgMzIpLicgJy4kdGhpcy0+bGFuZygnbWV0YV9vcGVuZ3JhcGhfYWRtaW5zX2hlbHAnKS4nPC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdtZXRhX29wZW5ncmFwaF9hcHBsaWNhdGlvbicpLic6PC9wPic7CiRzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdtZXRhX29wZW5ncmFwaF9hcHBsaWNhdGlvbicsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hcHBsaWNhdGlvbicsJycpLCAzMikuJyAnLiR0aGlzLT5sYW5nKCdtZXRhX29wZW5ncmFwaF9hcHBsaWNhdGlvbl9oZWxwJykuJzwvcD4nOwokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7CgovKiBBZGRpdGlvbmFsIE1ldGEgVGFncyAqLwokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0U3RhcnQobnVsbCwgJ2FkZGl0aW9uYWxfbWV0YScsICR0aGlzLT5MYW5nKCd0aXRsZV9hZGRpdGlvbmFsX21ldGFfdGFncycpKTsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ2FkZGl0aW9uYWxfbWV0YV90YWdzX3RpdGxlJykuJzo8L3A+JzsKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgbnVsbCwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FkZGl0aW9uYWxfbWV0YV90YWdzJywnJyksICdhZGRpdGlvbmFsX21ldGFfdGFncycpLicgJy4kdGhpcy0+bGFuZygnYWRkaXRpb25hbF9tZXRhX3RhZ3NfaGVscCcpLic8L3A+JzsKJHNldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwoKJHNldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdChudWxsLCAnc2F2ZV9tZXRhX3NldHRpbmdzJywgJHRoaXMtPmxhbmcoJ3NhdmUnKSkuJzwvcD4nOwokc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCiRzZXR0aW5ncyAuPSAnPGJyIC8+PGJyIC8+Jy4kdGhpcy0+bGFuZygnaGVscF9kZXNjcmlwdGlvbl9jb250ZW50Jyk7CgovKiBTSVRFTUFQIFNldHRpbmdzICovCgokc3NldHRpbmdzICA9ICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQobnVsbCwgJ2NoYW5nZXNldHRpbmdzJyk7Cgokc3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KG51bGwsICdzaXRlbWFwX2Rlc2NyaXB0aW9uJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3NpdGVtYXBfZGVzY3JpcHRpb24nKSk7CiRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+JyAuICR0aGlzLT5MYW5nKCdjcmVhdGVfc2l0ZW1hcF90aXRsZScpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdjcmVhdGVfc2l0ZW1hcCcsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfc2l0ZW1hcCcsMSkpIC4gJzwvcD4nOwppZiAoaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykpIHsKICAkc3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicgLiAkdGhpcy0+TGFuZygncHVzaF9zaXRlbWFwX3RpdGxlJykgLiAnOiAnIC4gJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3gobnVsbCwgJ3B1c2hfc2l0ZW1hcCcsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwdXNoX3NpdGVtYXAnLDApKSAuICc8L3A+JzsKfWVsc2V7CiAgJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nIC4gJHRoaXMtPkxhbmcoJ3B1c2hfc2l0ZW1hcF90aXRsZScpIC4gJzogJyAuICR0aGlzLT5MYW5nKCdub191cmxfZm9wZW4nKSAuICc8L3A+JzsKfQokc3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicgLiAkdGhpcy0+TGFuZygnY3JlYXRlX3JvYm90c190aXRsZScpIC4gJzogJyAuICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KG51bGwsICdjcmVhdGVfcm9ib3RzJywgMSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9yb2JvdHMnLDEpKSAuICc8L3A+JzsKCiRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jy4kdGhpcy0+bGFuZygndmVyaWZpY2F0aW9uX3RpdGxlJykuJzo8L3A+JzsKJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICd2ZXJpZmljYXRpb24nLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndmVyaWZpY2F0aW9uJywnJyksIDMyKS4nICcuJHRoaXMtPmxhbmcoJ3ZlcmlmaWNhdGlvbl9oZWxwJykuJzwvcD4nOwokc3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwoKJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQobnVsbCwgJ3NhdmVfc2l0ZW1hcF9zZXR0aW5ncycsICR0aGlzLT5sYW5nKCdzYXZlJykpLic8L3A+JzsKCiRzc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCiRzc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydChudWxsLCAnY2hhbmdlc2V0dGluZ3MnKTsKJHNzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRmllbGRzZXRTdGFydChudWxsLCAncmVnZW5lcmF0ZV9zaXRlbWFwJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3JlZ2VuZXJhdGVfc2l0ZW1hcCcpKTsKJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+JzsKJHNzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQobnVsbCwgJ2RvX3JlZ2VuZXJhdGUnLCAkdGhpcy0+bGFuZygnYnV0dG9uX3JlZ2VuZXJhdGVfc2l0ZW1hcCcpKS4nPC9wPic7CiRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPic7CiRzc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPmxhbmcoJ3RleHRfcmVnZW5lcmF0ZV9zaXRlbWFwJykuJzwvcD4nOwokc3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwokc3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7Cgokc3NldHRpbmdzIC49ICc8YnIgLz48YnIgLz4nLiR0aGlzLT5sYW5nKCdoZWxwX3NpdGVtYXBfcm9ib3RzJyk7CgovKiBLRVlXT1JEIFNldHRpbmdzICovCgoka3NldHRpbmdzICA9ICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQobnVsbCwgJ2NoYW5nZXNldHRpbmdzJyk7Cgoka3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KG51bGwsICdrZXl3b3JkX3dlaWdodF9kZXNjcmlwdGlvbicsICR0aGlzLT5MYW5nKCd0aXRsZV9rZXl3b3JkX3dlaWdodCcpKTsKJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdrZXl3b3JkX21pbmxlbmd0aF90aXRsZScpLic6PC9wPic7CiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAna2V5d29yZF9taW5sZW5ndGgnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5sZW5ndGgnLCc2JyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF9taW5sZW5ndGhfaGVscCcpLic8L3A+JzsKJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdrZXl3b3JkX3RpdGxlX3dlaWdodF90aXRsZScpLic6PC9wPic7CiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAna2V5d29yZF90aXRsZV93ZWlnaHQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF90aXRsZV93ZWlnaHQnLCc2JyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF90aXRsZV93ZWlnaHRfaGVscCcpLic8L3A+JzsKJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdrZXl3b3JkX2Rlc2NyaXB0aW9uX3dlaWdodF90aXRsZScpLic6PC9wPic7CiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAna2V5d29yZF9kZXNjcmlwdGlvbl93ZWlnaHQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9kZXNjcmlwdGlvbl93ZWlnaHQnLCc0JyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF9kZXNjcmlwdGlvbl93ZWlnaHRfaGVscCcpLic8L3A+JzsKJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdrZXl3b3JkX2hlYWRsaW5lX3dlaWdodF90aXRsZScpLic6PC9wPic7CiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0VGV4dChudWxsLCAna2V5d29yZF9oZWFkbGluZV93ZWlnaHQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9oZWFkbGluZV93ZWlnaHQnLCcyJyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF9oZWFkbGluZV93ZWlnaHRfaGVscCcpLic8L3A+JzsKJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5sYW5nKCdrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0X3RpdGxlJykuJzo8L3A+JzsKJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KG51bGwsICdrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0JywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2tleXdvcmRfY29udGVudF93ZWlnaHQnLCcxJyksIDIpLicgJy4kdGhpcy0+bGFuZygna2V5d29yZF9jb250ZW50X3dlaWdodF9oZWxwJykuJzwvcD4nOwoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ2tleXdvcmRfbWluaW11bV93ZWlnaHRfdGl0bGUnKS4nOjwvcD4nOwoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ2tleXdvcmRfbWluaW11bV93ZWlnaHQnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5pbXVtX3dlaWdodCcsJzcnKSwgMikuJyAnLiR0aGlzLT5sYW5nKCdrZXl3b3JkX21pbmltdW1fd2VpZ2h0X2hlbHAnKS4nPC9wPic7CiRrc2V0dGluZ3MgLj0gJHRoaXMtPkNyZWF0ZUZpZWxkc2V0RW5kKCk7Cgoka3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldFN0YXJ0KG51bGwsICdrZXl3b3JkX2V4Y2x1ZGVfZGVzY3JpcHRpb24nLCAkdGhpcy0+TGFuZygndGl0bGVfa2V5d29yZF9leGNsdWRlJykpOwoka3NldHRpbmdzIC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPmxhbmcoJ2tleXdvcmRfZXhjbHVkZV90aXRsZScpLic6PC9wPic7CiRrc2V0dGluZ3MgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCBudWxsLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9leGNsdWRlJywnJyksICdrZXl3b3JkX2V4Y2x1ZGUnKS4nICcuJHRoaXMtPmxhbmcoJ2tleXdvcmRfZXhjbHVkZV9oZWxwJykuJzwvcD4nOwoka3NldHRpbmdzIC49ICR0aGlzLT5DcmVhdGVGaWVsZHNldEVuZCgpOwoKJGtzZXR0aW5ncyAuPSAnPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jy4kdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQobnVsbCwgJ3NhdmVfa2V5d29yZF9zZXR0aW5ncycsICR0aGlzLT5sYW5nKCdzYXZlJykpLic8L3A+JzsKJGtzZXR0aW5ncyAuPSAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKJGtzZXR0aW5ncyAuPSAnPGJyIC8+PGJyIC8+Jy4kdGhpcy0+bGFuZygnaGVscF9rZXl3b3JkX2dlbmVyYXRvcicpOwoKCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxlcnRzJywkYWxlcnRzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwYWdlc2V0dGluZ3MnLCRwYWdlc2V0dGluZ3MpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21ldGFfZm9ybScsJHNldHRpbmdzKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzaXRlbWFwX2Zvcm0nLCRzc2V0dGluZ3MpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2tleXdvcmRfZm9ybScsJGtzZXR0aW5ncyk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWlucGFuZWwudHBsJyk7CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.edit_keywords.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLyogLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KCiAgIENvZGUgZm9yIFNFT1Rvb2xzMiAiZWRpdG1ldGEiIGFkbWluIGFjdGlvbgogICAKICAgLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KICAgCiAgIFR5cGljYWxseSwgdGhpcyB3aWxsIGRpc3BsYXkgc29tZXRoaW5nIGZyb20gYSB0ZW1wbGF0ZQogICBvciBkbyBzb21lIG90aGVyIHRhc2suCiAgIAoqLwoKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCgppZiAoaXNzZXQoJF9QT1NUWydzZXRfa2V5d29yZHMnXSkpIHsKCWlmICgkX1BPU1RbJ2tleXdvcmRzJ10gIT0gIiIpIHsKCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZW90b29sczIgU0VUIGNvbnRlbnRfaWQgPSAiLiRfUE9TVFsnY29udGVudF9pZCddLiIsIGtleXdvcmRzID0gJyIuJF9QT1NUWydrZXl3b3JkcyddLiInLCBpbmRleGFibGUgPSAxIE9OIERVUExJQ0FURSBLRVkgVVBEQVRFIGtleXdvcmRzID0gJyIuJF9QT1NUWydrZXl3b3JkcyddLiInIjsKCX1lbHNlewoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9zZW90b29sczIgU0VUIGtleXdvcmRzID0gTlVMTCBXSEVSRSBjb250ZW50X2lkID0gIi4kX1BPU1RbJ2NvbnRlbnRfaWQnXTsKCX0KCSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJJHRoaXMtPnJlZGlyZWN0KG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCBBcnJheSgndGFiJz0+J3BhZ2VkZXNjcmlwdGlvbnMnKSk7Cn0KCiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ107CiRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKJGluZm8gPSAkcmVzdWx0LT5mZXRjaFJvdygpOwoKaWYgKCRpbmZvWydrZXl3b3JkcyddID09ICIiKSB7CgkkaW5mb1sna2V5d29yZHMnXSA9IHN0cnRvbG93ZXIoaW1wbG9kZSgnICcsYXJyYXlfZmxpcCgkdGhpcy0+Z2V0S2V5d29yZFN1Z2dlc3Rpb25zKCRfR0VUWydjb250ZW50X2lkJ10pKSkpOwp9Cgokb3V0cHV0ICA9ICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQobnVsbCwgJ2VkaXRfa2V5d29yZHMnKTsKJG91dHB1dCAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4obnVsbCwgJ2NvbnRlbnRfaWQnLCAkX0dFVFsnY29udGVudF9pZCddKTsKJG91dHB1dCAuPSAnPHAgY2xhc3M9InBhZ2V0ZXh0Ij4nLiR0aGlzLT5MYW5nKCdlbnRlcl9uZXdfa2V5d29yZHMnKS4nOjwvcD4nOwokb3V0cHV0IC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgbnVsbCwgJGluZm9bJ2tleXdvcmRzJ10sICdrZXl3b3JkcycpLicgJy4kdGhpcy0+TGFuZygnaGVscF9uZXdfa2V5d29yZHMnKS4nPC9wPic7CiRvdXRwdXQgLj0gJzxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPic7CiRvdXRwdXQgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KG51bGwsICdzZXRfa2V5d29yZHMnLCR0aGlzLT5sYW5nKCdzYXZlJykpLic8L3A+JzsKCiRvdXRwdXQgLj0gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCmVjaG8gJG91dHB1dDsKCgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.edit_ogtype.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLyogLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KCiAgIENvZGUgZm9yIFNFT1Rvb2xzMiAiZWRpdG1ldGEiIGFkbWluIGFjdGlvbgogICAKICAgLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KICAgCiAgIFR5cGljYWxseSwgdGhpcyB3aWxsIGRpc3BsYXkgc29tZXRoaW5nIGZyb20gYSB0ZW1wbGF0ZQogICBvciBkbyBzb21lIG90aGVyIHRhc2suCiAgIAoqLwoKJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCmlmIChpc3NldCgkX1BPU1RbJ3NldF9vZ3R5cGUnXSkpIHsKCWlmICgkX1BPU1RbJ29nX3R5cGUnXSAhPSAiIikgewoJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Nlb3Rvb2xzMiBTRVQgY29udGVudF9pZCA9ICIuJF9QT1NUWydjb250ZW50X2lkJ10uIiwgb2d0eXBlID0gJyIuJF9QT1NUWydvZ190eXBlJ10uIicsIGluZGV4YWJsZSA9IDEgT04gRFVQTElDQVRFIEtFWSBVUERBVEUgb2d0eXBlID0gJyIuJF9QT1NUWydvZ190eXBlJ10uIiciOwoJfWVsc2V7CgkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Nlb3Rvb2xzMiBTRVQgb2d0eXBlID0gTlVMTCBXSEVSRSBjb250ZW50X2lkID0gIi4kX1BPU1RbJ2NvbnRlbnRfaWQnXTsKCX0KCQoJZWNobyAkcXVlcnk7CgkKCSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJJHRoaXMtPlJlZGlyZWN0KG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCBBcnJheSgndGFiJz0+J3BhZ2VkZXNjcmlwdGlvbnMnKSk7Cn0KCiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRfR0VUWydjb250ZW50X2lkJ107CiRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKJGluZm8gPSAkcmVzdWx0LT5mZXRjaFJvdygpOwoKJG91dHB1dCAgPSAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KG51bGwsICdlZGl0X29ndHlwZScpOwokb3V0cHV0IC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbihudWxsLCAnY29udGVudF9pZCcsICRfR0VUWydjb250ZW50X2lkJ10pOwokb3V0cHV0IC49ICc8cCBjbGFzcz0icGFnZXRleHQiPicuJHRoaXMtPkxhbmcoJ2VudGVyX25ld19vZ3R5cGUnKS4nOjwvcD4nOwokb3V0cHV0IC49ICc8cCBjbGFzcz0icGFnZWlucHV0Ij4nLiR0aGlzLT5DcmVhdGVJbnB1dFRleHQobnVsbCwgJ29nX3R5cGUnLCAkaW5mb1snb2d0eXBlJ10sIDMwLCAzMCkuJyAnLiR0aGlzLT5MYW5nKCdoZWxwX25ld19vZ3R5cGUnKS4nPC9wPic7CiRvdXRwdXQgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPjxiciAvPicuJHRoaXMtPkxhbmcoJ2hlbHBfb3BlbmdyYXBoJykuJzxiciAvPjxiciAvPic7CiRvdXRwdXQgLj0gJzxwIGNsYXNzPSJwYWdlaW5wdXQiPicuJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KG51bGwsICdzZXRfb2d0eXBlJywkdGhpcy0+TGFuZygnc2F2ZScpKS4nPC9wPic7Cgokb3V0cHV0IC49ICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgplY2hvICRvdXRwdXQ7CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/event.Core.ContentDeletePost.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLyogLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KCkNvZGUgdG8gcHVzaCBzaXRlbWFwIHRvIEdvb2dsZSBXZWJtYXN0ZXJzIGlmIHJlcXVpcmVkCgotPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LSAqLwoKICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3NpdGVtYXAnKSA9PSAxKSB7CiAgICAgICR0aGlzLT5jcmVhdGVTaXRlbWFwKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwdXNoX3NpdGVtYXAnKSA9PSAxKTsKICAgIH0K]]></data>
	</file>
	<file>
	  <filename>/event.Core.ContentEditPost.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLyogLT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KCkNvZGUgdG8gcHVzaCBzaXRlbWFwIHRvIEdvb2dsZSBXZWJtYXN0ZXJzIGlmIHJlcXVpcmVkCgotPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LSAqLwoKICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3NpdGVtYXAnKSA9PSAxKSB7CiAgICAgICR0aGlzLT5jcmVhdGVTaXRlbWFwKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwdXNoX3NpdGVtYXAnKSA9PSAxKTsKICAgIH0K]]></data>
	</file>
	<file>
	  <filename>/img/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/img/edit.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH2ggQDQAHiaSPRwAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAImSURBVHjajZPPaxNBFMe/O9tuaJMY7NbUqrVNVeoPVESqB+2pBxFBD3r3Ip78Lzx48aA0WpGi4EnBg0UptIeK0Jh6UKIhmKRG0f5MqjFNm7o7uzvrzJoNqUm0A495zLzPd95j3pNs24YkSbsAdHCT8e+V4/aNM6xyIgT4Oq5pWsEwDMs0Tbue8Xs7HA7f5rE93IjgnMfLGZzgcFTXdcL9ijgHwRgDpRSqqmIp9QxrsaeQfYdR+v4KkjZ/WUQL6+fBb7gICCEO5ApYluUItNAI1tLTaGkfQCB0DIUvUSQnRrJN1QUK2N2FiCzLTprs5yQMK4W2faeQz3yEIlH4t2yHT90dqBFwSxC+eJ2tTEMxEgj0noG++BhKq4SvsSS0dX2lVFo9uUGgun7h0x8RsMJLBPaehzZ/D0Qx0ezrhteeQ3j0w7U7Y5k0afRf2eRzlBYmyvAwSLMBWuzB8tR7qIPXIWAn07pwagzFhSiCh86BLo1AVmzoxW4Ov8O2C0PwdOyvxDb9Dc9En4CtJmBKO7AYH8LWoAIt34XC2yQ6L96F7O/cEF+TQfz1Axw8fRWe2SmkRyOIjeeRnowhePZGDVxXYObzMmjiBUJHB+D19iEbz6Dv0k142nudn3G/umEJiU853Lo/jP4DIfj3HMHglYdobdvZcDiqBcRQSI/G57CJ5bQqbzJbDIUAGW+aX+7F/2Aeu853y+mX8jB14c84k00IoAznODv7G84tFQol4BT4AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/img/reset.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAB3RJTUUH2ggQDDghTfTcdgAAAAlwSFlzAAAewQAAHsEBw2lUUwAAAARnQU1BAACxjwv8YQUAAAJ5SURBVHjapVNdSBRRGD1zZ8bZHcfFn1VWDSNMpYSUBCGCMivJHgyMkiAwfCroIZBSiFAixLeIChaiIlAhf4IoKkhEgh4KJetF1/xF3XSUTVubcdydud1xZRmjJOiDw8yd+53zffd8c4H/DM65uHq/sv9QiXxYN1S2IYDCYk8RinAAS/qidaff3zFwC7WAaHFihKMRUOIU8KXKGUnJERD3OHh5DoIcZJiFKX1GuneZtNZcOd/SWfUFpZHdlPE5EZzgFFglAWUpIYyQFARx9CZgBGaUtWsC5QfrC/0ptQMX654U0hlpjt9ynkx1x0xwhXwdwdjYKKYYJsdGuen5OU/IpaRmpGbKZFLrtYpyy92iQnIG30x1xcmia4svv0NhqLjxLG+hfcZDu4NltGOgTkcOTsU7sKLbmr3OMB5YCekVZcUn1+h7eN1FQvuHoXnhrxTbXsvREwUWVAxRIwkcsRVXbHM2p0Bi+XZkncOF9Hw+LU5GjGzHsePuao+L1TQSoWnf7U/6pssxy083pjTce33UTi9jcDOkMXhRifwjjdLNro81tHOwhHYN7aTNTwu+sb09G0eIshIn6pMbzlbvb/Up+XjUp/Ym8ImUbpQWOdlVzCcpOsL6KMJrgxCEAnS/CDxgm8Ox0lVofnx9b5OUoOGnMQVF9oJadLN35jPng2FOgxd+wIxko6dn8dXLlvUzjKzFphDgZ9P2qSVZecs5dv6qqWGd02HAhoYor8KgFiYmpLW2tpD/3V3zMmOFN7Sdf/Klh3i+qxCl1xpxO1tCkPDsItgeExCdKalv0c+Wn5yTib2LcZHsyib0eXKRu+14/3gtxS0pAsfjn+IXjhPiCXMAIGsAAAAASUVORK5CYII=]]></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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NFT1Rvb2xzMic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1NFT1Rvb2xzMiBoYXMgYmVlbiBpbnN0YWxsZWQuIEJlIHN1cmUgdG8gcmVhZCB0aGUgbW9kdWxlIGhlbHAgdG8gbGVhcm4gaG93IHRvIHVzZSBpdC4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1NFT1Rvb2xzMiBoYXMgYmVlbiB1bmluc3RhbGxlZC4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgeW91IGhhdmUganVzdCBsb3N0IGFsbCBtZXRhIGluZm9ybWF0aW9uIGZyb20geW91ciBwYWdlcyEnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ0RvIHlvdSByZWFsbHkgd2FudCB0byB1bmluc3RhbGwgU0VPVG9vbHMyPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0EgY29sbGVjdGlvbiBvZiB0b29scyB0byBoZWxwIHdpdGggU2VhcmNoIEVuZ2luZSBPcHRpbWl6YXRpb24uJzsKCiRsYW5nWydldmVudGRlc2MtUHJlZnNVcGRhdGVkJ10gPSAnU2VudCB3aGVuIHRoZSBhZG1pbiBwcmVmZXJlbmNlcyBhcmUgdXBkYXRlZC4nOwokbGFuZ1snZXZlbnRoZWxwLVByZWZzVXBkYXRlZCddID0gJzxwPlNlbnQgd2hlbiB0aGUgYWRtaW4gcHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQuPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+CjxvbD4KPGxpPjwvbGk+Cjwvb2w+JzsKCgoKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3IhJzsKJGxhbmRbJ2FkbWluX3RpdGxlJ10gPSAnU0VPVG9vbHMyIEFkbWluIFBhbmVsJzsKJGxhbmdbJ2FkbWluZGVzY3JpcHRpb24nXSA9ICdIZWxwcyB3aXRoIFNFTyBpbiBnZW5lcmFsLCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRpbmcgWE1MIHNpdGVtYXBzIGFuZCBjb21wcmVoZW5zaXZlIG1ldGEgZGVzY3JpcHRpb25zJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydTRU9BbGVydHMnXSA9ICdTRU8gQWxlcnRzJzsKJGxhbmdbJ1BhZ2VkZXNjcmlwdGlvbnMnXSA9ICdQYWdlIHNldHRpbmdzJzsKJGxhbmdbJ1NpdGVtYXAnXSA9ICdTaXRlbWFwJzsKJGxhbmdbJ1NFT1NldHRpbmdzJ10gPSAnU0VPIFNldHRpbmdzJzsKJGxhbmdbJ3RpdGxlX3Nlb2FsZXJ0cyddID0gJ1NFTyBBbGVydHMnOwokbGFuZ1sndGl0bGVfcGFnZWRlc2NyaXB0aW9ucyddID0gJ1BhZ2Ugc2V0dGluZ3MnOwokbGFuZ1sndGl0bGVfc2l0ZW1hcCddID0gJ1NpdGVtYXAnOwokbGFuZ1sndGl0bGVfc2Vvc2V0dGluZ3MnXSA9ICdTRU8gU2V0dGluZ3MnOwoKJGxhbmdbJ3RpdGxlX21ldGFfdHlwZSddID0gJ01ldGEgVGFnIEdlbmVyYXRvcic7CiRsYW5nWydtZXRhX2NyZWF0ZV9zdGFuZGFyZCddID0gJ0dlbmVyYXRlIHN0YW5kYXJkIE1ldGEgVGFncyc7CiRsYW5nWydtZXRhX2NyZWF0ZV9kdWJsaW5jb3JlJ10gPSAnR2VuZXJhdGUgRHVibGluIENvcmUgTWV0YSBUYWdzJzsKJGxhbmdbJ21ldGFfY3JlYXRlX29wZW5ncmFwaCddID0gJ0dlbmVyYXRlIE9wZW5HcmFwaCBNZXRhIFRhZ3MgKGUuZy4gZm9yIEZhY2Vib29rIExpa2UgQnV0dG9uKSc7CgokbGFuZ1sndGl0bGVfbWV0YV9kZWZhdWx0cyddID0gJ01FVEEgVGFnIFZhbHVlcyc7CiRsYW5nWydtZXRhX3B1Ymxpc2hlciddID0gJ1NpdGUgcHVibGlzaGVyJzsKJGxhbmdbJ21ldGFfcHVibGlzaGVyX2hlbHAnXSA9ICcoVGhpcyBpcyB1c3VhbGx5IHRoZSBvcmdhbml6YXRpb24geW91IGFyZSBidWlsZGluZyB0aGUgd2Vic2l0ZSBmb3IpJzsKJGxhbmdbJ21ldGFfY29udHJpYnV0b3InXSA9ICdTaXRlIGNvbnRyaWJ1dG9yJzsKJGxhbmdbJ21ldGFfY29udHJpYnV0b3JfaGVscCddID0gJyhVc3VhbGx5LCB0aGlzIHdvdWxkIGJlIHlvdSBvciBhbnkgb3RoZXIgY29udGVudCBhdXRob3IpJzsKJGxhbmdbJ21ldGFfY29weXJpZ2h0J10gPSAnU2l0ZSBjb3B5cmlnaHQnOwokbGFuZ1snbWV0YV9jb3B5cmlnaHRfaGVscCddID0gJyhTb21ldGhpbmcgbGlrZSAiKEMpIFlvdXIgQ29tcGFueS4gQWxsIFJpZ2h0cyBSZXNlcnZlZCIpJzsKJGxhbmdbJ21ldGFfbG9jYXRpb25fZGVzY3JpcHRpb24nXSA9ICdJZiB5b3VyIHdlYnNpdGUgaXMgYWJvdXQgYW4gZW50aXRpeSB0aGF0IGNhbiBiZSBsb2NhdGVkIG9uIGEgbWFwLCB5b3Ugc2hvdWxkIG9wdGlvbmFsbHkgZmlsbCBpbiB0aGUgZm9sbG93aW5nIHZhbHVlczonOwokbGFuZ1snbWV0YV9sb2NhdGlvbiddID0gJ0xvY2F0aW9uIG9mIHlvdXIgZW50aXR5JzsKJGxhbmdbJ21ldGFfbG9jYXRpb25faGVscCddID0gJyhVc3VhbGx5LCB0aGlzIHdvdWxkIGJlIHRoZSB0b3duIG5hbWUgb2YgeW91ciBjb21wYW55KSc7CiRsYW5nWydtZXRhX3JlZ2lvbiddID0gJ1JlZ2lvbiBvZiB5b3VyIGVudGl0eSc7CiRsYW5nWydtZXRhX3JlZ2lvbl9oZWxwJ10gPSAnKEVudGVyIHNvbWV0aGluZyBsaWtlICJVUy1JTCIgZm9yIGFuIGVudGl0eSBsb2NhdGVkIGluIElsbGlub2lzLCBVUyknOwokbGFuZ1snbWV0YV9sYXRpdHVkZSddID0gJ0xhdGl0dWRlIG9mIHlvdXIgZW50aXR5JzsKJGxhbmdbJ21ldGFfbGF0aXR1ZGVfaGVscCddID0gJyhFbnRlciB0aGUgZGVjaW1hbCBsYXRpdHVkZSBnZW8gY29vZGluYXRlIG9mIHlvdXIgZW50aXRpeSknOwokbGFuZ1snbWV0YV9sb25naXR1ZGUnXSA9ICdMb25naXR1ZGUgb2YgeW91ciBlbnRpdHknOwokbGFuZ1snbWV0YV9sb25naXR1ZGVfaGVscCddID0gJyhFbnRlciB0aGUgZGVjaW1hbCBsb25naXR1ZGUgZ2VvIGNvb2RpbmF0ZSBvZiB5b3VyIGVudGl0aXkpJzsKJGxhbmdbJ21ldGFfb3BlbmdyYXBoX2Rlc2NyaXB0aW9uJ10gPSAnSWYgeW91IGFyZSBjcmVhdGluZyBPcGVuR3JhcGggTUVUQSBUYWdzLCBwbGVhc2UgZmlsbCBpbiB0aGUgZm9sbG93aW5nIHZhbHVlczonOwokbGFuZ1snbWV0YV9vcGVuZ3JhcGhfdGl0bGUnXSA9ICdPcGVuR3JhcGggcGFnZSB0aXRsZSc7CiRsYW5nWydtZXRhX29wZW5ncmFwaF90aXRsZV9oZWxwJ10gPSAnKFlvdSBjYW4gdXNlIGFsbCBzbWFydHkgdGFncyBoZXJlLCBlLmcuIHRvIHJlcGxhY2Ugd2l0aCB0aGUgYWN0dWFsIHBhZ2UgdGl0bGUpJzsKJGxhbmdbJ21ldGFfb3BlbmdyYXBoX3R5cGUnXSA9ICdPcGVuR3JhcGggZGVmYXVsdCBwYWdlIHR5cGUnOwokbGFuZ1snbWV0YV9vcGVuZ3JhcGhfdHlwZV9oZWxwJ10gPSAnKFRoZSBkZWZhdWx0IHBhZ2UgdHlwZSBmb3IgT3BlbkdyYXBoLCBjYW4gYmUgb3ZlcnJpZGRlbiBmb3IgZWFjaCBwYWdlLiBMb29rIDxhIGhyZWY9Imh0dHA6Ly9kZXZlbG9wZXJzLmZhY2Vib29rLmNvbS9kb2NzL29wZW5ncmFwaCN0eXBlcyIgdGFnZXQ9Il9ibGFuayI+aGVyZTwvYT4gZm9yIGEgbGlzdCBvZiBhbGxvd2VkIHZhbHVlcyknOwokbGFuZ1snbWV0YV9vcGVuZ3JhcGhfc2l0ZW5hbWUnXSA9ICdPcGVuR3JhcGggc2l0ZSBuYW1lJzsKJGxhbmdbJ21ldGFfb3BlbmdyYXBoX3NpdGVuYW1lX2hlbHAnXSA9ICcoQSBzaG9ydCB2ZXJzaW9uIG9mIHlvdXIgc2l0ZSBuYW1lLCBlLmcuICJZb3VyIENvbXBhbnkiLCBtYXguIDI1IGNoYXJzKSc7CiRsYW5nWydtZXRhX29wZW5ncmFwaF9pbWFnZSddID0gJ09wZW5HcmFwaCBkZWZhdWx0IGltYWdlJzsKJGxhbmdbJ21ldGFfb3BlbmdyYXBoX2ltYWdlX2hlbHAnXSA9ICcoU2VsZWN0IGFuIGltYWdlIGZyb20geW91ciAvdXBsb2Fkcy9pbWFnZXMgZGlyZWN0b3J5IHRvIGJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgZm9yIE9wZW5HcmFwaCBwYWdlcyknOwokbGFuZ1snbWV0YV9vcGVuZ3JhcGhfYWRtaW5zJ10gPSAnRmFjZWJvb2sgc2l0ZSBhZG1pbmlzdHJhdG9ycyc7CiRsYW5nWydtZXRhX29wZW5ncmFwaF9hZG1pbnNfaGVscCddID0gJyhBIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZhY2Vib29rIGFjY291bnQgSURzIHdobyBhcmUgYWJsZSB0byBhZG1pbmlzdHJhdGUgdGhlIHN0cmVhbXMgb2YgeW91ciBwYWdlcyknOwokbGFuZ1snbWV0YV9vcGVuZ3JhcGhfYXBwbGljYXRpb24nXSA9ICdGYWNlYm9vayBhcHBsaWNhdGlvbic7CiRsYW5nWydtZXRhX29wZW5ncmFwaF9hcHBsaWNhdGlvbl9oZWxwJ10gPSAnKFRoZSBJRCBvZiBhIGZhY2Vib29rIGFwcGxpY2F0aW9uIGFibGUgdG8gYWRtaW5pc3RyYXRlIHRoZSBzdHJlYW1zIG9mIHlvdXIgcGFnZXMpJzsKCiRsYW5nWyd0aXRsZV90aXRsZV9kZXNjcmlwdGlvbiddID0gJ1BhZ2UgdGl0bGUsIGRlc2NyaXB0aW9uIGFuZCBrZXl3b3Jkcyc7CiRsYW5nWyd0aXRsZV90aXRsZSddID0gJ1BhZ2UgdGl0bGUnOwokbGFuZ1sndGl0bGVfdGl0bGVfaGVscCddID0gJyhUaGUgcGFnZSB0aXRsZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGJyb3dzZXJcJ3MgdGl0bGUgYmFyLiBZb3UgY2FuIHVzZSB0aGUgdGFncyB7dGl0bGV9LCB7cGFnZXRpdGxlfSwge3Nlb19rZXl3b3Jkc30gYW5kIGFsbCBzbWFydHkgdGFncyBhbmQgVURUcyBoZXJlKSc7CiRsYW5nWyd0aXRsZV9tZXRhX3RpdGxlJ10gPSAnUGFnZSBNZXRhIHRpdGxlJzsKJGxhbmdbJ3RpdGxlX21ldGFfaGVscCddID0gJyhUaGUgcGFnZSB0aXRsZSB0byBiZSB1c2VkIGluIHRoZSBNZXRhIHRpdGxlIHRhZ3MuIFlvdSBjYW4gdXNlIHRoZSB0YWdzIHt0aXRsZX0sIHtwYWdldGl0bGV9LCB7c2VvX2tleXdvcmRzfSBhbmQgYWxsIHNtYXJ0eSB0YWdzIGFuZCBVRFRzIGhlcmUpJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX2Jsb2NrX3RpdGxlJ10gPSAnTmFtZSBvZiBwYWdlIGRlc2NyaXB0aW9uIGNvbnRlbnQgYmxvY2snOwokbGFuZ1snZGVzY3JpcHRpb25fYmxvY2tfaGVscCddID0gJyhUaGUgbmFtZSBvZiB5b3VyIHBhZ2UgZGVzY3JpcHRpb24gY29udGVudCBibG9jay4gUGxlYXNlIHNlZSBiZWxvdyBmb3IgYW4gZXhwbGFuYXRpb24pJzsKJGxhbmdbJ2RlZmF1bHRfa2V5d29yZHNfdGl0bGUnXSA9ICdLZXl3b3JkcyB0byBhbHdheXMgaW5jbHVkZSc7CiRsYW5nWydkZWZhdWx0X2tleXdvcmRzX2hlbHAnXSA9ICcoQSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBrZXl3b3JkcyB5b3Ugd291bGQgbGlrZSB0byBpbmNsdWRlIG9uIGV2ZXJ5IHBhZ2UpJzsKCiRsYW5nWyd0aXRsZV9zaXRlbWFwX2Rlc2NyaXB0aW9uJ10gPSAnR29vZ2xlIFNpdGVtYXAgYW5kIENyYXdsZXIgU2V0dGluZ3MnOwokbGFuZ1snY3JlYXRlX3NpdGVtYXBfdGl0bGUnXSA9ICdDcmVhdGUgYW4gWE1MIEdvb2dsZSBTaXRlbWFwKic7CiRsYW5nWydwdXNoX3NpdGVtYXBfdGl0bGUnXSA9ICdBdXRvbWF0aWNhbGx5IHB1c2ggdGhlIHNpdGVtYXAgdG8gR29vZ2xlIGFmdGVyIGNvbnRlbnQgY2hhbmdlcyc7CiRsYW5nWydjcmVhdGVfcm9ib3RzX3RpdGxlJ10gPSAnQ3JlYXRlIGEgcm9ib3RzLnR4dCBmaWxlKic7CiRsYW5nWyd2ZXJpZmljYXRpb25fdGl0bGUnXSA9ICdTaXRlIHZlcmlmaWNhdGlvbiBjb2RlJzsKJGxhbmdbJ3ZlcmlmaWNhdGlvbl9oZWxwJ10gPSAnKFRoZSBzaXRlIHZlcmlmaWNhdGlvbiBjb2RlIHlvdSBvYnRhaW4gZnJvbSBHb29nbGUgV2VibWFzdGVyIFRvb2xzLCBqdXN0IHRoZSBoYXNoLCBub3QgdGhlIGNvbXBsZXRlIG1ldGEgdGFnKSc7CgokbGFuZ1sndGl0bGVfYWxlcnRzX3VyZ2VudCddID0gJ1RvIGJlIGZpeGVkIGltbWVkaWF0ZWx5JzsKJGxhbmdbJ3RpdGxlX2FsZXJ0c19pbXBvcnRhbnQnXSA9ICdUbyBiZSBmaXhlZCBhcyBzb29uIGFzIHBvc3NpYmxlJzsKJGxhbmdbJ3RpdGxlX2FsZXJ0c19ub3RpY2VzJ10gPSAnVGhpbmdzIHlvdSBzaG91bGQgY29uc2lkZXIgZml4aW5nJzsKJGxhbmdbJ25vdGhpbmdfdG9fYmVfZml4ZWQnXSA9ICdUaGVyZSBhcmUgbm8gYWN0aW9ucyB5b3UgbmVlZCB0byB0YWtlIGluIHRoaXMgY2F0ZWdvcnknOwoKJGxhbmdbJ3NhdmUnXSA9ICdTYXZlIHNldHRpbmdzJzsKJGxhbmdbJ25vbmUnXSA9ICcobm9uZSknOwokbGFuZ1snc2V0dGluZ3NfdXBkYXRlZCddID0gJ1RoZSBTRU8gc2V0dGluZ3Mgd2VyZSBzdWNjZXNzZnVsbHkgdXBkYXRlZC4nOwokbGFuZ1sncHJvYmxlbV9hbGVydCddID0gJ2hhcyBkZXRlY3RlZCBzZXZlcmUgcHJvYmxlbXMgd2l0aCB5b3VyIFNFTy4gJXMnOwokbGFuZ1sncHJvYmxlbV9saW5rX3RpdGxlJ10gPSAnQ2xpY2sgaGVyZSB0byBmaXggdGhlbSc7CgokbGFuZ1snaGVscF9kZXNjcmlwdGlvbl9jb250ZW50J10gPSAnPGI+SG93IHRvIHVzZSB0aGUgImRlc2NyaXB0aW9uIGNvbnRlbnQgYmxvY2siOjwvYj48YnIgLz5UbyBiZSBhYmxlIHRvIGVudGVyIGEgcGFnZSBkZXNjcmlwdGlvbiB3aGVuIGVkaXRpbmcgYSBwYWdlLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgY29kZSBhbnl3aGVyZSBvbiBldmVyeSB0ZW1wbGF0ZTo8YnIgLz48YnIgLz48cHJlPntjYXB0dXJlIGFzc2lnbj1tZXRhZGVzY3JpcHRpb259e2NvbnRlbnQgYmxvY2s9Im1ldGFkZXNjcmlwdGlvbiIgbGFiZWw9Ik1FVEEgRGVzY3JpcHRpb24iIG9uZWxpbmU9InRydWUifXsvY2FwdHVyZX08L3ByZT48YnIgLz5UaGVuLCBwdXQgIm1ldGFkZXNjcmlwdGlvbiIgaW50byB0aGUgZmllbGQgIk5hbWUgb2YgcGFnZSBkZXNjcmlwdGlvbiBjb250ZW50IGJsb2NrPGJyIC8+PGJyIC8+QWx0ZXJuYXRpdmVseSwgZW5hYmxlIHRoZSBvcHRpb24gJnF1b3Q7QXV0b21hdGljYWxseSBnZW5lcmF0ZSBkZXNjcmlwdGlvbnMgd2hlcmUgbm9uZSBpcyBnaXZlbiZxdW90Oy4gVGhpcyBpcyBub3QgYXMgZ29vZCBidXQgc3RpbGwgYmV0dGVyIHRoYW4gbm90aGluZy4nOwokbGFuZ1snaGVscF9zaXRlbWFwX3JvYm90cyddID0gJyopIFRvIHVzZSB0aGUgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgYSBzaXRlbWFwLSBhbmQgcm9ib3RzLWZpbGUsIHRoZSByb290IGRpcmVjdG9yeSBvZiB5b3VyIENNU01TIGluc3RhbGxhdGlvbiBtdXN0IGJlIHdyaXRlYWJsZSB0byB0aGUgd2ViIHNlcnZlci4gSWYgeW91ciBhbHJlYWR5IGhhdmUgYSBzaXRlbWFwLnhtbCBhbmQvcHIgcm9ib3RzLnR4dCBmaWxlLCBib3RoIG9mIHRoZW0gbXVzdCBiZSB3cml0ZWFibGUgdG8gdGhlIHdlYiBzZXJ2ZXIuJzsKCiRsYW5nWyd1c2Vfc3RhbmRhcmRfb3JfZHVibGluY29yZV9tZXRhJ10gPSAnVXNlIGF0IGxlYXN0IG9uZSBvZiB0aGUgc3RhbmRhcmQgb3IgRHVibGluIENvcmUgTWV0YSBUYWcgZ2VuZXJhdG9ycyc7CiRsYW5nWyd1c2Vfc3RhbmRhcmRfbWV0YSddID0gJ1lvdSBzaG91bGQgYWx3YXlzIGVuYWJsZSB0aGUgc3RhbmRhcmQgTWV0YSBnZW5lcmF0b3InOwokbGFuZ1snbWV0YV9kZXNjcmlwdGlvbl9taXNzaW5nJ10gPSAnVGhlIHBhZ2UgPGk+JXM8L2k+IGlzIGxhY2tpbmcgYSBNZXRhIGRlc2NyaXB0aW9uJzsKJGxhbmdbJ21ldGFfZGVzY3JpcHRpb25fc2hvcnQnXSA9ICdUaGUgTWV0YSBkZXNjcmlwdGlvbiBvZiA8aT4lczwvaT4gaXMgcmF0aGVyIHNob3J0ICggPCA3NSBjaGFycyknOwokbGFuZ1snZHVwbGljYXRlX3RpdGxlcyddID0gJ1RoZSBwYWdlcyA8aT4lczwvaT4gYW5kIDxpPiVzPC9pPiBoYXZlIHRoZSBzYW1lIHRpdGxlJzsKJGxhbmdbJ2R1cGxpY2F0ZV9kZXNjcmlwdGlvbnMnXSA9ICdUaGUgcGFnZXMgPGk+JXM8L2k+IGFuZCA8aT4lczwvaT4gaGF2ZSB0aGUgc2FtZSBNZXRhIGRlc2NyaXB0aW9uJzsKJGxhbmdbJ3Byb3ZpZGVfYW5fYXV0aG9yJ10gPSAnWW91IHNob3VsZCBwcm92aWRlIHRoZSBuYW1lIG9mIHRoZSBwYWdlIHB1Ymxpc2hlcic7CiRsYW5nWydzZXRfdXBfZGVzY3JpcHRpb25fYmxvY2snXSA9ICdTZXQgdXAgYSBjb250ZW50IGJsb2NrIGZvciBNZXRhIGRlc2NyaXB0aW9ucyc7CiRsYW5nWydhY3RpdmF0ZV9wcmV0dHlfdXJscyddID0gJ0FjdGl2YXRlIHRoZSBwcmV0dHkgVVJMcyBmZWF0dXJlIG9mIENNU01TJzsKJGxhbmdbJ3ByZXR0eV91cmxzX2hlbHAnXSA9ICc8YSBocmVmPSJodHRwOi8vd2lraS5jbXNtYWRlc2ltcGxlLm9yZy9pbmRleC5waHAvVXNlcl9IYW5kYm9vay9JbnN0YWxsYXRpb24vT3B0aW9uYWxfU2V0dGluZ3MiIHRhcmdldD0iX2JsYW5rIj5HZXQgaGVscDwvYT4nOwokbGFuZ1snY3JlYXRlX2Ffc2l0ZW1hcCddID0gJ0hhdmUgYSBHb29nbGUgWE1MIFNpdGVtYXAgYXV0b21hdGljYWxseSBjcmVhdGVkIGZvciB5b3UnOwokbGFuZ1snYXV0b21hdGljYWxseV91cGxvYWRfc2l0ZW1hcCddID0gJ0hhdmUgeW91ciBYTUwgU2l0ZW1hcCBhdXRvbWF0aWNhbGx5IHVwbG9hZGVkIHRvIEdvb2dsZSc7CiRsYW5nWydjcmVhdGVfcm9ib3RzJ10gPSAnSGF2ZSBhIHJvYm90cy50eHQgZmlsZSBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgZm9yIHlvdSc7CiRsYW5nWydzaXRlbWFwX25vdF93cml0ZWFibGUnXSA9ICdZb3VyIHNpdGVtYXAueG1sIGZpbGUgaXMgbm90IHdyaXRlYWJsZSc7CiRsYW5nWydjaG1vZF9zaXRlbWFwJ10gPSAnU2V0IHlvdXIgL3NpdGVtYXAueG1sIGZpbGUgdG8gYmUgd3JpdGVhYmxlIGJ5IHRoZSB3ZWIgc2VydmVyJzsKJGxhbmdbJ3JvYm90c19ub3Rfd3JpdGVhYmxlJ10gPSAnWW91ciByb2JvdHMudHh0IGZpbGUgaXMgbm90IHdyaXRlYWJsZSc7CiRsYW5nWydub19vcGVuZ3JhcGhfYWRtaW5zJ10gPSAnWW91IGhhdmUgbm90IHNldCBhbiBPcGVuR3JhcGggYWRtaW4gYXBwbGljYXRpb24gcmVzcC4gYWRtaW4gbGlzdCc7CiRsYW5nWydub19vcGVuZ3JhcGhfdHlwZSddID0gJ1lvdSBoYXZlIG5vdCBzZXQgdGhlIGRlZmF1bHQgT3BlbkdyYXBoIHBhZ2UgdHlwZSc7CiRsYW5nWydub19vcGVuZ3JhcGhfc2l0ZW5hbWUnXSA9ICdZb3UgaGF2ZSBub3Qgc2V0IHRoZSBPcGVuR3JhcGggc2l0ZSBuYW1lJzsKJGxhbmdbJ25vX29wZW5ncmFwaF9pbWFnZSddID0gJ1lvdSBoYXZlIG5vdCBzZXQgYW4gT3BlbkdyYXBoIGRlZmF1bHQgaW1hZ2UnOwokbGFuZ1snY2htb2Rfcm9ib3RzJ10gPSAnU2V0IHlvdXIgL3JvYm90cy50eHQgZmlsZSB0byBiZSB3cml0ZWFibGUgYnkgdGhlIHdlYiBzZXJ2ZXInOwokbGFuZ1snZWRpdF9wYWdlJ10gPSAnRWRpdCAlcyc7CiRsYW5nWydlZGl0X3BhZ2VfdG9fZml4J10gPSAnQ2xpY2sgaGVyZSB0byBlZGl0IHRoZSBwYWdlIGFuZCBmaXggdGhlIHByb2JsZW0nOwokbGFuZ1sndmlzaXRfc2V0dGluZ3MnXSA9ICdDaGFuZ2Ugc2V0dGluZ3MnOwoKJGxhbmdbJ3BhZ2VfaWQnXSA9ICdJRCc7CiRsYW5nWydwYWdlX25hbWUnXSA9ICdQYWdlIG5hbWUnOwokbGFuZ1sncHJpb3JpdHknXSA9ICdTaXRlbWFwIFByaW9yaXR5JzsKJGxhbmdbJ29nX3R5cGUnXSA9ICdPcGVuR3JhcGggdHlwZSc7CiRsYW5nWydrZXl3b3JkcyddID0gJyMgS2V5d29yZHMnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydpbmRleCddID0gJ0luZGV4YWJsZSc7CgokbGFuZ1snY2xpY2tfdG9fYWRkX2Rlc2NyaXB0aW9uJ10gPSAnQ2xpY2sgaGVyZSB0byBhZGQgYSBwYWdlIGRlc2NyaXB0aW9uJzsKJGxhbmdbJ3RvZ2dsZSddID0gJ3RvZ2dsZSc7CiRsYW5nWydyZXNldCddID0gJ3Jlc2V0JzsKJGxhbmdbJ3Jlc2V0X3RvX2RlZmF1bHQnXSA9ICdSZXNldCB0aGlzIHRvIHRoZSBkZWZhdWx0IHZhbHVlJzsKJGxhbmdbJ2VkaXRfdmFsdWUnXSA9ICdFZGl0IHRoaXMgdmFsdWUnOwoKJGxhbmdbJ2hlbHBfb3BlbmdyYXBoJ10gPSAnTG9vayA8YSBocmVmPSJodHRwOi8vZGV2ZWxvcGVycy5mYWNlYm9vay5jb20vZG9jcy9vcGVuZ3JhcGgjdHlwZXMiIHRhZ2V0PSJfYmxhbmsiPmhlcmU8L2E+IGZvciBhIGxpc3Qgb2YgYWxsb3dlZCB2YWx1ZXMnOwokbGFuZ1snZW50ZXJfbmV3X29ndHlwZSddID0gJ0VudGVyIHRoZSBuZXcgdmFsdWUgZm9yIHRoaXMgcGFnZVwncyBPcGVuR3JhcGggdHlwZSc7CiRsYW5nWydoZWxwX25ld19vZ3R5cGUnXSA9ICdMZWF2ZSBibGFuayB0byByZXZlcnQgdG8gdGhlIGRlZmF1bHQgc2V0dGluZyc7CgokbGFuZ1snZW50ZXJfbmV3X2tleXdvcmRzJ10gPSAnRW50ZXIgdGhlIG5ldyBrZXl3b3JkcyBmb3IgdGhpcyBwYWdlJzsKJGxhbmdbJ2hlbHBfbmV3X2tleXdvcmRzJ10gPSAnV2hpdGVzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBrZXl3b3Jkcy4gTGVhdmUgYmxhbmsgdG8gcmV2ZXJ0IHRvIGF1dG8gZ2VuZXJhdGVkIGtleXdvcmRzJzsKCiRsYW5nWydncm91cHRpdGxlX29wZW5ncmFwaCddID0gJ1dlIGhhdmUgZGV0ZWN0ZWQgJXMgT3BlbkdyYXBoIHJlbGF0ZWQgcHJvYmxlbShzKSc7CiRsYW5nWydncm91cHRpdGxlX3N5c3RlbSddID0gJ1dlIGhhdmUgZGV0ZWN0ZWQgJXMgcHJvYmxlbShzKSB3aXRoIHlvdXIgc3lzdGVtIGNvbmZpZ3VyYXRpb24nOwokbGFuZ1snZ3JvdXB0aXRsZV9wYWdlcyddID0gJ1dlIGhhdmUgZGV0ZWN0ZWQgJXMgcHJvYmxlbShzKSBvbiB5b3VyIGNvbnRlbnQgcGFnZXMnOwokbGFuZ1snZ3JvdXB0aXRsZV9zZXR0aW5ncyddID0gJ1dlIGhhdmUgZGV0ZWN0ZWQgJXMgcHJvYmxlbShzKSB3aXRoIHlvdXIgU0VPIFNldHRpbmdzJzsKJGxhbmdbJ2dyb3VwdGl0bGVfZGVzY3JpcHRpb25zJ10gPSAnV2UgaGF2ZSBkZXRlY3RlZCAlcyBwcm9ibGVtKHMpIHdpdGggeW91ciBwYWdlIGRlc2NyaXB0aW9ucyc7CiRsYW5nWydncm91cHRpdGxlX3RpdGxlcyddID0gJ1dlIGhhdmUgZGV0ZWN0ZWQgJXMgcHJvYmxlbShzKSB3aXRoIHlvdXIgcGFnZSB0aXRsZXMnOwoKJGxhbmdbJ3ZpZXdfYWxsJ10gPSAnVmlldyBhbGwnOwoKJGxhbmdbJ3RpdGxlX21ldGFzZXR0aW5ncyddID0gJ1BhZ2UgdGl0bGUgJiBNZXRhIGluZm9ybWF0aW9uJzsKJGxhbmdbJ3RpdGxlX3NpdGVtYXBzZXR0aW5ncyddID0gJ1NpdGVtYXAgJiBDcmF3bGVyIHNldHRpbmdzJzsKJGxhbmdbJ3RpdGxlX2tleXdvcmRzZXR0aW5ncyddID0gJ0tleXdvcmQgZ2VuZXJhdG9yIHNldHRpbmdzJzsKCiRsYW5nWydkZXNjcmlwdGlvbl9hdXRvX2dlbmVyYXRlJ10gPSAnQXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIHBhZ2UgZGVzY3JpcHRpb24gd2hlcmUgbm9uZSBpcyBwcm92aWRlZCc7CiRsYW5nWydkZXNjcmlwdGlvbl9hdXRvX3RpdGxlJ10gPSAnVGV4dCBmb3IgYXV0by1nZW5lcmF0ZWQgZGVzY3JpcHRpb25zJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX2F1dG9faGVscCddID0gJyhZb3UgPGI+bXVzdDwvYj4gaW5jbHVkZSB0aGUgdGFnIHtrZXl3b3Jkc30gaGVyZSknOwoKJGxhbmdbJ3NldF91cF9hdXRvX2Rlc2NyaXB0aW9uJ10gPSAnU2V0IHVwIHRoZSBkZXNjcmlwdGlvbiBhdXRvLWdlbmVyYXRvciBhbmQgZW5zdXJlIHRoZSB0ZXh0IGNvbnRhaW5zIHRoZSB0YWcge2tleXdvcmRzfSc7CiRsYW5nWydhdXRvX2dlbmVyYXRlZCddID0gJ0F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkJzsKJGxhbmdbJ2FuZCddID0gJ2FuZCc7CgokbGFuZ1sndGl0bGVfa2V5d29yZF93ZWlnaHQnXSA9ICdLZXl3b3JkIHdlaWdodCBzZXR0aW5ncyc7CiRsYW5nWydrZXl3b3JkX21pbmxlbmd0aF90aXRsZSddID0gJ01pbmltdW0ga2V5d29yZCBsZW5ndGgnOwokbGFuZ1sna2V5d29yZF9taW5sZW5ndGhfaGVscCddID0gJyhUaGUgbWluaW11bSBsZW5ndGggb2YgYSB3b3JkIHRvIGJlIGNvbnNpZGVyZWQgYXMgYSBrZXl3b3JkKSc7CiRsYW5nWydrZXl3b3JkX3RpdGxlX3dlaWdodF90aXRsZSddID0gJ1dlaWdodCBvZiB3b3JkcyBpbiB0aGUgcGFnZSB0aXRsZSc7CiRsYW5nWydrZXl3b3JkX3RpdGxlX3dlaWdodF9oZWxwJ10gPSAnKFRoZSB3ZWlnaHQgb2Ygd29yZHMgaW4gdGhlIHBhZ2UgdGl0bGUuIFRoZSBoaWdoZXIgYSB3b3JkXCdzIHdlaWdodCwgdGhlIG1vcmUgbGlrZWx5IGl0IGlzIHRvIGJlY29tZSBhIGtleXdvcmQpJzsKJGxhbmdbJ2tleXdvcmRfZGVzY3JpcHRpb25fd2VpZ2h0X3RpdGxlJ10gPSAnV2VpZ2h0IG9mIHdvcmRzIGluIHRoZSBwYWdlIGRlc2NyaXB0aW9uJzsKJGxhbmdbJ2tleXdvcmRfZGVzY3JpcHRpb25fd2VpZ2h0X2hlbHAnXSA9ICcoVGhlIHdlaWdodCBvZiB3b3JkcyBpbiB0aGUgcGFnZSBkZXNjcmlwdGlvbi4gVGhlIGhpZ2hlciBhIHdvcmRcJ3Mgd2VpZ2h0LCB0aGUgbW9yZSBsaWtlbHkgaXQgaXMgdG8gYmVjb21lIGEga2V5d29yZCknOwokbGFuZ1sna2V5d29yZF9oZWFkbGluZV93ZWlnaHRfdGl0bGUnXSA9ICdXZWlnaHQgb2Ygd29yZHMgaW4gY29udGVudCBoZWFkbGluZXMnOwokbGFuZ1sna2V5d29yZF9oZWFkbGluZV93ZWlnaHRfaGVscCddID0gJyhUaGUgd2VpZ2h0IG9mIHdvcmRzIGJldHdlZW4gJmx0O2gxJmd0OyB0byAmbHQ7aDYmZ3Q7IHRhZ3MuIFRoZSBoaWdoZXIgYSB3b3JkXCdzIHdlaWdodCwgdGhlIG1vcmUgbGlrZWx5IGl0IGlzIHRvIGJlY29tZSBhIGtleXdvcmQpJzsKJGxhbmdbJ2tleXdvcmRfY29udGVudF93ZWlnaHRfdGl0bGUnXSA9ICdXZWlnaHQgb2Ygd29yZHMgaW4gcGxhaW4gY29udGVudCc7CiRsYW5nWydrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0X2hlbHAnXSA9ICcoVGhlIHdlaWdodCBvZiB3b3JkcyBpbnNpZGUgdGhlIHBsYWluIGNvbnRlbnQuIFRoZSBoaWdoZXIgYSB3b3JkXCdzIHdlaWdodCwgdGhlIG1vcmUgbGlrZWx5IGl0IGlzIHRvIGJlY29tZSBhIGtleXdvcmQpJzsKCiRsYW5nWydrZXl3b3JkX21pbmltdW1fd2VpZ2h0X3RpdGxlJ10gPSAnTWluaW11bSB0b3RhbCB3ZWlnaHQgb2YgYSBrZXl3b3JkJzsKJGxhbmdbJ2tleXdvcmRfbWluaW11bV93ZWlnaHRfaGVscCddID0gJyhUaGUgbWluaW11bSB0b3RhbCB3ZWlnaHQgb2YgYSB3b3JkIHRvIGJlY29tZSBhIGtleXdvcmQuIFNob3VsZCBiZSBncmVhdGVyIHRoYW4gdGhlIGhpZ2hlc3Qgd2VpZ2h0IGZyb20gYWJvdmUuIFRoZSBzbWFsbGVyIHRoZSBudW1iZXIsIHRoZSBtb3JlIGtleXdvcmRzIHlvdSBnZXQpJzsKCiRsYW5nWydoZWxwX2tleXdvcmRfZ2VuZXJhdG9yJ10gPSAnVGhlIHNldHRpbmdzIHlvdSBjaGFuZ2Ugb24gdGhpcyBwYWdlIHdpbGwgbm90IGFmZmVjdCBhbnkga2V5d29yZHMgeW91IGVudGVyIG1hbnVhbGx5LiBGZWVsIGZyZWUgdG8gcGxheSB3aXRoIGFsbCB2YWx1ZXMgdW50aWwgeW91IGdldCB0aGUgYmVzdCByZXN1bHRzIGZvciB5b3VyIHBhZ2UuJzsKCiRsYW5nWyd0aXRsZV9rZXl3b3JkX2V4Y2x1ZGUnXSA9ICdLZXl3b3JkIGV4Y2x1c2lvbiBsaXN0JzsKJGxhbmdbJ2tleXdvcmRfZXhjbHVkZV90aXRsZSddID0gJ1dvcmRzIHRvIG5ldmVyIGNvbnNpZGVyIGFzIGtleXdvcmRzJzsKJGxhbmdbJ2tleXdvcmRfZXhjbHVkZV9oZWxwJ10gPSAnKFByb3ZpZGUgYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiB3b3JkcyB0aGF0IHNob3VsZCBuZXZlciBhcHBlYXIgaW4ga2V5d29yZCBsaXN0cyknOwoKJGxhbmdbJ2luY3JlYXNlX3ByaW9yaXR5J10gPSAnSW5jcmVhc2UgcHJpb3JpdHkgYnkgMTAlJzsKJGxhbmdbJ2RlY3JlYXNlX3ByaW9yaXR5J10gPSAnSW5jcmVhc2UgcHJpb3JpdHkgYnkgMTAlJzsKCiRsYW5nWyd0aXRsZV9yZWdlbmVyYXRlX3NpdGVtYXAnXSA9ICJSZWdlbmVyYXRlIHNpdGVtYXAgYW5kIHJvYm90cy50eHQiOwokbGFuZ1snYnV0dG9uX3JlZ2VuZXJhdGVfc2l0ZW1hcCddID0gIlJlZ2VuZXJhdGUgc2l0ZW1hcCBhbmQgcm9ib3RzLnR4dCBub3ciOwokbGFuZ1sndGV4dF9yZWdlbmVyYXRlX3NpdGVtYXAnXSA9ICJJdCBjYW4gYmUgbmVjZXNzYXJ5IHRvIHJlZ2VuZXJhdGUgdGhlIHNpdGVtYXAgYW5kIHJvYm90cy50eHQgZmlsZSBhZnRlciBleHRlbnNpdmUgY2hhbmdlcyB0byB0aGUgcGFnZSBzdHJ1Y3R1cmUiOwokbGFuZ1snc2l0ZW1hcF9yZWdlbmVyYXRlZCddID0gIkJvdGggdGhlIHNpdGVtYXAgYW5kIHRoZSByb2JvdHMudHh0IGZpbGVzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgcmVnZW5lcmF0ZWQuIjsKCiRsYW5nWydpbnN0YWxsX2RhdGFiYXNlX2Vycm9yJ10gPSAiQW4gZXJyb3IgaGFzIG9jY3VyZWQgZHVyaW5nIGluc3RhbGxhdGlvbjogVGhlIGRhdGFiYXNlIHRhYmxlIGNvdWxkIG5vdCBiZSBjcmVhdGVkLiI7CiRsYW5nWydub191cmxfZm9wZW4nXSA9ICJOb3QgcG9zc2libGUgYXMgYWxsb3dfdXJsX2ZvcGVuIGhhcyBub3QgYmVlbiBzZXQgdG8gJnF1b3Q7b24mcXVvdDsgaW4geW91ciBwaHAgY29uZmlndXJhdGlvbi4iOwokbGFuZ1sndGl0bGVfYWRkaXRpb25hbF9tZXRhX3RhZ3MnXSA9ICJBZGRpdGlvbmFsIE1ldGEgdGFncyI7CiRsYW5nWydhZGRpdGlvbmFsX21ldGFfdGFnc190aXRsZSddID0gIkFkZGl0aW9uYWwgTWV0YSB0YWdzIHRvIGJlIGluc2VydGVkIjsKJGxhbmdbJ2FkZGl0aW9uYWxfbWV0YV90YWdzX2hlbHAnXSA9ICJTcGVjaWZ5IGFkZGl0aW9uYWwgTWV0YSB0YWdzIGhlcmUgdG8gYmUgaW5zZXJ0ZWQgaW50byB0aGUgcGFnZSBoZWFkZXIuIFlvdSBjYW4gdXNlIGFsbCBzbWFydHkgdmFyaWFibGVzIGFuZCBVRFRzIGhlcmUuIjsKCiRsYW5nWydoZWxwX3Nob3diYXNlJ10gPSAiU2V0IHRoaXMgcGFyYW1ldGVyIHRvIDxjb2RlPmZhbHNlPC9jb2RlPiB0byBzdXBwcmVzcyB0aGUgb3V0cHV0IG9mIHRoZSBiYXNlIGhyZWYgdGFnLiI7CgokbGFuZ1snY2hhbmdlbG9nJ10gPSA8PDxFT1QKPHVsPgo8bGk+VmVyc2lvbiAxLjAgLSAyNSBKYW51YXJ5IDIwMTIuIEluaXRpYWwgcmVsZWFzZS4gVGhpcyBpcyBhIGZvcmsgb2YgdGhlIFNFT1Rvb2xzIG1vZHVsZSB3aXRoIENNU01TIDEuMTArIGNvbXBhdGliaWxpdHkuIENoYW5nZXMgaW5jbHVkZToKCTx1bD4KCQk8bGk+U2V0IHByZWZlcmVuY2VzIG9uIGluc3RhbGw8L2xpPgoJCTxsaT5SZW1vdmUgcHJlZmVyZW5jZXMgb24gdW5pbnN0YWxsPC9saT4KCQk8bGk+UmVwbGFjZSBhbGwgcmVmZXJlbmNlIHRvIEhpZXJhcmNoeU1hbmFnZXIgb2JqZWN0cyB3aXRoIENvbnRlbnRPcGVyYXRpb25zIG9iamVjdHM8L2xpPgoJCTxsaT5HZW5lcmF0ZSBhbGwga2V5d29yZHMsIGtleXdvcmQgc3VnZ2VzdGlvbnMsIGRlc2NyaXB0aW9ucyBhbmQgZGVmYXVsdCBkZXNjcmlwdGlvbnM8L2xpPgoJCTxsaT5HZW5lcmF0ZSBzaXRlbWFwLnhtbCBhbmQgcm9ib3RzLnR4dCBmaWxlczwvbGk+CgkJPGxpPlJldGFpbiBjaGVja2JveCBwcmVmZXJlbmNlIHNldHRpbmdzIGFmdGVyIHN1Ym1pdDwvbGk+CgkJPGxpPk9uIGZyb250ZW5kIHBhZ2UgbG9hZCwgZW5zdXJlIHRoYXQgYSBjb3JyZXNwb25kaW5nIHJlY29yZCBleGlzdHMgaW4gdGhlIHNlb3Rvb2xzMiBkYXRhYmFzZSB0YWJsZTwvbGk+Cgk8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjAuMSAtIDI1IEphbnVhcnkgMjAxMi4gTWlub3IgYnVnIGZpeDwvbGk+CjxsaT5WZXJzaW9uIDEuMC4yIC0gMSBGZWJydWFyeSAyMDEyLiBCdWcgZml4PC9saT4KPGxpPlZlcnNpb24gMS4wLjMgLSAxIEZlYnJ1YXJ5IDIwMTIuIEJ1ZyBmaXg8L2xpPgo8bGk+VmVyc2lvbiAxLjAuNCAtIDEgRmVicnVhcnkgMjAxMi4gQ29ycmVjdGlvbjwvbGk+CjxsaT5WZXJzaW9uIDEuMC41IC0gNiBGZWJydWFyeSAyMDEyLiBBZGQgZXZlbnQgaGFuZGxlcnMgdG8gcHVzaCBzaXRlbWFwIHRvIEdvb2dsZSB3ZWJtYXN0ZXJzPC9saT4KPGxpPlZlcnNpb24gMS4wLjYgLSA1IE1hcmNoIDIwMTIuIEltcHJvdmVkIGhhbmRsaW5nIG9mIHNzbCB1cmxzIGFuZCBidWcgZml4IHdoZW4gdGhlcmUgYXJlIG5vIHNob3J0IG1ldGEgZGVzY3JpcHRpb25zPC9saT4KPGxpPlZlcnNpb24gMS4wLjcgLSA5IEFwcmlsIDIwMTIuIEJ1ZyBmaXg8L2xpPgo8bGk+VmVyc2lvbiAxLjAuOCAtIDkgQXByaWwgMjAxMi4gQnVnIGZpeDwvbGk+CjxsaT5WZXJzaW9uIDEuMC45IC0gMTEgQXByaWwgMjAxMi4KICAgIDx1bD4KICAgICAgICA8bGk+TW9yZSBpbXByb3ZlbWVudHMgdG8gc3NsIGhhbmRsaW5nIGVzcGVjaWFsbHkgaW4gdGhlIHNpdGVtYXAueG1sICh0aGFua3MgYW5kcmllc2luZm9zZXJ2KTwvbGk+CiAgICAgICAgPGxpPkFiaWxpdHkgdG8gc2hvdyBhbnkgQWN0aXZlIHBhZ2UsIG5vdCBqdXN0IHBhZ2VzIHdpdGggQWN0aXZlIGFuZCBTaG93IEluIE1lbnUgaW4gdGhlIHNpdGVtYXAueG1sICh0aGFua3MgTWF0dCk8L2xpPgogICAgPC91bD4KPGxpPlZlcnNpb24gMS4wLjEwIC0gMjQgTWF5IDIwMTIgLSBtb3N0bHkgaW1wcm92ZW1lbnRzIGluIHRoZSBzaXRlbWFwIGFyZWEsIGllOgogICAgPHVsPgogICAgICAgIDxsaT5BbGxvd3Mgc2l0ZW1hcCBpbmRleGluZyBvZiBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgVVJMIGxpbmtzPC9saT4KICAgICAgICA8bGk+RmlsdGVycyBvdXQgRXJyb3IgUGFnZSBmcm9tIHNpdGVtYXAueG1sPC9saT4KICAgIDwvdWw+CjwvdWw+CkVPVDsKCiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlNFT1Rvb2xzMiBoZWxwcyB5b3UgdG8gZ2V0IHlvdXIgU0VPIChTZWFyY2ggRW5naW5lIE9wdGltaXphdGlvbikgcmlnaHQuIFRoZSBtb2R1bGUgYWRkcyBzZXZlcmFsIFNFTyBjYXBhYmlsaXRpZXMgdG8geW91ciBDTVNNUyBpbnN0YWxsYXRpb24gYW5kIGFsZXJ0cyB5b3UgaWYgeW91IG1pc3NlZCBvdXQgb24gc29tZXRoaW5nIFNFTyByZWxhdGVkLiBDdXJyZW50bHksIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZDo8L3A+Cjx1bD4KPGxpPi0gZ2VuZXJhdGVzIE1ldGEgdGFncyBpbiBzdGFuZGFyZCBodG1sLCBEdWJsaW4gQ29yZSBhbmQgT3BlbkdyYXBoIGZvcm1hdHM8L2xpPgo8bGk+LSBhdXRvbWF0aWNhbGx5IGV4dHJhY3RzIGtleXdvcmRzIGZyb20geW91ciBwYWdlcyBhbmQgYWRkcyB0aGVtIHRvIHRoZSBtZXRhIHRhZ3MgYW5kIHBhZ2UgdGl0bGU8L2xpPgo8bGk+LSBsZXRzIHlvdSBkZXRlcm1pbmUgd2l0aCBhIHNpbmdsZSBjbGljayB3aGV0aGVyIGNlcnRhaW4gcGFnZXMgc2hvdWxkIGJlIGluZGV4ZWQgYnkgc2VhcmNoIGVuZ2luZXMgb3Igbm90PC9saT4KPGxpPi0gZ2VuZXJhdGVzIGEgc2l0ZW1hcC54bWwgZmlsZSB3aXRoIHlvdXIgcGFnZXMgd2hpbGUgZ2l2aW5nIHlvdSBmdWxsIGNvbnRyb2wgb3ZlciB0aGUgcHJpb3JpdGllcyBvZiB5b3VyIHBhZ2VzPC9saT4KPGxpPi0gZ2VuZXJhdGVzIGEgcm9ib3RzLnR4dCBmaWxlIGV4cGxpY2l0bHkgZGlzYWxsb3dpbmcgYWNjZXNzIHRvIHBhZ2VzIHlvdSBkb25cJ3Qgd2FudCB0byBiZSBpbmRleGVkPC9saT4KPGxpPi0gYWxlcnRzIHlvdSB3aGVuIHRoZXJlIGFyZSBzZXZlcmFsIHBhZ2VzIGZlYXR1cmluZyB0aGUgc2FtZSBwYWdlIHRpdGxlcyBhbmQgZGVzY3JpcHRpb25zPC9saT4KPGxpPi0gYWxlcnRzIHlvdSB3aGVuIHZlcnkgc2hvcnQgcGFnZSBtZXRhIGRlc2NyaXB0aW9ucyBhcmUgZGV0ZWN0ZWQ8L2xpPgo8bGk+LSBhdXRvbWF0aWNhbGx5IHN1Ym1pdHMgeW91ciBzaXRlbWFwIGZpbGUgdG8gR29vZ2xlIHdoZW4geW91IGNoYW5nZSB5b3VyIGNvbnRlbnQ8L2xpPgo8L3VsPgo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4KPHA+Rmlyc3QsIG9wZW4gYWxsIHRlbXBsYXRlcyB3aGVyZSB5b3Ugd2FudCBkbyB1c2UgU0VPVG9vbHMyLiBSZW1vdmUgdGhlIGNvbXBsZXRlICZsdDt0aXRsZSZndDsgdGFnIGFuZCB0aGUge21ldGFkYXRhfSB0YWcgKGV2ZW4gaWYgaXQgc2F5cyB0byBuZXZlciByZW1vdmUgaXQpIGFuZCByZXBsYWNlIHRoZW0gd2l0aCB0aGUgdGFnPC9wPgo8cHJlPgp7U0VPVG9vbHMyfQo8L3ByZT48YnIgLz4KPHA+TmV4dCwgYXQgdGhlIGJvdHRvbSBvZiB5b3VyIHRlbXBsYXRlIChhZnRlciB0aGUgY2xvc2luZyAmbHQ7L2JvZHkmZ3Q7IHRhZyksIGluc2VydCB0aGUgZm9sbG93aW5nIGNvZGU6PC9wPgo8cHJlPgp7Y2FwdHVyZSBhc3NpZ249Im1ldGFkZXNjcmlwdGlvbiJ9e2NvbnRlbnQgYmxvY2s9Im1ldGFkZXNjcmlwdGlvbiIgbGFiZWw9IlBhZ2UgRGVzY3JpcHRpb24iIG9uZWxpbmU9InRydWUifXsvY2FwdHVyZX0KPC9wcmU+PGJyIC8+CjxwPlRoaXMgaXMgd2hlcmUgeW91XCdsbCBlbnRlciBhIHNob3J0IHBhZ2UgZGVzY3JpcHRpb24gKG9uZSBvciB0d28gc2VudGVuY2VzKSB0aGF0IHdpbGwgYXBwZWFyIGluIHRoZSBzZWFyY2ggZW5naW5lXCdzIHJlc3VsdHMgYW5kIGlmLCBmb3IgZXhhbXBsZSwgc29tZW9uZSBzaGFyZXMgYSBsaW5rIHRvIHlvdXIgcGFnZSBvbiBmYWNlYm9vay48L3A+CjxwPk5vdywgdmlzaXQgdGhlIHNldHRpbmdzIHRhYnMgZm9yIHBhZ2UgdGl0bGUgJiBtZXRhIGluZm9ybWF0aW9uLCB0aGUgc2l0ZW1hcCAmIGNyYXdsZXIgc2V0dGluZ3MgYW5kIHRoZSBrZXl3b3JkIGdlbmVyYXRvciBzZXR0aW5ncyBhbmQgZmlsbCBpbiBhbGwgcmVxdWlyZWQgaW5mb3JtYXRpb24gZm9yIHlvdXIgcGFnZS4gVW5kZXIgIk5hbWUgb2YgcGFnZSBkZXNjcmlwdGlvbiBjb250ZW50IGJsb2NrIiB5b3UgbmVlZCB0byBlbnRlciB0aGUgbmFtZSBvZiB0aGUgY29udGVudCBibG9jayB5b3UganVzdCBhZGRlZCB0byB5b3VyIHRlbXBsYXRlcyAoIlBhZ2UgRGVzY3JpcHRpb24iIGluIG91ciBleGFtcGxlKS4gVGhlIHRhYiAiU0VPIEFsZXJ0cyIgd2lsbCBhbGVydCB5b3UgaWYgaXQgZGV0ZWN0cyBhbnl0aGluZyB0aGF0IGlzIHJlcXVpcmVkIGJ1dCBub3QgYWN0aXZhdGVkIG9yIGZpbGxlZCBpbi4gWW91IHNob3VsZCBhbHNvIGNvbnNpZGVyIHNpZ25pbmcgdXAgeW91cgpzaXRlIHdpdGggR29vZ2xlIFdlYm1hc3RlciB0b29scy4gVGhlcmUsIHNlbGVjdCAiTWV0YSB0YWcgdmFsaWRhdGlvbiIgYW5kIHBhc3RlIHRoZSB2ZXJpZmljYXRpb24gY29kZSAocXVpdGUgYSBsb25nIHN0cmluZyBvZiBjaGFyYWN0ZXJzIGFuZCBudW1iZXJzKSBpbnRvIHRoZSBib3ggIlZlcmlmaWNhdGlvbiBDb2RlIiBpbiAiU0VPIFNldHRpbmdzIiB0byBhdXRvbWF0aWNhbGx5IHZlcmlmeSB0aGF0IHlvdSBhcmUgcmVhbGx5CnRoZSBvd25lciBvZiB5b3VyIHBhZ2UgKG5vIG5lZWQgdG8gcGFzdGUgdGhlIEdvb2dsZSBNZXRhLWNvZGUgaW50byB5b3VyIHRlbXBsYXRlKS48L3A+CjxwPkFzIHNvb24gYXMgZXZlcnl0aGluZyBpcyBzZXQgdXAsIGxvb2sgYXQgdGhlICJTRU8gQWxlcnRzIiB0YWIgYW5kIGZpeCBhbGwgcHJvYmxlbXMgZGV0ZWN0ZWQgaGVyZS4gVGFrZSBjYXJlIHRvIGluc2VydCBhICh1bmlxdWUpIHBhZ2UgZGVzY3JpcHRpb24gb24gZXZlcnkgcGFnZSB5b3UgZWRpdCBpbiB0aGUgZmllbGQgIlBhZ2UgRGVzY3JpcHRpb24iIGF0IHRoZSBib3R0b20gb2YgeW91ciAiRWRpdCBQYWdlIiBmb3JtLjwvcD4KPHA+VG8gc2V0IHlvdXIgb3duIGtleXdvcmRzIChpbnN0ZWFkIG9mIHRoZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBvbmVzKSBvciBPcGVuR3JhcGggdHlwZSBmb3IgY2VydGFpbiBwYWdlcywgdmlzaXQgdGhlICJQYWdlIHNldHRpbmdzIiB0YWIgd2hlcmUgeW91XCdsbCBmaW5kIGEgbGlzdCBvZiBhbGwgcGFnZXMgeW91IGhhdmUgaW4geW91ciBzeXN0ZW0uIFRoZXJlLCB5b3UgY2FuIGFsc28gY2hhbmdlIHRoZSBzaXRlbWFwIHByaW9yaXR5ICh3aGljaCBpcyBhdXRvLWNhbGN1bGF0ZWQgYnkgZGVmYXVsdCkgb2YgYSBwYWdlIHRvIGluZGljYXRlIHRoYXQgaXQgc2hvdWxkCmJlIGNvbnNpZGVyZWQgbW9yZSBpbXBvcnRhbnQgZm9yIHNlYXJjaCBlbmdpbmUgbWF0Y2hlcyBvbiB5b3VyIHBhZ2Ugb3IgZXhjbHVkZSBjZXJ0YWluIHBhZ2VzIGZyb20gdGhlIHNlYXJjaCBpbmRleC48L3A+CjxwPlNFT1Rvb2xzMiB3aWxsIGFsc28gYXV0b21hdGljYWxseSBpbnNlcnQgYSBsaW5rIHRvIHRoZSBpbWFnZSB0byBiZSB1c2VkIGFzIHRoZSBtYWluIGltYWdlIG9mIHlvdXIgcGFnZSBpZiB5b3Ugc2VsZWN0IGFuICJJbWFnZSIgZm9yIHRoZSBwYWdlIGZyb20gd2l0aGluIHlvdXIgcGFnZVwncyAiT3B0aW9ucyIgdGFiICh0aGlzIGlzIGltcG9ydGFudCBmb3IgcGVvcGxlIHN1Ym1pdHRpbmcgYSBsaW5rIHRvIHlvdXIgcGFnZSBlLmcuIG9uIGZhY2Vib29rKS4gQWxzbywgaWYgeW91IGFyZSB1c2luZyBPcGVuR3JhcGgsIHRoZSBpbWFnZSBzZWxlY3RlZCBoZXJlCndpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgT3BlbkdyYXBoIGltYWdlIHlvdSBzcGVjaWZpZWQgZnJvbSB3aXRoaW4gIlNFTyBTZXR0aW5ncyIuIFBsZWFzZSBiZSBhd2FyZSB0aGF0IHlvdSBuZWVkIHRvIHVwbG9hZCB0aG9zZSBpbWFnZXMgdG8geW91ciAvdXBsb2Fkcy9pbWFnZXMgZGlyZWN0b3J5LjwvcD4KPGgzPkNhbiBJIHVzZSBzbWFydHkgdmFyaWFibGVzPzwvaDM+CjxwPllvdSBjYW4gdXNlIGFsbCBzbWFydHkgdmFyaWFibGVzIGFuZCBVRFRzIHdpdGhpbiB0aGUgc2V0dGluZ3MgZmllbGRzIDxpPlBhZ2UgdGl0bGU8L2k+LCA8aT5NZXRhIHBhZ2UgdGl0bGU8L2k+LCA8aT5BdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBkZXNjcmlwdGlvbnM8L2k+IGFuZCA8aT5BZGRpdGlvbmFsIG1ldGEgdGFnczwvaT4uIEVudGVyIDxjb2RlPntkZWJ1Z308L2NvZGU+IHRvIHNlZSBhIGxpc3Qgb2YgYWxsIGF2YWlsYWJsZSB2YXJpYWJsZXMuPC9wPgo8aDM+V2hpY2ggc21hcnR5IHZhcmlhYmxlcyBhcmUgZXhwb3J0ZWQgYnkgU0VPVG9vbHMyPzwvaDM+Cjxjb2RlPnskc2VvX2tleXdvcmRzfTwvY29kZT46IEEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgYWxsIGtleXdvcmRzIHNldCBmb3IgdGhlIHBhZ2UgKGluY2x1ZGluZyB0aGUgZGVmYXVsdCBrZXl3b3Jkcyk8YnIgLz4KPGNvZGU+eyR0aXRsZV9rZXl3b3Jkc308L2NvZGU+OiBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbCBrZXl3b3JkcyBzZXQgZm9yIHRoZSBwYWdlIChpbmNsdWRpbmcgdGhlIGRlZmF1bHQga2V5d29yZHMpPGJyIC8+Cjxjb2RlPnskZGVmYXVsdF9rZXl3b3Jkc308L2NvZGU+OiBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbCBkZWZhdWx0IGtleXdvcmRzPGJyIC8+Cjxjb2RlPnskcGFnZV9rZXl3b3Jkc308L2NvZGU+OiBBIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIGFsbCBrZXl3b3JkcyBzZXQgZm9yIHRoZSBwYWdlICh3aXRob3V0IHRoZSBkZWZhdWx0IGtleXdvcmRzKQo8aDM+U3VwcG9ydDwvaDM+CjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMTIsIENsaXAgTWFnaWMgPGEgaHJlZj0ibWFpbHRvOmFkbWluQGNsaXBtYWdpYy5jb20uYXUiPiZsdDthZG1pbkBjbGlwbWFnaWMuY29tLmF1Jmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4nOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIEluc3RhbGwoKQoJICAgV2hlbiB5b3VyIG1vZHVsZSBpcyBpbnN0YWxsZWQsIHlvdSBtYXkgbmVlZCB0byBkbyBzb21lCgkgICBzZXR1cC4gVHlwaWNhbCB0aGluZ3MgdGhhdCBoYXBwZW4gaGVyZSBhcmUgdGhlIGNyZWF0aW9uCgkgICBhbmQgcHJlcG9wdWxhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsIGRhdGFiYXNlIHNlcXVlbmNlcywKCSAgIHBlcm1pc3Npb25zLCBwcmVmZXJlbmNlcywgZXRjLgoJICAgCSAgIAoJICAgRm9yIGluZm9ybWF0aW9uIG9uIHRoZSBjcmVhdGlvbiBvZiBkYXRhYmFzZSB0YWJsZXMsCgkgICBjaGVjayBvdXQgdGhlIEFET0RCIERhdGEgRGljdGlvbmFyeSBwYWdlIGF0CgkgICBodHRwOi8vcGhwbGVucy5jb20vbGVucy9hZG9kYi9kb2NzLWRhdGFkaWN0Lmh0bQoJICAgCgkgICBUaGlzIGZ1bmN0aW9uIGNhbiByZXR1cm4gYSBzdHJpbmcgaW4gY2FzZSBvZiBhbnkgZXJyb3IsCgkgICBhbmQgQ01TIHdpbGwgbm90IGNvbnNpZGVyIHRoZSBtb2R1bGUgaW5zdGFsbGVkLgoJICAgU3VjY2Vzc2Z1bCBpbnN0YWxscyBzaG91bGQgcmV0dXJuIEZBTFNFIG9yIG5vdGhpbmcgYXQgYWxsLgoJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoJCQoJCS8vIFR5cGljYWwgRGF0YWJhc2UgSW5pdGlhbGl6YXRpb24KCQkkZGIgPWNtc21zKCktPkdldERiKCk7CgkJCgkJLy8gbXlzcWwtc3BlY2lmaWMsIGJ1dCBpZ25vcmVkIGJ5IG90aGVyIGRhdGFiYXNlCgkJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJCiAgICAgICAgLy8gdGFibGUgc2NoZW1hIGRlc2NyaXB0aW9uCiAgICAgICAgJGZsZHMgPSAiCgkJCWNvbnRlbnRfaWQgSSBLRVksCgkJCWluZGV4YWJsZSBJKDEpLAoJCQlrZXl3b3JkcyBDKDI1NSksCgkJCXByaW9yaXR5IEkoMyksCgkJCW9ndHlwZSBDKDMyKQoJCQkiOwoKCQkvLyBjcmVhdGUgaXQuIFRoaXMgc2hvdWxkIGRvIGVycm9yIGNoZWNraW5nLCBidXQgSSdtIGEgbGF6eSBzb2QuCgkJJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Nlb3Rvb2xzMiIsCgkJCQkkZmxkcywgJHRhYm9wdGFycmF5KTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJLy8gVGVzdCBpZiBpbnN0YWxsYXRpb24gd29ya2VkOgoJCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyJzsKCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJaWYgKCEkcmVzdWx0KSB7CgkJCXJldHVybiAkdGhpcy0+TGFuZygnaW5zdGFsbF9kYXRhYmFzZV9lcnJvcicpOwoJCX0KCQkKCQkvLyBwZXJtaXNzaW9ucwoJCSR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uKCdFZGl0IFNFTyBTZXR0aW5ncycsJ0VkaXQgU0VPIFNldHRpbmdzJyk7CiAgICAgICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ0VkaXQgcGFnZSBkZXNjcmlwdGlvbnMnLCdFZGl0IHBhZ2UgZGVzY3JpcHRpb25zJyk7CgoJCS8vIGFkZCBzaXRlIHByZWZlcmVuY2VzCgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FkZGl0aW9uYWxfbWV0YV90YWdzJywnJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NyZWF0ZV9yb2JvdHMnLDEpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjcmVhdGVfc2l0ZW1hcCcsMSk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfa2V5d29yZHMnLCcnKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYXV0bycsJ1RoaXMgcGFnZSBjb3ZlcnMgdGhlIHRvcGljcyB7a2V5d29yZHN9Jyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG9fZ2VuZXJhdGUnLDEpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9ibG9jaycsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0JywxKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgna2V5d29yZF9kZXNjcmlwdGlvbl93ZWlnaHQnLDQpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdrZXl3b3JkX2V4Y2x1ZGUnLCdpLCBtZSwgbXksIG15c2VsZiwgd2UsIG91ciwgb3Vycywgb3Vyc2VsdmVzLCB5b3UsIHlvdXIsIHlvdXJzLCB5b3Vyc2VsZiwgeW91cnNlbHZlcywgaGUsIGhpbSwgaGlzLCBoaW1zZWxmLCBzaGUsIGhlciwgaGVycywgaGVyc2VsZiwgaXQsIGl0cywgaXRzZWxmLCB0aGV5LCB0aGVtLCB0aGVpciwgdGhlaXJzLCB0aGVtc2VsdmVzLCB3aGF0LCB3aGljaCwgd2hvLCB3aG9tLCB0aGlzLCB0aGF0LCB0aGVzZSwgdGhvc2UsIGFtLCBpcywgYXJlLCB3YXMsIHdlcmUsIGJlLCBiZWVuLCBiZWluZywgaGF2ZSwgaGFzLCBoYWQsIGhhdmluZywgZG8sIGRvZXMsIGRpZCwgZG9pbmcsIGEsIGFuLCB0aGUsIGFuZCwgYnV0LCBpZiwgb3IsIGJlY2F1c2UsIGFzLCB1bnRpbCwgd2hpbGUsIG9mLCBhdCwgYnksIGZvciwgd2l0aCwgYWJvdXQsIGFnYWluc3QsIGJldHdlZW4sIGludG8sIHRocm91Z2gsIGR1cmluZywgYmVmb3JlLCBhZnRlciwgYWJvdmUsIGJlbG93LCB0bywgZnJvbSwgdXAsIGRvd24sIGluLCBvdXQsIG9uLCBvZmYsIG92ZXIsIHVuZGVyLCBhZ2FpbiwgZnVydGhlciwgdGhlbiwgb25jZSwgaGVyZSwgdGhlcmUsIHdoZW4sIHdoZXJlLCB3aHksIGhvdywgYWxsLCBhbnksIGJvdGgsIGVhY2gsIGZldywgbW9yZSwgbW9zdCwgb3RoZXIsIHNvbWUsIHN1Y2gsIG5vLCBub3IsIG5vdCwgb25seSwgb3duLCBzYW1lLCBzbywgdGhhbiwgdG9vLCB2ZXJ5LCBsb3JlbSwgY29taW5nJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2tleXdvcmRfaGVhZGxpbmVfd2VpZ2h0JywyKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5pbXVtX3dlaWdodCcsNyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2tleXdvcmRfbWlubGVuZ3RoJyw1KTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgna2V5d29yZF90aXRsZV93ZWlnaHQnLDYpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX2NvbnRyaWJ1dG9yJywnJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfY29weXJpZ2h0JywnJyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfZHVibGluY29yZScsMCk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfbGF0aXR1ZGUnLCcnKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX2xvbmdpdHVkZScsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaCcsMCk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FkbWlucycsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hcHBsaWNhdGlvbicsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9pbWFnZScsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZScsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF90aXRsZScsJ3t0aXRsZX0nKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfdHlwZScsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX3B1Ymxpc2hlcicsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX3JlZ2lvbicsJycpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtZXRhX3N0YW5kYXJkJywxKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgncHVzaF9zaXRlbWFwJywxKTsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgndGl0bGUnLCd7dGl0bGV9IHwgeyRzaXRlbmFtZX0gLSB7JHRpdGxlX2tleXdvcmRzfScpOwoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0aXRsZV9tZXRhJywne3RpdGxlfSB8IHskc2l0ZW5hbWV9Jyk7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ3ByZWZfdmVyaWZpY2F0aW9uJywnJyk7CgkJCgkJLy8gcmVnaXN0ZXIgZXZlbnRzIGFuZCBhZGQgZXZlbnQgaGFuZGxlcnMKICAgIAkkdGhpcy0+Q3JlYXRlRXZlbnQoICdQcmVmc1VwZGF0ZWQnICk7CiAgICAgICAgJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsJ0NvbnRlbnRFZGl0UG9zdCcsZmFsc2UpOwogICAgICAgICR0aGlzLT5BZGRFdmVudEhhbmRsZXIoJ0NvcmUnLCdDb250ZW50RGVsZXRlUG9zdCcsZmFsc2UpOwoJCQoJCQoJCS8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwoJCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygnaW5zdGFsbGVkJywkdGhpcy0+R2V0VmVyc2lvbigpKSk7CgkJCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVuaW5zdGFsbCgpCgkgICBTb21ldGltZXMsIGFuIGV4Y2VwdGlvbmFsbHkgdW5lbmxpZ2h0ZW5lZCBvciBpZ25vcmFudAoJICAgYWRtaW4gd2lsbCB3aXNoIHRvIHVuaW5zdGFsbCB5b3VyIG1vZHVsZS4gV2hpbGUgaXQKCSAgIHdvdWxkIGJlIGJlc3QgdG8gbGF5IGludG8gdGhlc2UgaWRpb3RzIHdpdGggYSBjbHVlc3RpY2ssCgkgICB3ZSB3aWxsIGRvIHRoZSBtYWduYW5pbW91cyB0aGluZyBhbmQgcmVtb3ZlIHRoZSBtb2R1bGUKCSAgIGFuZCBjbGVhbiB1cCB0aGUgZGF0YWJhc2UsIHBlcm1pc3Npb25zLCBhbmQgcHJlZmVyZW5jZXMKCSAgIHRoYXQgYXJlIHNwZWNpZmljIHRvIGl0LgoJICAgVGhpcyBpcyB0aGUgbWV0aG9kIHdoZXJlIHdlIGRvIHRoaXMuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgoJCS8vIFR5cGljYWwgRGF0YWJhc2UgUmVtb3ZhbAoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJCgkJLy8gcmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZQoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Nlb3Rvb2xzMiIgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgkJCgkJLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwoJCSR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdFZGl0IFNFTyBTZXR0aW5ncycpOwogICAgICAgICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdFZGl0IHBhZ2UgZGVzY3JpcHRpb25zJyk7CgkJCgkJLy8gcmVtb3ZlIHNpdGUgcHJlZmVyZW5jZXMKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnYWRkaXRpb25hbF9tZXRhX3RhZ3MnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnY3JlYXRlX3JvYm90cycpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdjcmVhdGVfc2l0ZW1hcCcpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdkZWZhdWx0X2tleXdvcmRzJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG8nKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZScpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9ibG9jaycpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0Jyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2tleXdvcmRfZGVzY3JpcHRpb25fd2VpZ2h0Jyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2tleXdvcmRfZXhjbHVkZScpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdrZXl3b3JkX2hlYWRsaW5lX3dlaWdodCcpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdrZXl3b3JkX21pbmltdW1fd2VpZ2h0Jyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2tleXdvcmRfbWlubGVuZ3RoJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2tleXdvcmRfdGl0bGVfd2VpZ2h0Jyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ21ldGFfY29udHJpYnV0b3InKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9jb3B5cmlnaHQnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9kdWJsaW5jb3JlJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ21ldGFfbGF0aXR1ZGUnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9sb2NhdGlvbicpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtZXRhX2xvbmdpdHVkZScpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaCcpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hZG1pbnMnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfYXBwbGljYXRpb24nKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfaW1hZ2UnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfc2l0ZW5hbWUnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfdGl0bGUnKTsKCQkkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfdHlwZScpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtZXRhX3B1Ymxpc2hlcicpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtZXRhX3JlZ2lvbicpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtZXRhX3N0YW5kYXJkJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3B1c2hfc2l0ZW1hcCcpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCd0aXRsZScpOwoJCSR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCd0aXRsZV9tZXRhJyk7CgkJJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3ByZWZfdmVyaWZpY2F0aW9uJyk7CgkJCgkJLy8gcmVtb3ZlIGV2ZW50cyBhbmQgZXZlbnQgaGFuZGxlcnMKCQkkdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCAnUHJlZnNVcGRhdGVkJyApOwogICAgICAgICR0aGlzLT5SZW1vdmVFdmVudCggJ1ByZWZzVXBkYXRlZCcgKTsKICAgICAgICAkdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDb3JlJywnQ29udGVudEVkaXRQb3N0JyxmYWxzZSk7CiAgICAgICAgJHRoaXMtPlJlbW92ZUV2ZW50SGFuZGxlcignQ29yZScsJ0NvbnRlbnREZWxldGVQb3N0JyxmYWxzZSk7CiAgICAgICAgCgkJCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1bmluc3RhbGxlZCcpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAgIFVwZ3JhZGUoKQoJICAgSWYgeW91ciBtb2R1bGUgdmVyc2lvbiBudW1iZXIgZG9lcyBub3QgbWF0Y2ggdGhlIHZlcnNpb24KCSAgIG51bWJlciBvZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSwgdGhlIENNUyBBZG1pbiB3aWxsIGdpdmUKCSAgIHlvdSBhIGNoYW5jZSB0byB1cGdyYWRlIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIGZ1bmN0aW9uCgkgICB0aGF0IGFjdHVhbGx5IGhhbmRsZXMgdGhlIHVwZ3JhZGUuCgkgICBJZGVhbGx5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYW5kbGUgdXBncmFkZXMgaW5jcmVtZW50YWxseSwKCSAgIHNvIHlvdSBjb3VsZCB1cGdyYWRlIGZyb20gdmVyc2lvbiAwLjAuMSB0byAxMC41Ljcgd2l0aAoJICAgYSBzaW5nbGUgY2FsbC4gRm9yIGEgZ3JlYXQgZXhhbXBsZSBvZiB0aGlzLCBzZWUgdGhlIE5ld3MKCSAgIG1vZHVsZSBpbiB0aGUgc3RhbmRhcmQgQ01TIGluc3RhbGwuCgkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgkJJGN1cnJlbnRfdmVyc2lvbiA9ICRvbGR2ZXJzaW9uOwoJCXN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQoJCXsKCQkJY2FzZSAiMS4wIjoKCQkJY2FzZSAiMS4wLjEiOgoJCQljYXNlICIxLjAuMiI6CgkJCWNhc2UgIjEuMC4zIjoKCQkJY2FzZSAiMS4wLjQiOgogICAgICAgIAkJLy8gcmVnaXN0ZXIgZXZlbnRzCiAgICAgICAgCQkkdGhpcy0+Q3JlYXRlRXZlbnQoICdQcmVmc1VwZGF0ZWQnICk7CiAgICAgICAgCQlicmVhazsKICAgICAgICAJCQoJCQljYXNlICIxLjAuNSI6CgkJCWNhc2UgIjEuMC42IjoKCQkJY2FzZSAiMS4wLjciOgoJCQljYXNlICIxLjAuOCI6CgkJCWNhc2UgIjEuMC45IjoKCQkJICBkZWZhdWx0OgoJCQkgICAgYnJlYWs7CgkJfQoJCQoJCS8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwoJCSR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZygndXBncmFkZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/SEOTools2.module-orig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIE1vZHVsZTogU0VPVG9vbHMyIC0gU2V2ZXJhbCB0b29scyB0byBoZWxwIHdpdGggU2VhcmNoIEVuZ2luZSBPcHRpbWl6YXRpb24gYW5kIGNoZWNrIGZvciBzdWJvcHRpbWFsIFNFTy1yZWxhdGVkIHRoaW5ncy4NCiMgVmVyc2lvbjogMS4wLCBDbGlwIE1hZ2ljDQojDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMTAgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQ0KIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZw0KIw0KIyBUaGlzIGZpbGUgb3JpZ2luYWxseSBjcmVhdGVkIGJ5IE1vZHVsZU1ha2VyIG1vZHVsZSwgdmVyc2lvbiAwLjMuMg0KIyBDb3B5cmlnaHQgKGMpIDIwMTAgYnkgU2FtdWVsIEdvbGRzdGVpbiAoc2pnQGNtc21hZGVzaW1wbGUub3JnKQ0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMNCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4NCiMNCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUNCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0ENCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTA0KIw0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KLy9lcnJvcl9yZXBvcnRpbmcoRV9BTEwpOw0KDQokY29uZmlnID0gY21zbXMoKS0+Z2V0Q29uZmlnKCk7DQokcm9vdF91cmwgPSBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddIDogJGdDbXMtPmNvbmZpZ1snc3NsX3VybCddOw0KDQoNCg0KY2xhc3MgU0VPVG9vbHMyIGV4dGVuZHMgQ01TTW9kdWxlDQp7DQoNCiAgZnVuY3Rpb24gR2V0TmFtZSgpDQogIHsNCiAgICByZXR1cm4gJ1NFT1Rvb2xzMic7DQogIH0NCg0KICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgR2V0RnJpZW5kbHlOYW1lKCkNCiAgIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5nLCBwcmVmZXJhYmx5IGEgbG9jYWxpemVkIG5hbWUNCiAgIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCdzIHNob3duIGluIHRoZQ0KICAgQWRtaW4gTWVudXMgYW5kIHNlY3Rpb24gcGFnZXMgKGlmIHRoZSBtb2R1bGUgaGFzIGFuIGFkbWluDQogICBjb21wb25lbnQpLg0KDQogICBTZWUgdGhlIG5vdGUgb24gbG9jYWxpemF0aW9uIGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlLg0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7DQogIH0NCg0KDQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICBHZXRWZXJzaW9uKCkNCiAgIFRoaXMgY2FuIHJldHVybiBhbnkgc3RyaW5nLCBwcmVmZXJhYmx5IGEgbnVtYmVyIG9yDQogICBzb21ldGhpbmcgdGhhdCBtYWtlcyBzZW5zZSBmb3IgZGVzaWduYXRpbmcgYSB2ZXJzaW9uLg0KICAgVGhlIENNUyB3aWxsIHVzZSB0aGlzIHRvIGlkZW50aWZ5IHdoZXRoZXIgb3Igbm90DQogICB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIG1vZHVsZSBpcyBjdXJyZW50LCBhbmQNCiAgIHRoZSBtb2R1bGUgd2lsbCB1c2UgaXQgdG8gZmlndXJlIG91dCBob3cgdG8gdXBncmFkZQ0KICAgaXRzZWxmIGlmIHJlcXVlc3RlZC4NCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQ0KICB7DQogICAgcmV0dXJuICcxLjAuOSc7DQogIH0NCg0KICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAgR2V0SGVscCgpDQogICBUaGlzIHJldHVybnMgSFRNTCBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kdWxlLg0KICAgVHlwaWNhbGx5LCB5b3UnbGwgd2FudCB0byBpbmNsdWRlIGluZm9ybWF0aW9uIG9uIGhvdyB0bw0KICAgdXNlIHRoZSBtb2R1bGUuDQoNCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuDQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICBmdW5jdGlvbiBHZXRIZWxwKCkNCiAgew0KICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOw0KICB9DQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIEdldEF1dGhvcigpDQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIE1vZHVsZQ0KICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuDQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICBmdW5jdGlvbiBHZXRBdXRob3IoKQ0KICB7DQogICAgcmV0dXJuICdDbGlwIE1hZ2ljJzsNCiAgfQ0KDQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICBHZXRBdXRob3JFbWFpbCgpDQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIE1vZHVsZQ0KICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuIEl0IGhlbHBzIHVzZXJzDQogICBvZiB5b3VyIG1vZHVsZSBnZXQgaW4gdG91Y2ggd2l0aCB5b3UgdG8gc2VuZCBidWcgcmVwb3J0cywNCiAgIHF1ZXN0aW9ucywgY2FzZXMgb2YgYmVlciwgYW5kL29yIGxhcmdlIHN1bXMgb2YgbW9uZXkuDQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpDQogIHsNCiAgICByZXR1cm4gJ2FkbWluQGNsaXBtYWdpYy5jb20uYXUnOw0KICB9DQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIEdldENoYW5nZUxvZygpDQogICBUaGlzIHJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwcmVzZW50ZWQgaW4gdGhlIG1vZHVsZQ0KICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSBBYm91dCBsaW5rLiBJdCBoZWxwcyB1c2Vycw0KICAgZmlndXJlIG91dCB3aGF0J3MgY2hhbmdlZCBiZXR3ZWVuIHJlbGVhc2VzLg0KICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4NCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOw0KICB9DQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIElzUGx1Z2luTW9kdWxlKCkNCiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIG9yIGZhbHNlLCBkZXBlbmRpbmcgdXBvbg0KICAgd2hldGhlciB1c2VycyBjYW4gaW5jbHVkZSB0aGUgbW9kdWxlIGluIGEgcGFnZSBvcg0KICAgdGVtcGxhdGUgdXNpbmcgYSBzbWFydHkgdGFnIG9mIHRoZSBmb3JtDQogICB7Y21zX21vZHVsZSBtb2R1bGU9J1NFT1Rvb2xzMicgcGFyYW0xPXZhbCBwYXJhbTI9dmFsLi4ufQ0KDQogICBJZiB5b3VyIG1vZHVsZSBkb2VzIG5vdCBnZXQgaW5jbHVkZWQgaW4gcGFnZXMgb3INCiAgIHRlbXBsYXRlcywgcmV0dXJuICJmYWxzZSIgaGVyZS4NCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlKCkNCiAgew0KICAgIHJldHVybiB0cnVlOw0KICB9DQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIEhhc0FkbWluKCkNCiAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUsIGRlcGVuZGluZyBvbg0KICAgd2hldGhlciB5b3VyIG1vZHVsZSBhZGRzIGFueXRoaW5nIHRvIHRoZSBBZG1pbiBhcmVhIG9mDQogICB0aGUgc2l0ZS4gRm9yIHRoZSByZXN0IG9mIHRoZXNlIGNvbW1lbnRzLCBJJ2xsIGJlIGNhbGxpbmcNCiAgIHRoZSBhZG1pbiBwYXJ0IG9mIHlvdXIgbW9kdWxlIHRoZSAiQWRtaW4gUGFuZWwiIGZvcg0KICAgd2FudCBvZiBhIGJldHRlciB0ZXJtLg0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgZnVuY3Rpb24gSGFzQWRtaW4oKQ0KICB7DQogICAgcmV0dXJuIHRydWU7DQogIH0NCg0KDQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICBHZXRBZG1pblNlY3Rpb24oKQ0KICAgSWYgeW91ciBtb2R1bGUgaGFzIGFuIEFkbWluIFBhbmVsLCB5b3UgY2FuIHNwZWNpZnkNCiAgIHdoaWNoIEFkbWluIFNlY3Rpb24gKG9yIHRvcC1sZXZlbCBBZG1pbiBNZW51KSBpdCBzaG93cw0KICAgdXAgaW4uIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgdG8gc3BlY2lmeSB0aGF0DQogICBzZWN0aW9uLiBWYWxpZCByZXR1cm4gdmFsdWVzIGFyZToNCg0KICAgbWFpbiAgICAgICAgLSB0aGUgTWFpbiBtZW51IHRhYi4NCiAgIGNvbnRlbnQgICAgIC0gdGhlIENvbnRlbnQgbWVudQ0KICAgbGF5b3V0ICAgICAgLSB0aGUgTGF5b3V0IG1lbnUNCiAgIHVzZXJzZ3JvdXBzIC0gdGhlIFVzZXJzIGFuZCBHcm91cHMgbWVudQ0KICAgZXh0ZW5zaW9ucyAgLSB0aGUgRXh0ZW5zaW9ucyBtZW51ICh0aGlzIGlzIHRoZSBkZWZhdWx0KQ0KICAgc2l0ZWFkbWluICAgLSB0aGUgU2l0ZSBBZG1pbiBtZW51DQogICB2aWV3c2l0ZSAgICAtIHRoZSBWaWV3IFNpdGUgbWVudSB0YWINCiAgIGxvZ291dCAgICAgIC0gdGhlIExvZ291dCBtZW51IHRhYg0KDQogICBOb3RlIHRoYXQgaWYgeW91IHBsYWNlIHlvdXIgbW9kdWxlIGluIHRoZSBtYWluLA0KICAgdmlld3NpdGUsIG9yIGxvZ291dCBzZWN0aW9ucywgaXQgd2lsbCBzaG93IHVwIGluIHRoZQ0KICAgbWVudXMsIGJ1dCB3aWxsIG5vdCBiZSB2aXNpYmxlIGluIGFueSB0b3AtbGV2ZWwNCiAgIHNlY3Rpb24gcGFnZXMuDQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQ0KICB7DQogICAgcmV0dXJuICdjb250ZW50JzsNCiAgfQ0KDQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIEdldEFkbWluRGVzY3JpcHRpb24oKQ0KICAgSWYgeW91ciBtb2R1bGUgZG9lcyBoYXZlIGFuIEFkbWluIFBhbmVsLCB5b3UNCiAgIGNhbiBoYXZlIGl0IHJldHVybiBhIGRlc2NyaXB0aW9uIHN0cmluZyB0aGF0IGdldHMgc2hvd24NCiAgIGluIHRoZSBBZG1pbiBTZWN0aW9uIHBhZ2UgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlLg0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2FkbWluZGVzY3JpcHRpb24nKTsNCiAgfQ0KDQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIFZpc2libGVUb0FkbWluVXNlcigpDQogICBJZiB5b3VyIG1vZHVsZSBkb2VzIGhhdmUgYW4gQWRtaW4gUGFuZWwsIHlvdQ0KICAgY2FuIGNvbnRyb2wgd2hldGhlciBvciBub3QgaXQncyBkaXNwbGF5ZWQgYnkgdGhlIGJvb2xlYW4NCiAgIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQNCiAgIHRvIGhpZGUgbW9kdWxlcyBmcm9tIGFkbWlucyB3aG8gbGFjayBwZXJtaXNzaW9uIHRvIHVzZQ0KICAgdGhlbS4NCg0KICAgVHlwaWNhbGx5LCB5b3UnbGwgdXNlIHNvbWUgcGVybWlzc2lvbiB0byBzZXQgdGhpcw0KICAgKGUuZy4sICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1NvbWUgUGVybWlzc2lvbicpOyApDQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0VkaXQgU0VPIFNldHRpbmdzJyk7DQogIH0NCg0KDQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICBDaGVja0FjY2VzcygpDQogICBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gd2lsbCBjaGVjayBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbiwNCiAgIGFuZCBkaXNwbGF5IGFuIGVycm9yIHBhZ2UgaWYgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGFkZXF1YXRlIHBlcm1pc3Npb25zLg0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgZnVuY3Rpb24gQ2hlY2tBY2Nlc3MoJHBlcm0gPSAnRWRpdCBTRU8gU2V0dGluZ3MnKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJHBlcm0pOw0KICB9DQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIERpc3BsYXlFcnJvclBhZ2UoKQ0KICAgVGhpcyBpcyBhIHNpbXBsZSBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyBlcnJvciBwYWdlcy4NCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2U9JycpDQogIHsNCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Vycm9yJywgJHRoaXMtPkxhbmcoJ2Vycm9yJykpOw0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ21lc3NhZ2UnLCAkbWVzc2FnZSk7DQoNCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUNCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOw0KICB9DQoNCg0KDQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICBHZXREZXBlbmRlbmNpZXMoKQ0KICAgWW91ciBtb2R1bGUgbWF5IG5lZWQgYW5vdGhlciBtb2R1bGUgdG8gYWxyZWFkeSBiZSBpbnN0YWxsZWQNCiAgIGJlZm9yZSB5b3UgY2FuIGluc3RhbGwgaXQuDQogICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kDQogICBtaW5pbXVtIHZlcnNpb24gbnVtYmVycyB0aGF0IHRoaXMgbW9kdWxlIHJlcXVpcmVzLg0KDQogICBJdCBzaG91bGQgcmV0dXJuIGFuIGhhc2gsIGVnLg0KICAgcmV0dXJuIGFycmF5KCdzb21lbW9kdWxlJz0+JzEuMCcsICdvdGhlcm1vZHVsZSc9PicxLjEnKTsNCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpDQogIHsNCiAgICByZXR1cm4gYXJyYXkoKTsNCiAgfQ0KDQogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICBNaW5pbXVtQ01TVmVyc2lvbigpDQogICBZb3VyIG1vZHVsZSBtYXkgcmVxdWlyZSBmdW5jdGlvbnMgb3Igb2JqZWN0cyBmcm9tDQogICBhIHNwZWNpZmljIHZlcnNpb24gb2YgQ01TIE1hZGUgU2ltcGxlLg0KICAgRXZlciBzaW5jZSB2ZXJzaW9uIDAuMTEsIHlvdSBjYW4gc3BlY2lmeSB3aGljaCBtaW5pbXVtDQogICBDTVMgTVMgdmVyc2lvbiBpcyByZXF1aXJlZCBmb3IgeW91ciBtb2R1bGUsIHdoaWNoIHdpbGwNCiAgIHByZXZlbnQgaXQgZnJvbSBiZWluZyBpbnN0YWxsZWQgYnkgYSB2ZXJzaW9uIG9mIENNUyB0aGF0DQogICBjYW4ndCBydW4gaXQuDQoNCiAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZQ0KICAgbWluaW11bSB2ZXJzaW9uIHRoYXQgdGhpcyBtb2R1bGUgcmVxdWlyZXMuDQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpDQogIHsNCiAgICByZXR1cm4gIjEuOS4yIjsNCiAgfQ0KDQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIE1heGltdW1DTVNWZXJzaW9uKCkNCiAgIFlvdSBtYXkgd2FudCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tIHVzaW5nIHlvdXIgbW9kdWxlIGluDQogICBmdXR1cmUgdmVyc2lvbnMgb2YgQ01TIE1hZGUgU2ltcGxlLCBlc3BlY2lhbGx5IGlmIHlvdQ0KICAgdGhpbmsgQVBJIGZlYXR1cmVzIHlvdSB1c2UgbWF5IGNoYW5nZSAtLSBhZnRlciBhbGwsIHlvdQ0KICAgbmV2ZXIgcmVhbGx5IGtub3cgaG93IHRoZSBDTVMgTVMgQVBJIGNvdWxkIGV2b2x2ZS4NCg0KICAgU28sIHRvIHByZXZlbnQgcGVvcGxlIGZyb20gZmxvb2RpbmcgeW91IHdpdGggYnVnIHJlcG9ydHMNCiAgIHdoZW4gYSBuZXcgdmVyc2lvbiBvZiBDTVMgTVMgaXMgcmVsZWFzZWQsIHlvdSBjYW4gc2ltcGx5DQogICByZXN0cmljdCB0aGUgdmVyc2lvbi4gVGhlbiwgb2YgY291cnNlLCB0aGUgb251cyBpcyBvbiB5b3UNCiAgIHRvIHJlbGVhc2UgYSBuZXcgdmVyc2lvbiBvZiB5b3VyIG1vZHVsZSB3aGVuIGEgbmV3IHZlcnNpb24NCiAgIG9mIHRoZSBDTVMgaXMgcmVsZWFzZWQuLi4NCg0KICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlDQogICBtYXhpbXVtIHZlcnNpb24gdGhhdCB0aGlzIG1vZHVsZSBzdXBwb3J0cy4NCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovDQogIC8qIGZ1bmN0aW9uIE1heGltdW1DTVNWZXJzaW9uKCkNCiAgIHsNCiAgIHJldHVybjsNCiAgIH0NCiAgICovDQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIEluc3RhbGxQb3N0TWVzc2FnZSgpDQogICBBZnRlciBpbnN0YWxsYXRpb24sIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8NCiAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhDQogICBzdHJpbmcgd2hpY2ggd2lsbCBiZSBkaXNwbGF5ZWQuDQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpOw0KICB9DQoNCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiAgIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkNCiAgIEFmdGVyIHJlbW92aW5nIGEgbW9kdWxlLCB0aGVyZSBtYXkgYmUgdGhpbmdzIHlvdSB3YW50IHRvDQogICBjb21tdW5pY2F0ZSB0byB5b3VyIGFkbWluLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYQ0KICAgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkLg0KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQ0KICB7DQogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0dW5pbnN0YWxsJyk7DQogIH0NCg0KDQogIC8qKg0KICAgKiBVbmluc3RhbGxQcmVNZXNzYWdlKCkNCiAgICogVGhpcyBhbGxvd3MgeW91IHRvIGRpc3BsYXkgYSBtZXNzYWdlIGFsb25nIHdpdGggYSBZZXMvTm8gZGlhbG9nIGJveC4gSWYgdGhlIHVzZXIgcmVzcG9uZHMNCiAgICogaW4gdGhlIGFmZmlybWF0aXZlIHRvIHlvdXIgbWVzc2FnZSwgdGhlIHVuaW5zdGFsbCB3aWxsIHByb2NlZWQuIElmIHRoZXkgcmVzcG9uZCBpbiB0aGUNCiAgICogbmVnYXRpdmUsIHRoZSB1bmluc3RhbGwgd2lsbCBiZSBjYW5jZWxlZC4gVGh1cywgeW91ciBtZXNzYWdlIHNob3VsZCBiZSBvZiB0aGUgZm9ybQ0KICAgKiAiQWxsIG1vZHVsZSBkYXRhIHdpbGwgYmUgZGVsZXRlZC4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuaW5zdGFsbCB0aGlzIG1vZHVsZT8iDQogICAqDQogICAqIElmIHlvdSBkb24ndCB3YW50IHRoZSBkaWFsb2csIGhhdmUgdGhpcyBtZXRob2QgcmV0dXJuIGEgRkFMU0UsIHdoaWNoIHdpbGwgY2F1c2UgdGhlDQogICAqIG1vZHVsZSB0byB1bmluc3RhbGwgaW1tZWRpYXRlbHkgaWYgdGhlIHVzZXIgY2xpY2tzIHRoZSAidW5pbnN0YWxsIiBsaW5rLg0KICAgKi8NCiAgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpDQogIHsNCiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIEdldE5vdGlmaWNhdGlvbk91dHB1dCgkcHJpb3JpdHkgPSAzKSB7DQogICAgaWYgKGNvdW50KCR0aGlzLT5nZXRVcmdlbnRBbGVydHMoKSkgPiAwKSB7DQogICAgICAkdGV4dCA9ICR0aGlzLT5MYW5nKCdwcm9ibGVtX2FsZXJ0JyxBcnJheSgkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgJycsICR0aGlzLT5MYW5nKCdwcm9ibGVtX2xpbmtfdGl0bGUnKSkpKTsNCg0KICAgICAgJG9iaiA9IG5ldyBTdGRDbGFzczsNCiAgICAgICRvYmotPnByaW9yaXR5ID0gMzsNCiAgICAgICRvYmotPmh0bWwgPSAkdGV4dDsNCg0KICAgICAgcmV0dXJuICRvYmo7DQogICAgfQ0KICB9DQoNCg0KICBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkgew0KICAgICR0aGlzLT5SZWdpc3Rlck1vZHVsZVBsdWdpbigpOw0KDQogICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcyh0cnVlKTsNCg0KICAgICR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3Nob3diYXNlJywgJ3RydWUnLCAkdGhpcy0+TGFuZygnaGVscF9zaG93YmFzZScpKTsNCiAgfQ0KDQoNCiAgZnVuY3Rpb24gZ2V0VXJnZW50QWxlcnRzKCkgew0KICAgIGdsb2JhbCAkZ0NtczsNCiAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCiAgICAkcm9vdF91cmwgPSBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddIDogJGdDbXMtPmNvbmZpZ1snc3NsX3VybCddOw0KDQogICAgJGFsZXJ0cyA9IEFycmF5KCk7DQogICAgLy8gRW5hYmxlIFByZXR0eSBVUkxzDQogICAgaWYgKCgkY29uZmlnWyd1cmxfcmV3cml0aW5nJ10gIT0gIm1vZF9yZXdyaXRlIikgJiYgKCRjb25maWdbJ3VybF9yZXdyaXRpbmcnXSAhPSAnaW50ZXJuYWwnKSkgew0KICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsNCiAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdzeXN0ZW0nOw0KICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnYWN0aXZhdGVfcHJldHR5X3VybHMnKTsNCiAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPkxhbmcoJ3ByZXR0eV91cmxzX2hlbHAnKTsNCiAgICAgICRhbGVydHNbXSA9ICRhbGVydDsNCiAgICB9DQogICAgLy8gTm8gTWV0YSB0YWdzIGFyZSBpbnNlcnRlZA0KICAgIGlmICgoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfc3RhbmRhcmQnLDApICE9IDEpICYmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9kdWJsaW5jb3JlJywwKSAhPSAxKSkgew0KICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsNCiAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdzZXR0aW5ncyc7DQogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCd1c2Vfc3RhbmRhcmRfb3JfZHVibGluY29yZV9tZXRhJyk7DQogICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7DQogICAgICAkYWxlcnRzW10gPSAkYWxlcnQ7DQogICAgfQ0KDQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9hdXRvX2dlbmVyYXRlJywwKSAhPSAxKSB7DQogICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2Jsb2NrJywnJykgIT0gJycpIHsNCiAgICAgICAgLy8gUGFnZXMgd2l0aG91dCBkZXNjcmlwdGlvbg0KICAgICAgICAkcXVlcnkgPSAnU0VMRUNUICosYy5jb250ZW50X2lkIEFTIGNpZCwgYy50eXBlIEFTIGN0eXBlIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnQgYyBMRUZUIEpPSU4gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnRfcHJvcHMgcCBPTiAoYy5jb250ZW50X2lkID0gcC5jb250ZW50X2lkIEFORCBwLnByb3BfbmFtZSA9ICInLnN0cl9yZXBsYWNlKCcgJywnXycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2Jsb2NrJywnJykpLiciKSBXSEVSRSAocC5jb250ZW50IElTIE5VTEwgT1IgcC5jb250ZW50ID0gIiIpIEFORCBjLnR5cGUgPSAiY29udGVudCIgTElNSVQgMCwyMSc7DQogICAgICAgICRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQogICAgICAgIHdoaWxlICgkcHJvYmxlbSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsNCiAgIAkJICAJICBpZiAoJHByb2JsZW1bJ2N0eXBlJ10gPT0gJ2NvbnRlbnQnKSB7DQogICAJCSAgCSAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgCQkgIAkgICAgJGFsZXJ0Wydncm91cCddID0gJ3BhZ2VzJzsNCiAgIAkJICAJICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ21ldGFfZGVzY3JpcHRpb25fbWlzc2luZycsQXJyYXkoJHByb2JsZW1bJ2NvbnRlbnRfbmFtZSddKSk7DQogICAJCSAgCSAgICBpZiAoaXNzZXQoJF9HRVRbJ3NwXyddKSkgew0KICAgCQkgIAkgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/c3BfPScuJF9HRVRbJ3NwXyddLicmY29udGVudF9pZD0nLiRwcm9ibGVtWydjaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2VfdG9fZml4JykuJzwvYT4nOw0KICAgCQkgIAkgICAgfWVsc2V7DQogICAJCSAgCSAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJzxhIGhyZWY9IicuJHJvb3RfdXJsLicvJy4kY29uZmlnWydhZG1pbl9kaXInXS4nL2VkaXRjb250ZW50LnBocD9fc3hfPScuJF9HRVRbJ19zeF8nXS4nJmNvbnRlbnRfaWQ9Jy4kcHJvYmxlbVsnY2lkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlX3RvX2ZpeCcpLic8L2E+JzsNCiAgIAkJICAJICAgIH0NCiAgIAkJICAJICAgICRhbGVydHNbXSA9ICRhbGVydDsNCiAgIAkJICAJICB9DQogICAgICAgIH0NCiAgICAgIH1lbHNlew0KICAgICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnc2V0dGluZ3MnOw0KICAgICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdzZXRfdXBfZGVzY3JpcHRpb25fYmxvY2snKTsNCiAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nbWV0YXNldHRpbmdzJykpOw0KICAgICAgICAkYWxlcnRzW10gPSAkYWxlcnQ7DQogICAgICB9DQogICAgfWVsc2VpZihzdHJwb3MoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG8nLCcnKSwne2tleXdvcmRzfScpID09PSBmYWxzZSkgew0KICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsNCiAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdzZXR0aW5ncyc7DQogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdzZXRfdXBfYXV0b19kZXNjcmlwdGlvbicpOw0KICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nbWV0YXNldHRpbmdzJykpOw0KICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0Ow0KICAgIH0NCg0KICAgIC8vIHNpdGVtYXAueG1sIG5vdCB3cml0ZWFibGUNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9zaXRlbWFwJywxKSA9PSAxKSB7DQogICAgICBpZiAoIWlzX3dyaXRlYWJsZSgkY29uZmlnWydyb290X3BhdGgnXSAuICcvc2l0ZW1hcC54bWwnKSkgew0KICAgICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnc3lzdGVtJzsNCiAgICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnc2l0ZW1hcF9ub3Rfd3JpdGVhYmxlJyk7DQogICAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPkxhbmcoJ2NobW9kX3NpdGVtYXAnKTsNCiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIHJvYm90cy50eHQgbm90IHdyaXRlYWJsZQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3JvYm90cycsMSkgPT0gMSkgew0KICAgICAgJGZwID0gQGZvcGVuKCRjb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9yb2JvdHMudHh0JywiYSIpOw0KICAgICAgQGZjbG9zZSgkZnApOw0KICAgICAgaWYgKCFpc193cml0ZWFibGUoJGNvbmZpZ1sncm9vdF9wYXRoJ10gLiAnL3JvYm90cy50eHQnKSkgew0KICAgICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnc3lzdGVtJzsNCiAgICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygncm9ib3RzX25vdF93cml0ZWFibGUnKTsNCiAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+TGFuZygnY2htb2Rfcm9ib3RzJyk7DQogICAgICAgICRhbGVydHNbXSA9ICRhbGVydDsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoJywwKSA9PSAxKSB7DQogICAgICAvLyBObyBPcGVuR3JhcGggYWRtaW4gc2V0DQogICAgICBpZiAoKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hZG1pbnMnLCcnKSA9PSAnJykgJiYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9hcHBsaWNhdGlvbicsJycpID09ICcnKSkgew0KICAgICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnb3BlbmdyYXBoJzsNCiAgICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnbm9fb3BlbmdyYXBoX2FkbWlucycpOw0KICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7DQogICAgICAgICRhbGVydHNbXSA9ICRhbGVydDsNCiAgICAgIH0NCiAgICAgIC8vIE5vIE9wZW5HcmFwaCBwYWdlIHR5cGUgc2V0DQogICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKSA9PSAnJykgew0KICAgICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnb3BlbmdyYXBoJzsNCiAgICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnbm9fb3BlbmdyYXBoX3R5cGUnKTsNCiAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nbWV0YXNldHRpbmdzJykpOw0KICAgICAgICAkYWxlcnRzW10gPSAkYWxlcnQ7DQogICAgICB9DQogICAgICAvLyBObyBPcGVuR3JhcGggc2l0ZW5hbWUgc2V0DQogICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3NpdGVuYW1lJywnJykgPT0gJycpIHsNCiAgICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsNCiAgICAgICAgJGFsZXJ0Wydncm91cCddID0gJ29wZW5ncmFwaCc7DQogICAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ25vX29wZW5ncmFwaF9zaXRlbmFtZScpOw0KICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7DQogICAgICAgICRhbGVydHNbXSA9ICRhbGVydDsNCiAgICAgIH0NCiAgICAgIC8vIE5vIE9wZW5HcmFwaCBpbWFnZSBzZXQNCiAgICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9vcGVuZ3JhcGhfaW1hZ2UnLCcnKSA9PSAnJykgew0KICAgICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnb3BlbmdyYXBoJzsNCiAgICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnbm9fb3BlbmdyYXBoX2ltYWdlJyk7DQogICAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPmNyZWF0ZUxpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsIG51bGwsICR0aGlzLT5MYW5nKCd2aXNpdF9zZXR0aW5ncycpLCBBcnJheSgndGFiJz0+J21ldGFzZXR0aW5ncycpKTsNCiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiAkYWxlcnRzOw0KICB9DQoNCiAgZnVuY3Rpb24gZ2V0SW1wb3J0YW50QWxlcnRzKCkgew0KICAgIGdsb2JhbCAkZ0NtczsNCg0KICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KICAgICRhbGVydHMgPSBBcnJheSgpOw0KICAgICRyb290X3VybCA9IGVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSA/ICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10gOiAkZ0Ntcy0+Y29uZmlnWydzc2xfdXJsJ107DQoNCiAgICAvLyBQYWdlcyB3aXRoIHNob3J0IGRlc2NyaXB0aW9uDQogICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqLGMuY29udGVudF9pZCBBUyBjaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nY29udGVudCBjIElOTkVSIEpPSU4gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnRfcHJvcHMgcCBPTiAoYy5jb250ZW50X2lkID0gcC5jb250ZW50X2lkIEFORCBwLnByb3BfbmFtZSA9ICInLnN0cl9yZXBsYWNlKCcgJywnXycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2Jsb2NrJywnJykpLiciKSBXSEVSRSBDSEFSX0xFTkdUSChwLmNvbnRlbnQpIDwgNzUgQU5EIGMudHlwZSA9ICJjb250ZW50IiBBTkQgcC5jb250ZW50IDw+ICIiIExJTUlUIDAsMjEnOw0KICAgICRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQogICAgaWYgKCRyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKSB7DQogICAgICB3aGlsZSAoJHByb2JsZW0gPSAkcmVzdWx0LT5mZXRjaFJvdygpKSB7DQogICAgICAgICRhbGVydCA9IEFycmF5KCk7DQogICAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdkZXNjcmlwdGlvbnMnOw0KICAgICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdtZXRhX2Rlc2NyaXB0aW9uX3Nob3J0JyxBcnJheSgkcHJvYmxlbVsnY29udGVudF9uYW1lJ10pKTsNCiAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydzcF8nXSkpIHsNCiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/c3BfPScuJF9HRVRbJ3NwXyddLicmY29udGVudF9pZD0nLiRwcm9ibGVtWydjaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2VfdG9fZml4JykuJzwvYT4nOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/X3N4Xz0nLiRfR0VUWydfc3hfJ10uJyZjb250ZW50X2lkPScuJHByb2JsZW1bJ2NpZCddLiciPicuJHRoaXMtPkxhbmcoJ2VkaXRfcGFnZV90b19maXgnKS4nPC9hPic7DQogICAgICAgIH0NCiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0Ow0KICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIFBhZ2VzIHdpdGggZHVwbGljYXRlIHRpdGxlDQogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBjMS5jb250ZW50X2FsaWFzIEFTIGMxbmFtZSwgYzEuY29udGVudF9pZCBBUyBjMWlkLCBjMi5jb250ZW50X2FsaWFzIEFTIGMybmFtZSwgYzIuY29udGVudF9pZCBBUyBjMmlkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnQgYzEgSU5ORVIgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nY29udGVudCBjMiBPTiAoYzEuY29udGVudF9uYW1lID0gYzIuY29udGVudF9uYW1lIEFORCBjMS5jb250ZW50X2lkIDwgYzIuY29udGVudF9pZCkgV0hFUkUgYzEudHlwZSA9ICJjb250ZW50IiBBTkQgYzIudHlwZSA9ICJjb250ZW50IiBMSU1JVCAwLDIxJzsNCiAgICAkcmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgIGlmICgkcmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkgew0KDQogICAgICB3aGlsZSAoJHByb2JsZW0gPSAkcmVzdWx0LT5mZXRjaFJvdygpKSB7DQogICAgICAgICRhbGVydCA9IEFycmF5KCk7DQogICAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICd0aXRsZXMnOw0KICAgICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdkdXBsaWNhdGVfdGl0bGVzJyxBcnJheSgkcHJvYmxlbVsnYzFuYW1lJ10sJHByb2JsZW1bJ2MybmFtZSddKSk7DQogICAgICAgIGlmIChpc3NldCgkX0dFVFsnc3BfJ10pKSB7DQogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP3NwXz0nLiRfR0VUWydzcF8nXS4nJmNvbnRlbnRfaWQ9Jy4kcHJvYmxlbVsnYzFpZCddLiciPicuJHRoaXMtPkxhbmcoJ2VkaXRfcGFnZScsQXJyYXkoJHByb2JsZW1bJ2MxbmFtZSddKSkuJzwvYT4nOw0KICAgICAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJzxhIGhyZWY9IicuJHJvb3RfdXJsLicvJy4kY29uZmlnWydhZG1pbl9kaXInXS4nL2VkaXRjb250ZW50LnBocD9zcF89Jy4kX0dFVFsnc3BfJ10uJyZjb250ZW50X2lkPScuJHByb2JsZW1bJ2MyaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2UnLEFycmF5KCRwcm9ibGVtWydjMm5hbWUnXSkpLic8L2E+JzsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP19zeF89Jy4kX0dFVFsnX3N4XyddLicmY29udGVudF9pZD0nLiRwcm9ibGVtWydjMWlkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlJyxBcnJheSgkcHJvYmxlbVsnYzFuYW1lJ10pKS4nPC9hPic7DQogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP19zeF89Jy4kX0dFVFsnX3N4XyddLicmY29udGVudF9pZD0nLiRwcm9ibGVtWydjMmlkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlJyxBcnJheSgkcHJvYmxlbVsnYzJuYW1lJ10pKS4nPC9hPic7DQogICAgICAgIH0NCiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0Ow0KICAgICAgfQ0KICAgIH0NCiAgICAvLyBQYWdlcyB3aXRoIGR1cGxpY2F0ZSBkZXNjcmlwdGlvbg0KICAgICRxdWVyeSA9ICdTRUxFQ1QgcDEuY29udGVudF9pZCBBUyBjMWlkLCBwMi5jb250ZW50X2lkIEFTIGMyaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nY29udGVudF9wcm9wcyBwMSBJTk5FUiBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50X3Byb3BzIHAyIE9OIChwMS5wcm9wX25hbWUgPSBwMi5wcm9wX25hbWUgQU5EIHAxLnByb3BfbmFtZSA9ICInLnN0cl9yZXBsYWNlKCcgJywnXycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2Jsb2NrJywnJykpLiciIEFORCBwMS5jb250ZW50X2lkIDwgcDIuY29udGVudF9pZCBBTkQgcDEuY29udGVudCA8PiAiIiBBTkQgcDIuY29udGVudCA8PiAiIikgV0hFUkUgcDEuY29udGVudCA9IHAyLmNvbnRlbnQgTElNSVQgMCwyMSc7DQogICAgJHJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCiAgICBpZiAoJHJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApIHsNCg0KICAgICAgd2hpbGUgKCRwcm9ibGVtID0gJHJlc3VsdC0+ZmV0Y2hSb3coKSkgew0KICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGNvbnRlbnRfaWQsIGNvbnRlbnRfbmFtZSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRwcm9ibGVtWydjMWlkJ10uJyBPUiBjb250ZW50X2lkID0gJy4kcHJvYmxlbVsnYzJpZCddOw0KICAgICAgICAkcmVzdWx0MSA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCiAgICAgICAgJGZpcnN0ID0gJHJlc3VsdDEtPmZldGNoUm93KCk7DQogICAgICAgICRzZWNvbmQgPSAkcmVzdWx0MS0+ZmV0Y2hSb3coKTsNCiAgICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsNCiAgICAgICAgJGFsZXJ0Wydncm91cCddID0gJ2Rlc2NyaXB0aW9ucyc7DQogICAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2R1cGxpY2F0ZV9kZXNjcmlwdGlvbnMnLEFycmF5KCRmaXJzdFsnY29udGVudF9uYW1lJ10sJHNlY29uZFsnY29udGVudF9uYW1lJ10pKTsNCiAgICAgICAgaWYgKGlzc2V0KCRfR0VUWydzcF8nXSkpIHsNCiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/c3BfPScuJF9HRVRbJ3NwXyddLicmY29udGVudF9pZD0nLiRmaXJzdFsnY29udGVudF9pZCddLiciPicuJHRoaXMtPkxhbmcoJ2VkaXRfcGFnZScsQXJyYXkoJGZpcnN0Wydjb250ZW50X25hbWUnXSkpLic8L2E+JzsNCiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/c3BfPScuJF9HRVRbJ3NwXyddLicmY29udGVudF9pZD0nLiRzZWNvbmRbJ2NvbnRlbnRfaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2UnLEFycmF5KCRzZWNvbmRbJ2NvbnRlbnRfbmFtZSddKSkuJzwvYT4nOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/X3N4Xz0nLiRfR0VUWydfc3hfJ10uJyZjb250ZW50X2lkPScuJGZpcnN0Wydjb250ZW50X2lkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlJyxBcnJheSgkZmlyc3RbJ2NvbnRlbnRfbmFtZSddKSkuJzwvYT4nOw0KICAgICAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJzxhIGhyZWY9IicuJHJvb3RfdXJsLicvJy4kY29uZmlnWydhZG1pbl9kaXInXS4nL2VkaXRjb250ZW50LnBocD9fc3hfPScuJF9HRVRbJ19zeF8nXS4nJmNvbnRlbnRfaWQ9Jy4kc2Vjb25kWydjb250ZW50X2lkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlJyxBcnJheSgkc2Vjb25kWydjb250ZW50X25hbWUnXSkpLic8L2E+JzsNCiAgICAgICAgfQ0KICAgICAgICAkYWxlcnRzW10gPSAkYWxlcnQ7DQogICAgICB9DQogICAgfQ0KICAgIC8vIE5vIGF1dGhvciBwcm92aWRlZA0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9wdWJsaXNoZXInLCcnKSA9PSAnJykgew0KICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsNCiAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdzZXR0aW5ncyc7DQogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdwcm92aWRlX2FuX2F1dGhvcicpOw0KICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nbWV0YXNldHRpbmdzJykpOw0KICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0Ow0KICAgIH0NCiAgICByZXR1cm4gJGFsZXJ0czsNCiAgfQ0KDQogIGZ1bmN0aW9uIGdldE5vdGljZUFsZXJ0cygpIHsNCiAgICBnbG9iYWwgJGdDbXM7DQoNCiAgICAkYWxlcnRzID0gQXJyYXkoKTsNCiAgICAvLyBObyBzdGFuZGFyZCBtZXRhDQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3N0YW5kYXJkJywxKSAhPSAxKSB7DQogICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygndXNlX3N0YW5kYXJkX21ldGEnKTsNCiAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPmNyZWF0ZUxpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsIG51bGwsICR0aGlzLT5MYW5nKCd2aXNpdF9zZXR0aW5ncycpLCBBcnJheSgndGFiJz0+J21ldGFzZXR0aW5ncycpKTsNCiAgICAgICRhbGVydHNbXSA9ICRhbGVydDsNCiAgICB9DQogICAgLy8gU3VibWl0IGEgc2l0ZW1hcA0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3NpdGVtYXAnLDEpICE9IDEpIHsNCiAgICAgICRhbGVydCA9IEFycmF5KCk7DQogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdjcmVhdGVfYV9zaXRlbWFwJyk7DQogICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidzaXRlbWFwc2V0dGluZ3MnKSk7DQogICAgICAkYWxlcnRzW10gPSAkYWxlcnQ7DQogICAgfWVsc2VpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHVzaF9zaXRlbWFwJywxKSAhPSAxKSB7DQogICAgICAvLyBBdXRvbWF0aWNhbGx5IHN1Ym1pdCB0aGUgc2l0ZW1hcA0KICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsNCiAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2F1dG9tYXRpY2FsbHlfdXBsb2FkX3NpdGVtYXAnKTsNCiAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPmNyZWF0ZUxpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsIG51bGwsICR0aGlzLT5MYW5nKCd2aXNpdF9zZXR0aW5ncycpLCBBcnJheSgndGFiJz0+J3NpdGVtYXBzZXR0aW5ncycpKTsNCiAgICAgICRhbGVydHNbXSA9ICRhbGVydDsNCiAgICB9DQogICAgLy8gQ3JlYXRlIGEgcm9ib3RzLnR4dCBmaWxlDQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfcm9ib3RzJywxKSAhPSAxKSB7DQogICAgICAkYWxlcnQgPSBBcnJheSgpOw0KICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnY3JlYXRlX3JvYm90cycpOw0KICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nc2l0ZW1hcHNldHRpbmdzJykpOw0KICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0Ow0KICAgIH0NCiAgICAvLyBTZXQgYSBkZWZhdWx0IGltYWdlDQogICAgcmV0dXJuICRhbGVydHM7DQogIH0NCg0KICBmdW5jdGlvbiBnZXRfa2V5d29yZHMoJHNvdXJjZSwgJG1pbmxlbmd0aCA9IDYpIHsNCiAgICAkc291cmNlID0gcHJlZ19yZXBsYWNlKCcvXHtbXlx9XStcfS9pc1UnLCAnJywgdXRmOF9kZWNvZGUoJHNvdXJjZSkpOw0KICAgICRzb3VyY2UgPSBzdHJfcmVwbGFjZSgiXG4iLCIgIixzdHJpcF90YWdzKCRzb3VyY2UpKTsNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJy0nLCcgJywkc291cmNlKTsNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJy4nLCcgJywkc291cmNlKTsNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJywnLCcgJywkc291cmNlKTsNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJyEnLCcgJywkc291cmNlKTsNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJz8nLCcgJywkc291cmNlKTsNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJzonLCcgJywkc291cmNlKTsNCiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJyAgJywnICcsJHNvdXJjZSk7DQogICAgJGtleXdvcmRzID0gZXhwbG9kZSgnICcsJHNvdXJjZSk7DQogICAgZm9yZWFjaCAoJGtleXdvcmRzIGFzICRrZXk9PiR2YWx1ZSkgew0KICAgICAgaWYgKHN0cmxlbigkdmFsdWUpIDwgJG1pbmxlbmd0aCkgew0KICAgICAgICB1bnNldCgka2V5d29yZHNbJGtleV0pOw0KICAgICAgfWVsc2V7DQogICAgICAgICRrZXl3b3Jkc1ska2V5XSA9IGh0bWxlbnRpdGllcyh0cmltKCR2YWx1ZSkpOw0KICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gJGtleXdvcmRzOw0KICB9DQoNCiAgZnVuY3Rpb24gZ2V0X2hlYWRsaW5lcygkZmlsZSl7DQogICAgJGgxdGFncyA9IHByZWdfbWF0Y2hfYWxsKCIvKDxoMS4qPikoXHcuKikoPFwvaDE+KS9pc3htVSIsJGZpbGUsJHBhdHRlcm5zKTsNCiAgICAkY29udGVudCA9ICIiOw0KICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsNCiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOw0KICAgIH0NCiAgICAkaDJ0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGgyLio+KShcdy4qKSg8XC9oMj4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOw0KICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsNCiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOw0KICAgIH0NCiAgICAkaDN0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGgzLio+KShcdy4qKSg8XC9oMz4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOw0KICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsNCiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOw0KICAgIH0NCiAgICAkaDR0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGg0Lio+KShcdy4qKSg8XC9oND4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOw0KICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsNCiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOw0KICAgIH0NCiAgICAkaDV0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGg1Lio+KShcdy4qKSg8XC9oNT4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOw0KICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsNCiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOw0KICAgIH0NCiAgICAkaDZ0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGg2Lio+KShcdy4qKSg8XC9oNj4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOw0KICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsNCiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOw0KICAgIH0NCiAgICByZXR1cm4gJGNvbnRlbnQ7DQogIH0NCg0KICBmdW5jdGlvbiBnZXRLZXl3b3JkU3VnZ2VzdGlvbnMoJGNvbnRlbnRfaWQpIHsNCiAgICBnbG9iYWwgJGdDbXM7DQogICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOw0KICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7DQoNCiAgICAkY29udGVudG9wcyA9ICRnQ21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpOw0KICAgIGlmICghJGN1cmNvbnRlbnQgPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tSWQgKCRjb250ZW50X2lkKSkgew0KICAgICAgcmV0dXJuOw0KICAgIH0NCiAgICAkZGVzY3JpcHRpb25faWQgPSBzdHJfcmVwbGFjZSgnICcsJ18nLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9ibG9jaycsJycpKTsNCg0KICAgIC8qIEdlbmVyYXRlIGtleXdvcmRzIGZyb20gcGFnZSB0aXRsZSwgZGVzY3JpcHRpb24gYW5kIGNvbnRlbnQgKi8NCiAgICAkdGl0bGVfa2V5d29yZHMgPSAkdGhpcy0+Z2V0X2tleXdvcmRzKCRjdXJjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50X2VuJyksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdrZXl3b3JkX21pbmxlbmd0aCcsJzYnKSk7DQoNCiAgICAkZGVzY3JpcHRpb25fa2V5d29yZHMgPSAkdGhpcy0+Z2V0X2tleXdvcmRzKCRjdXJjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCRkZXNjcmlwdGlvbl9pZCksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdrZXl3b3JkX21pbmxlbmd0aCcsJzYnKSk7DQoNCiAgICAkaGVhZGxpbmVfa2V5d29yZHMgPSAkdGhpcy0+Z2V0X2tleXdvcmRzKCR0aGlzLT5nZXRfaGVhZGxpbmVzKCRjdXJjb250ZW50LT5OYW1lKCkpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5sZW5ndGgnLCc2JykpOw0KDQogICAgJGNvbnRlbnRfa2V5d29yZHMgPSAkdGhpcy0+Z2V0X2tleXdvcmRzKCRjdXJjb250ZW50LT5HZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50X2VuJyksICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdrZXl3b3JkX21pbmxlbmd0aCcsJzYnKSk7DQoNCiAgICAkb3RoZXJfa2V5d29yZHMgPSBBcnJheSgpOw0KDQogICAgZm9yZWFjaCgkdGl0bGVfa2V5d29yZHMgYXMgJGtleXdvcmQpIHsNCiAgICAgIGlmICghaXNzZXQoJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSkpIHsNCiAgICAgICAgJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSA9IDA7DQogICAgICB9DQogICAgICAkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2tleXdvcmRfdGl0bGVfd2VpZ2h0JywnNicpOw0KICAgIH0NCiAgICBmb3JlYWNoKCRkZXNjcmlwdGlvbl9rZXl3b3JkcyBhcyAka2V5d29yZCkgew0KICAgICAgaWYgKCFpc3NldCgkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdKSkgew0KICAgICAgICAkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdID0gMDsNCiAgICAgIH0NCiAgICAgICRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0gKz0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2tleXdvcmRfZGVzY3JpcHRpb25fd2VpZ2h0JywnNCcpOw0KICAgIH0NCiAgICBmb3JlYWNoKCRoZWFkbGluZV9rZXl3b3JkcyBhcyAka2V5d29yZCkgew0KICAgICAgaWYgKCFpc3NldCgkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdKSkgew0KICAgICAgICAkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdID0gMDsNCiAgICAgIH0NCiAgICAgICRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0gKz0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2tleXdvcmRfaGVhZGxpbmVfd2VpZ2h0JywnMicpOw0KICAgIH0NCiAgICBmb3JlYWNoKCRjb250ZW50X2tleXdvcmRzIGFzICRrZXl3b3JkKSB7DQogICAgICBpZiAoIWlzc2V0KCRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0pKSB7DQogICAgICAgICRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0gPSAwOw0KICAgICAgfQ0KICAgICAgJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSArPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9jb250ZW50X3dlaWdodCcsJzEnKTsNCiAgICB9DQoNCiAgICBhcnNvcnQoJG90aGVyX2tleXdvcmRzKTsNCg0KICAgICRleGNsdWRlX2xpc3QgPSBleHBsb2RlKCcgJyxzdHJ0b3VwcGVyKHV0ZjhfZGVjb2RlKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdrZXl3b3JkX2V4Y2x1ZGUnLCcnKSkpKTsNCg0KICAgIGZvcmVhY2ggKCRvdGhlcl9rZXl3b3JkcyBhcyAka2V5PT4kdmFsdWUpIHsNCiAgICAgIGlmICgkdmFsdWUgPCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5pbXVtX3dlaWdodCcsJzcnKSkgew0KICAgICAgICB1bnNldCgkb3RoZXJfa2V5d29yZHNbJGtleV0pOw0KICAgICAgfWVsc2VpZiAoaW5fYXJyYXkoc3RydG91cHBlcigka2V5KSwkZXhjbHVkZV9saXN0KSkgew0KICAgICAgICB1bnNldCgkb3RoZXJfa2V5d29yZHNbJGtleV0pOw0KICAgICAgfQ0KICAgIH0NCg0KICAgIHJldHVybiAkb3RoZXJfa2V5d29yZHM7DQogIH0NCg0KICBmdW5jdGlvbiBjcmVhdGVSb2JvdHNUWFQoKSB7DQogICAgZ2xvYmFsICRnQ21zOw0KICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsNCiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOw0KICAgICRyb290X3VybCA9IGVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSA/ICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10gOiAkZ0Ntcy0+Y29uZmlnWydzc2xfdXJsJ107DQoNCiAgICAkZnAgPSBAZm9wZW4oJGNvbmZpZ1sncm9vdF9wYXRoJ10uJy9yb2JvdHMudHh0JywndycpOw0KDQogICAgLy8gQ3JlYXRlIHJvYm90cy50eHQNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9zaXRlbWFwJywxKSA9PSAxKSB7DQogICAgICBmd3JpdGUoJGZwLCAiU2l0ZW1hcDogIi4kcm9vdF91cmwuIi9zaXRlbWFwLnhtbFxuIik7DQogICAgfQ0KICAgIEBmd3JpdGUoJGZwLCAiVXNlci1hZ2VudDogKlxuIik7DQogICAgQGZ3cml0ZSgkZnAsICJEaXNhbGxvdzogIi4kcm9vdF91cmwuIi9jb250cmliL1xuIik7DQogICAgQGZ3cml0ZSgkZnAsICJEaXNhbGxvdzogIi4kcm9vdF91cmwuIi9kb2MvXG4iKTsNCiAgICBAZndyaXRlKCRmcCwgIkRpc2FsbG93OiAiLiRyb290X3VybC4iL2xpYi9cbiIpOw0KICAgIEBmd3JpdGUoJGZwLCAiRGlzYWxsb3c6ICIuJHJvb3RfdXJsLiIvbW9kdWxlcy9cbiIpOw0KICAgIEBmd3JpdGUoJGZwLCAiRGlzYWxsb3c6ICIuJHJvb3RfdXJsLiIvcGx1Z2lucy9cbiIpOw0KICAgIEBmd3JpdGUoJGZwLCAiRGlzYWxsb3c6ICIuJHJvb3RfdXJsLiIvc2NyaXB0cy9cbiIpOw0KICAgIEBmd3JpdGUoJGZwLCAiRGlzYWxsb3c6ICIuJHJvb3RfdXJsLiIvdG1wL1xuIik7DQoNCiAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3Nlb3Rvb2xzMiBXSEVSRSBpbmRleGFibGUgPSAwIjsNCiAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7DQoNCiAgICAkY29udGVudG9wcyA9ICRnQ21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpOw0KICAgIHdoaWxlICgkcGFnZSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsNCg0KICAgICAgaWYgKCRjdXJjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUlkICgkcGFnZVsnY29udGVudF9pZCddKSkgew0KICAgICAgICAkdXJsID0gJGN1cmNvbnRlbnQtPkdldFVSTCgpOw0KICAgICAgICBAZndyaXRlKCRmcCwgIkRpc2FsbG93OiAiLiR1cmwuIlxuIik7DQogICAgICB9DQogICAgfQ0KICAgIEBmY2xvc2UoJGZwKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGNyZWF0ZVNpdGVtYXAoJHB1c2ggPSBmYWxzZSkgew0KICAgIGdsb2JhbCAkZ0NtczsNCiAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsNCiAgICAkcm9vdF91cmwgPSBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddIDogJGdDbXMtPmNvbmZpZ1snc3NsX3VybCddOw0KICAgICRyb290X3BhdGggPSAkZ0Ntcy0+Y29uZmlnWydyb290X3BhdGgnXTsNCiAgICAkbWFwX3BhdGggPSAkcm9vdF9wYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3NpdGVtYXAueG1sJzsNCiAgICANCiAgICAkZnAgPSBmb3BlbigkbWFwX3BhdGgsJ3cnKTsNCiAgICAvLyBDcmVhdGUgc2l0ZW1hcA0KDQogICAgZndyaXRlKCRmcCwgIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04Jz8+XG4iKTsNCiAgICBmd3JpdGUoJGZwLCAiPHVybHNldCB4bWxucz0naHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSc+XG5cbiIpOw0KDQogICAgJGNvbnRlbnRvcHMgPSAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsNCg0KICAgICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IFdIRVJFIGFjdGl2ZSA9IDEgT1JERVIgQlkgaGllcmFyY2h5IEFTQyc7DQogICAgJHJlc3VsdCA9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsNCiAgICANCiAgICBpZiAoJHJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDAgKSB7DQogICAgICB3aGlsZSAoJHBhZ2UgPSAkcmVzdWx0LT5mZXRjaFJvdygpKSB7DQogICAgICAgIA0KICAgICAgICBpZiAoJGN1cmNvbnRlbnQgPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tSWQgKCRwYWdlWydjb250ZW50X2lkJ10pKSB7DQoNCi8vICAgICAgICAgIGlmICgkY3VyY29udGVudC0+QWN0aXZlKCkgJiYgJGN1cmNvbnRlbnQtPlNob3dJbk1lbnUoKSkgew0KICAgICAgICAgIGlmICgkY3VyY29udGVudC0+QWN0aXZlKCkpIHsNCiAgICAgICAgICAgICR1cmwgPSAkY3VyY29udGVudC0+R2V0VVJMKCk7DQogICAgICAgICAgICBpZiAoJHVybCA9PSAiIyIpIHsNCiAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCg0KLy8gICAgICAgICAgICBpZiAoc3RycG9zKCR1cmwsICRyb290X3VybCkgPT09IGZhbHNlKSB7DQovLyAgICAgICAgICAgICAgY29udGludWU7DQovLyAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChzdHJwb3Moc3Ryc3RyKCR1cmwsJzonKSwgc3Ryc3RyKCRyb290X3VybCwnOicpKSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgICRwcmlvcml0eSA9IDgwOw0KICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgc3Vic3RyX2NvdW50KCRwYWdlWydoaWVyYXJjaHknXSwnLicpOyAkaSsrKSB7DQogICAgICAgICAgICAgICRwcmlvcml0eSAgPSAkcHJpb3JpdHkgLyAyOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRwYWdlWydkZWZhdWx0X2NvbnRlbnQnXSA9PSAxKSB7DQogICAgICAgICAgICAgICRwcmlvcml0eSA9IDEwMDsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9zZW90b29sczIgV0hFUkUgY29udGVudF9pZCA9ICcuJHBhZ2VbJ2NvbnRlbnRfaWQnXTsNCiAgICAgICAgICAgICRyZXN1bHQyID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOw0KICAgICAgICAgICAgJGluZm8gPSAkcmVzdWx0Mi0+ZmV0Y2hSb3coKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkaW5mb1sncHJpb3JpdHknXSkgJiYgKCRpbmZvWydwcmlvcml0eSddICE9IDApICYmICgkaW5mb1sncHJpb3JpdHknXSAhPSAiIikpIHsNCiAgICAgICAgICAgICAgJHByaW9yaXR5ID0gJGluZm9bJ3ByaW9yaXR5J107DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmICghaXNzZXQoJGluZm9bJ2luZGV4YWJsZSddKSB8fCAoJGluZm9bJ2luZGV4YWJsZSddID09ICIiKSB8fCAoJGluZm9bJ2luZGV4YWJsZSddID09IDEpKSB7DQogICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICI8dXJsPlxuIik7DQogICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICI8bG9jPiIuJHVybC4iPC9sb2M+XG4iKTsNCiAgICAgICAgICAgICAgZndyaXRlKCRmcCwgIjxsYXN0bW9kPiIuZGF0ZSgiWS1tLWQiLCBzdHJ0b3RpbWUoJHBhZ2VbJ21vZGlmaWVkX2RhdGUnXSkpLiI8L2xhc3Rtb2Q+XG4iKTsNCiAgICAgICAgICAgICAgZndyaXRlKCRmcCwgIjxjaGFuZ2VmcmVxPmFsd2F5czwvY2hhbmdlZnJlcT5cbiIpOw0KICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAiPHByaW9yaXR5PiIubnVtYmVyX2Zvcm1hdCgkcHJpb3JpdHkgLyAxMDAsIDEpLiI8L3ByaW9yaXR5PlxuIik7DQogICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICI8L3VybD5cblxuIik7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICAgIA0KICAgIGZ3cml0ZSgkZnAsICI8L3VybHNldD4iKTsNCiAgICBmY2xvc2UoJGZwKTsNCiAgICBpZiAoJHB1c2ggIT0gZmFsc2UgJiYgJHB1c2ggIT09MCkgew0KICAgICAgLy8gUHVzaCBzaXRlbWFwIHRvIGdvb2dsZQ0KICAgICAgaWYgKGZpbGVfZXhpc3RzKCRtYXBfcGF0aCkpIHsNCiAgICAgICAgJGdvb2dsZSA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vd2VibWFzdGVycy90b29scy9waW5nP3NpdGVtYXA9Ii51cmxlbmNvZGUoJG1hcF9wYXRoKTsNCiAgICAgICAgJGYgPSBAZm9wZW4oJGdvb2dsZSwiciIpOw0KICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJGYpKQ0KICAgICAgICBmY2xvc2UoJGYpOw0KICAgICAgfQ0KDQogICAgfQ0KICB9DQoNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/SEOTools2.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFNFT1Rvb2xzMiAtIFNldmVyYWwgdG9vbHMgdG8gaGVscCB3aXRoIFNlYXJjaCBFbmdpbmUgT3B0aW1pemF0aW9uIGFuZCBjaGVjayBmb3Igc3Vib3B0aW1hbCBTRU8tcmVsYXRlZCB0aGluZ3MuCiMgVmVyc2lvbjogMS4wLCBDbGlwIE1hZ2ljCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMTAgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIyBUaGlzIGZpbGUgb3JpZ2luYWxseSBjcmVhdGVkIGJ5IE1vZHVsZU1ha2VyIG1vZHVsZSwgdmVyc2lvbiAwLjMuMgojIENvcHlyaWdodCAoYykgMjAxMCBieSBTYW11ZWwgR29sZHN0ZWluIChzamdAY21zbWFkZXNpbXBsZS5vcmcpCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy9lcnJvcl9yZXBvcnRpbmcoRV9BTEwpOwoKJGNvbmZpZyA9IGNtc21zKCktPmdldENvbmZpZygpOwokcm9vdF91cmwgPSBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddIDogJGdDbXMtPmNvbmZpZ1snc3NsX3VybCddOwoKCgpjbGFzcyBTRU9Ub29sczIgZXh0ZW5kcyBDTVNNb2R1bGUKewoKICBmdW5jdGlvbiBHZXROYW1lKCkKICB7CiAgICByZXR1cm4gJ1NFT1Rvb2xzMic7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZywgcHJlZmVyYWJseSBhIGxvY2FsaXplZCBuYW1lCiAgIG9mIHRoZSBtb2R1bGUuIFRoaXMgaXMgdGhlIG5hbWUgdGhhdCdzIHNob3duIGluIHRoZQogICBBZG1pbiBNZW51cyBhbmQgc2VjdGlvbiBwYWdlcyAoaWYgdGhlIG1vZHVsZSBoYXMgYW4gYWRtaW4KICAgY29tcG9uZW50KS4KCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldFZlcnNpb24oKQogICBUaGlzIGNhbiByZXR1cm4gYW55IHN0cmluZywgcHJlZmVyYWJseSBhIG51bWJlciBvcgogICBzb21ldGhpbmcgdGhhdCBtYWtlcyBzZW5zZSBmb3IgZGVzaWduYXRpbmcgYSB2ZXJzaW9uLgogICBUaGUgQ01TIHdpbGwgdXNlIHRoaXMgdG8gaWRlbnRpZnkgd2hldGhlciBvciBub3QKICAgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZSBtb2R1bGUgaXMgY3VycmVudCwgYW5kCiAgIHRoZSBtb2R1bGUgd2lsbCB1c2UgaXQgdG8gZmlndXJlIG91dCBob3cgdG8gdXBncmFkZQogICBpdHNlbGYgaWYgcmVxdWVzdGVkLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldFZlcnNpb24oKQogIHsKICAgIHJldHVybiAnMS4wLjEwJzsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEhlbHAoKQogICBUaGlzIHJldHVybnMgSFRNTCBpbmZvcm1hdGlvbiBvbiB0aGUgbW9kdWxlLgogICBUeXBpY2FsbHksIHlvdSdsbCB3YW50IHRvIGluY2x1ZGUgaW5mb3JtYXRpb24gb24gaG93IHRvCiAgIHVzZSB0aGUgbW9kdWxlLgoKICAgU2VlIHRoZSBub3RlIG9uIGxvY2FsaXphdGlvbiBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRIZWxwKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEF1dGhvcigpCiAgIFRoaXMgcmV0dXJucyBhIHN0cmluZyB0aGF0IGlzIHByZXNlbnRlZCBpbiB0aGUgTW9kdWxlCiAgIEFkbWluIGlmIHlvdSBjbGljayBvbiB0aGUgIkFib3V0IiBsaW5rLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvcigpCiAgewogICAgcmV0dXJuICdDbGlwIE1hZ2ljJzsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEF1dGhvckVtYWlsKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBNb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSAiQWJvdXQiIGxpbmsuIEl0IGhlbHBzIHVzZXJzCiAgIG9mIHlvdXIgbW9kdWxlIGdldCBpbiB0b3VjaCB3aXRoIHlvdSB0byBzZW5kIGJ1ZyByZXBvcnRzLAogICBxdWVzdGlvbnMsIGNhc2VzIG9mIGJlZXIsIGFuZC9vciBsYXJnZSBzdW1zIG9mIG1vbmV5LgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkKICB7CiAgICByZXR1cm4gJ2FkbWluQGNsaXBtYWdpYy5jb20uYXUnOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0Q2hhbmdlTG9nKCkKICAgVGhpcyByZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcHJlc2VudGVkIGluIHRoZSBtb2R1bGUKICAgQWRtaW4gaWYgeW91IGNsaWNrIG9uIHRoZSBBYm91dCBsaW5rLiBJdCBoZWxwcyB1c2VycwogICBmaWd1cmUgb3V0IHdoYXQncyBjaGFuZ2VkIGJldHdlZW4gcmVsZWFzZXMuCiAgIFNlZSB0aGUgbm90ZSBvbiBsb2NhbGl6YXRpb24gYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSXNQbHVnaW5Nb2R1bGUoKQogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBvciBmYWxzZSwgZGVwZW5kaW5nIHVwb24KICAgd2hldGhlciB1c2VycyBjYW4gaW5jbHVkZSB0aGUgbW9kdWxlIGluIGEgcGFnZSBvcgogICB0ZW1wbGF0ZSB1c2luZyBhIHNtYXJ0eSB0YWcgb2YgdGhlIGZvcm0KICAge2Ntc19tb2R1bGUgbW9kdWxlPSdTRU9Ub29sczInIHBhcmFtMT12YWwgcGFyYW0yPXZhbC4uLn0KCiAgIElmIHlvdXIgbW9kdWxlIGRvZXMgbm90IGdldCBpbmNsdWRlZCBpbiBwYWdlcyBvcgogICB0ZW1wbGF0ZXMsIHJldHVybiAiZmFsc2UiIGhlcmUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSGFzQWRtaW4oKQogICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBib29sZWFuIHZhbHVlLCBkZXBlbmRpbmcgb24KICAgd2hldGhlciB5b3VyIG1vZHVsZSBhZGRzIGFueXRoaW5nIHRvIHRoZSBBZG1pbiBhcmVhIG9mCiAgIHRoZSBzaXRlLiBGb3IgdGhlIHJlc3Qgb2YgdGhlc2UgY29tbWVudHMsIEknbGwgYmUgY2FsbGluZwogICB0aGUgYWRtaW4gcGFydCBvZiB5b3VyIG1vZHVsZSB0aGUgIkFkbWluIFBhbmVsIiBmb3IKICAgd2FudCBvZiBhIGJldHRlciB0ZXJtLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEhhc0FkbWluKCkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRBZG1pblNlY3Rpb24oKQogICBJZiB5b3VyIG1vZHVsZSBoYXMgYW4gQWRtaW4gUGFuZWwsIHlvdSBjYW4gc3BlY2lmeQogICB3aGljaCBBZG1pbiBTZWN0aW9uIChvciB0b3AtbGV2ZWwgQWRtaW4gTWVudSkgaXQgc2hvd3MKICAgdXAgaW4uIFRoaXMgbWV0aG9kIHJldHVybnMgYSBzdHJpbmcgdG8gc3BlY2lmeSB0aGF0CiAgIHNlY3Rpb24uIFZhbGlkIHJldHVybiB2YWx1ZXMgYXJlOgoKICAgbWFpbiAgICAgICAgLSB0aGUgTWFpbiBtZW51IHRhYi4KICAgY29udGVudCAgICAgLSB0aGUgQ29udGVudCBtZW51CiAgIGxheW91dCAgICAgIC0gdGhlIExheW91dCBtZW51CiAgIHVzZXJzZ3JvdXBzIC0gdGhlIFVzZXJzIGFuZCBHcm91cHMgbWVudQogICBleHRlbnNpb25zICAtIHRoZSBFeHRlbnNpb25zIG1lbnUgKHRoaXMgaXMgdGhlIGRlZmF1bHQpCiAgIHNpdGVhZG1pbiAgIC0gdGhlIFNpdGUgQWRtaW4gbWVudQogICB2aWV3c2l0ZSAgICAtIHRoZSBWaWV3IFNpdGUgbWVudSB0YWIKICAgbG9nb3V0ICAgICAgLSB0aGUgTG9nb3V0IG1lbnUgdGFiCgogICBOb3RlIHRoYXQgaWYgeW91IHBsYWNlIHlvdXIgbW9kdWxlIGluIHRoZSBtYWluLAogICB2aWV3c2l0ZSwgb3IgbG9nb3V0IHNlY3Rpb25zLCBpdCB3aWxsIHNob3cgdXAgaW4gdGhlCiAgIG1lbnVzLCBidXQgd2lsbCBub3QgYmUgdmlzaWJsZSBpbiBhbnkgdG9wLWxldmVsCiAgIHNlY3Rpb24gcGFnZXMuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uKCkKICB7CiAgICByZXR1cm4gJ2NvbnRlbnQnOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluRGVzY3JpcHRpb24oKQogICBJZiB5b3VyIG1vZHVsZSBkb2VzIGhhdmUgYW4gQWRtaW4gUGFuZWwsIHlvdQogICBjYW4gaGF2ZSBpdCByZXR1cm4gYSBkZXNjcmlwdGlvbiBzdHJpbmcgdGhhdCBnZXRzIHNob3duCiAgIGluIHRoZSBBZG1pbiBTZWN0aW9uIHBhZ2UgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24oKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnYWRtaW5kZXNjcmlwdGlvbicpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFZpc2libGVUb0FkbWluVXNlcigpCiAgIElmIHlvdXIgbW9kdWxlIGRvZXMgaGF2ZSBhbiBBZG1pbiBQYW5lbCwgeW91CiAgIGNhbiBjb250cm9sIHdoZXRoZXIgb3Igbm90IGl0J3MgZGlzcGxheWVkIGJ5IHRoZSBib29sZWFuCiAgIHRoYXQgaXMgcmV0dXJuZWQgYnkgdGhpcyBtZXRob2QuIFRoaXMgaXMgcHJpbWFyaWx5IHVzZWQKICAgdG8gaGlkZSBtb2R1bGVzIGZyb20gYWRtaW5zIHdobyBsYWNrIHBlcm1pc3Npb24gdG8gdXNlCiAgIHRoZW0uCgogICBUeXBpY2FsbHksIHlvdSdsbCB1c2Ugc29tZSBwZXJtaXNzaW9uIHRvIHNldCB0aGlzCiAgIChlLmcuLCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdTb21lIFBlcm1pc3Npb24nKTsgKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgewogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0VkaXQgU0VPIFNldHRpbmdzJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgQ2hlY2tBY2Nlc3MoKQogICBUaGlzIHdyYXBwZXIgZnVuY3Rpb24gd2lsbCBjaGVjayBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgcGVybWlzc2lvbiwKICAgYW5kIGRpc3BsYXkgYW4gZXJyb3IgcGFnZSBpZiB0aGUgdXNlciBkb2Vzbid0IGhhdmUgYWRlcXVhdGUgcGVybWlzc2lvbnMuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gQ2hlY2tBY2Nlc3MoJHBlcm0gPSAnRWRpdCBTRU8gU2V0dGluZ3MnKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCRwZXJtKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIERpc3BsYXlFcnJvclBhZ2UoKQogICBUaGlzIGlzIGEgc2ltcGxlIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGVycm9yIHBhZ2VzLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIERpc3BsYXlFcnJvclBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybl9pZCwgJG1lc3NhZ2U9JycpCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZV9lcnJvcicsICR0aGlzLT5MYW5nKCdlcnJvcicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CgogICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2Vycm9yLnRwbCcpOwogIH0KCgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXREZXBlbmRlbmNpZXMoKQogICBZb3VyIG1vZHVsZSBtYXkgbmVlZCBhbm90aGVyIG1vZHVsZSB0byBhbHJlYWR5IGJlIGluc3RhbGxlZAogICBiZWZvcmUgeW91IGNhbiBpbnN0YWxsIGl0LgogICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbGlzdCBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYW5kCiAgIG1pbmltdW0gdmVyc2lvbiBudW1iZXJzIHRoYXQgdGhpcyBtb2R1bGUgcmVxdWlyZXMuCgogICBJdCBzaG91bGQgcmV0dXJuIGFuIGhhc2gsIGVnLgogICByZXR1cm4gYXJyYXkoJ3NvbWVtb2R1bGUnPT4nMS4wJywgJ290aGVybW9kdWxlJz0+JzEuMScpOwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgewogICAgcmV0dXJuIGFycmF5KCk7CiAgfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNaW5pbXVtQ01TVmVyc2lvbigpCiAgIFlvdXIgbW9kdWxlIG1heSByZXF1aXJlIGZ1bmN0aW9ucyBvciBvYmplY3RzIGZyb20KICAgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIENNUyBNYWRlIFNpbXBsZS4KICAgRXZlciBzaW5jZSB2ZXJzaW9uIDAuMTEsIHlvdSBjYW4gc3BlY2lmeSB3aGljaCBtaW5pbXVtCiAgIENNUyBNUyB2ZXJzaW9uIGlzIHJlcXVpcmVkIGZvciB5b3VyIG1vZHVsZSwgd2hpY2ggd2lsbAogICBwcmV2ZW50IGl0IGZyb20gYmVpbmcgaW5zdGFsbGVkIGJ5IGEgdmVyc2lvbiBvZiBDTVMgdGhhdAogICBjYW4ndCBydW4gaXQuCgogICBUaGlzIG1ldGhvZCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUKICAgbWluaW11bSB2ZXJzaW9uIHRoYXQgdGhpcyBtb2R1bGUgcmVxdWlyZXMuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMS45LjIiOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIE1heGltdW1DTVNWZXJzaW9uKCkKICAgWW91IG1heSB3YW50IHRvIHByZXZlbnQgcGVvcGxlIGZyb20gdXNpbmcgeW91ciBtb2R1bGUgaW4KICAgZnV0dXJlIHZlcnNpb25zIG9mIENNUyBNYWRlIFNpbXBsZSwgZXNwZWNpYWxseSBpZiB5b3UKICAgdGhpbmsgQVBJIGZlYXR1cmVzIHlvdSB1c2UgbWF5IGNoYW5nZSAtLSBhZnRlciBhbGwsIHlvdQogICBuZXZlciByZWFsbHkga25vdyBob3cgdGhlIENNUyBNUyBBUEkgY291bGQgZXZvbHZlLgoKICAgU28sIHRvIHByZXZlbnQgcGVvcGxlIGZyb20gZmxvb2RpbmcgeW91IHdpdGggYnVnIHJlcG9ydHMKICAgd2hlbiBhIG5ldyB2ZXJzaW9uIG9mIENNUyBNUyBpcyByZWxlYXNlZCwgeW91IGNhbiBzaW1wbHkKICAgcmVzdHJpY3QgdGhlIHZlcnNpb24uIFRoZW4sIG9mIGNvdXJzZSwgdGhlIG9udXMgaXMgb24geW91CiAgIHRvIHJlbGVhc2UgYSBuZXcgdmVyc2lvbiBvZiB5b3VyIG1vZHVsZSB3aGVuIGEgbmV3IHZlcnNpb24KICAgb2YgdGhlIENNUyBpcyByZWxlYXNlZC4uLgoKICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlCiAgIG1heGltdW0gdmVyc2lvbiB0aGF0IHRoaXMgbW9kdWxlIHN1cHBvcnRzLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIC8qIGZ1bmN0aW9uIE1heGltdW1DTVNWZXJzaW9uKCkKICAgewogICByZXR1cm47CiAgIH0KICAgKi8KCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgQWZ0ZXIgaW5zdGFsbGF0aW9uLCB0aGVyZSBtYXkgYmUgdGhpbmdzIHlvdSB3YW50IHRvCiAgIGNvbW11bmljYXRlIHRvIHlvdXIgYWRtaW4uIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhCiAgIHN0cmluZyB3aGljaCB3aWxsIGJlIGRpc3BsYXllZC4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICB9CgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICAgQWZ0ZXIgcmVtb3ZpbmcgYSBtb2R1bGUsIHRoZXJlIG1heSBiZSB0aGluZ3MgeW91IHdhbnQgdG8KICAgY29tbXVuaWNhdGUgdG8geW91ciBhZG1pbi4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKICAgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkLgogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTsKICB9CgoKICAvKioKICAgKiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKICAgKiBUaGlzIGFsbG93cyB5b3UgdG8gZGlzcGxheSBhIG1lc3NhZ2UgYWxvbmcgd2l0aCBhIFllcy9ObyBkaWFsb2cgYm94LiBJZiB0aGUgdXNlciByZXNwb25kcwogICAqIGluIHRoZSBhZmZpcm1hdGl2ZSB0byB5b3VyIG1lc3NhZ2UsIHRoZSB1bmluc3RhbGwgd2lsbCBwcm9jZWVkLiBJZiB0aGV5IHJlc3BvbmQgaW4gdGhlCiAgICogbmVnYXRpdmUsIHRoZSB1bmluc3RhbGwgd2lsbCBiZSBjYW5jZWxlZC4gVGh1cywgeW91ciBtZXNzYWdlIHNob3VsZCBiZSBvZiB0aGUgZm9ybQogICAqICJBbGwgbW9kdWxlIGRhdGEgd2lsbCBiZSBkZWxldGVkLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIHRoaXMgbW9kdWxlPyIKICAgKgogICAqIElmIHlvdSBkb24ndCB3YW50IHRoZSBkaWFsb2csIGhhdmUgdGhpcyBtZXRob2QgcmV0dXJuIGEgRkFMU0UsIHdoaWNoIHdpbGwgY2F1c2UgdGhlCiAgICogbW9kdWxlIHRvIHVuaW5zdGFsbCBpbW1lZGlhdGVseSBpZiB0aGUgdXNlciBjbGlja3MgdGhlICJ1bmluc3RhbGwiIGxpbmsuCiAgICovCiAgZnVuY3Rpb24gVW5pbnN0YWxsUHJlTWVzc2FnZSgpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdyZWFsbHlfdW5pbnN0YWxsJyk7CiAgfQoKICBmdW5jdGlvbiBHZXROb3RpZmljYXRpb25PdXRwdXQoJHByaW9yaXR5ID0gMykgewogICAgaWYgKGNvdW50KCR0aGlzLT5nZXRVcmdlbnRBbGVydHMoKSkgPiAwKSB7CiAgICAgICR0ZXh0ID0gJHRoaXMtPkxhbmcoJ3Byb2JsZW1fYWxlcnQnLEFycmF5KCR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCAnJywgJHRoaXMtPkxhbmcoJ3Byb2JsZW1fbGlua190aXRsZScpKSkpOwoKICAgICAgJG9iaiA9IG5ldyBTdGRDbGFzczsKICAgICAgJG9iai0+cHJpb3JpdHkgPSAzOwogICAgICAkb2JqLT5odG1sID0gJHRleHQ7CgogICAgICByZXR1cm4gJG9iajsKICAgIH0KICB9CgoKICBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzKCkgewogICAgJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7CgogICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcyh0cnVlKTsKCiAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzaG93YmFzZScsICd0cnVlJywgJHRoaXMtPkxhbmcoJ2hlbHBfc2hvd2Jhc2UnKSk7CiAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc2hvd2Jhc2UnLCBDTEVBTl9TVFJJTkcpOwogIH0KCgogIGZ1bmN0aW9uIGdldFVyZ2VudEFsZXJ0cygpIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkcm9vdF91cmwgPSBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddIDogJGdDbXMtPmNvbmZpZ1snc3NsX3VybCddOwoKICAgICRhbGVydHMgPSBBcnJheSgpOwogICAgLy8gRW5hYmxlIFByZXR0eSBVUkxzCiAgICBpZiAoKCRjb25maWdbJ3VybF9yZXdyaXRpbmcnXSAhPSAibW9kX3Jld3JpdGUiKSAmJiAoJGNvbmZpZ1sndXJsX3Jld3JpdGluZyddICE9ICdpbnRlcm5hbCcpKSB7CiAgICAgICRhbGVydCA9IEFycmF5KCk7CiAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdzeXN0ZW0nOwogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdhY3RpdmF0ZV9wcmV0dHlfdXJscycpOwogICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5MYW5nKCdwcmV0dHlfdXJsc19oZWxwJyk7CiAgICAgICRhbGVydHNbXSA9ICRhbGVydDsKICAgIH0KICAgIC8vIE5vIE1ldGEgdGFncyBhcmUgaW5zZXJ0ZWQKICAgIGlmICgoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfc3RhbmRhcmQnLDApICE9IDEpICYmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9kdWJsaW5jb3JlJywwKSAhPSAxKSkgewogICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnc2V0dGluZ3MnOwogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCd1c2Vfc3RhbmRhcmRfb3JfZHVibGluY29yZV9tZXRhJyk7CiAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPmNyZWF0ZUxpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsIG51bGwsICR0aGlzLT5MYW5nKCd2aXNpdF9zZXR0aW5ncycpLCBBcnJheSgndGFiJz0+J21ldGFzZXR0aW5ncycpKTsKICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgfQoKICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYXV0b19nZW5lcmF0ZScsMCkgIT0gMSkgewogICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2Jsb2NrJywnJykgIT0gJycpIHsKICAgICAgICAvLyBQYWdlcyB3aXRob3V0IGRlc2NyaXB0aW9uCiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqLGMuY29udGVudF9pZCBBUyBjaWQsIGMudHlwZSBBUyBjdHlwZSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IGMgTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50X3Byb3BzIHAgT04gKGMuY29udGVudF9pZCA9IHAuY29udGVudF9pZCBBTkQgcC5wcm9wX25hbWUgPSAiJy5zdHJfcmVwbGFjZSgnICcsJ18nLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZXNjcmlwdGlvbl9ibG9jaycsJycpKS4nIikgV0hFUkUgKHAuY29udGVudCBJUyBOVUxMIE9SIHAuY29udGVudCA9ICIiKSBBTkQgYy50eXBlID0gImNvbnRlbnQiIExJTUlUIDAsMjEnOwogICAgICAgICRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICAgICAgd2hpbGUgKCRwcm9ibGVtID0gJHJlc3VsdC0+ZmV0Y2hSb3coKSkgewogICAJCSAgCSAgaWYgKCRwcm9ibGVtWydjdHlwZSddID09ICdjb250ZW50JykgewogICAJCSAgCSAgICAkYWxlcnQgPSBBcnJheSgpOwogICAJCSAgCSAgICAkYWxlcnRbJ2dyb3VwJ10gPSAncGFnZXMnOwogICAJCSAgCSAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdtZXRhX2Rlc2NyaXB0aW9uX21pc3NpbmcnLEFycmF5KCRwcm9ibGVtWydjb250ZW50X25hbWUnXSkpOwogICAJCSAgCSAgICBpZiAoaXNzZXQoJF9HRVRbJ3NwXyddKSkgewogICAJCSAgCSAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJzxhIGhyZWY9IicuJHJvb3RfdXJsLicvJy4kY29uZmlnWydhZG1pbl9kaXInXS4nL2VkaXRjb250ZW50LnBocD9zcF89Jy4kX0dFVFsnc3BfJ10uJyZjb250ZW50X2lkPScuJHByb2JsZW1bJ2NpZCddLiciPicuJHRoaXMtPkxhbmcoJ2VkaXRfcGFnZV90b19maXgnKS4nPC9hPic7CiAgIAkJICAJICAgIH1lbHNlewogICAJCSAgCSAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJzxhIGhyZWY9IicuJHJvb3RfdXJsLicvJy4kY29uZmlnWydhZG1pbl9kaXInXS4nL2VkaXRjb250ZW50LnBocD9fc3hfPScuJF9HRVRbJ19zeF8nXS4nJmNvbnRlbnRfaWQ9Jy4kcHJvYmxlbVsnY2lkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlX3RvX2ZpeCcpLic8L2E+JzsKICAgCQkgIAkgICAgfQogICAJCSAgCSAgICAkYWxlcnRzW10gPSAkYWxlcnQ7CiAgIAkJICAJICB9CiAgICAgICAgfQogICAgICB9ZWxzZXsKICAgICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdzZXR0aW5ncyc7CiAgICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnc2V0X3VwX2Rlc2NyaXB0aW9uX2Jsb2NrJyk7CiAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nbWV0YXNldHRpbmdzJykpOwogICAgICAgICRhbGVydHNbXSA9ICRhbGVydDsKICAgICAgfQogICAgfWVsc2VpZihzdHJwb3MoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rlc2NyaXB0aW9uX2F1dG8nLCcnKSwne2tleXdvcmRzfScpID09PSBmYWxzZSkgewogICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnc2V0dGluZ3MnOwogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdzZXRfdXBfYXV0b19kZXNjcmlwdGlvbicpOwogICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7CiAgICAgICRhbGVydHNbXSA9ICRhbGVydDsKICAgIH0KCiAgICAvLyBzaXRlbWFwLnhtbCBub3Qgd3JpdGVhYmxlCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9zaXRlbWFwJywxKSA9PSAxKSB7CiAgICAgIGlmICghaXNfd3JpdGVhYmxlKCRjb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9zaXRlbWFwLnhtbCcpKSB7CiAgICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsKICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnc3lzdGVtJzsKICAgICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdzaXRlbWFwX25vdF93cml0ZWFibGUnKTsKICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5MYW5nKCdjaG1vZF9zaXRlbWFwJyk7CiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgICB9CiAgICB9CgogICAgLy8gcm9ib3RzLnR4dCBub3Qgd3JpdGVhYmxlCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9yb2JvdHMnLDEpID09IDEpIHsKICAgICAgJGZwID0gQGZvcGVuKCRjb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9yb2JvdHMudHh0JywiYSIpOwogICAgICBAZmNsb3NlKCRmcCk7CiAgICAgIGlmICghaXNfd3JpdGVhYmxlKCRjb25maWdbJ3Jvb3RfcGF0aCddIC4gJy9yb2JvdHMudHh0JykpIHsKICAgICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdzeXN0ZW0nOwogICAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ3JvYm90c19ub3Rfd3JpdGVhYmxlJyk7CiAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+TGFuZygnY2htb2Rfcm9ib3RzJyk7CiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgICB9CiAgICB9CgogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaCcsMCkgPT0gMSkgewogICAgICAvLyBObyBPcGVuR3JhcGggYWRtaW4gc2V0CiAgICAgIGlmICgoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FkbWlucycsJycpID09ICcnKSAmJiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX2FwcGxpY2F0aW9uJywnJykgPT0gJycpKSB7CiAgICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsKICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnb3BlbmdyYXBoJzsKICAgICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdub19vcGVuZ3JhcGhfYWRtaW5zJyk7CiAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nbWV0YXNldHRpbmdzJykpOwogICAgICAgICRhbGVydHNbXSA9ICRhbGVydDsKICAgICAgfQogICAgICAvLyBObyBPcGVuR3JhcGggcGFnZSB0eXBlIHNldAogICAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoJ21ldGFfb3BlbmdyYXBoX3R5cGUnLCcnKSA9PSAnJykgewogICAgICAgICRhbGVydCA9IEFycmF5KCk7CiAgICAgICAgJGFsZXJ0Wydncm91cCddID0gJ29wZW5ncmFwaCc7CiAgICAgICAgJGFsZXJ0WydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnbm9fb3BlbmdyYXBoX3R5cGUnKTsKICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7CiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgICB9CiAgICAgIC8vIE5vIE9wZW5HcmFwaCBzaXRlbmFtZSBzZXQKICAgICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9zaXRlbmFtZScsJycpID09ICcnKSB7CiAgICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsKICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnb3BlbmdyYXBoJzsKICAgICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdub19vcGVuZ3JhcGhfc2l0ZW5hbWUnKTsKICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7CiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgICB9CiAgICAgIC8vIE5vIE9wZW5HcmFwaCBpbWFnZSBzZXQKICAgICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX29wZW5ncmFwaF9pbWFnZScsJycpID09ICcnKSB7CiAgICAgICAgJGFsZXJ0ID0gQXJyYXkoKTsKICAgICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnb3BlbmdyYXBoJzsKICAgICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdub19vcGVuZ3JhcGhfaW1hZ2UnKTsKICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7CiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgICB9CiAgICB9CgogICAgcmV0dXJuICRhbGVydHM7CiAgfQoKICBmdW5jdGlvbiBnZXRJbXBvcnRhbnRBbGVydHMoKSB7CiAgICBnbG9iYWwgJGdDbXM7CgogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRhbGVydHMgPSBBcnJheSgpOwogICAgJHJvb3RfdXJsID0gZW1wdHkoJF9TRVJWRVJbJ0hUVFBTJ10pID8gJGdDbXMtPmNvbmZpZ1sncm9vdF91cmwnXSA6ICRnQ21zLT5jb25maWdbJ3NzbF91cmwnXTsKCiAgICAvLyBQYWdlcyB3aXRoIHNob3J0IGRlc2NyaXB0aW9uCiAgICAkcXVlcnkgPSAnU0VMRUNUICosYy5jb250ZW50X2lkIEFTIGNpZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IGMgSU5ORVIgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nY29udGVudF9wcm9wcyBwIE9OIChjLmNvbnRlbnRfaWQgPSBwLmNvbnRlbnRfaWQgQU5EIHAucHJvcF9uYW1lID0gIicuc3RyX3JlcGxhY2UoJyAnLCdfJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYmxvY2snLCcnKSkuJyIpIFdIRVJFIENIQVJfTEVOR1RIKHAuY29udGVudCkgPCA3NSBBTkQgYy50eXBlID0gImNvbnRlbnQiIEFORCBwLmNvbnRlbnQgPD4gIiIgTElNSVQgMCwyMSc7CiAgICAkcmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgaWYgKCRyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKSB7CiAgICAgIHdoaWxlICgkcHJvYmxlbSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsKICAgICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdkZXNjcmlwdGlvbnMnOwogICAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ21ldGFfZGVzY3JpcHRpb25fc2hvcnQnLEFycmF5KCRwcm9ibGVtWydjb250ZW50X25hbWUnXSkpOwogICAgICAgIGlmIChpc3NldCgkX0dFVFsnc3BfJ10pKSB7CiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/c3BfPScuJF9HRVRbJ3NwXyddLicmY29udGVudF9pZD0nLiRwcm9ibGVtWydjaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2VfdG9fZml4JykuJzwvYT4nOwogICAgICAgIH1lbHNlewogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP19zeF89Jy4kX0dFVFsnX3N4XyddLicmY29udGVudF9pZD0nLiRwcm9ibGVtWydjaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2VfdG9fZml4JykuJzwvYT4nOwogICAgICAgIH0KICAgICAgICAkYWxlcnRzW10gPSAkYWxlcnQ7CiAgICAgIH0KICAgIH0KCiAgICAvLyBQYWdlcyB3aXRoIGR1cGxpY2F0ZSB0aXRsZQogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBjMS5jb250ZW50X2FsaWFzIEFTIGMxbmFtZSwgYzEuY29udGVudF9pZCBBUyBjMWlkLCBjMi5jb250ZW50X2FsaWFzIEFTIGMybmFtZSwgYzIuY29udGVudF9pZCBBUyBjMmlkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnQgYzEgSU5ORVIgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nY29udGVudCBjMiBPTiAoYzEuY29udGVudF9uYW1lID0gYzIuY29udGVudF9uYW1lIEFORCBjMS5jb250ZW50X2lkIDwgYzIuY29udGVudF9pZCkgV0hFUkUgYzEudHlwZSA9ICJjb250ZW50IiBBTkQgYzIudHlwZSA9ICJjb250ZW50IiBMSU1JVCAwLDIxJzsKICAgICRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICBpZiAoJHJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApIHsKCiAgICAgIHdoaWxlICgkcHJvYmxlbSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsKICAgICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICd0aXRsZXMnOwogICAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2R1cGxpY2F0ZV90aXRsZXMnLEFycmF5KCRwcm9ibGVtWydjMW5hbWUnXSwkcHJvYmxlbVsnYzJuYW1lJ10pKTsKICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ3NwXyddKSkgewogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP3NwXz0nLiRfR0VUWydzcF8nXS4nJmNvbnRlbnRfaWQ9Jy4kcHJvYmxlbVsnYzFpZCddLiciPicuJHRoaXMtPkxhbmcoJ2VkaXRfcGFnZScsQXJyYXkoJHByb2JsZW1bJ2MxbmFtZSddKSkuJzwvYT4nOwogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP3NwXz0nLiRfR0VUWydzcF8nXS4nJmNvbnRlbnRfaWQ9Jy4kcHJvYmxlbVsnYzJpZCddLiciPicuJHRoaXMtPkxhbmcoJ2VkaXRfcGFnZScsQXJyYXkoJHByb2JsZW1bJ2MybmFtZSddKSkuJzwvYT4nOwogICAgICAgIH1lbHNlewogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP19zeF89Jy4kX0dFVFsnX3N4XyddLicmY29udGVudF9pZD0nLiRwcm9ibGVtWydjMWlkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlJyxBcnJheSgkcHJvYmxlbVsnYzFuYW1lJ10pKS4nPC9hPic7CiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/X3N4Xz0nLiRfR0VUWydfc3hfJ10uJyZjb250ZW50X2lkPScuJHByb2JsZW1bJ2MyaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2UnLEFycmF5KCRwcm9ibGVtWydjMm5hbWUnXSkpLic8L2E+JzsKICAgICAgICB9CiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgICB9CiAgICB9CiAgICAvLyBQYWdlcyB3aXRoIGR1cGxpY2F0ZSBkZXNjcmlwdGlvbgogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBwMS5jb250ZW50X2lkIEFTIGMxaWQsIHAyLmNvbnRlbnRfaWQgQVMgYzJpZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50X3Byb3BzIHAxIElOTkVSIEpPSU4gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnRfcHJvcHMgcDIgT04gKHAxLnByb3BfbmFtZSA9IHAyLnByb3BfbmFtZSBBTkQgcDEucHJvcF9uYW1lID0gIicuc3RyX3JlcGxhY2UoJyAnLCdfJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYmxvY2snLCcnKSkuJyIgQU5EIHAxLmNvbnRlbnRfaWQgPCBwMi5jb250ZW50X2lkIEFORCBwMS5jb250ZW50IDw+ICIiIEFORCBwMi5jb250ZW50IDw+ICIiKSBXSEVSRSBwMS5jb250ZW50ID0gcDIuY29udGVudCBMSU1JVCAwLDIxJzsKICAgICRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICBpZiAoJHJlc3VsdC0+UmVjb3JkQ291bnQoKSA+IDApIHsKCiAgICAgIHdoaWxlICgkcHJvYmxlbSA9ICRyZXN1bHQtPmZldGNoUm93KCkpIHsKICAgICAgICAkcXVlcnkgPSAnU0VMRUNUIGNvbnRlbnRfaWQsIGNvbnRlbnRfbmFtZSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidjb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRwcm9ibGVtWydjMWlkJ10uJyBPUiBjb250ZW50X2lkID0gJy4kcHJvYmxlbVsnYzJpZCddOwogICAgICAgICRyZXN1bHQxID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgICRmaXJzdCA9ICRyZXN1bHQxLT5mZXRjaFJvdygpOwogICAgICAgICRzZWNvbmQgPSAkcmVzdWx0MS0+ZmV0Y2hSb3coKTsKICAgICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAgICRhbGVydFsnZ3JvdXAnXSA9ICdkZXNjcmlwdGlvbnMnOwogICAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2R1cGxpY2F0ZV9kZXNjcmlwdGlvbnMnLEFycmF5KCRmaXJzdFsnY29udGVudF9uYW1lJ10sJHNlY29uZFsnY29udGVudF9uYW1lJ10pKTsKICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ3NwXyddKSkgewogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP3NwXz0nLiRfR0VUWydzcF8nXS4nJmNvbnRlbnRfaWQ9Jy4kZmlyc3RbJ2NvbnRlbnRfaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2UnLEFycmF5KCRmaXJzdFsnY29udGVudF9uYW1lJ10pKS4nPC9hPic7CiAgICAgICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICc8YSBocmVmPSInLiRyb290X3VybC4nLycuJGNvbmZpZ1snYWRtaW5fZGlyJ10uJy9lZGl0Y29udGVudC5waHA/c3BfPScuJF9HRVRbJ3NwXyddLicmY29udGVudF9pZD0nLiRzZWNvbmRbJ2NvbnRlbnRfaWQnXS4nIj4nLiR0aGlzLT5MYW5nKCdlZGl0X3BhZ2UnLEFycmF5KCRzZWNvbmRbJ2NvbnRlbnRfbmFtZSddKSkuJzwvYT4nOwogICAgICAgIH1lbHNlewogICAgICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAnPGEgaHJlZj0iJy4kcm9vdF91cmwuJy8nLiRjb25maWdbJ2FkbWluX2RpciddLicvZWRpdGNvbnRlbnQucGhwP19zeF89Jy4kX0dFVFsnX3N4XyddLicmY29udGVudF9pZD0nLiRmaXJzdFsnY29udGVudF9pZCddLiciPicuJHRoaXMtPkxhbmcoJ2VkaXRfcGFnZScsQXJyYXkoJGZpcnN0Wydjb250ZW50X25hbWUnXSkpLic8L2E+JzsKICAgICAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJzxhIGhyZWY9IicuJHJvb3RfdXJsLicvJy4kY29uZmlnWydhZG1pbl9kaXInXS4nL2VkaXRjb250ZW50LnBocD9fc3hfPScuJF9HRVRbJ19zeF8nXS4nJmNvbnRlbnRfaWQ9Jy4kc2Vjb25kWydjb250ZW50X2lkJ10uJyI+Jy4kdGhpcy0+TGFuZygnZWRpdF9wYWdlJyxBcnJheSgkc2Vjb25kWydjb250ZW50X25hbWUnXSkpLic8L2E+JzsKICAgICAgICB9CiAgICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgICB9CiAgICB9CiAgICAvLyBObyBhdXRob3IgcHJvdmlkZWQKICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWV0YV9wdWJsaXNoZXInLCcnKSA9PSAnJykgewogICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAkYWxlcnRbJ2dyb3VwJ10gPSAnc2V0dGluZ3MnOwogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdwcm92aWRlX2FuX2F1dGhvcicpOwogICAgICAkYWxlcnRbJ2xpbmtzJ11bXSA9ICR0aGlzLT5jcmVhdGVMaW5rKG51bGwsICdkZWZhdWx0YWRtaW4nLCBudWxsLCAkdGhpcy0+TGFuZygndmlzaXRfc2V0dGluZ3MnKSwgQXJyYXkoJ3RhYic9PidtZXRhc2V0dGluZ3MnKSk7CiAgICAgICRhbGVydHNbXSA9ICRhbGVydDsKICAgIH0KICAgIHJldHVybiAkYWxlcnRzOwogIH0KCiAgZnVuY3Rpb24gZ2V0Tm90aWNlQWxlcnRzKCkgewogICAgZ2xvYmFsICRnQ21zOwoKICAgICRhbGVydHMgPSBBcnJheSgpOwogICAgLy8gTm8gc3RhbmRhcmQgbWV0YQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtZXRhX3N0YW5kYXJkJywxKSAhPSAxKSB7CiAgICAgICRhbGVydCA9IEFycmF5KCk7CiAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ3VzZV9zdGFuZGFyZF9tZXRhJyk7CiAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPmNyZWF0ZUxpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsIG51bGwsICR0aGlzLT5MYW5nKCd2aXNpdF9zZXR0aW5ncycpLCBBcnJheSgndGFiJz0+J21ldGFzZXR0aW5ncycpKTsKICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgfQogICAgLy8gU3VibWl0IGEgc2l0ZW1hcAogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfc2l0ZW1hcCcsMSkgIT0gMSkgewogICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdjcmVhdGVfYV9zaXRlbWFwJyk7CiAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPmNyZWF0ZUxpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsIG51bGwsICR0aGlzLT5MYW5nKCd2aXNpdF9zZXR0aW5ncycpLCBBcnJheSgndGFiJz0+J3NpdGVtYXBzZXR0aW5ncycpKTsKICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgfWVsc2VpZigkdGhpcy0+R2V0UHJlZmVyZW5jZSgncHVzaF9zaXRlbWFwJywxKSAhPSAxKSB7CiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgc3VibWl0IHRoZSBzaXRlbWFwCiAgICAgICRhbGVydCA9IEFycmF5KCk7CiAgICAgICRhbGVydFsnbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2F1dG9tYXRpY2FsbHlfdXBsb2FkX3NpdGVtYXAnKTsKICAgICAgJGFsZXJ0WydsaW5rcyddW10gPSAkdGhpcy0+Y3JlYXRlTGluayhudWxsLCAnZGVmYXVsdGFkbWluJywgbnVsbCwgJHRoaXMtPkxhbmcoJ3Zpc2l0X3NldHRpbmdzJyksIEFycmF5KCd0YWInPT4nc2l0ZW1hcHNldHRpbmdzJykpOwogICAgICAkYWxlcnRzW10gPSAkYWxlcnQ7CiAgICB9CiAgICAvLyBDcmVhdGUgYSByb2JvdHMudHh0IGZpbGUKICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3JvYm90cycsMSkgIT0gMSkgewogICAgICAkYWxlcnQgPSBBcnJheSgpOwogICAgICAkYWxlcnRbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdjcmVhdGVfcm9ib3RzJyk7CiAgICAgICRhbGVydFsnbGlua3MnXVtdID0gJHRoaXMtPmNyZWF0ZUxpbmsobnVsbCwgJ2RlZmF1bHRhZG1pbicsIG51bGwsICR0aGlzLT5MYW5nKCd2aXNpdF9zZXR0aW5ncycpLCBBcnJheSgndGFiJz0+J3NpdGVtYXBzZXR0aW5ncycpKTsKICAgICAgJGFsZXJ0c1tdID0gJGFsZXJ0OwogICAgfQogICAgLy8gU2V0IGEgZGVmYXVsdCBpbWFnZQogICAgcmV0dXJuICRhbGVydHM7CiAgfQoKICBmdW5jdGlvbiBnZXRfa2V5d29yZHMoJHNvdXJjZSwgJG1pbmxlbmd0aCA9IDYpIHsKICAgICRzb3VyY2UgPSBwcmVnX3JlcGxhY2UoJy9ce1teXH1dK1x9L2lzVScsICcnLCB1dGY4X2RlY29kZSgkc291cmNlKSk7CiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoIlxuIiwiICIsc3RyaXBfdGFncygkc291cmNlKSk7CiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJy0nLCcgJywkc291cmNlKTsKICAgICRzb3VyY2UgPSBzdHJfcmVwbGFjZSgnLicsJyAnLCRzb3VyY2UpOwogICAgJHNvdXJjZSA9IHN0cl9yZXBsYWNlKCcsJywnICcsJHNvdXJjZSk7CiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJyEnLCcgJywkc291cmNlKTsKICAgICRzb3VyY2UgPSBzdHJfcmVwbGFjZSgnPycsJyAnLCRzb3VyY2UpOwogICAgJHNvdXJjZSA9IHN0cl9yZXBsYWNlKCc6JywnICcsJHNvdXJjZSk7CiAgICAkc291cmNlID0gc3RyX3JlcGxhY2UoJyAgJywnICcsJHNvdXJjZSk7CiAgICAka2V5d29yZHMgPSBleHBsb2RlKCcgJywkc291cmNlKTsKICAgIGZvcmVhY2ggKCRrZXl3b3JkcyBhcyAka2V5PT4kdmFsdWUpIHsKICAgICAgaWYgKHN0cmxlbigkdmFsdWUpIDwgJG1pbmxlbmd0aCkgewogICAgICAgIHVuc2V0KCRrZXl3b3Jkc1ska2V5XSk7CiAgICAgIH1lbHNlewogICAgICAgICRrZXl3b3Jkc1ska2V5XSA9IGh0bWxlbnRpdGllcyh0cmltKCR2YWx1ZSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJGtleXdvcmRzOwogIH0KCiAgZnVuY3Rpb24gZ2V0X2hlYWRsaW5lcygkZmlsZSl7CiAgICAkaDF0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGgxLio+KShcdy4qKSg8XC9oMT4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOwogICAgJGNvbnRlbnQgPSAiIjsKICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsKICAgICAgJGNvbnRlbnQgLj0gIiAiLiR0YWc7CiAgICB9CiAgICAkaDJ0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGgyLio+KShcdy4qKSg8XC9oMj4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOwogICAgZm9yZWFjaCgkcGF0dGVybnNbMl0gYXMgJHRhZykgewogICAgICAkY29udGVudCAuPSAiICIuJHRhZzsKICAgIH0KICAgICRoM3RhZ3MgPSBwcmVnX21hdGNoX2FsbCgiLyg8aDMuKj4pKFx3LiopKDxcL2gzPikvaXN4bVUiLCRmaWxlLCRwYXR0ZXJucyk7CiAgICBmb3JlYWNoKCRwYXR0ZXJuc1syXSBhcyAkdGFnKSB7CiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOwogICAgfQogICAgJGg0dGFncyA9IHByZWdfbWF0Y2hfYWxsKCIvKDxoNC4qPikoXHcuKikoPFwvaDQ+KS9pc3htVSIsJGZpbGUsJHBhdHRlcm5zKTsKICAgIGZvcmVhY2goJHBhdHRlcm5zWzJdIGFzICR0YWcpIHsKICAgICAgJGNvbnRlbnQgLj0gIiAiLiR0YWc7CiAgICB9CiAgICAkaDV0YWdzID0gcHJlZ19tYXRjaF9hbGwoIi8oPGg1Lio+KShcdy4qKSg8XC9oNT4pL2lzeG1VIiwkZmlsZSwkcGF0dGVybnMpOwogICAgZm9yZWFjaCgkcGF0dGVybnNbMl0gYXMgJHRhZykgewogICAgICAkY29udGVudCAuPSAiICIuJHRhZzsKICAgIH0KICAgICRoNnRhZ3MgPSBwcmVnX21hdGNoX2FsbCgiLyg8aDYuKj4pKFx3LiopKDxcL2g2PikvaXN4bVUiLCRmaWxlLCRwYXR0ZXJucyk7CiAgICBmb3JlYWNoKCRwYXR0ZXJuc1syXSBhcyAkdGFnKSB7CiAgICAgICRjb250ZW50IC49ICIgIi4kdGFnOwogICAgfQogICAgcmV0dXJuICRjb250ZW50OwogIH0KCiAgZnVuY3Rpb24gZ2V0S2V5d29yZFN1Z2dlc3Rpb25zKCRjb250ZW50X2lkKSB7CiAgICBnbG9iYWwgJGdDbXM7CiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwoKICAgICRjb250ZW50b3BzID0gJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CiAgICBpZiAoISRjdXJjb250ZW50ID0gJGNvbnRlbnRvcHMtPkxvYWRDb250ZW50RnJvbUlkICgkY29udGVudF9pZCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgJGRlc2NyaXB0aW9uX2lkID0gc3RyX3JlcGxhY2UoJyAnLCdfJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVzY3JpcHRpb25fYmxvY2snLCcnKSk7CgogICAgLyogR2VuZXJhdGUga2V5d29yZHMgZnJvbSBwYWdlIHRpdGxlLCBkZXNjcmlwdGlvbiBhbmQgY29udGVudCAqLwogICAgJHRpdGxlX2tleXdvcmRzID0gJHRoaXMtPmdldF9rZXl3b3JkcygkY3VyY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5sZW5ndGgnLCc2JykpOwoKICAgICRkZXNjcmlwdGlvbl9rZXl3b3JkcyA9ICR0aGlzLT5nZXRfa2V5d29yZHMoJGN1cmNvbnRlbnQtPkdldFByb3BlcnR5VmFsdWUoJGRlc2NyaXB0aW9uX2lkKSwgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2tleXdvcmRfbWlubGVuZ3RoJywnNicpKTsKCiAgICAkaGVhZGxpbmVfa2V5d29yZHMgPSAkdGhpcy0+Z2V0X2tleXdvcmRzKCR0aGlzLT5nZXRfaGVhZGxpbmVzKCRjdXJjb250ZW50LT5OYW1lKCkpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5sZW5ndGgnLCc2JykpOwoKICAgICRjb250ZW50X2tleXdvcmRzID0gJHRoaXMtPmdldF9rZXl3b3JkcygkY3VyY29udGVudC0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5sZW5ndGgnLCc2JykpOwoKICAgICRvdGhlcl9rZXl3b3JkcyA9IEFycmF5KCk7CgogICAgZm9yZWFjaCgkdGl0bGVfa2V5d29yZHMgYXMgJGtleXdvcmQpIHsKICAgICAgaWYgKCFpc3NldCgkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdKSkgewogICAgICAgICRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0gPSAwOwogICAgICB9CiAgICAgICRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0gPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF90aXRsZV93ZWlnaHQnLCc2Jyk7CiAgICB9CiAgICBmb3JlYWNoKCRkZXNjcmlwdGlvbl9rZXl3b3JkcyBhcyAka2V5d29yZCkgewogICAgICBpZiAoIWlzc2V0KCRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0pKSB7CiAgICAgICAgJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSA9IDA7CiAgICAgIH0KICAgICAgJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSArPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9kZXNjcmlwdGlvbl93ZWlnaHQnLCc0Jyk7CiAgICB9CiAgICBmb3JlYWNoKCRoZWFkbGluZV9rZXl3b3JkcyBhcyAka2V5d29yZCkgewogICAgICBpZiAoIWlzc2V0KCRvdGhlcl9rZXl3b3Jkc1ska2V5d29yZF0pKSB7CiAgICAgICAgJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSA9IDA7CiAgICAgIH0KICAgICAgJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSArPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9oZWFkbGluZV93ZWlnaHQnLCcyJyk7CiAgICB9CiAgICBmb3JlYWNoKCRjb250ZW50X2tleXdvcmRzIGFzICRrZXl3b3JkKSB7CiAgICAgIGlmICghaXNzZXQoJG90aGVyX2tleXdvcmRzWyRrZXl3b3JkXSkpIHsKICAgICAgICAkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdID0gMDsKICAgICAgfQogICAgICAkb3RoZXJfa2V5d29yZHNbJGtleXdvcmRdICs9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdrZXl3b3JkX2NvbnRlbnRfd2VpZ2h0JywnMScpOwogICAgfQoKICAgIGFyc29ydCgkb3RoZXJfa2V5d29yZHMpOwoKICAgICRleGNsdWRlX2xpc3QgPSBleHBsb2RlKCcgJyxzdHJ0b3VwcGVyKHV0ZjhfZGVjb2RlKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdrZXl3b3JkX2V4Y2x1ZGUnLCcnKSkpKTsKCiAgICBmb3JlYWNoICgkb3RoZXJfa2V5d29yZHMgYXMgJGtleT0+JHZhbHVlKSB7CiAgICAgIGlmICgkdmFsdWUgPCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgna2V5d29yZF9taW5pbXVtX3dlaWdodCcsJzcnKSkgewogICAgICAgIHVuc2V0KCRvdGhlcl9rZXl3b3Jkc1ska2V5XSk7CiAgICAgIH1lbHNlaWYgKGluX2FycmF5KHN0cnRvdXBwZXIoJGtleSksJGV4Y2x1ZGVfbGlzdCkpIHsKICAgICAgICB1bnNldCgkb3RoZXJfa2V5d29yZHNbJGtleV0pOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuICRvdGhlcl9rZXl3b3JkczsKICB9CgogIGZ1bmN0aW9uIGNyZWF0ZVJvYm90c1RYVCgpIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkcm9vdF91cmwgPSBlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgPyAkZ0Ntcy0+Y29uZmlnWydyb290X3VybCddIDogJGdDbXMtPmNvbmZpZ1snc3NsX3VybCddOwoKICAgICRmcCA9IEBmb3BlbigkY29uZmlnWydyb290X3BhdGgnXS4nL3JvYm90cy50eHQnLCd3Jyk7CgogICAgLy8gQ3JlYXRlIHJvYm90cy50eHQKICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3JlYXRlX3NpdGVtYXAnLDEpID09IDEpIHsKICAgICAgZndyaXRlKCRmcCwgIlNpdGVtYXA6ICIuJHJvb3RfdXJsLiIvc2l0ZW1hcC54bWxcbiIpOwogICAgfQogICAgQGZ3cml0ZSgkZnAsICJVc2VyLWFnZW50OiAqXG4iKTsKICAgIEBmd3JpdGUoJGZwLCAiRGlzYWxsb3c6ICIuJHJvb3RfdXJsLiIvY29udHJpYi9cbiIpOwogICAgQGZ3cml0ZSgkZnAsICJEaXNhbGxvdzogIi4kcm9vdF91cmwuIi9kb2MvXG4iKTsKICAgIEBmd3JpdGUoJGZwLCAiRGlzYWxsb3c6ICIuJHJvb3RfdXJsLiIvbGliL1xuIik7CiAgICBAZndyaXRlKCRmcCwgIkRpc2FsbG93OiAiLiRyb290X3VybC4iL21vZHVsZXMvXG4iKTsKICAgIEBmd3JpdGUoJGZwLCAiRGlzYWxsb3c6ICIuJHJvb3RfdXJsLiIvcGx1Z2lucy9cbiIpOwogICAgQGZ3cml0ZSgkZnAsICJEaXNhbGxvdzogIi4kcm9vdF91cmwuIi9zY3JpcHRzL1xuIik7CiAgICBAZndyaXRlKCRmcCwgIkRpc2FsbG93OiAiLiRyb290X3VybC4iL3RtcC9cbiIpOwoKICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfc2VvdG9vbHMyIFdIRVJFIGluZGV4YWJsZSA9IDAiOwogICAgJHJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKICAgICRjb250ZW50b3BzID0gJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CiAgICB3aGlsZSAoJHBhZ2UgPSAkcmVzdWx0LT5mZXRjaFJvdygpKSB7CgogICAgICBpZiAoJGN1cmNvbnRlbnQgPSAkY29udGVudG9wcy0+TG9hZENvbnRlbnRGcm9tSWQgKCRwYWdlWydjb250ZW50X2lkJ10pKSB7CiAgICAgICAgJHVybCA9ICRjdXJjb250ZW50LT5HZXRVUkwoKTsKICAgICAgICBAZndyaXRlKCRmcCwgIkRpc2FsbG93OiAiLiR1cmwuIlxuIik7CiAgICAgIH0KICAgIH0KICAgIEBmY2xvc2UoJGZwKTsKICB9CgogIGZ1bmN0aW9uIGNyZWF0ZVNpdGVtYXAoJHB1c2ggPSBmYWxzZSkgewogICAgZ2xvYmFsICRnQ21zOwogICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRyb290X3VybCA9IGVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSA/ICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10gOiAkZ0Ntcy0+Y29uZmlnWydzc2xfdXJsJ107CiAgICAkcm9vdF9wYXRoID0gJGdDbXMtPmNvbmZpZ1sncm9vdF9wYXRoJ107CiAgICAkbWFwX3BhdGggPSAkcm9vdF9wYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3NpdGVtYXAueG1sJzsKICAgIAogICAgJGZwID0gZm9wZW4oJG1hcF9wYXRoLCd3Jyk7CiAgICAvLyBDcmVhdGUgc2l0ZW1hcAoKICAgIGZ3cml0ZSgkZnAsICI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdVVEYtOCc/PlxuIik7CiAgICBmd3JpdGUoJGZwLCAiPHVybHNldCB4bWxucz0naHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAuOSc+XG5cbiIpOwoKICAgICRjb250ZW50b3BzID0gJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CgogICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ2NvbnRlbnQgV0hFUkUgYWN0aXZlID0gMSBBTkQgdHlwZSAhPSAiZXJyb3JwYWdlIiBPUkRFUiBCWSBoaWVyYXJjaHkgQVNDJzsKICAgICRyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICAKICAgIGlmICgkcmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCApIHsKICAgICAgd2hpbGUgKCRwYWdlID0gJHJlc3VsdC0+ZmV0Y2hSb3coKSkgewogICAgICAgIAogICAgICAgIGlmICgkY3VyY29udGVudCA9ICRjb250ZW50b3BzLT5Mb2FkQ29udGVudEZyb21JZCAoJHBhZ2VbJ2NvbnRlbnRfaWQnXSkpIHsKCi8vICAgICAgICAgIGlmICgkY3VyY29udGVudC0+QWN0aXZlKCkgJiYgJGN1cmNvbnRlbnQtPlNob3dJbk1lbnUoKSkgewogICAgICAgICAgaWYgKCRjdXJjb250ZW50LT5BY3RpdmUoKSkgewogICAgICAgICAgICAkdXJsID0gJGN1cmNvbnRlbnQtPkdldFVSTCgpOwogICAgICAgICAgICBpZiAoJHVybCA9PSAiIyIpIHsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAKCi8vICAgICAgICAgICAgaWYgKHN0cnBvcygkdXJsLCAkcm9vdF91cmwpID09PSBmYWxzZSkgewovLyAgICAgICAgICAgICAgY29udGludWU7Ci8vICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc3RycG9zKHN0cnN0cigkdXJsLCc6JyksIHN0cnN0cigkcm9vdF91cmwsJzonKSkgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgICRwcmlvcml0eSA9IDgwOwogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBzdWJzdHJfY291bnQoJHBhZ2VbJ2hpZXJhcmNoeSddLCcuJyk7ICRpKyspIHsKICAgICAgICAgICAgICAkcHJpb3JpdHkgID0gJHByaW9yaXR5IC8gMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHBhZ2VbJ2RlZmF1bHRfY29udGVudCddID09IDEpIHsKICAgICAgICAgICAgICAkcHJpb3JpdHkgPSAxMDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfc2VvdG9vbHMyIFdIRVJFIGNvbnRlbnRfaWQgPSAnLiRwYWdlWydjb250ZW50X2lkJ107CiAgICAgICAgICAgICRyZXN1bHQyID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgICAgICAgICAkaW5mbyA9ICRyZXN1bHQyLT5mZXRjaFJvdygpOwogICAgICAgICAgICBpZiAoaXNzZXQoJGluZm9bJ3ByaW9yaXR5J10pICYmICgkaW5mb1sncHJpb3JpdHknXSAhPSAwKSAmJiAoJGluZm9bJ3ByaW9yaXR5J10gIT0gIiIpKSB7CiAgICAgICAgICAgICAgJHByaW9yaXR5ID0gJGluZm9bJ3ByaW9yaXR5J107CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghaXNzZXQoJGluZm9bJ2luZGV4YWJsZSddKSB8fCAoJGluZm9bJ2luZGV4YWJsZSddID09ICIiKSB8fCAoJGluZm9bJ2luZGV4YWJsZSddID09IDEpKSB7CiAgICAgICAgICAgICAgZndyaXRlKCRmcCwgIjx1cmw+XG4iKTsKICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAiPGxvYz4iLiR1cmwuIjwvbG9jPlxuIik7CiAgICAgICAgICAgICAgZndyaXRlKCRmcCwgIjxsYXN0bW9kPiIuZGF0ZSgiWS1tLWQiLCBzdHJ0b3RpbWUoJHBhZ2VbJ21vZGlmaWVkX2RhdGUnXSkpLiI8L2xhc3Rtb2Q+XG4iKTsKICAgICAgICAgICAgICBmd3JpdGUoJGZwLCAiPGNoYW5nZWZyZXE+YWx3YXlzPC9jaGFuZ2VmcmVxPlxuIik7CiAgICAgICAgICAgICAgZndyaXRlKCRmcCwgIjxwcmlvcml0eT4iLm51bWJlcl9mb3JtYXQoJHByaW9yaXR5IC8gMTAwLCAxKS4iPC9wcmlvcml0eT5cbiIpOwogICAgICAgICAgICAgIGZ3cml0ZSgkZnAsICI8L3VybD5cblxuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIAogICAgZndyaXRlKCRmcCwgIjwvdXJsc2V0PiIpOwogICAgZmNsb3NlKCRmcCk7CiAgICBpZiAoJHB1c2ggIT0gZmFsc2UgJiYgJHB1c2ggIT09MCkgewogICAgICAvLyBQdXNoIHNpdGVtYXAgdG8gZ29vZ2xlCiAgICAgIGlmIChmaWxlX2V4aXN0cygkbWFwX3BhdGgpKSB7CiAgICAgICAgJGdvb2dsZSA9ICJodHRwOi8vd3d3Lmdvb2dsZS5jb20vd2VibWFzdGVycy90b29scy9waW5nP3NpdGVtYXA9Ii51cmxlbmNvZGUoJG1hcF9wYXRoKTsKICAgICAgICAkZiA9IEBmb3BlbigkZ29vZ2xlLCJyIik7CiAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRmKSkKICAgICAgICBmY2xvc2UoJGYpOwogICAgICB9CgogICAgfQogIH0KCn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHN0eWxlIHR5cGU9J3RleHQvY3NzJz4Ke2xpdGVyYWx9CnAucGFnZXRleHQgewogIGNsZWFyOiBib3RoOwp9CmEgaW1nIHsKICBib3JkZXItc3R5bGU6IG5vbmUgIWltcG9ydGFudDsKfQp7L2xpdGVyYWx9Cjwvc3R5bGU+CgoKeyRtZXNzYWdlfQoKeyR0YWJfaGVhZGVyc30KCnskc3RhcnRfc2VvYWxlcnRzX3RhYn0KeyRhbGVydHN9CnskZW5kX3RhYn0KCnskc3RhcnRfcGFnZWRlc2NyaXB0aW9uc190YWJ9CnskcGFnZXNldHRpbmdzfQp7JGVuZF90YWJ9Cgp7JHN0YXJ0X21ldGFzZXR0aW5nc190YWJ9CnskbWV0YV9mb3JtfQp7JGVuZF90YWJ9Cgp7JHN0YXJ0X3NpdGVtYXBzZXR0aW5nc190YWJ9Cnskc2l0ZW1hcF9mb3JtfQp7JGVuZF90YWJ9Cgp7JHN0YXJ0X2tleXdvcmRzZXR0aW5nc190YWJ9Cnska2V5d29yZF9mb3JtfQp7JGVuZF90YWJ9Cgp7JHRhYl9mb290ZXJzfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4Ke2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9]]></data>
	</file>
</module>
