<?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>CGHeadMaster</name>
	<version>1.0.9.1</version>
  <mincmsversion>1.12</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPC9oMz4KPHA+VGhpcyBtb2R1bGUgaXMgYSBwb3dlcmZ1bCBhbmQgZmxleGlibGUgdG9vbCB0byBhaWRlIGluIGF1dG9tYXRpY2FsbHkgc2V0dGluZyBtZXRhIHRhZ3MgaW50byB5b3VyIG91dHB1dCBIVE1MLCBhbmQgZm9yIGN1c3RvbWl6aW5nIHRoZSB2YWx1ZSBvZiB0aG9zZSBtZXRhIHRhZ3MgYmFzZWQgb24gcGFnZSBjb250ZW50LjwvcD4KPHA+VGhpcyBtb2R1bGUgc2hvdWxkIGJlIHVzZWQgYnkgYW55IHByb2R1Y3Rpb24gd2Vic2l0ZSBpbiBvcmRlciB0byBhaWRlIGluIGdldHRpbmcgeW91ciB3ZWJzaXRlIG5vdGljZWQgYnkgc2VhcmNoIGVuZ2luZXMsIGFuZCB0byBhaWRlIGluIGludGVncmF0aW9uIHdpdGggc29jaWFsIG1lZGlhIHNpdGVzLjwvcD4KPGg0Pk5vdGljZXM6PC9oND4KPHVsPgogIDxsaT5UaGlzIG1vZHVsZSBoYXMgbm8gYWRtaW4gaW50ZXJmYWNlIDxlbT4oYXQgdGhpcyB0aW1lKTwvZW0+LgogICAgIDxwPkFkanVzdG1lbnRzIHRvIHRoZSBvdXRwdXQgYXJlIG1hZGUgZGlyZWN0bHkgaW4gdGhlIEhUTUwgcGFnZSB0ZW1wbGF0ZSBlZGl0b3IsIG9yIHRoZSBwYWdlIGVkaXRvci4gIEFkZGl0aW9uYWxseSwgeW91IGNhbiBhZGp1c3Qgc29tZSBzZXR0aW5ncyBieSBhZGRpbmcgdmFsdWVzIHRvIHRoZSBDTVNNUyBzeXN0ZW0gY29uZmlnLnBocCBmaWxlLjwvcD4KICA8L2xpPgogIDxsaT5UaGlzIG1vZHVsZSBvbmx5IGhhcyB0aGUgbW9zdCBiYXNpYyBvZiB1bmRlcnN0YW5kaW5nIG9mIHNvbWUgbWV0YSB0YWdzLiAgSXQgZG9lcyBub3QgcGFyc2UgdGhlIHZhbHVlcyBmb3IgbWV0YSB0YWdzLiAgVGhlcmVmb3JlIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB1c2VyIGhhdmUgZXhwZXJpZW5jZSBpbiBhbmQga25vd2xlZGdlIHdpdGggaW1wbGVtZW50aW5nIG1ldGEgdGFncy48L2xpPgogIDxsaT5Vbmxpa2Ugb3RoZXIgbW9kdWxlcyB3aXRoIGEgc2ltaWxhciBwdXJwb3NlLCB0aGlzIG1vZHVsZSBkb2VzIG5vdCBpbnRlcmFjdCB3aXRoIHRoZSBIVE1MIGRvY3R5cGUgb3Igdmlld3BvcnQsIG9yIGFueSBvdGhlciB0YWdzIHRoYXQgYXJlIGdlbmVyYWxseSByZWxhdGVkIHRvIGRpc3BsYXkgb3IgVVJMIGlzc3VlcyAoaS5lOiB0aGUgJmx0O2Jhc2UmZ3Q7IHRhZykuICBBZGRpdGlvbmFsbHksIGl0IGRvZXMgbm90IGluY2x1ZGUganF1ZXJ5IG9yIGFueSBvdGhlciBjc3Mgb3IgamF2YXNjcmlwdCBmcmFtZXdvcmtzIG9yIGxpYnJhcmllcy4gIFNlZSB0aGUgSlF1ZXJ5VG9vbHMgbW9kdWxlLCBhbmQgdGhlIHtjZ2pzX3JlbmRlcn0gcGx1Z2luIHN1aXRlIGluIHRoZSBDR0V4dGVuc2lvbnMgbW9kdWxlLjwvbGk+CjwvdWw+Cgo8aDM+RmVhdHVyZXM8L2gzPgo8dWw+CiAgPGxpPlVzZXMgc21hcnR5IHBsdWdpbnMgdG8gaW50ZXJhY3Qgd2l0aCBtZXRhIHRhZ3MuPC9saT4KICA8bGk+RXh0ZW5kYWJsZSAmcXVvdDtLbm93biBmaWVsZHMmcXVvdDsgbGlzdDwvbGk+CiAgPGxJPkZpZWxkcyBhcmUgZ3JvdXBhYmxlLCBhbmQgeW91IGNhbiBzcGVjaWZ5IHdoaWNoIGdyb3VwcyBvZiBmaWVsZHMgdG8gb3V0cHV0LjwvbGk+CiAgPGxpPlZhbHVlcyBpbiB0aGUgQ01TTVMgY29uZmlnIGZpbGUgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBmaWVsZCB2YWx1ZXMuPC9saT4KICA8bGk+Q2FuIG91dHB1dCB0aGUgZ29vZ2xlIGFuYWx5dGljcyBwbHVnaW4gamF2YXNjcmlwdC48L2xpPgogIDxsaT5EZWZhdWx0IGZpZWxkIHZhbHVlcyBhcmUgYWN0dWFsbHkgc21hcnR5IHRlbXBsYXRlcy48L2xpPgogIDxsaT5IYW5kbGVzIG1ldGEsIGFuZCBsaW5rIHRhZ3MuPC9saT4KICA8bGk+RmllbGRzIHdpdGggYW4gZW1wdHkgdmFsdWUgYXJlIG5vdCBvdXRwdXQuPC9saT4KICA8bGk+RG9lcyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIENNU01TIGJ1aWx0IGluIHttZXRhZGF0YX0gcGx1Z2luLjwvbGk+CiAgPGxpPk9yZ2FuaXplcyBmaWVsZHMgaW50byBncm91cHMuLi4gZm9yIGVhc2llciBpbmNsdWRpbmcgYW5kIGV4Y2x1ZGluZy48L2xpPgogIDxsaT5tb3JlLi4uPC9saT4KPC91bD4KCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UbyBnZXQgYmFzaWMgb3V0cHV0LCBhZGQgPGNvZGU+e2NnaG1fcmVuZGVyfTwvY29kZT4gaW50byB0aGUgJnF1b3Q7R2xvYmFsIE1ldGFkYXRhJnF1b3Q7IGZpZWxkIG9mIHRoZSAmcXVvdDtHbG9iYWwgU2V0dGluZ3MmcXVvdDsgcGFnZS48L3A+CjxwPk5vdGU6ICBZb3UgY2FuIGFsc28gcHV0IHRoZSA8Y29kZT57Y2dobV9yZW5kZXJ9PC9jb2RlPiB0YWcgaW50byB0aGUgcGFnZSB0ZW1wbGF0ZSBkaXJlY3RseSBhYm92ZSB7bWV0YWRhdGF9LCBvciBmb3IgdGVzdGluZyBvbiBhIHNpbmdsZSBwYWdlLCB5b3UgY2FuIHBsYWNlIHRoZSA8Y29kZT57Y2dobV9yZW5kZXJ9PC9jb2RlPiB0YWcgaW50byB0aGUgbWV0YWRhdGEgc2VjdGlvbiBvZiBhIGNvbnRlbnQgcGFnZS48L3A+Cgo8aDM+U21hcnR5IFBsdWdpbnM8L2gzPgo8dWw+CiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX3NldH08L2NvZGU+CiAgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiBpcyB1c2VkIHRvIGFsdGVyIHRoZSB2YWx1ZSBvZiBhIGtub3duIG1ldGEgZmllbGQuICBJdCBjYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIHZhbHVlIG9mIGEgc2ltcGxlICZsdDttZXRhJnF1b3Q7IHRhZyB3aXRoIGEgbmFtZSBhbmQgYSBjb250ZW50IGF0dHJpYnV0ZSwgb3IgYSBtb3JlIGFkdmFuY2VkICZxdW90O2xpbmsmcXVvdDsgdGFnIHdpdG4gbXVsdGlwbGUgYXR0cmlidXRlcy48L3A+CiAgICA8cD5Vc2FnZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT5Nb2RpZnlpbmcgYSBzaW1wbGUgbWV0YSB0YWc6ICA8Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV9zZXQgbmFtZXxrZXk9c3RyaW5nIHZhbHx2YWx1ZT1zdHJpbmd9PC9jb2RlPgogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgoJPHVsPgoJICA8bGk+bmFtZXxrZXkgPSBzdHJpbmcgLS0gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbWV0YSB0YWcgeW91IHdhbnQgdG8gY2hhbmdlLjwvbGk+CgkgIDxsaT52YWx8dmFsdWUgPSBzdHJpbmcgLS0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIG1ldGEgdGFnLjwvbGk+Cgk8L3VsPgoJPHA+RXhhbXBsZTogIDxjb2RlPntjZ2htX3NldCBuYW1lPXJvYm90cyB2YWw9bm9pbmRleH08L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgICA8bGk+TW9kaWZ5aW5nIGEgY29tcGxleCBsaW5rIHRhZzogIDxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX3NldCByZWw9c3RyaW5nIG5hbWU9dmFsfTwvY29kZT4KICAgICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KCTx1bD4KCSAgPGxpPnJlbCA9IHN0cmluZyAtLSBUaGUgbmFtZSBvZiB0aGUgbWV0YSB0YWcgeW91IHdhbnQgdG8gY2hhbmdlLjwvbGk+CgkgIDxsaT5vdGhlciBwYXJhbWV0ZXJzID0gc3RyaW5nIC0tIFNwZWNpZnkgdGhlIGF0dHJpYnV0ZSBuYW1lIChvdGhlciB0aGFuIHJlbCkgYW5kIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgdG8gbW9kaWZ5LjwvbGk+Cgk8L3VsPgoJPHA+RXhhbXBsZTogIDxjb2RlPntjZ2htX3NldCByZWw9J2FwcGxlLXRvdWNoLWljb24nIHNpemVzPT0nMTZ4MTYnfTwvY29kZT48L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX2NvbmZpZ19zZXR9PC9jb2RlPgogICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gaXMgdXNlZCB0byBhbHRlciB0aGUgdmFsdWUgb2YsIG9yIHNldCBhIGNvbmZpZyB2YXJpYWJsZS4gIFRoZSBjb25maWcgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGluIHRoZSBmaWVsZCB0ZW1wbGF0ZXMgdG8gc2V0IGEgZmllbGQgdmFsdWUuPC9wPgogICAgPHA+U2V0dGluZyBhIGNvbmZpZyB2YXJpYWJsZSB1c2luZyB0aGlzIHBsdWdpbiB3aWxsIG92ZXJ3cml0ZSBpbiBtZW1vcnkgKGZvciBvbmUgcmVxdWVzdCkgYW55IHZhbHVlcyBmb3IgdGhlIHNhbWUgdmFyaWFibGUgcmVhZCBmcm9tIHRoZSBDTVNNUyBjb25maWcgZmlsZS48L3A+CiAgICA8cD5Vc2FnZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV9jb25maWdfc2V0IGtleT1zdHJpbmcgdmFsPXN0cmluZ308L2NvZGU+CiAgICAgICAgPHA+UGFyYW1ldGVyczo8L3A+Cgk8dWw+CgkgIDxsaT5rZXl8bmFtZSA9IHN0cmluZyAtLSBUaGUgbmFtZSBvZiB0aGUgY29uZmlnIHZhbHVlIHlvdSB3YW50IHRvIGNoYW5nZS48L2xpPgoJICA8bGk+dmFsfHZhbHVlID0gc3RyaW5nIC0tIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBjb25maWcgdmFyaWFibGUuPC9saT4KCTwvdWw+Cgk8cD5FeGFtcGxlOiAgPGNvZGU+e2NnaG1fY29uZmlnX3NldCBrZXk9J3RpdGxlJyB2YWw9JHZhbH08L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV91bnNldH08L2NvZGU+CiAgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiBpcyB1c2VkIHRvIHJlbW92ZSBhIHZhbHVlIGZyb20gYSBrbm93biBtZXRhIGZpZWxkLiAgVGhpcyBmb3JjZXMgdGhlIHZhbHVlIG9mIHRoZSBtZXRhIGZpZWxkIHRvIGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGRlZmF1bHQgbWV0aG9kcy48L3A+CiAgICA8cD5Vc2FnZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV91bnNldCBuYW1lfGtleT1zdHJpbmd9PC9jb2RlPgogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgoJPHVsPgoJICA8bGk+bmFtZXxrZXkgPSBzdHJpbmcgLS0gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbWV0YSB0YWcgeW91IHdhbnQgdG8gaGlkZS48L2xpPgoJPC91bD4KCTxwPkV4YW1wbGU6ICA8Y29kZT57Y2dobV91bnNldCBuYW1lPSdyb2JvdHMnfTwvY29kZT48L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX2hpZGV9PC9jb2RlPgogICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gaXMgdXNlZCB0byBoaWRlIGEga25vd24gdGFnIGZyb20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIEhUTUwgb3V0cHV0LjwvcD4KICAgIDxwPlVzYWdlOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX2hpZGUgbmFtZXxrZXk9c3RyaW5nfTwvY29kZT4KICAgICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KCTx1bD4KCSAgPGxpPm5hbWV8a2V5ID0gc3RyaW5nIC0tIHNwZWNpZnkgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB0aGUgbWV0YSB0YWdzIHlvdSB3YW50IHRvIGhpZGUuPC9saT4KCTwvdWw+Cgk8cD5FeGFtcGxlOiAgPGNvZGU+e2NnaG1faGlkZSBuYW1lPSdyb2JvdHMsY29weXJpZ2h0J308L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV9yZW5kZXJ9PC9jb2RlPgogICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gaXMgdXNlZCB0byByZW5kZXIgYWxsIGtub3duIG1ldGEgdGFncyB3aXRoIHRoZWlyIHNwZWNpZmllZCAob3IgY2FsY3VsYXRlZCkgdmFsdWVzLjwvcD4KICAgIDxwPlVzYWdlOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX3JlbmRlciBbZ3JvdXBzPXN0cmluZ119PC9jb2RlPgogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgoJPHVsPgoJICA8bGk+Z3JvdXBzID0gc3RyaW5nIC0tIHNwZWNpZnkgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBrbm93biBncm91cHMgdG8gb3V0cHV0LiAgTGVhdmluZyB0aGlzIGJsYW5rIHdpbGwgdXNlIGEgZGVmYXVsdCBncm91cCBsaXN0LiAgUHJlY2VkaW5nIGEgZ3JvdXAgbmFtZSB3aXRoIGFuICEgd2lsbCBlbnN1cmUgdGhhdCBhYnNvbHV0ZWx5IG5vIGZpZWxkcyB0aGF0IGFyZSBpbiB0aGF0IGdyb3VwIHdpbGwgYmUgZGlzcGxheWVkLjwvbGk+Cgk8L3VsPgoJPHA+RXhhbXBsZTogIDxjb2RlPntjZ2htX3JlbmRlciBncm91cHM9J21pc2Msb2csZmIsdHdpdHRlciwhb2xkJ308L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgo8L3VsPgoKPGgzPkdvb2dsZSBBbmFseXRpY3M8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIG91dHB1dGluZyB0aGUgZ29vZ2xlIGFuYWx5dGljcyBwbHVnaW4gY29kZSwgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHN1YmRvbWFpbnMsIGFuZCBtdWx0aXBsZSB0b3AgbGV2ZWwgZG9tYWlucyBkZXBlbmRpbmcgdXBvbiB0aGUgZm9sbG93aW5nIGNvbmZpZyB2YWx1ZXM6PC9wPgo8dWw+CiAgPGxpPjxjb2RlPmNnaG1fZ2FfcHJvcGVydHlpZDwvY29kZT4gKHN0cmluZyk8L2xpPgogIDxsaT48Y29kZT5jZ2htX2dhX3N1YmRvbWFpbnM8L2NvZGU+IChvcHRpb25hbCBib29sZWFuKTwvbGk+CiAgPGxpPjxjb2RlPmNnaG1fZ2FfZG9tYWluPC9jb2RlPiAob3B0aW9uYWwgc3RyaW5nKTwvbGk+CiAgPGxpPjxjb2RlPmNnaG1fZ2FfbGlua2RvbWFpbnM8L2NvZGU+IChvcHRpb25hbCBzdHJpbmcpPC9saT4KICA8bGk+PGNvZGU+Y2dobV9nYV9saW5raWQ8Y29kZT4gKG9wdGlvbmFsIGJvb2xlYW4pPC9saT4KICA8bGk+PGNvZGU+Y2dobV9nYV9kaXNwbGF5ZmVhdHVyZXM8Y29kZT4gKG9wdGlvbmFsIGJvb2xlYW4pPC9saT4KPC91bD4KCjxoMz5Lbm93biBGaWVsZHM8L2gzPgo8cD5UaGUgZm9sbG93aW5nIG1ldGEgZmllbGRzIGFyZSBrbm93biBieSBkZWZhdWx0OjwvcD4KPHVsPgogIDxsaT5kYXRlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb250ZW50X29iai0+R2V0TW9kaWZpZWREYXRlKCl8ZGF0ZV9mb3JtYXQ6JyVZLSVtLSVkVCVoOiVtOiVzUCd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+bGFzdHVwZGF0ZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29udGVudF9vYmotPkdldE1vZGlmaWVkRGF0ZSgpfGRhdGVfZm9ybWF0OiclWS0lbS0lZFQlaDolbTolc1AnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPnJldmlzZWQKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbnRlbnRfb2JqLT5HZXRNb2RpZmllZERhdGUoKXxkYXRlX2Zvcm1hdDonJVktJW0tJWRUJWg6JW06JXNQJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5jYW5vbmljYWwKICAgIDx1bD4KICAgICAgPGxpPnRhZzogbGluazwvbGk+CiAgICAgIDxsaT5rZXlhdHRyOiByZWw8L2xpPgogICAgICA8bGk+YXR0cjE6IGhyZWY8L2xpPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNhbm9uaWNhbHxkZWZhdWx0OiRjb250ZW50X29iai0+R2V0VVJMKCl9PC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+Y29weXJpZ2h0CiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb250ZW50X29iai0+R2V0TW9kaWZpZWREYXRlKCl8ZGF0ZV9mb3JtYXQ6JyVZJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50aXRsZV90YWcKICAgIDx1bD4KICAgICAgPGxpPmRmbHQ6IHskY29uZmlnLnRpdGxlfGRlZmF1bHQ6XCJ7dGl0bGV9IC0ge3NpdGVuYW1lfVwifTwvbGk+CiAgICAgIDxsaT50YWc6IHRpdGxlPC9saT4KICAgICAgPGxpPm5vYXR0cnM6IDE8L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50aXRsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLnRpdGxlfGRlZmF1bHQ6XCJ7dGl0bGV9IC0ge3NpdGVuYW1lfVwifTwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmRlc2NyaXB0aW9uCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyR0bXA9JGNvbmZpZy5kZXNjcmlwdGlvbnxkZWZhdWx0OiRjb25maWcuY2dobV9kZXNjcmlwdGlvbnxkZWZhdWx0OicnfXtpZiAhZW1wdHkoJHRtcCl9eyR0bXB9e2Vsc2V9e2Rlc2NyaXB0aW9ufXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+ZXhwaXJlcwogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+cmV2aXNpdC1hZnRlcgogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+Z29vZ2xlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogKipOT05FKio8L2xpPgogICAgICA8bGk+Z3JvdXA6IGdvb2dsZTwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmdvb2dsZWJvdAogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBnb29nbGU8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5nb29nbGUtc2l0ZS12ZXJpZmljYXRpb24KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5ncm91cDogZ29vZ2xlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+a2V5d29yZHMgPGVtPihzZWUgYmVsb3cpPC9lbT4KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPnJvYm90cwogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHtpZiAkY29udGVudF9vYmotPkNhY2hhYmxlKCkgJiYgJGNvbnRlbnRfb2JqLT5Jc1Blcm1pdHRlZCgpfTwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPngtdWEtY29tcGF0aWJsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXV0aG9yCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogKipOT05FKio8L2xpPgogICAgICA8bGk+dGFnOiBsaW5rPC9saT4KICAgICAgPGxpPmtleWF0dHI6IHJlbDwvbGk+CiAgICAgIDxsaT5hdHRyMTogaHJlZjwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm1ldGFfYXV0aG9yCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogKipOT05FKio8L2xpPgogICAgICA8bGk+a2V5dmFsOiBhdXRob3I8L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5wdWJsaXNoZXIKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT50YWc6IGxpbms8L2xpPgogICAgICA8bGk+a2V5YXR0cjogcmVsPC9saT4KICAgICAgPGxpPmF0dHIxOiBocmVmPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+bWV0YV9wdWJsaXNoZXIKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5rZXl2YWw6IHB1Ymxpc2hlcjwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmdlby5wbGFjZW5hbWUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX2NpdHl8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IGdlbzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmdlby5yZWdpb24KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX3N0YXRlfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBnZW88L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5nZW8ucG9zaXRpb24KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7aWYgIWVtcHR5KCRjb25maWcuY2dobV9sYXQpICYmICFlbXB0eSgkY29uZmlnLmNnaG1fbG9uZyl9eyRjb25maWcuY2dobV9sYXR9LCB7JGNvbmZpZy5jZ2htX2xvbmd9ey9pZn08L2xpPgogICAgICA8bGk+Z3JvdXA6IGdlbzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPklDQk0KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7aWYgIWVtcHR5KCRjb25maWcuY2dobV9sYXQpICYmICFlbXB0eSgkY29uZmlnLmNnaG1fbG9uZyl9eyRjb25maWcuY2dobV9sYXR9LCB7JGNvbmZpZy5jZ2htX2xvbmd9ey9pZn08L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50d2l0dGVyOmNhcmQKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX3R3aXR0ZXJjYXJkfGRlZmF1bHQ6J3N1bW1hcnknfTwvbGk+CiAgICAgIDxsaT5ncm91cDogdHdpdHRlcjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPnR3aXR0ZXI6c2l0ZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fdHdpdHRlcmlkfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+dHdpdHRlcjpjcmVhdG9yCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV90d2l0dGVyaWR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IHR3aXR0ZXI8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50d2l0dGVyOnVyaQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHtpZiBpc3NldCgkY2Fub25pY2FsKX17JGNhbm9uaWNhbH17ZWxzZX17JGNvbmZpZy5jYW5vbmljYWx8ZGVmYXVsdDokY29udGVudF9vYmotPkdldFVSTCgpfXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+dHdpdHRlcjppbWFnZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqIE5PTkUgKio8L2xpPgogICAgICA8bGk+Z3JvdXA6IHR3aXR0ZXI8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50d2l0dGVyOmRlc2NyaXB0aW9uCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyR0bXA9JGNvbmZpZy5kZXNjcmlwdGlvbnxkZWZhdWx0OiRjb25maWcuY2dobV9kZXNjcmlwdGlvbnxkZWZhdWx0OicnfXtpZiAhZW1wdHkoJHRtcCl9eyR0bXB9e2Vsc2V9e2Rlc2NyaXB0aW9ufXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+dHdlZXRtZW1lLXRpdGxlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcudGl0bGV8ZGVmYXVsdDpcInt0aXRsZX0gLSB7c2l0ZW5hbWV9XCJ9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6dGl0bGUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy50aXRsZXxkZWZhdWx0Olwie3RpdGxlfSAtIHtzaXRlbmFtZX1cIn08L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6dHlwZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHdlYnNpdGU8L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6dXJsCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MToge2lmIGlzc2V0KCRjYW5vbmljYWwpfXskY2Fub25pY2FsfXtlbHNlfXskY29uZmlnLmNhbm9uaWNhbHxkZWZhdWx0OiRjb250ZW50X29iai0+R2V0VVJMKCl9ey9pZn08L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6aW1hZ2UKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5pbWFnZXxkZWZhdWx0OiRjb25maWcuY2dobV9pbWFnZXxkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogb2c8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5vZzpzaXRlX25hbWUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7c2l0ZW5hbWV9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmRlc2NyaXB0aW9uCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyR0bXA9JGNvbmZpZy5kZXNjcmlwdGlvbnxkZWZhdWx0OiRjb25maWcuY2dobV9kZXNjcmlwdGlvbnxkZWZhdWx0OicnfXtpZiAhZW1wdHkoJHRtcCl9eyR0bXB9e2Vsc2V9e2Rlc2NyaXB0aW9ufXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmxhdGl0dWRlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9sYXR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6bG9uZ2l0dWRlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9sb25nfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOnN0cmVldF9hZGRyZXNzCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9hZGRyZXNzfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmxvY2FsaXR5CiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9jaXR5fGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOnJlZ2lvbgogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fc3RhdGV8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6cG9zdGFsLWNvZGUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX3Bvc3RhbF9jb2RlfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmNvdW50cnktbmFtZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fY291bnRyeXxkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogb2c8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5vZzplbWFpbAogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fZW1haWx8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6cGhvbmUtbnVtYmVyCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9waG9uZXxkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogb2c8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5vZzpmYXgtbnVtYmVyCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9mYXh8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+ZmI6cGFnZV9pZAogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fZmJwYWdlaWR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IGZiPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+ZmI6YWRtaW5zCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9mYmFkbWluc3xkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogZmI8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5mYjphcHBfaWQKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX2ZiQVBQSUR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IGZiPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+bXN2YWxpZGF0ZS4wMQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNobV93ZWJhcHBjYXBhYmxlfGRlZmF1bHQ6MH08L2xpPgogICAgICA8bGk+Z3JvdXA6IGFwcGxlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXBwbGUtbW9iaWxlLXdlYi1hcHAtc3RhdHVzLWJhci1zdHlsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IGRlZmF1bHQ8L2xpPgogICAgICA8bGk+Z3JvdXA6IGFwcGxlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXBwbGUtdG91Y2gtaWNvbgogICAgPHVsPgogICAgICA8bGk+dGFnOiBsaW5rPC9saT4KICAgICAgPGxpPmtleWF0dHI6IHJlbDwvbGk+CiAgICAgIDxsaT5hdHRyMTogaHJlZjwvbGk+CiAgICAgIDxsaT5kZmx0MToge3Jvb3RfdXJsfS9mYXZpY29uX2Ntcy5pY288L2xpPgogICAgICA8bGk+YXR0cjI6IHR5cGU8L2xpPgogICAgICA8bGk+ZGZsdDI6IGltYWdlL3gtaWNvbjwvbGk+CiAgICAgIDxsaT5ncm91cDogYXBwbGU8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4mcXVvdDtzaG9ydGN1dCBpY29uJnF1b3Q7CiAgICA8dWw+CiAgICAgIDxsaT50YWc6IGxpbms8L2xpPgogICAgICA8bGk+a2V5YXR0cjogcmVsPC9saT4KICAgICAgPGxpPmF0dHIxOiBocmVmPC9saT4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5hdHRyMjogdHlwZTwvbGk+CiAgICAgIDxsaT5kZmx0MjogaW1hZ2UveC1pY29uPC9saT4KICAgICAgPGxpPmF0dHIzOiBzaXplczwvbGk+CiAgICAgIDxsaT5kZmx0MzogMzJ4MzI8L2xpPgogICAgICA8bGk+Z3JvdXA6IGFwcGxlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KPC91bD4KCjxoMz5Db25maWcgVmFyaWFibGVzOjwvaDM+CjxwPlRoaXMgbW9kdWxlIHdpbGwgcmVhZCBhbnkgY29uZmlnIHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBjZ2htXyBwcmVmaXguICBUaGV5IGNhbiBiZSB1c2VkIGluIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgZmllbGRzLiBIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgY29uZmlnIHZhcmlhYmxlcyB0aGF0IHRoaXMgbW9kdWxlIG1heSBieSBkZWZhdWx0IHJlZmVyIHRvOjwvcD4KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPgogIDx0cj4KICAgIDx0aCBjb2xzcGFuPSIzIj5GaXhlZCBjb25maWcgdmFyaWFibGVzOjwvdGg+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9wcm9wZXJ0eWlkPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBHb29nbGUgQW5hbHl0aWNzIHByb3BlcnR5IGlkLiAgSWYgdGhpcyBjb25maWcgZW50cnkgaXMgbm90IHNldCwgbm8gZ29vZ2xlIGFuYWx5dGljcyBqYXZhc2NyaXB0IGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2dhX3N1YmRvbWFpbnM8L3RkPgogICAgPHRkPmJvb2w8L3RkPgogICAgPHRkPldldGhlciBvciBub3QgdG8gaW5jbHVkZSBzdWJkb21haW5zIGluIHRoZSBhbmFseXRpY3MgdHJhY2tpbmcuICBUaGlzIGlzIHVzZWZ1bCBpZiB0aGlzIHdlYnNpdGUgaGFzLCBvciB3aWxsIGluIHRoZSBmdXR1cmUgaGF2ZSBzdWJkb21haW5zLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9kb21haW48L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+QW4gb3B0aW9uYWwgZG9tYWluIG5hbWUgdG8gdXNlIGluIHRoZSBnb29nbGUgYW5hbHl0aWNzIGphdmFzY3JpcHQgY29kZS4gIElmIG5vbmUgaXMgc3BlY2lmaWVkLCB0aGUgc3lzdGVtIHdpbGwgdXNlIHRoZSBob3N0IHBvcnRpb24gb2YgdGhlIENNU01TIHJvb3QgdXJsLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9saW5rZG9tYWluPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPkFuIG9wdGlvbmFsIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHRvcCBsZXZlbCBkb21haW5zIHRvIGluY2x1ZGUgaW4gdGhlIHRyYWNraW5nIGZvciB0aGlzIHVzZXIuICBOb3RlOiAgVGhlIHNhbWUgcHJvcGVydHlpZCBtdXN0IGJlIHVzZWQgb24gYWxsIGRvbWFpbnMgaWYgbGlua2luZyBhY3Jvc3MgdG9wIGxldmVsIGRvbWFpbnMuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2dhX2xpbmtpZDwvdGQ+CiAgICA8dGQ+Ym9vbDwvdGQ+CiAgICA8dGQ+QSBmbGFnIGluZGljYXRpbmcgd2V0aGVyIG9yIG5vdCB0byBlbmFibGUgZW5oYW5jZWQgbGluayBhdHRyaWJ1dGlvbiBpbiBnb29nbGUgYW5hbHl0aWNzLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9kaXNwbGF5ZmVhdHVyZXM8L3RkPgogICAgPHRkPmJvb2w8L3RkPgogICAgPHRkPkEgZmxhZyBpbmRpY2F0aW5nIHdldGhlciBvciBub3QgdG8gZW5hYmxlIHRoZSBkaXNwbGF5IGZlYXR1cmVzIHBsdWdpbi48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRoIGNvbHNwYW49IjMiPkdlbmVyaWMgY29uZmlnIHZhcmlhYmxlczoKICAgICAgPHA+R2VuZXJpYyBjb25maWcgdmFyaWFibGVzIGFyZSB0aG9zZSB1c2VkIGJ5IGRlZmF1bHQgZm9yIHN0YW5kYXJkIHRhZ3MgbGlrZSB0aXRsZSwgZGVzY3JpcHRpb24sIGltYWdlLCBhbmQgY2Fub25pY2FsLiAgVXNpbmcgdGhlIHN0YW5kYXJkIGZpZWxkIHRlbXBsYXRlcywgdGhlc2UgYXJlIHVzdWFsbHkgdXNlZCBpbiB0aGUgZXZlbnQgd2hlcmUgbnVtZXJvdXMgbWV0YSB0YWdzIG1heSBoYXZlIHRoZSBzYW1lIHZhbHVlLjwvcD4KICAgICAgPHA+VGhlc2UgY2FuIHN0aWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIHtjZ2htX3NldH0gdGFnIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBtZXRhIHRhZy48L3A+CiAgICA8L3RoPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnRpdGxlPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBwYWdlIHRpdGxlLiBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHVzZWQgZm9yIHRoZSB0aXRsZSB0YWcsIHRoZSBtZXRhIHRpdGxlIHRhZywgdGhlIG9nOnRpdGxlIHRhZywgYW5kIHRoZSB0d2l0dGVyOnRpdGxlIHRhZy4vdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2Fub25pY2FsPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBjYW5vbmljYWwgdXJsIGZvciB0aGUgcGFnZWUuIFRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgdXNlZCBmb3IgdGhlIHJlbD1jYW5vbmljYWwgdGFnLCB0aGUgdHdpdHRlcjp1cmkgdGFnLCBhbmQgdGhlIG9nOnVybCB0YWcuL3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmRlc2NyaXB0aW9uPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBwYWdlIGRlc2NyaXB0aW9uLiAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSB1c2VkIGZvciB0aGUgbWV0YSBkZXNjcmlwdGlvbiB0YWcsIGFuZCB0d2l0dGVyOmRlc2NyaXB0aW9uIHRhZywgYW5kIHRoZSBvZzpkZXNjcmlwdGlvbiB0YWcuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5pbWFnZTwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgY29tcGxldGUgVVJMIHRvIHRoZSBzaW5nbGUgaW1hZ2UgdG8gdXNlIGZvciB0aGlzIHBhZ2UuICBzcGVjaWZpY2FsbHkgaXQgaXMgdXNlZCBmb3IgdGhlIG9nOmltYWdlIGFuZCB0aGUgaW1hZ2Vfc3JjIG1ldGEgdGFncy48L3RkPgogIDwvdHI+CgogIDx0cj4KICAgIDx0aCBjb2xzcGFuPSIzIj5GbGV4aWJsZSBjb25maWcgdmFyaWFibGVzOjwvdGg+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9oaWRkZW48L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+QSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZCBuYW1lcyB0byBleHBsaWNpdGx5IG5vdCBkaXNwbGF5LjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9ncm91cHM8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+QSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cCBuYW1lcyB0byBkaXNwbGF5LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXM6ICZxdW90O2RhdGVzLG1pc2MsZ29vZ2xlLGdlbyx0d2l0dGVyLG9nLGZiLGFwcGxlLCFvbGQmcXVvdDs8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fYWRkcmVzczwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgYnVzaW5lc3Mgc3RyZWV0IGFkZHJlc3M8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fY2l0eTwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgYnVzaW5lc3MgY2l0eTwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9kZXNjcmlwdGlvbjwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgcGFnZSBkZXNjcmlwdGlvbi48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fc3RhdGU8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+VGhlIGJ1c2luZXNzIHN0YXRlIG9yIHByb3ZpbmNlPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3Bvc3RhbF9jb2RlPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBidXNpbmVzcyBwb3N0YWwvemlwIGNvZGUuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3Bvc3RhbF9jb3VudHJ5PC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBidXNpbmVzcyBjb3VudHJ5PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3Bvc3RhbF9lbWFpbDwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgYnVzaW5lc3MgZW1haWwgYWRkcmVzczwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9wb3N0YWxfcGhvbmU8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+VGhlIGJ1c2luZXNzIHBob25lIG51bWJlcjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9wb3N0YWxfZmF4PC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBidXNpbmVzcyBmYXggbnVtYmVyPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2xhdDwvdGQ+CiAgICA8dGQ+ZmxvYXQ8L3RkPgogICAgPHRkPlRoZSBsYXRpdHVkZSBvZiB0aGUgYnVzaW5lc3MgbG9jYXRpb24uPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3R3aXR0ZXJjYXJkPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgdHdpdHRlcjpjYXJkIG1ldGEgdGFnLjxici8+CiAgICAgIHNlZTogPGEgaHJlZj0iaHR0cHM6Ly9kZXYudHdpdHRlci5jb20vY2FyZHMvb3ZlcnZpZXciPmh0dHBzOi8vZGV2LnR3aXR0ZXIuY29tL2NhcmRzL292ZXJ2aWV3PC9hPgogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3R3aXR0ZXJpZDwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgd2Vic2l0ZSBvd25lcidzIHR3aXR0ZXIgaWQuPGJyLz4KICAgICAgc2VlOiA8YSBocmVmPSJodHRwczovL2Rldi50d2l0dGVyLmNvbS9jYXJkcy9vdmVydmlldyI+aHR0cHM6Ly9kZXYudHdpdHRlci5jb20vY2FyZHMvb3ZlcnZpZXc8L2E+CiAgICA8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fZmJwYWdlaWQ8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+VGhlIHVuaXF1ZSBmYWNlYm9vayBwYWdlIGlkPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2ZiYWRtaW5zPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9mYmFwcGlkPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSB1bmlxdWUgZmFjZWJvb2sgYXBwIGlkPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3dlYmFwcGNhcGFibGU8L3RkPgogICAgPHRkPmJvb2w8L3RkPgogICAgPHRkPjwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPHA+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGRlZmF1bHQgcHJvcGVydGllcyBmb3IgYXR0cmlidXRlcyBvZiBtZXRhIGZpZWxkcyB1c2luZyBjb25maWcgdmFyaWFibGVzLiAgVGhlIGZvcm1hdCBpczogPGNvZGU+Y2dobV97YXR0cm5hbWV9X3tmaWVsZG5hbWV9PXN0cmluZzwvY29kZT4uPC9wPgo8cD5pLmU6IDxjb2RlPmNvbmZpZ1snY2dobV9ocmVmX2FwcGxpZS10b3VjaC1pY29uJ10gPSAne3Jvb3RfdXJsfS9mYXZpY29uX2Ntcy5pY28nPC9jb2RlPjwvcHJlPgoKPGgzPlNhbXBsZSBVc2FnZSBmcm9tIGEgRGV0YWlsIFRlbXBsYXRlPC9oMz4KPHA+VHlwaWNhbGx5IHlvdSB3aWxsIHdhbnQgdG8gYWRqdXN0IHNvbWUgbWV0YSB0YWdzIGZyb20gd2l0aGluIHRoZSBkZXRhaWwgdGVtcGxhdGUgb2YgYSBtb2R1bGUsIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgZm9yIHRoZSBwYWdlIGFsb25lLiAgSGVyZSB5b3Ugd2lsbCBzZWUgc29tZSBzYW1wbGUgY29kZSBmcm9tIGEgQ0dCbG9nIGRldGFpbCB0ZW1wbGF0ZTo8L3A+CjxwcmU+PGNvZGU+e2NnaG1fY29uZmlnX3NldCBrZXk9J3RpdGxlJyB2YWw9InskZW50cnktPnRpdGxlfSAtIHtzaXRlbmFtZX0ifQp7Y2dobV9jb25maWdfc2V0IGtleT0nY2Fub25pY2FsJyB2YWw9JGVudHJ5LT5jYW5vbmljYWx8ZGVmYXVsdDonJ30Ke2NnaG1fY29uZmlnX3NldCBrZXk9J2ltYWdlJyB2YWw9InskZW50cnktPmZpbGVfbG9jYXRpb259L3skZW50cnktPmZpZWxkcy5pbWFnZS0+dmFsdWV9In0Ke2NnaG1fY29uZmlnX3NldCBrZXk9J2Rlc2NyaXB0aW9uJyB2YWw9InskZW50cnktPnN1bW1hcnl8c3RyaXBfdGFnc30ifTwvY29kZT48L3ByZT4KPHA+T24gbGluZSAxIHdlIG92ZXJyaWRlIHRoZSB0aXRsZSAoZm9yIHRoZSB0aXRsZV90YWcsIHRoZSBtZXRhIHRpdGxlLCB0aGUgbWV0YSBvZzp0aXRsZSwgYW5kIHRoZSBtZXRhIHR3ZWV0bWVtZTp0aXRsZSB0YWdzKS48YnIvPgpPbiB0aGUgc2Vjb25kIGxpbmUgd2Ugb3ZlcnJpZGUgdGhlIGNhbm9uaWNhbCBlbnRyeS4uLiBpZiBpdCBpcyBzZXQsIGlmIGl0IGlzIG5vdCBzZXQsIHRoZW4gdGhlIHN0YW5kYXJkIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLjxici8+ClRoZSB0aGlyZCBsaW5lIHNldHMgdGhlIGltYWdlIFVSTCB0byBiZSB1c2VkIGZvciB0aGUgb2c6aW1hZ2UgbWV0YSB0YWcgYW5kIGFueSBvdGhlciBtZXRhIHRhZyB0aGF0IHJlYWRzIHRoZSA8Y29kZT57JGNvbmZpZy5pbWFnZX08L2NvZGU+IHZhcmlhYmxlIGluIGl0cyB0ZW1wbGF0ZS4KVGhlIGZpbmFsIGxpbmUgb3ZlcnJpZGVzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdXNlIGluIHRoZSBkZXNjcmlwdGlvbiwgb2c6ZGVzY3JpcHRpb24gYW5kIG90aGVyIG1ldGEgdGFncy48L3A+CjxwPk5vdGU6IFdlIGNvdWxkIGV4cGxpY2l0bHkgc2V0IHRoZSB2YWx1ZSBmb3IgYW55IG9uZSB0YWcgd2Ugd2FudCB1c2luZyB0aGUge2NnaG1fc2V0fSBzbWFydHkgcGx1Z2luLiAgaS5lOiA8Y29kZT57Y2dobV9zZXQga2V5PSdvZzp0aXRsZScgdmFsdWU9Ik15IEZhbmN5IEJsb2cgQXJ0aWNsZSJ9PC9jb2RlPi48L3A+Cgo8aDQ+V2hhdCBhYm91dCBrZXl3b3JkczwvaDQ+CjxwPnRoZXJlIGFyZSBudW1lcm91cyByZXNvdXJjZXMgb24gdGhlIHdlYiB0aGF0IGluZGljYXRlIHRoYXQgdGhlIGtleXdvcmRzIG1ldGF0YWcgbm8gbG9uZ2VyIGhhcyBhbnkgcG9zaXRpdmllIGluZmx1ZW5jZSBvbiBzZWFyY2ggZW5naW5lIHJhbmtpbmcgb3IgcGVyZm9ybWFuY2UuICBJbiBmYWN0LCBldmVuIGhhdmluZyB0aGUga2V5d29yZHMgbWV0YSB0YWcgcHJlc2VudCBpbiB5b3VyIEhUTUwgb3V0cHV0IG1heSBoYXZlIG5lZ2F0aXZlIGVmZmVjdHMgb24geW91ciBzZWFyY2ggZW5naW5lIHJhbmtpbmcuICBUaGVyZWZvcmUsIHRoaXMgbW9kdWxlIGJ5IGRlZmF1bHQgZG9lcyBub3QgZG8gYW55IGtleXdvcmQgZGV0ZWN0aW9uLCBvciBvdXRwdXQgYSB2YWx1ZSBmb3IgdGhpcyBtZXRhIGZpZWxkLjwvcD4KPHA+VGhvdWdoIHRoZSBtb2R1bGUgd2lsbCB1bmRlcnN0YW5kIHRoZSBrZXl3b3JkcyBmaWVsZCB0eXBlIGluIHRoZSBjb25maWcgZW50cmllcywgYW5kIGluIHRoZSB7Y2dobV9zZXR9IHRhZywgIHdlIGhpZ2hseSByZWNvbW1lbmQgdGhhdCB5b3UgZG8gbm90IHVuZGVydGFrZSB0aGUgZWZmb3J0IHRvIGluY2x1ZGUga2V5d29yZHMgaW4geW91ciBIVE1MIG91dHB1dC48L3A+Cgo8aDM+QWRkaW5nIEtub3duIEZpZWxkczwvaDM+CjxwPkl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSBtb3JlIG1ldGEgZmllbGRzIHRoYXQgdGhpcyBtb2R1bGUga25vd3MgYWJvdXQgYnkgY3JlYXRpbmcgYW5vdGhlciBmaWVsZHMuaW5pIGZpbGU6PC9wPgo8b2w+CiAgIDxsaT5DcmVhdGUgYSBuZXcgZGlyZWN0b3J5IHVuZGVyIHlvdXIgQ01TTVMgcm9vdCBlbnRpdGxlZDogIG1vZHVsZV9jdXN0b20vQ0dIZWFkTWFzdGVyL2NvbmZpZzwvbGk+CiAgIDxsaT5DcmVhdGUgYSBuZXcgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSBjYWxsZWQgZmllbGRzLmluaSBhbmQgb3BlbiBpdCBpbiBhIHRleHQgZWRpdG9yLjwvbGk+CiAgIDxsaT5DcmVhdGUgdGhlIG5ldyBmaWVsZHMgaW4gaW5pIGZpbGUgZm9ybWF0IGFuZCBzYXZlIHRoZSBmaWxlLjwvbGk+Cjwvb2w+Cgo8bGk+RmlsZSBmb3JtYXQ8L2xpPgo8dWw+CiAgPGxpPlRoZSBzZWN0aW9ucyBhcmUgPGVtPihieSBkZWZhdWx0KTwvZW0+IHRoZSBmaWVsZCBuYW1lcy48L2xpPgogIDxsaT5BdmFpbGFibGUga2V5cyBhbmQgdmFsdWVzIHdpdGhpbiBlYWNoIHNlY3Rpb246CiAgICA8dWw+CiAgICAgIDxsaT5ncm91cCAtIHJlcXVpcmVkIC0gIERlZmluZSB0aGUgZ3JvdXAgbmFtZSBmb3IgdGhlIGZpZWxkLjwvbGk+CiAgICAgIDxsaT5ncm91cHMgLSBvcHRpb25hbCAtIERlZmluZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3VwIG5hbWVzIGZvciB0aGUgZmllbGQuICBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBncm91cCBvciBncm91cHMuPC9saT4KICAgICAgPGxpPnRhZyAtIG9wdGlvbmFsIC0gRGVmaW5lIHRoZSB0YWcgbmFtZS4gIERlZmF1bHQgaXMgbWV0YTwvbGk+CiAgICAgIDxsaT5rZXlhdHRyIC0gb3B0aW9uYWwgLSBTcGVjaWZ5IHRoZSBwcmltYXJ5IGtleSBmb3IgdGhpcyBmaWVsZCAodGhlIGF0dHJpYnV0ZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgZmllbGQgbmFtZSkuICBEZWZhdWx0IGlzICZxdW90O25hbWUmcXVvdDs8L2xpPgogICAgICA8bGk+a2V5dmFsIC0gb3B0aW9uYWwgLSBTcGVjaWZ5IHRoZSB2YWx1ZSBmb3IgdGhlIHByaW1hcnkga2V5IGZvciB0aGlzIGZpZWxkLCA8ZW0+KGkuZS46IG92ZXJyaWRlIHRoZSBmaWVsZCBuYW1lKTwvZW0+IHVzZWZ1bCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgc2VjdGlvbiBuYW1lLjwvbGk+CiAgICAgIDxsaT5hdHRyMS4uTiAtIG9wdGlvbmFsIC0gU3BlY2lmeSB0aGUgYXR0cmlidXRlIHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZSBmb3IgdGhpcyBmaWVsZC4gRGVmYXVsdCBpcyAmcXVvdDtjb250ZW50JnF1b3Q7LiAgSXQgaXMgcG9zc2libGUgdGhhdCBhIHRhZyBoYXZlIG11bHRpcGxlIHZhbHVlIGF0dHJpYnV0ZXMuPC9saT4KICAgICAgPGxpPmRmbHQxLi5OIC0gb3B0aW9uYWwgLSBTcGVjaWZ5IHRoZSBkZWZhdWx0IHZhbHVlIChvciB0aGUgc21hcnR5IHRlbXBsYXRlIHRvIGdlbmVyYXRlIHRoZSBkZWZhdWx0IHZhbHVlKSBmb3IgdGhpcyBmaWVsZC48L2xpPgogICAgICA8bGk+bm9hdHRycyAtIG9wdGlvbmFsIC0gSW5kaWNhdGUgdGhhdCB0aGVyZSBhcmUgbm8gYXR0cmlidXRlcyBmb3IgdGhpcyB0YWcsIGFuZCB0aGF0IHRoZSB2YWx1ZSB3aWxsIGJlIGVuY2xvc2VkIHdpdGhpbiB0aGUgdGFnIGNvbnRlbnRzLiAgVGhpcyBpcyB1c2VkIGZvciB0YWdzIGxpa2UgJmx0O3RpdGxlJmd0Oy48L2xpPgogICAgICA8bGk+ZGZsdCAtIG9wdGlvbmFsIC0gVXNlZCBvbmx5IHdoZW4gdGhlIG5vYXR0cnMgZmxhZyBpcyBzZXQsIHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgKG9yIHRoZSBzbWFydHkgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgYSB2YWx1ZSkgZm9yIHRoZSBpbnRlcmlvciBvZiB0aGUgdGFnLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CjwvdWw+Cgo8aDM+U21hcnR5IGluIGRlZmF1bHQgdmFsdWVzPC9oMz4KPHA+U21hcnR5IGlzIHVzZWQgdG8gY2FsY3VsYXRlIGRlZmF1bHQgdmFsdWVzIGZvciBtZXRhIGZpZWxkcyB0aGF0IGhhdmUgbm90IGhhZCBhIHZhbHVlIGV4cGxpY2l0bHkgc2V0LiAgV2hlbiB0aGlzIGhhcHBlbnMgeW91IG1heSB1c2UgYWxsIGtub3duIENNU01TIGFuZCBzbWFydHkgcGx1Z2lucy4gIEFsc28gdGhlIGN1cnJlbnQgY29udGVudCBvYmplY3QgaXMgcHJvdmlkZWQgdG8gc21hcnR5IGFzIDxjb2RlPiRjb250ZW50X29iajwvY29kZT4gICBUaGUgY29uZmlnIHZhcmlhYmxlcyA8ZW0+KG9ubHkgdGhlIHZhcmlhYmxlcyBiZWdpbm5pbmcgd2l0aCBjZ2htXyk8L2VtPiBhcmUgcHJvdmlkZWQgdW5kZXIgdGhlIDxjb2RlPiRjb25maWc8L2NvZGU+IHNtYXJ0eSB2YXJpYWJsZS48L3A+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoZSBtb2R1bGUgYXV0aG9yIGlzIGluIG5vIHdheSBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUgaW4gYW55IGZhc2hpb24uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+QSBidWcgdHJhY2tpbmcgYW5kIGZlYXR1cmUgcmVxdWVzdCBzeXN0ZW0gaGFzIGJlZW4gY3JlYXRlZCBmb3IgdGhpcyBtb2R1bGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jZ2hlYWRtYXN0ZXIiPmhlcmU8L2E+LiAgUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJpdmlkZSBhbGwgcmVsYXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS4gIEhvd2V2ZXIsIHBsZWFzZSB1c2UgdGhpcyBhcyBhIGxhc3QgcmVzb3J0LCBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgZm9sbG93ZWQgYWxsIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBmb3JnZSwgaW4gdGhlIGZvcnVtcywgZXRjLjwvbGk+CjwvdWw+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4Kc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgo8aDM+RGVwZW5kZW5jaWVzPC9oMz48dWw+PGxpPkNHRXh0ZW5zaW9ucyA9Jmd0OyAxLjQ5LjM8L2xpPjxsaT5DR1NpbXBsZVNtYXJ0eSA9Jmd0OyAxLjg8L2xpPjwvdWw+PGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0ZXIgaXMgdXNlZCB0byBzcGVjaWZ5IHdoYXQgbGFuZ3VhZ2UgdG8gdXNlIGZvciBkaXNwbGF5IG9uIHRoZSBmcm9udGVuZC4gTm90IGFsbCBtb2R1bGVzIHN1cHBvcnQgb3IgbmVlZCB0aGlzLjwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC45LjE8YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CjxsaT5WZXJzaW9uIDEuMC4wLiBNYXJjaCAyMDA3LiAgSW5pdGlhbCBSZWxlYXNlLjwvbGk+CjxsaT5WZXJzaW9uIDEuMC4xLiBBcHJpbCAyMDA3LiAgRml4ZXMgdG8gQ3JlYXRlSW1hZ2VMaW5rPC9saT4KPGxpPlZlcnNpb24gMS4wLjIuIEFwcmlsIDIwMDcuICBDcmVhdGVJbWFnZUxpbmsgd2lsbCBub3cgd29yayBvbiB0aGUgZnJvbnRlbmQuPC9saT4KPGxpPlZlcnNpb24gMS4wLjMuIFNlcHRlbWJlciAyMDA3LiAgQWRkcyBhcHBseSBidXR0b25zIHRvIG5ldyB0ZW1wbGF0ZXMuPC9saT4KPGxpPlZlcnNpb24gMS4xLiAgIFNlcHRlbWJlciAyMDA3LiAgQWRkcyBkZWZhdWx0IGZyb250ZW5kIGVycm9yIGhhbmRsaW5nIHBsdWdpbi48L2xpPgo8bGk+VmVyc2lvbiAxLjIuICAgTm92ZW1iZXIgIDIwMDcsICBBZGRzIG1vcmUgY29udmVuaWVuY2UgZnVuY3Rpb25zPC9saT4KPGxpPlZlcnNpb24gMS4zLiAgIE5vdmVtYmVyICAyMDA3LiAgQWRkcyBldmVuIG1vcmUgY29udmVuaWVuY2UgZnVuY3Rpb25zPC9saT4KPGxpPlZlcnNpb24gMS40LiAgIERlY2VtYmVyICAyMDA3LiAgQWRkcyBDcmVhdGVJbWFnZURyb3Bkb3duIG1ldGhvZCwgbWV0aG9kcyBmb3Igc3RhdGUgYW5kIGNvdW50cnkgZHJvcGRvd25zIGFuZCBhIGJ1bmNoIG9mIG90aGVyIHRoaW5ncy48L2xpPgo8bGk+VmVyc2lvbiAxLjUuICAgSmFudWFyeSAgIDIwMDguICBGaXhlcyB0byBodG1sX2VudGl0aWVzX2RlY29kZSBpbiB1dGY4PC9saT4KPGxpPlZlcnNpb24gMS42LiAgIEZlYnJ1YXJ5ICAyMDA4LCAgQWRkcyB0aGUgQ0dGaWxlVXBsb2FkSGFuZGxlciBjbGFzczwvbGk+CjxsaT5WZXJzaW9uIDEuNi4xLiAgIEZlYnJ1YXJ5ICAyMDA4LCAgTWlub3IgZml4IHRvIHJlY3Vyc2l2ZV9jaGFuZ2VfZGlyZWN0b3J5PC9saT4KPGxpPlZlcnNpb24gMS44LiBGZWJydWFyeSAyMDA4CiAgPHVsPgogICAgPGxpPkFkZCBhIGJ1bmNoIG1vcmUgdXRpbGl0eSBhbmQgY29udmVuaWVuY2UgbWV0aG9kczwvbGk+CiAgICA8bGk+TW92ZSBjb3VudHJpZXMgYW5kIHN0YXRlcyBpbnRvIGEgdGFibGUgc28gdGhhdCB0aGV5IGNhbiBiZSB1c2VkIHdpdGggam9pbnMgZXRjLjwvbGk+CiAgICA8bGk+QWRkIHRoZSBhYmlsaXR5IHRvIHByaW9yaXRpemUgY2VydGFpbiBjb3VudHJpZXMgYnkgbmFtZTwvbGk+CiAgICA8bGk+QWRkcyB0aGUgR2V0U2luZ2xlVGVtcGxhdGVGb3JtIG1ldGhvZCB0byBtYWtlIGl0IGNvbnZlbmllbnQgdG8gZWRpdCBhbmQgcmVzdG9yZSB0byBkZWZhdWx0IGEgc2luZ2xlIHRlbXBsYXRlLjwvbGk+CiAgICA8bGk+Rml4ZXMgaXNzdWVzIHdpdGggdGhlIGNhbmNlbCBidXR0b24gd2hlbiBlZGl0aW5nIHRlbXBsYXRlcy48L2xpPgogICAgPGxpPlVwZGF0ZSB0aGUgbGljZW5zZS48L2xpPgogICAgPGxpPlVwZGF0ZXMgdG8gdGhlIGZpbGUgdXBsb2FkIGNhcGFiaWxpdGllczwvbGk+CiAgICA8bGk+VGhlIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGV4cG9ydGVkIHRvIHNtYXJ0eTwvbGk+CiAgICA8bGk+QWRkIHRoZSBnZXRfYWN0aW9uX2lkIGFuZCBzZXRfYWN0aW9uX2lkIHZpcnR1YWwgbWV0aG9kcyB0aGF0IHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IGFueSBtb2R1bGUgZGVyaXZlZCBmcm9tIENHRXh0ZW5zaW9ucy48L2xpPgogIDwvdWw+CiAgPC9saT4KPGxpPlZlcnNpb24gMS44LiBNYXkgMjAwOAogIDx1bD4KICAgIDxsaT5NaW5vciBjaGFuZ2UgYW5kIGFkZGl0aW9uIHRvIFJlZGlyZWN0VG9UYWI8L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTAuIFNlcHRlbWJlciAyMDA4CiAgPHVsPgogICAgPGxpPkFkZGVkIFdhdGVybWFya2luZyBmdW5jdGlvbnMuICBPdGhlciBtb2R1bGVzIGNhbiBub3cgdXNlIENHRXh0ZW5zaW9ucwogICAgICAgIHRvIGFkZCB3YXRlcm1hcmtzIHRvIGltYWdlcy48L2xpPgogICAgPGxpPlJlLW9yZ2FuaXplZCB0aGUgZnVuY3Rpb25zLCBtYWRlIHRoZSBjb3JlIG1vZHVsZSBhIGJpdCBzbWFsbGVyICh0aGVyZQogICAgICAgIGlzIHN0aWxsIG1vcmUgdG8gZG8pLCBhbmQgdXRpbGl6ZSBzb21lIGxhenktbG9hZGluZyBzdHVmZi48L2xpPgogICAgPGxpPkFkZGVkIGEgQ3JlYXRlSW5wdXRDb2xvckRyb3Bkb3duIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiAgVGhpcyB0aGluZyBpcyBmdW5reSwgdXNlcyBqYXZhc2NyaXB0IHRvIGRvIG5lYXQgY29sb3IgY2hhbmdlcy4gIFRoYW5rcyBfU2pHXzwvbGk+CiAgICA8bGk+TW9yZSBidWcgZml4ZXMsIGFuZCBjb252ZW5pZW5jZSB0aGluZ2llcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTAuMS4gU2VwdGVtYmVyIDIwMDgKICA8dWw+CiAgICA8bGk+TWlub3IgQnVnIEZpeGVzLjwvbGk+CiAgICA8bGk+VXBncmFkZSB0ZW1wbGF0ZSBmb3JtcyB0byBhbGxvdyB0aGVtIHRvIHdvcmsgb24gYW4gYWN0aW9uIG90aGVyIHRoYW4gZGVmYXVsdGFkbWluPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjEwLjIuIFNlcHRlbWJlciAyMDA4CiAgPHVsPgogICAgPGxpPk1pbm9yIEJ1ZyBGaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTAuMy4gT2N0b2JlciAyMDA4CiAgPHVsPgogICAgPGxpPlN1cHBvcnQgZm9yIHN5bnRheCBoaWxpZ2h0ZXIgd2hlbiBlZGl0aW5nIHRlbXBsYXRlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTIgRGVjZW1iZXIgMjAwOAogIDx1bD4KICAgIDxsaT5BZGQgbnVtZXJvdXMgbW9yZSBtZXRob2RzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xMyBEZWNlbWJlciAyMDA4CiAgPHVsPgogICAgPGxpPkFkZCB0aGUgU29ydGFibGUgTGlzdCBBcmVhIGZ1bmN0aW9ubGl0eTwvbGk+CiAgICA8bGk+QWRkIGFub3RoZXIgc21hcnR5IHRhZyBmb3Igc3RhdGUgb3B0aW9ucy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTQgRGVjZW1iZXIgMjAwOAogIDx1bD4KICAgIDxsaT5BZGRlZCB1c19kYXRlX2Zvcm1hdCBtb2RpZmllci48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTQuMSBEZWNlbWJlciAyMDA4CiAgPHVsPgogICAgPGxpPkNoYW5nZWQgdXNfZGF0ZV9mb3JtYXQgbW9kaWZpZXIgdG8gcmZjX2RhdGUgbW9kaWZpZXI8L2xpPgogICAgPGxpPkZpeGVkIHByb2JsZW0gd2l0aCBuZXN0ZWQgZm9ybXMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE1IEphbnVhcnkgMjAwOQogIDx1bD4KICAgIDxsaT5BZGRlZCB0aGUgR2V0Q3VycmVudFVSTCgpIG1ldGhvZC48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTUuMSAgRmVicnVhcnkgMjAwOQogIDx1bD4KICAgIDxsaT5GaXhlZCB0aGUgcGlvcml0eSBjb3VudHJpZXMgc29ydGluZyB0aGluZy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTUuMiAgTWFyY2ggMjAwOQogIDx1bD4KICAgIDxsaT5GaXhlcyAoaG9wZWZ1bGx5KSB0aGUgJnF1b3Q7cmVxdWVzdCB1cmkgdG9vIGxhcmdlJnF1b3Q7IGlzc3VlIG9uIGFwcGx5LjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xNS4zICBNYXJjaCAyMDA5CiAgPHVsPgogICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgc2VsZWN0IG11bHRpcGxlIGZpbGVzIGluIHRoZSBmaWxlIGRyb3Bkb3duLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xNiAgSnVseSAyMDA5CiAgPHVsPgogICAgPGxpPk51bWVyb3VzIGJ1Z2ZpeGVzIGFuZCBuZXcgZmVhdHVyZXMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE2LjEgIEp1bHkgMjAwOQogIDx1bD4KICAgIDxsaT5GaXggcHJvYmxlbSB3aXRoIGFwcGx5IGJ1dHRvbiBpbiB0ZW1wbGF0ZSBlZGl0aW5nLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xNi4xICBKdWx5IDIwMDkKICA8dWw+CiAgICAgPGxpPkFkZCBodHRwX3Bvc3QgbWV0aG9kLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xNyAtIEF1Z3VzdCAyMDA5CiAgPHVsPgogICAgIDxsaT5Db252ZXJ0IGFsb3Qgb2Ygc3R1ZmYgaW50byBQSFA1IGNsYXNzZXMuPC9saT4KICAgICA8bGk+QWRkcyBlbmNyeXB0ZWQgYXNzb2NpYXRpdmUgZGF0YSB0aGluZy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTcuMSAtIEF1Z3VzdCAyMDA5CiAgPHVsPgogICAgIDxsaT5GaXhlZCBpc3N1ZSB3aXRoIGNvbnN0cnVjdG9yIGJlaW5nIGluY29tcGF0aWJsZSB3aXRoIG90aGVyIG1vZHVsZXMgdGhhdCBkaWRuJ3QgaGF2ZSB0aGUgX19jb25zdHJ1Y3QgbWV0aG9kPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE3LjIgLSBBdWd1c3QgMjAwOQogIDx1bD4KICAgICA8bGk+QWRkcyB0aGUgY2dlX2RlYnVnIGNsYXNzLjwvbGk+CiAgICAgPGxpPkltcGxlbWVudHMgYXV0b2xvYWQgc3R1ZmYsIGdldHMgcmlkIG9mIHRoZSByZXF1aXJlX29uY2UgbGluZXMgYWxsIG92ZXIgdGhlIHBsYWNlLCBidXQgcmVxdWlyZXMgUEhQIDUuMis8L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTcuMyAtIFNlcHRlbWJlciAyMDA5CiAgPHVsPgogICAgIDxsaT5BZGRzIGNnZV9hcnJheTo6aGFzaHNvcnQgYW5kIGNnZV9hcnJheTo6aGFzaHJzb3J0PC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE3LjQgLSBTZXB0ZW1iZXIgMjAwOQogIDx1bD4KICAgICA8bGk+QWRkcyBSZWRpcmVjdFRvSFRUUFMgd2hpY2ggdXNlcyBhbiBvcHRpb25hbCAkY29uZmdbJ3NzbF91cmwnXSB2YXJpYWJsZS48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTcuNSAtIE9jdG9iZXIgMjAwOQogIDx1bD4KICAgICA8bGk+QWRkcyBleHBpcnkgcGFyYW1ldGVycyB0byB0aGUgZGF0YSBzdG9yZSBjbGFzc2VzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xNy42IC0gTm92ZW1iZXIgMjAwOQogIDx1bD4KICAgICA8bGk+SW1wcm92ZWQgY291bnRyeSBoYW5kbGluZy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTcuOSAtIEZlYnJ1YXJ5IDIwMTAKICA8dWw+CiAgICAgPGxpPkZpeGVzIHRoZSBSZWRpcmVjdFRvSFRUUFMgZnVuY3Rpb248L2xpPgogICAgIDxsaT5JbXByb3ZlbWVudHMgdG8gdGhlIHVybCBoYW5kbGluZyBzdHVmZi48L2xpPgogICAgIDxsaT5BZGRzIGEgY29tbW9uIGFkZHJlc3MgY2xhc3MuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE4IC0gTWFyY2ggMjAxMAogIDx1bD4KICAgICA8bGk+QWRkcyBhYmlsaXR5IHRvIGNyZWF0ZSBwcmV2aWV3IGltYWdlcyBvbiB1cGxvYWRzIGluIHRoZSB1cGxvYWQgaGFuZGxlcnMuPC9saT4KICAgICA8bGk+QWRkcyBjb21wYW55IGZpZWxkIHRvIHRoZSBhZGRyZXNzIGNsYXNzLjwvbGk+CiAgICAgPGxpPk5vdyBsb29rIGZvciBpbnRlcmZhY2VzIGluIHRoZSBhdXRvbG9hZGVyLjwvbGk+CiAgICAgPGxpPk1vcmUgb3B0aW1pemF0aW9uLCBtb3ZlIGZ1bmN0aW9ucyBvdXQgb2YgbW9kdWxlIGNsYXNzIGludG9saWIgZGlyZWN0b3J5IGNsYXNzZXMsIGV0Yy48L2xpPgogICAgIDxsaT5NYW55IGZpeGVzIHRvIGNsYXNzZXMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE4LjEgLSBNYXJjaCAyMDEwCiAgPHVsPgogICAgIDxsaT5NaW5vciBmaXggdG8gY2hhcnRpbmcgY2xhc3Nlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTguMiAtIEFwcmlsIDIwMTAKICA8dWw+CiAgICAgPGxpPkJ1ZyBmaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTguMyAtIEFwcmlsIDIwMTAKICA8dWw+CiAgICAgPGxpPkJ1ZyBmaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTguNCAtIEFwcmlsIDIwMTAKICA8dWw+CiAgICAgPGxpPkZpeGVzIHRvIGNnZV91cmw6OnJlZGlyZWN0X2h0dHBzPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE4LjYgLSBBcHJpbCAyMDEwCiAgPHVsPgogICAgIDxsaT5BZGp1c3RtZW50cyBhbmQgZml4ZXMgdG8gdGhlIGh0dHAgY2xpZW50IGNsYXNzLjwvbGk+CiAgICAgPGxpPkZpeGVzIHRvIHRoZSBjYWNoZWRfcmVtb3RlX2ZpbGUgY2xhc3MuPC9saT4KICAgICA8bGk+TWlub3IgdHdlYWtzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xOC42IC0gQXByaWwgMjAxMAogIDx1bD4KICAgICA8bGk+QWRqdXN0bWVudHMgYW5kIGZpeGVzIHRvIHRoZSBodHRwIGNsaWVudCBjbGFzcy48L2xpPgogICAgIDxsaT5GaXhlcyB0byB0aGUgY2FjaGVkX3JlbW90ZV9maWxlIGNsYXNzLjwvbGk+CiAgICAgPGxpPk1pbm9yIHR3ZWFrcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTkKICA8dWw+CiAgICAgPGxpPk1hbnkgZW5oYW5jZW1lbnRzLjwvbGk+CiAgPC91bD4KPGxpPgo8bGk+VmVyc2lvbiAxLjE5LjEKICA8dWw+CiAgICA8bGk+QWRkcyB0aGUgY2hlY2tfdXBsb2FkIG1ldGhvZCB0byB0aGUgdXBsb2FkIGNsYXNzLi4uPC9saT4KICAgIDxsaT5CZWdpbiB0aGUgZG9jdW1lbnRhdGlvbiBwcm9jZXNzICh3aGF0IGEgcGFpbiB0aGF0IGlzIGdvbm5hIGJlKS48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTkuMgogIDx1bD4KICAgIDxsaT5GaXhlcyBidWdzIGluIHRoZSBBc3NvY0RhdGEgY2xhc3MuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE5LjMKICA8dWw+CiAgICA8bGk+Rm9yY2Ugc3RhdGVzIGFuZCBjb3VudHJpZXMgbGlzdHMgdG8gcmVmcmVzaC48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjAKICA8dWw+CiAgICA8bGk+Rml4ZXMgMS45IGNvbXBhdGliaWxpdHkgc3R1ZmYuPC9saT4KICAgIDxsaT5CdWcgZml4ZXM8L2xpPgogICAgPGxpPkFkZHMgZnJpZW5kbHkgY2xhc3M8L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjEuMQogIDx1bD4KICAgIDxsaT5GaXhlcyAxLjkgY29tcGF0aWJpbGl0eSBzdHVmZi48L2xpPgogICAgPGxpPkJ1ZyBmaXhlczwvbGk+CiAgICA8bGk+QWFkZHMganNtaW4gcGx1Z2luLjwvbGk+CiAgICA8bGk+TW9yZSBmdW5jdGlvbnMgaW4gY2dlX3N0cmluZzwvbGk+CiAgICA8bGk+QSBjb3VwbGUgbW9yZSBzbWFydHkgcGx1Z2lucy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjEuMgogIDx1bD4KICAgIDxsaT5BZGRzIGEgbmV3IHJlY3Vyc2l2ZSBnbG9iIG1ldGhvZCB0byBjZ2VfZGlyLjwvbGk+CiAgICA8bGk+Rml4ZXMgdG8gdGhlIGNnZV9hcnJheTo6ZXhwbG9kZV93aXRoX2tleSgpIG1ldGhvZC48L2xpPgogICAgPGxpPlVwZGF0ZXMgSGVscC48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjEuMwogIDx1bD4KICAgIDxsaT5GaXhlcyBhbiBlcnJvciBpbiB0ZW1wbGF0ZSBoYW5kbGluZyBzdHVmZi48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjEuNQogIDx1bD4KICA8bGk+QWRkcyB0aGUgY21zX2NhY2hlX2hhbmRsZXIsIGNtc19jYWNoZV9kcml2ZXIsIGFuZCBjbXNfZmlsZWNhY2hlX2RyaXZlciBjbGFzc2VzIChtYXliZSBsYXRlciB0aGV5IGNhbiBiZSBtb3ZlZCB0byB0aGUgY29yZSk8L2xpPgogIDxsaT5Ob3cgdXNlIGZpbGVfZ2V0X2NvbnRlbnRzKCkgd2hlbiByZXF1ZXN0aW5nIGEgVVJMIHdoZW4gQ1VSTCBpcyBub3QgaW5zdGFsbGVkIHVzaW5nIGNtc19odHRwOjpnZXQoKTwvbGk+CiAgPGxpPkZpeGVzIHByb2JsZW1zIHdpdGggZ2V0X3RlbXBsYXRlX2xpc3QoKTwvbGk+CiAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjEuNQogIDx1bD4KICA8bGk+QWRkIGFub3RoZXIgdGVzdCBpbiB0aGUgY29uc3RydWN0b3IgZm9yIHRoZSBjYWNoZSBzdHVmZiwgY3V6IE1vZHVsZXVNYW5hZ2VyIGRvZXMgd2llcmQgc3R1ZmYuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjIxLjYKICA8dWw+CiAgPGxpPk1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjEuNwogIDx1bD4KICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yMwogIDx1bD4KICA8bGk+QWRkcyB0aGUgQnJvd3NlciBjb2RlPC9saT4KICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yNAogIDx1bD4KICA8bGk+RXh0ZW5kcyB0aGUgYnJvd3NlciBjb2RlIGZvciBiZXR0ZXIgcm9ib3QgZGV0ZWN0aW9uLjwvbGk+CiAgPGxpPkFkZHMge2NnZV9pc2JvdH0gYW5kIHtjZ2VfaXNfc21hcnRwaG9uZX0gc21hcnR5IHBsdWdpbnMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjI0LjEKICA8dWw+CiAgPGxpPkFkZHMgdGhlIHJlcG9ydCBiYXNlIGNsYXNzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yNC4yCiAgPHVsPgogIDxsaT5IYW5kbGUgdGhlIHN0dXBpZCBpbnB1dCB0eXBlPSdpbWFnZScgY3Jvc3MgYnJvd3NlciBwcm9ibGVtLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yNQogIDx1bD4KICA8bGk+QWRkcyBzb21lIG1vcmUgY2xhc3NlcyBmb3IgZGVsYWluZyB3aXRoIHBvcDMgc2VydmVycy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjUuMQogIDx1bD4KICA8bGk+QnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yNS4yCiAgPHVsPgogIDxsaT5CdWcgZml4ZXMuPC9saT4KICA8bGk+QWRkcyBhIG5ldyBmdW5jdGlvbiB0byB0aGUgY2dlX3VybCBjbGFzcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjUuMwogIDx1bD4KICA8bGk+QWRkcyBhdWRpdGluZyBvZiB0ZW1wbGF0ZSBlZGl0cyBldGMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjI1LjQKICA8dWw+CiAgPGxpPkZpeGVzIHRvIHRoZSBodHRwIGNsYXNzIHRoYXQgSSBmb3VuZCBpbiB3b3JraW5nIHdpdGggMS4xMDwvbGk+CiAgPGxpPk5vdyBjYWxsIGNsYXNzX2V4aXN0cygnQ0dFeHRlbnNpb25zJyxmYWxzZSkgLi4uIHRvIGhhbmRsZSB0aGUgMS45IHByb2JsZW1zIGJ1dCBhbHNvIG1ha2Ugd2F5IGZvciAxLjEwPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjI2CiAgPHVsPgogICA8bGk+QWRkcyB0aGUgbmV3IENHRG9tRG9jdW1lbnQgY2xhc3MgdGhhdCBoYXMgc3VwcG9ydCBmb3IgaW5uZXJodG1sLi4uPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjI3CiAgPHVsPgogICA8bGk+QWRkcyB0aGUgbmV3IHtjZ2Vfd3lzaXd5Z30gc21hcnR5IHBsdWdpbi48L2xpPgogICA8bGk+VXNlIGNtc19odHRwX3JlcXVlc3QgZm9yIGh0dHAgcmVxdWVzdHMsIGlmIGF2YWlsYWJsZS48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMjgKICA8dWw+CiAgIDxsaT5Tb21lIG1vcmUgdXNlZnVsIHNtYXJ0eSBwbHVnaW5zLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yOC4xCiAgPHVsPgogICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yOC4yCiAgPHVsPgogICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4yOS54CiA8dWw+CiAgIDxsaT5JbXByb3ZlbWVudHMgdG8gZGVmYXVsdCB0ZW1wbGF0ZSBoYW5kbGluZy48L2xpPgogICA8bGk+TWlub3IgZW5oYW5jZW1lbnRzIHRvIGVycm9yIGhhbmRsaW5nLjwvbGk+CiAgIDxsaT5DR0NyZWF0ZUZvcm1TdGFydCBieSBkZWZhdWx0IHVzZXMgbXVsdGlwYXJ0L2Zvcm0tZGF0YSB0byBhbGxvdyB1cGxvYWRzLjwvbGk+CiAgIDxsaT5NaW5vciBjb21wYXRpYmlsaXR5IGZvciBDTVNNUyAxLjExPC9saT4KICAgPGxpPk1vdmVkIGhlbHAgb3V0IG9mIHRoZSBsYW5nIGZpbGUuPC9saT4KIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMzAKIDx1bD4KICA8bGk+QWRkcyB0aGUge2NnZV9tb2R1bGVfaGludH0gdGFnLjwvbGk+CiA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjMwLjEKIDx1bD4KICA8bGk+TWlub3IgaW1wcm92ZW1lbnRzIHRvIHRoZSBhZGQvZWRpdCB0ZW1wbGF0ZSBzdHVmZi48L2xpPgogPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4zMC4yCiA8dWw+CiAgPGxpPkFkZGVkIHRoZSBjZ2VfdXNlcm9wczo6Z2V0X2dyb3VwbGlzdCgpIG1ldGhvZC48L2xpPgogIDxsaT5BZGRlZCB0aGUgbm90aWZpY2F0aW9uX21lc3NhZ2UgY2xhc3MuPC9saT4KIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMzEKIDx1bD4KICA8bGk+SW1wcm92ZWQgY2dlX2NhY2hlZF9yZW1vdGVfZmlsZSBjbGFzcy48L2xpPgogIDxsaT5GaXhlcyB0byB0aGUgc21hcnRjYWNoZSBjbGFzcy48L2xpPgogIDxsaT5NYW55IG1pbm9yIGltcHJvdmVtZW50cy4uLiBuZXcgZnVuY3Rpb25zIGluIHRoZSBjZ2VfdXRpbHMgY2xhc3MuPC9saT4KIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMzIKIDx1bD4KICA8bGk+TnVtZXJvdXMgaW1wcm92ZW1lbnRzIHRvIHNtYXJ0eSBmdW5jdGlvbnMuPC9saT4KICA8bGk+Tm93IHJlcXVyaWVzIFBIUCA1LjMgb3IgZ3JlYXRlci48L2xpPm4KIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMzUKICA8dWw+CiAgICA8bGk+QWRkcyB0aGUge2NnZV9jb250ZW50X3R5cGV9IHNtYXJ0eSBwbHVnaW4uLi4gYW5kIGEgbWlub3IgZml4IHRvIHRoZSB1cGxvYWQgc3R1ZmYuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjM2CiAgPHVsPgogICAgPGxpPkFkZHMgdGhlIHtjZ2VfY2FjaGVkX3VybH0gcGx1Z2luLjwvbGk+CiAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4zNwogIDx1bD4KICAgIDxsaT5BZGRzIG5ldyBwcmVmZXJlbmNlcyBmb3IgbWVtb3J5IGxpbWl0IGRldGVjdGlvbiB1c2VkIGJ5IHNvbWUgbW9kdWxlcy48L2xpPgogICAgPGxpPkltcHJvdmVtZW50cyB0byB0aGUgbm90aWZpY2F0aW9uIG1lc3NhZ2UgY2xhc3MuPC9saT4KICAgIDxsaT5OZXcgZ2VuZXJpYyBvYmplY3Qgc29ydGluZyBtZXRob2QuPC9saT4KICAgIDxsaT5BZGRzIG1vcmUgYm90cyB0byB0aGUgYm90IGNoZWNrZXI8L2xpPgogICAgPGxpPkJ1ZyBmaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxpaT5WZXJzaW9uIDEuMzgueAogIDx1bD4KICAgIDxsaT5JbXByb3ZlbWVudHMgdG8gZmlsZSB1cGxvYWQgaGFuZGxlcnMuPC9saT4KICAgIDxsaT5BZGRzIHRoZSBtZXNzYWdpbmcgY2xhc3Nlcy48L2xpPgogICAgPGxpPkJ1ZyBmaXhlcy48L2xpPgogICAgPGxpPkNvZGUgY2xlYW51cDwvbGk+CiAgICA8bGk+QWRkcyB0aGUgY2dlX3V0aWxzOjpnZXRfcGFyYW0oKSBtZXRob2Q8L2xpPgogICAgPGxpPkFkZHMgdGhlIENHR2V0UHJlZmVyZW5jZSBtZXRob2QgdG8gdGhlIG1vZHVsZSBhcGkuPC9saT4KICAgIDxsaT5BZGRzIHRoZSBnZXRfdWlkX2VtYWlscyBjb252ZW5pZW5jZSBtZXRob2QuPC9saT4KICAgIDxsaT5JbXByb3ZlbWVudHMgdG8ge2NnZV90ZXh0YXJlYX08L2xpPgogICAgPGxpPkltcHJvdmVtZW50cyB0byB7Y2dfaW1hZ2V9PC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjM5CiAgPHVsPgoJPGxpPkFkZHMgdGhlIHN5bnRheCBwYXJhbSB0byB0aGUge2NnZV90ZXh0YXJlYX0gcGx1Z2luLjwvbGk+Cgk8bGk+QmVnaW4gYWRkaW5nIHRoZSB7Y2dqc19yZXF1aXJlfSB7Y2dqc19hZGR9IGFuZCB7Y2djc3NfYWRkfSBwbHVnaW5zLjwvbGk+Cgk8bGk+TWlub3IgZml4IHRvIHVwbG9hZCBoYW5kbGluZy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuNDAKICA8dWw+Cgk8bGk+TW9yZSB3b3JrIG9uIHRoZSB7Y2dqc19yZXF1aXJlfSBhbmQgcmVsYXRlZCBwbHVnaW5zIGFuZCBmdW5jdGlvbmFsaXR5LjwvbGk+Cgk8bGk+QWRkcyBjZ2VfdXRpbHM6OmNsZWFuX2lucHV0X2h0bWwoKSBtZXRob2QsIGFuZCB0aGUgaHRtTGF3ZWQgdXRpbGl0eSB0aGF0IGl0IHVzZXMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjQxCiAgPHVsPgoJPGxpPkFkZHMgY2dlX3VybDo6ZmlsZW5hbWVfdG9fdXJsKCkgbWV0aG9kLjwvbGk+Cgk8bGk+QWRkcyBDR0V4dGVuc2lvbnM6OmZpbmRfZmlsZSgpIG1ldGhvZC48L2xpPgoJPGxpPkltcHJvdmVtZW50cyB0byB0aGUgYXV0b2xvYWRlci48L2xpPgoJPGxpPkFkZHMgYmFzZSBjbGFzc2VzIGZvciByZXBvcnRpbmcsIHF1ZXJ5LCByZXN1bHRzZXQsIGFuZCBwYWdpbmF0aW9uIGluIHRoZWlyIG93biBuYW1lc3BhY2VzLjwvbGk+Cgk8bGk+TW9yZSB3b3JrIG9uIHRoZSBjZ19jbXNtcyBqcXVlcnkgcGx1Z2luIHRoYXQgcHJvdmlkZXMgc29tZSBiYXNpYyBmdW5jdGlvbmFsaXR5IHRvIGFsbCBvZiBteSBtb2R1bGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS40MgogIDx1bD4KCTxsaT5SZXBsYWNlcyBsb3N0IGZ1bmN0aW9uYWxpdHkgZm9yIG1hbmFnaW5nIHN0YXRlIGFuZCBjb3VudHJ5IGxpc3RzLjwvbGk+Cgk8bGk+RXh0ZW5zaXZlIHJlcGFpcnMgYW5kIGVuaGFuY2VtZW50cyB0byByZXBvcnRpbmcgZnVuY3Rpb25hbGl0eS48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuNDMueAogIDx1bD4KICAgIDxsaT5BZGRzIG1ldGhvZHMgZm9yIHRlbXBsYXRlIG1hbmlwdWxhdGlvbi48L2xpPgoJPGxpPkFkZHMgZnVuY3Rpb25hbGl0eSBmb3IgY29udmVydGluZyBhIERhdGFSZWYgKERhdGEgUmVmZXJlbmNlKSB0byBhIExpbmtEZWZpbml0aW9uLiAgVXNlZnVsIGluIEhpdENvdW50ZXIsIENHRmVlZGJhY2sgKHNvb24pLCBhbmQgQ0dJbnRlcm5hbE1haWwgKHNvb24pIGNsYXNzZXMuCgkgICAgICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEYXRhUmVmL0xpbmtEZWZpbml0aW9uIHN1cHBvcnQgbmVlZHMgdG8gYmUgYWRkZWQgdG8gZWFjaCBpbnZpZGlkdWFsIHNvdXJjZSBtb2R1bGUuICBBdCB0aGUgdGltZSBvZiB3cml0aW5nIHRoaXMgaXQgaGFzIGJlZW4gYWRkZWQgdG8gQ29tcGFueURpcmVjdG9yeSBhbmQgQ0dCbG9nLCBzb29uIHRvIGJlIHJlbGVhc2VkLjwvcD4KCTwvbGk+Cgk8bGk+UmV3cml0ZSB0aGUgY2dlX3VybDo6Y3VycmVudF91cmwoKSBtZXRob2QuPC9saT4KCTxsaT5Eb2N1bWVudGF0aW9uIHVwZGF0ZXMuPC9saT4KCTxsST5FbmhhbmNlbWVudHMgKG1pbm9yKSB0byB0aGUgcmVzdWx0c2V0IGFuZCBxdWVyeSBjbGFzc2VzLjwvbGk+Cgk8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS40NC54CiAgPHVsPgoJPGxpPkRvY3VtZW50YXRpb24gb2YgbWFueSBBUEkgZnVuY3Rpb25zIGFuZCBjbGFzc2VzIChub3QgY29tcGxldGUpLjwvbGk+Cgk8bGk+Tm93IHJlcXVpcmUgUEhQIDUuNC4zIG1pbmltdW0uPC9saT4KICAgICAgICA8bGk+UmV3cml0ZSBjZ2VfaW1hZ2U6OmltYWdlX3RyYW5zZm9ybSBmb3IgQ01TTVMgMi4wIGNvbXBhdGliaWxpdHkgKG5vdyBkb2VzIG5vdCBkZXBlbmQgb24gSW1hZ2VNYW5hZ2VyKTwvbGk+CiAgICAgICAgPGxpPk5hbWVzcGFjZSBmaXhlcy48L2xpPgogICAgICAgIDxsaT5BZGRzIHRoZSBHZXRBY3Rpb25Nb2R1bGUoKSBtZXRob2QgdG8gdGhlIENHRXh0ZW5zaW9ucyBjbGFzcy48L2xpPgogICAgICAgIDxsaT5JbXByb3ZlbWVudHMgYW5kIGZpeGVzIHRvIHRoZSByZXBvcnRpbmcgYW5kIHF1ZXJ5IGNsYXNzZXMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjQ1CiAgPHVsPgoJPGxpPkFkZHMgdGhlIGNvbnRlbnRfbGlzdF9idWlsZGVyIGNsYXNzLjwvbGk+Cgk8bGk+TWlub3IgcmVwb3J0aW5nIGltcHJvdmVtZW50cy48L2xpPgoJPGxpPkFkZHMgaGVscCBpbXByb3ZlbWVudHMgKG1vZHVsZXMgbm8gbG9uZ2VyIG5lZWQgdGhlIEdldEhlbHAoKSBtZXRob2QpLgoJPGxpPm1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogICAgICAgIDxsaT5SZXdvcmsgdGhlIHdhdGVybWFya2luZyBjbGFzc2VzLiBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlLXVzZWQgbW9yZS48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuNDYueAogIDx1bD4KCTxsaT5JbXByb3ZlbWVudHMgdG8gdGhlIHJlcG9ydGluZyBmdW5jdGlvbmFsaXR5LjwvbGk+Cgk8bGk+QWRkcyBuZXcgbG9va3VwIHRhYmxlIGNsYXNzIGZvciB1c2UgaW4gZnV0dXJlIG1vZHVsZXMuPC9saT4KCTxsaT5GaXhlcyB0byBodG1sIHBhcnNpbmcgc28gdGhhdCBzZWxmIGNsb3NpbmcgdGFncyBhcmUgbm93IG91dHB1dCBhcyBzdWNoLgoJICAgPHA+VGhpcyBtYXkgYnJlYWsgZm9yIHhtbCBzcGVjaWZpYyBlbnZpcm9ubWVudHMgb3IgZm9yIEhUTUwgc3RyaWN0LCBidXQgZml4ZXMgdGhlIHByb2JsZW0gb2YgPGltZy8+IHRhZ3MgYmVpbmcgb3V0cHV0IGFzIDxpbWc+PC9pbWc+IGV0Yy48L3A+Cgk8bGk+TWlub3IgcmVwb3J0aW5nIGltcHJvdmVtZW50cy48L2xpPgoJPGxpPmltcHJvdmVkIGF1dG9sb2FkZXIuPC9saT4KCTxsaT5pbXByb3ZlZCBzZXNzaW9uX2dldCgpLCBzZXNzaW9uX3B1dCgpLCBhbmQgc2Vzc2lvbl9jbGVhcigpIG1ldGhvZHMuPC9saT4KCTxsaT5pbXByb3ZlbWVudHMgdG8gdGhlIGVuY3J5cHRlZF9zdG9yZSgpIG9iamVjdC48L2xpPgoJPGxpPm1pbm9yIGZpeGVzIHRvIHRoZSBqc2xvYWRlciBzdHVmZi48L2xpPgoJPGxpPm51bWVyb3VzIG1pbm9yIGJ1ZyBmaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuNDcueAogIDx1bD4KCTxsaT5BZGRzIGZ1bmN0aW9uYWxpdHkgZm9yIHZlcmlmeWluZyBhbmQgY2hlY2tpbmcgbW9kdWxlIGludGVncml0eS4KCTxwPk1vZHVsZSB2ZXJpZmljYXRpb24gc3R1ZmYgaXMgZGlzcGxheWVkIGZvciBhZG1pbiByZXF1ZXN0cywgZm9yIHBlb3BsZSB3aXRoIHRoZSAiTW9kaWZ5IE1vZHVsZXMiIHBlcm1pc3Npb24uICBUaGUgZGF0YQoJaXMgY2FjaGVkIGFuZCBvbmx5IGV2YWx1YXRlZCBvbmNlIHBlciBkYXkgcGVyIG1vZHVsZS48L3A+Cgk8cD5BIG5ldyBhY3Rpb24gaXMgYXZhaWxhYmxlIHRvIGdlbmVyYXRlIGEgcmVwb3J0IG9mIG1vZHVsZSBzaWduYXR1cmVzLjwvcD4KCTwvbGk+Cgk8bGk+QWRkcyB0aGUgXGNnZV91dGlsczo6ZG9uZV90b2RheSgpIGNvbnZlbmllbmNlIG1ldGhvZC48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuNDgueAogIDx1bD4KCTxsaT5BZGRzIHNpbXBsZSBodG1sIG1pbmlmeSBhbmQgYmV1dGlmeSAoYm9keSBvbmx5KSBiYXNlZCBvbiBjb25maWcgZW50cmllcy48L2xpPgogICAgICAgIDxsaT5DbGVhbiB1cCB0aGUgaHR0cCBjbGFzcywgYW5kIG1ha2UgaXQgbW9yZSBtZW1vcnkgZWZmaWNpZW50IHdoZW4gdXNpbmcgY3VybC48L2xpPgoJPGxpPk1pbm9yIG9wdGltaXphdGlvbnM8L2xpPgoJPGxpPkJ1ZyBmaXhlcy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuNDguMwogIDx1bD4KCTxsaT5CdWcgZml4ZXMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjQ4LjQKICA8dWw+Cgk8bGk+SW1wcm92ZW1lbnQgdG8ganNsb2FkZXIgc3R1ZmYuPC9saT4KCTxsaT5NaW5vciB0d2Vha3MgdG8gY2dlX2h0bWxwcmV0dHkuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjQ5CiAgPHVsPgoJPGxpPk1pbm9yIGltcHJvdmVtZW50cyB0byByZXBvcnRpbmcgc3R1ZmYuPC9saT4KCTxsaT5BZGRzIGdldF9tb2R1bGVfdGVtcGxhdGUgYW5kIGdldF9tb2R1bGVfZmlsZXMgbWV0aG9kcy48L2xpPgoJPGxpPnJlbmFtZXMgZmluZF9maWxlIG1ldGhvZCB0byBmaW5kX21vZHVsZV9maWxlLjwvbGk+Cgk8bGk+ZmljZXMgdG8gZ2V0VGVtcGxhdGVSZXNvdXJjZSBhbmQgY3JlYXRlU21hcnR5VGVtcGxhdGUgdG8gYWNjZXB0IGFueSByZXNvdXJjZSBzdHJpbmcuPC9saT4KICAgICAgICA8bGk+SW1wcm92ZW1lbnRzIHRvIHRoZSBqc2xvYWRlciBzdHVmZiAoMS40OS4zKSB0byBhbGxvdyBjb250cm9sbGluZyBtaW5pZmljYXRpb24gb2YgY3NzIGFuZCBqcyBmaWxlcywgYW5kIGNhY2hpbmcgcmVtb3RlIGNzcyBhbmQganM8L2xpPgogIDwvdWw+CjwvbGk+CjwvdWw+CjxiciAvPg==]]></about>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.49.3</requiredversion>
	</requires>
	<requires>
	  <requiredname>CGSimpleSmarty</requiredname>
	  <requiredversion>1.8</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/CGHeadMaster.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKZmluYWwgY2xhc3MgQ0dIZWFkTWFzdGVyIGV4dGVuZHMgQ0dFeHRlbnNpb25zCnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZmllbGRzOwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZGF0YTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2NvbmZpZzsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2hpZGU7CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBJbml0aWFsaXplRnJvbnRlbmQoKQogICAgewogICAgICAgICRzbWFydHkgPSBcU21hcnR5X0NNUzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgaWYoICEkc21hcnR5ICkgcmV0dXJuOwoKICAgICAgICAvLyByZWdpc3RlciBvdXIgZnVuY3Rpb25zLgogICAgICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2htX2NvbmZpZ19zZXQnLCdcQ0dIZWFkTWFzdGVyXHNtYXJ0eV9wbHVnaW5zOjpjZ2htX2NvbmZpZ19zZXQnKTsKICAgICAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dobV9zZXQnLCdcQ0dIZWFkTWFzdGVyXHNtYXJ0eV9wbHVnaW5zOjpjZ2htX3NldCcpOwogICAgICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2htX3Vuc2V0JywnXENHSGVhZE1hc3RlclxzbWFydHlfcGx1Z2luczo6Y2dobV91bnNldCcpOwogICAgICAgICRzbWFydHktPnJlZ2lzdGVyX2Z1bmN0aW9uKCdjZ2htX2hpZGUnLCdcQ0dIZWFkTWFzdGVyXHNtYXJ0eV9wbHVnaW5zOjpjZ2htX2hpZGUnKTsKICAgICAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbignY2dobV9yZW5kZXInLCdcQ0dIZWFkTWFzdGVyXHNtYXJ0eV9wbHVnaW5zOjpjZ2htX3JlbmRlcicpOwoKICAgICAgICAvLyBsb2FkIHN0YW5kYXJkIGZpZWxkcwogICAgICAgICRmaWxlcyA9ICR0aGlzLT5nZXRfbW9kdWxlX2ZpbGVzKCdjb25maWcnLCdmaWVsZHMuaW5pJyk7CiAgICAgICAgaWYoICFjb3VudCgkZmlsZXMpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgZmluZCBmaWVsZCBkZWZpbml0aW9uIGZpbGUocykgbmFtZWQgZmllbGRzLmluaScpOwogICAgICAgICRmaWxlcyA9IGFycmF5X3JldmVyc2UoJGZpbGVzKTsKICAgICAgICAkdGhpcy0+X2ZpZWxkcyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGZpbGVzIGFzICRmaWxlICkgewogICAgICAgICAgICAkdG1wID0gcGFyc2VfaW5pX2ZpbGUoJGZpbGUsVFJVRSk7CiAgICAgICAgICAgIGlmKCBjb3VudCgkdG1wKSApICR0aGlzLT5fZmllbGRzID0gYXJyYXlfbWVyZ2UoJHRoaXMtPl9maWVsZHMsJHRtcCk7CiAgICAgICAgfQoKICAgICAgICAvLyBsb2FkIHRoZSBjZ3NtX2NvbmZpZyB2YXJzCiAgICAgICAgJHN5c2NvbmZpZyA9IFxjbXNfY29uZmlnOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICAkZm4gPSAkc3lzY29uZmlnWydyb290X3BhdGgnXS4nL2NvbmZpZy5waHAnOwogICAgICAgIGluY2x1ZGUoJGZuKTsKICAgICAgICB1bnNldCgkc3lzY29uZmlnKTsKICAgICAgICAkdGhpcy0+X2NvbmZpZyA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGNvbmZpZyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgIGlmKCAhc3RhcnRzd2l0aCgka2V5LCdjZ2htXycpICkgY29udGludWU7CiAgICAgICAgICAgICR0aGlzLT5fY29uZmlnWyRrZXldID0gJHZhbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gJzEuMC45LjEnOyB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsgcmV0dXJuIFRSVUU7IH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gRkFMU0U7IH0KCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIEFsbG93QXV0b0luc3RhbGwoKSB7IHJldHVybiBGQUxTRTsgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gQWxsb3dBdXRvVXBncmFkZSgpIHsgcmV0dXJuIEZBTFNFOyB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgnQ0dFeHRlbnNpb25zJz0+JzEuNDkuMycsJ0NHU2ltcGxlU21hcnR5Jz0+JzEuOCcpOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyX3RvX2FycmF5KCRzdHIpCiAgICB7CiAgICAgICAgJHN0ciA9IChzdHJpbmcpICRzdHI7CiAgICAgICAgaWYoICRzdHIgKSB7CiAgICAgICAgICAgICR0bXAgPSBleHBsb2RlKCcsJywkc3RyKTsKICAgICAgICAgICAgJHRtcDIgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CiAgICAgICAgICAgICAgICAkb25lID0gdHJpbSgkb25lKTsKICAgICAgICAgICAgICAgIGlmKCAhaW5fYXJyYXkoJG9uZSwkdG1wMikgKSAkdG1wMltdID0gJG9uZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggY291bnQoJHRtcDIpICkgcmV0dXJuICR0bXAyOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNldCBhIGNvbmZpZyB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NvbmZpZygka2V5LCR2YWwpCiAgICB7CiAgICAgICAgJGtleSA9IChzdHJpbmcpICRrZXk7CiAgICAgICAgJHZhbCA9IChzdHJpbmcpICR2YWw7CiAgICAgICAgaWYoIHN0cmxlbigkdmFsKSA9PSAwICYmIGlzc2V0KCR0aGlzLT5fY29uZmlnWyRrZXldKSApIHsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPl9jb25maWdbJGtleV0pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPl9jb25maWdbJGtleV0gPSAkdmFsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEhpZGUgYSBmaWVsZCBzbyB0aGF0IGl0IHdpbGwgbm90IGJlIHJlbmRlcmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZsZG5hbWUgVGhlIGZpZWxkIG5hbWUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoaWRlX2ZpZWxkKCRmbGRuYW1lKQogICAgewogICAgICAgICRmbGRuYW1lcyA9ICR0aGlzLT5zdHJfdG9fYXJyYXkoJGZsZG5hbWUpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJGZsZG5hbWVzKSB8fCAhY291bnQoJGZsZG5hbWVzKSApIHJldHVybjsKICAgICAgICBpZiggIWlzX2FycmF5KCR0aGlzLT5faGlkZGVuKSApICR0aGlzLT5faGlkZGVuID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkZmxkbmFtZXMgYXMgJG5hbWUgKSB7CiAgICAgICAgICAgIGlmKCAhaW5fYXJyYXkoJG5hbWUsJHRoaXMtPl9oaWRkZW4pICkgJHRoaXMtPl9oaWRkZW5bXSA9ICRuYW1lOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFVuc2V0IGEgZmllbGQgc28gdGhhdCBpdCB3aWxsIG5vdCBiZSByZW5kZXJlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmbGRuYW1lIFRoZSBmaWVsZCBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXRfZmllbGQoJGZsZG5hbWUpCiAgICB7CiAgICAgICAgJGZsZG5hbWUgPSAoc3RyaW5nKSAkZmxkbmFtZTsKICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9kYXRhWyRmbGRuYW1lXSkgKSB1bnNldCgkdGhpcy0+X2RhdGFbJGZsZG5hbWVdKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGNnaG0gY29uZmlnIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGtleSBUaGUgY29uZmlnIGZpZWxkLgogICAgICogQHBhcmFtIHN0cmluZyAkZGZsdCBUaGUgZGVmYXVsdCB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9jb25maWcoJGtleSwkZGZsdCA9IG51bGwpCiAgICB7CiAgICAgICAgJGtleSA9IChzdHJpbmcpICRrZXk7CiAgICAgICAgaWYoIGlzc2V0KCR0aGlzLT5fY29uZmlnWyRrZXldKSApIHJldHVybiAkdGhpcy0+X2NvbmZpZ1ska2V5XTsKICAgICAgICByZXR1cm4gJGRmbHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxpc3Qgb2YgZGlzcGxheWVkIGZpZWxkIGdyb3Vwcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZ3JvdXBzKCkKICAgIHsKICAgICAgICAkdG1wID0gJHRoaXMtPmdldF9jb25maWcoJ2NnaG1fZ3JvdXBzJywnZGF0ZXMsbWlzYyxnb29nbGUsZ2VvLHR3aXR0ZXIsb2csZmIsYXBwbGUsIW9sZCcpOwogICAgICAgICR0bXAgPSBzdHJ0b2xvd2VyKCR0bXApOwogICAgICAgIHJldHVybiAkdGhpcy0+c3RyX3RvX2FycmF5KCR0bXApOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBmaWVsZCBpbiB0aGUgc3BlY2lmaWVkIGdyb3VwKHMpLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmdbXSBUaGUgZ3JvdXAgbmFtZXMuCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdIFRoZSBmaWVsZHMgaW4gdGhlIHNwZWNpZmllZCBncm91cHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmllbGRzKCRncm91cHMpCiAgICB7CiAgICAgICAgLy8gZmlyc3QsIHNwbGl0IG91dCB0aGUgZ3JvdXBzIGludG8gc29tZXRoaW5nIHRoYXQgaXMgaW5jbHVkZWQsIGFuZCBleHBsaWNpdGx5IGV4Y2x1ZGVkCiAgICAgICAgJGluY2wgPSAkZXhjbCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGdyb3VwcyBhcyAkZ3JwICkgewogICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkZ3JwLCchJykgKSB7CiAgICAgICAgICAgICAgICBpZiggIWluX2FycmF5KCRncnAsJGV4Y2wpICkgJGV4Y2xbXSA9IHN1YnN0cigkZ3JwLDEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYoICFpbl9hcnJheSgkZ3JwLCRpbmNsKSApICRpbmNsW10gPSAkZ3JwOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICRpbmNsID0gYXJyYXlfZGlmZigkaW5jbCwkZXhjbCk7CgogICAgICAgICRvdXQgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goICR0aGlzLT5fZmllbGRzIGFzICRrZXkgPT4gJGRhdGEgKSB7CiAgICAgICAgICAgIGlmKCBpc3NldCgkZGF0YVsnZ3JvdXAnXSkgKSB7CiAgICAgICAgICAgICAgICAvLyB3b290LCBvbmx5IG9uZSBncm91cAogICAgICAgICAgICAgICAgaWYoIGluX2FycmF5KHN0cnRvbG93ZXIoJGRhdGFbJ2dyb3VwJ10pLCRpbmNsKSAmJiAhaW5fYXJyYXkoJGRhdGFbJ2dyb3VwJ10sJGV4Y2wpICkgJG91dFtdID0gJGtleTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKCBpc3NldCgkZGF0YVsnZ3JvdXBzJ10pICkgewogICAgICAgICAgICAgICAgJHRtcCA9ICR0aGlzLT5zdHJfdG9fYXJyYXkoJGRhdGFbJ2dyb3VwcyddKTsKICAgICAgICAgICAgICAgICRpbl9leGNsID0gJGluX2luY2wgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKICAgICAgICAgICAgICAgICAgICAkb25lID0gc3RydG9sb3dlcigkb25lKTsKICAgICAgICAgICAgICAgICAgICBpZiggaW5fYXJyYXkoJG9uZSwkaW5jbCkgKSAkaW5faW5jbCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgaWYoIGluX2FycmF5KCRvbmUsJGV4Y2wpICkgJGluX2V4Y2wgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYoICRpbl9pbmNsICYmICEkaW5fZXhjbCApICRvdXRbXSA9ICRrZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYoIGNvdW50KCRvdXQpICkgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZpZWxkIChkb2VzIG5vdCBpbmNsdWRlIGF0dHJpYnV0ZSB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgZmllbGQgbmFtZS4KICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldF9yYXdfZmllbGQoJG5hbWUpCiAgICB7CiAgICAgICAgJGRmbHQgPSBhcnJheSgna2V5YXR0cic9PiduYW1lJywnYXR0cjEnPT4nY29udGVudCcpOwogICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2ZpZWxkc1snKipkZmx0KionXSkgKSB7CiAgICAgICAgICAgICR0bXAgPSAkdGhpcy0+X2ZpZWxkc1snKipkZmx0KionXTsKICAgICAgICAgICAgJGRmbHQgPSBhcnJheV9tZXJnZSgkZGZsdCwkdG1wKTsKICAgICAgICB9CgogICAgICAgIGlmKCAkbmFtZSA9PSAnKipkZmx0KionICkgcmV0dXJuICRkZmx0OwogICAgICAgIGlmKCAhaXNzZXQoJHRoaXMtPl9maWVsZHNbJG5hbWVdKSApIHJldHVybiAkZGZsdDsKICAgICAgICAkdG1wID0gJHRoaXMtPl9maWVsZHNbJG5hbWVdOwogICAgICAgICR0bXAgPSBhcnJheV9tZXJnZSgkZGZsdCwkdG1wKTsKICAgICAgICByZXR1cm4gJHRtcDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGZpZWxkIGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAqIFNvbWUgZmllbGRzIGhhdmUgbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmxkIFRoZSBmaWVsZCBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhdHRyIFRoZSBhdHRyaWJ1dGUgbmFtZSAodXN1YWxseSAiY29udGVudCIpCiAgICAgKiBAcGFyYW0gc3RyaW5nICR2YWwgVGhlIGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldF9maWVsZF9hdHRyKCRmbGRuYW1lLCRhdHRyLCR2YWwpCiAgICB7CiAgICAgICAgJGZsZG5hbWUgPSAoc3RyaW5nKSAkZmxkbmFtZTsKICAgICAgICAkYXR0ciA9IChzdHJpbmcpICRhdHRyOwogICAgICAgICR2YWwgPSAoc3RyaW5nKSAkdmFsOwogICAgICAgIGlmKCAhJGZsZG5hbWUgfHwgISRhdHRyIHx8ICghJHZhbCAmJiAkdmFsICE9PSAnMCcpICkgcmV0dXJuOwoKICAgICAgICAkZmxkZGVmID0gJHRoaXMtPmdldF9yYXdfZmllbGQoJGZsZG5hbWUpOwogICAgICAgIGZvcmVhY2goICRmbGRkZWYgYXMgJGtleSA9PiAkdG1wICkgewogICAgICAgICAgICBpZiggIXN0YXJ0c3dpdGgoJGtleSwnYXR0cicpICkgY29udGludWU7CiAgICAgICAgICAgICRhdHRybmFtZSA9ICRmbGRkZWZbJGtleV07CiAgICAgICAgICAgIGlmKCAkYXR0ciAhPSAkYXR0cm5hbWUgKSBjb250aW51ZTsKCiAgICAgICAgICAgIGlmKCAhaXNzZXQoJHRoaXMtPl9kYXRhWyRmbGRuYW1lXSkgKSAkdGhpcy0+X2RhdGFbJGZsZG5hbWVdID0gYXJyYXkoKTsKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRmbGRuYW1lXVskYXR0cl0gPSAkdmFsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhIGZpZWxkIGF0dHJpYnV0ZSB2YWx1ZS4KICAgICAqIFNvbWUgZmllbGRzIGhhdmUgbW9yZSB0aGFuIG9uZSBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZmxkIFRoZSBmaWVsZCBuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhdHRyIFRoZSBhdHRyaWJ1dGUgbmFtZQogICAgICogQHBhcmFtIHN0cmluZyAkZGZsdCBUaGUgZGVmYXVsdCB2YWx1ZSB0byByZXR1cm4KICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmllbGRfYXR0cigkZmxkLCRhdHRyID0gJ2NvbnRlbnQnLCRkZmx0ID0gbnVsbCkKICAgIHsKICAgICAgICAkZmxkID0gKHN0cmluZykgJGZsZDsKICAgICAgICAkYXR0ciA9IChzdHJpbmcpICRhdHRyOwogICAgICAgICR2YWwgPSBudWxsOwogICAgICAgIGlmKCBpc3NldCgkdGhpcy0+X2RhdGFbJGZsZF0pICkgewogICAgICAgICAgICBpZiggaXNzZXQoJHRoaXMtPl9kYXRhWyRmbGRdWyRhdHRyXSkgKSB7CiAgICAgICAgICAgICAgICAkdmFsID0gJHRoaXMtPl9kYXRhWyRmbGRdWyRhdHRyXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkcmVjID0gJHRoaXMtPmdldF9yYXdfZmllbGQoJGZsZCk7CgogICAgICAgIGlmKCAhJHZhbCApIHsKICAgICAgICAgICAgLy8gZ290dGEgZ2V0IGEgZGVmYXVsdCB2YWx1ZQogICAgICAgICAgICBpZiggISRkZmx0ICkgewogICAgICAgICAgICAgICAgLy8gZmluZCBhIGRmbHQgdGhyb3VnaCBjb25maWdzLgogICAgICAgICAgICAgICAgaWYoIGFycmF5X3NlYXJjaCgkYXR0ciwkcmVjKSA9PSAnYXR0cjEnICkgewogICAgICAgICAgICAgICAgICAgICRkZmx0ID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkdGhpcy0+X2NvbmZpZywnY2dobV8nLiRmbGQpOwogICAgICAgICAgICAgICAgICAgICRmbGQyID0gc3RyX3JlcGxhY2UoJyAnLCctJywkZmxkKTsKICAgICAgICAgICAgICAgICAgICAkZGZsdCA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHRoaXMtPl9jb25maWcsJ2NnaG1fJy4kZmxkMiwkZGZsdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZGZsdCA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHRoaXMtPl9jb25maWcsJ2NnaG1fJy4kYXR0ci4nXycuJGZsZCwkZGZsdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoICEkZGZsdCApIHsKICAgICAgICAgICAgICAgIC8vIGZpbmQgYSBkZWZhdWx0IHRocm91Z2ggdGhlIGZpZWxkIGF0dHJpYnMKICAgICAgICAgICAgICAgICR0X2tleSA9IGFycmF5X3NlYXJjaCgkYXR0ciwkcmVjKTsKICAgICAgICAgICAgICAgIGlmKCAkdF9rZXkgJiYgc3RybGVuKCR0X2tleSkgPT0gNSApIHsKICAgICAgICAgICAgICAgICAgICAkdF9rZXkgPSAnZGZsdCcuc3Vic3RyKCR0X2tleSw0KTsKICAgICAgICAgICAgICAgICAgICBpZiggaXNzZXQoJHJlY1skdF9rZXldKSApICRkZmx0ID0gJHJlY1skdF9rZXldOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKCAhJGRmbHQgKSByZXR1cm47CgogICAgICAgICAgICAvLyB0cmVhdCB0aGUgZGZsdCBhcyBhIHRlbXBsYXRlIChjdXogaXQgcHJvbGx5IGlzKQogICAgICAgICAgICAkdHBsID0gJHRoaXMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCdzdHJpbmc6Jy4kZGZsdCk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignY29udGVudF9vYmonLFxjbXNfdXRpbHM6OmdldF9jdXJyZW50X2NvbnRlbnQoKSk7CiAgICAgICAgICAgICR0cGwtPmFzc2lnbignY29uZmlnJywkdGhpcy0+X2NvbmZpZyk7CiAgICAgICAgICAgICR2YWwgPSAkdHBsLT5mZXRjaCgpOwogICAgICAgIH0KCiAgICAgICAgaWYoICR2YWwgKSB7CiAgICAgICAgICAgICR0X2F0dHIgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRyZWMsJ2lzZmlsZScpOwogICAgICAgICAgICBpZiggJHRfYXR0ciA9PSAkYXR0ciAmJiAhXGNnZV9wYXJhbTo6Z2V0X2Jvb2woJHJlYywnbm9hdHRycycpICkgewogICAgICAgICAgICAgICAgLy8gcmVzb2x2ZSBhYnNvbHV0ZSB1cmwgdG8gYWJzb2x1dGUgZmlsZQogICAgICAgICAgICAgICAgJGZuID0gJHZhbDsKICAgICAgICAgICAgICAgICRjb25maWcgPSBcY21zX2NvbmZpZzo6Z2V0X2luc3RhbmNlKCk7CiAgICAgICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgkdmFsLCdodHRwJykgKSB7CiAgICAgICAgICAgICAgICAgICAgJGZuID0gc3RyX3JlcGxhY2UoJGNvbmZpZy0+c21hcnRfcm9vdF91cmwoKSwkY29uZmlnWydyb290X3BhdGgnXSwkdmFsKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiggc3RhcnRzd2l0aCgkdmFsLCcvJykgKSB7CiAgICAgICAgICAgICAgICAgICAgJGZuID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uJHZhbDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGZuID0gJGNvbmZpZ1sncm9vdF9wYXRoJ10uIi8kdmFsIjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmKCAhaXNfZmlsZSgkZm4pICkgJHZhbCA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuICR2YWw7CiAgICB9CgogICAgLyoqCiAgICAgKiBJcyB0aGUgZmllbGQgc3BlY2lmaWVkIGhpZGRlbj8KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIHRoZSBmaWVsZCBuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzX2hpZGRlbigkbmFtZSkKICAgIHsKICAgICAgICBpZiggaXNfYXJyYXkoJHRoaXMtPl9oaWRkZW4pICYmIGluX2FycmF5KCRuYW1lLCR0aGlzLT5faGlkZGVuKSApIHJldHVybiBUUlVFOwoKICAgICAgICBzdGF0aWMgJGhpZGRlbiA9IG51bGw7CiAgICAgICAgaWYoICFpc19hcnJheSgkaGlkZGVuKSApIHsKICAgICAgICAgICAgJHRtcCA9ICR0aGlzLT5zdHJfdG9fYXJyYXkoXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkdGhpcy0+X2NvbmZpZywnY2dobV9oaWRkZW4nKSk7CiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkdG1wKSAmJiBjb3VudCgkdG1wKSApICRoaWRkZW4gPSAkdG1wOwogICAgICAgIH0KICAgICAgICBpZiggaXNfYXJyYXkoJGhpZGRlbikgJiYgaW5fYXJyYXkoJG5hbWUsJGhpZGRlbikgKSByZXR1cm4gVFJVRTsKICAgICAgICByZXR1cm4gRkFMU0U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW5kZXIgYSBtZXRhIHRhZy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBmaWVsZCBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVuZGVyX2ZpZWxkKCRuYW1lKQogICAgewogICAgICAgIGlmKCAkdGhpcy0+aXNfaGlkZGVuKCRuYW1lKSApIHJldHVybjsKICAgICAgICAkZmxkID0gJHRoaXMtPmdldF9yYXdfZmllbGQoJG5hbWUpOwoKICAgICAgICAvLyBmaW5kIG91dCBob3cgbWFueSB2YWx1ZSBhdHRyaWJ1dGVzIGFyZSBpbiB0aGUgZmllbGQKICAgICAgICBpZiggIWlzc2V0KCRmbGRbJ25vYXR0cnMnXSkgfHwgJGZsZFsnbm9hdHRycyddICE9IDEgKSB7CiAgICAgICAgICAgICRvdXQgPSAnPCcuJGZsZFsndGFnJ107CiAgICAgICAgICAgICRrZXl2YWwgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRmbGQsJ2tleXZhbCcsJG5hbWUpOwogICAgICAgICAgICAkb3V0IC49ICcgJy4kZmxkWydrZXlhdHRyJ10uJz0iJy4ka2V5dmFsLiciJzsKICAgICAgICAgICAgZm9yZWFjaCggJGZsZCBhcyAka2V5ID0+ICRyZWN2YWwgKSB7CiAgICAgICAgICAgICAgICBpZiggIXN0YXJ0c3dpdGgoICRrZXksICdhdHRyJyApICkgY29udGludWU7CiAgICAgICAgICAgICAgICAkaWR4ID0gKGludCkgc3Vic3RyKCRrZXksNCk7CiAgICAgICAgICAgICAgICBpZiggJGlkeCA8IDEgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgIC8vJGRmbHQgPSAoIGlzc2V0KCRmbGRbJ2RmbHQnLiRpZHhdKSApID8gJGZsZFsnZGZsdCcuJGlkeF0gOiBudWxsOwoKICAgICAgICAgICAgICAgICR2YWwgPSB0cmltKCR0aGlzLT5nZXRfZmllbGRfYXR0cigkbmFtZSwkcmVjdmFsKSk7CiAgICAgICAgICAgICAgICBpZiggISR2YWwgJiYgJHZhbCAhPT0gJzAnICkgcmV0dXJuOyAvLyBjb3VsZCBub3QgZmluZCBhIHZhbHVlIGZvciB0aGlzIGF0dHRpYnV0ZSBmb3IgdGhpcyBmaWVsZC4KICAgICAgICAgICAgICAgICRvdXQgLj0gJyAnLiRmbGRbJGtleV0uJz0iJy4kdmFsLiciJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkb3V0IC49ICcvPic7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkb3V0ID0gJzwnLiRmbGRbJ3RhZyddLic+JzsKICAgICAgICAgICAgJGRmbHQgPSAoIGlzc2V0KCRmbGRbJ2RmbHQnXSkgKSA/ICRmbGRbJ2RmbHQnXSA6IG51bGw7CiAgICAgICAgICAgICR2YWwgPSB0cmltKCR0aGlzLT5nZXRfZmllbGRfYXR0cigkbmFtZSxudWxsLCRkZmx0KSk7CiAgICAgICAgICAgICRvdXQgLj0gJHZhbC4nPC8nLiRmbGRbJ3RhZyddLic+JzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRvdXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZV9nYSgpCiAgICB7CiAgICAgICAgLy8gZ2VuZXJhdGUgYW5hbHl0aWNzIHN0dWZmCiAgICAgICAgJHByb3BlcnR5X2lkID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkdGhpcy0+X2NvbmZpZywnY2dobV9nYV9wcm9wZXJ0eWlkJyk7CiAgICAgICAgaWYoICEkcHJvcGVydHlfaWQgKSByZXR1cm47CiAgICAgICAgJGxpbmtkb21haW5zID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkdGhpcy0+X2NvbmZpZywnY2dobV9nYV9saW5rZG9tYWlucycpOwogICAgICAgIGlmKCAkbGlua2RvbWFpbnMgKSAkbGlua2RvbWFpbnMgPSAkdGhpcy0+c3RyX3RvX2FycmF5KCRsaW5rZG9tYWlucyk7CiAgICAgICAgJHN1YmRvbWFpbnMgPSBcY2dlX3BhcmFtOjpnZXRfYm9vbCgkdGhpcy0+X2NvbmZpZywnY2dobV9nYV9zdWJkb21haW5zJyk7CiAgICAgICAgJGRvbWFpbiA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHRoaXMtPl9jb25maWcsJ2NnaG1fZ2FfZG9tYWluJyk7CiAgICAgICAgaWYoICRzdWJkb21haW5zICYmICEkZG9tYWluICkgewogICAgICAgICAgICAkc3lzY29uZmlnID0gXGNtc19jb25maWc6OmdldF9pbnN0YW5jZSgpOwogICAgICAgICAgICAkdXJsID0gbmV3IFxjbXNfdXJsKCRzeXNjb25maWdbJ3Jvb3RfdXJsJ10pOwogICAgICAgICAgICAkZG9tYWluID0gJHVybC0+Z2V0X2hvc3QoKTsKICAgICAgICB9CgogICAgICAgICR0cGwgPSAkdGhpcy0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJ2dvb2dsZV9hbmFseXRpY3MudHBsJyk7CiAgICAgICAgJHRwbC0+YXNzaWduKCdjb250ZW50X29iaicsXGNtc191dGlsczo6Z2V0X2N1cnJlbnRfY29udGVudCgpKTsKICAgICAgICAkdHBsLT5hc3NpZ24oJ2NvbmZpZycsJHRoaXMtPl9jb25maWcpOwogICAgICAgICR0cGwtPmFzc2lnbignZG9tYWluJywkZG9tYWluKTsKICAgICAgICBpZiggY291bnQoJGxpbmtkb21haW5zKSApICR0cGwtPmFzc2lnbignbGlua2RvbWFpbnMnLCRsaW5rZG9tYWlucyk7CiAgICAgICAgcmV0dXJuICR0cGwtPmZldGNoKCk7CiAgICB9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/config/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/config/fields.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[WyoqZGZsdCoqXQp0YWc9bWV0YQprZXlhdHRyPW5hbWUKYXR0cjE9Y29udGVudAoKW2RhdGVdCmRmbHQxPSJ7JGNvbnRlbnRfb2JqLT5HZXRNb2RpZmllZERhdGUoKXxkYXRlX2Zvcm1hdDonJVktJW0tJWRUJUg6JU06JVNQJ30iCmdyb3Vwcz1kYXRlcyxvbGQKCltsYXN0dXBkYXRlXQpkZmx0MT0ieyRjb250ZW50X29iai0+R2V0TW9kaWZpZWREYXRlKCl8ZGF0ZV9mb3JtYXQ6JyVZLSVtLSVkVCVIOiVNOiVTUCd9Igpncm91cHM9ZGF0ZXMsb2xkCgpbcmV2aXNlZF0KZGZsdDE9InskY29udGVudF9vYmotPkdldE1vZGlmaWVkRGF0ZSgpfGRhdGVfZm9ybWF0OiclWS0lbS0lZFQlSDolTTolU1AnfSIKZ3JvdXBzPWRhdGVzLG9sZAoKW2Nhbm9uaWNhbF0KdGFnPWxpbmsKa2V5YXR0cj1yZWwKYXR0cjE9aHJlZgpkZmx0MT0ieyRjb25maWcuY2Fub25pY2FsfGRlZmF1bHQ6JGNvbnRlbnRfb2JqLT5HZXRVUkwoKX0iCmdyb3VwPW1pc2MKCltjb3B5cmlnaHRdCmRmbHQxPSJ7JGNvbnRlbnRfb2JqLT5HZXRNb2RpZmllZERhdGUoKXxkYXRlX2Zvcm1hdDonJVknfSIKZ3JvdXA9bWlzYwoKW3JlcGx5LXRvXQpkZmx0MT0ieyRjb25maWcuY2dobV9lbWFpbHxkZWZhdWx0OicnfSIKZ3JvdXBzPW1pc2Msb2xkCgpbdGl0bGVfdGFnXQp0YWc9dGl0bGUKZGZsdD0ieyRjb25maWcudGl0bGV8ZGVmYXVsdDpcInt0aXRsZX0gLSB7c2l0ZW5hbWV9XCJ9Igpub2F0dHJzPTEKZ3JvdXA9bWlzYwoKW3RpdGxlXQpkZmx0MT0ieyRjb25maWcudGl0bGV8ZGVmYXVsdDpcInt0aXRsZX0gLSB7c2l0ZW5hbWV9XCJ9Igpncm91cD1taXNjCgpbZGVzY3JpcHRpb25dCmRmbHQxPSJ7JHRtcD0kY29uZmlnLmRlc2NyaXB0aW9ufGRlZmF1bHQ6JGNvbmZpZy5jZ2htX2Rlc2NyaXB0aW9ufGRlZmF1bHQ6Jyd9e2lmICFlbXB0eSgkdG1wKX17JHRtcH17ZWxzZX17ZGVzY3JpcHRpb259ey9pZn0iCmdyb3VwPW1pc2MKCjsgdGhlIDxtZXRhIG5hbWU9ImtleXdvcmRzIj4gdGFnIGlzIG5vIGxvbmdlciB1c2VkIGJ5IGFueSBzZWFyY2ggZW5naW5lLCBhbmQgYnkgc29tZSBpdCBpcyB1c2VkIG9ubHkgdG8gZG93bmdyYWRlIHlvdXIgc2VhcmNoIGVuZ2luZSByYW5raW5nCjsgd2UgaGlnaGx5IHJlY29tbWVuZCB0aGF0IHlvdSBkbyBub3QgdXNlIHRoaXMgdGFnLgpba2V5d29yZHNdCmdyb3Vwcz1taXNjLG9sZAoKW3JvYm90c10Ka2V5YXR0cj1uYW1lCmF0dHIxPWNvbnRlbnQKZ3JvdXA9bWlzYwpkZmx0MT0ie2lmICRjb250ZW50X29iai0+Q2FjaGFibGUoKSAmJiAkY29udGVudF9vYmotPklzUGVybWl0dGVkKCl9CmluZGV4LGZvbGxvdwp7ZWxzZX0Kbm9pbmRleCxub2ZvbGxvdwp7L2lmfSI7CgpbeC11YS1jb21wYXRpYmxlXQprZXlhdHRyPWh0dHAtcXVpdgphdHRyMT1jb250ZW50Cmdyb3VwPW1pc2MKClthdXRob3JdCnRhZz1saW5rCmtleWF0dHI9cmVsCmF0dHIxPWhyZWYKZ3JvdXA9bWlzYwoKW21ldGFfYXV0aG9yXQprZXl2YWw9YXV0aG9yCmdyb3VwPW1pc2MKCltwdWJsaXNoZXJdCnRhZz1saW5rCmtleWF0dHI9cmVsCmF0dHIxPWNvbnRlbnQKZ3JvdXA9bWlzYwoKW21ldGFfcHVibGlzaGVyXQprZXl2YWw9cHVibGlzaGVyCmdyb3VwPW1pc2MKCltyZXZpc2l0LWFmdGVyXQpncm91cD1taXNjCgpbZXhwaXJlc10KZ3JvdXA9bWlzYwoKW2dvb2dsZV0KZ3JvdXA9Z29vZ2xlCgpbZ29vZ2xlYm90XQpncm91cD1nb29nbGUKCltnb29nbGUtc2l0ZS12ZXJpZmljYXRpb25dCmdyb3VwPWdvb2dsZQoKW2dlby5wbGFjZW5hbWVdCmRmbHQxPSJ7JGNvbmZpZy5jZ2htX2NpdHl8ZGVmYXVsdDonJ30iCmdyb3VwPWdlbwoKW2dlby5yZWdpb25dCmRmbHQxPSJ7JGNvbmZpZy5jZ2htX3N0YXRlfGRlZmF1bHQ6Jyd9Igpncm91cD1nZW8KCltnZW8ucG9zaXRpb25dCmRmbHQxPSJ7aWYgIWVtcHR5KCRjb25maWcuY2dobV9sYXQpICYmICFlbXB0eSgkY29uZmlnLmNnaG1fbG9uZyl9eyRjb25maWcuY2dobV9sYXR9LCB7JGNvbmZpZy5jZ2htX2xvbmd9ey9pZn0iCmdyb3VwPWdlbwoKW0lDQk1dCmRmbHQxPSJ7aWYgIWVtcHR5KCRjb25maWcuY2dobV9sYXQpICYmICFlbXB0eSgkY29uZmlnLmNnaG1fbG9uZyl9eyRjb25maWcuY2dobV9sYXR9LCB7JGNvbmZpZy5jZ2htX2xvbmd9ey9pZn0iCmdyb3VwPW1pc2MKClt0d2l0dGVyOmNhcmRdCmRmbHQxPSJ7JGNvbmZpZy5jZ2htX3R3aXR0ZXJjYXJkfGRlZmF1bHQ6J3N1bW1hcnknfSIKZ3JvdXA9dHdpdHRlcgoKW3R3aXR0ZXI6c2l0ZV0KZGZsdDE9InskY29uZmlnLmNnaG1fdHdpdHRlcmlkfGRlZmF1bHQ6Jyd9Igpncm91cD10d2l0dGVyCgpbdHdpdHRlcjpjcmVhdG9yXQpkZmx0MT0ieyRjb25maWcuY2dobV90d2l0dGVyaWR8ZGVmYXVsdDonJ30iCmdyb3VwPXR3aXR0ZXIKClt0d2l0dGVyOnVyaV0KZGZsdDE9IntpZiBpc3NldCgkY2Fub25pY2FsKX17JGNhbm9uaWNhbH17ZWxzZX17JGNvbmZpZy5jYW5vbmljYWx8ZGVmYXVsdDokY29udGVudF9vYmotPkdldFVSTCgpfXsvaWZ9Igpncm91cD10d2l0dGVyCgpbdHdpdHRlcjppbWFnZV0KZ3JvdXA9dHdpdHRlcgoKW3R3aXR0ZXI6ZGVzY3JpcHRpb25dCmRmbHQxPSJ7aWYgIWVtcHR5KCRjb25maWcuY2dobV9kZXNjcmlwdGlvbil9eyRjb25maWcuY2dobV9kZXNjcmlwdGlvbn17ZWxzZX17ZGVzY3JpcHRpb259ey9pZn0iCmdyb3VwPXR3aXR0ZXIKClt0d2VldG1lbWUtdGl0bGVdCmRmbHQxPSJ7JGNvbmZpZy50aXRsZXxkZWZhdWx0Olwie3RpdGxlfSAtIHtzaXRlbmFtZX1cIn0iCmdyb3VwPXR3aXR0ZXIKCltvZzp0aXRsZV0Ka2V5YXR0cj1wcm9wZXJ0eQphdHRyMT1jb250ZW50CmRmbHQxPSJ7JGNvbmZpZy50aXRsZXxkZWZhdWx0Olwie3RpdGxlfSAtIHtzaXRlbmFtZX1cIn0iCmdyb3VwPW9nCgpbb2c6dHlwZV0Ka2V5YXR0cj1wcm9wZXJ0eQpkZmx0MT0id2Vic2l0ZSIKZ3JvdXA9b2cKCltvZzp1cmxdCmtleWF0dHI9cHJvcGVydHkKZGZsdDE9IntpZiBpc3NldCgkY2Fub25pY2FsKX17JGNhbm9uaWNhbH17ZWxzZX17JGNvbmZpZy5jYW5vbmljYWx8ZGVmYXVsdDokY29udGVudF9vYmotPkdldFVSTCgpfXsvaWZ9Igpncm91cD1vZwoKW29nOmltYWdlXQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5pbWFnZXxkZWZhdWx0OiRjb25maWcuY2dobV9pbWFnZXxkZWZhdWx0OicnfSIKZ3JvdXA9b2cKaXNmaWxlPTEKCltpbWFnZV9zcmNdCmtleWF0dHI9cmVsCmF0dHIxPWhyZWYKZGZsdDE9InskY29uZmlnLmltYWdlfGRlZmF1bHQ6JGNvbmZpZy5jZ2htX2ltYWdlfGRlZmF1bHQ6Jyd9Igpncm91cD1vZwppc2ZpbGU9MQoKW29nOnNpdGVfbmFtZV0Ka2V5YXR0cj1wcm9wZXJ0eQpkZmx0MT0ie3NpdGVuYW1lfSIKZ3JvdXA9b2cKCltvZzpkZXNjcmlwdGlvbl0Ka2V5YXR0cj1wcm9wZXJ0eQpkZmx0MT0ieyR0bXA9JGNvbmZpZy5kZXNjcmlwdGlvbnxkZWZhdWx0OiRjb25maWcuY2dobV9kZXNjcmlwdGlvbnxkZWZhdWx0OicnfXtpZiAhZW1wdHkoJHRtcCl9eyR0bXB9e2Vsc2V9e2Rlc2NyaXB0aW9ufXsvaWZ9Igpncm91cD1vZwoKW29nOmxhdGl0dWRlXQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5jZ2htX2xhdHxkZWZhdWx0OicnfSIKZ3JvdXA9b2cKCltvZzpsb25naXR1ZGVdCmtleWF0dHI9cHJvcGVydHkKZGZsdDE9InskY29uZmlnLmNnaG1fbG9uZ3xkZWZhdWx0OicnfSIKZ3JvdXA9b2cKCltvZzpzdHJlZXRfYWRkcmVzc10Ka2V5YXR0cj1wcm9wZXJ0eQpkZmx0MT0ieyRjb25maWcuY2dobV9hZGRyZXNzfGRlZmF1bHQ6Jyd9Igpncm91cD1vZwoKW29nOmxvY2FsaXR5XQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5jZ2htX2NpdHl8ZGVmYXVsdDonJ30iCmdyb3VwPW9nCgpbb2c6cmVnaW9uXQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5jZ2htX3N0YXRlfGRlZmF1bHQ6Jyd9Igpncm91cD1vZwoKW29nOnBvc3RhbC1jb2RlXQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5jZ2htX3Bvc3RhbF9jb2RlfGRlZmF1bHQ6Jyd9Igpncm91cD1vZwoKW29nOmNvdW50cnktbmFtZV0Ka2V5YXR0cj1wcm9wZXJ0eQpkZmx0MT0ieyRjb25maWcuY2dobV9jb3VudHJ5fGRlZmF1bHQ6Jyd9Igpncm91cD1vZwoKW29nOmVtYWlsXQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5jZ2htX2VtYWlsfGRlZmF1bHQ6Jyd9Igpncm91cD1vZwoKW29nOnBob25lX251bWJlcl0Ka2V5YXR0cj1wcm9wZXJ0eQpkZmx0MT0ieyRjb25maWcuY2dobV9waG9uZXxkZWZhdWx0OicnfSIKZ3JvdXA9b2cKCltvZzpmYXhfbnVtYmVyXQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5jZ2htX2ZheHxkZWZhdWx0OicnfSIKZ3JvdXA9b2cKCltmYjpwYWdlX2lkXQprZXlhdHRyPXByb3BlcnR5CmRmbHQxPSJ7JGNvbmZpZy5jZ2htX2ZicGFnZWlkfGRlZmF1bHQ6Jyd9Igpncm91cD1mYgoKW2ZiOmFkbWluc10Ka2V5YXR0cj1wcm9wZXJ0eQpkZmx0MT0ieyRjb25maWcuY2dobV9mYmFkbWluc3xkZWZhdWx0OicnfSIKZ3JvdXA9ZmIKCltmYjphcHBfaWRdCmtleWF0dHI9cHJvcGVydHkKZGZsdDE9InskY29uZmlnLmNnaG1fZmJhcHBpZHxkZWZhdWx0OicnfSIKZ3JvdXA9ZmIKClttc3ZhbGlkYXRlLjAxXQpncm91cD1taXNjCgpbYXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZV0KZGZsdDE9InskY29uZmlnLmNnaG1fd2ViYXBwY2FwYWJsZXxkZWZhdWx0OjB9Igpncm91cD1hcHBsZQoKW2FwcGxlLW1vYmlsZS13ZWItYXBwLXN0YXR1cy1iYXItc3R5bGVdCmRmbHQxPSdkZWZhdWx0Jwpncm91cD1hcHBsZQoKW2FwcGxlLXRvdWNoLWljb25dCnRhZz1saW5rCmtleWF0dHI9cmVsCmF0dHIxPWhyZWYKZGZsdDE9Intyb290X3VybH0vZmF2aWNvbl9jbXMuaWNvIjsKYXR0cjI9dHlwZQpkZmx0Mj0iaW1hZ2UveC1pY29uIjsKZ3JvdXA9YXBwbGUKaXNmaWxlPTEKCltzaG9ydGN1dCBpY29uXQp0YWc9bGluawprZXlhdHRyPXJlbAphdHRyMT1ocmVmCmRmbHQxPSJ7cm9vdF91cmx9L2Zhdmljb25fY21zLmljbyI7CmF0dHIyPXR5cGUKZGZsdDI9ImltYWdlL3gtaWNvbiIKYXR0cjM9c2l6ZXMKZGZsdDM9IjMyeDMyIgpncm91cD1hcHBsZQppc2ZpbGU9aHJlZgo=]]></data>
	</file>
	<file>
	  <filename>/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/doc/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgoJPGxpPnZlcnNpb24gMS4wIC0gaW5pdGlhbCB2ZXJzaW9uIHNlbnQgdG8gY2xpZW50LjwvbGk+Cgk8bGk+dmVyc2lvbiAxLjAuMQoJPHVsPgoJICAgICAgICA8bGk+QWRkcyBzdXBwb3J0IGZvciBub2F0dHJzIHRhZ3MgbGlrZSAmbHQ7dGl0bGUmZ3Q7PC9saT4KCQk8bGk+QWRkcyBjaGFuZ2Vsb2cuPC9saT4KCTwvdWw+Cgk8bGk+dmVyc2lvbiAxLjAuNQoJPHVsPgoJICAgICAgICA8bGk+QWRkcyB0aGUge2NnaG1fY29uZmlnX3NldH0gc21hcnR5IHBsdWdpbi48L2xpPgoJCTxsaT5DaGFuZ2UgdGhlIGRlZmF1bHQgcHJvdG90eXBlIGZvciB2YXJpb3VzIGRlc2NyaXB0aW9uIGZpZWxkcy48L2xpPgoJPC91bD4KCTxsaT52ZXJzaW9uIDEuMC42Cgk8dWw+CgkgIDxsaT5jaGFuZ2VzICZxdW90O3Nob3J0Y3V0LWljb24mcXVvdDsgZmllbGQgdG8gJnF1b3Q7c2hvcnRjdXQgaWNvbiZxdW90OzwvbGk+CgkgIDxsaT5BZGRzIHRoZSBhYmlsaXR5IHRvIHRlbGwgaWYgYSBzcGVjaWZpYyBhdHRyaWJ1dGUgc2hvdWxkIHJlcHJlc2VudCBhbiBleGlzdGluZyBmaWxlLjwvbGk+CgkgIDxsaT5JbXByb3ZlbWVudHMgZm9yIGRlZmF1bHQgdmFsdWUgY2FsY3VsYXRpb24uPC9saT4KCTwvdWw+Cgk8L2xpPgoJPGxpPnZlcnNpb24gMS4wLjcKCTx1bD4KCSAgPGxpPkZpeGVzIGZvciB0aGUgbWV0YSBhdXRob3IgYW5kIHB1Ymxpc2hlciB0YWcgdnMuIHRoZSBsaW5rIGF1dGhvciBhbmQgcHVibGlzaGVyIHRhZ3MuPC9saT4KCSAgPGxpPkZpeGVzIGZvciBkZWZhdWx0cyBmb3IgbXVsdGktYXR0cmlidXRlIHRhZ3MuPC9saT4KCTwvdWw+Cgk8L2xpPgoJPGxpPnZlcnNpb24gMS4wLjgKCTx1bD4KIAkgIDxsaT5BZGRzIGltYWdlX3NyYyB0YWcuPC9saT4KCSAgPGxpPkZpeGVzIG9wZW4gZ3JhcGggc3R1ZmYuPC9saT4KCSAgPGxpPkNoYW5nZSBkZWZhdWx0IHRlbXBsYXRlIGZvciBhIGJ1bmNoIG9mIHRhZ3MuPC9saT4KCTwvdWw+Cgk8L2xpPgoJPGxpPnZlcnNpb24gMS4wLjkKCTx1bD4KIAkgIDxsaT5NaW5vciBmaXhlcyB0byB0aGUgZmllbGRzLmluaTwvbGk+CgkgIDxsaT5VcGRhdGVzIGhlbHAuPC9saT4KCTwvdWw+Cgk8L2xpPgo8L3VsPgo=]]></data>
	</file>
	<file>
	  <filename>/doc/COPYING</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/doc/features.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LSBjb21lcyB3aXRoIGxpc3Qgb2Yga25vd24gZmllbGRzCi0gZmllbGQgbGlzdCBpcyBleHRlbmRhYmxlCi0gZmllbGRzIGFyZSBncm91cGFibGUKLSBjb25maWcgZW50cmllcyB0byBzcGVjaWZ5IGRlZmF1bHQgdmFsdWVzCi0gY2dobV8gcHJlZml4IGZpZWxkcwotIHVzZXMgc21hcnR5IHRlbXBsYXRlcyBmb3IgZGVmYXVsdCB2YWx1ZXMKLSBjYW4gYWRqdXN0IHZhbHVlcyB3aXRoIHNtYXJ0eSBwbHVnaW5zCi0gaGFuZGxlcyBtZXRhIGFuZCBsaW5rIHRhZ3MKLSBmaWVsZHMgd2l0aCBhbiBlbXB0eSBhdHRyIHZhbHVlIGFyZSBpZ25vcmVkLgo=]]></data>
	</file>
	<file>
	  <filename>/doc/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgZG9lcyB0aGlzIGRvPC9oMz4KPHA+VGhpcyBtb2R1bGUgaXMgYSBwb3dlcmZ1bCBhbmQgZmxleGlibGUgdG9vbCB0byBhaWRlIGluIGF1dG9tYXRpY2FsbHkgc2V0dGluZyBtZXRhIHRhZ3MgaW50byB5b3VyIG91dHB1dCBIVE1MLCBhbmQgZm9yIGN1c3RvbWl6aW5nIHRoZSB2YWx1ZSBvZiB0aG9zZSBtZXRhIHRhZ3MgYmFzZWQgb24gcGFnZSBjb250ZW50LjwvcD4KPHA+VGhpcyBtb2R1bGUgc2hvdWxkIGJlIHVzZWQgYnkgYW55IHByb2R1Y3Rpb24gd2Vic2l0ZSBpbiBvcmRlciB0byBhaWRlIGluIGdldHRpbmcgeW91ciB3ZWJzaXRlIG5vdGljZWQgYnkgc2VhcmNoIGVuZ2luZXMsIGFuZCB0byBhaWRlIGluIGludGVncmF0aW9uIHdpdGggc29jaWFsIG1lZGlhIHNpdGVzLjwvcD4KPGg0Pk5vdGljZXM6PC9oND4KPHVsPgogIDxsaT5UaGlzIG1vZHVsZSBoYXMgbm8gYWRtaW4gaW50ZXJmYWNlIDxlbT4oYXQgdGhpcyB0aW1lKTwvZW0+LgogICAgIDxwPkFkanVzdG1lbnRzIHRvIHRoZSBvdXRwdXQgYXJlIG1hZGUgZGlyZWN0bHkgaW4gdGhlIEhUTUwgcGFnZSB0ZW1wbGF0ZSBlZGl0b3IsIG9yIHRoZSBwYWdlIGVkaXRvci4gIEFkZGl0aW9uYWxseSwgeW91IGNhbiBhZGp1c3Qgc29tZSBzZXR0aW5ncyBieSBhZGRpbmcgdmFsdWVzIHRvIHRoZSBDTVNNUyBzeXN0ZW0gY29uZmlnLnBocCBmaWxlLjwvcD4KICA8L2xpPgogIDxsaT5UaGlzIG1vZHVsZSBvbmx5IGhhcyB0aGUgbW9zdCBiYXNpYyBvZiB1bmRlcnN0YW5kaW5nIG9mIHNvbWUgbWV0YSB0YWdzLiAgSXQgZG9lcyBub3QgcGFyc2UgdGhlIHZhbHVlcyBmb3IgbWV0YSB0YWdzLiAgVGhlcmVmb3JlIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZSB1c2VyIGhhdmUgZXhwZXJpZW5jZSBpbiBhbmQga25vd2xlZGdlIHdpdGggaW1wbGVtZW50aW5nIG1ldGEgdGFncy48L2xpPgogIDxsaT5Vbmxpa2Ugb3RoZXIgbW9kdWxlcyB3aXRoIGEgc2ltaWxhciBwdXJwb3NlLCB0aGlzIG1vZHVsZSBkb2VzIG5vdCBpbnRlcmFjdCB3aXRoIHRoZSBIVE1MIGRvY3R5cGUgb3Igdmlld3BvcnQsIG9yIGFueSBvdGhlciB0YWdzIHRoYXQgYXJlIGdlbmVyYWxseSByZWxhdGVkIHRvIGRpc3BsYXkgb3IgVVJMIGlzc3VlcyAoaS5lOiB0aGUgJmx0O2Jhc2UmZ3Q7IHRhZykuICBBZGRpdGlvbmFsbHksIGl0IGRvZXMgbm90IGluY2x1ZGUganF1ZXJ5IG9yIGFueSBvdGhlciBjc3Mgb3IgamF2YXNjcmlwdCBmcmFtZXdvcmtzIG9yIGxpYnJhcmllcy4gIFNlZSB0aGUgSlF1ZXJ5VG9vbHMgbW9kdWxlLCBhbmQgdGhlIHtjZ2pzX3JlbmRlcn0gcGx1Z2luIHN1aXRlIGluIHRoZSBDR0V4dGVuc2lvbnMgbW9kdWxlLjwvbGk+CjwvdWw+Cgo8aDM+RmVhdHVyZXM8L2gzPgo8dWw+CiAgPGxpPlVzZXMgc21hcnR5IHBsdWdpbnMgdG8gaW50ZXJhY3Qgd2l0aCBtZXRhIHRhZ3MuPC9saT4KICA8bGk+RXh0ZW5kYWJsZSAmcXVvdDtLbm93biBmaWVsZHMmcXVvdDsgbGlzdDwvbGk+CiAgPGxJPkZpZWxkcyBhcmUgZ3JvdXBhYmxlLCBhbmQgeW91IGNhbiBzcGVjaWZ5IHdoaWNoIGdyb3VwcyBvZiBmaWVsZHMgdG8gb3V0cHV0LjwvbGk+CiAgPGxpPlZhbHVlcyBpbiB0aGUgQ01TTVMgY29uZmlnIGZpbGUgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgZGVmYXVsdCBmaWVsZCB2YWx1ZXMuPC9saT4KICA8bGk+Q2FuIG91dHB1dCB0aGUgZ29vZ2xlIGFuYWx5dGljcyBwbHVnaW4gamF2YXNjcmlwdC48L2xpPgogIDxsaT5EZWZhdWx0IGZpZWxkIHZhbHVlcyBhcmUgYWN0dWFsbHkgc21hcnR5IHRlbXBsYXRlcy48L2xpPgogIDxsaT5IYW5kbGVzIG1ldGEsIGFuZCBsaW5rIHRhZ3MuPC9saT4KICA8bGk+RmllbGRzIHdpdGggYW4gZW1wdHkgdmFsdWUgYXJlIG5vdCBvdXRwdXQuPC9saT4KICA8bGk+RG9lcyBub3QgaW50ZXJmZXJlIHdpdGggdGhlIENNU01TIGJ1aWx0IGluIHttZXRhZGF0YX0gcGx1Z2luLjwvbGk+CiAgPGxpPk9yZ2FuaXplcyBmaWVsZHMgaW50byBncm91cHMuLi4gZm9yIGVhc2llciBpbmNsdWRpbmcgYW5kIGV4Y2x1ZGluZy48L2xpPgogIDxsaT5tb3JlLi4uPC9saT4KPC91bD4KCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5UbyBnZXQgYmFzaWMgb3V0cHV0LCBhZGQgPGNvZGU+e2NnaG1fcmVuZGVyfTwvY29kZT4gaW50byB0aGUgJnF1b3Q7R2xvYmFsIE1ldGFkYXRhJnF1b3Q7IGZpZWxkIG9mIHRoZSAmcXVvdDtHbG9iYWwgU2V0dGluZ3MmcXVvdDsgcGFnZS48L3A+CjxwPk5vdGU6ICBZb3UgY2FuIGFsc28gcHV0IHRoZSA8Y29kZT57Y2dobV9yZW5kZXJ9PC9jb2RlPiB0YWcgaW50byB0aGUgcGFnZSB0ZW1wbGF0ZSBkaXJlY3RseSBhYm92ZSB7bWV0YWRhdGF9LCBvciBmb3IgdGVzdGluZyBvbiBhIHNpbmdsZSBwYWdlLCB5b3UgY2FuIHBsYWNlIHRoZSA8Y29kZT57Y2dobV9yZW5kZXJ9PC9jb2RlPiB0YWcgaW50byB0aGUgbWV0YWRhdGEgc2VjdGlvbiBvZiBhIGNvbnRlbnQgcGFnZS48L3A+Cgo8aDM+U21hcnR5IFBsdWdpbnM8L2gzPgo8dWw+CiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX3NldH08L2NvZGU+CiAgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiBpcyB1c2VkIHRvIGFsdGVyIHRoZSB2YWx1ZSBvZiBhIGtub3duIG1ldGEgZmllbGQuICBJdCBjYW4gYmUgdXNlZCB0byBhZGp1c3QgdGhlIHZhbHVlIG9mIGEgc2ltcGxlICZsdDttZXRhJnF1b3Q7IHRhZyB3aXRoIGEgbmFtZSBhbmQgYSBjb250ZW50IGF0dHJpYnV0ZSwgb3IgYSBtb3JlIGFkdmFuY2VkICZxdW90O2xpbmsmcXVvdDsgdGFnIHdpdG4gbXVsdGlwbGUgYXR0cmlidXRlcy48L3A+CiAgICA8cD5Vc2FnZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT5Nb2RpZnlpbmcgYSBzaW1wbGUgbWV0YSB0YWc6ICA8Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV9zZXQgbmFtZXxrZXk9c3RyaW5nIHZhbHx2YWx1ZT1zdHJpbmd9PC9jb2RlPgogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgoJPHVsPgoJICA8bGk+bmFtZXxrZXkgPSBzdHJpbmcgLS0gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbWV0YSB0YWcgeW91IHdhbnQgdG8gY2hhbmdlLjwvbGk+CgkgIDxsaT52YWx8dmFsdWUgPSBzdHJpbmcgLS0gVGhlIG5ldyB2YWx1ZSBmb3IgdGhlIG1ldGEgdGFnLjwvbGk+Cgk8L3VsPgoJPHA+RXhhbXBsZTogIDxjb2RlPntjZ2htX3NldCBuYW1lPXJvYm90cyB2YWw9bm9pbmRleH08L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgICA8bGk+TW9kaWZ5aW5nIGEgY29tcGxleCBsaW5rIHRhZzogIDxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX3NldCByZWw9c3RyaW5nIG5hbWU9dmFsfTwvY29kZT4KICAgICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KCTx1bD4KCSAgPGxpPnJlbCA9IHN0cmluZyAtLSBUaGUgbmFtZSBvZiB0aGUgbWV0YSB0YWcgeW91IHdhbnQgdG8gY2hhbmdlLjwvbGk+CgkgIDxsaT5vdGhlciBwYXJhbWV0ZXJzID0gc3RyaW5nIC0tIFNwZWNpZnkgdGhlIGF0dHJpYnV0ZSBuYW1lIChvdGhlciB0aGFuIHJlbCkgYW5kIHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUgdG8gbW9kaWZ5LjwvbGk+Cgk8L3VsPgoJPHA+RXhhbXBsZTogIDxjb2RlPntjZ2htX3NldCByZWw9J2FwcGxlLXRvdWNoLWljb24nIHNpemVzPT0nMTZ4MTYnfTwvY29kZT48L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX2NvbmZpZ19zZXR9PC9jb2RlPgogICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gaXMgdXNlZCB0byBhbHRlciB0aGUgdmFsdWUgb2YsIG9yIHNldCBhIGNvbmZpZyB2YXJpYWJsZS4gIFRoZSBjb25maWcgdmFyaWFibGVzIGNhbiBiZSB1c2VkIGluIHRoZSBmaWVsZCB0ZW1wbGF0ZXMgdG8gc2V0IGEgZmllbGQgdmFsdWUuPC9wPgogICAgPHA+U2V0dGluZyBhIGNvbmZpZyB2YXJpYWJsZSB1c2luZyB0aGlzIHBsdWdpbiB3aWxsIG92ZXJ3cml0ZSBpbiBtZW1vcnkgKGZvciBvbmUgcmVxdWVzdCkgYW55IHZhbHVlcyBmb3IgdGhlIHNhbWUgdmFyaWFibGUgcmVhZCBmcm9tIHRoZSBDTVNNUyBjb25maWcgZmlsZS48L3A+CiAgICA8cD5Vc2FnZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV9jb25maWdfc2V0IGtleT1zdHJpbmcgdmFsPXN0cmluZ308L2NvZGU+CiAgICAgICAgPHA+UGFyYW1ldGVyczo8L3A+Cgk8dWw+CgkgIDxsaT5rZXl8bmFtZSA9IHN0cmluZyAtLSBUaGUgbmFtZSBvZiB0aGUgY29uZmlnIHZhbHVlIHlvdSB3YW50IHRvIGNoYW5nZS48L2xpPgoJICA8bGk+dmFsfHZhbHVlID0gc3RyaW5nIC0tIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBjb25maWcgdmFyaWFibGUuPC9saT4KCTwvdWw+Cgk8cD5FeGFtcGxlOiAgPGNvZGU+e2NnaG1fY29uZmlnX3NldCBrZXk9J3RpdGxlJyB2YWw9JHZhbH08L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV91bnNldH08L2NvZGU+CiAgICA8cD48c3Ryb25nPkRlc2NyaXB0aW9uOjwvc3Ryb25nPiBUaGlzIHBsdWdpbiBpcyB1c2VkIHRvIHJlbW92ZSBhIHZhbHVlIGZyb20gYSBrbm93biBtZXRhIGZpZWxkLiAgVGhpcyBmb3JjZXMgdGhlIHZhbHVlIG9mIHRoZSBtZXRhIGZpZWxkIHRvIGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhlIGRlZmF1bHQgbWV0aG9kcy48L3A+CiAgICA8cD5Vc2FnZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV91bnNldCBuYW1lfGtleT1zdHJpbmd9PC9jb2RlPgogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgoJPHVsPgoJICA8bGk+bmFtZXxrZXkgPSBzdHJpbmcgLS0gc3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgbWV0YSB0YWcgeW91IHdhbnQgdG8gaGlkZS48L2xpPgoJPC91bD4KCTxwPkV4YW1wbGU6ICA8Y29kZT57Y2dobV91bnNldCBuYW1lPSdyb2JvdHMnfTwvY29kZT48L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX2hpZGV9PC9jb2RlPgogICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gaXMgdXNlZCB0byBoaWRlIGEga25vd24gdGFnIGZyb20gYmVpbmcgcmVuZGVyZWQgaW4gdGhlIEhUTUwgb3V0cHV0LjwvcD4KICAgIDxwPlVzYWdlOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX2hpZGUgbmFtZXxrZXk9c3RyaW5nfTwvY29kZT4KICAgICAgICA8cD5QYXJhbWV0ZXJzOjwvcD4KCTx1bD4KCSAgPGxpPm5hbWV8a2V5ID0gc3RyaW5nIC0tIHNwZWNpZnkgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB0aGUgbWV0YSB0YWdzIHlvdSB3YW50IHRvIGhpZGUuPC9saT4KCTwvdWw+Cgk8cD5FeGFtcGxlOiAgPGNvZGU+e2NnaG1faGlkZSBuYW1lPSdyb2JvdHMsY29weXJpZ2h0J308L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT48Y29kZSBzdHlsZT0iY29sb3I6IGJsdWU7Ij57Y2dobV9yZW5kZXJ9PC9jb2RlPgogICAgPHA+PHN0cm9uZz5EZXNjcmlwdGlvbjo8L3N0cm9uZz4gVGhpcyBwbHVnaW4gaXMgdXNlZCB0byByZW5kZXIgYWxsIGtub3duIG1ldGEgdGFncyB3aXRoIHRoZWlyIHNwZWNpZmllZCAob3IgY2FsY3VsYXRlZCkgdmFsdWVzLjwvcD4KICAgIDxwPlVzYWdlOjwvcD4KICAgIDx1bD4KICAgICAgPGxpPjxjb2RlIHN0eWxlPSJjb2xvcjogYmx1ZTsiPntjZ2htX3JlbmRlciBbZ3JvdXBzPXN0cmluZ119PC9jb2RlPgogICAgICAgIDxwPlBhcmFtZXRlcnM6PC9wPgoJPHVsPgoJICA8bGk+Z3JvdXBzID0gc3RyaW5nIC0tIHNwZWNpZnkgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBrbm93biBncm91cHMgdG8gb3V0cHV0LiAgTGVhdmluZyB0aGlzIGJsYW5rIHdpbGwgdXNlIGEgZGVmYXVsdCBncm91cCBsaXN0LiAgUHJlY2VkaW5nIGEgZ3JvdXAgbmFtZSB3aXRoIGFuICEgd2lsbCBlbnN1cmUgdGhhdCBhYnNvbHV0ZWx5IG5vIGZpZWxkcyB0aGF0IGFyZSBpbiB0aGF0IGdyb3VwIHdpbGwgYmUgZGlzcGxheWVkLjwvbGk+Cgk8L3VsPgoJPHA+RXhhbXBsZTogIDxjb2RlPntjZ2htX3JlbmRlciBncm91cHM9J21pc2Msb2csZmIsdHdpdHRlciwhb2xkJ308L2NvZGU+PC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgo8L3VsPgoKPGgzPkdvb2dsZSBBbmFseXRpY3M8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIG91dHB1dGluZyB0aGUgZ29vZ2xlIGFuYWx5dGljcyBwbHVnaW4gY29kZSwgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHN1YmRvbWFpbnMsIGFuZCBtdWx0aXBsZSB0b3AgbGV2ZWwgZG9tYWlucyBkZXBlbmRpbmcgdXBvbiB0aGUgZm9sbG93aW5nIGNvbmZpZyB2YWx1ZXM6PC9wPgo8dWw+CiAgPGxpPjxjb2RlPmNnaG1fZ2FfcHJvcGVydHlpZDwvY29kZT4gKHN0cmluZyk8L2xpPgogIDxsaT48Y29kZT5jZ2htX2dhX3N1YmRvbWFpbnM8L2NvZGU+IChvcHRpb25hbCBib29sZWFuKTwvbGk+CiAgPGxpPjxjb2RlPmNnaG1fZ2FfZG9tYWluPC9jb2RlPiAob3B0aW9uYWwgc3RyaW5nKTwvbGk+CiAgPGxpPjxjb2RlPmNnaG1fZ2FfbGlua2RvbWFpbnM8L2NvZGU+IChvcHRpb25hbCBzdHJpbmcpPC9saT4KICA8bGk+PGNvZGU+Y2dobV9nYV9saW5raWQ8Y29kZT4gKG9wdGlvbmFsIGJvb2xlYW4pPC9saT4KICA8bGk+PGNvZGU+Y2dobV9nYV9kaXNwbGF5ZmVhdHVyZXM8Y29kZT4gKG9wdGlvbmFsIGJvb2xlYW4pPC9saT4KPC91bD4KCjxoMz5Lbm93biBGaWVsZHM8L2gzPgo8cD5UaGUgZm9sbG93aW5nIG1ldGEgZmllbGRzIGFyZSBrbm93biBieSBkZWZhdWx0OjwvcD4KPHVsPgogIDxsaT5kYXRlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb250ZW50X29iai0+R2V0TW9kaWZpZWREYXRlKCl8ZGF0ZV9mb3JtYXQ6JyVZLSVtLSVkVCVoOiVtOiVzUCd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+bGFzdHVwZGF0ZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29udGVudF9vYmotPkdldE1vZGlmaWVkRGF0ZSgpfGRhdGVfZm9ybWF0OiclWS0lbS0lZFQlaDolbTolc1AnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPnJldmlzZWQKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbnRlbnRfb2JqLT5HZXRNb2RpZmllZERhdGUoKXxkYXRlX2Zvcm1hdDonJVktJW0tJWRUJWg6JW06JXNQJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5jYW5vbmljYWwKICAgIDx1bD4KICAgICAgPGxpPnRhZzogbGluazwvbGk+CiAgICAgIDxsaT5rZXlhdHRyOiByZWw8L2xpPgogICAgICA8bGk+YXR0cjE6IGhyZWY8L2xpPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNhbm9uaWNhbHxkZWZhdWx0OiRjb250ZW50X29iai0+R2V0VVJMKCl9PC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+Y29weXJpZ2h0CiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb250ZW50X29iai0+R2V0TW9kaWZpZWREYXRlKCl8ZGF0ZV9mb3JtYXQ6JyVZJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50aXRsZV90YWcKICAgIDx1bD4KICAgICAgPGxpPmRmbHQ6IHskY29uZmlnLnRpdGxlfGRlZmF1bHQ6XCJ7dGl0bGV9IC0ge3NpdGVuYW1lfVwifTwvbGk+CiAgICAgIDxsaT50YWc6IHRpdGxlPC9saT4KICAgICAgPGxpPm5vYXR0cnM6IDE8L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50aXRsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLnRpdGxlfGRlZmF1bHQ6XCJ7dGl0bGV9IC0ge3NpdGVuYW1lfVwifTwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmRlc2NyaXB0aW9uCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyR0bXA9JGNvbmZpZy5kZXNjcmlwdGlvbnxkZWZhdWx0OiRjb25maWcuY2dobV9kZXNjcmlwdGlvbnxkZWZhdWx0OicnfXtpZiAhZW1wdHkoJHRtcCl9eyR0bXB9e2Vsc2V9e2Rlc2NyaXB0aW9ufXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+ZXhwaXJlcwogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+cmV2aXNpdC1hZnRlcgogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+Z29vZ2xlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogKipOT05FKio8L2xpPgogICAgICA8bGk+Z3JvdXA6IGdvb2dsZTwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmdvb2dsZWJvdAogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBnb29nbGU8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5nb29nbGUtc2l0ZS12ZXJpZmljYXRpb24KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5ncm91cDogZ29vZ2xlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+a2V5d29yZHMgPGVtPihzZWUgYmVsb3cpPC9lbT4KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPnJvYm90cwogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHtpZiAkY29udGVudF9vYmotPkNhY2hhYmxlKCkgJiYgJGNvbnRlbnRfb2JqLT5Jc1Blcm1pdHRlZCgpfTwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPngtdWEtY29tcGF0aWJsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXV0aG9yCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogKipOT05FKio8L2xpPgogICAgICA8bGk+dGFnOiBsaW5rPC9saT4KICAgICAgPGxpPmtleWF0dHI6IHJlbDwvbGk+CiAgICAgIDxsaT5hdHRyMTogaHJlZjwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm1ldGFfYXV0aG9yCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogKipOT05FKio8L2xpPgogICAgICA8bGk+a2V5dmFsOiBhdXRob3I8L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5wdWJsaXNoZXIKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT50YWc6IGxpbms8L2xpPgogICAgICA8bGk+a2V5YXR0cjogcmVsPC9saT4KICAgICAgPGxpPmF0dHIxOiBocmVmPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+bWV0YV9wdWJsaXNoZXIKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5rZXl2YWw6IHB1Ymxpc2hlcjwvbGk+CiAgICAgIDxsaT5ncm91cDogbWlzYzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmdlby5wbGFjZW5hbWUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX2NpdHl8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IGdlbzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPmdlby5yZWdpb24KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX3N0YXRlfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBnZW88L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5nZW8ucG9zaXRpb24KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7aWYgIWVtcHR5KCRjb25maWcuY2dobV9sYXQpICYmICFlbXB0eSgkY29uZmlnLmNnaG1fbG9uZyl9eyRjb25maWcuY2dobV9sYXR9LCB7JGNvbmZpZy5jZ2htX2xvbmd9ey9pZn08L2xpPgogICAgICA8bGk+Z3JvdXA6IGdlbzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPklDQk0KICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7aWYgIWVtcHR5KCRjb25maWcuY2dobV9sYXQpICYmICFlbXB0eSgkY29uZmlnLmNnaG1fbG9uZyl9eyRjb25maWcuY2dobV9sYXR9LCB7JGNvbmZpZy5jZ2htX2xvbmd9ey9pZn08L2xpPgogICAgICA8bGk+Z3JvdXA6IG1pc2M8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50d2l0dGVyOmNhcmQKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX3R3aXR0ZXJjYXJkfGRlZmF1bHQ6J3N1bW1hcnknfTwvbGk+CiAgICAgIDxsaT5ncm91cDogdHdpdHRlcjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPnR3aXR0ZXI6c2l0ZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fdHdpdHRlcmlkfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+dHdpdHRlcjpjcmVhdG9yCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV90d2l0dGVyaWR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IHR3aXR0ZXI8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50d2l0dGVyOnVyaQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHtpZiBpc3NldCgkY2Fub25pY2FsKX17JGNhbm9uaWNhbH17ZWxzZX17JGNvbmZpZy5jYW5vbmljYWx8ZGVmYXVsdDokY29udGVudF9vYmotPkdldFVSTCgpfXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+dHdpdHRlcjppbWFnZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqIE5PTkUgKio8L2xpPgogICAgICA8bGk+Z3JvdXA6IHR3aXR0ZXI8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT50d2l0dGVyOmRlc2NyaXB0aW9uCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyR0bXA9JGNvbmZpZy5kZXNjcmlwdGlvbnxkZWZhdWx0OiRjb25maWcuY2dobV9kZXNjcmlwdGlvbnxkZWZhdWx0OicnfXtpZiAhZW1wdHkoJHRtcCl9eyR0bXB9e2Vsc2V9e2Rlc2NyaXB0aW9ufXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+dHdlZXRtZW1lLXRpdGxlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcudGl0bGV8ZGVmYXVsdDpcInt0aXRsZX0gLSB7c2l0ZW5hbWV9XCJ9PC9saT4KICAgICAgPGxpPmdyb3VwOiB0d2l0dGVyPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6dGl0bGUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy50aXRsZXxkZWZhdWx0Olwie3RpdGxlfSAtIHtzaXRlbmFtZX1cIn08L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6dHlwZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHdlYnNpdGU8L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6dXJsCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MToge2lmIGlzc2V0KCRjYW5vbmljYWwpfXskY2Fub25pY2FsfXtlbHNlfXskY29uZmlnLmNhbm9uaWNhbHxkZWZhdWx0OiRjb250ZW50X29iai0+R2V0VVJMKCl9ey9pZn08L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6aW1hZ2UKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5pbWFnZXxkZWZhdWx0OiRjb25maWcuY2dobV9pbWFnZXxkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogb2c8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5vZzpzaXRlX25hbWUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7c2l0ZW5hbWV9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmRlc2NyaXB0aW9uCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyR0bXA9JGNvbmZpZy5kZXNjcmlwdGlvbnxkZWZhdWx0OiRjb25maWcuY2dobV9kZXNjcmlwdGlvbnxkZWZhdWx0OicnfXtpZiAhZW1wdHkoJHRtcCl9eyR0bXB9e2Vsc2V9e2Rlc2NyaXB0aW9ufXsvaWZ9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmxhdGl0dWRlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9sYXR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6bG9uZ2l0dWRlCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9sb25nfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOnN0cmVldF9hZGRyZXNzCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9hZGRyZXNzfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmxvY2FsaXR5CiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9jaXR5fGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOnJlZ2lvbgogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fc3RhdGV8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6cG9zdGFsLWNvZGUKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX3Bvc3RhbF9jb2RlfGRlZmF1bHQ6Jyd9PC9saT4KICAgICAgPGxpPmdyb3VwOiBvZzwvbGk+CiAgICA8L3VsPgogIDwvbGk+CiAgPGxpPm9nOmNvdW50cnktbmFtZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fY291bnRyeXxkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogb2c8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5vZzplbWFpbAogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fZW1haWx8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+b2c6cGhvbmUtbnVtYmVyCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9waG9uZXxkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogb2c8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5vZzpmYXgtbnVtYmVyCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9mYXh8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IG9nPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+ZmI6cGFnZV9pZAogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNnaG1fZmJwYWdlaWR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IGZiPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+ZmI6YWRtaW5zCiAgICA8dWw+CiAgICAgIDxsaT5kZmx0MTogeyRjb25maWcuY2dobV9mYmFkbWluc3xkZWZhdWx0OicnfTwvbGk+CiAgICAgIDxsaT5ncm91cDogZmI8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5mYjphcHBfaWQKICAgIDx1bD4KICAgICAgPGxpPmRmbHQxOiB7JGNvbmZpZy5jZ2htX2ZiQVBQSUR8ZGVmYXVsdDonJ308L2xpPgogICAgICA8bGk+Z3JvdXA6IGZiPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+bXN2YWxpZGF0ZS4wMQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6ICoqTk9ORSoqPC9saT4KICAgICAgPGxpPmdyb3VwOiBtaXNjPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXBwbGUtbW9iaWxlLXdlYi1hcHAtY2FwYWJsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IHskY29uZmlnLmNobV93ZWJhcHBjYXBhYmxlfGRlZmF1bHQ6MH08L2xpPgogICAgICA8bGk+Z3JvdXA6IGFwcGxlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXBwbGUtbW9iaWxlLXdlYi1hcHAtc3RhdHVzLWJhci1zdHlsZQogICAgPHVsPgogICAgICA8bGk+ZGZsdDE6IGRlZmF1bHQ8L2xpPgogICAgICA8bGk+Z3JvdXA6IGFwcGxlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KICA8bGk+YXBwbGUtdG91Y2gtaWNvbgogICAgPHVsPgogICAgICA8bGk+dGFnOiBsaW5rPC9saT4KICAgICAgPGxpPmtleWF0dHI6IHJlbDwvbGk+CiAgICAgIDxsaT5hdHRyMTogaHJlZjwvbGk+CiAgICAgIDxsaT5kZmx0MToge3Jvb3RfdXJsfS9mYXZpY29uX2Ntcy5pY288L2xpPgogICAgICA8bGk+YXR0cjI6IHR5cGU8L2xpPgogICAgICA8bGk+ZGZsdDI6IGltYWdlL3gtaWNvbjwvbGk+CiAgICAgIDxsaT5ncm91cDogYXBwbGU8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT4mcXVvdDtzaG9ydGN1dCBpY29uJnF1b3Q7CiAgICA8dWw+CiAgICAgIDxsaT50YWc6IGxpbms8L2xpPgogICAgICA8bGk+a2V5YXR0cjogcmVsPC9saT4KICAgICAgPGxpPmF0dHIxOiBocmVmPC9saT4KICAgICAgPGxpPmRmbHQxOiAqKk5PTkUqKjwvbGk+CiAgICAgIDxsaT5hdHRyMjogdHlwZTwvbGk+CiAgICAgIDxsaT5kZmx0MjogaW1hZ2UveC1pY29uPC9saT4KICAgICAgPGxpPmF0dHIzOiBzaXplczwvbGk+CiAgICAgIDxsaT5kZmx0MzogMzJ4MzI8L2xpPgogICAgICA8bGk+Z3JvdXA6IGFwcGxlPC9saT4KICAgIDwvdWw+CiAgPC9saT4KPC91bD4KCjxoMz5Db25maWcgVmFyaWFibGVzOjwvaDM+CjxwPlRoaXMgbW9kdWxlIHdpbGwgcmVhZCBhbnkgY29uZmlnIHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBjZ2htXyBwcmVmaXguICBUaGV5IGNhbiBiZSB1c2VkIGluIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgZmllbGRzLiBIZXJlIGlzIGEgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgY29uZmlnIHZhcmlhYmxlcyB0aGF0IHRoaXMgbW9kdWxlIG1heSBieSBkZWZhdWx0IHJlZmVyIHRvOjwvcD4KPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjEiPgogIDx0cj4KICAgIDx0aCBjb2xzcGFuPSIzIj5GaXhlZCBjb25maWcgdmFyaWFibGVzOjwvdGg+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9wcm9wZXJ0eWlkPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBHb29nbGUgQW5hbHl0aWNzIHByb3BlcnR5IGlkLiAgSWYgdGhpcyBjb25maWcgZW50cnkgaXMgbm90IHNldCwgbm8gZ29vZ2xlIGFuYWx5dGljcyBqYXZhc2NyaXB0IGNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2dhX3N1YmRvbWFpbnM8L3RkPgogICAgPHRkPmJvb2w8L3RkPgogICAgPHRkPldldGhlciBvciBub3QgdG8gaW5jbHVkZSBzdWJkb21haW5zIGluIHRoZSBhbmFseXRpY3MgdHJhY2tpbmcuICBUaGlzIGlzIHVzZWZ1bCBpZiB0aGlzIHdlYnNpdGUgaGFzLCBvciB3aWxsIGluIHRoZSBmdXR1cmUgaGF2ZSBzdWJkb21haW5zLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9kb21haW48L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+QW4gb3B0aW9uYWwgZG9tYWluIG5hbWUgdG8gdXNlIGluIHRoZSBnb29nbGUgYW5hbHl0aWNzIGphdmFzY3JpcHQgY29kZS4gIElmIG5vbmUgaXMgc3BlY2lmaWVkLCB0aGUgc3lzdGVtIHdpbGwgdXNlIHRoZSBob3N0IHBvcnRpb24gb2YgdGhlIENNU01TIHJvb3QgdXJsLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9saW5rZG9tYWluPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPkFuIG9wdGlvbmFsIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHRvcCBsZXZlbCBkb21haW5zIHRvIGluY2x1ZGUgaW4gdGhlIHRyYWNraW5nIGZvciB0aGlzIHVzZXIuICBOb3RlOiAgVGhlIHNhbWUgcHJvcGVydHlpZCBtdXN0IGJlIHVzZWQgb24gYWxsIGRvbWFpbnMgaWYgbGlua2luZyBhY3Jvc3MgdG9wIGxldmVsIGRvbWFpbnMuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2dhX2xpbmtpZDwvdGQ+CiAgICA8dGQ+Ym9vbDwvdGQ+CiAgICA8dGQ+QSBmbGFnIGluZGljYXRpbmcgd2V0aGVyIG9yIG5vdCB0byBlbmFibGUgZW5oYW5jZWQgbGluayBhdHRyaWJ1dGlvbiBpbiBnb29nbGUgYW5hbHl0aWNzLjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9nYV9kaXNwbGF5ZmVhdHVyZXM8L3RkPgogICAgPHRkPmJvb2w8L3RkPgogICAgPHRkPkEgZmxhZyBpbmRpY2F0aW5nIHdldGhlciBvciBub3QgdG8gZW5hYmxlIHRoZSBkaXNwbGF5IGZlYXR1cmVzIHBsdWdpbi48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRoIGNvbHNwYW49IjMiPkdlbmVyaWMgY29uZmlnIHZhcmlhYmxlczoKICAgICAgPHA+R2VuZXJpYyBjb25maWcgdmFyaWFibGVzIGFyZSB0aG9zZSB1c2VkIGJ5IGRlZmF1bHQgZm9yIHN0YW5kYXJkIHRhZ3MgbGlrZSB0aXRsZSwgZGVzY3JpcHRpb24sIGltYWdlLCBhbmQgY2Fub25pY2FsLiAgVXNpbmcgdGhlIHN0YW5kYXJkIGZpZWxkIHRlbXBsYXRlcywgdGhlc2UgYXJlIHVzdWFsbHkgdXNlZCBpbiB0aGUgZXZlbnQgd2hlcmUgbnVtZXJvdXMgbWV0YSB0YWdzIG1heSBoYXZlIHRoZSBzYW1lIHZhbHVlLjwvcD4KICAgICAgPHA+VGhlc2UgY2FuIHN0aWxsIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIHtjZ2htX3NldH0gdGFnIHRvIHNwZWNpZnkgYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBzcGVjaWZpYyBtZXRhIHRhZy48L3A+CiAgICA8L3RoPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnRpdGxlPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBwYWdlIHRpdGxlLiBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHVzZWQgZm9yIHRoZSB0aXRsZSB0YWcsIHRoZSBtZXRhIHRpdGxlIHRhZywgdGhlIG9nOnRpdGxlIHRhZywgYW5kIHRoZSB0d2l0dGVyOnRpdGxlIHRhZy4vdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2Fub25pY2FsPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBjYW5vbmljYWwgdXJsIGZvciB0aGUgcGFnZWUuIFRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgdXNlZCBmb3IgdGhlIHJlbD1jYW5vbmljYWwgdGFnLCB0aGUgdHdpdHRlcjp1cmkgdGFnLCBhbmQgdGhlIG9nOnVybCB0YWcuL3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmRlc2NyaXB0aW9uPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBwYWdlIGRlc2NyaXB0aW9uLiAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSB1c2VkIGZvciB0aGUgbWV0YSBkZXNjcmlwdGlvbiB0YWcsIGFuZCB0d2l0dGVyOmRlc2NyaXB0aW9uIHRhZywgYW5kIHRoZSBvZzpkZXNjcmlwdGlvbiB0YWcuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5pbWFnZTwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgY29tcGxldGUgVVJMIHRvIHRoZSBzaW5nbGUgaW1hZ2UgdG8gdXNlIGZvciB0aGlzIHBhZ2UuICBzcGVjaWZpY2FsbHkgaXQgaXMgdXNlZCBmb3IgdGhlIG9nOmltYWdlIGFuZCB0aGUgaW1hZ2Vfc3JjIG1ldGEgdGFncy48L3RkPgogIDwvdHI+CgogIDx0cj4KICAgIDx0aCBjb2xzcGFuPSIzIj5GbGV4aWJsZSBjb25maWcgdmFyaWFibGVzOjwvdGg+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9oaWRkZW48L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+QSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBmaWVsZCBuYW1lcyB0byBleHBsaWNpdGx5IG5vdCBkaXNwbGF5LjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9ncm91cHM8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+QSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cCBuYW1lcyB0byBkaXNwbGF5LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXM6ICZxdW90O2RhdGVzLG1pc2MsZ29vZ2xlLGdlbyx0d2l0dGVyLG9nLGZiLGFwcGxlLCFvbGQmcXVvdDs8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fYWRkcmVzczwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgYnVzaW5lc3Mgc3RyZWV0IGFkZHJlc3M8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fY2l0eTwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgYnVzaW5lc3MgY2l0eTwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9kZXNjcmlwdGlvbjwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgcGFnZSBkZXNjcmlwdGlvbi48L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fc3RhdGU8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+VGhlIGJ1c2luZXNzIHN0YXRlIG9yIHByb3ZpbmNlPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3Bvc3RhbF9jb2RlPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBidXNpbmVzcyBwb3N0YWwvemlwIGNvZGUuPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3Bvc3RhbF9jb3VudHJ5PC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBidXNpbmVzcyBjb3VudHJ5PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3Bvc3RhbF9lbWFpbDwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgYnVzaW5lc3MgZW1haWwgYWRkcmVzczwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9wb3N0YWxfcGhvbmU8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+VGhlIGJ1c2luZXNzIHBob25lIG51bWJlcjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9wb3N0YWxfZmF4PC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBidXNpbmVzcyBmYXggbnVtYmVyPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2xhdDwvdGQ+CiAgICA8dGQ+ZmxvYXQ8L3RkPgogICAgPHRkPlRoZSBsYXRpdHVkZSBvZiB0aGUgYnVzaW5lc3MgbG9jYXRpb24uPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3R3aXR0ZXJjYXJkPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgdHdpdHRlcjpjYXJkIG1ldGEgdGFnLjxici8+CiAgICAgIHNlZTogPGEgaHJlZj0iaHR0cHM6Ly9kZXYudHdpdHRlci5jb20vY2FyZHMvb3ZlcnZpZXciPmh0dHBzOi8vZGV2LnR3aXR0ZXIuY29tL2NhcmRzL292ZXJ2aWV3PC9hPgogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3R3aXR0ZXJpZDwvdGQ+CiAgICA8dGQ+c3RyaW5nPC90ZD4KICAgIDx0ZD5UaGUgd2Vic2l0ZSBvd25lcidzIHR3aXR0ZXIgaWQuPGJyLz4KICAgICAgc2VlOiA8YSBocmVmPSJodHRwczovL2Rldi50d2l0dGVyLmNvbS9jYXJkcy9vdmVydmlldyI+aHR0cHM6Ly9kZXYudHdpdHRlci5jb20vY2FyZHMvb3ZlcnZpZXc8L2E+CiAgICA8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPmNnaG1fZmJwYWdlaWQ8L3RkPgogICAgPHRkPnN0cmluZzwvdGQ+CiAgICA8dGQ+VGhlIHVuaXF1ZSBmYWNlYm9vayBwYWdlIGlkPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX2ZiYWRtaW5zPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPjwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+Y2dobV9mYmFwcGlkPC90ZD4KICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgPHRkPlRoZSB1bmlxdWUgZmFjZWJvb2sgYXBwIGlkPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD5jZ2htX3dlYmFwcGNhcGFibGU8L3RkPgogICAgPHRkPmJvb2w8L3RkPgogICAgPHRkPjwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPHA+SXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGRlZmF1bHQgcHJvcGVydGllcyBmb3IgYXR0cmlidXRlcyBvZiBtZXRhIGZpZWxkcyB1c2luZyBjb25maWcgdmFyaWFibGVzLiAgVGhlIGZvcm1hdCBpczogPGNvZGU+Y2dobV97YXR0cm5hbWV9X3tmaWVsZG5hbWV9PXN0cmluZzwvY29kZT4uPC9wPgo8cD5pLmU6IDxjb2RlPmNvbmZpZ1snY2dobV9ocmVmX2FwcGxpZS10b3VjaC1pY29uJ10gPSAne3Jvb3RfdXJsfS9mYXZpY29uX2Ntcy5pY28nPC9jb2RlPjwvcHJlPgoKPGgzPlNhbXBsZSBVc2FnZSBmcm9tIGEgRGV0YWlsIFRlbXBsYXRlPC9oMz4KPHA+VHlwaWNhbGx5IHlvdSB3aWxsIHdhbnQgdG8gYWRqdXN0IHNvbWUgbWV0YSB0YWdzIGZyb20gd2l0aGluIHRoZSBkZXRhaWwgdGVtcGxhdGUgb2YgYSBtb2R1bGUsIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlcyB0aGF0IGFyZSBnZW5lcmF0ZWQgZm9yIHRoZSBwYWdlIGFsb25lLiAgSGVyZSB5b3Ugd2lsbCBzZWUgc29tZSBzYW1wbGUgY29kZSBmcm9tIGEgQ0dCbG9nIGRldGFpbCB0ZW1wbGF0ZTo8L3A+CjxwcmU+PGNvZGU+e2NnaG1fY29uZmlnX3NldCBrZXk9J3RpdGxlJyB2YWw9InskZW50cnktPnRpdGxlfSAtIHtzaXRlbmFtZX0ifQp7Y2dobV9jb25maWdfc2V0IGtleT0nY2Fub25pY2FsJyB2YWw9JGVudHJ5LT5jYW5vbmljYWx8ZGVmYXVsdDonJ30Ke2NnaG1fY29uZmlnX3NldCBrZXk9J2ltYWdlJyB2YWw9InskZW50cnktPmZpbGVfbG9jYXRpb259L3skZW50cnktPmZpZWxkcy5pbWFnZS0+dmFsdWV9In0Ke2NnaG1fY29uZmlnX3NldCBrZXk9J2Rlc2NyaXB0aW9uJyB2YWw9InskZW50cnktPnN1bW1hcnl8c3RyaXBfdGFnc30ifTwvY29kZT48L3ByZT4KPHA+T24gbGluZSAxIHdlIG92ZXJyaWRlIHRoZSB0aXRsZSAoZm9yIHRoZSB0aXRsZV90YWcsIHRoZSBtZXRhIHRpdGxlLCB0aGUgbWV0YSBvZzp0aXRsZSwgYW5kIHRoZSBtZXRhIHR3ZWV0bWVtZTp0aXRsZSB0YWdzKS48YnIvPgpPbiB0aGUgc2Vjb25kIGxpbmUgd2Ugb3ZlcnJpZGUgdGhlIGNhbm9uaWNhbCBlbnRyeS4uLiBpZiBpdCBpcyBzZXQsIGlmIGl0IGlzIG5vdCBzZXQsIHRoZW4gdGhlIHN0YW5kYXJkIGRlZmF1bHQgdmFsdWUgd2lsbCBiZSB1c2VkLjxici8+ClRoZSB0aGlyZCBsaW5lIHNldHMgdGhlIGltYWdlIFVSTCB0byBiZSB1c2VkIGZvciB0aGUgb2c6aW1hZ2UgbWV0YSB0YWcgYW5kIGFueSBvdGhlciBtZXRhIHRhZyB0aGF0IHJlYWRzIHRoZSA8Y29kZT57JGNvbmZpZy5pbWFnZX08L2NvZGU+IHZhcmlhYmxlIGluIGl0cyB0ZW1wbGF0ZS4KVGhlIGZpbmFsIGxpbmUgb3ZlcnJpZGVzIHRoZSBkZXNjcmlwdGlvbiBmb3IgdXNlIGluIHRoZSBkZXNjcmlwdGlvbiwgb2c6ZGVzY3JpcHRpb24gYW5kIG90aGVyIG1ldGEgdGFncy48L3A+CjxwPk5vdGU6IFdlIGNvdWxkIGV4cGxpY2l0bHkgc2V0IHRoZSB2YWx1ZSBmb3IgYW55IG9uZSB0YWcgd2Ugd2FudCB1c2luZyB0aGUge2NnaG1fc2V0fSBzbWFydHkgcGx1Z2luLiAgaS5lOiA8Y29kZT57Y2dobV9zZXQga2V5PSdvZzp0aXRsZScgdmFsdWU9Ik15IEZhbmN5IEJsb2cgQXJ0aWNsZSJ9PC9jb2RlPi48L3A+Cgo8aDQ+V2hhdCBhYm91dCBrZXl3b3JkczwvaDQ+CjxwPnRoZXJlIGFyZSBudW1lcm91cyByZXNvdXJjZXMgb24gdGhlIHdlYiB0aGF0IGluZGljYXRlIHRoYXQgdGhlIGtleXdvcmRzIG1ldGF0YWcgbm8gbG9uZ2VyIGhhcyBhbnkgcG9zaXRpdmllIGluZmx1ZW5jZSBvbiBzZWFyY2ggZW5naW5lIHJhbmtpbmcgb3IgcGVyZm9ybWFuY2UuICBJbiBmYWN0LCBldmVuIGhhdmluZyB0aGUga2V5d29yZHMgbWV0YSB0YWcgcHJlc2VudCBpbiB5b3VyIEhUTUwgb3V0cHV0IG1heSBoYXZlIG5lZ2F0aXZlIGVmZmVjdHMgb24geW91ciBzZWFyY2ggZW5naW5lIHJhbmtpbmcuICBUaGVyZWZvcmUsIHRoaXMgbW9kdWxlIGJ5IGRlZmF1bHQgZG9lcyBub3QgZG8gYW55IGtleXdvcmQgZGV0ZWN0aW9uLCBvciBvdXRwdXQgYSB2YWx1ZSBmb3IgdGhpcyBtZXRhIGZpZWxkLjwvcD4KPHA+VGhvdWdoIHRoZSBtb2R1bGUgd2lsbCB1bmRlcnN0YW5kIHRoZSBrZXl3b3JkcyBmaWVsZCB0eXBlIGluIHRoZSBjb25maWcgZW50cmllcywgYW5kIGluIHRoZSB7Y2dobV9zZXR9IHRhZywgIHdlIGhpZ2hseSByZWNvbW1lbmQgdGhhdCB5b3UgZG8gbm90IHVuZGVydGFrZSB0aGUgZWZmb3J0IHRvIGluY2x1ZGUga2V5d29yZHMgaW4geW91ciBIVE1MIG91dHB1dC48L3A+Cgo8aDM+QWRkaW5nIEtub3duIEZpZWxkczwvaDM+CjxwPkl0IGlzIHBvc3NpYmxlIHRvIGRlZmluZSBtb3JlIG1ldGEgZmllbGRzIHRoYXQgdGhpcyBtb2R1bGUga25vd3MgYWJvdXQgYnkgY3JlYXRpbmcgYW5vdGhlciBmaWVsZHMuaW5pIGZpbGU6PC9wPgo8b2w+CiAgIDxsaT5DcmVhdGUgYSBuZXcgZGlyZWN0b3J5IHVuZGVyIHlvdXIgQ01TTVMgcm9vdCBlbnRpdGxlZDogIG1vZHVsZV9jdXN0b20vQ0dIZWFkTWFzdGVyL2NvbmZpZzwvbGk+CiAgIDxsaT5DcmVhdGUgYSBuZXcgZmlsZSBpbiB0aGF0IGRpcmVjdG9yeSBjYWxsZWQgZmllbGRzLmluaSBhbmQgb3BlbiBpdCBpbiBhIHRleHQgZWRpdG9yLjwvbGk+CiAgIDxsaT5DcmVhdGUgdGhlIG5ldyBmaWVsZHMgaW4gaW5pIGZpbGUgZm9ybWF0IGFuZCBzYXZlIHRoZSBmaWxlLjwvbGk+Cjwvb2w+Cgo8bGk+RmlsZSBmb3JtYXQ8L2xpPgo8dWw+CiAgPGxpPlRoZSBzZWN0aW9ucyBhcmUgPGVtPihieSBkZWZhdWx0KTwvZW0+IHRoZSBmaWVsZCBuYW1lcy48L2xpPgogIDxsaT5BdmFpbGFibGUga2V5cyBhbmQgdmFsdWVzIHdpdGhpbiBlYWNoIHNlY3Rpb246CiAgICA8dWw+CiAgICAgIDxsaT5ncm91cCAtIHJlcXVpcmVkIC0gIERlZmluZSB0aGUgZ3JvdXAgbmFtZSBmb3IgdGhlIGZpZWxkLjwvbGk+CiAgICAgIDxsaT5ncm91cHMgLSBvcHRpb25hbCAtIERlZmluZSBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3VwIG5hbWVzIGZvciB0aGUgZmllbGQuICBZb3UgbXVzdCBzcGVjaWZ5IGVpdGhlciBncm91cCBvciBncm91cHMuPC9saT4KICAgICAgPGxpPnRhZyAtIG9wdGlvbmFsIC0gRGVmaW5lIHRoZSB0YWcgbmFtZS4gIERlZmF1bHQgaXMgbWV0YTwvbGk+CiAgICAgIDxsaT5rZXlhdHRyIC0gb3B0aW9uYWwgLSBTcGVjaWZ5IHRoZSBwcmltYXJ5IGtleSBmb3IgdGhpcyBmaWVsZCAodGhlIGF0dHJpYnV0ZSB0aGF0IHdpbGwgY29udGFpbiB0aGUgZmllbGQgbmFtZSkuICBEZWZhdWx0IGlzICZxdW90O25hbWUmcXVvdDs8L2xpPgogICAgICA8bGk+a2V5dmFsIC0gb3B0aW9uYWwgLSBTcGVjaWZ5IHRoZSB2YWx1ZSBmb3IgdGhlIHByaW1hcnkga2V5IGZvciB0aGlzIGZpZWxkLCA8ZW0+KGkuZS46IG92ZXJyaWRlIHRoZSBmaWVsZCBuYW1lKTwvZW0+IHVzZWZ1bCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgc2VjdGlvbiBuYW1lLjwvbGk+CiAgICAgIDxsaT5hdHRyMS4uTiAtIG9wdGlvbmFsIC0gU3BlY2lmeSB0aGUgYXR0cmlidXRlIHRoYXQgd2lsbCBjb250YWluIHRoZSB2YWx1ZSBmb3IgdGhpcyBmaWVsZC4gRGVmYXVsdCBpcyAmcXVvdDtjb250ZW50JnF1b3Q7LiAgSXQgaXMgcG9zc2libGUgdGhhdCBhIHRhZyBoYXZlIG11bHRpcGxlIHZhbHVlIGF0dHJpYnV0ZXMuPC9saT4KICAgICAgPGxpPmRmbHQxLi5OIC0gb3B0aW9uYWwgLSBTcGVjaWZ5IHRoZSBkZWZhdWx0IHZhbHVlIChvciB0aGUgc21hcnR5IHRlbXBsYXRlIHRvIGdlbmVyYXRlIHRoZSBkZWZhdWx0IHZhbHVlKSBmb3IgdGhpcyBmaWVsZC48L2xpPgogICAgICA8bGk+bm9hdHRycyAtIG9wdGlvbmFsIC0gSW5kaWNhdGUgdGhhdCB0aGVyZSBhcmUgbm8gYXR0cmlidXRlcyBmb3IgdGhpcyB0YWcsIGFuZCB0aGF0IHRoZSB2YWx1ZSB3aWxsIGJlIGVuY2xvc2VkIHdpdGhpbiB0aGUgdGFnIGNvbnRlbnRzLiAgVGhpcyBpcyB1c2VkIGZvciB0YWdzIGxpa2UgJmx0O3RpdGxlJmd0Oy48L2xpPgogICAgICA8bGk+ZGZsdCAtIG9wdGlvbmFsIC0gVXNlZCBvbmx5IHdoZW4gdGhlIG5vYXR0cnMgZmxhZyBpcyBzZXQsIHRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUgKG9yIHRoZSBzbWFydHkgdGVtcGxhdGUgdG8gZ2VuZXJhdGUgYSB2YWx1ZSkgZm9yIHRoZSBpbnRlcmlvciBvZiB0aGUgdGFnLjwvbGk+CiAgICA8L3VsPgogIDwvbGk+CjwvdWw+Cgo8aDM+U21hcnR5IGluIGRlZmF1bHQgdmFsdWVzPC9oMz4KPHA+U21hcnR5IGlzIHVzZWQgdG8gY2FsY3VsYXRlIGRlZmF1bHQgdmFsdWVzIGZvciBtZXRhIGZpZWxkcyB0aGF0IGhhdmUgbm90IGhhZCBhIHZhbHVlIGV4cGxpY2l0bHkgc2V0LiAgV2hlbiB0aGlzIGhhcHBlbnMgeW91IG1heSB1c2UgYWxsIGtub3duIENNU01TIGFuZCBzbWFydHkgcGx1Z2lucy4gIEFsc28gdGhlIGN1cnJlbnQgY29udGVudCBvYmplY3QgaXMgcHJvdmlkZWQgdG8gc21hcnR5IGFzIDxjb2RlPiRjb250ZW50X29iajwvY29kZT4gICBUaGUgY29uZmlnIHZhcmlhYmxlcyA8ZW0+KG9ubHkgdGhlIHZhcmlhYmxlcyBiZWdpbm5pbmcgd2l0aCBjZ2htXyk8L2VtPiBhcmUgcHJvdmlkZWQgdW5kZXIgdGhlIDxjb2RlPiRjb25maWc8L2NvZGU+IHNtYXJ0eSB2YXJpYWJsZS48L3A+Cgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoZSBtb2R1bGUgYXV0aG9yIGlzIGluIG5vIHdheSBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciB0aGlzIGNvZGUgaW4gYW55IGZhc2hpb24uICBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+QSBidWcgdHJhY2tpbmcgYW5kIGZlYXR1cmUgcmVxdWVzdCBzeXN0ZW0gaGFzIGJlZW4gY3JlYXRlZCBmb3IgdGhpcyBtb2R1bGUgPGEgaHJlZj0iaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9jZ2hlYWRtYXN0ZXIiPmhlcmU8L2E+LiAgUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJpdmlkZSBhbGwgcmVsYXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS4gIEhvd2V2ZXIsIHBsZWFzZSB1c2UgdGhpcyBhcyBhIGxhc3QgcmVzb3J0LCBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgZm9sbG93ZWQgYWxsIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBmb3JnZSwgaW4gdGhlIGZvcnVtcywgZXRjLjwvbGk+CjwvdWw+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0ibWFpbHRvOmNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmciPiZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi48L3A+CjxwPkhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAphcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwpNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4Kc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS48L3A+CjxwPlRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLApidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgpNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCllvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCkZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCk9yIHJlYWQgaXQgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5vbmxpbmU8L2E+PC9wPgo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.smarty_plugins.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBDR0hlYWRNYXN0ZXI7CgpmaW5hbCBjbGFzcyBzbWFydHlfcGx1Z2lucwp7CiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiAmbW9kKCkKICAgIHsKICAgICAgICByZXR1cm4gXGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfQ0dIRUFETUFTVEVSKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNnaG1fY29uZmlnX3NldCgkcGFyYW1zLCYkdGVtcGFsdGUpCiAgICB7CiAgICAgICAgJGtleSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywna2V5Jyk7CiAgICAgICAgJGtleSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnbmFtZScsJGtleSk7CiAgICAgICAgJHZhbCA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywndmFsJyk7CiAgICAgICAgJHZhbCA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywndmFsdWUnLCR2YWwpOwogICAgICAgIHNlbGY6Om1vZCgpLT5zZXRfY29uZmlnKCRrZXksJHZhbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgYSBtZXRhIHZhcmlhYmxlCiAgICAgKgogICAgICoge2Nnc21fc2V0IGtleT1jZ3NtX25hbWUgdmFsdWU9J2Zvbyd9CiAgICAgKiB7Y2dzbV9zZXQga2V5PWZiOmFkbWlucyB2YWx1ZT0nYmFyJ30KICAgICAqIHtjZ3Nfc2V0IHJlbD1mYjphZG1pbnMgdmFsdWU9J2FiYyd9CiAgICAgKiB7e2Nnc19zZXQgbmFtZT1mYjphZG1pbnMgJ2FiYyd9CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2dobV9zZXQoJHBhcmFtcywmJHRlbXBsYXRlKQogICAgewogICAgICAgICR2YWxzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHB2YWwgKSB7CiAgICAgICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICAgICAgY2FzZSAnbmFtZSc6CiAgICAgICAgICAgIGNhc2UgJ2tleSc6CiAgICAgICAgICAgICAgICAkZmxkID0gc2VsZjo6bW9kKCktPmdldF9yYXdfZmllbGQoJHB2YWwpOwogICAgICAgICAgICAgICAgLy8gY2hlY2sgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSB2YWx1ZSBuZWVkZWQKICAgICAgICAgICAgICAgIGlmKCAhaXNzZXQoJGZsZFsnYXR0cjInXSkgKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IHRoZSBuYW1lIG9mIHRoZSB2YWx1ZSBhdHRyaWJ1dGUKICAgICAgICAgICAgICAgICAgICAkYXR0ciA9ICRmbGRbJ2F0dHIxJ107CgogICAgICAgICAgICAgICAgICAgICR2YWwgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3ZhbCcpOwogICAgICAgICAgICAgICAgICAgICR2YWwgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3ZhbHVlJywkdmFsKTsKICAgICAgICAgICAgICAgICAgICAkdmFsID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCRhdHRyLCR2YWwpOwogICAgICAgICAgICAgICAgICAgICR2YWwgPSB0cmltKCR2YWwpOwogICAgICAgICAgICAgICAgICAgIGlmKCAkdmFsICYmICR2YWwgIT09ICcwJyApIHNlbGY6Om1vZCgpLT5zZXRfZmllbGRfYXR0cigkcHZhbCwkYXR0ciwkdmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgICAgIGNhc2UgJ3JlbCc6CiAgICAgICAgICAgICAgICAvLyBzdXBwb3J0IG11bHRpcGxlIGF0dHJpYnV0ZXMgKGdvdHRhIHNlYXJjaCB0byBtYWtlIHN1cmUgaXQgaXMgaW4gdGhlIGF0dHJzKQogICAgICAgICAgICAgICAgJGZsZCA9IHNlbGY6Om1vZCgpLT5nZXRfcmF3X2ZpZWxkKCRwdmFsKTsKICAgICAgICAgICAgICAgIGZvcmVhY2goICRmbGQgYXMgJGZrZXkgPT4gJGZ2YWwgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYoICFzdGFydHN3aXRoKCRma2V5LCdhdHRyJykgKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAkYXR0ciA9ICRmdmFsOwogICAgICAgICAgICAgICAgICAgICRuZXd2YWwgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJGF0dHIpOwogICAgICAgICAgICAgICAgICAgICRuZXd2YWwgPSB0cmltKCRuZXd2YWwpOwogICAgICAgICAgICAgICAgICAgIGlmKCAkbmV3dmFsICYmICRuZXd2YWwgIT09ICcwJyApIHNlbGY6Om1vZCgpLT5zZXRfZmllbGRfYXR0cigkcHZhbCwkYXR0ciwkbmV3dmFsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjZ2htX2hpZGUoJHBhcmFtcywmJHRlbXBsYXRlKQogICAgewogICAgICAgICRrZXkgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ2tleScpOwogICAgICAgICRrZXkgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ25hbWUnLCRrZXkpOwogICAgICAgIHNlbGY6Om1vZCgpLT5oaWRlX2ZpZWxkKCRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2dobV91bnNldCgkcGFyYW1zLCYkdGVtcGxhdGUpCiAgICB7CiAgICAgICAgJGtleSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywna2V5Jyk7CiAgICAgICAgJGtleSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnbmFtZScsJGtleSk7CiAgICAgICAgc2VsZjo6bW9kKCktPnVuc2V0X2ZpZWxkKCRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2dobV9yZW5kZXIoJHBhcmFtcywmJHRlbXBsYXRlKQogICAgewogICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIG9uY2UgcGVyIHJlcXVlc3QuCiAgICAgICAgc3RhdGljICRfZG9uZSA9IDA7CiAgICAgICAgaWYoICRfZG9uZSAhPSAwICkgcmV0dXJuOwogICAgICAgICRfZG9uZSA9IDE7CgogICAgICAgICRncm91cHMgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ2dyb3VwJyk7CiAgICAgICAgJGFzc2lnbiA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnYXNzaWduJyk7CiAgICAgICAgaWYoICRncm91cHMgKSAkZ3JvdXBzID0gc2VsZjo6bW9kKCktPnN0cl90b19hcnJheSgkZ3JvdXBzKTsKICAgICAgICBpZiggISRncm91cHMgKSAkZ3JvdXBzID0gc2VsZjo6bW9kKCktPmdldF9ncm91cHMoKTsKCiAgICAgICAgJG91dCA9IG51bGw7CiAgICAgICAgJGZsZHMgPSBzZWxmOjptb2QoKS0+Z2V0X2ZpZWxkcygkZ3JvdXBzKTsKICAgICAgICBmb3JlYWNoKCAkZmxkcyBhcyAkbmFtZSApIHsKICAgICAgICAgICAgJHRtcCA9IHNlbGY6Om1vZCgpLT5yZW5kZXJfZmllbGQoJG5hbWUpOwogICAgICAgICAgICBpZiggJHRtcCApICRvdXQgLj0gIiR0bXBcbiI7CiAgICAgICAgfQoKICAgICAgICAvLwogICAgICAgIC8vIG5vdyBkbyBnb29nbGUgYW5hbHl0aWNzIHN0dWZmCiAgICAgICAgLy8KICAgICAgICAkb3V0IC49IHNlbGY6Om1vZCgpLT5nZW5lcmF0ZV9nYSgpOwoKICAgICAgICBpZiggJGFzc2lnbiApIHsKICAgICAgICAgICAgJHRlbXBsYXRlLT5hc3NpZ24oJGFzc2lnbiwkb3V0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJG91dDsKICAgICAgICB9CiAgICB9Cgp9IC8vIGVuZCBvZiBjbGFzcwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/google_analytics.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogbmV3ZXIgZ2Egc3R1ZmYgLS0gc2xpZ2h0bHkgZmFzdGVyLCBub3QgY29tcGF0aWJpbGUgd2l0aCBzb21lIG9sZGVyIGJyb3dzZXJzICp9CjxzY3JpcHQgYXN5bmMgc3JjPScvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnPjwvc2NyaXB0Pgo8c2NyaXB0PndpbmRvdy5nYT13aW5kb3cuZ2F8fGZ1bmN0aW9uKCl7IChnYS5xPWdhLnF8fFtdKS5wdXNoKGFyZ3VtZW50cykgfTtnYS5sPStuZXcgRGF0ZTsKdmFyIF9wcm9wcyA9IHsgfTsKe2lmICFlbXB0eSgkY29uZmlnLmNnaG1fZ2Ffc3ViZG9tYWlucykgJiYgJGNvbmZpZy5jZ2htX2dhX3N1YmRvbWFpbnN9eyogaGFuZGxlIHN1YmRvbWFpbnMgKn1fcHJvcHMuY29va2llRG9tYWluID0gJ3skZG9tYWlufScsey9pZn0Ke2lmICFlbXB0eSgkY29uZmlnLmNnaG1fZ2FfbGlua2RvbWFpbnMpICYmICRjb25maWcuY2dobV9nYV9saW5rZG9tYWluc317KiBsaW5raW5nIHRvIHRvcCBsZXZlbCBkb21haW5zICp9X3Byb3BzLmFsbG93TGlua2VyID0gdHJ1ZTt7L2lmfQpnYSgnY3JlYXRlJywgJ3skY29uZmlnLmNnaG1fZ2FfcHJvcGVydHlpZH0nLCBfcHJvcHMpOwp7aWYgIWVtcHR5KCRjb25maWcuY2dobV9nYV9saW5raWQpICYmICRjb25maWcuY2dobV9nYV9saW5raWR9Z2EoJ3JlcXVpcmUnLCAnbGlua2lkJywgJ2xpbmtpZC5qcycpO3svaWZ9CntpZiAhZW1wdHkoJGNvbmZpZy5jZ2htX2dhX2Rpc3BsYXlmZWF0dXJlcykgJiYgJGNvbmZpZy5jZ2htX2dhX2Rpc3BsYXlmZWF0dXJlc31nYSgncmVxdWlyZScsICdkaXNwbGF5ZmVhdHVyZXMnKTt7L2lmfQp7aWYgIWVtcHR5KCRsaW5rZG9tYWlucyl9CmdhKCdyZXF1aXJlJywnbGlua2VyJyk7CmdhKCdsaW5rZXI6YXV0b0xpbmsnLCB7anNvbl9lbmNvZGUoJGxpbmtkb21haW5zKX0gKTsKey9pZn0KZ2EoJ3NlbmQnLCdwYWdldmlldycpOwo8L3NjcmlwdD4=]]></data>
	</file>
</module>
