<?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>PageBlocks</name>
	<version>0.1.3-svn</version>
  <mincmsversion>1.0-beta4</mincmsversion>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkFsbG93cyB1bmxpbWl0ZWQgYmxvY2tzIG9mIENvbnRlbnQgdG8gYmUgYXR0YWNoZWQgdG8gcGFnZXMgYW5kIGVkaXRlZCBpbmRpdmlkdWFsbHk8L3A+CjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPgo8cD5QdXQgdGhpcyBpcyBpbiB5b3VyIHBhZ2Ugb3IgdGVtcGxhdGU6PC9wPgo8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0ncGFnZWJsb2Nrcyd9PC9wcmU+CjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5EaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgoKPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+CjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0ibWFpbHRvOmVsaWphaGxvZmdyZW5AZWxpamFobG9mZ3Jlbi5jb20iPiZsdDtlbGlqYWhsb2ZncmVuQGVsaWphaGxvZmdyZW4uY29tJmd0OzwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCI+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4KPGgzPlBhcmFtZXRlcnM8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBudW1iZXI9IjEwIiAtIAo8aDQ+U2hvdyBhIGNlcnRhaW4gbnVtYmVyIG9mIHJlY2VudGx5IHVwZGF0ZWQgYmxvY2tzPC9oND4KCSA8cD5Zb3UgY2FuIHNob3cgYSBsaXN0IG9mIGEgY2VydGFpbiBudW1iZXIgb2YgdXBkYXRlZCBibG9ja3MgYnkgY2FsbGluZyBQYWdlQmxvY2tzIGxpa2UgdGhpczo8L3ByZT4gPHByZT57Y21zX21vZHVsZSBtb2R1bGU9J3BhZ2VibG9ja3MnIGFjdGlvbj0ncmVjZW50bHlfdXBkYXRlZCcgbnVtYmVyPScxNSd9CjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gYWN0aW9uPSJkZWZhdWx0IiAtIAo8aDQ+U2hvdyBsaXN0IG9mIHJlY2VudGx5IHVwZGF0ZWQgYmxvY2tzPC9oND4KCSA8cD5Zb3UgY2FuIHNob3cgYSBsaXN0IG9mIHVwZGF0ZWQgYmxvY2tzIGJ5IGNhbGxpbmcgUGFnZUJsb2NrcyBsaWtlIHRoaXM6PC9wcmU+CjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSdwYWdlYmxvY2tzJyBhY3Rpb249J3JlY2VudGx5X3VwZGF0ZWQnfTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0aG9yOiBFbGlqYWggTG9mZ3JlbiAmbHQ7ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAwLjEuMy1zdm48YnIgLz48YnIgLz5DaGFuZ2UgSGlzdG9yeTo8YnIgLz48dWw+CjxsaT5WZXJzaW9uIDAuMSwgSnVseSAyMDA2IChlbGlqYWhsb2ZncmVuKS4gCiAgPHVsPgogICAgPGxpPkluaXRpYWwgcmVsZWFzZS48L2xpPgogIDwvdWw+CjwvbGk+PGJyIC8+</about>
	<description>Allows unlimited blocks of Content to be attached to pages and edited individually.</description>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.addblockcontent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLnNmLm5ldAojCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiNUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiNHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKI2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiNGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiMKIyRJZDogYWN0aW9uLmFkZGJsb2NrY29udGVudC5waHAgMTUwIDIwMDYtMDgtMTUgMTg6NDM6NDZaIGVsaWphaGxvZmdyZW4gJAppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKCiRDTVNfQURNSU5fUEFHRT0xOwoKcmVxdWlyZV9vbmNlKCIuLi9pbmNsdWRlLnBocCIpOwoKY2hlY2tfbG9naW4oKTsKJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKJHRoZW1lT2JqZWN0ID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddOwpyZXF1aXJlX29uY2UoZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSkgLiAnLy4uL2xpYi94YWpheC94YWpheC5pbmMucGhwJyk7CiR4YWpheCA9IG5ldyB4YWpheCgpOwokeGFqYXgtPnJlZ2lzdGVyRnVuY3Rpb24oJ2FqYXhwcmV2aWV3Jyk7CgokeGFqYXgtPnByb2Nlc3NSZXF1ZXN0cygpOwokaGVhZHRleHQgPSAkeGFqYXgtPmdldEphdmFzY3JpcHQoJy4uL2xpYi94YWpheCcpLiJcbiI7CgppZiAoaXNzZXQoJF9QT1NUWyJjYW5jZWwiXSkpCnsKJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAnYmxvY2tzJyk7CiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7Cgp9CgokdG1wZm5hbWUgPSAnJzsKCiRlcnJvciA9IEZBTFNFOwoKJGZpcnN0dGltZSA9ICIxIjsgI0ZsYWcgdG8gbWFrZSBzdXJlIHdlJ3JlIG5vdCB0cnlpbmcgdG8gZmlsbCBwYXJhbXMgb24gdGhlIGZpcnN0IGRpc3BsYXkKaWYgKGlzc2V0KCRfUE9TVFsiZmlyc3R0aW1lIl0pKSAkZmlyc3R0aW1lID0gJF9QT1NUWyJmaXJzdHRpbWUiXTsKCiRwcmV2aWV3ID0gZmFsc2U7CmlmIChpc3NldCgkX1BPU1RbInByZXZpZXdidXR0b24iXSkpICRwcmV2aWV3ID0gdHJ1ZTsKCiRzdWJtaXQgPSBmYWxzZTsKaWYgKGlzc2V0KCRfUE9TVFsic3VibWl0YnV0dG9uIl0pKSAkc3VibWl0ID0gdHJ1ZTsKCiRhcHBseSA9IGZhbHNlOwppZiAoaXNzZXQoJF9QT1NUWyJhcHBseWJ1dHRvbiJdKSkgJGFwcGx5ID0gdHJ1ZTsKCiRwYXJlbnRfaWQgPSAtMTsKaWYgKGlzc2V0KCRfR0VUWyJwYXJlbnRfaWQiXSkpICRwYXJlbnRfaWQgPSAkX0dFVFsicGFyZW50X2lkIl07CgokY29udGVudG9iaiA9ICcnOwoKZnVuY3Rpb24gYWpheHByZXZpZXcoJHBhcmFtcykKewoJZ2xvYmFsICRnQ21zOwoJJGNvbmZpZyA9JiAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgoJJGNvbnRlbnRvYmogPSAnJzsKCWlmIChpc3NldCgkcGFyYW1zWyJzZXJpYWxpemVkX2NvbnRlbnQiXSkgJiYgJHBhcmFtc1sic2VyaWFsaXplZF9jb250ZW50Il0gIT0gJycpCgl7CgkJJGNvbnRlbnRvYmogPSBVbnNlcmlhbGl6ZU9iamVjdCgkcGFyYW1zWyJzZXJpYWxpemVkX2NvbnRlbnQiXSk7CgkJJGNvbnRlbnRfdHlwZSA9ICRwYXJhbXNbJ2NvbnRlbnRfdHlwZSddOwoJCWlmIChzdHJ0b2xvd2VyKGdldF9jbGFzcygkY29udGVudG9iaikpICE9IHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZSkpCgkJewoJCQljb3B5Y29udGVudG9iaigkY29udGVudG9iaiwgJGNvbnRlbnRfdHlwZSwgJHBhcmFtcyk7CgkJfQoJfQoJZWxzZQoJewoJCSRjb250ZW50X3R5cGUgPSAkcGFyYW1zWydjb250ZW50X3R5cGUnXTsKCQkkY29udGVudG9iaiA9IG5ldyAkY29udGVudF90eXBlOwoJfQoJdXBkYXRlY29udGVudG9iaigkY29udGVudG9iaiwgdHJ1ZSwgJHBhcmFtcyk7CgkkdG1wZm5hbWUgPSBjcmVhdGV0bXBmbmFtZSgkY29udGVudG9iaik7CgkkdXJsID0gJGNvbmZpZ1sicm9vdF91cmwiXS4nL3ByZXZpZXcucGhwP3RtcGZpbGU9Jy51cmxlbmNvZGUoYmFzZW5hbWUoJHRtcGZuYW1lKSk7CgkKCSRvYmpSZXNwb25zZSA9IG5ldyB4YWpheFJlc3BvbnNlKCk7Cgkkb2JqUmVzcG9uc2UtPmFkZEFzc2lnbigicHJldmlld2ZyYW1lIiwgInNyYyIsICR1cmwpOwoJJG9ialJlc3BvbnNlLT5hZGRBc3NpZ24oInNlcmlhbGl6ZWRfY29udGVudCIsICJ2YWx1ZSIsIFNlcmlhbGl6ZU9iamVjdCgkY29udGVudG9iaikpOwoJJGNvdW50ID0gMDsKCWZvcmVhY2ggKCRjb250ZW50b2JqLT5UYWJOYW1lcygpIGFzICR0YWJuYW1lKQoJewoJCSRvYmpSZXNwb25zZS0+YWRkU2NyaXB0KCJFbGVtZW50LnJlbW92ZUNsYXNzTmFtZSgnZWRpdGFiIi4kY291bnQuIicsICdhY3RpdmUnKTtFbGVtZW50LnJlbW92ZUNsYXNzTmFtZSgnZWRpdGFiIi4kY291bnQuIl9jJywgJ2FjdGl2ZScpOyQoJ2VkaXRhYiIuJGNvdW50LiJfYycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7Iik7CgkJJGNvdW50Kys7Cgl9Cgkkb2JqUmVzcG9uc2UtPmFkZFNjcmlwdCgiRWxlbWVudC5hZGRDbGFzc05hbWUoJ2VkaXR0YWJwcmV2aWV3JywgJ2FjdGl2ZScpO0VsZW1lbnQuYWRkQ2xhc3NOYW1lKCdlZGl0dGFicHJldmlld19jJywgJ2FjdGl2ZScpOyQoJ2VkaXR0YWJwcmV2aWV3X2MnKS5zdHlsZS5kaXNwbGF5ID0gJyc7Iik7CglyZXR1cm4gJG9ialJlc3BvbnNlLT5nZXRYTUwoKTsKfQoKZnVuY3Rpb24gdXBkYXRlY29udGVudG9iaigmJGNvbnRlbnRvYmosICRwcmV2aWV3LCAkcGFyYW1zID0gbnVsbCkKewoJaWYgKCRwYXJhbXMgPT0gbnVsbCkKCQkkcGFyYW1zID0gJF9QT1NUOwoKCSR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CgkkYWRtaW5hY2Nlc3MgPSBjaGVja19vd25lcnNoaXAoJHVzZXJpZCwgJGNvbnRlbnRvYmotPklkKCkpIHx8IGNoZWNrX3Blcm1pc3Npb24oJHVzZXJpZCwgJ01vZGlmeSBBbnkgUGFnZScpOwoJCQoJI0ZpbGwgY29udGVudG9iaiB3aXRoIHBhcmFtZXRlcnMKCSRjb250ZW50b2JqLT5GaWxsUGFyYW1zKCRwYXJhbXMpOwoJaWYgKCRwcmV2aWV3KQoJewoJCSRlcnJvciA9ICRjb250ZW50b2JqLT5WYWxpZGF0ZURhdGEoKTsKCX0KCglpZiAoaXNzZXQoJHBhcmFtc1sib3duZXJpZCJdKSkKCXsKCQkkY29udGVudG9iai0+U2V0T3duZXIoJHBhcmFtc1sib3duZXJpZCJdKTsKCX0KCgkkY29udGVudG9iai0+U2V0TGFzdE1vZGlmaWVkQnkoJHVzZXJpZCk7CgoJI0ZpbGwgQWRkaXRpb25hbCBFZGl0b3JzIChraW5kIG9mIGtsdWRneSkKCWlmIChpc3NldCgkcGFyYW1zWyJhZGRpdGlvbmFsX2VkaXRvcnMiXSkpCgl7CgkJJGFkZHRhcnJheSA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHBhcmFtc1siYWRkaXRpb25hbF9lZGl0b3JzIl0gYXMgJGFkZHRfdXNlcl9pZCkKCQl7CgkJCSRhZGR0YXJyYXlbXSA9ICRhZGR0X3VzZXJfaWQ7CgkJfQoJCSRjb250ZW50b2JqLT5TZXRBZGRpdGlvbmFsRWRpdG9ycygkYWRkdGFycmF5KTsKCX0KCWVsc2UgaWYgKCRhZG1pbmFjY2VzcykKCXsKCQkkY29udGVudG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoYXJyYXkoKSk7Cgl9Cn0KCmZ1bmN0aW9uIGNvcHljb250ZW50b2JqKCYkY29udGVudG9iaiwgJGNvbnRlbnRfdHlwZSwgJHBhcmFtcyA9IG51bGwpCnsKCWlmICgkcGFyYW1zID09IG51bGwpCgkJJHBhcmFtcyA9ICRfUE9TVDsKCSRjb250ZW50b2JqLT5GaWxsUGFyYW1zKCRwYXJhbXMpOwoJJG5ld2NvbnRlbnR0eXBlID0gc3RydG9sb3dlcigkY29udGVudF90eXBlKTsKCSR0bXBvYmogPSBuZXcgJG5ld2NvbnRlbnR0eXBlOwoJJHRtcG9iai0+U2V0SWQoJGNvbnRlbnRvYmotPklkKCkpOwoJJHRtcG9iai0+U2V0TmFtZSgkY29udGVudG9iai0+TmFtZSgpKTsKCSR0bXBvYmotPlNldE1lbnVUZXh0KCRjb250ZW50b2JqLT5NZW51VGV4dCgpKTsKCSR0bXBvYmotPlNldFRlbXBsYXRlSWQoJGNvbnRlbnRvYmotPlRlbXBsYXRlSWQoKSk7CgkkdG1wb2JqLT5TZXRQYXJlbnRJZCgkY29udGVudG9iai0+UGFyZW50SWQoKSk7CgkkdG1wb2JqLT5TZXRPbGRQYXJlbnRJZCgkY29udGVudG9iai0+T2xkUGFyZW50SWQoKSk7CgkkdG1wb2JqLT5TZXRBbGlhcygkY29udGVudG9iai0+QWxpYXMoKSk7CgkkdG1wb2JqLT5TZXRPd25lcigkY29udGVudG9iai0+T3duZXIoKSk7CgkkdG1wb2JqLT5TZXRBY3RpdmUoJGNvbnRlbnRvYmotPkFjdGl2ZSgpKTsKCSR0bXBvYmotPlNldEl0ZW1PcmRlcigkY29udGVudG9iai0+SXRlbU9yZGVyKCkpOwoJJHRtcG9iai0+U2V0T2xkSXRlbU9yZGVyKCRjb250ZW50b2JqLT5PbGRJdGVtT3JkZXIoKSk7CgkkdG1wb2JqLT5TZXRTaG93SW5NZW51KCRjb250ZW50b2JqLT5TaG93SW5NZW51KCkpOwoJLy9Tb21lIGNvbnRlbnQgdHlwZXMgZGVmYXVsdCB0byBmYWxzZSBmb3IgYSByZWFzb24uLi4gZG9uJ3Qgb3ZlcnJpZGUgaXQKCWlmICghKCEkdG1wb2JqLT5tQ2FjaGFibGUgJiYgJGNvbnRlbnRvYmotPkNhY2hhYmxlKCkpKQoJCSR0bXBvYmotPlNldENhY2hhYmxlKCRjb250ZW50b2JqLT5DYWNoYWJsZSgpKTsKCSR0bXBvYmotPlNldEhpZXJhcmNoeSgkY29udGVudG9iai0+SGllcmFyY2h5KCkpOwoJJHRtcG9iai0+U2V0TGFzdE1vZGlmaWVkQnkoJGNvbnRlbnRvYmotPkxhc3RNb2RpZmllZEJ5KCkpOwoJJHRtcG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoJGNvbnRlbnRvYmotPkdldEFkZGl0aW9uYWxFZGl0b3JzKCkpOwoJJGNvbnRlbnRvYmogPSAkdG1wb2JqOwp9CgpmdW5jdGlvbiBjcmVhdGV0bXBmbmFtZSgmJGNvbnRlbnRvYmopCnsKCWdsb2JhbCAkZ0NtczsKCSRjb25maWcgPSYgJGdDbXMtPkdldENvbmZpZygpOwoKCSRkYXRhWyJjb250ZW50X2lkIl0gPSAkY29udGVudG9iai0+SWQoKTsKCSRkYXRhWyJ0aXRsZSJdID0gJGNvbnRlbnRvYmotPk5hbWUoKTsKCSRkYXRhWyJtZW51dGV4dCJdID0gJGNvbnRlbnRvYmotPk1lbnVUZXh0KCk7CgkkZGF0YVsiY29udGVudCJdID0gJGNvbnRlbnRvYmotPlNob3coKTsKCSRkYXRhWyJ0ZW1wbGF0ZV9pZCJdID0gJGNvbnRlbnRvYmotPlRlbXBsYXRlSWQoKTsKCSRkYXRhWyJoaWVyYXJjaHkiXSA9ICRjb250ZW50b2JqLT5IaWVyYXJjaHkoKTsKCQoJJHRlbXBsYXRlb2JqID0gVGVtcGxhdGVPcGVyYXRpb25zOjpMb2FkVGVtcGxhdGVCeUlkKCRjb250ZW50b2JqLT5UZW1wbGF0ZUlkKCkpOwoJJGRhdGFbJ3RlbXBsYXRlJ10gPSAkdGVtcGxhdGVvYmotPmNvbnRlbnQ7CgoJJHN0eWxlc2hlZXRvYmogPSBnZXRfc3R5bGVzaGVldCgkY29udGVudG9iai0+VGVtcGxhdGVJZCgpKTsKCSRkYXRhWydlbmNvZGluZyddID0gJHN0eWxlc2hlZXRvYmpbJ2VuY29kaW5nJ107CgkvLyAkZGF0YVsnc3R5bGVzaGVldCddID0gJHN0eWxlc2hlZXRvYmpbJ3N0eWxlc2hlZXQnXTsKCgkkdG1wZm5hbWUgPSAnJzsKCWlmIChpc193cml0YWJsZSgkY29uZmlnWyJwcmV2aWV3c19wYXRoIl0pKQoJewoJCSR0bXBmbmFtZSA9IHRlbXBuYW0oJGNvbmZpZ1sicHJldmlld3NfcGF0aCJdLCAiY21zcHJldmlldyIpOwoJfQoJZWxzZQoJewoJCSR0bXBmbmFtZSA9IHRlbXBuYW0oVE1QX0NBQ0hFX0xPQ0FUSU9OLCAiY21zcHJldmlldyIpOwoJfQoJJGhhbmRsZSA9IGZvcGVuKCR0bXBmbmFtZSwgInciKTsKCWZ3cml0ZSgkaGFuZGxlLCBzZXJpYWxpemUoJGRhdGEpKTsKCWZjbG9zZSgkaGFuZGxlKTsKCQoJcmV0dXJuICR0bXBmbmFtZTsKfQoKI0dldCBjdXJyZW50IHVzZXJpZCBhbmQgbWFrZSBzdXJlIHRoZXkgaGF2ZSBwZXJtaXNzaW9uIHRvIGFkZCBzb21ldGhpbmcKJGFjY2VzcyA9IGNoZWNrX3Blcm1pc3Npb24oJHVzZXJpZCwgJ0FkZCBQYWdlcycpOwoKI0dldCBhIGxpc3Qgb2YgY29udGVudCB0eXBlcyBhbmQgcGljayBhIGRlZmF1bHQgaWYgbmVjZXNzYXJ5CiRleGlzdGluZ3R5cGVzID0gQmxvY2tDb250ZW50TWFuYWdlcjo6TGlzdENvbnRlbnRUeXBlcygpOwokY29udGVudF90eXBlID0gIiI7CmlmIChpc3NldCgkX1BPU1RbImNvbnRlbnRfdHlwZSJdKSkKewoJJGNvbnRlbnRfdHlwZSA9ICRfUE9TVFsiY29udGVudF90eXBlIl07Cn0KZWxzZQp7CglpZiAoaXNzZXQoJGV4aXN0aW5ndHlwZXMpICYmIGNvdW50KCRleGlzdGluZ3R5cGVzKSA+IDApCgl7CgkgIC8vCSAgJGNvbnRlbnRfdHlwZSA9ICRwYXJhbXNbJ2NvbnRlbnRfdHlwZSddOwoJICAkY29udGVudF90eXBlID0gJ1RleHQnOwoJfQoJZWxzZQoJewoJCSRlcnJvciA9ICJObyBjb250ZW50IHR5cGVzIGxvYWRlZCEiOwoJfQp9CgokY29udGVudG9iaiA9ICIiOwppZiAoaXNzZXQoJF9QT1NUWyJzZXJpYWxpemVkX2NvbnRlbnQiXSkpCnsKCSRjb250ZW50b2JqID0gdW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkX1BPU1RbInNlcmlhbGl6ZWRfY29udGVudCJdKSk7CglpZiAoc3RydG9sb3dlcihnZXRfY2xhc3MoJGNvbnRlbnRvYmopKSAhPSAkY29udGVudF90eXBlKQoJewoJCSNGaWxsIHVwIHRoZSBleGlzdGluZyBvYmplY3Qgd2l0aCB2YWx1ZXMgaW4gZm9ybQoJCSNDcmVhdGUgbmV3IG9iamVjdAoJCSNDb3B5IGltcG9ydGFudCBmaWVsZHMgdG8gbmV3IG9iamVjdAoJCSNQdXQgbmV3IG9iamVjdCBvbiB0b3Agb2Ygb2xkIG9uCgkJY29weWNvbnRlbnRvYmooJGNvbnRlbnRvYmosICRjb250ZW50X3R5cGUpOwoJfQp9CmVsc2UKewoJJGNvbnRlbnRvYmogPSBuZXcgJGNvbnRlbnRfdHlwZTsKCSRjb250ZW50b2JqLT5TZXRPd25lcigkdXNlcmlkKTsKCSRjb250ZW50b2JqLT5TZXRBY3RpdmUoVHJ1ZSk7CgkkY29udGVudG9iai0+U2V0U2hvd0luTWVudShUcnVlKTsKCSRjb250ZW50b2JqLT5TZXRMYXN0TW9kaWZpZWRCeSgkdXNlcmlkKTsKCWlmICgkcGFyZW50X2lkIT0tMSkgJGNvbnRlbnRvYmotPlNldFBhcmVudElkKCRwYXJlbnRfaWQpOwp9CgppZiAoJGFjY2VzcykKewoJaWYgKCRzdWJtaXQgfHwgJGFwcGx5KQoJewoJCSNGaWxsIGNvbnRlbnRvYmogd2l0aCBwYXJhbWV0ZXJzCgkJJGNvbnRlbnRvYmotPkZpbGxQYXJhbXMoJF9QT1NUKTsKCQkkY29udGVudG9iai0+bVBhcmVudFBhZ2VJZCA9ICRwYXJhbXNbJ3BhcmVudF9wYWdlX2lkJ107CgkJJGNvbnRlbnRvYmotPlNldE93bmVyKCR1c2VyaWQpOwoKCQkjRmlsbCBBZGRpdGlvbmFsIEVkaXRvcnMgKGtpbmQgb2Yga2x1ZGd5KQoJCWlmIChpc3NldCgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdKSkKCQl7CgkJCSRhZGR0YXJyYXkgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdIGFzICRhZGR0X3VzZXJfaWQpCgkJCXsKCQkJCSRhZGR0YXJyYXlbXSA9ICRhZGR0X3VzZXJfaWQ7CgkJCX0KCQkJJGNvbnRlbnRvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKCRhZGR0YXJyYXkpOwoJCX0KCgkJJGVycm9yID0gJGNvbnRlbnRvYmotPlZhbGlkYXRlRGF0YSgpOwoJCWlmICgkZXJyb3IgPT09IEZBTFNFKQoJCXsKCQkJJGNvbnRlbnRvYmotPlNhdmUoKTsKCQkJQmxvY2tDb250ZW50TWFuYWdlcjo6U2V0QWxsSGllcmFyY2h5UG9zaXRpb25zKCk7CgkJCS8vVXBkYXRlIHNlYXJjaCBpbmRleAoJCQkkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnU2VhcmNoJyk7CgkJCWlmICgkbW9kdWxlICE9IEZBTFNFKQoJCQkgIHsKCQkJICAgICRtb2R1bGUtPkFkZFdvcmRzKCR0aGlzLT5HZXROYW1lKCksICRjb250ZW50b2JqLT5JZCgpLCAnYmxvY2snLCAkY29udGVudG9iai0+TmFtZSgpIC4gJyAnIC4kY29udGVudG9iai0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpKTsKCQkJICB9CgkJCWlmICgkc3VibWl0KQoJCQl7CgkJCQlhdWRpdCgkY29udGVudG9iai0+SWQoKSwgJGNvbnRlbnRvYmotPk5hbWUoKSwgJ0FkZGVkIENvbnRlbnQnKTsKCQkJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnID0+ICdibG9ja19hZGRlZCcsICdhY3RpdmVfdGFiJyA9PiAnYmxvY2tzJywgJ2NvbCcgPT4gMCwgJ2NvbnRlbnRfaWQnID0+ICRjb250ZW50b2JqLT5tUGFyZW50UGFnZUlkKTsKCQkJCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7CgoJCQl9CgkJfQoJfQoJZWxzZSBpZiAoJGZpcnN0dGltZSA9PSAiMCIpICNFaXRoZXIgd2UncmUgYSBwcmV2aWV3IG9yIGEgdGVtcGxhdGUgcG9zdGJhY2sKCXsKCQkkY29udGVudG9iai0+RmlsbFBhcmFtcygkX1BPU1QpOwoJCWlmICgkcHJldmlldykgI0lmIHByZXZpZXcsIGNoZWNrIGZvciBlcnJvcnMuLi4KCQl7CgkJCSRlcnJvciA9ICRjb250ZW50b2JqLT5WYWxpZGF0ZURhdGEoKTsKCQl9CgkJaWYgKGlzc2V0KCRfUE9TVFsiYWRkaXRpb25hbF9lZGl0b3JzIl0pKQoJCXsKCQkJJGFkZHRhcnJheSA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKCRfUE9TVFsiYWRkaXRpb25hbF9lZGl0b3JzIl0gYXMgJGFkZHRfdXNlcl9pZCkKCQkJewoJCQkJJGFkZHRhcnJheVtdID0gJGFkZHRfdXNlcl9pZDsKCQkJfQoJCQkkY29udGVudG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoJGFkZHRhcnJheSk7CgkJfQoJfQoJZWxzZQoJewoJCSRmaXJzdHRpbWUgPSAiMCI7Cgl9Cn0KCmlmICghJGFjY2VzcykKewoJZWNobyAiPGRpdiBjbGFzcz1cInBhZ2VlcnJvcmNvbnRhaW5lciBwYWdlb3ZlcmZsb3dcIj48cCBjbGFzcz1cInBhZ2VlcnJvclwiPiIubGFuZygnbm9hY2Nlc3N0bycsYXJyYXkobGFuZygnYWRkY29udGVudCcpKSkuIjwvcD48L2Rpdj4iOwp9CmVsc2UKewojR2V0IGEgbGlzdCBvZiBjb250ZW50X3R5cGVzIGFuZCBidWlsZCB0aGUgZHJvcGRvd24gdG8gc2VsZWN0IG9uZQokdHlwZXNkcm9wZG93biA9ICc8c2VsZWN0IG5hbWU9ImNvbnRlbnRfdHlwZSIgb25jaGFuZ2U9ImRvY3VtZW50LmNvbnRlbnRmb3JtLnN1Ym1pdCgpIiBjbGFzcz0ic3RhbmRhcmQiPic7CmZvcmVhY2ggKCRleGlzdGluZ3R5cGVzIGFzICRvbmV0eXBlPT4kbmFtZSkKewogICR0eXBlc2Ryb3Bkb3duIC49ICI8b3B0aW9uIHZhbHVlPVwiJG9uZXR5cGVcIiI7CiAgaWYgKCRvbmV0eXBlID09IHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZSkpCiAgICB7CiAgICAgICR0eXBlc2Ryb3Bkb3duIC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIiAnOwogICAgfQogICR0eXBlc2Ryb3Bkb3duIC49ICI+Ii4oJG5hbWUpLiI8L29wdGlvbj4iOwp9CiR0eXBlc2Ryb3Bkb3duIC49ICI8L3NlbGVjdD4iOwoKaWYgKEZBTFNFID09IGVtcHR5KCRlcnJvcikpCnsKCWVjaG8gJHRoZW1lT2JqZWN0LT5TaG93RXJyb3JzKCRlcnJvcik7Cn0KZWxzZSBpZiAoJHByZXZpZXcpCnsKCSR0bXBmbmFtZSA9IGNyZWF0ZXRtcGZuYW1lKCRjb250ZW50b2JqKTsKCj8+Cgo8IS0tCjxkaXYgY2xhc3M9InBhZ2Vjb250YWluZXIiPgoJPHAgY2xhc3M9InBhZ2VoZWFkZXIiPjw/cGhwIGVjaG8gbGFuZygncHJldmlldycpPz48L3A+Cgk8aWZyYW1lIG5hbWU9InByZXZpZXdmcmFtZSIgY2xhc3M9InByZXZpZXciIHNyYz0iPD9waHAgZWNobyAkY29uZmlnWyJyb290X3VybCJdID8+L3ByZXZpZXcucGhwP3RtcGZpbGU9PD9waHAgZWNobyB1cmxlbmNvZGUoYmFzZW5hbWUoJHRtcGZuYW1lKSk/PiI+PC9pZnJhbWU+CjwvZGl2PgotLT4KPD9waHAKfQoKIyRjb250ZW50YXJyYXkgPSAkY29udGVudG9iai0+RWRpdEFzQXJyYXkodHJ1ZSwgMCk7CiMkY29udGVudGFycmF5MiA9ICRjb250ZW50b2JqLT5FZGl0QXNBcnJheSh0cnVlLCAxKTsKCiR0YWJuYW1lcyA9ICRjb250ZW50b2JqLT5UYWJOYW1lcygpOwoKPz4KCgk8ZGl2IGlkPSJwYWdlX3RhYnMiPgoJCTw/cGhwCgkJJGNvdW50ID0gMDsKCgkJI1dlIGhhdmUgcHJldmlldywgYnV0IG5vIHRhYnMKCQlpZiAoY291bnQoJHRhYm5hbWVzKSA9PSAwKQoJCXsKCQkJPz4KCQkJPGRpdiBpZD0iZWRpdGFiMCIgY2xhc3M9ImFjdGl2ZSI+PD9waHAgZWNobyBsYW5nKCdjb250ZW50Jyk/PjwvZGl2PgoJCQk8P3BocAoJCX0KCQllbHNlCgkJewoJCQlmb3JlYWNoICgkdGFibmFtZXMgYXMgJG9uZXRhYikKCQkJewoJCQkJPz4KCQkJCTxkaXYgaWQ9ImVkaXRhYjw/cGhwIGVjaG8gJGNvdW50Pz4iPjw/cGhwIGVjaG8gJG9uZXRhYj8+PC9kaXY+CgkJCQk8P3BocAoJCQkJJGNvdW50Kys7CgkJCX0KCQl9CgoJCWlmICgkY29udGVudG9iai0+bVByZXZpZXcpCgkJewoJCQllY2hvICc8ZGl2IGlkPSJlZGl0dGFicHJldmlldyInLigkdG1wZm5hbWUhPScnPycgY2xhc3M9ImFjdGl2ZSInOicnKS4nIG9uY2xpY2s9IiMjSU5MSU5FU1VCTUlUU1RVRkZHT0VTSEVSRSMjeGFqYXhfYWpheHByZXZpZXcoeGFqYXguZ2V0Rm9ybVZhbHVlcyhcJ2NvbnRlbnRmb3JtXCcpKTtyZXR1cm4gZmFsc2U7Ij4nLmxhbmcoJ3ByZXZpZXcnKS4nPC9kaXY+JzsKCQl9CgkJPz4KCTwvZGl2PgoJPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ij48L2Rpdj4KCTw/cGhwCgllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nIiBuYW1lPSJjb250ZW50Zm9ybSIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgaWQ9ImNvbnRlbnRmb3JtIiMjRk9STVNVQk1JVFNUVUZGR09FU0hFUkUjIz4nOwoJID8+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ic2VyaWFsaXplZF9jb250ZW50IiBuYW1lPSJzZXJpYWxpemVkX2NvbnRlbnQiIHZhbHVlPSI8P3BocCBlY2hvIFNlcmlhbGl6ZU9iamVjdCgkY29udGVudG9iaik7ID8+IiAvPgkJCQoJPGRpdiBpZD0icGFnZV9jb250ZW50Ij4KCQk8P3BocAoJCQoJCSRzdWJtaXRfYnV0dG9ucyA9ICc8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+JzsKCQkkc3VibWl0X2J1dHRvbnMgLj0gJyA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXRidXR0b24iIHZhbHVlPSInLmxhbmcoJ3N1Ym1pdCcpLiciIGNsYXNzPSJwYWdlYnV0dG9uIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uaG92ZXJcJyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uXCciIC8+JzsKCQlpZiAoaXNzZXQoJGNvbnRlbnRvYmotPm1QcmV2aWV3KSAmJiAkY29udGVudG9iai0+bVByZXZpZXcgPT0gdHJ1ZSkgewoJCQkkc3VibWl0X2J1dHRvbnMgLj0gJyA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJwcmV2aWV3YnV0dG9uIiB2YWx1ZT0iJy5sYW5nKCdwcmV2aWV3JykuJyIgY2xhc3M9InBhZ2VidXR0b24iIG9ubW91c2VvdmVyPSJ0aGlzLmNsYXNzTmFtZT1cJ3BhZ2VidXR0b25ob3ZlclwnIiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT1cJ3BhZ2VidXR0b25cJyIgb25jbGljaz0iIyNJTkxJTkVTVUJNSVRTVFVGRkdPRVNIRVJFIyN4YWpheF9hamF4cHJldmlldyh4YWpheC5nZXRGb3JtVmFsdWVzKFwnY29udGVudGZvcm1cJykpO3JldHVybiBmYWxzZTsiIC8+JzsKCQl9CgkJJHN1Ym1pdF9idXR0b25zIC49ICcgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iY2FuY2VsIiB2YWx1ZT0iJy5sYW5nKCdjYW5jZWwnKS4nIiBjbGFzcz0icGFnZWJ1dHRvbiIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvbmhvdmVyXCciIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvblwnIiAvPic7CgkJCgkJJG51bWJlcm9mdGFicyA9IGNvdW50KCR0YWJuYW1lcyk7CgkJJHNob3d0YWJzID0gMTsKCQlpZiAoJG51bWJlcm9mdGFicyA9PSAwKQoJCXsKCQkJJG51bWJlcm9mdGFicyA9IDE7CgkJCSRzaG93dGFicyA9IDE7CgkJfQoJCWZvciAoJGN1cnJlbnR0YWIgPSAwOyAkY3VycmVudHRhYiA8ICRudW1iZXJvZnRhYnM7ICRjdXJyZW50dGFiKyspCgkJewoJCQlpZiAoJHNob3d0YWJzID09IDEpCgkJCXsKCQkJCT8+PGRpdiBpZD0iZWRpdGFiPD9waHAgZWNobyAkY3VycmVudHRhYiA/Pl9jIj48P3BocAoJCQl9CgkJCWlmICgkY3VycmVudHRhYiA9PSAwKQoJCQl7CgkJCQllY2hvICRzdWJtaXRfYnV0dG9uczsKCQkJCT8+CgkJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCTxwIGNsYXNzPSJwYWdldGV4dCI+PD9waHAgZWNobyBsYW5nKCdjb250ZW50dHlwZScpOyA/Pjo8L3A+CgkJCQkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+PD9waHAgZWNobyAkdHlwZXNkcm9wZG93bjsgPz48L3A+CgkJCQk8L2Rpdj4KCQkJCTw/cGhwCgkJCX0KCQkJJGNvbnRlbnRhcnJheSA9ICRjb250ZW50b2JqLT5FZGl0QXNBcnJheSh0cnVlLCAkY3VycmVudHRhYiwgJGFjY2Vzcyk7CgkJCWZvcigkaT0wOyRpPGNvdW50KCRjb250ZW50YXJyYXkpOyRpKyspCgkJCXsKCQkJCT8+CgkJCQk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCQkJCTxwIGNsYXNzPSJwYWdldGV4dCI+PD9waHAgZWNobyAkY29udGVudGFycmF5WyRpXVswXTsgPz48L3A+CgkJCQkJPGRpdiBjbGFzcz0icGFnZWlucHV0Ij48P3BocCBlY2hvICRjb250ZW50YXJyYXlbJGldWzFdOyA/PjwvZGl2PgoJCQkJPC9kaXY+CgkJCQk8P3BocAoJCQl9CgkJCWVjaG8gJzxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZpcnN0dGltZSIgdmFsdWU9IjAiIC8+JzsKCQkJCQk/PgoJCQkJPC9wPgoJCQk8L2Rpdj4KCQkJPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ij48L2Rpdj4KCQk8L2Rpdj4KCQk8P3BocAoJCX0KCQlpZiAoJGNvbnRlbnRvYmotPm1QcmV2aWV3KQoJCXsKCQkJZWNobyAnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij48ZGl2IGlkPSJlZGl0dGFicHJldmlld19jIicuKCR0bXBmbmFtZSE9Jyc/JyBjbGFzcz0iYWN0aXZlIic6JycpLic+JzsKCQkJCT8+CgkJCQkJPGlmcmFtZSBuYW1lPSJwcmV2aWV3ZnJhbWUiIGNsYXNzPSJwcmV2aWV3IiBpZD0icHJldmlld2ZyYW1lIjw/cGhwIGlmICgkdG1wZm5hbWUgIT0gJycpIHsgPz4gc3JjPSI8P3BocCBlY2hvICRjb25maWdbInJvb3RfdXJsIl0gPz4vcHJldmlldy5waHA/dG1wZmlsZT08P3BocCBlY2hvIHVybGVuY29kZShiYXNlbmFtZSgkdG1wZm5hbWUpKT8+Ijw/cGhwIH0gPz4+PC9pZnJhbWU+CgkJCQk8P3BocAoJCQllY2hvICc8L2Rpdj48L2Rpdj4nOwoJCQllY2hvICc8ZGl2IHN0eWxlPSJjbGVhcjogYm90aDsiPjwvZGl2Pic7CgkJfQoJCWVjaG8gJHN1Ym1pdF9idXR0b25zOwoJCT8+Cgk8L2Rpdj4KCTwvZm9ybT4KPD9waHAKCn0KCiMgdmltOnRzPTQgc3c9NCBub2V0Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7Cmdsb2JhbCAkZ0NtczsKCiRzaG93X3RvYyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaG93dG9jJywgMSk7CgpmdW5jdGlvbiBzaG93X3RvY19jaGlsZCgmJHRvYywgJHBhcmVudF9pZCkKewoJJG91dHB1dCA9ICc8dWw+JzsKCWZvcmVhY2ggKCR0b2NbJHBhcmVudF9pZF0gIEFTICRrZXkgPT4gJHZhbHVlKQoJewoJCSRvdXRwdXQgLj0gJzxsaT4nLiR2YWx1ZVsnb3V0cHV0J107CgkJaWYgKEZBTFNFID09IGVtcHR5KCR0b2NbJHZhbHVlWydpZCddXSkpCgkJewoJCQkkb3V0cHV0IC49IHNob3dfdG9jX2NoaWxkKCR0b2MsICR2YWx1ZVsnaWQnXSk7CgkJfQoJCSRvdXRwdXQgLj0gJzwvbGk+JzsKCX0KCSRvdXRwdXQgLj0gJzwvdWw+JzsKCXJldHVybiAkb3V0cHV0Owp9CgokaGllck1hbmFnZXIgPSAmQmxvY2tDb250ZW50TWFuYWdlcjo6R2V0QWxsQ29udGVudEFzSGllcmFyY2h5KGZhbHNlKTsKCiRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIHBhcmVudF9wYWdlX2lkID0gIi4kZ0Ntcy0+dmFyaWFibGVzWydjb250ZW50X2lkJ10uIiBBTkQgYWN0aXZlID0gMSBPUkRFUiBCWSBoaWVyYXJjaHkiOwokZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiRvdXRwdXQgPSAnJzsKaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJlY29yZENvdW50KCkgPiAwKQp7CiAgICB3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkKCXsKCQkKCQkkY2hpbGRfbm9kZSA9JiAkaGllck1hbmFnZXItPmdldE5vZGVCeUlkKCRyb3dbJ2NvbnRlbnRfaWQnXSk7CgkJJGNvbnRlbnQgPSAkY2hpbGRfbm9kZS0+Z2V0Q29udGVudCgpOwoJCWlmICgkY29udGVudC0+QWN0aXZlKCkpCgkJewoJCQkJLy8gbG9hZCBwcm9wcyBtYW51YWxseSwgYmVjdWFzZSBHZXRIaWVyYXJjaHlNYW5hZ2VyKCkgZG9lbnMndCBsb2FkIHRoZW0KCQkJJGNvbnRlbnQtPm1Qcm9wZXJ0aWVzLT5Mb2FkKCRjb250ZW50LT5JZCgpKTsKCQkJaWYgKDEgPT0gJHNob3dfdG9jKQoJCQl7CgkJCQkkdG9jWyRjb250ZW50LT5QYXJlbnRJZCgpXVtdID0gYXJyYXkoJ291dHB1dCcgPT4gJzxhIGhyZWY9IicuJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10uJyMnLiRjb250ZW50LT5BbGlhcygpLiciPicuJGNvbnRlbnQtPm1OYW1lLic8L2E+JywgJ2lkJyA9PiAkY29udGVudC0+SWQoKSk7CgkJCX0KCQkJJG91dHB1dCAuPSAkY29udGVudC0+U2hvdygpOwoJCX0KCX0KCQoJaWYgKDEgPT0gJHNob3dfdG9jKQoJewoJCSR0b2Nfb3V0cHV0ID0gJzxoMj4nLiR0aGlzLT5MYW5nKCdjb250ZW50cycpLic8L2gyPic7CgkJCS8vIFRhYmxlIG9mIENvbnRlbnRzCgkJJHRvY19vdXRwdXQgLj0gc2hvd190b2NfY2hpbGQoJHRvYywgLTEpOwoJfQoJZWxzZQoJewoJCSR0b2Nfb3V0cHV0ID0gJyc7Cgl9CgkKCWVjaG8gJHRvY19vdXRwdXQuJG91dHB1dDsKfQoKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CmlmICghICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBQYWdlQmxvY2tzJykpCiAgewogICAgJHRoaXMtPlNob3dFcnJvcigkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwogICAgZGllKCk7CiAgfQokY29uZmlnID0mICRnQ21zLT5HZXRDb25maWcoKTsKJHRoZW1lT2JqZWN0ID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddOwoKZnVuY3Rpb24gdG9nZ2xlZXhwYW5kKCRjb250ZW50aWQsICRjb2xsYXBzZSA9IGZhbHNlLCAmJG1vZF9pbnN0YW5jZSkKewoJJG9wZW5lZEFycmF5PWFycmF5KCk7CglpZiAoJG1vZF9pbnN0YW5jZS0+R2V0UHJlZmVyZW5jZSgnY29sbGFwc2UnLCcnKSAhPSAnJykKCXsKCQkkdG1wICA9IGV4cGxvZGUoJy4nLCRtb2RfaW5zdGFuY2UtPkdldFByZWZlcmVuY2UoJ2NvbGxhcHNlJywnJykpOwoJCWZvcmVhY2ggKCR0bXAgYXMgJHRoaXNDb2wpCgkJewoJCQkkY29saW5kID0gc3Vic3RyKCR0aGlzQ29sLDAsc3RycG9zKCR0aGlzQ29sLCc9JykpOwoJCQkkb3BlbmVkQXJyYXlbJGNvbGluZF0gPSAxOwoJCX0KCX0KCWlmICgkY29sbGFwc2UpCgl7CgkJJG9wZW5lZEFycmF5WyRjb250ZW50aWRdID0gMDsKCX0KCWVsc2UKCXsKCQkkb3BlbmVkQXJyYXlbJGNvbnRlbnRpZF0gPSAxOwoJfQoJJGNzID0gJyc7Cglmb3JlYWNoICgkb3BlbmVkQXJyYXkgYXMgJGtleT0+JHZhbCkKCXsKCQlpZiAoJHZhbCA9PSAxKQoJCXsKCQkJJGNzIC49ICRrZXkuJz0xLic7CgkJfQoJfQoJJG1vZF9pbnN0YW5jZS0+U2V0UHJlZmVyZW5jZSgnY29sbGFwc2UnLCAkY3MpOwp9CgpmdW5jdGlvbiBleHBhbmRhbGwoJiRtb2RfaW5zdGFuY2UpCnsKCWdsb2JhbCAkZ0NtczsKCSRjb250ZW50b3BzID0mICRnQ21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpOwoJJGFsbCA9ICRjb250ZW50b3BzLT5HZXRBbGxDb250ZW50KGZhbHNlKTsKCSRjcyA9ICcnOwoJZm9yZWFjaCAoJGFsbCBhcyAkdGhpc2l0ZW0pCgl7CgkgIC8vaWYgKCR0aGlzaXRlbS0+SGFzQ2hpbGRyZW4oKSkKCSAgLy8JCXsKCQkJJGNzIC49ICR0aGlzaXRlbS0+SWQoKS4nPTEuJzsKCQkJLy8JfQoJfQoJJG1vZF9pbnN0YW5jZS0+U2V0UHJlZmVyZW5jZSgnY29sbGFwc2UnLCAkY3MpOwp9CgpmdW5jdGlvbiBjb2xsYXBzZWFsbCgmJG1vZF9pbnN0YW5jZSkKewoJJG1vZF9pbnN0YW5jZS0+U2V0UHJlZmVyZW5jZSgnY29sbGFwc2UnLCAnJyk7Cn0KCmZ1bmN0aW9uIGRlbGV0ZWNvbnRlbnQoJGNvbnRlbnRpZCwgJiRtb2RfaW5zdGFuY2UpCnsKCSR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CgkkYWNjZXNzID0gY2hlY2tfcGVybWlzc2lvbigkdXNlcmlkLCAnUmVtb3ZlIFBhZ2VzJyk7CgkKCWdsb2JhbCAkZ0NtczsKCS8vICRoaWVyTWFuYWdlciA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoJJGhpZXJNYW5hZ2VyID0gJkJsb2NrQ29udGVudE1hbmFnZXI6OkdldEFsbENvbnRlbnRBc0hpZXJhcmNoeShmYWxzZSk7CglpZiAoJGFjY2VzcykKCXsKCQkkbm9kZSA9ICYkaGllck1hbmFnZXItPmdldE5vZGVCeUlkKCRjb250ZW50aWQpOwoJCWlmICgkbm9kZSkKCQl7CgkJCSRjb250ZW50b2JqID0mICRub2RlLT5nZXRDb250ZW50KCk7CgkJCSRjaGlsZGNvdW50ID0gMDsKCQkJJHBhcmVudGlkID0gLTE7CgkJCWlmIChpc3NldCgkbm9kZS0+cGFyZW50Tm9kZSkpCgkJCXsKCQkJCSRwYXJlbnQgPSYgJG5vZGUtPnBhcmVudE5vZGU7CgkJCQlpZiAoaXNzZXQoJHBhcmVudCkpCgkJCQl7CgkJCQkJJHBhcmVudENvbnRlbnQgPSYgJHBhcmVudC0+Z2V0Q29udGVudCgpOwoJCQkJCWlmIChpc3NldCgkcGFyZW50Q29udGVudCkpCgkJCQkJewoJCQkJCQkkcGFyZW50aWQgPSAkcGFyZW50Q29udGVudC0+SWQoKTsKCQkJCQkJJGNoaWxkY291bnQgPSAkcGFyZW50LT5nZXRDaGlsZHJlbkNvdW50KCk7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlpZiAoJGNvbnRlbnRvYmopCgkJCXsKCQkJCSR0aXRsZSA9ICRjb250ZW50b2JqLT5OYW1lKCk7CgkKCQkJCSNDaGVjayBmb3IgY2hpbGRyZW4KCQkJCWlmICgkY29udGVudG9iai0+SGFzQ2hpbGRyZW4oKSkKCQkJCXsKCQkJCQkkX0dFVFsnZXJyb3InXSA9ICdlcnJvcmNoaWxkY29udGVudCc7CgkJCQl9CgkKCQkJCSNDaGVjayBmb3IgZGVmYXVsdAoJCQkJaWYgKCRjb250ZW50b2JqLT5EZWZhdWx0Q29udGVudCgpKQoJCQkJewoJCQkJCSRfR0VUWydlcnJvciddID0gJ2Vycm9yZGVmYXVsdHBhZ2UnOwoJCQkJfQoJCQkKCQkJCSR0aXRsZSA9ICRjb250ZW50b2JqLT5OYW1lKCk7CgkJCQkkY29udGVudG9iai0+RGVsZXRlKCk7CgkJCQlCbG9ja0NvbnRlbnRNYW5hZ2VyOjpTZXRBbGxIaWVyYXJjaHlQb3NpdGlvbnMoKTsKCQkJCS8vVXBkYXRlIHNlYXJjaCBpbmRleAoJCQkJJG1vZHVsZSA9JiAkbW9kX2luc3RhbmNlLT5HZXRNb2R1bGVJbnN0YW5jZSgnU2VhcmNoJyk7CgkJCQlpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCQkJCSAgewoJCQkJICAgICRtb2R1bGUtPkRlbGV0ZVdvcmRzKCRtb2RfaW5zdGFuY2UtPkdldE5hbWUoKSwgJGNvbnRlbnRpZCwgJ2Jsb2NrJyk7CgkJCQkgIH0KCQkJCQoJCQkJI1NlZSBpZiB0aGlzIGlzIHRoZSBsYXN0IGNoaWxkLi4uIGlmIHNvLCByZW1vdmUKCQkJCSN0aGUgZXhwYW5kIGZvciBpdAoJCQkJaWYgKCRjaGlsZGNvdW50ID09IDEgJiYgJHBhcmVudGlkID4gLTEpCgkJCQl7CgkJCQkgIHRvZ2dsZWV4cGFuZCgkcGFyZW50aWQsIHRydWUsICRtb2RfaW5zdGFuY2UpOwoJCQkJfQoJCQkJCgkJCQkjRG8gdGhlIHNhbWUgd2l0aCB0aGlzIHBhZ2UgYXMgd2VsbAoJCQkJdG9nZ2xlZXhwYW5kKCRjb250ZW50aWQsIHRydWUsICRtb2RfaW5zdGFuY2UpOwoJCQkJCgkJCQlhdWRpdCgkY29udGVudGlkLCAkdGl0bGUsICdEZWxldGVkIENvbnRlbnQnKTsKCQkJCQoJCQkJQmxvY2tDb250ZW50TWFuYWdlcjo6Q2xlYXJDYWNoZSgpOwoJCQkKCQkJCSRfR0VUWydtZXNzYWdlJ10gPSAnY29udGVudGRlbGV0ZWQnOwoJCQl9CgkJfQoJfQp9CgppZiAoaXNzZXQoJHBhcmFtc1snZGVsZXRlY29udGVudCddKSkKICB7CiAgICBkZWxldGVjb250ZW50KCRwYXJhbXNbJ2RlbGV0ZWNvbnRlbnQnXSwgJHRoaXMpOwogICAgJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ2Jsb2NrX2RlbGV0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ2Jsb2NrcycpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7CiAgfQoKaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbCddKSAmJiBpc3NldCgkcGFyYW1zWydjb250ZW50X2lkJ10pKQp7CiAgdG9nZ2xlZXhwYW5kKCRwYXJhbXNbJ2NvbnRlbnRfaWQnXSwgJHBhcmFtc1snY29sJ109PScxJz90cnVlOmZhbHNlLCAkdGhpcyk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydleHBhbmRhbGwnXSkpCnsKCWV4cGFuZGFsbCgkdGhpcyk7Cn0KCmlmIChpc3NldCgkcGFyYW1zWydjb2xsYXBzZWFsbCddKSkKewoJY29sbGFwc2VhbGwoJHRoaXMpOwp9CgplY2hvICR0aGlzLT5TdGFydFRhYkhlYWRlcnMoKTsKJGFjdGl2ZV90YWIgPSBpc3NldCgkcGFyYW1zWydhY3RpdmVfdGFiJ10pID8gJHBhcmFtc1snYWN0aXZlX3RhYiddIDogRkFMU0U7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcignYmxvY2tzJywgJHRoaXMtPkxhbmcoJ2Jsb2NrcycpLCAoJ2Jsb2NrcycgPT0gJGFjdGl2ZV90YWIpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCd0ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCd0ZW1wbGF0ZXMnKSwgKCd0ZW1wbGF0ZXMnID09ICRhY3RpdmVfdGFiKSk7CmlmKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpCiAgewogICAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCdvcHRpb25zJywgJHRoaXMtPkxhbmcoJ29wdGlvbnMnKSwgKCdvcHRpb25zJyA9PSAkYWN0aXZlX3RhYikpOwogIH0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKICAgICAgICBlY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2Jsb2NrcycsICRwYXJhbXMpOwoKcmVxdWlyZShjbXNfam9pbl9wYXRoKGRpcm5hbWUoX19GSUxFX18pLCAnbGliJywgJ3NsbGlzdHMnLCdTTExpc3RzLmNsYXNzLnBocCcpKTsKJHNvcnRhYmxlTGlzdHMgPSBuZXcgU0xMaXN0cyggJGNvbmZpZ1sicm9vdF91cmwiXS4nL2xpYi9zY3JpcHRhY3Vsb3VzJyk7CgoKLy8gR2V0IGxpc3Qgb2YgZXhwYW5kZWQgcGFnZXMKJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKJHRoaXMtPm9wZW5lZEFycmF5PWFycmF5KCk7CmlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29sbGFwc2UnLCAnJykgIT0gJycpCiAgewogICAgJHRtcCAgPSBleHBsb2RlKCcuJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY29sbGFwc2UnKSk7CiAgICBmb3JlYWNoICgkdG1wIGFzICR0aGlzQ29sKQogICAgICB7CgkkY29saW5kID0gc3Vic3RyKCR0aGlzQ29sLDAsc3RycG9zKCR0aGlzQ29sLCc9JykpOwoJJHRoaXMtPm9wZW5lZEFycmF5WyRjb2xpbmRdID0gMTsKICAgICAgfQogIH0KCi8vIGJsb2NrcwovLyBlY2hvICc8aDI+QmxvY2tzPC9oMj4nOwokaGllck1hbmFnZXIgPSAmQmxvY2tDb250ZW50TWFuYWdlcjo6R2V0QWxsQ29udGVudEFzSGllcmFyY2h5KGZhbHNlKTsKJGhpZXJhcmNoeSA9ICYkaGllck1hbmFnZXItPmdldFJvb3ROb2RlKCk7CgppZiAoJGhpZXJhcmNoeS0+aGFzQ2hpbGRyZW4oKSkKICB7CiAgICAkbGlzdEFycmF5ID0gYXJyYXkoKTsKICAgICRvdXRwdXQgPSAnJzsKICAgICR0aGlzLT5tSWQgPSAkaWQ7CiAgICAkdGhpcy0+bVJldHVybmlkID0gJHJldHVybmlkOwoJZm9yZWFjaCAoJGhpZXJhcmNoeS0+Z2V0Q2hpbGRyZW4oKSBhcyAkY2hpbGQpCgl7CgkgICR0aGlzLT5zaG93X2hfYmxvY2tzKCRjaGlsZCwgJHNvcnRhYmxlTGlzdHMsICRsaXN0QXJyYXkpOwoJfQogIH0KCi8vIHByaW50X3IoJHRoaXMtPm1QYWdlQmxvY2tQYXJlbnRzKTsKCi8vIGVjaG8gJzxoMj5QYWdlczwvaDI+JzsKLy8gUGFnZXMKZWNobyAnPGRpdiBjbGFzcz0icGFnZWNvbnRhaW5lciI+PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4nOwokY29udGVudG9wcyA9JiAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsKJGhpZXJNYW5hZ2VyID0gJGNvbnRlbnRvcHMtPkdldEFsbENvbnRlbnRBc0hpZXJhcmNoeShmYWxzZSk7CiRoaWVyYXJjaHkgPSAmJGhpZXJNYW5hZ2VyLT5nZXRSb290Tm9kZSgpOwoKaWYgKCRoaWVyYXJjaHktPmhhc0NoaWxkcmVuKCkpCiAgewogICAgJGxpc3RBcnJheSA9IGFycmF5KCk7CiAgICAkdGhpcy0+bUlkID0gJGlkOwogICAgJHRoaXMtPm1SZXR1cm5pZCA9ICRyZXR1cm5pZDsKICAgICRvdXRwdXQgPSAnPHVsPic7CiAgICBmb3JlYWNoICgkaGllcmFyY2h5LT5nZXRDaGlsZHJlbigpIGFzICRjaGlsZCkKICAgICAgewoJJHRoaXMtPnNob3dfaCgkY2hpbGQsICRzb3J0YWJsZUxpc3RzLCAkbGlzdEFycmF5LCAkb3V0cHV0KTsKCQogICAgICB9CiAgICAkb3V0cHV0IC49ICc8L3VsPic7CiAgICBpZighaXNzZXQoJF9QT1NUWydzb3J0YWJsZUxpc3RzU3VibWl0dGVkJ10pKQogICAgICB7CgllY2hvICRvdXRwdXQ7CiAgICAgIH0KICB9CgppZihpc3NldCgkX1BPU1RbJ3NvcnRhYmxlTGlzdHNTdWJtaXR0ZWQnXSkpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJGhtID0mICRnQ21zLT5HZXRIaWVyYXJjaHlNYW5hZ2VyKCk7CiAgICAkb3JkZXJfY2hhbmdlZCA9IEZBTFNFOwogICAgZm9yZWFjaCAoJGxpc3RBcnJheVsncGFnZXBhcmVudHMnXSBBUyAkcGFyZW50X2lkID0+ICRvcmRlcikKICAgICAgewoJJG9yZGVyQXJyYXkgPSBTTExpc3RzOjpnZXRPcmRlckFycmF5KCRfUE9TVFskb3JkZXJdLCAncGFyZW50Jy4kcGFyZW50X2lkKTsKCWZvcmVhY2goJG9yZGVyQXJyYXkgYXMgJGl0ZW0pCgkgIHsKCSAgICAkb3JkZXJfY2hhbmdlZCA9IFRSVUU7CgkgICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBTRVQgaXRlbV9vcmRlciA9ID8gV0hFUkUgY29udGVudF9pZCA9ID8nOwoJICAgICRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRpdGVtWydvcmRlciddLCAkaXRlbVsnZWxlbWVudCddKSk7CgkgIH0KICAgICAgfQogIAogICAgaWYgKFRSVUUgPT0gJG9yZGVyX2NoYW5nZWQpIHsKICAgICAgQmxvY2tDb250ZW50TWFuYWdlcjo6U2V0QWxsSGllcmFyY2h5UG9zaXRpb25zKCk7CiAgICAgIEJsb2NrQ29udGVudE1hbmFnZXI6OkNsZWFyQ2FjaGUoKTsKICAgICAgJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ29yZGVyX3VwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ2Jsb2NrcycpOwogICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgllY2hvICdOb3RoaW5nIHdhcyByZW9yZGVyZCc7CiAgICAgIH0KCiAgICBmb3JlYWNoICgkbGlzdEFycmF5WydibG9ja3BhcmVudHMnXSBBUyAkcGFyZW50X2lkID0+ICRvcmRlcikKICAgICAgewoJJG9yZGVyQXJyYXkgPSBTTExpc3RzOjpnZXRPcmRlckFycmF5KCRfUE9TVFskb3JkZXJdLCAnYmxvY2twYXJlbnQnLiRwYXJlbnRfaWQpOwoJZm9yZWFjaCgkb3JkZXJBcnJheSBhcyAkaXRlbSkKCSAgewoJICAgICRvcmRlcl9jaGFuZ2VkID0gVFJVRTsKCSAgICAkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFNFVCBpdGVtX29yZGVyID0gPyBXSEVSRSBjb250ZW50X2lkID0gPyc7CgkgICAgJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGl0ZW1bJ29yZGVyJ10sICRpdGVtWydlbGVtZW50J10pKTsKCSAgfQogICAgICB9CiAgCiAgICBpZiAoVFJVRSA9PSAkb3JkZXJfY2hhbmdlZCkgewogICAgICBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpTZXRBbGxIaWVyYXJjaHlQb3NpdGlvbnMoKTsKICAgICAgQmxvY2tDb250ZW50TWFuYWdlcjo6Q2xlYXJDYWNoZSgpOwogICAgICAkcGFyYW1zID0gYXJyYXkoJ3RhYl9tZXNzYWdlJyA9PiAnb3JkZXJfdXBkYXRlZCcsICdhY3RpdmVfdGFiJyA9PiAnYmxvY2tzJyk7CiAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICRwYXJhbXMpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCWVjaG8gJ05vdGhpbmcgd2FzIHJlb3JkZXJkJzsKICAgICAgfQogIH0KCgovLyAkc29ydGFibGVMaXN0cy0+ZGVidWcgPSB0cnVlOwplY2hvICc8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjJlbTsiPic7CiRzb3J0YWJsZUxpc3RzLT5wcmludFRvcEpTKCk7CiRzb3J0YWJsZUxpc3RzLT5wcmludEZvcm0oJ21vZHVsZWludGVyZmFjZS5waHA/bW9kdWxlPVBhZ2VCbG9ja3MnLCAncG9zdCcsICdTdWJtaXQnLCAnYnV0dG9uJyk7CiRzb3J0YWJsZUxpc3RzLT5wcmludEJvdHRvbUpTKCk7ICAgIAoKCmVjaG8gJzxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MmVtOyBtYXJnaW4tdG9wOjJlbTsiPic7CiRleHBhbmRhbGxJbWcgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2V4cGFuZGFsbC5naWYnLCBsYW5nKCdleHBhbmRhbGwnKSwnJywnJywnc3lzdGVtaWNvbicpOwplY2hvICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgICRleHBhbmRhbGxJbWcsIGFycmF5KCdleHBhbmRhbGwnID0+IDEpKTsKZWNobyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICBsYW5nKCdleHBhbmRhbGwnKSwgYXJyYXkoJ2V4cGFuZGFsbCcgPT4gMSkpOwplY2hvICc8L3NwYW4+JzsKCmVjaG8gJzxzcGFuIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MmVtIj4nOwokY29udHJhY3RhbGxJbWcgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2NvbnRyYWN0YWxsLmdpZicsIGxhbmcoJ2NvbnRyYWN0YWxsJyksJycsJycsJ3N5c3RlbWljb24nKTsKZWNobyAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICAkY29udHJhY3RhbGxJbWcsIGFycmF5KCdjb2xsYXBzZWFsbCcgPT4gMSkpOwplY2hvICcgJy4kdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICBsYW5nKCdjb250cmFjdGFsbCcpLCBhcnJheSgnY29sbGFwc2VhbGwnID0+IDEpKTsKZWNobyAnPC9zcGFuPic7CiAgIGVjaG8gJzwvZGl2Pic7CmVjaG8gJzwvZGl2PjwvZGl2Pic7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCd0ZW1wbGF0ZXMnLCAkcGFyYW1zKTsKJHRlbXBsYXRlcyA9IGFycmF5KCk7CiR0ZW1wbGF0ZXMyID0gYXJyYXkoKTsKJGRidGVtcGxhdGVzID0gJHRoaXMtPkxpc3RUZW1wbGF0ZXMgKCk7CiRyb3djbGFzcyA9ICdyb3cxJzsKZm9yZWFjaCAoJGRidGVtcGxhdGVzIGFzICR0ZW1wbGF0ZSkKewoJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7Cgkkb25lcm93LT5uYW1lID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLCAkdGVtcGxhdGUsIGFycmF5KCd0ZW1wbGF0ZW5hbWUnPT4kdGVtcGxhdGUpKTsKCSRvbmVyb3ctPmVkaXRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHRlbXBsYXRlJywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcoJ2VkaXRfdGVtcGxhdGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGVtcGxhdGVuYW1lJyA9PiAkdGVtcGxhdGUpKTsKCWlmICgkdGVtcGxhdGUhPSdkZWZhdWx0JykKCXsKCQkkb25lcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVsZXRldGVtcGxhdGUnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsICR0aGlzLT5MYW5nKCdkZWxldGVfdGVtcGxhdGUnKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgndGVtcGxhdGVuYW1lJyA9PiAkdGVtcGxhdGUpLCAkdGhpcy0+TGFuZygncmVhbGx5X2RlbGV0ZV90ZW1wbGF0ZScpKTsKCX0gZWxzZSB7CgkJJG9uZXJvdy0+ZGVsZXRlbGluayA9ICcnOwoJfQoJJHRlbXBsYXRlczJbJHRlbXBsYXRlXT0kdGVtcGxhdGU7CgkkdGVtcGxhdGVzW10gPSAkb25lcm93OwoJKCRyb3djbGFzcz09InJvdzEiPyRyb3djbGFzcz0icm93MiI6JHJvd2NsYXNzPSJyb3cxIik7Cn0KCiR0aGlzLT5zbWFydHktPmFzc2lnbl9ieV9yZWYoJ2l0ZW1zJywgJHRlbXBsYXRlcyk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RlbXBsYXRlbmFtZXRleHQnLCAkdGhpcy0+TGFuZygndGVtcGxhdGVuYW1ldGV4dCcpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkbGluaycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywgJHRoaXMtPkxhbmcoJ2FkZHRlbXBsYXRlJyksJycsJycsJ3N5c3RlbWljb24nKSwgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpIC4nICcuICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FkZHRlbXBsYXRlJyksIGFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3RlbXBsYXRlbGlzdC50cGwnKTsKCmVjaG8gJHRoaXMtPkVuZFRhYigpOwoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykpCnsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdvcHRpb25zJywgJHBhcmFtcyk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlZmF1bHR0ZW1wbGF0ZXRleHQnLCAkdGhpcy0+TGFuZygnZGVmYXVsdF90ZW1wbGF0ZScpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZGVmYXVsdHRlbXBsYXRlaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsICdkZWZhdWx0dGVtcGxhdGUnLCAkdGVtcGxhdGVzMiwgLTEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0dGVtcGxhdGUnLCcnKSkpOwoJCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3d0b2N0ZXh0JywgJHRoaXMtPkxhbmcoJ3Nob3d0b2MnKSk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc2hvd3RvY2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnc2hvd3RvYycsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzaG93dG9jJywgMSkpKTsKCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKCgllY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCAndXBkYXRlb3B0aW9ucycpOwoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdvcHRpb25zLnRwbCcpOwoJZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KCmVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.deletetemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpIA0KCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQpOw0KaWYoISAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnVXNlIFBhZ2VCbG9ja3MnICkgKSBleGl0Ow0KDQokdGVtcGxhdGVuYW1lID0gKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlbmFtZSddKSA/ICRwYXJhbXNbJ3RlbXBsYXRlbmFtZSddIDogJycpOw0KJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCR0ZW1wbGF0ZW5hbWUpOw0KJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ3RlbXBsYXRlX2RlbGV0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ3RlbXBsYXRlcycpOw0KJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsNCj8+]]></data>
	</file>
	<file>
	  <filename>/action.editblockcontent.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLnNmLm5ldAojCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiNUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiNHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKI2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiNGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiMKIyRJZDogYWN0aW9uLmVkaXRibG9ja2NvbnRlbnQucGhwIDE2MSAyMDA2LTA4LTIyIDIyOjE0OjQxWiBlbGlqYWhsb2ZncmVuICQKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CiRDTVNfQURNSU5fUEFHRT0xOwoKcmVxdWlyZV9vbmNlKCIuLi9pbmNsdWRlLnBocCIpOwoKY2hlY2tfbG9naW4oKTsKJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKCnJlcXVpcmVfb25jZShkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKSAuICcvLi4vbGliL3hhamF4L3hhamF4LmluYy5waHAnKTsKJHhhamF4ID0gbmV3IHhhamF4KCk7CiR4YWpheC0+cmVnaXN0ZXJGdW5jdGlvbignYWpheHByZXZpZXcnKTsKCiR4YWpheC0+cHJvY2Vzc1JlcXVlc3RzKCk7CiRoZWFkdGV4dCA9ICR4YWpheC0+Z2V0SmF2YXNjcmlwdCgnLi4vbGliL3hhamF4JykuIlxuIjsKCmlmIChpc3NldCgkX1BPU1RbImNhbmNlbCJdKSkKICB7CiAgICAkcGFyYW1zID0gYXJyYXkoJ2FjdGl2ZV90YWInID0+ICdibG9ja3MnKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcmFtcyk7CiAgfQoKJGVycm9yID0gRkFMU0U7CgokY29udGVudF9pZCA9ICIiOwppZiAoaXNzZXQoJHBhcmFtc1siY29udGVudF9pZCJdKSkgJGNvbnRlbnRfaWQgPSAkcGFyYW1zWyJjb250ZW50X2lkIl07CgokcGFnZWxpc3RfaWQgPSAiMSI7CmlmIChpc3NldCgkX1JFUVVFU1RbInBhZ2UiXSkpICRwYWdlbGlzdF9pZCA9ICRfUkVRVUVTVFsicGFnZSJdOwoKJHByZXZpZXcgPSBmYWxzZTsKaWYgKGlzc2V0KCRfUE9TVFsicHJldmlld2J1dHRvbiJdKSkgJHByZXZpZXcgPSB0cnVlOwoKJHN1Ym1pdCA9IGZhbHNlOwppZiAoaXNzZXQoJF9QT1NUWyJzdWJtaXRidXR0b24iXSkpICRzdWJtaXQgPSB0cnVlOwoKJGFwcGx5ID0gZmFsc2U7CmlmIChpc3NldCgkX1BPU1RbImFwcGx5YnV0dG9uIl0pKSAkYXBwbHkgPSB0cnVlOwoKaWYgKCRwcmV2aWV3IHx8ICRhcHBseSkKewoJJENNU19FWENMVURFX0ZST01fUkVDRU5UPTE7Cn0KCmZ1bmN0aW9uIGFqYXhwcmV2aWV3KCRwYXJhbXMpCnsKCWdsb2JhbCAkZ0NtczsKCSRjb25maWcgPSYgJGdDbXMtPkdldENvbmZpZygpOwoKCSRjb250ZW50b2JqID0gVW5zZXJpYWxpemVPYmplY3QoJHBhcmFtc1sic2VyaWFsaXplZF9jb250ZW50Il0pOwoJJGNvbnRlbnRfdHlwZSA9ICRwYXJhbXNbJ2NvbnRlbnRfdHlwZSddOwoJaWYgKHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCRjb250ZW50b2JqKSkgIT0gc3RydG9sb3dlcigkY29udGVudF90eXBlKSkKCXsKCQljb3B5Y29udGVudG9iaigkY29udGVudG9iaiwgJGNvbnRlbnRfdHlwZSwgJHBhcmFtcyk7Cgl9Cgl1cGRhdGVjb250ZW50b2JqKCRjb250ZW50b2JqLCB0cnVlLCAkcGFyYW1zKTsKCSR0bXBmbmFtZSA9IGNyZWF0ZXRtcGZuYW1lKCRjb250ZW50b2JqKTsKCSR1cmwgPSAkY29uZmlnWyJyb290X3VybCJdLicvcHJldmlldy5waHA/dG1wZmlsZT0nLnVybGVuY29kZShiYXNlbmFtZSgkdG1wZm5hbWUpKTsKCQoJJG9ialJlc3BvbnNlID0gbmV3IHhhamF4UmVzcG9uc2UoKTsKCSRvYmpSZXNwb25zZS0+YWRkQXNzaWduKCJwcmV2aWV3ZnJhbWUiLCAic3JjIiwgJHVybCk7Cgkkb2JqUmVzcG9uc2UtPmFkZEFzc2lnbigic2VyaWFsaXplZF9jb250ZW50IiwgInZhbHVlIiwgU2VyaWFsaXplT2JqZWN0KCRjb250ZW50b2JqKSk7CgkkY291bnQgPSAwOwoJZm9yZWFjaCAoJGNvbnRlbnRvYmotPlRhYk5hbWVzKCkgYXMgJHRhYm5hbWUpCgl7CgkJJG9ialJlc3BvbnNlLT5hZGRTY3JpcHQoIkVsZW1lbnQucmVtb3ZlQ2xhc3NOYW1lKCdlZGl0YWIiLiRjb3VudC4iJywgJ2FjdGl2ZScpO0VsZW1lbnQucmVtb3ZlQ2xhc3NOYW1lKCdlZGl0YWIiLiRjb3VudC4iX2MnLCAnYWN0aXZlJyk7JCgnZWRpdGFiIi4kY291bnQuIl9jJykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsiKTsKCQkkY291bnQrKzsKCX0KCSRvYmpSZXNwb25zZS0+YWRkU2NyaXB0KCJFbGVtZW50LmFkZENsYXNzTmFtZSgnZWRpdHRhYnByZXZpZXcnLCAnYWN0aXZlJyk7RWxlbWVudC5hZGRDbGFzc05hbWUoJ2VkaXR0YWJwcmV2aWV3X2MnLCAnYWN0aXZlJyk7JCgnZWRpdHRhYnByZXZpZXdfYycpLnN0eWxlLmRpc3BsYXkgPSAnJzsiKTsKCXJldHVybiAkb2JqUmVzcG9uc2UtPmdldFhNTCgpOwp9CgpmdW5jdGlvbiB1cGRhdGVjb250ZW50b2JqKCYkY29udGVudG9iaiwgJHByZXZpZXcsICRwYXJhbXMgPSBudWxsKQp7CglpZiAoJHBhcmFtcyA9PSBudWxsKQoJCSRwYXJhbXMgPSAkX1BPU1Q7CgoJJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKCSRhZG1pbmFjY2VzcyA9IGNoZWNrX293bmVyc2hpcCgkdXNlcmlkLCAkY29udGVudG9iai0+SWQoKSkgfHwgY2hlY2tfcGVybWlzc2lvbigkdXNlcmlkLCAnTW9kaWZ5IEFueSBQYWdlJyk7CgkJCgkjRmlsbCBjb250ZW50b2JqIHdpdGggcGFyYW1ldGVycwoJJGNvbnRlbnRvYmotPkZpbGxQYXJhbXMoJHBhcmFtcyk7CglpZiAoJHByZXZpZXcpCgl7CgkJJGVycm9yID0gJGNvbnRlbnRvYmotPlZhbGlkYXRlRGF0YSgpOwoJfQoKCWlmIChpc3NldCgkcGFyYW1zWyJvd25lcmlkIl0pKQoJewoJCSRjb250ZW50b2JqLT5TZXRPd25lcigkcGFyYW1zWyJvd25lcmlkIl0pOwoJfQoKCSRjb250ZW50b2JqLT5TZXRMYXN0TW9kaWZpZWRCeSgkdXNlcmlkKTsKCgkjRmlsbCBBZGRpdGlvbmFsIEVkaXRvcnMgKGtpbmQgb2Yga2x1ZGd5KQoJaWYgKGlzc2V0KCRwYXJhbXNbImFkZGl0aW9uYWxfZWRpdG9ycyJdKSkKCXsKCQkkYWRkdGFycmF5ID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkcGFyYW1zWyJhZGRpdGlvbmFsX2VkaXRvcnMiXSBhcyAkYWRkdF91c2VyX2lkKQoJCXsKCQkJJGFkZHRhcnJheVtdID0gJGFkZHRfdXNlcl9pZDsKCQl9CgkJJGNvbnRlbnRvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKCRhZGR0YXJyYXkpOwoJfQoJZWxzZSBpZiAoJGFkbWluYWNjZXNzKQoJewoJCSRjb250ZW50b2JqLT5TZXRBZGRpdGlvbmFsRWRpdG9ycyhhcnJheSgpKTsKCX0KfQoKZnVuY3Rpb24gY29weWNvbnRlbnRvYmooJiRjb250ZW50b2JqLCAkY29udGVudF90eXBlLCAkcGFyYW1zID0gbnVsbCkKewoJaWYgKCRwYXJhbXMgPT0gbnVsbCkKCQkkcGFyYW1zID0gJF9QT1NUOwoJJGNvbnRlbnRvYmotPkZpbGxQYXJhbXMoJHBhcmFtcyk7CgkkbmV3Y29udGVudHR5cGUgPSBzdHJ0b2xvd2VyKCRjb250ZW50X3R5cGUpOwoJJHRtcG9iaiA9IG5ldyAkbmV3Y29udGVudHR5cGU7CgkkdG1wb2JqLT5TZXRJZCgkY29udGVudG9iai0+SWQoKSk7CgkkdG1wb2JqLT5TZXROYW1lKCRjb250ZW50b2JqLT5OYW1lKCkpOwoJJHRtcG9iai0+U2V0TWVudVRleHQoJGNvbnRlbnRvYmotPk1lbnVUZXh0KCkpOwoJJHRtcG9iai0+U2V0VGVtcGxhdGVJZCgkY29udGVudG9iai0+VGVtcGxhdGVJZCgpKTsKCSR0bXBvYmotPlNldFBhcmVudElkKCRjb250ZW50b2JqLT5QYXJlbnRJZCgpKTsKCSR0bXBvYmotPlNldE9sZFBhcmVudElkKCRjb250ZW50b2JqLT5PbGRQYXJlbnRJZCgpKTsKCSR0bXBvYmotPlNldEFsaWFzKCRjb250ZW50b2JqLT5BbGlhcygpKTsKCSR0bXBvYmotPlNldE93bmVyKCRjb250ZW50b2JqLT5Pd25lcigpKTsKCSR0bXBvYmotPlNldEFjdGl2ZSgkY29udGVudG9iai0+QWN0aXZlKCkpOwoJJHRtcG9iai0+U2V0SXRlbU9yZGVyKCRjb250ZW50b2JqLT5JdGVtT3JkZXIoKSk7CgkkdG1wb2JqLT5TZXRPbGRJdGVtT3JkZXIoJGNvbnRlbnRvYmotPk9sZEl0ZW1PcmRlcigpKTsKCSR0bXBvYmotPlNldFNob3dJbk1lbnUoJGNvbnRlbnRvYmotPlNob3dJbk1lbnUoKSk7CgkvL1NvbWUgY29udGVudCB0eXBlcyBkZWZhdWx0IHRvIGZhbHNlIGZvciBhIHJlYXNvbi4uLiBkb24ndCBvdmVycmlkZSBpdAoJaWYgKCEoISR0bXBvYmotPm1DYWNoYWJsZSAmJiAkY29udGVudG9iai0+Q2FjaGFibGUoKSkpCgkJJHRtcG9iai0+U2V0Q2FjaGFibGUoJGNvbnRlbnRvYmotPkNhY2hhYmxlKCkpOwoJJHRtcG9iai0+U2V0SGllcmFyY2h5KCRjb250ZW50b2JqLT5IaWVyYXJjaHkoKSk7CgkkdG1wb2JqLT5TZXRMYXN0TW9kaWZpZWRCeSgkY29udGVudG9iai0+TGFzdE1vZGlmaWVkQnkoKSk7CgkkdG1wb2JqLT5TZXRBZGRpdGlvbmFsRWRpdG9ycygkY29udGVudG9iai0+R2V0QWRkaXRpb25hbEVkaXRvcnMoKSk7CgkkY29udGVudG9iaiA9ICR0bXBvYmo7Cn0KCmZ1bmN0aW9uIGNyZWF0ZXRtcGZuYW1lKCYkY29udGVudG9iaikKewoJZ2xvYmFsICRnQ21zOwoJJGNvbmZpZyA9JiAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgoJJGRhdGFbImNvbnRlbnRfaWQiXSA9ICRjb250ZW50b2JqLT5JZCgpOwoJJGRhdGFbInRpdGxlIl0gPSAkY29udGVudG9iai0+TmFtZSgpOwoJJGRhdGFbIm1lbnV0ZXh0Il0gPSAkY29udGVudG9iai0+TWVudVRleHQoKTsKCSRkYXRhWyJjb250ZW50Il0gPSAkY29udGVudG9iai0+U2hvdygpOwoJJGRhdGFbInRlbXBsYXRlX2lkIl0gPSAkY29udGVudG9iai0+VGVtcGxhdGVJZCgpOwoJJGRhdGFbImhpZXJhcmNoeSJdID0gJGNvbnRlbnRvYmotPkhpZXJhcmNoeSgpOwoJCgkkdGVtcGxhdGVvYmogPSBUZW1wbGF0ZU9wZXJhdGlvbnM6OkxvYWRUZW1wbGF0ZUJ5SWQoJGNvbnRlbnRvYmotPlRlbXBsYXRlSWQoKSk7CgkkZGF0YVsndGVtcGxhdGUnXSA9ICR0ZW1wbGF0ZW9iai0+Y29udGVudDsKCgkkc3R5bGVzaGVldG9iaiA9IGdldF9zdHlsZXNoZWV0KCRjb250ZW50b2JqLT5UZW1wbGF0ZUlkKCkpOwoJJGRhdGFbJ2VuY29kaW5nJ10gPSAkc3R5bGVzaGVldG9ialsnZW5jb2RpbmcnXTsKCS8vICRkYXRhWydzdHlsZXNoZWV0J10gPSAkc3R5bGVzaGVldG9ialsnc3R5bGVzaGVldCddOwoKCSR0bXBmbmFtZSA9ICcnOwoJaWYgKGlzX3dyaXRhYmxlKCRjb25maWdbInByZXZpZXdzX3BhdGgiXSkpCgl7CgkJJHRtcGZuYW1lID0gdGVtcG5hbSgkY29uZmlnWyJwcmV2aWV3c19wYXRoIl0sICJjbXNwcmV2aWV3Iik7Cgl9CgllbHNlCgl7CgkJJHRtcGZuYW1lID0gdGVtcG5hbShUTVBfQ0FDSEVfTE9DQVRJT04sICJjbXNwcmV2aWV3Iik7Cgl9CgkkaGFuZGxlID0gZm9wZW4oJHRtcGZuYW1lLCAidyIpOwoJZndyaXRlKCRoYW5kbGUsIHNlcmlhbGl6ZSgkZGF0YSkpOwoJZmNsb3NlKCRoYW5kbGUpOwoJCglyZXR1cm4gJHRtcGZuYW1lOwp9CgojR2V0IGEgbGlzdCBvZiBjb250ZW50IHR5cGVzIGFuZCBwaWNrIGEgZGVmYXVsdCBpZiBuZWNlc3NhcnkKJGV4aXN0aW5ndHlwZXMgPSBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpMaXN0Q29udGVudFR5cGVzKCk7CiRjb250ZW50X3R5cGUgPSAiIjsKaWYgKGlzc2V0KCRfUE9TVFsiY29udGVudF90eXBlIl0pKQp7CgkkY29udGVudF90eXBlID0gJF9QT1NUWyJjb250ZW50X3R5cGUiXTsKfQplbHNlCnsKCWlmIChpc3NldCgkZXhpc3Rpbmd0eXBlcykgJiYgY291bnQoJGV4aXN0aW5ndHlwZXMpID4gMCkKCXsKCQkkY29udGVudF90eXBlID0gJ2NvbnRlbnQnOwoJfQoJZWxzZQoJewoJCSRlcnJvciA9ICI8cD5ObyBjb250ZW50IHR5cGVzIGxvYWRlZCE8L3A+IjsJCgl9Cn0KCiRjb250ZW50b2JqID0gIiI7CmlmIChpc3NldCgkX1BPU1RbInNlcmlhbGl6ZWRfY29udGVudCJdKSkKewoJJGNvbnRlbnRvYmogPSBVbnNlcmlhbGl6ZU9iamVjdCgkX1BPU1RbInNlcmlhbGl6ZWRfY29udGVudCJdKTsKCWlmIChzdHJ0b2xvd2VyKGdldF9jbGFzcygkY29udGVudG9iaikpICE9IHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZSkpCgl7CgkJI0ZpbGwgdXAgdGhlIGV4aXN0aW5nIG9iamVjdCB3aXRoIHZhbHVlcyBpbiBmb3JtCgkJI0NyZWF0ZSBuZXcgb2JqZWN0CgkJI0NvcHkgaW1wb3J0YW50IGZpZWxkcyB0byBuZXcgb2JqZWN0CgkJI1B1dCBuZXcgb2JqZWN0IG9uIHRvcCBvZiBvbGQgb25lCgkJY29weWNvbnRlbnRvYmooJGNvbnRlbnRvYmosICRjb250ZW50X3R5cGUpOwoJfQp9CgojR2V0IGN1cnJlbnQgdXNlcmlkIGFuZCBtYWtlIHN1cmUgdGhleSBoYXZlIHBlcm1pc3Npb24gdG8gYWRkIHNvbWV0aGluZwokdXNlcmlkID0gZ2V0X3VzZXJpZCgpOwokYWNjZXNzID0gY2hlY2tfb3duZXJzaGlwKCR1c2VyaWQsICRjb250ZW50X2lkKSB8fCBjaGVja19wZXJtaXNzaW9uKCR1c2VyaWQsICdNb2RpZnkgQW55IFBhZ2UnKTsKJGFkbWluYWNjZXNzID0gJGFjY2VzczsKaWYgKCEkYWNjZXNzKQp7CgkkYWNjZXNzID0gY2hlY2tfYXV0aG9yc2hpcCgkdXNlcmlkLCAkY29udGVudF9pZCk7Cn0KCmlmICgkYWNjZXNzKQp7CglpZiAoJHN1Ym1pdCB8fCAkYXBwbHkpCgl7CgkJI0ZpbGwgY29udGVudG9iaiB3aXRoIHBhcmFtZXRlcnMKCQkkY29udGVudG9iai0+RmlsbFBhcmFtcygkX1BPU1QpOwoJCSRlcnJvciA9ICRjb250ZW50b2JqLT5WYWxpZGF0ZURhdGEoKTsKCgkJaWYgKGlzc2V0KCRfUE9TVFsib3duZXJpZCJdKSkKCQl7CgkJCSRjb250ZW50b2JqLT5TZXRPd25lcigkX1BPU1RbIm93bmVyaWQiXSk7CgkJfQoKCQkjRmlsbCBBZGRpdGlvbmFsIEVkaXRvcnMgKGtpbmQgb2Yga2x1ZGd5KQoJCWlmIChpc3NldCgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdKSkKCQl7CgkJCSRhZGR0YXJyYXkgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkX1BPU1RbImFkZGl0aW9uYWxfZWRpdG9ycyJdIGFzICRhZGR0X3VzZXJfaWQpCgkJCXsKCQkJCSRhZGR0YXJyYXlbXSA9ICRhZGR0X3VzZXJfaWQ7CgkJCX0KCQkJJGNvbnRlbnRvYmotPlNldEFkZGl0aW9uYWxFZGl0b3JzKCRhZGR0YXJyYXkpOwoJCX0KCQllbHNlIGlmICgkYWRtaW5hY2Nlc3MpCgkJewoJCQkkY29udGVudG9iai0+U2V0QWRkaXRpb25hbEVkaXRvcnMoYXJyYXkoKSk7CgkJfQoKCQlpZiAoJGVycm9yID09PSBGQUxTRSkKCQl7CgkJCSRjb250ZW50b2JqLT5TYXZlKCk7CgkJCUJsb2NrQ29udGVudE1hbmFnZXI6OlNldEFsbEhpZXJhcmNoeVBvc2l0aW9ucygpOwoJCQkvL1VwZGF0ZSBzZWFyY2ggaW5kZXgKCQkJJG1vZHVsZSA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ1NlYXJjaCcpOwoJCQlpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCQkJICB7CgkJCSAgICAkbW9kdWxlLT5BZGRXb3JkcygkdGhpcy0+R2V0TmFtZSgpLCAkY29udGVudG9iai0+SWQoKSwgJ2Jsb2NrJywgJGNvbnRlbnRvYmotPk5hbWUoKSAuICcgJyAuJGNvbnRlbnRvYmotPkdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnRfZW4nKSk7CgkJCSAgfQoJCQlpZiAoJHN1Ym1pdCkKCQkJewoJCQkJYXVkaXQoJGNvbnRlbnRvYmotPklkKCksICRjb250ZW50b2JqLT5OYW1lKCksICdFZGl0ZWQgQ29udGVudCcpOwoJCQkJJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ2Jsb2NrX3VwZGF0ZWQnLCAnYWN0aXZlX3RhYicgPT4gJ2Jsb2NrcycpOwoJCQkJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFyYW1zKTsKCQkJfQoJCX0KCX0KCWVsc2UgaWYgKCRjb250ZW50X2lkICE9IC0xICYmICEkcHJldmlldyAmJiBzdHJ0b2xvd2VyKGdldF9jbGFzcygkY29udGVudG9iaikpICE9IHN0cnRvbG93ZXIoJGNvbnRlbnRfdHlwZSkpCgl7CgkJJGNvbnRlbnRvYmogPSBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpMb2FkQ29udGVudEZyb21JZCgkY29udGVudF9pZCk7CgkJJGNvbnRlbnRfdHlwZSA9ICRjb250ZW50b2JqLT5UeXBlKCk7CgkJJGNvbnRlbnRvYmotPlNldExhc3RNb2RpZmllZEJ5KCR1c2VyaWQpOwoJfQoJZWxzZQoJewoJCXVwZGF0ZWNvbnRlbnRvYmooJGNvbnRlbnRvYmosICRwcmV2aWV3KTsKCX0KfQoKaWYgKHN0cmxlbigkY29udGVudG9iai0+TmFtZSgpKSA+IDApCnsKCSRDTVNfQURNSU5fU1VCVElUTEUgPSAkY29udGVudG9iai0+TmFtZSgpOwp9CgppbmNsdWRlX29uY2UoImhlYWRlci5waHAiKTsKCiR0bXBmbmFtZSA9ICcnOwoKaWYgKCEkYWNjZXNzKQp7CgllY2hvICI8ZGl2IGNsYXNzPVwicGFnZWVycm9yY29udGFpbmVyXCI+PHAgY2xhc3M9XCJwYWdlZXJyb3JcIj4iLmxhbmcoJ25vYWNjZXNzdG8nLGFycmF5KGxhbmcoJ2VkaXRwYWdlJykpKS4iPC9wPjwvZGl2PiI7Cn0KZWxzZQp7CgkjR2V0IGEgbGlzdCBvZiBjb250ZW50X3R5cGVzIGFuZCBidWlsZCB0aGUgZHJvcGRvd24gdG8gc2VsZWN0IG9uZQoJJHR5cGVzZHJvcGRvd24gPSAnPHNlbGVjdCBuYW1lPSJjb250ZW50X3R5cGUiIG9uY2hhbmdlPSJkb2N1bWVudC5jb250ZW50Zm9ybS5zdWJtaXQoKSIgY2xhc3M9InN0YW5kYXJkIj4nOwoJZm9yZWFjaCAoJGV4aXN0aW5ndHlwZXMgYXMgJG9uZXR5cGU9PiRuYW1lKQoJewoJCSR0eXBlc2Ryb3Bkb3duIC49ICI8b3B0aW9uIHZhbHVlPVwiJG9uZXR5cGVcIiI7CgkJaWYgKCRvbmV0eXBlID09ICRjb250ZW50X3R5cGUpCgkJewoJCQkkdHlwZXNkcm9wZG93biAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOwoJCX0KCQkkdHlwZXNkcm9wZG93biAuPSAiPiIuJG5hbWUuIjwvb3B0aW9uPiI7Cgl9CgkkdHlwZXNkcm9wZG93biAuPSAiPC9zZWxlY3Q+IjsKCglpZiAoRkFMU0UgPT0gZW1wdHkoJGVycm9yKSkKCXsKICAgIAllY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcik7Cgl9CgllbHNlIGlmICgkcHJldmlldykKCXsKCQkkdG1wZm5hbWUgPSBjcmVhdGV0bXBmbmFtZSgkY29udGVudG9iaik7Cgk/PgoKPD9waHAKCn0KCiMkY29udGVudGFycmF5ID0gJGNvbnRlbnRvYmotPkVkaXRBc0FycmF5KHRydWUsIDAsICRhZG1pbmFjY2Vzcyk7CiMkY29udGVudGFycmF5MiA9ICRjb250ZW50b2JqLT5FZGl0QXNBcnJheSh0cnVlLCAxLCAkYWRtaW5hY2Nlc3MpOwoKJHRhYm5hbWVzID0gJGNvbnRlbnRvYmotPlRhYk5hbWVzKCk7Cgo/PgoKCTxkaXYgaWQ9InBhZ2VfdGFicyIgc3R5bGU9IndpZHRoOjEwMCU7Ij4KCQk8P3BocAoJCSRjb3VudCA9IDA7CgoJCSNXZSBoYXZlIHByZXZpZXcsIGJ1dCBubyB0YWJzCgkJaWYgKGNvdW50KCR0YWJuYW1lcykgPT0gMCkKCQl7CgkJCT8+CgkJCTxkaXYgaWQ9ImVkaXRhYjAiPjw/cGhwIGVjaG8gbGFuZygnY29udGVudCcpPz48L2Rpdj4KCQkJPD9waHAKCQl9CgkJZWxzZQoJCXsKCQkJZm9yZWFjaCAoJHRhYm5hbWVzIGFzICRvbmV0YWIpCgkJCXsKCQkJCT8+CgkJCQk8ZGl2IGlkPSJlZGl0YWI8P3BocCBlY2hvICRjb3VudD8+Ij48P3BocCBlY2hvICRvbmV0YWI/PjwvZGl2PgoJCQkJPD9waHAKCQkJCSRjb3VudCsrOwoJCQl9CgkJfQoJCQoJCSNNYWtlIGEgcHJldmlldyB0YWIKCQlpZiAoJGNvbnRlbnRvYmotPm1QcmV2aWV3KQoJCXsKCQkJZWNobyAnPGRpdiBpZD0iZWRpdHRhYnByZXZpZXciJy4oJHRtcGZuYW1lIT0nJz8nIGNsYXNzPSJhY3RpdmUiJzonJykuJyBvbmNsaWNrPSIjI0lOTElORVNVQk1JVFNUVUZGR09FU0hFUkUjI3hhamF4X2FqYXhwcmV2aWV3KHhhamF4LmdldEZvcm1WYWx1ZXMoXCdjb250ZW50Zm9ybVwnKSk7cmV0dXJuIGZhbHNlOyI+Jy5sYW5nKCdwcmV2aWV3JykuJzwvZGl2Pic7CgkJfQoKCQkKCQllY2hvICc8L2Rpdj4nOwoJCWVjaG8gJzxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+JzsKCQllY2hvICc8Zm9ybSBtZXRob2Q9InBvc3QiIGFjdGlvbj0iJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJjb250ZW50Zm9ybSIgaWQ9ImNvbnRlbnRmb3JtIiMjRk9STVNVQk1JVFNUVUZGR09FU0hFUkUjIz4nOwo/Pgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ic2VyaWFsaXplZF9jb250ZW50IiBuYW1lPSJzZXJpYWxpemVkX2NvbnRlbnQiIHZhbHVlPSI8P3BocCBlY2hvIFNlcmlhbGl6ZU9iamVjdCgkY29udGVudG9iaik7ID8+IiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb250ZW50X2lkIiB2YWx1ZT0iPD9waHAgZWNobyAkY29udGVudF9pZD8+IiAvPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYWdlIiB2YWx1ZT0iPD9waHAgZWNobyAkcGFnZWxpc3RfaWQ7ID8+IiAvPgo8ZGl2IGlkPSJwYWdlX2NvbnRlbnQiPgo8P3BocAokc3VibWl0X2J1dHRvbnMgPSAnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CjxwIGNsYXNzPSJwYWdlaW5wdXQiPgogPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0YnV0dG9uIiB2YWx1ZT0iJy5sYW5nKCdzdWJtaXQnKS4nIiBjbGFzcz0icGFnZWJ1dHRvbiIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvbmhvdmVyXCciIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvblwnIiB0aXRsZT0iJy5sYW5nKCdzdWJtaXRkZXNjcmlwdGlvbicpLiciIC8+JzsKaWYgKGlzc2V0KCRjb250ZW50b2JqLT5tUHJldmlldykgJiYgJGNvbnRlbnRvYmotPm1QcmV2aWV3ID09IHRydWUpCiAgewogICAgJHN1Ym1pdF9idXR0b25zIC49ICcgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0icHJldmlld2J1dHRvbiIgdmFsdWU9IicubGFuZygncHJldmlldycpLiciIGNsYXNzPSJwYWdlYnV0dG9uIiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uaG92ZXJcJyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uXCciIHRpdGxlPSInLmxhbmcoJ3ByZXZpZXdkZXNjcmlwdGlvbicpLiciIG9uY2xpY2s9IiMjSU5MSU5FU1VCTUlUU1RVRkZHT0VTSEVSRSMjeGFqYXhfYWpheHByZXZpZXcoeGFqYXguZ2V0Rm9ybVZhbHVlcyhcJ2NvbnRlbnRmb3JtXCcpKTtyZXR1cm4gZmFsc2U7IiAvPic7CiAgfQokc3VibWl0X2J1dHRvbnMgLj0gJyA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJjYW5jZWwiIHZhbHVlPSInLmxhbmcoJ2NhbmNlbCcpLiciIGNsYXNzPSJwYWdlYnV0dG9uIiBvbmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycubGFuZygnY29uZmlybWNhbmNlbCcpLidcJyk7IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uaG92ZXJcJyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9XCdwYWdlYnV0dG9uXCciIHRpdGxlPSInLmxhbmcoJ2NhbmNlbGRlc2NyaXB0aW9uJykuJyIgLz4nOwokc3VibWl0X2J1dHRvbnMgLj0gJyA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJhcHBseWJ1dHRvbiIgdmFsdWU9IicubGFuZygnYXBwbHknKS4nIiBjbGFzcz0icGFnZWJ1dHRvbiIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvbmhvdmVyXCciIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPVwncGFnZWJ1dHRvblwnIiB0aXRsZT0iJy5sYW5nKCdhcHBseWRlc2NyaXB0aW9uJykuJyIgLz4KPC9wPgo8L2Rpdj4nOwovL2VjaG8gJHN1Ym1pdF9idXR0b25zOwoJCSRudW1iZXJvZnRhYnMgPSBjb3VudCgkdGFibmFtZXMpOwoJCSRzaG93dGFicyA9IDE7CgkJaWYgKCRudW1iZXJvZnRhYnMgPT0gMCkKCQl7CgkJCSRudW1iZXJvZnRhYnMgPSAxOwoJCQkkc2hvd3RhYnMgPSAxOwoJCX0KCQlmb3IgKCRjdXJyZW50dGFiID0gMDsgJGN1cnJlbnR0YWIgPCAkbnVtYmVyb2Z0YWJzOyAkY3VycmVudHRhYisrKQoJCXsKCQkJaWYgKCRzaG93dGFicyA9PSAxKQoJCQl7CgkJCQk/PjxkaXYgaWQ9ImVkaXRhYjw/cGhwIGVjaG8gJGN1cnJlbnR0YWIgPz5fYyI+PD9waHAKCQkJfQoJCQlpZiAoJGN1cnJlbnR0YWIgPT0gMCkKCQkJewoJCQkJZWNobyAkc3VibWl0X2J1dHRvbnM7CgkJCQk/PgoJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQk8cCBjbGFzcz0icGFnZXRleHQiPjw/cGhwIGVjaG8gbGFuZygnY29udGVudHR5cGUnKTsgPz46PC9wPgoJCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPjw/cGhwIGVjaG8gJHR5cGVzZHJvcGRvd247ID8+PC9wPgoJCQkJPC9kaXY+CgkJCQk8P3BocAoJCQl9CgkJCSRjb250ZW50YXJyYXkgPSAkY29udGVudG9iai0+RWRpdEFzQXJyYXkoZmFsc2UsICRjdXJyZW50dGFiLCAkYWRtaW5hY2Nlc3MpOwoJCQlmb3IoJGk9MDskaTxjb3VudCgkY29udGVudGFycmF5KTskaSsrKQoJCQl7CgkJCQk/PgoJCQkJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQkJCQk8cCBjbGFzcz0icGFnZXRleHQiPjw/cGhwIGVjaG8gJGNvbnRlbnRhcnJheVskaV1bMF07ID8+PC9wPgoJCQkJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPjw/cGhwIGVjaG8gJGNvbnRlbnRhcnJheVskaV1bMV07ID8+PC9wPgoJCQkJPC9kaXY+CgkJCQk8P3BocAoJCQl9CgkJCT8+CgkJCTxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+CgkJPC9kaXY+CgkJPD9waHAKCQl9CgkJaWYgKCRjb250ZW50b2JqLT5tUHJldmlldykKCQl7CgkJCWVjaG8gJzxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+PGRpdiBpZD0iZWRpdHRhYnByZXZpZXdfYyInLigkdG1wZm5hbWUhPScnPycgY2xhc3M9ImFjdGl2ZSInOicnKS4nPic7CgkJCQk/PgoJCQkJCTxpZnJhbWUgbmFtZT0icHJldmlld2ZyYW1lIiBjbGFzcz0icHJldmlldyIgaWQ9InByZXZpZXdmcmFtZSI8P3BocCBpZiAoJHRtcGZuYW1lICE9ICcnKSB7ID8+IHNyYz0iPD9waHAgZWNobyAkY29uZmlnWyJyb290X3VybCJdID8+L3ByZXZpZXcucGhwP3RtcGZpbGU9PD9waHAgZWNobyB1cmxlbmNvZGUoYmFzZW5hbWUoJHRtcGZuYW1lKSk/PiI8P3BocCB9ID8+PjwvaWZyYW1lPgoJCQkJPD9waHAKCQkJZWNobyAnPC9kaXY+PC9kaXY+JzsKCQkJZWNobyAnPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ij48L2Rpdj4nOwoJCX0KCQllY2hvICRzdWJtaXRfYnV0dG9uczsKCQk/PgoJPC9kaXY+Cgk8L2Zvcm0+Cjw/cGhwCgp9CgojIHZpbTp0cz00IHN3PTQgbm9ldAo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.edittemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7DQoNCmlmIChpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkpIA0KICB7DQoJJHBhcmFtcyA9IGFycmF5KCdhY3RpdmVfdGFiJyA9PiAndGVtcGxhdGVzJyk7DQoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCwgJHBhcmFtcyk7DQogIH0NCmlmKCEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ1VzZSBQYWdlQmxvY2tzJyApICkgZXhpdDsNCg0KJHRlbXBsYXRlbmFtZSA9IChpc3NldCgkcGFyYW1zWyd0ZW1wbGF0ZW5hbWUnXSkgPyAkcGFyYW1zWyd0ZW1wbGF0ZW5hbWUnXSA6ICcnKTsNCiRuZXd0ZW1wbGF0ZW5hbWUgPSAoaXNzZXQoJHBhcmFtc1snbmV3dGVtcGxhdGVuYW1lJ10pID8gJHBhcmFtc1snbmV3dGVtcGxhdGVuYW1lJ10gOiAnJyk7DQokdGVtcGxhdGVjb250ZW50ID0gKGlzc2V0KCRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddKSA/ICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddIDogJycpOw0KDQppZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pIHx8IGlzc2V0KCRwYXJhbXNbJ2FwcGx5J10pKQ0Kew0KCWlmICgkbmV3dGVtcGxhdGVuYW1lICE9ICIiKQ0KCXsNCgkJJGVycm9yID0gZmFsc2U7DQoJCWlmICgkbmV3dGVtcGxhdGVuYW1lICE9ICR0ZW1wbGF0ZW5hbWUpDQoJCXsNCgkJCWlmICgkdGhpcy0+R2V0VGVtcGxhdGUoJG5ld3RlbXBsYXRlbmFtZSkgIT0gJycpDQoJCQl7DQoJCQkJJHRoZW1lT2JqZWN0ID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddOw0KCQkJCS8vIGVjaG8gJHRoZW1lT2JqZWN0LT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcnRlbXBsYXRlbmFtZWV4aXN0cycpKTsNCgkJCQllY2hvICc8ZGl2IGNsYXNzPSJwYWdlZXJyb3Jjb250YWluZXIiPicuJHRoaXMtPkxhbmcoJ2Vycm9ydGVtcGxhdGVuYW1lZXhpc3RzJykuJzwvZGl2Pic7DQoJCQkJJG5ld3RlbXBsYXRlbmFtZSA9ICR0ZW1wbGF0ZW5hbWU7DQoJCQkJJGVycm9yID0gdHJ1ZTsNCgkJCX0NCgkJCWVsc2UNCgkJCXsNCgkJCQkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHRlbXBsYXRlbmFtZSk7DQoJCQl9DQoJCX0NCgkJDQoJCWlmICghJGVycm9yKQ0KCQl7DQoJCQkkdGhpcy0+U2V0VGVtcGxhdGUoJG5ld3RlbXBsYXRlbmFtZSwgJHRlbXBsYXRlY29udGVudCk7DQoJCQlpZiAoaXNzZXQoJHBhcmFtc1snc3VibWl0J10pKQ0KCQkJew0KCQkJCSRwYXJhbXMgPSBhcnJheSgndGFiX21lc3NhZ2UnID0+ICd0ZW1wbGF0ZXNhdmVkJywgJ2FjdGl2ZV90YWInID0+ICd0ZW1wbGF0ZXMnKTsNCgkJCQkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAkcGFyYW1zKTsNCgkJCX0gZWxzZSB7DQoJCQkJJHRlbXBsYXRlbmFtZSA9ICRuZXd0ZW1wbGF0ZW5hbWU7DQoJCQl9DQoJCX0NCg0KCX0NCgllbHNlDQoJew0KCQllY2hvICR0aGlzLT5sYW5nKCdub25hbWUnKTsNCgl9DQp9DQplbHNlDQoJJHRlbXBsYXRlY29udGVudCA9ICR0aGlzLT5HZXRUZW1wbGF0ZSgkdGVtcGxhdGVuYW1lKTsNCg0KZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7DQplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3RlbXBsYXRlJywkdGhpcy0+TGFuZygndGVtcGxhdGUnKSk7DQplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ2hlbHAnLCR0aGlzLT5MYW5nKCd0ZW1wbGF0ZV9oZWxwJykpOw0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOw0KZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7DQplY2hvICR0aGlzLT5TdGFydFRhYigidGVtcGxhdGUiKTsNCg0KZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwgJ2VkaXR0ZW1wbGF0ZScsICRyZXR1cm5pZCk7DQoNCmVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ3RlbXBsYXRlbmFtZScsICR0ZW1wbGF0ZW5hbWUpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWV0ZXh0JywgJHRoaXMtPkxhbmcoJ25hbWUnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWVpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnbmV3dGVtcGxhdGVuYW1lJywgJHRlbXBsYXRlbmFtZSwgMzAsIDI1NSkpOw0KDQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbnRlbnR0ZXh0JywgJHRoaXMtPkxhbmcoJ3RlbXBsYXRlJykpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjb250ZW50aW5wdXQnLCAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsICRpZCwgJHRlbXBsYXRlY29udGVudCwgJ3RlbXBsYXRlY29udGVudCcsICcnLCAnJywgJycsICcnLCAnODAnLCAnMjAnKSk7DQokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCBsYW5nKCdzdWJtaXQnKSkpOw0KJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywgbGFuZygnY2FuY2VsJykpKTsNCg0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlZGl0dGVtcGxhdGUudHBsJyk7DQoNCmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsNCmVjaG8gJHRoaXMtPkVuZFRhYigpOw0KZWNobyAkdGhpcy0+U3RhcnRUYWIoImhlbHAiKTsNCmVjaG8gJHRoaXMtPkxhbmcoJ2hlbHBfdGVtcGxhdGUnKTsNCmVjaG8gJHRoaXMtPkVuZFRhYigpOw0KZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOw0KPz4NCg==]]></data>
	</file>
	<file>
	  <filename>/action.recently_updated.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgogIGlmKGVtcHR5KCRwYXJhbXNbJ251bWJlciddKSkKICAgIHsKICAgICAgJG51bWJlciA9IDEwOwogICAgfQogIGVsc2UKICAgIHsKICAgICAgJG51bWJlciA9ICRwYXJhbXNbJ251bWJlciddOwogICAgfQoKJG91dHB1dCA9ICc8dWw+JzsKZ2xvYmFsICRnQ21zOwovLyAkaG0gPSYgJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKLy8gJGhpZXJNYW5hZ2VyID0gJkJsb2NrQ29udGVudE1hbmFnZXI6OkdldEFsbENvbnRlbnRBc0hpZXJhcmNoeShmYWxzZSk7Ci8vICRibG9ja19obSA9ICYkaGllck1hbmFnZXItPmdldFJvb3ROb2RlKCk7CiRobSA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwokZGIgPSAmJGdDbXMtPmRiOwovLyBHZXQgbGlzdCBvZiBtb3N0IHJlY2VudGx5IHVwZGF0ZWQgcGFnZXMgZXhjbHVkaW5nIHRoZSBob21lIHBhZ2UKJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSB0eXBlPSd0ZXh0JyBBTkQgYWN0aXZlID0gMSBPUkRFUiBCWSBtb2RpZmllZF9kYXRlIERFU0MgTElNSVQgIi4kbnVtYmVyOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxICk7CmlmKCAhJGRicmVzdWx0ICkKewogICAgZWNobyAnREIgZXJyb3I6ICcuICRkYi0+RXJyb3JNc2coKS4iPGJyLz4iOwp9CndoaWxlICgkZGJyZXN1bHQgJiYgJGJsb2NrID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQp7CiAgICAkY3Vybm9kZSA9JiAkaG0tPmdldE5vZGVCeUlkKCRibG9ja1sncGFyZW50X3BhZ2VfaWQnXSk7CiAgICAkY3VyY29udGVudCA9JiAkY3Vybm9kZS0+R2V0Q29udGVudCgpOwogICAgJG91dHB1dCAuPSAnPGxpPic7CiAgICAkb3V0cHV0IC49ICc8YSBocmVmPSInLiRjdXJjb250ZW50LT5HZXRVUkwoKS4nIycuJGJsb2NrWydjb250ZW50X2FsaWFzJ10uJyI+Jy4kYmxvY2tbJ2NvbnRlbnRfbmFtZSddLic8L2E+JzsKICAgIGlmIChGQUxTRSA9PSBlbXB0eSgkYmxvY2tbJ3RpdGxlYXR0cmlidXRlJ10pKQogICAgICB7Cgkkb3V0cHV0IC49ICc8YnIgLz4nOwoJJG91dHB1dCAuPSAkYmxvY2tbJ3RpdGxlYXR0cmlidXRlJ107CiAgICAgIH0KICAgICRvdXRwdXQgLj0gJzxiciAvPic7CiAgICAkb3V0cHV0IC49ICR0aGlzLT5MYW5nKCdtb2RpZmllZCcpLic6ICcgLiRibG9ja1snbW9kaWZpZWRfZGF0ZSddOwogICAgJG91dHB1dCAuPSAnPC9saT4nOwp9CiRvdXRwdXQgLj0gJzwvdWw+JzsKZWNobyAkb3V0cHV0OwoKPz4gCg==]]></data>
	</file>
	<file>
	  <filename>/action.updateoptions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgKSApCnsKICByZXR1cm47Cn0KJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHR0ZW1wbGF0ZScsICRwYXJhbXNbJ2RlZmF1bHR0ZW1wbGF0ZSddKTsKJHNob3d0b2MgPSAoaXNzZXQoJHBhcmFtc1snc2hvd3RvYyddKSA/ICRwYXJhbXNbJ3Nob3d0b2MnXSA6IDApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnc2hvd3RvYycsICRzaG93dG9jKTsKJHBhcmFtcyA9IGFycmF5KCd0YWJfbWVzc2FnZScgPT4gJ29wdGlvbnNfdXBkYXRlZCcsICdhY3RpdmVfdGFiJyA9PiAnb3B0aW9ucycpOwokdGhpcy0+UmVkaXJlY3QoJGlkLCAnZGVmYXVsdGFkbWluJywgJycsICRwYXJhbXMpOwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/classes/class.ImageText.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgSW1hZ2VUZXh0IGV4dGVuZHMgQ01TTW9kdWxlQmxvY2tDb250ZW50VHlwZQp7CglmdW5jdGlvbiBNb2R1bGVOYW1lKCkKCXsKCSAgcmV0dXJuICdQYWdlQmxvY2tzJzsKCX0KCgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGNvbmZpZyA9ICYkZ0Ntcy0+R2V0Q29uZmlnKCk7CgkJJGNvbmZpZ1snaW1hZ2VfdXBsb2Fkc191cmwnXTsKCQkkb3V0cHV0ID0gJzxwPjxpbWcgc3JjPSInLiRjb25maWdbJ2ltYWdlX3VwbG9hZHNfdXJsJ10uJy8nLiAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnaW1hZ2UnKTsKCQkkb3V0cHV0IC49ICciIHN0eWxlPSJmbG9hdDonLiR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdvcmllbnRhdGlvbicpLiciIGFsdD0iIiAvPic7CgkJJG91dHB1dCAuPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgnY29udGVudF9lbicpIC4gJzxwPic7CgkJcmV0dXJuICRvdXRwdXQ7Cgl9CgoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKQoJewoJCSR0aGlzLT5tUHJvcGVydGllcy0+QWRkKCJzdHJpbmciLCAiY29udGVudF9lbiIpOyAvL0ZvciBsYXRlciBsYW5ndWFnZSBzdXBwb3J0CgkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5BZGQoInN0cmluZyIsICJpbWFnZSIpOyAvL0ZvciBsYXRlciBsYW5ndWFnZSBzdXBwb3J0CgkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5BZGQoInN0cmluZyIsICJvcmllbnRhdGlvbiIpOyAvL0ZvciBsYXRlciBsYW5ndWFnZSBzdXBwb3J0CgoJCSNUdXJuIG9uIHByZXZpZXcKLy8JCSR0aGlzLT5tUHJldmlldyA9IHRydWU7Cgl9CgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gRWRpdEFzQXJyYXkoJGFkZGluZyA9IGZhbHNlLCAkdGFiID0gMCwgJHNob3dhZG1pbiA9IGZhbHNlKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkY29uZmlnID0gJiRnQ21zLT5HZXRDb25maWcoKTsKCgkJJHJldCA9IGFycmF5KCk7CgkJZ2xvYmFsICRpZDsKCQkkbW9kX3BhcmFtcyA9IEdldE1vZHVsZVBhcmFtZXRlcnMoJGlkKTsKCQkkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUGFnZUJsb2NrcycpOwoJCSRyZXRbXT0gYXJyYXkobGFuZygncGFyZW50JykuJzonLCBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDcmVhdGVIaWVyYXJjaHlEcm9wZG93bigkdGhpcy0+bUlkLCAkdGhpcy0+bVBhcmVudElkLCAncGFyZW50X2lkJywgJG1vZF9wYXJhbXNbJ3BhcmVudF9wYWdlX2lkJ10pKTsKCQkkcmV0W109IGFycmF5KGxhbmcoJ2FjdGl2ZScpLic6JywnPGlucHV0IGNsYXNzPSJwYWdlY2hlY2tib3giIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhY3RpdmUiJy4oJHRoaXMtPm1BY3RpdmU/JyBjaGVja2VkPSJjaGVja2VkIic6JycpLicgLz4nKTsKCQkkcmV0W109IGFycmF5KGxhbmcoJ2NvbnRlbnQnKS4nOicsY3JlYXRlX3RleHRhcmVhKHRydWUsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdjb250ZW50X2VuJyksICdjb250ZW50X2VuJykpOwoJCSRyZXRbXT0gYXJyYXkoJHRoaXMtPkxhbmcoJ29yaWVudGF0aW9uJykuJzonLCAkbW9kdWxlLT5DcmVhdGVJbnB1dERyb3Bkb3duKCcnLCAnb3JpZW50YXRpb24nLCBhcnJheSggJ0xlZnQnID0+ICdsZWZ0JywgJ1JpZ2h0JyA9PiAncmlnaHQnKSwgLTEsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdvcmllbnRhdGlvbicpKSk7CgkJCi8qCiAgCQkvLyBJIHdhbnRlZCB0byB1c2UgdGhlIEltYWdlTWFuYWdlciBmb3IgdGhpcyBwdXJwb3NlLAogIAkJLy8gYnV0IGNvdWxkbid0IGdldCB0aGlzIHRvIHdvcmsgeWV0CiAgCQlyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy8uLi8uLi8uLi9saWIvZmlsZW1hbmFnZXIvSW1hZ2VNYW5hZ2VyL2NvbmZpZy5pbmMucGhwJyk7CiAgICAgICAgcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvLi4vLi4vLi4vbGliL2ZpbGVtYW5hZ2VyL0ltYWdlTWFuYWdlci9DbGFzc2VzL0ltYWdlTWFuYWdlci5waHAnKTsKCQkkaW0gPSBuZXcgSW1hZ2VNYW5hZ2VyKCRJTUNvbmZpZyk7CgkJdmFyX2R1bXAoJGltLT5nZXRGaWxlcygneWJsb2Nrcy8nKSk7CgkJJHJldFtdPSBhcnJheShsYW5nKCdmaWxlJykuJzonLCIiKTsKKi8KCgkJJGlucHV0X2RpciA9ICRjb25maWdbJ2ltYWdlX3VwbG9hZHNfcGF0aCddIC4gJy8nOwoJCSRpbWFnZXMgPSBhcnJheSgpOwoJCWlmIChpc19kaXIoJGlucHV0X2RpcikgJiYgJGRoID0gb3BlbmRpcigkaW5wdXRfZGlyKSkgewoJCQl3aGlsZSAoKCRmaWxlbmFtZSA9IHJlYWRkaXIoJGRoKSkgIT09IGZhbHNlCgkJCQkJCSYmICRmaWxlbmFtZSkgewoJCQkJaWYgKCRmaWxlbmFtZT09Jy4nKSBjb250aW51ZTsKCQkJCWlmICgkZmlsZW5hbWU9PScuLicpIGNvbnRpbnVlOwoJCQkJaWYgKHN1YnN0cigkZmlsZW5hbWUsMCw2KSA9PSAndGh1bWJfJykgY29udGludWU7CgkJCQkkZXh0ZW5zaW9uID0gc3Vic3RyKCRmaWxlbmFtZSwtMyk7CgkJCQlpZiAoJGV4dGVuc2lvbiA9PSAncG5nJwoJCQkJCQl8fCAkZXh0ZW5zaW9uID09ICdqcGcnCgkJCQkJCXx8ICRleHRlbnNpb24gPT0gJ2dpZicpIHsKCQkJCQkkdGh1bWJuYW1lID0gJ3RodW1iXycuJGZpbGVuYW1lOwoJCQkJCSRpbWFnZXNbJGZpbGVuYW1lXSA9ICRmaWxlbmFtZTsKCQkJCX0KCQkJfQoJCQljbG9zZWRpcigkZGgpOwoJCX0KCQkkcmV0W109IGFycmF5KCR0aGlzLT5MYW5nKCdpbWFnZScpLic6JywgJG1vZHVsZS0+Q3JlYXRlSW5wdXREcm9wZG93bignJywgJ2ltYWdlJywgJGltYWdlcywgLTEsICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCdpbWFnZScpKSk7CgoJCXJldHVybiAkcmV0OwoJfQoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFZhbGlkYXRlRGF0YSgpCgl7CgkJJGVycm9ycyA9IGFycmF5KCk7CgkJCS8qCgkJaWYgKCR0aGlzLT5tUGFyZW50SWQgPT0gLTEpCgkJewoJCQkkZXJyb3JzW109IGxhbmcoJ25vZmllbGRnaXZlbicsYXJyYXkobGFuZygncGFyZW50JykpKTsKCQkJJHJlc3VsdCA9IGZhbHNlOwoJCX0KCQkJKi8KCQlyZXR1cm4gKGNvdW50KCRlcnJvcnMpID4gMCA/ICRlcnJvcnMgOiBmYWxzZSk7Cgl9CgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gRmlsbFBhcmFtcygkcGFyYW1zKQoJewoJCWlmIChpc3NldCgkcGFyYW1zKSkKCQl7CgkJCSRwYXJhbWV0ZXJzID0gYXJyYXkoJ2NvbnRlbnRfZW4nLCAnb3JpZW50YXRpb24nLCAnaW1hZ2UnKTsKCQkJZm9yZWFjaCAoJHBhcmFtZXRlcnMgYXMgJG9uZXBhcmFtKQoJCQl7CgkJCQlpZiAoaXNzZXQoJHBhcmFtc1skb25lcGFyYW1dKSkKCQkJCXsKCQkJCQkkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkb25lcGFyYW0sICRwYXJhbXNbJG9uZXBhcmFtXSk7CgkJCQl9CgkJCX0KCQkJaWYgKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pZCddKSkKCQkJewoJCQkJaWYgKCR0aGlzLT5tUGFyZW50SWQgIT0gJHBhcmFtc1sncGFyZW50X2lkJ10pCgkJCQl7CgkJCQkJJHRoaXMtPm1IaWVyYXJjaHkgPSAnJzsKCQkJCQkkdGhpcy0+bUl0ZW1PcmRlciA9IC0xOwoJCQkJfQoJCQkJJHRoaXMtPm1QYXJlbnRJZCA9ICRwYXJhbXNbJ3BhcmVudF9pZCddOwoJCQkJCS8vCQkgIGRpZSgkdGhpcy0+bVBhcmVudElkKTsKCQkJfQkKCQkJJHRoaXMtPm1OYW1lID0gc3Vic3RyKCRwYXJhbXNbJ2NvbnRlbnRfZW4nXSwgMCwgMzApIC4gJ1suLl0nOwoJCQkkdGhpcy0+bVNob3dJbk1lbnUgPSBmYWxzZTsKCSAgICAgIAoJCQlpZiAoaXNzZXQoJHBhcmFtc1snYWN0aXZlJ10pKQoJCQl7CgkJCQkkdGhpcy0+bUFjdGl2ZSA9IHRydWU7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkdGhpcy0+bUFjdGl2ZSA9IGZhbHNlOwoJCQl9CgoJCQkvLyBUT0RPCgkJCSR0aGlzLT5tQ2FjaGFibGUgPSBmYWxzZTsKCQl9Cgl9CgoKCS8qIG92ZXJyaWRlICovCglmdW5jdGlvbiBGcmllbmRseU5hbWUoKQoJewoJICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ltYWdldGV4dCcpOwoJfQoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFdhbnRzQ2hpbGRyZW4oKQoJewoJCXJldHVybiBmYWxzZTsKCX0KCS8qIG92ZXJyaWRlICovCiAgICBmdW5jdGlvbiBIYXNVc2FibGVMaW5rKCkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/classes/class.Text.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKY2xhc3MgVGV4dCBleHRlbmRzIENNU01vZHVsZUJsb2NrQ29udGVudFR5cGUKewoJZnVuY3Rpb24gTW9kdWxlTmFtZSgpCgl7CgkgIHJldHVybiAnUGFnZUJsb2Nrcyc7Cgl9CgoJdmFyICRhZGRpdGlvbmFsQ29udGVudEJsb2NrczsKCXZhciAkYWRkdENvbnRlbnRCbG9ja3NMb2FkZWQ7CgkKCWZ1bmN0aW9uIFRleHQoKQoJewoJCSR0aGlzLT5CbG9ja0NvbnRlbnRCYXNlKCk7CgkJJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzID0gYXJyYXkoKTsKCQkkdGhpcy0+YWRkdENvbnRlbnRCbG9ja3NMb2FkZWQgPSBmYWxzZTsKCX0KCgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykKCXsKCSAgZ2xvYmFsICRnQ21zOwoJICAkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUGFnZUJsb2NrcycpOwoJICBpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCSAgICB7CgkgICAgICAkdGVtcGxhdGVfZGF0YSA9ICRtb2R1bGUtPkdldFRlbXBsYXRlKCR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCd0ZW1wbGF0ZScpKTsKCSAgICB9CgkgIC8vICR0ZW1wbGF0ZV9kYXRhID0gJzxoMiBpZD0ie2NvbnRlbnQgYmxvY2s9Im5hbWUiIG9uZWxpbmU9InRydWUifSI+e2NvbnRlbnR9PC9oMj4nOwoJICAKCSAgJHBhdHRlcm4gPSAnL3tjb250ZW50KFtefV0qKX0vJzsKCSAgJHBhdHRlcm4yID0gJy8oW2EtekEtejAtOV0qKT1bIlwnXShbXiJcJ10rKVsiXCddLyc7CgkgICRtYXRjaGVzID0gYXJyYXkoKTsKCSAgJHJlc3VsdCA9IHByZWdfbWF0Y2hfYWxsKCRwYXR0ZXJuLCAkdGVtcGxhdGVfZGF0YSwgJG1hdGNoZXMpOwoJICAKCSAgaWYgKCRyZXN1bHQgJiYgY291bnQoJG1hdGNoZXNbMV0pID4gMCkKCSAgICB7CgkgICAgICBmb3JlYWNoICgkbWF0Y2hlc1sxXSBhcyAkd2hvbGV0YWcpCgkJewoJCSAgJG1vcmVtYXRjaGVzID0gYXJyYXkoKTsKCQkgICRyZXN1bHQyID0gcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4yLCAkd2hvbGV0YWcsICRtb3JlbWF0Y2hlcyk7CgkJICBpZiAoJHJlc3VsdDIpCgkJICAgIHsKCQkgICAgICAka2V5dmFsID0gYXJyYXkoKTsKCQkgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkbW9yZW1hdGNoZXNbMV0pOyAkaSsrKQoJCQl7CgkJCSAgJGtleXZhbFskbW9yZW1hdGNoZXNbMV1bJGldXSA9ICRtb3JlbWF0Y2hlc1syXVskaV07CgkJCX0KCQkgICAgICAKCQkgICAgICAkaWQgPSAnJzsKCQkgICAgICAkbmFtZSA9ICcnOwoJCSAgICAgICR1c2V3eXNpd3lnID0gJ3RydWUnOwoJCSAgICAgICRvbmVsaW5lID0gJ2ZhbHNlJzsKCQkgICAgICAKCQkgICAgICBmb3JlYWNoICgka2V5dmFsIGFzICRrZXk9PiR2YWwpCgkJCXsKCQkJICBzd2l0Y2goJGtleSkKCQkJICAgIHsKCQkJICAgIGNhc2UgJ2Jsb2NrJzoKCQkJICAgICAgJGlkID0gc3RyX3JlcGxhY2UoJyAnLCAnXycsICR2YWwpOwoJCQkgICAgICAkbmFtZSA9ICR2YWw7CgkJCSAgICAgIAoJCQkgICAgICAvLyAgYnJlYWs7CgkJCSAgICBjYXNlICd3eXNpd3lnJzoKCQkJICAgICAgJHVzZXd5c2l3eWcgPSAkdmFsOwoJCQkgICAgICAKCQkJICAgICAgLy8JCQkJICAgIGJyZWFrOwoJCQkgICAgY2FzZSAnb25lbGluZSc6CgkJCSAgICAgICRvbmVsaW5lID0gJHZhbDsKCQkJICAgICAgCgkJCSAgICAgIC8vIGJyZWFrOwoJCQkgICAgZGVmYXVsdDoKCQkJICAgICAgLy8JCQkJICAgIGJyZWFrOwoJCQkgICAgfQoJCQl9CgkJICAgICAgCgkJICAgICAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsnaWQnXSA9ICRpZDsKCQkgICAgICAkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3NbJG5hbWVdWyd1c2V3eXNpd3lnJ10gPSAkdXNld3lzaXd5ZzsKCQkgICAgICAkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3NbJG5hbWVdWydvbmVsaW5lJ10gPSAkb25lbGluZTsKCQkgICAgICAkdGVtcGxhdGVfZGF0YSA9IHN0cl9yZXBsYWNlKCd7Y29udGVudCBibG9jaz0iJy4kaWQuJyJ9JywgICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCRpZCksICR0ZW1wbGF0ZV9kYXRhKTsKCQkgICAgICAkdGVtcGxhdGVfZGF0YSA9IHN0cl9yZXBsYWNlKCd7Y29udGVudCBibG9jaz0iJy4kaWQuJyIgb25lbGluZT0idHJ1ZSJ9JywgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGlkKSwgJHRlbXBsYXRlX2RhdGEpOwoJCSAgICAKCQkgICAgfQoJCX0KCSAgICAgIAoJICAgIH0KCSAgJHRlbXBsYXRlX2RhdGEgPSBzdHJfcmVwbGFjZSgne2NvbnRlbnR9JywgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnRfZW4nKSwgJHRlbXBsYXRlX2RhdGEpOwoJICAkbW9kdWxlLT5zbWFydHktPmFzc2lnbignbW9kaWZpZWQnLCAkdGhpcy0+R2V0TW9kaWZpZWREYXRlKCkpOwoJICAkbW9kdWxlLT5zbWFydHktPmFzc2lnbignYWxpYXMnLCAkdGhpcy0+QWxpYXMoKSk7CgkgICRtb2R1bGUtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5tTmFtZSk7CgkgICR0ZW1wbGF0ZV9kYXRhID0gJG1vZHVsZS0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJHRlbXBsYXRlX2RhdGEpOwoKCSAgICByZXR1cm4gJHRlbXBsYXRlX2RhdGE7CgkgIC8vICBkaWUoJHRlbXBsYXRlX2RhdGEpOwoJfQoJCgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gU2V0UHJvcGVydGllcygpCgl7CgkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5BZGQoInN0cmluZyIsICJjb250ZW50X2VuIik7IC8vRm9yIGxhdGVyIGxhbmd1YWdlIHN1cHBvcnQKCQkkdGhpcy0+bVByb3BlcnRpZXMtPkFkZCgic3RyaW5nIiwgInRlbXBsYXRlIik7CgoKCQkjVHVybiBvbiBwcmV2aWV3Ci8vCQkkdGhpcy0+bVByZXZpZXcgPSB0cnVlOwoJfQoJLyoqCgkgKiBVc2UgdGhlIFJlYWR5Rm9yRWRpdCBjYWxsYmFjayB0byBnZXQgdGhlIGFkZGl0aW9uYWwgY29udGVudCBibG9ja3MgbG9hZGVkLgoJICovCglmdW5jdGlvbiBSZWFkeUZvckVkaXQoKQoJewoJCSR0aGlzLT5HZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpOwoJfQoJLyoKCWZ1bmN0aW9uIEdldE1vZHVsZUluc3RhbmNlKCRtb2R1bGUpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCWlmIChpc3NldCgkZ0Ntcy0+bW9kdWxlc1skbW9kdWxlXSkgJiYKCQkgICAgJGdDbXMtPm1vZHVsZXNbJG1vZHVsZV1bJ2luc3RhbGxlZCddID09IHRydWUgJiYKCQkgICAgJGdDbXMtPm1vZHVsZXNbJG1vZHVsZV1bJ2FjdGl2ZSddID09IHRydWUpCgkJICB7CgkJICAgIHJldHVybiAgJGdDbXMtPm1vZHVsZXNbJG1vZHVsZV1bJ29iamVjdCddOwoJCSAgfQoJfQoJKi8KCS8qIG92ZXJyaWRlICovCglmdW5jdGlvbiBFZGl0QXNBcnJheSgkYWRkaW5nID0gZmFsc2UsICR0YWIgPSAwLCAkc2hvd2FkbWluID0gZmFsc2UpCgl7CgkgICRyZXQgPSBhcnJheSgpOwoJICAkcmV0W109IGFycmF5KGxhbmcoJ3RpdGxlJykuJzonLCc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idGl0bGUiIHZhbHVlPSInLmNtc19odG1sZW50aXRpZXMoJHRoaXMtPm1OYW1lKS4nIiAvPicpOwoJICAkcmV0W109IGFycmF5KCR0aGlzLT5MYW5nKCdhbGlhcycpLic6JywnPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImFsaWFzIiB2YWx1ZT0iJy4kdGhpcy0+bUFsaWFzLiciIC8+Jyk7CgkgIGdsb2JhbCAkaWQ7CgkgICRtb2RfcGFyYW1zID0gR2V0TW9kdWxlUGFyYW1ldGVycygkaWQpOwoJICAkcmV0W109IGFycmF5KGxhbmcoJ3BhcmVudCcpLic6JywgQmxvY2tDb250ZW50TWFuYWdlcjo6Q3JlYXRlSGllcmFyY2h5RHJvcGRvd24oJHRoaXMtPm1JZCwgJHRoaXMtPm1QYXJlbnRJZCwgJ3BhcmVudF9pZCcsICRtb2RfcGFyYW1zWydwYXJlbnRfcGFnZV9pZCddKSk7CgkkcmV0W109IGFycmF5KGxhbmcoJ2FjdGl2ZScpLic6JywnPGlucHV0IGNsYXNzPSJwYWdlY2hlY2tib3giIHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhY3RpdmUiJy4oJHRoaXMtPm1BY3RpdmU/JyBjaGVja2VkPSJjaGVja2VkIic6JycpLicgLz4nKTsKCSAgLy8gR2V0IHRlbXBsYXRlcwoJICAkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUGFnZUJsb2NrcycpOwoJICBpZiAoJG1vZHVsZSAhPSBGQUxTRSkKCSAgICB7CgkgICAgICAkZGJ0ZW1wbGF0ZXMgPSAkbW9kdWxlLT5MaXN0VGVtcGxhdGVzICgpOwoJICAgIH0KCSAgCgkgICR0ZW1wbGF0ZV9kcm9wZG93biA9ICc8c2VsZWN0IG5hbWU9InRlbXBsYXRlIiBvbmNoYW5nZT0iZG9jdW1lbnQuY29udGVudGZvcm0uc3VibWl0KCkiPic7CgkgIGZvcmVhY2ggKCRkYnRlbXBsYXRlcyBBUyAka2V5ID0+ICR0ZW1wbGF0ZV9uYW1lKQoJICAgIHsKCSAgICAgIGlmIChUUlVFID09IGVtcHR5KCR0aGlzLT5tVGVtcGxhdGUpKQoJCXsKCQkgICR0aGlzLT5tVGVtcGxhdGUgPSAkdGhpcy0+R2V0UHJvcGVydHlWYWx1ZSgndGVtcGxhdGUnKTsKCQl9CgkgICAgICBpZiAoVFJVRSA9PSBlbXB0eSgkdGhpcy0+bVRlbXBsYXRlKSkKCQl7CgkJICAkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUGFnZUJsb2NrcycpOwoJCSAgaWYgKCRtb2R1bGUgIT0gRkFMU0UpCgkJICAgIHsKCQkgICAgICAkdGhpcy0+bVRlbXBsYXRlID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdHRlbXBsYXRlJyk7CgkJICAgIH0KCQl9IAoJICAgICAgJHRlbXBsYXRlX2Ryb3Bkb3duIC49ICc8b3B0aW9uIHZhbHVlPSInLiR0ZW1wbGF0ZV9uYW1lLiciJzsKCSAgICAgIGlmICgkdGhpcy0+bVRlbXBsYXRlID09ICR0ZW1wbGF0ZV9uYW1lKQoJCXsKCQkgICR0ZW1wbGF0ZV9kcm9wZG93biAuPSAnIHNlbGVjdGVkPSJzZWxlY3RlZCInOwoJCX0KCSAgICAgICR0ZW1wbGF0ZV9kcm9wZG93biAuPSAnPicuJHRlbXBsYXRlX25hbWUuJzwvb3B0aW9uPic7CgkgICAgfQoJICAkdGVtcGxhdGVfZHJvcGRvd24gLj0gJzwvc2VsZWN0Pic7CgkgICRyZXRbXT0gYXJyYXkobGFuZygndGVtcGxhdGUnKS4nOicsJHRlbXBsYXRlX2Ryb3Bkb3duLCAndGVtcGxhdGVfaWQnKTsKCSAgJHJldFtdPSBhcnJheShsYW5nKCdjb250ZW50JykuJzonLCBjcmVhdGVfdGV4dGFyZWEodHJ1ZSwgJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ2NvbnRlbnRfZW4nKSwgJ2NvbnRlbnRfZW4nKSk7CgkgIC8vIGFkZCBhZGRpdGlvbmFsIGNvbnRlbnQgYmxvY2tzIGlmIHJlcXVpcmVkCgkgICR0aGlzLT5HZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpOyAvLyB0aGlzIGlzIG5lZWRlZCBhcyB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGdldCBhIGNhbGwgdG8gb3VyIGNsYXNzIHdoZW4gZWRpdGluZy4KCSAgZm9yZWFjaCgkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3MgYXMgJGJsb2NrTmFtZSA9PiAkYmxvY2tOYW1lSWQpCgkgICAgewoJICAgICAgaWYgKCRibG9ja05hbWVJZFsnb25lbGluZSddID09ICd0cnVlJykKCQl7CgkJICAkcmV0W109IGFycmF5KHVjd29yZHMoJGJsb2NrTmFtZSkuJzonLCc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJy4kYmxvY2tOYW1lSWRbJ2lkJ10uJyIgdmFsdWU9IicuJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJGJsb2NrTmFtZUlkWydpZCddKS4nIiAvPicpOwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICAkc3R5bGVzaGVldCA9ICcnOwoJCSAgJHJldFtdPSBhcnJheSh1Y3dvcmRzKCRibG9ja05hbWUpLic6JyxjcmVhdGVfdGV4dGFyZWEoKCRibG9ja05hbWVJZFsndXNld3lzaXd5ZyddID09ICdmYWxzZSc/ZmFsc2U6dHJ1ZSksICR0aGlzLT5HZXRQcm9wZXJ0eVZhbHVlKCRibG9ja05hbWVJZFsnaWQnXSksICRibG9ja05hbWVJZFsnaWQnXSwgJycsICRibG9ja05hbWVJZFsnaWQnXSwgJycsICRzdHlsZXNoZWV0KSk7CgkJfQoJICAgIH0KCSAgcmV0dXJuICRyZXQ7Cgl9CgkvKiBvdmVycmlkZSAqLwoJZnVuY3Rpb24gVmFsaWRhdGVEYXRhKCkKCXsKCQkkZXJyb3JzID0gYXJyYXkoKTsKCQkvKgoJCWlmICgkdGhpcy0+bVBhcmVudElkID09IC0xKQoJCXsKCQkJJGVycm9yc1tdPSBsYW5nKCdub2ZpZWxkZ2l2ZW4nLGFycmF5KGxhbmcoJ3BhcmVudCcpKSk7CgkJCSRyZXN1bHQgPSBmYWxzZTsKCQl9CgkJKi8KCQlpZiAoJHRoaXMtPm1UZW1wbGF0ZSA9PSAnJykKCQl7CgkJCSRlcnJvcnNbXT0gbGFuZygnbm9maWVsZGdpdmVuJyxhcnJheShsYW5nKCd0ZW1wbGF0ZScpKSk7CgkJCSRyZXN1bHQgPSBmYWxzZTsKCQl9CgoJCXJldHVybiAoY291bnQoJGVycm9ycykgPiAwID8gJGVycm9ycyA6IGZhbHNlKTsKCX0KCS8qIG92ZXJyaWRlICovCglmdW5jdGlvbiBGaWxsUGFyYW1zKCRwYXJhbXMpCgl7CgkgIGlmIChpc3NldCgkcGFyYW1zKSkKCSAgICB7CgkgICAgICAvLyBOT1RFISBUSGlzIGNvZGUgSEFTIHRvIGNvbWUgQkVGT1JFICYgQUZURVIgJHRoaXMtPkdldEFkZGl0aW9uYWxDb250ZW50QmxvY2tzKCk7CgkgICAgICAkdGhlX3BhcmFtZXRlcnMgPSBhcnJheSgnY29udGVudF9lbicsICd0ZW1wbGF0ZScpOwoJICAgICAgJHNldHRpbmdzID0gJyc7CgkgICAgICBmb3JlYWNoICgkdGhlX3BhcmFtZXRlcnMgYXMgJG9uZXBhcmFtKQoJCXsKCQkgIGlmIChpc3NldCgkcGFyYW1zWyRvbmVwYXJhbV0pKQoJCSAgICB7CgkJICAgICAgJHNldHRpbmdzIC49ICdTZXR0aW5nOicuJG9uZXBhcmFtLicgdG8gJy4kcGFyYW1zWyRvbmVwYXJhbV07IAoJCSAgICAgICR0aGlzLT5TZXRQcm9wZXJ0eVZhbHVlKCRvbmVwYXJhbSwgJHBhcmFtc1skb25lcGFyYW1dKTsKCQkgICAgfQoJCX0KCSAgICAgIAoJICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pZCddKSkKCQl7CgkJICBpZiAoJHRoaXMtPm1QYXJlbnRJZCAhPSAkcGFyYW1zWydwYXJlbnRfaWQnXSkKCQkgICAgewoJCSAgICAgICR0aGlzLT5tSGllcmFyY2h5ID0gJyc7CgkJICAgICAgJHRoaXMtPm1JdGVtT3JkZXIgPSAtMTsKCQkgICAgfQoJCSAgJHRoaXMtPm1QYXJlbnRJZCA9ICRwYXJhbXNbJ3BhcmVudF9pZCddOwoJCSAgLy8JCSAgZGllKCR0aGlzLT5tUGFyZW50SWQpOwoJCX0KCSAgICAgIC8vIEVuZCBiZWZvcmUgYW5kIGFmdGVyCgkgICAgICAKCSAgCgkgICAgICAkdGhpcy0+YWRkdENvbnRlbnRCbG9ja3NMb2FkZWQgPSBmYWxzZTsKCSAgICAgIGlmIChGQUxTRSA9PSBlbXB0eSgkcGFyYW1zWyd0ZW1wbGF0ZSddKSkKCQl7CgkJICAkdGhpcy0+bVRlbXBsYXRlID0gJHBhcmFtc1sndGVtcGxhdGUnXTsKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgLy8gSWYgdGhlIGlzIGEgbmV3IGJsb2NrIGFuZCB0aGUgdGVtcGxhdGUgaGFzIG5vdCBiZWVuIHNldCwgdXNlIHRoZSBkZWZhdWx0CgkJICAkbW9kdWxlID0mICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnUGFnZUJsb2NrcycpOwoJCSAgaWYgKCRtb2R1bGUgIT0gRkFMU0UpCgkJICAgIHsKCQkgICAgICAkdGhpcy0+bVRlbXBsYXRlID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdHRlbXBsYXRlJyk7CgkJICAgIH0KCQl9CgkgICAgICAvLyBhZGQgYWRkaXRpb25hbCBjb250ZW50IGJsb2NrcwoJICAgICAgJHRoaXMtPkdldEFkZGl0aW9uYWxDb250ZW50QmxvY2tzKCk7CgkgICAgICBmb3JlYWNoKCR0aGlzLT5hZGRpdGlvbmFsQ29udGVudEJsb2NrcyBhcyAkYmxvY2tOYW1lID0+ICRibG9ja05hbWVJZCkKCQl7CgkJICAkcGFyYW1ldGVyc1tdID0gJGJsb2NrTmFtZUlkWydpZCddOwoJCX0KCSAgICAgIGlmIChGQUxTRSA9PSBlbXB0eSgkcGFyYW1ldGVycykpCgkJewoJCSAgZm9yZWFjaCAoJHBhcmFtZXRlcnMgYXMgJG9uZXBhcmFtKQoJCSAgICB7CgkJICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJG9uZXBhcmFtXSkpCgkJCXsKCQkJICAkdGhpcy0+U2V0UHJvcGVydHlWYWx1ZSgkb25lcGFyYW0sICRwYXJhbXNbJG9uZXBhcmFtXSk7CgkJCX0KCQkgICAgfQoJCX0KCgoJICAgICAgLy8gTWF5YmUgdGhpcyBpcyBvbmx5IG5lZWRlZCBhZnRlciBBZGRpdGlvbmFsIENvbnRlbnQgYmxvY2tzPwoJICAgIGlmIChpc3NldCgkcGFyYW1zWyd0aXRsZSddKSkKCSAgICB7CgkgICAgICAkdGhpcy0+bU5hbWUgPSAkcGFyYW1zWyd0aXRsZSddOwoJICAgIH0KCSAgICBpZiAoaXNzZXQoJHBhcmFtc1snYWxpYXMnXSkpCgkgICAgewoJICAgICAgJHRoaXMtPm1BbGlhcyA9ICAkcGFyYW1zWydhbGlhcyddOwoJICAgIH0JICAgIAoKCSAgICAgIC8vIE5PVEUhIFRIaXMgY29kZSBIQVMgdG8gY29tZSBCRUZPUkUgJiBBRlRFUiAkdGhpcy0+R2V0QWRkaXRpb25hbENvbnRlbnRCbG9ja3MoKTsKCSAgICAgICR0aGVfcGFyYW1ldGVycyA9IGFycmF5KCdjb250ZW50X2VuJywgJ3RlbXBsYXRlJyk7CgkgICAgICAkc2V0dGluZ3MgPSAnJzsKCSAgICAgIGZvcmVhY2ggKCR0aGVfcGFyYW1ldGVycyBhcyAkb25lcGFyYW0pCgkJewoJCSAgaWYgKGlzc2V0KCRwYXJhbXNbJG9uZXBhcmFtXSkpCgkJICAgIHsKCQkgICAgICAkc2V0dGluZ3MgLj0gJ1NldHRpbmc6Jy4kb25lcGFyYW0uJyB0byAnLiRwYXJhbXNbJG9uZXBhcmFtXTsgCgkJICAgICAgJHRoaXMtPlNldFByb3BlcnR5VmFsdWUoJG9uZXBhcmFtLCAkcGFyYW1zWyRvbmVwYXJhbV0pOwoJCSAgICB9CgkJfQoJICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3BhcmVudF9pZCddKSkKCQl7CgkJICBpZiAoJHRoaXMtPm1QYXJlbnRJZCAhPSAkcGFyYW1zWydwYXJlbnRfaWQnXSkKCQkgICAgewoJCSAgICAgICR0aGlzLT5tSGllcmFyY2h5ID0gJyc7CgkJICAgICAgJHRoaXMtPm1JdGVtT3JkZXIgPSAtMTsKCQkgICAgfQoJCSAgJHRoaXMtPm1QYXJlbnRJZCA9ICRwYXJhbXNbJ3BhcmVudF9pZCddOwoJCSAgLy8JCSAgZGllKCR0aGlzLT5tUGFyZW50SWQpOwoJCX0KCSAgICAgIC8vIEVuZCBiZWZvcmUgYW5kIGFmdGVyCgoJICAgICAgaWYgKFRSVUUgPT0gZW1wdHkoJHBhcmFtc1sndGl0bGUnXSkpCgkJewoJCSAgaWYgKEZBTFNFID09IGVtcHR5KCRwYXJhbXNbJ2NvbnRlbnRfZW4nXSkpCgkJICAgIHsKCQkgICAgICAkdGhpcy0+bU5hbWUgPSBzdWJzdHIoJHBhcmFtc1snY29udGVudF9lbiddLCAwLCAzMCkgLiAnLi4uJzsKCQkgICAgfQoJCSAgZWxzZQoJCSAgICB7CgkJICAgICAgJHRoaXMtPm1OYW1lID0gJyc7CgkJICAgIH0KCQl9CgkgICAgICAkdGhpcy0+bVNob3dJbk1lbnUgPSBmYWxzZTsKCSAgICAgIAoJICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ2FjdGl2ZSddKSkKCQl7CgkJICAkdGhpcy0+bUFjdGl2ZSA9IHRydWU7CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgICR0aGlzLT5tQWN0aXZlID0gZmFsc2U7CgkJfQoJICAgICAgCgkgICAgICAvLyBUT0RPCgkgICAgICAkdGhpcy0+bUNhY2hhYmxlID0gZmFsc2U7CgkgICAgfQoJfQoJCgoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIEZyaWVuZGx5TmFtZSgpCgl7CgkgIHJldHVybiAkdGhpcy0+TGFuZygndGV4dCcpOwoJfQoJLyogb3ZlcnJpZGUgKi8KCWZ1bmN0aW9uIFdhbnRzQ2hpbGRyZW4oKQoJewoJCXJldHVybiB0cnVlOwoJfQoJLyogb3ZlcnJpZGUgKi8KICAgIGZ1bmN0aW9uIEhhc1VzYWJsZUxpbmsoKQoJewoJCXJldHVybiBmYWxzZTsKCX0KCglmdW5jdGlvbiBHZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpCgl7CgkgICRyZXN1bHQgPSBmYWxzZTsKCSAgaWYgKCR0aGlzLT5hZGR0Q29udGVudEJsb2Nrc0xvYWRlZCA9PSBmYWxzZSkKCSAgICB7CgkgICAgICAkdGhpcy0+YWRkaXRpb25hbENvbnRlbnRCbG9ja3MgPSBhcnJheSgpOwoJICAgICAgJG1vZHVsZSA9JiAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ1BhZ2VCbG9ja3MnKTsKCSAgICAgIGlmICgkbW9kdWxlICE9IEZBTFNFKQoJCXsKCQkgICR0ZW1wbGF0ZV9uYW1lID0gJHRoaXMtPkdldFByb3BlcnR5VmFsdWUoJ3RlbXBsYXRlJyk7IAoJCSAgaWYgKFRSVUUgPT0gZW1wdHkoJHRlbXBsYXRlX25hbWUpKQoJCSAgICB7CgkJICAgICAgaWYgKCRtb2R1bGUgIT0gRkFMU0UpCgkJCXsKCQkJICAkdGVtcGxhdGVfbmFtZSA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHR0ZW1wbGF0ZScpOwoJCQl9CgkJICAgIH0KCQkgICRjb250ZW50ID0gJG1vZHVsZS0+R2V0VGVtcGxhdGUoJHRlbXBsYXRlX25hbWUpOwoJCX0KCSAgICAgICRwYXR0ZXJuID0gJy97Y29udGVudChbXn1dKil9Lyc7CgkgICAgICAkcGF0dGVybjIgPSAnLyhbYS16QS16MC05XSopPVsiXCddKFteIlwnXSspWyJcJ10vJzsKCSAgICAgICRtYXRjaGVzID0gYXJyYXkoKTsKCSAgICAgICRyZXN1bHQgPSBwcmVnX21hdGNoX2FsbCgkcGF0dGVybiwgJGNvbnRlbnQsICRtYXRjaGVzKTsKCSAgICAgIAoJICAgICAgaWYgKCRyZXN1bHQgJiYgY291bnQoJG1hdGNoZXNbMV0pID4gMCkKCQl7CgkJICBmb3JlYWNoICgkbWF0Y2hlc1sxXSBhcyAkd2hvbGV0YWcpCgkJICAgIHsKCQkgICAgICAkbW9yZW1hdGNoZXMgPSBhcnJheSgpOwoJCSAgICAgICRyZXN1bHQyID0gcHJlZ19tYXRjaF9hbGwoJHBhdHRlcm4yLCAkd2hvbGV0YWcsICRtb3JlbWF0Y2hlcyk7CgkJICAgICAgaWYgKCRyZXN1bHQyKQoJCQl7CgkJCSAgJGtleXZhbCA9IGFycmF5KCk7CgkJCSAgZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJG1vcmVtYXRjaGVzWzFdKTsgJGkrKykKCQkJICAgIHsKCQkJICAgICAgJGtleXZhbFskbW9yZW1hdGNoZXNbMV1bJGldXSA9ICRtb3JlbWF0Y2hlc1syXVskaV07CgkJCSAgICB9CgkJCSAgCgkJCSAgJGlkID0gJyc7CgkJCSAgJG5hbWUgPSAnJzsKCQkJICAkdXNld3lzaXd5ZyA9ICd0cnVlJzsKCQkJICAkb25lbGluZSA9ICdmYWxzZSc7CgkJCSAgCgkJCSAgZm9yZWFjaCAoJGtleXZhbCBhcyAka2V5PT4kdmFsKQoJCQkgICAgewoJCQkgICAgICBzd2l0Y2goJGtleSkKCQkJCXsKCQkJCWNhc2UgJ2Jsb2NrJzoKCQkJCSAgJGlkID0gc3RyX3JlcGxhY2UoJyAnLCAnXycsICR2YWwpOwoJCQkJICAkbmFtZSA9ICR2YWw7CgkJCQkgIAoJCQkJICBpZighYXJyYXlfa2V5X2V4aXN0cygkdmFsLCAkdGhpcy0+bVByb3BlcnRpZXMtPm1Qcm9wZXJ0eVR5cGVzKSkKCQkJCSAgICB7CgkJCQkgICAgICAkdGhpcy0+bVByb3BlcnRpZXMtPkFkZCgic3RyaW5nIiwgJGlkKTsKCQkJCSAgICB9CgkJCQkgIAoJCQkJICBicmVhazsKCQkJCWNhc2UgJ3d5c2l3eWcnOgoJCQkJICAkdXNld3lzaXd5ZyA9ICR2YWw7CgkJCQkgIAoJCQkJICBicmVhazsKCQkJCWNhc2UgJ29uZWxpbmUnOgoJCQkJICAkb25lbGluZSA9ICR2YWw7CgkJCQkgIAoJCQkJICBicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkgIGJyZWFrOwoJCQkJfQoJCQkgICAgfQoJCQkgIAoJCQkgICR0aGlzLT5hZGRpdGlvbmFsQ29udGVudEJsb2Nrc1skbmFtZV1bJ2lkJ10gPSAkaWQ7CgkJCSAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsndXNld3lzaXd5ZyddID0gJHVzZXd5c2l3eWc7CgkJCSAgJHRoaXMtPmFkZGl0aW9uYWxDb250ZW50QmxvY2tzWyRuYW1lXVsnb25lbGluZSddID0gJG9uZWxpbmU7CgkJCSAgCgkJCX0KCQkgICAgfQoJCSAgCgkJICAvLyBmb3JjZSBhIGxvYWQgCgkJICAkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgkJICAKCQkgICRyZXN1bHQgPSB0cnVlOwoJCX0KCSAgICAgICR0aGlzLT5hZGR0Q29udGVudEJsb2Nrc0xvYWRlZCA9IHRydWU7CgkgICAgfQoJICByZXR1cm4gJHJlc3VsdDsKCX0KCQoJZnVuY3Rpb24gQ29udGVudFByZVJlbmRlcigkdHBsX3NvdXJjZSkKCXsKCSAgLy8gY2hlY2sgZm9yIGFkZGl0aW9uYWwgY29udGVudCBibG9ja3MKCSAgJHRoaXMtPkdldEFkZGl0aW9uYWxDb250ZW50QmxvY2tzKCk7CgkgIAoJICByZXR1cm4gJHRwbF9zb3VyY2U7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhIAAgAOe+AB07NgROLZEPCz4+PtMCAjZHRI4lFUVFRfUEBP8AACloIpA0JlFRUVJSUktXU1NTU1VVVVZWVldXV0xpGlhYWFlZWbUzM1tbW1xcXF1dXS2GEwCXM19fX9U1AGBgYGFhYWJiYmNjYwGfNGdnZ2tra/I1NW5ubj+QRXR0dHV1dXZ2dnh4eHd6eTSrLPZRAHx8fJZxcdtVVbN4CIODg4SEhIKIg4eHh4iIiP1XV4mJie1fX9pwOoqKirGPCIuLi4yMjP9sAI2NjY+Pj5GRkf91AJKSkpOTk/9mZpSUlJWVlZaWlv9qapeXl13INpiYmJmZmeaPAZqamuqFMpubm/9xcZycnJ2dnWbNM/+JAJ6enp+fn6CgoKGhof56em3SNqOjo6SkpKWlpaampnDWPKenp+WRe/WcFaioqP+EhKmpqaqpqKqqqqurq6ysrK2tra+vr/+qALGxsbKysv+RkbOzs7S0tLW1tLW1tbe3t4jfY/+3ALq6uru7u7y8vL29vYbtU76+vv/CAL+/v8DAwIvwVsPBwcLCwsPDw8TExMjIyMnJydzDw8vLy/7YAY/ypc7OztDQ0NHR0dPT09TU0//nANXV1aT/e9bW1tnZ2dvb29zc3N3d3d7e3t/f3+Dg4P/7AOHh4eLi4uPj4+Tk5OXl5ebm5ufn5+jo6Onp6erq6uvr6+zs7O3t7e7u7u/v7/Dw8PHx8fLy8vPz8/T09PX19fb29vf39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////yH+FUNyZWF0ZWQgd2l0aCBUaGUgR0lNUAAh+QQBCgD/ACwAAAAAIAAgAAAI/gD/CRxIsKDBgwgTKlz4Lw4YMhDFSJxIUQwZMDYiMTzjq6PHjx178eKVy5ecF6MWvvHFa5cuXLds2aJFS1YsWK9crbq1x8OlhWx86coF01YtWrNs4nTVSpWtOx4qLVwjtOjMmrJwvmrFymmdqAs5wrSgA0bSm2X07GC1KlUtOhwyLSTja1EMNFSWLMgqhVIgOFgKoaIVJ0IdRooSPTplUIyvLnPwHqEiwMynRn8BM5rVJoqkR48g4flBqmAYXwlK4MVBYEIPOJjhEAFiJ9aaPr6I4vI1wlBBMKgTpCbQgtAYDXDgAFluB1YaOrqYspoVok5BLr4QCDfgyNKfMV5a/kBZ7sLOKzJydHFdNQuEdYLYqxBIMCGPd/AiZBDpwELUKzFx5MLWKrJ88N5AWvgSiyYGTHDFFYQ0sUF+BqhRiiiugPHGLauokkosBhZkhS+w4HTCg1dsMGEBk5BCSiitfOEGLh6iEgsHBwpUhS85uWJHC16kKEIANZQyiiigsMIFG7akgsopr2SQ4z9T+OIKU6toosAYGwBg4ZGhgLLKFmvY8qQpr2Aw5RO+rFcjCw60OMoooYTSiSpZpEHLKaaU4soFUzrhy4CqPHlKKUbSGSYnqVghBi2mmEJKK4AWpEQvHRbKZymkzFmnJ51sksoUYcjCqSisVDAlE7w4iUqf6Z2KEiaonGySSSlVgCFLrKxQMGURQuWSS0yx5NRKKx06aYotQWghy5ygqCLBlDTM4EMOOdzAQxJJIOGtEeCCKwQJkaAia7SGFQSKFSqgkMIKDfCRiCGGDDKIIID40Qcfm5iLpCeqQDDlP6mE4oknpQzxii+3HHXWUqeIgiQonaTywMAFJWHKLKt0iMqrkpIi8az9XryQEaXIokqhZ3KqKK2bnMIAxgQNgYrKTh6a6Kyc1JpJKg3QPBATkeCClCxKXYllsqtsMoDQAmFiwgcZVG311Vd7cAAHhzDESR90hC322GTXgYgoAgUEADs=]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1BhZ2UgQmxvY2tzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUG9zdCBJbnN0YWxsIE1lc3NhZ2UsIGUuZy4sIEJlIHN1cmUgdG8gc2V0ICJVc2UgUGFnZUJsb2NrcyIgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQWxsIFBhZ2UgQmxvY2tzIGhhdmUgYmVlbiByZW1vdmVkIGFuZCBQYWdlQmxvY2tzIGlzIG5vdyB1bmluc3RhbGxlZCc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnUmVhbGx5PyBZb3UgYXJlIHN1cmUgeW91IHdhbnQgdG8gdW5pbnN0YWxsIFBhZ2VCbG9ja3MgYW5kIGRlbGV0ZSBBTEwgeW91ciBwYWdlIGJsb2Nrcz8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGUgUHJlZmVyZW5jZXMnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseS4nOwokbGFuZ1snYmxvY2tzJ10gPSAnQmxvY2tzJzsKJGxhbmdbJ3RlbXBsYXRlcyddID0gJ1RlbXBsYXRlcyc7CiRsYW5nWydhZGR0ZW1wbGF0ZSddID0gJ0FkZCBUZW1wbGF0ZSc7CiRsYW5nWyd0ZW1wbGF0ZW5hbWV0ZXh0J10gPSAnVGVtcGxhdGUgTmFtZSc7CiRsYW5nWyd0ZW1wbGF0ZXNhdmVkJ10gPSAnVGhlIHRlbXBsYXRlIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgdG8gdGhlIGRhdGFiYXNlLic7CiRsYW5nWydvcmRlcl91cGRhdGVkJ10gPSAnQmxvY2tzIHdlcmUgc3VjY2Vzc2Z1bGx5IHJlb3JkZXJlZCc7CiRsYW5nWydzaG93dG9jJ10gPSAnU2hvdyBUYWJsZSBvZiBDb250ZW50cyc7CiRsYW5nWydjb250ZW50cyddID0gJ0NvbnRlbnRzJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnRGVsZXRlIFRlbXBsYXRlJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnRGVsZXRlIFRlbXBsYXRlJzsKJGxhbmdbJ3RleHRfbmFtZSddID0gJ05hbWUgKG51bWJlcnMsIGxldHRlcnMsIGFuZCBkYXNoZXMgb25seSwgbm8gc3BhY2VzKSc7CiRsYW5nWydvcHRpb25zX3VwZGF0ZWQnXSA9ICdVcGRhdGVkIG9wdGlvbnMgd2VyZSBzdWNjZXNzZnVsbHkgc2F2ZWQuJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGUnXSA9ICdEZWZhdWx0IHRlbXBsYXRlJzsKJGxhbmdbJ3RleHRfdGl0bGUnXSA9ICdUaXRsZSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9wYWdlJ10gPSAnQXR0YWNoIHRvIFRoaXMgUGFnZSc7CiRsYW5nWyd0ZXh0X2NvbnRlbnQnXSA9ICdDb250ZW50JzsKJGxhbmdbJ3RleHRfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9ibG9jayddID0gJ1BhcmVudCBCbG9jayc7CiRsYW5nWyd0ZXh0X2NyZWF0ZWRhdGUnXSA9ICdDcmVhdGlvbiBEYXRlJzsKJGxhbmdbJ3RleHRfbW9kaWZ5ZGF0ZSddID0gJ01vZGlmaWVkJzsKJGxhbmdbJ25vbmUnXSA9ICdOb25lJzsKJGxhbmdbJ25vYmxvY2tzJ10gPSAnWW91IGhhdmUgbm90IGFkZGVkIGFueSBibG9ja3MgeWV0Lic7CiRsYW5nWydhZGRibG9jayddID0gJ0FkZCBCbG9jayc7CiRsYW5nWydlZGl0X3RlbXBsYXRlJ10gPSAnRWRpdCBUZW1wbGF0ZSc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdEZWxldGUgVGVtcGxhdGUnOwokbGFuZ1sncmVhbGx5X2RlbGV0ZV90ZW1wbGF0ZSddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyB0ZW1wbGF0ZT8nOwokbGFuZ1snYmxvY2tfYWRkZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ2Jsb2NrX3VwZGF0ZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ2Jsb2NrX2RlbGV0ZWQnXSA9ICdUaGUgYmxvY2sgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLic7CiRsYW5nWydkZWxldGVfYmxvY2snXSA9ICdEZWxldGUgYmxvY2suJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfYmxvY2snXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgcGFnZSBibG9jaz8nOwokbGFuZ1snaW1hZ2V0ZXh0J10gPSAnSW1hZ2UgVGV4dCc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dCc7CiRsYW5nWydvcHRpb25zJ10gPSAnT3B0aW9ucyc7CiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWyd0ZW1wbGF0ZV9oZWxwJ10gPSAnVGVtcGxhdGUgSGVscCc7CiRsYW5nWydhbGlhcyddID0gJ0FsaWFzICh1c2VkIGZvciBsaW5raW5nIHRvIHRoZSBibG9jayknOwokbGFuZ1snbW9kaWZpZWQnXSA9ICdNb2RpZmllZCc7CiRsYW5nWydpbWFnZSddID0gJ0ltYWdlJzsKJGxhbmdbJ29yaWVudGF0aW9uJ10gPSAnT3JpZW50YXRpb24nOyAgCiRsYW5nWydoZWxwX3RlbXBsYXRlJ10gPSAnCjxoMj5UZW1wbGF0ZSB2YXJpYWJsZXM8L2gyPgo8dWw+CjxsaT48Yj57JGFsaWFzfTwvYj4gLSBBbGlhcyBvZiBibG9jazwvbGk+CjxsaT48Yj57JHRpdGxlfTwvYj4gLSBUaXRsZSBvZiBibG9jazwvbGk+CjxsaT48Yj57JG1vZGlmaWVkfTwvYj4gLSBMYXN0IG1vZGlmaWNhdGlvbiBkYXRlIG9mIGJsb2NrPGxpPgo8L3VsPgo8aDI+QWRkaW5nIGZpZWxkcyB0byBibG9ja3M8L2gyPgpZb3UgY2FuIGFkZCBmaWVsZHMgdG8gcGFnZWJsb2NrcyB0aGUgc2FtZSB3YXkgeW91IGFkZCB0aGVtIHRvIHBhZ2VzLiBGb3IgZXhhbXBsZSBhZGQgc29tZXRoaW5nIGxpa2UgdGhpcyB0byB5b3VyIFBhZ2VCbG9ja3MgdGVtcGxhdGU6CjxwcmU+e2NvbnRlbnQgYmxvY2s9IkFub3RoZXIgRmllbGQiIG9uZWxpbmU9InRydWUifTwvcHJlPgonOwokbGFuZ1sndGVtcGxhdGVfZGVsZXRlZCddID0gJ1RoZSB0ZW1wbGF0ZSB3YXMgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQuJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4KPGxpPlZlcnNpb24gMC4xLCBKdWx5IDIwMDYgKGVsaWphaGxvZmdyZW4pLiAKICA8dWw+CiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLjwvbGk+CiAgPC91bD4KPC9saT4nOwokbGFuZ1snaGVscF9hY3Rpb24nXSA9ICcKPGg0PlNob3cgbGlzdCBvZiByZWNlbnRseSB1cGRhdGVkIGJsb2NrczwvaDQ+CgkgPHA+WW91IGNhbiBzaG93IGEgbGlzdCBvZiB1cGRhdGVkIGJsb2NrcyBieSBjYWxsaW5nIFBhZ2VCbG9ja3MgbGlrZSB0aGlzOjwvcHJlPgo8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT1cJ3BhZ2VibG9ja3NcJyBhY3Rpb249XCdyZWNlbnRseV91cGRhdGVkXCd9JzsKJGxhbmdbJ2hlbHBfbnVtYmVyJ10gPSAnCjxoND5TaG93IGEgY2VydGFpbiBudW1iZXIgb2YgcmVjZW50bHkgdXBkYXRlZCBibG9ja3M8L2g0PgoJIDxwPllvdSBjYW4gc2hvdyBhIGxpc3Qgb2YgYSBjZXJ0YWluIG51bWJlciBvZiB1cGRhdGVkIGJsb2NrcyBieSBjYWxsaW5nIFBhZ2VCbG9ja3MgbGlrZSB0aGlzOjwvcHJlPiA8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT1cJ3BhZ2VibG9ja3NcJyBhY3Rpb249XCdyZWNlbnRseV91cGRhdGVkXCcgbnVtYmVyPVwnMTVcJ30KJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4KPHA+QWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseTwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPlB1dCB0aGlzIGlzIGluIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZTo8L3A+CjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPVwncGFnZWJsb2Nrc1wnfTwvcHJlPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+RGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyI+Q01TIE1hZGUgU2ltcGxlIEZvcnVtczwvYT4uPC9saT4KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICAKPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDYsIEVsaWphaCBMb2ZncmVuIDxhIGhyZWY9Im1haWx0bzplbGlqYWhsb2ZncmVuQGVsaWphaGxvZmdyZW4uY29tIj4mbHQ7ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+Cic7Cj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/et_EE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0xlaGVrJnV1bWw7bGplIEJsb2tpZCc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1Bvc3QgSW5zdGFsbCBNZXNzYWdlLCBlLmcuLCBCZSBzdXJlIHRvIHNldCAmcXVvdDtVc2UgUGFnZUJsb2NrcyZxdW90OyBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdBbGwgUGFnZSBCbG9ja3MgaGF2ZSBiZWVuIHJlbW92ZWQgYW5kIFBhZ2VCbG9ja3MgaXMgbm93IHVuaW5zdGFsbGVkJzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdSZWFsbHk/IFlvdSBhcmUgc3VyZSB5b3Ugd2FudCB0byB1bmluc3RhbGwgUGFnZUJsb2NrcyBhbmQgZGVsZXRlIEFMTCB5b3VyIHBhZ2UgYmxvY2tzPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsZSBVbmluc3RhbGxlZC4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpb24gJXMgaW5zdGFsbGVkLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnVmlnYSEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlIFByZWZlcmVuY2VzJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsZSBBZG1pbiBQYW5lbCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0FsbG93cyB1bmxpbWl0ZWQgYmxvY2tzIG9mIENvbnRlbnQgdG8gYmUgYXR0YWNoZWQgdG8gcGFnZXMgYW5kIGVkaXRlZCBpbmRpdmlkdWFsbHkuJzsKJGxhbmdbJ2Jsb2NrcyddID0gJ0Jsb2tpZCc7CiRsYW5nWyd0ZW1wbGF0ZXMnXSA9ICdUZW1wbGF0ZXMnOwokbGFuZ1snYWRkdGVtcGxhdGUnXSA9ICdMaXNhIFRlbXBsYXRlJzsKJGxhbmdbJ3RlbXBsYXRlbmFtZXRleHQnXSA9ICdUZW1wbGF0ZSBOYW1lJzsKJGxhbmdbJ3RlbXBsYXRlc2F2ZWQnXSA9ICdUaGUgdGVtcGxhdGUgd2FzIHN1Y2Nlc3NmdWxseSBzYXZlZCB0byB0aGUgZGF0YWJhc2UuJzsKJGxhbmdbJ3Nob3d0b2MnXSA9ICdTaG93IFRhYmxlIG9mIENvbnRlbnRzJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnRGVsZXRlIFRlbXBsYXRlJzsKJGxhbmdbJ3RleHRfbmFtZSddID0gJ05hbWUgKG51bWJlcnMsIGxldHRlcnMsIGFuZCBkYXNoZXMgb25seSwgbm8gc3BhY2VzKSc7CiRsYW5nWydvcHRpb25zX3VwZGF0ZWQnXSA9ICdVcGRhdGVkIG9wdGlvbnMgd2VyZSBzdWNjZXNzZnVsbHkgc2F2ZWQuJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGUnXSA9ICdEZWZhdWx0IHRlbXBsYXRlJzsKJGxhbmdbJ3RleHRfdGl0bGUnXSA9ICdQZWFsa2lyaSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9wYWdlJ10gPSAnQXR0YWNoIHRvIFRoaXMgUGFnZSc7CiRsYW5nWyd0ZXh0X2NvbnRlbnQnXSA9ICdTaXN1JzsKJGxhbmdbJ3RleHRfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWyd0ZXh0X3BhcmVudF9ibG9jayddID0gJ1BhcmVudCBCbG9jayc7CiRsYW5nWyd0ZXh0X2NyZWF0ZWRhdGUnXSA9ICdDcmVhdGlvbiBEYXRlJzsKJGxhbmdbJ3RleHRfbW9kaWZ5ZGF0ZSddID0gJ011dWRldHVkJzsKJGxhbmdbJ25vbmUnXSA9ICdOb25lJzsKJGxhbmdbJ25vYmxvY2tzJ10gPSAnWW91IGhhdmUgbm90IGFkZGVkIGFueSBibG9ja3MgeWV0Lic7CiRsYW5nWydhZGRibG9jayddID0gJ0xpc2EgQmxva2snOwokbGFuZ1snZWRpdF90ZW1wbGF0ZSddID0gJ0VkaXQgVGVtcGxhdGUnOwokbGFuZ1snZGVsZXRlX3RlbXBsYXRlJ10gPSAnRGVsZXRlIFRlbXBsYXRlJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfdGVtcGxhdGUnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgdGVtcGxhdGU/JzsKJGxhbmdbJ2Jsb2NrX2FkZGVkJ10gPSAnVGhlIGJsb2NrIHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gdGhlIGRhdGFiYXNlLic7CiRsYW5nWydibG9ja191cGRhdGVkJ10gPSAnVGhlIGJsb2NrIHdhcyBzdWNjZXNzZnVsbHkgc2F2ZWQgdG8gdGhlIGRhdGFiYXNlLic7CiRsYW5nWydvcHRpb25zJ10gPSAnVmFsaWt1ZCc7CiRsYW5nWydzdWJtaXQnXSA9ICdTYWFkYSc7CiRsYW5nWyduYW1lJ10gPSAnTmltaSc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ3RlbXBsYXRlX2hlbHAnXSA9ICdUZW1wbGF0ZSBIZWxwJzsKJGxhbmdbJ3RlbXBsYXRlX2RlbGV0ZWQnXSA9ICdUaGUgdGVtcGxhdGUgd2FzIHN1Y2Nlc3NmdWxseSBkZWxldGVkLic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2lvbiAwLjEsIEp1bHkgMjAwNiAoZWxpamFobG9mZ3JlbikuIA0KICA8dWw+DQogICAgPGxpPkluaXRpYWwgcmVsZWFzZS48L2xpPg0KICA8L3VsPg0KPC9saT4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+QWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseTwvcD4NCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+UHV0IHRoaXMgaXMgaW4geW91ciBwYWdlIG9yIHRlbXBsYXRlOjwvcD4NCjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTt9PC9wcmU+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+RGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0mcXVvdDttYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZxdW90Oz48ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbT48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE1MjQ2NDg1MDcuMTE1Mzc0MjA0NS4xMTUzOTI2NDc4LjExNTM5OTM5NjUuOSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjExNTM5OTM5NjUuOS44LnV0bWNjbj0ob3JnYW5pYyl8dXRtY3NyPWdvb2dsZXx1dG1jdHI9Y21zIG1hZGUgc2ltcGxlfHV0bWNtZD1vcmdhbmljJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0Jsb2NzIGRlIFBhZ2VzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnVmV1aWxsZXogdm91cyBhc3N1cmVyIGRlIGQmZWFjdXRlO2ZpbmlyIGxhIHBlcm1pc3Npb24gJnF1b3Q7VXNlIFBhZ2VCbG9ja3MmcXVvdDsgcG91ciB1dGlsaXNlciBjZSBtb2R1bGUmbmJzcDshJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdUb3VzIGxlcyBibG9jcyBvbnQgJmVhY3V0ZTt0JmVhY3V0ZTsgc3VwcHJpbSZlYWN1dGU7cyBldCBsZSBtb2R1bGUgQmxvY3MgZGUgUGFnZXMgKFBhZ2VCbG9ja3MpIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgZCZlYWN1dGU7c2luc3RhbGwmZWFjdXRlOyc7CiRsYW5nWydyZWFsbHlfdW5pbnN0YWxsJ10gPSAnVnJhaW1lbnQ/ICZFY2lyYzt0ZXMtdm91cyBzJnVjaXJjO3IgcXVlIHZvdXMgZCZlYWN1dGU7c2lyZXogZCZlYWN1dGU7c2luc3RhbGxlciBsZSBtb2R1bGUgUGFnZUJsb2NrcyBldCBzdXBwcmltZXIgVE9VUyBsZXMgYmxvY3MgZGUgY29udGVudT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdMZSBtb2R1bGUgYSAmZWFjdXRlO3QmZWFjdXRlOyBkJmVhY3V0ZTtzaW5zdGFsbCZlYWN1dGU7JzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ0xhIHZlcnNpb24gJXMgYSAmZWFjdXRlO3QmZWFjdXRlOyBpbnN0YWxsJmVhY3V0ZTtlLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdMZXMgcHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBkdSBtb2R1bGUgb250ICZlYWN1dGU7dCZlYWN1dGU7IG1pc2VzICZhZ3JhdmU7IGpvdXInOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjJmVncmF2ZTtzIHJlZnVzJmVhY3V0ZTsuIFZldWlsbGV6IHYmZWFjdXRlO3JpZmllciB2b3MgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyZXVyJm5ic3A7JzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTGUgbW9kdWxlIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgbWlzICZhZ3JhdmU7IGpvdXIgJmFncmF2ZTsgbGEgdmVyc2lvbiAlcy4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnUHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBkdSBtb2R1bGUnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnUGFubmVhdSBkJiMwMzk7YWRtaW5pc3RyYXRpb24gZHUgbW9kdWxlJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnUGVybWV0ICZhZ3JhdmU7IHVuIG5vbWJyZSBpbGxpbWl0JmVhY3V0ZTsgZGUgYmxvY3MgZGUgY29udGVudSBkJiMwMzk7JmVjaXJjO3RyZSBhdHRhY2gmZWFjdXRlO3MgYXV4IHBhZ2VzIGV0ICZlYWN1dGU7ZGl0JmVhY3V0ZTtzIGluZGl2aWR1ZWxsZW1lbnQuJzsKJGxhbmdbJ2Jsb2NrcyddID0gJ0Jsb2NzJzsKJGxhbmdbJ3RlbXBsYXRlcyddID0gJ0dhYmFyaXRzJzsKJGxhbmdbJ2FkZHRlbXBsYXRlJ10gPSAnQWpvdXRlciB1biBnYWJhcml0JzsKJGxhbmdbJ3RlbXBsYXRlbmFtZXRleHQnXSA9ICdOb20gZHUgZ2FiYXJpdCc7CiRsYW5nWyd0ZW1wbGF0ZXNhdmVkJ10gPSAnQ2UgZ2FiYXJpdCBhICZlYWN1dGU7dCZlYWN1dGU7IHNhdXZlZ2FyZCZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cyBkYW5zIGxhIGJhc2UgZGUgZG9ubiZlYWN1dGU7ZXMuJzsKJGxhbmdbJ3Nob3d0b2MnXSA9ICdBZmZpY2hlciBsYSB0YWJsZSBkZXMgbWF0aSZlZ3JhdmU7cmVzJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnU3VwcHJpbWVyIGxlIGdhYmFyaXQnOwokbGFuZ1sndGV4dF9uYW1lJ10gPSAnTm9tIChjaGlmZnJlcywgbGV0dHJlcywgZXQgdGlyZXRzIHNldWxlbWVudCwgcGFzIGQmIzAzOTtlc3BhY2VzKSc7CiRsYW5nWydvcHRpb25zX3VwZGF0ZWQnXSA9ICdMZXMgb3B0aW9ucyBvbnQgJmVhY3V0ZTt0JmVhY3V0ZTsgbWlzZXMgJmFncmF2ZTsgam91ci4nOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZSddID0gJ0dhYmFyaXQgcGFyIGQmZWFjdXRlO2ZhdXQnOwokbGFuZ1sndGV4dF90aXRsZSddID0gJ1RpdHJlJzsKJGxhbmdbJ3RleHRfcGFyZW50X3BhZ2UnXSA9ICdBdHRhY2hlciAmYWdyYXZlOyBjZXR0ZSBwYWdlJzsKJGxhbmdbJ3RleHRfY29udGVudCddID0gJ0NvbnRlbnUnOwokbGFuZ1sndGV4dF90ZW1wbGF0ZSddID0gJ0dhYmFyaXQnOwokbGFuZ1sndGV4dF9wYXJlbnRfYmxvY2snXSA9ICdCbG9jIHBhcmVudCc7CiRsYW5nWyd0ZXh0X2NyZWF0ZWRhdGUnXSA9ICdEYXRlIGRlIGNyJmVhY3V0ZTthdGlvbic7CiRsYW5nWyd0ZXh0X21vZGlmeWRhdGUnXSA9ICdNb2RpZmkmZWFjdXRlOyc7CiRsYW5nWydub25lJ10gPSAnQXVjdW4nOwokbGFuZ1snbm9ibG9ja3MnXSA9ICdWb3VzIG4mIzAzOTthdmV6IHBhcyBham91dCZlYWN1dGU7IGRlIGJsb2MgcG91ciBsZSBtb21lbnQnOwokbGFuZ1snYWRkYmxvY2snXSA9ICdBam91dGVyIHVuIGJsb2MnOwokbGFuZ1snZWRpdF90ZW1wbGF0ZSddID0gJyZFYWN1dGU7ZGl0ZXIgdW4gYmxvYyc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdTdXBwcmltZXIgbGUgZ2FiYXJpdCc7CiRsYW5nWydyZWFsbHlfZGVsZXRlX3RlbXBsYXRlJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHMmdWNpcmM7ciBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBnYWJhcml0Pyc7CiRsYW5nWydibG9ja19hZGRlZCddID0gJ0xlIGJsb2MgYSAmZWFjdXRlO3QmZWFjdXRlOyBham91dCZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cyBkYW5zIGxhIGJhc2UgZGUgZG9ubiZlYWN1dGU7ZXMuJzsKJGxhbmdbJ2Jsb2NrX3VwZGF0ZWQnXSA9ICdMZSBibG9jIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgc2F1dmVnYXJkJmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzIGRhbnMgbGEgYmFzZSBkZSBkb25uJmVhY3V0ZTtlcy4nOwokbGFuZ1snYmxvY2tfZGVsZXRlZCddID0gJ0NlIGJsb2MgYSAmZWFjdXRlO3QmZWFjdXRlOyBzdXBwcmltJmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzJzsKJGxhbmdbJ2RlbGV0ZV9ibG9jayddID0gJ1N1cHByaW1lciBsZSBibG9jJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfYmxvY2snXSA9ICcmRWNpcmM7dGVzLXZvdXMgcyZ1Y2lyYztyIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGJsb2M/JzsKJGxhbmdbJ29yZGVyX3VwZGF0ZWQnXSA9ICdMJiMwMzk7b3JkcmUgZGVzIGJsb2NzIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgbWlzICZhZ3JhdmU7IGpvdXInOwokbGFuZ1snb3B0aW9ucyddID0gJ09wdGlvbnMnOwokbGFuZ1snc3VibWl0J10gPSAnU291bWV0dHJlJzsKJGxhbmdbJ25hbWUnXSA9ICdOb20nOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdHYWJhcml0JzsKJGxhbmdbJ3RlbXBsYXRlX2hlbHAnXSA9ICdBaWRlIGdhYmFyaXRzJzsKJGxhbmdbJ3RlbXBsYXRlX2RlbGV0ZWQnXSA9ICdDZSBnYWJhcml0IGEgJmVhY3V0ZTt0JmVhY3V0ZTsgc3VwcHJpbSZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cy4nOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPlZlcnNpb24gMC4xLCBqdWlsbGV0IDIwMDYgKGVsaWphaGxvZmdyZW4pLiANCiAgPHVsPg0KICAgIDxsaT5WZXJzaW9uIGluaXRpYWxlLjwvbGk+DQogIDwvdWw+DQo8L2xpPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPlF1ZSBmYWl0IGNlIG1vZHVsZT88L2gzPg0KPHA+TGUgbW9kdWxlIEJsb2NzIGRlIFBhZ2VzIChQYWdlQmxvY2tzKSBwZXJtZXQgJmFncmF2ZTsgdW4gbm9tYnJlIGlsbGltaXQmZWFjdXRlOyBkZSBibG9jcyBkZSBjb250ZW51IGQmIzAzOTsmZWNpcmM7dHJlIGF0dGFjaCZlYWN1dGU7cyBhdXggcGFnZXMgZXQgJmVhY3V0ZTtkaXQmZWFjdXRlO3MgaW5kaXZpZHVlbGxlbWVudC48L3A+DQo8aDM+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXI/PC9oMz4NCjxwPklucyZlYWN1dGU7cmV6IGNlY2kgZGFucyB2b3MgcGFnZXMgb3UgZ2FiYXJpdHMmbmJzcDs6PC9wPg0KPHByZT57Y21zX21vZHVsZSBtb2R1bGU9JiMwMzk7cGFnZWJsb2NrcyYjMDM5O308L3ByZT4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPkNlIG1vZHVsZSBuZSBjb250aWVudCBhdWN1biBzdXBwb3J0IGNvbW1lcmNpYWwuIENlcGVuZGFudCwgY2VzIHJlc3NvdXJjZXMgc29udCBkaXNwb25pYmxlcyBwb3VyIHZvdXMgYWlkZXI6PC9wPg0KPHVsPg0KPGxpPkRlcyBkaXNjdXNzaW9ucyAmYWdyYXZlOyBwcm9wb3MgZGUgY2UgbW9kdWxlIHBldXZlbnQgc2UgdHJvdXZlciBzdXIgbGVzIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7IHRhcmdldD0mcXVvdDtfYmxhbmsmcXVvdDs+Rm9ydW1zIENNUyBNYWRlIFNpbXBsZSA8L2E+LjwvbGk+DQo8bGk+RXQgZW5maW4sIHZvdXMgcG91dmV6IHJlbmNvbnRyZXIgdW4gY2VydGFpbiBzdWNjJmVncmF2ZTtzIGVuIGVudm95YW50IHVuIGVtYWlsIGRpcmVjdGVtZW50ICZhZ3JhdmU7IGwmIzAzOTthdXRldXIuPC9saT4gPC91bD4NCjxwPkNvbmZvcm0mZWFjdXRlO21lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBHUEwsIGNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyB0ZWwgcXVlbC4gVmV1aWxsZXogdm91cyByJmVhY3V0ZTtmJmVhY3V0ZTtyZXIgZGlyZWN0ZW1lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBwb3VyIHRvdXQgYXZpcyBkZSBub24gcmVzcG9uc2FiaWxpdCZlYWN1dGU7LjwvcD4NCg0KPGgzPkNvcHlyaWdodCBldCBMaWNlbmNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0mcXVvdDttYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZxdW90Oz48ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbT48L2E+LiBUb3VzIGRyb2l0cyByJmVhY3V0ZTtzZXJ2JmVhY3V0ZTtzLjwvcD4NCjxwPkNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyBzb3VzIGxhIGxpY2VuY2UgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDsgdGFyZ2V0PSZxdW90O19ibGFuayZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBWb3VzIGRldmV6IGFnciZlYWN1dGU7ZXIgYXV4IHRlcm1lcyBkZSBjZXR0ZSBsaWNlbmNlIHBvdXIgcG91dm9pciB1dGlsaXNlciBjZSBtb2R1bGUuPC9wPg0KJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuNDQxNzc1NjczLjExNDk5MTQzMTUuMTE1NDc5MDU0MS4xMTU0OTE5Mjk2LjM3JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTE1NDc5MDU0MS4zNi4xNC51dG1jY249KHJlZmVycmFsKXx1dG1jc3I9d2lraS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L2luZGV4LnBocHx1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/hu_HU.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ09sZGFsJmVhY3V0ZTtwJmlhY3V0ZTt0xZEgZG9ib3pvayc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ1Bvc3QgSW5zdGFsbCBNZXNzYWdlLCBlLmcuLCBCZSBzdXJlIHRvIHNldCAmcXVvdDtVc2UgUGFnZUJsb2NrcyZxdW90OyBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhJzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdNaW5kZW4gZG9ib3p0IGxldmV0dCZ1dW1sO25rLCBhIG1vZHVsIGVsIGxldHQgdCZhYWN1dGU7dm9sJmlhY3V0ZTt0dmEnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1ZhbCZvYWN1dGU7YmFuPyBUJmVhY3V0ZTtueWxlZyBlbHQmYWFjdXRlO3ZvbCZpYWN1dGU7dG9kIGEgUGFnZUJsb2Nrcy10IGxzIHQmb3VtbDtyJm91bWw7bHN6IG1pbmRlbiBkb2JvenQgYXogb2xkYWxyJm9hY3V0ZTtsPyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ0EgbW9kdWwgZWwgbGV0dCB0JmFhY3V0ZTt2b2wmaWFjdXRlO3R2YS4nOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnQXogaW5zdGFsbCZhYWN1dGU7bHQgbW9kdWwgdmVyemkmb2FjdXRlO2phICVzLic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdBIG1vZHVsIGplbGxlbXrFkWl0IGZyaXNzJmlhY3V0ZTt0ZXR0JnV1bWw7ay4nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQSBob3p6JmFhY3V0ZTtmJmVhY3V0ZTtyJmVhY3V0ZTtzIG1lZ3RhZ2FkdmEuIEsmZWFjdXRlO3JlbSwgZWxsZW7FkXJpenplIGEgam9nb3N1bHRzJmFhY3V0ZTtnb2thdC4nOwokbGFuZ1snZXJyb3InXSA9ICdIaWJhISc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ0EgbW9kdWx0IGZyaXNzJmlhY3V0ZTt0ZXR0JnV1bWw7ayBhKHopICVzIHZlcnppJm9hY3V0ZTtyYS4nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWwgcHJlZmVyZW5jaSZhYWN1dGU7ayc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bCBBZG1pbmlzenRyJmFhY3V0ZTtjaSZvYWN1dGU7cyBQYW5lbCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0xlaGV0xZF2JmVhY3V0ZTsgdGVzemkgayZ1dW1sO2wmb3VtbDtuYiZvdW1sO3rFkSB0YXJ0YWxtJnVhY3V0ZTsgZG9ib3pvayBlbGhlbHlleiZlYWN1dGU7cyZlYWN1dGU7dCAmZWFjdXRlO3Mgc3plcmtlc3p0JmVhY3V0ZTtzJmVhY3V0ZTt0Lic7CiRsYW5nWydibG9ja3MnXSA9ICdEb2Jvem9rJzsKJGxhbmdbJ3RlbXBsYXRlcyddID0gJ1NhYmxvbm9rJzsKJGxhbmdbJ2FkZHRlbXBsYXRlJ10gPSAnU2FibG9uIGhvenomYWFjdXRlO2FkJmFhY3V0ZTtzYSc7CiRsYW5nWyd0ZW1wbGF0ZW5hbWV0ZXh0J10gPSAnU2FibG9uIG5ldmUnOwokbGFuZ1sndGVtcGxhdGVzYXZlZCddID0gJ0Egc2FibG9udCBzaWtlcmVzZW4gbWVudGV0dCZ1dW1sO25rIGF6IGFkYXRiJmFhY3V0ZTt6aXNiYS4nOwokbGFuZ1snb3JkZXJfdXBkYXRlZCddID0gJ0EgZG9ib3pva2F0IHNpa2VyZXNlbiAmdWFjdXRlO2pyYXN6JmFhY3V0ZTttb3p0dWsnOwokbGFuZ1snc2hvd3RvYyddID0gJ1RhcnRhbG9tamVneXomZWFjdXRlO2sgbXV0YXQmYWFjdXRlO3NhJzsKJGxhbmdbJ2RlbGV0ZXRlbXBsYXRlJ10gPSAnU2FibG9uIHQmb3VtbDtybCZlYWN1dGU7c2UnOwokbGFuZ1sndGV4dF9uYW1lJ10gPSAnTiZlYWN1dGU7diAoc3omYWFjdXRlO21vaywgYmV0xbFrICZlYWN1dGU7cyBrJm91bWw7dMWRamVsZWsgc3omb2FjdXRlO2smb3VtbDt6IG4mZWFjdXRlO2xrJnV1bWw7bCknOwokbGFuZ1snb3B0aW9uc191cGRhdGVkJ10gPSAnQSBmcmlzcyZpYWN1dGU7dGV0dCBvcGNpJm9hY3V0ZTtrYXQgc2lrZXJlc2VuIG1lbnRldHQmdXVtbDtrLic7CiRsYW5nWydkZWZhdWx0X3RlbXBsYXRlJ10gPSAnQWxhcCZlYWN1dGU7cnRlbG1lemV0dCBzYWJsb24nOwokbGFuZ1sndGV4dF90aXRsZSddID0gJ0MmaWFjdXRlO20nOwokbGFuZ1sndGV4dF9wYXJlbnRfcGFnZSddID0gJ0NzYXRvbCZhYWN1dGU7cyBlaGhleiBheiBvbGRhbGhveic7CiRsYW5nWyd0ZXh0X2NvbnRlbnQnXSA9ICdUYXJ0YWxvbSc7CiRsYW5nWyd0ZXh0X3RlbXBsYXRlJ10gPSAnU2FibG9uJzsKJGxhbmdbJ3RleHRfcGFyZW50X2Jsb2NrJ10gPSAnU3omdXVtbDtsxZEgZG9ib3onOwokbGFuZ1sndGV4dF9jcmVhdGVkYXRlJ10gPSAnTCZlYWN1dGU7dHJlaG96JmFhY3V0ZTtzIGQmYWFjdXRlO3R1bWEnOwokbGFuZ1sndGV4dF9tb2RpZnlkYXRlJ10gPSAnTSZvYWN1dGU7ZG9zJmlhY3V0ZTt0b3R0JzsKJGxhbmdbJ25vbmUnXSA9ICdOaW5jcyc7CiRsYW5nWydub2Jsb2NrcyddID0gJ00mZWFjdXRlO2cgbmVtIGFkb3R0IGhvenomYWFjdXRlOyBlZ3kgZG9ib3p0IHNlbSwgxZBybmFneSAmVWFjdXRlO3IhJzsKJGxhbmdbJ2FkZGJsb2NrJ10gPSAnRG9ib3ogaG96eiZhYWN1dGU7YWQmYWFjdXRlO3NhJzsKJGxhbmdbJ2VkaXRfdGVtcGxhdGUnXSA9ICdTYWJsb24gc3plcmtlc3p0JmVhY3V0ZTtzZSc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdTYWJsb24gdCZvdW1sO3JsJmVhY3V0ZTtzZSc7CiRsYW5nWydyZWFsbHlfZGVsZXRlX3RlbXBsYXRlJ10gPSAnQml6dG9zYW4gdCZvdW1sO3JsJm91bWw7ZCBlenQgYSBzYWJsb250Pyc7CiRsYW5nWydibG9ja19hZGRlZCddID0gJ0EgZG9ib3p0IHNpa2VyZXNlbiBob3p6JmFhY3V0ZTthZHR1ayBheiBhZGF0YiZhYWN1dGU7emlzaG96Lic7CiRsYW5nWydibG9ja191cGRhdGVkJ10gPSAnQSBkb2JvenQgc2lrZXJlc2VuIG1lbnRldHQmdXVtbDtrIGF6IGFkYXRiJmFhY3V0ZTt6aXNiYS4nOwokbGFuZ1snYmxvY2tfZGVsZXRlZCddID0gJ0EgZG9ib3p0IHNpa2VyZXNlbiB0Jm91bWw7ciZvdW1sO2x0JnV1bWw7ay4nOwokbGFuZ1snZGVsZXRlX2Jsb2NrJ10gPSAnRG9ib3ogdCZvdW1sO3JsJmVhY3V0ZTtzZS4nOwokbGFuZ1sncmVhbGx5X2RlbGV0ZV9ibG9jayddID0gJ0JpenRvc2FuIHQmb3VtbDtybCZvdW1sO2QgZXp0IGEgZG9ib3p0Pyc7CiRsYW5nWydpbWFnZXRleHQnXSA9ICdLJmVhY3V0ZTtwaGV6IHRhcnRveiZvYWN1dGU7IHN6Jm91bWw7dmVnJzsKJGxhbmdbJ3RleHQnXSA9ICdTeiZvdW1sO3ZlZyc7CiRsYW5nWydvcHRpb25zJ10gPSAnT3BjaSZvYWN1dGU7ayc7CiRsYW5nWydzdWJtaXQnXSA9ICdFbGsmdXVtbDtsZCc7CiRsYW5nWyduYW1lJ10gPSAnTiZlYWN1dGU7dic7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1NhYmxvbic7CiRsYW5nWyd0ZW1wbGF0ZV9oZWxwJ10gPSAnU2FibG9uIHMmdWFjdXRlO2cmb2FjdXRlOyc7CiRsYW5nWydoZWxwX3RlbXBsYXRlJ10gPSAnPGgyPlRlbXBsYXRlIHZhcmlhYmxlczwvaDI+DQo8dWw+DQo8bGk+PGI+eyRhbGlhc308L2I+IC0gQWxpYXMgb2YgYmxvY2s8L2xpPg0KPGxpPjxiPnskdGl0bGV9PC9iPiAtIFRpdGxlIG9mIGJsb2NrPC9saT4NCjxsaT48Yj57JG1vZGlmaWVkfTwvYj4gLSBMYXN0IG1vZGlmaWNhdGlvbiBkYXRlIG9mIGJsb2NrPGxpPg0KPC91bD4NCjxoMj5BZGRpbmcgZmllbGRzIHRvIGJsb2NrczwvaDI+DQpZb3UgY2FuIGFkZCBmaWVsZHMgdG8gcGFnZWJsb2NrcyB0aGUgc2FtZSB3YXkgeW91IGFkZCB0aGVtIHRvIHBhZ2VzLiBGb3IgZXhhbXBsZSBhZGQgc29tZXRoaW5nIGxpa2UgdGhpcyB0byB5b3VyIFBhZ2VCbG9ja3MgdGVtcGxhdGU6DQo8cHJlPntjb250ZW50IGJsb2NrPSZxdW90O0Fub3RoZXIgRmllbGQmcXVvdDsgb25lbGluZT0mcXVvdDt0cnVlJnF1b3Q7fTwvcHJlPg0KJzsKJGxhbmdbJ3RlbXBsYXRlX2RlbGV0ZWQnXSA9ICdBIHNhYmxvbnQgc2lrZXJlc2VuIHQmb3VtbDtyJm91bWw7bHQmdXVtbDtrLic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+VmVyc2lvbiAwLjEsIEp1bHkgMjAwNiAoZWxpamFobG9mZ3JlbikuIA0KICA8dWw+DQogICAgPGxpPkluaXRpYWwgcmVsZWFzZS48L2xpPg0KICA8L3VsPg0KPC9saT4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+QWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseTwvcD4NCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+UHV0IHRoaXMgaXMgaW4geW91ciBwYWdlIG9yIHRlbXBsYXRlOjwvcD4NCjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTt9PC9wcmU+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+RGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0mcXVvdDttYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZxdW90Oz48ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbT48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjExNTM3NzM0NzcuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjExNzI2OTAxOTEuMTE1Mzc3MzQ3Ny4xMTU1MTA0NjYwLjExNTUzNjY2MTEuNSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1NpZGUgYmxva2tlcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0V0dGVyIGluc3RhbGxlcmluZ3MgbWVsZGluZy4gIEh1c2sgJmFyaW5nOyBzZXR0ZSAmcXVvdDtCcnVrIFBhZ2VCbG9ja3MmcXVvdDsgcmV0dGlnaGV0ZXIgZm9yICZhcmluZzsgYmVueXR0ZSBkZW5uZSBtb2R1bGVuISc7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnQWxsZSBTaWRlIGJsb2trZXIgaGFyIGJsaXR0IGZqZXJuZXQgb2cgU2lkZUJsb2trZXIgZXIgbiZhcmluZzsgYXZpbnN0YWxsZXJ0JzsKJGxhbmdbJ3JlYWxseV91bmluc3RhbGwnXSA9ICdWaXJrZWxpZz8gRXIgZHUgc2lra2VyIHAmYXJpbmc7IGF0IGR1IHZpbCBhdmluc3RhbGxlcmUgU2lkZUJsb2trZXIgb2cgc2xldHRlIEFMTEUgZGluZSBzaWRlIGJsb2trZXI/JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWwgYXZpbnN0YWxsZXJ0Lic7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bCB2ZXJzam9uICVzIGluc3RhbGxlcnQuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsIGlubnN0aWxsaW5nZXIgb3BwZGF0ZXJ0Lic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdUaWxnYW5nIG5la3RldC4gVmVubmxpZ3N0IHNqZWtrIGRpbmUgcmV0dGlnaGV0ZXIuJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRmVpbCEnOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bCBvcHBncmFkZXJ0IHRpbCB2ZXJzam9uICVzLic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bCBpbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsIEFkbWluaXN0cmFzam9uc3BhbmVsJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnVGlsYWx0ZXIgdWJlZ3JlbnNlZGUgYmxva2tlciBtZWQgaW5uaG9sZCAmYXJpbmc7IGJsaSBrb2JsZXQgdGlsIHNpZGVyIG9nIHJlZGlnZXJlcyBpbmRpdmlkdWVsdC4nOwokbGFuZ1snYmxvY2tzJ10gPSAnQmxva2tlcic7CiRsYW5nWyd0ZW1wbGF0ZXMnXSA9ICdNYWxlcic7CiRsYW5nWydhZGR0ZW1wbGF0ZSddID0gJ0xlZ2cgdGlsIG1hbCc7CiRsYW5nWyd0ZW1wbGF0ZW5hbWV0ZXh0J10gPSAnTWFsbmF2bic7CiRsYW5nWyd0ZW1wbGF0ZXNhdmVkJ10gPSAnTWFsZW4gYmxlIGxhZ3JldCBpIGRhdGFiYXNlbi4nOwokbGFuZ1snb3JkZXJfdXBkYXRlZCddID0gJ0Jsb2trIHJla2tlZiZvc2xhc2g7bGdlIGJsZSBvcHBkYXRlcnQuJzsKJGxhbmdbJ3Nob3d0b2MnXSA9ICdWaXMgSW5uaG9sZHNmb3J0ZWduZWxzZSc7CiRsYW5nWydjb250ZW50cyddID0gJ0lubmhvbGQnOwokbGFuZ1snZGVsZXRldGVtcGxhdGUnXSA9ICdTbGV0dCBtYWwnOwokbGFuZ1sndGV4dF9uYW1lJ10gPSAnTmF2biAoa3VuIG51bW1lciwgYm9rc3RhdmVyIG9nIGJpbmRlc3RyZWssIGluZ2VuIG1lbGxvbXJvbSknOwokbGFuZ1snb3B0aW9uc191cGRhdGVkJ10gPSAnT3BwZGF0ZXJ0ZSB2YWxnIGJsZSBsYWdyZXQuJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGUnXSA9ICdTdGFuZGFyZCBtYWwnOwokbGFuZ1sndGV4dF90aXRsZSddID0gJ1RpdHRlbCc7CiRsYW5nWyd0ZXh0X3BhcmVudF9wYWdlJ10gPSAnS29ibGUgdGlsIGRlbm5lIHNpZGVuJzsKJGxhbmdbJ3RleHRfY29udGVudCddID0gJ0lubmhvbGQnOwokbGFuZ1sndGV4dF90ZW1wbGF0ZSddID0gJ01hbCc7CiRsYW5nWyd0ZXh0X3BhcmVudF9ibG9jayddID0gJ0ZvcmVsZHJlIGJsb2trJzsKJGxhbmdbJ3RleHRfY3JlYXRlZGF0ZSddID0gJ09wcHJldHRlbHNlIGRhdG8nOwokbGFuZ1sndGV4dF9tb2RpZnlkYXRlJ10gPSAnRW5kcmV0JzsKJGxhbmdbJ25vbmUnXSA9ICdJbmdlbic7CiRsYW5nWydub2Jsb2NrcyddID0gJ0R1IGhhciBpa2tlIGxhZ3QgdGlsIG5vZW4gYmxva2tlciBlbm4mYXJpbmc7Lic7CiRsYW5nWydhZGRibG9jayddID0gJ0xlZ2cgdGlsIGJsb2trJzsKJGxhbmdbJ2VkaXRfdGVtcGxhdGUnXSA9ICdSZWRpZ2VyIG1hbCc7CiRsYW5nWydkZWxldGVfdGVtcGxhdGUnXSA9ICdTbGV0dCBtYWwnOwokbGFuZ1sncmVhbGx5X2RlbGV0ZV90ZW1wbGF0ZSddID0gJ0VyIGR1IHNpa2tlciBwJmFyaW5nOyBkdSB2aWwgc2xldHRlIGRlbm5lIG1hbGVuPyc7CiRsYW5nWydibG9ja19hZGRlZCddID0gJ0Jsb2trZW4gYmxlIGxhZ3QgdGlsIGRhdGFiYXNlbi4nOwokbGFuZ1snYmxvY2tfdXBkYXRlZCddID0gJ0Jsb2trZW4gYmxlIHZlbGx5a2tldCBsYWdyZXQgaSBkYXRhYmFzZW4uJzsKJGxhbmdbJ2Jsb2NrX2RlbGV0ZWQnXSA9ICdCbG9ra2VuIGJsZSBzbGV0dGV0Lic7CiRsYW5nWydkZWxldGVfYmxvY2snXSA9ICdEZWxldGUgYmxvY2suU2xldHQgYmxva2suJzsKJGxhbmdbJ3JlYWxseV9kZWxldGVfYmxvY2snXSA9ICdFciBkdSBzaWtrZXIgcCZhcmluZzsgZHUgdmlsIHNsZXR0dGUgZGVubmUgc2lkZWJsb2trZW4/JzsKJGxhbmdbJ2ltYWdldGV4dCddID0gJ0JpbGRlIFRla3N0JzsKJGxhbmdbJ3RleHQnXSA9ICdUZWtzdCc7CiRsYW5nWydvcHRpb25zJ10gPSAnVmFsZyc7CiRsYW5nWydzdWJtaXQnXSA9ICdVdGYmb3NsYXNoO3InOwokbGFuZ1snbmFtZSddID0gJ05hdm4nOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdNYWwnOwokbGFuZ1sndGVtcGxhdGVfaGVscCddID0gJ01hbCBoamVscCc7CiRsYW5nWydhbGlhcyddID0gJ0FsaWFzIChicnVrZXMgZm9yICZhcmluZzsgbGlua2UgdGlsIGJsb2trZW4pJzsKJGxhbmdbJ21vZGlmaWVkJ10gPSAnRW5kcmV0JzsKJGxhbmdbJ2ltYWdlJ10gPSAnQmlsZGUnOwokbGFuZ1snb3JpZW50YXRpb24nXSA9ICdSZXRuaW5nJzsKJGxhbmdbJ2hlbHBfdGVtcGxhdGUnXSA9ICc8aDI+TWFsIHZhcmlhYmxlcjwvaDI+DQo8dWw+DQo8bGk+PGI+eyRhbGlhc308L2I+IC0gQWxpYXMgZm9yIGJsb2trZW48L2xpPg0KPGxpPjxiPnskdGl0bGV9PC9iPiAtIFRpdHRlbCBmb3IgYmxva2tlbjwvbGk+DQo8bGk+PGI+eyRtb2RpZmllZH08L2I+IC0gRGF0byBmb3Igc2lzdGUgZW5kcmluZyBhdiBibG9ra2VuPGxpPg0KPC91bD4NCjxoMj4mQXJpbmc7IGxlZ2dlIHRpbCBmZWx0ZXIgdGlsIGJsb2trZW5lPC9oMj4NCkR1IGthbiBsZWdnZSB0aWwgZmVsdGVyIHRpbCBzaWRlYmxva2tlbmUgcCZhcmluZzsgc2FtbWUgbSZhcmluZzt0ZSBzb20gZHUgbGVnZ2VyIGRlbSB0aWwgc2lkZXIuIEZvciBla3NlbXBlbCBrYW4gZHUgbGVnZ2UgdGlsIG5vZSBzb20gZGV0dGUgdGlsIGRpbiBTaWRlQmxva2sgbWFsOg0KPHByZT57Y29udGVudCBibG9jaz0mcXVvdDtBbm90aGVyIEZpZWxkJnF1b3Q7IG9uZWxpbmU9JnF1b3Q7dHJ1ZSZxdW90O308L3ByZT4NCic7CiRsYW5nWyd0ZW1wbGF0ZV9kZWxldGVkJ10gPSAnTWFsZW4gYmxlIHNsZXR0ZXQuJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT5WZXJzam9uIDAuMSwgSnVsaSAyMDA2IChlbGlqYWhsb2ZncmVuKS4gDQogIDx1bD4NCiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLjwvbGk+DQogIDwvdWw+DQo8L2xpPic7CiRsYW5nWydoZWxwX2FjdGlvbiddID0gJzxoND5TaG93IGxpc3Qgb2YgcmVjZW50bHkgdXBkYXRlZCBibG9ja3M8L2g0Pg0KCSA8cD5Zb3UgY2FuIHNob3cgYSBsaXN0IG9mIHVwZGF0ZWQgYmxvY2tzIGJ5IGNhbGxpbmcgUGFnZUJsb2NrcyBsaWtlIHRoaXM6PC9wcmU+DQo8cHJlPntjbXNfbW9kdWxlIG1vZHVsZT0mIzAzOTtwYWdlYmxvY2tzJiMwMzk7IGFjdGlvbj0mIzAzOTtyZWNlbnRseV91cGRhdGVkJiMwMzk7fSc7CiRsYW5nWydoZWxwX251bWJlciddID0gJzxoND5TaG93IGEgY2VydGFpbiBudW1iZXIgb2YgcmVjZW50bHkgdXBkYXRlZCBibG9ja3M8L2g0Pg0KCSA8cD5Zb3UgY2FuIHNob3cgYSBsaXN0IG9mIGEgY2VydGFpbiBudW1iZXIgb2YgdXBkYXRlZCBibG9ja3MgYnkgY2FsbGluZyBQYWdlQmxvY2tzIGxpa2UgdGhpczo8L3ByZT4gPHByZT57Y21zX21vZHVsZSBtb2R1bGU9JiMwMzk7cGFnZWJsb2NrcyYjMDM5OyBhY3Rpb249JiMwMzk7cmVjZW50bHlfdXBkYXRlZCYjMDM5OyBudW1iZXI9JiMwMzk7MTUmIzAzOTt9DQonOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+QWxsb3dzIHVubGltaXRlZCBibG9ja3Mgb2YgQ29udGVudCB0byBiZSBhdHRhY2hlZCB0byBwYWdlcyBhbmQgZWRpdGVkIGluZGl2aWR1YWxseTwvcD4NCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+UHV0IHRoaXMgaXMgaW4geW91ciBwYWdlIG9yIHRlbXBsYXRlOjwvcD4NCjxwcmU+e2Ntc19tb2R1bGUgbW9kdWxlPSYjMDM5O3BhZ2VibG9ja3MmIzAzOTt9PC9wcmU+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+RGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KDQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNiwgRWxpamFoIExvZmdyZW4gPGEgaHJlZj0mcXVvdDttYWlsdG86ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbSZxdW90Oz48ZWxpamFobG9mZ3JlbkBlbGlqYWhsb2ZncmVuLmNvbT48L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPi4gWW91IG11c3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlIGJlZm9yZSB1c2luZyB0aGUgbW9kdWxlLjwvcD4NCic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE2NDQ0NzkwLjExNTQxNzQ3MzIuMTE1NDIxMTAxNi4xMTU3MzgxMTkxLjUnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMTU0MTc0NzMyLjEuMS51dG1jY249KHJlZmVycmFsKXx1dG1jc3I9aGVsbWluc2VuLm5vfHV0bWNjdD0vfHV0bWNtZD1yZWZlcnJhbCc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/blockcontent.functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0NNUyAtIENNUyBNYWRlIFNpbXBsZQojKGMpMjAwNCBieSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLnNmLm5ldAojCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKI3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiNUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiNNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiNHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKI2Fsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiNGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiMKIyRJZDogYmxvY2tjb250ZW50LmZ1bmN0aW9ucy5waHAgMTMwIDIwMDYtMDgtMTAgMTg6MjM6MjBaIGVsaWphaGxvZmdyZW4gJAoKLyoqCiAqIEhhbmRsZXMgY29udGVudCByZWxhdGVkIGZ1bmN0aW9ucwogKgogKiBAcGFja2FnZSBDTVMKICovCiRzb3J0ZWRfc2VjdGlvbnMgPSBhcnJheSgpOwokc29ydGVkX2NvbnRlbnQgPSBhcnJheSgpOwoKZnVuY3Rpb24gZG9fYmxvY2tfY3Jvc3NfcmVmZXJlbmNlKCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSwgJGNvbnRlbnQpCnsKCWdsb2JhbCAkZ0NtczsKCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQoJLy9EZWxldGUgb2xkIG9uZXMgZnJvbSB0aGUgZGF0YWJhc2UKCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgcGFyZW50X3R5cGUgPSA/JzsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSkpOwoJCgkvL0RvIGdsb2JhbCBjb250ZW50IGJsb2NrcwoJJG1hdGNoZXMgPSBhcnJheSgpOwoJcHJlZ19tYXRjaF9hbGwoJy9ceyg/Omh0bWxfYmxvYnxnbG9iYWxfY29udGVudCkuKj9uYW1lPVsiXCddKFteIl0rKVsiXCddLio/XH0vJywgJGNvbnRlbnQsICRtYXRjaGVzKTsKCWlmIChpc3NldCgkbWF0Y2hlc1sxXSkpCgl7CgkJJHNlbHF1ZXJ5ID0gJ1NFTEVDVCBodG1sYmxvYl9pZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidodG1sYmxvYnMgV0hFUkUgaHRtbGJsb2JfbmFtZSA9ID8nOwoJCSRpbnNxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgKHBhcmVudF9pZCwgcGFyZW50X3R5cGUsIGNoaWxkX2lkLCBjaGlsZF90eXBlLCBjcmVhdGVfZGF0ZSwgbW9kaWZpZWRfZGF0ZSkKCQkJCQkJVkFMVUVTICg/LD8sPyxcJ2dsb2JhbF9jb250ZW50XCcsJy4kZGItPkRCVGltZVN0YW1wKHRpbWUoKSkuJywnLiRkYi0+REJUaW1lU3RhbXAodGltZSgpKS4nKSc7CgkJZm9yZWFjaCAoJG1hdGNoZXNbMV0gYXMgJG5hbWUpCgkJewoJCQkkcmVzdWx0ID0gJiRkYi0+RXhlY3V0ZSgkc2VscXVlcnksIGFycmF5KCRuYW1lKSk7CgkJCXdoaWxlICgkcmVzdWx0ICYmICEkcmVzdWx0LT5FT0YpCgkJCXsKCQkJCSRkYi0+RXhlY3V0ZSgkaW5zcXVlcnksIGFycmF5KCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSwgJHJlc3VsdC0+ZmllbGRzWydodG1sYmxvYl9pZCddKSk7CgkJCQkkcmVzdWx0LT5Nb3ZlTmV4dCgpOwoJCQl9CgkJfQoJfQp9CgpmdW5jdGlvbiByZW1vdmVfYmxvY2tfY3Jvc3NfcmVmZXJlbmNlcygkcGFyZW50X2lkLCAkcGFyZW50X3R5cGUpCnsKCWdsb2JhbCAkZ0NtczsKCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCQoJLy9EZWxldGUgb2xkIG9uZXMgZnJvbSB0aGUgZGF0YWJhc2UKCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgcGFyZW50X3R5cGUgPSA/JzsKCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRwYXJlbnRfaWQsICRwYXJlbnRfdHlwZSkpOwp9CgojIHZpbTp0cz00IHN3PTQgbm9ldAo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/lib/classes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/classes/class.blockcontent.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlCiMgKGMpMjAwNCBieSBUZWQgS3VscCAodGVka3VscEB1c2Vycy5zZi5uZXQpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLm9yZwojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIEJVVCB3aXRoT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKIwojJElkOiBjbGFzcy5ibG9ja2NvbnRlbnQuaW5jLnBocCAxMzUgMjAwNi0wOC0xMCAyMDo0MDowMVogZWxpamFobG9mZ3JlbiAkCgovKioKICogVGhpcyBmaWxlIHJlc3BlY3QgdGhlIFBIUCBDb2RpbmcgU3RhbmRhcmRzIDogaHR0cDovL2FsbHRhc2tzLm5ldC9jb2RlL3BocF9jb2Rpbmdfc3RhbmRhcmQuaHRtbAogKi8KCi8qKgogKiBHZW5lcmljIGNvbnRlbnQgY2xhc3MuCiAqCiAqIEFzIGZvciBzb21lIHRyZWF0bWVudCB3ZSBkb24ndCBuZWVkIHRoZSBleHRyYSBwcm9wZXJ0aWVzIG9mIHRoZSBjb250ZW50CiAqIHdlIGxvYWQgdGhlbSBvbmx5IHdoZW4gcmVxdWlyZWQuIEhvd2V2ZXIsIGVhY2ggZnVuY3Rpb24gd2hpY2ggbWFrZXMgdXNlCiAqIG9mIGV4dHJhIHByb3BlcnRpZXMgc2hvdWxkIGZpcnN0IHRlc3QgaWYgdGhlIHByb3BlcnRpZXMgb2JqZWN0IGV4aXN0LgogKgogKiBAc2luY2UJCTAuOAogKiBAcGFja2FnZQkJQ01TCiAqLwpjbGFzcyBCbG9ja0NvbnRlbnRCYXNlCnsKCS8qKgoJICogVGhlIHVuaXF1ZSBJRCBpZGVudGlmaWVyIG9mIHRoZSBlbGVtZW50CgkgKiBJbnRlZ2VyCgkgKi8KCXZhciAkbUlkOwoKCS8qKgoJICogVGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgKGxpa2UgYSBmaWxlbmFtZSkKCSAqIFN0cmluZwoJICovCgkgdmFyICRtTmFtZTsKCgkvKioKCSAqIFRoZSB0eXBlIG9mIGNvbnRlbnQgKHBhZ2UsIHVybCwgZXRjLi4pCgkgKiBTdHJpbmcKCSAqLwoJdmFyICRtVHlwZTsKCgkvKioKCSAqIFRoZSBvd25lciBvZiB0aGUgY29udGVudAoJICogSW50ZWdlcgoJICovCgl2YXIgJG1Pd25lcjsKCgkvKioKCSAqIFRoZSBwcm9wZXJ0aWVzIHBhcnQgb2YgdGhlIGNvbnRlbnQuIFRoaXMgaXMgYW4gb2JqZWN0IG9mIHRoZSBnb29kIHR5cGUuCgkgKiBJdCBzaG91bGQgY29udGFpbiBhbGwgdHJlYXRtZW50cyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29udGVudAoJICovCgkgdmFyICRtUHJvcGVydGllczsKCgkvKioKCSAqIFRoZSBJRCBvZiB0aGUgcGFyZW50LCAwIGlmIG5vbmUKCSAqIEludGVnZXIKCSAqLwoJdmFyICRtUGFyZW50SWQ7CgoJLyoqCgkgKiBUaGUgb2xkIHBhcmVudCBpZC4uLiBvbmx5IHVzZWQgb24gdXBkYXRlCgkgKi8KCXZhciAkbU9sZFBhcmVudElkOwoKCS8qKgoJICogVGhpcyBpcyB1c2VkIHRvbyBvZnRlbiB0byBub3QgYmUgcGFydCBvZiB0aGUgYmFzZSBjbGFzcwoJICovCgl2YXIgJG1UZW1wbGF0ZUlkOwoKCS8qKgoJICogVGhlIGl0ZW0gb3JkZXIgb2YgdGhlIGNvbnRlbnQgaW4gaGlzIGxldmVsCgkgKiBJbnRlZ2VyCgkgKi8KCXZhciAkbUl0ZW1PcmRlcjsKCgkvKioKCSAqIFRoZSBvbGQgaXRlbSBvcmRlci4uLiBvbmx5IHVzZWQgb24gdXBkYXRlCgkgKi8KCXZhciAkbU9sZEl0ZW1PcmRlcjsKCgkvKioKCSAqIFRoZSBtZXRhZGF0YSAoaGVhZCB0YWdzKSBmaXIgdGhpcyBjb250ZW50CgkgKi8KCXZhciAkbU1ldGFkYXRhOwoKCXZhciAkbVRpdGxlQXR0cmlidXRlOwoJdmFyICRtQWNjZXNzS2V5OwoJdmFyICRtVGFiSW5kZXg7CgoJLyoqCgkgKiBUaGUgZnVsbCBoaWVyYXJjaHkgb2YgdGhlIGNvbnRlbnQKCSAqIFN0cmluZyBvZiB0aGUgZm9ybSA6IDEuNC4zCgkgKi8KCXZhciAkbUhpZXJhcmNoeTsKCgkvKioKCSAqIFRoZSBmdWxsIGhpZXJhcmNoeSBvZiB0aGUgY29udGVudCBpZHMKCSAqIFN0cmluZyBvZiB0aGUgZm9ybSA6IDEuNC4zCgkgKi8KICAgIHZhciAkbUlkSGllcmFyY2h5OwoKCS8qKgoJICogVGhlIGZ1bGwgcGF0aCB0aHJvdWdoIHRoZSBoaWVyYXJjaHkKCSAqIFN0cmluZyBvZiB0aGUgZm9ybSA6IHBhcmVudC9wYXJlbnQvY2hpbGQKCSAqLwogICAgdmFyICRtSGllcmFyY2h5UGF0aDsKCgkvKioKCSAqIFdoYXQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBhIG1lbnUKCSAqLwoJdmFyICRtTWVudVRleHQ7CgoJLyoqCgkgKiBJcyB0aGUgY29udGVudCBhY3RpdmUgPwoJICogSW50ZWdlciA6IDAgLyAxCgkgKi8KCXZhciAkbUFjdGl2ZTsKCgkvKioKCSAqIEFsaWFzIG9mIHRoZSBjb250ZW50CgkgKi8KCXZhciAkbUFsaWFzOwoKCXZhciAkbU9sZEFsaWFzOwoKCS8qKgoJICogQ2FjaGFibGU/CgkgKi8KCXZhciAkbUNhY2hhYmxlOwoKCS8qKgoJICogRG9lcyB0aGlzIGNvbnRlbnQgaGF2ZSBhIHByZXZpZXcgZnVuY3Rpb24/CgkgKi8KCXZhciAkbVByZXZpZXc7CgoJLyoqCgkgKiBTaG91bGQgaXQgc2hvdyB1cCBpbiB0aGUgbWVudT8KCSAqLwoJdmFyICRtU2hvd0luTWVudTsKCgkvKioKCSAqIElzIHRoaXMgcGFnZSB0aGUgZGVmYXVsdD8KCSAqLwoJdmFyICRtRGVmYXVsdENvbnRlbnQ7CgkKCS8qKgoJICogV2hhdCB0eXBlIG9mIG1hcmt1cCBpcyB0aHM/ICBIVE1MIGlzIHRoZSBkZWZhdWx0CgkgKi8KCXZhciAkbU1hcmt1cDsKCgkvKioKCSAqIExhc3QgdXNlciB0byBtb2RpZnkgdGhpcyBjb250ZW50CgkgKi8KCXZhciAkbUxhc3RNb2RpZmllZEJ5OwoKCS8qKgoJICogQ3JlYXRpb24gZGF0ZQoJICogRGF0ZQoJICovCgl2YXIgJG1DcmVhdGlvbkRhdGU7CgoJLyoqCgkgKiBNb2RpZmljYXRpb24gZGF0ZQoJICogRGF0ZQoJICovCgl2YXIgJG1Nb2RpZmllZERhdGU7CgoJdmFyICRtQWRkaXRpb25hbEVkaXRvcnM7CgkKCXZhciAkbVJlYWR5Rm9yRWRpdDsKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgkvKiBDb25zdHJ1Y3RvciByZWxhdGVkCQkJCQkJCQkJCQkJCSovCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKCS8qKgoJICogR2VuZXJpYyBjb25zdHJ1Y3Rvci4gUnVucyB0aGUgU2V0SW5pdGlhbFZhbHVlcyBmdWN0aW9uLgoJICovCglmdW5jdGlvbiBCbG9ja0NvbnRlbnRCYXNlKCkKCXsKCQkkdGhpcy0+U2V0SW5pdGlhbFZhbHVlcygpOwoJCSR0aGlzLT5TZXRQcm9wZXJ0aWVzKCk7CgkJJHRoaXMtPm1Qcm9wZXJ0aWVzTG9hZGVkID0gZmFsc2U7CgkJJHRoaXMtPm1SZWFkeUZvckVkaXQgPSBmYWxzZTsKCX0KCgkvKioKCSAqIFNldHMgb2JqZWN0IHRvIHNvbWUgc2FuZSBpbml0aWFsIHZhbHVlcwoJICovCglmdW5jdGlvbiBTZXRJbml0aWFsVmFsdWVzKCkKCXsKCQkkdGhpcy0+bUlkCQkJCT0gLTEgOwoJCSR0aGlzLT5tTmFtZQkJCT0gIiIgOwoJCSR0aGlzLT5tQWxpYXMJCQk9ICIiIDsKCQkkdGhpcy0+bU9sZEFsaWFzCQk9ICIiIDsKCQkkdGhpcy0+bVR5cGUJCQk9IHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCR0aGlzKSkgOwoJCSR0aGlzLT5tT3duZXIJCQk9IC0xIDsKCQkkdGhpcy0+bVByb3BlcnRpZXMJCT0gbmV3IEJsb2NrQ29udGVudFByb3BlcnRpZXMoKTsKCQkkdGhpcy0+bVBhcmVudElkCQk9IC0xIDsKCQkkdGhpcy0+bU9sZFBhcmVudElkCQk9IC0xIDsKCQkkdGhpcy0+bVRlbXBsYXRlSWQJCT0gLTEgOwoJCSR0aGlzLT5tSXRlbU9yZGVyCQk9IC0xIDsKCQkkdGhpcy0+bU9sZEl0ZW1PcmRlcgk9IC0xIDsKCQkkdGhpcy0+bUxhc3RNb2RpZmllZEJ5CT0gLTEgOwoJCSR0aGlzLT5tSGllcmFyY2h5CQk9ICIiIDsKCQkkdGhpcy0+bUlkSGllcmFyY2h5CQk9ICIiIDsKCQkkdGhpcy0+bUhpZXJhcmNoeVBhdGgJPSAiIiA7CgkJJHRoaXMtPm1NZXRhZGF0YQkJPSAiIiA7CgkJJHRoaXMtPm1UaXRsZUF0dHJpYnV0ZQk9ICIiIDsKCQkkdGhpcy0+bUFjY2Vzc0tleQkJPSAiIiA7CgkJJHRoaXMtPm1UYWJJbmRleAkJPSAiIiA7CgkJJHRoaXMtPm1BY3RpdmUJCQk9IGZhbHNlIDsKCQkkdGhpcy0+bURlZmF1bHRDb250ZW50CT0gZmFsc2UgOwoJCSR0aGlzLT5tU2hvd0luTWVudQkJPSBmYWxzZSA7CgkJJHRoaXMtPm1DYWNoYWJsZQkJPSB0cnVlOwoJCSR0aGlzLT5tTWVudVRleHQJCT0gIiIgOwoJCSR0aGlzLT5tQ3JlYXRpb25EYXRlCT0gIiIgOwoJCSR0aGlzLT5tTW9kaWZpZWREYXRlCT0gIiIgOwoJCSR0aGlzLT5tUHJldmlldyAgICAgICAgID0gZmFsc2UgOwoJCSR0aGlzLT5tTWFya3VwCQkJPSAnaHRtbCcgOwoJCSR0aGlzLT5tQ2hpbGRDb3VudCAgICAgID0gMDsKCQkkdGhpcy0+bVBhcmVudFBhZ2VJZCA9IC0xOwoJfQoKCS8qKgoJICogU3ViY2xhc3NlcyBzaG91bGQgb3ZlcnJpZGUgdGhpcyB0byBzZXQgdGhlaXIgcHJvcGVydHkgdHlwZXMgdXNpbmcgYSBsb3QKCSAqIG9mIG1Qcm9wZXJ0aWVzLkFkZCBzdGF0ZW1lbnRzCgkgKi8KCWZ1bmN0aW9uIFNldFByb3BlcnRpZXMoKQoJewoJfQoKCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgkvKiBGdW5jdGlvbnMgZ2l2aW5nIGFjY2VzcyB0byBuZWVkZWQgZWxlbWVudHMgb2YgdGhlIGNvbnRlbnQJCQkqLwoJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCgkvKioKCSAqIFJldHVybnMgdGhlIElECgkgKi8KCWZ1bmN0aW9uIElkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1JZDsKCX0KCglmdW5jdGlvbiBTZXRJZCgkaWQpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1JZCA9ICRpZDsKCX0KCgkvKioKCSAqIFJldHVybnMgYSBmcmllbmRseSBuYW1lIGZvciB0aGlzIGNvbnRlbnQgdHlwZQoJICovCglmdW5jdGlvbiBGcmllbmRseU5hbWUoKQoJewoJCXJldHVybiAnJzsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIE5hbWUKCSAqLwoJZnVuY3Rpb24gTmFtZSgpCgl7CgkJcmV0dXJuICR0aGlzLT5tTmFtZTsKCX0KCglmdW5jdGlvbiBTZXROYW1lKCRuYW1lKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tTmFtZSA9ICRuYW1lOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgQWxpYXMKCSAqLwoJZnVuY3Rpb24gQWxpYXMoKQoJewoJCXJldHVybiAkdGhpcy0+bUFsaWFzOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgVHlwZQoJICovCglmdW5jdGlvbiBUeXBlKCkKCXsKCQlyZXR1cm4gc3RydG9sb3dlcigkdGhpcy0+bVR5cGUpOwoJfQoKCWZ1bmN0aW9uIFNldFR5cGUoJHR5cGUpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1UeXBlID0gc3RydG9sb3dlcigkdHlwZSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBPd25lcgoJICovCglmdW5jdGlvbiBPd25lcigpCgl7CgkJcmV0dXJuICR0aGlzLT5tT3duZXI7Cgl9CgoJZnVuY3Rpb24gU2V0T3duZXIoJG93bmVyKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tT3duZXIgPSAkb3duZXI7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBNZXRhZGF0YQoJICovCglmdW5jdGlvbiBNZXRhZGF0YSgpCgl7CgkJcmV0dXJuICR0aGlzLT5tTWV0YWRhdGE7Cgl9CgoJZnVuY3Rpb24gU2V0TWV0YWRhdGEoJG1ldGFkYXRhKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tTWV0YWRhdGEgPSAkbWV0YWRhdGE7Cgl9CgoJZnVuY3Rpb24gVGFiSW5kZXgoKQoJewoJCXJldHVybiAkdGhpcy0+bVRhYkluZGV4OwoJfQoKCWZ1bmN0aW9uIFNldFRhYkluZGV4KCR0YWJpbmRleCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bVRhYkluZGV4ID0gJHRhYmluZGV4OwoJfQoKCWZ1bmN0aW9uIFRpdGxlQXR0cmlidXRlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1UaXRsZUF0dHJpYnV0ZTsKCX0KCglmdW5jdGlvbiBHZXRDcmVhdGlvbkRhdGUoKQoJewoJCXJldHVybiAkdGhpcy0+bUNyZWF0aW9uRGF0ZTsKCX0KCQoJZnVuY3Rpb24gR2V0TW9kaWZpZWREYXRlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1Nb2RpZmllZERhdGU7Cgl9CgoJZnVuY3Rpb24gU2V0VGl0bGVBdHRyaWJ1dGUoJHRpdGxlYXR0cmlidXRlKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tVGl0bGVBdHRyaWJ1dGUgPSAkdGl0bGVhdHRyaWJ1dGU7Cgl9CgoJZnVuY3Rpb24gQWNjZXNzS2V5KCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1BY2Nlc3NLZXk7Cgl9CgoJZnVuY3Rpb24gU2V0QWNjZXNzS2V5KCRhY2Nlc3NrZXkpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1BY2Nlc3NLZXkgPSAkYWNjZXNza2V5OwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgUGFyZW50SWQKCSAqLwoJZnVuY3Rpb24gUGFyZW50SWQoKQoJewoJCXJldHVybiAkdGhpcy0+bVBhcmVudElkOwoJfQoJCgkvKioKCSAqIFJldHVybnMgdGhlIFBhcmVudCBQYWdlIElkCgkgKi8KCWZ1bmN0aW9uIFBhcmVudFBhZ2VJZCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tUGFyZW50UGFnZUlkOwoJfQoKCWZ1bmN0aW9uIFNldFBhcmVudElkKCRwYXJlbnRpZCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bVBhcmVudElkID0gJHBhcmVudGlkOwoJfQoKCWZ1bmN0aW9uIE9sZFBhcmVudElkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1PbGRQYXJlbnRJZDsKCX0KCglmdW5jdGlvbiBTZXRPbGRQYXJlbnRJZCgkcGFyZW50aWQpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1PbGRQYXJlbnRJZCA9ICRwYXJlbnRpZDsKCX0KCglmdW5jdGlvbiBUZW1wbGF0ZUlkKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1UZW1wbGF0ZUlkOwoJfQoKCWZ1bmN0aW9uIFNldFRlbXBsYXRlSWQoJHRlbXBsYXRlaWQpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1UZW1wbGF0ZUlkID0gJHRlbXBsYXRlaWQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBJdGVtT3JkZXIKCSAqLwoJZnVuY3Rpb24gSXRlbU9yZGVyKCkKCXsKCQlyZXR1cm4gJHRoaXMtPm1JdGVtT3JkZXI7Cgl9CgoJZnVuY3Rpb24gU2V0SXRlbU9yZGVyKCRpdGVtb3JkZXIpCgl7CgkJJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CgkJJHRoaXMtPm1JdGVtT3JkZXIgPSAkaXRlbW9yZGVyOwoJfQoKCWZ1bmN0aW9uIE9sZEl0ZW1PcmRlcigpCgl7CgkJcmV0dXJuICR0aGlzLT5tT2xkSXRlbU9yZGVyOwoJfQoKCWZ1bmN0aW9uIFNldE9sZEl0ZW1PcmRlcigkaXRlbW9yZGVyKQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tT2xkSXRlbU9yZGVyID0gJGl0ZW1vcmRlcjsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIEhpZXJhcmNoeQoJICovCglmdW5jdGlvbiBIaWVyYXJjaHkoKQoJewoJCXJldHVybiBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpDcmVhdGVGcmllbmRseUhpZXJhcmNoeVBvc2l0aW9uKCR0aGlzLT5tSGllcmFyY2h5KTsKCX0KCglmdW5jdGlvbiBTZXRIaWVyYXJjaHkoJGhpZXJhcmNoeSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUhpZXJhcmNoeSA9ICRoaWVyYXJjaHk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBIaWVyYXJjaHkKCSAqLwoJZnVuY3Rpb24gSWRIaWVyYXJjaHkoKQoJewoJCXJldHVybiAkdGhpcy0+bUlkSGllcmFyY2h5OwoJfQoKCWZ1bmN0aW9uIFNldElkSGllcmFyY2h5KCRpZGhpZXJhcmNoeSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUlkSGllcmFyY2h5ID0gJGlkaGllcmFyY2h5OwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgSGllcmFyY2h5CgkgKi8KCWZ1bmN0aW9uIEhpZXJhcmNoeVBhdGgoKQoJewoJCXJldHVybiAkdGhpcy0+bUhpZXJhcmNoeVBhdGg7Cgl9CgoJZnVuY3Rpb24gU2V0SGllcmFyY2h5UGF0aCgkaGllcmFyY2h5cGF0aCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUhpZXJhcmNoeVBhdGggPSAkaGllcmFyY2h5cGF0aDsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIEFjdGl2ZSBzdGF0ZQoJICovCglmdW5jdGlvbiBBY3RpdmUoKQoJewoJCXJldHVybiAkdGhpcy0+bUFjdGl2ZTsKCX0KCglmdW5jdGlvbiBTZXRBY3RpdmUoJGFjdGl2ZSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUFjdGl2ZSA9ICRhY3RpdmU7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHdoZXRoZXIgaXQgc2hvdWxkIHNob3cgaW4gdGhlIG1lbnUKCSAqLwoJZnVuY3Rpb24gU2hvd0luTWVudSgpCgl7CgkJcmV0dXJuICR0aGlzLT5tU2hvd0luTWVudTsKCX0KCglmdW5jdGlvbiBTZXRTaG93SW5NZW51KCRzaG93aW5tZW51KQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tU2hvd0luTWVudSA9ICRzaG93aW5tZW51OwoJfQoKCS8qKgoJICogUmV0dXJucyBpZiB0aGUgcGFnZSBpcyB0aGUgZGVmYXVsdAoJICovCglmdW5jdGlvbiBEZWZhdWx0Q29udGVudCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tRGVmYXVsdENvbnRlbnQ7Cgl9CgoJZnVuY3Rpb24gU2V0RGVmYXVsdENvbnRlbnQoJGRlZmF1bHRjb250ZW50KQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tRGVmYXVsdENvbnRlbnQgPSAkZGVmYXVsdGNvbnRlbnQ7Cgl9CgoJZnVuY3Rpb24gQ2FjaGFibGUoKQoJewoJCXJldHVybiAkdGhpcy0+bUNhY2hhYmxlOwoJfQoKCWZ1bmN0aW9uIFNldENhY2hhYmxlKCRjYWNoYWJsZSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUNhY2hhYmxlID0gJGNhY2hhYmxlOwoJfQoJCglmdW5jdGlvbiBNYXJrdXAoKQoJewoJCXJldHVybiAkdGhpcy0+bU1hcmt1cDsKCX0KCglmdW5jdGlvbiBTZXRNYXJrdXAoJG1hcmt1cCkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bU1hcmt1cCA9ICRtYXJrdXA7Cgl9CgoJZnVuY3Rpb24gTGFzdE1vZGlmaWVkQnkoKQoJewoJCXJldHVybiAkdGhpcy0+bUxhc3RNb2RpZmllZEJ5OwoJfQoKCWZ1bmN0aW9uIFNldExhc3RNb2RpZmllZEJ5KCRsYXN0bW9kaWZpZWRieSkKCXsKCQkkdGhpcy0+RG9SZWFkeUZvckVkaXQoKTsKCQkkdGhpcy0+bUxhc3RNb2RpZmllZEJ5ID0gJGxhc3Rtb2RpZmllZGJ5OwoJfQoJCglmdW5jdGlvbiBTZXRBbGlhcygkYWxpYXMpCiAgICB7CiAgICAgICAgJHRoaXMtPkRvUmVhZHlGb3JFZGl0KCk7CiAgICAgICAgZ2xvYmFsICRnQ21zOwoKICAgICAgICAkdG9sb3dlciA9IGZhbHNlOwoKICAgICAgICBpZiAoJGFsaWFzID09ICcnKQogICAgICAgIHsKICAgICAgICAgICAgJGFsaWFzID0gdHJpbSgkdGhpcy0+bU1lbnVUZXh0KTsKICAgICAgICAgICAgJHRvbG93ZXIgPSB0cnVlOwoJCQkkYWxpYXMgPSBtdW5nZV9zdHJpbmdfdG9fdXJsKCRhbGlhcywgJHRvbG93ZXIpOwoJCQkvLyBNYWtlIHN1cmUgYXV0by1nZW5lcmF0ZWQgbmV3IGFsaWFzIGlzIG5vdCBhbHJlYWR5IGluIHVzZSBvbiBhIGRpZmZlcmVudCBwYWdlLCBpZiBpdCBkb2VzLCBhZGQgIi0yIiB0byB0aGUgYWxpYXMKCQkJJGVycm9yID0gQEJsb2NrQ29udGVudE1hbmFnZXI6OkNoZWNrQWxpYXNFcnJvcigkYWxpYXMpOwoJCQlpZiAoJGVycm9yICE9PSBGQUxTRSkKCQkJICB7CgkJCSAgICBpZiAoRkFMU0UgPT0gZW1wdHkoJGFsaWFzKSkKCQkJICAgICAgewoJCQkJJGFsaWFzX251bV9hZGQgPSAyOwoJCQkJLy8gSWYgYSAnLTInIHZlcnNpb24gb2YgdGhlIGFsaWFzIGFscmVhZHkgZXhpc3RzCgkJCQkkdXNlciA9IFVzZXJPcGVyYXRpb25zOjpMb2FkVXNlckJ5SUQoJHRoaXMtPm1Pd25lcik7CgkJCQkvLyBDaGVjayB0aGUgJy0zJyB2ZXJzaW9uIGV0Yy4KCQkJCXdoaWxlIChAQmxvY2tDb250ZW50TWFuYWdlcjo6Q2hlY2tBbGlhc0Vycm9yKCRhbGlhcy4nLScuJHVzZXItPnVzZXJuYW1lLictJy4kYWxpYXNfbnVtX2FkZCkgIT09IEZBTFNFKQoJCQkJICB7CgkJCQkgICAgJGFsaWFzX251bV9hZGQrKzsKCQkJCSAgfQoJCQkJJGFsaWFzIC49ICctJy4kdXNlci0+dXNlcm5hbWUuJy0nLiRhbGlhc19udW1fYWRkOwoJCQkgICAgICB9CgkJCSAgICBlbHNlCgkJCSAgICAgIHsKCQkJCSRhbGlhcyA9ICcnOwoJCQkgICAgICB9CgkJCSAgfQogICAgICAgIH0KCgkJLyoKICAgICAgICAvLyByZXBsYWNlbWVudC5waHAgaXMgZW5jb2RlZCB1dGYtOCBhbmQgbXVzdCBiZSB0aGUgZmlyc3QgbW9kaWZpY2F0aW9uIG9mIGFsaWFzCiAgICAgICAgaW5jbHVkZShkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKSAuICcvcmVwbGFjZW1lbnQucGhwJyk7CiAgICAgICAgJGFsaWFzID0gc3RyX3JlcGxhY2UoJHRvcmVwbGFjZSwgJHJlcGxhY2VtZW50LCAkYWxpYXMpOwogICAgICAgIAogICAgICAgIC8vIGxvd2VyY2FzZSBvbmx5IG9uIGVtcHR5IGFsaWFzZXMKICAgICAgICBpZiAoJHRvbG93ZXIgPT0gMSkKCQl7CiAgICAgICAgICAgICRhbGlhcyA9IHN0cnRvbG93ZXIoJGFsaWFzKTsKCQl9CiAgICAgICAgICAgIAogICAgICAgICRhbGlhcyA9IHByZWdfcmVwbGFjZSgiL1teXHctXSsvIiwgIl8iLCAkYWxpYXMpOwogICAgICAgICRhbGlhcyA9IHRyaW0oJGFsaWFzLCAnXycpOwoJCSovCgogICAgICAgICR0aGlzLT5tQWxpYXMgPSBtdW5nZV9zdHJpbmdfdG9fdXJsKCRhbGlhcywgJHRvbG93ZXIpOwogICAgfSAKCQoJLyoqCgkgKiBSZXR1cm5zIHRoZSBtZW51IHRleHQgZm9yIHRoaXMgY29udGVudAoJICovCglmdW5jdGlvbiBNZW51VGV4dCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tTWVudVRleHQ7Cgl9CgoJZnVuY3Rpb24gU2V0TWVudVRleHQoJG1lbnV0ZXh0KQoJewoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCSR0aGlzLT5tTWVudVRleHQgPSAkbWVudXRleHQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIG51bWJlciBvZiBpbW1lZGlhdGUgY2hpbGQtY29udGVudCBpdGVtcyBvZiB0aGlzIGNvbnRlbnQKCSAqLwoJZnVuY3Rpb24gQ2hpbGRDb3VudCgpCgl7CgkJcmV0dXJuICR0aGlzLT5tQ2hpbGRDb3VudDsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHByb3BlcnRpZXMKCSAqLwoJZnVuY3Rpb24gUHJvcGVydGllcygpCgl7CgkJZGVidWdfYnVmZmVyKCdwcm9wZXJ0aWVzIGNhbGxlZCcpOwoJCWlmICgkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPT0gZmFsc2UpCgkJewoJCQkkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgkJCSR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CgkJfQoJCXJldHVybiAkdGhpcy0+bVByb3BlcnRpZXM7Cgl9CgoJZnVuY3Rpb24gSGFzUHJvcGVydHkoJG5hbWUpCgl7CgkJcmV0dXJuICR0aGlzLT5tUHJvcGVydGllcy0+SGFzUHJvcGVydHkoJG5hbWUpOwoJfQoKCWZ1bmN0aW9uIEdldFByb3BlcnR5VmFsdWUoJG5hbWUpCgl7CgkJaWYgKCR0aGlzLT5tUHJvcGVydGllcy0+SGFzUHJvcGVydHkoJG5hbWUpKQoJCXsKCQkJaWYgKCR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKCQkJewoJCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5Mb2FkKCR0aGlzLT5tSWQpOwoJCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzTG9hZGVkID0gdHJ1ZTsKCQkJfQoJCQlyZXR1cm4gJHRoaXMtPm1Qcm9wZXJ0aWVzLT5HZXRWYWx1ZSgkbmFtZSk7CgkJfQoJCXJldHVybiAnJzsKCX0KCglmdW5jdGlvbiBTZXRQcm9wZXJ0eVZhbHVlKCRuYW1lLCAkdmFsdWUpCgl7CgkJZGVidWdfYnVmZmVyKCdzZXRwcm9wZXJ0eXZhbHVlIGNhbGxlZCcpOwoJCSR0aGlzLT5Eb1JlYWR5Rm9yRWRpdCgpOwoJCWlmICgkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPT0gZmFsc2UpCgkJewoJCQkkdGhpcy0+bVByb3BlcnRpZXMtPkxvYWQoJHRoaXMtPm1JZCk7CgkJCSR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CgkJfQoJCSR0aGlzLT5tUHJvcGVydGllcy0+U2V0VmFsdWUoJG5hbWUsICR2YWx1ZSk7Cgl9CgkKCS8qKgoJICogRnVuY3Rpb24gY29udGVudCB0eXBlcyB0byB1c2UgdG8gc2F5IHdoZXRoZXIgb3Igbm90IHRoZXkgc2hvdWxkIHNob3cKCSAqIHVwIGluIGxpc3RzIHdoZXJlIHBhcmVudHMgb2YgY29udGVudCBhcmUgc2V0LiAgVGhpcyB3aWxsIGRlZmF1bHQgdG8gdHJ1ZSwKCSAqIGJ1dCBzaG91bGQgYmUgdXNlZCBpbiBjYXNlcyBsaWtlIFNlcGFyYXRvciB3aGVyZSB5b3UgZG9uJ3Qgd2FudCBpdCB0byAKCSAqIGhhdmUgYW55IGNoaWxkcmVuLgoJICogCgkgKiBAc2luY2UgMC4xMQoJICovCglmdW5jdGlvbiBXYW50c0NoaWxkcmVuKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCglmdW5jdGlvbiBHZXRBZGRpdGlvbmFsQ29udGVudEJsb2NrcygpCgl7Cgl9CgoJLyoqCgkgKiBTaG91bGQgdGhpcyBsaW5rIGJlIHVzZWQgaW4gdmFyaW91cyBwbGFjZXMgd2hlcmUgYSBsaW5rIGlzIHRoZSBvbmx5CgkgKiB1c2VmdWwgb3V0cHV0PyAgKExpa2UgbmV4dC9wcmV2aW91cyBsaW5rcyBpbiBjbXNfc2VsZmxpbmssIGZvciBleGFtcGxlKQoJICovCglmdW5jdGlvbiBIYXNVc2FibGVMaW5rKCkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoJLyogVGhlIHJlc3QJCQkJCQkJCQkJCQkJCQkJKi8KCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCgoJLyoqCgkgKiBUaGlzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gaGFuZGxlIGFueSB0aGluZ3MgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGRvbmUgYmVmb3JlIGNvbnRlbnQgaXMKCSAqIGVkaXRlZC4KCSAqLwoJZnVuY3Rpb24gUmVhZHlGb3JFZGl0KCkKCXsKCX0KCglmdW5jdGlvbiBEb1JlYWR5Rm9yRWRpdCgpCgl7CgkJaWYgKCR0aGlzLT5tUmVhZHlGb3JFZGl0ID09IGZhbHNlKQoJCXsKCQkJJHRoaXMtPlJlYWR5Rm9yRWRpdCgpOwoJCQkkdGhpcy0+bVJlYWR5Rm9yRWRpdCA9IHRydWU7CgkJfQoJfQoKCS8qKgoJICogTG9hZCB0aGUgY29udGVudCBvZiB0aGUgb2JqZWN0IGZyb20gYW4gSUQKCSAqCgkgKiBAcGFyYW0gJGlkCQkJCXRoZSBJRCBvZiB0aGUgZWxlbWVudAoJICogQHBhcmFtICRsb2FkUHJvcGVydGllcwl3aGV0aGVyIHRvIGxvYWQgb3Igbm90IHRoZSBwcm9wZXJ0aWVzCgkgKgoJICogQHJldHVybnMgYm9vbAkJCUlmIGl0IGZhaWxzLCB0aGUgb2JqZWN0IGNvbWVzIGJhY2sgdG8gaW5pdGlhbCB2YWx1ZXMgYW5kIHJldHVybnMgRkFMU0UKCSAqCQkJCQkJCUlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCBpdCByZXR1cm5zIFRSVUUKCSAqLwoJZnVuY3Rpb24gTG9hZEZyb21JZCgkaWQsICRsb2FkUHJvcGVydGllcyA9IGZhbHNlKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQlpZiAoLTEgPCAkaWQpCgkJewoJCQkkcXVlcnkJCT0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkcm93CQk9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkaWQpKTsKCgkJCWlmICgkcm93ICYmICEkcm93LT5FT0YpCgkJCXsKCQkJCSR0aGlzLT5tSWQJCQkJPSAkcm93LT5maWVsZHNbImNvbnRlbnRfaWQiXTsKCQkJCSR0aGlzLT5tTmFtZQkJCT0gJHJvdy0+ZmllbGRzWyJjb250ZW50X25hbWUiXTsKCQkJCSR0aGlzLT5tQWxpYXMJCQk9ICRyb3ctPmZpZWxkc1siY29udGVudF9hbGlhcyJdOwoJCQkJJHRoaXMtPm1PbGRBbGlhcwkJPSAkcm93LT5maWVsZHNbImNvbnRlbnRfYWxpYXMiXTsKCQkJCSR0aGlzLT5tVHlwZQkJCT0gc3RydG9sb3dlcigkcm93LT5maWVsZHNbInR5cGUiXSk7CgkJCQkkdGhpcy0+bU93bmVyCQkJPSAkcm93LT5maWVsZHNbIm93bmVyX2lkIl07CgkJCQkjJHRoaXMtPm1Qcm9wZXJ0aWVzCQk9IG5ldyBDb250ZW50UHJvcGVydGllcygpOwoJCQkJJHRoaXMtPm1QYXJlbnRJZAkJPSAkcm93LT5maWVsZHNbInBhcmVudF9pZCJdOwoJCQkJJHRoaXMtPm1PbGRQYXJlbnRJZAkJPSAkcm93LT5maWVsZHNbInBhcmVudF9pZCJdOwoJCQkJJHRoaXMtPm1UZW1wbGF0ZUlkCQk9ICRyb3ctPmZpZWxkc1sidGVtcGxhdGVfaWQiXTsKCQkJCSR0aGlzLT5tSXRlbU9yZGVyCQk9ICRyb3ctPmZpZWxkc1siaXRlbV9vcmRlciJdOwoJCQkJJHRoaXMtPm1PbGRJdGVtT3JkZXIJPSAkcm93LT5maWVsZHNbIml0ZW1fb3JkZXIiXTsKCQkJCSR0aGlzLT5tTWV0YWRhdGEJCT0gJHJvdy0+ZmllbGRzWydtZXRhZGF0YSddOwoJCQkJJHRoaXMtPm1IaWVyYXJjaHkJCT0gJHJvdy0+ZmllbGRzWyJoaWVyYXJjaHkiXTsKCQkJCSR0aGlzLT5tSWRIaWVyYXJjaHkJCT0gJHJvdy0+ZmllbGRzWyJpZF9oaWVyYXJjaHkiXTsKCQkJCSR0aGlzLT5tSGllcmFyY2h5UGF0aAk9ICRyb3ctPmZpZWxkc1siaGllcmFyY2h5X3BhdGgiXTsKCQkJCSR0aGlzLT5tUHJvcGVydGllcy0+bVByb3BlcnR5TmFtZXMgPSBleHBsb2RlKCcsJywkcm93LT5maWVsZHNbInByb3BfbmFtZXMiXSk7CgkJCQkkdGhpcy0+bU1lbnVUZXh0CQk9ICRyb3ctPmZpZWxkc1snbWVudV90ZXh0J107CgkJCQkkdGhpcy0+bU1hcmt1cAkJCT0gJHJvdy0+ZmllbGRzWydtYXJrdXAnXTsKCQkJCSR0aGlzLT5tVGl0bGVBdHRyaWJ1dGUJPSAkcm93LT5maWVsZHNbJ3RpdGxlYXR0cmlidXRlJ107CgkJCQkkdGhpcy0+bUFjY2Vzc0tleQkJPSAkcm93LT5maWVsZHNbJ2FjY2Vzc2tleSddOwoJCQkJJHRoaXMtPm1UYWJJbmRleAkJPSAkcm93LT5maWVsZHNbJ3RhYmluZGV4J107CgkJCQkkdGhpcy0+bUFjdGl2ZQkJCT0gKCRyb3ctPmZpZWxkc1siYWN0aXZlIl0gPT0gMT90cnVlOmZhbHNlKTsKCQkJCSR0aGlzLT5tRGVmYXVsdENvbnRlbnQJPSAoJHJvdy0+ZmllbGRzWyJkZWZhdWx0X2NvbnRlbnQiXSA9PSAxP3RydWU6ZmFsc2UpOwoJCQkJJHRoaXMtPm1TaG93SW5NZW51CQk9ICgkcm93LT5maWVsZHNbInNob3dfaW5fbWVudSJdID09IDE/dHJ1ZTpmYWxzZSk7CgkJCQkkdGhpcy0+bUNhY2hhYmxlCQk9ICgkcm93LT5maWVsZHNbImNhY2hhYmxlIl0gPT0gMT90cnVlOmZhbHNlKTsKCQkJCSR0aGlzLT5tTGFzdE1vZGlmaWVkQnkJPSAkcm93LT5maWVsZHNbImxhc3RfbW9kaWZpZWRfYnkiXTsKCQkJCSR0aGlzLT5tQ3JlYXRpb25EYXRlCT0gJHJvdy0+ZmllbGRzWyJjcmVhdGVfZGF0ZSJdOwoJCQkJJHRoaXMtPm1Nb2RpZmllZERhdGUJPSAkcm93LT5maWVsZHNbIm1vZGlmaWVkX2RhdGUiXTsKCQkJCSR0aGlzLT5tUGFyZW50UGFnZUlkCT0gJHJvdy0+ZmllbGRzWyJwYXJlbnRfcGFnZV9pZCJdOwoKCQkJCSRyZXN1bHQgPSB0cnVlOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCXsKCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgcmV0cmlldmUgY29udGVudCBmcm9tIGRiPC9wPlxuIjsKCQkJCX0KCQkJfQoKCQkJaWYgKCRyZXN1bHQgJiYgJGxvYWRQcm9wZXJ0aWVzKQoJCQl7CgkJCQlpZiAoJHRoaXMtPm1Qcm9wZXJ0aWVzTG9hZGVkID09IGZhbHNlKQoJCQkJewoJCQkJCWRlYnVnX2J1ZmZlcigibG9hZCBmcm9tIGlkIGlzIGxvYWRpbmcgcHJvcGVydGllcyIpOwoJCQkJCSR0aGlzLT5tUHJvcGVydGllcy0+TG9hZCgkdGhpcy0+bUlkKTsKCQkJCQkkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPSB0cnVlOwoJCQkJfQoKCQkJCWlmIChOVUxMID09ICR0aGlzLT5tUHJvcGVydGllcykKCQkJCXsKCQkJCQkkcmVzdWx0ID0gZmFsc2U7CgoJCQkJCSMgZGVidWcgbW9kZQoJCQkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCgkJCQkJewoJCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+Q291bGQgbm90IGxvYWQgcHJvcGVydGllcyBmb3IgY29udGVudDwvcD5cbiI7CgkJCQkJfQoJCQkJfQoJCQl9CgoJCQlpZiAoZmFsc2UgPT0gJHJlc3VsdCkKCQkJewoJCQkJJHRoaXMtPlNldEluaXRpYWxWYWx1ZXMoKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkjIGRlYnVnIG1vZGUKCQkJaWYgKCRjb25maWdbImRlYnVnIl0gPT0gdHJ1ZSkKCQkJewoJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5UaGUgaWQgd2Fzbid0IHZhbGlkIDogJGlkPC9wPlxuIjsKCQkJfQoJCX0KCgkJJHRoaXMtPkxvYWQoKTsKCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJLyoqCgkgKiBMb2FkIHRoZSBjb250ZW50IG9mIHRoZSBvYmplY3QgZnJvbSBhbiBhcnJheQoJICoKCSAqIFRoZXJlIGlzIG5vIGNoZWNrIG9uIHRoZSBkYXRhIHByb3ZpZGVkLCBiZWNhdXNlIHRoaXMgaXMgdGhlIGpvYiBvZgoJICogVmFsaWRhdGVEYXRhCgkgKgoJICogQHJldHVybnMJYm9vbAkJCUlmIGl0IGZhaWxzLCB0aGUgb2JqZWN0IGNvbWVzIGJhY2sgdG8gaW5pdGlhbCB2YWx1ZXMgYW5kIHJldHVybnMgRkFMU0UKCSAqCQkJCQkJCUlmIGV2ZXJ5dGhpbmcgZ29lcyB3ZWxsLCBpdCByZXR1cm5zIFRSVUUKCSAqLwoJZnVuY3Rpb24gTG9hZEZyb21EYXRhKCRkYXRhLCAkbG9hZFByb3BlcnRpZXMgPSBmYWxzZSkKCXsKCQlnbG9iYWwgJGNvbmZpZywgJGRlYnVnX2Vycm9yczsKCgkJJHJlc3VsdCA9IHRydWU7CgoJCSR0aGlzLT5tSWQJCQkJPSAkZGF0YVsiY29udGVudF9pZCJdOwoJCSR0aGlzLT5tTmFtZQkJCT0gJGRhdGFbImNvbnRlbnRfbmFtZSJdOwoJCSR0aGlzLT5tQWxpYXMJCQk9ICRkYXRhWyJjb250ZW50X2FsaWFzIl07CgkJJHRoaXMtPm1PbGRBbGlhcwkJPSAkZGF0YVsiY29udGVudF9hbGlhcyJdOwoJCSR0aGlzLT5tVHlwZQkJCT0gc3RydG9sb3dlcigkZGF0YVsidHlwZSJdKTsKCQkkdGhpcy0+bU93bmVyCQkJPSAkZGF0YVsib3duZXJfaWQiXTsKCQkjJHRoaXMtPm1Qcm9wZXJ0aWVzCQk9IG5ldyBDb250ZW50UHJvcGVydGllcygpOwoJCSR0aGlzLT5tUGFyZW50SWQJCT0gJGRhdGFbInBhcmVudF9pZCJdOwoJCSR0aGlzLT5tT2xkUGFyZW50SWQJCT0gJGRhdGFbInBhcmVudF9pZCJdOwoJCSR0aGlzLT5tVGVtcGxhdGVJZAkJPSAkZGF0YVsidGVtcGxhdGVfaWQiXTsKCQkkdGhpcy0+bUl0ZW1PcmRlcgkJPSAkZGF0YVsiaXRlbV9vcmRlciJdOwoJCSR0aGlzLT5tT2xkSXRlbU9yZGVyCT0gJGRhdGFbIml0ZW1fb3JkZXIiXTsKCQkkdGhpcy0+bU1ldGFkYXRhCQk9ICRkYXRhWydtZXRhZGF0YSddOwoJCSR0aGlzLT5tSGllcmFyY2h5CQk9ICRkYXRhWyJoaWVyYXJjaHkiXTsKCQkkdGhpcy0+bUlkSGllcmFyY2h5CQk9ICRkYXRhWyJpZF9oaWVyYXJjaHkiXTsKCQkkdGhpcy0+bUhpZXJhcmNoeVBhdGgJPSAkZGF0YVsiaGllcmFyY2h5X3BhdGgiXTsKCQkkdGhpcy0+bVByb3BlcnRpZXMtPm1Qcm9wZXJ0eU5hbWVzID0gZXhwbG9kZSgnLCcsJGRhdGFbInByb3BfbmFtZXMiXSk7CgkJJHRoaXMtPm1NZW51VGV4dAkJPSAkZGF0YVsnbWVudV90ZXh0J107CgkJJHRoaXMtPm1NYXJrdXAJCQk9ICRkYXRhWydtYXJrdXAnXTsKCQkkdGhpcy0+bVRpdGxlQXR0cmlidXRlCT0gJGRhdGFbJ3RpdGxlYXR0cmlidXRlJ107CgkJJHRoaXMtPm1BY2Nlc3NLZXkJCT0gJGRhdGFbJ2FjY2Vzc2tleSddOwoJCSR0aGlzLT5tVGFiSW5kZXgJCT0gJGRhdGFbJ3RhYmluZGV4J107CgkJJHRoaXMtPm1EZWZhdWx0Q29udGVudAk9ICgkZGF0YVsiZGVmYXVsdF9jb250ZW50Il0gPT0gMT90cnVlOmZhbHNlKTsKCQkkdGhpcy0+bUFjdGl2ZQkJCT0gKCRkYXRhWyJhY3RpdmUiXSA9PSAxP3RydWU6ZmFsc2UpOwoJCSR0aGlzLT5tU2hvd0luTWVudQkJPSAoJGRhdGFbInNob3dfaW5fbWVudSJdID09IDE/dHJ1ZTpmYWxzZSk7CgkJJHRoaXMtPm1DYWNoYWJsZQkJPSAoJGRhdGFbImNhY2hhYmxlIl0gPT0gMT90cnVlOmZhbHNlKTsKCQkkdGhpcy0+bUxhc3RNb2RpZmllZEJ5CT0gJGRhdGFbImxhc3RfbW9kaWZpZWRfYnkiXTsKCQkkdGhpcy0+bUNyZWF0aW9uRGF0ZQk9ICRkYXRhWyJjcmVhdGVfZGF0ZSJdOwoJCSR0aGlzLT5tTW9kaWZpZWREYXRlCT0gJGRhdGFbIm1vZGlmaWVkX2RhdGUiXTsKCQkkdGhpcy0+bVBhcmVudFBhZ2VJZAk9ICRkYXRhWyJwYXJlbnRfcGFnZV9pZCJdOwoJCWlmICgkbG9hZFByb3BlcnRpZXMgPT0gdHJ1ZSkKCQl7CgkJCSMkdGhpcy0+bVByb3BlcnRpZXMgPSBDb250ZW50TWFuYWdlcjo6TG9hZFByb3BlcnRpZXNGcm9tRGF0YShzdHJ0b2xvd2VyKCR0aGlzLT5tVHlwZSksICRkYXRhKTsKCQkJaWYgKCR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKCQkJewoJCQkJZGVidWdfYnVmZmVyKCJsb2FkIGZyb20gZGF0YSBpcyBsb2FkaW5nIHByb3BlcnRpZXMiKTsKCQkJCSR0aGlzLT5tUHJvcGVydGllcy0+TG9hZCgkdGhpcy0+bUlkKTsKCQkJCSR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CgkJCX0KCgkJCWlmIChOVUxMID09ICR0aGlzLT5tUHJvcGVydGllcykKCQkJewoJCQkJJHJlc3VsdCA9IGZhbHNlOwoKCQkJCSMgZGVidWcgbW9kZQoJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCXsKCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgbG9hZCBwcm9wZXJ0aWVzIGZvciBjb250ZW50PC9wPlxuIjsKCQkJCX0KCQkJfQoJCX0KCgkJaWYgKGZhbHNlID09ICRyZXN1bHQpCgkJewoJCQkkdGhpcy0+U2V0SW5pdGlhbFZhbHVlcygpOwoJCX0KCgkJJHRoaXMtPkxvYWQoKTsKCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJLyoqCgkgKiBDYWxsYmFjayBmdW5jdGlvbiBmb3IgY29udGVudCB0eXBlcyB0byB1c2UgdG8gcHJlbG9hZCBjb250ZW50IG9yIG90aGVyIHRoaW5ncyBpZiBuZWNlc3NhcnkuICBUaGlzCgkgKiBpcyBjYWxsZWQgcmlnaHQgYWZ0ZXIgdGhlIHByb3BlcnRpZXMgYXJlIGxvYWRlZC4KCSAqLwoJZnVuY3Rpb24gTG9hZCgpCgl7Cgl9CgoJLyoqCgkgKiBTYXZlIG9yIHVwZGF0ZSB0aGUgY29udGVudAoJICovCgkjIDpUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gc29tZXRoaW5nCglmdW5jdGlvbiBTYXZlKCkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJZm9yZWFjaCgkZ0Ntcy0+bW9kdWxlcyBhcyAka2V5PT4kdmFsdWUpCgkJewoJCQlpZiAoJGdDbXMtPm1vZHVsZXNbJGtleV1bJ2luc3RhbGxlZCddID09IHRydWUgJiYKCQkJCSRnQ21zLT5tb2R1bGVzWyRrZXldWydhY3RpdmUnXSA9PSB0cnVlKQoJCQl7CgkJCQkkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnb2JqZWN0J10tPkNvbnRlbnRFZGl0UHJlKCR0aGlzKTsKCQkJfQoJCX0KCQkKCQlFdmVudHM6OlNlbmRFdmVudCgnQ29yZScsICdDb250ZW50RWRpdFByZScsIGFycmF5KCdjb250ZW50JyA9PiAmJHRoaXMpKTsKCgkJaWYgKCR0aGlzLT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKCQl7CgkJCWRlYnVnX2J1ZmZlcignc2F2ZSBpcyBsb2FkaW5nIHByb3BlcnRpZXMnKTsKCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5Mb2FkKCR0aGlzLT5tSWQpOwoJCQkkdGhpcy0+bVByb3BlcnRpZXNMb2FkZWQgPSB0cnVlOwoJCX0KCgkJaWYgKC0xIDwgJHRoaXMtPm1JZCkKCQl7CgkJCSR0aGlzLT5VcGRhdGUoKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHRoaXMtPkluc2VydCgpOwoJCX0KCQkKCQlmb3JlYWNoKCRnQ21zLT5tb2R1bGVzIGFzICRrZXk9PiR2YWx1ZSkKCQl7CQkKCQkJaWYgKCRnQ21zLT5tb2R1bGVzWyRrZXldWydpbnN0YWxsZWQnXSA9PSB0cnVlICYmCgkJCQkkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnYWN0aXZlJ10gPT0gdHJ1ZSkKCQkJewoJCQkJJGdDbXMtPm1vZHVsZXNbJGtleV1bJ29iamVjdCddLT5Db250ZW50RWRpdFBvc3QoJHRoaXMpOwoJCQl9CgkJfQoJCQoJCUV2ZW50czo6U2VuZEV2ZW50KCdDb3JlJywgJ0NvbnRlbnRFZGl0UG9zdCcsIGFycmF5KCdjb250ZW50JyA9PiAmJHRoaXMpKTsKCQkKCX0KCgkvKioKCSAqIFVwZGF0ZSB0aGUgY29udGVudAoJICogV2UgY2FuIG5vdGljZSwgdGhhdCBvbmx5IGEgZmV3IHRoaW5ncyBhcmUgdXBkYXRlZAoJICogV2UgZG8gbm90IGNhcmUgYWJvdXQgaGllcmFyY2h5IGZvciBleGFtcGxlLiBUaGlzIGlzIGJlY2F1c2UgaGllcmFyY2h5LAoJICogb3JkZXIgb3IgcGFyZW50cyBtYW5hZ2VtZW50IGlzIHRoZSBqb2Igb2YgdGhlIGNvbnRlbnQgbWFuYWdlci4KCSAqIFJlbWVtYmVyIHRoYXQgYSBjb250ZW50IGlzIGxpa2UgYSBmaWxlLCBhbmQgYSBmaWxlIGRvbid0IGtub3cgd2hlcmUgaXQgaXMKCSAqIG9uIHRoZSBkaXNrLCBpdCBvbmx5IGtub3dzIGl0cyBvd24gY29udGVudC4gSXQncyB0aGUgc2FtZSBoZXJlLgoJICovCgkjIDpUT0RPOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gc29tZXRoaW5nCglmdW5jdGlvbiBVcGRhdGUoKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQkjRmlndXJlIG91dCB0aGUgaXRlbV9vcmRlciAoaWYgbmVjZXNzYXJ5KQoJCWlmICgkdGhpcy0+bUl0ZW1PcmRlciA8IDEpCgkJewoJCQkkcXVlcnkgPSAiU0VMRUNUICIuJGRiLT5JZk51bGwoJ21heChpdGVtX29yZGVyKScsJzAnKS4iIGFzIG5ld19vcmRlciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIHBhcmVudF9pZCA9ID8iOwoJCQkkcm93ID0gJiRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgkdGhpcy0+bVBhcmVudElkKSk7CgoJCQlpZiAoJHJvdykKCQkJewoJCQkJaWYgKCRyb3dbJ25ld19vcmRlciddIDwgMSkKCQkJCXsKCQkJCQkkdGhpcy0+bUl0ZW1PcmRlciA9IDE7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJJHRoaXMtPm1JdGVtT3JkZXIgPSAkcm93WyduZXdfb3JkZXInXSArIDE7CgkJCQl9CgkJCX0KCQl9CgoJCSR0aGlzLT5tTW9kaWZpZWREYXRlID0gdHJpbSgkZGItPkRCVGltZVN0YW1wKHRpbWUoKSksICInIik7CgoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIGNvbnRlbnRfbmFtZSA9ID8sIG93bmVyX2lkID0gPywgdHlwZSA9ID8sIHRlbXBsYXRlX2lkID0gPywgcGFyZW50X2lkID0gPywgYWN0aXZlID0gPywgZGVmYXVsdF9jb250ZW50ID0gPywgc2hvd19pbl9tZW51ID0gPywgY2FjaGFibGUgPSA/LCBtZW51X3RleHQgPSA/LCBjb250ZW50X2FsaWFzID0gPywgbWV0YWRhdGEgPSA/LCB0aXRsZWF0dHJpYnV0ZSA9ID8sIGFjY2Vzc2tleSA9ID8sIHRhYmluZGV4ID0gPywgbW9kaWZpZWRfZGF0ZSA9ID8sIGl0ZW1fb3JkZXIgPSA/LCBtYXJrdXAgPSA/LCBsYXN0X21vZGlmaWVkX2J5ID0gPyBXSEVSRSBjb250ZW50X2lkID0gPyI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoCgkJCSR0aGlzLT5tTmFtZSwKCQkJJHRoaXMtPm1Pd25lciwKCQkJc3RydG9sb3dlcigkdGhpcy0+bVR5cGUpLAoJCQkkdGhpcy0+bVRlbXBsYXRlSWQsCgkJCSR0aGlzLT5tUGFyZW50SWQsCgkJCSgkdGhpcy0+bUFjdGl2ZT09dHJ1ZT8xOjApLAoJCQkoJHRoaXMtPm1EZWZhdWx0Q29udGVudD09dHJ1ZT8xOjApLAoJCQkoJHRoaXMtPm1TaG93SW5NZW51PT10cnVlPzE6MCksCgkJCSgkdGhpcy0+bUNhY2hhYmxlPT10cnVlPzE6MCksCgkJCSR0aGlzLT5tTWVudVRleHQsCgkJCSR0aGlzLT5tQWxpYXMsCgkJCSR0aGlzLT5tTWV0YWRhdGEsCgkJCSR0aGlzLT5tVGl0bGVBdHRyaWJ1dGUsCgkJCSR0aGlzLT5tQWNjZXNzS2V5LAoJCQkkdGhpcy0+bVRhYkluZGV4LAoJCQkkdGhpcy0+bU1vZGlmaWVkRGF0ZSwKCQkJJHRoaXMtPm1JdGVtT3JkZXIsCgkJCSR0aGlzLT5tTWFya3VwLAoJCQkkdGhpcy0+bUxhc3RNb2RpZmllZEJ5LAoJCQkkdGhpcy0+bUlkCgkJCSkpOwoKCQlpZiAoISRkYnJlc3VsdCkKCQl7CgkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCgkJCXsKCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+RXJyb3IgdXBkYXRpbmcgY29udGVudDwvcD5cbiI7CgkJCX0KCQl9CgoJCWlmICgkdGhpcy0+bU9sZFBhcmVudElkICE9ICR0aGlzLT5tUGFyZW50SWQpCgkJewoJCQkjRml4IHRoZSBpdGVtX29yZGVyIGlmIG5lY2Vzc2FyeQoJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciAtIDEgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgaXRlbV9vcmRlciA+ID8iOwoJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRoaXMtPm1PbGRQYXJlbnRJZCwkdGhpcy0+bU9sZEl0ZW1PcmRlcikpOwoKCQkJJHRoaXMtPm1PbGRQYXJlbnRJZCA9ICR0aGlzLT5tUGFyZW50SWQ7CgkJCSR0aGlzLT5tT2xkSXRlbU9yZGVyID0gJHRoaXMtPm1JdGVtT3JkZXI7CgkJfQoKCQlpZiAoaXNzZXQoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycykpCgkJewoJCQkkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuImFkZGl0aW9uYWxfdXNlcnMgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkdGhpcy0+SWQoKSkpOwoKCQkJZm9yZWFjaCAoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycyBhcyAkb25lZWRpdG9yKQoJCQl7CgkJCQkkbmV3X2FkZHRfaWQgPSAkZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4iYWRkaXRpb25hbF91c2Vyc19zZXEiKTsKCQkJCSRxdWVyeSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4iYWRkaXRpb25hbF91c2VycyAoYWRkaXRpb25hbF91c2Vyc19pZCwgdXNlcl9pZCwgY29udGVudF9pZCkgVkFMVUVTICg/LD8sPykiOwoJCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJG5ld19hZGR0X2lkLCAkb25lZWRpdG9yLCAkdGhpcy0+SWQoKSkpOwoJCQl9CgkJfQoKCQlpZiAoTlVMTCAhPSAkdGhpcy0+bVByb3BlcnRpZXMpCgkJewoJCQkjIDpUT0RPOiBUaGVyZSBtaWdodCBiZSBzb21lIGVycm9yIGNoZWNraW5nIHRoZXJlCgkJCWRlYnVnX2J1ZmZlcignc2F2ZSBmcm9tICcgLiBfX0xJTkVfXyk7CgkJCSR0aGlzLT5tUHJvcGVydGllcy0+U2F2ZSgkdGhpcy0+bUlkKTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJewoJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5FcnJvciB1cGRhdGluZyA6IHRoZSBjb250ZW50IGhhcyBubyBwcm9wZXJ0aWVzPC9wPlxuIjsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEluc2VydCB0aGUgY29udGVudCBpbiB0aGUgZGIKCSAqLwoJIyA6VE9ETzogVGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHNvbWV0aGluZwoJIyA6VE9ETzogVGFrZSBjYXJlIGJvdXQgaGllcmFyY2h5IGhlcmUsIGl0IGhhcyBubyB2YWx1ZSAhCgkjIDpUT0RPOiBGaWd1cmUgb3V0IHByb3BlciBpdGVtX29yZGVyCglmdW5jdGlvbiBJbnNlcnQoKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQkjRmlndXJlIG91dCB0aGUgaXRlbV9vcmRlcgoJCWlmICgkdGhpcy0+bUl0ZW1PcmRlciA8IDEpCgkJewoJCQkkcXVlcnkgPSAiU0VMRUNUIG1heChpdGVtX29yZGVyKSBhcyBuZXdfb3JkZXIgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBwYXJlbnRfaWQgPSA/IjsKCQkJJHJvdyA9ICYkZGItPkdldHJvdygkcXVlcnksIGFycmF5KCR0aGlzLT5tUGFyZW50SWQpKTsKCgkJCWlmICgkcm93KQoJCQl7CgkJCQlpZiAoJHJvd1snbmV3X29yZGVyJ10gPCAxKQoJCQkJewoJCQkJCSR0aGlzLT5tSXRlbU9yZGVyID0gMTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQkkdGhpcy0+bUl0ZW1PcmRlciA9ICRyb3dbJ25ld19vcmRlciddICsgMTsKCQkJCX0KCQkJfQoJCX0KCgkJJG5ld2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuImNvbnRlbnRfc2VxIik7CgkJJHRoaXMtPm1JZCA9ICRuZXdpZDsKCgkJJHRoaXMtPm1Nb2RpZmllZERhdGUgPSAkdGhpcy0+bUNyZWF0aW9uRGF0ZSA9IHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCAiJyIpOwoKCQkkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi4kY29uZmlnWyJkYl9wcmVmaXgiXS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCAoY29udGVudF9pZCwgY29udGVudF9uYW1lLCBjb250ZW50X2FsaWFzLCB0eXBlLCBvd25lcl9pZCwgcGFyZW50X2lkLCB0ZW1wbGF0ZV9pZCwgaXRlbV9vcmRlciwgaGllcmFyY2h5LCBpZF9oaWVyYXJjaHksIGFjdGl2ZSwgZGVmYXVsdF9jb250ZW50LCBzaG93X2luX21lbnUsIGNhY2hhYmxlLCBtZW51X3RleHQsIG1hcmt1cCwgbWV0YWRhdGEsIHRpdGxlYXR0cmlidXRlLCBhY2Nlc3NrZXksIHRhYmluZGV4LCBsYXN0X21vZGlmaWVkX2J5LCBjcmVhdGVfZGF0ZSwgbW9kaWZpZWRfZGF0ZSwgcGFyZW50X3BhZ2VfaWQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8pIjsKCgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoCgkJCSRuZXdpZCwKCQkJJHRoaXMtPm1OYW1lLAoJCQkkdGhpcy0+bUFsaWFzLAoJCQlzdHJ0b2xvd2VyKCR0aGlzLT5tVHlwZSksCgkJCSR0aGlzLT5tT3duZXIsCgkJCSR0aGlzLT5tUGFyZW50SWQsCgkJCSR0aGlzLT5tVGVtcGxhdGVJZCwKCQkJJHRoaXMtPm1JdGVtT3JkZXIsCgkJCSR0aGlzLT5tSGllcmFyY2h5LAoJCQkkdGhpcy0+bUlkSGllcmFyY2h5LAoJCQkoJHRoaXMtPm1BY3RpdmU9PXRydWU/MTowKSwKCQkJKCR0aGlzLT5tRGVmYXVsdENvbnRlbnQ9PXRydWU/MTowKSwKCQkJKCR0aGlzLT5tU2hvd0luTWVudT09dHJ1ZT8xOjApLAoJCQkoJHRoaXMtPm1DYWNoYWJsZT09dHJ1ZT8xOjApLAoJCQkkdGhpcy0+bU1lbnVUZXh0LAoJCQkkdGhpcy0+bU1hcmt1cCwKCQkJJHRoaXMtPm1NZXRhZGF0YSwKCQkJJHRoaXMtPm1UaXRsZUF0dHJpYnV0ZSwKCQkJJHRoaXMtPm1BY2Nlc3NLZXksCgkJCSR0aGlzLT5tVGFiSW5kZXgsCgkJCSR0aGlzLT5tTGFzdE1vZGlmaWVkQnksCgkJCSR0aGlzLT5tTW9kaWZpZWREYXRlLAoJCQkkdGhpcy0+bUNyZWF0aW9uRGF0ZSwKCQkJJHRoaXMtPm1QYXJlbnRQYWdlSWQKCQkJKSk7CgoJCWlmICghICRkYnJlc3VsdCkKCQl7CgkJCWlmICgkY29uZmlnWyJkZWJ1ZyJdID09IHRydWUpCgkJCXsKCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+RXJyb3IgaW5zZXJ0aW5nIGNvbnRlbnQ8L3A+XG4iOwoJCQl9CgkJfQoKCQlpZiAoTlVMTCAhPSAkdGhpcy0+bVByb3BlcnRpZXMpCgkJewoJCQkjIDpUT0RPOiBUaGVyZSBtaWdodCBiZSBzb21lIGVycm9yIGNoZWNraW5nIHRoZXJlCgkJCWRlYnVnX2J1ZmZlcignc2F2ZSBmcm9tICcgLiBfX0xJTkVfXyk7CgkJCSR0aGlzLT5tUHJvcGVydGllcy0+U2F2ZSgkbmV3aWQpOwoJCX0KCQllbHNlCgkJewoJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQl7CgkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkVycm9yIGluc2VydGluZyA6IHRoZSBjb250ZW50IGhhcyBubyBwcm9wZXJ0aWVzPC9wPlxuIjsKCQkJfQoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycykpCgkJewoJCQlmb3JlYWNoICgkdGhpcy0+bUFkZGl0aW9uYWxFZGl0b3JzIGFzICRvbmVlZGl0b3IpCgkJCXsKCQkJCSRuZXdfYWRkdF9pZCA9ICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJhZGRpdGlvbmFsX3VzZXJzX3NlcSIpOwoJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJhZGRpdGlvbmFsX3VzZXJzIChhZGRpdGlvbmFsX3VzZXJzX2lkLCB1c2VyX2lkLCBjb250ZW50X2lkKSBWQUxVRVMgKD8sPyw/KSI7CgkJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LCBhcnJheSgkbmV3X2FkZHRfaWQsICRvbmVlZGl0b3IsICR0aGlzLT5JZCgpKSk7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBUZXN0IGlmIHRoZSBhcnJheSBnaXZlbiBjb250YWlucyB2YWxpZCBkYXRhIGZvciB0aGUgb2JqZWN0CgkgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY2hlY2sgdGhhdCBubyBjb21wdWxzb3J5IGFyZ3VtZW50CgkgKiBoYXMgYmVlbiBmb3Jnb3R0ZW4gYnkgdGhlIHVzZXIKCSAqCgkgKiBXZSBkbyBub3QgY2hlY2sgdGhlIElkIGJlY2F1c2UgdGhlcmUgY2FuIGJlIG5vIElkIChuZXcgY29udGVudCkKCSAqIFRoYXQncyB1cCB0byBTYXZlIHRvIGNoZWNrIHRoaXMuCgkgKgoJICogQHJldHVybnMJRkFMU0UgaWYgZGF0YSBpcyBvaywgYW5kIGFuIGFycmF5IG9mIGludmFsaWQgcGFyYW1ldGVycyBlbHNlCgkgKi8KCWZ1bmN0aW9uIFZhbGlkYXRlRGF0YSgpCgl7CgkJcmV0dXJuIEZBTFNFOwoJfQoKCS8qKgoJICogRGVsZXRlIHRoZSBjb250ZW50CgkgKi8KCSMgOlRPRE86IFRoaXMgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBzb21ldGhpbmcKCWZ1bmN0aW9uIERlbGV0ZSgpCgl7CgkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CgkJLyoKCQlmb3JlYWNoKCRnQ21zLT5tb2R1bGVzIGFzICRrZXk9PiR2YWx1ZSkKCQl7CgkJCWlmICgkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnaW5zdGFsbGVkJ10gPT0gdHJ1ZSAmJgoJCQkJJGdDbXMtPm1vZHVsZXNbJGtleV1bJ2FjdGl2ZSddID09IHRydWUpCgkJCXsKCQkJCSRnQ21zLT5tb2R1bGVzWyRrZXldWydvYmplY3QnXS0+Q29udGVudERlbGV0ZVByZSgkdGhpcyk7CgkJCX0KCQl9CgkJCgkJRXZlbnRzOjpTZW5kRXZlbnQoJ0NvcmUnLCAnQ29udGVudERlbGV0ZVByZScsIGFycmF5KCdjb250ZW50JyA9PiAmJHRoaXMpKTsKCQkqLwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQlpZiAoLTEgPiAkdGhpcy0+bUlkKQoJCXsKCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJewoJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgZGVsZXRlIGNvbnRlbnQgOiBpbnZhbGlkIElkPC9wPlxuIjsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQkkcXVlcnkJCT0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJJGRicmVzdWx0CT0gJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJHRoaXMtPm1JZCkpOwoKCQkJaWYgKCEgJGRicmVzdWx0KQoJCQl7CgkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQkJewoJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkVycm9yIGRlbGV0aW5nIGNvbnRlbnQ8L3A+XG4iOwoJCQkJfQoJCQl9CgkJCQoJCQkjRml4IHRoZSBpdGVtX29yZGVyIGlmIG5lY2Vzc2FyeQoJCQkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFNFVCBpdGVtX29yZGVyID0gaXRlbV9vcmRlciAtIDEgV0hFUkUgcGFyZW50X2lkID0gPyBBTkQgaXRlbV9vcmRlciA+ID8iOwoJCQkkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+UGFyZW50SWQoKSwkdGhpcy0+SXRlbU9yZGVyKCkpKTsKCQkJCgkJCSNSZW1vdmUgdGhlIGNyb3NzIHJlZmVyZW5jZXMKCQkJcmVtb3ZlX2Jsb2NrX2Nyb3NzX3JlZmVyZW5jZXMoJHRoaXMtPm1JZCwgJ2NvbnRlbnQnKTsKCQkJCgkJCSRjYWNoZWZpbGVuYW1lID0gVE1QX0NBQ0hFX0xPQ0FUSU9OIC4gJy9ibG9ja2NvbnRlbnRjYWNoZS5waHAnOwoJCQlAdW5saW5rKCRjYWNoZWZpbGVuYW1lKTsKCgkJCWlmIChOVUxMICE9ICR0aGlzLT5tUHJvcGVydGllcykKCQkJewoJCQkJIyA6VE9ETzogVGhlcmUgbWlnaHQgYmUgc29tZSBlcnJvciBjaGVja2luZyB0aGVyZQoJCQkJJHRoaXMtPm1Qcm9wZXJ0aWVzLT5EZWxldGUoJHRoaXMtPm1JZCk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQkJewoJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkVycm9yIGRlbGV0aW5nIDogdGhlIGNvbnRlbnQgaGFzIG5vIHByb3BlcnRpZXM8L3A+XG4iOwoJCQkJfQoJCQl9CgkJfQoJCQoJCWZvcmVhY2goJGdDbXMtPm1vZHVsZXMgYXMgJGtleT0+JHZhbHVlKQoJCXsKCQkJaWYgKCRnQ21zLT5tb2R1bGVzWyRrZXldWydpbnN0YWxsZWQnXSA9PSB0cnVlICYmCgkJCQkkZ0Ntcy0+bW9kdWxlc1ska2V5XVsnYWN0aXZlJ10gPT0gdHJ1ZSkKCQkJewoJCQkJJGdDbXMtPm1vZHVsZXNbJGtleV1bJ29iamVjdCddLT5Db250ZW50RGVsZXRlUG9zdCgkdGhpcyk7CgkJCX0KCQl9CgkJCgkJRXZlbnRzOjpTZW5kRXZlbnQoJ0NvcmUnLCAnQ29udGVudERlbGV0ZVBvc3QnLCBhcnJheSgnY29udGVudCcgPT4gJiR0aGlzKSk7Cgl9CgoJLyoqCgkgKiBGdW5jdGlvbiBmb3IgdGhlIHN1YmNsYXNzIHRvIHBhcnNlIG91dCBkYXRhIGZvciBpdCdzIHBhcmFtZXRlcnMgKHVzdWFsbHkgZnJvbSAkX1BPU1QpCgkgKi8KCWZ1bmN0aW9uIEZpbGxQYXJhbXMoJHBhcmFtcykKCXsKCX0KCgkvKioKCSAqIEZ1bmN0aW9uIGZvciBjb250ZW50IHR5cGVzIHRvIG92ZXJyaWRlIHRvIHNldCB0aGVpciBwcm9wZXIgZ2VuZXJhdGVkIFVSTAoJICovCglmdW5jdGlvbiBHZXRVUkwoJHJld3JpdGUgPSB0cnVlKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkY29uZmlnID0gJiRnQ21zLT5HZXRDb25maWcoKTsKCQkkdXJsID0gIiI7CgkJJGFsaWFzID0gKCR0aGlzLT5tQWxpYXMgIT0gJyc/JHRoaXMtPm1BbGlhczokdGhpcy0+bUlkKTsKCQlpZiAoJGNvbmZpZ1siYXNzdW1lX21vZF9yZXdyaXRlIl0gJiYgJHJld3JpdGUgPT0gdHJ1ZSkKCQl7CgkJCWlmICgkY29uZmlnWyd1c2VfaGllcmFyY2h5J10gPT0gdHJ1ZSkKCQkJCSR1cmwgPSAkY29uZmlnWyJyb290X3VybCJdLiAnLycgLiAkdGhpcy0+SGllcmFyY2h5UGF0aCgpIC4gKGlzc2V0KCRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ10pPyRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ106Jy5odG1sJyk7CgkJCWVsc2UKCQkJCSR1cmwgPSAkY29uZmlnWyJyb290X3VybCJdLiAnLycgLiAkYWxpYXMgLiAoaXNzZXQoJGNvbmZpZ1sncGFnZV9leHRlbnNpb24nXSk/JGNvbmZpZ1sncGFnZV9leHRlbnNpb24nXTonLmh0bWwnKTsKCQl9CgkJZWxzZQoJCXsKCQkJaWYgKGlzc2V0KCRfU0VSVkVSWydQSFBfU0VMRiddKSAmJiAkY29uZmlnWydpbnRlcm5hbF9wcmV0dHlfdXJscyddID09IHRydWUpCgkJCXsKCQkJCWlmICgkY29uZmlnWyd1c2VfaGllcmFyY2h5J10gPT0gdHJ1ZSkKCQkJCQkkdXJsID0gJGNvbmZpZ1sicm9vdF91cmwiXSAuICcvaW5kZXgucGhwLycgLiAkdGhpcy0+SGllcmFyY2h5UGF0aCgpIC4gKGlzc2V0KCRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ10pPyRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ106Jy5odG1sJyk7CgkJCQllbHNlCgkJCQkJJHVybCA9ICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAnL2luZGV4LnBocC8nIC4gJGFsaWFzIC4gKGlzc2V0KCRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ10pPyRjb25maWdbJ3BhZ2VfZXh0ZW5zaW9uJ106Jy5odG1sJyk7CgkJCX0KCQkJZWxzZQoJCQkJJHVybCA9ICRjb25maWdbJ3Jvb3RfdXJsJ10gLiAnL2luZGV4LnBocD8nIC4gJGNvbmZpZ1sicXVlcnlfdmFyIl0gLiAnPScgLiAkYWxpYXM7CgkJfQoJCXJldHVybiAkdXJsOwoJfQoKCS8qCglmdW5jdGlvbiBNYWtlSGllcmFyY2h5VVJMKCRleHQ9JycpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRobSA9JiAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoKCQkkcGF0aCA9ICcvJyAuICR0aGlzLT5BbGlhcygpOwoKCQkkbm9kZSA9JiAkaG0tPmdldE5vZGVCeUlkKCR0aGlzLT5QYXJlbnRJZCgpKTsKCQlpZihpc3NldCgkbm9kZSkpCgkJewoJCQkkY29udGVudCA9JiAkbm9kZS0+R2V0Q29udGVudCgpOwoJCQlpZiAoaXNzZXQoJGNvbnRlbnQpKQoJCQl7CgkJCQkkcGF0aCA9ICcvJyAuICRjb250ZW50LT5IaWVyYXJjaHlQYXRoKCk7CgkJCX0KCQl9CgoJCSRyZXN1bHQgPSAkcGF0aDsKCgkJaWYgKCRleHQgIT0gJycpCgkJCSRyZXN1bHQgPSAkcGF0aCAuICRleHQ7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoJKi8KCgkvKioKCSAqIFNob3cgdGhlIGNvbnRlbnQKCSAqLwoJZnVuY3Rpb24gU2hvdygkcGFyYW0gPSAnJykKCXsKCQkjIDpUT0RPOgoJCXJldHVybiAiPHRyPjx0ZD5TaG93IE5vdCBEZWZpbmVkPC90ZD48L3RyPiI7Cgl9CgkKCS8qKgoJKiBhbGxvdyB0aGUgY29udGVudCBtb2R1bGUgdG8gaGFuZGxlIGN1c3RvbSB0YWdzLiBUeXBpY2FsbHkgdXNlZCBmb3IgcGFyYW1ldGVycyBpbiB7Y29udGVudH0gdGFncwoJKi8KCWZ1bmN0aW9uIENvbnRlbnRQcmVSZW5kZXIoJHRwbF9zb3VyY2UpCgl7CgkJcmV0dXJuICR0cGxfc291cmNlOwoJfQoKCS8qKgoJICogUmV0dXJucyBhIGxpc3Qgb2YgdGFiIG5hbWVzIHRoYXQgc2hvdWxkIGJlIHVzZWQgd2hlbiBhZGRpbmcgb3IgZWRpdGluZyB0aGlzIHR5cGUgb2YgY29udGVudAoJICovCglmdW5jdGlvbiBHZXRUYWJEZWZpbml0aW9ucygpCgl7CgkJcmV0dXJuIGFycmF5KCk7Cgl9CgkKCS8qKgoJICogUmV0dXJucyB0aGUgdGFiIG5hbWVzIHVzZWQgaW4gdGhlIGFkZCBhbmQgZWRpdCBjb250ZW50IHBhZ2UuICBJZiBpdCdzIGFuIGVtcHR5IGFycmF5LCB0aGVuCgkgKiB0aGUgdGFicyB3b24ndCBzaG93IGF0IGFsbC4KCSAqLwoJZnVuY3Rpb24gVGFiTmFtZXMoKQoJewoJCXJldHVybiBhcnJheSgpOwoJfQoKCS8qKgoJICogU2hvdyB0aGUgQWx0ZXJuYXRlIEVkaXQgaW50ZXJmYWNlCgkgKi8KCWZ1bmN0aW9uIEVkaXRBc0FycmF5KCRhZGRpbmcgPSBmYWxzZSwgJHRhYiA9IDAsICRzaG93YWRtaW4gPSBmYWxzZSkKCXsKCQkjIDpUT0RPOgoJCXJldHVybiBhcnJheShhcnJheSgnRXJyb3InLCdFZGl0IE5vdCBEZWZpbmVkIScpKTsKCX0KCgoJLyoqCgkgKiBTaG93IHRoZSBFZGl0IGludGVyZmFjZQoJICovCglmdW5jdGlvbiBFZGl0KCRhZGRpbmcgPSBmYWxzZSwgJHRhYiA9IDAsICRzaG93YWRtaW4gPSBmYWxzZSkKCXsKICAgICAgICAkdGV4dCA9ICcnOwogICAgICAgICR2YWwgPSAkdGhpcy0+RWRpdEFzQXJyYXkoJGFkZGluZywgJHRhYiwgJHNob3dhZG1pbik7CiAgICAgICAgZm9yZWFjaCAoJHZhbCBhcyAkdGhpc1JvdykKICAgICAgICAgICAgewogICAgICAgICAgICAkdGV4dCAuPSAnPHRyPjx0aD4nLiR0aGlzUm93WzBdLic8L3RoPjx0ZD4nLiR0aGlzUm93WzFdLic8L3RkPjwvdHI+JzsKICAgICAgICAgICAgJHRleHQgLj0gIlxuIjsKICAgICAgICAgICAgfQoJCXJldHVybiAkdGV4dDsKCgl9CgoJLyoqCgkgKiBTaG93IHRoZSBBZHZhbmNlZCBFZGl0IGludGVyZmFjZQoJICovCglmdW5jdGlvbiBBZHZhbmNlZEVkaXQoJGFkZGluZyA9IGZhbHNlKQoJewoJCSMgOlRPRE86CgkJcmV0dXJuICI8dHI+PHRkPkFkdmFuY2VkIEVkaXQgTm90IERlZmluZWQ8L3RkPjwvdHI+IjsKCX0KCgkvKioKCSAqIFNob3cgSGVscAoJICovCglmdW5jdGlvbiBIZWxwKCkKCXsKCQkjIDpUT0RPOgoJCXJldHVybiAiPHRyPjx0ZD5IZWxwIE5vdCBEZWZpbmVkPC90ZD48L3RyPiI7Cgl9CgoJLyoqCgkgKiBEb2VzIHRoaXMgaGF2ZSBjaGlsZHJlbj8KCSAqLwoJZnVuY3Rpb24gSGFzQ2hpbGRyZW4oKQoJewoJCWdsb2JhbCAkZ0NtcywgJGNvbmZpZywgJHNxbF9xdWVyaWVzLCAkZGVidWdfZXJyb3JzOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJHJlc3VsdCA9IGZhbHNlOwoKCQkkcXVlcnkgPSAiU0VMRUNUIGNvbnRlbnRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBwYXJlbnRfaWQgPSA/IjsKCQkkcm93ID0gJiRkYi0+R2V0cm93KCRxdWVyeSwgYXJyYXkoJHRoaXMtPm1JZCkpOwoKCQlpZiAoJHJvdykKCQl7CgkJCSRyZXN1bHQgPSB0cnVlOwoJCX0KCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgoJZnVuY3Rpb24gR2V0QWRkaXRpb25hbEVkaXRvcnMoKQoJewoJCWlmICghaXNzZXQoJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycykpCgkJewoJCQlnbG9iYWwgJGdDbXM7CgkJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJCSR0aGlzLT5tQWRkaXRpb25hbEVkaXRvcnMgPSBhcnJheSgpOwoKCQkJJHF1ZXJ5ID0gIlNFTEVDVCB1c2VyX2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuImFkZGl0aW9uYWxfdXNlcnMgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkZGJyZXN1bHQgPSAmJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+bUlkKSk7CgoJCQl3aGlsZSAoJGRicmVzdWx0ICYmICEkZGJyZXN1bHQtPkVPRikKCQkJewoJCQkJJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9yc1tdID0gJGRicmVzdWx0LT5maWVsZHNbJ3VzZXJfaWQnXTsKCQkJCSRkYnJlc3VsdC0+TW92ZU5leHQoKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9yczsKCX0KCglmdW5jdGlvbiBTZXRBZGRpdGlvbmFsRWRpdG9ycygkZWRpdG9yYXJyYXkpCgl7CgkJJHRoaXMtPm1BZGRpdGlvbmFsRWRpdG9ycyA9ICRlZGl0b3JhcnJheTsKCX0KCglmdW5jdGlvbiBTaG93QWRkaXRpb25hbEVkaXRvcnMoKQoJewoJCSRyZXQgPSBhcnJheSgpOwoKCQkkcmV0W10gPSBsYW5nKCdhZGRpdGlvbmFsZWRpdG9ycycpOwoJCSR0ZXh0ID0gJzxzZWxlY3QgbmFtZT0iYWRkaXRpb25hbF9lZGl0b3JzW10iIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iNSI+JzsKCgkJJGFsbHVzZXJzID0gVXNlck9wZXJhdGlvbnM6OkxvYWRVc2VycygpOwoJCSRhZGR0ZWRpdG9ycyA9ICR0aGlzLT5HZXRBZGRpdGlvbmFsRWRpdG9ycygpOwoJCWZvcmVhY2ggKCRhbGx1c2VycyBhcyAkb25ldXNlcikKCQl7CgkJCWlmICgkb25ldXNlci0+aWQgIT0gJHRoaXMtPk93bmVyKCkpCgkJCXsKCQkJCSR0ZXh0IC49ICc8b3B0aW9uIHZhbHVlPSInLiRvbmV1c2VyLT5pZC4nIic7CgkJCQlpZiAoaW5fYXJyYXkoJG9uZXVzZXItPmlkLCAkYWRkdGVkaXRvcnMpKQoJCQkJewoJCQkJCSR0ZXh0IC49ICcgc2VsZWN0ZWQ9InNlbGVjdGVkIic7CgkJCQl9CgkJCQkkdGV4dCAuPSAnPicuJG9uZXVzZXItPnVzZXJuYW1lLic8L29wdGlvbj4nOwoJCQl9CgkJfQoKCQkkdGV4dCAuPSAnPC9zZWxlY3Q+JzsKICAgICAgICAkcmV0W10gPSAkdGV4dDsKCQlyZXR1cm4gJHJldDsKCX0KCglmdW5jdGlvbiBJc0RlZmF1bHRQb3NzaWJsZSgpCgl7CgkJcmV0dXJuIEZBTFNFOwoJfQkKfQoKLyoqCiAqIENsYXNzIHRvIHJlcHJlc2VudCBjb250ZW50IHByb3BlcnRpZXMuICBUaGVzZSBhcmUgcHJldHR5IG11Y2gKICogc2VwYXJhdGUgYmVpbmdzIHRoYXQgZ2V0IHVzZWQgYnkgYSBjb250ZW50IG9iamVjdCBpbnN0YW5jZS4KICoKICogQHNpbmNlCQkwLjgKICogQHBhY2thZ2UJCUNNUwogKi8KY2xhc3MgQmxvY2tDb250ZW50UHJvcGVydGllcwp7Cgl2YXIgJG1Qcm9wZXJ0eU5hbWVzOwoJdmFyICRtUHJvcGVydHlUeXBlczsKCXZhciAkbVByb3BlcnR5VmFsdWVzOwoKCS8qKgoJICogR2VuZXJpYyBjb25zdHJ1Y3Rvci4gUnVucyB0aGUgU2V0SW5pdGlhbFZhbHVlcyBmdWN0aW9uLgoJICovCglmdW5jdGlvbiBCbG9ja0NvbnRlbnRQcm9wZXJ0aWVzKCkKCXsKCQkkdGhpcy0+U2V0SW5pdGlhbFZhbHVlcygpOwoJfQoKCS8qKgoJICogU2V0cyBvYmplY3QgdG8gc29tZSBzYW5lIGluaXRpYWwgdmFsdWVzCgkgKi8KCWZ1bmN0aW9uIFNldEluaXRpYWxWYWx1ZXMoKQoJewoJCSR0aGlzLT5tUHJvcGVydHlOYW1lcyA9IGFycmF5KCk7CgkJJHRoaXMtPm1Qcm9wZXJ0eVR5cGVzID0gYXJyYXkoKTsKCQkkdGhpcy0+bVByb3BlcnR5VmFsdWVzID0gYXJyYXkoKTsKCX0KCglmdW5jdGlvbiBIYXNQcm9wZXJ0eSgkbmFtZSkKCXsKCQkjZGVidWdfYnVmZmVyKCR0aGlzLT5tUHJvcGVydHlOYW1lcyk7CgkJaWYgKCFpc3NldCgkdGhpcy0+bVByb3BlcnR5TmFtZXMpKQoJCQkkdGhpcy0+bVByb3BlcnR5TmFtZXMgPSBhcnJheSgpOwoJCXJldHVybiBpbl9hcnJheSgkbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKTsKCX0KCglmdW5jdGlvbiBBZGQoJHR5cGUsICRuYW1lLCAkZGVmYXVsdHZhbHVlPScnKQoJewoJCS8vSGFuZGxlIG5hbWVzIHNlcGFyYXRlbHkKCQlpZiAoIWluX2FycmF5KCRuYW1lLCAkdGhpcy0+bVByb3BlcnR5TmFtZXMpKQoJCXsKCQkJJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzW10gPSAkbmFtZTsKCQl9CgkJaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkdGhpcy0+bVByb3BlcnR5VmFsdWVzKSkKCQl7CgkJCSR0aGlzLT5tUHJvcGVydHlUeXBlc1skbmFtZV0gPSAkdHlwZTsKCQkJJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlc1skbmFtZV0gPSAkZGVmYXVsdHZhbHVlOwoJCX0KCX0KCglmdW5jdGlvbiBHZXRWYWx1ZSgkbmFtZSkKCXsKCQlpZiAoaW5fYXJyYXkoJG5hbWUsICR0aGlzLT5tUHJvcGVydHlOYW1lcykpCgkJewoJCQlpZiAoY291bnQoJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcykgPiAwKQoJCQl7CgkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcykpCgkJCQl7CgkJCQkJcmV0dXJuICR0aGlzLT5tUHJvcGVydHlWYWx1ZXNbJG5hbWVdOwoJCQkJfQoJCQl9CgkJfQoJfQoKCWZ1bmN0aW9uIFNldFZhbHVlKCRuYW1lLCAkdmFsdWUpCgl7CgkJaWYgKGNvdW50KCR0aGlzLT5tUHJvcGVydHlWYWx1ZXMpID4gMCkKCQl7CgkJCWlmIChpbl9hcnJheSgkbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKSkKCQkJewoJCQkJJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlc1skbmFtZV0gPSAkdmFsdWU7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gTG9hZCgkY29udGVudF9pZCkKCXsKCQlkZWJ1Z19idWZmZXIoJ2xvYWQgcHJvcGVydGllcyBjYWxsZWQnKTsKCQlpZiAoY291bnQoJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKSA+IDApCgkJewoJCQlnbG9iYWwgJGdDbXMsICRjb25maWcsICRzcWxfcXVlcmllcywgJGRlYnVnX2Vycm9yczsKCQkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkJJHF1ZXJ5CQk9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJJGRicmVzdWx0CT0gJiRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRjb250ZW50X2lkKSk7CgoJCQl3aGlsZSAoJGRicmVzdWx0ICYmICEkZGJyZXN1bHQtPkVPRikKCQkJewoJCQkJJHByb3BfbmFtZSA9ICRkYnJlc3VsdC0+ZmllbGRzWydwcm9wX25hbWUnXTsKCQkJCWlmICghaW5fYXJyYXkoJHByb3BfbmFtZSwgJHRoaXMtPm1Qcm9wZXJ0eU5hbWVzKSkKCQkJCXsKCQkJCQkkdGhpcy0+bVByb3BlcnR5TmFtZXNbXSA9ICRwcm9wX25hbWU7CgkJCQl9CgkJCQkkdGhpcy0+bVByb3BlcnR5VHlwZXNbJHByb3BfbmFtZV0gPSAkZGJyZXN1bHQtPmZpZWxkc1sndHlwZSddOwoJCQkJJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlc1skcHJvcF9uYW1lXSA9ICRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50J107CgkJCQkkZGJyZXN1bHQtPk1vdmVOZXh0KCk7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gU2F2ZSgkY29udGVudF9pZCkKCXsKCQlpZiAoY291bnQoJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcykgPiAwKQoJCXsKCQkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CgkJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJICAgICRkZWxxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wcyB3aGVyZSBjb250ZW50X2lkPT8gYW5kIHByb3BfbmFtZT0/IjsKCQkJJGluc3F1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIChjb250ZW50X2lkLCB0eXBlLCBwcm9wX25hbWUsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIGNvbnRlbnQpIFZBTFVFUyAoPyw/LD8sPyw/LD8sPykiOwoJCQkKCQkJJGNvbmNhdCA9ICcnOwoKCQkJZm9yZWFjaCAoJHRoaXMtPm1Qcm9wZXJ0eVZhbHVlcyBhcyAka2V5PT4kdmFsdWUpCgkJCXsKCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkZGVscXVlcnksIGFycmF5KCRjb250ZW50X2lkLCRrZXkpKTsJCQkKCQkJCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSgkaW5zcXVlcnksIGFycmF5KAoJCQkJCSRjb250ZW50X2lkLAoJCQkJCSR0aGlzLT5tUHJvcGVydHlUeXBlc1ska2V5XSwKCQkJCQkka2V5LAoJCQkJCScnLAoJCQkJCScnLAoJCQkJCScnLAoJCQkJCSR0aGlzLT5tUHJvcGVydHlWYWx1ZXNbJGtleV0sCgkJCQkJKSk7CgkJCQkJCgkJCQkkY29uY2F0IC49ICR0aGlzLT5tUHJvcGVydHlWYWx1ZXNbJGtleV07CgoJCQkJIyBkZWJ1ZyBtb2RlCgkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQoJCQkJewoJCQkJCSRzcWxfcXVlcmllcyAuPSAiPHA+JGRlbHF1ZXJ5PC9wPlxuPHA+JGluc3F1ZXJ5PC9wPlxuIjsKCQkJCX0KCgkJCQlpZiAoISAkZGJyZXN1bHQpCgkJCQl7CgkJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCQl7CgkJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQoJCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5FcnJvciB1cGRhdGluZyBjb250ZW50IHByb3BlcnR5PC9wPlxuIjsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJCgkJCWlmICgkY29uY2F0ICE9ICcnKQoJCQl7CgkJCQlkb19ibG9ja19jcm9zc19yZWZlcmVuY2UoJGNvbnRlbnRfaWQsICdjb250ZW50JywgJGNvbmNhdCk7CgkJCX0KCQl9Cgl9CgoJZnVuY3Rpb24gRGVsZXRlKCRjb250ZW50X2lkKQoJewoJCWlmIChjb3VudCgkdGhpcy0+bVByb3BlcnR5VmFsdWVzKSA+IDApCgkJewoJCQlnbG9iYWwgJGdDbXMsICRjb25maWcsICRzcWxfcXVlcmllcywgJGRlYnVnX2Vycm9yczsKCQkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSwgYXJyYXkoJGNvbnRlbnRfaWQpKTsKCQl9Cgl9Cn0KCi8qKgogKiBDbGFzcyBmb3Igc3RhdGljIG1ldGhvZHMgcmVsYXRlZCB0byBjb250ZW50CiAqCiAqIEBzaW5jZQkJMC44CiAqIEBwYWNrYWdlCQlDTVMKICovCmNsYXNzIEJsb2NrQ29udGVudE1hbmFnZXIKewoJLyoqCgkgKiBEZXRlcm1pbmUgcHJvcGVyIHR5cGUgb2Ygb2JqZWN0LCBsb2FkIGl0IGFuZCByZXR1cm4gaXQKCSAqLwoJZnVuY3Rpb24gJkxvYWRDb250ZW50RnJvbUlkKCRpZCwkbG9hZHByb3BzPXRydWUpCgl7CgkJJHJlc3VsdCA9IEZBTFNFOwoKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBjb250ZW50X2lkID0gPyI7CgkJJHJvdyA9ICYkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCRpZCkpOwoJCWlmICgkcm93KQoJCXsKCQkJI01ha2Ugc3VyZSB0aGUgdHlwZSBleGlzdHMuICBJZiBzbywgaW5zdGFudGlhdGUgYW5kIGxvYWQKCQkJaWYgKGluX2FycmF5KCRyb3dbJ3R5cGUnXSwgYXJyYXlfa2V5cyhAQmxvY2tDb250ZW50TWFuYWdlcjo6TGlzdENvbnRlbnRUeXBlcygpKSkpCgkJCXsKCQkJCSRjbGFzc3R5cGUgPSBzdHJ0b2xvd2VyKCRyb3dbJ3R5cGUnXSk7CgkJCQkkY29udGVudG9iaiA9IG5ldyAkY2xhc3N0eXBlOyAKCQkJCSRjb250ZW50b2JqLT5Mb2FkRnJvbURhdGEoJHJvdyxmYWxzZSk7CgoJCQkJcmV0dXJuICRjb250ZW50b2JqOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJcmV0dXJuICRyZXN1bHQ7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoKCWZ1bmN0aW9uICZMb2FkQ29udGVudEZyb21BbGlhcygkYWxpYXMsICRvbmx5X2FjdGl2ZSA9IGZhbHNlKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgoJCSRyb3cgPSAnJzsKCgkJaWYgKGlzX251bWVyaWMoJGFsaWFzKSAmJiBzdHJwb3MoJGFsaWFzLCcuJykgPT09IEZBTFNFICYmIHN0cnBvcygkYWxpYXMsJywnKSA9PT0gRkFMU0UpIC8vRml4IGZvciBwb3N0Z3JlcwoJCXsKCQkJLy8kcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4iY29udGVudCBXSEVSRSBjb250ZW50X2lkID0gPyBPUiBjb250ZW50X2FsaWFzID0gPyI7CgkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkJaWYgKCRvbmx5X2FjdGl2ZSA9PSB0cnVlKQoJCQl7CgkJCQkkcXVlcnkgLj0gIiBBTkQgYWN0aXZlID0gMSI7CgkJCX0KCQkJJHJvdyA9ICYkZGItPkdldFJvdygkcXVlcnksIGFycmF5KCRhbGlhcywkYWxpYXMpKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgY29udGVudF9hbGlhcyA9ID8iOwoJCQlpZiAoJG9ubHlfYWN0aXZlID09IHRydWUpCgkJCXsKCQkJCSRxdWVyeSAuPSAiIEFORCBhY3RpdmUgPSAxIjsKCQkJfQoJCQkkcm93ID0gJiRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJGFsaWFzKSk7CgkJfQoKCQlpZiAoJHJvdykKCQl7CgkJCSNNYWtlIHN1cmUgdGhlIHR5cGUgZXhpc3RzLiAgSWYgc28sIGluc3RhbnRpYXRlIGFuZCBsb2FkCgkJCWlmIChpbl9hcnJheSgkcm93Wyd0eXBlJ10sIGFycmF5X2tleXMoQEJsb2NrQ29udGVudE1hbmFnZXI6Okxpc3RDb250ZW50VHlwZXMoKSkpKQoJCQl7CgkJCQkkY2xhc3N0eXBlID0gc3RydG9sb3dlcigkcm93Wyd0eXBlJ10pOwoJCQkJJGNvbnRlbnRvYmogPSBuZXcgJGNsYXNzdHlwZTsKCQkJCSRjb250ZW50b2JqLT5Mb2FkRnJvbURhdGEoJHJvdyx0cnVlKTsKCQkJCXJldHVybiAkY29udGVudG9iajsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCXJldHVybiBGQUxTRTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gRkFMU0U7CgkJfQoJfQoKICAvKioKCSAqIExvYWQgdGhlIGNvbnRlbnQgb2YgdGhlIG9iamVjdCBmcm9tIGEgbGlzdCBvZiBJRAoJICogUHJpdmF0ZSBtZXRob2QuCgkgKiBAcGFyYW0gJGlkcwlhcnJheSBvZiBlbGVtZW50IGlkcwoJICogQHBhcmFtICRsb2FkUHJvcGVydGllcwl3aGV0aGVyIHRvIGxvYWQgb3Igbm90IHRoZSBwcm9wZXJ0aWVzCgkgKgoJICogQHJldHVybnMgYXJyYXkgb2YgY29udGVudCBvYmplY3RzIChlbXB0eSBpZiBub3QgZm91bmQpCgkgKi8KCS8qcHJpdmF0ZSovIGZ1bmN0aW9uICZMb2FkTXVsdGlwbGVGcm9tSWQoJGlkcywgJGxvYWRQcm9wZXJ0aWVzID0gZmFsc2UpCgl7CgkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CiAgICAkY3B0ID0gY291bnQoJGlkcyk7CiAgICAkY29udGVudHM9YXJyYXkoKTsKCQlpZiAoJGNwdD09MCkgcmV0dXJuICRjb250ZW50czsKICAgICRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKICAgICRpZF9saXN0ID0gJygnOwogICAgZm9yICgkaT0wOyRpPCRjcHQ7JGkrKykgewogICAgICAkaWRfbGlzdCAuPSAkaWRzWyRpXTsKICAgICAgaWYgKCRpPCRjcHQtMSkgJGlkX2xpc3QgLj0gJywnOwogICAgfQogICAgJGlkX2xpc3QgLj0gJyknOwogICAgaWYgKCRpZF9saXN0PT0nKCknKSByZXR1cm4gJGNvbnRlbnRzOwoKCQkkcmVzdWx0ID0gZmFsc2U7CgkJJHF1ZXJ5CQk9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgSU4gJGlkX2xpc3QiOwoJCSRyb3dzCQk9JiAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKCgkJaWYgKCRyb3dzKQoJCXsKCQkJd2hpbGUgKGlzc2V0KCRyb3dzKSAmJiAkcm93ID0gJiRyb3dzLT5GZXRjaFJvdygpKQoJCQl7CgkJCSAgaWYgKGluX2FycmF5KCRyb3dbJ3R5cGUnXSwgYXJyYXlfa2V5cyhAQmxvY2tDb250ZW50TWFuYWdlcjo6TGlzdENvbnRlbnRUeXBlcygpKSkpIHsKCQkJCQkkY2xhc3N0eXBlID0gc3RydG9sb3dlcigkcm93Wyd0eXBlJ10pOwoJCQkJCSRjb250ZW50b2JqID0gbmV3ICRjbGFzc3R5cGU7IAoJCQkJCSRjb250ZW50b2JqLT5Mb2FkRnJvbURhdGEoJHJvdyxmYWxzZSk7CgkJCQkJJGNvbnRlbnRzW109JGNvbnRlbnRvYmo7CgkJCQkJJHJlc3VsdCA9IHRydWU7CgkJCQl9CgkJCX0KCQl9CgkJCWlmICghJHJlc3VsdCkKCQkJewoJCQkJaWYgKHRydWUgPT0gJGNvbmZpZ1siZGVidWciXSkKCQkJCXsKCQkJCQkjIDpUT0RPOiBUcmFuc2xhdGUgdGhlIGVycm9yIG1lc3NhZ2UKCQkJCQkkZGVidWdfZXJyb3JzIC49ICI8cD5Db3VsZCBub3QgcmV0cmlldmUgY29udGVudCBmcm9tIGRiPC9wPlxuIjsKCQkJCX0KCQkJfQoKCQkJaWYgKCRyZXN1bHQgJiYgJGxvYWRQcm9wZXJ0aWVzKQoJCQl7CgkJCQlmb3JlYWNoICgkY29udGVudHMgYXMgJGNvbnRlbnQpIHsKCQkJCSAgaWYgKCRjb250ZW50LT5tUHJvcGVydGllc0xvYWRlZCA9PSBmYWxzZSkKICAJCQkJewogIAkJCQkJZGVidWdfYnVmZmVyKCJsb2FkIGZyb20gaWQgaXMgbG9hZGluZyBwcm9wZXJ0aWVzIik7CiAgCQkJCQkkY29udGVudC0+bVByb3BlcnRpZXMtPkxvYWQoJGNvbnRlbnQtPm1JZCk7CiAgCQkJCQkkY29udGVudC0+bVByb3BlcnRpZXNMb2FkZWQgPSB0cnVlOwogIAkJCQl9CiAgCiAgCQkJCWlmIChOVUxMID09ICRjb250ZW50LT5tUHJvcGVydGllcykKICAJCQkJewogIAkJCQkJJHJlc3VsdCA9IGZhbHNlOwogIAogIAkJCQkJIyBkZWJ1ZyBtb2RlCiAgCQkJCQlpZiAodHJ1ZSA9PSAkY29uZmlnWyJkZWJ1ZyJdKQogIAkJCQkJewogIAkJCQkJCSMgOlRPRE86IFRyYW5zbGF0ZSB0aGUgZXJyb3IgbWVzc2FnZQogIAkJCQkJCSRkZWJ1Z19lcnJvcnMgLj0gIjxwPkNvdWxkIG5vdCBsb2FkIHByb3BlcnRpZXMgZm9yIGNvbnRlbnQ8L3A+XG4iOwogIAkJCQkJfQogIAkJCQl9CgkJCQl9CgkJCX0KICAgIAogICAgZm9yZWFjaCAoJGNvbnRlbnRzIGFzICRjb250ZW50KSB7CiAgICAgCQkkY29udGVudC0+TG9hZCgpOwogICAgfQoKCQlyZXR1cm4gJGNvbnRlbnRzOwoJfQoJCgkvKioKCSAqIExvYWQgdGhlIGNvbnRlbnQgb2YgdGhlIG9iamVjdCBmcm9tIGEgbGlzdCBvZiBhbGlhc2VzCgkgKiBQcml2YXRlIG1ldGhvZC4KCSAqIEBwYXJhbSAkaWRzCWFycmF5IG9mIGVsZW1lbnQgaWRzCgkgKiBQcml2YXRlIG1ldGhvZAoJICoKCSAqIEBwYXJhbSAkYWxpcwkJCQl0aGUgYWxpYXMgb2YgdGhlIGVsZW1lbnQKCSAqIEBwYXJhbSAkbG9hZFByb3BlcnRpZXMJd2hldGhlciB0byBsb2FkIG9yIG5vdCB0aGUgcHJvcGVydGllcwoJICoKCSAqIEByZXR1cm5zIGFycmF5IG9mIGNvbnRlbnQgb2JqZWN0cyAoZW1wdHkgaWYgbm90IGZvdW5kKQoJICovCgkvKnByaXZhdGUqL2Z1bmN0aW9uICZMb2FkTXVsdGlwbGVGcm9tQWxpYXMoJGlkcywgJGxvYWRQcm9wZXJ0aWVzID0gZmFsc2UpCgl7CgkJZ2xvYmFsICRnQ21zLCAkY29uZmlnLCAkc3FsX3F1ZXJpZXMsICRkZWJ1Z19lcnJvcnM7CiAgICAkY3B0ID0gY291bnQoJGlkcyk7CiAgICAkY29udGVudHM9YXJyYXkoKTsKCQlpZiAoJGNwdD09MCkgcmV0dXJuICRjb250ZW50czsKICAgICRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKICAgICRpZF9saXN0ID0gJygnOwogICAgZm9yICgkaT0wOyRpPCRjcHQ7JGkrKykgewogICAgICAkaWRfbGlzdCAuPSAiJyIuJGlkc1skaV0uIiciOwogICAgICBpZiAoJGk8JGNwdC0xKSAkaWRfbGlzdCAuPSAnLCc7CiAgICB9CiAgICAkaWRfbGlzdCAuPSAnKSc7CiAgICBpZiAoJGlkX2xpc3Q9PScoKScpIHJldHVybiAkY29udGVudHM7CgkJJHJlc3VsdCA9IGZhbHNlOwoJCSRxdWVyeQkJPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBjb250ZW50X2FsaWFzIElOICRpZF9saXN0IjsKCQkkcm93cwkJPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgoJCQl3aGlsZSAoaXNzZXQoJHJvd3MpICYmICRyb3c9JiRyb3dzLT5GZXRjaFJvdygpKQoJCQl7CgkJCQkjTWFrZSBzdXJlIHRoZSB0eXBlIGV4aXN0cy4gIElmIHNvLCBpbnN0YW50aWF0ZSBhbmQgbG9hZAoJCQkgIGlmIChpbl9hcnJheSgkcm93Wyd0eXBlJ10sIGFycmF5X2tleXMoQEJsb2NrQ29udGVudE1hbmFnZXI6Okxpc3RDb250ZW50VHlwZXMoKSkpKSB7CiAgCQkJCSRjbGFzc3R5cGUgPSBzdHJ0b2xvd2VyKCRyb3dbJ3R5cGUnXSk7CiAgCQkJCSRjb250ZW50b2JqID0gbmV3ICRjbGFzc3R5cGU7IAogIAkJCQkkY29udGVudG9iai0+TG9hZEZyb21EYXRhKCRyb3csZmFsc2UpOwogICAgICAgICAgJGNvbnRlbnRzW109JGNvbnRlbnRvYmo7CiAgCQkJCSRyZXN1bHQgPSB0cnVlOwogICAgICAgIH0KCQkJfQoJCQlpZiAoISRyZXN1bHQpCgkJCXsKCQkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCgkJCQl7CgkJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCgkJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+Q291bGQgbm90IHJldHJpZXZlIGNvbnRlbnQgZnJvbSBkYjwvcD5cbiI7CgkJCQl9CgkJCX0KCgkJCWlmICgkcmVzdWx0ICYmICRsb2FkUHJvcGVydGllcykKCQkJewoJCQkJZm9yZWFjaCAoJGNvbnRlbnRzIGFzICRjb250ZW50KSB7CiAgICAgICAgICBpZiAoJGNvbnRlbnQtPm1Qcm9wZXJ0aWVzTG9hZGVkID09IGZhbHNlKQogIAkJCQl7CiAgCQkJCQlkZWJ1Z19idWZmZXIoImxvYWQgZnJvbSBpZCBpcyBsb2FkaW5nIHByb3BlcnRpZXMiKTsKICAJCQkJCSRjb250ZW50LT5tUHJvcGVydGllcy0+TG9hZCgkY29udGVudC0+bUlkKTsKICAJCQkJCSRjb250ZW50LT5tUHJvcGVydGllc0xvYWRlZCA9IHRydWU7CiAgCQkJCX0KICAKICAJCQkJaWYgKE5VTEwgPT0gJGNvbnRlbnQtPm1Qcm9wZXJ0aWVzKQogIAkJCQl7CiAgCQkJCQkkcmVzdWx0ID0gZmFsc2U7CiAgCiAgCQkJCQkjIGRlYnVnIG1vZGUKICAJCQkJCWlmICh0cnVlID09ICRjb25maWdbImRlYnVnIl0pCiAgCQkJCQl7CiAgCQkJCQkJIyA6VE9ETzogVHJhbnNsYXRlIHRoZSBlcnJvciBtZXNzYWdlCiAgCQkJCQkJJGRlYnVnX2Vycm9ycyAuPSAiPHA+Q291bGQgbm90IGxvYWQgcHJvcGVydGllcyBmb3IgY29udGVudDwvcD5cbiI7CiAgCQkJCQl9CiAgCQkJCX0KCQkJCX0KCQkJfQogICAgCiAgICBmb3JlYWNoICgkY29udGVudHMgYXMgJGNvbnRlbnQpIHsKICAgICAJCSRjb250ZW50LT5Mb2FkKCk7CiAgICB9CgoJCXJldHVybiAkY29udGVudHM7Cgl9CgoKCS8qKgoJICogRGlzcGxheSBjb250ZW50CgkgKi8KCWZ1bmN0aW9uIERpc3BsYXlDb250ZW50KCRjb250ZW50KQoJewoJCS8vVGhpcyBzaG91bGQgYmUgc3RyYWlnaHQgZm9yd2FyZCwgc2luY2UgdGhlIGNvbnRlbnQgd2lsbCBwcmV0dHkgbXVjaCBkZXRlcm1pbmUgaG93IGl0IGlzIGRpc3BsYXllZAoJCSRjb250ZW50LT5TaG93KCk7Cgl9CgoJLyoqCgkgKiBEZXRlcm1pbmUgaWYgY29udGVudCBzaG91bGQgYmUgbG9hZGVkIGZyb20gY2FjaGUKCSAqLwoJZnVuY3Rpb24gSXNDYWNoZWQoJGlkKQoJewoJfQoKCWZ1bmN0aW9uICYgR2V0RGVmYXVsdENvbnRlbnQoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSYgJGdDbXMtPkdldERiKCk7CgoJCSRyZXN1bHQgPSAtMTsKCgkJJHF1ZXJ5ID0gIlNFTEVDVCBjb250ZW50X2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgZGVmYXVsdF9jb250ZW50ID0gMSI7CgkJJHJvdyA9ICYkZGItPkdldFJvdygkcXVlcnkpOwoJCWlmICgkcm93KQoJCXsKCQkJJHJlc3VsdCA9ICRyb3dbJ2NvbnRlbnRfaWQnXTsKCQl9CgkJZWxzZQoJCXsKCQkJI0p1c3QgZ2V0IHNvbWV0aGluZy4uLgoJCQkkcXVlcnkgPSAiU0VMRUNUIGNvbnRlbnRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCI7CgkJCSRyb3cgPSAmJGRiLT5HZXRSb3coJHF1ZXJ5KTsKCQkJaWYgKCRyb3cpCgkJCXsKCQkJCSRyZXN1bHQgPSAkcm93Wydjb250ZW50X2lkJ107CgkJCX0KCQl9CgoJCXJldHVybiAkcmVzdWx0OwoKCQkvKgoJCSNDaGFuY2VzIGFyZSB0aGF0IHRoaXMgaXMgY2FjaGVkIGFscmVhZHkKCQkkYWxsY29udGVudCA9IEBDb250ZW50TWFuYWdlcjo6R2V0QWxsQ29udGVudCgpOwoKCQlmb3JlYWNoICgkYWxsY29udGVudCBhcyAkb25laXRlbSkKCQl7CgkJCWlmICgkb25laXRlbS0+RGVmYXVsdENvbnRlbnQoKSA9PSB0cnVlKQoJCQl7CgkJCQlyZXR1cm4gJG9uZWl0ZW0tPklkKCk7CgkJCX0KCQl9CgoJCSNKdXN0IGdldCBzb21ldGhpbmcuLi4uCgkJcmV0dXJuICRhbGxjb250ZW50WzBdLT5JZCgpOwoJCSovCgl9CgoJLyoqCgkgKiBSZXR1cm5zIGEgaGFzaCBvZiB2YWxpZCBjb250ZW50IHR5cGVzIChjbGFzc2VzIHRoYXQgZXh0ZW5kIENvbnRlbnRCYXNlKQoJICogVGhlIGtleSBpcyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgdGhhdCB3b3VsZCBiZSBzYXZlZCBpbnRvIHRoZSBkYWJhc2UuICBUaGUKCSAqIHZhbHVlIHdvdWxkIGJlIHRoZSB0ZXh0IHJldHVybmVkIGJ5IHRoZSB0eXBlJ3MgRnJpZW5kbHlOYW1lKCkgbWV0aG9kLgoJICovCglmdW5jdGlvbiAmIExpc3RDb250ZW50VHlwZXMoKQoJewoJCWdsb2JhbCAkZ0NtczsKCgkJaWYgKGlzc2V0KCRnQ21zLT52YXJpYWJsZXNbJ2Jsb2NrY29udGVudHR5cGVzJ10pKQoJCXsKCQkJJHZhcmlhYmxlcyA9JiAkZ0Ntcy0+dmFyaWFibGVzOwoJCQlyZXR1cm4gJHZhcmlhYmxlc1snYmxvY2tjb250ZW50dHlwZXMnXTsKCQl9CgoJCSRyZXN1bHQgPSBhcnJheSgpOwoKCQlmb3JlYWNoIChnZXRfZGVjbGFyZWRfY2xhc3NlcygpIGFzICRvbmVjbGFzcykKCQl7CgkJCWlmIChzdHJ0b2xvd2VyKGdldF9wYXJlbnRfY2xhc3MoJG9uZWNsYXNzKSkgPT0gJ2Jsb2NrY29udGVudGJhc2UnIHx8IHN0cnRvbG93ZXIoZ2V0X3BhcmVudF9jbGFzcygkb25lY2xhc3MpKSA9PSAnY21zbW9kdWxlYmxvY2tjb250ZW50dHlwZScpCgkJCXsKCQkJCWlmIChzdHJ0b2xvd2VyKCRvbmVjbGFzcykgIT0gJ2Ntc21vZHVsZWJsb2NrY29udGVudHR5cGUnKQoJCQkJewoJCQkJCSNhcnJheV9wdXNoKCRyZXN1bHQsIHN0cnRvbG93ZXIoJG9uZWNsYXNzKSk7CgkJCQkJJHRtcG9iaiA9IG5ldyAkb25lY2xhc3M7CgkJCQkJJHJlc3VsdFtzdHJ0b2xvd2VyKCRvbmVjbGFzcyldID0gJHRtcG9iai0+RnJpZW5kbHlOYW1lKCk7CgkJCQl9CgkJCX0KCQl9CgoJCSR2YXJpYWJsZXMgPSYgJGdDbXMtPnZhcmlhYmxlczsKCQkkdmFyaWFibGVzWydibG9ja2NvbnRlbnR0eXBlcyddID0mICRyZXN1bHQ7CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCS8qKgoJICogVXBkYXRlcyB0aGUgaGllcmFyY2h5IHBvc2l0aW9uIG9mIG9uZSBpdGVtCgkgKi8KCWZ1bmN0aW9uIFNldEhpZXJhcmNoeVBvc2l0aW9uKCRjb250ZW50aWQpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9JiAkZ0Ntcy0+R2V0RGIoKTsKCgkJJGN1cnJlbnRfaGllcmFyY2h5X3Bvc2l0aW9uID0gJyc7CgkJJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uID0gJyc7CgkJJGN1cnJlbnRfaGllcmFyY2h5X3BhdGggPSAnJzsKCQkkY3VycmVudF9wYXJlbnRfaWQgPSAkY29udGVudGlkOwoJCSRjb3VudCA9IDA7CgoJCXdoaWxlICgkY3VycmVudF9wYXJlbnRfaWQgPiAtMSkKCQl7CgkJCSRxdWVyeSA9ICJTRUxFQ1QgaXRlbV9vcmRlciwgcGFyZW50X2lkLCBjb250ZW50X2FsaWFzIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCQkkcm93ID0gJiRkYi0+R2V0Um93KCRxdWVyeSwgYXJyYXkoJGN1cnJlbnRfcGFyZW50X2lkKSk7CgkJCWlmICgkcm93KQoJCQl7CgkJCQkkY3VycmVudF9oaWVyYXJjaHlfcG9zaXRpb24gPSBzdHJfcGFkKCRyb3dbJ2l0ZW1fb3JkZXInXSwgNSwgJzAnLCBTVFJfUEFEX0xFRlQpIC4gIi4iIC4gJGN1cnJlbnRfaGllcmFyY2h5X3Bvc2l0aW9uOwoJCQkJJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uID0gJGN1cnJlbnRfcGFyZW50X2lkIC4gJy4nIC4gJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uOwoJCQkJJGN1cnJlbnRfaGllcmFyY2h5X3BhdGggPSAkcm93Wydjb250ZW50X2FsaWFzJ10gLiAnLycgLiAkY3VycmVudF9oaWVyYXJjaHlfcGF0aDsKCQkJCSRjdXJyZW50X3BhcmVudF9pZCA9ICRyb3dbJ3BhcmVudF9pZCddOwoJCQkJJGNvdW50Kys7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkkY3VycmVudF9wYXJlbnRfaWQgPSAwOwoJCQl9CgkJfQoKCQlpZiAoc3RybGVuKCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbikgPiAwKQoJCXsKCQkJJGN1cnJlbnRfaGllcmFyY2h5X3Bvc2l0aW9uID0gc3Vic3RyKCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbiwgMCwgc3RybGVuKCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbikgLSAxKTsKCQl9CgkJaWYgKHN0cmxlbigkY3VycmVudF9pZF9oaWVyYXJjaHlfcG9zaXRpb24pID4gMCkKCQl7CgkJCSRjdXJyZW50X2lkX2hpZXJhcmNoeV9wb3NpdGlvbiA9IHN1YnN0cigkY3VycmVudF9pZF9oaWVyYXJjaHlfcG9zaXRpb24sIDAsIHN0cmxlbigkY3VycmVudF9pZF9oaWVyYXJjaHlfcG9zaXRpb24pIC0gMSk7CgkJfQoJCWlmIChzdHJsZW4oJGN1cnJlbnRfaGllcmFyY2h5X3BhdGgpID4gMCkKCQl7CgkJCSRjdXJyZW50X2hpZXJhcmNoeV9wYXRoID0gc3Vic3RyKCRjdXJyZW50X2hpZXJhcmNoeV9wYXRoLCAwLCBzdHJsZW4oJGN1cnJlbnRfaGllcmFyY2h5X3BhdGgpIC0gMSk7CgkJfQoKCQkkcXVlcnkgPSAiU0VMRUNUIHByb3BfbmFtZSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkkcHJvcF9uYW1lX2FycmF5ID0gJGRiLT5HZXRDb2woJHF1ZXJ5LCBhcnJheSgkY29udGVudGlkKSk7CgoJCWRlYnVnX2J1ZmZlcihhcnJheSgkY3VycmVudF9oaWVyYXJjaHlfcG9zaXRpb24sICRjdXJyZW50X2lkX2hpZXJhcmNoeV9wb3NpdGlvbiwgaW1wbG9kZSgnLCcsICRwcm9wX25hbWVfYXJyYXkpLCAkY29udGVudGlkKSk7CgoJCSRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgU0VUIGhpZXJhcmNoeSA9ID8sIGlkX2hpZXJhcmNoeSA9ID8sIGhpZXJhcmNoeV9wYXRoID0gPywgcHJvcF9uYW1lcyA9ID8gV0hFUkUgY29udGVudF9pZCA9ID8iOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksIGFycmF5KCRjdXJyZW50X2hpZXJhcmNoeV9wb3NpdGlvbiwgJGN1cnJlbnRfaWRfaGllcmFyY2h5X3Bvc2l0aW9uLCAkY3VycmVudF9oaWVyYXJjaHlfcGF0aCwgaW1wbG9kZSgnLCcsICRwcm9wX25hbWVfYXJyYXkpLCAkY29udGVudGlkKSk7Cgl9CgoJLyoqCgkgKiBVcGRhdGVzIHRoZSBoaWVyYXJjaHkgcG9zaXRpb24gb2YgYWxsIGl0ZW1zCgkgKi8KCWZ1bmN0aW9uIFNldEFsbEhpZXJhcmNoeVBvc2l0aW9ucygpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9ICRnQ21zLT5HZXREYigpOwoKCQkkcXVlcnkgPSAiU0VMRUNUIGNvbnRlbnRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCI7CgkJJGRicmVzdWx0ID0gJiRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKCQl3aGlsZSAoJGRicmVzdWx0ICYmICEkZGJyZXN1bHQtPkVPRikKCQl7CgkJCUJsb2NrQ29udGVudE1hbmFnZXI6OlNldEhpZXJhcmNoeVBvc2l0aW9uKCRkYnJlc3VsdC0+ZmllbGRzWydjb250ZW50X2lkJ10pOwoJCQkkZGJyZXN1bHQtPk1vdmVOZXh0KCk7CgkJfQoJfQoJCglmdW5jdGlvbiAmR2V0QWxsQ29udGVudEFzSGllcmFyY2h5KCRsb2FkcHJvcHMsICRvbmx5ZXhwYW5kZWQ9bnVsbCkKCXsKCQlkZWJ1Z19idWZmZXIoJycsICdzdGFydGluZyB0cmVlJyk7CgkJCgkJcmVxdWlyZV9vbmNlKGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpLicvLi4vVHJlZS9CbG9ja1RyZWUucGhwJyk7CgkJCgkJJG5vZGVzID0gYXJyYXkoKTsKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoJCQoJCSRjYWNoZWZpbGVuYW1lID0gVE1QX0NBQ0hFX0xPQ0FUSU9OIC4gJy9ibG9ja2NvbnRlbnRjYWNoZS5waHAnOwoJCSR1c2VjYWNoZSA9IHRydWU7CgkJaWYgKGlzc2V0KCRvbmx5ZXhwYW5kZWQpIHx8IGlzc2V0KCRDTVNfQURNSU5fUEFHRSkpCgkJewoJCQkjJHVzZWNhY2hlID0gZmFsc2U7CgkJfQoJCQoJCSRsb2FkZWRjYWNoZSA9IGZhbHNlOwoKCQlpZiAoJHVzZWNhY2hlKQoJCXsKCQkJaWYgKGlzc2V0KCRnQ21zLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ10pICYmIGZpbGVfZXhpc3RzKCRjYWNoZWZpbGVuYW1lKSkKCQkJewoJCQkJJHBhZ2VpbmZvID0mICRnQ21zLT52YXJpYWJsZXNbJ3BhZ2VpbmZvJ107CgkJCQlkZWJ1Z19idWZmZXIoJ2NvbnRlbnQgY2FjaGUgZmlsZSBleGlzdHMuLi4gZmlsZTogJyAuIGZpbGVtdGltZSgkY2FjaGVmaWxlbmFtZSkgLiAnIGNvbnRlbnQ6JyAuICRwYWdlaW5mby0+Y29udGVudF9sYXN0X21vZGlmaWVkX2RhdGUpOwoJCQkJaWYgKGlzc2V0KCRwYWdlaW5mby0+Y29udGVudF9sYXN0X21vZGlmaWVkX2RhdGUpICYmICRwYWdlaW5mby0+Y29udGVudF9sYXN0X21vZGlmaWVkX2RhdGUgPCBmaWxlbXRpbWUoJGNhY2hlZmlsZW5hbWUpKQoJCQkJewoJCQkJCWRlYnVnX2J1ZmZlcignZmlsZSBuZWVkcyBsb2FkaW5nJyk7CgoJCQkJCSRoYW5kbGUgPSBmb3BlbigkY2FjaGVmaWxlbmFtZSwgInIiKTsKCQkJCQkkZGF0YSA9IGZyZWFkKCRoYW5kbGUsIGZpbGVzaXplKCRjYWNoZWZpbGVuYW1lKSk7CgkJCQkJZmNsb3NlKCRoYW5kbGUpOwoKCQkJCQkkdHJlZSA9IHVuc2VyaWFsaXplKHN1YnN0cigkZGF0YSwgMTYpKTsKCgkJCQkJIyR2YXJpYWJsZXMgPSYgJGdDbXMtPnZhcmlhYmxlczsKCQkJCQkjJHZhcmlhYmxlc1snY29udGVudGNhY2hlJ10gPSYgJHRyZWU7CgkJCQkJaWYgKHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCR0cmVlKSkgPT0gJ3RyZWUnKQoJCQkJCQkkbG9hZGVkY2FjaGUgPSB0cnVlOwoJCQkJCWVsc2UKCQkJCQkJJGxvYWRlZGNhY2hlID0gZmFsc2U7CgkJCQl9CgkJCX0KCQl9CgoJCWlmICghJGxvYWRlZGNhY2hlKQoJCXsKCQkJJHF1ZXJ5ID0gIlNFTEVDVCBpZF9oaWVyYXJjaHkgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBPUkRFUiBCWSBoaWVyYXJjaHkiOwoJCQkkZGJyZXN1bHQgPSYgJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkJCgkJCWlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKCQkJewoJCQkJd2hpbGUgKCRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkpCgkJCQl7CgkJCQkJJG5vZGVzW10gPSAkcm93WydpZF9oaWVyYXJjaHknXTsKCQkJCX0KCQkJfQoKCQkJJHRyZWUgPSAmbmV3IEJsb2NrVHJlZSgpOwoJCQlkZWJ1Z19idWZmZXIoJycsICdTdGFydCBMb2FkaW5nIENoaWxkcmVuIGludG8gVHJlZScpOwoJCQkkdHJlZSA9ICZCbG9ja1RyZWU6OmNyZWF0ZUZyb21MaXN0KCRub2RlcywgJy4nKTsKCQkJZGVidWdfYnVmZmVyKCcnLCAnRW5kIExvYWRpbmcgQ2hpbGRyZW4gaW50byBUcmVlJyk7CgkJfQoKCQlpZiAoISRsb2FkZWRjYWNoZSAmJiAkdXNlY2FjaGUpCgkJewoJCQlkZWJ1Z19idWZmZXIoIlNlcmlhbGl6aW5nLi4uIik7CgkJCSRoYW5kbGUgPSBmb3BlbigkY2FjaGVmaWxlbmFtZSwgInciKTsKCQkJZndyaXRlKCRoYW5kbGUsICc8P3BocCByZXR1cm47ID8+Jy5zZXJpYWxpemUoJHRyZWUpKTsKCQkJZmNsb3NlKCRoYW5kbGUpOwoJCX0KCQkKCQlCbG9ja0NvbnRlbnRNYW5hZ2VyOjpMb2FkQ2hpbGRyZW5JbnRvVHJlZSgtMSwgJHRyZWUpOwoJCQoJCWRlYnVnX2J1ZmZlcignJywgJ2VuZGluZyB0cmVlJyk7CgkJCgkJcmV0dXJuICR0cmVlOwoJfQoJCglmdW5jdGlvbiBMb2FkQ2hpbGRyZW5JbnRvVHJlZSgkaWQsICYkdHJlZSwgJGxvYWRwcm9wcyA9IGZhbHNlKQoJewkKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQkkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBwYXJlbnRfaWQgPSAiLiRpZC4iIE9SREVSIEJZIGhpZXJhcmNoeSI7CgkJJGRicmVzdWx0ID0mICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoJCQoJCWlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpID4gMCkKCQl7CgkJCXdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKQoJCQl7CgkJCQkjTWFrZSBzdXJlIHRoZSB0eXBlIGV4aXN0cy4gIElmIHNvLCBpbnN0YW50aWF0ZSBhbmQgbG9hZAoJCQkJaWYgKGluX2FycmF5KCRyb3dbJ3R5cGUnXSwgYXJyYXlfa2V5cyhAQmxvY2tDb250ZW50TWFuYWdlcjo6TGlzdENvbnRlbnRUeXBlcygpKSkpCgkJCQl7CgkJCQkJJGNvbnRlbnRvYmogPSAmbmV3ICRyb3dbJ3R5cGUnXTsKCQkJCQkkY29udGVudG9iai0+TG9hZEZyb21EYXRhKCRyb3csICRsb2FkcHJvcHMpOwoJCQkJCSRjb250ZW50Y2FjaGUgPSYgJHRyZWUtPmNvbnRlbnQ7CgkJCQkJJGlkID0gJHJvd1snY29udGVudF9pZCddOwoJCQkJCSRjb250ZW50Y2FjaGVbJGlkXSA9JiAkY29udGVudG9iajsKCQkJCX0KCQkJfQoJCX0KCX0KCgkvKioKCSAqICBTZXRzIHRoZSBkZWZhdWx0IGNvbnRlbnQgYXMgaWQKCSAqLyAgIAoJZnVuY3Rpb24gU2V0RGVmYXVsdENvbnRlbnQoJGlkKSB7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCQkkcXVlcnkgPSAiU0VMRUNUIGNvbnRlbnRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBXSEVSRSBkZWZhdWx0X2NvbnRlbnQ9MSI7CgkJJG9sZF9pZCA9ICRkYi0+R2V0T25lKCRxdWVyeSk7CgkJaWYgKGlzc2V0KCRvbGRfaWQpKSB7CgkJCSRvbmUgPSBuZXcgQ29udGVudCgpOwoJCQkkb25lLT5Mb2FkRnJvbUlkKCRvbGRfaWQpOwoJCQkkb25lLT5TZXREZWZhdWx0Q29udGVudChmYWxzZSk7CgkJCWRlYnVnX2J1ZmZlcignc2F2ZSBmcm9tICcgLiBfX0xJTkVfXyk7CgkJCSRvbmUtPlNhdmUoKTsKCQl9CgkJJG9uZSA9IG5ldyBDb250ZW50KCk7CgkJJG9uZS0+TG9hZEZyb21JZCgkaWQpOwoJCSRvbmUtPlNldERlZmF1bHRDb250ZW50KHRydWUpOwoJCWRlYnVnX2J1ZmZlcignc2F2ZSBmcm9tICcgLiBfX0xJTkVfXyk7CgkJJG9uZS0+U2F2ZSgpOwoJfQoKCWZ1bmN0aW9uICZHZXRBbGxDb250ZW50KCRsb2FkcHJvcHM9dHJ1ZSkKCXsKCQlkZWJ1Z19idWZmZXIoJ2dldCBhbGwgY29udGVudC4uLicpOwoKCQlnbG9iYWwgJGdDbXM7CgoJCSRjb250ZW50Y2FjaGUgPSBhcnJheSgpOwoKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgT1JERVIgQlkgaGllcmFyY2h5IjsKCQkkZGJyZXN1bHQgPSAmJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgoJCSRtYXAgPSBhcnJheSgpOwoJCSRjb3VudCA9IDA7CgoJCXdoaWxlICgkZGJyZXN1bHQgJiYgISRkYnJlc3VsdC0+RU9GKQoJCXsKCQkJI01ha2Ugc3VyZSB0aGUgdHlwZSBleGlzdHMuICBJZiBzbywgaW5zdGFudGlhdGUgYW5kIGxvYWQKCQkJaWYgKGluX2FycmF5KCRkYnJlc3VsdC0+ZmllbGRzWyd0eXBlJ10sIGFycmF5X2tleXMoQEJsb2NrQ29udGVudE1hbmFnZXI6Okxpc3RDb250ZW50VHlwZXMoKSkpKQoJCQl7CgkJCQkkY29udGVudG9iaiA9IG5ldyAkZGJyZXN1bHQtPmZpZWxkc1sndHlwZSddOwoJCQkJJGNvbnRlbnRvYmotPkxvYWRGcm9tRGF0YSgkZGJyZXN1bHQtPkZldGNoUm93KCksIGZhbHNlKTsKCQkJCSRtYXBbJGNvbnRlbnRvYmotPklkKCldID0gJGNvdW50OwoJCQkJJGNvbnRlbnRjYWNoZVtdID0gJGNvbnRlbnRvYmo7CgkJCQkkY291bnQrKzsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCSRkYnJlc3VsdC0+TW92ZU5leHQoKTsKCQkJfQoJCX0KCgkJZm9yICgkaT0wOyRpPCRjb3VudDskaSsrKQoJCXsKCQkJaWYgKCRjb250ZW50Y2FjaGVbJGldLT5QYXJlbnRJZCgpICE9IC0xICYmIGlzc2V0KCRtYXBbJGNvbnRlbnRjYWNoZVskaV0tPlBhcmVudElkKCldKSkKCQkJewoJCQkgICRjb250ZW50Y2FjaGVbJG1hcFskY29udGVudGNhY2hlWyRpXS0+UGFyZW50SWQoKV1dLT5tQ2hpbGRDb3VudCsrOwoJCQl9CgkJfQoKCQlyZXR1cm4gJGNvbnRlbnRjYWNoZTsKCX0KCglmdW5jdGlvbiBDcmVhdGVIaWVyYXJjaHlEcm9wZG93bigkY3VycmVudCA9ICcnLCAkcGFyZW50ID0gJycsICRuYW1lID0gJ3BhcmVudF9pZCcsICRwYXJlbnRfcGFnZV9pZCkKCXsKCQkkcmVzdWx0ID0gJyc7CgoJCSRhbGxjb250ZW50ID0gQmxvY2tDb250ZW50TWFuYWdlcjo6R2V0QWxsQ29udGVudCgpOwoKCQlpZiAoJGFsbGNvbnRlbnQgIT09IEZBTFNFICYmIGNvdW50KCRhbGxjb250ZW50KSA+IDApCgkJewoJCQkkcmVzdWx0IC49ICc8c2VsZWN0IG5hbWU9IicuJG5hbWUuJyI+JzsKCQkJJHJlc3VsdCAuPSAnPG9wdGlvbiB2YWx1ZT0iLTEiPk5vbmU8L29wdGlvbj4nOwoKCQkJJGN1cmhpZXJhcmNoeSA9ICcnOwoKCQkJZm9yZWFjaCAoJGFsbGNvbnRlbnQgYXMgJG9uZSkKCQkJewoJCQkJaWYgKCRvbmUtPklkKCkgPT0gJGN1cnJlbnQpCgkJCQl7CiNHcmFiIGhpZXJhcmNoeSBqdXN0IGluIGNhc2Ugd2UgbmVlZCB0byBjaGVjayBjaGlsZHJlbgojKHdoaWNoIHdpbGwgYWx3YXlzIGJlIGFmdGVyKQoJCQkJCSRjdXJoaWVyYXJjaHkgPSAkb25lLT5IaWVyYXJjaHkoKTsKCiNUaGVuIGp1bXAgb3V0LiAgV2UgZG9uJ3Qgd2FudCBvdXJzZWx2ZXMgaW4gdGhlIGxpc3QuCgkJCQkJY29udGludWU7CgkJCQl9CiNJZiBpdCdzIGEgY2hpbGQgb2YgdGhlIGN1cnJlbnQsIHdlIGRvbid0IHdhbnQgdG8gc2hvdyBpdCBhcyBpdAojY291bGQgY2F1c2UgYSBkZWFkbG9jay4KCQkJCWlmICgkY3VyaGllcmFyY2h5ICE9ICcnICYmIHN0cnN0cigkb25lLT5IaWVyYXJjaHkoKSAuICcuJywgJGN1cmhpZXJhcmNoeSAuICcuJykgPT0gJG9uZS0+SGllcmFyY2h5KCkgLiAnLicpCgkJCQl7CgkJCQkJY29udGludWU7CgkJCQl9CiNEb24ndCBpbmNsdWRlIGNvbnRlbnQgdHlwZXMgdGhhdCBkbyBub3Qgd2FudCBjaGlsZHJlbiBlaXRoZXIuLi4KCQkJCWlmICgkb25lLT5XYW50c0NoaWxkcmVuKCkgPT0gdHJ1ZSAmJiAkb25lLT5QYXJlbnRQYWdlSWQoKSA9PSAkcGFyZW50X3BhZ2VfaWQpCgkJCQkvLwlpZiAoJG9uZS0+V2FudHNDaGlsZHJlbigpID09IHRydWUpCgkJCQl7CgkJCQkJJHJlc3VsdCAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4kb25lLT5JZCgpLiciJzsKCiNTZWxlY3QgY3VycmVudCBwYXJlbnQgaWYgaXQgZXhpc3RzCgkJCQkJaWYgKCRvbmUtPklkKCkgPT0gJHBhcmVudCkKCQkJCQl7CgkJCQkJCSRyZXN1bHQgLj0gJyBzZWxlY3RlZD0idHJ1ZSInOwoJCQkJCX0KCgkJCQkJJHJlc3VsdCAuPSAnPicuJG9uZS0+SGllcmFyY2h5KCkuJy4gLSAnLiRvbmUtPk5hbWUoKS4nPC9vcHRpb24+JzsKCQkJCX0KCQkJfQoKCQkJJHJlc3VsdCAuPSAnPC9zZWxlY3Q+JzsKCQl9CgoJCXJldHVybiAkcmVzdWx0OwoJfQoKCgkvLyBmdW5jdGlvbiB0byBnZXQgdGhlIGlkIG9mIHRoZSBkZWZhdWx0IHBhZ2UKCWZ1bmN0aW9uIEdldERlZmF1bHRQYWdlSUQoKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGRlZmF1bHRfY29udGVudCA9IDEiOwoJCSRyb3cgPSAmJGRiLT5HZXRSb3coJHF1ZXJ5KTsKCQlpZiAoISRyb3cpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiAkcm93Wydjb250ZW50X2lkJ107Cgl9CgoKCS8vIGZ1bmN0aW9uIHRvIG1hcCBhbiBhbGlhcyB0byBhIHBhZ2UgaWQKCS8vIHJldHVybnMgZmFsc2UgaWYgbm90aGluZyBjb3VuZCBiZSBmb3VuZC4KCWZ1bmN0aW9uIEdldFBhZ2VJREZyb21BbGlhcyggJGFsaWFzICkKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGRiID0gJiRnQ21zLT5HZXREYigpOwoKCQlpZiAoaXNfbnVtZXJpYygkYWxpYXMpICYmIHN0cnBvcygkYWxpYXMsJy4nKSA9PSBGQUxTRSAmJiBzdHJwb3MoJGFsaWFzLCcsJykgPT0gRkFMU0UpCgkJewoJCQlyZXR1cm4gJGFsaWFzOwoJCX0KCgkJJHBhcmFtcyA9IGFycmF5KCRhbGlhcyk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgV0hFUkUgY29udGVudF9hbGlhcyA9ID8iOwoJCSRyb3cgPSAkZGItPkdldFJvdygkcXVlcnksICRwYXJhbXMpOwoKCQlpZiAoISRyb3cpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiAkcm93Wydjb250ZW50X2lkJ107Cgl9CgkKCWZ1bmN0aW9uIEdldFBhZ2VJREZyb21IaWVyYXJjaHkoJHBvc2l0aW9uKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGhpZXJhcmNoeSA9ID8iOwoJCSRyb3cgPSAkZGItPkdldFJvdygkcXVlcnksIGFycmF5KEJsb2NrQ29udGVudE1hbmFnZXI6OkNyZWF0ZVVuZnJpZW5kbHlIaWVyYXJjaHlQb3NpdGlvbigkcG9zaXRpb24pKSk7CgoJCWlmICghJHJvdykKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuICRyb3dbJ2NvbnRlbnRfaWQnXTsKCX0KCgoJLy8gZnVuY3Rpb24gdG8gbWFwIGFuIGFsaWFzIHRvIGEgcGFnZSBpZAoJLy8gcmV0dXJucyBmYWxzZSBpZiBub3RoaW5nIGNvdW5kIGJlIGZvdW5kLgoJZnVuY3Rpb24gR2V0UGFnZUFsaWFzRnJvbUlEKCAkaWQgKQoJewoJCWdsb2JhbCAkZ0NtczsKCQkkZGIgPSAmJGdDbXMtPkdldERiKCk7CgoJCWlmICghaXNfbnVtZXJpYygkaWQpICYmIHN0cnBvcygkaWQsJy4nKSA9PSBUUlVFICYmIHN0cnBvcygkaWQsJywnKSA9PSBUUlVFKQoJCXsKCQkJcmV0dXJuICRpZDsKCQl9CgoJCSRwYXJhbXMgPSBhcnJheSgkaWQpOwoJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfaWQgPSA/IjsKCQkkcm93ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LCAkcGFyYW1zKTsKCgkJaWYgKCAhJHJvdyApCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiAkcm93Wydjb250ZW50X2FsaWFzJ107Cgl9CgoKCWZ1bmN0aW9uIENoZWNrQWxpYXNFcnJvcigkYWxpYXMsICRjb250ZW50X2lkID0gLTEpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRkYiA9ICYkZ0Ntcy0+R2V0RGIoKTsKCgkJJGVycm9yID0gRkFMU0U7CgoJCWlmIChwcmVnX21hdGNoKCcvXlxkKyQvJywgJGFsaWFzKSkKCQl7CgkJCSRlcnJvciA9IGxhbmcoJ2FsaWFzbm90YW5pbnRlZ2VyJyk7CgkJfQoJCWVsc2UgaWYgKCFwcmVnX21hdGNoKCcvXltcLVxfXHddKyQvJywgJGFsaWFzKSkKCQl7CgkJCSRlcnJvciA9IGxhbmcoJ2FsaWFzbXVzdGJlbGV0dGVyc2FuZG51bWJlcnMnKTsKCQl9CgkJZWxzZQoJCXsKCQkJJHBhcmFtcyA9IGFycmF5KCRhbGlhcyk7CgkJCSRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IFdIRVJFIGNvbnRlbnRfYWxpYXMgPSA/IjsKCQkJaWYgKCRjb250ZW50X2lkID4gLTEpCgkJCXsKCQkJCSRxdWVyeSAuPSAiIEFORCBjb250ZW50X2lkICE9ID8iOwoJCQkJJHBhcmFtc1tdID0gJGNvbnRlbnRfaWQ7CgkJCX0KCQkJJHJvdyA9ICYkZGItPkdldFJvdygkcXVlcnksICRwYXJhbXMpOwoKCQkJaWYgKCRyb3cpCgkJCXsKCQkJCSRlcnJvciA9IGxhbmcoJ2FsaWFzYWxyZWFkeXVzZWQnKTsKCQkJfQoJCX0KCgkJcmV0dXJuICRlcnJvcjsKCX0KCQoJZnVuY3Rpb24gQ2xlYXJDYWNoZSgpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRzbWFydHkgPSYgJGdDbXMtPkdldFNtYXJ0eSgpOwoJCQoJCSRzbWFydHktPmNsZWFyX2FsbF9jYWNoZSgpOwoJCSRzbWFydHktPmNsZWFyX2NvbXBpbGVkX3RwbCgpOwoKCQlpZiAoaXNfZmlsZShUTVBfQ0FDSEVfTE9DQVRJT04gLiAnL2NvbnRlbnRjYWNoZS5waHAnKSkKCQl7CgkJCXVubGluayhUTVBfQ0FDSEVfTE9DQVRJT04gLiAnL2NvbnRlbnRjYWNoZS5waHAnKTsKCQl9Cgl9CgoJZnVuY3Rpb24gQ3JlYXRlRnJpZW5kbHlIaWVyYXJjaHlQb3NpdGlvbigkcG9zaXRpb24pCgl7CiNDaGFuZ2UgcGFkZGVkIG51bWJlcnMgYmFjayBpbnRvIHVzZXItZnJpZW5kbHkgdmFsdWVzCgkJJHRtcCA9ICcnOwoJCSRsZXZlbHMgPSBzcGxpdCgnXC4nLCAkcG9zaXRpb24pOwoJCWZvcmVhY2ggKCRsZXZlbHMgYXMgJG9uZWxldmVsKQoJCXsKCQkJJHRtcCAuPSBsdHJpbSgkb25lbGV2ZWwsICcwJykgLiAnLic7CgkJfQoJCSR0bXAgPSBydHJpbSgkdG1wLCAnLicpOwoJCXJldHVybiAkdG1wOwoJfQoKCWZ1bmN0aW9uIENyZWF0ZVVuZnJpZW5kbHlIaWVyYXJjaHlQb3NpdGlvbigkcG9zaXRpb24pCgl7CiNDaGFuZ2UgdXNlci1mcmllbmRseSB2YWx1ZXMgaW50byBwYWRkZWQgbnVtYmVycwoJCSR0bXAgPSAnJzsKCQkkbGV2ZWxzID0gc3BsaXQoJ1wuJywgJHBvc2l0aW9uKTsKCQlmb3JlYWNoICgkbGV2ZWxzIGFzICRvbmVsZXZlbCkKCQl7CgkJCSR0bXAgLj0gc3RyX3BhZCgkb25lbGV2ZWwsIDUsICcwJywgU1RSX1BBRF9MRUZUKSAuICcuJzsKCQl9CgkJJHRtcCA9IHJ0cmltKCR0bXAsICcuJyk7CgkJcmV0dXJuICR0bXA7Cgl9CgkKfQoKIyB2aW06dHM9NCBzdz00IG5vZXQKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/classes/class.blockmodule.inc.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgCnJlcXVpcmVfb25jZSAnY2xhc3MuYmxvY2tjb250ZW50LmluYy5waHAnOwovKioKICogQ2xhc3MgdGhhdCBtb2R1bGUgZGVmaW5lZCBjb250ZW50IHR5cGVzIG11c3QgZXh0ZW5kLgogKgogKiBAc2luY2UJCTAuOQogKiBAcGFja2FnZQkJQ01TCiAqLwpjbGFzcyBDTVNNb2R1bGVCbG9ja0NvbnRlbnRUeXBlIGV4dGVuZHMgQmxvY2tDb250ZW50QmFzZQp7CgkvL1doYXQgbW9kdWxlIGRvIEkgYmVsb25nIHRvPyAgKG5lZWRlZCBmb3IgdGhpbmdzIGxpa2UgTGFuZyB0byB3b3JrIHJpZ2h0KQoJZnVuY3Rpb24gTW9kdWxlTmFtZSgpCgl7CgkJcmV0dXJuICcnOwoJfQoKCglmdW5jdGlvbiBMYW5nKCRuYW1lLCAkcGFyYW1zPWFycmF5KCkpCgl7CgkJZ2xvYmFsICRnQ21zOwoJCSRjbXNtb2R1bGVzID0gJiRnQ21zLT5tb2R1bGVzOwoJCWlmIChhcnJheV9rZXlfZXhpc3RzKCR0aGlzLT5Nb2R1bGVOYW1lKCksICRjbXNtb2R1bGVzKSkKCQl7CgkJCXJldHVybiAkY21zbW9kdWxlc1skdGhpcy0+TW9kdWxlTmFtZSgpXVsnb2JqZWN0J10tPkxhbmcoJG5hbWUsICRwYXJhbXMpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gJ01vZHVsZU5hbWUoKSBub3QgZGVmaW5lZCBwcm9wZXJseSc7CgkJfQogICAgICAgIH0KCgoJLyoKCSAqIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIHRoZSBtb2R1bGUgdGhpcyBjb250ZW50IHR5cGUgYmVsb25ncyB0bwoJICoKCSAqLwoJZnVuY3Rpb24gR2V0TW9kdWxlSW5zdGFuY2UoKSAKCXsKCQlnbG9iYWwgJGdDbXM7CgkJJGNtc21vZHVsZXMgPSAmJGdDbXMtPm1vZHVsZXM7CgkJaWYgKGFycmF5X2tleV9leGlzdHMoJHRoaXMtPk1vZHVsZU5hbWUoKSwgJGNtc21vZHVsZXMpKQoJCXsKCQkJcmV0dXJuICRjbXNtb2R1bGVzWyR0aGlzLT5Nb2R1bGVOYW1lKCldWydvYmplY3QnXTsKCQl9CgkJZWxzZQoJCXsKCQkJcmV0dXJuICdNb2R1bGVOYW1lKCkgbm90IGRlZmluZWQgcHJvcGVybHknOwoJCX0KCX0KCn0KPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/sllists/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/sllists/SLLists.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCi8qDQoqIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhIFBIUCB3cmFwcGVyIGFyb3VuZCB0aGUgc2NyaXB0YWN1bG91cyBqYXZhc2NyaXB0IGxpYnJhcmllcyBjcmVhdGVkIGJ5DQoqIFRob21hcyBGdWNocyAoaHR0cDovL3NjcmlwdC5hY3Vsby51cy8pLg0KKg0KKiBTTExpc3RzIHdhcyBjcmVhdGVkIGJ5IEdyZWcgTmV1c3RhZXR0ZXIgaW4gMjAwNSBhbmQgbWF5IGJlIHVzZWQgZm9yIGZyZWUgYnkgYW55b25lIGZvciBhbnkgcHVycG9zZS4gIEp1c3Qga2VlcCBteSBuYW1lIGluIGhlcmUgcGxlYXNlIGFuZA0KKiBnaXZlIG1lIGNyZWRpdCBpZiB5b3UgbGlrZSwgYnV0IGdpdmUgVGhvbWFzIGFsbCB0aGUgcmVhbCBjcmVkaXQhDQoqLw0KY2xhc3MgU0xMaXN0cyB7DQoNCgl2YXIgJGxpc3RzID0gYXJyYXkoKTsNCgl2YXIgJGpzUGF0aDsNCgl2YXIgJGRlYnVnID0gZmFsc2U7DQoJDQoJZnVuY3Rpb24gU0xMaXN0cygkanNQYXRoKSB7DQoJCSR0aGlzLT5qc1BhdGggPSAkanNQYXRoOw0KCX0NCgkNCglmdW5jdGlvbiBhZGRMaXN0KCRsaXN0LCAkaW5wdXQsICR0YWcgPSAnbGknLCAkYWRkaXRpb25hbE9wdGlvbnMgPSAnJykgew0KCQlpZiAoJGFkZGl0aW9uYWxPcHRpb25zICE9ICcnKSAkYWRkaXRpb25hbE9wdGlvbnMgPSAnLCcuJGFkZGl0aW9uYWxPcHRpb25zOw0KCQkkdGhpcy0+bGlzdHNbXSA9IGFycmF5KCJsaXN0IiA9PiAkbGlzdCwgImlucHV0IiA9PiAkaW5wdXQsICJ0YWciID0+ICR0YWcsICJhZGRpdGlvbmFsT3B0aW9ucyIgPT4gJGFkZGl0aW9uYWxPcHRpb25zKTsNCgl9DQoJDQoJZnVuY3Rpb24gcHJpbnRUb3BKUygpIHsNCgkJPz4NCgkJPHNjcmlwdCBzcmM9Ijw/cGhwIGVjaG8gJHRoaXMtPmpzUGF0aDs/Pi9wcm90b3R5cGUuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSI8P3BocCBlY2hvICR0aGlzLT5qc1BhdGg7Pz4vc2NyaXB0YWN1bG91cy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCgkJPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tDQoJCQlmdW5jdGlvbiBwb3B1bGF0ZUhpZGRlblZhcnMoKSB7DQoJCQkJPD9waHANCgkJCQlmb3JlYWNoKCR0aGlzLT5saXN0cyBhcyAkbGlzdCkgew0KCQkJCQk/Pg0KCQkJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnPD9waHAgZWNobyAkbGlzdFsnaW5wdXQnXTs/PicpLnZhbHVlID0gU29ydGFibGUuc2VyaWFsaXplKCc8P3BocCBlY2hvICRsaXN0WydsaXN0J107Pz4nKTsNCgkJCQkJPD9waHANCgkJCQl9DQoJCQkJPz4NCgkJCQlyZXR1cm4gdHJ1ZTsNCgkJCX0NCgkJCS8vLS0+DQoJCTwvc2NyaXB0Pg0KCQk8P3BocA0KCX0NCgkNCglmdW5jdGlvbiBwcmludEJvdHRvbUpzKCkgew0KCQk/Pg0KCQkgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQkJLy8gPCFbQ0RBVEFbDQoJCQk8P3BocA0KCQkJZm9yZWFjaCgkdGhpcy0+bGlzdHMgYXMgJGxpc3QpIHsNCgkJCQk/Pg0KCQkJCVNvcnRhYmxlLmNyZWF0ZSgnPD9waHAgZWNobyAkbGlzdFsnbGlzdCddOz8+Jyx7dGFnOic8P3BocCBlY2hvICRsaXN0Wyd0YWcnXTs/Pic8P3BocCBlY2hvICRsaXN0WydhZGRpdGlvbmFsT3B0aW9ucyddOz8+fSk7DQoJCQkJPD9waHANCgkJCX0NCgkJCT8+DQoJCQkvLyBdXT4NCgkJIDwvc2NyaXB0Pg0KCQk8P3BocA0KCX0NCgkNCglmdW5jdGlvbiBwcmludEhpZGRlbklucHV0cygpIHsNCgkJJGlucHV0VHlwZSA9ICgkdGhpcy0+ZGVidWcpID8gJ3RleHQnIDogJ2hpZGRlbic7DQoNCgkJZm9yZWFjaCgkdGhpcy0+bGlzdHMgYXMgJGxpc3QpIHsNCgkJCWlmICgkdGhpcy0+ZGVidWcpIGVjaG8gJzxicj4nLiRsaXN0WydpbnB1dCddLic6ICc7DQoJCQk/Pg0KCQkJPGlucHV0IHR5cGU9Ijw/cGhwIGVjaG8gJGlucHV0VHlwZTs/PiIgbmFtZT0iPD9waHAgZWNobyAkbGlzdFsnaW5wdXQnXTs/PiIgaWQ9Ijw/cGhwIGVjaG8gJGxpc3RbJ2lucHV0J107Pz4iIHNpemU9IjYwIiAvPg0KCQkJPD9waHANCgkJfQ0KCQlpZiAoJHRoaXMtPmRlYnVnKSBlY2hvICc8YnI+JzsNCgl9DQoJDQoJZnVuY3Rpb24gcHJpbnRGb3JtKCRhY3Rpb24sICRtZXRob2QgPSAncG9zdCcsICRzdWJtaXRUZXh0ID0gJ1N1Ym1pdCcsICRzdWJtaXRDbGFzcyA9ICcnLCRmb3JtTmFtZSA9ICdzb3J0YWJsZUxpc3RGb3JtJykgew0KCQk/Pg0KCQk8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJGFjdGlvbjs/PiIgbWV0aG9kPSI8P3BocCBlY2hvICRtZXRob2Q7Pz4iIG9uc3VibWl0PSJwb3B1bGF0ZUhpZGRlblZhcnMoKTsiIG5hbWU9Ijw/cGhwIGVjaG8gJGZvcm1OYW1lOz8+IiBpZD0iPD9waHAgZWNobyAkZm9ybU5hbWU7Pz4iPg0KCQkJPD9waHAgJHRoaXMtPnByaW50SGlkZGVuSW5wdXRzKCk7Pz4NCgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNvcnRhYmxlTGlzdHNTdWJtaXR0ZWQiIHZhbHVlPSJ0cnVlIiAvPg0KCQkJPD9waHANCgkJCWlmICgkdGhpcy0+ZGVidWcpIHsNCgkJCQk/PjxpbnB1dCB0eXBlPSJidXR0b24iIHZhbHVlPSJWaWV3IFNlcmlhbGl6ZWQgTGlzdHMiIGNsYXNzPSI8P3BocCBlY2hvICRzdWJtaXRDbGFzczs/PiIgb25jbGljaz0icG9wdWxhdGVIaWRkZW5WYXJzKCk7IiAvPjxicj48P3BocA0KCQkJfQ0KCQkJPz4NCgkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI8P3BocCBlY2hvICRzdWJtaXRUZXh0Oz8+IiBjbGFzcz0iPD9waHAgZWNobyAkc3VibWl0Q2xhc3M7Pz4iIC8+DQoJCTwvZm9ybT4NCgkJPD9waHANCgl9DQoJDQoJZnVuY3Rpb24gZ2V0T3JkZXJBcnJheSgkaW5wdXQsJGxpc3RuYW1lLCRpdGVtS2V5TmFtZSA9ICdlbGVtZW50Jywkb3JkZXJLZXlOYW1lID0gJ29yZGVyJykgew0KCQlwYXJzZV9zdHIoJGlucHV0LCRpbnB1dEFycmF5KTsNCgkJJGlucHV0QXJyYXkgPSAkaW5wdXRBcnJheVskbGlzdG5hbWVdOw0KCQkkb3JkZXJBcnJheSA9IGFycmF5KCk7DQoJCWZvcigkaT0wOyRpPGNvdW50KCRpbnB1dEFycmF5KTskaSsrKSB7DQoJCQkkb3JkZXJBcnJheVtdID0gYXJyYXkoJGl0ZW1LZXlOYW1lID0+ICRpbnB1dEFycmF5WyRpXSwgJG9yZGVyS2V5TmFtZSA9PiAkaSArMSk7DQoJCX0NCgkJcmV0dXJuICRvcmRlckFycmF5Ow0KCX0NCg0KfQ==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyBWZXJzaW9uOiAkSWQ6IG1ldGhvZC5pbnN0YWxsLnBocCAxMzAgMjAwNi0wOC0xMCAxODoyMzoyMFogZWxpamFobG9mZ3JlbiAkCiMgTWV0aG9kOiBJbnN0YWxsCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9za2VsZXRvbi8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7CiRkYl9wcmVmaXggPSBjbXNfZGJfcHJlZml4KCk7CgkJCgllY2hvICI8cD5DcmVhdGluZyBjb250ZW50IHRhYmxlLi4uIjsKCgkkZGJkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRmbGRzID0gIgoJCWNvbnRlbnRfaWQgSSBLRVksCgkJY29udGVudF9uYW1lIEMoMjU1KSwKCQl0eXBlIEMoMjUpLAoJCW93bmVyX2lkIEksCgkJcGFyZW50X2lkIEksCgkJdGVtcGxhdGVfaWQgSSwKCQlpdGVtX29yZGVyIEksCgkJaGllcmFyY2h5IEMoMjU1KSwKCQlkZWZhdWx0X2NvbnRlbnQgSTEsCgkJbWVudV90ZXh0IEMoMjU1KSwKCQljb250ZW50X2FsaWFzIEMoMjU1KSwKCQlzaG93X2luX21lbnUgSTEsCgkJY29sbGFwc2VkIEkxLAoJCW1hcmt1cCBDKDI1KSwKCQlhY3RpdmUgSTEsCgkJY2FjaGFibGUgSTEsCgkJaWRfaGllcmFyY2h5IEMoMjU1KSwKCQloaWVyYXJjaHlfcGF0aCBYLAoJCXByb3BfbmFtZXMgWCwKCQltZXRhZGF0YSBYLAoJCXRpdGxlYXR0cmlidXRlIEMoMjU1KSwKCQl0YWJpbmRleCBDKDEwKSwKCQlhY2Nlc3NrZXkgQyg1KSwKCQlsYXN0X21vZGlmaWVkX2J5IEksCgkJY3JlYXRlX2RhdGUgRFQsCgkJbW9kaWZpZWRfZGF0ZSBEVCwKCQlwYXJlbnRfcGFnZV9pZCBJCgkiOwoJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCSRzcWxhcnJheSA9ICRkYmRpY3QtPkNyZWF0ZVRhYmxlU1FMKCRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkYmRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKCSRkYi0+RXhlY3V0ZSgiQUxURVIgVEFCTEUgIi4kZGJfcHJlZml4LiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50IEFERCBJTkRFWCAoY29udGVudF9hbGlhcywgYWN0aXZlKSIpOwoJJGRiLT5FeGVjdXRlKCJBTFRFUiBUQUJMRSAiLiRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQgQUREIElOREVYIChkZWZhdWx0X2NvbnRlbnQpIik7CgkkZGItPkV4ZWN1dGUoIkFMVEVSIFRBQkxFICIuJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudCBBREQgSU5ERVggKHBhcmVudF9pZCkiKTsKCgllY2hvICJbZG9uZV08L3A+IjsKCgllY2hvICI8cD5DcmVhdGluZyBjb250ZW50X3Byb3BzIHRhYmxlLi4uIjsKCgkkZGJkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCSRmbGRzID0gIgoJCWNvbnRlbnRfaWQgSSwKCQl0eXBlIEMoMjUpLAoJCXByb3BfbmFtZSBDKDI1NSksCgkJcGFyYW0xIEMoMjU1KSwKCQlwYXJhbTIgQygyNTUpLAoJCXBhcmFtMyBDKDI1NSksCgkJY29udGVudCBYLAoJCWNyZWF0ZV9kYXRlIERULAoJCW1vZGlmaWVkX2RhdGUgRFQKCSI7CgkkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwoJJHNxbGFycmF5ID0gJGRiZGljdC0+Q3JlYXRlVGFibGVTUUwoJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRiZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJJGRiLT5FeGVjdXRlKCJBTFRFUiBUQUJMRSAiLiRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnRfcHJvcHMgQUREIElOREVYIChjb250ZW50X2lkKSIpOwoKCWVjaG8gIltkb25lXTwvcD4iOwoKCWVjaG8gIjxwPkFkZGluZyBjcm9zc3JlZiB0YWJsZS4uLiI7CgoJJGRiZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkkZmxkcyA9ICcKCQljaGlsZF90eXBlIEMoMTAwKSwKCQljaGlsZF9pZCBJLAoJCXBhcmVudF90eXBlIEMoMTAwKSwKCQlwYXJlbnRfaWQgSSwKCQljcmVhdGVfZGF0ZSBEVCwKCQltb2RpZmllZF9kYXRlIERUCgknOwoKCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7Cgkkc3FsYXJyYXkgPSAkZGJkaWN0LT5DcmVhdGVUYWJsZVNRTCgkZGJfcHJlZml4LiJtb2R1bGVfcGFnZWJsb2Nrc19jcm9zc3JlZiIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRiZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgoJJGRiLT5FeGVjdXRlKCJBTFRFUiBUQUJMRSAiLiRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2Nyb3NzcmVmIEFERCBJTkRFWCAoY2hpbGRfdHlwZSwgY2hpbGRfaWQpIik7CgkkZGItPkV4ZWN1dGUoIkFMVEVSIFRBQkxFICIuJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYgQUREIElOREVYIChwYXJlbnRfdHlwZSwgcGFyZW50X2lkKSIpOwoKCWVjaG8gJ1tkb25lXTwvcD4nOwoKLy8gQ3JlYXRlIFNlcXVlbmNlcwokZGItPkNyZWF0ZVNlcXVlbmNlKCRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnRfc2VxIik7CiRkYi0+Q3JlYXRlU2VxdWVuY2UoJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY29udGVudF9wcm9wc19zZXEiKTsKCi8vIGNyZWF0ZSBhIHBlcm1pc3Npb24KJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ1VzZSBQYWdlQmxvY2tzJywgJ1VzZSBQYWdlQmxvY2tzJyk7CgovLyBjcmVhdGUgYSBwcmVmZXJlbmNlCiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0dGVtcGxhdGUnLCAnZGVmYXVsdCcpOwoKCi8vIEluc3RhbGwgdGVtcGxhdGVzCiR0aGlzLT5TZXRUZW1wbGF0ZSgnZGVmYXVsdCcsICR0aGlzLT5HZXRUZW1wbGF0ZUZyb21GaWxlKCdkZWZhdWx0JykpOwokdGhpcy0+U2V0VGVtcGxhdGUoJ2hlYWRpbmcyJywgJHRoaXMtPkdldFRlbXBsYXRlRnJvbUZpbGUoJ2hlYWRpbmcyJykpOwokdGhpcy0+U2V0VGVtcGxhdGUoJ2hlYWRpbmczJywgJHRoaXMtPkdldFRlbXBsYXRlRnJvbUZpbGUoJ2hlYWRpbmczJykpOwoKCQkvLyByZWdpc3RlciBhbiBldmVudCB0aGF0IHRoZSBTa2VsZXRvbiB3aWxsIGlzc3VlLiBPdGhlciBtb2R1bGVzCgkJLy8gb3IgdXNlciB0YWdzIHdpbGwgYmUgYWJsZSB0byBzdWJzY3JpYmUgdG8gdGhpcyBldmVudCwgYW5kIHRyaWdnZXIKCQkvLyBvdGhlciBhY3Rpb25zIHdoZW4gaXQgZ2V0cyBjYWxsZWQuCi8vCQkkdGhpcy0+Q3JlYXRlRXZlbnQoICdPblNrZWxldG9uUHJlZmVyZW5jZUNoYW5nZScgKTsKCgkJLy8gcHV0IG1lbnRpb24gaW50byB0aGUgYWRtaW4gbG9nCgkJJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCdpbnN0YWxsZWQnLCR0aGlzLT5HZXRWZXJzaW9uKCkpKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyBWZXJzaW9uOiAkSWQ6IG1ldGhvZC51bmluc3RhbGwucGhwIDEzMCAyMDA2LTA4LTEwIDE4OjIzOjIwWiBlbGlqYWhsb2ZncmVuICQKIyBNZXRob2Q6IFVuaW5zdGFsbAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIyBUaGUgbW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvcGFnZWJsb2Nrcy8KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgokZGIgPSYgJGdDbXMtPkdldERiKCk7CiRkYl9wcmVmaXggPSBjbXNfZGJfcHJlZml4KCk7CiRkYmRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoKLy8gcmVtb3ZlIHRoZSBkYXRhYmFzZSB0YWJsZXMKJHNxbGFycmF5ID0gJGRiZGljdC0+RHJvcFRhYmxlU1FMKCRkYl9wcmVmaXguIm1vZHVsZV9wYWdlYmxvY2tzX2NvbnRlbnQiKTsKJGRiZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiRzcWxhcnJheSA9ICRkYmRpY3QtPkRyb3BUYWJsZVNRTCgkZGJfcHJlZml4LiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3BzIik7CiRkYmRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwokc3FsYXJyYXkgPSAkZGJkaWN0LT5Ecm9wVGFibGVTUUwoJGRiX3ByZWZpeC4ibW9kdWxlX3BhZ2VibG9ja3NfY3Jvc3NyZWYiKTsKJGRiZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CgovLyByZW1vdmUgdGhlIHNlcXVlbmNlcwokZGItPkRyb3BTZXF1ZW5jZSgkZGJfcHJlZml4LiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3NlcSIpOwokZGItPkRyb3BTZXF1ZW5jZSgkZGJfcHJlZml4LiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50X3Byb3Bfc2VxIik7CgovLyByZW1vdmUgdGhlIHBlcm1pc3Npb25zCiR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdVc2UgUGFnZUJsb2NrcycpOwoKLy9yZW1vdmUgdGhlIHRlbXBsYXRlcwokdGVtcGxhdGVzID0gJHRoaXMtPkxpc3RUZW1wbGF0ZXMoKTsKZm9yZWFjaCAoJHRlbXBsYXRlcyBhcyAkdGVtcGxhdGUpCnsKICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHRlbXBsYXRlKTsKfQoKLy8gcmVtb3ZlIHRoZSBwcmVmcwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZGVmYXVsdHRlbXBsYXRlJyk7CQkKCi8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPkxhbmcoJ3VuaW5zdGFsbGVkJykpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyBWZXJzaW9uOiAkSWQ6IG1ldGhvZC51cGdyYWRlLnBocCAxMzAgMjAwNi0wOC0xMCAxODoyMzoyMFogZWxpamFobG9mZ3JlbiAkCiMgTWV0aG9kOiBVcGdyYWRlCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojIFRoZSBtb2R1bGUncyBob21lcGFnZSBpczogaHR0cDovL2Rldi5jbXNtYWRlc2ltcGxlLm9yZy9wcm9qZWN0cy9wYWdlYmxvY2tzLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgppZiAoIWlzc2V0KCRnQ21zKSkgZXhpdDsKJGRiID0mICR0aGlzLT5HZXREYigpOwokY3VycmVudF92ZXJzaW9uID0gJG9sZHZlcnNpb247CnN3aXRjaCgkY3VycmVudF92ZXJzaW9uKQogIHsKICBjYXNlICcwLjEtc3ZuJzoKICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5BZGRDb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2NrcyIsICJibG9ja19vcmRlciBDKDUwKSIpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICcwLjEuMS1zdm4nOwogIGNhc2UgJzAuMS4xLXN2bic6CiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3BhZ2VibG9ja3MiLCAicGFyZW50X2Jsb2NrIEkgREVGQVVMVCAwIik7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkY3VycmVudF92ZXJzaW9uID0gJzAuMS4yLXN2bic7CiAgY2FzZSAnMC4xLjItc3ZuJzoKICAgIC8vIG15c3FsLXNwZWNpZmljLCBidXQgaWdub3JlZCBieSBvdGhlciBkYXRhYmFzZQogICAgJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsgCiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAKICAgIC8vIHRhYmxlIHNjaGVtYSBkZXNjcmlwdGlvbgogICAgJGZsZHMgPSAiCgkJCWZpZWxkX2lkIEkgS0VZLAogICAgICAgICAgICAgICAgICAgICAgICBibG9ja19pZCBDKDUwKSwKCQkJbmFtZSBDKDI1NSksCgkJCWNvbnRlbnQgWAoJCQkiOwoKICAgIC8vIGNyZWF0ZSBpdC4gVGhpcyBzaG91bGQgZG8gZXJyb3IgY2hlY2tpbmcsIGJ1dCBJJ20gYSBsYXp5IHNvZC4KICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2ZpZWxkcyIsICRmbGRzLCAkdGFib3B0YXJyYXkpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgCiAgICAvLyBjcmVhdGUgYSBzZXF1ZW5jZQogICAgJGRiLT5DcmVhdGVTZXF1ZW5jZShjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9wYWdlYmxvY2tzX2ZpZWxkc19zZXEiKTsKICAgIAogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICcwLjEuMy1zdm4nOwogICAgCiAgY2FzZSAnMC4xLjMtc3ZuJzoKICAgIC8vIHVwZ3JhZGUgaGVyZQogICAgJGN1cnJlbnRfdmVyc2lvbiA9ICcwLjEuNC1zdm4nOwogICAgCiAgICBicmVhazsKICB9CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5MYW5nKCd1cGdyYWRlZCcsJHRoaXMtPkdldFZlcnNpb24oKSkpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/PageBlocks.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFBhZ2VCbG9ja3MKIyAkSWQ6IFBhZ2VCbG9ja3MubW9kdWxlLnBocCAxNTkgMjAwNi0wOC0xOCAwMzoxOTowOFogZWxpamFobG9mZ3JlbiAkCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3BhZ2VibG9ja3MvCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpyZXF1aXJlX29uY2UoICdsaWIvYmxvY2tjb250ZW50LmZ1bmN0aW9ucy5waHAnKTsKcmVxdWlyZV9vbmNlKCAnbGliL2NsYXNzZXMvY2xhc3MuYmxvY2tjb250ZW50LmluYy5waHAnKTsKcmVxdWlyZV9vbmNlKCAnbGliL2NsYXNzZXMvY2xhc3MuYmxvY2ttb2R1bGUuaW5jLnBocCcpOwpyZXF1aXJlX29uY2UoICdjbGFzc2VzL2NsYXNzLkltYWdlVGV4dC5waHAnKTsKcmVxdWlyZV9vbmNlKCAnY2xhc3Nlcy9jbGFzcy5UZXh0LnBocCcpOwoKCmNsYXNzIFBhZ2VCbG9ja3MgZXh0ZW5kcyBDTVNNb2R1bGUKewogIAogIGZ1bmN0aW9uIEdldE5hbWUoKQogIHsKICAgIHJldHVybiAnUGFnZUJsb2Nrcyc7CiAgfQoKICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CiAgfQoKICBmdW5jdGlvbiBHZXRWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gJzAuMS4zLXN2bic7CiAgfQogIAogIGZ1bmN0aW9uIEdldEhlbHAoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnaGVscCcpOwogIH0KICAKICBmdW5jdGlvbiBHZXRBdXRob3IoKQogIHsKICAgIHJldHVybiAnRWxpamFoIExvZmdyZW4nOwogIH0KICAKICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCiAgewogICAgcmV0dXJuICdlbGlqYWhsb2ZncmVuQGVsaWphaGxvZmdyZW4uY29tJzsKICB9CiAgCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2NoYW5nZWxvZycpOwogIH0KCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KICAKICBmdW5jdGlvbiBIYXNBZG1pbigpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBHZXRBZG1pblNlY3Rpb24oKQogIHsKICAgIHJldHVybiAnY29udGVudCc7CiAgfQoKCiAgZnVuY3Rpb24gR2V0QWRtaW5EZXNjcmlwdGlvbigpCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KCgogIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgewogICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VzZSBQYWdlQmxvY2tzJyk7CiAgfQogIAogIGZ1bmN0aW9uIEdldERlcGVuZGVuY2llcygpCiAgewogICAgcmV0dXJuIGFycmF5KCk7CiAgfQoKICBmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpCiAgewogICAgcmV0dXJuICcxLjAtYmV0YTQnOwogIH0KCQogIGZ1bmN0aW9uIFNldFBhcmFtZXRlcnMoKQogIHsKCQogICAgJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignYWN0aW9uJywgJ2RlZmF1bHQnLCAkdGhpcy0+bGFuZygnaGVscF9hY3Rpb24nKSk7CiAgICAkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdudW1iZXInLCAxMCwgJHRoaXMtPmxhbmcoJ2hlbHBfbnVtYmVyJykpOwoJCS8qCgkJLy8gRm9yIHZpZXdpbmcgYSBwaWN0dXJlCgkJJHRoaXMtPlJlZ2lzdGVyUm91dGUoJy9za2VsZXRvblwvKD9QPG51bWVyaWNfcGFyYW1fbmFtZT5bMC05XSspXC8oP1A8c3RyaW5nX3BhcmFtX25hbWU+W2EtekEtWl0rKVwvKD9QPHJldHVybmlkPlswLTldKykkLycsIAphcnJheSgnYWN0aW9uJz0+J2RlZmF1bHQnKSk7CgoJCS8vIG5vdywgYW55IHVybCB0aGF0IGxvb2tzIGxpa2U6CgkJLy8gICAgL3NrZWxldG9uLzMvZm9vLzUKCQkvLyB3aWxsIGNhbGwgdGhlIGRlZmF1bHQgYWN0aW9uLCB3aXRoOgoJCS8vICAgICBwYXJhbXNbJ251bWVyaWNfcGFyYW1fbmFtZSddIHNldCB0byAzCgkJLy8gICAgIHBhcmFtc1snc3RyaW5nX3BhcmFtX25hbWUnXSBzZXQgdG8gImZvbyIKCQkvLyAgICBhbmQgcmV0dXJuaWQgc2V0IHRvIDUKCQkKCSovCgl9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudERlc2NyaXB0aW9uKCkKICAgSWYgeW91ciBtb2R1bGUgY2FuIGNyZWF0ZSBldmVudHMsIHlvdSB3aWxsIG5lZWQKICAgdG8gcHJvdmlkZSB0aGUgQVBJIHdpdGggZG9jdW1lbnRhdGlvbiBvZiB3aGF0CiAgIHRoYXQgZXZlbnQgZG9lcy4gVGhpcyBtZXRob2Qgd3JhcHMgdXAgYSBzaW1wbGUKICAgcmV0dXJuIG9mIHRoZSBsb2NhbGl6ZWQgZGVzY3JpcHRpb24uCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0RXZlbnREZXNjcmlwdGlvbiAoICRldmVudG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZXZlbnRfaW5mb18nLiRldmVudG5hbWUgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRFdmVudEhlbHAoKQogICBJZiB5b3VyIG1vZHVsZSBjYW4gY3JlYXRlIGV2ZW50cywgeW91IHdpbGwgbmVlZAogICB0byBwcm92aWRlIHRoZSBBUEkgd2l0aCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0bwogICB1c2UgdGhlIGV2ZW50LiBUaGlzIG1ldGhvZCB3cmFwcyB1cCBhIHNpbXBsZQogICByZXR1cm4gb2YgdGhlIGxvY2FsaXplZCBkZXNjcmlwdGlvbi4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRFdmVudEhlbHAgKCAkZXZlbnRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2V2ZW50X2hlbHBfJy4kZXZlbnRuYW1lICk7CiAgfQoKICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGwnKTsKICB9CiAgCiAgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdHVuaW5zdGFsbCcpOwogIH0KICAKICBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTsKICB9CgogIC8qKgogICAqIEdlbmVyYXRlcyBhIHRhYmxlIG9mIGNvbnRlbnRzIGJhc2VkIG9uIGhlYWRpbmcgdGFncyB0aGF0IGhhdmUgaWRzCiAgICogQGV4YW1wbGU6IDxoMiBpZD0icGFja2FnZXMiPlBhY2thZ2VzPC9oMj4KICAgKi8KICAvKgogIGZ1bmN0aW9uIGdldF90YWJsZV9vZl9jb250ZW50cygkcGFnZV9jb250ZW50cykKICB7CiAgICAvLyBHZW5lcmF0ZSB0YWJsZSBvZiBjb250ZW50cwogICAgcHJlZ19tYXRjaF9hbGwoIi88aChbWzpkaWdpdDpdXSlbWzpzcGFjZTpdXWlkPVwiKFthLXotMC05XSspXCI+KC4qKTxcL2hbMC05XT4vaSIsICRwYWdlX2NvbnRlbnRzLCAkbWF0Y2gpOwogICAgaWYgKEZBTFNFID09IGVtcHR5KCRtYXRjaFswXSkpCiAgICAgIHsKCSRjb250ZW50cyAgPSAiPGgyPkNvbnRlbnRzPC9oMj5cbiI7CgkkY29udGVudHMgLj0gIjx1bD5cbiI7Cglmb3JlYWNoICgkbWF0Y2hbMF0gYXMgJGtleSA9PiAkdmFsdWUpCgkgIHsKCSAgICBpZiAoMiA9PSAkbWF0Y2hbMV1bJGtleV0pCgkgICAgICB7CgkJJGNvbnRlbnRzIC49ICcnOwoJICAgICAgfQoJICAgIGVsc2UKCSAgICAgIHsKCQkkY29udGVudHMgLj0gJyAgICAgICAgJzsKCSAgICAgIH0KCSAgICAkY29udGVudHMgLj0gJzxsaT48YSBocmVmPSInLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLicjJy4kbWF0Y2hbMl1bJGtleV0uJyI+Jy4kbWF0Y2hbM11bJGtleV0uJzwvYT4nOwoJICAgIC8vIFN0YXJ0IGEgbmV3IHN1Yi1saXN0IGlmIHRoaXMgaXRlbSBoYXMgY2hpbGRyZW4gb3RoZXJ3aXNlIGp1c3QgZW5kIHRoZSBsaXN0IGl0ZW0KCSAgICBpZiAoRkFMU0UgPT0gZW1wdHkoJG1hdGNoWzFdWyRrZXkgKyAxXSkgJiYgJG1hdGNoWzFdWyRrZXkgKyAxXSA9PSAkbWF0Y2hbMV1bJGtleV0gKyAxKQoJICAgICAgewoJCSRjb250ZW50cyAuPSAiXG4gICAgPHVsPlxuIjsKCQkkdW5jbG9zZWRfbGlzdCA9IFRSVUU7CgkgICAgICB9CgkgICAgZWxzZQoJICAgICAgewoJCSRjb250ZW50cyAuPSAiPC9saT5cbiI7CgkgICAgICB9CgkgICAgLy8gSWYgdGhlIG5leHQgaXRlbSBpcyBoaWdoZXIgbGV2ZWwgdGhlbiBjbG9zZSB0aGlzIGxpc3QgaXRlbSAoSS5FLiBjdXJyZW50IGl0ZW0gaXMgaDMgYW5kIG5leHQgaXMgaDIKCSAgICBpZiAoRkFMU0UgPT0gZW1wdHkoJG1hdGNoWzFdWyRrZXkgKyAxXSkgJiYgJG1hdGNoWzFdWyRrZXkgKyAxXSA9PSAkbWF0Y2hbMV1bJGtleV0gLSAxKQoJICAgICAgewoJCSRjb250ZW50cyAuPSAiICAgIDwvdWw+XG48L2xpPlxuIjsKCQkkdW5jbG9zZWRfbGlzdCA9IEZBTFNFOwoJICAgICAgfQoJICB9CglpZiAoRkFMU0UgPT0gZW1wdHkoJHVuY2xvc2VkX2xpc3QpKQoJICB7CgkgICAgJGNvbnRlbnRzIC49ICIgICAgPC91bD5cbjwvbGk+XG4iOwoJICB9CgkkY29udGVudHMgLj0gIjwvdWw+XG4iOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSRjb250ZW50cyA9ICcnOwogICAgICB9CiAgICByZXR1cm4gJGNvbnRlbnRzOwogIH0KICAqLwoKICBmdW5jdGlvbiBzaG93X2goJiRyb290LCAmJHNvcnRhYmxlTGlzdHMsICYkbGlzdEFycmF5LCAmJG91dHB1dCwgJHNob3dfY2hpbGRyZW4gPSBUUlVFLCAkc2hvd19wYWdlX2hlYWRlciA9IFRSVUUpCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJHRoZW1lT2JqZWN0ID0gJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddOwogICAgJGVkaXRJbWcgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgbGFuZygnZWRpdCcpLCcnLCcnLCdzeXN0ZW1pY29uJyk7ICAgIAogICAgJGlkID0gJHRoaXMtPm1JZDsKICAgICRyZXR1cm5pZCA9ICR0aGlzLT5tUmV0dXJuaWQ7CiAgICAkY29udGVudCA9ICYkcm9vdC0+Z2V0Q29udGVudCgpOwogICAgaWYgKFRSVUUgPT0gJHNob3dfcGFnZV9oZWFkZXIpCiAgICAgIHsKCWlmIChGQUxTRSA9PSBlbXB0eSgkdGhpcy0+bVBhZ2VCbG9ja1BhcmVudHNbJGNvbnRlbnQtPm1JZF0pIHx8ICRyb290LT5nZXRDaGlsZHJlbkNvdW50KCk+MCkKCSAgewoJICAgICRvdXRwdXQgLj0gJzxsaT4nLiJcbiI7CgkgICAgJGV4cGFuZEltZyA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZXhwYW5kLmdpZicsIGxhbmcoJ2V4cGFuZCcpLCcnLCcnLCdzeXN0ZW1pY29uJyk7CgkgICAgJGNvbnRyYWN0SW1nID0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9jb250cmFjdC5naWYnLCBsYW5nKCdjb250cmFjdCcpLCcnLCcnLCdzeXN0ZW1pY29uJyk7CgkgICAgaWYgKFRSVUUgPT0gZW1wdHkoJHRoaXMtPm9wZW5lZEFycmF5WyRjb250ZW50LT5tSWRdKSkKCSAgICAgIHsKCQkkb3V0cHV0IC49ICAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICAkZXhwYW5kSW1nLCBhcnJheSgnY29sJyA9PiAwLCAnY29udGVudF9pZCcgPT4gJGNvbnRlbnQtPklkKCkpKTsKCSAgICAgIH0KCSAgICBlbHNlCgkgICAgICB7CgkJJG91dHB1dCAuPSAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZGVmYXVsdGFkbWluJywgJHJldHVybmlkLCAgJGNvbnRyYWN0SW1nLCBhcnJheSgnY29sJyA9PiAxLCAnY29udGVudF9pZCcgPT4gJGNvbnRlbnQtPklkKCkpKTsKCSAgICAgIH0KCSAgfQoJZWxzZQoJICB7CgkgICAgJG91dHB1dCAuPSAnPGxpIHN0eWxlPSJwYWRkaW5nLWxlZnQ6MTJweCI+Jy4iXG4iOwoJICB9Cgkkb3V0cHV0IC49ICAkY29udGVudC0+SGllcmFyY2h5KCkuJyAnOwoJJHZpZXdJbWcgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL3ZpZXcuZ2lmJywgbGFuZygndmlldycpLCcnLCcnLCdzeXN0ZW1pY29uJyk7Cgkkb3V0cHV0IC49ICcgPGEgaHJlZj0iJy4kY29udGVudC0+R2V0VVJMKCkuJyI+Jy4kdmlld0ltZy4nPC9hPiAnOwoJJG91dHB1dCAuPSAnIDxhIGhyZWY9ImVkaXRjb250ZW50LnBocD9jb250ZW50X2lkPScuJGNvbnRlbnQtPm1JZC4nIj4nLiRlZGl0SW1nLic8L2E+ICc7Cgkkb3V0cHV0IC49ICcgPGEgaHJlZj0iZWRpdGNvbnRlbnQucGhwP2NvbnRlbnRfaWQ9Jy4kY29udGVudC0+bUlkLiciPicuJGNvbnRlbnQtPm1OYW1lLic8L2E+ICc7CglpZiAoJ0NvbnRlbnQnID09ICRjb250ZW50LT5GcmllbmRseU5hbWUoKSkKCSAgewoJICAgICRvdXRwdXQgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkYmxvY2tjb250ZW50JywgJHJldHVybmlkLCAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkdGhpcy0+TGFuZygnYWRkYmxvY2snKSwnJywnJywnc3lzdGVtaWNvbicpLCBhcnJheSgncGFyZW50X3BhZ2VfaWQnID0+ICRjb250ZW50LT5tSWQpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkYmxvY2tjb250ZW50JywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkYmxvY2snKSwgYXJyYXkoJ3BhcmVudF9wYWdlX2lkJyA9PiAkY29udGVudC0+bUlkKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpOwoJICB9CiAgICAgIH0KICAgIGlmIChGQUxTRSA9PSBlbXB0eSgkdGhpcy0+bVBhZ2VCbG9ja1BhcmVudHNbJGNvbnRlbnQtPm1JZF1bLTFdKSAmJiBGQUxTRSA9PSBlbXB0eSgkdGhpcy0+b3BlbmVkQXJyYXlbJGNvbnRlbnQtPm1JZF0pKQogICAgICB7Cgkkb3V0cHV0IC49ICc8dWwgaWQ9InBhcmVudCcuJGNvbnRlbnQtPm1JZC4nIiBjbGFzcz0ic29ydGFibGVMaXN0Ij4nOwoJJG91dHB1dCAuPSAkdGhpcy0+c2hvd19jaGlsZHJlbigkY29udGVudC0+bUlkLCAtMSwgJHNvcnRhYmxlTGlzdHMsICRsaXN0QXJyYXkpOwoJJHNvcnRhYmxlTGlzdHMtPmFkZExpc3QoJ3BhcmVudCcuJGNvbnRlbnQtPm1JZCwncGFyZW50Jy4kY29udGVudC0+bUlkLidMaXN0T3JkZXInKTsKCSRsaXN0QXJyYXlbJ3BhZ2VwYXJlbnRzJ11bJGNvbnRlbnQtPm1JZF0gPSAncGFyZW50Jy4kY29udGVudC0+bUlkLidMaXN0T3JkZXInOwoJJG91dHB1dCAuPSAnPC91bD4nOwogICAgICB9CiAgICAKICAgIGlmIChUUlVFID09ICRzaG93X2NoaWxkcmVuICYmICRyb290LT5nZXRDaGlsZHJlbkNvdW50KCk+MCAmJiBGQUxTRSA9PSBlbXB0eSgkdGhpcy0+b3BlbmVkQXJyYXlbJGNvbnRlbnQtPm1JZF0pKQogICAgICB7Cgkkb3V0cHV0IC49ICc8dWwgY2xhc3M9InBhZ2VzIj4nLiJcbiI7CgkkY2hpbGRyZW4gPSAmJHJvb3QtPmdldENoaWxkcmVuKCk7Cglmb3JlYWNoICgkY2hpbGRyZW4gYXMgJGNoaWxkKQoJICB7CgkgICAgJHRoaXMtPnNob3dfaCgkY2hpbGQsICRzb3J0YWJsZUxpc3RzLCAkbGlzdEFycmF5LCAkb3V0cHV0KTsKCSAgfQoJJG91dHB1dCAuPSAiPC91bD5cbiI7Cgkkb3V0cHV0IC49ICc8L2xpPic7CiAgICAgIH0KICAgIGVsc2UgCiAgICAgIHsKCWlmIChUUlVFID09ICRzaG93X3BhZ2VfaGVhZGVyKQoJICB7CQoJICAgICRvdXRwdXQgLj0gIjwvbGk+XG4iOwoJICB9CiAgICAgIH0KICB9CgogIGZ1bmN0aW9uIHNob3dfaF9ibG9ja3MoJiRyb290LCAmJHNvcnRhYmxlTGlzdHMsICYkbGlzdEFycmF5KQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgICRpZCA9ICR0aGlzLT5tSWQ7CiAgICAkdGhlbWVPYmplY3QgPSAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ107CSAgCiAgICAkcmV0dXJuaWQgPSAkdGhpcy0+bVJldHVybmlkOwogICAgJG91dHB1dCA9ICcnOwogICAgJGNvbnRlbnQgPSAmJHJvb3QtPmdldENvbnRlbnQoKTsKICAgIAogICAgJG91dHB1dCAuPSAnPGxpIGlkPSJpdGVtXycuJGNvbnRlbnQtPklkKCkuJyI+Jy4iXG4iOwogICAgLy8gJG91dHB1dCAuPSAgJGNvbnRlbnQtPkhpZXJhcmNoeSgpOwogICAgCiAgICAvLyAkb3V0cHV0IC49ICcgUGFyZW50IFBhZ2U6ICcuJGNvbnRlbnQtPkdldFByb3BlcnR5VmFsdWUoJ3BhcmVudF9wYWdlX2lkJyk7CiAgICAkZWRpdEltZyA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLCBsYW5nKCdlZGl0JyksJycsJycsJ3N5c3RlbWljb24nKTsgICAKICAgICRvdXRwdXQgLj0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdGJsb2NrY29udGVudCcsICRyZXR1cm5pZCwgJGVkaXRJbWcsIGFycmF5KCdwYXJlbnRfcGFnZV9pZCcgPT4gJGNvbnRlbnQtPlBhcmVudFBhZ2VJZCgpLCAnY29udGVudF9pZCcgPT4gJGNvbnRlbnQtPm1JZCksICcnLCBmYWxzZSwgZmFsc2UsICcnKS4nICc7CiAgICAkb3V0cHV0IC49ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXRibG9ja2NvbnRlbnQnLCAkcmV0dXJuaWQsICRjb250ZW50LT5tTmFtZSwgYXJyYXkoJ3BhcmVudF9wYWdlX2lkJyA9PiAkY29udGVudC0+UGFyZW50UGFnZUlkKCksJ2NvbnRlbnRfaWQnID0+ICRjb250ZW50LT5tSWQpLCAnJywgZmFsc2UsIGZhbHNlLCAnJyk7CiAgICAvLyAkb3V0cHV0IC49ICcgPGEgaHJlZj0iZWRpdGNvbnRlbnQucGhwP2NvbnRlbnRfaWQ9Jy4kY29udGVudC0+bUlkLiciPicuJGNvbnRlbnQtPm1OYW1lLic8L2E+ICc7CiAgICAkb3V0cHV0IC49ICcgKCcuJGNvbnRlbnQtPkZyaWVuZGx5TmFtZSgpLicpICc7CiAgICAvLyAgJG91dHB1dCAuPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRibG9ja2NvbnRlbnQnLCAkcmV0dXJuaWQsICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsICR0aGlzLT5MYW5nKCdhZGRibG9jaycpLCcnLCcnLCdzeXN0ZW1pY29uJyksIGFycmF5KCdwYXJlbnRfaWQnID0+ICRjb250ZW50LT5tSWQpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnYWRkYmxvY2tjb250ZW50JywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnYWRkYmxvY2snKSwgYXJyYXkoJ3BhcmVudF9pZCcgPT4gJGNvbnRlbnQtPm1JZCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJyk7CiAgICAKICAgIGlmICgkcm9vdC0+Z2V0Q2hpbGRyZW5Db3VudCgpPjApCiAgICAgIHsKCS8vCSRvdXRwdXQgLj0gJ3dlIGhhdmUgY2hpbGRyZW4gaGVyZSc7CgkvLyAgICAgICRzb3J0YWJsZUxpc3RzLT5hZGRMaXN0KCdwYXJlbnQnLiRjb250ZW50LT5tSWQsJ3BhcmVudCcuJGNvbnRlbnQtPm1JZC4nTGlzdE9yZGVyJyk7CgkvLyAgICAgICRsaXN0QXJyYXlbJGNvbnRlbnQtPm1JZF0gPSAncGFyZW50Jy4kY29udGVudC0+bUlkLidMaXN0T3JkZXInOwoJJG91dHB1dCAuPSAnPHVsIGNsYXNzPSJwYWdlcyI+Jy4iXG4iOwoJCgkkY2hpbGRyZW4gPSAmJHJvb3QtPmdldENoaWxkcmVuKCk7Cglmb3JlYWNoICgkY2hpbGRyZW4gYXMgJGNoaWxkKQoJICB7CgkgICAgLy8gJG91dHB1dCAuPSAnc2ZzZGZzJzsKCSAgICAkdGhpcy0+c2hvd19oX2Jsb2NrcygkY2hpbGQsICRzb3J0YWJsZUxpc3RzLCAkbGlzdEFycmF5KTsKCSAgICAvLyAgJG91dHB1dCAuPSAnc2ZzZGZzJzsKCSAgfQoJCgkkb3V0cHV0IC49ICI8L3VsPlxuIjsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJGRlbGV0ZUltZyA9ICcgJy4kdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCBsYW5nKCdkZWxldGUnKSwnJywnJywnc3lzdGVtaWNvbicpOwoJJG91dHB1dCAuPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICAkZGVsZXRlSW1nLCBhcnJheSgnZGVsZXRlY29udGVudCcgPT4gJGNvbnRlbnQtPm1JZCkpOwoJJG91dHB1dCAuPSAiPC9saT5cbiI7CiAgICAgIH0KICAgICR0aGlzLT5tUGFnZUJsb2NrUGFyZW50c1skY29udGVudC0+UGFyZW50UGFnZUlkKCldWyRjb250ZW50LT5QYXJlbnRJZCgpXVtdID0gYXJyYXkoJ291dHB1dCcgPT4gJG91dHB1dCwgJ2lkJyA9PiAkY29udGVudC0+SWQoKSk7CiAgfQogIAogZnVuY3Rpb24gc2hvd19jaGlsZHJlbigkY29udGVudF9pZCwgJGlkLCAmJHNvcnRhYmxlTGlzdHMsICYkbGlzdEFycmF5KSAJIAogICB7IAkgCiAgICAgJG91dHB1dCA9ICcnOyAJIAogICAgIGZvcmVhY2ggKCR0aGlzLT5tUGFnZUJsb2NrUGFyZW50c1skY29udGVudF9pZF1bJGlkXSAgQVMgJGtleSA9PiAkdmFsdWUpIAkgCiAgICAgICAgICAgeyAJIAogICAgICAgICAgICAgJG91dHB1dCAuPSAkdmFsdWVbJ291dHB1dCddOyAJIAogICAgICAgICAgICAgaWYgKEZBTFNFID09IGVtcHR5KCR0aGlzLT5tUGFnZUJsb2NrUGFyZW50c1skY29udGVudF9pZF1bJHZhbHVlWydpZCddXSkpIAkgCiAgICAgICAgICAgICAgIHsgCSAKICAgICAgICAgICAgICAgICAkc29ydGFibGVMaXN0cy0+YWRkTGlzdCgnYmxvY2twYXJlbnQnLiR2YWx1ZVsnaWQnXSwnYmxvY2twYXJlbnQnLiR2YWx1ZVsnaWQnXS4nTGlzdE9yZGVyJyk7IAkgCiAgICAgICAgICAgICAgICAgJGxpc3RBcnJheVsnYmxvY2twYXJlbnRzJ11bJHZhbHVlWydpZCddXSA9ICdibG9ja3BhcmVudCcuJHZhbHVlWydpZCddLidMaXN0T3JkZXInOyAJIAogICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gJzx1bCBpZD0iYmxvY2twYXJlbnQnLiR2YWx1ZVsnaWQnXS4nIiBjbGFzcz0ic29ydGFibGVMaXN0Ij4nOyAJIAogICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gJHRoaXMtPnNob3dfY2hpbGRyZW4oJGNvbnRlbnRfaWQsICR2YWx1ZVsnaWQnXSwgJHNvcnRhYmxlTGlzdHMsICRsaXN0QXJyYXkpOyAJIAogICAgICAgICAgICAgICAgICRvdXRwdXQgLj0gJzwvdWw+JzsgCSAKICAgICAgICAgICAgICAgfSAJIAogICAgICAgICAgIH0gCSAKICAgICAgICAgcmV0dXJuICRvdXRwdXQ7IAkgCiAgIH0gCSAKICAJIAogIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQogIHsKICAgIHJldHVybiAnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KdWwucm9vdF9ibG9ja3MgbGkgewoJYmFja2dyb3VuZC1jb2xvcjogICNmZmZmZmY7Cn0KdWwuY2hpbGRfYmxvY2tzIGxpIHsKCWJhY2tncm91bmQtY29sb3I6ICNlY2VjZWMKfQp1bC5wYWdlcyBsaSB7CiBsaXN0LXN0eWxlOm5vbmU7Cn0KPC9zdHlsZT4KJzsKICB9CgogIGZ1bmN0aW9uIFNlYXJjaFJlc3VsdCgkcmV0dXJuaWQsICRibG9ja19pZCwgJGF0dHIgPSAnJykKICB7CiAgICBnbG9iYWwgJGdDbXM7CiAgICAkaG0gPSYgJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgaWYgKCRhdHRyID09ICdibG9jaycpCiAgICAgIHsKCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCSRxID0gIlNFTEVDVCBjb250ZW50X25hbWUscGFyZW50X3BhZ2VfaWQsY29udGVudF9hbGlhcyBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfcGFnZWJsb2Nrc19jb250ZW50ICBXSEVSRSBjb250ZW50X2lkID0gPyI7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGJsb2NrX2lkICkgKTsKCWlmICgkZGJyZXN1bHQpCgkgIHsKCSAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoJCSAgCgkJICAvLzAgcG9zaXRpb24gaXMgdGhlIHByZWZpeCBkaXNwbGF5ZWQgaW4gdGhlIGxpc3QgcmVzdWx0cy4KCQkgICRyZXN1bHRbMF0gPSAkdGhpcy0+R2V0RnJpZW5kbHlOYW1lKCk7CgkJICAKCQkgIC8vMSBwb3NpdGlvbiBpcyB0aGUgdGl0bGUKCQkgICRyZXN1bHRbMV0gPSAkcm93Wydjb250ZW50X25hbWUnXTsKCQkgIAoJCSAgLy8yIHBvc2l0aW9uIGlzIHRoZSBVUkwgdG8gdGhlIHRpdGxlLgoJCSAgLy8gJHByZXR0eXVybCA9ICdwYWdlYmxvY2tzLycgLiAkYmxvY2tfaWQ7CgkJICAkY3Vybm9kZSA9JiAkaG0tPmdldE5vZGVCeUlkKCRyb3dbJ3BhcmVudF9wYWdlX2lkJ10pOwoJCSAgJGN1cmNvbnRlbnQgPSYgJGN1cm5vZGUtPkdldENvbnRlbnQoKTsKCQkgICRyZXN1bHRbMl0gPSAkY3VyY29udGVudC0+R2V0VVJMKCkuJyMnLiRyb3dbJ2NvbnRlbnRfYWxpYXMnXTsKCQkgIC8vICRyZXN1bHRbMl0gPSAkdGhpcy0+Q3JlYXRlTGluaygnY250bnQwMScsICdkZXRhaWwnLCAkcmV0dXJuaWQsICcnLCBhcnJheSgnYXJ0aWNsZWlkJyA9PiAkYXJ0aWNsZWlkKSAsJyMnLiRyb3dbJ25hbWUnXSwgdHJ1ZSwgZmFsc2UsICcnLCB0cnVlLCAkcHJldHR5dXJsKTsKCQl9CgkgICAgfQoJICAKCSAgcmV0dXJuICRyZXN1bHQ7Cgl9Cn0KPz4K]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/addblock.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19Cgl7JGlucHV0X2hpZGRlbl9wYWdlX2lkfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPip7JHRleHRfdGl0bGV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0dGl0bGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0ZXh0X25hbWV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0bmFtZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHRfY29udGVudH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRjb250ZW50fTwvcD4KCTwvZGl2PgogICAgICAgIHskYWRkaXRpb25hbF9ibG9ja3N9Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0ZXh0X3BhcmVudF9ibG9ja306PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcGFyZW50X2Jsb2NrfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGV4dF90ZW1wbGF0ZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdGVtcGxhdGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+Cnskd2VsY29tZV90ZXh0fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+CntpZiAkbWVzc2FnZSE9Jyd9PHA+eyRtZXNzYWdlfTwvcD57L2lmfQp7JHN0YXJ0Zm9ybX0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3NpbmdfbG91ZGx5fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zaW5nX2xvdWRseX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/default.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0iYmxvY2siIGlkPSJ7JGFsaWFzfSI+e2NvbnRlbnR9PC9kaXY+]]></data>
	</file>
	<file>
	  <filename>/templates/editblock.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+KnskdGV4dF90aXRsZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXR0aXRsZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHRfbmFtZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRuYW1lfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGV4dF9jb250ZW50fTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dGNvbnRlbnR9PC9wPgoJPC9kaXY+CiAgICAgICAgeyRhZGRpdGlvbmFsX2Jsb2Nrc30KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHRfcGFyZW50X2Jsb2NrfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wYXJlbnRfYmxvY2t9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0ZXh0X3RlbXBsYXRlfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90ZW1wbGF0ZX08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRjcmVhdGVkYXRldGV4dH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRjcmVhdGVkYXRlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kaWZ5ZGF0ZXRleHR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0bW9kaWZ5ZGF0ZX08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+KiB7JG5hbWV0ZXh0fTo8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskbmFtZWlucHV0fTwvcD4NCgk8L2Rpdj4NCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskY29udGVudHRleHR9OjwvcD4NCgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjb250ZW50aW5wdXR9PC9wPg0KCTwvZGl2Pg0KDQoJDQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4NCgk8L2Rpdj4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/heading2.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgyIGlkPSJ7JGFsaWFzfSI+eyR0aXRsZX08L2gyPgp7Y29udGVudH0=]]></data>
	</file>
	<file>
	  <filename>/templates/heading3.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzIGlkPSJ7JGFsaWFzfSI+eyR0aXRsZX08L2gzPgo8cD5Nb2RpZmllZDogeyRtb2RpZmllZH08L3A+Cntjb250ZW50fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/options.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRkZWZhdWx0dGVtcGxhdGV0ZXh0fTo8L3A+DQogICAgICAgICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRkZWZhdWx0dGVtcGxhdGVpbnB1dH08L3A+DQogICAgICAgIDwvZGl2Pg0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+DQoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRzaG93dG9jdGV4dH06PC9wPg0KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHNob3d0b2NpbnB1dH08L3A+DQoJPC9kaXY+DQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+DQoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fTwvcD4NCgk8L2Rpdj4NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/templatelist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCgk8dGhlYWQ+DQoJCTx0cj4NCgkJCTx0aD57JHRlbXBsYXRlbmFtZXRleHR9PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJPC90cj4NCgk8L3RoZWFkPg0KCTx0Ym9keT4NCgl7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQ0KCQk8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRlbnRyeS0+cm93Y2xhc3N9JzsiPg0KCQkJPHRkPnskZW50cnktPm5hbWV9PC90ZD4NCgkJCTx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPg0KCQkJPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4NCgkJPC90cj4NCgl7L2ZvcmVhY2h9DQoJPC90Ym9keT4NCjwvdGFibGU+DQoNCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4NCgk8cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskYWRkbGlua308L3A+DQo8L2Rpdj4NCg==]]></data>
	</file>
	<file>
	  <filename>/Tree/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/Tree/BlockTree.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy8gKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwovLyB8IENvcHlyaWdodCAoYykgMjAwMi0yMDAzLCBSaWNoYXJkIEhleWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgQWxsIHJpZ2h0cyByZXNlcnZlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCAgICB8Ci8vIHwgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zICAgIHwKLy8gfCBhcmUgbWV0OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgbyBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAgICAgIHwKLy8gfCAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gICAgICAgfAovLyB8IG8gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgICB8Ci8vIHwgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIHwKLy8gfCAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24ufAovLyB8IG8gVGhlIG5hbWVzIG9mIHRoZSBhdXRob3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgICAgICB8Ci8vIHwgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gIHwKLy8gfCAgIHBlcm1pc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIHwgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAgIHwKLy8gfCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCAgICAgfAovLyB8IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiB8Ci8vIHwgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgIHwKLy8gfCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgfAovLyB8IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgICAgICB8Ci8vIHwgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIHwKLy8gfCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgfAovLyB8IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgICB8Ci8vIHwgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIHwKLy8gfCBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAgfAovLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLy8gfCBBdXRob3I6IFJpY2hhcmQgSGV5ZXMgPHJpY2hhcmRAcGhwZ3VydS5vcmc+ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgovKioKKiBBbiBPTyB0cmVlIGNsYXNzIGJhc2VkIG9uIHZhcmlvdXMgdGhpbmdzLCBpbmNsdWRpbmcgdGhlIE1TIHRyZWV2aWV3IGNvbnRyb2wKKiBJZiB5b3UgdXNlIHRoaXMgY2xhc3MgYW5kIHdpc2ggdG8gc2hvdyB5b3VyIGFwcHJlY2lhdGlvbiB0aGVuIHZpc2l0IG15Ciogd2lzaGxpc3QgaGVyZTogICBodHRwOi8vd3d3LmFtYXpvbi5jby51ay9leGVjL29iaWRvcy93aXNobGlzdC9TOEgyVU9HTVBaSzYKKgoqIFN0cnVjdHVyZSBvZiBvbmUgb2YgdGhlc2UgdHJlZXM6CioKKiAgVHJlZSBPYmplY3QKKiAgICB8CiogICAgKy0gVHJlZV9Ob2RlQ29sbGVjdGlvbiBvYmplY3QgKG5vZGVzIHByb3BlcnR5KQoqICAgICAgICAgIHwKKiAgICAgICAgICArLSBBcnJheSBvZiBUcmVlX05vZGUgb2JqZWN0cyAobm9kZXMgcHJvcGVydHkpCioKKiBVc2FnZToKKiAgICR0cmVlID0gJm5ldyBUcmVlKCk7CiogICAkbm9kZSAgPSAmJHRyZWUtPm5vZGVzLT5hZGROb2RlKG5ldyBUcmVlX05vZGUoJzEnKSk7CiogICAkbm9kZTIgPSAmJHRyZWUtPm5vZGVzLT5hZGROb2RlKG5ldyBUcmVlX05vZGUoJzInKSk7CiogICAkbm9kZTMgPSAmJHRyZWUtPm5vZGVzLT5hZGROb2RlKG5ldyBUcmVlX05vZGUoJzMnKSk7CiogICAkbm9kZTQgPSAmJG5vZGUzLT5ub2Rlcy0+YWRkTm9kZShuZXcgVHJlZV9Ob2RlKCczXzEnKSk7CiogICAkdHJlZS0+bm9kZXMtPnJlbW92ZU5vZGVBdCgwKTsKKiAgIHByaW50X3IoJHRyZWUpOwoqIAoqIFRoZSBkYXRhIGZvciBhIG5vZGUgaXMgc3VwcGxpZWQgYnkgZ2l2aW5nIGl0IGFzIHRoZSBhcmd1bWVudCB0byB0aGUgVHJlZV9Ob2RlCiogY29uc3RydWN0b3IuIFlvdSBjYW4gcmV0cmVpdmUgdGhlIGRhdGEgYnkgdXNpbmcgYSBub2RlcyBnZXRUYWcoKSBtZXRob2QsIGFuZCBhbHRlcgoqIGl0IHVzaW5nIHRoZSBzZXRUYWcoKSBtZXRob2QuCioKKiBQdWJsaWMgbWV0aG9kcyBmb3IgVHJlZSBjbGFzczoKKiAgIGhhc0NoaWxkcmVuKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciB0aGlzIHRyZWUgaGFzIGNoaWxkIG5vZGVzIG9yIG5vdAoqICAgJmNyZWF0ZUZyb21MaXN0KGFycmF5IGRhdGEgWywgc3RyaW5nIHNlcGFyYXRvcl0pICAgICAgICAgKHN0YXRpYykgUmV0dXJucyBhIHRyZWUgc3RydWN0dXJlIGNyZWF0ZSBmcm9tIHRoZSBzdXBwbGllZCBsaXN0CiogICAmY3JlYXRlRnJvbU15U1FMKGFycmF5ICRwYXJhbXMpICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljKSBSZXR1cm5zIGEgdHJlZSBzdHJ1Y3R1cmUgY3JlYXRlZCB1c2luZyBhIGNvbW1vbiBEQiBzdG9yYWdlIHRlY2huaXF1ZQoqICAgJmNyZWF0ZUZyb21YTUxUcmVlKG9iamVjdCAkeG1sVHJlZSBbLCBib29sICRpZ25vcmVSb290XSkgKHN0YXRpYykgUmV0dXJucyBhIHRyZWUgc3RydWN0dXJlIGNyZWF0ZWQgdXNpbmcgYW4gUEVBUjo6WE1MX1RyZWUgb2JqZWN0CiogICAmbWVyZ2Uob2JqZWN0ICYkdHJlZSBbLCAuLi5dKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZXJnZXMgdHdvIG9yIG1vcmUgVHJlZS9UcmVlX05vZGUgb2JqZWN0cy4gQ2FuIGJlIHVzZWQgc3RhdGljYWxseSBvciBub3QuCioKKiBQdWJsaWMgbWV0aG9kcyBmb3IgVHJlZV9Ob2RlIGNsYXNzOgoqICAgc2V0VGFnKG1peGVkIHRhZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXRzIHRoZSB0YWcgZGF0YQoqICAgZ2V0VGFnKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgdGhlIHRhZyBkYXRhCiogICAmcHJldlNpYmxpbmcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgcHJldmlvdXMgc2libGluZyBub2RlCiogICAmbmV4dFNpYmxpbmcoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgbmV4dCBzaWJsaW5nIG5vZGUKKiAgIHJlbW92ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB0aGlzIG5vZGUgZnJvbSB0aGUgY29sbGVjdGlvbgoqICAgJmdldFRyZWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBlbmNvbXBhc3NpbmcgVHJlZSBvYmplY3QKKiAgICZnZXRQYXJlbnQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcGFyZW50IFRyZWVfTm9kZSBvYmplY3QgaWYgYW55CiogICBoYXNDaGlsZHJlbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciB0aGlzIG5vZGUgaGFzIGNoaWxkIG5vZGVzIG9yIG5vdAoqICAgZGVwdGgoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkZXB0aCBvZiB0aGlzIG5vZGUgaW4gdGhlIHRyZWUgKHplcm8gYmFzZWQpCiogICBpc0NoaWxkT2YoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgd2hldGhlciB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgdGhlIGdpdmVuIG5vZGUvdHJlZQoqICAgbW92ZVRvKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlcyB0aGlzIG5vZGUgdG8gYmUgYSBjaGlsZCBvZiB0aGUgZ2l2ZW4gbm9kZS90cmVlCiogICBjb3B5VG8oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcGllcyB0aGlzIG5vZGUgdG8gYSBuZXcgY2hpbGQgb2YgdGhlIGdpdmVuIG5vZGUvdHJlZQoqICAgCiogUHVibGljIHZhcmlhYmxlcyBmb3IgVHJlZV9Ob2RlIGNsYXNzOgoqICAgJG5vZGVzCioKKiBQdWJsaWMgbWV0aG9kcyBmb3IgVHJlZV9Ob2RlQ29sbGVjdGlvbiBjbGFzczoKKiAgICZhZGROb2RlKFRyZWVfTm9kZSBub2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFkZHMgYSBub2RlIHRvIHRoZSBjb2xsZWN0aW9uCiogICAmZmlyc3ROb2RlKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IG5vZGUgaW4gdGhlIGNvbGxlY3Rpb24KKiAgICZsYXN0Tm9kZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJlaXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgbGFzdCBub2RlIGluIHRoZSBjb2xsZWN0aW9uCiogICAmcmVtb3ZlTm9kZUF0KGludCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdmVzIHRoZSBub2RlIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXggKG5vZGVzIGFyZSByZS1vcmRlcmVkKQoqICAgcmVtb3ZlTm9kZShUcmVlX05vZGUgbm9kZSBbLCBib29sZWFuIHNlYXJjaF0pICAgICAgUmVtb3ZlcyB0aGUgZ2l2ZW4gbm9kZSAobm9kZXMgYXJlIHJlLW9yZGVyZWQpCiogICBpbmRleE9mKFRyZWVfTm9kZSBub2RlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBub2RlCiogICBnZXROb2RlQ291bnQoW2Jvb2xlYW4gcmVjdXJzZV0pICAgICAgICAgICAgICAgICAgICBSZXRyZWl2ZXMgdGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgY29sbGVjdGlvbiwgb3B0aW9uYWxseSByZWN1cnNpbmcKKiAgIGdldEZsYXRMaXN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHJpZXZlcyBhbiBpbmRleGVkIGFycmF5IG9mIHRoZSBub2RlcyBmcm9tIHRvcCB0byBib3R0b20sIGxlZnQgdG8gcmlnaHQKKiAgIHRyYXZlcnNlKGNhbGxiYWNrIGZ1bmN0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgIFRyYXZlcnNlcyB0aGUgdHJlZSBzdXBwbHkgZWFjaCBub2RlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgoqICAgc2VhcmNoKG1peGVkIHNlYXJjaERhdGEgWywgYm9vbCBzdHJpY3RdKSAgICAgICAgICAgQmFzaWMgc2VhcmNoIGZ1bmN0aW9uIGZvciBzZWFyY2hpbmcgdGhlIFRyZWVzJyAidGFnIiBkYXRhCiogICBtb3ZlVG8oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlcyB0aGUgbm9kZXMgaW4gdGhpcyBjb2xsZWN0aW9uIHRvIHRoZSBnaXZlbiBub2RlL3RyZWUKKiAgIGNvcHlUbygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcGllcyB0aGUgbm9kZXMgaW4gdGhpcyBjb2xsZWN0aW9uIHRvIHRoZSBnaXZlbiBub2RlL3RyZWUKKi8KCmNsYXNzIEJsb2NrVHJlZQp7CiAgICAvKioKICAgICogVUlEIGNvdW50ZXIKICAgICogQHZhciBpbnRlZ2VyCiAgICAqLwogICAgdmFyICR1aWRDb3VudGVyOwogICAgCiAgICAvKioKICAgICogQ2hpbGQgbm9kZXMKICAgICogQHZhciBvYmplY3QKICAgICovCiAgICB2YXIgJG5vZGVzOwoKCS8qKgoJKiBDb250ZW50IGhhc2gKCSogQHZhciBhcnJheQoJKi8KCXZhciAkY29udGVudDsKCiAgICAvKioKICAgICogQ29uc3RydWN0b3IKICAgICovCiAgICBmdW5jdGlvbiBCbG9ja1RyZWUoKQogICAgewogICAgICAgICR0aGlzLT5ub2RlcyA9IG5ldyBCbG9ja1RyZWVfTm9kZUNvbGxlY3Rpb24oJHRoaXMpOwogICAgICAgICR0aGlzLT51aWRDb3VudGVyID0gMDsKCQkkdGhpcy0+Y29udGVudCA9IGFycmF5KCk7CiAgICB9CgoJZnVuY3Rpb24gJmdldFJvb3ROb2RlKCkKCXsKCQlyZXR1cm4gJHRoaXM7Cgl9CgkKCWZ1bmN0aW9uIGdldENoaWxkcmVuQ291bnQoKQoJewoJCXJldHVybiBjb3VudCgkdGhpcy0+bm9kZXMtPm5vZGVzKTsKCX0KCQoJZnVuY3Rpb24gJmdldE5vZGVCeUlEKCRpZCkKCXsKCQkkcmVzdWx0ID0gbnVsbDsKCQlpZiAoJGlkKQoJCXsKCQkJZGVidWdfYnVmZmVyKCdzdGFydCBmaW5kTm9kZUJ5VGFnJyk7CgkJCSRyZWYgPSBudWxsOwoJCQkkcmVzdWx0ID0mICR0aGlzLT5maW5kTm9kZUJ5VGFnKCRpZCwgJHJlZik7CgkJCWRlYnVnX2J1ZmZlcignZW5kIGZpbmROb2RlQnlUYWcnKTsKCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkKCWZ1bmN0aW9uICZzdXJlR2V0Tm9kZUJ5SUQoJGlkKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0Tm9kZUJ5SUQoJGlkKTsKCX0KCQoJZnVuY3Rpb24gJmdldE5vZGVCeUFsaWFzKCRhbGlhcykKCXsKCQkkcmVzdWx0ID0gbnVsbDsKCQkkaWQgPSBCbG9ja0NvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoJGFsaWFzKTsKCQlpZiAoJGlkKQoJCXsKCQkJJHJlc3VsdCA9JiAkdGhpcy0+Z2V0Tm9kZUJ5SWQoJGlkKTsKCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkKCWZ1bmN0aW9uICZzdXJlR2V0Tm9kZUJ5QWxpYXMoJGFsaWFzKQoJewoJCXJldHVybiAkdGhpcy0+Z2V0Tm9kZUJ5QWxpYXMoJGFsaWFzKTsKCX0KCQoJZnVuY3Rpb24gJmdldE5vZGVCeUhpZXJhcmNoeSgkcG9zaXRpb24pCgl7CgkJJHJlc3VsdCA9IG51bGw7CgkJJGlkID0gQmxvY2tDb250ZW50TWFuYWdlcjo6R2V0UGFnZUlERnJvbUhpZXJhcmNoeSgkcG9zaXRpb24pOwoJCWlmICgkaWQpCgkJewoJCQkkcmVzdWx0ID0mICR0aGlzLT5nZXROb2RlQnlJZCgkaWQpOwoJCX0KCQlyZXR1cm4gJHJlc3VsdDsKCX0KCQoJLyoqCiAgICAqIFJldHVybnMgdHJ1ZS9mYWxzZSBhcyB0byB3aGV0aGVyIHRoaXMgbm9kZQoJKiBoYXMgYW55IGNoaWxkIG5vZGVzIG9yIG5vdC4KCSoKCSogQHJldHVybiBib29sIEFueSBjaGlsZCBub2RlcyBvciBub3QKICAgICovCglmdW5jdGlvbiBoYXNDaGlsZHJlbigpCgl7CgkJcmV0dXJuICFlbXB0eSgkdGhpcy0+bm9kZXMtPm5vZGVzKTsKCX0KCQoJLyoqCgkqIFJldHVybnMgYWxsIHRoZSBjaGlsZCBub2RlcyBmb3IgdGhpcwoJKiBub2RlLgoJKgoJKiBAcmV0dXJuIGFycmF5IEFsbCBvZiB0aGUgY2hpbGQgbm9kZXMKCSovCglmdW5jdGlvbiAmZ2V0Q2hpbGRyZW4oKQoJewoJCXJldHVybiAkdGhpcy0+bm9kZXMtPm5vZGVzOwoJfQoJCglmdW5jdGlvbiAmZ2V0RmxhdExpc3QoKQoJewoJCXJldHVybiAkdGhpcy0+bm9kZXMtPmdldEZsYXRMaXN0KCk7Cgl9CglmdW5jdGlvbiAmZ2V0RmxhdHRlbmVkQ2hpbGRyZW4oKQoJewoJCXJldHVybiAkdGhpcy0+bm9kZXMtPmdldEZsYXRMaXN0KCk7Cgl9CgkKCS8qKgoJKiBSZXR1cm5zIGEgbm9kZSBhbnl3aGVyZSBpbiB0aGUgdHJlZSBnaXZlbiBhIHRhZyBuYW1lLgoJKiBBIG51bGwgaXMgcmV0dXJuZWQgaWYgdGhlIG5vZGUgaXNuJ3QgZm91bmQuCgkqIAoJKiBAcmV0dXJuIG9iamVjdCBUaGUgZm91bmQgbm9kZQoJKi8KCWZ1bmN0aW9uICZmaW5kTm9kZUJ5VGFnKCR0YWduYW1lLCAmJGNvbCkKCXsKCQlpZiAoJGNvbCA9PSBudWxsKQoJCQkkY29sID0gJHRoaXM7CgkJCgkJJHJlc3VsdCA9IG51bGw7CgkJCgkJZm9yICgkaSA9IDA7ICRpIDwgY291bnQoJGNvbC0+bm9kZXMtPm5vZGVzKTsgJGkrKykKCQl7CgkJCWlmICgkY29sLT5ub2Rlcy0+bm9kZXNbJGldLT5nZXRUYWcoKSA9PSAkdGFnbmFtZSkKCQkJCXJldHVybiAkY29sLT5ub2Rlcy0+bm9kZXNbJGldOwoJCQkkcmVzdWx0ID0mICR0aGlzLT5maW5kTm9kZUJ5VGFnKCR0YWduYW1lLCAkY29sLT5ub2Rlcy0+bm9kZXNbJGldKTsKCQkJaWYgKCRyZXN1bHQpCgkJCQlicmVhazsKCQl9CgkJCgkJcmV0dXJuICRyZXN1bHQ7Cgl9CiAgICAKICAgIC8qKgogICAgKiBDcmVhdGVzIGEgdHJlZSBzdHJ1Y3R1cmUgZnJvbSBhIGxpc3Qgb2YgaXRlbXMuCiAgICAqIEl0ZW1zIG11c3QgYmUgc2VwYXJhdGVkIHVzaW5nIHRoZSBzdXBwbGllZCBzZXBhcmF0b3IuCiAgICAqIEVnOiAgICBhcnJheSgnZm9vJywKICAgICogICAgICAgICAgICAgICdmb28vYmFyJywKICAgICogICAgICAgICAgICAgICdmb28vYmFyL2plbGxvJywKICAgICogICAgICAgICAgICAgICdmb28vYmFyL2plbGxvMicsCiAgICAqICAgICAgICAgICAgICAnZm9vL2JhcjIvamVsbG8nKQogICAgKgogICAgKiBXb3VsZCBjcmVhdGUgYSBzdHJ1Y3R1cmUgdGh1czoKICAgICogICBmb28KICAgICogICAgKy1iYXIKICAgICogICAgfCAgKy1qZWxsbwogICAgKiAgICB8ICArLWplbGxvMgogICAgKiAgICArLWJhcjIKICAgICogICAgICAgKy1qZWxsbwogICAgKiAKICAgICogRXhhbXBsZSBjb2RlOgogICAgKiAgICRsaXN0ID0gYXJyYXkoJ0Zvby9CYXIvYmxhYXQnLCAnRm9vJywgJ0Zvby9CYXInLCAnRm9vL0Jhci9KZWxsbycsICdGb28vQmFyL0plbGxvMicsICdGb28vQmFyMi9KZWxsby9KZWxsbzInKTsKICAgICogICAkdHJlZSA9IFRyZWU6OmNyZWF0ZUZyb21MaXN0KCRsaXN0KTsKICAgICoKICAgICogQHBhcmFtICBhcnJheSAgJGRhdGEgICAgICBUaGUgbGlzdCBhcyBhbiBpbmRleGVkIGFycmF5CiAgICAqIEBwYXJhbSAgc3RyaW5nICRzZXBhcmF0b3IgVGhlIHNlcGFyYXRvciB0byB1c2UKICAgICogQHJldHVybiBvYmplY3QgICAgICAgICAgICBBIHRyZWUgc3RydWN0dXJlIChUcmVlIG9iamVjdCkKICAgICovCiAgICBmdW5jdGlvbiAmY3JlYXRlRnJvbUxpc3QoJGRhdGEsICRzZXBhcmF0b3IgPSAnLycpCiAgICB7CiAgICAgICAgJG5vZGVMaXN0ID0gYXJyYXkoKTsKICAgICAgICAkdHJlZSAgICAgPSYgbmV3IEJsb2NrVHJlZSgpOwoKICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCRkYXRhKTsgJGkrKykgewogICAgICAgICAgICAkcGF0aFBhcnRzID0gZXhwbG9kZSgkc2VwYXJhdG9yLCAkZGF0YVskaV0pOwoKICAgICAgICAgICAgLy8gSWYgb25seSBvbmUgcGFydCB0aGVuIGFkZCBpdCBhcyBhIHJvb3Qgbm9kZSBpZgogICAgICAgICAgICAvLyBpdCdzIG5vdCBhbHJlYWR5IHByZXNlbnQuCiAgICAgICAgICAgIGlmIChjb3VudCgkcGF0aFBhcnRzKSA9PSAxKSB7CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRub2RlTGlzdFskcGF0aFBhcnRzWzBdXSkpIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJG5vZGVMaXN0WyRwYXRoUGFydHNbMF1dID0gJm5ldyBCbG9ja1RyZWVfTm9kZShhcnJheSgkcGF0aFBhcnRzWzBdLCAkZGF0YVskaV0pKTsKICAgICAgICAgICAgICAgICAgICAkdHJlZS0+bm9kZXMtPmFkZE5vZGUoJG5vZGVMaXN0WyRwYXRoUGFydHNbMF1dKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIE11bHRpcGxlIHBhcnRzIG1lYW5zIGVhY2ggcGFydC9wYXJlbnQgY29tYmluYXRpb24KICAgICAgICAgICAgLy8gbmVlZHMgY2hlY2tpbmcgdG8gc2VlIGlmIGl0IG5lZWRzIGFkZGluZy4KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHRyZWU7CgogICAgICAgICAgICAgICAgZm9yICgkaj0wOyAkajxjb3VudCgkcGF0aFBhcnRzKTsgJGorKykgewogICAgICAgICAgICAgICAgICAgICRjdXJyZW50UGF0aCA9IGltcGxvZGUoJHNlcGFyYXRvciwgYXJyYXlfc2xpY2UoJHBhdGhQYXJ0cywgMCwgJGogKyAxKSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkbm9kZUxpc3RbJGN1cnJlbnRQYXRoXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHBhcmVudCBvYmplY3QgdG8gYmUgdGhlIGV4aXN0aW5nIG5vZGUKICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmVudE9iaiA9ICYkbm9kZUxpc3RbJGN1cnJlbnRQYXRoXTsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG5vZGVMaXN0WyRjdXJyZW50UGF0aF0gPSAmbmV3IEJsb2NrVHJlZV9Ob2RlKGFycmF5KCRwYXRoUGFydHNbJGpdLCAkY3VycmVudFBhdGgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHBhcmVudCBvYmplY3QgdG8gYmUgdGhlIG5ldyBub2RlCiAgICAgICAgICAgICAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHBhcmVudE9iai0+bm9kZXMtPmFkZE5vZGUoJG5vZGVMaXN0WyRjdXJyZW50UGF0aF0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gJHRyZWU7CiAgICB9CgogICAgCiAgICAvKioKICAgICogTWVyZ2VzIHR3byBvciBtb3JlIHRyZWUgc3RydWN0dXJlcyBpbnRvIG9uZS4gQ2FuIHRha2UgZWl0aGVyIAogICAgKiBUcmVlIG9iamVjdHMgb3IgVHJlZV9Ob2RlIG9iamVjdHMgYXMgYXJndW1lbnRzIHRvIG1lcmdlLiBUaGlzIG1lcmdlCiAgICAqIHNpbXBseSBtZWFucyB0aGUgbm9kZXMgZnJvbSB0aGUgc2Vjb25kKyBhcmd1bWVudChzKSBhcmUgYWRkZWQgdG8KICAgICogdGhlIGZpcnN0LgogICAgKgogICAgKiBAcGFyYW0gb2JqZWN0ICR0cmVlIFRoZSBUcmVlL1RyZWVfTm9kZSBvYmplY3QgdG8gbWVyZ2Ugc3Vic2VxdWVudAogICAgKiAgICAgICAgICAgICAgICAgICAgIFRyZWUvVHJlZV9Ob2RlIG9iamVjdHMgd2l0aC4KICAgICogQHBhcmFtIC4uLiAgICAgICAgICBBbnkgbnVtYmVyIG9mIFRyZWUgb3IgVHJlZV9Ob2RlIG9iamVjdHMgdG8gYmUgbWVyZ2VkCiAgICAqICAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGUgZmlyc3QgYXJndW1lbnQuCiAgICAqIEByZXR1cm4gb2JqZWN0ICAgICAgUmVzdWx0aW5nIG1lcmdlZCBUcmVlL1RyZWVfTm9kZSBvYmplY3QKICAgICovCiAgICBmdW5jdGlvbiAmbWVyZ2UoJiR0cmVlKQogICAgewogICAgICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgICAgIGFycmF5X3NoaWZ0KCRhcmdzKTsKCiAgICAgICAgZm9yICgkaT0wOyAkaTxjb3VudCgkYXJncyk7ICRpKyspIHsKICAgICAgICAgICAgZm9yICgkaj0wOyAkajxjb3VudCgkYXJnc1skaV0tPm5vZGVzLT5ub2Rlcyk7ICRqKyspIHsKICAgICAgICAgICAgICAgICR0cmVlLT5ub2Rlcy0+YWRkTm9kZSgkYXJnc1skaV0tPm5vZGVzLT5ub2Rlc1skal0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiAkdHJlZTsKICAgIH0KfQoKCi8qKgoqIEEgbm9kZSBjbGFzcyB0byBjb21wbGVtZW50IHRoZSBhYm92ZQoqIHRyZWUgY2xhc3MKKi8KY2xhc3MgQmxvY2tUcmVlX05vZGUKewogICAgLyoqCiAgICAqIFRoZSBkYXRhIHRoYXQgdGhpcyBub2RlIGhvbGRzCiAgICAqIEB2YXIgbWl4ZWQKICAgICovCiAgICB2YXIgJHRhZzsKCiAgICAvKioKICAgICogUGFyZW50IG5vZGUKICAgICogQHZhciBvYmplY3QKICAgICovCiAgICB2YXIgJHBhcmVudDsKICAgIAogICAgLyoqCiAgICAqIFRoZSBtYXN0ZXIgVHJlZSBvYmplY3QKICAgICogQHZhciBvYmplY3QKICAgICovCiAgICB2YXIgJHRyZWU7CiAgICAKICAgIC8qKgogICAgKiBUaGUgbm9kZXMgY29sbGVjdGlvbgogICAgKiBAdmFyIG9iamVjdAogICAgKi8KICAgIHZhciAkbm9kZXM7CgogICAgLyoqCiAgICAqIENvbnN0cnVjdG9yCiAgICAqCiAgICAqIEBwYXJhbSBtaXhlZCAkdGFnIFRoZSBkYXRhIHRoYXQgdGhpcyBub2RlIHJlcHJlc2VudHMKICAgICovCiAgICBmdW5jdGlvbiBCbG9ja1RyZWVfTm9kZSgkdGFnID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cGFyZW50ID0gbnVsbDsKICAgICAgICAkdGhpcy0+bm9kZXMgID0gbmV3IEJsb2NrVHJlZV9Ob2RlQ29sbGVjdGlvbigkdGhpcyk7CgogICAgICAgIGlmICghaXNfbnVsbCgkdGFnKSkgewogICAgICAgICAgICAkdGhpcy0+dGFnID0gJHRhZzsKICAgICAgICB9CiAgICB9CgoJLyoqCgkqIEdldHMgdGhlIHVuZGVybHlpbmcgY29udGVudCBvZiB0aGlzIG5vZGUKCSovCglmdW5jdGlvbiAmZ2V0Q29udGVudCgpCgl7CgkJLy9UT0RPOiBMb29rdXAgbm9kZSBpbiB0cmVlJ3MgbGlzdAoJCS8vICAgICAgUHVsbCBpdCBmcm9tIHRoZSBkYiBpZiBpdCdzIG5vdCBsb2FkZWQgYWxyZWFkeQoJCS8vICAgICAgTG90cyBvZiByb29tIGZvciBvcHRpbWl6YXRpb24gaGVyZQoJCSRjb250ZW50ID0gbnVsbDsKCQkKCQkkdHJlZSA9JiAkdGhpcy0+Z2V0VHJlZSgpOwoJCWlmIChpc3NldCgkdHJlZS0+Y29udGVudFskdGhpcy0+Z2V0VGFnKCldKSkKCQl7CgkJCSRjb250ZW50ID0mICR0cmVlLT5jb250ZW50WyR0aGlzLT5nZXRUYWcoKV07CgkJfQoJCWVsc2UKCQl7CgkJCS8vQmFzaWMgb25lLiAgSnVzdCB0cnkgdG8gbG9hZCBpdCBzZXBhcmF0ZWx5CgkJCS8vaW50byBvdXIgbGlzdC4gIEdldCB0aGUgcHJvcHMsIHNpbmNlIGEgb25lIHRpbWVyCgkJCS8vd2lsbCBwcm9iYWJseSBoYXZlIHNvbWUgcHJvcGVydHkgc2hvd24KCQkJJGNvbnRlbnQgPSYgQmxvY2tDb250ZW50TWFuYWdlcjo6TG9hZENvbnRlbnRGcm9tSWQoJHRoaXMtPmdldFRhZygpLCB0cnVlKTsKCQkJJHRyZWUtPmNvbnRlbnRbJHRoaXMtPmdldFRhZygpXSA9JiAkY29udGVudDsKCQl9CgkJcmV0dXJuICRjb250ZW50OwoJfQogICAgCiAgICAvKioKICAgICogU2V0cyB0aGUgdGFnIGRhdGEKICAgICoKICAgICogQHBhcmFtIG1peGVkICR0YWcgVGhlIGRhdGEgdG8gc2V0IHRoZSB0YWcgdG8KICAgICovCiAgICBmdW5jdGlvbiBzZXRUYWcoJHRhZykKICAgIHsKICAgICAgICAkdGhpcy0+dGFnID0gJHRhZzsKICAgIH0KICAgIAogICAgLyoqCiAgICAqIFJldHVybnMgdGhlIHRhZyBkYXRhCiAgICAqCiAgICAqIEByZXR1cm4gbWl4ZWQgVGhlIHRhZyBkYXRhCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0VGFnKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRhZ1swXTsKICAgIH0KCiAgICAvKioKICAgICogU2V0cyB0aGUgbm9kZXMgVUlECiAgICAqIAogICAgKiBAcGFyYW0gaW50ZWdlciAkdWlkIFRoZSBVSUQKICAgICovCiAgICBmdW5jdGlvbiBzZXRVSUQoJiR1aWQpCiAgICB7CiAgICAgICAgJHRoaXMtPnVpZCA9ICsrJHVpZDsKCiAgICAgICAgLy8gU2V0IHVpZCBmb3IgY2hpbGQgbm9kZXMKICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCR0aGlzLT5ub2Rlcy0+bm9kZXMpOyAkaSsrKSB7CiAgICAgICAgICAgICR0aGlzLT5ub2Rlcy0+bm9kZXNbJGldLT5zZXRVSUQoJHVpZCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBub2RlIFVJRAogICAgKiAKICAgICogQHJldHVybiBpbnRlZ2VyIFRoZSBVSUQKICAgICovCiAgICBmdW5jdGlvbiBnZXRVSUQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dWlkOwogICAgfQoKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBwcmV2aW91cyBjaGlsZCBub2RlIGluIHRoZSBwYXJlbnRzIG5vZGUgYXJyYXksCiAgICAqIG9yIG51bGwgaWYgdGhpcyBub2RlIGlzIHRoZSBmaXJzdC4KICAgICoKICAgICogQHJldHVybiBvYmplY3QgQSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzIG5vZGUgaW4gdGhlIHBhcmVudAogICAgKiAgICAgICAgICAgICAgICBub2RlIGNvbGxlY3Rpb24KICAgICovCiAgICBmdW5jdGlvbiAmcHJldlNpYmxpbmcoKQogICAgewogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPnBhcmVudCkpIHsKICAgICAgICAgICAgJHBhcmVudE9iaiA9ICYkdGhpcy0+cGFyZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHRoaXMtPnRyZWU7CiAgICAgICAgfQoKICAgICAgICAkbXlJbmRleCA9ICRwYXJlbnRPYmotPm5vZGVzLT5pbmRleE9mKCR0aGlzKTsKCiAgICAgICAgaWYgKCRteUluZGV4ID4gMCkgewogICAgICAgICAgICByZXR1cm4gJHBhcmVudE9iai0+bm9kZXMtPm5vZGVzWyRteUluZGV4IC0gMV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICogUmV0dXJucyB0aGUgbmV4dCBjaGlsZCBub2RlIGluIHRoZSBwYXJlbnRzIG5vZGUgYXJyYXksCiAgICAqIG9yIG51bGwgaWYgdGhpcyBub2RlIGlzIHRoZSBsYXN0LgogICAgKgogICAgKiBAcmV0dXJuIG9iamVjdCBBIHJlZmVyZW5jZSB0byB0aGUgbmV4dCBub2RlIGluIHRoZSBwYXJlbnQKICAgICogICAgICAgICAgICAgICAgbm9kZSBjb2xsZWN0aW9uLgogICAgKi8KICAgIGZ1bmN0aW9uICZuZXh0U2libGluZygpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+cGFyZW50KSkgewogICAgICAgICAgICAkcGFyZW50T2JqID0gJiR0aGlzLT5wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHBhcmVudE9iaiA9ICYkdGhpcy0+dHJlZTsKICAgICAgICB9CgogICAgICAgICRteUluZGV4ID0gJHBhcmVudE9iai0+bm9kZXMtPmluZGV4T2YoJHRoaXMpOwoKICAgICAgICBpZiAoJG15SW5kZXggPCAoJHBhcmVudE9iai0+bm9kZXMtPmdldE5vZGVDb3VudCgpIC0gMSkpIHsKICAgICAgICAgICAgcmV0dXJuICRwYXJlbnRPYmotPm5vZGVzLT5ub2Rlc1skbXlJbmRleCArIDFdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgoJZnVuY3Rpb24gZ2V0U2libGluZ0NvdW50KCkKCXsKICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5wYXJlbnQpKSB7CiAgICAgICAgICAgICRwYXJlbnRPYmogPSAmJHRoaXMtPnBhcmVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcGFyZW50T2JqID0gJiR0aGlzLT50cmVlOwogICAgICAgIH0KCQkKCQlyZXR1cm4gJHBhcmVudE9iai0+bm9kZXMtPmdldE5vZGVDb3VudCgpOwoJfQogICAgCiAgICAvKioKICAgICogUmVtb3ZlcyB0aGlzIG5vZGUgZnJvbSBpdHMnIHBhcmVudC4gSWYgdGhpcwogICAgKiBub2RlIGhhcyBubyBwYXJlbnQgKGllIGl0cyBub3QgYmVlbiBhZGRlZCB0bwogICAgKiBhIFRyZWUgb3IgVHJlZV9Ob2RlIG9iamVjdCkgdGhlbiB0aGlzIG1ldGhvZAogICAgKiB3aWxsIGRvIG5vdGhpbmcuCiAgICAqLwogICAgZnVuY3Rpb24gcmVtb3ZlKCkKICAgIHsKICAgICAgICBpZiAoIWlzX251bGwoJHRoaXMtPnBhcmVudCkpIHsKICAgICAgICAgICAgJHRoaXMtPnBhcmVudC0+bm9kZXMtPnJlbW92ZU5vZGUoJHRoaXMpOwogICAgICAgIH0gZWxzZWlmICghaXNfbnVsbCgkdGhpcy0+dHJlZSkpIHsKCQkJJHRoaXMtPnRyZWUtPm5vZGVzLT5yZW1vdmVOb2RlKCR0aGlzKTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQogICAgfQoKICAgIC8qKgogICAgKiBTZXRzIHRoZSBtYXN0ZXIgVHJlZSBvYmplY3QgZm9yIHRoaXMKICAgICogbm9kZS4KICAgICoKICAgICogQHBhcmFtIG9iamVjdCAkdHJlZSBUaGUgVHJlZSBvYmplY3QgcmVmZXJlbmNlCiAgICAqLwogICAgZnVuY3Rpb24gc2V0VHJlZSgmJHRyZWUpCiAgICB7CiAgICAgICAgJHRoaXMtPnRyZWUgPSAmJHRyZWU7CgogICAgICAgIC8vIFNldCB0cmVlIGZvciBjaGlsZCBub2RlcwogICAgICAgIGZvciAoJGk9MDsgJGk8Y291bnQoJHRoaXMtPm5vZGVzLT5ub2Rlcyk7ICRpKyspIHsKICAgICAgICAgICAgJHRoaXMtPm5vZGVzLT5ub2Rlc1skaV0tPnNldFRyZWUoJHRyZWUpOwogICAgICAgIH0KICAgIH0KCQoJLyoqCiAgICAqIFJldHVybnMgdGhlIHRyZWUgb2JqZWN0IHdoaWNoIHRoaXMgbm9kZSBpcyBhdHRhY2hlZAoJKiB0byAoaWYgYW55KS4KCSoKCSogQHJldHVybiBvYmplY3QgVGhlIGVuY29tcGFzc2luZyBUcmVlIG9iamVjdAogICAgKi8KCWZ1bmN0aW9uICZnZXRUcmVlKCkKCXsKCQlyZXR1cm4gJHRoaXMtPnRyZWU7Cgl9CgogICAgLyoqCiAgICAqIFNldHMgdGhlIHBhcmVudCBub2RlIG9mIHRoZSBub2RlLgogICAgKgogICAgKiBAcGFyYW0gb2JqZWN0ICRub2RlIFRoZSBwYXJlbnQgbm9kZQogICAgKi8KICAgIGZ1bmN0aW9uIHNldFBhcmVudCgmJG5vZGUpCiAgICB7CiAgICAgICAgJHRoaXMtPnBhcmVudCA9ICYkbm9kZTsKICAgIH0KCQoJLyoqCiAgICAqIFJldHVybnMgdGhlIHBhcmVudCBub2RlIGlmIGFueQoJKgoJKiBAcmV0dXJuIG9iamVjdCBUaGUgcGFyZW50IFRyZWVfTm9kZSBvYmplY3QKICAgICovCglmdW5jdGlvbiAmZ2V0UGFyZW50KCkKCXsKCQlyZXR1cm4gJHRoaXMtPnBhcmVudDsKCX0KCQoJLyoqCiAgICAqIFJldHVybnMgdGhlIHBhcmVudCBub2RlIGlmIGFueSAtLSBiYWNrd2FyZHMgY29tcGF0aWJsZQoJKiB3aXRoIHRoZSBvbGQgaGllcmFyY2h5IG1hbmFnZXIgY29kZS4KCSoKCSogQHJldHVybiBvYmplY3QgVGhlIHBhcmVudCBUcmVlX05vZGUgb2JqZWN0CiAgICAqLwoJZnVuY3Rpb24gJmdldFBhcmVudE5vZGUoKQoJewoJCXJldHVybiAkdGhpcy0+cGFyZW50OwoJfQoJCgkvKioKICAgICogUmV0dXJucyB0cnVlL2ZhbHNlIGFzIHRvIHdoZXRoZXIgdGhpcyBub2RlCgkqIGhhcyBhbnkgY2hpbGQgbm9kZXMgb3Igbm90LgoJKgoJKiBAcmV0dXJuIGJvb2wgQW55IGNoaWxkIG5vZGVzIG9yIG5vdAogICAgKi8KCWZ1bmN0aW9uIGhhc0NoaWxkcmVuKCkKCXsKCQlyZXR1cm4gIWVtcHR5KCR0aGlzLT5ub2Rlcy0+bm9kZXMpOwoJfQoJCgkvKioKCSogUmV0dXJucyBhbGwgdGhlIGNoaWxkIG5vZGVzIGZvciB0aGlzCgkqIG5vZGUuCgkqCgkqIEByZXR1cm4gYXJyYXkgQWxsIG9mIHRoZSBjaGlsZCBub2RlcwoJKi8KCWZ1bmN0aW9uICZnZXRDaGlsZHJlbigpCgl7CgkJLy9UT0RPOiBXcml0ZSBhIGJpdCBoZXJlIHRoYXQgcHVsbHMgYmFjayBhbGwKCQkvL2NoaWxkcmVuIGluIG9uZSBzaG90IGlmIHRoZXkncmUgbm90IGFscmVhZHkgbG9hZGVkCgkJaWYgKCR0aGlzLT5oYXNDaGlsZHJlbigpKSB7CgkJCSRub2RlID0mICR0aGlzLT5ub2Rlcy0+bm9kZXNbMF07CgkJCSRjaGVja2lkID0gJG5vZGUtPmdldFRhZygpOwoJCQkkdHJlZSA9JiAkdGhpcy0+Z2V0VHJlZSgpOwoJCQlpZiAoIWlzc2V0KCR0cmVlLT5jb250ZW50WyRjaGVja2lkXSkpIHsKCQkJCUJsb2NrQ29udGVudE1hbmFnZXI6OkxvYWRDaGlsZHJlbkludG9UcmVlKCR0aGlzLT5nZXRUYWcoKSwgJHRoaXMtPnRyZWUpOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+bm9kZXMtPm5vZGVzOwoJfQoJCglmdW5jdGlvbiBnZXRDaGlsZHJlbkNvdW50KCkKCXsKCQlyZXR1cm4gY291bnQoJHRoaXMtPm5vZGVzLT5ub2Rlcyk7Cgl9CgkKCS8qKgogICAgKiBSZXR1cm5zIHRoZSBkZXB0aCBpbiB0aGUgdHJlZSBvZiB0aGlzIG5vZGUKCSogVGhpcyBpcyBhIHplcm8gYmFzZWQgaW5kaWNhdG9yLCBzbyByb290IG5vZGVzCgkqIHdpbGwgaGF2ZSBhIGRlcHRoIG9mIDAgKHplcm8pLgoJKgoJKiBAcmV0dXJuIGludGVnZXIgVGhlIGRlcHRoIG9mIHRoZSBub2RlCiAgICAqLwoJZnVuY3Rpb24gZGVwdGgoKQoJewoJCSRkZXB0aCA9IDA7CgkJJGN1cnJMZXZlbCA9ICYkdGhpczsKCgkJd2hpbGUgKCRjdXJyTGV2ZWwtPnBhcmVudCkgewoJCQkkZGVwdGgrKzsKCQkJJGN1cnJMZXZlbCA9ICYkY3VyckxldmVsLT5wYXJlbnQ7CgkJfQoJCQoJCXJldHVybiAkZGVwdGg7Cgl9CgkKCS8qKgoJKiBSZXR1cm5zIHRoZSBkZXB0aCBpbiB0aGUgdHJlZS4gIFRoaXMgaXMgdG8gbWFrZSB0aGlzIGJhY2t3YXJkcwoJKiBjb21wYXRpYmxlIHdpdGggdGhlIG9sZCBoaWVyYXJjaHkgbWFuYWdlci4KCSoKCSogQHJldHVybiBpbnRlZ2VyIFRoZSBkZXB0aCBvZiB0aGUgbm9kZS4KCSovCglmdW5jdGlvbiBnZXRMZXZlbCgpCgl7CgkJcmV0dXJuICR0aGlzLT5kZXB0aCgpOwoJfQoJCgkvKioKICAgICogUmV0dXJucyB0cnVlL2ZhbHNlIGFzIHRvIHdoZXRoZXIgdGhpcyBub2RlIGlzIGEgY2hpbGQKCSogb2YgdGhlIGdpdmVuIG5vZGUuCgkqCgkqIEBwYXJhbSAgb2JqZWN0ICRwYXJlbnQgVGhlIHN1c3BlY3RlZCBwYXJlbnQgVHJlZV9Ob2RlIG9iamVjdAoJKiBAcmV0dXJuIGJvb2wgICAgICAgICAgIFdoZXRoZXIgdGhpcyBub2RlIGlzIGEgY2hpbGQgb2YgdGhlIHN1c3BlY3RlZCBwYXJlbnQKICAgICovCglmdW5jdGlvbiBpc0NoaWxkT2YoJHBhcmVudCkKCXsKCQlyZXR1cm4gJHRoaXMtPnBhcmVudC0+dWlkID09PSAkcGFyZW50LT51aWQ7Cgl9CgkKCS8qKgogICAgKiBNb3ZlcyB0aGlzIG5vZGUgdG8gYSBuZXcgcGFyZW50LiBBbGwgY2hpbGQgbm9kZXMgd2lsbAoJKiBiZSByZXRhaW5lZC4KCSoKCSogQHBhcmFtIG9iamVjdCAkbmV3UGFyZW50IFRoZSBuZXcgcGFyZW50IFRyZWVfTm9kZSBvciBUcmVlIG9iamVjdAogICAgKi8KCWZ1bmN0aW9uIG1vdmVUbygmJG5ld1BhcmVudCkKCXsKCQkvLyBTb21ld2hhdCBuYXN0eSBjb2RlCgkJJG5ld1BhcmVudC0+bm9kZXMtPm5vZGVzW10gPSAmJHRoaXM7CgoJCWlmICgkdGhpcy0+cGFyZW50KSB7CgkJCXVuc2V0KCR0aGlzLT5wYXJlbnQtPm5vZGVzLT5ub2Rlc1skdGhpcy0+cGFyZW50LT5ub2Rlcy0+aW5kZXhPZigkdGhpcyldKTsKCQkJJHRoaXMtPnBhcmVudC0+bm9kZXMtPm5vZGVzID0gYXJyYXlfdmFsdWVzKCR0aGlzLT5wYXJlbnQtPm5vZGVzLT5ub2Rlcyk7CgkJfSBlbHNlIHsKCQkJdW5zZXQoJHRoaXMtPnRyZWUtPm5vZGVzLT5ub2Rlc1skdGhpcy0+dHJlZS0+bm9kZXMtPmluZGV4T2YoJHRoaXMpXSk7CgkJCSR0aGlzLT50cmVlLT5ub2Rlcy0+bm9kZXMgPSBhcnJheV92YWx1ZXMoJHRoaXMtPnRyZWUtPm5vZGVzLT5ub2Rlcyk7CgkJfQoKCQlpZiAoc3RyY2FzZWNtcChnZXRfY2xhc3MoJG5ld1BhcmVudCksICdUcmVlX05vZGUnKSA9PSAwKSB7CgkJCSR0aGlzLT5wYXJlbnQgPSAmJG5ld1BhcmVudDsKCQl9IGVsc2UgewoJCQl1bnNldCgkdGhpcy0+cGFyZW50KTsKCQl9Cgl9CgkKCS8qKgogICAgKiBDb3BpZXMgdGhpcyBub2RlIHRvIGEgbmV3IHBhcmVudC4gVGhpcyBjb3BpZXMgdGhlIG5vZGUKCSogdG8gdGhlIG5ldyBwYXJlbnQgbm9kZS90cmVlIGFuZCBhbGwgaXRzIGNoaWxkIG5vZGVzIChpZQoJKiBhIGRlZXAgY29weSkuIFRlY2huaWNhbGx5LCBuZXcgbm9kZXMgYXJlIGNyZWF0ZWQgd2l0aCBjb3BpZXMKCSogb2YgdGhlIHRhZyBkYXRhLCBzaW5jZSB0aGlzIGlzIGZvciBhbGwgaW50ZW50cyBhbmQgcHVycG9zZXMKCSogdGhlIG9ubHkgdGhpbmcgdGhhdCBuZWVkcyBjb3B5aW5nLgoJKgoJKiBAcGFyYW0gIG9iamVjdCAkbmV3UGFyZW50IFRoZSBuZXcgcGFyZW50IFRyZWVfTm9kZSBvciBUcmVlIG9iamVjdAoJKiBAcmV0dXJuIG9iamVjdCAgICAgICAgICAgIFRoZSBuZXcgbm9kZQogICAgKi8KCWZ1bmN0aW9uICZjb3B5VG8oJiRuZXdQYXJlbnQpCgl7CgkJJG5ld05vZGUgPSAmJG5ld1BhcmVudC0+bm9kZXMtPmFkZE5vZGUobmV3IFRyZWVfbm9kZSgkdGhpcy0+Z2V0VGFnKCkpKTsKCgkJZm9yICgkaT0wOyAkaTxjb3VudCgkdGhpcy0+bm9kZXMtPm5vZGVzKTsgJGkrKykgewoJCQkkdGhpcy0+bm9kZXMtPm5vZGVzWyRpXS0+Y29weVRvKCRuZXdOb2RlKTsKCQl9CgkJCgkJcmV0dXJuICRuZXdOb2RlOwoJfQp9CgovKioKKiBBIGNsYXNzIHRvIHJlcHJlc2VudCBhIGNvbGxlY3Rpb24gb2YgY2hpbGQgbm9kZXMKKi8KY2xhc3MgIEJsb2NrVHJlZV9Ob2RlQ29sbGVjdGlvbgp7CiAgICAvKioKICAgICogQW4gYXJyYXkgb2YgY2hpbGQgbm9kZXMKICAgICogQHZhciBhcnJheQogICAgKi8KICAgIHZhciAkbm9kZXM7CiAgICAKICAgIC8qKgogICAgKiBUaGUgY29udGFpbmluZyBub2RlL3RyZWUgb2JqZWN0CiAgICAqIEB2YXIgb2JqZWN0CiAgICAqLwogICAgdmFyICRjb250YWluZXI7CiAgICAKICAgIC8qKgogICAgKiBXaGV0aGVyIHRoZSBjb250YWluZXIgaXMgYSB0cmVlIG9iamVjdCBvciBub3QKICAgICogQHZhciBib29sZWFuCiAgICAqLwogICAgdmFyICRjb250YWluZXJJc1RyZWU7CiAgICAKICAgIC8qKgogICAgKiBXaGV0aGVyIHRoZSBjb250YWluZXIgaXMgYSB0cmVlIG5vZGUgb2JqZWN0IG9yIG5vdAogICAgKiBAdmFyIGJvb2xlYW4KICAgICovCiAgICB2YXIgJGNvbnRhaW5lcklzTm9kZTsKCQoJLyoqCiAgICAqIFRlbXBvcmFyeSBob2xkZXIgZm9yIHRoZSBmb3VuZCBub2RlIHVzZWQgaW4gdGhlCgkqIHNlYXJjaCBmdW5jdGlvbi4KCSogQHZhciBvYmplY3QKICAgICovCgl2YXIgJHNlYXJjaEZvdW5kTm9kZTsKCiAgICAvKioKICAgICogQ29uc3RydWN0b3IKICAgICovCiAgICBmdW5jdGlvbiBCbG9ja1RyZWVfTm9kZUNvbGxlY3Rpb24oJiRjb250YWluZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPm5vZGVzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVyID0gJiRjb250YWluZXI7CiAgICAgICAgJHRoaXMtPmNvbnRhaW5lcklzVHJlZSA9IChzdHJ0b2xvd2VyKGdldF9jbGFzcygkY29udGFpbmVyKSkgPT0gJ3RyZWUnKTsKICAgICAgICAkdGhpcy0+Y29udGFpbmVySXNOb2RlID0gKHN0cnRvbG93ZXIoZ2V0X2NsYXNzKCRjb250YWluZXIpKSA9PSAndHJlZV9ub2RlJyk7CiAgICB9CgogICAgLyoqCiAgICAqIEFkZHMgYSBub2RlIHRvIHRoaXMgbm9kZQogICAgKgogICAgKiBAcGFyYW0gIG9iamVjdCAkbm9kZSBUaGUgVHJlZV9Ob2RlIG9iamVjdAogICAgKiBAcmV0dXJuIG9iamVjdCAgICAgICBBIHJlZmVyZW5jZSB0byB0aGUgbmV3IG5vZGUgaW5zaWRlIHRoZSB0cmVlCiAgICAqLwogICAgZnVuY3Rpb24gJmFkZE5vZGUoJiRub2RlKQogICAgewogICAgICAgIC8vIENvbnRhaW5lciBpcyBhIG5vZGUKICAgICAgICBpZiAoJHRoaXMtPmNvbnRhaW5lcklzTm9kZSkgewogICAgICAgICAgICAkbm9kZS0+c2V0UGFyZW50KCR0aGlzLT5jb250YWluZXIpOwogICAgICAgICAgICAKICAgICAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+Y29udGFpbmVyLT50cmVlKSkgewogICAgICAgICAgICAgICAgJG5vZGUtPnNldFRyZWUoJHRoaXMtPmNvbnRhaW5lci0+dHJlZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIGlmICghZW1wdHkoJHRoaXMtPmNvbnRhaW5lci0+dWlkKSkgewogICAgICAgICAgICAgICAgJG5vZGUtPnNldFVJRCgkdGhpcy0+Y29udGFpbmVyLT50cmVlLT51aWRDb3VudGVyKTsKICAgICAgICAgICAgfQoKICAgICAgICAvLyBDb250YWluZXIgaXMgYSB0cmVlCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJG5vZGUtPnNldFRyZWUoJHRoaXMtPmNvbnRhaW5lcik7CiAgICAgICAgICAgICRub2RlLT5zZXRVSUQoJHRoaXMtPmNvbnRhaW5lci0+dWlkQ291bnRlcik7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bm9kZXNbXSA9ICYkbm9kZTsKCiAgICAgICAgcmV0dXJuICRub2RlOwogICAgfQoKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBub2RlIGluIHRoaXMgcGFydGljdWxhciBjb2xsZWN0aW9uCiAgICAqCiAgICAqIEByZXR1cm4gb2JqZWN0IFRoZSBmaXJzdCBub2RlLiBOVUxMIGlmIG5vIG5vZGVzLgogICAgKi8KICAgIGZ1bmN0aW9uICZmaXJzdE5vZGUoKQogICAgewogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPm5vZGVzKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm5vZGVzWzBdOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgLyoqCiAgICAqIFJldHVybnMgdGhlIGxhc3Qgbm9kZSBpbiB0aGlzIHBhcnRpY3VsYXIgY29sbGVjdGlvbgogICAgKgogICAgKiBAcmV0dXJuIG9iamVjdCBUaGUgbGFzdCBub2RlLiBOVUxMIGlmIG5vIG5vZGVzLgogICAgKi8KICAgIGZ1bmN0aW9uICZsYXN0Tm9kZSgpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+bm9kZXMpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bm9kZXNbY291bnQoJHRoaXMtPm5vZGVzKSAtIDFdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGNoaWxkIG5vZGVzIGFycmF5IGF0IHRoZQogICAgKiBzcGVjaWZpZWQgKHplcm8gYmFzZWQpIGluZGV4LgogICAgKgogICAgKiBAcGFybSAgIGludGVnZXIgJGluZGV4IFRoZSBpbmRleCB0byByZW1vdmUKICAgICogQHJldHVybiBvYmplY3QgICAgICAgICBUaGUgbm9kZSB0aGF0IHdhcyByZW1vdmVkLCBvciBudWxsCiAgICAqICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGhpcyBpbmRleCBkaWQgbm90IGV4aXN0CiAgICAqLwogICAgZnVuY3Rpb24gJnJlbW92ZU5vZGVBdCgkaW5kZXgpCiAgICB7CiAgICAgICAgJG5vZGUgPSBudWxsOwogICAgICAgIGlmICghZW1wdHkoJHRoaXMtPm5vZGVzWyRpbmRleF0pKSB7CiAgICAgICAgICAgICRub2RlID0gJiR0aGlzLT5ub2Rlc1skaW5kZXhdOwoKICAgICAgICAgICAgLy8gVW5zZXQgcGFyZW50LCB0cmVlIGFuZCB1aWQgdmFsdWVzCiAgICAgICAgICAgIHVuc2V0KCRub2RlLT51aWQpOwogICAgICAgICAgICB1bnNldCgkbm9kZS0+cGFyZW50KTsKICAgICAgICAgICAgdW5zZXQoJG5vZGUtPnRyZWUpOwogICAgICAgICAgICB1bnNldCgkdGhpcy0+bm9kZXNbJGluZGV4XSk7CiAgICAgICAgICAgICR0aGlzLT5ub2RlcyA9IGFycmF5X3ZhbHVlcygkdGhpcy0+bm9kZXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRub2RlOwogICAgfQogICAgCiAgICAvKioKICAgICogUmVtb3ZlcyBhIG5vZGUgZnJvbSB0aGUgY2hpbGQgbm9kZXMgYXJyYXkgYnkgdXNpbmcKICAgICogdGhlIHVuaXF1ZSBJRCBzdG9yZWQgaW4gZWFjaCBpbnN0YW5jZQogICAgKgogICAgKiBAcGFyYW0gIG9iamVjdCAkbm9kZSAgIFRoZSBub2RlIHRvIHJlbW92ZQogICAgKiBAcGFyYW0gIGJvb2wgICAkc2VhcmNoIFdoZXRoZXIgdG8gc2VhcmNoIGNoaWxkIG5vZGVzCiAgICAqIEByZXR1cm4gYm9vbCAgICAgICAgICAgVHJ1ZS9GYWxzZQogICAgKi8KICAgIGZ1bmN0aW9uIHJlbW92ZU5vZGUoJiRub2RlLCAkc2VhcmNoID0gZmFsc2UpCiAgICB7CiAgICAgICAgZm9yICgkaT0wOyAkaTxjb3VudCgkdGhpcy0+bm9kZXMpOyAkaSsrKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+bm9kZXNbJGldLT5nZXRVSUQoKSA9PSAkbm9kZS0+Z2V0VUlEKCkpIHsKCiAgICAgICAgICAgICAgICAvLyBVbnNldCBwYXJlbnQsIHRyZWUgYW5kIHVpZCB2YWx1ZXMKICAgICAgICAgICAgICAgIHVuc2V0KCRub2RlLT51aWQpOwogICAgICAgICAgICAgICAgdW5zZXQoJG5vZGUtPnBhcmVudCk7CiAgICAgICAgICAgICAgICB1bnNldCgkbm9kZS0+dHJlZSk7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+bm9kZXNbJGldKTsKICAgICAgICAgICAgICAgICR0aGlzLT5ub2RlcyA9IEBhcnJheV92YWx1ZXMoJHRoaXMtPm5vZGVzKTsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9IGVsc2VpZiAoJHNlYXJjaCBBTkQgIWVtcHR5KCR0aGlzLT5ub2Rlc1skaV0tPm5vZGVzKSkgewogICAgICAgICAgICAgICAgJHNlYXJjaE5vZGVzW10gPSAkaTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoJHNlYXJjaCBBTkQgIWVtcHR5KCRzZWFyY2hOb2RlcykpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHNlYXJjaE5vZGVzIGFzICRpbmRleCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5ub2Rlc1skaW5kZXhdLT5yZW1vdmVOb2RlKCRub2RlLCB0cnVlKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICAKICAgIC8qKgogICAgKiBSZXR1cm5zIHRoZSBpbmRleCBpbiB0aGUgbm9kZXMgYXJyYXkgYXQgd2hpY2gKICAgICogdGhlIGdpdmVuIG5vZGUgcmVzaWRlcy4gVXNlZCBpbiB0aGUgcHJldi9uZXh0IFNpYmxpbmcKICAgICogbWV0aG9kcy4KICAgICoKICAgICogQHBhcmFtICBvYmplY3QgJG5vZGUgVGhlIG5vZGUgdG8gcmV0dXJuIHRoZSBpbmRleCBvZgogICAgKiBAcmV0dXJuIGludGVnZXIgICAgICBUaGUgaW5kZXggb2YgdGhlIG5vZGUgb3IgbnVsbCBpZgogICAgKiAgICAgICAgICAgICAgICAgICAgICBub3QgZm91bmQuCiAgICAqLwogICAgZnVuY3Rpb24gaW5kZXhPZigkbm9kZSkKICAgIHsKICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCR0aGlzLT5ub2Rlcyk7ICRpKyspIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5ub2Rlc1skaV0tPmdldFVJRCgpID09ICRub2RlLT5nZXRVSUQoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICAvKioKICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoaWxkIG5vZGVzIGluIHRoaXMgbm9kZS90cmVlLgogICAgKiBPcHRpb25hbGx5IHNlYXJjaGVzIHRoZSB0cmVlIGFuZCByZXR1cm5zIHRoZSBjdW11bGF0aXZlIGNvdW50LgogICAgKgogICAgKiBAcGFyYW0gIGJvb2wgICAgJHNlYXJjaCBTZWFyY2ggdHJlZSBmb3Igbm9kZWNvdW50IHRvbwogICAgKiBAcmV0dXJuIGludGVnZXIgICAgICAgICBUaGUgbnVtYmVyIG9mIG5vZGVzIGZvdW5kCiAgICAqLwogICAgZnVuY3Rpb24gZ2V0Tm9kZUNvdW50KCRzZWFyY2ggPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJHNlYXJjaCkgewogICAgICAgICAgICAkY291bnQgPSBjb3VudCgkdGhpcy0+bm9kZXMpOwogICAgICAgICAgICBmb3IgKCRpPTA7ICRpPGNvdW50KCR0aGlzLT5ub2Rlcyk7ICRpKyspIHsKICAgICAgICAgICAgICAgICRjb3VudCArPSAkdGhpcy0+bm9kZXNbJGldLT5ub2Rlcy0+Z2V0Tm9kZUNvdW50KHRydWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIAogICAgICAgICAgICByZXR1cm4gJGNvdW50OwogICAgICAgIH0gZWxzZSB7CgkgICAgCSRjb3VudCA9IGNvdW50KCR0aGlzLT5ub2Rlcyk7CiAgICAgICAgICAgIHJldHVybiAkY291bnQ7CiAgICAgICAgfQogICAgfQogICAgCiAgICAvKioKICAgICogUmV0dXJucyBhIGZsYXQgbGlzdCBvZiB0aGUgbm9kZSBjb2xsZWN0aW9uLiBUaGlzIGFycmF5IGNvbnRhaW5zIHJlZmVyZW5jZXMKCSogdG8gdGhlIG5vZGVzLgogICAgKgogICAgKiBAcmV0dXJuIGFycmF5IEZsYXQgbGlzdCBvZiB0aGUgbm9kZXMgZnJvbSB0b3AgdG8gYm90dG9tLCBsZWZ0IHRvIHJpZ2h0LgogICAgKi8KICAgIGZ1bmN0aW9uICZnZXRGbGF0TGlzdCgpCiAgICB7CiAgICAgICAgJHJldHVybiA9IGFycmF5KCk7CgoJCWZvciAoJGk9MDsgJGk8Y291bnQoJHRoaXMtPm5vZGVzKTsgJGkrKykgewoJCQkkcmV0dXJuW10gPSAmJHRoaXMtPm5vZGVzWyRpXTsKCQkJCgkJCWlmICghZW1wdHkoJHRoaXMtPm5vZGVzWyRpXS0+bm9kZXMpKSB7CgkJCQkkcmV0dXJuID0gYXJyYXlfbWVyZ2UoJHJldHVybiwgJHRoaXMtPm5vZGVzWyRpXS0+bm9kZXMtPmdldEZsYXRMaXN0KCkpOwoJCQl9CgkJfQogICAgICAgIAogICAgICAgIHJldHVybiAkcmV0dXJuOwogICAgfQogICAgCiAgICAvKioKICAgICogVHJhdmVyc2VzIHRoZSBub2RlIGNvbGxlY3Rpb24gYXBwbHlpbmcgYSBmdW5jdGlvbiB0byBlYWNoIGFuZCBldmVyeSBub2RlLgogICAgKiBUaGUgZnVuY3Rpb24gbmFtZSBnaXZlbiAodGhvdWdoIHRoaXMgY2FuIGJlIGFueXRoaW5nIHlvdSBjYW4gc3VwcGx5IHRvIAogICAgKiBjYWxsX3VzZXJfZnVuYygpLCBub3QganVzdCBhIG5hbWUpIHNob3VsZCB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50IHdoaWNoIGlzIHRoZQogICAgKiBub2RlIG9iamVjdCAoVHJlZV9Ob2RlIGNsYXNzKS4gWW91IGNhbiB0aGVuIGFjY2VzcyB0aGUgbm9kZXMgZGF0YSBieSB1c2luZwogICAgKiB0aGUgZ2V0VGFnKCkgbWV0aG9kLiBUaGUgdHJhdmVyc2FsIGdvZXMgZnJvbSB0b3AgdG8gYm90dG9tLCBsZWZ0IHRvIHJpZ2h0CiAgICAqIChpZSBzYW1lIG9yZGVyIGFzIHdoYXQgeW91IGdldCBmcm9tIGdldEZsYXRMaXN0KCkpLgogICAgKgogICAgKiAqKiBUaGUgbm9kZSBpcyBwYXNzZWQgYnkgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvbiEgKioKICAgICoKICAgICogQHBhcmFtIGNhbGxiYWNrICRmdW5jdGlvbiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gdXNlCiAgICAqLwogICAgZnVuY3Rpb24gdHJhdmVyc2UoJGZ1bmN0aW9uKQogICAgewogICAgICAgIGZvciAoJGk9MDsgJGk8Y291bnQoJHRoaXMtPm5vZGVzKTsgJGkrKykgewogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkZnVuY3Rpb24sIGFycmF5KCYkdGhpcy0+bm9kZXNbJGldKSk7CiAgICAgICAgICAgIAogICAgICAgICAgICAvLyBSZWN1cnNlCiAgICAgICAgICAgIGlmICghZW1wdHkoJHRoaXMtPm5vZGVzWyRpXSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5ub2Rlc1skaV0tPm5vZGVzLT50cmF2ZXJzZSgkZnVuY3Rpb24pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoJCgkvKioKICAgICogU2VhcmNoZXMgdGhlIG5vZGUgY29sbGVjdGlvbiBmb3IgYSBub2RlIHdpdGggYSB0YWcgbWF0Y2hpbmcKCSogd2hhdCB5b3Ugc3VwcGx5LiBUaGlzIGlzIGEgc2ltcGx5ICJ0YWcgPT0geW91ciBkYXRhIiBjb21wYXJpc29uLCAoPT09IGlmIHN0cmljdCBvcHRpb24gaXMgYXBwbGllZCkKCSogYW5kIG1vcmUgYWR2YW5jZWQgY29tcGFyaXNvbnMgY2FuIGJlIG1hZGUgdXNpbmcgdGhlIHRyYXZlcnNlKCkgbWV0aG9kLgoJKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgbnVsbCBpZiBub3RoaW5nIGlzIGZvdW5kLCBhbmQgYSByZWZlcmVuY2UgdG8gdGhlCgkqIGZpcnN0IGZvdW5kIG5vZGUgaWYgYSBtYXRjaCBpcyBtYWRlLgoJKgoJKiBAcGFyYW0gIG1peGVkICRkYXRhICAgRGF0YSB0byB0cnkgdG8gZmluZCBhbmQgbWF0Y2gKCSogQHBhcmFtICBtaXhlZCAkc3RyaWN0IFdoZXRoZXIgdG8gdXNlID09PSBvciBzaW1wbHkgPT0gdG8gY29tcGFyZQoJKiBAcmV0dXJuIG1peGVkICAgICAgICAgTnVsbCBpZiBubyBtYXRjaCwgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IGZvdW5kIG5vZGUKCSogICAgICAgICAgICAgICAgICAgICAgIGlmIGEgbWF0Y2ggaXMgbWFkZS4KICAgICovCglmdW5jdGlvbiAmc2VhcmNoKCYkZGF0YSwgJHN0cmljdCA9IGZhbHNlKQoJewoJCXN0YXRpYyAkc2VhcmNoRGF0YTsKCQlzdGF0aWMgJGNvbXBhcmlzb25UeXBlOwoJCQoJCSRyZXN1bHQgPSBudWxsOwoKCQlpZiAoaXNfb2JqZWN0KCRkYXRhKSBBTkQgc3RyY2FzZWNtcChnZXRfY2xhc3MoJGRhdGEpLCAnQmxvY2tUcmVlX05vZGUnKSA9PSAwKSB7CgkJCS8vIEluc2lkZSB0cmF2ZXJzaW9uCgkJCWlmIChlbXB0eSgkdGhpcy0+c2VhcmNoRm91bmROb2RlKSBBTkQgKCRjb21wYXJpc29uVHlwZSA/ICgkZGF0YS0+Z2V0VGFnKCkgPT09ICRzZWFyY2hEYXRhKSA6ICgkZGF0YS0+Z2V0VGFnKCkgPT0gJHNlYXJjaERhdGEpKSkgewoJCQkJJHRoaXMtPnNlYXJjaEZvdW5kTm9kZSA9ICYkZGF0YTsKCQkJfQoJCQlyZXR1cm4gJHJlc3VsdDsKCgkJfSBlbHNlIHsKCQkJLy8gU3RhcnQgdHJhdmVyc2luZwoJCQkkc2VhcmNoRGF0YSAgICAgPSAkZGF0YTsKCQkJJGNvbXBhcmlzb25UeXBlID0gJHN0cmljdDsKCQkJCgkJCSR0aGlzLT50cmF2ZXJzZShhcnJheSgmJHRoaXMsICdzZWFyY2gnKSk7CgkJfQoKCQlpZiAoIWVtcHR5KCR0aGlzLT5zZWFyY2hGb3VuZE5vZGUpKSB7CgkJCSRub2RlID0gJiR0aGlzLT5zZWFyY2hGb3VuZE5vZGU7CgkJCXVuc2V0KCR0aGlzLT5zZWFyY2hGb3VuZE5vZGUpOwoJCQlyZXR1cm4gJG5vZGU7CgkJfQoKCQlyZXR1cm4gJHJlc3VsdDsKCX0KCQoJLyoqCiAgICAqIE1vdmVzIHRoZSBub2RlcyBpbiB0aGlzIGNvbGxlY3Rpb24gKG5vdCB0aGUgY29sbGVjdGlvbiBpdHNlbGYpCgkqIHRvIHRoZSBnaXZlbiBuZXcgcGFyZW50LgoJKgoJKiBAcGFyYW0gb2JqZWN0ICRuZXdQYXJlbnQgVGhlIG5ldyBwYXJlbnQgVHJlZV9Ob2RlIG9yIFRyZWUgb2JqZWN0CiAgICAqLwoJZnVuY3Rpb24gbW92ZVRvKCYkbmV3UGFyZW50KQoJewoJCXdoaWxlICghZW1wdHkoJHRoaXMtPm5vZGVzKSkgewoJCQkkdGhpcy0+bm9kZXNbMF0tPm1vdmVUbygkbmV3UGFyZW50KTsKCQl9Cgl9CgkKCS8qKgogICAgKiBDb3BpZXMgdGhlIG5vZGVzIGluIHRoaXMgY29sbGVjdGlvbiAobm90IHRoZSBjb2xsZWN0aW9uIGl0c2VsZikKCSogdG8gdGhlIGdpdmVuIG5ldyBwYXJlbnQuCgkqCgkqIEBwYXJhbSBvYmplY3QgJG5ld1BhcmVudCBUaGUgbmV3IHBhcmVudCBUcmVlX05vZGUgb3IgVHJlZSBvYmplY3QKICAgICovCglmdW5jdGlvbiBjb3B5VG8oJiRuZXdQYXJlbnQpCgl7CgkJZm9yICgkaT0wOyAkaTxjb3VudCgkdGhpcy0+bm9kZXMpOyAkaSsrKSB7CgkJCSR0aGlzLT5ub2Rlc1skaV0tPmNvcHlUbygkbmV3UGFyZW50KTsKCQl9Cgl9Cn0KPz4K]]></data>
	</file>
</module>
