<?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>CodeMirror</name>
	<version>2.2.3</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLjxoMz5QYXJhbWV0cmU8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0cmV0IGFuZ2l2ZXIgaHZpbGtldCBzcHJvZyBkZXIgc2thbCBicnVnZXMgdGlsIHZpc25pbmcgZm9yIGJlcyZvc2xhc2g7Z2VuZGUuIElra2UgYWxsZSBtb2R1bGVyIHVuZGVyc3Qmb3NsYXNoO3R0ZXIgZWxsZXIgYmVoJm9zbGFzaDt2ZXIgZGV0dGUuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+TGF2ZXQgYWY6IE1vcnRlbiBQb3Vsc2VuICZsdDsmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0OyZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjIuMzxiciAvPjxiciAvPkhpc3RvcmlrIG92ZXIgJmFlbGlnO25kcmluZ2VyOjxiciAvPjx1bD4KICA8bGk+Mi4yLjMgLSBVcGRhdGVkIHRvIENNIDIuMi4zPC9saT4KICA8bGk+Mi4yLjIgLSBVcGRhdGVkIHRvIENNIDIuMi4xPC9saT4KICA8bGk+Mi4yLjEgLSBVcGRhdGVkIHRvIENNIDIuMi4wLCBhZGRlZCB0YWItd2lkdGggc2V0dGluZzwvbGk+CiAgPGxpPjIuMi4wIC0gVXBkYXRlZCB0byBDTSAyLjE1LCBhZGRlZCBvcHRpb25hbCBmdWxsc2NyZWVuIG1vZGU8L2xpPgogIDxsaT4yLjEuMiAtIFVwZGF0ZWQgdG8gQ00gMi4xMiwgY2xlYW5lciB3YXkgb2Ygc2F2aW5nIGVkaXRvciBjb250ZW50IHRvIHRleHRhcmVhPC9saT4KICA8bGk+Mi4xLjAgLSBVcGRhdGVkIHRvIENNIDIuMS4xLCBvbmNlIGFnYWluIGNoYW5nZSB0ZXN0bW9kZS4uLiA8L2xpPgogIDxsaT4yLjAuMSAtIFVwZGF0ZWQgdG8gQ00gMi4wLjE8L2xpPgogIDxsaT4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMCBhbmQgcmV3b3JrZWQganVzdCBhYm91dCBldmVyeXRoaW5nIHRvIG1ha2UgdGhpcyB3b3JrPC9saT4KICA8bGk+MC4xLjkgLSBVcGRhdGVkIHRvIENNIDAuOTM8L2xpPgogIDxsaT4wLjEuOCAtIFVwZGF0ZWQgdG8gQ00gMC45LCBhZGRlZCBvcHRpb24gb24gaG93IHRvIGhhbmRsZSBUQUI8L2xpPgogIDxsaT4wLjEuNyAtIFVwZGF0ZWQgdG8gQ00gMC44MDwvbGk+CiAgPGxpPjAuMS42IC0gVXBkYXRlZCB0byBDTSAwLjcwLCBBZGRlZCBvcHRpb24gdG8gbWF0Y2ggcGFyZW50aGVzaXM8L2xpPgogIDxsaT4wLjEuNSAtIFVwZGF0ZWQgdG8gQ00gMC42NiwgcmVtb3ZlZCBhIHN0cmFuZ2UgXG4gY2hhciBmcm9tIGhlYWRlcm91dHB1dCwgbWFkZSB0YWJiaW5nIHdvcms8L2xpPgogIDxsaT4wLjEuNCAtIEZpeGVkIENQVSBob2dnaW5nIHByb2JsZW1zIGJ5IHJld3JpdGluZyB0ZXN0YXJlYS1jb2RlPC9saT4KICA8bGk+MC4xLjMgLSBVcGRhdGVkIHRvIENNIDAuNjUsIGFkZGVkIG9wdGlvbiB0byB0b2dnbGUgd29yZHdyYXA8L2xpPgogIDxsaT4wLjEuMiAtIFVwZGF0ZWQgdG8gQ00gMC42MzwvbGk+CiAgPGxpPjAuMS4xIC0gVXBkYXRlZCB0byBDTSAwLjYyLCBmaXhlZCBleGFtcGxlcyBhbmQgcHJvYmFibHkgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsPC9saT4KICA8bGk+MC4xLjAgLSBJbml0aWFsIHJlbGVhc2UgPC9saT4KPC91bD48YnIgLz4=]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbImV4YW1wbGVzeW50YXgiXSkpIHsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsJHBhcmFtc1siZXhhbXBsZXN5bnRheCJdKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigic2V0dGluZ3MiLCR0aGlzLT5MYW5nKCJzZXR0aW5nc3RhYiIpKTsKLyplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImh0bWwiLCR0aGlzLT5MYW5nKCJodG1sdGVzdCIpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCJwaHAiLCR0aGlzLT5MYW5nKCJwaHB0ZXN0IikpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoImNzcyIsJHRoaXMtPkxhbmcoImNzc3Rlc3QiKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigianMiLCR0aGlzLT5MYW5nKCJqc3Rlc3QiKSk7CiovCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInNldHRpbmdzIik7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlc2V0dGluZ3MnLCAkcmV0dXJuaWQpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc3RleHQnLCAkdGhpcy0+TGFuZygic2hvd2xpbmVudW1iZXJzIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJzaG93bGluZW51bWJlcnMiLDEsJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSkpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVudGV4dCcsICR0aGlzLT5MYW5nKCJhbGxvd2Z1bGxzY3JlZW4iKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsImFsbG93ZnVsbHNjcmVlbiIsMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYWxsb3dmdWxsc2NyZWVuIiwxKSkpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnN0ZXh0JywgJHRoaXMtPkxhbmcoImNzc2FkZGl0aW9ucyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjc3NhZGRpdGlvbnNpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJjc3NhZGRpdGlvbnMiLCR0aGlzLT5fZGVmYXVsdGNzc2FkZGl0aW9ucyksIjYwIikpOwoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0YWJzaXpldGV4dCcsICR0aGlzLT5MYW5nKCJ0YWJzaXplIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYnNpemVpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCJ0YWJzaXplIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGFic2l6ZSIsMiksIjgiKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RoZW1ldGV4dCcsICR0aGlzLT5MYW5nKCJ0aGVtZSIpKTsKJHRoZW1lcz1hcnJheSgKICAnZGVmYXVsdCc9PiJkZWZhdWx0IiwKICAnY29iYWx0Jz0+J2NvYmFsdCcsCiAgJ2VjbGlwc2UnPT4nZWNsaXBzZScsCiAgImVsZWdhbnQiPT4iZWxlZ2FudCIsCiAgJ21vbm9rYWknPT4nbW9ub2thaScsCiAgIm5lYXQiPT4ibmVhdCIsCiAgIm5pZ2h0Ij0+Im5pZ2h0IiwKICAicnVieWJsdWUiPT4icnVieWJsdWUiLAogICJ4cS1kYXJrIj0+InhxLWRhcmsiLAogICJsZXNzZXItZGFyayI9PiJsZXNzZXItZGFyayIKKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aGVtZWlucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJ0aGVtZSIsJHRoZW1lcywtMSwkdGhpcy0+R2V0UHJlZmVyZW5jZSgidGhlbWUiLCJkZWZhdWx0IikpKTsKCi8qJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZXh0d3JhcHBpbmd0ZXh0JywgJHRoaXMtPkxhbmcoInRleHR3cmFwcGluZyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZXh0d3JhcHBpbmdpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwidGV4dHdyYXBwaW5nIiwxLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLDEpKSk7CiovCi8qJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnN0ZXh0JywgJHRoaXMtPkxhbmcoImF1dG9tYXRjaHBhcmVucyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnNpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwiYXV0b21hdGNocGFyZW5zIiwiMSIsJHRoaXMtPkdldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsIjAiKSkpOwoqLwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5ndGV4dCcsICR0aGlzLT5MYW5nKCJ0YWJoYW5kbGluZyIpKTsKJHRhYmZ1bmN0aW9ucz1hcnJheSgKICAkdGhpcy0+TGFuZygidGFiZGVmYXVsdCIpPT4iZGVmYXVsdCIsCiAgJHRoaXMtPkxhbmcoInRhYmluZGVudCIpPT4iaW5kZW50IiwKICAkdGhpcy0+TGFuZygidGFic3BhY2VzIik9PiJjbGFzc2ljIiwKICAkdGhpcy0+TGFuZygidGFic2hpZnQiKT0+InNoaWZ0IgopOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5naW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsInRhYmhhbmRsaW5nIiwkdGFiZnVuY3Rpb25zLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0YWJoYW5kbGluZyIsImluZGVudCIpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc2F2ZXNldHRpbmdzJykpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnc2V0dGluZ3MudHBsJyk7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKLyoKZWNobyAkdGhpcy0+U3RhcnRUYWIoImh0bWwiKTsKCiRjb250ZW50PSIKPGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+VGVzdGluZyBodG1sLXN5bnRheDwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgQW5kIGRvaW5nIGFic29sdXRlbHkgbm90aGluZyBlbHNlCiAgPC9ib2R5Pgo8L2h0bWw+CiI7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3RodG1sIiwnJywnJywnJywnJywnJywnJywnQ29kZU1pcnJvcicsImh0bWwiKTsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpOwoKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgplY2hvICR0aGlzLT5TdGFydFRhYigicGhwIik7CiRjb250ZW50PSIKPD9waHAKICBmdW5jdGlvbiB0ZXN0UEhQKFwkc29tZXBhcmFtKSB7CiAgZWNobyAnRG8geW91IHRoaW5rIHRoaXMgbG9va3MgbmljZT8nOwp9Cj8+CiI7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsImRlZmF1bHRhZG1pbiIpOwplY2hvICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwkaWQsJGNvbnRlbnQsInRlc3RwaHAiLCcnLCcnLCcnLCcnLCcnLCcnLCdDb2RlTWlycm9yJywicGhwIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKCmVjaG8gJHRoaXMtPkVuZFRhYigpOwoKZWNobyAkdGhpcy0+U3RhcnRUYWIoImNzcyIpOwokY29udGVudD0iCi50ZXN0Y3NzIHsKICBmb250LXdlaWdodDpib2xkOwogIGhlaWdodDogMTBweDsKfQoiOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsJGlkLCRjb250ZW50LCJ0ZXN0Y3NzIiwnJywnJywnJywnJywnJywnJywnQ29kZU1pcnJvcicsImNzcyIpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCJqcyIpOwogICAgJGNvbnRlbnQ9JwpmdW5jdGlvbiBteWpzZnVuY3Rpb24ocGFyYW1zKSB7CiAgdmFyIG1zZyA9ICJUaGlzIGphdmFzY3JpcHQgaXMgZmFudGFzdGljISIKICBmb3IgKHZhciBpPTA7IGk8OTk5OTsgaSsrKSB7CiAgICBhbGVydChtc2cpOwogICAgLypUaGlzIG11c3QgYmUgdGhlIG1vc3QgYW5ub3lpbmcgZnVuY3Rpb24gZXZlciEqLwogLyogfQogIHJldHVybiB0cnVlCn0KJzsKZWNobyAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwiZGVmYXVsdGFkbWluIik7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdGpzIiwnJywnJywnJywnJywnJywnJywnQ29kZU1pcnJvcicsImpzIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKTsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CiovCgplY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CgokY29udGVudD0iIjsKc3dpdGNoICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsImh0bWwiKSkgewogIGNhc2UgImh0bWwiIDogewogICAgJGNvbnRlbnQ9Igo8aHRtbD4KICA8aGVhZD4KICAgIDx0aXRsZT5UZXN0aW5nIGh0bWwtc3ludGF4PC90aXRsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICBBbmQgZG9pbmcgYWJzb2x1dGVseSBub3RoaW5nIGVsc2UKICA8L2JvZHk+CjwvaHRtbD4KIjsKICBicmVhazsKICB9CiAgY2FzZSAiY3NzIiA6IHsKICAgICRjb250ZW50PSIKLnRlc3Rjc3MgewogIGZvbnQtd2VpZ2h0OmJvbGQ7CiAgaGVpZ2h0OiAxMHB4Owp9CiI7CiAgYnJlYWs7CiAgfQogIGNhc2UgInBocCIgOiB7CiAgICAkY29udGVudD0iCjw/cGhwCiAgZnVuY3Rpb24gdGVzdFBIUChcJHNvbWVwYXJhbSkgewogICAgZWNobyAnRG8geW91IHRoaW5rIHRoaXMgbG9va3MgbmljZT8nOwogIH0KPz4KIjsKICBicmVhazsKICB9CiAgY2FzZSAianMiIDogewogICAgJGNvbnRlbnQ9JwpmdW5jdGlvbiBteWpzZnVudGlvbihwYXJhbXMpIHsKICB2YXIgbXNnID0gIlRoaXMgamF2YXNjcmlwdCBpcyBmYW50YXN0aWMhIgogIGZvciAodmFyIGk9MDsgaTw5OTk5OyBpKyspIHsKICAgIGFsZXJ0KG1zZyk7CgogIH0KICByZXR1cm4gdHJ1ZQp9Cic7CiAgYnJlYWs7CiAgfQp9CgplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+TGFuZygiZXhhbXBsZXN5bnRheCIpLiI6ICI7CiRzeW50YXhlcz1hcnJheSgkdGhpcy0+TGFuZygiaHRtbHRlc3QiKT0+Imh0bWwiLCR0aGlzLT5MYW5nKCJjc3N0ZXN0Iik9PiJjc3MiLCR0aGlzLT5MYW5nKCJwaHB0ZXN0Iik9PiJwaHAiLCR0aGlzLT5MYW5nKCJqc3Rlc3QiKT0+ImpzIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJleGFtcGxlc3ludGF4Iiwkc3ludGF4ZXMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoImV4YW1wbGVzeW50YXgiLCJodG1sIiksIm9uY2hhbmdlPSd0aGlzLmZvcm0uc3VibWl0KCknIik7Ci8vZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCJleGFtcGxlc3VibWl0IiwkdGhpcy0+TGFuZygiY2hhbmdlIikpOwplY2hvICI8YnIvPiI7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdGFyZWExIiwnJywnJywnJywnJywnJywnJywnQ29kZU1pcnJvcicsJHRoaXMtPkdldFByZWZlcmVuY2UoImV4YW1wbGVzeW50YXgiLCJodG1sIikpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYoaXNzZXQoJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pKSAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwgJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pOwplbHNlCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsICcwJyk7CgppZihpc3NldCgkcGFyYW1zWyJhbGxvd2Z1bGxzY3JlZW4iXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsICRwYXJhbXNbImFsbG93ZnVsbHNjcmVlbiJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhbGxvd2Z1bGxzY3JlZW4iLCAnMCcpOwoKLyppZihpc3NldCgkcGFyYW1zWyJ0ZXh0d3JhcHBpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRleHR3cmFwcGluZyIsICRwYXJhbXNbInRleHR3cmFwcGluZyJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCAnMCcpOyovCiAgCi8qaWYoaXNzZXQoJHBhcmFtc1siYXV0b21hdGNocGFyZW5zIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCAkcGFyYW1zWyJhdXRvbWF0Y2hwYXJlbnMiXSk7CmVsc2UKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwgJzAnKTsqLwoKaWYoaXNzZXQoJHBhcmFtc1sidGFiaGFuZGxpbmciXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwgJHBhcmFtc1sidGFiaGFuZGxpbmciXSk7CgppZihpc3NldCgkcGFyYW1zWyJ0YWJzaXplIl0pKQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJ0YWJzaXplIiwgJHBhcmFtc1sidGFic2l6ZSJdKTsKCmlmKGlzc2V0KCRwYXJhbXNbImNzc2FkZGl0aW9ucyJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiY3NzYWRkaXRpb25zIiwgJHBhcmFtc1siY3NzYWRkaXRpb25zIl0pOwoKaWYoaXNzZXQoJHBhcmFtc1sidGhlbWUiXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRoZW1lIiwgJHBhcmFtc1sidGhlbWUiXSk7CgoKJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RlZmF1bHRhZG1pbicsICRyZXR1cm5pZCxhcnJheSgibW9kdWxlX21lc3NhZ2UiPT4kdGhpcy0+TGFuZygic2V0dGluZ3NzYXZlZCIpLCJ0YWIiPT4ic2V0dGluZ3MiKSk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/CodeMirror.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNDTVMgLSBDTVMgTWFkZSBTaW1wbGUNCiMoYykyMDA1LTA2IGJ5IE1vcnRlbiBQb3Vsc2VuIChtb3J0ZW5AcG91bHNlbi5vcmcpDQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KI2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KI1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KI0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiNhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KI0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCg0KDQpjbGFzcyBDb2RlTWlycm9yIGV4dGVuZHMgQ01TTW9kdWxlIHsNCgl2YXIgJG5vZWRpdG9ycz0wOw0KCXZhciAkaGVhZGVyaW5mb3NlbnQ9ZmFsc2U7DQogIHZhciAkX2h0bWxhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KICB2YXIgJF9jc3NhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfcGhwYWN0aXZlID0gZmFsc2U7DQogIHZhciAkX2RlZmF1bHRjc3NhZGRpdGlvbnMgPSAiLkNvZGVNaXJyb3Ige2xpbmUtaGVpZ2h0OiAxLjNlbTsgZm9udC1zaXplOjExcHh9IjsNCg0KDQoJZnVuY3Rpb24gR2V0TmFtZSgpIHsNCgkJcmV0dXJuICdDb2RlTWlycm9yJzsNCgl9DQoNCglmdW5jdGlvbiBJc1BsdWdpbk1vZHVsZSgpIHsNCgkJcmV0dXJuIGZhbHNlOw0KCX0NCg0KCWZ1bmN0aW9uIEhhc0FkbWluKCkgew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoNCglmdW5jdGlvbiBHZXRIZWxwKCkgew0KCQlyZXR1cm4gJHRoaXMtPkxhbmcoImhlbHAiKTsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3IoKSB7DQoJCXJldHVybiAnTW9ydGVuIFBvdWxzZW4nOw0KCX0NCg0KCWZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkgew0KCQlyZXR1cm4gJyZsdDttb3J0ZW5AcG91bHNlbi5vcmcmZ3Q7JzsNCgl9DQoNCglmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7DQoJCXJldHVybiAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjaGFuZ2Vsb2cudHBsJyk7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0VmVyc2lvbigpIHsNCgkJcmV0dXJuICcyLjIuMyc7DQoJfQ0KCQ0KCWZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkgew0KCQlyZXR1cm4gIjEuOSI7DQoJfQ0KDQogIGZ1bmN0aW9uIEhhc0NhcGFiaWxpdHkoJGNhcGFiaWxpdHksICRwYXJhbXM9YXJyYXkoKSkgew0KICAgIGlmICgkY2FwYWJpbGl0eT09Ind5c2l3eWciKSByZXR1cm4gdHJ1ZTsNCiAgICBpZiAoJGNhcGFiaWxpdHk9PSJzeW50YXhoaWdobGlnaHRpbmciKSByZXR1cm4gdHJ1ZTsNCiAgICByZXR1cm4gZmFsc2U7DQogIH0NCg0KCWZ1bmN0aW9uIElzV1lTSVdZRygpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gSXNTeW50YXhIaWdobGlnaHRlcigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkgew0KCQlyZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKTsNCgl9DQoNCglmdW5jdGlvbiBTeW50YXhQYWdlRm9ybVN1Ym1pdCgpIHsNCgkJcmV0dXJuICJmb3IgKHZhciBjbnRFZGl0b3IgPSAwOyBjbnRFZGl0b3IgPCBudW1Db2RlTWlycm9yQXJlYXM7IGNudEVkaXRvcisrKSB7XG4iDQoJCS4gIlx0XHR2YXIgZWRpdG9yID0gZXZhbCgnY29kZW1pcnJvcmVkaXRvcicgKyBjbnRFZGl0b3IpO1xuIg0KICAgIC4iXHRcdGVkaXRvci5zYXZlKCkiDQogICAgLyouICJcdFx0dmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvZGVtaXJyb3JhcmVhJyArIGNudEVkaXRvcik7XG4iDQogICAgICAvLy4iYWxlcnQoZWRpdG9yLmdldENvZGUoKSk7Ig0KCQkvLy4gIlx0XHRlZGl0b3IudGV4dGFyZWEudmFsdWUgPSBlZGl0b3IuZ2V0Q29kZSgpO1xuIg0KICAgICAgLiAiXHRcdHRleHRhcmVhLnZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7XG4iKi8NCgkJLiAiXHR9XG4iOw0KCX0NCgkNCglmdW5jdGlvbiBXWVNJV1lHUGFnZUZvcm1TdWJtaXQoKSB7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4UGFnZUZvcm1TdWJtaXQoKTsNCgl9DQoNCglmdW5jdGlvbiBXWVNJV1lHVGV4dEFyZWEoJG5hbWU9J3RleHRhcmVhJywkY29sdW1ucz0nODAnLCRyb3dzPScxNScsJGVuY29kaW5nPScnLCRjb250ZW50PScnLCRzdHlsZXNoZWV0PScnLCRhZGR0ZXh0PScnKSB7DQoJCSR0aGlzLT53eXNpd3lnYWN0aXZlPXRydWU7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4VGV4dGFyZWEoJG5hbWUsImh0bWwiLCRjb2x1bW5zLCRyb3dzLCRlbmNvZGluZywkY29udGVudCk7DQoJfQ0KDQoJZnVuY3Rpb24gU3ludGF4VGV4dGFyZWEoJG5hbWU9J3RleHRhcmVhJywkc3ludGF4PSJodG1sIiwkY29sdW1ucz0nODAnLCRyb3dzPScxNScsJGVuY29kaW5nPScnLCRjb250ZW50PScnLCRzdHlsZXNoZWV0PScnLCRhZGR0ZXh0PScnKSB7DQoJCS8vJHRleHRhcmVhPSIiOw0KDQoJCSR0aGlzLT5zeW50YXhhY3RpdmU9dHJ1ZTsJDQoJCS8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VhdXRvY29tcGxldGUiLCIxIik9PSIwIikgJGNsYXNzLj0iIGF1dG9jb21wbGV0ZS1vZmYiOw0KCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsIjEiKT09IjAiKSAkY2xhc3MuPSIgbGluZW51bWJlcnMtb2ZmIjsNCgkJKi8NCiAgICAgIC8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzaG93dG9nZ2xlc3ludGF4IiwiMSIpPT0iMSIpIHsNCiAgICAgDQoJCQkkdGV4dGFyZWEuPSI8YnIvPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgY2hlY2tlZD0nMScgb25jbGljaz0nY29kZXByZXNzIi4kdGhpcy0+bm9lZGl0b3JzLiIudG9nZ2xlRWRpdG9yKCk7JyBjaGVja2VkPSdjaGVja2VkJyBpZD0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+PGxhYmVsIGZvcj0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+Ii4kdGhpcy0+TGFuZygidG9nZ2xlc3ludGF4IikuIjwvbGFiZWw+IjsNCgkJfSovDQogICAgJHNtYXJ0eT0kdGhpcy0+c21hcnR5Ow0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwiMSIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdsaW5lbnVtYmVycycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbignbGluZW51bWJlcnMnLCAiZmFsc2UiKTsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCIxIik9PSIxIil7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5nJywgImZhbHNlIik7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwiMCIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnMnLCAidHJ1ZSIpOw0KICAgIH0gZWxzZSB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVucycsICJmYWxzZSIpOw0KICAgIH0NCg0KICAgICR0aGVtZT0kdGhpcy0+R2V0UHJlZmVyZW5jZSgidGhlbWUiLCJkZWZhdWx0Iik7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0aGVtZScsICR0aGVtZSk7DQogICAgJHRhYnNpemU9JHRoaXMtPkdldFByZWZlcmVuY2UoInRhYnNpemUiLCIyIik7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0YWJzaXplJywgJHRhYnNpemUpOw0KDQoNCiAgICAvL2xpbmVOdW1iZXJzOiB0cnVlLA0KICAgIC8vJGNvbmZpZz0kdGhpcy0+R2V0Q29uZmlnKCk7DQogICAgJGNvbmZpZz1jbXNtcygpLT5HZXRDb25maWcoKTsNCg0KICAgICRzbWFydHktPmFzc2lnbigndGV4dGFyZWFpZCcsICJjb2RlbWlycm9yYXJlYSIuJHRoaXMtPm5vZWRpdG9ycyk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXh0YXJlYW5hbWUnLCAkbmFtZSk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdjb250ZW50JywgJGNvbnRlbnQpOw0KICAgICRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+bm9lZGl0b3JzKTsNCiAgICAvLyRwYXJzZXJmaWxlPSIiOyAkY3NzZmlsZT0iIjsNCiAgICAvKiRjbWRpcj0kY29uZmlnWyJyb290X3VybCJdLicvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3InOw0KICAgIHN3aXRjaCgkc3ludGF4KSB7DQogICAgICANCiAgICAgIGNhc2UgImh0bWwiIDogDQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2V4bWwuanMiJzsgDQogICAgICAgICRjc3NmaWxlPSciJy4kY21kaXIuJy9tb2RlL3htbC94bWwuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiY3NzIiA6DQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2Vjc3MuanMiJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9jc3MuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOg0KICAgICAgY2FzZSAianMiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyJdJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiJzsNCiAgICAgICAgYnJlYWs7DQogICAgICBjYXNlICJwaHAiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sicGFyc2V4bWwuanMiLCAicGFyc2Vjc3MuanMiLCAidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyIsICJwYXJzZWh0bWxtaXhlZC5qcyIsIi4uL2NvbnRyaWIvcGhwL2pzL3Rva2VuaXplcGhwLmpzIiwgIi4uL2NvbnRyaWIvcGhwL2pzL3BhcnNlcGhwLmpzIiwgICAgICAgICAgICAgICAgICAgICAiLi4vY29udHJpYi9waHAvanMvcGFyc2VwaHBodG1sbWl4ZWQuanMiXSc7DQogICAgICAgICRjc3NmaWxlPSdbIicuJGNtZGlyLicvY3NzL3htbGNvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9jc3Njb2xvcnMuY3NzIiwiJy4kY21kaXIuJy9jb250cmliL3BocC9jc3MvcGhwY29sb3JzLmNzcyJdJzsNCiAgICAgICAgYnJlYWs7DQogICAgfSovDQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhcnNlcmZpbGUnLCAkcGFyc2VyZmlsZSk7DQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Nzc2ZpbGUnLCAkY3NzZmlsZSk7DQoNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5nJywgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwiaW5kZW50IikpOw0KICAgICRzbWFydHktPmFzc2lnbignYWxsb3dmdWxsc2NyZWVuJywgJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsIjAiKSk7DQogICAgDQogICAgJHNtYXJ0eS0+YXNzaWduKCdyb290X3VybCcsICRjb25maWdbInJvb3RfdXJsIl0pOw0KDQogICAgc3dpdGNoICgkc3ludGF4KSB7DQogICAgICBjYXNlICJodG1sIiA6ICRzbWFydHktPmFzc2lnbignbW9kZScsICJ0ZXh0L2h0bWwiKTsgJHRoaXMtPl9odG1sYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgICAgY2FzZSAianMiOg0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAiamF2YXNjcmlwdCIpOyR0aGlzLT5famF2YXNjcmlwdGFjdGl2ZT10cnVlOyAgYnJlYWs7DQogICAgICBjYXNlICJjc3MiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgImNzcyIpOyAkdGhpcy0+X2Nzc2FjdGl2ZT10cnVlOyBicmVhazsNCiAgICAgIGNhc2UgInBocCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAicGhwIik7ICR0aGlzLT5fcGhwYWN0aXZlPXRydWU7IGJyZWFrOw0KICAgIH0NCg0KDQogICAgJHRleHRhcmVhPSR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2NvZGVtaXJyb3IyYXJlYS50cGwnKTsNCg0KCQkkdGhpcy0+bm9lZGl0b3JzKys7DQoNCgkJcmV0dXJuICR0ZXh0YXJlYTsNCgl9DQoNCglmdW5jdGlvbiBXWVNJV1lHR2VuZXJhdGVIZWFkZXIoJGh0bWxyZXN1bHQ9JycpIHsNCgkJcmV0dXJuICR0aGlzLT5TeW50YXhHZW5lcmF0ZUhlYWRlcigpOw0KCX0NCg0KCWZ1bmN0aW9uIFN5bnRheEdlbmVyYXRlSGVhZGVyKCRodG1scmVzdWx0PScnKSB7DQoJCWlmICgkdGhpcy0+aGVhZGVyaW5mb3NlbnQpIHJldHVybiAiIjsNCgkJaWYgKCR0aGlzLT5ub2VkaXRvcnM9PTApIHJldHVybiAnJzsNCgkJLy8kR0xPQkFMU1siY29uZmlnIl1bInJvb3RfcGF0aCJdLg0KICAgICRjb25maWc9Y21zbXMoKS0+R2V0Q29uZmlnKCk7DQogICAgJGFscmVhZHlpbj1hcnJheSgpOw0KDQogICAgJHRoZW1lPSR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0aGVtZSIsImRlZmF1bHQiKTsNCg0KCQkkc2NyaXB0cGF0aD0kY29uZmlnWyJyb290X3VybCJdLiIvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3IyIjsNCgkJJGhlYWRlcj0iIjsNCiAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL2xpYi9jb2RlbWlycm9yLmNzcyIvPic7DQoJCSRoZWFkZXIuPScNCgkgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0Pic7DQogICAgaWYgKCR0aGVtZSE9ImRlZmF1bHQiKSB7DQogICAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lLycuJHRoZW1lLicuY3NzIi8+JzsNCiAgICAgIC8qJGhlYWRlci49Jw0KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy90aGVtZS9kZWZhdWx0LmNzcyIvPic7Ki8NCiAgICB9DQogICAgaWYgKCR0aGlzLT5faHRtbGFjdGl2ZSkgew0KDQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRhbHJlYWR5aW5bXT0iY3NzLmpzIjsNCiAgICAgICRoZWFkZXIuPScNCiAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109ImphdmFzY3JpcHQuanMiOw0KICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0Pic7DQogICAgICAkYWxyZWFkeWluW109InhtbC5qcyI7DQogICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRhbHJlYWR5aW5bXT0iaHRtbG1peGVkLmpzIjsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5famF2YXNjcmlwdGFjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiamF2YXNjcmlwdC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJqYXZhc2NyaXB0LmpzIjsNCiAgICAgIH0NCiAgICAgICAgICAgIA0KDQogICAgfQ0KICAgIGlmICgkdGhpcy0+X2Nzc2FjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiY3NzLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjc3MuanMiOw0KICAgICAgfQ0KDQogICAgfQ0KICAgIGlmICgkdGhpcy0+X3BocGFjdGl2ZSkgew0KICAgICAgaWYgKCFpbl9hcnJheSgiY3NzLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jc3MvY3NzLmpzIj48L3NjcmlwdD4nOw0KICAgICAgICAkYWxyZWFkeWluW109ImNzcy5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJqYXZhc2NyaXB0LmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iamF2YXNjcmlwdC5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJ4bWwuanMiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0Pic7DQogICAgICAgICRhbHJlYWR5aW5bXT0ieG1sLmpzIjsNCiAgICAgIH0NCiAgICAgIGlmICghaW5fYXJyYXkoImNsaWtlLmpzIiwkYWxyZWFkeWluKSkgew0KICAgICAgICAkaGVhZGVyLj0nDQogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJjbGlrZS5qcyI7DQogICAgICB9DQogICAgICBpZiAoIWluX2FycmF5KCJjbGlrZS5jc3MiLCRhbHJlYWR5aW4pKSB7DQogICAgICAgICRoZWFkZXIuPScNCiAgICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY2xpa2UvY2xpa2UuY3NzIiAvPic7DQogICAgICAgICRhbHJlYWR5aW5bXT0iY2xpa2UuY3NzIjsNCiAgICAgIH0NCiAgICAgIGlmICghaW5fYXJyYXkoInBocC5qcyIsJGFscmVhZHlpbikpIHsNCiAgICAgICAgJGhlYWRlci49Jw0KICAgICAgICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvcGhwL3BocC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICAgJGFscmVhZHlpbltdPSJwaHAuanMiOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoJHRoZW1lIT0iZGVmYXVsdCIpIHsNCiAgICAgICRoZWFkZXIuPScNCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvdGhlbWUvZGVmYXVsdC5jc3MiLz4nOw0KICAgIH0NCiAgICAkaGVhZGVyLj0nDQogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL3RoZW1lLycuJHRoZW1lLicuY3NzIi8+JzsNCiAgICAkaGVhZGVyLj0nDQoNCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIHZhciBudW1Db2RlTWlycm9yQXJlYXM9Jy4kdGhpcy0+bm9lZGl0b3JzLic7DQo8L3NjcmlwdD4NCg0KJzsNCg0KICAgICRoZWFkZXIuPScNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogICcuJHRoaXMtPkdldFByZWZlcmVuY2UoImNzc2FkZGl0aW9ucyIsJHRoaXMtPl9kZWZhdWx0Y3NzYWRkaXRpb25zKS4nDQo8L3N0eWxlPg0KICAgICc7DQoNCiAgICBpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoImFsbG93ZnVsbHNjcmVlbiIsMCk9PSIxIikgew0KICAgICRiZ2NvbG9yPSJ3aGl0ZSI7DQogICAgaWYgKCR0aGVtZT09Im5pZ2h0IikgJGJnY29sb3I9ImJsYWNrIjsNCiAgICAgICRoZWFkZXIuPScNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogICAgICAuZnVsbHNjcmVlbiB7DQogICAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgICAgICAgICAgIHRvcDogMDsNCiAgICAgICAgICAgICAgICAgIGxlZnQ6IDA7DQogICAgICAgICAgICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgICAgICAgICAgIGhlaWdodDogMTAwJTsNCiAgICAgICAgICAgICAgICAgIHotaW5kZXg6IDk5OTk7DQogICAgICAgICAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICAgICAgICAgICAgYm9yZGVyOiAwcHggc29saWQgI0JCQkJCQjsNCiAgICAgICAgICAgICAgICAgIG9wYWNpdHk6IDE7DQogICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOicuJGJnY29sb3IuJzsNCiAgICAgICAgICAgICAgfQ0KPC9zdHlsZT4NCjxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQogIGZ1bmN0aW9uIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCkNCiAgICAgIHsNCiAgICAgICAgICB2YXIgZWRpdG9yRGl2ID0gJCgiLkNvZGVNaXJyb3Itc2Nyb2xsIik7DQogICAgICAgICAgaWYgKCFlZGl0b3JEaXYuaGFzQ2xhc3MoImZ1bGxzY3JlZW4iKSkgew0KICAgICAgICAgICAgICB0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuID0geyBoZWlnaHQ6IGVkaXRvckRpdi5oZWlnaHQoKSwgd2lkdGg6IGVkaXRvckRpdi53aWR0aCgpIH0NCiAgICAgICAgICAgICAgZWRpdG9yRGl2LmFkZENsYXNzKCJmdWxsc2NyZWVuIik7DQogICAgICAgICAgICAgIGVkaXRvckRpdi5oZWlnaHQoIjEwMCUiKTsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LndpZHRoKCIxMDAlIik7DQogICAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICBlZGl0b3JEaXYucmVtb3ZlQ2xhc3MoImZ1bGxzY3JlZW4iKTsNCiAgICAgICAgICAgICAgZWRpdG9yRGl2LmhlaWdodCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLmhlaWdodCk7DQogICAgICAgICAgICAgIGVkaXRvckRpdi53aWR0aCh0b2dnbGVGdWxsc2NyZWVuRWRpdGluZy5iZWZvcmVGdWxsc2NyZWVuLndpZHRoKTsNCiAgICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsNCiAgICAgICAgICB9DQogICAgICB9DQogIA0KPC9zY3JpcHQ+DQoNCiAgICAgICc7DQogICAgfQ0KDQoNCg0KCQkkdGhpcy0+aGVhZGVyaW5mb3NlbnQ9dHJ1ZTsNCgkJcmV0dXJuICRoZWFkZXI7DQoJfQ0KfQ0KDQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/activeline.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEFjdGl2ZSBMaW5lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5hY3RpdmVsaW5lIHtiYWNrZ3JvdW5kOiAjZThmMmZmICFpbXBvcnRhbnQ7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQWN0aXZlIExpbmUgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJzcyB4bWxuczphdG9tPSJodHRwOi8vd3d3LnczLm9yZy8yMDA1L0F0b20iIHZlcnNpb249IjIuMCIKICAgICB4bWxuczpnZW9yc3M9Imh0dHA6Ly93d3cuZ2VvcnNzLm9yZy9nZW9yc3MiCiAgICAgeG1sbnM6dHdpdHRlcj0iaHR0cDovL2FwaS50d2l0dGVyLmNvbSI+CiAgPGNoYW5uZWw+CiAgICA8dGl0bGU+VHdpdHRlciAvIGNvZGVtaXJyb3I8L3RpdGxlPgogICAgPGxpbms+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3I8L2xpbms+CiAgICA8YXRvbTpsaW5rIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiCiAgICAgICAgICAgICAgIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHJlbD0ic2VsZiIvPgogICAgPGRlc2NyaXB0aW9uPlR3aXR0ZXIgdXBkYXRlcyBmcm9tIENvZGVNaXJyb3IgLyBjb2RlbWlycm9yLjwvZGVzY3JpcHRpb24+CiAgICA8bGFuZ3VhZ2U+ZW4tdXM8L2xhbmd1YWdlPgogICAgPHR0bD40MDwvdHRsPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IGh0dHA6Ly9jbG91ZC1pZGUuY29tICYjODIxMjsgdGhleSdyZSBzcHJpbmdpbmcgdXAgbGlrZSBtdXNocm9vbXMuIFRoaXMgb25lCiAgICAgIHVzZXMgQ29kZU1pcnJvciBhcyBpdHMgZWRpdG9yLjwvdGl0bGU+CiAgICA8ZGVzY3JpcHRpb24+Y29kZW1pcnJvcjogaHR0cDovL2Nsb3VkLWlkZS5jb20gJiM4MjEyOyB0aGV5J3JlIHNwcmluZ2luZyB1cCBsaWtlIG11c2hyb29tcy4gVGhpcwogICAgICBvbmUgdXNlcyBDb2RlTWlycm9yIGFzIGl0cyBlZGl0b3IuPC9kZXNjcmlwdGlvbj4KICAgIDxwdWJEYXRlPlRodSwgMTcgTWFyIDIwMTEgMjM6MzQ6NDcgKzAwMDA8L3B1YkRhdGU+CiAgICA8Z3VpZD5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80ODUyNzczMzcyMjA1ODc1MjwvZ3VpZD4KICAgIDxsaW5rPmh0dHA6Ly90d2l0dGVyLmNvbS9jb2RlbWlycm9yL3N0YXR1c2VzLzQ4NTI3NzMzNzIyMDU4NzUyPC9saW5rPgogICAgPHR3aXR0ZXI6c291cmNlPndlYjwvdHdpdHRlcjpzb3VyY2U+CiAgICA8dHdpdHRlcjpwbGFjZS8+CiAgPC9pdGVtPgogIDxpdGVtPgogICAgPHRpdGxlPmNvZGVtaXJyb3I6IFBvc3RlZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBDb2RlTWlycm9yIDIgaW50ZXJuYWxzIGF0CiAgICAgIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC8yL2ludGVybmFscy5odG1sPC90aXRsZT4KICAgIDxkZXNjcmlwdGlvbj5jb2RlbWlycm9yOiBQb3N0ZWQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgQ29kZU1pcnJvciAyIGludGVybmFscyBhdAogICAgICBodHRwOi8vY29kZW1pcnJvci5uZXQvMi9pbnRlcm5hbHMuaHRtbDwvZGVzY3JpcHRpb24+CiAgICA8cHViRGF0ZT5XZWQsIDAyIE1hciAyMDExIDEyOjE1OjA5ICswMDAwPC9wdWJEYXRlPgogICAgPGd1aWQ+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3Ivc3RhdHVzZXMvNDI5MjA4Nzk3ODg3ODk3NjA8L2d1aWQ+CiAgICA8bGluaz5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80MjkyMDg3OTc4ODc4OTc2MDwvbGluaz4KICAgIDx0d2l0dGVyOnNvdXJjZT53ZWI8L3R3aXR0ZXI6c291cmNlPgogICAgPHR3aXR0ZXI6cGxhY2UvPgogIDwvaXRlbT4KICA8L2NoYW5uZWw+CjwvcnNzPjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgbW9kZTogImFwcGxpY2F0aW9uL3htbCIsCiAgbGluZU51bWJlcnM6IHRydWUsCiAgbGluZVdyYXBwaW5nOiB0cnVlLAogIG9uQ3Vyc29yQWN0aXZpdHk6IGZ1bmN0aW9uKCkgewogICAgZWRpdG9yLnNldExpbmVDbGFzcyhobExpbmUsIG51bGwsIG51bGwpOwogICAgaGxMaW5lID0gZWRpdG9yLnNldExpbmVDbGFzcyhlZGl0b3IuZ2V0Q3Vyc29yKCkubGluZSwgbnVsbCwgImFjdGl2ZWxpbmUiKTsKICB9Cn0pOwp2YXIgaGxMaW5lID0gZWRpdG9yLnNldExpbmVDbGFzcygwLCAiYWN0aXZlbGluZSIpOwo8L3NjcmlwdD4KCiAgICA8cD5TdHlsaW5nIHRoZSBjdXJyZW50IGN1cnNvciBsaW5lLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/changemode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUtQ2hhbmdpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3NjaGVtZS9zY2hlbWUuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlLUNoYW5naW5nIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cjs7IElmIHRoZXJlIGlzIFNjaGVtZSBjb2RlIGluIGhlcmUsIHRoZSBlZGl0b3Igd2lsbCBiZSBpbiBTY2hlbWUgbW9kZS4KOzsgSWYgeW91IHB1dCBpbiBKUyBpbnN0ZWFkLCBpdCdsbCBzd2l0Y2ggdG8gSlMgbW9kZS4KCihkZWZpbmUgKGRvdWJsZSB4KQogICgqIHggeCkpCjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+T24gY2hhbmdlcyB0byB0aGUgY29udGVudCBvZiB0aGUgYWJvdmUgZWRpdG9yLCBhIChjcnVkZSkgc2NyaXB0CnRyaWVzIHRvIGF1dG8tZGV0ZWN0IHRoZSBsYW5ndWFnZSB1c2VkLCBhbmQgc3dpdGNoZXMgdGhlIGVkaXRvciB0bwplaXRoZXIgSmF2YVNjcmlwdCBvciBTY2hlbWUgbW9kZSBiYXNlZCBvbiB0aGF0LjwvcD4KCjxzY3JpcHQ+CiAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgIG1vZGU6ICJzY2hlbWUiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgdGFiTW9kZTogImluZGVudCIsCiAgICBvbkNoYW5nZTogZnVuY3Rpb24oKSB7CiAgICAgIGNsZWFyVGltZW91dChwZW5kaW5nKTsKICAgICAgc2V0VGltZW91dCh1cGRhdGUsIDQwMCk7CiAgICB9CiAgfSk7CiAgdmFyIHBlbmRpbmc7CiAgZnVuY3Rpb24gbG9va3NMaWtlU2NoZW1lKGNvZGUpIHsKICAgIHJldHVybiAhL15ccypcKFxzKmZ1bmN0aW9uXGIvLnRlc3QoY29kZSkgJiYgL15ccypbO1woXS8udGVzdChjb2RlKTsKICB9CiAgZnVuY3Rpb24gdXBkYXRlKCkgewogICAgZWRpdG9yLnNldE9wdGlvbigibW9kZSIsIGxvb2tzTGlrZVNjaGVtZShlZGl0b3IuZ2V0VmFsdWUoKSkgPyAic2NoZW1lIiA6ICJqYXZhc2NyaXB0Iik7CiAgfQo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/closetag.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCgk8aGVhZD4NCgkJPHRpdGxlPkNvZGVNaXJyb3I6IENsb3NlLVRhZyBEZW1vPC90aXRsZT4NCgkJPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPg0KCQk8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvY2xvc2V0YWcuanMiPjwvc2NyaXB0Pg0KCQkNCjwhLS0NCgkJPHNjcmlwdCBzcmM9Ii4uL21vZGUveG1sL3htbC5qcyI+PC9zY3JpcHQ+DQotLT4NCgkJPHNjcmlwdCBzcmM9Ii4uL21vZGUveG1sL3htbC5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+DQoJCTxzY3JpcHQgc3JjPSIuLi9tb2RlL2Nzcy9jc3MuanMiPjwvc2NyaXB0Pg0KCQk8c2NyaXB0IHNyYz0iLi4vbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4NCjwhLS0NCgkJPHNjcmlwdCBzcmM9Ii4uL21vZGUveG1scHVyZS94bWxwdXJlLmpzIj48L3NjcmlwdD4NCi0tPg0KDQoJCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4NCgkJPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCgkJCS5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7fQ0KCQk8L3N0eWxlPg0KCTwvaGVhZD4NCgk8Ym9keT4NCgkNCgkJPGgxPkNsb3NlLVRhZyBEZW1vPC9oMT4NCgkJPHVsPg0KCQkJPGxpPlR5cGUgYW4gaHRtbCB0YWcuICBXaGVuIHlvdSB0eXBlICc+JyBvciAnLycsIHRoZSB0YWcgd2lsbCBhdXRvLWNsb3NlL2NvbXBsZXRlLiAgQmxvY2stbGV2ZWwgdGFncyB3aWxsIGluZGVudC48L2xpPg0KCQkJPGxpPlRoZXJlIGFyZSBvcHRpb25zIGZvciBkaXNhYmxpbmcgdGFnIGNsb3Npbmcgb3IgY3VzdG9taXppbmcgdGhlIGxpc3Qgb2YgdGFncyB0byBpbmRlbnQuPC9saT4NCgkJCTxsaT5Xb3JrcyB3aXRoICJ0ZXh0L2h0bWwiIChiYXNlZCBvbiBodG1sbWl4ZWQuanMgb3IgeG1sLmpzKSBhbmQgInhtbHB1cmUiIG1vZGVzLjwvbGk+DQoJCQk8bGk+VmlldyBzb3VyY2UgZm9yIGtleSBiaW5kaW5nIGRldGFpbHMuPC9saT4NCgkJPC9wPg0KDQoJCTxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+PC90ZXh0YXJlYT48L2Zvcm0+DQoNCgkJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCQl2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgew0KCQkJbW9kZTogJ3RleHQvaHRtbCcsDQoJCQkvL21vZGU6ICd4bWxwdXJlJywNCgkJCQ0KCQkJLy9jbG9zZVRhZ0VuYWJsZWQ6IGZhbHNlLCAvLyBTZXQgdGhpcyBvcHRpb24gdG8gZGlzYWJsZSB0YWcgY2xvc2luZyBiZWhhdmlvciB3aXRob3V0IGhhdmluZyB0byByZW1vdmUgdGhlIGtleSBiaW5kaW5ncy4NCgkJCS8vY2xvc2VUYWdJbmRlbnQ6IGZhbHNlLCAvLyBQYXNzIGZhbHNlIG9yIGFuIGFycmF5IG9mIHRhZyBuYW1lcyB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBpbmRlbnRhdGlvbiBiZWhhdmlvci4NCgkJCQ0KCQkJZXh0cmFLZXlzOiB7DQoJCQkJIic+JyI6IGZ1bmN0aW9uKGNtKSB7IGNtLmNsb3NlVGFnKGNtLCAnPicpOyB9LA0KCQkJCSInLyciOiBmdW5jdGlvbihjbSkgeyBjbS5jbG9zZVRhZyhjbSwgJy8nKTsgfQ0KCQkJfSwNCgkJCQ0KCQkJLyoNCgkJCS8vIGV4dHJhS2V5cyBpcyB0aGUgZWFzaWVyIHdheSB0byBnbywgYnV0IGlmIHlvdSBuZWVkIG5hdGl2ZSBrZXkgZXZlbnQgcHJvY2Vzc2luZywgdGhpcyBzaG91bGQgd29yayB0b28uDQoJCQlvbktleUV2ZW50OiBmdW5jdGlvbihjbSwgZSkgew0KCQkJCWlmIChlLnR5cGUgPT0gJ2tleWRvd24nKSB7DQoJCQkJCXZhciBjID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7DQoJCQkJCWlmIChjID09IDE5MCB8fCBjID09IDE5MSkgew0KCQkJCQkJdHJ5IHsNCgkJCQkJCQljbS5jbG9zZVRhZyhjbSwgYyA9PSAxOTAgPyAnPicgOiAnLycpOw0KCQkJCQkJCWUuc3RvcCgpOw0KCQkJCQkJCXJldHVybiB0cnVlOw0KCQkJCQkJfSBjYXRjaCAoZSkgew0KCQkJCQkJCWlmIChlICE9IENvZGVNaXJyb3IuUGFzcykgdGhyb3cgZTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQl9LA0KCQkJKi8NCgkJCQ0KCQkJd29yZFdyYXA6IHRydWUNCgkJfSk7DQoJCTwvc2NyaXB0Pg0KDQoJPC9ib2R5Pg0KPC9odG1sPg0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9jb21wbGV0ZSBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvdXRpbC9zaW1wbGUtaGludC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2phdmFzY3JpcHQtaGludC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgI2VlZTt9IC5Db2RlTWlycm9yLXNjcm9sbCB7IGhlaWdodDogMTAwJSB9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQXV0b2NvbXBsZXRlIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmZ1bmN0aW9uIGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KSB7CiAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogIGZ1bmN0aW9uIG1heWJlQWRkKHN0cikgewogICAgaWYgKHN0ci5pbmRleE9mKHN0YXJ0KSA9PSAwKSBmb3VuZC5wdXNoKHN0cik7CiAgfQogIGZ1bmN0aW9uIGdhdGhlckNvbXBsZXRpb25zKG9iaikgewogICAgaWYgKHR5cGVvZiBvYmogPT0gInN0cmluZyIpIGZvckVhY2goc3RyaW5nUHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSBmb3JFYWNoKGZ1bmNQcm9wcywgbWF5YmVBZGQpOwogICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIG1heWJlQWRkKG5hbWUpOwogIH0KCiAgaWYgKGNvbnRleHQpIHsKICAgIC8vIElmIHRoaXMgaXMgYSBwcm9wZXJ0eSwgc2VlIGlmIGl0IGJlbG9uZ3MgdG8gc29tZSBvYmplY3Qgd2UgY2FuCiAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgdmFyIG9iaiA9IGNvbnRleHQucG9wKCksIGJhc2U7CiAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtdmFyaWFibGUiKQogICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtc3RyaW5nIikKICAgICAgYmFzZSA9ICIiOwogICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtYXRvbSIpCiAgICAgIGJhc2UgPSAxOwogICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgaWYgKGJhc2UgIT0gbnVsbCkgZ2F0aGVyQ29tcGxldGlvbnMoYmFzZSk7CiAgfQogIGVsc2UgewogICAgLy8gSWYgbm90LCBqdXN0IGxvb2sgaW4gdGhlIHdpbmRvdyBvYmplY3QgYW5kIGFueSBsb2NhbCBzY29wZQogICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICBnYXRoZXJDb21wbGV0aW9ucyh3aW5kb3cpOwogICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogIH0KICByZXR1cm4gZm91bmQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5QcmVzcyA8c3Ryb25nPmN0cmwtc3BhY2U8L3N0cm9uZz4gdG8gYWN0aXZhdGUgYXV0b2NvbXBsZXRpb24uIFNlZQp0aGUgY29kZSAoPGEgaHJlZj0iLi4vbGliL3V0aWwvc2ltcGxlLWhpbnQuanMiPmhlcmU8L2E+CmFuZCA8YSBocmVmPSIuLi9saWIvdXRpbC9qYXZhc2NyaXB0LWhpbnQuanMiPmhlcmU8L2E+KSB0byBmaWd1cmUgb3V0CmhvdyBpdCB3b3Jrcy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBleHRyYUtleXM6IHsiQ3RybC1TcGFjZSI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5zaW1wbGVIaW50KGNtLCBDb2RlTWlycm9yLmphdmFzY3JpcHRIaW50KTt9fQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICAvLyBNaW5pbWFsIGV2ZW50LWhhbmRsaW5nIHdyYXBwZXIuCiAgZnVuY3Rpb24gc3RvcEV2ZW50KCkgewogICAgaWYgKHRoaXMucHJldmVudERlZmF1bHQpIHt0aGlzLnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7fQogICAgZWxzZSB7dGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWU7fQogIH0KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wRXZlbnQ7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlcikgewogICAgZnVuY3Rpb24gd3JhcEhhbmRsZXIoZXZlbnQpIHtoYW5kbGVyKGFkZFN0b3AoZXZlbnQgfHwgd2luZG93LmV2ZW50KSk7fQogICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBIYW5kbGVyLCBmYWxzZSk7CiAgICBlbHNlCiAgICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKICB9CgogIGZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGFyci5sZW5ndGg7IGkgPCBlOyArK2kpIGYoYXJyW2ldKTsKICB9CgogIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIHRoZW1lOiAibmlnaHQiLAogICAgb25LZXlFdmVudDogZnVuY3Rpb24oaSwgZSkgewogICAgICAvLyBIb29rIGludG8gY3RybC1zcGFjZQogICAgICBpZiAoZS5rZXlDb2RlID09IDMyICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KSAmJiAhZS5hbHRLZXkpIHsKICAgICAgICBlLnN0b3AoKTsKICAgICAgICByZXR1cm4gc3RhcnRDb21wbGV0ZSgpOwogICAgICB9CiAgICB9CiAgfSk7CgogIGZ1bmN0aW9uIHN0YXJ0Q29tcGxldGUoKSB7CiAgICAvLyBXZSB3YW50IGEgc2luZ2xlIGN1cnNvciBwb3NpdGlvbi4KICAgIGlmIChlZGl0b3Iuc29tZXRoaW5nU2VsZWN0ZWQoKSkgcmV0dXJuOwogICAgLy8gRmluZCB0aGUgdG9rZW4gYXQgdGhlIGN1cnNvcgogICAgdmFyIGN1ciA9IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpLCB0b2tlbiA9IGVkaXRvci5nZXRUb2tlbkF0KGN1ciksIHRwcm9wID0gdG9rZW47CiAgICAvLyBJZiBpdCdzIG5vdCBhICd3b3JkLXN0eWxlJyB0b2tlbiwgaWdub3JlIHRoZSB0b2tlbi4KICAgIGlmICghL15bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuID0gdHByb3AgPSB7c3RhcnQ6IGN1ci5jaCwgZW5kOiBjdXIuY2gsIHN0cmluZzogIiIsIHN0YXRlOiB0b2tlbi5zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRva2VuLnN0cmluZyA9PSAiLiIgPyAicHJvcGVydHkiIDogbnVsbH07CiAgICB9CiAgICAvLyBJZiBpdCBpcyBhIHByb3BlcnR5LCBmaW5kIG91dCB3aGF0IGl0IGlzIGEgcHJvcGVydHkgb2YuCiAgICB3aGlsZSAodHByb3AuY2xhc3NOYW1lID09ICJwcm9wZXJ0eSIpIHsKICAgICAgdHByb3AgPSBlZGl0b3IuZ2V0VG9rZW5BdCh7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwogICAgICBpZiAodHByb3Auc3RyaW5nICE9ICIuIikgcmV0dXJuOwogICAgICB0cHJvcCA9IGVkaXRvci5nZXRUb2tlbkF0KHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICghY29udGV4dCkgdmFyIGNvbnRleHQgPSBbXTsKICAgICAgY29udGV4dC5wdXNoKHRwcm9wKTsKICAgIH0KICAgIHZhciBjb21wbGV0aW9ucyA9IGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KTsKICAgIGlmICghY29tcGxldGlvbnMubGVuZ3RoKSByZXR1cm47CiAgICBmdW5jdGlvbiBpbnNlcnQoc3RyKSB7CiAgICAgIGVkaXRvci5yZXBsYWNlUmFuZ2Uoc3RyLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0b2tlbi5zdGFydH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IHRva2VuLmVuZH0pOwogICAgfQogICAgLy8gV2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBjb21wbGV0aW9uLCB1c2UgaXQgZGlyZWN0bHkuCiAgICBpZiAoY29tcGxldGlvbnMubGVuZ3RoID09IDEpIHtpbnNlcnQoY29tcGxldGlvbnNbMF0pOyByZXR1cm4gdHJ1ZTt9CgogICAgLy8gQnVpbGQgdGhlIHNlbGVjdCB3aWRnZXQKICAgIHZhciBjb21wbGV0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgY29tcGxldGUuY2xhc3NOYW1lID0gImNvbXBsZXRpb25zIjsKICAgIHZhciBzZWwgPSBjb21wbGV0ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzZWxlY3QiKSk7CiAgICBzZWwubXVsdGlwbGUgPSB0cnVlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wbGV0aW9ucy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgb3B0ID0gc2VsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm9wdGlvbiIpKTsKICAgICAgb3B0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNvbXBsZXRpb25zW2ldKSk7CiAgICB9CiAgICBzZWwuZmlyc3RDaGlsZC5zZWxlY3RlZCA9IHRydWU7CiAgICBzZWwuc2l6ZSA9IE1hdGgubWluKDEwLCBjb21wbGV0aW9ucy5sZW5ndGgpOwogICAgdmFyIHBvcyA9IGVkaXRvci5jdXJzb3JDb29yZHMoKTsKICAgIGNvbXBsZXRlLnN0eWxlLmxlZnQgPSBwb3MueCArICJweCI7CiAgICBjb21wbGV0ZS5zdHlsZS50b3AgPSBwb3MueUJvdCArICJweCI7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbXBsZXRlKTsKICAgIC8vIEhhY2sgdG8gaGlkZSB0aGUgc2Nyb2xsYmFyLgogICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA8PSAxMCkKICAgICAgY29tcGxldGUuc3R5bGUud2lkdGggPSAoc2VsLmNsaWVudFdpZHRoIC0gMSkgKyAicHgiOwoKICAgIHZhciBkb25lID0gZmFsc2U7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICAgZG9uZSA9IHRydWU7CiAgICAgIGNvbXBsZXRlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29tcGxldGUpOwogICAgfQogICAgZnVuY3Rpb24gcGljaygpIHsKICAgICAgaW5zZXJ0KHNlbC5vcHRpb25zW3NlbC5zZWxlY3RlZEluZGV4XS50ZXh0KTsKICAgICAgY2xvc2UoKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe2VkaXRvci5mb2N1cygpO30sIDUwKTsKICAgIH0KICAgIGNvbm5lY3Qoc2VsLCAiYmx1ciIsIGNsb3NlKTsKICAgIGNvbm5lY3Qoc2VsLCAia2V5ZG93biIsIGZ1bmN0aW9uKGV2ZW50KSB7CiAgICAgIHZhciBjb2RlID0gZXZlbnQua2V5Q29kZTsKICAgICAgLy8gRW50ZXIgYW5kIHNwYWNlCiAgICAgIGlmIChjb2RlID09IDEzIHx8IGNvZGUgPT0gMzIpIHtldmVudC5zdG9wKCk7IHBpY2soKTt9CiAgICAgIC8vIEVzY2FwZQogICAgICBlbHNlIGlmIChjb2RlID09IDI3KSB7ZXZlbnQuc3RvcCgpOyBjbG9zZSgpOyBlZGl0b3IuZm9jdXMoKTt9CiAgICAgIGVsc2UgaWYgKGNvZGUgIT0gMzggJiYgY29kZSAhPSA0MCkge2Nsb3NlKCk7IGVkaXRvci5mb2N1cygpOyBzZXRUaW1lb3V0KHN0YXJ0Q29tcGxldGUsIDUwKTt9CiAgICB9KTsKICAgIGNvbm5lY3Qoc2VsLCAiZGJsY2xpY2siLCBwaWNrKTsKCiAgICBzZWwuZm9jdXMoKTsKICAgIC8vIE9wZXJhIHNvbWV0aW1lcyBpZ25vcmVzIGZvY3VzaW5nIGEgZnJlc2hseSBjcmVhdGVkIG5vZGUKICAgIGlmICh3aW5kb3cub3BlcmEpIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtpZiAoIWRvbmUpIHNlbC5mb2N1cygpO30sIDEwMCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZhciBzdHJpbmdQcm9wcyA9ICgiY2hhckF0IGNoYXJDb2RlQXQgaW5kZXhPZiBsYXN0SW5kZXhPZiBzdWJzdHJpbmcgc3Vic3RyIHNsaWNlIHRyaW0gdHJpbUxlZnQgdHJpbVJpZ2h0ICIgKwogICAgICAgICAgICAgICAgICAgICAidG9VcHBlckNhc2UgdG9Mb3dlckNhc2Ugc3BsaXQgY29uY2F0IG1hdGNoIHJlcGxhY2Ugc2VhcmNoIikuc3BsaXQoIiAiKTsKICB2YXIgYXJyYXlQcm9wcyA9ICgibGVuZ3RoIGNvbmNhdCBqb2luIHNwbGljZSBwdXNoIHBvcCBzaGlmdCB1bnNoaWZ0IHNsaWNlIHJldmVyc2Ugc29ydCBpbmRleE9mICIgKwogICAgICAgICAgICAgICAgICAgICJsYXN0SW5kZXhPZiBldmVyeSBzb21lIGZpbHRlciBmb3JFYWNoIG1hcCByZWR1Y2UgcmVkdWNlUmlnaHQgIikuc3BsaXQoIiAiKTsKICB2YXIgZnVuY1Byb3BzID0gInByb3RvdHlwZSBhcHBseSBjYWxsIGJpbmQiLnNwbGl0KCIgIik7CiAgdmFyIGtleXdvcmRzID0gKCJicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIG5ldyBudWxsIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB2b2lkIHdoaWxlIHdpdGgiKS5zcGxpdCgiICIpOwoKICBmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCkgewogICAgdmFyIGZvdW5kID0gW10sIHN0YXJ0ID0gdG9rZW4uc3RyaW5nOwogICAgZnVuY3Rpb24gbWF5YmVBZGQoc3RyKSB7CiAgICAgIGlmIChzdHIuaW5kZXhPZihzdGFydCkgPT0gMCkgZm91bmQucHVzaChzdHIpOwogICAgfQogICAgZnVuY3Rpb24gZ2F0aGVyQ29tcGxldGlvbnMob2JqKSB7CiAgICAgIGlmICh0eXBlb2Ygb2JqID09ICJzdHJpbmciKSBmb3JFYWNoKHN0cmluZ1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEFycmF5KSBmb3JFYWNoKGFycmF5UHJvcHMsIG1heWJlQWRkKTsKICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgRnVuY3Rpb24pIGZvckVhY2goZnVuY1Byb3BzLCBtYXliZUFkZCk7CiAgICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSBtYXliZUFkZChuYW1lKTsKICAgIH0KCiAgICBpZiAoY29udGV4dCkgewogICAgICAvLyBJZiB0aGlzIGlzIGEgcHJvcGVydHksIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNvbWUgb2JqZWN0IHdlIGNhbgogICAgICAvLyBmaW5kIGluIHRoZSBjdXJyZW50IGVudmlyb25tZW50LgogICAgICB2YXIgb2JqID0gY29udGV4dC5wb3AoKSwgYmFzZTsKICAgICAgaWYgKG9iai5jbGFzc05hbWUgPT0gInZhcmlhYmxlIikKICAgICAgICBiYXNlID0gd2luZG93W29iai5zdHJpbmddOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJzdHJpbmciKQogICAgICAgIGJhc2UgPSAiIjsKICAgICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAiYXRvbSIpCiAgICAgICAgYmFzZSA9IDE7CiAgICAgIHdoaWxlIChiYXNlICE9IG51bGwgJiYgY29udGV4dC5sZW5ndGgpCiAgICAgICAgYmFzZSA9IGJhc2VbY29udGV4dC5wb3AoKS5zdHJpbmddOwogICAgICBpZiAoYmFzZSAhPSBudWxsKSBnYXRoZXJDb21wbGV0aW9ucyhiYXNlKTsKICAgIH0KICAgIGVsc2UgewogICAgICAvLyBJZiBub3QsIGp1c3QgbG9vayBpbiB0aGUgd2luZG93IG9iamVjdCBhbmQgYW55IGxvY2FsIHNjb3BlCiAgICAgIC8vIChyZWFkaW5nIGludG8gSlMgbW9kZSBpbnRlcm5hbHMgdG8gZ2V0IGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMpCiAgICAgIGZvciAodmFyIHYgPSB0b2tlbi5zdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpIG1heWJlQWRkKHYubmFtZSk7CiAgICAgIGdhdGhlckNvbXBsZXRpb25zKHdpbmRvdyk7CiAgICAgIGZvckVhY2goa2V5d29yZHMsIG1heWJlQWRkKTsKICAgIH0KICAgIHJldHVybiBmb3VuZDsKICB9Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/emacs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEVtYWNzIGJpbmRpbmdzIGRlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2NsaWtlL2NsaWtlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9rZXltYXAvZW1hY3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgI2VlZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRW1hY3MgYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIGVtYWNzIGtleWJpbmRpbmdzIGFyZSBlbmFibGVkIGJ5CmluY2x1ZGluZyA8YSBocmVmPSIuLi9rZXltYXAvZW1hY3MuanMiPmtleW1hcC9lbWFjcy5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJlbWFjcyI8L2NvZGU+LiBCZWNhdXNlCkNvZGVNaXJyb3IncyBpbnRlcm5hbCBBUEkgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gRW1hY3MsIHRoZXkgYXJlIG9ubHkKYSBsb29zZSBhcHByb3hpbWF0aW9uIG9mIGFjdHVhbCBlbWFjcyBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCjxwPkFsc28gbm90ZSB0aGF0IGEgbG90IG9mIGJyb3dzZXJzIGRpc2FsbG93IGNlcnRhaW4ga2V5cyBmcm9tIGJlaW5nCmNhcHR1cmVkLiBGb3IgZXhhbXBsZSwgQ2hyb21lIGJsb2NrcyBib3RoIEN0cmwtVyBhbmQgQ3RybC1OLCB3aXRoIHRoZQpyZXN1bHQgdGhhdCBpZGlvbWF0aWMgdXNlIG9mIEVtYWNzIGtleXMgd2lsbCBjb25zdGFudGx5IGNsb3NlIHlvdXIgdGFiCm9yIG9wZW4gYSBuZXcgd2luZG93LjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgZWx0ID0gZWRpdG9yLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICAgICAgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiI2RlZiI7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgZWx0LnN0eWxlLmJhY2tncm91bmQgPSAiIjsgfSwgMzAwKTsKICAgICAgfTsKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiLAogICAgICAgIGtleU1hcDogImVtYWNzIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/folding.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZGUgRm9sZGluZyBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7bWluLXdpZHRoOiAyLjZlbTsgY3Vyc29yOiBwb2ludGVyO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IENvZGUgRm9sZGluZyBEZW1vPC9oMT4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGNvZGUgZm9sZGluZyB1c2luZyB0aGUgY29kZQogICAgaW4gPGEgaHJlZj0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjxjb2RlPmZvbGRjb2RlLmpzPC9jb2RlPjwvYT4uCiAgICBQcmVzcyBjdHJsLXEgb3IgY2xpY2sgb24gdGhlIGd1dHRlciB0byBmb2xkIGEgYmxvY2ssIGFnYWluCiAgICB0byB1bmZvbGQuPC9wPgogICAgPGZvcm0+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTBlbTsgbWFyZ2luLWJvdHRvbTogMWVtIj5KYXZhU2NyaXB0Ojxicj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjwvdGV4dGFyZWE+PC9kaXY+CiAgICAgIDxkaXYgc3R5bGU9Im1heC13aWR0aDogNTBlbSI+SFRNTDo8YnI+PHRleHRhcmVhIGlkPSJjb2RlLWh0bWwiIG5hbWU9ImNvZGUtaHRtbCI+PC90ZXh0YXJlYT48L2Rpdj4KICAgIDwvZm9ybT4KICAgIDxzY3JpcHQgaWQ9InNjcmlwdCI+CndpbmRvdy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHZhciBzYyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzY3JpcHQiKTsKICB0ZS52YWx1ZSA9IChzYy50ZXh0Q29udGVudCB8fCBzYy5pbm5lclRleHQgfHwgc2MuaW5uZXJIVE1MKS5yZXBsYWNlKC9eXHMqLywgIiIpOwogIHNjLmlubmVySFRNTCA9ICIiOwogIHZhciB0ZV9odG1sID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUtaHRtbCIpOwogIHRlX2h0bWwudmFsdWUgPSAiPGh0bWw+XG4gICIgKyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MICsgIlxuPC9odG1sPiI7CgogIHZhciBmb2xkRnVuYyA9IENvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uKENvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlcik7CiAgd2luZG93LmVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlLCB7CiAgICBtb2RlOiAiamF2YXNjcmlwdCIsCiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIGxpbmVXcmFwcGluZzogdHJ1ZSwKICAgIG9uR3V0dGVyQ2xpY2s6IGZvbGRGdW5jLAogICAgZXh0cmFLZXlzOiB7IkN0cmwtUSI6IGZ1bmN0aW9uKGNtKXtmb2xkRnVuYyhjbSwgY20uZ2V0Q3Vyc29yKCkubGluZSk7fX0KICB9KTsKICBmb2xkRnVuYyhlZGl0b3IsIDkpOwogIGZvbGRGdW5jKGVkaXRvciwgMjApOwoKICB2YXIgZm9sZEZ1bmNfaHRtbCA9IENvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uKENvZGVNaXJyb3IudGFnUmFuZ2VGaW5kZXIpOwogIHdpbmRvdy5lZGl0b3JfaHRtbCA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlX2h0bWwsIHsKICAgIG1vZGU6ICJ0ZXh0L2h0bWwiLAogICAgbGluZU51bWJlcnM6IHRydWUsCiAgICBsaW5lV3JhcHBpbmc6IHRydWUsCiAgICBvbkd1dHRlckNsaWNrOiBmb2xkRnVuY19odG1sLAogICAgZXh0cmFLZXlzOiB7IkN0cmwtUSI6IGZ1bmN0aW9uKGNtKXtmb2xkRnVuY19odG1sKGNtLCBjbS5nZXRDdXJzb3IoKS5saW5lKTt9fQogIH0pCiAgZm9sZEZ1bmNfaHRtbChlZGl0b3JfaHRtbCwgMSk7CiAgZm9sZEZ1bmNfaHRtbChlZGl0b3JfaHRtbCwgMTUpOwp9Owo8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/formatting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZvcm1hdHRpbmcgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2Zvcm1hdHRpbmcuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjBweDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRm9ybWF0dGluZyBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjxzY3JpcHQ+IGZ1bmN0aW9uIChzLGUpeyBmb3IodmFyIGk9MDsgaSA8IDE7IGkrKykgdGVzdCgidGVzdCgpO2E9MSIpO30gPC9zY3JpcHQ+CjxzY3JpcHQ+CmZ1bmN0aW9uIHRlc3QoYyl7ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspewkgICAgICAgICAgcHJvY2VzcygiYS5iKCk7YyA9IG51bGw7IiwgMzAwKTt9Cn0KPC9zY3JpcHQ+Cjx0YWJsZT48dHI+PHRkPnRlc3QgMTwvdGQ+PC90cj48dHI+PHRkPnRlc3QgMjwvdGQ+PC90cj48L3RhYmxlPgo8c2NyaXB0PiBmdW5jdGlvbiB0ZXN0KCkgeyByZXR1cm4gMTt9IDwvc2NyaXB0Pgo8c3R5bGU+IC50ZXN0IHsgZm9udC1zaXplOiBtZWRpdW07IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IH0KPC9zdHlsZT48L3RleHRhcmVhPjwvZm9ybT4KCjxwPlNlbGVjdCBhIHBpZWNlIG9mIGNvZGUgYW5kIGNsaWNrIG9uZSBvZiB0aGUgbGlua3MgYmVsb3cgdG8gYXBwbHkgYXV0b21hdGljIGZvcm1hdHRpbmcgdG8gdGhlIHNlbGVjdGVkIHRleHQgb3IgY29tbWVudC91bmNvbW1lbnQgdGhlIHNlbGVjdGVkIHRleHQuIE5vdGUgdGhhdCB0aGUgZm9ybWF0dGluZyBiZWhhdmlvciBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IGJsb2NrJ3MgbW9kZS4KICAgIDx0YWJsZT4KICAgICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgIDxhIGhyZWY9ImphdmFzY3JpcHQ6YXV0b0Zvcm1hdFNlbGVjdGlvbigpIj4KICAgICAgICAgICAgQXV0b2Zvcm1hdCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKHRydWUpIj4KICAgICAgICAgICAgQ29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDpjb21tZW50U2VsZWN0aW9uKGZhbHNlKSI+CiAgICAgICAgICAgIFVuY29tbWVudCBTZWxlY3RlZAogICAgICAgICAgPC9hPgogICAgICAgIDwvdGQ+CiAgICAgIDwvdHI+CiAgICA8L3RhYmxlPgo8L3A+ICAgIAogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiAiaHRtbG1peGVkIgogICAgICB9KTsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kc1sic2VsZWN0QWxsIl0oZWRpdG9yKTsKICAgICAgCiAgICAgIGZ1bmN0aW9uIGdldFNlbGVjdGVkUmFuZ2UoKSB7CiAgICAgICAgcmV0dXJuIHsgZnJvbTogZWRpdG9yLmdldEN1cnNvcih0cnVlKSwgdG86IGVkaXRvci5nZXRDdXJzb3IoZmFsc2UpIH07CiAgICAgIH0KICAgICAgCiAgICAgIGZ1bmN0aW9uIGF1dG9Gb3JtYXRTZWxlY3Rpb24oKSB7CiAgICAgICAgdmFyIHJhbmdlID0gZ2V0U2VsZWN0ZWRSYW5nZSgpOwogICAgICAgIGVkaXRvci5hdXRvRm9ybWF0UmFuZ2UocmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9CiAgICAgIAogICAgICBmdW5jdGlvbiBjb21tZW50U2VsZWN0aW9uKGlzQ29tbWVudCkgewogICAgICAgIHZhciByYW5nZSA9IGdldFNlbGVjdGVkUmFuZ2UoKTsKICAgICAgICBlZGl0b3IuY29tbWVudFJhbmdlKGlzQ29tbWVudCwgcmFuZ2UuZnJvbSwgcmFuZ2UudG8pOwogICAgICB9ICAgICAgCiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/fullscreen.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEZ1bGwgU2NyZWVuIEVkaXRpbmc8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmlnaHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO30KICAgICAgICAuQ29kZU1pcnJvci1mdWxsc2NyZWVuIHsKICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgICAgdG9wOiAwOwogICAgICAgICAgICBsZWZ0OiAwOwogICAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgICAgICB6LWluZGV4OiA5OTk5OwogICAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgICAgIGJvcmRlcjogMHB4IHNvbGlkICNCQkJCQkI7CiAgICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRnVsbCBTY3JlZW4gRWRpdGluZzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIiByb3dzPSI1Ij4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KCjwvdGV4dGFyZWE+PC9mb3JtPgogPHNjcmlwdD4KICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgdGhlbWU6ICJuaWdodCIsCiAgICAgICAgZXh0cmFLZXlzOiB7CiAgICAgICAgICAgICJGMTEiOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YXIgc2Nyb2xsZXIgPSBlZGl0b3IuZ2V0U2Nyb2xsZXJFbGVtZW50KCk7CiAgICAgICAgICAgICAgaWYgKHNjcm9sbGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mdWxsc2NyZWVuXGIvKSA9PT0gLTEpIHsKICAgICAgICAgICAgICAgIHNjcm9sbGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3ItZnVsbHNjcmVlbiI7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS53aWR0aCA9ICIxMDAlIjsKICAgICAgICAgICAgICAgIGVkaXRvci5yZWZyZXNoKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNjcm9sbGVyLmNsYXNzTmFtZSA9IHNjcm9sbGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mdWxsc2NyZWVuIiwgIiIpOwogICAgICAgICAgICAgICAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gJyc7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS53aWR0aCA9ICcnOwogICAgICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJFc2MiOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICB2YXIgc2Nyb2xsZXIgPSBlZGl0b3IuZ2V0U2Nyb2xsZXJFbGVtZW50KCk7CiAgICAgICAgICAgICAgaWYgKHNjcm9sbGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mdWxsc2NyZWVuXGIvKSAhPT0gLTEpIHsKICAgICAgICAgICAgICAgIHNjcm9sbGVyLmNsYXNzTmFtZSA9IHNjcm9sbGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mdWxsc2NyZWVuIiwgIiIpOwogICAgICAgICAgICAgICAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gJyc7CiAgICAgICAgICAgICAgICBzY3JvbGxlci5zdHlsZS53aWR0aCA9ICcnOwogICAgICAgICAgICAgICAgZWRpdG9yLnJlZnJlc2goKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9KTsKCjwvc2NyaXB0PgoKICAgIDxwPlByZXNzIDxzdHJvbmc+RjExPC9zdHJvbmc+IHdoZW4gY3Vyc29yIGlzIGluIHRoZSBlZGl0b3IgdG8gdG9nZ2xlIGZ1bGwgc2NyZWVuIGVkaXRpbmcuIDxzdHJvbmc+RXNjPC9zdHJvbmc+IGNhbiBhbHNvIGJlIHVzZWQgdG8gPGk+ZXhpdDwvaT4gZnVsbCBzY3JlZW4gZWRpdGluZy48L3A+CgogICAgPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBEb2VzIG5vdCBjdXJyZW50bHkgd29yayBjb3JyZWN0bHkgaW4gSUUKICAgIDYgYW5kIDcsIHdoZXJlIHNldHRpbmcgdGhlIGhlaWdodCBvZiBzb21ldGhpbmcKICAgIHRvIDxjb2RlPjEwMCU8L2NvZGU+IGRvZXNuJ3QgbWFrZSBpdCBmdWxsIHNjcmVlbi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/marker.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvci1ndXR0ZXIgewogICAgICAgIHdpZHRoOiAzZW07CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNhYWE7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEJyZWFrcG9pbnQgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogIGxpbmVOdW1iZXJzOiB0cnVlLAogIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICBlbHNlCiAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgfQp9KTsKPC90ZXh0YXJlYT48L2Zvcm0+Cgo8cD5DbGljayB0aGUgbGluZS1udW1iZXIgZ3V0dGVyIHRvIGFkZCBvciByZW1vdmUgJ2JyZWFrcG9pbnRzJy48L3A+CgogICAgPHNjcmlwdD4KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKGNtLCBuKSB7CiAgICAgICAgICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKG4pOwogICAgICAgICAgaWYgKGluZm8ubWFya2VyVGV4dCkKICAgICAgICAgICAgY20uY2xlYXJNYXJrZXIobik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNtLnNldE1hcmtlcihuLCAiPHNwYW4gc3R5bGU9XCJjb2xvcjogIzkwMFwiPuKXjzwvc3Bhbj4gJU4lIik7CiAgICAgICAgfQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/matchhighlighter.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1hdGNoIEhpZ2hsaWdodGVyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9zZWFyY2hjdXJzb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL21hdGNoLWhpZ2hsaWdodGVyLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQoJICAKICAgICAgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaGlnaGxpZ2h0IHsgYmFja2dyb3VuZDogI2U5ZTllOSB9CiAgICAgIC5Db2RlTWlycm9yLWZvY3VzZWQgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaGlnaGxpZ2h0IHsgYmFja2dyb3VuZDogI2U3ZTRmZjsgIWltcG9ydGFudCB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNYXRjaCBIaWdobGlnaHRlciBEZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPlNlbGVjdCB0aGlzIHRleHQ6IGhhcmRUb1Nwb3RWYXIKCUFuZCBldmVyeXdoZXJlIGVsc2UgaW4geW91ciBjb2RlIHdoZXJlIGhhcmRUb1Nwb3RWYXIgYXBwZWFycyB3aWxsIGF1dG9tYXRpY2FsbHkgaWxsdW1pbmF0ZS4KR2l2ZSBpdCBhIHRyeSEgIE5vIG1vcmUgaGFyZFRvU3BvdFZhcnMuPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICBsaW5lTnVtYmVycyA6IHRydWUsCiAgb25DdXJzb3JBY3Rpdml0eTogZnVuY3Rpb24oKSB7CiAgICBlZGl0b3IubWF0Y2hIaWdobGlnaHQoIkNvZGVNaXJyb3ItbWF0Y2hoaWdobGlnaHQiKTsKICB9Cn0pOwo8L3NjcmlwdD4KCiAgICA8cD5IaWdobGlnaHQgbWF0Y2hlcyBvZiBzZWxlY3RlZCB0ZXh0IG9uIHNlbGVjdDwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/mustache.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE92ZXJsYXkgUGFyc2VyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9vdmVybGF5LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5jbS1tdXN0YWNoZSB7Y29sb3I6ICMwY2E7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3ZlcmxheSBQYXJzZXIgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPGh0bWw+CiAgPGJvZHk+CiAgICA8aDE+e3t0aXRsZX19PC9oMT4KICAgIDxwPlRoZXNlIGFyZSBsaW5rcyB0byB7e3RoaW5nc319OjwvcD4KICAgIDx1bD57eyNsaW5rc319CiAgICAgIDxsaT48YSBocmVmPSJ7e3VybH19Ij57e3RleHR9fTwvYT48L2xpPgogICAge3svbGlua3N9fTwvdWw+CiAgPC9ib2R5Pgo8L2h0bWw+CjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibXVzdGFjaGUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtdXN0YWNoZU92ZXJsYXkgPSB7CiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY2g7CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goInt7IikpIHsKICAgICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkKICAgICAgICAgIGlmIChjaCA9PSAifSIgJiYgc3RyZWFtLm5leHQoKSA9PSAifSIpIGJyZWFrOwogICAgICAgIHJldHVybiAibXVzdGFjaGUiOwogICAgICB9CiAgICAgIHdoaWxlIChzdHJlYW0ubmV4dCgpICE9IG51bGwgJiYgIXN0cmVhbS5tYXRjaCgie3siLCBmYWxzZSkpIHt9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH07CiAgcmV0dXJuIENvZGVNaXJyb3Iub3ZlcmxheVBhcnNlcihDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBwYXJzZXJDb25maWcuYmFja2Ryb3AgfHwgInRleHQvaHRtbCIpLCBtdXN0YWNoZU92ZXJsYXkpOwp9KTsKdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHttb2RlOiAibXVzdGFjaGUifSk7Cjwvc2NyaXB0PgoKICAgIDxwPkRlbW9uc3RyYXRpb24gb2YgYSBtb2RlIHRoYXQgcGFyc2VzIEhUTUwsIGhpZ2hsaWdodGluZwogICAgdGhlIDxhIGhyZWY9Imh0dHA6Ly9tdXN0YWNoZS5naXRodWIuY29tLyI+TXVzdGFjaGU8L2E+IHRlbXBsYXRpbmcKICAgIGRpcmVjdGl2ZXMgaW5zaWRlIG9mIGl0IGJ5IHVzaW5nIHRoZSBjb2RlCiAgICBpbiA8YSBocmVmPSIuLi9saWIvdXRpbC9vdmVybGF5LmpzIj48Y29kZT5vdmVybGF5LmpzPC9jb2RlPjwvYT4uIFZpZXcKICAgIHNvdXJjZSB0byBzZWUgdGhlIDE1IGxpbmVzIG9mIGNvZGUgbmVlZGVkIHRvIGFjY29tcGxpc2ggdGhpcy48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/preview.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD11dGYtOD4KICAgIDxzY3JpcHQgc3JjPS4uL2xpYi9jb2RlbWlycm9yLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS94bWwveG1sLmpzPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Li4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2Nzcy9jc3MuanM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0uLi9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanM+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9c3R5bGVzaGVldCBocmVmPS4uL2xpYi9jb2RlbWlycm9yLmNzcz4KICAgIDxsaW5rIHJlbD1zdHlsZXNoZWV0IGhyZWY9Li4vZG9jL2RvY3MuY3NzPgogICAgPHN0eWxlIHR5cGU9dGV4dC9jc3M+CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICB3aWR0aDogNTAlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICB9CiAgICAgIGlmcmFtZSB7CiAgICAgICAgd2lkdGg6IDQ5JTsKICAgICAgICBmbG9hdDogbGVmdDsKICAgICAgICBoZWlnaHQ6IDMwMHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOwogICAgICAgIGJvcmRlci1sZWZ0OiAwcHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUw1IHByZXZpZXc8L2gxPgogICAgPHRleHRhcmVhIGlkPWNvZGUgbmFtZT1jb2RlPgo8IWRvY3R5cGUgaHRtbD4KPGh0bWw+CiAgPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PXV0Zi04PgogICAgPHRpdGxlPkhUTUw1IGNhbnZhcyBkZW1vPC90aXRsZT4KICAgIDxzdHlsZT5wIHtmb250LWZhbWlseTogbW9ub3NwYWNlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxwPkNhbnZhcyBwYW5lIGdvZXMgaGVyZTo8L3A+CiAgICA8Y2FudmFzIGlkPXBhbmUgd2lkdGg9MzAwIGhlaWdodD0yMDA+PC9jYW52YXM+CiAgICA8c2NyaXB0PgogICAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BhbmUnKTsKICAgICAgdmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKTsKCiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gJ3JnYigyNTAsMCwwKSc7CiAgICAgIGNvbnRleHQuZmlsbFJlY3QoMTAsIDEwLCA1NSwgNTApOwoKICAgICAgY29udGV4dC5maWxsU3R5bGUgPSAncmdiYSgwLCAwLCAyNTAsIDAuNSknOwogICAgICBjb250ZXh0LmZpbGxSZWN0KDMwLCAzMCwgNTUsIDUwKTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPjwvdGV4dGFyZWE+CiAgICA8aWZyYW1lIGlkPXByZXZpZXc+PC9pZnJhbWU+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZGVsYXk7CiAgICAgIC8vIEluaXRpYWxpemUgQ29kZU1pcnJvciBlZGl0b3Igd2l0aCBhIG5pY2UgaHRtbDUgY2FudmFzIGRlbW8uCiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29kZScpLCB7CiAgICAgICAgbW9kZTogJ3RleHQvaHRtbCcsCiAgICAgICAgdGFiTW9kZTogJ2luZGVudCcsCiAgICAgICAgb25DaGFuZ2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KGRlbGF5KTsKICAgICAgICAgIGRlbGF5ID0gc2V0VGltZW91dCh1cGRhdGVQcmV2aWV3LCAzMDApOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIAogICAgICBmdW5jdGlvbiB1cGRhdGVQcmV2aWV3KCkgewogICAgICAgIHZhciBwcmV2aWV3RnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJldmlldycpOwogICAgICAgIHZhciBwcmV2aWV3ID0gIHByZXZpZXdGcmFtZS5jb250ZW50RG9jdW1lbnQgfHwgIHByZXZpZXdGcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50OwogICAgICAgIHByZXZpZXcub3BlbigpOwogICAgICAgIHByZXZpZXcud3JpdGUoZWRpdG9yLmdldFZhbHVlKCkpOwogICAgICAgIHByZXZpZXcuY2xvc2UoKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KHVwZGF0ZVByZXZpZXcsIDMwMCk7CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/resize.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgICAgIH0KICAgICAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEF1dG9yZXNpemUgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBoZWlnaHQ6IGF1dG87CiAgb3ZlcmZsb3cteTogaGlkZGVuOwogIG92ZXJmbG93LXg6IGF1dG87CiAgd2lkdGg6IDEwMCUKfTwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+Qnkgc2V0dGluZyBhIGZldyBDU1MgcHJvcGVydGllcywgQ29kZU1pcnJvciBjYW4gYmUgbWFkZSB0bwphdXRvbWF0aWNhbGx5IHJlc2l6ZSB0byBmaXQgaXRzIGNvbnRlbnQuPC9wPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/runmode.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1vZGUgUnVubmVyIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvdXRpbC9ydW5tb2RlLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNb2RlIFJ1bm5lciBEZW1vPC9oMT4KCiAgICA8dGV4dGFyZWEgaWQ9ImNvZGUiIHN0eWxlPSJ3aWR0aDogOTAlOyBoZWlnaHQ6IDdlbTsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7IHBhZGRpbmc6IC4yZW0gLjRlbTsiPgo8Zm9vYmFyPgogIDxibGFoPkVudGVyIHlvdXIgeG1sIGhlcmUgYW5kIHByZXNzIHRoZSBidXR0b24gYmVsb3cgdG8gZGlzcGxheQogICAgaXQgYXMgaGlnaGxpZ2h0ZWQgYnkgdGhlIENvZGVNaXJyb3IgWE1MIG1vZGU8L2JsYWg+CiAgPHRhZzIgZm9vPSIyIiBiYXI9IiZhbXA7cXVvdDtiYXImYW1wO3F1b3Q7Ii8+CjwvZm9vYmFyPjwvdGV4dGFyZWE+PGJyPgogICAgPGJ1dHRvbiBvbmNsaWNrPSJkb0hpZ2hsaWdodCgpOyI+SGlnaGxpZ2h0ITwvYnV0dG9uPgogICAgPHByZSBpZD0ib3V0cHV0IiBjbGFzcz0iY20tcy1kZWZhdWx0Ij48L3ByZT4KCiAgICA8c2NyaXB0PgpmdW5jdGlvbiBkb0hpZ2hsaWdodCgpIHsKICBDb2RlTWlycm9yLnJ1bk1vZGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKS52YWx1ZSwgImFwcGxpY2F0aW9uL3htbCIsCiAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvdXRwdXQiKSk7Cn0KPC9zY3JpcHQ+CgogICAgPHA+UnVubmluZyBhIENvZGVNaXJyb3IgbW9kZSBvdXRzaWRlIG9mIHRoZSBlZGl0b3IuCiAgICBUaGUgPGNvZGU+Q29kZU1pcnJvci5ydW5Nb2RlPC9jb2RlPiBmdW5jdGlvbiwgZGVmaW5lZAogICAgaW4gPGNvZGU+PGEgaHJlZj0iLi4vbGliL3V0aWwvcnVubW9kZS5qcyI+bGliL3J1bm1vZGUuanM8L2E+PC9jb2RlPiB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+dGV4dCAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIGRvY3VtZW50IHRvIHJ1biB0aHJvdWdoIHRoZSBoaWdobGlnaHRlci48L2RkPgogICAgICA8ZHQ+PGNvZGU+bW9kZSAoPGEgaHJlZj0iLi4vZG9jL21hbnVhbC5odG1sI29wdGlvbl9tb2RlIj5tb2RlIHNwZWM8L2E+KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlIChtdXN0IGJlIGxvYWRlZCBhcyBub3JtYWwpLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5vdXRwdXQgKGZ1bmN0aW9uIG9yIERPTSBub2RlKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgdGhpcyBpcyBhIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCB0b2tlbiB3aXRoCiAgICAgIHR3byBhcmd1bWVudHMsIHRoZSB0b2tlbidzIHRleHQgYW5kIHRoZSB0b2tlbidzIHN0eWxlIGNsYXNzIChtYXkKICAgICAgYmUgPGNvZGU+bnVsbDwvY29kZT4gZm9yIHVuc3R5bGVkIHRva2VucykuIElmIGl0IGlzIGEgRE9NIG5vZGUsCiAgICAgIHRoZSB0b2tlbnMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudHMgYXMgaW4KICAgICAgYW4gZWRpdG9yLCBhbmQgaW5zZXJ0ZWQgaW50byB0aGUgbm9kZQogICAgICAodGhyb3VnaCA8Y29kZT5pbm5lckhUTUw8L2NvZGU+KS48L2RkPgogICAgPC9kbD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/search.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNlYXJjaC9SZXBsYWNlIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL2RpYWxvZy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi91dGlsL2RpYWxvZy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi91dGlsL3NlYXJjaGN1cnNvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL3V0aWwvc2VhcmNoLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICBkdCB7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsgY29sb3I6ICM2NjY7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2VhcmNoL1JlcGxhY2UgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgPGRkPldoZXRoZXIsIHdoZW4gaW5kZW50aW5nLCB0aGUgZmlyc3QgTio4IHNwYWNlcyBzaG91bGQgYmUKICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fdGFiTW9kZSI+PGNvZGU+dGFiTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogIDxkZD5EZXRlcm1pbmVzIHdoYXQgaGFwcGVucyB3aGVuIHRoZSB1c2VyIHByZXNzZXMgdGhlIHRhYiBrZXkuCiAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPiJjbGFzc2ljIiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICBiZWhhdmUgbGlrZSB0aGUgPGNvZGU+InNoaWZ0IjwvY29kZT4gbW9kZS4gKFdoZW4gc2hpZnQgaXMKICAgICAgaGVsZCwgdGhpcyBiZWhhdmVzIGxpa2UgdGhlIDxjb2RlPiJpbmRlbnQiPC9jb2RlPiBtb2RlLik8L2RkPgogICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kZW50IGFsbCBzZWxlY3RlZCBsaW5lcyBieQogICAgICBvbmUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4uCiAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICBsaW5lcyBvbmUgdW5pdC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImluZGVudCI8L2NvZGU+PC9kdD4KICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgY29udGV4dC4gT25seSB3b3JrcyBpZiB0aGUKICAgICAgbW9kZSA8YSBocmVmPSIjaW5kZW50Ij5zdXBwb3J0czwvYT4gaXQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGNhcHR1cmUgdGFiIHByZXNzZXMsIGxldCB0aGUgYnJvd3NlciBhcHBseSBpdHMKICAgICAgZGVmYXVsdCBiZWhhdmlvdXIgKHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgc2tpcHMgdG8gdGhlIG5leHQKICAgICAgY29udHJvbCkuPC9kZD4KICAgIDwvZGw+PC9kZD4KCiAgPGR0IGlkPSJvcHRpb25fZW50ZXJNb2RlIj48Y29kZT5lbnRlck1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogIGVudGVyIGtleSBpcyBwcmVzc2VkLiBUaGUgZm9sbG93aW5nIG1vZGVzIGFyZSBzdXBwb3J0ZWQ6CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhlIG1vZGUncyBpbmRlbnRhdGlvbiBydWxlcyB0byBnaXZlIHRoZSBuZXcgbGluZQogICAgICB0aGUgY29ycmVjdCBpbmRlbnRhdGlvbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JbmRlbnQgdGhlIGxpbmUgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPiJmbGF0IjwvY29kZT48L2R0PgogICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgIDwvZGw+PC9kZD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHttb2RlOiAidGV4dC9odG1sIiwgbGluZU51bWJlcnM6IHRydWV9KTsKPC9zY3JpcHQ+CgogICAgPHA+RGVtb25zdHJhdGlvbiBvZiBwcmltaXRpdmUgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gVGhlCiAgICBrZXliaW5kaW5ncyAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gYnkgY3VzdG9tIGtleW1hcHMpIGFyZTo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD5DdHJsLUYgLyBDbWQtRjwvZHQ+PGRkPlN0YXJ0IHNlYXJjaGluZzwvZGQ+CiAgICAgIDxkdD5DdHJsLUcgLyBDbWQtRzwvZHQ+PGRkPkZpbmQgbmV4dDwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLUcgLyBTaGlmdC1DbWQtRzwvZHQ+PGRkPkZpbmQgcHJldmlvdXM8L2RkPgogICAgICA8ZHQ+U2hpZnQtQ3RybC1GIC8gQ21kLU9wdGlvbi1GPC9kdD48ZGQ+UmVwbGFjZTwvZGQ+CiAgICAgIDxkdD5TaGlmdC1DdHJsLVIgLyBTaGlmdC1DbWQtT3B0aW9uLUY8L2R0PjxkZD5SZXBsYWNlIGFsbDwvZGQ+CiAgICA8L2RsPgogICAgPHA+U2VhcmNoaW5nIGlzIGVuYWJsZWQgYnkKICAgIGluY2x1ZGluZyA8YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPmxpYi91dGlsL3NlYXJjaC5qczwvYT4uCiAgICBGb3IgZ29vZC1sb29raW5nIGlucHV0IGRpYWxvZ3MsIHlvdSBhbHNvIHdhbnQgdG8gaW5jbHVkZQogICAgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmpzIj5saWIvdXRpbC9kaWFsb2cuanM8L2E+CiAgICBhbmQgPGEgaHJlZj0iLi4vbGliL3V0aWwvZGlhbG9nLmNzcyI+bGliL3V0aWwvZGlhbG9nLmNzczwvYT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/theme.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRoZW1lIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL21vbm9rYWkuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvY29iYWx0LmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3RoZW1lL2VjbGlwc2UuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvcnVieWJsdWUuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUvbGVzc2VyLWRhcmsuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhlbWUveHEtZGFyay5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vZG9jL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGhlbWUgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KZnVuY3Rpb24gZmluZFNlcXVlbmNlKGdvYWwpIHsKICBmdW5jdGlvbiBmaW5kKHN0YXJ0LCBoaXN0b3J5KSB7CiAgICBpZiAoc3RhcnQgPT0gZ29hbCkKICAgICAgcmV0dXJuIGhpc3Rvcnk7CiAgICBlbHNlIGlmIChzdGFydCA+IGdvYWwpCiAgICAgIHJldHVybiBudWxsOwogICAgZWxzZQogICAgICByZXR1cm4gZmluZChzdGFydCArIDUsICIoIiArIGhpc3RvcnkgKyAiICsgNSkiKSB8fAogICAgICAgICAgICAgZmluZChzdGFydCAqIDMsICIoIiArIGhpc3RvcnkgKyAiICogMykiKTsKICB9CiAgcmV0dXJuIGZpbmQoMSwgIjEiKTsKfTwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+U2VsZWN0IGEgdGhlbWU6IDxzZWxlY3Qgb25jaGFuZ2U9InNlbGVjdFRoZW1lKHRoaXMpIj4KICAgIDxvcHRpb24gc2VsZWN0ZWQ+ZGVmYXVsdDwvb3B0aW9uPgogICAgPG9wdGlvbj5uaWdodDwvb3B0aW9uPgogICAgPG9wdGlvbj5tb25va2FpPC9vcHRpb24+CiAgICA8b3B0aW9uPm5lYXQ8L29wdGlvbj4KICAgIDxvcHRpb24+ZWxlZ2FudDwvb3B0aW9uPgogICAgPG9wdGlvbj5jb2JhbHQ8L29wdGlvbj4KICAgIDxvcHRpb24+ZWNsaXBzZTwvb3B0aW9uPgogICAgPG9wdGlvbj5ydWJ5Ymx1ZTwvb3B0aW9uPgogICAgPG9wdGlvbj5sZXNzZXItZGFyazwvb3B0aW9uPgogICAgPG9wdGlvbj54cS1kYXJrPC9vcHRpb24+Cjwvc2VsZWN0Pgo8L3A+Cgo8c2NyaXB0PgogIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICBsaW5lTnVtYmVyczogdHJ1ZQogIH0pOwogIGZ1bmN0aW9uIHNlbGVjdFRoZW1lKG5vZGUpIHsKICAgIHZhciB0aGVtZSA9IG5vZGUub3B0aW9uc1tub2RlLnNlbGVjdGVkSW5kZXhdLmlubmVySFRNTDsKICAgIGVkaXRvci5zZXRPcHRpb24oInRoZW1lIiwgdGhlbWUpOwogIH0KPC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/vim.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpbSBiaW5kaW5ncyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4va2V5bWFwL3ZpbS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWaW0gYmluZGluZ3MgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KI2luY2x1ZGUgInN5c2NhbGxzLmgiCi8qIGdldGNoYXI6ICBzaW1wbGUgYnVmZmVyZWQgdmVyc2lvbiAqLwppbnQgZ2V0Y2hhcih2b2lkKQp7CiAgc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CiAgc3RhdGljIGNoYXIgKmJ1ZnAgPSBidWY7CiAgc3RhdGljIGludCBuID0gMDsKICBpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KICAgIG4gPSByZWFkKDAsIGJ1Ziwgc2l6ZW9mIGJ1Zik7CiAgICBidWZwID0gYnVmOwogIH0KICByZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGhlIHZpbSBrZXliaW5kaW5ncyBhcmUgZW5hYmxlZCBieQppbmNsdWRpbmcgPGEgaHJlZj0iLi4va2V5bWFwL3ZpbS5qcyI+a2V5bWFwL3ZpbS5qczwvYT4gYW5kIHNldHRpbmcKdGhlIDxjb2RlPmtleU1hcDwvY29kZT4gb3B0aW9uIHRvIDxjb2RlPiJ2aW0iPC9jb2RlPi4gQmVjYXVzZQpDb2RlTWlycm9yJ3MgaW50ZXJuYWwgQVBJIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIFZpbSwgdGhleSBhcmUgb25seQphIGxvb3NlIGFwcHJveGltYXRpb24gb2YgYWN0dWFsIHZpbSBiaW5kaW5ncywgdGhvdWdoLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLnNhdmUgPSBmdW5jdGlvbigpe2FsZXJ0KCJTYXZpbmciKTt9OwogICAgICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1jc3JjIiwKICAgICAgICBrZXlNYXA6ICJ2aW0iCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/visibletabs.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZpc2libGUgdGFicyBkZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2RvYy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZTt9CiAgICAgIC5jbS10YWI6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICJcMjFlNSI7CiAgICAgICAgZGlzcGxheTogLW1vei1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogLXdlYmtpdC1pbmxpbmUtYmxvY2s7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxlZnQ6IC0xLjRlbTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVmlzaWJsZSB0YWJzIGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiNpbmNsdWRlICJzeXNjYWxscy5oIgovKiBnZXRjaGFyOiAgc2ltcGxlIGJ1ZmZlcmVkIHZlcnNpb24gKi8KaW50IGdldGNoYXIodm9pZCkKewoJc3RhdGljIGNoYXIgYnVmW0JVRlNJWl07CglzdGF0aWMgY2hhciAqYnVmcCA9IGJ1ZjsKCXN0YXRpYyBpbnQgbiA9IDA7CglpZiAobiA9PSAwKSB7ICAvKiBidWZmZXIgaXMgZW1wdHkgKi8KCQluID0gcmVhZCgwLCBidWYsIHNpemVvZiBidWYpOwoJCWJ1ZnAgPSBidWY7Cgl9CglyZXR1cm4gKC0tbiA+PSAwKSA/ICh1bnNpZ25lZCBjaGFyKSAqYnVmcCsrIDogRU9GOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+VGFicyBpbnNpZGUgdGhlIGVkaXRvciBhcmUgc3BhbnMgd2l0aCB0aGUKY2xhc3MgPGNvZGU+Y20tdGFiPC9jb2RlPiwgYW5kIGNhbiBiZSBzdHlsZWQuIFRoaXMgZGVtbyB1c2VzCmFuIDxjb2RlPjphZnRlcjwvY29kZT4gcHNldWRvLWNsYXNzIENTUyBoYWNrIHRoYXQgd2lsbCBub3Qgd29yayBvbiBvbGQKYnJvd3NlcnMuIFlvdSBjYW4gdXNlIGEgbW9yZSBjb25zZXJ2YXRpdmUgdGVjaG5pcXVlIGxpa2UgYSBiYWNrZ3JvdW5kCmltYWdlIGFzIGFuIGFsdGVybmF0aXZlLjwvcD4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIHRhYlNpemU6IDQsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/doc/baboon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAXsAAADcCAYAAACRUAHpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAADVAAAA1QBkANg0QAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAACAASURBVHic7J13fBRV18d/d9MTkpBASKEkQCKhBpBAhFAEjKAgJXREelFRAUUExcKj74M8gkp/lEeKSBdQIkWQEjpSAgKhh04CIY20TbI57x+TXbJkd2dmd3Znk8z38zkSd285M3Pv2Tvn3nsuIyIoGIcxxgBUA+ALoKoZ0pyIrthecwUFBYWnOMqtgJwwxtwB1AQQVPLvs3/XBBAIwNmCapoCUIy9goKCrFRoY88YcwQQCqBhiYRB36BXtYEaTQH8aoN6FBQUFIxSIYw9Y8wDQAM8NepaCQXgJKNqANBE5voVSsEYqw7gZQBRRPSO3PooKNiKcmXsGWO+ABqhrFGvA4DJqJopmsqtQGWmZM7leQCvlEgkABWAI3LqpaBga+za2DPG/AF0BNCpRBrKqY+ZhDLG3IgoT25FKguMsaoAYsAZ924A/A0ku2xTpRQUZMaujD1jLAD6xj1cTn0kQgXubeSU3IpUZBhjEXg6en8BgANPFsXYK1QqZDX2jLFA6Bv3BnLqYy4uLi5Qq9WmkjSFYuwlhTHmBaArOOPeHdykuxgUY69QqbCpsS9xy3TGU+P+nC3rtxRfX1+0aNECnTp1QqtWrfDcc88hMDAQjo6OCA4OxoMHD4xlVfz2EsAYawzOsL8CIBqWTb5flUQpBYVygtWNPWOsDoC+AGIBtAXn1rBr/P39ERkZiY4dO6Jly5YICwtDjRo14OLiYjRPy5Yt8ccffxj7WjH2ZlCyyqoznrpn6khY/AnG2GkAx7VCRLclLF9Bwa6wirFnjIWCM+6x4FY/2CW1a9dGVFQUOnTogObNm6N+/fqoXr06nJzEDxg7depkytgryy9FwBjzBDAfwGAAxn9hLcMd3NtBdKl6kwGcwNMfgL+JKMtK9Sso2BTJjD1jrAk4494XQDOpyrUUlUqFkJAQREdHIzo6GhEREQgJCUG1atXg4MA3hyecli1bmvo6kDFWjYgeS1ZhBYUx1hLAOnAb4GxNAIDXSgQAiDF2CU+N/wkA54ioSAbdFBQsglkSG4cx9jyejuBl9b87OjoiLCwMHTp0QNu2bdG0aVPUqVMHPj4+UKnEeY6Kiopw7do1/PPPP7hw4QIuXryIwsJCzJ07F/Xq1TOY586dO6hTx6SX4UUi2i9KkUoGY+xdAP+BZeEprE0eAK375wQ4989NWTVSUBCAaGPPGAsHMBLAQADB1lCKj+DgYLz22mto164dGjdujNq1a8PLywvc/hnhqNVqXLlyRWfQL168iNzcXDRv3hxBQUHIyclBRkaGTlQqFWbPno3atWuXKaugoMCkTx/Au0S0QNyVVg5KNsstx9MRdXkjBcB4IvpNbkUUFIwhyNiXLHMbCM7Iv2BtpUqjUqnQokULDBo0CF27dkWDBg3g5uYmqoz8/HxcvnxZz6hfuHAB169fh0ajKZPe2dkZUVFReOmllzBmzBgEBAQIqsfPzw+pqanGvv6RiMaJUrwSwBiLBrAGQNlf0PLBbQBjiGi33IooKJjCqLEv2WbeCcAocH54d1so5O7ujhdffBEDBgxAdHQ0goODBfvW8/LykJiYqGfQL168iBs3bqC4uNgsfVxcXPD666/jgw8+QHi46T1eXbt2xV9//WXs62NEZNMfSnuGMaYCMB3AF+DfAGWPEIAfAEwloidyK6OgwEcZY88YCwYwAsBwAHWtrYC/vz969eqFXr16oVWrVvD29oazszOvS+bq1as4duwYLly4oDPqN2/eNNuo88EYw+uvv44FCxbA29vbYJp//etf+PTTT40V8QSAN8l4gECJgd0EoI9cOlQg1ADqEpHRzRUKCvYEIyIwxtzAjd5HglvXbLWgYg0bNsSAAQPQpUsXBAcHw8fHB56enibzFBUVISEhAYcOHdJJSkqKtVQ0SUhICFavXo127dqV+W7nzp3o3r27qex15Z7MK3nW+wG0llOPCsI8InpfbiUUFITAACwAMAyA4eGqBTg7O+OFF17Aq6++imbNmqFOnTqoU6cOPDw8TObLycnBsWPHdIb92LFjyM7Ollo9XhhjOtdNeno60tPToVar4eDggI8//hgzZ86Eo+PT1as3btxA/fr1TRX5GhFts67W/DDGagA4Bhu8uVVwcgCEEJHRiRoFBXvBEUAEJDL03t7eiIqKQnR0NBo1aoSwsDA0aNAAzs6mV9I9fPhQb9R+5swZFBXJv5Q5NDQUn3/+Ofr3769zK+Xm5iI9PR1paWlIS0tDjRo1dOkDAwP5imwKQHZjD24XsxKF03I8AEwG8LHciigo8MEAfApukkw0fn5+iIyMRIsWLdCoUSM8//zzaNCAP5bZ1atX9Yz7lSvCT+1zdHSEv78/cnNzkZ2djcLCQnNUF0Xnzp2xfPlyvnX0AICqVasiMzPT2NfriGiwpMqJpCR8xV/gDnZRsJwsAMFElCG3IgoKpmAA2gE4xJdQpVLBz88PERERaNasGV544QW0a9cO/v6GQoU/xRJ/u6+vL2JiYtCoUSM0atQIDRs2RFhYmF44g4KCAmRnZyMzMxMXL17EmTNnkJCQgISEBNy4cQNSzYd6eXlh3rx5GD16tMl00dHROHz4sLGvLxCRbKETSsJY/AVpY8woAJ8S0b/kVkJBgQ9HcKMTMiVfffUV5eTkEB/Z2dm0Z88e+vzzz6lr165UpUoVk+UakqioKFq5ciXl5eXx1meKzMxM2rFjB40ePZqqVasmWg9D0rdvXyooKDBa58cff2wqfyEAZyKCrQVAYwAPpLgHipSRVABV5HiuiigiVLj/cH5kkw168uTJZIiUlBT69ddfafLkyRQZGUmOjo5md5ohQ4ZQQkKCwXospbCwkHbt2kVjxowhX19fizr3oEGDSKPRGKxn69atfPmbGXsY1hJwx/Kl2oFRrMjyga2fqyKKiBHuP8B7fI05IiKCtOTl5dGoUaPoueeek6SjhISE0M6dO8lWZGZm0qRJkyz6YXrzzTcNln358mW+vEPIlg+Yc9Nl2IExrOjyAICrLZ+tIoqIEe4/XAhek42ZMUapqamkJTg42OIOolKp6L333qPs7GySg3/++Yc6duxotv4zZ84sU2Z2djZfvn+TrR4u0AVAth0YwsoiEw08AwcAL4ML2fwVgIng9rREgYstJYtbT5HKJ0//EODP3bhxI2kZMWKERR3D0dGRVq9eTfbA5MmTzb6O77//vkx57u7upvLEkS0eLNADQL4dGMDKJLcBOJXc/9YAvgeQLCBfKoBzAHaBCwhX+kfhBSg/CopIIE//AFbzNcrSrouVK1ea3SlcXFxo69atZC/k5eVReHi4Wdfi6OhIiYmJeuW1atXKVJ5bZO2HCgwAUGAHxq8yyq/gjjy0RtnP/ij8H7gfhVg8/VFwsXb7UqR8ytM/uHg4JhtbeHg4abl9+7bZjTYuLo7sjSNHjpBKpTLrel555RW9sqZMmcKXx5us9UC551hkB0ZPEfkkFTaeG1LE/uXpH1yIWd6GdO/ePdISGhoquiF6eHhQcXEx2SNjx441u4Pt2rVLV8769ev50rcjazxM4G0AxXZgbBSRV+4CcLNGG1Ok/IruCCciugOAdyvrvn37dH+/+OKLfMnLkJubi5ycHNH5bMGnn37KdwCJUebOnav7u3HjxnzJJT+AnDE2DcBCWDGInUK5YRYRKeEwFPR49ry+PXwZ9u7dq/vbHGNPRDh79qzofLagVq1aePPNNwWnDwsLQ1gYd1Tq3r17UVBQAAAGT7J6Bkl30TLGOgKYLWWZClw4kKpVq8qthliuAvhJbiUU7A+bG3sA+P33383KZwtmzJiBKlWqCEqrVqvxzz//4IcffkBAQAD++ecfAICnpydf8DepR/ZyHM5doXBxcUFUVBTee+89TJs2Df3794erqysyMspdyJuZpByIrmCI0j4dAFUBaMDjE7xx4wZpMWcVS/369cme4Ql5oCe///47EXErekqvymnSpImpfGkkoS8OXCA7uf3E5Urq1atHQ4YMoe+//56OHz9OiYmJ9OWXX1KjRo1k180C0R6QI7t/WBH7k7IfACf4GtWyZctIy1tvvWVWwzxz5gzZK+np6eTt7S3oOp5diaPlzTff5Mtbk6R6iNxru9yGxm7F29ubunbtSp988glt27aNHj58SEREycnJNH/+fIqKipJdRwnlBABfqdqWIhVHyn7Ard012aCGDBlCWjZu3GhWo/z444/JnpkxY4ag63BycqLMzMwy+X/++We+vN1IqocI7LYDI2MX4uDgQBERETRu3Dj66aef6MKFC3qrvzIzM2nFihUUExNDDg4OsutrJTkHwF+q9qVIxRBDZ9B2BhcG1yiBgYG4f/8+ACA1NRU1atTAs+XwERYWJiqOva1JTU1FcHAwcnNzedOuX78eAwYM0PssISEBLVq0MJXtQyL6j2VacjDGLgHgP0hAZlQqFVxcXKwirq6uqFWrFlq1aqV3ElpmZiYOHz6M+Ph4xMfH4+TJkzY5A8EOuAKgK3Gr7BQUDBp7FwDpANxMZbx48SIaNmwIAGjWrJluclIMe/bsQZcuXUTnE8uDBw+wf/9+HDhwAAcPHsSTJ0/g7OysMxTjxo3DhAkTyuSbMmUKvv32W97yhw4ditWrV+t9lp6eDl9fX1PZfiaiN0ReikEYYzkA3KUoy1xatGiB+fPnw9PT06AhdnFx0TvC0Vo8fPgQBw8eRHx8PA4ePIizZ89a7RD6csAtAF2I6LrciijIT5neR0RqxthhAF1NZdy7d6/O2L/44otmGfuFCxda3dgvWbIEb731lsk0R48eNWjsP/jgAyxevBhqtdpk/v3795f5rGrVqnBwcIBGozGWTZLll4yxapDZ0L/22mtYs2YNPDw8MG/ePKSnp0Oj0aC4uNjgv6a+syRNVlYWrl27JuetsDeCARxkjHUlootyK6MgM4Z8OwCmgccv2LdvX9IiIIa7Uf/qrVu3SEqK1foHi/z1119l6g0JCaEWLVpQ27ZtqWvXribnDyZMmCDoWkpHBNXCEwI6H4ADWeiHA9DcnHsvlbz//vt6sf0jIiLk9lcrUlYeAWhpaVtTpHyL4Q+5wy5MNiBfX1/dxFdaWprZcWWmT59OQsnMzKRDhw7R4sWLae7cuWW+f7JiPd2p1ZIKzl/SfZaRkUFeXl7Uq1cvWrJkCSUlJQmuj4goKSlJUNz7v/76q0xeAZFBww3dfzECoKccBsTR0ZF++OGHMtccExMjt2FTxLBkwEphOhQpH2L4Q26z1WO+BnT69GnS0rJlS7MaoZ+fH+Xn55MxMjMzacqUKRQSEqKXz8nJiTIyMoiIqDgvn1LfnkFJCKQkBNJt/2ZUcPGKrozCwkKj5QshNjaW9zrmzZtXJt+yZcv48vUX8pBMCYC3bG04qlatSnFxcXT9+nU6dOgQHTlyRHfNw4YNk9uoKWJcssFN2spueBSxvTy7gxYAQETFAPYZ+q40UuymffToETZs2GDwuzVr1iA8PBzz5s3DzZs39b4rLCzEjh07AAD5B4/jyaLluu80KY/waMhTP72lE4Nt2rThTXP+/PkynzVr1owvmxQ7aXljM0hNdnY2evTogfr16+Odd95BnTrc+eXHjx/Htm3bbK2OgnA8AMQxxnrKrYiC7TFo7EsQFTqhc+fOZiuhNdpaLl68iBdffBFDhw7FgwcP9L6rXbs2JkyYgLi4OPTq1QsA4BQeWqbMgoQLKLp9z2ydStO8eXPeNHfulF3hFhISwpetXBr7oiJuN37Pnj1x8OBB1KxZE/v370fXrl3LY3iByoYLgM2MsUFyK6JgY4wN+QGEgue10NPTU+ciycrKMvtM1/79+1Np+vXrVybN6NGj6ezZs2SQ4mK66VFf58bRStbiFQaTHz58mNasWWPSfVSahw8f8l5Do0aNyuQrKioixpipfNcsfTUDcMCce26pvPfee7qJ2e3bt5Orq6vcLgpFxIkGwChL258i5UdMfwnc5Gs0R48eJS1t2rQxq+HFxsZSaXbs2KH7rmbNmrRjxw7i416Ll8oY++RXXi+Tbu7cubqyo6KieMvVEhQUZPIaqlatajBf3bp1+Tqcu7H7L0QA3LClkXBwcKCFCxfqrm/Tpk3k5OQkt+FSxDwpBtDWkvanSPkRU24cgGcnLSCN3/7ZTS8xMTGoU6cOhg8fjvPnz6Nbt268ZRhy5eTvPQTK1Q/rXXrz07Fjx8rMBRiDz5WTkZFhcLdt69atTWVTAeANfm8MxhgDUMvc/GLx9PTEtm3b8PbbbwMAVq1ahYEDB1aWHakVEQZgntxKKNgGPmNvk5DHxI1QnyqlUuHw4cNYsWKF4Hjihow95auR99chvc+GDx+OTz75BN9++y0mTJggJPY8AGF+e20IidK0b9+eL5slfvsAAE4W5BdM7dq1cejQIXTv3h0At1ltxIgRpjaNKZQP2ij++0qCqWE/gBrgOebO1dVV5/vOyckx65X+tddeI7Fol11qyV7/Wxk3ThICKXX8h6LLNsS2bdt4r2P//v1l8h06dIgv37dk5msZgNZi77U58vzzz9P9+/d11zRnzhy53Q+KSCtJUA4qr/BicmRPRA8BmIyDkJ+fj6NHjwIA3N3dBS1TfBYxsUvy8vLQpUsX+Pj4oFOnTsjOzgYAOIUbPr8jN263YB20q0wM0a5dO3BeE+MYGtnXq1ePr2pLRvZWX4nTrVs3xMfHIzAwEADw2Wef4cMPP7R2tQq2JQTAe3IroWBd+Nw4gA1cOWKM/dq1a7F3714QEQ4cOIC1a9cCAJzC6gKqspejuZeMgoQLJsvMzs5G7969sXPnTqNpfHx8eM+WvXev7FJPPz8/k3lgx8Y+IiICGzduhLs7F3pnypQpmDVrljWrrDQ4ODjIrcKzzGCMVZdbCQXrIcTYW32SVoyxZ4whICAA0dHRCAoK0m2YYm6ucKxT02Ce1M1/aN0eZdizZw9atmyJbdu2Yf369Sbrjo6ONvm9oZG9o6MjatY0rFcJNRhjNUwWbByrGfuAgABs27YNVapUQXFxMcaPHy8oAqiCMBo0aCBkIGBLvAF8LrcSClaEz88DbtddAUz4/JycnCg7O5uIuOP5xK65fnadvbkkdxti0G8fH9KSQkNDafTo0TR9+nT69ttv6f/+7/+oRYsWenp4enpSXl6e0fJXr15t8jratWtnMN9rr73Gdw868z0HI89mg5j7LFTc3NzoxIkTRMSFmhg6dKjcPuUKKd988429HaBSCAniNSlinyLUqMTzNZTSa+FffPFFUY1s4sSJJAWPJ31q0NgnIZDCa9cRpMuvv/5qtPybN2/y5r9w4UKZfN988w1fvveEPAcDz+Wo1B2eMUYbN24kIiK1Wk29e/eWrFw7MGZ2JQMHDqSZM2fKrscz8rs5bVER+xchbhzAyn57f39/UemN4dSgvtHvXnbwMPpdaUy5coKDg3mXav7www9lPmvZsiVfteb67auZmc8oX375Jfr164fc3Fz07NkTW7dutbjM6Ohoe/RRy86mTZswaNAghIeHy6kGAfgZgPaAk56MMfPWUCvYNUKNvVX99gEBAbxpHjx4YHK1DAAUhBjfX9T55iNBusTFxSEnJ8fo93x++59//hn5+fl6n4WFGV4pVApzjX04gIbgQiZYzBtvvIEZM2bgyZMn6NatG/7880+LylOpVPj8889x9+5d3mdXGdFoNFiwYAGWLVvGu9JLCFWqVDEnGwPwGxGFgpsDGgagkcXKKNgfQob/4E60yoKJ1z+VSkXp6elERFRQUEDu7u6CXx1///134uPgwYMUExNDd+7cKfNdamoq/e9//6PQunXpKjPsxrmBQAp0ryJIn7Vr1xrVY9GiRbz5x44dq5dHrVbz5clGyRGR5giAmULvtTGJjo4mtVpNjx8/psjISIvdAW5ubrR582Yh8xWVWlxdXSk5OZnefPNNScrq0qWLOXnjrOE2UMS+RHhCYBtfo9myZQtpEXOIxfHjx4mPpKQkArhDM3r37k1TpkyhTz/9lDp16qQ3ybWlbgujfvs3HDxN6uHi4kIAqHfv3kb1OHfunKBrGjduHKnVal0+Pz8/vjz1zX6IQA9LjES9evXo0aNHlJycTE2bNrXY6Hh7e9ORI0do3rx5VjGQFU0++ugjun79uiRldezYkfr27Ss2XxGAQLmNkSLWFeEJuU0XJhvNO++8Q1r+/e9/C25sQo4mLCgoEHQa1rTW7Y0a+9XwLZO+dJm1atUigDP6mZmZBvXQaDTk61u2HEMyZswYXT4BP369zX6IQE1zjUPVqlUpMTGRbt++zXeMouDyTpw4QdeuXSM3NzfJDGJFFm9vb0pLS9MNNiyVRYsWiV4kAWCq3MZIEeuKUJ89YCW/vYODgyCfvZOTE2rU4F+OfjDrsdHv2sAFXioHXXkAt+vX1dUVAJCSkoKIiAio1WqjE5MqlQqxsbG8egDAkSNHdH+HhpaN3fMMZh9ATkT3wJ0zKgpHR0ds3LgRTk5OaN++Pa5cuYIaNWrAx8fHLD18fHywZ88eREZGYty4ccjLy+PPpIDMzEz8+OOPqF/f+AIDMXzyySdYunQpWrRoISbbSEkqV7BfxPwyAHgAnhFCSkoKEXHrsz09TbtNAFBERAQJRYgv2cHBgU7D3+jovje40SZjjKpWrUoAqGHDhrr8PXr0IAD0yiuvGNXjwIEDgkZLzs7Ounj/8+fP50u/3pJfbQC7hOhUWpYuXUpERPHx8XTq1CnKysqiwsJCqlmzpujRpIuLi25tvoDjGBV5RgIDA6l79+6SlTds2DC6d+8eBQYGisnXxpYjTUVsK2JG9oCA0f2+ffsAcKNGAREf+UIA61GrlvHVNtrVDBqNBvsDvY2miwE3iicieHl5AdAPaaDRaBAYGIjdu3fj8WPDbwnt27dHcHAwr74FBQW4fp1b0fb888/zJbf01KozYhJPmjQJ48ePB8BdT8uWLeHp6YmNGzcaDPvAx7x58xAZGYnk5GR88MEHovNXdh48eICTJ09KVt7q1avx4MEDbN68Gc7OzkKzKaP7CoxYYy/5UYVijL12jbuqVAwc7XIzX1/fp0q6kNEyOsIFLuB+GDw9PQFwHa1pU87W7tu3D4MGDUJhYSE+/vhjg2UwxjB8+HBefV1dXXUhmgWstX+OMebCW6hxBBv7Hj16YO7cuQCgCySnxZyQCAMGDMBbb3Fn/k6cOFE5mtBMHj0S7YkzChHh/fffR1RUFJYsWSI02yDGmKtkSijYF2JeA8CtwzX5KhgaGkpaTp06ZTItY4xu375NRNzySUPLKkujDa1bemVLSEgIAaAGDRroPnN3caFEBBh15QwEtyy0du3auhOoxo8fr8s/d+5ccnBwIMYYHThwwKAuGRkZVL16dd5X41WrVunyaN1GJqS5ua9oAJ7j0wUANW3alPbu3UszZ86kiIgImj9/vk6/w4cPm+UySEhIICKiY8eOye4OUURftCvk3n77baF5BtvCpaCI7UV8BuAyX4PRGnCNRkM+Pj5G03Xu3JmIiFauXEnVq1enM2fOkCl++eUXAkDPPfecLm5+q1atCAA1adKEvL29dWX/CB+jxv5P+BErSffSSy8RAJo8eTJ5eHgQABowYAD16dOHAO5HxNhZtQL88PT660+PRmzfvj1f+mFmP0huc8wTPn1Kr/ioUqWK3qojQ2f/8knVqlV1Z9F+8sknshs3RfQlLCyMCgoKKC8vj+rVqyckz59yGyVFrCNi3TiACFeOSqVChw4djKZr06YNOnfujOHDhyM1NZXXD6512WRlZel2pVavzkVlvXr1Kl544QVd2r+8jB/gFAZHdATnMdG6cvbs2YNBg7gDe7Zv344vvvgCXl5euHz5Mv71r38ZLGfChAlo1qyZSZ0TExN1f3fs2NFkWljgtyciApDAl06tVuv+HjZsmG7e4tatW9iyZYvoetu2batzq+3YsUN0fgXrcvXqVSxevBiurq6YP3++kCxdGGNWPydBwfZY1dgDpv32s2fP1k3oenp68i758/Dg4ts8fvwYDRs21OVzdnaGWq3Wm8DdXfAEpgInjwFXVn5ODqpVq4Z//vlHp2t2djZmz56NpUuXAgDmzJmDc+fOlSnDyckJv//+u8kloZcuXdKOvIUsMTV7+WUJoiZptWfJAsCCBQvMOmJQ+wObkpKC06dPi86vYH1mzZqF9PR0vPrqq+jZsydfchWAN2ygloKNMcfY7wNM2lHB6+21RhCAoDXG2kM0CgsLdZO1KSkpukNFtKN8AHicn4fTKDBaVju4oBGccHD/AQwePBgAcPr0ad1KkjVr1uDy5csYO3YsCgsLMWbMGINx94ODg7FlyxbdWv1nycnJwZ07dwBY/dQqQISx79Spk+6+ZWdnY9myZWZVqI3Vf+DAAb3nqWA/pKWlYeXKlQCA6dOnC8kywpr6KMiDaGNPRBkATplKc/fuXVy9ehUA0KRJEz0jbAxT7h4tWmMPQDeavnPnju4wcEdHR70Dyv+AfkCyZxkLDzxR5+PWlato164d5s6dC39/f/Tr1w8A8MUXX6B169Zo2LAh/v77b6xatcpgOW3btsX+/fuNRu+8ePEiAKBRI974UrUYY+btaOIQbOxLj+p/+uknZGZmmlWh9jmcOSPqpULBxvz1F7dqmu+0tRJCGWP866YVyhXmjOwBEa4cxhg6derEW2BMTAxvGq0bB3gaFvnevXuIiIgAwPnHS6/t/81BjUIYH232gBsC4IBtf+5Chw4dUK1aNUydOhWRkZE698T06dN1vvxFixYZLatNmzY4ceKEQR++1m9fp04dvWswgiWunLMAlvMlqlmzJnr37g2AOyVMoC/XINrnkJDAO12gICMHDhxAUVERvLy8EBQUJCTLCCurpGBjrG7sAf7QCU5OTkImL/VG9tqJxYKCAt1h2ImJiWjXrp0uTbqmCHughjEcAYwAV+a38+ZhypQpYIxh2rRpGDJkCAAg3H5yLgAAIABJREFUNTUVhYWFAICTJ0/i77//NlpenTp1cPjw4TJ+Ua2xZ4wJiV1u6STtWACbTKUbP3687jjHbdu26TZ+mYN2ZK8Ye/vmyZMnuk1bderUEZJlAGNM2CEQCuUCc439YQAmA5/s27dP58Pl21zVoUMHQbG4Sxt7R0dH3a5Zbd4bN26UiUGzAbkmyxwMd3iCIV+txurVq3W7Sg8ePKgbAV29elVXN98GlSpVqmDr1q348MMPdZ+VXpGj3bxlAov89kSkATAUgMHT052dnTFu3Djd/1t6rqyPjw9SUlKQnJxsUTkK1kfrynFxEbR3rwqAftbUR8G2mGXsiUgNzuAb5dGjRzh//jwAIDw83ORKlEmTJgmqt/QPglqt1v2/9t/8/PwyE6UHoUYyjK8y8YIKb4PLn5iYCCcnJ4SEhCAuLk7nktm+fbsuqNS6deuQnp5uUk+VSoWvv/4aK1asgLOzs85nD3AHTfNg6SQtiKgAQF8AB5/9LjY2Vud6OXPmDA4csOzcExcXF4MrlRTsD+3btkBjDyjhEyoU5o7sAYlcOc2aNUOPHj0EVejo6KhbF5+bm6ubjFWr1bpwCc+uCNEA+NX0SwhGwAM1wUXDXL58OVq0aIHc3FxdbJwnT57gyZMnAIC8vDysWLFCkL7Dhw/Hn3/+ifz8fDx8+BAAdEtGTWDp8ksAABHlgYtzrzeZPnHiRN3f3333ncX1ODs748qVK4LSCliNpGBFjhw5gvz8fDGxcjowxpSHVkGQ3djPmDFDVKXVqnHHrubm5sLbmwt4lpGRoVtjn5KSohfYDAA28hh7FzBMBfcjkp2drXO7aJdMAsD9+/d1fy9dulTwMsOOHTtiy5YtuHz5MgBBK3K8pdrUQkRZALoBuAgALVq0QNu2bQEAycnJWLdunUXla0eIQox9+/btERUVZVF9CpaRn5+PkydPilkiywAMt6JKCjbEEmN/BkCaqQTx8fG6jTqGjH1YWBiioqIQFxcnePemdgRfemSfnp6uM/bXr18vs2b/FopwwsSaewB4DW5oAW7XrdYwp6Sk6L4vHQHzypUrRiNiaklPT9ety4+JidHpV69ePSGv0Ra7crQQUSqAlxwdHe+UXm65ePFiFBSYvid8iDH2s2fP1t1XBfk4c+aMyTOWDTCcSXFAroLsmG3siagY3AYro2RkZOjWX4eGhuo2Qmm5fv06QkJC0LNnT723AFOUNvaGRvbXrl0zuEHrZ56JWgZgI6pjBXzRg1zhAqY3Air9t7Ozs+4NwxhpaWlo1qwZNm/eDCJC3bp1AXCHtTz33HN8lymZsQcAIrofGhr60pAhQ54A3AhPuzvYErTuAD5jX6dOHURFReHSpUsW16lgGadPny4T6ZSHYADCTiJSsGssGdkDFrpySu9IHTZsmKAK+Yz9+fPnDS7j3IE83C+ZqNWUyLM4gAuBPB9VcQI1MBFV4I6yg5qgoCDwDXbq168PFxcXxMbGIjIyEidOnNB9J8CVI6mxB4DExMTLbm5ucwEu1rkU4XRTU1Nx9OhR3Lp1y2S6AQMG4M6dO2JHlApW4MyZM2KNPaBM1FYIZDX2WhwcHIQc7gFA32df2o2jXTmTmJgINzc3vZj3AGfcpyETI5GGZkjGc3iA6chEnpFNV15Q4X14Yj9q4BXor/DhG9VrGTBgAADg1KlT6Nu3r+5zAbHtJTf2JcwloodSTMxqGTVqFG9MnYEDB+otP1WQj4sXL/K6IA0QyxjzsoY+CrbDImNPRNcAmBzWHTp0SLcpyZix9/f3h4ODg6A6tSP7rKwshISEAODWD3ft2lVn/H/88UeDk4GHoMZ+qOEFFZbAB/+GN9wMjNxL4wcV5sNHz+AnJCTg9u3bvLr2799f9wZw7949ZGVlARC0/DKcMebIW4F4svv163f8woULkhXI55oJCQlBq1at9JafKshHYWGhOW91bgAGWkEdBRti6cge4DmqMCcnB8ePHwfABQ0ztPxOG0xLCFpjv3XrVrz22mtwc3PD1atXsW7dOt1B4PHx8QZH3ypwyyz3wE93PKEh0lGMw1DjQYmzxwHA9/CBb8nt0mg0gnze9erV043ugaeGUcDh487gDiORFMZY2y1btrwidbmmaNWqFQAoI/vyzwi5FVCwDCmMvcWuHIGxOgBAN2LPysrC8uXLdb7+WbNm6Yw9AN2GLi2N4YStqI7P4AUPE6P5kyhAd6TidaShDx4jtSTApyOA+ng62F62bJlebHhjfPXVV3By4lb5aEe3YWFhunAFJpDUlVMSYG0tEQl7hZIIbeAtxdiXe9oyxnhfSRXsF6lG9iYX7vIZe60xFELbtm11IQcWLFiAQYMGgTGG27dv4/Lly7ofjqSkJJ0LJQrO2IJqaArT9WxFHgbjMWpAhcnwxH/grRvNA0C1Un8/evQI69ev59W3fv36mDBhAoCnBs/Z2VnI6F5qv/1PAAQFRZESrbFX3DgVAsNhXRXKBRYbeyJ6COAfU2mOHTuGvDxuY5MhY19UVCSqTq3xzM3NxZYtW9CtWzcA3Fru0hOhRARvqPBf+MCJxzd/GxosQTZWoRp+R3W8iypoDxe9G/QPCvXyLFy4UJC+M2fOhLe3t97oVsBOWsmMPWNsMIDeUpUnhiZNmiA/P583xISC3fMYPCFSFOwbKUb2AI/fXq1W4/Bhrp0EBQWVWWeuncAVyuuvv64LFfzf//4XQ4cOhaOjI1JSUrBr1y69lTj94Qavksu8Bw3eQwbeQjpmIBMbkYv8kpeSKmD4DdXxAgxvJU+GBveeWbD5999/C4oY6efnh6VLl+oZe1stvyzZEPOxFGWZg7e3t3KoScUgriTInkI5RSpjb9FRhWKNvZeXl85XX1BQgPfff18Xn/3q1at66/cH4GmkzK/xBHtKDjSpC0c8AeEauLcKX6jgamL0vxBl1yY3a9ZM0AlbADBo0CB06tRJ5+cXYOxDGGP8oUD56Q1A0IkV1uDgwYOKsa8YbJVbAQXLkMrYxwMwabFN+e3FGnuAc9loDa12RP9sgCc/qBBWalL1DbjjBPyxGD4YCw+Mggea8PjxAeAsCrHWwA7cadOmidL5+++/121AEuDGYZAmKJpso3qAe+6KsS/35AH4U24lFCxDEmNPRNkAjplKc/LkSd0682dPrhLrswc498CmTZt0IY2fPHlSJtZLG+jHoGkFZ5MrcQzxt1Mxxnvklzl0t27duhg4UNzSY3d3d93EbHh4eJmNXwawyNgzxroBELZbzUooxr5CsJuITMcbUbB7pBrZAzyuHI1Gg/j4eADc6Ualz8LMzzd9VqwxmjdvbvKowGsoMhHJ3jQPWDEWNqmJIcWPkZJT1oUzdepUwRvBdu3apXMtaQ28m5ubblOYCSz128s6qge4WEXKSpxyj+LCqQBIaexNTtICxl05fLFVTDFq1CiMGjXK4HeXUIifITwey0MUYyVyMLBqIdrhIeaeP4kiTdm3jpo1a2LkSOHhQl5++eUyo/hbt27xhhmABcaeMdYOQLS5+aVk5cqVcqugYD7FAOLkVkJBAohIEgG37ygL3Jp7gxIREUFaNm/erPddRkYGmUteXh41b97cYJ3uYDQVnnQBAZSEwDJyCv70JbwpCs6kAjOqOwByd3en6dOnU3p6utm63rhxg4YPH06Mma6rRB6JeQak/zx+FlC+TcTX11d2HRQxW+LNbYOK2JdIWxiwzVTDYYxRamoqERE9fvxYz+D9/fffZAnXrl0jb29v4wYHKhoAd5oBL/offGk2vCkaLuQgoME7OjrS+PHj6f79+2brl5KSQm+99RY5OTmJ7WwBYp4Bcc/BF9ykmtyGQpHyL++LbX+K2KdIWxjwHl/j2bRpE2kpPRr/5ZdfyFK2bNkiaUNXqVQ0cOBAunLlitk6FRQU0Pfff08eHh7m6JAJoAFZ4TkooohAqS+2/SlinyKlzx6wwG9/9epViyvv3bs3pk6danE5rq6uGD9+PBITE7Fu3TqEhYWJLqO4uBhr165FQEAA3nvvPXNiua8DEE5E5hzvNM6MPAoKz3KeiPh3DSqUD6T+9QDwACZGCuHh4aRl27Ztus+7dOlCUlBYWEjTpk2j6tWrix7FVKtWjT799FNKSUkxu/7i4mLauXMn1axZ09yR1GUAXcn8+x9tZr0VVkJDQ2XXoZzKl+a2Q0XsT6QvEFjN14ju3btHREQZGRnk4OBAAMjJycmiSdpnUavVtGbNGurXrx8FBAQY1aV69eo0cuRI+u233ygvL8+iOo8fP04NGzY0t2PlAZgJwIUsu/8mJ2bNdCeVa3n//fdl16GcSitL2qIi9iXSF8jFvTbZiFavXk1aIiMjdZ+vXbuWrMX169cpLi6O1q9fTz/99BMtXLiQDhw4QEVFRRaXfenSJXrhhRcs6VQ7IIFvFAImZjt06CC3AbG5HDhwQHYdyqHcAcAsbZOK2I9IXyBQm68hjRo1irR8+OGHus8HDRpE5Ym7d+9Sjx49LOlQdwH0I+nuPe/E7NSpU+U2IjaXvLw8k293ihiURVK1S0XsQ6SeoAUR3QFwxVQaY5O0O3bsMCtOjq1JT0/HqFGjUKtWLcTFmbXfpAjAPHATsJskVI13YrZ169YSVmf/ODo6wtXVtUzwPQVelF2zFQzJjX0JJkMn3Lx5E0lJSQCA9u3b6w4vyczMxKZNUto+acnJycG0adPg5+eH5cuXm1vMEQDPE9H7xMUUkgTGWDQAk6E0XV1ddQezVxbc3NwAAK+++qrMmpQrMgHsl1sJBWmRxdgDT0f3Hh4eiIyM1H0+d+5cK6lkPgUFBfjmm29QvXp1zJkzR0iYA0M8BjAWQDQRnZNWQwDAeL4E/v7+qFWrlhWqtl+0z6pnz55wcXHhSV154DkpbTsR2f8rtoIorGXs9wFlAkXqYcyVc+rUKezfv99KaolDo9FgxYoVqFGjBqZOnWpuwDYCdyRgOBEtoxLnupQwxmoA6MeXLj09He7u7vDx8ZFaBbtF6xb09PTUnWimALzxxhumvlZcOBURa00GADgBExNAgYGBpGXPnj163/Xo0YPkpLi4mLZt20b+/v6WTnKdA9COrDzxAuA/QnVKTU2lJk2ayD35Z1PRsnr1atl1sQdxc3OjS5cuGfteDcDT2m1WEdvL05M9pGcPgEhjXyYnJyMxMRENGzZE27Zt8fnnn8PX1xc+Pj7w9fVFbm4u3N3djWW3GkeOHMEbb7wh6LhBE+QA+BzAd0QkPli/CBhjfgDeEpo+KSkJtWrVwvnz562olX1RWFgIJycnnStHe1pYZcXDwwMNGjRA7dq1cefOnWe/PkpET+TQS8G6WNvYTzf2JRFh7969aNiwIdzc3PDZZ59ZUZWydRcWFkKtViM3NxfZ2dm4d+8epkyZglOnTlla/GYAk4hblWQLpgIQ/KuYlJSEmjVrSqqAj4+PXR8ofuvWLYSGhsLLywsxMTHYtm2b3CrJivb85kaNGhky9srERgXFmsb+MIB8AK7GEuzduxdvv/222RUUFRWhoKAAeXl5yM7OxpMnT5Ceno60tDQ8evQIKSkpuH//Pu7cuYO7d+8iNTUV6enpyM6WbBFMaZIATCSi7dYo3BBiR/XA05G9lIwcORLz588368QxW3D69GndhGT//v3t1tgPGzYMa9eutfp9LG3sd+3a9ezX0o4EFOwGqxl7IlIzxg4B6Goszf79+5GXl4eMjAydkdb+m5aWhuzsbLi5uSE5ORn37t3D7du38ejRI6SlpSEjI8PcVTFSUwDOZ/4VEeXZuO4PAHiIyZCUlITnn5f2pEJ/f3/ExsZi/fr1kpYrFadPn8aAAQMAAH369EGtWrVw9+5dmbUqS2RkJBo2bIgZM2ZYtZ4qVbhz7I2cgxzAGGNE3GSQQgXCmhMCAKbBDiakrCh/wYwQxBLd2+oAssXqHBMTQ9u3b5f0PkyaNImOHj0q97MwKuHh4ZSbm0taSgfgsyf59ttvSaPRUKtWraxaj3anelxcnLE0NeSeTFREerHW0kstvOvtyynJAIYSURcyLwSxFIge1QP6bpyQkBCTZ/gK5f79+4iKikJUVJTFZVmDS5cuYeLEibr/79GjBwYPHiyjRobRaDRQqVSYNWuWVetp1Ijbe/ftt98aSxJkVQUU5MGavyTg1vE/hh2MmiQSDYCFALzl/IUGN6p/Ys41ODs706NHj8jLy4vOnz9PhYWF1LRpU4vui7e3N924cYPWrVsn9/MxKcuXLyctDx8+NCsMtjXl66+/1ulnYWA9k7Jx40b67bffTKV5Ve5RqI37UxUAzQD0BjAFXB/fDm75+BkAF8CFgEkCF8/qIYB0cG/WqQBOAtgE4BsAEwG8CqAxAA+5r03vOm1wIzfJ3Ykkkr/BhTmQ/6EBSy25ljt37tDu3btpx44dtGHDBtq4caPF9ycyMpJycnKodu3aBr/38fGR+/mRm5sbnTt3jrRIcd1SyldffaXT7c8//7RaPfHx8RQcHGwqzVi527iV+08ggFEAfgWQYuXn+rCknhEA/GS9bhvc2AlydyIJJA+As9yNtOR+Pg/uDcOizl5YWEiNGjWinj17UnFxsSQbrSZNmkRff/21we969epl8RuEFBIaGkp3794lLRMnTpRdJ63MmjVLp9eNGzesUodKpaJOnTrxpftM7nZuhX4TCeBLAKfB7e6X4xlrwMXGGg/Azeb3wAY3OVTuTiSRtLGDBssAHLX0WlauXEkLFiwggDtM/eHDh5KNcmfNmmXwgJRu3brZzUg6JCSErl69SkTcITelz1SQUz777DPSsm/fPlvXnw0uGisB+K/cbV3CPtMdQLzcz9aAPAIwC0CAre6FNdfZAwCI6BpjbDM4v1ghuAZV+Iw8+5mQNJaUpQFwFYCYIDFdABwXfwcshzHWEEBHAK8AsHgW9NSpU1i9ejUAbq/CunXrMHHiRDRp0sTinbWfffYZ/Pz8ypy5e/PmTcTGxkpSh6XcvHkT7du3x65du9CsWTNs2LABLVu2lH1jWOn19bdu3bJ19ffAGZ+VKOdr7RljKgD9AXwEoLnM6hijOriT6T5kjH0H4Auy9tJtuX95ZfzF3wBxv8R/2VC3EABvl+gouU/R0dFR7/9btWpFREQbNmyw2kjGycmJCgsLrVqHWPHx8aGjR48SEfFNWNpEPvroI9Lyxhtv2Lr+eyVtbyiAv+Xunxb0nToADsn9LM2QGwC6WfXeyP1wZGwUo0U+jDwArlbUJwRc6AOTAeSsJYmJiZL57o3J5cuXqbi4mBo3bix3x9KJh4cH/fnnn0RENH36dFl1mTp1KhERFRQUWDyh7eXlJTZPZqm2GCN3/zSzD/UDt0pG9nZlgawDUNXAtflYfH/kfkAyNoxaZjyI9hLrEAIZDXxpmTFjBhFZd3Tfq1cv0mg0tH79erk7lJ44OTnR4sWLSaPR0KuvviqbHpMnTyYiop07d1pcVsuWLalu3bpi8hTJ3Sct6EcMwCK525GEkohSZ1KDm3dYaPF9kvtBydxILgh9AN26dbtbWFi46+OPP65rYZ0hsBMDX1rq1KlDxcXFVh/dT5kyxe5G91oZN24cPXr0iMLDw2Wp/9133yUiolGjRllcVoMGDfTOdxYoVntztXI/FhziuxxJKoCOJdd3AFzo6RCL7pPcD0rmRjJPyI0fOnQoFRUV0eXLl8nT0/MRgBdF1hMCOzTwz8q+ffuIyLqjewC0ZMkSu92AFR0dTQcPHqSqVavavO63336bsrKyDK5mEiu1atWikydPis1XTe4+aUYfflfuNmNFKYC+jVpu0b2S+2HJ3FBeNnajVSoVRUVF0Zw5c6ioqIiIyvh0twLoBANLpwA4AGgFbnVDgh00GkEycuRIIiKrj7xVKhUtWbKEGjVqJPs1G5LatWvTV199RSqVyqb1jh8/npYsWSLZNRARBQUFickXLHefFNl/W8PCPSflTIrAnXinGHszGosbuIlXAkBeXl4F/fr1oxUrVtDDhw9Jy507d+iTTz4xNemVBeAUgD/BbasusIOGIVo8PT11AcNs4Vdv3ry57NdsTNzc3Khly5Y2rXPMmDGS3ZOwsDAiIho8eLCYfI3l7pMi+2+cjZ6NBsB1cCfPnQJwDMBBcGESMmzcNjeYfb/kfmByy8SJE3/ZsGFDyq1bt6g0+fn59Mcff1CfPn3IwcHBpp1eTlmzZg0RSTe6r1WrluzXVF5Eyreppk2bEhHR0qVLxeRrLXd/FGy4gBZWeg654Nyt/wXwJrh9Le48ulQH0AbA6wCWA0izYjspBtDcrHsm90OzA/mLSrh//z79/PPP1K9fP6pSpYrsnV8OiYqKuqi9H1KM7keMGCH7NVVGiYyMJCKiw4cPi8nX2Q76o1Bj/4FE9+oJgJ/A7S9oBMBBAt2cwK2g+R+ssxQ0ziy95H5oMjYWdwCvxMbG7u3RowcFBgbK3kHtQLIBNCGib4iINBqNRaNNBwcHWrVqldzXVCmlQ4cORER08eJFMfl6yt0vRfRfS1bgaMCFXx8GnlG7BHr6gHtLkDoeT1vRusj90GRoJAzcYeC5cndIO5R+JfdJRUR/EJFFq2bq1q1Lx48fl/uaKqyY+iHW7sa9cuWKmDIHy90/RfTjOWbcs6sAZgCoLYO+UZB2scY+0TrI/dBkuOmvyN1J7VS+Kn2fGjRo8HJiYmKmRqMxe9VMQEAAPXjwQO7rqrBy7NgxcnJyMvjd6dOniYjo008/FVNmuQltDCAcwkfL18D501Uy6+wA7vQ+qVYQvSSqfrkfmgw3fIXcndQOZaO2IwAYCeAyAOrVq5eGyLLR/e7duyvt/Ic1pUuXLkREBjfAhYaGEhFRXl4e+fn5iSl3ktz9U2Rf/oHneu4AGAfAUW5dn9F7CLiAjJa2g+Oi6pX7wmW40dfl7qh2JpvBHTzvD2Bb6e8YY5SQkECWjO5Hjhxp1R25lVXi4uKIiCgqKqrMd9OnTycioo8++khsuZ/I3T/N6M8zUXaEnwJgEux4RzC406ykcCX3Elyn3Bctw022612sNpat4FYO1AUX4rZMmj59+hARN7p3cHCgbt260S+//ELx8fFGXQilxdvbm2JiYuS+zgol4eHhVFxcTERk8CCSM2fO0JEjR8xZMjxb7v5pZp/uC+70tqXgdqrb1XGAJvTuACDTwvbwDwS6p2S/YBlu8G9yd1Y7kQ3gDL0/OJ+mwXSMMTp79ixpNBpKTk6m0nz11VeC6lLW2ksnXl5elJCQQEREubm51LBhQ73vGzduTE+ePKGwsDBzyl8gd/+sbAJup322he1iCLj5gNEw8XYm+8XKcHOXyN1h7UD+BW5VkjcErBCIjY0lLWlpaTRv3jzKz88njUZD0dHRcl9LpRFnZ2fas2cPEXH++JdeeqlMmgULFlC/fv3MrWO53P2zMgq4NxNLlmbeBHC+5O81RuuR+0JluLEz5e60MkoegCGl7sUWIfkYY3T69GlauHAhVatWjQBQTEwM5eTkUFJSkjmx0xURKYwx+uWXX4iIaP/+/QbnUKpUqUIzZsywpB6zt+IrYjd2abvROuS+SBlu6mtyd1yZ5AFKnaML4B0x+Z2dnct81qFDB8rKyqKVK1fKfW0VXubMmUPXrl2jYcOGGU1Tr149S4O3GTUUitjENq2ToK0cMVq+3Bcoww31l7vjyiBnUGojCbi4IvlSlN2mTRtKT0+n/v37i8rn5uYm9z0pN9KlSxcaMmSItWM0ZaEcrbOviAIuMOPfFj7HC0bLl/sCZbqpSXJ3YBvKZpRanQDAE1xkTsnqaN68OV26dIlq1qwpOE+1atXMnURURFopBhe8q0yobkVksU01wR1cYu7zvGesbBUqJ4flVsAGZAAYTUR9iSin1OefAgiTsqKEhAT07dsX//73v8EYE5Tn8ePHiImJkVINBfEcBxBFRCOJKFluZRQAIroHYLIFRVQ1VXilEwDRkH9EZS0pAuf7CzRw3X6wfJmXUQkNDaW+ffsKTt+5c2caOnSo3PerUsrrr79+HwCTuy8qYtRG7bDg+ToZKpOVFFzpYIwdAfCCFGXVrl376p07d74FF9faz4BUB7em3ZrcBBeq9X9EdN9QAsbY1wA+tKYS/v7+yMrKQl5eHm9axhj279+Pnj17Iisry5pqKZSiffv22L59e0aVKlV85NZFwTCMsWBwyymrmJE9kAy8qVVmY98b3NJDs6lSpQq+/vprvPnmm5sYY/156qsK4z8EHuAmZ9xL/i0tpT8rAOfP08o1cBM6fxP3+meq/urgfhA8zLlWazFlyhTUqVMHkyZNkluVSkFQUBBOnz6NmTNnpvz444/1Sd/Fp2BHMMbeATDfjKxvEtHSMp/K/boi42sSA/ALzHxV6tatG2lPt7p+/fotSHDogZWvd4y512pNqVatGmVnZ1NERITsulQkqVu3Lrm7u+t95uzsTEeOHKF9+/YRY4wAhMrdLhUx2WdV4OYXxT7/BIPlyX1BMt9MBu5QcME3Mjo6mnbv3k1E3OEe3333HTk6OuYD6CT39fBc67/lNkDGZNWqVXTo0CGtASIA5OLiIrte5VWcnJzoxIkTNHnyZL3PlyxZQpmZmRQcHKz9rL3c7VIR3n7bENw8nNh20KZMWXJfjD0IgD7gDhM22nleeuklnZEnIjpz5gy1bt26dLqFcl8HzzWul9sIGZO2bdsSEekdYXjq1CkaO3as3g+AIsJk9uzZRET04MEDcnV1JYCLPkpENHz48NJpB8jdLhUR1HdXmdEOlpcpR+4LsScBF3Z0XXR09P1evXrR6NGjaePGjZSZmUlazp07R7GxsYaM0D3Y8eoGWL5Zw6py7tw5evjwIfn4+JC7u7suqmN8fHyZYF+KGJeuXbvq7l1+fj69++679Pzzz1NeXh5t3rz52fTlKn59ZRVwB7WIPfAkF0BVvXLkvhA7lXfpGUwY+dLSzg50N9ZgHsttiEzJW2+9RUREixcvplatWukF5X2OAAAaaElEQVTde7VaTZ9//rni2uERPz8/un//PhER/ec//6F+/frRvXv36ObNm5ScnEzVq1d/Ns/XcrdLRQT3X3NCKbyrV4bcF2GPEhkZ2aJatWqpzz//fOHLL79MXbt2FepOmCe37kYairfchohPvLy8KDs7mzQaDS1YsIC05Obm6v5OTEykDh06yK6rvYr2QJMffvhB99ny5cuJiKhHjx6G8qySu20qIrgPN4X4yJh6oRNkvwh7FHCz4OlmdLhbcutu5HrKRTygH374gZ6lT58+tGjRItJoNEREVFxcTD/++CP5+PhIWrc2mmd5lXff5V5G169frxcMzdPTkz7++GNj+fbI3TYVEdWPN5vRNlrp8st9AfYqeOaIPhESKbfuBq7FRW5jJETCwsIoKSmJSjN48GACQK1ataKTJ0/qPk9OTqZBgwZJVnerVq2oS5cust8DcyQiIoLy8/Np+/btgk4PKyVGg2YpYn8CoKUZ7eNTXX65L8BeBdzxZuZ0vi/k1t3I9UgS5dLa4uPjQ7/99htpKb18UKVS0dtvv00ZGRm677dv3156KSGvODs7GwzAplKp6OzZs1S1alXZ74EYcXd3p4sXL1J8fLw5kUTT5G6Xiojux3+JfMbHtHkrayA0IRwUkfYSgDkA2gH4wjrqWEyG3AoIIT09Hb169cIHH3yA4uJiBAYG6r4rLi7GokWL0KBBA/zyyy8AgO7du+PChQv46KOPUKUK/87ygoICeHt7Y/Xq1ejevbsucFtxcTGuXbuGRYsWWefCrEDbtm3x+++/Iy8vDz169BAUouIZfBhjrtbQTcFqbBKZPpIx5gcAsv9S2auAi2WTA8O/lkUA4gF8ACBMbl0FXs8lI9dil6Jdfrlq1SqjaV588UVKTEwkLWlpafTFF18I8r8HBwfThQsX6MKFCzRmzBhycXGhCRMmEBHRgAEDZL9+Y+Lg4ED9+/enffv20eXLl2nr1q3k5+dnSZl15W6biojqx4EQP1H7OhEpxp7nxu4pdcOyAfwKYDiA6nLrZsa1HJPbUImRiIgIIiJatmyZyXTOzs40Y8YMvVU72dnZ1LhxY946PD09datVUlJSdH8/fvyYgoKCZL8HhqRmzZoUFBQk5WaztnK3TUVE9+UjIp/xWiJSjD3PTZ0IYCmAVwC4yK2PhdeyU25DJUYGDBhARFRmy78xCQkJoW3btpGW1atXC64rNjaWUlNTqTQ7d+6U/R7YSPrJ3TYVEd2XPxD5jB8TVeIQx5UNxth6AAPk1kMoM2fOxKxZsxATE4Pdu3cLzvfOO+9g/vz50Gg0aNCgAa5fvy4oX1BQEJYvX653oEpqaiqSkpKQlJSEmzdv6v1769Yt5Ofni74uO+RdIlogtxIKwmGM1QcX8VYMQbL/Silis9HAfyHBSFDk0j6z5ZdffiEiosDAQNF5v/76ayIi+u9//ysqH2OM+vfvTwsXLqQTJ06QWq0mYxQXF9P9+/fpyJEjtGbNGpo+fToFBATIPUo3R/5P7rapiFn9+azI59xRGdlXEhhj/wbwkaXlNGjQAH5+fjh06JAEWhnn5MmTqFu3LqpVqyY6L2MMa9euRZ8+fVCvXj3cu2cy1L9RXFxcEBERgdatW+O5556Dq6sr3Nzc4OrqqpNbt25h69at2LNnT3kd6a8kohFyK6EgDsbYvwB8IiLLWNl/oRSx2UjgDUg0GoyPjxd1uLg5kpWVRfHx8Wbnd3Fxofj4eJo3b57cI2d7l11yt01FzOrPg0U+56+VdfaVh3+kKmjnzp349ddf4eLiIlWRegQFBcHT0xPnz583uwy1Wo3evXujY8eOqF69uoTaVTgC+ZMo2CFJItM/pxj7ysNFcGFSLWbOnDkoKirC4sWLpSiuDA0aNAAAi4w9AKSlpaFfv34YNGiQFGpVVILkVkDBLMQa+1DF2FcSiEgN4IoUZRUVFWHw4MHo1asX3nzzTSmK1ENr7C9cuGBxWUlJSdi1axccHR0tLquC4ssYc5ZbCQVxEFEKuJj1QvFUjH3lQjJXzp07dzBixAh89913iI6OlqpYAE+N/blz5yQp7+rVqygqKpKkrAoIAxAgtxIKZnFTRFqVYuwrF9JYzxLi4uIwf/58bNq0CTVr1pSs3AYNGiApKQnp6emSlalgEsWVUz65ISItU4x95UKykb2WGTNmICkpCZs3b5ZswjYgIABnzpyRpCwFQSiTtOUTMX57xdhXMiQd2QNAYWEhBg0ahLCwMMkmbG/fvi1456uCJCjGvnyiFpFWceNUMm4BeCJ5obduYeTIkRg1ahTeeusti8tTDL3NUdw45RMxz00Z2VcmiNuNccQaZf/222/47rvvJJmwvXHjBhwcHCTSTEEAWXIroGAWYoz9I8XYVz5WWavgadOmISEhweIJ2xs3bkClvHTaEmWCpHwixtjfUHpU5WMLgExrFFxQUICBAwfC1dXVognb69evKyN726IY+/KJYuwVjENEeQA2WKv8pKQkjB49Gq1btzZ7wvbmzZvSKqVgirtElCq3EgriYIx5AuA/h/Mp1xVjXzn5BtzRilbh119/xcKFC82esC0oKMD9+/etoJmCAZRRfflE7KS6MrKvjBDRFQA/WLOODz74AKdPnzZ7wlYZ3duMBLkVUDCL+iLTKyP7SswX4M7VtQpqtRoDBgxAXl6eWRO2irG3GcrIvnzyqoi0yQCuKsa+kkJEDwF8bs06rl+/jrFjx8Lf31/0hK1i7G2GYuzLGYwxBqCXiCx/EhEpxr5yMw/AX9asYMOGDVi6dKnoCduUlBQraqVQQjoR3ZRbCQXRtAIg5lV5FwAoxr4SU7LJ6g0AVl2NMXnyZJw9e1bUhG3JaTwK1kXx15dPxolISwB2A4qxr/QQ0X0Ao61ZR35+PgYMGIDs7Gx89913aN++vTWrUxCO4sIpZzDGggEMF5HlNBE9AhRjrwCAiH4HsMSadVy5cgXjx4+Hk5MTNm7cKGlI5MoOYwwxMTFwcnISm1UZ2Zc/ZgAQ86C3av9QjL2ClvfBHV1oNdasWYNly5aZNWGrYBwiwo0bN3Do0CEMHjwY3PydIJSRfTmCMVYfwAgRWQoBLNP9n9ynpCtiPwKgGYB8iDu1XpS4ubnRuXPniIjop59+slo9lVFat25Nt2/fplOnTtFLL71kMq2Tk1MhAEe525wigvumCkC8yDaxtnQZrKQgBQUAAGPsPQDfWbOO8PBwnDx5Eh4eHujZsyfi4uKsWV2lwtfXF0uXLkVsbCzy8vKQnJysk5SUFN3farX6zsqVK+vIra+CMBhjUwDMFZktmogO68pQjL1CaUrW8P4OoIc165k9ezamTZuGadOmYc6cOdasqlLi5+eHV155BV26dEFoaCjq1q2LgAC9o2YfAaghk3oKImCMhYNzubmKyJZARC1Kf+AoqVYK5R4iIsbYcHCTd7WtVc+tW7cAALVq1bJWFZWaR48eYeXKlVi5cqXuM3d3d4SEhKBu3bqoV6+e36+//jrz/v37G4josoyqKpiAMeYAYAXEGXoAWPDsB4qxVygDEaUxxgaC8xFapY1oA50pxt525Obm4uLFi7h4UTcPPwvALMbYaQBrAKwjonuyKahgiA8BtBGZ5wKAlc9+qKzGUTAIER0Ft8zLKjx48ACAYuzthJbgIqHeZoztY4yNZIwpS6VkhjHWFOaFNJlMRJpnP1SMvYIpvgHwhzUKVkb2dokKQCcAPwG4yRj7iDFWVV6VKieMsWoANgJwFpl1GxHtNlimMkGrYIqSRpcAQFKr7OTkBLVaDSKCi4sLioqsFl5fwTKegAuH/R0R3ZVbmcoAY8wdXMyqKJFZCwE0JqKrBstVjL0CH4yxdgD2Q2L/fUpKCmrUqIHg4GDcvn1byqIlxcPDAy+88AKCgoIQEBCAwMBABAQEICAgAK6urnrLG5OTk3Hr1i3s378f+fn5cqsuJYUA/gdgFhE9kFuZikrJhOwWAD3NyP4NEU01+q3cmwUUKR8CYBok3gSUkJBARERt27aVfUPSs+Lt7U1Dhw6lzZs3U25uLhmkqIiK89UGv3ry5AmtXbuWYmNjyd3dXfbrkVByAHwJwFvuNlkRBcCPZj6XfwC4mipbGdkrCKJk/f0fALpLVeb27dvRvXt3DBw4EBs2WO1YXMGoVCoMHjwYQ4YMQdeuXeHszLlLC85fQt5vu1B4/SY0yY+geZDC/fvoMaDRQOXlCQf/6nDw94PK3w8uLZrAvV+P/2/v3KOrKq8E/tvJDUmgEIjII7yuCAjIQysYooFZGPGxYIHOEKbYaWGYqQrRglQHLAGhESmDDFOGmqKCdWx1SRxQGJ1iwTorgTCRCvhMIEASwg15kYQANtwke/74LpQQIMm9JzlJOL+19rrcnHO+b9/Lvft+Z3/7QchtppnQ2bNnWbp0KevXr6e2ttbOl2glpcBLwK9VtcpuZdoDIrICWObHpd8BY1T1+uVO7P4lc6TtCNAdyMeiVeKmTZtUVfWZZ56xe7Wq0dHRmpGRoRep+vMXevr5lzR/yL16nN5+yckRE7Vs+ctaXVSiqqp79+7VYcOG2f5aLZZcTBXGILs/n21ZMGWL/f0/+Elj5nCicRwajaqWADOBemFd/tBawi+XLVtGeno6Y8eO5VzKDk4OvgfPXQ9Sseo/8B4+5ve4F77KpHz5Wk4Om8DZN7cQExPDgQMHWLJkCS5Xu0lx6Y9J+jkkIs2add1eEZEF+F91NkVVX2vMiY6xd2gSqpoKLLViLLvDL0NCQti8eTMrVqygJr+AU/fFUzzjCbzZOVe/IDiY0OjvE7FkPl2X/4yw2LuRRhjt2tIySmYv4FTcDIJOFPDiiy+yb98+evbsWe/cIUOGkJ6ezsyZMwN8dS3OCGCHiKSKyD12K9MWEBGXiCQD6/DPFh+hKY1M7L59caTtCSDADgJ0ATz66KOqqrpnzx5bXBDJycmqqlq1/5Dm9b7jqq6YnDC3Fv/TQj237X+0prxCr6TmTKWW/3KD5nYb2ijXTk6YW8++876qqmZmZmqfPn0u6TN69GgtLCy8NPYnn3yiI0aMsNtN469sB8ba/VltrQJEAB8H8P4WALc0aU67X7QjbVOArpiVhd8GITo6WlVVS0tLtXv37i1qjKZPn66qqlVffqs5nW6tZ5RzI27T04tXavWpIr2SmsqzWvnbd7X4H57SvF6jm+7PlyiteNn80Bw7dkzdbrfGxMRoWVmZ1lZd0KL4x7Xy9bcvzZeRkaELFy7Uvn372m3A/ZE/AhPt/ry2JgEGYnpH+PueVgB3NHVeJxrHwW986dz7gI7+XB8ZGcm3335Ljx49yMjIYOLEiZw/f95aJa9CREQEOTk5RHQIxTP2YbzfHK5zvNPMR7jpN6sJ6tK5zt/V6+Xsq7+j/BfrqCkKvG1vl4VPELn2BTweDxEREXQKD6f475/k3Hum5HNYXCzdX12Da+AAM78q6enp7N+/n8zMTLKyssjMzLzkDmvl7MNE7/y33sBGx5ez8j4m2MEfLgAPq+onTZ77Bn7fHSxARGZiimj5xciRI/n000+JjIzko48+Ytq0ac2eTZuQkMCGDRsoX7aG8qR19Y5HfbGbDiOH1fnbuZQdlP981bX9+X7S7V8TiXjONGEv/cmzVL5e960Ul4uwSRPoNPMROj7yEEGdv1dvjMrKSrKysjh69Ci5ubn1pLKy0lKdA+RLYBWwRa9Sv6W9IiIuTDe4FYC/dYdqgcdU9V2/dHCMvUOgiMg6YIG/148ZM4bdu3fTpUsX3njjDebMmWOhdvU5dOgQI4cPJ7/fGGpOFdU51mHUMKIO7b703JudQ8lj86j6rJnatQYF0XP7b/Eey+P0TxOve6qEh9FxyiQ6/WAaHe4cQXC/qEZtEGdmZpKWlsaePXtIS0sjOzvbKu0DIRtYDfynql6wW5nmRETGARsxneD8pQr4kaqm+K2HY+wdAsXX8f4LoIu/Y8TGxrJz5046duzIypUrSUy8vuHzl8GDB3P48GHOb/+Yommz6x3vtmYpEc/OBUAveCkYN5kLB75qFl0uEtSlM4hQW3GmaRcGB+OK6onL3Q/XgL643P0I9j26BvTF1b8PElq/jtapU6dISUlh8+bNHDxoe8/xk5iCe6+qavP78FoQEemCcV3NJbDIxwpgmqr+b0D6OMbewV98FREXAfOB8EDHi4uL48MPPyQ0NJSEhAReeeWVgHW8kunTp5OSkkLZkl9S8dL6ugeDguh34s8ER5mQyNM/W8GZf9touQ4tRlAQrj69cA26hZBB7kuPoTF3EdzbvMaDBw+ycuXKw++9995NwE02alsC/Ar4jZp8jjaNiPwdsB6ICnCokxgf/ZcB6+QYe4emIiJhwFPA80CklWNPmTKFrVu3EhwcTHx8PFu3brVyeJKSkkhMTKTo0Tmcf/8PdY6Fxd5Nr9T3Afhu56cUPvxDaKffj5DhQwi/fzxh908gbPzdB4K7dR0HTAX+EXgQCLZJtWrgD8DvgO2q+p1NeviFiNyFqUFvRYLZNxhDb0mVQMfYOzQaX0W+H2M2mZqtZWF8fDzvvPMOXq+XBx54gNTUVMvG/uCDD5g6dSonh9yL98jxOsfC4mLptWsLNUUleEbFUVNYbNm8rRqXq8Ttzbv54lMRiQJ+hDH8t9mmlymv/F8Yw/8nVW2VhYV8m69/i7nDtSqh7F1MGQTLdtedDFqHRiEi0zB++c00o6EHSElJYc6cOYSGhrJ9+3Zuv/12y8YePnw4+pcqvEdz6x3TikpQpWT2ghvH0ANUV9dxwamqR1VXq+pQYCImVt4OOgOzgV3ACRFZIyL3+Iyr7YjITSLyPHAcY5ytMPRVwDxV/YGVhh6clb1DA4hILCZqosVT4J988kmSk5PJz88nJiaG/PzAe2cUFhYS+Rcv+QPG1jsWMvgWOs+bzelnXgh4njaGutVz3YWfiIwFlmBcPdIiWl2bM5j+Cn8EdqlqZktNLCIdMD1hZwE/pOmNwK/HUWCGqn5u4ZiXcIy9w1URkRGYSAJ/mihYxsKFC1m7di1ff/0148ePp6ysLKDxzpw5Q8fK85zoc2e9YxIeBrW1aFW7jgS8Fh3d6mnQP+77XPwcmIF9fv0ryces/ndhjH+hVQP79qfGAX/jk3FYEIxwFX6PWdE3MSSr8TjG3qEOItIf+AXGZ9sq3HyJiYkkJSWRlpbGpEmTAuoAVV1dDSWnOdFrtIUatgvC3OppdF16ERkELMbs4YQ0m1b+cRzIuYacvDyZy7dS7wp0u+Lxdoxxvxv/k6AaQzYwV1V3NeMcgGPsHXyIyEAgwSfN+eH2i1WrVrF48WK2bdvG9OnT/WoC4nK58Hq91JaWkdfdun2AdkCJWz03N3xafUSkH/Ac8M80z4rXaryAB/MD1RU/S31YwAWMe/QlVW2R/pWOsb9BEZHuwH3A/T65xV6NGmb9+vU8/fTTJCcnM2/ePL/GqKiooHOHUHK/Nwhqbphs/YY46FZPfb9WExCRHsBCYB5mY9Xh2uwGElQ1qyUnbRW36Q4tg4j0F5HVIvI5UIQvvIs2YOgB5s+fz6ZNm5g7d67fGbZ5eXlIWCgdRg61WLs2TcBx3KpapKqLMZFaizGrZ4e6pAL3qer9LW3owTH2NwQi0kNEfgUcBv4FuBP7IyqajKry+OOP8/bbb5OUlORXDZ28PGPXQmPGWK1eW6bJFRSvhapWqOpqwI0Jmww487MdsBeYpKoTVPVPdinhGPt2jIh0FZEXgWPAT2mFvvimUltby6xZs9i2bRsbN25k8uTJTbo+N9fE14fe4xj7y9hh9YCq6lXVN1V1FPAQJlLmRkIxzUkeUtV7W2IDtiEcY98OEZFQEVmMMfJLgE42q2Qp1dXVxMfH16SmpmZs2bKlNjo6utHXXszGDY+LRUJaWxCJLXztVo//jXYbgaruVNVJwCAgCQvcRq2YAmAlcKuqPqiqO+1W6CLOBm07xJdh+Blwh926NCMHgBhV7Z2dnT1/ypQpT2VlZTWYWRkZGUlxcTFBQUGUzF7A2Te3tICqrZofu9XzVktOKCJBmOCA2ZgyA20hiud6XMAkeL2Oac7SvA0Z/MQx9u0UERkKpGFfJcNSTCXD/lj/Zf4ciFfVOivSRYsWxZWWlsYXFBTEHjt2bOCRI0fCa64ScbN3715iYmK48FUmnlFx7bbYWSP4ErjDrR7bas74ygDPACZjSjNE2KVLEykGPsS4wD5W1bM269MgjrFvx4hINKYC38XN2BpMEscXwHngEcyXLFA3TyVmk28nJuLguKqe8+kgQB/MLfzgKx5vpWlxzkcxTSDWNWb1tGzZsh7l5eWPFRcXP3zixInRmZmZN5eWlgYtX76cF14wJRGKps7i/A67Sr/YSg3woFs9uxs8s4XwFdobgwkFngTEAPUL8tvDaWA/8H+Yqpz7WmthtmvhGPsbHBEJx9xSjwW+75M+17mkFijEuIlSffK5qnr9nL83pgHzRelF3UihGsxKfpeq1q9e1kQWLVoU179//9iEhIQewLiagsJRnrsectUUWJZh31Z42q2eDXYrcT1EpCMwARgPDMEsEAYB9XszWkclpoZ8PmZR9BnwmaoebcY5WwTH2DvUw+fz74apVR+JKfZUjInNL2lrK5oGCD/97IpZZ/79tQ3U1LaWWi/Nzctu9TxntxL+IiK9+Ovd4cU7xa6A6zIJueK5CxOQUoTJATjpkzr/trrSZGvCMfYODkCORM0BXqVli3t9A7wBTAPupflzHyqBuW71/L6Z53FohTjG3sHBR45ETcRUH+zdzFNVA2uAFReLj+VI1ADgMUzZXKsL99RiNhKfdaunVXQbd2h5HGPv4HAZORLVE3gLs0FoNZXAa8B6t3quuf+QI1GDMCv9WN/jUPxb9R8HtgK/dqvneEMnO7RvHGPv4HAVciRqHPAEJiwwkMqIhcAeTLTSW271NLleeY5ERWJKXPTGbGD3vOyxK1CBCXU9jdlbOQiku9VzKgC9HdoZjrF3cLgOORLVFeNTH8ZfNwQHYsJVzwPlV5FSTNLXHsdt4tBa+H8nqYHN7SVqRQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/baboon_vector.svg</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhLS0gQ3JlYXRlZCB3aXRoIElua3NjYXBlIChodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy8pIC0tPgoKPHN2ZwogICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiCiAgIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIgogICBpZD0ic3ZnMzE4MSIKICAgdmVyc2lvbj0iMS4xIgogICBpbmtzY2FwZTp2ZXJzaW9uPSIwLjQ4LjAgcjk2NTQiCiAgIHdpZHRoPSIxNzUwIgogICBoZWlnaHQ9Ijk2MCIKICAgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIKICAgc29kaXBvZGk6ZG9jbmFtZT0iYmFib29uX3ZlY3Rvci5zdmciPjxtZXRhZGF0YQogICAgIGlkPSJtZXRhZGF0YTMxODciPjxyZGY6UkRGPjxjYzpXb3JrCiAgICAgICAgIHJkZjphYm91dD0iIj48ZGM6Zm9ybWF0PmltYWdlL3N2Zyt4bWw8L2RjOmZvcm1hdD48ZGM6dHlwZQogICAgICAgICAgIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxkZWZzCiAgICAgaWQ9ImRlZnMzMTg1Ij48Y2xpcFBhdGgKICAgICAgIGNsaXBQYXRoVW5pdHM9InVzZXJTcGFjZU9uVXNlIgogICAgICAgaWQ9ImNsaXBQYXRoMzE5NSI+PHBhdGgKICAgICAgICAgZD0iTSAwLDc2OCAxNDAwLDc2OCAxNDAwLDAgMCwwIDAsNzY4IHoiCiAgICAgICAgIGlkPSJwYXRoMzE5NyIgLz48L2NsaXBQYXRoPjxjbGlwUGF0aAogICAgICAgY2xpcFBhdGhVbml0cz0idXNlclNwYWNlT25Vc2UiCiAgICAgICBpZD0iY2xpcFBhdGgzMjE1Ij48cGF0aAogICAgICAgICBkPSJNIDAsNzY4IDE0MDAsNzY4IDE0MDAsMCAwLDAgMCw3NjggeiIKICAgICAgICAgaWQ9InBhdGgzMjE3IiAvPjwvY2xpcFBhdGg+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTQ0MCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI4NTEiCiAgICAgaWQ9Im5hbWVkdmlldzMxODMiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIGlua3NjYXBlOnpvb209IjAuMjA1NTAyOTEiCiAgICAgaW5rc2NhcGU6Y3g9IjE1MzQuMTY2NyIKICAgICBpbmtzY2FwZTpjeT0iNzk1Ljc4MTU2IgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0iZzMxODkiIC8+PGcKICAgICBpZD0iZzMxODkiCiAgICAgaW5rc2NhcGU6Z3JvdXBtb2RlPSJsYXllciIKICAgICBpbmtzY2FwZTpsYWJlbD0iYmFib29uX3ZlY3RvciIKICAgICB0cmFuc2Zvcm09Im1hdHJpeCgxLjI1LDAsMCwtMS4yNSwwLDk2MCkiPjxnCiAgICAgICBpZD0iZzMxOTEiPjxnCiAgICAgICAgIGlkPSJnMzE5MyIKICAgICAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzE5NSkiPjxnCiAgICAgICAgICAgaWQ9ImczMTk5IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQ1OC45NTYxLDU2OS45Njc4KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Im0gMCwwIDU5LjgzNSw2OS4zNTUgODcuMDM0LDI2LjUxOCAxMzMuOTQ5LC03LjQ3OSBjIDAsMCA3NC4xMTYsLTMyLjYzOSA3NC43OTUsLTM0LjY3OCAwLjY4LC0yLjA0IDg0LjMxNCwtNTkuMTU1IDg0LjMxNCwtNTkuMTU1IGwgMTIuMjM4LC03NC43OTUgNS40MzksLTk3LjkxMiAtMTMuNTk4LC0yNS4xNTkgLTQuNzYsLTQwLjc5NyAtMTguMzU4LC0yMy4xMTggMjQuMzksLTUuNTYxIDAuNTAxLC01LjE5MiAtMTQuMDEyLC02MC42NDEgMTYuNDc3LC05My4zNjggNy4yMjMsLTQ5Ljk3MiAtMjA4LjI5NSwtNTEuNzU0IC0xOC41NTIsNC4wMDUgLTM3LjQ2OCw4LjMyNSAtMTAuMDM2LDQuMDM2IC02Ni44ODUsMTAuMTAxIGMgMCwwIC0xNC45NTksNzQuNzkzIC0xNi45OTksNzMuNDMzIC0yLjAzOSwtMS4zNTkgLTQyLjgzNiw1Ni40MzcgLTQyLjgzNiw1Ni40MzcgbCAtMTkuNzE5LDY1LjI3NCAxMi40OCw3NC41NzEgLTcuOTYxLDkuNjQzIC0yNi40NzksMTYuMTg3IC0xMi43MTYsMzguMzA5IDQuMDgsNDguMjc3IDguNzY5LDM4Ljk4NSBMIDYuNjA4LC03NC4zMDggMCwwIHoiCiAgICAgICAgICAgICBzdHlsZT0iZmlsbDojZmZmZmZmO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgICAgaWQ9InBhdGgzMjAxIiAvPjwvZz48ZwogICAgICAgICAgIGlkPSJnMzIwMyIKICAgICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3OC44NjU3LDY4Mi4xNTgyKSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE0Mi43ODksNDAuNzk3IDI1OS43NCw1Mi4zNTUgMzEzLjQ1NywtMjMyLjU0MyAyMDQuNjY1LC0yOTEuNjk4IDc4LjE5NCwtMjkzLjczOCAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDUiIC8+PC9nPjxnCiAgICAgICAgICAgaWQ9ImczMjA3IgogICAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI2OS41MTIyLDM0NS4yMzQ0KSI+PHBhdGgKICAgICAgICAgICAgIGQ9Ik0gMCwwIDE4LjgwMSwtNzQuNDI1IDQwLjcyOCwtODUuNDA4IDU5LjUzOSwtNTkuNTQxIDQwLjI1OSwxMy41MDMgMzYuODIxLDE1LjY2OSAwLDAgeiIKICAgICAgICAgICAgIHN0eWxlPSJmaWxsOiNmZmZmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgICBpZD0icGF0aDMyMDkiIC8+PC9nPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzIyMyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDc0MS45MTgsMTA5LjAzMzIpIj48cGF0aAogICAgICAgICBkPSJtIDAsMCAtMTcuMjM2LC05LjQwMSAtMTYuNDUyLC0yMi43MjEgLTAuNzgzLDEyLjUzNyA2LjI2OCwxNy4yMzQgMTMuMzE3LDYuMjY4IEwgMCw3LjgzMyAxNC44ODQsMy45MTcgMCwwIHogbSAxNzIuNjIyLC0yMS44MjQgYyAtMC4wMzEsMC4yNzEgLTAuMDgxLDAuNTM1IC0wLjExNywwLjgwNCAtMjAuODUsNy42NTMgLTQ5LjU5LDcuMzI3IC02Ni44NzQsMTAuOTI3IC0xMy44NDksMi44ODYgLTIzLjA0Nyw5LjExOSAtMjcuMDMyLDEyLjI5OCAtOS44NjMsLTguNDk0IC0xMi4wMjUsLTE0LjM3NyAtMTIuMDI1LC0xNC4zNzcgMCwwIC05LjgxNiwxNS4zMDkgLTMwLjE3LDI1Ljc2IC03LjA1LDMuNjIxIC0xNy43NjcsNS42OTEgLTI5LjM0MSw1LjY5MSAtMjQuMjk3LDAgLTUyLjM4NCwtOS4xNTUgLTU4LjMzOSwtMzIuMjIzIC0xMC40NTgsLTQwLjUxMSA5LjY5NywtNzYuNTk0IDQ5LjgxNCwtNzcuNjIzIDEuMzI1LC0wLjAzNCAyLjYyMywtMC4xMiAzLjg5NCwtMC4xMiAzNi4xMzEsMCA0OC44NTUsOC41NzIgNTguMzIzLDE1LjQ3OCAwLjAyNywwLjAyMSAwLjEwNCwwIDAuMTA0LDAgMCwwIDI1LjEyNiwtMTEuNTA2IDUzLjUyOSwtMTEuNTA2IDQuNDE5LDAgOS4xNTYsMC40MTUgMTQuMjQ5LDEuMDYzIDMxLjY0MSw0LjAxOCA0Ny45ODksMjguMTI0IDQzLjk4NSw2My44MjgiCiAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIyNSIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIyNyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMwMC44NDgxLDI3MC4wMjU0KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAtMy4wNjMsLTAuNjkxIC0xMi41MzUsMC43ODQgLTEyLjUzNSwwLjc4NCBsIDYuMjY3LC0yNS44NTMgNDMuNDgxLDEzLjMxOSAtOS4wMSwyNy40MTggQyAyOC4yMDMsMTUuNjY4IDcuODY3LDEuNzc3IDAsMCIKICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgaWQ9InBhdGgzMjI5IgogICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIiAvPjwvZz48ZwogICAgICAgaWQ9ImczMjMxIgogICAgICAgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMjExLjY2MDUyLDYxNS44NTk4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNi4yNDMsLTIuODcxIC0xNS40NjIsLTkuNCA0LjMyMywtMTAuOTM4IDE0LjU2OCw5Ljg5IEwgMi43NSwtOC43NzEgMCwwIHoiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzIzMyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzIzNSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI3NC4xNTczMiw2MjYuNDA4NCkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIC0xNS42NCwwLjQwNyAtMTQuMjc5LC0zLjYwOCAyLjAwOCwtOS43NDcgMTQuNzU2LDQuMjA4IEwgMS4xMTEsLTguMjE1IDAsMCB6IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyMzciCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgZD0iTSA0MzYuNjU2MjUgMjIuMjgxMjUgQyA0MzYuNjU2MjUgMjIuMjgxMjUgMzM4LjE4Mzc1IDI1LjM4NSAyNTEgNDIuODEyNSBDIDE2My4yNDg3NSA2MC4zNTM3NSA3MC40MDYyNSA5OS42NTYyNSA3MC40MDYyNSA5OS42NTYyNSBMIDE3NS4xODc1IDQ5NS4yODEyNSBMIDMyNy45Njg3NSA0OTIuMzQzNzUgTCAzMzcuNzUgNTI3LjU5Mzc1IEMgMzM3Ljc1IDUyNy41OTM3NSAzNjUuMDk1IDUyMy4yNTg3NSAzNzMgNTE4Ljc4MTI1IEMgMzc2LjMxMzc1IDUxNi45MDM3NSAzODMuNzgxMjUgNTA4IDM4My43ODEyNSA1MDggTCAzNzcuNzUgNDg0LjY1NjI1IEwgNTA0LjIxODc1IDQwNy4xNTYyNSBMIDQzNi42NTYyNSAyMi4yODEyNSB6IE0gNDEwLjUzMTI1IDU1LjE4NzUgTCA0NjUuNjg3NSAzOTMuMzEyNSBMIDM0Ni41OTM3NSA0NTYuNjI1IEwgMjAyLjc1IDQ2Ni40Njg3NSBMIDExMiAxMTQuNDA2MjUgTCAyNjMgNzkuMTg3NSBMIDQxMC41MzEyNSA1NS4xODc1IHogIgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMC44LDAsMCwtMC44LDAsNzY4KSIKICAgICAgIGlkPSJwYXRoMzI1MyIgLz48ZwogICAgICAgaWQ9ImczMjQ3IgogICAgICAgdHJhbnNmb3JtPSJtYXRyaXgoMS4xOTkyMzgsLTAuMDI4NzkzMzEsMC4wMjY3MzA4NCwxLjA1MjA3NTYsMTcyLjQxOTM1LDQ5OC4zNzMzOSkiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwwIC0xLjg2MSwxLjQ4MSAtOS4xNDMsLTEuNDU3IDkuNzEyLDE4Ljg2NyA5LjQzOSwzOS45ODkgOS40MzksMzkuOTg5IDAsMCAtMy4xMDYsLTIuNDY1IC0xMS4zMTEsLTguNDcgOS4yNDEsMjMuMDQ0IDUuMzM4LDcyLjUyNSA1LjMzOCw3Mi41MjUgMCwwIC0xNy40OTMsNDAuNzQ2IC0xMy42NTcsNDUuNzk5IDguODQxLDExLjY1IDIzLjgzNCwyMy45NjggNDQuMjk1LDI1LjU5NCAxNy45MzUsMS40MjQgNDQuNjA2LC00Ljk1MyA1NS44NjUsLTE1LjI4NCA0LjUzNiwtNC4xNjEgMjMuMzY3LC00Ny40OTMgMjMuMzY3LC00Ny40OTMgMCwwIDYuMTA0LC0zNS4yNzEgMTEuNjE5LC01NC4xMDggNS41MTMsLTE4LjgzOSAxMS4wNTQsLTI2LjY3NCAyMS4yODQsLTM0LjgyNSAxNy44MzEsLTE0LjIwNyAyNy4wNzYsLTI5LjkzOCAyNy4wNzYsLTI5LjkzOCBMIDE0My4zOTksMy45NDUgYyAzLjY1NSwtMTcuMzU2IDE0Ljg3NSwtMzQuMjggMjcuMzksLTQ3LjY3MiAtMTIuODYzLDEuNTA3IC0xOS42MSw4Ljc4MyAtMTkuNjEsOC43ODMgMCwwIDIuMTUxLC0xMi42NjQgOS4xMDksLTI2LjU1NCBsIDI4LjcxMiwxNS4yNjQgLTEuNzYyLDEwLjgwNSBjIC01LjEyOCw5LjMwNCAtOS4zMzYsMTUuNTM0IC05LjMzNiwxNS41MzQgMCwwIDIuMDg5LDAuOTU2IDcuMzg1LC0zLjU3MiBsIC0yLjAwNSwxMi4yOTYgYyAtNC44MTQsOS4zOTEgLTExLjc3MywxNi43NTIgLTI1LjExNSwzMS4xMTMgNS45NDQsLTYuMDg3IDE1LjQzOCwtNS4zNzkgMjAuNzUxLC00LjM1NiBsIC0wLjU3MiwzLjUxMiBjIC0yLjIzMSwxLjI3OCAtNS40OTQsMy4xNzEgLTEwLjI0MSw1Ljk1NyAtMTIuNDMsNy4yOTkgLTIyLjMyNiwyMS4wNDkgLTIyLjMyNiwyMS4wNDkgMCwwIDEyLjg1LDEuODE1IDIwLjUxMywxMS4wMjIgLTcuMzE2LC0yLjY0MSAtMTguNTg1LDAuNzk5IC0xOC41ODUsMC43OTkgLTE3LjA4Niw2Ljc3MiAtMTUuMDIyLDMwLjIxNyAtMTcuNjg3LDUwLjU4NyAtMi42NjcsMjAuMzcgLTkuMjk5LDM0LjEyNSAtOS4yOTksMzQuMTI1IDAsMCAtMC4yNDMsMi4xNDkgMTEuOTEsLTUuOTA2IC03Ljc0NCwzMy4yMTUgLTM1LjU0NSw0NC45NCAtMzUuNTQ1LDQ0Ljk0IDAsMCAyLjIyMywyLjc5IDIyLjg0MywwLjA0NCAtMTYuNDY5LDE1LjgxNyAtMzIuMzAzLDE2Ljg5NiAtMzIuMzAzLDE2Ljg5NiAwLDAgMTAuMDc3LDIuMjUgMjMuNjExLDAuMjQgMCwwIC0zLjMyNywzLjUwOCAtNy41NDksNi40NTMgTCAzNS45ODUsMTk0LjI5MSAtNzcuNTQzLDE2Ny44MTUgLTguMjExLC0xMDEuMTcgMTcuNDgxLC05OS40MTMgQyA4LjYwMiwtODUuMTE0IC0wLjM3MSwtNjMuODM3IC0yLjE1LC00MC44NTcgLTQuOTExLC01LjIwOCAwLDAgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNDkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzMyNTUiCiAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMDQuMjIxMzQsNTgwLjg4MzUzKSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAwLC0xLjQxOCAwLjQzLC0yLjczNiAxLjE2OCwtMy44MyAxLjUyMywwLjY3NyAzLjU1MSwxLjA5NCA1Ljc4NiwxLjA5NCAyLjE2NCwwIDQuMTMzLC0wLjM5IDUuNjM5LC0xLjAyOSAwLjcxMSwxLjA4MSAxLjEyOSwyLjM3NCAxLjEyOSwzLjc2NSAwLDMuNzkgLTMuMDcyLDYuODYxIC02Ljg2MSw2Ljg2MSBDIDMuMDcxLDYuODYxIDAsMy43OSAwLDAiCiAgICAgICAgIHN0eWxlPSJmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgIGlkPSJwYXRoMzI1NyIKICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIgLz48L2c+PGcKICAgICAgIGlkPSJnMzI1OSIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI1Ni4zMzExLDU5NS4zMTY0NikiPjxwYXRoCiAgICAgICAgIGQ9Im0gMCwwIGMgMCwtMS40MTggMC40MywtMi43MzYgMS4xNjgsLTMuODMgMS41MjQsMC42NzcgMy41NTIsMS4wOTQgNS43ODcsMS4wOTQgMi4xNjMsMCA0LjEzMiwtMC4zOSA1LjYzOCwtMS4wMjkgMC43MTIsMS4wODEgMS4xMjksMi4zNzMgMS4xMjksMy43NjUgMCwzLjc5IC0zLjA3Miw2Ljg2MSAtNi44NjEsNi44NjEgQyAzLjA3MSw2Ljg2MSAwLDMuNzkgMCwwIgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjEiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxnCiAgICAgICBpZD0iZzQxNzQiCiAgICAgICB0cmFuc2Zvcm09Im1hdHJpeCgwLjk5Njk0NTA5LDAuMDc4MTA1NjMsLTAuMDc4MTA1NjMsMC45OTY5NDUwOSw0Ny4zNDg3NDgsLTE1LjM0ODI5OSkiPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDIyMi41MDk4LDYxMC4xNTU4KSIKICAgICAgICAgaWQ9ImczMjE5Ij48cGF0aAogICAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiCiAgICAgICAgICAgaWQ9InBhdGgzMjIxIgogICAgICAgICAgIHN0eWxlPSJmaWxsOiNkZjAwMTk7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOm5vbnplcm87c3Ryb2tlOm5vbmUiCiAgICAgICAgICAgZD0ibSAwLDAgNC40NSwyLjc1MiA1LjM0LDMuNzg1IDcuMDUsLTguMjI2IDcuMDkzLC0zMy4zNTkgMTcuODAxLC01MS4yNTkgMTMuODYsLTMwLjIxNSAyNi4yNjEsLTEuNTUgLTYuNjg1LC0zNS42NTMgYyAwLDAgLTQ5Ljk4LC0yMS44NzEgLTQ5LjU0NSwtMjEuOTExIC00Mi42NTcsNC4wMDEgLTEyLjU1Myw0My4wNjYgLTguNjMxLDQ3LjMwMSBMIDMuNjY2LC00Ny44NjkgMCwwIHoiIC8+PC9nPjxnCiAgICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDI0Ny42MjYsNDY3LjM1NDUpIgogICAgICAgICBpZD0iZzMyMzkiPjxwYXRoCiAgICAgICAgICAgaW5rc2NhcGU6Y29ubmVjdG9yLWN1cnZhdHVyZT0iMCIKICAgICAgICAgICBpZD0icGF0aDMyNDEiCiAgICAgICAgICAgc3R5bGU9ImZpbGw6IzAwMDAwMDtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgICAgICBkPSJNIDAsMCBDIC0zLjA0NCwtMC4zNDUgLTUuMjMyLC0zLjA5MiAtNC44ODgsLTYuMTM2IC00LjU0MywtOS4xOCAxLjU3NiwtMi4yNTQgMTMuMzA4LC00Ljk2MSAxMy45NzEsLTEuOTcgMy4wNDQsMC4zNDQgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzkuNDQxOSw0NzYuNTc2MikiCiAgICAgICAgIGlkPSJnMzI0MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI0NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMy4yNzEsMS4wOCA2Ljc5OCwtMC42OTcgNy44OCwtMy45NjkgOC45NiwtNy4yNCAtMC41NSwtMy4wNDQgLTExLjI1OCwtMTEuMzI5IC0xMy4zNDUsLTguNTg2IC0zLjI3MiwtMS4wODEgMCwwIiAvPjwvZz48ZwogICAgICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyODQuMTkyOSw1MjUuOTA4MikiCiAgICAgICAgIGlkPSJnMzI2MyI+PHBhdGgKICAgICAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgICAgIGlkPSJwYXRoMzI2NSIKICAgICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICAgIGQ9Ik0gMCwwIEMgMCwwIC02Ljk3MiwyOC42NzEgLTYuOTcyLDI5LjM1NSBMIDEuNTg1LDIuODY0IDkuOTk5LC0xMC41NjQgMTMuNjM0LC0zMi42OTcgNy45MjIsLTExLjA5OCAwLDAgeiBNIC0wLjYzMywtMTUuMDM2IC05LjE5LC00Ljg2IC0xNi40NzgsMjUuNzc2IGMgLTAuMjAyLDAuNjg0IDkuMTA2LC0yOC44MTEgOS4xMDYsLTI4LjgxMSBsIDguNjQsLTExLjY0MiAyLjQ2OSwtMTcuMzM2IC00LjM3LDE2Ljk3NyB6IG0gLTYuMzM5LC02LjA4NSAtMTAuNDU3LDE2LjgyNiAtNS40NDQsMjguNjQ2IDYuNjE0LC0yNy44NDIgMTEuMzExLC0xOC4wMjYgMS40MTMsLTkuNTgzIC0zLjQzNyw5Ljk3OSB6IG0gLTUzLjQ2MiwtMTMuMjQ2IC0xLjQzNywyNC45NDQgLTIuNjgyLDI4Ljc1NCA1LjEwNiwtMjkuODk1IDEuMjEyLC0yMS42NzcgNC4xMzksLTE4LjIzNiAtNi4zMzgsMTYuMTEgeiBtIC00LjI2NSwtMTkuNTUgLTYuNjY1LDE1LjUxNiAwLjQwNCwyOS4yMDUgLTAuODgyLDI4LjE2OSAzLjEwNCwtMjguMzk2IDAuODA4LC0yNi42OTcgNC4yNDIsLTE1Ljk3MiAyLjQyMywtNi42MTcgLTMuNDM0LDQuNzkyIHogbSAtOS42OTUsLTIuOTY3IC03LjExNywxNi44ODUgMS4zMTgsMzIuMDEgMCwyNS4yMjMgMi4xMTUsLTI1LjA2MSAtMC41ODEsLTMxLjI1OSA1Ljg2OSwtMTYuNDI5IDUuMDU2LC04LjY3MSAtNi42Niw3LjMwMiB6IG0gMTAzLjE0NCwtNy45NyAtNi42NzYsMjAuMzggMi4xNDEsMTEuNTQgTCAxNi40OTksLTkuMzc2IDQuNTU3LDEzLjEwNCAtNS44NzksNTMuOTcgYyAwLDAgLTguMzI1LC03LjQxIC0xNi43ODEsLTguMDggLTguNDU1LC0wLjY3MSAtMTUuMDksNC4wMTggLTE1LjA5LDQuMDE4IDAsMCAzLjU5MiwtMTcuNzYxIDguNjU5LC0zNy41OTcgNS4wNjksLTE5LjgzNiAxNy41MjgsLTQ0Ljg2NiAxNy41MjgsLTQ0Ljg2NiAwLDAgMjEuNTc4LC04LjE5NyAyNC4zMDIsLTE2LjU4NyAyLjcyNCwtOC4zOTEgLTMuNTA4LC0yMi45MTEgLTE0LjEwMiwtMjYuNTUxIC0xMC41OTMsLTMuNjQgLTMyLjI4NCwtOC4yNjIgLTMyLjI4NCwtOC4yNjIgMCwwIC0xOSwxLjUxMiAtMjAuNDM4LDE0LjI2IDAsMCA0LjEzMSwxNi40MDYgMTAuNDE4LDE5LjIyNSA2LjI4NSwyLjgxOSAyMS4zNjIsMTEuMTc0IDIxLjM2MiwxMS4xNzQgbCAtOC4yNTQsMS4zMzIgLTcuNjY0LC0xLjMzMiBjIDAsMCAtNC43ODQsMTEuMjk1IC0xMC45NzMsMzUuMDg2IC02LjE5LDIzLjc5IC04Ljk2Nyw0Mi40ODUgLTguOTY3LDQyLjQ4NSAwLDAgLTMuOTEyLC00LjM5MSAtMTQuMTk5LC00Ljg4NSAtMTAuMjg2LC0wLjQ5NCAtMTYuMDMxLDcuOTg4IC0xNi4wMzEsNy45ODggbCAxLjAyNywtMzAuMTg1IC0xLjA0OSwtMjUuODMgLTAuMTUsLTI5LjIyIDUuMTAyLC0xNS45OSAxOS44MTgsLTMwLjQ0OCBjIDAsMCAxNC4xMDIsLTkuMjkzIDMxLjcyOCwtOS4yOTMgMTYuNDUzLDEuMzI4IDUxLjEzMSwxOC4wNDcgNTEuMTMxLDE4LjA0NyBsIDkuNTM2LDE2LjY4NyB6IiAvPjwvZz48L2c+PGcKICAgICAgIGlkPSJnMzI2NyIKICAgICAgIHRyYW5zZm9ybT0idHJhbnNsYXRlKDg0Ny4yNjM3LDMyMS41MDU5KSI+PHBhdGgKICAgICAgICAgZD0ibSAwLDAgYyAyLjI1MiwzLjUxNiA2LjY5MywxNS4zIDYuNjkzLDE1LjMgMCwwIDMuNzc4LC0xMy4zMDYgMS45MTIsLTE3LjIxMyAtMy4wNTYsLTYuNDA0IC0yMy45MDUsLTE1LjMgLTIzLjkwNSwtMTUuMyAwLDAgMTIuMTk2LDEyLjM2NCAxNS4zLDE3LjIxMyBtIC0zMy41MTQsMjMuMTYgLTAuNzU3LDU2LjM1MiBjIDAsMCAxMS4xMzYsLTE0LjAyOCAxMS44NDMsLTE5LjczOSAxLjE3NiwtOS40OTEgLTExLjA4NiwtMzYuNjEzIC0xMS4wODYsLTM2LjYxMyBtIC0xNy41NzUsMjM2LjkyMSBjIDAsMCAxMi40NTMsLTE1LjMzOCAxNC44NTQsLTIxLjM5IDEuNDI0LC0zLjU5MSAyLjI4NiwtMTUuMjg3IDIuMjg2LC0xNS4yODcgbCAtMTcuMTQsMzYuNjc3IHogTSAtOTguNTc0LC04Ni4xMzYgYyAtOS43NTcsLTAuOTA2IC0yOS44MzYsMS4wMTYgLTM4LjkxMiw0LjcwOCAtNy40OTksMy4wNSAtMjUuNzM0LDE5LjY1NiAtMjUuNzM0LDE5LjY1NiBsIDI0LjE4NywtMTAuODYgLTQuNzAxLDE3LjYyNyAxNS4yNzIsLTIyLjAwOSA0MS44MTMsLTUuMzU2IGMgMCwwIC04LjgxMiwtMy40NzcgLTExLjkyNSwtMy43NjYgbSAtNzQuNDI4LDE1Ny45NDEgYyAtNC41MTgsMTAuMDU3IC0xLjc2Myw0NC4wNjUgLTEuNzYzLDQ0LjA2NSAwLDAgNy41NDQsLTMxLjA5MyAxMi4zMzgsLTQwLjU0MSA2Ljk3OCwtMTMuNzU0IDM3LjAxNSwtNDkuMzUyIDM3LjAxNSwtNDkuMzUyIDAsMCAtNDAuODI0LDMwLjc1OSAtNDcuNTksNDUuODI4IG0gLTE3LjgzMywtMTQ5LjQ3IC00MC40MDcsMjQuNzI0IDEuNjM2LC0xNy41NzUgMC4wMjYsLTAuMDM1IC01LjE3OCwtMjkuODExIC0yLjA1NiwtMTAuNzAxIDAuMzgzLC0zMy4zNCAtNC45ODIsMzYuNDA2IDYuNDEsNDEuNDUgLTExLjA2Myw4LjMzOCAtMTcuNTMyLDQzLjE1OSAyMy41MDIsLTM4Ljc3OSAyLjM1MSwxNC4xMDEgNDAuNjM0LC0yNS42OTUgMTEuOTI0LC01LjY1MSAxMy44MDksLTI4Ljg3MSAtMTkuNDU3LDIyLjI4IHogbSAtODUuNTIyLDEzOC44NjMgMTcuMjEyLC0zNC40MjQgYyAwLDAgLTEyLjk3MiwxMS4xODUgLTE1LjI5OSwxNi4yNTcgLTEuOTA1LDQuMTUyIC0xLjkxMywxOC4xNjcgLTEuOTEzLDE4LjE2NyBtIC0yLjM2Nyw2Ni4wNDIgYyAwLDAgLTYuMjA2LDE1LjU4MSAtNi4zMjMsMjEuMDgyIC0wLjE2OCw3LjgxNyA0LjU2OCwyMy4xNDggNy42OTUsMzAuMzE1IDAuNzU1LDEuNzMgNC4xMDMsNi4zNDEgNC4xMDMsNi4zNDEgMCwwIC00LjY1NCwtMjQuNTQyIC01LjM0NywtMzIuODI5IC0wLjUxOCwtNi4yMDUgLTAuMTI4LC0yNC45MDkgLTAuMTI4LC0yNC45MDkgbSAtNy4xOTUsLTExNC44MDkgYyAtMC4zMzQsMy4zNjMgMS45MTIsMTMuMzg3IDEuOTEyLDEzLjM4NyBsIDMuODI1LC0yOS42NDMgYyAwLDAgLTUuMzEzLDExLjk2NyAtNS43MzcsMTYuMjU2IG0gLTIwLjA4Miw1My41NDkgYyAtMS4zOTQsMy41NzEgLTAuOTU2LDE1LjMwMSAtMC45NTYsMTUuMzAxIGwgMTMuMzg4LC0zMC42IGMgMCwwIC0xMC42MzksMTAuNzEgLTEyLjQzMiwxNS4yOTkgbSAtNi4wMywxMDYuNzk1IGMgMCwwIC0wLjMxNSwzNS44MzEgNC42MzcsNDYuMzc5IDQuNTMxLDkuNjQ3IDI5LjkzNiwzMC4zNTYgMjkuOTM2LDMwLjM1NiAwLDAgLTE3LjgyNCwtMjIuNDcgLTIxLjUwMywtMzEuMiAtNS4wODksLTEyLjA3NyAtMTAuMTE5LC01MS40MzcgLTEwLjExOSwtNTEuNDM3IGwgLTIuOTUxLDUuOTAyIHogTSA1MC4xMjEsMjA1LjAxIGMgMy4zMzUsLTkuMTU1IDEuMTY4LC0zOC45NTYgMS4xNjgsLTM4Ljk1NiAwLDAgLTUuNDUxLDI5Ljk4NyAtOS4yMjEsMzkuMzY2IC00LjIxNCwxMC40ODcgLTIzLjAxNCwzOC45MDcgLTIzLjAxNCwzOC45MDcgMCwwIDI2Ljc4LC0yNy41NDYgMzEuMDY3LC0zOS4zMTcgTSA1NC41MDYsOTUuNjI0IGMgMCwwIDYuODg0LC0xOC41ODYgNS43MzgsLTI0Ljg2MSAtMC43NzMsLTQuMjQxIC05LjU2MiwtMTQuMzQ1IC05LjU2MiwtMTQuMzQ1IDAsMCAyLjQxNCwxMi44NzQgMi44NjgsMTcuMjEyIDAuNTczLDUuNDc0IDAuOTU2LDIxLjk5NCAwLjk1NiwyMS45OTQgTSAxOS4xMjUsLTEzLjM4OSBjIDAsMCA5LjY1NiwyMi4xODMgMTEuMDYyLDMwLjA2OCAxLjIzNSw2Ljk0MSAwLDI4LjIwMyAwLDI4LjIwMyAwLDAgOC40NzcsLTIyLjgxOSA3LjEwNiwtMzAuNTM4IEMgMzUuODQ1LDYuMTgzIDE5LjEyNSwtMTMuMzg5IDE5LjEyNSwtMTMuMzg5IG0gNDQxLjQ4NywtNDAuOTY1IGMgLTMuMjQ5LDguOTM1IC02LjU4NywxNy4yMyAtMTAuMDEsMjQuOTI4IGwgLTEuODYyLDI4Ljg3MyAtOC44NTcsLTQuODc2IC0yNS44NjIsNDkuNDU3IC00LjgyOCwtMTAuMzQgYyAtMzIuNjksMzEuNDggLTcwLjQ1NywzNC4yODQgLTExMS45ODIsMzEuNjQ2IC02NS41NjgsLTQuMTYzIC05MS41ODcsLTQxLjYzIC03OS4wOTgsLTU3LjI0MSAxMi40OSwtMTUuNjEzIDE4LjczMywtNS4yMDUgNDAuNTg5LDUuMjAzIDIxLjg1OCwxMC40MDcgNzQuOTM3LDI2LjAxNyAxMTAuMzIzLC0yLjA4MiAzNS4zODYsLTI4LjEgODYuMzgzLC0xMDkuMjgxIDUwLjk5NywtMTY5LjY0NiAtMzUuMzg2LC02MC4zNjUgLTEwNS42MjYsLTEwNS4zODUgLTE4Mi4xMzUsLTg4LjQ2NSAtODYuNDIyLDE5LjExMiAtMTI2LjA3OCw2MC4wODIgLTE3Ny42NzUsNzQuODExIC04LjMxMSwxLjMzNCAtMTguMzQ3LDIuNzg5IC0yNC43OTEsMy4xOTEgLTEyLjY3MSwwLjc5MiAtMjEuNiwxNC43MjcgLTIxLjYsMTQuNzI3IGwgMTcuMTgxLC05LjMyNyAyNS43NjMsLTIuMzYgYyAyLjMzMSwxNCA5LjM5NSw0OS4wNTQgOS4zOTUsNDkuMDU0IGwgLTguNjg4LDg3LjI5IC0xOC42NjgsLTI3LjA2IC03LjI0NiwxMC4xODQgLTIxLjM0OSwtMjIuOTE1IC0xNS40NzMsLTEuOTU5IDE0LjY3LDYuNTk2IDIxLjM4LDI5LjQwOSA2LjcsLTEzLjc1NCAxOS40ODUsMjQuNjkxIDAuMDA0LC0wLjAxMSAxNi40Nyw5LjUyNSAtMy4xMjMsNjguNjkgMTAuNDA3LC0xMC40MDcgLTQuMTYzLDQwLjU5IDIyLjE3Myw3MS41MDIgLTM0LjY2Miw5MS44OTkgMTYuNjUyLC00LjE2MiAtMTkuNzczLDM1LjM4NiAtNDAuNTkxLDM4LjUwOSA5LjM2OCwxNy42OTMgLTkzLjY3MSw5LjM2OCAtMjAuMjI5LC03LjE2NSAtMTguNDM3LDM4LjI5MiAxMy4yMiw4LjgxMyAtNjkuMDM5LDE0LjY5IDIuOTM4LDE5LjA5NSAtODAuNzkxLC0yMy4zMDMgLTI2LjE0NywtMTkuMTkxIC0xMTYuMzM5LDAgOC44MTQsLTEwLjE4OCAtNDIuNTAxLC00MC42NDEgLTguOTExLC03OC40OTEgNy4zNDQsLTEuNDk0IDguODE0LC00NS41NDggMjMuNTAyLC0yNC45NzggMTkuMDk2LDQ1LjUzMyAtMTQuNjg5LC00LjQwOSA0MS4xMyw0OC40NzQgMzAuODQ4LDI2LjQ0IC0xNC42OSwtMS40NjkgMTkuMDk2LDE2LjE1OCAxMDUuNzYzLDIuOTM4IDcyLjkxNywxNS43OTkgLTQxLjYyMywtMTQuNzQyIC0zMC4xODEsLTcuMjg1IC0xMDQuMDc5LC0xLjA0MyAxLjA0LC0xMS40NDkgLTY0LjUyNiwtNjEuNDAzIDE0LjU3MSwyLjA4MSAtMjcuODQ0LC02My4yOCBjIC0xNS4wMTcsLTEzLjcxOSAtMjguMDYsLTU1LjAxNiAtMzYuNjg3LC03NS4xNDUgLTkuMzY3LC0yMS44NTYgLTIwLjgxNiwtMzkuNTUgLTIwLjgxNiwtMzkuNTUgMCwwIC0zMC4xODIsLTYuMjQ0IC02MS40MDUsLTE4LjczNCAtMzEuMjI0LC0xMi40ODkgLTQzLjcxMyw0LjE2MyAtNDMuNzEzLDQuMTYzIGwgLTMuMTIyLC04LjMyNiBjIDAsMCAtMTguMjgsLTkuMDU3IC0zOS4zMDMsLTExLjgyNSAtMTYuNDMsLTIuMTYyIC05Ljk2NywtMjAuOTQ2IC05LjYxMywtMjYuNjg0IDAuNDA1LC02LjU3IDQuMjk0LC0xOS43NzQgOC4zMjUsLTI0Ljk3OCAzLjIyNywtNC4xNjUgMTIuNTI1LC0xMC40MjUgMTcuNjk0LC0xMS40NDggMTIuMDM5LC0yLjM4NSAyOC4xMDEsNS4yMDQgNDUuNzk0LDE3LjY5MyA3NC45MzYsLTYuMjQ1IDEwMy4yNDEsLTEwLjMyMSAxMjYuOTc0LDguMzI2IDE0LjU3MiwxMS40NDggMjkuMTQyLDIyLjg5NyA0MS42MzEsNDAuNTkgbCAtMTUuNjExLDQyLjY3MSAtOC4zMjcsLTE0LjU2OSAtNS44MDcsNDQuOTMxIDEuODQxLDE3Ljg2MyA1LjU0NywtNTEuMjM0IDcuNzg5LDkuMjU3IDM1LjM4NywtNzAuNzcyIDExLjQ0OCw0LjE2NCBjIDAsMCAxMy41MTUsLTE4LjU4MyAyMy4wNTcsLTMyLjg4MSBsIC0yNi4wMiwyNS4wMDYgLTEwLjIyNCwtNS45NjQgLTExLjA3NiwyMi4xNTIgYyAwLDAgLTEzLjM4MywtMi4zNTMgLTI0LjcyNywtMTguMDI3IC0xNS44NjIsLTIxLjkxNSAtMjMuNTAzLC0yNC42NzggLTE3LjYyNywtNzguNzM1IDUuODc2LC01NC4wNTUgMTYuNDUyLC01NC4wNTUgNjQuNjMyLC0xMjEuMDM5IDExLjc1MiwtMTYuNDUyIDE0LjYwMSwtMTguNDY1IDE0LjYwMSwtMTguNDY1IGwgLTUxLjAzLC0yNy4zNjUgLTIyLjMyNywtNS44NzYgLTIxLjM4NCwtMTEuMjggYyAwLDAgNC43NDQsLTguMTc0IDcuNDk1LC05LjM2OSA0LjczOSwtMi4wNjIgMjAuNjEzLDEuNTYgMjAuNjEzLDEuNTYgMCwwIDE1LjYwMywtNi43NjMgMzYuNzU2LC02Ljc2MyAyMS4xNTIsMCAzMi45MDMsOC4yMjUgNDcuMDA1LDguMjI1IDE0LjEwMSwwIDM4Ljc4LC04LjIyNSA1Ny41ODIsLTUuODc2IDE4LjgwMiwyLjM1MSAyMi4zMjgsMTIuOTI3IDIyLjMyOCwxMi45MjcgbCAtNTEuNzA2LDU0LjA1NyAtNC42NzUsNDcuMDk2IC01Ni42MDUsNzUuNzY5IC0zLjAzOCw5LjQzNyA2NS43OTEsLTgyLjI0IDUuMTA3LC00Ni43NSA1NS4xNjEsLTYxLjQwNSAzNy40NjgsLTguMzI1IGMgMCwwIC0wLjI1NywxLjIyNiAtMC42MjUsMy4xMTQgLTYuMTQ2LDE1LjY2NCAtNi45ODYsMzQuODk0IC0xLjk5OSw1NC4yMTQgNi45NzUsMjcuMDEyIDM4Ljg1LDM2LjU5NiA2NC4wMjksMzYuNTk2IDEyLjUwNiwwIDI0LjE3OSwtMi4zMTIgMzIuMDI1LC02LjM0MSAxMi45MTIsLTYuNjMgMjEuODUxLC0xNS4wNzYgMjcuMDI5LC0yMC45MTcgMy42NzMsNC41MTYgNy4xMzMsNy4xOTQgMTEuODMzLDExLjExIDAsMCAxMi4xNDMsLTExLjc1MSA0NS4wNDcsLTE0LjEwMSAyNy4xNCwtMS45MzkgNDUuMDQ4LC04LjIyNiA3MC45MDEsLTE5LjU4NSA1My42NzYsLTIzLjU4NCAxMDIuNSwtNjEuNzg1IDIwNy42MTgsLTQ1LjEzMiAxMDUuMTE5LDE2LjY1MSAyMDYuMDczLDExMy40NDQgMTY0LjQ0MiwyMjcuOTI5IgogICAgICAgICBzdHlsZT0iZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lIgogICAgICAgICBpZD0icGF0aDMyNjkiCiAgICAgICAgIGlua3NjYXBlOmNvbm5lY3Rvci1jdXJ2YXR1cmU9IjAiIC8+PC9nPjxwYXRoCiAgICAgICBpbmtzY2FwZTpjb25uZWN0b3ItY3VydmF0dXJlPSIwIgogICAgICAgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtmaWxsLXJ1bGU6bm9uemVybztzdHJva2U6bm9uZSIKICAgICAgIGQ9Im0gMzI5LjI2Mzk4LDcyMy4zMDgyIC0xMTguMDI1LC0xOS4yIC0xMjAuODAwMDAzLC0yOC4xNzUgNzIuNjAwMDAzLC0yODEuNjUgMTE1LjA3NSw3Ljg3NSA5NS4yNzUsNTAuNjUgLTQ0LjEyNSwyNzAuNSB6IG0gLTYuNTUsLTEwLjU3NSA0MC42NzUsLTI1Mi40IC04Ny44NSwtNDcuMjc1IC0xMDYuMTI1LC03LjMyNSAtNjYuOTUsMjYyLjggMTExLjQsMjYuMjc1IDEwOC44NSwxNy45MjUgeiIKICAgICAgIGlkPSJwYXRoMzI1My0zIiAvPjwvZz48L3N2Zz4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/compress.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvbXByZXNzaW9uIEhlbHBlcjwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBTY3JpcHQgY29tcHJlc3Npb24KICAgaGVscGVyICovCjwvcHJlPgoKICAgIDxwPlRvIG9wdGltaXplIGxvYWRpbmcgQ29kZU1pcnJvciwgZXNwZWNpYWxseSB3aGVuIGluY2x1ZGluZyBhCiAgICBidW5jaCBvZiBkaWZmZXJlbnQgbW9kZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGNvbWJpbmUgYW5kCiAgICBtaW5pZnkgKGFuZCBwcmVmZXJhYmx5IGFsc28gZ3ppcCkgdGhlIHNjcmlwdHMuIFRoaXMgcGFnZSBtYWtlcwogICAgdGhvc2UgZmlyc3QgdHdvIHN0ZXBzIHZlcnkgZWFzeS4gU2ltcGx5IHNlbGVjdCB0aGUgdmVyc2lvbiBhbmQKICAgIHNjcmlwdHMgeW91IG5lZWQgaW4gdGhlIGZvcm0gYmVsb3csIGFuZAogICAgY2xpY2sgPHN0cm9uZz5Db21wcmVzczwvc3Ryb25nPiB0byBkb3dubG9hZCB0aGUgbWluaWZpZWQgc2NyaXB0CiAgICBmaWxlLjwvcD4KCiAgICA8Zm9ybSBpZD0iZm9ybSIgYWN0aW9uPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL3VnbGlmeWpzIiBtZXRob2Q9InBvc3QiPgogICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0iZG93bmxvYWQiIG5hbWU9ImRvd25sb2FkIiB2YWx1ZT0iY29kZW1pcnJvci1jb21wcmVzc2VkLmpzIi8+CiAgICAgIDxwPlZlcnNpb246IDxzZWxlY3QgaWQ9InZlcnNpb24iIG9uY2hhbmdlPSJzZXRWZXJzaW9uKHRoaXMpOyIgc3R5bGU9InBhZGRpbmc6IDFweCI+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+SEVBRDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4yMztmPSI+Mi4yMzwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4yMjtmPSI+Mi4yMjwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4yMTtmPSI+Mi4yMTwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj12Mi4yO2Y9Ij4yLjI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTg7Zj0iPjIuMTg8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTY7Zj0iPjIuMTY8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTU7Zj0iPjIuMTU8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTM7Zj0iPjIuMTM8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTI7Zj0iPjIuMTI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTE7Zj0iPjIuMTE8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMTtmPSI+Mi4xPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjAyO2Y9Ij4yLjAyPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjAxO2Y9Ij4yLjAxPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPXYyLjA7Zj0iPjIuMDwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj1iZXRhMjtmPSI+YmV0YTI8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9YmV0YTE7Zj0iPmJldGExPC9vcHRpb24+CiAgICAgIDwvc2VsZWN0PjwvcD4KCiAgICAgIDxzZWxlY3QgbXVsdGlwbGU9Im11bHRpcGxlIiBzaXplPSIyMCIgbmFtZT0iY29kZV91cmwiIHN0eWxlPSJ3aWR0aDogNDBlbTsiIGNsYXNzPSJmaWVsZCIgaWQ9ImZpbGVzIj4KICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9IkNvZGVNaXJyb3IgTGlicmFyeSI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL2NvZGVtaXJyb3IuanMiIHNlbGVjdGVkPmNvZGVtaXJyb3IuanM8L29wdGlvbj4KICAgICAgICA8L29wdGdyb3VwPgogICAgICAgIDxvcHRncm91cCBsYWJlbD0iTW9kZXMiPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvY2xpa2UvY2xpa2UuanMiPmNsaWtlLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jbG9qdXJlL2Nsb2p1cmUuanMiPmNsb2p1cmUuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2NvZmZlZXNjcmlwdC9jb2ZmZWVzY3JpcHQuanMiPmNvZmZlZXNjcmlwdC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvY3NzL2Nzcy5qcyI+Y3NzLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9kaWZmL2RpZmYuanMiPmRpZmYuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2VjbC9lY2wuanMiPmVjbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvZ2ZtL2dmbS5qcyI+Z2ZtLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9nby9nby5qcyI+Z28uanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2dyb292eS9ncm9vdnkuanMiPmdyb292eS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvaGFza2VsbC9oYXNrZWxsLmpzIj5oYXNrZWxsLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9odG1sZW1iZWRkZWQvaHRtbGVtYmVkZGVkLmpzIj5odG1sZW1iZWRkZWQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2h0bWxtaXhlZC9odG1sbWl4ZWQuanMiPmh0bWxtaXhlZC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj5qYXZhc2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9qaW5qYTIvamluamEyLmpzIj5qaW5qYTIuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2xlc3MvbGVzcy5qcyI+bGVzcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbHVhL2x1YS5qcyI+bHVhLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9tYXJrZG93bi9tYXJrZG93bi5qcyI+bWFya2Rvd24uanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL215c3FsL215c3FsLmpzIj5teXNxbC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvbnRyaXBsZXMvbnRyaXBsZXMuanMiPm50cmlwbGVzLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wYXNjYWwvcGFzY2FsLmpzIj5wYXNjYWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3BlcmwvcGVybC5qcyI+cGVybC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcGhwL3BocC5qcyI+cGhwLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9wbHNxbC9wbHNxbC5qcyI+cGxzcWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Byb3BlcnRpZXMvcHJvcGVydGllcy5qcyI+cHJvcGVydGllcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcHl0aG9uL3B5dGhvbi5qcyI+cHl0aG9uLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9yL3IuanMiPnIuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3JwbS9jaGFuZ2VzL2NoYW5nZXMuanMiPnJwbS9jaGFuZ2VzLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9ycG0vc3BlYy9zcGVjLmpzIj5ycG0vc3BlYy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcnN0L3JzdC5qcyI+cnN0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9ydWJ5L3J1YnkuanMiPnJ1YnkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3J1c3QvcnVzdC5qcyI+cnVzdC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc2NoZW1lL3NjaGVtZS5qcyI+c2NoZW1lLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zbWFsbHRhbGsvc21hbGx0YWxrLmpzIj5zbWFsbHRhbGsuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3NtYXJ0eS9zbWFydHkuanMiPnNtYXJ0eS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc3BhcnFsL3NwYXJxbC5qcyI+c3BhcnFsLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zdGV4L3N0ZXguanMiPnN0ZXguanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3RpZGRseXdpa2kvdGlkZGx5d2lraS5qcyI+dGlkZGx5d2lraS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvdmJzY3JpcHQvdmJzY3JpcHQuanMiPnZic2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS92ZWxvY2l0eS92ZWxvY2l0eS5qcyI+dmVsb2NpdHkuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3Zlcmlsb2cvdmVyaWxvZy5qcyI+dmVyaWxvZy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUveG1sL3htbC5qcyI+eG1sLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS94bWxwdXJlL3htbHB1cmUuanMiPnhtbHB1cmUuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3hxdWVyeS94cXVlcnkuanMiPnhxdWVyeS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUveWFtbC95YW1sLmpzIj55YW1sLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgICA8b3B0Z3JvdXAgbGFiZWw9IlV0aWxpdGllcyBhbmQgYWRkLW9ucyI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvb3ZlcmxheS5qcyI+b3ZlcmxheS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL3J1bm1vZGUuanMiPnJ1bm1vZGUuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9zaW1wbGUtaGludC5qcyI+c2ltcGxlLWhpbnQuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9qYXZhc2NyaXB0LWhpbnQuanMiPmphdmFzY3JpcHQtaGludC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL2ZvbGRjb2RlLmpzIj5mb2xkY29kZS5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL2RpYWxvZy5qcyI+ZGlhbG9nLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL3V0aWwvc2VhcmNoLmpzIj5zZWFyY2guanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9zZWFyY2hjdXJzb3IuanMiPnNlYXJjaGN1cnNvci5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi91dGlsL2Zvcm1hdHRpbmcuanMiPmZvcm1hdHRpbmcuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9tYXRjaC1oaWdobGlnaHRlci5qcyI+bWF0Y2gtaGlnaGxpZ2h0ZXIuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvdXRpbC9jbG9zZXRhZy5qcyI+Y2xvc2V0YWcuanM8L29wdGlvbj4KICAgICAgICA8L29wdGdyb3VwPgogICAgICAgIDxvcHRncm91cCBsYWJlbD0iS2V5bWFwcyI+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQva2V5bWFwL2VtYWNzLmpzIj5lbWFjcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2tleW1hcC92aW0uanMiPnZpbS5qczwvb3B0aW9uPgogICAgICAgIDwvb3B0Z3JvdXA+CiAgICAgIDwvc2VsZWN0PjwvcD4KCiAgICAgIDxwPgogICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0Ij5Db21wcmVzczwvYnV0dG9uPiB3aXRoIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21pc2hvby9VZ2xpZnlKUy8iPlVnbGlmeUpTPC9hPgogICAgICA8L3A+CgogICAgICA8cD5DdXN0b20gY29kZSB0byBhZGQgdG8gdGhlIGNvbXByZXNzZWQgZmlsZTo8dGV4dGFyZWEgbmFtZT0ianNfY29kZSIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDE1ZW07IiBjbGFzcz0iZmllbGQiPjwvdGV4dGFyZWE+PC9wPgogICAgPC9mb3JtPgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgZnVuY3Rpb24gc2V0VmVyc2lvbih2ZXIpIHsKICAgICAgICB2YXIgdXJscHJlZml4ID0gdmVyLm9wdGlvbnNbdmVyLnNlbGVjdGVkSW5kZXhdLnZhbHVlOwogICAgICAgIHZhciBzZWxlY3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZmlsZXMiKSwgbTsKICAgICAgICBmb3IgKHZhciBvcHRnciA9IHNlbGVjdC5maXJzdENoaWxkOyBvcHRncjsgb3B0Z3IgPSBvcHRnci5uZXh0U2libGluZykKICAgICAgICAgIGZvciAodmFyIG9wdCA9IG9wdGdyLmZpcnN0Q2hpbGQ7IG9wdDsgb3B0ID0gb3B0Lm5leHRTaWJsaW5nKSB7CiAgICAgICAgICAgIGlmIChvcHQubm9kZU5hbWUgIT0gIk9QVElPTiIpCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIGVsc2UgaWYgKG0gPSBvcHQudmFsdWUubWF0Y2goL15odHRwOlwvXC9jb2RlbWlycm9yLm5ldFwvKC4qKSQvKSkKICAgICAgICAgICAgICBvcHQudmFsdWUgPSB1cmxwcmVmaXggKyBtWzFdOwogICAgICAgICAgICBlbHNlIGlmIChtID0gb3B0LnZhbHVlLm1hdGNoKC9odHRwOlwvXC9tYXJpam5oYXZlcmJla2UubmxcL2dpdFwvY29kZW1pcnJvcjJcP2E9YmxvYl9wbGFpbjtoYj1bXjtdKztmPSguKikkLykpCiAgICAgICAgICAgICAgb3B0LnZhbHVlID0gdXJscHJlZml4ICsgbVsxXTsKICAgICAgICAgIH0KICAgICAgIH0KICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/docs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ym9keSB7CiAgZm9udC1mYW1pbHk6IERyb2lkIFNhbnMsIEFyaWFsLCBzYW5zLXNlcmlmOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWF4LXdpZHRoOiA2NC4zZW07CiAgbWFyZ2luOiAzZW0gYXV0bzsKICBwYWRkaW5nOiAwIDFlbTsKfQoKaDEgewogIGxldHRlci1zcGFjaW5nOiAtM3B4OwogIGZvbnQtc2l6ZTogMy4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogMDsKfQoKaDIgewogIGZvbnQtc2l6ZTogMS4yM2VtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogLjVlbSAwOwogIGxldHRlci1zcGFjaW5nOiAtMXB4Owp9CgpoMyB7CiAgZm9udC1zaXplOiAxZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgbWFyZ2luOiAuNGVtIDA7Cn0KCnByZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICAtbW96LWJvcmRlci1yYWRpdXM6IDZweDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDZweDsKICBib3JkZXItcmFkaXVzOiA2cHg7CiAgcGFkZGluZzogMWVtOwp9CgpwcmUuY29kZSB7CiAgbWFyZ2luOiAwIDFlbTsKfQoKLmdyZXkgewogIGZvbnQtc2l6ZTogMi4yZW07CiAgcGFkZGluZzogLjVlbSAxZW07CiAgbGluZS1oZWlnaHQ6IDEuMmVtOwogIG1hcmdpbi10b3A6IC41ZW07CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgppbWcubG9nbyB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHJpZ2h0OiAtMjVweDsKICBib3R0b206IDRweDsKfQoKYTpsaW5rLCBhOnZpc2l0ZWQsIC5xdWFzaWxpbmsgewogIGNvbG9yOiAjZGYwMDE5OwogIGN1cnNvcjogcG9pbnRlcjsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIsIC5xdWFzaWxpbms6aG92ZXIgewogIGNvbG9yOiAjODAwMDA0Owp9CgpoMSBhOmxpbmssIGgxIGE6dmlzaXRlZCwgaDEgYTpob3ZlciB7CiAgY29sb3I6IGJsYWNrOwp9Cgp1bCB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmctbGVmdDogMS4yZW07Cn0KCmEuZG93bmxvYWQgewogIGNvbG9yOiB3aGl0ZTsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYwMDE5OwogIHdpZHRoOiAxMDAlOwogIGRpc3BsYXk6IGJsb2NrOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LXNpemU6IDEuMjNlbTsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7CiAgYm9yZGVyLXJhZGl1czogNnB4OwogIHBhZGRpbmc6IC41ZW0gMDsKICBtYXJnaW4tYm90dG9tOiAxZW07Cn0KCmEuZG93bmxvYWQ6aG92ZXIgewogIGJhY2tncm91bmQtY29sb3I6ICNiYjAwMTA7Cn0KCi5yZWwgewogIG1hcmdpbi1ib3R0b206IDA7Cn0KCi5yZWwtbm90ZSB7CiAgY29sb3I6ICM3Nzc7CiAgZm9udC1zaXplOiAuOWVtOwogIG1hcmdpbi10b3A6IC4xZW07Cn0KCi5sb2dvLWJyYWNlcyB7CiAgY29sb3I6ICNkZjAwMTk7CiAgcG9zaXRpb246IHJlbGF0aXZlOwogIHRvcDogLTRweDsKfQoKLmJsayB7CiAgZmxvYXQ6IGxlZnQ7Cn0KCi5sZWZ0IHsKICB3aWR0aDogMzdlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07CiAgcGFkZGluZy1ib3R0b206IDFlbTsKfQoKLmxlZnQxIHsKICB3aWR0aDogMTUuMjRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjQ1ZW07Cn0KCi5sZWZ0MiB7CiAgd2lkdGg6IDE1LjI0ZW07Cn0KCi5yaWdodCB7CiAgd2lkdGg6IDIwLjY4ZW07Cn0KCi5sZWZ0YmlnIHsKICB3aWR0aDogNDIuNDRlbTsKICBwYWRkaW5nLXJpZ2h0OiA2LjUzZW07Cn0KCi5yaWdodHNtYWxsIHsKICB3aWR0aDogMTUuMjRlbTsKfQoKLmNsZWFyOmFmdGVyIHsKICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgZGlzcGxheTogYmxvY2s7CiAgZm9udC1zaXplOiAwOwogIGNvbnRlbnQ6ICIgIjsKICBjbGVhcjogYm90aDsKICBoZWlnaHQ6IDA7Cn0KLmNsZWFyIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB9Ci8qIHN0YXJ0IGNvbW1lbnRlZCBiYWNrc2xhc2ggaGFjayBcKi8KKiBodG1sIC5jbGVhciB7IGhlaWdodDogMSU7IH0KLmNsZWFyIHsgZGlzcGxheTogYmxvY2s7IH0KLyogY2xvc2UgY29tbWVudGVkIGJhY2tzbGFzaCBoYWNrICovCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/internals.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEludGVybmFsczwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgICA8c3R5bGU+ZGwgZGwge21hcmdpbjogMDt9IC51cGRhdGUge2NvbG9yOiAjZDQwICFpbXBvcnRhbnR9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIChSZS0pIEltcGxlbWVudGluZyBBIFN5bnRheC0KICAgSGlnaGxpZ2h0aW5nIEVkaXRvciBpbiBKYXZhU2NyaXB0ICovCjwvcHJlPgoKPGRpdiBjbGFzcz0iY2xlYXIiPjxkaXYgY2xhc3M9ImxlZnRiaWcgYmxrIj4KCjxwIHN0eWxlPSJmb250LXNpemU6IDg1JSIgaWQ9ImludHJvIj4KICA8c3Ryb25nPlRvcGljOjwvc3Ryb25nPiBKYXZhU2NyaXB0LCBjb2RlIGVkaXRvciBpbXBsZW1lbnRhdGlvbjxicj4KICA8c3Ryb25nPkF1dGhvcjo8L3N0cm9uZz4gTWFyaWpuIEhhdmVyYmVrZTxicj4KICA8c3Ryb25nPkRhdGU6PC9zdHJvbmc+IE1hcmNoIDJuZCAyMDExICh1cGRhdGVkIE5vdmVtYmVyIDEzdGggMjAxMSkKPC9wPgoKPHA+VGhpcyBpcyBhIGZvbGxvd3VwIHRvCm15IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5CcnV0YWwgT2R5c3NleSB0byB0aGUKRGFyayBTaWRlIG9mIHRoZSBET00gVHJlZTwvYT4gc3RvcnkuIFRoYXQgb25lIGRlc2NyaWJlcyB0aGUKbWluZC1iZW5kaW5nIHByb2Nlc3Mgb2YgaW1wbGVtZW50aW5nICh3aGF0IHdvdWxkIGJlY29tZSkgQ29kZU1pcnJvciAxLgpUaGlzIG9uZSBkZXNjcmliZXMgdGhlIGludGVybmFscyBvZiBDb2RlTWlycm9yIDIsIGEgY29tcGxldGUgcmV3cml0ZQphbmQgcmV0aGluayBvZiB0aGUgb2xkIGNvZGUgYmFzZS4gSSB3YW50ZWQgdG8gZ2l2ZSB0aGlzIHBpZWNlIGFub3RoZXIKSHVudGVyIFRob21wc29uIGNvcHljYXQgc3VidGl0bGUsIGJ1dCBzb21laG93IHRoYXQgd291bGQgYmUgb3V0IG9mCnBsYWNl4oCUdGhlIHByb2Nlc3MgdGhpcyB0aW1lIGFyb3VuZCB3YXMgb25lIG9mIHN0cmFpZ2h0Zm9yd2FyZAplbmdpbmVlcmluZywgcmVxdWlyaW5nIG5vIHNlcmlvdXMgbWluZC1iZW5kaW5nIHdoYXRzb2V2ZXIuPC9wPgoKPHA+U28sIHdoYXQgaXMgd3Jvbmcgd2l0aCBDb2RlTWlycm9yIDE/IEknZCBlc3RpbWF0ZSwgYnkgbWFpbGluZyBsaXN0CmFjdGl2aXR5IGFuZCBnZW5lcmFsIHNlYXJjaC1lbmdpbmUgcHJlc2VuY2UsIHRoYXQgaXQgaGFzIGJlZW4KaW50ZWdyYXRlZCBpbnRvIGFib3V0IGEgdGhvdXNhbmQgc3lzdGVtcyBieSBub3cuIFRoZSBtb3N0IHByb21pbmVudApvbmUsIHNpbmNlIGEgZmV3IHdlZWtzLApiZWluZyA8YSBocmVmPSJodHRwOi8vZ29vZ2xlY29kZS5ibG9nc3BvdC5jb20vMjAxMS8wMS9tYWtlLXF1aWNrLWZpeGVzLXF1aWNrZXItb24tZ29vZ2xlLmh0bWwiPkdvb2dsZQpjb2RlJ3MgcHJvamVjdCBob3N0aW5nPC9hPi4gSXQgd29ya3MsIGFuZCBpdCdzIGJlaW5nIHVzZWQgd2lkZWx5LjwvYT4KCjxwPlN0aWxsLCBJIGRpZCBub3Qgc3RhcnQgcmVwbGFjaW5nIGl0IGJlY2F1c2UgSSB3YXMgYm9yZWQuIENvZGVNaXJyb3IKMSB3YXMgaGVhdmlseSByZWxpYW50IG9uIDxjb2RlPmRlc2lnbk1vZGU8L2NvZGU+Cm9yIDxjb2RlPmNvbnRlbnRFZGl0YWJsZTwvY29kZT4gKGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlcikuIE5laXRoZXIgb2YKdGhlc2UgYXJlIHdlbGwgc3BlY2lmaWVkIChIVE1MNSB0cmllcwp0byA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9lZGl0aW5nLmh0bWwjY29udGVudGVkaXRhYmxlIj5zcGVjaWZ5PC9hPgp0aGVpciBiYXNpY3MpLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZXkgdGVuZCB0byBiZSBvbmUgb2YgdGhlIG1vcmUKb2JzY3VyZSBhbmQgYnVnZ3kgYXJlYXMgb2YgYnJvd3NlciBmdW5jdGlvbmFsaXR54oCUQ29kZU1pcnJvciwgYnkgdXNpbmcKdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgbm9uLXR5cGljYWwgd2F5LCB3YXMgY29uc3RhbnRseSBydW5uaW5nIHVwCmFnYWluc3QgYnJvd3NlciBidWdzLiBXZWJLaXQgd291bGRuJ3Qgc2hvdyBhbiBlbXB0eSBsaW5lIGF0IHRoZSBlbmQgb2YKdGhlIGRvY3VtZW50LCBhbmQgaW4gc29tZSByZWxlYXNlcyB3b3VsZCBzdWRkZW5seSBnZXQgdW5iZWFyYWJseSBzbG93LgpGaXJlZm94IHdvdWxkIHNob3cgdGhlIGN1cnNvciBpbiB0aGUgd3JvbmcgcGxhY2UuIEludGVybmV0IEV4cGxvcmVyCndvdWxkIGluc2lzdCBvbiBsaW5raWZ5aW5nIGV2ZXJ5dGhpbmcgdGhhdCBsb29rZWQgbGlrZSBhIFVSTCBvciBlbWFpbAphZGRyZXNzLCBhIGJlaGF2aW91ciB0aGF0IGNhbid0IGJlIHR1cm5lZCBvZmYuIFNvbWUgYnVncyBJIG1hbmFnZWQgdG8Kd29yayBhcm91bmQgKHdoaWNoIHdhcyBvZnRlbiBhIGZydXN0cmF0aW5nLCBwYWluZnVsIHByb2Nlc3MpLCBvdGhlcnMsCnN1Y2ggYXMgdGhlIEZpcmVmb3ggY3Vyc29yIHBsYWNlbWVudCwgSSBnYXZlIHVwIG9uLCBhbmQgaGFkIHRvIHRlbGwKdXNlciBhZnRlciB1c2VyIHRoYXQgdGhleSB3ZXJlIGtub3duIHByb2JsZW1zLCBidXQgbm90IHNvbWV0aGluZyBJCmNvdWxkIGhlbHAuPC9wPgoKPHA+QWxzbywgdGhlcmUgaXMgdGhlIGZhY3QgdGhhdCA8Y29kZT5kZXNpZ25Nb2RlPC9jb2RlPiAod2hpY2ggc2VlbWVkCnRvIGJlIGxlc3MgYnVnZ3kgdGhhbiA8Y29kZT5jb250ZW50RWRpdGFibGU8L2NvZGU+IGluIFdlYmtpdCBhbmQKRmlyZWZveCwgYW5kIHdhcyB0aHVzIHVzZWQgYnkgQ29kZU1pcnJvciAxIGluIHRob3NlIGJyb3dzZXJzKSByZXF1aXJlcwphIGZyYW1lLiBGcmFtZXMgYXJlIGFub3RoZXIgdHJpY2t5IGFyZWEuIEl0IHRha2VzIHNvbWUgZWZmb3J0IHRvCnByZXZlbnQgZ2V0dGluZyB0cmlwcGVkIHVwIGJ5IGRvbWFpbiByZXN0cmljdGlvbnMsIHRoZXkgZG9uJ3QKaW5pdGlhbGl6ZSBzeW5jaHJvbm91c2x5LCBiZWhhdmUgc3RyYW5nZWx5IGluIHJlc3BvbnNlIHRvIHRoZSBiYWNrCmJ1dHRvbiwgYW5kLCBvbiBzZXZlcmFsIGJyb3dzZXJzLCBjYW4ndCBiZSBtb3ZlZCBhcm91bmQgdGhlIERPTQp3aXRob3V0IGhhdmluZyB0aGVtIHJlLWluaXRpYWxpemUuIFRoZXkgZGlkIHByb3ZpZGUgYSB2ZXJ5IG5pY2Ugd2F5IHRvCm5hbWVzcGFjZSB0aGUgbGlicmFyeSwgdGhvdWdo4oCUQ29kZU1pcnJvciAxIGNvdWxkIGZyZWVseSBwb2xsdXRlIHRoZQpuYW1lc3BhY2UgaW5zaWRlIHRoZSBmcmFtZS48L3A+Cgo8cD5GaW5hbGx5LCB3b3JraW5nIHdpdGggYW4gZWRpdGFibGUgZG9jdW1lbnQgbWVhbnMgd29ya2luZyB3aXRoCnNlbGVjdGlvbiBpbiBhcmJpdHJhcnkgRE9NIHN0cnVjdHVyZXMuIEludGVybmV0IEV4cGxvcmVyICg4IGFuZApiZWZvcmUpIGhhcyBhbiB1dHRlcmx5IGRpZmZlcmVudCAoYW5kIGF3a3dhcmQpIHNlbGVjdGlvbiBBUEkgdGhhbiBhbGwKb2YgdGhlIG90aGVyIGJyb3dzZXJzLCBhbmQgZXZlbiBhbW9uZyB0aGUgZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBvZgo8Y29kZT5kb2N1bWVudC5zZWxlY3Rpb248L2NvZGU+LCBkZXRhaWxzIGFib3V0IGhvdyBleGFjdGx5IGEgc2VsZWN0aW9uCmlzIHJlcHJlc2VudGVkIHZhcnkgcXVpdGUgYSBiaXQuIEFkZCB0byB0aGF0IHRoZSBmYWN0IHRoYXQgT3BlcmEncwpzZWxlY3Rpb24gc3VwcG9ydCB0ZW5kZWQgdG8gYmUgdmVyeSBidWdneSB1bnRpbCByZWNlbnRseSwgYW5kIHlvdSBjYW4KaW1hZ2luZSB3aHkgQ29kZU1pcnJvciAxIGNvbnRhaW5zIDcwMCBsaW5lcyBvZiBzZWxlY3Rpb24taGFuZGxpbmcKY29kZS48L3A+Cgo8cD5BbmQgdGhhdCBicmluZ3MgdXMgdG8gdGhlIG1haW4gaXNzdWUgd2l0aCB0aGUgQ29kZU1pcnJvciAxCmNvZGUgYmFzZTogVGhlIHByb3BvcnRpb24gb2YgYnJvd3Nlci1idWctd29ya2Fyb3VuZHMgdG8gcmVhbAphcHBsaWNhdGlvbiBjb2RlIHdhcyBnZXR0aW5nIGRhbmdlcm91c2x5IGhpZ2guIEJ5IGJ1aWxkaW5nIG9uIHRvcCBvZiBhCmZldyBkb2RneSBmZWF0dXJlcywgSSBwdXQgdGhlIHN5c3RlbSBpbiBhIHZ1bG5lcmFibGUgcG9zaXRpb27igJRhbnkKaW5jb21wYXRpYmlsaXR5IGFuZCBidWdnaW5lc3MgaW4gdGhlc2UgZmVhdHVyZXMsIEkgaGFkIHRvIHBhcGVyIG92ZXIKd2l0aCBteSBvd24gY29kZS4gTm90IG9ubHkgZGlkIEkgaGF2ZSB0byBkbyBzb21lIHNlcmlvdXMgc3R1bnQtd29yayB0bwpnZXQgaXQgdG8gd29yayBvbiBvbGRlciBicm93c2VycyAoYXMgZGV0YWlsZWQgaW4gdGhlCnByZXZpb3VzIDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sIj5zdG9yeTwvYT4pLCB0aGluZ3MKYWxzbyBrZXB0IGJyZWFraW5nIGluIG5ld2x5IHJlbGVhc2VkIHZlcnNpb25zLCByZXF1aXJpbmcgbWUgdG8gY29tZSB1cAp3aXRoIDxlbT5uZXc8L2VtPiBzY2FyeSBoYWNrcyBpbiBvcmRlciB0byBrZWVwIHVwLiBUaGlzIHdhcyBzdGFydGluZwp0byBsb3NlIGl0cyBhcHBlYWwuPC9wPgoKPGgyIGlkPSJhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvaDI+Cgo8cD5XaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHRyeSB0byBzaWRlc3RlcCBtb3N0IG9mIHRoZSBoYWlyeSBoYWNrcwp0aGF0IGNhbWUgdXAgaW4gdmVyc2lvbiAxLiBJIG93ZSBhIGxvdCB0byB0aGUKPGEgaHJlZj0iaHR0cDovL2FjZS5hamF4Lm9yZyI+QUNFPC9hPiBlZGl0b3IgZm9yIGluc3BpcmF0aW9uIG9uIGhvdyB0bwphcHByb2FjaCB0aGlzLjwvcD4KCjxwPkkgYWJzb2x1dGVseSBkaWQgbm90IHdhbnQgdG8gYmUgY29tcGxldGVseSByZWxpYW50IG9uIGtleSBldmVudHMgdG8KZ2VuZXJhdGUgbXkgaW5wdXQuIEV2ZXJ5IEphdmFTY3JpcHQgcHJvZ3JhbW1lciBrbm93cyB0aGF0IGtleSBldmVudAppbmZvcm1hdGlvbiBpcyBob3JyaWJsZSBhbmQgaW5jb21wbGV0ZS4gU29tZSBwZW9wbGUgKG1vc3QgYXdlc29tZWx5Ck1paGFpIEJhem9uIHdpdGggPGEgaHJlZj0iaHR0cDovL3ltYWNzLm9yZyI+WW1hY3M8L2E+KSBoYXZlIGJlZW4gYWJsZQp0byBidWlsZCBtb3JlIG9yIGxlc3MgZnVuY3Rpb25pbmcgZWRpdG9ycyBieSBkaXJlY3RseSByZWFkaW5nIGtleQpldmVudHMsIGJ1dCBpdCB0YWtlcyBhIGxvdCBvZiB3b3JrICh0aGUga2luZCBvZiBuZXZlci1lbmRpbmcsIGZyYWdpbGUKd29yayBJIGRlc2NyaWJlZCBlYXJsaWVyKSwgYW5kIHdpbGwgbmV2ZXIgYmUgYWJsZSB0byBwcm9wZXJseSBzdXBwb3J0CnRoaW5ncyBsaWtlIG11bHRpLWtleXN0b2tlIGludGVybmF0aW9uYWwgY2hhcmFjdGVyCmlucHV0LiA8YSBocmVmPSIja2V5bWFwIiBjbGFzcz0idXBkYXRlIj5bc2VlIGJlbG93IGZvciBjYXZlYXRdPC9hPjwvcD4KCjxwPlNvIHdoYXQgSSBkbyBpcyBmb2N1cyBhIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGxldCB0aGUgYnJvd3NlcgpiZWxpZXZlIHRoYXQgdGhlIHVzZXIgaXMgdHlwaW5nIGludG8gdGhhdC4gV2hhdCB3ZSBzaG93IHRvIHRoZSB1c2VyIGlzCmEgRE9NIHN0cnVjdHVyZSB3ZSBidWlsdCB0byByZXByZXNlbnQgaGlzIGRvY3VtZW50LiBJZiB0aGlzIGlzIHVwZGF0ZWQKcXVpY2tseSBlbm91Z2gsIGFuZCBzaG93cyBzb21lIGtpbmQgb2YgYmVsaWV2YWJsZSBjdXJzb3IsIGl0IGZlZWxzCmxpa2UgYSByZWFsIHRleHQtaW5wdXQgY29udHJvbC48L3A+Cgo8cD5Bbm90aGVyIGJpZyB3aW4gaXMgdGhhdCB0aGlzIERPTSByZXByZXNlbnRhdGlvbiBkb2VzIG5vdCBoYXZlIHRvCnNwYW4gdGhlIHdob2xlIGRvY3VtZW50LiBTb21lIENvZGVNaXJyb3IgMSB1c2VycyBpbnNpc3RlZCB0aGF0IHRoZXkKbmVlZGVkIHRvIHB1dCBhIDMwIHRob3VzYW5kIGxpbmUgWE1MIGRvY3VtZW50IGludG8gQ29kZU1pcnJvci4gUHV0dGluZwphbGwgdGhhdCBpbnRvIHRoZSBET00gdGFrZXMgYSB3aGlsZSwgZXNwZWNpYWxseSBzaW5jZSwgZm9yIHNvbWUKcmVhc29uLCBhbiBlZGl0YWJsZSBET00gdHJlZSBpcyBzbG93ZXIgdGhhbiBhIG5vcm1hbCBvbmUgb24gbW9zdApicm93c2Vycy4gSWYgd2UgaGF2ZSBmdWxsIGNvbnRyb2wgb3ZlciB3aGF0IHdlIHNob3csIHdlIG11c3Qgb25seQplbnN1cmUgdGhhdCB0aGUgdmlzaWJsZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBoYXMgYmVlbiBhZGRlZCwgYW5kIGNhbgpkbyB0aGUgcmVzdCBvbmx5IHdoZW4gbmVlZGVkLiAoRm9ydHVuYXRlbHksIHRoZSA8Y29kZT5vbnNjcm9sbDwvY29kZT4KZXZlbnQgd29ya3MgYWxtb3N0IHRoZSBzYW1lIG9uIGFsbCBicm93c2VycywgYW5kIGxlbmRzIGl0c2VsZiB3ZWxsIHRvCmRpc3BsYXlpbmcgdGhpbmdzIG9ubHkgYXMgdGhleSBhcmUgc2Nyb2xsZWQgaW50byB2aWV3Lik8L3A+Cgo8aDIgaWQ9ImlucHV0Ij5JbnB1dDwvaDI+Cgo8cD5BQ0UgdXNlcyBpdHMgaGlkZGVuIHRleHRhcmVhIG9ubHkgYXMgYSB0ZXh0IGlucHV0IHNoaW0sIGFuZCBkb2VzCmFsbCBjdXJzb3IgbW92ZW1lbnQgYW5kIHRoaW5ncyBsaWtlIHRleHQgZGVsZXRpb24gaXRzZWxmIGJ5IGRpcmVjdGx5CmhhbmRsaW5nIGtleSBldmVudHMuIENvZGVNaXJyb3IncyB3YXkgaXMgdG8gbGV0IHRoZSBicm93c2VyIGRvIGl0cwp0aGluZyBhcyBtdWNoIGFzIHBvc3NpYmxlLCBhbmQgbm90LCBmb3IgZXhhbXBsZSwgZGVmaW5lIGl0cyBvd24gc2V0IG9mCmtleSBiaW5kaW5ncy4gT25lIHdheSB0byBkbyB0aGlzIHdvdWxkIGhhdmUgYmVlbiB0byBoYXZlIHRoZSB3aG9sZQpkb2N1bWVudCBpbnNpZGUgdGhlIGhpZGRlbiB0ZXh0YXJlYSwgYW5kIGFmdGVyIGVhY2gga2V5IGV2ZW50IHVwZGF0ZQp0aGUgZGlzcGxheSBET00gdG8gcmVmbGVjdCB3aGF0J3MgaW4gdGhhdCB0ZXh0YXJlYS48L3A+Cgo8cD5UaGF0J2QgYmUgc2ltcGxlLCBidXQgaXQgaXMgbm90IHJlYWxpc3RpYy4gRm9yIGV2ZW4gbWVkaXVtLXNpemVkCmRvY3VtZW50IHRoZSBlZGl0b3Igd291bGQgYmUgY29uc3RhbnRseSBtdW5naW5nIGh1Z2Ugc3RyaW5ncywgYW5kIGdldAp0ZXJyaWJseSBzbG93LiBXaGF0IENvZGVNaXJyb3IgMiBkb2VzIGlzIHB1dCB0aGUgY3VycmVudCBzZWxlY3Rpb24sCmFsb25nIHdpdGggYW4gZXh0cmEgbGluZSBvbiB0aGUgdG9wIGFuZCBvbiB0aGUgYm90dG9tLCBpbnRvIHRoZQp0ZXh0YXJlYS48L3A+Cgo8cD5UaGlzIG1lYW5zIHRoYXQgdGhlIGFycm93IGtleXMgKGFuZCB0aGVpciBjdHJsLXZhcmlhdGlvbnMpLCBob21lLAplbmQsIGV0Y2V0ZXJhLCBkbyBub3QgaGF2ZSB0byBiZSBoYW5kbGVkIHNwZWNpYWxseS4gV2UganVzdCByZWFkIHRoZQpjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHRhcmVhLCBhbmQgdXBkYXRlIG91ciBjdXJzb3IgdG8gbWF0Y2ggaXQuCkFsc28sIGNvcHkgYW5kIHBhc3RlIHdvcmsgcHJldHR5IG11Y2ggZm9yIGZyZWUsIGFuZCBwZW9wbGUgZ2V0IHRoZWlyCm5hdGl2ZSBrZXkgYmluZGluZ3MsIHdpdGhvdXQgYW55IHNwZWNpYWwgd29yayBvbiBteSBwYXJ0LiBGb3IgZXhhbXBsZSwKSSBoYXZlIGVtYWNzIGtleSBiaW5kaW5ncyBjb25maWd1cmVkIGZvciBDaHJvbWUgYW5kIEZpcmVmb3guIFRoZXJlIGlzCm5vIHdheSBmb3IgYSBzY3JpcHQgdG8gZGV0ZWN0IHRoaXMuIDxhIGNsYXNzPSJ1cGRhdGUiCmhyZWY9IiNrZXltYXAiPltubyBsb25nZXIgdGhlIGNhc2VdPC9hPjwvcD4KCjxwPk9mIGNvdXJzZSwgc2luY2Ugb25seSBhIHNtYWxsIHBhcnQgb2YgdGhlIGRvY3VtZW50IHNpdHMgaW4gdGhlCnRleHRhcmVhLCBrZXlzIGxpa2UgcGFnZSB1cCBhbmQgY3RybC1lbmQgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgpDb2RlTWlycm9yIGlzIGNhdGNoaW5nIHRob3NlIGV2ZW50cyBhbmQgaGFuZGxpbmcgdGhlbSBpdHNlbGYuPC9wPgoKPGgyIGlkPSJzZWxlY3Rpb24iPlNlbGVjdGlvbjwvaDI+Cgo8cD5HZXR0aW5nIGFuZCBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gcmFuZ2Ugb2YgYSB0ZXh0YXJlYSBpbiBtb2Rlcm4KYnJvd3NlcnMgaXMgdHJpdmlhbOKAlHlvdSBqdXN0IHVzZSB0aGUgPGNvZGU+c2VsZWN0aW9uU3RhcnQ8L2NvZGU+CmFuZCA8Y29kZT5zZWxlY3Rpb25FbmQ8L2NvZGU+IHByb3BlcnRpZXMuIE9uIElFIHlvdSBoYXZlIHRvIGRvIHNvbWUKaW5zYW5lIHN0dWZmIHdpdGggdGVtcG9yYXJ5IHJhbmdlcyBhbmQgY29tcGVuc2F0aW5nIGZvciB0aGUgZmFjdCB0aGF0Cm1vdmluZyB0aGUgc2VsZWN0aW9uIGJ5IGEgJ2NoYXJhY3Rlcicgd2lsbCB0cmVhdCBcclxuIGFzIGEgc2luZ2xlCmNoYXJhY3RlciwgYnV0IGV2ZW4gdGhlcmUgaXQgaXMgcG9zc2libGUgdG8gYnVpbGQgZnVuY3Rpb25zIHRoYXQKcmVsaWFibHkgc2V0IGFuZCBnZXQgdGhlIHNlbGVjdGlvbiByYW5nZS48L3A+Cgo8cD5CdXQgY29uc2lkZXIgdGhpcyB0eXBpY2FsIGNhc2U6IFdoZW4gSSdtIHNvbWV3aGVyZSBpbiBteSBkb2N1bWVudCwKcHJlc3Mgc2hpZnQsIGFuZCBwcmVzcyB0aGUgdXAgYXJyb3csIHNvbWV0aGluZyBnZXRzIHNlbGVjdGVkLiBUaGVuLCBpZgpJLCBzdGlsbCBob2xkaW5nIHNoaWZ0LCBwcmVzcyB0aGUgdXAgYXJyb3cgYWdhaW4sIHRoZSB0b3Agb2YgbXkKc2VsZWN0aW9uIGlzIGFkanVzdGVkLiBUaGUgc2VsZWN0aW9uIHJlbWVtYmVycyB3aGVyZSBpdHMgPGVtPmhlYWQ8L2VtPgphbmQgaXRzIDxlbT5hbmNob3I8L2VtPiBhcmUsIGFuZCBtb3ZlcyB0aGUgaGVhZCB3aGVuIHdlIHNoaWZ0LW1vdmUuClRoaXMgaXMgYSBnZW5lcmFsbHkgYWNjZXB0ZWQgcHJvcGVydHkgb2Ygc2VsZWN0aW9ucywgYW5kIGRvbmUgcmlnaHQgYnkKZXZlcnkgZWRpdGluZyBjb21wb25lbnQgYnVpbHQgaW4gdGhlIHBhc3QgdHdlbnR5IHllYXJzLjwvcD4KCjxwPkJ1dCBub3Qgc29tZXRoaW5nIHRoYXQgdGhlIGJyb3dzZXIgc2VsZWN0aW9uIEFQSXMgZXhwb3NlLjwvcD4KCjxwPkdyZWF0LiBTbyB3aGVuIHNvbWVvbmUgY3JlYXRlcyBhbiAndXBzaWRlLWRvd24nIHNlbGVjdGlvbiwgdGhlIG5leHQKdGltZSBDb2RlTWlycm9yIGhhcyB0byB1cGRhdGUgdGhlIHRleHRhcmVhLCBpdCdsbCByZS1jcmVhdGUgdGhlCnNlbGVjdGlvbiBhcyBhbiAndXBzaWRlLXVwJyBzZWxlY3Rpb24sIHdpdGggdGhlIGFuY2hvciBhdCB0aGUgdG9wLCBhbmQKdGhlIG5leHQgY3Vyc29yIG1vdGlvbiB3aWxsIGJlaGF2ZSBpbiBhbiB1bmV4cGVjdGVkIHdheeKAlG91ciBzZWNvbmQKdXAtYXJyb3cgcHJlc3MgaW4gdGhlIGV4YW1wbGUgYWJvdmUgd2lsbCBub3QgZG8gYW55dGhpbmcsIHNpbmNlIGl0IGlzCmludGVycHJldGVkIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5ObyBwcm9ibGVtLiBXZSdsbCBqdXN0LCBlaG0sIGRldGVjdCB0aGF0IHRoZSBzZWxlY3Rpb24gaXMKdXBzaWRlLWRvd24gKHlvdSBjYW4gdGVsbCBieSB0aGUgd2F5IGl0IHdhcyBjcmVhdGVkKSwgYW5kIHRoZW4sIHdoZW4KYW4gdXBzaWRlLWRvd24gc2VsZWN0aW9uIGlzIHByZXNlbnQsIGFuZCBhIGN1cnNvci1tb3Zpbmcga2V5IGlzCnByZXNzZWQgaW4gY29tYmluYXRpb24gd2l0aCBzaGlmdCwgd2UgcXVpY2tseSBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uCmluIHRoZSB0ZXh0YXJlYSB0byBpdHMgc3RhcnQsIGFsbG93IHRoZSBrZXkgdG8gdGFrZSBlZmZlY3QsIGFuZCB0aGVuCmNvbWJpbmUgaXRzIG5ldyBoZWFkIHdpdGggaXRzIG9sZCBhbmNob3IgdG8gZ2V0IHRoZSA8ZW0+cmVhbDwvZW0+CnNlbGVjdGlvbi48L3A+Cgo8cD5JbiBzaG9ydCwgc2NhcnkgaGFja3MgY291bGQgbm90IGJlIGF2b2lkZWQgZW50aXJlbHkgaW4gQ29kZU1pcnJvcgoyLjwvcD4KCjxwPkFuZCwgdGhlIG9ic2VydmFudCByZWFkZXIgbWlnaHQgYXNrLCBob3cgZG8geW91IGV2ZW4ga25vdyB0aGF0IGEKa2V5IGNvbWJvIGlzIGEgY3Vyc29yLW1vdmluZyBjb21ibywgaWYgeW91IGNsYWltIHlvdSBzdXBwb3J0IGFueQpuYXRpdmUga2V5IGJpbmRpbmdzPyBXZWxsLCB3ZSBkb24ndCwgYnV0IHdlIGNhbiBsZWFybi4gVGhlIGVkaXRvcgprZWVwcyBhIHNldCBrbm93biBjdXJzb3ItbW92ZW1lbnQgY29tYm9zIChpbml0aWFsaXplZCB0byB0aGUKcHJlZGljdGFibGUgZGVmYXVsdHMpLCBhbmQgdXBkYXRlcyB0aGlzIHNldCB3aGVuIGl0IG9ic2VydmVzIHRoYXQKcHJlc3NpbmcgYSBjZXJ0YWluIGtleSBoYWQgKG9ubHkpIHRoZSBlZmZlY3Qgb2YgbW92aW5nIHRoZSBjdXJzb3IuClRoaXMsIG9mIGNvdXJzZSwgZG9lc24ndCB3b3JrIGlmIHRoZSBmaXJzdCB0aW1lIHRoZSBrZXkgaXMgdXNlZCB3YXMKZm9yIGV4dGVuZGluZyBhbiBpbnZlcnRlZCBzZWxlY3Rpb24sIGJ1dCBpdCB3b3JrcyBtb3N0IG9mIHRoZQp0aW1lLjwvcD4KCjxoMiBpZD0idXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvaDI+Cgo8cD5PbmUgdGhpbmcgdGhhdCBhbHdheXMgY29tZXMgdXAgd2hlbiB5b3UgaGF2ZSBhIGNvbXBsaWNhdGVkIGludGVybmFsCnN0YXRlIHRoYXQncyByZWZsZWN0ZWQgaW4gc29tZSB1c2VyLXZpc2libGUgZXh0ZXJuYWwgcmVwcmVzZW50YXRpb24KKGluIHRoaXMgY2FzZSwgdGhlIGRpc3BsYXllZCBjb2RlIGFuZCB0aGUgdGV4dGFyZWEncyBjb250ZW50KSBpcwprZWVwaW5nIHRoZSB0d28gaW4gc3luYy4gVGhlIG5haXZlIHdheSBpcyB0byBqdXN0IHVwZGF0ZSB0aGUgZGlzcGxheQpldmVyeSB0aW1lIHlvdSBjaGFuZ2UgeW91ciBzdGF0ZSwgYnV0IHRoaXMgaXMgbm90IG9ubHkgZXJyb3IgcHJvbmUKKHlvdSdsbCBmb3JnZXQpLCBpdCBhbHNvIGVhc2lseSBsZWFkcyB0byBkdXBsaWNhdGUgd29yayBvbiBiaWcsCmNvbXBvc2l0ZSBvcGVyYXRpb25zLiBUaGVuIHlvdSBzdGFydCBwYXNzaW5nIGFyb3VuZCBmbGFncyBpbmRpY2F0aW5nCndoZXRoZXIgdGhlIGRpc3BsYXkgc2hvdWxkIGJlIHVwZGF0ZWQgaW4gYW4gYXR0ZW1wdCB0byBiZSBlZmZpY2llbnQKYWdhaW4gYW5kLCB3ZWxsLCBhdCB0aGF0IHBvaW50IHlvdSBtaWdodCBhcyB3ZWxsIGdpdmUgdXAgY29tcGxldGVseS48L3A+Cgo8cD5JIGRpZCBnbyBkb3duIHRoYXQgcm9hZCwgYnV0IHRoZW4gc3dpdGNoZWQgdG8gYSBtdWNoIHNpbXBsZXIgbW9kZWw6CnNpbXBseSBrZWVwIHRyYWNrIG9mIGFsbCB0aGUgdGhpbmdzIHRoYXQgaGF2ZSBiZWVuIGNoYW5nZWQgZHVyaW5nIGFuCmFjdGlvbiwgYW5kIHRoZW4sIG9ubHkgYXQgdGhlIGVuZCwgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gdXBkYXRlIHRoZQp1c2VyLXZpc2libGUgZGlzcGxheS48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgYSBjb25jZXB0IG9mIDxlbT5vcGVyYXRpb25zPC9lbT4sIHdoaWNoIHN0YXJ0IGJ5CmNhbGxpbmcgYSBzcGVjaWZpYyBzZXQtdXAgZnVuY3Rpb24gdGhhdCBjbGVhcnMgdGhlIHN0YXRlIGFuZCBlbmQgYnkKY2FsbGluZyBhbm90aGVyIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhpcyBzdGF0ZSBhbmQgZG9lcyB0aGUgcmVxdWlyZWQKdXBkYXRpbmcuIE1vc3QgZXZlbnQgaGFuZGxlcnMsIGFuZCBhbGwgdGhlIHVzZXItdmlzaWJsZSBtZXRob2RzIHRoYXQKY2hhbmdlIHN0YXRlIGFyZSB3cmFwcGVkIGxpa2UgdGhpcy4gVGhlcmUncyBhIG1ldGhvZApjYWxsZWQgPGNvZGU+b3BlcmF0aW9uPC9jb2RlPiB0aGF0IGFjY2VwdHMgYSBmdW5jdGlvbiwgYW5kIHJldHVybnMKYW5vdGhlciBmdW5jdGlvbiB0aGF0IHdyYXBzIHRoZSBnaXZlbiBmdW5jdGlvbiBhcyBhbiBvcGVyYXRpb24uPC9wPgoKPHA+SXQncyB0cml2aWFsIHRvIGV4dGVuZCB0aGlzIChhcyBDb2RlTWlycm9yIGRvZXMpIHRvIGRldGVjdCBuZXN0aW5nLAphbmQsIHdoZW4gYW4gb3BlcmF0aW9uIGlzIHN0YXJ0ZWQgaW5zaWRlIGFuIG9wZXJhdGlvbiwgc2ltcGx5CmluY3JlbWVudCB0aGUgbmVzdGluZyBjb3VudCwgYW5kIG9ubHkgZG8gdGhlIHVwZGF0aW5nIHdoZW4gdGhpcyBjb3VudApyZWFjaGVzIHplcm8gYWdhaW4uPC9wPgoKPHA+SWYgd2UgaGF2ZSBhIHNldCBvZiBjaGFuZ2VkIHJhbmdlcyBhbmQga25vdyB0aGUgY3VycmVudGx5IHNob3duCnJhbmdlLCB3ZSBjYW4gKHdpdGggc29tZSBhd2t3YXJkIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBmYWN0IHRoYXQKY2hhbmdlcyBjYW4gYWRkIGFuZCByZW1vdmUgbGluZXMsIHNvIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGNoYW5naW5nCmNvb3JkaW5hdGUgc3lzdGVtKSBjb25zdHJ1Y3QgYSBtYXAgb2YgdGhlIHJhbmdlcyB0aGF0IHdlcmUgbGVmdAppbnRhY3QuIFdlIGNhbiB0aGVuIGNvbXBhcmUgdGhpcyBtYXAgd2l0aCB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQKdGhhdCdzIGN1cnJlbnRseSB2aXNpYmxlIChiYXNlZCBvbiBzY3JvbGwgb2Zmc2V0IGFuZCBlZGl0b3IgaGVpZ2h0KSB0bwpkZXRlcm1pbmUgd2hldGhlciBzb21ldGhpbmcgbmVlZHMgdG8gYmUgdXBkYXRlZC48L3A+Cgo8cD5Db2RlTWlycm9yIHVzZXMgdHdvIHVwZGF0ZSBhbGdvcml0aG1z4oCUYSBmdWxsIHJlZnJlc2gsIHdoZXJlIGl0IGp1c3QKZGlzY2FyZHMgdGhlIHdob2xlIHBhcnQgb2YgdGhlIERPTSB0aGF0IGNvbnRhaW5zIHRoZSBlZGl0ZWQgdGV4dCBhbmQKcmVidWlsZHMgaXQsIGFuZCBhIHBhdGNoIGFsZ29yaXRobSwgd2hlcmUgaXQgdXNlcyB0aGUgaW5mb3JtYXRpb24KYWJvdXQgY2hhbmdlZCBhbmQgaW50YWN0IHJhbmdlcyB0byB1cGRhdGUgb25seSB0aGUgb3V0LW9mLWRhdGUgcGFydHMKb2YgdGhlIERPTS4gV2hlbiBtb3JlIHRoYW4gMzAgcGVyY2VudCAod2hpY2ggaXMgdGhlIGN1cnJlbnQgaGV1cmlzdGljLAptaWdodCBjaGFuZ2UpIG9mIHRoZSBsaW5lcyBuZWVkIHRvIGJlIHVwZGF0ZWQsIHRoZSBmdWxsIHJlZnJlc2ggaXMKY2hvc2VuIChzaW5jZSBpdCdzIGZhc3RlciB0byBkbyB0aGFuIHBhaW5zdGFraW5nbHkgZmluZGluZyBhbmQKdXBkYXRpbmcgYWxsIHRoZSBjaGFuZ2VkIGxpbmVzKSwgaW4gdGhlIG90aGVyIGNhc2UgaXQgZG9lcyB0aGUKcGF0Y2hpbmcgKHNvIHRoYXQsIGlmIHlvdSBzY3JvbGwgYSBsaW5lIG9yIHNlbGVjdCBhbm90aGVyIGNoYXJhY3RlciwKdGhlIHdob2xlIHNjcmVlbiBkb2Vzbid0IGhhdmUgdG8gYmUKcmUtcmVuZGVyZWQpLiA8c3BhbiBjbGFzcz0idXBkYXRlIj5bdGhlIGZ1bGwtcmVmcmVzaAphbGdvcml0aG0gd2FzIGRyb3BwZWQsIGl0IHdhc24ndCByZWFsbHkgZmFzdGVyIHRoYW4gdGhlIHBhdGNoaW5nCm9uZV08L3NwYW4+PC9wPgoKPHA+QWxsIHVwZGF0aW5nIHVzZXMgPGNvZGU+aW5uZXJIVE1MPC9jb2RlPiByYXRoZXIgdGhhbiBkaXJlY3QgRE9NCm1hbmlwdWxhdGlvbiwgc2luY2UgdGhhdCBzdGlsbCBzZWVtcyB0byBiZSBieSBmYXIgdGhlIGZhc3Rlc3Qgd2F5IHRvCmJ1aWxkIGRvY3VtZW50cy4gVGhlcmUncyBhIHBlci1saW5lIGZ1bmN0aW9uIHRoYXQgY29tYmluZXMgdGhlCmhpZ2hsaWdodGluZywgPGEgaHJlZj0ibWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtpbmc8L2E+LCBhbmQKc2VsZWN0aW9uIGluZm8gZm9yIHRoYXQgbGluZSBpbnRvIGEgc25pcHBldCBvZiBIVE1MLiBUaGUgcGF0Y2ggdXBkYXRlcgp1c2VzIHRoaXMgdG8gcmVzZXQgaW5kaXZpZHVhbCBsaW5lcywgdGhlIHJlZnJlc2ggdXBkYXRlciBidWlsZHMgYW4KSFRNTCBjaHVuayBmb3IgdGhlIHdob2xlIHZpc2libGUgZG9jdW1lbnQgYXQgb25jZSwgYW5kIHRoZW4gdXNlcyBhCnNpbmdsZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IHVwZGF0ZSB0byBkbyB0aGUgcmVmcmVzaC48L3A+Cgo8aDIgaWQ9InBhcnNlIj5QYXJzZXJzIGNhbiBiZSBTaW1wbGU8L2gyPgoKPHA+V2hlbiBJIHdyb3RlIENvZGVNaXJyb3IgMSwgSQp0aG91Z2h0IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9zdG9yeS5odG1sI3BhcnNlciI+aW50ZXJydXB0YWJsZQpwYXJzZXJzPC9hPiB3ZXJlIGEgaHVnZWx5IHNjYXJ5IGFuZCBjb21wbGljYXRlZCB0aGluZywgYW5kIEkgdXNlZCBhCmJ1bmNoIG9mIGhlYXZ5d2VpZ2h0IGFic3RyYWN0aW9ucyB0byBrZWVwIHRoaXMgc3VwcG9zZWQgY29tcGxleGl0eQp1bmRlciBjb250cm9sOiBwYXJzZXJzCndlcmUgPGEgaHJlZj0iaHR0cDovL2JvYi5weXRob25tYWMub3JnL2FyY2hpdmVzLzIwMDUvMDcvMDYvaXRlcmF0aW9uLWluLWphdmFzY3JpcHQvIj5pdGVyYXRvcnM8L2E+CnRoYXQgY29uc3VtZWQgaW5wdXQgZnJvbSBhbm90aGVyIGl0ZXJhdG9yLCBhbmQgdXNlZCBmdW5ueQpjbG9zdXJlLXJlc2V0dGluZyB0cmlja3MgdG8gY29weSBhbmQgcmVzdW1lIHRoZW1zZWx2ZXMuPC9wPgoKPHA+VGhpcyBtYWRlIGZvciBhIHJhdGhlciBuaWNlIHN5c3RlbSwgaW4gdGhhdCBwYXJzZXJzIGZvcm1lZCBzdHJpY3RseQpzZXBhcmF0ZSBtb2R1bGVzLCBhbmQgY291bGQgYmUgY29tcG9zZWQgaW4gcHJlZGljdGFibGUgd2F5cy4KVW5mb3J0dW5hdGVseSwgaXQgd2FzIHF1aXRlIHNsb3cgKHN0YWNraW5nIHRocmVlIG9yIGZvdXIgaXRlcmF0b3JzIG9uCnRvcCBvZiBlYWNoIG90aGVyKSwgYW5kIGV4dHJlbWVseSBpbnRpbWlkYXRpbmcgdG8gcGVvcGxlIG5vdCB1c2VkIHRvIGEKZnVuY3Rpb25hbCBwcm9ncmFtbWluZyBzdHlsZS48L3A+Cgo8cD5XaXRoIGEgZmV3IHNtYWxsIGNoYW5nZXMsIGhvd2V2ZXIsIHdlIGNhbiBrZWVwIGFsbCB0aG9zZQphZHZhbnRhZ2VzLCBidXQgc2ltcGxpZnkgdGhlIEFQSSBhbmQgbWFrZSB0aGUgd2hvbGUgdGhpbmcgbGVzcwppbmRpcmVjdCBhbmQgaW5lZmZpY2llbnQuIENvZGVNaXJyb3IKMidzIDxhIGhyZWY9Im1hbnVhbC5odG1sI21vZGVhcGkiPm1vZGUgQVBJPC9hPiB1c2VzIGV4cGxpY2l0IHN0YXRlCm9iamVjdHMsIGFuZCBtYWtlcyB0aGUgcGFyc2VyL3Rva2VuaXplciBhIGZ1bmN0aW9uIHRoYXQgc2ltcGx5IHRha2VzIGEKc3RhdGUgYW5kIGEgY2hhcmFjdGVyIHN0cmVhbSBhYnN0cmFjdGlvbiwgYWR2YW5jZXMgdGhlIHN0cmVhbSBvbmUKdG9rZW4sIGFuZCByZXR1cm5zIHRoZSB3YXkgdGhlIHRva2VuIHNob3VsZCBiZSBzdHlsZWQuIFRoaXMgc3RhdGUgbWF5CmJlIGNvcGllZCwgb3B0aW9uYWxseSBpbiBhIG1vZGUtZGVmaW5lZCB3YXksIGluIG9yZGVyIHRvIGJlIGFibGUgdG8KY29udGludWUgYSBwYXJzZSBhdCBhIGdpdmVuIHBvaW50LiBFdmVuIHNvbWVvbmUgd2hvJ3MgbmV2ZXIgdG91Y2hlZCBhCmxhbWJkYSBpbiBoaXMgbGlmZSBjYW4gdW5kZXJzdGFuZCB0aGlzIGFwcHJvYWNoLiBBZGRpdGlvbmFsbHksIGZhcgpmZXdlciBvYmplY3RzIGFyZSBhbGxvY2F0ZWQgaW4gdGhlIGNvdXJzZSBvZiBwYXJzaW5nIG5vdy48L3A+Cgo8cD5UaGUgYmlnZ2VzdCBzcGVlZHVwIGNvbWVzIGZyb20gdGhlIGZhY3QgdGhhdCB0aGUgcGFyc2luZyBubyBsb25nZXIKaGFzIHRvIHRvdWNoIHRoZSBET00gdGhvdWdoLiBJbiBDb2RlTWlycm9yIDEsIG9uIGFuIG9sZGVyIGJyb3dzZXIsIHlvdQpjb3VsZCA8ZW0+c2VlPC9lbT4gdGhlIHBhcnNlciB3b3JrIGl0cyB3YXkgdGhyb3VnaCB0aGUgZG9jdW1lbnQsCm1hbmFnaW5nIHNvbWUgdHdlbnR5IGxpbmVzIGluIGVhY2ggNTAtbWlsbGlzZWNvbmQgdGltZSBzbGljZSBpdCBnb3QuIEl0CndhcyByZWFkaW5nIGl0cyBpbnB1dCBmcm9tIHRoZSBET00sIGFuZCB1cGRhdGluZyB0aGUgRE9NIGFzIGl0IHdlbnQKYWxvbmcsIHdoaWNoIGFueSBleHBlcmllbmNlZCBKYXZhU2NyaXB0IHByb2dyYW1tZXIgd2lsbCBpbW1lZGlhdGVseQpzcG90IGFzIGEgcmVjaXBlIGZvciBzbG93bmVzcy4gSW4gQ29kZU1pcnJvciAyLCB0aGUgcGFyc2VyIHVzdWFsbHkKZmluaXNoZXMgdGhlIHdob2xlIGRvY3VtZW50IGluIGEgc2luZ2xlIDEwMC1taWxsaXNlY29uZCB0aW1lIHNsaWNl4oCUaXQKbWFuYWdlcyBzb21lIDE1MDAgbGluZXMgZHVyaW5nIHRoYXQgdGltZSBvbiBDaHJvbWUuIEFsbCBpdCBoYXMgdG8gZG8KaXMgbXVuZ2Ugc3RyaW5ncywgc28gdGhlcmUgaXMgbm8gcmVhbCByZWFzb24gZm9yIGl0IHRvIGJlIHNsb3cKYW55bW9yZS48L3A+Cgo8aDIgaWQ9InN1bW1hcnkiPldoYXQgR2l2ZXM/PC9oMj4KCjxwPkdpdmVuIGFsbCB0aGlzLCB3aGF0IGNhbiB5b3UgZXhwZWN0IGZyb20gQ29kZU1pcnJvciAyPzwvcD4KCjx1bD4KCjxsaT48c3Ryb25nPlNtYWxsLjwvc3Ryb25nPiB0aGUgYmFzZSBsaWJyYXJ5IGlzCnNvbWUgPHNwYW4gY2xhc3M9InVwZGF0ZSI+NDVrPC9zcGFuPiB3aGVuIG1pbmlmaWVkCm5vdywgPHNwYW4gY2xhc3M9InVwZGF0ZSI+MTdrPC9zcGFuPiB3aGVuIGd6aXBwZWQuIEl0J3Mgc21hbGxlciB0aGFuCml0cyBvd24gbG9nby48L2xpPgoKPGxpPjxzdHJvbmc+TGlnaHR3ZWlnaHQuPC9zdHJvbmc+IENvZGVNaXJyb3IgMiBpbml0aWFsaXplcyB2ZXJ5CnF1aWNrbHksIGFuZCBkb2VzIGFsbW9zdCBubyB3b3JrIHdoZW4gaXQgaXMgbm90IGZvY3VzZWQuIFRoaXMgbWVhbnMKeW91IGNhbiB0cmVhdCBpdCBhbG1vc3QgbGlrZSBhIHRleHRhcmVhLCBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyBvbiBhCnBhZ2Ugd2l0aG91dCB0cm91YmxlLjwvbGk+Cgo8bGk+PHN0cm9uZz5IdWdlIGRvY3VtZW50IHN1cHBvcnQuPC9zdHJvbmc+IFNpbmNlIGhpZ2hsaWdodGluZyBpcwpyZWFsbHkgZmFzdCwgYW5kIG5vIERPTSBzdHJ1Y3R1cmUgaXMgYmVpbmcgYnVpbHQgZm9yIG5vbi12aXNpYmxlCmNvbnRlbnQsIHlvdSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgdXAgeW91ciBicm93c2VyIHdoZW4gYQp1c2VyIGVudGVycyBhIG1lZ2FieXRlLXNpemVkIGRvY3VtZW50LjwvbGk+Cgo8bGk+PHN0cm9uZz5FeHRlbmRlZCBBUEkuPC9zdHJvbmc+IFNvbWUgdGhpbmdzIGtlcHQgY29taW5nIHVwIGluIHRoZQptYWlsaW5nIGxpc3QsIHN1Y2ggYXMgbWFya2luZyBwaWVjZXMgb2YgdGV4dCBvciBsaW5lcywgd2hpY2ggd2VyZQpleHRyZW1lbHkgaGFyZCB0byBkbyB3aXRoIENvZGVNaXJyb3IgMS4gVGhlIG5ldyB2ZXJzaW9uIGhhcyBwcm9wZXIKc3VwcG9ydCBmb3IgdGhlc2UgYnVpbHQgaW4uPC9saT4KCjxsaT48c3Ryb25nPlRhYiBzdXBwb3J0Ljwvc3Ryb25nPiBUYWJzIGluc2lkZSBlZGl0YWJsZSBkb2N1bWVudHMgd2VyZSwKZm9yIHNvbWUgcmVhc29uLCBhIG5vLWdvLiBBdCBsZWFzdCBzaXggZGlmZmVyZW50IHBlb3BsZSBhbm5vdW5jZWQgdGhleQp3ZXJlIGdvaW5nIHRvIGFkZCB0YWIgc3VwcG9ydCB0byBDb2RlTWlycm9yIDEsIG5vbmUgc3Vydml2ZWQgKEkgbWVhbiwKbm9uZSBkZWxpdmVyZWQgYSB3b3JraW5nIHZlcnNpb24pLiBDb2RlTWlycm9yIDIgbm8gbG9uZ2VyIHJlbW92ZXMgdGFicwpmcm9tIHlvdXIgZG9jdW1lbnQuPC9saT4KCjxsaT48c3Ryb25nPlNhbmUgc3R5bGluZy48L3N0cm9uZz4gPGNvZGU+aWZyYW1lPC9jb2RlPiBub2RlcyBhcmVuJ3QKcmVhbGx5IGtub3duIGZvciByZXNwZWN0aW5nIGRvY3VtZW50IGZsb3cuIE5vdyB0aGF0IGFuIGVkaXRvciBpbnN0YW5jZQppcyBhIHBsYWluIDxjb2RlPmRpdjwvY29kZT4gZWxlbWVudCwgaXQgaXMgbXVjaCBlYXNpZXIgdG8gc2l6ZSBpdCB0bwpmaXQgdGhlIHN1cnJvdW5kaW5nIGVsZW1lbnRzLiBZb3UgZG9uJ3QgZXZlbiBoYXZlIHRvIG1ha2UgaXQgc2Nyb2xsIGlmCnlvdSBkbyBub3QgPGEgaHJlZj0iLi4vZGVtby9yZXNpemUuaHRtbCI+d2FudCB0bzwvYT4uPC9saT4KCjwvdWw+Cgo8cD5PbiB0aGUgZG93bnNpZGUsIGEgQ29kZU1pcnJvciAyIGluc3RhbmNlIGlzIDxlbT5ub3Q8L2VtPiBhIG5hdGl2ZQplZGl0YWJsZSBjb21wb25lbnQuIFRob3VnaCBpdCBkb2VzIGl0cyBiZXN0IHRvIGVtdWxhdGUgc3VjaCBhCmNvbXBvbmVudCBhcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGVyZSBpcyBmdW5jdGlvbmFsaXR5IHRoYXQgYnJvd3NlcnMKanVzdCBkbyBub3QgYWxsb3cgdXMgdG8gaG9vayBpbnRvLiBEb2luZyBzZWxlY3QtYWxsIGZyb20gdGhlIGNvbnRleHQKbWVudSwgZm9yIGV4YW1wbGUsIGlzIG5vdCBjdXJyZW50bHkgZGV0ZWN0ZWQgYnkgQ29kZU1pcnJvci48L3A+Cgo8cCBpZD0iY2hhbmdlcyIgc3R5bGU9Im1hcmdpbi10b3A6IDJlbTsiPjxzcGFuIHN0eWxlPSJmb250LXdlaWdodDoKYm9sZCI+W1VwZGF0ZXMgZnJvbSBOb3ZlbWJlciAxM3RoIDIwMTFdPC9zcGFuPiBSZWNlbnRseSwgSSd2ZSBtYWRlCnNvbWUgY2hhbmdlcyB0byB0aGUgY29kZWJhc2UgdGhhdCBjYXVzZSBzb21lIG9mIHRoZSB0ZXh0IGFib3ZlIHRvIG5vCmxvbmdlciBiZSBjdXJyZW50LiBJJ3ZlIGxlZnQgdGhlIHRleHQgaW50YWN0LCBidXQgYWRkZWQgbWFya2VycyBhdCB0aGUKcGFzc2FnZXMgdGhhdCBhcmUgbm93IGluYWNjdXJhdGUuIFRoZSBuZXcgc2l0dWF0aW9uIGlzIGRlc2NyaWJlZApiZWxvdy48L3A+Cgo8aDIgaWQ9ImJ0cmVlIj5Db250ZW50IFJlcHJlc2VudGF0aW9uPC9oMj4KCjxwPlRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBvZiBDb2RlTWlycm9yIDIgcmVwcmVzZW50ZWQgdGhlCmRvY3VtZW50IGFzIGEgZmxhdCBhcnJheSBvZiBsaW5lIG9iamVjdHMuIFRoaXMgd29ya2VkIHdlbGzigJRzcGxpY2luZwphcnJheXMgd2lsbCByZXF1aXJlIHRoZSBwYXJ0IG9mIHRoZSBhcnJheSBhZnRlciB0aGUgc3BsaWNlIHRvIGJlCm1vdmVkLCBidXQgdGhpcyBpcyBiYXNpY2FsbHkganVzdCBhIHNpbXBsZSA8Y29kZT5tZW1tb3ZlPC9jb2RlPiBvZiBhCmJ1bmNoIG9mIHBvaW50ZXJzLCBzbyBpdCBpcyBjaGVhcCBldmVuIGZvciBodWdlIGRvY3VtZW50cy48L3A+Cgo8cD5Ib3dldmVyLCBJIHJlY2VudGx5IGFkZGVkIGxpbmUgd3JhcHBpbmcgYW5kIGNvZGUgZm9sZGluZyAobGluZQpjb2xsYXBzaW5nLCBiYXNpY2FsbHkpLiBPbmNlIGxpbmVzIHN0YXJ0IHRha2luZyB1cCBhIG5vbi1jb25zdGFudAphbW91bnQgb2YgdmVydGljYWwgc3BhY2UsIGxvb2tpbmcgdXAgYSBsaW5lIGJ5IHZlcnRpY2FsIHBvc2l0aW9uCih3aGljaCBpcyBuZWVkZWQgd2hlbiBzb21lb25lIGNsaWNrcyB0aGUgZG9jdW1lbnQsIGFuZCB0byBkZXRlcm1pbmUKdGhlIHZpc2libGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgZHVyaW5nIHNjcm9sbGluZykgY2FuIG9ubHkgYmUgZG9uZQp3aXRoIGEgbGluZWFyIHNjYW4gdGhyb3VnaCB0aGUgd2hvbGUgYXJyYXksIHN1bW1pbmcgdXAgbGluZSBoZWlnaHRzIGFzCnlvdSBnby4gU2VlaW5nIGhvdyBJJ3ZlIGJlZW4gZ29pbmcgb3V0IG9mIG15IHdheSB0byBtYWtlIGJpZyBkb2N1bWVudHMKZmFzdCwgdGhpcyBpcyBub3QgYWNjZXB0YWJsZS48L3A+Cgo8cD5UaGUgbmV3IHJlcHJlc2VudGF0aW9uIGlzIGJhc2VkIG9uIGEgQi10cmVlLiBUaGUgbGVhdmVzIG9mIHRoZSB0cmVlCmNvbnRhaW4gYXJyYXlzIG9mIGxpbmUgb2JqZWN0cywgd2l0aCBhIGZpeGVkIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSwKYW5kIHRoZSBub24tbGVhZiBub2RlcyBzaW1wbHkgaG9sZCBhcnJheXMgb2YgY2hpbGQgbm9kZXMuIEVhY2ggbm9kZQpzdG9yZXMgYm90aCB0aGUgYW1vdW50IG9mIGxpbmVzIHRoYXQgbGl2ZSBiZWxvdyB0aGVtIGFuZCB0aGUgdmVydGljYWwKc3BhY2UgdGFrZW4gdXAgYnkgdGhlc2UgbGluZXMuIFRoaXMgYWxsb3dzIHRoZSB0cmVlIHRvIGJlIGluZGV4ZWQgYm90aApieSBsaW5lIG51bWJlciBhbmQgYnkgdmVydGljYWwgcG9zaXRpb24sIGFuZCBhbGwgYWNjZXNzIGhhcwpsb2dhcml0aG1pYyBjb21wbGV4aXR5IGluIHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzaXplLjwvcD4KCjxwPkkgZ2F2ZSBsaW5lIG9iamVjdHMgYW5kIHRyZWUgbm9kZXMgcGFyZW50IHBvaW50ZXJzLCB0byB0aGUgbm9kZQphYm92ZSB0aGVtLiBXaGVuIGEgbGluZSBoYXMgdG8gdXBkYXRlIGl0cyBoZWlnaHQsIGl0IGNhbiBzaW1wbHkgd2Fsawp0aGVzZSBwb2ludGVycyB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLCBhZGRpbmcgb3Igc3VidHJhY3RpbmcgdGhlCmRpZmZlcmVuY2UgaW4gaGVpZ2h0IGZyb20gZWFjaCBub2RlIGl0IGVuY291bnRlcnMuIFRoZSBwYXJlbnQgcG9pbnRlcnMKYWxzbyBtYWtlIGl0IGNoZWFwZXIgKGluIGNvbXBsZXhpdHkgdGVybXMsIHRoZSBkaWZmZXJlbmNlIGlzIHByb2JhYmx5CnRpbnkgaW4gbm9ybWFsLXNpemVkIGRvY3VtZW50cykgdG8gZmluZCB0aGUgY3VycmVudCBsaW5lIG51bWJlciB3aGVuCmdpdmVuIGEgbGluZSBvYmplY3QuIEluIHRoZSBvbGQgYXBwcm9hY2gsIHRoZSB3aG9sZSBkb2N1bWVudCBhcnJheSBoYWQKdG8gYmUgc2VhcmNoZWQuIE5vdywgd2UgY2FuIGp1c3Qgd2FsayB1cCB0aGUgdHJlZSBhbmQgY291bnQgdGhlIHNpemVzCm9mIHRoZSBub2RlcyBjb21pbmcgYmVmb3JlIHVzIGF0IGVhY2ggbGV2ZWwuPC9wPgoKPHA+SSBjaG9zZSBCLXRyZWVzLCBub3QgcmVndWxhciBiaW5hcnkgdHJlZXMsIG1vc3RseSBiZWNhdXNlIHRoZXkKYWxsb3cgZm9yIHZlcnkgZmFzdCBidWxrIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gV2hlbiB0aGVyZSBpcyBhIGJpZwpjaGFuZ2UgdG8gYSBkb2N1bWVudCwgaXQgdHlwaWNhbGx5IGludm9sdmVzIGFkZGluZywgZGVsZXRpbmcsIG9yCnJlcGxhY2luZyBhIGNodW5rIG9mIHN1YnNlcXVlbnQgbGluZXMuIEluIGEgcmVndWxhciBiYWxhbmNlZCB0cmVlLCBhbGwKdGhlc2UgaW5zZXJ0cyBvciBkZWxldGVzIHdvdWxkIGhhdmUgdG8gYmUgZG9uZSBzZXBhcmF0ZWx5LCB3aGljaCBjb3VsZApiZSByZWFsbHkgZXhwZW5zaXZlLiBJbiBhIEItdHJlZSwgdG8gaW5zZXJ0IGEgY2h1bmssIHlvdSBqdXN0IHdhbGsKZG93biB0aGUgdHJlZSBvbmNlIHRvIGZpbmQgd2hlcmUgaXQgc2hvdWxkIGdvLCBpbnNlcnQgdGhlbSBhbGwgaW4gb25lCnNob3QsIGFuZCB0aGVuIGJyZWFrIHVwIHRoZSBub2RlIGlmIG5lZWRlZC4gVGhpcyBicmVha2luZyB1cCBtaWdodAppbnZvbHZlIGJyZWFraW5nIHVwIG5vZGVzIGZ1cnRoZXIgdXAsIGJ1dCBvbmx5IHJlcXVpcmVzIGEgc2luZ2xlIHBhc3MKYmFjayB1cCB0aGUgdHJlZS4gRm9yIGRlbGV0aW9uLCBJJ20gc29tZXdoYXQgbGF4IGluIGtlZXBpbmcgdGhpbmdzCmJhbGFuY2Vk4oCUSSBqdXN0IGNvbGxhcHNlIG5vZGVzIGludG8gYSBsZWFmIHdoZW4gdGhlaXIgY2hpbGQgY291bnQgZ29lcwpiZWxvdyBhIGdpdmVuIG51bWJlci4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGFyZSBzb21lIHdlaXJkIGVkaXRpbmcKcGF0dGVybnMgdGhhdCBtYXkgcmVzdWx0IGluIGEgc2VyaW91c2x5IHVuYmFsYW5jZWQgdHJlZSwgYnV0IGV2ZW4gc3VjaAphbiB1bmJhbGFuY2VkIHRyZWUgd2lsbCBwZXJmb3JtIHdlbGwsIHVubGVzcyB5b3Ugc3BlbmQgYSBkYXkgbWFraW5nCnN0cmFuZ2VseSByZXBlYXRpbmcgZWRpdHMgdG8gYSByZWFsbHkgYmlnIGRvY3VtZW50LjwvcD4KCjxoMiBpZD0ia2V5bWFwIj5LZXltYXBzPC9oMj4KCjxwPjxhIGhyZWY9IiNhcHByb2FjaCI+QWJvdmU8L2E+LCBJIGNsYWltZWQgdGhhdCBkaXJlY3RseSBjYXRjaGluZyBrZXkKZXZlbnRzIGZvciB0aGluZ3MgbGlrZSBjdXJzb3IgbW92ZW1lbnQgaXMgaW1wcmFjdGljYWwgYmVjYXVzZSBpdApyZXF1aXJlcyBzb21lIGJyb3dzZXItc3BlY2lmaWMga2x1ZGdlcy4gSSB0aGVuIHByb2NlZWRlZCB0byBleHBsYWluCnNvbWUgYXdmdWwgPGEgaHJlZj0iI3NlbGVjdGlvbiI+aGFja3M8L2E+IHRoYXQgd2VyZSBuZWVkZWQgdG8gbWFrZSBpdApwb3NzaWJsZSBmb3IgdGhlIHNlbGVjdGlvbiBjaGFuZ2VzIHRvIGJlIGRldGVjdGVkIHRocm91Z2ggdGhlCnRleHRhcmVhLiBJbiBmYWN0LCB0aGUgc2Vjb25kIGhhY2sgaXMgYWJvdXQgYXMgYmFkIGFzIHRoZSBmaXJzdC48L3A+Cgo8cD5PbiB0b3Agb2YgdGhhdCwgaW4gdGhlIHByZXNlbmNlIG9mIHVzZXItY29uZmlndXJhYmxlIHRhYiBzaXplcyBhbmQKY29sbGFwc2VkIGFuZCB3cmFwcGVkIGxpbmVzLCBsaW5pbmcgdXAgY3Vyc29yIG1vdmVtZW50IGluIHRoZSB0ZXh0YXJlYQp3aXRoIHdoYXQncyB2aXNpYmxlIG9uIHRoZSBzY3JlZW4gYmVjb21lcyBhIG5pZ2h0bWFyZS4gVGh1cywgSSd2ZQpkZWNpZGVkIHRvIG1vdmUgdG8gYSBtb2RlbCB3aGVyZSB0aGUgdGV4dGFyZWEncyBzZWxlY3Rpb24gaXMgbm8gbG9uZ2VyCmRlcGVuZGVkIG9uLjwvcD4KCjxwPlNvIEkgbW92ZWQgdG8gYSBtb2RlbCB3aGVyZSBhbGwgY3Vyc29yIG1vdmVtZW50IGlzIGhhbmRsZWQgYnkgbXkKb3duIGNvZGUuIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBhIGdvYWwgY29sdW1uLCBwcm9wZXIgaW50ZXJhY3Rpb24gb2YKY3Vyc29yIG1vdmVtZW50IHdpdGggY29sbGFwc2VkIGxpbmVzLCBhbmQgbWFrZXMgaXQgcG9zc2libGUgZm9yCnZlcnRpY2FsIG1vdmVtZW50IHRvIG1vdmUgdGhyb3VnaCB3cmFwcGVkIGxpbmVzIHByb3Blcmx5LCBpbnN0ZWFkIG9mCmp1c3QgdHJlYXRpbmcgdGhlbSBsaWtlIG5vbi13cmFwcGVkIGxpbmVzLjwvcD4KCjxwPlRoZSBrZXkgZXZlbnQgaGFuZGxlcnMgbm93IHRyYW5zbGF0ZSB0aGUga2V5IGV2ZW50IGludG8gYSBzdHJpbmcsCnNvbWV0aGluZyBsaWtlIDxjb2RlPkN0cmwtSG9tZTwvY29kZT4gb3IgPGNvZGU+U2hpZnQtQ21kLVI8L2NvZGU+LCBhbmQKdXNlIHRoYXQgc3RyaW5nIHRvIGxvb2sgdXAgYW4gYWN0aW9uIHRvIHBlcmZvcm0uIFRvIG1ha2Uga2V5YmluZGluZwpjdXN0b21pemFibGUsIHRoaXMgbG9va3VwIGdvZXMgdGhyb3VnaAphIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPnRhYmxlPC9hPiwgdXNpbmcgYSBzY2hlbWUgdGhhdAphbGxvd3Mgc3VjaCB0YWJsZXMgdG8gYmUgY2hhaW5lZCB0b2dldGhlciAoZm9yIGV4YW1wbGUsIHRoZSBkZWZhdWx0Ck1hYyBiaW5kaW5ncyBmYWxsIHRocm91Z2ggdG8gYSB0YWJsZSBuYW1lZCAnZW1hY3N5Jywgd2hpY2ggZGVmaW5lcwpiYXNpYyBFbWFjcy1zdHlsZSBiaW5kaW5ncyBsaWtlIDxjb2RlPkN0cmwtRjwvY29kZT4sIGFuZCB3aGljaCBpcyBhbHNvCnVzZWQgYnkgdGhlIGN1c3RvbSBFbWFjcyBiaW5kaW5ncykuPC9wPgoKPHA+QSBuZXcKb3B0aW9uIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9leHRyYUtleXMiPjxjb2RlPmV4dHJhS2V5czwvY29kZT48L2E+CmFsbG93cyBhZC1ob2Mga2V5YmluZGluZ3MgdG8gYmUgZGVmaW5lZCBpbiBhIG11Y2ggbmljZXIgd2F5IHRoYW4gd2hhdAp3YXMgcG9zc2libGUgd2l0aCB0aGUKb2xkIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9vbktleUV2ZW50Ij48Y29kZT5vbktleUV2ZW50PC9jb2RlPjwvYT4KY2FsbGJhY2suIFlvdSBzaW1wbHkgcHJvdmlkZSBhbiBvYmplY3QgbWFwcGluZyBrZXkgaWRlbnRpZmllcnMgdG8KZnVuY3Rpb25zLCBpbnN0ZWFkIG9mIHBhaW5zdGFraW5nbHkgbG9va2luZyBhdCByYXcga2V5IGV2ZW50cy48L3A+Cgo8cD5CdWlsdC1pbiBjb21tYW5kcyBtYXAgdG8gc3RyaW5ncywgcmF0aGVyIHRoYW4gZnVuY3Rpb25zLCBmb3IKZXhhbXBsZSA8Y29kZT4iZ29MaW5lVXAiPC9jb2RlPiBpcyB0aGUgZGVmYXVsdCBhY3Rpb24gYm91bmQgdG8gdGhlIHVwCmFycm93IGtleS4gVGhpcyBhbGxvd3MgbmV3IGtleW1hcHMgdG8gcmVmZXIgdG8gdGhlbSB3aXRob3V0CmR1cGxpY2F0aW5nIGFueSBjb2RlLiBOZXcgY29tbWFuZHMgY2FuIGJlIGRlZmluZWQgYnkgYXNzaWduaW5nIHRvCnRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiBvYmplY3QsIHdoaWNoIG1hcHMgc3VjaCBjb21tYW5kcwp0byBmdW5jdGlvbnMuPC9wPgoKPHA+VGhlIGhpZGRlbiB0ZXh0YXJlYSBub3cgb25seSBob2xkcyB0aGUgY3VycmVudCBzZWxlY3Rpb24sIHdpdGggbm8KZXh0cmEgY2hhcmFjdGVycyBhcm91bmQgaXQuIFRoaXMgaGFzIGEgbmljZSBhZHZhbnRhZ2U6IHBvbGxpbmcgZm9yCmlucHV0IGJlY29tZXMgbXVjaCwgbXVjaCBmYXN0ZXIuIElmIHRoZXJlJ3MgYSBiaWcgc2VsZWN0aW9uLCB0aGlzIHRleHQKZG9lcyBub3QgaGF2ZSB0byBiZSByZWFkIGZyb20gdGhlIHRleHRhcmVhIGV2ZXJ5IHRpbWXigJR3aGVuIHdlIHBvbGwsCmp1c3Qgbm90aWNpbmcgdGhhdCBzb21ldGhpbmcgaXMgc3RpbGwgc2VsZWN0ZWQgaXMgZW5vdWdoIHRvIHRlbGwgdXMKdGhhdCBubyBuZXcgdGV4dCB3YXMgdHlwZWQuPC9wPgoKPHA+VGhlIHJlYXNvbiB0aGF0IGNoZWFwIHBvbGxpbmcgaXMgaW1wb3J0YW50IGlzIHRoYXQgbWFueSBicm93c2VycyBkbwpub3QgZmlyZSB1c2VmdWwgZXZlbnRzIG9uIElNRSAoaW5wdXQgbWV0aG9kIGVuZ2luZSkgaW5wdXQsIHdoaWNoIGlzCnRoZSB0aGluZyB3aGVyZSBwZW9wbGUgaW5wdXR0aW5nIGEgbGFuZ3VhZ2UgbGlrZSBKYXBhbmVzZSBvciBDaGluZXNlCnVzZSBtdWx0aXBsZSBrZXlzdHJva2VzIHRvIGNyZWF0ZSBhIGNoYXJhY3RlciBvciBzZXF1ZW5jZSBvZgpjaGFyYWN0ZXJzLiBNb3N0IG1vZGVybiBicm93c2VycyBmaXJlIDxjb2RlPmlucHV0PC9jb2RlPiB3aGVuIHRoZQpjb21wb3NpbmcgaXMgZmluaXNoZWQsIGJ1dCBtYW55IGRvbid0IGZpcmUgYW55dGhpbmcgd2hlbiB0aGUgY2hhcmFjdGVyCmlzIHVwZGF0ZWQgPGVtPmR1cmluZzwvZW0+IGNvbXBvc2l0aW9uLiBTbyB3ZSBwb2xsLCB3aGVuZXZlciB0aGUKZWRpdG9yIGlzIGZvY3VzZWQsIHRvIHByb3ZpZGUgaW1tZWRpYXRlIHVwZGF0ZXMgb2YgdGhlIGRpc3BsYXkuPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI2ludHJvIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2lucHV0Ij5JbnB1dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3NlbGVjdGlvbiI+U2VsZWN0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3BhcnNlIj5QYXJzaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc3VtbWFyeSI+V2hhdCBHaXZlcz88L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNidHJlZSI+Q29udGVudCBSZXByZXNlbnRhdGlvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2tleW1hcCI+S2V5IE1hcHM8L2E+PC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/manual.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVzZXIgTWFudWFsPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5kbCBkbCB7bWFyZ2luOiAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KCjxoMT48c3BhbiBjbGFzcz0ibG9nby1icmFjZXMiPnsgfTwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+Q29kZU1pcnJvcjwvYT48L2gxPgoKPHByZSBjbGFzcz0iZ3JleSI+CjxpbWcgc3JjPSJiYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogVXNlciBtYW51YWwgYW5kCiAgIHJlZmVyZW5jZSBndWlkZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0YmlnIGJsayI+CgogICAgPGgyIGlkPSJvdmVydmlldyI+T3ZlcnZpZXc8L2gyPgoKICAgIDxwPkNvZGVNaXJyb3IgaXMgYSBjb2RlLWVkaXRvciBjb21wb25lbnQgdGhhdCBjYW4gYmUgZW1iZWRkZWQgaW4KICAgIFdlYiBwYWdlcy4gVGhlIGNvZGUgbGlicmFyeSBwcm92aWRlcyA8ZW0+b25seTwvZW0+IHRoZSBlZGl0b3IKICAgIGNvbXBvbmVudCwgbm8gYWNjb21wYW55aW5nIGJ1dHRvbnMsIGF1dG8tY29tcGxldGlvbiwgb3Igb3RoZXIgSURFCiAgICBmdW5jdGlvbmFsaXR5LiBJdCBkb2VzIHByb3ZpZGUgYSByaWNoIEFQSSBvbiB0b3Agb2Ygd2hpY2ggc3VjaAogICAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkbHkgaW1wbGVtZW50ZWQuIFNlZQogICAgdGhlIDxhIGhyZWY9IiNhZGRvbnMiPmFkZC1vbnM8L2E+IGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBhbmQKICAgIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9jdG9sYWJzLmNvbS9qYXZhc2NyaXB0cy9jb2RlbWlycm9yLXVpLyI+Q29kZU1pcnJvcgogICAgVUk8L2E+IHByb2plY3QsIGZvciByZXVzYWJsZSBpbXBsZW1lbnRhdGlvbnMgb2YgZXh0cmEgZmVhdHVyZXMuPC9wPgoKICAgIDxwPkNvZGVNaXJyb3Igd29ya3Mgd2l0aCBsYW5ndWFnZS1zcGVjaWZpYyBtb2Rlcy4gTW9kZXMgYXJlCiAgICBKYXZhU2NyaXB0IHByb2dyYW1zIHRoYXQgaGVscCBjb2xvciAoYW5kIG9wdGlvbmFsbHkgaW5kZW50KSB0ZXh0CiAgICB3cml0dGVuIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UuIFRoZSBkaXN0cmlidXRpb24gY29tZXMgd2l0aCBhIGZldwogICAgbW9kZXMgKHNlZSB0aGUgPGNvZGU+bW9kZS88L2NvZGU+IGRpcmVjdG9yeSksIGFuZCBpdCBpc24ndCBoYXJkCiAgICB0byA8YSBocmVmPSIjbW9kZWFwaSI+d3JpdGUgbmV3IG9uZXM8L2E+IGZvciBvdGhlciBsYW5ndWFnZXMuPC9wPgoKICAgIDxoMiBpZD0idXNhZ2UiPkJhc2ljIFVzYWdlPC9oMj4KCiAgICA8cD5UaGUgZWFzaWVzdCB3YXkgdG8gdXNlIENvZGVNaXJyb3IgaXMgdG8gc2ltcGx5IGxvYWQgdGhlIHNjcmlwdAogICAgYW5kIHN0eWxlIHNoZWV0IGZvdW5kIHVuZGVyIDxjb2RlPmxpYi88L2NvZGU+IGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBwbHVzIGEgbW9kZSBzY3JpcHQgZnJvbSBvbmUgb2YgdGhlIDxjb2RlPm1vZGUvPC9jb2RlPiBkaXJlY3RvcmllcwogICAgYW5kIGEgdGhlbWUgc3R5bGVzaGVldCBmcm9tIDxjb2RlPnRoZW1lLzwvY29kZT4uIChTZWUKICAgIGFsc28gPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+dGhlIGNvbXByZXNzaW9uIGhlbHBlcjwvYT4uKSBGb3IKICAgIGV4YW1wbGU6PC9wPgoKICAgIDxwcmU+Jmx0O3NjcmlwdCBzcmM9ImxpYi9jb2RlbWlycm9yLmpzIj4mbHQ7L3NjcmlwdD4KJmx0O2xpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgombHQ7c2NyaXB0IHNyYz0ibW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPiZsdDsvc2NyaXB0PjwvcHJlPgoKICAgIDxwPkhhdmluZyBkb25lIHRoaXMsIGFuIGVkaXRvciBpbnN0YW5jZSBjYW4gYmUgY3JlYXRlZCBsaWtlCiAgICB0aGlzOjwvcD4KCiAgICA8cHJlPnZhciBteUNvZGVNaXJyb3IgPSBDb2RlTWlycm9yKGRvY3VtZW50LmJvZHkpOzwvcHJlPgoKICAgIDxwPlRoZSBlZGl0b3Igd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgZG9jdW1lbnQgYm9keSwgd2lsbCBzdGFydAogICAgZW1wdHksIGFuZCB3aWxsIHVzZSB0aGUgbW9kZSB0aGF0IHdlIGxvYWRlZC4gVG8gaGF2ZSBtb3JlIGNvbnRyb2wKICAgIG92ZXIgdGhlIG5ldyBlZGl0b3IsIGEgY29uZmlndXJhdGlvbiBvYmplY3QgY2FuIGJlIHBhc3NlZAogICAgdG8gPGNvZGU+Q29kZU1pcnJvcjwvY29kZT4gYXMgYSBzZWNvbmQgYXJndW1lbnQ6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IoZG9jdW1lbnQuYm9keSwgewogIHZhbHVlOiAiZnVuY3Rpb24gbXlTY3JpcHQoKXtyZXR1cm4gMTAwO31cbiIsCiAgbW9kZTogICJqYXZhc2NyaXB0Igp9KTs8L3ByZT4KCiAgICA8cD5UaGlzIHdpbGwgaW5pdGlhbGl6ZSB0aGUgZWRpdG9yIHdpdGggYSBwaWVjZSBvZiBjb2RlIGFscmVhZHkgaW4KICAgIGl0LCBhbmQgZXhwbGljaXRseSB0ZWxsIGl0IHRvIHVzZSB0aGUgSmF2YVNjcmlwdCBtb2RlICh3aGljaCBpcwogICAgdXNlZnVsIHdoZW4gbXVsdGlwbGUgbW9kZXMgYXJlIGxvYWRlZCkuCiAgICBTZWUgPGEgaHJlZj0iI2NvbmZpZyI+YmVsb3c8L2E+IGZvciBhIGZ1bGwgZGlzY3Vzc2lvbiBvZiB0aGUKICAgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IENvZGVNaXJyb3IgYWNjZXB0cy48L3A+CgogICAgPHA+SW4gY2FzZXMgd2hlcmUgeW91IGRvbid0IHdhbnQgdG8gYXBwZW5kIHRoZSBlZGl0b3IgdG8gYW4KICAgIGVsZW1lbnQsIGFuZCBuZWVkIG1vcmUgY29udHJvbCBvdmVyIHRoZSB3YXkgaXQgaXMgaW5zZXJ0ZWQsIHRoZQogICAgZmlyc3QgYXJndW1lbnQgdG8gdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uIGNhbiBhbHNvCiAgICBiZSBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gZ2l2ZW4gYSBET00gZWxlbWVudCwgaW5zZXJ0cyBpdCBpbnRvIHRoZQogICAgZG9jdW1lbnQgc29tZXdoZXJlLiBUaGlzIGNvdWxkIGJlIHVzZWQgdG8sIGZvciBleGFtcGxlLCByZXBsYWNlIGEKICAgIHRleHRhcmVhIHdpdGggYSByZWFsIGVkaXRvcjo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvcihmdW5jdGlvbihlbHQpIHsKICBteVRleHRBcmVhLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGVsdCwgbXlUZXh0QXJlYSk7Cn0sIHt2YWx1ZTogbXlUZXh0QXJlYS52YWx1ZX0pOzwvcHJlPgoKICAgIDxwPkhvd2V2ZXIsIGZvciB0aGlzIHVzZSBjYXNlLCB3aGljaCBpcyBhIGNvbW1vbiB3YXkgdG8gdXNlCiAgICBDb2RlTWlycm9yLCB0aGUgbGlicmFyeSBwcm92aWRlcyBhIG11Y2ggbW9yZSBwb3dlcmZ1bAogICAgc2hvcnRjdXQ6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKG15VGV4dEFyZWEpOzwvcHJlPgoKICAgIDxwPlRoaXMgd2lsbCwgYW1vbmcgb3RoZXIgdGhpbmdzLCBlbnN1cmUgdGhhdCB0aGUgdGV4dGFyZWEncyB2YWx1ZQogICAgaXMgdXBkYXRlZCB3aGVuIHRoZSBmb3JtIChpZiBpdCBpcyBwYXJ0IG9mIGEgZm9ybSkgaXMgc3VibWl0dGVkLgogICAgU2VlIHRoZSA8YSBocmVmPSIjZnJvbVRleHRBcmVhIj5BUEkgcmVmZXJlbmNlPC9hPiBmb3IgYSBmdWxsCiAgICBkZXNjcmlwdGlvbiBvZiB0aGlzIG1ldGhvZC48L3A+CgogICAgPGgyIGlkPSJjb25maWciPkNvbmZpZ3VyYXRpb248L2gyPgoKICAgIDxwPkJvdGggdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uIGFuZAogICAgaXRzIDxjb2RlPmZyb21UZXh0QXJlYTwvY29kZT4gbWV0aG9kIHRha2UgYXMgc2Vjb25kIChvcHRpb25hbCkKICAgIGFyZ3VtZW50IGFuIG9iamVjdCBjb250YWluaW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQW55IG9wdGlvbgogICAgbm90IHN1cHBsaWVkIGxpa2UgdGhpcyB3aWxsIGJlIHRha2VuCiAgICBmcm9tIDxjb2RlPkNvZGVNaXJyb3IuZGVmYXVsdHM8L2NvZGU+LCBhbiBvYmplY3QgY29udGFpbmluZyB0aGUKICAgIGRlZmF1bHQgb3B0aW9ucy4gWW91IGNhbiB1cGRhdGUgdGhpcyBvYmplY3QgdG8gY2hhbmdlIHRoZSBkZWZhdWx0cwogICAgb24geW91ciBwYWdlLjwvcD4KCiAgICA8cD5PcHRpb25zIGFyZSBub3QgY2hlY2tlZCBpbiBhbnkgd2F5LCBzbyBzZXR0aW5nIGJvZ3VzIG9wdGlvbgogICAgdmFsdWVzIGlzIGJvdW5kIHRvIGxlYWQgdG8gb2RkIGVycm9ycy48L3A+CgogICAgPHA+VGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgb3B0aW9uczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9Im9wdGlvbl92YWx1ZSI+PGNvZGU+dmFsdWUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9tb2RlIj48Y29kZT5tb2RlIChzdHJpbmcgb3Igb2JqZWN0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlLiBXaGVuIG5vdCBnaXZlbiwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlCiAgICAgIGZpcnN0IG1vZGUgdGhhdCB3YXMgbG9hZGVkLiBJdCBtYXkgYmUgYSBzdHJpbmcsIHdoaWNoIGVpdGhlcgogICAgICBzaW1wbHkgbmFtZXMgdGhlIG1vZGUgb3IgaXMKICAgICAgYSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JTUUiPk1JTUU8L2E+IHR5cGUKICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2RlLiBBbHRlcm5hdGl2ZWx5LCBpdCBtYXkgYmUgYW4gb2JqZWN0CiAgICAgIGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbW9kZSwgd2l0aAogICAgICBhIDxjb2RlPm5hbWU8L2NvZGU+IHByb3BlcnR5IHRoYXQgbmFtZXMgdGhlIG1vZGUgKGZvcgogICAgICBleGFtcGxlIDxjb2RlPntuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9PC9jb2RlPikuIFRoZSBkZW1vCiAgICAgIHBhZ2VzIGZvciBlYWNoIG1vZGUgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24KICAgICAgcGFyYW1ldGVycyB0aGUgbW9kZSBzdXBwb3J0cy4gWW91IGNhbiBhc2sgQ29kZU1pcnJvciB3aGljaCBtb2RlcwogICAgICBhbmQgTUlNRSB0eXBlcyBhcmUgbG9hZGVkIHdpdGgKICAgICAgdGhlIDxjb2RlPkNvZGVNaXJyb3IubGlzdE1vZGVzPC9jb2RlPgogICAgICBhbmQgPGNvZGU+Q29kZU1pcnJvci5saXN0TUlNRXM8L2NvZGU+IGZ1bmN0aW9ucy48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdGhlbWUiPjxjb2RlPnRoZW1lIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdGhlbWUgdG8gc3R5bGUgdGhlIGVkaXRvciB3aXRoLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlCiAgICAgIENTUyBmaWxlIGRlZmluaW5nIHRoZSBjb3JyZXNwb25kaW5nIDxjb2RlPi5jbS1zLVtuYW1lXTwvY29kZT4KICAgICAgc3R5bGVzIGlzIGxvYWRlZCAoc2VlCiAgICAgIHRoZSA8YSBocmVmPSIuLi90aGVtZS8iPjxjb2RlPnRoZW1lPC9jb2RlPjwvYT4gZGlyZWN0b3J5IGluIHRoZQogICAgICBkaXN0cmlidXRpb24pLiBUaGUgZGVmYXVsdCBpcyA8Y29kZT4iZGVmYXVsdCI8L2NvZGU+LCBmb3Igd2hpY2gKICAgICAgY29sb3JzIGFyZSBpbmNsdWRlZCBpbiA8Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT4uIEl0IGlzCiAgICAgIHBvc3NpYmxlIHRvIHVzZSBtdWx0aXBsZSB0aGVtaW5nIGNsYXNzZXMgYXQgb25jZeKAlGZvcgogICAgICBleGFtcGxlIDxjb2RlPiJmb28gYmFyIjwvY29kZT4gd2lsbCBhc3NpZ24gYm90aAogICAgICB0aGUgPGNvZGU+Y20tcy1mb288L2NvZGU+IGFuZCB0aGUgPGNvZGU+Y20tcy1iYXI8L2NvZGU+IGNsYXNzZXMKICAgICAgdG8gdGhlIGVkaXRvci48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhvdyBtYW55IHNwYWNlcyBhIGJsb2NrICh3aGF0ZXZlciB0aGF0IG1lYW5zIGluIHRoZSBlZGl0ZWQKICAgICAgbGFuZ3VhZ2UpIHNob3VsZCBiZSBpbmRlbnRlZC4gVGhlIGRlZmF1bHQgaXMgMi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fc21hcnRJbmRlbnQiPjxjb2RlPnNtYXJ0SW5kZW50IChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciB0byB1c2UgdGhlIGNvbnRleHQtc2Vuc2l0aXZlIGluZGVudGF0aW9uIHRoYXQgdGhlCiAgICAgIG1vZGUgcHJvdmlkZXMgKG9yIGp1c3QgaW5kZW50IHRoZSBzYW1lIGFzIHRoZSBsaW5lIGJlZm9yZSkuCiAgICAgIERlZmF1bHRzIHRvIHRydWUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3RhYlNpemUiPjxjb2RlPnRhYlNpemUgKGludGVnZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgd2lkdGggb2YgYSB0YWIgY2hhcmFjdGVyLiBEZWZhdWx0cyB0byA0LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9pbmRlbnRXaXRoVGFicyI+PGNvZGU+aW5kZW50V2l0aFRhYnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGV0aGVyLCB3aGVuIGluZGVudGluZywgdGhlIGZpcnN0IE4qPGNvZGU+dGFiU2l6ZTwvY29kZT4KICAgICAgc3BhY2VzIHNob3VsZCBiZSByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2VsZWN0cmljQ2hhcnMiPjxjb2RlPmVsZWN0cmljQ2hhcnMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db25maWd1cmVzIHdoZXRoZXIgdGhlIGVkaXRvciBzaG91bGQgcmUtaW5kZW50IHRoZSBjdXJyZW50CiAgICAgIGxpbmUgd2hlbiBhIGNoYXJhY3RlciBpcyB0eXBlZCB0aGF0IG1pZ2h0IGNoYW5nZSBpdHMgcHJvcGVyCiAgICAgIGluZGVudGF0aW9uIChvbmx5IHdvcmtzIGlmIHRoZSBtb2RlIHN1cHBvcnRzIGluZGVudGF0aW9uKS4KICAgICAgRGVmYXVsdCBpcyB0cnVlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9hdXRvQ2xlYXJFbXB0eUxpbmVzIj48Y29kZT5hdXRvQ2xlYXJFbXB0eUxpbmVzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiB0dXJuZWQgb24gKGRlZmF1bHQgaXMgb2ZmKSwgdGhpcyB3aWxsIGNsZWFyCiAgICAgIGF1dG9tYXRpY2FsbHkgY2xlYXIgbGluZXMgY29uc2lzdGluZyBvbmx5IG9mIHdoaXRlc3BhY2Ugd2hlbiB0aGUKICAgICAgY3Vyc29yIGxlYXZlcyB0aGVtLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgdG8gcHJldmVudCBhdXRvCiAgICAgIGluZGVudGF0aW9uIGZyb20gaW50cm9kdWNpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZSBpbiBhIGZpbGUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2tleU1hcCI+PGNvZGU+a2V5TWFwIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db25maWd1cmVzIHRoZSBrZXltYXAgdG8gdXNlLiBUaGUgZGVmYXVsdAogICAgICBpcyA8Y29kZT4iZGVmYXVsdCI8L2NvZGU+LCB3aGljaCBpcyB0aGUgb25seSBrZXltYXAgZGVmaW5lZAogICAgICBpbiA8Y29kZT5jb2RlbWlycm9yLmpzPC9jb2RlPiBpdHNlbGYuIEV4dHJhIGtleW1hcHMgYXJlIGZvdW5kIGluCiAgICAgIHRoZSA8YSBocmVmPSIuLi9rZXltYXAvIj48Y29kZT5rZXltYXA8L2NvZGU+PC9hPiBkaXJlY3RvcnkuIFNlZQogICAgICB0aGUgPGEgaHJlZj0iI2tleW1hcHMiPnNlY3Rpb24gb24ga2V5bWFwczwvYT4gZm9yIG1vcmUKICAgICAgaW5mb3JtYXRpb24uPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2V4dHJhS2V5cyI+PGNvZGU+ZXh0cmFLZXlzIChvYmplY3QpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGV4dHJhIGtleWJpbmRpbmdzIGZvciB0aGUgZWRpdG9yLAogICAgICBhbG9uZ3NpZGUgdGhlIG9uZXMgZGVmaW5lZAogICAgICBieSA8YSBocmVmPSIjb3B0aW9uX2tleU1hcCI+PGNvZGU+a2V5TWFwPC9jb2RlPjwvYT4uIFNob3VsZCBiZQogICAgICBlaXRoZXIgbnVsbCwgb3IgYSB2YWxpZCA8YSBocmVmPSIja2V5bWFwcyI+a2V5bWFwPC9hPiB2YWx1ZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fbGluZVdyYXBwaW5nIj48Y29kZT5saW5lV3JhcHBpbmcgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGV0aGVyIENvZGVNaXJyb3Igc2hvdWxkIHNjcm9sbCBvciB3cmFwIGZvciBsb25nIGxpbmVzLgogICAgICBEZWZhdWx0cyB0byA8Y29kZT5mYWxzZTwvY29kZT4gKHNjcm9sbCkuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX2xpbmVOdW1iZXJzIj48Y29kZT5saW5lTnVtYmVycyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZXRoZXIgdG8gc2hvdyBsaW5lIG51bWJlcnMgdG8gdGhlIGxlZnQgb2YgdGhlIGVkaXRvci48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZmlyc3RMaW5lTnVtYmVyIj48Y29kZT5maXJzdExpbmVOdW1iZXIgKGludGVnZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BdCB3aGljaCBudW1iZXIgdG8gc3RhcnQgY291bnRpbmcgbGluZXMuIERlZmF1bHQgaXMgMS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZ3V0dGVyIj48Y29kZT5ndXR0ZXIgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DYW4gYmUgdXNlZCB0byBmb3JjZSBhICdndXR0ZXInIChlbXB0eSBzcGFjZSBvbiB0aGUgbGVmdCBvZgogICAgICB0aGUgZWRpdG9yKSB0byBiZSBzaG93biBldmVuIHdoZW4gbm8gbGluZSBudW1iZXJzIGFyZSBhY3RpdmUuCiAgICAgIFRoaXMgaXMgdXNlZnVsIGZvciBzZXR0aW5nIDxhIGhyZWY9IiNzZXRNYXJrZXIiPm1hcmtlcnM8L2E+LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9maXhlZEd1dHRlciI+PGNvZGU+Zml4ZWRHdXR0ZXIgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIGVuYWJsZWQgKG9mZiBieSBkZWZhdWx0KSwgdGhpcyB3aWxsIG1ha2UgdGhlIGd1dHRlcgogICAgICBzdGF5IHZpc2libGUgd2hlbiB0aGUgZG9jdW1lbnQgaXMgc2Nyb2xsZWQgaG9yaXpvbnRhbGx5LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9yZWFkT25seSI+PGNvZGU+cmVhZE9ubHkgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGlzIGRpc2FibGVzIGVkaXRpbmcgb2YgdGhlIGVkaXRvciBjb250ZW50IGJ5IHRoZSB1c2VyLiBJZgogICAgICB0aGUgc3BlY2lhbCB2YWx1ZSA8Y29kZT4ibm9jdXJzb3IiPC9jb2RlPiBpcyBnaXZlbiAoaW5zdGVhZCBvZgogICAgICBzaW1wbHkgPGNvZGU+dHJ1ZTwvY29kZT4pLCBmb2N1c2luZyBvZiB0aGUgZWRpdG9yIGlzIGFsc28KICAgICAgZGlzYWxsb3dlZC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25DaGFuZ2UiPjxjb2RlPm9uQ2hhbmdlIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUKICAgICAgY29udGVudCBvZiB0aGUgZWRpdG9yIGlzIGNoYW5nZWQuIEl0IHdpbGwgYmUgZ2l2ZW4gdGhlIGVkaXRvcgogICAgICBpbnN0YW5jZSBhcyBmaXJzdCBhcmd1bWVudCwgYW5kIGFuIDxjb2RlPntmcm9tLCB0bywgdGV4dCwgbmV4dH08L2NvZGU+CiAgICAgIG9iamVjdCBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2VzCiAgICAgIHRoYXQgb2NjdXJyZWQgYXMgc2Vjb25kIGFyZ3VtZW50LiA8Y29kZT5mcm9tPC9jb2RlPgogICAgICBhbmQgPGNvZGU+dG88L2NvZGU+IGFyZSB0aGUgcG9zaXRpb25zIChpbiB0aGUgcHJlLWNoYW5nZQogICAgICBjb29yZGluYXRlIHN5c3RlbSkgd2hlcmUgdGhlIGNoYW5nZSBzdGFydGVkIGFuZAogICAgICBlbmRlZCAoZm9yIGV4YW1wbGUsIGl0IG1pZ2h0IGJlIDxjb2RlPntjaDowLCBsaW5lOjE4fTwvY29kZT4gaWYgdGhlCiAgICAgIHBvc2l0aW9uIGlzIGF0IHRoZSBiZWdpbm5pbmcgb2YgbGluZSAjMTkpLiA8Y29kZT50ZXh0PC9jb2RlPgogICAgICBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgdGV4dCB0aGF0IHJlcGxhY2VkIHRoZSBjaGFuZ2VkCiAgICAgIHJhbmdlIChzcGxpdCBieSBsaW5lKS4gSWYgbXVsdGlwbGUgY2hhbmdlcyBoYXBwZW5lZCBkdXJpbmcgYSBzaW5nbGUKICAgICAgb3BlcmF0aW9uLCB0aGUgb2JqZWN0IHdpbGwgaGF2ZSBhIDxjb2RlPm5leHQ8L2NvZGU+IHByb3BlcnR5IHBvaW50aW5nIHRvCiAgICAgIGFub3RoZXIgY2hhbmdlIG9iamVjdCAod2hpY2ggbWF5IHBvaW50IHRvIGFub3RoZXIsIGV0YykuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uQ3Vyc29yQWN0aXZpdHkiPjxjb2RlPm9uQ3Vyc29yQWN0aXZpdHkgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgY3Vyc29yIG9yIHNlbGVjdGlvbiBtb3Zlcywgb3IgYW55CiAgICAgIGNoYW5nZSBpcyBtYWRlIHRvIHRoZSBlZGl0b3IgY29udGVudC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25HdXR0ZXJDbGljayI+PGNvZGU+b25HdXR0ZXJDbGljayAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIGdpdmVuLCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZWRpdG9yIGd1dHRlciAodGhlCiAgICAgIGxpbmUtbnVtYmVyIGFyZWEpIGlzIGNsaWNrZWQuIFdpbGwgYmUgZ2l2ZW4gdGhlIGVkaXRvciBpbnN0YW5jZQogICAgICBhcyBmaXJzdCBhcmd1bWVudCwgdGhlICh6ZXJvLWJhc2VkKSBudW1iZXIgb2YgdGhlIGxpbmUgdGhhdCB3YXMKICAgICAgY2xpY2tlZCBhcyBzZWNvbmQgYXJndW1lbnQsIGFuZCB0aGUgcmF3IDxjb2RlPm1vdXNlZG93bjwvY29kZT4KICAgICAgZXZlbnQgb2JqZWN0IGFzIHRoaXJkIGFyZ3VtZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkZvY3VzIj48Y29kZT5vbkZvY3VzLCBvbkJsdXIgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIGdpdmVuIGZ1bmN0aW9ucyB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZWRpdG9yIGlzCiAgICAgIGZvY3VzZWQgb3IgdW5mb2N1c2VkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vblNjcm9sbCI+PGNvZGU+b25TY3JvbGwgKGZ1bmN0aW9uKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hlbiBnaXZlbiwgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlIGVkaXRvciBpcwogICAgICBzY3JvbGxlZC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25IaWdobGlnaHRDb21wbGV0ZSI+PGNvZGU+b25IaWdobGlnaHRDb21wbGV0ZSAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuZXZlciB0aGUgZWRpdG9yJ3MgY29udGVudCBoYXMgYmVlbiBmdWxseSBoaWdobGlnaHRlZCwKICAgICAgdGhpcyBmdW5jdGlvbiAoaWYgZ2l2ZW4pIHdpbGwgYmUgY2FsbGVkLiBJdCdsbCBiZSBnaXZlbiBhIHNpbmdsZQogICAgICBhcmd1bWVudCwgdGhlIGVkaXRvciBpbnN0YW5jZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25VcGRhdGUiPjxjb2RlPm9uVXBkYXRlIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIENvZGVNaXJyb3IgdXBkYXRlcyBpdHMgRE9NIGRpc3BsYXkuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX21hdGNoQnJhY2tldHMiPjxjb2RlPm1hdGNoQnJhY2tldHMgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5EZXRlcm1pbmVzIHdoZXRoZXIgYnJhY2tldHMgYXJlIG1hdGNoZWQgd2hlbmV2ZXIgdGhlIGN1cnNvcgogICAgICBpcyBtb3ZlZCBuZXh0IHRvIGEgYnJhY2tldC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fd29ya1RpbWUiPjxjb2RlPndvcmtUaW1lLCB3b3JrRGVsYXkgKG51bWJlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhpZ2hsaWdodGluZyBpcyBkb25lIGJ5IGEgcHNldWRvIGJhY2tncm91bmQtdGhyZWFkIHRoYXQgd2lsbAogICAgICB3b3JrIGZvciA8Y29kZT53b3JrVGltZTwvY29kZT4gbWlsbGlzZWNvbmRzLCBhbmQgdGhlbiB1c2UKICAgICAgdGltZW91dCB0byBzbGVlcCBmb3IgPGNvZGU+d29ya0RlbGF5PC9jb2RlPiBtaWxsaXNlY29uZHMuIFRoZQogICAgICBkZWZhdWx0cyBhcmUgMjAwIGFuZCAzMDAsIHlvdSBjYW4gY2hhbmdlIHRoZXNlIG9wdGlvbnMgdG8gbWFrZQogICAgICB0aGUgaGlnaGxpZ2h0aW5nIG1vcmUgb3IgbGVzcyBhZ2dyZXNzaXZlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9wb2xsSW50ZXJ2YWwiPjxjb2RlPnBvbGxJbnRlcnZhbCAobnVtYmVyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5kaWNhdGVzIGhvdyBxdWlja2x5IENvZGVNaXJyb3Igc2hvdWxkIHBvbGwgaXRzIGlucHV0CiAgICAgIHRleHRhcmVhIGZvciBjaGFuZ2VzLiBNb3N0IGlucHV0IGlzIGNhcHR1cmVkIGJ5IGV2ZW50cywgYnV0IHNvbWUKICAgICAgdGhpbmdzLCBsaWtlIElNRSBpbnB1dCBvbiBzb21lIGJyb3dzZXJzLCBkb2Vzbid0IGdlbmVyYXRlIGV2ZW50cwogICAgICB0aGF0IGFsbG93IENvZGVNaXJyb3IgdG8gcHJvcGVybHkgZGV0ZWN0IGl0LiBUaHVzLCBpdCBwb2xscy4KICAgICAgRGVmYXVsdCBpcyAxMDAgbWlsbGlzZWNvbmRzLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl91bmRvRGVwdGgiPjxjb2RlPnVuZG9EZXB0aCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBtYXhpbXVtIG51bWJlciBvZiB1bmRvIGxldmVscyB0aGF0IHRoZSBlZGl0b3Igc3RvcmVzLgogICAgICBEZWZhdWx0cyB0byA0MC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdGFiaW5kZXgiPjxjb2RlPnRhYmluZGV4IChpbnRlZ2VyKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0MDEvaW50ZXJhY3QvZm9ybXMuaHRtbCNhZGVmLXRhYmluZGV4Ij50YWIKICAgICAgaW5kZXg8L2E+IHRvIGFzc2lnbiB0byB0aGUgZWRpdG9yLiBJZiBub3QgZ2l2ZW4sIG5vIHRhYiBpbmRleAogICAgICB3aWxsIGJlIGFzc2lnbmVkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9hdXRvZm9jdXMiPjxjb2RlPmF1dG9mb2N1cyAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNhbiBiZSB1c2VkIHRvIG1ha2UgQ29kZU1pcnJvciBmb2N1cyBpdHNlbGYgb24KICAgICAgaW5pdGlhbGl6YXRpb24uIERlZmF1bHRzIHRvIG9mZi4KICAgICAgV2hlbiA8YSBocmVmPSIjZnJvbVRleHRBcmVhIj48Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+PC9hPiBpcwogICAgICB1c2VkLCBhbmQgbm8gZXhwbGljaXQgdmFsdWUgaXMgZ2l2ZW4gZm9yIHRoaXMgb3B0aW9uLCBpdCB3aWxsCiAgICAgIGluaGVyaXQgdGhlIHNldHRpbmcgZnJvbSB0aGUgdGV4dGFyZWEncyA8Y29kZT5hdXRvZm9jdXM8L2NvZGU+CiAgICAgIGF0dHJpYnV0ZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25LZXlFdmVudCI+PGNvZGU+b25LZXlFdmVudCAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGlzIHByb3ZpZGVzIGEgcmF0aGVyIGxvdy1sZXZlbCBob29rIGludG8gQ29kZU1pcnJvcidzIGtleQogICAgICBoYW5kbGluZy4gSWYgcHJvdmlkZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgb24KICAgICAgZXZlcnkgPGNvZGU+a2V5ZG93bjwvY29kZT4sIDxjb2RlPmtleXVwPC9jb2RlPiwKICAgICAgYW5kIDxjb2RlPmtleXByZXNzPC9jb2RlPiBldmVudCB0aGF0IENvZGVNaXJyb3IgY2FwdHVyZXMuIEl0CiAgICAgIHdpbGwgYmUgcGFzc2VkIHR3byBhcmd1bWVudHMsIHRoZSBlZGl0b3IgaW5zdGFuY2UgYW5kIHRoZSBrZXkKICAgICAgZXZlbnQuIFRoaXMga2V5IGV2ZW50IGlzIHByZXR0eSBtdWNoIHRoZSByYXcga2V5IGV2ZW50LCBleGNlcHQKICAgICAgdGhhdCBhIDxjb2RlPnN0b3AoKTwvY29kZT4gbWV0aG9kIGlzIGFsd2F5cyBhZGRlZCB0byBpdC4gWW91CiAgICAgIGNvdWxkIGZlZWQgaXQgdG8sIGZvciBleGFtcGxlLCA8Y29kZT5qUXVlcnkuRXZlbnQ8L2NvZGU+IHRvCiAgICAgIGZ1cnRoZXIgbm9ybWFsaXplIGl0Ljxicj5UaGlzIGZ1bmN0aW9uIGNhbiBpbnNwZWN0IHRoZSBrZXkKICAgICAgZXZlbnQsIGFuZCBoYW5kbGUgaXQgaWYgaXQgd2FudHMgdG8uIEl0IG1heSByZXR1cm4gdHJ1ZSB0byB0ZWxsCiAgICAgIENvZGVNaXJyb3IgdG8gaWdub3JlIHRoZSBldmVudC4gQmUgd2FyeSB0aGF0LCBvbiBzb21lIGJyb3dzZXJzLAogICAgICBzdG9wcGluZyBhIDxjb2RlPmtleWRvd248L2NvZGU+IGRvZXMgbm90IHN0b3AKICAgICAgdGhlIDxjb2RlPmtleXByZXNzPC9jb2RlPiBmcm9tIGZpcmluZywgd2hlcmVhcyBvbiBvdGhlcnMgaXQKICAgICAgZG9lcy4gSWYgeW91IHJlc3BvbmQgdG8gYW4gZXZlbnQsIHlvdSBzaG91bGQgcHJvYmFibHkgaW5zcGVjdAogICAgICBpdHMgPGNvZGU+dHlwZTwvY29kZT4gcHJvcGVydHkgYW5kIG9ubHkgZG8gc29tZXRoaW5nIHdoZW4gaXQKICAgICAgaXMgPGNvZGU+a2V5ZG93bjwvY29kZT4gKG9yIDxjb2RlPmtleXByZXNzPC9jb2RlPiBmb3IgYWN0aW9ucwogICAgICB0aGF0IG5lZWQgY2hhcmFjdGVyIGRhdGEpLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxoMiBpZD0ia2V5bWFwcyI+S2V5bWFwczwvaDI+CgogICAgPHA+S2V5bWFwcyBhcmUgd2F5cyB0byBhc3NvY2lhdGUga2V5cyB3aXRoIGZ1bmN0aW9uYWxpdHkuIEEga2V5bWFwCiAgICBpcyBhbiBvYmplY3QgbWFwcGluZyBzdHJpbmdzIHRoYXQgaWRlbnRpZnkgdGhlIGtleXMgdG8gZnVuY3Rpb25zCiAgICB0aGF0IGltcGxlbWVudCB0aGVpciBmdW5jdGlvbmFsaXR5LjwvcD4KCiAgICA8cD5LZXlzIGFyZSBpZGVudGlmaWVkIGVpdGhlciBieSBuYW1lIG9yIGJ5IGNoYXJhY3Rlci4KICAgIFRoZSA8Y29kZT5Db2RlTWlycm9yLmtleU5hbWVzPC9jb2RlPiBvYmplY3QgZGVmaW5lcyBuYW1lcyBmb3IKICAgIGNvbW1vbiBrZXlzIGFuZCBhc3NvY2lhdGVzIHRoZW0gd2l0aCB0aGVpciBrZXkgY29kZXMuIEV4YW1wbGVzIG9mCiAgICBuYW1lcyBkZWZpbmVkIGhlcmUgYXJlIDxjb2RlPkVudGVyPC9jb2RlPiwgPGNvZGU+RjU8L2NvZGU+LAogICAgYW5kIDxjb2RlPlE8L2NvZGU+LiBUaGVzZSBjYW4gYmUgcHJlZml4ZWQKICAgIHdpdGggPGNvZGU+U2hpZnQtPC9jb2RlPiwgPGNvZGU+Q21kLTwvY29kZT4sIDxjb2RlPkN0cmwtPC9jb2RlPiwKICAgIGFuZCA8Y29kZT5BbHQtPC9jb2RlPiAoaW4gdGhhdCBvcmRlciEpIHRvIHNwZWNpZnkgYSBtb2RpZmllci4gU28KICAgIGZvciBleGFtcGxlLCA8Y29kZT5TaGlmdC1DdHJsLVNwYWNlPC9jb2RlPiB3b3VsZCBiZSBhIHZhbGlkIGtleQogICAgaWRlbnRpZmllci48L3A+CgogICAgPHA+QWx0ZXJuYXRpdmVseSwgYSBjaGFyYWN0ZXIgY2FuIGJlIHNwZWNpZmllZCBkaXJlY3RseSBieQogICAgc3Vycm91bmRpbmcgaXQgaW4gc2luZ2xlIHF1b3RlcywgZm9yIGV4YW1wbGUgPGNvZGU+JyQnPC9jb2RlPgogICAgb3IgPGNvZGU+J3EnPC9jb2RlPi4gRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSB3YXkgYnJvd3NlcnMgZmlyZQogICAga2V5IGV2ZW50cywgdGhlc2UgbWF5IG5vdCBiZSBwcmVmaXhlZCB3aXRoIG1vZGlmaWVycy48L3A+CgogICAgPHA+VGhlIDxjb2RlPkNvZGVNaXJyb3Iua2V5TWFwPC9jb2RlPiBvYmplY3QgYXNzb2NpYXRlcyBrZXltYXBzCiAgICB3aXRoIG5hbWVzLiBVc2VyIGNvZGUgYW5kIGtleW1hcCBkZWZpbml0aW9ucyBjYW4gYXNzaWduIGV4dHJhCiAgICBwcm9wZXJ0aWVzIHRvIHRoaXMgb2JqZWN0LiBBbnl3aGVyZSB3aGVyZSBhIGtleW1hcCBpcyBleHBlY3RlZCwgYQogICAgc3RyaW5nIGNhbiBiZSBnaXZlbiwgd2hpY2ggd2lsbCBiZSBsb29rZWQgdXAgaW4gdGhpcyBvYmplY3QuIEl0CiAgICBhbHNvIGNvbnRhaW5zIHRoZSA8Y29kZT4iZGVmYXVsdCI8L2NvZGU+IGtleW1hcCBob2xkaW5nIHRoZQogICAgZGVmYXVsdCBiaW5kaW5ncy48L3A+CgogICAgPHA+VGhlIHZhbHVlcyBvZiBwcm9wZXJ0aWVzIGluIGtleW1hcHMgY2FuIGJlIGVpdGhlciBmdW5jdGlvbnMgb2YKICAgIGEgc2luZ2xlIGFyZ3VtZW50ICh0aGUgQ29kZU1pcnJvciBpbnN0YW5jZSksIG9yIHN0cmluZ3MuIFN1Y2gKICAgIHN0cmluZ3MgcmVmZXIgdG8gcHJvcGVydGllcyBvZiB0aGUKICAgIDxjb2RlPkNvZGVNaXJyb3IuY29tbWFuZHM8L2NvZGU+IG9iamVjdCwgd2hpY2ggZGVmaW5lcyBhIG51bWJlciBvZgogICAgY29tbW9uIGNvbW1hbmRzIHRoYXQgYXJlIHVzZWQgYnkgdGhlIGRlZmF1bHQga2V5YmluZGluZ3MsIGFuZCBtYXBzCiAgICB0aGVtIHRvIGZ1bmN0aW9ucy4gQSBrZXkgaGFuZGxlciBmdW5jdGlvbiBtYXkgdGhyb3cKICAgIDxjb2RlPkNvZGVNaXJyb3IuUGFzczwvY29kZT4gdG8gaW5kaWNhdGUgdGhhdCBpdCBoYXMgZGVjaWRlZCBub3QKICAgIHRvIGhhbmRsZSB0aGUga2V5LCBhbmQgb3RoZXIgaGFuZGxlcnMgKG9yIHRoZSBkZWZhdWx0IGJlaGF2aW9yKQogICAgc2hvdWxkIGJlIGdpdmVuIGEgdHVybi48L3A+CgogICAgPHA+S2V5cyBtYXBwZWQgdG8gY29tbWFuZCBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggdGhlCiAgICBjaGFyYWN0ZXJzIDxjb2RlPiJnbyI8L2NvZGU+ICh3aGljaCBzaG91bGQgYmUgdXNlZCBmb3IKICAgIGN1cnNvci1tb3ZlbWVudCBhY3Rpb25zKSB3aWxsIGJlIGZpcmVkIGV2ZW4gd2hlbiBhbgogICAgZXh0cmEgPGNvZGU+U2hpZnQ8L2NvZGU+IG1vZGlmaWVyIGlzIHByZXNlbnQgKGkuZS4gPGNvZGU+IlVwIjoKICAgICJnb0xpbmVVcCI8L2NvZGU+IG1hdGNoZXMgYm90aCB1cCBhbmQgc2hpZnQtdXApLiBUaGlzIGlzIHVzZWQgdG8KICAgIGVhc2lseSBpbXBsZW1lbnQgc2hpZnQtc2VsZWN0aW9uLjwvcD4KCiAgICA8cD5LZXltYXBzIGNhbiBkZWZlciB0byBlYWNoIG90aGVyIGJ5IGRlZmluaW5nCiAgICBhIDxjb2RlPmZhbGx0aHJvdWdoPC9jb2RlPiBwcm9wZXJ0eS4gVGhpcyBpbmRpY2F0ZXMgdGhhdCB3aGVuIGEKICAgIGtleSBpcyBub3QgZm91bmQgaW4gdGhlIG1hcCBpdHNlbGYsIG9uZSBvciBtb3JlIG90aGVyIG1hcHMgc2hvdWxkCiAgICBiZSBzZWFyY2hlZC4gSXQgY2FuIGhvbGQgZWl0aGVyIGEgc2luZ2xlIGtleW1hcCBvciBhbiBhcnJheSBvZgogICAga2V5bWFwcy48L3A+CgogICAgPHA+V2hlbiBhIGtleW1hcCBjb250YWlucyBhIDxjb2RlPmNhdGNoYWxsPC9jb2RlPiBwcm9wZXJ0eSwgdGhlCiAgICBoYW5kbGVyIGZ1bmN0aW9uIHVuZGVyIHRoYXQgcHJvcGVydHkgd2lsbCBiZSBjYWxsZWQgZm9yIGFsbCBrZXlzCiAgICBkaXNwYXRjaGVkIHRocm91Z2ggdGhlIGtleW1hcC48L3A+CgogICAgPGgyIGlkPSJzdHlsaW5nIj5DdXN0b21pemVkIFN0eWxpbmc8L2gyPgoKICAgIDxwPlVwIHRvIGEgY2VydGFpbiBleHRlbnQsIENvZGVNaXJyb3IncyBsb29rIGNhbiBiZSBjaGFuZ2VkIGJ5CiAgICBtb2RpZnlpbmcgc3R5bGUgc2hlZXQgZmlsZXMuIFRoZSBzdHlsZSBzaGVldHMgc3VwcGxpZWQgYnkgbW9kZXMKICAgIHNpbXBseSBwcm92aWRlIHRoZSBjb2xvcnMgZm9yIHRoYXQgbW9kZSwgYW5kIGNhbiBiZSBhZGFwdGVkIGluIGEKICAgIHZlcnkgc3RyYWlnaHRmb3J3YXJkIHdheS4gVG8gc3R5bGUgdGhlIGVkaXRvciBpdHNlbGYsIGl0IGlzCiAgICBwb3NzaWJsZSB0byBhbHRlciBvciBvdmVycmlkZSB0aGUgc3R5bGVzIGRlZmluZWQKICAgIGluIDxhIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+PGNvZGU+Y29kZW1pcnJvci5jc3M8L2NvZGU+PC9hPi48L3A+CgogICAgPHA+U29tZSBjYXJlIG11c3QgYmUgdGFrZW4gdGhlcmUsIHNpbmNlIGEgbG90IG9mIHRoZSBydWxlcyBpbiB0aGlzCiAgICBmaWxlIGFyZSBuZWNlc3NhcnkgdG8gaGF2ZSBDb2RlTWlycm9yIGZ1bmN0aW9uIHByb3Blcmx5LiBBZGp1c3RpbmcKICAgIGNvbG9ycyBzaG91bGQgYmUgc2FmZSwgb2YgY291cnNlLCBhbmQgd2l0aCBzb21lIGNhcmUgYSBsb3Qgb2YKICAgIG90aGVyIHRoaW5ncyBjYW4gYmUgY2hhbmdlZCBhcyB3ZWxsLiBUaGUgQ1NTIGNsYXNzZXMgZGVmaW5lZCBpbgogICAgdGhpcyBmaWxlIHNlcnZlIHRoZSBmb2xsb3dpbmcgcm9sZXM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yIj48Y29kZT5Db2RlTWlycm9yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgb3V0ZXIgZWxlbWVudCBvZiB0aGUgZWRpdG9yLiBUaGlzIHNob3VsZCBiZSB1c2VkIGZvcgogICAgICBib3JkZXJzIGFuZCBwb3NpdGlvbmluZy4gQ2FuIGFsc28gYmUgdXNlZCB0byBzZXQgc3R5bGVzIHRoYXQKICAgICAgc2hvdWxkIGhvbGQgZm9yIGV2ZXJ5dGhpbmcgaW5zaWRlIHRoZSBlZGl0b3IgKHN1Y2ggYXMgZm9udAogICAgICBhbmQgZm9udCBzaXplKSwgb3IgdG8gc2V0IGEgYmFja2dyb3VuZC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX3Njcm9sbCI+PGNvZGU+Q29kZU1pcnJvci1zY3JvbGw8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBlZGl0b3Igc2Nyb2xscyAoPGNvZGU+b3ZlcmZsb3c6CiAgICAgIGF1dG88L2NvZGU+ICsgZml4ZWQgaGVpZ2h0KS4gQnkgZGVmYXVsdCwgaXQgZG9lcy4gR2l2aW5nCiAgICAgIHRoaXMgPGNvZGU+aGVpZ2h0OiBhdXRvOyBvdmVyZmxvdzogdmlzaWJsZTs8L2NvZGU+IHdpbGwgY2F1c2UKICAgICAgdGhlIGVkaXRvciB0byByZXNpemUgdG8gZml0IGl0cyBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZm9jdXNlZCI+PGNvZGU+Q29kZU1pcnJvci1mb2N1c2VkPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuZXZlciB0aGUgZWRpdG9yIGlzIGZvY3VzZWQsIHRoZSB0b3AgZWxlbWVudCBnZXRzIHRoaXMKICAgICAgY2xhc3MuIFRoaXMgaXMgdXNlZCB0byBoaWRlIHRoZSBjdXJzb3IgYW5kIGdpdmUgdGhlIHNlbGVjdGlvbiBhCiAgICAgIGRpZmZlcmVudCBjb2xvciB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9ndXR0ZXIiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhpcyBmb3IgZ2l2aW5nIGEgYmFja2dyb3VuZCBvciBhIGJvcmRlciB0byB0aGUgZWRpdG9yCiAgICAgIGd1dHRlci4gRG9uJ3Qgc2V0IGFueSBwYWRkaW5nIGhlcmUsCiAgICAgIHVzZSA8Y29kZT5Db2RlTWlycm9yLWd1dHRlci10ZXh0PC9jb2RlPiBmb3IgdGhhdC4gQnkgZGVmYXVsdCwKICAgICAgdGhlIGd1dHRlciBpcyAnZmx1aWQnLCBtZWFuaW5nIGl0IHdpbGwgYWRqdXN0IGl0cyB3aWR0aCB0byB0aGUKICAgICAgbWF4aW11bSBsaW5lIG51bWJlciBvciBsaW5lIG1hcmtlciB3aWR0aC4gWW91IGNhbiBhbHNvIHNldCBhCiAgICAgIGZpeGVkIHdpZHRoIGlmIHlvdSB3YW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZ3V0dGVyX3RleHQiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVzZWQgdG8gc3R5bGUgdGhlIGFjdHVhbCBsaW5lIG51bWJlcnMuIEZvciB0aGUgbnVtYmVycyB0bwogICAgICBsaW5lIHVwLCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgZm9udCBpbiB0aGUgZ3V0dGVyIGlzIHRoZQogICAgICBzYW1lIGFzIHRoZSBvbmUgaW4gdGhlIHJlc3Qgb2YgdGhlIGVkaXRvciwgc28geW91IHNob3VsZAogICAgICBwcm9iYWJseSBvbmx5IHNldCBmb250IHN0eWxlIGFuZCBzaXplIGluCiAgICAgIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBjbGFzcy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2xpbmVzIj48Y29kZT5Db2RlTWlycm9yLWxpbmVzPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgdmlzaWJsZSBsaW5lcy4gSWYgdGhpcyBoYXMgdmVydGljYWwKICAgICAgcGFkZGluZywgPGNvZGU+Q29kZU1pcnJvci1ndXR0ZXI8L2NvZGU+IHNob3VsZCBoYXZlIHRoZSBzYW1lCiAgICAgIHBhZGRpbmcuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9jdXJzb3IiPjxjb2RlPkNvZGVNaXJyb3ItY3Vyc29yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgY3Vyc29yIGlzIGEgYmxvY2sgZWxlbWVudCB0aGF0IGlzIGFic29sdXRlbHkgcG9zaXRpb25lZC4KICAgICAgWW91IGNhbiBtYWtlIGl0IGxvb2sgd2hpY2hldmVyIHdheSB5b3Ugd2FudC48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX3NlbGVjdGVkIj48Y29kZT5Db2RlTWlycm9yLXNlbGVjdGVkPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgc2VsZWN0aW9uIGlzIHJlcHJlc2VudGVkIGJ5IDxjb2RlPnNwYW48L2NvZGU+IGVsZW1lbnRzCiAgICAgIHdpdGggdGhpcyBjbGFzcy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX21hdGNoaW5nYnJhY2tldCI+PGNvZGU+Q29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQ8L2NvZGU+LAogICAgICAgIDxjb2RlPkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGVzZSBhcmUgdXNlZCB0byBzdHlsZSBtYXRjaGVkIChvciB1bm1hdGNoZWQpIGJyYWNrZXRzLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPlRoZSBhY3R1YWwgbGluZXMsIGFzIHdlbGwgYXMgdGhlIGN1cnNvciwgYXJlIHJlcHJlc2VudGVkCiAgICBieSA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnRzLiBCeSBkZWZhdWx0IG5vIHRleHQgc3R5bGluZyAoc3VjaCBhcwogICAgYm9sZCkgdGhhdCBtaWdodCBjaGFuZ2UgbGluZSBoZWlnaHQgaXMgYXBwbGllZC4gSWYgeW91IGRvIHdhbnQKICAgIHN1Y2ggZWZmZWN0cywgeW91J2xsIGhhdmUgdG8gZ2l2ZSA8Y29kZT5Db2RlTWlycm9yIHByZTwvY29kZT4gYQogICAgZml4ZWQgaGVpZ2h0LiBBbHNvLCB5b3UgbXVzdCBzdGlsbCB0YWtlIGNhcmUgdGhhdCBjaGFyYWN0ZXIgd2lkdGgKICAgIGlzIGNvbnN0YW50LjwvcD4KCiAgICA8cD5JZiB5b3VyIHBhZ2UncyBzdHlsZSBzaGVldHMgZG8gZnVua3kgdGhpbmdzIHRvCiAgICBhbGwgPGNvZGU+ZGl2PC9jb2RlPiBvciA8Y29kZT5wcmU8L2NvZGU+IGVsZW1lbnRzICh5b3UgcHJvYmFibHkKICAgIHNob3VsZG4ndCBkbyB0aGF0KSwgeW91J2xsIGhhdmUgdG8gZGVmaW5lIHJ1bGVzIHRvIGNhbmNlbCB0aGVzZQogICAgZWZmZWN0cyBvdXQgYWdhaW4gZm9yIGVsZW1lbnRzIHVuZGVyIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPgogICAgY2xhc3MuPC9wPgoKICAgIDxwPlRoZW1lcyBhcmUgYWxzbyBzaW1wbHkgQ1NTIGZpbGVzLCB3aGljaCBkZWZpbmUgY29sb3JzIGZvcgogICAgdmFyaW91cyBzeW50YWN0aWMgZWxlbWVudHMuIFNlZSB0aGUgZmlsZXMgaW4KICAgIHRoZSA8YSBocmVmPSIuLi90aGVtZS8iPjxjb2RlPnRoZW1lPC9jb2RlPjwvYT4gZGlyZWN0b3J5LjwvcD4KCiAgICA8aDIgaWQ9ImFwaSI+UHJvZ3JhbW1pbmcgQVBJPC9oMj4KCiAgICA8cD5BIGxvdCBvZiBDb2RlTWlycm9yIGZlYXR1cmVzIGFyZSBvbmx5IGF2YWlsYWJsZSB0aHJvdWdoIGl0cyBBUEkuCiAgICBUaGlzIGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgeW91IG5lZWQgdG8gZG8gd29yayB0byBlbmFibGUgdGhlbSwKICAgIGFuZCB0aGUgYWR2YW50YWdlIHRoYXQgQ29kZU1pcnJvciB3aWxsIGZpdCBzZWFtbGVzc2x5IGludG8geW91cgogICAgYXBwbGljYXRpb24uPC9wPgoKICAgIDxwPldoZW5ldmVyIHBvaW50cyBpbiB0aGUgZG9jdW1lbnQgYXJlIHJlcHJlc2VudGVkLCB0aGUgQVBJIHVzZXMKICAgIG9iamVjdHMgd2l0aCA8Y29kZT5saW5lPC9jb2RlPiBhbmQgPGNvZGU+Y2g8L2NvZGU+IHByb3BlcnRpZXMuCiAgICBCb3RoIGFyZSB6ZXJvLWJhc2VkLiBDb2RlTWlycm9yIG1ha2VzIHN1cmUgdG8gJ2NsaXAnIGFueSBwb3NpdGlvbnMKICAgIHBhc3NlZCBieSBjbGllbnQgY29kZSBzbyB0aGF0IHRoZXkgZml0IGluc2lkZSB0aGUgZG9jdW1lbnQsIHNvIHlvdQogICAgc2hvdWxkbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IHNhbml0aXppbmcgeW91ciBjb29yZGluYXRlcy4gSWYgeW91CiAgICBnaXZlIDxjb2RlPmNoPC9jb2RlPiBhIHZhbHVlIG9mIDxjb2RlPm51bGw8L2NvZGU+LCBvciBkb24ndAogICAgc3BlY2lmeSBpdCwgaXQgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIHNwZWNpZmllZAogICAgbGluZS48L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9ImdldFZhbHVlIj48Y29kZT5nZXRWYWx1ZSgpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY3VycmVudCBlZGl0b3IgY29udGVudC48L2RkPgogICAgICA8ZHQgaWQ9InNldFZhbHVlIj48Y29kZT5zZXRWYWx1ZShzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgdGhlIGVkaXRvciBjb250ZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldFNlbGVjdGlvbiI+PGNvZGU+Z2V0U2VsZWN0aW9uKCkg4oaSIHN0cmluZzwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgY29kZS48L2RkPgogICAgICA8ZHQgaWQ9InJlcGxhY2VTZWxlY3Rpb24iPjxjb2RlPnJlcGxhY2VTZWxlY3Rpb24oc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVwbGFjZSB0aGUgc2VsZWN0aW9uIHdpdGggdGhlIGdpdmVuIHN0cmluZy48L2RkPgoKICAgICAgPGR0IGlkPSJmb2N1cyI+PGNvZGU+Zm9jdXMoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+R2l2ZSB0aGUgZWRpdG9yIGZvY3VzLjwvZGQ+CiAgICAgIDxkdCBpZD0ic2Nyb2xsVG8iPjxjb2RlPnNjcm9sbFRvKHgsIHkpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TY3JvbGwgdGhlIGVkaXRvciB0byBhIGdpdmVuIChwaXhlbCkgcG9zaXRpb24uIEJvdGgKICAgICAgYXJndW1lbnRzIG1heSBiZSBsZWZ0IGFzIDxjb2RlPm51bGw8L2NvZGU+CiAgICAgIG9yIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gdG8gaGF2ZSBubyBlZmZlY3QuPC9kZD4KCiAgICAgIDxkdCBpZD0ic2V0T3B0aW9uIj48Y29kZT5zZXRPcHRpb24ob3B0aW9uLCB2YWx1ZSk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNoYW5nZSB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgZWRpdG9yLiA8Y29kZT5vcHRpb248L2NvZGU+CiAgICAgIHNob3VsZCB0aGUgbmFtZSBvZiBhbiA8YSBocmVmPSIjY29uZmlnIj5vcHRpb248L2E+LAogICAgICBhbmQgPGNvZGU+dmFsdWU8L2NvZGU+IHNob3VsZCBiZSBhIHZhbGlkIHZhbHVlIGZvciB0aGF0CiAgICAgIG9wdGlvbi48L2RkPgogICAgICA8ZHQgaWQ9ImdldE9wdGlvbiI+PGNvZGU+Z2V0T3B0aW9uKG9wdGlvbikg4oaSIHZhbHVlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdpdmVuIG9wdGlvbiBmb3IgdGhpcwogICAgICBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KCiAgICAgIDxkdCBpZD0iY3Vyc29yQ29vcmRzIj48Y29kZT5jdXJzb3JDb29yZHMoc3RhcnQsIG1vZGUpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgYW4gPGNvZGU+e3gsIHksIHlCb3R9PC9jb2RlPiBvYmplY3QgY29udGFpbmluZyB0aGUKICAgICAgY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnNvci4gSWYgPGNvZGU+bW9kZTwvY29kZT4KICAgICAgaXMgPGNvZGU+ImxvY2FsIjwvY29kZT4sIHRoZXkgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgdG9wLWxlZnQKICAgICAgY29ybmVyIG9mIHRoZSBlZGl0YWJsZSBkb2N1bWVudC4gSWYgaXQgaXMgPGNvZGU+InBhZ2UiPC9jb2RlPiBvcgogICAgICBub3QgZ2l2ZW4sIHRoZXkgYXJlIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlCiAgICAgIHBhZ2UuIDxjb2RlPnlCb3Q8L2NvZGU+IGlzIHRoZSBjb29yZGluYXRlIG9mIHRoZSBib3R0b20gb2YgdGhlCiAgICAgIGN1cnNvci4gPGNvZGU+c3RhcnQ8L2NvZGU+IGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgeW91CiAgICAgIHdhbnQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi48L2RkPgogICAgICA8ZHQgaWQ9ImNoYXJDb29yZHMiPjxjb2RlPmNoYXJDb29yZHMocG9zLCBtb2RlKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5MaWtlIDxjb2RlPmN1cnNvckNvb3JkczwvY29kZT4sIGJ1dCByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZgogICAgICBhbiBhcmJpdHJhcnkgY2hhcmFjdGVycy4gPGNvZGU+cG9zPC9jb2RlPiBzaG91bGQgYmUKICAgICAgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QuPC9kZD4KICAgICAgPGR0IGlkPSJjb29yZHNDaGFyIj48Y29kZT5jb29yZHNDaGFyKG9iamVjdCkg4oaSIHBvczwvY29kZT48L2R0PgogICAgICA8ZGQ+R2l2ZW4gYW4gPGNvZGU+e3gsIHl9PC9jb2RlPiBvYmplY3QgKGluIHBhZ2UgY29vcmRpbmF0ZXMpLAogICAgICByZXR1cm5zIHRoZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBwb3NpdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvCiAgICAgIGl0LjwvZGQ+CgogICAgICA8ZHQgaWQ9InVuZG8iPjxjb2RlPnVuZG8oKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VW5kbyBvbmUgZWRpdCAoaWYgYW55IHVuZG8gZXZlbnRzIGFyZSBzdG9yZWQpLjwvZGQ+CiAgICAgIDxkdCBpZD0icmVkbyI+PGNvZGU+cmVkbygpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZWRvIG9uZSB1bmRvbmUgZWRpdC48L2RkPgogICAgICA8ZHQgaWQ9Imhpc3RvcnlTaXplIj48Y29kZT5oaXN0b3J5U2l6ZSgpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgYW4gb2JqZWN0IHdpdGggPGNvZGU+e3VuZG8sIHJlZG99PC9jb2RlPiBwcm9wZXJ0aWVzLAogICAgICBib3RoIG9mIHdoaWNoIGhvbGQgaW50ZWdlcnMsIGluZGljYXRpbmcgdGhlIGFtb3VudCBvZiBzdG9yZWQKICAgICAgdW5kbyBhbmQgcmVkbyBvcGVyYXRpb25zLjwvZGQ+CiAgICAgIDxkdCBpZD0iY2xlYXJIaXN0b3J5Ij48Y29kZT5jbGVhckhpc3RvcnkoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2xlYXJzIHRoZSBlZGl0b3IncyB1bmRvIGhpc3RvcnkuPC9kZD4KCiAgICAgIDxkdCBpZD0iaW5kZW50TGluZSI+PGNvZGU+aW5kZW50TGluZShsaW5lLCBkaXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXNldCB0aGUgZ2l2ZW4gbGluZSdzIGluZGVudGF0aW9uIHRvIHRoZSBpbmRlbnRhdGlvbgogICAgICBwcmVzY3JpYmVkIGJ5IHRoZSBtb2RlLiBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGdpdmVuLAogICAgICBpbmRlbnRhdGlvbiB3aWxsIGJlIGluY3JlYXNlZCAoaWYgPGNvZGU+ZGlyPC9jb2RlPiBpcyB0cnVlKSBvcgogICAgICBkZWNyZWFzZWQgKGlmIGZhbHNlKSBieSBhbiA8YSBocmVmPSIjb3B0aW9uX2luZGVudFVuaXQiPmluZGVudAogICAgICB1bml0PC9hPiBpbnN0ZWFkLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldFRva2VuQXQiPjxjb2RlPmdldFRva2VuQXQocG9zKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXRyaWV2ZXMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRva2VuIHRoZSBjdXJyZW50IG1vZGUgZm91bmQKICAgICAgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIChhIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCkuIFRoZQogICAgICByZXR1cm5lZCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKICAgICAgPGRsPgogICAgICAgIDxkdD48Y29kZT5zdGFydDwvY29kZT48L2R0PjxkZD5UaGUgY2hhcmFjdGVyIChvbiB0aGUgZ2l2ZW4gbGluZSkgYXQgd2hpY2ggdGhlIHRva2VuIHN0YXJ0cy48L2RkPgogICAgICAgIDxkdD48Y29kZT5lbmQ8L2NvZGU+PC9kdD48ZGQ+VGhlIGNoYXJhY3RlciBhdCB3aGljaCB0aGUgdG9rZW4gZW5kcy48L2RkPgogICAgICAgIDxkdD48Y29kZT5zdHJpbmc8L2NvZGU+PC9kdD48ZGQ+VGhlIHRva2VuJ3Mgc3RyaW5nLjwvZGQ+CiAgICAgICAgPGR0Pjxjb2RlPmNsYXNzTmFtZTwvY29kZT48L2R0PjxkZD5UaGUgY2xhc3MgdGhlIG1vZGUgYXNzaWduZWQKICAgICAgICB0byB0aGUgdG9rZW4uIChDYW4gYmUgbnVsbCB3aGVuIG5vIGNsYXNzIHdhcyBhc3NpZ25lZC4pPC9kZD4KICAgICAgICA8ZHQ+PGNvZGU+c3RhdGU8L2NvZGU+PC9kdD48ZGQ+VGhlIG1vZGUncyBzdGF0ZSBhdCB0aGUgZW5kIG9mIHRoaXMgdG9rZW4uPC9kZD4KICAgICAgPC9kbD48L2RkPgoKICAgICAgPGR0IGlkPSJtYXJrVGV4dCI+PGNvZGU+bWFya1RleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gbWFyayBhIHJhbmdlIG9mIHRleHQgd2l0aCBhIHNwZWNpZmljIENTUwogICAgICBjbGFzcyBuYW1lLiA8Y29kZT5mcm9tPC9jb2RlPiBhbmQgPGNvZGU+dG88L2NvZGU+IHNob3VsZAogICAgICBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3RzLiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIGFuCiAgICAgIG9iamVjdCB3aXRoIHR3byBtZXRob2RzLCA8Y29kZT5jbGVhcigpPC9jb2RlPiwgd2hpY2ggcmVtb3ZlcyB0aGUKICAgICAgbWFyaywgYW5kIDxjb2RlPmZpbmQoKTwvY29kZT4sIHdoaWNoIHJldHVybnMgYSA8Y29kZT57ZnJvbSwKICAgICAgdG99PC9jb2RlPiAoYm90aCBkb2N1bWVudCBwb3NpdGlvbnMpLCBpbmRpY2F0aW5nIHRoZSBjdXJyZW50CiAgICAgIHBvc2l0aW9uIG9mIHRoZSBtYXJrZWQgcmFuZ2UuPC9kZD4KCiAgICAgIDxkdCBpZD0ic2V0Qm9va21hcmsiPjxjb2RlPnNldEJvb2ttYXJrKHBvcykg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+SW5zZXJ0cyBhIGJvb2ttYXJrLCBhIGhhbmRsZSB0aGF0IGZvbGxvd3MgdGhlIHRleHQgYXJvdW5kIGl0CiAgICAgIGFzIGl0IGlzIGJlaW5nIGVkaXRlZCwgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLiBBIGJvb2ttYXJrIGhhcyB0d28KICAgICAgbWV0aG9kcyA8Y29kZT5maW5kKCk8L2NvZGU+IGFuZCA8Y29kZT5jbGVhcigpPC9jb2RlPi4gVGhlIGZpcnN0CiAgICAgIHJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGJvb2ttYXJrLCBpZiBpdCBpcyBzdGlsbCBpbgogICAgICB0aGUgZG9jdW1lbnQsIGFuZCB0aGUgc2Vjb25kIGV4cGxpY2l0bHkgcmVtb3ZlcyB0aGUKICAgICAgYm9va21hcmsuPC9kZD4KCiAgICAgIDxkdCBpZD0iZmluZE1hcmtzQXQiPjxjb2RlPmZpbmRNYXJrc0F0KHBvcykg4oaSIGFycmF5PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgYm9va21hcmtzIGFuZCBtYXJrZWQgcmFuZ2VzCiAgICAgIHByZXNlbnQgYXQgdGhlIGdpdmVuIHBvc2l0aW9uLjwvZGQ+CgogICAgICA8ZHQgaWQ9InNldE1hcmtlciI+PGNvZGU+c2V0TWFya2VyKGxpbmUsIHRleHQsIGNsYXNzTmFtZSkg4oaSIGxpbmVIYW5kbGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPkFkZCBhIGd1dHRlciBtYXJrZXIgZm9yIHRoZSBnaXZlbiBsaW5lLiBHdXR0ZXIgbWFya2VycyBhcmUKICAgICAgc2hvd24gaW4gdGhlIGxpbmUtbnVtYmVyIGFyZWEgKGluc3RlYWQgb2YgdGhlIG51bWJlciBmb3IgdGhpcwogICAgICBsaW5lKS4gQm90aCA8Y29kZT50ZXh0PC9jb2RlPiBhbmQgPGNvZGU+Y2xhc3NOYW1lPC9jb2RlPiBhcmUKICAgICAgb3B0aW9uYWwuIFNldHRpbmcgPGNvZGU+dGV4dDwvY29kZT4gdG8gYSBVbmljb2RlIGNoYXJhY3RlciBsaWtlCiAgICAgIOKXjyB0ZW5kcyB0byBnaXZlIGEgbmljZSBlZmZlY3QuIFRvIHB1dCBhIHBpY3R1cmUgaW4gdGhlIGd1dHRlciwKICAgICAgc2V0IDxjb2RlPnRleHQ8L2NvZGU+IHRvIGEgc3BhY2UgYW5kIDxjb2RlPmNsYXNzTmFtZTwvY29kZT4gdG8KICAgICAgc29tZXRoaW5nIHRoYXQgc2V0cyBhIGJhY2tncm91bmQgaW1hZ2UuIElmIHlvdQogICAgICBzcGVjaWZ5IDxjb2RlPnRleHQ8L2NvZGU+LCB0aGUgZ2l2ZW4gdGV4dCAod2hpY2ggbWF5IGNvbnRhaW4KICAgICAgSFRNTCkgd2lsbCwgYnkgZGVmYXVsdCwgcmVwbGFjZSB0aGUgbGluZSBudW1iZXIgZm9yIHRoYXQgbGluZS4KICAgICAgSWYgdGhpcyBpcyBub3Qgd2hhdCB5b3Ugd2FudCwgeW91IGNhbiBpbmNsdWRlIHRoZQogICAgICBzdHJpbmcgPGNvZGU+JU4lPC9jb2RlPiBpbiB0aGUgdGV4dCwgd2hpY2ggd2lsbCBiZSByZXBsYWNlZCBieQogICAgICB0aGUgbGluZSBudW1iZXIuPC9kZD4KICAgICAgPGR0IGlkPSJjbGVhck1hcmtlciI+PGNvZGU+Y2xlYXJNYXJrZXIobGluZSk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNsZWFycyBhIG1hcmtlciBjcmVhdGVkCiAgICAgIHdpdGggPGNvZGU+c2V0TWFya2VyPC9jb2RlPi4gPGNvZGU+bGluZTwvY29kZT4gY2FuIGJlIGVpdGhlciBhCiAgICAgIG51bWJlciBvciBhIGhhbmRsZSByZXR1cm5lZCBieSA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+IChzaW5jZSBhCiAgICAgIG51bWJlciBtYXkgbm93IHJlZmVyIHRvIGEgZGlmZmVyZW50IGxpbmUgaWYgc29tZXRoaW5nIHdhcyBhZGRlZAogICAgICBvciBkZWxldGVkKS48L2RkPgogICAgICA8ZHQgaWQ9InNldExpbmVDbGFzcyI+PGNvZGU+c2V0TGluZUNsYXNzKGxpbmUsIGNsYXNzTmFtZSwgYmFja2dyb3VuZENsYXNzTmFtZSkg4oaSIGxpbmVIYW5kbGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPlNldCBhIENTUyBjbGFzcyBuYW1lIGZvciB0aGUgZ2l2ZW4gbGluZS4gPGNvZGU+bGluZTwvY29kZT4KICAgICAgY2FuIGJlIGEgbnVtYmVyIG9yIGEgbGluZSBoYW5kbGUgKGFzIHJldHVybmVkCiAgICAgIGJ5IDxjb2RlPnNldE1hcmtlcjwvY29kZT4gb3IgdGhpcwogICAgICBmdW5jdGlvbikuIDxjb2RlPmNsYXNzTmFtZTwvY29kZT4gd2lsbCBiZSB1c2VkIHRvIHN0eWxlIHRoZSB0ZXh0CiAgICAgIGZvciB0aGUgbGluZSwgYW5kIDxjb2RlPmJhY2tncm91bmRDbGFzc05hbWU8L2NvZGU+IHRvIHN0eWxlIGl0cwogICAgICBiYWNrZ3JvdW5kICh3aGljaCBsaWVzIGJlaGluZCB0aGUgc2VsZWN0aW9uKS4KICAgICAgUGFzcyA8Y29kZT5udWxsPC9jb2RlPiB0byBjbGVhciB0aGUgY2xhc3NlcyBmb3IgYSBsaW5lLjwvZGQ+CiAgICAgIDxkdCBpZD0iaGlkZUxpbmUiPjxjb2RlPmhpZGVMaW5lKGxpbmUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5IaWRlIHRoZSBnaXZlbiBsaW5lIChlaXRoZXIgYnkgbnVtYmVyIG9yIGJ5IGhhbmRsZSkuIEhpZGRlbgogICAgICBsaW5lcyBkb24ndCBzaG93IHVwIGluIHRoZSBlZGl0b3IsIGFuZCB0aGVpciBudW1iZXJzIGFyZSBza2lwcGVkCiAgICAgIHdoZW4gPGEgaHJlZj0iI29wdGlvbl9saW5lTnVtYmVycyI+bGluZSBudW1iZXJzPC9hPiBhcmUgZW5hYmxlZC4KICAgICAgRGVsZXRpbmcgYSByZWdpb24gYXJvdW5kIHRoZW0gZG9lcyBkZWxldGUgdGhlbSwgYW5kIGNvcGluZyBhCiAgICAgIHJlZ2lvbiBhcm91bmQgd2lsbCBpbmNsdWRlIHRoZW0gaW4gdGhlIGNvcGllZCB0ZXh0LjwvZGQ+CiAgICAgIDxkdCBpZD0ic2hvd0xpbmUiPjxjb2RlPnNob3dMaW5lKGxpbmUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgaW52ZXJzZSBvZiA8Y29kZT5oaWRlTGluZTwvY29kZT7igJRyZS1zaG93cyBhIHByZXZpb3VzbHkKICAgICAgaGlkZGVuIGxpbmUsIGJ5IG51bWJlciBvciBieSBoYW5kbGUuPC9kZD4KCiAgICAgIDxkdCBpZD0ib25EZWxldGVMaW5lIj48Y29kZT5vbkRlbGV0ZUxpbmUobGluZSwgZnVuYyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlZ2lzdGVyIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gdGhlIGxpbmUgaXMKICAgICAgZGVsZXRlZCBmcm9tIHRoZSBkb2N1bWVudC48L2RkPgoKICAgICAgPGR0IGlkPSJsaW5lSW5mbyI+PGNvZGU+bGluZUluZm8obGluZSkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbGluZSBudW1iZXIsIHRleHQgY29udGVudCwgYW5kIG1hcmtlciBzdGF0dXMgb2YKICAgICAgdGhlIGdpdmVuIGxpbmUsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBudW1iZXIgb3IgYSBoYW5kbGUKICAgICAgcmV0dXJuZWQgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPi4gVGhlIHJldHVybmVkIG9iamVjdCBoYXMgdGhlCiAgICAgIHN0cnVjdHVyZSA8Y29kZT57bGluZSwgaGFuZGxlLCB0ZXh0LCBtYXJrZXJUZXh0LCBtYXJrZXJDbGFzcywKICAgICAgbGluZUNsYXNzLCBiZ0NsYXNzfTwvY29kZT4uPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0TGluZUhhbmRsZSI+PGNvZGU+Z2V0TGluZUhhbmRsZShudW0pIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5GZXRjaGVzIHRoZSBsaW5lIGhhbmRsZSBmb3IgdGhlIGdpdmVuIGxpbmUgbnVtYmVyLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImFkZFdpZGdldCI+PGNvZGU+YWRkV2lkZ2V0KHBvcywgbm9kZSwgc2Nyb2xsSW50b1ZpZXcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5QdXRzIDxjb2RlPm5vZGU8L2NvZGU+LCB3aGljaCBzaG91bGQgYmUgYW4gYWJzb2x1dGVseQogICAgICBwb3NpdGlvbmVkIERPTSBub2RlLCBpbnRvIHRoZSBlZGl0b3IsIHBvc2l0aW9uZWQgcmlnaHQgYmVsb3cgdGhlCiAgICAgIGdpdmVuIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IHBvc2l0aW9uLgogICAgICBXaGVuIDxjb2RlPnNjcm9sbEludG9WaWV3PC9jb2RlPiBpcyB0cnVlLCB0aGUgZWRpdG9yIHdpbGwgZW5zdXJlCiAgICAgIHRoYXQgdGhlIGVudGlyZSBub2RlIGlzIHZpc2libGUgKGlmIHBvc3NpYmxlKS4gVG8gcmVtb3ZlIHRoZQogICAgICB3aWRnZXQgYWdhaW4sIHNpbXBseSB1c2UgRE9NIG1ldGhvZHMgKG1vdmUgaXQgc29tZXdoZXJlIGVsc2UsIG9yCiAgICAgIGNhbGwgPGNvZGU+cmVtb3ZlQ2hpbGQ8L2NvZGU+IG9uIGl0cyBwYXJlbnQpLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im1hdGNoQnJhY2tldHMiPjxjb2RlPm1hdGNoQnJhY2tldHMoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Rm9yY2UgbWF0Y2hpbmctYnJhY2tldC1oaWdobGlnaHRpbmcgdG8gaGFwcGVuLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImxpbmVDb3VudCI+PGNvZGU+bGluZUNvdW50KCkg4oaSIG51bWJlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBudW1iZXIgb2YgbGluZXMgaW4gdGhlIGVkaXRvci48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRDdXJzb3IiPjxjb2RlPmdldEN1cnNvcihzdGFydCkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+PGNvZGU+c3RhcnQ8L2NvZGU+IGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHN0YXJ0CiAgICAgIG9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbiBtdXN0IGJlIHJldHJpZXZlZC4gSWYgaXQgaXMgbm90CiAgICAgIGdpdmVuLCB0aGUgY3VycmVudCBjdXJzb3IgcG9zLCBpLmUuIHRoZSBzaWRlIG9mIHRoZSBzZWxlY3Rpb24KICAgICAgdGhhdCB3b3VsZCBtb3ZlIGlmIHlvdSBwcmVzc2VkIGFuIGFycm93IGtleSwgaXMgY2hvc2VuLgogICAgICBBIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdCB3aWxsIGJlIHJldHVybmVkLjwvZGQ+CiAgICAgIDxkdCBpZD0ic29tZXRoaW5nU2VsZWN0ZWQiPjxjb2RlPnNvbWV0aGluZ1NlbGVjdGVkKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybiB0cnVlIGlmIGFueSB0ZXh0IGlzIHNlbGVjdGVkLjwvZGQ+CiAgICAgIDxkdCBpZD0ic2V0Q3Vyc29yIj48Y29kZT5zZXRDdXJzb3IocG9zKTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBjdXJzb3IgcG9zaXRpb24uIFlvdSBjYW4gZWl0aGVyIHBhc3MgYQogICAgICBzaW5nbGUgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0LCBvciB0aGUgbGluZSBhbmQgdGhlCiAgICAgIGNoYXJhY3RlciBhcyB0d28gc2VwYXJhdGUgcGFyYW1ldGVycy48L2RkPgogICAgICA8ZHQgaWQ9InNldFNlbGVjdGlvbiI+PGNvZGU+c2V0U2VsZWN0aW9uKHN0YXJ0LCBlbmQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgdGhlIHNlbGVjdGlvbiByYW5nZS4gPGNvZGU+c3RhcnQ8L2NvZGU+CiAgICAgIGFuZCA8Y29kZT5lbmQ8L2NvZGU+IHNob3VsZCBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3RzLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldExpbmUiPjxjb2RlPmdldExpbmUobikg4oaSIHN0cmluZzwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBjb250ZW50IG9mIGxpbmUgPGNvZGU+bjwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJzZXRMaW5lIj48Y29kZT5zZXRMaW5lKG4sIHRleHQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgdGhlIGNvbnRlbnQgb2YgbGluZSA8Y29kZT5uPC9jb2RlPi48L2RkPgogICAgICA8ZHQgaWQ9InJlbW92ZUxpbmUiPjxjb2RlPnJlbW92ZUxpbmUobik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlbW92ZSB0aGUgZ2l2ZW4gbGluZSBmcm9tIHRoZSBkb2N1bWVudC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRSYW5nZSI+PGNvZGU+Z2V0UmFuZ2UoZnJvbSwgdG8pIOKGkiBzdHJpbmc8L2NvZGU+PC90ZD4KICAgICAgPGRkPkdldCB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBnaXZlbiBwb2ludHMgaW4gdGhlIGVkaXRvciwgd2hpY2gKICAgICAgc2hvdWxkIGJlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+IG9iamVjdHMuPC9kZD4KICAgICAgPGR0IGlkPSJyZXBsYWNlUmFuZ2UiPjxjb2RlPnJlcGxhY2VSYW5nZShzdHJpbmcsIGZyb20sIHRvKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVwbGFjZSB0aGUgcGFydCBvZiB0aGUgZG9jdW1lbnQgYmV0d2VlbiA8Y29kZT5mcm9tPC9jb2RlPgogICAgICBhbmQgPGNvZGU+dG88L2NvZGU+IHdpdGggdGhlIGdpdmVuIHN0cmluZy4gPGNvZGU+ZnJvbTwvY29kZT4KICAgICAgYW5kIDxjb2RlPnRvPC9jb2RlPiBtdXN0IGJlIDxjb2RlPntsaW5lLCBjaH08L2NvZGU+CiAgICAgIG9iamVjdHMuIDxjb2RlPnRvPC9jb2RlPiBjYW4gYmUgbGVmdCBvZmYgdG8gc2ltcGx5IGluc2VydCB0aGUKICAgICAgc3RyaW5nIGF0IHBvc2l0aW9uIDxjb2RlPmZyb208L2NvZGU+LjwvZGQ+CgogICAgICA8ZHQgaWQ9InBvc0Zyb21JbmRleCI+PGNvZGU+cG9zRnJvbUluZGV4KGluZGV4KSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DYWxjdWxhdGVzIGFuZCByZXR1cm5zIGEgPGNvZGU+e2xpbmUsIGNofTwvY29kZT4gb2JqZWN0IGZvciBhCiAgICAgIHplcm8tYmFzZWQgPGNvZGU+aW5kZXg8L2NvZGU+IHdobydzIHZhbHVlIGlzIHJlbGF0aXZlIHRvIHRoZSBzdGFydCBvZiB0aGUKICAgICAgZWRpdG9yJ3MgdGV4dC4gSWYgdGhlIDxjb2RlPmluZGV4PC9jb2RlPiBpcyBvdXQgb2YgcmFuZ2Ugb2YgdGhlIHRleHQgdGhlbgogICAgICB0aGUgcmV0dXJuZWQgb2JqZWN0IGlzIGNsaXBwZWQgdG8gc3RhcnQgb3IgZW5kIG9mIHRoZSB0ZXh0CiAgICAgIHJlc3BlY3RpdmVseS48L2RkPgogICAgICA8ZHQgaWQ9ImluZGV4RnJvbVBvcyI+PGNvZGU+aW5kZXhGcm9tUG9zKG9iamVjdCkg4oaSIG51bWJlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIHJldmVyc2Ugb2YgPGEgaHJlZj0iI3Bvc0Zyb21JbmRleCI+PGNvZGU+cG9zRnJvbUluZGV4PC9jb2RlPjwvYT4uPC9kZD4KICAgIDwvZGw+CgogICAgPHA+VGhlIGZvbGxvd2luZyBhcmUgbW9yZSBsb3ctbGV2ZWwgbWV0aG9kczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9Im9wZXJhdGlvbiI+PGNvZGU+b3BlcmF0aW9uKGZ1bmMpIOKGkiByZXN1bHQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNvZGVNaXJyb3IgaW50ZXJuYWxseSBidWZmZXJzIGNoYW5nZXMgYW5kIG9ubHkgdXBkYXRlcyBpdHMKICAgICAgRE9NIHN0cnVjdHVyZSBhZnRlciBpdCBoYXMgZmluaXNoZWQgcGVyZm9ybWluZyBzb21lIG9wZXJhdGlvbi4KICAgICAgSWYgeW91IG5lZWQgdG8gcGVyZm9ybSBhIGxvdCBvZiBvcGVyYXRpb25zIG9uIGEgQ29kZU1pcnJvcgogICAgICBpbnN0YW5jZSwgeW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIHdpdGggYSBmdW5jdGlvbiBhcmd1bWVudC4gSXQKICAgICAgd2lsbCBjYWxsIHRoZSBmdW5jdGlvbiwgYnVmZmVyaW5nIHVwIGFsbCBjaGFuZ2VzLCBhbmQgb25seSBkb2luZwogICAgICB0aGUgZXhwZW5zaXZlIHVwZGF0ZSBhZnRlciB0aGUgZnVuY3Rpb24gcmV0dXJucy4gVGhpcyBjYW4gYmUgYQogICAgICBsb3QgZmFzdGVyLiBUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBtZXRob2Qgd2lsbCBiZSB0aGUgcmV0dXJuCiAgICAgIHZhbHVlIG9mIHlvdXIgZnVuY3Rpb24uPC9kZD4KCiAgICAgIDxkdCBpZD0icmVmcmVzaCI+PGNvZGU+cmVmcmVzaCgpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5JZiB5b3VyIGNvZGUgZG9lcyBzb21ldGhpbmcgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBlZGl0b3IKICAgICAgZWxlbWVudCAod2luZG93IHJlc2l6ZXMgYXJlIGFscmVhZHkgbGlzdGVuZWQgZm9yKSwgb3IgdW5oaWRlcwogICAgICBpdCwgeW91IHNob3VsZCBwcm9iYWJseSBmb2xsb3cgdXAgYnkgY2FsbGluZyB0aGlzIG1ldGhvZCB0bwogICAgICBlbnN1cmUgQ29kZU1pcnJvciBpcyBzdGlsbCBsb29raW5nIGFzIGludGVuZGVkLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImdldElucHV0RmllbGQiPjxjb2RlPmdldElucHV0RmllbGQoKSDihpIgdGV4dGFyZWE8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIGhpZGRlbiB0ZXh0YXJlYSB1c2VkIHRvIHJlYWQgaW5wdXQuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRXcmFwcGVyRWxlbWVudCI+PGNvZGU+Z2V0V3JhcHBlckVsZW1lbnQoKSDihpIgbm9kZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgRE9NIG5vZGUgdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0b3IuIFJlbW92ZSB0aGlzCiAgICAgIGZyb20geW91ciB0cmVlIHRvIGRlbGV0ZSBhbiBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRTY3JvbGxlckVsZW1lbnQiPjxjb2RlPmdldFNjcm9sbGVyRWxlbWVudCgpIOKGkiBub2RlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBET00gbm9kZSB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgc2l6aW5nIGFuZAogICAgICB0aGUgc2Nyb2xsaW5nIG9mIHRoZSBlZGl0b3IuIFlvdSBjYW4gY2hhbmdlCiAgICAgIHRoZSA8Y29kZT5oZWlnaHQ8L2NvZGU+IGFuZCA8Y29kZT53aWR0aDwvY29kZT4gc3R5bGVzIG9mIHRoaXMKICAgICAgZWxlbWVudCB0byByZXNpemUgYW4gZWRpdG9yLiAoWW91IG1pZ2h0IGhhdmUgdG8gY2FsbAogICAgICB0aGUgPGEgaHJlZj0iI3JlZnJlc2giPjxjb2RlPnJlZnJlc2g8L2NvZGU+PC9hPiBtZXRob2QKICAgICAgYWZ0ZXJ3YXJkcy4pPC9kZD4KICAgICAgPGR0IGlkPSJnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50KCkg4oaSIG5vZGU8L2NvZGU+PC9kdD4KICAgICAgPGRkPkZldGNoZXMgdGhlIERPTSBub2RlIHRoYXQgcmVwcmVzZW50cyB0aGUgZWRpdG9yIGd1dHRlci48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTdGF0ZUFmdGVyIj48Y29kZT5nZXRTdGF0ZUFmdGVyKGxpbmUpIOKGkiBzdGF0ZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbW9kZSdzIHBhcnNlciBzdGF0ZSwgaWYgYW55LCBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBnaXZlbiBsaW5lIG51bWJlci4gSWYgbm8gbGluZSBudW1iZXIgaXMgZ2l2ZW4sIHRoZSBzdGF0ZSBhdCB0aGUKICAgICAgZW5kIG9mIHRoZSBkb2N1bWVudCBpcyByZXR1cm5lZC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBzdG9yaW5nCiAgICAgIHBhcnNpbmcgZXJyb3JzIGluIHRoZSBzdGF0ZSwgb3IgZ2V0dGluZyBvdGhlciBraW5kcyBvZgogICAgICBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGZvciBhIGxpbmUuPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImZyb21UZXh0QXJlYSI+RmluYWxseSwgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IG9iamVjdAogICAgaXRzZWxmIGhhcyBhIG1ldGhvZCA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+LiBUaGlzIHRha2VzIGEKICAgIHRleHRhcmVhIERPTSBub2RlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgc2Vjb25kLiBJdCB3aWxsIHJlcGxhY2UgdGhlIHRleHRhcmVhIHdpdGggYSBDb2RlTWlycm9yCiAgICBpbnN0YW5jZSwgYW5kIHdpcmUgdXAgdGhlIGZvcm0gb2YgdGhhdCB0ZXh0YXJlYSAoaWYgYW55KSB0byBtYWtlCiAgICBzdXJlIHRoZSBlZGl0b3IgY29udGVudHMgYXJlIHB1dCBpbnRvIHRoZSB0ZXh0YXJlYSB3aGVuIHRoZSBmb3JtCiAgICBpcyBzdWJtaXR0ZWQuIEEgQ29kZU1pcnJvciBpbnN0YW5jZSBjcmVhdGVkIHRoaXMgd2F5IGhhcyB0d28KICAgIGFkZGl0aW9uYWwgbWV0aG9kczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InNhdmUiPjxjb2RlPnNhdmUoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29weSB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGludG8gdGhlIHRleHRhcmVhLjwvZGQ+CgogICAgICA8ZHQgaWQ9InRvVGV4dEFyZWEiPjxjb2RlPnRvVGV4dEFyZWEoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVtb3ZlIHRoZSBlZGl0b3IsIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYSAod2l0aAogICAgICB0aGUgZWRpdG9yJ3MgY3VycmVudCBjb250ZW50KS48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRUZXh0QXJlYSI+PGNvZGU+Z2V0VGV4dEFyZWEoKSDihpIgdGV4dGFyZWE8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIHRleHRhcmVhIHRoYXQgdGhlIGluc3RhbmNlIHdhcyBiYXNlZCBvbi48L2RkPgogICAgPC9kbD4KCiAgICA8cCBpZD0iZGVmaW5lRXh0ZW5zaW9uIj5JZiB5b3Ugd2FudCB0byBkZWZpbmUgZXh0cmEgbWV0aG9kcyBpbiB0ZXJtcwogICAgb2YgdGhlIENvZGVNaXJyb3IgQVBJLCBpdCBpcyBwb3NzaWJsZSB0bwogICAgdXNlIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKG5hbWUsIHZhbHVlKTwvY29kZT4uIFRoaXMKICAgIHdpbGwgY2F1c2UgdGhlIGdpdmVuIHZhbHVlICh1c3VhbGx5IGEgbWV0aG9kKSB0byBiZSBhZGRlZCB0byBhbGwKICAgIENvZGVNaXJyb3IgaW5zdGFuY2VzIGNyZWF0ZWQgZnJvbSB0aGVuIG9uLjwvcD4KCiAgICA8aDIgaWQ9ImFkZG9ucyI+QWRkLW9uczwvaDI+CgogICAgPHA+VGhlIDxjb2RlPmxpYi91dGlsPC9jb2RlPiBkaXJlY3RvcnkgaW4gdGhlIGRpc3RyaWJ1dGlvbgogICAgY29udGFpbnMgYSBudW1iZXIgb2YgcmV1c2FibGUgY29tcG9uZW50cyB0aGF0IGltcGxlbWVudCBleHRyYQogICAgZWRpdG9yIGZ1bmN0aW9uYWxpdHkuIEluIGJyaWVmLCB0aGV5IGFyZTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InV0aWxfZGlhbG9nIj48YSBocmVmPSIuLi9saWIvdXRpbC9kaWFsb2cuanMiPjxjb2RlPmRpYWxvZy5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPlByb3ZpZGVzIGEgdmVyeSBzaW1wbGUgd2F5IHRvIHF1ZXJ5IHVzZXJzIGZvciB0ZXh0IGlucHV0LgogICAgICBBZGRzIGFuIDxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+IG1ldGhvZCB0byBDb2RlTWlycm9yIGluc3RhbmNlcywKICAgICAgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRoIGFuIEhUTUwgZnJhZ21lbnQgdGhhdCBwcm92aWRlcyB0aGUKICAgICAgcHJvbXB0IChzaG91bGQgaW5jbHVkZSBhbiA8Y29kZT5pbnB1dDwvY29kZT4gdGFnKSwgYW5kIGEKICAgICAgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0ZXh0IGhhcyBiZWVuIGVudGVyZWQuCiAgICAgIERlcGVuZHMgb24gPGNvZGU+bGliL3V0aWwvZGlhbG9nLmNzczwvY29kZT4uPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX3NlYXJjaGN1cnNvciI+PGEgaHJlZj0iLi4vbGliL3V0aWwvc2VhcmNoY3Vyc29yLmpzIj48Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5BZGRzIHRoZSA8Y29kZT5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHN0YXJ0LCBjYXNlRm9sZCkg4oaSCiAgICAgIGN1cnNvcjwvY29kZT4gbWV0aG9kIHRvIENvZGVNaXJyb3IgaW5zdGFuY2VzLCB3aGljaCBjYW4gYmUgdXNlZAogICAgICB0byBpbXBsZW1lbnQgc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eS4gPGNvZGU+cXVlcnk8L2NvZGU+CiAgICAgIGNhbiBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvciBhIHN0cmluZyAob25seSBzdHJpbmdzIHdpbGwgbWF0Y2gKICAgICAgYWNyb3NzIGxpbmVz4oCUaWYgdGhleSBjb250YWluIG5ld2xpbmVzKS4gPGNvZGU+c3RhcnQ8L2NvZGU+CiAgICAgIHByb3ZpZGVzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgc2VhcmNoLiBJdCBjYW4gYmUKICAgICAgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QsIG9yIGNhbiBiZSBsZWZ0IG9mZiB0byBkZWZhdWx0CiAgICAgIHRvIHRoZSBzdGFydCBvZiB0aGUgZG9jdW1lbnQuIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBpcyBvbmx5CiAgICAgIHJlbGV2YW50IHdoZW4gbWF0Y2hpbmcgYSBzdHJpbmcuIEl0IHdpbGwgY2F1c2UgdGhlIHNlYXJjaCB0byBiZQogICAgICBjYXNlLWluc2Vuc2l0aXZlLiBBIHNlYXJjaCBjdXJzb3IgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+ZmluZE5leHQoKSwgZmluZFByZXZpb3VzKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5TZWFyY2ggZm9yd2FyZCBvciBiYWNrd2FyZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgogICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIG1hdGNoIHdhcyBmb3VuZC4gSWYKICAgICAgICAgIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlCiAgICAgICAgICBhcnJheSByZXR1cm5lZCBieSB0aGUgPGNvZGU+bWF0Y2g8L2NvZGU+IG1ldGhvZCwgaW4gY2FzZSB5b3UKICAgICAgICAgIHdhbnQgdG8gZXh0cmFjdCBtYXRjaGVkIGdyb3Vwcy48L2RkPgogICAgICAgICAgPGR0Pjxjb2RlPmZyb20oKSwgdG8oKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+VGhlc2UgYXJlIG9ubHkgdmFsaWQgd2hlbiB0aGUgbGFzdCBjYWxsCiAgICAgICAgICB0byA8Y29kZT5maW5kTmV4dDwvY29kZT4gb3IgPGNvZGU+ZmluZFByZXZpb3VzPC9jb2RlPiBkaWQKICAgICAgICAgIG5vdCByZXR1cm4gZmFsc2UuIFRoZXkgd2lsbCByZXR1cm4gPGNvZGU+e2xpbmUsIGNofTwvY29kZT4KICAgICAgICAgIG9iamVjdHMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIG1hdGNoLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+cmVwbGFjZSh0ZXh0KTwvY29kZT48L2R0PgogICAgICAgICAgPGRkPlJlcGxhY2VzIHRoZSBjdXJyZW50bHkgZm91bmQgbWF0Y2ggd2l0aCB0aGUgZ2l2ZW4gdGV4dAogICAgICAgICAgYW5kIGFkanVzdHMgdGhlIGN1cnNvciBwb3NpdGlvbiB0byByZWZsZWN0IHRoZQogICAgICAgICAgcmVwbGFjZW1lbnQuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9InV0aWxfc2VhcmNoIj48YSBocmVmPSIuLi9saWIvdXRpbC9zZWFyY2guanMiPjxjb2RlPnNlYXJjaC5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPkltcGxlbWVudHMgdGhlIHNlYXJjaCBjb21tYW5kcy4gQ29kZU1pcnJvciBoYXMga2V5cyBib3VuZCB0bwogICAgICB0aGVzZSBieSBkZWZhdWx0LCBidXQgd2lsbCBub3QgZG8gYW55dGhpbmcgd2l0aCB0aGVtIHVubGVzcyBhbgogICAgICBpbXBsZW1lbnRhdGlvbiBpcyBwcm92aWRlZC4gRGVwZW5kcwogICAgICBvbiA8Y29kZT5zZWFyY2hjdXJzb3IuanM8L2NvZGU+LCBhbmQgd2lsbCBtYWtlIHVzZQogICAgICBvZiA8YSBocmVmPSIjdXRpbF9kaWFsb2ciPjxjb2RlPm9wZW5EaWFsb2c8L2NvZGU+PC9hPiB3aGVuCiAgICAgIGF2YWlsYWJsZSB0byBtYWtlIHByb21wdGluZyBmb3Igc2VhcmNoIHF1ZXJpZXMgbGVzcyB1Z2x5LjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9mb2xkY29kZSI+PGEgaHJlZj0iLi4vbGliL3V0aWwvZm9sZGNvZGUuanMiPjxjb2RlPmZvbGRjb2RlLmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+SGVscHMgd2l0aCBjb2RlIGZvbGRpbmcuCiAgICAgIFNlZSA8YSBocmVmPSIuLi9kZW1vL2ZvbGRpbmcuaHRtbCI+dGhlIGRlbW88L2E+IGZvciBhbiBleGFtcGxlLgogICAgICBDYWxsIDxjb2RlPkNvZGVNaXJyb3IubmV3Rm9sZEZ1bmN0aW9uPC9jb2RlPiB3aXRoIGEgcmFuZ2UtZmluZGVyCiAgICAgIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBmdW5jdGlvbiB0aGF0IHdpbGwsIHdoZW4gYXBwbGllZCB0bwogICAgICBhIENvZGVNaXJyb3IgaW5zdGFuY2UgYW5kIGEgbGluZSBudW1iZXIsIGF0dGVtcHQgdG8gZm9sZCBvcgogICAgICB1bmZvbGQgdGhlIGJsb2NrIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBsaW5lLiBBIHJhbmdlLWZpbmRlciBpcyBhCiAgICAgIGxhbmd1YWdlLXNwZWNpZmljIGZ1bmN0aW9uIHRoYXQgYWxzbyB0YWtlcyBhbiBpbnN0YW5jZSBhbmQgYQogICAgICBsaW5lIG51bWJlciwgYW5kIHJldHVybnMgYW4gZW5kIGxpbmUgZm9yIHRoZSBibG9jaywgb3IgbnVsbCBpZgogICAgICBubyBibG9jayBpcyBzdGFydGVkIG9uIHRoYXQgbGluZS4gVGhpcyBmaWxlCiAgICAgIHByb3ZpZGVzIDxjb2RlPkNvZGVNaXJyb3IuYnJhY2VSYW5nZUZpbmRlcjwvY29kZT4sIHdoaWNoIGZpbmRzCiAgICAgIGJsb2NrcyBpbiBicmFjZSBsYW5ndWFnZXMgKEphdmFTY3JpcHQsIEMsIEphdmEsCiAgICAgIGV0YyksIDxjb2RlPkNvZGVNaXJyb3IuaW5kZW50UmFuZ2VGaW5kZXI8L2NvZGU+LCBmb3IgbGFuZ3VhZ2VzCiAgICAgIHdoZXJlIGluZGVudGF0aW9uIGRldGVybWluZXMgYmxvY2sgc3RydWN0dXJlIChQeXRob24sIEhhc2tlbGwpLAogICAgICBhbmQgPGNvZGU+Q29kZU1pcnJvci50YWdSYW5nZUZpbmRlcjwvY29kZT4sIGZvciBYTUwtc3R5bGUKICAgICAgbGFuZ3VhZ2VzLjwvZGQ+CiAgICAgIDxkdCBpZD0idXRpbF9ydW5tb2RlIj48YSBocmVmPSIuLi9saWIvdXRpbC9ydW5tb2RlLmpzIj48Y29kZT5ydW5tb2RlLmpzPC9jb2RlPjwvYT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gcnVuIGEgQ29kZU1pcnJvciBtb2RlIG92ZXIgdGV4dCB3aXRob3V0CiAgICAgIGFjdHVhbGx5IG9wZW5pbmcgYW4gZWRpdG9yIGluc3RhbmNlLgogICAgICBTZWUgPGEgaHJlZj0iLi4vZGVtby9ydW5tb2RlLmh0bWwiPnRoZSBkZW1vPC9hPiBmb3IgYW4KICAgICAgZXhhbXBsZS48L2RkPgogICAgICA8ZHQgaWQ9InV0aWxfc2ltcGxlLWhpbnQiPjxhIGhyZWY9Ii4uL2xpYi91dGlsL3NpbXBsZS1oaW50LmpzIj48Y29kZT5zaW1wbGUtaGludC5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPlByb3ZpZGVzIGEgZnJhbWV3b3JrIGZvciBzaG93aW5nIGF1dG9jb21wbGV0aW9uIGhpbnRzLgogICAgICBEZWZpbmVzIDxjb2RlPkNvZGVNaXJyb3Iuc2ltcGxlSGludDwvY29kZT4sIHdoaWNoIHRha2VzIGEKICAgICAgQ29kZU1pcnJvciBpbnN0YW5jZSBhbmQgYSBoaW50aW5nIGZ1bmN0aW9uLCBhbmQgcG9wcyB1cCBhIHdpZGdldAogICAgICB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzZWxlY3QgYSBjb21wbGV0aW9uLiBIaW50aW5nIGZ1bmN0aW9ucwogICAgICBhcmUgZnVuY3Rpb24gdGhhdCB0YWtlIGFuIGVkaXRvciBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICBhIDxjb2RlPntsaXN0LCBmcm9tLCB0b308L2NvZGU+IG9iamVjdCwgd2hlcmUgPGNvZGU+bGlzdDwvY29kZT4KICAgICAgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyAodGhlIGNvbXBsZXRpb25zKSwgYW5kIDxjb2RlPmZyb208L2NvZGU+CiAgICAgIGFuZCA8Y29kZT50bzwvY29kZT4gZ2l2ZSB0aGUgc3RhcnQgYW5kIGVuZCBvZiB0aGUgdG9rZW4gdGhhdCBpcwogICAgICBiZWluZyBjb21wbGV0ZWQuIERlcGVuZHMKICAgICAgb24gPGNvZGU+bGliL3V0aWwvc2ltcGxlLWhpbnQuY3NzPC9jb2RlPi48L2RkPgogICAgICA8ZHQgaWQ9InV0aWxfamF2YXNjcmlwdC1oaW50Ij48YSBocmVmPSIuLi9saWIvdXRpbC9qYXZhc2NyaXB0LWhpbnQuanMiPjxjb2RlPmphdmFzY3JpcHQtaGludC5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPkRlZmluZXMgPGNvZGU+Q29kZU1pcnJvci5qYXZhc2NyaXB0SGludDwvY29kZT4KICAgICAgYW5kIDxjb2RlPkNvZGVNaXJyb3IuY29mZmVlc2NyaXB0SGludDwvY29kZT4sIHdoaWNoIGFyZSBzaW1wbGUKICAgICAgaGludGluZyBmdW5jdGlvbnMgZm9yIHRoZSBKYXZhU2NyaXB0IGFuZCBDb2ZmZWVTY3JpcHQKICAgICAgbW9kZXMuPC9kZD4KICAgICAgPGR0IGlkPSJ1dGlsX21hdGNoLWhpZ2hsaWdodGVyIj48YSBocmVmPSIuLi9saWIvdXRpbC9tYXRjaC1oaWdobGlnaHRlci5qcyI+PGNvZGU+bWF0Y2gtaGlnaGxpZ2h0ZXIuanM8L2NvZGU+PC9hPjwvZHQ+CiAgICAgIDxkZD5BZGRzIGEgPGNvZGU+bWF0Y2hIaWdobGlnaHQ8L2NvZGU+IG1ldGhvZCB0byBDb2RlTWlycm9yCiAgICAgIGluc3RhbmNlcyB0aGF0IGNhbiBiZSBjYWxsZWQgKHR5cGljYWxseSBmcm9tCiAgICAgIGEgPGEgaHJlZj0iI29wdGlvbl9vbkN1cnNvckFjdGl2aXR5Ij48Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPjwvYT4KICAgICAgaGFuZGxlcikgdG8gaGlnaGxpZ2h0IGFsbCBpbnN0YW5jZXMgb2YgYSBjdXJyZW50bHkgc2VsZWN0ZWQgd29yZAogICAgICB3aXRoIHRoZSBhIGNsYXNzbmFtZSBnaXZlbiBhcyBhIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QuCiAgICAgIERlcGVuZHMgb24KICAgICAgdGhlIDxhIGhyZWY9IiN1dGlsX3NlYXJjaGN1cnNvciI+PGNvZGU+c2VhcmNoY3Vyc29yPC9jb2RlPjwvYT4KICAgICAgYWRkLW9uLiBEZW1vIDxhIGhyZWY9Ii4uL2RlbW8vbWF0Y2hoaWdobGlnaHRlci5odG1sIj5oZXJlPC9hPi48L2RkPgogICAgICA8ZHQgaWQ9InV0aWxfY2xvc2V0YWciPjxhIGhyZWY9Ii4uL2xpYi91dGlsL2Nsb3NldGFnLmpzIj48Y29kZT5jbG9zZXRhZy5qczwvY29kZT48L2E+PC9kdD4KICAgICAgPGRkPlByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBhZGRpbmcgYXV0b21hdGljIHRhZyBjbG9zaW5nCiAgICAgIHRvIFhNTCBtb2Rlcy4gU2VlCiAgICAgIHRoZSA8YSBocmVmPSIuLi9kZW1vL2Nsb3NldGFnLmh0bWwiPmRlbW88L2E+LjwvZGQ+CiAgICA8L2RsPgoKICAgIDxoMiBpZD0ibW9kZWFwaSI+V3JpdGluZyBDb2RlTWlycm9yIE1vZGVzPC9oMj4KCiAgICA8cD5Nb2RlcyB0eXBpY2FsbHkgY29uc2lzdCBvZiBhIHNpbmdsZSBKYXZhU2NyaXB0IGZpbGUuIFRoaXMgZmlsZQogICAgZGVmaW5lcywgaW4gdGhlIHNpbXBsZXN0IGNhc2UsIGEgbGV4ZXIgKHRva2VuaXplcikgZm9yIHlvdXIKICAgIGxhbmd1YWdl4oCUYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2hhcmFjdGVyIHN0cmVhbSBhcyBpbnB1dCwKICAgIGFkdmFuY2VzIGl0IHBhc3QgYSB0b2tlbiwgYW5kIHJldHVybnMgYSBzdHlsZSBmb3IgdGhhdCB0b2tlbi4gTW9yZQogICAgYWR2YW5jZWQgbW9kZXMgY2FuIGFsc28gaGFuZGxlIGluZGVudGF0aW9uIGZvciB0aGUgbGFuZ3VhZ2UuPC9wPgoKICAgIDxwIGlkPSJkZWZpbmVNb2RlIj5UaGUgbW9kZSBzY3JpcHQgc2hvdWxkCiAgICBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lTW9kZTwvY29kZT4gdG8gcmVnaXN0ZXIgaXRzZWxmIHdpdGgKICAgIENvZGVNaXJyb3IuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cy4gVGhlIGZpcnN0IHNob3VsZCBiZQogICAgdGhlIG5hbWUgb2YgdGhlIG1vZGUsIGZvciB3aGljaCB5b3Ugc2hvdWxkIHVzZSBhIGxvd2VyY2FzZSBzdHJpbmcsCiAgICBwcmVmZXJhYmx5IG9uZSB0aGF0IGlzIGFsc28gdGhlIG5hbWUgb2YgdGhlIGZpbGVzIHRoYXQgZGVmaW5lIHRoZQogICAgbW9kZSAoaS5lLiA8Y29kZT4ieG1sIjwvY29kZT4gaXMgZGVmaW5lZCA8Y29kZT54bWwuanM8L2NvZGU+KS4gVGhlCiAgICBzZWNvbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdCwgZ2l2ZW4gYSBDb2RlTWlycm9yCiAgICBjb25maWd1cmF0aW9uIG9iamVjdCAodGhlIHRoaW5nIHBhc3NlZCB0bwogICAgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uKSBhbmQgYW4gb3B0aW9uYWwgbW9kZQogICAgY29uZmlndXJhdGlvbiBvYmplY3QgKGFzIGluCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4gb3B0aW9uKSwgcmV0dXJucwogICAgYSBtb2RlIG9iamVjdC48L3A+CgogICAgPHA+VHlwaWNhbGx5LCB5b3Ugc2hvdWxkIHVzZSB0aGlzIHNlY29uZCBhcmd1bWVudAogICAgdG8gPGNvZGU+ZGVmaW5lTW9kZTwvY29kZT4gYXMgeW91ciBtb2R1bGUgc2NvcGUgZnVuY3Rpb24gKG1vZGVzCiAgICBzaG91bGQgbm90IGxlYWsgYW55dGhpbmcgaW50byB0aGUgZ2xvYmFsIHNjb3BlISksIGkuZS4gd3JpdGUgeW91cgogICAgd2hvbGUgbW9kZSBpbnNpZGUgdGhpcyBmdW5jdGlvbi48L3A+CgogICAgPHA+VGhlIG1haW4gcmVzcG9uc2liaWxpdHkgb2YgYSBtb2RlIHNjcmlwdCBpcyA8ZW0+cGFyc2luZzwvZW0+CiAgICB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yLiBEZXBlbmRpbmcgb24gdGhlIGxhbmd1YWdlIGFuZCB0aGUKICAgIGFtb3VudCBvZiBmdW5jdGlvbmFsaXR5IGRlc2lyZWQsIHRoaXMgY2FuIGJlIGRvbmUgaW4gcmVhbGx5IGVhc3kKICAgIG9yIGV4dHJlbWVseSBjb21wbGljYXRlZCB3YXlzLiBTb21lIHBhcnNlcnMgY2FuIGJlIHN0YXRlbGVzcywKICAgIG1lYW5pbmcgdGhhdCB0aGV5IGxvb2sgYXQgb25lIGVsZW1lbnQgKDxlbT50b2tlbjwvZW0+KSBvZiB0aGUgY29kZQogICAgYXQgYSB0aW1lLCB3aXRoIG5vIG1lbW9yeSBvZiB3aGF0IGNhbWUgYmVmb3JlLiBNb3N0LCBob3dldmVyLCB3aWxsCiAgICBuZWVkIHRvIHJlbWVtYmVyIHNvbWV0aGluZy4gVGhpcyBpcyBkb25lIGJ5IHVzaW5nIGEgPGVtPnN0YXRlCiAgICBvYmplY3Q8L2VtPiwgd2hpY2ggaXMgYW4gb2JqZWN0IHRoYXQgaXMgYWx3YXlzIHBhc3NlZCB3aGVuCiAgICByZWFkaW5nIGEgdG9rZW4sIGFuZCB3aGljaCBjYW4gYmUgbXV0YXRlZCBieSB0aGUgdG9rZW5pemVyLjwvcD4KCiAgICA8cCBpZD0ic3RhcnRTdGF0ZSI+TW9kZXMgdGhhdCB1c2UgYSBzdGF0ZSBtdXN0IGRlZmluZQogICAgYSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiBtZXRob2Qgb24gdGhlaXIgbW9kZSBvYmplY3QuIFRoaXMgaXMgYQogICAgZnVuY3Rpb24gb2Ygbm8gYXJndW1lbnRzIHRoYXQgcHJvZHVjZXMgYSBzdGF0ZSBvYmplY3QgdG8gYmUgdXNlZAogICAgYXQgdGhlIHN0YXJ0IG9mIGEgZG9jdW1lbnQuPC9wPgoKICAgIDxwIGlkPSJ0b2tlbiI+VGhlIG1vc3QgaW1wb3J0YW50IHBhcnQgb2YgYSBtb2RlIG9iamVjdCBpcwogICAgaXRzIDxjb2RlPnRva2VuKHN0cmVhbSwgc3RhdGUpPC9jb2RlPiBtZXRob2QuIEFsbCBtb2RlcyBtdXN0CiAgICBkZWZpbmUgdGhpcyBtZXRob2QuIEl0IHNob3VsZCByZWFkIG9uZSB0b2tlbiBmcm9tIHRoZSBzdHJlYW0gaXQgaXMKICAgIGdpdmVuIGFzIGFuIGFyZ3VtZW50LCBvcHRpb25hbGx5IHVwZGF0ZSBpdHMgc3RhdGUsIGFuZCByZXR1cm4gYQogICAgc3R5bGUgc3RyaW5nLCBvciA8Y29kZT5udWxsPC9jb2RlPiBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgdG8KICAgIGJlIHN0eWxlZC4gRm9yIHlvdXIgc3R5bGVzLCB5b3UgY2FuIGVpdGhlciB1c2UgdGhlICdzdGFuZGFyZCcgb25lcwogICAgZGVmaW5lZCBpbiB0aGUgdGhlbWVzICh3aXRob3V0IHRoZSA8Y29kZT5jbS08L2NvZGU+IHByZWZpeCksIG9yCiAgICBkZWZpbmUgeW91ciBvd24gKGFzIHRoZSA8YSBocmVmPSIuLi9tb2RlL2RpZmYvaW5kZXguaHRtbCI+ZGlmZjwvYT4KICAgIG1vZGUgZG9lcykgYW5kIGhhdmUgcGVvcGxlIGluY2x1ZGUgYSBjdXN0b20gQ1NTIGZpbGUgZm9yIHlvdXIKICAgIG1vZGUuPHA+CgogICAgPHAgaWQ9IlN0cmluZ1N0cmVhbSI+VGhlIHN0cmVhbSBvYmplY3QgZW5jYXBzdWxhdGVzIGEgbGluZSBvZiBjb2RlCiAgICAodG9rZW5zIG1heSBuZXZlciBzcGFuIGxpbmVzKSBhbmQgb3VyIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhhdAogICAgbGluZS4gSXQgaGFzIHRoZSBmb2xsb3dpbmcgQVBJOjwvcD4KCiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT5lb2woKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHN0cmVhbSBpcyBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5zb2woKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0cnVlIG9ubHkgaWYgdGhlIHN0cmVhbSBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlCiAgICAgIGxpbmUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5wZWVrKCkg4oaSIGNoYXJhY3RlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSB3aXRob3V0IGFkdmFuY2luZwogICAgICBpdC4gV2lsbCByZXR1cm4gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiBhdCB0aGUgZW5kIG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5uZXh0KCkg4oaSIGNoYXJhY3RlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSBhbmQgYWR2YW5jZXMgaXQuCiAgICAgIEFsc28gcmV0dXJucyA8Y29kZT51bmRlZmluZWQ8L2NvZGU+IHdoZW4gbm8gbW9yZSBjaGFyYWN0ZXJzIGFyZQogICAgICBhdmFpbGFibGUuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5lYXQobWF0Y2gpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPjxjb2RlPm1hdGNoPC9jb2RlPiBjYW4gYmUgYSBjaGFyYWN0ZXIsIGEgcmVndWxhciBleHByZXNzaW9uLAogICAgICBvciBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBjaGFyYWN0ZXIgYW5kIHJldHVybnMgYSBib29sZWFuLiBJZgogICAgICB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIHN0cmVhbSAnbWF0Y2hlcycgdGhlIGdpdmVuIGFyZ3VtZW50LAogICAgICBpdCBpcyBjb25zdW1lZCBhbmQgcmV0dXJuZWQuIE90aGVyd2lzZSwgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPgogICAgICBpcyByZXR1cm5lZC48L2RkPgogICAgICA8ZHQ+PGNvZGU+ZWF0V2hpbGUobWF0Y2gpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXBlYXRlZGx5IGNhbGxzIDxjb2RlPmVhdDwvY29kZT4gd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnQsCiAgICAgIHVudGlsIGl0IGZhaWxzLiBSZXR1cm5zIHRydWUgaWYgYW55IGNoYXJhY3RlcnMgd2VyZSBlYXRlbi48L2RkPgogICAgICA8ZHQ+PGNvZGU+ZWF0U3BhY2UoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+U2hvcnRjdXQgZm9yIDxjb2RlPmVhdFdoaWxlPC9jb2RlPiB3aGVuIG1hdGNoaW5nCiAgICAgIHdoaXRlLXNwYWNlLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5za2lwVG9FbmQoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+TW92ZXMgdGhlIHBvc2l0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPnNraXBUbyhjaCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlNraXBzIHRvIHRoZSBuZXh0IG9jY3VycmVuY2Ugb2YgdGhlIGdpdmVuIGNoYXJhY3RlciwgaWYKICAgICAgZm91bmQgb24gdGhlIGN1cnJlbnQgbGluZSAoZG9lc24ndCBhZHZhbmNlIHRoZSBzdHJlYW0gaWYgdGhlCiAgICAgIGNoYXJhY3RlciBkb2VzIG5vdCBvY2N1ciBvbiB0aGUgbGluZSkuIFJldHVybnMgdHJ1ZSBpZiB0aGUKICAgICAgY2hhcmFjdGVyIHdhcyBmb3VuZC48L2RkPgogICAgICA8ZHQ+PGNvZGU+bWF0Y2gocGF0dGVybiwgY29uc3VtZSwgY2FzZUZvbGQpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BY3QgbGlrZSBhCiAgICAgIG11bHRpLWNoYXJhY3RlciA8Y29kZT5lYXQ8L2NvZGU+4oCUaWYgPGNvZGU+Y29uc3VtZTwvY29kZT4gaXMgdHJ1ZQogICAgICBvciBub3QgZ2l2ZW7igJRvciBhIGxvb2stYWhlYWQgdGhhdCBkb2Vzbid0IHVwZGF0ZSB0aGUgc3RyZWFtCiAgICAgIHBvc2l0aW9u4oCUaWYgaXQgaXMgZmFsc2UuIDxjb2RlPnBhdHRlcm48L2NvZGU+IGNhbiBiZSBlaXRoZXIgYQogICAgICBzdHJpbmcgb3IgYSByZWd1bGFyIGV4cHJlc3Npb24gc3RhcnRpbmcgd2l0aCA8Y29kZT5ePC9jb2RlPi4KICAgICAgV2hlbiBpdCBpcyBhIHN0cmluZywgPGNvZGU+Y2FzZUZvbGQ8L2NvZGU+IGNhbiBiZSBzZXQgdG8gdHJ1ZSB0bwogICAgICBtYWtlIHRoZSBtYXRjaCBjYXNlLWluc2Vuc2l0aXZlLiBXaGVuIHN1Y2Nlc3NmdWxseSBtYXRjaGluZyBhCiAgICAgIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgdGhlIGFycmF5CiAgICAgIHJldHVybmVkIGJ5IDxjb2RlPm1hdGNoPC9jb2RlPiwgaW4gY2FzZSB5b3UgbmVlZCB0byBleHRyYWN0CiAgICAgIG1hdGNoZWQgZ3JvdXBzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+YmFja1VwKG4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5CYWNrcyB1cCB0aGUgc3RyZWFtIDxjb2RlPm48L2NvZGU+IGNoYXJhY3RlcnMuIEJhY2tpbmcgaXQgdXAKICAgICAgZnVydGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGUgY3VycmVudCB0b2tlbiB3aWxsIGNhdXNlIHRoaW5ncyB0bwogICAgICBicmVhaywgc28gYmUgY2FyZWZ1bC48L2RkPgogICAgICA8ZHQ+PGNvZGU+Y29sdW1uKCkg4oaSIGludGVnZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIGNvbHVtbiAodGFraW5nIGludG8gYWNjb3VudCB0YWJzKSBhdCB3aGljaCB0aGUKICAgICAgY3VycmVudCB0b2tlbiBzdGFydHMuIENhbiBiZSB1c2VkIHRvIGZpbmQgb3V0IHdoZXRoZXIgYSB0b2tlbgogICAgICBzdGFydHMgYSBuZXcgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+aW5kZW50YXRpb24oKSDihpIgaW50ZWdlcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VGVsbHMgeW91IGhvdyBmYXIgdGhlIGN1cnJlbnQgbGluZSBoYXMgYmVlbiBpbmRlbnRlZCwgaW4KICAgICAgc3BhY2VzLiBDb3JyZWN0cyBmb3IgdGFiIGNoYXJhY3RlcnMuPC9kZD4KCiAgICAgIDxkdD48Y29kZT5jdXJyZW50KCkg4oaSIHN0cmluZzwvY29kZT48L2R0PgogICAgICA8ZGQ+R2V0IHRoZSBzdHJpbmcgYmV0d2VlbiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdG9rZW4gYW5kCiAgICAgIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbi48L2RkPgogICAgPC9kbD4KCiAgICA8cCBpZD0iYmxhbmtMaW5lIj5CeSBkZWZhdWx0LCBibGFuayBsaW5lcyBhcmUgc2ltcGx5IHNraXBwZWQgd2hlbgogICAgdG9rZW5pemluZyBhIGRvY3VtZW50LiBGb3IgbGFuZ3VhZ2VzIHRoYXQgaGF2ZSBzaWduaWZpY2FudCBibGFuawogICAgbGluZXMsIHlvdSBjYW4gZGVmaW5lIGEgPGNvZGU+YmxhbmtMaW5lKHN0YXRlKTwvY29kZT4gbWV0aG9kIG9uCiAgICB5b3VyIG1vZGUgdGhhdCB3aWxsIGdldCBjYWxsZWQgd2hlbmV2ZXIgYSBibGFuayBsaW5lIGlzIHBhc3NlZAogICAgb3Zlciwgc28gdGhhdCBpdCBjYW4gdXBkYXRlIHRoZSBwYXJzZXIgc3RhdGUuPC9wPgoKICAgIDxwIGlkPSJjb3B5U3RhdGUiPkJlY2F1c2Ugc3RhdGUgb2JqZWN0IGFyZSBtdXRhdGVkLCBhbmQgQ29kZU1pcnJvcgogICAgbmVlZHMgdG8ga2VlcCB2YWxpZCB2ZXJzaW9ucyBvZiBhIHN0YXRlIGFyb3VuZCBzbyB0aGF0IGl0IGNhbgogICAgcmVzdGFydCBhIHBhcnNlIGF0IGFueSBsaW5lLCBjb3BpZXMgbXVzdCBiZSBtYWRlIG9mIHN0YXRlIG9iamVjdHMuCiAgICBUaGUgZGVmYXVsdCBhbGdvcml0aG0gdXNlZCBpcyB0aGF0IGEgbmV3IHN0YXRlIG9iamVjdCBpcyBjcmVhdGVkLAogICAgd2hpY2ggZ2V0cyBhbGwgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG9sZCBvYmplY3QuIEFueSBwcm9wZXJ0aWVzCiAgICB3aGljaCBob2xkIGFycmF5cyBnZXQgYSBjb3B5IG9mIHRoZXNlIGFycmF5cyAoc2luY2UgYXJyYXlzIHRlbmQgdG8KICAgIGJlIHVzZWQgYXMgbXV0YWJsZSBzdGFja3MpLiBXaGVuIHRoaXMgaXMgbm90IGNvcnJlY3QsIGZvciBleGFtcGxlCiAgICBiZWNhdXNlIGEgbW9kZSBtdXRhdGVzIG5vbi1hcnJheSBwcm9wZXJ0aWVzIG9mIGl0cyBzdGF0ZSBvYmplY3QsIGEKICAgIG1vZGUgb2JqZWN0IHNob3VsZCBkZWZpbmUgYSA8Y29kZT5jb3B5U3RhdGU8L2NvZGU+IG1ldGhvZCwKICAgIHdoaWNoIGlzIGdpdmVuIGEgc3RhdGUgYW5kIHNob3VsZCByZXR1cm4gYSBzYWZlIGNvcHkgb2YgdGhhdAogICAgc3RhdGUuPC9wPgoKICAgIDxwIGlkPSJjb21wYXJlU3RhdGVzIj5CeSBkZWZhdWx0LCBDb2RlTWlycm9yIHdpbGwgc3RvcCByZS1wYXJzaW5nCiAgICBhIGRvY3VtZW50IGFzIHNvb24gYXMgaXQgZW5jb3VudGVycyBhIGZldyBsaW5lcyB0aGF0IHdlcmUKICAgIGhpZ2hsaWdodGVkIHRoZSBzYW1lIGluIHRoZSBvbGQgcGFyc2UgYXMgaW4gdGhlIG5ldyBvbmUuIEl0IGlzCiAgICBwb3NzaWJsZSB0byBwcm92aWRlIGFuIGV4cGxpY2l0IHdheSB0byB0ZXN0IHdoZXRoZXIgYSBzdGF0ZSBpcwogICAgZXF1aXZhbGVudCB0byBhbm90aGVyIG9uZSwgd2hpY2ggQ29kZU1pcnJvciB3aWxsIHVzZSAoaW5zdGVhZCBvZgogICAgdGhlIHVuY2hhbmdlZC1saW5lcyBoZXVyaXN0aWMpIHRvIGRlY2lkZSB3aGVuIHRvIHN0b3AKICAgIGhpZ2hsaWdodGluZy4gWW91IGRvIHRoaXMgYnkgcHJvdmlkaW5nCiAgICBhIDxjb2RlPmNvbXBhcmVTdGF0ZXM8L2NvZGU+IG1ldGhvZCBvbiB5b3VyIG1vZGUgb2JqZWN0LCB3aGljaAogICAgdGFrZXMgdHdvIHN0YXRlIGFyZ3VtZW50cyBhbmQgcmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyCiAgICB0aGV5IGFyZSBlcXVpdmFsZW50LiBTZWUgdGhlIFhNTCBtb2RlLCB3aGljaCB1c2VzIHRoaXMgdG8gcHJvdmlkZQogICAgcmVsaWFibGUgaGlnaGxpZ2h0aW5nIG9mIGJhZCBjbG9zaW5nIHRhZ3MsIGFzIGFuIGV4YW1wbGUuPC9wPgoKICAgIDxwIGlkPSJpbmRlbnQiPklmIHlvdSB3YW50IHlvdXIgbW9kZSB0byBwcm92aWRlIHNtYXJ0IGluZGVudGF0aW9uCiAgICAodGhvdWdoIHRoZSA8YSBocmVmPSIjaW5kZW50TGluZSI+PGNvZGU+aW5kZW50TGluZTwvY29kZT48L2E+CiAgICBtZXRob2QgYW5kIHRoZSA8Y29kZT5pbmRlbnRBdXRvPC9jb2RlPgogICAgYW5kIDxjb2RlPm5ld2xpbmVBbmRJbmRlbnQ8L2NvZGU+IGNvbW1hbmRzLCB3aGljaCBrZXlzIGNhbiBiZQogICAgPGEgaHJlZj0iI29wdGlvbl9leHRyYUtleXMiPmJvdW5kPC9hPiB0byksIHlvdSBtdXN0IGRlZmluZQogICAgYW4gPGNvZGU+aW5kZW50KHN0YXRlLCB0ZXh0QWZ0ZXIpPC9jb2RlPiBtZXRob2Qgb24geW91ciBtb2RlCiAgICBvYmplY3QuPC9wPgoKICAgIDxwPlRoZSBpbmRlbnRhdGlvbiBtZXRob2Qgc2hvdWxkIGluc3BlY3QgdGhlIGdpdmVuIHN0YXRlIG9iamVjdCwKICAgIGFuZCBvcHRpb25hbGx5IHRoZSA8Y29kZT50ZXh0QWZ0ZXI8L2NvZGU+IHN0cmluZywgd2hpY2ggY29udGFpbnMKICAgIHRoZSB0ZXh0IG9uIHRoZSBsaW5lIHRoYXQgaXMgYmVpbmcgaW5kZW50ZWQsIGFuZCByZXR1cm4gYW4KICAgIGludGVnZXIsIHRoZSBhbW91bnQgb2Ygc3BhY2VzIHRvIGluZGVudC4gSXQgc2hvdWxkIHVzdWFsbHkgdGFrZQogICAgdGhlIDxhIGhyZWY9IiNvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdDwvY29kZT48L2E+CiAgICBvcHRpb24gaW50byBhY2NvdW50LjwvcD4KCiAgICA8cCBpZD0iZWxlY3RyaWNDaGFycyI+RmluYWxseSwgYSBtb2RlIG1heSBkZWZpbmUKICAgIGFuIDxjb2RlPmVsZWN0cmljQ2hhcnM8L2NvZGU+IHByb3BlcnR5LCB3aGljaCBzaG91bGQgaG9sZCBhIHN0cmluZwogICAgY29udGFpbmluZyBhbGwgdGhlIGNoYXJhY3RlcnMgdGhhdCBzaG91bGQgdHJpZ2dlciB0aGUgYmVoYXZpb3VyCiAgICBkZXNjcmliZWQgZm9yCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9lbGVjdHJpY0NoYXJzIj48Y29kZT5lbGVjdHJpY0NoYXJzPC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L3A+CgogICAgPHA+U28sIHRvIHN1bW1hcml6ZSwgYSBtb2RlIDxlbT5tdXN0PC9lbT4gcHJvdmlkZQogICAgYSA8Y29kZT50b2tlbjwvY29kZT4gbWV0aG9kLCBhbmQgaXQgPGVtPm1heTwvZW0+CiAgICBwcm92aWRlIDxjb2RlPnN0YXJ0U3RhdGU8L2NvZGU+LCA8Y29kZT5jb3B5U3RhdGU8L2NvZGU+LAogICAgPGNvZGU+Y29tcGFyZVN0YXRlczwvY29kZT4sIGFuZCA8Y29kZT5pbmRlbnQ8L2NvZGU+IG1ldGhvZHMuIEZvcgogICAgYW4gZXhhbXBsZSBvZiBhIHRyaXZpYWwgbW9kZSwgc2VlCiAgICB0aGUgPGEgaHJlZj0iLi4vbW9kZS9kaWZmL2RpZmYuanMiPmRpZmYgbW9kZTwvYT4sIGZvciBhIG1vcmUgaW52b2x2ZWQKICAgIGV4YW1wbGUsIHNlZSB0aGUgPGEgaHJlZj0iLi4vbW9kZS9jbGlrZS9jbGlrZS5qcyI+Qy1saWtlCiAgICBtb2RlPC9hPi48L3A+CgogICAgPHA+U29tZXRpbWVzLCBpdCBpcyB1c2VmdWwgZm9yIG1vZGVzIHRvIDxlbT5uZXN0PC9lbT7igJR0byBoYXZlIG9uZQogICAgbW9kZSBkZWxlZ2F0ZSB3b3JrIHRvIGFub3RoZXIgbW9kZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGtpbmQgb2YKICAgIG1vZGUgaXMgdGhlIDxhIGhyZWY9Ii4uL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcyI+bWl4ZWQtbW9kZSBIVE1MCiAgICBtb2RlPC9hPi4gVG8gaW1wbGVtZW50IHN1Y2ggbmVzdGluZywgaXQgaXMgdXN1YWxseSBuZWNlc3NhcnkgdG8KICAgIGNyZWF0ZSBtb2RlIG9iamVjdHMgYW5kIGNvcHkgc3RhdGVzIHlvdXJzZWxmLiBUbyBjcmVhdGUgYSBtb2RlCiAgICBvYmplY3QsIHRoZXJlIGFyZSA8Y29kZT5Db2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywKICAgIHBhcnNlckNvbmZpZyk8L2NvZGU+LCB3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgcGFzc2VkIHRvIHRoZSBtb2RlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBhbmQgdGhlIHNlY29uZAogICAgYXJndW1lbnQgaXMgYSBtb2RlIHNwZWNpZmljYXRpb24gYXMgaW4KICAgIHRoZSA8YSBocmVmPSIjb3B0aW9uX21vZGUiPjxjb2RlPm1vZGU8L2NvZGU+PC9hPiBvcHRpb24uIFRvIGNvcHkgYQogICAgc3RhdGUgb2JqZWN0LCBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuY29weVN0YXRlKG1vZGUsIHN0YXRlKTwvY29kZT4sCiAgICB3aGVyZSA8Y29kZT5tb2RlPC9jb2RlPiBpcyB0aGUgbW9kZSB0aGF0IGNyZWF0ZWQgdGhlIGdpdmVuCiAgICBzdGF0ZS48L3A+CgogICAgPHA+VG8gbWFrZSBpbmRlbnRhdGlvbiB3b3JrIHByb3Blcmx5IGluIGEgbmVzdGVkIHBhcnNlciwgaXQgaXMKICAgIGFkdmlzYWJsZSB0byBnaXZlIHRoZSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiBtZXRob2Qgb2YgbW9kZXMgdGhhdAogICAgYXJlIGludGVuZGVkIHRvIGJlIG5lc3RlZCBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IHByb3ZpZGVzIHRoZQogICAgYmFzZSBpbmRlbnRhdGlvbiBmb3IgdGhlIGJsb2NrIG9mIGNvZGUuIFRoZSBKYXZhU2NyaXB0IGFuZCBDU1MKICAgIHBhcnNlciBkbyB0aGlzLCBmb3IgZXhhbXBsZSwgdG8gYWxsb3cgSmF2YVNjcmlwdCBhbmQgQ1NTIGNvZGUKICAgIGluc2lkZSB0aGUgbWl4ZWQtbW9kZSBIVE1MIG1vZGUgdG8gYmUgcHJvcGVybHkgaW5kZW50ZWQuPC9wPgoKICAgIDxwPkZpbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGFzc29jaWF0ZSB5b3VyIG1vZGUsIG9yIGEgY2VydGFpbgogICAgY29uZmlndXJhdGlvbiBvZiB5b3VyIG1vZGUsIHdpdGgKICAgIGEgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSU1FIj5NSU1FPC9hPiB0eXBlLiBGb3IKICAgIGV4YW1wbGUsIHRoZSBKYXZhU2NyaXB0IG1vZGUgYXNzb2NpYXRlcyBpdHNlbGYKICAgIHdpdGggPGNvZGU+dGV4dC9qYXZhc2NyaXB0PC9jb2RlPiwgYW5kIGl0cyBKU09OIHZhcmlhbnQKICAgIHdpdGggPGNvZGU+YXBwbGljYXRpb24vanNvbjwvY29kZT4uIFRvIGRvIHRoaXMsCiAgICBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lTUlNRShtaW1lLCBtb2RlU3BlYyk8L2NvZGU+LAogICAgd2hlcmUgPGNvZGU+bW9kZVNwZWM8L2NvZGU+IGNhbiBiZSBhIHN0cmluZyBvciBvYmplY3Qgc3BlY2lmeWluZyBhCiAgICBtb2RlLCBhcyBpbiB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJyaWdodHNtYWxsIGJsayI+CgogICAgPGgyPkNvbnRlbnRzPC9oMj4KCiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSIjb3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXNhZ2UiPkJhc2ljIFVzYWdlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjY29uZmlnIj5Db25maWd1cmF0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIja2V5bWFwcyI+S2V5bWFwczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3N0eWxpbmciPkN1c3RvbWl6ZWQgU3R5bGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2FwaSI+UHJvZ3JhbW1pbmcgQVBJPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjYWRkb25zIj5BZGQtb25zPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjbW9kZWFwaSI+V3JpdGluZyBDb2RlTWlycm9yIE1vZGVzPC9hPjwvbGk+CiAgICA8L3VsPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/oldrelease.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIE9sZCByZWxlYXNlIGhpc3RvcnkgKi8KCjwvcHJlPgogIDxwIGNsYXNzPSJyZWwiPjA0LTA3LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTEuemlwIj5WZXJzaW9uIDIuMTE8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWUgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5yZXBsYWNlPC9jb2RlPiBtZXRob2QgdG8gc2VhcmNoIGN1cnNvcnMsIGZvciBjdXJzb3ItcHJlc2VydmluZyByZXBsYWNlbWVudHMuPC9saT4KICAgIDxsaT5NYWtlIHRoZSA8YSBocmVmPSIuLi9tb2RlL2NsaWtlL2luZGV4Lmh0bWwiPkMtbGlrZSBtb2RlPC9hPiBtb2RlIG1vcmUgY3VzdG9taXphYmxlLjwvbGk+CiAgICA8bGk+VXBkYXRlIFhNTCBtb2RlIHRvIHNwb3QgbWlzbWF0Y2hlZCB0YWdzLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPmdldFN0YXRlQWZ0ZXI8L2NvZGU+IEFQSSBhbmQgPGNvZGU+Y29tcGFyZVN0YXRlPC9jb2RlPiBtb2RlIEFQSSBtZXRob2RzIGZvciBmaW5lci1ncmFpbmVkIG1vZGUgbWFnaWMuPC9saT4KICAgIDxsaT5BZGQgYSA8Y29kZT5nZXRTY3JvbGxlckVsZW1lbnQ8L2NvZGU+IEFQSSBtZXRob2QgdG8gbWFuaXB1bGF0ZSB0aGUgc2Nyb2xsaW5nIERJVi48L2xpPgogICAgPGxpPkZpeCBkcmFnLWFuZC1kcm9wIGZvciBGaXJlZm94LjwvbGk+CiAgICA8bGk+QWRkIGEgQyMgY29uZmlndXJhdGlvbiBmb3IgdGhlIDxhIGhyZWY9Ii4uL21vZGUvY2xpa2UvaW5kZXguaHRtbCI+Qy1saWtlIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Ii4uL2RlbW8vZnVsbHNjcmVlbi5odG1sIj5mdWxsLXNjcmVlbiBlZGl0aW5nPC9hPiBhbmQgPGEgaHJlZj0iLi4vZGVtby9jaGFuZ2Vtb2RlLmh0bWwiPm1vZGUtY2hhbmdpbmc8L2E+IGRlbW9zLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MDctMDYtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xLnppcCI+VmVyc2lvbiAyLjE8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkFkZAogIGEgPGEgaHJlZj0ibWFudWFsLmh0bWwjb3B0aW9uX3RoZW1lIj50aGVtZTwvYT4gc3lzdGVtCiAgKDxhIGhyZWY9Ii4uL2RlbW8vdGhlbWUuaHRtbCI+ZGVtbzwvYT4pLiBOb3RlIHRoYXQgdGhpcyBpcyBub3QKICBiYWNrd2FyZHMtY29tcGF0aWJsZeKAlHlvdSdsbCBoYXZlIHRvIHVwZGF0ZSB5b3VyIHN0eWxlcyBhbmQKICBtb2RlcyE8L3A+CgogIDxwIGNsYXNzPSJyZWwiPjA3LTA2LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMDIuemlwIj5WZXJzaW9uIDIuMDI8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSIuLi9tb2RlL2x1YS9pbmRleC5odG1sIj5MdWEgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5GaXggcmV2ZXJzZS1zZWFyY2hpbmcgZm9yIGEgcmVnZXhwLjwvbGk+CiAgICA8bGk+RW1wdHkgbGluZXMgY2FuIG5vIGxvbmdlciBicmVhayBoaWdobGlnaHRpbmcuPC9saT4KICAgIDxsaT5SZXdvcmsgc2Nyb2xsaW5nIG1vZGVsICh0aGUgb3V0ZXIgd3JhcHBlciBubyBsb25nZXIgZG9lcyB0aGUgc2Nyb2xsaW5nKS48L2xpPgogICAgPGxpPlNvbHZlIGhvcml6b250YWwgaml0dGVyaW5nIG9uIGxvbmcgbGluZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iLi4vZGVtby9ydW5tb2RlLmh0bWwiPnJ1bm1vZGUuanM8L2E+LjwvbGk+CiAgICA8bGk+SW1tZWRpYXRlbHkgcmUtaGlnaGxpZ2h0IHRleHQgd2hlbiB0eXBpbmcuPC9saT4KICAgIDxsaT5GaXggcHJvYmxlbSB3aXRoICdzdGlja2luZycgaG9yaXpvbnRhbCBzY3JvbGxiYXIuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNi0wNS0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjAxLnppcCI+VmVyc2lvbiAyLjAxPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iLi4vbW9kZS9zbWFsbHRhbGsvaW5kZXguaHRtbCI+U21hbGx0YWxrIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iLi4vbW9kZS9yc3QvaW5kZXguaHRtbCI+cmVTdHJ1Y3R1cmVkVGV4dCBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvcHl0aG9uL2luZGV4Lmh0bWwiPlB5dGhvbiBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Ii4uL21vZGUvcGxzcWwvaW5kZXguaHRtbCI+UEwvU1FMIG1vZGU8L2E+LjwvbGk+CiAgICA8bGk+PGNvZGU+Y29vcmRzQ2hhcjwvY29kZT4gbm93IHdvcmtzPC9saT4KICAgIDxsaT5GaXggYSBwcm9ibGVtIHdoZXJlIDxjb2RlPm9uQ3Vyc29yQWN0aXZpdHk8L2NvZGU+IGludGVyZmVyZWQgd2l0aCA8Y29kZT5vbkNoYW5nZTwvY29kZT4uPC9saT4KICAgIDxsaT5GaXggYSBudW1iZXIgb2Ygc2Nyb2xsaW5nIGFuZCBtb3VzZS1jbGljay1wb3NpdGlvbiBnbGl0Y2hlcy48L2xpPgogICAgPGxpPlBhc3MgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNoYW5nZWQgbGluZXMgdG8gPGNvZGU+b25DaGFuZ2U8L2NvZGU+LjwvbGk+CiAgICA8bGk+U3VwcG9ydCBjbWQtdXAvZG93biBvbiBPUyBYLjwvbGk+CiAgICA8bGk+QWRkIHRyaXBsZS1jbGljayBsaW5lIHNlbGVjdGlvbi48L2xpPgogICAgPGxpPkRvbid0IGhhbmRsZSBzaGlmdCB3aGVuIGNoYW5naW5nIHRoZSBzZWxlY3Rpb24gdGhyb3VnaCB0aGUgQVBJLjwvbGk+CiAgICA8bGk+U3VwcG9ydCA8Y29kZT4ibm9jdXJzb3IiPC9jb2RlPiBtb2RlIGZvciA8Y29kZT5yZWFkT25seTwvY29kZT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+QWRkIGFuIDxjb2RlPm9uSGlnaGxpZ2h0Q29tcGxldGU8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkZpeCB0aGUgY29udGV4dCBtZW51IGZvciBGaXJlZm94LjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjgtMDMtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4wLnppcCI+VmVyc2lvbiAyLjA8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkNvZGVNaXJyb3IgMiBpcyBhIGNvbXBsZXRlIHJld3JpdGUgdGhhdCdzCiAgZmFzdGVyLCBzbWFsbGVyLCBzaW1wbGVyIHRvIHVzZSwgYW5kIGxlc3MgZGVwZW5kZW50IG9uIGJyb3dzZXIKICBxdWlya3MuIFNlZSA8YSBocmVmPSJpbnRlcm5hbHMuaHRtbCI+dGhpczwvYT4KICBhbmQgPGEgaHJlZj0iaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2dyb3VwL2NvZGVtaXJyb3IvYnJvd3NlX3RocmVhZC90aHJlYWQvNWE4ZTg5NDAyNGE5ZjU4MCI+dGhpczwvYT4KICBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L2E+CgogIDxwIGNsYXNzPSJyZWwiPjI4LTAzLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTEuMC56aXAiPlZlcnNpb24gMS4wPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+Rml4IGVycm9yIHdoZW4gZGVidWcgaGlzdG9yeSBvdmVyZmxvd3MuPC9saT4KICAgIDxsaT5SZWZpbmUgaGFuZGxpbmcgb2YgQyMgdmVyYmF0aW0gc3RyaW5ncy48L2xpPgogICAgPGxpPkZpeCBzb21lIGlzc3VlcyB3aXRoIEphdmFTY3JpcHQgaW5kZW50YXRpb24uPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yMi0wMi0yMDExOiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbWFyaWpuaC9jb2RlbWlycm9yMi90cmVlL2JldGEyIj5WZXJzaW9uIDIuMCBiZXRhIDI8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPlNvbWV3aGF0IG1vcmUgbWF0dXJlIEFQSSwgbG90cyBvZiBidWdzIHNoYWtlbiBvdXQuPC9hPgoKICA8cCBjbGFzcz0icmVsIj4xNy0wMi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjk0LnppcCI+VmVyc2lvbiAwLjk0PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+PGNvZGU+dGFiTW9kZTogInNwYWNlcyI8L2NvZGU+IHdhcyBtb2RpZmllZCBzbGlnaHRseSAobm93IGluZGVudHMgd2hlbiBzb21ldGhpbmcgaXMgc2VsZWN0ZWQpLjwvbGk+CiAgICA8bGk+Rml4ZXMgYSBidWcgdGhhdCB3b3VsZCBjYXVzZSB0aGUgc2VsZWN0aW9uIGNvZGUgdG8gYnJlYWsgb24gc29tZSBJRSB2ZXJzaW9ucy48L2xpPgogICAgPGxpPkRpc2FibGluZyBzcGVsbC1jaGVjayBvbiBXZWJLaXQgYnJvd3NlcnMgbm93IHdvcmtzLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MDgtMDItMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+VmVyc2lvbiAyLjAgYmV0YSAxPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Db2RlTWlycm9yIDIgaXMgYSBjb21wbGV0ZSByZXdyaXRlIG9mCiAgQ29kZU1pcnJvciwgbm8gbG9uZ2VyIGRlcGVuZGluZyBvbiBhbiBlZGl0YWJsZSBmcmFtZS48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjE5LTAxLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTMuemlwIj5WZXJzaW9uIDAuOTM8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGRlZCBhIDxhIGhyZWY9ImNvbnRyaWIvcmVnZXgvaW5kZXguaHRtbCI+UmVndWxhciBFeHByZXNzaW9uPC9hPiBwYXJzZXIuPC9saT4KICAgIDxsaT5GaXhlcyB0byB0aGUgUEhQIHBhcnNlci48L2xpPgogICAgPGxpPlN1cHBvcnQgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBpbiBzZWFyY2gvcmVwbGFjZS48L2xpPgogICAgPGxpPkFkZCA8Y29kZT5zYXZlPC9jb2RlPiBtZXRob2QgdG8gaW5zdGFuY2VzIGNyZWF0ZWQgd2l0aCA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+LjwvbGk+CiAgICA8bGk+QWRkIHN1cHBvcnQgZm9yIE1TIFQtU1FMIGluIHRoZSBTUUwgcGFyc2VyLjwvbGk+CiAgICA8bGk+U3VwcG9ydCB1c2Ugb2YgQ1NTIGNsYXNzZXMgZm9yIGhpZ2hsaWdodGluZyBicmFja2V0cy48L2xpPgogICAgPGxpPkZpeCB5ZXQgYW5vdGhlciBoYW5nIHdpdGggbGluZS1udW1iZXJpbmcgaW4gaGlkZGVuIGVkaXRvcnMuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4xNy0xMi0yMDEwOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkyLnppcCI+VmVyc2lvbiAwLjkyPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+TWFrZSBDb2RlTWlycm9yIHdvcmsgaW4gWEhUTUwgZG9jdW1lbnRzLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyBpbiBoYW5kbGluZyBvZiBiYWNrc2xhc2hlcyBpbiBQeXRob24gc3RyaW5ncy48L2xpPgogICAgPGxpPlRoZSA8Y29kZT5zdHlsZU51bWJlcnM8L2NvZGU+IG9wdGlvbiBpcyBub3cgb2ZmaWNpYWxseQogICAgc3VwcG9ydGVkIGFuZCBkb2N1bWVudGVkLjwvbGk+CiAgICA8bGk+PGNvZGU+b25MaW5lTnVtYmVyQ2xpY2s8L2NvZGU+IG9wdGlvbiBhZGRlZC48L2xpPgogICAgPGxpPk1vcmUgY29uc2lzdGVudCBuYW1lcyA8Y29kZT5vbkxvYWQ8L2NvZGU+IGFuZAogICAgPGNvZGU+b25DdXJzb3JBY3Rpdml0eTwvY29kZT4gY2FsbGJhY2tzLiBPbGQgbmFtZXMgc3RpbGwgd29yaywgYnV0CiAgICBhcmUgZGVwcmVjYXRlZC48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImNvbnRyaWIvZnJlZW1hcmtlci9pbmRleC5odG1sIj5GcmVlbWFya2VyPC9hPiBtb2RlLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MTEtMTEtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkxLnppcCI+VmVyc2lvbiAwLjkxPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkcyBzdXBwb3J0IGZvciA8YSBocmVmPSJjb250cmliL2phdmEiPkphdmE8L2E+LjwvbGk+CiAgICA8bGk+U21hbGwgYWRkaXRpb25zIHRvIHRoZSA8YSBocmVmPSJjb250cmliL3BocCI+UEhQPC9hPiBhbmQgPGEgaHJlZj0iY29udHJpYi9zcWwiPlNRTDwvYT4gcGFyc2Vycy48L2xpPgogICAgPGxpPldvcmsgYXJvdW5kIHZhcmlvdXMgPGEgaHJlZj0iaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ3ODA2Ij5XZWJraXQ8L2E+IDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzQ3NCI+aXNzdWVzPC9hPi48L2xpPgogICAgPGxpPkZpeCA8Y29kZT50b1RleHRBcmVhPC9jb2RlPiB0byB1cGRhdGUgdGhlIGNvZGUgaW4gdGhlIHRleHRhcmVhLjwvbGk+CiAgICA8bGk+QWRkIGEgPGNvZGU+bm9TY3JpcHRDYWNoaW5nPC9jb2RlPiBvcHRpb24gKGhhY2sgdG8gZWFzZSBkZXZlbG9wbWVudCkuPC9saT4KICAgIDxsaT5NYWtlIHN1Yi1tb2RlcyBvZiA8YSBocmVmPSJtaXhlZHRlc3QuaHRtbCI+SFRNTCBtaXhlZDwvYT4gbW9kZSBjb25maWd1cmFibGUuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4wMi0xMC0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOS56aXAiPlZlcnNpb24gMC45PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIHN1cHBvcnQgZm9yIHNlYXJjaGluZyBiYWNrd2FyZHMuPC9saT4KICAgIDxsaT5UaGVyZSBhcmUgbm93IHBhcnNlcnMgZm9yIDxhIGhyZWY9ImNvbnRyaWIvc2NoZW1lL2luZGV4Lmh0bWwiPlNjaGVtZTwvYT4sIDxhIGhyZWY9ImNvbnRyaWIveHF1ZXJ5L2luZGV4Lmh0bWwiPlhRdWVyeTwvYT4sIGFuZCA8YSBocmVmPSJjb250cmliL29tZXRhL2luZGV4Lmh0bWwiPk9tZXRhSlM8L2E+LjwvbGk+CiAgICA8bGk+TWFrZXMgPGNvZGU+aGVpZ2h0OiAiZHluYW1pYyI8L2NvZGU+IG1vcmUgcm9idXN0LjwvbGk+CiAgICA8bGk+Rml4ZXMgYnVnIHdoZXJlIHBhc3RlIGRpZCBub3Qgd29yayBvbiBPUyBYLjwvbGk+CiAgICA8bGk+QWRkIGEgPGNvZGU+ZW50ZXJNb2RlPC9jb2RlPiBhbmQgPGNvZGU+ZWxlY3RyaWNDaGFyczwvY29kZT4gb3B0aW9ucyB0byBtYWtlIGluZGVudGF0aW9uIGV2ZW4gbW9yZSBjdXN0b21pemFibGUuPC9saT4KICAgIDxsaT5BZGQgPGNvZGU+Zmlyc3RMaW5lTnVtYmVyPC9jb2RlPiBvcHRpb24uPC9saT4KICAgIDxsaT5GaXggYmFkIGhhbmRsaW5nIG9mIDxjb2RlPkBtZWRpYTwvY29kZT4gcnVsZXMgYnkgdGhlIENTUyBwYXJzZXIuPC9saT4KICAgIDxsaT5UYWtlIGEgbmV3LCBtb3JlIHJvYnVzdCBhcHByb2FjaCB0byB3b3JraW5nIGFyb3VuZCB0aGUgaW52aXNpYmxlLWxhc3QtbGluZSBidWcgaW4gV2ViS2l0LjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjItMDctMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjguemlwIj5WZXJzaW9uIDAuODwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxjb2RlPmN1cnNvckNvb3JkczwvY29kZT4gbWV0aG9kIHRvIGZpbmQgdGhlIHNjcmVlbgogICAgY29vcmRpbmF0ZXMgb2YgdGhlIGN1cnNvci48L2xpPgogICAgPGxpPkEgbnVtYmVyIG9mIGZpeGVzIGFuZCBzdXBwb3J0IGZvciBtb3JlIHN5bnRheCBpbiB0aGUgUEhQIHBhcnNlci48L2xpPgogICAgPGxpPkZpeCBpbmRlbnRhdGlvbiBwcm9ibGVtIHdpdGggSlNPTi1tb2RlIEpTIHBhcnNlciBpbiBXZWJraXQuPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJjb21wcmVzcy5odG1sIj5taW5pZmljYXRpb248L2E+IFVJLjwvbGk+CiAgICA8bGk+U3VwcG9ydCBhIDxjb2RlPmhlaWdodDogZHluYW1pYzwvY29kZT4gbW9kZSwgd2hlcmUgdGhlIGVkaXRvcidzCiAgICBoZWlnaHQgd2lsbCBhZGp1c3QgdG8gdGhlIHNpemUgb2YgaXRzIGNvbnRlbnQuPC9saT4KICAgIDxsaT5CZXR0ZXIgc3VwcG9ydCBmb3IgSU1FIGlucHV0IG1vZGUuPC9saT4KICAgIDxsaT5GaXggSmF2YVNjcmlwdCBwYXJzZXIgZ2V0dGluZyBjb25mdXNlZCB3aGVuIHNlZWluZyBhIG5vLWFyZ3VtZW50CiAgICBmdW5jdGlvbiBjYWxsLjwvbGk+CiAgICA8bGk+SGF2ZSBDU1MgcGFyc2VyIHNlZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNlbGVjdG9ycyBhbmQgb3RoZXIKICAgIGlkZW50aWZpZXJzLjwvbGk+CiAgICA8bGk+Rml4IHNjcm9sbGluZyBidWcgd2hlbiBwYXN0aW5nIGluIGEgaG9yaXpvbnRhbGx5LXNjcm9sbGVkCiAgICBlZGl0b3IuPC9saT4KICAgIDxsaT5TdXBwb3J0IDxjb2RlPnRvVGV4dEFyZWE8L2NvZGU+IG1ldGhvZCBpbiBpbnN0YW5jZXMgY3JlYXRlZCB3aXRoCiAgICA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+LjwvbGk+CiAgICA8bGk+V29yayBhcm91bmQgbmV3IE9wZXJhIGN1cnNvciBidWcgdGhhdCBjYXVzZXMgdGhlIGN1cnNvciB0byBqdW1wCiAgICB3aGVuIHByZXNzaW5nIGJhY2tzcGFjZSBhdCB0aGUgZW5kIG9mIGEgbGluZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI3LTA0LTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42Ny56aXAiPlZlcnNpb24KICAwLjY3PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Nb3JlIGNvbnNpc3RlbnQgcGFnZS11cC9wYWdlLWRvd24gYmVoYXZpb3VyCiAgYWNyb3NzIGJyb3dzZXJzLiBGaXggc29tZSBpc3N1ZXMgd2l0aCBoaWRkZW4gZWRpdG9ycyBsb29waW5nIGZvcmV2ZXIKICB3aGVuIGxpbmUtbnVtYmVycyB3ZXJlIGVuYWJsZWQuIE1ha2UgUEhQIHBhcnNlciBwYXJzZQogIDxjb2RlPiJcXCI8L2NvZGU+IGNvcnJlY3RseS4gSGF2ZSA8Y29kZT5qdW1wVG9MaW5lPC9jb2RlPiB3b3JrIG9uCiAgbGluZSBoYW5kbGVzLCBhbmQgYWRkIDxjb2RlPmN1cnNvckxpbmU8L2NvZGU+IGZ1bmN0aW9uIHRvIGZldGNoIHRoZQogIGxpbmUgaGFuZGxlIHdoZXJlIHRoZSBjdXJzb3IgY3VycmVudGx5IGlzLiBBZGQgbmV3CiAgPGNvZGU+c2V0U3R5bGVzaGVldDwvY29kZT4gZnVuY3Rpb24gdG8gc3dpdGNoIHN0eWxlLXNoZWV0cyBpbiBhCiAgcnVubmluZyBlZGl0b3IuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4wMS0wMy0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjYuemlwIj5WZXJzaW9uCiAgMC42NjwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+QWRkcyA8Y29kZT5yZW1vdmVMaW5lPC9jb2RlPiBtZXRob2QgdG8gQVBJLgogIEludHJvZHVjZXMgdGhlIDxhIGhyZWY9ImNvbnRyaWIvcGxzcWwvaW5kZXguaHRtbCI+UExTUUwgcGFyc2VyPC9hPi4KICBNYXJrcyBYTUwgZXJyb3JzIGJ5IGFkZGluZyAocmF0aGVyIHRoYW4gcmVwbGFjaW5nKSBhIENTUyBjbGFzcywgc28KICB0aGF0IHRoZXkgY2FuIGJlIGRpc2FibGVkIGJ5IG1vZGlmeWluZyB0aGVpciBzdHlsZS4gRml4ZXMgc2V2ZXJhbAogIHNlbGVjdGlvbiBidWdzLCBhbmQgYSBudW1iZXIgb2Ygc21hbGwgZ2xpdGNoZXMuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4xMi0xMS0yMDA5OiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjUuemlwIj5WZXJzaW9uCiAgMC42NTwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+QWRkIHN1cHBvcnQgZm9yIGhhdmluZyBib3RoIGxpbmUtd3JhcHBpbmcgYW5kCiAgbGluZS1udW1iZXJzIHR1cm5lZCBvbiwgbWFrZSBwYXJlbi1oaWdobGlnaHRpbmcgc3R5bGUgY3VzdG9taXNhYmxlCiAgKDxjb2RlPm1hcmtQYXJlbjwvY29kZT4gYW5kIDxjb2RlPnVubWFya1BhcmVuPC9jb2RlPiBjb25maWcKICBvcHRpb25zKSwgd29yayBhcm91bmQgYSBzZWxlY3Rpb24gYnVnIHRoYXQgT3BlcmEKICA8ZW0+cmU8L2VtPmludHJvZHVjZWQgaW4gdmVyc2lvbiAxMC48L3A+CgogIDxwIGNsYXNzPSJyZWwiPjIzLTEwLTIwMDk6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42NC56aXAiPlZlcnNpb24KICAwLjY0PC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Tb2x2ZXMgc29tZSBpc3N1ZXMgaW50cm9kdWNlZCBieSB0aGUKICBwYXN0ZS1oYW5kbGluZyBjaGFuZ2VzIGZyb20gdGhlIHByZXZpb3VzIHJlbGVhc2UuIEFkZHMKICA8Y29kZT5zZXRTcGVsbGNoZWNrPC9jb2RlPiwgPGNvZGU+c2V0VGV4dFdyYXBwaW5nPC9jb2RlPiwKICA8Y29kZT5zZXRJbmRlbnRVbml0PC9jb2RlPiwgPGNvZGU+c2V0VW5kb0RlcHRoPC9jb2RlPiwKICA8Y29kZT5zZXRUYWJNb2RlPC9jb2RlPiwgYW5kIDxjb2RlPnNldExpbmVOdW1iZXJzPC9jb2RlPiB0bwogIGN1c3RvbWlzZSBhIHJ1bm5pbmcgZWRpdG9yLiBJbnRyb2R1Y2VzIGFuIDxhCiAgaHJlZj0iY29udHJpYi9zcWwvaW5kZXguaHRtbCI+U1FMPC9hPiBwYXJzZXIuIEZpeGVzIGEgZmV3IHNtYWxsCiAgcHJvYmxlbXMgaW4gdGhlIDxhIGhyZWY9ImNvbnRyaWIvcHl0aG9uL2luZGV4Lmh0bWwiPlB5dGhvbjwvYT4KICBwYXJzZXIuIEFuZCwgYXMgdXN1YWwsIGFkZCB3b3JrYXJvdW5kcyBmb3IgdmFyaW91cyBuZXdseSBkaXNjb3ZlcmVkCiAgYnJvd3NlciBpbmNvbXBhdGliaWxpdGllcy48L3A+Cgo8cCBjbGFzcz0icmVsIj48ZW0+MzEtMDgtMjAwOTwvZW0+OiA8YQpocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjYzLnppcCI+VmVyc2lvbgowLjYzPC9hPjo8L3A+CjxwIGNsYXNzPSJyZWwtbm90ZSI+IE92ZXJoYXVsIG9mIHBhc3RlLWhhbmRsaW5nIChsZXNzIGZyYWdpbGUpLCBmaXhlcyBmb3Igc2V2ZXJhbApzZXJpb3VzIElFOCBpc3N1ZXMgKGN1cnNvciBqdW1waW5nLCBlbmQtb2YtZG9jdW1lbnQgYnVncykgYW5kIGEgbnVtYmVyCm9mIHNtYWxsIHByb2JsZW1zLjwvcD4KCjxwIGNsYXNzPSJyZWwiPjxlbT4zMC0wNS0yMDA5PC9lbT46IDxhCmhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjIuemlwIj5WZXJzaW9uCjAuNjI8L2E+OjwvcD4KPHAgY2xhc3M9InJlbC1ub3RlIj5JbnRyb2R1Y2VzIDxhIGhyZWY9ImNvbnRyaWIvcHl0aG9uL2luZGV4Lmh0bWwiPlB5dGhvbjwvYT4KYW5kIDxhIGhyZWY9ImNvbnRyaWIvbHVhL2luZGV4Lmh0bWwiPkx1YTwvYT4gcGFyc2Vycy4gQWRkCjxjb2RlPnNldFBhcnNlcjwvY29kZT4gKG9uLXRoZS1mbHkgbW9kZSBjaGFuZ2luZykgYW5kCjxjb2RlPmNsZWFySGlzdG9yeTwvY29kZT4gbWV0aG9kcy4gTWFrZSBwYXJzaW5nIHBhc3NlcyB0aW1lLWJhc2VkCmluc3RlYWQgb2YgbGluZXMtYmFzZWQgKHNlZSB0aGUgPGNvZGU+cGFzc1RpbWU8L2NvZGU+IG9wdGlvbikuPC9wPgoKPC9ib2R5PjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/reporting.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJlcG9ydGluZyBCdWdzPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5saSB7IG1hcmdpbi10b3A6IDFlbTsgfTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImJhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBSZXBvcnRpbmcgYnVncwogICBlZmZlY3RpdmVseSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+U28geW91IGZvdW5kIGEgcHJvYmxlbSBpbiBDb2RlTWlycm9yLiBCeSBhbGwgbWVhbnMsIHJlcG9ydCBpdCEgQnVnCnJlcG9ydHMgZnJvbSB1c2VycyBhcmUgdGhlIG1haW4gZHJpdmUgYmVoaW5kIGltcHJvdmVtZW50cyB0bwpDb2RlTWlycm9yLiBCdXQgZmlyc3QsIHBsZWFzZSByZWFkIG92ZXIgdGhlc2UgcG9pbnRzOjwvcD4KCjxvbD4KICA8bGk+Q29kZU1pcnJvciBpcyBtYWludGFpbmVkIGJ5IHZvbHVudGVlcnMuIFRoZXkgZG9uJ3Qgb3dlIHlvdQogIGFueXRoaW5nLCBzbyBiZSBwb2xpdGUuIFJlcG9ydHMgd2l0aCBhbiBpbmRpZ25hbnQgb3IgYmVsbGlnZXJlbnQKICB0b25lIHRlbmQgdG8gYmUgbW92ZWQgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGlsZS48L2xpPgoKICA8bGk+SW5jbHVkZSBpbmZvcm1hdGlvbiBhYm91dCA8c3Ryb25nPnRoZSBicm93c2VyIGluIHdoaWNoIHRoZQogIHByb2JsZW0gb2NjdXJyZWQ8L3N0cm9uZz4uIEV2ZW4gaWYgeW91IHRlc3RlZCBzZXZlcmFsIGJyb3dzZXJzLCBhbmQKICB0aGUgcHJvYmxlbSBvY2N1cnJlZCBpbiBhbGwgb2YgdGhlbSwgbWVudGlvbiB0aGlzIGZhY3QgaW4gdGhlIGJ1ZwogIHJlcG9ydC4gQWxzbyBpbmNsdWRlIGJyb3dzZXIgdmVyc2lvbiBudW1iZXJzIGFuZCB0aGUgb3BlcmF0aW5nCiAgc3lzdGVtIHRoYXQgeW91J3JlIG9uLjwvbGk+CgogIDxsaT5NZW50aW9uIHdoaWNoIHJlbGVhc2Ugb2YgQ29kZU1pcnJvciB5b3UncmUgdXNpbmcuIFByZWZlcmFibHksCiAgdHJ5IGFsc28gd2l0aCB0aGUgY3VycmVudCBkZXZlbG9wbWVudCBzbmFwc2hvdCwgdG8gZW5zdXJlIHRoZQogIHByb2JsZW0gaGFzIG5vdCBhbHJlYWR5IGJlZW4gZml4ZWQuPC9saT4KCiAgPGxpPk1lbnRpb24gdmVyeSBwcmVjaXNlbHkgd2hhdCB3ZW50IHdyb25nLiAiWCBpcyBicm9rZW4iIGlzIG5vdCBhCiAgZ29vZCBidWcgcmVwb3J0LiBXaGF0IGRpZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj8gV2hhdCBoYXBwZW5lZAogIGluc3RlYWQ/IERlc2NyaWJlIHRoZSBleGFjdCBzdGVwcyBhIG1haW50YWluZXIgaGFzIHRvIHRha2UgdG8gbWFrZQogIHRoZSBwcm9ibGVtIG9jY3VyLiBXZSBjYW4gbm90IGZpeCBzb21ldGhpbmcgdGhhdCB3ZSBjYW4gbm90CiAgb2JzZXJ2ZS48L2xpPgoKICA8bGk+SWYgdGhlIHByb2JsZW0gY2FuIG5vdCBiZSByZXByb2R1Y2VkIGluIGFueSBvZiB0aGUgZGVtb3MKICBpbmNsdWRlZCBpbiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24sIHBsZWFzZSBwcm92aWRlIGFuIEhUTUwKICBkb2N1bWVudCB0aGF0IGRlbW9uc3RyYXRlcyB0aGUgcHJvYmxlbS4gVGhlIGJlc3Qgd2F5IHRvIGRvIHRoaXMgaXMKICB0byBnbyB0byA8YSBocmVmPSJodHRwOi8vanNiaW4uY29tL2lodW5pbi9lZGl0Ij5qc2Jpbi5jb208L2E+LCBlbnRlcgogIGl0IHRoZXJlLCBwcmVzcyBzYXZlLCBhbmQgaW5jbHVkZSB0aGUgcmVzdWx0aW5nIGxpbmsgaW4geW91ciBidWcKICByZXBvcnQuPC9saT4KPC9vbD4KCjwvZGl2PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/doc/upgrade_v2.2.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVwZ3JhZGluZyB0byB2Mi4yPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Imh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURyb2lkK1NhbnN8RHJvaWQrU2Fuczpib2xkIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJkb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIFVwZ3JhZGluZyB0byB2Mi4yCiAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImxlZnQiPgoKPHA+VGhlcmUgYXJlIGEgZmV3IHRoaW5ncyBpbiB0aGUgMi4yIHJlbGVhc2UgdGhhdCByZXF1aXJlIHNvbWUgY2FyZQp3aGVuIHVwZ3JhZGluZy48L3A+Cgo8aDI+Tm8gbW9yZSBkZWZhdWx0LmNzczwvaDI+Cgo8cD5UaGUgZGVmYXVsdCB0aGVtZSBpcyBub3cgaW5jbHVkZWQKaW4gPGEgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj48Y29kZT5jb2RlbWlycm9yLmNzczwvY29kZT48L2E+LCBzbwp5b3UgZG8gbm90IGhhdmUgdG8gaW5jbHVkZWQgaXQgc2VwYXJhdGVseSBhbnltb3JlLiAoSXQgd2FzIHRpbnksIHNvCmV2ZW4gaWYgeW91J3JlIG5vdCB1c2luZyBpdCwgdGhlIGV4dHJhIGRhdGEgb3ZlcmhlYWQgaXMgbmVnbGlnaWJsZS4pCgo8aDI+RGlmZmVyZW50IGtleSBjdXN0b21pemF0aW9uPC9oMj4KCjxwPkNvZGVNaXJyb3IgaGFzIG1vdmVkIHRvIGEgc3lzdGVtCndoZXJlIDxhIGhyZWY9Im1hbnVhbC5odG1sI29wdGlvbl9rZXlNYXAiPmtleW1hcHM8L2E+IGFyZSB1c2VkIHRvCmJpbmQgYmVoYXZpb3IgdG8ga2V5cy4gVGhpcyBtZWFucyA8YSBocmVmPSIuLi9kZW1vL2VtYWNzLmh0bWwiPmN1c3RvbQpiaW5kaW5nczwvYT4gYXJlIG5vdyBwb3NzaWJsZS48L3A+Cgo8cD5UaHJlZSBvcHRpb25zIHRoYXQgaW5mbHVlbmNlZCBrZXkKYmVoYXZpb3IsIDxjb2RlPnRhYk1vZGU8L2NvZGU+LCA8Y29kZT5lbnRlck1vZGU8L2NvZGU+LAphbmQgPGNvZGU+c21hcnRIb21lPC9jb2RlPiwgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuIEluc3RlYWQsIHlvdSBjYW4KcHJvdmlkZSBjdXN0b20gYmluZGluZ3MgdG8gaW5mbHVlbmNlIHRoZSB3YXkgdGhlc2Uga2V5cyBhY3QuIFRoaXMgaXMKZG9uZSB0aHJvdWdoIHRoZQpuZXcgPGEgaHJlZj0ibWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+PGNvZGU+ZXh0cmFLZXlzPC9jb2RlPjwvYT4Kb3B0aW9uLCB3aGljaCBjYW4gaG9sZCBhbiBvYmplY3QgbWFwcGluZyBrZXkgbmFtZXMgdG8gZnVuY3Rpb25hbGl0eS4gQQpzaW1wbGUgZXhhbXBsZSB3b3VsZCBiZTo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7CiAgICAiQ3RybC1TIjogZnVuY3Rpb24oaW5zdGFuY2UpIHsgc2F2ZVRleHQoaW5zdGFuY2UuZ2V0VmFsdWUoKSk7IH0sCiAgICAiQ3RybC0vIjogInVuZG8iCiAgfTwvcHJlPgoKPHA+S2V5cyBjYW4gYmUgbWFwcGVkIGVpdGhlciB0byBmdW5jdGlvbnMsIHdoaWNoIHdpbGwgYmUgZ2l2ZW4gdGhlCmVkaXRvciBpbnN0YW5jZSBhcyBhcmd1bWVudCwgb3IgdG8gc3RyaW5ncywgd2hpY2ggYXJlIG1hcHBlZCB0aHJvdWdoCmZ1bmN0aW9ucyB0aHJvdWdoIHRoZSA8Y29kZT5Db2RlTWlycm9yLmNvbW1hbmRzPC9jb2RlPiB0YWJsZSwgd2hpY2gKY29udGFpbnMgYWxsIHRoZSBidWlsdC1pbiBlZGl0aW5nIGNvbW1hbmRzLCBhbmQgY2FuIGJlIGluc3BlY3RlZCBhbmQKZXh0ZW5kZWQgYnkgZXh0ZXJuYWwgY29kZS48L3A+Cgo8cD5CeSBkZWZhdWx0LCB0aGUgPGNvZGU+SG9tZTwvY29kZT4ga2V5IGlzIGJvdW5kIHRvCnRoZSA8Y29kZT4iZ29MaW5lU3RhcnRTbWFydCI8L2NvZGU+IGNvbW1hbmQsIHdoaWNoIG1vdmVzIHRoZSBjdXJzb3IgdG8KdGhlIGZpcnN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlciBvbiB0aGUgbGluZS4gWW91IGNhbiBzZXQgZG8gdGhpcyB0bwptYWtlIGl0IGFsd2F5cyBnbyB0byB0aGUgdmVyeSBzdGFydCBpbnN0ZWFkOjwvcD4KCjxwcmU+ICBleHRyYUtleXM6IHsiSG9tZSI6ICJnb0xpbmVTdGFydCJ9PC9wcmU+Cgo8cD5TaW1pbGFybHksIDxjb2RlPkVudGVyPC9jb2RlPiBpcyBib3VuZAp0byA8Y29kZT4ibmV3bGluZUFuZEluZGVudCI8L2NvZGU+IGJ5IGRlZmF1bHQuIFlvdSBjYW4gYmluZCBpdCB0bwpzb21ldGhpbmcgZWxzZSB0byBnZXQgZGlmZmVyZW50IGJlaGF2aW9yLiBUbyBkaXNhYmxlIHNwZWNpYWwgaGFuZGxpbmcKY29tcGxldGVseSBhbmQgb25seSBnZXQgYSBuZXdsaW5lIGNoYXJhY3RlciBpbnNlcnRlZCwgeW91IGNhbiBiaW5kIGl0CnRvIDxjb2RlPmZhbHNlPC9jb2RlPjo8L3A+Cgo8cHJlPiAgZXh0cmFLZXlzOiB7IkVudGVyIjogZmFsc2V9PC9wcmU+Cgo8cD5UaGUgc2FtZSB3b3JrcyBmb3IgPGNvZGU+VGFiPC9jb2RlPi4gSWYgeW91IGRvbid0IHdhbnQgQ29kZU1pcnJvcgp0byBoYW5kbGUgaXQsIGJpbmQgaXQgdG8gPGNvZGU+ZmFsc2U8L2NvZGU+LiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMKdG8gaW5kZW50IHRoZSBjdXJyZW50IGxpbmUgbW9yZSAoPGNvZGU+ImluZGVudE1vcmUiPC9jb2RlPiBjb21tYW5kKSwKYW5kIGluZGVudCBpdCBsZXNzIHdoZW4gc2hpZnQgaXMgaGVsZCAoPGNvZGU+ImluZGVudExlc3MiPC9jb2RlPikuClRoZXJlIGFyZSBhbHNvIDxjb2RlPiJpbmRlbnRBdXRvIjwvY29kZT4gKHNtYXJ0IGluZGVudCkKYW5kIDxjb2RlPiJpbnNlcnRUYWIiPC9jb2RlPiBjb21tYW5kcyBwcm92aWRlZCBmb3IgYWx0ZXJuYXRlCmJlaGF2aW9ycy4gT3IgeW91IGNhbiB3cml0ZSB5b3VyIG93biBoYW5kbGVyIGZ1bmN0aW9uIHRvIGRvIHNvbWV0aGluZwpkaWZmZXJlbnQgYWx0b2dldGhlci48L3A+Cgo8aDI+VGFiczwvaDI+Cgo8cD5IYW5kbGluZyBvZiB0YWJzIGNoYW5nZWQgY29tcGxldGVseS4gVGhlIGRpc3BsYXkgd2lkdGggb2YgdGFicyBjYW4Kbm93IGJlIHNldCB3aXRoIHRoZSA8Y29kZT50YWJTaXplPC9jb2RlPiBvcHRpb24sIGFuZCB0YWJzIGNhbgpiZSA8YSBocmVmPSIuLi9kZW1vL3Zpc2libGV0YWJzLmh0bWwiPnN0eWxlZDwvYT4gYnkgc2V0dGluZyBDU1MgcnVsZXMKZm9yIHRoZSA8Y29kZT5jbS10YWI8L2NvZGU+IGNsYXNzLjwvcD4KCjxwPlRoZSBkZWZhdWx0IHdpZHRoIGZvciB0YWJzIGlzIG5vdyA0LCBhcyBvcHBvc2VkIHRvIHRoZSA4IHRoYXQgaXMKaGFyZC13aXJlZCBpbnRvIGJyb3dzZXJzLiBJZiB5b3UgYXJlIHJlbHlpbmcgb24gOC1zcGFjZSB0YWJzLCBtYWtlCnN1cmUgeW91IGV4cGxpY2l0bHkgc2V0IDxjb2RlPnRhYlNpemU6IDg8L2NvZGU+IGluIHlvdXIgb3B0aW9ucy48L3A+Cgo8L2Rpdj4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2Nzcz9mYW1pbHk9RHJvaWQrU2Fuc3xEcm9pZCtTYW5zOmJvbGQiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImRvYy9kb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxsaW5rIHJlbD0iYWx0ZXJuYXRlIiBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vc3RhdHVzZXMvdXNlcl90aW1lbGluZS8yNDIyODMyODgucnNzIiB0eXBlPSJhcHBsaWNhdGlvbi9yc3MreG1sIi8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImRvYy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogSW4tYnJvd3NlciBjb2RlIGVkaXRpbmcKICAgbWFkZSBiZWFyYWJsZSAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0IGJsayI+CgogIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwIj5Db2RlTWlycm9yIGlzIGEgSmF2YVNjcmlwdCBsaWJyYXJ5IHRoYXQgY2FuCiAgYmUgdXNlZCB0byBjcmVhdGUgYSByZWxhdGl2ZWx5IHBsZWFzYW50IGVkaXRvciBpbnRlcmZhY2UgZm9yCiAgY29kZS1saWtlIGNvbnRlbnQgJiN4MjAxNTsgY29tcHV0ZXIgcHJvZ3JhbXMsIEhUTUwgbWFya3VwLCBhbmQKICBzaW1pbGFyLiBJZiBhIG1vZGUgaGFzIGJlZW4gd3JpdHRlbiBmb3IgdGhlIGxhbmd1YWdlIHlvdSBhcmUKICBlZGl0aW5nLCB0aGUgY29kZSB3aWxsIGJlIGNvbG91cmVkLCBhbmQgdGhlIGVkaXRvciB3aWxsIG9wdGlvbmFsbHkKICBoZWxwIHlvdSB3aXRoIGluZGVudGF0aW9uLjwvcD4KCiAgPHA+VGhpcyBpcyB0aGUgcHJvamVjdCBwYWdlIGZvciBDb2RlTWlycm9yIDIsIHRoZSBjdXJyZW50bHkgbW9yZQogIGFjdGl2ZWx5IGRldmVsb3BlZCwgYW5kIHJlY29tbWVuZGVkCiAgdmVyc2lvbi4gPGEgaHJlZj0iMS9pbmRleC5odG1sIj5Db2RlTWlycm9yIDE8L2E+IGlzIHN0aWxsIGF2YWlsYWJsZQogIGZyb20gaGVyZS48L3A+CgogIDxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0MSBibGsiPgoKICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDogMCI+U3VwcG9ydGVkIG1vZGVzOjwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jbGlrZS9pbmRleC5odG1sIj5DLCBDKyssIEMjLCBKYXZhLCBhbmQgc2ltaWxhcjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jbG9qdXJlL2luZGV4Lmh0bWwiPkNsb2p1cmU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY29mZmVlc2NyaXB0L2luZGV4Lmh0bWwiPkNvZmZlZVNjcmlwdDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9jc3MvaW5kZXguaHRtbCI+Q1NTPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2RpZmYvaW5kZXguaHRtbCI+ZGlmZjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9lY2wvaW5kZXguaHRtbCI+RUNMPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2dvL2luZGV4Lmh0bWwiPkdvPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2dyb292eS9pbmRleC5odG1sIj5Hcm9vdnk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvaGFza2VsbC9pbmRleC5odG1sIj5IYXNrZWxsPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2h0bWxlbWJlZGRlZC9pbmRleC5odG1sIj5IVE1MIGVtYmVkZGVkIHNjcmlwdHM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvaHRtbG1peGVkL2luZGV4Lmh0bWwiPkhUTUwgbWl4ZWQtbW9kZTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9qYXZhc2NyaXB0L2luZGV4Lmh0bWwiPkphdmFTY3JpcHQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvamluamEyL2luZGV4Lmh0bWwiPkppbmphMjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9sZXNzL2luZGV4Lmh0bWwiPkxFU1M8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvbHVhL2luZGV4Lmh0bWwiPkx1YTwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9tYXJrZG93bi9pbmRleC5odG1sIj5NYXJrZG93bjwvYT4gKDxhIGhyZWY9Im1vZGUvZ2ZtL2luZGV4Lmh0bWwiPkdpdGh1Yi1mbGF2b3VyPC9hPik8L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9teXNxbC9pbmRleC5odG1sIj5NeVNRTDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9udHJpcGxlcy9pbmRleC5odG1sIj5OVHJpcGxlczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wYXNjYWwvaW5kZXguaHRtbCI+UGFzY2FsPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3BlcmwvaW5kZXguaHRtbCI+UGVybDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9waHAvaW5kZXguaHRtbCI+UEhQPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wcm9wZXJ0aWVzL2luZGV4Lmh0bWwiPlByb3BlcnRpZXMgZmlsZXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcHl0aG9uL2luZGV4Lmh0bWwiPlB5dGhvbjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9yL2luZGV4Lmh0bWwiPlI8L2E+PC9saT4KICAgICAgPGxpPlJQTSA8YSBocmVmPSJtb2RlL3JwbS9zcGVjL2luZGV4Lmh0bWwiPnNwZWM8L2E+IGFuZCA8YSBocmVmPSJtb2RlL3JwbS9jaGFuZ2VzL2luZGV4Lmh0bWwiPmNoYW5nZWxvZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9yc3QvaW5kZXguaHRtbCI+cmVTdHJ1Y3R1cmVkVGV4dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9ydWJ5L2luZGV4Lmh0bWwiPlJ1Ynk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcnVzdC9pbmRleC5odG1sIj5SdXN0PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsazwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9zbWFydHkvaW5kZXguaHRtbCI+U21hcnR5PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3NwYXJxbC9pbmRleC5odG1sIj5TUEFSUUw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc3RleC9pbmRleC5odG1sIj5zVGVYLCBMYVRlWDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS90aWRkbHl3aWtpL2luZGV4Lmh0bWwiPlRpZGRseXdpa2k8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmJzY3JpcHQvaW5kZXguaHRtbCI+VkJTY3JpcHQ8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmVsb2NpdHkvaW5kZXguaHRtbCI+VmVsb2NpdHk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvdmVyaWxvZy9pbmRleC5odG1sIj5WZXJpbG9nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3htbC9pbmRleC5odG1sIj5YTUwvSFRNTDwvYT4gKDxhIGhyZWY9Im1vZGUveG1scHVyZS9pbmRleC5odG1sIj5hbHRlcm5hdGl2ZSBYTUw8L2E+KTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3hxdWVyeS9pbmRleC5odG1sIj5YUXVlcnk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUveWFtbC9pbmRleC5odG1sIj5ZQU1MPC9hPjwvbGk+CiAgICA8L3VsPgoKICA8L2Rpdj48ZGl2IGNsYXNzPSJsZWZ0MiBibGsiPgoKICAgIDxoMiBzdHlsZT0ibWFyZ2luLXRvcDogMCI+VXNhZ2UgZGVtb3M6PC9oMj4KCiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2NvbXBsZXRlLmh0bWwiPkF1dG9jb21wbGV0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL211c3RhY2hlLmh0bWwiPk1vZGUgb3ZlcmxheXM8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vc2VhcmNoLmh0bWwiPlNlYXJjaC9yZXBsYWNlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2ZvbGRpbmcuaHRtbCI+Q29kZSBmb2xkaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3ByZXZpZXcuaHRtbCI+SFRNTCBlZGl0b3Igd2l0aCBwcmV2aWV3PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3Jlc2l6ZS5odG1sIj5BdXRvLXJlc2l6aW5nIGVkaXRvcjwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9tYXJrZXIuaHRtbCI+U2V0dGluZyBicmVha3BvaW50czwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9hY3RpdmVsaW5lLmh0bWwiPkhpZ2hsaWdodGluZyB0aGUgY3VycmVudCBsaW5lPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL21hdGNoaGlnaGxpZ2h0ZXIuaHRtbCI+SGlnaGxpZ2h0aW5nIHNlbGVjdGlvbiBtYXRjaGVzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3RoZW1lLmh0bWwiPlRoZW1pbmc8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vcnVubW9kZS5odG1sIj5TdGFuZC1hbG9uZSBoaWdobGlnaHRpbmc8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vZnVsbHNjcmVlbi5odG1sIj5GdWxsLXNjcmVlbiBlZGl0aW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2NoYW5nZW1vZGUuaHRtbCI+TW9kZSBhdXRvLWNoYW5naW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL3Zpc2libGV0YWJzLmh0bWwiPlZpc2libGUgdGFiczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9mb3JtYXR0aW5nLmh0bWwiPkF1dG9mb3JtYXR0aW5nIG9mIGNvZGU8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vZW1hY3MuaHRtbCI+RW1hY3Mga2V5YmluZGluZ3M8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vdmltLmh0bWwiPlZpbSBrZXliaW5kaW5nczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9jbG9zZXRhZy5odG1sIj5BdXRvbWF0aWMgeG1sIHRhZyBjbG9zaW5nPC9hPjwvbGk+CiAgICA8L3VsPgoKICAgIDxoMj5SZWFsLXdvcmxkIHVzZXM6PC9oMj4KCiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vanNiaW4uY29tIj5qc2Jpbi5jb208L2E+IChKUyBwbGF5Z3JvdW5kKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vYnV6emFyZC51cHMuZWR1LyI+U2FnZSBkZW1vPC9hPiAobWF0aCBzeXN0ZW0pPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuc291cmNlbGFpci5jb20vIj5zb3VyY2VMYWlyPC9hPiAob25saW5lIElERSk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2Vsb3F1ZW50amF2YXNjcmlwdC5uZXQvY2hhcHRlcjEuaHRtbCI+RWxvcXVlbnQgSmF2YVNjcmlwdDwvYT4gKGJvb2spPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3Lm1lcmdlbHkuY29tLyI+TWVyZ2VseTwvYT4gKGludGVyYWN0aXZlIGRpZmZpbmcpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9wYXBlcmpzLm9yZy8iPlBhcGVyLmpzPC9hPiAoZ3JhcGhpY3Mgc2NyaXB0aW5nKTwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd3d3Lndlc2NoZW1lLm9yZy8iPldlU2NoZW1lPC9hPiAobGVhcm5pbmcgdG9vbCk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3dlYmdscGxheWdyb3VuZC5uZXQvIj5XZWJHTCBwbGF5Z3JvdW5kPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vcWwuaW8vIj5xbC5pbzwvYT4gKGh0dHAgQVBJIHF1ZXJ5IGhlbHBlcik8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2VsbS1sYW5nLm9yZy9FeGFtcGxlcy5lbG0iPkVsbSBsYW5ndWFnZSBleGFtcGxlczwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2JsdWVncmlmZm9uLm9yZy8iPkJsdWVHcmlmZm9uPC9hPiAoSFRNTCBlZGl0b3IpPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuanNoaW50LmNvbS8iPkpTSGludDwvYT4gKEpTIGxpbnRlcik8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2tsMXAuY29tL2NtdGVzdC8xIj5rbDFwPC9hPiAocGFzdGUgc2VydmljZSk8L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3NxbGZpZGRsZS5jb20iPlNRTEZpZGRsZTwvYT4gKFNRTCBwbGF5Z3JvdW5kKTwvbGk+CiAgICAgPC91bD4KCiAgPC9kaXY+PC9kaXY+CgogIDxoMiBpZD0iY29kZSI+R2V0dGluZyB0aGUgY29kZTwvaDI+CgogIDxwPkFsbCBvZiBDb2RlTWlycm9yIGlzIHJlbGVhc2VkIHVuZGVyIGEgPGEKICBocmVmPSJMSUNFTlNFIj5NSVQtc3R5bGU8L2E+IGxpY2Vuc2UuIFRvIGdldCBpdCwgeW91IGNhbiBkb3dubG9hZAogIHRoZSA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiPmxhdGVzdAogIHJlbGVhc2U8L2E+IG9yIHRoZSBjdXJyZW50IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3IyLWxhdGVzdC56aXAiPmRldmVsb3BtZW50CiAgc25hcHNob3Q8L2E+IGFzIHppcCBmaWxlcy4gVG8gY3JlYXRlIGEgY3VzdG9tIG1pbmlmaWVkIHNjcmlwdCBmaWxlLAogIHlvdSBjYW4gdXNlIHRoZSA8YSBocmVmPSJkb2MvY29tcHJlc3MuaHRtbCI+Y29tcHJlc3Npb24gQVBJPC9hPi48L3A+CgogIDxwPldlIHVzZSA8YSBocmVmPSJodHRwOi8vZ2l0LXNjbS5jb20vIj5naXQ8L2E+IGZvciB2ZXJzaW9uIGNvbnRyb2wuCiAgVGhlIG1haW4gcmVwb3NpdG9yeSBjYW4gYmUgZmV0Y2hlZCBpbiB0aGlzIHdheTo8L3A+CgogIDxwcmUgY2xhc3M9ImNvZGUiPmdpdCBjbG9uZSBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMjwvcHJlPgoKICA8cD5Db2RlTWlycm9yIGNhbiBhbHNvIGJlIGZvdW5kIG9uIEdpdEh1YiBhdCA8YQogIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIiPm1hcmlqbmgvQ29kZU1pcnJvcjI8L2E+LgogIElmIHlvdSBwbGFuIHRvIGhhY2sgb24gdGhlIGNvZGUgYW5kIGNvbnRyaWJ1dGUgcGF0Y2hlcywgdGhlIGJlc3Qgd2F5CiAgdG8gZG8gaXQgaXMgdG8gY3JlYXRlIGEgR2l0SHViIGZvcmssIGFuZCBzZW5kIHB1bGwgcmVxdWVzdHMuPC9wPgoKICA8aDIgaWQ9ImRvY3VtZW50aW9uIj5Eb2N1bWVudGF0aW9uPC9oMj4KCiAgPHA+VGhlIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCI+bWFudWFsPC9hPiBpcyB5b3VyIGZpcnN0IHN0b3AgZm9yCiAgbGVhcm5pbmcgaG93IHRvIHVzZSB0aGlzIGxpYnJhcnkuIEl0IHN0YXJ0cyB3aXRoIGEgcXVpY2sgZXhwbGFuYXRpb24KICBvZiBob3cgdG8gdXNlIHRoZSBlZGl0b3IsIGFuZCB0aGVuIGRlc2NyaWJlcyB0aGUgQVBJIGluIGRldGFpbC48L3A+CgogIDxwPkZvciB0aG9zZSB3aG8gd2FudCB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBjb2RlLCB0aGVyZSBpcwogIGFuIDxhIGhyZWY9ImRvYy9pbnRlcm5hbHMuaHRtbCI+b3ZlcnZpZXcgb2YgdGhlIGludGVybmFsczwvYT4gYXZhaWxhYmxlLgogIFRoZSA8YSBocmVmPSJodHRwOi8vZ2l0aHViLmNvbS9tYXJpam5oL0NvZGVNaXJyb3IyIj5zb3VyY2UgY29kZTwvYT4KICBpdHNlbGYgaXMsIGZvciB0aGUgbW9zdCBwYXJ0LCBhbHNvIHdlbGwgY29tbWVudGVkLjwvcD4KCiAgPGgyIGlkPSJzdXBwb3J0Ij5TdXBwb3J0IGFuZCBidWcgcmVwb3J0czwvaDI+CgogIDxwPlRoZXJlIGlzCiAgYSA8YSBocmVmPSJodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vZ3JvdXAvY29kZW1pcnJvciI+R29vZ2xlCiAgZ3JvdXA8L2E+IChhIHNvcnQgb2YgbWFpbGluZyBsaXN0L25ld3Nncm91cCB0aGluZykgZm9yIGRpc2N1c3Npb24KICBhbmQgbmV3cyByZWxhdGVkIHRvIENvZGVNaXJyb3IuIFdoZW4gcmVwb3J0aW5nIGEgYnVnLAogIDxhIGhyZWY9ImRvYy9yZXBvcnRpbmcuaHRtbCI+cmVhZCB0aGlzIGZpcnN0PC9hPi4gSWYgeW91IGhhdmUKICBhIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tIj5naXRodWI8L2E+IGFjY291bnQsCiAgc2ltcGx5IDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIvaXNzdWVzIj5vcGVuCiAgYW4gaXNzdWUgdGhlcmU8L2E+LiBPdGhlcndpc2UsIHBvc3Qgc29tZXRoaW5nIHRvCiAgdGhlIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yIj5ncm91cDwvYT4sCiAgb3IgZS1tYWlsIG1lIGRpcmVjdGx5OiA8YSBocmVmPSJtYWlsdG86bWFyaWpuaEBnbWFpbC5jb20iPk1hcmlqbgogIEhhdmVyYmVrZTwvYT4uPC9wPgoKICA8aDIgaWQ9InN1cHBvcnRlZCI+U3VwcG9ydGVkIGJyb3dzZXJzPC9oMj4KCiAgPHA+VGhlIGZvbGxvd2luZyBicm93c2VycyBhcmUgYWJsZSB0byBydW4gQ29kZU1pcnJvcjo8L3A+CgogIDx1bD4KICAgIDxsaT5GaXJlZm94IDIgb3IgaGlnaGVyPC9saT4KICAgIDxsaT5DaHJvbWUsIGFueSB2ZXJzaW9uPC9saT4KICAgIDxsaT5TYWZhcmkgMyBvciBoaWdoZXI8L2xpPgogICAgPGxpPkludGVybmV0IEV4cGxvcmVyIDYgb3IgaGlnaGVyIGluIHN0YW5kYXJkcyAoPHN0cm9uZz5ub24tcXVpcmtzPC9zdHJvbmc+KSBtb2RlPC9saT4KICAgIDxsaT5PcGVyYSA5IG9yIGhpZ2hlciAod2l0aCBzb21lIGtleS1oYW5kbGluZyBwcm9ibGVtcyBvbiBPUyBYKTwvbGk+CiAgPC91bD4KCiAgPHA+SSBhbSBub3QgYWN0aXZlbHkgdGVzdGluZyBhZ2FpbnN0IGV2ZXJ5IG5ldyBicm93c2VyIHJlbGVhc2UsIGFuZAogIHZlbmRvcnMgaGF2ZSBhIGhhYml0IG9mIGludHJvZHVjaW5nIGJ1Z3MgYWxsIHRoZSB0aW1lLCBzbyBJIGFtCiAgcmVseWluZyBvbiB0aGUgY29tbXVuaXR5IHRvIHRlbGwgbWUgd2hlbiBzb21ldGhpbmcgYnJlYWtzLgogIFNlZSA8YSBocmVmPSIjc3VwcG9ydCI+aGVyZTwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0CiAgbWUuPC9wPgoKICA8aDIgaWQ9ImNvbW1lcmNpYWwiPkNvbW1lcmNpYWwgc3VwcG9ydDwvaDI+CgogIDxwPkNvZGVNaXJyb3IgaXMgZGV2ZWxvcGVkIGFuZCBtYWludGFpbmVkIGJ5IG1lLCBNYXJpam4gSGF2ZXJiZWtlLAogIGluIG15IG93biB0aW1lLiBJZiB5b3VyIGNvbXBhbnkgaXMgZ2V0dGluZyB2YWx1ZSBvdXQgb2YgQ29kZU1pcnJvciwKICBwbGVhc2UgY29uc2lkZXIgcHVyY2hhc2luZyBhIHN1cHBvcnQgY29udHJhY3QuPC9wPgoKICA8dWw+CiAgICA8bGk+WW91J2xsIGJlIGZ1bmRpbmcgZnVydGhlciB3b3JrIG9uIENvZGVNaXJyb3IuPC9saT4KICAgIDxsaT5Zb3UgZW5zdXJlIHRoYXQgeW91IGdldCBhIHF1aWNrIHJlc3BvbnNlIHdoZW4geW91IGhhdmUgYQogICAgcHJvYmxlbSwgZXZlbiB3aGVuIEkgYW0gb3RoZXJ3aXNlIGJ1c3kuPC9saT4KICA8L3VsPgoKICA8cD5Db2RlTWlycm9yIHN1cHBvcnQgY29udHJhY3RzIGV4aXN0IGluIHR3bwogIGZvcm1z4oCUPHN0cm9uZz5iYXNpYzwvc3Ryb25nPiBhdCDigqwxMDAgcGVyIG1vbnRoLAogIGFuZCA8c3Ryb25nPnByZW1pdW08L3N0cm9uZz4gYXQg4oKsNTAwIHBlcgogIG1vbnRoLiA8YSBocmVmPSJtYWlsdG86bWFyaWpuaEBnbWFpbC5jb20iPkNvbnRhY3QgbWU8L2E+IGZvciBmdXJ0aGVyCiAgaW5mb3JtYXRpb24uPC9wPgoKPC9kaXY+Cgo8ZGl2IGNsYXNzPSJyaWdodCBibGsiPgoKICA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiIGNsYXNzPSJkb3dubG9hZCI+RG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlPC9hPgoKICA8aDI+U3VwcG9ydCBDb2RlTWlycm9yPC9oMj4KCiAgPHVsPgogICAgPGxpPkRvbmF0ZQogICAgKDxzcGFuIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXlwYWwnKS5zdWJtaXQoKTsiCiAgICBjbGFzcz0icXVhc2lsaW5rIj5QYXlwYWw8L3NwYW4+CiAgICBvciA8c3BhbiBvbmNsaWNrPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmFua2luZm8nKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsiCiAgICAgICAgICAgICBjbGFzcz0icXVhc2lsaW5rIj5iYW5rPC9zcGFuPik8L2xpPgogICAgPGxpPlB1cmNoYXNlIDxhIGhyZWY9IiNjb21tZXJjaWFsIj5jb21tZXJjaWFsIHN1cHBvcnQ8L2E+PC9saT4KICA8L3VsPgoKICA8cCBpZD0iYmFua2luZm8iIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICBCYW5rOiA8aT5SYWJvYmFuazwvaT48YnIvPgogICAgQ291bnRyeTogPGk+TmV0aGVybGFuZHM8L2k+PGJyLz4KICAgIFNXSUZUOiA8aT5SQUJPTkwyVTwvaT48YnIvPgogICAgQWNjb3VudDogPGk+MTQ3ODUwNzcwPC9pPjxici8+CiAgICBOYW1lOiA8aT5NYXJpam4gSGF2ZXJiZWtlPC9pPjxici8+CiAgICBJQkFOOiA8aT5OTDI2IFJBQk8gMDE0NyA4NTA3IDcwPC9pPgogIDwvcD4KCiAgPGgyPlJlbGVhc2VzOjwvaDI+CgogIDxwIGNsYXNzPSJyZWwiPjI2LTAzLTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjMuemlwIj5WZXJzaW9uIDIuMjM8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+Q2hhbmdlIDxzdHJvbmc+ZGVmYXVsdCBiaW5kaW5nIGZvciB0YWI8L3N0cm9uZz4gPGEgaHJlZj0iamF2YXNjcmlwdDp2b2lkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJiaW5kaW5nJykuc3R5bGUuZGlzcGxheT0nJykiPlttb3JlXTwvYT4KICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogbm9uZSIgaWQ9dGFiYmluZGluZz4KICAgICAgICBTdGFydGluZyBpbiAyLjIzLCB0aGVzZSBiaW5kaW5ncyBhcmUgZGVmYXVsdDoKICAgICAgICA8dWw+PGxpPlRhYjogSW5zZXJ0IHRhYiBjaGFyYWN0ZXI8L2xpPgogICAgICAgICAgPGxpPlNoaWZ0LXRhYjogUmVzZXQgbGluZSBpbmRlbnRhdGlvbiB0byBkZWZhdWx0PC9saT4KICAgICAgICAgIDxsaT5DdHJsL0NtZC1bOiBSZWR1Y2UgbGluZSBpbmRlbnRhdGlvbiAob2xkIHRhYiBiZWhhdmlvdXIpPC9saT4KICAgICAgICAgIDxsaT5DdHJsL0NtZC1dOiBJbmNyZWFzZSBsaW5lIGluZGVudGF0aW9uIChvbGQgc2hpZnQtdGFiIGJlaGF2aW91cik8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgPC9saT4KICAgIDxsaT5OZXcgbW9kZXM6IDxhIGhyZWY9Im1vZGUveHF1ZXJ5L2luZGV4Lmh0bWwiPlhRdWVyeTwvYT4gYW5kIDxhIGhyZWY9Im1vZGUvdmJzY3JpcHQvaW5kZXguaHRtbCI+VkJTY3JpcHQ8L2E+LjwvbGk+CiAgICA8bGk+VHdvIG5ldyB0aGVtZXM6IDxhIGhyZWY9Im1vZGUvbGVzcy9pbmRleC5odG1sIj5sZXNzZXItZGFyazwvYT4gYW5kIDxhIGhyZWY9Im1vZGUveHF1ZXJ5L2luZGV4Lmh0bWwiPnhxLWRhcms8L2E+LjwvbGk+CiAgICA8bGk+RGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGJhY2tncm91bmQgYW5kIHRleHQgc3R5bGVzIGluIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNzZXRMaW5lQ2xhc3MiPjxjb2RlPnNldExpbmVDbGFzczwvY29kZT48L2E+LjwvbGk+CiAgICA8bGk+Rml4IGRyYWctYW5kLWRyb3AgaW4gSUU5Ky48L2xpPgogICAgPGxpPkV4dGVuZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjY2hhckNvb3JkcyI+PGNvZGU+Y2hhckNvb3JkczwvY29kZT48L2E+CiAgICBhbmQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI2N1cnNvckNvb3JkcyI+PGNvZGU+Y3Vyc29yQ29vcmRzPC9jb2RlPjwvYT4gd2l0aCBhIDxjb2RlPm1vZGU8L2NvZGU+IGFyZ3VtZW50LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fYXV0b2ZvY3VzIj48Y29kZT5hdXRvZm9jdXM8L2NvZGU+PC9hPiBvcHRpb24uPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI2ZpbmRNYXJrc0F0Ij48Y29kZT5maW5kTWFya3NBdDwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI3LTAyLTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjIuemlwIj5WZXJzaW9uIDIuMjI8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWxsb3cgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI2tleW1hcHMiPmtleSBoYW5kbGVyczwvYT4gdG8gcGFzcyB1cCBldmVudHMsIGFsbG93IGJpbmRpbmcgY2hhcmFjdGVycy48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2F1dG9DbGVhckVtcHR5TGluZXMiPjxjb2RlPmF1dG9DbGVhckVtcHR5TGluZXM8L2NvZGU+PC9hPiBvcHRpb24uPC9saT4KICAgIDxsaT5Qcm9wZXJseSB1c2UgdGFiIHN0b3BzIHdoZW4gcmVuZGVyaW5nIHRhYnMuPC9saT4KICAgIDxsaT5NYWtlIFBIUCBtb2RlIG1vcmUgcm9idXN0LjwvbGk+CiAgICA8bGk+U3VwcG9ydCBpbmRlbnRhdGlvbiBibG9ja3MgaW4gPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3V0aWxfZm9sZGNvZGUiPmNvZGUgZm9sZGVyPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIHNjcmlwdCBmb3IgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3V0aWxfbWF0Y2gtaGlnaGxpZ2h0ZXIiPmhpZ2hsaWdodGluZyBpbnN0YW5jZXMgb2YgdGhlIHNlbGVjdGlvbjwvYT4uPC9saT4KICAgIDxsaT5OZXcgPGEgaHJlZj0ibW9kZS9wcm9wZXJ0aWVzL2luZGV4Lmh0bWwiPi5wcm9wZXJ0aWVzPC9hPiBtb2RlLjwvbGk+CiAgICA8bGk+Rml4IG1hbnkgYnVncy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI3LTAxLTIwMTI6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMjEuemlwIj5WZXJzaW9uIDIuMjE8L2E+OjwvcD4KCiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkZWQgPGEgaHJlZj0ibW9kZS9sZXNzL2luZGV4Lmh0bWwiPkxFU1M8L2E+LCA8YSBocmVmPSJtb2RlL215c3FsL2luZGV4Lmh0bWwiPk15U1FMPC9hPiwKICAgIDxhIGhyZWY9Im1vZGUvZ28vaW5kZXguaHRtbCI+R288L2E+LCBhbmQgPGEgaHJlZj0ibW9kZS92ZXJpbG9nL2luZGV4Lmh0bWwiPlZlcmlsb2c8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fc21hcnRJbmRlbnQiPjxjb2RlPnNtYXJ0SW5kZW50PC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L2xpPgogICAgPGxpPlN1cHBvcnQgYSBjdXJzb3IgaW4gPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI29wdGlvbl9yZWFkT25seSI+PGNvZGU+cmVhZE9ubHk8L2NvZGU+PC9hPi1tb2RlLjwvbGk+CiAgICA8bGk+U3VwcG9ydCBhc3NpZ25pbmcgbXVsdGlwbGUgc3R5bGVzIHRvIGEgdG9rZW4uPC9saT4KICAgIDxsaT5Vc2UgYSBuZXcgYXBwcm9hY2ggdG8gZHJhd2luZyB0aGUgc2VsZWN0aW9uLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNzY3JvbGxUbyI+PGNvZGU+c2Nyb2xsVG88L2NvZGU+PC9hPiBtZXRob2QuPC9saT4KICAgIDxsaT5BbGxvdyB1bmRvL3JlZG8gZXZlbnRzIHRvIHNwYW4gbm9uLWFkamFjZW50IGxpbmVzLjwvbGk+CiAgICA8bGk+TG90cyBhbmQgbG90cyBvZiBidWdmaXhlcy48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIwLTEyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMi56aXAiPlZlcnNpb24gMi4yPC9hPjo8L3A+CgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPlNsaWdodGx5IGluY29tcGF0aWJsZSBBUEkgY2hhbmdlcy4gUmVhZCA8YSBocmVmPSJkb2MvdXBncmFkZV92Mi4yLmh0bWwiPnRoaXM8L2E+LjwvbGk+CiAgICA8bGk+TmV3IGFwcHJvYWNoCiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2V4dHJhS2V5cyI+YmluZGluZzwvYT4ga2V5cywKICAgIHN1cHBvcnQgZm9yIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fa2V5TWFwIj5jdXN0b20KICAgIGJpbmRpbmdzPC9hPi48L2xpPgogICAgPGxpPlN1cHBvcnQgZm9yIG92ZXJ3cml0ZSAoaW5zZXJ0KS48L2xpPgogICAgPGxpPjxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fdGFiU2l6ZSI+Q3VzdG9tLXdpZHRoPC9hPgogICAgYW5kIDxhIGhyZWY9ImRlbW8vdmlzaWJsZXRhYnMuaHRtbCI+c3R5bGFibGU8L2E+IHRhYnMuPC9saT4KICAgIDxsaT5Nb3ZlZCBtb3JlIGNvZGUgaW50byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjYWRkb25zIj5hZGQtb24gc2NyaXB0czwvYT4uPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciBzYW5lIHZlcnRpY2FsIGN1cnNvciBtb3ZlbWVudCBpbiB3cmFwcGVkIGxpbmVzLjwvbGk+CiAgICA8bGk+TW9yZSByZWxpYWJsZSBoYW5kbGluZyBvZgogICAgZWRpdGluZyA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjbWFya1RleHQiPm1hcmtlZCB0ZXh0PC9hPi48L2xpPgogICAgPGxpPkFkZCBtaW5pbWFsIDxhIGhyZWY9ImRlbW8vZW1hY3MuaHRtbCI+ZW1hY3M8L2E+CiAgICBhbmQgPGEgaHJlZj0iZGVtby92aW0uaHRtbCI+dmltPC9hPiBiaW5kaW5ncy48L2xpPgogICAgPGxpPlJlbmFtZSA8Y29kZT5jb29yZHNGcm9tSW5kZXg8L2NvZGU+CiAgICB0byA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjcG9zRnJvbUluZGV4Ij48Y29kZT5wb3NGcm9tSW5kZXg8L2NvZGU+PC9hPiwKICAgIGFkZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaW5kZXhGcm9tUG9zIj48Y29kZT5pbmRleEZyb21Qb3M8L2NvZGU+PC9hPgogICAgbWV0aG9kLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xOC56aXAiPlZlcnNpb24gMi4xODwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+Rml4ZXMgPGNvZGU+VGV4dE1hcmtlci5jbGVhcjwvY29kZT4sIHdoaWNoIGlzIGJyb2tlbiBpbiAyLjE3LjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjEtMTEtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xNy56aXAiPlZlcnNpb24gMi4xNzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjb3B0aW9uX2xpbmVXcmFwcGluZyI+bGluZQogICAgd3JhcHBpbmc8L2E+IGFuZCA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjaGlkZUxpbmUiPmNvZGUKICAgIGZvbGRpbmc8L2E+LjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvZ2ZtL2luZGV4Lmh0bWwiPkdpdGh1Yi1zdHlsZSBNYXJrZG93bjwvYT4gbW9kZS48L2xpPgogICAgPGxpPkFkZCA8YSBocmVmPSJ0aGVtZS9tb25va2FpLmNzcyI+TW9ub2thaTwvYT4KICAgIGFuZCA8YSBocmVmPSJ0aGVtZS9ydWJ5Ymx1ZS5jc3MiPlJ1YnlibHVlPC9hPiB0aGVtZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI3NldEJvb2ttYXJrIj48Y29kZT5zZXRCb29rbWFyazwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPk1vdmUgc29tZSBvZiB0aGUgZGVtbyBjb2RlIGludG8gcmV1c2FibGUgY29tcG9uZW50cwogICAgdW5kZXIgPGEgaHJlZj0ibGliL3V0aWwvIj48Y29kZT5saWIvdXRpbDwvY29kZT48L2E+LjwvbGk+CiAgICA8bGk+TWFrZSBzY3JlZW4tY29vcmQtZmluZGluZyBjb2RlIGZhc3RlciBhbmQgbW9yZSByZWxpYWJsZS48L2xpPgogICAgPGxpPkZpeCBkcmFnLWFuZC1kcm9wIGluIEZpcmVmb3guPC9saT4KICAgIDxsaT5JbXByb3ZlIHN1cHBvcnQgZm9yIElNRS48L2xpPgogICAgPGxpPlNwZWVkIHVwIGNvbnRlbnQgcmVuZGVyaW5nLjwvbGk+CiAgICA8bGk+Rml4IGJyb3dzZXIncyBidWlsdC1pbiBzZWFyY2ggaW4gV2Via2l0LjwvbGk+CiAgICA8bGk+TWFrZSBkb3VibGUtIGFuZCB0cmlwbGUtY2xpY2sgd29yayBpbiBJRS48L2xpPgogICAgPGxpPlZhcmlvdXMgZml4ZXMgdG8gbW9kZXMuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNy0xMC0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0yLjE2LnppcCI+VmVyc2lvbiAyLjE2PC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkIDxhIGhyZWY9Im1vZGUvcGVybC9pbmRleC5odG1sIj5QZXJsPC9hPiwgPGEgaHJlZj0ibW9kZS9ydXN0L2luZGV4Lmh0bWwiPlJ1c3Q8L2E+LCA8YSBocmVmPSJtb2RlL3RpZGRseXdpa2kvaW5kZXguaHRtbCI+VGlkZGx5V2lraTwvYT4sIGFuZCA8YSBocmVmPSJtb2RlL2dyb292eS9pbmRleC5odG1sIj5Hcm9vdnk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+RHJhZ2dpbmcgdGV4dCBpbnNpZGUgdGhlIGVkaXRvciBub3cgbW92ZXMsIHJhdGhlciB0aGFuIGNvcGllcy48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNjb29yZHNGcm9tSW5kZXgiPjxjb2RlPmNvb3Jkc0Zyb21JbmRleDwvY29kZT48L2E+IG1ldGhvZC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGNvZGU+c2V0VmFsdWU8L2NvZGU+IG5vdyBubyBsb25nZXIgY2xlYXJzIGhpc3RvcnkuIFVzZSA8YSBocmVmPSJkb2MvbWFudWFsLmh0bWwjY2xlYXJIaXN0b3J5Ij48Y29kZT5jbGVhckhpc3Rvcnk8L2NvZGU+PC9hPiBmb3IgdGhhdC48L2xpPgogICAgPGxpPjxzdHJvbmc+QVBJIGNoYW5nZTwvc3Ryb25nPjogPGEgaHJlZj0iZG9jL21hbnVhbC5odG1sI21hcmtUZXh0Ij48Y29kZT5tYXJrVGV4dDwvY29kZT48L2E+IG5vdwogICAgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCA8Y29kZT5jbGVhcjwvY29kZT4gYW5kIDxjb2RlPmZpbmQ8L2NvZGU+CiAgICBtZXRob2RzLiBNYXJrZWQgdGV4dCBpcyBub3cgbW9yZSByb2J1c3Qgd2hlbiBlZGl0ZWQuPC9saT4KICAgIDxsaT5GaXggZWRpdGluZyBjb2RlIHdpdGggdGFicyBpbiBJbnRlcm5ldCBFeHBsb3Jlci48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI2LTA5LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTUuemlwIj5WZXJzaW9uIDIuMTU8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkZpeCBidWcgdGhhdCBzbnVjayBpbnRvIDIuMTQ6IENsaWNraW5nIHRoZQogIGNoYXJhY3RlciB0aGF0IGN1cnJlbnRseSBoYXMgdGhlIGN1cnNvciBkaWRuJ3QgcmUtZm9jdXMgdGhlCiAgZWRpdG9yLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDktMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xNC56aXAiPlZlcnNpb24gMi4xNDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCA8YSBocmVmPSJtb2RlL2Nsb2p1cmUvaW5kZXguaHRtbCI+Q2xvanVyZTwvYT4sIDxhIGhyZWY9Im1vZGUvcGFzY2FsL2luZGV4Lmh0bWwiPlBhc2NhbDwvYT4sIDxhIGhyZWY9Im1vZGUvbnRyaXBsZXMvaW5kZXguaHRtbCI+TlRyaXBsZXM8L2E+LCA8YSBocmVmPSJtb2RlL2ppbmphMi9pbmRleC5odG1sIj5KaW5qYTI8L2E+LCBhbmQgPGEgaHJlZj0ibW9kZS9tYXJrZG93bi9pbmRleC5odG1sIj5NYXJrZG93bjwvYT4gbW9kZXMuPC9saT4KICAgIDxsaT5BZGQgPGEgaHJlZj0idGhlbWUvY29iYWx0LmNzcyI+Q29iYWx0PC9hPiBhbmQgPGEgaHJlZj0idGhlbWUvZWNsaXBzZS5jc3MiPkVjbGlwc2U8L2E+IHRoZW1lcy48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fZml4ZWRHdXR0ZXIiPjxjb2RlPmZpeGVkR3V0dGVyPC9jb2RlPjwvYT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJ1ZyB3aXRoIDxjb2RlPnNldFZhbHVlPC9jb2RlPiBicmVha2luZyBjdXJzb3IgbW92ZW1lbnQuPC9saT4KICAgIDxsaT5NYWtlIGd1dHRlciB1cGRhdGVzIG11Y2ggbW9yZSBlZmZpY2llbnQuPC9saT4KICAgIDxsaT5BbGxvdyBkcmFnZ2luZyBvZiB0ZXh0IG91dCBvZiB0aGUgZWRpdG9yIChvbiBtb2Rlcm4gYnJvd3NlcnMpLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjMtMDgtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4xMy56aXAiPlZlcnNpb24gMi4xMzwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCA8YSBocmVmPSJtb2RlL3J1YnkvaW5kZXguaHRtbCI+UnVieTwvYT4sIDxhIGhyZWY9Im1vZGUvci9pbmRleC5odG1sIj5SPC9hPiwgPGEgaHJlZj0ibW9kZS9jb2ZmZWVzY3JpcHQvaW5kZXguaHRtbCI+Q29mZmVlU2NyaXB0PC9hPiwgYW5kIDxhIGhyZWY9Im1vZGUvdmVsb2NpdHkvaW5kZXguaHRtbCI+VmVsb2NpdHk8L2E+IG1vZGVzLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNnZXRHdXR0ZXJFbGVtZW50Ij48Y29kZT5nZXRHdXR0ZXJFbGVtZW50PC9jb2RlPjwvYT4gdG8gQVBJLjwvbGk+CiAgICA8bGk+U2V2ZXJhbCBmaXhlcyB0byBzY3JvbGxpbmcgYW5kIHBvc2l0aW9uaW5nLjwvbGk+CiAgICA8bGk+QWRkIDxhIGhyZWY9ImRvYy9tYW51YWwuaHRtbCNvcHRpb25fc21hcnRIb21lIj48Y29kZT5zbWFydEhvbWU8L2NvZGU+PC9hPiBvcHRpb24uPC9saT4KICAgIDxsaT5BZGQgYW4gZXhwZXJpbWVudGFsIDxhIGhyZWY9Im1vZGUveG1scHVyZS9pbmRleC5odG1sIj5wdXJlIFhNTDwvYT4gbW9kZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI1LTA3LTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMTIuemlwIj5WZXJzaW9uIDIuMTI8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3NwYXJxbC9pbmRleC5odG1sIj5TUEFSUUw8L2E+IG1vZGUuPC9saT4KICAgIDxsaT5GaXggYnVnIHdpdGggY3Vyc29yIGp1bXBpbmcgYXJvdW5kIGluIGFuIHVuZm9jdXNlZCBlZGl0b3IgaW4gSUUuPC9saT4KICAgIDxsaT5BbGxvdyBrZXkgYW5kIG1vdXNlIGV2ZW50cyB0byBidWJibGUgb3V0IG9mIHRoZSBlZGl0b3IuIElnbm9yZSB3aWRnZXQgY2xpY2tzLjwvbGk+CiAgICA8bGk+U29sdmUgY3Vyc29yIGZsYWtpbmVzcyBhZnRlciB1bmRvL3JlZG8uPC9saT4KICAgIDxsaT5GaXggYmxvY2stcmVpbmRlbnQgaWdub3JpbmcgdGhlIGxhc3QgZmV3IGxpbmVzLjwvbGk+CiAgICA8bGk+Rml4IHBhcnNpbmcgb2YgbXVsdGktbGluZSBhdHRycyBpbiBYTUwgbW9kZS48L2xpPgogICAgPGxpPlVzZSA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IGZvciBIVE1MLWVzY2FwaW5nLjwvbGk+CiAgICA8bGk+U29tZSBmaXhlcyB0byBpbmRlbnRhdGlvbiBpbiBDLWxpa2UgbW9kZS48L2xpPgogICAgPGxpPlNocmluayBob3JpeiBzY3JvbGxiYXJzIHdoZW4gbG9uZyBsaW5lcyByZW1vdmVkLjwvbGk+CiAgICA8bGk+Rml4IHdpZHRoIGZlZWRiYWNrIGxvb3AgYnVnIHRoYXQgY2F1c2VkIHRoZSB3aWR0aCBvZiBhbiBpbm5lciBESVYgdG8gc2hyaW5rLjwvbGk+CiAgPC91bD4KCiAgPHA+PGEgaHJlZj0iZG9jL29sZHJlbGVhc2UuaHRtbCI+T2xkZXIgcmVsZWFzZXMuLi48L2E+PC9wPgoKPC9kaXY+PC9kaXY+Cgo8ZGl2IHN0eWxlPSJoZWlnaHQ6IDJlbSI+Jm5ic3A7PC9kaXY+CgogIDxmb3JtIGFjdGlvbj0iaHR0cHM6Ly93d3cucGF5cGFsLmNvbS9jZ2ktYmluL3dlYnNjciIgbWV0aG9kPSJwb3N0IiBpZD0icGF5cGFsIj4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNtZCIgdmFsdWU9Il9zLXhjbGljayIvPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iaG9zdGVkX2J1dHRvbl9pZCIgdmFsdWU9IjNGVkhTNUZHVVk3Q0MiLz4KICA8L2Zvcm0+CgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/keymap/emacs.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVE9ETyBudW1iZXIgcHJlZml4ZXMKKGZ1bmN0aW9uKCkgewogIC8vIFJlYWxseSBwcmltaXRpdmUga2lsbC1yaW5nIGltcGxlbWVudGF0aW9uLgogIHZhciBraWxsUmluZyA9IFtdOwogIGZ1bmN0aW9uIGFkZFRvUmluZyhzdHIpIHsKICAgIGtpbGxSaW5nLnB1c2goc3RyKTsKICAgIGlmIChraWxsUmluZy5sZW5ndGggPiA1MCkga2lsbFJpbmcuc2hpZnQoKTsKICB9CiAgZnVuY3Rpb24gZ2V0RnJvbVJpbmcoKSB7IHJldHVybiBraWxsUmluZ1traWxsUmluZy5sZW5ndGggLSAxXSB8fCAiIjsgfQogIGZ1bmN0aW9uIHBvcEZyb21SaW5nKCkgeyBpZiAoa2lsbFJpbmcubGVuZ3RoID4gMSkga2lsbFJpbmcucG9wKCk7IHJldHVybiBnZXRGcm9tUmluZygpOyB9CgogIENvZGVNaXJyb3Iua2V5TWFwLmVtYWNzID0gewogICAgIkN0cmwtWCI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAiZW1hY3MtQ3RybC1YIik7fSwKICAgICJDdHJsLVciOiBmdW5jdGlvbihjbSkge2FkZFRvUmluZyhjbS5nZXRTZWxlY3Rpb24oKSk7IGNtLnJlcGxhY2VTZWxlY3Rpb24oIiIpO30sCiAgICAiQ3RybC1BbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTsgY20ucmVwbGFjZVNlbGVjdGlvbigiIik7fSwKICAgICJBbHQtVyI6IGZ1bmN0aW9uKGNtKSB7YWRkVG9SaW5nKGNtLmdldFNlbGVjdGlvbigpKTt9LAogICAgIkN0cmwtWSI6IGZ1bmN0aW9uKGNtKSB7Y20ucmVwbGFjZVNlbGVjdGlvbihnZXRGcm9tUmluZygpKTt9LAogICAgIkFsdC1ZIjogZnVuY3Rpb24oY20pIHtjbS5yZXBsYWNlU2VsZWN0aW9uKHBvcEZyb21SaW5nKCkpO30sCiAgICAiQ3RybC0vIjogInVuZG8iLCAiU2hpZnQtQ3RybC0tIjogInVuZG8iLCAiU2hpZnQtQWx0LSwiOiAiZ29Eb2NTdGFydCIsICJTaGlmdC1BbHQtLiI6ICJnb0RvY0VuZCIsCiAgICAiQ3RybC1TIjogImZpbmROZXh0IiwgIkN0cmwtUiI6ICJmaW5kUHJldiIsICJDdHJsLUciOiAiY2xlYXJTZWFyY2giLCAiU2hpZnQtQWx0LTUiOiAicmVwbGFjZSIsCiAgICAiQ3RybC1aIjogInVuZG8iLCAiQ21kLVoiOiAidW5kbyIsCiAgICBmYWxsdGhyb3VnaDogWyJiYXNpYyIsICJlbWFjc3kiXQogIH07CgogIENvZGVNaXJyb3Iua2V5TWFwWyJlbWFjcy1DdHJsLVgiXSA9IHsKICAgICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLVciOiAic2F2ZSIsICJTIjogInNhdmVBbGwiLCAiRiI6ICJvcGVuIiwgIlUiOiAidW5kbyIsICJLIjogImNsb3NlIiwKICAgIGF1dG86ICJlbWFjcyIsIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/keymap/vim.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIHZhciBjb3VudCA9ICIiOwogIHZhciBzZGlyID0gImYiOwogIHZhciBidWYgPSAiIjsKICB2YXIgeWFuayA9IDA7CiAgdmFyIG1hcmsgPSBbXTsKICBmdW5jdGlvbiBlbXB0eUJ1ZmZlcigpIHsgYnVmID0gIiI7IH0KICBmdW5jdGlvbiBwdXNoSW5CdWZmZXIoc3RyKSB7IGJ1ZiArPSBzdHI7IH07CiAgZnVuY3Rpb24gcHVzaENvdW50RGlnaXQoZGlnaXQpIHsgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7Y291bnQgKz0gZGlnaXQ7fSB9CiAgZnVuY3Rpb24gcG9wQ291bnQoKSB7IHZhciBpID0gcGFyc2VJbnQoY291bnQpOyBjb3VudCA9ICIiOyByZXR1cm4gaSB8fCAxOyB9CiAgZnVuY3Rpb24gY291bnRUaW1lcyhmdW5jKSB7CiAgICBpZiAodHlwZW9mIGZ1bmMgPT0gInN0cmluZyIpIGZ1bmMgPSBDb2RlTWlycm9yLmNvbW1hbmRzW2Z1bmNdOwogICAgcmV0dXJuIGZ1bmN0aW9uKGNtKSB7IGZvciAodmFyIGkgPSAwLCBjID0gcG9wQ291bnQoKTsgaSA8IGM7ICsraSkgZnVuYyhjbSk7IH0KICB9CgogIGZ1bmN0aW9uIGl0ZXJPYmoobywgZikgewogICAgZm9yICh2YXIgcHJvcCBpbiBvKSBpZiAoby5oYXNPd25Qcm9wZXJ0eShwcm9wKSkgZihwcm9wLCBvW3Byb3BdKTsKICB9CgogIHZhciB3b3JkID0gWy9cdy8sIC9bXlx3XHNdL10sIGJpZ1dvcmQgPSBbL1xTL107CiAgZnVuY3Rpb24gZmluZFdvcmQobGluZSwgcG9zLCBkaXIsIHJlZ2V4cHMpIHsKICAgIHZhciBzdG9wID0gMCwgbmV4dCA9IC0xOwogICAgaWYgKGRpciA+IDApIHsgc3RvcCA9IGxpbmUubGVuZ3RoOyBuZXh0ID0gMDsgfQogICAgdmFyIHN0YXJ0ID0gc3RvcCwgZW5kID0gc3RvcDsKICAgIC8vIEZpbmQgYm91bmRzIG9mIG5leHQgb25lLgogICAgb3V0ZXI6IGZvciAoOyBwb3MgIT0gc3RvcDsgcG9zICs9IGRpcikgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlZ2V4cHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAocmVnZXhwc1tpXS50ZXN0KGxpbmUuY2hhckF0KHBvcyArIG5leHQpKSkgewogICAgICAgICAgc3RhcnQgPSBwb3M7CiAgICAgICAgICBmb3IgKDsgcG9zICE9IHN0b3A7IHBvcyArPSBkaXIpIHsKICAgICAgICAgICAgaWYgKCFyZWdleHBzW2ldLnRlc3QobGluZS5jaGFyQXQocG9zICsgbmV4dCkpKSBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGVuZCA9IHBvczsKICAgICAgICAgIGJyZWFrIG91dGVyOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHtmcm9tOiBNYXRoLm1pbihzdGFydCwgZW5kKSwgdG86IE1hdGgubWF4KHN0YXJ0LCBlbmQpfTsKICB9CiAgZnVuY3Rpb24gbW92ZVRvV29yZChjbSwgcmVnZXhwcywgZGlyLCB3aGVyZSkgewogICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBjaCA9IGN1ci5jaCwgbGluZSA9IGNtLmdldExpbmUoY3VyLmxpbmUpLCB3b3JkOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgd29yZCA9IGZpbmRXb3JkKGxpbmUsIGNoLCBkaXIsIHJlZ2V4cHMpOwogICAgICBjaCA9IHdvcmRbd2hlcmUgPT0gImVuZCIgPyAidG8iIDogImZyb20iXTsKICAgICAgaWYgKGNoID09IGN1ci5jaCAmJiB3b3JkLmZyb20gIT0gd29yZC50bykgY2ggPSB3b3JkW2RpciA8IDAgPyAiZnJvbSIgOiAidG8iXTsKICAgICAgZWxzZSBicmVhazsKICAgIH0KICAgIGNtLnNldEN1cnNvcihjdXIubGluZSwgd29yZFt3aGVyZSA9PSAiZW5kIiA/ICJ0byIgOiAiZnJvbSJdLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gam9pbkxpbmVOZXh0KGNtKSB7CiAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCksIGNoID0gY3VyLmNoLCBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CiAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7IAogICAgaWYgKGN1ci5saW5lICE9IGNtLmxpbmVDb3VudCgpKSB7CiAgICAgIENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lRW5kKGNtKTsKICAgICAgY20ucmVwbGFjZVNlbGVjdGlvbigiICIsICJlbmQiKTsKICAgICAgQ29kZU1pcnJvci5jb21tYW5kcy5kZWxDaGFyUmlnaHQoY20pOwogICAgfSAKICB9CiAgZnVuY3Rpb24gZWRpdEN1cnNvcihtb2RlKSB7CiAgICBpZiAobW9kZSA9PSAidmltLWluc2VydCIpIHsgIAogICAgICAvLyBwdXQgaW4geW91ciBjdXJzb3IgY3NzIGNoYW5naW5nIGNvZGUKICAgIH0gZWxzZSBpZiAobW9kZSA9PSAidmltIikgewogICAgICAvLyBwdXQgaW4geW91ciBjdXJzb3IgY3NzIGNoYW5naW5nIGNvZGUKICAgIH0KICB9CiAgZnVuY3Rpb24gZGVsVGlsbE1hcmsoY20sIGNIYXIpIHsgCiAgICB2YXIgaSA9IG1hcmtbY0hhcl0sIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lLCBzdGFydCA9IGkgPiBsID8gbCA6IGksIGVuZCA9IGkgPiBsID8gaSA6IGw7CiAgICBjbS5zZXRDdXJzb3Ioc3RhcnQpOwogICAgZm9yICh2YXIgYyA9IHN0YXJ0OyBjIDw9IGVuZDsgYysrKSB7CiAgICAgIHB1c2hJbkJ1ZmZlcigiXG4iK2NtLmdldExpbmUoc3RhcnQpKTsgCiAgICAgIGNtLnJlbW92ZUxpbmUoc3RhcnQpOwogICAgfQogIH0KICBmdW5jdGlvbiB5YW5rVGlsbE1hcmsoY20sIGNIYXIpIHsgCiAgICB2YXIgaSA9IG1hcmtbY0hhcl0sIGwgPSBjbS5nZXRDdXJzb3IoKS5saW5lLCBzdGFydCA9IGkgPiBsID8gbCA6IGksIGVuZCA9IGkgPiBsID8gaSA6IGw7CiAgICBmb3IgKHZhciBjID0gc3RhcnQ7IGMgPD0gZW5kOyBjKyspIHsKICAgICAgcHVzaEluQnVmZmVyKCJcbiIrY20uZ2V0TGluZShjKSk7CiAgICB9CiAgICBjbS5zZXRDdXJzb3Ioc3RhcnQpOwogIH0KCiAgdmFyIG1hcCA9IENvZGVNaXJyb3Iua2V5TWFwLnZpbSA9IHsKICAgICIwIjogZnVuY3Rpb24oY20pIHtjb3VudC5sZW5ndGggPiAwID8gcHVzaENvdW50RGlnaXQoIjAiKShjbSkgOiBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZVN0YXJ0KGNtKTt9LAogICAgIkEiOiBmdW5jdGlvbihjbSkge3BvcENvdW50KCk7IGNtLnNldEN1cnNvcihjbS5nZXRDdXJzb3IoKS5saW5lLCBjbS5nZXRDdXJzb3IoKS5jaCsxLCB0cnVlKTsgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLWluc2VydCIpOyBlZGl0Q3Vyc29yKCJ2aW0taW5zZXJ0Iik7fSwKICAgICJTaGlmdC1BIjogZnVuY3Rpb24oY20pIHtwb3BDb3VudCgpOyBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7IGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1pbnNlcnQiKTsgZWRpdEN1cnNvcigidmltLWluc2VydCIpO30sCiAgICAiSSI6IGZ1bmN0aW9uKGNtKSB7cG9wQ291bnQoKTsgY20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLWluc2VydCIpOyBlZGl0Q3Vyc29yKCJ2aW0taW5zZXJ0Iik7fSwKICAgICJTaGlmdC1JIjogZnVuY3Rpb24oY20pIHtwb3BDb3VudCgpOyBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZVN0YXJ0U21hcnQoY20pOyBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0taW5zZXJ0Iik7IGVkaXRDdXJzb3IoInZpbS1pbnNlcnQiKTt9LAogICAgIk8iOiBmdW5jdGlvbihjbSkge3BvcENvdW50KCk7IENvZGVNaXJyb3IuY29tbWFuZHMuZ29MaW5lRW5kKGNtKTsgY20ucmVwbGFjZVNlbGVjdGlvbigiXG4iLCAiZW5kIik7IGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1pbnNlcnQiKTsgZWRpdEN1cnNvcigidmltLWluc2VydCIpO30sCiAgICAiU2hpZnQtTyI6IGZ1bmN0aW9uKGNtKSB7cG9wQ291bnQoKTsgQ29kZU1pcnJvci5jb21tYW5kcy5nb0xpbmVTdGFydChjbSk7IGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuIiwgInN0YXJ0Iik7IGNtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1pbnNlcnQiKTsgZWRpdEN1cnNvcigidmltLWluc2VydCIpO30sCiAgICAiRyI6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0T3B0aW9uKCJrZXlNYXAiLCAidmltLXByZWZpeC1nIik7fSwKICAgICJEIjogZnVuY3Rpb24oY20pIHtjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LWQiKTsgZW1wdHlCdWZmZXIoKTt9LAogICAgIk0iOiBmdW5jdGlvbihjbSkge2NtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1wcmVmaXgtbSIpOyBtYXJrID0gW107fSwKICAgICJZIjogZnVuY3Rpb24oY20pIHtjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LXkiKTsgZW1wdHlCdWZmZXIoKTsgeWFuayA9IDA7fSwKICAgICIvIjogZnVuY3Rpb24oY20pIHt2YXIgZiA9IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZDsgZiAmJiBmKGNtKTsgc2RpciA9ICJmIn0sCiAgICAiU2hpZnQtLyI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBmID0gQ29kZU1pcnJvci5jb21tYW5kcy5maW5kOwogICAgICBpZiAoZikgeyBmKGNtKTsgQ29kZU1pcnJvci5jb21tYW5kcy5maW5kUHJldihjbSk7IHNkaXIgPSAiciI7IH0KICAgIH0sCiAgICAiTiI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBmbiA9IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZE5leHQ7CiAgICAgIGlmIChmbikgc2RpciAhPSAiciIgPyBmbihjbSkgOiBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmRQcmV2KGNtKTsKICAgIH0sCiAgICAiU2hpZnQtTiI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIHZhciBmbiA9IENvZGVNaXJyb3IuY29tbWFuZHMuZmluZE5leHQ7CiAgICAgIGlmIChmbikgc2RpciAhPSAiciIgPyBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmRQcmV2KGNtKSA6IGZuLmZpbmROZXh0KGNtKTsKICAgIH0sCiAgICAiU2hpZnQtRyI6IGZ1bmN0aW9uKGNtKSB7Y291bnQgPT0gIiIgPyBjbS5zZXRDdXJzb3IoY20ubGluZUNvdW50KCkpIDogY20uc2V0Q3Vyc29yKHBhcnNlSW50KGNvdW50KS0xKTsgcG9wQ291bnQoKTsgQ29kZU1pcnJvci5jb21tYW5kcy5nb0xpbmVTdGFydChjbSk7fSwKICAgIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKICAvLyBBZGQgYmluZGluZ3MgZm9yIG51bWJlciBrZXlzCiAgZm9yICh2YXIgaSA9IDE7IGkgPCAxMDsgKytpKSBtYXBbaV0gPSBwdXNoQ291bnREaWdpdChpKTsKICAvLyBBZGQgYmluZGluZ3MgdGhhdCBhcmUgaW5mbHVlbmNlZCBieSBudW1iZXIga2V5cwogIGl0ZXJPYmooeyJIIjogImdvQ29sdW1uTGVmdCIsICJMIjogImdvQ29sdW1uUmlnaHQiLCAiSiI6ICJnb0xpbmVEb3duIiwgIksiOiAiZ29MaW5lVXAiLAoJCSAgICAgICAiTGVmdCI6ICJnb0NvbHVtbkxlZnQiLCAiUmlnaHQiOiAiZ29Db2x1bW5SaWdodCIsICJEb3duIjogImdvTGluZURvd24iLCAiVXAiOiAiZ29MaW5lVXAiLAogICAgICAgICAgICJCYWNrc3BhY2UiOiAiZ29DaGFyTGVmdCIsICJTcGFjZSI6ICJnb0NoYXJSaWdodCIsCiAgICAgICAgICAgIkIiOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIHdvcmQsIC0xLCAiZW5kIik7fSwKICAgICAgICAgICAiRSI6IGZ1bmN0aW9uKGNtKSB7bW92ZVRvV29yZChjbSwgd29yZCwgMSwgImVuZCIpO30sCiAgICAgICAgICAgIlciOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIHdvcmQsIDEsICJzdGFydCIpO30sCiAgICAgICAgICAgIlNoaWZ0LUIiOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIC0xLCAiZW5kIik7fSwKICAgICAgICAgICAiU2hpZnQtRSI6IGZ1bmN0aW9uKGNtKSB7bW92ZVRvV29yZChjbSwgYmlnV29yZCwgMSwgImVuZCIpO30sCiAgICAgICAgICAgIlNoaWZ0LVciOiBmdW5jdGlvbihjbSkge21vdmVUb1dvcmQoY20sIGJpZ1dvcmQsIDEsICJzdGFydCIpO30sCiAgICAgICAgICAgIlgiOiBmdW5jdGlvbihjbSkge0NvZGVNaXJyb3IuY29tbWFuZHMuZGVsQ2hhclJpZ2h0KGNtKX0sCiAgICAgICAgICAgIlAiOiBmdW5jdGlvbihjbSkgewoJCSAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLmxpbmU7CgkJICBpZiAoYnVmIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICBDb2RlTWlycm9yLmNvbW1hbmRzLmdvTGluZUVuZChjbSk7IAoJCSAgICBjbS5yZXBsYWNlU2VsZWN0aW9uKGJ1ZiwgImVuZCIpOwoJCSAgfQoJCSAgY20uc2V0Q3Vyc29yKGN1cisxKTsKCSAgICAgICAgfSwKICAgICAgICAgICAiU2hpZnQtWCI6IGZ1bmN0aW9uKGNtKSB7Q29kZU1pcnJvci5jb21tYW5kcy5kZWxDaGFyTGVmdChjbSl9LAogICAgICAgICAgICJTaGlmdC1KIjogZnVuY3Rpb24oY20pIHtqb2luTGluZU5leHQoY20pfSwKICAgICAgICAgICAiU2hpZnQtYCI6IGZ1bmN0aW9uKGNtKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjdXIgPSBjbS5nZXRDdXJzb3IoKSwgY0hhciA9IGNtLmdldFJhbmdlKHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCsxfSk7CgkJCWNIYXIgPSBjSGFyICE9IGNIYXIudG9Mb3dlckNhc2UoKSA/IGNIYXIudG9Mb3dlckNhc2UoKSA6IGNIYXIudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgICAgICAgICAgY20ucmVwbGFjZVJhbmdlKGNIYXIsIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaH0sIHtsaW5lOiBjdXIubGluZSwgY2g6IGN1ci5jaCsxfSk7CgkJCWNtLnNldEN1cnNvcihjdXIubGluZSwgY3VyLmNoKzEpOwoJICAgICAgICAgICAgICB9LAogICAgICAgICAgICJDdHJsLUIiOiBmdW5jdGlvbihjbSkge0NvZGVNaXJyb3IuY29tbWFuZHMuZ29QYWdlVXAoY20pfSwKICAgICAgICAgICAiQ3RybC1GIjogZnVuY3Rpb24oY20pIHtDb2RlTWlycm9yLmNvbW1hbmRzLmdvUGFnZURvd24oY20pfSwKCSAgICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAogICAgICAgICAgICJVIjogInVuZG8iLCAiQ3RybC1SIjogInJlZG8iLCAiU2hpZnQtNCI6ICJnb0xpbmVFbmQifSwKICAgICAgICAgIGZ1bmN0aW9uKGtleSwgY21kKSB7IG1hcFtrZXldID0gY291bnRUaW1lcyhjbWQpOyB9KTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1wcmVmaXgtZyJdID0gewogICAgIkUiOiBjb3VudFRpbWVzKGZ1bmN0aW9uKGNtKSB7IG1vdmVUb1dvcmQoY20sIHdvcmQsIC0xLCAic3RhcnQiKTt9KSwKICAgICJTaGlmdC1FIjogY291bnRUaW1lcyhmdW5jdGlvbihjbSkgeyBtb3ZlVG9Xb3JkKGNtLCBiaWdXb3JkLCAtMSwgInN0YXJ0Iik7fSksCiAgICBhdXRvOiAidmltIiwgCiAgICBjYXRjaGFsbDogZnVuY3Rpb24oY20pIHsvKmlnbm9yZSovfQogIH07CgogIENvZGVNaXJyb3Iua2V5TWFwWyJ2aW0tcHJlZml4LW0iXSA9IHsKICAgICJBIjogZnVuY3Rpb24oY20pIHttYXJrWyJBIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtQSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtQSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIkIiOiBmdW5jdGlvbihjbSkge21hcmtbIkIiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1CIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1CIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiQyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siQyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUMiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUMiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJEIjogZnVuY3Rpb24oY20pIHttYXJrWyJEIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtRCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtRCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIkUiOiBmdW5jdGlvbihjbSkge21hcmtbIkUiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1FIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1FIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiRiI6IGZ1bmN0aW9uKGNtKSB7bWFya1siRiJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUYiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUYiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJHIjogZnVuY3Rpb24oY20pIHttYXJrWyJHIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtRyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtRyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIkgiOiBmdW5jdGlvbihjbSkge21hcmtbIkgiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1IIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1IIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiSSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siSSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUkiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUkiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJKIjogZnVuY3Rpb24oY20pIHttYXJrWyJKIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtSiI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtSiJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIksiOiBmdW5jdGlvbihjbSkge21hcmtbIksiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1LIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1LIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiTCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siTCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LUwiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LUwiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJNIjogZnVuY3Rpb24oY20pIHttYXJrWyJNIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtTSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtTSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIk4iOiBmdW5jdGlvbihjbSkge21hcmtbIk4iXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1OIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1OIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiTyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siTyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LU8iOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LU8iXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJQIjogZnVuY3Rpb24oY20pIHttYXJrWyJQIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtUCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtUCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlEiOiBmdW5jdGlvbihjbSkge21hcmtbIlEiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1RIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1RIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiUiI6IGZ1bmN0aW9uKGNtKSB7bWFya1siUiJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LVIiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LVIiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTIjogZnVuY3Rpb24oY20pIHttYXJrWyJTIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtUyI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtUyJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlQiOiBmdW5jdGlvbihjbSkge21hcmtbIlQiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1UIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1UIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiVSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siVSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LVUiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LVUiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJWIjogZnVuY3Rpb24oY20pIHttYXJrWyJWIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtViI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtViJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlciOiBmdW5jdGlvbihjbSkge21hcmtbIlciXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1XIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1XIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiWCI6IGZ1bmN0aW9uKGNtKSB7bWFya1siWCJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIlNoaWZ0LVgiOiBmdW5jdGlvbihjbSkge21hcmtbIlNoaWZ0LVgiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJZIjogZnVuY3Rpb24oY20pIHttYXJrWyJZIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICAiU2hpZnQtWSI6IGZ1bmN0aW9uKGNtKSB7bWFya1siU2hpZnQtWSJdID0gY20uZ2V0Q3Vyc29yKCkubGluZTt9LAogICAgIloiOiBmdW5jdGlvbihjbSkge21hcmtbIloiXSA9IGNtLmdldEN1cnNvcigpLmxpbmU7fSwKICAgICJTaGlmdC1aIjogZnVuY3Rpb24oY20pIHttYXJrWyJTaGlmdC1aIl0gPSBjbS5nZXRDdXJzb3IoKS5saW5lO30sCiAgICBhdXRvOiAidmltIiwgCiAgICBjYXRjaGFsbDogZnVuY3Rpb24oY20pIHsvKmlnbm9yZSovfQogIH0KICAKICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC1kIl0gPSB7CiAgICAiRCI6IGNvdW50VGltZXMoZnVuY3Rpb24oY20pIHsgcHVzaEluQnVmZmVyKCJcbiIrY20uZ2V0TGluZShjbS5nZXRDdXJzb3IoKS5saW5lKSk7IGNtLnJlbW92ZUxpbmUoY20uZ2V0Q3Vyc29yKCkubGluZSk7IH0pLAogICAgIiciOiBmdW5jdGlvbihjbSkge2NtLnNldE9wdGlvbigia2V5TWFwIiwgInZpbS1wcmVmaXgtZCciKTsgZW1wdHlCdWZmZXIoKTt9LAogICAgYXV0bzogInZpbSIsIAogICAgY2F0Y2hhbGw6IGZ1bmN0aW9uKGNtKSB7LyppZ25vcmUqL30KICB9OwoKICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC1kJyJdID0gewogICAgIkEiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJBIik7fSwKICAgICJTaGlmdC1BIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtQSIpO30sCiAgICAiQiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIkIiKTt9LAogICAgIlNoaWZ0LUIiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1CIik7fSwKICAgICJDIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiQyIpO30sCiAgICAiU2hpZnQtQyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUMiKTt9LAogICAgIkQiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJEIik7fSwKICAgICJTaGlmdC1EIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtRCIpO30sCiAgICAiRSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIkUiKTt9LAogICAgIlNoaWZ0LUUiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1FIik7fSwKICAgICJGIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiRiIpO30sCiAgICAiU2hpZnQtRiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUYiKTt9LAogICAgIkciOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJHIik7fSwKICAgICJTaGlmdC1HIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtRyIpO30sCiAgICAiSCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIkgiKTt9LAogICAgIlNoaWZ0LUgiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1IIik7fSwKICAgICJJIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiSSIpO30sCiAgICAiU2hpZnQtSSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUkiKTt9LAogICAgIkoiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJKIik7fSwKICAgICJTaGlmdC1KIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtSiIpO30sCiAgICAiSyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIksiKTt9LAogICAgIlNoaWZ0LUsiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1LIik7fSwKICAgICJMIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiTCIpO30sCiAgICAiU2hpZnQtTCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LUwiKTt9LAogICAgIk0iOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJNIik7fSwKICAgICJTaGlmdC1NIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtTSIpO30sCiAgICAiTiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIk4iKTt9LAogICAgIlNoaWZ0LU4iOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1OIik7fSwKICAgICJPIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiTyIpO30sCiAgICAiU2hpZnQtTyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LU8iKTt9LAogICAgIlAiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJQIik7fSwKICAgICJTaGlmdC1QIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtUCIpO30sCiAgICAiUSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlEiKTt9LAogICAgIlNoaWZ0LVEiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1RIik7fSwKICAgICJSIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiUiIpO30sCiAgICAiU2hpZnQtUiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LVIiKTt9LAogICAgIlMiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTIik7fSwKICAgICJTaGlmdC1TIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtUyIpO30sCiAgICAiVCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlQiKTt9LAogICAgIlNoaWZ0LVQiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1UIik7fSwKICAgICJVIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiVSIpO30sCiAgICAiU2hpZnQtVSI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LVUiKTt9LAogICAgIlYiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJWIik7fSwKICAgICJTaGlmdC1WIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtViIpO30sCiAgICAiVyI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlciKTt9LAogICAgIlNoaWZ0LVciOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1XIik7fSwKICAgICJYIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiWCIpO30sCiAgICAiU2hpZnQtWCI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIlNoaWZ0LVgiKTt9LAogICAgIlkiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJZIik7fSwKICAgICJTaGlmdC1ZIjogZnVuY3Rpb24oY20pIHtkZWxUaWxsTWFyayhjbSwiU2hpZnQtWSIpO30sCiAgICAiWiI6IGZ1bmN0aW9uKGNtKSB7ZGVsVGlsbE1hcmsoY20sIloiKTt9LAogICAgIlNoaWZ0LVoiOiBmdW5jdGlvbihjbSkge2RlbFRpbGxNYXJrKGNtLCJTaGlmdC1aIik7fSwKICAgIGF1dG86ICJ2aW0iLCAKICAgIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1wcmVmaXgteSciXSA9IHsKICAgICJBIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkEiKTt9LAogICAgIlNoaWZ0LUEiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtQSIpO30sCiAgICAiQiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJCIik7fSwKICAgICJTaGlmdC1CIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUIiKTt9LAogICAgIkMiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiQyIpO30sCiAgICAiU2hpZnQtQyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1DIik7fSwKICAgICJEIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkQiKTt9LAogICAgIlNoaWZ0LUQiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtRCIpO30sCiAgICAiRSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJFIik7fSwKICAgICJTaGlmdC1FIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUUiKTt9LAogICAgIkYiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiRiIpO30sCiAgICAiU2hpZnQtRiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1GIik7fSwKICAgICJHIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkciKTt9LAogICAgIlNoaWZ0LUciOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtRyIpO30sCiAgICAiSCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJIIik7fSwKICAgICJTaGlmdC1IIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUgiKTt9LAogICAgIkkiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiSSIpO30sCiAgICAiU2hpZnQtSSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1JIik7fSwKICAgICJKIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIkoiKTt9LAogICAgIlNoaWZ0LUoiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtSiIpO30sCiAgICAiSyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJLIik7fSwKICAgICJTaGlmdC1LIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LUsiKTt9LAogICAgIkwiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiTCIpO30sCiAgICAiU2hpZnQtTCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1MIik7fSwKICAgICJNIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIk0iKTt9LAogICAgIlNoaWZ0LU0iOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtTSIpO30sCiAgICAiTiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJOIik7fSwKICAgICJTaGlmdC1OIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LU4iKTt9LAogICAgIk8iOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiTyIpO30sCiAgICAiU2hpZnQtTyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1PIik7fSwKICAgICJQIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlAiKTt9LAogICAgIlNoaWZ0LVAiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtUCIpO30sCiAgICAiUSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJRIik7fSwKICAgICJTaGlmdC1RIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVEiKTt9LAogICAgIlIiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiUiIpO30sCiAgICAiU2hpZnQtUiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1SIik7fSwKICAgICJTIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlMiKTt9LAogICAgIlNoaWZ0LVMiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtUyIpO30sCiAgICAiVCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJUIik7fSwKICAgICJTaGlmdC1UIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVQiKTt9LAogICAgIlUiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiVSIpO30sCiAgICAiU2hpZnQtVSI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1VIik7fSwKICAgICJWIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlYiKTt9LAogICAgIlNoaWZ0LVYiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtViIpO30sCiAgICAiVyI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJXIik7fSwKICAgICJTaGlmdC1XIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVciKTt9LAogICAgIlgiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiWCIpO30sCiAgICAiU2hpZnQtWCI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJTaGlmdC1YIik7fSwKICAgICJZIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlkiKTt9LAogICAgIlNoaWZ0LVkiOiBmdW5jdGlvbihjbSkge3lhbmtUaWxsTWFyayhjbSwiU2hpZnQtWSIpO30sCiAgICAiWiI6IGZ1bmN0aW9uKGNtKSB7eWFua1RpbGxNYXJrKGNtLCJaIik7fSwKICAgICJTaGlmdC1aIjogZnVuY3Rpb24oY20pIHt5YW5rVGlsbE1hcmsoY20sIlNoaWZ0LVoiKTt9LAogICAgYXV0bzogInZpbSIsIAogICAgY2F0Y2hhbGw6IGZ1bmN0aW9uKGNtKSB7LyppZ25vcmUqL30KICB9OwoKICBDb2RlTWlycm9yLmtleU1hcFsidmltLXByZWZpeC15Il0gPSB7CiAgICAiWSI6IGNvdW50VGltZXMoZnVuY3Rpb24oY20pIHsgcHVzaEluQnVmZmVyKCJcbiIrY20uZ2V0TGluZShjbS5nZXRDdXJzb3IoKS5saW5lK3lhbmspKTsgeWFuaysrOyB9KSwKICAgICInIjogZnVuY3Rpb24oY20pIHtjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0tcHJlZml4LXknIik7IGVtcHR5QnVmZmVyKCk7fSwKICAgIGF1dG86ICJ2aW0iLCAKICAgIGNhdGNoYWxsOiBmdW5jdGlvbihjbSkgey8qaWdub3JlKi99CiAgfTsKCiAgQ29kZU1pcnJvci5rZXlNYXBbInZpbS1pbnNlcnQiXSA9IHsKICAgICJFc2MiOiBmdW5jdGlvbihjbSkgewoJICAgICBjbS5zZXRDdXJzb3IoY20uZ2V0Q3Vyc29yKCkubGluZSwgY20uZ2V0Q3Vyc29yKCkuY2gtMSwgdHJ1ZSk7IAoJICAgICBjbS5zZXRPcHRpb24oImtleU1hcCIsICJ2aW0iKTsKCSAgICAgZWRpdEN1cnNvcigidmltIik7CiAgICAgICAgICAgfSwKICAgICJDdHJsLU4iOiBmdW5jdGlvbihjbSkgey8qIENvZGUgdG8gYnJpbmcgdXAgYXV0b2NvbXBsZXRlIGhpbnQgKi99LAogICAgIkN0cmwtUCI6IGZ1bmN0aW9uKGNtKSB7LyogQ29kZSB0byBicmluZyB1cCBhdXRvY29tcGxldGUgaGludCAqL30sCiAgICBmYWxsdGhyb3VnaDogWyJkZWZhdWx0Il0KICB9Owp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3IgewogIGxpbmUtaGVpZ2h0OiAxZW07CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQoKLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBvdmVyZmxvdzogYXV0bzsKICBoZWlnaHQ6IDMwMHB4OwogIC8qIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgYW4gSUVbNjddIGJ1ZyB3aGVyZSB0aGUgc2Nyb2xsZWQgY29udGVudAogICAgIGlzIHZpc2libGUgb3V0c2lkZSBvZiB0aGUgc2Nyb2xsaW5nIGJveC4gKi8KICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgb3V0bGluZTogbm9uZTsKfQoKLkNvZGVNaXJyb3ItZ3V0dGVyIHsKICBwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHRvcDogMDsKICB6LWluZGV4OiAxMDsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3OwogIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNlZWU7CiAgbWluLXdpZHRoOiAyZW07CiAgaGVpZ2h0OiAxMDAlOwp9Ci5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsKICBjb2xvcjogI2FhYTsKICB0ZXh0LWFsaWduOiByaWdodDsKICBwYWRkaW5nOiAuNGVtIC4yZW0gLjRlbSAuNGVtOwogIHdoaXRlLXNwYWNlOiBwcmUgIWltcG9ydGFudDsKfQouQ29kZU1pcnJvci1saW5lcyB7CiAgcGFkZGluZzogLjRlbTsKICB3aGl0ZS1zcGFjZTogcHJlOwp9CgouQ29kZU1pcnJvciBwcmUgewogIC1tb3otYm9yZGVyLXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7CiAgLW8tYm9yZGVyLXJhZGl1czogMDsKICBib3JkZXItcmFkaXVzOiAwOwogIGJvcmRlci13aWR0aDogMDsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICBmb250LWZhbWlseTogaW5oZXJpdDsKICBmb250LXNpemU6IGluaGVyaXQ7CiAgcGFkZGluZzogMDsgbWFyZ2luOiAwOwogIHdoaXRlLXNwYWNlOiBwcmU7CiAgd29yZC13cmFwOiBub3JtYWw7Cn0KCi5Db2RlTWlycm9yLXdyYXAgcHJlIHsKICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwp9Ci5Db2RlTWlycm9yLXdyYXAgLkNvZGVNaXJyb3Itc2Nyb2xsIHsKICBvdmVyZmxvdy14OiBoaWRkZW47Cn0KCi5Db2RlTWlycm9yIHRleHRhcmVhIHsKICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7Cn0KCi5Db2RlTWlycm9yIHByZS5Db2RlTWlycm9yLWN1cnNvciB7CiAgei1pbmRleDogMTA7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHZpc2liaWxpdHk6IGhpZGRlbjsKICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogIGJvcmRlci1yaWdodDpub25lOwogIHdpZHRoOjA7Cn0KLkNvZGVNaXJyb3IgcHJlLkNvZGVNaXJyb3ItY3Vyc29yLkNvZGVNaXJyb3Itb3ZlcndyaXRlIHt9Ci5Db2RlTWlycm9yLWZvY3VzZWQgcHJlLkNvZGVNaXJyb3ItY3Vyc29yIHsKICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgpkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkOWQ5ZDk7IH0KLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNkN2Q0ZjA7IH0KCi5Db2RlTWlycm9yLXNlYXJjaGluZyB7CiAgYmFja2dyb3VuZDogI2ZmYTsKICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAwLCAuNCk7Cn0KCi8qIERlZmF1bHQgdGhlbWUgKi8KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1rZXl3b3JkIHtjb2xvcjogIzcwODt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hdG9tIHtjb2xvcjogIzIxOTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1udW1iZXIge2NvbG9yOiAjMTY0O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRlZiB7Y29sb3I6ICMwMGY7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tdmFyaWFibGUge2NvbG9yOiBibGFjazt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogIzA1YTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12YXJpYWJsZS0zIHtjb2xvcjogIzA4NTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1wcm9wZXJ0eSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLW9wZXJhdG9yIHtjb2xvcjogYmxhY2s7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29tbWVudCB7Y29sb3I6ICNhNTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc3RyaW5nIHtjb2xvcjogI2ExMTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1zdHJpbmctMiB7Y29sb3I6ICNmNTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbWV0YSB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tZXJyb3Ige2NvbG9yOiAjZjAwO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tYnVpbHRpbiB7Y29sb3I6ICMzMGE7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tYnJhY2tldCB7Y29sb3I6ICNjYzc7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tdGFnIHtjb2xvcjogIzE3MDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hdHRyaWJ1dGUge2NvbG9yOiAjMDBjO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWhlYWRlciB7Y29sb3I6ICNhMGE7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tcXVvdGUge2NvbG9yOiAjMDkwO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWhyIHtjb2xvcjogIzk5OTt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1saW5rIHtjb2xvcjogIzAwYzt9CgpzcGFuLmNtLWhlYWRlciwgc3Bhbi5jbS1zdHJvbmcge2ZvbnQtd2VpZ2h0OiBib2xkO30Kc3Bhbi5jbS1lbSB7Zm9udC1zdHlsZTogaXRhbGljO30Kc3Bhbi5jbS1lbXN0cm9uZyB7Zm9udC1zdHlsZTogaXRhbGljOyBmb250LXdlaWdodDogYm9sZDt9CnNwYW4uY20tbGluayB7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQoKZGl2LkNvZGVNaXJyb3Igc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7Y29sb3I6ICMwZjA7fQpkaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMjt9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvciB2ZXJzaW9uIDIuMjMKLy8KLy8gQWxsIGZ1bmN0aW9ucyB0aGF0IG5lZWQgYWNjZXNzIHRvIHRoZSBlZGl0b3IncyBzdGF0ZSBsaXZlIGluc2lkZQovLyB0aGUgQ29kZU1pcnJvciBmdW5jdGlvbi4gQmVsb3cgdGhhdCwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSwKLy8gc29tZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQuCgovLyBDb2RlTWlycm9yIGlzIHRoZSBvbmx5IGdsb2JhbCB2YXIgd2UgY2xhaW0KdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBlZGl0b3IgaW5zdGFuY2UuIEl0cwogIC8vIGNsb3N1cmUgaXMgdXNlZCB0byBzdG9yZSB0aGUgZWRpdG9yIHN0YXRlLgogIGZ1bmN0aW9uIENvZGVNaXJyb3IocGxhY2UsIGdpdmVuT3B0aW9ucykgewogICAgLy8gRGV0ZXJtaW5lIGVmZmVjdGl2ZSBvcHRpb25zIGJhc2VkIG9uIGdpdmVuIHZhbHVlcyBhbmQgZGVmYXVsdHMuCiAgICB2YXIgb3B0aW9ucyA9IHt9LCBkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHM7CiAgICBmb3IgKHZhciBvcHQgaW4gZGVmYXVsdHMpCiAgICAgIGlmIChkZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShvcHQpKQogICAgICAgIG9wdGlvbnNbb3B0XSA9IChnaXZlbk9wdGlvbnMgJiYgZ2l2ZW5PcHRpb25zLmhhc093blByb3BlcnR5KG9wdCkgPyBnaXZlbk9wdGlvbnMgOiBkZWZhdWx0cylbb3B0XTsKCiAgICAvLyBUaGUgZWxlbWVudCBpbiB3aGljaCB0aGUgZWRpdG9yIGxpdmVzLgogICAgdmFyIHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHdyYXBwZXIuY2xhc3NOYW1lID0gIkNvZGVNaXJyb3IiICsgKG9wdGlvbnMubGluZVdyYXBwaW5nID8gIiBDb2RlTWlycm9yLXdyYXAiIDogIiIpOwogICAgLy8gVGhpcyBtZXNzIGNyZWF0ZXMgdGhlIGJhc2UgRE9NIHN0cnVjdHVyZSBmb3IgdGhlIGVkaXRvci4KICAgIHdyYXBwZXIuaW5uZXJIVE1MID0KICAgICAgJzxkaXYgc3R5bGU9Im92ZXJmbG93OiBoaWRkZW47IHBvc2l0aW9uOiByZWxhdGl2ZTsgd2lkdGg6IDNweDsgaGVpZ2h0OiAwcHg7Ij4nICsgLy8gV3JhcHMgYW5kIGhpZGVzIGlucHV0IHRleHRhcmVhCiAgICAgICAgJzx0ZXh0YXJlYSBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBwYWRkaW5nOiAwOyB3aWR0aDogMXB4OyBoZWlnaHQ6IDFlbSIgd3JhcD0ib2ZmIiAnICsKICAgICAgICAgICdhdXRvY29ycmVjdD0ib2ZmIiBhdXRvY2FwaXRhbGl6ZT0ib2ZmIj48L3RleHRhcmVhPjwvZGl2PicgKwogICAgICAnPGRpdiBjbGFzcz0iQ29kZU1pcnJvci1zY3JvbGwiIHRhYmluZGV4PSItMSI+JyArCiAgICAgICAgJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+JyArIC8vIFNldCB0byB0aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0LCBjYXVzZXMgc2Nyb2xsaW5nCiAgICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj4nICsgLy8gTW92ZWQgYXJvdW5kIGl0cyBwYXJlbnQgdG8gY292ZXIgdmlzaWJsZSB2aWV3CiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJDb2RlTWlycm9yLWd1dHRlciI+PGRpdiBjbGFzcz0iQ29kZU1pcnJvci1ndXR0ZXItdGV4dCI+PC9kaXY+PC9kaXY+JyArCiAgICAgICAgICAgIC8vIFByb3ZpZGVzIHBvc2l0aW9uaW5nIHJlbGF0aXZlIHRvICh2aXNpYmxlKSB0ZXh0IG9yaWdpbgogICAgICAgICAgICAnPGRpdiBjbGFzcz0iQ29kZU1pcnJvci1saW5lcyI+PGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyB6LWluZGV4OiAwIj4nICsKICAgICAgICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAwOyBvdmVyZmxvdzogaGlkZGVuOyB2aXNpYmlsaXR5OiBoaWRkZW47Ij48L2Rpdj4nICsKICAgICAgICAgICAgICAnPHByZSBjbGFzcz0iQ29kZU1pcnJvci1jdXJzb3IiPiYjMTYwOzwvcHJlPicgKyAvLyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQgYmxpbmt5IGN1cnNvcgogICAgICAgICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHotaW5kZXg6IC0xIj48L2Rpdj48ZGl2PjwvZGl2PicgKyAvLyBESVZzIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbiBhbmQgdGhlIGFjdHVhbCBjb2RlCiAgICAgICAgICAgICc8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj4nOwogICAgaWYgKHBsYWNlLmFwcGVuZENoaWxkKSBwbGFjZS5hcHBlbmRDaGlsZCh3cmFwcGVyKTsgZWxzZSBwbGFjZSh3cmFwcGVyKTsKICAgIC8vIEkndmUgbmV2ZXIgc2VlbiBtb3JlIGVsZWdhbnQgY29kZSBpbiBteSBsaWZlLgogICAgdmFyIGlucHV0RGl2ID0gd3JhcHBlci5maXJzdENoaWxkLCBpbnB1dCA9IGlucHV0RGl2LmZpcnN0Q2hpbGQsCiAgICAgICAgc2Nyb2xsZXIgPSB3cmFwcGVyLmxhc3RDaGlsZCwgY29kZSA9IHNjcm9sbGVyLmZpcnN0Q2hpbGQsCiAgICAgICAgbW92ZXIgPSBjb2RlLmZpcnN0Q2hpbGQsIGd1dHRlciA9IG1vdmVyLmZpcnN0Q2hpbGQsIGd1dHRlclRleHQgPSBndXR0ZXIuZmlyc3RDaGlsZCwKICAgICAgICBsaW5lU3BhY2UgPSBndXR0ZXIubmV4dFNpYmxpbmcuZmlyc3RDaGlsZCwgbWVhc3VyZSA9IGxpbmVTcGFjZS5maXJzdENoaWxkLAogICAgICAgIGN1cnNvciA9IG1lYXN1cmUubmV4dFNpYmxpbmcsIHNlbGVjdGlvbkRpdiA9IGN1cnNvci5uZXh0U2libGluZywKICAgICAgICBsaW5lRGl2ID0gc2VsZWN0aW9uRGl2Lm5leHRTaWJsaW5nOwogICAgdGhlbWVDaGFuZ2VkKCk7CiAgICAvLyBOZWVkZWQgdG8gaGlkZSBiaWcgYmx1ZSBibGlua2luZyBjdXJzb3Igb24gTW9iaWxlIFNhZmFyaQogICAgaWYgKGlvcykgaW5wdXQuc3R5bGUud2lkdGggPSAiMHB4IjsKICAgIGlmICghd2Via2l0KSBsaW5lU3BhY2UuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgIGxpbmVTcGFjZS5zdHlsZS5vdXRsaW5lID0gIm5vbmUiOwogICAgaWYgKG9wdGlvbnMudGFiaW5kZXggIT0gbnVsbCkgaW5wdXQudGFiSW5kZXggPSBvcHRpb25zLnRhYmluZGV4OwogICAgaWYgKG9wdGlvbnMuYXV0b2ZvY3VzKSBmb2N1c0lucHV0KCk7CiAgICBpZiAoIW9wdGlvbnMuZ3V0dGVyICYmICFvcHRpb25zLmxpbmVOdW1iZXJzKSBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAogICAgaWYgKGtodG1sKSBpbnB1dERpdi5zdHlsZS5oZWlnaHQgPSAiMXB4IiwgaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwoKICAgIC8vIENoZWNrIGZvciBwcm9ibGVtIHdpdGggSUUgaW5uZXJIVE1MIG5vdCB3b3JraW5nIHdoZW4gd2UgaGF2ZSBhCiAgICAvLyBQIChvciBzaW1pbGFyKSBwYXJlbnQgbm9kZS4KICAgIHRyeSB7IHN0cmluZ1dpZHRoKCJ4Iik7IH0KICAgIGNhdGNoIChlKSB7CiAgICAgIGlmIChlLm1lc3NhZ2UubWF0Y2goL3J1bnRpbWUvaSkpCiAgICAgICAgZSA9IG5ldyBFcnJvcigiQSBDb2RlTWlycm9yIGluc2lkZSBhIFAtc3R5bGUgZWxlbWVudCBkb2VzIG5vdCB3b3JrIGluIEludGVybmV0IEV4cGxvcmVyLiAoaW5uZXJIVE1MIGJ1ZykiKTsKICAgICAgdGhyb3cgZTsKICAgIH0KCiAgICAvLyBEZWxheWVkIG9iamVjdCB3cmFwIHRpbWVvdXRzLCBtYWtpbmcgc3VyZSBvbmx5IG9uZSBpcyBhY3RpdmUuIGJsaW5rZXIgaG9sZHMgYW4gaW50ZXJ2YWwuCiAgICB2YXIgcG9sbCA9IG5ldyBEZWxheWVkKCksIGhpZ2hsaWdodCA9IG5ldyBEZWxheWVkKCksIGJsaW5rZXI7CgogICAgLy8gbW9kZSBob2xkcyBhIG1vZGUgQVBJIG9iamVjdC4gZG9jIGlzIHRoZSB0cmVlIG9mIExpbmUgb2JqZWN0cywKICAgIC8vIHdvcmsgYW4gYXJyYXkgb2YgbGluZXMgdGhhdCBzaG91bGQgYmUgcGFyc2VkLCBhbmQgaGlzdG9yeSB0aGUKICAgIC8vIHVuZG8gaGlzdG9yeSAoaW5zdGFuY2Ugb2YgSGlzdG9yeSBjb25zdHJ1Y3RvcikuCiAgICB2YXIgbW9kZSwgZG9jID0gbmV3IEJyYW5jaENodW5rKFtuZXcgTGVhZkNodW5rKFtuZXcgTGluZSgiIildKV0pLCB3b3JrLCBmb2N1c2VkOwogICAgbG9hZE1vZGUoKTsKICAgIC8vIFRoZSBzZWxlY3Rpb24uIFRoZXNlIGFyZSBhbHdheXMgbWFpbnRhaW5lZCB0byBwb2ludCBhdCB2YWxpZAogICAgLy8gcG9zaXRpb25zLiBJbnZlcnRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIHVzZXIgaXMKICAgIC8vIHNlbGVjdGluZyBib3R0b20tdG8tdG9wLgogICAgdmFyIHNlbCA9IHtmcm9tOiB7bGluZTogMCwgY2g6IDB9LCB0bzoge2xpbmU6IDAsIGNoOiAwfSwgaW52ZXJ0ZWQ6IGZhbHNlfTsKICAgIC8vIFNlbGVjdGlvbi1yZWxhdGVkIGZsYWdzLiBzaGlmdFNlbGVjdGluZyBvYnZpb3VzbHkgdHJhY2tzCiAgICAvLyB3aGV0aGVyIHRoZSB1c2VyIGlzIGhvbGRpbmcgc2hpZnQuCiAgICB2YXIgc2hpZnRTZWxlY3RpbmcsIGxhc3RDbGljaywgbGFzdERvdWJsZUNsaWNrLCBsYXN0U2Nyb2xsUG9zID0gMCwgZHJhZ2dpbmdUZXh0LAogICAgICAgIG92ZXJ3cml0ZSA9IGZhbHNlLCBzdXBwcmVzc0VkaXRzID0gZmFsc2U7CiAgICAvLyBWYXJpYWJsZXMgdXNlZCBieSBzdGFydE9wZXJhdGlvbi9lbmRPcGVyYXRpb24gdG8gdHJhY2sgd2hhdAogICAgLy8gaGFwcGVuZWQgZHVyaW5nIHRoZSBvcGVyYXRpb24uCiAgICB2YXIgdXBkYXRlSW5wdXQsIHVzZXJTZWxDaGFuZ2UsIGNoYW5nZXMsIHRleHRDaGFuZ2VkLCBzZWxlY3Rpb25DaGFuZ2VkLCBsZWF2ZUlucHV0QWxvbmUsCiAgICAgICAgZ3V0dGVyRGlydHksIGNhbGxiYWNrczsKICAgIC8vIEN1cnJlbnQgdmlzaWJsZSByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCiAgICB2YXIgZGlzcGxheU9mZnNldCA9IDAsIHNob3dpbmdGcm9tID0gMCwgc2hvd2luZ1RvID0gMCwgbGFzdFNpemVDID0gMDsKICAgIC8vIGJyYWNrZXRIaWdobGlnaHRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgYSBicmFja2V0IGhhcyBiZWVuCiAgICAvLyBtYXJrZWQuCiAgICB2YXIgYnJhY2tldEhpZ2hsaWdodGVkOwogICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyCiAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuCiAgICB2YXIgbWF4TGluZSA9ICIiLCBtYXhXaWR0aDsKICAgIHZhciB0YWJDYWNoZSA9IHt9OwoKICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRlbnQuCiAgICBvcGVyYXRpb24oZnVuY3Rpb24oKXtzZXRWYWx1ZShvcHRpb25zLnZhbHVlIHx8ICIiKTsgdXBkYXRlSW5wdXQgPSBmYWxzZTt9KSgpOwogICAgdmFyIGhpc3RvcnkgPSBuZXcgSGlzdG9yeSgpOwoKICAgIC8vIFJlZ2lzdGVyIG91ciBldmVudCBoYW5kbGVycy4KICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJtb3VzZWRvd24iLCBvcGVyYXRpb24ob25Nb3VzZURvd24pKTsKICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJkYmxjbGljayIsIG9wZXJhdGlvbihvbkRvdWJsZUNsaWNrKSk7CiAgICBjb25uZWN0KGxpbmVTcGFjZSwgImRyYWdzdGFydCIsIG9uRHJhZ1N0YXJ0KTsKICAgIGNvbm5lY3QobGluZVNwYWNlLCAic2VsZWN0c3RhcnQiLCBlX3ByZXZlbnREZWZhdWx0KTsKICAgIC8vIEdlY2tvIGJyb3dzZXJzIGZpcmUgY29udGV4dG1lbnUgKmFmdGVyKiBvcGVuaW5nIHRoZSBtZW51LCBhdAogICAgLy8gd2hpY2ggcG9pbnQgd2UgY2FuJ3QgbWVzcyB3aXRoIGl0IGFueW1vcmUuIENvbnRleHQgbWVudSBpcwogICAgLy8gaGFuZGxlZCBpbiBvbk1vdXNlRG93biBmb3IgR2Vja28uCiAgICBpZiAoIWdlY2tvKSBjb25uZWN0KHNjcm9sbGVyLCAiY29udGV4dG1lbnUiLCBvbkNvbnRleHRNZW51KTsKICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJzY3JvbGwiLCBmdW5jdGlvbigpIHsKICAgICAgbGFzdFNjcm9sbFBvcyA9IHNjcm9sbGVyLnNjcm9sbFRvcDsKICAgICAgdXBkYXRlRGlzcGxheShbXSk7CiAgICAgIGlmIChvcHRpb25zLmZpeGVkR3V0dGVyKSBndXR0ZXIuc3R5bGUubGVmdCA9IHNjcm9sbGVyLnNjcm9sbExlZnQgKyAicHgiOwogICAgICBpZiAob3B0aW9ucy5vblNjcm9sbCkgb3B0aW9ucy5vblNjcm9sbChpbnN0YW5jZSk7CiAgICB9KTsKICAgIGNvbm5lY3Qod2luZG93LCAicmVzaXplIiwgZnVuY3Rpb24oKSB7dXBkYXRlRGlzcGxheSh0cnVlKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihvbktleVVwKSk7CiAgICBjb25uZWN0KGlucHV0LCAiaW5wdXQiLCBmYXN0UG9sbCk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5ZG93biIsIG9wZXJhdGlvbihvbktleURvd24pKTsKICAgIGNvbm5lY3QoaW5wdXQsICJrZXlwcmVzcyIsIG9wZXJhdGlvbihvbktleVByZXNzKSk7CiAgICBjb25uZWN0KGlucHV0LCAiZm9jdXMiLCBvbkZvY3VzKTsKICAgIGNvbm5lY3QoaW5wdXQsICJibHVyIiwgb25CbHVyKTsKCiAgICBjb25uZWN0KHNjcm9sbGVyLCAiZHJhZ2VudGVyIiwgZV9zdG9wKTsKICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJkcmFnb3ZlciIsIGVfc3RvcCk7CiAgICBjb25uZWN0KHNjcm9sbGVyLCAiZHJvcCIsIG9wZXJhdGlvbihvbkRyb3ApKTsKICAgIGNvbm5lY3Qoc2Nyb2xsZXIsICJwYXN0ZSIsIGZ1bmN0aW9uKCl7Zm9jdXNJbnB1dCgpOyBmYXN0UG9sbCgpO30pOwogICAgY29ubmVjdChpbnB1dCwgInBhc3RlIiwgZmFzdFBvbGwpOwogICAgY29ubmVjdChpbnB1dCwgImN1dCIsIG9wZXJhdGlvbihmdW5jdGlvbigpewogICAgICBpZiAoIW9wdGlvbnMucmVhZE9ubHkpIHJlcGxhY2VTZWxlY3Rpb24oIiIpOwogICAgfSkpOwoKICAgIC8vIE5lZWRlZCB0byBoYW5kbGUgVGFiIGtleSBpbiBLSFRNTAogICAgaWYgKGtodG1sKSBjb25uZWN0KGNvZGUsICJtb3VzZXVwIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gaW5wdXQpIGlucHV0LmJsdXIoKTsKICAgICAgICBmb2N1c0lucHV0KCk7CiAgICB9KTsKCiAgICAvLyBJRSB0aHJvd3MgdW5zcGVjaWZpZWQgZXJyb3IgaW4gY2VydGFpbiBjYXNlcywgd2hlbgogICAgLy8gdHJ5aW5nIHRvIGFjY2VzcyBhY3RpdmVFbGVtZW50IGJlZm9yZSBvbmxvYWQKICAgIHZhciBoYXNGb2N1czsgdHJ5IHsgaGFzRm9jdXMgPSAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PSBpbnB1dCk7IH0gY2F0Y2goZSkgeyB9CiAgICBpZiAoaGFzRm9jdXMgfHwgb3B0aW9ucy5hdXRvZm9jdXMpIHNldFRpbWVvdXQob25Gb2N1cywgMjApOwogICAgZWxzZSBvbkJsdXIoKTsKCiAgICBmdW5jdGlvbiBpc0xpbmUobCkge3JldHVybiBsID49IDAgJiYgbCA8IGRvYy5zaXplO30KICAgIC8vIFRoZSBpbnN0YW5jZSBvYmplY3QgdGhhdCB3ZSdsbCByZXR1cm4uIE1vc3RseSBjYWxscyBvdXQgdG8KICAgIC8vIGxvY2FsIGZ1bmN0aW9ucyBpbiB0aGUgQ29kZU1pcnJvciBmdW5jdGlvbi4gU29tZSBkbyBzb21lIGV4dHJhCiAgICAvLyByYW5nZSBjaGVja2luZyBhbmQvb3IgY2xpcHBpbmcuIG9wZXJhdGlvbiBpcyB1c2VkIHRvIHdyYXAgdGhlCiAgICAvLyBjYWxsIHNvIHRoYXQgY2hhbmdlcyBpdCBtYWtlcyBhcmUgdHJhY2tlZCwgYW5kIHRoZSBkaXNwbGF5IGlzCiAgICAvLyB1cGRhdGVkIGFmdGVyd2FyZHMuCiAgICB2YXIgaW5zdGFuY2UgPSB3cmFwcGVyLkNvZGVNaXJyb3IgPSB7CiAgICAgIGdldFZhbHVlOiBnZXRWYWx1ZSwKICAgICAgc2V0VmFsdWU6IG9wZXJhdGlvbihzZXRWYWx1ZSksCiAgICAgIGdldFNlbGVjdGlvbjogZ2V0U2VsZWN0aW9uLAogICAgICByZXBsYWNlU2VsZWN0aW9uOiBvcGVyYXRpb24ocmVwbGFjZVNlbGVjdGlvbiksCiAgICAgIGZvY3VzOiBmdW5jdGlvbigpe3dpbmRvdy5mb2N1cygpOyBmb2N1c0lucHV0KCk7IG9uRm9jdXMoKTsgZmFzdFBvbGwoKTt9LAogICAgICBzZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbiwgdmFsdWUpIHsKICAgICAgICB2YXIgb2xkVmFsID0gb3B0aW9uc1tvcHRpb25dOwogICAgICAgIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwogICAgICAgIGlmIChvcHRpb24gPT0gIm1vZGUiIHx8IG9wdGlvbiA9PSAiaW5kZW50VW5pdCIpIGxvYWRNb2RlKCk7CiAgICAgICAgZWxzZSBpZiAob3B0aW9uID09ICJyZWFkT25seSIgJiYgdmFsdWUgPT0gIm5vY3Vyc29yIikge29uQmx1cigpOyBpbnB1dC5ibHVyKCk7fQogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAicmVhZE9ubHkiICYmICF2YWx1ZSkge3Jlc2V0SW5wdXQodHJ1ZSk7fQogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAidGhlbWUiKSB0aGVtZUNoYW5nZWQoKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gImxpbmVXcmFwcGluZyIgJiYgb2xkVmFsICE9IHZhbHVlKSBvcGVyYXRpb24od3JhcHBpbmdDaGFuZ2VkKSgpOwogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAidGFiU2l6ZSIpIHVwZGF0ZURpc3BsYXkodHJ1ZSk7CiAgICAgICAgaWYgKG9wdGlvbiA9PSAibGluZU51bWJlcnMiIHx8IG9wdGlvbiA9PSAiZ3V0dGVyIiB8fCBvcHRpb24gPT0gImZpcnN0TGluZU51bWJlciIgfHwgb3B0aW9uID09ICJ0aGVtZSIpIHsKICAgICAgICAgIGd1dHRlckNoYW5nZWQoKTsKICAgICAgICAgIHVwZGF0ZURpc3BsYXkodHJ1ZSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBnZXRPcHRpb246IGZ1bmN0aW9uKG9wdGlvbikge3JldHVybiBvcHRpb25zW29wdGlvbl07fSwKICAgICAgdW5kbzogb3BlcmF0aW9uKHVuZG8pLAogICAgICByZWRvOiBvcGVyYXRpb24ocmVkbyksCiAgICAgIGluZGVudExpbmU6IG9wZXJhdGlvbihmdW5jdGlvbihuLCBkaXIpIHsKICAgICAgICBpZiAodHlwZW9mIGRpciAhPSAic3RyaW5nIikgewogICAgICAgICAgaWYgKGRpciA9PSBudWxsKSBkaXIgPSBvcHRpb25zLnNtYXJ0SW5kZW50ID8gInNtYXJ0IiA6ICJwcmV2IjsKICAgICAgICAgIGVsc2UgZGlyID0gZGlyID8gImFkZCIgOiAic3VidHJhY3QiOwogICAgICAgIH0KICAgICAgICBpZiAoaXNMaW5lKG4pKSBpbmRlbnRMaW5lKG4sIGRpcik7CiAgICAgIH0pLAogICAgICBpbmRlbnRTZWxlY3Rpb246IG9wZXJhdGlvbihpbmRlbnRTZWxlY3RlZCksCiAgICAgIGhpc3RvcnlTaXplOiBmdW5jdGlvbigpIHtyZXR1cm4ge3VuZG86IGhpc3RvcnkuZG9uZS5sZW5ndGgsIHJlZG86IGhpc3RvcnkudW5kb25lLmxlbmd0aH07fSwKICAgICAgY2xlYXJIaXN0b3J5OiBmdW5jdGlvbigpIHtoaXN0b3J5ID0gbmV3IEhpc3RvcnkoKTt9LAogICAgICBtYXRjaEJyYWNrZXRzOiBvcGVyYXRpb24oZnVuY3Rpb24oKXttYXRjaEJyYWNrZXRzKHRydWUpO30pLAogICAgICBnZXRUb2tlbkF0OiBvcGVyYXRpb24oZnVuY3Rpb24ocG9zKSB7CiAgICAgICAgcG9zID0gY2xpcFBvcyhwb3MpOwogICAgICAgIHJldHVybiBnZXRMaW5lKHBvcy5saW5lKS5nZXRUb2tlbkF0KG1vZGUsIGdldFN0YXRlQmVmb3JlKHBvcy5saW5lKSwgcG9zLmNoKTsKICAgICAgfSksCiAgICAgIGdldFN0YXRlQWZ0ZXI6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBsaW5lID0gY2xpcExpbmUobGluZSA9PSBudWxsID8gZG9jLnNpemUgLSAxOiBsaW5lKTsKICAgICAgICByZXR1cm4gZ2V0U3RhdGVCZWZvcmUobGluZSArIDEpOwogICAgICB9LAogICAgICBjdXJzb3JDb29yZHM6IGZ1bmN0aW9uKHN0YXJ0LCBtb2RlKSB7CiAgICAgICAgaWYgKHN0YXJ0ID09IG51bGwpIHN0YXJ0ID0gc2VsLmludmVydGVkOwogICAgICAgIHJldHVybiB0aGlzLmNoYXJDb29yZHMoc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50bywgbW9kZSk7CiAgICAgIH0sCiAgICAgIGNoYXJDb29yZHM6IGZ1bmN0aW9uKHBvcywgbW9kZSkgewogICAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKICAgICAgICBpZiAobW9kZSA9PSAibG9jYWwiKSByZXR1cm4gbG9jYWxDb29yZHMocG9zLCBmYWxzZSk7CiAgICAgICAgaWYgKG1vZGUgPT0gImRpdiIpIHJldHVybiBsb2NhbENvb3Jkcyhwb3MsIHRydWUpOwogICAgICAgIHJldHVybiBwYWdlQ29vcmRzKHBvcyk7CiAgICAgIH0sCiAgICAgIGNvb3Jkc0NoYXI6IGZ1bmN0aW9uKGNvb3JkcykgewogICAgICAgIHZhciBvZmYgPSBlbHRPZmZzZXQobGluZVNwYWNlKTsKICAgICAgICByZXR1cm4gY29vcmRzQ2hhcihjb29yZHMueCAtIG9mZi5sZWZ0LCBjb29yZHMueSAtIG9mZi50b3ApOwogICAgICB9LAogICAgICBtYXJrVGV4dDogb3BlcmF0aW9uKG1hcmtUZXh0KSwKICAgICAgc2V0Qm9va21hcms6IHNldEJvb2ttYXJrLAogICAgICBmaW5kTWFya3NBdDogZmluZE1hcmtzQXQsCiAgICAgIHNldE1hcmtlcjogb3BlcmF0aW9uKGFkZEd1dHRlck1hcmtlciksCiAgICAgIGNsZWFyTWFya2VyOiBvcGVyYXRpb24ocmVtb3ZlR3V0dGVyTWFya2VyKSwKICAgICAgc2V0TGluZUNsYXNzOiBvcGVyYXRpb24oc2V0TGluZUNsYXNzKSwKICAgICAgaGlkZUxpbmU6IG9wZXJhdGlvbihmdW5jdGlvbihoKSB7cmV0dXJuIHNldExpbmVIaWRkZW4oaCwgdHJ1ZSk7fSksCiAgICAgIHNob3dMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24oaCkge3JldHVybiBzZXRMaW5lSGlkZGVuKGgsIGZhbHNlKTt9KSwKICAgICAgb25EZWxldGVMaW5lOiBmdW5jdGlvbihsaW5lLCBmKSB7CiAgICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7CiAgICAgICAgICBpZiAoIWlzTGluZShsaW5lKSkgcmV0dXJuIG51bGw7CiAgICAgICAgICBsaW5lID0gZ2V0TGluZShsaW5lKTsKICAgICAgICB9CiAgICAgICAgKGxpbmUuaGFuZGxlcnMgfHwgKGxpbmUuaGFuZGxlcnMgPSBbXSkpLnB1c2goZik7CiAgICAgICAgcmV0dXJuIGxpbmU7CiAgICAgIH0sCiAgICAgIGxpbmVJbmZvOiBsaW5lSW5mbywKICAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCwgdmVydCwgaG9yaXopIHsKICAgICAgICBwb3MgPSBsb2NhbENvb3JkcyhjbGlwUG9zKHBvcykpOwogICAgICAgIHZhciB0b3AgPSBwb3MueUJvdCwgbGVmdCA9IHBvcy54OwogICAgICAgIG5vZGUuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICAgIGNvZGUuYXBwZW5kQ2hpbGQobm9kZSk7CiAgICAgICAgaWYgKHZlcnQgPT0gIm92ZXIiKSB0b3AgPSBwb3MueTsKICAgICAgICBlbHNlIGlmICh2ZXJ0ID09ICJuZWFyIikgewogICAgICAgICAgdmFyIHZzcGFjZSA9IE1hdGgubWF4KHNjcm9sbGVyLm9mZnNldEhlaWdodCwgZG9jLmhlaWdodCAqIHRleHRIZWlnaHQoKSksCiAgICAgICAgICAgICAgaHNwYWNlID0gTWF0aC5tYXgoY29kZS5jbGllbnRXaWR0aCwgbGluZVNwYWNlLmNsaWVudFdpZHRoKSAtIHBhZGRpbmdMZWZ0KCk7CiAgICAgICAgICBpZiAocG9zLnlCb3QgKyBub2RlLm9mZnNldEhlaWdodCA+IHZzcGFjZSAmJiBwb3MueSA+IG5vZGUub2Zmc2V0SGVpZ2h0KQogICAgICAgICAgICB0b3AgPSBwb3MueSAtIG5vZGUub2Zmc2V0SGVpZ2h0OwogICAgICAgICAgaWYgKGxlZnQgKyBub2RlLm9mZnNldFdpZHRoID4gaHNwYWNlKQogICAgICAgICAgICBsZWZ0ID0gaHNwYWNlIC0gbm9kZS5vZmZzZXRXaWR0aDsKICAgICAgICB9CiAgICAgICAgbm9kZS5zdHlsZS50b3AgPSAodG9wICsgcGFkZGluZ1RvcCgpKSArICJweCI7CiAgICAgICAgbm9kZS5zdHlsZS5sZWZ0ID0gbm9kZS5zdHlsZS5yaWdodCA9ICIiOwogICAgICAgIGlmIChob3JpeiA9PSAicmlnaHQiKSB7CiAgICAgICAgICBsZWZ0ID0gY29kZS5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGg7CiAgICAgICAgICBub2RlLnN0eWxlLnJpZ2h0ID0gIjBweCI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChob3JpeiA9PSAibGVmdCIpIGxlZnQgPSAwOwogICAgICAgICAgZWxzZSBpZiAoaG9yaXogPT0gIm1pZGRsZSIpIGxlZnQgPSAoY29kZS5jbGllbnRXaWR0aCAtIG5vZGUub2Zmc2V0V2lkdGgpIC8gMjsKICAgICAgICAgIG5vZGUuc3R5bGUubGVmdCA9IChsZWZ0ICsgcGFkZGluZ0xlZnQoKSkgKyAicHgiOwogICAgICAgIH0KICAgICAgICBpZiAoc2Nyb2xsKQogICAgICAgICAgc2Nyb2xsSW50b1ZpZXcobGVmdCwgdG9wLCBsZWZ0ICsgbm9kZS5vZmZzZXRXaWR0aCwgdG9wICsgbm9kZS5vZmZzZXRIZWlnaHQpOwogICAgICB9LAoKICAgICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gZG9jLnNpemU7fSwKICAgICAgY2xpcFBvczogY2xpcFBvcywKICAgICAgZ2V0Q3Vyc29yOiBmdW5jdGlvbihzdGFydCkgewogICAgICAgIGlmIChzdGFydCA9PSBudWxsKSBzdGFydCA9IHNlbC5pbnZlcnRlZDsKICAgICAgICByZXR1cm4gY29weVBvcyhzdGFydCA/IHNlbC5mcm9tIDogc2VsLnRvKTsKICAgICAgfSwKICAgICAgc29tZXRoaW5nU2VsZWN0ZWQ6IGZ1bmN0aW9uKCkge3JldHVybiAhcG9zRXEoc2VsLmZyb20sIHNlbC50byk7fSwKICAgICAgc2V0Q3Vyc29yOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSwgY2gsIHVzZXIpIHsKICAgICAgICBpZiAoY2ggPT0gbnVsbCAmJiB0eXBlb2YgbGluZS5saW5lID09ICJudW1iZXIiKSBzZXRDdXJzb3IobGluZS5saW5lLCBsaW5lLmNoLCB1c2VyKTsKICAgICAgICBlbHNlIHNldEN1cnNvcihsaW5lLCBjaCwgdXNlcik7CiAgICAgIH0pLAogICAgICBzZXRTZWxlY3Rpb246IG9wZXJhdGlvbihmdW5jdGlvbihmcm9tLCB0bywgdXNlcikgewogICAgICAgICh1c2VyID8gc2V0U2VsZWN0aW9uVXNlciA6IHNldFNlbGVjdGlvbikoY2xpcFBvcyhmcm9tKSwgY2xpcFBvcyh0byB8fCBmcm9tKSk7CiAgICAgIH0pLAogICAgICBnZXRMaW5lOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGdldExpbmUobGluZSkudGV4dDt9LAogICAgICBnZXRMaW5lSGFuZGxlOiBmdW5jdGlvbihsaW5lKSB7aWYgKGlzTGluZShsaW5lKSkgcmV0dXJuIGdldExpbmUobGluZSk7fSwKICAgICAgc2V0TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIHRleHQpIHsKICAgICAgICBpZiAoaXNMaW5lKGxpbmUpKSByZXBsYWNlUmFuZ2UodGV4dCwge2xpbmU6IGxpbmUsIGNoOiAwfSwge2xpbmU6IGxpbmUsIGNoOiBnZXRMaW5lKGxpbmUpLnRleHQubGVuZ3RofSk7CiAgICAgIH0pLAogICAgICByZW1vdmVMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChpc0xpbmUobGluZSkpIHJlcGxhY2VSYW5nZSgiIiwge2xpbmU6IGxpbmUsIGNoOiAwfSwgY2xpcFBvcyh7bGluZTogbGluZSsxLCBjaDogMH0pKTsKICAgICAgfSksCiAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAgICAgIGdldFJhbmdlOiBmdW5jdGlvbihmcm9tLCB0bykge3JldHVybiBnZXRSYW5nZShjbGlwUG9zKGZyb20pLCBjbGlwUG9zKHRvKSk7fSwKCiAgICAgIHRyaWdnZXJPbktleURvd246IG9wZXJhdGlvbihvbktleURvd24pLAogICAgICBleGVjQ29tbWFuZDogZnVuY3Rpb24oY21kKSB7cmV0dXJuIGNvbW1hbmRzW2NtZF0oaW5zdGFuY2UpO30sCiAgICAgIC8vIFN0dWZmIHVzZWQgYnkgY29tbWFuZHMsIHByb2JhYmx5IG5vdCBtdWNoIHVzZSB0byBvdXRzaWRlIGNvZGUuCiAgICAgIG1vdmVIOiBvcGVyYXRpb24obW92ZUgpLAogICAgICBkZWxldGVIOiBvcGVyYXRpb24oZGVsZXRlSCksCiAgICAgIG1vdmVWOiBvcGVyYXRpb24obW92ZVYpLAogICAgICB0b2dnbGVPdmVyd3JpdGU6IGZ1bmN0aW9uKCkgewogICAgICAgIGlmKG92ZXJ3cml0ZSl7CiAgICAgICAgICBvdmVyd3JpdGUgPSBmYWxzZTsKICAgICAgICAgIGN1cnNvci5jbGFzc05hbWUgPSBjdXJzb3IuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSIsICIiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3ZlcndyaXRlID0gdHJ1ZTsKICAgICAgICAgIGN1cnNvci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLW92ZXJ3cml0ZSI7CiAgICAgICAgfQogICAgICB9LAoKICAgICAgcG9zRnJvbUluZGV4OiBmdW5jdGlvbihvZmYpIHsKICAgICAgICB2YXIgbGluZU5vID0gMCwgY2g7CiAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIHZhciBzeiA9IGxpbmUudGV4dC5sZW5ndGggKyAxOwogICAgICAgICAgaWYgKHN6ID4gb2ZmKSB7IGNoID0gb2ZmOyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICAgb2ZmIC09IHN6OwogICAgICAgICAgKytsaW5lTm87CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGNsaXBQb3Moe2xpbmU6IGxpbmVObywgY2g6IGNofSk7CiAgICAgIH0sCiAgICAgIGluZGV4RnJvbVBvczogZnVuY3Rpb24gKGNvb3JkcykgewogICAgICAgIGlmIChjb29yZHMubGluZSA8IDAgfHwgY29vcmRzLmNoIDwgMCkgcmV0dXJuIDA7CiAgICAgICAgdmFyIGluZGV4ID0gY29vcmRzLmNoOwogICAgICAgIGRvYy5pdGVyKDAsIGNvb3Jkcy5saW5lLCBmdW5jdGlvbiAobGluZSkgewogICAgICAgICAgaW5kZXggKz0gbGluZS50ZXh0Lmxlbmd0aCArIDE7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIGluZGV4OwogICAgICB9LAogICAgICBzY3JvbGxUbzogZnVuY3Rpb24oeCwgeSkgewogICAgICAgIGlmICh4ICE9IG51bGwpIHNjcm9sbGVyLnNjcm9sbExlZnQgPSB4OwogICAgICAgIGlmICh5ICE9IG51bGwpIHNjcm9sbGVyLnNjcm9sbFRvcCA9IHk7CiAgICAgICAgdXBkYXRlRGlzcGxheShbXSk7CiAgICAgIH0sCgogICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBvcGVyYXRpb24oZikoKTt9LAogICAgICByZWZyZXNoOiBmdW5jdGlvbigpewogICAgICAgIHVwZGF0ZURpc3BsYXkodHJ1ZSk7CiAgICAgICAgaWYgKHNjcm9sbGVyLnNjcm9sbEhlaWdodCA+IGxhc3RTY3JvbGxQb3MpCiAgICAgICAgICBzY3JvbGxlci5zY3JvbGxUb3AgPSBsYXN0U2Nyb2xsUG9zOwogICAgICB9LAogICAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiBpbnB1dDt9LAogICAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gd3JhcHBlcjt9LAogICAgICBnZXRTY3JvbGxlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIHNjcm9sbGVyO30sCiAgICAgIGdldEd1dHRlckVsZW1lbnQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGd1dHRlcjt9CiAgICB9OwoKICAgIGZ1bmN0aW9uIGdldExpbmUobikgeyByZXR1cm4gZ2V0TGluZUF0KGRvYywgbik7IH0KICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgaGVpZ2h0KSB7CiAgICAgIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgICAgdmFyIGRpZmYgPSBoZWlnaHQgLSBsaW5lLmhlaWdodDsKICAgICAgZm9yICh2YXIgbiA9IGxpbmU7IG47IG4gPSBuLnBhcmVudCkgbi5oZWlnaHQgKz0gZGlmZjsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRWYWx1ZShjb2RlKSB7CiAgICAgIHZhciB0b3AgPSB7bGluZTogMCwgY2g6IDB9OwogICAgICB1cGRhdGVMaW5lcyh0b3AsIHtsaW5lOiBkb2Muc2l6ZSAtIDEsIGNoOiBnZXRMaW5lKGRvYy5zaXplLTEpLnRleHQubGVuZ3RofSwKICAgICAgICAgICAgICAgICAgc3BsaXRMaW5lcyhjb2RlKSwgdG9wLCB0b3ApOwogICAgICB1cGRhdGVJbnB1dCA9IHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRWYWx1ZShjb2RlKSB7CiAgICAgIHZhciB0ZXh0ID0gW107CiAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7IHRleHQucHVzaChsaW5lLnRleHQpOyB9KTsKICAgICAgcmV0dXJuIHRleHQuam9pbigiXG4iKTsKICAgIH0KCiAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7CiAgICAgIHNldFNoaWZ0KGVfcHJvcChlLCAic2hpZnRLZXkiKSk7CiAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGNsaWNrIGluIGEgd2lkZ2V0CiAgICAgIGZvciAodmFyIG4gPSBlX3RhcmdldChlKTsgbiAhPSB3cmFwcGVyOyBuID0gbi5wYXJlbnROb2RlKQogICAgICAgIGlmIChuLnBhcmVudE5vZGUgPT0gY29kZSAmJiBuICE9IG1vdmVyKSByZXR1cm47CgogICAgICAvLyBTZWUgaWYgdGhpcyBpcyBhIGNsaWNrIGluIHRoZSBndXR0ZXIKICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5vbkd1dHRlckNsaWNrKQogICAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5zdGFuY2UsIGluZGV4T2YoZ3V0dGVyVGV4dC5jaGlsZE5vZGVzLCBuKSArIHNob3dpbmdGcm9tLCBlKTsKICAgICAgICAgIHJldHVybiBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICAgIH0KCiAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKTsKCiAgICAgIHN3aXRjaCAoZV9idXR0b24oZSkpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChnZWNrbyAmJiAhbWFjKSBvbkNvbnRleHRNZW51KGUpOwogICAgICAgIHJldHVybjsKICAgICAgY2FzZSAyOgogICAgICAgIGlmIChzdGFydCkgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCB0cnVlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gRm9yIGJ1dHRvbiAxLCBpZiBpdCB3YXMgY2xpY2tlZCBpbnNpZGUgdGhlIGVkaXRvcgogICAgICAvLyAocG9zRnJvbU1vdXNlIHJldHVybmluZyBub24tbnVsbCksIHdlIGhhdmUgdG8gYWRqdXN0IHRoZQogICAgICAvLyBzZWxlY3Rpb24uCiAgICAgIGlmICghc3RhcnQpIHtpZiAoZV90YXJnZXQoZSkgPT0gc2Nyb2xsZXIpIGVfcHJldmVudERlZmF1bHQoZSk7IHJldHVybjt9CgogICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKCiAgICAgIHZhciBub3cgPSArbmV3IERhdGU7CiAgICAgIGlmIChsYXN0RG91YmxlQ2xpY2sgJiYgbGFzdERvdWJsZUNsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdERvdWJsZUNsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBzZXRUaW1lb3V0KGZvY3VzSW5wdXQsIDIwKTsKICAgICAgICByZXR1cm4gc2VsZWN0TGluZShzdGFydC5saW5lKTsKICAgICAgfSBlbHNlIGlmIChsYXN0Q2xpY2sgJiYgbGFzdENsaWNrLnRpbWUgPiBub3cgLSA0MDAgJiYgcG9zRXEobGFzdENsaWNrLnBvcywgc3RhcnQpKSB7CiAgICAgICAgbGFzdERvdWJsZUNsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICByZXR1cm4gc2VsZWN0V29yZEF0KHN0YXJ0KTsKICAgICAgfSBlbHNlIHsgbGFzdENsaWNrID0ge3RpbWU6IG5vdywgcG9zOiBzdGFydH07IH0KCiAgICAgIHZhciBsYXN0ID0gc3RhcnQsIGdvaW5nOwogICAgICBpZiAoZHJhZ0FuZERyb3AgJiYgIW9wdGlvbnMucmVhZE9ubHkgJiYgIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pICYmCiAgICAgICAgICAhcG9zTGVzcyhzdGFydCwgc2VsLmZyb20pICYmICFwb3NMZXNzKHNlbC50bywgc3RhcnQpKSB7CiAgICAgICAgLy8gTGV0IHRoZSBkcmFnIGhhbmRsZXIgaGFuZGxlIHRoaXMuCiAgICAgICAgaWYgKHdlYmtpdCkgbGluZVNwYWNlLmRyYWdnYWJsZSA9IHRydWU7CiAgICAgICAgdmFyIHVwID0gY29ubmVjdChkb2N1bWVudCwgIm1vdXNldXAiLCBvcGVyYXRpb24oZnVuY3Rpb24oZTIpIHsKICAgICAgICAgIGlmICh3ZWJraXQpIGxpbmVTcGFjZS5kcmFnZ2FibGUgPSBmYWxzZTsKICAgICAgICAgIGRyYWdnaW5nVGV4dCA9IGZhbHNlOwogICAgICAgICAgdXAoKTsKICAgICAgICAgIGlmIChNYXRoLmFicyhlLmNsaWVudFggLSBlMi5jbGllbnRYKSArIE1hdGguYWJzKGUuY2xpZW50WSAtIGUyLmNsaWVudFkpIDwgMTApIHsKICAgICAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlMik7CiAgICAgICAgICAgIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7CiAgICAgICAgICAgIGZvY3VzSW5wdXQoKTsKICAgICAgICAgIH0KICAgICAgICB9KSwgdHJ1ZSk7CiAgICAgICAgZHJhZ2dpbmdUZXh0ID0gdHJ1ZTsKICAgICAgICAvLyBJRSdzIGFwcHJvYWNoIHRvIGRyYWdnYWJsZQogICAgICAgIGlmIChsaW5lU3BhY2UuZHJhZ0Ryb3ApIGxpbmVTcGFjZS5kcmFnRHJvcCgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICBzZXRDdXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIHRydWUpOwoKICAgICAgZnVuY3Rpb24gZXh0ZW5kKGUpIHsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUsIHRydWUpOwogICAgICAgIGlmIChjdXIgJiYgIXBvc0VxKGN1ciwgbGFzdCkpIHsKICAgICAgICAgIGlmICghZm9jdXNlZCkgb25Gb2N1cygpOwogICAgICAgICAgbGFzdCA9IGN1cjsKICAgICAgICAgIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgICB1cGRhdGVJbnB1dCA9IGZhbHNlOwogICAgICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoKTsKICAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQogICAgICAgICAgICBnb2luZyA9IHNldFRpbWVvdXQob3BlcmF0aW9uKGZ1bmN0aW9uKCl7ZXh0ZW5kKGUpO30pLCAxNTApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZnVuY3Rpb24gZG9uZShlKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICAgIGlmIChjdXIpIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBmb2N1c0lucHV0KCk7CiAgICAgICAgdXBkYXRlSW5wdXQgPSB0cnVlOwogICAgICAgIG1vdmUoKTsgdXAoKTsKICAgICAgfQogICAgICB2YXIgbW92ZSA9IGNvbm5lY3QoZG9jdW1lbnQsICJtb3VzZW1vdmUiLCBvcGVyYXRpb24oZnVuY3Rpb24oZSkgewogICAgICAgIGNsZWFyVGltZW91dChnb2luZyk7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBpZiAoIWllICYmICFlX2J1dHRvbihlKSkgZG9uZShlKTsKICAgICAgICBlbHNlIGV4dGVuZChlKTsKICAgICAgfSksIHRydWUpOwogICAgICB2YXIgdXAgPSBjb25uZWN0KGRvY3VtZW50LCAibW91c2V1cCIsIG9wZXJhdGlvbihkb25lKSwgdHJ1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBvbkRvdWJsZUNsaWNrKGUpIHsKICAgICAgZm9yICh2YXIgbiA9IGVfdGFyZ2V0KGUpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSByZXR1cm4gZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICBpZiAoIXN0YXJ0KSByZXR1cm47CiAgICAgIGxhc3REb3VibGVDbGljayA9IHt0aW1lOiArbmV3IERhdGUsIHBvczogc3RhcnR9OwogICAgICBlX3ByZXZlbnREZWZhdWx0KGUpOwogICAgICBzZWxlY3RXb3JkQXQoc3RhcnQpOwogICAgfQogICAgZnVuY3Rpb24gb25Ecm9wKGUpIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGUsIHRydWUpLCBmaWxlcyA9IGUuZGF0YVRyYW5zZmVyLmZpbGVzOwogICAgICBpZiAoIXBvcyB8fCBvcHRpb25zLnJlYWRPbmx5KSByZXR1cm47CiAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggJiYgd2luZG93LkZpbGVSZWFkZXIgJiYgd2luZG93LkZpbGUpIHsKICAgICAgICBmdW5jdGlvbiBsb2FkRmlsZShmaWxlLCBpKSB7CiAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7CiAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRleHRbaV0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICBpZiAoKytyZWFkID09IG4pIHsKCSAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKCSAgICAgIG9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHZhciBlbmQgPSByZXBsYWNlUmFuZ2UodGV4dC5qb2luKCIiKSwgcG9zLCBwb3MpOwogICAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uVXNlcihwb3MsIGVuZCk7CiAgICAgICAgICAgICAgfSkoKTsKCSAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CiAgICAgICAgfQogICAgICAgIHZhciBuID0gZmlsZXMubGVuZ3RoLCB0ZXh0ID0gQXJyYXkobiksIHJlYWQgPSAwOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBsb2FkRmlsZShmaWxlc1tpXSwgaSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHZhciB0ZXh0ID0gZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpOwogICAgICAgICAgaWYgKHRleHQpIHsKICAgICAgICAgICAgdmFyIGN1ckZyb20gPSBzZWwuZnJvbSwgY3VyVG8gPSBzZWwudG87CiAgICAgICAgICAgIHNldFNlbGVjdGlvblVzZXIocG9zLCBwb3MpOwogICAgICAgICAgICBpZiAoZHJhZ2dpbmdUZXh0KSByZXBsYWNlUmFuZ2UoIiIsIGN1ckZyb20sIGN1clRvKTsKICAgICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbih0ZXh0KTsKCSAgICBmb2N1c0lucHV0KCk7CgkgIH0KICAgICAgICB9CiAgICAgICAgY2F0Y2goZSl7fQogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBvbkRyYWdTdGFydChlKSB7CiAgICAgIHZhciB0eHQgPSBnZXRTZWxlY3Rpb24oKTsKICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgiVGV4dCIsIHR4dCk7CiAgICAgIAogICAgICAvLyBVc2UgZHVtbXkgaW1hZ2UgaW5zdGVhZCBvZiBkZWZhdWx0IGJyb3dzZXJzIGltYWdlLgogICAgICBpZiAoZ2Vja28gfHwgY2hyb21lKSB7CiAgICAgICAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpOwogICAgICAgIGltZy5zY3IgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGRoQWdBQ0FJQUFBQUFBQVAvLy95d0FBQUFBQWdBQ0FBQUNBb1JSQURzPSc7IC8vMXgxIGltYWdlCiAgICAgICAgZS5kYXRhVHJhbnNmZXIuc2V0RHJhZ0ltYWdlKGltZywgMCwgMCk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBkb0hhbmRsZUJpbmRpbmcoYm91bmQsIGRyb3BTaGlmdCkgewogICAgICBpZiAodHlwZW9mIGJvdW5kID09ICJzdHJpbmciKSB7CiAgICAgICAgYm91bmQgPSBjb21tYW5kc1tib3VuZF07CiAgICAgICAgaWYgKCFib3VuZCkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBwcmV2U2hpZnQgPSBzaGlmdFNlbGVjdGluZzsKICAgICAgdHJ5IHsKICAgICAgICBpZiAob3B0aW9ucy5yZWFkT25seSkgc3VwcHJlc3NFZGl0cyA9IHRydWU7CiAgICAgICAgaWYgKGRyb3BTaGlmdCkgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwogICAgICAgIGJvdW5kKGluc3RhbmNlKTsKICAgICAgfSBjYXRjaChlKSB7CiAgICAgICAgaWYgKGUgIT0gUGFzcykgdGhyb3cgZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgc2hpZnRTZWxlY3RpbmcgPSBwcmV2U2hpZnQ7CiAgICAgICAgc3VwcHJlc3NFZGl0cyA9IGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gaGFuZGxlS2V5QmluZGluZyhlKSB7CiAgICAgIC8vIEhhbmRsZSBhdXRvIGtleW1hcCB0cmFuc2l0aW9ucwogICAgICB2YXIgc3RhcnRNYXAgPSBnZXRLZXlNYXAob3B0aW9ucy5rZXlNYXApLCBuZXh0ID0gc3RhcnRNYXAuYXV0bzsKICAgICAgY2xlYXJUaW1lb3V0KG1heWJlVHJhbnNpdGlvbik7CiAgICAgIGlmIChuZXh0ICYmICFpc01vZGlmaWVyS2V5KGUpKSBtYXliZVRyYW5zaXRpb24gPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChnZXRLZXlNYXAob3B0aW9ucy5rZXlNYXApID09IHN0YXJ0TWFwKSB7CiAgICAgICAgICBvcHRpb25zLmtleU1hcCA9IChuZXh0LmNhbGwgPyBuZXh0LmNhbGwobnVsbCwgaW5zdGFuY2UpIDogbmV4dCk7CiAgICAgICAgfQogICAgICB9LCA1MCk7CgogICAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChlLCAia2V5Q29kZSIpXSwgaGFuZGxlZCA9IGZhbHNlOwogICAgICBpZiAobmFtZSA9PSBudWxsIHx8IGUuYWx0R3JhcGhLZXkpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGVfcHJvcChlLCAiYWx0S2V5IikpIG5hbWUgPSAiQWx0LSIgKyBuYW1lOwogICAgICBpZiAoZV9wcm9wKGUsICJjdHJsS2V5IikpIG5hbWUgPSAiQ3RybC0iICsgbmFtZTsKICAgICAgaWYgKGVfcHJvcChlLCAibWV0YUtleSIpKSBuYW1lID0gIkNtZC0iICsgbmFtZTsKCiAgICAgIGlmIChlX3Byb3AoZSwgInNoaWZ0S2V5IikpIHsKICAgICAgICBoYW5kbGVkID0gbG9va3VwS2V5KCJTaGlmdC0iICsgbmFtZSwgb3B0aW9ucy5leHRyYUtleXMsIG9wdGlvbnMua2V5TWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oYikge3JldHVybiBkb0hhbmRsZUJpbmRpbmcoYiwgdHJ1ZSk7fSkKICAgICAgICAgICAgICAgfHwgbG9va3VwS2V5KG5hbWUsIG9wdGlvbnMuZXh0cmFLZXlzLCBvcHRpb25zLmtleU1hcCwgZnVuY3Rpb24oYikgewogICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYiA9PSAic3RyaW5nIiAmJiAvXmdvW0EtWl0vLnRlc3QoYikpIHJldHVybiBkb0hhbmRsZUJpbmRpbmcoYik7CiAgICAgICAgICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGhhbmRsZWQgPSBsb29rdXBLZXkobmFtZSwgb3B0aW9ucy5leHRyYUtleXMsIG9wdGlvbnMua2V5TWFwLCBkb0hhbmRsZUJpbmRpbmcpOwogICAgICB9CiAgICAgIGlmIChoYW5kbGVkKSB7CiAgICAgICAgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICBpZiAoaWUpIHsgZS5vbGRLZXlDb2RlID0gZS5rZXlDb2RlOyBlLmtleUNvZGUgPSAwOyB9CiAgICAgIH0KICAgICAgcmV0dXJuIGhhbmRsZWQ7CiAgICB9CiAgICBmdW5jdGlvbiBoYW5kbGVDaGFyQmluZGluZyhlLCBjaCkgewogICAgICB2YXIgaGFuZGxlZCA9IGxvb2t1cEtleSgiJyIgKyBjaCArICInIiwgb3B0aW9ucy5leHRyYUtleXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMua2V5TWFwLCBkb0hhbmRsZUJpbmRpbmcpOwogICAgICBpZiAoaGFuZGxlZCkgZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgcmV0dXJuIGhhbmRsZWQ7CiAgICB9CgogICAgdmFyIGxhc3RTdG9wcGVkS2V5ID0gbnVsbCwgbWF5YmVUcmFuc2l0aW9uOwogICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHsKICAgICAgaWYgKCFmb2N1c2VkKSBvbkZvY3VzKCk7CiAgICAgIGlmIChpZSAmJiBlLmtleUNvZGUgPT0gMjcpIHsgZS5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB9CiAgICAgIGlmIChwb2xsaW5nRmFzdCkgeyBpZiAocmVhZElucHV0KCkpIHBvbGxpbmdGYXN0ID0gZmFsc2U7IH0KICAgICAgaWYgKG9wdGlvbnMub25LZXlFdmVudCAmJiBvcHRpb25zLm9uS2V5RXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgIHZhciBjb2RlID0gZV9wcm9wKGUsICJrZXlDb2RlIik7CiAgICAgIC8vIElFIGRvZXMgc3RyYW5nZSB0aGluZ3Mgd2l0aCBlc2NhcGUuCiAgICAgIHNldFNoaWZ0KGNvZGUgPT0gMTYgfHwgZV9wcm9wKGUsICJzaGlmdEtleSIpKTsKICAgICAgLy8gRmlyc3QgZ2l2ZSBvbktleUV2ZW50IG9wdGlvbiBhIGNoYW5jZSB0byBoYW5kbGUgdGhpcy4KICAgICAgdmFyIGhhbmRsZWQgPSBoYW5kbGVLZXlCaW5kaW5nKGUpOwogICAgICBpZiAod2luZG93Lm9wZXJhKSB7CiAgICAgICAgbGFzdFN0b3BwZWRLZXkgPSBoYW5kbGVkID8gY29kZSA6IG51bGw7CiAgICAgICAgLy8gT3BlcmEgaGFzIG5vIGN1dCBldmVudC4uLiB3ZSB0cnkgdG8gYXQgbGVhc3QgY2F0Y2ggdGhlIGtleSBjb21ibwogICAgICAgIGlmICghaGFuZGxlZCAmJiBjb2RlID09IDg4ICYmIGVfcHJvcChlLCBtYWMgPyAibWV0YUtleSIgOiAiY3RybEtleSIpKQogICAgICAgICAgcmVwbGFjZVNlbGVjdGlvbigiIik7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG9uS2V5UHJlc3MoZSkgewogICAgICBpZiAocG9sbGluZ0Zhc3QpIHJlYWRJbnB1dCgpOwogICAgICBpZiAob3B0aW9ucy5vbktleUV2ZW50ICYmIG9wdGlvbnMub25LZXlFdmVudChpbnN0YW5jZSwgYWRkU3RvcChlKSkpIHJldHVybjsKICAgICAgdmFyIGtleUNvZGUgPSBlX3Byb3AoZSwgImtleUNvZGUiKSwgY2hhckNvZGUgPSBlX3Byb3AoZSwgImNoYXJDb2RlIik7CiAgICAgIGlmICh3aW5kb3cub3BlcmEgJiYga2V5Q29kZSA9PSBsYXN0U3RvcHBlZEtleSkge2xhc3RTdG9wcGVkS2V5ID0gbnVsbDsgZV9wcmV2ZW50RGVmYXVsdChlKTsgcmV0dXJuO30KICAgICAgaWYgKCgod2luZG93Lm9wZXJhICYmICFlLndoaWNoKSB8fCBraHRtbCkgJiYgaGFuZGxlS2V5QmluZGluZyhlKSkgcmV0dXJuOwogICAgICB2YXIgY2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlID09IG51bGwgPyBrZXlDb2RlIDogY2hhckNvZGUpOwogICAgICBpZiAob3B0aW9ucy5lbGVjdHJpY0NoYXJzICYmIG1vZGUuZWxlY3RyaWNDaGFycyAmJiBvcHRpb25zLnNtYXJ0SW5kZW50ICYmICFvcHRpb25zLnJlYWRPbmx5KSB7CiAgICAgICAgaWYgKG1vZGUuZWxlY3RyaWNDaGFycy5pbmRleE9mKGNoKSA+IC0xKQogICAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKSB7aW5kZW50TGluZShzZWwudG8ubGluZSwgInNtYXJ0Iik7fSksIDc1KTsKICAgICAgfQogICAgICBpZiAoaGFuZGxlQ2hhckJpbmRpbmcoZSwgY2gpKSByZXR1cm47CiAgICAgIGZhc3RQb2xsKCk7CiAgICB9CiAgICBmdW5jdGlvbiBvbktleVVwKGUpIHsKICAgICAgaWYgKG9wdGlvbnMub25LZXlFdmVudCAmJiBvcHRpb25zLm9uS2V5RXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZSkpKSByZXR1cm47CiAgICAgIGlmIChlX3Byb3AoZSwgImtleUNvZGUiKSA9PSAxNikgc2hpZnRTZWxlY3RpbmcgPSBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uRm9jdXMoKSB7CiAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5ID09ICJub2N1cnNvciIpIHJldHVybjsKICAgICAgaWYgKCFmb2N1c2VkKSB7CiAgICAgICAgaWYgKG9wdGlvbnMub25Gb2N1cykgb3B0aW9ucy5vbkZvY3VzKGluc3RhbmNlKTsKICAgICAgICBmb2N1c2VkID0gdHJ1ZTsKICAgICAgICBpZiAod3JhcHBlci5jbGFzc05hbWUuc2VhcmNoKC9cYkNvZGVNaXJyb3ItZm9jdXNlZFxiLykgPT0gLTEpCiAgICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3ItZm9jdXNlZCI7CiAgICAgICAgaWYgKCFsZWF2ZUlucHV0QWxvbmUpIHJlc2V0SW5wdXQodHJ1ZSk7CiAgICAgIH0KICAgICAgc2xvd1BvbGwoKTsKICAgICAgcmVzdGFydEJsaW5rKCk7CiAgICB9CiAgICBmdW5jdGlvbiBvbkJsdXIoKSB7CiAgICAgIGlmIChmb2N1c2VkKSB7CiAgICAgICAgaWYgKG9wdGlvbnMub25CbHVyKSBvcHRpb25zLm9uQmx1cihpbnN0YW5jZSk7CiAgICAgICAgZm9jdXNlZCA9IGZhbHNlOwogICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpCiAgICAgICAgICBvcGVyYXRpb24oZnVuY3Rpb24oKXsKICAgICAgICAgICAgaWYgKGJyYWNrZXRIaWdobGlnaHRlZCkgeyBicmFja2V0SGlnaGxpZ2h0ZWQoKTsgYnJhY2tldEhpZ2hsaWdodGVkID0gbnVsbDsgfQogICAgICAgICAgfSkoKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHdyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLWZvY3VzZWQiLCAiIik7CiAgICAgIH0KICAgICAgY2xlYXJJbnRlcnZhbChibGlua2VyKTsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtpZiAoIWZvY3VzZWQpIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDt9LCAxNTApOwogICAgfQoKICAgIC8vIFJlcGxhY2UgdGhlIHJhbmdlIGZyb20gZnJvbSB0byB0byBieSB0aGUgc3RyaW5ncyBpbiBuZXdUZXh0LgogICAgLy8gQWZ0ZXJ3YXJkcywgc2V0IHRoZSBzZWxlY3Rpb24gdG8gc2VsRnJvbSwgc2VsVG8uCiAgICBmdW5jdGlvbiB1cGRhdGVMaW5lcyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pIHsKICAgICAgaWYgKHN1cHByZXNzRWRpdHMpIHJldHVybjsKICAgICAgaWYgKGhpc3RvcnkpIHsKICAgICAgICB2YXIgb2xkID0gW107CiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lICsgMSwgZnVuY3Rpb24obGluZSkgeyBvbGQucHVzaChsaW5lLnRleHQpOyB9KTsKICAgICAgICBoaXN0b3J5LmFkZENoYW5nZShmcm9tLmxpbmUsIG5ld1RleHQubGVuZ3RoLCBvbGQpOwogICAgICAgIHdoaWxlIChoaXN0b3J5LmRvbmUubGVuZ3RoID4gb3B0aW9ucy51bmRvRGVwdGgpIGhpc3RvcnkuZG9uZS5zaGlmdCgpOwogICAgICB9CiAgICAgIHVwZGF0ZUxpbmVzTm9VbmRvKGZyb20sIHRvLCBuZXdUZXh0LCBzZWxGcm9tLCBzZWxUbyk7CiAgICB9CiAgICBmdW5jdGlvbiB1bnJlZG9IZWxwZXIoZnJvbSwgdG8pIHsKICAgICAgaWYgKCFmcm9tLmxlbmd0aCkgcmV0dXJuOwogICAgICB2YXIgc2V0ID0gZnJvbS5wb3AoKSwgb3V0ID0gW107CiAgICAgIGZvciAodmFyIGkgPSBzZXQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHsKICAgICAgICB2YXIgY2hhbmdlID0gc2V0W2ldOwogICAgICAgIHZhciByZXBsYWNlZCA9IFtdLCBlbmQgPSBjaGFuZ2Uuc3RhcnQgKyBjaGFuZ2UuYWRkZWQ7CiAgICAgICAgZG9jLml0ZXIoY2hhbmdlLnN0YXJ0LCBlbmQsIGZ1bmN0aW9uKGxpbmUpIHsgcmVwbGFjZWQucHVzaChsaW5lLnRleHQpOyB9KTsKICAgICAgICBvdXQucHVzaCh7c3RhcnQ6IGNoYW5nZS5zdGFydCwgYWRkZWQ6IGNoYW5nZS5vbGQubGVuZ3RoLCBvbGQ6IHJlcGxhY2VkfSk7CiAgICAgICAgdmFyIHBvcyA9IGNsaXBQb3Moe2xpbmU6IGNoYW5nZS5zdGFydCArIGNoYW5nZS5vbGQubGVuZ3RoIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2g6IGVkaXRFbmQocmVwbGFjZWRbcmVwbGFjZWQubGVuZ3RoLTFdLCBjaGFuZ2Uub2xkW2NoYW5nZS5vbGQubGVuZ3RoLTFdKX0pOwogICAgICAgIHVwZGF0ZUxpbmVzTm9VbmRvKHtsaW5lOiBjaGFuZ2Uuc3RhcnQsIGNoOiAwfSwge2xpbmU6IGVuZCAtIDEsIGNoOiBnZXRMaW5lKGVuZC0xKS50ZXh0Lmxlbmd0aH0sIGNoYW5nZS5vbGQsIHBvcywgcG9zKTsKICAgICAgfQogICAgICB1cGRhdGVJbnB1dCA9IHRydWU7CiAgICAgIHRvLnB1c2gob3V0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHVuZG8oKSB7dW5yZWRvSGVscGVyKGhpc3RvcnkuZG9uZSwgaGlzdG9yeS51bmRvbmUpO30KICAgIGZ1bmN0aW9uIHJlZG8oKSB7dW5yZWRvSGVscGVyKGhpc3RvcnkudW5kb25lLCBoaXN0b3J5LmRvbmUpO30KCiAgICBmdW5jdGlvbiB1cGRhdGVMaW5lc05vVW5kbyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pIHsKICAgICAgaWYgKHN1cHByZXNzRWRpdHMpIHJldHVybjsKICAgICAgdmFyIHJlY29tcHV0ZU1heExlbmd0aCA9IGZhbHNlLCBtYXhMaW5lTGVuZ3RoID0gbWF4TGluZS5sZW5ndGg7CiAgICAgIGlmICghb3B0aW9ucy5saW5lV3JhcHBpbmcpCiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCB0by5saW5lLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICBpZiAobGluZS50ZXh0Lmxlbmd0aCA9PSBtYXhMaW5lTGVuZ3RoKSB7cmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsgcmV0dXJuIHRydWU7fQogICAgICAgIH0pOwogICAgICBpZiAoZnJvbS5saW5lICE9IHRvLmxpbmUgfHwgbmV3VGV4dC5sZW5ndGggPiAxKSBndXR0ZXJEaXJ0eSA9IHRydWU7CgogICAgICB2YXIgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZSwgZmlyc3RMaW5lID0gZ2V0TGluZShmcm9tLmxpbmUpLCBsYXN0TGluZSA9IGdldExpbmUodG8ubGluZSk7CiAgICAgIC8vIEZpcnN0IGFkanVzdCB0aGUgbGluZSBzdHJ1Y3R1cmUsIHRha2luZyBzb21lIGNhcmUgdG8gbGVhdmUgaGlnaGxpZ2h0aW5nIGludGFjdC4KICAgICAgaWYgKGZyb20uY2ggPT0gMCAmJiB0by5jaCA9PSAwICYmIG5ld1RleHRbbmV3VGV4dC5sZW5ndGggLSAxXSA9PSAiIikgewogICAgICAgIC8vIFRoaXMgaXMgYSB3aG9sZS1saW5lIHJlcGxhY2UuIFRyZWF0ZWQgc3BlY2lhbGx5IHRvIG1ha2UKICAgICAgICAvLyBzdXJlIGxpbmUgb2JqZWN0cyBtb3ZlIHRoZSB3YXkgdGhleSBhcmUgc3VwcG9zZWQgdG8uCiAgICAgICAgdmFyIGFkZGVkID0gW10sIHByZXZMaW5lID0gbnVsbDsKICAgICAgICBpZiAoZnJvbS5saW5lKSB7CiAgICAgICAgICBwcmV2TGluZSA9IGdldExpbmUoZnJvbS5saW5lIC0gMSk7CiAgICAgICAgICBwcmV2TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CiAgICAgICAgfSBlbHNlIGxhc3RMaW5lLmZpeE1hcmtTdGFydHMoKTsKICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkKICAgICAgICAgIGFkZGVkLnB1c2goTGluZS5pbmhlcml0TWFya3MobmV3VGV4dFtpXSwgcHJldkxpbmUpKTsKICAgICAgICBpZiAobmxpbmVzKSBkb2MucmVtb3ZlKGZyb20ubGluZSwgbmxpbmVzLCBjYWxsYmFja3MpOwogICAgICAgIGlmIChhZGRlZC5sZW5ndGgpIGRvYy5pbnNlcnQoZnJvbS5saW5lLCBhZGRlZCk7CiAgICAgIH0gZWxzZSBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7CiAgICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpCiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCB0by5jaCwgbmV3VGV4dFswXSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsYXN0TGluZSA9IGZpcnN0TGluZS5zcGxpdCh0by5jaCwgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aC0xXSk7CiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdUZXh0WzBdKTsKICAgICAgICAgIGZpcnN0TGluZS5maXhNYXJrRW5kcyhsYXN0TGluZSk7CiAgICAgICAgICB2YXIgYWRkZWQgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQogICAgICAgICAgICBhZGRlZC5wdXNoKExpbmUuaW5oZXJpdE1hcmtzKG5ld1RleHRbaV0sIGZpcnN0TGluZSkpOwogICAgICAgICAgYWRkZWQucHVzaChsYXN0TGluZSk7CiAgICAgICAgICBkb2MuaW5zZXJ0KGZyb20ubGluZSArIDEsIGFkZGVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobmV3VGV4dC5sZW5ndGggPT0gMSkgewogICAgICAgIGZpcnN0TGluZS5yZXBsYWNlKGZyb20uY2gsIG51bGwsIG5ld1RleHRbMF0pOwogICAgICAgIGxhc3RMaW5lLnJlcGxhY2UobnVsbCwgdG8uY2gsICIiKTsKICAgICAgICBmaXJzdExpbmUuYXBwZW5kKGxhc3RMaW5lKTsKICAgICAgICBkb2MucmVtb3ZlKGZyb20ubGluZSArIDEsIG5saW5lcywgY2FsbGJhY2tzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgYWRkZWQgPSBbXTsKICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBudWxsLCBuZXdUZXh0WzBdKTsKICAgICAgICBsYXN0TGluZS5yZXBsYWNlKG51bGwsIHRvLmNoLCBuZXdUZXh0W25ld1RleHQubGVuZ3RoLTFdKTsKICAgICAgICBmaXJzdExpbmUuZml4TWFya0VuZHMobGFzdExpbmUpOwogICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKQogICAgICAgICAgYWRkZWQucHVzaChMaW5lLmluaGVyaXRNYXJrcyhuZXdUZXh0W2ldLCBmaXJzdExpbmUpKTsKICAgICAgICBpZiAobmxpbmVzID4gMSkgZG9jLnJlbW92ZShmcm9tLmxpbmUgKyAxLCBubGluZXMgLSAxLCBjYWxsYmFja3MpOwogICAgICAgIGRvYy5pbnNlcnQoZnJvbS5saW5lICsgMSwgYWRkZWQpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICAgIHZhciBwZXJMaW5lID0gc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoKSAtIDM7CiAgICAgICAgZG9jLml0ZXIoZnJvbS5saW5lLCBmcm9tLmxpbmUgKyBuZXdUZXh0Lmxlbmd0aCwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgaWYgKGxpbmUuaGlkZGVuKSByZXR1cm47CiAgICAgICAgICB2YXIgZ3Vlc3MgPSBNYXRoLmNlaWwobGluZS50ZXh0Lmxlbmd0aCAvIHBlckxpbmUpIHx8IDE7CiAgICAgICAgICBpZiAoZ3Vlc3MgIT0gbGluZS5oZWlnaHQpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZ3Vlc3MpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRvYy5pdGVyKGZyb20ubGluZSwgaSArIG5ld1RleHQubGVuZ3RoLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKICAgICAgICAgIGlmIChsLmxlbmd0aCA+IG1heExpbmVMZW5ndGgpIHsKICAgICAgICAgICAgbWF4TGluZSA9IGw7IG1heExpbmVMZW5ndGggPSBsLmxlbmd0aDsgbWF4V2lkdGggPSBudWxsOwogICAgICAgICAgICByZWNvbXB1dGVNYXhMZW5ndGggPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAocmVjb21wdXRlTWF4TGVuZ3RoKSB7CiAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gMDsgbWF4TGluZSA9ICIiOyBtYXhXaWR0aCA9IG51bGw7CiAgICAgICAgICBkb2MuaXRlcigwLCBkb2Muc2l6ZSwgZnVuY3Rpb24obGluZSkgewogICAgICAgICAgICB2YXIgbCA9IGxpbmUudGV4dDsKICAgICAgICAgICAgaWYgKGwubGVuZ3RoID4gbWF4TGluZUxlbmd0aCkgewogICAgICAgICAgICAgIG1heExpbmVMZW5ndGggPSBsLmxlbmd0aDsgbWF4TGluZSA9IGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIHRoZXNlIGxpbmVzIHRvIHRoZSB3b3JrIGFycmF5LCBzbyB0aGF0IHRoZXkgd2lsbCBiZQogICAgICAvLyBoaWdobGlnaHRlZC4gQWRqdXN0IHdvcmsgbGluZXMgaWYgbGluZXMgd2VyZSBhZGRlZC9yZW1vdmVkLgogICAgICB2YXIgbmV3V29yayA9IFtdLCBsZW5kaWZmID0gbmV3VGV4dC5sZW5ndGggLSBubGluZXMgLSAxOwogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHdvcmsubGVuZ3RoOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIHRhc2sgPSB3b3JrW2ldOwogICAgICAgIGlmICh0YXNrIDwgZnJvbS5saW5lKSBuZXdXb3JrLnB1c2godGFzayk7CiAgICAgICAgZWxzZSBpZiAodGFzayA+IHRvLmxpbmUpIG5ld1dvcmsucHVzaCh0YXNrICsgbGVuZGlmZik7CiAgICAgIH0KICAgICAgdmFyIGhsRW5kID0gZnJvbS5saW5lICsgTWF0aC5taW4obmV3VGV4dC5sZW5ndGgsIDUwMCk7CiAgICAgIGhpZ2hsaWdodExpbmVzKGZyb20ubGluZSwgaGxFbmQpOwogICAgICBuZXdXb3JrLnB1c2goaGxFbmQpOwogICAgICB3b3JrID0gbmV3V29yazsKICAgICAgc3RhcnRXb3JrZXIoMTAwKTsKICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGVzZSBsaW5lcyBjaGFuZ2VkLCBmb3IgdXBkYXRpbmcgdGhlIGRpc3BsYXkKICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMSwgZGlmZjogbGVuZGlmZn0pOwogICAgICB2YXIgY2hhbmdlT2JqID0ge2Zyb206IGZyb20sIHRvOiB0bywgdGV4dDogbmV3VGV4dH07CiAgICAgIGlmICh0ZXh0Q2hhbmdlZCkgewogICAgICAgIGZvciAodmFyIGN1ciA9IHRleHRDaGFuZ2VkOyBjdXIubmV4dDsgY3VyID0gY3VyLm5leHQpIHt9CiAgICAgICAgY3VyLm5leHQgPSBjaGFuZ2VPYmo7CiAgICAgIH0gZWxzZSB0ZXh0Q2hhbmdlZCA9IGNoYW5nZU9iajsKCiAgICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobikge3JldHVybiBuIDw9IE1hdGgubWluKHRvLmxpbmUsIHRvLmxpbmUgKyBsZW5kaWZmKSA/IG4gOiBuICsgbGVuZGlmZjt9CiAgICAgIHNldFNlbGVjdGlvbihzZWxGcm9tLCBzZWxUbywgdXBkYXRlTGluZShzZWwuZnJvbS5saW5lKSwgdXBkYXRlTGluZShzZWwudG8ubGluZSkpOwoKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY3JvbGwtc2l6ZSBkaXYgaGFzIHRoZSBjb3JyZWN0IGhlaWdodC4KICAgICAgaWYgKHNjcm9sbGVyLmNsaWVudEhlaWdodCkKICAgICAgICBjb2RlLnN0eWxlLmhlaWdodCA9IChkb2MuaGVpZ2h0ICogdGV4dEhlaWdodCgpICsgMiAqIHBhZGRpbmdUb3AoKSkgKyAicHgiOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZShjb2RlLCBmcm9tLCB0bykgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsKICAgICAgaWYgKCF0bykgdG8gPSBmcm9tOyBlbHNlIHRvID0gY2xpcFBvcyh0byk7CiAgICAgIGNvZGUgPSBzcGxpdExpbmVzKGNvZGUpOwogICAgICBmdW5jdGlvbiBhZGp1c3RQb3MocG9zKSB7CiAgICAgICAgaWYgKHBvc0xlc3MocG9zLCBmcm9tKSkgcmV0dXJuIHBvczsKICAgICAgICBpZiAoIXBvc0xlc3ModG8sIHBvcykpIHJldHVybiBlbmQ7CiAgICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNvZGUubGVuZ3RoIC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKICAgICAgICB2YXIgY2ggPSBwb3MuY2g7CiAgICAgICAgaWYgKHBvcy5saW5lID09IHRvLmxpbmUpCiAgICAgICAgICBjaCArPSBjb2RlW2NvZGUubGVuZ3RoLTFdLmxlbmd0aCAtICh0by5jaCAtICh0by5saW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiAwKSk7CiAgICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lLCBjaDogY2h9OwogICAgICB9CiAgICAgIHZhciBlbmQ7CiAgICAgIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGZ1bmN0aW9uKGVuZDEpIHsKICAgICAgICBlbmQgPSBlbmQxOwogICAgICAgIHJldHVybiB7ZnJvbTogYWRqdXN0UG9zKHNlbC5mcm9tKSwgdG86IGFkanVzdFBvcyhzZWwudG8pfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBlbmQ7CiAgICB9CiAgICBmdW5jdGlvbiByZXBsYWNlU2VsZWN0aW9uKGNvZGUsIGNvbGxhcHNlKSB7CiAgICAgIHJlcGxhY2VSYW5nZTEoc3BsaXRMaW5lcyhjb2RlKSwgc2VsLmZyb20sIHNlbC50bywgZnVuY3Rpb24oZW5kKSB7CiAgICAgICAgaWYgKGNvbGxhcHNlID09ICJlbmQiKSByZXR1cm4ge2Zyb206IGVuZCwgdG86IGVuZH07CiAgICAgICAgZWxzZSBpZiAoY29sbGFwc2UgPT0gInN0YXJ0IikgcmV0dXJuIHtmcm9tOiBzZWwuZnJvbSwgdG86IHNlbC5mcm9tfTsKICAgICAgICBlbHNlIHJldHVybiB7ZnJvbTogc2VsLmZyb20sIHRvOiBlbmR9OwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGNvbXB1dGVTZWwpIHsKICAgICAgdmFyIGVuZGNoID0gY29kZS5sZW5ndGggPT0gMSA/IGNvZGVbMF0ubGVuZ3RoICsgZnJvbS5jaCA6IGNvZGVbY29kZS5sZW5ndGgtMV0ubGVuZ3RoOwogICAgICB2YXIgbmV3U2VsID0gY29tcHV0ZVNlbCh7bGluZTogZnJvbS5saW5lICsgY29kZS5sZW5ndGggLSAxLCBjaDogZW5kY2h9KTsKICAgICAgdXBkYXRlTGluZXMoZnJvbSwgdG8sIGNvZGUsIG5ld1NlbC5mcm9tLCBuZXdTZWwudG8pOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJhbmdlKGZyb20sIHRvKSB7CiAgICAgIHZhciBsMSA9IGZyb20ubGluZSwgbDIgPSB0by5saW5lOwogICAgICBpZiAobDEgPT0gbDIpIHJldHVybiBnZXRMaW5lKGwxKS50ZXh0LnNsaWNlKGZyb20uY2gsIHRvLmNoKTsKICAgICAgdmFyIGNvZGUgPSBbZ2V0TGluZShsMSkudGV4dC5zbGljZShmcm9tLmNoKV07CiAgICAgIGRvYy5pdGVyKGwxICsgMSwgbDIsIGZ1bmN0aW9uKGxpbmUpIHsgY29kZS5wdXNoKGxpbmUudGV4dCk7IH0pOwogICAgICBjb2RlLnB1c2goZ2V0TGluZShsMikudGV4dC5zbGljZSgwLCB0by5jaCkpOwogICAgICByZXR1cm4gY29kZS5qb2luKCJcbiIpOwogICAgfQogICAgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKCkgewogICAgICByZXR1cm4gZ2V0UmFuZ2Uoc2VsLmZyb20sIHNlbC50byk7CiAgICB9CgogICAgdmFyIHBvbGxpbmdGYXN0ID0gZmFsc2U7IC8vIEVuc3VyZXMgc2xvd1BvbGwgZG9lc24ndCBjYW5jZWwgZmFzdFBvbGwKICAgIGZ1bmN0aW9uIHNsb3dQb2xsKCkgewogICAgICBpZiAocG9sbGluZ0Zhc3QpIHJldHVybjsKICAgICAgcG9sbC5zZXQob3B0aW9ucy5wb2xsSW50ZXJ2YWwsIGZ1bmN0aW9uKCkgewogICAgICAgIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgcmVhZElucHV0KCk7CiAgICAgICAgaWYgKGZvY3VzZWQpIHNsb3dQb2xsKCk7CiAgICAgICAgZW5kT3BlcmF0aW9uKCk7CiAgICAgIH0pOwogICAgfQogICAgZnVuY3Rpb24gZmFzdFBvbGwoKSB7CiAgICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKICAgICAgcG9sbGluZ0Zhc3QgPSB0cnVlOwogICAgICBmdW5jdGlvbiBwKCkgewogICAgICAgIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgdmFyIGNoYW5nZWQgPSByZWFkSW5wdXQoKTsKICAgICAgICBpZiAoIWNoYW5nZWQgJiYgIW1pc3NlZCkge21pc3NlZCA9IHRydWU7IHBvbGwuc2V0KDYwLCBwKTt9CiAgICAgICAgZWxzZSB7cG9sbGluZ0Zhc3QgPSBmYWxzZTsgc2xvd1BvbGwoKTt9CiAgICAgICAgZW5kT3BlcmF0aW9uKCk7CiAgICAgIH0KICAgICAgcG9sbC5zZXQoMjAsIHApOwogICAgfQoKICAgIC8vIFByZXZpbnB1dCBpcyBhIGhhY2sgdG8gd29yayB3aXRoIElNRS4gSWYgd2UgcmVzZXQgdGhlIHRleHRhcmVhCiAgICAvLyBvbiBldmVyeSBjaGFuZ2UsIHRoYXQgYnJlYWtzIElNRS4gU28gd2UgbG9vayBmb3IgY2hhbmdlcwogICAgLy8gY29tcGFyZWQgdG8gdGhlIHByZXZpb3VzIGNvbnRlbnQgaW5zdGVhZC4gKE1vZGVybiBicm93c2VycyBoYXZlCiAgICAvLyBldmVudHMgdGhhdCBpbmRpY2F0ZSBJTUUgdGFraW5nIHBsYWNlLCBidXQgdGhlc2UgYXJlIG5vdCB3aWRlbHkKICAgIC8vIHN1cHBvcnRlZCBvciBjb21wYXRpYmxlIGVub3VnaCB5ZXQgdG8gcmVseSBvbi4pCiAgICB2YXIgcHJldklucHV0ID0gIiI7CiAgICBmdW5jdGlvbiByZWFkSW5wdXQoKSB7CiAgICAgIGlmIChsZWF2ZUlucHV0QWxvbmUgfHwgIWZvY3VzZWQgfHwgaGFzU2VsZWN0aW9uKGlucHV0KSB8fCBvcHRpb25zLnJlYWRPbmx5KSByZXR1cm4gZmFsc2U7CiAgICAgIHZhciB0ZXh0ID0gaW5wdXQudmFsdWU7CiAgICAgIGlmICh0ZXh0ID09IHByZXZJbnB1dCkgcmV0dXJuIGZhbHNlOwogICAgICBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICAgIHZhciBzYW1lID0gMCwgbCA9IE1hdGgubWluKHByZXZJbnB1dC5sZW5ndGgsIHRleHQubGVuZ3RoKTsKICAgICAgd2hpbGUgKHNhbWUgPCBsICYmIHByZXZJbnB1dFtzYW1lXSA9PSB0ZXh0W3NhbWVdKSArK3NhbWU7CiAgICAgIGlmIChzYW1lIDwgcHJldklucHV0Lmxlbmd0aCkKICAgICAgICBzZWwuZnJvbSA9IHtsaW5lOiBzZWwuZnJvbS5saW5lLCBjaDogc2VsLmZyb20uY2ggLSAocHJldklucHV0Lmxlbmd0aCAtIHNhbWUpfTsKICAgICAgZWxzZSBpZiAob3ZlcndyaXRlICYmIHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKQogICAgICAgIHNlbC50byA9IHtsaW5lOiBzZWwudG8ubGluZSwgY2g6IE1hdGgubWluKGdldExpbmUoc2VsLnRvLmxpbmUpLnRleHQubGVuZ3RoLCBzZWwudG8uY2ggKyAodGV4dC5sZW5ndGggLSBzYW1lKSl9OwogICAgICByZXBsYWNlU2VsZWN0aW9uKHRleHQuc2xpY2Uoc2FtZSksICJlbmQiKTsKICAgICAgcHJldklucHV0ID0gdGV4dDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZXNldElucHV0KHVzZXIpIHsKICAgICAgaWYgKCFwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgewogICAgICAgIHByZXZJbnB1dCA9ICIiOwogICAgICAgIGlucHV0LnZhbHVlID0gZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgc2VsZWN0SW5wdXQoaW5wdXQpOwogICAgICB9IGVsc2UgaWYgKHVzZXIpIHByZXZJbnB1dCA9IGlucHV0LnZhbHVlID0gIiI7CiAgICB9CgogICAgZnVuY3Rpb24gZm9jdXNJbnB1dCgpIHsKICAgICAgaWYgKG9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIikgaW5wdXQuZm9jdXMoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JvbGxFZGl0b3JJbnRvVmlldygpIHsKICAgICAgaWYgKCFjdXJzb3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KSByZXR1cm47CiAgICAgIHZhciByZWN0ID0gY3Vyc29yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAvLyBJRSByZXR1cm5zIGJvZ3VzIGNvb3JkaW5hdGVzIHdoZW4gdGhlIGluc3RhbmNlIHNpdHMgaW5zaWRlIG9mIGFuIGlmcmFtZSBhbmQgdGhlIGN1cnNvciBpcyBoaWRkZW4KICAgICAgaWYgKGllICYmIHJlY3QudG9wID09IHJlY3QuYm90dG9tKSByZXR1cm47CiAgICAgIHZhciB3aW5IID0gd2luZG93LmlubmVySGVpZ2h0IHx8IE1hdGgubWF4KGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0KTsKICAgICAgaWYgKHJlY3QudG9wIDwgMCB8fCByZWN0LmJvdHRvbSA+IHdpbkgpIGN1cnNvci5zY3JvbGxJbnRvVmlldygpOwogICAgfQogICAgZnVuY3Rpb24gc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKSB7CiAgICAgIHZhciBjdXJzb3IgPSBsb2NhbENvb3JkcyhzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50byk7CiAgICAgIHZhciB4ID0gb3B0aW9ucy5saW5lV3JhcHBpbmcgPyBNYXRoLm1pbihjdXJzb3IueCwgbGluZVNwYWNlLm9mZnNldFdpZHRoKSA6IGN1cnNvci54OwogICAgICByZXR1cm4gc2Nyb2xsSW50b1ZpZXcoeCwgY3Vyc29yLnksIHgsIGN1cnNvci55Qm90KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KHgxLCB5MSwgeDIsIHkyKSB7CiAgICAgIHZhciBwbCA9IHBhZGRpbmdMZWZ0KCksIHB0ID0gcGFkZGluZ1RvcCgpOwogICAgICB5MSArPSBwdDsgeTIgKz0gcHQ7IHgxICs9IHBsOyB4MiArPSBwbDsKICAgICAgdmFyIHNjcmVlbiA9IHNjcm9sbGVyLmNsaWVudEhlaWdodCwgc2NyZWVudG9wID0gc2Nyb2xsZXIuc2Nyb2xsVG9wLCBzY3JvbGxlZCA9IGZhbHNlLCByZXN1bHQgPSB0cnVlOwogICAgICBpZiAoeTEgPCBzY3JlZW50b3ApIHtzY3JvbGxlci5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCB5MSk7IHNjcm9sbGVkID0gdHJ1ZTt9CiAgICAgIGVsc2UgaWYgKHkyID4gc2NyZWVudG9wICsgc2NyZWVuKSB7c2Nyb2xsZXIuc2Nyb2xsVG9wID0geTIgLSBzY3JlZW47IHNjcm9sbGVkID0gdHJ1ZTt9CgogICAgICB2YXIgc2NyZWVudyA9IHNjcm9sbGVyLmNsaWVudFdpZHRoLCBzY3JlZW5sZWZ0ID0gc2Nyb2xsZXIuc2Nyb2xsTGVmdDsKICAgICAgdmFyIGd1dHRlcncgPSBvcHRpb25zLmZpeGVkR3V0dGVyID8gZ3V0dGVyLmNsaWVudFdpZHRoIDogMDsKICAgICAgaWYgKHgxIDwgc2NyZWVubGVmdCArIGd1dHRlcncpIHsKICAgICAgICBpZiAoeDEgPCA1MCkgeDEgPSAwOwogICAgICAgIHNjcm9sbGVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwIC0gZ3V0dGVydyk7CiAgICAgICAgc2Nyb2xsZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHgyID4gc2NyZWVudyArIHNjcmVlbmxlZnQgLSAzKSB7CiAgICAgICAgc2Nyb2xsZXIuc2Nyb2xsTGVmdCA9IHgyICsgMTAgLSBzY3JlZW53OwogICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICBpZiAoeDIgPiBjb2RlLmNsaWVudFdpZHRoKSByZXN1bHQgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoc2Nyb2xsZWQgJiYgb3B0aW9ucy5vblNjcm9sbCkgb3B0aW9ucy5vblNjcm9sbChpbnN0YW5jZSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gdmlzaWJsZUxpbmVzKCkgewogICAgICB2YXIgbGggPSB0ZXh0SGVpZ2h0KCksIHRvcCA9IHNjcm9sbGVyLnNjcm9sbFRvcCAtIHBhZGRpbmdUb3AoKTsKICAgICAgdmFyIGZyb21faGVpZ2h0ID0gTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih0b3AgLyBsaCkpOwogICAgICB2YXIgdG9faGVpZ2h0ID0gTWF0aC5jZWlsKCh0b3AgKyBzY3JvbGxlci5jbGllbnRIZWlnaHQpIC8gbGgpOwogICAgICByZXR1cm4ge2Zyb206IGxpbmVBdEhlaWdodChkb2MsIGZyb21faGVpZ2h0KSwKICAgICAgICAgICAgICB0bzogbGluZUF0SGVpZ2h0KGRvYywgdG9faGVpZ2h0KX07CiAgICB9CiAgICAvLyBVc2VzIGEgc2V0IG9mIGNoYW5nZXMgcGx1cyB0aGUgY3VycmVudCBzY3JvbGwgcG9zaXRpb24gdG8KICAgIC8vIGRldGVybWluZSB3aGljaCBET00gdXBkYXRlcyBoYXZlIHRvIGJlIG1hZGUsIGFuZCBtYWtlcyB0aGUKICAgIC8vIHVwZGF0ZXMuCiAgICBmdW5jdGlvbiB1cGRhdGVEaXNwbGF5KGNoYW5nZXMsIHN1cHByZXNzQ2FsbGJhY2spIHsKICAgICAgaWYgKCFzY3JvbGxlci5jbGllbnRXaWR0aCkgewogICAgICAgIHNob3dpbmdGcm9tID0gc2hvd2luZ1RvID0gZGlzcGxheU9mZnNldCA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIENvbXB1dGUgdGhlIG5ldyB2aXNpYmxlIHdpbmRvdwogICAgICB2YXIgdmlzaWJsZSA9IHZpc2libGVMaW5lcygpOwogICAgICAvLyBCYWlsIG91dCBpZiB0aGUgdmlzaWJsZSBhcmVhIGlzIGFscmVhZHkgcmVuZGVyZWQgYW5kIG5vdGhpbmcgY2hhbmdlZC4KICAgICAgaWYgKGNoYW5nZXMgIT09IHRydWUgJiYgY2hhbmdlcy5sZW5ndGggPT0gMCAmJiB2aXNpYmxlLmZyb20gPiBzaG93aW5nRnJvbSAmJiB2aXNpYmxlLnRvIDwgc2hvd2luZ1RvKSByZXR1cm47CiAgICAgIHZhciBmcm9tID0gTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gMTAwLCAwKSwgdG8gPSBNYXRoLm1pbihkb2Muc2l6ZSwgdmlzaWJsZS50byArIDEwMCk7CiAgICAgIGlmIChzaG93aW5nRnJvbSA8IGZyb20gJiYgZnJvbSAtIHNob3dpbmdGcm9tIDwgMjApIGZyb20gPSBzaG93aW5nRnJvbTsKICAgICAgaWYgKHNob3dpbmdUbyA+IHRvICYmIHNob3dpbmdUbyAtIHRvIDwgMjApIHRvID0gTWF0aC5taW4oZG9jLnNpemUsIHNob3dpbmdUbyk7CgogICAgICAvLyBDcmVhdGUgYSByYW5nZSBvZiB0aGVvcmV0aWNhbGx5IGludGFjdCBsaW5lcywgYW5kIHB1bmNoIGhvbGVzCiAgICAgIC8vIGluIHRoYXQgdXNpbmcgdGhlIGNoYW5nZSBpbmZvLgogICAgICB2YXIgaW50YWN0ID0gY2hhbmdlcyA9PT0gdHJ1ZSA/IFtdIDoKICAgICAgICBjb21wdXRlSW50YWN0KFt7ZnJvbTogc2hvd2luZ0Zyb20sIHRvOiBzaG93aW5nVG8sIGRvbVN0YXJ0OiAwfV0sIGNoYW5nZXMpOwogICAgICAvLyBDbGlwIG9mZiB0aGUgcGFydHMgdGhhdCB3b24ndCBiZSB2aXNpYmxlCiAgICAgIHZhciBpbnRhY3RMaW5lcyA9IDA7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW50YWN0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIHJhbmdlID0gaW50YWN0W2ldOwogICAgICAgIGlmIChyYW5nZS5mcm9tIDwgZnJvbSkge3JhbmdlLmRvbVN0YXJ0ICs9IChmcm9tIC0gcmFuZ2UuZnJvbSk7IHJhbmdlLmZyb20gPSBmcm9tO30KICAgICAgICBpZiAocmFuZ2UudG8gPiB0bykgcmFuZ2UudG8gPSB0bzsKICAgICAgICBpZiAocmFuZ2UuZnJvbSA+PSByYW5nZS50bykgaW50YWN0LnNwbGljZShpLS0sIDEpOwogICAgICAgIGVsc2UgaW50YWN0TGluZXMgKz0gcmFuZ2UudG8gLSByYW5nZS5mcm9tOwogICAgICB9CiAgICAgIGlmIChpbnRhY3RMaW5lcyA9PSB0byAtIGZyb20pIHJldHVybjsKICAgICAgaW50YWN0LnNvcnQoZnVuY3Rpb24oYSwgYikge3JldHVybiBhLmRvbVN0YXJ0IC0gYi5kb21TdGFydDt9KTsKCiAgICAgIHZhciB0aCA9IHRleHRIZWlnaHQoKSwgZ3V0dGVyRGlzcGxheSA9IGd1dHRlci5zdHlsZS5kaXNwbGF5OwogICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIHBhdGNoRGlzcGxheShmcm9tLCB0bywgaW50YWN0KTsKICAgICAgbGluZURpdi5zdHlsZS5kaXNwbGF5ID0gZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKCiAgICAgIC8vIFBvc2l0aW9uIHRoZSBtb3ZlciBkaXYgdG8gYWxpZ24gd2l0aCB0aGUgbGluZXMgaXQncyBzdXBwb3NlZAogICAgICAvLyB0byBiZSBzaG93aW5nICh3aGljaCB3aWxsIGNvdmVyIHRoZSB2aXNpYmxlIGRpc3BsYXkpCiAgICAgIHZhciBkaWZmZXJlbnQgPSBmcm9tICE9IHNob3dpbmdGcm9tIHx8IHRvICE9IHNob3dpbmdUbyB8fCBsYXN0U2l6ZUMgIT0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgdGg7CiAgICAgIC8vIFRoaXMgaXMganVzdCBhIGJvZ3VzIGZvcm11bGEgdGhhdCBkZXRlY3RzIHdoZW4gdGhlIGVkaXRvciBpcwogICAgICAvLyByZXNpemVkIG9yIHRoZSBmb250IHNpemUgY2hhbmdlcy4KICAgICAgaWYgKGRpZmZlcmVudCkgbGFzdFNpemVDID0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0ICsgdGg7CiAgICAgIHNob3dpbmdGcm9tID0gZnJvbTsgc2hvd2luZ1RvID0gdG87CiAgICAgIGRpc3BsYXlPZmZzZXQgPSBoZWlnaHRBdExpbmUoZG9jLCBmcm9tKTsKICAgICAgbW92ZXIuc3R5bGUudG9wID0gKGRpc3BsYXlPZmZzZXQgKiB0aCkgKyAicHgiOwogICAgICBpZiAoc2Nyb2xsZXIuY2xpZW50SGVpZ2h0KQogICAgICAgIGNvZGUuc3R5bGUuaGVpZ2h0ID0gKGRvYy5oZWlnaHQgKiB0aCArIDIgKiBwYWRkaW5nVG9wKCkpICsgInB4IjsKCiAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYWxsIHJhdGhlciBlcnJvciBwcm9uZSwgaXQgaXMgaG9ub3VyZWQgd2l0aCB0aGUKICAgICAgLy8gb25seSBhc3NlcnRpb24gaW4gdGhlIHdob2xlIGZpbGUuCiAgICAgIGlmIChsaW5lRGl2LmNoaWxkTm9kZXMubGVuZ3RoICE9IHNob3dpbmdUbyAtIHNob3dpbmdGcm9tKQogICAgICAgIHRocm93IG5ldyBFcnJvcigiQkFEIFBBVENIISAiICsgSlNPTi5zdHJpbmdpZnkoaW50YWN0KSArICIgc2l6ZT0iICsgKHNob3dpbmdUbyAtIHNob3dpbmdGcm9tKSArCiAgICAgICAgICAgICAgICAgICAgICAgICIgbm9kZXM9IiArIGxpbmVEaXYuY2hpbGROb2Rlcy5sZW5ndGgpOwoKICAgICAgZnVuY3Rpb24gY2hlY2tIZWlnaHRzKCkgewogICAgICAgIG1heFdpZHRoID0gc2Nyb2xsZXIuY2xpZW50V2lkdGg7CiAgICAgICAgdmFyIGN1ck5vZGUgPSBsaW5lRGl2LmZpcnN0Q2hpbGQsIGhlaWdodENoYW5nZWQgPSBmYWxzZTsKICAgICAgICBkb2MuaXRlcihzaG93aW5nRnJvbSwgc2hvd2luZ1RvLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICBpZiAoIWxpbmUuaGlkZGVuKSB7CiAgICAgICAgICAgIHZhciBoZWlnaHQgPSBNYXRoLnJvdW5kKGN1ck5vZGUub2Zmc2V0SGVpZ2h0IC8gdGgpIHx8IDE7CiAgICAgICAgICAgIGlmIChsaW5lLmhlaWdodCAhPSBoZWlnaHQpIHsKICAgICAgICAgICAgICB1cGRhdGVMaW5lSGVpZ2h0KGxpbmUsIGhlaWdodCk7CiAgICAgICAgICAgICAgZ3V0dGVyRGlydHkgPSBoZWlnaHRDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY3VyTm9kZSA9IGN1ck5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGhlaWdodENoYW5nZWQpCiAgICAgICAgICBjb2RlLnN0eWxlLmhlaWdodCA9IChkb2MuaGVpZ2h0ICogdGggKyAyICogcGFkZGluZ1RvcCgpKSArICJweCI7CiAgICAgICAgcmV0dXJuIGhlaWdodENoYW5nZWQ7CiAgICAgIH0KCiAgICAgIGlmIChvcHRpb25zLmxpbmVXcmFwcGluZykgewogICAgICAgIGNoZWNrSGVpZ2h0cygpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChtYXhXaWR0aCA9PSBudWxsKSBtYXhXaWR0aCA9IHN0cmluZ1dpZHRoKG1heExpbmUpOwogICAgICAgIGlmIChtYXhXaWR0aCA+IHNjcm9sbGVyLmNsaWVudFdpZHRoKSB7CiAgICAgICAgICBsaW5lU3BhY2Uuc3R5bGUud2lkdGggPSBtYXhXaWR0aCArICJweCI7CiAgICAgICAgICAvLyBOZWVkZWQgdG8gcHJldmVudCBvZGQgd3JhcHBpbmcvaGlkaW5nIG9mIHdpZGdldHMgcGxhY2VkIGluIGhlcmUuCiAgICAgICAgICBjb2RlLnN0eWxlLndpZHRoID0gIiI7CiAgICAgICAgICBjb2RlLnN0eWxlLndpZHRoID0gc2Nyb2xsZXIuc2Nyb2xsV2lkdGggKyAicHgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsaW5lU3BhY2Uuc3R5bGUud2lkdGggPSBjb2RlLnN0eWxlLndpZHRoID0gIiI7CiAgICAgICAgfQogICAgICB9CgogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9IGd1dHRlckRpc3BsYXk7CiAgICAgIGlmIChkaWZmZXJlbnQgfHwgZ3V0dGVyRGlydHkpIHsKICAgICAgICAvLyBJZiB0aGUgZ3V0dGVyIGdyZXcgaW4gc2l6ZSwgcmUtY2hlY2sgaGVpZ2h0cy4gSWYgdGhvc2UgY2hhbmdlZCwgcmUtZHJhdyBndXR0ZXIuCiAgICAgICAgdXBkYXRlR3V0dGVyKCkgJiYgb3B0aW9ucy5saW5lV3JhcHBpbmcgJiYgY2hlY2tIZWlnaHRzKCkgJiYgdXBkYXRlR3V0dGVyKCk7CiAgICAgIH0KICAgICAgdXBkYXRlU2VsZWN0aW9uKCk7CiAgICAgIGlmICghc3VwcHJlc3NDYWxsYmFjayAmJiBvcHRpb25zLm9uVXBkYXRlKSBvcHRpb25zLm9uVXBkYXRlKGluc3RhbmNlKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gY29tcHV0ZUludGFjdChpbnRhY3QsIGNoYW5nZXMpIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBjaGFuZ2VzLmxlbmd0aCB8fCAwOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIGNoYW5nZSA9IGNoYW5nZXNbaV0sIGludGFjdDIgPSBbXSwgZGlmZiA9IGNoYW5nZS5kaWZmIHx8IDA7CiAgICAgICAgZm9yICh2YXIgaiA9IDAsIGwyID0gaW50YWN0Lmxlbmd0aDsgaiA8IGwyOyArK2opIHsKICAgICAgICAgIHZhciByYW5nZSA9IGludGFjdFtqXTsKICAgICAgICAgIGlmIChjaGFuZ2UudG8gPD0gcmFuZ2UuZnJvbSAmJiBjaGFuZ2UuZGlmZikKICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tICsgZGlmZiwgdG86IHJhbmdlLnRvICsgZGlmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICBkb21TdGFydDogcmFuZ2UuZG9tU3RhcnR9KTsKICAgICAgICAgIGVsc2UgaWYgKGNoYW5nZS50byA8PSByYW5nZS5mcm9tIHx8IGNoYW5nZS5mcm9tID49IHJhbmdlLnRvKQogICAgICAgICAgICBpbnRhY3QyLnB1c2gocmFuZ2UpOwogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmIChjaGFuZ2UuZnJvbSA+IHJhbmdlLmZyb20pCiAgICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiByYW5nZS5mcm9tLCB0bzogY2hhbmdlLmZyb20sIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydH0pOwogICAgICAgICAgICBpZiAoY2hhbmdlLnRvIDwgcmFuZ2UudG8pCiAgICAgICAgICAgICAgaW50YWN0Mi5wdXNoKHtmcm9tOiBjaGFuZ2UudG8gKyBkaWZmLCB0bzogcmFuZ2UudG8gKyBkaWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0ICsgKGNoYW5nZS50byAtIHJhbmdlLmZyb20pfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGludGFjdCA9IGludGFjdDI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGFjdDsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXRjaERpc3BsYXkoZnJvbSwgdG8sIGludGFjdCkgewogICAgICAvLyBUaGUgZmlyc3QgcGFzcyByZW1vdmVzIHRoZSBET00gbm9kZXMgdGhhdCBhcmVuJ3QgaW50YWN0LgogICAgICBpZiAoIWludGFjdC5sZW5ndGgpIGxpbmVEaXYuaW5uZXJIVE1MID0gIiI7CiAgICAgIGVsc2UgewogICAgICAgIGZ1bmN0aW9uIGtpbGxOb2RlKG5vZGUpIHsKICAgICAgICAgIHZhciB0bXAgPSBub2RlLm5leHRTaWJsaW5nOwogICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpOwogICAgICAgICAgcmV0dXJuIHRtcDsKICAgICAgICB9CiAgICAgICAgdmFyIGRvbVBvcyA9IDAsIGN1ck5vZGUgPSBsaW5lRGl2LmZpcnN0Q2hpbGQsIG47CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbnRhY3QubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHZhciBjdXIgPSBpbnRhY3RbaV07CiAgICAgICAgICB3aGlsZSAoY3VyLmRvbVN0YXJ0ID4gZG9tUG9zKSB7Y3VyTm9kZSA9IGtpbGxOb2RlKGN1ck5vZGUpOyBkb21Qb3MrKzt9CiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgZSA9IGN1ci50byAtIGN1ci5mcm9tOyBqIDwgZTsgKytqKSB7Y3VyTm9kZSA9IGN1ck5vZGUubmV4dFNpYmxpbmc7IGRvbVBvcysrO30KICAgICAgICB9CiAgICAgICAgd2hpbGUgKGN1ck5vZGUpIGN1ck5vZGUgPSBraWxsTm9kZShjdXJOb2RlKTsKICAgICAgfQogICAgICAvLyBUaGlzIHBhc3MgZmlsbHMgaW4gdGhlIGxpbmVzIHRoYXQgYWN0dWFsbHkgY2hhbmdlZC4KICAgICAgdmFyIG5leHRJbnRhY3QgPSBpbnRhY3Quc2hpZnQoKSwgY3VyTm9kZSA9IGxpbmVEaXYuZmlyc3RDaGlsZCwgaiA9IGZyb207CiAgICAgIHZhciBzY3JhdGNoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGRvYy5pdGVyKGZyb20sIHRvLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgaWYgKG5leHRJbnRhY3QgJiYgbmV4dEludGFjdC50byA9PSBqKSBuZXh0SW50YWN0ID0gaW50YWN0LnNoaWZ0KCk7CiAgICAgICAgaWYgKCFuZXh0SW50YWN0IHx8IG5leHRJbnRhY3QuZnJvbSA+IGopIHsKICAgICAgICAgIGlmIChsaW5lLmhpZGRlbikgdmFyIGh0bWwgPSBzY3JhdGNoLmlubmVySFRNTCA9ICI8cHJlPjwvcHJlPiI7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGh0bWwgPSAnPHByZScgKyAobGluZS5jbGFzc05hbWUgPyAnIGNsYXNzPSInICsgbGluZS5jbGFzc05hbWUgKyAnIicgOiAnJykgKyAnPicKICAgICAgICAgICAgICArIGxpbmUuZ2V0SFRNTChtYWtlVGFiKSArICc8L3ByZT4nOwogICAgICAgICAgICAvLyBLbHVkZ2UgdG8gbWFrZSBzdXJlIHRoZSBzdHlsZWQgZWxlbWVudCBsaWVzIGJlaGluZCB0aGUgc2VsZWN0aW9uIChieSB6LWluZGV4KQogICAgICAgICAgICBpZiAobGluZS5iZ0NsYXNzTmFtZSkKICAgICAgICAgICAgICBodG1sID0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+PHByZSBjbGFzcz0iJyArIGxpbmUuYmdDbGFzc05hbWUgKwogICAgICAgICAgICAgICciIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6IDA7IHJpZ2h0OiAwOyB0b3A6IDA7IGJvdHRvbTogMDsgei1pbmRleDogLTIiPiYjMTYwOzwvcHJlPicgKyBodG1sICsgIjwvZGl2PiI7CiAgICAgICAgICB9CiAgICAgICAgICBzY3JhdGNoLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICAgICBsaW5lRGl2Lmluc2VydEJlZm9yZShzY3JhdGNoLmZpcnN0Q2hpbGQsIGN1ck5vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjdXJOb2RlID0gY3VyTm9kZS5uZXh0U2libGluZzsKICAgICAgICB9CiAgICAgICAgKytqOwogICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVHdXR0ZXIoKSB7CiAgICAgIGlmICghb3B0aW9ucy5ndXR0ZXIgJiYgIW9wdGlvbnMubGluZU51bWJlcnMpIHJldHVybjsKICAgICAgdmFyIGhUZXh0ID0gbW92ZXIub2Zmc2V0SGVpZ2h0LCBoRWRpdG9yID0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0OwogICAgICBndXR0ZXIuc3R5bGUuaGVpZ2h0ID0gKGhUZXh0IC0gaEVkaXRvciA8IDIgPyBoRWRpdG9yIDogaFRleHQpICsgInB4IjsKICAgICAgdmFyIGh0bWwgPSBbXSwgaSA9IHNob3dpbmdGcm9tLCBub3JtYWxOb2RlOwogICAgICBkb2MuaXRlcihzaG93aW5nRnJvbSwgTWF0aC5tYXgoc2hvd2luZ1RvLCBzaG93aW5nRnJvbSArIDEpLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgaWYgKGxpbmUuaGlkZGVuKSB7CiAgICAgICAgICBodG1sLnB1c2goIjxwcmU+PC9wcmU+Iik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBtYXJrZXIgPSBsaW5lLmd1dHRlck1hcmtlcjsKICAgICAgICAgIHZhciB0ZXh0ID0gb3B0aW9ucy5saW5lTnVtYmVycyA/IGkgKyBvcHRpb25zLmZpcnN0TGluZU51bWJlciA6IG51bGw7CiAgICAgICAgICBpZiAobWFya2VyICYmIG1hcmtlci50ZXh0KQogICAgICAgICAgICB0ZXh0ID0gbWFya2VyLnRleHQucmVwbGFjZSgiJU4lIiwgdGV4dCAhPSBudWxsID8gdGV4dCA6ICIiKTsKICAgICAgICAgIGVsc2UgaWYgKHRleHQgPT0gbnVsbCkKICAgICAgICAgICAgdGV4dCA9ICJcdTAwYTAiOwogICAgICAgICAgaHRtbC5wdXNoKChtYXJrZXIgJiYgbWFya2VyLnN0eWxlID8gJzxwcmUgY2xhc3M9IicgKyBtYXJrZXIuc3R5bGUgKyAnIj4nIDogIjxwcmU+IiksIHRleHQpOwogICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBsaW5lLmhlaWdodDsgKytqKSBodG1sLnB1c2goIjxici8+JiMxNjA7Iik7CiAgICAgICAgICBodG1sLnB1c2goIjwvcHJlPiIpOwogICAgICAgICAgaWYgKCFtYXJrZXIpIG5vcm1hbE5vZGUgPSBpOwogICAgICAgIH0KICAgICAgICArK2k7CiAgICAgIH0pOwogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgZ3V0dGVyVGV4dC5pbm5lckhUTUwgPSBodG1sLmpvaW4oIiIpOwogICAgICAvLyBNYWtlIHN1cmUgc2Nyb2xsaW5nIGRvZXNuJ3QgY2F1c2UgbnVtYmVyIGd1dHRlciBzaXplIHRvIHBvcAogICAgICBpZiAobm9ybWFsTm9kZSAhPSBudWxsKSB7CiAgICAgICAgdmFyIG5vZGUgPSBndXR0ZXJUZXh0LmNoaWxkTm9kZXNbbm9ybWFsTm9kZSAtIHNob3dpbmdGcm9tXTsKICAgICAgICB2YXIgbWlud2lkdGggPSBTdHJpbmcoZG9jLnNpemUpLmxlbmd0aCwgdmFsID0gZWx0VGV4dChub2RlKSwgcGFkID0gIiI7CiAgICAgICAgd2hpbGUgKHZhbC5sZW5ndGggKyBwYWQubGVuZ3RoIDwgbWlud2lkdGgpIHBhZCArPSAiXHUwMGEwIjsKICAgICAgICBpZiAocGFkKSBub2RlLmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShwYWQpLCBub2RlLmZpcnN0Q2hpbGQpOwogICAgICB9CiAgICAgIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgIHZhciByZXNpemVkID0gTWF0aC5hYnMoKHBhcnNlSW50KGxpbmVTcGFjZS5zdHlsZS5tYXJnaW5MZWZ0KSB8fCAwKSAtIGd1dHRlci5vZmZzZXRXaWR0aCkgPiAyOwogICAgICBsaW5lU3BhY2Uuc3R5bGUubWFyZ2luTGVmdCA9IGd1dHRlci5vZmZzZXRXaWR0aCArICJweCI7CiAgICAgIGd1dHRlckRpcnR5ID0gZmFsc2U7CiAgICAgIHJldHVybiByZXNpemVkOwogICAgfQogICAgZnVuY3Rpb24gdXBkYXRlU2VsZWN0aW9uKCkgewogICAgICB2YXIgY29sbGFwc2VkID0gcG9zRXEoc2VsLmZyb20sIHNlbC50byk7CiAgICAgIHZhciBmcm9tUG9zID0gbG9jYWxDb29yZHMoc2VsLmZyb20sIHRydWUpOwogICAgICB2YXIgdG9Qb3MgPSBjb2xsYXBzZWQgPyBmcm9tUG9zIDogbG9jYWxDb29yZHMoc2VsLnRvLCB0cnVlKTsKICAgICAgdmFyIGhlYWRQb3MgPSBzZWwuaW52ZXJ0ZWQgPyBmcm9tUG9zIDogdG9Qb3MsIHRoID0gdGV4dEhlaWdodCgpOwogICAgICB2YXIgd3JhcE9mZiA9IGVsdE9mZnNldCh3cmFwcGVyKSwgbGluZU9mZiA9IGVsdE9mZnNldChsaW5lRGl2KTsKICAgICAgaW5wdXREaXYuc3R5bGUudG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsZXIub2Zmc2V0SGVpZ2h0LCBoZWFkUG9zLnkgKyBsaW5lT2ZmLnRvcCAtIHdyYXBPZmYudG9wKSkgKyAicHgiOwogICAgICBpbnB1dERpdi5zdHlsZS5sZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsZXIub2Zmc2V0V2lkdGgsIGhlYWRQb3MueCArIGxpbmVPZmYubGVmdCAtIHdyYXBPZmYubGVmdCkpICsgInB4IjsKICAgICAgaWYgKGNvbGxhcHNlZCkgewogICAgICAgIGN1cnNvci5zdHlsZS50b3AgPSBoZWFkUG9zLnkgKyAicHgiOwogICAgICAgIGN1cnNvci5zdHlsZS5sZWZ0ID0gKG9wdGlvbnMubGluZVdyYXBwaW5nID8gTWF0aC5taW4oaGVhZFBvcy54LCBsaW5lU3BhY2Uub2Zmc2V0V2lkdGgpIDogaGVhZFBvcy54KSArICJweCI7CiAgICAgICAgY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgICBzZWxlY3Rpb25EaXYuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgc2FtZUxpbmUgPSBmcm9tUG9zLnkgPT0gdG9Qb3MueSwgaHRtbCA9ICIiOwogICAgICAgIGZ1bmN0aW9uIGFkZChsZWZ0LCB0b3AsIHJpZ2h0LCBoZWlnaHQpIHsKICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3Itc2VsZWN0ZWQiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IGxlZnQ6ICcgKyBsZWZ0ICsKICAgICAgICAgICAgJ3B4OyB0b3A6ICcgKyB0b3AgKyAncHg7IHJpZ2h0OiAnICsgcmlnaHQgKyAncHg7IGhlaWdodDogJyArIGhlaWdodCArICdweCI+PC9kaXY+JzsKICAgICAgICB9CiAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gbGluZVNwYWNlLmNsaWVudFdpZHRoIHx8IGxpbmVTcGFjZS5vZmZzZXRXaWR0aDsKICAgICAgICB2YXIgY2xpZW50SGVpZ2h0ID0gbGluZVNwYWNlLmNsaWVudEhlaWdodCB8fCBsaW5lU3BhY2Uub2Zmc2V0SGVpZ2h0OwogICAgICAgIGlmIChzZWwuZnJvbS5jaCAmJiBmcm9tUG9zLnkgPj0gMCkgewogICAgICAgICAgdmFyIHJpZ2h0ID0gc2FtZUxpbmUgPyBjbGllbnRXaWR0aCAtIHRvUG9zLnggOiAwOwogICAgICAgICAgYWRkKGZyb21Qb3MueCwgZnJvbVBvcy55LCByaWdodCwgdGgpOwogICAgICAgIH0KICAgICAgICB2YXIgbWlkZGxlU3RhcnQgPSBNYXRoLm1heCgwLCBmcm9tUG9zLnkgKyAoc2VsLmZyb20uY2ggPyB0aCA6IDApKTsKICAgICAgICB2YXIgbWlkZGxlSGVpZ2h0ID0gTWF0aC5taW4odG9Qb3MueSwgY2xpZW50SGVpZ2h0KSAtIG1pZGRsZVN0YXJ0OwogICAgICAgIGlmIChtaWRkbGVIZWlnaHQgPiAwLjIgKiB0aCkKICAgICAgICAgIGFkZCgwLCBtaWRkbGVTdGFydCwgMCwgbWlkZGxlSGVpZ2h0KTsKICAgICAgICBpZiAoKCFzYW1lTGluZSB8fCAhc2VsLmZyb20uY2gpICYmIHRvUG9zLnkgPCBjbGllbnRIZWlnaHQgLSAuNSAqIHRoKQogICAgICAgICAgYWRkKDAsIHRvUG9zLnksIGNsaWVudFdpZHRoIC0gdG9Qb3MueCwgdGgpOwogICAgICAgIHNlbGVjdGlvbkRpdi5pbm5lckhUTUwgPSBodG1sOwogICAgICAgIGN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICAgIHNlbGVjdGlvbkRpdi5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBzZXRTaGlmdCh2YWwpIHsKICAgICAgaWYgKHZhbCkgc2hpZnRTZWxlY3RpbmcgPSBzaGlmdFNlbGVjdGluZyB8fCAoc2VsLmludmVydGVkID8gc2VsLnRvIDogc2VsLmZyb20pOwogICAgICBlbHNlIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFNlbGVjdGlvblVzZXIoZnJvbSwgdG8pIHsKICAgICAgdmFyIHNoID0gc2hpZnRTZWxlY3RpbmcgJiYgY2xpcFBvcyhzaGlmdFNlbGVjdGluZyk7CiAgICAgIGlmIChzaCkgewogICAgICAgIGlmIChwb3NMZXNzKHNoLCBmcm9tKSkgZnJvbSA9IHNoOwogICAgICAgIGVsc2UgaWYgKHBvc0xlc3ModG8sIHNoKSkgdG8gPSBzaDsKICAgICAgfQogICAgICBzZXRTZWxlY3Rpb24oZnJvbSwgdG8pOwogICAgICB1c2VyU2VsQ2hhbmdlID0gdHJ1ZTsKICAgIH0KICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uLiBMYXN0IHR3byBhcmdzIGFyZSBvbmx5IHVzZWQgYnkKICAgIC8vIHVwZGF0ZUxpbmVzLCBzaW5jZSB0aGV5IGhhdmUgdG8gYmUgZXhwcmVzc2VkIGluIHRoZSBsaW5lCiAgICAvLyBudW1iZXJzIGJlZm9yZSB0aGUgdXBkYXRlLgogICAgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZyb20sIHRvLCBvbGRGcm9tLCBvbGRUbykgewogICAgICBnb2FsQ29sdW1uID0gbnVsbDsKICAgICAgaWYgKG9sZEZyb20gPT0gbnVsbCkge29sZEZyb20gPSBzZWwuZnJvbS5saW5lOyBvbGRUbyA9IHNlbC50by5saW5lO30KICAgICAgaWYgKHBvc0VxKHNlbC5mcm9tLCBmcm9tKSAmJiBwb3NFcShzZWwudG8sIHRvKSkgcmV0dXJuOwogICAgICBpZiAocG9zTGVzcyh0bywgZnJvbSkpIHt2YXIgdG1wID0gdG87IHRvID0gZnJvbTsgZnJvbSA9IHRtcDt9CgogICAgICAvLyBTa2lwIG92ZXIgaGlkZGVuIGxpbmVzLgogICAgICBpZiAoZnJvbS5saW5lICE9IG9sZEZyb20pIHsKICAgICAgICB2YXIgZnJvbTEgPSBza2lwSGlkZGVuKGZyb20sIG9sZEZyb20sIHNlbC5mcm9tLmNoKTsKICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBub24taGlkZGVuIGxpbmUgbGVmdCwgZm9yY2UgdmlzaWJpbGl0eSBvbiBjdXJyZW50IGxpbmUKICAgICAgICBpZiAoIWZyb20xKSBzZXRMaW5lSGlkZGVuKGZyb20ubGluZSwgZmFsc2UpOwogICAgICAgIGVsc2UgZnJvbSA9IGZyb20xOwogICAgICB9CiAgICAgIGlmICh0by5saW5lICE9IG9sZFRvKSB0byA9IHNraXBIaWRkZW4odG8sIG9sZFRvLCBzZWwudG8uY2gpOwoKICAgICAgaWYgKHBvc0VxKGZyb20sIHRvKSkgc2VsLmludmVydGVkID0gZmFsc2U7CiAgICAgIGVsc2UgaWYgKHBvc0VxKGZyb20sIHNlbC50bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOwogICAgICBlbHNlIGlmIChwb3NFcSh0bywgc2VsLmZyb20pKSBzZWwuaW52ZXJ0ZWQgPSB0cnVlOwoKICAgICAgaWYgKG9wdGlvbnMuYXV0b0NsZWFyRW1wdHlMaW5lcyAmJiBwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgewogICAgICAgIHZhciBoZWFkID0gc2VsLmludmVydGVkID8gZnJvbSA6IHRvOwogICAgICAgIGlmIChoZWFkLmxpbmUgIT0gc2VsLmZyb20ubGluZSAmJiBzZWwuZnJvbS5saW5lIDwgZG9jLnNpemUpIHsKICAgICAgICAgIHZhciBvbGRMaW5lID0gZ2V0TGluZShzZWwuZnJvbS5saW5lKTsKICAgICAgICAgIGlmICgvXlxzKyQvLnRlc3Qob2xkTGluZS50ZXh0KSkKICAgICAgICAgICAgc2V0VGltZW91dChvcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgaWYgKG9sZExpbmUucGFyZW50ICYmIC9eXHMrJC8udGVzdChvbGRMaW5lLnRleHQpKSB7CiAgICAgICAgICAgICAgICB2YXIgbm8gPSBsaW5lTm8ob2xkTGluZSk7CiAgICAgICAgICAgICAgICByZXBsYWNlUmFuZ2UoIiIsIHtsaW5lOiBubywgY2g6IDB9LCB7bGluZTogbm8sIGNoOiBvbGRMaW5lLnRleHQubGVuZ3RofSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LCAxMCkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgc2VsLmZyb20gPSBmcm9tOyBzZWwudG8gPSB0bzsKICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBza2lwSGlkZGVuKHBvcywgb2xkTGluZSwgb2xkQ2gpIHsKICAgICAgZnVuY3Rpb24gZ2V0Tm9uSGlkZGVuKGRpcikgewogICAgICAgIHZhciBsTm8gPSBwb3MubGluZSArIGRpciwgZW5kID0gZGlyID09IDEgPyBkb2Muc2l6ZSA6IC0xOwogICAgICAgIHdoaWxlIChsTm8gIT0gZW5kKSB7CiAgICAgICAgICB2YXIgbGluZSA9IGdldExpbmUobE5vKTsKICAgICAgICAgIGlmICghbGluZS5oaWRkZW4pIHsKICAgICAgICAgICAgdmFyIGNoID0gcG9zLmNoOwogICAgICAgICAgICBpZiAoY2ggPiBvbGRDaCB8fCBjaCA+IGxpbmUudGV4dC5sZW5ndGgpIGNoID0gbGluZS50ZXh0Lmxlbmd0aDsKICAgICAgICAgICAgcmV0dXJuIHtsaW5lOiBsTm8sIGNoOiBjaH07CiAgICAgICAgICB9CiAgICAgICAgICBsTm8gKz0gZGlyOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXIgbGluZSA9IGdldExpbmUocG9zLmxpbmUpOwogICAgICBpZiAoIWxpbmUuaGlkZGVuKSByZXR1cm4gcG9zOwogICAgICBpZiAocG9zLmxpbmUgPj0gb2xkTGluZSkgcmV0dXJuIGdldE5vbkhpZGRlbigxKSB8fCBnZXROb25IaWRkZW4oLTEpOwogICAgICBlbHNlIHJldHVybiBnZXROb25IaWRkZW4oLTEpIHx8IGdldE5vbkhpZGRlbigxKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldEN1cnNvcihsaW5lLCBjaCwgdXNlcikgewogICAgICB2YXIgcG9zID0gY2xpcFBvcyh7bGluZTogbGluZSwgY2g6IGNoIHx8IDB9KTsKICAgICAgKHVzZXIgPyBzZXRTZWxlY3Rpb25Vc2VyIDogc2V0U2VsZWN0aW9uKShwb3MsIHBvcyk7CiAgICB9CgogICAgZnVuY3Rpb24gY2xpcExpbmUobikge3JldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihuLCBkb2Muc2l6ZS0xKSk7fQogICAgZnVuY3Rpb24gY2xpcFBvcyhwb3MpIHsKICAgICAgaWYgKHBvcy5saW5lIDwgMCkgcmV0dXJuIHtsaW5lOiAwLCBjaDogMH07CiAgICAgIGlmIChwb3MubGluZSA+PSBkb2Muc2l6ZSkgcmV0dXJuIHtsaW5lOiBkb2Muc2l6ZS0xLCBjaDogZ2V0TGluZShkb2Muc2l6ZS0xKS50ZXh0Lmxlbmd0aH07CiAgICAgIHZhciBjaCA9IHBvcy5jaCwgbGluZWxlbiA9IGdldExpbmUocG9zLmxpbmUpLnRleHQubGVuZ3RoOwogICAgICBpZiAoY2ggPT0gbnVsbCB8fCBjaCA+IGxpbmVsZW4pIHJldHVybiB7bGluZTogcG9zLmxpbmUsIGNoOiBsaW5lbGVufTsKICAgICAgZWxzZSBpZiAoY2ggPCAwKSByZXR1cm4ge2xpbmU6IHBvcy5saW5lLCBjaDogMH07CiAgICAgIGVsc2UgcmV0dXJuIHBvczsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kUG9zSChkaXIsIHVuaXQpIHsKICAgICAgdmFyIGVuZCA9IHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvLCBsaW5lID0gZW5kLmxpbmUsIGNoID0gZW5kLmNoOwogICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUobGluZSk7CiAgICAgIGZ1bmN0aW9uIGZpbmROZXh0TGluZSgpIHsKICAgICAgICBmb3IgKHZhciBsID0gbGluZSArIGRpciwgZSA9IGRpciA8IDAgPyAtMSA6IGRvYy5zaXplOyBsICE9IGU7IGwgKz0gZGlyKSB7CiAgICAgICAgICB2YXIgbG8gPSBnZXRMaW5lKGwpOwogICAgICAgICAgaWYgKCFsby5oaWRkZW4pIHsgbGluZSA9IGw7IGxpbmVPYmogPSBsbzsgcmV0dXJuIHRydWU7IH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbW92ZU9uY2UoYm91bmRUb0xpbmUpIHsKICAgICAgICBpZiAoY2ggPT0gKGRpciA8IDAgPyAwIDogbGluZU9iai50ZXh0Lmxlbmd0aCkpIHsKICAgICAgICAgIGlmICghYm91bmRUb0xpbmUgJiYgZmluZE5leHRMaW5lKCkpIGNoID0gZGlyIDwgMCA/IGxpbmVPYmoudGV4dC5sZW5ndGggOiAwOwogICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBlbHNlIGNoICs9IGRpcjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodW5pdCA9PSAiY2hhciIpIG1vdmVPbmNlKCk7CiAgICAgIGVsc2UgaWYgKHVuaXQgPT0gImNvbHVtbiIpIG1vdmVPbmNlKHRydWUpOwogICAgICBlbHNlIGlmICh1bml0ID09ICJ3b3JkIikgewogICAgICAgIHZhciBzYXdXb3JkID0gZmFsc2U7CiAgICAgICAgZm9yICg7OykgewogICAgICAgICAgaWYgKGRpciA8IDApIGlmICghbW92ZU9uY2UoKSkgYnJlYWs7CiAgICAgICAgICBpZiAoaXNXb3JkQ2hhcihsaW5lT2JqLnRleHQuY2hhckF0KGNoKSkpIHNhd1dvcmQgPSB0cnVlOwogICAgICAgICAgZWxzZSBpZiAoc2F3V29yZCkge2lmIChkaXIgPCAwKSB7ZGlyID0gMTsgbW92ZU9uY2UoKTt9IGJyZWFrO30KICAgICAgICAgIGlmIChkaXIgPiAwKSBpZiAoIW1vdmVPbmNlKCkpIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4ge2xpbmU6IGxpbmUsIGNoOiBjaH07CiAgICB9CiAgICBmdW5jdGlvbiBtb3ZlSChkaXIsIHVuaXQpIHsKICAgICAgdmFyIHBvcyA9IGRpciA8IDAgPyBzZWwuZnJvbSA6IHNlbC50bzsKICAgICAgaWYgKHNoaWZ0U2VsZWN0aW5nIHx8IHBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSBwb3MgPSBmaW5kUG9zSChkaXIsIHVuaXQpOwogICAgICBzZXRDdXJzb3IocG9zLmxpbmUsIHBvcy5jaCwgdHJ1ZSk7CiAgICB9CiAgICBmdW5jdGlvbiBkZWxldGVIKGRpciwgdW5pdCkgewogICAgICBpZiAoIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pKSByZXBsYWNlUmFuZ2UoIiIsIHNlbC5mcm9tLCBzZWwudG8pOwogICAgICBlbHNlIGlmIChkaXIgPCAwKSByZXBsYWNlUmFuZ2UoIiIsIGZpbmRQb3NIKGRpciwgdW5pdCksIHNlbC50byk7CiAgICAgIGVsc2UgcmVwbGFjZVJhbmdlKCIiLCBzZWwuZnJvbSwgZmluZFBvc0goZGlyLCB1bml0KSk7CiAgICAgIHVzZXJTZWxDaGFuZ2UgPSB0cnVlOwogICAgfQogICAgdmFyIGdvYWxDb2x1bW4gPSBudWxsOwogICAgZnVuY3Rpb24gbW92ZVYoZGlyLCB1bml0KSB7CiAgICAgIHZhciBkaXN0ID0gMCwgcG9zID0gbG9jYWxDb29yZHMoc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIHRydWUpOwogICAgICBpZiAoZ29hbENvbHVtbiAhPSBudWxsKSBwb3MueCA9IGdvYWxDb2x1bW47CiAgICAgIGlmICh1bml0ID09ICJwYWdlIikgZGlzdCA9IE1hdGgubWluKHNjcm9sbGVyLmNsaWVudEhlaWdodCwgd2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpOwogICAgICBlbHNlIGlmICh1bml0ID09ICJsaW5lIikgZGlzdCA9IHRleHRIZWlnaHQoKTsKICAgICAgdmFyIHRhcmdldCA9IGNvb3Jkc0NoYXIocG9zLngsIHBvcy55ICsgZGlzdCAqIGRpciArIDIpOwogICAgICBpZiAodW5pdCA9PSAicGFnZSIpIHNjcm9sbGVyLnNjcm9sbFRvcCArPSBsb2NhbENvb3Jkcyh0YXJnZXQsIHRydWUpLnkgLSBwb3MueTsKICAgICAgc2V0Q3Vyc29yKHRhcmdldC5saW5lLCB0YXJnZXQuY2gsIHRydWUpOwogICAgICBnb2FsQ29sdW1uID0gcG9zLng7CiAgICB9CgogICAgZnVuY3Rpb24gc2VsZWN0V29yZEF0KHBvcykgewogICAgICB2YXIgbGluZSA9IGdldExpbmUocG9zLmxpbmUpLnRleHQ7CiAgICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOwogICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIGlzV29yZENoYXIobGluZS5jaGFyQXQoc3RhcnQgLSAxKSkpIC0tc3RhcnQ7CiAgICAgIHdoaWxlIChlbmQgPCBsaW5lLmxlbmd0aCAmJiBpc1dvcmRDaGFyKGxpbmUuY2hhckF0KGVuZCkpKSArK2VuZDsKICAgICAgc2V0U2VsZWN0aW9uVXNlcih7bGluZTogcG9zLmxpbmUsIGNoOiBzdGFydH0sIHtsaW5lOiBwb3MubGluZSwgY2g6IGVuZH0pOwogICAgfQogICAgZnVuY3Rpb24gc2VsZWN0TGluZShsaW5lKSB7CiAgICAgIHNldFNlbGVjdGlvblVzZXIoe2xpbmU6IGxpbmUsIGNoOiAwfSwgY2xpcFBvcyh7bGluZTogbGluZSArIDEsIGNoOiAwfSkpOwogICAgfQogICAgZnVuY3Rpb24gaW5kZW50U2VsZWN0ZWQobW9kZSkgewogICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHJldHVybiBpbmRlbnRMaW5lKHNlbC5mcm9tLmxpbmUsIG1vZGUpOwogICAgICB2YXIgZSA9IHNlbC50by5saW5lIC0gKHNlbC50by5jaCA/IDAgOiAxKTsKICAgICAgZm9yICh2YXIgaSA9IHNlbC5mcm9tLmxpbmU7IGkgPD0gZTsgKytpKSBpbmRlbnRMaW5lKGksIG1vZGUpOwogICAgfQoKICAgIGZ1bmN0aW9uIGluZGVudExpbmUobiwgaG93KSB7CiAgICAgIGlmICghaG93KSBob3cgPSAiYWRkIjsKICAgICAgaWYgKGhvdyA9PSAic21hcnQiKSB7CiAgICAgICAgaWYgKCFtb2RlLmluZGVudCkgaG93ID0gInByZXYiOwogICAgICAgIGVsc2UgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUobik7CiAgICAgIH0KCiAgICAgIHZhciBsaW5lID0gZ2V0TGluZShuKSwgY3VyU3BhY2UgPSBsaW5lLmluZGVudGF0aW9uKG9wdGlvbnMudGFiU2l6ZSksCiAgICAgICAgICBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxzKi8pWzBdLCBpbmRlbnRhdGlvbjsKICAgICAgaWYgKGhvdyA9PSAicHJldiIpIHsKICAgICAgICBpZiAobikgaW5kZW50YXRpb24gPSBnZXRMaW5lKG4tMSkuaW5kZW50YXRpb24ob3B0aW9ucy50YWJTaXplKTsKICAgICAgICBlbHNlIGluZGVudGF0aW9uID0gMDsKICAgICAgfQogICAgICBlbHNlIGlmIChob3cgPT0gInNtYXJ0IikgaW5kZW50YXRpb24gPSBtb2RlLmluZGVudChzdGF0ZSwgbGluZS50ZXh0LnNsaWNlKGN1clNwYWNlU3RyaW5nLmxlbmd0aCksIGxpbmUudGV4dCk7CiAgICAgIGVsc2UgaWYgKGhvdyA9PSAiYWRkIikgaW5kZW50YXRpb24gPSBjdXJTcGFjZSArIG9wdGlvbnMuaW5kZW50VW5pdDsKICAgICAgZWxzZSBpZiAoaG93ID09ICJzdWJ0cmFjdCIpIGluZGVudGF0aW9uID0gY3VyU3BhY2UgLSBvcHRpb25zLmluZGVudFVuaXQ7CiAgICAgIGluZGVudGF0aW9uID0gTWF0aC5tYXgoMCwgaW5kZW50YXRpb24pOwogICAgICB2YXIgZGlmZiA9IGluZGVudGF0aW9uIC0gY3VyU3BhY2U7CgogICAgICBpZiAoIWRpZmYpIHsKICAgICAgICBpZiAoc2VsLmZyb20ubGluZSAhPSBuICYmIHNlbC50by5saW5lICE9IG4pIHJldHVybjsKICAgICAgICB2YXIgaW5kZW50U3RyaW5nID0gY3VyU3BhY2VTdHJpbmc7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIGluZGVudFN0cmluZyA9ICIiLCBwb3MgPSAwOwogICAgICAgIGlmIChvcHRpb25zLmluZGVudFdpdGhUYWJzKQogICAgICAgICAgZm9yICh2YXIgaSA9IE1hdGguZmxvb3IoaW5kZW50YXRpb24gLyBvcHRpb25zLnRhYlNpemUpOyBpOyAtLWkpIHtwb3MgKz0gb3B0aW9ucy50YWJTaXplOyBpbmRlbnRTdHJpbmcgKz0gIlx0Ijt9CiAgICAgICAgd2hpbGUgKHBvcyA8IGluZGVudGF0aW9uKSB7Kytwb3M7IGluZGVudFN0cmluZyArPSAiICI7fQogICAgICB9CgogICAgICByZXBsYWNlUmFuZ2UoaW5kZW50U3RyaW5nLCB7bGluZTogbiwgY2g6IDB9LCB7bGluZTogbiwgY2g6IGN1clNwYWNlU3RyaW5nLmxlbmd0aH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGxvYWRNb2RlKCkgewogICAgICBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKG9wdGlvbnMsIG9wdGlvbnMubW9kZSk7CiAgICAgIGRvYy5pdGVyKDAsIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7IGxpbmUuc3RhdGVBZnRlciA9IG51bGw7IH0pOwogICAgICB3b3JrID0gWzBdOwogICAgICBzdGFydFdvcmtlcigpOwogICAgfQogICAgZnVuY3Rpb24gZ3V0dGVyQ2hhbmdlZCgpIHsKICAgICAgdmFyIHZpc2libGUgPSBvcHRpb25zLmd1dHRlciB8fCBvcHRpb25zLmxpbmVOdW1iZXJzOwogICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9IHZpc2libGUgPyAiIiA6ICJub25lIjsKICAgICAgaWYgKHZpc2libGUpIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgICAgZWxzZSBsaW5lRGl2LnBhcmVudE5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IDA7CiAgICB9CiAgICBmdW5jdGlvbiB3cmFwcGluZ0NoYW5nZWQoZnJvbSwgdG8pIHsKICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgd3JhcHBlci5jbGFzc05hbWUgKz0gIiBDb2RlTWlycm9yLXdyYXAiOwogICAgICAgIHZhciBwZXJMaW5lID0gc2Nyb2xsZXIuY2xpZW50V2lkdGggLyBjaGFyV2lkdGgoKSAtIDM7CiAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIGlmIChsaW5lLmhpZGRlbikgcmV0dXJuOwogICAgICAgICAgdmFyIGd1ZXNzID0gTWF0aC5jZWlsKGxpbmUudGV4dC5sZW5ndGggLyBwZXJMaW5lKSB8fCAxOwogICAgICAgICAgaWYgKGd1ZXNzICE9IDEpIHVwZGF0ZUxpbmVIZWlnaHQobGluZSwgZ3Vlc3MpOwogICAgICAgIH0pOwogICAgICAgIGxpbmVTcGFjZS5zdHlsZS53aWR0aCA9IGNvZGUuc3R5bGUud2lkdGggPSAiIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9IHdyYXBwZXIuY2xhc3NOYW1lLnJlcGxhY2UoIiBDb2RlTWlycm9yLXdyYXAiLCAiIik7CiAgICAgICAgbWF4V2lkdGggPSBudWxsOyBtYXhMaW5lID0gIiI7CiAgICAgICAgZG9jLml0ZXIoMCwgZG9jLnNpemUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICAgIGlmIChsaW5lLmhlaWdodCAhPSAxICYmICFsaW5lLmhpZGRlbikgdXBkYXRlTGluZUhlaWdodChsaW5lLCAxKTsKICAgICAgICAgIGlmIChsaW5lLnRleHQubGVuZ3RoID4gbWF4TGluZS5sZW5ndGgpIG1heExpbmUgPSBsaW5lLnRleHQ7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiAwLCB0bzogZG9jLnNpemV9KTsKICAgIH0KICAgIGZ1bmN0aW9uIG1ha2VUYWIoY29sKSB7CiAgICAgIHZhciB3ID0gb3B0aW9ucy50YWJTaXplIC0gY29sICUgb3B0aW9ucy50YWJTaXplLCBjYWNoZWQgPSB0YWJDYWNoZVt3XTsKICAgICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDsKICAgICAgZm9yICh2YXIgc3RyID0gJzxzcGFuIGNsYXNzPSJjbS10YWIiPicsIGkgPSAwOyBpIDwgdzsgKytpKSBzdHIgKz0gIiAiOwogICAgICByZXR1cm4gKHRhYkNhY2hlW3ddID0ge2h0bWw6IHN0ciArICI8L3NwYW4+Iiwgd2lkdGg6IHd9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHRoZW1lQ2hhbmdlZCgpIHsKICAgICAgc2Nyb2xsZXIuY2xhc3NOYW1lID0gc2Nyb2xsZXIuY2xhc3NOYW1lLnJlcGxhY2UoL1xzKmNtLXMtXHcrL2csICIiKSArCiAgICAgICAgb3B0aW9ucy50aGVtZS5yZXBsYWNlKC8oXnxccylccyovZywgIiBjbS1zLSIpOwogICAgfQoKICAgIGZ1bmN0aW9uIFRleHRNYXJrZXIoKSB7IHRoaXMuc2V0ID0gW107IH0KICAgIFRleHRNYXJrZXIucHJvdG90eXBlLmNsZWFyID0gb3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWluID0gSW5maW5pdHksIG1heCA9IC1JbmZpbml0eTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSB0aGlzLnNldC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgbGluZSA9IHRoaXMuc2V0W2ldLCBtayA9IGxpbmUubWFya2VkOwogICAgICAgIGlmICghbWsgfHwgIWxpbmUucGFyZW50KSBjb250aW51ZTsKICAgICAgICB2YXIgbGluZU4gPSBsaW5lTm8obGluZSk7CiAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBsaW5lTik7IG1heCA9IE1hdGgubWF4KG1heCwgbGluZU4pOwogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbWsubGVuZ3RoOyArK2opCiAgICAgICAgICBpZiAobWtbal0ubWFya2VyID09IHRoaXMpIG1rLnNwbGljZShqLS0sIDEpOwogICAgICB9CiAgICAgIGlmIChtaW4gIT0gSW5maW5pdHkpCiAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBtaW4sIHRvOiBtYXggKyAxfSk7CiAgICB9KTsKICAgIFRleHRNYXJrZXIucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGZyb20sIHRvOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuc2V0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5zZXRbaV0sIG1rID0gbGluZS5tYXJrZWQ7CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtay5sZW5ndGg7ICsraikgewogICAgICAgICAgdmFyIG1hcmsgPSBta1tqXTsKICAgICAgICAgIGlmIChtYXJrLm1hcmtlciA9PSB0aGlzKSB7CiAgICAgICAgICAgIGlmIChtYXJrLmZyb20gIT0gbnVsbCB8fCBtYXJrLnRvICE9IG51bGwpIHsKICAgICAgICAgICAgICB2YXIgZm91bmQgPSBsaW5lTm8obGluZSk7CiAgICAgICAgICAgICAgaWYgKGZvdW5kICE9IG51bGwpIHsKICAgICAgICAgICAgICAgIGlmIChtYXJrLmZyb20gIT0gbnVsbCkgZnJvbSA9IHtsaW5lOiBmb3VuZCwgY2g6IG1hcmsuZnJvbX07CiAgICAgICAgICAgICAgICBpZiAobWFyay50byAhPSBudWxsKSB0byA9IHtsaW5lOiBmb3VuZCwgY2g6IG1hcmsudG99OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4ge2Zyb206IGZyb20sIHRvOiB0b307CiAgICB9OwoKICAgIGZ1bmN0aW9uIG1hcmtUZXh0KGZyb20sIHRvLCBjbGFzc05hbWUpIHsKICAgICAgZnJvbSA9IGNsaXBQb3MoZnJvbSk7IHRvID0gY2xpcFBvcyh0byk7CiAgICAgIHZhciB0bSA9IG5ldyBUZXh0TWFya2VyKCk7CiAgICAgIGlmICghcG9zTGVzcyhmcm9tLCB0bykpIHJldHVybiB0bTsKICAgICAgZnVuY3Rpb24gYWRkKGxpbmUsIGZyb20sIHRvLCBjbGFzc05hbWUpIHsKICAgICAgICBnZXRMaW5lKGxpbmUpLmFkZE1hcmsobmV3IE1hcmtlZFRleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSwgdG0pKTsKICAgICAgfQogICAgICBpZiAoZnJvbS5saW5lID09IHRvLmxpbmUpIGFkZChmcm9tLmxpbmUsIGZyb20uY2gsIHRvLmNoLCBjbGFzc05hbWUpOwogICAgICBlbHNlIHsKICAgICAgICBhZGQoZnJvbS5saW5lLCBmcm9tLmNoLCBudWxsLCBjbGFzc05hbWUpOwogICAgICAgIGZvciAodmFyIGkgPSBmcm9tLmxpbmUgKyAxLCBlID0gdG8ubGluZTsgaSA8IGU7ICsraSkKICAgICAgICAgIGFkZChpLCBudWxsLCBudWxsLCBjbGFzc05hbWUpOwogICAgICAgIGFkZCh0by5saW5lLCBudWxsLCB0by5jaCwgY2xhc3NOYW1lKTsKICAgICAgfQogICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IGZyb20ubGluZSwgdG86IHRvLmxpbmUgKyAxfSk7CiAgICAgIHJldHVybiB0bTsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRCb29rbWFyayhwb3MpIHsKICAgICAgcG9zID0gY2xpcFBvcyhwb3MpOwogICAgICB2YXIgYm0gPSBuZXcgQm9va21hcmsocG9zLmNoKTsKICAgICAgZ2V0TGluZShwb3MubGluZSkuYWRkTWFyayhibSk7CiAgICAgIHJldHVybiBibTsKICAgIH0KCiAgICBmdW5jdGlvbiBmaW5kTWFya3NBdChwb3MpIHsKICAgICAgcG9zID0gY2xpcFBvcyhwb3MpOwogICAgICB2YXIgbWFya2VycyA9IFtdLCBtYXJrZWQgPSBnZXRMaW5lKHBvcy5saW5lKS5tYXJrZWQ7CiAgICAgIGlmICghbWFya2VkKSByZXR1cm4gbWFya2VyczsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBtYXJrZWQubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIG0gPSBtYXJrZWRbaV07CiAgICAgICAgaWYgKChtLmZyb20gPT0gbnVsbCB8fCBtLmZyb20gPD0gcG9zLmNoKSAmJgogICAgICAgICAgICAobS50byA9PSBudWxsIHx8IG0udG8gPj0gcG9zLmNoKSkKICAgICAgICAgIG1hcmtlcnMucHVzaChtLm1hcmtlciB8fCBtKTsKICAgICAgfQogICAgICByZXR1cm4gbWFya2VyczsKICAgIH0KCiAgICBmdW5jdGlvbiBhZGRHdXR0ZXJNYXJrZXIobGluZSwgdGV4dCwgY2xhc3NOYW1lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoY2xpcExpbmUobGluZSkpOwogICAgICBsaW5lLmd1dHRlck1hcmtlciA9IHt0ZXh0OiB0ZXh0LCBzdHlsZTogY2xhc3NOYW1lfTsKICAgICAgZ3V0dGVyRGlydHkgPSB0cnVlOwogICAgICByZXR1cm4gbGluZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlbW92ZUd1dHRlck1hcmtlcihsaW5lKSB7CiAgICAgIGlmICh0eXBlb2YgbGluZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoY2xpcExpbmUobGluZSkpOwogICAgICBsaW5lLmd1dHRlck1hcmtlciA9IG51bGw7CiAgICAgIGd1dHRlckRpcnR5ID0gdHJ1ZTsKICAgIH0KCiAgICBmdW5jdGlvbiBjaGFuZ2VMaW5lKGhhbmRsZSwgb3ApIHsKICAgICAgdmFyIG5vID0gaGFuZGxlLCBsaW5lID0gaGFuZGxlOwogICAgICBpZiAodHlwZW9mIGhhbmRsZSA9PSAibnVtYmVyIikgbGluZSA9IGdldExpbmUoY2xpcExpbmUoaGFuZGxlKSk7CiAgICAgIGVsc2Ugbm8gPSBsaW5lTm8oaGFuZGxlKTsKICAgICAgaWYgKG5vID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBpZiAob3AobGluZSwgbm8pKSBjaGFuZ2VzLnB1c2goe2Zyb206IG5vLCB0bzogbm8gKyAxfSk7CiAgICAgIGVsc2UgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiBsaW5lOwogICAgfQogICAgZnVuY3Rpb24gc2V0TGluZUNsYXNzKGhhbmRsZSwgY2xhc3NOYW1lLCBiZ0NsYXNzTmFtZSkgewogICAgICByZXR1cm4gY2hhbmdlTGluZShoYW5kbGUsIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBpZiAobGluZS5jbGFzc05hbWUgIT0gY2xhc3NOYW1lIHx8IGxpbmUuYmdDbGFzc05hbWUgIT0gYmdDbGFzc05hbWUpIHsKICAgICAgICAgIGxpbmUuY2xhc3NOYW1lID0gY2xhc3NOYW1lOwogICAgICAgICAgbGluZS5iZ0NsYXNzTmFtZSA9IGJnQ2xhc3NOYW1lOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldExpbmVIaWRkZW4oaGFuZGxlLCBoaWRkZW4pIHsKICAgICAgcmV0dXJuIGNoYW5nZUxpbmUoaGFuZGxlLCBmdW5jdGlvbihsaW5lLCBubykgewogICAgICAgIGlmIChsaW5lLmhpZGRlbiAhPSBoaWRkZW4pIHsKICAgICAgICAgIGxpbmUuaGlkZGVuID0gaGlkZGVuOwogICAgICAgICAgdXBkYXRlTGluZUhlaWdodChsaW5lLCBoaWRkZW4gPyAwIDogMSk7CiAgICAgICAgICB2YXIgZmxpbmUgPSBzZWwuZnJvbS5saW5lLCB0bGluZSA9IHNlbC50by5saW5lOwogICAgICAgICAgaWYgKGhpZGRlbiAmJiAoZmxpbmUgPT0gbm8gfHwgdGxpbmUgPT0gbm8pKSB7CiAgICAgICAgICAgIHZhciBmcm9tID0gZmxpbmUgPT0gbm8gPyBza2lwSGlkZGVuKHtsaW5lOiBmbGluZSwgY2g6IDB9LCBmbGluZSwgMCkgOiBzZWwuZnJvbTsKICAgICAgICAgICAgdmFyIHRvID0gdGxpbmUgPT0gbm8gPyBza2lwSGlkZGVuKHtsaW5lOiB0bGluZSwgY2g6IDB9LCB0bGluZSwgMCkgOiBzZWwudG87CiAgICAgICAgICAgIC8vIENhbid0IGhpZGUgdGhlIGxhc3QgdmlzaWJsZSBsaW5lLCB3ZSdkIGhhdmUgbm8gcGxhY2UgdG8gcHV0IHRoZSBjdXJzb3IKICAgICAgICAgICAgaWYgKCF0bykgcmV0dXJuOwogICAgICAgICAgICBzZXRTZWxlY3Rpb24oZnJvbSwgdG8pOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIChndXR0ZXJEaXJ0eSA9IHRydWUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgZnVuY3Rpb24gbGluZUluZm8obGluZSkgewogICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKICAgICAgICBpZiAoIWlzTGluZShsaW5lKSkgcmV0dXJuIG51bGw7CiAgICAgICAgdmFyIG4gPSBsaW5lOwogICAgICAgIGxpbmUgPSBnZXRMaW5lKGxpbmUpOwogICAgICAgIGlmICghbGluZSkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIG4gPSBsaW5lTm8obGluZSk7CiAgICAgICAgaWYgKG4gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgdmFyIG1hcmtlciA9IGxpbmUuZ3V0dGVyTWFya2VyOwogICAgICByZXR1cm4ge2xpbmU6IG4sIGhhbmRsZTogbGluZSwgdGV4dDogbGluZS50ZXh0LCBtYXJrZXJUZXh0OiBtYXJrZXIgJiYgbWFya2VyLnRleHQsCiAgICAgICAgICAgICAgbWFya2VyQ2xhc3M6IG1hcmtlciAmJiBtYXJrZXIuc3R5bGUsIGxpbmVDbGFzczogbGluZS5jbGFzc05hbWUsIGJnQ2xhc3M6IGxpbmUuYmdDbGFzc05hbWV9OwogICAgfQoKICAgIGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cikgewogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPjxzcGFuPng8L3NwYW4+PC9wcmU+IjsKICAgICAgbWVhc3VyZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBzdHI7CiAgICAgIHJldHVybiBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCB8fCAxMDsKICAgIH0KICAgIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGdvIGZyb20gcGl4ZWwgcG9zaXRpb25zIHRvIGNoYXJhY3RlcgogICAgLy8gcG9zaXRpb25zLCB0YWtpbmcgdmFyeWluZyBjaGFyYWN0ZXIgd2lkdGhzIGludG8gYWNjb3VudC4KICAgIGZ1bmN0aW9uIGNoYXJGcm9tWChsaW5lLCB4KSB7CiAgICAgIGlmICh4IDw9IDApIHJldHVybiAwOwogICAgICB2YXIgbGluZU9iaiA9IGdldExpbmUobGluZSksIHRleHQgPSBsaW5lT2JqLnRleHQ7CiAgICAgIGZ1bmN0aW9uIGdldFgobGVuKSB7CiAgICAgICAgbWVhc3VyZS5pbm5lckhUTUwgPSAiPHByZT48c3Bhbj4iICsgbGluZU9iai5nZXRIVE1MKG1ha2VUYWIsIGxlbikgKyAiPC9zcGFuPjwvcHJlPiI7CiAgICAgICAgcmV0dXJuIG1lYXN1cmUuZmlyc3RDaGlsZC5maXJzdENoaWxkLm9mZnNldFdpZHRoOwogICAgICB9CiAgICAgIHZhciBmcm9tID0gMCwgZnJvbVggPSAwLCB0byA9IHRleHQubGVuZ3RoLCB0b1g7CiAgICAgIC8vIEd1ZXNzIGEgc3VpdGFibGUgdXBwZXIgYm91bmQgZm9yIG91ciBzZWFyY2guCiAgICAgIHZhciBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWlsKHggLyBjaGFyV2lkdGgoKSkpOwogICAgICBmb3IgKDs7KSB7CiAgICAgICAgdmFyIGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgICAgaWYgKGVzdFggPD0geCAmJiBlc3RpbWF0ZWQgPCB0bykgZXN0aW1hdGVkID0gTWF0aC5taW4odG8sIE1hdGguY2VpbChlc3RpbWF0ZWQgKiAxLjIpKTsKICAgICAgICBlbHNlIHt0b1ggPSBlc3RYOyB0byA9IGVzdGltYXRlZDsgYnJlYWs7fQogICAgICB9CiAgICAgIGlmICh4ID4gdG9YKSByZXR1cm4gdG87CiAgICAgIC8vIFRyeSB0byBndWVzcyBhIHN1aXRhYmxlIGxvd2VyIGJvdW5kIGFzIHdlbGwuCiAgICAgIGVzdGltYXRlZCA9IE1hdGguZmxvb3IodG8gKiAwLjgpOyBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwogICAgICBpZiAoZXN0WCA8IHgpIHtmcm9tID0gZXN0aW1hdGVkOyBmcm9tWCA9IGVzdFg7fQogICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggYmV0d2VlbiB0aGVzZSBib3VuZHMuCiAgICAgIGZvciAoOzspIHsKICAgICAgICBpZiAodG8gLSBmcm9tIDw9IDEpIHJldHVybiAodG9YIC0geCA+IHggLSBmcm9tWCkgPyBmcm9tIDogdG87CiAgICAgICAgdmFyIG1pZGRsZSA9IE1hdGguY2VpbCgoZnJvbSArIHRvKSAvIDIpLCBtaWRkbGVYID0gZ2V0WChtaWRkbGUpOwogICAgICAgIGlmIChtaWRkbGVYID4geCkge3RvID0gbWlkZGxlOyB0b1ggPSBtaWRkbGVYO30KICAgICAgICBlbHNlIHtmcm9tID0gbWlkZGxlOyBmcm9tWCA9IG1pZGRsZVg7fQogICAgICB9CiAgICB9CgogICAgdmFyIHRlbXBJZCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDB4ZmZmZmZmKS50b1N0cmluZygxNik7CiAgICBmdW5jdGlvbiBtZWFzdXJlTGluZShsaW5lLCBjaCkgewogICAgICBpZiAoY2ggPT0gMCkgcmV0dXJuIHt0b3A6IDAsIGxlZnQ6IDB9OwogICAgICB2YXIgZXh0cmEgPSAiIjsKICAgICAgLy8gSW5jbHVkZSBleHRyYSB0ZXh0IGF0IHRoZSBlbmQgdG8gbWFrZSBzdXJlIHRoZSBtZWFzdXJlZCBsaW5lIGlzIHdyYXBwZWQgaW4gdGhlIHJpZ2h0IHdheS4KICAgICAgaWYgKG9wdGlvbnMubGluZVdyYXBwaW5nKSB7CiAgICAgICAgdmFyIGVuZCA9IGxpbmUudGV4dC5pbmRleE9mKCIgIiwgY2ggKyA2KTsKICAgICAgICBleHRyYSA9IGh0bWxFc2NhcGUobGluZS50ZXh0LnNsaWNlKGNoICsgMSwgZW5kIDwgMCA/IGxpbmUudGV4dC5sZW5ndGggOiBlbmQgKyAoaWUgPyA1IDogMCkpKTsKICAgICAgfQogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPiIgKyBsaW5lLmdldEhUTUwobWFrZVRhYiwgY2gpICsKICAgICAgICAnPHNwYW4gaWQ9IkNvZGVNaXJyb3ItdGVtcC0nICsgdGVtcElkICsgJyI+JyArIGh0bWxFc2NhcGUobGluZS50ZXh0LmNoYXJBdChjaCkgfHwgIiAiKSArICI8L3NwYW4+IiArCiAgICAgICAgZXh0cmEgKyAiPC9wcmU+IjsKICAgICAgdmFyIGVsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJDb2RlTWlycm9yLXRlbXAtIiArIHRlbXBJZCk7CiAgICAgIHZhciB0b3AgPSBlbHQub2Zmc2V0VG9wLCBsZWZ0ID0gZWx0Lm9mZnNldExlZnQ7CiAgICAgIC8vIE9sZGVyIElFcyByZXBvcnQgemVybyBvZmZzZXRzIGZvciBzcGFucyBkaXJlY3RseSBhZnRlciBhIHdyYXAKICAgICAgaWYgKGllICYmIHRvcCA9PSAwICYmIGxlZnQgPT0gMCkgewogICAgICAgIHZhciBiYWNrdXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgYmFja3VwLmlubmVySFRNTCA9ICJ4IjsKICAgICAgICBlbHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYmFja3VwLCBlbHQubmV4dFNpYmxpbmcpOwogICAgICAgIHRvcCA9IGJhY2t1cC5vZmZzZXRUb3A7CiAgICAgIH0KICAgICAgcmV0dXJuIHt0b3A6IHRvcCwgbGVmdDogbGVmdH07CiAgICB9CiAgICBmdW5jdGlvbiBsb2NhbENvb3Jkcyhwb3MsIGluTGluZVdyYXApIHsKICAgICAgdmFyIHgsIGxoID0gdGV4dEhlaWdodCgpLCB5ID0gbGggKiAoaGVpZ2h0QXRMaW5lKGRvYywgcG9zLmxpbmUpIC0gKGluTGluZVdyYXAgPyBkaXNwbGF5T2Zmc2V0IDogMCkpOwogICAgICBpZiAocG9zLmNoID09IDApIHggPSAwOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgc3AgPSBtZWFzdXJlTGluZShnZXRMaW5lKHBvcy5saW5lKSwgcG9zLmNoKTsKICAgICAgICB4ID0gc3AubGVmdDsKICAgICAgICBpZiAob3B0aW9ucy5saW5lV3JhcHBpbmcpIHkgKz0gTWF0aC5tYXgoMCwgc3AudG9wKTsKICAgICAgfQogICAgICByZXR1cm4ge3g6IHgsIHk6IHksIHlCb3Q6IHkgKyBsaH07CiAgICB9CiAgICAvLyBDb29yZHMgbXVzdCBiZSBsaW5lU3BhY2UtbG9jYWwKICAgIGZ1bmN0aW9uIGNvb3Jkc0NoYXIoeCwgeSkgewogICAgICBpZiAoeSA8IDApIHkgPSAwOwogICAgICB2YXIgdGggPSB0ZXh0SGVpZ2h0KCksIGN3ID0gY2hhcldpZHRoKCksIGhlaWdodFBvcyA9IGRpc3BsYXlPZmZzZXQgKyBNYXRoLmZsb29yKHkgLyB0aCk7CiAgICAgIHZhciBsaW5lTm8gPSBsaW5lQXRIZWlnaHQoZG9jLCBoZWlnaHRQb3MpOwogICAgICBpZiAobGluZU5vID49IGRvYy5zaXplKSByZXR1cm4ge2xpbmU6IGRvYy5zaXplIC0gMSwgY2g6IGdldExpbmUoZG9jLnNpemUgLSAxKS50ZXh0Lmxlbmd0aH07CiAgICAgIHZhciBsaW5lT2JqID0gZ2V0TGluZShsaW5lTm8pLCB0ZXh0ID0gbGluZU9iai50ZXh0OwogICAgICB2YXIgdHcgPSBvcHRpb25zLmxpbmVXcmFwcGluZywgaW5uZXJPZmYgPSB0dyA/IGhlaWdodFBvcyAtIGhlaWdodEF0TGluZShkb2MsIGxpbmVObykgOiAwOwogICAgICBpZiAoeCA8PSAwICYmIGlubmVyT2ZmID09IDApIHJldHVybiB7bGluZTogbGluZU5vLCBjaDogMH07CiAgICAgIGZ1bmN0aW9uIGdldFgobGVuKSB7CiAgICAgICAgdmFyIHNwID0gbWVhc3VyZUxpbmUobGluZU9iaiwgbGVuKTsKICAgICAgICBpZiAodHcpIHsKICAgICAgICAgIHZhciBvZmYgPSBNYXRoLnJvdW5kKHNwLnRvcCAvIHRoKTsKICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBzcC5sZWZ0ICsgKG9mZiAtIGlubmVyT2ZmKSAqIHNjcm9sbGVyLmNsaWVudFdpZHRoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHNwLmxlZnQ7CiAgICAgIH0KICAgICAgdmFyIGZyb20gPSAwLCBmcm9tWCA9IDAsIHRvID0gdGV4dC5sZW5ndGgsIHRvWDsKICAgICAgLy8gR3Vlc3MgYSBzdWl0YWJsZSB1cHBlciBib3VuZCBmb3Igb3VyIHNlYXJjaC4KICAgICAgdmFyIGVzdGltYXRlZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoKHggKyBpbm5lck9mZiAqIHNjcm9sbGVyLmNsaWVudFdpZHRoICogLjkpIC8gY3cpKTsKICAgICAgZm9yICg7OykgewogICAgICAgIHZhciBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwogICAgICAgIGlmIChlc3RYIDw9IHggJiYgZXN0aW1hdGVkIDwgdG8pIGVzdGltYXRlZCA9IE1hdGgubWluKHRvLCBNYXRoLmNlaWwoZXN0aW1hdGVkICogMS4yKSk7CiAgICAgICAgZWxzZSB7dG9YID0gZXN0WDsgdG8gPSBlc3RpbWF0ZWQ7IGJyZWFrO30KICAgICAgfQogICAgICBpZiAoeCA+IHRvWCkgcmV0dXJuIHtsaW5lOiBsaW5lTm8sIGNoOiB0b307CiAgICAgIC8vIFRyeSB0byBndWVzcyBhIHN1aXRhYmxlIGxvd2VyIGJvdW5kIGFzIHdlbGwuCiAgICAgIGVzdGltYXRlZCA9IE1hdGguZmxvb3IodG8gKiAwLjgpOyBlc3RYID0gZ2V0WChlc3RpbWF0ZWQpOwogICAgICBpZiAoZXN0WCA8IHgpIHtmcm9tID0gZXN0aW1hdGVkOyBmcm9tWCA9IGVzdFg7fQogICAgICAvLyBEbyBhIGJpbmFyeSBzZWFyY2ggYmV0d2VlbiB0aGVzZSBib3VuZHMuCiAgICAgIGZvciAoOzspIHsKICAgICAgICBpZiAodG8gLSBmcm9tIDw9IDEpIHJldHVybiB7bGluZTogbGluZU5vLCBjaDogKHRvWCAtIHggPiB4IC0gZnJvbVgpID8gZnJvbSA6IHRvfTsKICAgICAgICB2YXIgbWlkZGxlID0gTWF0aC5jZWlsKChmcm9tICsgdG8pIC8gMiksIG1pZGRsZVggPSBnZXRYKG1pZGRsZSk7CiAgICAgICAgaWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7fQogICAgICAgIGVsc2Uge2Zyb20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDt9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHBhZ2VDb29yZHMocG9zKSB7CiAgICAgIHZhciBsb2NhbCA9IGxvY2FsQ29vcmRzKHBvcywgdHJ1ZSksIG9mZiA9IGVsdE9mZnNldChsaW5lU3BhY2UpOwogICAgICByZXR1cm4ge3g6IG9mZi5sZWZ0ICsgbG9jYWwueCwgeTogb2ZmLnRvcCArIGxvY2FsLnksIHlCb3Q6IG9mZi50b3AgKyBsb2NhbC55Qm90fTsKICAgIH0KCiAgICB2YXIgY2FjaGVkSGVpZ2h0LCBjYWNoZWRIZWlnaHRGb3IsIG1lYXN1cmVUZXh0OwogICAgZnVuY3Rpb24gdGV4dEhlaWdodCgpIHsKICAgICAgaWYgKG1lYXN1cmVUZXh0ID09IG51bGwpIHsKICAgICAgICBtZWFzdXJlVGV4dCA9ICI8cHJlPiI7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OTsgKytpKSBtZWFzdXJlVGV4dCArPSAieDxici8+IjsKICAgICAgICBtZWFzdXJlVGV4dCArPSAieDwvcHJlPiI7CiAgICAgIH0KICAgICAgdmFyIG9mZnNldEhlaWdodCA9IGxpbmVEaXYuY2xpZW50SGVpZ2h0OwogICAgICBpZiAob2Zmc2V0SGVpZ2h0ID09IGNhY2hlZEhlaWdodEZvcikgcmV0dXJuIGNhY2hlZEhlaWdodDsKICAgICAgY2FjaGVkSGVpZ2h0Rm9yID0gb2Zmc2V0SGVpZ2h0OwogICAgICBtZWFzdXJlLmlubmVySFRNTCA9IG1lYXN1cmVUZXh0OwogICAgICBjYWNoZWRIZWlnaHQgPSBtZWFzdXJlLmZpcnN0Q2hpbGQub2Zmc2V0SGVpZ2h0IC8gNTAgfHwgMTsKICAgICAgbWVhc3VyZS5pbm5lckhUTUwgPSAiIjsKICAgICAgcmV0dXJuIGNhY2hlZEhlaWdodDsKICAgIH0KICAgIHZhciBjYWNoZWRXaWR0aCwgY2FjaGVkV2lkdGhGb3IgPSAwOwogICAgZnVuY3Rpb24gY2hhcldpZHRoKCkgewogICAgICBpZiAoc2Nyb2xsZXIuY2xpZW50V2lkdGggPT0gY2FjaGVkV2lkdGhGb3IpIHJldHVybiBjYWNoZWRXaWR0aDsKICAgICAgY2FjaGVkV2lkdGhGb3IgPSBzY3JvbGxlci5jbGllbnRXaWR0aDsKICAgICAgcmV0dXJuIChjYWNoZWRXaWR0aCA9IHN0cmluZ1dpZHRoKCJ4IikpOwogICAgfQogICAgZnVuY3Rpb24gcGFkZGluZ1RvcCgpIHtyZXR1cm4gbGluZVNwYWNlLm9mZnNldFRvcDt9CiAgICBmdW5jdGlvbiBwYWRkaW5nTGVmdCgpIHtyZXR1cm4gbGluZVNwYWNlLm9mZnNldExlZnQ7fQoKICAgIGZ1bmN0aW9uIHBvc0Zyb21Nb3VzZShlLCBsaWJlcmFsKSB7CiAgICAgIHZhciBvZmZXID0gZWx0T2Zmc2V0KHNjcm9sbGVyLCB0cnVlKSwgeCwgeTsKICAgICAgLy8gRmFpbHMgdW5wcmVkaWN0YWJseSBvbiBJRVs2N10gd2hlbiBtb3VzZSBpcyBkcmFnZ2VkIGFyb3VuZCBxdWlja2x5LgogICAgICB0cnkgeyB4ID0gZS5jbGllbnRYOyB5ID0gZS5jbGllbnRZOyB9IGNhdGNoIChlKSB7IHJldHVybiBudWxsOyB9CiAgICAgIC8vIFRoaXMgaXMgYSBtZXNzIG9mIGEgaGV1cmlzdGljIHRvIHRyeSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgYQogICAgICAvLyBzY3JvbGwtYmFyIHdhcyBjbGlja2VkIG9yIG5vdCwgYW5kIHRvIHJldHVybiBudWxsIGlmIG9uZSB3YXMKICAgICAgLy8gKGFuZCAhbGliZXJhbCkuCiAgICAgIGlmICghbGliZXJhbCAmJiAoeCAtIG9mZlcubGVmdCA+IHNjcm9sbGVyLmNsaWVudFdpZHRoIHx8IHkgLSBvZmZXLnRvcCA+IHNjcm9sbGVyLmNsaWVudEhlaWdodCkpCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIHZhciBvZmZMID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSwgdHJ1ZSk7CiAgICAgIHJldHVybiBjb29yZHNDaGFyKHggLSBvZmZMLmxlZnQsIHkgLSBvZmZMLnRvcCk7CiAgICB9CiAgICBmdW5jdGlvbiBvbkNvbnRleHRNZW51KGUpIHsKICAgICAgdmFyIHBvcyA9IHBvc0Zyb21Nb3VzZShlKSwgc2Nyb2xsUG9zID0gc2Nyb2xsZXIuc2Nyb2xsVG9wOwogICAgICBpZiAoIXBvcyB8fCB3aW5kb3cub3BlcmEpIHJldHVybjsgLy8gT3BlcmEgaXMgZGlmZmljdWx0LgogICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykgfHwgcG9zTGVzcyhwb3MsIHNlbC5mcm9tKSB8fCAhcG9zTGVzcyhwb3MsIHNlbC50bykpCiAgICAgICAgb3BlcmF0aW9uKHNldEN1cnNvcikocG9zLmxpbmUsIHBvcy5jaCk7CgogICAgICB2YXIgb2xkQ1NTID0gaW5wdXQuc3R5bGUuY3NzVGV4dDsKICAgICAgaW5wdXREaXYuc3R5bGUucG9zaXRpb24gPSAiYWJzb2x1dGUiOwogICAgICBpbnB1dC5zdHlsZS5jc3NUZXh0ID0gInBvc2l0aW9uOiBmaXhlZDsgd2lkdGg6IDMwcHg7IGhlaWdodDogMzBweDsgdG9wOiAiICsgKGUuY2xpZW50WSAtIDUpICsKICAgICAgICAicHg7IGxlZnQ6ICIgKyAoZS5jbGllbnRYIC0gNSkgKyAicHg7IHotaW5kZXg6IDEwMDA7IGJhY2tncm91bmQ6IHdoaXRlOyAiICsKICAgICAgICAiYm9yZGVyLXdpZHRoOiAwOyBvdXRsaW5lOiBub25lOyBvdmVyZmxvdzogaGlkZGVuOyBvcGFjaXR5OiAuMDU7IGZpbHRlcjogYWxwaGEob3BhY2l0eT01KTsiOwogICAgICBsZWF2ZUlucHV0QWxvbmUgPSB0cnVlOwogICAgICB2YXIgdmFsID0gaW5wdXQudmFsdWUgPSBnZXRTZWxlY3Rpb24oKTsKICAgICAgZm9jdXNJbnB1dCgpOwogICAgICBzZWxlY3RJbnB1dChpbnB1dCk7CiAgICAgIGZ1bmN0aW9uIHJlaGlkZSgpIHsKICAgICAgICB2YXIgbmV3VmFsID0gc3BsaXRMaW5lcyhpbnB1dC52YWx1ZSkuam9pbigiXG4iKTsKICAgICAgICBpZiAobmV3VmFsICE9IHZhbCkgb3BlcmF0aW9uKHJlcGxhY2VTZWxlY3Rpb24pKG5ld1ZhbCwgImVuZCIpOwogICAgICAgIGlucHV0RGl2LnN0eWxlLnBvc2l0aW9uID0gInJlbGF0aXZlIjsKICAgICAgICBpbnB1dC5zdHlsZS5jc3NUZXh0ID0gb2xkQ1NTOwogICAgICAgIGlmIChpZV9sdDkpIHNjcm9sbGVyLnNjcm9sbFRvcCA9IHNjcm9sbFBvczsKICAgICAgICBsZWF2ZUlucHV0QWxvbmUgPSBmYWxzZTsKICAgICAgICByZXNldElucHV0KHRydWUpOwogICAgICAgIHNsb3dQb2xsKCk7CiAgICAgIH0KCiAgICAgIGlmIChnZWNrbykgewogICAgICAgIGVfc3RvcChlKTsKICAgICAgICB2YXIgbW91c2V1cCA9IGNvbm5lY3Qod2luZG93LCAibW91c2V1cCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgbW91c2V1cCgpOwogICAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTsKICAgICAgICB9LCB0cnVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgNTApOwogICAgICB9CiAgICB9CgogICAgLy8gQ3Vyc29yLWJsaW5raW5nCiAgICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoKSB7CiAgICAgIGNsZWFySW50ZXJ2YWwoYmxpbmtlcik7CiAgICAgIHZhciBvbiA9IHRydWU7CiAgICAgIGN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gIiI7CiAgICAgIGJsaW5rZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICBjdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyAiIiA6ICJoaWRkZW4iOwogICAgICB9LCA2NTApOwogICAgfQoKICAgIHZhciBtYXRjaGluZyA9IHsiKCI6ICIpPiIsICIpIjogIig8IiwgIlsiOiAiXT4iLCAiXSI6ICJbPCIsICJ7IjogIn0+IiwgIn0iOiAiezwifTsKICAgIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHMoYXV0b2NsZWFyKSB7CiAgICAgIHZhciBoZWFkID0gc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIGxpbmUgPSBnZXRMaW5lKGhlYWQubGluZSksIHBvcyA9IGhlYWQuY2ggLSAxOwogICAgICB2YXIgbWF0Y2ggPSAocG9zID49IDAgJiYgbWF0Y2hpbmdbbGluZS50ZXh0LmNoYXJBdChwb3MpXSkgfHwgbWF0Y2hpbmdbbGluZS50ZXh0LmNoYXJBdCgrK3BvcyldOwogICAgICBpZiAoIW1hdGNoKSByZXR1cm47CiAgICAgIHZhciBjaCA9IG1hdGNoLmNoYXJBdCgwKSwgZm9yd2FyZCA9IG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIsIGQgPSBmb3J3YXJkID8gMSA6IC0xLCBzdCA9IGxpbmUuc3R5bGVzOwogICAgICBmb3IgKHZhciBvZmYgPSBwb3MgKyAxLCBpID0gMCwgZSA9IHN0Lmxlbmd0aDsgaSA8IGU7IGkrPTIpCiAgICAgICAgaWYgKChvZmYgLT0gc3RbaV0ubGVuZ3RoKSA8PSAwKSB7dmFyIHN0eWxlID0gc3RbaSsxXTsgYnJlYWs7fQoKICAgICAgdmFyIHN0YWNrID0gW2xpbmUudGV4dC5jaGFyQXQocG9zKV0sIHJlID0gL1soKXt9W1xdXS87CiAgICAgIGZ1bmN0aW9uIHNjYW4obGluZSwgZnJvbSwgdG8pIHsKICAgICAgICBpZiAoIWxpbmUudGV4dCkgcmV0dXJuOwogICAgICAgIHZhciBzdCA9IGxpbmUuc3R5bGVzLCBwb3MgPSBmb3J3YXJkID8gMCA6IGxpbmUudGV4dC5sZW5ndGggLSAxLCBjdXI7CiAgICAgICAgZm9yICh2YXIgaSA9IGZvcndhcmQgPyAwIDogc3QubGVuZ3RoIC0gMiwgZSA9IGZvcndhcmQgPyBzdC5sZW5ndGggOiAtMjsgaSAhPSBlOyBpICs9IDIqZCkgewogICAgICAgICAgdmFyIHRleHQgPSBzdFtpXTsKICAgICAgICAgIGlmIChzdFtpKzFdICE9IG51bGwgJiYgc3RbaSsxXSAhPSBzdHlsZSkge3BvcyArPSBkICogdGV4dC5sZW5ndGg7IGNvbnRpbnVlO30KICAgICAgICAgIGZvciAodmFyIGogPSBmb3J3YXJkID8gMCA6IHRleHQubGVuZ3RoIC0gMSwgdGUgPSBmb3J3YXJkID8gdGV4dC5sZW5ndGggOiAtMTsgaiAhPSB0ZTsgaiArPSBkLCBwb3MrPWQpIHsKICAgICAgICAgICAgaWYgKHBvcyA+PSBmcm9tICYmIHBvcyA8IHRvICYmIHJlLnRlc3QoY3VyID0gdGV4dC5jaGFyQXQoaikpKSB7CiAgICAgICAgICAgICAgdmFyIG1hdGNoID0gbWF0Y2hpbmdbY3VyXTsKICAgICAgICAgICAgICBpZiAobWF0Y2guY2hhckF0KDEpID09ICI+IiA9PSBmb3J3YXJkKSBzdGFjay5wdXNoKGN1cik7CiAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhY2sucG9wKCkgIT0gbWF0Y2guY2hhckF0KDApKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogZmFsc2V9OwogICAgICAgICAgICAgIGVsc2UgaWYgKCFzdGFjay5sZW5ndGgpIHJldHVybiB7cG9zOiBwb3MsIG1hdGNoOiB0cnVlfTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKHZhciBpID0gaGVhZC5saW5lLCBlID0gZm9yd2FyZCA/IE1hdGgubWluKGkgKyAxMDAsIGRvYy5zaXplKSA6IE1hdGgubWF4KC0xLCBpIC0gMTAwKTsgaSAhPSBlOyBpKz1kKSB7CiAgICAgICAgdmFyIGxpbmUgPSBnZXRMaW5lKGkpLCBmaXJzdCA9IGkgPT0gaGVhZC5saW5lOwogICAgICAgIHZhciBmb3VuZCA9IHNjYW4obGluZSwgZmlyc3QgJiYgZm9yd2FyZCA/IHBvcyArIDEgOiAwLCBmaXJzdCAmJiAhZm9yd2FyZCA/IHBvcyA6IGxpbmUudGV4dC5sZW5ndGgpOwogICAgICAgIGlmIChmb3VuZCkgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKCFmb3VuZCkgZm91bmQgPSB7cG9zOiBudWxsLCBtYXRjaDogZmFsc2V9OwogICAgICB2YXIgc3R5bGUgPSBmb3VuZC5tYXRjaCA/ICJDb2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCIgOiAiQ29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQiOwogICAgICB2YXIgb25lID0gbWFya1RleHQoe2xpbmU6IGhlYWQubGluZSwgY2g6IHBvc30sIHtsaW5lOiBoZWFkLmxpbmUsIGNoOiBwb3MrMX0sIHN0eWxlKSwKICAgICAgICAgIHR3byA9IGZvdW5kLnBvcyAhPSBudWxsICYmIG1hcmtUZXh0KHtsaW5lOiBpLCBjaDogZm91bmQucG9zfSwge2xpbmU6IGksIGNoOiBmb3VuZC5wb3MgKyAxfSwgc3R5bGUpOwogICAgICB2YXIgY2xlYXIgPSBvcGVyYXRpb24oZnVuY3Rpb24oKXtvbmUuY2xlYXIoKTsgdHdvICYmIHR3by5jbGVhcigpO30pOwogICAgICBpZiAoYXV0b2NsZWFyKSBzZXRUaW1lb3V0KGNsZWFyLCA4MDApOwogICAgICBlbHNlIGJyYWNrZXRIaWdobGlnaHRlZCA9IGNsZWFyOwogICAgfQoKICAgIC8vIEZpbmRzIHRoZSBsaW5lIHRvIHN0YXJ0IHdpdGggd2hlbiBzdGFydGluZyBhIHBhcnNlLiBUcmllcyB0bwogICAgLy8gZmluZCBhIGxpbmUgd2l0aCBhIHN0YXRlQWZ0ZXIsIHNvIHRoYXQgaXQgY2FuIHN0YXJ0IHdpdGggYQogICAgLy8gdmFsaWQgc3RhdGUuIElmIHRoYXQgZmFpbHMsIGl0IHJldHVybnMgdGhlIGxpbmUgd2l0aCB0aGUKICAgIC8vIHNtYWxsZXN0IGluZGVudGF0aW9uLCB3aGljaCB0ZW5kcyB0byBuZWVkIHRoZSBsZWFzdCBjb250ZXh0IHRvCiAgICAvLyBwYXJzZSBjb3JyZWN0bHkuCiAgICBmdW5jdGlvbiBmaW5kU3RhcnRMaW5lKG4pIHsKICAgICAgdmFyIG1pbmluZGVudCwgbWlubGluZTsKICAgICAgZm9yICh2YXIgc2VhcmNoID0gbiwgbGltID0gbiAtIDQwOyBzZWFyY2ggPiBsaW07IC0tc2VhcmNoKSB7CiAgICAgICAgaWYgKHNlYXJjaCA9PSAwKSByZXR1cm4gMDsKICAgICAgICB2YXIgbGluZSA9IGdldExpbmUoc2VhcmNoLTEpOwogICAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7CiAgICAgICAgdmFyIGluZGVudGVkID0gbGluZS5pbmRlbnRhdGlvbihvcHRpb25zLnRhYlNpemUpOwogICAgICAgIGlmIChtaW5saW5lID09IG51bGwgfHwgbWluaW5kZW50ID4gaW5kZW50ZWQpIHsKICAgICAgICAgIG1pbmxpbmUgPSBzZWFyY2ggLSAxOwogICAgICAgICAgbWluaW5kZW50ID0gaW5kZW50ZWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBtaW5saW5lOwogICAgfQogICAgZnVuY3Rpb24gZ2V0U3RhdGVCZWZvcmUobikgewogICAgICB2YXIgc3RhcnQgPSBmaW5kU3RhcnRMaW5lKG4pLCBzdGF0ZSA9IHN0YXJ0ICYmIGdldExpbmUoc3RhcnQtMSkuc3RhdGVBZnRlcjsKICAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSBzdGFydFN0YXRlKG1vZGUpOwogICAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgZG9jLml0ZXIoc3RhcnQsIG4sIGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgICBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSwgb3B0aW9ucy50YWJTaXplKTsKICAgICAgICBsaW5lLnN0YXRlQWZ0ZXIgPSBjb3B5U3RhdGUobW9kZSwgc3RhdGUpOwogICAgICB9KTsKICAgICAgaWYgKHN0YXJ0IDwgbikgY2hhbmdlcy5wdXNoKHtmcm9tOiBzdGFydCwgdG86IG59KTsKICAgICAgaWYgKG4gPCBkb2Muc2l6ZSAmJiAhZ2V0TGluZShuKS5zdGF0ZUFmdGVyKSB3b3JrLnB1c2gobik7CiAgICAgIHJldHVybiBzdGF0ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGhpZ2hsaWdodExpbmVzKHN0YXJ0LCBlbmQpIHsKICAgICAgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUoc3RhcnQpOwogICAgICBkb2MuaXRlcihzdGFydCwgZW5kLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgbGluZS5oaWdobGlnaHQobW9kZSwgc3RhdGUsIG9wdGlvbnMudGFiU2l6ZSk7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBoaWdobGlnaHRXb3JrZXIoKSB7CiAgICAgIHZhciBlbmQgPSArbmV3IERhdGUgKyBvcHRpb25zLndvcmtUaW1lOwogICAgICB2YXIgZm91bmRXb3JrID0gd29yay5sZW5ndGg7CiAgICAgIHdoaWxlICh3b3JrLmxlbmd0aCkgewogICAgICAgIGlmICghZ2V0TGluZShzaG93aW5nRnJvbSkuc3RhdGVBZnRlcikgdmFyIHRhc2sgPSBzaG93aW5nRnJvbTsKICAgICAgICBlbHNlIHZhciB0YXNrID0gd29yay5wb3AoKTsKICAgICAgICBpZiAodGFzayA+PSBkb2Muc2l6ZSkgY29udGludWU7CiAgICAgICAgdmFyIHN0YXJ0ID0gZmluZFN0YXJ0TGluZSh0YXNrKSwgc3RhdGUgPSBzdGFydCAmJiBnZXRMaW5lKHN0YXJ0LTEpLnN0YXRlQWZ0ZXI7CiAgICAgICAgaWYgKHN0YXRlKSBzdGF0ZSA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgICAgZWxzZSBzdGF0ZSA9IHN0YXJ0U3RhdGUobW9kZSk7CgogICAgICAgIHZhciB1bmNoYW5nZWQgPSAwLCBjb21wYXJlID0gbW9kZS5jb21wYXJlU3RhdGVzLCByZWFsQ2hhbmdlID0gZmFsc2UsCiAgICAgICAgICAgIGkgPSBzdGFydCwgYmFpbCA9IGZhbHNlOwogICAgICAgIGRvYy5pdGVyKGksIGRvYy5zaXplLCBmdW5jdGlvbihsaW5lKSB7CiAgICAgICAgICB2YXIgaGFkU3RhdGUgPSBsaW5lLnN0YXRlQWZ0ZXI7CiAgICAgICAgICBpZiAoK25ldyBEYXRlID4gZW5kKSB7CiAgICAgICAgICAgIHdvcmsucHVzaChpKTsKICAgICAgICAgICAgc3RhcnRXb3JrZXIob3B0aW9ucy53b3JrRGVsYXkpOwogICAgICAgICAgICBpZiAocmVhbENoYW5nZSkgY2hhbmdlcy5wdXNoKHtmcm9tOiB0YXNrLCB0bzogaSArIDF9KTsKICAgICAgICAgICAgcmV0dXJuIChiYWlsID0gdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgY2hhbmdlZCA9IGxpbmUuaGlnaGxpZ2h0KG1vZGUsIHN0YXRlLCBvcHRpb25zLnRhYlNpemUpOwogICAgICAgICAgaWYgKGNoYW5nZWQpIHJlYWxDaGFuZ2UgPSB0cnVlOwogICAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgICAgIGlmIChjb21wYXJlKSB7CiAgICAgICAgICAgIGlmIChoYWRTdGF0ZSAmJiBjb21wYXJlKGhhZFN0YXRlLCBzdGF0ZSkpIHJldHVybiB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGNoYW5nZWQgIT09IGZhbHNlIHx8ICFoYWRTdGF0ZSkgdW5jaGFuZ2VkID0gMDsKICAgICAgICAgICAgZWxzZSBpZiAoKyt1bmNoYW5nZWQgPiAzICYmICghbW9kZS5pbmRlbnQgfHwgbW9kZS5pbmRlbnQoaGFkU3RhdGUsICIiKSA9PSBtb2RlLmluZGVudChzdGF0ZSwgIiIpKSkKICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgICsraTsKICAgICAgICB9KTsKICAgICAgICBpZiAoYmFpbCkgcmV0dXJuOwogICAgICAgIGlmIChyZWFsQ2hhbmdlKSBjaGFuZ2VzLnB1c2goe2Zyb206IHRhc2ssIHRvOiBpICsgMX0pOwogICAgICB9CiAgICAgIGlmIChmb3VuZFdvcmsgJiYgb3B0aW9ucy5vbkhpZ2hsaWdodENvbXBsZXRlKQogICAgICAgIG9wdGlvbnMub25IaWdobGlnaHRDb21wbGV0ZShpbnN0YW5jZSk7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFydFdvcmtlcih0aW1lKSB7CiAgICAgIGlmICghd29yay5sZW5ndGgpIHJldHVybjsKICAgICAgaGlnaGxpZ2h0LnNldCh0aW1lLCBvcGVyYXRpb24oaGlnaGxpZ2h0V29ya2VyKSk7CiAgICB9CgogICAgLy8gT3BlcmF0aW9ucyBhcmUgdXNlZCB0byB3cmFwIGNoYW5nZXMgaW4gc3VjaCBhIHdheSB0aGF0IGVhY2gKICAgIC8vIGNoYW5nZSB3b24ndCBoYXZlIHRvIHVwZGF0ZSB0aGUgY3Vyc29yIGFuZCBkaXNwbGF5ICh3aGljaCB3b3VsZAogICAgLy8gYmUgYXdrd2FyZCwgc2xvdywgYW5kIGVycm9yLXByb25lKSwgYnV0IGluc3RlYWQgdXBkYXRlcyBhcmUKICAgIC8vIGJhdGNoZWQgYW5kIHRoZW4gYWxsIGNvbWJpbmVkIGFuZCBleGVjdXRlZCBhdCBvbmNlLgogICAgZnVuY3Rpb24gc3RhcnRPcGVyYXRpb24oKSB7CiAgICAgIHVwZGF0ZUlucHV0ID0gdXNlclNlbENoYW5nZSA9IHRleHRDaGFuZ2VkID0gbnVsbDsKICAgICAgY2hhbmdlcyA9IFtdOyBzZWxlY3Rpb25DaGFuZ2VkID0gZmFsc2U7IGNhbGxiYWNrcyA9IFtdOwogICAgfQogICAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKCkgewogICAgICB2YXIgcmVTY3JvbGwgPSBmYWxzZSwgdXBkYXRlZDsKICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHJlU2Nyb2xsID0gIXNjcm9sbEN1cnNvckludG9WaWV3KCk7CiAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCkgdXBkYXRlZCA9IHVwZGF0ZURpc3BsYXkoY2hhbmdlcywgdHJ1ZSk7CiAgICAgIGVsc2UgewogICAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkKSB1cGRhdGVTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoZ3V0dGVyRGlydHkpIHVwZGF0ZUd1dHRlcigpOwogICAgICB9CiAgICAgIGlmIChyZVNjcm9sbCkgc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHtzY3JvbGxFZGl0b3JJbnRvVmlldygpOyByZXN0YXJ0QmxpbmsoKTt9CgogICAgICBpZiAoZm9jdXNlZCAmJiAhbGVhdmVJbnB1dEFsb25lICYmCiAgICAgICAgICAodXBkYXRlSW5wdXQgPT09IHRydWUgfHwgKHVwZGF0ZUlucHV0ICE9PSBmYWxzZSAmJiBzZWxlY3Rpb25DaGFuZ2VkKSkpCiAgICAgICAgcmVzZXRJbnB1dCh1c2VyU2VsQ2hhbmdlKTsKCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMubWF0Y2hCcmFja2V0cykKICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHticmFja2V0SGlnaGxpZ2h0ZWQoKTsgYnJhY2tldEhpZ2hsaWdodGVkID0gbnVsbDt9CiAgICAgICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIG1hdGNoQnJhY2tldHMoZmFsc2UpOwogICAgICAgIH0pLCAyMCk7CiAgICAgIHZhciB0YyA9IHRleHRDaGFuZ2VkLCBjYnMgPSBjYWxsYmFja3M7IC8vIHRoZXNlIGNhbiBiZSByZXNldCBieSBjYWxsYmFja3MKICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQgJiYgb3B0aW9ucy5vbkN1cnNvckFjdGl2aXR5KQogICAgICAgIG9wdGlvbnMub25DdXJzb3JBY3Rpdml0eShpbnN0YW5jZSk7CiAgICAgIGlmICh0YyAmJiBvcHRpb25zLm9uQ2hhbmdlICYmIGluc3RhbmNlKQogICAgICAgIG9wdGlvbnMub25DaGFuZ2UoaW5zdGFuY2UsIHRjKTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYnMubGVuZ3RoOyArK2kpIGNic1tpXShpbnN0YW5jZSk7CiAgICAgIGlmICh1cGRhdGVkICYmIG9wdGlvbnMub25VcGRhdGUpIG9wdGlvbnMub25VcGRhdGUoaW5zdGFuY2UpOwogICAgfQogICAgdmFyIG5lc3RlZE9wZXJhdGlvbiA9IDA7CiAgICBmdW5jdGlvbiBvcGVyYXRpb24oZikgewogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKCFuZXN0ZWRPcGVyYXRpb24rKykgc3RhcnRPcGVyYXRpb24oKTsKICAgICAgICB0cnkge3ZhciByZXN1bHQgPSBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7fQogICAgICAgIGZpbmFsbHkge2lmICghLS1uZXN0ZWRPcGVyYXRpb24pIGVuZE9wZXJhdGlvbigpO30KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9OwogICAgfQoKICAgIGZvciAodmFyIGV4dCBpbiBleHRlbnNpb25zKQogICAgICBpZiAoZXh0ZW5zaW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShleHQpICYmCiAgICAgICAgICAhaW5zdGFuY2UucHJvcGVydHlJc0VudW1lcmFibGUoZXh0KSkKICAgICAgICBpbnN0YW5jZVtleHRdID0gZXh0ZW5zaW9uc1tleHRdOwogICAgcmV0dXJuIGluc3RhbmNlOwogIH0gLy8gKGVuZCBvZiBmdW5jdGlvbiBDb2RlTWlycm9yKQoKICAvLyBUaGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIG9wdGlvbnMuCiAgQ29kZU1pcnJvci5kZWZhdWx0cyA9IHsKICAgIHZhbHVlOiAiIiwKICAgIG1vZGU6IG51bGwsCiAgICB0aGVtZTogImRlZmF1bHQiLAogICAgaW5kZW50VW5pdDogMiwKICAgIGluZGVudFdpdGhUYWJzOiBmYWxzZSwKICAgIHNtYXJ0SW5kZW50OiB0cnVlLAogICAgdGFiU2l6ZTogNCwKICAgIGtleU1hcDogImRlZmF1bHQiLAogICAgZXh0cmFLZXlzOiBudWxsLAogICAgZWxlY3RyaWNDaGFyczogdHJ1ZSwKICAgIGF1dG9DbGVhckVtcHR5TGluZXM6IGZhbHNlLAogICAgb25LZXlFdmVudDogbnVsbCwKICAgIGxpbmVXcmFwcGluZzogZmFsc2UsCiAgICBsaW5lTnVtYmVyczogZmFsc2UsCiAgICBndXR0ZXI6IGZhbHNlLAogICAgZml4ZWRHdXR0ZXI6IGZhbHNlLAogICAgZmlyc3RMaW5lTnVtYmVyOiAxLAogICAgcmVhZE9ubHk6IGZhbHNlLAogICAgb25DaGFuZ2U6IG51bGwsCiAgICBvbkN1cnNvckFjdGl2aXR5OiBudWxsLAogICAgb25HdXR0ZXJDbGljazogbnVsbCwKICAgIG9uSGlnaGxpZ2h0Q29tcGxldGU6IG51bGwsCiAgICBvblVwZGF0ZTogbnVsbCwKICAgIG9uRm9jdXM6IG51bGwsIG9uQmx1cjogbnVsbCwgb25TY3JvbGw6IG51bGwsCiAgICBtYXRjaEJyYWNrZXRzOiBmYWxzZSwKICAgIHdvcmtUaW1lOiAxMDAsCiAgICB3b3JrRGVsYXk6IDIwMCwKICAgIHBvbGxJbnRlcnZhbDogMTAwLAogICAgdW5kb0RlcHRoOiA0MCwKICAgIHRhYmluZGV4OiBudWxsLAogICAgYXV0b2ZvY3VzOiBudWxsCiAgfTsKCiAgdmFyIGlvcyA9IC9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvTW9iaWxlXC9cdysvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIG1hYyA9IGlvcyB8fCAvTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7CiAgdmFyIHdpbiA9IC9XaW4vLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKCiAgLy8gS25vd24gbW9kZXMsIGJ5IG5hbWUgYW5kIGJ5IE1JTUUKICB2YXIgbW9kZXMgPSBDb2RlTWlycm9yLm1vZGVzID0ge30sIG1pbWVNb2RlcyA9IENvZGVNaXJyb3IubWltZU1vZGVzID0ge307CiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlID0gZnVuY3Rpb24obmFtZSwgbW9kZSkgewogICAgaWYgKCFDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgJiYgbmFtZSAhPSAibnVsbCIpIENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7CiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7CiAgfTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUgPSBmdW5jdGlvbihtaW1lLCBzcGVjKSB7CiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwogIH07CiAgQ29kZU1pcnJvci5yZXNvbHZlTW9kZSA9IGZ1bmN0aW9uKHNwZWMpIHsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiBtaW1lTW9kZXMuaGFzT3duUHJvcGVydHkoc3BlYykpCiAgICAgIHNwZWMgPSBtaW1lTW9kZXNbc3BlY107CiAgICBlbHNlIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIiAmJiAvXltcd1wtXStcL1tcd1wtXStcK3htbCQvLnRlc3Qoc3BlYykpCiAgICAgIHJldHVybiBDb2RlTWlycm9yLnJlc29sdmVNb2RlKCJhcHBsaWNhdGlvbi94bWwiKTsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIikgcmV0dXJuIHtuYW1lOiBzcGVjfTsKICAgIGVsc2UgcmV0dXJuIHNwZWMgfHwge25hbWU6ICJudWxsIn07CiAgfTsKICBDb2RlTWlycm9yLmdldE1vZGUgPSBmdW5jdGlvbihvcHRpb25zLCBzcGVjKSB7CiAgICB2YXIgc3BlYyA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUoc3BlYyk7CiAgICB2YXIgbWZhY3RvcnkgPSBtb2Rlc1tzcGVjLm5hbWVdOwogICAgaWYgKCFtZmFjdG9yeSkgewogICAgICBpZiAod2luZG93LmNvbnNvbGUpIGNvbnNvbGUud2FybigiTm8gbW9kZSAiICsgc3BlYy5uYW1lICsgIiBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHBsYWluIHRleHQuIik7CiAgICAgIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgInRleHQvcGxhaW4iKTsKICAgIH0KICAgIHJldHVybiBtZmFjdG9yeShvcHRpb25zLCBzcGVjKTsKICB9OwogIENvZGVNaXJyb3IubGlzdE1vZGVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbGlzdCA9IFtdOwogICAgZm9yICh2YXIgbSBpbiBtb2RlcykKICAgICAgaWYgKG1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKG0pKSBsaXN0LnB1c2gobSk7CiAgICByZXR1cm4gbGlzdDsKICB9OwogIENvZGVNaXJyb3IubGlzdE1JTUVzID0gZnVuY3Rpb24oKSB7CiAgICB2YXIgbGlzdCA9IFtdOwogICAgZm9yICh2YXIgbSBpbiBtaW1lTW9kZXMpCiAgICAgIGlmIChtaW1lTW9kZXMucHJvcGVydHlJc0VudW1lcmFibGUobSkpIGxpc3QucHVzaCh7bWltZTogbSwgbW9kZTogbWltZU1vZGVzW21dfSk7CiAgICByZXR1cm4gbGlzdDsKICB9OwoKICB2YXIgZXh0ZW5zaW9ucyA9IENvZGVNaXJyb3IuZXh0ZW5zaW9ucyA9IHt9OwogIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uID0gZnVuY3Rpb24obmFtZSwgZnVuYykgewogICAgZXh0ZW5zaW9uc1tuYW1lXSA9IGZ1bmM7CiAgfTsKCiAgdmFyIGNvbW1hbmRzID0gQ29kZU1pcnJvci5jb21tYW5kcyA9IHsKICAgIHNlbGVjdEFsbDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IGNtLmxpbmVDb3VudCgpIC0gMX0pO30sCiAgICBraWxsTGluZTogZnVuY3Rpb24oY20pIHsKICAgICAgdmFyIGZyb20gPSBjbS5nZXRDdXJzb3IodHJ1ZSksIHRvID0gY20uZ2V0Q3Vyc29yKGZhbHNlKSwgc2VsID0gIXBvc0VxKGZyb20sIHRvKTsKICAgICAgaWYgKCFzZWwgJiYgY20uZ2V0TGluZShmcm9tLmxpbmUpLmxlbmd0aCA9PSBmcm9tLmNoKSBjbS5yZXBsYWNlUmFuZ2UoIiIsIGZyb20sIHtsaW5lOiBmcm9tLmxpbmUgKyAxLCBjaDogMH0pOwogICAgICBlbHNlIGNtLnJlcGxhY2VSYW5nZSgiIiwgZnJvbSwgc2VsID8gdG8gOiB7bGluZTogZnJvbS5saW5lfSk7CiAgICB9LAogICAgZGVsZXRlTGluZTogZnVuY3Rpb24oY20pIHt2YXIgbCA9IGNtLmdldEN1cnNvcigpLmxpbmU7IGNtLnJlcGxhY2VSYW5nZSgiIiwge2xpbmU6IGwsIGNoOiAwfSwge2xpbmU6IGx9KTt9LAogICAgdW5kbzogZnVuY3Rpb24oY20pIHtjbS51bmRvKCk7fSwKICAgIHJlZG86IGZ1bmN0aW9uKGNtKSB7Y20ucmVkbygpO30sCiAgICBnb0RvY1N0YXJ0OiBmdW5jdGlvbihjbSkge2NtLnNldEN1cnNvcigwLCAwLCB0cnVlKTt9LAogICAgZ29Eb2NFbmQ6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0U2VsZWN0aW9uKHtsaW5lOiBjbS5saW5lQ291bnQoKSAtIDF9LCBudWxsLCB0cnVlKTt9LAogICAgZ29MaW5lU3RhcnQ6IGZ1bmN0aW9uKGNtKSB7Y20uc2V0Q3Vyc29yKGNtLmdldEN1cnNvcigpLmxpbmUsIDAsIHRydWUpO30sCiAgICBnb0xpbmVTdGFydFNtYXJ0OiBmdW5jdGlvbihjbSkgewogICAgICB2YXIgY3VyID0gY20uZ2V0Q3Vyc29yKCk7CiAgICAgIHZhciB0ZXh0ID0gY20uZ2V0TGluZShjdXIubGluZSksIGZpcnN0Tm9uV1MgPSBNYXRoLm1heCgwLCB0ZXh0LnNlYXJjaCgvXFMvKSk7CiAgICAgIGNtLnNldEN1cnNvcihjdXIubGluZSwgY3VyLmNoIDw9IGZpcnN0Tm9uV1MgJiYgY3VyLmNoID8gMCA6IGZpcnN0Tm9uV1MsIHRydWUpOwogICAgfSwKICAgIGdvTGluZUVuZDogZnVuY3Rpb24oY20pIHtjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IGNtLmdldEN1cnNvcigpLmxpbmV9LCBudWxsLCB0cnVlKTt9LAogICAgZ29MaW5lVXA6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoLTEsICJsaW5lIik7fSwKICAgIGdvTGluZURvd246IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoMSwgImxpbmUiKTt9LAogICAgZ29QYWdlVXA6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoLTEsICJwYWdlIik7fSwKICAgIGdvUGFnZURvd246IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZVYoMSwgInBhZ2UiKTt9LAogICAgZ29DaGFyTGVmdDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgtMSwgImNoYXIiKTt9LAogICAgZ29DaGFyUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoMSwgImNoYXIiKTt9LAogICAgZ29Db2x1bW5MZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAiY29sdW1uIik7fSwKICAgIGdvQ29sdW1uUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20ubW92ZUgoMSwgImNvbHVtbiIpO30sCiAgICBnb1dvcmRMZWZ0OiBmdW5jdGlvbihjbSkge2NtLm1vdmVIKC0xLCAid29yZCIpO30sCiAgICBnb1dvcmRSaWdodDogZnVuY3Rpb24oY20pIHtjbS5tb3ZlSCgxLCAid29yZCIpO30sCiAgICBkZWxDaGFyTGVmdDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKC0xLCAiY2hhciIpO30sCiAgICBkZWxDaGFyUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAiY2hhciIpO30sCiAgICBkZWxXb3JkTGVmdDogZnVuY3Rpb24oY20pIHtjbS5kZWxldGVIKC0xLCAid29yZCIpO30sCiAgICBkZWxXb3JkUmlnaHQ6IGZ1bmN0aW9uKGNtKSB7Y20uZGVsZXRlSCgxLCAid29yZCIpO30sCiAgICBpbmRlbnRBdXRvOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigic21hcnQiKTt9LAogICAgaW5kZW50TW9yZTogZnVuY3Rpb24oY20pIHtjbS5pbmRlbnRTZWxlY3Rpb24oImFkZCIpO30sCiAgICBpbmRlbnRMZXNzOiBmdW5jdGlvbihjbSkge2NtLmluZGVudFNlbGVjdGlvbigic3VidHJhY3QiKTt9LAogICAgaW5zZXJ0VGFiOiBmdW5jdGlvbihjbSkge2NtLnJlcGxhY2VTZWxlY3Rpb24oIlx0IiwgImVuZCIpO30sCiAgICB0cmFuc3Bvc2VDaGFyczogZnVuY3Rpb24oY20pIHsKICAgICAgdmFyIGN1ciA9IGNtLmdldEN1cnNvcigpLCBsaW5lID0gY20uZ2V0TGluZShjdXIubGluZSk7CiAgICAgIGlmIChjdXIuY2ggPiAwICYmIGN1ci5jaCA8IGxpbmUubGVuZ3RoIC0gMSkKICAgICAgICBjbS5yZXBsYWNlUmFuZ2UobGluZS5jaGFyQXQoY3VyLmNoKSArIGxpbmUuY2hhckF0KGN1ci5jaCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICB7bGluZTogY3VyLmxpbmUsIGNoOiBjdXIuY2ggLSAxfSwge2xpbmU6IGN1ci5saW5lLCBjaDogY3VyLmNoICsgMX0pOwogICAgfSwKICAgIG5ld2xpbmVBbmRJbmRlbnQ6IGZ1bmN0aW9uKGNtKSB7CiAgICAgIGNtLnJlcGxhY2VTZWxlY3Rpb24oIlxuIiwgImVuZCIpOwogICAgICBjbS5pbmRlbnRMaW5lKGNtLmdldEN1cnNvcigpLmxpbmUpOwogICAgfSwKICAgIHRvZ2dsZU92ZXJ3cml0ZTogZnVuY3Rpb24oY20pIHtjbS50b2dnbGVPdmVyd3JpdGUoKTt9CiAgfTsKCiAgdmFyIGtleU1hcCA9IENvZGVNaXJyb3Iua2V5TWFwID0ge307CiAga2V5TWFwLmJhc2ljID0gewogICAgIkxlZnQiOiAiZ29DaGFyTGVmdCIsICJSaWdodCI6ICJnb0NoYXJSaWdodCIsICJVcCI6ICJnb0xpbmVVcCIsICJEb3duIjogImdvTGluZURvd24iLAogICAgIkVuZCI6ICJnb0xpbmVFbmQiLCAiSG9tZSI6ICJnb0xpbmVTdGFydFNtYXJ0IiwgIlBhZ2VVcCI6ICJnb1BhZ2VVcCIsICJQYWdlRG93biI6ICJnb1BhZ2VEb3duIiwKICAgICJEZWxldGUiOiAiZGVsQ2hhclJpZ2h0IiwgIkJhY2tzcGFjZSI6ICJkZWxDaGFyTGVmdCIsICJUYWIiOiAiaW5zZXJ0VGFiIiwgIlNoaWZ0LVRhYiI6ICJpbmRlbnRBdXRvIiwKICAgICJFbnRlciI6ICJuZXdsaW5lQW5kSW5kZW50IiwgIkluc2VydCI6ICJ0b2dnbGVPdmVyd3JpdGUiCiAgfTsKICAvLyBOb3RlIHRoYXQgdGhlIHNhdmUgYW5kIGZpbmQtcmVsYXRlZCBjb21tYW5kcyBhcmVuJ3QgZGVmaW5lZCBieQogIC8vIGRlZmF1bHQuIFVua25vd24gY29tbWFuZHMgYXJlIHNpbXBseSBpZ25vcmVkLgogIGtleU1hcC5wY0RlZmF1bHQgPSB7CiAgICAiQ3RybC1BIjogInNlbGVjdEFsbCIsICJDdHJsLUQiOiAiZGVsZXRlTGluZSIsICJDdHJsLVoiOiAidW5kbyIsICJTaGlmdC1DdHJsLVoiOiAicmVkbyIsICJDdHJsLVkiOiAicmVkbyIsCiAgICAiQ3RybC1Ib21lIjogImdvRG9jU3RhcnQiLCAiQWx0LVVwIjogImdvRG9jU3RhcnQiLCAiQ3RybC1FbmQiOiAiZ29Eb2NFbmQiLCAiQ3RybC1Eb3duIjogImdvRG9jRW5kIiwKICAgICJDdHJsLUxlZnQiOiAiZ29Xb3JkTGVmdCIsICJDdHJsLVJpZ2h0IjogImdvV29yZFJpZ2h0IiwgIkFsdC1MZWZ0IjogImdvTGluZVN0YXJ0IiwgIkFsdC1SaWdodCI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtQmFja3NwYWNlIjogImRlbFdvcmRMZWZ0IiwgIkN0cmwtRGVsZXRlIjogImRlbFdvcmRSaWdodCIsICJDdHJsLVMiOiAic2F2ZSIsICJDdHJsLUYiOiAiZmluZCIsCiAgICAiQ3RybC1HIjogImZpbmROZXh0IiwgIlNoaWZ0LUN0cmwtRyI6ICJmaW5kUHJldiIsICJTaGlmdC1DdHJsLUYiOiAicmVwbGFjZSIsICJTaGlmdC1DdHJsLVIiOiAicmVwbGFjZUFsbCIsCiAgICAiQ3RybC1bIjogImluZGVudExlc3MiLCAiQ3RybC1dIjogImluZGVudE1vcmUiLAogICAgZmFsbHRocm91Z2g6ICJiYXNpYyIKICB9OwogIGtleU1hcC5tYWNEZWZhdWx0ID0gewogICAgIkNtZC1BIjogInNlbGVjdEFsbCIsICJDbWQtRCI6ICJkZWxldGVMaW5lIiwgIkNtZC1aIjogInVuZG8iLCAiU2hpZnQtQ21kLVoiOiAicmVkbyIsICJDbWQtWSI6ICJyZWRvIiwKICAgICJDbWQtVXAiOiAiZ29Eb2NTdGFydCIsICJDbWQtRW5kIjogImdvRG9jRW5kIiwgIkNtZC1Eb3duIjogImdvRG9jRW5kIiwgIkFsdC1MZWZ0IjogImdvV29yZExlZnQiLAogICAgIkFsdC1SaWdodCI6ICJnb1dvcmRSaWdodCIsICJDbWQtTGVmdCI6ICJnb0xpbmVTdGFydCIsICJDbWQtUmlnaHQiOiAiZ29MaW5lRW5kIiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLAogICAgIkN0cmwtQWx0LUJhY2tzcGFjZSI6ICJkZWxXb3JkUmlnaHQiLCAiQWx0LURlbGV0ZSI6ICJkZWxXb3JkUmlnaHQiLCAiQ21kLVMiOiAic2F2ZSIsICJDbWQtRiI6ICJmaW5kIiwKICAgICJDbWQtRyI6ICJmaW5kTmV4dCIsICJTaGlmdC1DbWQtRyI6ICJmaW5kUHJldiIsICJDbWQtQWx0LUYiOiAicmVwbGFjZSIsICJTaGlmdC1DbWQtQWx0LUYiOiAicmVwbGFjZUFsbCIsCiAgICAiQ21kLVsiOiAiaW5kZW50TGVzcyIsICJDbWQtXSI6ICJpbmRlbnRNb3JlIiwKICAgIGZhbGx0aHJvdWdoOiBbImJhc2ljIiwgImVtYWNzeSJdCiAgfTsKICBrZXlNYXBbImRlZmF1bHQiXSA9IG1hYyA/IGtleU1hcC5tYWNEZWZhdWx0IDoga2V5TWFwLnBjRGVmYXVsdDsKICBrZXlNYXAuZW1hY3N5ID0gewogICAgIkN0cmwtRiI6ICJnb0NoYXJSaWdodCIsICJDdHJsLUIiOiAiZ29DaGFyTGVmdCIsICJDdHJsLVAiOiAiZ29MaW5lVXAiLCAiQ3RybC1OIjogImdvTGluZURvd24iLAogICAgIkFsdC1GIjogImdvV29yZFJpZ2h0IiwgIkFsdC1CIjogImdvV29yZExlZnQiLCAiQ3RybC1BIjogImdvTGluZVN0YXJ0IiwgIkN0cmwtRSI6ICJnb0xpbmVFbmQiLAogICAgIkN0cmwtViI6ICJnb1BhZ2VVcCIsICJTaGlmdC1DdHJsLVYiOiAiZ29QYWdlRG93biIsICJDdHJsLUQiOiAiZGVsQ2hhclJpZ2h0IiwgIkN0cmwtSCI6ICJkZWxDaGFyTGVmdCIsCiAgICAiQWx0LUQiOiAiZGVsV29yZFJpZ2h0IiwgIkFsdC1CYWNrc3BhY2UiOiAiZGVsV29yZExlZnQiLCAiQ3RybC1LIjogImtpbGxMaW5lIiwgIkN0cmwtVCI6ICJ0cmFuc3Bvc2VDaGFycyIKICB9OwoKICBmdW5jdGlvbiBnZXRLZXlNYXAodmFsKSB7CiAgICBpZiAodHlwZW9mIHZhbCA9PSAic3RyaW5nIikgcmV0dXJuIGtleU1hcFt2YWxdOwogICAgZWxzZSByZXR1cm4gdmFsOwogIH0KICBmdW5jdGlvbiBsb29rdXBLZXkobmFtZSwgZXh0cmFNYXAsIG1hcCwgaGFuZGxlKSB7CiAgICBmdW5jdGlvbiBsb29rdXAobWFwKSB7CiAgICAgIG1hcCA9IGdldEtleU1hcChtYXApOwogICAgICB2YXIgZm91bmQgPSBtYXBbbmFtZV07CiAgICAgIGlmIChmb3VuZCAhPSBudWxsICYmIGhhbmRsZShmb3VuZCkpIHJldHVybiB0cnVlOwogICAgICBpZiAobWFwLmNhdGNoYWxsKSByZXR1cm4gaGFuZGxlKG1hcC5jYXRjaGFsbCk7CiAgICAgIHZhciBmYWxsdGhyb3VnaCA9IG1hcC5mYWxsdGhyb3VnaDsKICAgICAgaWYgKGZhbGx0aHJvdWdoID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChmYWxsdGhyb3VnaCkgIT0gIltvYmplY3QgQXJyYXldIikKICAgICAgICByZXR1cm4gbG9va3VwKGZhbGx0aHJvdWdoKTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBmYWxsdGhyb3VnaC5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICBpZiAobG9va3VwKGZhbGx0aHJvdWdoW2ldKSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGV4dHJhTWFwICYmIGxvb2t1cChleHRyYU1hcCkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGxvb2t1cChtYXApOwogIH0KICBmdW5jdGlvbiBpc01vZGlmaWVyS2V5KGV2ZW50KSB7CiAgICB2YXIgbmFtZSA9IGtleU5hbWVzW2VfcHJvcChldmVudCwgImtleUNvZGUiKV07CiAgICByZXR1cm4gbmFtZSA9PSAiQ3RybCIgfHwgbmFtZSA9PSAiQWx0IiB8fCBuYW1lID09ICJTaGlmdCIgfHwgbmFtZSA9PSAiTW9kIjsKICB9CgogIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhID0gZnVuY3Rpb24odGV4dGFyZWEsIG9wdGlvbnMpIHsKICAgIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9OwogICAgb3B0aW9ucy52YWx1ZSA9IHRleHRhcmVhLnZhbHVlOwogICAgaWYgKCFvcHRpb25zLnRhYmluZGV4ICYmIHRleHRhcmVhLnRhYmluZGV4KQogICAgICBvcHRpb25zLnRhYmluZGV4ID0gdGV4dGFyZWEudGFiaW5kZXg7CiAgICBpZiAob3B0aW9ucy5hdXRvZm9jdXMgPT0gbnVsbCAmJiB0ZXh0YXJlYS5nZXRBdHRyaWJ1dGUoImF1dG9mb2N1cyIpICE9IG51bGwpCiAgICAgIG9wdGlvbnMuYXV0b2ZvY3VzID0gdHJ1ZTsKCiAgICBmdW5jdGlvbiBzYXZlKCkge3RleHRhcmVhLnZhbHVlID0gaW5zdGFuY2UuZ2V0VmFsdWUoKTt9CiAgICBpZiAodGV4dGFyZWEuZm9ybSkgewogICAgICAvLyBEZXBsb3JhYmxlIGhhY2sgdG8gbWFrZSB0aGUgc3VibWl0IG1ldGhvZCBkbyB0aGUgcmlnaHQgdGhpbmcuCiAgICAgIHZhciBybVN1Ym1pdCA9IGNvbm5lY3QodGV4dGFyZWEuZm9ybSwgInN1Ym1pdCIsIHNhdmUsIHRydWUpOwogICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpIHsKICAgICAgICB2YXIgcmVhbFN1Ym1pdCA9IHRleHRhcmVhLmZvcm0uc3VibWl0OwogICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRTdWJtaXQoKSB7CiAgICAgICAgICBzYXZlKCk7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCgpOwogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSB3cmFwcGVkU3VibWl0OwogICAgICAgIH0KICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7CiAgICAgIH0KICAgIH0KCiAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgdmFyIGluc3RhbmNlID0gQ29kZU1pcnJvcihmdW5jdGlvbihub2RlKSB7CiAgICAgIHRleHRhcmVhLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIHRleHRhcmVhLm5leHRTaWJsaW5nKTsKICAgIH0sIG9wdGlvbnMpOwogICAgaW5zdGFuY2Uuc2F2ZSA9IHNhdmU7CiAgICBpbnN0YW5jZS5nZXRUZXh0QXJlYSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGV4dGFyZWE7IH07CiAgICBpbnN0YW5jZS50b1RleHRBcmVhID0gZnVuY3Rpb24oKSB7CiAgICAgIHNhdmUoKTsKICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICAgICAgdGV4dGFyZWEuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgICBpZiAodGV4dGFyZWEuZm9ybSkgewogICAgICAgIHJtU3VibWl0KCk7CiAgICAgICAgaWYgKHR5cGVvZiB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9PSAiZnVuY3Rpb24iKQogICAgICAgICAgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPSByZWFsU3VibWl0OwogICAgICB9CiAgICB9OwogICAgcmV0dXJuIGluc3RhbmNlOwogIH07CgogIC8vIFV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggc3RhdGUuIEV4cG9ydGVkIGJlY2F1c2UgbW9kZXMKICAvLyBzb21ldGltZXMgbmVlZCB0byBkbyB0aGlzLgogIGZ1bmN0aW9uIGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSkgewogICAgaWYgKHN0YXRlID09PSB0cnVlKSByZXR1cm4gc3RhdGU7CiAgICBpZiAobW9kZS5jb3B5U3RhdGUpIHJldHVybiBtb2RlLmNvcHlTdGF0ZShzdGF0ZSk7CiAgICB2YXIgbnN0YXRlID0ge307CiAgICBmb3IgKHZhciBuIGluIHN0YXRlKSB7CiAgICAgIHZhciB2YWwgPSBzdGF0ZVtuXTsKICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEFycmF5KSB2YWwgPSB2YWwuY29uY2F0KFtdKTsKICAgICAgbnN0YXRlW25dID0gdmFsOwogICAgfQogICAgcmV0dXJuIG5zdGF0ZTsKICB9CiAgQ29kZU1pcnJvci5jb3B5U3RhdGUgPSBjb3B5U3RhdGU7CiAgZnVuY3Rpb24gc3RhcnRTdGF0ZShtb2RlLCBhMSwgYTIpIHsKICAgIHJldHVybiBtb2RlLnN0YXJ0U3RhdGUgPyBtb2RlLnN0YXJ0U3RhdGUoYTEsIGEyKSA6IHRydWU7CiAgfQogIENvZGVNaXJyb3Iuc3RhcnRTdGF0ZSA9IHN0YXJ0U3RhdGU7CgogIC8vIFRoZSBjaGFyYWN0ZXIgc3RyZWFtIHVzZWQgYnkgYSBtb2RlJ3MgcGFyc2VyLgogIGZ1bmN0aW9uIFN0cmluZ1N0cmVhbShzdHJpbmcsIHRhYlNpemUpIHsKICAgIHRoaXMucG9zID0gdGhpcy5zdGFydCA9IDA7CiAgICB0aGlzLnN0cmluZyA9IHN0cmluZzsKICAgIHRoaXMudGFiU2l6ZSA9IHRhYlNpemUgfHwgODsKICB9CiAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgIGVvbDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMucG9zID49IHRoaXMuc3RyaW5nLmxlbmd0aDt9LAogICAgc29sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPT0gMDt9LAogICAgcGVlazogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7fSwKICAgIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgICBpZiAodGhpcy5wb3MgPCB0aGlzLnN0cmluZy5sZW5ndGgpCiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcysrKTsKICAgIH0sCiAgICBlYXQ6IGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBjaCA9IHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcyk7CiAgICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgICBlbHNlIHZhciBvayA9IGNoICYmIChtYXRjaC50ZXN0ID8gbWF0Y2gudGVzdChjaCkgOiBtYXRjaChjaCkpOwogICAgICBpZiAob2spIHsrK3RoaXMucG9zOyByZXR1cm4gY2g7fQogICAgfSwKICAgIGVhdFdoaWxlOiBmdW5jdGlvbihtYXRjaCkgewogICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSl7fQogICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKICAgIH0sCiAgICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgICB3aGlsZSAoL1tcc1x1MDBhMF0vLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpICsrdGhpcy5wb3M7CiAgICAgIHJldHVybiB0aGlzLnBvcyA+IHN0YXJ0OwogICAgfSwKICAgIHNraXBUb0VuZDogZnVuY3Rpb24oKSB7dGhpcy5wb3MgPSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICAgIHNraXBUbzogZnVuY3Rpb24oY2gpIHsKICAgICAgdmFyIGZvdW5kID0gdGhpcy5zdHJpbmcuaW5kZXhPZihjaCwgdGhpcy5wb3MpOwogICAgICBpZiAoZm91bmQgPiAtMSkge3RoaXMucG9zID0gZm91bmQ7IHJldHVybiB0cnVlO30KICAgIH0sCiAgICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgICBjb2x1bW46IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywgdGhpcy5zdGFydCwgdGhpcy50YWJTaXplKTt9LAogICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnN0cmluZywgbnVsbCwgdGhpcy50YWJTaXplKTt9LAogICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2ZSkgewogICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gInN0cmluZyIpIHsKICAgICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICAgIGlmIChjYXNlZCh0aGlzLnN0cmluZykuaW5kZXhPZihjYXNlZChwYXR0ZXJuKSwgdGhpcy5wb3MpID09IHRoaXMucG9zKSB7CiAgICAgICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IHBhdHRlcm4ubGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgIH0KICAgIH0sCiAgICBjdXJyZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyk7fQogIH07CiAgQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0gPSBTdHJpbmdTdHJlYW07CgogIGZ1bmN0aW9uIE1hcmtlZFRleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSwgbWFya2VyKSB7CiAgICB0aGlzLmZyb20gPSBmcm9tOyB0aGlzLnRvID0gdG87IHRoaXMuc3R5bGUgPSBjbGFzc05hbWU7IHRoaXMubWFya2VyID0gbWFya2VyOwogIH0KICBNYXJrZWRUZXh0LnByb3RvdHlwZSA9IHsKICAgIGF0dGFjaDogZnVuY3Rpb24obGluZSkgeyB0aGlzLm1hcmtlci5zZXQucHVzaChsaW5lKTsgfSwKICAgIGRldGFjaDogZnVuY3Rpb24obGluZSkgewogICAgICB2YXIgaXggPSBpbmRleE9mKHRoaXMubWFya2VyLnNldCwgbGluZSk7CiAgICAgIGlmIChpeCA+IC0xKSB0aGlzLm1hcmtlci5zZXQuc3BsaWNlKGl4LCAxKTsKICAgIH0sCiAgICBzcGxpdDogZnVuY3Rpb24ocG9zLCBsZW5CZWZvcmUpIHsKICAgICAgaWYgKHRoaXMudG8gPD0gcG9zICYmIHRoaXMudG8gIT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBmcm9tID0gdGhpcy5mcm9tIDwgcG9zIHx8IHRoaXMuZnJvbSA9PSBudWxsID8gbnVsbCA6IHRoaXMuZnJvbSAtIHBvcyArIGxlbkJlZm9yZTsKICAgICAgdmFyIHRvID0gdGhpcy50byA9PSBudWxsID8gbnVsbCA6IHRoaXMudG8gLSBwb3MgKyBsZW5CZWZvcmU7CiAgICAgIHJldHVybiBuZXcgTWFya2VkVGV4dChmcm9tLCB0bywgdGhpcy5zdHlsZSwgdGhpcy5tYXJrZXIpOwogICAgfSwKICAgIGR1cDogZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgTWFya2VkVGV4dChudWxsLCBudWxsLCB0aGlzLnN0eWxlLCB0aGlzLm1hcmtlcik7IH0sCiAgICBjbGlwVG86IGZ1bmN0aW9uKGZyb21PcGVuLCBmcm9tLCB0b09wZW4sIHRvLCBkaWZmKSB7CiAgICAgIGlmIChmcm9tT3BlbiAmJiB0byA+IHRoaXMuZnJvbSAmJiAodG8gPCB0aGlzLnRvIHx8IHRoaXMudG8gPT0gbnVsbCkpCiAgICAgICAgdGhpcy5mcm9tID0gbnVsbDsKICAgICAgZWxzZSBpZiAodGhpcy5mcm9tICE9IG51bGwgJiYgdGhpcy5mcm9tID49IGZyb20pCiAgICAgICAgdGhpcy5mcm9tID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBkaWZmOwogICAgICBpZiAodG9PcGVuICYmIChmcm9tIDwgdGhpcy50byB8fCB0aGlzLnRvID09IG51bGwpICYmIChmcm9tID4gdGhpcy5mcm9tIHx8IHRoaXMuZnJvbSA9PSBudWxsKSkKICAgICAgICB0aGlzLnRvID0gbnVsbDsKICAgICAgZWxzZSBpZiAodGhpcy50byAhPSBudWxsICYmIHRoaXMudG8gPiBmcm9tKQogICAgICAgIHRoaXMudG8gPSB0byA8IHRoaXMudG8gPyB0aGlzLnRvICsgZGlmZiA6IGZyb207CiAgICB9LAogICAgaXNEZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSAhPSBudWxsICYmIHRoaXMudG8gIT0gbnVsbCAmJiB0aGlzLmZyb20gPj0gdGhpcy50bzsgfSwKICAgIHNhbWVTZXQ6IGZ1bmN0aW9uKHgpIHsgcmV0dXJuIHRoaXMubWFya2VyID09IHgubWFya2VyOyB9CiAgfTsKCiAgZnVuY3Rpb24gQm9va21hcmsocG9zKSB7CiAgICB0aGlzLmZyb20gPSBwb3M7IHRoaXMudG8gPSBwb3M7IHRoaXMubGluZSA9IG51bGw7CiAgfQogIEJvb2ttYXJrLnByb3RvdHlwZSA9IHsKICAgIGF0dGFjaDogZnVuY3Rpb24obGluZSkgeyB0aGlzLmxpbmUgPSBsaW5lOyB9LAogICAgZGV0YWNoOiBmdW5jdGlvbihsaW5lKSB7IGlmICh0aGlzLmxpbmUgPT0gbGluZSkgdGhpcy5saW5lID0gbnVsbDsgfSwKICAgIHNwbGl0OiBmdW5jdGlvbihwb3MsIGxlbkJlZm9yZSkgewogICAgICBpZiAocG9zIDwgdGhpcy5mcm9tKSB7CiAgICAgICAgdGhpcy5mcm9tID0gdGhpcy50byA9ICh0aGlzLmZyb20gLSBwb3MpICsgbGVuQmVmb3JlOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICB9LAogICAgaXNEZWFkOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuZnJvbSA+IHRoaXMudG87IH0sCiAgICBjbGlwVG86IGZ1bmN0aW9uKGZyb21PcGVuLCBmcm9tLCB0b09wZW4sIHRvLCBkaWZmKSB7CiAgICAgIGlmICgoZnJvbU9wZW4gfHwgZnJvbSA8IHRoaXMuZnJvbSkgJiYgKHRvT3BlbiB8fCB0byA+IHRoaXMudG8pKSB7CiAgICAgICAgdGhpcy5mcm9tID0gMDsgdGhpcy50byA9IC0xOwogICAgICB9IGVsc2UgaWYgKHRoaXMuZnJvbSA+IGZyb20pIHsKICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnRvID0gTWF0aC5tYXgodG8sIHRoaXMuZnJvbSkgKyBkaWZmOwogICAgICB9CiAgICB9LAogICAgc2FtZVNldDogZnVuY3Rpb24oeCkgeyByZXR1cm4gZmFsc2U7IH0sCiAgICBmaW5kOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKCF0aGlzLmxpbmUgfHwgIXRoaXMubGluZS5wYXJlbnQpIHJldHVybiBudWxsOwogICAgICByZXR1cm4ge2xpbmU6IGxpbmVObyh0aGlzLmxpbmUpLCBjaDogdGhpcy5mcm9tfTsKICAgIH0sCiAgICBjbGVhcjogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmxpbmUpIHsKICAgICAgICB2YXIgZm91bmQgPSBpbmRleE9mKHRoaXMubGluZS5tYXJrZWQsIHRoaXMpOwogICAgICAgIGlmIChmb3VuZCAhPSAtMSkgdGhpcy5saW5lLm1hcmtlZC5zcGxpY2UoZm91bmQsIDEpOwogICAgICAgIHRoaXMubGluZSA9IG51bGw7CiAgICAgIH0KICAgIH0KICB9OwoKICAvLyBMaW5lIG9iamVjdHMuIFRoZXNlIGhvbGQgc3RhdGUgcmVsYXRlZCB0byBhIGxpbmUsIGluY2x1ZGluZwogIC8vIGhpZ2hsaWdodGluZyBpbmZvICh0aGUgc3R5bGVzIGFycmF5KS4KICBmdW5jdGlvbiBMaW5lKHRleHQsIHN0eWxlcykgewogICAgdGhpcy5zdHlsZXMgPSBzdHlsZXMgfHwgW3RleHQsIG51bGxdOwogICAgdGhpcy50ZXh0ID0gdGV4dDsKICAgIHRoaXMuaGVpZ2h0ID0gMTsKICAgIHRoaXMubWFya2VkID0gdGhpcy5ndXR0ZXJNYXJrZXIgPSB0aGlzLmNsYXNzTmFtZSA9IHRoaXMuYmdDbGFzc05hbWUgPSB0aGlzLmhhbmRsZXJzID0gbnVsbDsKICAgIHRoaXMuc3RhdGVBZnRlciA9IHRoaXMucGFyZW50ID0gdGhpcy5oaWRkZW4gPSBudWxsOwogIH0KICBMaW5lLmluaGVyaXRNYXJrcyA9IGZ1bmN0aW9uKHRleHQsIG9yaWcpIHsKICAgIHZhciBsbiA9IG5ldyBMaW5lKHRleHQpLCBtayA9IG9yaWcgJiYgb3JpZy5tYXJrZWQ7CiAgICBpZiAobWspIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgIGlmIChta1tpXS50byA9PSBudWxsICYmIG1rW2ldLnN0eWxlKSB7CiAgICAgICAgICB2YXIgbmV3bWsgPSBsbi5tYXJrZWQgfHwgKGxuLm1hcmtlZCA9IFtdKSwgbWFyayA9IG1rW2ldOwogICAgICAgICAgdmFyIG5tYXJrID0gbWFyay5kdXAoKTsgbmV3bWsucHVzaChubWFyayk7IG5tYXJrLmF0dGFjaChsbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbG47CiAgfQogIExpbmUucHJvdG90eXBlID0gewogICAgLy8gUmVwbGFjZSBhIHBpZWNlIG9mIGEgbGluZSwga2VlcGluZyB0aGUgc3R5bGVzIGFyb3VuZCBpdCBpbnRhY3QuCiAgICByZXBsYWNlOiBmdW5jdGlvbihmcm9tLCB0b18sIHRleHQpIHsKICAgICAgdmFyIHN0ID0gW10sIG1rID0gdGhpcy5tYXJrZWQsIHRvID0gdG9fID09IG51bGwgPyB0aGlzLnRleHQubGVuZ3RoIDogdG9fOwogICAgICBjb3B5U3R5bGVzKDAsIGZyb20sIHRoaXMuc3R5bGVzLCBzdCk7CiAgICAgIGlmICh0ZXh0KSBzdC5wdXNoKHRleHQsIG51bGwpOwogICAgICBjb3B5U3R5bGVzKHRvLCB0aGlzLnRleHQubGVuZ3RoLCB0aGlzLnN0eWxlcywgc3QpOwogICAgICB0aGlzLnN0eWxlcyA9IHN0OwogICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgZnJvbSkgKyB0ZXh0ICsgdGhpcy50ZXh0LnNsaWNlKHRvKTsKICAgICAgdGhpcy5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICAgaWYgKG1rKSB7CiAgICAgICAgdmFyIGRpZmYgPSB0ZXh0Lmxlbmd0aCAtICh0byAtIGZyb20pOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHZhciBtYXJrID0gbWtbaV07CiAgICAgICAgICBtYXJrLmNsaXBUbyhmcm9tID09IG51bGwsIGZyb20gfHwgMCwgdG9fID09IG51bGwsIHRvLCBkaWZmKTsKICAgICAgICAgIGlmIChtYXJrLmlzRGVhZCgpKSB7bWFyay5kZXRhY2godGhpcyk7IG1rLnNwbGljZShpLS0sIDEpO30KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvLyBTcGxpdCBhIHBhcnQgb2ZmIGEgbGluZSwga2VlcGluZyBzdHlsZXMgYW5kIG1hcmtlcnMgaW50YWN0LgogICAgc3BsaXQ6IGZ1bmN0aW9uKHBvcywgdGV4dEJlZm9yZSkgewogICAgICB2YXIgc3QgPSBbdGV4dEJlZm9yZSwgbnVsbF0sIG1rID0gdGhpcy5tYXJrZWQ7CiAgICAgIGNvcHlTdHlsZXMocG9zLCB0aGlzLnRleHQubGVuZ3RoLCB0aGlzLnN0eWxlcywgc3QpOwogICAgICB2YXIgdGFrZW4gPSBuZXcgTGluZSh0ZXh0QmVmb3JlICsgdGhpcy50ZXh0LnNsaWNlKHBvcyksIHN0KTsKICAgICAgaWYgKG1rKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtay5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIG1hcmsgPSBta1tpXTsKICAgICAgICAgIHZhciBuZXdtYXJrID0gbWFyay5zcGxpdChwb3MsIHRleHRCZWZvcmUubGVuZ3RoKTsKICAgICAgICAgIGlmIChuZXdtYXJrKSB7CiAgICAgICAgICAgIGlmICghdGFrZW4ubWFya2VkKSB0YWtlbi5tYXJrZWQgPSBbXTsKICAgICAgICAgICAgdGFrZW4ubWFya2VkLnB1c2gobmV3bWFyayk7IG5ld21hcmsuYXR0YWNoKHRha2VuKTsKICAgICAgICAgICAgaWYgKG5ld21hcmsgPT0gbWFyaykgbWsuc3BsaWNlKGktLSwgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0YWtlbjsKICAgIH0sCiAgICBhcHBlbmQ6IGZ1bmN0aW9uKGxpbmUpIHsKICAgICAgdmFyIG15bGVuID0gdGhpcy50ZXh0Lmxlbmd0aCwgbWsgPSBsaW5lLm1hcmtlZCwgbXltayA9IHRoaXMubWFya2VkOwogICAgICB0aGlzLnRleHQgKz0gbGluZS50ZXh0OwogICAgICBjb3B5U3R5bGVzKDAsIGxpbmUudGV4dC5sZW5ndGgsIGxpbmUuc3R5bGVzLCB0aGlzLnN0eWxlcyk7CiAgICAgIGlmIChteW1rKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBteW1rLmxlbmd0aDsgKytpKQogICAgICAgICAgaWYgKG15bWtbaV0udG8gPT0gbnVsbCkgbXlta1tpXS50byA9IG15bGVuOwogICAgICB9CiAgICAgIGlmIChtayAmJiBtay5sZW5ndGgpIHsKICAgICAgICBpZiAoIW15bWspIHRoaXMubWFya2VkID0gbXltayA9IFtdOwogICAgICAgIG91dGVyOiBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICB2YXIgbWFyayA9IG1rW2ldOwogICAgICAgICAgaWYgKCFtYXJrLmZyb20pIHsKICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBteW1rLmxlbmd0aDsgKytqKSB7CiAgICAgICAgICAgICAgdmFyIG15bWFyayA9IG15bWtbal07CiAgICAgICAgICAgICAgaWYgKG15bWFyay50byA9PSBteWxlbiAmJiBteW1hcmsuc2FtZVNldChtYXJrKSkgewogICAgICAgICAgICAgICAgbXltYXJrLnRvID0gbWFyay50byA9PSBudWxsID8gbnVsbCA6IG1hcmsudG8gKyBteWxlbjsKICAgICAgICAgICAgICAgIGlmIChteW1hcmsuaXNEZWFkKCkpIHsKICAgICAgICAgICAgICAgICAgbXltYXJrLmRldGFjaCh0aGlzKTsKICAgICAgICAgICAgICAgICAgbWsuc3BsaWNlKGktLSwgMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjb250aW51ZSBvdXRlcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIG15bWsucHVzaChtYXJrKTsKICAgICAgICAgIG1hcmsuYXR0YWNoKHRoaXMpOwogICAgICAgICAgbWFyay5mcm9tICs9IG15bGVuOwogICAgICAgICAgaWYgKG1hcmsudG8gIT0gbnVsbCkgbWFyay50byArPSBteWxlbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBmaXhNYXJrRW5kczogZnVuY3Rpb24ob3RoZXIpIHsKICAgICAgdmFyIG1rID0gdGhpcy5tYXJrZWQsIG9tayA9IG90aGVyLm1hcmtlZDsKICAgICAgaWYgKCFtaykgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIG1hcmsgPSBta1tpXSwgY2xvc2UgPSBtYXJrLnRvID09IG51bGw7CiAgICAgICAgaWYgKGNsb3NlICYmIG9taykgewogICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvbWsubGVuZ3RoOyArK2opCiAgICAgICAgICAgIGlmIChvbWtbal0uc2FtZVNldChtYXJrKSkge2Nsb3NlID0gZmFsc2U7IGJyZWFrO30KICAgICAgICB9CiAgICAgICAgaWYgKGNsb3NlKSBtYXJrLnRvID0gdGhpcy50ZXh0Lmxlbmd0aDsKICAgICAgfQogICAgfSwKICAgIGZpeE1hcmtTdGFydHM6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgbWsgPSB0aGlzLm1hcmtlZDsKICAgICAgaWYgKCFtaykgcmV0dXJuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKQogICAgICAgIGlmIChta1tpXS5mcm9tID09IG51bGwpIG1rW2ldLmZyb20gPSAwOwogICAgfSwKICAgIGFkZE1hcms6IGZ1bmN0aW9uKG1hcmspIHsKICAgICAgbWFyay5hdHRhY2godGhpcyk7CiAgICAgIGlmICh0aGlzLm1hcmtlZCA9PSBudWxsKSB0aGlzLm1hcmtlZCA9IFtdOwogICAgICB0aGlzLm1hcmtlZC5wdXNoKG1hcmspOwogICAgICB0aGlzLm1hcmtlZC5zb3J0KGZ1bmN0aW9uKGEsIGIpe3JldHVybiAoYS5mcm9tIHx8IDApIC0gKGIuZnJvbSB8fCAwKTt9KTsKICAgIH0sCiAgICAvLyBSdW4gdGhlIGdpdmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIHVwZGF0ZSB0aGUgc3R5bGVzCiAgICAvLyBhcnJheSwgd2hpY2ggY29udGFpbnMgYWx0ZXJuYXRpbmcgZnJhZ21lbnRzIG9mIHRleHQgYW5kIENTUwogICAgLy8gY2xhc3Nlcy4KICAgIGhpZ2hsaWdodDogZnVuY3Rpb24obW9kZSwgc3RhdGUsIHRhYlNpemUpIHsKICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGhpcy50ZXh0LCB0YWJTaXplKSwgc3QgPSB0aGlzLnN0eWxlcywgcG9zID0gMDsKICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgY3VyV29yZCA9IHN0WzBdLCBwcmV2V29yZDsKICAgICAgaWYgKHRoaXMudGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIHN1YnN0ciA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0uc3RhcnQsIHN0cmVhbS5wb3MpOwogICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAgICAgaWYgKHBvcyAmJiBzdFtwb3MtMV0gPT0gc3R5bGUpCiAgICAgICAgICBzdFtwb3MtMl0gKz0gc3Vic3RyOwogICAgICAgIGVsc2UgaWYgKHN1YnN0cikgewogICAgICAgICAgaWYgKCFjaGFuZ2VkICYmIChzdFtwb3MrMV0gIT0gc3R5bGUgfHwgKHBvcyAmJiBzdFtwb3MtMl0gIT0gcHJldldvcmQpKSkgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICBzdFtwb3MrK10gPSBzdWJzdHI7IHN0W3BvcysrXSA9IHN0eWxlOwogICAgICAgICAgcHJldldvcmQgPSBjdXJXb3JkOyBjdXJXb3JkID0gc3RbcG9zXTsKICAgICAgICB9CiAgICAgICAgLy8gR2l2ZSB1cCB3aGVuIGxpbmUgaXMgcmlkaWN1bG91c2x5IGxvbmcKICAgICAgICBpZiAoc3RyZWFtLnBvcyA+IDUwMDApIHsKICAgICAgICAgIHN0W3BvcysrXSA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0ucG9zKTsgc3RbcG9zKytdID0gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3QubGVuZ3RoICE9IHBvcykge3N0Lmxlbmd0aCA9IHBvczsgY2hhbmdlZCA9IHRydWU7fQogICAgICBpZiAocG9zICYmIHN0W3Bvcy0yXSAhPSBwcmV2V29yZCkgY2hhbmdlZCA9IHRydWU7CiAgICAgIC8vIFNob3J0IGxpbmVzIHdpdGggc2ltcGxlIGhpZ2hsaWdodHMgcmV0dXJuIG51bGwsIGFuZCBhcmUKICAgICAgLy8gY291bnRlZCBhcyBjaGFuZ2VkIGJ5IHRoZSBkcml2ZXIgYmVjYXVzZSB0aGV5IGFyZSBsaWtlbHkgdG8KICAgICAgLy8gaGlnaGxpZ2h0IHRoZSBzYW1lIHdheSBpbiB2YXJpb3VzIGNvbnRleHRzLgogICAgICByZXR1cm4gY2hhbmdlZCB8fCAoc3QubGVuZ3RoIDwgNSAmJiB0aGlzLnRleHQubGVuZ3RoIDwgMTAgPyBudWxsIDogZmFsc2UpOwogICAgfSwKICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCiAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihtb2RlLCBzdGF0ZSwgY2gpIHsKICAgICAgdmFyIHR4dCA9IHRoaXMudGV4dCwgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0eHQpOwogICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IGNoICYmICFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LAogICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZSB8fCBudWxsLAogICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZX07CiAgICB9LAogICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKHRhYlNpemUpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy50ZXh0LCBudWxsLCB0YWJTaXplKTt9LAogICAgLy8gUHJvZHVjZXMgYW4gSFRNTCBmcmFnbWVudCBmb3IgdGhlIGxpbmUsIHRha2luZyBzZWxlY3Rpb24sCiAgICAvLyBtYXJraW5nLCBhbmQgaGlnaGxpZ2h0aW5nIGludG8gYWNjb3VudC4KICAgIGdldEhUTUw6IGZ1bmN0aW9uKG1ha2VUYWIsIGVuZEF0KSB7CiAgICAgIHZhciBodG1sID0gW10sIGZpcnN0ID0gdHJ1ZSwgY29sID0gMDsKICAgICAgZnVuY3Rpb24gc3Bhbih0ZXh0LCBzdHlsZSkgewogICAgICAgIGlmICghdGV4dCkgcmV0dXJuOwogICAgICAgIC8vIFdvcmsgYXJvdW5kIGEgYnVnIHdoZXJlLCBpbiBzb21lIGNvbXBhdCBtb2RlcywgSUUgaWdub3JlcyBsZWFkaW5nIHNwYWNlcwogICAgICAgIGlmIChmaXJzdCAmJiBpZSAmJiB0ZXh0LmNoYXJBdCgwKSA9PSAiICIpIHRleHQgPSAiXHUwMGEwIiArIHRleHQuc2xpY2UoMSk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICBpZiAodGV4dC5pbmRleE9mKCJcdCIpID09IC0xKSB7CiAgICAgICAgICBjb2wgKz0gdGV4dC5sZW5ndGg7CiAgICAgICAgICB2YXIgZXNjYXBlZCA9IGh0bWxFc2NhcGUodGV4dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhciBlc2NhcGVkID0gIiI7CiAgICAgICAgICBmb3IgKHZhciBwb3MgPSAwOzspIHsKICAgICAgICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZigiXHQiLCBwb3MpOwogICAgICAgICAgICBpZiAoaWR4ID09IC0xKSB7CiAgICAgICAgICAgICAgZXNjYXBlZCArPSBodG1sRXNjYXBlKHRleHQuc2xpY2UocG9zKSk7CiAgICAgICAgICAgICAgY29sICs9IHRleHQubGVuZ3RoIC0gcG9zOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbCArPSBpZHggLSBwb3M7CiAgICAgICAgICAgICAgdmFyIHRhYiA9IG1ha2VUYWIoY29sKTsKICAgICAgICAgICAgICBlc2NhcGVkICs9IGh0bWxFc2NhcGUodGV4dC5zbGljZShwb3MsIGlkeCkpICsgdGFiLmh0bWw7CiAgICAgICAgICAgICAgY29sICs9IHRhYi53aWR0aDsKICAgICAgICAgICAgICBwb3MgPSBpZHggKyAxOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdHlsZSkgaHRtbC5wdXNoKCc8c3BhbiBjbGFzcz0iJywgc3R5bGUsICciPicsIGVzY2FwZWQsICI8L3NwYW4+Iik7CiAgICAgICAgZWxzZSBodG1sLnB1c2goZXNjYXBlZCk7CiAgICAgIH0KICAgICAgdmFyIHN0ID0gdGhpcy5zdHlsZXMsIGFsbFRleHQgPSB0aGlzLnRleHQsIG1hcmtlZCA9IHRoaXMubWFya2VkOwogICAgICB2YXIgbGVuID0gYWxsVGV4dC5sZW5ndGg7CiAgICAgIGlmIChlbmRBdCAhPSBudWxsKSBsZW4gPSBNYXRoLm1pbihlbmRBdCwgbGVuKTsKICAgICAgZnVuY3Rpb24gc3R5bGVUb0NsYXNzKHN0eWxlKSB7CiAgICAgICAgaWYgKCFzdHlsZSkgcmV0dXJuIG51bGw7CiAgICAgICAgcmV0dXJuICJjbS0iICsgc3R5bGUucmVwbGFjZSgvICsvZywgIiBjbS0iKTsKICAgICAgfQoKICAgICAgaWYgKCFhbGxUZXh0ICYmIGVuZEF0ID09IG51bGwpCiAgICAgICAgc3BhbigiICIpOwogICAgICBlbHNlIGlmICghbWFya2VkIHx8ICFtYXJrZWQubGVuZ3RoKQogICAgICAgIGZvciAodmFyIGkgPSAwLCBjaCA9IDA7IGNoIDwgbGVuOyBpKz0yKSB7CiAgICAgICAgICB2YXIgc3RyID0gc3RbaV0sIHN0eWxlID0gc3RbaSsxXSwgbCA9IHN0ci5sZW5ndGg7CiAgICAgICAgICBpZiAoY2ggKyBsID4gbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgbGVuIC0gY2gpOwogICAgICAgICAgY2ggKz0gbDsKICAgICAgICAgIHNwYW4oc3RyLCBzdHlsZVRvQ2xhc3Moc3R5bGUpKTsKICAgICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHZhciBwb3MgPSAwLCBpID0gMCwgdGV4dCA9ICIiLCBzdHlsZSwgc2cgPSAwOwogICAgICAgIHZhciBuZXh0Q2hhbmdlID0gbWFya2VkWzBdLmZyb20gfHwgMCwgbWFya3MgPSBbXSwgbWFya3BvcyA9IDA7CiAgICAgICAgZnVuY3Rpb24gYWR2YW5jZU1hcmtzKCkgewogICAgICAgICAgdmFyIG07CiAgICAgICAgICB3aGlsZSAobWFya3BvcyA8IG1hcmtlZC5sZW5ndGggJiYKICAgICAgICAgICAgICAgICAoKG0gPSBtYXJrZWRbbWFya3Bvc10pLmZyb20gPT0gcG9zIHx8IG0uZnJvbSA9PSBudWxsKSkgewogICAgICAgICAgICBpZiAobS5zdHlsZSAhPSBudWxsKSBtYXJrcy5wdXNoKG0pOwogICAgICAgICAgICArK21hcmtwb3M7CiAgICAgICAgICB9CiAgICAgICAgICBuZXh0Q2hhbmdlID0gbWFya3BvcyA8IG1hcmtlZC5sZW5ndGggPyBtYXJrZWRbbWFya3Bvc10uZnJvbSA6IEluZmluaXR5OwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICB2YXIgdG8gPSBtYXJrc1tpXS50byB8fCBJbmZpbml0eTsKICAgICAgICAgICAgaWYgKHRvID09IHBvcykgbWFya3Muc3BsaWNlKGktLSwgMSk7CiAgICAgICAgICAgIGVsc2UgbmV4dENoYW5nZSA9IE1hdGgubWluKHRvLCBuZXh0Q2hhbmdlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdmFyIG0gPSAwOwogICAgICAgIHdoaWxlIChwb3MgPCBsZW4pIHsKICAgICAgICAgIGlmIChuZXh0Q2hhbmdlID09IHBvcykgYWR2YW5jZU1hcmtzKCk7CiAgICAgICAgICB2YXIgdXB0byA9IE1hdGgubWluKGxlbiwgbmV4dENoYW5nZSk7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgICBpZiAodGV4dCkgewogICAgICAgICAgICAgIHZhciBlbmQgPSBwb3MgKyB0ZXh0Lmxlbmd0aDsKICAgICAgICAgICAgICB2YXIgYXBwbGllZFN0eWxlID0gc3R5bGU7CiAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBtYXJrcy5sZW5ndGg7ICsraikKICAgICAgICAgICAgICAgIGFwcGxpZWRTdHlsZSA9IChhcHBsaWVkU3R5bGUgPyBhcHBsaWVkU3R5bGUgKyAiICIgOiAiIikgKyBtYXJrc1tqXS5zdHlsZTsKICAgICAgICAgICAgICBzcGFuKGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3MpIDogdGV4dCwgYXBwbGllZFN0eWxlKTsKICAgICAgICAgICAgICBpZiAoZW5kID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJlYWs7fQogICAgICAgICAgICAgIHBvcyA9IGVuZDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0ZXh0ID0gc3RbaSsrXTsgc3R5bGUgPSBzdHlsZVRvQ2xhc3Moc3RbaSsrXSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBodG1sLmpvaW4oIiIpOwogICAgfSwKICAgIGNsZWFuVXA6IGZ1bmN0aW9uKCkgewogICAgICB0aGlzLnBhcmVudCA9IG51bGw7CiAgICAgIGlmICh0aGlzLm1hcmtlZCkKICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMubWFya2VkLmxlbmd0aDsgaSA8IGU7ICsraSkgdGhpcy5tYXJrZWRbaV0uZGV0YWNoKHRoaXMpOwogICAgfQogIH07CiAgLy8gVXRpbGl0eSB1c2VkIGJ5IHJlcGxhY2UgYW5kIHNwbGl0IGFib3ZlCiAgZnVuY3Rpb24gY29weVN0eWxlcyhmcm9tLCB0bywgc291cmNlLCBkZXN0KSB7CiAgICBmb3IgKHZhciBpID0gMCwgcG9zID0gMCwgc3RhdGUgPSAwOyBwb3MgPCB0bzsgaSs9MikgewogICAgICB2YXIgcGFydCA9IHNvdXJjZVtpXSwgZW5kID0gcG9zICsgcGFydC5sZW5ndGg7CiAgICAgIGlmIChzdGF0ZSA9PSAwKSB7CiAgICAgICAgaWYgKGVuZCA+IGZyb20pIGRlc3QucHVzaChwYXJ0LnNsaWNlKGZyb20gLSBwb3MsIE1hdGgubWluKHBhcnQubGVuZ3RoLCB0byAtIHBvcykpLCBzb3VyY2VbaSsxXSk7CiAgICAgICAgaWYgKGVuZCA+PSBmcm9tKSBzdGF0ZSA9IDE7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gMSkgewogICAgICAgIGlmIChlbmQgPiB0bykgZGVzdC5wdXNoKHBhcnQuc2xpY2UoMCwgdG8gLSBwb3MpLCBzb3VyY2VbaSsxXSk7CiAgICAgICAgZWxzZSBkZXN0LnB1c2gocGFydCwgc291cmNlW2krMV0pOwogICAgICB9CiAgICAgIHBvcyA9IGVuZDsKICAgIH0KICB9CgogIC8vIERhdGEgc3RydWN0dXJlIHRoYXQgaG9sZHMgdGhlIHNlcXVlbmNlIG9mIGxpbmVzLgogIGZ1bmN0aW9uIExlYWZDaHVuayhsaW5lcykgewogICAgdGhpcy5saW5lcyA9IGxpbmVzOwogICAgdGhpcy5wYXJlbnQgPSBudWxsOwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBsaW5lcy5sZW5ndGgsIGhlaWdodCA9IDA7IGkgPCBlOyArK2kpIHsKICAgICAgbGluZXNbaV0ucGFyZW50ID0gdGhpczsKICAgICAgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKICAgIH0KICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwogIH0KICBMZWFmQ2h1bmsucHJvdG90eXBlID0gewogICAgY2h1bmtTaXplOiBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMubGluZXMubGVuZ3RoOyB9LAogICAgcmVtb3ZlOiBmdW5jdGlvbihhdCwgbiwgY2FsbGJhY2tzKSB7CiAgICAgIGZvciAodmFyIGkgPSBhdCwgZSA9IGF0ICsgbjsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBsaW5lID0gdGhpcy5saW5lc1tpXTsKICAgICAgICB0aGlzLmhlaWdodCAtPSBsaW5lLmhlaWdodDsKICAgICAgICBsaW5lLmNsZWFuVXAoKTsKICAgICAgICBpZiAobGluZS5oYW5kbGVycykKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbGluZS5oYW5kbGVycy5sZW5ndGg7ICsraikgY2FsbGJhY2tzLnB1c2gobGluZS5oYW5kbGVyc1tqXSk7CiAgICAgIH0KICAgICAgdGhpcy5saW5lcy5zcGxpY2UoYXQsIG4pOwogICAgfSwKICAgIGNvbGxhcHNlOiBmdW5jdGlvbihsaW5lcykgewogICAgICBsaW5lcy5zcGxpY2UuYXBwbHkobGluZXMsIFtsaW5lcy5sZW5ndGgsIDBdLmNvbmNhdCh0aGlzLmxpbmVzKSk7CiAgICB9LAogICAgaW5zZXJ0SGVpZ2h0OiBmdW5jdGlvbihhdCwgbGluZXMsIGhlaWdodCkgewogICAgICB0aGlzLmhlaWdodCArPSBoZWlnaHQ7CiAgICAgIHRoaXMubGluZXMuc3BsaWNlLmFwcGx5KHRoaXMubGluZXMsIFthdCwgMF0uY29uY2F0KGxpbmVzKSk7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSBsaW5lc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgfSwKICAgIGl0ZXJOOiBmdW5jdGlvbihhdCwgbiwgb3ApIHsKICAgICAgZm9yICh2YXIgZSA9IGF0ICsgbjsgYXQgPCBlOyArK2F0KQogICAgICAgIGlmIChvcCh0aGlzLmxpbmVzW2F0XSkpIHJldHVybiB0cnVlOwogICAgfQogIH07CiAgZnVuY3Rpb24gQnJhbmNoQ2h1bmsoY2hpbGRyZW4pIHsKICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjsKICAgIHZhciBzaXplID0gMCwgaGVpZ2h0ID0gMDsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgIHZhciBjaCA9IGNoaWxkcmVuW2ldOwogICAgICBzaXplICs9IGNoLmNodW5rU2l6ZSgpOyBoZWlnaHQgKz0gY2guaGVpZ2h0OwogICAgICBjaC5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdGhpcy5zaXplID0gc2l6ZTsKICAgIHRoaXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgdGhpcy5wYXJlbnQgPSBudWxsOwogIH0KICBCcmFuY2hDaHVuay5wcm90b3R5cGUgPSB7CiAgICBjaHVua1NpemU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy5zaXplOyB9LAogICAgcmVtb3ZlOiBmdW5jdGlvbihhdCwgbiwgY2FsbGJhY2tzKSB7CiAgICAgIHRoaXMuc2l6ZSAtPSBuOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChhdCA8IHN6KSB7CiAgICAgICAgICB2YXIgcm0gPSBNYXRoLm1pbihuLCBzeiAtIGF0KSwgb2xkSGVpZ2h0ID0gY2hpbGQuaGVpZ2h0OwogICAgICAgICAgY2hpbGQucmVtb3ZlKGF0LCBybSwgY2FsbGJhY2tzKTsKICAgICAgICAgIHRoaXMuaGVpZ2h0IC09IG9sZEhlaWdodCAtIGNoaWxkLmhlaWdodDsKICAgICAgICAgIGlmIChzeiA9PSBybSkgeyB0aGlzLmNoaWxkcmVuLnNwbGljZShpLS0sIDEpOyBjaGlsZC5wYXJlbnQgPSBudWxsOyB9CiAgICAgICAgICBpZiAoKG4gLT0gcm0pID09IDApIGJyZWFrOwogICAgICAgICAgYXQgPSAwOwogICAgICAgIH0gZWxzZSBhdCAtPSBzejsKICAgICAgfQogICAgICBpZiAodGhpcy5zaXplIC0gbiA8IDI1KSB7CiAgICAgICAgdmFyIGxpbmVzID0gW107CiAgICAgICAgdGhpcy5jb2xsYXBzZShsaW5lcyk7CiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtuZXcgTGVhZkNodW5rKGxpbmVzKV07CiAgICAgICAgdGhpcy5jaGlsZHJlblswXS5wYXJlbnQgPSB0aGlzOwogICAgICB9CiAgICB9LAogICAgY29sbGFwc2U6IGZ1bmN0aW9uKGxpbmVzKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHRoaXMuY2hpbGRyZW5baV0uY29sbGFwc2UobGluZXMpOwogICAgfSwKICAgIGluc2VydDogZnVuY3Rpb24oYXQsIGxpbmVzKSB7CiAgICAgIHZhciBoZWlnaHQgPSAwOwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgaGVpZ2h0ICs9IGxpbmVzW2ldLmhlaWdodDsKICAgICAgdGhpcy5pbnNlcnRIZWlnaHQoYXQsIGxpbmVzLCBoZWlnaHQpOwogICAgfSwKICAgIGluc2VydEhlaWdodDogZnVuY3Rpb24oYXQsIGxpbmVzLCBoZWlnaHQpIHsKICAgICAgdGhpcy5zaXplICs9IGxpbmVzLmxlbmd0aDsKICAgICAgdGhpcy5oZWlnaHQgKz0gaGVpZ2h0OwogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICAgICAgdmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltpXSwgc3ogPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgICBpZiAoYXQgPD0gc3opIHsKICAgICAgICAgIGNoaWxkLmluc2VydEhlaWdodChhdCwgbGluZXMsIGhlaWdodCk7CiAgICAgICAgICBpZiAoY2hpbGQubGluZXMgJiYgY2hpbGQubGluZXMubGVuZ3RoID4gNTApIHsKICAgICAgICAgICAgd2hpbGUgKGNoaWxkLmxpbmVzLmxlbmd0aCA+IDUwKSB7CiAgICAgICAgICAgICAgdmFyIHNwaWxsZWQgPSBjaGlsZC5saW5lcy5zcGxpY2UoY2hpbGQubGluZXMubGVuZ3RoIC0gMjUsIDI1KTsKICAgICAgICAgICAgICB2YXIgbmV3bGVhZiA9IG5ldyBMZWFmQ2h1bmsoc3BpbGxlZCk7CiAgICAgICAgICAgICAgY2hpbGQuaGVpZ2h0IC09IG5ld2xlYWYuaGVpZ2h0OwogICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4uc3BsaWNlKGkgKyAxLCAwLCBuZXdsZWFmKTsKICAgICAgICAgICAgICBuZXdsZWFmLnBhcmVudCA9IHRoaXM7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5tYXliZVNwaWxsKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYXQgLT0gc3o7CiAgICAgIH0KICAgIH0sCiAgICBtYXliZVNwaWxsOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMuY2hpbGRyZW4ubGVuZ3RoIDw9IDEwKSByZXR1cm47CiAgICAgIHZhciBtZSA9IHRoaXM7CiAgICAgIGRvIHsKICAgICAgICB2YXIgc3BpbGxlZCA9IG1lLmNoaWxkcmVuLnNwbGljZShtZS5jaGlsZHJlbi5sZW5ndGggLSA1LCA1KTsKICAgICAgICB2YXIgc2libGluZyA9IG5ldyBCcmFuY2hDaHVuayhzcGlsbGVkKTsKICAgICAgICBpZiAoIW1lLnBhcmVudCkgeyAvLyBCZWNvbWUgdGhlIHBhcmVudCBub2RlCiAgICAgICAgICB2YXIgY29weSA9IG5ldyBCcmFuY2hDaHVuayhtZS5jaGlsZHJlbik7CiAgICAgICAgICBjb3B5LnBhcmVudCA9IG1lOwogICAgICAgICAgbWUuY2hpbGRyZW4gPSBbY29weSwgc2libGluZ107CiAgICAgICAgICBtZSA9IGNvcHk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lLnNpemUgLT0gc2libGluZy5zaXplOwogICAgICAgICAgbWUuaGVpZ2h0IC09IHNpYmxpbmcuaGVpZ2h0OwogICAgICAgICAgdmFyIG15SW5kZXggPSBpbmRleE9mKG1lLnBhcmVudC5jaGlsZHJlbiwgbWUpOwogICAgICAgICAgbWUucGFyZW50LmNoaWxkcmVuLnNwbGljZShteUluZGV4ICsgMSwgMCwgc2libGluZyk7CiAgICAgICAgfQogICAgICAgIHNpYmxpbmcucGFyZW50ID0gbWUucGFyZW50OwogICAgICB9IHdoaWxlIChtZS5jaGlsZHJlbi5sZW5ndGggPiAxMCk7CiAgICAgIG1lLnBhcmVudC5tYXliZVNwaWxsKCk7CiAgICB9LAogICAgaXRlcjogZnVuY3Rpb24oZnJvbSwgdG8sIG9wKSB7IHRoaXMuaXRlck4oZnJvbSwgdG8gLSBmcm9tLCBvcCk7IH0sCiAgICBpdGVyTjogZnVuY3Rpb24oYXQsIG4sIG9wKSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdGhpcy5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChhdCA8IHN6KSB7CiAgICAgICAgICB2YXIgdXNlZCA9IE1hdGgubWluKG4sIHN6IC0gYXQpOwogICAgICAgICAgaWYgKGNoaWxkLml0ZXJOKGF0LCB1c2VkLCBvcCkpIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKChuIC09IHVzZWQpID09IDApIGJyZWFrOwogICAgICAgICAgYXQgPSAwOwogICAgICAgIH0gZWxzZSBhdCAtPSBzejsKICAgICAgfQogICAgfQogIH07CgogIGZ1bmN0aW9uIGdldExpbmVBdChjaHVuaywgbikgewogICAgd2hpbGUgKCFjaHVuay5saW5lcykgewogICAgICBmb3IgKHZhciBpID0gMDs7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgYnJlYWs7IH0KICAgICAgICBuIC09IHN6OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY2h1bmsubGluZXNbbl07CiAgfQogIGZ1bmN0aW9uIGxpbmVObyhsaW5lKSB7CiAgICBpZiAobGluZS5wYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB2YXIgY3VyID0gbGluZS5wYXJlbnQsIG5vID0gaW5kZXhPZihjdXIubGluZXMsIGxpbmUpOwogICAgZm9yICh2YXIgY2h1bmsgPSBjdXIucGFyZW50OyBjaHVuazsgY3VyID0gY2h1bmssIGNodW5rID0gY2h1bmsucGFyZW50KSB7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gY2h1bmsuY2hpbGRyZW4ubGVuZ3RoOyA7ICsraSkgewogICAgICAgIGlmIChjaHVuay5jaGlsZHJlbltpXSA9PSBjdXIpIGJyZWFrOwogICAgICAgIG5vICs9IGNodW5rLmNoaWxkcmVuW2ldLmNodW5rU2l6ZSgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm87CiAgfQogIGZ1bmN0aW9uIGxpbmVBdEhlaWdodChjaHVuaywgaCkgewogICAgdmFyIG4gPSAwOwogICAgb3V0ZXI6IGRvIHsKICAgICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjaHVuay5jaGlsZHJlbi5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgY2hpbGQgPSBjaHVuay5jaGlsZHJlbltpXSwgY2ggPSBjaGlsZC5oZWlnaHQ7CiAgICAgICAgaWYgKGggPCBjaCkgeyBjaHVuayA9IGNoaWxkOyBjb250aW51ZSBvdXRlcjsgfQogICAgICAgIGggLT0gY2g7CiAgICAgICAgbiArPSBjaGlsZC5jaHVua1NpemUoKTsKICAgICAgfQogICAgICByZXR1cm4gbjsKICAgIH0gd2hpbGUgKCFjaHVuay5saW5lcyk7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICB2YXIgbGluZSA9IGNodW5rLmxpbmVzW2ldLCBsaCA9IGxpbmUuaGVpZ2h0OwogICAgICBpZiAoaCA8IGxoKSBicmVhazsKICAgICAgaCAtPSBsaDsKICAgIH0KICAgIHJldHVybiBuICsgaTsKICB9CiAgZnVuY3Rpb24gaGVpZ2h0QXRMaW5lKGNodW5rLCBuKSB7CiAgICB2YXIgaCA9IDA7CiAgICBvdXRlcjogZG8gewogICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNodW5rLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBjaGlsZCA9IGNodW5rLmNoaWxkcmVuW2ldLCBzeiA9IGNoaWxkLmNodW5rU2l6ZSgpOwogICAgICAgIGlmIChuIDwgc3opIHsgY2h1bmsgPSBjaGlsZDsgY29udGludWUgb3V0ZXI7IH0KICAgICAgICBuIC09IHN6OwogICAgICAgIGggKz0gY2hpbGQuaGVpZ2h0OwogICAgICB9CiAgICAgIHJldHVybiBoOwogICAgfSB3aGlsZSAoIWNodW5rLmxpbmVzKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSBoICs9IGNodW5rLmxpbmVzW2ldLmhlaWdodDsKICAgIHJldHVybiBoOwogIH0KCiAgLy8gVGhlIGhpc3Rvcnkgb2JqZWN0ICdjaHVua3MnIGNoYW5nZXMgdGhhdCBhcmUgbWFkZSBjbG9zZSB0b2dldGhlcgogIC8vIGFuZCBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBpbnRvIGJpZ2dlciB1bmRvYWJsZSB1bml0cy4KICBmdW5jdGlvbiBIaXN0b3J5KCkgewogICAgdGhpcy50aW1lID0gMDsKICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdOwogIH0KICBIaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgIGFkZENoYW5nZTogZnVuY3Rpb24oc3RhcnQsIGFkZGVkLCBvbGQpIHsKICAgICAgdGhpcy51bmRvbmUubGVuZ3RoID0gMDsKICAgICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGN1ciA9IHRoaXMuZG9uZVt0aGlzLmRvbmUubGVuZ3RoIC0gMV0sIGxhc3QgPSBjdXIgJiYgY3VyW2N1ci5sZW5ndGggLSAxXTsKICAgICAgdmFyIGR0aW1lID0gdGltZSAtIHRoaXMudGltZTsKICAgICAgaWYgKGR0aW1lID4gNDAwIHx8ICFsYXN0KSB7CiAgICAgICAgdGhpcy5kb25lLnB1c2goW3tzdGFydDogc3RhcnQsIGFkZGVkOiBhZGRlZCwgb2xkOiBvbGR9XSk7CiAgICAgIH0gZWxzZSBpZiAobGFzdC5zdGFydCA+IHN0YXJ0ICsgb2xkLmxlbmd0aCB8fCBsYXN0LnN0YXJ0ICsgbGFzdC5hZGRlZCA8IHN0YXJ0IC0gbGFzdC5hZGRlZCArIGxhc3Qub2xkLmxlbmd0aCkgewogICAgICAgIGN1ci5wdXNoKHtzdGFydDogc3RhcnQsIGFkZGVkOiBhZGRlZCwgb2xkOiBvbGR9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgb2xkb2ZmID0gMDsKICAgICAgICBpZiAoc3RhcnQgPCBsYXN0LnN0YXJ0KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gbGFzdC5zdGFydCAtIHN0YXJ0IC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgICAgIGxhc3Qub2xkLnVuc2hpZnQob2xkW2ldKTsKICAgICAgICAgIG9sZG9mZiA9IE1hdGgubWluKDAsIGFkZGVkIC0gb2xkLmxlbmd0aCk7CiAgICAgICAgICBsYXN0LmFkZGVkICs9IGxhc3Quc3RhcnQgLSBzdGFydCArIG9sZG9mZjsKICAgICAgICAgIGxhc3Quc3RhcnQgPSBzdGFydDsKICAgICAgICB9IGVsc2UgaWYgKGxhc3Quc3RhcnQgPCBzdGFydCkgewogICAgICAgICAgb2xkb2ZmID0gc3RhcnQgLSBsYXN0LnN0YXJ0OwogICAgICAgICAgYWRkZWQgKz0gb2xkb2ZmOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBpID0gbGFzdC5hZGRlZCAtIG9sZG9mZiwgZSA9IG9sZC5sZW5ndGg7IGkgPCBlOyArK2kpCiAgICAgICAgICBsYXN0Lm9sZC5wdXNoKG9sZFtpXSk7CiAgICAgICAgaWYgKGxhc3QuYWRkZWQgPCBhZGRlZCkgbGFzdC5hZGRlZCA9IGFkZGVkOwogICAgICB9CiAgICAgIHRoaXMudGltZSA9IHRpbWU7CiAgICB9CiAgfTsKCiAgZnVuY3Rpb24gc3RvcE1ldGhvZCgpIHtlX3N0b3AodGhpcyk7fQogIC8vIEVuc3VyZSBhbiBldmVudCBoYXMgYSBzdG9wIG1ldGhvZC4KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wTWV0aG9kOwogICAgcmV0dXJuIGV2ZW50OwogIH0KCiAgZnVuY3Rpb24gZV9wcmV2ZW50RGVmYXVsdChlKSB7CiAgICBpZiAoZS5wcmV2ZW50RGVmYXVsdCkgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgZWxzZSBlLnJldHVyblZhbHVlID0gZmFsc2U7CiAgfQogIGZ1bmN0aW9uIGVfc3RvcFByb3BhZ2F0aW9uKGUpIHsKICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgIGVsc2UgZS5jYW5jZWxCdWJibGUgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBlX3N0b3AoZSkge2VfcHJldmVudERlZmF1bHQoZSk7IGVfc3RvcFByb3BhZ2F0aW9uKGUpO30KICBDb2RlTWlycm9yLmVfc3RvcCA9IGVfc3RvcDsKICBDb2RlTWlycm9yLmVfcHJldmVudERlZmF1bHQgPSBlX3ByZXZlbnREZWZhdWx0OwogIENvZGVNaXJyb3IuZV9zdG9wUHJvcGFnYXRpb24gPSBlX3N0b3BQcm9wYWdhdGlvbjsKCiAgZnVuY3Rpb24gZV90YXJnZXQoZSkge3JldHVybiBlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQ7fQogIGZ1bmN0aW9uIGVfYnV0dG9uKGUpIHsKICAgIGlmIChlLndoaWNoKSByZXR1cm4gZS53aGljaDsKICAgIGVsc2UgaWYgKGUuYnV0dG9uICYgMSkgcmV0dXJuIDE7CiAgICBlbHNlIGlmIChlLmJ1dHRvbiAmIDIpIHJldHVybiAzOwogICAgZWxzZSBpZiAoZS5idXR0b24gJiA0KSByZXR1cm4gMjsKICB9CgogIC8vIEFsbG93IDNyZC1wYXJ0eSBjb2RlIHRvIG92ZXJyaWRlIGV2ZW50IHByb3BlcnRpZXMgYnkgYWRkaW5nIGFuIG92ZXJyaWRlCiAgLy8gb2JqZWN0IHRvIGFuIGV2ZW50IG9iamVjdC4KICBmdW5jdGlvbiBlX3Byb3AoZSwgcHJvcCkgewogICAgdmFyIG92ZXJyaWRkZW4gPSBlLm92ZXJyaWRlICYmIGUub3ZlcnJpZGUuaGFzT3duUHJvcGVydHkocHJvcCk7CiAgICByZXR1cm4gb3ZlcnJpZGRlbiA/IGUub3ZlcnJpZGVbcHJvcF0gOiBlW3Byb3BdOwogIH0KCiAgLy8gRXZlbnQgaGFuZGxlciByZWdpc3RyYXRpb24uIElmIGRpc2Nvbm5lY3QgaXMgdHJ1ZSwgaXQnbGwgcmV0dXJuIGEKICAvLyBmdW5jdGlvbiB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyLgogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlciwgZGlzY29ubmVjdCkgewogICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikgewogICAgICBub2RlLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpOwogICAgICBpZiAoZGlzY29ubmVjdCkgcmV0dXJuIGZ1bmN0aW9uKCkge25vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBoYW5kbGVyLCBmYWxzZSk7fTsKICAgIH0KICAgIGVsc2UgewogICAgICB2YXIgd3JhcEhhbmRsZXIgPSBmdW5jdGlvbihldmVudCkge2hhbmRsZXIoZXZlbnQgfHwgd2luZG93LmV2ZW50KTt9OwogICAgICBub2RlLmF0dGFjaEV2ZW50KCJvbiIgKyB0eXBlLCB3cmFwSGFuZGxlcik7CiAgICAgIGlmIChkaXNjb25uZWN0KSByZXR1cm4gZnVuY3Rpb24oKSB7bm9kZS5kZXRhY2hFdmVudCgib24iICsgdHlwZSwgd3JhcEhhbmRsZXIpO307CiAgICB9CiAgfQogIENvZGVNaXJyb3IuY29ubmVjdCA9IGNvbm5lY3Q7CgogIGZ1bmN0aW9uIERlbGF5ZWQoKSB7dGhpcy5pZCA9IG51bGw7fQogIERlbGF5ZWQucHJvdG90eXBlID0ge3NldDogZnVuY3Rpb24obXMsIGYpIHtjbGVhclRpbWVvdXQodGhpcy5pZCk7IHRoaXMuaWQgPSBzZXRUaW1lb3V0KGYsIG1zKTt9fTsKCiAgdmFyIFBhc3MgPSBDb2RlTWlycm9yLlBhc3MgPSB7dG9TdHJpbmc6IGZ1bmN0aW9uKCl7cmV0dXJuICJDb2RlTWlycm9yLlBhc3MiO319OwoKICB2YXIgZ2Vja28gPSAvZ2Vja29cL1xkezd9L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgaWUgPSAvTVNJRSBcZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgaWVfbHQ5ID0gL01TSUUgWzEtOF1cYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKICB2YXIgd2Via2l0ID0gL1dlYktpdFwvLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpOwogIHZhciBjaHJvbWUgPSAvQ2hyb21lXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CiAgdmFyIGtodG1sID0gL0tIVE1MXC8vLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7CgogIC8vIERldGVjdCBkcmFnLWFuZC1kcm9wCiAgdmFyIGRyYWdBbmREcm9wID0gZnVuY3Rpb24oKSB7CiAgICAvLyBUaGVyZSBpcyAqc29tZSoga2luZCBvZiBkcmFnLWFuZC1kcm9wIHN1cHBvcnQgaW4gSUU2LTgsIGJ1dCBJCiAgICAvLyBjb3VsZG4ndCBnZXQgaXQgdG8gd29yayB5ZXQuCiAgICBpZiAoaWVfbHQ5KSByZXR1cm4gZmFsc2U7CiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICByZXR1cm4gImRyYWdnYWJsZSIgaW4gZGl2IHx8ICJkcmFnRHJvcCIgaW4gZGl2OwogIH0oKTsKCiAgdmFyIGxpbmVTZXAgPSAiXG4iOwogIC8vIEZlYXR1cmUtZGV0ZWN0IHdoZXRoZXIgbmV3bGluZXMgaW4gdGV4dGFyZWFzIGFyZSBjb252ZXJ0ZWQgdG8gXHJcbgogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgdGUudmFsdWUgPSAiZm9vXG5iYXIiOwogICAgaWYgKHRlLnZhbHVlLmluZGV4T2YoIlxyIikgPiAtMSkgbGluZVNlcCA9ICJcclxuIjsKICB9KCkpOwoKICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KICAvLyBVc2VkIG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgogIGZ1bmN0aW9uIGNvdW50Q29sdW1uKHN0cmluZywgZW5kLCB0YWJTaXplKSB7CiAgICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgZW5kID0gc3RyaW5nLnNlYXJjaCgvW15cc1x1MDBhMF0vKTsKICAgICAgaWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwLCBuID0gMDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09ICJcdCIpIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7CiAgICAgIGVsc2UgKytuOwogICAgfQogICAgcmV0dXJuIG47CiAgfQoKICBmdW5jdGlvbiBjb21wdXRlZFN0eWxlKGVsdCkgewogICAgaWYgKGVsdC5jdXJyZW50U3R5bGUpIHJldHVybiBlbHQuY3VycmVudFN0eWxlOwogICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsdCwgbnVsbCk7CiAgfQoKICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGJ5IGZvbGxvd2luZyB0aGUgb2Zmc2V0UGFyZW50IGNoYWluLgogIC8vIElmIHNjcmVlbj09dHJ1ZSwgaXQgcmV0dXJucyBzY3JlZW4gKHJhdGhlciB0aGFuIHBhZ2UpIGNvb3JkaW5hdGVzLgogIGZ1bmN0aW9uIGVsdE9mZnNldChub2RlLCBzY3JlZW4pIHsKICAgIHZhciBib2QgPSBub2RlLm93bmVyRG9jdW1lbnQuYm9keTsKICAgIHZhciB4ID0gMCwgeSA9IDAsIHNraXBCb2R5ID0gZmFsc2U7CiAgICBmb3IgKHZhciBuID0gbm9kZTsgbjsgbiA9IG4ub2Zmc2V0UGFyZW50KSB7CiAgICAgIHZhciBvbCA9IG4ub2Zmc2V0TGVmdCwgb3QgPSBuLm9mZnNldFRvcDsKICAgICAgLy8gRmlyZWZveCByZXBvcnRzIHdlaXJkIGludmVydGVkIG9mZnNldHMgd2hlbiB0aGUgYm9keSBoYXMgYSBib3JkZXIuCiAgICAgIGlmIChuID09IGJvZCkgeyB4ICs9IE1hdGguYWJzKG9sKTsgeSArPSBNYXRoLmFicyhvdCk7IH0KICAgICAgZWxzZSB7IHggKz0gb2wsIHkgKz0gb3Q7IH0KICAgICAgaWYgKHNjcmVlbiAmJiBjb21wdXRlZFN0eWxlKG4pLnBvc2l0aW9uID09ICJmaXhlZCIpCiAgICAgICAgc2tpcEJvZHkgPSB0cnVlOwogICAgfQogICAgdmFyIGUgPSBzY3JlZW4gJiYgIXNraXBCb2R5ID8gbnVsbCA6IGJvZDsKICAgIGZvciAodmFyIG4gPSBub2RlLnBhcmVudE5vZGU7IG4gIT0gZTsgbiA9IG4ucGFyZW50Tm9kZSkKICAgICAgaWYgKG4uc2Nyb2xsTGVmdCAhPSBudWxsKSB7IHggLT0gbi5zY3JvbGxMZWZ0OyB5IC09IG4uc2Nyb2xsVG9wO30KICAgIHJldHVybiB7bGVmdDogeCwgdG9wOiB5fTsKICB9CiAgLy8gVXNlIHRoZSBmYXN0ZXIgYW5kIHNhbmVyIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2Qgd2hlbiBwb3NzaWJsZS4KICBpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPSBudWxsKSBlbHRPZmZzZXQgPSBmdW5jdGlvbihub2RlLCBzY3JlZW4pIHsKICAgIC8vIFRha2UgdGhlIHBhcnRzIG9mIGJvdW5kaW5nIGNsaWVudCByZWN0IHRoYXQgd2UgYXJlIGludGVyZXN0ZWQgaW4gc28gd2UgYXJlIGFibGUgdG8gZWRpdCBpZiBuZWVkIGJlLAogICAgLy8gc2luY2UgdGhlIHJldHVybmVkIHZhbHVlIGNhbm5vdCBiZSBjaGFuZ2VkIGV4dGVybmFsbHkgKHRoZXkgYXJlIGtlcHQgaW4gc3luYyBhcyB0aGUgZWxlbWVudCBtb3ZlcyB3aXRoaW4gdGhlIHBhZ2UpCiAgICB0cnkgeyB2YXIgYm94ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsgYm94ID0geyB0b3A6IGJveC50b3AsIGxlZnQ6IGJveC5sZWZ0IH07IH0KICAgIGNhdGNoKGUpIHsgYm94ID0ge3RvcDogMCwgbGVmdDogMH07IH0KICAgIGlmICghc2NyZWVuKSB7CiAgICAgIC8vIEdldCB0aGUgdG9wbGV2ZWwgc2Nyb2xsLCB3b3JraW5nIGFyb3VuZCBicm93c2VyIGRpZmZlcmVuY2VzLgogICAgICBpZiAod2luZG93LnBhZ2VZT2Zmc2V0ID09IG51bGwpIHsKICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5LnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHQuc2Nyb2xsVG9wID09IG51bGwpIHQgPSBkb2N1bWVudC5ib2R5OwogICAgICAgIGJveC50b3AgKz0gdC5zY3JvbGxUb3A7IGJveC5sZWZ0ICs9IHQuc2Nyb2xsTGVmdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBib3gudG9wICs9IHdpbmRvdy5wYWdlWU9mZnNldDsgYm94LmxlZnQgKz0gd2luZG93LnBhZ2VYT2Zmc2V0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYm94OwogIH07CgogIC8vIEdldCBhIG5vZGUncyB0ZXh0IGNvbnRlbnQuCiAgZnVuY3Rpb24gZWx0VGV4dChub2RlKSB7CiAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudCB8fCBub2RlLmlubmVyVGV4dCB8fCBub2RlLm5vZGVWYWx1ZSB8fCAiIjsKICB9CiAgZnVuY3Rpb24gc2VsZWN0SW5wdXQobm9kZSkgewogICAgaWYgKGlvcykgeyAvLyBNb2JpbGUgU2FmYXJpIGFwcGFyZW50bHkgaGFzIGEgYnVnIHdoZXJlIHNlbGVjdCgpIGlzIGJyb2tlbi4KICAgICAgbm9kZS5zZWxlY3Rpb25TdGFydCA9IDA7CiAgICAgIG5vZGUuc2VsZWN0aW9uRW5kID0gbm9kZS52YWx1ZS5sZW5ndGg7CiAgICB9IGVsc2Ugbm9kZS5zZWxlY3QoKTsKICB9CgogIC8vIE9wZXJhdGlvbnMgb24ge2xpbmUsIGNofSBvYmplY3RzLgogIGZ1bmN0aW9uIHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNoID09IGIuY2g7fQogIGZ1bmN0aW9uIHBvc0xlc3MoYSwgYikge3JldHVybiBhLmxpbmUgPCBiLmxpbmUgfHwgKGEubGluZSA9PSBiLmxpbmUgJiYgYS5jaCA8IGIuY2gpO30KICBmdW5jdGlvbiBjb3B5UG9zKHgpIHtyZXR1cm4ge2xpbmU6IHgubGluZSwgY2g6IHguY2h9O30KCiAgdmFyIGVzY2FwZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKICBmdW5jdGlvbiBodG1sRXNjYXBlKHN0cikgewogICAgZXNjYXBlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0cjsKICAgIHJldHVybiBlc2NhcGVFbGVtZW50LmlubmVySFRNTDsKICB9CiAgLy8gUmVjZW50IChsYXRlIDIwMTEpIE9wZXJhIGJldGFzIGluc2VydCBib2d1cyBuZXdsaW5lcyBhdCB0aGUgc3RhcnQKICAvLyBvZiB0aGUgdGV4dENvbnRlbnQsIHNvIHdlIHN0cmlwIHRob3NlLgogIGlmIChodG1sRXNjYXBlKCJhIikgPT0gIlxuYSIpCiAgICBodG1sRXNjYXBlID0gZnVuY3Rpb24oc3RyKSB7CiAgICAgIGVzY2FwZUVsZW1lbnQudGV4dENvbnRlbnQgPSBzdHI7CiAgICAgIHJldHVybiBlc2NhcGVFbGVtZW50LmlubmVySFRNTC5zbGljZSgxKTsKICAgIH07CiAgLy8gU29tZSBJRXMgZG9uJ3QgcHJlc2VydmUgdGFicyB0aHJvdWdoIGlubmVySFRNTAogIGVsc2UgaWYgKGh0bWxFc2NhcGUoIlx0IikgIT0gIlx0IikKICAgIGh0bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICAgICAgZXNjYXBlRWxlbWVudC5pbm5lckhUTUwgPSAiIjsKICAgICAgZXNjYXBlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShzdHIpKTsKICAgICAgcmV0dXJuIGVzY2FwZUVsZW1lbnQuaW5uZXJIVE1MOwogICAgfTsKICBDb2RlTWlycm9yLmh0bWxFc2NhcGUgPSBodG1sRXNjYXBlOwoKICAvLyBVc2VkIHRvIHBvc2l0aW9uIHRoZSBjdXJzb3IgYWZ0ZXIgYW4gdW5kby9yZWRvIGJ5IGZpbmRpbmcgdGhlCiAgLy8gbGFzdCBlZGl0ZWQgY2hhcmFjdGVyLgogIGZ1bmN0aW9uIGVkaXRFbmQoZnJvbSwgdG8pIHsKICAgIGlmICghdG8pIHJldHVybiAwOwogICAgaWYgKCFmcm9tKSByZXR1cm4gdG8ubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IGZyb20ubGVuZ3RoLCBqID0gdG8ubGVuZ3RoOyBpID49IDAgJiYgaiA+PSAwOyAtLWksIC0taikKICAgICAgaWYgKGZyb20uY2hhckF0KGkpICE9IHRvLmNoYXJBdChqKSkgYnJlYWs7CiAgICByZXR1cm4gaiArIDE7CiAgfQoKICBmdW5jdGlvbiBpbmRleE9mKGNvbGxlY3Rpb24sIGVsdCkgewogICAgaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbHQpOwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBjb2xsZWN0aW9uLmxlbmd0aDsgaSA8IGU7ICsraSkKICAgICAgaWYgKGNvbGxlY3Rpb25baV0gPT0gZWx0KSByZXR1cm4gaTsKICAgIHJldHVybiAtMTsKICB9CiAgZnVuY3Rpb24gaXNXb3JkQ2hhcihjaCkgewogICAgcmV0dXJuIC9cdy8udGVzdChjaCkgfHwgY2gudG9VcHBlckNhc2UoKSAhPSBjaC50b0xvd2VyQ2FzZSgpOwogIH0KCiAgLy8gU2VlIGlmICIiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KICAvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQgbGluZXMuCiAgdmFyIHNwbGl0TGluZXMgPSAiXG5cbmIiLnNwbGl0KC9cbi8pLmxlbmd0aCAhPSAzID8gZnVuY3Rpb24oc3RyaW5nKSB7CiAgICB2YXIgcG9zID0gMCwgbmwsIHJlc3VsdCA9IFtdOwogICAgd2hpbGUgKChubCA9IHN0cmluZy5pbmRleE9mKCJcbiIsIHBvcykpID4gLTEpIHsKICAgICAgcmVzdWx0LnB1c2goc3RyaW5nLnNsaWNlKHBvcywgc3RyaW5nLmNoYXJBdChubC0xKSA9PSAiXHIiID8gbmwgLSAxIDogbmwpKTsKICAgICAgcG9zID0gbmwgKyAxOwogICAgfQogICAgcmVzdWx0LnB1c2goc3RyaW5nLnNsaWNlKHBvcykpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9IDogZnVuY3Rpb24oc3RyaW5nKXtyZXR1cm4gc3RyaW5nLnNwbGl0KC9ccj9cbi8pO307CiAgQ29kZU1pcnJvci5zcGxpdExpbmVzID0gc3BsaXRMaW5lczsKCiAgdmFyIGhhc1NlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24gPyBmdW5jdGlvbih0ZSkgewogICAgdHJ5IHsgcmV0dXJuIHRlLnNlbGVjdGlvblN0YXJ0ICE9IHRlLnNlbGVjdGlvbkVuZDsgfQogICAgY2F0Y2goZSkgeyByZXR1cm4gZmFsc2U7IH0KICB9IDogZnVuY3Rpb24odGUpIHsKICAgIHRyeSB7dmFyIHJhbmdlID0gdGUub3duZXJEb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTt9CiAgICBjYXRjaChlKSB7fQogICAgaWYgKCFyYW5nZSB8fCByYW5nZS5wYXJlbnRFbGVtZW50KCkgIT0gdGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiByYW5nZS5jb21wYXJlRW5kUG9pbnRzKCJTdGFydFRvRW5kIiwgcmFuZ2UpICE9IDA7CiAgfTsKCiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJudWxsIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4ge3Rva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtzdHJlYW0uc2tpcFRvRW5kKCk7fX07CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwgIm51bGwiKTsKCiAgdmFyIGtleU5hbWVzID0gezM6ICJFbnRlciIsIDg6ICJCYWNrc3BhY2UiLCA5OiAiVGFiIiwgMTM6ICJFbnRlciIsIDE2OiAiU2hpZnQiLCAxNzogIkN0cmwiLCAxODogIkFsdCIsCiAgICAgICAgICAgICAgICAgIDE5OiAiUGF1c2UiLCAyMDogIkNhcHNMb2NrIiwgMjc6ICJFc2MiLCAzMjogIlNwYWNlIiwgMzM6ICJQYWdlVXAiLCAzNDogIlBhZ2VEb3duIiwgMzU6ICJFbmQiLAogICAgICAgICAgICAgICAgICAzNjogIkhvbWUiLCAzNzogIkxlZnQiLCAzODogIlVwIiwgMzk6ICJSaWdodCIsIDQwOiAiRG93biIsIDQ0OiAiUHJpbnRTY3JuIiwgNDU6ICJJbnNlcnQiLAogICAgICAgICAgICAgICAgICA0NjogIkRlbGV0ZSIsIDU5OiAiOyIsIDkxOiAiTW9kIiwgOTI6ICJNb2QiLCA5MzogIk1vZCIsIDEyNzogIkRlbGV0ZSIsIDE4NjogIjsiLCAxODc6ICI9IiwgMTg4OiAiLCIsCiAgICAgICAgICAgICAgICAgIDE4OTogIi0iLCAxOTA6ICIuIiwgMTkxOiAiLyIsIDE5MjogImAiLCAyMTk6ICJbIiwgMjIwOiAiXFwiLCAyMjE6ICJdIiwgMjIyOiAiJyIsIDYzMjc2OiAiUGFnZVVwIiwKICAgICAgICAgICAgICAgICAgNjMyNzc6ICJQYWdlRG93biIsIDYzMjc1OiAiRW5kIiwgNjMyNzM6ICJIb21lIiwgNjMyMzQ6ICJMZWZ0IiwgNjMyMzI6ICJVcCIsIDYzMjM1OiAiUmlnaHQiLAogICAgICAgICAgICAgICAgICA2MzIzMzogIkRvd24iLCA2MzMwMjogIkluc2VydCIsIDYzMjcyOiAiRGVsZXRlIn07CiAgQ29kZU1pcnJvci5rZXlOYW1lcyA9IGtleU5hbWVzOwogIChmdW5jdGlvbigpIHsKICAgIC8vIE51bWJlciBrZXlzCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIGtleU5hbWVzW2kgKyA0OF0gPSBTdHJpbmcoaSk7CiAgICAvLyBBbHBoYWJldGljIGtleXMKICAgIGZvciAodmFyIGkgPSA2NTsgaSA8PSA5MDsgaSsrKSBrZXlOYW1lc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7CiAgICAvLyBGdW5jdGlvbiBrZXlzCiAgICBmb3IgKHZhciBpID0gMTsgaSA8PSAxMjsgaSsrKSBrZXlOYW1lc1tpICsgMTExXSA9IGtleU5hbWVzW2kgKyA2MzIzNV0gPSAiRiIgKyBpOwogIH0pKCk7CgogIHJldHVybiBDb2RlTWlycm9yOwp9KSgpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/closetag.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqDQogKiBUYWctY2xvc2VyIGV4dGVuc2lvbiBmb3IgQ29kZU1pcnJvci4NCiAqDQogKiBUaGlzIGV4dGVuc2lvbiBhZGRzIGEgImNsb3NlVGFnIiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBrZXkgYmluZGluZ3MgdG8gDQogKiBpbnNlcnQgYSBtYXRjaGluZyBlbmQgdGFnIGFmdGVyIHRoZSAiPiIgY2hhcmFjdGVyIG9mIGEgc3RhcnQgdGFnIGhhcyBiZWVuIHR5cGVkLiAgSXQgY2FuDQogKiBhbHNvIGNvbXBsZXRlICI8LyIgaWYgYSBtYXRjaGluZyBzdGFydCB0YWcgaXMgZm91bmQuICBJdCB3aWxsIGNvcnJlY3RseSBpZ25vcmUgc2lnbmFsDQogKiBjaGFyYWN0ZXJzIGZvciBlbXB0eSB0YWdzLCBjb21tZW50cywgQ0RBVEEsIGV0Yy4NCiAqDQogKiBUaGUgZnVuY3Rpb24gZGVwZW5kcyBvbiBpbnRlcm5hbCBwYXJzZXIgc3RhdGUgdG8gaWRlbnRpZnkgdGFncy4gIEl0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUNCiAqIGZvbGxvd2luZyBDb2RlTWlycm9yIG1vZGVzIGFuZCB3aWxsIGlnbm9yZSBhbGwgb3RoZXJzOg0KICogLSBodG1sbWl4ZWQNCiAqIC0geG1sDQogKiAtIHhtbHB1cmUNCiAqDQogKiBTZWUgZGVtb3MvY2xvc2V0YWcuaHRtbCBmb3IgYSB1c2FnZSBleGFtcGxlLg0KICogDQogKiBAYXV0aG9yIE5hdGhhbiBXaWxsaWFtcyA8bmF0aGFuQG5sd2lsbGlhLm5ldD4NCiAqIENvbnRyaWJ1dGVkIHVuZGVyIHRoZSBzYW1lIGxpY2Vuc2UgdGVybXMgYXMgQ29kZU1pcnJvci4NCiAqLw0KKGZ1bmN0aW9uKCkgew0KCS8qKiBPcHRpb24gdGhhdCBhbGxvd3MgdGFnIGNsb3NpbmcgYmVoYXZpb3IgdG8gYmUgdG9nZ2xlZC4gIERlZmF1bHQgaXMgdHJ1ZS4gKi8NCglDb2RlTWlycm9yLmRlZmF1bHRzWydjbG9zZVRhZ0VuYWJsZWQnXSA9IHRydWU7DQoJDQoJLyoqIEFycmF5IG9mIHRhZyBuYW1lcyB0byBhZGQgaW5kZW50YXRpb24gYWZ0ZXIgdGhlIHN0YXJ0IHRhZyBmb3IuICBEZWZhdWx0IGlzIHRoZSBsaXN0IG9mIGJsb2NrLWxldmVsIGh0bWwgdGFncy4gKi8NCglDb2RlTWlycm9yLmRlZmF1bHRzWydjbG9zZVRhZ0luZGVudCddID0gWydhcHBsZXQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2J1dHRvbicsICdkaXYnLCAnZGwnLCAnZmllbGRzZXQnLCAnZm9ybScsICdmcmFtZXNldCcsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2h0bWwnLCAnaWZyYW1lJywgJ2xheWVyJywgJ2xlZ2VuZCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdzZWxlY3QnLCAndGFibGUnLCAndWwnXTsNCg0KCS8qKg0KCSAqIENhbGwgZHVyaW5nIGtleSBwcm9jZXNzaW5nIHRvIGNsb3NlIHRhZ3MuICBIYW5kbGVzIHRoZSBrZXkgZXZlbnQgaWYgdGhlIHRhZyBpcyBjbG9zZWQsIG90aGVyd2lzZSB0aHJvd3MgQ29kZU1pcnJvci5QYXNzLg0KCSAqIC0gY206IFRoZSBlZGl0b3IgaW5zdGFuY2UuDQoJICogLSBjaDogVGhlIGNoYXJhY3RlciBiZWluZyBwcm9jZXNzZWQuDQoJICogLSBpbmRlbnQ6IE9wdGlvbmFsLiAgT21pdCBvciBwYXNzIHRydWUgdG8gdXNlIHRoZSBkZWZhdWx0IGluZGVudGF0aW9uIHRhZyBsaXN0IGRlZmluZWQgaW4gdGhlICdjbG9zZVRhZ0luZGVudCcgb3B0aW9uLg0KCSAqICAgUGFzcyBmYWxzZSB0byBkaXNhYmxlIGluZGVudGF0aW9uLiAgUGFzcyBhbiBhcnJheSB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBsaXN0IG9mIHRhZyBuYW1lcy4NCgkgKi8NCglDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiY2xvc2VUYWciLCBmdW5jdGlvbihjbSwgY2gsIGluZGVudCkgew0KCQlpZiAoIWNtLmdldE9wdGlvbignY2xvc2VUYWdFbmFibGVkJykpIHsNCgkJCXRocm93IENvZGVNaXJyb3IuUGFzczsNCgkJfQ0KCQkNCgkJdmFyIG1vZGUgPSBjbS5nZXRPcHRpb24oJ21vZGUnKTsNCgkJDQoJCWlmIChtb2RlID09ICd0ZXh0L2h0bWwnKSB7DQoJCQ0KCQkJLyoNCgkJCSAqIFJlbGV2YW50IHN0cnVjdHVyZSBvZiB0b2tlbjoNCgkJCSAqDQoJCQkgKiBodG1sbWl4ZWQNCgkJCSAqIAkJY2xhc3NOYW1lDQoJCQkgKiAJCXN0YXRlDQoJCQkgKiAJCQlodG1sU3RhdGUNCgkJCSAqIAkJCQl0eXBlDQoJCQkgKiAJCQkJY29udGV4dA0KCQkJICogCQkJCQl0YWdOYW1lDQoJCQkgKiAJCQltb2RlDQoJCQkgKiANCgkJCSAqIHhtbA0KCQkJICogCQljbGFzc05hbWUNCgkJCSAqIAkJc3RhdGUNCgkJCSAqIAkJCXRhZ05hbWUNCgkJCSAqIAkJCXR5cGUNCgkJCSAqLw0KCQkNCgkJCXZhciBwb3MgPSBjbS5nZXRDdXJzb3IoKTsNCgkJCXZhciB0b2sgPSBjbS5nZXRUb2tlbkF0KHBvcyk7DQoJCQl2YXIgc3RhdGUgPSB0b2suc3RhdGU7DQoJCQkNCgkJCWlmIChzdGF0ZS5tb2RlICYmIHN0YXRlLm1vZGUgIT0gJ2h0bWwnKSB7DQoJCQkJdGhyb3cgQ29kZU1pcnJvci5QYXNzOyAvLyBXaXRoIGh0bWxtaXhlZCwgd2Ugb25seSBjYXJlIGFib3V0IHRoZSBodG1sIHN1Yi1tb2RlLg0KCQkJfQ0KCQkJDQoJCQlpZiAoY2ggPT0gJz4nKSB7DQoJCQkJdmFyIHR5cGUgPSBzdGF0ZS5odG1sU3RhdGUgPyBzdGF0ZS5odG1sU3RhdGUudHlwZSA6IHN0YXRlLnR5cGU7IC8vIGh0bWxtaXhlZCA6IHhtbA0KCQkJCQ0KCQkJCWlmICh0b2suY2xhc3NOYW1lID09ICd0YWcnICYmIHR5cGUgPT0gJ2Nsb3NlVGFnJykgew0KCQkJCQl0aHJvdyBDb2RlTWlycm9yLlBhc3M7IC8vIERvbid0IHByb2Nlc3MgdGhlICc+JyBhdCB0aGUgZW5kIG9mIGFuIGVuZC10YWcuDQoJCQkJfQ0KCQkJDQoJCQkJY20ucmVwbGFjZVNlbGVjdGlvbignPicpOyAvLyBNb2RlIHN0YXRlIHdvbid0IHVwZGF0ZSB1bnRpbCB3ZSBmaW5pc2ggdGhlIHRhZy4NCgkJCQlwb3MgPSB7bGluZTogcG9zLmxpbmUsIGNoOiBwb3MuY2ggKyAxfTsNCgkJCQljbS5zZXRDdXJzb3IocG9zKTsNCgkJDQoJCQkJdG9rID0gY20uZ2V0VG9rZW5BdChjbS5nZXRDdXJzb3IoKSk7DQoJCQkJc3RhdGUgPSB0b2suc3RhdGU7DQoJCQkJdHlwZSA9IHN0YXRlLmh0bWxTdGF0ZSA/IHN0YXRlLmh0bWxTdGF0ZS50eXBlIDogc3RhdGUudHlwZTsgLy8gaHRtbG1peGVkIDogeG1sDQoNCgkJCQlpZiAodG9rLmNsYXNzTmFtZSA9PSAndGFnJyAmJiB0eXBlICE9ICdzZWxmY2xvc2VUYWcnKSB7DQoJCQkJCXZhciB0YWdOYW1lID0gc3RhdGUuaHRtbFN0YXRlID8gc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSA6IHN0YXRlLnRhZ05hbWU7IC8vIGh0bWxtaXhlZCA6IHhtbA0KCQkJCQlpZiAodGFnTmFtZS5sZW5ndGggPiAwKSB7DQoJCQkJCQlpbnNlcnRFbmRUYWcoY20sIGluZGVudCwgcG9zLCB0YWdOYW1lKTsNCgkJCQkJfQ0KCQkJCQlyZXR1cm47DQoJCQkJfQ0KCQkJCQ0KCQkJCS8vIFVuZG8gdGhlICc+JyBpbnNlcnQgYW5kIGFsbG93IGNtIHRvIGhhbmRsZSB0aGUga2V5IGluc3RlYWQuDQoJCQkJY20uc2V0U2VsZWN0aW9uKHtsaW5lOiBwb3MubGluZSwgY2g6IHBvcy5jaCAtIDF9LCBwb3MpOw0KCQkJCWNtLnJlcGxhY2VTZWxlY3Rpb24oIiIpOw0KCQkJDQoJCQl9IGVsc2UgaWYgKGNoID09ICcvJykgew0KCQkJCWlmICh0b2suY2xhc3NOYW1lID09ICd0YWcnICYmIHRvay5zdHJpbmcgPT0gJzwnKSB7DQoJCQkJCXZhciB0YWdOYW1lID0gc3RhdGUuaHRtbFN0YXRlID8gKHN0YXRlLmh0bWxTdGF0ZS5jb250ZXh0ID8gc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSA6ICcnKSA6IHN0YXRlLmNvbnRleHQudGFnTmFtZTsgLy8gaHRtbG1peGVkIDogeG1sICMgZXh0cmEgaHRtbG1pemVkIGNoZWNrIGlzIGZvciAnPC8nIGVkZ2UgY2FzZQ0KCQkJCQlpZiAodGFnTmFtZS5sZW5ndGggPiAwKSB7DQoJCQkJCQljb21wbGV0ZUVuZFRhZyhjbSwgcG9zLCB0YWdOYW1lKTsNCgkJCQkJCXJldHVybjsNCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJDQoJCX0gZWxzZSBpZiAobW9kZSA9PSAneG1scHVyZScpIHsNCg0KCQkJdmFyIHBvcyA9IGNtLmdldEN1cnNvcigpOw0KCQkJdmFyIHRvayA9IGNtLmdldFRva2VuQXQocG9zKTsNCgkJCXZhciB0YWdOYW1lID0gdG9rLnN0YXRlLmNvbnRleHQudGFnTmFtZTsNCg0KCQkJaWYgKGNoID09ICc+Jykgew0KCQkJCS8vIDxmb28+CQkJdGFnTmFtZT1mb28sIHN0cmluZz1mb28NCgkJCQkvLyA8Zm9vIC8+CQkJdGFnTmFtZT1mb28sIHN0cmluZz0vCQkjIGlnbm9yZQ0KCQkJCS8vIDxmb28+PC9mb28+CQl0YWdOYW1lPWZvbywgc3RyaW5nPS9mb28JIyBpZ25vcmUNCgkJCQlpZiAodG9rLnN0cmluZyA9PSB0YWdOYW1lKSB7DQoJCQkJCWNtLnJlcGxhY2VTZWxlY3Rpb24oJz4nKTsgLy8gcGFyaXR5IHcvaHRtbCBtb2Rlcw0KCQkJCQlwb3MgPSB7bGluZTogcG9zLmxpbmUsIGNoOiBwb3MuY2ggKyAxfTsNCgkJCQkJY20uc2V0Q3Vyc29yKHBvcyk7DQoJCQkJCQ0KCQkJCQlpbnNlcnRFbmRUYWcoY20sIGluZGVudCwgcG9zLCB0YWdOYW1lKTsNCgkJCQkJcmV0dXJuOw0KCQkJCX0NCgkJCQkNCgkJCX0gZWxzZSBpZiAoY2ggPT0gJy8nKSB7DQoJCQkJLy8gPGZvbyAvCQkJdGFnTmFtZT1mb28sIHN0cmluZz0gCQkjIGlnbm9yZQ0KCQkJCS8vIDxmb28+PC8JCQl0YWdOYW1lPWZvbywgc3RyaW5nPTwNCgkJCQlpZiAodG9rLnN0cmluZyA9PSAnPCcpIHsNCgkJCQkJY29tcGxldGVFbmRUYWcoY20sIHBvcywgdGFnTmFtZSk7DQoJCQkJCXJldHVybjsNCgkJCQl9DQoJCQl9DQoJCX0NCgkJDQoJCXRocm93IENvZGVNaXJyb3IuUGFzczsgLy8gQnViYmxlIGlmIG5vdCBoYW5kbGVkDQoJfSk7DQoNCglmdW5jdGlvbiBpbnNlcnRFbmRUYWcoY20sIGluZGVudCwgcG9zLCB0YWdOYW1lKSB7DQoJCWlmIChzaG91bGRJbmRlbnQoY20sIGluZGVudCwgdGFnTmFtZSkpIHsNCgkJCWNtLnJlcGxhY2VTZWxlY3Rpb24oJ1xuXG48LycgKyB0YWdOYW1lICsgJz4nLCAnZW5kJyk7DQoJCQljbS5pbmRlbnRMaW5lKHBvcy5saW5lICsgMSk7DQoJCQljbS5pbmRlbnRMaW5lKHBvcy5saW5lICsgMik7DQoJCQljbS5zZXRDdXJzb3Ioe2xpbmU6IHBvcy5saW5lICsgMSwgY2g6IGNtLmdldExpbmUocG9zLmxpbmUgKyAxKS5sZW5ndGh9KTsNCgkJfSBlbHNlIHsNCgkJCWNtLnJlcGxhY2VTZWxlY3Rpb24oJzwvJyArIHRhZ05hbWUgKyAnPicpOw0KCQkJY20uc2V0Q3Vyc29yKHBvcyk7DQoJCX0NCgl9DQoJDQoJZnVuY3Rpb24gc2hvdWxkSW5kZW50KGNtLCBpbmRlbnQsIHRhZ05hbWUpIHsNCgkJaWYgKHR5cGVvZiBpbmRlbnQgPT0gJ3VuZGVmaW5lZCcgfHwgaW5kZW50ID09IG51bGwgfHwgaW5kZW50ID09IHRydWUpIHsNCgkJCWluZGVudCA9IGNtLmdldE9wdGlvbignY2xvc2VUYWdJbmRlbnQnKTsNCgkJfQ0KCQlpZiAoIWluZGVudCkgew0KCQkJaW5kZW50ID0gW107DQoJCX0NCgkJcmV0dXJuIGluZGV4T2YoaW5kZW50LCB0YWdOYW1lLnRvTG93ZXJDYXNlKCkpICE9IC0xOw0KCX0NCgkNCgkvLyBDJlAgZnJvbSBjb2RlbWlycm9yLmpzLi4ud291bGQgYmUgbmljZSBpZiB0aGlzIHdlcmUgdmlzaWJsZSB0byB1dGlsaXRpZXMuDQoJZnVuY3Rpb24gaW5kZXhPZihjb2xsZWN0aW9uLCBlbHQpIHsNCgkJaWYgKGNvbGxlY3Rpb24uaW5kZXhPZikgcmV0dXJuIGNvbGxlY3Rpb24uaW5kZXhPZihlbHQpOw0KCQlmb3IgKHZhciBpID0gMCwgZSA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgZTsgKytpKQ0KCQkJaWYgKGNvbGxlY3Rpb25baV0gPT0gZWx0KSByZXR1cm4gaTsNCgkJcmV0dXJuIC0xOw0KCX0NCg0KCWZ1bmN0aW9uIGNvbXBsZXRlRW5kVGFnKGNtLCBwb3MsIHRhZ05hbWUpIHsNCgkJY20ucmVwbGFjZVNlbGVjdGlvbignLycgKyB0YWdOYW1lICsgJz4nKTsNCgkJY20uc2V0Q3Vyc29yKHtsaW5lOiBwb3MubGluZSwgY2g6IHBvcy5jaCArIHRhZ05hbWUubGVuZ3RoICsgMiB9KTsNCgl9DQoJDQp9KSgpOw0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItZGlhbG9nIHsKICBwb3NpdGlvbjogcmVsYXRpdmU7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyA+IGRpdiB7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogMDsgbGVmdDogMDsgcmlnaHQ6IDA7CiAgYmFja2dyb3VuZDogd2hpdGU7CiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNlZWU7CiAgei1pbmRleDogMTU7CiAgcGFkZGluZzogLjFlbSAuOGVtOwogIG92ZXJmbG93OiBoaWRkZW47CiAgY29sb3I6ICMzMzM7Cn0KCi5Db2RlTWlycm9yLWRpYWxvZyBpbnB1dCB7CiAgYm9yZGVyOiBub25lOwogIG91dGxpbmU6IG5vbmU7CiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgd2lkdGg6IDIwZW07CiAgY29sb3I6IGluaGVyaXQ7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/dialog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gT3BlbiBzaW1wbGUgZGlhbG9ncyBvbiB0b3Agb2YgYW4gZWRpdG9yLiBSZWxpZXMgb24gZGlhbG9nLmNzcy4KCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiBkaWFsb2dEaXYoY20sIHRlbXBsYXRlKSB7CiAgICB2YXIgd3JhcCA9IGNtLmdldFdyYXBwZXJFbGVtZW50KCk7CiAgICB2YXIgZGlhbG9nID0gd3JhcC5pbnNlcnRCZWZvcmUoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IiksIHdyYXAuZmlyc3RDaGlsZCk7CiAgICBkaWFsb2cuY2xhc3NOYW1lID0gIkNvZGVNaXJyb3ItZGlhbG9nIjsKICAgIGRpYWxvZy5pbm5lckhUTUwgPSAnPGRpdj4nICsgdGVtcGxhdGUgKyAnPC9kaXY+JzsKICAgIHJldHVybiBkaWFsb2c7CiAgfQoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkRpYWxvZyIsIGZ1bmN0aW9uKHRlbXBsYXRlLCBjYWxsYmFjaykgewogICAgdmFyIGRpYWxvZyA9IGRpYWxvZ0Rpdih0aGlzLCB0ZW1wbGF0ZSk7CiAgICB2YXIgY2xvc2VkID0gZmFsc2UsIG1lID0gdGhpczsKICAgIGZ1bmN0aW9uIGNsb3NlKCkgewogICAgICBpZiAoY2xvc2VkKSByZXR1cm47CiAgICAgIGNsb3NlZCA9IHRydWU7CiAgICAgIGRpYWxvZy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGRpYWxvZyk7CiAgICB9CiAgICB2YXIgaW5wID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJpbnB1dCIpWzBdOwogICAgaWYgKGlucCkgewogICAgICBDb2RlTWlycm9yLmNvbm5lY3QoaW5wLCAia2V5ZG93biIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICBpZiAoZS5rZXlDb2RlID09IDEzIHx8IGUua2V5Q29kZSA9PSAyNykgewogICAgICAgICAgQ29kZU1pcnJvci5lX3N0b3AoZSk7CiAgICAgICAgICBjbG9zZSgpOwogICAgICAgICAgbWUuZm9jdXMoKTsKICAgICAgICAgIGlmIChlLmtleUNvZGUgPT0gMTMpIGNhbGxiYWNrKGlucC52YWx1ZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaW5wLmZvY3VzKCk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChpbnAsICJibHVyIiwgY2xvc2UpOwogICAgfQogICAgcmV0dXJuIGNsb3NlOwogIH0pOwoKICBDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigib3BlbkNvbmZpcm0iLCBmdW5jdGlvbih0ZW1wbGF0ZSwgY2FsbGJhY2tzKSB7CiAgICB2YXIgZGlhbG9nID0gZGlhbG9nRGl2KHRoaXMsIHRlbXBsYXRlKTsKICAgIHZhciBidXR0b25zID0gZGlhbG9nLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJidXR0b24iKTsKICAgIHZhciBjbG9zZWQgPSBmYWxzZSwgbWUgPSB0aGlzLCBibHVycmluZyA9IDE7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGNsb3NlZCkgcmV0dXJuOwogICAgICBjbG9zZWQgPSB0cnVlOwogICAgICBkaWFsb2cucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChkaWFsb2cpOwogICAgICBtZS5mb2N1cygpOwogICAgfQogICAgYnV0dG9uc1swXS5mb2N1cygpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidXR0b25zLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBiID0gYnV0dG9uc1tpXTsKICAgICAgKGZ1bmN0aW9uKGNhbGxiYWNrKSB7CiAgICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJjbGljayIsIGZ1bmN0aW9uKGUpIHsKICAgICAgICAgIENvZGVNaXJyb3IuZV9wcmV2ZW50RGVmYXVsdChlKTsKICAgICAgICAgIGNsb3NlKCk7CiAgICAgICAgICBpZiAoY2FsbGJhY2spIGNhbGxiYWNrKG1lKTsKICAgICAgICB9KTsKICAgICAgfSkoY2FsbGJhY2tzW2ldKTsKICAgICAgQ29kZU1pcnJvci5jb25uZWN0KGIsICJibHVyIiwgZnVuY3Rpb24oKSB7CiAgICAgICAgLS1ibHVycmluZzsKICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBpZiAoYmx1cnJpbmcgPD0gMCkgY2xvc2UoKTsgfSwgMjAwKTsKICAgICAgfSk7CiAgICAgIENvZGVNaXJyb3IuY29ubmVjdChiLCAiZm9jdXMiLCBmdW5jdGlvbigpIHsgKytibHVycmluZzsgfSk7CiAgICB9CiAgfSk7Cn0pKCk7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/foldcode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gdGhlIHRhZ1JhbmdlRmluZGVyIGZ1bmN0aW9uIGlzCi8vICAgQ29weXJpZ2h0IChDKSAyMDExIGJ5IERhbmllbCBHbGF6bWFuIDxkYW5pZWxAZ2xhem1hbi5vcmc+Ci8vIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSAoLi4vLi4vTElDRU5TRSkgbGlrZSB0aGUgcmVzdCBvZiBDb2RlTWlycm9yCkNvZGVNaXJyb3IudGFnUmFuZ2VGaW5kZXIgPSBmdW5jdGlvbihjbSwgbGluZSkgewogIHZhciBuYW1lU3RhcnRDaGFyID0gIkEtWl9hLXpcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyRkZcXHUwMzcwLVxcdTAzN0RcXHUwMzdGLVxcdTFGRkZcXHUyMDBDLVxcdTIwMERcXHUyMDcwLVxcdTIxOEZcXHUyQzAwLVxcdTJGRUZcXHUzMDAxLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRkQiOwogIHZhciBuYW1lQ2hhciA9IG5hbWVTdGFydENoYXIgKyAiXC1cLjAtOVxcdTAwQjdcXHUwMzAwLVxcdTAzNkZcXHUyMDNGLVxcdTIwNDAiOwogIHZhciB4bWxOQU1FUmVnRXhwID0gbmV3IFJlZ0V4cCgiXlsiICsgbmFtZVN0YXJ0Q2hhciArICJdWyIgKyBuYW1lQ2hhciArICJdKiIpOwoKICB2YXIgbGluZVRleHQgPSBjbS5nZXRMaW5lKGxpbmUpOwogIHZhciBmb3VuZCA9IGZhbHNlOwogIHZhciB0YWcgPSBudWxsOwogIHZhciBwb3MgPSAwOwogIHdoaWxlICghZm91bmQpIHsKICAgIHBvcyA9IGxpbmVUZXh0LmluZGV4T2YoIjwiLCBwb3MpOwogICAgaWYgKC0xID09IHBvcykgLy8gbm8gdGFnIG9uIGxpbmUKICAgICAgcmV0dXJuOwogICAgaWYgKHBvcyArIDEgPCBsaW5lVGV4dC5sZW5ndGggJiYgbGluZVRleHRbcG9zICsgMV0gPT0gIi8iKSB7IC8vIGNsb3NpbmcgdGFnCiAgICAgIHBvcysrOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIC8vIG9rIHdlIHdlZW0gdG8gaGF2ZSBhIHN0YXJ0IHRhZwogICAgaWYgKCFsaW5lVGV4dC5zdWJzdHIocG9zICsgMSkubWF0Y2goeG1sTkFNRVJlZ0V4cCkpIHsgLy8gbm90IGEgdGFnIG5hbWUuLi4KICAgICAgcG9zKys7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgdmFyIGd0UG9zID0gbGluZVRleHQuaW5kZXhPZigiPiIsIHBvcyArIDEpOwogICAgaWYgKC0xID09IGd0UG9zKSB7IC8vIGVuZCBvZiBzdGFydCB0YWcgbm90IGluIGxpbmUKICAgICAgdmFyIGwgPSBsaW5lICsgMTsKICAgICAgdmFyIGZvdW5kR3QgPSBmYWxzZTsKICAgICAgdmFyIGxhc3RMaW5lID0gY20ubGluZUNvdW50KCk7CiAgICAgIHdoaWxlIChsIDwgbGFzdExpbmUgJiYgIWZvdW5kR3QpIHsKICAgICAgICB2YXIgbHQgPSBjbS5nZXRMaW5lKGwpOwogICAgICAgIHZhciBndCA9IGx0LmluZGV4T2YoIj4iKTsKICAgICAgICBpZiAoLTEgIT0gZ3QpIHsgLy8gZm91bmQgYSA+CiAgICAgICAgICBmb3VuZEd0ID0gdHJ1ZTsKICAgICAgICAgIHZhciBzbGFzaCA9IGx0Lmxhc3RJbmRleE9mKCIvIiwgZ3QpOwogICAgICAgICAgaWYgKC0xICE9IHNsYXNoICYmIHNsYXNoIDwgZ3QpIHsKICAgICAgICAgICAgdmFyIHN0ciA9IGxpbmVUZXh0LnN1YnN0cihzbGFzaCwgZ3QgLSBzbGFzaCArIDEpOwogICAgICAgICAgICBpZiAoIXN0ci5tYXRjaCggL1wvXHMqXD4vICkpIC8vIHllcCwgdGhhdCdzIHRoZSBlbmQgb2YgZW1wdHkgdGFnCiAgICAgICAgICAgICAgcmV0dXJuIGwrMTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbCsrOwogICAgICB9CiAgICAgIGZvdW5kID0gdHJ1ZTsKICAgIH0KICAgIGVsc2UgewogICAgICB2YXIgc2xhc2hQb3MgPSBsaW5lVGV4dC5sYXN0SW5kZXhPZigiLyIsIGd0UG9zKTsKICAgICAgaWYgKC0xID09IHNsYXNoUG9zKSB7IC8vIGNhbm5vdCBiZSBlbXB0eSB0YWcKICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgLy8gZG9uJ3QgY29udGludWUKICAgICAgfQogICAgICBlbHNlIHsgLy8gZW1wdHkgdGFnPwogICAgICAgIC8vIGNoZWNrIGlmIHJlYWxseSBlbXB0eSB0YWcKICAgICAgICB2YXIgc3RyID0gbGluZVRleHQuc3Vic3RyKHNsYXNoUG9zLCBndFBvcyAtIHNsYXNoUG9zICsgMSk7CiAgICAgICAgaWYgKCFzdHIubWF0Y2goIC9cL1xzKlw+LyApKSB7IC8vIGZpbmFsbHkgbm90IGVtcHR5CiAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAvLyBkb24ndCBjb250aW51ZQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kKSB7CiAgICAgIHZhciBzdWJMaW5lID0gbGluZVRleHQuc3Vic3RyKHBvcyArIDEpOwogICAgICB0YWcgPSBzdWJMaW5lLm1hdGNoKHhtbE5BTUVSZWdFeHApOwogICAgICBpZiAodGFnKSB7CiAgICAgICAgLy8gd2UgaGF2ZSBhbiBlbGVtZW50IG5hbWUsIHdvb29ob29vICEKICAgICAgICB0YWcgPSB0YWdbMF07CiAgICAgICAgLy8gZG8gd2UgaGF2ZSB0aGUgY2xvc2UgdGFnIG9uIHNhbWUgbGluZSA/Pz8KICAgICAgICBpZiAoLTEgIT0gbGluZVRleHQuaW5kZXhPZigiPC8iICsgdGFnICsgIj4iLCBwb3MpKSAvLyB5ZXAKICAgICAgICB7CiAgICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyB3ZSBkb24ndCwgc28gd2UgaGF2ZSBhIGNhbmRpZGF0ZS4uLgogICAgICB9CiAgICAgIGVsc2UKICAgICAgICBmb3VuZCA9IGZhbHNlOwogICAgfQogICAgaWYgKCFmb3VuZCkKICAgICAgcG9zKys7CiAgfQoKICBpZiAoZm91bmQpIHsKICAgIHZhciBzdGFydFRhZyA9ICIoXFw8XFwvIiArIHRhZyArICJcXD4pfChcXDwiICsgdGFnICsgIlxcPil8KFxcPCIgKyB0YWcgKyAiXFxzKXwoXFw8IiArIHRhZyArICIkKSI7CiAgICB2YXIgc3RhcnRUYWdSZWdFeHAgPSBuZXcgUmVnRXhwKHN0YXJ0VGFnLCAiZyIpOwogICAgdmFyIGVuZFRhZyA9ICI8LyIgKyB0YWcgKyAiPiI7CiAgICB2YXIgZGVwdGggPSAxOwogICAgdmFyIGwgPSBsaW5lICsgMTsKICAgIHZhciBsYXN0TGluZSA9IGNtLmxpbmVDb3VudCgpOwogICAgd2hpbGUgKGwgPCBsYXN0TGluZSkgewogICAgICBsaW5lVGV4dCA9IGNtLmdldExpbmUobCk7CiAgICAgIHZhciBtYXRjaCA9IGxpbmVUZXh0Lm1hdGNoKHN0YXJ0VGFnUmVnRXhwKTsKICAgICAgaWYgKG1hdGNoKSB7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaC5sZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKG1hdGNoW2ldID09IGVuZFRhZykKICAgICAgICAgICAgZGVwdGgtLTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgZGVwdGgrKzsKICAgICAgICAgIGlmICghZGVwdGgpCiAgICAgICAgICAgIHJldHVybiBsKzE7CiAgICAgICAgfQogICAgICB9CiAgICAgIGwrKzsKICAgIH0KICAgIHJldHVybjsKICB9Cn07CgpDb2RlTWlycm9yLmJyYWNlUmFuZ2VGaW5kZXIgPSBmdW5jdGlvbihjbSwgbGluZSkgewogIHZhciBsaW5lVGV4dCA9IGNtLmdldExpbmUobGluZSk7CiAgdmFyIHN0YXJ0Q2hhciA9IGxpbmVUZXh0Lmxhc3RJbmRleE9mKCJ7Iik7CiAgaWYgKHN0YXJ0Q2hhciA8IDAgfHwgbGluZVRleHQubGFzdEluZGV4T2YoIn0iKSA+IHN0YXJ0Q2hhcikgcmV0dXJuOwogIHZhciB0b2tlblR5cGUgPSBjbS5nZXRUb2tlbkF0KHtsaW5lOiBsaW5lLCBjaDogc3RhcnRDaGFyfSkuY2xhc3NOYW1lOwogIHZhciBjb3VudCA9IDEsIGxhc3RMaW5lID0gY20ubGluZUNvdW50KCksIGVuZDsKICBvdXRlcjogZm9yICh2YXIgaSA9IGxpbmUgKyAxOyBpIDwgbGFzdExpbmU7ICsraSkgewogICAgdmFyIHRleHQgPSBjbS5nZXRMaW5lKGkpLCBwb3MgPSAwOwogICAgZm9yICg7OykgewogICAgICB2YXIgbmV4dE9wZW4gPSB0ZXh0LmluZGV4T2YoInsiLCBwb3MpLCBuZXh0Q2xvc2UgPSB0ZXh0LmluZGV4T2YoIn0iLCBwb3MpOwogICAgICBpZiAobmV4dE9wZW4gPCAwKSBuZXh0T3BlbiA9IHRleHQubGVuZ3RoOwogICAgICBpZiAobmV4dENsb3NlIDwgMCkgbmV4dENsb3NlID0gdGV4dC5sZW5ndGg7CiAgICAgIHBvcyA9IE1hdGgubWluKG5leHRPcGVuLCBuZXh0Q2xvc2UpOwogICAgICBpZiAocG9zID09IHRleHQubGVuZ3RoKSBicmVhazsKICAgICAgaWYgKGNtLmdldFRva2VuQXQoe2xpbmU6IGksIGNoOiBwb3MgKyAxfSkuY2xhc3NOYW1lID09IHRva2VuVHlwZSkgewogICAgICAgIGlmIChwb3MgPT0gbmV4dE9wZW4pICsrY291bnQ7CiAgICAgICAgZWxzZSBpZiAoIS0tY291bnQpIHsgZW5kID0gaTsgYnJlYWsgb3V0ZXI7IH0KICAgICAgfQogICAgICArK3BvczsKICAgIH0KICB9CiAgaWYgKGVuZCA9PSBudWxsIHx8IGVuZCA9PSBsaW5lICsgMSkgcmV0dXJuOwogIHJldHVybiBlbmQ7Cn07CgpDb2RlTWlycm9yLmluZGVudFJhbmdlRmluZGVyID0gZnVuY3Rpb24oY20sIGxpbmUpIHsKICB2YXIgdGFiU2l6ZSA9IGNtLmdldE9wdGlvbigidGFiU2l6ZSIpOwogIHZhciBteUluZGVudCA9IGNtLmdldExpbmVIYW5kbGUobGluZSkuaW5kZW50YXRpb24odGFiU2l6ZSksIGxhc3Q7CiAgZm9yICh2YXIgaSA9IGxpbmUgKyAxLCBlbmQgPSBjbS5saW5lQ291bnQoKTsgaSA8IGVuZDsgKytpKSB7CiAgICB2YXIgaGFuZGxlID0gY20uZ2V0TGluZUhhbmRsZShpKTsKICAgIGlmICghL15ccyokLy50ZXN0KGhhbmRsZS50ZXh0KSkgewogICAgICBpZiAoaGFuZGxlLmluZGVudGF0aW9uKHRhYlNpemUpIDw9IG15SW5kZW50KSBicmVhazsKICAgICAgbGFzdCA9IGk7CiAgICB9CiAgfQogIGlmICghbGFzdCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIGxhc3QgKyAxOwp9OwoKQ29kZU1pcnJvci5uZXdGb2xkRnVuY3Rpb24gPSBmdW5jdGlvbihyYW5nZUZpbmRlciwgbWFya1RleHQpIHsKICB2YXIgZm9sZGVkID0gW107CiAgaWYgKG1hcmtUZXh0ID09IG51bGwpIG1hcmtUZXh0ID0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMnB4OyBjb2xvcjojNjAwIj4mI3gyNWJjOzwvZGl2PiVOJSc7CgogIGZ1bmN0aW9uIGlzRm9sZGVkKGNtLCBuKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvbGRlZC5sZW5ndGg7ICsraSkgewogICAgICB2YXIgc3RhcnQgPSBjbS5saW5lSW5mbyhmb2xkZWRbaV0uc3RhcnQpOwogICAgICBpZiAoIXN0YXJ0KSBmb2xkZWQuc3BsaWNlKGktLSwgMSk7CiAgICAgIGVsc2UgaWYgKHN0YXJ0LmxpbmUgPT0gbikgcmV0dXJuIHtwb3M6IGksIHJlZ2lvbjogZm9sZGVkW2ldfTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGV4cGFuZChjbSwgcmVnaW9uKSB7CiAgICBjbS5jbGVhck1hcmtlcihyZWdpb24uc3RhcnQpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWdpb24uaGlkZGVuLmxlbmd0aDsgKytpKQogICAgICBjbS5zaG93TGluZShyZWdpb24uaGlkZGVuW2ldKTsKICB9CgogIHJldHVybiBmdW5jdGlvbihjbSwgbGluZSkgewogICAgY20ub3BlcmF0aW9uKGZ1bmN0aW9uKCkgewogICAgICB2YXIga25vd24gPSBpc0ZvbGRlZChjbSwgbGluZSk7CiAgICAgIGlmIChrbm93bikgewogICAgICAgIGZvbGRlZC5zcGxpY2Uoa25vd24ucG9zLCAxKTsKICAgICAgICBleHBhbmQoY20sIGtub3duLnJlZ2lvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIGVuZCA9IHJhbmdlRmluZGVyKGNtLCBsaW5lKTsKICAgICAgICBpZiAoZW5kID09IG51bGwpIHJldHVybjsKICAgICAgICB2YXIgaGlkZGVuID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IGxpbmUgKyAxOyBpIDwgZW5kOyArK2kpIHsKICAgICAgICAgIHZhciBoYW5kbGUgPSBjbS5oaWRlTGluZShpKTsKICAgICAgICAgIGlmIChoYW5kbGUpIGhpZGRlbi5wdXNoKGhhbmRsZSk7CiAgICAgICAgfQogICAgICAgIHZhciBmaXJzdCA9IGNtLnNldE1hcmtlcihsaW5lLCBtYXJrVGV4dCk7CiAgICAgICAgdmFyIHJlZ2lvbiA9IHtzdGFydDogZmlyc3QsIGhpZGRlbjogaGlkZGVufTsKICAgICAgICBjbS5vbkRlbGV0ZUxpbmUoZmlyc3QsIGZ1bmN0aW9uKCkgeyBleHBhbmQoY20sIHJlZ2lvbik7IH0pOwogICAgICAgIGZvbGRlZC5wdXNoKHJlZ2lvbik7CiAgICAgIH0KICAgIH0pOwogIH07Cn07Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/formatting.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gPT09PT09PT09PT09PT0gRm9ybWF0dGluZyBleHRlbnNpb25zID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gQSBjb21tb24gc3RvcmFnZSBmb3IgYWxsIG1vZGUtc3BlY2lmaWMgZm9ybWF0dGluZyBmZWF0dXJlcwppZiAoIUNvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMpIENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnMgPSB7fTsKCi8vIFJldHVybnMgdGhlIGV4dGVuc2lvbiBvZiB0aGUgZWRpdG9yJ3MgY3VycmVudCBtb2RlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJnZXRNb2RlRXh0IiwgZnVuY3Rpb24gKCkgewogIHZhciBtbmFtZSA9IENvZGVNaXJyb3IucmVzb2x2ZU1vZGUodGhpcy5nZXRPcHRpb24oIm1vZGUiKSkubmFtZTsKICB2YXIgZXh0ID0gQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1ttbmFtZV07CiAgaWYgKCFleHQpIHRocm93IG5ldyBFcnJvcigiTm8gZXh0ZW5zaW9ucyBmb3VuZCBmb3IgbW9kZSAiICsgbW5hbWUpOwogIHJldHVybiBleHQ7Cn0pOwoKLy8gSWYgdGhlIGN1cnJlbnQgbW9kZSBpcyAnaHRtbG1peGVkJywgcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIGEgbW9kZSBsb2NhdGVkIGF0Ci8vIHRoZSBzcGVjaWZpZWQgcG9zaXRpb24gKGNhbiBiZSBodG1sbWl4ZWQsIGNzcyBvciBqYXZhc2NyaXB0KS4gT3RoZXJ3aXNlLCBzaW1wbHkKLy8gcmV0dXJucyB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBlZGl0b3IncyBjdXJyZW50IG1vZGUuCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJnZXRNb2RlRXh0QXRQb3MiLCBmdW5jdGlvbiAocG9zKSB7CiAgdmFyIHRva2VuID0gdGhpcy5nZXRUb2tlbkF0KHBvcyk7CiAgaWYgKHRva2VuICYmIHRva2VuLnN0YXRlICYmIHRva2VuLnN0YXRlLm1vZGUpCiAgICByZXR1cm4gQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1t0b2tlbi5zdGF0ZS5tb2RlID09ICJodG1sIiA/ICJodG1sbWl4ZWQiIDogdG9rZW4uc3RhdGUubW9kZV07CiAgZWxzZQogICAgcmV0dXJuIHRoaXMuZ2V0TW9kZUV4dCgpOwp9KTsKCi8vIENvbW1lbnQvdW5jb21tZW50IHRoZSBzcGVjaWZpZWQgcmFuZ2UKQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImNvbW1lbnRSYW5nZSIsIGZ1bmN0aW9uIChpc0NvbW1lbnQsIGZyb20sIHRvKSB7CiAgdmFyIGN1ck1vZGUgPSB0aGlzLmdldE1vZGVFeHRBdFBvcyh0aGlzLmdldEN1cnNvcigpKTsKICBpZiAoaXNDb21tZW50KSB7IC8vIENvbW1lbnQgcmFuZ2UKICAgIHZhciBjb21tZW50ZWRUZXh0ID0gdGhpcy5nZXRSYW5nZShmcm9tLCB0byk7CiAgICB0aGlzLnJlcGxhY2VSYW5nZShjdXJNb2RlLmNvbW1lbnRTdGFydCArIHRoaXMuZ2V0UmFuZ2UoZnJvbSwgdG8pICsgY3VyTW9kZS5jb21tZW50RW5kCiAgICAgICwgZnJvbSwgdG8pOwogICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lICYmIGZyb20uY2ggPT0gdG8uY2gpIHsgLy8gQW4gZW1wdHkgY29tbWVudCBpbnNlcnRlZCAtIHB1dCBjdXJzb3IgaW5zaWRlCiAgICAgIHRoaXMuc2V0Q3Vyc29yKGZyb20ubGluZSwgZnJvbS5jaCArIGN1ck1vZGUuY29tbWVudFN0YXJ0Lmxlbmd0aCk7CiAgICB9CiAgfQogIGVsc2UgeyAvLyBVbmNvbW1lbnQgcmFuZ2UKICAgIHZhciBzZWxUZXh0ID0gdGhpcy5nZXRSYW5nZShmcm9tLCB0byk7CiAgICB2YXIgc3RhcnRJbmRleCA9IHNlbFRleHQuaW5kZXhPZihjdXJNb2RlLmNvbW1lbnRTdGFydCk7CiAgICB2YXIgZW5kSW5kZXggPSBzZWxUZXh0Lmxhc3RJbmRleE9mKGN1ck1vZGUuY29tbWVudEVuZCk7CiAgICBpZiAoc3RhcnRJbmRleCA+IC0xICYmIGVuZEluZGV4ID4gLTEgJiYgZW5kSW5kZXggPiBzdGFydEluZGV4KSB7CiAgICAgIC8vIFRha2Ugc3RyaW5nIHRpbGwgY29tbWVudCBzdGFydAogICAgICBzZWxUZXh0ID0gc2VsVGV4dC5zdWJzdHIoMCwgc3RhcnRJbmRleCkKICAgICAgLy8gRnJvbSBjb21tZW50IHN0YXJ0IHRpbGwgY29tbWVudCBlbmQKICAgICAgICArIHNlbFRleHQuc3Vic3RyaW5nKHN0YXJ0SW5kZXggKyBjdXJNb2RlLmNvbW1lbnRTdGFydC5sZW5ndGgsIGVuZEluZGV4KQogICAgICAvLyBGcm9tIGNvbW1lbnQgZW5kIHRpbGwgc3RyaW5nIGVuZAogICAgICAgICsgc2VsVGV4dC5zdWJzdHIoZW5kSW5kZXggKyBjdXJNb2RlLmNvbW1lbnRFbmQubGVuZ3RoKTsKICAgIH0KICAgIHRoaXMucmVwbGFjZVJhbmdlKHNlbFRleHQsIGZyb20sIHRvKTsKICB9Cn0pOwoKLy8gQXBwbGllcyBhdXRvbWF0aWMgbW9kZS1hd2FyZSBpbmRlbnRhdGlvbiB0byB0aGUgc3BlY2lmaWVkIHJhbmdlCkNvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJhdXRvSW5kZW50UmFuZ2UiLCBmdW5jdGlvbiAoZnJvbSwgdG8pIHsKICB2YXIgY21JbnN0YW5jZSA9IHRoaXM7CiAgdGhpcy5vcGVyYXRpb24oZnVuY3Rpb24gKCkgewogICAgZm9yICh2YXIgaSA9IGZyb20ubGluZTsgaSA8PSB0by5saW5lOyBpKyspIHsKICAgICAgY21JbnN0YW5jZS5pbmRlbnRMaW5lKGksICJzbWFydCIpOwogICAgfQogIH0pOwp9KTsKCi8vIEFwcGxpZXMgYXV0b21hdGljIGZvcm1hdHRpbmcgdG8gdGhlIHNwZWNpZmllZCByYW5nZQpDb2RlTWlycm9yLmRlZmluZUV4dGVuc2lvbigiYXV0b0Zvcm1hdFJhbmdlIiwgZnVuY3Rpb24gKGZyb20sIHRvKSB7CiAgdmFyIGFic1N0YXJ0ID0gdGhpcy5pbmRleEZyb21Qb3MoZnJvbSk7CiAgdmFyIGFic0VuZCA9IHRoaXMuaW5kZXhGcm9tUG9zKHRvKTsKICAvLyBJbnNlcnQgYWRkaXRpb25hbCBsaW5lIGJyZWFrcyB3aGVyZSBuZWNlc3NhcnkgYWNjb3JkaW5nIHRvIHRoZQogIC8vIG1vZGUncyBzeW50YXgKICB2YXIgcmVzID0gdGhpcy5nZXRNb2RlRXh0KCkuYXV0b0Zvcm1hdExpbmVCcmVha3ModGhpcy5nZXRWYWx1ZSgpLCBhYnNTdGFydCwgYWJzRW5kKTsKICB2YXIgY21JbnN0YW5jZSA9IHRoaXM7CgogIC8vIFJlcGxhY2UgYW5kIGF1dG8taW5kZW50IHRoZSByYW5nZQogIHRoaXMub3BlcmF0aW9uKGZ1bmN0aW9uICgpIHsKICAgIGNtSW5zdGFuY2UucmVwbGFjZVJhbmdlKHJlcywgZnJvbSwgdG8pOwogICAgdmFyIHN0YXJ0TGluZSA9IGNtSW5zdGFuY2UucG9zRnJvbUluZGV4KGFic1N0YXJ0KS5saW5lOwogICAgdmFyIGVuZExpbmUgPSBjbUluc3RhbmNlLnBvc0Zyb21JbmRleChhYnNTdGFydCArIHJlcy5sZW5ndGgpLmxpbmU7CiAgICBmb3IgKHZhciBpID0gc3RhcnRMaW5lOyBpIDw9IGVuZExpbmU7IGkrKykgewogICAgICBjbUluc3RhbmNlLmluZGVudExpbmUoaSwgInNtYXJ0Iik7CiAgICB9CiAgfSk7Cn0pOwoKLy8gRGVmaW5lIGV4dGVuc2lvbnMgZm9yIGEgZmV3IG1vZGVzCgpDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zWyJjc3MiXSA9IHsKICBjb21tZW50U3RhcnQ6ICIvKiIsCiAgY29tbWVudEVuZDogIiovIiwKICB3b3JkV3JhcENoYXJzOiBbIjsiLCAiXFx7IiwgIlxcfSJdLAogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCkgewogICAgcmV0dXJuIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKCIoO3xcXHt8XFx9KShbXlxyXG5dKSIsICJnIiksICIkMVxuJDIiKTsKICB9Cn07CgpDb2RlTWlycm9yLm1vZGVFeHRlbnNpb25zWyJqYXZhc2NyaXB0Il0gPSB7CiAgY29tbWVudFN0YXJ0OiAiLyoiLAogIGNvbW1lbnRFbmQ6ICIqLyIsCiAgd29yZFdyYXBDaGFyczogWyI7IiwgIlxceyIsICJcXH0iXSwKCiAgZ2V0Tm9uQnJlYWthYmxlQmxvY2tzOiBmdW5jdGlvbiAodGV4dCkgewogICAgdmFyIG5vbkJyZWFrYWJsZVJlZ2V4ZXMgPSBbCiAgICAgICAgbmV3IFJlZ0V4cCgiZm9yXFxzKj9cXCgoW1xcc1xcU10qPylcXCkiKSwKICAgICAgICBuZXcgUmVnRXhwKCInKFtcXHNcXFNdKj8pKCd8JCkiKSwKICAgICAgICBuZXcgUmVnRXhwKCJcIihbXFxzXFxTXSo/KShcInwkKSIpLAogICAgICAgIG5ldyBSZWdFeHAoIi8vLiooW1xyXG5dfCQpIikKICAgICAgXTsKICAgIHZhciBub25CcmVha2FibGVCbG9ja3MgPSBuZXcgQXJyYXkoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9uQnJlYWthYmxlUmVnZXhlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgY3VyUG9zID0gMDsKICAgICAgd2hpbGUgKGN1clBvcyA8IHRleHQubGVuZ3RoKSB7CiAgICAgICAgdmFyIG0gPSB0ZXh0LnN1YnN0cihjdXJQb3MpLm1hdGNoKG5vbkJyZWFrYWJsZVJlZ2V4ZXNbaV0pOwogICAgICAgIGlmIChtICE9IG51bGwpIHsKICAgICAgICAgIG5vbkJyZWFrYWJsZUJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgc3RhcnQ6IGN1clBvcyArIG0uaW5kZXgsCiAgICAgICAgICAgIGVuZDogY3VyUG9zICsgbS5pbmRleCArIG1bMF0ubGVuZ3RoCiAgICAgICAgICB9KTsKICAgICAgICAgIGN1clBvcyArPSBtLmluZGV4ICsgTWF0aC5tYXgoMSwgbVswXS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsgLy8gTm8gbW9yZSBtYXRjaGVzCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIG5vbkJyZWFrYWJsZUJsb2Nrcy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgIHJldHVybiBhLnN0YXJ0IC0gYi5zdGFydDsKICAgIH0pOwoKICAgIHJldHVybiBub25CcmVha2FibGVCbG9ja3M7CiAgfSwKCiAgYXV0b0Zvcm1hdExpbmVCcmVha3M6IGZ1bmN0aW9uICh0ZXh0KSB7CiAgICB2YXIgY3VyUG9zID0gMDsKICAgIHZhciByZUxpbmVzU3BsaXR0ZXIgPSBuZXcgUmVnRXhwKCIoO3xcXHt8XFx9KShbXlxyXG5dKSIsICJnIik7CiAgICB2YXIgbm9uQnJlYWthYmxlQmxvY2tzID0gdGhpcy5nZXROb25CcmVha2FibGVCbG9ja3ModGV4dCk7CiAgICBpZiAobm9uQnJlYWthYmxlQmxvY2tzICE9IG51bGwpIHsKICAgICAgdmFyIHJlcyA9ICIiOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkJyZWFrYWJsZUJsb2Nrcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChub25CcmVha2FibGVCbG9ja3NbaV0uc3RhcnQgPiBjdXJQb3MpIHsgLy8gQnJlYWsgbGluZXMgdGlsbCB0aGUgYmxvY2sKICAgICAgICAgIHJlcyArPSB0ZXh0LnN1YnN0cmluZyhjdXJQb3MsIG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5zdGFydCkucmVwbGFjZShyZUxpbmVzU3BsaXR0ZXIsICIkMVxuJDIiKTsKICAgICAgICAgIGN1clBvcyA9IG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5zdGFydDsKICAgICAgICB9CiAgICAgICAgaWYgKG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5zdGFydCA8PSBjdXJQb3MKICAgICAgICAgICYmIG5vbkJyZWFrYWJsZUJsb2Nrc1tpXS5lbmQgPj0gY3VyUG9zKSB7IC8vIFNraXAgbm9uLWJyZWFrYWJsZSBibG9jawogICAgICAgICAgcmVzICs9IHRleHQuc3Vic3RyaW5nKGN1clBvcywgbm9uQnJlYWthYmxlQmxvY2tzW2ldLmVuZCk7CiAgICAgICAgICBjdXJQb3MgPSBub25CcmVha2FibGVCbG9ja3NbaV0uZW5kOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY3VyUG9zIDwgdGV4dC5sZW5ndGggLSAxKSB7CiAgICAgICAgcmVzICs9IHRleHQuc3Vic3RyKGN1clBvcykucmVwbGFjZShyZUxpbmVzU3BsaXR0ZXIsICIkMVxuJDIiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzOwogICAgfQogICAgZWxzZSB7CiAgICAgIHJldHVybiB0ZXh0LnJlcGxhY2UocmVMaW5lc1NwbGl0dGVyLCAiJDFcbiQyIik7CiAgICB9CiAgfQp9OwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1sieG1sIl0gPSB7CiAgY29tbWVudFN0YXJ0OiAiPCEtLSIsCiAgY29tbWVudEVuZDogIi0tPiIsCiAgd29yZFdyYXBDaGFyczogWyI+Il0sCgogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCkgewogICAgdmFyIGxpbmVzID0gdGV4dC5zcGxpdCgiXG4iKTsKICAgIHZhciByZVByb2Nlc3NlZFBvcnRpb24gPSBuZXcgUmVnRXhwKCIoXlxccyo/PHxeW148XSo/KSguKykoPlxccyo/JHxbXj5dKj8kKSIpOwogICAgdmFyIHJlT3BlbkJyYWNrZXRzID0gbmV3IFJlZ0V4cCgiPCIsICJnIik7CiAgICB2YXIgcmVDbG9zZUJyYWNrZXRzID0gbmV3IFJlZ0V4cCgiKD4pKFteXHJcbl0pIiwgImciKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIG1Ub1Byb2Nlc3MgPSBsaW5lc1tpXS5tYXRjaChyZVByb2Nlc3NlZFBvcnRpb24pOwogICAgICBpZiAobVRvUHJvY2VzcyAhPSBudWxsICYmIG1Ub1Byb2Nlc3MubGVuZ3RoID4gMykgeyAvLyBUaGUgbGluZSBzdGFydHMgd2l0aCB3aGl0ZXNwYWNlcyBhbmQgZW5kcyB3aXRoIHdoaXRlc3BhY2VzCiAgICAgICAgbGluZXNbaV0gPSBtVG9Qcm9jZXNzWzFdCiAgICAgICAgICAgICsgbVRvUHJvY2Vzc1syXS5yZXBsYWNlKHJlT3BlbkJyYWNrZXRzLCAiXG4kJiIpLnJlcGxhY2UocmVDbG9zZUJyYWNrZXRzLCAiJDFcbiQyIikKICAgICAgICAgICAgKyBtVG9Qcm9jZXNzWzNdOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGxpbmVzLmpvaW4oIlxuIik7CiAgfQp9OwoKQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siaHRtbG1peGVkIl0gPSB7CiAgY29tbWVudFN0YXJ0OiAiPCEtLSIsCiAgY29tbWVudEVuZDogIi0tPiIsCiAgd29yZFdyYXBDaGFyczogWyI+IiwgIjsiLCAiXFx7IiwgIlxcfSJdLAoKICBnZXRNb2RlSW5mb3M6IGZ1bmN0aW9uICh0ZXh0LCBhYnNQb3MpIHsKICAgIHZhciBtb2RlSW5mb3MgPSBuZXcgQXJyYXkoKTsKICAgIG1vZGVJbmZvc1swXSA9CiAgICAgIHsKICAgICAgICBwb3M6IDAsCiAgICAgICAgbW9kZUV4dDogQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1sieG1sIl0sCiAgICAgICAgbW9kZU5hbWU6ICJ4bWwiCiAgICAgIH07CgogICAgdmFyIG1vZGVNYXRjaGVycyA9IG5ldyBBcnJheSgpOwogICAgbW9kZU1hdGNoZXJzWzBdID0KICAgICAgewogICAgICAgIHJlZ2V4OiBuZXcgUmVnRXhwKCI8c3R5bGVbXj5dKj4oW1xcc1xcU10qPykoPC9zdHlsZVtePl0qPnwkKSIsICJpIiksCiAgICAgICAgbW9kZUV4dDogQ29kZU1pcnJvci5tb2RlRXh0ZW5zaW9uc1siY3NzIl0sCiAgICAgICAgbW9kZU5hbWU6ICJjc3MiCiAgICAgIH07CiAgICBtb2RlTWF0Y2hlcnNbMV0gPQogICAgICB7CiAgICAgICAgcmVnZXg6IG5ldyBSZWdFeHAoIjxzY3JpcHRbXj5dKj4oW1xcc1xcU10qPykoPC9zY3JpcHRbXj5dKj58JCkiLCAiaSIpLAogICAgICAgIG1vZGVFeHQ6IENvZGVNaXJyb3IubW9kZUV4dGVuc2lvbnNbImphdmFzY3JpcHQiXSwKICAgICAgICBtb2RlTmFtZTogImphdmFzY3JpcHQiCiAgICAgIH07CgogICAgdmFyIGxhc3RDaGFyUG9zID0gKHR5cGVvZiAoYWJzUG9zKSAhPT0gInVuZGVmaW5lZCIgPyBhYnNQb3MgOiB0ZXh0Lmxlbmd0aCAtIDEpOwogICAgLy8gRGV0ZWN0IG1vZGVzIGZvciB0aGUgZW50aXJlIHRleHQKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kZU1hdGNoZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjdXJQb3MgPSAwOwogICAgICB3aGlsZSAoY3VyUG9zIDw9IGxhc3RDaGFyUG9zKSB7CiAgICAgICAgdmFyIG0gPSB0ZXh0LnN1YnN0cihjdXJQb3MpLm1hdGNoKG1vZGVNYXRjaGVyc1tpXS5yZWdleCk7CiAgICAgICAgaWYgKG0gIT0gbnVsbCkgewogICAgICAgICAgaWYgKG0ubGVuZ3RoID4gMSAmJiBtWzFdLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgLy8gUHVzaCBibG9jayBiZWdpbiBwb3MKICAgICAgICAgICAgdmFyIGJsb2NrQmVnaW4gPSBjdXJQb3MgKyBtLmluZGV4ICsgbVswXS5pbmRleE9mKG1bMV0pOwogICAgICAgICAgICBtb2RlSW5mb3MucHVzaCgKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwb3M6IGJsb2NrQmVnaW4sCiAgICAgICAgICAgICAgICBtb2RlRXh0OiBtb2RlTWF0Y2hlcnNbaV0ubW9kZUV4dCwKICAgICAgICAgICAgICAgIG1vZGVOYW1lOiBtb2RlTWF0Y2hlcnNbaV0ubW9kZU5hbWUKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gUHVzaCBibG9jayBlbmQgcG9zCiAgICAgICAgICAgIG1vZGVJbmZvcy5wdXNoKAogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHBvczogYmxvY2tCZWdpbiArIG1bMV0ubGVuZ3RoLAogICAgICAgICAgICAgICAgbW9kZUV4dDogbW9kZUluZm9zWzBdLm1vZGVFeHQsCiAgICAgICAgICAgICAgICBtb2RlTmFtZTogbW9kZUluZm9zWzBdLm1vZGVOYW1lCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGN1clBvcyArPSBtLmluZGV4ICsgbVswXS5sZW5ndGg7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGN1clBvcyArPSBtLmluZGV4ICsgTWF0aC5tYXgobVswXS5sZW5ndGgsIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsgLy8gTm8gbW9yZSBtYXRjaGVzCiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIFNvcnQgbW9kZSBpbmZvcwogICAgbW9kZUluZm9zLnNvcnQoZnVuY3Rpb24gc29ydE1vZGVJbmZvKGEsIGIpIHsKICAgICAgcmV0dXJuIGEucG9zIC0gYi5wb3M7CiAgICB9KTsKCiAgICByZXR1cm4gbW9kZUluZm9zOwogIH0sCgogIGF1dG9Gb3JtYXRMaW5lQnJlYWtzOiBmdW5jdGlvbiAodGV4dCwgc3RhcnRQb3MsIGVuZFBvcykgewogICAgdmFyIG1vZGVJbmZvcyA9IHRoaXMuZ2V0TW9kZUluZm9zKHRleHQpOwogICAgdmFyIHJlQmxvY2tTdGFydHNXaXRoTmV3bGluZSA9IG5ldyBSZWdFeHAoIl5cXHMqP1xuIik7CiAgICB2YXIgcmVCbG9ja0VuZHNXaXRoTmV3bGluZSA9IG5ldyBSZWdFeHAoIlxuXFxzKj8kIik7CiAgICB2YXIgcmVzID0gIiI7CiAgICAvLyBVc2UgbW9kZXMgaW5mbyB0byBicmVhayBsaW5lcyBjb3JyZXNwb25kaW5nbHkKICAgIGlmIChtb2RlSW5mb3MubGVuZ3RoID4gMSkgeyAvLyBEZWFsIHdpdGggbXVsdGktbW9kZSB0ZXh0CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IG1vZGVJbmZvcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBzZWxTdGFydCA9IG1vZGVJbmZvc1tpIC0gMV0ucG9zOwogICAgICAgIHZhciBzZWxFbmQgPSAoaSA8IG1vZGVJbmZvcy5sZW5ndGggPyBtb2RlSW5mb3NbaV0ucG9zIDogZW5kUG9zKTsKCiAgICAgICAgaWYgKHNlbFN0YXJ0ID49IGVuZFBvcykgeyAvLyBUaGUgYmxvY2sgc3RhcnRzIGxhdGVyIHRoYW4gdGhlIG5lZWRlZCBmcmFnbWVudAogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChzZWxTdGFydCA8IHN0YXJ0UG9zKSB7CiAgICAgICAgICBpZiAoc2VsRW5kIDw9IHN0YXJ0UG9zKSB7IC8vIFRoZSBibG9jayBzdGFydHMgZWFybGllciB0aGFuIHRoZSBuZWVkZWQgZnJhZ21lbnQKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBzZWxTdGFydCA9IHN0YXJ0UG9zOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsRW5kID4gZW5kUG9zKSB7CiAgICAgICAgICBzZWxFbmQgPSBlbmRQb3M7CiAgICAgICAgfQogICAgICAgIHZhciB0ZXh0UG9ydGlvbiA9IHRleHQuc3Vic3RyaW5nKHNlbFN0YXJ0LCBzZWxFbmQpOwogICAgICAgIGlmIChtb2RlSW5mb3NbaSAtIDFdLm1vZGVOYW1lICE9ICJ4bWwiKSB7IC8vIFN0YXJ0aW5nIGEgQ1NTIG9yIEphdmFTY3JpcHQgYmxvY2sKICAgICAgICAgIGlmICghcmVCbG9ja1N0YXJ0c1dpdGhOZXdsaW5lLnRlc3QodGV4dFBvcnRpb24pCiAgICAgICAgICAgICAgJiYgc2VsU3RhcnQgPiAwKSB7IC8vIFRoZSBibG9jayBkb2VzIG5vdCBzdGFydCB3aXRoIGEgbGluZSBicmVhawogICAgICAgICAgICB0ZXh0UG9ydGlvbiA9ICJcbiIgKyB0ZXh0UG9ydGlvbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghcmVCbG9ja0VuZHNXaXRoTmV3bGluZS50ZXN0KHRleHRQb3J0aW9uKQogICAgICAgICAgICAgICYmIHNlbEVuZCA8IHRleHQubGVuZ3RoIC0gMSkgeyAvLyBUaGUgYmxvY2sgZG9lcyBub3QgZW5kIHdpdGggYSBsaW5lIGJyZWFrCiAgICAgICAgICAgIHRleHRQb3J0aW9uICs9ICJcbiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlcyArPSBtb2RlSW5mb3NbaSAtIDFdLm1vZGVFeHQuYXV0b0Zvcm1hdExpbmVCcmVha3ModGV4dFBvcnRpb24pOwogICAgICB9CiAgICB9CiAgICBlbHNlIHsgLy8gU2luZ2xlLW1vZGUgdGV4dAogICAgICByZXMgPSBtb2RlSW5mb3NbMF0ubW9kZUV4dC5hdXRvRm9ybWF0TGluZUJyZWFrcyh0ZXh0LnN1YnN0cmluZyhzdGFydFBvcywgZW5kUG9zKSk7CiAgICB9CgogICAgcmV0dXJuIHJlczsKICB9Cn07Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/javascript-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICBmdW5jdGlvbiBmb3JFYWNoKGFyciwgZikgewogICAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7CiAgfQogIAogIGZ1bmN0aW9uIGFycmF5Q29udGFpbnMoYXJyLCBpdGVtKSB7CiAgICBpZiAoIUFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7CiAgICAgIHZhciBpID0gYXJyLmxlbmd0aDsKICAgICAgd2hpbGUgKGktLSkgewogICAgICAgIGlmIChhcnJbaV0gPT09IGl0ZW0pIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gYXJyLmluZGV4T2YoaXRlbSkgIT0gLTE7CiAgfQoKICBmdW5jdGlvbiBzY3JpcHRIaW50KGVkaXRvciwga2V5d29yZHMsIGdldFRva2VuKSB7CiAgICAvLyBGaW5kIHRoZSB0b2tlbiBhdCB0aGUgY3Vyc29yCiAgICB2YXIgY3VyID0gZWRpdG9yLmdldEN1cnNvcigpLCB0b2tlbiA9IGdldFRva2VuKGVkaXRvciwgY3VyKSwgdHByb3AgPSB0b2tlbjsKICAgIC8vIElmIGl0J3Mgbm90IGEgJ3dvcmQtc3R5bGUnIHRva2VuLCBpZ25vcmUgdGhlIHRva2VuLgoJCWlmICghL15bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuID0gdHByb3AgPSB7c3RhcnQ6IGN1ci5jaCwgZW5kOiBjdXIuY2gsIHN0cmluZzogIiIsIHN0YXRlOiB0b2tlbi5zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IHRva2VuLnN0cmluZyA9PSAiLiIgPyAicHJvcGVydHkiIDogbnVsbH07CiAgICB9CiAgICAvLyBJZiBpdCBpcyBhIHByb3BlcnR5LCBmaW5kIG91dCB3aGF0IGl0IGlzIGEgcHJvcGVydHkgb2YuCiAgICB3aGlsZSAodHByb3AuY2xhc3NOYW1lID09ICJwcm9wZXJ0eSIpIHsKICAgICAgdHByb3AgPSBnZXRUb2tlbihlZGl0b3IsIHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgIGlmICh0cHJvcC5zdHJpbmcgIT0gIi4iKSByZXR1cm47CiAgICAgIHRwcm9wID0gZ2V0VG9rZW4oZWRpdG9yLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwogICAgICBpZiAodHByb3Auc3RyaW5nID09ICcpJykgewogICAgICAgIHZhciBsZXZlbCA9IDE7CiAgICAgICAgZG8gewogICAgICAgICAgdHByb3AgPSBnZXRUb2tlbihlZGl0b3IsIHtsaW5lOiBjdXIubGluZSwgY2g6IHRwcm9wLnN0YXJ0fSk7CiAgICAgICAgICBzd2l0Y2ggKHRwcm9wLnN0cmluZykgewogICAgICAgICAgY2FzZSAnKSc6IGxldmVsKys7IGJyZWFrOwogICAgICAgICAgY2FzZSAnKCc6IGxldmVsLS07IGJyZWFrOwogICAgICAgICAgZGVmYXVsdDogYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAobGV2ZWwgPiAwKQogICAgICAgIHRwcm9wID0gZ2V0VG9rZW4oZWRpdG9yLCB7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwoJCQkJaWYgKHRwcm9wLmNsYXNzTmFtZSA9PSAndmFyaWFibGUnKQoJCQkJCXRwcm9wLmNsYXNzTmFtZSA9ICdmdW5jdGlvbic7CgkJCQllbHNlIHJldHVybjsgLy8gbm8gY2x1ZQogICAgICB9CiAgICAgIGlmICghY29udGV4dCkgdmFyIGNvbnRleHQgPSBbXTsKICAgICAgY29udGV4dC5wdXNoKHRwcm9wKTsKICAgIH0KICAgIHJldHVybiB7bGlzdDogZ2V0Q29tcGxldGlvbnModG9rZW4sIGNvbnRleHQsIGtleXdvcmRzKSwKICAgICAgICAgICAgZnJvbToge2xpbmU6IGN1ci5saW5lLCBjaDogdG9rZW4uc3RhcnR9LAogICAgICAgICAgICB0bzoge2xpbmU6IGN1ci5saW5lLCBjaDogdG9rZW4uZW5kfX07CiAgfQoKICBDb2RlTWlycm9yLmphdmFzY3JpcHRIaW50ID0gZnVuY3Rpb24oZWRpdG9yKSB7CiAgICByZXR1cm4gc2NyaXB0SGludChlZGl0b3IsIGphdmFzY3JpcHRLZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChlLCBjdXIpIHtyZXR1cm4gZS5nZXRUb2tlbkF0KGN1cik7fSk7CiAgfQoKICBmdW5jdGlvbiBnZXRDb2ZmZWVTY3JpcHRUb2tlbihlZGl0b3IsIGN1cikgewogIC8vIFRoaXMgZ2V0VG9rZW4sIGl0IGlzIGZvciBjb2ZmZWVzY3JpcHQsIGltaXRhdGVzIHRoZSBiZWhhdmlvciBvZgogIC8vIGdldFRva2VuQXQgbWV0aG9kIGluIGphdmFzY3JpcHQuanMsIHRoYXQgaXMsIHJldHVybmluZyAicHJvcGVydHkiCiAgLy8gdHlwZSBhbmQgdHJlYXQgIi4iIGFzIGluZGVwZW5lbnQgdG9rZW4uCiAgICB2YXIgdG9rZW4gPSBlZGl0b3IuZ2V0VG9rZW5BdChjdXIpOwogICAgaWYgKGN1ci5jaCA9PSB0b2tlbi5zdGFydCArIDEgJiYgdG9rZW4uc3RyaW5nLmNoYXJBdCgwKSA9PSAnLicpIHsKICAgICAgdG9rZW4uZW5kID0gdG9rZW4uc3RhcnQ7CiAgICAgIHRva2VuLnN0cmluZyA9ICcuJzsKICAgICAgdG9rZW4uY2xhc3NOYW1lID0gInByb3BlcnR5IjsKICAgIH0KICAgIGVsc2UgaWYgKC9eXC5bXHckX10qJC8udGVzdCh0b2tlbi5zdHJpbmcpKSB7CiAgICAgIHRva2VuLmNsYXNzTmFtZSA9ICJwcm9wZXJ0eSI7CiAgICAgIHRva2VuLnN0YXJ0Kys7CiAgICAgIHRva2VuLnN0cmluZyA9IHRva2VuLnN0cmluZy5yZXBsYWNlKC9cLi8sICcnKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIENvZGVNaXJyb3IuY29mZmVlc2NyaXB0SGludCA9IGZ1bmN0aW9uKGVkaXRvcikgewogICAgcmV0dXJuIHNjcmlwdEhpbnQoZWRpdG9yLCBjb2ZmZWVzY3JpcHRLZXl3b3JkcywgZ2V0Q29mZmVlU2NyaXB0VG9rZW4pOwogIH0KCiAgdmFyIHN0cmluZ1Byb3BzID0gKCJjaGFyQXQgY2hhckNvZGVBdCBpbmRleE9mIGxhc3RJbmRleE9mIHN1YnN0cmluZyBzdWJzdHIgc2xpY2UgdHJpbSB0cmltTGVmdCB0cmltUmlnaHQgIiArCiAgICAgICAgICAgICAgICAgICAgICJ0b1VwcGVyQ2FzZSB0b0xvd2VyQ2FzZSBzcGxpdCBjb25jYXQgbWF0Y2ggcmVwbGFjZSBzZWFyY2giKS5zcGxpdCgiICIpOwogIHZhciBhcnJheVByb3BzID0gKCJsZW5ndGggY29uY2F0IGpvaW4gc3BsaWNlIHB1c2ggcG9wIHNoaWZ0IHVuc2hpZnQgc2xpY2UgcmV2ZXJzZSBzb3J0IGluZGV4T2YgIiArCiAgICAgICAgICAgICAgICAgICAgImxhc3RJbmRleE9mIGV2ZXJ5IHNvbWUgZmlsdGVyIGZvckVhY2ggbWFwIHJlZHVjZSByZWR1Y2VSaWdodCAiKS5zcGxpdCgiICIpOwogIHZhciBmdW5jUHJvcHMgPSAicHJvdG90eXBlIGFwcGx5IGNhbGwgYmluZCIuc3BsaXQoIiAiKTsKICB2YXIgamF2YXNjcmlwdEtleXdvcmRzID0gKCJicmVhayBjYXNlIGNhdGNoIGNvbnRpbnVlIGRlYnVnZ2VyIGRlZmF1bHQgZGVsZXRlIGRvIGVsc2UgZmFsc2UgZmluYWxseSBmb3IgZnVuY3Rpb24gIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIG5ldyBudWxsIHJldHVybiBzd2l0Y2ggdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHZhciB2b2lkIHdoaWxlIHdpdGgiKS5zcGxpdCgiICIpOwogIHZhciBjb2ZmZWVzY3JpcHRLZXl3b3JkcyA9ICgiYW5kIGJyZWFrIGNhdGNoIGNsYXNzIGNvbnRpbnVlIGRlbGV0ZSBkbyBlbHNlIGV4dGVuZHMgZmFsc2UgZmluYWxseSBmb3IgIiArCiAgICAgICAgICAgICAgICAgICJpZiBpbiBpbnN0YW5jZW9mIGlzbnQgbmV3IG5vIG5vdCBudWxsIG9mIG9mZiBvbiBvciByZXR1cm4gc3dpdGNoIHRoZW4gdGhyb3cgdHJ1ZSB0cnkgdHlwZW9mIHVudGlsIHZvaWQgd2hpbGUgd2l0aCB5ZXMiKS5zcGxpdCgiICIpOwoKICBmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCwga2V5d29yZHMpIHsKICAgIHZhciBmb3VuZCA9IFtdLCBzdGFydCA9IHRva2VuLnN0cmluZzsKICAgIGZ1bmN0aW9uIG1heWJlQWRkKHN0cikgewogICAgICBpZiAoc3RyLmluZGV4T2Yoc3RhcnQpID09IDAgJiYgIWFycmF5Q29udGFpbnMoZm91bmQsIHN0cikpIGZvdW5kLnB1c2goc3RyKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdhdGhlckNvbXBsZXRpb25zKG9iaikgewogICAgICBpZiAodHlwZW9mIG9iaiA9PSAic3RyaW5nIikgZm9yRWFjaChzdHJpbmdQcm9wcywgbWF5YmVBZGQpOwogICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkgZm9yRWFjaChhcnJheVByb3BzLCBtYXliZUFkZCk7CiAgICAgIGVsc2UgaWYgKG9iaiBpbnN0YW5jZW9mIEZ1bmN0aW9uKSBmb3JFYWNoKGZ1bmNQcm9wcywgbWF5YmVBZGQpOwogICAgICBmb3IgKHZhciBuYW1lIGluIG9iaikgbWF5YmVBZGQobmFtZSk7CiAgICB9CgogICAgaWYgKGNvbnRleHQpIHsKICAgICAgLy8gSWYgdGhpcyBpcyBhIHByb3BlcnR5LCBzZWUgaWYgaXQgYmVsb25ncyB0byBzb21lIG9iamVjdCB3ZSBjYW4KICAgICAgLy8gZmluZCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KICAgICAgdmFyIG9iaiA9IGNvbnRleHQucG9wKCksIGJhc2U7CiAgICAgIGlmIChvYmouY2xhc3NOYW1lID09ICJ2YXJpYWJsZSIpCiAgICAgICAgYmFzZSA9IHdpbmRvd1tvYmouc3RyaW5nXTsKICAgICAgZWxzZSBpZiAob2JqLmNsYXNzTmFtZSA9PSAic3RyaW5nIikKICAgICAgICBiYXNlID0gIiI7CiAgICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gImF0b20iKQogICAgICAgIGJhc2UgPSAxOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJmdW5jdGlvbiIpIHsKICAgICAgICBpZiAod2luZG93LmpRdWVyeSAhPSBudWxsICYmIChvYmouc3RyaW5nID09ICckJyB8fCBvYmouc3RyaW5nID09ICdqUXVlcnknKSAmJgogICAgICAgICAgICAodHlwZW9mIHdpbmRvdy5qUXVlcnkgPT0gJ2Z1bmN0aW9uJykpCiAgICAgICAgICBiYXNlID0gd2luZG93LmpRdWVyeSgpOwogICAgICAgIGVsc2UgaWYgKHdpbmRvdy5fICE9IG51bGwgJiYgKG9iai5zdHJpbmcgPT0gJ18nKSAmJiAodHlwZW9mIHdpbmRvdy5fID09ICdmdW5jdGlvbicpKQogICAgICAgICAgYmFzZSA9IHdpbmRvdy5fKCk7CiAgICAgIH0KICAgICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgICBiYXNlID0gYmFzZVtjb250ZXh0LnBvcCgpLnN0cmluZ107CiAgICAgIGlmIChiYXNlICE9IG51bGwpIGdhdGhlckNvbXBsZXRpb25zKGJhc2UpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIElmIG5vdCwganVzdCBsb29rIGluIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBhbnkgbG9jYWwgc2NvcGUKICAgICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgICAgZm9yICh2YXIgdiA9IHRva2VuLnN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkgbWF5YmVBZGQodi5uYW1lKTsKICAgICAgZ2F0aGVyQ29tcGxldGlvbnMod2luZG93KTsKICAgICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogICAgfQogICAgcmV0dXJuIGZvdW5kOwogIH0KfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/match-highlighter.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gRGVmaW5lIG1hdGNoLWhpZ2hsaWdodGVyIGNvbW1hbmRzLiBEZXBlbmRzIG9uIHNlYXJjaGN1cnNvci5qcwovLyBVc2UgYnkgYXR0YWNoaW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gY2FsbCB0byB0aGUgb25DdXJzb3JBY3Rpdml0eSBldmVudDoKCS8vbXlDb2RlTWlycm9yLm1hdGNoSGlnaGxpZ2h0KG1pbkNoYXJzKTsKLy8gQW5kIGluY2x1ZGluZyBhIHNwZWNpYWwgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaGlnaGxpZ2h0IGNzcyBjbGFzcyAoYWxzbyBvcHRpb25hbGx5IGEgc2VwYXJhdGUgb25lIGZvciAuQ29kZU1pcnJvci1mb2N1c2VkIC0tIHNlZSBkZW1vIG1hdGNoaGlnaGxpZ2h0ZXIuaHRtbCkKCihmdW5jdGlvbigpIHsKICB2YXIgREVGQVVMVF9NSU5fQ0hBUlMgPSAyOwogIAogIGZ1bmN0aW9uIE1hdGNoSGlnaGxpZ2h0U3RhdGUoKSB7Cgl0aGlzLm1hcmtlZCA9IFtdOwogIH0KICBmdW5jdGlvbiBnZXRNYXRjaEhpZ2hsaWdodFN0YXRlKGNtKSB7CglyZXR1cm4gY20uX21hdGNoSGlnaGxpZ2h0U3RhdGUgfHwgKGNtLl9tYXRjaEhpZ2hsaWdodFN0YXRlID0gbmV3IE1hdGNoSGlnaGxpZ2h0U3RhdGUoKSk7CiAgfQogIAogIGZ1bmN0aW9uIGNsZWFyTWFya3MoY20pIHsKCXZhciBzdGF0ZSA9IGdldE1hdGNoSGlnaGxpZ2h0U3RhdGUoY20pOwoJZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5tYXJrZWQubGVuZ3RoOyArK2kpCgkJc3RhdGUubWFya2VkW2ldLmNsZWFyKCk7CglzdGF0ZS5tYXJrZWQgPSBbXTsKICB9CiAgCiAgZnVuY3Rpb24gbWFya0RvY3VtZW50KGNtLCBjbGFzc05hbWUsIG1pbkNoYXJzKSB7CiAgICBjbGVhck1hcmtzKGNtKTsKCW1pbkNoYXJzID0gKHR5cGVvZiBtaW5DaGFycyAhPT0gJ3VuZGVmaW5lZCcgPyBtaW5DaGFycyA6IERFRkFVTFRfTUlOX0NIQVJTKTsKCWlmIChjbS5zb21ldGhpbmdTZWxlY3RlZCgpICYmIGNtLmdldFNlbGVjdGlvbigpLmxlbmd0aCA+PSBtaW5DaGFycykgewoJCXZhciBzdGF0ZSA9IGdldE1hdGNoSGlnaGxpZ2h0U3RhdGUoY20pOwoJCXZhciBxdWVyeSA9IGNtLmdldFNlbGVjdGlvbigpOwoJCWNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKCQkJaWYgKGNtLmxpbmVDb3VudCgpIDwgMjAwMCkgeyAvLyBUaGlzIGlzIHRvbyBleHBlbnNpdmUgb24gYmlnIGRvY3VtZW50cy4KCQkJICBmb3IgKHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3IocXVlcnkpOyBjdXJzb3IuZmluZE5leHQoKTspIHsKCQkJCS8vT25seSBhcHBseSBtYXRjaGhpZ2hsaWdodCB0byB0aGUgbWF0Y2hlcyBvdGhlciB0aGFuIHRoZSBvbmUgYWN0dWFsbHkgc2VsZWN0ZWQKCQkJCWlmICghKGN1cnNvci5mcm9tKCkubGluZSA9PT0gY20uZ2V0Q3Vyc29yKHRydWUpLmxpbmUgJiYgY3Vyc29yLmZyb20oKS5jaCA9PT0gY20uZ2V0Q3Vyc29yKHRydWUpLmNoKSkKCQkJCQlzdGF0ZS5tYXJrZWQucHVzaChjbS5tYXJrVGV4dChjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSwgY2xhc3NOYW1lKSk7CgkJCSAgfQoJCQl9CgkJICB9KTsKCX0KICB9CgogIENvZGVNaXJyb3IuZGVmaW5lRXh0ZW5zaW9uKCJtYXRjaEhpZ2hsaWdodCIsIGZ1bmN0aW9uKGNsYXNzTmFtZSwgbWluQ2hhcnMpIHsKICAgIG1hcmtEb2N1bWVudCh0aGlzLCBjbGFzc05hbWUsIG1pbkNoYXJzKTsKICB9KTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/overlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW4KLy8gYXMgdGhlIGJhc2UgYXJndW1lbnQgdGFrZXMgY2FyZSBvZiBtb3N0IG9mIHRoZSBub3JtYWwgbW9kZQovLyBmdW5jdGlvbmFsaXR5LCBidXQgYSBzZWNvbmQgKHR5cGljYWxseSBzaW1wbGUpIG1vZGUgaXMgdXNlZCwgd2hpY2gKLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlCi8vIHRleHQsIGJ1dCB3aGVuIGJvdGggYXNzaWduIGEgbm9uLW51bGwgc3R5bGUgdG8gYSBwaWVjZSBvZiBjb2RlLCB0aGUKLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNvbWJpbmUgYXJndW1lbnQgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UKLy8gdGhlIHN0eWxlcyBhcmUgY29tYmluZWQuCgpDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5lKSB7CiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShiYXNlKSwKICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUob3ZlcmxheSksCiAgICAgICAgYmFzZVBvczogMCwgYmFzZUN1cjogbnVsbCwKICAgICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsCiAgICAgIH07CiAgICB9LAogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLAogICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3IuY29weVN0YXRlKG92ZXJsYXksIHN0YXRlLm92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IHN0YXRlLmJhc2VQb3MsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLmJhc2VQb3MpIHsKICAgICAgICBzdGF0ZS5iYXNlQ3VyID0gYmFzZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2UpOwogICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdHJlYW0ucG9zOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0gc3RhdGUub3ZlcmxheVBvcykgewogICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQ7CiAgICAgICAgc3RhdGUub3ZlcmxheUN1ciA9IG92ZXJsYXkudG9rZW4oc3RyZWFtLCBzdGF0ZS5vdmVybGF5KTsKICAgICAgICBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnBvczsKICAgICAgfQogICAgICBzdHJlYW0ucG9zID0gTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7CiAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gMDsKCiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyOwogICAgICBpZiAoc3RhdGUuYmFzZUN1ciAhPSBudWxsICYmIGNvbWJpbmUpIHJldHVybiBzdGF0ZS5iYXNlQ3VyICsgIiAiICsgc3RhdGUub3ZlcmxheUN1cjsKICAgICAgZWxzZSByZXR1cm4gc3RhdGUub3ZlcmxheUN1cjsKICAgIH0sCiAgICAKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICByZXR1cm4gYmFzZS5pbmRlbnQoc3RhdGUuYmFzZSwgdGV4dEFmdGVyKTsKICAgIH0sCiAgICBlbGVjdHJpY0NoYXJzOiBiYXNlLmVsZWN0cmljQ2hhcnMKICB9Owp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/runmode.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5ydW5Nb2RlID0gZnVuY3Rpb24oc3RyaW5nLCBtb2Rlc3BlYywgY2FsbGJhY2ssIG9wdGlvbnMpIHsKICB2YXIgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShDb2RlTWlycm9yLmRlZmF1bHRzLCBtb2Rlc3BlYyk7CiAgdmFyIGlzTm9kZSA9IGNhbGxiYWNrLm5vZGVUeXBlID09IDE7CiAgdmFyIHRhYlNpemUgPSAob3B0aW9ucyAmJiBvcHRpb25zLnRhYlNpemUpIHx8IENvZGVNaXJyb3IuZGVmYXVsdHMudGFiU2l6ZTsKICBpZiAoaXNOb2RlKSB7CiAgICB2YXIgbm9kZSA9IGNhbGxiYWNrLCBhY2N1bSA9IFtdLCBjb2wgPSAwOwogICAgY2FsbGJhY2sgPSBmdW5jdGlvbih0ZXh0LCBzdHlsZSkgewogICAgICBpZiAodGV4dCA9PSAiXG4iKSB7CiAgICAgICAgYWNjdW0ucHVzaCgiPGJyPiIpOwogICAgICAgIGNvbCA9IDA7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBlc2NhcGVkID0gIiI7CiAgICAgIC8vIEhUTUwtZXNjYXBlIGFuZCByZXBsYWNlIHRhYnMKICAgICAgZm9yICh2YXIgcG9zID0gMDs7KSB7CiAgICAgICAgdmFyIGlkeCA9IHRleHQuaW5kZXhPZigiXHQiLCBwb3MpOwogICAgICAgIGlmIChpZHggPT0gLTEpIHsKICAgICAgICAgIGVzY2FwZWQgKz0gQ29kZU1pcnJvci5odG1sRXNjYXBlKHRleHQuc2xpY2UocG9zKSk7CiAgICAgICAgICBjb2wgKz0gdGV4dC5sZW5ndGggLSBwb3M7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29sICs9IGlkeCAtIHBvczsKICAgICAgICAgIGVzY2FwZWQgKz0gQ29kZU1pcnJvci5odG1sRXNjYXBlKHRleHQuc2xpY2UocG9zLCBpZHgpKTsKICAgICAgICAgIHZhciBzaXplID0gdGFiU2l6ZSAtIGNvbCAlIHRhYlNpemU7CiAgICAgICAgICBjb2wgKz0gc2l6ZTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSBlc2NhcGVkICs9ICIgIjsKICAgICAgICAgIHBvcyA9IGlkeCArIDE7CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAoc3R5bGUpIAogICAgICAgIGFjY3VtLnB1c2goIjxzcGFuIGNsYXNzPVwiY20tIiArIENvZGVNaXJyb3IuaHRtbEVzY2FwZShzdHlsZSkgKyAiXCI+IiArIGVzY2FwZWQgKyAiPC9zcGFuPiIpOwogICAgICBlbHNlCiAgICAgICAgYWNjdW0ucHVzaChlc2NhcGVkKTsKICAgIH0KICB9CiAgdmFyIGxpbmVzID0gQ29kZU1pcnJvci5zcGxpdExpbmVzKHN0cmluZyksIHN0YXRlID0gQ29kZU1pcnJvci5zdGFydFN0YXRlKG1vZGUpOwogIGZvciAodmFyIGkgPSAwLCBlID0gbGluZXMubGVuZ3RoOyBpIDwgZTsgKytpKSB7CiAgICBpZiAoaSkgY2FsbGJhY2soIlxuIik7CiAgICB2YXIgc3RyZWFtID0gbmV3IENvZGVNaXJyb3IuU3RyaW5nU3RyZWFtKGxpbmVzW2ldKTsKICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGNhbGxiYWNrKHN0cmVhbS5jdXJyZW50KCksIHN0eWxlLCBpLCBzdHJlYW0uc3RhcnQpOwogICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgfQogIH0KICBpZiAoaXNOb2RlKQogICAgbm9kZS5pbm5lckhUTUwgPSBhY2N1bS5qb2luKCIiKTsKfTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/search.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gRGVmaW5lIHNlYXJjaCBjb21tYW5kcy4gRGVwZW5kcyBvbiBkaWFsb2cuanMgb3IgYW5vdGhlcgovLyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgb3BlbkRpYWxvZyBtZXRob2QuCgovLyBSZXBsYWNlIHdvcmtzIGEgbGl0dGxlIG9kZGx5IC0tIGl0IHdpbGwgZG8gdGhlIHJlcGxhY2Ugb24gdGhlIG5leHQKLy8gQ3RybC1HIChvciB3aGF0ZXZlciBpcyBib3VuZCB0byBmaW5kTmV4dCkgcHJlc3MuIFlvdSBwcmV2ZW50IGEKLy8gcmVwbGFjZSBieSBtYWtpbmcgc3VyZSB0aGUgbWF0Y2ggaXMgbm8gbG9uZ2VyIHNlbGVjdGVkIHdoZW4gaGl0dGluZwovLyBDdHJsLUcuCgooZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24gU2VhcmNoU3RhdGUoKSB7CiAgICB0aGlzLnBvc0Zyb20gPSB0aGlzLnBvc1RvID0gdGhpcy5xdWVyeSA9IG51bGw7CiAgICB0aGlzLm1hcmtlZCA9IFtdOwogIH0KICBmdW5jdGlvbiBnZXRTZWFyY2hTdGF0ZShjbSkgewogICAgcmV0dXJuIGNtLl9zZWFyY2hTdGF0ZSB8fCAoY20uX3NlYXJjaFN0YXRlID0gbmV3IFNlYXJjaFN0YXRlKCkpOwogIH0KICBmdW5jdGlvbiBkaWFsb2coY20sIHRleHQsIHNob3J0VGV4dCwgZikgewogICAgaWYgKGNtLm9wZW5EaWFsb2cpIGNtLm9wZW5EaWFsb2codGV4dCwgZik7CiAgICBlbHNlIGYocHJvbXB0KHNob3J0VGV4dCwgIiIpKTsKICB9CiAgZnVuY3Rpb24gY29uZmlybURpYWxvZyhjbSwgdGV4dCwgc2hvcnRUZXh0LCBmcykgewogICAgaWYgKGNtLm9wZW5Db25maXJtKSBjbS5vcGVuQ29uZmlybSh0ZXh0LCBmcyk7CiAgICBlbHNlIGlmIChjb25maXJtKHNob3J0VGV4dCkpIGZzWzBdKCk7CiAgfQogIGZ1bmN0aW9uIHBhcnNlUXVlcnkocXVlcnkpIHsKICAgIHZhciBpc1JFID0gcXVlcnkubWF0Y2goL15cLyguKilcLyQvKTsKICAgIHJldHVybiBpc1JFID8gbmV3IFJlZ0V4cChpc1JFWzFdKSA6IHF1ZXJ5OwogIH0KICB2YXIgcXVlcnlEaWFsb2cgPQogICAgJ1NlYXJjaDogPGlucHV0IHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMTBlbSI+IDxzcGFuIHN0eWxlPSJjb2xvcjogIzg4OCI+KFVzZSAvcmUvIHN5bnRheCBmb3IgcmVnZXhwIHNlYXJjaCk8L3NwYW4+JzsKICBmdW5jdGlvbiBkb1NlYXJjaChjbSwgcmV2KSB7CiAgICB2YXIgc3RhdGUgPSBnZXRTZWFyY2hTdGF0ZShjbSk7CiAgICBpZiAoc3RhdGUucXVlcnkpIHJldHVybiBmaW5kTmV4dChjbSwgcmV2KTsKICAgIGRpYWxvZyhjbSwgcXVlcnlEaWFsb2csICJTZWFyY2ggZm9yOiIsIGZ1bmN0aW9uKHF1ZXJ5KSB7CiAgICAgIGNtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXF1ZXJ5IHx8IHN0YXRlLnF1ZXJ5KSByZXR1cm47CiAgICAgICAgc3RhdGUucXVlcnkgPSBwYXJzZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgICBpZiAoY20ubGluZUNvdW50KCkgPCAyMDAwKSB7IC8vIFRoaXMgaXMgdG9vIGV4cGVuc2l2ZSBvbiBiaWcgZG9jdW1lbnRzLgogICAgICAgICAgZm9yICh2YXIgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHF1ZXJ5KTsgY3Vyc29yLmZpbmROZXh0KCk7KQogICAgICAgICAgICBzdGF0ZS5tYXJrZWQucHVzaChjbS5tYXJrVGV4dChjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSwgIkNvZGVNaXJyb3Itc2VhcmNoaW5nIikpOwogICAgICAgIH0KICAgICAgICBzdGF0ZS5wb3NGcm9tID0gc3RhdGUucG9zVG8gPSBjbS5nZXRDdXJzb3IoKTsKICAgICAgICBmaW5kTmV4dChjbSwgcmV2KTsKICAgICAgfSk7CiAgICB9KTsKICB9CiAgZnVuY3Rpb24gZmluZE5leHQoY20sIHJldikge2NtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3Ioc3RhdGUucXVlcnksIHJldiA/IHN0YXRlLnBvc0Zyb20gOiBzdGF0ZS5wb3NUbyk7CiAgICBpZiAoIWN1cnNvci5maW5kKHJldikpIHsKICAgICAgY3Vyc29yID0gY20uZ2V0U2VhcmNoQ3Vyc29yKHN0YXRlLnF1ZXJ5LCByZXYgPyB7bGluZTogY20ubGluZUNvdW50KCkgLSAxfSA6IHtsaW5lOiAwLCBjaDogMH0pOwogICAgICBpZiAoIWN1cnNvci5maW5kKHJldikpIHJldHVybjsKICAgIH0KICAgIGNtLnNldFNlbGVjdGlvbihjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSk7CiAgICBzdGF0ZS5wb3NGcm9tID0gY3Vyc29yLmZyb20oKTsgc3RhdGUucG9zVG8gPSBjdXJzb3IudG8oKTsKICB9KX0KICBmdW5jdGlvbiBjbGVhclNlYXJjaChjbSkge2NtLm9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgIHZhciBzdGF0ZSA9IGdldFNlYXJjaFN0YXRlKGNtKTsKICAgIGlmICghc3RhdGUucXVlcnkpIHJldHVybjsKICAgIHN0YXRlLnF1ZXJ5ID0gbnVsbDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUubWFya2VkLmxlbmd0aDsgKytpKSBzdGF0ZS5tYXJrZWRbaV0uY2xlYXIoKTsKICAgIHN0YXRlLm1hcmtlZC5sZW5ndGggPSAwOwogIH0pfQoKICB2YXIgcmVwbGFjZVF1ZXJ5RGlhbG9nID0KICAgICdSZXBsYWNlOiA8aW5wdXQgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAxMGVtIj4gPHNwYW4gc3R5bGU9ImNvbG9yOiAjODg4Ij4oVXNlIC9yZS8gc3ludGF4IGZvciByZWdleHAgc2VhcmNoKTwvc3Bhbj4nOwogIHZhciByZXBsYWNlbWVudFF1ZXJ5RGlhbG9nID0gJ1dpdGg6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDEwZW0iPic7CiAgdmFyIGRvUmVwbGFjZUNvbmZpcm0gPSAiUmVwbGFjZT8gPGJ1dHRvbj5ZZXM8L2J1dHRvbj4gPGJ1dHRvbj5ObzwvYnV0dG9uPiA8YnV0dG9uPlN0b3A8L2J1dHRvbj4iOwogIGZ1bmN0aW9uIHJlcGxhY2UoY20sIGFsbCkgewogICAgZGlhbG9nKGNtLCByZXBsYWNlUXVlcnlEaWFsb2csICJSZXBsYWNlOiIsIGZ1bmN0aW9uKHF1ZXJ5KSB7CiAgICAgIGlmICghcXVlcnkpIHJldHVybjsKICAgICAgcXVlcnkgPSBwYXJzZVF1ZXJ5KHF1ZXJ5KTsKICAgICAgZGlhbG9nKGNtLCByZXBsYWNlbWVudFF1ZXJ5RGlhbG9nLCAiUmVwbGFjZSB3aXRoOiIsIGZ1bmN0aW9uKHRleHQpIHsKICAgICAgICBpZiAoYWxsKSB7CiAgICAgICAgICBjbS5vcGVyYXRpb24oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGZvciAodmFyIGN1cnNvciA9IGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSk7IGN1cnNvci5maW5kTmV4dCgpOykgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgcXVlcnkgIT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHZhciBtYXRjaCA9IGNtLmdldFJhbmdlKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKS5tYXRjaChxdWVyeSk7CiAgICAgICAgICAgICAgICBjdXJzb3IucmVwbGFjZSh0ZXh0LnJlcGxhY2UoL1wkKFxkKS8sIGZ1bmN0aW9uKHcsIGkpIHtyZXR1cm4gbWF0Y2hbaV07fSkpOwogICAgICAgICAgICAgIH0gZWxzZSBjdXJzb3IucmVwbGFjZSh0ZXh0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNsZWFyU2VhcmNoKGNtKTsKICAgICAgICAgIHZhciBjdXJzb3IgPSBjbS5nZXRTZWFyY2hDdXJzb3IocXVlcnksIGNtLmdldEN1cnNvcigpKTsKICAgICAgICAgIGZ1bmN0aW9uIGFkdmFuY2UoKSB7CiAgICAgICAgICAgIHZhciBzdGFydCA9IGN1cnNvci5mcm9tKCksIG1hdGNoOwogICAgICAgICAgICBpZiAoIShtYXRjaCA9IGN1cnNvci5maW5kTmV4dCgpKSkgewogICAgICAgICAgICAgIGN1cnNvciA9IGNtLmdldFNlYXJjaEN1cnNvcihxdWVyeSk7CiAgICAgICAgICAgICAgaWYgKCEobWF0Y2ggPSBjdXJzb3IuZmluZE5leHQoKSkgfHwKICAgICAgICAgICAgICAgICAgKGN1cnNvci5mcm9tKCkubGluZSA9PSBzdGFydC5saW5lICYmIGN1cnNvci5mcm9tKCkuY2ggPT0gc3RhcnQuY2gpKSByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY20uc2V0U2VsZWN0aW9uKGN1cnNvci5mcm9tKCksIGN1cnNvci50bygpKTsKICAgICAgICAgICAgY29uZmlybURpYWxvZyhjbSwgZG9SZXBsYWNlQ29uZmlybSwgIlJlcGxhY2U/IiwKICAgICAgICAgICAgICAgICAgICAgICAgICBbZnVuY3Rpb24oKSB7ZG9SZXBsYWNlKG1hdGNoKTt9LCBhZHZhbmNlXSk7CiAgICAgICAgICB9CiAgICAgICAgICBmdW5jdGlvbiBkb1JlcGxhY2UobWF0Y2gpIHsKICAgICAgICAgICAgY3Vyc29yLnJlcGxhY2UodHlwZW9mIHF1ZXJ5ID09ICJzdHJpbmciID8gdGV4dCA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZSgvXCQoXGQpLywgZnVuY3Rpb24odywgaSkge3JldHVybiBtYXRjaFtpXTt9KSk7CiAgICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBDb2RlTWlycm9yLmNvbW1hbmRzLmZpbmQgPSBmdW5jdGlvbihjbSkge2NsZWFyU2VhcmNoKGNtKTsgZG9TZWFyY2goY20pO307CiAgQ29kZU1pcnJvci5jb21tYW5kcy5maW5kTmV4dCA9IGRvU2VhcmNoOwogIENvZGVNaXJyb3IuY29tbWFuZHMuZmluZFByZXYgPSBmdW5jdGlvbihjbSkge2RvU2VhcmNoKGNtLCB0cnVlKTt9OwogIENvZGVNaXJyb3IuY29tbWFuZHMuY2xlYXJTZWFyY2ggPSBjbGVhclNlYXJjaDsKICBDb2RlTWlycm9yLmNvbW1hbmRzLnJlcGxhY2UgPSByZXBsYWNlOwogIENvZGVNaXJyb3IuY29tbWFuZHMucmVwbGFjZUFsbCA9IGZ1bmN0aW9uKGNtKSB7cmVwbGFjZShjbSwgdHJ1ZSk7fTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/searchcursor.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCl7CiAgZnVuY3Rpb24gU2VhcmNoQ3Vyc29yKGNtLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCkgewogICAgdGhpcy5hdE9jY3VycmVuY2UgPSBmYWxzZTsgdGhpcy5jbSA9IGNtOwogICAgaWYgKGNhc2VGb2xkID09IG51bGwpIGNhc2VGb2xkID0gdHlwZW9mIHF1ZXJ5ID09ICJzdHJpbmciICYmIHF1ZXJ5ID09IHF1ZXJ5LnRvTG93ZXJDYXNlKCk7CgogICAgcG9zID0gcG9zID8gY20uY2xpcFBvcyhwb3MpIDoge2xpbmU6IDAsIGNoOiAwfTsKICAgIHRoaXMucG9zID0ge2Zyb206IHBvcywgdG86IHBvc307CgogICAgLy8gVGhlIG1hdGNoZXMgbWV0aG9kIGlzIGZpbGxlZCBpbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiBxdWVyeS4KICAgIC8vIEl0IHRha2VzIGEgcG9zaXRpb24gYW5kIGEgZGlyZWN0aW9uLCBhbmQgcmV0dXJucyBhbiBvYmplY3QKICAgIC8vIGRlc2NyaWJpbmcgdGhlIG5leHQgb2NjdXJyZW5jZSBvZiB0aGUgcXVlcnksIG9yIG51bGwgaWYgbm8KICAgIC8vIG1vcmUgbWF0Y2hlcyB3ZXJlIGZvdW5kLgogICAgaWYgKHR5cGVvZiBxdWVyeSAhPSAic3RyaW5nIikgLy8gUmVnZXhwIG1hdGNoCiAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgIGlmIChyZXZlcnNlKSB7CiAgICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpLnNsaWNlKDAsIHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksIHN0YXJ0ID0gMDsKICAgICAgICAgIHdoaWxlIChtYXRjaCkgewogICAgICAgICAgICB2YXIgaW5kID0gbGluZS5pbmRleE9mKG1hdGNoWzBdKTsKICAgICAgICAgICAgc3RhcnQgKz0gaW5kOwogICAgICAgICAgICBsaW5lID0gbGluZS5zbGljZShpbmQgKyAxKTsKICAgICAgICAgICAgdmFyIG5ld21hdGNoID0gbGluZS5tYXRjaChxdWVyeSk7CiAgICAgICAgICAgIGlmIChuZXdtYXRjaCkgbWF0Y2ggPSBuZXdtYXRjaDsKICAgICAgICAgICAgZWxzZSBicmVhazsKICAgICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgbGluZSA9IGNtLmdldExpbmUocG9zLmxpbmUpLnNsaWNlKHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksCiAgICAgICAgICBzdGFydCA9IG1hdGNoICYmIHBvcy5jaCArIGxpbmUuaW5kZXhPZihtYXRjaFswXSk7CiAgICAgICAgfQogICAgICAgIGlmIChtYXRjaCkKICAgICAgICAgIHJldHVybiB7ZnJvbToge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LAogICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnQgKyBtYXRjaFswXS5sZW5ndGh9LAogICAgICAgICAgICAgICAgICBtYXRjaDogbWF0Y2h9OwogICAgICB9OwogICAgZWxzZSB7IC8vIFN0cmluZyBxdWVyeQogICAgICBpZiAoY2FzZUZvbGQpIHF1ZXJ5ID0gcXVlcnkudG9Mb3dlckNhc2UoKTsKICAgICAgdmFyIGZvbGQgPSBjYXNlRm9sZCA/IGZ1bmN0aW9uKHN0cil7cmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO30gOiBmdW5jdGlvbihzdHIpe3JldHVybiBzdHI7fTsKICAgICAgdmFyIHRhcmdldCA9IHF1ZXJ5LnNwbGl0KCJcbiIpOwogICAgICAvLyBEaWZmZXJlbnQgbWV0aG9kcyBmb3Igc2luZ2xlLWxpbmUgYW5kIG11bHRpLWxpbmUgcXVlcmllcwogICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA9PSAxKQogICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgICAgdmFyIGxpbmUgPSBmb2xkKGNtLmdldExpbmUocG9zLmxpbmUpKSwgbGVuID0gcXVlcnkubGVuZ3RoLCBtYXRjaDsKICAgICAgICAgIGlmIChyZXZlcnNlID8gKHBvcy5jaCA+PSBsZW4gJiYgKG1hdGNoID0gbGluZS5sYXN0SW5kZXhPZihxdWVyeSwgcG9zLmNoIC0gbGVuKSkgIT0gLTEpCiAgICAgICAgICAgICAgOiAobWF0Y2ggPSBsaW5lLmluZGV4T2YocXVlcnksIHBvcy5jaCkpICE9IC0xKQogICAgICAgICAgICByZXR1cm4ge2Zyb206IHtsaW5lOiBwb3MubGluZSwgY2g6IG1hdGNofSwKICAgICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogbWF0Y2ggKyBsZW59fTsKICAgICAgICB9OwogICAgICBlbHNlCiAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24ocmV2ZXJzZSwgcG9zKSB7CiAgICAgICAgICB2YXIgbG4gPSBwb3MubGluZSwgaWR4ID0gKHJldmVyc2UgPyB0YXJnZXQubGVuZ3RoIC0gMSA6IDApLCBtYXRjaCA9IHRhcmdldFtpZHhdLCBsaW5lID0gZm9sZChjbS5nZXRMaW5lKGxuKSk7CiAgICAgICAgICB2YXIgb2Zmc2V0QSA9IChyZXZlcnNlID8gbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCA6IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpKTsKICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QSA+PSBwb3MuY2ggfHwgb2Zmc2V0QSAhPSBtYXRjaC5sZW5ndGgKICAgICAgICAgICAgICA6IG9mZnNldEEgPD0gcG9zLmNoIHx8IG9mZnNldEEgIT0gbGluZS5sZW5ndGggLSBtYXRjaC5sZW5ndGgpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgaWYgKHJldmVyc2UgPyAhbG4gOiBsbiA9PSBjbS5saW5lQ291bnQoKSAtIDEpIHJldHVybjsKICAgICAgICAgICAgbGluZSA9IGZvbGQoY20uZ2V0TGluZShsbiArPSByZXZlcnNlID8gLTEgOiAxKSk7CiAgICAgICAgICAgIG1hdGNoID0gdGFyZ2V0W3JldmVyc2UgPyAtLWlkeCA6ICsraWR4XTsKICAgICAgICAgICAgaWYgKGlkeCA+IDAgJiYgaWR4IDwgdGFyZ2V0Lmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgICBpZiAobGluZSAhPSBtYXRjaCkgcmV0dXJuOwogICAgICAgICAgICAgIGVsc2UgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG9mZnNldEIgPSAocmV2ZXJzZSA/IGxpbmUubGFzdEluZGV4T2YobWF0Y2gpIDogbGluZS5pbmRleE9mKG1hdGNoKSArIG1hdGNoLmxlbmd0aCk7CiAgICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QiAhPSBsaW5lLmxlbmd0aCAtIG1hdGNoLmxlbmd0aCA6IG9mZnNldEIgIT0gbWF0Y2gubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgdmFyIHN0YXJ0ID0ge2xpbmU6IHBvcy5saW5lLCBjaDogb2Zmc2V0QX0sIGVuZCA9IHtsaW5lOiBsbiwgY2g6IG9mZnNldEJ9OwogICAgICAgICAgICByZXR1cm4ge2Zyb206IHJldmVyc2UgPyBlbmQgOiBzdGFydCwgdG86IHJldmVyc2UgPyBzdGFydCA6IGVuZH07CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgIH0KICB9CgogIFNlYXJjaEN1cnNvci5wcm90b3R5cGUgPSB7CiAgICBmaW5kTmV4dDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZChmYWxzZSk7fSwKICAgIGZpbmRQcmV2aW91czogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZCh0cnVlKTt9LAoKICAgIGZpbmQ6IGZ1bmN0aW9uKHJldmVyc2UpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzLCBwb3MgPSB0aGlzLmNtLmNsaXBQb3MocmV2ZXJzZSA/IHRoaXMucG9zLmZyb20gOiB0aGlzLnBvcy50byk7CiAgICAgIGZ1bmN0aW9uIHNhdmVQb3NBbmRGYWlsKGxpbmUpIHsKICAgICAgICB2YXIgcG9zID0ge2xpbmU6IGxpbmUsIGNoOiAwfTsKICAgICAgICBzZWxmLnBvcyA9IHtmcm9tOiBwb3MsIHRvOiBwb3N9OwogICAgICAgIHNlbGYuYXRPY2N1cnJlbmNlID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBmb3IgKDs7KSB7CiAgICAgICAgaWYgKHRoaXMucG9zID0gdGhpcy5tYXRjaGVzKHJldmVyc2UsIHBvcykpIHsKICAgICAgICAgIHRoaXMuYXRPY2N1cnJlbmNlID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiB0aGlzLnBvcy5tYXRjaCB8fCB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgaWYgKCFwb3MubGluZSkgcmV0dXJuIHNhdmVQb3NBbmRGYWlsKDApOwogICAgICAgICAgcG9zID0ge2xpbmU6IHBvcy5saW5lLTEsIGNoOiB0aGlzLmNtLmdldExpbmUocG9zLmxpbmUtMSkubGVuZ3RofTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICB2YXIgbWF4TGluZSA9IHRoaXMuY20ubGluZUNvdW50KCk7CiAgICAgICAgICBpZiAocG9zLmxpbmUgPT0gbWF4TGluZSAtIDEpIHJldHVybiBzYXZlUG9zQW5kRmFpbChtYXhMaW5lKTsKICAgICAgICAgIHBvcyA9IHtsaW5lOiBwb3MubGluZSsxLCBjaDogMH07CiAgICAgICAgfQogICAgICB9CiAgICB9LAoKICAgIGZyb206IGZ1bmN0aW9uKCkge2lmICh0aGlzLmF0T2NjdXJyZW5jZSkgcmV0dXJuIHRoaXMucG9zLmZyb207fSwKICAgIHRvOiBmdW5jdGlvbigpIHtpZiAodGhpcy5hdE9jY3VycmVuY2UpIHJldHVybiB0aGlzLnBvcy50bzt9LAoKICAgIHJlcGxhY2U6IGZ1bmN0aW9uKG5ld1RleHQpIHsKICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICBpZiAodGhpcy5hdE9jY3VycmVuY2UpCiAgICAgICAgc2VsZi5wb3MudG8gPSB0aGlzLmNtLnJlcGxhY2VSYW5nZShuZXdUZXh0LCBzZWxmLnBvcy5mcm9tLCBzZWxmLnBvcy50byk7CiAgICB9CiAgfTsKCiAgQ29kZU1pcnJvci5kZWZpbmVFeHRlbnNpb24oImdldFNlYXJjaEN1cnNvciIsIGZ1bmN0aW9uKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7CiAgICByZXR1cm4gbmV3IFNlYXJjaEN1cnNvcih0aGlzLCBxdWVyeSwgcG9zLCBjYXNlRm9sZCk7CiAgfSk7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3ItY29tcGxldGlvbnMgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiAxMDsKICBvdmVyZmxvdzogaGlkZGVuOwogIC13ZWJraXQtYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgLW1vei1ib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKICBib3gtc2hhZG93OiAycHggM3B4IDVweCByZ2JhKDAsMCwwLC4yKTsKfQouQ29kZU1pcnJvci1jb21wbGV0aW9ucyBzZWxlY3QgewogIGJhY2tncm91bmQ6ICNmYWZhZmE7CiAgb3V0bGluZTogbm9uZTsKICBib3JkZXI6IG5vbmU7CiAgcGFkZGluZzogMDsKICBtYXJnaW46IDA7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/util/simple-hint.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIENvZGVNaXJyb3Iuc2ltcGxlSGludCA9IGZ1bmN0aW9uKGVkaXRvciwgZ2V0SGludHMpIHsKICAgIC8vIFdlIHdhbnQgYSBzaW5nbGUgY3Vyc29yIHBvc2l0aW9uLgogICAgaWYgKGVkaXRvci5zb21ldGhpbmdTZWxlY3RlZCgpKSByZXR1cm47CiAgICB2YXIgcmVzdWx0ID0gZ2V0SGludHMoZWRpdG9yKTsKICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubGlzdC5sZW5ndGgpIHJldHVybjsKICAgIHZhciBjb21wbGV0aW9ucyA9IHJlc3VsdC5saXN0OwogICAgZnVuY3Rpb24gaW5zZXJ0KHN0cikgewogICAgICBlZGl0b3IucmVwbGFjZVJhbmdlKHN0ciwgcmVzdWx0LmZyb20sIHJlc3VsdC50byk7CiAgICB9CiAgICAvLyBXaGVuIHRoZXJlIGlzIG9ubHkgb25lIGNvbXBsZXRpb24sIHVzZSBpdCBkaXJlY3RseS4KICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPT0gMSkge2luc2VydChjb21wbGV0aW9uc1swXSk7IHJldHVybiB0cnVlO30KCiAgICAvLyBCdWlsZCB0aGUgc2VsZWN0IHdpZGdldAogICAgdmFyIGNvbXBsZXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb21wbGV0ZS5jbGFzc05hbWUgPSAiQ29kZU1pcnJvci1jb21wbGV0aW9ucyI7CiAgICB2YXIgc2VsID0gY29tcGxldGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IikpOwogICAgLy8gT3BlcmEgZG9lc24ndCBtb3ZlIHRoZSBzZWxlY3Rpb24gd2hlbiBwcmVzc2luZyB1cC9kb3duIGluIGEKICAgIC8vIG11bHRpLXNlbGVjdCwgYnV0IGl0IGRvZXMgcHJvcGVybHkgc3VwcG9ydCB0aGUgc2l6ZSBwcm9wZXJ0eSBvbgogICAgLy8gc2luZ2xlLXNlbGVjdHMsIHNvIG5vIG11bHRpLXNlbGVjdCBpcyBuZWNlc3NhcnkuCiAgICBpZiAoIXdpbmRvdy5vcGVyYSkgc2VsLm11bHRpcGxlID0gdHJ1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIG9wdCA9IHNlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7CiAgICAgIG9wdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21wbGV0aW9uc1tpXSkpOwogICAgfQogICAgc2VsLmZpcnN0Q2hpbGQuc2VsZWN0ZWQgPSB0cnVlOwogICAgc2VsLnNpemUgPSBNYXRoLm1pbigxMCwgY29tcGxldGlvbnMubGVuZ3RoKTsKICAgIHZhciBwb3MgPSBlZGl0b3IuY3Vyc29yQ29vcmRzKCk7CiAgICBjb21wbGV0ZS5zdHlsZS5sZWZ0ID0gcG9zLnggKyAicHgiOwogICAgY29tcGxldGUuc3R5bGUudG9wID0gcG9zLnlCb3QgKyAicHgiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb21wbGV0ZSk7CiAgICAvLyBJZiB3ZSdyZSBhdCB0aGUgZWRnZSBvZiB0aGUgc2NyZWVuLCB0aGVuIHdlIHdhbnQgdGhlIG1lbnUgdG8gYXBwZWFyIG9uIHRoZSBsZWZ0IG9mIHRoZSBjdXJzb3IuCiAgICB2YXIgd2luVyA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IE1hdGgubWF4KGRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGgsIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRXaWR0aCk7CiAgICBpZih3aW5XIC0gcG9zLnggPCBzZWwuY2xpZW50V2lkdGgpCiAgICAgIGNvbXBsZXRlLnN0eWxlLmxlZnQgPSAocG9zLnggLSBzZWwuY2xpZW50V2lkdGgpICsgInB4IjsKICAgIC8vIEhhY2sgdG8gaGlkZSB0aGUgc2Nyb2xsYmFyLgogICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA8PSAxMCkKICAgICAgY29tcGxldGUuc3R5bGUud2lkdGggPSAoc2VsLmNsaWVudFdpZHRoIC0gMSkgKyAicHgiOwoKICAgIHZhciBkb25lID0gZmFsc2U7CiAgICBmdW5jdGlvbiBjbG9zZSgpIHsKICAgICAgaWYgKGRvbmUpIHJldHVybjsKICAgICAgZG9uZSA9IHRydWU7CiAgICAgIGNvbXBsZXRlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29tcGxldGUpOwogICAgfQogICAgZnVuY3Rpb24gcGljaygpIHsKICAgICAgaW5zZXJ0KGNvbXBsZXRpb25zW3NlbC5zZWxlY3RlZEluZGV4XSk7CiAgICAgIGNsb3NlKCk7CiAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtlZGl0b3IuZm9jdXMoKTt9LCA1MCk7CiAgICB9CiAgICBDb2RlTWlycm9yLmNvbm5lY3Qoc2VsLCAiYmx1ciIsIGNsb3NlKTsKICAgIENvZGVNaXJyb3IuY29ubmVjdChzZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgdmFyIGNvZGUgPSBldmVudC5rZXlDb2RlOwogICAgICAvLyBFbnRlcgogICAgICBpZiAoY29kZSA9PSAxMykge0NvZGVNaXJyb3IuZV9zdG9wKGV2ZW50KTsgcGljaygpO30KICAgICAgLy8gRXNjYXBlCiAgICAgIGVsc2UgaWYgKGNvZGUgPT0gMjcpIHtDb2RlTWlycm9yLmVfc3RvcChldmVudCk7IGNsb3NlKCk7IGVkaXRvci5mb2N1cygpO30KICAgICAgZWxzZSBpZiAoY29kZSAhPSAzOCAmJiBjb2RlICE9IDQwKSB7CiAgICAgICAgY2xvc2UoKTsgZWRpdG9yLmZvY3VzKCk7CiAgICAgICAgLy8gUGFzcyB0aGUgZXZlbnQgdG8gdGhlIENvZGVNaXJyb3IgaW5zdGFuY2Ugc28gdGhhdCBpdCBjYW4gaGFuZGxlIHRoaW5ncyBsaWtlIGJhY2tzcGFjZSBwcm9wZXJseS4KICAgICAgICBlZGl0b3IudHJpZ2dlck9uS2V5RG93bihldmVudCk7CiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpe0NvZGVNaXJyb3Iuc2ltcGxlSGludChlZGl0b3IsIGdldEhpbnRzKTt9LCA1MCk7CiAgICAgIH0KICAgIH0pOwogICAgQ29kZU1pcnJvci5jb25uZWN0KHNlbCwgImRibGNsaWNrIiwgcGljayk7CgogICAgc2VsLmZvY3VzKCk7CiAgICAvLyBPcGVyYSBzb21ldGltZXMgaWdub3JlcyBmb2N1c2luZyBhIGZyZXNobHkgY3JlYXRlZCBub2RlCiAgICBpZiAod2luZG93Lm9wZXJhKSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7aWYgKCFkb25lKSBzZWwuZm9jdXMoKTt9LCAxMDApOwogICAgcmV0dXJuIHRydWU7CiAgfTsKfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KClBsZWFzZSBub3RlIHRoYXQgc29tZSBzdWJkaXJlY3RvcmllcyBvZiB0aGUgQ29kZU1pcnJvciBkaXN0cmlidXRpb24KaW5jbHVkZSB0aGVpciBvd24gTElDRU5TRSBmaWxlcywgYW5kIGFyZSByZWxlYXNlZCB1bmRlciBkaWZmZXJlbnQKbGljZW5jZXMuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/clike.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jLWxpa2Uta2V5d29yZCB7Y29sb3I6ICM5MGI7fQpzcGFuLmMtbGlrZS1udW1iZXIge2NvbG9yOiAjMjkxO30Kc3Bhbi5jLWxpa2UtY29tbWVudCB7Y29sb3I6ICNhNzA7fQpzcGFuLmMtbGlrZS1zdHJpbmcge2NvbG9yOiAjYTIyO30Kc3Bhbi5jLWxpa2UtcHJlcHJvY2Vzc29yIHtjb2xvcjogIzA0OTt9CnNwYW4uYy1saWtlLXZhciB7Y29sb3I6ICMyMmI7fQpzcGFuLmMtbGlrZS1hbm5vdGF0aW9uIHtjb2xvcjogIzY2Njt9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/clike.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbGlrZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMgfHwge30sCiAgICAgIGJsb2NrS2V5d29yZHMgPSBwYXJzZXJDb25maWcuYmxvY2tLZXl3b3JkcyB8fCB7fSwKICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sCiAgICAgIGhvb2tzID0gcGFyc2VyQ29uZmlnLmhvb2tzIHx8IHt9LAogICAgICBtdWx0aUxpbmVTdHJpbmdzID0gcGFyc2VyQ29uZmlnLm11bHRpTGluZVN0cmluZ3M7CiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcL10vOwoKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoaG9va3NbY2hdKSB7CiAgICAgIHZhciByZXN1bHQgPSBob29rc1tjaF0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsKICAgICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7CiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsKICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgIH0KICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImF0b20iOwogICAgcmV0dXJuICJ3b3JkIjsKICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gbnVsbDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuICJjb21tZW50IjsKICB9CgogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuYWxpZ24gPSBhbGlnbjsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlOwogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQogICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiBudWxsLAogICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgInRvcCIsIGZhbHNlKSwKICAgICAgICBpbmRlbnRlZDogMCwKICAgICAgICBzdGFydE9mTGluZTogdHJ1ZQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgY3VyUHVuYyA9IG51bGw7CiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAoc3R5bGUgPT0gImNvbW1lbnQiIHx8IHN0eWxlID09ICJtZXRhIikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IHRydWU7CgogICAgICBpZiAoKGN1clB1bmMgPT0gIjsiIHx8IGN1clB1bmMgPT0gIjoiKSAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAifSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJbIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIl0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiKCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICIpIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIn0iKSB7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoY3R4LnR5cGUgPT0gIn0iKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmIChjdHgudHlwZSA9PSAifSIgfHwgY3R4LnR5cGUgPT0gInRvcCIgfHwgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmIGN1clB1bmMgPT0gIm5ld3N0YXRlbWVudCIpKQogICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJzdGF0ZW1lbnQiKTsKICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSAmJiBzdGF0ZS50b2tlbml6ZSAhPSBudWxsKSByZXR1cm4gMDsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQsIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwogICAgICBpZiAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgZmlyc3RDaGFyID09ICJ9IikgY3R4ID0gY3R4LnByZXY7CiAgICAgIHZhciBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlOwogICAgICBpZiAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHJldHVybiBjdHguaW5kZW50ZWQgKyAoZmlyc3RDaGFyID09ICJ7IiA/IDAgOiBpbmRlbnRVbml0KTsKICAgICAgZWxzZSBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKKGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIHdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIgY0tleXdvcmRzID0gImF1dG8gaWYgYnJlYWsgaW50IGNhc2UgbG9uZyBjaGFyIHJlZ2lzdGVyIGNvbnRpbnVlIHJldHVybiBkZWZhdWx0IHNob3J0IGRvIHNpemVvZiAiICsKICAgICJkb3VibGUgc3RhdGljIGVsc2Ugc3RydWN0IGVudHJ5IHN3aXRjaCBleHRlcm4gdHlwZWRlZiBmbG9hdCB1bmlvbiBmb3IgdW5zaWduZWQgIiArCiAgICAiZ290byB3aGlsZSBlbnVtIHZvaWQgY29uc3Qgc2lnbmVkIHZvbGF0aWxlIjsKCiAgZnVuY3Rpb24gY3BwSG9vayhzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoIXN0YXRlLnN0YXJ0T2ZMaW5lKSByZXR1cm4gZmFsc2U7CiAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICByZXR1cm4gIm1ldGEiOwogIH0KCiAgLy8gQyMtc3R5bGUgc3RyaW5ncyB3aGVyZSAiIiBlc2NhcGVzIGEgcXVvdGUuCiAgZnVuY3Rpb24gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbmV4dDsKICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgaWYgKG5leHQgPT0gJyInICYmICFzdHJlYW0uZWF0KCciJykpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAic3RyaW5nIjsKICB9CgogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWNzcmMiLCB7CiAgICBuYW1lOiAiY2xpa2UiLAogICAga2V5d29yZHM6IHdvcmRzKGNLZXl3b3JkcyksCiAgICBibG9ja0tleXdvcmRzOiB3b3JkcygiY2FzZSBkbyBlbHNlIGZvciBpZiBzd2l0Y2ggd2hpbGUgc3RydWN0IiksCiAgICBhdG9tczogd29yZHMoIm51bGwiKSwKICAgIGhvb2tzOiB7IiMiOiBjcHBIb29rfQogIH0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWMrK3NyYyIsIHsKICAgIG5hbWU6ICJjbGlrZSIsCiAgICBrZXl3b3Jkczogd29yZHMoY0tleXdvcmRzICsgIiBhc20gZHluYW1pY19jYXN0IG5hbWVzcGFjZSByZWludGVycHJldF9jYXN0IHRyeSBib29sIGV4cGxpY2l0IG5ldyAiICsKICAgICAgICAgICAgICAgICAgICAic3RhdGljX2Nhc3QgdHlwZWlkIGNhdGNoIG9wZXJhdG9yIHRlbXBsYXRlIHR5cGVuYW1lIGNsYXNzIGZyaWVuZCBwcml2YXRlICIgKwogICAgICAgICAgICAgICAgICAgICJ0aGlzIHVzaW5nIGNvbnN0X2Nhc3QgaW5saW5lIHB1YmxpYyB0aHJvdyB2aXJ0dWFsIGRlbGV0ZSBtdXRhYmxlIHByb3RlY3RlZCAiICsKICAgICAgICAgICAgICAgICAgICAid2NoYXJfdCIpLAogICAgYmxvY2tLZXl3b3Jkczogd29yZHMoImNhdGNoIGNsYXNzIGRvIGVsc2UgZmluYWxseSBmb3IgaWYgc3RydWN0IHN3aXRjaCB0cnkgd2hpbGUiKSwKICAgIGF0b21zOiB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIiksCiAgICBob29rczogeyIjIjogY3BwSG9va30KICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1qYXZhIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiB3b3JkcygiYWJzdHJhY3QgYXNzZXJ0IGJvb2xlYW4gYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2xhc3MgY29uc3QgY29udGludWUgZGVmYXVsdCAiICsgCiAgICAgICAgICAgICAgICAgICAgImRvIGRvdWJsZSBlbHNlIGVudW0gZXh0ZW5kcyBmaW5hbCBmaW5hbGx5IGZsb2F0IGZvciBnb3RvIGlmIGltcGxlbWVudHMgaW1wb3J0ICIgKwogICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZW9mIGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgbmV3IHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljICIgKwogICAgICAgICAgICAgICAgICAgICJyZXR1cm4gc2hvcnQgc3RhdGljIHN0cmljdGZwIHN1cGVyIHN3aXRjaCBzeW5jaHJvbml6ZWQgdGhpcyB0aHJvdyB0aHJvd3MgdHJhbnNpZW50ICIgKwogICAgICAgICAgICAgICAgICAgICJ0cnkgdm9pZCB2b2xhdGlsZSB3aGlsZSIpLAogICAgYmxvY2tLZXl3b3Jkczogd29yZHMoImNhdGNoIGNsYXNzIGRvIGVsc2UgZmluYWxseSBmb3IgaWYgc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IHdvcmRzKCJ0cnVlIGZhbHNlIG51bGwiKSwKICAgIGhvb2tzOiB7CiAgICAgICJAIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICAgIHJldHVybiAibWV0YSI7CiAgICAgIH0KICAgIH0KICB9KTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jc2hhcnAiLCB7CiAgICBuYW1lOiAiY2xpa2UiLAogICAga2V5d29yZHM6IHdvcmRzKCJhYnN0cmFjdCBhcyBiYXNlIGJvb2wgYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2hlY2tlZCBjbGFzcyBjb25zdCBjb250aW51ZSBkZWNpbWFsIiArIAogICAgICAgICAgICAgICAgICAgICIgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBkb3VibGUgZWxzZSBlbnVtIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmaW5hbGx5IGZpeGVkIGZsb2F0IGZvciIgKyAKICAgICAgICAgICAgICAgICAgICAiIGZvcmVhY2ggZ290byBpZiBpbXBsaWNpdCBpbiBpbnQgaW50ZXJmYWNlIGludGVybmFsIGlzIGxvY2sgbG9uZyBuYW1lc3BhY2UgbmV3IG9iamVjdCIgKyAKICAgICAgICAgICAgICAgICAgICAiIG9wZXJhdG9yIG91dCBvdmVycmlkZSBwYXJhbXMgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJlYWRvbmx5IHJlZiByZXR1cm4gc2J5dGUgc2VhbGVkIHNob3J0IiArIAogICAgICAgICAgICAgICAgICAgICIgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN0cmluZyBzdHJ1Y3Qgc3dpdGNoIHRoaXMgdGhyb3cgdHJ5IHR5cGVvZiB1aW50IHVsb25nIHVuY2hlY2tlZCIgKyAKICAgICAgICAgICAgICAgICAgICAiIHVuc2FmZSB1c2hvcnQgdXNpbmcgdmlydHVhbCB2b2lkIHZvbGF0aWxlIHdoaWxlIGFkZCBhbGlhcyBhc2NlbmRpbmcgZGVzY2VuZGluZyBkeW5hbWljIGZyb20gZ2V0IiArIAogICAgICAgICAgICAgICAgICAgICIgZ2xvYmFsIGdyb3VwIGludG8gam9pbiBsZXQgb3JkZXJieSBwYXJ0aWFsIHJlbW92ZSBzZWxlY3Qgc2V0IHZhbHVlIHZhciB5aWVsZCIpLAogICAgYmxvY2tLZXl3b3Jkczogd29yZHMoImNhdGNoIGNsYXNzIGRvIGVsc2UgZmluYWxseSBmb3IgZm9yZWFjaCBpZiBzdHJ1Y3Qgc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IHdvcmRzKCJ0cnVlIGZhbHNlIG51bGwiKSwKICAgIGhvb2tzOiB7CiAgICAgICJAIjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCciJykpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5BdFN0cmluZzsKICAgICAgICAgIHJldHVybiB0b2tlbkF0U3RyaW5nKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICB9CiAgfSk7Cn0oKSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEMtbGlrZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY2xpa2UuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDLWxpa2UgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovKiBDIGRlbW8gY29kZSAqLwoKI2luY2x1ZGUgPHptcS5oPgojaW5jbHVkZSA8cHRocmVhZC5oPgojaW5jbHVkZSA8c2VtYXBob3JlLmg+CiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8ZmNudGwuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgoKdHlwZWRlZiBzdHJ1Y3QgewogIHZvaWQqIGFyZ19zb2NrZXQ7CiAgem1xX21zZ190KiBhcmdfbXNnOwogIGNoYXIqIGFyZ19zdHJpbmc7CiAgdW5zaWduZWQgbG9uZyBhcmdfbGVuOwogIGludCBhcmdfaW50LCBhcmdfY29tbWFuZDsKCiAgaW50IHNpZ25hbF9mZDsKICBpbnQgcGFkOwogIHZvaWQqIGNvbnRleHQ7CiAgc2VtX3Qgc2VtOwp9IGFjbF96bXFfY29udGV4dDsKCiNkZWZpbmUgcChYKSAoY29udGV4dC0+YXJnXyMjWCkKCnZvaWQqIHptcV90aHJlYWQodm9pZCogY29udGV4dF9wb2ludGVyKSB7CiAgYWNsX3ptcV9jb250ZXh0KiBjb250ZXh0ID0gKGFjbF96bXFfY29udGV4dCopY29udGV4dF9wb2ludGVyOwogIGNoYXIgb2sgPSAnSycsIGVyciA9ICdYJzsKICBpbnQgcmVzOwoKICB3aGlsZSAoMSkgewogICAgd2hpbGUgKChyZXMgPSBzZW1fd2FpdCgmYW1wO2NvbnRleHQtPnNlbSkpID09IEVJTlRSKTsKICAgIGlmIChyZXMpIHt3cml0ZShjb250ZXh0LT5zaWduYWxfZmQsICZhbXA7ZXJyLCAxKTsgZ290byBjbGVhbnVwO30KICAgIHN3aXRjaChwKGNvbW1hbmQpKSB7CiAgICBjYXNlIDA6IGdvdG8gY2xlYW51cDsKICAgIGNhc2UgMTogcChzb2NrZXQpID0gem1xX3NvY2tldChjb250ZXh0LT5jb250ZXh0LCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgMjogcChpbnQpID0gem1xX2Nsb3NlKHAoc29ja2V0KSk7IGJyZWFrOwogICAgY2FzZSAzOiBwKGludCkgPSB6bXFfYmluZChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA0OiBwKGludCkgPSB6bXFfY29ubmVjdChwKHNvY2tldCksIHAoc3RyaW5nKSk7IGJyZWFrOwogICAgY2FzZSA1OiBwKGludCkgPSB6bXFfZ2V0c29ja29wdChwKHNvY2tldCksIHAoaW50KSwgKHZvaWQqKXAoc3RyaW5nKSwgJmFtcDtwKGxlbikpOyBicmVhazsKICAgIGNhc2UgNjogcChpbnQpID0gem1xX3NldHNvY2tvcHQocChzb2NrZXQpLCBwKGludCksICh2b2lkKilwKHN0cmluZyksIHAobGVuKSk7IGJyZWFrOwogICAgY2FzZSA3OiBwKGludCkgPSB6bXFfc2VuZChwKHNvY2tldCksIHAobXNnKSwgcChpbnQpKTsgYnJlYWs7CiAgICBjYXNlIDg6IHAoaW50KSA9IHptcV9yZWN2KHAoc29ja2V0KSwgcChtc2cpLCBwKGludCkpOyBicmVhazsKICAgIGNhc2UgOTogcChpbnQpID0gem1xX3BvbGwocChzb2NrZXQpLCBwKGludCksIHAobGVuKSk7IGJyZWFrOwogICAgfQogICAgcChjb21tYW5kKSA9IGVycm5vOwogICAgd3JpdGUoY29udGV4dC0+c2lnbmFsX2ZkLCAmYW1wO29rLCAxKTsKICB9CiBjbGVhbnVwOgogIGNsb3NlKGNvbnRleHQtPnNpZ25hbF9mZCk7CiAgZnJlZShjb250ZXh0X3BvaW50ZXIpOwogIHJldHVybiAwOwp9Cgp2b2lkKiB6bXFfdGhyZWFkX2luaXQodm9pZCogem1xX2NvbnRleHQsIGludCBzaWduYWxfZmQpIHsKICBhY2xfem1xX2NvbnRleHQqIGNvbnRleHQgPSBtYWxsb2Moc2l6ZW9mKGFjbF96bXFfY29udGV4dCkpOwogIHB0aHJlYWRfdCB0aHJlYWQ7CgogIGNvbnRleHQtPmNvbnRleHQgPSB6bXFfY29udGV4dDsKICBjb250ZXh0LT5zaWduYWxfZmQgPSBzaWduYWxfZmQ7CiAgc2VtX2luaXQoJmFtcDtjb250ZXh0LT5zZW0sIDEsIDApOwogIHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyZWFkLCAwLCAmYW1wO3ptcV90aHJlYWQsIGNvbnRleHQpOwogIHB0aHJlYWRfZGV0YWNoKHRocmVhZCk7CiAgcmV0dXJuIGNvbnRleHQ7Cn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtY3NyYyIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgbW9kZSB0aGF0IHRyaWVzIHRvIGhhbmRsZSBDLWxpa2UgbGFuZ3VhZ2VzIGFzIHdlbGwgYXMgaXQKICAgIGNhbi4gVGFrZXMgdHdvIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyczogPGNvZGU+a2V5d29yZHM8L2NvZGU+LCBhbgogICAgb2JqZWN0IHdob3NlIHByb3BlcnR5IG5hbWVzIGFyZSB0aGUga2V5d29yZHMgaW4gdGhlIGxhbmd1YWdlLAogICAgYW5kIDxjb2RlPnVzZUNQUDwvY29kZT4sIHdoaWNoIGRldGVybWluZXMgd2hldGhlciBDIHByZXByb2Nlc3NvcgogICAgZGlyZWN0aXZlcyBhcmUgcmVjb2duaXplZC48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jc3JjPC9jb2RlPgogICAgKEMgY29kZSksIDxjb2RlPnRleHQveC1jKytzcmM8L2NvZGU+IChDKysKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtamF2YTwvY29kZT4gKEphdmEKICAgIGNvZGUpLCA8Y29kZT50ZXh0L3gtY3NoYXJwPC9jb2RlPiAoQyMpLjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/clojure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogSGFucyBFbmdlbAogKiBCcmFuY2hlZCBmcm9tIENvZGVNaXJyb3IncyBTY2hlbWUgbW9kZSAoYnkgS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4pCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoImNsb2p1cmUiLCBmdW5jdGlvbiAoY29uZmlnLCBtb2RlKSB7CiAgICB2YXIgQlVJTFRJTiA9ICJidWlsdGluIiwgQ09NTUVOVCA9ICJjb21tZW50IiwgU1RSSU5HID0gInN0cmluZyIsIFRBRyA9ICJ0YWciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEID0gImtleXdvcmQiOwogICAgdmFyIElOREVOVF9XT1JEX1NLSVAgPSAyLCBLRVlXT1JEU19TS0lQID0gMTsKCiAgICBmdW5jdGlvbiBtYWtlS2V5d29yZHMoc3RyKSB7CiAgICAgICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgdmFyIGF0b21zID0gbWFrZUtleXdvcmRzKCJ0cnVlIGZhbHNlIG5pbCIpOwogICAgCiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoCiAgICAgICJkZWZuIGRlZm4tIGRlZiBkZWYtIGRlZm9uY2UgZGVmbXVsdGkgZGVmbWV0aG9kIGRlZm1hY3JvIGRlZnN0cnVjdCBkZWZ0eXBlIGRlZnByb3RvY29sIGRlZnJlY29yZCBkZWZwcm9qZWN0IGRlZnRlc3Qgc2xpY2UgZGVmYWxpYXMgZGVmaGludGVkIGRlZm1hY3JvLSBkZWZuLW1lbW8gZGVmbmsgZGVmbmsgZGVmb25jZS0gZGVmdW5ib3VuZCBkZWZ1bmJvdW5kLSBkZWZ2YXIgZGVmdmFyLSBsZXQgbGV0Zm4gZG8gY2FzZSBjb25kIGNvbmRwIGZvciBsb29wIHJlY3VyIHdoZW4gd2hlbi1ub3Qgd2hlbi1sZXQgd2hlbi1maXJzdCBpZiBpZi1sZXQgaWYtbm90IC4gLi4gLT4gLT4+IGRvdG8gYW5kIG9yIGRvc3luYyBkb3NlcSBkb3RpbWVzIGRvcnVuIGRvYWxsIGxvYWQgaW1wb3J0IHVuaW1wb3J0IG5zIGluLW5zIHJlZmVyIHRyeSBjYXRjaCBmaW5hbGx5IHRocm93IHdpdGgtb3BlbiB3aXRoLWxvY2FsLXZhcnMgYmluZGluZyBnZW4tY2xhc3MgZ2VuLWFuZC1sb2FkLWNsYXNzIGdlbi1hbmQtc2F2ZS1jbGFzcyBoYW5kbGVyLWNhc2UgaGFuZGxlIik7CgogICAgdmFyIGJ1aWx0aW5zID0gbWFrZUtleXdvcmRzKAogICAgICAgICIqICoxICoyICozICphZ2VudCogKmFsbG93LXVucmVzb2x2ZWQtdmFycyogKmFzc2VydCAqY2xvanVyZS12ZXJzaW9uKiAqY29tbWFuZC1saW5lLWFyZ3MqICpjb21waWxlLWZpbGVzKiAqY29tcGlsZS1wYXRoKiAqZSAqZXJyKiAqZmlsZSogKmZsdXNoLW9uLW5ld2xpbmUqICppbiogKm1hY3JvLW1ldGEqICptYXRoLWNvbnRleHQqICpucyogKm91dCogKnByaW50LWR1cCogKnByaW50LWxlbmd0aCogKnByaW50LWxldmVsKiAqcHJpbnQtbWV0YSogKnByaW50LXJlYWRhYmx5KiAqcmVhZC1ldmFsKiAqc291cmNlLXBhdGgqICp1c2UtY29udGV4dC1jbGFzc2xvYWRlciogKndhcm4tb24tcmVmbGVjdGlvbiogKyAtIC8gPCA8PSA9ID09ID4gPj0gYWNjZXNzb3IgYWNsb25lIGFnZW50IGFnZW50LWVycm9ycyBhZ2V0IGFsZW5ndGggYWxpYXMgYWxsLW5zIGFsdGVyIGFsdGVyLW1ldGEhIGFsdGVyLXZhci1yb290IGFtYXAgYW5jZXN0b3JzIGFuZCBhcHBseSBhcmVkdWNlIGFycmF5LW1hcCBhc2V0IGFzZXQtYm9vbGVhbiBhc2V0LWJ5dGUgYXNldC1jaGFyIGFzZXQtZG91YmxlIGFzZXQtZmxvYXQgYXNldC1pbnQgYXNldC1sb25nIGFzZXQtc2hvcnQgYXNzZXJ0IGFzc29jIGFzc29jISBhc3NvYy1pbiBhc3NvY2lhdGl2ZT8gYXRvbSBhd2FpdCBhd2FpdC1mb3IgYXdhaXQxIGJhc2VzIGJlYW4gYmlnZGVjIGJpZ2ludCBiaW5kaW5nIGJpdC1hbmQgYml0LWFuZC1ub3QgYml0LWNsZWFyIGJpdC1mbGlwIGJpdC1ub3QgYml0LW9yIGJpdC1zZXQgYml0LXNoaWZ0LWxlZnQgYml0LXNoaWZ0LXJpZ2h0IGJpdC10ZXN0IGJpdC14b3IgYm9vbGVhbiBib29sZWFuLWFycmF5IGJvb2xlYW5zIGJvdW5kLWZuIGJvdW5kLWZuKiBidXRsYXN0IGJ5dGUgYnl0ZS1hcnJheSBieXRlcyBjYXNlIGNhc3QgY2hhciBjaGFyLWFycmF5IGNoYXItZXNjYXBlLXN0cmluZyBjaGFyLW5hbWUtc3RyaW5nIGNoYXI/IGNoYXJzIGNodW5rIGNodW5rLWFwcGVuZCBjaHVuay1idWZmZXIgY2h1bmstY29ucyBjaHVuay1maXJzdCBjaHVuay1uZXh0IGNodW5rLXJlc3QgY2h1bmtlZC1zZXE/IGNsYXNzIGNsYXNzPyBjbGVhci1hZ2VudC1lcnJvcnMgY2xvanVyZS12ZXJzaW9uIGNvbGw/IGNvbW1lbnQgY29tbXV0ZSBjb21wIGNvbXBhcmF0b3IgY29tcGFyZSBjb21wYXJlLWFuZC1zZXQhIGNvbXBpbGUgY29tcGxlbWVudCBjb25jYXQgY29uZCBjb25kcCBjb25qIGNvbmohIGNvbnMgY29uc3RhbnRseSBjb25zdHJ1Y3QtcHJveHkgY29udGFpbnM/IGNvdW50IGNvdW50ZWQ/IGNyZWF0ZS1ucyBjcmVhdGUtc3RydWN0IGN5Y2xlIGRlYyBkZWNpbWFsPyBkZWNsYXJlIGRlZmlubGluZSBkZWZtYWNybyBkZWZtZXRob2QgZGVmbXVsdGkgZGVmbiBkZWZuLSBkZWZvbmNlIGRlZnN0cnVjdCBkZWxheSBkZWxheT8gZGVsaXZlciBkZXJlZiBkZXJpdmUgZGVzY2VuZGFudHMgZGVzdHJ1Y3R1cmUgZGlzaiBkaXNqISBkaXNzb2MgZGlzc29jISBkaXN0aW5jdCBkaXN0aW5jdD8gZG9hbGwgZG9jIGRvcnVuIGRvc2VxIGRvc3luYyBkb3RpbWVzIGRvdG8gZG91YmxlIGRvdWJsZS1hcnJheSBkb3VibGVzIGRyb3AgZHJvcC1sYXN0IGRyb3Atd2hpbGUgZW1wdHkgZW1wdHk/IGVuc3VyZSBlbnVtZXJhdGlvbi1zZXEgZXZhbCBldmVuPyBldmVyeT8gZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSBleHRlbmRzPyBleHRlbmRlcnMgZmFsc2U/IGZmaXJzdCBmaWxlLXNlcSBmaWx0ZXIgZmluZCBmaW5kLWRvYyBmaW5kLW5zIGZpbmQtdmFyIGZpcnN0IGZsb2F0IGZsb2F0LWFycmF5IGZsb2F0PyBmbG9hdHMgZmx1c2ggZm4gZm4/IGZuZXh0IGZvciBmb3JjZSBmb3JtYXQgZnV0dXJlIGZ1dHVyZS1jYWxsIGZ1dHVyZS1jYW5jZWwgZnV0dXJlLWNhbmNlbGxlZD8gZnV0dXJlLWRvbmU/IGZ1dHVyZT8gZ2VuLWNsYXNzIGdlbi1pbnRlcmZhY2UgZ2Vuc3ltIGdldCBnZXQtaW4gZ2V0LW1ldGhvZCBnZXQtcHJveHktY2xhc3MgZ2V0LXRocmVhZC1iaW5kaW5ncyBnZXQtdmFsaWRhdG9yIGhhc2ggaGFzaC1tYXAgaGFzaC1zZXQgaWRlbnRpY2FsPyBpZGVudGl0eSBpZi1sZXQgaWYtbm90IGlmbj8gaW1wb3J0IGluLW5zIGluYyBpbml0LXByb3h5IGluc3RhbmNlPyBpbnQgaW50LWFycmF5IGludGVnZXI/IGludGVybGVhdmUgaW50ZXJuIGludGVycG9zZSBpbnRvIGludG8tYXJyYXkgaW50cyBpbyEgaXNhPyBpdGVyYXRlIGl0ZXJhdG9yLXNlcSBqdXh0IGtleSBrZXlzIGtleXdvcmQga2V5d29yZD8gbGFzdCBsYXp5LWNhdCBsYXp5LXNlcSBsZXQgbGV0Zm4gbGluZS1zZXEgbGlzdCBsaXN0KiBsaXN0PyBsb2FkIGxvYWQtZmlsZSBsb2FkLXJlYWRlciBsb2FkLXN0cmluZyBsb2FkZWQtbGlicyBsb2NraW5nIGxvbmcgbG9uZy1hcnJheSBsb25ncyBsb29wIG1hY3JvZXhwYW5kIG1hY3JvZXhwYW5kLTEgbWFrZS1hcnJheSBtYWtlLWhpZXJhcmNoeSBtYXAgbWFwPyBtYXBjYXQgbWF4IG1heC1rZXkgbWVtZm4gbWVtb2l6ZSBtZXJnZSBtZXJnZS13aXRoIG1ldGEgbWV0aG9kLXNpZyBtZXRob2RzIG1pbiBtaW4ta2V5IG1vZCBuYW1lIG5hbWVzcGFjZSBuZWc/IG5ld2xpbmUgbmV4dCBuZmlyc3QgbmlsPyBubmV4dCBub3Qgbm90LWFueT8gbm90LWVtcHR5IG5vdC1ldmVyeT8gbm90PSBucyBucy1hbGlhc2VzIG5zLWltcG9ydHMgbnMtaW50ZXJucyBucy1tYXAgbnMtbmFtZSBucy1wdWJsaWNzIG5zLXJlZmVycyBucy1yZXNvbHZlIG5zLXVuYWxpYXMgbnMtdW5tYXAgbnRoIG50aG5leHQgbnVtIG51bWJlcj8gb2RkPyBvciBwYXJlbnRzIHBhcnRpYWwgcGFydGl0aW9uIHBjYWxscyBwZWVrIHBlcnNpc3RlbnQhIHBtYXAgcG9wIHBvcCEgcG9wLXRocmVhZC1iaW5kaW5ncyBwb3M/IHByIHByLXN0ciBwcmVmZXItbWV0aG9kIHByZWZlcnMgcHJpbWl0aXZlcy1jbGFzc25hbWVzIHByaW50IHByaW50LWN0b3IgcHJpbnQtZG9jIHByaW50LWR1cCBwcmludC1tZXRob2QgcHJpbnQtbmFtZXNwYWNlLWRvYyBwcmludC1zaW1wbGUgcHJpbnQtc3BlY2lhbC1kb2MgcHJpbnQtc3RyIHByaW50ZiBwcmludGxuIHByaW50bG4tc3RyIHBybiBwcm4tc3RyIHByb21pc2UgcHJveHkgcHJveHktY2FsbC13aXRoLXN1cGVyIHByb3h5LW1hcHBpbmdzIHByb3h5LW5hbWUgcHJveHktc3VwZXIgcHVzaC10aHJlYWQtYmluZGluZ3MgcHZhbHVlcyBxdW90IHJhbmQgcmFuZC1pbnQgcmFuZ2UgcmF0aW8/IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZS1maW5kIHJlLWdyb3VwcyByZS1tYXRjaGVyIHJlLW1hdGNoZXMgcmUtcGF0dGVybiByZS1zZXEgcmVhZCByZWFkLWxpbmUgcmVhZC1zdHJpbmcgcmVpZnkgcmVkdWNlIHJlZiByZWYtaGlzdG9yeS1jb3VudCByZWYtbWF4LWhpc3RvcnkgcmVmLW1pbi1oaXN0b3J5IHJlZi1zZXQgcmVmZXIgcmVmZXItY2xvanVyZSByZWxlYXNlLXBlbmRpbmctc2VuZHMgcmVtIHJlbW92ZSByZW1vdmUtbWV0aG9kIHJlbW92ZS1ucyByZXBlYXQgcmVwZWF0ZWRseSByZXBsYWNlIHJlcGxpY2F0ZSByZXF1aXJlIHJlc2V0ISByZXNldC1tZXRhISByZXNvbHZlIHJlc3QgcmVzdWx0c2V0LXNlcSByZXZlcnNlIHJldmVyc2libGU/IHJzZXEgcnN1YnNlcSBzYXRpc2ZpZXM/IHNlY29uZCBzZWxlY3Qta2V5cyBzZW5kIHNlbmQtb2ZmIHNlcSBzZXE/IHNlcXVlIHNlcXVlbmNlIHNlcXVlbnRpYWw/IHNldCBzZXQtdmFsaWRhdG9yISBzZXQ/IHNob3J0IHNob3J0LWFycmF5IHNob3J0cyBzaHV0ZG93bi1hZ2VudHMgc2x1cnAgc29tZSBzb3J0IHNvcnQtYnkgc29ydGVkLW1hcCBzb3J0ZWQtbWFwLWJ5IHNvcnRlZC1zZXQgc29ydGVkLXNldC1ieSBzb3J0ZWQ/IHNwZWNpYWwtZm9ybS1hbmNob3Igc3BlY2lhbC1zeW1ib2w/IHNwbGl0LWF0IHNwbGl0LXdpdGggc3RyIHN0cmVhbT8gc3RyaW5nPyBzdHJ1Y3Qgc3RydWN0LW1hcCBzdWJzIHN1YnNlcSBzdWJ2ZWMgc3VwZXJzIHN3YXAhIHN5bWJvbCBzeW1ib2w/IHN5bmMgc3ludGF4LXN5bWJvbC1hbmNob3IgdGFrZSB0YWtlLWxhc3QgdGFrZS1udGggdGFrZS13aGlsZSB0ZXN0IHRoZS1ucyB0aW1lIHRvLWFycmF5IHRvLWFycmF5LTJkIHRyYW1wb2xpbmUgdHJhbnNpZW50IHRyZWUtc2VxIHRydWU/IHR5cGUgdW5jaGVja2VkLWFkZCB1bmNoZWNrZWQtZGVjIHVuY2hlY2tlZC1kaXZpZGUgdW5jaGVja2VkLWluYyB1bmNoZWNrZWQtbXVsdGlwbHkgdW5jaGVja2VkLW5lZ2F0ZSB1bmNoZWNrZWQtcmVtYWluZGVyIHVuY2hlY2tlZC1zdWJ0cmFjdCB1bmRlcml2ZSB1bnF1b3RlIHVucXVvdGUtc3BsaWNpbmcgdXBkYXRlLWluIHVwZGF0ZS1wcm94eSB1c2UgdmFsIHZhbHMgdmFyLWdldCB2YXItc2V0IHZhcj8gdmFyeS1tZXRhIHZlYyB2ZWN0b3IgdmVjdG9yPyB3aGVuIHdoZW4tZmlyc3Qgd2hlbi1sZXQgd2hlbi1ub3Qgd2hpbGUgd2l0aC1iaW5kaW5ncyB3aXRoLWJpbmRpbmdzKiB3aXRoLWluLXN0ciB3aXRoLWxvYWRpbmctY29udGV4dCB3aXRoLWxvY2FsLXZhcnMgd2l0aC1tZXRhIHdpdGgtb3BlbiB3aXRoLW91dC1zdHIgd2l0aC1wcmVjaXNpb24geG1sLXNlcSIpOwoKICAgIHZhciBpbmRlbnRLZXlzID0gbWFrZUtleXdvcmRzKAogICAgICAgIC8vIEJ1aWx0LWlucwogICAgICAgICJucyBmbiBkZWYgZGVmbiBkZWZtZXRob2QgYm91bmQtZm4gaWYgaWYtbm90IGNhc2UgY29uZHAgd2hlbiB3aGlsZSB3aGVuLW5vdCB3aGVuLWZpcnN0IGRvIGZ1dHVyZSBjb21tZW50IGRvdG8gbG9ja2luZyBwcm94eSB3aXRoLW9wZW4gd2l0aC1wcmVjaXNpb24gcmVpZnkgZGVmdHlwZSBkZWZyZWNvcmQgZGVmcHJvdG9jb2wgZXh0ZW5kIGV4dGVuZC1wcm90b2NvbCBleHRlbmQtdHlwZSB0cnkgY2F0Y2ggIiArCgogICAgICAgIC8vIEJpbmRpbmcgZm9ybXMKICAgICAgICAibGV0IGxldGZuIGJpbmRpbmcgbG9vcCBmb3IgZG9zZXEgZG90aW1lcyB3aGVuLWxldCBpZi1sZXQgIiArCgogICAgICAgIC8vIERhdGEgc3RydWN0dXJlcwogICAgICAgICJkZWZzdHJ1Y3Qgc3RydWN0LW1hcCBhc3NvYyAiICsKCiAgICAgICAgLy8gY2xvanVyZS50ZXN0CiAgICAgICAgInRlc3RpbmcgZGVmdGVzdCAiICsKCiAgICAgICAgLy8gY29udHJpYgogICAgICAgICJoYW5kbGVyLWNhc2UgaGFuZGxlIGRvdHJhY2UgZGVmdHJhY2UiKTsKCiAgICB2YXIgdGVzdHMgPSB7CiAgICAgICAgZGlnaXQ6IC9cZC8sCiAgICAgICAgZGlnaXRfb3JfY29sb246IC9bXGQ6XS8sCiAgICAgICAgaGV4OiAvWzAtOWEtZkEtRl0vLAogICAgICAgIHNpZ246IC9bKy1dLywKICAgICAgICBleHBvbmVudDogL1tlRV0vLAogICAgICAgIGtleXdvcmRfY2hhcjogL1teXHNcKFxbXDtcKVxdXS8sCiAgICAgICAgYmFzaWM6IC9bXHdcJF9cLV0vLAogICAgICAgIGxhbmdfa2V5d29yZDogL1tcdyorIVwtXz86XC9dLwogICAgfTsKCiAgICBmdW5jdGlvbiBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgcHJldikgeyAvLyByZXByZXNlbnRzIGEgc3RhdGUgc3RhY2sgb2JqZWN0CiAgICAgICAgdGhpcy5pbmRlbnQgPSBpbmRlbnQ7CiAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKICAgICAgICB0aGlzLnByZXYgPSBwcmV2OwogICAgfQoKICAgIGZ1bmN0aW9uIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50LCB0eXBlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBuZXcgc3RhdGVTdGFjayhpbmRlbnQsIHR5cGUsIHN0YXRlLmluZGVudFN0YWNrKTsKICAgIH0KCiAgICBmdW5jdGlvbiBwb3BTdGFjayhzdGF0ZSkgewogICAgICAgIHN0YXRlLmluZGVudFN0YWNrID0gc3RhdGUuaW5kZW50U3RhY2sucHJldjsKICAgIH0KCiAgICBmdW5jdGlvbiBpc051bWJlcihjaCwgc3RyZWFtKXsKICAgICAgICAvLyBoZXgKICAgICAgICBpZiAoIGNoID09PSAnMCcgJiYgJ3gnID09IHN0cmVhbS5wZWVrKCkudG9Mb3dlckNhc2UoKSApIHsKICAgICAgICAgICAgc3RyZWFtLmVhdCgneCcpOwogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuaGV4KTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICAvLyBsZWFkaW5nIHNpZ24KICAgICAgICBpZiAoIGNoID09ICcrJyB8fCBjaCA9PSAnLScgKSB7CiAgICAgICAgICBzdHJlYW0uZWF0KHRlc3RzLnNpZ24pOwogICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCB0ZXN0cy5kaWdpdC50ZXN0KGNoKSApIHsKICAgICAgICAgICAgc3RyZWFtLmVhdChjaCk7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5kaWdpdCk7CgogICAgICAgICAgICBpZiAoICcuJyA9PSBzdHJlYW0ucGVlaygpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgnLicpOwogICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmRpZ2l0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCAnZScgPT0gc3RyZWFtLnBlZWsoKS50b0xvd2VyQ2FzZSgpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCh0ZXN0cy5leHBvbmVudCk7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KHRlc3RzLnNpZ24pOwogICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHRlc3RzLmRpZ2l0KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBpbmRlbnRTdGFjazogbnVsbCwKICAgICAgICAgICAgICAgIGluZGVudGF0aW9uOiAwLAogICAgICAgICAgICAgICAgbW9kZTogZmFsc2UKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwgJiYgc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgaW5kZW50YXRpb24sIGJ1dCBvbmx5IGlmIGluZGVudFN0YWNrIGlzIGVtcHR5CiAgICAgICAgICAgICAgICBzdGF0ZS5pbmRlbnRhdGlvbiA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBza2lwIHNwYWNlcwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciByZXR1cm5UeXBlID0gbnVsbDsKCiAgICAgICAgICAgIHN3aXRjaChzdGF0ZS5tb2RlKXsKICAgICAgICAgICAgICAgIGNhc2UgInN0cmluZyI6IC8vIG11bHRpLWxpbmUgc3RyaW5nIHBhcnNpbmcgbW9kZQogICAgICAgICAgICAgICAgICAgIHZhciBuZXh0LCBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PSAiXCIiICYmICFlc2NhcGVkKSB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc3RyaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICJcIiIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzdHJpbmciOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gU1RSSU5HOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIiciICYmICEoIHRlc3RzLmRpZ2l0X29yX2NvbG9uLnRlc3Qoc3RyZWFtLnBlZWsoKSkgKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQVRPTTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI7IikgeyAvLyBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsgLy8gcmVzdCBvZiB0aGUgbGluZSBpcyBhIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihjaCxzdHJlYW0pKXsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIoIiB8fCBjaCA9PSAiWyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGtleVdvcmQgPSAnJzsgdmFyIGluZGVudFRlbXAgPSBzdHJlYW0uY29sdW1uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qKgogICAgICAgICAgICAgICAgICAgICAgICBFaXRoZXIKICAgICAgICAgICAgICAgICAgICAgICAgKGluZGVudC13b3JkIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKDtzb21ldGhpbmcgZWxzZSwgYnJhY2tldCwgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoID09ICIoIikgd2hpbGUgKChsZXR0ZXIgPSBzdHJlYW0uZWF0KHRlc3RzLmtleXdvcmRfY2hhcikpICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleVdvcmQgKz0gbGV0dGVyOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIGluZGVudEtleXMucHJvcGVydHlJc0VudW1lcmFibGUoa2V5V29yZCkpIHsgLy8gaW5kZW50LXdvcmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIElOREVOVF9XT1JEX1NLSVAsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm9uLWluZGVudCB3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjb250aW51ZSBlYXRpbmcgdGhlIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5wZWVrKCkgPT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyBzaWduaWZpY2FudCBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlc3RhcnQgaW5kZW50YXRpb24gMSBzcGFjZSBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIDEsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgsIGNoKTsgLy8gZWxzZSB3ZSBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsgLy8gdW5kbyBhbGwgdGhlIGVhdGluZwoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJSQUNLRVQ7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiKSIgfHwgY2ggPT0gIl0iKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCUkFDS0VUOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgIT0gbnVsbCAmJiBzdGF0ZS5pbmRlbnRTdGFjay50eXBlID09IChjaCA9PSAiKSIgPyAiKCIgOiAiWyIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BTdGFjayhzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBjaCA9PSAiOiIgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSh0ZXN0cy5sYW5nX2tleXdvcmQpOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVRPTTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUodGVzdHMuYmFzaWMpOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gS0VZV09SRDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChidWlsdGlucyAmJiBidWlsdGlucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJVSUxUSU47CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXRvbXMgJiYgYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgcmV0dXJuVHlwZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcmV0dXJuVHlwZTsKICAgICAgICB9LAoKICAgICAgICBpbmRlbnQ6IGZ1bmN0aW9uIChzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayA9PSBudWxsKSByZXR1cm4gc3RhdGUuaW5kZW50YXRpb247CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5pbmRlbnRTdGFjay5pbmRlbnQ7CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jbG9qdXJlIiwgImNsb2p1cmUiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clojure/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENsb2p1cmUgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImNsb2p1cmUuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBDbG9qdXJlIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBDb253YXkncyBHYW1lIG9mIExpZmUsIGJhc2VkIG9uIHRoZSB3b3JrIG9mOgo7OyBMYXVyZW50IFBldGl0IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tLzEyMDAzNDMKOzsgQ2hyaXN0b3BoZSBHcmFuZCBodHRwOi8vY2xqLW1lLmNncmFuZC5uZXQvMjAxMS8wOC8xOS9jb253YXlzLWdhbWUtb2YtbGlmZQoKKG5zIF57OmRvYyAiQ29ud2F5J3MgR2FtZSBvZiBMaWZlLiJ9CiBnYW1lLW9mLWxpZmUpCgo7OyBDb3JlIGdhbWUgb2YgbGlmZSdzIGFsZ29yaXRobSBmdW5jdGlvbnMKCihkZWZuIG5laWdoYm91cnMgCiAgIkdpdmVuIGEgY2VsbCdzIGNvb3JkaW5hdGVzLCByZXR1cm5zIHRoZSBjb29yZGluYXRlcyBvZiBpdHMgbmVpZ2hib3Vycy4iCiAgW1t4IHldXQogIChmb3IgW2R4IFstMSAwIDFdIGR5IChpZiAoemVybz8gZHgpIFstMSAxXSBbLTEgMCAxXSldCiAgICBbKCsgZHggeCkgKCsgZHkgeSldKSkKCihkZWZuIHN0ZXAgCiAgIkdpdmVuIGEgc2V0IG9mIGxpdmluZyBjZWxscywgY29tcHV0ZXMgdGhlIG5ldyBzZXQgb2YgbGl2aW5nIGNlbGxzLiIKICBbY2VsbHNdCiAgKHNldCAoZm9yIFtbY2VsbCBuXSAoZnJlcXVlbmNpZXMgKG1hcGNhdCBuZWlnaGJvdXJzIGNlbGxzKSkKICAgICAgICAgICAgIDp3aGVuIChvciAoPSBuIDMpIChhbmQgKD0gbiAyKSAoY2VsbHMgY2VsbCkpKV0KICAgICAgICAgY2VsbCkpKQoKOzsgVXRpbGl0eSBtZXRob2RzIGZvciBkaXNwbGF5aW5nIGdhbWUgb24gYSB0ZXh0IHRlcm1pbmFsCgooZGVmbiBwcmludC1ib2FyZCAKICAiUHJpbnRzIGEgYm9hcmQgb24gKm91dCosIHJlcHJlc2VudGluZyBhIHN0ZXAgaW4gdGhlIGdhbWUuIgogIFtib2FyZCB3IGhdCiAgKGRvc2VxIFt4IChyYW5nZSAoaW5jIHcpKSB5IChyYW5nZSAoaW5jIGgpKV0KICAgIChpZiAoPSB5IDApIChwcmludCAiXG4iKSkgCiAgICAocHJpbnQgKGlmIChib2FyZCBbeCB5XSkgIltYXSIgIiAuICIpKSkpCgooZGVmbiBkaXNwbGF5LWdyaWRzIAogICJQcmludHMgYSBzcXVlbmNlIG9mIGJvYXJkcyBvbiAqb3V0KiwgcmVwcmVzZW50aW5nIHNldmVyYWwgc3RlcHMuIgogIFtncmlkcyB3IGhdCiAgKGRvc2VxIFtib2FyZCBncmlkc10KICAgIChwcmludC1ib2FyZCBib2FyZCB3IGgpCiAgICAocHJpbnQgIlxuIikpKQoKOzsgTGF1bmNoZXMgYW4gZXhhbXBsZSBib2FyZAoKKGRlZiAKICBeezpkb2MgImJvYXJkIHJlcHJlc2VudHMgdGhlIGluaXRpYWwgc2V0IG9mIGxpdmluZyBjZWxscyJ9CiAgIGJvYXJkICN7WzIgMV0gWzIgMl0gWzIgM119KQoKKGRpc3BsYXktZ3JpZHMgKHRha2UgMyAoaXRlcmF0ZSBzdGVwIGJvYXJkKSkgNSA1KSA8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LWNsb2p1cmU8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/coffeescript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIExpbmsgdG8gdGhlIHByb2plY3QncyBHaXRIdWIgcGFnZToKICogaHR0cHM6Ly9naXRodWIuY29tL3BpY2toYXJkdC9jb2ZmZWVzY3JpcHQtY29kZW1pcnJvci1tb2RlCiAqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoJ2NvZmZlZXNjcmlwdCcsIGZ1bmN0aW9uKGNvbmYpIHsKICAgIHZhciBFUlJPUkNMQVNTID0gJ2Vycm9yJzsKCiAgICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oKCIgKyB3b3Jkcy5qb2luKCIpfCgiKSArICIpKVxcYiIpOwogICAgfQoKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXD9dIik7CiAgICB2YXIgc2luZ2xlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoJ15bXFwoXFwpXFxbXFxdXFx7XFx9QCw6YD07XFwuXScpOwogICAgdmFyIGRvdWJsZU9wZXJhdG9ycyA9IG5ldyBSZWdFeHAoIl4oKFwtPil8KFw9Pil8KFxcK1xcKyl8KFxcK1xcPSl8KFxcLVxcLSl8KFxcLVxcPSl8KFxcKlxcKil8KFxcKlxcPSl8KFxcL1xcLyl8KFxcL1xcPSl8KD09KXwoIT0pfCg8PSl8KD49KXwoPD4pfCg8PCl8KD4+KXwoLy8pKSIpOwogICAgdmFyIGRvdWJsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKChcXC5cXC4pfChcXCs9KXwoXFwtPSl8KFxcKj0pfCglPSl8KC89KXwoJj0pfChcXHw9KXwoXFxePSkpIik7CiAgICB2YXIgdHJpcGxlRGVsaW1pdGVycyA9IG5ldyBSZWdFeHAoIl4oKFxcLlxcLlxcLil8KC8vPSl8KD4+PSl8KDw8PSl8KFxcKlxcKj0pKSIpOwogICAgdmFyIGlkZW50aWZpZXJzID0gbmV3IFJlZ0V4cCgiXltfQS1aYS16JF1bX0EtWmEteiQwLTldKiIpOwoKICAgIHZhciB3b3JkT3BlcmF0b3JzID0gd29yZFJlZ2V4cChbJ2FuZCcsICdvcicsICdub3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXMnLCAnaXNudCcsICdpbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbnN0YW5jZW9mJywgJ3R5cGVvZiddKTsKICAgIHZhciBpbmRlbnRLZXl3b3JkcyA9IFsnZm9yJywgJ3doaWxlJywgJ2xvb3AnLCAnaWYnLCAndW5sZXNzJywgJ2Vsc2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdzd2l0Y2gnLCAndHJ5JywgJ2NhdGNoJywgJ2ZpbmFsbHknLCAnY2xhc3MnXTsKICAgIHZhciBjb21tb25LZXl3b3JkcyA9IFsnYnJlYWsnLCAnYnknLCAnY29udGludWUnLCAnZGVidWdnZXInLCAnZGVsZXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZG8nLCAnaW4nLCAnb2YnLCAnbmV3JywgJ3JldHVybicsICd0aGVuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndGhpcycsICd0aHJvdycsICd3aGVuJywgJ3VudGlsJ107CgogICAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChpbmRlbnRLZXl3b3Jkcy5jb25jYXQoY29tbW9uS2V5d29yZHMpKTsKCiAgICBpbmRlbnRLZXl3b3JkcyA9IHdvcmRSZWdleHAoaW5kZW50S2V5d29yZHMpOwoKCiAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKCd7M318XCJ7M318WydcIl0pIik7CiAgICB2YXIgcmVnZXhQcmVmaXhlcyA9IG5ldyBSZWdFeHAoIl4oL3szfXwvKSIpOwogICAgdmFyIGNvbW1vbkNvbnN0YW50cyA9IFsnSW5maW5pdHknLCAnTmFOJywgJ3VuZGVmaW5lZCcsICdudWxsJywgJ3RydWUnLCAnZmFsc2UnLCAnb24nLCAnb2ZmJywgJ3llcycsICdubyddOwogICAgdmFyIGNvbnN0YW50cyA9IHdvcmRSZWdleHAoY29tbW9uQ29uc3RhbnRzKTsKCiAgICAvLyBUb2tlbml6ZXJzCiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIC8vIEhhbmRsZSBzY29wZSBjaGFuZ2VzCiAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICB2YXIgc2NvcGVPZmZzZXQgPSBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0OwogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgICAgIHZhciBsaW5lT2Zmc2V0ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgICAgICBpZiAobGluZU9mZnNldCA+IHNjb3BlT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdpbmRlbnQnOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaW5lT2Zmc2V0IDwgc2NvcGVPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2RlZGVudCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzY29wZU9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBkZWRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgdmFyIGNoID0gc3RyZWFtLnBlZWsoKTsKCiAgICAgICAgLy8gSGFuZGxlIG11bHRpIGxpbmUgY29tbWVudHMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKCIjIyMiKSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGxvbmdDb21tZW50OwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQoKICAgICAgICAvLyBTaW5nbGUgbGluZSBjb21tZW50CiAgICAgICAgaWYgKGNoID09PSAnIycpIHsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIG51bWJlciBsaXRlcmFscwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14tP1swLTlcLl0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlOwogICAgICAgICAgICAvLyBGbG9hdHMKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XGQqXC5cZCsoZVtcK1wtXT9cZCspPy9pKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XGQrXC5cZCovKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXi0/XC5cZCsvKSkgewogICAgICAgICAgICAgIGZsb2F0TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChmbG9hdExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgZnJvbSBnZXR0aW5nIGV4dHJhIC4gb24gMS4uCiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAiLiIpewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoMSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJ251bWJlcic7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSW50ZWdlcnMKICAgICAgICAgICAgdmFyIGludExpdGVyYWwgPSBmYWxzZTsKICAgICAgICAgICAgLy8gSGV4CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14tPzB4WzAtOWEtZl0rL2kpKSB7CiAgICAgICAgICAgICAgaW50TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gRGVjaW1hbAogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT9bMS05XVxkKihlW1wrXC1dP1xkKyk/LykpIHsKICAgICAgICAgICAgICAgIGludExpdGVyYWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFplcm8gYnkgaXRzZWxmIHdpdGggbm8gb3RoZXIgcGllY2Ugb2YgbnVtYmVyLgogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eLT8wKD8hW1xkeF0pL2kpKSB7CiAgICAgICAgICAgICAgaW50TGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGludExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gSGFuZGxlIHN0cmluZ3MKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHN0cmluZ1ByZWZpeGVzKSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuRmFjdG9yeShzdHJlYW0uY3VycmVudCgpLCAnc3RyaW5nJyk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgLy8gSGFuZGxlIHJlZ2V4IGxpdGVyYWxzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZWdleFByZWZpeGVzKSkgewogICAgICAgICAgICBpZiAoc3RyZWFtLmN1cnJlbnQoKSAhPSAnLycgfHwgc3RyZWFtLm1hdGNoKC9eLipcLy8sIGZhbHNlKSkgeyAvLyBwcmV2ZW50IGhpZ2hsaWdodCBvZiBkaXZpc2lvbgogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkZhY3Rvcnkoc3RyZWFtLmN1cnJlbnQoKSwgJ3N0cmluZy0yJyk7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgb3BlcmF0b3JzIGFuZCBkZWxpbWl0ZXJzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCh0cmlwbGVEZWxpbWl0ZXJzKSB8fCBzdHJlYW0ubWF0Y2goZG91YmxlRGVsaW1pdGVycykpIHsKICAgICAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZG91YmxlT3BlcmF0b3JzKQogICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2goc2luZ2xlT3BlcmF0b3JzKQogICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2god29yZE9wZXJhdG9ycykpIHsKICAgICAgICAgICAgcmV0dXJuICdvcGVyYXRvcic7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2luZ2xlRGVsaW1pdGVycykpIHsKICAgICAgICAgICAgcmV0dXJuICdwdW5jdHVhdGlvbic7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbnN0YW50cykpIHsKICAgICAgICAgICAgcmV0dXJuICdhdG9tJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7CiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXMKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgfQoKICAgIGZ1bmN0aW9uIHRva2VuRmFjdG9yeShkZWxpbWl0ZXIsIG91dGNsYXNzKSB7CiAgICAgICAgdmFyIHNpbmdsZWxpbmUgPSBkZWxpbWl0ZXIubGVuZ3RoID09IDE7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14nIlwvXFxdLyk7CiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgnXFwnKSkgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZWxpbmUgJiYgc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRjbGFzczsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChkZWxpbWl0ZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGNsYXNzOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9bJyJcL10vKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2luZ2xlbGluZSkgewogICAgICAgICAgICAgICAgaWYgKGNvbmYubW9kZS5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgb3V0Y2xhc3MgPSBFUlJPUkNMQVNTCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBvdXRjbGFzczsKICAgICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGxvbmdDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teI10vKTsKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgiIyMjIikpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKCIjIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiY29tbWVudCIKICAgIH0KCiAgICBmdW5jdGlvbiBpbmRlbnQoc3RyZWFtLCBzdGF0ZSwgdHlwZSkgewogICAgICAgIHR5cGUgPSB0eXBlIHx8ICdjb2ZmZWUnOwogICAgICAgIHZhciBpbmRlbnRVbml0ID0gMDsKICAgICAgICBpZiAodHlwZSA9PT0gJ2NvZmZlZScpIHsKICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGF0ZS5zY29wZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXNbaV0udHlwZSA9PT0gJ2NvZmZlZScpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCArIGNvbmYuaW5kZW50VW5pdDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluZGVudFVuaXQgPSBzdHJlYW0uY29sdW1uKCkgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgc3RhdGUuc2NvcGVzLnVuc2hpZnQoewogICAgICAgICAgICBvZmZzZXQ6IGluZGVudFVuaXQsCiAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBkZWRlbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID09IDEpIHJldHVybjsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgPT09ICdjb2ZmZWUnKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKCiAgICAgICAgLy8gSGFuZGxlICcuJyBjb25uZWN0ZWQgaWRlbnRpZmllcnMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJy4nKSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09ICd2YXJpYWJsZScpIHsKICAgICAgICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEhhbmRsZSBwcm9wZXJ0aWVzCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdAJykgewogICAgICAgICAgICBzdHJlYW0uZWF0KCdAJyk7CiAgICAgICAgICAgIHJldHVybiAna2V5d29yZCc7CiAgICAgICAgfQoKICAgICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcy4KICAgICAgICBpZiAoY3VycmVudCA9PT0gJ3JldHVybicpIHsKICAgICAgICAgICAgc3RhdGUuZGVkZW50ICs9IDE7CiAgICAgICAgfQogICAgICAgIGlmICgoKGN1cnJlbnQgPT09ICctPicgfHwgY3VycmVudCA9PT0gJz0+JykgJiYKICAgICAgICAgICAgICAgICAgIXN0YXRlLmxhbWJkYSAmJgogICAgICAgICAgICAgICAgICBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAnY29mZmVlJyAmJgogICAgICAgICAgICAgICAgICBzdHJlYW0ucGVlaygpID09PSAnJykKICAgICAgICAgICAgICAgfHwgc3R5bGUgPT09ICdpbmRlbnQnKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGltaXRlcl9pbmRleCA9ICdbKHsnLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUsICddKX0nLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZGVudEtleXdvcmRzLmV4ZWMoY3VycmVudCkpewogICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIGlmIChjdXJyZW50ID09ICd0aGVuJyl7CiAgICAgICAgICAgIGRlZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CgoKICAgICAgICBpZiAoc3R5bGUgPT09ICdkZWRlbnQnKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlbGltaXRlcl9pbmRleCA9ICddKX0nLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaWYgKGRlZGVudChzdHJlYW0sIHN0YXRlKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlLmRlZGVudCA+IDAgJiYgc3RyZWFtLmVvbCgpICYmIHN0YXRlLnNjb3Blc1swXS50eXBlID09ICdjb2ZmZWUnKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gMSkgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIHN0YXRlLmRlZGVudCAtPSAxOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgfQoKICAgIHZhciBleHRlcm5hbCA9IHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBzY29wZXM6IFt7b2Zmc2V0OmJhc2Vjb2x1bW4gfHwgMCwgdHlwZTonY29mZmVlJ31dLAogICAgICAgICAgICAgIGxhc3RUb2tlbjogbnVsbCwKICAgICAgICAgICAgICBsYW1iZGE6IGZhbHNlLAogICAgICAgICAgICAgIGRlZGVudDogMAogICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTsKCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAoKICAgICAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0OwogICAgICAgIH0KCiAgICB9OwogICAgcmV0dXJuIGV4dGVybmFsOwp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgndGV4dC94LWNvZmZlZXNjcmlwdCcsICdjb2ZmZWVzY3JpcHQnKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvZmZlZVNjcmlwdCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY29mZmVlc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIHNpbHZlcjsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHNpbHZlcjt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ29mZmVlU2NyaXB0IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2ZmZWVTY3JpcHQgbW9kZSBmb3IgQ29kZU1pcnJvcgojIENvcHlyaWdodCAoYykgMjAxMSBKZWZmIFBpY2toYXJkdCwgcmVsZWFzZWQgdW5kZXIKIyB0aGUgTUlUIExpY2Vuc2UuCiMKIyBNb2RpZmllZCBmcm9tIHRoZSBQeXRob24gQ29kZU1pcnJvciBtb2RlLCB3aGljaCBhbHNvIGlzIAojIHVuZGVyIHRoZSBNSVQgTGljZW5zZSBDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsLgojCiMgVGhlIGZvbGxvd2luZyBzY3JpcHQsIFVuZGVyc2NvcmUuY29mZmVlLCBpcyB1c2VkIHRvIAojIGRlbW9uc3RyYXRlIENvZmZlZVNjcmlwdCBtb2RlIGZvciBDb2RlTWlycm9yLgojCiMgVG8gZG93bmxvYWQgQ29mZmVlU2NyaXB0IG1vZGUgZm9yIENvZGVNaXJyb3IsIGdvIHRvOgojIGh0dHBzOi8vZ2l0aHViLmNvbS9waWNraGFyZHQvY29mZmVlc2NyaXB0LWNvZGVtaXJyb3ItbW9kZQoKIyAqKlVuZGVyc2NvcmUuY29mZmVlCiMgKGMpIDIwMTEgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIEluYy4qKgojIFVuZGVyc2NvcmUgaXMgZnJlZWx5IGRpc3RyaWJ1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQojIFtNSVQgbGljZW5zZV0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSVRfTGljZW5zZSkuCiMgUG9ydGlvbnMgb2YgVW5kZXJzY29yZSBhcmUgaW5zcGlyZWQgYnkgb3IgYm9ycm93ZWQgZnJvbQojIFtQcm90b3R5cGUuanNdKGh0dHA6Ly9wcm90b3R5cGVqcy5vcmcvYXBpKSwgT2xpdmVyIFN0ZWVsZSdzCiMgW0Z1bmN0aW9uYWxdKGh0dHA6Ly9vc3RlZWxlLmNvbSksIGFuZCBKb2huIFJlc2lnJ3MKIyBbTWljcm8tVGVtcGxhdGluZ10oaHR0cDovL2Vqb2huLm9yZykuCiMgRm9yIGFsbCBkZXRhaWxzIGFuZCBkb2N1bWVudGF0aW9uOgojIGh0dHA6Ly9kb2N1bWVudGNsb3VkLmdpdGh1Yi5jb20vdW5kZXJzY29yZS8KCgojIEJhc2VsaW5lIHNldHVwCiMgLS0tLS0tLS0tLS0tLS0KCiMgRXN0YWJsaXNoIHRoZSByb290IG9iamVjdCwgYHdpbmRvd2AgaW4gdGhlIGJyb3dzZXIsIG9yIGBnbG9iYWxgIG9uIHRoZSBzZXJ2ZXIuCnJvb3QgPSB0aGlzCgoKIyBTYXZlIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiB0aGUgYF9gIHZhcmlhYmxlLgpwcmV2aW91c1VuZGVyc2NvcmUgPSByb290Ll8KCgojIEVzdGFibGlzaCB0aGUgb2JqZWN0IHRoYXQgZ2V0cyB0aHJvd24gdG8gYnJlYWsgb3V0IG9mIGEgbG9vcCBpdGVyYXRpb24uCiMgYFN0b3BJdGVyYXRpb25gIGlzIFNPUCBvbiBNb3ppbGxhLgpicmVha2VyID0gaWYgdHlwZW9mKFN0b3BJdGVyYXRpb24pIGlzICd1bmRlZmluZWQnIHRoZW4gJ19fYnJlYWtfXycgZWxzZSBTdG9wSXRlcmF0aW9uCgoKIyBIZWxwZXIgZnVuY3Rpb24gdG8gZXNjYXBlICoqUmVnRXhwKiogY29udGVudHMsIGJlY2F1c2UgSlMgZG9lc24ndCBoYXZlIG9uZS4KZXNjYXBlUmVnRXhwID0gKHN0cmluZykgLT4gc3RyaW5nLnJlcGxhY2UoLyhbLiorP14ke30oKXxbXF1cL1xcXSkvZywgJ1xcJDEnKQoKCiMgU2F2ZSBieXRlcyBpbiB0aGUgbWluaWZpZWQgKGJ1dCBub3QgZ3ppcHBlZCkgdmVyc2lvbjoKQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZQpPYmpQcm90byA9IE9iamVjdC5wcm90b3R5cGUKCgojIENyZWF0ZSBxdWljayByZWZlcmVuY2UgdmFyaWFibGVzIGZvciBzcGVlZCBhY2Nlc3MgdG8gY29yZSBwcm90b3R5cGVzLgpzbGljZSA9IEFycmF5UHJvdG8uc2xpY2UKdW5zaGlmdCA9IEFycmF5UHJvdG8udW5zaGlmdAp0b1N0cmluZyA9IE9ialByb3RvLnRvU3RyaW5nCmhhc093blByb3BlcnR5ID0gT2JqUHJvdG8uaGFzT3duUHJvcGVydHkKcHJvcGVydHlJc0VudW1lcmFibGUgPSBPYmpQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZQoKCiMgQWxsICoqRUNNQTUqKiBuYXRpdmUgaW1wbGVtZW50YXRpb25zIHdlIGhvcGUgdG8gdXNlIGFyZSBkZWNsYXJlZCBoZXJlLgpuYXRpdmVGb3JFYWNoID0gQXJyYXlQcm90by5mb3JFYWNoCm5hdGl2ZU1hcCA9IEFycmF5UHJvdG8ubWFwCm5hdGl2ZVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlCm5hdGl2ZVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodApuYXRpdmVGaWx0ZXIgPSBBcnJheVByb3RvLmZpbHRlcgpuYXRpdmVFdmVyeSA9IEFycmF5UHJvdG8uZXZlcnkKbmF0aXZlU29tZSA9IEFycmF5UHJvdG8uc29tZQpuYXRpdmVJbmRleE9mID0gQXJyYXlQcm90by5pbmRleE9mCm5hdGl2ZUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZgpuYXRpdmVJc0FycmF5ID0gQXJyYXkuaXNBcnJheQpuYXRpdmVLZXlzID0gT2JqZWN0LmtleXMKCgojIENyZWF0ZSBhIHNhZmUgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgdXNlIGJlbG93LgpfID0gKG9iaikgLT4gbmV3IHdyYXBwZXIob2JqKQoKCiMgRXhwb3J0IHRoZSBVbmRlcnNjb3JlIG9iamVjdCBmb3IgKipDb21tb25KUyoqLgppZiB0eXBlb2YoZXhwb3J0cykgIT0gJ3VuZGVmaW5lZCcgdGhlbiBleHBvcnRzLl8gPSBfCgoKIyBFeHBvcnQgVW5kZXJzY29yZSB0byBnbG9iYWwgc2NvcGUuCnJvb3QuXyA9IF8KCgojIEN1cnJlbnQgdmVyc2lvbi4KXy5WRVJTSU9OID0gJzEuMS4wJwoKCiMgQ29sbGVjdGlvbiBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBUaGUgY29ybmVyc3RvbmUsIGFuICoqZWFjaCoqIGltcGxlbWVudGF0aW9uLgojIEhhbmRsZXMgb2JqZWN0cyBpbXBsZW1lbnRpbmcgKipmb3JFYWNoKiosIGFycmF5cywgYW5kIHJhdyBvYmplY3RzLgpfLmVhY2ggPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICB0cnkKICAgIGlmIG5hdGl2ZUZvckVhY2ggYW5kIG9iai5mb3JFYWNoIGlzIG5hdGl2ZUZvckVhY2gKICAgICAgb2JqLmZvckVhY2ggaXRlcmF0b3IsIGNvbnRleHQKICAgIGVsc2UgaWYgXy5pc051bWJlciBvYmoubGVuZ3RoCiAgICAgIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgb2JqW2ldLCBpLCBvYmogZm9yIGkgaW4gWzAuLi5vYmoubGVuZ3RoXQogICAgZWxzZQogICAgICBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbCwga2V5LCBvYmogZm9yIG93biBrZXksIHZhbCBvZiBvYmoKICBjYXRjaCBlCiAgICB0aHJvdyBlIGlmIGUgaXNudCBicmVha2VyCiAgb2JqCgoKIyBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgYXBwbHlpbmcgdGhlIGl0ZXJhdG9yIHRvIGVhY2ggZWxlbWVudC4gVXNlIEphdmFTY3JpcHQKIyAxLjYncyB2ZXJzaW9uIG9mICoqbWFwKiosIGlmIHBvc3NpYmxlLgpfLm1hcCA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIHJldHVybiBvYmoubWFwKGl0ZXJhdG9yLCBjb250ZXh0KSBpZiBuYXRpdmVNYXAgYW5kIG9iai5tYXAgaXMgbmF0aXZlTWFwCiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogIHJlc3VsdHMKCgojICoqUmVkdWNlKiogYnVpbGRzIHVwIGEgc2luZ2xlIHJlc3VsdCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMuIEFsc28ga25vd24gYXMKIyAqKmluamVjdCoqLCBvciAqKmZvbGRsKiouIFVzZXMgSmF2YVNjcmlwdCAxLjgncyB2ZXJzaW9uIG9mICoqcmVkdWNlKiosIGlmIHBvc3NpYmxlLgpfLnJlZHVjZSA9IChvYmosIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0KSAtPgogIGlmIG5hdGl2ZVJlZHVjZSBhbmQgb2JqLnJlZHVjZSBpcyBuYXRpdmVSZWR1Y2UKICAgIGl0ZXJhdG9yID0gXy5iaW5kIGl0ZXJhdG9yLCBjb250ZXh0IGlmIGNvbnRleHQKICAgIHJldHVybiBvYmoucmVkdWNlIGl0ZXJhdG9yLCBtZW1vCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIG1lbW8gPSBpdGVyYXRvci5jYWxsIGNvbnRleHQsIG1lbW8sIHZhbHVlLCBpbmRleCwgbGlzdAogIG1lbW8KCgojIFRoZSByaWdodC1hc3NvY2lhdGl2ZSB2ZXJzaW9uIG9mICoqcmVkdWNlKiosIGFsc28ga25vd24gYXMgKipmb2xkcioqLiBVc2VzCiMgSmF2YVNjcmlwdCAxLjgncyB2ZXJzaW9uIG9mICoqcmVkdWNlUmlnaHQqKiwgaWYgYXZhaWxhYmxlLgpfLnJlZHVjZVJpZ2h0ID0gKG9iaiwgaXRlcmF0b3IsIG1lbW8sIGNvbnRleHQpIC0+CiAgaWYgbmF0aXZlUmVkdWNlUmlnaHQgYW5kIG9iai5yZWR1Y2VSaWdodCBpcyBuYXRpdmVSZWR1Y2VSaWdodAogICAgaXRlcmF0b3IgPSBfLmJpbmQgaXRlcmF0b3IsIGNvbnRleHQgaWYgY29udGV4dAogICAgcmV0dXJuIG9iai5yZWR1Y2VSaWdodCBpdGVyYXRvciwgbWVtbwogIHJldmVyc2VkID0gXy5jbG9uZShfLnRvQXJyYXkob2JqKSkucmV2ZXJzZSgpCiAgXy5yZWR1Y2UgcmV2ZXJzZWQsIGl0ZXJhdG9yLCBtZW1vLCBjb250ZXh0CgoKIyBSZXR1cm4gdGhlIGZpcnN0IHZhbHVlIHdoaWNoIHBhc3NlcyBhIHRydXRoIHRlc3QuCl8uZGV0ZWN0ID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmVzdWx0ID0gbnVsbAogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBpZiBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogICAgICByZXN1bHQgPSB2YWx1ZQogICAgICBfLmJyZWFrTG9vcCgpCiAgcmVzdWx0CgoKIyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyB0aGF0IHBhc3MgYSB0cnV0aCB0ZXN0LiBVc2UgSmF2YVNjcmlwdCAxLjYncwojICoqZmlsdGVyKiosIGlmIGl0IGV4aXN0cy4KXy5maWx0ZXIgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXR1cm4gb2JqLmZpbHRlciBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVGaWx0ZXIgYW5kIG9iai5maWx0ZXIgaXMgbmF0aXZlRmlsdGVyCiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCB2YWx1ZSBpZiBpdGVyYXRvci5jYWxsIGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdAogIHJlc3VsdHMKCgojIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGZvciB3aGljaCBhIHRydXRoIHRlc3QgZmFpbHMuCl8ucmVqZWN0ID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmVzdWx0cyA9IFtdCiAgXy5lYWNoIG9iaiwgKHZhbHVlLCBpbmRleCwgbGlzdCkgLT4KICAgIHJlc3VsdHMucHVzaCB2YWx1ZSBpZiBub3QgaXRlcmF0b3IuY2FsbCBjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QKICByZXN1bHRzCgoKIyBEZXRlcm1pbmUgd2hldGhlciBhbGwgb2YgdGhlIGVsZW1lbnRzIG1hdGNoIGEgdHJ1dGggdGVzdC4gRGVsZWdhdGUgdG8KIyBKYXZhU2NyaXB0IDEuNidzICoqZXZlcnkqKiwgaWYgaXQgaXMgcHJlc2VudC4KXy5ldmVyeSA9IChvYmosIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIGl0ZXJhdG9yIHx8PSBfLmlkZW50aXR5CiAgcmV0dXJuIG9iai5ldmVyeSBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVFdmVyeSBhbmQgb2JqLmV2ZXJ5IGlzIG5hdGl2ZUV2ZXJ5CiAgcmVzdWx0ID0gdHJ1ZQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBfLmJyZWFrTG9vcCgpIHVubGVzcyAocmVzdWx0ID0gcmVzdWx0IGFuZCBpdGVyYXRvci5jYWxsKGNvbnRleHQsIHZhbHVlLCBpbmRleCwgbGlzdCkpCiAgcmVzdWx0CgoKIyBEZXRlcm1pbmUgaWYgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhlIG9iamVjdCBtYXRjaGVzIGEgdHJ1dGggdGVzdC4gVXNlCiMgSmF2YVNjcmlwdCAxLjYncyAqKnNvbWUqKiwgaWYgaXQgZXhpc3RzLgpfLnNvbWUgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICBpdGVyYXRvciB8fD0gXy5pZGVudGl0eQogIHJldHVybiBvYmouc29tZSBpdGVyYXRvciwgY29udGV4dCBpZiBuYXRpdmVTb21lIGFuZCBvYmouc29tZSBpcyBuYXRpdmVTb21lCiAgcmVzdWx0ID0gZmFsc2UKICBfLmVhY2ggb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAgXy5icmVha0xvb3AoKSBpZiAocmVzdWx0ID0gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpKQogIHJlc3VsdAoKCiMgRGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gdmFsdWUgaXMgaW5jbHVkZWQgaW4gdGhlIGFycmF5IG9yIG9iamVjdCwKIyBiYXNlZCBvbiBgPT09YC4KXy5pbmNsdWRlID0gKG9iaiwgdGFyZ2V0KSAtPgogIHJldHVybiBfLmluZGV4T2Yob2JqLCB0YXJnZXQpIGlzbnQgLTEgaWYgbmF0aXZlSW5kZXhPZiBhbmQgb2JqLmluZGV4T2YgaXMgbmF0aXZlSW5kZXhPZgogIHJldHVybiB0cnVlIGZvciBvd24ga2V5LCB2YWwgb2Ygb2JqIHdoZW4gdmFsIGlzIHRhcmdldAogIGZhbHNlCgoKIyBJbnZva2UgYSBtZXRob2Qgd2l0aCBhcmd1bWVudHMgb24gZXZlcnkgaXRlbSBpbiBhIGNvbGxlY3Rpb24uCl8uaW52b2tlID0gKG9iaiwgbWV0aG9kKSAtPgogIGFyZ3MgPSBfLnJlc3QgYXJndW1lbnRzLCAyCiAgKGlmIG1ldGhvZCB0aGVuIHZhbFttZXRob2RdIGVsc2UgdmFsKS5hcHBseSh2YWwsIGFyZ3MpIGZvciB2YWwgaW4gb2JqCgoKIyBDb252ZW5pZW5jZSB2ZXJzaW9uIG9mIGEgY29tbW9uIHVzZSBjYXNlIG9mICoqbWFwKio6IGZldGNoaW5nIGEgcHJvcGVydHkuCl8ucGx1Y2sgPSAob2JqLCBrZXkpIC0+CiAgXy5tYXAob2JqLCAodmFsKSAtPiB2YWxba2V5XSkKCgojIFJldHVybiB0aGUgbWF4aW11bSBpdGVtIG9yIChpdGVtLWJhc2VkIGNvbXB1dGF0aW9uKS4KXy5tYXggPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICByZXR1cm4gTWF0aC5tYXguYXBwbHkoTWF0aCwgb2JqKSBpZiBub3QgaXRlcmF0b3IgYW5kIF8uaXNBcnJheShvYmopCiAgcmVzdWx0ID0gY29tcHV0ZWQ6IC1JbmZpbml0eQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBjb21wdXRlZCA9IGlmIGl0ZXJhdG9yIHRoZW4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIGVsc2UgdmFsdWUKICAgIGNvbXB1dGVkID49IHJlc3VsdC5jb21wdXRlZCBhbmQgKHJlc3VsdCA9IHt2YWx1ZTogdmFsdWUsIGNvbXB1dGVkOiBjb21wdXRlZH0pCiAgcmVzdWx0LnZhbHVlCgoKIyBSZXR1cm4gdGhlIG1pbmltdW0gZWxlbWVudCAob3IgZWxlbWVudC1iYXNlZCBjb21wdXRhdGlvbikuCl8ubWluID0gKG9iaiwgaXRlcmF0b3IsIGNvbnRleHQpIC0+CiAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIG9iaikgaWYgbm90IGl0ZXJhdG9yIGFuZCBfLmlzQXJyYXkob2JqKQogIHJlc3VsdCA9IGNvbXB1dGVkOiBJbmZpbml0eQogIF8uZWFjaCBvYmosICh2YWx1ZSwgaW5kZXgsIGxpc3QpIC0+CiAgICBjb21wdXRlZCA9IGlmIGl0ZXJhdG9yIHRoZW4gaXRlcmF0b3IuY2FsbChjb250ZXh0LCB2YWx1ZSwgaW5kZXgsIGxpc3QpIGVsc2UgdmFsdWUKICAgIGNvbXB1dGVkIDwgcmVzdWx0LmNvbXB1dGVkIGFuZCAocmVzdWx0ID0ge3ZhbHVlOiB2YWx1ZSwgY29tcHV0ZWQ6IGNvbXB1dGVkfSkKICByZXN1bHQudmFsdWUKCgojIFNvcnQgdGhlIG9iamVjdCdzIHZhbHVlcyBieSBhIGNyaXRlcmlvbiBwcm9kdWNlZCBieSBhbiBpdGVyYXRvci4KXy5zb3J0QnkgPSAob2JqLCBpdGVyYXRvciwgY29udGV4dCkgLT4KICBfLnBsdWNrKCgoXy5tYXAgb2JqLCAodmFsdWUsIGluZGV4LCBsaXN0KSAtPgogICAge3ZhbHVlOiB2YWx1ZSwgY3JpdGVyaWE6IGl0ZXJhdG9yLmNhbGwoY29udGV4dCwgdmFsdWUsIGluZGV4LCBsaXN0KX0KICApLnNvcnQoKGxlZnQsIHJpZ2h0KSAtPgogICAgYSA9IGxlZnQuY3JpdGVyaWE7IGIgPSByaWdodC5jcml0ZXJpYQogICAgaWYgYSA8IGIgdGhlbiAtMSBlbHNlIGlmIGEgPiBiIHRoZW4gMSBlbHNlIDAKICApKSwgJ3ZhbHVlJykKCgojIFVzZSBhIGNvbXBhcmF0b3IgZnVuY3Rpb24gdG8gZmlndXJlIG91dCBhdCB3aGF0IGluZGV4IGFuIG9iamVjdCBzaG91bGQKIyBiZSBpbnNlcnRlZCBzbyBhcyB0byBtYWludGFpbiBvcmRlci4gVXNlcyBiaW5hcnkgc2VhcmNoLgpfLnNvcnRlZEluZGV4ID0gKGFycmF5LCBvYmosIGl0ZXJhdG9yKSAtPgogIGl0ZXJhdG9yIHx8PSBfLmlkZW50aXR5CiAgbG93ID0gMAogIGhpZ2ggPSBhcnJheS5sZW5ndGgKICB3aGlsZSBsb3cgPCBoaWdoCiAgICBtaWQgPSAobG93ICsgaGlnaCkgPj4gMQogICAgaWYgaXRlcmF0b3IoYXJyYXlbbWlkXSkgPCBpdGVyYXRvcihvYmopIHRoZW4gbG93ID0gbWlkICsgMSBlbHNlIGhpZ2ggPSBtaWQKICBsb3cKCgojIENvbnZlcnQgYW55dGhpbmcgaXRlcmFibGUgaW50byBhIHJlYWwsIGxpdmUgYXJyYXkuCl8udG9BcnJheSA9IChpdGVyYWJsZSkgLT4KICByZXR1cm4gW10gaWYgKCFpdGVyYWJsZSkKICByZXR1cm4gaXRlcmFibGUudG9BcnJheSgpIGlmIChpdGVyYWJsZS50b0FycmF5KQogIHJldHVybiBpdGVyYWJsZSBpZiAoXy5pc0FycmF5KGl0ZXJhYmxlKSkKICByZXR1cm4gc2xpY2UuY2FsbChpdGVyYWJsZSkgaWYgKF8uaXNBcmd1bWVudHMoaXRlcmFibGUpKQogIF8udmFsdWVzKGl0ZXJhYmxlKQoKCiMgUmV0dXJuIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gYW4gb2JqZWN0LgpfLnNpemUgPSAob2JqKSAtPiBfLnRvQXJyYXkob2JqKS5sZW5ndGgKCgojIEFycmF5IEZ1bmN0aW9ucwojIC0tLS0tLS0tLS0tLS0tLQoKIyBHZXQgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuIFBhc3NpbmcgYG5gIHdpbGwgcmV0dXJuIHRoZSBmaXJzdCBOCiMgdmFsdWVzIGluIHRoZSBhcnJheS4gQWxpYXNlZCBhcyAqKmhlYWQqKi4gVGhlIGBndWFyZGAgY2hlY2sgYWxsb3dzIGl0IHRvIHdvcmsKIyB3aXRoICoqbWFwKiouCl8uZmlyc3QgPSAoYXJyYXksIG4sIGd1YXJkKSAtPgogIGlmIG4gYW5kIG5vdCBndWFyZCB0aGVuIHNsaWNlLmNhbGwoYXJyYXksIDAsIG4pIGVsc2UgYXJyYXlbMF0KCgojIFJldHVybnMgZXZlcnl0aGluZyBidXQgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSBhcnJheS4gQWxpYXNlZCBhcyAqKnRhaWwqKi4KIyBFc3BlY2lhbGx5IHVzZWZ1bCBvbiB0aGUgYXJndW1lbnRzIG9iamVjdC4gUGFzc2luZyBhbiBgaW5kZXhgIHdpbGwgcmV0dXJuCiMgdGhlIHJlc3Qgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgZnJvbSB0aGF0IGluZGV4IG9ud2FyZC4gVGhlIGBndWFyZGAKIyBjaGVjayBhbGxvd3MgaXQgdG8gd29yayB3aXRoICoqbWFwKiouCl8ucmVzdCA9IChhcnJheSwgaW5kZXgsIGd1YXJkKSAtPgogIHNsaWNlLmNhbGwoYXJyYXksIGlmIF8uaXNVbmRlZmluZWQoaW5kZXgpIG9yIGd1YXJkIHRoZW4gMSBlbHNlIGluZGV4KQoKCiMgR2V0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYW4gYXJyYXkuCl8ubGFzdCA9IChhcnJheSkgLT4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV0KCgojIFRyaW0gb3V0IGFsbCBmYWxzeSB2YWx1ZXMgZnJvbSBhbiBhcnJheS4KXy5jb21wYWN0ID0gKGFycmF5KSAtPiBpdGVtIGZvciBpdGVtIGluIGFycmF5IHdoZW4gaXRlbQoKCiMgUmV0dXJuIGEgY29tcGxldGVseSBmbGF0dGVuZWQgdmVyc2lvbiBvZiBhbiBhcnJheS4KXy5mbGF0dGVuID0gKGFycmF5KSAtPgogIF8ucmVkdWNlIGFycmF5LCAobWVtbywgdmFsdWUpIC0+CiAgICByZXR1cm4gbWVtby5jb25jYXQoXy5mbGF0dGVuKHZhbHVlKSkgaWYgXy5pc0FycmF5IHZhbHVlCiAgICBtZW1vLnB1c2ggdmFsdWUKICAgIG1lbW8KICAsIFtdCgoKIyBSZXR1cm4gYSB2ZXJzaW9uIG9mIHRoZSBhcnJheSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gdGhlIHNwZWNpZmllZCB2YWx1ZShzKS4KXy53aXRob3V0ID0gKGFycmF5KSAtPgogIHZhbHVlcyA9IF8ucmVzdCBhcmd1bWVudHMKICB2YWwgZm9yIHZhbCBpbiBfLnRvQXJyYXkoYXJyYXkpIHdoZW4gbm90IF8uaW5jbHVkZSB2YWx1ZXMsIHZhbAoKCiMgUHJvZHVjZSBhIGR1cGxpY2F0ZS1mcmVlIHZlcnNpb24gb2YgdGhlIGFycmF5LiBJZiB0aGUgYXJyYXkgaGFzIGFscmVhZHkKIyBiZWVuIHNvcnRlZCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiB1c2luZyBhIGZhc3RlciBhbGdvcml0aG0uCl8udW5pcSA9IChhcnJheSwgaXNTb3J0ZWQpIC0+CiAgbWVtbyA9IFtdCiAgZm9yIGVsLCBpIGluIF8udG9BcnJheSBhcnJheQogICAgbWVtby5wdXNoIGVsIGlmIGkgaXMgMCB8fCAoaWYgaXNTb3J0ZWQgaXMgdHJ1ZSB0aGVuIF8ubGFzdChtZW1vKSBpc250IGVsIGVsc2Ugbm90IF8uaW5jbHVkZShtZW1vLCBlbCkpCiAgbWVtbwoKCiMgUHJvZHVjZSBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIGV2ZXJ5IGl0ZW0gc2hhcmVkIGJldHdlZW4gYWxsIHRoZQojIHBhc3NlZC1pbiBhcnJheXMuCl8uaW50ZXJzZWN0ID0gKGFycmF5KSAtPgogIHJlc3QgPSBfLnJlc3QgYXJndW1lbnRzCiAgXy5zZWxlY3QgXy51bmlxKGFycmF5KSwgKGl0ZW0pIC0+CiAgICBfLmFsbCByZXN0LCAob3RoZXIpIC0+CiAgICAgIF8uaW5kZXhPZihvdGhlciwgaXRlbSkgPj0gMAoKCiMgWmlwIHRvZ2V0aGVyIG11bHRpcGxlIGxpc3RzIGludG8gYSBzaW5nbGUgYXJyYXkgLS0gZWxlbWVudHMgdGhhdCBzaGFyZQojIGFuIGluZGV4IGdvIHRvZ2V0aGVyLgpfLnppcCA9IC0+CiAgbGVuZ3RoID0gXy5tYXggXy5wbHVjayBhcmd1bWVudHMsICdsZW5ndGgnCiAgcmVzdWx0cyA9IG5ldyBBcnJheSBsZW5ndGgKICBmb3IgaSBpbiBbMC4uLmxlbmd0aF0KICAgIHJlc3VsdHNbaV0gPSBfLnBsdWNrIGFyZ3VtZW50cywgU3RyaW5nIGkKICByZXN1bHRzCgoKIyBJZiB0aGUgYnJvd3NlciBkb2Vzbid0IHN1cHBseSB1cyB3aXRoICoqaW5kZXhPZioqIChJJ20gbG9va2luZyBhdCB5b3UsIE1TSUUpLAojIHdlIG5lZWQgdGhpcyBmdW5jdGlvbi4gUmV0dXJuIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhbgojIGl0ZW0gaW4gYW4gYXJyYXksIG9yIC0xIGlmIHRoZSBpdGVtIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgYXJyYXkuCl8uaW5kZXhPZiA9IChhcnJheSwgaXRlbSkgLT4KICByZXR1cm4gYXJyYXkuaW5kZXhPZiBpdGVtIGlmIG5hdGl2ZUluZGV4T2YgYW5kIGFycmF5LmluZGV4T2YgaXMgbmF0aXZlSW5kZXhPZgogIGkgPSAwOyBsID0gYXJyYXkubGVuZ3RoCiAgd2hpbGUgbCAtIGkKICAgIGlmIGFycmF5W2ldIGlzIGl0ZW0gdGhlbiByZXR1cm4gaSBlbHNlIGkrKwogIC0xCgoKIyBQcm92aWRlIEphdmFTY3JpcHQgMS42J3MgKipsYXN0SW5kZXhPZioqLCBkZWxlZ2F0aW5nIHRvIHRoZSBuYXRpdmUgZnVuY3Rpb24sCiMgaWYgcG9zc2libGUuCl8ubGFzdEluZGV4T2YgPSAoYXJyYXksIGl0ZW0pIC0+CiAgcmV0dXJuIGFycmF5Lmxhc3RJbmRleE9mKGl0ZW0pIGlmIG5hdGl2ZUxhc3RJbmRleE9mIGFuZCBhcnJheS5sYXN0SW5kZXhPZiBpcyBuYXRpdmVMYXN0SW5kZXhPZgogIGkgPSBhcnJheS5sZW5ndGgKICB3aGlsZSBpCiAgICBpZiBhcnJheVtpXSBpcyBpdGVtIHRoZW4gcmV0dXJuIGkgZWxzZSBpLS0KICAtMQoKCiMgR2VuZXJhdGUgYW4gaW50ZWdlciBBcnJheSBjb250YWluaW5nIGFuIGFyaXRobWV0aWMgcHJvZ3Jlc3Npb24uIEEgcG9ydCBvZgojIFt0aGUgbmF0aXZlIFB5dGhvbiAqKnJhbmdlKiogZnVuY3Rpb25dKGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9mdW5jdGlvbnMuaHRtbCNyYW5nZSkuCl8ucmFuZ2UgPSAoc3RhcnQsIHN0b3AsIHN0ZXApIC0+CiAgYSA9IGFyZ3VtZW50cwogIHNvbG8gPSBhLmxlbmd0aCA8PSAxCiAgaSA9IHN0YXJ0ID0gaWYgc29sbyB0aGVuIDAgZWxzZSBhWzBdCiAgc3RvcCA9IGlmIHNvbG8gdGhlbiBhWzBdIGVsc2UgYVsxXQogIHN0ZXAgPSBhWzJdIG9yIDEKICBsZW4gPSBNYXRoLmNlaWwoKHN0b3AgLSBzdGFydCkgLyBzdGVwKQogIHJldHVybiBbXSBpZiBsZW4gPD0gMAogIHJhbmdlID0gbmV3IEFycmF5IGxlbgogIGlkeCA9IDAKICBsb29wCiAgICByZXR1cm4gcmFuZ2UgaWYgKGlmIHN0ZXAgPiAwIHRoZW4gaSAtIHN0b3AgZWxzZSBzdG9wIC0gaSkgPj0gMAogICAgcmFuZ2VbaWR4XSA9IGkKICAgIGlkeCsrCiAgICBpKz0gc3RlcAoKCiMgRnVuY3Rpb24gRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tCgojIENyZWF0ZSBhIGZ1bmN0aW9uIGJvdW5kIHRvIGEgZ2l2ZW4gb2JqZWN0IChhc3NpZ25pbmcgYHRoaXNgLCBhbmQgYXJndW1lbnRzLAojIG9wdGlvbmFsbHkpLiBCaW5kaW5nIHdpdGggYXJndW1lbnRzIGlzIGFsc28ga25vd24gYXMgKipjdXJyeSoqLgpfLmJpbmQgPSAoZnVuYywgb2JqKSAtPgogIGFyZ3MgPSBfLnJlc3QgYXJndW1lbnRzLCAyCiAgLT4gZnVuYy5hcHBseSBvYmogb3Igcm9vdCwgYXJncy5jb25jYXQgYXJndW1lbnRzCgoKIyBCaW5kIGFsbCBvZiBhbiBvYmplY3QncyBtZXRob2RzIHRvIHRoYXQgb2JqZWN0LiBVc2VmdWwgZm9yIGVuc3VyaW5nIHRoYXQKIyBhbGwgY2FsbGJhY2tzIGRlZmluZWQgb24gYW4gb2JqZWN0IGJlbG9uZyB0byBpdC4KXy5iaW5kQWxsID0gKG9iaikgLT4KICBmdW5jcyA9IGlmIGFyZ3VtZW50cy5sZW5ndGggPiAxIHRoZW4gXy5yZXN0KGFyZ3VtZW50cykgZWxzZSBfLmZ1bmN0aW9ucyhvYmopCiAgXy5lYWNoIGZ1bmNzLCAoZikgLT4gb2JqW2ZdID0gXy5iaW5kIG9ialtmXSwgb2JqCiAgb2JqCgoKIyBEZWxheXMgYSBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMsIGFuZCB0aGVuIGNhbGxzCiMgaXQgd2l0aCB0aGUgYXJndW1lbnRzIHN1cHBsaWVkLgpfLmRlbGF5ID0gKGZ1bmMsIHdhaXQpIC0+CiAgYXJncyA9IF8ucmVzdCBhcmd1bWVudHMsIDIKICBzZXRUaW1lb3V0KCgtPiBmdW5jLmFwcGx5KGZ1bmMsIGFyZ3MpKSwgd2FpdCkKCgojIE1lbW9pemUgYW4gZXhwZW5zaXZlIGZ1bmN0aW9uIGJ5IHN0b3JpbmcgaXRzIHJlc3VsdHMuCl8ubWVtb2l6ZSA9IChmdW5jLCBoYXNoZXIpIC0+CiAgbWVtbyA9IHt9CiAgaGFzaGVyIG9yPSBfLmlkZW50aXR5CiAgLT4KICAgIGtleSA9IGhhc2hlci5hcHBseSB0aGlzLCBhcmd1bWVudHMKICAgIHJldHVybiBtZW1vW2tleV0gaWYga2V5IG9mIG1lbW8KICAgIG1lbW9ba2V5XSA9IGZ1bmMuYXBwbHkgdGhpcywgYXJndW1lbnRzCgoKIyBEZWZlcnMgYSBmdW5jdGlvbiwgc2NoZWR1bGluZyBpdCB0byBydW4gYWZ0ZXIgdGhlIGN1cnJlbnQgY2FsbCBzdGFjayBoYXMKIyBjbGVhcmVkLgpfLmRlZmVyID0gKGZ1bmMpIC0+CiAgXy5kZWxheS5hcHBseSBfLCBbZnVuYywgMV0uY29uY2F0IF8ucmVzdCBhcmd1bWVudHMKCgojIFJldHVybnMgdGhlIGZpcnN0IGZ1bmN0aW9uIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgc2Vjb25kLAojIGFsbG93aW5nIHlvdSB0byBhZGp1c3QgYXJndW1lbnRzLCBydW4gY29kZSBiZWZvcmUgYW5kIGFmdGVyLCBhbmQKIyBjb25kaXRpb25hbGx5IGV4ZWN1dGUgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLgpfLndyYXAgPSAoZnVuYywgd3JhcHBlcikgLT4KICAtPiB3cmFwcGVyLmFwcGx5IHdyYXBwZXIsIFtmdW5jXS5jb25jYXQgYXJndW1lbnRzCgoKIyBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBpcyB0aGUgY29tcG9zaXRpb24gb2YgYSBsaXN0IG9mIGZ1bmN0aW9ucywgZWFjaAojIGNvbnN1bWluZyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiB0aGF0IGZvbGxvd3MuCl8uY29tcG9zZSA9IC0+CiAgZnVuY3MgPSBhcmd1bWVudHMKICAtPgogICAgYXJncyA9IGFyZ3VtZW50cwogICAgZm9yIGkgaW4gW2Z1bmNzLmxlbmd0aCAtIDEuLjBdIGJ5IC0xCiAgICAgIGFyZ3MgPSBbZnVuY3NbaV0uYXBwbHkodGhpcywgYXJncyldCiAgICBhcmdzWzBdCgoKIyBPYmplY3QgRnVuY3Rpb25zCiMgLS0tLS0tLS0tLS0tLS0tLQoKIyBSZXRyaWV2ZSB0aGUgbmFtZXMgb2YgYW4gb2JqZWN0J3MgcHJvcGVydGllcy4KXy5rZXlzID0gbmF0aXZlS2V5cyBvciAob2JqKSAtPgogIHJldHVybiBfLnJhbmdlIDAsIG9iai5sZW5ndGggaWYgXy5pc0FycmF5KG9iaikKICBrZXkgZm9yIGtleSwgdmFsIG9mIG9iagoKCiMgUmV0cmlldmUgdGhlIHZhbHVlcyBvZiBhbiBvYmplY3QncyBwcm9wZXJ0aWVzLgpfLnZhbHVlcyA9IChvYmopIC0+CiAgXy5tYXAgb2JqLCBfLmlkZW50aXR5CgoKIyBSZXR1cm4gYSBzb3J0ZWQgbGlzdCBvZiB0aGUgZnVuY3Rpb24gbmFtZXMgYXZhaWxhYmxlIGluIFVuZGVyc2NvcmUuCl8uZnVuY3Rpb25zID0gKG9iaikgLT4KICBfLmZpbHRlcihfLmtleXMob2JqKSwgKGtleSkgLT4gXy5pc0Z1bmN0aW9uKG9ialtrZXldKSkuc29ydCgpCgoKIyBFeHRlbmQgYSBnaXZlbiBvYmplY3Qgd2l0aCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgaW4gYSBzb3VyY2Ugb2JqZWN0LgpfLmV4dGVuZCA9IChvYmopIC0+CiAgZm9yIHNvdXJjZSBpbiBfLnJlc3QoYXJndW1lbnRzKQogICAgb2JqW2tleV0gPSB2YWwgZm9yIGtleSwgdmFsIG9mIHNvdXJjZQogIG9iagoKCiMgQ3JlYXRlIGEgKHNoYWxsb3ctY2xvbmVkKSBkdXBsaWNhdGUgb2YgYW4gb2JqZWN0LgpfLmNsb25lID0gKG9iaikgLT4KICByZXR1cm4gb2JqLnNsaWNlIDAgaWYgXy5pc0FycmF5IG9iagogIF8uZXh0ZW5kIHt9LCBvYmoKCgojIEludm9rZXMgaW50ZXJjZXB0b3Igd2l0aCB0aGUgb2JqLCBhbmQgdGhlbiByZXR1cm5zIG9iai4KIyBUaGUgcHJpbWFyeSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kIGlzIHRvICJ0YXAgaW50byIgYSBtZXRob2QgY2hhaW4sCiMgaW4gb3JkZXIgdG8gcGVyZm9ybSBvcGVyYXRpb25zIG9uIGludGVybWVkaWF0ZSByZXN1bHRzIHdpdGhpbgogdGhlIGNoYWluLgpfLnRhcCA9IChvYmosIGludGVyY2VwdG9yKSAtPgogIGludGVyY2VwdG9yIG9iagogIG9iagoKCiMgUGVyZm9ybSBhIGRlZXAgY29tcGFyaXNvbiB0byBjaGVjayBpZiB0d28gb2JqZWN0cyBhcmUgZXF1YWwuCl8uaXNFcXVhbCA9IChhLCBiKSAtPgogICMgQ2hlY2sgb2JqZWN0IGlkZW50aXR5LgogIHJldHVybiB0cnVlIGlmIGEgaXMgYgogICMgRGlmZmVyZW50IHR5cGVzPwogIGF0eXBlID0gdHlwZW9mKGEpOyBidHlwZSA9IHR5cGVvZihiKQogIHJldHVybiBmYWxzZSBpZiBhdHlwZSBpc250IGJ0eXBlCiAgIyBCYXNpYyBlcXVhbGl0eSB0ZXN0ICh3YXRjaCBvdXQgZm9yIGNvZXJjaW9ucykuCiAgcmV0dXJuIHRydWUgaWYgYGEgPT0gYmAKICAjIE9uZSBpcyBmYWxzeSBhbmQgdGhlIG90aGVyIHRydXRoeS4KICByZXR1cm4gZmFsc2UgaWYgKCFhIGFuZCBiKSBvciAoYSBhbmQgIWIpCiAgIyBPbmUgb2YgdGhlbSBpbXBsZW1lbnRzIGFuIGBpc0VxdWFsKClgPwogIHJldHVybiBhLmlzRXF1YWwoYikgaWYgYS5pc0VxdWFsCiAgIyBDaGVjayBkYXRlcycgaW50ZWdlciB2YWx1ZXMuCiAgcmV0dXJuIGEuZ2V0VGltZSgpIGlzIGIuZ2V0VGltZSgpIGlmIF8uaXNEYXRlKGEpIGFuZCBfLmlzRGF0ZShiKQogICMgQm90aCBhcmUgTmFOPwogIHJldHVybiBmYWxzZSBpZiBfLmlzTmFOKGEpIGFuZCBfLmlzTmFOKGIpCiAgIyBDb21wYXJlIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCiAgaWYgXy5pc1JlZ0V4cChhKSBhbmQgXy5pc1JlZ0V4cChiKQogICAgcmV0dXJuIGEuc291cmNlIGlzIGIuc291cmNlIGFuZAogICAgICAgICAgIGEuZ2xvYmFsIGlzIGIuZ2xvYmFsIGFuZAogICAgICAgICAgIGEuaWdub3JlQ2FzZSBpcyBiLmlnbm9yZUNhc2UgYW5kCiAgICAgICAgICAgYS5tdWx0aWxpbmUgaXMgYi5tdWx0aWxpbmUKICAjIElmIGEgaXMgbm90IGFuIG9iamVjdCBieSB0aGlzIHBvaW50LCB3ZSBjYW4ndCBoYW5kbGUgaXQuCiAgcmV0dXJuIGZhbHNlIGlmIGF0eXBlIGlzbnQgJ29iamVjdCcKICAjIENoZWNrIGZvciBkaWZmZXJlbnQgYXJyYXkgbGVuZ3RocyBiZWZvcmUgY29tcGFyaW5nIGNvbnRlbnRzLgogIHJldHVybiBmYWxzZSBpZiBhLmxlbmd0aCBhbmQgKGEubGVuZ3RoIGlzbnQgYi5sZW5ndGgpCiAgIyBOb3RoaW5nIGVsc2Ugd29ya2VkLCBkZWVwIGNvbXBhcmUgdGhlIGNvbnRlbnRzLgogIGFLZXlzID0gXy5rZXlzKGEpOyBiS2V5cyA9IF8ua2V5cyhiKQogICMgRGlmZmVyZW50IG9iamVjdCBzaXplcz8KICByZXR1cm4gZmFsc2UgaWYgYUtleXMubGVuZ3RoIGlzbnQgYktleXMubGVuZ3RoCiAgIyBSZWN1cnNpdmUgY29tcGFyaXNvbiBvZiBjb250ZW50cy4KICByZXR1cm4gZmFsc2UgZm9yIGtleSwgdmFsIG9mIGEgd2hlbiAhKGtleSBvZiBiKSBvciAhXy5pc0VxdWFsKHZhbCwgYltrZXldKQogIHRydWUKCgojIElzIGEgZ2l2ZW4gYXJyYXkgb3Igb2JqZWN0IGVtcHR5PwpfLmlzRW1wdHkgPSAob2JqKSAtPgogIHJldHVybiBvYmoubGVuZ3RoIGlzIDAgaWYgXy5pc0FycmF5KG9iaikgb3IgXy5pc1N0cmluZyhvYmopCiAgcmV0dXJuIGZhbHNlIGZvciBvd24ga2V5IG9mIG9iagogIHRydWUKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYSBET00gZWxlbWVudD8KXy5pc0VsZW1lbnQgPSAob2JqKSAtPiBvYmogYW5kIG9iai5ub2RlVHlwZSBpcyAxCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGFuIGFycmF5PwpfLmlzQXJyYXkgPSBuYXRpdmVJc0FycmF5IG9yIChvYmopIC0+ICEhKG9iaiBhbmQgb2JqLmNvbmNhdCBhbmQgb2JqLnVuc2hpZnQgYW5kIG5vdCBvYmouY2FsbGVlKQoKCiMgSXMgYSBnaXZlbiB2YXJpYWJsZSBhbiBhcmd1bWVudHMgb2JqZWN0PwpfLmlzQXJndW1lbnRzID0gKG9iaikgLT4gb2JqIGFuZCBvYmouY2FsbGVlCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBmdW5jdGlvbj8KXy5pc0Z1bmN0aW9uID0gKG9iaikgLT4gISEob2JqIGFuZCBvYmouY29uc3RydWN0b3IgYW5kIG9iai5jYWxsIGFuZCBvYmouYXBwbHkpCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSBzdHJpbmc/Cl8uaXNTdHJpbmcgPSAob2JqKSAtPiAhIShvYmogaXMgJycgb3IgKG9iaiBhbmQgb2JqLmNoYXJDb2RlQXQgYW5kIG9iai5zdWJzdHIpKQoKCiMgSXMgYSBnaXZlbiB2YWx1ZSBhIG51bWJlcj8KXy5pc051bWJlciA9IChvYmopIC0+IChvYmogaXMgK29iaikgb3IgdG9TdHJpbmcuY2FsbChvYmopIGlzICdbb2JqZWN0IE51bWJlcl0nCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGEgYm9vbGVhbj8KXy5pc0Jvb2xlYW4gPSAob2JqKSAtPiBvYmogaXMgdHJ1ZSBvciBvYmogaXMgZmFsc2UKCgojIElzIGEgZ2l2ZW4gdmFsdWUgYSBEYXRlPwpfLmlzRGF0ZSA9IChvYmopIC0+ICEhKG9iaiBhbmQgb2JqLmdldFRpbWV6b25lT2Zmc2V0IGFuZCBvYmouc2V0VVRDRnVsbFllYXIpCgoKIyBJcyB0aGUgZ2l2ZW4gdmFsdWUgYSByZWd1bGFyIGV4cHJlc3Npb24/Cl8uaXNSZWdFeHAgPSAob2JqKSAtPiAhIShvYmogYW5kIG9iai5leGVjIGFuZCAob2JqLmlnbm9yZUNhc2Ugb3Igb2JqLmlnbm9yZUNhc2UgaXMgZmFsc2UpKQoKCiMgSXMgdGhlIGdpdmVuIHZhbHVlIE5hTiAtLSB0aGlzIG9uZSBpcyBpbnRlcmVzdGluZy4gYE5hTiAhPSBOYU5gLCBhbmQKIyBgaXNOYU4odW5kZWZpbmVkKSA9PSB0cnVlYCwgc28gd2UgbWFrZSBzdXJlIGl0J3MgYSBudW1iZXIgZmlyc3QuCl8uaXNOYU4gPSAob2JqKSAtPiBfLmlzTnVtYmVyKG9iaikgYW5kIHdpbmRvdy5pc05hTihvYmopCgoKIyBJcyBhIGdpdmVuIHZhbHVlIGVxdWFsIHRvIG51bGw/Cl8uaXNOdWxsID0gKG9iaikgLT4gb2JqIGlzIG51bGwKCgojIElzIGEgZ2l2ZW4gdmFyaWFibGUgdW5kZWZpbmVkPwpfLmlzVW5kZWZpbmVkID0gKG9iaikgLT4gdHlwZW9mIG9iaiBpcyAndW5kZWZpbmVkJwoKCiMgVXRpbGl0eSBGdW5jdGlvbnMKIyAtLS0tLS0tLS0tLS0tLS0tLQoKIyBSdW4gVW5kZXJzY29yZS5qcyBpbiBub0NvbmZsaWN0IG1vZGUsIHJldHVybmluZyB0aGUgYF9gIHZhcmlhYmxlIHRvIGl0cwojIHByZXZpb3VzIG93bmVyLiBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBVbmRlcnNjb3JlIG9iamVjdC4KXy5ub0NvbmZsaWN0ID0gLT4KICByb290Ll8gPSBwcmV2aW91c1VuZGVyc2NvcmUKICB0aGlzCgoKIyBLZWVwIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBhcm91bmQgZm9yIGRlZmF1bHQgaXRlcmF0b3JzLgpfLmlkZW50aXR5ID0gKHZhbHVlKSAtPiB2YWx1ZQoKCiMgUnVuIGEgZnVuY3Rpb24gYG5gIHRpbWVzLgpfLnRpbWVzID0gKG4sIGl0ZXJhdG9yLCBjb250ZXh0KSAtPgogIGl0ZXJhdG9yLmNhbGwgY29udGV4dCwgaSBmb3IgaSBpbiBbMC4uLm5dCgoKIyBCcmVhayBvdXQgb2YgdGhlIG1pZGRsZSBvZiBhbiBpdGVyYXRpb24uCl8uYnJlYWtMb29wID0gLT4gdGhyb3cgYnJlYWtlcgoKCiMgQWRkIHlvdXIgb3duIGN1c3RvbSBmdW5jdGlvbnMgdG8gdGhlIFVuZGVyc2NvcmUgb2JqZWN0LCBlbnN1cmluZyB0aGF0CiMgdGhleSdyZSBjb3JyZWN0bHkgYWRkZWQgdG8gdGhlIE9PUCB3cmFwcGVyIGFzIHdlbGwuCl8ubWl4aW4gPSAob2JqKSAtPgogIGZvciBuYW1lIGluIF8uZnVuY3Rpb25zKG9iaikKICAgIGFkZFRvV3JhcHBlciBuYW1lLCBfW25hbWVdID0gb2JqW25hbWVdCgoKIyBHZW5lcmF0ZSBhIHVuaXF1ZSBpbnRlZ2VyIGlkICh1bmlxdWUgd2l0aGluIHRoZSBlbnRpcmUgY2xpZW50IHNlc3Npb24pLgojIFVzZWZ1bCBmb3IgdGVtcG9yYXJ5IERPTSBpZHMuCmlkQ291bnRlciA9IDAKXy51bmlxdWVJZCA9IChwcmVmaXgpIC0+CiAgKHByZWZpeCBvciAnJykgKyBpZENvdW50ZXIrKwoKCiMgQnkgZGVmYXVsdCwgVW5kZXJzY29yZSB1c2VzICoqRVJCKiotc3R5bGUgdGVtcGxhdGUgZGVsaW1pdGVycywgY2hhbmdlIHRoZQojIGZvbGxvd2luZyB0ZW1wbGF0ZSBzZXR0aW5ncyB0byB1c2UgYWx0ZXJuYXRpdmUgZGVsaW1pdGVycy4KXy50ZW1wbGF0ZVNldHRpbmdzID0gewogIHN0YXJ0OiAnPCUnCiAgZW5kOiAnJT4nCiAgaW50ZXJwb2xhdGU6IC88JT0oLis/KSU+L2cKfQoKCiMgSmF2YVNjcmlwdCB0ZW1wbGF0aW5nIGEtbGEgKipFUkIqKiwgcGlsZmVyZWQgZnJvbSBKb2huIFJlc2lnJ3MKIyAqU2VjcmV0cyBvZiB0aGUgSmF2YVNjcmlwdCBOaW5qYSosIHBhZ2UgODMuCiMgU2luZ2xlLXF1b3RlIGZpeCBmcm9tIFJpY2sgU3RyYWhsLgojIFdpdGggYWx0ZXJhdGlvbnMgZm9yIGFyYml0cmFyeSBkZWxpbWl0ZXJzLCBhbmQgdG8gcHJlc2VydmUgd2hpdGVzcGFjZS4KXy50ZW1wbGF0ZSA9IChzdHIsIGRhdGEpIC0+CiAgYyA9IF8udGVtcGxhdGVTZXR0aW5ncwogIGVuZE1hdGNoID0gbmV3IFJlZ0V4cCgiJyg/PVteIitjLmVuZC5zdWJzdHIoMCwgMSkrIl0qIitlc2NhcGVSZWdFeHAoYy5lbmQpKyIpIiwiZyIpCiAgZm4gPSBuZXcgRnVuY3Rpb24gJ29iaicsCiAgICAndmFyIHA9W10scHJpbnQ9ZnVuY3Rpb24oKXtwLnB1c2guYXBwbHkocCxhcmd1bWVudHMpO307JyArCiAgICAnd2l0aChvYmp8fHt9KXtwLnB1c2goXCcnICsKICAgIHN0ci5yZXBsYWNlKC9cci9nLCAnXFxyJykKICAgICAgIC5yZXBsYWNlKC9cbi9nLCAnXFxuJykKICAgICAgIC5yZXBsYWNlKC9cdC9nLCAnXFx0JykKICAgICAgIC5yZXBsYWNlKGVuZE1hdGNoLCLvv73vv73vv70iKQogICAgICAgLnNwbGl0KCInIikuam9pbigiXFwnIikKICAgICAgIC5zcGxpdCgi77+977+977+9Iikuam9pbigiJyIpCiAgICAgICAucmVwbGFjZShjLmludGVycG9sYXRlLCAiJywkMSwnIikKICAgICAgIC5zcGxpdChjLnN0YXJ0KS5qb2luKCInKTsiKQogICAgICAgLnNwbGl0KGMuZW5kKS5qb2luKCJwLnB1c2goJyIpICsKICAgICAgICInKTt9cmV0dXJuIHAuam9pbignJyk7IgogIGlmIGRhdGEgdGhlbiBmbihkYXRhKSBlbHNlIGZuCgoKIyBBbGlhc2VzCiMgLS0tLS0tLQoKXy5mb3JFYWNoID0gXy5lYWNoCl8uZm9sZGwgPSBfLmluamVjdCA9IF8ucmVkdWNlCl8uZm9sZHIgPSBfLnJlZHVjZVJpZ2h0Cl8uc2VsZWN0ID0gXy5maWx0ZXIKXy5hbGwgPSBfLmV2ZXJ5Cl8uYW55ID0gXy5zb21lCl8uY29udGFpbnMgPSBfLmluY2x1ZGUKXy5oZWFkID0gXy5maXJzdApfLnRhaWwgPSBfLnJlc3QKXy5tZXRob2RzID0gXy5mdW5jdGlvbnMKCgojIFNldHVwIHRoZSBPT1AgV3JhcHBlcgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKIyBJZiBVbmRlcnNjb3JlIGlzIGNhbGxlZCBhcyBhIGZ1bmN0aW9uLCBpdCByZXR1cm5zIGEgd3JhcHBlZCBvYmplY3QgdGhhdAojIGNhbiBiZSB1c2VkIE9PLXN0eWxlLiBUaGlzIHdyYXBwZXIgaG9sZHMgYWx0ZXJlZCB2ZXJzaW9ucyBvZiBhbGwgdGhlCiMgdW5kZXJzY29yZSBmdW5jdGlvbnMuIFdyYXBwZWQgb2JqZWN0cyBtYXkgYmUgY2hhaW5lZC4Kd3JhcHBlciA9IChvYmopIC0+CiAgdGhpcy5fd3JhcHBlZCA9IG9iagogIHRoaXMKCgojIEhlbHBlciBmdW5jdGlvbiB0byBjb250aW51ZSBjaGFpbmluZyBpbnRlcm1lZGlhdGUgcmVzdWx0cy4KcmVzdWx0ID0gKG9iaiwgY2hhaW4pIC0+CiAgaWYgY2hhaW4gdGhlbiBfKG9iaikuY2hhaW4oKSBlbHNlIG9iagoKCiMgQSBtZXRob2QgdG8gZWFzaWx5IGFkZCBmdW5jdGlvbnMgdG8gdGhlIE9PUCB3cmFwcGVyLgphZGRUb1dyYXBwZXIgPSAobmFtZSwgZnVuYykgLT4KICB3cmFwcGVyLnByb3RvdHlwZVtuYW1lXSA9IC0+CiAgICBhcmdzID0gXy50b0FycmF5IGFyZ3VtZW50cwogICAgdW5zaGlmdC5jYWxsIGFyZ3MsIHRoaXMuX3dyYXBwZWQKICAgIHJlc3VsdCBmdW5jLmFwcGx5KF8sIGFyZ3MpLCB0aGlzLl9jaGFpbgoKCiMgQWRkIGFsbCBvZnRoZSBVbmRlcnNjb3JlIGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlciBvYmplY3QuCl8ubWl4aW4gXwoKCiMgQWRkIGFsbCBtdXRhdG9yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KXy5lYWNoIFsncG9wJywgJ3B1c2gnLCAncmV2ZXJzZScsICdzaGlmdCcsICdzb3J0JywgJ3NwbGljZScsICd1bnNoaWZ0J10sIChuYW1lKSAtPgogIG1ldGhvZCA9IEFycmF5LnByb3RvdHlwZVtuYW1lXQogIHdyYXBwZXIucHJvdG90eXBlW25hbWVdID0gLT4KICAgIG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpCiAgICByZXN1bHQodGhpcy5fd3JhcHBlZCwgdGhpcy5fY2hhaW4pCgoKIyBBZGQgYWxsIGFjY2Vzc29yIEFycmF5IGZ1bmN0aW9ucyB0byB0aGUgd3JhcHBlci4KXy5lYWNoIFsnY29uY2F0JywgJ2pvaW4nLCAnc2xpY2UnXSwgKG5hbWUpIC0+CiAgbWV0aG9kID0gQXJyYXkucHJvdG90eXBlW25hbWVdCiAgd3JhcHBlci5wcm90b3R5cGVbbmFtZV0gPSAtPgogICAgcmVzdWx0KG1ldGhvZC5hcHBseSh0aGlzLl93cmFwcGVkLCBhcmd1bWVudHMpLCB0aGlzLl9jaGFpbikKCgojIFN0YXJ0IGNoYWluaW5nIGEgd3JhcHBlZCBVbmRlcnNjb3JlIG9iamVjdC4Kd3JhcHBlcjo6Y2hhaW4gPSAtPgogIHRoaXMuX2NoYWluID0gdHJ1ZQogIHRoaXMKCgojIEV4dHJhY3RzIHRoZSByZXN1bHQgZnJvbSBhIHdyYXBwZWQgYW5kIGNoYWluZWQgb2JqZWN0Lgp3cmFwcGVyOjp2YWx1ZSA9IC0+IHRoaXMuX3dyYXBwZWQKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1jb2ZmZWVzY3JpcHQ8L2NvZGU+LjwvcD4KCiAgICA8cD5UaGUgQ29mZmVlU2NyaXB0IG1vZGUgd2FzIHdyaXR0ZW4gYnkgSmVmZiBQaWNraGFyZHQgKDxhIGhyZWY9IkxJQ0VOU0UiPmxpY2Vuc2U8L2E+KS48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/coffeescript/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTEgSmVmZiBQaWNraGFyZHQKTW9kaWZpZWQgZnJvbSB0aGUgUHl0aG9uIENvZGVNaXJyb3IgbW9kZSwgQ29weXJpZ2h0IChjKSAyMDEwIFRpbW90aHkgRmFycmVsbAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LCB0eXBlOwogIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHt0eXBlID0gdHA7IHJldHVybiBzdHlsZTt9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsgcmV0dXJuIHJldCgibWV0YSIsIHN0cmVhbS5jdXJyZW50KCkpO30KICAgIGVsc2UgaWYgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCIhIikpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblNHTUxDb21tZW50OwogICAgICByZXR1cm4gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI9IikgcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmICgoY2ggPT0gIn4iIHx8IGNoID09ICJ8IikgJiYgc3RyZWFtLmVhdCgiPSIpKSByZXR1cm4gcmV0KG51bGwsICJjb21wYXJlIik7CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV0vKTsKICAgICAgcmV0dXJuIHJldCgiYXRvbSIsICJoYXNoIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywuKz4qXC9dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKICAgIH0KICAgIGVsc2UgaWYgKC9bO3t9OlxbXF1dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1dLyk7CiAgICAgIHJldHVybiByZXQoInZhcmlhYmxlIiwgInZhcmlhYmxlIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSAiLyIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBkYXNoZXMgPSAwLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChkYXNoZXMgPj0gMiAmJiBjaCA9PSAiPiIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBkYXNoZXMgPSAoY2ggPT0gIi0iKSA/IGRhc2hlcyArIDEgOiAwOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKCFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCiAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgaWYgKHR5cGUgPT0gImhhc2giICYmIGNvbnRleHQgIT0gInJ1bGUiKSBzdHlsZSA9ICJzdHJpbmctMiI7CiAgICAgIGVsc2UgaWYgKHN0eWxlID09ICJ2YXJpYWJsZSIpIHsKICAgICAgICBpZiAoY29udGV4dCA9PSAicnVsZSIpIHN0eWxlID0gIm51bWJlciI7CiAgICAgICAgZWxzZSBpZiAoIWNvbnRleHQgfHwgY29udGV4dCA9PSAiQG1lZGlheyIpIHN0eWxlID0gInRhZyI7CiAgICAgIH0KCiAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIiAmJiAvXltce1x9O10kLy50ZXN0KHR5cGUpKQogICAgICAgIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICBpZiAodHlwZSA9PSAieyIpIHsKICAgICAgICBpZiAoY29udGV4dCA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID0gIkBtZWRpYXsiOwogICAgICAgIGVsc2Ugc3RhdGUuc3RhY2sucHVzaCgieyIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIn0iKSBzdGF0ZS5zdGFjay5wb3AoKTsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAiQG1lZGlhIikgc3RhdGUuc3RhY2sucHVzaCgiQG1lZGlhIik7CiAgICAgIGVsc2UgaWYgKGNvbnRleHQgPT0gInsiICYmIHR5cGUgIT0gImNvbW1lbnQiKSBzdGF0ZS5zdGFjay5wdXNoKCJydWxlIik7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBuID0gc3RhdGUuc3RhY2subGVuZ3RoOwogICAgICBpZiAoL15cfS8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIG4gLT0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdID09ICJydWxlIiA/IDIgOiAxOwogICAgICByZXR1cm4gc3RhdGUuYmFzZUluZGVudCArIG4gKiBpbmRlbnRVbml0OwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAifSIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9jc3MiLCAiY3NzIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENTUyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogQ1NTIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogU29tZSBleGFtcGxlIENTUyAqLwoKQGltcG9ydCB1cmwoInNvbWV0aGluZy5jc3MiKTsKCmJvZHkgewogIG1hcmdpbjogMDsKICBwYWRkaW5nOiAzZW0gNmVtOwogIGZvbnQtZmFtaWx5OiB0YWhvbWEsIGFyaWFsLCBzYW5zLXNlcmlmOwogIGNvbG9yOiAjMDAwOwp9CgojbmF2aWdhdGlvbiBhIHsKICBmb250LXdlaWdodDogYm9sZDsKICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKfQoKaDEgewogIGZvbnQtc2l6ZTogMi41ZW07Cn0KCmgyIHsKICBmb250LXNpemU6IDEuN2VtOwp9CgpoMTpiZWZvcmUsIGgyOmJlZm9yZSB7CiAgY29udGVudDogIjo6IjsKfQoKY29kZSB7CiAgZm9udC1mYW1pbHk6IGNvdXJpZXIsIG1vbm9zcGFjZTsKICBmb250LXNpemU6IDgwJTsKICBjb2xvcjogIzQxOEE4QTsKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9jc3M8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jbS1yYW5nZWluZm8ge2NvbG9yOiAjYTBiO30Kc3Bhbi5jbS1taW51cyB7Y29sb3I6IHJlZDt9CnNwYW4uY20tcGx1cyB7Y29sb3I6ICMyYjI7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJkaWZmIiwgZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICBpZiAoY2ggPT0gIisiKSByZXR1cm4gInBsdXMiOwogICAgICBpZiAoY2ggPT0gIi0iKSByZXR1cm4gIm1pbnVzIjsKICAgICAgaWYgKGNoID09ICJAIikgcmV0dXJuICJyYW5nZWluZm8iOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZGlmZiIsICJkaWZmIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IERpZmYgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImRpZmYuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJkaWZmLmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogRGlmZiBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CmRpZmYgLS1naXQgYS9pbmRleC5odG1sIGIvaW5kZXguaHRtbAppbmRleCBjMWQ5MTU2Li43NzY0NzQ0IDEwMDY0NAotLS0gYS9pbmRleC5odG1sCisrKyBiL2luZGV4Lmh0bWwKQEAgLTk1LDcgKzk1LDggQEAgU3RyaW5nU3RyZWFtLnByb3RvdHlwZSA9IHsKICAgICA8c2NyaXB0PgogICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCi0gICAgICAgIGF1dG9NYXRjaEJyYWNrZXRzOiB0cnVlCisgICAgICAgIGF1dG9NYXRjaEJyYWNrZXRzOiB0cnVlLAorICAgICAgb25HdXR0ZXJDbGljazogZnVuY3Rpb24oeCl7Y29uc29sZS5sb2coeCk7fQogICAgICAgfSk7CiAgICAgPC9zY3JpcHQ+CiAgIDwvYm9keT4KZGlmZiAtLWdpdCBhL2xpYi9jb2RlbWlycm9yLmpzIGIvbGliL2NvZGVtaXJyb3IuanMKaW5kZXggMDQ2NDZhOS4uOWEzOWNjNyAxMDA2NDQKLS0tIGEvbGliL2NvZGVtaXJyb3IuanMKKysrIGIvbGliL2NvZGVtaXJyb3IuanMKQEAgLTM5OSwxMCArMzk5LDE2IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIH0KIAogICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKLSAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKSwgbGFzdCA9IHN0YXJ0OworICAgICAgdmFyIHN0YXJ0ID0gcG9zRnJvbU1vdXNlKGUpLCBsYXN0ID0gc3RhcnQsIHRhcmdldCA9IGUudGFyZ2V0KCk7CiAgICAgICBpZiAoIXN0YXJ0KSByZXR1cm47CiAgICAgICBzZXRDdXJzb3Ioc3RhcnQubGluZSwgc3RhcnQuY2gsIGZhbHNlKTsKICAgICAgIGlmIChlLmJ1dHRvbigpICE9IDEpIHJldHVybjsKKyAgICAgIGlmICh0YXJnZXQucGFyZW50Tm9kZSA9PSBndXR0ZXIpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMub25HdXR0ZXJDbGljaykKKyAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5kZXhPZihndXR0ZXIuY2hpbGROb2RlcywgdGFyZ2V0KSArIHNob3dpbmdGcm9tKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorCiAgICAgICBpZiAoIWZvY3VzZWQpIG9uRm9jdXMoKTsKIAogICAgICAgZS5zdG9wKCk7CkBAIC04MDgsNyArODE0LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICBmb3IgKHZhciBpID0gc2hvd2luZ0Zyb207IGkgPCBzaG93aW5nVG87ICsraSkgewogICAgICAgICB2YXIgbWFya2VyID0gbGluZXNbaV0uZ3V0dGVyTWFya2VyOwogICAgICAgICBpZiAobWFya2VyKSBodG1sLnB1c2goJzxkaXYgY2xhc3M9IicgKyBtYXJrZXIuc3R5bGUgKyAnIj4nICsgaHRtbEVzY2FwZShtYXJrZXIudGV4dCkgKyAnPC9kaXY+Jyk7Ci0gICAgICAgIGVsc2UgaHRtbC5wdXNoKCI8ZGl2PiIgKyAob3B0aW9ucy5saW5lTnVtYmVycyA/IGkgKyAxIDogIlx1MDBhMCIpICsgIjwvZGl2PiIpOworICAgICAgICBlbHNlIGh0bWwucHVzaCgiPGRpdj4iICsgKG9wdGlvbnMubGluZU51bWJlcnMgPyBpICsgb3B0aW9ucy5maXJzdExpbmVOdW1iZXIgOiAiXHUwMGEwIikgKyAiPC9kaXY+Iik7CiAgICAgICB9CiAgICAgICBndXR0ZXIuc3R5bGUuZGlzcGxheSA9ICJub25lIjsgLy8gVE9ETyB0ZXN0IHdoZXRoZXIgdGhpcyBhY3R1YWxseSBoZWxwcwogICAgICAgZ3V0dGVyLmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7CkBAIC0xMzcxLDEwICsxMzc3LDggQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgIGlmIChvcHRpb24gPT0gInBhcnNlciIpIHNldFBhcnNlcih2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImxpbmVOdW1iZXJzIikgc2V0TGluZU51bWJlcnModmFsdWUpOwogICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJndXR0ZXIiKSBzZXRHdXR0ZXIodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJyZWFkT25seSIpIG9wdGlvbnMucmVhZE9ubHkgPSB2YWx1ZTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSBpbmRlbnRVbml0ID0gdmFsdWU7IHNldFBhcnNlcihvcHRpb25zLnBhcnNlcik7fQotICAgICAgICBlbHNlIGlmICgvXig/OmVudGVyTW9kZXx0YWJNb2RlfGluZGVudFdpdGhUYWJzfHJlYWRPbmx5fGF1dG9NYXRjaEJyYWNrZXRzfHVuZG9EZXB0aCkkLy50ZXN0KG9wdGlvbikpIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwotICAgICAgICBlbHNlIHRocm93IG5ldyBFcnJvcigiQ2FuJ3Qgc2V0IG9wdGlvbiAiICsgb3B0aW9uKTsKKyAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiaW5kZW50VW5pdCIpIHtvcHRpb25zLmluZGVudFVuaXQgPSB2YWx1ZTsgc2V0UGFyc2VyKG9wdGlvbnMucGFyc2VyKTt9CisgICAgICAgIGVsc2Ugb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7CiAgICAgICB9LAogICAgICAgY3Vyc29yQ29vcmRzOiBjdXJzb3JDb29yZHMsCiAgICAgICB1bmRvOiBvcGVyYXRpb24odW5kbyksCkBAIC0xNDAyLDcgKzE0MDYsOCBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAKICAgICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIG9wZXJhdGlvbihmKSgpO30sCi0gICAgICByZWZyZXNoOiBmdW5jdGlvbigpe3VwZGF0ZURpc3BsYXkoW3tmcm9tOiAwLCB0bzogbGluZXMubGVuZ3RofV0pO30KKyAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCl7dXBkYXRlRGlzcGxheShbe2Zyb206IDAsIHRvOiBsaW5lcy5sZW5ndGh9XSk7fSwKKyAgICAgIGdldElucHV0RmllbGQ6IGZ1bmN0aW9uKCl7cmV0dXJuIGlucHV0O30KICAgICB9OwogICAgIHJldHVybiBpbnN0YW5jZTsKICAgfQpAQCAtMTQyMCw2ICsxNDI1LDcgQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgcmVhZE9ubHk6IGZhbHNlLAogICAgIG9uQ2hhbmdlOiBudWxsLAogICAgIG9uQ3Vyc29yQWN0aXZpdHk6IG51bGwsCisgICAgb25HdXR0ZXJDbGljazogbnVsbCwKICAgICBhdXRvTWF0Y2hCcmFja2V0czogZmFsc2UsCiAgICAgd29ya1RpbWU6IDIwMCwKICAgICB3b3JrRGVsYXk6IDMwMCwKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1kaWZmPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ecl/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ecl/ecl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJlY2wiLCBmdW5jdGlvbihjb25maWcpIHsNCg0KICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsNCiAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7DQogICAgcmV0dXJuIG9iajsNCiAgfQ0KDQogIGZ1bmN0aW9uIG1ldGFIb29rKHN0cmVhbSwgc3RhdGUpIHsNCiAgICBpZiAoIXN0YXRlLnN0YXJ0T2ZMaW5lKSByZXR1cm4gZmFsc2U7DQogICAgc3RyZWFtLnNraXBUb0VuZCgpOw0KICAgIHJldHVybiAibWV0YSI7DQogIH0NCg0KICBmdW5jdGlvbiB0b2tlbkF0U3RyaW5nKHN0cmVhbSwgc3RhdGUpIHsNCiAgICB2YXIgbmV4dDsNCiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7DQogICAgICBpZiAobmV4dCA9PSAnIicgJiYgIXN0cmVhbS5lYXQoJyInKSkgew0KICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IG51bGw7DQogICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4gInN0cmluZyI7DQogIH0NCg0KICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0Ow0KICB2YXIga2V5d29yZCA9IHdvcmRzKCJhYnMgYWNvcyBhbGxub2RlcyBhc2NpaSBhc2luIGFzc3RyaW5nIGF0YW4gYXRhbjIgYXZlIGNhc2UgY2hvb3NlIGNob29zZW4gY2hvb3Nlc2V0cyBjbHVzdGVyc2l6ZSBjb21iaW5lIGNvcnJlbGF0aW9uIGNvcyBjb3NoIGNvdW50IGNvdmFyaWFuY2UgY3JvbiBkYXRhc2V0IGRlZHVwIGRlZmluZSBkZW5vcm1hbGl6ZSBkaXN0cmlidXRlIGRpc3RyaWJ1dGVkIGRpc3RyaWJ1dGlvbiBlYmNkaWMgZW50aCBlcnJvciBldmFsdWF0ZSBldmVudCBldmVudGV4dHJhIGV2ZW50bmFtZSBleGlzdHMgZXhwIGZhaWxjb2RlIGZhaWxtZXNzYWdlIGZldGNoIGZyb211bmljb2RlIGdldGlzdmFsaWQgZ2xvYmFsIGdyYXBoIGdyb3VwIGhhc2ggaGFzaDMyIGhhc2g2NCBoYXNoY3JjIGhhc2htZDUgaGF2aW5nIGlmIGluZGV4IGludGZvcm1hdCBpc3ZhbGlkIGl0ZXJhdGUgam9pbiBrZXl1bmljb2RlIGxlbmd0aCBsaWJyYXJ5IGxpbWl0IGxuIGxvY2FsIGxvZyBsb29wIG1hcCBtYXRjaGVkIG1hdGNobGVuZ3RoIG1hdGNocG9zaXRpb24gbWF0Y2h0ZXh0IG1hdGNodW5pY29kZSBtYXggbWVyZ2UgbWVyZ2Vqb2luIG1pbiBub2xvY2FsIG5vbmVtcHR5IG5vcm1hbGl6ZSBwYXJzZSBwaXBlIHBvd2VyIHByZWxvYWQgcHJvY2VzcyBwcm9qZWN0IHB1bGwgcmFuZG9tIHJhbmdlIHJhbmsgcmFua2VkIHJlYWxmb3JtYXQgcmVjb3Jkb2YgcmVnZXhmaW5kIHJlZ2V4cmVwbGFjZSByZWdyb3VwIHJlamVjdGVkIHJvbGx1cCByb3VuZCByb3VuZHVwIHJvdyByb3dkaWZmIHNhbXBsZSBzZXQgc2luIHNpbmggc2l6ZW9mIHNvYXBjYWxsIHNvcnQgc29ydGVkIHNxcnQgc3RlcHBlZCBzdG9yZWQgc3VtIHRhYmxlIHRhbiB0YW5oIHRoaXNub2RlIHRvcG4gdG91bmljb2RlIHRyYW5zZmVyIHRyaW0gdHJ1bmNhdGUgdHlwZW9mIHVuZ3JvdXAgdW5pY29kZW9yZGVyIHZhcmlhbmNlIHdoaWNoIHdvcmt1bml0IHhtbGRlY29kZSB4bWxlbmNvZGUgeG1sdGV4dCB4bWx1bmljb2RlIik7DQogIHZhciB2YXJpYWJsZSA9IHdvcmRzKCJhcHBseSBhc3NlcnQgYnVpbGQgYnVpbGRpbmRleCBldmFsdWF0ZSBmYWlsIGtleWRpZmYga2V5cGF0Y2ggbG9hZHhtbCBub3Rob3Igbm90aWZ5IG91dHB1dCBwYXJhbGxlbCBzZXF1ZW50aWFsIHNvYXBjYWxsIHdhaXQiKTsNCiAgdmFyIHZhcmlhYmxlXzIgPSB3b3JkcygiX19jb21wcmVzc2VkX18gYWxsIGFuZCBhbnkgYXMgYXRtb3N0IGJlZm9yZSBiZWdpbmMrKyBiZXN0IGJldHdlZW4gY2FzZSBjb25zdCBjb3VudGVyIGNzdiBkZXNjZW5kIGVuY3J5cHQgZW5kIGVuZGMrKyBlbmRtYWNybyBleGNlcHQgZXhjbHVzaXZlIGV4cGlyZSBleHBvcnQgZXh0ZW5kIGZhbHNlIGZldyBmaXJzdCBmbGF0IGZyb20gZnVsbCBmdW5jdGlvbiBncm91cCBoZWFkZXIgaGVhZGluZyBob2xlIGlmYmxvY2sgaW1wb3J0IGluIGludGVyZmFjZSBqb2luZWQga2VlcCBrZXllZCBsYXN0IGxlZnQgbGltaXQgbG9hZCBsb2NhbCBsb2NhbGUgbG9va3VwIG1hY3JvIG1hbnkgbWF4Y291bnQgbWF4bGVuZ3RoIG1pbiBza2V3IG1vZHVsZSBuYW1lZCBub2Nhc2Ugbm9yb290IG5vc2NhbiBub3NvcnQgbm90IG9mIG9ubHkgb3B0IG9yIG91dGVyIG92ZXJ3cml0ZSBwYWNrZWQgcGFydGl0aW9uIHBlbmFsdHkgcGh5c2ljYWxsZW5ndGggcGlwZSBxdW90ZSByZWNvcmQgcmVsYXRpb25zaGlwIHJlcGVhdCByZXR1cm4gcmlnaHQgc2NhbiBzZWxmIHNlcGFyYXRvciBzZXJ2aWNlIHNoYXJlZCBza2V3IHNraXAgc3FsIHN0b3JlIHRlcm1pbmF0b3IgdGhvciB0aHJlc2hvbGQgdG9rZW4gdHJhbnNmb3JtIHRyaW0gdHJ1ZSB0eXBlIHVuaWNvZGVvcmRlciB1bnNvcnRlZCB2YWxpZGF0ZSB2aXJ0dWFsIHdob2xlIHdpbGQgd2l0aGluIHhtbCB4cGF0aCIpOw0KICB2YXIgdmFyaWFibGVfMyA9IHdvcmRzKCJhc2NpaSBiaWdfZW5kaWFuIGJvb2xlYW4gZGF0YSBkZWNpbWFsIGViY2RpYyBpbnRlZ2VyIHBhdHRlcm4gcXN0cmluZyByZWFsIHJlY29yZCBydWxlIHNldCBvZiBzdHJpbmcgdG9rZW4gdWRlY2ltYWwgdW5pY29kZSB1bnNpZ25lZCB2YXJzdHJpbmcgdmFydW5pY29kZSIpOw0KICB2YXIgYnVpbHRpbiA9IHdvcmRzKCJjaGVja3BvaW50IGRlcHJlY2F0ZWQgZmFpbGNvZGUgZmFpbG1lc3NhZ2UgZmFpbHVyZSBnbG9iYWwgaW5kZXBlbmRlbnQgb253YXJuaW5nIHBlcnNpc3QgcHJpb3JpdHkgcmVjb3Zlcnkgc3RvcmVkIHN1Y2Nlc3Mgd2FpdCB3aGVuIik7DQogIHZhciBibG9ja0tleXdvcmRzID0gd29yZHMoImNhdGNoIGNsYXNzIGRvIGVsc2UgZmluYWxseSBmb3IgaWYgc3dpdGNoIHRyeSB3aGlsZSIpOw0KICB2YXIgYXRvbXMgPSB3b3JkcygidHJ1ZSBmYWxzZSBudWxsIik7DQogIHZhciBob29rcyA9IHsiIyI6IG1ldGFIb29rfTsNCiAgdmFyIG11bHRpTGluZVN0cmluZ3M7DQogIHZhciBpc09wZXJhdG9yQ2hhciA9IC9bK1wtKiYlPTw+IT98XC9dLzsNCg0KICB2YXIgY3VyUHVuYzsNCg0KICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgew0KICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7DQogICAgaWYgKGhvb2tzW2NoXSkgew0KICAgICAgdmFyIHJlc3VsdCA9IGhvb2tzW2NoXShzdHJlYW0sIHN0YXRlKTsNCiAgICAgIGlmIChyZXN1bHQgIT09IGZhbHNlKSByZXR1cm4gcmVzdWx0Ow0KICAgIH0NCiAgICBpZiAoY2ggPT0gJyInIHx8IGNoID09ICInIikgew0KICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7DQogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7DQogICAgfQ0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgew0KICAgICAgY3VyUHVuYyA9IGNoOw0KICAgICAgcmV0dXJuIG51bGwNCiAgICB9DQogICAgaWYgKC9cZC8udGVzdChjaCkpIHsNCiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLyk7DQogICAgICByZXR1cm4gIm51bWJlciI7DQogICAgfQ0KICAgIGlmIChjaCA9PSAiLyIpIHsNCiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7DQogICAgICAgIHJldHVybiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7DQogICAgICB9DQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7DQogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsNCiAgICAgICAgcmV0dXJuICJjb21tZW50IjsNCiAgICAgIH0NCiAgICB9DQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7DQogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOw0KICAgICAgcmV0dXJuICJvcGVyYXRvciI7DQogICAgfQ0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOw0KICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCk7DQogICAgaWYgKGtleXdvcmQucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgew0KICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9ICJuZXdzdGF0ZW1lbnQiOw0KICAgICAgcmV0dXJuICJrZXl3b3JkIjsNCiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsNCiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsNCiAgICAgIHJldHVybiAidmFyaWFibGUiOw0KICAgIH0gZWxzZSBpZiAodmFyaWFibGVfMi5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7DQogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7DQogICAgICByZXR1cm4gInZhcmlhYmxlLTIiOw0KICAgIH0gZWxzZSBpZiAodmFyaWFibGVfMy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7DQogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7DQogICAgICByZXR1cm4gInZhcmlhYmxlLTMiOw0KICAgIH0gZWxzZSBpZiAoYnVpbHRpbi5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSB7DQogICAgICBpZiAoYmxvY2tLZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSBjdXJQdW5jID0gIm5ld3N0YXRlbWVudCI7DQogICAgICByZXR1cm4gImJ1aWx0aW4iOw0KICAgIH0gZWxzZSB7IC8vRGF0YSB0eXBlcyBhcmUgb2YgZnJvbSBLRVlXT1JEIyMgDQoJCXZhciBpID0gY3VyLmxlbmd0aCAtIDE7DQoJCXdoaWxlKGkgPj0gMCAmJiAoIWlzTmFOKGN1cltpXSkgfHwgY3VyW2ldID09ICdfJykpDQoJCQktLWk7DQoJCQ0KCQlpZiAoaSA+IDApIHsNCgkJCXZhciBjdXIyID0gY3VyLnN1YnN0cigwLCBpICsgMSk7DQoJICAgIAlpZiAodmFyaWFibGVfMy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIyKSkgew0KCSAgICAgIAkJaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyMikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsNCgkgICAgICAJCXJldHVybiAidmFyaWFibGUtMyI7DQoJICAgICAgCX0NCgkgICAgfQ0KICAgIH0NCiAgICBpZiAoYXRvbXMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgcmV0dXJuICJhdG9tIjsNCiAgICByZXR1cm4gIndvcmQiOw0KICB9DQoNCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsNCiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgew0KICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7DQogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7DQogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQ0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOw0KICAgICAgfQ0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpDQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOw0KICAgICAgcmV0dXJuICJzdHJpbmciOw0KICAgIH07DQogIH0NCg0KICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgew0KICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsNCiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7DQogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7DQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOw0KICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7DQogICAgfQ0KICAgIHJldHVybiAiY29tbWVudCI7DQogIH0NCg0KICBmdW5jdGlvbiBDb250ZXh0KGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2KSB7DQogICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOw0KICAgIHRoaXMuY29sdW1uID0gY29sdW1uOw0KICAgIHRoaXMudHlwZSA9IHR5cGU7DQogICAgdGhpcy5hbGlnbiA9IGFsaWduOw0KICAgIHRoaXMucHJldiA9IHByZXY7DQogIH0NCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIGNvbCwgdHlwZSkgew0KICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7DQogIH0NCiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkgew0KICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlOw0KICAgIGlmICh0ID09ICIpIiB8fCB0ID09ICJdIiB8fCB0ID09ICJ9IikNCiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDsNCiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsNCiAgfQ0KDQogIC8vIEludGVyZmFjZQ0KDQogIHJldHVybiB7DQogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgew0KICAgICAgcmV0dXJuIHsNCiAgICAgICAgdG9rZW5pemU6IG51bGwsDQogICAgICAgIGNvbnRleHQ6IG5ldyBDb250ZXh0KChiYXNlY29sdW1uIHx8IDApIC0gaW5kZW50VW5pdCwgMCwgInRvcCIsIGZhbHNlKSwNCiAgICAgICAgaW5kZW50ZWQ6IDAsDQogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlDQogICAgICB9Ow0KICAgIH0sDQoNCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgew0KICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7DQogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7DQogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7DQogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7DQogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsNCiAgICAgIH0NCiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7DQogICAgICBjdXJQdW5jID0gbnVsbDsNCiAgICAgIHZhciBzdHlsZSA9IChzdGF0ZS50b2tlbml6ZSB8fCB0b2tlbkJhc2UpKHN0cmVhbSwgc3RhdGUpOw0KICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsNCiAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gdHJ1ZTsNCg0KICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAieyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJ9Iik7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJbIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIl0iKTsNCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOw0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAifSIpIHsNCiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7DQogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7DQogICAgICB9DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgIGVsc2UgaWYgKGN0eC50eXBlID09ICJ9IiB8fCBjdHgudHlwZSA9PSAidG9wIiB8fCAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgY3VyUHVuYyA9PSAibmV3c3RhdGVtZW50IikpDQogICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJzdGF0ZW1lbnQiKTsNCiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7DQogICAgICByZXR1cm4gc3R5bGU7DQogICAgfSwNCg0KICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgew0KICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSAmJiBzdGF0ZS50b2tlbml6ZSAhPSBudWxsKSByZXR1cm4gMDsNCiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0LCBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsNCiAgICAgIGlmIChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBmaXJzdENoYXIgPT0gIn0iKSBjdHggPSBjdHgucHJldjsNCiAgICAgIHZhciBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlOw0KICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7DQogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7DQogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsNCiAgICB9LA0KDQogICAgZWxlY3RyaWNDaGFyczogInt9Ig0KICB9Ow0KfSk7DQoNCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWVjbCIpOw0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ecl/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/PCFkb2N0eXBlIGh0bWw+DQo8aHRtbD4NCiAgPGhlYWQ+DQogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEVDTCBtb2RlPC90aXRsZT4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+DQogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0IHNyYz0iZWNsLmpzIj48L3NjcmlwdD4NCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+DQogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4NCiAgPC9oZWFkPg0KICA8Ym9keT4NCiAgICA8aDE+Q29kZU1pcnJvcjogRUNMIG1vZGU8L2gxPg0KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+DQovKg0Kc2FtcGxlIHVzZWxlc3MgY29kZSB0byBkZW1vbnN0cmF0ZSBlY2wgc3ludGF4IGhpZ2hsaWdodGluZw0KdGhpcyBpcyBhIG11bHRpbGluZSBjb21tZW50IQ0KKi8NCg0KLy8gIHRoaXMgaXMgYSBzaW5nbGVsaW5lIGNvbW1lbnQhDQoNCmltcG9ydCB1dDsNCnIgOj0gDQogIHJlY29yZA0KICAgc3RyaW5nMjIgczEgOj0gJzEyMyc7DQogICBpbnRlZ2VyNCBpMSA6PSAxMjM7DQogIGVuZDsNCiNvcHRpb24oJ3RtcCcsIHRydWUpOw0KZCA6PSBkYXRhc2V0KCd0bXA6OnFiJywgciwgdGhvcik7DQpvdXRwdXQoZCk7DQo8L3RleHRhcmVhPjwvZm9ybT4NCiAgICA8c2NyaXB0Pg0KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsNCiAgICAgICAgdGFiTW9kZTogImluZGVudCIsDQogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsDQogICAgICB9KTsNCiAgICA8L3NjcmlwdD4NCg0KICAgIDxwPkJhc2VkIG9uIENvZGVNaXJyb3IncyBjbGlrZSBtb2RlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDxhIGhyZWY9Imh0dHA6Ly9ocGNjc3lzdGVtcy5jb20iPkhQQ0MgU3lzdGVtczwvYT4gd2ViIHNpdGUuPC9wPg0KICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtZWNsPC9jb2RlPi48L3A+DQoNCiAgPC9ib2R5Pg0KPC9odG1sPg0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/gfm.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJnZm0iLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtZE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAibWFya2Rvd24iKTsKICB2YXIgYWxpYXNlcyA9IHsKICAgIGh0bWw6ICJodG1sbWl4ZWQiLAogICAganM6ICJqYXZhc2NyaXB0IiwKICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgIGM6ICJ0ZXh0L3gtY3NyYyIsCiAgICAiYysrIjogInRleHQveC1jKytzcmMiLAogICAgamF2YTogInRleHQveC1qYXZhIiwKICAgIGNzaGFycDogInRleHQveC1jc2hhcnAiLAogICAgImMjIjogInRleHQveC1jc2hhcnAiCiAgfTsKCiAgLy8gbWFrZSB0aGlzIGxhenkgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGxvYWQgR0ZNIGxhc3QKICB2YXIgZ2V0TW9kZSA9IChmdW5jdGlvbiAoKSB7CiAgICB2YXIgaSwgbW9kZXMgPSB7fSwgbWltZXMgPSB7fSwgbWltZTsKCiAgICB2YXIgbGlzdCA9IENvZGVNaXJyb3IubGlzdE1vZGVzKCk7CiAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICBtb2Rlc1tsaXN0W2ldXSA9IGxpc3RbaV07CiAgICB9CiAgICB2YXIgbWltZXNMaXN0ID0gQ29kZU1pcnJvci5saXN0TUlNRXMoKTsKICAgIGZvciAoaSA9IDA7IGkgPCBtaW1lc0xpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgbWltZSA9IG1pbWVzTGlzdFtpXS5taW1lOwogICAgICBtaW1lc1ttaW1lXSA9IG1pbWVzTGlzdFtpXS5taW1lOwogICAgfQoKICAgIGZvciAodmFyIGEgaW4gYWxpYXNlcykgewogICAgICBpZiAoYWxpYXNlc1thXSBpbiBtb2RlcyB8fCBhbGlhc2VzW2FdIGluIG1pbWVzKQogICAgICAgIG1vZGVzW2FdID0gYWxpYXNlc1thXTsKICAgIH0KICAgIAogICAgcmV0dXJuIGZ1bmN0aW9uIChsYW5nKSB7CiAgICAgIHJldHVybiBtb2Rlc1tsYW5nXSA/IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1vZGVzW2xhbmddKSA6IG51bGw7CiAgICB9CiAgfSgpKTsKCiAgZnVuY3Rpb24gbWFya2Rvd24oc3RyZWFtLCBzdGF0ZSkgewogICAgLy8gaW50ZXJjZXB0IGZlbmNlZCBjb2RlIGJsb2NrcwogICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goL15gYGAoW1x3KyNdKikvKSkgewogICAgICAvLyB0cnkgc3dpdGNoaW5nIG1vZGUKICAgICAgc3RhdGUubG9jYWxNb2RlID0gZ2V0TW9kZShSZWdFeHAuJDEpCiAgICAgIGlmIChzdGF0ZS5sb2NhbE1vZGUpCiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IHN0YXRlLmxvY2FsTW9kZS5zdGFydFN0YXRlKCk7CgogICAgICBzdGF0ZS50b2tlbiA9IGxvY2FsOwogICAgICByZXR1cm4gJ2NvZGUnOwogICAgfQoKICAgIHJldHVybiBtZE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5tZFN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIGxvY2FsKHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKC9eYGBgLykpIHsKICAgICAgc3RhdGUubG9jYWxNb2RlID0gc3RhdGUubG9jYWxTdGF0ZSA9IG51bGw7CiAgICAgIHN0YXRlLnRva2VuID0gbWFya2Rvd247CiAgICAgIHJldHVybiAnY29kZSc7CiAgICB9CiAgICBlbHNlIGlmIChzdGF0ZS5sb2NhbE1vZGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLmxvY2FsTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpOwogICAgfSBlbHNlIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gJ2NvZGUnOwogICAgfQogIH0KCiAgLy8gY3VzdG9tIGhhbmRsZVRleHQgdG8gcHJldmVudCBlbXBoYXNpcyBpbiB0aGUgbWlkZGxlIG9mIGEgd29yZAogIC8vIGFuZCBhZGQgYXV0b2xpbmtpbmcKICBmdW5jdGlvbiBoYW5kbGVUZXh0KHN0cmVhbSwgbWRTdGF0ZSkgewogICAgdmFyIG1hdGNoOwogICAgaWYgKHN0cmVhbS5tYXRjaCgvXlx3KzpcL1wvXFMrLykpIHsKICAgICAgcmV0dXJuICdsaW5raHJlZic7CiAgICB9CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW15cWypcXDw+YCBfXVteXFsqXFw8PmAgXSpbXlxbKlxcPD5gIF9dLykpIHsKICAgICAgcmV0dXJuIG1kTW9kZS5nZXRUeXBlKG1kU3RhdGUpOwogICAgfQogICAgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKC9eW15cWypcXDw+YCBdKy8pKSB7CiAgICAgIHZhciB3b3JkID0gbWF0Y2hbMF07CiAgICAgIGlmICh3b3JkWzBdID09PSAnXycgJiYgd29yZFt3b3JkLmxlbmd0aC0xXSA9PT0gJ18nKSB7CiAgICAgICAgc3RyZWFtLmJhY2tVcCh3b3JkLmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKICAgICAgfQogICAgICByZXR1cm4gbWRNb2RlLmdldFR5cGUobWRTdGF0ZSk7CiAgICB9CiAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBtZFN0YXRlID0gbWRNb2RlLnN0YXJ0U3RhdGUoKTsKICAgICAgbWRTdGF0ZS50ZXh0ID0gaGFuZGxlVGV4dDsKICAgICAgcmV0dXJuIHt0b2tlbjogbWFya2Rvd24sIG1vZGU6ICJtYXJrZG93biIsIG1kU3RhdGU6IG1kU3RhdGUsCiAgICAgICAgICAgICAgbG9jYWxNb2RlOiBudWxsLCBsb2NhbFN0YXRlOiBudWxsfTsKICAgIH0sCgogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4ge3Rva2VuOiBzdGF0ZS50b2tlbiwgbW9kZTogc3RhdGUubW9kZSwgbWRTdGF0ZTogQ29kZU1pcnJvci5jb3B5U3RhdGUobWRNb2RlLCBzdGF0ZS5tZFN0YXRlKSwKICAgICAgICAgICAgICBsb2NhbE1vZGU6IHN0YXRlLmxvY2FsTW9kZSwKICAgICAgICAgICAgICBsb2NhbFN0YXRlOiBzdGF0ZS5sb2NhbE1vZGUgPyBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS5sb2NhbE1vZGUsIHN0YXRlLmxvY2FsU3RhdGUpIDogbnVsbH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbihzdHJlYW0sIHN0YXRlKTsKICAgIH0KICB9Cn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/gfm/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdGTSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vbWFya2Rvd24vbWFya2Rvd24uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImdmbS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbWFya2Rvd24vbWFya2Rvd24uY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHRk0gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KR2l0aHViIEZsYXZvcmVkIE1hcmtkb3duCj09PT09PT09PT09PT09PT09PT09PT09PQoKRXZlcnl0aGluZyBmcm9tIG1hcmtkb3duIHBsdXMgR0ZNIGZlYXR1cmVzOgoKIyMgRmVuY2VkIGNvZGUgYmxvY2tzCgpgYGBqYXZhc2NyaXB0CmZvciAodmFyIGkgPSAwOyBpICZsdDsgaXRlbXMubGVuZ3RoOyBpKyspIHsKICAgIGNvbnNvbGUubG9nKGl0ZW1zW2ldLCBpKTsgLy8gbG9nIHRoZW0KfQpgYGAKClNlZSBodHRwOi8vZ2l0aHViLmdpdGh1Yi5jb20vZ2l0aHViLWZsYXZvcmVkLW1hcmtkb3duLwoKPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiAnZ2ZtJywKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAiZGVmYXVsdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/go.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJnbyIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKCiAgdmFyIGtleXdvcmRzID0gewogICAgImJyZWFrIjp0cnVlLCAiY2FzZSI6dHJ1ZSwgImNoYW4iOnRydWUsICJjb25zdCI6dHJ1ZSwgImNvbnRpbnVlIjp0cnVlLAogICAgImRlZmF1bHQiOnRydWUsICJkZWZlciI6dHJ1ZSwgImVsc2UiOnRydWUsICJmYWxsdGhyb3VnaCI6dHJ1ZSwgImZvciI6dHJ1ZSwKICAgICJmdW5jIjp0cnVlLCAiZ28iOnRydWUsICJnb3RvIjp0cnVlLCAiaWYiOnRydWUsICJpbXBvcnQiOnRydWUsCiAgICAiaW50ZXJmYWNlIjp0cnVlLCAibWFwIjp0cnVlLCAicGFja2FnZSI6dHJ1ZSwgInJhbmdlIjp0cnVlLCAicmV0dXJuIjp0cnVlLAogICAgInNlbGVjdCI6dHJ1ZSwgInN0cnVjdCI6dHJ1ZSwgInN3aXRjaCI6dHJ1ZSwgInR5cGUiOnRydWUsICJ2YXIiOnRydWUsCiAgICAiYm9vbCI6dHJ1ZSwgImJ5dGUiOnRydWUsICJjb21wbGV4NjQiOnRydWUsICJjb21wbGV4MTI4Ijp0cnVlLAogICAgImZsb2F0MzIiOnRydWUsICJmbG9hdDY0Ijp0cnVlLCAiaW50OCI6dHJ1ZSwgImludDE2Ijp0cnVlLCAiaW50MzIiOnRydWUsCiAgICAiaW50NjQiOnRydWUsICJzdHJpbmciOnRydWUsICJ1aW50OCI6dHJ1ZSwgInVpbnQxNiI6dHJ1ZSwgInVpbnQzMiI6dHJ1ZSwKICAgICJ1aW50NjQiOnRydWUsICJpbnQiOnRydWUsICJ1aW50Ijp0cnVlLCAidWludHB0ciI6dHJ1ZQogIH07CgogIHZhciBhdG9tcyA9IHsKICAgICJ0cnVlIjp0cnVlLCAiZmFsc2UiOnRydWUsICJpb3RhIjp0cnVlLCAibmlsIjp0cnVlLCAiYXBwZW5kIjp0cnVlLAogICAgImNhcCI6dHJ1ZSwgImNsb3NlIjp0cnVlLCAiY29tcGxleCI6dHJ1ZSwgImNvcHkiOnRydWUsICJpbWFnIjp0cnVlLAogICAgImxlbiI6dHJ1ZSwgIm1ha2UiOnRydWUsICJuZXciOnRydWUsICJwYW5pYyI6dHJ1ZSwgInByaW50Ijp0cnVlLAogICAgInByaW50bG4iOnRydWUsICJyZWFsIjp0cnVlLCAicmVjb3ZlciI6dHJ1ZQogIH07CgogIHZhciBibG9ja0tleXdvcmRzID0gewogICAgImVsc2UiOnRydWUsICJmb3IiOnRydWUsICJmdW5jIjp0cnVlLCAiaWYiOnRydWUsICJpbnRlcmZhY2UiOnRydWUsCiAgICAic2VsZWN0Ijp0cnVlLCAic3RydWN0Ijp0cnVlLCAic3dpdGNoIjp0cnVlCiAgfTsKCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJl4lOj08PiF8XC9dLzsKCiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIgfHwgY2ggPT0gImAiKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoL1tcZFwuXS8udGVzdChjaCkpIHsKICAgICAgaWYgKGNoID09ICIuIikgewogICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKyhbZUVdW1wtK10/WzAtOV0rKT8vKTsKICAgICAgfSBlbHNlIGlmIChjaCA9PSAiMCIpIHsKICAgICAgICBzdHJlYW0ubWF0Y2goL15beFhdWzAtOWEtZkEtRl0rLykgfHwgc3RyZWFtLm1hdGNoKC9eMFswLTddKy8pOwogICAgICB9IGVsc2UgewogICAgICAgIHN0cmVhbS5tYXRjaCgvXlswLTldKlwuP1swLTldKihbZUVdW1wtK10/WzAtOV0rKT8vKTsKICAgICAgfQogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbAogICAgfQogICAgaWYgKGNoID09ICIvIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQ7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICBpZiAoa2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgewogICAgICBpZiAoY3VyID09ICJjYXNlIiB8fCBjdXIgPT0gImRlZmF1bHQiKSBjdXJQdW5jID0gImNhc2UiOwogICAgICByZXR1cm4gImtleXdvcmQiOwogICAgfQogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiAiYXRvbSI7CiAgICByZXR1cm4gIndvcmQiOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlOwogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBxdW90ZSA9PSAiYCIpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gImNvbW1lbnQiOwogIH0KCiAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikgewogICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOwogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5hbGlnbiA9IGFsaWduOwogICAgdGhpcy5wcmV2ID0gcHJldjsKICB9CiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIGNvbCwgdHlwZSkgewogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTsKICB9CiAgZnVuY3Rpb24gcG9wQ29udGV4dChzdGF0ZSkgewogICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7CiAgICBpZiAodCA9PSAiKSIgfHwgdCA9PSAiXSIgfHwgdCA9PSAifSIpCiAgICAgIHN0YXRlLmluZGVudGVkID0gc3RhdGUuY29udGV4dC5pbmRlbnRlZDsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IG51bGwsCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLAogICAgICAgIGluZGVudGVkOiAwLAogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjdHggPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKICAgICAgICBpZiAoY3R4LnR5cGUgPT0gImNhc2UiKSBjdHgudHlwZSA9ICJ9IjsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICBjdXJQdW5jID0gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAifSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJbIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIl0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiKCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICIpIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gImNhc2UiKSBjdHgudHlwZSA9ICJjYXNlIgogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IiAmJiBjdHgudHlwZSA9PSAifSIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuaXplICE9IHRva2VuQmFzZSAmJiBzdGF0ZS50b2tlbml6ZSAhPSBudWxsKSByZXR1cm4gMDsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQsIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwogICAgICBpZiAoY3R4LnR5cGUgPT0gImNhc2UiICYmIC9eKD86Y2FzZXxkZWZhdWx0KVxiLy50ZXN0KHRleHRBZnRlcikpIHsKICAgICAgICBzdGF0ZS5jb250ZXh0LnR5cGUgPSAifSI7CiAgICAgICAgcmV0dXJuIGN0eC5pbmRlbnRlZDsKICAgICAgfQogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC5hbGlnbikgcmV0dXJuIGN0eC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZSByZXR1cm4gY3R4LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ7fToiCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1nbyIsICJnbyIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/go/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdvIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImdvLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOjFweCBzb2xpZCAjOTk5OyBiYWNrZ3JvdW5kOiNmZmN9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogR28gbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovLyBQcmltZSBTaWV2ZSBpbiBHby4KLy8gVGFrZW4gZnJvbSB0aGUgR28gc3BlY2lmaWNhdGlvbi4KLy8gQ29weXJpZ2h0IMKpIFRoZSBHbyBBdXRob3JzLgoKcGFja2FnZSBtYWluCgppbXBvcnQgImZtdCIKCi8vIFNlbmQgdGhlIHNlcXVlbmNlIDIsIDMsIDQsIC4uLiB0byBjaGFubmVsICdjaCcuCmZ1bmMgZ2VuZXJhdGUoY2ggY2hhbiZsdDstIGludCkgewoJZm9yIGkgOj0gMjsgOyBpKysgewoJCWNoICZsdDstIGkgIC8vIFNlbmQgJ2knIHRvIGNoYW5uZWwgJ2NoJwoJfQp9CgovLyBDb3B5IHRoZSB2YWx1ZXMgZnJvbSBjaGFubmVsICdzcmMnIHRvIGNoYW5uZWwgJ2RzdCcsCi8vIHJlbW92aW5nIHRob3NlIGRpdmlzaWJsZSBieSAncHJpbWUnLgpmdW5jIGZpbHRlcihzcmMgJmx0Oy1jaGFuIGludCwgZHN0IGNoYW4mbHQ7LSBpbnQsIHByaW1lIGludCkgewoJZm9yIGkgOj0gcmFuZ2Ugc3JjIHsgICAgLy8gTG9vcCBvdmVyIHZhbHVlcyByZWNlaXZlZCBmcm9tICdzcmMnLgoJCWlmIGklcHJpbWUgIT0gMCB7CgkJCWRzdCAmbHQ7LSBpICAvLyBTZW5kICdpJyB0byBjaGFubmVsICdkc3QnLgoJCX0KCX0KfQoKLy8gVGhlIHByaW1lIHNpZXZlOiBEYWlzeS1jaGFpbiBmaWx0ZXIgcHJvY2Vzc2VzIHRvZ2V0aGVyLgpmdW5jIHNpZXZlKCkgewoJY2ggOj0gbWFrZShjaGFuIGludCkgIC8vIENyZWF0ZSBhIG5ldyBjaGFubmVsLgoJZ28gZ2VuZXJhdGUoY2gpICAgICAgIC8vIFN0YXJ0IGdlbmVyYXRlKCkgYXMgYSBzdWJwcm9jZXNzLgoJZm9yIHsKCQlwcmltZSA6PSAmbHQ7LWNoCgkJZm10LlByaW50KHByaW1lLCAiXG4iKQoJCWNoMSA6PSBtYWtlKGNoYW4gaW50KQoJCWdvIGZpbHRlcihjaCwgY2gxLCBwcmltZSkKCQljaCA9IGNoMQoJfQp9CgpmdW5jIG1haW4oKSB7CglzaWV2ZSgpCn0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICB0aGVtZTogImVsZWdhbnQiLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgaW5kZW50VW5pdDogOCwKICAgICAgICB0YWJTaXplOiA4LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtZ28iCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGU6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1nbzwvY29kZT48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/groovy.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJncm9vdnkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIGZ1bmN0aW9uIHdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkcygKICAgICJhYnN0cmFjdCBhcyBhc3NlcnQgYm9vbGVhbiBicmVhayBieXRlIGNhc2UgY2F0Y2ggY2hhciBjbGFzcyBjb25zdCBjb250aW51ZSBkZWYgZGVmYXVsdCAiICsKICAgICJkbyBkb3VibGUgZWxzZSBlbnVtIGV4dGVuZHMgZmluYWwgZmluYWxseSBmbG9hdCBmb3IgZ290byBpZiBpbXBsZW1lbnRzIGltcG9ydCBpbiAiICsKICAgICJpbnN0YW5jZW9mIGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgbmV3IHBhY2thZ2UgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHJldHVybiAiICsKICAgICJzaG9ydCBzdGF0aWMgc3RyaWN0ZnAgc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0aHJlYWRzYWZlIHRocm93IHRocm93cyB0cmFuc2llbnQgIiArCiAgICAidHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKTsKICB2YXIgYmxvY2tLZXl3b3JkcyA9IHdvcmRzKCJjYXRjaCBjbGFzcyBkbyBlbHNlIGZpbmFsbHkgZm9yIGlmIHN3aXRjaCB0cnkgd2hpbGUgZW51bSBpbnRlcmZhY2UgZGVmIik7CiAgdmFyIGF0b21zID0gd29yZHMoIm51bGwgdHJ1ZSBmYWxzZSB0aGlzIik7CgogIHZhciBjdXJQdW5jOwogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgcmV0dXJuIHN0YXJ0U3RyaW5nKGNoLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkgewogICAgICBjdXJQdW5jID0gY2g7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgvZUUvKSkgeyBzdHJlYW0uZWF0KC9cK1wtLyk7IHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsgfQogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuQ29tbWVudCk7CiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0KICAgICAgaWYgKGV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgIHJldHVybiBzdGFydFN0cmluZyhjaCwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIGN1clB1bmMgPSAiLT4iOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICgvWytcLSomJT08PiE/fFwvfl0vLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWytcLSomJT08Pnx+XS8pOwogICAgICByZXR1cm4gIm9wZXJhdG9yIjsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgaWYgKGNoID09ICJAIikgeyBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX1wuXS8pOyByZXR1cm4gIm1ldGEiOyB9CiAgICBpZiAoc3RhdGUubGFzdFRva2VuID09ICIuIikgcmV0dXJuICJwcm9wZXJ0eSI7CiAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7IGN1clB1bmMgPSAicHJvcGxhYmVsIjsgcmV0dXJuICJwcm9wZXJ0eSI7IH0KICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpOwogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsgcmV0dXJuICJhdG9tIjsgfQogICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsKICAgICAgaWYgKGJsb2NrS2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoY3VyKSkgY3VyUHVuYyA9ICJuZXdzdGF0ZW1lbnQiOwogICAgICByZXR1cm4gImtleXdvcmQiOwogICAgfQogICAgcmV0dXJuICJ3b3JkIjsKICB9CiAgdG9rZW5CYXNlLmlzQmFzZSA9IHRydWU7CgogIGZ1bmN0aW9uIHN0YXJ0U3RyaW5nKHF1b3RlLCBzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgdHJpcGxlUXVvdGVkID0gZmFsc2U7CiAgICBpZiAocXVvdGUgIT0gIi8iICYmIHN0cmVhbS5lYXQocXVvdGUpKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KHF1b3RlKSkgdHJpcGxlUXVvdGVkID0gdHJ1ZTsKICAgICAgZWxzZSByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBmdW5jdGlvbiB0KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gIXRyaXBsZVF1b3RlZDsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBpZiAoIXRyaXBsZVF1b3RlZCkgeyBicmVhazsgfQogICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChxdW90ZSArIHF1b3RlKSkgeyBlbmQgPSB0cnVlOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICBpZiAocXVvdGUgPT0gJyInICYmIG5leHQgPT0gIiQiICYmICFlc2NhcGVkICYmIHN0cmVhbS5lYXQoInsiKSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucHVzaCh0b2tlbkJhc2VVbnRpbEJyYWNlKCkpOwogICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQpIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9CiAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHQpOwogICAgcmV0dXJuIHQoc3RyZWFtLCBzdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkJhc2VVbnRpbEJyYWNlKCkgewogICAgdmFyIGRlcHRoID0gMTsKICAgIGZ1bmN0aW9uIHQoc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnBlZWsoKSA9PSAifSIpIHsKICAgICAgICBkZXB0aC0tOwogICAgICAgIGlmIChkZXB0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT0gInsiKSB7CiAgICAgICAgZGVwdGgrKzsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgdC5pc0Jhc2UgPSB0cnVlOwogICAgcmV0dXJuIHQ7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiAiY29tbWVudCI7CiAgfQoKICBmdW5jdGlvbiBleHBlY3RFeHByZXNzaW9uKGxhc3QpIHsKICAgIHJldHVybiAhbGFzdCB8fCBsYXN0ID09ICJvcGVyYXRvciIgfHwgbGFzdCA9PSAiLT4iIHx8IC9bXC5cW1x7XCgsOzpdLy50ZXN0KGxhc3QpIHx8CiAgICAgIGxhc3QgPT0gIm5ld3N0YXRlbWVudCIgfHwgbGFzdCA9PSAia2V5d29yZCIgfHwgbGFzdCA9PSAicHJvcGxhYmVsIjsKICB9CgogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMuYWxpZ24gPSBhbGlnbjsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgIHZhciB0ID0gc3RhdGUuY29udGV4dC50eXBlOwogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQogICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmNvbnRleHQuaW5kZW50ZWQ7CiAgICByZXR1cm4gc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiBbdG9rZW5CYXNlXSwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGNvbmZpZy5pbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLAogICAgICAgIGluZGVudGVkOiAwLAogICAgICAgIHN0YXJ0T2ZMaW5lOiB0cnVlLAogICAgICAgIGxhc3RUb2tlbjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChjdHguYWxpZ24gPT0gbnVsbCkgY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgICAgLy8gQXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24KICAgICAgICBpZiAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIgJiYgIWV4cGVjdEV4cHJlc3Npb24oc3RhdGUubGFzdFRva2VuKSkgewogICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7IGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIGN1clB1bmMgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAvLyBIYW5kbGUgaW5kZW50YXRpb24gZm9yIHt4IC0+IFxuIC4uLiB9CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIi0+IiAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdHgucHJldi50eXBlID09ICJ9IikgewogICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgIHN0YXRlLmNvbnRleHQuYWxpZ24gPSBmYWxzZTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9IikgewogICAgICAgIHdoaWxlIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkKICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHN0YXRlLmxhc3RUb2tlbiA9IGN1clB1bmMgfHwgc3R5bGU7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmICghc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdLmlzQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgY3R4ID0gc3RhdGUuY29udGV4dDsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiICYmICFleHBlY3RFeHByZXNzaW9uKHN0YXRlLmxhc3RUb2tlbikpIGN0eCA9IGN0eC5wcmV2OwogICAgICB2YXIgY2xvc2luZyA9IGZpcnN0Q2hhciA9PSBjdHgudHlwZTsKICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZ3Jvb3Z5IiwgImdyb292eSIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/groovy/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEdyb292eSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iZ3Jvb3Z5LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICM1MDA7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjNTAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBHcm9vdnkgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovL1BhdHRlcm4gZm9yIGdyb292eSBzY3JpcHQKZGVmIHAgPSB+Ly4qXC5ncm9vdnkvCm5ldyBGaWxlKCAnZDpcXHNjcmlwdHMnICkuZWFjaEZpbGVNYXRjaChwKSB7ZiAtPgogIC8vIGltcG9ydHMgbGlzdAogIGRlZiBpbXBvcnRzID0gW10KICBmLmVhY2hMaW5lIHsKICAgIC8vIGNvbmRpdGlvbiB0byBkZXRlY3QgYW4gaW1wb3J0IGluc3RydWN0aW9uCiAgICBsbiAtPiBpZiAoIGxuID1+ICdeaW1wb3J0IC4qJyApIHsKICAgICAgaW1wb3J0cyA8PCAiJHtsbiAtICdpbXBvcnQgJ30iCiAgICB9CiAgfQogIC8vIHByaW50IHRobWVuCiAgaWYgKCAhIGltcG9ydHMuZW1wdHkgKSB7CiAgICBwcmludGxuIGYKICAgIGltcG9ydHMuZWFjaHsgcHJpbnRsbiAiICAgJGl0IiB9CiAgfQp9CgovKiBDb2luIGNoYW5nZXIgZGVtbyBjb2RlIGZyb20gaHR0cDovL2dyb292eS5jb2RlaGF1cy5vcmcgKi8KCmVudW0gVXNDb2luIHsKICBxdWFydGVyKDI1KSwgZGltZSgxMCksIG5pY2tlbCg1KSwgcGVubnkoMSkKICBVc0NvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmVudW0gT3p6aWVDb2luIHsKICBmaWZ0eSg1MCksIHR3ZW50eSgyMCksIHRlbigxMCksIGZpdmUoNSkKICBPenppZUNvaW4odikgeyB2YWx1ZSA9IHYgfQogIGZpbmFsIHZhbHVlCn0KCmRlZiBwbHVyYWwod29yZCwgY291bnQpIHsKICBpZiAoY291bnQgPT0gMSkgcmV0dXJuIHdvcmQKICB3b3JkWy0xXSA9PSAneScgPyB3b3JkWzAuLi0yXSArICJpZXMiIDogd29yZCArICJzIgp9CgpkZWYgY2hhbmdlKGN1cnJlbmN5LCBhbW91bnQpIHsKICBjdXJyZW5jeS52YWx1ZXMoKS5pbmplY3QoW10peyBsaXN0LCBjb2luIC0+CiAgICAgaW50IGNvdW50ID0gYW1vdW50IC8gY29pbi52YWx1ZQogICAgIGFtb3VudCA9IGFtb3VudCAlIGNvaW4udmFsdWUKICAgICBsaXN0ICs9ICIkY291bnQgJHtwbHVyYWwoY29pbi50b1N0cmluZygpLCBjb3VudCl9IgogIH0KfQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1ncm9vdnkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ncm9vdnk8L2NvZGU+PC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/haskell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJoYXNrZWxsIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHsKCiAgZnVuY3Rpb24gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgZikgewogICAgc2V0U3RhdGUoZik7CiAgICByZXR1cm4gZihzb3VyY2UsIHNldFN0YXRlKTsKICB9CiAgCiAgLy8gVGhlc2Ugc2hvdWxkIGFsbCBiZSBVbmljb2RlIGV4dGVuZGVkLCBhcyBwZXIgdGhlIEhhc2tlbGwgMjAxMCByZXBvcnQKICB2YXIgc21hbGxSRSA9IC9bYS16X10vOwogIHZhciBsYXJnZVJFID0gL1tBLVpdLzsKICB2YXIgZGlnaXRSRSA9IC9bMC05XS87CiAgdmFyIGhleGl0UkUgPSAvWzAtOUEtRmEtZl0vOwogIHZhciBvY3RpdFJFID0gL1swLTddLzsKICB2YXIgaWRSRSA9IC9bYS16X0EtWjAtOSddLzsKICB2YXIgc3ltYm9sUkUgPSAvWy0hIyQlJiorLlwvPD0+P0BcXF58fjpdLzsKICB2YXIgc3BlY2lhbFJFID0gL1soKSw7W1xdYHt9XS87CiAgdmFyIHdoaXRlQ2hhclJFID0gL1sgXHRcdlxmXS87IC8vIG5ld2xpbmVzIGFyZSBoYW5kbGVkIGluIHRva2VuaXplcgogICAgCiAgZnVuY3Rpb24gbm9ybWFsKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgIGlmIChzb3VyY2UuZWF0V2hpbGUod2hpdGVDaGFyUkUpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgICAKICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7CiAgICBpZiAoc3BlY2lhbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgdmFyIHQgPSAiY29tbWVudCI7CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyMnKSkgewogICAgICAgICAgdCA9ICJtZXRhIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIG5jb21tZW50KHQsIDEpKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgaWYgKGNoID09ICdcJycpIHsKICAgICAgaWYgKHNvdXJjZS5lYXQoJ1xcJykpIHsKICAgICAgICBzb3VyY2UubmV4dCgpOyAgLy8gc2hvdWxkIGhhbmRsZSBvdGhlciBlc2NhcGVzIGhlcmUKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzb3VyY2UubmV4dCgpOwogICAgICB9CiAgICAgIGlmIChzb3VyY2UuZWF0KCdcJycpKSB7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIHJldHVybiAiZXJyb3IiOwogICAgfQogICAgCiAgICBpZiAoY2ggPT0gJyInKSB7CiAgICAgIHJldHVybiBzd2l0Y2hTdGF0ZShzb3VyY2UsIHNldFN0YXRlLCBzdHJpbmdMaXRlcmFsKTsKICAgIH0KICAgICAgCiAgICBpZiAobGFyZ2VSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICByZXR1cm4gInF1YWxpZmllciI7CiAgICAgIH0KICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0KICAgICAgCiAgICBpZiAoc21hbGxSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgICAKICAgIGlmIChkaWdpdFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnMCcpIHsKICAgICAgICBpZiAoc291cmNlLmVhdCgvW3hYXS8pKSB7CiAgICAgICAgICBzb3VyY2UuZWF0V2hpbGUoaGV4aXRSRSk7IC8vIHNob3VsZCByZXF1aXJlIGF0IGxlYXN0IDEKICAgICAgICAgIHJldHVybiAiaW50ZWdlciI7CiAgICAgICAgfQogICAgICAgIGlmIChzb3VyY2UuZWF0KC9bb09dLykpIHsKICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShvY3RpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMQogICAgICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgICAgIH0KICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoZGlnaXRSRSk7CiAgICAgIHZhciB0ID0gIm51bWJlciI7CiAgICAgIGlmIChzb3VyY2UuZWF0KCcuJykpIHsKICAgICAgICB0ID0gIm51bWJlciI7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgaWYgKHNvdXJjZS5lYXQoL1tlRV0vKSkgewogICAgICAgIHQgPSAibnVtYmVyIjsKICAgICAgICBzb3VyY2UuZWF0KC9bLStdLyk7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgcmV0dXJuIHQ7CiAgICB9CiAgICAgIAogICAgaWYgKHN5bWJvbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgvLS8pKSB7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKC8tLyk7CiAgICAgICAgaWYgKCFzb3VyY2UuZWF0KHN5bWJvbFJFKSkgewogICAgICAgICAgc291cmNlLnNraXBUb0VuZCgpOwogICAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHQgPSAidmFyaWFibGUiOwogICAgICBpZiAoY2ggPT0gJzonKSB7CiAgICAgICAgdCA9ICJ2YXJpYWJsZS0yIjsKICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoc3ltYm9sUkUpOwogICAgICByZXR1cm4gdDsgICAgCiAgICB9CiAgICAgIAogICAgcmV0dXJuICJlcnJvciI7CiAgfQogICAgCiAgZnVuY3Rpb24gbmNvbW1lbnQodHlwZSwgbmVzdCkgewogICAgaWYgKG5lc3QgPT0gMCkgewogICAgICByZXR1cm4gbm9ybWFsOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgICAgdmFyIGN1cnJOZXN0ID0gbmVzdDsKICAgICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgICB2YXIgY2ggPSBzb3VyY2UubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgICArK2N1cnJOZXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgnfScpKSB7CiAgICAgICAgICAtLWN1cnJOZXN0OwogICAgICAgICAgaWYgKGN1cnJOZXN0ID09IDApIHsKICAgICAgICAgICAgc2V0U3RhdGUobm9ybWFsKTsKICAgICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldFN0YXRlKG5jb21tZW50KHR5cGUsIGN1cnJOZXN0KSk7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogIH0KICAgIAogIGZ1bmN0aW9uIHN0cmluZ0xpdGVyYWwoc291cmNlLCBzZXRTdGF0ZSkgewogICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgdmFyIGNoID0gc291cmNlLm5leHQoKTsKICAgICAgaWYgKGNoID09ICciJykgewogICAgICAgIHNldFN0YXRlKG5vcm1hbCk7CiAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICB9CiAgICAgIGlmIChjaCA9PSAnXFwnKSB7CiAgICAgICAgaWYgKHNvdXJjZS5lb2woKSB8fCBzb3VyY2UuZWF0KHdoaXRlQ2hhclJFKSkgewogICAgICAgICAgc2V0U3RhdGUoc3RyaW5nR2FwKTsKICAgICAgICAgIHJldHVybiAic3RyaW5nIjsKICAgICAgICB9CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyYnKSkgewogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNvdXJjZS5uZXh0KCk7IC8vIHNob3VsZCBoYW5kbGUgb3RoZXIgZXNjYXBlcyBoZXJlCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzZXRTdGF0ZShub3JtYWwpOwogICAgcmV0dXJuICJlcnJvciI7CiAgfQogIAogIGZ1bmN0aW9uIHN0cmluZ0dhcChzb3VyY2UsIHNldFN0YXRlKSB7CiAgICBpZiAoc291cmNlLmVhdCgnXFwnKSkgewogICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgc3RyaW5nTGl0ZXJhbCk7CiAgICB9CiAgICBzb3VyY2UubmV4dCgpOwogICAgc2V0U3RhdGUobm9ybWFsKTsKICAgIHJldHVybiAiZXJyb3IiOwogIH0KICAKICAKICB2YXIgd2VsbEtub3duV29yZHMgPSAoZnVuY3Rpb24oKSB7CiAgICB2YXIgd2t3ID0ge307CiAgICBmdW5jdGlvbiBzZXRUeXBlKHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKICAgICAgICAgIHdrd1thcmd1bWVudHNbaV1dID0gdDsKICAgICAgfQogICAgfQogICAgCiAgICBzZXRUeXBlKCJrZXl3b3JkIikoCiAgICAgICJjYXNlIiwgImNsYXNzIiwgImRhdGEiLCAiZGVmYXVsdCIsICJkZXJpdmluZyIsICJkbyIsICJlbHNlIiwgImZvcmVpZ24iLAogICAgICAiaWYiLCAiaW1wb3J0IiwgImluIiwgImluZml4IiwgImluZml4bCIsICJpbmZpeHIiLCAiaW5zdGFuY2UiLCAibGV0IiwKICAgICAgIm1vZHVsZSIsICJuZXd0eXBlIiwgIm9mIiwgInRoZW4iLCAidHlwZSIsICJ3aGVyZSIsICJfIik7CiAgICAgIAogICAgc2V0VHlwZSgia2V5d29yZCIpKAogICAgICAiXC5cLiIsICI6IiwgIjo6IiwgIj0iLCAiXFwiLCAiXCIiLCAiPC0iLCAiLT4iLCAiQCIsICJ+IiwgIj0+Iik7CiAgICAgIAogICAgc2V0VHlwZSgiYnVpbHRpbiIpKAogICAgICAiISEiLCAiJCEiLCAiJCIsICImJiIsICIrIiwgIisrIiwgIi0iLCAiLiIsICIvIiwgIi89IiwgIjwiLCAiPD0iLCAiPTw8IiwKICAgICAgIj09IiwgIj4iLCAiPj0iLCAiPj4iLCAiPj49IiwgIl4iLCAiXl4iLCAifHwiLCAiKiIsICIqKiIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgIkJvb2wiLCAiQm91bmRlZCIsICJDaGFyIiwgIkRvdWJsZSIsICJFUSIsICJFaXRoZXIiLCAiRW51bSIsICJFcSIsCiAgICAgICJGYWxzZSIsICJGaWxlUGF0aCIsICJGbG9hdCIsICJGbG9hdGluZyIsICJGcmFjdGlvbmFsIiwgIkZ1bmN0b3IiLCAiR1QiLAogICAgICAiSU8iLCAiSU9FcnJvciIsICJJbnQiLCAiSW50ZWdlciIsICJJbnRlZ3JhbCIsICJKdXN0IiwgIkxUIiwgIkxlZnQiLAogICAgICAiTWF5YmUiLCAiTW9uYWQiLCAiTm90aGluZyIsICJOdW0iLCAiT3JkIiwgIk9yZGVyaW5nIiwgIlJhdGlvbmFsIiwgIlJlYWQiLAogICAgICAiUmVhZFMiLCAiUmVhbCIsICJSZWFsRmxvYXQiLCAiUmVhbEZyYWMiLCAiUmlnaHQiLCAiU2hvdyIsICJTaG93UyIsCiAgICAgICJTdHJpbmciLCAiVHJ1ZSIpOwogICAgICAKICAgIHNldFR5cGUoImJ1aWx0aW4iKSgKICAgICAgImFicyIsICJhY29zIiwgImFjb3NoIiwgImFsbCIsICJhbmQiLCAiYW55IiwgImFwcGVuZEZpbGUiLCAiYXNUeXBlT2YiLAogICAgICAiYXNpbiIsICJhc2luaCIsICJhdGFuIiwgImF0YW4yIiwgImF0YW5oIiwgImJyZWFrIiwgImNhdGNoIiwgImNlaWxpbmciLAogICAgICAiY29tcGFyZSIsICJjb25jYXQiLCAiY29uY2F0TWFwIiwgImNvbnN0IiwgImNvcyIsICJjb3NoIiwgImN1cnJ5IiwKICAgICAgImN5Y2xlIiwgImRlY29kZUZsb2F0IiwgImRpdiIsICJkaXZNb2QiLCAiZHJvcCIsICJkcm9wV2hpbGUiLCAiZWl0aGVyIiwKICAgICAgImVsZW0iLCAiZW5jb2RlRmxvYXQiLCAiZW51bUZyb20iLCAiZW51bUZyb21UaGVuIiwgImVudW1Gcm9tVGhlblRvIiwKICAgICAgImVudW1Gcm9tVG8iLCAiZXJyb3IiLCAiZXZlbiIsICJleHAiLCAiZXhwb25lbnQiLCAiZmFpbCIsICJmaWx0ZXIiLAogICAgICAiZmxpcCIsICJmbG9hdERpZ2l0cyIsICJmbG9hdFJhZGl4IiwgImZsb2F0UmFuZ2UiLCAiZmxvb3IiLCAiZm1hcCIsCiAgICAgICJmb2xkbCIsICJmb2xkbDEiLCAiZm9sZHIiLCAiZm9sZHIxIiwgImZyb21FbnVtIiwgImZyb21JbnRlZ2VyIiwKICAgICAgImZyb21JbnRlZ3JhbCIsICJmcm9tUmF0aW9uYWwiLCAiZnN0IiwgImdjZCIsICJnZXRDaGFyIiwgImdldENvbnRlbnRzIiwKICAgICAgImdldExpbmUiLCAiaGVhZCIsICJpZCIsICJpbml0IiwgImludGVyYWN0IiwgImlvRXJyb3IiLCAiaXNEZW5vcm1hbGl6ZWQiLAogICAgICAiaXNJRUVFIiwgImlzSW5maW5pdGUiLCAiaXNOYU4iLCAiaXNOZWdhdGl2ZVplcm8iLCAiaXRlcmF0ZSIsICJsYXN0IiwKICAgICAgImxjbSIsICJsZW5ndGgiLCAibGV4IiwgImxpbmVzIiwgImxvZyIsICJsb2dCYXNlIiwgImxvb2t1cCIsICJtYXAiLAogICAgICAibWFwTSIsICJtYXBNXyIsICJtYXgiLCAibWF4Qm91bmQiLCAibWF4aW11bSIsICJtYXliZSIsICJtaW4iLCAibWluQm91bmQiLAogICAgICAibWluaW11bSIsICJtb2QiLCAibmVnYXRlIiwgIm5vdCIsICJub3RFbGVtIiwgIm51bGwiLCAib2RkIiwgIm9yIiwKICAgICAgIm90aGVyd2lzZSIsICJwaSIsICJwcmVkIiwgInByaW50IiwgInByb2R1Y3QiLCAicHJvcGVyRnJhY3Rpb24iLAogICAgICAicHV0Q2hhciIsICJwdXRTdHIiLCAicHV0U3RyTG4iLCAicXVvdCIsICJxdW90UmVtIiwgInJlYWQiLCAicmVhZEZpbGUiLAogICAgICAicmVhZElPIiwgInJlYWRMaXN0IiwgInJlYWRMbiIsICJyZWFkUGFyZW4iLCAicmVhZHMiLCAicmVhZHNQcmVjIiwKICAgICAgInJlYWxUb0ZyYWMiLCAicmVjaXAiLCAicmVtIiwgInJlcGVhdCIsICJyZXBsaWNhdGUiLCAicmV0dXJuIiwgInJldmVyc2UiLAogICAgICAicm91bmQiLCAic2NhbGVGbG9hdCIsICJzY2FubCIsICJzY2FubDEiLCAic2NhbnIiLCAic2NhbnIxIiwgInNlcSIsCiAgICAgICJzZXF1ZW5jZSIsICJzZXF1ZW5jZV8iLCAic2hvdyIsICJzaG93Q2hhciIsICJzaG93TGlzdCIsICJzaG93UGFyZW4iLAogICAgICAic2hvd1N0cmluZyIsICJzaG93cyIsICJzaG93c1ByZWMiLCAic2lnbmlmaWNhbmQiLCAic2lnbnVtIiwgInNpbiIsCiAgICAgICJzaW5oIiwgInNuZCIsICJzcGFuIiwgInNwbGl0QXQiLCAic3FydCIsICJzdWJ0cmFjdCIsICJzdWNjIiwgInN1bSIsCiAgICAgICJ0YWlsIiwgInRha2UiLCAidGFrZVdoaWxlIiwgInRhbiIsICJ0YW5oIiwgInRvRW51bSIsICJ0b0ludGVnZXIiLAogICAgICAidG9SYXRpb25hbCIsICJ0cnVuY2F0ZSIsICJ1bmN1cnJ5IiwgInVuZGVmaW5lZCIsICJ1bmxpbmVzIiwgInVudGlsIiwKICAgICAgInVud29yZHMiLCAidW56aXAiLCAidW56aXAzIiwgInVzZXJFcnJvciIsICJ3b3JkcyIsICJ3cml0ZUZpbGUiLCAiemlwIiwKICAgICAgInppcDMiLCAiemlwV2l0aCIsICJ6aXBXaXRoMyIpOwogICAgICAKICAgIHJldHVybiB3a3c7CiAgfSkoKTsKICAgIAogIAogIAogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSAgeyByZXR1cm4geyBmOiBub3JtYWwgfTsgfSwKICAgIGNvcHlTdGF0ZTogIGZ1bmN0aW9uIChzKSB7IHJldHVybiB7IGY6IHMuZiB9OyB9LAogICAgCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgdCA9IHN0YXRlLmYoc3RyZWFtLCBmdW5jdGlvbihzKSB7IHN0YXRlLmYgPSBzOyB9KTsKICAgICAgdmFyIHcgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICByZXR1cm4gKHcgaW4gd2VsbEtub3duV29yZHMpID8gd2VsbEtub3duV29yZHNbd10gOiB0OwogICAgfQogIH07Cgp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWhhc2tlbGwiLCAiaGFza2VsbCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhhc2tlbGwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imhhc2tlbGwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9lbGVnYW50LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogSGFza2VsbCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Cm1vZHVsZSBVbmlxdWVQZXJtcyAoCiAgICB1bmlxdWVQZXJtcwogICAgKQp3aGVyZQoKLS0gfCBGaW5kIGFsbCB1bmlxdWUgcGVybXV0YXRpb25zIG9mIGEgbGlzdCB3aGVyZSB0aGVyZSBtaWdodCBiZSBkdXBsaWNhdGVzLgp1bmlxdWVQZXJtcyA6OiAoRXEgYSkgPT4gW2FdIC0+IFtbYV1dCnVuaXF1ZVBlcm1zID0gcGVybUJhZyAuIG1ha2VCYWcKCi0tIHwgQW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gd2hlcmUgZHVwbGljYXRlIHZhbHVlcyBhcmUgYWxsb3dlZCwKLS0gYnV0IHJlcHJlc2VudGVkIHdpdGggYSBzaW5nbGUgdmFsdWUgYW5kIGEgY291bnQuCnR5cGUgQmFnIGEgPSBbKGEsIEludCldCgptYWtlQmFnIDo6IChFcSBhKSA9PiBbYV0gLT4gQmFnIGEKbWFrZUJhZyBbXSA9IFtdCm1ha2VCYWcgKGE6YXMpID0gbWl4IGEgJCBtYWtlQmFnIGFzCiAgd2hlcmUKICAgIG1peCBhIFtdICAgICAgICAgICAgICAgICAgICAgICAgPSBbKGEsMSldCiAgICBtaXggYSAoYm5AKGIsbik6YnMpIHwgYSA9PSBiICAgID0gKGIsbisxKTpicwogICAgICAgICAgICAgICAgICAgICAgICB8IG90aGVyd2lzZSA9IGJuIDogbWl4IGEgYnMKCnBlcm1CYWcgOjogQmFnIGEgLT4gW1thXV0KcGVybUJhZyBbXSA9IFtbXV0KcGVybUJhZyBicyA9IGNvbmNhdE1hcCAoXChmLGNzKSAtPiBtYXAgKGY6KSAkIHBlcm1CYWcgY3MpIC4gb25lT2ZFYWNoICQgYnMKICB3aGVyZQogICAgb25lT2ZFYWNoIFtdID0gW10KICAgIG9uZU9mRWFjaCAoYW5AKGEsbik6YnMpID0KICAgICAgICBsZXQgYnMnID0gaWYgbiA9PSAxIHRoZW4gYnMgZWxzZSAoYSxuLTEpOmJzCiAgICAgICAgaW4gKGEsYnMnKSA6IG1hcFNuZCAoYW46KSAob25lT2ZFYWNoIGJzKQogICAgCiAgICBhcFNuZCBmIChhLGIpID0gKGEsIGYgYikKICAgIG1hcFNuZCA9IG1hcCAuIGFwU25kCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImVsZWdhbnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1oYXNrZWxsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/htmlembedded.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sZW1iZWRkZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIAogIC8vY29uZmlnIHNldHRpbmdzCiAgdmFyIHNjcmlwdFN0YXJ0UmVnZXggPSBwYXJzZXJDb25maWcuc2NyaXB0U3RhcnRSZWdleCB8fCAvXjwlL2ksCiAgICAgIHNjcmlwdEVuZFJlZ2V4ID0gcGFyc2VyQ29uZmlnLnNjcmlwdEVuZFJlZ2V4IHx8IC9eJT4vaTsKICAKICAvL2lubmVyIG1vZGVzCiAgdmFyIHNjcmlwdGluZ01vZGUsIGh0bWxNaXhlZE1vZGU7CiAgCiAgLy90b2tlbml6ZXIgd2hlbiBpbiBodG1sIG1vZGUKICBmdW5jdGlvbiBodG1sRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdFN0YXJ0UmVnZXgsIGZhbHNlKSkgewogICAgICAgICAgc3RhdGUudG9rZW49c2NyaXB0aW5nRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLnNjcmlwdFN0YXRlKTsKICAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGh0bWxNaXhlZE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgfQoKICAvL3Rva2VuaXplciB3aGVuIGluIHNjcmlwdGluZyBtb2RlCiAgZnVuY3Rpb24gc2NyaXB0aW5nRGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKHNjcmlwdEVuZFJlZ2V4LCBmYWxzZSkpICB7CiAgICAgICAgICBzdGF0ZS50b2tlbj1odG1sRGlzcGF0Y2g7CiAgICAgICAgICByZXR1cm4gaHRtbE1peGVkTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICAgICAgIH0KICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHNjcmlwdGluZ01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5zY3JpcHRTdGF0ZSk7CiAgICAgICAgIH0KCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgc2NyaXB0aW5nTW9kZSA9IHNjcmlwdGluZ01vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLnNjcmlwdGluZ01vZGVTcGVjKTsKICAgICAgaHRtbE1peGVkTW9kZSA9IGh0bWxNaXhlZE1vZGUgfHwgQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImh0bWxtaXhlZCIpOwogICAgICByZXR1cm4geyAKICAgICAgICAgIHRva2VuIDogIHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBzY3JpcHRpbmdEaXNwYXRjaCA6IGh0bWxEaXNwYXRjaCwKICAgICAgICAgIGh0bWxTdGF0ZSA6IGh0bWxNaXhlZE1vZGUuc3RhcnRTdGF0ZSgpLAogICAgICAgICAgc2NyaXB0U3RhdGUgOiBzY3JpcHRpbmdNb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgfQogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW4gPT0gaHRtbERpc3BhdGNoKQogICAgICAgIHJldHVybiBodG1sTWl4ZWRNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gc2NyaXB0aW5nTW9kZS5pbmRlbnQoc3RhdGUuc2NyaXB0U3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAogICAgCiAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgIHJldHVybiB7CiAgICAgICB0b2tlbiA6IHN0YXRlLnRva2VuLAogICAgICAgaHRtbFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1peGVkTW9kZSwgc3RhdGUuaHRtbFN0YXRlKSwKICAgICAgIHNjcmlwdFN0YXRlIDogQ29kZU1pcnJvci5jb3B5U3RhdGUoc2NyaXB0aW5nTW9kZSwgc3RhdGUuc2NyaXB0U3RhdGUpCiAgICAgICB9CiAgICB9LAogICAgCgogICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgfQp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1lanMiLCB7IG5hbWU6ICJodG1sZW1iZWRkZWQiLCBzY3JpcHRpbmdNb2RlU3BlYzoiamF2YXNjcmlwdCJ9KTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWFzcHgiLCB7IG5hbWU6ICJodG1sZW1iZWRkZWQiLCBzY3JpcHRpbmdNb2RlU3BlYzoidGV4dC94LWNzaGFycCJ9KTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWpzcCIsIHsgbmFtZTogImh0bWxlbWJlZGRlZCIsIHNjcmlwdGluZ01vZGVTcGVjOiJ0ZXh0L3gtamF2YSJ9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlembedded/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodG1sZW1iZWRkZWQuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEh0bWwgRW1iZWRkZWQgU2NyaXB0cyBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CjwlCmZ1bmN0aW9uIGhlbGxvKHdobykgewoJcmV0dXJuICJIZWxsbyAiICsgd2hvOwp9CiU+ClRoaXMgaXMgYW4gZXhhbXBsZSBvZiBFSlMgKGVtYmVkZGVkIGphdmFzY3JpcHQpCjxwPlRoZSBwcm9ncmFtIHNheXMgPCU9IGhlbGxvKCJ3b3JsZCIpICU+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIG5vcm1hbCBKUyBjb2RlIik7IC8vIGFsc28gY29sb3JlZAo8L3NjcmlwdD4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJhcHBsaWNhdGlvbi94LWVqcyIsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBpbmRlbnRXaXRoVGFiczogdHJ1ZSwKICAgICAgICBlbnRlck1vZGU6ICJrZWVwIiwKICAgICAgICB0YWJNb2RlOiAic2hpZnQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TW9kZSBmb3IgaHRtbCBlbWJlZGRlZCBzY3JpcHRzIGxpa2UgSlNQIGFuZCBBU1AuTkVULiBEZXBlbmRzIG9uIEh0bWxNaXhlZCB3aGljaCBpbiB0dXJuIGRlcGVuZHMgb24KICAgIEphdmFTY3JpcHQsIENTUyBhbmQgWE1MLjxiciAvPk90aGVyIGRlcGVuZGFuY2llcyBpbmNsdWRlIHRob3NlIG9mIHRoZSBzY3JpcGluZyBsYW5ndWFnZSBjaG9zZW4uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94LWFzcHg8L2NvZGU+IChBU1AuTkVUKSwgCiAgICA8Y29kZT5hcHBsaWNhdGlvbi94LWVqczwvY29kZT4gKEVtYmVkZGVkIEphdmFzY3JpcHQpLCA8Y29kZT5hcHBsaWNhdGlvbi94LWpzcDwvY29kZT4gKEphdmFTZXJ2ZXIgUGFnZXMpPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/htmlmixed.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImphdmFzY3JpcHQiKTsKICB2YXIgY3NzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJjc3MiKTsKCiAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICBpZiAoc3R5bGUgPT0gInRhZyIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQpIHsKICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGphdmFzY3JpcHQ7CiAgICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJqYXZhc2NyaXB0IjsKICAgICAgfQogICAgICBlbHNlIGlmICgvXnN0eWxlJC9pLnRlc3Qoc3RhdGUuaHRtbFN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbiA9IGNzczsKICAgICAgICBzdGF0ZS5sb2NhbFN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5odG1sU3RhdGUsICIiKSk7CiAgICAgICAgc3RhdGUubW9kZSA9ICJjc3MiOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3R5bGU7CiAgfQogIGZ1bmN0aW9uIG1heWJlQmFja3VwKHN0cmVhbSwgcGF0LCBzdHlsZSkgewogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICB2YXIgY2xvc2UgPSBjdXIuc2VhcmNoKHBhdCk7CiAgICBpZiAoY2xvc2UgPiAtMSkgc3RyZWFtLmJhY2tVcChjdXIubGVuZ3RoIC0gY2xvc2UpOwogICAgcmV0dXJuIHN0eWxlOwogIH0KICBmdW5jdGlvbiBqYXZhc2NyaXB0KHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0ubWF0Y2goL148XC9ccypzY3JpcHRccyo+L2ksIGZhbHNlKSkgewogICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7CiAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwogICAgICBzdGF0ZS5tb2RlID0gImh0bWwiOwogICAgICByZXR1cm4gaHRtbChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzY3JpcHRccyo+LywKICAgICAgICAgICAgICAgICAgICAgICBqc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKSk7CiAgfQogIGZ1bmN0aW9uIGNzcyhzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFwvXHMqc3R5bGVccyo+L2ksIGZhbHNlKSkgewogICAgICBzdGF0ZS50b2tlbiA9IGh0bWw7CiAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBudWxsOwogICAgICBzdGF0ZS5tb2RlID0gImh0bWwiOwogICAgICByZXR1cm4gaHRtbChzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIHJldHVybiBtYXliZUJhY2t1cChzdHJlYW0sIC88XC9ccypzdHlsZVxzKj4vLAogICAgICAgICAgICAgICAgICAgICAgIGNzc01vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5sb2NhbFN0YXRlKSk7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHZhciBzdGF0ZSA9IGh0bWxNb2RlLnN0YXJ0U3RhdGUoKTsKICAgICAgcmV0dXJuIHt0b2tlbjogaHRtbCwgbG9jYWxTdGF0ZTogbnVsbCwgbW9kZTogImh0bWwiLCBodG1sU3RhdGU6IHN0YXRlfTsKICAgIH0sCgogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICBpZiAoc3RhdGUubG9jYWxTdGF0ZSkKICAgICAgICB2YXIgbG9jYWwgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS50b2tlbiA9PSBjc3MgPyBjc3NNb2RlIDoganNNb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKTsKICAgICAgcmV0dXJuIHt0b2tlbjogc3RhdGUudG9rZW4sIGxvY2FsU3RhdGU6IGxvY2FsLCBtb2RlOiBzdGF0ZS5tb2RlLAogICAgICAgICAgICAgIGh0bWxTdGF0ZTogQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIHN0YXRlLmh0bWxTdGF0ZSl9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICByZXR1cm4gc3RhdGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW4gPT0gaHRtbCB8fCAvXlxzKjxcLy8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PSBqYXZhc2NyaXB0KQogICAgICAgIHJldHVybiBqc01vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gY3NzTW9kZS5pbmRlbnQoc3RhdGUubG9jYWxTdGF0ZSwgdGV4dEFmdGVyKTsKICAgIH0sCgogICAgY29tcGFyZVN0YXRlczogZnVuY3Rpb24oYSwgYikgewogICAgICByZXR1cm4gaHRtbE1vZGUuY29tcGFyZVN0YXRlcyhhLmh0bWxTdGF0ZSwgYi5odG1sU3RhdGUpOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiL3t9OiIKICB9Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2h0bWwiLCAiaHRtbG1peGVkIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHRtbG1peGVkLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEhUTUwgbWl4ZWQgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIj4KICA8IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tPgogIDxoZWFkPgogICAgPHRpdGxlPk1peGVkIEhUTUwgRXhhbXBsZTwvdGl0bGU+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICBoMSB7Zm9udC1mYW1pbHk6IGNvbWljIHNhbnM7IGNvbG9yOiAjZjBmO30KICAgICAgZGl2IHtiYWNrZ3JvdW5kOiB5ZWxsb3cgIWltcG9ydGFudDt9CiAgICAgIGJvZHkgewogICAgICAgIG1heC13aWR0aDogNTBlbTsKICAgICAgICBtYXJnaW46IDFlbSAyZW0gMWVtIDVlbTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+TWl4ZWQgSFRNTCBFeGFtcGxlPC9oMT4KICAgIDxzY3JpcHQ+CiAgICAgIGZ1bmN0aW9uIGpzRnVuYyhhcmcxLCBhcmcyKSB7CiAgICAgICAgaWYgKGFyZzEgJiYgYXJnMikgZG9jdW1lbnQuYm9keS5pbm5lckhUTUwgPSAiYWNob28iOwogICAgICB9CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6ICJ0ZXh0L2h0bWwiLCB0YWJNb2RlOiAiaW5kZW50In0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+VGhlIEhUTUwgbWl4ZWQgbW9kZSBkZXBlbmRzIG9uIHRoZSBYTUwsIEphdmFTY3JpcHQsIGFuZCBDU1MgbW9kZXMuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+CiAgICAocmVkZWZpbmVkLCBvbmx5IHRha2VzIGVmZmVjdCBpZiB5b3UgbG9hZCB0aGlzIHBhcnNlciBhZnRlciB0aGUKICAgIFhNTCBwYXJzZXIpLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9ImphdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IEphdmFTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZSAodGhlIGFjdHVhbCBuZXcgcGFyc2VyIGNoYXJhY3RlciBzdHJlYW0gaW1wbGVtZW50YXRpb24pCgpmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nKSB7CiAgdGhpcy5wb3MgPSAwOwogIHRoaXMuc3RyaW5nID0gc3RyaW5nOwp9CgpTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogIGRvbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMucG9zICZsdDsgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogIH0sCiAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgZWxzZSB2YXIgb2sgPSBjaCAmYW1wOyZhbXA7IG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKTsKICAgIGlmIChvaykge3RoaXMucG9zKys7IHJldHVybiBjaDt9CiAgfSwKICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSk7CiAgICBpZiAodGhpcy5wb3MgPiBzdGFydCkgcmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHN0YXJ0LCB0aGlzLnBvcyk7CiAgfSwKICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3M7fSwKICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgIHdoaWxlICgvXHMvLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHRoaXMucG9zKys7CiAgICByZXR1cm4gdGhpcy5wb3MgLSBzdGFydDsKICB9LAogIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2YoY2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgewogICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gc3RyLmxlbmd0aDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgaWYgKG1hdGNoICZhbXA7JmFtcDsgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgcmV0dXJuIG1hdGNoOwogICAgfQogIH0KfTsKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5KYXZhU2NyaXB0IG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbgogICAgb3B0aW9uLCA8Y29kZT5qc29uPC9jb2RlPiwgd2hpY2ggd2lsbCBzZXQgdGhlIG1vZGUgdG8gZXhwZWN0IEpTT04KICAgIGRhdGEgcmF0aGVyIHRoYW4gYSBKYXZhU2NyaXB0IHByb2dyYW0uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2phdmFzY3JpcHQ8L2NvZGU+LCA8Y29kZT5hcHBsaWNhdGlvbi9qc29uPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwoKICAvLyBUb2tlbml6ZXIKCiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXsKICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAia2V5d29yZCJ9O30KICAgIHZhciBBID0ga3coImtleXdvcmQgYSIpLCBCID0ga3coImtleXdvcmQgYiIpLCBDID0ga3coImtleXdvcmQgYyIpOwogICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiksIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifTsKICAgIHJldHVybiB7CiAgICAgICJpZiI6IEEsICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBCLAogICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAidmFyIjoga3coInZhciIpLCAiY29uc3QiOiBrdygidmFyIiksICJsZXQiOiBrdygidmFyIiksCiAgICAgICJmdW5jdGlvbiI6IGt3KCJmdW5jdGlvbiIpLCAiY2F0Y2giOiBrdygiY2F0Y2giKSwKICAgICAgImZvciI6IGt3KCJmb3IiKSwgInN3aXRjaCI6IGt3KCJzd2l0Y2giKSwgImNhc2UiOiBrdygiY2FzZSIpLCAiZGVmYXVsdCI6IGt3KCJkZWZhdWx0IiksCiAgICAgICJpbiI6IG9wZXJhdG9yLCAidHlwZW9mIjogb3BlcmF0b3IsICJpbnN0YW5jZW9mIjogb3BlcmF0b3IsCiAgICAgICJ0cnVlIjogYXRvbSwgImZhbHNlIjogYXRvbSwgIm51bGwiOiBhdG9tLCAidW5kZWZpbmVkIjogYXRvbSwgIk5hTiI6IGF0b20sICJJbmZpbml0eSI6IGF0b20KICAgIH07CiAgfSgpOwoKICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fF0vOwoKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sIGVuZCkgewogICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dDsKICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgIH0KICAgIHJldHVybiBlc2NhcGVkOwogIH0KCiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlcyB0byBjb21tdW5pY2F0ZSBtdWx0aXBsZSB2YWx1ZXMgd2l0aG91dAogIC8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgogIHZhciB0eXBlLCBjb250ZW50OwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUsIGNvbnQpIHsKICAgIHR5cGUgPSB0cDsgY29udGVudCA9IGNvbnQ7CiAgICByZXR1cm4gc3R5bGU7CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuU3RyaW5nKGNoKSk7CiAgICBlbHNlIGlmICgvW1xbXF17fVwoXCksO1w6XC5dLy50ZXN0KGNoKSkKICAgICAgcmV0dXJuIHJldChjaCk7CiAgICBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgveC9pKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZl0vaSk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJudW1iZXIiKTsKICAgIH0gICAgICAKICAgIGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXGQqKD86XC5cZCopPyg/OltlRV1bK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuQ29tbWVudCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLnJlQWxsb3dlZCkgewogICAgICAgIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3kiIG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgInN0cmluZy0yIik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsIG51bGwsIHN0cmVhbS5jdXJyZW50KCkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiIyIpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIHJldCgiZXJyb3IiLCAiZXJyb3IiKTsKICAgIH0KICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgbnVsbCwgc3RyZWFtLmN1cnJlbnQoKSk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSAmJiBrZXl3b3Jkc1t3b3JkXTsKICAgICAgcmV0dXJuIChrbm93biAmJiBzdGF0ZS5rd0FsbG93ZWQpID8gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKSA6CiAgICAgICAgICAgICAgICAgICAgIHJldCgidmFyaWFibGUiLCAidmFyaWFibGUiLCB3b3JkKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGpzVG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmICghbmV4dFVudGlsVW5lc2NhcGVkKHN0cmVhbSwgcXVvdGUpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBqc1Rva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGpzVG9rZW5CYXNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgImNvbW1lbnQiKTsKICB9CgogIC8vIFBhcnNlcgoKICB2YXIgYXRvbWljVHlwZXMgPSB7ImF0b20iOiB0cnVlLCAibnVtYmVyIjogdHJ1ZSwgInZhcmlhYmxlIjogdHJ1ZSwgInN0cmluZyI6IHRydWUsICJyZWdleHAiOiB0cnVlfTsKCiAgZnVuY3Rpb24gSlNMZXhpY2FsKGluZGVudGVkLCBjb2x1bW4sIHR5cGUsIGFsaWduLCBwcmV2LCBpbmZvKSB7CiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7CiAgICB0aGlzLmNvbHVtbiA9IGNvbHVtbjsKICAgIHRoaXMudHlwZSA9IHR5cGU7CiAgICB0aGlzLnByZXYgPSBwcmV2OwogICAgdGhpcy5pbmZvID0gaW5mbzsKICAgIGlmIChhbGlnbiAhPSBudWxsKSB0aGlzLmFsaWduID0gYWxpZ247CiAgfQoKICBmdW5jdGlvbiBpblNjb3BlKHN0YXRlLCB2YXJuYW1lKSB7CiAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KQogICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gcGFyc2VKUyhzdGF0ZSwgc3R5bGUsIHR5cGUsIGNvbnRlbnQsIHN0cmVhbSkgewogICAgdmFyIGNjID0gc3RhdGUuY2M7CiAgICAvLyBDb21tdW5pY2F0ZSBvdXIgY29udGV4dCB0byB0aGUgY29tYmluYXRvcnMuCiAgICAvLyAoTGVzcyB3YXN0ZWZ1bCB0aGFuIGNvbnNpbmcgdXAgYSBodW5kcmVkIGNsb3N1cmVzIG9uIGV2ZXJ5IGNhbGwuKQogICAgY3guc3RhdGUgPSBzdGF0ZTsgY3guc3RyZWFtID0gc3RyZWFtOyBjeC5tYXJrZWQgPSBudWxsLCBjeC5jYyA9IGNjOwogIAogICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICBzdGF0ZS5sZXhpY2FsLmFsaWduID0gdHJ1ZTsKCiAgICB3aGlsZSh0cnVlKSB7CiAgICAgIHZhciBjb21iaW5hdG9yID0gY2MubGVuZ3RoID8gY2MucG9wKCkgOiBqc29uTW9kZSA/IGV4cHJlc3Npb24gOiBzdGF0ZW1lbnQ7CiAgICAgIGlmIChjb21iaW5hdG9yKHR5cGUsIGNvbnRlbnQpKSB7CiAgICAgICAgd2hpbGUoY2MubGVuZ3RoICYmIGNjW2NjLmxlbmd0aCAtIDFdLmxleCkKICAgICAgICAgIGNjLnBvcCgpKCk7CiAgICAgICAgaWYgKGN4Lm1hcmtlZCkgcmV0dXJuIGN4Lm1hcmtlZDsKICAgICAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiICYmIGluU2NvcGUoc3RhdGUsIGNvbnRlbnQpKSByZXR1cm4gInZhcmlhYmxlLTIiOwogICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgfQogICAgfQogIH0KCiAgLy8gQ29tYmluYXRvciB1dGlscwoKICB2YXIgY3ggPSB7c3RhdGU6IG51bGwsIGNvbHVtbjogbnVsbCwgbWFya2VkOiBudWxsLCBjYzogbnVsbH07CiAgZnVuY3Rpb24gcGFzcygpIHsKICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN4LmNjLnB1c2goYXJndW1lbnRzW2ldKTsKICB9CiAgZnVuY3Rpb24gY29udCgpIHsKICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIHJldHVybiB0cnVlOwogIH0KICBmdW5jdGlvbiByZWdpc3Rlcih2YXJuYW1lKSB7CiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgIGlmIChzdGF0ZS5jb250ZXh0KSB7CiAgICAgIGN4Lm1hcmtlZCA9ICJkZWYiOwogICAgICBmb3IgKHZhciB2ID0gc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KQogICAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuOwogICAgICBzdGF0ZS5sb2NhbFZhcnMgPSB7bmFtZTogdmFybmFtZSwgbmV4dDogc3RhdGUubG9jYWxWYXJzfTsKICAgIH0KICB9CgogIC8vIENvbWJpbmF0b3JzCgogIHZhciBkZWZhdWx0VmFycyA9IHtuYW1lOiAidGhpcyIsIG5leHQ6IHtuYW1lOiAiYXJndW1lbnRzIn19OwogIGZ1bmN0aW9uIHB1c2hjb250ZXh0KCkgewogICAgaWYgKCFjeC5zdGF0ZS5jb250ZXh0KSBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBkZWZhdWx0VmFyczsKICAgIGN4LnN0YXRlLmNvbnRleHQgPSB7cHJldjogY3guc3RhdGUuY29udGV4dCwgdmFyczogY3guc3RhdGUubG9jYWxWYXJzfTsKICB9CiAgZnVuY3Rpb24gcG9wY29udGV4dCgpIHsKICAgIGN4LnN0YXRlLmxvY2FsVmFycyA9IGN4LnN0YXRlLmNvbnRleHQudmFyczsKICAgIGN4LnN0YXRlLmNvbnRleHQgPSBjeC5zdGF0ZS5jb250ZXh0LnByZXY7CiAgfQogIGZ1bmN0aW9uIHB1c2hsZXgodHlwZSwgaW5mbykgewogICAgdmFyIHJlc3VsdCA9IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgICAgc3RhdGUubGV4aWNhbCA9IG5ldyBKU0xleGljYWwoc3RhdGUuaW5kZW50ZWQsIGN4LnN0cmVhbS5jb2x1bW4oKSwgdHlwZSwgbnVsbCwgc3RhdGUubGV4aWNhbCwgaW5mbykKICAgIH07CiAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvcGxleCgpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmxleGljYWwucHJldikgewogICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICIpIikKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CiAgICAgIHN0YXRlLmxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7CiAgICB9CiAgfQogIHBvcGxleC5sZXggPSB0cnVlOwoKICBmdW5jdGlvbiBleHBlY3Qod2FudGVkKSB7CiAgICByZXR1cm4gZnVuY3Rpb24gZXhwZWN0aW5nKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gd2FudGVkKSByZXR1cm4gY29udCgpOwogICAgICBlbHNlIGlmICh3YW50ZWQgPT0gIjsiKSByZXR1cm4gcGFzcygpOwogICAgICBlbHNlIHJldHVybiBjb250KGFyZ3VtZW50cy5jYWxsZWUpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0YXRlbWVudCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyIikgcmV0dXJuIGNvbnQocHVzaGxleCgidmFyZGVmIiksIHZhcmRlZjEsIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYSIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwcmVzc2lvbiwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYiIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwogICAgaWYgKHR5cGUgPT0gImZvciIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgZXhwZWN0KCIoIiksIHB1c2hsZXgoIikiKSwgZm9yc3BlYzEsIGV4cGVjdCgiKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcGxleCwgc3RhdGVtZW50LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIpLCBtYXliZWxhYmVsKTsKICAgIGlmICh0eXBlID09ICJzd2l0Y2giKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHB1c2hsZXgoIn0iLCAic3dpdGNoIiksIGV4cGVjdCgieyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBwb3BsZXgsIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiY2FzZSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiOiIpKTsKICAgIGlmICh0eXBlID09ICJkZWZhdWx0IikgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IikpOwogICAgaWYgKHR5cGUgPT0gImNhdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBwdXNoY29udGV4dCwgZXhwZWN0KCIoIiksIGZ1bmFyZywgZXhwZWN0KCIpIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnQsIHBvcGxleCwgcG9wY29udGV4dCk7CiAgICByZXR1cm4gcGFzcyhwdXNobGV4KCJzdGF0IiksIGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogIH0KICBmdW5jdGlvbiBleHByZXNzaW9uKHR5cGUpIHsKICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAiZnVuY3Rpb24iKSByZXR1cm4gY29udChmdW5jdGlvbmRlZik7CiAgICBpZiAodHlwZSA9PSAia2V5d29yZCBjIikgcmV0dXJuIGNvbnQobWF5YmVleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBtYXliZWV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgY29tbWFzZXAoZXhwcmVzc2lvbiwgIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChvYmpwcm9wLCAifSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVleHByZXNzaW9uKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bO1x9XClcXSxdLykpIHJldHVybiBwYXNzKCk7CiAgICByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsKICB9CiAgICAKICBmdW5jdGlvbiBtYXliZW9wZXJhdG9yKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiICYmIC9cK1wrfC0tLy50ZXN0KHZhbHVlKSkgcmV0dXJuIGNvbnQobWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAib3BlcmF0b3IiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGNvbW1hc2VwKGV4cHJlc3Npb24sICIpIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAiLiIpIHJldHVybiBjb250KHByb3BlcnR5LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJbIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBleHByZXNzaW9uLCBleHBlY3QoIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVsYWJlbCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KHBvcGxleCwgc3RhdGVtZW50KTsKICAgIHJldHVybiBwYXNzKG1heWJlb3BlcmF0b3IsIGV4cGVjdCgiOyIpLCBwb3BsZXgpOwogIH0KICBmdW5jdGlvbiBwcm9wZXJ0eSh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKSB7Y3gubWFya2VkID0gInByb3BlcnR5IjsgcmV0dXJuIGNvbnQoKTt9CiAgfQogIGZ1bmN0aW9uIG9ianByb3AodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgY3gubWFya2VkID0gInByb3BlcnR5IjsKICAgIGlmIChhdG9taWNUeXBlcy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgcmV0dXJuIGNvbnQoZXhwZWN0KCI6IiksIGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBjb21tYXNlcCh3aGF0LCBlbmQpIHsKICAgIGZ1bmN0aW9uIHByb2NlZWQodHlwZSkgewogICAgICBpZiAodHlwZSA9PSAiLCIpIHJldHVybiBjb250KHdoYXQsIHByb2NlZWQpOwogICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7CiAgICAgIHJldHVybiBjb250KGV4cGVjdChlbmQpKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbiBjb21tYVNlcGFyYXRlZCh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgZWxzZSByZXR1cm4gcGFzcyh3aGF0LCBwcm9jZWVkKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGJsb2NrKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ9IikgcmV0dXJuIGNvbnQoKTsKICAgIHJldHVybiBwYXNzKHN0YXRlbWVudCwgYmxvY2spOwogIH0KICBmdW5jdGlvbiB2YXJkZWYxKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAidmFyaWFibGUiKXtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KHZhcmRlZjIpO30KICAgIHJldHVybiBjb250KCk7CiAgfQogIGZ1bmN0aW9uIHZhcmRlZjIodHlwZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiPSIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIHZhcmRlZjIpOwogICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udCh2YXJkZWYxKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzEodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHZhcmRlZjEsIGZvcnNwZWMyKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIHBhc3MoZm9yc3BlYzIpOwogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikgcmV0dXJuIGNvbnQoZm9ybWF5YmVpbik7CiAgICByZXR1cm4gcGFzcyhmb3JzcGVjMik7CiAgfQogIGZ1bmN0aW9uIGZvcm1heWJlaW4odHlwZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiaW4iKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIHJldHVybiBjb250KG1heWJlb3BlcmF0b3IsIGZvcnNwZWMyKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzIodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoZm9yc3BlYzMpOwogICAgaWYgKHZhbHVlID09ICJpbiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwZWN0KCI7IiksIGZvcnNwZWMzKTsKICB9CiAgZnVuY3Rpb24gZm9yc3BlYzModHlwZSkgewogICAgaWYgKHR5cGUgIT0gIikiKSBjb250KGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBmdW5jdGlvbmRlZih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpO30KICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBwdXNoY29udGV4dCwgY29tbWFzZXAoZnVuYXJnLCAiKSIpLCBwb3BsZXgsIHN0YXRlbWVudCwgcG9wY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIGZ1bmFyZyh0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge3JlZ2lzdGVyKHZhbHVlKTsgcmV0dXJuIGNvbnQoKTt9CiAgfQoKICAvLyBJbnRlcmZhY2UKCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZToganNUb2tlbkJhc2UsCiAgICAgICAgcmVBbGxvd2VkOiB0cnVlLAogICAgICAgIGt3QWxsb3dlZDogdHJ1ZSwKICAgICAgICBjYzogW10sCiAgICAgICAgbGV4aWNhbDogbmV3IEpTTGV4aWNhbCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJibG9jayIsIGZhbHNlKSwKICAgICAgICBsb2NhbFZhcnM6IHBhcnNlckNvbmZpZy5sb2NhbFZhcnMsCiAgICAgICAgY29udGV4dDogcGFyc2VyQ29uZmlnLmxvY2FsVmFycyAmJiB7dmFyczogcGFyc2VyQ29uZmlnLmxvY2FsVmFyc30sCiAgICAgICAgaW5kZW50ZWQ6IDAKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmICghc3RhdGUubGV4aWNhbC5oYXNPd25Qcm9wZXJ0eSgiYWxpZ24iKSkKICAgICAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSBmYWxzZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAodHlwZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgc3RhdGUucmVBbGxvd2VkID0gISEodHlwZSA9PSAib3BlcmF0b3IiIHx8IHR5cGUgPT0gImtleXdvcmQgYyIgfHwgdHlwZS5tYXRjaCgvXltcW3t9XCgsOzpdJC8pKTsKICAgICAgc3RhdGUua3dBbGxvd2VkID0gdHlwZSAhPSAnLic7CiAgICAgIHJldHVybiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBqc1Rva2VuQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWwsCiAgICAgICAgICB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5nID0gZmlyc3RDaGFyID09IHR5cGU7CiAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIDQ7CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0IiB8fCB0eXBlID09ICJmb3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIGlmIChsZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCiAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoL14oPzpjYXNlfGRlZmF1bHQpXGIvLnRlc3QodGV4dEFmdGVyKSA/IGluZGVudFVuaXQgOiAyICogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICI6e30iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEppbmphMiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iamluamEyLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBKaW5qYTIgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0ppbmphMiBFeGFtcGxlJmx0Oy90aXRsZSZndDsKICAmbHQ7L2hlYWQmZ3Q7CiAgJmx0O2JvZHkmZ3Q7CiAgICAmbHQ7dWwmZ3Q7CiAgICB7IyB0aGlzIGlzIGEgY29tbWVudCAjfQogICAgeyUtIGZvciBpdGVtIGluIGxpIC0lfQogICAgICAmbHQ7bGkmZ3Q7CiAgICAgICAge3sgaXRlbS5sYWJlbCB9fQogICAgICAmbHQ7L2xpJmd0OwogICAgeyUgZW5kZm9yIC0lfQogICAgJmx0Oy91bCZndDsKICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0KICAgICAgQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge21vZGU6CiAgICAgICAge25hbWU6ICJqaW5qYTIiLCBodG1sTW9kZTogdHJ1ZX19KTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/jinja2/jinja2.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqaW5qYTIiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmYpIHsKICAgIHZhciBrZXl3b3JkcyA9IFsiYmxvY2siLCAiZW5kYmxvY2siLCAiZm9yIiwgImVuZGZvciIsICJpbiIsICJ0cnVlIiwgImZhbHNlIiwgCiAgICAgICAgICAgICAgICAgICAgImxvb3AiLCAibm9uZSIsICJzZWxmIiwgInN1cGVyIiwgImlmIiwgImFzIiwgIm5vdCIsICJhbmQiLAogICAgICAgICAgICAgICAgICAgICJlbHNlIiwgImltcG9ydCIsICJ3aXRoIiwgIndpdGhvdXQiLCAiY29udGV4dCJdOwogICAga2V5d29yZHMgPSBuZXcgUmVnRXhwKCJeKCgiICsga2V5d29yZHMuam9pbigiKXwoIikgKyAiKSlcXGIiKTsKCiAgICBmdW5jdGlvbiB0b2tlbkJhc2UgKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAieyIpIHsKICAgICAgICAgICAgaWYgKGNoID0gc3RyZWFtLmVhdCgvXHt8JXwjLykpIHsKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoIi0iKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWcoY2gpOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gaW5UYWcgKGNsb3NlKSB7CiAgICAgICAgaWYgKGNsb3NlID09ICJ7IikgewogICAgICAgICAgICBjbG9zZSA9ICJ9IjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgIGlmICgoY2ggPT0gY2xvc2UgfHwgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KGNsb3NlKSkpCiAgICAgICAgICAgICAgICAmJiBzdHJlYW0uZWF0KCJ9IikpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goa2V5d29yZHMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBjbG9zZSA9PSAiIyIgPyAiY29tbWVudCIgOiAic3RyaW5nIjsKICAgICAgICB9OwogICAgfQogICAgcmV0dXJuIHsKICAgICAgICBzdGFydFN0YXRlOiBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZX07CiAgICAgICAgfSwKICAgICAgICB0b2tlbjogZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgIH07IAp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IExFU1MgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imxlc3MuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4OyBib3JkZXI6IDFweCBzb2xpZCAjZGRkO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90aGVtZS9sZXNzZXItZGFyay5jc3MiPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9aXNvLTg4NTktMSI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IExFU1MgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPi8qIFNvbWUgTEVTUyBjb2RlICovCgpAdGVzdF9hOiAjZWVlUVFROy8vdGhpcyBpcyBub3QgYSB2YWxpZCBoZXggdmFsdWUgYW5kIHRodXMgcGFyc2VkIGFzIGFuIGVsZW1lbnQgaWQKQHRlc3RfYjogI2VlZUZGRi8vdGhpcyBpcyBhIHZhbGlkIGhleCB2YWx1ZSBidXQgdGhlIGRlY2xhcmF0aW9uIGRvZXNuJ3QgZW5kIHdpdGggYSBzZW1pY29sb24gYW5kIHRodXMgcGFyc2VkIGFzIGFuIGVsZW1lbnQgaWQKCiNlZWUgYWFhIC5ib3gKewogICN0ZXN0IGJiYiB7CiAgICB3aWR0aDogNTAwcHg7CiAgICBoZWlnaHQ6IDI1MHB4OwogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKHNoZWVwLnBuZyksIHVybChiZXR3ZWVuZ3Jhc3NhbmRza3kucG5nKTsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBib3R0b20sIGxlZnQgdG9wOwogICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICB9Cn0KCkBiYXNlOiAjZjkzOGFiOwoKLmJveC1zaGFkb3coQHN0eWxlLCBAYykgd2hlbiAoaXNjb2xvcihAYykpIHsKICBib3gtc2hhZG93OiAgICAgICAgIEBzdHlsZSBAYzsKICAtd2Via2l0LWJveC1zaGFkb3c6IEBzdHlsZSBAYzsKICAtbW96LWJveC1zaGFkb3c6ICAgIEBzdHlsZSBAYzsKfQouYm94LXNoYWRvdyhAc3R5bGUsIEBhbHBoYTogNTAlKSB3aGVuIChpc251bWJlcihAYWxwaGEpKSB7CiAgLmJveC1zaGFkb3coQHN0eWxlLCByZ2JhKDAsIDAsIDAsIEBhbHBoYSkpOwp9CgpAY29sb3I6ICM0RDkyNkY7CgojaGVhZGVyIHsKICBjb2xvcjogQGNvbG9yOwogIGNvbG9yOiAjMDAwMDAwOwp9CmgyIHsKICBjb2xvcjogQGNvbG9yOwp9Cgoucm91bmRlZC1jb3JuZXJzIChAcmFkaXVzOiA1cHgpIHsKICBib3JkZXItcmFkaXVzOiBAcmFkaXVzOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogQHJhZGl1czsKICAtbW96LWJvcmRlci1yYWRpdXM6IEByYWRpdXM7Cn0KCiNoZWFkZXIgewogIC5yb3VuZGVkLWNvcm5lcnM7Cn0KI2Zvb3RlciB7CiAgLnJvdW5kZWQtY29ybmVycygxMHB4KTsKfQoKLmJveC1zaGFkb3cgKEB4OiAwLCBAeTogMCwgQGJsdXI6IDFweCwgQGFscGhhKSB7CiAgQHZhbDogQHggQHkgQGJsdXIgcmdiYSgwLCAwLCAwLCBAYWxwaGEpOwoKICBib3gtc2hhZG93OiAgICAgICAgIEB2YWw7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBAdmFsOwogIC1tb3otYm94LXNoYWRvdzogICAgQHZhbDsKfQouYm94IHsgQGJhc2U6ICNmOTM4YWI7CiAgY29sb3I6ICAgICAgICBzYXR1cmF0ZShAYmFzZSwgNSUpOwogIGJvcmRlci1jb2xvcjogbGlnaHRlbihAYmFzZSwgMzAlKTsKICBkaXYgeyAuYm94LXNoYWRvdygwLCAwLCA1cHgsIDAuNCkgfQp9CgpAaW1wb3J0IHVybCgic29tZXRoaW5nLmNzcyIpOwoKQGxpZ2h0LWJsdWU6ICAgaHNsKDE5MCwgNTAlLCA2NSUpOwpAbGlnaHQteWVsbG93OiBkZXNhdHVyYXRlKCNmZWZlYzgsIDEwJSk7CkBkYXJrLXllbGxvdzogIGRlc2F0dXJhdGUoZGFya2VuKEBsaWdodC15ZWxsb3csIDEwJSksIDQwJSk7CkBkYXJrZXN0OiAgICAgIGhzbCgyMCwgMCUsIDE1JSk7CkBkYXJrOiAgICAgICAgIGhzbCgxOTAsIDIwJSwgMzAlKTsKQG1lZGl1bTogICAgICAgaHNsKDEwLCA2MCUsIDMwJSk7CkBsaWdodDogICAgICAgIGhzbCg5MCwgNDAlLCAyMCUpOwpAbGlnaHRlc3Q6ICAgICBoc2woOTAsIDIwJSwgOTAlKTsKQGhpZ2hsaWdodDogICAgaHNsKDgwLCA1MCUsIDkwJSk7CkBibHVlOiAgICAgICAgIGhzbCgyMTAsIDYwJSwgMjAlKTsKQGFscGhhLWJsdWU6ICAgaHNsYSgyMTAsIDYwJSwgNDAlLCAwLjUpOwoKLmJveC1zaGFkb3cgKEB4LCBAeSwgQGJsdXIsIEBhbHBoYSkgewogIEB2YWx1ZTogQHggQHkgQGJsdXIgcmdiYSgwLCAwLCAwLCBAYWxwaGEpOwogIGJveC1zaGFkb3c6ICAgICAgICAgQHZhbHVlOwogIC1tb3otYm94LXNoYWRvdzogICAgQHZhbHVlOwogIC13ZWJraXQtYm94LXNoYWRvdzogQHZhbHVlOwp9Ci5ib3JkZXItcmFkaXVzIChAcmFkaXVzKSB7CiAgYm9yZGVyLXJhZGl1czogQHJhZGl1czsKICAtbW96LWJvcmRlci1yYWRpdXM6IEByYWRpdXM7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiBAcmFkaXVzOwp9CgouYm9yZGVyLXJhZGl1cyAoQHJhZGl1cywgYm90dG9tKSB7CiAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7CiAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAtbW96LWJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLXdlYmtpdC1ib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDsKfQouYm9yZGVyLXJhZGl1cyAoQHJhZGl1cywgcmlnaHQpIHsKICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7CiAgLW1vei1ib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwOwogIC1tb3otYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDsKICAtd2Via2l0LWJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7CiAgLXdlYmtpdC1ib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwOwp9Ci5ib3gtc2hhZG93LWluc2V0IChAeCwgQHksIEBibHVyLCBAY29sb3IpIHsKICBib3gtc2hhZG93OiBAeCBAeSBAYmx1ciBAY29sb3IgaW5zZXQ7CiAgLW1vei1ib3gtc2hhZG93OiBAeCBAeSBAYmx1ciBAY29sb3IgaW5zZXQ7CiAgLXdlYmtpdC1ib3gtc2hhZG93OiBAeCBAeSBAYmx1ciBAY29sb3IgaW5zZXQ7Cn0KLmNvZGUgKCkgewogIGZvbnQtZmFtaWx5OiAnQml0c3RyZWFtIFZlcmEgU2FucyBNb25vJywKICAgICAgICAgICAgICAgJ0RlamFWdSBTYW5zIE1vbm8nLAogICAgICAgICAgICAgICAnTW9uYWNvJywKICAgICAgICAgICAgICAgQ291cmllciwKICAgICAgICAgICAgICAgbW9ub3NwYWNlICFpbXBvcnRhbnQ7Cn0KLndyYXAgKCkgewogIHRleHQtd3JhcDogd3JhcDsKICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7ICAgICAgIC8qIGNzcy0zICovCiAgd2hpdGUtc3BhY2U6IC1tb3otcHJlLXdyYXA7ICAvKiBNb3ppbGxhLCBzaW5jZSAxOTk5ICovCiAgd2hpdGUtc3BhY2U6IC1wcmUtd3JhcDsgICAgICAvKiBPcGVyYSA0LTYgKi8KICB3aGl0ZS1zcGFjZTogLW8tcHJlLXdyYXA7ICAgIC8qIE9wZXJhIDcgKi8KICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7ICAgICAgIC8qIEludGVybmV0IEV4cGxvcmVyIDUuNSsgKi8KfQoKaHRtbCB7IG1hcmdpbjogMCB9CmJvZHkgewogIGJhY2tncm91bmQtY29sb3I6IEBkYXJrZXN0OwogIG1hcmdpbjogMCBhdXRvOwogIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsKICBmb250LXNpemU6IDEwMCU7CiAgb3ZlcmZsb3cteDogaGlkZGVuOwp9Cm5hdiwgaGVhZGVyLCBmb290ZXIsIHNlY3Rpb24sIGFydGljbGUgewogIGRpc3BsYXk6IGJsb2NrOwp9CmEgewogIGNvbG9yOiAjYjgzMDAwOwp9CmgxIGEgewogIGNvbG9yOiBibGFjazsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KYTpob3ZlciB7CiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KaDEsIGgyLCBoMywgaDQgewogIG1hcmdpbjogMDsKICBmb250LXdlaWdodDogbm9ybWFsOwp9CnVsLCBsaSB7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwp9CmNvZGUgeyAuY29kZTsgfQpjb2RlIHsKICAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IEBkYXJrIH0KICAua2V5d29yZCB7IGZvbnQtd2VpZ2h0OiBib2xkIH0KICAuY29tbWVudCB7IGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNSkgfQogIC5udW1iZXIgeyBjb2xvcjogQGJsdWUgfQogIC5jbGFzcywgLnNwZWNpYWwgeyBjb2xvcjogcmdiYSgwLCA1MCwgMTAwLCAwLjgpIH0KfQpwcmUgewogIHBhZGRpbmc6IDAgMzBweDsKICAud3JhcDsKfQpibG9ja3F1b3RlIHsKICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KYm9keSA+IGZvb3RlciB7CiAgdGV4dC1hbGlnbjogbGVmdDsKICBtYXJnaW4tbGVmdDogMTBweDsKICBmb250LXN0eWxlOiBpdGFsaWM7CiAgZm9udC1zaXplOiAxOHB4OwogIGNvbG9yOiAjODg4Owp9CgojbG9nbyB7CiAgbWFyZ2luLXRvcDogMzBweDsKICBtYXJnaW4tYm90dG9tOiAzMHB4OwogIGRpc3BsYXk6IGJsb2NrOwogIHdpZHRoOiAxOTlweDsKICBoZWlnaHQ6IDgxcHg7CiAgYmFja2dyb3VuZDogdXJsKC9pbWFnZXMvbG9nby5wbmcpIG5vLXJlcGVhdDsKfQpuYXYgewogIG1hcmdpbi1sZWZ0OiAxNXB4Owp9Cm5hdiBhLCAjZHJvcGRvd24gbGkgewogIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICBjb2xvcjogd2hpdGU7CiAgbGluZS1oZWlnaHQ6IDQycHg7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDBweCAxNXB4OwogIHRleHQtc2hhZG93OiAtMXB4IC0xcHggMXB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgYm9yZGVyLXdpZHRoOiAwIDJweDsKICAmOmhvdmVyIHsKICAgIC5kYXJrLXJlZDsgCiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgfQp9Ci5kYXJrLXJlZCB7CiAgICBAcmVkOiBAbWVkaXVtOwogICAgYm9yZGVyOiAycHggc29saWQgZGFya2VuKEByZWQsIDI1JSk7CiAgICBib3JkZXItbGVmdC1jb2xvcjogZGFya2VuKEByZWQsIDE1JSk7CiAgICBib3JkZXItcmlnaHQtY29sb3I6IGRhcmtlbihAcmVkLCAxNSUpOwogICAgYm9yZGVyLWJvdHRvbTogMDsKICAgIGJvcmRlci10b3A6IDA7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBkYXJrZW4oQHJlZCwgMTAlKTsKfQoKLmNvbnRlbnQgewogIG1hcmdpbjogMCBhdXRvOwogIHdpZHRoOiA5ODBweDsKfQoKI21lbnUgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB3aWR0aDogMTAwJTsKICB6LWluZGV4OiAzOwogIGNsZWFyOiBib3RoOwogIGRpc3BsYXk6IGJsb2NrOwogIGJhY2tncm91bmQtY29sb3I6IEBibHVlOwogIGhlaWdodDogNDJweDsKICBib3JkZXItdG9wOiAycHggc29saWQgbGlnaHRlbihAYWxwaGEtYmx1ZSwgMjAlKTsKICBib3JkZXItYm90dG9tOiAycHggc29saWQgZGFya2VuKEBhbHBoYS1ibHVlLCAyNSUpOwogIC5ib3gtc2hhZG93KDAsIDFweCwgOHB4LCAwLjYpOwogIC1tb3otYm94LXNoYWRvdzogMCAwIDAgIzAwMDsgLy8gQmVjYXVzZSBmaXJlZm94IHN1Y2tzLgoKICAmLmRvY2tlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBoc2xhKDIxMCwgNjAlLCA0MCUsIDAuNCk7CiAgfQogICY6aG92ZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogQGJsdWU7CiAgfQoKICAjZHJvcGRvd24gewogICAgbWFyZ2luOiAwIDAgMCAxMTdweDsKICAgIHBhZGRpbmc6IDA7CiAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgZGlzcGxheTogbm9uZTsKICAgIHdpZHRoOiAxOTBweDsKICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCBAbWVkaXVtOwogICAgY29sb3I6IEBoaWdobGlnaHQ7CiAgICBib3JkZXI6IDJweCBzb2xpZCBkYXJrZW4oQG1lZGl1bSwgMjUlKTsKICAgIGJvcmRlci1sZWZ0LWNvbG9yOiBkYXJrZW4oQG1lZGl1bSwgMTUlKTsKICAgIGJvcmRlci1yaWdodC1jb2xvcjogZGFya2VuKEBtZWRpdW0sIDE1JSk7CiAgICBib3JkZXItdG9wLXdpZHRoOiAwOwogICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBtZWRpdW0sIDEwJSk7CiAgICB1bCB7CiAgICAgIHBhZGRpbmc6IDBweDsgIAogICAgfQogICAgbGkgewogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICBwYWRkaW5nOiAwOwogICAgICBib3JkZXI6IDA7CiAgICAgIGEgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDBweCAxNXB4OyAgCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICAgIGNvbG9yOiB3aGl0ZTsgIAogICAgICAgICY6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGFya2VuKEBtZWRpdW0sIDE1JSk7CiAgICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAuYm9yZGVyLXJhZGl1cyg1cHgsIGJvdHRvbSk7CiAgICAuYm94LXNoYWRvdygwLCA2cHgsIDhweCwgMC41KTsKICB9Cn0KCiNtYWluIHsKICBtYXJnaW46IDAgYXV0bzsKICB3aWR0aDogMTAwJTsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAbGlnaHQtYmx1ZTsKICBib3JkZXItdG9wOiA4cHggc29saWQgZGFya2VuKEBsaWdodC1ibHVlLCA1JSk7CgogICNpbnRybyB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBsaWdodC1ibHVlLCAyNSUpOwogICAgZmxvYXQ6IGxlZnQ7CiAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CgogICAgaGVpZ2h0OiAzODBweDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDI7CiAgICBmb250LWZhbWlseTogJ0Ryb2lkIFNlcmlmJywgJ0dlb3JnaWEnOwogICAgd2lkdGg6IDM5NXB4OwogICAgcGFkZGluZzogNDVweCAyMHB4IDIzcHggMzBweDsKICAgIGJvcmRlcjogMnB4IGRhc2hlZCBkYXJrZW4oQGxpZ2h0LWJsdWUsIDEwJSk7CiAgICAuYm94LXNoYWRvdygxcHgsIDBweCwgNnB4LCAwLjUpOwogICAgYm9yZGVyLWJvdHRvbTogMDsKICAgIGJvcmRlci10b3A6IDA7CiAgICAjZG93bmxvYWQgeyBjb2xvcjogdHJhbnNwYXJlbnQ7IGJvcmRlcjogMDsgZmxvYXQ6IGxlZnQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgbWFyZ2luOiAxNXB4IDAgMTVweCAtNXB4OyB9CiAgICAjZG93bmxvYWQgaW1nIHsgZGlzcGxheTogaW5saW5lLWJsb2NrfQogICAgI2Rvd25sb2FkLWluZm8gewogICAgICBjb2RlIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7ICAKICAgICAgfQogICAgICBjb2xvcjogQGJsdWUgKyAjMzMzOyBkaXNwbGF5OiBpbmxpbmU7IGZsb2F0OiBsZWZ0OyBtYXJnaW46IDM2cHggMCAwIDE1cHggfQogIH0KICBoMiB7CiAgICBzcGFuIHsKICAgICAgY29sb3I6IEBtZWRpdW07ICAKICAgIH0KICAgIGNvbG9yOiBAYmx1ZTsKICAgIG1hcmdpbjogMjBweCAwOwogICAgZm9udC1zaXplOiAyNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuMmVtOwogIH0KICBoMyB7CiAgICBjb2xvcjogQGJsdWU7CiAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICBtYXJnaW46IDMwcHggMCAxNXB4IDA7CiAgICBmb250LXNpemU6IDFlbTsKICAgIHRleHQtc2hhZG93OiAwcHggMHB4IDBweCBAbGlnaHRlc3Q7CiAgICBzcGFuIHsgY29sb3I6IEBtZWRpdW0gfQogIH0KICAjZXhhbXBsZSB7CiAgICBwIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBjb2xvcjogQGJsdWU7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB0ZXh0LXNoYWRvdzogMHB4IDFweCAxcHggQGxpZ2h0ZXN0OwogICAgfQogICAgcHJlIHsKICAgICAgbWFyZ2luOiAwOwogICAgICB0ZXh0LXNoYWRvdzogMCAtMXB4IDFweCBAZGFya2VzdDsKICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogZGVzYXR1cmF0ZShAZGFya2VzdCwgOCUpOwogICAgICBib3JkZXI6IDA7CiAgICAgIHdpZHRoOiA0NTBweDsKICAgICAgY29sb3I6IGxpZ2h0ZW4oQGxpZ2h0ZXN0LCAyJSk7CiAgICAgIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7CiAgICAgIHBhZGRpbmc6IDE1cHg7CiAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCBAbGlnaHRlc3Q7CiAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4OwogICAgICAuYm94LXNoYWRvdygwLCAwcHgsIDE1cHgsIDAuNSk7CiAgICAgIC5jb2RlOwogICAgICAuYm9yZGVyLXJhZGl1cygycHgpOwogICAgICBjb2RlIC5hdHRyaWJ1dGUgeyBjb2xvcjogaHNsKDQwLCA1MCUsIDcwJSkgfQogICAgICBjb2RlIC52YXJpYWJsZSAgeyBjb2xvcjogaHNsKDEyMCwgMTAlLCA1MCUpIH0KICAgICAgY29kZSAuZWxlbWVudCAgIHsgY29sb3I6IGhzbCgxNzAsIDIwJSwgNTAlKSB9CgogICAgICBjb2RlIC5zdHJpbmcsIC5yZWdleHAgeyBjb2xvcjogaHNsKDc1LCA1MCUsIDY1JSkgfQogICAgICBjb2RlIC5jbGFzcyB7IGNvbG9yOiBoc2woNDAsIDQwJSwgNjAlKTsgZm9udC13ZWlnaHQ6IG5vcm1hbCB9CiAgICAgIGNvZGUgLmlkIHsgY29sb3I6IGhzbCg1MCwgNDAlLCA2MCUpOyBmb250LXdlaWdodDogbm9ybWFsIH0KICAgICAgY29kZSAuY29tbWVudCB7IGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgfQogICAgICBjb2RlIC5udW1iZXIsIC5jb2xvciB7IGNvbG9yOiBoc2woMTAsIDQwJSwgNTAlKSB9CiAgICAgIGNvZGUgLmNsYXNzLCBjb2RlIC5taXhpbiwgLnNwZWNpYWwgeyBjb2xvcjogaHNsKDE5MCwgMjAlLCA1MCUpIH0KICAgICAgI3RpbWUgeyBjb2xvcjogI2FhYSB9CiAgICB9CiAgICBmbG9hdDogcmlnaHQ7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBtYXJnaW46IDA7CiAgICBtYXJnaW4tdG9wOiAxNXB4OwogICAgcGFkZGluZzogMDsKICAgIHdpZHRoOiA1MDBweDsKICB9Cn0KCgoucGFnZSB7CiAgLmNvbnRlbnQgewogICAgd2lkdGg6IDg3MHB4OwogICAgcGFkZGluZzogNDVweDsKICB9CiAgbWFyZ2luOiAwIGF1dG87CiAgZm9udC1mYW1pbHk6ICdHZW9yZ2lhJywgc2VyaWY7CiAgZm9udC1zaXplOiAxOHB4OwogIGxpbmUtaGVpZ2h0OiAyNnB4OwogIHBhZGRpbmc6IDAgNjBweDsKICBjb2RlIHsKICAgIGZvbnQtc2l6ZTogMTZweDsgIAogIH0KICBwcmUgewogICAgYm9yZGVyLXdpZHRoOiAxcHg7CiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDsKICAgIHBhZGRpbmc6IDE1cHg7CiAgICBtYXJnaW46IDE1cHggMDsKICB9CiAgaDEgewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGZvbnQtc2l6ZTogNDBweDsKICAgIG1hcmdpbi10b3A6IDE1cHg7CiAgICBtYXJnaW4tYm90dG9tOiAzNXB4OwogIH0KICBwICsgaDEgeyBtYXJnaW4tdG9wOiA2MHB4IH0KICBoMiwgaDMgewogICAgbWFyZ2luOiAzMHB4IDAgMTVweCAwOwogIH0KICBwICsgaDIsIHByZSArIGgyLCBjb2RlICsgaDIgewogICAgYm9yZGVyLXRvcDogNnB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgIHBhZGRpbmctdG9wOiAzMHB4OwogIH0KICBoMyB7CiAgICBtYXJnaW46IDE1cHggMDsKICB9Cn0KCgojZG9jcyB7CiAgQGJnOiBsaWdodGVuKEBsaWdodC1ibHVlLCA1JSk7CiAgYm9yZGVyLXRvcDogMnB4IHNvbGlkIGxpZ2h0ZW4oQGJnLCA1JSk7CiAgY29sb3I6IEBibHVlOwogIGJhY2tncm91bmQtY29sb3I6IEBsaWdodC1ibHVlOwogIC5ib3gtc2hhZG93KDAsIC0ycHgsIDVweCwgMC4yKTsKCiAgaDEgewogICAgZm9udC1mYW1pbHk6ICdEcm9pZCBTZXJpZicsICdHZW9yZ2lhJywgc2VyaWY7CiAgICBwYWRkaW5nLXRvcDogMzBweDsKICAgIHBhZGRpbmctbGVmdDogNDVweDsKICAgIGZvbnQtc2l6ZTogNDRweDsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBtYXJnaW46IDMwcHggMCAhaW1wb3J0YW50OwogICAgdGV4dC1zaGFkb3c6IDBweCAxcHggMXB4IEBsaWdodGVzdDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogIH0KICAuY29udGVudCB7CiAgICBjbGVhcjogYm90aDsKICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGVuKEBsaWdodC1ibHVlLCAyNSUpOwogICAgLmJveC1zaGFkb3coMCwgNXB4LCA1cHgsIDAuNCk7CiAgfQogIHByZSB7CiAgICBAYmFja2dyb3VuZDogbGlnaHRlbihAYmcsIDMwJSk7CiAgICBjb2xvcjogbGlnaHRlbihAYmx1ZSwgMTAlKTsKICAgIGJhY2tncm91bmQtY29sb3I6IEBiYWNrZ3JvdW5kOwogICAgYm9yZGVyLWNvbG9yOiBsaWdodGVuKEBsaWdodC1ibHVlLCAyNSUpOwogICAgYm9yZGVyLXdpZHRoOiAycHg7CiAgICBjb2RlIC5hdHRyaWJ1dGUgeyBjb2xvcjogaHNsKDQwLCA1MCUsIDMwJSkgfQogICAgY29kZSAudmFyaWFibGUgIHsgY29sb3I6IGhzbCgxMjAsIDEwJSwgMzAlKSB9CiAgICBjb2RlIC5lbGVtZW50ICAgeyBjb2xvcjogaHNsKDE3MCwgMjAlLCAzMCUpIH0KCiAgICBjb2RlIC5zdHJpbmcsIC5yZWdleHAgeyBjb2xvcjogaHNsKDc1LCA1MCUsIDM1JSkgfQogICAgY29kZSAuY2xhc3MgeyBjb2xvcjogaHNsKDQwLCA0MCUsIDMwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgY29kZSAuaWQgeyBjb2xvcjogaHNsKDUwLCA0MCUsIDMwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgY29kZSAuY29tbWVudCB7IGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNCkgfQogICAgY29kZSAubnVtYmVyLCAuY29sb3IgeyBjb2xvcjogaHNsKDEwLCA0MCUsIDMwJSkgfQogICAgY29kZSAuY2xhc3MsIGNvZGUgLm1peGluLCAuc3BlY2lhbCB7IGNvbG9yOiBoc2woMTkwLCAyMCUsIDMwJSkgfQogIH0KICBwcmUgY29kZSAgICAgICAgICAgICAgICAgICAgeyBmb250LXNpemU6IDE1cHggIH0KICBwICsgaDIsIHByZSArIGgyLCBjb2RlICsgaDIgeyBib3JkZXItdG9wLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMSkgfQp9Cgp0ZCB7CiAgcGFkZGluZy1yaWdodDogMzBweDsgIAp9CiNzeW5vcHNpcyB7CiAgLmJveC1zaGFkb3coMCwgNXB4LCA1cHgsIDAuMik7Cn0KI3N5bm9wc2lzLCAjYWJvdXQgewogIGgyIHsKICAgIGZvbnQtc2l6ZTogMzBweDsgIAogICAgcGFkZGluZzogMTBweCAwOwogIH0KICBoMSArIGgyIHsKICAgICAgbWFyZ2luLXRvcDogMTVweDsgIAogIH0KICBoMyB7IGZvbnQtc2l6ZTogMjJweCB9CgogIC5jb2RlLWV4YW1wbGUgewogICAgYm9yZGVyLXNwYWNpbmc6IDA7CiAgICBib3JkZXItd2lkdGg6IDFweDsKICAgIGJvcmRlci1zdHlsZTogZGFzaGVkOwogICAgcGFkZGluZzogMDsKICAgIHByZSB7IGJvcmRlcjogMDsgbWFyZ2luOiAwIH0KICAgIHRkIHsKICAgICAgYm9yZGVyOiAwOwogICAgICBtYXJnaW46IDA7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IGRlc2F0dXJhdGUoZGFya2VuKEBkYXJrZXN0LCA1JSksIDIwJSk7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICB0ciB7IHBhZGRpbmc6IDAgfQogIH0KICAuY3NzLW91dHB1dCB7CiAgICB0ZCB7CiAgICAgIGJvcmRlci1sZWZ0OiAwOyAgCiAgICB9CiAgfQogIC5sZXNzLWV4YW1wbGUgewogICAgLy9ib3JkZXItcmlnaHQ6IDFweCBkb3R0ZWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpICFpbXBvcnRhbnQ7CiAgfQogIC5jc3Mtb3V0cHV0LCAubGVzcy1leGFtcGxlIHsKICAgIHdpZHRoOiAzOTBweDsKICB9CiAgcHJlIHsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBsaW5lLWhlaWdodDogMjBweDsKICAgIGZvbnQtc2l6ZTogMTRweDsKICB9Cn0KI2Fib3V0LCAjc3lub3BzaXMsICNndWlkZSB7CiAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjb2xvcjogQGxpZ2h0LXllbGxvdzsKICAgIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgJjpob3ZlciB7CiAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IGRhc2hlZCBAbGlnaHQteWVsbG93OwogICAgfQogIH0KICBAYmc6IGRlc2F0dXJhdGUoZGFya2VuKEBkYXJrZXN0LCA1JSksIDIwJSk7CiAgdGV4dC1zaGFkb3c6IDAgLTFweCAxcHggbGlnaHRlbihAYmcsIDUlKTsKICBjb2xvcjogQGhpZ2hsaWdodDsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmc7CiAgLmNvbnRlbnQgewogICAgYmFja2dyb3VuZC1jb2xvcjogZGVzYXR1cmF0ZShAZGFya2VzdCwgMjAlKTsKICAgIGNsZWFyOiBib3RoOwogICAgLmJveC1zaGFkb3coMCwgNXB4LCA1cHgsIDAuNCk7CiAgfQogIGgxLCBoMiwgaDMgewogICAgY29sb3I6IEBkYXJrLXllbGxvdzsKICB9CiAgcHJlIHsKICAgICAgY29kZSAuYXR0cmlidXRlIHsgY29sb3I6IGhzbCg0MCwgNTAlLCA3MCUpIH0KICAgICAgY29kZSAudmFyaWFibGUgIHsgY29sb3I6IGhzbCgxMjAsIDEwJSwgNTAlKSB9CiAgICAgIGNvZGUgLmVsZW1lbnQgICB7IGNvbG9yOiBoc2woMTcwLCAyMCUsIDUwJSkgfQoKICAgICAgY29kZSAuc3RyaW5nLCAucmVnZXhwIHsgY29sb3I6IGhzbCg3NSwgNTAlLCA2NSUpIH0KICAgICAgY29kZSAuY2xhc3MgeyBjb2xvcjogaHNsKDQwLCA0MCUsIDYwJSk7IGZvbnQtd2VpZ2h0OiBub3JtYWwgfQogICAgICBjb2RlIC5pZCB7IGNvbG9yOiBoc2woNTAsIDQwJSwgNjAlKTsgZm9udC13ZWlnaHQ6IG5vcm1hbCB9CiAgICAgIGNvZGUgLmNvbW1lbnQgeyBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpIH0KICAgICAgY29kZSAubnVtYmVyLCAuY29sb3IgeyBjb2xvcjogaHNsKDEwLCA0MCUsIDUwJSkgfQogICAgICBjb2RlIC5jbGFzcywgY29kZSAubWl4aW4sIC5zcGVjaWFsIHsgY29sb3I6IGhzbCgxOTAsIDIwJSwgNTAlKSB9CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBAYmc7CiAgICBib3JkZXItY29sb3I6IGRhcmtlbihAbGlnaHQteWVsbG93LCA1JSk7CiAgfQogIGNvZGUgewogICAgY29sb3I6IGRhcmtlbihAZGFyay15ZWxsb3csIDUlKTsKICAgIC5zdHJpbmcsIC5yZWdleHAgeyBjb2xvcjogZGVzYXR1cmF0ZShAbGlnaHQtYmx1ZSwgMTUlKSB9CiAgICAua2V5d29yZCB7IGNvbG9yOiBoc2woNDAsIDQwJSwgNjAlKTsgZm9udC13ZWlnaHQ6IG5vcm1hbCB9CiAgICAuY29tbWVudCB7IGNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikgfQogICAgLm51bWJlciB7IGNvbG9yOiBsaWdodGVuKEBibHVlLCAxMCUpIH0KICAgIC5jbGFzcywgLnNwZWNpYWwgeyBjb2xvcjogaHNsKDE5MCwgMjAlLCA1MCUpIH0KICB9Cn0KI2d1aWRlIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiBAZGFya2VzdDsKICAuY29udGVudCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICB9Cgp9CgojYWJvdXQgewogIGJhY2tncm91bmQtY29sb3I6IEBkYXJrZXN0ICFpbXBvcnRhbnQ7CiAgLmNvbnRlbnQgewogICAgYmFja2dyb3VuZC1jb2xvcjogZGVzYXR1cmF0ZShsaWdodGVuKEBkYXJrZXN0LCAzJSksIDUlKTsKICB9Cn0KI3N5bm9wc2lzIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiBkZXNhdHVyYXRlKGxpZ2h0ZW4oQGRhcmtlc3QsIDMlKSwgNSUpICFpbXBvcnRhbnQ7CiAgLmNvbnRlbnQgewogICAgYmFja2dyb3VuZC1jb2xvcjogZGVzYXR1cmF0ZShsaWdodGVuKEBkYXJrZXN0LCAzJSksIDUlKTsKICB9CiAgcHJlIHt9Cn0KI3N5bm9wc2lzLCAjZ3VpZGUgewogIC5jb250ZW50IHsKICAgIC5ib3gtc2hhZG93KDAsIDBweCwgMHB4LCAwLjApOwogIH0KfQojYWJvdXQgZm9vdGVyIHsKICBtYXJnaW4tdG9wOiAzMHB4OwogIHBhZGRpbmctdG9wOiAzMHB4OwogIGJvcmRlci10b3A6IDZweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGZvbnQtc2l6ZTogMTZweDsKICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjM1KTsKICAjY29weSB7IGZvbnQtc2l6ZTogMTJweCB9CiAgdGV4dC1zaGFkb3c6IC0xcHggLTFweCAxcHggcmdiYSgwLCAwLCAwLCAwLjAyKTsKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgdGhlbWU6ICJsZXNzZXItZGFyayIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9sZXNzPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/less/less.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKTEVTUyBtb2RlIC0gaHR0cDovL3d3dy5sZXNzY3NzLm9yZy8KUG9ydGVkIHRvIENvZGVNaXJyb3IgYnkgUGV0ZXIgS3Jvb24KKi8KCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgiY3NzIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwgdHlwZTsKICBmdW5jdGlvbiByZXQoc3R5bGUsIHRwKSB7dHlwZSA9IHRwOyByZXR1cm4gc3R5bGU7fQogIC8vaHRtbDUgdGFncwogIHZhciB0YWdzID0gWyJhIiwiYWJiciIsImFjcm9ueW0iLCJhZGRyZXNzIiwiYXBwbGV0IiwiYXJlYSIsImFydGljbGUiLCJhc2lkZSIsImF1ZGlvIiwiYiIsImJhc2UiLCJiYXNlZm9udCIsImJkaSIsImJkbyIsImJpZyIsImJsb2NrcXVvdGUiLCJib2R5IiwiYnIiLCJidXR0b24iLCJjYW52YXMiLCJjYXB0aW9uIiwiY2l0ZSIsImNvZGUiLCJjb2wiLCJjb2xncm91cCIsImNvbW1hbmQiLCJkYXRhbGlzdCIsImRkIiwiZGVsIiwiZGV0YWlscyIsImRmbiIsImRpciIsImRpdiIsImRsIiwiZHQiLCJlbSIsImVtYmVkIiwiZmllbGRzZXQiLCJmaWdjYXB0aW9uIiwiZmlndXJlIiwiZm9udCIsImZvb3RlciIsImZvcm0iLCJmcmFtZSIsImZyYW1lc2V0IiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaGVhZCIsImhlYWRlciIsImhncm91cCIsImhyIiwiaHRtbCIsImkiLCJpZnJhbWUiLCJpbWciLCJpbnB1dCIsImlucyIsImtleWdlbiIsImtiZCIsImxhYmVsIiwibGVnZW5kIiwibGkiLCJsaW5rIiwibWFwIiwibWFyayIsIm1lbnUiLCJtZXRhIiwibWV0ZXIiLCJuYXYiLCJub2ZyYW1lcyIsIm5vc2NyaXB0Iiwib2JqZWN0Iiwib2wiLCJvcHRncm91cCIsIm9wdGlvbiIsIm91dHB1dCIsInAiLCJwYXJhbSIsInByZSIsInByb2dyZXNzIiwicSIsInJwIiwicnQiLCJydWJ5IiwicyIsInNhbXAiLCJzY3JpcHQiLCJzZWN0aW9uIiwic2VsZWN0Iiwic21hbGwiLCJzb3VyY2UiLCJzcGFuIiwic3RyaWtlIiwic3Ryb25nIiwic3R5bGUiLCJzdWIiLCJzdW1tYXJ5Iiwic3VwIiwidGFibGUiLCJ0Ym9keSIsInRkIiwidGV4dGFyZWEiLCJ0Zm9vdCIsInRoIiwidGhlYWQiLCJ0aW1lIiwidGl0bGUiLCJ0ciIsInRyYWNrIiwidHQiLCJ1IiwidWwiLCJ2YXIiLCJ2aWRlbyIsIndiciJdOwogIAogIGZ1bmN0aW9uIGluVGFnc0FycmF5KHZhbCl7CgkgIGZvcih2YXIgaT0wOyBpPHRhZ3MubGVuZ3RoOyBpKyspewoJCSAgaWYodmFsID09PSB0YWdzW2ldKXsKCQkJICByZXR1cm4gdHJ1ZTsKCQkgIH0KCSAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CgoJaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvW1x3XC1dLyk7IHJldHVybiByZXQoIm1ldGEiLCBzdHJlYW0uY3VycmVudCgpKTt9CiAgICBlbHNlIGlmIChjaCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DQ29tbWVudDsKICAgICAgcmV0dXJuIHRva2VuQ0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiPCIgJiYgc3RyZWFtLmVhdCgiISIpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TR01MQ29tbWVudDsKICAgICAgcmV0dXJuIHRva2VuU0dNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiPSIpIHJldChudWxsLCAiY29tcGFyZSIpOwogICAgZWxzZSBpZiAoKGNoID09ICJ+IiB8fCBjaCA9PSAifCIpICYmIHN0cmVhbS5lYXQoIj0iKSkgcmV0dXJuIHJldChudWxsLCAiY29tcGFyZSIpOwogICAgZWxzZSBpZiAoY2ggPT0gIlwiIiB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KCWVsc2UgaWYgKGNoID09ICIvIikgeyAvLyBsZXNzY3NzIGUuZy46IC5wbmcgd2lsbCBub3QgYmUgcGFyc2VkIGFzIGEgY2xhc3MKCSAgaWYoc3RyZWFtLmVhdCgiLyIpKXsKCQlzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0NvbW1lbnQKICAgICAgCXJldHVybiB0b2tlblNDb21tZW50KHN0cmVhbSwgc3RhdGUpOwoJICB9ZWxzZXsKCSAgICBzdHJlYW0uZWF0V2hpbGUoL1tcYS16QS1aMC05XC1fLlxzXS8pOwoJCWlmKC9cL3xcKS8udGVzdChzdHJlYW0ucGVlaygpIHx8IHN0cmVhbS5lb2woKSB8fCAoc3RyZWFtLmVhdFNwYWNlKCkgJiYgc3RyZWFtLnBlZWsoKSA9PSAiKSIpKSlyZXR1cm4gcmV0KCJzdHJpbmciLCAic3RyaW5nIik7Ly9sZXQgdXJsKC9pbWFnZXMvbG9nby5wbmcpIHdpdGhvdXQgcXVvdGVzIHJldHVybiBhcyBzdHJpbmcKICAgICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwoJICB9CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiISIpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eXHMqXHcqLyk7CiAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAiaW1wb3J0YW50Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3LiVdLyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywrPD4qXC9dLy50ZXN0KGNoKSkgey8vcmVtb3ZlZCAuIGRvdCBjaGFyYWN0ZXIgb3JpZ2luYWwgd2FzIFssLis+KlwvXQogICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKICAgIH0KICAgIGVsc2UgaWYgKC9bO3t9OlxbXF0oKV0vLnRlc3QoY2gpKSB7IC8vYWRkZWQgKCkgY2hhciBmb3IgbGVzc2NzcyBvcmlnaW5hbCB3YXMgWzt7fTpcW1xdXQogICAgICBpZihjaCA9PSAiOiIpewoJCXN0cmVhbS5lYXRXaGlsZSgvW2FjdGl2ZXxob3ZlcnxsaW5rfHZpc2l0ZWRdLyk7CgkJaWYoIHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL2FjdGl2ZXxob3ZlcnxsaW5rfHZpc2l0ZWQvKSl7CgkJICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CgkJfWVsc2V7CgkJICByZXR1cm4gcmV0KG51bGwsIGNoKTsJCgkJfQoJICB9ZWxzZXsKICAJICAgIHJldHVybiByZXQobnVsbCwgY2gpOwoJICB9CiAgICB9CgllbHNlIGlmIChjaCA9PSAiLiIpIHsgLy8gbGVzc2NzcwoJICBzdHJlYW0uZWF0V2hpbGUoL1tcYS16QS1aMC05XC1fXS8pOwogICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICB9CgllbHNlIGlmIChjaCA9PSAiIyIpIHsgLy8gbGVzc2NzcwoJICAvL3dlIGRvbid0IGVhdCB3aGl0ZS1zcGFjZSwgd2Ugd2FudCB0aGUgaGV4IGNvbG9yIGFuZCBvciBpZCBvbmx5CgkgIHN0cmVhbS5lYXRXaGlsZSgvW0EtWmEtejAtOV0vKTsKCSAgLy9jaGVjayBpZiB0aGVyZSBpcyBhIHByb3BlciBoZXggY29sb3IgbGVuZ3RoIGUuZy4gI2VlZSB8fCAjZWVlRUVFCgkgIGlmKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoID09PTQgfHwgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggPT09Nyl7CgkJICBpZihzdHJlYW0uY3VycmVudCgpLm1hdGNoKC9bQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfS8sZmFsc2UpICE9IG51bGwpey8vaXMgdGhlcmUgYSB2YWxpZCBoZXggY29sb3IgdmFsdWUgcHJlc2VudCBpbiB0aGUgY3VycmVudCBzdHJlYW0KCQkgIAkvL3doZW4gbm90IGEgdmFsaWQgaGV4IHZhbHVlLCBwYXJzZSBhcyBpZAoJCQlpZihzdHJlYW0uY3VycmVudCgpLnN1YnN0cmluZygxKSAhPSBzdHJlYW0uY3VycmVudCgpLm1hdGNoKC9bQS1GYS1mMC05XXs2fXxbQS1GYS1mMC05XXszfS8sZmFsc2UpKXJldHVybiByZXQoImF0b20iLCAidGFnIik7CgkJCS8vZWF0IHdoaXRlLXNwYWNlCgkJCXN0cmVhbS5lYXRTcGFjZSgpOwoJCQkvL3doZW4gaGV4IHZhbHVlIGRlY2xhcmF0aW9uIGRvZXNuJ3QgZW5kIHdpdGggWzssXSBidXQgaXMgZG9lcyB3aXRoIGEgc2xhc2gvY2MgY29tbWVudCB0cmVhdCBpdCBhcyBhbiBpZCwganVzdCBsaWtlIHRoZSBvdGhlciBoZXggdmFsdWVzIHRoYXQgZG9uJ3QgZW5kIHdpdGhbOyxdCgkJCWlmKCAvW1wvPD4uKCl7ISQlXiYqX1wtXFw/PStcfCMnfmBdLy50ZXN0KHN0cmVhbS5wZWVrKCkpIClyZXR1cm4gcmV0KCJhdG9tIiwgInRhZyIpOwoJCQkvLyN0aW1lIHsgY29sb3I6ICNhYWEgfQoJCQllbHNlIGlmKHN0cmVhbS5wZWVrKCkgPT0gIn0iIClyZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwoJCQkvL3dlIGhhdmUgYSB2YWxpZCBoZXggY29sb3IgdmFsdWUsIHBhcnNlIGFzIGlkIHdoZW5ldmVyIGFuIGVsZW1lbnQvY2xhc3MgaXMgZGVmaW5lZCBhZnRlciB0aGUgaGV4KGlkKSB2YWx1ZSBlLmcuICNlZWUgYWFhIHx8ICNlZWUgLmFhYQoJCQllbHNlIGlmKCAvW2EtekEtWlxcXS8udGVzdChzdHJlYW0ucGVlaygpKSApcmV0dXJuIHJldCgiYXRvbSIsICJ0YWciKTsKCQkJLy93aGVuIGEgaGV4IHZhbHVlIGlzIG9uIHRoZSBlbmQgb2YgYSBsaW5lLCBwYXJzZSBhcyBpZAoJCQllbHNlIGlmKHN0cmVhbS5lb2woKSlyZXR1cm4gcmV0KCJhdG9tIiwgInRhZyIpOwoJCQkvL2RlZmF1bHQKCQkJZWxzZSByZXR1cm4gcmV0KCJudW1iZXIiLCAidW5pdCIpOwoJCSAgfWVsc2V7Ly93aGVuIG5vdCBhIHZhbGlkIGhleHZhbHVlIGluIHRoZSBjdXJyZW50IHN0cmVhbSBlLmcuICNmb290ZXIKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwoJCQlyZXR1cm4gcmV0KCJhdG9tIiwgInRhZyIpOyAKCQkgIH0KCSAgfWVsc2V7CgkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXS8pOwkJCgkJcmV0dXJuIHJldCgiYXRvbSIsICJ0YWciKTsKCSAgfQogICAgfQoJZWxzZSBpZiAoY2ggPT0gIiYiKSB7CgkgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC1dLyk7CgkgIHJldHVybiByZXQobnVsbCwgY2gpOwoJfQoJZWxzZSBpZiAoY2ggPT0gIiYiKSB7CgkgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC1dLyk7CgkgIHJldHVybiByZXQobnVsbCwgY2gpOwoJfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XFxcLV8uJV0vKTsKCSAgaWYoIHN0cmVhbS5wZWVrKCkubWF0Y2goL1woLykgIT0gbnVsbCApey8vIGxlc3Njc3MKCQlzdHJlYW0uZWF0V2hpbGUoL1thLXpBLVpcc10vKTsKCQlpZihzdHJlYW0ucGVlaygpID09ICIoIilyZXR1cm4gcmV0KG51bGwsIGNoKTsKCSAgfWVsc2UgaWYoIHN0cmVhbS5jdXJyZW50KCkubWF0Y2goL1wtXGR8XC0uXGQvKSApeyAvLyBsZXNzY3NzIG1hdGNoIGUuZy46IC01cHggLTAuNCBldGMuLi4KCSAgCXJldHVybiByZXQoIm51bWJlciIsICJ1bml0Iik7CgkgIH1lbHNlIGlmKCBpblRhZ3NBcnJheShzdHJlYW0uY3VycmVudCgpKSApeyAvLyBsZXNzY3NzIG1hdGNoIGh0bWwgdGFncwoJICAJcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwoJICB9ZWxzZSBpZiggL1wvfFwpLy50ZXN0KHN0cmVhbS5wZWVrKCkgfHwgc3RyZWFtLmVvbCgpIHx8IChzdHJlYW0uZWF0U3BhY2UoKSAmJiBzdHJlYW0ucGVlaygpID09ICIpIikpICYmIHN0cmVhbS5jdXJyZW50KCkuaW5kZXhPZigiLiIpICE9PSAtMSl7CgkJcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOy8vbGV0IHVybCgvaW1hZ2VzL2xvZ28ucG5nKSB3aXRob3V0IHF1b3RlcyByZXR1cm4gYXMgc3RyaW5nCgkgIH1lbHNlewogICAgICAJcmV0dXJuIHJldCgidmFyaWFibGUiLCAidmFyaWFibGUiKTsKCSAgfQogICAgfQogICAgCiAgfQoKICBmdW5jdGlvbiB0b2tlblNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsvLyBTQ29tbWVudCA9IFNsYXNoIGNvbW1lbnQKICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKCXN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgfQogICAgCiAgZnVuY3Rpb24gdG9rZW5DQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICBpZiAobWF5YmVFbmQgJiYgY2ggPT0gIi8iKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgZGFzaGVzID0gMCwgY2g7CiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICBpZiAoZGFzaGVzID49IDIgJiYgY2ggPT0gIj4iKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGFzaGVzID0gKGNoID09ICItIikgPyBkYXNoZXMgKyAxIDogMDsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoOwogICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkKICAgICAgICAgIGJyZWFrOwogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmICghZXNjYXBlZCkgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgIH07CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgeyAKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIGJhc2VJbmRlbnQ6IGJhc2UgfHwgMCwKICAgICAgICAgICAgICBzdGFjazogW119OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKCiAgICAgIHZhciBjb250ZXh0ID0gc3RhdGUuc3RhY2tbc3RhdGUuc3RhY2subGVuZ3RoLTFdOwogICAgICBpZiAodHlwZSA9PSAiaGFzaCIgJiYgY29udGV4dCA9PSAicnVsZSIpIHN0eWxlID0gImF0b20iOwogICAgICBlbHNlIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgaWYgKGNvbnRleHQgPT0gInJ1bGUiKSBzdHlsZSA9IG51bGw7IC8vInRhZyIKICAgICAgICBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7Iil7IAoJCQlzdHlsZSA9IHN0cmVhbS5jdXJyZW50KCkgCT09ICJ3aGVuIiAJPyAidmFyaWFibGUiIAk6IAoJCQlzdHJlYW0uc3RyaW5nLm1hdGNoKC8jL2cpIAkhPSB1bmRlZmluZWQgCT8gbnVsbCAJCTogCgkJCS9bXHMsfFxzXCldLy50ZXN0KHN0cmVhbS5wZWVrKCkpIAkJPyAidGFnIiAJOiBudWxsOwoJCX0KICAgICAgfQoKICAgICAgaWYgKGNvbnRleHQgPT0gInJ1bGUiICYmIC9eW1x7XH07XSQvLnRlc3QodHlwZSkpCiAgICAgICAgc3RhdGUuc3RhY2sucG9wKCk7CiAgICAgIGlmICh0eXBlID09ICJ7IikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlheyI7CiAgICAgICAgZWxzZSBzdGF0ZS5zdGFjay5wdXNoKCJ7Iik7CiAgICAgIH0KICAgICAgZWxzZSBpZiAodHlwZSA9PSAifSIpIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWEiKTsKICAgICAgZWxzZSBpZiAoY29udGV4dCA9PSAieyIgJiYgdHlwZSAhPSAiY29tbWVudCIpIHN0YXRlLnN0YWNrLnB1c2goInJ1bGUiKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgdmFyIG4gPSBzdGF0ZS5zdGFjay5sZW5ndGg7CiAgICAgIGlmICgvXlx9Ly50ZXN0KHRleHRBZnRlcikpCiAgICAgICAgbiAtPSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPT0gInJ1bGUiID8gMiA6IDE7CiAgICAgIHJldHVybiBzdGF0ZS5iYXNlSW5kZW50ICsgbiAqIGluZGVudFVuaXQ7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICJ9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2NzcyIsICJjc3MiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEx1YSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ibHVhLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUvbmVhdC5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTHVhIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLS1bWwpleGFtcGxlIHVzZWxlc3MgY29kZSB0byBzaG93IGx1YSBzeW50YXggaGlnaGxpZ2h0aW5nCnRoaXMgaXMgbXVsdGlsaW5lIGNvbW1lbnQKXV0KCmZ1bmN0aW9uIGJsYWhibGFoYmxhaCh4KQoKICBsb2NhbCB0YWJsZSA9IHsKICAgICJhc2QiID0gMTIzLAogICAgIngiID0gMC4zNCwgIAogIH0KICBpZiB4IH49IDMgdGhlbgogICAgcHJpbnQoIHggKQogIGVsc2VpZiB4ID09ICJzdHJpbmciCiAgICBteV9jdXN0b21fZnVuY3Rpb24oIDB4MzQgKQogIGVsc2UKICAgIHVua25vd25fZnVuY3Rpb24oICJzb21lIHN0cmluZyIgKQogIGVuZAoKICAtLXNpbmdsZSBsaW5lIGNvbW1lbnQKICAKZW5kCgpmdW5jdGlvbiBibGFibGFibGEzKCkKCiAgZm9yIGssdiBpbiBpcGFpcnMoIHRhYmxlICkgZG8KICAgIC0tYWJjZGUuLgogICAgeT1bPVsKICB4PVtbCiAgICAgIHggaXMgYSBtdWx0aSBsaW5lIHN0cmluZwogICBdXQogIGJ1dCBpdHMgZGVmaW5pdGlvbiBpcyBpc2lkZSBhIGhpZ2hlc3QgbGV2ZWwgc3RyaW5nIQogIF09XQogICAgcHJpbnQoIiBcIlwiICIpCgogICAgcyA9IG1hdGguc2luKCB4ICkKICBlbmQKCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgdGFiTW9kZTogImluZGVudCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogIm5lYXQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+TG9vc2VseSBiYXNlZCBvbiBGcmFuY2lzemVrCiAgICBXYXdyemFrJ3MgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LzEvY29udHJpYi9sdWEiPkNvZGVNaXJyb3IKICAgIDEgbW9kZTwvYT4uIE9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlciBpcwogICAgc3VwcG9ydGVkLCA8Y29kZT5zcGVjaWFsczwvY29kZT4sIHRvIHdoaWNoIHlvdSBjYW4gcHJvdmlkZSBhbgogICAgYXJyYXkgb2Ygc3RyaW5ncyB0byBoYXZlIHRob3NlIGlkZW50aWZpZXJzIGhpZ2hsaWdodGVkIHdpdGgKICAgIHRoZSA8Y29kZT5sdWEtc3BlY2lhbDwvY29kZT4gc3R5bGUuPC9wPgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1sdWE8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/lua/lua.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gTFVBIG1vZGUuIFBvcnRlZCB0byBDb2RlTWlycm9yIDIgZnJvbSBGcmFuY2lzemVrIFdhd3J6YWsncwovLyBDb2RlTWlycm9yIDEgbW9kZS4KLy8gaGlnaGxpZ2h0cyBrZXl3b3Jkcywgc3RyaW5ncywgY29tbWVudHMgKG5vIGxldmVsaW5nIHN1cHBvcnRlZCEgKCJbPT1bIikpLCB0b2tlbnMsIGJhc2ljIGluZGVudGluZwogCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibHVhIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwoKICBmdW5jdGlvbiBwcmVmaXhSRSh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikiLCAiaSIpOwogIH0KICBmdW5jdGlvbiB3b3JkUkUod29yZHMpIHsKICAgIHJldHVybiBuZXcgUmVnRXhwKCJeKD86IiArIHdvcmRzLmpvaW4oInwiKSArICIpJCIsICJpIik7CiAgfQogIHZhciBzcGVjaWFscyA9IHdvcmRSRShwYXJzZXJDb25maWcuc3BlY2lhbHMgfHwgW10pOwogCiAgLy8gbG9uZyBsaXN0IG9mIHN0YW5kYXJkIGZ1bmN0aW9ucyBmcm9tIGx1YSBtYW51YWwKICB2YXIgYnVpbHRpbnMgPSB3b3JkUkUoWwogICAgIl9HIiwiX1ZFUlNJT04iLCJhc3NlcnQiLCJjb2xsZWN0Z2FyYmFnZSIsImRvZmlsZSIsImVycm9yIiwiZ2V0ZmVudiIsImdldG1ldGF0YWJsZSIsImlwYWlycyIsImxvYWQiLAogICAgImxvYWRmaWxlIiwibG9hZHN0cmluZyIsIm1vZHVsZSIsIm5leHQiLCJwYWlycyIsInBjYWxsIiwicHJpbnQiLCJyYXdlcXVhbCIsInJhd2dldCIsInJhd3NldCIsInJlcXVpcmUiLAogICAgInNlbGVjdCIsInNldGZlbnYiLCJzZXRtZXRhdGFibGUiLCJ0b251bWJlciIsInRvc3RyaW5nIiwidHlwZSIsInVucGFjayIsInhwY2FsbCIsCgogICAgImNvcm91dGluZS5jcmVhdGUiLCJjb3JvdXRpbmUucmVzdW1lIiwiY29yb3V0aW5lLnJ1bm5pbmciLCJjb3JvdXRpbmUuc3RhdHVzIiwiY29yb3V0aW5lLndyYXAiLCJjb3JvdXRpbmUueWllbGQiLAoKICAgICJkZWJ1Zy5kZWJ1ZyIsImRlYnVnLmdldGZlbnYiLCJkZWJ1Zy5nZXRob29rIiwiZGVidWcuZ2V0aW5mbyIsImRlYnVnLmdldGxvY2FsIiwiZGVidWcuZ2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5nZXRyZWdpc3RyeSIsImRlYnVnLmdldHVwdmFsdWUiLCJkZWJ1Zy5zZXRmZW52IiwiZGVidWcuc2V0aG9vayIsImRlYnVnLnNldGxvY2FsIiwiZGVidWcuc2V0bWV0YXRhYmxlIiwKICAgICJkZWJ1Zy5zZXR1cHZhbHVlIiwiZGVidWcudHJhY2ViYWNrIiwKCiAgICAiY2xvc2UiLCJmbHVzaCIsImxpbmVzIiwicmVhZCIsInNlZWsiLCJzZXR2YnVmIiwid3JpdGUiLAoKICAgICJpby5jbG9zZSIsImlvLmZsdXNoIiwiaW8uaW5wdXQiLCJpby5saW5lcyIsImlvLm9wZW4iLCJpby5vdXRwdXQiLCJpby5wb3BlbiIsImlvLnJlYWQiLCJpby5zdGRlcnIiLCJpby5zdGRpbiIsCiAgICAiaW8uc3Rkb3V0IiwiaW8udG1wZmlsZSIsImlvLnR5cGUiLCJpby53cml0ZSIsCgogICAgIm1hdGguYWJzIiwibWF0aC5hY29zIiwibWF0aC5hc2luIiwibWF0aC5hdGFuIiwibWF0aC5hdGFuMiIsIm1hdGguY2VpbCIsIm1hdGguY29zIiwibWF0aC5jb3NoIiwibWF0aC5kZWciLAogICAgIm1hdGguZXhwIiwibWF0aC5mbG9vciIsIm1hdGguZm1vZCIsIm1hdGguZnJleHAiLCJtYXRoLmh1Z2UiLCJtYXRoLmxkZXhwIiwibWF0aC5sb2ciLCJtYXRoLmxvZzEwIiwibWF0aC5tYXgiLAogICAgIm1hdGgubWluIiwibWF0aC5tb2RmIiwibWF0aC5waSIsIm1hdGgucG93IiwibWF0aC5yYWQiLCJtYXRoLnJhbmRvbSIsIm1hdGgucmFuZG9tc2VlZCIsIm1hdGguc2luIiwibWF0aC5zaW5oIiwKICAgICJtYXRoLnNxcnQiLCJtYXRoLnRhbiIsIm1hdGgudGFuaCIsCgogICAgIm9zLmNsb2NrIiwib3MuZGF0ZSIsIm9zLmRpZmZ0aW1lIiwib3MuZXhlY3V0ZSIsIm9zLmV4aXQiLCJvcy5nZXRlbnYiLCJvcy5yZW1vdmUiLCJvcy5yZW5hbWUiLCJvcy5zZXRsb2NhbGUiLAogICAgIm9zLnRpbWUiLCJvcy50bXBuYW1lIiwKCiAgICAicGFja2FnZS5jcGF0aCIsInBhY2thZ2UubG9hZGVkIiwicGFja2FnZS5sb2FkZXJzIiwicGFja2FnZS5sb2FkbGliIiwicGFja2FnZS5wYXRoIiwicGFja2FnZS5wcmVsb2FkIiwKICAgICJwYWNrYWdlLnNlZWFsbCIsCgogICAgInN0cmluZy5ieXRlIiwic3RyaW5nLmNoYXIiLCJzdHJpbmcuZHVtcCIsInN0cmluZy5maW5kIiwic3RyaW5nLmZvcm1hdCIsInN0cmluZy5nbWF0Y2giLCJzdHJpbmcuZ3N1YiIsCiAgICAic3RyaW5nLmxlbiIsInN0cmluZy5sb3dlciIsInN0cmluZy5tYXRjaCIsInN0cmluZy5yZXAiLCJzdHJpbmcucmV2ZXJzZSIsInN0cmluZy5zdWIiLCJzdHJpbmcudXBwZXIiLAoKICAgICJ0YWJsZS5jb25jYXQiLCJ0YWJsZS5pbnNlcnQiLCJ0YWJsZS5tYXhuIiwidGFibGUucmVtb3ZlIiwidGFibGUuc29ydCIKICBdKTsKICB2YXIga2V5d29yZHMgPSB3b3JkUkUoWyJhbmQiLCJicmVhayIsImVsc2VpZiIsImZhbHNlIiwibmlsIiwibm90Iiwib3IiLCJyZXR1cm4iLAoJCQkgInRydWUiLCJmdW5jdGlvbiIsICJlbmQiLCAiaWYiLCAidGhlbiIsICJlbHNlIiwgImRvIiwgCgkJCSAid2hpbGUiLCAicmVwZWF0IiwgInVudGlsIiwgImZvciIsICJpbiIsICJsb2NhbCIgXSk7CgogIHZhciBpbmRlbnRUb2tlbnMgPSB3b3JkUkUoWyJmdW5jdGlvbiIsICJpZiIsInJlcGVhdCIsImRvIiwgIlxcKCIsICJ7Il0pOwogIHZhciBkZWRlbnRUb2tlbnMgPSB3b3JkUkUoWyJlbmQiLCAidW50aWwiLCAiXFwpIiwgIn0iXSk7CiAgdmFyIGRlZGVudFBhcnRpYWwgPSBwcmVmaXhSRShbImVuZCIsICJ1bnRpbCIsICJcXCkiLCAifSIsICJlbHNlIiwgImVsc2VpZiJdKTsKCiAgZnVuY3Rpb24gcmVhZEJyYWNrZXQoc3RyZWFtKSB7CiAgICB2YXIgbGV2ZWwgPSAwOwogICAgd2hpbGUgKHN0cmVhbS5lYXQoIj0iKSkgKytsZXZlbDsKICAgIHN0cmVhbS5lYXQoIlsiKTsKICAgIHJldHVybiBsZXZlbDsKICB9CgogIGZ1bmN0aW9uIG5vcm1hbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICItIiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIlsiKSkKICAgICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAiY29tbWVudCIpKShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSAKICAgIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikKICAgICAgcmV0dXJuIChzdGF0ZS5jdXIgPSBzdHJpbmcoY2gpKShzdHJlYW0sIHN0YXRlKTsKICAgIGlmIChjaCA9PSAiWyIgJiYgL1tcWz1dLy50ZXN0KHN0cmVhbS5wZWVrKCkpKQogICAgICByZXR1cm4gKHN0YXRlLmN1ciA9IGJyYWNrZXRlZChyZWFkQnJhY2tldChzdHJlYW0pLCAic3RyaW5nIikpKHN0cmVhbSwgc3RhdGUpOwogICAgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHcuJV0vKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfQogICAgaWYgKC9bXHdfXS8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcXFwtXy5dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUiOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBmdW5jdGlvbiBicmFja2V0ZWQobGV2ZWwsIHN0eWxlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY3VybGV2ID0gbnVsbCwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGN1cmxldiA9PSBudWxsKSB7aWYgKGNoID09ICJdIikgY3VybGV2ID0gMDt9CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIj0iKSArK2N1cmxldjsKICAgICAgICBlbHNlIGlmIChjaCA9PSAiXSIgJiYgY3VybGV2ID09IGxldmVsKSB7IHN0YXRlLmN1ciA9IG5vcm1hbDsgYnJlYWs7IH0KICAgICAgICBlbHNlIGN1cmxldiA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSBicmVhazsKICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLmN1ciA9IG5vcm1hbDsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfTsKICB9CiAgICAKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbCkgewogICAgICByZXR1cm4ge2Jhc2Vjb2w6IGJhc2Vjb2wgfHwgMCwgaW5kZW50RGVwdGg6IDAsIGN1cjogbm9ybWFsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUuY3VyKHN0cmVhbSwgc3RhdGUpOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChzdHlsZSA9PSAidmFyaWFibGUiKSB7CiAgICAgICAgaWYgKGtleXdvcmRzLnRlc3Qod29yZCkpIHN0eWxlID0gImtleXdvcmQiOwogICAgICAgIGVsc2UgaWYgKGJ1aWx0aW5zLnRlc3Qod29yZCkpIHN0eWxlID0gImJ1aWx0aW4iOwoJZWxzZSBpZiAoc3BlY2lhbHMudGVzdCh3b3JkKSkgc3R5bGUgPSAidmFyaWFibGUtMiI7CiAgICAgIH0KICAgICAgaWYgKChzdHlsZSAhPSAiY29tbWVudCIpICYmIChzdHlsZSAhPSAic3RyaW5nIikpewogICAgICAgIGlmIChpbmRlbnRUb2tlbnMudGVzdCh3b3JkKSkgKytzdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgICBlbHNlIGlmIChkZWRlbnRUb2tlbnMudGVzdCh3b3JkKSkgLS1zdGF0ZS5pbmRlbnREZXB0aDsKICAgICAgfQogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICB2YXIgY2xvc2luZyA9IGRlZGVudFBhcnRpYWwudGVzdCh0ZXh0QWZ0ZXIpOwogICAgICByZXR1cm4gc3RhdGUuYmFzZWNvbCArIGluZGVudFVuaXQgKiAoc3RhdGUuaW5kZW50RGVwdGggLSAoY2xvc2luZyA/IDEgOiAwKSk7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1sdWEiLCAibHVhIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE1hcmtkb3duIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJtYXJrZG93bi5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTWFya2Rvd24gbW9kZTwvaDE+Cgo8IS0tIHNvdXJjZTogaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9iYXNpY3MudGV4dCAtLT4KPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KTWFya2Rvd246IEJhc2ljcwo9PT09PT09PT09PT09PT09CgombHQ7dWwgaWQ9IlByb2plY3RTdWJtZW51IiZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vIiB0aXRsZT0iTWFya2Rvd24gUHJvamVjdCBQYWdlIiZndDtNYWluJmx0Oy9hJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Jmx0O2EgY2xhc3M9InNlbGVjdGVkIiB0aXRsZT0iTWFya2Rvd24gQmFzaWNzIiZndDtCYXNpY3MmbHQ7L2EmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7YSBocmVmPSIvcHJvamVjdHMvbWFya2Rvd24vc3ludGF4IiB0aXRsZT0iTWFya2Rvd24gU3ludGF4IERvY3VtZW50YXRpb24iJmd0O1N5bnRheCZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9saWNlbnNlIiB0aXRsZT0iUHJpY2luZyBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbiImZ3Q7TGljZW5zZSZsdDsvYSZndDsmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0OyZsdDthIGhyZWY9Ii9wcm9qZWN0cy9tYXJrZG93bi9kaW5ndXMiIHRpdGxlPSJPbmxpbmUgTWFya2Rvd24gV2ViIEZvcm0iJmd0O0Rpbmd1cyZsdDsvYSZndDsmbHQ7L2xpJmd0OwombHQ7L3VsJmd0OwoKCkdldHRpbmcgdGhlIEdpc3Qgb2YgTWFya2Rvd24ncyBGb3JtYXR0aW5nIFN5bnRheAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KClRoaXMgcGFnZSBvZmZlcnMgYSBicmllZiBvdmVydmlldyBvZiB3aGF0IGl0J3MgbGlrZSB0byB1c2UgTWFya2Rvd24uClRoZSBbc3ludGF4IHBhZ2VdIFtzXSBwcm92aWRlcyBjb21wbGV0ZSwgZGV0YWlsZWQgZG9jdW1lbnRhdGlvbiBmb3IKZXZlcnkgZmVhdHVyZSwgYnV0IE1hcmtkb3duIHNob3VsZCBiZSB2ZXJ5IGVhc3kgdG8gcGljayB1cCBzaW1wbHkgYnkKbG9va2luZyBhdCBhIGZldyBleGFtcGxlcyBvZiBpdCBpbiBhY3Rpb24uIFRoZSBleGFtcGxlcyBvbiB0aGlzIHBhZ2UKYXJlIHdyaXR0ZW4gaW4gYSBiZWZvcmUvYWZ0ZXIgc3R5bGUsIHNob3dpbmcgZXhhbXBsZSBzeW50YXggYW5kIHRoZQpIVE1MIG91dHB1dCBwcm9kdWNlZCBieSBNYXJrZG93bi4KCkl0J3MgYWxzbyBoZWxwZnVsIHRvIHNpbXBseSB0cnkgTWFya2Rvd24gb3V0OyB0aGUgW0Rpbmd1c10gW2RdIGlzIGEKd2ViIGFwcGxpY2F0aW9uIHRoYXQgYWxsb3dzIHlvdSB0eXBlIHlvdXIgb3duIE1hcmtkb3duLWZvcm1hdHRlZCB0ZXh0CmFuZCB0cmFuc2xhdGUgaXQgdG8gWEhUTUwuCgoqKk5vdGU6KiogVGhpcyBkb2N1bWVudCBpcyBpdHNlbGYgd3JpdHRlbiB1c2luZyBNYXJrZG93bjsgeW91CmNhbiBbc2VlIHRoZSBzb3VyY2UgZm9yIGl0IGJ5IGFkZGluZyAnLnRleHQnIHRvIHRoZSBVUkxdIFtzcmNdLgoKICBbc106IC9wcm9qZWN0cy9tYXJrZG93bi9zeW50YXggICJNYXJrZG93biBTeW50YXgiCiAgW2RdOiAvcHJvamVjdHMvbWFya2Rvd24vZGluZ3VzICAiTWFya2Rvd24gRGluZ3VzIgogIFtzcmNdOiAvcHJvamVjdHMvbWFya2Rvd24vYmFzaWNzLnRleHQKCgojIyBQYXJhZ3JhcGhzLCBIZWFkZXJzLCBCbG9ja3F1b3RlcyAjIwoKQSBwYXJhZ3JhcGggaXMgc2ltcGx5IG9uZSBvciBtb3JlIGNvbnNlY3V0aXZlIGxpbmVzIG9mIHRleHQsIHNlcGFyYXRlZApieSBvbmUgb3IgbW9yZSBibGFuayBsaW5lcy4gKEEgYmxhbmsgbGluZSBpcyBhbnkgbGluZSB0aGF0IGxvb2tzIGxpa2UKYSBibGFuayBsaW5lIC0tIGEgbGluZSBjb250YWluaW5nIG5vdGhpbmcgYnV0IHNwYWNlcyBvciB0YWJzIGlzCmNvbnNpZGVyZWQgYmxhbmsuKSBOb3JtYWwgcGFyYWdyYXBocyBzaG91bGQgbm90IGJlIGluZGVudGVkIHdpdGgKc3BhY2VzIG9yIHRhYnMuCgpNYXJrZG93biBvZmZlcnMgdHdvIHN0eWxlcyBvZiBoZWFkZXJzOiAqU2V0ZXh0KiBhbmQgKmF0eCouClNldGV4dC1zdHlsZSBoZWFkZXJzIGZvciBgJmx0O2gxJmd0O2AgYW5kIGAmbHQ7aDImZ3Q7YCBhcmUgY3JlYXRlZCBieQoidW5kZXJsaW5pbmciIHdpdGggZXF1YWwgc2lnbnMgKGA9YCkgYW5kIGh5cGhlbnMgKGAtYCksIHJlc3BlY3RpdmVseS4KVG8gY3JlYXRlIGFuIGF0eC1zdHlsZSBoZWFkZXIsIHlvdSBwdXQgMS02IGhhc2ggbWFya3MgKGAjYCkgYXQgdGhlCmJlZ2lubmluZyBvZiB0aGUgbGluZSAtLSB0aGUgbnVtYmVyIG9mIGhhc2hlcyBlcXVhbHMgdGhlIHJlc3VsdGluZwpIVE1MIGhlYWRlciBsZXZlbC4KCkJsb2NrcXVvdGVzIGFyZSBpbmRpY2F0ZWQgdXNpbmcgZW1haWwtc3R5bGUgJ2AmZ3Q7YCcgYW5nbGUgYnJhY2tldHMuCgpNYXJrZG93bjoKCiAgICBBIEZpcnN0IExldmVsIEhlYWRlcgogICAgPT09PT09PT09PT09PT09PT09PT0KICAgIAogICAgQSBTZWNvbmQgTGV2ZWwgSGVhZGVyCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICBOb3cgaXMgdGhlIHRpbWUgZm9yIGFsbCBnb29kIG1lbiB0byBjb21lIHRvCiAgICB0aGUgYWlkIG9mIHRoZWlyIGNvdW50cnkuIFRoaXMgaXMganVzdCBhCiAgICByZWd1bGFyIHBhcmFncmFwaC4KCiAgICBUaGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIHRoZSBsYXp5CiAgICBkb2cncyBiYWNrLgogICAgCiAgICAjIyMgSGVhZGVyIDMKCiAgICAmZ3Q7IFRoaXMgaXMgYSBibG9ja3F1b3RlLgogICAgJmd0OyAKICAgICZndDsgVGhpcyBpcyB0aGUgc2Vjb25kIHBhcmFncmFwaCBpbiB0aGUgYmxvY2txdW90ZS4KICAgICZndDsKICAgICZndDsgIyMgVGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUKCgpPdXRwdXQ6CgogICAgJmx0O2gxJmd0O0EgRmlyc3QgTGV2ZWwgSGVhZGVyJmx0Oy9oMSZndDsKICAgIAogICAgJmx0O2gyJmd0O0EgU2Vjb25kIExldmVsIEhlYWRlciZsdDsvaDImZ3Q7CiAgICAKICAgICZsdDtwJmd0O05vdyBpcyB0aGUgdGltZSBmb3IgYWxsIGdvb2QgbWVuIHRvIGNvbWUgdG8KICAgIHRoZSBhaWQgb2YgdGhlaXIgY291bnRyeS4gVGhpcyBpcyBqdXN0IGEKICAgIHJlZ3VsYXIgcGFyYWdyYXBoLiZsdDsvcCZndDsKICAgIAogICAgJmx0O3AmZ3Q7VGhlIHF1aWNrIGJyb3duIGZveCBqdW1wZWQgb3ZlciB0aGUgbGF6eQogICAgZG9nJ3MgYmFjay4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtoMyZndDtIZWFkZXIgMyZsdDsvaDMmZ3Q7CiAgICAKICAgICZsdDtibG9ja3F1b3RlJmd0OwogICAgICAgICZsdDtwJmd0O1RoaXMgaXMgYSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7cCZndDtUaGlzIGlzIHRoZSBzZWNvbmQgcGFyYWdyYXBoIGluIHRoZSBibG9ja3F1b3RlLiZsdDsvcCZndDsKICAgICAgICAKICAgICAgICAmbHQ7aDImZ3Q7VGhpcyBpcyBhbiBIMiBpbiBhIGJsb2NrcXVvdGUmbHQ7L2gyJmd0OwogICAgJmx0Oy9ibG9ja3F1b3RlJmd0OwoKCgojIyMgUGhyYXNlIEVtcGhhc2lzICMjIwoKTWFya2Rvd24gdXNlcyBhc3Rlcmlza3MgYW5kIHVuZGVyc2NvcmVzIHRvIGluZGljYXRlIHNwYW5zIG9mIGVtcGhhc2lzLgoKTWFya2Rvd246CgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyAqYXJlIGVtcGhhc2l6ZWQqLgogICAgU29tZSBvZiB0aGVzZSB3b3JkcyBfYXJlIGVtcGhhc2l6ZWQgYWxzb18uCiAgICAKICAgIFVzZSB0d28gYXN0ZXJpc2tzIGZvciAqKnN0cm9uZyBlbXBoYXNpcyoqLgogICAgT3IsIGlmIHlvdSBwcmVmZXIsIF9fdXNlIHR3byB1bmRlcnNjb3JlcyBpbnN0ZWFkX18uCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7U29tZSBvZiB0aGVzZSB3b3JkcyAmbHQ7ZW0mZ3Q7YXJlIGVtcGhhc2l6ZWQmbHQ7L2VtJmd0Oy4KICAgIFNvbWUgb2YgdGhlc2Ugd29yZHMgJmx0O2VtJmd0O2FyZSBlbXBoYXNpemVkIGFsc28mbHQ7L2VtJmd0Oy4mbHQ7L3AmZ3Q7CiAgICAKICAgICZsdDtwJmd0O1VzZSB0d28gYXN0ZXJpc2tzIGZvciAmbHQ7c3Ryb25nJmd0O3N0cm9uZyBlbXBoYXNpcyZsdDsvc3Ryb25nJmd0Oy4KICAgIE9yLCBpZiB5b3UgcHJlZmVyLCAmbHQ7c3Ryb25nJmd0O3VzZSB0d28gdW5kZXJzY29yZXMgaW5zdGVhZCZsdDsvc3Ryb25nJmd0Oy4mbHQ7L3AmZ3Q7CiAgIAoKCiMjIExpc3RzICMjCgpVbm9yZGVyZWQgKGJ1bGxldGVkKSBsaXN0cyB1c2UgYXN0ZXJpc2tzLCBwbHVzZXMsIGFuZCBoeXBoZW5zIChgKmAsCmArYCwgYW5kIGAtYCkgYXMgbGlzdCBtYXJrZXJzLiBUaGVzZSB0aHJlZSBtYXJrZXJzIGFyZQppbnRlcmNoYW5nYWJsZTsgdGhpczoKCiAgICAqICAgQ2FuZHkuCiAgICAqICAgR3VtLgogICAgKiAgIEJvb3plLgoKdGhpczoKCiAgICArICAgQ2FuZHkuCiAgICArICAgR3VtLgogICAgKyAgIEJvb3plLgoKYW5kIHRoaXM6CgogICAgLSAgIENhbmR5LgogICAgLSAgIEd1bS4KICAgIC0gICBCb296ZS4KCmFsbCBwcm9kdWNlIHRoZSBzYW1lIG91dHB1dDoKCiAgICAmbHQ7dWwmZ3Q7CiAgICAmbHQ7bGkmZ3Q7Q2FuZHkuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtHdW0uJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCb296ZS4mbHQ7L2xpJmd0OwogICAgJmx0Oy91bCZndDsKCk9yZGVyZWQgKG51bWJlcmVkKSBsaXN0cyB1c2UgcmVndWxhciBudW1iZXJzLCBmb2xsb3dlZCBieSBwZXJpb2RzLCBhcwpsaXN0IG1hcmtlcnM6CgogICAgMS4gIFJlZAogICAgMi4gIEdyZWVuCiAgICAzLiAgQmx1ZQoKT3V0cHV0OgoKICAgICZsdDtvbCZndDsKICAgICZsdDtsaSZndDtSZWQmbHQ7L2xpJmd0OwogICAgJmx0O2xpJmd0O0dyZWVuJmx0Oy9saSZndDsKICAgICZsdDtsaSZndDtCbHVlJmx0Oy9saSZndDsKICAgICZsdDsvb2wmZ3Q7CgpJZiB5b3UgcHV0IGJsYW5rIGxpbmVzIGJldHdlZW4gaXRlbXMsIHlvdSdsbCBnZXQgYCZsdDtwJmd0O2AgdGFncyBmb3IgdGhlCmxpc3QgaXRlbSB0ZXh0LiBZb3UgY2FuIGNyZWF0ZSBtdWx0aS1wYXJhZ3JhcGggbGlzdCBpdGVtcyBieSBpbmRlbnRpbmcKdGhlIHBhcmFncmFwaHMgYnkgNCBzcGFjZXMgb3IgMSB0YWI6CgogICAgKiAgIEEgbGlzdCBpdGVtLgogICAgCiAgICAgICAgV2l0aCBtdWx0aXBsZSBwYXJhZ3JhcGhzLgoKICAgICogICBBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuCgpPdXRwdXQ6CgogICAgJmx0O3VsJmd0OwogICAgJmx0O2xpJmd0OyZsdDtwJmd0O0EgbGlzdCBpdGVtLiZsdDsvcCZndDsKICAgICZsdDtwJmd0O1dpdGggbXVsdGlwbGUgcGFyYWdyYXBocy4mbHQ7L3AmZ3Q7Jmx0Oy9saSZndDsKICAgICZsdDtsaSZndDsmbHQ7cCZndDtBbm90aGVyIGl0ZW0gaW4gdGhlIGxpc3QuJmx0Oy9wJmd0OyZsdDsvbGkmZ3Q7CiAgICAmbHQ7L3VsJmd0OwogICAgCgoKIyMjIExpbmtzICMjIwoKTWFya2Rvd24gc3VwcG9ydHMgdHdvIHN0eWxlcyBmb3IgY3JlYXRpbmcgbGlua3M6ICppbmxpbmUqIGFuZAoqcmVmZXJlbmNlKi4gV2l0aCBib3RoIHN0eWxlcywgeW91IHVzZSBzcXVhcmUgYnJhY2tldHMgdG8gZGVsaW1pdCB0aGUKdGV4dCB5b3Ugd2FudCB0byB0dXJuIGludG8gYSBsaW5rLgoKSW5saW5lLXN0eWxlIGxpbmtzIHVzZSBwYXJlbnRoZXNlcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgbGluayB0ZXh0LgpGb3IgZXhhbXBsZToKCiAgICBUaGlzIGlzIGFuIFtleGFtcGxlIGxpbmtdKGh0dHA6Ly9leGFtcGxlLmNvbS8pLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O1RoaXMgaXMgYW4gJmx0O2EgaHJlZj0iaHR0cDovL2V4YW1wbGUuY29tLyImZ3Q7CiAgICBleGFtcGxlIGxpbmsmbHQ7L2EmZ3Q7LiZsdDsvcCZndDsKCk9wdGlvbmFsbHksIHlvdSBtYXkgaW5jbHVkZSBhIHRpdGxlIGF0dHJpYnV0ZSBpbiB0aGUgcGFyZW50aGVzZXM6CgogICAgVGhpcyBpcyBhbiBbZXhhbXBsZSBsaW5rXShodHRwOi8vZXhhbXBsZS5jb20vICJXaXRoIGEgVGl0bGUiKS4KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtUaGlzIGlzIGFuICZsdDthIGhyZWY9Imh0dHA6Ly9leGFtcGxlLmNvbS8iIHRpdGxlPSJXaXRoIGEgVGl0bGUiJmd0OwogICAgZXhhbXBsZSBsaW5rJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpSZWZlcmVuY2Utc3R5bGUgbGlua3MgYWxsb3cgeW91IHRvIHJlZmVyIHRvIHlvdXIgbGlua3MgYnkgbmFtZXMsIHdoaWNoCnlvdSBkZWZpbmUgZWxzZXdoZXJlIGluIHlvdXIgZG9jdW1lbnQ6CgogICAgSSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gW0dvb2dsZV1bMV0gdGhhbiBmcm9tCiAgICBbWWFob29dWzJdIG9yIFtNU05dWzNdLgoKICAgIFsxXTogaHR0cDovL2dvb2dsZS5jb20vICAgICAgICAiR29vZ2xlIgogICAgWzJdOiBodHRwOi8vc2VhcmNoLnlhaG9vLmNvbS8gICJZYWhvbyBTZWFyY2giCiAgICBbM106IGh0dHA6Ly9zZWFyY2gubXNuLmNvbS8gICAgIk1TTiBTZWFyY2giCgpPdXRwdXQ6CgogICAgJmx0O3AmZ3Q7SSBnZXQgMTAgdGltZXMgbW9yZSB0cmFmZmljIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL2dvb2dsZS5jb20vIgogICAgdGl0bGU9Ikdvb2dsZSImZ3Q7R29vZ2xlJmx0Oy9hJmd0OyB0aGFuIGZyb20gJmx0O2EgaHJlZj0iaHR0cDovL3NlYXJjaC55YWhvby5jb20vIgogICAgdGl0bGU9IllhaG9vIFNlYXJjaCImZ3Q7WWFob28mbHQ7L2EmZ3Q7IG9yICZsdDthIGhyZWY9Imh0dHA6Ly9zZWFyY2gubXNuLmNvbS8iCiAgICB0aXRsZT0iTVNOIFNlYXJjaCImZ3Q7TVNOJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgpUaGUgdGl0bGUgYXR0cmlidXRlIGlzIG9wdGlvbmFsLiBMaW5rIG5hbWVzIG1heSBjb250YWluIGxldHRlcnMsCm51bWJlcnMgYW5kIHNwYWNlcywgYnV0IGFyZSAqbm90KiBjYXNlIHNlbnNpdGl2ZToKCiAgICBJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICBbVGhlIE5ldyBZb3JrIFRpbWVzXVtOWSBUaW1lc10uCgogICAgW255IHRpbWVzXTogaHR0cDovL3d3dy5ueXRpbWVzLmNvbS8KCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJIHN0YXJ0IG15IG1vcm5pbmcgd2l0aCBhIGN1cCBvZiBjb2ZmZWUgYW5kCiAgICAmbHQ7YSBocmVmPSJodHRwOi8vd3d3Lm55dGltZXMuY29tLyImZ3Q7VGhlIE5ldyBZb3JrIFRpbWVzJmx0Oy9hJmd0Oy4mbHQ7L3AmZ3Q7CgoKIyMjIEltYWdlcyAjIyMKCkltYWdlIHN5bnRheCBpcyB2ZXJ5IG11Y2ggbGlrZSBsaW5rIHN5bnRheC4KCklubGluZSAodGl0bGVzIGFyZSBvcHRpb25hbCk6CgogICAgIVthbHQgdGV4dF0oL3BhdGgvdG8vaW1nLmpwZyAiVGl0bGUiKQoKUmVmZXJlbmNlLXN0eWxlOgoKICAgICFbYWx0IHRleHRdW2lkXQoKICAgIFtpZF06IC9wYXRoL3RvL2ltZy5qcGcgIlRpdGxlIgoKQm90aCBvZiB0aGUgYWJvdmUgZXhhbXBsZXMgcHJvZHVjZSB0aGUgc2FtZSBvdXRwdXQ6CgogICAgJmx0O2ltZyBzcmM9Ii9wYXRoL3RvL2ltZy5qcGciIGFsdD0iYWx0IHRleHQiIHRpdGxlPSJUaXRsZSIgLyZndDsKCgoKIyMjIENvZGUgIyMjCgpJbiBhIHJlZ3VsYXIgcGFyYWdyYXBoLCB5b3UgY2FuIGNyZWF0ZSBjb2RlIHNwYW4gYnkgd3JhcHBpbmcgdGV4dCBpbgpiYWNrdGljayBxdW90ZXMuIEFueSBhbXBlcnNhbmRzIChgJmFtcDtgKSBhbmQgYW5nbGUgYnJhY2tldHMgKGAmbHQ7YCBvcgpgJmd0O2ApIHdpbGwgYXV0b21hdGljYWxseSBiZSB0cmFuc2xhdGVkIGludG8gSFRNTCBlbnRpdGllcy4gVGhpcyBtYWtlcwppdCBlYXN5IHRvIHVzZSBNYXJrZG93biB0byB3cml0ZSBhYm91dCBIVE1MIGV4YW1wbGUgY29kZToKCiAgICBJIHN0cm9uZ2x5IHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIGFueSBgJmx0O2JsaW5rJmd0O2AgdGFncy4KCiAgICBJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlIGAmYW1wO21kYXNoO2AKICAgIGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkIGVudGl0ZXMgbGlrZSBgJmFtcDsjODIxMjtgLgoKT3V0cHV0OgoKICAgICZsdDtwJmd0O0kgc3Ryb25nbHkgcmVjb21tZW5kIGFnYWluc3QgdXNpbmcgYW55CiAgICAmbHQ7Y29kZSZndDsmYW1wO2x0O2JsaW5rJmFtcDtndDsmbHQ7L2NvZGUmZ3Q7IHRhZ3MuJmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cCZndDtJIHdpc2ggU21hcnR5UGFudHMgdXNlZCBuYW1lZCBlbnRpdGllcyBsaWtlCiAgICAmbHQ7Y29kZSZndDsmYW1wO2FtcDttZGFzaDsmbHQ7L2NvZGUmZ3Q7IGluc3RlYWQgb2YgZGVjaW1hbC1lbmNvZGVkCiAgICBlbnRpdGVzIGxpa2UgJmx0O2NvZGUmZ3Q7JmFtcDthbXA7IzgyMTI7Jmx0Oy9jb2RlJmd0Oy4mbHQ7L3AmZ3Q7CgoKVG8gc3BlY2lmeSBhbiBlbnRpcmUgYmxvY2sgb2YgcHJlLWZvcm1hdHRlZCBjb2RlLCBpbmRlbnQgZXZlcnkgbGluZSBvZgp0aGUgYmxvY2sgYnkgNCBzcGFjZXMgb3IgMSB0YWIuIEp1c3QgbGlrZSB3aXRoIGNvZGUgc3BhbnMsIGAmYW1wO2AsIGAmbHQ7YCwKYW5kIGAmZ3Q7YCBjaGFyYWN0ZXJzIHdpbGwgYmUgZXNjYXBlZCBhdXRvbWF0aWNhbGx5LgoKTWFya2Rvd246CgogICAgSWYgeW91IHdhbnQgeW91ciBwYWdlIHRvIHZhbGlkYXRlIHVuZGVyIFhIVE1MIDEuMCBTdHJpY3QsCiAgICB5b3UndmUgZ290IHRvIHB1dCBwYXJhZ3JhcGggdGFncyBpbiB5b3VyIGJsb2NrcXVvdGVzOgoKICAgICAgICAmbHQ7YmxvY2txdW90ZSZndDsKICAgICAgICAgICAgJmx0O3AmZ3Q7Rm9yIGV4YW1wbGUuJmx0Oy9wJmd0OwogICAgICAgICZsdDsvYmxvY2txdW90ZSZndDsKCk91dHB1dDoKCiAgICAmbHQ7cCZndDtJZiB5b3Ugd2FudCB5b3VyIHBhZ2UgdG8gdmFsaWRhdGUgdW5kZXIgWEhUTUwgMS4wIFN0cmljdCwKICAgIHlvdSd2ZSBnb3QgdG8gcHV0IHBhcmFncmFwaCB0YWdzIGluIHlvdXIgYmxvY2txdW90ZXM6Jmx0Oy9wJmd0OwogICAgCiAgICAmbHQ7cHJlJmd0OyZsdDtjb2RlJmd0OyZhbXA7bHQ7YmxvY2txdW90ZSZhbXA7Z3Q7CiAgICAgICAgJmFtcDtsdDtwJmFtcDtndDtGb3IgZXhhbXBsZS4mYW1wO2x0Oy9wJmFtcDtndDsKICAgICZhbXA7bHQ7L2Jsb2NrcXVvdGUmYW1wO2d0OwogICAgJmx0Oy9jb2RlJmd0OyZsdDsvcHJlJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6ICdtYXJrZG93bicsCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICB0aGVtZTogImRlZmF1bHQiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1tYXJrZG93bjwvY29kZT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/markdown/markdown.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJtYXJrZG93biIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSB7CgogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjbUNmZywgeyBuYW1lOiAneG1sJywgaHRtbE1vZGU6IHRydWUgfSk7CgogIHZhciBoZWFkZXIgICA9ICdoZWFkZXInCiAgLCAgIGNvZGUgICAgID0gJ2NvbW1lbnQnCiAgLCAgIHF1b3RlICAgID0gJ3F1b3RlJwogICwgICBsaXN0ICAgICA9ICdzdHJpbmcnCiAgLCAgIGhyICAgICAgID0gJ2hyJwogICwgICBsaW5rdGV4dCA9ICdsaW5rJwogICwgICBsaW5raHJlZiA9ICdzdHJpbmcnCiAgLCAgIGVtICAgICAgID0gJ2VtJwogICwgICBzdHJvbmcgICA9ICdzdHJvbmcnCiAgLCAgIGVtc3Ryb25nID0gJ2Vtc3Ryb25nJzsKCiAgdmFyIGhyUkUgPSAvXihbKlwtPV9dKSg/OlxzKlwxKXsyLH1ccyokLwogICwgICB1bFJFID0gL15bKlwtK11ccysvCiAgLCAgIG9sUkUgPSAvXlswLTldK1wuXHMrLwogICwgICBoZWFkZXJSRSA9IC9eKD86XD17Myx9fC17Myx9KSQvCiAgLCAgIHRleHRSRSA9IC9eW15cWypfXFw8PmBdKy87CgogIGZ1bmN0aW9uIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS5mID0gc3RhdGUuaW5saW5lID0gZjsKICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpOwogIH0KCiAgZnVuY3Rpb24gc3dpdGNoQmxvY2soc3RyZWFtLCBzdGF0ZSwgZikgewogICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrID0gZjsKICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpOwogIH0KCgogIC8vIEJsb2NrcwoKICBmdW5jdGlvbiBibGFua0xpbmUoc3RhdGUpIHsKICAgIC8vIFJlc2V0IEVNIHN0YXRlCiAgICBzdGF0ZS5lbSA9IGZhbHNlOwogICAgLy8gUmVzZXQgU1RST05HIHN0YXRlCiAgICBzdGF0ZS5zdHJvbmcgPSBmYWxzZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgZnVuY3Rpb24gYmxvY2tOb3JtYWwoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1hdGNoOwogICAgaWYgKHN0YXRlLmluZGVudGF0aW9uRGlmZiA+PSA0KSB7CiAgICAgIHN0YXRlLmluZGVudGF0aW9uIC09IHN0YXRlLmluZGVudGF0aW9uRGlmZjsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gY29kZTsKICAgIH0gZWxzZSBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICcjJyB8fCBzdHJlYW0ubWF0Y2goaGVhZGVyUkUpKSB7CiAgICAgIHN0YXRlLmhlYWRlciA9IHRydWU7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJz4nKSkgewogICAgICBzdGF0ZS5pbmRlbnRhdGlvbisrOwogICAgICBzdGF0ZS5xdW90ZSA9IHRydWU7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5wZWVrKCkgPT09ICdbJykgewogICAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGZvb3Rub3RlTGluayk7CiAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChoclJFLCB0cnVlKSkgewogICAgICByZXR1cm4gaHI7CiAgICB9IGVsc2UgaWYgKG1hdGNoID0gc3RyZWFtLm1hdGNoKHVsUkUsIHRydWUpIHx8IHN0cmVhbS5tYXRjaChvbFJFLCB0cnVlKSkgewogICAgICBzdGF0ZS5pbmRlbnRhdGlvbiArPSBtYXRjaFswXS5sZW5ndGg7CiAgICAgIHJldHVybiBsaXN0OwogICAgfQogICAgCiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIHN0YXRlLmlubGluZSk7CiAgfQoKICBmdW5jdGlvbiBodG1sQmxvY2soc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIHN0eWxlID0gaHRtbE1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZS5odG1sU3RhdGUpOwogICAgaWYgKHN0eWxlID09PSAndGFnJyAmJiBzdGF0ZS5odG1sU3RhdGUudHlwZSAhPT0gJ29wZW5UYWcnICYmICFzdGF0ZS5odG1sU3RhdGUuY29udGV4dCkgewogICAgICBzdGF0ZS5mID0gaW5saW5lTm9ybWFsOwogICAgICBzdGF0ZS5ibG9jayA9IGJsb2NrTm9ybWFsOwogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KCgogIC8vIElubGluZQogIGZ1bmN0aW9uIGdldFR5cGUoc3RhdGUpIHsKICAgIHZhciBzdHlsZXMgPSBbXTsKICAgIAogICAgaWYgKHN0YXRlLnN0cm9uZykgeyBzdHlsZXMucHVzaChzdGF0ZS5lbSA/IGVtc3Ryb25nIDogc3Ryb25nKTsgfQogICAgZWxzZSBpZiAoc3RhdGUuZW0pIHsgc3R5bGVzLnB1c2goZW0pOyB9CiAgICAKICAgIGlmIChzdGF0ZS5oZWFkZXIpIHsgc3R5bGVzLnB1c2goaGVhZGVyKTsgfQogICAgaWYgKHN0YXRlLnF1b3RlKSB7IHN0eWxlcy5wdXNoKHF1b3RlKTsgfQoKICAgIHJldHVybiBzdHlsZXMubGVuZ3RoID8gc3R5bGVzLmpvaW4oJyAnKSA6IG51bGw7CiAgfQoKICBmdW5jdGlvbiBoYW5kbGVUZXh0KHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0ubWF0Y2godGV4dFJFLCB0cnVlKSkgewogICAgICByZXR1cm4gZ2V0VHlwZShzdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gdW5kZWZpbmVkOyAgICAgICAgCiAgfQoKICBmdW5jdGlvbiBpbmxpbmVOb3JtYWwoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIHN0eWxlID0gc3RhdGUudGV4dChzdHJlYW0sIHN0YXRlKQogICAgaWYgKHR5cGVvZiBzdHlsZSAhPT0gJ3VuZGVmaW5lZCcpCiAgICAgIHJldHVybiBzdHlsZTsKICAgIAogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIAogICAgaWYgKGNoID09PSAnXFwnKSB7CiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiBnZXRUeXBlKHN0YXRlKTsKICAgIH0KICAgIGlmIChjaCA9PT0gJ2AnKSB7CiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgaW5saW5lRWxlbWVudChjb2RlLCAnYCcpKTsKICAgIH0KICAgIGlmIChjaCA9PT0gJ1snKSB7CiAgICAgIHJldHVybiBzd2l0Y2hJbmxpbmUoc3RyZWFtLCBzdGF0ZSwgbGlua1RleHQpOwogICAgfQogICAgaWYgKGNoID09PSAnPCcgJiYgc3RyZWFtLm1hdGNoKC9eXHcvLCBmYWxzZSkpIHsKICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgcmV0dXJuIHN3aXRjaEJsb2NrKHN0cmVhbSwgc3RhdGUsIGh0bWxCbG9jayk7CiAgICB9CgogICAgdmFyIHQgPSBnZXRUeXBlKHN0YXRlKTsKICAgIGlmIChjaCA9PT0gJyonIHx8IGNoID09PSAnXycpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoY2gpKSB7CiAgICAgICAgcmV0dXJuIChzdGF0ZS5zdHJvbmcgPSAhc3RhdGUuc3Ryb25nKSA/IGdldFR5cGUoc3RhdGUpIDogdDsKICAgICAgfQogICAgICByZXR1cm4gKHN0YXRlLmVtID0gIXN0YXRlLmVtKSA/IGdldFR5cGUoc3RhdGUpIDogdDsKICAgIH0KICAgIAogICAgcmV0dXJuIGdldFR5cGUoc3RhdGUpOwogIH0KCiAgZnVuY3Rpb24gbGlua1RleHQoc3RyZWFtLCBzdGF0ZSkgewogICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgaWYgKGNoID09PSAnXFwnKSBzdHJlYW0ubmV4dCgpOwogICAgICBpZiAoY2ggPT09ICddJykgewogICAgICAgIHN0YXRlLmlubGluZSA9IHN0YXRlLmYgPSBsaW5rSHJlZjsKICAgICAgICByZXR1cm4gbGlua3RleHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBsaW5rdGV4dDsKICB9CgogIGZ1bmN0aW9uIGxpbmtIcmVmKHN0cmVhbSwgc3RhdGUpIHsKICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PT0gJygnIHx8IGNoID09PSAnWycpIHsKICAgICAgcmV0dXJuIHN3aXRjaElubGluZShzdHJlYW0sIHN0YXRlLCBpbmxpbmVFbGVtZW50KGxpbmtocmVmLCBjaCA9PT0gJygnID8gJyknIDogJ10nKSk7CiAgICB9CiAgICByZXR1cm4gJ2Vycm9yJzsKICB9CgogIGZ1bmN0aW9uIGZvb3Rub3RlTGluayhzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9eW15cXV0qXF06LywgdHJ1ZSkpIHsKICAgICAgc3RhdGUuZiA9IGZvb3Rub3RlVXJsOwogICAgICByZXR1cm4gbGlua3RleHQ7CiAgICB9CiAgICByZXR1cm4gc3dpdGNoSW5saW5lKHN0cmVhbSwgc3RhdGUsIGlubGluZU5vcm1hbCk7CiAgfQoKICBmdW5jdGlvbiBmb290bm90ZVVybChzdHJlYW0sIHN0YXRlKSB7CiAgICBzdHJlYW0uZWF0U3BhY2UoKTsKICAgIHN0cmVhbS5tYXRjaCgvXlteXHNdKy8sIHRydWUpOwogICAgc3RhdGUuZiA9IHN0YXRlLmlubGluZSA9IGlubGluZU5vcm1hbDsKICAgIHJldHVybiBsaW5raHJlZjsKICB9CgogIGZ1bmN0aW9uIGlubGluZVJFKGVuZENoYXIpIHsKICAgIGlmICghaW5saW5lUkVbZW5kQ2hhcl0pIHsKICAgICAgLy8gbWF0Y2ggYW55IG5vdC1lc2NhcGVkLW5vbi1lbmRDaGFyIGFuZCBhbnkgZXNjYXBlZCBjaGFyCiAgICAgIC8vIHRoZW4gbWF0Y2ggZW5kQ2hhciBvciBlb2wKICAgICAgaW5saW5lUkVbZW5kQ2hhcl0gPSBuZXcgUmVnRXhwKCdeKD86W15cXFxcXFwnICsgZW5kQ2hhciArICddfFxcXFwuKSooPzpcXCcgKyBlbmRDaGFyICsgJ3wkKScpOwogICAgfQogICAgcmV0dXJuIGlubGluZVJFW2VuZENoYXJdOwogIH0KCiAgZnVuY3Rpb24gaW5saW5lRWxlbWVudCh0eXBlLCBlbmRDaGFyLCBuZXh0KSB7CiAgICBuZXh0ID0gbmV4dCB8fCBpbmxpbmVOb3JtYWw7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBzdHJlYW0ubWF0Y2goaW5saW5lUkUoZW5kQ2hhcikpOwogICAgICBzdGF0ZS5pbmxpbmUgPSBzdGF0ZS5mID0gbmV4dDsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9OwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGY6IGJsb2NrTm9ybWFsLAogICAgICAgIAogICAgICAgIGJsb2NrOiBibG9ja05vcm1hbCwKICAgICAgICBodG1sU3RhdGU6IGh0bWxNb2RlLnN0YXJ0U3RhdGUoKSwKICAgICAgICBpbmRlbnRhdGlvbjogMCwKICAgICAgICAKICAgICAgICBpbmxpbmU6IGlubGluZU5vcm1hbCwKICAgICAgICB0ZXh0OiBoYW5kbGVUZXh0LAogICAgICAgIGVtOiBmYWxzZSwKICAgICAgICBzdHJvbmc6IGZhbHNlLAogICAgICAgIGhlYWRlcjogZmFsc2UsCiAgICAgICAgcXVvdGU6IGZhbHNlCiAgICAgIH07CiAgICB9LAoKICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykgewogICAgICByZXR1cm4gewogICAgICAgIGY6IHMuZiwKICAgICAgICAKICAgICAgICBibG9jazogcy5ibG9jaywKICAgICAgICBodG1sU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBzLmh0bWxTdGF0ZSksCiAgICAgICAgaW5kZW50YXRpb246IHMuaW5kZW50YXRpb24sCiAgICAgICAgCiAgICAgICAgaW5saW5lOiBzLmlubGluZSwKICAgICAgICB0ZXh0OiBzLnRleHQsCiAgICAgICAgZW06IHMuZW0sCiAgICAgICAgc3Ryb25nOiBzLnN0cm9uZywKICAgICAgICBoZWFkZXI6IHMuaGVhZGVyLAogICAgICAgIHF1b3RlOiBzLnF1b3RlCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXHMqJC8sIHRydWUpKSB7IHJldHVybiBibGFua0xpbmUoc3RhdGUpOyB9CgogICAgICAgIC8vIFJlc2V0IHN0YXRlLmhlYWRlcgogICAgICAgIHN0YXRlLmhlYWRlciA9IGZhbHNlOwogICAgICAgIC8vIFJlc2V0IHN0YXRlLnF1b3RlCiAgICAgICAgc3RhdGUucXVvdGUgPSBmYWxzZTsKCiAgICAgICAgc3RhdGUuZiA9IHN0YXRlLmJsb2NrOwogICAgICAgIHZhciBpbmRlbnRhdGlvbiA9IHN0cmVhbS5tYXRjaCgvXlxzKi8sIHRydWUpWzBdLnJlcGxhY2UoL1x0L2csICcgICAgJykubGVuZ3RoOwogICAgICAgIHN0YXRlLmluZGVudGF0aW9uRGlmZiA9IGluZGVudGF0aW9uIC0gc3RhdGUuaW5kZW50YXRpb247CiAgICAgICAgc3RhdGUuaW5kZW50YXRpb24gPSBpbmRlbnRhdGlvbjsKICAgICAgICBpZiAoaW5kZW50YXRpb24gPiAwKSB7IHJldHVybiBudWxsOyB9CiAgICAgIH0KICAgICAgcmV0dXJuIHN0YXRlLmYoc3RyZWFtLCBzdGF0ZSk7CiAgICB9LAoKICAgIGJsYW5rTGluZTogYmxhbmtMaW5lLAoKICAgIGdldFR5cGU6IGdldFR5cGUKICB9OwoKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1tYXJrZG93biIsICJtYXJrZG93biIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE15U1FMIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJteXNxbC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBNeVNRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tIENvbW1lbnQgZm9yIHRoZSBjb2RlCi0tIE15U1FMIE1vZGUgZm9yIENvZGVNaXJyb3IyIGJ5IE15U1FMVG9vbHMgaHR0cDovL2dpdGh1Yi5jb20vcGFydHlkcm9pZC9NeVNRTC1Ub29scwpTRUxFQ1QgIFVOSVFVRSBgdmFyMWAgYXMgYHZhcmlhYmxlYCwKICAgICAgICBNQVgoYHZhcjVgKSBhcyBgbWF4YCwKICAgICAgICBNSU4oYHZhcjVgKSBhcyBgbWluYCwKICAgICAgICBTVERFVihgdmFyNWApIGFzIGBkZXZgCkZST00gYHRhYmxlYAoKTEVGVCBKT0lOIGB0YWJsZTJgIE9OIGB2YXIyYCA9IGB2YXJpYWJsZWAKCk9SREVSIEJZIGB2YXIzYCBERVNDCkdST1VQIEJZIGBncm91cHZhcmAKCkxJTUlUIDAsMzA7Cgo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogInRleHQveC1teXNxbCIsCiAgICAgICAgdGFiTW9kZTogImluZGVudCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtbXlzcWw8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/mysql/mysql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICoJTXlTUUwgTW9kZSBmb3IgQ29kZU1pcnJvciAyIGJ5IE15U1FMLVRvb2xzCiAqCUBhdXRob3IgSmFtZXMgVGhvcm5lIChwYXJ0eWRyb2lkKQogKglAbGluayAJaHR0cDovL2dpdGh1Yi5jb20vcGFydHlkcm9pZC9NeVNRTC1Ub29scwogKiAJQGxpbmsgCWh0dHA6Ly9teXNxbHRvb2xzLm9yZwogKglAdmVyc2lvbiAwMi9KYW4vMjAxMgoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm15c3FsIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gd29yZFJlZ2V4cCh3b3JkcykgewogICAgcmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiICsgd29yZHMuam9pbigifCIpICsgIikkIiwgImkiKTsKICB9CiAgdmFyIG9wcyA9IHdvcmRSZWdleHAoWyJzdHIiLCAibGFuZyIsICJsYW5nbWF0Y2hlcyIsICJkYXRhdHlwZSIsICJib3VuZCIsICJzYW1ldGVybSIsICJpc2lyaSIsICJpc3VyaSIsCiAgICAgICAgICAgICAgICAgICAgICAgICJpc2JsYW5rIiwgImlzbGl0ZXJhbCIsICJ1bmlvbiIsICJhIl0pOwogIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoWwogIAkoJ0FDQ0VTU0lCTEUnKSwoJ0FMVEVSJyksKCdBUycpLCgnQkVGT1JFJyksKCdCSU5BUlknKSwoJ0JZJyksKCdDQVNFJyksKCdDSEFSQUNURVInKSwoJ0NPTFVNTicpLCgnQ09OVElOVUUnKSwoJ0NST1NTJyksKCdDVVJSRU5UX1RJTUVTVEFNUCcpLCgnREFUQUJBU0UnKSwoJ0RBWV9NSUNST1NFQ09ORCcpLCgnREVDJyksKCdERUZBVUxUJyksCgkoJ0RFU0MnKSwoJ0RJU1RJTkNUJyksKCdET1VCTEUnKSwoJ0VBQ0gnKSwoJ0VOQ0xPU0VEJyksKCdFWElUJyksKCdGRVRDSCcpLCgnRkxPQVQ4JyksKCdGT1JFSUdOJyksKCdHUkFOVCcpLCgnSElHSF9QUklPUklUWScpLCgnSE9VUl9TRUNPTkQnKSwoJ0lOJyksKCdJTk5FUicpLCgnSU5TRVJUJyksKCdJTlQyJyksKCdJTlQ4JyksCgkoJ0lOVE8nKSwoJ0pPSU4nKSwoJ0tJTEwnKSwoJ0xFRlQnKSwoJ0xJTkVBUicpLCgnTE9DQUxUSU1FJyksKCdMT05HJyksKCdMT09QJyksKCdNQVRDSCcpLCgnTUVESVVNVEVYVCcpLCgnTUlOVVRFX1NFQ09ORCcpLCgnTkFUVVJBTCcpLCgnTlVMTCcpLCgnT1BUSU1JWkUnKSwoJ09SJyksKCdPVVRFUicpLCgnUFJJTUFSWScpLAoJKCdSQU5HRScpLCgnUkVBRF9XUklURScpLCgnUkVHRVhQJyksKCdSRVBFQVQnKSwoJ1JFU1RSSUNUJyksKCdSSUdIVCcpLCgnU0NIRU1BUycpLCgnU0VOU0lUSVZFJyksKCdTSE9XJyksKCdTUEVDSUZJQycpLCgnU1FMU1RBVEUnKSwoJ1NRTF9DQUxDX0ZPVU5EX1JPV1MnKSwoJ1NUQVJUSU5HJyksKCdURVJNSU5BVEVEJyksCgkoJ1RJTllJTlQnKSwoJ1RSQUlMSU5HJyksKCdVTkRPJyksKCdVTkxPQ0snKSwoJ1VTQUdFJyksKCdVVENfREFURScpLCgnVkFMVUVTJyksKCdWQVJDSEFSQUNURVInKSwoJ1dIRVJFJyksKCdXUklURScpLCgnWkVST0ZJTEwnKSwoJ0FMTCcpLCgnQU5EJyksKCdBU0VOU0lUSVZFJyksKCdCSUdJTlQnKSwoJ0JPVEgnKSwoJ0NBU0NBREUnKSwKCSgnQ0hBUicpLCgnQ09MTEFURScpLCgnQ09OU1RSQUlOVCcpLCgnQ1JFQVRFJyksKCdDVVJSRU5UX1RJTUUnKSwoJ0NVUlNPUicpLCgnREFZX0hPVVInKSwoJ0RBWV9TRUNPTkQnKSwoJ0RFQ0xBUkUnKSwoJ0RFTEVURScpLCgnREVURVJNSU5JU1RJQycpLCgnRElWJyksKCdEVUFMJyksKCdFTFNFSUYnKSwoJ0VYSVNUUycpLCgnRkFMU0UnKSwKCSgnRkxPQVQ0JyksKCdGT1JDRScpLCgnRlVMTFRFWFQnKSwoJ0hBVklORycpLCgnSE9VUl9NSU5VVEUnKSwoJ0lHTk9SRScpLCgnSU5GSUxFJyksKCdJTlNFTlNJVElWRScpLCgnSU5UMScpLCgnSU5UNCcpLCgnSU5URVJWQUwnKSwoJ0lURVJBVEUnKSwoJ0tFWVMnKSwoJ0xFQVZFJyksKCdMSU1JVCcpLCgnTE9BRCcpLCgnTE9DSycpLAoJKCdMT05HVEVYVCcpLCgnTUFTVEVSX1NTTF9WRVJJRllfU0VSVkVSX0NFUlQnKSwoJ01FRElVTUlOVCcpLCgnTUlOVVRFX01JQ1JPU0VDT05EJyksKCdNT0RJRklFUycpLCgnTk9fV1JJVEVfVE9fQklOTE9HJyksKCdPTicpLCgnT1BUSU9OQUxMWScpLCgnT1VUJyksKCdQUkVDSVNJT04nKSwoJ1BVUkdFJyksKCdSRUFEUycpLAoJKCdSRUZFUkVOQ0VTJyksKCdSRU5BTUUnKSwoJ1JFUVVJUkUnKSwoJ1JFVk9LRScpLCgnU0NIRU1BJyksKCdTRUxFQ1QnKSwoJ1NFVCcpLCgnU1BBVElBTCcpLCgnU1FMRVhDRVBUSU9OJyksKCdTUUxfQklHX1JFU1VMVCcpLCgnU1NMJyksKCdUQUJMRScpLCgnVElOWUJMT0InKSwoJ1RPJyksKCdUUlVFJyksKCdVTklRVUUnKSwKCSgnVVBEQVRFJyksKCdVU0lORycpLCgnVVRDX1RJTUVTVEFNUCcpLCgnVkFSQ0hBUicpLCgnV0hFTicpLCgnV0lUSCcpLCgnWUVBUl9NT05USCcpLCgnQUREJyksKCdBTkFMWVpFJyksKCdBU0MnKSwoJ0JFVFdFRU4nKSwoJ0JMT0InKSwoJ0NBTEwnKSwoJ0NIQU5HRScpLCgnQ0hFQ0snKSwoJ0NPTkRJVElPTicpLCgnQ09OVkVSVCcpLAoJKCdDVVJSRU5UX0RBVEUnKSwoJ0NVUlJFTlRfVVNFUicpLCgnREFUQUJBU0VTJyksKCdEQVlfTUlOVVRFJyksKCdERUNJTUFMJyksKCdERUxBWUVEJyksKCdERVNDUklCRScpLCgnRElTVElOQ1RST1cnKSwoJ0RST1AnKSwoJ0VMU0UnKSwoJ0VTQ0FQRUQnKSwoJ0VYUExBSU4nKSwoJ0ZMT0FUJyksKCdGT1InKSwoJ0ZST00nKSwKCSgnR1JPVVAnKSwoJ0hPVVJfTUlDUk9TRUNPTkQnKSwoJ0lGJyksKCdJTkRFWCcpLCgnSU5PVVQnKSwoJ0lOVCcpLCgnSU5UMycpLCgnSU5URUdFUicpLCgnSVMnKSwoJ0tFWScpLCgnTEVBRElORycpLCgnTElLRScpLCgnTElORVMnKSwoJ0xPQ0FMVElNRVNUQU1QJyksKCdMT05HQkxPQicpLCgnTE9XX1BSSU9SSVRZJyksCgkoJ01FRElVTUJMT0InKSwoJ01JRERMRUlOVCcpLCgnTU9EJyksKCdOT1QnKSwoJ05VTUVSSUMnKSwoJ09QVElPTicpLCgnT1JERVInKSwoJ09VVEZJTEUnKSwoJ1BST0NFRFVSRScpLCgnUkVBRCcpLCgnUkVBTCcpLCgnUkVMRUFTRScpLCgnUkVQTEFDRScpLCgnUkVUVVJOJyksKCdSTElLRScpLCgnU0VDT05EX01JQ1JPU0VDT05EJyksCgkoJ1NFUEFSQVRPUicpLCgnU01BTExJTlQnKSwoJ1NRTCcpLCgnU1FMV0FSTklORycpLCgnU1FMX1NNQUxMX1JFU1VMVCcpLCgnU1RSQUlHSFRfSk9JTicpLCgnVEhFTicpLCgnVElOWVRFWFQnKSwoJ1RSSUdHRVInKSwoJ1VOSU9OJyksKCdVTlNJR05FRCcpLCgnVVNFJyksKCdVVENfVElNRScpLCgnVkFSQklOQVJZJyksKCdWQVJZSU5HJyksCgkoJ1dISUxFJyksKCdYT1InKSwoJ0ZVTEwnKSwoJ0NPTFVNTlMnKSwoJ01JTicpLCgnTUFYJyksKCdTVERFVicpLCgnQ09VTlQnKQogIF0pOwogIHZhciBvcGVyYXRvckNoYXJzID0gL1sqK1wtPD49JnxdLzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBjdXJQdW5jID0gbnVsbDsKICAgIGlmIChjaCA9PSAiJCIgfHwgY2ggPT0gIj8iKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXltcd1xkXSovKTsKICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICI8IiAmJiAhc3RyZWFtLm1hdGNoKC9eW1xzXHUwMGEwPV0vLCBmYWxzZSkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9eW15cc1x1MDBhMD5dKj4/Lyk7CiAgICAgIHJldHVybiAiYXRvbSI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiXCIiIHx8IGNoID09ICInIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuTGl0ZXJhbChjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICJgIikgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuT3BMaXRlcmFsKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoL1t7fVwoXCksXC47XFtcXV0vLnRlc3QoY2gpKSB7CiAgICAgIGN1clB1bmMgPSBjaDsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLSIpIHsKCQljaDIgPSBzdHJlYW0ubmV4dCgpOwoJCWlmKGNoMj09Ii0iKQoJCXsKCQkJc3RyZWFtLnNraXBUb0VuZCgpOwoJCQlyZXR1cm4gImNvbW1lbnQiOwoJCX0KCiAgICB9CiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwuX1wtXS8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW19cd1xkXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9cLV0vKTsKICAgICAgICByZXR1cm4gImF0b20iOwogICAgICB9CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwgdHlwZTsKICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gdG9rZW5PcExpdGVyYWwocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIGNoOwogICAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChjaCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIGNoID09ICJcXCI7CiAgICAgIH0KICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgIH07CiAgfQoKCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkgewogICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDsKICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICBpbmRlbnQ6IDAsCiAgICAgICAgICAgICAgY29sOiAwfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCkgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgaWYgKHN0eWxlICE9ICJjb21tZW50IiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gInBhdHRlcm4iKSB7CiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsICIpIiwgc3RyZWFtLmNvbHVtbigpKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCAiXSIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgIn0iLCBzdHJlYW0uY29sdW1uKCkpOwogICAgICBlbHNlIGlmICgvW1xdXH1cKV0vLnRlc3QoY3VyUHVuYykpIHsKICAgICAgICB3aGlsZSAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBjdXJQdW5jID09IHN0YXRlLmNvbnRleHQudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiLiIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSAmJiBzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgaWYgKC9bXH1cXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkKICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCAicGF0dGVybiIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09ICJwYXR0ZXJuIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikgewogICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoL1tcXVx9XS8udGVzdChmaXJzdENoYXIpKQogICAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQudHlwZSA9PSAicGF0dGVybiIpIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CgogICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTsKICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmNvbDsKICAgICAgZWxzZSBpZiAoY29udGV4dC5hbGlnbikKICAgICAgICByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtbXlzcWwiLCAibXlzcWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE5UcmlwbGVzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJudHJpcGxlcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VlZTsKICAgICAgfQogICAgPC9zdHlsZT4gICAKICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogTlRyaXBsZXMgbW9kZTwvaDE+Cjxmb3JtPgo8dGV4dGFyZWEgaWQ9Im50cmlwbGVzIiBuYW1lPSJudHJpcGxlcyI+ICAgIAo8aHR0cDovL1N1YjE+ICAgICA8aHR0cDovL3ByZWQxPiAgICAgPGh0dHA6Ly9vYmo+IC4KPGh0dHA6Ly9TdWIyPiAgICAgPGh0dHA6Ly9wcmVkMiNhbjI+ICJsaXRlcmFsIDEiIC4KPGh0dHA6Ly9TdWIzI2FuMz4gPGh0dHA6Ly9wcmVkMz4gICAgIF86Ym5vZGUzIC4KXzpibm9kZTQgICAgICAgICAgPGh0dHA6Ly9wcmVkND4gICAgICJsaXRlcmFsIDIiQGxhbmcgLgpfOmJub2RlNSAgICAgICAgICA8aHR0cDovL3ByZWQ1PiAgICAgImxpdGVyYWwgMyJeXjxodHRwOi8vdHlwZT4gLgo8L3RleHRhcmVhPgo8L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJudHJpcGxlcyIpLCB7fSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L24tdHJpcGxlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ntriples/ntriples.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBUaGlzIHNjcmlwdCBwcm92aWRlcyBzeW50YXggaGlnaGxpZ2h0aW5nIHN1cHBvcnQgZm9yIAoqIHRoZSBOdHJpcGxlcyBmb3JtYXQuCiogTnRyaXBsZXMgZm9ybWF0IHNwZWNpZmljYXRpb246IAoqICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9yZGYtdGVzdGNhc2VzLyNudHJpcGxlcwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qIAogICAgVGhlIGZvbGxvd2luZyBleHByZXNzaW9uIGRlZmluZXMgdGhlIGRlZmluZWQgQVNGIGdyYW1tYXIgdHJhbnNpdGlvbnMuCgogICAgcHJlX3N1YmplY3QgLT4KICAgICAgICB7CiAgICAgICAgKCB3cml0aW5nX3N1YmplY3RfdXJpIHwgd3JpdGluZ19ibm9kZV91cmkgKQogICAgICAgICAgICAtPiBwcmVfcHJlZGljYXRlIAogICAgICAgICAgICAgICAgLT4gd3JpdGluZ19wcmVkaWNhdGVfdXJpIAogICAgICAgICAgICAgICAgICAgIC0+IHByZV9vYmplY3QgCiAgICAgICAgICAgICAgICAgICAgICAgIC0+IHdyaXRpbmdfb2JqZWN0X3VyaSB8IHdyaXRpbmdfb2JqZWN0X2Jub2RlIHwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRpbmdfb2JqZWN0X2xpdGVyYWwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gd3JpdGluZ19saXRlcmFsX2xhbmcgfCB3cml0aW5nX2xpdGVyYWxfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IHBvc3Rfb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gQkVHSU4KICAgICAgICAgfSBvdGhlcndpc2UgewogICAgICAgICAgICAgLT4gRVJST1IKICAgICAgICAgfQoqLwpDb2RlTWlycm9yLmRlZmluZU1vZGUoIm50cmlwbGVzIiwgZnVuY3Rpb24oKSB7ICAKCiAgTG9jYXRpb24gPSB7CiAgICBQUkVfU1VCSkVDVCAgICAgICAgIDogMCwKICAgIFdSSVRJTkdfU1VCX1VSSSAgICAgOiAxLAogICAgV1JJVElOR19CTk9ERV9VUkkgICA6IDIsCiAgICBQUkVfUFJFRCAgICAgICAgICAgIDogMywKICAgIFdSSVRJTkdfUFJFRF9VUkkgICAgOiA0LAogICAgUFJFX09CSiAgICAgICAgICAgICA6IDUsCiAgICBXUklUSU5HX09CSl9VUkkgICAgIDogNiwKICAgIFdSSVRJTkdfT0JKX0JOT0RFICAgOiA3LAogICAgV1JJVElOR19PQkpfTElURVJBTCA6IDgsCiAgICBXUklUSU5HX0xJVF9MQU5HICAgIDogOSwKICAgIFdSSVRJTkdfTElUX1RZUEUgICAgOiAxMCwKICAgIFBPU1RfT0JKICAgICAgICAgICAgOiAxMSwKICAgIEVSUk9SICAgICAgICAgICAgICAgOiAxMgogIH07CiAgZnVuY3Rpb24gdHJhbnNpdFN0YXRlKGN1cnJTdGF0ZSwgYykgewogICAgdmFyIGN1cnJMb2NhdGlvbiA9IGN1cnJTdGF0ZS5sb2NhdGlvbjsKICAgIHZhciByZXQ7CiAgICAKICAgIC8vIE9wZW5pbmcuCiAgICBpZiAgICAgKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19TVUJfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1NVQkpFQ1QgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX1BSRUQgICAgJiYgYyA9PSAnPCcpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfUFJFRF9VUkk7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfT0JKICAgICAmJiBjID09ICc8JykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19PQkpfVVJJOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnXycpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0JOT0RFOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgJiYgYyA9PSAnIicpIHJldCA9IExvY2F0aW9uLldSSVRJTkdfT0JKX0xJVEVSQUw7CiAgICAKICAgIC8vIENsb3NpbmcuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX1NVQl9VUkkgICAgICYmIGMgPT0gJz4nKSByZXQgPSBMb2NhdGlvbi5QUkVfUFJFRDsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfQk5PREVfVVJJICAgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBSRV9QUkVEOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19QUkVEX1VSSSAgICAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUFJFX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfT0JKX1VSSSAgICAgJiYgYyA9PSAnPicpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfQk5PREUgICAmJiBjID09ICcgJykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJyInKSByZXQgPSBMb2NhdGlvbi5QT1NUX09CSjsKICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLldSSVRJTkdfTElUX0xBTkcgJiYgYyA9PSAnICcpIHJldCA9IExvY2F0aW9uLlBPU1RfT0JKOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRSAmJiBjID09ICc+JykgcmV0ID0gTG9jYXRpb24uUE9TVF9PQko7CiAgICAKICAgIC8vIENsb3NpbmcgdHlwZWQgYW5kIGxhbmd1YWdlIGxpdGVyYWwuCiAgICBlbHNlIGlmKGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5XUklUSU5HX09CSl9MSVRFUkFMICYmIGMgPT0gJ0AnKSByZXQgPSBMb2NhdGlvbi5XUklUSU5HX0xJVF9MQU5HOwogICAgZWxzZSBpZihjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uV1JJVElOR19PQkpfTElURVJBTCAmJiBjID09ICdeJykgcmV0ID0gTG9jYXRpb24uV1JJVElOR19MSVRfVFlQRTsKCiAgICAvLyBTcGFjZXMuCiAgICBlbHNlIGlmKCBjID09ICcgJyAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QUkVfU1VCSkVDVCB8fCAKICAgICAgICAgICAgICAgY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBSRV9QUkVEICAgIHx8IAogICAgICAgICAgICAgICBjdXJyTG9jYXRpb24gPT0gTG9jYXRpb24uUFJFX09CSiAgICAgfHwgCiAgICAgICAgICAgICAgIGN1cnJMb2NhdGlvbiA9PSBMb2NhdGlvbi5QT1NUX09CSgogICAgICAgICAgICAgKQogICAgICAgICAgICkgcmV0ID0gY3VyckxvY2F0aW9uOwogICAgCiAgICAvLyBSZXNldC4KICAgIGVsc2UgaWYoY3VyckxvY2F0aW9uID09IExvY2F0aW9uLlBPU1RfT0JKICYmIGMgPT0gJy4nKSByZXQgPSBMb2NhdGlvbi5QUkVfU1VCSkVDVDsgICAgCiAgICAKICAgIC8vIEVycm9yCiAgICBlbHNlIHJldCA9IExvY2F0aW9uLkVSUk9SOwogICAgCiAgICBjdXJyU3RhdGUubG9jYXRpb249cmV0OwogIH0KCiAgdW50aWxTcGFjZSAgPSBmdW5jdGlvbihjKSB7IHJldHVybiBjICE9ICcgJzsgfTsKICB1bnRpbEVuZFVSSSA9IGZ1bmN0aW9uKGMpIHsgcmV0dXJuIGMgIT0gJz4nOyB9OwogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgIHJldHVybiB7IAogICAgICAgICAgIGxvY2F0aW9uIDogTG9jYXRpb24uUFJFX1NVQkpFQ1QsCiAgICAgICAgICAgdXJpcyAgICAgOiBbXSwKICAgICAgICAgICBhbmNob3JzICA6IFtdLAogICAgICAgICAgIGJub2RlcyAgIDogW10sCiAgICAgICAgICAgbGFuZ3MgICAgOiBbXSwKICAgICAgICAgICB0eXBlcyAgICA6IFtdCiAgICAgICB9OwogICAgfSwKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgIGlmKGNoID09ICc8JykgewogICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgdmFyIHBhcnNlZFVSSSA9ICcnOwogICAgICAgICBzdHJlYW0uZWF0V2hpbGUoIGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyMnICYmIGMgIT0gJz4nICkgeyBwYXJzZWRVUkkgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30gKTsKICAgICAgICAgc3RhdGUudXJpcy5wdXNoKHBhcnNlZFVSSSk7CiAgICAgICAgIGlmKCBzdHJlYW0ubWF0Y2goJyMnLCBmYWxzZSkgKSByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnPicpOwogICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnIycpIHsKICAgICAgICB2YXIgcGFyc2VkQW5jaG9yID0gJyc7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoYyAhPSAnPicgJiYgYyAhPSAnICcpIHsgcGFyc2VkQW5jaG9yKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlfSk7CiAgICAgICAgc3RhdGUuYW5jaG9ycy5wdXNoKHBhcnNlZEFuY2hvcik7CiAgICAgICAgcmV0dXJuICd2YXJpYWJsZS0yJzsKICAgICAgfQogICAgICBpZihjaCA9PSAnPicpIHsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKGNoID09ICdfJykgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgICAgICB2YXIgcGFyc2VkQk5vZGUgPSAnJzsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShmdW5jdGlvbihjKSB7IGlmKCBjICE9ICcgJyApIHsgcGFyc2VkQk5vZGUgKz0gYzsgcmV0dXJuIHRydWU7IH0gcmV0dXJuIGZhbHNlO30pOwogICAgICAgICAgc3RhdGUuYm5vZGVzLnB1c2gocGFyc2VkQk5vZGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJyAnKTsKICAgICAgICAgIHJldHVybiAnYnVpbHRpbic7CiAgICAgIH0KICAgICAgaWYoY2ggPT0gJyInKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSggZnVuY3Rpb24oYykgeyByZXR1cm4gYyAhPSAnIic7IH0gKTsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICBpZiggc3RyZWFtLnBlZWsoKSAhPSAnQCcgJiYgc3RyZWFtLnBlZWsoKSAhPSAnXicgKSB7CiAgICAgICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnIicpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICdzdHJpbmcnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnQCcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdAJyk7CiAgICAgICAgICB2YXIgcGFyc2VkTGFuZyA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJyAnICkgeyBwYXJzZWRMYW5nICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9KTsKICAgICAgICAgIHN0YXRlLmxhbmdzLnB1c2gocGFyc2VkTGFuZyk7CiAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCAnICcpOwogICAgICAgICAgcmV0dXJuICdzdHJpbmctMic7CiAgICAgIH0KICAgICAgaWYoIGNoID09ICdeJyApIHsKICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsICdeJyk7CiAgICAgICAgICB2YXIgcGFyc2VkVHlwZSA9ICcnOwogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGZ1bmN0aW9uKGMpIHsgaWYoIGMgIT0gJz4nICkgeyBwYXJzZWRUeXBlICs9IGM7IHJldHVybiB0cnVlOyB9IHJldHVybiBmYWxzZTt9ICk7CiAgICAgICAgICBzdGF0ZS50eXBlcy5wdXNoKHBhcnNlZFR5cGUpOwogICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHRyYW5zaXRTdGF0ZShzdGF0ZSwgJz4nKTsKICAgICAgICAgIHJldHVybiAndmFyaWFibGUnOwogICAgICB9CiAgICAgIGlmKCBjaCA9PSAnICcgKSB7CiAgICAgICAgICB0cmFuc2l0U3RhdGUoc3RhdGUsIGNoKTsKICAgICAgfQogICAgICBpZiggY2ggPT0gJy4nICkgewogICAgICAgICAgdHJhbnNpdFN0YXRlKHN0YXRlLCBjaCk7CiAgICAgIH0KICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC9uLXRyaXBsZXMiLCAibnRyaXBsZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBhc2NhbCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGFzY2FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQYXNjYWwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CigqIEV4YW1wbGUgUGFzY2FsIGNvZGUgKikKCndoaWxlIGEgPD4gYiBkbyB3cml0ZWxuKCdXYWl0aW5nJyk7CiAKaWYgYSA+IGIgdGhlbiAKICB3cml0ZWxuKCdDb25kaXRpb24gbWV0JykKZWxzZSAKICB3cml0ZWxuKCdDb25kaXRpb24gbm90IG1ldCcpOwogCmZvciBpIDo9IDEgdG8gMTAgZG8gCiAgd3JpdGVsbignSXRlcmF0aW9uOiAnLCBpOjEpOwogCnJlcGVhdAogIGEgOj0gYSArIDEKdW50aWwgYSA9IDEwOwogCmNhc2UgaSBvZgogIDA6IHdyaXRlKCd6ZXJvJyk7CiAgMTogd3JpdGUoJ29uZScpOwogIDI6IHdyaXRlKCd0d28nKQplbmQ7CjwvdGV4dGFyZWE+PC9kaXY+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIG1vZGU6ICJ0ZXh0L3gtcGFzY2FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGFzY2FsPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExIHNvdWNlTGFpciA8c3VwcG9ydEBzb3VyY2VsYWlyLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/pascal/pascal.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwYXNjYWwiLCBmdW5jdGlvbihjb25maWcpIHsKICBmdW5jdGlvbiB3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGtleXdvcmRzID0gd29yZHMoImFuZCBhcnJheSBiZWdpbiBjYXNlIGNvbnN0IGRpdiBkbyBkb3dudG8gZWxzZSBlbmQgZmlsZSBmb3IgZm9yd2FyZCBpbnRlZ2VyICIgKwogICAgICAgICAgICAgICAgICAgICAgICJib29sZWFuIGNoYXIgZnVuY3Rpb24gZ290byBpZiBpbiBsYWJlbCBtb2QgbmlsIG5vdCBvZiBvciBwYWNrZWQgcHJvY2VkdXJlICIgKwogICAgICAgICAgICAgICAgICAgICAgICJwcm9ncmFtIHJlY29yZCByZXBlYXQgc2V0IHN0cmluZyB0aGVuIHRvIHR5cGUgdW50aWwgdmFyIHdoaWxlIHdpdGgiKTsKICB2YXIgYXRvbXMgPSB7Im51bGwiOiB0cnVlfTsKCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xcL10vOwoKICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiIyIgJiYgc3RhdGUuc3RhcnRPZkxpbmUpIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gIm1ldGEiOwogICAgfQogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIGlmIChjaCA9PSAiKCIgJiYgc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50OwogICAgICByZXR1cm4gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgaWYgKC9bXFtcXXt9XChcKSw7XDpcLl0vLnRlc3QoY2gpKSB7CiAgICAgIHJldHVybiBudWxsCiAgICB9CiAgICBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9CiAgICBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgICAgfQogICAgfQogICAgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICB2YXIgY3VyID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgIGlmIChrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImtleXdvcmQiOwogICAgaWYgKGF0b21zLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHJldHVybiAiYXRvbSI7CiAgICByZXR1cm4gIndvcmQiOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQsIGVuZCA9IGZhbHNlOwogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9CiAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoZW5kIHx8ICFlc2NhcGVkKSBzdGF0ZS50b2tlbml6ZSA9IG51bGw7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIikiICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gImNvbW1lbnQiOwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IG51bGx9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSAoc3RhdGUudG9rZW5pemUgfHwgdG9rZW5CYXNlKShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IiB8fCBzdHlsZSA9PSAibWV0YSIpIHJldHVybiBzdHlsZTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAie30iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1wYXNjYWwiLCAicGFzY2FsIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBlcmwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFBlcmwgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMhL3Vzci9iaW4vcGVybAoKdXNlIFNvbWV0aGluZyBxdyhmdW5jMSBmdW5jMik7CgojIHN0cmluZ3MKbXkgJHMxID0gcXEnc2luZ2xlIGxpbmUnOwpvdXIgJHMyID0gcShtdWx0aS0KICAgICAgICAgICAgICBsaW5lKTsKCj1pdGVtIFNvbWV0aGluZwoJRXhhbXBsZS4KPWN1dAoKbXkgJGh0bWw9PDwnSFRNTCcKPGh0bWw+Cjx0aXRsZT5oaSE8L3RpdGxlPgo8L2h0bWw+CkhUTUwKCnByaW50ICJmaXJzdCwiLmpvaW4oJywnLCAnc2Vjb25kJywgcXF+dGhpcmR+KTsKCmlmKCRzMSA9fiBtWyg/PCFccykobC5uZSlcel1vKSB7CgkkaC0+eyQxfT0kJC4nIHByZWRlZmluZWQgdmFyaWFibGVzJzsKCSRzMiA9fiBzL1wtbGluZS8vb3g7CgkkczEgPX4gc1sKCQkgIGxpbmUgXQoJCVsKCQkgIGJsb2NrCgkJXW94Owp9CgoxOyAjIG51bWJlcnMgYW5kIGNvbW1lbnRzCgpfX0VORF9fCnNvbWV0aGluZy4uLgoKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXBlcmw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IFNhYmFjYSA8bWFpbEBzYWJhY2EuY29tPiB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/perl/perl.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQ29kZU1pcnJvcjIgbW9kZS9wZXJsL3BlcmwuanMgKHRleHQveC1wZXJsKSBiZXRhIDAuMTAgKDIwMTEtMTEtMDgpCi8vIFRoaXMgaXMgYSBwYXJ0IG9mIENvZGVNaXJyb3IgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vc2FiYWNhL0NvZGVNaXJyb3JfbW9kZV9wZXJsIChtYWlsQHNhYmFjYS5jb20pCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGVybCIsZnVuY3Rpb24oY29uZmlnLHBhcnNlckNvbmZpZyl7CgkvLyBodHRwOi8vcGVybGRvYy5wZXJsLm9yZwoJdmFyIFBFUkw9ewkJCQkgICAgCS8vICAgbnVsbCAtIG1hZ2ljIHRvdWNoCgkJCQkJCQkvLyAgIDEgLSBrZXl3b3JkCgkJCQkJCQkvLyAgIDIgLSBkZWYKCQkJCQkJCS8vICAgMyAtIGF0b20KCQkJCQkJCS8vICAgNCAtIG9wZXJhdG9yCgkJCQkJCQkvLyAgIDUgLSB2YXJpYWJsZS0yIChwcmVkZWZpbmVkKQoJCQkJCQkJLy8gICBbeCx5XSAtIHg9MSwyLDM7IHk9bXVzdCBiZSBkZWZpbmVkIGlmIHh7Li4ufQoJCQkJCQkvLwlQRVJMIG9wZXJhdG9ycwoJCSctPicJCQkJOiAgIDQsCgkJJysrJwkJCQk6ICAgNCwKCQknLS0nCQkJCTogICA0LAoJCScqKicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgICEgfiBcIGFuZCB1bmFyeSArIGFuZCAtCgkJJz1+JwkJCQk6ICAgNCwKCQknIX4nCQkJCTogICA0LAoJCScqJwkJCQk6ICAgNCwKCQknLycJCQkJOiAgIDQsCgkJJyUnCQkJCTogICA0LAoJCSd4JwkJCQk6ICAgNCwKCQknKycJCQkJOiAgIDQsCgkJJy0nCQkJCTogICA0LAoJCScuJwkJCQk6ICAgNCwKCQknPDwnCQkJCTogICA0LAoJCSc+PicJCQkJOiAgIDQsCgkJCQkJCQkvLyAgIG5hbWVkIHVuYXJ5IG9wZXJhdG9ycwoJCSc8JwkJCQk6ICAgNCwKCQknPicJCQkJOiAgIDQsCgkJJzw9JwkJCQk6ICAgNCwKCQknPj0nCQkJCTogICA0LAoJCSdsdCcJCQkJOiAgIDQsCgkJJ2d0JwkJCQk6ICAgNCwKCQknbGUnCQkJCTogICA0LAoJCSdnZScJCQkJOiAgIDQsCgkJJz09JwkJCQk6ICAgNCwKCQknIT0nCQkJCTogICA0LAoJCSc8PT4nCQkJCTogICA0LAoJCSdlcScJCQkJOiAgIDQsCgkJJ25lJwkJCQk6ICAgNCwKCQknY21wJwkJCQk6ICAgNCwKCQknfn4nCQkJCTogICA0LAoJCScmJwkJCQk6ICAgNCwKCQknfCcJCQkJOiAgIDQsCgkJJ14nCQkJCTogICA0LAoJCScmJicJCQkJOiAgIDQsCgkJJ3x8JwkJCQk6ICAgNCwKCQknLy8nCQkJCTogICA0LAoJCScuLicJCQkJOiAgIDQsCgkJJy4uLicJCQkJOiAgIDQsCgkJJz8nCQkJCTogICA0LAoJCSc6JwkJCQk6ICAgNCwKCQknPScJCQkJOiAgIDQsCgkJJys9JwkJCQk6ICAgNCwKCQknLT0nCQkJCTogICA0LAoJCScqPScJCQkJOiAgIDQsCS8vICAgZXRjLiA/Pz8KCQknLCcJCQkJOiAgIDQsCgkJJz0+JwkJCQk6ICAgNCwKCQknOjonCQkJCTogICA0LAoJCQkJICAgCQkJLy8gICBsaXN0IG9wZXJhdG9ycyAocmlnaHR3YXJkKQoJCSdub3QnCQkJCTogICA0LAoJCSdhbmQnCQkJCTogICA0LAoJCSdvcicJCQkJOiAgIDQsCgkJJ3hvcicJCQkJOiAgIDQsCgkJCQkJCS8vCVBFUkwgcHJlZGVmaW5lZCB2YXJpYWJsZXMgKEkga25vdywgd2hhdCB0aGlzIGlzIGEgcGFyYW5vaWQgaWRlYSwgYnV0IG1heSBiZSBuZWVkZWQgZm9yIHBlb3BsZSwgd2hvIGxlYXJuIFBFUkwsIGFuZCBmb3IgbWUgYXMgd2VsbCwgLi4uYW5kIG1heSBiZSBmb3IgeW91PzspCgkJJ0JFR0lOJwkJCQk6ICAgWzUsMV0sCgkJJ0VORCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVCcJCQkJOiAgIFs1LDFdLAoJCSdQUklOVEYnCQkJOiAgIFs1LDFdLAoJCSdHRVRDJwkJCQk6ICAgWzUsMV0sCgkJJ1JFQUQnCQkJCTogICBbNSwxXSwKCQknUkVBRExJTkUnCQkJOiAgIFs1LDFdLAoJCSdERVNUUk9ZJwkJCTogICBbNSwxXSwKCQknVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1RJRUhBTkRMRScJCQk6ICAgWzUsMV0sCgkJJ1VOVElFJwkJCQk6ICAgWzUsMV0sCgkJJ1NURElOJwkJCQk6ICAgIDUsCgkJJ1NURElOX1RPUCcJCQk6ICAgIDUsCgkJJ1NURE9VVCcJCQk6ICAgIDUsCgkJJ1NURE9VVF9UT1AnCQkJOiAgICA1LAoJCSdTVERFUlInCQkJOiAgICA1LAoJCSdTVERFUlJfVE9QJwkJCTogICAgNSwKCQknJEFSRycJCQkJOiAgICA1LAoJCSckXycJCQkJOiAgICA1LAoJCSdAQVJHJwkJCQk6ICAgIDUsCgkJJ0BfJwkJCQk6ICAgIDUsCgkJJyRMSVNUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJCInCQkJCTogICAgNSwKCQknJFBST0NFU1NfSUQnCQkJOiAgICA1LAoJCSckUElEJwkJCQk6ICAgIDUsCgkJJyQkJwkJCQk6ICAgIDUsCgkJJyRSRUFMX0dST1VQX0lEJwkJOiAgICA1LAoJCSckR0lEJwkJCQk6ICAgIDUsCgkJJyQoJwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfR1JPVVBfSUQnCQk6ICAgIDUsCgkJJyRFR0lEJwkJCQk6ICAgIDUsCgkJJyQpJwkJCQk6ICAgIDUsCgkJJyRQUk9HUkFNX05BTUUnCQkJOiAgICA1LAoJCSckMCcJCQkJOiAgICA1LAoJCSckU1VCU0NSSVBUX1NFUEFSQVRPUicJCTogICAgNSwKCQknJFNVQlNFUCcJCQk6ICAgIDUsCgkJJyQ7JwkJCQk6ICAgIDUsCgkJJyRSRUFMX1VTRVJfSUQnCQkJOiAgICA1LAoJCSckVUlEJwkJCQk6ICAgIDUsCgkJJyQ8JwkJCQk6ICAgIDUsCgkJJyRFRkZFQ1RJVkVfVVNFUl9JRCcJCTogICAgNSwKCQknJEVVSUQnCQkJCTogICAgNSwKCQknJD4nCQkJCTogICAgNSwKCQknJGEnCQkJCTogICAgNSwKCQknJGInCQkJCTogICAgNSwKCQknJENPTVBJTElORycJCQk6ICAgIDUsCgkJJyReQycJCQkJOiAgICA1LAoJCSckREVCVUdHSU5HJwkJCTogICAgNSwKCQknJF5EJwkJCQk6ICAgIDUsCgkJJyR7XkVOQ09ESU5HfScJCQk6ICAgIDUsCgkJJyRFTlYnCQkJCTogICAgNSwKCQknJUVOVicJCQkJOiAgICA1LAoJCSckU1lTVEVNX0ZEX01BWCcJCTogICAgNSwKCQknJF5GJwkJCQk6ICAgIDUsCgkJJ0BGJwkJCQk6ICAgIDUsCgkJJyR7XkdMT0JBTF9QSEFTRX0nCQk6ICAgIDUsCgkJJyReSCcJCQkJOiAgICA1LAoJCSclXkgnCQkJCTogICAgNSwKCQknQElOQycJCQkJOiAgICA1LAoJCSclSU5DJwkJCQk6ICAgIDUsCgkJJyRJTlBMQUNFX0VESVQnCQkJOiAgICA1LAoJCSckXkknCQkJCTogICAgNSwKCQknJF5NJwkJCQk6ICAgIDUsCgkJJyRPU05BTUUnCQkJOiAgICA1LAoJCSckXk8nCQkJCTogICAgNSwKCQknJHteT1BFTn0nCQkJOiAgICA1LAoJCSckUEVSTERCJwkJCTogICAgNSwKCQknJF5QJwkJCQk6ICAgIDUsCgkJJyRTSUcnCQkJCTogICAgNSwKCQknJVNJRycJCQkJOiAgICA1LAoJCSckQkFTRVRJTUUnCQkJOiAgICA1LAoJCSckXlQnCQkJCTogICAgNSwKCQknJHteVEFJTlR9JwkJCTogICAgNSwKCQknJHteVU5JQ09ERX0nCQkJOiAgICA1LAoJCScke15VVEY4Q0FDSEV9JwkJCTogICAgNSwKCQknJHteVVRGOExPQ0FMRX0nCQk6ICAgIDUsCgkJJyRQRVJMX1ZFUlNJT04nCQkJOiAgICA1LAoJCSckXlYnCQkJCTogICAgNSwKCQknJHteV0lOMzJfU0xPUFBZX1NUQVR9JwkJOiAgICA1LAoJCSckRVhFQ1VUQUJMRV9OQU1FJwkJOiAgICA1LAoJCSckXlgnCQkJCTogICAgNSwKCQknJDEnCQkJCTogICAgNSwJLy8gLSByZWdleHAgJDEsICQyLi4uCgkJJyRNQVRDSCcJCQk6ICAgIDUsCgkJJyQmJwkJCQk6ICAgIDUsCgkJJyR7Xk1BVENIfScJCQk6ICAgIDUsCgkJJyRQUkVNQVRDSCcJCQk6ICAgIDUsCgkJJyRgJwkJCQk6ICAgIDUsCgkJJyR7XlBSRU1BVENIfScJCQk6ICAgIDUsCgkJJyRQT1NUTUFUQ0gnCQkJOiAgICA1LAoJCSIkJyIJCQkJOiAgICA1LAoJCScke15QT1NUTUFUQ0h9JwkJCTogICAgNSwKCQknJExBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyQrJwkJCQk6ICAgIDUsCgkJJyRMQVNUX1NVQk1BVENIX1JFU1VMVCcJCTogICAgNSwKCQknJF5OJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX0VORCcJCTogICAgNSwKCQknQCsnCQkJCTogICAgNSwKCQknJUxBU1RfUEFSRU5fTUFUQ0gnCQk6ICAgIDUsCgkJJyUrJwkJCQk6ICAgIDUsCgkJJ0BMQVNUX01BVENIX1NUQVJUJwkJOiAgICA1LAoJCSdALScJCQkJOiAgICA1LAoJCSclTEFTVF9NQVRDSF9TVEFSVCcJCTogICAgNSwKCQknJS0nCQkJCTogICAgNSwKCQknJExBU1RfUkVHRVhQX0NPREVfUkVTVUxUJwk6ICAgIDUsCgkJJyReUicJCQkJOiAgICA1LAoJCScke15SRV9ERUJVR19GTEFHU30nCQk6ICAgIDUsCgkJJyR7XlJFX1RSSUVfTUFYQlVGfScJCTogICAgNSwKCQknJEFSR1YnCQkJCTogICAgNSwKCQknQEFSR1YnCQkJCTogICAgNSwKCQknQVJHVicJCQkJOiAgICA1LAoJCSdBUkdWT1VUJwkJCTogICAgNSwKCQknJE9VVFBVVF9GSUVMRF9TRVBBUkFUT1InCTogICAgNSwKCQknJE9GUycJCQkJOiAgICA1LAoJCSckLCcJCQkJOiAgICA1LAoJCSckSU5QVVRfTElORV9OVU1CRVInCQk6ICAgIDUsCgkJJyROUicJCQkJOiAgICA1LAoJCSckLicJCQkJOiAgICA1LAoJCSckSU5QVVRfUkVDT1JEX1NFUEFSQVRPUicJOiAgICA1LAoJCSckUlMnCQkJCTogICAgNSwKCQknJC8nCQkJCTogICAgNSwKCQknJE9VVFBVVF9SRUNPUkRfU0VQQVJBVE9SJwk6ICAgIDUsCgkJJyRPUlMnCQkJCTogICAgNSwKCQknJFxcJwkJCQk6ICAgIDUsCgkJJyRPVVRQVVRfQVVUT0ZMVVNIJwkJOiAgICA1LAoJCSckfCcJCQkJOiAgICA1LAoJCSckQUNDVU1VTEFUT1InCQkJOiAgICA1LAoJCSckXkEnCQkJCTogICAgNSwKCQknJEZPUk1BVF9GT1JNRkVFRCcJCTogICAgNSwKCQknJF5MJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfUEFHRV9OVU1CRVInCQk6ICAgIDUsCgkJJyQlJwkJCQk6ICAgIDUsCgkJJyRGT1JNQVRfTElORVNfTEVGVCcJCTogICAgNSwKCQknJC0nCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FX0JSRUFLX0NIQVJBQ1RFUlMnCTogICAgNSwKCQknJDonCQkJCTogICAgNSwKCQknJEZPUk1BVF9MSU5FU19QRVJfUEFHRScJOiAgICA1LAoJCSckPScJCQkJOiAgICA1LAoJCSckRk9STUFUX1RPUF9OQU1FJwkJOiAgICA1LAoJCSckXicJCQkJOiAgICA1LAoJCSckRk9STUFUX05BTUUnCQkJOiAgICA1LAoJCSckficJCQkJOiAgICA1LAoJCScke15DSElMRF9FUlJPUl9OQVRJVkV9Jwk6ICAgIDUsCgkJJyRFWFRFTkRFRF9PU19FUlJPUicJCTogICAgNSwKCQknJF5FJwkJCQk6ICAgIDUsCgkJJyRFWENFUFRJT05TX0JFSU5HX0NBVUdIVCcJOiAgICA1LAoJCSckXlMnCQkJCTogICAgNSwKCQknJFdBUk5JTkcnCQkJOiAgICA1LAoJCSckXlcnCQkJCTogICAgNSwKCQknJHteV0FSTklOR19CSVRTfScJCTogICAgNSwKCQknJE9TX0VSUk9SJwkJCTogICAgNSwKCQknJEVSUk5PJwkJCTogICAgNSwKCQknJCEnCQkJCTogICAgNSwKCQknJU9TX0VSUk9SJwkJCTogICAgNSwKCQknJUVSUk5PJwkJCTogICAgNSwKCQknJSEnCQkJCTogICAgNSwKCQknJENISUxEX0VSUk9SJwkJCTogICAgNSwKCQknJD8nCQkJCTogICAgNSwKCQknJEVWQUxfRVJST1InCQkJOiAgICA1LAoJCSckQCcJCQkJOiAgICA1LAoJCSckT0ZNVCcJCQkJOiAgICA1LAoJCSckIycJCQkJOiAgICA1LAoJCSckKicJCQkJOiAgICA1LAoJCSckQVJSQVlfQkFTRScJCQk6ICAgIDUsCgkJJyRbJwkJCQk6ICAgIDUsCgkJJyRPTERfUEVSTF9WRVJTSU9OJwkJOiAgICA1LAoJCSckXScJCQkJOiAgICA1LAoJCQkJCQkvLwlQRVJMIGJsb2NrcwoJCSdpZicJCQkJOlsxLDFdLAoJCWVsc2lmCQkJCTpbMSwxXSwKCQknZWxzZScJCQkJOlsxLDFdLAoJCSd3aGlsZScJCQkJOlsxLDFdLAoJCXVubGVzcwkJCQk6WzEsMV0sCgkJJ2ZvcicJCQkJOlsxLDFdLAoJCWZvcmVhY2gJCQkJOlsxLDFdLAoJCQkJCQkvLwlQRVJMIGZ1bmN0aW9ucwoJCSdhYnMnCQkJCToxLAkvLyAtIGFic29sdXRlIHZhbHVlIGZ1bmN0aW9uCgkJYWNjZXB0CQkJCToxLAkvLyAtIGFjY2VwdCBhbiBpbmNvbWluZyBzb2NrZXQgY29ubmVjdAoJCWFsYXJtCQkJCToxLAkvLyAtIHNjaGVkdWxlIGEgU0lHQUxSTQoJCSdhdGFuMicJCQkJOjEsCS8vIC0gYXJjdGFuZ2VudCBvZiBZL1ggaW4gdGhlIHJhbmdlIC1QSSB0byBQSQoJCWJpbmQJCQkJOjEsCS8vIC0gYmluZHMgYW4gYWRkcmVzcyB0byBhIHNvY2tldAoJCWJpbm1vZGUJCQkJOjEsCS8vIC0gcHJlcGFyZSBiaW5hcnkgZmlsZXMgZm9yIEkvTwoJCWJsZXNzCQkJCToxLAkvLyAtIGNyZWF0ZSBhbiBvYmplY3QKCQlib290c3RyYXAJCQk6MSwJLy8KCQknYnJlYWsnCQkJCToxLAkvLyAtIGJyZWFrIG91dCBvZiBhICJnaXZlbiIgYmxvY2sKCQljYWxsZXIJCQkJOjEsCS8vIC0gZ2V0IGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgc3Vicm91dGluZSBjYWxsCgkJY2hkaXIJCQkJOjEsCS8vIC0gY2hhbmdlIHlvdXIgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeQoJCWNobW9kCQkJCToxLAkvLyAtIGNoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9uIGEgbGlzdCBvZiBmaWxlcwoJCWNob21wCQkJCToxLAkvLyAtIHJlbW92ZSBhIHRyYWlsaW5nIHJlY29yZCBzZXBhcmF0b3IgZnJvbSBhIHN0cmluZwoJCWNob3AJCQkJOjEsCS8vIC0gcmVtb3ZlIHRoZSBsYXN0IGNoYXJhY3RlciBmcm9tIGEgc3RyaW5nCgkJY2hvd24JCQkJOjEsCS8vIC0gY2hhbmdlIHRoZSBvd2Vyc2hpcCBvbiBhIGxpc3Qgb2YgZmlsZXMKCQljaHIJCQkJOjEsCS8vIC0gZ2V0IGNoYXJhY3RlciB0aGlzIG51bWJlciByZXByZXNlbnRzCgkJY2hyb290CQkJCToxLAkvLyAtIG1ha2UgZGlyZWN0b3J5IG5ldyByb290IGZvciBwYXRoIGxvb2t1cHMKCQljbG9zZQkJCQk6MSwJLy8gLSBjbG9zZSBmaWxlIChvciBwaXBlIG9yIHNvY2tldCkgaGFuZGxlCgkJY2xvc2VkaXIJCQk6MSwJLy8gLSBjbG9zZSBkaXJlY3RvcnkgaGFuZGxlCgkJY29ubmVjdAkJCQk6MSwJLy8gLSBjb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldAoJCSdjb250aW51ZScJCQk6WzEsMV0sCS8vIC0gb3B0aW9uYWwgdHJhaWxpbmcgYmxvY2sgaW4gYSB3aGlsZSBvciBmb3JlYWNoCgkJJ2NvcycJCQkJOjEsCS8vIC0gY29zaW5lIGZ1bmN0aW9uCgkJY3J5cHQJCQkJOjEsCS8vIC0gb25lLXdheSBwYXNzd2Qtc3R5bGUgZW5jcnlwdGlvbgoJCWRibWNsb3NlCQkJOjEsCS8vIC0gYnJlYWtzIGJpbmRpbmcgb24gYSB0aWVkIGRibSBmaWxlCgkJZGJtb3BlbgkJCQk6MSwJLy8gLSBjcmVhdGUgYmluZGluZyBvbiBhIHRpZWQgZGJtIGZpbGUKCQknZGVmYXVsdCcJCQk6MSwJLy8KCQlkZWZpbmVkCQkJCToxLAkvLyAtIHRlc3Qgd2hldGhlciBhIHZhbHVlLCB2YXJpYWJsZSwgb3IgZnVuY3Rpb24gaXMgZGVmaW5lZAoJCSdkZWxldGUnCQkJOjEsCS8vIC0gZGVsZXRlcyBhIHZhbHVlIGZyb20gYSBoYXNoCgkJZGllCQkJCToxLAkvLyAtIHJhaXNlIGFuIGV4Y2VwdGlvbiBvciBiYWlsIG91dAoJCSdkbycJCQkJOjEsCS8vIC0gdHVybiBhIEJMT0NLIGludG8gYSBURVJNCgkJZHVtcAkJCQk6MSwJLy8gLSBjcmVhdGUgYW4gaW1tZWRpYXRlIGNvcmUgZHVtcAoJCWVhY2gJCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIG5leHQga2V5L3ZhbHVlIHBhaXIgZnJvbSBhIGhhc2gKCQllbmRncmVudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgZ3JvdXAgZmlsZQoJCWVuZGhvc3RlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIGhvc3RzIGZpbGUKCQllbmRuZXRlbnQJCQk6MSwJLy8gLSBiZSBkb25lIHVzaW5nIG5ldHdvcmtzIGZpbGUKCQllbmRwcm90b2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcHJvdG9jb2xzIGZpbGUKCQllbmRwd2VudAkJCToxLAkvLyAtIGJlIGRvbmUgdXNpbmcgcGFzc3dkIGZpbGUKCQllbmRzZXJ2ZW50CQkJOjEsCS8vIC0gYmUgZG9uZSB1c2luZyBzZXJ2aWNlcyBmaWxlCgkJZW9mCQkJCToxLAkvLyAtIHRlc3QgYSBmaWxlaGFuZGxlIGZvciBpdHMgZW5kCgkJJ2V2YWwnCQkJCToxLAkvLyAtIGNhdGNoIGV4Y2VwdGlvbnMgb3IgY29tcGlsZSBhbmQgcnVuIGNvZGUKCQknZXhlYycJCQkJOjEsCS8vIC0gYWJhbmRvbiB0aGlzIHByb2dyYW0gdG8gcnVuIGFub3RoZXIKCQlleGlzdHMJCQkJOjEsCS8vIC0gdGVzdCB3aGV0aGVyIGEgaGFzaCBrZXkgaXMgcHJlc2VudAoJCWV4aXQJCQkJOjEsCS8vIC0gdGVybWluYXRlIHRoaXMgcHJvZ3JhbQoJCSdleHAnCQkJCToxLAkvLyAtIHJhaXNlIEkgdG8gYSBwb3dlcgoJCWZjbnRsCQkJCToxLAkvLyAtIGZpbGUgY29udHJvbCBzeXN0ZW0gY2FsbAoJCWZpbGVubwkJCQk6MSwJLy8gLSByZXR1cm4gZmlsZSBkZXNjcmlwdG9yIGZyb20gZmlsZWhhbmRsZQoJCWZsb2NrCQkJCToxLAkvLyAtIGxvY2sgYW4gZW50aXJlIGZpbGUgd2l0aCBhbiBhZHZpc29yeSBsb2NrCgkJZm9yawkJCQk6MSwJLy8gLSBjcmVhdGUgYSBuZXcgcHJvY2VzcyBqdXN0IGxpa2UgdGhpcyBvbmUKCQlmb3JtYXQJCQkJOjEsCS8vIC0gZGVjbGFyZSBhIHBpY3R1cmUgZm9ybWF0IHdpdGggdXNlIGJ5IHRoZSB3cml0ZSgpIGZ1bmN0aW9uCgkJZm9ybWxpbmUJCQk6MSwJLy8gLSBpbnRlcm5hbCBmdW5jdGlvbiB1c2VkIGZvciBmb3JtYXRzCgkJZ2V0YwkJCQk6MSwJLy8gLSBnZXQgdGhlIG5leHQgY2hhcmFjdGVyIGZyb20gdGhlIGZpbGVoYW5kbGUKCQlnZXRncmVudAkJCToxLAkvLyAtIGdldCBuZXh0IGdyb3VwIHJlY29yZAoJCWdldGdyZ2lkCQkJOjEsCS8vIC0gZ2V0IGdyb3VwIHJlY29yZCBnaXZlbiBncm91cCB1c2VyIElECgkJZ2V0Z3JuYW0JCQk6MSwJLy8gLSBnZXQgZ3JvdXAgcmVjb3JkIGdpdmVuIGdyb3VwIG5hbWUKCQlnZXRob3N0YnlhZGRyCQkJOjEsCS8vIC0gZ2V0IGhvc3QgcmVjb3JkIGdpdmVuIGl0cyBhZGRyZXNzCgkJZ2V0aG9zdGJ5bmFtZQkJCToxLAkvLyAtIGdldCBob3N0IHJlY29yZCBnaXZlbiBuYW1lCgkJZ2V0aG9zdGVudAkJCToxLAkvLyAtIGdldCBuZXh0IGhvc3RzIHJlY29yZAoJCWdldGxvZ2luCQkJOjEsCS8vIC0gcmV0dXJuIHdobyBsb2dnZWQgaW4gYXQgdGhpcyB0dHkKCQlnZXRuZXRieWFkZHIJCQk6MSwJLy8gLSBnZXQgbmV0d29yayByZWNvcmQgZ2l2ZW4gaXRzIGFkZHJlc3MKCQlnZXRuZXRieW5hbWUJCQk6MSwJLy8gLSBnZXQgbmV0d29ya3MgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRuZXRlbnQJCQk6MSwJLy8gLSBnZXQgbmV4dCBuZXR3b3JrcyByZWNvcmQKCQlnZXRwZWVybmFtZQkJCToxLAkvLyAtIGZpbmQgdGhlIG90aGVyIGVuZCBvZiBhIHNvY2tldCBjb25uZWN0aW9uCgkJZ2V0cGdycAkJCQk6MSwJLy8gLSBnZXQgcHJvY2VzcyBncm91cAoJCWdldHBwaWQJCQkJOjEsCS8vIC0gZ2V0IHBhcmVudCBwcm9jZXNzIElECgkJZ2V0cHJpb3JpdHkJCQk6MSwJLy8gLSBnZXQgY3VycmVudCBuaWNlIHZhbHVlCgkJZ2V0cHJvdG9ieW5hbWUJCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIGdpdmVuIG5hbWUKCQlnZXRwcm90b2J5bnVtYmVyCQk6MSwJLy8gLSBnZXQgcHJvdG9jb2wgcmVjb3JkIG51bWVyaWMgcHJvdG9jb2wKCQlnZXRwcm90b2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHByb3RvY29scyByZWNvcmQKCQlnZXRwd2VudAkJCToxLAkvLyAtIGdldCBuZXh0IHBhc3N3ZCByZWNvcmQKCQlnZXRwd25hbQkJCToxLAkvLyAtIGdldCBwYXNzd2QgcmVjb3JkIGdpdmVuIHVzZXIgbG9naW4gbmFtZQoJCWdldHB3dWlkCQkJOjEsCS8vIC0gZ2V0IHBhc3N3ZCByZWNvcmQgZ2l2ZW4gdXNlciBJRAoJCWdldHNlcnZieW5hbWUJCQk6MSwJLy8gLSBnZXQgc2VydmljZXMgcmVjb3JkIGdpdmVuIGl0cyBuYW1lCgkJZ2V0c2VydmJ5cG9ydAkJCToxLAkvLyAtIGdldCBzZXJ2aWNlcyByZWNvcmQgZ2l2ZW4gbnVtZXJpYyBwb3J0CgkJZ2V0c2VydmVudAkJCToxLAkvLyAtIGdldCBuZXh0IHNlcnZpY2VzIHJlY29yZAoJCWdldHNvY2tuYW1lCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIHNvY2thZGRyIGZvciBhIGdpdmVuIHNvY2tldAoJCWdldHNvY2tvcHQJCQk6MSwJLy8gLSBnZXQgc29ja2V0IG9wdGlvbnMgb24gYSBnaXZlbiBzb2NrZXQKCQlnaXZlbgkJCQk6MSwJLy8KCQlnbG9iCQkJCToxLAkvLyAtIGV4cGFuZCBmaWxlbmFtZXMgdXNpbmcgd2lsZGNhcmRzCgkJZ210aW1lCQkJCToxLAkvLyAtIGNvbnZlcnQgVU5JWCB0aW1lIGludG8gcmVjb3JkIG9yIHN0cmluZyB1c2luZyBHcmVlbndpY2ggdGltZQoJCSdnb3RvJwkJCQk6MSwJLy8gLSBjcmVhdGUgc3BhZ2hldHRpIGNvZGUKCQlncmVwCQkJCToxLAkvLyAtIGxvY2F0ZSBlbGVtZW50cyBpbiBhIGxpc3QgdGVzdCB0cnVlIGFnYWluc3QgYSBnaXZlbiBjcml0ZXJpb24KCQloZXgJCQkJOjEsCS8vIC0gY29udmVydCBhIHN0cmluZyB0byBhIGhleGFkZWNpbWFsIG51bWJlcgoJCSdpbXBvcnQnCQkJOjEsCS8vIC0gcGF0Y2ggYSBtb2R1bGUncyBuYW1lc3BhY2UgaW50byB5b3VyIG93bgoJCWluZGV4CQkJCToxLAkvLyAtIGZpbmQgYSBzdWJzdHJpbmcgd2l0aGluIGEgc3RyaW5nCgkJJ2ludCcJCQkJOjEsCS8vIC0gZ2V0IHRoZSBpbnRlZ2VyIHBvcnRpb24gb2YgYSBudW1iZXIKCQlpb2N0bAkJCQk6MSwJLy8gLSBzeXN0ZW0tZGVwZW5kZW50IGRldmljZSBjb250cm9sIHN5c3RlbSBjYWxsCgkJJ2pvaW4nCQkJCToxLAkvLyAtIGpvaW4gYSBsaXN0IGludG8gYSBzdHJpbmcgdXNpbmcgYSBzZXBhcmF0b3IKCQlrZXlzCQkJCToxLAkvLyAtIHJldHJpZXZlIGxpc3Qgb2YgaW5kaWNlcyBmcm9tIGEgaGFzaAoJCWtpbGwJCQkJOjEsCS8vIC0gc2VuZCBhIHNpZ25hbCB0byBhIHByb2Nlc3Mgb3IgcHJvY2VzcyBncm91cAoJCWxhc3QJCQkJOjEsCS8vIC0gZXhpdCBhIGJsb2NrIHByZW1hdHVyZWx5CgkJbGMJCQkJOjEsCS8vIC0gcmV0dXJuIGxvd2VyLWNhc2UgdmVyc2lvbiBvZiBhIHN0cmluZwoJCWxjZmlyc3QJCQkJOjEsCS8vIC0gcmV0dXJuIGEgc3RyaW5nIHdpdGgganVzdCB0aGUgbmV4dCBsZXR0ZXIgaW4gbG93ZXIgY2FzZQoJCWxlbmd0aAkJCQk6MSwJLy8gLSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHN0cmluZwoJCSdsaW5rJwkJCQk6MSwJLy8gLSBjcmVhdGUgYSBoYXJkIGxpbmsgaW4gdGhlIGZpbGVzeXRlbQoJCWxpc3RlbgkJCQk6MSwJLy8gLSByZWdpc3RlciB5b3VyIHNvY2tldCBhcyBhIHNlcnZlcgoJCWxvY2FsCQkJCTogMiwJLy8gLSBjcmVhdGUgYSB0ZW1wb3JhcnkgdmFsdWUgZm9yIGEgZ2xvYmFsIHZhcmlhYmxlIChkeW5hbWljIHNjb3BpbmcpCgkJbG9jYWx0aW1lCQkJOjEsCS8vIC0gY29udmVydCBVTklYIHRpbWUgaW50byByZWNvcmQgb3Igc3RyaW5nIHVzaW5nIGxvY2FsIHRpbWUKCQlsb2NrCQkJCToxLAkvLyAtIGdldCBhIHRocmVhZCBsb2NrIG9uIGEgdmFyaWFibGUsIHN1YnJvdXRpbmUsIG9yIG1ldGhvZAoJCSdsb2cnCQkJCToxLAkvLyAtIHJldHJpZXZlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBmb3IgYSBudW1iZXIKCQlsc3RhdAkJCQk6MSwJLy8gLSBzdGF0IGEgc3ltYm9saWMgbGluawoJCW0JCQkJOm51bGwsCS8vIC0gbWF0Y2ggYSBzdHJpbmcgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuCgkJbWFwCQkJCToxLAkvLyAtIGFwcGx5IGEgY2hhbmdlIHRvIGEgbGlzdCB0byBnZXQgYmFjayBhIG5ldyBsaXN0IHdpdGggdGhlIGNoYW5nZXMKCQlta2RpcgkJCQk6MSwJLy8gLSBjcmVhdGUgYSBkaXJlY3RvcnkKCQltc2djdGwJCQkJOjEsCS8vIC0gU3lzViBJUEMgbWVzc2FnZSBjb250cm9sIG9wZXJhdGlvbnMKCQltc2dnZXQJCQkJOjEsCS8vIC0gZ2V0IFN5c1YgSVBDIG1lc3NhZ2UgcXVldWUKCQltc2dyY3YJCQkJOjEsCS8vIC0gcmVjZWl2ZSBhIFN5c1YgSVBDIG1lc3NhZ2UgZnJvbSBhIG1lc3NhZ2UgcXVldWUKCQltc2dzbmQJCQkJOjEsCS8vIC0gc2VuZCBhIFN5c1YgSVBDIG1lc3NhZ2UgdG8gYSBtZXNzYWdlIHF1ZXVlCgkJbXkJCQkJOiAyLAkvLyAtIGRlY2xhcmUgYW5kIGFzc2lnbiBhIGxvY2FsIHZhcmlhYmxlIChsZXhpY2FsIHNjb3BpbmcpCgkJJ25ldycJCQkJOjEsCS8vCgkJbmV4dAkJCQk6MSwJLy8gLSBpdGVyYXRlIGEgYmxvY2sgcHJlbWF0dXJlbHkKCQlubwkJCQk6MSwJLy8gLSB1bmltcG9ydCBzb21lIG1vZHVsZSBzeW1ib2xzIG9yIHNlbWFudGljcyBhdCBjb21waWxlIHRpbWUKCQlvY3QJCQkJOjEsCS8vIC0gY29udmVydCBhIHN0cmluZyB0byBhbiBvY3RhbCBudW1iZXIKCQlvcGVuCQkJCToxLAkvLyAtIG9wZW4gYSBmaWxlLCBwaXBlLCBvciBkZXNjcmlwdG9yCgkJb3BlbmRpcgkJCQk6MSwJLy8gLSBvcGVuIGEgZGlyZWN0b3J5CgkJb3JkCQkJCToxLAkvLyAtIGZpbmQgYSBjaGFyYWN0ZXIncyBudW1lcmljIHJlcHJlc2VudGF0aW9uCgkJb3VyCQkJCTogMiwJLy8gLSBkZWNsYXJlIGFuZCBhc3NpZ24gYSBwYWNrYWdlIHZhcmlhYmxlIChsZXhpY2FsIHNjb3BpbmcpCgkJcGFjawkJCQk6MSwJLy8gLSBjb252ZXJ0IGEgbGlzdCBpbnRvIGEgYmluYXJ5IHJlcHJlc2VudGF0aW9uCgkJJ3BhY2thZ2UnCQkJOjEsCS8vIC0gZGVjbGFyZSBhIHNlcGFyYXRlIGdsb2JhbCBuYW1lc3BhY2UKCQlwaXBlCQkJCToxLAkvLyAtIG9wZW4gYSBwYWlyIG9mIGNvbm5lY3RlZCBmaWxlaGFuZGxlcwoJCXBvcAkJCQk6MSwJLy8gLSByZW1vdmUgdGhlIGxhc3QgZWxlbWVudCBmcm9tIGFuIGFycmF5IGFuZCByZXR1cm4gaXQKCQlwb3MJCQkJOjEsCS8vIC0gZmluZCBvciBzZXQgdGhlIG9mZnNldCBmb3IgdGhlIGxhc3QvbmV4dCBtLy9nIHNlYXJjaAoJCXByaW50CQkJCToxLAkvLyAtIG91dHB1dCBhIGxpc3QgdG8gYSBmaWxlaGFuZGxlCgkJcHJpbnRmCQkJCToxLAkvLyAtIG91dHB1dCBhIGZvcm1hdHRlZCBsaXN0IHRvIGEgZmlsZWhhbmRsZQoJCXByb3RvdHlwZQkJCToxLAkvLyAtIGdldCB0aGUgcHJvdG90eXBlIChpZiBhbnkpIG9mIGEgc3Vicm91dGluZQoJCXB1c2gJCQkJOjEsCS8vIC0gYXBwZW5kIG9uZSBvciBtb3JlIGVsZW1lbnRzIHRvIGFuIGFycmF5CgkJcQkJCQk6bnVsbCwJLy8gLSBzaW5nbHkgcXVvdGUgYSBzdHJpbmcKCQlxcQkJCQk6bnVsbCwJLy8gLSBkb3VibHkgcXVvdGUgYSBzdHJpbmcKCQlxcgkJCQk6bnVsbCwJLy8gLSBDb21waWxlIHBhdHRlcm4KCQlxdW90ZW1ldGEJCQk6bnVsbCwJLy8gLSBxdW90ZSByZWd1bGFyIGV4cHJlc3Npb24gbWFnaWMgY2hhcmFjdGVycwoJCXF3CQkJCTpudWxsLAkvLyAtIHF1b3RlIGEgbGlzdCBvZiB3b3JkcwoJCXF4CQkJCTpudWxsLAkvLyAtIGJhY2txdW90ZSBxdW90ZSBhIHN0cmluZwoJCXJhbmQJCQkJOjEsCS8vIC0gcmV0cmlldmUgdGhlIG5leHQgcHNldWRvcmFuZG9tIG51bWJlcgoJCXJlYWQJCQkJOjEsCS8vIC0gZml4ZWQtbGVuZ3RoIGJ1ZmZlcmVkIGlucHV0IGZyb20gYSBmaWxlaGFuZGxlCgkJcmVhZGRpcgkJCQk6MSwJLy8gLSBnZXQgYSBkaXJlY3RvcnkgZnJvbSBhIGRpcmVjdG9yeSBoYW5kbGUKCQlyZWFkbGluZQkJCToxLAkvLyAtIGZldGNoIGEgcmVjb3JkIGZyb20gYSBmaWxlCgkJcmVhZGxpbmsJCQk6MSwJLy8gLSBkZXRlcm1pbmUgd2hlcmUgYSBzeW1ib2xpYyBsaW5rIGlzIHBvaW50aW5nCgkJcmVhZHBpcGUJCQk6MSwJLy8gLSBleGVjdXRlIGEgc3lzdGVtIGNvbW1hbmQgYW5kIGNvbGxlY3Qgc3RhbmRhcmQgb3V0cHV0CgkJcmVjdgkJCQk6MSwJLy8gLSByZWNlaXZlIGEgbWVzc2FnZSBvdmVyIGEgU29ja2V0CgkJcmVkbwkJCQk6MSwJLy8gLSBzdGFydCB0aGlzIGxvb3AgaXRlcmF0aW9uIG92ZXIgYWdhaW4KCQlyZWYJCQkJOjEsCS8vIC0gZmluZCBvdXQgdGhlIHR5cGUgb2YgdGhpbmcgYmVpbmcgcmVmZXJlbmNlZAoJCXJlbmFtZQkJCQk6MSwJLy8gLSBjaGFuZ2UgYSBmaWxlbmFtZQoJCXJlcXVpcmUJCQkJOjEsCS8vIC0gbG9hZCBpbiBleHRlcm5hbCBmdW5jdGlvbnMgZnJvbSBhIGxpYnJhcnkgYXQgcnVudGltZQoJCXJlc2V0CQkJCToxLAkvLyAtIGNsZWFyIGFsbCB2YXJpYWJsZXMgb2YgYSBnaXZlbiBuYW1lCgkJJ3JldHVybicJCQk6MSwJLy8gLSBnZXQgb3V0IG9mIGEgZnVuY3Rpb24gZWFybHkKCQlyZXZlcnNlCQkJCToxLAkvLyAtIGZsaXAgYSBzdHJpbmcgb3IgYSBsaXN0CgkJcmV3aW5kZGlyCQkJOjEsCS8vIC0gcmVzZXQgZGlyZWN0b3J5IGhhbmRsZQoJCXJpbmRleAkJCQk6MSwJLy8gLSByaWdodC10by1sZWZ0IHN1YnN0cmluZyBzZWFyY2gKCQlybWRpcgkJCQk6MSwJLy8gLSByZW1vdmUgYSBkaXJlY3RvcnkKCQlzCQkJCTpudWxsLAkvLyAtIHJlcGxhY2UgYSBwYXR0ZXJuIHdpdGggYSBzdHJpbmcKCQlzYXkJCQkJOjEsCS8vIC0gcHJpbnQgd2l0aCBuZXdsaW5lCgkJc2NhbGFyCQkJCToxLAkvLyAtIGZvcmNlIGEgc2NhbGFyIGNvbnRleHQKCQlzZWVrCQkJCToxLAkvLyAtIHJlcG9zaXRpb24gZmlsZSBwb2ludGVyIGZvciByYW5kb20tYWNjZXNzIEkvTwoJCXNlZWtkaXIJCQkJOjEsCS8vIC0gcmVwb3NpdGlvbiBkaXJlY3RvcnkgcG9pbnRlcgoJCXNlbGVjdAkJCQk6MSwJLy8gLSByZXNldCBkZWZhdWx0IG91dHB1dCBvciBkbyBJL08gbXVsdGlwbGV4aW5nCgkJc2VtY3RsCQkJCToxLAkvLyAtIFN5c1Ygc2VtYXBob3JlIGNvbnRyb2wgb3BlcmF0aW9ucwoJCXNlbWdldAkJCQk6MSwJLy8gLSBnZXQgc2V0IG9mIFN5c1Ygc2VtYXBob3JlcwoJCXNlbW9wCQkJCToxLAkvLyAtIFN5c1Ygc2VtYXBob3JlIG9wZXJhdGlvbnMKCQlzZW5kCQkJCToxLAkvLyAtIHNlbmQgYSBtZXNzYWdlIG92ZXIgYSBzb2NrZXQKCQlzZXRncmVudAkJCToxLAkvLyAtIHByZXBhcmUgZ3JvdXAgZmlsZSBmb3IgdXNlCgkJc2V0aG9zdGVudAkJCToxLAkvLyAtIHByZXBhcmUgaG9zdHMgZmlsZSBmb3IgdXNlCgkJc2V0bmV0ZW50CQkJOjEsCS8vIC0gcHJlcGFyZSBuZXR3b3JrcyBmaWxlIGZvciB1c2UKCQlzZXRwZ3JwCQkJCToxLAkvLyAtIHNldCB0aGUgcHJvY2VzcyBncm91cCBvZiBhIHByb2Nlc3MKCQlzZXRwcmlvcml0eQkJCToxLAkvLyAtIHNldCBhIHByb2Nlc3MncyBuaWNlIHZhbHVlCgkJc2V0cHJvdG9lbnQJCQk6MSwJLy8gLSBwcmVwYXJlIHByb3RvY29scyBmaWxlIGZvciB1c2UKCQlzZXRwd2VudAkJCToxLAkvLyAtIHByZXBhcmUgcGFzc3dkIGZpbGUgZm9yIHVzZQoJCXNldHNlcnZlbnQJCQk6MSwJLy8gLSBwcmVwYXJlIHNlcnZpY2VzIGZpbGUgZm9yIHVzZQoJCXNldHNvY2tvcHQJCQk6MSwJLy8gLSBzZXQgc29tZSBzb2NrZXQgb3B0aW9ucwoJCXNoaWZ0CQkJCToxLAkvLyAtIHJlbW92ZSB0aGUgZmlyc3QgZWxlbWVudCBvZiBhbiBhcnJheSwgYW5kIHJldHVybiBpdAoJCXNobWN0bAkJCQk6MSwJLy8gLSBTeXNWIHNoYXJlZCBtZW1vcnkgb3BlcmF0aW9ucwoJCXNobWdldAkJCQk6MSwJLy8gLSBnZXQgU3lzViBzaGFyZWQgbWVtb3J5IHNlZ21lbnQgaWRlbnRpZmllcgoJCXNobXJlYWQJCQkJOjEsCS8vIC0gcmVhZCBTeXNWIHNoYXJlZCBtZW1vcnkKCQlzaG13cml0ZQkJCToxLAkvLyAtIHdyaXRlIFN5c1Ygc2hhcmVkIG1lbW9yeQoJCXNodXRkb3duCQkJOjEsCS8vIC0gY2xvc2UgZG93biBqdXN0IGhhbGYgb2YgYSBzb2NrZXQgY29ubmVjdGlvbgoJCSdzaW4nCQkJCToxLAkvLyAtIHJldHVybiB0aGUgc2luZSBvZiBhIG51bWJlcgoJCXNsZWVwCQkJCToxLAkvLyAtIGJsb2NrIGZvciBzb21lIG51bWJlciBvZiBzZWNvbmRzCgkJc29ja2V0CQkJCToxLAkvLyAtIGNyZWF0ZSBhIHNvY2tldAoJCXNvY2tldHBhaXIJCQk6MSwJLy8gLSBjcmVhdGUgYSBwYWlyIG9mIHNvY2tldHMKCQknc29ydCcJCQkJOjEsCS8vIC0gc29ydCBhIGxpc3Qgb2YgdmFsdWVzCgkJc3BsaWNlCQkJCToxLAkvLyAtIGFkZCBvciByZW1vdmUgZWxlbWVudHMgYW55d2hlcmUgaW4gYW4gYXJyYXkKCQknc3BsaXQnCQkJCToxLAkvLyAtIHNwbGl0IHVwIGEgc3RyaW5nIHVzaW5nIGEgcmVnZXhwIGRlbGltaXRlcgoJCXNwcmludGYJCQkJOjEsCS8vIC0gZm9ybWF0dGVkIHByaW50IGludG8gYSBzdHJpbmcKCQknc3FydCcJCQkJOjEsCS8vIC0gc3F1YXJlIHJvb3QgZnVuY3Rpb24KCQlzcmFuZAkJCQk6MSwJLy8gLSBzZWVkIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcgoJCXN0YXQJCQkJOjEsCS8vIC0gZ2V0IGEgZmlsZSdzIHN0YXR1cyBpbmZvcm1hdGlvbgoJCXN0YXRlCQkJCToxLAkvLyAtIGRlY2xhcmUgYW5kIGFzc2lnbiBhIHN0YXRlIHZhcmlhYmxlIChwZXJzaXN0ZW50IGxleGljYWwgc2NvcGluZykKCQlzdHVkeQkJCQk6MSwJLy8gLSBvcHRpbWl6ZSBpbnB1dCBkYXRhIGZvciByZXBlYXRlZCBzZWFyY2hlcwoJCSdzdWInCQkJCToxLAkvLyAtIGRlY2xhcmUgYSBzdWJyb3V0aW5lLCBwb3NzaWJseSBhbm9ueW1vdXNseQoJCSdzdWJzdHInCQkJOjEsCS8vIC0gZ2V0IG9yIGFsdGVyIGEgcG9ydGlvbiBvZiBhIHN0aXJuZwoJCXN5bWxpbmsJCQkJOjEsCS8vIC0gY3JlYXRlIGEgc3ltYm9saWMgbGluayB0byBhIGZpbGUKCQlzeXNjYWxsCQkJCToxLAkvLyAtIGV4ZWN1dGUgYW4gYXJiaXRyYXJ5IHN5c3RlbSBjYWxsCgkJc3lzb3BlbgkJCQk6MSwJLy8gLSBvcGVuIGEgZmlsZSwgcGlwZSwgb3IgZGVzY3JpcHRvcgoJCXN5c3JlYWQJCQkJOjEsCS8vIC0gZml4ZWQtbGVuZ3RoIHVuYnVmZmVyZWQgaW5wdXQgZnJvbSBhIGZpbGVoYW5kbGUKCQlzeXNzZWVrCQkJCToxLAkvLyAtIHBvc2l0aW9uIEkvTyBwb2ludGVyIG9uIGhhbmRsZSB1c2VkIHdpdGggc3lzcmVhZCBhbmQgc3lzd3JpdGUKCQlzeXN0ZW0JCQkJOjEsCS8vIC0gcnVuIGEgc2VwYXJhdGUgcHJvZ3JhbQoJCXN5c3dyaXRlCQkJOjEsCS8vIC0gZml4ZWQtbGVuZ3RoIHVuYnVmZmVyZWQgb3V0cHV0IHRvIGEgZmlsZWhhbmRsZQoJCXRlbGwJCQkJOjEsCS8vIC0gZ2V0IGN1cnJlbnQgc2Vla3BvaW50ZXIgb24gYSBmaWxlaGFuZGxlCgkJdGVsbGRpcgkJCQk6MSwJLy8gLSBnZXQgY3VycmVudCBzZWVrcG9pbnRlciBvbiBhIGRpcmVjdG9yeSBoYW5kbGUKCQl0aWUJCQkJOjEsCS8vIC0gYmluZCBhIHZhcmlhYmxlIHRvIGFuIG9iamVjdCBjbGFzcwoJCXRpZWQJCQkJOjEsCS8vIC0gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgdW5kZXJseWluZyBhIHRpZWQgdmFyaWFibGUKCQl0aW1lCQkJCToxLAkvLyAtIHJldHVybiBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSAxOTcwCgkJdGltZXMJCQkJOjEsCS8vIC0gcmV0dXJuIGVsYXBzZWQgdGltZSBmb3Igc2VsZiBhbmQgY2hpbGQgcHJvY2Vzc2VzCgkJdHIJCQkJOm51bGwsCS8vIC0gdHJhbnNsaXRlcmF0ZSBhIHN0cmluZwoJCXRydW5jYXRlCQkJOjEsCS8vIC0gc2hvcnRlbiBhIGZpbGUKCQl1YwkJCQk6MSwJLy8gLSByZXR1cm4gdXBwZXItY2FzZSB2ZXJzaW9uIG9mIGEgc3RyaW5nCgkJdWNmaXJzdAkJCQk6MSwJLy8gLSByZXR1cm4gYSBzdHJpbmcgd2l0aCBqdXN0IHRoZSBuZXh0IGxldHRlciBpbiB1cHBlciBjYXNlCgkJdW1hc2sJCQkJOjEsCS8vIC0gc2V0IGZpbGUgY3JlYXRpb24gbW9kZSBtYXNrCgkJdW5kZWYJCQkJOjEsCS8vIC0gcmVtb3ZlIGEgdmFyaWFibGUgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbgoJCXVubGluawkJCQk6MSwJLy8gLSByZW1vdmUgb25lIGxpbmsgdG8gYSBmaWxlCgkJdW5wYWNrCQkJCToxLAkvLyAtIGNvbnZlcnQgYmluYXJ5IHN0cnVjdHVyZSBpbnRvIG5vcm1hbCBwZXJsIHZhcmlhYmxlcwoJCXVuc2hpZnQJCQkJOjEsCS8vIC0gcHJlcGVuZCBtb3JlIGVsZW1lbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBsaXN0CgkJdW50aWUJCQkJOjEsCS8vIC0gYnJlYWsgYSB0aWUgYmluZGluZyB0byBhIHZhcmlhYmxlCgkJdXNlCQkJCToxLAkvLyAtIGxvYWQgaW4gYSBtb2R1bGUgYXQgY29tcGlsZSB0aW1lCgkJdXRpbWUJCQkJOjEsCS8vIC0gc2V0IGEgZmlsZSdzIGxhc3QgYWNjZXNzIGFuZCBtb2RpZnkgdGltZXMKCQl2YWx1ZXMJCQkJOjEsCS8vIC0gcmV0dXJuIGEgbGlzdCBvZiB0aGUgdmFsdWVzIGluIGEgaGFzaAoJCXZlYwkJCQk6MSwJLy8gLSB0ZXN0IG9yIHNldCBwYXJ0aWN1bGFyIGJpdHMgaW4gYSBzdHJpbmcKCQl3YWl0CQkJCToxLAkvLyAtIHdhaXQgZm9yIGFueSBjaGlsZCBwcm9jZXNzIHRvIGRpZQoJCXdhaXRwaWQJCQkJOjEsCS8vIC0gd2FpdCBmb3IgYSBwYXJ0aWN1bGFyIGNoaWxkIHByb2Nlc3MgdG8gZGllCgkJd2FudGFycmF5CQkJOjEsCS8vIC0gZ2V0IHZvaWQgdnMgc2NhbGFyIHZzIGxpc3QgY29udGV4dCBvZiBjdXJyZW50IHN1YnJvdXRpbmUgY2FsbAoJCXdhcm4JCQkJOjEsCS8vIC0gcHJpbnQgZGVidWdnaW5nIGluZm8KCQl3aGVuCQkJCToxLAkvLwoJCXdyaXRlCQkJCToxLAkvLyAtIHByaW50IGEgcGljdHVyZSByZWNvcmQKCQl5CQkJCTpudWxsfTsJLy8gLSB0cmFuc2xpdGVyYXRlIGEgc3RyaW5nCgoJdmFyIFJYc3R5bGU9InN0cmluZy0yIjsKCXZhciBSWG1vZGlmaWVycz0vW2dvc2V4aW1hY3BsdWRdLzsJCS8vIE5PVEU6ICJtIiwgInMiLCAieSIgYW5kICJ0ciIgbmVlZCB0byBjb3JyZWN0IHJlYWwgbW9kaWZpZXJzIGZvciBlYWNoIHJlZ2V4cCB0eXBlCgoJZnVuY3Rpb24gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsY2hhaW4sc3R5bGUsdGFpbCl7CS8vIE5PVEU6IGNoYWluLmxlbmd0aCA+IDIgaXMgbm90IHdvcmtpbmcgbm93IChpdCdzIGZvciBzWy4uLl1bLi4uXWdlb3M7KQoJCXN0YXRlLmNoYWluPW51bGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyICAgM3RhaWwKCQlzdGF0ZS5zdHlsZT1udWxsOwoJCXN0YXRlLnRhaWw9bnVsbDsKCQlzdGF0ZS50b2tlbml6ZT1mdW5jdGlvbihzdHJlYW0sc3RhdGUpewoJCQl2YXIgZT1mYWxzZSxjLGk9MDsKCQkJd2hpbGUoYz1zdHJlYW0ubmV4dCgpKXsKCQkJCWlmKGM9PT1jaGFpbltpXSYmIWUpewoJCQkJCWlmKGNoYWluWysraV0hPT11bmRlZmluZWQpewoJCQkJCQlzdGF0ZS5jaGFpbj1jaGFpbltpXTsKCQkJCQkJc3RhdGUuc3R5bGU9c3R5bGU7CgkJCQkJCXN0YXRlLnRhaWw9dGFpbH0KCQkJCQllbHNlIGlmKHRhaWwpCgkJCQkJCXN0cmVhbS5lYXRXaGlsZSh0YWlsKTsKCQkJCQlzdGF0ZS50b2tlbml6ZT10b2tlblBlcmw7CgkJCQkJcmV0dXJuIHN0eWxlfQoJCQkJZT0hZSYmYz09IlxcIn0KCQkJcmV0dXJuIHN0eWxlfTsKCQlyZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLHN0YXRlKX0KCglmdW5jdGlvbiB0b2tlblNPTUVUSElORyhzdHJlYW0sc3RhdGUsc3RyaW5nKXsKCQlzdGF0ZS50b2tlbml6ZT1mdW5jdGlvbihzdHJlYW0sc3RhdGUpewoJCQlpZihzdHJlYW0uc3RyaW5nPT1zdHJpbmcpCgkJCQlzdGF0ZS50b2tlbml6ZT10b2tlblBlcmw7CgkJCXN0cmVhbS5za2lwVG9FbmQoKTsKCQkJcmV0dXJuICJzdHJpbmcifTsKCQlyZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLHN0YXRlKX0KCglmdW5jdGlvbiB0b2tlblBlcmwoc3RyZWFtLHN0YXRlKXsKCQlpZihzdHJlYW0uZWF0U3BhY2UoKSkKCQkJcmV0dXJuIG51bGw7CgkJaWYoc3RhdGUuY2hhaW4pCgkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxzdGF0ZS5jaGFpbixzdGF0ZS5zdHlsZSxzdGF0ZS50YWlsKTsKCQlpZihzdHJlYW0ubWF0Y2goL15cLT9bXGRcLl0vLGZhbHNlKSkKCQkJaWYoc3RyZWFtLm1hdGNoKC9eKFwtPyhcZCpcLlxkKyhlWystXT9cZCspP3xcZCtcLlxkKil8MHhbXGRhLWZBLUZdK3wwYlswMV0rfFxkKyhlWystXT9cZCspPykvKSkKCQkJCXJldHVybiAnbnVtYmVyJzsKCQlpZihzdHJlYW0ubWF0Y2goL148PCg/PVx3KS8pKXsJCQkvLyBOT1RFOiA8PFNPTUVUSElOR1xuLi4uXG5TT01FVEhJTkdcbgoJCQlzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CgkJCXJldHVybiB0b2tlblNPTUVUSElORyhzdHJlYW0sc3RhdGUsc3RyZWFtLmN1cnJlbnQoKS5zdWJzdHIoMikpfQoJCWlmKHN0cmVhbS5zb2woKSYmc3RyZWFtLm1hdGNoKC9eXD1pdGVtKD8hXHcpLykpey8vIE5PVEU6IFxuPWl0ZW0uLi5cbj1jdXRcbgoJCQlyZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLCc9Y3V0Jyl9CgkJdmFyIGNoPXN0cmVhbS5uZXh0KCk7CgkJaWYoY2g9PSciJ3x8Y2g9PSInIil7CQkJCS8vIE5PVEU6ICcgb3IgIiBvciA8PCdTT01FVEhJTkcnXG4uLi5cblNPTUVUSElOR1xuIG9yIDw8IlNPTUVUSElORyJcbi4uLlxuU09NRVRISU5HXG4KCQkJaWYoc3RyZWFtLnByZWZpeCgzKT09Ijw8IitjaCl7CgkJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQkJc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwoJCQkJdmFyIG49c3RyZWFtLmN1cnJlbnQoKS5zdWJzdHIoMSk7CgkJCQlpZihuJiZzdHJlYW0uZWF0KGNoKSkKCQkJCQlyZXR1cm4gdG9rZW5TT01FVEhJTkcoc3RyZWFtLHN0YXRlLG4pOwoJCQkJc3RyZWFtLnBvcz1wfQoJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2NoXSwic3RyaW5nIil9CgkJaWYoY2g9PSJxIil7CgkJCXZhciBjPXN0cmVhbS5sb29rKC0yKTsKCQkJaWYoIShjJiYvXHcvLnRlc3QoYykpKXsKCQkJCWM9c3RyZWFtLmxvb2soMCk7CgkJCQlpZihjPT0ieCIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX19CgkJCQllbHNlIGlmKGM9PSJxIil7CgkJCQkJYz1zdHJlYW0ubG9vaygxKTsKCQkJCQlpZihjPT0iKCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIl0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSwic3RyaW5nIil9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0iPCIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+Il0sInN0cmluZyIpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSwic3RyaW5nIil9fQoJCQkJZWxzZSBpZihjPT0idyIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLCJicmFja2V0Iil9CgkJCQkJaWYoYz09IlsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSJdLCJicmFja2V0Iil9CgkJCQkJaWYoYz09InsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSJdLCJicmFja2V0Iil9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLCJicmFja2V0Iil9CgkJCQkJaWYoL1tcXiciIX5cL10vLnRlc3QoYykpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW3N0cmVhbS5lYXQoYyldLCJicmFja2V0Iil9fQoJCQkJZWxzZSBpZihjPT0iciIpewoJCQkJCWM9c3RyZWFtLmxvb2soMSk7CgkJCQkJaWYoYz09IigiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJbIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMik7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDIpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IjwiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgyKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtzdHJlYW0uZWF0KGMpXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX19CgkJCQllbHNlIGlmKC9bXF4nIiF+XC8oXFt7PF0vLnRlc3QoYykpewoJCQkJCWlmKGM9PSIoIil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIikiXSwic3RyaW5nIil9CgkJCQkJaWYoYz09IlsiKXsKCQkJCQkJc3RyZWFtLmVhdFN1ZmZpeCgxKTsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSJdLCJzdHJpbmciKX0KCQkJCQlpZihjPT0ieyIpewoJCQkJCQlzdHJlYW0uZWF0U3VmZml4KDEpOwoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJ9Il0sInN0cmluZyIpfQoJCQkJCWlmKGM9PSI8Iil7CgkJCQkJCXN0cmVhbS5lYXRTdWZmaXgoMSk7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iXSwic3RyaW5nIil9CgkJCQkJaWYoL1tcXiciIX5cL10vLnRlc3QoYykpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW3N0cmVhbS5lYXQoYyldLCJzdHJpbmciKX19fX0KCQlpZihjaD09Im0iKXsKCQkJdmFyIGM9c3RyZWFtLmxvb2soLTIpOwoJCQlpZighKGMmJi9cdy8udGVzdChjKSkpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKC9bXF4nIiF+XC9dLy50ZXN0KGMpKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFtjXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iKCIpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIl0sUlhzdHlsZSxSWG1vZGlmaWVycyl9CgkJCQkJaWYoYz09IlsiKXsKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpfQoJCQkJCWlmKGM9PSJ7Iil7CgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQkJCQlpZihjPT0iPCIpewoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+Il0sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX19CgkJaWYoY2g9PSJzIil7CgkJCXZhciBjPS9bXC8+XF19KVx3XS8udGVzdChzdHJlYW0ubG9vaygtMikpOwoJCQlpZighYyl7CgkJCQljPXN0cmVhbS5lYXQoL1soXFt7PFxeJyIhflwvXS8pOwoJCQkJaWYoYyl7CgkJCQkJaWYoYz09IlsiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyJdIiwiXSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSJ7IikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsifSIsIn0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0iPCIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIj4iLCI+Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IigiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyIpIiwiKSJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbYyxjXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX19fQoJCWlmKGNoPT0ieSIpewoJCQl2YXIgYz0vW1wvPlxdfSlcd10vLnRlc3Qoc3RyZWFtLmxvb2soLTIpKTsKCQkJaWYoIWMpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKGM9PSJbIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSIsIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0ieyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iLCJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IjwiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+IiwiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSIoIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSIsIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2MsY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX0KCQlpZihjaD09InQiKXsKCQkJdmFyIGM9L1tcLz5cXX0pXHddLy50ZXN0KHN0cmVhbS5sb29rKC0yKSk7CgkJCWlmKCFjKXsKCQkJCWM9c3RyZWFtLmVhdCgiciIpO2lmKGMpewoJCQkJYz1zdHJlYW0uZWF0KC9bKFxbezxcXiciIX5cL10vKTsKCQkJCWlmKGMpewoJCQkJCWlmKGM9PSJbIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiXSIsIl0iXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlpZihjPT0ieyIpCgkJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbIn0iLCJ9Il0sUlhzdHlsZSxSWG1vZGlmaWVycyk7CgkJCQkJaWYoYz09IjwiKQoJCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWyI+IiwiPiJdLFJYc3R5bGUsUlhtb2RpZmllcnMpOwoJCQkJCWlmKGM9PSIoIikKCQkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsiKSIsIikiXSxSWHN0eWxlLFJYbW9kaWZpZXJzKTsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2MsY10sUlhzdHlsZSxSWG1vZGlmaWVycyl9fX19CgkJaWYoY2g9PSJgIil7CgkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbY2hdLCJ2YXJpYWJsZS0yIil9CgkJaWYoY2g9PSIvIil7CgkJCWlmKCEvflxzKiQvLnRlc3Qoc3RyZWFtLnByZWZpeCgpKSkKCQkJCXJldHVybiAib3BlcmF0b3IiOwoJCQllbHNlCgkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsW2NoXSxSWHN0eWxlLFJYbW9kaWZpZXJzKX0KCQlpZihjaD09IiQiKXsKCQkJdmFyIHA9c3RyZWFtLnBvczsKCQkJaWYoc3RyZWFtLmVhdFdoaWxlKC9cZC8pfHxzdHJlYW0uZWF0KCJ7IikmJnN0cmVhbS5lYXRXaGlsZSgvXGQvKSYmc3RyZWFtLmVhdCgifSIpKQoJCQkJcmV0dXJuICJ2YXJpYWJsZS0yIjsKCQkJZWxzZQoJCQkJc3RyZWFtLnBvcz1wfQoJCWlmKC9bJEAlXS8udGVzdChjaCkpewoJCQl2YXIgcD1zdHJlYW0ucG9zOwoJCQlpZihzdHJlYW0uZWF0KCJeIikmJnN0cmVhbS5lYXQoL1tBLVpdLyl8fCEvW0AkJSZdLy50ZXN0KHN0cmVhbS5sb29rKC0yKSkmJnN0cmVhbS5lYXQoL1s9fFxcXC0jP0A7OiZgflxeIVxbXF0qJyIkKy4sXC88PigpXS8pKXsKCQkJCXZhciBjPXN0cmVhbS5jdXJyZW50KCk7CgkJCQlpZihQRVJMW2NdKQoJCQkJCXJldHVybiAidmFyaWFibGUtMiJ9CgkJCXN0cmVhbS5wb3M9cH0KCQlpZigvWyRAJSZdLy50ZXN0KGNoKSl7CgkJCWlmKHN0cmVhbS5lYXRXaGlsZSgvW1x3JFxbXF1dLyl8fHN0cmVhbS5lYXQoInsiKSYmc3RyZWFtLmVhdFdoaWxlKC9bXHckXFtcXV0vKSYmc3RyZWFtLmVhdCgifSIpKXsKCQkJCXZhciBjPXN0cmVhbS5jdXJyZW50KCk7CgkJCQlpZihQRVJMW2NdKQoJCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCQllbHNlCgkJCQkJcmV0dXJuICJ2YXJpYWJsZSJ9fQoJCWlmKGNoPT0iIyIpewoJCQlpZihzdHJlYW0ubG9vaygtMikhPSIkIil7CgkJCQlzdHJlYW0uc2tpcFRvRW5kKCk7CgkJCQlyZXR1cm4gImNvbW1lbnQifX0KCQlpZigvWzorXC1cXiokJiVAPTw+IT98XC9+XC5dLy50ZXN0KGNoKSl7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCXN0cmVhbS5lYXRXaGlsZSgvWzorXC1cXiokJiVAPTw+IT98XC9+XC5dLyk7CgkJCWlmKFBFUkxbc3RyZWFtLmN1cnJlbnQoKV0pCgkJCQlyZXR1cm4gIm9wZXJhdG9yIjsKCQkJZWxzZQoJCQkJc3RyZWFtLnBvcz1wfQoJCWlmKGNoPT0iXyIpewoJCQlpZihzdHJlYW0ucG9zPT0xKXsKCQkJCWlmKHN0cmVhbS5zdWZmaXgoNik9PSJfRU5EX18iKXsKCQkJCQlyZXR1cm4gdG9rZW5DaGFpbihzdHJlYW0sc3RhdGUsWydcMCddLCJjb21tZW50Iil9CgkJCQllbHNlIGlmKHN0cmVhbS5zdWZmaXgoNyk9PSJfREFUQV9fIil7CgkJCQkJcmV0dXJuIHRva2VuQ2hhaW4oc3RyZWFtLHN0YXRlLFsnXDAnXSwidmFyaWFibGUtMiIpfQoJCQkJZWxzZSBpZihzdHJlYW0uc3VmZml4KDcpPT0iX0NfXyIpewoJCQkJCXJldHVybiB0b2tlbkNoYWluKHN0cmVhbSxzdGF0ZSxbJ1wwJ10sInN0cmluZyIpfX19CgkJaWYoL1x3Ly50ZXN0KGNoKSl7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCWlmKHN0cmVhbS5sb29rKC0yKT09InsiJiYoc3RyZWFtLmxvb2soMCk9PSJ9Inx8c3RyZWFtLmVhdFdoaWxlKC9cdy8pJiZzdHJlYW0ubG9vaygwKT09In0iKSkKCQkJCXJldHVybiAic3RyaW5nIjsKCQkJZWxzZQoJCQkJc3RyZWFtLnBvcz1wfQoJCWlmKC9bQS1aXS8udGVzdChjaCkpewoJCQl2YXIgbD1zdHJlYW0ubG9vaygtMik7CgkJCXZhciBwPXN0cmVhbS5wb3M7CgkJCXN0cmVhbS5lYXRXaGlsZSgvW0EtWl9dLyk7CgkJCWlmKC9bXGRhLXpdLy50ZXN0KHN0cmVhbS5sb29rKDApKSl7CgkJCQlzdHJlYW0ucG9zPXB9CgkJCWVsc2V7CgkJCQl2YXIgYz1QRVJMW3N0cmVhbS5jdXJyZW50KCldOwoJCQkJaWYoIWMpCgkJCQkJcmV0dXJuICJtZXRhIjsKCQkJCWlmKGNbMV0pCgkJCQkJYz1jWzBdOwoJCQkJaWYobCE9IjoiKXsKCQkJCQlpZihjPT0xKQoJCQkJCQlyZXR1cm4gImtleXdvcmQiOwoJCQkJCWVsc2UgaWYoYz09MikKCQkJCQkJcmV0dXJuICJkZWYiOwoJCQkJCWVsc2UgaWYoYz09MykKCQkJCQkJcmV0dXJuICJhdG9tIjsKCQkJCQllbHNlIGlmKGM9PTQpCgkJCQkJCXJldHVybiAib3BlcmF0b3IiOwoJCQkJCWVsc2UgaWYoYz09NSkKCQkJCQkJcmV0dXJuICJ2YXJpYWJsZS0yIjsKCQkJCQllbHNlCgkJCQkJCXJldHVybiAibWV0YSJ9CgkJCQllbHNlCgkJCQkJcmV0dXJuICJtZXRhIn19CgkJaWYoL1thLXpBLVpfXS8udGVzdChjaCkpewoJCQl2YXIgbD1zdHJlYW0ubG9vaygtMik7CgkJCXN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKCQkJdmFyIGM9UEVSTFtzdHJlYW0uY3VycmVudCgpXTsKCQkJaWYoIWMpCgkJCQlyZXR1cm4gIm1ldGEiOwoJCQlpZihjWzFdKQoJCQkJYz1jWzBdOwoJCQlpZihsIT0iOiIpewoJCQkJaWYoYz09MSkKCQkJCQlyZXR1cm4gImtleXdvcmQiOwoJCQkJZWxzZSBpZihjPT0yKQoJCQkJCXJldHVybiAiZGVmIjsKCQkJCWVsc2UgaWYoYz09MykKCQkJCQlyZXR1cm4gImF0b20iOwoJCQkJZWxzZSBpZihjPT00KQoJCQkJCXJldHVybiAib3BlcmF0b3IiOwoJCQkJZWxzZSBpZihjPT01KQoJCQkJCXJldHVybiAidmFyaWFibGUtMiI7CgkJCQllbHNlCgkJCQkJcmV0dXJuICJtZXRhIn0KCQkJZWxzZQoJCQkJcmV0dXJuICJtZXRhIn0KCQlyZXR1cm4gbnVsbH0KCglyZXR1cm57CgkJc3RhcnRTdGF0ZTpmdW5jdGlvbigpewoJCQlyZXR1cm57CgkJCQl0b2tlbml6ZTp0b2tlblBlcmwsCgkJCQljaGFpbjpudWxsLAoJCQkJc3R5bGU6bnVsbCwKCQkJCXRhaWw6bnVsbH19LAoJCXRva2VuOmZ1bmN0aW9uKHN0cmVhbSxzdGF0ZSl7CgkJCXJldHVybiAoc3RhdGUudG9rZW5pemV8fHRva2VuUGVybCkoc3RyZWFtLHN0YXRlKX0sCgkJZWxlY3RyaWNDaGFyczoie30ifX0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGVybCIsICJwZXJsIik7CgovLyBpdCdzIGxpa2UgInBlZWsiLCBidXQgbmVlZCBmb3IgbG9vay1haGVhZCBvciBsb29rLWJlaGluZCBpZiBpbmRleCA8IDAKQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLmxvb2s9ZnVuY3Rpb24oYyl7CglyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyhjfHwwKSl9OwoKLy8gcmV0dXJuIGEgcGFydCBvZiBwcmVmaXggb2YgY3VycmVudCBzdHJlYW0gZnJvbSBjdXJyZW50IHBvc2l0aW9uCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5wcmVmaXg9ZnVuY3Rpb24oYyl7CglpZihjKXsKCQl2YXIgeD10aGlzLnBvcy1jOwoJCXJldHVybiB0aGlzLnN0cmluZy5zdWJzdHIoKHg+PTA/eDowKSxjKX0KCWVsc2V7CgkJcmV0dXJuIHRoaXMuc3RyaW5nLnN1YnN0cigwLHRoaXMucG9zLTEpfX07CgovLyByZXR1cm4gYSBwYXJ0IG9mIHN1ZmZpeCBvZiBjdXJyZW50IHN0cmVhbSBmcm9tIGN1cnJlbnQgcG9zaXRpb24KQ29kZU1pcnJvci5TdHJpbmdTdHJlYW0ucHJvdG90eXBlLnN1ZmZpeD1mdW5jdGlvbihjKXsKCXZhciB5PXRoaXMuc3RyaW5nLmxlbmd0aDsKCXZhciB4PXktdGhpcy5wb3MrMTsKCXJldHVybiB0aGlzLnN0cmluZy5zdWJzdHIodGhpcy5wb3MsKGMmJmM8eT9jOngpKX07CgovLyByZXR1cm4gYSBwYXJ0IG9mIHN1ZmZpeCBvZiBjdXJyZW50IHN0cmVhbSBmcm9tIGN1cnJlbnQgcG9zaXRpb24gYW5kIGNoYW5nZSBjdXJyZW50IHBvc2l0aW9uCkNvZGVNaXJyb3IuU3RyaW5nU3RyZWFtLnByb3RvdHlwZS5uc3VmZml4PWZ1bmN0aW9uKGMpewoJdmFyIHA9dGhpcy5wb3M7Cgl2YXIgbD1jfHwodGhpcy5zdHJpbmcubGVuZ3RoLXRoaXMucG9zKzEpOwoJdGhpcy5wb3MrPWw7CglyZXR1cm4gdGhpcy5zdHJpbmcuc3Vic3RyKHAsbCl9OwoKLy8gZWF0aW5nIGFuZCB2b21pdGluZyBhIHBhcnQgb2Ygc3RyZWFtIGZyb20gY3VycmVudCBwb3NpdGlvbgpDb2RlTWlycm9yLlN0cmluZ1N0cmVhbS5wcm90b3R5cGUuZWF0U3VmZml4PWZ1bmN0aW9uKGMpewoJdmFyIHg9dGhpcy5wb3MrYzsKCXZhciB5OwoJaWYoeDw9MCkKCQl0aGlzLnBvcz0wOwoJZWxzZSBpZih4Pj0oeT10aGlzLnN0cmluZy5sZW5ndGgtMSkpCgkJdGhpcy5wb3M9eTsKCWVsc2UKCQl0aGlzLnBvcz14fTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFBIUCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4vamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGhwLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQSFAgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8P3BocApmdW5jdGlvbiBoZWxsbygkd2hvKSB7CglyZXR1cm4gIkhlbGxvICIgLiAkd2hvOwp9Cj8+CjxwPlRoZSBwcm9ncmFtIHNheXMgPD89IGhlbGxvKCJXb3JsZCIpID8+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIEpTIGNvZGUiKTsgLy8gYWxzbyBjb2xvcmVkCjwvc2NyaXB0Pgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwIiwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogImtlZXAiLAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgSFRNTC9QSFAgbW9kZSBiYXNlZCBvbgogICAgdGhlIDxhIGhyZWY9Ii4uL2NsaWtlLyI+Qy1saWtlPC9hPiBtb2RlLiBEZXBlbmRzIG9uIFhNTCwKICAgIEphdmFTY3JpcHQsIENTUywgYW5kIEMtbGlrZSBtb2Rlcy48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwPC9jb2RlPiAoSFRNTCB3aXRoIFBIUCBjb2RlKSwgPGNvZGU+dGV4dC94LXBocDwvY29kZT4gKHBsYWluLCBub24td3JhcHBlZCBQSFAgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICBmdW5jdGlvbiBoZXJlZG9jKGRlbGltKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKGRlbGltKSkgc3RhdGUudG9rZW5pemUgPSBudWxsOwogICAgICBlbHNlIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfQogIH0KICB2YXIgcGhwQ29uZmlnID0gewogICAgbmFtZTogImNsaWtlIiwKICAgIGtleXdvcmRzOiBrZXl3b3JkcygiYWJzdHJhY3QgYW5kIGFycmF5IGFzIGJyZWFrIGNhc2UgY2F0Y2ggY2xhc3MgY2xvbmUgY29uc3QgY29udGludWUgZGVjbGFyZSBkZWZhdWx0ICIgKwogICAgICAgICAgICAgICAgICAgICAgICJkbyBlbHNlIGVsc2VpZiBlbmRkZWNsYXJlIGVuZGZvciBlbmRmb3JlYWNoIGVuZGlmIGVuZHN3aXRjaCBlbmR3aGlsZSBleHRlbmRzIGZpbmFsICIgKwogICAgICAgICAgICAgICAgICAgICAgICJmb3IgZm9yZWFjaCBmdW5jdGlvbiBnbG9iYWwgZ290byBpZiBpbXBsZW1lbnRzIGludGVyZmFjZSBpbnN0YW5jZW9mIG5hbWVzcGFjZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAibmV3IG9yIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyBzdGF0aWMgc3dpdGNoIHRocm93IHRyYWl0IHRyeSB1c2UgdmFyIHdoaWxlIHhvciAiICsKICAgICAgICAgICAgICAgICAgICAgICAiZGllIGVjaG8gZW1wdHkgZXhpdCBldmFsIGluY2x1ZGUgaW5jbHVkZV9vbmNlIGlzc2V0IGxpc3QgcmVxdWlyZSByZXF1aXJlX29uY2UgcmV0dXJuICIgKwogICAgICAgICAgICAgICAgICAgICAgICJwcmludCB1bnNldCBfX2hhbHRfY29tcGlsZXIgc2VsZiBzdGF0aWMgcGFyZW50IiksCiAgICBibG9ja0tleXdvcmRzOiBrZXl3b3JkcygiY2F0Y2ggZG8gZWxzZSBlbHNlaWYgZm9yIGZvcmVhY2ggaWYgc3dpdGNoIHRyeSB3aGlsZSIpLAogICAgYXRvbXM6IGtleXdvcmRzKCJ0cnVlIGZhbHNlIG51bGwgVFJVRSBGQUxTRSBOVUxMIiksCiAgICBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLAogICAgaG9va3M6IHsKICAgICAgIiQiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgICAgcmV0dXJuICJ2YXJpYWJsZS0yIjsKICAgICAgfSwKICAgICAgIjwiOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvPDwvKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl0vKTsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaGVyZWRvYyhzdHJlYW0uY3VycmVudCgpLnNsaWNlKDMpKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9LAogICAgICAiIyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiAhc3RyZWFtLm1hdGNoKCI/PiIsIGZhbHNlKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgICB9LAogICAgICAiLyI6IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSAmJiAhc3RyZWFtLm1hdGNoKCI/PiIsIGZhbHNlKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogIH07CgogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGhwIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICAgIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiamF2YXNjcmlwdCIpOwogICAgdmFyIGNzc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAiY3NzIik7CiAgICB2YXIgcGhwTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHBocENvbmZpZyk7CgogICAgZnVuY3Rpb24gZGlzcGF0Y2goc3RyZWFtLCBzdGF0ZSkgeyAvLyBUT0RPIG9wZW4gUEhQIGluc2lkZSB0ZXh0L2NzcwogICAgICB2YXIgaXNQSFAgPSBzdGF0ZS5tb2RlID09ICJwaHAiOwogICAgICBpZiAoc3RyZWFtLnNvbCgpICYmIHN0YXRlLnBlbmRpbmcgIT0gJyInKSBzdGF0ZS5wZW5kaW5nID0gbnVsbDsKICAgICAgaWYgKHN0YXRlLmN1ck1vZGUgPT0gaHRtbE1vZGUpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFw/XHcqLykpIHsKICAgICAgICAgIHN0YXRlLmN1ck1vZGUgPSBwaHBNb2RlOwogICAgICAgICAgc3RhdGUuY3VyU3RhdGUgPSBzdGF0ZS5waHA7CiAgICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9ICI/PiI7CgkgIHN0YXRlLm1vZGUgPSAicGhwIjsKICAgICAgICAgIHJldHVybiAibWV0YSI7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5wZW5kaW5nID09ICciJykgewogICAgICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLm5leHQoKSAhPSAnIicpIHt9CiAgICAgICAgICB2YXIgc3R5bGUgPSAic3RyaW5nIjsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnBlbmRpbmcgJiYgc3RyZWFtLnBvcyA8IHN0YXRlLnBlbmRpbmcuZW5kKSB7CiAgICAgICAgICBzdHJlYW0ucG9zID0gc3RhdGUucGVuZGluZy5lbmQ7CiAgICAgICAgICB2YXIgc3R5bGUgPSBzdGF0ZS5wZW5kaW5nLnN0eWxlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN1clN0YXRlKTsKICAgICAgICB9CiAgICAgICAgc3RhdGUucGVuZGluZyA9IG51bGw7CiAgICAgICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCksIG9wZW5QSFAgPSBjdXIuc2VhcmNoKC88XD8vKTsKICAgICAgICBpZiAob3BlblBIUCAhPSAtMSkgewogICAgICAgICAgaWYgKHN0eWxlID09ICJzdHJpbmciICYmIC9cIiQvLnRlc3QoY3VyKSAmJiAhL1w/Pi8udGVzdChjdXIpKSBzdGF0ZS5wZW5kaW5nID0gJyInOwogICAgICAgICAgZWxzZSBzdGF0ZS5wZW5kaW5nID0ge2VuZDogc3RyZWFtLnBvcywgc3R5bGU6IHN0eWxlfTsKICAgICAgICAgIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIG9wZW5QSFApOwogICAgICAgIH0gZWxzZSBpZiAoc3R5bGUgPT0gInRhZyIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuY3VyU3RhdGUuY29udGV4dCkgewogICAgICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuY3VyU3RhdGUuY29udGV4dC50YWdOYW1lKSkgewogICAgICAgICAgICBzdGF0ZS5jdXJNb2RlID0ganNNb2RlOwogICAgICAgICAgICBzdGF0ZS5jdXJTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5jdXJTdGF0ZSwgIiIpKTsKICAgICAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSAvXjxcL1xzKnNjcmlwdFxzKj4vaTsKCSAgICBzdGF0ZS5tb2RlID0gImphdmFzY3JpcHQiOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoL15zdHlsZSQvaS50ZXN0KHN0YXRlLmN1clN0YXRlLmNvbnRleHQudGFnTmFtZSkpIHsKICAgICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGNzc01vZGU7CiAgICAgICAgICAgIHN0YXRlLmN1clN0YXRlID0gY3NzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5jdXJTdGF0ZSwgIiIpKTsKICAgICAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSAvXjxcL1xzKnN0eWxlXHMqPi9pOwogICAgICAgICAgICBzdGF0ZS5tb2RlID0gImNzcyI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgfSBlbHNlIGlmICgoIWlzUEhQIHx8IHN0YXRlLnBocC50b2tlbml6ZSA9PSBudWxsKSAmJgogICAgICAgICAgICAgICAgIHN0cmVhbS5tYXRjaChzdGF0ZS5jdXJDbG9zZSwgaXNQSFApKSB7CiAgICAgICAgc3RhdGUuY3VyTW9kZSA9IGh0bWxNb2RlOwogICAgICAgIHN0YXRlLmN1clN0YXRlID0gc3RhdGUuaHRtbDsKICAgICAgICBzdGF0ZS5jdXJDbG9zZSA9IG51bGw7CglzdGF0ZS5tb2RlID0gImh0bWwiOwogICAgICAgIGlmIChpc1BIUCkgcmV0dXJuICJtZXRhIjsKICAgICAgICBlbHNlIHJldHVybiBkaXNwYXRjaChzdHJlYW0sIHN0YXRlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc3RhdGUuY3VyTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN1clN0YXRlKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB7CiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBodG1sID0gaHRtbE1vZGUuc3RhcnRTdGF0ZSgpOwogICAgICAgIHJldHVybiB7aHRtbDogaHRtbCwKICAgICAgICAgICAgICAgIHBocDogcGhwTW9kZS5zdGFydFN0YXRlKCksCiAgICAgICAgICAgICAgICBjdXJNb2RlOiBwYXJzZXJDb25maWcuc3RhcnRPcGVuID8gcGhwTW9kZSA6IGh0bWxNb2RlLAogICAgICAgICAgICAgICAgY3VyU3RhdGU6IHBhcnNlckNvbmZpZy5zdGFydE9wZW4gPyBwaHBNb2RlLnN0YXJ0U3RhdGUoKSA6IGh0bWwsCiAgICAgICAgICAgICAgICBjdXJDbG9zZTogcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/IC9eXD8+LyA6IG51bGwsCgkJbW9kZTogcGFyc2VyQ29uZmlnLnN0YXJ0T3BlbiA/ICJwaHAiIDogImh0bWwiLAogICAgICAgICAgICAgICAgcGVuZGluZzogbnVsbH0KICAgICAgfSwKCiAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICB2YXIgaHRtbCA9IHN0YXRlLmh0bWwsIGh0bWxOZXcgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShodG1sTW9kZSwgaHRtbCksCiAgICAgICAgICAgIHBocCA9IHN0YXRlLnBocCwgcGhwTmV3ID0gQ29kZU1pcnJvci5jb3B5U3RhdGUocGhwTW9kZSwgcGhwKSwgY3VyOwogICAgICAgIGlmIChzdGF0ZS5jdXJTdGF0ZSA9PSBodG1sKSBjdXIgPSBodG1sTmV3OwogICAgICAgIGVsc2UgaWYgKHN0YXRlLmN1clN0YXRlID09IHBocCkgY3VyID0gcGhwTmV3OwogICAgICAgIGVsc2UgY3VyID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoc3RhdGUuY3VyTW9kZSwgc3RhdGUuY3VyU3RhdGUpOwogICAgICAgIHJldHVybiB7aHRtbDogaHRtbE5ldywgcGhwOiBwaHBOZXcsIGN1ck1vZGU6IHN0YXRlLmN1ck1vZGUsIGN1clN0YXRlOiBjdXIsCiAgICAgICAgICAgICAgICBjdXJDbG9zZTogc3RhdGUuY3VyQ2xvc2UsIG1vZGU6IHN0YXRlLm1vZGUsCiAgICAgICAgICAgICAgICBwZW5kaW5nOiBzdGF0ZS5wZW5kaW5nfTsKICAgICAgfSwKCiAgICAgIHRva2VuOiBkaXNwYXRjaCwKCiAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgIGlmICgoc3RhdGUuY3VyTW9kZSAhPSBwaHBNb2RlICYmIC9eXHMqPFwvLy50ZXN0KHRleHRBZnRlcikpIHx8CiAgICAgICAgICAgIChzdGF0ZS5jdXJNb2RlID09IHBocE1vZGUgJiYgL15cPz4vLnRlc3QodGV4dEFmdGVyKSkpCiAgICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWwsIHRleHRBZnRlcik7CiAgICAgICAgcmV0dXJuIHN0YXRlLmN1ck1vZGUuaW5kZW50KHN0YXRlLmN1clN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICB9LAoKICAgICAgZWxlY3RyaWNDaGFyczogIi97fToiCiAgICB9CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LWh0dHBkLXBocCIsICJwaHAiKTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwLW9wZW4iLCB7bmFtZTogInBocCIsIHN0YXJ0T3BlbjogdHJ1ZX0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBocCIsIHBocENvbmZpZyk7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IE9yYWNsZSBQTC9TUUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InBsc3FsLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyOiAycHggaW5zZXQgI2RlZTt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogT3JhY2xlIFBML1NRTCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tIE9yYWNsZSBQTC9TUUwgQ29kZSBEZW1vCi8qCiAgIGJhc2VkIG9uIGMtbGlrZSBtb2RlLCBhZGFwdGVkIHRvIFBML1NRTCBieSBQZXRlciBSYWdhbml0c2NoICggaHR0cDovL3d3dy5vcmFjbGUtYW5kLWFwZXguY29tLyApCiAgIEFwcmlsIDIwMTEKKi8KREVDTEFSRQogICAgdklkeCAgICBOVU1CRVI7CiAgICB2U3RyaW5nIFZBUkNIQVIyKDEwMCk7CiAgICBjVGV4dCAgIENPTlNUQU5UIFZBUkNIQVIyKDEwMCkgOj0gJ1RoYXQnJ3MgaXQhIEhhdmUgZnVuIHdpdGggQ29kZU1pcnJvciAyJzsKQkVHSU4KICAgIHZJZHggOj0gMDsKICAgIC0tCiAgICBGT1IgckRBVEEgSU4KICAgICAgKCBTRUxFQ1QgKgogICAgICAgICAgRlJPTSBFTVAKICAgICAgICAgT1JERVIgQlkgRU1QTk8KICAgICAgKQogICAgTE9PUAogICAgICAgIHZJZHggICAgOj0gdklkeCArIDE7CiAgICAgICAgdlN0cmluZyA6PSByREFUQS5FTVBOTyB8fCAnIC0gJyB8fCByREFUQS5FTkFNRTsKICAgICAgICAtLQogICAgICAgIFVQREFURSBFTVAKICAgICAgICAgICBTRVQgU0FMICAgPSBTQUwgKiAxMDEvMTAwCiAgICAgICAgIFdIRVJFIEVNUE5PID0gckRBVEEuRU1QTk8KICAgICAgICA7CiAgICBFTkQgTE9PUDsKICAgIC0tCiAgICBTWVMuREJNU19PVVRQVVQuUHV0X0xpbmUgKGNUZXh0KTsKRU5EOwotLQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgaW5kZW50VW5pdDogNCwKICAgICAgICBtb2RlOiAidGV4dC94LXBsc3FsIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPgogICAgICAgIFNpbXBsZSBtb2RlIHRoYXQgaGFuZGxlcyBPcmFjbGUgUEwvU1FMIGxhbmd1YWdlIChhbmQgT3JhY2xlIFNRTCwgb2YgY291cnNlKS4KICAgIDwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZSBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtcGxzcWw8L2NvZGU+CiAgICAoUExTUUwgY29kZSkKPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/plsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwbHNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgICAgICAgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgICAgICAgICA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcywKICAgICAgZnVuY3Rpb25zICAgICAgICA9IHBhcnNlckNvbmZpZy5mdW5jdGlvbnMsCiAgICAgIHR5cGVzICAgICAgICAgICAgPSBwYXJzZXJDb25maWcudHlwZXMsCiAgICAgIHNxbHBsdXMgICAgICAgICAgPSBwYXJzZXJDb25maWcuc3FscGx1cywKICAgICAgbXVsdGlMaW5lU3RyaW5ncyA9IHBhcnNlckNvbmZpZy5tdWx0aUxpbmVTdHJpbmdzOwogIHZhciBpc09wZXJhdG9yQ2hhciAgID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIHZhciB0eXBlOwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUpIHsKICAgIHR5cGUgPSB0cDsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgLy8gc3RhcnQgb2Ygc3RyaW5nPwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcLl0vLnRlc3QoY2gpKQogICAgICByZXR1cm4gcmV0KGNoKTsKICAgIC8vIHN0YXJ0IG9mIGEgbnVtYmVyIHZhbHVlPwogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAibnVtYmVyIik7CiAgICB9CiAgICAvLyBtdWx0aSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi8iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgIm9wZXJhdG9yIik7CiAgICAgIH0KICAgIH0KICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQgb3Igc2ltcGxlIG9wZXJhdG9yPwogICAgZWxzZSBpZiAoY2ggPT0gIi0iKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCItIikpIHsKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgICB9CiAgICB9CiAgICAvLyBwbC9zcWwgdmFyaWFibGU/CiAgICBlbHNlIGlmIChjaCA9PSAiQCIgfHwgY2ggPT0gIiQiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XGRcJF9dLyk7CiAgICAgIHJldHVybiByZXQoIndvcmQiLCAidmFyaWFibGUiKTsKICAgIH0KICAgIC8vIGlzIGl0IGEgb3BlcmF0b3I/CiAgICBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJvcGVyYXRvciIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIGdldCB0aGUgd2hvbGUgd29yZAogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQga2V5d29yZHM/CiAgICAgIGlmIChrZXl3b3JkcyAmJiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImtleXdvcmQiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgImJ1aWx0aW4iKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgdHlwZXM/CiAgICAgIGlmICh0eXBlcyAmJiB0eXBlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTIiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgc3FscGx1cyBrZXl3b3Jkcz8KICAgICAgaWYgKHNxbHBsdXMgJiYgc3FscGx1cy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInZhcmlhYmxlLTMiKTsKICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICByZXR1cm4gcmV0KCJ3b3JkIiwgInBsc3FsLXdvcmQiKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgIGlmIChuZXh0ID09IHF1b3RlICYmICFlc2NhcGVkKSB7ZW5kID0gdHJ1ZTsgYnJlYWs7fQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICAgIH0KICAgICAgaWYgKGVuZCB8fCAhKGVzY2FwZWQgfHwgbXVsdGlMaW5lU3RyaW5ncykpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJwbHNxbC1zdHJpbmciKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOwogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi8iICYmIG1heWJlRW5kKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAicGxzcWwtY29tbWVudCIpOwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBzdGFydE9mTGluZTogdHJ1ZQogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgcmV0dXJuIHN0eWxlOwogICAgfQogIH07Cn0pOwoKKGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIgY0tleXdvcmRzID0gImFib3J0IGFjY2VwdCBhY2Nlc3MgYWRkIGFsbCBhbHRlciBhbmQgYW55IGFycmF5IGFycmF5bGVuIGFzIGFzYyBhc3NlcnQgYXNzaWduIGF0IGF0dHJpYnV0ZXMgYXVkaXQgIiArCiAgICAgICAgImF1dGhvcml6YXRpb24gYXZnICIgKwogICAgICAgICJiYXNlX3RhYmxlIGJlZ2luIGJldHdlZW4gYmluYXJ5X2ludGVnZXIgYm9keSBib29sZWFuIGJ5ICIgKwogICAgICAgICJjYXNlIGNhc3QgY2hhciBjaGFyX2Jhc2UgY2hlY2sgY2xvc2UgY2x1c3RlciBjbHVzdGVycyBjb2xhdXRoIGNvbHVtbiBjb21tZW50IGNvbW1pdCBjb21wcmVzcyBjb25uZWN0ICIgKwogICAgICAgICJjb25uZWN0ZWQgY29uc3RhbnQgY29uc3RyYWludCBjcmFzaCBjcmVhdGUgY3VycmVudCBjdXJydmFsIGN1cnNvciAiICsKICAgICAgICAiZGF0YV9iYXNlIGRhdGFiYXNlIGRhdGUgZGJhIGRlYWxsb2NhdGUgZGVidWdvZmYgZGVidWdvbiBkZWNpbWFsIGRlY2xhcmUgZGVmYXVsdCBkZWZpbml0aW9uIGRlbGF5IGRlbGV0ZSAiICsKICAgICAgICAiZGVzYyBkaWdpdHMgZGlzcG9zZSBkaXN0aW5jdCBkbyBkcm9wICIgKwogICAgICAgICJlbHNlIGVsc2lmIGVuYWJsZSBlbmQgZW50cnkgZXNjYXBlIGV4Y2VwdGlvbiBleGNlcHRpb25faW5pdCBleGNoYW5nZSBleGNsdXNpdmUgZXhpc3RzIGV4aXQgZXh0ZXJuYWwgIiArCiAgICAgICAgImZhc3QgZmV0Y2ggZmlsZSBmb3IgZm9yY2UgZm9ybSBmcm9tIGZ1bmN0aW9uICIgKwogICAgICAgICJnZW5lcmljIGdvdG8gZ3JhbnQgZ3JvdXAgIiArCiAgICAgICAgImhhdmluZyAiICsKICAgICAgICAiaWRlbnRpZmllZCBpZiBpbW1lZGlhdGUgaW4gaW5jcmVtZW50IGluZGV4IGluZGV4ZXMgaW5kaWNhdG9yIGluaXRpYWwgaW5pdHJhbnMgaW5zZXJ0IGludGVyZmFjZSBpbnRlcnNlY3QgIiArCiAgICAgICAgImludG8gaXMgIiArCiAgICAgICAgImtleSAiICsKICAgICAgICAibGV2ZWwgbGlicmFyeSBsaWtlIGxpbWl0ZWQgbG9jYWwgbG9jayBsb2cgbG9nZ2luZyBsb25nIGxvb3AgIiArCiAgICAgICAgIm1hc3RlciBtYXhleHRlbnRzIG1heHRyYW5zIG1lbWJlciBtaW5leHRlbnRzIG1pbnVzIG1pc2xhYmVsIG1vZGUgbW9kaWZ5IG11bHRpc2V0ICIgKwogICAgICAgICJuZXcgbmV4dCBubyBub2F1ZGl0IG5vY29tcHJlc3Mgbm9sb2dnaW5nIG5vcGFyYWxsZWwgbm90IG5vd2FpdCBudW1iZXJfYmFzZSAiICsKICAgICAgICAib2JqZWN0IG9mIG9mZiBvZmZsaW5lIG9uIG9ubGluZSBvbmx5IG9wZW4gb3B0aW9uIG9yIG9yZGVyIG91dCAiICsKICAgICAgICAicGFja2FnZSBwYXJhbGxlbCBwYXJ0aXRpb24gcGN0ZnJlZSBwY3RpbmNyZWFzZSBwY3R1c2VkIHBsc19pbnRlZ2VyIHBvc2l0aXZlIHBvc2l0aXZlbiBwcmFnbWEgcHJpbWFyeSBwcmlvciAiICsKICAgICAgICAicHJpdmF0ZSBwcml2aWxlZ2VzIHByb2NlZHVyZSBwdWJsaWMgIiArCiAgICAgICAgInJhaXNlIHJhbmdlIHJhdyByZWFkIHJlYnVpbGQgcmVjb3JkIHJlZiByZWZlcmVuY2VzIHJlZnJlc2ggcmVsZWFzZSByZW5hbWUgcmVwbGFjZSByZXNvdXJjZSByZXN0cmljdCByZXR1cm4gIiArCiAgICAgICAgInJldHVybmluZyByZXZlcnNlIHJldm9rZSByb2xsYmFjayByb3cgcm93aWQgcm93bGFiZWwgcm93bnVtIHJvd3MgcnVuICIgKwogICAgICAgICJzYXZlcG9pbnQgc2NoZW1hIHNlZ21lbnQgc2VsZWN0IHNlcGFyYXRlIHNlc3Npb24gc2V0IHNoYXJlIHNuYXBzaG90IHNvbWUgc3BhY2Ugc3BsaXQgc3FsIHN0YXJ0IHN0YXRlbWVudCAiICsKICAgICAgICAic3RvcmFnZSBzdWJ0eXBlIHN1Y2Nlc3NmdWwgc3lub255bSAiICsKICAgICAgICAidGFiYXV0aCB0YWJsZSB0YWJsZXMgdGFibGVzcGFjZSB0YXNrIHRlcm1pbmF0ZSB0aGVuIHRvIHRyaWdnZXIgdHJ1bmNhdGUgdHlwZSAiICsKICAgICAgICAidW5pb24gdW5pcXVlIHVubGltaXRlZCB1bnJlY292ZXJhYmxlIHVudXNhYmxlIHVwZGF0ZSB1c2UgdXNpbmcgIiArCiAgICAgICAgInZhbGlkYXRlIHZhbHVlIHZhbHVlcyB2YXJpYWJsZSB2aWV3IHZpZXdzICIgKwogICAgICAgICJ3aGVuIHdoZW5ldmVyIHdoZXJlIHdoaWxlIHdpdGggd29yayI7CgogIHZhciBjRnVuY3Rpb25zID0gImFicyBhY29zIGFkZF9tb250aHMgYXNjaWkgYXNpbiBhdGFuIGF0YW4yIGF2ZXJhZ2UgIiArCiAgICAgICAgImJmaWxlbmFtZSAiICsKICAgICAgICAiY2VpbCBjaGFydG9yb3dpZCBjaHIgY29uY2F0IGNvbnZlcnQgY29zIGNvc2ggY291bnQgIiArCiAgICAgICAgImRlY29kZSBkZXJlZiBkdWFsIGR1bXAgZHVwX3ZhbF9vbl9pbmRleCAiICsKICAgICAgICAiZW1wdHkgZXJyb3IgZXhwICIgKwogICAgICAgICJmYWxzZSBmbG9vciBmb3VuZCAiICsKICAgICAgICAiZ2xiIGdyZWF0ZXN0ICIgKwogICAgICAgICJoZXh0b3JhdyAiICsKICAgICAgICAiaW5pdGNhcCBpbnN0ciBpbnN0cmIgaXNvcGVuICIgKwogICAgICAgICJsYXN0X2RheSBsZWFzdCBsZW5naHQgbGVuZ2h0YiBsbiBsb3dlciBscGFkIGx0cmltIGx1YiAiICsKICAgICAgICAibWFrZV9yZWYgbWF4IG1pbiBtb2QgbW9udGhzX2JldHdlZW4gIiArCiAgICAgICAgIm5ld190aW1lIG5leHRfZGF5IG5leHR2YWwgbmxzX2NoYXJzZXRfZGVjbF9sZW4gbmxzX2NoYXJzZXRfaWQgbmxzX2NoYXJzZXRfbmFtZSBubHNfaW5pdGNhcCBubHNfbG93ZXIgIiArCiAgICAgICAgIm5sc19zb3J0IG5sc191cHBlciBubHNzb3J0IG5vX2RhdGFfZm91bmQgbm90Zm91bmQgbnVsbCBudmwgIiArCiAgICAgICAgIm90aGVycyAiICsKICAgICAgICAicG93ZXIgIiArCiAgICAgICAgInJhd3RvaGV4IHJlZnRvaGV4IHJvdW5kIHJvd2NvdW50IHJvd2lkdG9jaGFyIHJwYWQgcnRyaW0gIiArCiAgICAgICAgInNpZ24gc2luIHNpbmggc291bmRleCBzcWxjb2RlIHNxbGVycm0gc3FydCBzdGRkZXYgc3Vic3RyIHN1YnN0cmIgc3VtIHN5c2RhdGUgIiArCiAgICAgICAgInRhbiB0YW5oIHRvX2NoYXIgdG9fZGF0ZSB0b19sYWJlbCB0b19tdWx0aV9ieXRlIHRvX251bWJlciB0b19zaW5nbGVfYnl0ZSB0cmFuc2xhdGUgdHJ1ZSB0cnVuYyAiICsKICAgICAgICAidWlkIHVwcGVyIHVzZXIgdXNlcmVudiAiICsKICAgICAgICAidmFyaWFuY2UgdnNpemUiOwoKICB2YXIgY1R5cGVzID0gImJmaWxlIGJsb2IgIiArCiAgICAgICAgImNoYXJhY3RlciBjbG9iICIgKwogICAgICAgICJkZWMgIiArCiAgICAgICAgImZsb2F0ICIgKwogICAgICAgICJpbnQgaW50ZWdlciAiICsKICAgICAgICAibWxzbGFiZWwgIiArCiAgICAgICAgIm5hdHVyYWwgbmF0dXJhbG4gbmNoYXIgbmNsb2IgbnVtYmVyIG51bWVyaWMgbnZhcmNoYXIyICIgKwogICAgICAgICJyZWFsIHJvd3R5cGUgIiArCiAgICAgICAgInNpZ250eXBlIHNtYWxsaW50IHN0cmluZyAiICsKICAgICAgICAidmFyY2hhciB2YXJjaGFyMiI7CgogIHZhciBjU3FscGx1cyA9ICJhcHBpbmZvIGFycmF5c2l6ZSBhdXRvY29tbWl0IGF1dG9wcmludCBhdXRvcmVjb3ZlcnkgYXV0b3RyYWNlICIgKwogICAgICAgICJibG9ja3Rlcm1pbmF0b3IgYnJlYWsgYnRpdGxlICIgKwogICAgICAgICJjbWRzZXAgY29sc2VwIGNvbXBhdGliaWxpdHkgY29tcHV0ZSBjb25jYXQgY29weWNvbW1pdCBjb3B5dHlwZWNoZWNrICIgKwogICAgICAgICJkZWZpbmUgZGVzY3JpYmUgIiArCiAgICAgICAgImVjaG8gZWRpdGZpbGUgZW1iZWRkZWQgZXNjYXBlIGV4ZWMgZXhlY3V0ZSAiICsKICAgICAgICAiZmVlZGJhY2sgZmxhZ2dlciBmbHVzaCAiICsKICAgICAgICAiaGVhZGluZyBoZWFkc2VwICIgKwogICAgICAgICJpbnN0YW5jZSAiICsKICAgICAgICAibGluZXNpemUgbG5vIGxvYm9mZnNldCBsb2dzb3VyY2UgbG9uZyBsb25nY2h1bmtzaXplICIgKwogICAgICAgICJtYXJrdXAgIiArCiAgICAgICAgIm5hdGl2ZSBuZXdwYWdlIG51bWZvcm1hdCBudW13aWR0aCAiICsKICAgICAgICAicGFnZXNpemUgcGF1c2UgcG5vICIgKwogICAgICAgICJyZWNzZXAgcmVjc2VwY2hhciByZWxlYXNlIHJlcGZvb3RlciByZXBoZWFkZXIgIiArCiAgICAgICAgInNlcnZlcm91dHB1dCBzaGlmdGlub3V0IHNob3cgc2hvd21vZGUgc2l6ZSBzcG9vbCBzcWxibGFua2xpbmVzIHNxbGNhc2Ugc3FsY29kZSBzcWxjb250aW51ZSBzcWxudW1iZXIgIiArCiAgICAgICAgInNxbHBsdXNjb21wYXRpYmlsaXR5IHNxbHByZWZpeCBzcWxwcm9tcHQgc3FsdGVybWluYXRvciBzdWZmaXggIiArCiAgICAgICAgInRhYiB0ZXJtIHRlcm1vdXQgdGltZSB0aW1pbmcgdHJpbW91dCB0cmltc3Bvb2wgdHRpdGxlICIgKwogICAgICAgICJ1bmRlcmxpbmUgIiArCiAgICAgICAgInZlcmlmeSB2ZXJzaW9uICIgKwogICAgICAgICJ3cmFwIjsKCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcGxzcWwiLCB7CiAgICBuYW1lOiAicGxzcWwiLAogICAga2V5d29yZHM6IGtleXdvcmRzKGNLZXl3b3JkcyksCiAgICBmdW5jdGlvbnM6IGtleXdvcmRzKGNGdW5jdGlvbnMpLAogICAgdHlwZXM6IGtleXdvcmRzKGNUeXBlcyksCiAgICBzcWxwbHVzOiBrZXl3b3JkcyhjU3FscGx1cykKICB9KTsKfSgpKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/properties/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/properties/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFByb3BlcnRpZXMgZmlsZXMgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InByb3BlcnRpZXMuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFByb3BlcnRpZXMgZmlsZXMgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgojIFRoaXMgaXMgYSBwcm9wZXJ0aWVzIGZpbGUKYS5rZXkgPSBBIHZhbHVlCmFub3RoZXIua2V5ID0gaHR0cDovL2V4YW1wbGUuY29tCiEgRXhjbGFtYXRpb24gbWFyayBhcyBjb21tZW50CmJ1dC5ub3Q9V2l0aGluICEgQSB2YWx1ZSAjIGluZGVlZAogICAjIFNwYWNlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZQogICBzcGFjZXMuYmVmb3JlLmtleT12YWx1ZQpiYWNrc2xhc2g9VXNlZCBmb3IgbXVsdGlcCiAgICAgICAgICBsaW5lIGVudHJpZXMsXAogICAgICAgICAgdGhhdCdzIGNvbnZlbmllbnQuCiMgVW5pY29kZSBzZXF1ZW5jZXMKdW5pY29kZS5rZXk9VGhpcyBpcyBcdTAwMjAgVW5pY29kZQpuby5tdWx0aWxpbmU9aGVyZQojIENvbG9ucwpjb2xvbnMgOiBjYW4gYmUgdXNlZCB0b28KIyBTcGFjZXMKc3BhY2VzXCBpblwga2V5cz1Ob3QgdmVyeSBjb21tb24uLi4KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1wcm9wZXJ0aWVzPC9jb2RlPiwKICAgIDxjb2RlPnRleHQveC1pbmk8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/properties/properties.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwcm9wZXJ0aWVzIiwgZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBzb2wgPSBzdHJlYW0uc29sKCkgfHwgc3RhdGUuYWZ0ZXJTZWN0aW9uOwogICAgICB2YXIgZW9sID0gc3RyZWFtLmVvbCgpOwoKICAgICAgc3RhdGUuYWZ0ZXJTZWN0aW9uID0gZmFsc2U7CgogICAgICBpZiAoc29sKSB7CiAgICAgICAgaWYgKHN0YXRlLm5leHRNdWx0aWxpbmUpIHsKICAgICAgICAgIHN0YXRlLmluTXVsdGlsaW5lID0gdHJ1ZTsKICAgICAgICAgIHN0YXRlLm5leHRNdWx0aWxpbmUgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGUucG9zaXRpb24gPSAiZGVmIjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChlb2wgJiYgISBzdGF0ZS5uZXh0TXVsdGlsaW5lKSB7CiAgICAgICAgc3RhdGUuaW5NdWx0aWxpbmUgPSBmYWxzZTsKICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9ICJkZWYiOwogICAgICB9CgogICAgICBpZiAoc29sKSB7CiAgICAgICAgd2hpbGUoc3RyZWFtLmVhdFNwYWNlKCkpOwogICAgICB9CgogICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwoKICAgICAgaWYgKHNvbCAmJiAoY2ggPT09ICIjIiB8fCBjaCA9PT0gIiEiIHx8IGNoID09PSAiOyIpKSB7CiAgICAgICAgc3RhdGUucG9zaXRpb24gPSAiY29tbWVudCI7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgIH0gZWxzZSBpZiAoc29sICYmIGNoID09PSAiWyIpIHsKICAgICAgICBzdGF0ZS5hZnRlclNlY3Rpb24gPSB0cnVlOwogICAgICAgIHN0cmVhbS5za2lwVG8oIl0iKTsgc3RyZWFtLmVhdCgiXSIpOwogICAgICAgIHJldHVybiAiaGVhZGVyIjsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gIj0iIHx8IGNoID09PSAiOiIpIHsKICAgICAgICBzdGF0ZS5wb3NpdGlvbiA9ICJxdW90ZSI7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09ICJcXCIgJiYgc3RhdGUucG9zaXRpb24gPT09ICJxdW90ZSIpIHsKICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSAhPT0gInUiKSB7ICAgIC8vIHUgPSBVbmljb2RlIHNlcXVlbmNlIFx1MTIzNAogICAgICAgICAgLy8gTXVsdGlsaW5lIHZhbHVlCiAgICAgICAgICBzdGF0ZS5uZXh0TXVsdGlsaW5lID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiBzdGF0ZS5wb3NpdGlvbjsKICAgIH0sCgogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgcG9zaXRpb24gOiAiZGVmIiwgICAgICAgLy8gQ3VycmVudCBwb3NpdGlvbiwgImRlZiIsICJxdW90ZSIgb3IgImNvbW1lbnQiCiAgICAgICAgbmV4dE11bHRpbGluZSA6IGZhbHNlLCAgLy8gSXMgdGhlIG5leHQgbGluZSBtdWx0aWxpbmUgdmFsdWUKICAgICAgICBpbk11bHRpbGluZSA6IGZhbHNlLCAgICAvLyBJcyB0aGUgY3VycmVudCBsaW5lIGEgbXVsdGlsaW5lIHZhbHVlCiAgICAgICAgYWZ0ZXJTZWN0aW9uIDogZmFsc2UgICAgLy8gRGlkIHdlIGp1c3Qgb3BlbiBhIHNlY3Rpb24KICAgICAgfTsKICAgIH0KCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1wcm9wZXJ0aWVzIiwgInByb3BlcnRpZXMiKTsKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtaW5pIiwgInByb3BlcnRpZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFB5dGhvbiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icHl0aG9uLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBQeXRob24gbW9kZTwvaDE+CiAgICAKICAgIDxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBMaXRlcmFscwoxMjM0CjAuMGUxMDEKLjEyMwowYjAxMDEwMDExMTAwCjBvMDEyMzQ1NjcKMHgwOTg3NjU0MzIxYWJjZGVmCjcKMjE0NzQ4MzY0NwozTAo3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNkwKMHgxMDAwMDAwMDBMCjc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2CjB4ZGVhZGJlZWYKMy4xNGoKMTAuagoxMGoKLjAwMWoKMWUxMDBqCjMuMTRlLTEwagoKCiMgU3RyaW5nIExpdGVyYWxzCidGb3JcJycKIkdvZFwiIgoiIiJzbyBsb3ZlZAp0aGUgd29ybGQiIiIKJycndGhhdCBoZSBnYXZlCmhpcyBvbmx5IGJlZ290dGVuXCcgJycnCid0aGF0IHdob3NvZXZlciBiZWxpZXZldGggXAppbiBoaW0nCicnCgojIElkZW50aWZpZXJzCl9fYV9fCmEuYgphLmIuYwoKIyBPcGVyYXRvcnMKKyAtICogLyAlICYgfCBeIH4gPCA+Cj09ICE9IDw9ID49IDw+IDw8ID4+IC8vICoqCmFuZCBvciBub3QgaW4gaXMKCiMgRGVsaW1pdGVycwooKSBbXSB7fSAsIDogYCA9IDsgQCAuICAjIE5vdGUgdGhhdCBAIGFuZCAuIHJlcXVpcmUgdGhlIHByb3BlciBjb250ZXh0LgorPSAtPSAqPSAvPSAlPSAmPSB8PSBePQovLz0gPj49IDw8PSAqKj0KCiMgS2V5d29yZHMKYXMgYXNzZXJ0IGJyZWFrIGNsYXNzIGNvbnRpbnVlIGRlZiBkZWwgZWxpZiBlbHNlIGV4Y2VwdApmaW5hbGx5IGZvciBmcm9tIGdsb2JhbCBpZiBpbXBvcnQgbGFtYmRhIHBhc3MgcmFpc2UKcmV0dXJuIHRyeSB3aGlsZSB3aXRoIHlpZWxkCgojIFB5dGhvbiAyIEtleXdvcmRzIChvdGhlcndpc2UgSWRlbnRpZmllcnMpCmV4ZWMgcHJpbnQKCiMgUHl0aG9uIDMgS2V5d29yZHMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKbm9ubG9jYWwKCiMgVHlwZXMKYm9vbCBjbGFzc21ldGhvZCBjb21wbGV4IGRpY3QgZW51bWVyYXRlIGZsb2F0IGZyb3plbnNldCBpbnQgbGlzdCBvYmplY3QKcHJvcGVydHkgcmV2ZXJzZWQgc2V0IHNsaWNlIHN0YXRpY21ldGhvZCBzdHIgc3VwZXIgdHVwbGUgdHlwZQoKIyBQeXRob24gMiBUeXBlcyAob3RoZXJ3aXNlIElkZW50aWZpZXJzKQpiYXNlc3RyaW5nIGJ1ZmZlciBmaWxlIGxvbmcgdW5pY29kZSB4cmFuZ2UKCiMgUHl0aG9uIDMgVHlwZXMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKYnl0ZWFycmF5IGJ5dGVzIGZpbHRlciBtYXAgbWVtb3J5dmlldyBvcGVuIHJhbmdlIHppcAoKIyBTb21lIEV4YW1wbGUgY29kZQppbXBvcnQgb3MKZnJvbSBwYWNrYWdlIGltcG9ydCBQYXJlbnRDbGFzcwoKQG5vbnNlbnNlRGVjb3JhdG9yCmRlZiBkb2VzTm90aGluZygpOgogICAgcGFzcwoKY2xhc3MgRXhhbXBsZUNsYXNzKFBhcmVudENsYXNzKToKICAgIEBzdGF0aWNtZXRob2QKICAgIGRlZiBleGFtcGxlKGlucHV0U3RyKToKICAgICAgICBhID0gbGlzdChpbnB1dFN0cikKICAgICAgICBhLnJldmVyc2UoKQogICAgICAgIHJldHVybiAnJy5qb2luKGEpCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIG1peGluID0gJ0hlbGxvJyk6CiAgICAgICAgc2VsZi5taXhpbiA9IG1peGluCgo8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInB5dGhvbiIsCiAgICAgICAgICAgICAgIHZlcnNpb246IDIsCiAgICAgICAgICAgICAgIHNpbmdsZUxpbmVTdHJpbmdFcnJvcnM6IGZhbHNlfSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPGgyPkNvbmZpZ3VyYXRpb24gT3B0aW9uczo8L2gyPgogICAgPHVsPgogICAgICA8bGk+dmVyc2lvbiAtIDIvMyAtIFRoZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byByZWNvZ25pemUuICBEZWZhdWx0IGlzIDIuPC9saT4KICAgICAgPGxpPnNpbmdsZUxpbmVTdHJpbmdFcnJvcnMgLSB0cnVlL2ZhbHNlIC0gSWYgeW91IGhhdmUgYSBzaW5nbGUtbGluZSBzdHJpbmcgdGhhdCBpcyBub3QgdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLCB0aGlzIHdpbGwgc2hvdyBzdWJzZXF1ZW50IGxpbmVzIGFzIGVycm9ycyBpZiB0cnVlLCBvdGhlcndpc2UgaXQgd2lsbCBjb25zaWRlciB0aGUgbmV3bGluZSBhcyB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuIERlZmF1bHQgaXMgZmFsc2UuPC9saT4KICAgIDwvdWw+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1weXRob248L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJweXRob24iLCBmdW5jdGlvbihjb25mLCBwYXJzZXJDb25mKSB7CiAgICB2YXIgRVJST1JDTEFTUyA9ICdlcnJvcic7CiAgICAKICAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHsKICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRzLmpvaW4oIil8KCIpICsgIikpXFxiIik7CiAgICB9CiAgICAKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXSIpOwogICAgdmFyIHNpbmdsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCdeW1xcKFxcKVxcW1xcXVxce1xcfUAsOmA9O1xcLl0nKTsKICAgIHZhciBkb3VibGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeKCg9PSl8KCE9KXwoPD0pfCg+PSl8KDw+KXwoPDwpfCg+Pil8KC8vKXwoXFwqXFwqKSkiKTsKICAgIHZhciBkb3VibGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgiXigoXFwrPSl8KFxcLT0pfChcXCo9KXwoJT0pfCgvPSl8KCY9KXwoXFx8PSl8KFxcXj0pKSIpOwogICAgdmFyIHRyaXBsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKCgvLz0pfCg+Pj0pfCg8PD0pfChcXCpcXCo9KSkiKTsKICAgIHZhciBpZGVudGlmaWVycyA9IG5ldyBSZWdFeHAoIl5bX0EtWmEtel1bX0EtWmEtejAtOV0qIik7CgogICAgdmFyIHdvcmRPcGVyYXRvcnMgPSB3b3JkUmVnZXhwKFsnYW5kJywgJ29yJywgJ25vdCcsICdpcycsICdpbiddKTsKICAgIHZhciBjb21tb25rZXl3b3JkcyA9IFsnYXMnLCAnYXNzZXJ0JywgJ2JyZWFrJywgJ2NsYXNzJywgJ2NvbnRpbnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmJywgJ2RlbCcsICdlbGlmJywgJ2Vsc2UnLCAnZXhjZXB0JywgJ2ZpbmFsbHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICdmb3InLCAnZnJvbScsICdnbG9iYWwnLCAnaWYnLCAnaW1wb3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFtYmRhJywgJ3Bhc3MnLCAncmFpc2UnLCAncmV0dXJuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ5JywgJ3doaWxlJywgJ3dpdGgnLCAneWllbGQnXTsKICAgIHZhciBjb21tb25CdWlsdGlucyA9IFsnYWJzJywgJ2FsbCcsICdhbnknLCAnYmluJywgJ2Jvb2wnLCAnYnl0ZWFycmF5JywgJ2NhbGxhYmxlJywgJ2NocicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzbWV0aG9kJywgJ2NvbXBpbGUnLCAnY29tcGxleCcsICdkZWxhdHRyJywgJ2RpY3QnLCAnZGlyJywgJ2Rpdm1vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VudW1lcmF0ZScsICdldmFsJywgJ2ZpbHRlcicsICdmbG9hdCcsICdmb3JtYXQnLCAnZnJvemVuc2V0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0YXR0cicsICdnbG9iYWxzJywgJ2hhc2F0dHInLCAnaGFzaCcsICdoZWxwJywgJ2hleCcsICdpZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0JywgJ2ludCcsICdpc2luc3RhbmNlJywgJ2lzc3ViY2xhc3MnLCAnaXRlcicsICdsZW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0JywgJ2xvY2FscycsICdtYXAnLCAnbWF4JywgJ21lbW9yeXZpZXcnLCAnbWluJywgJ25leHQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvYmplY3QnLCAnb2N0JywgJ29wZW4nLCAnb3JkJywgJ3BvdycsICdwcm9wZXJ0eScsICdyYW5nZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcHInLCAncmV2ZXJzZWQnLCAncm91bmQnLCAnc2V0JywgJ3NldGF0dHInLCAnc2xpY2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb3J0ZWQnLCAnc3RhdGljbWV0aG9kJywgJ3N0cicsICdzdW0nLCAnc3VwZXInLCAndHVwbGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJywgJ3ZhcnMnLCAnemlwJywgJ19faW1wb3J0X18nLCAnTm90SW1wbGVtZW50ZWQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdFbGxpcHNpcycsICdfX2RlYnVnX18nXTsKICAgIHZhciBweTIgPSB7J2J1aWx0aW5zJzogWydhcHBseScsICdiYXNlc3RyaW5nJywgJ2J1ZmZlcicsICdjbXAnLCAnY29lcmNlJywgJ2V4ZWNmaWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlJywgJ2ludGVybicsICdsb25nJywgJ3Jhd19pbnB1dCcsICdyZWR1Y2UnLCAncmVsb2FkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bmljaHInLCAndW5pY29kZScsICd4cmFuZ2UnLCAnRmFsc2UnLCAnVHJ1ZScsICdOb25lJ10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnZXhlYycsICdwcmludCddfTsKICAgIHZhciBweTMgPSB7J2J1aWx0aW5zJzogWydhc2NpaScsICdieXRlcycsICdleGVjJywgJ3ByaW50J10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnbm9ubG9jYWwnLCAnRmFsc2UnLCAnVHJ1ZScsICdOb25lJ119OwoKICAgIGlmICghIXBhcnNlckNvbmYudmVyc2lvbiAmJiBwYXJzZUludChwYXJzZXJDb25mLnZlcnNpb24sIDEwKSA9PT0gMykgewogICAgICAgIGNvbW1vbmtleXdvcmRzID0gY29tbW9ua2V5d29yZHMuY29uY2F0KHB5My5rZXl3b3Jkcyk7CiAgICAgICAgY29tbW9uQnVpbHRpbnMgPSBjb21tb25CdWlsdGlucy5jb25jYXQocHkzLmJ1aWx0aW5zKTsKICAgICAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKChbcmJdfChicikpPygnezN9fFwiezN9fFsnXCJdKSkiLCAiaSIpOwogICAgfSBlbHNlIHsKICAgICAgICBjb21tb25rZXl3b3JkcyA9IGNvbW1vbmtleXdvcmRzLmNvbmNhdChweTIua2V5d29yZHMpOwogICAgICAgIGNvbW1vbkJ1aWx0aW5zID0gY29tbW9uQnVpbHRpbnMuY29uY2F0KHB5Mi5idWlsdGlucyk7CiAgICAgICAgdmFyIHN0cmluZ1ByZWZpeGVzID0gbmV3IFJlZ0V4cCgiXigoW3J1Yl18KHVyKXwoYnIpKT8oJ3szfXxcInszfXxbJ1wiXSkpIiwgImkiKTsKICAgIH0KICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoY29tbW9ua2V5d29yZHMpOwogICAgdmFyIGJ1aWx0aW5zID0gd29yZFJlZ2V4cChjb21tb25CdWlsdGlucyk7CgogICAgdmFyIGluZGVudEluZm8gPSBudWxsOwoKICAgIC8vIHRva2VuaXplcnMKICAgIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMKICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgIHZhciBzY29wZU9mZnNldCA9IHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgdmFyIGxpbmVPZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgICAgIGlmIChsaW5lT2Zmc2V0ID4gc2NvcGVPZmZzZXQpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRJbmZvID0gJ2luZGVudCc7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpbmVPZmZzZXQgPCBzY29wZU9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIGluZGVudEluZm8gPSAnZGVkZW50JzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHNjb3BlT2Zmc2V0ID4gMCkgewogICAgICAgICAgICAgICAgICAgIGRlZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHZhciBjaCA9IHN0cmVhbS5wZWVrKCk7CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIENvbW1lbnRzCiAgICAgICAgaWYgKGNoID09PSAnIycpIHsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgTnVtYmVyIExpdGVyYWxzCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlswLTlcLl0vLCBmYWxzZSkpIHsKICAgICAgICAgICAgdmFyIGZsb2F0TGl0ZXJhbCA9IGZhbHNlOwogICAgICAgICAgICAvLyBGbG9hdHMKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxkKlwuXGQrKGVbXCtcLV0/XGQrKT8vaSkpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXGQrXC5cZCovKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cLlxkKy8pKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKGZsb2F0TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgLy8gRmxvYXQgbGl0ZXJhbHMgbWF5IGJlICJpbWFnaW5hcnkiCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpOwogICAgICAgICAgICAgICAgcmV0dXJuICdudW1iZXInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEludGVnZXJzCiAgICAgICAgICAgIHZhciBpbnRMaXRlcmFsID0gZmFsc2U7CiAgICAgICAgICAgIC8vIEhleAogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eMHhbMC05YS1mXSsvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgLy8gQmluYXJ5CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wYlswMV0rL2kpKSB7IGludExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIC8vIE9jdGFsCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14wb1swLTddKy9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICAvLyBEZWNpbWFsCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bMS05XVxkKihlW1wrXC1dP1xkKyk/LykpIHsKICAgICAgICAgICAgICAgIC8vIERlY2ltYWwgbGl0ZXJhbHMgbWF5IGJlICJpbWFnaW5hcnkiCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9KL2kpOwogICAgICAgICAgICAgICAgLy8gVE9ETyAtIENhbiB5b3UgaGF2ZSBpbWFnaW5hcnkgbG9uZ3M/CiAgICAgICAgICAgICAgICBpbnRMaXRlcmFsID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBaZXJvIGJ5IGl0c2VsZiB3aXRoIG5vIG90aGVyIHBpZWNlIG9mIG51bWJlci4KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjAoPyFbXGR4XSkvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKGludExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIC8vIEludGVnZXIgbGl0ZXJhbHMgbWF5IGJlICJsb25nIgogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvTC9pKTsKICAgICAgICAgICAgICAgIHJldHVybiAnbnVtYmVyJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgU3RyaW5ncwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc3RyaW5nUHJlZml4ZXMpKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmdGYWN0b3J5KHN0cmVhbS5jdXJyZW50KCkpOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIERlbGltaXRlcnMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRyaXBsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChkb3VibGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaChzaW5nbGVPcGVyYXRvcnMpCiAgICAgICAgICAgIHx8IHN0cmVhbS5tYXRjaCh3b3JkT3BlcmF0b3JzKSkgewogICAgICAgICAgICByZXR1cm4gJ29wZXJhdG9yJzsKICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzaW5nbGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChrZXl3b3JkcykpIHsKICAgICAgICAgICAgcmV0dXJuICdrZXl3b3JkJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChidWlsdGlucykpIHsKICAgICAgICAgICAgcmV0dXJuICdidWlsdGluJzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChpZGVudGlmaWVycykpIHsKICAgICAgICAgICAgcmV0dXJuICd2YXJpYWJsZSc7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBub24tZGV0ZWN0ZWQgaXRlbXMKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgfQogICAgCiAgICBmdW5jdGlvbiB0b2tlblN0cmluZ0ZhY3RvcnkoZGVsaW1pdGVyKSB7CiAgICAgICAgd2hpbGUgKCdydWInLmluZGV4T2YoZGVsaW1pdGVyLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7CiAgICAgICAgICAgIGRlbGltaXRlciA9IGRlbGltaXRlci5zdWJzdHIoMSk7CiAgICAgICAgfQogICAgICAgIHZhciBzaW5nbGVsaW5lID0gZGVsaW1pdGVyLmxlbmd0aCA9PSAxOwogICAgICAgIHZhciBPVVRDTEFTUyA9ICdzdHJpbmcnOwogICAgICAgIAogICAgICAgIHJldHVybiBmdW5jdGlvbiB0b2tlblN0cmluZyhzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJyJcXF0vKTsKICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0KCdcXCcpKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBpZiAoc2luZ2xlbGluZSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9VVENMQVNTOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKGRlbGltaXRlcikpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL1snIl0vKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2luZ2xlbGluZSkgewogICAgICAgICAgICAgICAgaWYgKHBhcnNlckNvbmYuc2luZ2xlTGluZVN0cmluZ0Vycm9ycykgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgfTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gaW5kZW50KHN0cmVhbSwgc3RhdGUsIHR5cGUpIHsKICAgICAgICB0eXBlID0gdHlwZSB8fCAncHknOwogICAgICAgIHZhciBpbmRlbnRVbml0ID0gMDsKICAgICAgICBpZiAodHlwZSA9PT0gJ3B5JykgewogICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgIT09ICdweScpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0YXRlLnNjb3Blcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1tpXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgICAgICAgICAgaW5kZW50VW5pdCA9IHN0YXRlLnNjb3Blc1tpXS5vZmZzZXQgKyBjb25mLmluZGVudFVuaXQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RyZWFtLmNvbHVtbigpICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIHN0YXRlLnNjb3Blcy51bnNoaWZ0KHsKICAgICAgICAgICAgb2Zmc2V0OiBpbmRlbnRVbml0LAogICAgICAgICAgICB0eXBlOiB0eXBlCiAgICAgICAgfSk7CiAgICB9CiAgICAKICAgIGZ1bmN0aW9uIGRlZGVudChzdHJlYW0sIHN0YXRlLCB0eXBlKSB7CiAgICAgICAgdHlwZSA9IHR5cGUgfHwgJ3B5JzsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzLmxlbmd0aCA9PSAxKSByZXR1cm47CiAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1swXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICh0eXBlID09PSAncHknKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5zY29wZXNbMF0ub2Zmc2V0ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzWzBdLnR5cGUgIT0gdHlwZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5MZXhlcihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaW5kZW50SW5mbyA9IG51bGw7CiAgICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwoKICAgICAgICAvLyBIYW5kbGUgJy4nIGNvbm5lY3RlZCBpZGVudGlmaWVycwogICAgICAgIGlmIChjdXJyZW50ID09PSAnLicpIHsKICAgICAgICAgICAgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgY3VycmVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gJ3ZhcmlhYmxlJyB8fCBzdHlsZSA9PT0gJ2J1aWx0aW4nKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ3ZhcmlhYmxlJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBkZWNvcmF0b3JzCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdAJykgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgICAgICAgICAgaWYgKHN0eWxlID09PSAndmFyaWFibGUnCiAgICAgICAgICAgICAgICB8fCBjdXJyZW50ID09PSAnQHN0YXRpY21ldGhvZCcKICAgICAgICAgICAgICAgIHx8IGN1cnJlbnQgPT09ICdAY2xhc3NtZXRob2QnKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJ21ldGEnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIEVSUk9SQ0xBU1M7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIHNjb3BlIGNoYW5nZXMuCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdwYXNzJyB8fCBjdXJyZW50ID09PSAncmV0dXJuJykgewogICAgICAgICAgICBzdGF0ZS5kZWRlbnQgKz0gMTsKICAgICAgICB9CiAgICAgICAgaWYgKChjdXJyZW50ID09PSAnOicgJiYgIXN0YXRlLmxhbWJkYSAmJiBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAncHknKQogICAgICAgICAgICB8fCBpbmRlbnRJbmZvID09PSAnaW5kZW50JykgewogICAgICAgICAgICBpbmRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIHZhciBkZWxpbWl0ZXJfaW5kZXggPSAnWyh7Jy5pbmRleE9mKGN1cnJlbnQpOwogICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlLCAnXSl9Jy5zbGljZShkZWxpbWl0ZXJfaW5kZXgsIGRlbGltaXRlcl9pbmRleCsxKSk7CiAgICAgICAgfQogICAgICAgIGlmIChpbmRlbnRJbmZvID09PSAnZGVkZW50JykgewogICAgICAgICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxpbWl0ZXJfaW5kZXggPSAnXSl9Jy5pbmRleE9mKGN1cnJlbnQpOwogICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSwgY3VycmVudCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5kZWRlbnQgPiAwICYmIHN0cmVhbS5lb2woKSAmJiBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAncHknKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gMSkgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIHN0YXRlLmRlZGVudCAtPSAxOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gc3R5bGU7CiAgICB9CgogICAgdmFyIGV4dGVybmFsID0gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIHNjb3BlczogW3tvZmZzZXQ6YmFzZWNvbHVtbiB8fCAwLCB0eXBlOidweSd9XSwKICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGwsCiAgICAgICAgICAgICAgbGFtYmRhOiBmYWxzZSwKICAgICAgICAgICAgICBkZWRlbnQ6IDAKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgfQogICAgICAgIAogICAgfTsKICAgIHJldHVybiBleHRlcm5hbDsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1weXRob24iLCAicHl0aG9uIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFIgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InIuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7IGJvcmRlci10b3A6IDFweCBzb2xpZCBzaWx2ZXI7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBzaWx2ZXI7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlbWkgeyBjb2xvcjogYmx1ZTsgZm9udC13ZWlnaHQ6IGJvbGQ7IH0KICAgICAgLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRvbGxhciB7IGNvbG9yOiBvcmFuZ2U7IGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgICAgIC5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1hcnJvdyB7IGNvbG9yOiBicm93bjsgfQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJnLWlzIHsgY29sb3I6IGJyb3duOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3d3dy5tYXlpbi5vcmcvYWpheXNoYWgvS0IvUi8KCiMgRklSU1QgTEVBUk4gQUJPVVQgTElTVFMgLS0KWCA9IGxpc3QoaGVpZ2h0PTUuNCwgd2VpZ2h0PTU0KQpwcmludCgiVXNlIGRlZmF1bHQgcHJpbnRpbmcgLS0iKQpwcmludChYKQpwcmludCgiQWNjZXNzaW5nIGluZGl2aWR1YWwgZWxlbWVudHMgLS0iKQpjYXQoIllvdXIgaGVpZ2h0IGlzICIsIFgkaGVpZ2h0LCAiIGFuZCB5b3VyIHdlaWdodCBpcyAiLCBYJHdlaWdodCwgIlxuIikKCiMgRlVOQ1RJT05TIC0tCnNxdWFyZSA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKHgqeCkKfQpjYXQoIlRoZSBzcXVhcmUgb2YgMyBpcyAiLCBzcXVhcmUoMyksICJcbiIpCgogICAgICAgICAgICAgICAgICMgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYXJnIGlzIHNldCB0byA1LgpjdWJlIDwtIGZ1bmN0aW9uKHg9NSkgewogIHJldHVybih4KngqeCk7Cn0KY2F0KCJDYWxsaW5nIGN1YmUgd2l0aCAyIDogIiwgY3ViZSgyKSwgIlxuIikgICAgIyB3aWxsIGdpdmUgMl4zCmNhdCgiQ2FsbGluZyBjdWJlICAgICAgICA6ICIsIGN1YmUoKSwgIlxuIikgICAgICMgd2lsbCBkZWZhdWx0IHRvIDVeMy4KCiMgTEVBUk4gQUJPVVQgRlVOQ1RJT05TIFRIQVQgUkVUVVJOIE1VTFRJUExFIE9CSkVDVFMgLS0KcG93ZXJzIDwtIGZ1bmN0aW9uKHgpIHsKICBwYXJjZWwgPSBsaXN0KHgyPXgqeCwgeDM9eCp4KngsIHg0PXgqeCp4KngpOwogIHJldHVybihwYXJjZWwpOwp9CgpYID0gcG93ZXJzKDMpOwpwcmludCgiU2hvd2luZyBwb3dlcnMgb2YgMyAtLSIpOyBwcmludChYKTsKCiMgV1JJVElORyBUSElTIENPTVBBQ1RMWSAoNCBsaW5lcyBpbnN0ZWFkIG9mIDcpCgpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7CiAgcmV0dXJuKGxpc3QoeDI9eCp4LCB4Mz14KngqeCwgeDQ9eCp4KngqeCkpOwp9CnByaW50KCJTaG93aW5nIHBvd2VycyBvZiAzIC0tIik7IHByaW50KHBvd2VyZnVsKDMpKTsKCiMgSW4gUiwgdGhlIGxhc3QgZXhwcmVzc2lvbiBpbiBhIGZ1bmN0aW9uIGlzLCBieSBkZWZhdWx0LCB3aGF0IGlzCiMgcmV0dXJuZWQuIFNvIHlvdSBjb3VsZCBlcXVhbGx5IGp1c3Qgc2F5Ogpwb3dlcmZ1bCA8LSBmdW5jdGlvbih4KSB7bGlzdCh4Mj14KngsIHgzPXgqeCp4LCB4ND14KngqeCp4KX0KPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwge30pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3JjPC9jb2RlPi48L3A+CgogICAgPHA+RGV2ZWxvcG1lbnQgb2YgdGhlIENvZGVNaXJyb3IgUiBtb2RlIHdhcyBraW5kbHkgc3BvbnNvcmVkCiAgICBieSA8YSBocmVmPSJodHRwOi8vdWJhbG8uY29tLyI+VWJhbG88L2E+LCB3aG8gaG9sZAogICAgdGhlIDxhIGhyZWY9IkxJQ0VOU0UiPmxpY2Vuc2U8L2E+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYyBub3IgdGhlIG5hbWVzIG9mIGl0cwogICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgoKVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORApBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRApXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCkRJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFVCQUxPLCBJTkMgQkUgTElBQkxFIEZPUiBBTlkKRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwpMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/r/r.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJyIiwgZnVuY3Rpb24oY29uZmlnKSB7CiAgZnVuY3Rpb24gd29yZE9iaihzdHIpIHsKICAgIHZhciB3b3JkcyA9IHN0ci5zcGxpdCgiICIpLCByZXMgPSB7fTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIHJlc1t3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIHJlczsKICB9CiAgdmFyIGF0b21zID0gd29yZE9iaigiTlVMTCBOQSBJbmYgTmFOIE5BX2ludGVnZXJfIE5BX3JlYWxfIE5BX2NvbXBsZXhfIE5BX2NoYXJhY3Rlcl8iKTsKICB2YXIgYnVpbHRpbnMgPSB3b3JkT2JqKCJsaXN0IHF1b3RlIGJxdW90ZSBldmFsIHJldHVybiBjYWxsIHBhcnNlIGRlcGFyc2UiKTsKICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKCJpZiBlbHNlIHJlcGVhdCB3aGlsZSBmdW5jdGlvbiBmb3IgaW4gbmV4dCBicmVhayIpOwogIHZhciBibG9ja2tleXdvcmRzID0gd29yZE9iaigiaWYgZWxzZSByZXBlYXQgd2hpbGUgZnVuY3Rpb24gZm9yIik7CiAgdmFyIG9wQ2hhcnMgPSAvWytcLSpcL148Pj0hJnx+JDpdLzsKICB2YXIgY3VyUHVuYzsKCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIGN1clB1bmMgPSBudWxsOwogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiIyIpIHsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICByZXR1cm4gImNvbW1lbnQiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiMCIgJiYgc3RyZWFtLmVhdCgieCIpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1xkYS1mXS9pKTsKICAgICAgcmV0dXJuICJudW1iZXIiOwogICAgfSBlbHNlIGlmIChjaCA9PSAiLiIgJiYgc3RyZWFtLmVhdCgvXGQvKSkgewogICAgICBzdHJlYW0ubWF0Y2goL1xkKig/OmVbK1wtXT9cZCspPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLm1hdGNoKC9cZCooPzpcLlxkKyk/KD86ZVsrXC1dXGQrKT9MPy8pOwogICAgICByZXR1cm4gIm51bWJlciI7CiAgICB9IGVsc2UgaWYgKGNoID09ICInIiB8fCBjaCA9PSAnIicpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlblN0cmluZyhjaCk7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIi4iICYmIHN0cmVhbS5tYXRjaCgvLlsuXGRdKy8pKSB7CiAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICB9IGVsc2UgaWYgKC9bXHdcLl0vLnRlc3QoY2gpICYmIGNoICE9ICJfIikgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pOwogICAgICB2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkgcmV0dXJuICJhdG9tIjsKICAgICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSB7CiAgICAgICAgaWYgKGJsb2Nra2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkpIGN1clB1bmMgPSAiYmxvY2siOwogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIH0KICAgICAgaWYgKGJ1aWx0aW5zLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSByZXR1cm4gImJ1aWx0aW4iOwogICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiUiKSB7CiAgICAgIGlmIChzdHJlYW0uc2tpcFRvKCIlIikpIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCItIikpIHsKICAgICAgcmV0dXJuICJhcnJvdyI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI9IiAmJiBzdGF0ZS5jdHguYXJnTGlzdCkgewogICAgICByZXR1cm4gImFyZy1pcyI7CiAgICB9IGVsc2UgaWYgKG9wQ2hhcnMudGVzdChjaCkpIHsKICAgICAgaWYgKGNoID09ICIkIikgcmV0dXJuICJkb2xsYXIiOwogICAgICBzdHJlYW0uZWF0V2hpbGUob3BDaGFycyk7CiAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgfSBlbHNlIGlmICgvW1woXCl7fVxbXF07XS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICBpZiAoY2ggPT0gIjsiKSByZXR1cm4gInNlbWkiOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSB7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICBpZiAoY2ggPT0gIngiKSBzdHJlYW0ubWF0Y2goL15bYS1mMC05XXsyfS9pKTsKICAgICAgICBlbHNlIGlmICgoY2ggPT0gInUiIHx8IGNoID09ICJVIikgJiYgc3RyZWFtLmVhdCgieyIpICYmIHN0cmVhbS5za2lwVG8oIn0iKSkgc3RyZWFtLm5leHQoKTsKICAgICAgICBlbHNlIGlmIChjaCA9PSAidSIpIHN0cmVhbS5tYXRjaCgvXlthLWYwLTldezR9L2kpOwogICAgICAgIGVsc2UgaWYgKGNoID09ICJVIikgc3RyZWFtLm1hdGNoKC9eW2EtZjAtOV17OH0vaSk7CiAgICAgICAgZWxzZSBpZiAoL1swLTddLy50ZXN0KGNoKSkgc3RyZWFtLm1hdGNoKC9eWzAtN117MSwyfS8pOwogICAgICAgIHJldHVybiAic3RyaW5nLTIiOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBuZXh0OwogICAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICAgIGlmIChuZXh0ID09IHF1b3RlKSB7IHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyBicmVhazsgfQogICAgICAgICAgaWYgKG5leHQgPT0gIlxcIikgeyBzdHJlYW0uYmFja1VwKDEpOyBicmVhazsgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gInN0cmluZyI7CiAgICAgIH0KICAgIH07CiAgfQoKICBmdW5jdGlvbiBwdXNoKHN0YXRlLCB0eXBlLCBzdHJlYW0pIHsKICAgIHN0YXRlLmN0eCA9IHt0eXBlOiB0eXBlLAogICAgICAgICAgICAgICAgIGluZGVudDogc3RhdGUuaW5kZW50LAogICAgICAgICAgICAgICAgIGFsaWduOiBudWxsLAogICAgICAgICAgICAgICAgIGNvbHVtbjogc3RyZWFtLmNvbHVtbigpLAogICAgICAgICAgICAgICAgIHByZXY6IHN0YXRlLmN0eH07CiAgfQogIGZ1bmN0aW9uIHBvcChzdGF0ZSkgewogICAgc3RhdGUuaW5kZW50ID0gc3RhdGUuY3R4LmluZGVudDsKICAgIHN0YXRlLmN0eCA9IHN0YXRlLmN0eC5wcmV2OwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2UpIHsKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIGN0eDoge3R5cGU6ICJ0b3AiLAogICAgICAgICAgICAgICAgICAgIGluZGVudDogLWNvbmZpZy5pbmRlbnRVbml0LAogICAgICAgICAgICAgICAgICAgIGFsaWduOiBmYWxzZX0sCiAgICAgICAgICAgICAgaW5kZW50OiAwLAogICAgICAgICAgICAgIGFmdGVySWRlbnQ6IGZhbHNlfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jdHguYWxpZ24gPT0gbnVsbCkgc3RhdGUuY3R4LmFsaWduID0gZmFsc2U7CiAgICAgICAgc3RhdGUuaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHlsZSAhPSAiY29tbWVudCIgJiYgc3RhdGUuY3R4LmFsaWduID09IG51bGwpIHN0YXRlLmN0eC5hbGlnbiA9IHRydWU7CgogICAgICB2YXIgY3R5cGUgPSBzdGF0ZS5jdHgudHlwZTsKICAgICAgaWYgKChjdXJQdW5jID09ICI7IiB8fCBjdXJQdW5jID09ICJ7IiB8fCBjdXJQdW5jID09ICJ9IikgJiYgY3R5cGUgPT0gImJsb2NrIikgcG9wKHN0YXRlKTsKICAgICAgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoKHN0YXRlLCAifSIsIHN0cmVhbSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIigiKSB7CiAgICAgICAgcHVzaChzdGF0ZSwgIikiLCBzdHJlYW0pOwogICAgICAgIGlmIChzdGF0ZS5hZnRlcklkZW50KSBzdGF0ZS5jdHguYXJnTGlzdCA9IHRydWU7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2goc3RhdGUsICJdIiwgc3RyZWFtKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiYmxvY2siKSBwdXNoKHN0YXRlLCAiYmxvY2siLCBzdHJlYW0pOwogICAgICBlbHNlIGlmIChjdXJQdW5jID09IGN0eXBlKSBwb3Aoc3RhdGUpOwogICAgICBzdGF0ZS5hZnRlcklkZW50ID0gc3R5bGUgPT0gInZhcmlhYmxlIiB8fCBzdHlsZSA9PSAia2V5d29yZCI7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGN0eCA9IHN0YXRlLmN0eCwKICAgICAgICAgIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7CiAgICAgIGlmIChjdHgudHlwZSA9PSAiYmxvY2siKSByZXR1cm4gY3R4LmluZGVudCArIChmaXJzdENoYXIgPT0gInsiID8gMCA6IGNvbmZpZy5pbmRlbnRVbml0KTsKICAgICAgZWxzZSBpZiAoY3R4LmFsaWduKSByZXR1cm4gY3R4LmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnNyYyIsICJyIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/changes.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjaGFuZ2VzIiwgZnVuY3Rpb24oY29uZmlnLCBtb2RlQ29uZmlnKSB7CiAgdmFyIGhlYWRlclNlcGVyYXRvciA9IC9eLSskLzsKICB2YXIgaGVhZGVyTGluZSA9IC9eKE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1bikgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAgP1xkezEsMn0gXGR7Mn06XGR7Mn0oOlxkezJ9KT8gW0EtWl17Myw0fSBcZHs0fSAtIC87CiAgdmFyIHNpbXBsZUVtYWlsID0gL15bXHcrLi1dK0BbXHcuLV0rLzsKCiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goaGVhZGVyU2VwZXJhdG9yKSkgeyByZXR1cm4gJ3RhZyc7IH0KICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGhlYWRlckxpbmUpKSB7IHJldHVybiAndGFnJzsgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2ltcGxlRW1haWwpKSB7IHJldHVybiAnc3RyaW5nJzsgfQogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXJwbS1jaGFuZ2VzIiwgImNoYW5nZXMiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/changes/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBjaGFuZ2VzIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjaGFuZ2VzLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSUE0gY2hhbmdlcyBtb2RlPC9oMT4KICAgIAogICAgPGRpdj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClR1ZSBPY3QgMTggMTM6NTg6NDAgVVRDIDIwMTEgLSBtaXN0ZXJ4QGV4YW1wbGUuY29tCgotIFVwZGF0ZSB0byByNjAuMwotIEZpeGVzIGJ1ZyBpbiB0aGUgcmVmbGVjdCBwYWNrYWdlCiAgKiBkaXNhbGxvdyBJbnRlcmZhY2UgbWV0aG9kIG9uIFZhbHVlIG9idGFpbmVkIHZpYSB1bmV4cG9ydGVkIG5hbWUKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVGh1IE9jdCAgNiAwODoxNDoyNCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVXBkYXRlIHRvIHI2MC4yCi0gRml4ZXMgbWVtb3J5IGxlYWsgaW4gY2VydGFpbiBtYXAgdHlwZXMKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KV2VkIE9jdCAgNSAxNDozNDoxMCBVVEMgMjAxMSAtIG1pc3RlcnhAZXhhbXBsZS5jb20KCi0gVHdlYWtzIGZvciBnZGIgZGVidWdnaW5nCi0gZ28uc3BlYyBjaGFuZ2VzOgogIC0gbW92ZSAlZ29fYXJjaCBkZWZpbml0aW9uIHRvICVwcmVwIHNlY3Rpb24KICAtIHBhc3MgY29ycmVjdCBsb2NhdGlvbiBvZiBnbyBzcGVjaWZpYyBnZGIgcHJldHR5IHByaW50ZXIgYW5kCiAgICBmdW5jdGlvbnMgdG8gY3BwIGFzIEhPU1RfRVhUUkFfQ0ZMQUdTIG1hY3JvCiAgLSBpbnN0YWxsIGdvIGdkYiBmdW5jdGlvbnMgJiBwcmludGVyCi0gZ2RiLXByaW50ZXIucGF0Y2gKICAtIHBhdGNoIGxpbmtlciAoc3JjL2NtZC9sZC9kd2FyZi5jKSB0byBlbWl0IGNvcnJlY3QgbG9jYXRpb24gb2YgZ28KICAgIGdkYiBmdW5jdGlvbnMgYW5kIHByZXR0eSBwcmludGVyCjwvdGV4dGFyZWE+PC9kaXY+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAiY2hhbmdlcyJ9LAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgdGFiTW9kZTogInNoaWZ0IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1ycG0tY2hhbmdlczwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzcGVjLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ic3BlYy5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJQTSBzcGVjIG1vZGU8L2gxPgogICAgCiAgICA8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMKIyBzcGVjIGZpbGUgZm9yIHBhY2thZ2UgbWluaWRsbmEKIwojIENvcHlyaWdodCAoYykgMjAxMSwgU2FzY2hhIFBlaWxpY2tlIDxzYXNjaHBlQGdteC5kZT4KIwojIEFsbCBtb2RpZmljYXRpb25zIGFuZCBhZGRpdGlvbnMgdG8gdGhlIGZpbGUgY29udHJpYnV0ZWQgYnkgdGhpcmQgcGFydGllcwojIHJlbWFpbiB0aGUgcHJvcGVydHkgb2YgdGhlaXIgY29weXJpZ2h0IG93bmVycywgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQKIyB1cG9uLiBUaGUgbGljZW5zZSBmb3IgdGhpcyBmaWxlLCBhbmQgbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIHRvIHRoZQojIGZpbGUsIGlzIHRoZSBzYW1lIGxpY2Vuc2UgYXMgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGl0c2VsZiAodW5sZXNzIHRoZQojIGxpY2Vuc2UgZm9yIHRoZSBwcmlzdGluZSBwYWNrYWdlIGlzIG5vdCBhbiBPcGVuIFNvdXJjZSBMaWNlbnNlLCBpbiB3aGljaAojIGNhc2UgdGhlIGxpY2Vuc2UgaXMgdGhlIE1JVCBMaWNlbnNlKS4gQW4gIk9wZW4gU291cmNlIExpY2Vuc2UiIGlzIGEKIyBsaWNlbnNlIHRoYXQgY29uZm9ybXMgdG8gdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24gKFZlcnNpb24gMS45KQojIHB1Ymxpc2hlZCBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4KCgpOYW1lOiAgICAgICAgICAgbGlidXBucDYKVmVyc2lvbjogICAgICAgIDEuNi4xMwpSZWxlYXNlOiAgICAgICAgMApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgU3lzdGVtL0xpYnJhcmllcwpMaWNlbnNlOiAgICAgICAgQlNELTMtQ2xhdXNlClVybDogICAgICAgICAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3B1cG5wLwpTb3VyY2UwOiAgICAgICAgaHR0cDovL2Rvd25sb2Fkcy5zb3VyY2Vmb3JnZS5uZXQvcHVwbnAvbGlidXBucC0le3ZlcnNpb259LnRhci5iejIKQnVpbGRSb290OiAgICAgICV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1idWlsZAoKJWRlc2NyaXB0aW9uClRoZSBwb3J0YWJsZSBVbml2ZXJzYWwgUGx1ZyBhbmQgUGxheSAoVVBuUCkgU0RLIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGJ1aWxkaW5nClVQblAtY29tcGxpYW50IGNvbnRyb2wgcG9pbnRzLCBkZXZpY2VzLCBhbmQgYnJpZGdlcyBvbiBzZXZlcmFsIG9wZXJhdGluZwpzeXN0ZW1zLgoKJXBhY2thZ2UgLW4gbGlidXBucC1kZXZlbApTdW1tYXJ5OiAgICAgICAgUG9ydGFibGUgVW5pdmVyc2FsIFBsdWcgYW5kIFBsYXkgKFVQblApIFNESwpHcm91cDogICAgICAgICAgRGV2ZWxvcG1lbnQvTGlicmFyaWVzL0MgYW5kIEMrKwpQcm92aWRlczogICAgICAgcGtnY29uZmlnKGxpYnVwbnApClJlcXVpcmVzOiAgICAgICAle25hbWV9ID0gJXt2ZXJzaW9ufQoKJWRlc2NyaXB0aW9uIC1uIGxpYnVwbnAtZGV2ZWwKVGhlIHBvcnRhYmxlIFVuaXZlcnNhbCBQbHVnIGFuZCBQbGF5IChVUG5QKSBTREsgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYnVpbGRpbmcKVVBuUC1jb21wbGlhbnQgY29udHJvbCBwb2ludHMsIGRldmljZXMsIGFuZCBicmlkZ2VzIG9uIHNldmVyYWwgb3BlcmF0aW5nCnN5c3RlbXMuCgolcHJlcAolc2V0dXAgLW4gbGlidXBucC0le3ZlcnNpb259CgolYnVpbGQKJWNvbmZpZ3VyZSAtLWRpc2FibGUtc3RhdGljCm1ha2UgJXs/X3NtcF9tZmxhZ3N9CgolaW5zdGFsbAolbWFrZWluc3RhbGwKZmluZCAle2J1aWxkcm9vdH0gLXR5cGUgZiAtbmFtZSAnKi5sYScgLWV4ZWMgcm0gLWYge30gJzsnCgolcG9zdCAtcCAvc2Jpbi9sZGNvbmZpZwoKJXBvc3R1biAtcCAvc2Jpbi9sZGNvbmZpZwoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiVkb2MgQ2hhbmdlTG9nIE5FV1MgUkVBRE1FIFRPRE8KJXtfbGliZGlyfS9saWJpeG1sLnNvLioKJXtfbGliZGlyfS9saWJ0aHJlYWR1dGlsLnNvLioKJXtfbGliZGlyfS9saWJ1cG5wLnNvLioKCiVmaWxlcyAtbiBsaWJ1cG5wLWRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290LC0pCiV7X2xpYmRpcn0vcGtnY29uZmlnL2xpYnVwbnAucGMKJXtfbGliZGlyfS9saWJpeG1sLnNvCiV7X2xpYmRpcn0vbGlidGhyZWFkdXRpbC5zbwole19saWJkaXJ9L2xpYnVwbnAuc28KJXtfaW5jbHVkZWRpcn0vdXBucC8KCiVjaGFuZ2Vsb2c8L3RleHRhcmVhPjwvZGl2PgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBtb2RlOiB7bmFtZTogInNwZWMifSwKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBpbmRlbnRVbml0OiA0LAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJwbS1zcGVjPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLXByZWFtYmxlIHtjb2xvcjogI2IyNjgxODsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbWFjcm8ge2NvbG9yOiAjYjIxOGIyO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlY3Rpb24ge2NvbG9yOiBncmVlbjsgZm9udC13ZWlnaHQ6IGJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc2NyaXB0IHtjb2xvcjogcmVkO30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWlzc3VlIHtjb2xvcjogeWVsbG93O30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rpm/spec/spec.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gUXVpY2sgYW5kIGRpcnR5IHNwZWMgZmlsZSBoaWdobGlnaHRpbmcKCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3BlYyIsIGZ1bmN0aW9uKGNvbmZpZywgbW9kZUNvbmZpZykgewogIHZhciBhcmNoID0gL14oaTM4NnxpNTg2fGk2ODZ8eDg2XzY0fHBwYzY0fHBwY3xpYTY0fHMzOTB4fHMzOTB8c3BhcmM2NHxzcGFyY3Y5fHNwYXJjfG5vYXJjaHxhbHBoYWV2NnxhbHBoYXxocHBhfG1pcHNlbCkvOwoKICB2YXIgcHJlYW1ibGUgPSAvXihOYW1lfFZlcnNpb258UmVsZWFzZXxMaWNlbnNlfFN1bW1hcnl8VXJsfEdyb3VwfFNvdXJjZXxCdWlsZEFyY2h8QnVpbGRSZXF1aXJlc3xCdWlsZFJvb3R8QXV0b1JlcVByb3Z8UHJvdmlkZXN8UmVxdWlyZXMoXChcdytcKSk/fE9ic29sZXRlc3xDb25mbGljdHN8UmVjb21tZW5kc3xTb3VyY2VcZCp8UGF0Y2hcZCp8RXhjbHVzaXZlQXJjaHxOb1NvdXJjZXxTdXBwbGVtZW50cyk6LzsKICB2YXIgc2VjdGlvbiA9IC9eJShkZWJ1Z19wYWNrYWdlfHBhY2thZ2V8ZGVzY3JpcHRpb258cHJlcHxidWlsZHxpbnN0YWxsfGZpbGVzfGNsZWFufGNoYW5nZWxvZ3xwcmV1bnxwb3N0dW58cHJlfHBvc3R8dHJpZ2dlcmlufHRyaWdnZXJ1bnxwcmV0cmFuc3xwb3N0dHJhbnN8dmVyaWZ5c2NyaXB0fGNoZWNrfHRyaWdnZXJwb3N0dW58dHJpZ2dlcnByZWlufHRyaWdnZXIpLzsKICB2YXIgY29udHJvbF9mbG93X2NvbXBsZXggPSAvXiUoaWZuYXJjaHxpZmFyY2h8aWYpLzsgLy8gcnBtIGNvbnRyb2wgZmxvdyBtYWNyb3MKICB2YXIgY29udHJvbF9mbG93X3NpbXBsZSA9IC9eJShlbHNlfGVuZGlmKS87IC8vIHJwbSBjb250cm9sIGZsb3cgbWFjcm9zCiAgdmFyIG9wZXJhdG9ycyA9IC9eKFwhfFw/fFw8XD18XDx8XD5cPXxcPnxcPVw9fFwmXCZ8XHxcfCkvOyAvLyBvcGVyYXRvcnMgaW4gY29udHJvbCBmbG93IG1hY3JvcwoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBjb250cm9sRmxvdzogZmFsc2UsCiAgICAgICAgICBtYWNyb1BhcmFtZXRlcnM6IGZhbHNlLAogICAgICAgICAgc2VjdGlvbjogZmFsc2UKICAgICAgICB9OwogICAgfSwKICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwogICAgICBpZiAoY2ggPT0gIiMiKSB7IHN0cmVhbS5za2lwVG9FbmQoKTsgcmV0dXJuICJjb21tZW50IjsgfQoKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocHJlYW1ibGUpKSB7IHJldHVybiAicHJlYW1ibGUiOyB9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChzZWN0aW9uKSkgeyByZXR1cm4gInNlY3Rpb24iOyB9CiAgICAgIH0KCiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cJFx3Ky8pKSB7IHJldHVybiAiZGVmIjsgfSAvLyBWYXJpYWJsZXMgbGlrZSAnJFJQTV9CVUlMRF9ST09UJwogICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXCRce1x3K1x9LykpIHsgcmV0dXJuICJkZWYiOyB9IC8vIFZhcmlhYmxlcyBsaWtlICcke1JQTV9CVUlMRF9ST09UfScKCiAgICAgIGlmIChzdHJlYW0ubWF0Y2goY29udHJvbF9mbG93X3NpbXBsZSkpIHsgcmV0dXJuICJrZXl3b3JkIjsgfQogICAgICBpZiAoc3RyZWFtLm1hdGNoKGNvbnRyb2xfZmxvd19jb21wbGV4KSkgewogICAgICAgIHN0YXRlLmNvbnRyb2xGbG93ID0gdHJ1ZTsKICAgICAgICByZXR1cm4gImtleXdvcmQiOwogICAgICB9CiAgICAgIGlmIChzdGF0ZS5jb250cm9sRmxvdykgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gob3BlcmF0b3JzKSkgeyByZXR1cm4gIm9wZXJhdG9yIjsgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14oXGQrKS8pKSB7IHJldHVybiAibnVtYmVyIjsgfQogICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHsgc3RhdGUuY29udHJvbEZsb3cgPSBmYWxzZTsgfQogICAgICB9CgogICAgICBpZiAoc3RyZWFtLm1hdGNoKGFyY2gpKSB7IHJldHVybiAibnVtYmVyIjsgfQoKICAgICAgLy8gTWFjcm9zIGxpa2UgJyVtYWtlX2luc3RhbGwnIG9yICclYXR0cigwNzc1LHJvb3Qscm9vdCknCiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14lW1x3XSsvKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cKC8pKSB7IHN0YXRlLm1hY3JvUGFyYW1ldGVycyA9IHRydWU7IH0KICAgICAgICByZXR1cm4gIm1hY3JvIjsKICAgICAgfQogICAgICBpZiAoc3RhdGUubWFjcm9QYXJhbWV0ZXJzKSB7CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxkKy8pKSB7IHJldHVybiAibnVtYmVyIjt9CiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlwpLykpIHsKICAgICAgICAgIHN0YXRlLm1hY3JvUGFyYW1ldGVycyA9IGZhbHNlOwogICAgICAgICAgcmV0dXJuICJtYWNybyI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14lXHtcPz9bXHcgXC1dK1x9LykpIHsgcmV0dXJuICJtYWNybyI7IH0gLy8gTWFjcm9zIGxpa2UgJyV7ZGVmaW5lZCBmZWRvcmF9JwoKICAgICAgLy9UT0RPOiBJbmNsdWRlIGJhc2ggc2NyaXB0IHN1Yi1wYXJzZXIgKENvZGVNaXJyb3Igc3VwcG9ydHMgdGhhdCkKICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1ycG0tc3BlYyIsICJzcGVjIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHJlU3RydWN0dXJlZFRleHQgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJzdC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci4uIFRoaXMgaXMgYW4gZXhjZXJwdCBmcm9tIFNwaGlueCBkb2N1bWVudGF0aW9uOiBodHRwOi8vc3BoaW54LnBvY29vLm9yZy9fc291cmNlcy9yZXN0LnR4dAoKLi4gaGlnaGxpZ2h0bGFuZzo6IHJlc3QKCi4uIF9yc3QtcHJpbWVyOgoKcmVTdHJ1Y3R1cmVkVGV4dCBQcmltZXIKPT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgc2VjdGlvbiBpcyBhIGJyaWVmIGludHJvZHVjdGlvbiB0byByZVN0cnVjdHVyZWRUZXh0IChyZVNUKSBjb25jZXB0cyBhbmQKc3ludGF4LCBpbnRlbmRlZCB0byBwcm92aWRlIGF1dGhvcnMgd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gYXV0aG9yIGRvY3VtZW50cwpwcm9kdWN0aXZlbHkuICBTaW5jZSByZVNUIHdhcyBkZXNpZ25lZCB0byBiZSBhIHNpbXBsZSwgdW5vYnRydXNpdmUgbWFya3VwCmxhbmd1YWdlLCB0aGlzIHdpbGwgbm90IHRha2UgdG9vIGxvbmcuCgouLiBzZWVhbHNvOjoKCiAgIFRoZSBhdXRob3JpdGF0aXZlIGByZVN0cnVjdHVyZWRUZXh0IFVzZXIgRG9jdW1lbnRhdGlvbgogICAmbHQ7aHR0cDovL2RvY3V0aWxzLnNvdXJjZWZvcmdlLm5ldC9yc3QuaHRtbCZndDtgXy4gIFRoZSAicmVmIiBsaW5rcyBpbiB0aGlzCiAgIGRvY3VtZW50IGxpbmsgdG8gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBpbmRpdmlkdWFsIGNvbnN0cnVjdHMgaW4gdGhlIHJlU1QKICAgcmVmZXJlbmNlLgoKClBhcmFncmFwaHMKLS0tLS0tLS0tLQoKVGhlIHBhcmFncmFwaCAoOmR1cmVmOmByZWYgJmx0O3BhcmFncmFwaHMmZ3Q7YCkgaXMgdGhlIG1vc3QgYmFzaWMgYmxvY2sgaW4gYSByZVNUCmRvY3VtZW50LiAgUGFyYWdyYXBocyBhcmUgc2ltcGx5IGNodW5rcyBvZiB0ZXh0IHNlcGFyYXRlZCBieSBvbmUgb3IgbW9yZSBibGFuawpsaW5lcy4gIEFzIGluIFB5dGhvbiwgaW5kZW50YXRpb24gaXMgc2lnbmlmaWNhbnQgaW4gcmVTVCwgc28gYWxsIGxpbmVzIG9mIHRoZQpzYW1lIHBhcmFncmFwaCBtdXN0IGJlIGxlZnQtYWxpZ25lZCB0byB0aGUgc2FtZSBsZXZlbCBvZiBpbmRlbnRhdGlvbi4KCgouLiBfaW5saW5lbWFya3VwOgoKSW5saW5lIG1hcmt1cAotLS0tLS0tLS0tLS0tCgpUaGUgc3RhbmRhcmQgcmVTVCBpbmxpbmUgbWFya3VwIGlzIHF1aXRlIHNpbXBsZTogdXNlCgoqIG9uZSBhc3RlcmlzazogYGAqdGV4dCpgYCBmb3IgZW1waGFzaXMgKGl0YWxpY3MpLAoqIHR3byBhc3Rlcmlza3M6IGBgKip0ZXh0KipgYCBmb3Igc3Ryb25nIGVtcGhhc2lzIChib2xkZmFjZSksIGFuZAoqIGJhY2txdW90ZXM6IGBgYGB0ZXh0YGBgYCBmb3IgY29kZSBzYW1wbGVzLgoKSWYgYXN0ZXJpc2tzIG9yIGJhY2txdW90ZXMgYXBwZWFyIGluIHJ1bm5pbmcgdGV4dCBhbmQgY291bGQgYmUgY29uZnVzZWQgd2l0aAppbmxpbmUgbWFya3VwIGRlbGltaXRlcnMsIHRoZXkgaGF2ZSB0byBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2guCgpCZSBhd2FyZSBvZiBzb21lIHJlc3RyaWN0aW9ucyBvZiB0aGlzIG1hcmt1cDoKCiogaXQgbWF5IG5vdCBiZSBuZXN0ZWQsCiogY29udGVudCBtYXkgbm90IHN0YXJ0IG9yIGVuZCB3aXRoIHdoaXRlc3BhY2U6IGBgKiB0ZXh0KmBgIGlzIHdyb25nLAoqIGl0IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gc3Vycm91bmRpbmcgdGV4dCBieSBub24td29yZCBjaGFyYWN0ZXJzLiAgVXNlIGEKICBiYWNrc2xhc2ggZXNjYXBlZCBzcGFjZSB0byB3b3JrIGFyb3VuZCB0aGF0OiBgYHRoaXNpc1wgKm9uZSpcIHdvcmRgYC4KClRoZXNlIHJlc3RyaWN0aW9ucyBtYXkgYmUgbGlmdGVkIGluIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgZG9jdXRpbHMuCgpyZVNUIGFsc28gYWxsb3dzIGZvciBjdXN0b20gImludGVycHJldGVkIHRleHQgcm9sZXMiJywgd2hpY2ggc2lnbmlmeSB0aGF0IHRoZQplbmNsb3NlZCB0ZXh0IHNob3VsZCBiZSBpbnRlcnByZXRlZCBpbiBhIHNwZWNpZmljIHdheS4gIFNwaGlueCB1c2VzIHRoaXMgdG8KcHJvdmlkZSBzZW1hbnRpYyBtYXJrdXAgYW5kIGNyb3NzLXJlZmVyZW5jaW5nIG9mIGlkZW50aWZpZXJzLCBhcyBkZXNjcmliZWQgaW4KdGhlIGFwcHJvcHJpYXRlIHNlY3Rpb24uICBUaGUgZ2VuZXJhbCBzeW50YXggaXMgYGA6cm9sZW5hbWU6YGNvbnRlbnRgYGAuCgpTdGFuZGFyZCByZVNUIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgcm9sZXM6CgoqIDpkdXJvbGU6YGVtcGhhc2lzYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKmVtcGhhc2lzKmBgCiogOmR1cm9sZTpgc3Ryb25nYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgKipzdHJvbmcqKmBgCiogOmR1cm9sZTpgbGl0ZXJhbGAgLS0gYWx0ZXJuYXRlIHNwZWxsaW5nIGZvciBgYGBgbGl0ZXJhbGBgYGAKKiA6ZHVyb2xlOmBzdWJzY3JpcHRgIC0tIHN1YnNjcmlwdCB0ZXh0CiogOmR1cm9sZTpgc3VwZXJzY3JpcHRgIC0tIHN1cGVyc2NyaXB0IHRleHQKKiA6ZHVyb2xlOmB0aXRsZS1yZWZlcmVuY2VgIC0tIGZvciB0aXRsZXMgb2YgYm9va3MsIHBlcmlvZGljYWxzLCBhbmQgb3RoZXIKICBtYXRlcmlhbHMKClNlZSA6cmVmOmBpbmxpbmUtbWFya3VwYCBmb3Igcm9sZXMgYWRkZWQgYnkgU3BoaW54LgoKCkxpc3RzIGFuZCBRdW90ZS1saWtlIGJsb2NrcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkxpc3QgbWFya3VwICg6ZHVyZWY6YHJlZiAmbHQ7YnVsbGV0LWxpc3RzJmd0O2ApIGlzIG5hdHVyYWw6IGp1c3QgcGxhY2UgYW4gYXN0ZXJpc2sgYXQKdGhlIHN0YXJ0IG9mIGEgcGFyYWdyYXBoIGFuZCBpbmRlbnQgcHJvcGVybHkuICBUaGUgc2FtZSBnb2VzIGZvciBudW1iZXJlZCBsaXN0czsKdGhleSBjYW4gYWxzbyBiZSBhdXRvbnVtYmVyZWQgdXNpbmcgYSBgYCNgYCBzaWduOjoKCiAgICogVGhpcyBpcyBhIGJ1bGxldGVkIGxpc3QuCiAgICogSXQgaGFzIHR3byBpdGVtcywgdGhlIHNlY29uZAogICAgIGl0ZW0gdXNlcyB0d28gbGluZXMuCgogICAxLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgMi4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgogICAjLiBUaGlzIGlzIGEgbnVtYmVyZWQgbGlzdC4KICAgIy4gSXQgaGFzIHR3byBpdGVtcyB0b28uCgoKTmVzdGVkIGxpc3RzIGFyZSBwb3NzaWJsZSwgYnV0IGJlIGF3YXJlIHRoYXQgdGhleSBtdXN0IGJlIHNlcGFyYXRlZCBmcm9tIHRoZQpwYXJlbnQgbGlzdCBpdGVtcyBieSBibGFuayBsaW5lczo6CgogICAqIHRoaXMgaXMKICAgKiBhIGxpc3QKCiAgICAgKiB3aXRoIGEgbmVzdGVkIGxpc3QKICAgICAqIGFuZCBzb21lIHN1Yml0ZW1zCgogICAqIGFuZCBoZXJlIHRoZSBwYXJlbnQgbGlzdCBjb250aW51ZXMKCkRlZmluaXRpb24gbGlzdHMgKDpkdXJlZjpgcmVmICZsdDtkZWZpbml0aW9uLWxpc3RzJmd0O2ApIGFyZSBjcmVhdGVkIGFzIGZvbGxvd3M6OgoKICAgdGVybSAodXAgdG8gYSBsaW5lIG9mIHRleHQpCiAgICAgIERlZmluaXRpb24gb2YgdGhlIHRlcm0sIHdoaWNoIG11c3QgYmUgaW5kZW50ZWQKCiAgICAgIGFuZCBjYW4gZXZlbiBjb25zaXN0IG9mIG11bHRpcGxlIHBhcmFncmFwaHMKCiAgIG5leHQgdGVybQogICAgICBEZXNjcmlwdGlvbi4KCk5vdGUgdGhhdCB0aGUgdGVybSBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIGxpbmUgb2YgdGV4dC4KClF1b3RlZCBwYXJhZ3JhcGhzICg6ZHVyZWY6YHJlZiAmbHQ7YmxvY2stcXVvdGVzJmd0O2ApIGFyZSBjcmVhdGVkIGJ5IGp1c3QgaW5kZW50aW5nCnRoZW0gbW9yZSB0aGFuIHRoZSBzdXJyb3VuZGluZyBwYXJhZ3JhcGhzLgoKTGluZSBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtsaW5lLWJsb2NrcyZndDtgKSBhcmUgYSB3YXkgb2YgcHJlc2VydmluZyBsaW5lIGJyZWFrczo6CgogICB8IFRoZXNlIGxpbmVzIGFyZQogICB8IGJyb2tlbiBleGFjdGx5IGxpa2UgaW4KICAgfCB0aGUgc291cmNlIGZpbGUuCgpUaGVyZSBhcmUgYWxzbyBzZXZlcmFsIG1vcmUgc3BlY2lhbCBibG9ja3MgYXZhaWxhYmxlOgoKKiBmaWVsZCBsaXN0cyAoOmR1cmVmOmByZWYgJmx0O2ZpZWxkLWxpc3RzJmd0O2ApCiogb3B0aW9uIGxpc3RzICg6ZHVyZWY6YHJlZiAmbHQ7b3B0aW9uLWxpc3RzJmd0O2ApCiogcXVvdGVkIGxpdGVyYWwgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7cXVvdGVkLWxpdGVyYWwtYmxvY2tzJmd0O2ApCiogZG9jdGVzdCBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtkb2N0ZXN0LWJsb2NrcyZndDtgKQoKClNvdXJjZSBDb2RlCi0tLS0tLS0tLS0tCgpMaXRlcmFsIGNvZGUgYmxvY2tzICg6ZHVyZWY6YHJlZiAmbHQ7bGl0ZXJhbC1ibG9ja3MmZ3Q7YCkgYXJlIGludHJvZHVjZWQgYnkgZW5kaW5nIGEKcGFyYWdyYXBoIHdpdGggdGhlIHNwZWNpYWwgbWFya2VyIGBgOjpgYC4gIFRoZSBsaXRlcmFsIGJsb2NrIG11c3QgYmUgaW5kZW50ZWQKKGFuZCwgbGlrZSBhbGwgcGFyYWdyYXBocywgc2VwYXJhdGVkIGZyb20gdGhlIHN1cnJvdW5kaW5nIG9uZXMgYnkgYmxhbmsgbGluZXMpOjoKCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGguIFRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOjoKCiAgICAgIEl0IGlzIG5vdCBwcm9jZXNzZWQgaW4gYW55IHdheSwgZXhjZXB0CiAgICAgIHRoYXQgdGhlIGluZGVudGF0aW9uIGlzIHJlbW92ZWQuCgogICAgICBJdCBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy4KCiAgIFRoaXMgaXMgYSBub3JtYWwgdGV4dCBwYXJhZ3JhcGggYWdhaW4uCgpUaGUgaGFuZGxpbmcgb2YgdGhlIGBgOjpgYCBtYXJrZXIgaXMgc21hcnQ6CgoqIElmIGl0IG9jY3VycyBhcyBhIHBhcmFncmFwaCBvZiBpdHMgb3duLCB0aGF0IHBhcmFncmFwaCBpcyBjb21wbGV0ZWx5IGxlZnQKICBvdXQgb2YgdGhlIGRvY3VtZW50LgoqIElmIGl0IGlzIHByZWNlZGVkIGJ5IHdoaXRlc3BhY2UsIHRoZSBtYXJrZXIgaXMgcmVtb3ZlZC4KKiBJZiBpdCBpcyBwcmVjZWRlZCBieSBub24td2hpdGVzcGFjZSwgdGhlIG1hcmtlciBpcyByZXBsYWNlZCBieSBhIHNpbmdsZQogIGNvbG9uLgoKVGhhdCB3YXksIHRoZSBzZWNvbmQgc2VudGVuY2UgaW4gdGhlIGFib3ZlIGV4YW1wbGUncyBmaXJzdCBwYXJhZ3JhcGggd291bGQgYmUKcmVuZGVyZWQgYXMgIlRoZSBuZXh0IHBhcmFncmFwaCBpcyBhIGNvZGUgc2FtcGxlOiIuCgoKLi4gX3JzdC10YWJsZXM6CgpUYWJsZXMKLS0tLS0tCgpUd28gZm9ybXMgb2YgdGFibGVzIGFyZSBzdXBwb3J0ZWQuICBGb3IgKmdyaWQgdGFibGVzKiAoOmR1cmVmOmByZWYKJmx0O2dyaWQtdGFibGVzJmd0O2ApLCB5b3UgaGF2ZSB0byAicGFpbnQiIHRoZSBjZWxsIGdyaWQgeW91cnNlbGYuICBUaGV5IGxvb2sgbGlrZQp0aGlzOjoKCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKICAgfCBIZWFkZXIgcm93LCBjb2x1bW4gMSAgIHwgSGVhZGVyIDIgICB8IEhlYWRlciAzIHwgSGVhZGVyIDQgfAogICB8IChoZWFkZXIgcm93cyBvcHRpb25hbCkgfCAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICB8CiAgICs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09Kz09PT09PT09PT0rPT09PT09PT09PSsKICAgfCBib2R5IHJvdyAxLCBjb2x1bW4gMSAgIHwgY29sdW1uIDIgICB8IGNvbHVtbiAzIHwgY29sdW1uIDQgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiAgIHwgYm9keSByb3cgMiAgICAgICAgICAgICB8IC4uLiAgICAgICAgfCAuLi4gICAgICB8ICAgICAgICAgIHwKICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwoKKlNpbXBsZSB0YWJsZXMqICg6ZHVyZWY6YHJlZiAmbHQ7c2ltcGxlLXRhYmxlcyZndDtgKSBhcmUgZWFzaWVyIHRvIHdyaXRlLCBidXQKbGltaXRlZDogdGhleSBtdXN0IGNvbnRhaW4gbW9yZSB0aGFuIG9uZSByb3csIGFuZCB0aGUgZmlyc3QgY29sdW1uIGNhbm5vdApjb250YWluIG11bHRpcGxlIGxpbmVzLiAgVGhleSBsb29rIGxpa2UgdGhpczo6CgogICA9PT09PSAgPT09PT0gID09PT09PT0KICAgQSAgICAgIEIgICAgICBBIGFuZCBCCiAgID09PT09ICA9PT09PSAgPT09PT09PQogICBGYWxzZSAgRmFsc2UgIEZhbHNlCiAgIFRydWUgICBGYWxzZSAgRmFsc2UKICAgRmFsc2UgIFRydWUgICBGYWxzZQogICBUcnVlICAgVHJ1ZSAgIFRydWUKICAgPT09PT0gID09PT09ICA9PT09PT09CgoKSHlwZXJsaW5rcwotLS0tLS0tLS0tCgpFeHRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKVXNlIGBgYExpbmsgdGV4dCAmbHQ7aHR0cDovL2V4YW1wbGUuY29tLyZndDtgX2BgIGZvciBpbmxpbmUgd2ViIGxpbmtzLiAgSWYgdGhlIGxpbmsKdGV4dCBzaG91bGQgYmUgdGhlIHdlYiBhZGRyZXNzLCB5b3UgZG9uJ3QgbmVlZCBzcGVjaWFsIG1hcmt1cCBhdCBhbGwsIHRoZSBwYXJzZXIKZmluZHMgbGlua3MgYW5kIG1haWwgYWRkcmVzc2VzIGluIG9yZGluYXJ5IHRleHQuCgpZb3UgY2FuIGFsc28gc2VwYXJhdGUgdGhlIGxpbmsgYW5kIHRoZSB0YXJnZXQgZGVmaW5pdGlvbiAoOmR1cmVmOmByZWYKJmx0O2h5cGVybGluay10YXJnZXRzJmd0O2ApLCBsaWtlIHRoaXM6OgoKICAgVGhpcyBpcyBhIHBhcmFncmFwaCB0aGF0IGNvbnRhaW5zIGBhIGxpbmtgXy4KCiAgIC4uIF9hIGxpbms6IGh0dHA6Ly9leGFtcGxlLmNvbS8KCgpJbnRlcm5hbCBsaW5rcwpeXl5eXl5eXl5eXl5eXgoKSW50ZXJuYWwgbGlua2luZyBpcyBkb25lIHZpYSBhIHNwZWNpYWwgcmVTVCByb2xlIHByb3ZpZGVkIGJ5IFNwaGlueCwgc2VlIHRoZQpzZWN0aW9uIG9uIHNwZWNpZmljIG1hcmt1cCwgOnJlZjpgcmVmLXJvbGVgLgoKClNlY3Rpb25zCi0tLS0tLS0tCgpTZWN0aW9uIGhlYWRlcnMgKDpkdXJlZjpgcmVmICZsdDtzZWN0aW9ucyZndDtgKSBhcmUgY3JlYXRlZCBieSB1bmRlcmxpbmluZyAoYW5kCm9wdGlvbmFsbHkgb3ZlcmxpbmluZykgdGhlIHNlY3Rpb24gdGl0bGUgd2l0aCBhIHB1bmN0dWF0aW9uIGNoYXJhY3RlciwgYXQgbGVhc3QKYXMgbG9uZyBhcyB0aGUgdGV4dDo6CgogICA9PT09PT09PT09PT09PT09PQogICBUaGlzIGlzIGEgaGVhZGluZwogICA9PT09PT09PT09PT09PT09PQoKTm9ybWFsbHksIHRoZXJlIGFyZSBubyBoZWFkaW5nIGxldmVscyBhc3NpZ25lZCB0byBjZXJ0YWluIGNoYXJhY3RlcnMgYXMgdGhlCnN0cnVjdHVyZSBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIHN1Y2Nlc3Npb24gb2YgaGVhZGluZ3MuICBIb3dldmVyLCBmb3IgdGhlClB5dGhvbiBkb2N1bWVudGF0aW9uLCB0aGlzIGNvbnZlbnRpb24gaXMgdXNlZCB3aGljaCB5b3UgbWF5IGZvbGxvdzoKCiogYGAjYGAgd2l0aCBvdmVybGluZSwgZm9yIHBhcnRzCiogYGAqYGAgd2l0aCBvdmVybGluZSwgZm9yIGNoYXB0ZXJzCiogYGA9YGAsIGZvciBzZWN0aW9ucwoqIGBgLWBgLCBmb3Igc3Vic2VjdGlvbnMKKiBgYF5gYCwgZm9yIHN1YnN1YnNlY3Rpb25zCiogYGAiYGAsIGZvciBwYXJhZ3JhcGhzCgpPZiBjb3Vyc2UsIHlvdSBhcmUgZnJlZSB0byB1c2UgeW91ciBvd24gbWFya2VyIGNoYXJhY3RlcnMgKHNlZSB0aGUgcmVTVApkb2N1bWVudGF0aW9uKSwgYW5kIHVzZSBhIGRlZXBlciBuZXN0aW5nIGxldmVsLCBidXQga2VlcCBpbiBtaW5kIHRoYXQgbW9zdAp0YXJnZXQgZm9ybWF0cyAoSFRNTCwgTGFUZVgpIGhhdmUgYSBsaW1pdGVkIHN1cHBvcnRlZCBuZXN0aW5nIGRlcHRoLgoKCkV4cGxpY2l0IE1hcmt1cAotLS0tLS0tLS0tLS0tLS0KCiJFeHBsaWNpdCBtYXJrdXAiICg6ZHVyZWY6YHJlZiAmbHQ7ZXhwbGljaXQtbWFya3VwLWJsb2NrcyZndDtgKSBpcyB1c2VkIGluIHJlU1QgZm9yCm1vc3QgY29uc3RydWN0cyB0aGF0IG5lZWQgc3BlY2lhbCBoYW5kbGluZywgc3VjaCBhcyBmb290bm90ZXMsCnNwZWNpYWxseS1oaWdobGlnaHRlZCBwYXJhZ3JhcGhzLCBjb21tZW50cywgYW5kIGdlbmVyaWMgZGlyZWN0aXZlcy4KCkFuIGV4cGxpY2l0IG1hcmt1cCBibG9jayBiZWdpbnMgd2l0aCBhIGxpbmUgc3RhcnRpbmcgd2l0aCBgYC4uYGAgZm9sbG93ZWQgYnkKd2hpdGVzcGFjZSBhbmQgaXMgdGVybWluYXRlZCBieSB0aGUgbmV4dCBwYXJhZ3JhcGggYXQgdGhlIHNhbWUgbGV2ZWwgb2YKaW5kZW50YXRpb24uICAoVGhlcmUgbmVlZHMgdG8gYmUgYSBibGFuayBsaW5lIGJldHdlZW4gZXhwbGljaXQgbWFya3VwIGFuZCBub3JtYWwKcGFyYWdyYXBocy4gIFRoaXMgbWF5IGFsbCBzb3VuZCBhIGJpdCBjb21wbGljYXRlZCwgYnV0IGl0IGlzIGludHVpdGl2ZSBlbm91Z2gKd2hlbiB5b3Ugd3JpdGUgaXQuKQoKCi4uIF9kaXJlY3RpdmVzOgoKRGlyZWN0aXZlcwotLS0tLS0tLS0tCgpBIGRpcmVjdGl2ZSAoOmR1cmVmOmByZWYgJmx0O2RpcmVjdGl2ZXMmZ3Q7YCkgaXMgYSBnZW5lcmljIGJsb2NrIG9mIGV4cGxpY2l0IG1hcmt1cC4KQmVzaWRlcyByb2xlcywgaXQgaXMgb25lIG9mIHRoZSBleHRlbnNpb24gbWVjaGFuaXNtcyBvZiByZVNULCBhbmQgU3BoaW54IG1ha2VzCmhlYXZ5IHVzZSBvZiBpdC4KCkRvY3V0aWxzIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZGlyZWN0aXZlczoKCiogQWRtb25pdGlvbnM6IDpkdWRpcjpgYXR0ZW50aW9uYCwgOmR1ZGlyOmBjYXV0aW9uYCwgOmR1ZGlyOmBkYW5nZXJgLAogIDpkdWRpcjpgZXJyb3JgLCA6ZHVkaXI6YGhpbnRgLCA6ZHVkaXI6YGltcG9ydGFudGAsIDpkdWRpcjpgbm90ZWAsCiAgOmR1ZGlyOmB0aXBgLCA6ZHVkaXI6YHdhcm5pbmdgIGFuZCB0aGUgZ2VuZXJpYyA6ZHVkaXI6YGFkbW9uaXRpb25gLgogIChNb3N0IHRoZW1lcyBzdHlsZSBvbmx5ICJub3RlIiBhbmQgIndhcm5pbmciIHNwZWNpYWxseS4pCgoqIEltYWdlczoKCiAgLSA6ZHVkaXI6YGltYWdlYCAoc2VlIGFsc28gSW1hZ2VzXyBiZWxvdykKICAtIDpkdWRpcjpgZmlndXJlYCAoYW4gaW1hZ2Ugd2l0aCBjYXB0aW9uIGFuZCBvcHRpb25hbCBsZWdlbmQpCgoqIEFkZGl0aW9uYWwgYm9keSBlbGVtZW50czoKCiAgLSA6ZHVkaXI6YGNvbnRlbnRzYCAoYSBsb2NhbCwgaS5lLiBmb3IgdGhlIGN1cnJlbnQgZmlsZSBvbmx5LCB0YWJsZSBvZgogICAgY29udGVudHMpCiAgLSA6ZHVkaXI6YGNvbnRhaW5lcmAgKGEgY29udGFpbmVyIHdpdGggYSBjdXN0b20gY2xhc3MsIHVzZWZ1bCB0byBnZW5lcmF0ZSBhbgogICAgb3V0ZXIgYGAmbHQ7ZGl2Jmd0O2BgIGluIEhUTUwpCiAgLSA6ZHVkaXI6YHJ1YnJpY2AgKGEgaGVhZGluZyB3aXRob3V0IHJlbGF0aW9uIHRvIHRoZSBkb2N1bWVudCBzZWN0aW9uaW5nKQogIC0gOmR1ZGlyOmB0b3BpY2AsIDpkdWRpcjpgc2lkZWJhcmAgKHNwZWNpYWwgaGlnaGxpZ2h0ZWQgYm9keSBlbGVtZW50cykKICAtIDpkdWRpcjpgcGFyc2VkLWxpdGVyYWxgIChsaXRlcmFsIGJsb2NrIHRoYXQgc3VwcG9ydHMgaW5saW5lIG1hcmt1cCkKICAtIDpkdWRpcjpgZXBpZ3JhcGhgIChhIGJsb2NrIHF1b3RlIHdpdGggb3B0aW9uYWwgYXR0cmlidXRpb24gbGluZSkKICAtIDpkdWRpcjpgaGlnaGxpZ2h0c2AsIDpkdWRpcjpgcHVsbC1xdW90ZWAgKGJsb2NrIHF1b3RlcyB3aXRoIHRoZWlyIG93bgogICAgY2xhc3MgYXR0cmlidXRlKQogIC0gOmR1ZGlyOmBjb21wb3VuZGAgKGEgY29tcG91bmQgcGFyYWdyYXBoKQoKKiBTcGVjaWFsIHRhYmxlczoKCiAgLSA6ZHVkaXI6YHRhYmxlYCAoYSB0YWJsZSB3aXRoIHRpdGxlKQogIC0gOmR1ZGlyOmBjc3YtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMpCiAgLSA6ZHVkaXI6YGxpc3QtdGFibGVgIChhIHRhYmxlIGdlbmVyYXRlZCBmcm9tIGEgbGlzdCBvZiBsaXN0cykKCiogU3BlY2lhbCBkaXJlY3RpdmVzOgoKICAtIDpkdWRpcjpgcmF3YCAoaW5jbHVkZSByYXcgdGFyZ2V0LWZvcm1hdCBtYXJrdXApCiAgLSA6ZHVkaXI6YGluY2x1ZGVgIChpbmNsdWRlIHJlU3RydWN0dXJlZFRleHQgZnJvbSBhbm90aGVyIGZpbGUpCiAgICAtLSBpbiBTcGhpbngsIHdoZW4gZ2l2ZW4gYW4gYWJzb2x1dGUgaW5jbHVkZSBmaWxlIHBhdGgsIHRoaXMgZGlyZWN0aXZlIHRha2VzCiAgICBpdCBhcyByZWxhdGl2ZSB0byB0aGUgc291cmNlIGRpcmVjdG9yeQogIC0gOmR1ZGlyOmBjbGFzc2AgKGFzc2lnbiBhIGNsYXNzIGF0dHJpYnV0ZSB0byB0aGUgbmV4dCBlbGVtZW50KSBbMV1fCgoqIEhUTUwgc3BlY2lmaWNzOgoKICAtIDpkdWRpcjpgbWV0YWAgKGdlbmVyYXRpb24gb2YgSFRNTCBgYCZsdDttZXRhJmd0O2BgIHRhZ3MpCiAgLSA6ZHVkaXI6YHRpdGxlYCAob3ZlcnJpZGUgZG9jdW1lbnQgdGl0bGUpCgoqIEluZmx1ZW5jaW5nIG1hcmt1cDoKCiAgLSA6ZHVkaXI6YGRlZmF1bHQtcm9sZWAgKHNldCBhIG5ldyBkZWZhdWx0IHJvbGUpCiAgLSA6ZHVkaXI6YHJvbGVgIChjcmVhdGUgYSBuZXcgcm9sZSkKCiAgU2luY2UgdGhlc2UgYXJlIG9ubHkgcGVyLWZpbGUsIGJldHRlciB1c2UgU3BoaW54JyBmYWNpbGl0aWVzIGZvciBzZXR0aW5nIHRoZQogIDpjb25mdmFsOmBkZWZhdWx0X3JvbGVgLgoKRG8gKm5vdCogdXNlIHRoZSBkaXJlY3RpdmVzIDpkdWRpcjpgc2VjdG51bWAsIDpkdWRpcjpgaGVhZGVyYCBhbmQKOmR1ZGlyOmBmb290ZXJgLgoKRGlyZWN0aXZlcyBhZGRlZCBieSBTcGhpbnggYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmBzcGhpbnhtYXJrdXBgLgoKQmFzaWNhbGx5LCBhIGRpcmVjdGl2ZSBjb25zaXN0cyBvZiBhIG5hbWUsIGFyZ3VtZW50cywgb3B0aW9ucyBhbmQgY29udGVudC4gKEtlZXAKdGhpcyB0ZXJtaW5vbG9neSBpbiBtaW5kLCBpdCBpcyB1c2VkIGluIHRoZSBuZXh0IGNoYXB0ZXIgZGVzY3JpYmluZyBjdXN0b20KZGlyZWN0aXZlcy4pICBMb29raW5nIGF0IHRoaXMgZXhhbXBsZSwgOjoKCiAgIC4uIGZ1bmN0aW9uOjogZm9vKHgpCiAgICAgICAgICAgICAgICAgZm9vKHksIHopCiAgICAgIDptb2R1bGU6IHNvbWUubW9kdWxlLm5hbWUKCiAgICAgIFJldHVybiBhIGxpbmUgb2YgdGV4dCBpbnB1dCBmcm9tIHRoZSB1c2VyLgoKYGBmdW5jdGlvbmBgIGlzIHRoZSBkaXJlY3RpdmUgbmFtZS4gIEl0IGlzIGdpdmVuIHR3byBhcmd1bWVudHMgaGVyZSwgdGhlCnJlbWFpbmRlciBvZiB0aGUgZmlyc3QgbGluZSBhbmQgdGhlIHNlY29uZCBsaW5lLCBhcyB3ZWxsIGFzIG9uZSBvcHRpb24KYGBtb2R1bGVgYCAoYXMgeW91IGNhbiBzZWUsIG9wdGlvbnMgYXJlIGdpdmVuIGluIHRoZSBsaW5lcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKdGhlIGFyZ3VtZW50cyBhbmQgaW5kaWNhdGVkIGJ5IHRoZSBjb2xvbnMpLiAgT3B0aW9ucyBtdXN0IGJlIGluZGVudGVkIHRvIHRoZQpzYW1lIGxldmVsIGFzIHRoZSBkaXJlY3RpdmUgY29udGVudC4KClRoZSBkaXJlY3RpdmUgY29udGVudCBmb2xsb3dzIGFmdGVyIGEgYmxhbmsgbGluZSBhbmQgaXMgaW5kZW50ZWQgcmVsYXRpdmUgdG8gdGhlCmRpcmVjdGl2ZSBzdGFydC4KCgpJbWFnZXMKLS0tLS0tCgpyZVNUIHN1cHBvcnRzIGFuIGltYWdlIGRpcmVjdGl2ZSAoOmR1ZGlyOmByZWYgJmx0O2ltYWdlJmd0O2ApLCB1c2VkIGxpa2Ugc286OgoKICAgLi4gaW1hZ2U6OiBnbnUucG5nCiAgICAgIChvcHRpb25zKQoKV2hlbiB1c2VkIHdpdGhpbiBTcGhpbngsIHRoZSBmaWxlIG5hbWUgZ2l2ZW4gKGhlcmUgYGBnbnUucG5nYGApIG11c3QgZWl0aGVyIGJlCnJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZmlsZSwgb3IgYWJzb2x1dGUgd2hpY2ggbWVhbnMgdGhhdCB0aGV5IGFyZSByZWxhdGl2ZSB0bwp0aGUgdG9wIHNvdXJjZSBkaXJlY3RvcnkuICBGb3IgZXhhbXBsZSwgdGhlIGZpbGUgYGBza2V0Y2gvc3BhbS5yc3RgYCBjb3VsZCByZWZlcgp0byB0aGUgaW1hZ2UgYGBpbWFnZXMvc3BhbS5wbmdgYCBhcyBgYC4uL2ltYWdlcy9zcGFtLnBuZ2BgIG9yCmBgL2ltYWdlcy9zcGFtLnBuZ2BgLgoKU3BoaW54IHdpbGwgYXV0b21hdGljYWxseSBjb3B5IGltYWdlIGZpbGVzIG92ZXIgdG8gYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIG91dHB1dApkaXJlY3Rvcnkgb24gYnVpbGRpbmcgKGUuZy4gdGhlIGBgX3N0YXRpY2BgIGRpcmVjdG9yeSBmb3IgSFRNTCBvdXRwdXQuKQoKSW50ZXJwcmV0YXRpb24gb2YgaW1hZ2Ugc2l6ZSBvcHRpb25zIChgYHdpZHRoYGAgYW5kIGBgaGVpZ2h0YGApIGlzIGFzIGZvbGxvd3M6CmlmIHRoZSBzaXplIGhhcyBubyB1bml0IG9yIHRoZSB1bml0IGlzIHBpeGVscywgdGhlIGdpdmVuIHNpemUgd2lsbCBvbmx5IGJlCnJlc3BlY3RlZCBmb3Igb3V0cHV0IGNoYW5uZWxzIHRoYXQgc3VwcG9ydCBwaXhlbHMgKGkuZS4gbm90IGluIExhVGVYIG91dHB1dCkuCk90aGVyIHVuaXRzIChsaWtlIGBgcHRgYCBmb3IgcG9pbnRzKSB3aWxsIGJlIHVzZWQgZm9yIEhUTUwgYW5kIExhVGVYIG91dHB1dC4KClNwaGlueCBleHRlbmRzIHRoZSBzdGFuZGFyZCBkb2N1dGlscyBiZWhhdmlvciBieSBhbGxvd2luZyBhbiBhc3RlcmlzayBmb3IgdGhlCmV4dGVuc2lvbjo6CgogICAuLiBpbWFnZTo6IGdudS4qCgpTcGhpbnggdGhlbiBzZWFyY2hlcyBmb3IgYWxsIGltYWdlcyBtYXRjaGluZyB0aGUgcHJvdmlkZWQgcGF0dGVybiBhbmQgZGV0ZXJtaW5lcwp0aGVpciB0eXBlLiAgRWFjaCBidWlsZGVyIHRoZW4gY2hvb3NlcyB0aGUgYmVzdCBpbWFnZSBvdXQgb2YgdGhlc2UgY2FuZGlkYXRlcy4KRm9yIGluc3RhbmNlLCBpZiB0aGUgZmlsZSBuYW1lIGBgZ251LipgYCB3YXMgZ2l2ZW4gYW5kIHR3byBmaWxlcyA6ZmlsZTpgZ251LnBkZmAKYW5kIDpmaWxlOmBnbnUucG5nYCBleGlzdGVkIGluIHRoZSBzb3VyY2UgdHJlZSwgdGhlIExhVGVYIGJ1aWxkZXIgd291bGQgY2hvb3NlCnRoZSBmb3JtZXIsIHdoaWxlIHRoZSBIVE1MIGJ1aWxkZXIgd291bGQgcHJlZmVyIHRoZSBsYXR0ZXIuCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNAogICBBZGRlZCB0aGUgc3VwcG9ydCBmb3IgZmlsZSBuYW1lcyBlbmRpbmcgaW4gYW4gYXN0ZXJpc2suCgouLiB2ZXJzaW9uY2hhbmdlZDo6IDAuNgogICBJbWFnZSBwYXRocyBjYW4gbm93IGJlIGFic29sdXRlLgoKCkZvb3Rub3RlcwotLS0tLS0tLS0KCkZvciBmb290bm90ZXMgKDpkdXJlZjpgcmVmICZsdDtmb290bm90ZXMmZ3Q7YCksIHVzZSBgYFsjbmFtZV1fYGAgdG8gbWFyayB0aGUgZm9vdG5vdGUKbG9jYXRpb24sIGFuZCBhZGQgdGhlIGZvb3Rub3RlIGJvZHkgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZG9jdW1lbnQgYWZ0ZXIgYQoiRm9vdG5vdGVzIiBydWJyaWMgaGVhZGluZywgbGlrZSBzbzo6CgogICBMb3JlbSBpcHN1bSBbI2YxXV8gZG9sb3Igc2l0IGFtZXQgLi4uIFsjZjJdXwoKICAgLi4gcnVicmljOjogRm9vdG5vdGVzCgogICAuLiBbI2YxXSBUZXh0IG9mIHRoZSBmaXJzdCBmb290bm90ZS4KICAgLi4gWyNmMl0gVGV4dCBvZiB0aGUgc2Vjb25kIGZvb3Rub3RlLgoKWW91IGNhbiBhbHNvIGV4cGxpY2l0bHkgbnVtYmVyIHRoZSBmb290bm90ZXMgKGBgWzFdX2BgKSBvciB1c2UgYXV0by1udW1iZXJlZApmb290bm90ZXMgd2l0aG91dCBuYW1lcyAoYGBbI11fYGApLgoKCkNpdGF0aW9ucwotLS0tLS0tLS0KClN0YW5kYXJkIHJlU1QgY2l0YXRpb25zICg6ZHVyZWY6YHJlZiAmbHQ7Y2l0YXRpb25zJmd0O2ApIGFyZSBzdXBwb3J0ZWQsIHdpdGggdGhlCmFkZGl0aW9uYWwgZmVhdHVyZSB0aGF0IHRoZXkgYXJlICJnbG9iYWwiLCBpLmUuIGFsbCBjaXRhdGlvbnMgY2FuIGJlIHJlZmVyZW5jZWQKZnJvbSBhbGwgZmlsZXMuICBVc2UgdGhlbSBsaWtlIHNvOjoKCiAgIExvcmVtIGlwc3VtIFtSZWZdXyBkb2xvciBzaXQgYW1ldC4KCiAgIC4uIFtSZWZdIEJvb2sgb3IgYXJ0aWNsZSByZWZlcmVuY2UsIFVSTCBvciB3aGF0ZXZlci4KCkNpdGF0aW9uIHVzYWdlIGlzIHNpbWlsYXIgdG8gZm9vdG5vdGUgdXNhZ2UsIGJ1dCB3aXRoIGEgbGFiZWwgdGhhdCBpcyBub3QKbnVtZXJpYyBvciBiZWdpbnMgd2l0aCBgYCNgYC4KCgpTdWJzdGl0dXRpb25zCi0tLS0tLS0tLS0tLS0KCnJlU1Qgc3VwcG9ydHMgInN1YnN0aXR1dGlvbnMiICg6ZHVyZWY6YHJlZiAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2ApLCB3aGljaAphcmUgcGllY2VzIG9mIHRleHQgYW5kL29yIG1hcmt1cCByZWZlcnJlZCB0byBpbiB0aGUgdGV4dCBieSBgYHxuYW1lfGBgLiAgVGhleQphcmUgZGVmaW5lZCBsaWtlIGZvb3Rub3RlcyB3aXRoIGV4cGxpY2l0IG1hcmt1cCBibG9ja3MsIGxpa2UgdGhpczo6CgogICAuLiB8bmFtZXwgcmVwbGFjZTo6IHJlcGxhY2VtZW50ICp0ZXh0KgoKb3IgdGhpczo6CgogICAuLiB8Y2F1dGlvbnwgaW1hZ2U6OiB3YXJuaW5nLnBuZwogICAgICAgICAgICAgICAgOmFsdDogV2FybmluZyEKClNlZSB0aGUgOmR1cmVmOmByZVNUIHJlZmVyZW5jZSBmb3Igc3Vic3RpdHV0aW9ucyAmbHQ7c3Vic3RpdHV0aW9uLWRlZmluaXRpb25zJmd0O2AKZm9yIGRldGFpbHMuCgpJZiB5b3Ugd2FudCB0byB1c2Ugc29tZSBzdWJzdGl0dXRpb25zIGZvciBhbGwgZG9jdW1lbnRzLCBwdXQgdGhlbSBpbnRvCjpjb25mdmFsOmByc3RfcHJvbG9nYCBvciBwdXQgdGhlbSBpbnRvIGEgc2VwYXJhdGUgZmlsZSBhbmQgaW5jbHVkZSBpdCBpbnRvIGFsbApkb2N1bWVudHMgeW91IHdhbnQgdG8gdXNlIHRoZW0gaW4sIHVzaW5nIHRoZSA6cnN0OmRpcjpgaW5jbHVkZWAgZGlyZWN0aXZlLiAgKEJlCnN1cmUgdG8gZ2l2ZSB0aGUgaW5jbHVkZSBmaWxlIGEgZmlsZSBuYW1lIGV4dGVuc2lvbiBkaWZmZXJpbmcgZnJvbSB0aGF0IG9mIG90aGVyCnNvdXJjZSBmaWxlcywgdG8gYXZvaWQgU3BoaW54IGZpbmRpbmcgaXQgYXMgYSBzdGFuZGFsb25lIGRvY3VtZW50LikKClNwaGlueCBkZWZpbmVzIHNvbWUgZGVmYXVsdCBzdWJzdGl0dXRpb25zLCBzZWUgOnJlZjpgZGVmYXVsdC1zdWJzdGl0dXRpb25zYC4KCgpDb21tZW50cwotLS0tLS0tLQoKRXZlcnkgZXhwbGljaXQgbWFya3VwIGJsb2NrIHdoaWNoIGlzbid0IGEgdmFsaWQgbWFya3VwIGNvbnN0cnVjdCAobGlrZSB0aGUKZm9vdG5vdGVzIGFib3ZlKSBpcyByZWdhcmRlZCBhcyBhIGNvbW1lbnQgKDpkdXJlZjpgcmVmICZsdDtjb21tZW50cyZndDtgKS4gIEZvcgpleGFtcGxlOjoKCiAgIC4uIFRoaXMgaXMgYSBjb21tZW50LgoKWW91IGNhbiBpbmRlbnQgdGV4dCBhZnRlciBhIGNvbW1lbnQgc3RhcnQgdG8gZm9ybSBtdWx0aWxpbmUgY29tbWVudHM6OgoKICAgLi4KICAgICAgVGhpcyB3aG9sZSBpbmRlbnRlZCBibG9jawogICAgICBpcyBhIGNvbW1lbnQuCgogICAgICBTdGlsbCBpbiB0aGUgY29tbWVudC4KCgpTb3VyY2UgZW5jb2RpbmcKLS0tLS0tLS0tLS0tLS0tCgpTaW5jZSB0aGUgZWFzaWVzdCB3YXkgdG8gaW5jbHVkZSBzcGVjaWFsIGNoYXJhY3RlcnMgbGlrZSBlbSBkYXNoZXMgb3IgY29weXJpZ2h0CnNpZ25zIGluIHJlU1QgaXMgdG8gZGlyZWN0bHkgd3JpdGUgdGhlbSBhcyBVbmljb2RlIGNoYXJhY3RlcnMsIG9uZSBoYXMgdG8Kc3BlY2lmeSBhbiBlbmNvZGluZy4gIFNwaGlueCBhc3N1bWVzIHNvdXJjZSBmaWxlcyB0byBiZSBlbmNvZGVkIGluIFVURi04IGJ5CmRlZmF1bHQ7IHlvdSBjYW4gY2hhbmdlIHRoaXMgd2l0aCB0aGUgOmNvbmZ2YWw6YHNvdXJjZV9lbmNvZGluZ2AgY29uZmlnIHZhbHVlLgoKCkdvdGNoYXMKLS0tLS0tLQoKVGhlcmUgYXJlIHNvbWUgcHJvYmxlbXMgb25lIGNvbW1vbmx5IHJ1bnMgaW50byB3aGlsZSBhdXRob3JpbmcgcmVTVCBkb2N1bWVudHM6CgoqICoqU2VwYXJhdGlvbiBvZiBpbmxpbmUgbWFya3VwOioqIEFzIHNhaWQgYWJvdmUsIGlubGluZSBtYXJrdXAgc3BhbnMgbXVzdCBiZQogIHNlcGFyYXRlZCBmcm9tIHRoZSBzdXJyb3VuZGluZyB0ZXh0IGJ5IG5vbi13b3JkIGNoYXJhY3RlcnMsIHlvdSBoYXZlIHRvIHVzZSBhCiAgYmFja3NsYXNoLWVzY2FwZWQgc3BhY2UgdG8gZ2V0IGFyb3VuZCB0aGF0LiAgU2VlIGB0aGUgcmVmZXJlbmNlCiAgJmx0O2h0dHA6Ly9kb2N1dGlscy5zZi5uZXQvZG9jcy9yZWYvcnN0L3Jlc3RydWN0dXJlZHRleHQuaHRtbCNpbmxpbmUtbWFya3VwJmd0O2BfCiAgZm9yIHRoZSBkZXRhaWxzLgoKKiAqKk5vIG5lc3RlZCBpbmxpbmUgbWFya3VwOioqIFNvbWV0aGluZyBsaWtlIGBgKnNlZSA6ZnVuYzpgZm9vYCpgYCBpcyBub3QKICBwb3NzaWJsZS4KCgouLiBydWJyaWM6OiBGb290bm90ZXMKCi4uIFsxXSBXaGVuIHRoZSBkZWZhdWx0IGRvbWFpbiBjb250YWlucyBhIDpyc3Q6ZGlyOmBjbGFzc2AgZGlyZWN0aXZlLCB0aGlzIGRpcmVjdGl2ZQogICAgICAgd2lsbCBiZSBzaGFkb3dlZC4gIFRoZXJlZm9yZSwgU3BoaW54IHJlLWV4cG9ydHMgaXQgYXMgOnJzdDpkaXI6YHJzdC1jbGFzc2AuCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CiAgICA8cD5UaGUgcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlIHN1cHBvcnRzIG9uZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcjo8L3A+CiAgICA8ZGw+CiAgICAgIDxkdD48Y29kZT52ZXJiYXRpbSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QSBuYW1lIG9yIE1JTUUgdHlwZSBvZiBhIG1vZGUgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZwogICAgICB2ZXJiYXRpbSBibG9ja3MuIEJ5IGRlZmF1bHQsIHJlU3RydWN0dXJlZFRleHQgbW9kZSB1c2VzIHVuaWZvcm0gY29sb3IKICAgICAgZm9yIHdob2xlIGJsb2NrIG9mIHZlcmJhdGltIHRleHQgaWYgbm8gbW9kZSBpcyBnaXZlbi48L2RkPgogICAgPC9kbD4KICAgIDxwPklmIDxjb2RlPnB5dGhvbjwvY29kZT4gbW9kZSBpcyBhdmFpbGFibGUsCiAgICBpdCB3aWxsIGJlIHVzZWQgZm9yIGhpZ2hsaWdodGluZyBibG9ja3MgY29udGFpbmluZyBQeXRob24vSVB5dGhvbiB0ZXJtaW5hbAogICAgc2Vzc2lvbnMgKGJsb2NrcyBzdGFydGluZyB3aXRoIDxjb2RlPiZndDsmZ3Q7Jmd0OzwvY29kZT4gKGZvciBQeXRob24pIG9yCiAgICA8Y29kZT5JbiBbbnVtXTo8L2NvZGU+IChmb3IgSVB5dGhvbikuCgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1yc3Q8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWVtcGhhc2lzIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXN0cm9uZyB7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWludGVycHJldGVkIHsKICAgIGNvbG9yOiAjMzNjYzY2Owp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20taW5saW5lIHsKICAgIGNvbG9yOiAjMzM5OWNjOwp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tcm9sZSB7CiAgICBjb2xvcjogIzY2NjY5OTsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWxpc3QgewogICAgY29sb3I6ICNjYzAwOTk7CiAgICBmb250LXdlaWdodDogYm9sZDsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWJvZHkgewogICAgY29sb3I6ICM2Njk5Y2M7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS12ZXJiYXRpbSB7CiAgICBjb2xvcjogIzMzNjZmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNvbW1lbnQgewogICAgY29sb3I6ICNhYTc3MDA7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1kaXJlY3RpdmUgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWh5cGVybGluayB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiAjMzM2NmZmOwp9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tZm9vdG5vdGUgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzMzNmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWNpdGF0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICMzMzAwZmY7Cn0KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1yZXBsYWNlbWVudCB7CiAgICBjb2xvcjogIzk5MzNjYzsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXNlY3Rpb24gewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogI2NjMDA5OTsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWRpcmVjdGl2ZS1tYXJrZXIgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKLmNtLXMtZGVmYXVsdCBzcGFuLmNtLXZlcmJhdGltLW1hcmtlciB7CiAgICBmb250LXdlaWdodDogYm9sZDsKICAgIGNvbG9yOiAjOTkwMGZmOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdyc3QnLCBmdW5jdGlvbihjb25maWcsIG9wdGlvbnMpIHsKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmbiwgY3R4KSB7CiAgICAgICAgc3RhdGUuZm4gPSBmbjsKICAgICAgICBzZXRDdHgoc3RhdGUsIGN0eCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Q3R4KHN0YXRlLCBjdHgpIHsKICAgICAgICBzdGF0ZS5jdHggPSBjdHggfHwge307CiAgICB9CgogICAgZnVuY3Rpb24gc2V0Tm9ybWFsKHN0YXRlLCBjaCkgewogICAgICAgIGlmIChjaCAmJiAodHlwZW9mIGNoICE9PSAnc3RyaW5nJykpIHsKICAgICAgICAgICAgdmFyIHN0ciA9IGNoLmN1cnJlbnQoKTsKICAgICAgICAgICAgY2ggPSBzdHJbc3RyLmxlbmd0aC0xXTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwsIHtiYWNrOiBjaH0pOwogICAgfQoKICAgIGZ1bmN0aW9uIGhhc01vZGUobW9kZSkgewogICAgICAgIGlmIChtb2RlKSB7CiAgICAgICAgICAgIHZhciBtb2RlcyA9IENvZGVNaXJyb3IubGlzdE1vZGVzKCk7CgogICAgICAgICAgICBmb3IgKHZhciBpIGluIG1vZGVzKSB7CiAgICAgICAgICAgICAgICBpZiAobW9kZXNbaV0gPT0gbW9kZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgZnVuY3Rpb24gZ2V0TW9kZShtb2RlKSB7CiAgICAgICAgaWYgKGhhc01vZGUobW9kZSkpIHsKICAgICAgICAgICAgcmV0dXJuIENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIG1vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICB2YXIgdmVyYmF0aW1Nb2RlID0gZ2V0TW9kZShvcHRpb25zLnZlcmJhdGltKTsKICAgIHZhciBweXRob25Nb2RlID0gZ2V0TW9kZSgncHl0aG9uJyk7CgogICAgdmFyIHJlU2VjdGlvbiA9IC9eWyEiIyQlJicoKSorLC0uLzo7PD0+P0BbXFxcXV5fYHt8fX5dLzsKICAgIHZhciByZURpcmVjdGl2ZSA9IC9eXHMqXHcoWy06Llx3XSpcdyk/OjooXHN8JCkvOwogICAgdmFyIHJlSHlwZXJsaW5rID0gL15ccypfW1x3LV0rOihcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZSA9IC9eXHMqXFsoXGQrfCMpXF0oXHN8JCkvOwogICAgdmFyIHJlQ2l0YXRpb24gPSAvXlxzKlxbW0EtWmEtel1bXHctXSpcXShcc3wkKS87CiAgICB2YXIgcmVGb290bm90ZVJlZiA9IC9eXFsoXGQrfCMpXF1fLzsKICAgIHZhciByZUNpdGF0aW9uUmVmID0gL15cW1tBLVphLXpdW1x3LV0qXF1fLzsKICAgIHZhciByZURpcmVjdGl2ZU1hcmtlciA9IC9eXC5cLihcc3wkKS87CiAgICB2YXIgcmVWZXJiYXRpbU1hcmtlciA9IC9eOjpccyokLzsKICAgIHZhciByZVByZUlubGluZSA9IC9eWy1ccyIoW3s8LzpdLzsKICAgIHZhciByZVBvc3RJbmxpbmUgPSAvXlstXHNgJyIpXF19Pi86Liw7IT9cXF9dLzsKICAgIHZhciByZUVudW1lcmF0ZWRMaXN0ID0gL15ccyooKFxkK3xbQS1aYS16I10pWy4pXXxcKChcZCt8W0EtWi1hLXojXSlcKSlccy87CiAgICB2YXIgcmVCdWxsZXRlZExpc3QgPSAvXlxzKlstXCtcKl1ccy87CiAgICB2YXIgcmVFeGFtcGxlcyA9IC9eXHMrKD4+PnxJbiBcW1xkK1xdOilccy87CgogICAgZnVuY3Rpb24gbm9ybWFsKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2gsIHNvbCwgaTsKCiAgICAgICAgaWYgKHN0cmVhbS5lYXQoL1xcLykpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBzb2wgPSBzdHJlYW0uc29sKCk7CgogICAgICAgIGlmIChzb2wgJiYgKGNoID0gc3RyZWFtLmVhdChyZVNlY3Rpb24pKSkgewogICAgICAgICAgICBmb3IgKGkgPSAwOyBzdHJlYW0uZWF0KGNoKTsgaSsrKTsKCiAgICAgICAgICAgIGlmIChpID49IDMgJiYgc3RyZWFtLm1hdGNoKC9eXHMqJC8pKSB7CiAgICAgICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIG51bGwpOwogICAgICAgICAgICAgICAgcmV0dXJuICdoZWFkZXInOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcChpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlTWFya2VyKSkgewogICAgICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGRpcmVjdGl2ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzdHJlYW0ubWF0Y2gocmVWZXJiYXRpbU1hcmtlcikpIHsKICAgICAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB2YXIgbW9kZSA9IHZlcmJhdGltTW9kZTsKCiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgdmVyYmF0aW0sIHsKICAgICAgICAgICAgICAgICAgICBtb2RlOiBtb2RlLAogICAgICAgICAgICAgICAgICAgIGxvY2FsOiBtb2RlLnN0YXJ0U3RhdGUoKQogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICdtZXRhJzsKICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRXhhbXBsZXMsIGZhbHNlKSkgewogICAgICAgICAgICBpZiAoIXB5dGhvbk1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ21ldGEnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSBweXRob25Nb2RlOwoKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSwgewogICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IG1vZGUuc3RhcnRTdGF0ZSgpCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEJhY2t3YXJkKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzb2wgfHwgIXN0YXRlLmN0eC5iYWNrIHx8IHJlLnRlc3Qoc3RhdGUuY3R4LmJhY2spOwogICAgICAgIH0KCiAgICAgICAgZnVuY3Rpb24gdGVzdEZvcndhcmQocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5lb2woKSB8fCBzdHJlYW0ubWF0Y2gocmUsIGZhbHNlKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RJbmxpbmUocmUpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cmVhbS5tYXRjaChyZSkgJiYgdGVzdEJhY2t3YXJkKC9cVy8pICYmIHRlc3RGb3J3YXJkKC9cVy8pOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRlc3RJbmxpbmUocmVGb290bm90ZVJlZikpIHsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICByZXR1cm4gJ2Zvb3Rub3RlJzsKICAgICAgICB9CgogICAgICAgIGlmICh0ZXN0SW5saW5lKHJlQ2l0YXRpb25SZWYpKSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuICdjaXRhdGlvbic7CiAgICAgICAgfQoKICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgIGlmICh0ZXN0QmFja3dhcmQocmVQcmVJbmxpbmUpKSB7CiAgICAgICAgICAgIGlmICgoY2ggPT09ICc6JyB8fCBjaCA9PT0gJ3wnKSAmJiBzdHJlYW0uZWF0KC9cUy8pKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW47CgogICAgICAgICAgICAgICAgaWYgKGNoID09PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICdidWlsdGluJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdG9rZW4gPSAnYXRvbSc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGlubGluZSwgewogICAgICAgICAgICAgICAgICAgIGNoOiBjaCwKICAgICAgICAgICAgICAgICAgICB3aWRlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBwcmV2OiBudWxsLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoY2ggPT09ICcqJyB8fCBjaCA9PT0gJ2AnKSB7CiAgICAgICAgICAgICAgICB2YXIgb3JpZyA9IGNoLAogICAgICAgICAgICAgICAgICAgIHdpZGUgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgICAgICAgICAgaWYgKGNoID09IG9yaWcpIHsKICAgICAgICAgICAgICAgICAgICB3aWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGNoICYmICEvXHMvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3JpZyA9PT0gJyonKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gd2lkZSA/ICdzdHJvbmcnIDogJ2VtJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHdpZGUgPyAnc3RyaW5nJyA6ICdzdHJpbmctMic7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgaW5saW5lLCB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNoOiBvcmlnLCAgICAgICAgICAgICAgIC8vIGlubGluZSgpIGhhcyB0byBrbm93IHdoYXQgdG8gc2VhcmNoIGZvcgogICAgICAgICAgICAgICAgICAgICAgICB3aWRlOiB3aWRlLCAgICAgICAgICAgICAvLyBhcmUgd2UgbG9va2luZyBmb3IgYGNoYCBvciBgY2hjaGAKICAgICAgICAgICAgICAgICAgICAgICAgcHJldjogbnVsbCwgICAgICAgICAgICAgLy8gdGVybWluYXRvciBtdXN0IG5vdCBiZSBwcmVjZWVkZWQgd2l0aCB3aGl0ZXNwYWNlCiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbiAgICAgICAgICAgIC8vIEkgZG9uJ3Qgd2FudCB0byByZWNvbXB1dGUgdGhpcyBhbGwgdGhlIHRpbWUKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBpbmxpbmUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCksCiAgICAgICAgICAgIHRva2VuID0gc3RhdGUuY3R4LnRva2VuOwoKICAgICAgICBmdW5jdGlvbiBmaW5pc2goY2gpIHsKICAgICAgICAgICAgc3RhdGUuY3R4LnByZXYgPSBjaDsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KCiAgICAgICAgaWYgKGNoICE9IHN0YXRlLmN0eC5jaCkgewogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIGlmICgvXHMvLnRlc3Qoc3RhdGUuY3R4LnByZXYpKSB7CiAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKCiAgICAgICAgICAgIGlmIChjaCAhPSBzdGF0ZS5jdHguY2gpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmaW5pc2goY2gpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSAmJiAhcmVQb3N0SW5saW5lLnRlc3Qoc3RyZWFtLnBlZWsoKSkpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmN0eC53aWRlKSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwogICAgICAgIHNldE5vcm1hbChzdGF0ZSwgY2gpOwoKICAgICAgICByZXR1cm4gdG9rZW47CiAgICB9CgogICAgZnVuY3Rpb24gZGlyZWN0aXZlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSBudWxsOwoKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdhdHRyaWJ1dGUnOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJlSHlwZXJsaW5rKSkgewogICAgICAgICAgICB0b2tlbiA9ICdsaW5rJzsKICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChyZUZvb3Rub3RlKSkgewogICAgICAgICAgICB0b2tlbiA9ICdxdW90ZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVDaXRhdGlvbikpIHsKICAgICAgICAgICAgdG9rZW4gPSAncXVvdGUnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwoKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgY29tbWVudCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ2NvbW1lbnQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBGSVhNRSB0aGlzIGlzIHVucmVhY2hhYmxlCiAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGJvZHksIHtzdGFydDogdHJ1ZX0pOwogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBib2R5KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgdG9rZW4gPSAnYm9keSc7CgogICAgICAgIGlmICghc3RhdGUuY3R4LnN0YXJ0IHx8IHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgdG9rZW4pOwogICAgICAgIH0KCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHNldEN0eChzdGF0ZSk7CgogICAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KCiAgICBmdW5jdGlvbiBjb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICByZXR1cm4gYmxvY2soc3RyZWFtLCBzdGF0ZSwgJ2NvbW1lbnQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2ZXJiYXRpbShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGJsb2NrKHN0cmVhbSwgc3RhdGUsICdtZXRhJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICAgICAgaWYgKCFzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHZlcmJhdGltTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN0eC5sb2NhbCk7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIGJsb2NrKHN0cmVhbSwgc3RhdGUsIHRva2VuKSB7CiAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCBzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzZXROb3JtYWwoc3RhdGUsIHN0cmVhbSk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4ge2ZuOiBub3JtYWwsIGN0eDoge319OwogICAgICAgIH0sCgogICAgICAgIGNvcHlTdGF0ZTogZnVuY3Rpb24oc3RhdGUpIHsKICAgICAgICAgICAgcmV0dXJuIHtmbjogc3RhdGUuZm4sIGN0eDogc3RhdGUuY3R4fTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgdG9rZW4gPSBzdGF0ZS5mbihzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0KICAgIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnN0IiwgInJzdCIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1YnkgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1YnkuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fQogICAgICAuY20tcy1kZWZhdWx0IHNwYW4uY20tYXJyb3cgeyBjb2xvcjogcmVkOyB9CiAgICA8L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBSdWJ5IG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIyBDb2RlIGZyb20gaHR0cDovL3NhbmRib3gubWMuZWR1L35iZW5uZXQvcnVieS9jb2RlL3BvbHlfcmIuaHRtbAojCiMgVGhpcyBwcm9ncmFtIGV2YWx1YXRlcyBwb2x5bm9taWFscy4gIEl0IGZpcnN0IGFza3MgZm9yIHRoZSBjb2VmZmljaWVudHMKIyBvZiBhIHBvbHlub21pYWwsIHdoaWNoIG11c3QgYmUgZW50ZXJlZCBvbiBvbmUgbGluZSwgaGlnaGVzdC1vcmRlciBmaXJzdC4KIyBJdCB0aGVuIHJlcXVlc3RzIHZhbHVlcyBvZiB4IGFuZCB3aWxsIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSBwb2x5IGZvcgojIGVhY2ggeC4gIEl0IHdpbGwgcmVwZWF0bHkgYXNrIGZvciB4IHZhbHVlcywgdW5sZXNzIHlvdSB0aGUgdXNlciBlbnRlcnMKIyBhIGJsYW5rIGxpbmUuICBJdCB0aGF0IGNhc2UsIGl0IHdpbGwgYXNrIGZvciBhbm90aGVyIHBvbHlub21pYWwuICBJZiB0aGUKIyB1c2VyIHR5cGVzIHF1aXQgZm9yIGVpdGhlciBpbnB1dCwgdGhlIHByb2dyYW0gaW1tZWRpYXRlbHkgZXhpdHMuCiMKCiMKIyBGdW5jdGlvbiB0byBldmFsdWF0ZSBhIHBvbHlub21pYWwgYXQgeC4gIFRoZSBwb2x5bm9taWFsIGlzIGdpdmVuCiMgYXMgYSBsaXN0IG9mIGNvZWZmaWNpZW50cywgZnJvbSB0aGUgZ3JlYXRlc3QgdG8gdGhlIGxlYXN0LgpkZWYgcG9seXZhbCh4LCBjb2VmKQogICAgc3VtID0gMAogICAgY29lZiA9IGNvZWYuY2xvbmUgICAgICAgICAgICMgRG9uJ3Qgd2FudCB0byBkZXN0cm95IHRoZSBvcmlnaW5hbAogICAgd2hpbGUgdHJ1ZQogICAgICAgIHN1bSArPSBjb2VmLnNoaWZ0ICAgICAgICMgQWRkIGFuZCByZW1vdmUgdGhlIG5leHQgY29lZgogICAgICAgIGJyZWFrIGlmIGNvZWYuZW1wdHk/ICAgICMgSWYgbm8gbW9yZSwgZG9uZSBlbnRpcmVseS4KICAgICAgICBzdW0gKj0geCAgICAgICAgICAgICAgICAjIFRoaXMgaGFwcGVucyB0aGUgcmlnaHQgbnVtYmVyIG9mIHRpbWVzLgogICAgZW5kCiAgICByZXR1cm4gc3VtCmVuZAoKIwojIEZ1bmN0aW9uIHRvIHJlYWQgYSBsaW5lIGNvbnRhaW5pbmcgYSBsaXN0IG9mIGludGVnZXJzIGFuZCByZXR1cm4KIyB0aGVtIGFzIGFuIGFycmF5IG9mIGludGVnZXJzLiAgSWYgdGhlIHN0cmluZyBjb252ZXJzaW9uIGZhaWxzLCBpdAojIHRocm93cyBUeXBlRXJyb3IuICBJZiB0aGUgaW5wdXQgbGluZSBpcyB0aGUgd29yZCAncXVpdCcsIHRoZW4gaXQKIyBjb252ZXJ0cyBpdCB0byBhbiBlbmQtb2YtZmlsZSBleGNlcHRpb24KZGVmIHJlYWRpbnRzKHByb21wdCkKICAgICMgUmVhZCBhIGxpbmUKICAgIHByaW50IHByb21wdAogICAgbGluZSA9IHJlYWRsaW5lLmNob21wCiAgICByYWlzZSBFT0ZFcnJvci5uZXcgaWYgbGluZSA9PSAncXVpdCcgIyBZb3UgY2FuIGFsc28gdXNlIGEgcmVhbCBFT0YuCiAgICAgICAgICAgIAogICAgIyBHbyB0aHJvdWdoIGVhY2ggaXRlbSBvbiB0aGUgbGluZSwgY29udmVydGluZyBlYWNoIG9uZSBhbmQgYWRkaW5nIGl0CiAgICAjIHRvIHJldHZhbC4KICAgIHJldHZhbCA9IFsgXQogICAgZm9yIHN0ciBpbiBsaW5lLnNwbGl0KC9ccysvKQogICAgICAgIGlmIHN0ciA9fiAvXlwtP1xkKyQvCiAgICAgICAgICAgIHJldHZhbC5wdXNoKHN0ci50b19pKQogICAgICAgIGVsc2UKICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yLm5ldwogICAgICAgIGVuZAogICAgZW5kCgogICAgcmV0dXJuIHJldHZhbAplbmQKCiMKIyBUYWtlIGEgY29lZmYgYW5kIGFuIGV4cG9uZW50IGFuZCByZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiwgaWdub3JpbmcKIyB0aGUgc2lnbiBvZiB0aGUgY29lZmZpY2llbnQuCmRlZiB0ZXJtX3RvX3N0cihjb2VmLCBleHApCiAgICByZXQgPSAiIgoKICAgICMgU2hvdyBjb2VmZiwgdW5sZXNzIGl0J3MgMSBvciBhdCB0aGUgcmlnaHQKICAgIGNvZWYgPSBjb2VmLmFicwogICAgcmV0ID0gY29lZi50b19zICAgICB1bmxlc3MgY29lZiA9PSAxICYmIGV4cCA+IDAKICAgIHJldCArPSAieCIgaWYgZXhwID4gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHggaWYgZXhwb25lbnQgbm90IDAKICAgIHJldCArPSAiXiIgKyBleHAudG9fcyBpZiBleHAgPiAxICAgICAgICAgICAgICAgICAgICAjIF5leHBvbmVudCwgaWYgPiAxLgoKICAgIHJldHVybiByZXQKZW5kCgojCiMgQ3JlYXRlIGEgc3RyaW5nIG9mIHRoZSBwb2x5bm9taWFsIGluIHNvcnQtb2YtcmVhZGFibGUgZm9ybS4KZGVmIHBvbHlzdHIocCkKICAgICMgR2V0IHRoZSBleHBvbmVudCBvZiBmaXJzdCBjb2VmZmljaWVudCwgcGx1cyAxLgogICAgZXhwID0gcC5sZW5ndGgKCiAgICAjIEFzc2lnbiBleHBvbmVudHMgdG8gZWFjaCB0ZXJtLCBtYWtpbmcgcGFpcnMgb2YgY29lZmYgYW5kIGV4cG9uZW50LAogICAgIyBUaGVuIGdldCByaWQgb2YgdGhlIHplcm8gdGVybXMuCiAgICBwID0gKHAubWFwIHsgfGN8IGV4cCAtPSAxOyBbIGMsIGV4cCBdIH0pLnNlbGVjdCB7IHxwfCBwWzBdICE9IDAgfQoKICAgICMgSWYgdGhlcmUncyBub3RoaW5nIGxlZnQsIGl0J3MgYSB6ZXJvCiAgICByZXR1cm4gIjAiIGlmIHAuZW1wdHk/CgogICAgIyAqKiogTm93IHAgaXMgYSBub24tZW1wdHkgbGlzdCBvZiBbIGNvZWYsIGV4cG9uZW50IF0gcGFpcnMuICoqKgoKICAgICMgQ29udmVydCB0aGUgZmlyc3QgdGVybSwgcHJlY2VkZWQgYnkgYSAiLSIgaWYgaXQncyBuZWdhdGl2ZS4KICAgIHJlc3VsdCA9IChpZiBwWzBdWzBdIDwgMCB0aGVuICItIiBlbHNlICIiIGVuZCkgKyB0ZXJtX3RvX3N0cigqcFswXSkKCiAgICAjIENvbnZlcnQgdGhlIHJlc3Qgb2YgdGhlIHRlcm1zLCBpbiBlYWNoIGNhc2UgYWRkaW5nIHRoZSBhcHByb3ByaWF0ZQogICAgIyArIG9yIC0gc2VwYXJhdGluZyB0aGVtLiAgCiAgICBmb3IgdGVybSBpbiBwWzEuLi5wLmxlbmd0aF0KICAgICAgICAjIEFkZCB0aGUgc2VwYXJhdG9yIHRoZW4gdGhlIHJlcC4gb2YgdGhlIHRlcm0uCiAgICAgICAgcmVzdWx0ICs9IChpZiB0ZXJtWzBdIDwgMCB0aGVuICIgLSAiIGVsc2UgIiArICIgZW5kKSArIAogICAgICAgICAgICAgICAgdGVybV90b19zdHIoKnRlcm0pCiAgICBlbmQKCiAgICByZXR1cm4gcmVzdWx0CmVuZAogICAgICAgIAojCiMgUnVuIHVudGlsIHNvbWUga2luZCBvZiBlbmRmaWxlLgpiZWdpbgogICAgIyBSZXBlYXQgdW50aWwgYW4gZXhjZXB0aW9uIG9yIHF1aXQgZ2V0cyB1cyBvdXQuCiAgICB3aGlsZSB0cnVlCiAgICAgICAgIyBSZWFkIGEgcG9seSB1bnRpbCBpdCB3b3Jrcy4gIEFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlCiAgICAgICAgIyBwcm9ncmFtLgogICAgICAgIHByaW50ICJcbiIKICAgICAgICBiZWdpbgogICAgICAgICAgICBwb2x5ID0gcmVhZGludHMoIkVudGVyIGEgcG9seW5vbWlhbCBjb2VmZmljaWVudHM6ICIpCiAgICAgICAgcmVzY3VlIFR5cGVFcnJvcgogICAgICAgICAgICBwcmludCAiVHJ5IGFnYWluLlxuIgogICAgICAgICAgICByZXRyeQogICAgICAgIGVuZAogICAgICAgIGJyZWFrIGlmIHBvbHkuZW1wdHk/CgogICAgICAgICMgUmVhZCBhbmQgZXZhbHVhdGUgeCB2YWx1ZXMgdW50aWwgdGhlIHVzZXIgdHlwZXMgYSBibGFuayBsaW5lLgogICAgICAgICMgQWdhaW4sIGFuIEVPRiB3aWxsIGV4Y2VwdCBvdXQgb2YgdGhlIHBnbS4KICAgICAgICB3aGlsZSB0cnVlCiAgICAgICAgICAgICMgUmVxdWVzdCBhbiBpbnRlZ2VyLgogICAgICAgICAgICBwcmludCAiRW50ZXIgeCB2YWx1ZSBvciBibGFuayBsaW5lOiAiCiAgICAgICAgICAgIHggPSByZWFkbGluZS5jaG9tcAogICAgICAgICAgICBicmVhayBpZiB4ID09ICcnCiAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yLm5ldyBpZiB4ID09ICdxdWl0JwoKICAgICAgICAgICAgIyBJZiBpdCBsb29rcyBiYWQsIGxldCdzIHRyeSBhZ2Fpbi4KICAgICAgICAgICAgaWYgeCAhfiAvXlwtP1xkKyQvCiAgICAgICAgICAgICAgICBwcmludCAiVGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBhbiBpbnRlZ2VyLiAgUGxlYXNlIHRyeSBhZ2Fpbi5cbiIKICAgICAgICAgICAgICAgIG5leHQKICAgICAgICAgICAgZW5kCgogICAgICAgICAgICAjIENvbnZlcnQgdG8gYW4gaW50ZWdlciBhbmQgcHJpbnQgdGhlIHJlc3VsdC4KICAgICAgICAgICAgeCA9IHgudG9faQogICAgICAgICAgICBwcmludCAicCh4KSA9ICIsIHBvbHlzdHIocG9seSksICJcbiIKICAgICAgICAgICAgcHJpbnQgInAoIiwgeCwgIikgPSAiLCBwb2x5dmFsKHgsIHBvbHkpLCAiXG4iCiAgICAgICAgZW5kCiAgICBlbmQKcmVzY3VlIEVPRkVycm9yCiAgICBwcmludCAiXG49PT0gRU9GID09PVxuIgpyZXNjdWUgSW50ZXJydXB0LCBTaWduYWxFeGNlcHRpb24KICAgIHByaW50ICJcbj09PSBJbnRlcnJ1cHRlZCA9PT1cbiIKZWxzZQogICAgcHJpbnQgIi0tLSBCeWUgLS0tXG4iCmVuZAo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogInRleHQveC1ydWJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1Ynk8L2NvZGU+LjwvcD4KCiAgICA8cD5EZXZlbG9wbWVudCBvZiB0aGUgQ29kZU1pcnJvciBSdWJ5IG1vZGUgd2FzIGtpbmRseSBzcG9uc29yZWQKICAgIGJ5IDxhIGhyZWY9Imh0dHA6Ly91YmFsby5jb20vIj5VYmFsbzwvYT4sIHdobyBob2xkCiAgICB0aGUgPGEgaHJlZj0iTElDRU5TRSI+bGljZW5zZTwvYT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChjKSAyMDExLCBVYmFsbywgSW5jLgpBbGwgcmlnaHRzIHJlc2VydmVkLgoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cm1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgogICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVWJhbG8sIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KClRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQpESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBVQkFMTywgSU5DIEJFIExJQUJMRSBGT1IgQU5ZCkRJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCihJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECk9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCihJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTClNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/ruby/ruby.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydWJ5IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICBmdW5jdGlvbiB3b3JkT2JqKHdvcmRzKSB7CiAgICB2YXIgbyA9IHt9OwogICAgZm9yICh2YXIgaSA9IDAsIGUgPSB3b3Jkcy5sZW5ndGg7IGkgPCBlOyArK2kpIG9bd29yZHNbaV1dID0gdHJ1ZTsKICAgIHJldHVybiBvOwogIH0KICB2YXIga2V5d29yZHMgPSB3b3JkT2JqKFsKICAgICJhbGlhcyIsICJhbmQiLCAiQkVHSU4iLCAiYmVnaW4iLCAiYnJlYWsiLCAiY2FzZSIsICJjbGFzcyIsICJkZWYiLCAiZGVmaW5lZD8iLCAiZG8iLCAiZWxzZSIsCiAgICAiZWxzaWYiLCAiRU5EIiwgImVuZCIsICJlbnN1cmUiLCAiZmFsc2UiLCAiZm9yIiwgImlmIiwgImluIiwgIm1vZHVsZSIsICJuZXh0IiwgIm5vdCIsICJvciIsCiAgICAicmVkbyIsICJyZXNjdWUiLCAicmV0cnkiLCAicmV0dXJuIiwgInNlbGYiLCAic3VwZXIiLCAidGhlbiIsICJ0cnVlIiwgInVuZGVmIiwgInVubGVzcyIsCiAgICAidW50aWwiLCAid2hlbiIsICJ3aGlsZSIsICJ5aWVsZCIsICJuaWwiLCAicmFpc2UiLCAidGhyb3ciLCAiY2F0Y2giLCAiZmFpbCIsICJsb29wIiwgImNhbGxjYyIsCiAgICAiY2FsbGVyIiwgImxhbWJkYSIsICJwcm9jIiwgInB1YmxpYyIsICJwcm90ZWN0ZWQiLCAicHJpdmF0ZSIsICJyZXF1aXJlIiwgImxvYWQiLAogICAgInJlcXVpcmVfcmVsYXRpdmUiLCAiZXh0ZW5kIiwgImF1dG9sb2FkIgogIF0pOwogIHZhciBpbmRlbnRXb3JkcyA9IHdvcmRPYmooWyJkZWYiLCAiY2xhc3MiLCAiY2FzZSIsICJmb3IiLCAid2hpbGUiLCAiZG8iLCAibW9kdWxlIiwgInRoZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYXRjaCIsICJsb29wIiwgInByb2MiLCAiYmVnaW4iXSk7CiAgdmFyIGRlZGVudFdvcmRzID0gd29yZE9iaihbImVuZCIsICJ1bnRpbCJdKTsKICB2YXIgbWF0Y2hpbmcgPSB7IlsiOiAiXSIsICJ7IjogIn0iLCAiKCI6ICIpIn07CiAgdmFyIGN1clB1bmM7CgogIGZ1bmN0aW9uIGNoYWluKG5ld3Rvaywgc3RyZWFtLCBzdGF0ZSkgewogICAgc3RhdGUudG9rZW5pemUucHVzaChuZXd0b2spOwogICAgcmV0dXJuIG5ld3RvayhzdHJlYW0sIHN0YXRlKTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICBjdXJQdW5jID0gbnVsbDsKICAgIGlmIChzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKCI9YmVnaW4iKSAmJiBzdHJlYW0uZW9sKCkpIHsKICAgICAgc3RhdGUudG9rZW5pemUucHVzaChyZWFkQmxvY2tDb21tZW50KTsKICAgICAgcmV0dXJuICJjb21tZW50IjsKICAgIH0KICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICJgIiB8fCBjaCA9PSAiJyIgfHwgY2ggPT0gJyInIHx8CiAgICAgICAgKGNoID09ICIvIiAmJiAhc3RyZWFtLmVvbCgpICYmIHN0cmVhbS5wZWVrKCkgIT0gIiAiKSkgewogICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChjaCwgInN0cmluZyIsIGNoID09ICciJyB8fCBjaCA9PSAiYCIpLCBzdHJlYW0sIHN0YXRlKTsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIiUiKSB7CiAgICAgIHZhciBzdHlsZSwgZW1iZWQgPSBmYWxzZTsKICAgICAgaWYgKHN0cmVhbS5lYXQoInMiKSkgc3R5bGUgPSAiYXRvbSI7CiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoL1tXUV0vKSkgeyBzdHlsZSA9ICJzdHJpbmciOyBlbWJlZCA9IHRydWU7IH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgvW3d4cXJdLykpIHN0eWxlID0gInN0cmluZyI7CiAgICAgIHZhciBkZWxpbSA9IHN0cmVhbS5lYXQoL1teXHdcc10vKTsKICAgICAgaWYgKCFkZWxpbSkgcmV0dXJuICJvcGVyYXRvciI7CiAgICAgIGlmIChtYXRjaGluZy5wcm9wZXJ0eUlzRW51bWVyYWJsZShkZWxpbSkpIGRlbGltID0gbWF0Y2hpbmdbZGVsaW1dOwogICAgICByZXR1cm4gY2hhaW4ocmVhZFF1b3RlZChkZWxpbSwgc3R5bGUsIGVtYmVkLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7CiAgICB9IGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9IGVsc2UgaWYgKGNoID09ICI8IiAmJiBzdHJlYW0uZWF0KCI8IikpIHsKICAgICAgc3RyZWFtLmVhdCgiLSIpOwogICAgICBzdHJlYW0uZWF0KC9bXCdcIlxgXS8pOwogICAgICB2YXIgbWF0Y2ggPSBzdHJlYW0ubWF0Y2goL15cdysvKTsKICAgICAgc3RyZWFtLmVhdCgvW1wnXCJcYF0vKTsKICAgICAgaWYgKG1hdGNoKSByZXR1cm4gY2hhaW4ocmVhZEhlcmVEb2MobWF0Y2hbMF0pLCBzdHJlYW0sIHN0YXRlKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGNoID09ICIwIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgieCIpKSBzdHJlYW0uZWF0V2hpbGUoL1tcZGEtZkEtRl0vKTsKICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiYiIpKSBzdHJlYW0uZWF0V2hpbGUoL1swMV0vKTsKICAgICAgZWxzZSBzdHJlYW0uZWF0V2hpbGUoL1swLTddLyk7CiAgICAgIHJldHVybiAibnVtYmVyIjsKICAgIH0gZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0ubWF0Y2goL15bXGRfXSooPzpcLltcZF9dKyk/KD86W2VFXVsrXC1dP1tcZF9dKyk/Lyk7CiAgICAgIHJldHVybiAibnVtYmVyIjsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIj8iKSB7CiAgICAgIHdoaWxlIChzdHJlYW0ubWF0Y2goL15cXFtDTV0tLykpIHt9CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSBzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CiAgICAgIGVsc2Ugc3RyZWFtLm5leHQoKTsKICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgfSBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiciKSkgcmV0dXJuIGNoYWluKHJlYWRRdW90ZWQoIiciLCAiYXRvbSIsIGZhbHNlKSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmIChzdHJlYW0uZWF0KCciJykpIHJldHVybiBjaGFpbihyZWFkUXVvdGVkKCciJywgImF0b20iLCB0cnVlKSwgc3RyZWFtLCBzdGF0ZSk7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIHJldHVybiAiYXRvbSI7CiAgICB9IGVsc2UgaWYgKGNoID09ICJAIikgewogICAgICBzdHJlYW0uZWF0KCJAIik7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9IGVsc2UgaWYgKGNoID09ICIkIikgewogICAgICBzdHJlYW0ubmV4dCgpOwogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1w/XS8pOwogICAgICByZXR1cm4gInZhcmlhYmxlLTMiOwogICAgfSBlbHNlIGlmICgvXHcvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XD9dLyk7CiAgICAgIGlmIChzdHJlYW0uZWF0KCI6IikpIHJldHVybiAiYXRvbSI7CiAgICAgIHJldHVybiAiaWRlbnQiOwogICAgfSBlbHNlIGlmIChjaCA9PSAifCIgJiYgKHN0YXRlLnZhckxpc3QgfHwgc3RhdGUubGFzdFRvayA9PSAieyIgfHwgc3RhdGUubGFzdFRvayA9PSAiZG8iKSkgewogICAgICBjdXJQdW5jID0gInwiOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoL1tcKFwpXFtcXXt9XFw7XS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoY2ggPT0gIi0iICYmIHN0cmVhbS5lYXQoIj4iKSkgewogICAgICByZXR1cm4gImFycm93IjsKICAgIH0gZWxzZSBpZiAoL1s9K1wtXC8qOlwuXiU8Pn58XS8udGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bPStcLVwvKjpcLl4lPD5+fF0vKTsKICAgICAgcmV0dXJuICJvcGVyYXRvciI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZVVudGlsQnJhY2UoKSB7CiAgICB2YXIgZGVwdGggPSAxOwogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5wZWVrKCkgPT0gIn0iKSB7CiAgICAgICAgZGVwdGgtLTsKICAgICAgICBpZiAoZGVwdGggPT0gMCkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUucG9wKCk7CiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChzdHJlYW0ucGVlaygpID09ICJ7IikgewogICAgICAgIGRlcHRoKys7CiAgICAgIH0KICAgICAgcmV0dXJuIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHJlYWRRdW90ZWQocXVvdGUsIHN0eWxlLCBlbWJlZCwgdW5lc2NhcGVkKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBjaDsKICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgKHVuZXNjYXBlZCB8fCAhZXNjYXBlZCkpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChlbWJlZCAmJiBjaCA9PSAiIyIgJiYgIWVzY2FwZWQgJiYgc3RyZWFtLmVhdCgieyIpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZS5wdXNoKHRva2VuQmFzZVVudGlsQnJhY2UoYXJndW1lbnRzLmNhbGxlZSkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBjaCA9PSAiXFwiOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHJlYWRIZXJlRG9jKHBocmFzZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5tYXRjaChwaHJhc2UpKSBzdGF0ZS50b2tlbml6ZS5wb3AoKTsKICAgICAgZWxzZSBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHJlYWRCbG9ja0NvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5zb2woKSAmJiBzdHJlYW0ubWF0Y2goIj1lbmQiKSAmJiBzdHJlYW0uZW9sKCkpCiAgICAgIHN0YXRlLnRva2VuaXplLnBvcCgpOwogICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgcmV0dXJuICJjb21tZW50IjsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogW3Rva2VuQmFzZV0sCiAgICAgICAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgICAgICAgY29udGV4dDoge3R5cGU6ICJ0b3AiLCBpbmRlbnRlZDogLWNvbmZpZy5pbmRlbnRVbml0fSwKICAgICAgICAgICAgICBjb250aW51ZWRMaW5lOiBmYWxzZSwKICAgICAgICAgICAgICBsYXN0VG9rOiBudWxsLAogICAgICAgICAgICAgIHZhckxpc3Q6IGZhbHNlfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemVbc3RhdGUudG9rZW5pemUubGVuZ3RoLTFdKHN0cmVhbSwgc3RhdGUpLCBrd3R5cGU7CiAgICAgIGlmIChzdHlsZSA9PSAiaWRlbnQiKSB7CiAgICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgIHN0eWxlID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkgPyAia2V5d29yZCIKICAgICAgICAgIDogL15bQS1aXS8udGVzdCh3b3JkKSA/ICJ0YWciCiAgICAgICAgICA6IChzdGF0ZS5sYXN0VG9rID09ICJkZWYiIHx8IHN0YXRlLmxhc3RUb2sgPT0gImNsYXNzIiB8fCBzdGF0ZS52YXJMaXN0KSA/ICJkZWYiCiAgICAgICAgICA6ICJ2YXJpYWJsZSI7CiAgICAgICAgaWYgKGluZGVudFdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKSBrd3R5cGUgPSAiaW5kZW50IjsKICAgICAgICBlbHNlIGlmIChkZWRlbnRXb3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSkga3d0eXBlID0gImRlZGVudCI7CiAgICAgICAgZWxzZSBpZiAoKHdvcmQgPT0gImlmIiB8fCB3b3JkID09ICJ1bmxlc3MiKSAmJiBzdHJlYW0uY29sdW1uKCkgPT0gc3RyZWFtLmluZGVudGF0aW9uKCkpCiAgICAgICAgICBrd3R5cGUgPSAiaW5kZW50IjsKICAgICAgfQogICAgICBpZiAoY3VyUHVuYyB8fCAoc3R5bGUgJiYgc3R5bGUgIT0gImNvbW1lbnQiKSkgc3RhdGUubGFzdFRvayA9IHdvcmQgfHwgY3VyUHVuYyB8fCBzdHlsZTsKICAgICAgaWYgKGN1clB1bmMgPT0gInwiKSBzdGF0ZS52YXJMaXN0ID0gIXN0YXRlLnZhckxpc3Q7CgogICAgICBpZiAoa3d0eXBlID09ICJpbmRlbnQiIHx8IC9bXChcW1x7XS8udGVzdChjdXJQdW5jKSkKICAgICAgICBzdGF0ZS5jb250ZXh0ID0ge3ByZXY6IHN0YXRlLmNvbnRleHQsIHR5cGU6IGN1clB1bmMgfHwgc3R5bGUsIGluZGVudGVkOiBzdGF0ZS5pbmRlbnRlZH07CiAgICAgIGVsc2UgaWYgKChrd3R5cGUgPT0gImRlZGVudCIgfHwgL1tcKVxdXH1dLy50ZXN0KGN1clB1bmMpKSAmJiBzdGF0ZS5jb250ZXh0LnByZXYpCiAgICAgICAgc3RhdGUuY29udGV4dCA9IHN0YXRlLmNvbnRleHQucHJldjsKCiAgICAgIGlmIChzdHJlYW0uZW9sKCkpCiAgICAgICAgc3RhdGUuY29udGludWVkTGluZSA9IChjdXJQdW5jID09ICJcXCIgfHwgc3R5bGUgPT0gIm9wZXJhdG9yIik7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZVtzdGF0ZS50b2tlbml6ZS5sZW5ndGgtMV0gIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApOwogICAgICB2YXIgY3QgPSBzdGF0ZS5jb250ZXh0OwogICAgICB2YXIgY2xvc2luZyA9IGN0LnR5cGUgPT0gbWF0Y2hpbmdbZmlyc3RDaGFyXSB8fAogICAgICAgIGN0LnR5cGUgPT0gImtleXdvcmQiICYmIC9eKD86ZW5kfHVudGlsfGVsc2V8ZWxzaWZ8d2hlbnxyZXNjdWUpXGIvLnRlc3QodGV4dEFmdGVyKTsKICAgICAgcmV0dXJuIGN0LmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogY29uZmlnLmluZGVudFVuaXQpICsKICAgICAgICAoc3RhdGUuY29udGludWVkTGluZSA/IGNvbmZpZy5pbmRlbnRVbml0IDogMCk7CiAgICB9LAogICAgIGVsZWN0cmljQ2hhcnM6ICJ9ZGUiIC8vIGVuRCBhbmQgcmVzY3VFCgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnVieSIsICJydWJ5Iik7Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InJ1c3QuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFJ1c3QgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZS4KCnR5cGUgZm9vPFQ+ID0gaW50OwplbnVtIGJhciB7CiAgICBzb21lKGludCwgZm9vPGZsb2F0PiksCiAgICBub25lCn0KCmZuIGNoZWNrX2NyYXRlKHg6IGludCkgewogICAgbGV0IHYgPSAxMDsKICAgIGFsdCBmb28gewogICAgICAxIHRvIDMgewogICAgICAgIHByaW50X2ZvbygpOwogICAgICAgIGlmIHggewogICAgICAgICAgICBibGFoKCkgKyAxMDsKICAgICAgICB9CiAgICAgIH0KICAgICAgKHgsIHkpIHsgImJ5ZSIgfQogICAgICBfIHsgImhpIiB9CiAgICB9Cn0KPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgdGFiTW9kZTogImluZGVudCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJ1c3RzcmM8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rust/rust.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJydXN0IiwgZnVuY3Rpb24oKSB7CiAgdmFyIGluZGVudFVuaXQgPSA0LCBhbHRJbmRlbnRVbml0ID0gMjsKICB2YXIgdmFsS2V5d29yZHMgPSB7CiAgICAiaWYiOiAiaWYtc3R5bGUiLCAid2hpbGUiOiAiaWYtc3R5bGUiLCAiZWxzZSI6ICJlbHNlLXN0eWxlIiwKICAgICJkbyI6ICJlbHNlLXN0eWxlIiwgInJldCI6ICJlbHNlLXN0eWxlIiwgImZhaWwiOiAiZWxzZS1zdHlsZSIsCiAgICAiYnJlYWsiOiAiYXRvbSIsICJjb250IjogImF0b20iLCAiY29uc3QiOiAibGV0IiwgInJlc291cmNlIjogImZuIiwKICAgICJsZXQiOiAibGV0IiwgImZuIjogImZuIiwgImZvciI6ICJmb3IiLCAiYWx0IjogImFsdCIsICJpZmFjZSI6ICJpZmFjZSIsCiAgICAiaW1wbCI6ICJpbXBsIiwgInR5cGUiOiAidHlwZSIsICJlbnVtIjogImVudW0iLCAibW9kIjogIm1vZCIsCiAgICAiYXMiOiAib3AiLCAidHJ1ZSI6ICJhdG9tIiwgImZhbHNlIjogImF0b20iLCAiYXNzZXJ0IjogIm9wIiwgImNoZWNrIjogIm9wIiwKICAgICJjbGFpbSI6ICJvcCIsICJuYXRpdmUiOiAiaWdub3JlIiwgInVuc2FmZSI6ICJpZ25vcmUiLCAiaW1wb3J0IjogImVsc2Utc3R5bGUiLAogICAgImV4cG9ydCI6ICJlbHNlLXN0eWxlIiwgImNvcHkiOiAib3AiLCAibG9nIjogIm9wIiwgImxvZ19lcnIiOiAib3AiLAogICAgInVzZSI6ICJvcCIsICJiaW5kIjogIm9wIiwgInNlbGYiOiAiYXRvbSIKICB9OwogIHZhciB0eXBlS2V5d29yZHMgPSBmdW5jdGlvbigpIHsKICAgIHZhciBrZXl3b3JkcyA9IHsiZm4iOiAiZm4iLCAiYmxvY2siOiAiZm4iLCAib2JqIjogIm9iaiJ9OwogICAgdmFyIGF0b21zID0gImJvb2wgdWludCBpbnQgaTggaTE2IGkzMiBpNjQgdTggdTE2IHUzMiB1NjQgZmxvYXQgZjMyIGY2NCBzdHIgY2hhciIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwLCBlID0gYXRvbXMubGVuZ3RoOyBpIDwgZTsgKytpKSBrZXl3b3Jkc1thdG9tc1tpXV0gPSAiYXRvbSI7CiAgICByZXR1cm4ga2V5d29yZHM7CiAgfSgpOwogIHZhciBvcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fFwuQF0vOwoKICAvLyBUb2tlbml6ZXIKCiAgLy8gVXNlZCBhcyBzY3JhdGNoIHZhcmlhYmxlIHRvIGNvbW11bmljYXRlIG11bHRpcGxlIHZhbHVlcyB3aXRob3V0CiAgLy8gY29uc2luZyB1cCB0b25zIG9mIG9iamVjdHMuCiAgdmFyIHRjYXQsIGNvbnRlbnQ7CiAgZnVuY3Rpb24gcih0Yywgc3R5bGUpIHsKICAgIHRjYXQgPSB0YzsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJykgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU3RyaW5nOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBpZiAoY2ggPT0gIiciKSB7CiAgICAgIHRjYXQgPSAiYXRvbSI7CiAgICAgIGlmIChzdHJlYW0uZWF0KCJcXCIpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5za2lwVG8oIiciKSkgeyBzdHJlYW0ubmV4dCgpOyByZXR1cm4gInN0cmluZyI7IH0KICAgICAgICBlbHNlIHsgcmV0dXJuICJlcnJvciI7IH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgIHJldHVybiBzdHJlYW0uZWF0KCInIikgPyAic3RyaW5nIiA6ICJlcnJvciI7CiAgICAgIH0KICAgIH0KICAgIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIi8iKSkgeyBzdHJlYW0uc2tpcFRvRW5kKCk7IHJldHVybiAiY29tbWVudCI7IH0KICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KDEpOwogICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgfQogICAgaWYgKGNoID09ICIjIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiWyIpKSB7IHRjYXQgPSAib3Blbi1hdHRyIjsgcmV0dXJuIG51bGw7IH0KICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwogICAgICByZXR1cm4gcigibWFjcm8iLCAibWV0YSIpOwogICAgfQogICAgaWYgKGNoID09ICI6IiAmJiBzdHJlYW0ubWF0Y2goIjo8IikpIHsKICAgICAgcmV0dXJuIHIoIm9wIiwgbnVsbCk7CiAgICB9CiAgICBpZiAoY2gubWF0Y2goL1xkLykgfHwgKGNoID09ICIuIiAmJiBzdHJlYW0uZWF0KC9cZC8pKSkgewogICAgICB2YXIgZmxwID0gZmFsc2U7CiAgICAgIGlmICghc3RyZWFtLm1hdGNoKC9eeFtcZGEtZl0rL2kpICYmICFzdHJlYW0ubWF0Y2goL15iWzAxXSsvKSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgiLiIpKSB7IGZscCA9IHRydWU7IHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15lWytcLV0/XGQrL2kpKSB7IGZscCA9IHRydWU7IH0KICAgICAgfQogICAgICBpZiAoZmxwKSBzdHJlYW0ubWF0Y2goL15mKD86MzJ8NjQpLyk7CiAgICAgIGVsc2Ugc3RyZWFtLm1hdGNoKC9eW3VpXSg/Ojh8MTZ8MzJ8NjQpLyk7CiAgICAgIHJldHVybiByKCJhdG9tIiwgIm51bWJlciIpOwogICAgfQogICAgaWYgKGNoLm1hdGNoKC9bKClcW1xde306OyxdLykpIHJldHVybiByKGNoLCBudWxsKTsKICAgIGlmIChjaCA9PSAiLSIgJiYgc3RyZWFtLmVhdCgiPiIpKSByZXR1cm4gcigiLT4iLCBudWxsKTsKICAgIGlmIChjaC5tYXRjaChvcGVyYXRvckNoYXIpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcigib3AiLCBudWxsKTsKICAgIH0KICAgIHN0cmVhbS5lYXRXaGlsZSgvXHcvKTsKICAgIGNvbnRlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgaWYgKHN0cmVhbS5tYXRjaCgvXjo6XHcvKSkgewogICAgICBzdHJlYW0uYmFja1VwKDEpOwogICAgICByZXR1cm4gcigicHJlZml4IiwgInZhcmlhYmxlLTIiKTsKICAgIH0KICAgIGlmIChzdGF0ZS5rZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjb250ZW50KSkKICAgICAgcmV0dXJuIHIoc3RhdGUua2V5d29yZHNbY29udGVudF0sIGNvbnRlbnQubWF0Y2goL3RydWV8ZmFsc2UvKSA/ICJhdG9tIiA6ICJrZXl3b3JkIik7CiAgICByZXR1cm4gcigibmFtZSIsICJ2YXJpYWJsZSIpOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoLCBlc2NhcGVkID0gZmFsc2U7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAnIicgJiYgIWVzY2FwZWQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICByZXR1cm4gcigiYXRvbSIsICJzdHJpbmciKTsKICAgICAgfQogICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgIH0KICAgIC8vIEhhY2sgdG8gbm90IGNvbmZ1c2UgdGhlIHBhcnNlciB3aGVuIGEgc3RyaW5nIGlzIHNwbGl0IGluCiAgICAvLyBwaWVjZXMuCiAgICByZXR1cm4gcigib3AiLCAic3RyaW5nIik7CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoZGVwdGgpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBsYXN0Q2ggPSBudWxsLCBjaDsKICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgIGlmIChjaCA9PSAiLyIgJiYgbGFzdENoID09ICIqIikgewogICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkNvbW1lbnQoZGVwdGggLSAxKTsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoY2ggPT0gIioiICYmIGxhc3RDaCA9PSAiLyIpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5Db21tZW50KGRlcHRoICsgMSk7CiAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIGxhc3RDaCA9IGNoOwogICAgICB9CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9OwogIH0KCiAgLy8gUGFyc2VyCgogIHZhciBjeCA9IHtzdGF0ZTogbnVsbCwgc3RyZWFtOiBudWxsLCBtYXJrZWQ6IG51bGwsIGNjOiBudWxsfTsKICBmdW5jdGlvbiBwYXNzKCkgewogICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0pOwogIH0KICBmdW5jdGlvbiBjb250KCkgewogICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKICAgIHZhciByZXN1bHQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICAgIHN0YXRlLmxleGljYWwgPSB7aW5kZW50ZWQ6IHN0YXRlLmluZGVudGVkLCBjb2x1bW46IGN4LnN0cmVhbS5jb2x1bW4oKSwKICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLCBwcmV2OiBzdGF0ZS5sZXhpY2FsLCBpbmZvOiBpbmZvfTsKICAgIH07CiAgICByZXN1bHQubGV4ID0gdHJ1ZTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIGZ1bmN0aW9uIHBvcGxleCgpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmxleGljYWwucHJldikgewogICAgICBpZiAoc3RhdGUubGV4aWNhbC50eXBlID09ICIpIikKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0YXRlLmxleGljYWwuaW5kZW50ZWQ7CiAgICAgIHN0YXRlLmxleGljYWwgPSBzdGF0ZS5sZXhpY2FsLnByZXY7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHR5cGVjeCgpIHsgY3guc3RhdGUua2V5d29yZHMgPSB0eXBlS2V5d29yZHM7IH0KICBmdW5jdGlvbiB2YWxjeCgpIHsgY3guc3RhdGUua2V5d29yZHMgPSB2YWxLZXl3b3JkczsgfQogIHBvcGxleC5sZXggPSB0eXBlY3gubGV4ID0gdmFsY3gubGV4ID0gdHJ1ZTsKCiAgZnVuY3Rpb24gY29tbWFzZXAoY29tYiwgZW5kKSB7CiAgICBmdW5jdGlvbiBtb3JlKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udChjb21iLCBtb3JlKTsKICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChtb3JlKTsKICAgIH0KICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IGVuZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgcmV0dXJuIHBhc3MoY29tYiwgbW9yZSk7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gc3RhdF9vZihjb21iLCB0YWcpIHsKICAgIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiLCB0YWcpLCBjb21iLCBwb3BsZXgsIGJsb2NrKTsKICB9CiAgZnVuY3Rpb24gYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gImxldCIpIHJldHVybiBzdGF0X29mKGxldGRlZjEsICJsZXQiKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBzdGF0X29mKGZuZGVmKTsKICAgIGlmICh0eXBlID09ICJ0eXBlIikgcmV0dXJuIGNvbnQocHVzaGxleCgic3RhdCIpLCB0eWRlZiwgZW5kc3RhdGVtZW50LCBwb3BsZXgsIGJsb2NrKTsKICAgIGlmICh0eXBlID09ICJlbnVtIikgcmV0dXJuIHN0YXRfb2YoZW51bWRlZik7CiAgICBpZiAodHlwZSA9PSAibW9kIikgcmV0dXJuIHN0YXRfb2YobW9kKTsKICAgIGlmICh0eXBlID09ICJpZmFjZSIpIHJldHVybiBzdGF0X29mKGlmYWNlKTsKICAgIGlmICh0eXBlID09ICJpbXBsIikgcmV0dXJuIHN0YXRfb2YoaW1wbCk7CiAgICBpZiAodHlwZSA9PSAib3Blbi1hdHRyIikgcmV0dXJuIGNvbnQocHVzaGxleCgiXSIpLCBjb21tYXNlcChleHByZXNzaW9uLCAiXSIpLCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImlnbm9yZSIgfHwgdHlwZS5tYXRjaCgvW1xdXCk7LF0vKSkgcmV0dXJuIGNvbnQoYmxvY2spOwogICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBwb3BsZXgsIGVuZHN0YXRlbWVudCwgYmxvY2spOwogIH0KICBmdW5jdGlvbiBlbmRzdGF0ZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIjsiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAiYXRvbSIgfHwgdHlwZSA9PSAibmFtZSIpIHJldHVybiBjb250KG1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGV4cHJicmFjZSwgcG9wbGV4KTsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKF0vKSkgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgaWYgKHR5cGUgPT0gImlmLXN0eWxlIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiZWxzZS1zdHlsZSIgfHwgdHlwZSA9PSAib3AiKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwYXR0ZXJuLCBtYXliZXR5cGUsIGlub3AsIGV4cHJlc3Npb24sIGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gImFsdCIpIHJldHVybiBjb250KGV4cHJlc3Npb24sIGFsdGJvZHkpOwogICAgaWYgKHR5cGUgPT0gImZuIikgcmV0dXJuIGNvbnQoZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIm1hY3JvIikgcmV0dXJuIGNvbnQobWFjcm8pOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KG1heWJlcHJvcCk7CiAgICBpZiAoY29udGVudCA9PSAiOjo8Iil7cmV0dXJuIGNvbnQodHlwYXJhbXMsIG1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJvcCIgfHwgY29udGVudCA9PSAiOiIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIigiIHx8IHR5cGUgPT0gIlsiKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1heWJlcHJvcCh0eXBlKSB7CiAgICBpZiAoY29udGVudC5tYXRjaCgvXlx3KyQvKSkge2N4Lm1hcmtlZCA9ICJ2YXJpYWJsZSI7IHJldHVybiBjb250KG1heWJlb3ApO30KICAgIHJldHVybiBwYXNzKGV4cHJlc3Npb24pOwogIH0KICBmdW5jdGlvbiBleHByYnJhY2UodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm9wIikgewogICAgICBpZiAoY29udGVudCA9PSAifCIpIHJldHVybiBjb250KGJsb2NrdmFycywgcG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgICAgaWYgKGNvbnRlbnQgPT0gInx8IikgcmV0dXJuIGNvbnQocG9wbGV4LCBwdXNobGV4KCJ9IiwgImJsb2NrIiksIGJsb2NrKTsKICAgIH0KICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCAoY29udGVudC5tYXRjaCgvXlx3KyQvKSAmJiBjeC5zdHJlYW0ucGVlaygpID09ICI6IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhY3guc3RyZWFtLm1hdGNoKCI6OiIsIGZhbHNlKSkpCiAgICAgIHJldHVybiBwYXNzKHJlY29yZF9vZihleHByZXNzaW9uKSk7CiAgICByZXR1cm4gcGFzcyhibG9jayk7CiAgfQogIGZ1bmN0aW9uIHJlY29yZF9vZihjb21iKSB7CiAgICBmdW5jdGlvbiBybyh0eXBlKSB7CiAgICAgIGlmIChjb250ZW50ID09ICJtdXRhYmxlIiB8fCBjb250ZW50ID09ICJ3aXRoIikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQocm8pO30KICAgICAgaWYgKGNvbnRlbnQubWF0Y2goL15cdyokLykpIHtjeC5tYXJrZWQgPSAidmFyaWFibGUiOyByZXR1cm4gY29udChybyk7fQogICAgICBpZiAodHlwZSA9PSAiOiIpIHJldHVybiBjb250KGNvbWIsIHJvKTsKICAgICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChybyk7CiAgICB9CiAgICByZXR1cm4gcm87CiAgfQogIGZ1bmN0aW9uIGJsb2NrdmFycyh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTt9CiAgICBpZiAodHlwZSA9PSAib3AiICYmIGNvbnRlbnQgPT0gInwiKSByZXR1cm4gY29udCgpOwogICAgcmV0dXJuIGNvbnQoYmxvY2t2YXJzKTsKICB9CgogIGZ1bmN0aW9uIGxldGRlZjEodHlwZSkgewogICAgaWYgKHR5cGUubWF0Y2goL1tcXVwpXH07XS8pKSByZXR1cm4gY29udCgpOwogICAgaWYgKGNvbnRlbnQgPT0gIj0iKSByZXR1cm4gY29udChleHByZXNzaW9uLCBsZXRkZWYyKTsKICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQobGV0ZGVmMSk7CiAgICByZXR1cm4gcGFzcyhwYXR0ZXJuLCBtYXliZXR5cGUsIGxldGRlZjEpOwogIH0KICBmdW5jdGlvbiBsZXRkZWYyKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKVx9OyxdLykpIHJldHVybiBwYXNzKGxldGRlZjEpOwogICAgZWxzZSByZXR1cm4gcGFzcyhleHByZXNzaW9uLCBsZXRkZWYyKTsKICB9CiAgZnVuY3Rpb24gbWF5YmV0eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gaW5vcCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIgJiYgY29udGVudCA9PSAiaW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udCgpO30KICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGZuZGVmKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICJAIiB8fCBjb250ZW50ID09ICJ+Iikge2N4Lm1hcmtlZCA9ICJrZXl3b3JkIjsgcmV0dXJuIGNvbnQoZm5kZWYpO30KICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChmbmRlZik7fQogICAgaWYgKGNvbnRlbnQgPT0gIjwiKSByZXR1cm4gY29udCh0eXBhcmFtcywgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gcGFzcyhleHByZXNzaW9uKTsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBjb21tYXNlcChhcmdkZWYsICIpIiksIHBvcGxleCwgZm5kZWYpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gsIGZuZGVmKTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKICAgIHJldHVybiBjb250KGZuZGVmKTsKICB9CiAgZnVuY3Rpb24gdHlkZWYodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KHR5ZGVmKTt9CiAgICBpZiAoY29udGVudCA9PSAiPCIpIHJldHVybiBjb250KHR5cGFyYW1zLCB0eWRlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4KTsKICAgIHJldHVybiBjb250KHR5ZGVmKTsKICB9CiAgZnVuY3Rpb24gZW51bWRlZih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQoZW51bWRlZik7fQogICAgaWYgKGNvbnRlbnQgPT0gIjwiKSByZXR1cm4gY29udCh0eXBhcmFtcywgZW51bWRlZik7CiAgICBpZiAoY29udGVudCA9PSAiPSIpIHJldHVybiBjb250KHR5cGVjeCwgcnR5cGUsIHZhbGN4LCBlbmRzdGF0ZW1lbnQpOwogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIHR5cGVjeCwgZW51bWJsb2NrLCB2YWxjeCwgcG9wbGV4KTsKICAgIHJldHVybiBjb250KGVudW1kZWYpOwogIH0KICBmdW5jdGlvbiBlbnVtYmxvY2sodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGNvbW1hc2VwKHJ0eXBlLCAiKSIpLCBwb3BsZXgsIGVudW1ibG9jayk7CiAgICBpZiAoY29udGVudC5tYXRjaCgvXlx3KyQvKSkgY3gubWFya2VkID0gImRlZiI7CiAgICByZXR1cm4gY29udChlbnVtYmxvY2spOwogIH0KICBmdW5jdGlvbiBtb2QodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KG1vZCk7fQogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiksIGJsb2NrLCBwb3BsZXgpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gaWZhY2UodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KGlmYWNlKTt9CiAgICBpZiAoY29udGVudCA9PSAiPCIpIHJldHVybiBjb250KHR5cGFyYW1zLCBpZmFjZSk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoIn0iKSwgYmxvY2ssIHBvcGxleCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KICBmdW5jdGlvbiBpbXBsKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMsIGltcGwpOwogICAgaWYgKGNvbnRlbnQgPT0gIm9mIiB8fCBjb250ZW50ID09ICJmb3IiKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChydHlwZSwgaW1wbCk7fQogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gImRlZiI7IHJldHVybiBjb250KGltcGwpO30KICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIHR5cGFyYW1zKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI+IikgcmV0dXJuIGNvbnQoKTsKICAgIGlmIChjb250ZW50ID09ICIsIikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgaWYgKGNvbnRlbnQgPT0gIjoiKSByZXR1cm4gY29udChydHlwZSwgdHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MocnR5cGUsIHR5cGFyYW1zKTsKICB9CiAgZnVuY3Rpb24gYXJnZGVmKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJuYW1lIikge2N4Lm1hcmtlZCA9ICJkZWYiOyByZXR1cm4gY29udChhcmdkZWYpO30KICAgIGlmICh0eXBlID09ICI6IikgcmV0dXJuIGNvbnQodHlwZWN4LCBydHlwZSwgdmFsY3gpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcnR5cGUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm5hbWUiKSB7Y3gubWFya2VkID0gInZhcmlhYmxlLTMiOyByZXR1cm4gY29udChydHlwZW1heWJlcGFyYW0pOyB9CiAgICBpZiAoY29udGVudCA9PSAibXV0YWJsZSIpIHtjeC5tYXJrZWQgPSAia2V5d29yZCI7IHJldHVybiBjb250KHJ0eXBlKTt9CiAgICBpZiAodHlwZSA9PSAiYXRvbSIpIHJldHVybiBjb250KHJ0eXBlbWF5YmVwYXJhbSk7CiAgICBpZiAodHlwZSA9PSAib3AiIHx8IHR5cGUgPT0gIm9iaiIpIHJldHVybiBjb250KHJ0eXBlKTsKICAgIGlmICh0eXBlID09ICJmbiIpIHJldHVybiBjb250KGZudHlwZSk7CiAgICBpZiAodHlwZSA9PSAieyIpIHJldHVybiBjb250KHB1c2hsZXgoInsiKSwgcmVjb3JkX29mKHJ0eXBlKSwgcG9wbGV4KTsKICAgIHJldHVybiBtYXRjaEJyYWNrZXRzKHR5cGUsIHJ0eXBlKTsKICB9CiAgZnVuY3Rpb24gcnR5cGVtYXliZXBhcmFtKHR5cGUpIHsKICAgIGlmIChjb250ZW50ID09ICI8IikgcmV0dXJuIGNvbnQodHlwYXJhbXMpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gZm50eXBlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKCIpLCBjb21tYXNlcChydHlwZSwgIikiKSwgcG9wbGV4LCBmbnR5cGUpOwogICAgaWYgKHR5cGUgPT0gIi0+IikgcmV0dXJuIGNvbnQocnR5cGUpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gcGF0dGVybih0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAibmFtZSIpIHtjeC5tYXJrZWQgPSAiZGVmIjsgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApO30KICAgIGlmICh0eXBlID09ICJhdG9tIikgcmV0dXJuIGNvbnQocGF0dGVybm1heWJlb3ApOwogICAgaWYgKHR5cGUgPT0gIm9wIikgcmV0dXJuIGNvbnQocGF0dGVybik7CiAgICBpZiAodHlwZS5tYXRjaCgvW1xdXClcfTssXS8pKSByZXR1cm4gcGFzcygpOwogICAgcmV0dXJuIG1hdGNoQnJhY2tldHModHlwZSwgcGF0dGVybik7CiAgfQogIGZ1bmN0aW9uIHBhdHRlcm5tYXliZW9wKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJvcCIgJiYgY29udGVudCA9PSAiLiIpIHJldHVybiBjb250KCk7CiAgICBpZiAoY29udGVudCA9PSAidG8iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChwYXR0ZXJuKTt9CiAgICBlbHNlIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIGFsdGJvZHkodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInsiKSByZXR1cm4gY29udChwdXNobGV4KCJ9IiwgImFsdCIpLCBhbHRibG9jazEsIHBvcGxleCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KICBmdW5jdGlvbiBhbHRibG9jazEodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIn0iKSByZXR1cm4gY29udCgpOwogICAgaWYgKHR5cGUgPT0gInwiKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgaWYgKGNvbnRlbnQgPT0gIndoZW4iKSB7Y3gubWFya2VkID0gImtleXdvcmQiOyByZXR1cm4gY29udChleHByZXNzaW9uLCBhbHRibG9jazIpO30KICAgIGlmICh0eXBlLm1hdGNoKC9bXF1cKTssXS8pKSByZXR1cm4gY29udChhbHRibG9jazEpOwogICAgcmV0dXJuIHBhc3MocGF0dGVybiwgYWx0YmxvY2syKTsKICB9CiAgZnVuY3Rpb24gYWx0YmxvY2syKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIsICJhbHQiKSwgYmxvY2ssIHBvcGxleCwgYWx0YmxvY2sxKTsKICAgIGVsc2UgcmV0dXJuIHBhc3MoYWx0YmxvY2sxKTsKICB9CgogIGZ1bmN0aW9uIG1hY3JvKHR5cGUpIHsKICAgIGlmICh0eXBlLm1hdGNoKC9bXFtcKFx7XS8pKSByZXR1cm4gbWF0Y2hCcmFja2V0cyh0eXBlLCBleHByZXNzaW9uKTsKICAgIHJldHVybiBwYXNzKCk7CiAgfQogIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHModHlwZSwgY29tYikgewogICAgaWYgKHR5cGUgPT0gIlsiKSByZXR1cm4gY29udChwdXNobGV4KCJdIiksIGNvbW1hc2VwKGNvbWIsICJdIiksIHBvcGxleCk7CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgY29tbWFzZXAoY29tYiwgIikiKSwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChjb21iLCAifSIpLCBwb3BsZXgpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CgogIGZ1bmN0aW9uIHBhcnNlKHN0YXRlLCBzdHJlYW0sIHN0eWxlKSB7CiAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KICAgIC8vIChMZXNzIHdhc3RlZnVsIHRoYW4gY29uc2luZyB1cCBhIGh1bmRyZWQgY2xvc3VyZXMgb24gZXZlcnkgY2FsbC4pCiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGJsb2NrOwogICAgICBpZiAoY29tYmluYXRvcih0Y2F0KSkgewogICAgICAgIHdoaWxlKGNjLmxlbmd0aCAmJiBjY1tjYy5sZW5ndGggLSAxXS5sZXgpCiAgICAgICAgICBjYy5wb3AoKSgpOwogICAgICAgIHJldHVybiBjeC5tYXJrZWQgfHwgc3R5bGU7CiAgICAgIH0KICAgIH0KICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgIGNjOiBbXSwKICAgICAgICBsZXhpY2FsOiB7aW5kZW50ZWQ6IC1pbmRlbnRVbml0LCBjb2x1bW46IDAsIHR5cGU6ICJ0b3AiLCBhbGlnbjogZmFsc2V9LAogICAgICAgIGtleXdvcmRzOiB2YWxLZXl3b3JkcywKICAgICAgICBpbmRlbnRlZDogMAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdGNhdCA9IGNvbnRlbnQgPSBudWxsOwogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgaWYgKHN0eWxlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwogICAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IHRydWU7CiAgICAgIGlmICh0Y2F0ID09ICJwcmVmaXgiKSByZXR1cm4gc3R5bGU7CiAgICAgIGlmICghY29udGVudCkgY29udGVudCA9IHN0cmVhbS5jdXJyZW50KCk7CiAgICAgIHJldHVybiBwYXJzZShzdGF0ZSwgc3RyZWFtLCBzdHlsZSk7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSByZXR1cm4gMDsKICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBsZXhpY2FsID0gc3RhdGUubGV4aWNhbCwKICAgICAgICAgIHR5cGUgPSBsZXhpY2FsLnR5cGUsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gdHlwZTsKICAgICAgaWYgKHR5cGUgPT0gInN0YXQiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIGluZGVudFVuaXQ7CiAgICAgIGlmIChsZXhpY2FsLmFsaWduKSByZXR1cm4gbGV4aWNhbC5jb2x1bW4gKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiAobGV4aWNhbC5pbmZvID09ICJhbHQiID8gYWx0SW5kZW50VW5pdCA6IGluZGVudFVuaXQpKTsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogInt9IgogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtcnVzdHNyYyIsICJydXN0Iik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNjaGVtZSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic2NoZW1lLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogU2NoZW1lIG1vZGU8L2gxPgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KOyBTZWUgaWYgdGhlIGlucHV0IHN0YXJ0cyB3aXRoIGEgZ2l2ZW4gc3ltYm9sLgooZGVmaW5lIChtYXRjaC1zeW1ib2wgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCSgoZXF2PyAoY2FyIChyZW1haW4gaW5wdXQpKSBwYXR0ZXJuKSAoci1jZHIgaW5wdXQpKQoJKGVsc2UgI2YpKSkKCjsgQWxsb3cgdGhlIGlucHV0IHRvIHN0YXJ0IHdpdGggb25lIG9mIGEgbGlzdCBvZiBwYXR0ZXJucy4KKGRlZmluZSAobWF0Y2gtb3IgaW5wdXQgcGF0dGVybikKICAoY29uZCAoKG51bGw/IHBhdHRlcm4pICNmKQoJKChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKQoJKGVsc2UgKG1hdGNoLW9yIGlucHV0IChjZHIgcGF0dGVybikpKSkpCgo7IEFsbG93IGEgc2VxdWVuY2Ugb2YgcGF0dGVybnMuCihkZWZpbmUgKG1hdGNoLXNlcSBpbnB1dCBwYXR0ZXJuKQogIChpZiAobnVsbD8gcGF0dGVybikKICAgICAgaW5wdXQKICAgICAgKGxldCAoKG1hdGNoIChtYXRjaC1wYXR0ZXJuIGlucHV0IChjYXIgcGF0dGVybikpKSkKCShpZiBtYXRjaCAobWF0Y2gtc2VxIG1hdGNoIChjZHIgcGF0dGVybikpICNmKSkpKQoKOyBNYXRjaCB3aXRoIHRoZSBwYXR0ZXJuIGJ1dCBubyBwcm9ibGVtIGlmIGl0IGRvZXMgbm90IG1hdGNoLgooZGVmaW5lIChtYXRjaC1vcHQgaW5wdXQgcGF0dGVybikKICAobGV0ICgobWF0Y2ggKG1hdGNoLXBhdHRlcm4gaW5wdXQgKGNhciBwYXR0ZXJuKSkpKQogICAgKGlmIG1hdGNoIG1hdGNoIGlucHV0KSkpCgo7IE1hdGNoIGFueXRoaW5nIChvdGhlciB0aGFuICcoKSksIHVudGlsIHBhdHRlcm4gaXMgZm91bmQuIFRoZSByYXRoZXIKOyBjbHVtc3kgZm9ybSBvZiByZXF1aXJpbmcgYW4gZW5kaW5nIHBhdHRlcm4gaXMgbmVlZGVkIHRvIGRlY2lkZSB3aGVyZQo7IHRoZSBlbmQgb2YgdGhlIG1hdGNoIGlzLiBJZiBub25lIGlzIGdpdmVuLCB0aGlzIHdpbGwgbWF0Y2ggdGhlIHJlc3QKOyBvZiB0aGUgc2VudGVuY2UuCihkZWZpbmUgKG1hdGNoLWFueSBpbnB1dCBwYXR0ZXJuKQogIChjb25kICgobnVsbD8gKHJlbWFpbiBpbnB1dCkpICNmKQoJKChudWxsPyBwYXR0ZXJuKSAoZi1jb25zIChyZW1haW4gaW5wdXQpIChjbGVhci1yZW1haW4gaW5wdXQpKSkKCShlbHNlCgkgKGxldCAoKGFjY3VtLWFueSAoY29sbGVjdG9yKSkpCgkgICAoZGVmaW5lIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCBwYXR0ZXJuKQoJICAgICAoY29uZCAoKG51bGw/IChyZW1haW4gaW5wdXQpKSAjZikKCQkgICAoZWxzZSAoYWNjdW0tYW55IChjYXIgKHJlbWFpbiBpbnB1dCkpKQoJCQkgKGNvbmQgKChtYXRjaC1wYXR0ZXJuIChyLWNkciBpbnB1dCkgcGF0dGVybikpCgkJCSAgICAgICAoZWxzZSAobWF0Y2gtcGF0dGVybi1hbnkgKHItY2RyIGlucHV0KSBwYXR0ZXJuKSkpKSkpCgkgICAobGV0ICgocmV0dmFsIChtYXRjaC1wYXR0ZXJuLWFueSBpbnB1dCAoY2FyIHBhdHRlcm4pKSkpCgkgICAgIChpZiByZXR2YWwKCQkgKGYtY29ucyAoYWNjdW0tYW55KSByZXR2YWwpCgkJICNmKSkpKSkpCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHt9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtc2NoZW1lPC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/scheme/scheme.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEF1dGhvcjogS29oIFppIEhhbiwgYmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgS29oIFppIENodW4KICovCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic2NoZW1lIiwgZnVuY3Rpb24gKGNvbmZpZywgbW9kZSkgewogICAgdmFyIEJVSUxUSU4gPSAiYnVpbHRpbiIsIENPTU1FTlQgPSAiY29tbWVudCIsIFNUUklORyA9ICJzdHJpbmciLAogICAgICAgIEFUT00gPSAiYXRvbSIsIE5VTUJFUiA9ICJudW1iZXIiLCBCUkFDS0VUID0gImJyYWNrZXQiLCBLRVlXT1JEPSJrZXl3b3JkIjsKICAgIHZhciBJTkRFTlRfV09SRF9TS0lQID0gMiwgS0VZV09SRFNfU0tJUCA9IDE7CiAgICAKICAgIGZ1bmN0aW9uIG1ha2VLZXl3b3JkcyhzdHIpIHsKICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICB2YXIga2V5d29yZHMgPSBtYWtlS2V5d29yZHMoIs67IGNhc2UtbGFtYmRhIGNhbGwvY2MgY2xhc3MgZGVmaW5lLWNsYXNzIGV4aXQtaGFuZGxlciBmaWVsZCBpbXBvcnQgaW5oZXJpdCBpbml0LWZpZWxkIGludGVyZmFjZSBsZXQqLXZhbHVlcyBsZXQtdmFsdWVzIGxldC9lYyBtaXhpbiBvcHQtbGFtYmRhIG92ZXJyaWRlIHByb3RlY3QgcHJvdmlkZSBwdWJsaWMgcmVuYW1lIHJlcXVpcmUgcmVxdWlyZS1mb3Itc3ludGF4IHN5bnRheCBzeW50YXgtY2FzZSBzeW50YXgtZXJyb3IgdW5pdC9zaWcgdW5sZXNzIHdoZW4gd2l0aC1zeW50YXggYW5kIGJlZ2luIGNhbGwtd2l0aC1jdXJyZW50LWNvbnRpbnVhdGlvbiBjYWxsLXdpdGgtaW5wdXQtZmlsZSBjYWxsLXdpdGgtb3V0cHV0LWZpbGUgY2FzZSBjb25kIGRlZmluZSBkZWZpbmUtc3ludGF4IGRlbGF5IGRvIGR5bmFtaWMtd2luZCBlbHNlIGZvci1lYWNoIGlmIGxhbWJkYSBsZXQgbGV0KiBsZXQtc3ludGF4IGxldHJlYyBsZXRyZWMtc3ludGF4IG1hcCBvciBzeW50YXgtcnVsZXMgYWJzIGFjb3MgYW5nbGUgYXBwZW5kIGFwcGx5IGFzaW4gYXNzb2MgYXNzcSBhc3N2IGF0YW4gYm9vbGVhbj8gY2FhciBjYWRyIGNhbGwtd2l0aC1pbnB1dC1maWxlIGNhbGwtd2l0aC1vdXRwdXQtZmlsZSBjYWxsLXdpdGgtdmFsdWVzIGNhciBjZGRkYXIgY2RkZGRyIGNkciBjZWlsaW5nIGNoYXItPmludGVnZXIgY2hhci1hbHBoYWJldGljPyBjaGFyLWNpPD0/IGNoYXItY2k8PyBjaGFyLWNpPT8gY2hhci1jaT49PyBjaGFyLWNpPj8gY2hhci1kb3duY2FzZSBjaGFyLWxvd2VyLWNhc2U/IGNoYXItbnVtZXJpYz8gY2hhci1yZWFkeT8gY2hhci11cGNhc2UgY2hhci11cHBlci1jYXNlPyBjaGFyLXdoaXRlc3BhY2U/IGNoYXI8PT8gY2hhcjw/IGNoYXI9PyBjaGFyPj0/IGNoYXI+PyBjaGFyPyBjbG9zZS1pbnB1dC1wb3J0IGNsb3NlLW91dHB1dC1wb3J0IGNvbXBsZXg/IGNvbnMgY29zIGN1cnJlbnQtaW5wdXQtcG9ydCBjdXJyZW50LW91dHB1dC1wb3J0IGRlbm9taW5hdG9yIGRpc3BsYXkgZW9mLW9iamVjdD8gZXE/IGVxdWFsPyBlcXY/IGV2YWwgZXZlbj8gZXhhY3QtPmluZXhhY3QgZXhhY3Q/IGV4cCBleHB0ICNmIGZsb29yIGZvcmNlIGdjZCBpbWFnLXBhcnQgaW5leGFjdC0+ZXhhY3QgaW5leGFjdD8gaW5wdXQtcG9ydD8gaW50ZWdlci0+Y2hhciBpbnRlZ2VyPyBpbnRlcmFjdGlvbi1lbnZpcm9ubWVudCBsY20gbGVuZ3RoIGxpc3QgbGlzdC0+c3RyaW5nIGxpc3QtPnZlY3RvciBsaXN0LXJlZiBsaXN0LXRhaWwgbGlzdD8gbG9hZCBsb2cgbWFnbml0dWRlIG1ha2UtcG9sYXIgbWFrZS1yZWN0YW5ndWxhciBtYWtlLXN0cmluZyBtYWtlLXZlY3RvciBtYXggbWVtYmVyIG1lbXEgbWVtdiBtaW4gbW9kdWxvIG5lZ2F0aXZlPyBuZXdsaW5lIG5vdCBudWxsLWVudmlyb25tZW50IG51bGw/IG51bWJlci0+c3RyaW5nIG51bWJlcj8gbnVtZXJhdG9yIG9kZD8gb3Blbi1pbnB1dC1maWxlIG9wZW4tb3V0cHV0LWZpbGUgb3V0cHV0LXBvcnQ/IHBhaXI/IHBlZWstY2hhciBwb3J0PyBwb3NpdGl2ZT8gcHJvY2VkdXJlPyBxdWFzaXF1b3RlIHF1b3RlIHF1b3RpZW50IHJhdGlvbmFsPyByYXRpb25hbGl6ZSByZWFkIHJlYWQtY2hhciByZWFsLXBhcnQgcmVhbD8gcmVtYWluZGVyIHJldmVyc2Ugcm91bmQgc2NoZW1lLXJlcG9ydC1lbnZpcm9ubWVudCBzZXQhIHNldC1jYXIhIHNldC1jZHIhIHNpbiBzcXJ0IHN0cmluZyBzdHJpbmctPmxpc3Qgc3RyaW5nLT5udW1iZXIgc3RyaW5nLT5zeW1ib2wgc3RyaW5nLWFwcGVuZCBzdHJpbmctY2k8PT8gc3RyaW5nLWNpPD8gc3RyaW5nLWNpPT8gc3RyaW5nLWNpPj0/IHN0cmluZy1jaT4/IHN0cmluZy1jb3B5IHN0cmluZy1maWxsISBzdHJpbmctbGVuZ3RoIHN0cmluZy1yZWYgc3RyaW5nLXNldCEgc3RyaW5nPD0/IHN0cmluZzw/IHN0cmluZz0/IHN0cmluZz49PyBzdHJpbmc+PyBzdHJpbmc/IHN1YnN0cmluZyBzeW1ib2wtPnN0cmluZyBzeW1ib2w/ICN0IHRhbiB0cmFuc2NyaXB0LW9mZiB0cmFuc2NyaXB0LW9uIHRydW5jYXRlIHZhbHVlcyB2ZWN0b3IgdmVjdG9yLT5saXN0IHZlY3Rvci1maWxsISB2ZWN0b3ItbGVuZ3RoIHZlY3Rvci1yZWYgdmVjdG9yLXNldCEgd2l0aC1pbnB1dC1mcm9tLWZpbGUgd2l0aC1vdXRwdXQtdG8tZmlsZSB3cml0ZSB3cml0ZS1jaGFyIHplcm8/Iik7CiAgICB2YXIgaW5kZW50S2V5cyA9IG1ha2VLZXl3b3JkcygiZGVmaW5lIGxldCBsZXRyZWMgbGV0KiBsYW1iZGEiKTsKICAgIAoKICAgIGZ1bmN0aW9uIHN0YXRlU3RhY2soaW5kZW50LCB0eXBlLCBwcmV2KSB7IC8vIHJlcHJlc2VudHMgYSBzdGF0ZSBzdGFjayBvYmplY3QKICAgICAgICB0aGlzLmluZGVudCA9IGluZGVudDsKICAgICAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB9CgogICAgZnVuY3Rpb24gcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnQsIHR5cGUpIHsKICAgICAgICBzdGF0ZS5pbmRlbnRTdGFjayA9IG5ldyBzdGF0ZVN0YWNrKGluZGVudCwgdHlwZSwgc3RhdGUuaW5kZW50U3RhY2spOwogICAgfQoKICAgIGZ1bmN0aW9uIHBvcFN0YWNrKHN0YXRlKSB7CiAgICAgICAgc3RhdGUuaW5kZW50U3RhY2sgPSBzdGF0ZS5pbmRlbnRTdGFjay5wcmV2OwogICAgfQogICAgCiAgICAvKioKICAgICAqIFNjaGVtZSBudW1iZXJzIGFyZSBjb21wbGljYXRlZCB1bmZvcnR1bmF0ZWx5LgogICAgICogQ2hlY2tzIGlmIHdlJ3JlIGxvb2tpbmcgYXQgYSBudW1iZXIsIHdoaWNoIG1pZ2h0IGJlIHBvc3NpYmx5IGEgZnJhY3Rpb24uCiAgICAgKiBBbHNvIGNoZWNrcyB0aGF0IGl0IGlzIG5vdCBwYXJ0IG9mIGEgbG9uZ2VyIGlkZW50aWZpZXIuIFJldHVybnMgdHJ1ZS9mYWxzZSBhY2NvcmRpbmdseS4KICAgICAqLwogICAgZnVuY3Rpb24gaXNOdW1iZXIoY2gsIHN0cmVhbSl7IAogICAgICAgIGlmKC9bMC05XS8uZXhlYyhjaCkgIT0gbnVsbCl7IAogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1swLTldLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXQoL1wvLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvWzAtOV0vKTsKICAgICAgICAgICAgaWYgKHN0cmVhbS5lb2woKSB8fCAhKC9bYS16QS1aXC1cX1wvXS8uZXhlYyhzdHJlYW0ucGVlaygpKSkpIHJldHVybiB0cnVlOwogICAgICAgICAgICBzdHJlYW0uYmFja1VwKHN0cmVhbS5jdXJyZW50KCkubGVuZ3RoIC0gMSk7IC8vIHVuZG8gYWxsIHRoZSBlYXRpbmcKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgaW5kZW50U3RhY2s6IG51bGwsCiAgICAgICAgICAgICAgICBpbmRlbnRhdGlvbjogMCwKICAgICAgICAgICAgICAgIG1vZGU6IGZhbHNlLAogICAgICAgICAgICAgICAgc0V4cHJDb21tZW50OiBmYWxzZQogICAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIHRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZiAoc3RhdGUuaW5kZW50U3RhY2sgPT0gbnVsbCAmJiBzdHJlYW0uc29sKCkpIHsKICAgICAgICAgICAgICAgIC8vIHVwZGF0ZSBpbmRlbnRhdGlvbiwgYnV0IG9ubHkgaWYgaW5kZW50U3RhY2sgaXMgZW1wdHkKICAgICAgICAgICAgICAgIHN0YXRlLmluZGVudGF0aW9uID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIHNraXAgc3BhY2VzCiAgICAgICAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIHJldHVyblR5cGUgPSBudWxsOwogICAgICAgICAgICAKICAgICAgICAgICAgc3dpdGNoKHN0YXRlLm1vZGUpewogICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjogLy8gbXVsdGktbGluZSBzdHJpbmcgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIG5leHQsIGVzY2FwZWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICJcIiIgJiYgIWVzY2FwZWQpIHsKICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IFNUUklORzsgLy8gY29udGludWUgb24gaW4gc2NoZW1lLXN0cmluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICJjb21tZW50IjogLy8gY29tbWVudCBwYXJzaW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICB2YXIgbmV4dCwgbWF5YmVFbmQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ID09ICIjIiAmJiBtYXliZUVuZCkgewogICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBtYXliZUVuZCA9IChuZXh0ID09ICJ8Iik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAicy1leHByLWNvbW1lbnQiOiAvLyBzLWV4cHIgY29tbWVudGluZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIGlmKHN0cmVhbS5wZWVrKCkgPT0gIigiIHx8IHN0cmVhbS5wZWVrKCkgPT0gIlsiKXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWN0dWFsbHkgc3RhcnQgc2NoZW1lIHMtZXhwciBjb21tZW50aW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc0V4cHJDb21tZW50ID0gMDsKICAgICAgICAgICAgICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90IHdlIGp1c3QgY29tbWVudCB0aGUgZW50aXJlIG9mIHRoZSBuZXh0IHRva2VuCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14vc10vKTsgLy8gZWF0IG5vbiBzcGFjZXMKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IENPTU1FTlQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlZmF1bHQ6IC8vIGRlZmF1bHQgcGFyc2luZyBtb2RlCiAgICAgICAgICAgICAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT0gIlwiIikgewogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gInN0cmluZyI7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBTVFJJTkc7CiAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAiJyIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEFUT007CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaCA9PSAnIycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXQoInwiKSkgewkJCQkJLy8gTXVsdGktbGluZSBjb21tZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS5tb2RlID0gImNvbW1lbnQiOyAvLyB0b2dnbGUgdG8gY29tbWVudCBtb2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0uZWF0KC9bdGZdLykpIHsJCQkvLyAjdC8jZiAoYXRvbSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBBVE9NOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5lYXQoJzsnKSkgewkJCQkvLyBTLUV4cHIgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubW9kZSA9ICJzLWV4cHItY29tbWVudCI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIjsiKSB7IC8vIGNvbW1lbnQKICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOyAvLyByZXN0IG9mIHRoZSBsaW5lIGlzIGEgY29tbWVudAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQ09NTUVOVDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICItIil7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZighaXNOYU4ocGFyc2VJbnQoc3RyZWFtLnBlZWsoKSkpKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1wvMC05XS8pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGNoLHN0cmVhbSkpewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gTlVNQkVSOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gIigiIHx8IGNoID09ICJbIikgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIga2V5V29yZCA9ICcnOyB2YXIgaW5kZW50VGVtcCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICAgICAgICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAgICAgICAgICAgIEVpdGhlciAKICAgICAgICAgICAgICAgICAgICAgICAgKGluZGVudC13b3JkIC4uCiAgICAgICAgICAgICAgICAgICAgICAgIChub24taW5kZW50LXdvcmQgLi4KICAgICAgICAgICAgICAgICAgICAgICAgKDtzb21ldGhpbmcgZWxzZSwgYnJhY2tldCwgZXRjLgogICAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGxldHRlciA9IHN0cmVhbS5lYXQoL1teXHNcKFxbXDtcKVxdXS8pKSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlXb3JkICs9IGxldHRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5V29yZC5sZW5ndGggPiAwICYmIGluZGVudEtleXMucHJvcGVydHlJc0VudW1lcmFibGUoa2V5V29yZCkpIHsgLy8gaW5kZW50LXdvcmQKICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIElOREVOVF9XT1JEX1NLSVAsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgLy8gbm9uLWluZGVudCB3b3JkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjb250aW51ZSBlYXRpbmcgdGhlIHNwYWNlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5wZWVrKCkgPT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm90aGluZyBzaWduaWZpY2FudCBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHJlc3RhcnQgaW5kZW50YXRpb24gMSBzcGFjZSBhZnRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2hTdGFjayhzdGF0ZSwgaW5kZW50VGVtcCArIDEsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVzaFN0YWNrKHN0YXRlLCBpbmRlbnRUZW1wICsgc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGgsIGNoKTsgLy8gZWxzZSB3ZSBtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5iYWNrVXAoc3RyZWFtLmN1cnJlbnQoKS5sZW5ndGggLSAxKTsgLy8gdW5kbyBhbGwgdGhlIGVhdGluZwogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSAibnVtYmVyIikgc3RhdGUuc0V4cHJDb21tZW50Kys7CiAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5UeXBlID0gQlJBQ0tFVDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICIpIiB8fCBjaCA9PSAiXSIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZSA9IEJSQUNLRVQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5pbmRlbnRTdGFjayAhPSBudWxsICYmIHN0YXRlLmluZGVudFN0YWNrLnR5cGUgPT0gKGNoID09ICIpIiA/ICIoIiA6ICJbIikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcFN0YWNrKHN0YXRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIHN0YXRlLnNFeHByQ29tbWVudCA9PSAibnVtYmVyIil7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoLS1zdGF0ZS5zRXhwckNvbW1lbnQgPT0gMCl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBDT01NRU5UOyAvLyBmaW5hbCBjbG9zaW5nIGJyYWNrZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuc0V4cHJDb21tZW50ID0gZmFsc2U7IC8vIHR1cm4gb2ZmIHMtZXhwciBjb21tZW50aW5nIG1vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX1wtXS8pOwogICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5d29yZHMgJiYga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVyblR5cGUgPSBCVUlMVElOOwogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSByZXR1cm5UeXBlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICh0eXBlb2Ygc3RhdGUuc0V4cHJDb21tZW50ID09ICJudW1iZXIiKSA/IENPTU1FTlQgOiByZXR1cm5UeXBlOwogICAgICAgIH0sCgogICAgICAgIGluZGVudDogZnVuY3Rpb24gKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgICAgICAgaWYgKHN0YXRlLmluZGVudFN0YWNrID09IG51bGwpIHJldHVybiBzdGF0ZS5pbmRlbnRhdGlvbjsKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLmluZGVudFN0YWNrLmluZGVudDsKICAgICAgICB9CiAgICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXNjaGVtZSIsICJzY2hlbWUiKTs=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNtYWxsdGFsayBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic21hbGx0YWxrLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMnB4IHNvbGlkICNkZWU7IGJvcmRlci1yaWdodC13aWR0aDogMTBweDt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7Ym9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiAjZGVlO30KICAgICAgLkNvZGVNaXJyb3ItZ3V0dGVyIHByZSB7Y29sb3I6IHdoaXRlOyBmb250LXdlaWdodDogYm9sZDt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBTbWFsbHRhbGsgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgoiIAogICAgVGhpcyBpcyBhIHRlc3Qgb2YgdGhlIFNtYWxsdGFsayBjb2RlCiIKU2Vhc2lkZS5XQUNvbXBvbmVudCBzdWJjbGFzczogI015Q291bnRlciBbCiAgICB8IGNvdW50IHwKICAgIE15Q291bnRlciBjbGFzcyAmZ3Q7Jmd0OyBjYW5CZVJvb3QgWyBedHJ1ZSBdCgogICAgaW5pdGlhbGl6ZSBbCiAgICAgICAgc3VwZXIgaW5pdGlhbGl6ZS4KICAgICAgICBjb3VudCA6PSAwLgogICAgXQogICAgc3RhdGVzIFsgXnsgc2VsZiB9IF0KICAgIHJlbmRlckNvbnRlbnRPbjogaHRtbCBbCiAgICAgICAgaHRtbCBoZWFkaW5nOiBjb3VudC4KICAgICAgICBodG1sIGFuY2hvciBjYWxsYmFjazogWyBjb3VudCA6PSBjb3VudCArIDEgXTsgd2l0aDogJysrJy4KICAgICAgICBodG1sIHNwYWNlLgogICAgICAgIGh0bWwgYW5jaG9yIGNhbGxiYWNrOiBbIGNvdW50IDo9IGNvdW50IC0gMSBdOyB3aXRoOiAnLS0nLgogICAgXQpdCgpNeUNvdW50ZXIgcmVnaXN0ZXJBc0FwcGxpY2F0aW9uOiAnbXljb3VudGVyJwo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC1zdHNyYyIsCiAgICAgICAgaW5kZW50VW5pdDogNAogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBTbWFsbHRhbGsgbW9kZS48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1zdHNyYzwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/smalltalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCdzbWFsbHRhbGsnLCBmdW5jdGlvbihjb25maWcsIG1vZGVDb25maWcpIHsKCgl2YXIgc3BlY2lhbENoYXJzID0gL1srXC0vXFwqfjw+PUAlfCY/IS46O15dLzsKCXZhciBrZXl3b3JkcyA9IC90cnVlfGZhbHNlfG5pbHxzZWxmfHN1cGVyfHRoaXNDb250ZXh0LzsKCgl2YXIgQ29udGV4dCA9IGZ1bmN0aW9uKHRva2VuaXplciwgcGFyZW50KSB7CgkJdGhpcy5uZXh0ID0gdG9rZW5pemVyOwoJCXRoaXMucGFyZW50ID0gcGFyZW50OwoJfTsKCgl2YXIgVG9rZW4gPSBmdW5jdGlvbihuYW1lLCBjb250ZXh0LCBlb3MpIHsKCQl0aGlzLm5hbWUgPSBuYW1lOwoJCXRoaXMuY29udGV4dCA9IGNvbnRleHQ7CgkJdGhpcy5lb3MgPSBlb3M7Cgl9OwoKCXZhciBTdGF0ZSA9IGZ1bmN0aW9uKCkgewoJCXRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KG5leHQsIG51bGwpOwoJCXRoaXMuZXhwZWN0VmFyaWFibGUgPSB0cnVlOwoJCXRoaXMuaW5kZW50YXRpb24gPSAwOwoJCXRoaXMudXNlckluZGVudGF0aW9uRGVsdGEgPSAwOwoJfTsKCglTdGF0ZS5wcm90b3R5cGUudXNlckluZGVudCA9IGZ1bmN0aW9uKGluZGVudGF0aW9uKSB7CgkJdGhpcy51c2VySW5kZW50YXRpb25EZWx0YSA9IGluZGVudGF0aW9uID4gMCA/IChpbmRlbnRhdGlvbiAvIGNvbmZpZy5pbmRlbnRVbml0IC0gdGhpcy5pbmRlbnRhdGlvbikgOiAwOwoJfTsKCgl2YXIgbmV4dCA9IGZ1bmN0aW9uKHN0cmVhbSwgY29udGV4dCwgc3RhdGUpIHsKCQl2YXIgdG9rZW4gPSBuZXcgVG9rZW4obnVsbCwgY29udGV4dCwgZmFsc2UpOwoJCXZhciBhQ2hhciA9IHN0cmVhbS5uZXh0KCk7CgoJCWlmIChhQ2hhciA9PT0gJyInKSB7CgkJCXRva2VuID0gbmV4dENvbW1lbnQoc3RyZWFtLCBuZXcgQ29udGV4dChuZXh0Q29tbWVudCwgY29udGV4dCkpOwoKCQl9IGVsc2UgaWYgKGFDaGFyID09PSAnXCcnKSB7CgkJCXRva2VuID0gbmV4dFN0cmluZyhzdHJlYW0sIG5ldyBDb250ZXh0KG5leHRTdHJpbmcsIGNvbnRleHQpKTsKCgkJfSBlbHNlIGlmIChhQ2hhciA9PT0gJyMnKSB7CgkJCXN0cmVhbS5lYXRXaGlsZSgvW14gLl0vKTsKCQkJdG9rZW4ubmFtZSA9ICdzdHJpbmctMic7CgoJCX0gZWxzZSBpZiAoYUNoYXIgPT09ICckJykgewoJCQlzdHJlYW0uZWF0V2hpbGUoL1teIF0vKTsKCQkJdG9rZW4ubmFtZSA9ICdzdHJpbmctMic7CgoJCX0gZWxzZSBpZiAoYUNoYXIgPT09ICd8JyAmJiBzdGF0ZS5leHBlY3RWYXJpYWJsZSkgewoJCQl0b2tlbi5jb250ZXh0ID0gbmV3IENvbnRleHQobmV4dFRlbXBvcmFyaWVzLCBjb250ZXh0KTsKCgkJfSBlbHNlIGlmICgvW1xbXF17fSgpXS8udGVzdChhQ2hhcikpIHsKCQkJdG9rZW4ubmFtZSA9ICdicmFja2V0JzsKCQkJdG9rZW4uZW9zID0gL1tcW3soXS8udGVzdChhQ2hhcik7CgoJCQlpZiAoYUNoYXIgPT09ICdbJykgewoJCQkJc3RhdGUuaW5kZW50YXRpb24rKzsKCQkJfSBlbHNlIGlmIChhQ2hhciA9PT0gJ10nKSB7CgkJCQlzdGF0ZS5pbmRlbnRhdGlvbiA9IE1hdGgubWF4KDAsIHN0YXRlLmluZGVudGF0aW9uIC0gMSk7CgkJCX0KCgkJfSBlbHNlIGlmIChzcGVjaWFsQ2hhcnMudGVzdChhQ2hhcikpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKHNwZWNpYWxDaGFycyk7CgkJCXRva2VuLm5hbWUgPSAnb3BlcmF0b3InOwoJCQl0b2tlbi5lb3MgPSBhQ2hhciAhPT0gJzsnOyAvLyA7IGNhc2NhZGVkIG1lc3NhZ2UgZXhwcmVzc2lvbgoKCQl9IGVsc2UgaWYgKC9cZC8udGVzdChhQ2hhcikpIHsKCQkJc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF0vKTsKCQkJdG9rZW4ubmFtZSA9ICdudW1iZXInCgoJCX0gZWxzZSBpZiAoL1tcd19dLy50ZXN0KGFDaGFyKSkgewoJCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1xkX10vKTsKCQkJdG9rZW4ubmFtZSA9IHN0YXRlLmV4cGVjdFZhcmlhYmxlID8gKGtleXdvcmRzLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkgPyAna2V5d29yZCcgOiAndmFyaWFibGUnKSA6IG51bGw7CgoJCX0gZWxzZSB7CgkJCXRva2VuLmVvcyA9IHN0YXRlLmV4cGVjdFZhcmlhYmxlOwoJCX0KCgkJcmV0dXJuIHRva2VuOwoJfTsKCgl2YXIgbmV4dENvbW1lbnQgPSBmdW5jdGlvbihzdHJlYW0sIGNvbnRleHQpIHsKCQlzdHJlYW0uZWF0V2hpbGUoL1teIl0vKTsKCQlyZXR1cm4gbmV3IFRva2VuKCdjb21tZW50Jywgc3RyZWFtLmVhdCgnIicpID8gY29udGV4dC5wYXJlbnQgOiBjb250ZXh0LCB0cnVlKTsKCX07CgoJdmFyIG5leHRTdHJpbmcgPSBmdW5jdGlvbihzdHJlYW0sIGNvbnRleHQpIHsKCQlzdHJlYW0uZWF0V2hpbGUoL1teJ10vKTsKCQlyZXR1cm4gbmV3IFRva2VuKCdzdHJpbmcnLCBzdHJlYW0uZWF0KCdcJycpID8gY29udGV4dC5wYXJlbnQgOiBjb250ZXh0LCBmYWxzZSk7Cgl9OwoKCXZhciBuZXh0VGVtcG9yYXJpZXMgPSBmdW5jdGlvbihzdHJlYW0sIGNvbnRleHQsIHN0YXRlKSB7CgkJdmFyIHRva2VuID0gbmV3IFRva2VuKG51bGwsIGNvbnRleHQsIGZhbHNlKTsKCQl2YXIgYUNoYXIgPSBzdHJlYW0ubmV4dCgpOwoKCQlpZiAoYUNoYXIgPT09ICd8JykgewoJCQl0b2tlbi5jb250ZXh0ID0gY29udGV4dC5wYXJlbnQ7CgkJCXRva2VuLmVvcyA9IHRydWU7CgoJCX0gZWxzZSB7CgkJCXN0cmVhbS5lYXRXaGlsZSgvW158XS8pOwoJCQl0b2tlbi5uYW1lID0gJ3ZhcmlhYmxlJzsKCQl9CgoJCXJldHVybiB0b2tlbjsKCX0KCglyZXR1cm4gewoJCXN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gbmV3IFN0YXRlOwoJCX0sCgoJCXRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CgkJCXN0YXRlLnVzZXJJbmRlbnQoc3RyZWFtLmluZGVudGF0aW9uKCkpOwoKCQkJaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CgkJCQlyZXR1cm4gbnVsbDsKCQkJfQoKCQkJdmFyIHRva2VuID0gc3RhdGUuY29udGV4dC5uZXh0KHN0cmVhbSwgc3RhdGUuY29udGV4dCwgc3RhdGUpOwoJCQlzdGF0ZS5jb250ZXh0ID0gdG9rZW4uY29udGV4dDsKCQkJc3RhdGUuZXhwZWN0VmFyaWFibGUgPSB0b2tlbi5lb3M7CgoJCQlzdGF0ZS5sYXN0VG9rZW4gPSB0b2tlbjsKCQkJcmV0dXJuIHRva2VuLm5hbWU7CgkJfSwKCgkJYmxhbmtMaW5lOiBmdW5jdGlvbihzdGF0ZSkgewoJCQlzdGF0ZS51c2VySW5kZW50KDApOwoJCX0sCgoJCWluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewoJCQl2YXIgaSA9IHN0YXRlLmNvbnRleHQubmV4dCA9PT0gbmV4dCAmJiB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSA9PT0gJ10nID8gLTEgOiBzdGF0ZS51c2VySW5kZW50YXRpb25EZWx0YTsKCQkJcmV0dXJuIChzdGF0ZS5pbmRlbnRhdGlvbiArIGkpICogY29uZmlnLmluZGVudFVuaXQ7CgkJfSwKCgkJZWxlY3RyaWNDaGFyczogJ10nCgl9OwoKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoJ3RleHQveC1zdHNyYycsIHtuYW1lOiAnc21hbGx0YWxrJ30pOw==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smarty/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/smarty/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNtYXJ0eSBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic21hcnR5LmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBTbWFydHkgbW9kZTwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4Ke2V4dGVuZHMgZmlsZT0icGFyZW50LnRwbCJ9CntpbmNsdWRlIGZpbGU9InRlbXBsYXRlLnRwbCJ9Cgp7KiBzb21lIGV4YW1wbGUgU21hcnR5IGNvbnRlbnQgKn0Ke2lmIGlzc2V0KCRuYW1lKSAmJiAkbmFtZSA9PSAnQmxvZyd9CiAgVGhpcyBpcyBhIHskdmFyfS4KICB7JGludGVnZXIgPSA0NTF9LCB7JGFycmF5W10gPSAiYSJ9LCB7JHN0cmluZ3ZhciA9ICJzdHJpbmcifQogIHthc3NpZ24gdmFyPSdib2InIHZhbHVlPSR2YXIucHJvcH0Ke2Vsc2VpZiAkbmFtZSA9PSAkZm9vfQogIHtmdW5jdGlvbiBuYW1lPW1lbnUgbGV2ZWw9MH0KICAgIHtmb3JlYWNoICRkYXRhIGFzICRlbnRyeX0KICAgICAge2lmIGlzX2FycmF5KCRlbnRyeSl9CiAgICAgICAgLSB7JGVudHJ5QGtleX0KICAgICAgICB7bWVudSBkYXRhPSRlbnRyeSBsZXZlbD0kbGV2ZWwrMX0KICAgICAge2Vsc2V9CiAgICAgICAgeyRlbnRyeX0KICAgICAgey9pZn0KICAgIHsvZm9yZWFjaH0KICB7L2Z1bmN0aW9ufQp7L2lmfTwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbW9kZTogInNtYXJ0eSIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8YnIgLz4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUyIiBuYW1lPSJjb2RlMiI+CnstLWV4dGVuZHMgZmlsZT0icGFyZW50LnRwbCItLX0Key0taW5jbHVkZSBmaWxlPSJ0ZW1wbGF0ZS50cGwiLS19Cgp7LS0qIHNvbWUgZXhhbXBsZSBTbWFydHkgY29udGVudCAqLS19CnstLWlmIGlzc2V0KCRuYW1lKSAmJiAkbmFtZSA9PSAnQmxvZyctLX0KICBUaGlzIGlzIGEgey0tJHZhci0tfS4KICB7LS0kaW50ZWdlciA9IDQ1MS0tfSwgey0tJGFycmF5W10gPSAiYSItLX0sIHstLSRzdHJpbmd2YXIgPSAic3RyaW5nIi0tfQogIHstLWFzc2lnbiB2YXI9J2JvYicgdmFsdWU9JHZhci5wcm9wLS19CnstLWVsc2VpZiAkbmFtZSA9PSAkZm9vLS19CiAgey0tZnVuY3Rpb24gbmFtZT1tZW51IGxldmVsPTAtLX0KICAgIHstLWZvcmVhY2ggJGRhdGEgYXMgJGVudHJ5LS19CiAgICAgIHstLWlmIGlzX2FycmF5KCRlbnRyeSktLX0KICAgICAgICAtIHstLSRlbnRyeUBrZXktLX0KICAgICAgICB7LS1tZW51IGRhdGE9JGVudHJ5IGxldmVsPSRsZXZlbCsxLS19CiAgICAgIHstLWVsc2UtLX0KICAgICAgICB7LS0kZW50cnktLX0KICAgICAgey0tL2lmLS19CiAgICB7LS0vZm9yZWFjaC0tfQogIHstLS9mdW5jdGlvbi0tfQp7LS0vaWYtLX08L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUyIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtb2RlOiB7CiAgICAgICAgICBuYW1lOiAic21hcnR5IiwKICAgICAgICAgIGxlZnREZWxpbWl0ZXI6ICJ7LS0iLAogICAgICAgICAgcmlnaHREZWxpbWl0ZXI6ICItLX0iCiAgICAgICAgfQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPkEgcGxhaW4gdGV4dC9TbWFydHkgbW9kZSB3aGljaCBhbGxvd3MgZm9yIGN1c3RvbSBkZWxpbWl0ZXIgdGFncyAoZGVmYXVsdHMgdG8gPGI+ezwvYj4gYW5kIDxiPn08L2I+KS48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQveC1zbWFydHk8L2NvZGU+PC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smarty/smarty.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzbWFydHkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBrZXlGdW5jcyA9IFsiZGVidWciLCAiZXh0ZW5kcyIsICJmdW5jdGlvbiIsICJpbmNsdWRlIiwgImxpdGVyYWwiXTsKICB2YXIgbGFzdDsKICB2YXIgcmVncyA9IHsKICAgIG9wZXJhdG9yQ2hhcnM6IC9bK1wtKiYlPTw+IT9dLywKICAgIHZhbGlkSWRlbnRpZmllcjogL1thLXpBLVowLTlcX10vLAogICAgc3RyaW5nQ2hhcjogL1tcJ1wiXS8KICB9CiAgdmFyIGxlZnREZWxpbSA9ICh0eXBlb2YgY29uZmlnLm1vZGUubGVmdERlbGltaXRlciAhPSAndW5kZWZpbmVkJykgPyBjb25maWcubW9kZS5sZWZ0RGVsaW1pdGVyIDogInsiOwogIHZhciByaWdodERlbGltID0gKHR5cGVvZiBjb25maWcubW9kZS5yaWdodERlbGltaXRlciAhPSAndW5kZWZpbmVkJykgPyBjb25maWcubW9kZS5yaWdodERlbGltaXRlciA6ICJ9IjsKICBmdW5jdGlvbiByZXQoc3R5bGUsIGxzdCkgeyBsYXN0ID0gbHN0OyByZXR1cm4gc3R5bGU7IH0KCgogIGZ1bmN0aW9uIHRva2VuaXplcihzdHJlYW0sIHN0YXRlKSB7CiAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgogICAgaWYgKHN0cmVhbS5tYXRjaChsZWZ0RGVsaW0sIHRydWUpKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICByZXR1cm4gY2hhaW4oaW5CbG9jaygiY29tbWVudCIsICIqIiArIHJpZ2h0RGVsaW0pKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluU21hcnR5OwogICAgICAgIHJldHVybiAidGFnIjsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIEknZCBsaWtlIHRvIGRvIGFuIGVhdFdoaWxlKCkgaGVyZSwgYnV0IEkgY2FuJ3QgZ2V0IGl0IHRvIGVhdCBvbmx5IHVwIHRvIHRoZSByaWdodERlbGltIHN0cmluZy9jaGFyCiAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5TbWFydHkoc3RyZWFtLCBzdGF0ZSkgewogICAgaWYgKHN0cmVhbS5tYXRjaChyaWdodERlbGltLCB0cnVlKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuaXplcjsKICAgICAgcmV0dXJuIHJldCgidGFnIiwgbnVsbCk7CiAgICB9CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiJCIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKHJlZ3MudmFsaWRJZGVudGlmaWVyKTsKICAgICAgcmV0dXJuIHJldCgidmFyaWFibGUtMiIsICJ2YXJpYWJsZSIpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIi4iKSB7CiAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgInByb3BlcnR5Iik7CiAgICB9CiAgICBlbHNlIGlmIChyZWdzLnN0cmluZ0NoYXIudGVzdChjaCkpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkF0dHJpYnV0ZShjaCk7CiAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgIH0KICAgIGVsc2UgaWYgKHJlZ3Mub3BlcmF0b3JDaGFycy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy5vcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAib3BlcmF0b3IiKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICJbIiB8fCBjaCA9PSAiXSIpIHsKICAgICAgcmV0dXJuIHJldCgiYnJhY2tldCIsICJicmFja2V0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvXGQvKTsKICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIGlmIChzdGF0ZS5sYXN0ID09ICJ2YXJpYWJsZSIpIHsKICAgICAgICBpZiAoY2ggPT0gIkAiKSB7CiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpOwogICAgICAgICAgcmV0dXJuIHJldCgicHJvcGVydHkiLCAicHJvcGVydHkiKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gInwiKSB7CiAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpOwogICAgICAgICAgcmV0dXJuIHJldCgicXVhbGlmaWVyIiwgIm1vZGlmaWVyIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLmxhc3QgPT0gIndoaXRlc3BhY2UiKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKHJlZ3MudmFsaWRJZGVudGlmaWVyKTsKICAgICAgICByZXR1cm4gcmV0KCJhdHRyaWJ1dGUiLCAibW9kaWZpZXIiKTsKICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZS5sYXN0ID09ICJwcm9wZXJ0eSIpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUocmVncy52YWxpZElkZW50aWZpZXIpOwogICAgICAgIHJldHVybiByZXQoInByb3BlcnR5IiwgbnVsbCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoL1xzLy50ZXN0KGNoKSkgewogICAgICAgIGxhc3QgPSAid2hpdGVzcGFjZSI7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIHZhciBzdHIgPSAiIjsKICAgICAgaWYgKGNoICE9ICIvIikgewogICAgCXN0ciArPSBjaDsKICAgICAgfQogICAgICB2YXIgYyA9ICIiOwogICAgICB3aGlsZSAoKGMgPSBzdHJlYW0uZWF0KHJlZ3MudmFsaWRJZGVudGlmaWVyKSkpIHsKICAgICAgICBzdHIgKz0gYzsKICAgICAgfQogICAgICB2YXIgaSwgajsKICAgICAgZm9yIChpPTAsIGo9a2V5RnVuY3MubGVuZ3RoOyBpPGo7IGkrKykgewogICAgICAgIGlmIChrZXlGdW5jc1tpXSA9PSBzdHIpIHsKICAgICAgICAgIHJldHVybiByZXQoImtleXdvcmQiLCAia2V5d29yZCIpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoL1xzLy50ZXN0KGNoKSkgewogICAgCXJldHVybiBudWxsOwogICAgICB9CiAgICAgIHJldHVybiByZXQoInRhZyIsICJ0YWciKTsKICAgIH0KICB9CgogIGZ1bmN0aW9uIGluQXR0cmlidXRlKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubmV4dCgpID09IHF1b3RlKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluU21hcnR5OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAic3RyaW5nIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2godGVybWluYXRvcikpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5pemVyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHsgdG9rZW5pemU6IHRva2VuaXplciwgbW9kZTogInNtYXJ0eSIsIGxhc3Q6IG51bGwgfTsKICAgIH0sCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgc3RhdGUubGFzdCA9IGxhc3Q7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCiAgICBlbGVjdHJpY0NoYXJzOiAiIgogIH0KfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zbWFydHkiLCAic21hcnR5Iik7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic3BhcnFsLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkIGJsYWNrOyBib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7fTwvc3R5bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3I6IFNQQVJRTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClBSRUZJWCBhOiAmbHQ7aHR0cDovL3d3dy53My5vcmcvMjAwMC8xMC9hbm5vdGF0aW9uLW5zIz4KUFJFRklYIGRjOiAmbHQ7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8+ClBSRUZJWCBmb2FmOiAmbHQ7aHR0cDovL3htbG5zLmNvbS9mb2FmLzAuMS8+CgojIENvbW1lbnQhCgpTRUxFQ1QgP2dpdmVuID9mYW1pbHkKV0hFUkUgewogID9hbm5vdCBhOmFubm90YXRlcyAmbHQ7aHR0cDovL3d3dy53My5vcmcvVFIvcmRmLXNwYXJxbC1xdWVyeS8+IC4KICA/YW5ub3QgZGM6Y3JlYXRvciA/YyAuCiAgT1BUSU9OQUwgez9jIGZvYWY6Z2l2ZW4gP2dpdmVuIDsKICAgICAgICAgICAgICAgZm9hZjpmYW1pbHkgP2ZhbWlseSB9IC4KICBGSUxURVIgaXNCbGFuayg/YykKfQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5IiwKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtc3BhcnFsLXF1ZXJ5PC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/sparql/sparql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzcGFycWwiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBjdXJQdW5jOwoKICBmdW5jdGlvbiB3b3JkUmVnZXhwKHdvcmRzKSB7CiAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXig/OiIgKyB3b3Jkcy5qb2luKCJ8IikgKyAiKSQiLCAiaSIpOwogIH0KICB2YXIgb3BzID0gd29yZFJlZ2V4cChbInN0ciIsICJsYW5nIiwgImxhbmdtYXRjaGVzIiwgImRhdGF0eXBlIiwgImJvdW5kIiwgInNhbWV0ZXJtIiwgImlzaXJpIiwgImlzdXJpIiwKICAgICAgICAgICAgICAgICAgICAgICAgImlzYmxhbmsiLCAiaXNsaXRlcmFsIiwgInVuaW9uIiwgImEiXSk7CiAgdmFyIGtleXdvcmRzID0gd29yZFJlZ2V4cChbImJhc2UiLCAicHJlZml4IiwgInNlbGVjdCIsICJkaXN0aW5jdCIsICJyZWR1Y2VkIiwgImNvbnN0cnVjdCIsICJkZXNjcmliZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFzayIsICJmcm9tIiwgIm5hbWVkIiwgIndoZXJlIiwgIm9yZGVyIiwgImxpbWl0IiwgIm9mZnNldCIsICJmaWx0ZXIiLCAib3B0aW9uYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJncmFwaCIsICJieSIsICJhc2MiLCAiZGVzYyJdKTsKICB2YXIgb3BlcmF0b3JDaGFycyA9IC9bKitcLTw+PSZ8XS87CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgY3VyUHVuYyA9IG51bGw7CiAgICBpZiAoY2ggPT0gIiQiIHx8IGNoID09ICI/IikgewogICAgICBzdHJlYW0ubWF0Y2goL15bXHdcZF0qLyk7CiAgICAgIHJldHVybiAidmFyaWFibGUtMiI7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiPCIgJiYgIXN0cmVhbS5tYXRjaCgvXltcc1x1MDBhMD1dLywgZmFsc2UpKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXlteXHNcdTAwYTA+XSo+Py8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIlwiIiB8fCBjaCA9PSAiJyIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkxpdGVyYWwoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIGlmICgvW3t9XChcKSxcLjtcW1xdXS8udGVzdChjaCkpIHsKICAgICAgY3VyUHVuYyA9IGNoOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICIjIikgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CiAgICBlbHNlIGlmIChvcGVyYXRvckNoYXJzLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShvcGVyYXRvckNoYXJzKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiOiIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwuX1wtXS8pOwogICAgICByZXR1cm4gImF0b20iOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW19cd1xkXS8pOwogICAgICBpZiAoc3RyZWFtLmVhdCgiOiIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZF9cLV0vKTsKICAgICAgICByZXR1cm4gImF0b20iOwogICAgICB9CiAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKSwgdHlwZTsKICAgICAgaWYgKG9wcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICBlbHNlIGlmIChrZXl3b3Jkcy50ZXN0KHdvcmQpKQogICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gInZhcmlhYmxlIjsKICAgIH0KICB9CgogIGZ1bmN0aW9uIHRva2VuTGl0ZXJhbChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgY2g7CiAgICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKGNoID09IHF1b3RlICYmICFlc2NhcGVkKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gcHVzaENvbnRleHQoc3RhdGUsIHR5cGUsIGNvbCkgewogICAgc3RhdGUuY29udGV4dCA9IHtwcmV2OiBzdGF0ZS5jb250ZXh0LCBpbmRlbnQ6IHN0YXRlLmluZGVudCwgY29sOiBjb2wsIHR5cGU6IHR5cGV9OwogIH0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7CiAgICBzdGF0ZS5pbmRlbnQgPSBzdGF0ZS5jb250ZXh0LmluZGVudDsKICAgIHN0YXRlLmNvbnRleHQgPSBzdGF0ZS5jb250ZXh0LnByZXY7CiAgfQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZSkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICAgICAgICBpbmRlbnQ6IDAsCiAgICAgICAgICAgICAgY29sOiAwfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIGlmIChzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCkgc3RhdGUuY29udGV4dC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwoKICAgICAgaWYgKHN0eWxlICE9ICJjb21tZW50IiAmJiBzdGF0ZS5jb250ZXh0ICYmIHN0YXRlLmNvbnRleHQuYWxpZ24gPT0gbnVsbCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgIT0gInBhdHRlcm4iKSB7CiAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChjdXJQdW5jID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsICIpIiwgc3RyZWFtLmNvbHVtbigpKTsKICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCAiXSIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gInsiKSBwdXNoQ29udGV4dChzdGF0ZSwgIn0iLCBzdHJlYW0uY29sdW1uKCkpOwogICAgICBlbHNlIGlmICgvW1xdXH1cKV0vLnRlc3QoY3VyUHVuYykpIHsKICAgICAgICB3aGlsZSAoc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCAmJiBjdXJQdW5jID09IHN0YXRlLmNvbnRleHQudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiLiIgJiYgc3RhdGUuY29udGV4dCAmJiBzdGF0ZS5jb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoL2F0b218c3RyaW5nfHZhcmlhYmxlLy50ZXN0KHN0eWxlKSAmJiBzdGF0ZS5jb250ZXh0KSB7CiAgICAgICAgaWYgKC9bXH1cXV0vLnRlc3Qoc3RhdGUuY29udGV4dC50eXBlKSkKICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCAicGF0dGVybiIsIHN0cmVhbS5jb2x1bW4oKSk7CiAgICAgICAgZWxzZSBpZiAoc3RhdGUuY29udGV4dC50eXBlID09ICJwYXR0ZXJuIiAmJiAhc3RhdGUuY29udGV4dC5hbGlnbikgewogICAgICAgICAgc3RhdGUuY29udGV4dC5hbGlnbiA9IHRydWU7CiAgICAgICAgICBzdGF0ZS5jb250ZXh0LmNvbCA9IHN0cmVhbS5jb2x1bW4oKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKTsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoL1tcXVx9XS8udGVzdChmaXJzdENoYXIpKQogICAgICAgIHdoaWxlIChjb250ZXh0ICYmIGNvbnRleHQudHlwZSA9PSAicGF0dGVybiIpIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CgogICAgICB2YXIgY2xvc2luZyA9IGNvbnRleHQgJiYgZmlyc3RDaGFyID09IGNvbnRleHQudHlwZTsKICAgICAgaWYgKCFjb250ZXh0KQogICAgICAgIHJldHVybiAwOwogICAgICBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT0gInBhdHRlcm4iKQogICAgICAgIHJldHVybiBjb250ZXh0LmNvbDsKICAgICAgZWxzZSBpZiAoY29udGV4dC5hbGlnbikKICAgICAgICByZXR1cm4gY29udGV4dC5jb2wgKyAoY2xvc2luZyA/IDAgOiAxKTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBjb250ZXh0LmluZGVudCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94LXNwYXJxbC1xdWVyeSIsICJzcGFycWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHNUZVggbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InN0ZXguanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtiYWNrZ3JvdW5kOiAjZjhmOGY4O308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBzVGVYIG1vZGU8L2gxPgogICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClxiZWdpbnttb2R1bGV9W2lkPWJidC1zaXplXQpcaW1wb3J0bW9kdWxlW2JhbGFuY2VkLWJpbmFyeS10cmVlc117YmFsYW5jZWQtYmluYXJ5LXRyZWVzfQpcaW1wb3J0bW9kdWxlW1xLV0FSQ3NsaWRlc3tkbWF0aC9lbi9jYXJkaW5hbGl0eX1de2NhcmRpbmFsaXR5fQoKXGJlZ2lue2ZyYW1lfQogIFxmcmFtZXRpdGxle1NpemUgTGVtbWEgZm9yIEJhbGFuY2VkIFRyZWVzfQogIFxiZWdpbntpdGVtaXplfQogIFxpdGVtCiAgICBcYmVnaW57YXNzZXJ0aW9ufVtpZD1zaXplLWxlbW1hLHR5cGU9bGVtbWFdIAogICAgTGV0ICRHPVx0dXB7VixFfSQgYmUgYSBcdGVybXJlZltjZD1iaW5hcnktdHJlZXNde2JhbGFuY2VkIGJpbmFyeSB0cmVlfSAKICAgIG9mIFx0ZXJtcmVmW2NkPWdyYXBoLWRlcHRoLG5hbWU9dmVydGV4LWRlcHRoXXtkZXB0aH0kbj5pJCwgdGhlbiB0aGUgc2V0CiAgICAgJFxkZWZlcXtcbGl2YXJ7Vn1pfXtcc2V0c3R7XGluc2V0e3Z9e1Z9fXtcZ2RlcHRoe3Z9ID0gaX19JCBvZgogICAgXHRlcm1yZWZbY2Q9Z3JhcGhzLWludHJvLG5hbWU9bm9kZV17bm9kZXN9IGF0IAogICAgXHRlcm1yZWZbY2Q9Z3JhcGgtZGVwdGgsbmFtZT12ZXJ0ZXgtZGVwdGhde2RlcHRofSAkaSQgaGFzCiAgICBcdGVybXJlZltjZD1jYXJkaW5hbGl0eSxuYW1lPWNhcmRpbmFsaXR5XXtjYXJkaW5hbGl0eX0gJFxwb3dlcjJpJC4KICAgXGVuZHthc3NlcnRpb259CiAgXGl0ZW0KICAgIFxiZWdpbntzcHJvb2Z9W2lkPXNpemUtbGVtbWEtcGYscHJvb2ZlbmQ9LGZvcj1zaXplLWxlbW1hXXt2aWEgaW5kdWN0aW9uIG92ZXIgdGhlIGRlcHRoICRpJC59CiAgICAgIFxiZWdpbntzcGZjYXNlc317V2UgaGF2ZSB0byBjb25zaWRlciB0d28gY2FzZXN9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPTAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICAgdGhlbiAkXGxpdmFye1Z9aT1cc2V0e1xsaXZhcnt2fXJ9JCwgd2hlcmUgJFxsaXZhcnt2fXIkIGlzIHRoZSByb290LCBzbwogICAgICAgICAgICAkXGVxe1xjYXJke1xsaXZhcntWfTB9LFxjYXJke1xzZXR7XGxpdmFye3Z9cn19LDEsXHBvd2VyMjB9JC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICBcZW5ke3NwZmNhc2V9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPjAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICB0aGVuICRcbGl2YXJ7Vn17aS0xfSQgY29udGFpbnMgJFxwb3dlcjJ7aS0xfSQgdmVydGV4ZXMgCiAgICAgICAgICAgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieUlIXShJSClcZW5ke2p1c3RpZmljYXRpb259CiAgICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgICBcYmVnaW57c3Bmc3RlcH0KICAgICAgICAgICBCeSB0aGUgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieURlZl1kZWZpbml0aW9uIG9mIGEgYmluYXJ5CiAgICAgICAgICAgICAgdHJlZVxlbmR7anVzdGlmaWNhdGlvbn0sIGVhY2ggJFxpbnNldHt2fXtcbGl2YXJ7Vn17aS0xfX0kIGlzIGEgbGVhZiBvciBoYXMKICAgICAgICAgICAgdHdvIGNoaWxkcmVuIHRoYXQgYXJlIGF0IGRlcHRoICRpJC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfQogICAgICAgICAgIEFzICRHJCBpcyBcdGVybXJlZltjZD1iYWxhbmNlZC1iaW5hcnktdHJlZXMsbmFtZT1iYWxhbmNlZC1iaW5hcnktdHJlZV17YmFsYW5jZWR9IGFuZCAkXGdkZXB0aHtHfT1uPmkkLCAkXGxpdmFye1Z9e2ktMX0kIGNhbm5vdCBjb250YWluCiAgICAgICAgICAgIGxlYXZlcy4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfVt0eXBlPWNvbmNsdXNpb25dCiAgICAgICAgICAgVGh1cyAkXGVxe1xjYXJke1xsaXZhcntWfWl9LHtcYXRpbWVzW2Nkb3RdezIsXGNhcmR7XGxpdmFye1Z9e2ktMX19fX0se1xhdGltZXNbY2RvdF17MixccG93ZXIye2ktMX19fSxccG93ZXIyaX0kLgogICAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICAgIFxlbmR7c3BmY2FzZX0KICAgICAgXGVuZHtzcGZjYXNlc30KICAgIFxlbmR7c3Byb29mfQogIFxpdGVtIAogICAgXGJlZ2lue2Fzc2VydGlvbn1baWQ9ZmJidCx0eXBlPWNvcm9sbGFyeV0JCiAgICAgIEEgZnVsbHkgYmFsYW5jZWQgdHJlZSBvZiBkZXB0aCAkZCQgaGFzICRccG93ZXIye2QrMX0tMSQgbm9kZXMuCiAgICBcZW5ke2Fzc2VydGlvbn0KICBcaXRlbQogICAgICBcYmVnaW57c3Byb29mfVtmb3I9ZmJidCxpZD1mYmJ0LXBmXXt9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBMZXQgJFxkZWZlcXtHfXtcdHVwe1YsRX19JCBiZSBhIGZ1bGx5IGJhbGFuY2VkIHRyZWUKICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBUaGVuICRcY2FyZHtWfT1cU3VtZnJvbXRve2l9MWR7XHBvd2VyMml9PSBccG93ZXIye2QrMX0tMSQuCiAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICBcZW5ke3Nwcm9vZn0KICAgIFxlbmR7aXRlbWl6ZX0KICBcZW5ke2ZyYW1lfQpcYmVnaW57bm90ZX0KICBcYmVnaW57b210ZXh0fVt0eXBlPWNvbmNsdXNpb24sZm9yPWJpbmFyeS10cmVlXQogICAgVGhpcyBzaG93cyB0aGF0IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyBncm93IGluIGJyZWFkdGggdmVyeSBxdWlja2x5LCBhIGNvbnNlcXVlbmNlIG9mCiAgICB0aGlzIGlzIHRoYXQgdGhleSBhcmUgdmVyeSBzaGFsbG93IChhbmQgdGhpcyBjb21wdXRlIHZlcnkgZmFzdCksIHdoaWNoIGlzIHRoZSBlc3NlbmNlIG9mCiAgICB0aGUgbmV4dCByZXN1bHQuCiAgXGVuZHtvbXRleHR9ClxlbmR7bm90ZX0KXGVuZHttb2R1bGV9CgolJSUgTG9jYWwgVmFyaWFibGVzOiAKJSUlIG1vZGU6IExhVGVYCiUlJSBUZVgtbWFzdGVyOiAiYWxsIgolJSUgRW5kOiBcZW5ke2RvY3VtZW50fQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXN0ZXg8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/stex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogQXV0aG9yOiBDb25zdGFudGluIEp1Y292c2NoaSAoYy5qdWNvdnNjaGlAamFjb2JzLXVuaXZlcnNpdHkuZGUpCiAqIExpY2VuY2U6IE1JVAogKi8KCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3RleCIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSAKeyAgICAKICAgIGZ1bmN0aW9uIHB1c2hDb21tYW5kKHN0YXRlLCBjb21tYW5kKSB7CglzdGF0ZS5jbWRTdGF0ZS5wdXNoKGNvbW1hbmQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBlZWtDb21tYW5kKHN0YXRlKSB7IAoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKQoJICAgIHJldHVybiBzdGF0ZS5jbWRTdGF0ZVtzdGF0ZS5jbWRTdGF0ZS5sZW5ndGgtMV07CgllbHNlCgkgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gcG9wQ29tbWFuZChzdGF0ZSkgewoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKSB7CgkgICAgdmFyIHBsdWcgPSBzdGF0ZS5jbWRTdGF0ZS5wb3AoKTsKCSAgICBwbHVnLmNsb3NlQnJhY2tldCgpOwoJfQkgICAgCiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNb3N0UG93ZXJmdWwoc3RhdGUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jbWRTdGF0ZTsKICAgICAgZm9yICh2YXIgaSA9IGNvbnRleHQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCSAgdmFyIHBsdWcgPSBjb250ZXh0W2ldOwoJICBpZiAocGx1Zy5uYW1lPT0iREVGQVVMVCIpCgkgICAgICBjb250aW51ZTsKCSAgcmV0dXJuIHBsdWcuc3R5bGVJZGVudGlmaWVyKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gYWRkUGx1Z2luUGF0dGVybihwbHVnaW5OYW1lLCBjbWRTdHlsZSwgYnJhY2tldHMsIHN0eWxlcykgewoJcmV0dXJuIGZ1bmN0aW9uICgpIHsKCSAgICB0aGlzLm5hbWU9cGx1Z2luTmFtZTsKCSAgICB0aGlzLmJyYWNrZXRObyA9IDA7CgkgICAgdGhpcy5zdHlsZT1jbWRTdHlsZTsKCSAgICB0aGlzLnN0eWxlcyA9IHN0eWxlczsKCSAgICB0aGlzLmJyYWNrZXRzID0gYnJhY2tldHM7CgoJICAgIHRoaXMuc3R5bGVJZGVudGlmaWVyID0gZnVuY3Rpb24oY29udGVudCkgewoJCWlmICh0aGlzLmJyYWNrZXRObzw9dGhpcy5zdHlsZXMubGVuZ3RoKQoJCSAgICByZXR1cm4gdGhpcy5zdHlsZXNbdGhpcy5icmFja2V0Tm8tMV07CgkJZWxzZQoJCSAgICByZXR1cm4gbnVsbDsKCSAgICB9OwoJICAgIHRoaXMub3BlbkJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkJdGhpcy5icmFja2V0Tm8rKzsKCQlyZXR1cm4gImJyYWNrZXQiOwoJICAgIH07CgkgICAgdGhpcy5jbG9zZUJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkgICAgfTsKCX0KICAgIH0KCiAgICB2YXIgcGx1Z2lucyA9IG5ldyBBcnJheSgpOwogICAKICAgIHBsdWdpbnNbImltcG9ydG1vZHVsZSJdID0gYWRkUGx1Z2luUGF0dGVybigiaW1wb3J0bW9kdWxlIiwgInRhZyIsICJ7WyIsIFsic3RyaW5nIiwgImJ1aWx0aW4iXSk7CiAgICBwbHVnaW5zWyJkb2N1bWVudGNsYXNzIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJ7WyIsIFsiIiwgImF0b20iXSk7CiAgICBwbHVnaW5zWyJ1c2VwYWNrYWdlIl0gPSBhZGRQbHVnaW5QYXR0ZXJuKCJkb2N1bWVudGNsYXNzIiwgInRhZyIsICJbIiwgWyJhdG9tIl0pOwogICAgcGx1Z2luc1siYmVnaW4iXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CiAgICBwbHVnaW5zWyJlbmQiXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAidGFnIiwgIlsiLCBbImF0b20iXSk7CgogICAgcGx1Z2luc1siREVGQVVMVCJdID0gZnVuY3Rpb24gKCkgewoJdGhpcy5uYW1lPSJERUZBVUxUIjsKCXRoaXMuc3R5bGU9InRhZyI7CgoJdGhpcy5zdHlsZUlkZW50aWZpZXIgPSBmdW5jdGlvbihjb250ZW50KSB7Cgl9OwoJdGhpcy5vcGVuQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07Cgl0aGlzLmNsb3NlQnJhY2tldCA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCX07CiAgICB9OwoKICAgIGZ1bmN0aW9uIHNldFN0YXRlKHN0YXRlLCBmKSB7CglzdGF0ZS5mID0gZjsKICAgIH0KCiAgICBmdW5jdGlvbiBub3JtYWwoc291cmNlLCBzdGF0ZSkgewoJaWYgKHNvdXJjZS5tYXRjaCgvXlxcW2EtekEtWkBdKy8pKSB7CgkgICAgdmFyIGNtZE5hbWUgPSBzb3VyY2UuY3VycmVudCgpOwoJICAgIGNtZE5hbWUgPSBjbWROYW1lLnN1YnN0cigxLCBjbWROYW1lLmxlbmd0aC0xKTsKCSAgICB2YXIgcGx1ZyA9IHBsdWdpbnNbY21kTmFtZV07CgkgICAgaWYgKHR5cGVvZihwbHVnKSA9PSAndW5kZWZpbmVkJykgewoJCXBsdWcgPSBwbHVnaW5zWyJERUZBVUxUIl07CgkgICAgfQoJICAgIHBsdWcgPSBuZXcgcGx1ZygpOwoJICAgIHB1c2hDb21tYW5kKHN0YXRlLCBwbHVnKTsKCSAgICBzZXRTdGF0ZShzdGF0ZSwgYmVnaW5QYXJhbXMpOwoJICAgIHJldHVybiBwbHVnLnN0eWxlOwoJfQoKICAgICAgICAvLyBlc2NhcGUgY2hhcmFjdGVycyAKICAgICAgICBpZiAoc291cmNlLm1hdGNoKC9eXFxbJCYlI3t9X10vKSkgewogICAgICAgICAgcmV0dXJuICJ0YWciOwogICAgICAgIH0KCiAgICAgICAgLy8gd2hpdGUgc3BhY2UgY29udHJvbCBjaGFyYWN0ZXJzCiAgICAgICAgaWYgKHNvdXJjZS5tYXRjaCgvXlxcWyw7IVwvXS8pKSB7CiAgICAgICAgICByZXR1cm4gInRhZyI7CiAgICAgICAgfQoKCXZhciBjaCA9IHNvdXJjZS5uZXh0KCk7CglpZiAoY2ggPT0gIiUiKSB7CiAgICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogJSBhdCBlbmQgb2YgaXRzIG93biBsaW5lOyBzdGF5IGluIHNhbWUgc3RhdGUKICAgICAgICAgICAgaWYgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgaW5DQ29tbWVudCk7CiAgICAgICAgICAgIH0KCSAgICByZXR1cm4gImNvbW1lbnQiOwoJfSAKCWVsc2UgaWYgKGNoPT0nfScgfHwgY2g9PSddJykgewoJICAgIHBsdWcgPSBwZWVrQ29tbWFuZChzdGF0ZSk7CgkgICAgaWYgKHBsdWcpIHsKCQlwbHVnLmNsb3NlQnJhY2tldChjaCk7CgkJc2V0U3RhdGUoc3RhdGUsIGJlZ2luUGFyYW1zKTsKCSAgICB9IGVsc2UKCQlyZXR1cm4gImVycm9yIjsKCSAgICByZXR1cm4gImJyYWNrZXQiOwoJfSBlbHNlIGlmIChjaD09J3snIHx8IGNoPT0nWycpIHsKCSAgICBwbHVnID0gcGx1Z2luc1siREVGQVVMVCJdOwkgICAgCgkgICAgcGx1ZyA9IG5ldyBwbHVnKCk7CgkgICAgcHVzaENvbW1hbmQoc3RhdGUsIHBsdWcpOwoJICAgIHJldHVybiAiYnJhY2tldCI7CSAgICAKCX0KCWVsc2UgaWYgKC9cZC8udGVzdChjaCkpIHsKCSAgICBzb3VyY2UuZWF0V2hpbGUoL1tcdy4lXS8pOwoJICAgIHJldHVybiAiYXRvbSI7Cgl9CgllbHNlIHsKCSAgICBzb3VyY2UuZWF0V2hpbGUoL1tcdy1fXS8pOwoJICAgIHJldHVybiBhcHBseU1vc3RQb3dlcmZ1bChzdGF0ZSk7Cgl9CiAgICB9CgogICAgZnVuY3Rpb24gaW5DQ29tbWVudChzb3VyY2UsIHN0YXRlKSB7Cglzb3VyY2Uuc2tpcFRvRW5kKCk7CglzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKCXJldHVybiAiY29tbWVudCI7CiAgICB9CgogICAgZnVuY3Rpb24gYmVnaW5QYXJhbXMoc291cmNlLCBzdGF0ZSkgewoJdmFyIGNoID0gc291cmNlLnBlZWsoKTsKCWlmIChjaCA9PSAneycgfHwgY2ggPT0gJ1snKSB7CgkgICB2YXIgbGFzdFBsdWcgPSBwZWVrQ29tbWFuZChzdGF0ZSk7CgkgICB2YXIgc3R5bGUgPSBsYXN0UGx1Zy5vcGVuQnJhY2tldChjaCk7CgkgICBzb3VyY2UuZWF0KGNoKTsKCSAgIHNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwoJICAgcmV0dXJuICJicmFja2V0IjsKCX0KCWlmICgvWyBcdFxyXS8udGVzdChjaCkpIHsKCSAgICBzb3VyY2UuZWF0KGNoKTsKCSAgICByZXR1cm4gbnVsbDsKCX0KCXNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwoJbGFzdFBsdWcgPSBwZWVrQ29tbWFuZChzdGF0ZSk7CglpZiAobGFzdFBsdWcpIHsKCSAgICBwb3BDb21tYW5kKHN0YXRlKTsKCX0KICAgICAgICByZXR1cm4gbm9ybWFsKHNvdXJjZSwgc3RhdGUpOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7IHJldHVybiB7IGY6bm9ybWFsLCBjbWRTdGF0ZTpbXSB9OyB9LAoJIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykgeyByZXR1cm4geyBmOiBzLmYsIGNtZFN0YXRlOiBzLmNtZFN0YXRlLnNsaWNlKDAsIHMuY21kU3RhdGUubGVuZ3RoKSB9OyB9LAoJIAoJIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CgkgdmFyIHQgPSBzdGF0ZS5mKHN0cmVhbSwgc3RhdGUpOwoJIHZhciB3ID0gc3RyZWFtLmN1cnJlbnQoKTsKCSByZXR1cm4gdDsKICAgICB9CiB9Owp9KTsKCgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zdGV4IiwgInN0ZXgiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/test.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IHNUZVggbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InN0ZXguanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi90ZXN0L21vZGVfdGVzdC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Rlc3QvbW9kZV90ZXN0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+VGVzdHMgZm9yIHRoZSBzVGVYIE1vZGU8L2gxPgogICAgPGgyPkJhc2ljczwvaDI+CiAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KICAgICAgTVQgPSBNb2RlVGVzdDsKCiAgICAgIE1ULnRlc3QoJ2ZvbycsCiAgICAgICAgbnVsbCwgJ2ZvbycpOwoKICAgICAgTVQudGVzdCgnZm9vIGJhcicsCiAgICAgICAgbnVsbCwgJ2ZvbycsCiAgICAgICAgbnVsbCwgJyBiYXInKTsKICAgIDwvc2NyaXB0PgoKICAgIDxoMj5UYWdzPC9oMj4KICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgogICAgICBNVC50ZXN0KCdcXGJlZ2lue2RvY3VtZW50fVxuXFxlbmR7ZG9jdW1lbnR9JywKICAgICAgICAndGFnJywgICAgICdcXGJlZ2luJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYXRvbScsICAgICdkb2N1bWVudCcsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScsCiAgICAgICAgJ3RhZycsICAgICAnXFxlbmQnLAogICAgICAgICdicmFja2V0JywgJ3snLAogICAgICAgICdhdG9tJywgICAgJ2RvY3VtZW50JywKICAgICAgICAnYnJhY2tldCcsICd9Jyk7CgogICAgICBNVC50ZXN0KCdcXGJlZ2lue2VxdWF0aW9ufVxuICBFPW1jXjJcblxcZW5ke2VxdWF0aW9ufScsCiAgICAgICAgJ3RhZycsICAgICAnXFxiZWdpbicsCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ2F0b20nLCAgICAnZXF1YXRpb24nLAogICAgICAgICdicmFja2V0JywgJ30nLAogICAgICAgIG51bGwsICAgICAgJyAnLAogICAgICAgIG51bGwsICAgICAgJyAnLAogICAgICAgIG51bGwsICAgICAgJ0UnLAogICAgICAgIG51bGwsICAgICAgJz1tYycsCiAgICAgICAgbnVsbCwgICAgICAnXjInLAogICAgICAgICd0YWcnLCAgICAgJ1xcZW5kJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYXRvbScsICAgICdlcXVhdGlvbicsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScpOwoKICAgICAgTVQudGVzdCgnXFxiZWdpbnttb2R1bGV9W10nLAogICAgICAgICd0YWcnLCAgICAgJ1xcYmVnaW4nLAogICAgICAgICdicmFja2V0JywgJ3snLAogICAgICAgICdhdG9tJywgICAgJ21vZHVsZScsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScsCiAgICAgICAgJ2JyYWNrZXQnLCAnWycsCiAgICAgICAgJ2JyYWNrZXQnLCAnXScpOwoKICAgICAgTVQudGVzdCgnXFxiZWdpbnttb2R1bGV9W2lkPWJidC1zaXplXScsCiAgICAgICAgJ3RhZycsICAgICAnXFxiZWdpbicsCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ2F0b20nLCAgICAnbW9kdWxlJywKICAgICAgICAnYnJhY2tldCcsICd9JywKICAgICAgICAnYnJhY2tldCcsICdbJywKICAgICAgICBudWxsLCAgICAgICdpZCcsCiAgICAgICAgbnVsbCwgICAgICAnPWJidC1zaXplJywKICAgICAgICAnYnJhY2tldCcsICddJyk7CgogICAgICBNVC50ZXN0KCdcXGltcG9ydG1vZHVsZVtiLWItdF17Yi1iLXR9JywKICAgICAgICAndGFnJywgICAgICdcXGltcG9ydG1vZHVsZScsCiAgICAgICAgJ2JyYWNrZXQnLCAnWycsCiAgICAgICAgJ3N0cmluZycsICAgJ2ItYi10JywKICAgICAgICAnYnJhY2tldCcsICddJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYnVpbHRpbicsICdiLWItdCcsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScpOwoKICAgICAgTVQudGVzdCgnXFxpbXBvcnRtb2R1bGVbXFxLV0FSQ3NsaWRlc3tkbWF0aC9lbi9jYXJkaW5hbGl0eX1de2NhcmR9JywKICAgICAgICAndGFnJywgICAgICdcXGltcG9ydG1vZHVsZScsCiAgICAgICAgJ2JyYWNrZXQnLCAnWycsCiAgICAgICAgJ3RhZycsICAgICAnXFxLV0FSQ3NsaWRlcycsCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ3N0cmluZycsICAgJ2RtYXRoJywKICAgICAgICAnc3RyaW5nJywgICAnL2VuJywKICAgICAgICAnc3RyaW5nJywgICAnL2NhcmRpbmFsaXR5JywKICAgICAgICAnYnJhY2tldCcsICd9JywKICAgICAgICAnYnJhY2tldCcsICddJywKICAgICAgICAnYnJhY2tldCcsICd7JywKICAgICAgICAnYnVpbHRpbicsICdjYXJkJywKICAgICAgICAnYnJhY2tldCcsICd9Jyk7CgogICAgICBNVC50ZXN0KCdcXFBTZm9yUERGWzFdeyMxfScsIC8vIGNvdWxkIHRyZWF0ICMxIHNwZWNpYWxseQogICAgICAgICd0YWcnLCAgICAgJ1xcUFNmb3JQREYnLAogICAgICAgICdicmFja2V0JywgJ1snLAogICAgICAgICdhdG9tJywgICAgJzEnLAogICAgICAgICdicmFja2V0JywgJ10nLAogICAgICAgICdicmFja2V0JywgJ3snLAogICAgICAgIG51bGwsICAgICAgJyMxJywKICAgICAgICAnYnJhY2tldCcsICd9Jyk7CiAgICA8L3NjcmlwdD4KCiAgICA8aDI+Q29tbWVudHM8L2gyPgogICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CiAgICAgIE1ULnRlc3QoJyUgZm9vJywKICAgICAgICAnY29tbWVudCcsICclJywKICAgICAgICAnY29tbWVudCcsICcgZm9vJyk7CgogICAgICBNVC50ZXN0KCdcXGl0ZW0lIGJhcicsCiAgICAgICAgJ3RhZycsICAgICAnXFxpdGVtJywKICAgICAgICAnY29tbWVudCcsICclJywKICAgICAgICAnY29tbWVudCcsICcgYmFyJyk7CgogICAgICBNVC50ZXN0KCcgJSBcXGl0ZW0nLAogICAgICAgIG51bGwsICAgICAgJyAnLAogICAgICAgICdjb21tZW50JywgJyUnLAogICAgICAgICdjb21tZW50JywgJyBcXGl0ZW0nKTsKCiAgICAgIE1ULnRlc3QoJyVcbmZvbycsCiAgICAgICAgJ2NvbW1lbnQnLCAnJScsCiAgICAgICAgbnVsbCwgJ2ZvbycpOwogICAgPC9zY3JpcHQ+CgogICAgPGgyPkVycm9yczwvaDI+CiAgICA8c2NyaXB0IGxhbmd1YWdlPSJqYXZhc2NyaXB0Ij4KICAgICAgTVQudGVzdCgnXFxiZWdpbn17JywKICAgICAgICAndGFnJywgICAgICdcXGJlZ2luJywKICAgICAgICAnZXJyb3InLCAgICd9JywKICAgICAgICAnYnJhY2tldCcsICd7Jyk7CgogICAgICBNVC50ZXN0KCdcXGl0ZW1deycsCiAgICAgICAgJ3RhZycsICAgICAnXFxpdGVtJywKICAgICAgICAnZXJyb3InLCAgICddJywKICAgICAgICAnYnJhY2tldCcsICd7Jyk7CgogICAgICBNVC50ZXN0KCclIH0nLAogICAgICAgICdjb21tZW50JywgJyUnLAogICAgICAgICdjb21tZW50JywgJyB9Jyk7CiAgICA8L3NjcmlwdD4KCiAgICA8aDI+Q2hhcmFjdGVyIEVzY2FwZXM8L2gyPgogICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CiAgICAgIE1ULnRlc3QoJ3RoZSBcXCMga2V5JywKICAgICAgICBudWxsLCAgJ3RoZScsCiAgICAgICAgbnVsbCwgICcgJywKICAgICAgICAndGFnJywgJ1xcIycsCiAgICAgICAgbnVsbCwgICcga2V5Jyk7CgogICAgICBNVC50ZXN0KCdhIFxcJDUgc3RldHNvbicsCiAgICAgICAgbnVsbCwgJ2EnLAogICAgICAgIG51bGwsICcgJywKICAgICAgICAndGFnJywgJ1xcJCcsCiAgICAgICAgJ2F0b20nLCA1LAogICAgICAgIG51bGwsICcgc3RldHNvbicpOwoKICAgICAgTVQudGVzdCgnMTAwXFwlIGJlZWYnLAogICAgICAgICdhdG9tJywgJzEwMCcsCiAgICAgICAgJ3RhZycsICdcXCUnLAogICAgICAgIG51bGwsICcgYmVlZicpOwoKICAgICAgTVQudGVzdCgnTCBcXCYgTicsCiAgICAgICAgbnVsbCwgJ0wnLAogICAgICAgIG51bGwsICcgJywKICAgICAgICAndGFnJywgJ1xcJicsCiAgICAgICAgbnVsbCwgJyBOJyk7CgogICAgICBNVC50ZXN0KCdmb29cXF9iYXInLAogICAgICAgIG51bGwsICdmb28nLAogICAgICAgICd0YWcnLCAnXFxfJywKICAgICAgICBudWxsLCAnYmFyJyk7CgogICAgICBNVC50ZXN0KCdcXGVtcGh7XFx7fScsCiAgICAgICAgJ3RhZycsICAgICdcXGVtcGgnLAogICAgICAgICdicmFja2V0JywneycsCiAgICAgICAgJ3RhZycsICAgICdcXHsnLAogICAgICAgICdicmFja2V0JywnfScpOwoKICAgICAgTVQudGVzdCgnXFxlbXBoe1xcfX0nLAogICAgICAgICd0YWcnLCAgICAnXFxlbXBoJywKICAgICAgICAnYnJhY2tldCcsJ3snLAogICAgICAgICd0YWcnLCAgICAnXFx9JywKICAgICAgICAnYnJhY2tldCcsJ30nKTsKCiAgICAgIE1ULnRlc3QoJ3NlY3Rpb24gXFxTMScsCiAgICAgICAgbnVsbCwgICdzZWN0aW9uJywKICAgICAgICBudWxsLCAgJyAnLAogICAgICAgICd0YWcnLCAnXFxTJywKICAgICAgICAnYXRvbScsICAnMScpOwoKICAgICAgTVQudGVzdCgncGFyYSBcXFAyJywKICAgICAgICBudWxsLCAgJ3BhcmEnLAogICAgICAgIG51bGwsICAnICcsCiAgICAgICAgJ3RhZycsICdcXFAnLAogICAgICAgICdhdG9tJywgICcyJyk7CgogICAgPC9zY3JpcHQ+CgogICAgPGgyPlNwYWNpbmcgY29udHJvbDwvaDI+CgogICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+CiAgICAgIE1ULnRlc3QoJ3hcXCx5JywgLy8gdGhpbnNwYWNlCiAgICAgICAgbnVsbCwgICd4JywKICAgICAgICAndGFnJywgJ1xcLCcsCiAgICAgICAgbnVsbCwgICd5Jyk7CgogICAgICBNVC50ZXN0KCd4XFw7eScsIC8vIHRoaWNrc3BhY2UKICAgICAgICBudWxsLCAgJ3gnLAogICAgICAgICd0YWcnLCAnXFw7JywKICAgICAgICBudWxsLCAgJ3knKTsKCiAgICAgIE1ULnRlc3QoJ3hcXCF5JywgLy8gbmVnYXRpdmUgdGhpbnNwYWNlCiAgICAgICAgbnVsbCwgICd4JywKICAgICAgICAndGFnJywgJ1xcIScsCiAgICAgICAgbnVsbCwgICd5Jyk7CgogICAgICBNVC50ZXN0KCdKLlxcIEwuXFwgaXMnLCAvLyBwZXJpb2Qgbm90IGVuZGluZyBhIHNlbnRlbmNlCiAgICAgICAgbnVsbCwgJ0onLAogICAgICAgIG51bGwsICcuJywKICAgICAgICBudWxsLCAnXFwnLAogICAgICAgIG51bGwsICcgTCcsCiAgICAgICAgbnVsbCwgJy4nLAogICAgICAgIG51bGwsICdcXCcsCiAgICAgICAgbnVsbCwgJyBpcycpOyAvLyBtYXliZSBjb3VsZCBiZSBiZXR0ZXIKCiAgICAgIE1ULnRlc3QoJ1hcXEAuIFRoZScsIC8vIHBlcmlvZCBlbmRpbmcgYSBzZW50ZW5jZQogICAgICAgIG51bGwsICAnWCcsCiAgICAgICAgJ3RhZycsICdcXEAnLAogICAgICAgIG51bGwsICAnLicsCiAgICAgICAgbnVsbCwgICcgVGhlJyk7CgogICAgICBNVC50ZXN0KCd7XFxlbSBJZlxcL30gSScsIC8vIGl0YWxpYyBjb3JyZWN0aW9uCiAgICAgICAgJ2JyYWNrZXQnLCAneycsCiAgICAgICAgJ3RhZycsICAgICAnXFxlbScsCiAgICAgICAgbnVsbCwgICAgICAnICcsCiAgICAgICAgbnVsbCwgICAgICAnSWYnLAogICAgICAgICd0YWcnLCAgICAgJ1xcLycsCiAgICAgICAgJ2JyYWNrZXQnLCAnfScsCiAgICAgICAgbnVsbCwgICAgICAnICcsCiAgICAgICAgbnVsbCwgICAgICAnSScpOwoKICAgIDwvc2NyaXB0PgoKICAgIDxoMj5TdW1tYXJ5PC9oMj4KICAgIDxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgogICAgICBNVC5wcmludFN1bW1hcnkoKTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRpZGRseVdpa2kgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InRpZGRseXdpa2kuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ0aWRkbHl3aWtpLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGlkZGx5V2lraSBtb2RlPC9oMT4KCjxkaXY+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KIVRpZGRseVdpa2kgRm9ybWF0dGluZwoqIFJlbmRlcmVkIHZlcnNpb25zIGNhbiBiZSBmb3VuZCBhdDogaHR0cDovL3d3dy50aWRkbHl3aWtpLmNvbS8jUmVmZXJlbmNlCgp8IU9wdGlvbiAgICAgICAgICAgIHwgIVN5bnRheCAgICAgICAgICAgIHwKfGJvbGQgZm9udCAgICAgICAgICB8ICcnYm9sZCcnICAgICAgICAgICB8CnxpdGFsaWMgdHlwZSAgICAgICAgfCAvL2l0YWxpYy8vICAgICAgICAgfAp8dW5kZXJsaW5lZCB0ZXh0ICAgIHwgX191bmRlcmxpbmVkX18gICAgIHwKfHN0cmlrZXRocm91Z2ggdGV4dCB8IC0tc3RyaWtldGhyb3VnaC0tICB8CnxzdXBlcnNjcmlwdCB0ZXh0ICAgfCBzdXBlcl5ec2NyaXB0Xl4gICAgfAp8c3Vic2NyaXB0IHRleHQgICAgIHwgc3Vifn5zY3JpcHR+fiAgICAgIHwKfGhpZ2hsaWdodGVkIHRleHQgICB8IEBAaGlnaGxpZ2h0ZWRAQCAgICB8CnxwcmVmb3JtYXR0ZWQgdGV4dCAgfCB7e3twcmVmb3JtYXR0ZWR9fX0gfAoKIUJsb2NrIEVsZW1lbnRzCjw8PAohSGVhZGluZyAxCgohIUhlYWRpbmcgMgoKISEhSGVhZGluZyAzCgohISEhSGVhZGluZyA0CgohISEhIUhlYWRpbmcgNQo8PDwKCiEhTGlzdHMKPDw8CiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDEKKiogdW5vcmRlcmVkIGxpc3QsIGxldmVsIDIKKioqIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgojIG9yZGVyZWQgbGlzdCwgbGV2ZWwgMQojIyBvcmRlcmVkIGxpc3QsIGxldmVsIDIKIyMjIHVub3JkZXJlZCBsaXN0LCBsZXZlbCAzCgo7IGRlZmluaXRpb24gbGlzdCwgdGVybQo6IGRlZmluaXRpb24gbGlzdCwgZGVzY3JpcHRpb24KPDw8CgohIUJsb2NrcXVvdGVzCjw8PAo+IGJsb2NrcXVvdGUsIGxldmVsIDEKPj4gYmxvY2txdW90ZSwgbGV2ZWwgMgo+Pj4gYmxvY2txdW90ZSwgbGV2ZWwgMwoKPiBibG9ja3F1b3RlCjw8PAoKISFQcmVmb3JtYXR0ZWQgVGV4dAo8PDwKe3t7CnByZWZvcm1hdHRlZCAoZS5nLiBjb2RlKQp9fX0KPDw8CgohIUNvZGUgU2VjdGlvbnMKPDw8Cnt7ewpUZXh0IHN0eWxlIGNvZGUKfX19CgovL3t7ewpKUyBzdHlsZWQgY29kZS4gVGlkZGx5V2lraSBtaXhlZCBtb2RlIHNob3VsZCBzdXBwb3J0IGhpZ2hsaWdodGVyIHN3aXRjaGluZyBpbiB0aGUgZnV0dXJlLgovL319fQoKPCEtLXt7ey0tPgpYTUwgc3R5bGVkIGNvZGUuIFRpZGRseVdpa2kgbWl4ZWQgbW9kZSBzaG91bGQgc3VwcG9ydCBoaWdobGlnaHRlciBzd2l0Y2hpbmcgaW4gdGhlIGZ1dHVyZS4KPCEtLX19fS0tPgo8PDwKCiEhVGFibGVzCjw8PAp8Q3NzQ2xhc3N8awp8IWhlYWRpbmcgY29sdW1uIDF8IWhlYWRpbmcgY29sdW1uIDJ8Cnxyb3cgMSwgY29sdW1uIDF8cm93IDEsIGNvbHVtbiAyfAp8cm93IDIsIGNvbHVtbiAxfHJvdyAyLCBjb2x1bW4gMnwKfD58Q09MU1BBTnwKfFJPV1NQQU58IC4uLiB8Cnx+fCAuLi4gfAp8Q3NzUHJvcGVydHk6dmFsdWU7Li4ufCAuLi4gfAp8Y2FwdGlvbnxjCgonJ0Fubm90YXRpb246JycKKiBUaGUge3t7Pn19fSBtYXJrZXIgY3JlYXRlcyBhICJjb2xzcGFuIiwgY2F1c2luZyB0aGUgY3VycmVudCBjZWxsIHRvIG1lcmdlIHdpdGggdGhlIG9uZSB0byB0aGUgcmlnaHQuCiogVGhlIHt7e359fX0gbWFya2VyIGNyZWF0ZXMgYSAicm93c3BhbiIsIGNhdXNpbmcgdGhlIGN1cnJlbnQgY2VsbCB0byBtZXJnZSB3aXRoIHRoZSBvbmUgYWJvdmUuCjw8PAohIUltYWdlcyAvJSBUT0RPICUvCmNmLiBbW1RpZGRseVdpa2kuY29tfGh0dHA6Ly93d3cudGlkZGx5d2lraS5jb20vI0VtYmVkZGVkSW1hZ2VzXV0KCiFIeXBlcmxpbmtzCiogW1tXaWtpV29yZHN8V2lraVdvcmRdXSBhcmUgYXV0b21hdGljYWxseSB0cmFuc2Zvcm1lZCB0byBoeXBlcmxpbmtzIHRvIHRoZSByZXNwZWN0aXZlIHRpZGRsZXIKKiogdGhlIGF1dG9tYXRpYyB0cmFuc2Zvcm1hdGlvbiBjYW4gYmUgc3VwcHJlc3NlZCBieSBwcmVjZWRpbmcgdGhlIHJlc3BlY3RpdmUgV2lraVdvcmQgd2l0aCBhIHRpbGRlICh7e3t+fX19KToge3t7fldpa2lXb3JkfX19CiogW1tQcmV0dHlMaW5rc11dIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgYW5kIGNvbnRhaW4gdGhlIGRlc2lyZWQgdGlkZGxlciBuYW1lOiB7e3tbW3RpZGRsZXIgbmFtZV1dfX19CioqIG9wdGlvbmFsbHksIGEgY3VzdG9tIHRpdGxlIG9yIGRlc2NyaXB0aW9uIGNhbiBiZSBhZGRlZCwgc2VwYXJhdGVkIGJ5IGEgcGlwZSBjaGFyYWN0ZXIgKHt7e3x9fX0pOiB7e3tbW3RpdGxlfHRhcmdldF1dfX19PGJyPicnJ04uQi46JycnIEluIHRoaXMgY2FzZSwgdGhlIHRhcmdldCBjYW4gYWxzbyBiZSBhbnkgd2Vic2l0ZSAoaS5lLiBVUkwpLgoKIUN1c3RvbSBTdHlsaW5nCioge3t7QEBDc3NQcm9wZXJ0eTp2YWx1ZTtDc3NQcm9wZXJ0eTp2YWx1ZTsuLi5AQH19fTxicj4nJ04uQi46JycgQ1NTIGNvbG9yIGRlZmluaXRpb25zIHNob3VsZCB1c2UgbG93ZXJjYXNlIGxldHRlcnMgdG8gcHJldmVudCB0aGUgaW5hZHZlcnRlbnQgY3JlYXRpb24gb2YgV2lraVdvcmRzLgoqIDxodG1sPjxjb2RlPnt7Y3VzdG9tQ3NzQ2xhc3N7Li4ufX19PC9jb2RlPjwvaHRtbD4KKiByYXcgSFRNTCBjYW4gYmUgaW5zZXJ0ZWQgYnkgZW5jbG9zaW5nIHRoZSByZXNwZWN0aXZlIGNvZGUgaW4gSFRNTCB0YWdzOiB7e3s8aHRtbD4gLi4uIDwvaHRtbD59fX0KCiFTcGVjaWFsIE1hcmtlcnMKKiB7e3s8YnI+fX19IGZvcmNlcyBhIG1hbnVhbCBsaW5lIGJyZWFrCioge3t7LS0tLX19fSBjcmVhdGVzIGEgaG9yaXpvbnRhbCBydWxlcgoqIFtbSFRNTCBlbnRpdGllc3xodHRwOi8vd3d3LnRpZGRseXdpa2kuY29tLyNIdG1sRW50aXRpZXNdXQoqIFtbSFRNTCBlbnRpdGllcyBsb2NhbHxIdG1sRW50aXRpZXNdXQoqIHt7ezw8bWFjcm9OYW1lPj59fX0gY2FsbHMgdGhlIHJlc3BlY3RpdmUgW1ttYWNyb3xNYWNyb3NdXQoqIFRvIGhpZGUgdGV4dCB3aXRoaW4gYSB0aWRkbGVyIHNvIHRoYXQgaXQgaXMgbm90IGRpc3BsYXllZCwgaXQgY2FuIGJlIHdyYXBwZWQgaW4ge3t7LyV9fX0gYW5kIHt7eyUvfX19Ljxici8+VGhpcyBjYW4gYmUgYSB1c2VmdWwgdHJpY2sgZm9yIGhpZGluZyBkcmFmdHMgb3IgYW5ub3RhdGluZyBjb21wbGV4IG1hcmt1cC4KKiBUbyBwcmV2ZW50IHdpa2kgbWFya3VwIGZyb20gdGFraW5nIGVmZmVjdCBmb3IgYSBwYXJ0aWN1bGFyIHNlY3Rpb24sIHRoYXQgc2VjdGlvbiBjYW4gYmUgZW5jbG9zZWQgaW4gdGhyZWUgZG91YmxlIHF1b3RlczogZS5nLiB7e3siIiJXaWtpV29yZCIiIn19fS4KPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6ICd0aWRkbHl3aWtpJywgICAgICAKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBlbnRlck1vZGU6ICdrZWVwJywKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+VGlkZGx5V2lraSBtb2RlIHN1cHBvcnRzIGEgc2luZ2xlIGNvbmZpZ3VyYXRpb24uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtdGlkZGx5d2lraTwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZGVmYXVsdCBzcGFuLmNtLWhlYWRlciB7Y29sb3I6IGJsdWU7IGZvbnQtd2VpZ2h0OmJvbGQ7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29kZSB7Y29sb3I6ICNhNTA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tY29kZS1pbmxpbmUge2NvbG9yOiAjNjYwO30KCi5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1xdW90ZSB7Y29sb3I6ICM1NTU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbGlzdCB7Y29sb3I6ICNjNjA7fQouY20tcy1kZWZhdWx0IHNwYW4uY20taHIge2NvbG9yOiAjOTk5O30KLmNtLXMtZGVmYXVsdCBzcGFuLmNtLWVtIHtmb250LXN0eWxlOiBpdGFsaWM7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tbGluay1leHRlcm5hbCB7Y29sb3I6IGJsdWU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tYnJhY2Uge2NvbG9yOiAjMTcwOyBmb250LXdlaWdodDogYm9sZDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS1tYWNybyB7Y29sb3I6ICM5RTM4MjU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tdGFibGUge2NvbG9yOiBibHVlOyBmb250LXdlaWdodDogYm9sZDt9Ci5jbS1zLWRlZmF1bHQgc3Bhbi5jbS13YXJuaW5nIHtjb2xvcjogcmVkOyBmb250LXdlaWdodDogYm9sZDt9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tdW5kZXJsaW5lZCB7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fQouY20tcy1kZWZhdWx0IHNwYW4uY20tbGluZS10aHJvdWdoIHt0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDt9CgouY20tcy1kZWZhdWx0IHNwYW4uY20tY29tbWVudCB7Y29sb3I6ICM2NjY7fQoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/tiddlywiki/tiddlywiki.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqKgp8JydOYW1lJyd8dGlkZGx5d2lraS5qc3wKfCcnRGVzY3JpcHRpb24nJ3xFbmFibGVzIFRpZGRseVdpa2l5IHN5bnRheCBoaWdobGlnaHRpbmcgdXNpbmcgQ29kZU1pcnJvcnwKfCcnQXV0aG9yJyd8UE1hcmlvfAp8JydWZXJzaW9uJyd8MC4xLjd8CnwnJ1N0YXR1cycnfCcnc3RhYmxlJyd8CnwnJ1NvdXJjZScnfFtbR2l0SHVifGh0dHBzOi8vZ2l0aHViLmNvbS9wbWFyaW8vQ29kZU1pcnJvcjIvYmxvYi90dy1zeW50YXgvbW9kZS90aWRkbHl3aWtpXV18CnwnJ0RvY3VtZW50YXRpb24nJ3xodHRwOi8vY29kZW1pcnJvci50aWRkbHlzcGFjZS5jb20vfAp8JydMaWNlbnNlJyd8W1tNSVQgTGljZW5zZXxodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocF1dfAp8JydDb3JlVmVyc2lvbicnfDIuNS4wfAp8JydSZXF1aXJlcycnfGNvZGVtaXJyb3IuanN8CnwnJ0tleXdvcmRzJyd8c3ludGF4IGhpZ2hsaWdodGluZyBjb2xvciBjb2RlIG1pcnJvciBjb2RlbWlycm9yfAohIEluZm8KQ29yZVZlcnNpb24gcGFyYW1ldGVyIGlzIG5lZWRlZCBmb3IgVGlkZGx5V2lraSBvbmx5IQoqKiovCi8ve3t7CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgidGlkZGx5d2lraSIsIGZ1bmN0aW9uIChjb25maWcsIHBhcnNlckNvbmZpZykgewoJdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdDsKCgkvLyBUb2tlbml6ZXIKCXZhciB0ZXh0d29yZHMgPSBmdW5jdGlvbiAoKSB7CgkJZnVuY3Rpb24ga3codHlwZSkgewoJCQlyZXR1cm4gewoJCQkJdHlwZTogdHlwZSwKCQkJCXN0eWxlOiAidGV4dCIKCQkJfTsKCQl9CgkJcmV0dXJuIHt9OwoJfSgpOwoKCXZhciBrZXl3b3JkcyA9IGZ1bmN0aW9uICgpIHsKCQlmdW5jdGlvbiBrdyh0eXBlKSB7CgkJCXJldHVybiB7IHR5cGU6IHR5cGUsIHN0eWxlOiAibWFjcm8ifTsKCQl9CgkJcmV0dXJuIHsKCQkJImFsbFRhZ3MiOiBrdygnYWxsVGFncycpLCAiY2xvc2VBbGwiOiBrdygnY2xvc2VBbGwnKSwgImxpc3QiOiBrdygnbGlzdCcpLAoJCQkibmV3Sm91cm5hbCI6IGt3KCduZXdKb3VybmFsJyksICJuZXdUaWRkbGVyIjoga3coJ25ld1RpZGRsZXInKSwKCQkJInBlcm1hdmlldyI6IGt3KCdwZXJtYXZpZXcnKSwgInNhdmVDaGFuZ2VzIjoga3coJ3NhdmVDaGFuZ2VzJyksCgkJCSJzZWFyY2giOiBrdygnc2VhcmNoJyksICJzbGlkZXIiOiBrdygnc2xpZGVyJyksCSJ0YWJzIjoga3coJ3RhYnMnKSwKCQkJInRhZyI6IGt3KCd0YWcnKSwgInRhZ2dpbmciOiBrdygndGFnZ2luZycpLAkidGFncyI6IGt3KCd0YWdzJyksCgkJCSJ0aWRkbGVyIjoga3coJ3RpZGRsZXInKSwgInRpbWVsaW5lIjoga3coJ3RpbWVsaW5lJyksCgkJCSJ0b2RheSI6IGt3KCd0b2RheScpLCAidmVyc2lvbiI6IGt3KCd2ZXJzaW9uJyksCSJvcHRpb24iOiBrdygnb3B0aW9uJyksCgoJCQkid2l0aCI6IGt3KCd3aXRoJyksCgkJCSJmaWx0ZXIiOiBrdygnZmlsdGVyJykKCQl9OwoJfSgpOwoKCXZhciBpc1NwYWNlTmFtZSA9IC9bXHdfXC1dL2ksCgkJcmVIUiA9IC9eXC1cLVwtXC0rJC8sCQkJCQkvLyA8aHI+CgkJcmVXaWtpQ29tbWVudFN0YXJ0ID0gL15cL1wqXCpcKiQvLAkJLy8gLyoqKgoJCXJlV2lraUNvbW1lbnRTdG9wID0gL15cKlwqXCpcLyQvLAkJLy8gKioqLwoJCXJlQmxvY2tRdW90ZSA9IC9ePDw8JC8sCgoJCXJlSnNDb2RlU3RhcnQgPSAvXlwvXC9ce1x7XHskLywJCQkvLyAvL3t7eyBqcyBibG9jayBzdGFydAoJCXJlSnNDb2RlU3RvcCA9IC9eXC9cL1x9XH1cfSQvLAkJCS8vIC8vfX19IGpzIHN0b3AKCQlyZVhtbENvZGVTdGFydCA9IC9ePCEtLVx7XHtcey0tPiQvLAkJLy8geG1sIGJsb2NrIHN0YXJ0CgkJcmVYbWxDb2RlU3RvcCA9IC9ePCEtLVx9XH1cfS0tPiQvLAkJLy8geG1sIHN0b3AKCgkJcmVDb2RlQmxvY2tTdGFydCA9IC9eXHtce1x7JC8sCQkJLy8ge3t7IFRXIHRleHQgZGl2IGJsb2NrIHN0YXJ0CgkJcmVDb2RlQmxvY2tTdG9wID0gL15cfVx9XH0kLywJCQkvLyB9fX0gVFcgdGV4dCBzdG9wCgoJCXJlQ29kZVN0YXJ0ID0gL1x7XHtcey8sCQkJCQkvLyB7e3sgY29kZSBzcGFuIHN0YXJ0CgkJcmVVbnRpbENvZGVTdG9wID0gLy4qP1x9XH1cfS87CgoJZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikgewoJCXN0YXRlLnRva2VuaXplID0gZjsKCQlyZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKCX0KCgkvLyB1c2VkIGZvciBzdHJpbmdzCglmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBlbmQpIHsKCQl2YXIgZXNjYXBlZCA9IGZhbHNlLAoJCQluZXh0OwoJCXdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKCQkJaWYgKG5leHQgPT0gZW5kICYmICFlc2NhcGVkKSByZXR1cm4gZmFsc2U7CgkJCWVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CgkJfQoJCXJldHVybiBlc2NhcGVkOwoJfQoKCS8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXQKCS8vIGNvbnNpbmcgdXAgdG9ucyBvZiBvYmplY3RzLgoJdmFyIHR5cGUsIGNvbnRlbnQ7CgoJZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSwgY29udCkgewoJCXR5cGUgPSB0cDsKCQljb250ZW50ID0gY29udDsKCQlyZXR1cm4gc3R5bGU7Cgl9CgoJZnVuY3Rpb24ganNUb2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBzb2wgPSBzdHJlYW0uc29sKCksIAoJCQljaCwgdGNoOwoJCQkKCQlzdGF0ZS5ibG9jayA9IGZhbHNlOwkvLyBpbmRpY2F0ZXMgdGhlIHN0YXJ0IG9mIGEgY29kZSBibG9jay4KCgkJY2ggPSBzdHJlYW0ucGVlaygpOyAJLy8gZG9uJ3QgZWF0LCB0byBtYWtlIG1hdGNoaW5nIHNpbXBsZXIKCQkKCQkvLyBjaGVjayBzdGFydCBvZiAgYmxvY2tzCgkJaWYgKHNvbCAmJiAvWzxcL1wqe31cLV0vLnRlc3QoY2gpKSB7CgkJCWlmIChzdHJlYW0ubWF0Y2gocmVDb2RlQmxvY2tTdGFydCkpIHsKCQkJCXN0YXRlLmJsb2NrID0gdHJ1ZTsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuQ29kZSk7CgkJCX0KCQkJaWYgKHN0cmVhbS5tYXRjaChyZUJsb2NrUXVvdGUpKSB7CgkJCQlyZXR1cm4gcmV0KCdxdW90ZScsICdxdW90ZScpOwoJCQl9CgkJCWlmIChzdHJlYW0ubWF0Y2gocmVXaWtpQ29tbWVudFN0YXJ0KSB8fCBzdHJlYW0ubWF0Y2gocmVXaWtpQ29tbWVudFN0b3ApKSB7CgkJCQlyZXR1cm4gcmV0KCdjb2RlJywgJ2NvZGUnKTsKCQkJfQoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlSnNDb2RlU3RhcnQpIHx8IHN0cmVhbS5tYXRjaChyZUpzQ29kZVN0b3ApIHx8IHN0cmVhbS5tYXRjaChyZVhtbENvZGVTdGFydCkgfHwgc3RyZWFtLm1hdGNoKHJlWG1sQ29kZVN0b3ApKSB7CgkJCQlyZXR1cm4gcmV0KCdjb2RlJywgJ2NvZGUnKTsKCQkJfQoJCQlpZiAoc3RyZWFtLm1hdGNoKHJlSFIpKSB7CgkJCQlyZXR1cm4gcmV0KCdocicsICdocicpOwoJCQl9CgkJfSAvLyBzb2wKCQljaCA9IHN0cmVhbS5uZXh0KCk7CgoJCWlmIChzb2wgJiYgL1tcL1wqISM7Oj58XS8udGVzdChjaCkpIHsKCQkJaWYgKGNoID09ICIhIikgeyAvLyB0dyBoZWFkZXIKCQkJCXN0cmVhbS5za2lwVG9FbmQoKTsKCQkJCXJldHVybiByZXQoImhlYWRlciIsICJoZWFkZXIiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIioiKSB7IC8vIHR3IGxpc3QKCQkJCXN0cmVhbS5lYXRXaGlsZSgnKicpOwoJCQkJcmV0dXJuIHJldCgibGlzdCIsICJsaXN0Iik7CgkJCX0KCQkJaWYgKGNoID09ICIjIikgeyAvLyB0dyBudW1iZXJlZCBsaXN0CgkJCQlzdHJlYW0uZWF0V2hpbGUoJyMnKTsKCQkJCXJldHVybiByZXQoImxpc3QiLCAibGlzdCIpOwoJCQl9CgkJCWlmIChjaCA9PSAiOyIpIHsgLy8gZGVmaW5pdGlvbiBsaXN0LCB0ZXJtCgkJCQlzdHJlYW0uZWF0V2hpbGUoJzsnKTsKCQkJCXJldHVybiByZXQoImxpc3QiLCAibGlzdCIpOwoJCQl9CgkJCWlmIChjaCA9PSAiOiIpIHsgLy8gZGVmaW5pdGlvbiBsaXN0LCBkZXNjcmlwdGlvbgoJCQkJc3RyZWFtLmVhdFdoaWxlKCc6Jyk7CgkJCQlyZXR1cm4gcmV0KCJsaXN0IiwgImxpc3QiKTsKCQkJfQoJCQlpZiAoY2ggPT0gIj4iKSB7IC8vIHNpbmdsZSBsaW5lIHF1b3RlCgkJCQlzdHJlYW0uZWF0V2hpbGUoIj4iKTsKCQkJCXJldHVybiByZXQoInF1b3RlIiwgInF1b3RlIik7CgkJCX0KCQkJaWYgKGNoID09ICd8JykgewoJCQkJcmV0dXJuIHJldCgndGFibGUnLCAndGFibGUnKTsKCQkJfQoJCX0KCgkJaWYgKGNoID09ICd7JyAmJiBzdHJlYW0ubWF0Y2goL1x7XHsvKSkgewoJCQlyZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdHdUb2tlbkNvZGUpOwoJCX0KCgkJLy8gcnVkaW1lbnRhcnkgaHRtbDovLyBmaWxlOi8vIGxpbmsgbWF0Y2hpbmcuIFRXIGtub3dzIG11Y2ggbW9yZSAuLi4KCQlpZiAoL1toZl0vaS50ZXN0KGNoKSkgewoJCQlpZiAoL1t0aV0vaS50ZXN0KHN0cmVhbS5wZWVrKCkpICYmIHN0cmVhbS5tYXRjaCgvXGIodHRwcz98dHB8aWxlKTpcL1wvW1wtQS1aMC05KyZAI1wvJT89fl98JCE6LC47XSpbQS1aMC05KyZAI1wvJT1+X3wkXS9pKSkgewoJCQkJcmV0dXJuIHJldCgibGluay1leHRlcm5hbCIsICJsaW5rLWV4dGVybmFsIik7CgkJCX0KCQl9CgkJLy8ganVzdCBhIGxpdHRsZSBzdHJpbmcgaW5kaWNhdG9yLCBkb24ndCB3YW50IHRvIGhhdmUgdGhlIHdob2xlIHN0cmluZyBjb3ZlcmVkCgkJaWYgKGNoID09ICciJykgewoJCQlyZXR1cm4gcmV0KCdzdHJpbmcnLCAnc3RyaW5nJyk7CgkJfQoJCWlmIChjaCA9PSAnficpIHsJLy8gX25vXyBDYW1lbENhc2UgaW5kaWNhdG9yIHNob3VsZCBiZSBib2xkCgkJCXJldHVybiByZXQoJ3RleHQnLCAnYnJhY2UnKTsKCQl9CgkJaWYgKC9bXFtcXV0vLnRlc3QoY2gpKSB7IC8vIGNoZWNrIGZvciBbWy4uXV0KCQkJaWYgKHN0cmVhbS5wZWVrKCkgPT0gY2gpIHsKCQkJCXN0cmVhbS5uZXh0KCk7CgkJCQlyZXR1cm4gcmV0KCdicmFjZScsICdicmFjZScpOwoJCQl9CgkJfQoJCWlmIChjaCA9PSAiQCIpIHsJLy8gY2hlY2sgZm9yIHNwYWNlIGxpbmsuIFRPRE8gZml4IEBALi4uQEAgaGlnaGxpZ2h0aW5nCgkJCXN0cmVhbS5lYXRXaGlsZShpc1NwYWNlTmFtZSk7CgkJCXJldHVybiByZXQoImxpbmstZXh0ZXJuYWwiLCAibGluay1leHRlcm5hbCIpOwoJCX0KCQlpZiAoL1xkLy50ZXN0KGNoKSkgewkvLyBudW1iZXJzCgkJCXN0cmVhbS5lYXRXaGlsZSgvXGQvKTsKCQkJcmV0dXJuIHJldCgibnVtYmVyIiwgIm51bWJlciIpOwoJCX0KCQlpZiAoY2ggPT0gIi8iKSB7IC8vIHR3IGludmlzaWJsZSBjb21tZW50CgkJCWlmIChzdHJlYW0uZWF0KCIlIikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuQ29tbWVudCk7CgkJCX0KCQkJZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7IC8vIAoJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5FbSk7CgkJCX0KCQl9CgkJaWYgKGNoID09ICJfIikgeyAvLyB0dyB1bmRlcmxpbmUKCQkJaWYgKHN0cmVhbS5lYXQoIl8iKSkgewoJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5VbmRlcmxpbmUpOwoJCQl9CgkJfQoJCS8vIHN0cmlrZXRocm91Z2ggYW5kIG1kYXNoIGhhbmRsaW5nCgkJaWYgKGNoID09ICItIikgewoJCQlpZiAoc3RyZWFtLmVhdCgiLSIpKSB7CgkJCQkvLyBpZiBzdHJpa2V0aHJvdWdoIGxvb2tzIHVnbHksIGNoYW5nZSBDU1MuCgkJCQlpZiAoc3RyZWFtLnBlZWsoKSAhPSAnICcpCgkJCQkJcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHR3VG9rZW5TdHJpa2UpOwoJCQkJLy8gbWRhc2gKCQkJCWlmIChzdHJlYW0ucGVlaygpID09ICcgJykKCQkJCQlyZXR1cm4gcmV0KCd0ZXh0JywgJ2JyYWNlJyk7CgkJCX0KCQl9CgkJaWYgKGNoID09ICInIikgeyAvLyB0dyBib2xkCgkJCWlmIChzdHJlYW0uZWF0KCInIikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuU3Ryb25nKTsKCQkJfQoJCX0KCQlpZiAoY2ggPT0gIjwiKSB7IC8vIHR3IG1hY3JvCgkJCWlmIChzdHJlYW0uZWF0KCI8IikpIHsKCQkJCXJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0d1Rva2VuTWFjcm8pOwoJCQl9CgkJfQoJCWVsc2UgewoJCQlyZXR1cm4gcmV0KGNoKTsKCQl9CgoJCS8vIGNvcmUgbWFjcm8gaGFuZGxpbmcKCQlzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKCQl2YXIgd29yZCA9IHN0cmVhbS5jdXJyZW50KCksCgkJCWtub3duID0gdGV4dHdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIHRleHR3b3Jkc1t3b3JkXTsKCgkJcmV0dXJuIGtub3duID8gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKSA6IHJldCgidGV4dCIsIG51bGwsIHdvcmQpOwoKCX0gLy8ganNUb2tlbkJhc2UoKQoKCWZ1bmN0aW9uIHR3VG9rZW5TdHJpbmcocXVvdGUpIHsKCQlyZXR1cm4gZnVuY3Rpb24gKHN0cmVhbSwgc3RhdGUpIHsKCQkJaWYgKCFuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBxdW90ZSkpIHN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCXJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKCQl9OwoJfQoKCS8vIHR3IGludmlzaWJsZSBjb21tZW50CglmdW5jdGlvbiB0d1Rva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIG1heWJlRW5kID0gZmFsc2UsCgkJCWNoOwoJCXdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKCQkJaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewoJCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJCWJyZWFrOwoJCQl9CgkJCW1heWJlRW5kID0gKGNoID09ICIlIik7CgkJfQoJCXJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwoJfQoKCS8vIHR3IHN0cm9uZyAvIGJvbGQKCWZ1bmN0aW9uIHR3VG9rZW5TdHJvbmcoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaDsKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiJyIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiJyIpOwoJCX0KCQlyZXR1cm4gcmV0KCJ0ZXh0IiwgInN0cm9uZyIpOwoJfQoKCS8vIHR3IGNvZGUKCWZ1bmN0aW9uIHR3VG9rZW5Db2RlKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgY2gsIHNiID0gc3RhdGUuYmxvY2s7CgkJCgkJaWYgKHNiICYmIHN0cmVhbS5jdXJyZW50KCkpIHsKCQkJcmV0dXJuIHJldCgiY29kZSIsICJjb2RlIik7CgkJfQoKCQlpZiAoIXNiICYmIHN0cmVhbS5tYXRjaChyZVVudGlsQ29kZVN0b3ApKSB7CgkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCXJldHVybiByZXQoImNvZGUiLCAiY29kZS1pbmxpbmUiKTsKCQl9CgoJCWlmIChzYiAmJiBzdHJlYW0uc29sKCkgJiYgc3RyZWFtLm1hdGNoKHJlQ29kZUJsb2NrU3RvcCkpIHsKCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJcmV0dXJuIHJldCgiY29kZSIsICJjb2RlIik7CgkJfQoKCQljaCA9IHN0cmVhbS5uZXh0KCk7CgkJcmV0dXJuIChzYikgPyByZXQoImNvZGUiLCAiY29kZSIpIDogcmV0KCJjb2RlIiwgImNvZGUtaW5saW5lIik7Cgl9CgoJLy8gdHcgZW0gLyBpdGFsaWMKCWZ1bmN0aW9uIHR3VG9rZW5FbShzdHJlYW0sIHN0YXRlKSB7CgkJdmFyIG1heWJlRW5kID0gZmFsc2UsCgkJCWNoOwoJCXdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKCQkJaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewoJCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJCWJyZWFrOwoJCQl9CgkJCW1heWJlRW5kID0gKGNoID09ICIvIik7CgkJfQoJCXJldHVybiByZXQoInRleHQiLCAiZW0iKTsKCX0KCgkvLyB0dyB1bmRlcmxpbmVkIHRleHQKCWZ1bmN0aW9uIHR3VG9rZW5VbmRlcmxpbmUoc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBtYXliZUVuZCA9IGZhbHNlLAoJCQljaDsKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiXyIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiXyIpOwoJCX0KCQlyZXR1cm4gcmV0KCJ0ZXh0IiwgInVuZGVybGluZWQiKTsKCX0KCgkvLyB0dyBzdHJpa2UgdGhyb3VnaCB0ZXh0IGxvb2tzIHVnbHkKCS8vIGNoYW5nZSBDU1MgaWYgbmVlZGVkCglmdW5jdGlvbiB0d1Rva2VuU3RyaWtlKHN0cmVhbSwgc3RhdGUpIHsKCQl2YXIgbWF5YmVFbmQgPSBmYWxzZSwKCQkJY2gsIG5yOwoJCQkKCQl3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CgkJCWlmIChjaCA9PSAiLSIgJiYgbWF5YmVFbmQpIHsKCQkJCXN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CgkJCQlicmVhazsKCQkJfQoJCQltYXliZUVuZCA9IChjaCA9PSAiLSIpOwoJCX0KCQlyZXR1cm4gcmV0KCJ0ZXh0IiwgImxpbmUtdGhyb3VnaCIpOwoJfQoKCS8vIG1hY3JvCglmdW5jdGlvbiB0d1Rva2VuTWFjcm8oc3RyZWFtLCBzdGF0ZSkgewoJCXZhciBjaCwgdG1wLCB3b3JkLCBrbm93bjsKCgkJaWYgKHN0cmVhbS5jdXJyZW50KCkgPT0gJzw8JykgewoJCQlyZXR1cm4gcmV0KCdicmFjZScsICdtYWNybycpOwoJCX0KCgkJY2ggPSBzdHJlYW0ubmV4dCgpOwoJCWlmICghY2gpIHsKCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJcmV0dXJuIHJldChjaCk7CgkJfQoJCWlmIChjaCA9PSAiPiIpIHsKCQkJaWYgKHN0cmVhbS5wZWVrKCkgPT0gJz4nKSB7CgkJCQlzdHJlYW0ubmV4dCgpOwoJCQkJc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKCQkJCXJldHVybiByZXQoImJyYWNlIiwgIm1hY3JvIik7CgkJCX0KCQl9CgoJCXN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwoJCXdvcmQgPSBzdHJlYW0uY3VycmVudCgpOwoJCWtub3duID0ga2V5d29yZHMucHJvcGVydHlJc0VudW1lcmFibGUod29yZCkgJiYga2V5d29yZHNbd29yZF07CgoJCWlmIChrbm93bikgewoJCQlyZXR1cm4gcmV0KGtub3duLnR5cGUsIGtub3duLnN0eWxlLCB3b3JkKTsKCQl9CgkJZWxzZSB7CgkJCXJldHVybiByZXQoIm1hY3JvIiwgbnVsbCwgd29yZCk7CgkJfQoJfQoKCS8vIEludGVyZmFjZQoJcmV0dXJuIHsKCQlzdGFydFN0YXRlOiBmdW5jdGlvbiAoYmFzZWNvbHVtbikgewoJCQlyZXR1cm4gewoJCQkJdG9rZW5pemU6IGpzVG9rZW5CYXNlLAoJCQkJaW5kZW50ZWQ6IDAsCgkJCQlsZXZlbDogMAoJCQl9OwoJCX0sCgoJCXRva2VuOiBmdW5jdGlvbiAoc3RyZWFtLCBzdGF0ZSkgewoJCQlpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwoJCQl2YXIgc3R5bGUgPSBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKCQkJcmV0dXJuIHN0eWxlOwoJCX0sCgoJCWVsZWN0cmljQ2hhcnM6ICIiCgl9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXRpZGRseXdpa2kiLCAidGlkZGx5d2lraSIpOwovL319fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/vbscript/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/vbscript/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZCU2NyaXB0IG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ2YnNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2RvYy9kb2NzLmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVkJTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CicgUGV0ZSBHdWhsCicgMDMtMDQtMjAxMgonCicgQmFzaWMgVkJTY3JpcHQgc3VwcG9ydCBmb3IgY29kZW1pcnJvcjIKCkNvbnN0IEZvclJlYWRpbmcgPSAxLCBGb3JXcml0aW5nID0gMiwgRm9yQXBwZW5kaW5nID0gOAoKQ2FsbCBTdWIwMjBfUG9zdEJyb2FkY2FzdFRvVXJiYW5BaXJzaGlwKHN0clVzZXJOYW1lLCBzdHJQYXNzd29yZCwgaW50VHJhbnNtaXRJRCwgc3RyUmVzcG9uc2UpCgpJZiBOb3QgSXNOdWxsKHN0clJlc3BvbnNlKSBBTkQgTGVuKHN0clJlc3BvbnNlKSA9IDAgVGhlbgoJYm9vbFRyYW5zbWl0T2tZTiA9IEZhbHNlCkVsc2UKCScgV1NjcmlwdC5FY2hvICJPaCBIYXBweSBEYXkhIE9oIEhhcHB5IERBWSEiCglib29sVHJhbnNtaXRPa1lOID0gVHJ1ZQpFbmQgSWYKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC92YnNjcmlwdDwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/vbscript/vbscript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2YnNjcmlwdCIsIGZ1bmN0aW9uKCkgewogIHZhciByZWdleFZCU2NyaXB0S2V5d29yZCA9IC9eKD86Q2FsbHxDYXNlfENEYXRlfENsZWFyfENJbnR8Q0xuZ3xDb25zdHxDU3RyfERlc2NyaXB0aW9ufERpbXxEb3xFYWNofEVsc2V8RWxzZUlmfEVuZHxFcnJ8RXJyb3J8RXhpdHxGYWxzZXxGb3J8RnVuY3Rpb258SWZ8TENhc2V8TG9vcHxMVHJpbXxOZXh0fE5vdGhpbmd8Tm93fE51bWJlcnxPbnxQcmVzZXJ2ZXxRdWl0fFJlRGltfFJlc3VtZXxSVHJpbXxTZWxlY3R8U2V0fFN1YnxUaGVufFRvfFRyaW18VHJ1ZXxVQm91bmR8VUNhc2V8VW50aWx8VmJDcnxWYkNyTGZ8VmJMZnxWYlRhYikkL2ltOwoKICByZXR1cm4gewogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSkgewogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICBpZiAoY2ggPT0gIiciKSB7CiAgICAgIAlzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIAlyZXR1cm4gImNvbW1lbnQiOwogICAgICB9CiAgICAgIGlmIChjaCA9PSAnIicpIHsKICAgICAgCXN0cmVhbS5za2lwVG8oJyInKTsKICAgICAgCXJldHVybiAic3RyaW5nIjsKICAgICAgfQoKICAgICAgaWYgKC9cdy8udGVzdChjaCkpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1x3Lyk7CiAgICAgICAgaWYgKHJlZ2V4VkJTY3JpcHRLZXl3b3JkLnRlc3Qoc3RyZWFtLmN1cnJlbnQoKSkpIHJldHVybiAia2V5d29yZCI7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdmJzY3JpcHQiLCAidmJzY3JpcHQiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZlbG9jaXR5IG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ2ZWxvY2l0eS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL3RoZW1lL25pZ2h0LmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWZWxvY2l0eSBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiMjIFZlbG9jaXR5IENvZGUgRGVtbwojKgogICBiYXNlZCBvbiBQTC9TUUwgbW9kZSBieSBQZXRlciBSYWdhbml0c2NoLCBhZGFwdGVkIHRvIFZlbG9jaXR5IGJ5IFN0ZXZlIE8nSGFyYSAoIGh0dHA6Ly93d3cucGl2b3RhbC1zb2x1dGlvbnMuY28udWsgKQogICBBdWd1c3QgMjAxMQoqIwoKIyoKICAgVGhpcyBpcyBhIG11bHRpbGluZSBjb21tZW50LgogICBUaGlzIGlzIHRoZSBzZWNvbmQgbGluZQoqIwoKI1tbIGhlbGxvIHN0ZXZlCiAgIFRoaXMgaGFzIGludmFsaWQgc3ludGF4IHRoYXQgd291bGQgbm9ybWFsbHkgbmVlZCAicG9vciBtYW4ncyBlc2NhcGluZyIgbGlrZToKCiAgICNkZWZpbmUoKQoKICAgJHtibGFoCl1dIwoKI2luY2x1ZGUoICJkaXNjbGFpbWVyLnR4dCIgIm9waW5pb24udHh0IiApCiNpbmNsdWRlKCAkZm9vICRiYXIgKQoKI3BhcnNlKCAibGVjb3JidXNpZXIudm0iICkKI3BhcnNlKCAkZm9vICkKCiNldmFsdWF0ZSggJ3N0cmluZyB3aXRoIFZUTCAjaWYodHJ1ZSl3aWxsIGJlIGRpc3BsYXllZCNlbmQnICkKCiNkZWZpbmUoICRoZWxsbyApIEhlbGxvICR3aG8gI2VuZCAjc2V0KCAkd2hvID0gIldvcmxkISIpICRoZWxsbyAjIyBkaXNwbGF5cyBIZWxsbyBXb3JsZCEKCiNmb3JlYWNoKCAkY3VzdG9tZXIgaW4gJGN1c3RvbWVyTGlzdCApCgogICAgJGZvcmVhY2guY291bnQgJGN1c3RvbWVyLk5hbWUKCiAgICAjaWYoICRmb28gPT0gJHtiYXJ9KQogICAgICAgIGl0J3MgdHJ1ZSEKICAgICAgICAjYnJlYWsKICAgICN7ZWxzZX0KICAgICAgICBpdCdzIG5vdCEKICAgICAgICAjc3RvcAogICAgI2VuZAoKICAgICNpZiAoJGZvcmVhY2gucGFyZW50Lmhhc05leHQpCiAgICAgICAgJHZlbG9jaXR5Q291bnQKICAgICNlbmQKI2VuZAoKJHNvbWVPYmplY3QuZ2V0VmFsdWVzKCJ0aGlzIGlzIGEgc3RyaW5nIHNwbGl0CiAgICAgICAgYWNyb3NzIGxpbmVzIikKCiNtYWNybyggdGFibGVyb3dzICRjb2xvciAkc29tZWxpc3QgKQogICAgI2ZvcmVhY2goICRzb21ldGhpbmcgaW4gJHNvbWVsaXN0ICkKICAgICAgICA8dHI+PHRkIGJnY29sb3I9JGNvbG9yPiRzb21ldGhpbmc8L3RkPjwvdHI+CiAgICAjZW5kCiNlbmQKCiN0YWJsZXJvd3MoInJlZCIgWyJkYWRzZGYiLCJkc2EiXSkKCiAgIFZhcmlhYmxlIHJlZmVyZW5jZTogI3NldCggJG1vbmtleSA9ICRiaWxsICkKICAgU3RyaW5nIGxpdGVyYWw6ICNzZXQoICRtb25rZXkuRnJpZW5kID0gJ21vbmljYScgKQogICBQcm9wZXJ0eSByZWZlcmVuY2U6ICNzZXQoICRtb25rZXkuQmxhbWUgPSAkd2hpdGVob3VzZS5MZWFrICkKICAgTWV0aG9kIHJlZmVyZW5jZTogI3NldCggJG1vbmtleS5QbGFuID0gJHNwaW5kb2N0b3Iud2VhdmUoJHdlYikgKQogICBOdW1iZXIgbGl0ZXJhbDogI3NldCggJG1vbmtleS5OdW1iZXIgPSAxMjMgKQogICBSYW5nZSBvcGVyYXRvcjogI3NldCggJG1vbmtleS5OdW1iZXJzID0gWzEuLjNdICkKICAgT2JqZWN0IGxpc3Q6ICNzZXQoICRtb25rZXkuU2F5ID0gWyJOb3QiLCAkbXksICJmYXVsdCJdICkKICAgT2JqZWN0IG1hcDogI3NldCggJG1vbmtleS5NYXAgPSB7ImJhbmFuYSIgOiAiZ29vZCIsICJyb2FzdCBiZWVmIiA6ICJiYWQifSkKClRoZSBSSFMgY2FuIGFsc28gYmUgYSBzaW1wbGUgYXJpdGhtZXRpYyBleHByZXNzaW9uLCBzdWNoIGFzOgpBZGRpdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyArIDEgKQogICBTdWJ0cmFjdGlvbjogI3NldCggJHZhbHVlID0gJGJhciAtIDEgKQogICBNdWx0aXBsaWNhdGlvbjogI3NldCggJHZhbHVlID0gJGZvbyAqICRiYXIgKQogICBEaXZpc2lvbjogI3NldCggJHZhbHVlID0gJGZvbyAvICRiYXIgKQogICBSZW1haW5kZXI6ICNzZXQoICR2YWx1ZSA9ICRmb28gJSAkYmFyICkKCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICB0YWJNb2RlOiAiaW5kZW50IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAibmlnaHQiLAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgbW9kZTogInRleHQvdmVsb2NpdHkiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPnRleHQvdmVsb2NpdHk8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/velocity/velocity.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2ZWxvY2l0eSIsIGZ1bmN0aW9uKGNvbmZpZykgewogICAgZnVuY3Rpb24gcGFyc2VXb3JkcyhzdHIpIHsKICAgICAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICAgICAgcmV0dXJuIG9iajsKICAgIH0KCiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0CiAgICB2YXIga2V5d29yZHMgPSBwYXJzZVdvcmRzKCIjZW5kICNlbHNlICNicmVhayAjc3RvcCAjW1sgI11dICIgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiI3tlbmR9ICN7ZWxzZX0gI3ticmVha30gI3tzdG9wfSIpOwogICAgdmFyIGZ1bmN0aW9ucyA9IHBhcnNlV29yZHMoIiNpZiAjZWxzZWlmICNmb3JlYWNoICNzZXQgI2luY2x1ZGUgI3BhcnNlICNtYWNybyAjZGVmaW5lICNldmFsdWF0ZSAiICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIje2lmfSAje2Vsc2VpZn0gI3tmb3JlYWNofSAje3NldH0gI3tpbmNsdWRlfSAje3BhcnNlfSAje21hY3JvfSAje2RlZmluZX0gI3tldmFsdWF0ZX0iKTsKICAgIHZhciBzcGVjaWFscyA9IHBhcnNlV29yZHMoIiRmb3JlYWNoLmNvdW50ICRmb3JlYWNoLmhhc05leHQgJGZvcmVhY2guZmlyc3QgJGZvcmVhY2gubGFzdCAkZm9yZWFjaC50b3Btb3N0ICRmb3JlYWNoLnBhcmVudCAkdmVsb2NpdHlDb3VudCIpOwogICAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICAgIHZhciBtdWx0aUxpbmVTdHJpbmdzID10cnVlOwoKICAgIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICAgICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBiZWZvcmVQYXJhbXMgPSBzdGF0ZS5iZWZvcmVQYXJhbXM7CiAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gZmFsc2U7CiAgICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAvLyBzdGFydCBvZiBzdHJpbmc/CiAgICAgICAgaWYgKChjaCA9PSAnIicgfHwgY2ggPT0gIiciKSAmJiBzdGF0ZS5pblBhcmFtcykKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoKSk7CiAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKC9bXFtcXXt9XChcKSw7XC5dLy50ZXN0KGNoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIigiICYmIGJlZm9yZVBhcmFtcykgc3RhdGUuaW5QYXJhbXMgPSB0cnVlOwogICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAiKSIpIHN0YXRlLmluUGFyYW1zID0gZmFsc2U7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICAvLyBzdGFydCBvZiBhIG51bWJlciB2YWx1ZT8KICAgICAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLyk7CiAgICAgICAgICAgIHJldHVybiAibnVtYmVyIjsKICAgICAgICB9CiAgICAgICAgLy8gbXVsdGkgbGluZSBjb21tZW50PwogICAgICAgIGVsc2UgaWYgKGNoID09ICIjIiAmJiBzdHJlYW0uZWF0KCIqIikpIHsKICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CiAgICAgICAgfQogICAgICAgIC8vIHVucGFyc2VkIGNvbnRlbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5tYXRjaCgvICpcWyAqXFsvKSkgewogICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5VbnBhcnNlZCk7CiAgICAgICAgfQogICAgICAgIC8vIHNpbmdsZSBsaW5lIGNvbW1lbnQ/CiAgICAgICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICAgICAgfQogICAgICAgIC8vIHZhcmlhYmxlPwogICAgICAgIGVsc2UgaWYgKGNoID09ICIkIikgewogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xkXCRfXC57fV0vKTsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFscz8KICAgICAgICAgICAgaWYgKHNwZWNpYWxzICYmIHNwZWNpYWxzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5iZWZvcmVQYXJhbXMgPSB0cnVlOwogICAgICAgICAgICAgICAgcmV0dXJuICJidWlsdGluIjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBpcyBpdCBhIG9wZXJhdG9yPwogICAgICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgICAgICAgIHJldHVybiAib3BlcmF0b3IiOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLy8gZ2V0IHRoZSB3aG9sZSB3b3JkCiAgICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfe31dLyk7CiAgICAgICAgICAgIHZhciB3b3JkID0gc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAvLyBpcyBpdCBvbmUgb2YgdGhlIGxpc3RlZCBrZXl3b3Jkcz8KICAgICAgICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpKQogICAgICAgICAgICAgICAgcmV0dXJuICJrZXl3b3JkIjsKICAgICAgICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICAgICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZSh3b3JkKSB8fAogICAgICAgICAgICAgICAgc3RyZWFtLmN1cnJlbnQoKS5tYXRjaCgvXiNbYS16MC05X10rICokL2kpICYmIHN0cmVhbS5wZWVrKCk9PSIoIikgewogICAgICAgICAgICAgICAgc3RhdGUuYmVmb3JlUGFyYW1zID0gdHJ1ZTsKICAgICAgICAgICAgICAgIHJldHVybiAia2V5d29yZCI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gZGVmYXVsdDoganVzdCBhICJ3b3JkIgogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5TdHJpbmcocXVvdGUpIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsKICAgICAgICAgICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHsKICAgICAgICAgICAgICAgICAgICBlbmQgPSB0cnVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkICYmIG5leHQgPT0gIlxcIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoZW5kKSBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgcmV0dXJuICJzdHJpbmciOwogICAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiY29tbWVudCI7CiAgICB9CgogICAgZnVuY3Rpb24gdG9rZW5VbnBhcnNlZChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIG1heWJlRW5kID0gMCwgY2g7CiAgICAgICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICAgICAgICBpZiAoY2ggPT0gIiMiICYmIG1heWJlRW5kID09IDIpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoID09ICJdIikKICAgICAgICAgICAgICAgIG1heWJlRW5kKys7CiAgICAgICAgICAgIGVsc2UgaWYgKGNoICE9ICIgIikKICAgICAgICAgICAgICAgIG1heWJlRW5kID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH0KICAgIC8vIEludGVyZmFjZQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICAgIGJlZm9yZVBhcmFtczogZmFsc2UsCiAgICAgICAgICAgICAgICBpblBhcmFtczogZmFsc2UKICAgICAgICAgICAgfTsKICAgICAgICB9LAoKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvdmVsb2NpdHkiLCAidmVsb2NpdHkiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFZlcmlsb2cgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InZlcmlsb2cuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBWZXJpbG9nIG1vZGU8L2gxPgoKPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogVmVyaWxvZyBkZW1vIGNvZGUgKi8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICB3Yl9tYXN0ZXJfbW9kZWwudiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFNQSSBJUCBjb3JlIHByb2plY3QgICAgICAgICAgICAgICAgLy8vLwovLy8vICBodHRwOi8vd3d3Lm9wZW5jb3Jlcy5vcmcvcHJvamVjdHMvc3BpLyAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgQXV0aG9yKHMpOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgLSBTaW1vbiBTcm90IChzaW1vbnNAb3BlbmNvcmVzLm9yZykgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgQmFzZWQgb246ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgLSBpMmMvYmVuY2gvdmVyaWxvZy93Yl9tYXN0ZXJfbW9kZWwudiAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gICAgICAgIENvcHlyaWdodCAoQykgMjAwMSBSaWNoYXJkIEhlcnZlaWxsZSAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICBBbGwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpcyBhdmFsaWFibGUgaW4gdGhlIFJlYWRtZS50eHQgICAvLy8vCi8vLy8gIGZpbGUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyBDb3B5cmlnaHQgKEMpIDIwMDIgQXV0aG9ycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8gVGhpcyBzb3VyY2UgZmlsZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgd2l0aG91dCAgICAgICAgIC8vLy8KLy8vLyByZXN0cmljdGlvbiBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IHN0YXRlbWVudCBpcyBub3QgICAgLy8vLwovLy8vIHJlbW92ZWQgZnJvbSB0aGUgZmlsZSBhbmQgdGhhdCBhbnkgZGVyaXZhdGl2ZSB3b3JrIGNvbnRhaW5zICAvLy8vCi8vLy8gdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBhc3NvY2lhdGVkIGRpc2NsYWltZXIuIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFRoaXMgc291cmNlIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgICAvLy8vCi8vLy8gYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgIC8vLy8KLy8vLyBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgLy8vLwovLy8vIGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgICAvLy8vCi8vLy8gbGF0ZXIgdmVyc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFRoaXMgc291cmNlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSAgICAgICAvLy8vCi8vLy8gdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCAgIC8vLy8KLy8vLyB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSICAgICAgLy8vLwovLy8vIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSAvLy8vCi8vLy8gZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8KLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCAgICAvLy8vCi8vLy8gUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHNvdXJjZTsgaWYgbm90LCBkb3dubG9hZCBpdCAgIC8vLy8KLy8vLyBmcm9tIGh0dHA6Ly93d3cub3BlbmNvcmVzLm9yZy9sZ3BsLnNodG1sICAgICAgICAgICAgICAgICAgICAgLy8vLwovLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLy8vCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCmBpbmNsdWRlICJ0aW1lc2NhbGUudiIKCm1vZHVsZSB3Yl9tYXN0ZXJfbW9kZWwoY2xrLCByc3QsIGFkciwgZGluLCBkb3V0LCBjeWMsIHN0Yiwgd2UsIHNlbCwgYWNrLCBlcnIsIHJ0eSk7CgogIHBhcmFtZXRlciBkd2lkdGggPSAzMjsKICBwYXJhbWV0ZXIgYXdpZHRoID0gMzI7CiAgCiAgaW5wdXQgICAgICAgICAgICAgICAgICBjbGssIHJzdDsKICBvdXRwdXQgW2F3aWR0aCAgIC0xOjBdIGFkcjsKICBpbnB1dCAgW2R3aWR0aCAgIC0xOjBdIGRpbjsKICBvdXRwdXQgW2R3aWR0aCAgIC0xOjBdIGRvdXQ7CiAgb3V0cHV0ICAgICAgICAgICAgICAgICBjeWMsIHN0YjsKICBvdXRwdXQgICAgICAgICAgICAgICAgIHdlOwogIG91dHB1dCBbZHdpZHRoLzggLTE6MF0gc2VsOwogIGlucHV0ICAgICAgICAgICAgICAgICAgYWNrLCBlcnIsIHJ0eTsKICAKICAvLyBJbnRlcm5hbCBzaWduYWxzCiAgcmVnICAgIFthd2lkdGggICAtMTowXSBhZHI7CiAgcmVnICAgIFtkd2lkdGggICAtMTowXSBkb3V0OwogIHJlZyAgICAgICAgICAgICAgICAgICAgY3ljLCBzdGI7CiAgcmVnICAgICAgICAgICAgICAgICAgICB3ZTsKICByZWcgICAgW2R3aWR0aC84IC0xOjBdIHNlbDsKICAgICAgICAgCiAgcmVnICAgIFtkd2lkdGggICAtMTowXSBxOwogIAogIC8vIE1lbW9yeSBMb2dpYwogIGluaXRpYWwKICAgIGJlZ2luCiAgICAgIGFkciAgPSB7YXdpZHRoezEnYnh9fTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICBjeWMgID0gMSdiMDsKICAgICAgc3RiICA9IDEnYng7CiAgICAgIHdlICAgPSAxJ2h4OwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYnh9fTsKICAgICAgIzE7CiAgICBlbmQKICAKICAvLyBXaXNoYm9uZSB3cml0ZSBjeWNsZQogIHRhc2sgd2Jfd3JpdGU7CiAgICBpbnB1dCAgIGRlbGF5OwogICAgaW50ZWdlciBkZWxheTsKICAKICAgIGlucHV0IFthd2lkdGggLTE6MF0gYTsKICAgIGlucHV0IFtkd2lkdGggLTE6MF0gZDsKICAKICAgIGJlZ2luCiAgCiAgICAgIC8vIHdhaXQgaW5pdGlhbCBkZWxheQogICAgICByZXBlYXQoZGVsYXkpIEAocG9zZWRnZSBjbGspOwogIAogICAgICAvLyBhc3NlcnQgd2lzaGJvbmUgc2lnbmFsCiAgICAgICMxOwogICAgICBhZHIgID0gYTsKICAgICAgZG91dCA9IGQ7CiAgICAgIGN5YyAgPSAxJ2IxOwogICAgICBzdGIgID0gMSdiMTsKICAgICAgd2UgICA9IDEnYjE7CiAgICAgIHNlbCAgPSB7ZHdpZHRoLzh7MSdiMX19OwogICAgICBAKHBvc2VkZ2UgY2xrKTsKICAKICAgICAgLy8gd2FpdCBmb3IgYWNrbm93bGVkZ2UgZnJvbSBzbGF2ZQogICAgICB3aGlsZSh+YWNrKSBAKHBvc2VkZ2UgY2xrKTsKICAKICAgICAgLy8gbmVnYXRlIHdpc2hib25lIHNpZ25hbHMKICAgICAgIzE7CiAgICAgIGN5YyAgPSAxJ2IwOwogICAgICBzdGIgID0gMSdieDsKICAgICAgYWRyICA9IHthd2lkdGh7MSdieH19OwogICAgICBkb3V0ID0ge2R3aWR0aHsxJ2J4fX07CiAgICAgIHdlICAgPSAxJ2h4OwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYnh9fTsKICAKICAgIGVuZAogIGVuZHRhc2sKICAKICAvLyBXaXNoYm9uZSByZWFkIGN5Y2xlCiAgdGFzayB3Yl9yZWFkOwogICAgaW5wdXQgICBkZWxheTsKICAgIGludGVnZXIgZGVsYXk7CiAgCiAgICBpbnB1dCAgW2F3aWR0aCAtMTowXSAgYTsKICAgIG91dHB1dCAgW2R3aWR0aCAtMTowXSBkOwogIAogICAgYmVnaW4KICAKICAgICAgLy8gd2FpdCBpbml0aWFsIGRlbGF5CiAgICAgIHJlcGVhdChkZWxheSkgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIGFzc2VydCB3aXNoYm9uZSBzaWduYWxzCiAgICAgICMxOwogICAgICBhZHIgID0gYTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICBjeWMgID0gMSdiMTsKICAgICAgc3RiICA9IDEnYjE7CiAgICAgIHdlICAgPSAxJ2IwOwogICAgICBzZWwgID0ge2R3aWR0aC84ezEnYjF9fTsKICAgICAgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIHdhaXQgZm9yIGFja25vd2xlZGdlIGZyb20gc2xhdmUKICAgICAgd2hpbGUofmFjaykgQChwb3NlZGdlIGNsayk7CiAgCiAgICAgIC8vIG5lZ2F0ZSB3aXNoYm9uZSBzaWduYWxzCiAgICAgICMxOwogICAgICBjeWMgID0gMSdiMDsKICAgICAgc3RiICA9IDEnYng7CiAgICAgIGFkciAgPSB7YXdpZHRoezEnYnh9fTsKICAgICAgZG91dCA9IHtkd2lkdGh7MSdieH19OwogICAgICB3ZSAgID0gMSdoeDsKICAgICAgc2VsICA9IHtkd2lkdGgvOHsxJ2J4fX07CiAgICAgIGQgICAgPSBkaW47CiAgCiAgICBlbmQKICBlbmR0YXNrCiAgCiAgLy8gV2lzaGJvbmUgY29tcGFyZSBjeWNsZSAocmVhZCBkYXRhIGZyb20gbG9jYXRpb24gYW5kIGNvbXBhcmUgd2l0aCBleHBlY3RlZCBkYXRhKQogIHRhc2sgd2JfY21wOwogICAgaW5wdXQgICBkZWxheTsKICAgIGludGVnZXIgZGVsYXk7CiAgCiAgICBpbnB1dCBbYXdpZHRoIC0xOjBdIGE7CiAgICBpbnB1dCBbZHdpZHRoIC0xOjBdIGRfZXhwOwogIAogICAgYmVnaW4KICAgICAgd2JfcmVhZCAoZGVsYXksIGEsIHEpOwoKICAgICAgaWYgKGRfZXhwICE9PSBxKSBiZWdpbgogICAgICAgICRkaXNwbGF5KCJcbi0tLSBFUlJPUjogQXQgYWRkcmVzcyAweCUweCwgZ290IDB4JTB4LCBleHBlY3RlZCAweCUweCBhdCB0aW1lICV0IiwgYSwgcSwgZF9leHAsICR0aW1lKTsKICAgICAgICAkc3RvcDsKICAgICAgZW5kCiAgICBlbmQKICBlbmR0YXNrCiAgCmVuZG1vZHVsZQo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogInRleHQveC12ZXJpbG9nIgogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlNpbXBsZSBtb2RlIHRoYXQgdHJpZXMgdG8gaGFuZGxlIFZlcmlsb2ctbGlrZSBsYW5ndWFnZXMgYXMgd2VsbCBhcyBpdAogICAgY2FuLiBUYWtlcyBvbmUgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOiA8Y29kZT5rZXl3b3JkczwvY29kZT4sIGFuCiAgICBvYmplY3Qgd2hvc2UgcHJvcGVydHkgbmFtZXMgYXJlIHRoZSBrZXl3b3JkcyBpbiB0aGUgbGFuZ3VhZ2UuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtdmVyaWxvZzwvY29kZT4gKFZlcmlsb2cgY29kZSkuPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/verilog/verilog.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ2ZXJpbG9nIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsNCiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwNCiAgICAgIGtleXdvcmRzID0gcGFyc2VyQ29uZmlnLmtleXdvcmRzIHx8IHt9LA0KICAgICAgYmxvY2tLZXl3b3JkcyA9IHBhcnNlckNvbmZpZy5ibG9ja0tleXdvcmRzIHx8IHt9LA0KICAgICAgYXRvbXMgPSBwYXJzZXJDb25maWcuYXRvbXMgfHwge30sDQogICAgICBob29rcyA9IHBhcnNlckNvbmZpZy5ob29rcyB8fCB7fSwNCiAgICAgIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5nczsNCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1smfH4+PCFcKVwoKiMlQCtcLz0/XDo7fXssXC5cXlwtXFtcXV0vOw0KDQogIHZhciBjdXJQdW5jOw0KDQogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsNCiAgICBpZiAoaG9va3NbY2hdKSB7DQogICAgICB2YXIgcmVzdWx0ID0gaG9va3NbY2hdKHN0cmVhbSwgc3RhdGUpOw0KICAgICAgaWYgKHJlc3VsdCAhPT0gZmFsc2UpIHJldHVybiByZXN1bHQ7DQogICAgfQ0KICAgIGlmIChjaCA9PSAnIicpIHsNCiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOw0KICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOw0KICAgIH0NCiAgICBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpIHsNCiAgICAgIGN1clB1bmMgPSBjaDsNCiAgICAgIHJldHVybiBudWxsDQogICAgfQ0KICAgIGlmICgvW1xkJ10vLnRlc3QoY2gpKSB7DQogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuJ10vKTsNCiAgICAgIHJldHVybiAibnVtYmVyIjsNCiAgICB9DQogICAgaWYgKGNoID09ICIvIikgew0KICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgew0KICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ29tbWVudDsNCiAgICAgICAgcmV0dXJuIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKTsNCiAgICAgIH0NCiAgICAgIGlmIChzdHJlYW0uZWF0KCIvIikpIHsNCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOw0KICAgICAgICByZXR1cm4gImNvbW1lbnQiOw0KICAgICAgfQ0KICAgIH0NCiAgICBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsNCiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7DQogICAgICByZXR1cm4gIm9wZXJhdG9yIjsNCiAgICB9DQogICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7DQogICAgdmFyIGN1ciA9IHN0cmVhbS5jdXJyZW50KCk7DQogICAgaWYgKGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIHsNCiAgICAgIGlmIChibG9ja0tleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKGN1cikpIGN1clB1bmMgPSAibmV3c3RhdGVtZW50IjsNCiAgICAgIHJldHVybiAia2V5d29yZCI7DQogICAgfQ0KICAgIGlmIChhdG9tcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjdXIpKSByZXR1cm4gImF0b20iOw0KICAgIHJldHVybiAid29yZCI7DQogIH0NCg0KICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgew0KICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7DQogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBuZXh0LCBlbmQgPSBmYWxzZTsNCiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsNCiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUgJiYgIWVzY2FwZWQpIHtlbmQgPSB0cnVlOyBicmVhazt9DQogICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7DQogICAgICB9DQogICAgICBpZiAoZW5kIHx8ICEoZXNjYXBlZCB8fCBtdWx0aUxpbmVTdHJpbmdzKSkNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7DQogICAgICByZXR1cm4gInN0cmluZyI7DQogICAgfTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIGNoOw0KICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsNCiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7DQogICAgICAgIGJyZWFrOw0KICAgICAgfQ0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsNCiAgICB9DQogICAgcmV0dXJuICJjb21tZW50IjsNCiAgfQ0KDQogIGZ1bmN0aW9uIENvbnRleHQoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYpIHsNCiAgICB0aGlzLmluZGVudGVkID0gaW5kZW50ZWQ7DQogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47DQogICAgdGhpcy50eXBlID0gdHlwZTsNCiAgICB0aGlzLmFsaWduID0gYWxpZ247DQogICAgdGhpcy5wcmV2ID0gcHJldjsNCiAgfQ0KICBmdW5jdGlvbiBwdXNoQ29udGV4dChzdGF0ZSwgY29sLCB0eXBlKSB7DQogICAgcmV0dXJuIHN0YXRlLmNvbnRleHQgPSBuZXcgQ29udGV4dChzdGF0ZS5pbmRlbnRlZCwgY29sLCB0eXBlLCBudWxsLCBzdGF0ZS5jb250ZXh0KTsNCiAgfQ0KICBmdW5jdGlvbiBwb3BDb250ZXh0KHN0YXRlKSB7DQogICAgdmFyIHQgPSBzdGF0ZS5jb250ZXh0LnR5cGU7DQogICAgaWYgKHQgPT0gIikiIHx8IHQgPT0gIl0iIHx8IHQgPT0gIn0iKQ0KICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5jb250ZXh0LmluZGVudGVkOw0KICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2Ow0KICB9DQoNCiAgLy8gSW50ZXJmYWNlDQoNCiAgcmV0dXJuIHsNCiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7DQogICAgICByZXR1cm4gew0KICAgICAgICB0b2tlbml6ZTogbnVsbCwNCiAgICAgICAgY29udGV4dDogbmV3IENvbnRleHQoKGJhc2Vjb2x1bW4gfHwgMCkgLSBpbmRlbnRVbml0LCAwLCAidG9wIiwgZmFsc2UpLA0KICAgICAgICBpbmRlbnRlZDogMCwNCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUNCiAgICAgIH07DQogICAgfSwNCg0KICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7DQogICAgICB2YXIgY3R4ID0gc3RhdGUuY29udGV4dDsNCiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsNCiAgICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSBmYWxzZTsNCiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsNCiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOw0KICAgICAgfQ0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsNCiAgICAgIGN1clB1bmMgPSBudWxsOw0KICAgICAgdmFyIHN0eWxlID0gKHN0YXRlLnRva2VuaXplIHx8IHRva2VuQmFzZSkoc3RyZWFtLCBzdGF0ZSk7DQogICAgICBpZiAoc3R5bGUgPT0gImNvbW1lbnQiIHx8IHN0eWxlID09ICJtZXRhIikgcmV0dXJuIHN0eWxlOw0KICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOw0KDQogICAgICBpZiAoKGN1clB1bmMgPT0gIjsiIHx8IGN1clB1bmMgPT0gIjoiKSAmJiBjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcG9wQ29udGV4dChzdGF0ZSk7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsNCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gIlsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiXSIpOw0KICAgICAgZWxzZSBpZiAoY3VyUHVuYyA9PSAiKCIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICIpIik7DQogICAgICBlbHNlIGlmIChjdXJQdW5jID09ICJ9Iikgew0KICAgICAgICB3aGlsZSAoY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIGN0eCA9IHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgICBpZiAoY3R4LnR5cGUgPT0gIn0iKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgICAgd2hpbGUgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsNCiAgICAgIH0NCiAgICAgIGVsc2UgaWYgKGN1clB1bmMgPT0gY3R4LnR5cGUpIHBvcENvbnRleHQoc3RhdGUpOw0KICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiIHx8IChjdHgudHlwZSA9PSAic3RhdGVtZW50IiAmJiBjdXJQdW5jID09ICJuZXdzdGF0ZW1lbnQiKSkNCiAgICAgICAgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgInN0YXRlbWVudCIpOw0KICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsNCiAgICAgIHJldHVybiBzdHlsZTsNCiAgICB9LA0KDQogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7DQogICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlICYmIHN0YXRlLnRva2VuaXplICE9IG51bGwpIHJldHVybiAwOw0KICAgICAgdmFyIGZpcnN0Q2hhciA9IHRleHRBZnRlciAmJiB0ZXh0QWZ0ZXIuY2hhckF0KDApLCBjdHggPSBzdGF0ZS5jb250ZXh0LCBjbG9zaW5nID0gZmlyc3RDaGFyID09IGN0eC50eXBlOw0KICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSByZXR1cm4gY3R4LmluZGVudGVkICsgKGZpcnN0Q2hhciA9PSAieyIgPyAwIDogaW5kZW50VW5pdCk7DQogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7DQogICAgICBlbHNlIHJldHVybiBjdHguaW5kZW50ZWQgKyAoY2xvc2luZyA/IDAgOiBpbmRlbnRVbml0KTsNCiAgICB9LA0KDQogICAgZWxlY3RyaWNDaGFyczogInt9Ig0KICB9Ow0KfSk7DQoNCihmdW5jdGlvbigpIHsNCiAgZnVuY3Rpb24gd29yZHMoc3RyKSB7DQogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOw0KICAgIHJldHVybiBvYmo7DQogIH0NCg0KICB2YXIgdmVyaWxvZ0tleXdvcmRzID0gImFsd2F5cyBhbmQgYXNzaWduIGF1dG9tYXRpYyBiZWdpbiBidWYgYnVmaWYwIGJ1ZmlmMSBjYXNlIGNhc2V4IGNhc2V6IGNlbGwgY21vcyBjb25maWcgIiArDQogICAgImRlYXNzaWduIGRlZmF1bHQgZGVmcGFyYW0gZGVzaWduIGRpc2FibGUgZWRnZSBlbHNlIGVuZCBlbmRjYXNlIGVuZGNvbmZpZyBlbmRmdW5jdGlvbiBlbmRnZW5lcmF0ZSBlbmRtb2R1bGUgIiArDQogICAgImVuZHByaW1pdGl2ZSBlbmRzcGVjaWZ5IGVuZHRhYmxlIGVuZHRhc2sgZXZlbnQgZm9yIGZvcmNlIGZvcmV2ZXIgZm9yayBmdW5jdGlvbiBnZW5lcmF0ZSBnZW52YXIgaGlnaHowICIgKw0KICAgICJoaWdoejEgaWYgaWZub25lIGluY2RpciBpbmNsdWRlIGluaXRpYWwgaW5vdXQgaW5wdXQgaW5zdGFuY2UgaW50ZWdlciBqb2luIGxhcmdlIGxpYmxpc3QgbGlicmFyeSBsb2NhbHBhcmFtICIgKw0KICAgICJtYWNyb21vZHVsZSBtZWRpdW0gbW9kdWxlIG5hbmQgbmVnZWRnZSBubW9zIG5vciBub3Nob3djYW5jZWxsZWQgbm90IG5vdGlmMCBub3RpZjEgb3Igb3V0cHV0IHBhcmFtZXRlciBwbW9zICIgKw0KICAgICJwb3NlZGdlIHByaW1pdGl2ZSBwdWxsMCBwdWxsMSBwdWxsZG93biBwdWxsdXAgcHVsc2VzdHlsZV9vbmV2ZW50IHB1bHNlc3R5bGVfb25kZXRlY3QgcmNtb3MgcmVhbCByZWFsdGltZSAiICsNCiAgICAicmVnIHJlbGVhc2UgcmVwZWF0IHJubW9zIHJwbW9zIHJ0cmFuIHJ0cmFuaWYwIHJ0cmFuaWYxIHNjYWxhcmVkIHNob3djYW5jZWxsZWQgc2lnbmVkIHNtYWxsIHNwZWNpZnkgc3BlY3BhcmFtICIgKw0KICAgICJzdHJvbmcwIHN0cm9uZzEgc3VwcGx5MCBzdXBwbHkxIHRhYmxlIHRhc2sgdGltZSB0cmFuIHRyYW5pZjAgdHJhbmlmMSB0cmkgdHJpMCB0cmkxIHRyaWFuZCB0cmlvciB0cmlyZWcgIiArDQogICAgInVuc2lnbmVkIHVzZSB2ZWN0b3JlZCB3YWl0IHdhbmQgd2VhazAgd2VhazEgd2hpbGUgd2lyZSB3b3IgeG5vciB4b3IiOw0KDQogIHZhciB2ZXJpbG9nQmxvY2tLZXl3b3JkcyA9ICJiZWdpbiBidWZpZjAgYnVmaWYxIGNhc2UgY2FzZXggY2FzZXogY29uZmlnIGVsc2UgZW5kIGVuZGNhc2UgZW5kY29uZmlnIGVuZGZ1bmN0aW9uICIgKw0KICAgICJlbmRnZW5lcmF0ZSBlbmRtb2R1bGUgZW5kcHJpbWl0aXZlIGVuZHNwZWNpZnkgZW5kdGFibGUgZW5kdGFzayBmb3IgZm9yZXZlciBmdW5jdGlvbiBnZW5lcmF0ZSBpZiBpZm5vbmUgIiArDQogICAgIm1hY3JvbW9kdWxlIG1vZHVsZSBwcmltaXRpdmUgcmVwZWF0IHNwZWNpZnkgdGFibGUgdGFzayB3aGlsZSI7DQoNCiAgZnVuY3Rpb24gbWV0YUhvb2soc3RyZWFtLCBzdGF0ZSkgew0KICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOw0KICAgIHJldHVybiAibWV0YSI7DQogIH0NCg0KICAvLyBDIy1zdHlsZSBzdHJpbmdzIHdoZXJlICIiIGVzY2FwZXMgYSBxdW90ZS4NCiAgZnVuY3Rpb24gdG9rZW5BdFN0cmluZyhzdHJlYW0sIHN0YXRlKSB7DQogICAgdmFyIG5leHQ7DQogICAgd2hpbGUgKChuZXh0ID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgew0KICAgICAgaWYgKG5leHQgPT0gJyInICYmICFzdHJlYW0uZWF0KCciJykpIHsNCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBudWxsOw0KICAgICAgICBicmVhazsNCiAgICAgIH0NCiAgICB9DQogICAgcmV0dXJuICJzdHJpbmciOw0KICB9DQoNCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtdmVyaWxvZyIsIHsNCiAgICBuYW1lOiAidmVyaWxvZyIsDQogICAga2V5d29yZHM6IHdvcmRzKHZlcmlsb2dLZXl3b3JkcyksDQogICAgYmxvY2tLZXl3b3Jkczogd29yZHModmVyaWxvZ0Jsb2NrS2V5d29yZHMpLA0KICAgIGF0b21zOiB3b3JkcygibnVsbCIpLA0KICAgIGhvb2tzOiB7ImAiOiBtZXRhSG9vaywgIiQiOiBtZXRhSG9va30NCiAgfSk7DQp9KCkpOw0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFhNTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ieG1sLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7aHRtbCBzdHlsZT0iY29sb3I6IGdyZWVuIiZndDsKICAmbHQ7IS0tIHRoaXMgaXMgYSBjb21tZW50IC0tJmd0OwogICZsdDtoZWFkJmd0OwogICAgJmx0O3RpdGxlJmd0O0hUTUwgRXhhbXBsZSZsdDsvdGl0bGUmZ3Q7CiAgJmx0Oy9oZWFkJmd0OwogICZsdDtib2R5Jmd0OwogICAgVGhlIGluZGVudGF0aW9uIHRyaWVzIHRvIGJlICZsdDtlbSZndDtzb21ld2hhdCAmYW1wO3F1b3Q7ZG8gd2hhdAogICAgSSBtZWFuJmFtcDtxdW90OyZsdDsvZW0mZ3Q7Li4uIGJ1dCBtaWdodCBub3QgbWF0Y2ggeW91ciBzdHlsZS4KICAmbHQ7L2JvZHkmZ3Q7CiZsdDsvaHRtbCZndDsKPC90ZXh0YXJlYT48L2Zvcm0+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAieG1sIiwgYWxpZ25DREFUQTogdHJ1ZX0sCiAgICAgICAgbGluZU51bWJlcnM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPlRoZSBYTUwgbW9kZSBzdXBwb3J0cyB0d28gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOjwvcD4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPmh0bWxNb2RlIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhpcyBzd2l0Y2hlcyB0aGUgbW9kZSB0byBwYXJzZSBIVE1MIGluc3RlYWQgb2YgWE1MLiBUaGlzCiAgICAgIG1lYW5zIGF0dHJpYnV0ZXMgZG8gbm90IGhhdmUgdG8gYmUgcXVvdGVkLCBhbmQgc29tZSBlbGVtZW50cwogICAgICAoc3VjaCBhcyA8Y29kZT5icjwvY29kZT4pIGRvIG5vdCByZXF1aXJlIGEgY2xvc2luZyB0YWcuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmFsaWduQ0RBVEEgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXR0aW5nIHRoaXMgdG8gdHJ1ZSB3aWxsIGZvcmNlIHRoZSBvcGVuaW5nIHRhZyBvZiBDREFUQQogICAgICBibG9ja3MgdG8gbm90IGJlIGluZGVudGVkLjwvZGQ+CiAgICA8L2RsPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94bWw8L2NvZGU+LCA8Y29kZT50ZXh0L2h0bWw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CiAgdmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICBhdXRvU2VsZkNsb3NlcnM6IHsiYnIiOiB0cnVlLCAiaW1nIjogdHJ1ZSwgImhyIjogdHJ1ZSwgImxpbmsiOiB0cnVlLCAiaW5wdXQiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgIm1ldGEiOiB0cnVlLCAiY29sIjogdHJ1ZSwgImZyYW1lIjogdHJ1ZSwgImJhc2UiOiB0cnVlLCAiYXJlYSI6IHRydWV9LAogICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZX0sCiAgICBhbGxvd1VucXVvdGVkOiB0cnVlLAogICAgYWxsb3dNaXNzaW5nOiBmYWxzZQogIH0gOiB7YXV0b1NlbGZDbG9zZXJzOiB7fSwgZG9Ob3RJbmRlbnQ6IHt9LCBhbGxvd1VucXVvdGVkOiBmYWxzZSwgYWxsb3dNaXNzaW5nOiBmYWxzZX07CiAgdmFyIGFsaWduQ0RBVEEgPSBwYXJzZXJDb25maWcuYWxpZ25DREFUQTsKCiAgLy8gUmV0dXJuIHZhcmlhYmxlcyBmb3IgdG9rZW5pemVycwogIHZhciB0YWdOYW1lLCB0eXBlOwoKICBmdW5jdGlvbiBpblRleHQoc3RyZWFtLCBzdGF0ZSkgewogICAgZnVuY3Rpb24gY2hhaW4ocGFyc2VyKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VyOwogICAgICByZXR1cm4gcGFyc2VyKHN0cmVhbSwgc3RhdGUpOwogICAgfQoKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoY2ggPT0gIjwiKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0KCIhIikpIHsKICAgICAgICBpZiAoc3RyZWFtLmVhdCgiWyIpKSB7CiAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKCJDREFUQVsiKSkgcmV0dXJuIGNoYWluKGluQmxvY2soImF0b20iLCAiXV0+IikpOwogICAgICAgICAgZWxzZSByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCItLSIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygiY29tbWVudCIsICItLT4iKSk7CiAgICAgICAgZWxzZSBpZiAoc3RyZWFtLm1hdGNoKCJET0NUWVBFIiwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5fXC1dLyk7CiAgICAgICAgICByZXR1cm4gY2hhaW4oZG9jdHlwZSgxKSk7CiAgICAgICAgfQogICAgICAgIGVsc2UgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiPyIpKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQmxvY2soIm1ldGEiLCAiPz4iKTsKICAgICAgICByZXR1cm4gIm1ldGEiOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHR5cGUgPSBzdHJlYW0uZWF0KCIvIikgPyAiY2xvc2VUYWciIDogIm9wZW5UYWciOwogICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICAgIHRhZ05hbWUgPSAiIjsKICAgICAgICB2YXIgYzsKICAgICAgICB3aGlsZSAoKGMgPSBzdHJlYW0uZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKSkpIHRhZ05hbWUgKz0gYzsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnOwogICAgICAgIHJldHVybiAidGFnIjsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiYiKSB7CiAgICAgIHZhciBvazsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiMiKSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCJ4IikpIHsKICAgICAgICAgIG9rID0gc3RyZWFtLmVhdFdoaWxlKC9bYS1mQS1GXGRdLykgJiYgc3RyZWFtLmVhdCgiOyIpOyAgICAgICAgICAKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb2sgPSBzdHJlYW0uZWF0V2hpbGUoL1tcZF0vKSAmJiBzdHJlYW0uZWF0KCI7Iik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG9rID0gc3RyZWFtLmVhdFdoaWxlKC9bXHdcLlwtOl0vKSAmJiBzdHJlYW0uZWF0KCI7Iik7CiAgICAgIH0KICAgICAgcmV0dXJuIG9rID8gImF0b20iIDogImVycm9yIjsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1teJjxdLyk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5UYWcoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPiIgfHwgKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCI+IikpKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0OwogICAgICB0eXBlID0gY2ggPT0gIj4iID8gImVuZFRhZyIgOiAic2VsZmNsb3NlVGFnIjsKICAgICAgcmV0dXJuICJ0YWciOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIj0iKSB7CiAgICAgIHR5cGUgPSAiZXF1YWxzIjsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmICgvW1wnXCJdLy50ZXN0KGNoKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7CiAgICAgIHJldHVybiAid29yZCI7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpbkF0dHJpYnV0ZShxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm5leHQoKSA9PSBxdW90ZSkgewogICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRhZzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gInN0cmluZyI7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gaW5CbG9jayhzdHlsZSwgdGVybWluYXRvcikgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgd2hpbGUgKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRvY3R5cGUoZGVwdGgpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHZhciBjaDsKICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAoY2ggPT0gIjwiKSB7CiAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGRvY3R5cGUoZGVwdGggKyAxKTsKICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9IGVsc2UgaWYgKGNoID09ICI+IikgewogICAgICAgICAgaWYgKGRlcHRoID09IDEpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBkb2N0eXBlKGRlcHRoIC0gMSk7CiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50b2tlbml6ZShzdHJlYW0sIHN0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICJtZXRhIjsKICAgIH07CiAgfQoKICB2YXIgY3VyU3RhdGUsIHNldFN0eWxlOwogIGZ1bmN0aW9uIHBhc3MoKSB7CiAgICBmb3IgKHZhciBpID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBjdXJTdGF0ZS5jYy5wdXNoKGFyZ3VtZW50c1tpXSk7CiAgfQogIGZ1bmN0aW9uIGNvbnQoKSB7CiAgICBwYXNzLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHRhZ05hbWUsIHN0YXJ0T2ZMaW5lKSB7CiAgICB2YXIgbm9JbmRlbnQgPSBLbHVkZ2VzLmRvTm90SW5kZW50Lmhhc093blByb3BlcnR5KHRhZ05hbWUpIHx8IChjdXJTdGF0ZS5jb250ZXh0ICYmIGN1clN0YXRlLmNvbnRleHQubm9JbmRlbnQpOwogICAgY3VyU3RhdGUuY29udGV4dCA9IHsKICAgICAgcHJldjogY3VyU3RhdGUuY29udGV4dCwKICAgICAgdGFnTmFtZTogdGFnTmFtZSwKICAgICAgaW5kZW50OiBjdXJTdGF0ZS5pbmRlbnRlZCwKICAgICAgc3RhcnRPZkxpbmU6IHN0YXJ0T2ZMaW5lLAogICAgICBub0luZGVudDogbm9JbmRlbnQKICAgIH07CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoKSB7CiAgICBpZiAoY3VyU3RhdGUuY29udGV4dCkgY3VyU3RhdGUuY29udGV4dCA9IGN1clN0YXRlLmNvbnRleHQucHJldjsKICB9CgogIGZ1bmN0aW9uIGVsZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIm9wZW5UYWciKSB7CiAgICAgIGN1clN0YXRlLnRhZ05hbWUgPSB0YWdOYW1lOwogICAgICByZXR1cm4gY29udChhdHRyaWJ1dGVzLCBlbmR0YWcoY3VyU3RhdGUuc3RhcnRPZkxpbmUpKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PSAiY2xvc2VUYWciKSB7CiAgICAgIHZhciBlcnIgPSBmYWxzZTsKICAgICAgaWYgKGN1clN0YXRlLmNvbnRleHQpIHsKICAgICAgICBlcnIgPSBjdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUgIT0gdGFnTmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnIgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgcmV0dXJuIGNvbnQoZW5kY2xvc2V0YWcoZXJyKSk7CiAgICB9CiAgICByZXR1cm4gY29udCgpOwogIH0KICBmdW5jdGlvbiBlbmR0YWcoc3RhcnRPZkxpbmUpIHsKICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmICh0eXBlID09ICJzZWxmY2xvc2VUYWciIHx8CiAgICAgICAgICAodHlwZSA9PSAiZW5kVGFnIiAmJiBLbHVkZ2VzLmF1dG9TZWxmQ2xvc2Vycy5oYXNPd25Qcm9wZXJ0eShjdXJTdGF0ZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkpKSkKICAgICAgICByZXR1cm4gY29udCgpOwogICAgICBpZiAodHlwZSA9PSAiZW5kVGFnIikge3B1c2hDb250ZXh0KGN1clN0YXRlLnRhZ05hbWUsIHN0YXJ0T2ZMaW5lKTsgcmV0dXJuIGNvbnQoKTt9CiAgICAgIHJldHVybiBjb250KCk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBlbmRjbG9zZXRhZyhlcnIpIHsKICAgIHJldHVybiBmdW5jdGlvbih0eXBlKSB7CiAgICAgIGlmIChlcnIpIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHsgcG9wQ29udGV4dCgpOyByZXR1cm4gY29udCgpOyB9CiAgICAgIHNldFN0eWxlID0gImVycm9yIjsKICAgICAgcmV0dXJuIGNvbnQoYXJndW1lbnRzLmNhbGxlZSk7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBhdHRyaWJ1dGVzKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ3b3JkIikge3NldFN0eWxlID0gImF0dHJpYnV0ZSI7IHJldHVybiBjb250KGF0dHJpYnV0ZSwgYXR0cmlidXRlcyk7fQogICAgaWYgKHR5cGUgPT0gImVuZFRhZyIgfHwgdHlwZSA9PSAic2VsZmNsb3NlVGFnIikgcmV0dXJuIHBhc3MoKTsKICAgIHNldFN0eWxlID0gImVycm9yIjsKICAgIHJldHVybiBjb250KGF0dHJpYnV0ZXMpOwogIH0KICBmdW5jdGlvbiBhdHRyaWJ1dGUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gImVxdWFscyIpIHJldHVybiBjb250KGF0dHZhbHVlLCBhdHRyaWJ1dGVzKTsKICAgIGlmICghS2x1ZGdlcy5hbGxvd01pc3NpbmcpIHNldFN0eWxlID0gImVycm9yIjsKICAgIHJldHVybiAodHlwZSA9PSAiZW5kVGFnIiB8fCB0eXBlID09ICJzZWxmY2xvc2VUYWciKSA/IHBhc3MoKSA6IGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gYXR0dmFsdWUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInN0cmluZyIpIHJldHVybiBjb250KGF0dHZhbHVlbWF5YmUpOwogICAgaWYgKHR5cGUgPT0gIndvcmQiICYmIEtsdWRnZXMuYWxsb3dVbnF1b3RlZCkge3NldFN0eWxlID0gInN0cmluZyI7IHJldHVybiBjb250KCk7fQogICAgc2V0U3R5bGUgPSAiZXJyb3IiOwogICAgcmV0dXJuICh0eXBlID09ICJlbmRUYWciIHx8IHR5cGUgPT0gInNlbGZDbG9zZVRhZyIpID8gcGFzcygpIDogY29udCgpOwogIH0KICBmdW5jdGlvbiBhdHR2YWx1ZW1heWJlKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJzdHJpbmciKSByZXR1cm4gY29udChhdHR2YWx1ZW1heWJlKTsKICAgIGVsc2UgcmV0dXJuIHBhc3MoKTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHt0b2tlbml6ZTogaW5UZXh0LCBjYzogW10sIGluZGVudGVkOiAwLCBzdGFydE9mTGluZTogdHJ1ZSwgdGFnTmFtZTogbnVsbCwgY29udGV4dDogbnVsbH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBzdGF0ZS5zdGFydE9mTGluZSA9IHRydWU7CiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdHJlYW0uaW5kZW50YXRpb24oKTsKICAgICAgfQogICAgICBpZiAoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwoKICAgICAgc2V0U3R5bGUgPSB0eXBlID0gdGFnTmFtZSA9IG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICBzdGF0ZS50eXBlID0gdHlwZTsKICAgICAgaWYgKChzdHlsZSB8fCB0eXBlKSAmJiBzdHlsZSAhPSAiY29tbWVudCIpIHsKICAgICAgICBjdXJTdGF0ZSA9IHN0YXRlOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICB2YXIgY29tYiA9IHN0YXRlLmNjLnBvcCgpIHx8IGVsZW1lbnQ7CiAgICAgICAgICBpZiAoY29tYih0eXBlIHx8IHN0eWxlKSkgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzZXRTdHlsZSB8fCBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyLCBmdWxsTGluZSkgewogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmICgoc3RhdGUudG9rZW5pemUgIT0gaW5UYWcgJiYgc3RhdGUudG9rZW5pemUgIT0gaW5UZXh0KSB8fAogICAgICAgICAgY29udGV4dCAmJiBjb250ZXh0Lm5vSW5kZW50KQogICAgICAgIHJldHVybiBmdWxsTGluZSA/IGZ1bGxMaW5lLm1hdGNoKC9eKFxzKikvKVswXS5sZW5ndGggOiAwOwogICAgICBpZiAoYWxpZ25DREFUQSAmJiAvPCFcW0NEQVRBXFsvLnRlc3QodGV4dEFmdGVyKSkgcmV0dXJuIDA7CiAgICAgIGlmIChjb250ZXh0ICYmIC9ePFwvLy50ZXN0KHRleHRBZnRlcikpCiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgd2hpbGUgKGNvbnRleHQgJiYgIWNvbnRleHQuc3RhcnRPZkxpbmUpCiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucHJldjsKICAgICAgaWYgKGNvbnRleHQpIHJldHVybiBjb250ZXh0LmluZGVudCArIGluZGVudFVuaXQ7CiAgICAgIGVsc2UgcmV0dXJuIDA7CiAgICB9LAoKICAgIGNvbXBhcmVTdGF0ZXM6IGZ1bmN0aW9uKGEsIGIpIHsKICAgICAgaWYgKGEuaW5kZW50ZWQgIT0gYi5pbmRlbnRlZCB8fCBhLnRva2VuaXplICE9IGIudG9rZW5pemUpIHJldHVybiBmYWxzZTsKICAgICAgZm9yICh2YXIgY2EgPSBhLmNvbnRleHQsIGNiID0gYi5jb250ZXh0OyA7IGNhID0gY2EucHJldiwgY2IgPSBjYi5wcmV2KSB7CiAgICAgICAgaWYgKCFjYSB8fCAhY2IpIHJldHVybiBjYSA9PSBjYjsKICAgICAgICBpZiAoY2EudGFnTmFtZSAhPSBjYi50YWdOYW1lKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogIi8iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoImFwcGxpY2F0aW9uL3htbCIsICJ4bWwiKTsKaWYgKCFDb2RlTWlycm9yLm1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eSgidGV4dC9odG1sIikpCiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L2h0bWwiLCB7bmFtZTogInhtbCIsIGh0bWxNb2RlOiB0cnVlfSk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFB1cmUgWE1MIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ4bWxwdXJlLmpzIj48L3NjcmlwdD4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yOiBYTUwgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgombHQ7P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ibm8iID8mZ3Q7CgombHQ7IS0tIFRoaXMgaXMgdGhlIHB1cmUgWE1MIG1vZGUsCmFuZCB3ZSdyZSBpbnNpZGUgYSBjb21tZW50ISAtLSZndDsKCiZsdDtjYXRhbG9nJmd0OwogICZsdDtib29rcyZndDsKICAgICZsdDtib29rIGlkPSJiazAxIiZndDsKICAgICAgJmx0O3RpdGxlJmd0O0xvcmQgb2YgTGlnaHQmbHQ7L3RpdGxlJmd0OwogICAgICAmbHQ7YXV0aG9yJmd0O1JvZ2VyIFplbGF6bnkmbHQ7L2F1dGhvciZndDsKICAgICAgJmx0O3llYXImZ3Q7MTk2NyZsdDsveWVhciZndDsKICAgICAgJmx0O2Rlc2NyaXB0aW9uJmd0OyZsdDshW0NEQVRBW1RoaXMgaXMgYSBncmVhdCBib29rLCByZWFsbHkhIV1dJmd0OyZsdDsvZGVzY3JpcHRpb24mZ3Q7CiAgICAmbHQ7L2Jvb2smZ3Q7CiAgJmx0Oy9ib29rcyZndDsKJmx0Oy9jYXRhbG9nJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZToge25hbWU6ICJ4bWxwdXJlIn19KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPlRoaXMgaXMgbXkgWE1MIHBhcnNlciwgYmFzZWQgb24gdGhlIG9yaWdpbmFsOjwvcD4gCiAgICA8dWw+IAogICAgCTxsaT5ObyBodG1sIG1vZGUgLSB0aGlzIGlzIHB1cmUgeG1sPC9saT4gCiAgICAJPGxpPklsbGVnYWwgYXR0cmlidXRlcyBhbmQgZWxlbWVudCBuYW1lcyBhcmUgZXJyb3JzPC9saT4gCiAgICAJPGxpPkF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgdmFsdWU8L2xpPiAKICAgIAk8bGk+WE1MIGRlY2xhcmF0aW9uIHN1cHBvcnRlZCAoZS5nLjogPGI+Jmx0Oz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiIHN0YW5kYWxvbmU9Im5vIiA/Jmd0OzwvYj4pPC9saT4gCiAgICAJPGxpPkNEQVRBIGFuZCBjb21tZW50IGJsb2NrcyBhcmUgbm90IGluZGVudGVkIChleGNlcHQgZm9yIHRoZWlyIHN0YXJ0LXRhZyk8L2xpPiAKICAgIAk8bGk+QmV0dGVyIGhhbmRsaW5nIG9mIGVycm9ycyBwZXIgbGluZSB3aXRoIHRoZSBzdGF0ZSBvYmplY3QgLSBwcm92aWRlcyBnb29kIGluZnJhc3RydWN0dXJlIGZvciBleHRlbmRpbmcgaXQ8L2xpPiAKICAgIDwvdWw+IAogCiAgICA8cD5XaGF0J3MgbWlzc2luZzo8L3A+IAogICAgPHVsPiAKICAgIAk8bGk+TWFrZSBzdXJlIG9ubHkgYSBzaW5nbGUgcm9vdCBlbGVtZW50IGV4aXN0cyBhdCB0aGUgZG9jdW1lbnQgbGV2ZWw8L2xpPiAKICAgIAk8bGk+TXVsdGktbGluZSBhdHRyaWJ1dGVzIHNob3VsZCBOT1QgaW5kZW50PC9saT4KICAgIAk8bGk+U3RhcnQgdGFncyBhcmUgbm90IHBhaW50ZWQgcmVkIHdoZW4gdGhleSBoYXZlIG5vIG1hdGNoaW5nIGVuZCB0YWdzIChpcyB0aGlzIHJlYWxseSB3cm9uZz8pPC9saT4gCiAgICA8L3VsPiAKIAogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3htbDwvY29kZT4sIDxjb2RlPnRleHQveG1sPC9jb2RlPi48L3A+IAogCiAgICA8cD48Yj5AYXV0aG9yPC9iPjogRHJvciBCRyAoPGk+ZGVlYnVnLmRldlthdF1nbWFpbC5jb208L2k+KTxici8+IAogICAgPHA+PGI+QGRhdGU8L2I+OiBBdWd1c3QsIDIwMTE8YnIvPiAKICAgIDxwPjxiPkBnaXRodWI8L2I+OiA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vZGVlYnVnZ2VyL0NvZGVNaXJyb3IyJyB0YXJnZXQ9J2JsYW5rJz5odHRwczovL2dpdGh1Yi5jb20vZGVlYnVnZ2VyL0NvZGVNaXJyb3IyPC9hPjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xmlpure/xmlpure.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIHhtbHB1cmUuanMKICogCiAqIEJ1aWxkaW5nIHVwb24gYW5kIGltcHJvdmluZyB0aGUgQ29kZU1pcnJvciAyIFhNTCBwYXJzZXIKICogQGF1dGhvcjogRHJvciBCRyAoZGVlYnVnLmRldkBnbWFpbC5jb20pCiAqIEBkYXRlOiBBdWd1c3QsIDIwMTEKICovCgpDb2RlTWlycm9yLmRlZmluZU1vZGUoInhtbHB1cmUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogICAgLy8gY29uc3RhbnRzCiAgICB2YXIgU1RZTEVfRVJST1IgPSAiZXJyb3IiOwogICAgdmFyIFNUWUxFX0lOU1RSVUNUSU9OID0gImNvbW1lbnQiOwogICAgdmFyIFNUWUxFX0NPTU1FTlQgPSAiY29tbWVudCI7CiAgICB2YXIgU1RZTEVfRUxFTUVOVF9OQU1FID0gInRhZyI7CiAgICB2YXIgU1RZTEVfQVRUUklCVVRFID0gImF0dHJpYnV0ZSI7CiAgICB2YXIgU1RZTEVfV09SRCA9ICJzdHJpbmciOwogICAgdmFyIFNUWUxFX1RFWFQgPSAiYXRvbSI7CiAgICB2YXIgU1RZTEVfRU5USVRJRVMgPSAic3RyaW5nIjsKCiAgICB2YXIgVEFHX0lOU1RSVUNUSU9OID0gIiFpbnN0cnVjdGlvbiI7CiAgICB2YXIgVEFHX0NEQVRBID0gIiFjZGF0YSI7CiAgICB2YXIgVEFHX0NPTU1FTlQgPSAiIWNvbW1lbnQiOwogICAgdmFyIFRBR19URVhUID0gIiF0ZXh0IjsKICAgIAogICAgdmFyIGRvTm90SW5kZW50ID0gewogICAgICAgICIhY2RhdGEiOiB0cnVlLAogICAgICAgICIhY29tbWVudCI6IHRydWUsCiAgICAgICAgIiF0ZXh0IjogdHJ1ZSwKICAgICAgICAiIWluc3RydWN0aW9uIjogdHJ1ZQogICAgfTsKCiAgICAvLyBvcHRpb25zCiAgICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gaGVscGVyIGZ1bmN0aW9ucwogICAgCiAgICAvLyBjaGFpbiBhIHBhcnNlciB0byBhbm90aGVyIHBhcnNlcgogICAgZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgcGFyc2VyKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgICAgcmV0dXJuIHBhcnNlcihzdHJlYW0sIHN0YXRlKTsKICAgIH0KICAgIAogICAgLy8gcGFyc2UgYSBibG9jayAoY29tbWVudCwgQ0RBVEEgb3IgdGV4dCkKICAgIGZ1bmN0aW9uIGluQmxvY2soc3R5bGUsIHRlcm1pbmF0b3IsIG5leHRUb2tlbml6ZSkgewogICAgICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRlcm1pbmF0b3IpKSB7CiAgICAgICAgICAgICAgICAgICAgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBuZXh0VG9rZW5pemU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9OwogICAgfQogICAgCiAgICAvLyBnbyBkb3duIGEgbGV2ZWwgaW4gdGhlIGRvY3VtZW50CiAgICAvLyAoaGludDogbG9vayBhdCB3aG8gY2FsbHMgdGhpcyBmdW5jdGlvbiB0byBrbm93IHdoYXQgdGhlIGNvbnRleHRzIGFyZSkKICAgIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCB0YWdOYW1lKSB7CiAgICAgICAgdmFyIG5vSW5kZW50ID0gZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKHN0YXRlLmNvbnRleHQgJiYgc3RhdGUuY29udGV4dC5kb0luZGVudCk7CiAgICAgICAgdmFyIG5ld0NvbnRleHQgPSB7CiAgICAgICAgICAgIHRhZ05hbWU6IHRhZ05hbWUsCiAgICAgICAgICAgIHByZXY6IHN0YXRlLmNvbnRleHQsCiAgICAgICAgICAgIGluZGVudDogc3RhdGUuY29udGV4dCA/IHN0YXRlLmNvbnRleHQuaW5kZW50ICsgaW5kZW50VW5pdCA6IDAsCiAgICAgICAgICAgIGxpbmVOdW1iZXI6IHN0YXRlLmxpbmVOdW1iZXIsCiAgICAgICAgICAgIGluZGVudGVkOiBzdGF0ZS5pbmRlbnRlZCwKICAgICAgICAgICAgbm9JbmRlbnQ6IG5vSW5kZW50CiAgICAgICAgfTsKICAgICAgICBzdGF0ZS5jb250ZXh0ID0gbmV3Q29udGV4dDsKICAgIH0KICAgIAogICAgLy8gZ28gdXAgYSBsZXZlbCBpbiB0aGUgZG9jdW1lbnQKICAgIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgICAgICBpZiAoc3RhdGUuY29udGV4dCkgewogICAgICAgICAgICB2YXIgb2xkQ29udGV4dCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgICAgICAgIHN0YXRlLmNvbnRleHQgPSBvbGRDb250ZXh0LnByZXY7CiAgICAgICAgICAgIHJldHVybiBvbGRDb250ZXh0OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyB3ZSBzaG91bGRuJ3QgYmUgaGVyZSAtIGl0IG1lYW5zIHdlIGRpZG4ndCBoYXZlIGEgY29udGV4dCB0byBwb3AKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgLy8gcmV0dXJuIHRydWUgaWYgdGhlIGN1cnJlbnQgdG9rZW4gaXMgc2VwZXJhdGVkIGZyb20gdGhlIHRva2VucyBiZWZvcmUgaXQKICAgIC8vIHdoaWNoIG1lYW5zIGVpdGhlciB0aGlzIGlzIHRoZSBzdGFydCBvZiB0aGUgbGluZSwgb3IgdGhlcmUgaXMgYXQgbGVhc3QKICAgIC8vIG9uZSBzcGFjZSBvciB0YWIgY2hhcmFjdGVyIGJlaGluZCB0aGUgdG9rZW4KICAgIC8vIG90aGVyd2lzZSByZXR1cm5zIGZhbHNlCiAgICBmdW5jdGlvbiBpc1Rva2VuU2VwYXJhdGVkKHN0cmVhbSkgewogICAgICAgIHJldHVybiBzdHJlYW0uc29sKCkgfHwKICAgICAgICAgICAgc3RyZWFtLnN0cmluZy5jaGFyQXQoc3RyZWFtLnN0YXJ0IC0gMSkgPT0gIiAiIHx8CiAgICAgICAgICAgIHN0cmVhbS5zdHJpbmcuY2hhckF0KHN0cmVhbS5zdGFydCAtIDEpID09ICJcdCI7CiAgICB9CiAgICAKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gY29udGV4dDogZG9jdW1lbnQKICAgIC8vIAogICAgLy8gYW4gWE1MIGRvY3VtZW50IGNhbiBjb250YWluOgogICAgLy8gLSBhIHNpbmdsZSBkZWNsYXJhdGlvbiAoaWYgZGVmaW5lZCwgaXQgbXVzdCBiZSB0aGUgdmVyeSBmaXJzdCBsaW5lKQogICAgLy8gLSBleGFjdGx5IG9uZSByb290IGVsZW1lbnQKICAgIC8vIEB0b2RvIHRyeSB0byBhY3R1YWxseSBsaW1pdCB0aGUgbnVtYmVyIG9mIHJvb3QgZWxlbWVudHMgdG8gMQogICAgLy8gLSB6ZXJvIG9yIG1vcmUgY29tbWVudHMKICAgIGZ1bmN0aW9uIHBhcnNlRG9jdW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmKHN0cmVhbS5lYXQoIjwiKSkgewogICAgICAgICAgICBpZihzdHJlYW0uZWF0KCI/IikpIHsKICAgICAgICAgICAgICAgIC8vIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KICAgICAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBUQUdfSU5TVFJVQ1RJT04pOwogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvblN0YXJ0VGFnOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLm1hdGNoKCIhLS0iKSkgewogICAgICAgICAgICAgICAgLy8gbmV3IGNvbnRleHQ6IGNvbW1lbnQKICAgICAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBUQUdfQ09NTUVOVCk7CiAgICAgICAgICAgICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgaW5CbG9jayhTVFlMRV9DT01NRU5ULCAiLS0+IiwgcGFyc2VEb2N1bWVudCkpOwogICAgICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVvbCgpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gZWxlbWVudAogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnRUYWdOYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBlcnJvciBvbiBsaW5lCiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgIH0KCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IFhNTCBlbGVtZW50IHN0YXJ0LXRhZyBvciBlbmQtdGFnCiAgICAvLwogICAgLy8gLSBlbGVtZW50IHN0YXJ0LXRhZyBjYW4gY29udGFpbiBhdHRyaWJ1dGVzCiAgICAvLyAtIGVsZW1lbnQgc3RhcnQtdGFnIG1heSBzZWxmLWNsb3NlIChvciBzdGFydCBhbiBlbGVtZW50IGJsb2NrIGlmIGl0IGRvZXNuJ3QpCiAgICAvLyAtIGVsZW1lbnQgZW5kLXRhZyBjYW4gY29udGFpbiBvbmx5IHRoZSB0YWcgbmFtZQogICAgZnVuY3Rpb24gcGFyc2VFbGVtZW50VGFnTmFtZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgLy8gZ2V0IHRoZSBuYW1lIG9mIHRoZSB0YWcKICAgICAgICB2YXIgc3RhcnRQb3MgPSBzdHJlYW0ucG9zOwogICAgICAgIGlmKHN0cmVhbS5tYXRjaCgvXlthLXpBLVpfOl1bLWEtekEtWjAtOV86Ll0qLykpIHsKICAgICAgICAgICAgLy8gZWxlbWVudCBzdGFydC10YWcKICAgICAgICAgICAgdmFyIHRhZ05hbWUgPSBzdHJlYW0uc3RyaW5nLnN1YnN0cmluZyhzdGFydFBvcywgc3RyZWFtLnBvcyk7CiAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCB0YWdOYW1lKTsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9FTEVNRU5UX05BTUU7CiAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5tYXRjaCgvXlwvW2EtekEtWl86XVstYS16QS1aMC05XzouXSooICkqPi8pKSB7CiAgICAgICAgICAgIC8vIGVsZW1lbnQgZW5kLXRhZwogICAgICAgICAgICB2YXIgZW5kVGFnTmFtZSA9IHN0cmVhbS5zdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zICsgMSwgc3RyZWFtLnBvcyAtIDEpLnRyaW0oKTsKICAgICAgICAgICAgdmFyIG9sZENvbnRleHQgPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS5jb250ZXh0ID09IG51bGwgPyBwYXJzZURvY3VtZW50IDogcGFyc2VFbGVtZW50QmxvY2s7CiAgICAgICAgICAgIGlmKG9sZENvbnRleHQgPT0gbnVsbCB8fCBlbmRUYWdOYW1lICE9IG9sZENvbnRleHQudGFnTmFtZSkgewogICAgICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IGFuZCBlbmQgdGFnIG5hbWVzIHNob3VsZCBtYXRjaCAtIGVycm9yCiAgICAgICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBubyB0YWcgbmFtZSAtIGVycm9yCiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1tePl0vKTsKICAgICAgICAgICAgc3RyZWFtLmVhdCgiPiIpOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gcGFyc2VFbGVtZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZihzdHJlYW0ubWF0Y2goL15cLz4vKSkgewogICAgICAgICAgICAvLyBzZWxmLWNsb3NpbmcgdGFnCiAgICAgICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZUVsZW1lbnRCbG9jazsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLmVhdCgvXj4vKSkgewogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRUxFTUVOVF9OQU1FOwogICAgICAgIH0gZWxzZSBpZihpc1Rva2VuU2VwYXJhdGVkKHN0cmVhbSkgJiYgc3RyZWFtLm1hdGNoKC9eW2EtekEtWl86XVstYS16QS1aMC05XzouXSooICkqPS8pKSB7CiAgICAgICAgICAgIC8vIGF0dHJpYnV0ZQogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlQXR0cmlidXRlOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfQVRUUklCVVRFOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBubyBvdGhlciBvcHRpb25zIC0gdGhpcyBpcyBhbiBlcnJvcgogICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRG9jdW1lbnQ7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXj5dLyk7CiAgICAgICAgc3RyZWFtLmVhdCgiPiIpOwogICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgIH0KICAgIAogICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAvLyBjb250ZXh0OiBhdHRyaWJ1dGUKICAgIC8vIAogICAgLy8gYXR0cmlidXRlIHZhbHVlcyBtYXkgY29udGFpbiBldmVyeXRoaW5nLCBleGNlcHQ6CiAgICAvLyAtIHRoZSBlbmRpbmcgcXVvdGUgKHdpdGggJyBvciAiKSAtIHRoaXMgbWFya3MgdGhlIGVuZCBvZiB0aGUgdmFsdWUKICAgIC8vIC0gdGhlIGNoYXJhY3RlciAiPCIgLSBzaG91bGQgbmV2ZXIgYXBwZWFyCiAgICAvLyAtIGFtcGVyc2FuZCAoIiYiKSAtIHVubGVzcyBpdCBzdGFydHMgYSByZWZlcmVuY2U6IGEgc3RyaW5nIHRoYXQgZW5kcyB3aXRoIGEgc2VtaS1jb2xvbiAoIjsiKQogICAgLy8gLS0tPiBub3RlOiB0aGlzIHBhcnNlciBpcyBsYXggaW4gd2hhdCBtYXkgYmUgcHV0IGludG8gYSByZWZlcmVuY2Ugc3RyaW5nLAogICAgLy8gLS0tPiBjb25zdWx0IGh0dHA6Ly93d3cudzMub3JnL1RSL1JFQy14bWwvI05ULVJlZmVyZW5jZSBpZiB5b3Ugd2FudCB0byBtYWtlIGl0IHRpZ2h0ZXIKICAgIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgcXVvdGUgPSBzdHJlYW0ubmV4dCgpOwogICAgICAgIGlmKHF1b3RlICE9ICJcIiIgJiYgcXVvdGUgIT0gIiciKSB7CiAgICAgICAgICAgIC8vIGF0dHJpYnV0ZSBtdXN0IGJlIHF1b3RlZAogICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIHN0YXRlLnRva1BhcmFtcy5xdW90ZSA9IHF1b3RlOyAgICAKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlQXR0cmlidXRlVmFsdWU7CiAgICAgICAgcmV0dXJuIFNUWUxFX1dPUkQ7CiAgICB9CgogICAgLy8gQHRvZG86IGZpbmQgb3V0IHdoZXRoZXIgdGhpcyBhdHRyaWJ1dGUgdmFsdWUgc3BhbnMgbXVsdGlwbGUgbGluZXMsCiAgICAvLyAgICAgICAgYW5kIGlmIHNvLCBwdXNoIGEgY29udGV4dCBmb3IgaXQgaW4gb3JkZXIgbm90IHRvIGluZGVudCBpdAogICAgLy8gICAgICAgIChvciBzb21ldGhpbmcgb2YgdGhlIHNvcnQuLikKICAgIGZ1bmN0aW9uIHBhcnNlQXR0cmlidXRlVmFsdWUoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBjaCA9ICIiOwogICAgICAgIHdoaWxlKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgICAgICAgICBpZihjaCA9PSBzdGF0ZS50b2tQYXJhbXMucXVvdGUpIHsKICAgICAgICAgICAgICAgIC8vIGVuZCBxdW90ZSBmb3VuZAogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICByZXR1cm4gU1RZTEVfV09SRDsKICAgICAgICAgICAgfSBlbHNlIGlmKGNoID09ICI8IikgewogICAgICAgICAgICAgICAgLy8gY2FuJ3QgaGF2ZSBsZXNzLXRoYW4gc2lnbnMgaW4gYW4gYXR0cmlidXRlIHZhbHVlLCBldmVyCiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCkKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VFbGVtZW50OwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9IGVsc2UgaWYoY2ggPT0gIiYiKSB7CiAgICAgICAgICAgICAgICAvLyByZWZlcmVuY2UgLSBsb29rIGZvciBhIHNlbWktY29sb24sIG9yIHJldHVybiBlcnJvciBpZiBub25lIGZvdW5kCiAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHNlbWktY29sb24gaXNuJ3QgcmlnaHQgYWZ0ZXIgdGhlIGFtcGVyc2FuZAogICAgICAgICAgICAgICAgaWYoY2ggPT0gJzsnKSB7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpCiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgbm8gbGVzcy10aGFuIGNoYXJhY3RlcnMgc2xpcHBlZCBpbgogICAgICAgICAgICAgICAgd2hpbGUoIXN0cmVhbS5lb2woKSAmJiBjaCAhPSAiOyIpIHsKICAgICAgICAgICAgICAgICAgICBpZihjaCA9PSAiPCIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3QgaGF2ZSBsZXNzLXRoYW4gc2lnbnMgaW4gYW4gYXR0cmlidXRlIHZhbHVlLCBldmVyCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKQogICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZihzdHJlYW0uZW9sKCkgJiYgY2ggIT0gIjsiKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gbm8gYW1wZXJzYW5kIGZvdW5kIC0gZXJyb3IKICAgICAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBhdHRyaWJ1dGUgdmFsdWUgY29udGludWVzIHRvIG5leHQgbGluZQogICAgICAgIHJldHVybiBTVFlMRV9XT1JEOwogICAgfQogICAgCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IGVsZW1lbnQgYmxvY2sKICAgIC8vCiAgICAvLyBhIGJsb2NrIGNhbiBjb250YWluOgogICAgLy8gLSBlbGVtZW50cwogICAgLy8gLSB0ZXh0CiAgICAvLyAtIENEQVRBIHNlY3Rpb25zCiAgICAvLyAtIGNvbW1lbnRzCiAgICBmdW5jdGlvbiBwYXJzZUVsZW1lbnRCbG9jayhzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYoc3RyZWFtLmVhdCgiPCIpKSB7CiAgICAgICAgICAgIGlmKHN0cmVhbS5tYXRjaCgiPyIpKSB7CiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0lOU1RSVUNUSU9OKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25TdGFydFRhZzsKICAgICAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICAgICAgfSBlbHNlIGlmKHN0cmVhbS5tYXRjaCgiIS0tIikpIHsKICAgICAgICAgICAgICAgIC8vIG5ldyBjb250ZXh0OiBjb21tZW50CiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0NPTU1FTlQpOwogICAgICAgICAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIGluQmxvY2soU1RZTEVfQ09NTUVOVCwgIi0tPiIsCiAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZihzdHJlYW0ubWF0Y2goIiFbQ0RBVEFbIikpIHsKICAgICAgICAgICAgICAgIC8vIG5ldyBjb250ZXh0OiBDREFUQSBzZWN0aW9uCiAgICAgICAgICAgICAgICBwdXNoQ29udGV4dChzdGF0ZSwgVEFHX0NEQVRBKTsKICAgICAgICAgICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBpbkJsb2NrKFNUWUxFX1RFWFQsICJdXT4iLAogICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbnRleHQgPT0gbnVsbCA/IHBhcnNlRG9jdW1lbnQgOiBwYXJzZUVsZW1lbnRCbG9jaykpOwogICAgICAgICAgICB9IGVsc2UgaWYoc3RyZWFtLmVhdFNwYWNlKCkgfHwgc3RyZWFtLmVvbCgpICkgewogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gZWxlbWVudAogICAgICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZUVsZW1lbnRUYWdOYW1lOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VMRU1FTlRfTkFNRTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZihzdHJlYW0uZWF0KCImIikpIHsKICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXjtdLyk7CiAgICAgICAgICAgIHN0cmVhbS5lYXQoIjsiKTsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0VOVElUSUVTOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIG5ldyBjb250ZXh0OiB0ZXh0CiAgICAgICAgICAgIHB1c2hDb250ZXh0KHN0YXRlLCBUQUdfVEVYVCk7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VUZXh0OwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBzdGF0ZS5jb250ZXh0ID09IG51bGwgPyBwYXJzZURvY3VtZW50IDogcGFyc2VFbGVtZW50QmxvY2s7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgCiAgICBmdW5jdGlvbiBwYXJzZVRleHQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW148XS8pOwogICAgICAgIGlmKCFzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgLy8gd2UgY2Fubm90IHBvc3NpYmx5IGJlIGluIHRoZSBkb2N1bWVudCBjb250ZXh0LAogICAgICAgICAgICAvLyBqdXN0IGluc2lkZSBhbiBlbGVtZW50IGJsb2NrCiAgICAgICAgICAgIHBvcENvbnRleHQoc3RhdGUpOwogICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gU1RZTEVfVEVYVDsKICAgIH0KCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgIC8vIGNvbnRleHQ6IFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucwogICAgLy8KICAgIC8vIFhNTCBwcm9jZXNzaW5nIGluc3RydWN0aW9ucyAoUElzKSBhbGxvdyBkb2N1bWVudHMgdG8gY29udGFpbiBpbnN0cnVjdGlvbnMgZm9yIGFwcGxpY2F0aW9ucy4KICAgIC8vIFBJIGZvcm1hdDogPD9uYW1lIGRhdGE/PgogICAgLy8gLSAnbmFtZScgY2FuIGJlIGFueXRoaW5nIG90aGVyIHRoYW4gJ3htbCcgKGNhc2UtaW5zZW5zaXRpdmUpCiAgICAvLyAtICdkYXRhJyBjYW4gYmUgYW55dGhpbmcgd2hpY2ggZG9lc24ndCBjb250YWluICc/PicKICAgIC8vIFhNTCBkZWNsYXJhdGlvbiBpcyBhIHNwZWNpYWwgUEkgKHNlZSBYTUwgZGVjbGFyYXRpb24gY29udGV4dCBiZWxvdykKICAgIGZ1bmN0aW9uIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uU3RhcnRUYWcoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIGlmKHN0cmVhbS5tYXRjaCgieG1sIiwgdHJ1ZSwgdHJ1ZSkpIHsKICAgICAgICAgICAgLy8geG1sIGRlY2xhcmF0aW9uCiAgICAgICAgICAgIGlmKHN0YXRlLmxpbmVOdW1iZXIgPiAxIHx8IHN0cmVhbS5wb3MgPiA1KSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRG9jdW1lbnQ7CiAgICAgICAgICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRGVjbGFyYXRpb25WZXJzaW9uOwogICAgICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyByZWd1bGFyIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24KICAgICAgICBpZihpc1Rva2VuU2VwYXJhdGVkKHN0cmVhbSkgfHwgc3RyZWFtLm1hdGNoKCI/PiIpKSB7CiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBzcGFjZSBhZnRlciB0aGUgc3RhcnQtdGFnLCBvciBub3RoaW5nIGJ1dCB0aGUgZW5kLXRhZwogICAgICAgICAgICAvLyBlaXRoZXIgd2F5IC0gZXJyb3IhCiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VEb2N1bWVudDsKICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICByZXR1cm4gU1RZTEVfRVJST1I7CiAgICAgICAgfQoKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uQm9keTsKICAgICAgICByZXR1cm4gU1RZTEVfSU5TVFJVQ1RJT047CiAgICB9CgogICAgZnVuY3Rpb24gcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25Cb2R5KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoL1teP10vKTsKICAgICAgICBpZihzdHJlYW0uZWF0KCI/IikpIHsKICAgICAgICAgICAgaWYoc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgICAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gc3RhdGUuY29udGV4dCA9PSBudWxsID8gcGFyc2VEb2N1bWVudCA6IHBhcnNlRWxlbWVudEJsb2NrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgIH0KCiAgICAKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gY29udGV4dDogWE1MIGRlY2xhcmF0aW9uCiAgICAvLwogICAgLy8gWE1MIGRlY2xhcmF0aW9uIGlzIG9mIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgogICAgLy8gPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIiA/PgogICAgLy8gLSBtdXN0IHN0YXJ0IGF0IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGZpcnN0IGxpbmUKICAgIC8vIC0gbWF5IHNwYW4gbXVsdGlwbGUgbGluZXMKICAgIC8vIC0gbXVzdCBpbmNsdWRlICd2ZXJzaW9uJwogICAgLy8gLSBtYXkgaW5jbHVkZSAnZW5jb2RpbmcnIGFuZCAnc3RhbmRhbG9uZScgKGluIHRoYXQgb3JkZXIgYWZ0ZXIgJ3ZlcnNpb24nKQogICAgLy8gLSBhdHRyaWJ1dGUgbmFtZXMgbXVzdCBiZSBsb3dlcmNhc2UKICAgIC8vIC0gY2Fubm90IGNvbnRhaW4gYW55dGhpbmcgZWxzZSBvbiB0aGUgbGluZQogICAgZnVuY3Rpb24gcGFyc2VEZWNsYXJhdGlvblZlcnNpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VEZWNsYXJhdGlvbkVuY29kaW5nOwogICAgICAgIAogICAgICAgIGlmKGlzVG9rZW5TZXBhcmF0ZWQoc3RyZWFtKSAmJiBzdHJlYW0ubWF0Y2goL152ZXJzaW9uKCApKj0oICkqIihbYS16QS1aMC05Xy46XXxcLSkrIi8pKSB7CiAgICAgICAgICAgIHJldHVybiBTVFlMRV9JTlNUUlVDVElPTjsKICAgICAgICB9CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiBTVFlMRV9FUlJPUjsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9uRW5jb2Rpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gcGFyc2VEZWNsYXJhdGlvblN0YW5kYWxvbmU7CiAgICAgICAgCiAgICAgICAgaWYoaXNUb2tlblNlcGFyYXRlZChzdHJlYW0pICYmIHN0cmVhbS5tYXRjaCgvXmVuY29kaW5nKCApKj0oICkqIltBLVphLXpdKFtBLVphLXowLTkuX118XC0pKiIvKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfSU5TVFJVQ1RJT047CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGZ1bmN0aW9uIHBhcnNlRGVjbGFyYXRpb25TdGFuZGFsb25lKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRGVjbGFyYXRpb25FbmRUYWc7CiAgICAgICAgCiAgICAgICAgaWYoaXNUb2tlblNlcGFyYXRlZChzdHJlYW0pICYmIHN0cmVhbS5tYXRjaCgvXnN0YW5kYWxvbmUoICkqPSggKSoiKHllc3xubykiLykpIHsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBmdW5jdGlvbiBwYXJzZURlY2xhcmF0aW9uRW5kVGFnKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHBhcnNlRG9jdW1lbnQ7CiAgICAgICAgCiAgICAgICAgaWYoc3RyZWFtLm1hdGNoKCI/PiIpICYmIHN0cmVhbS5lb2woKSkgewogICAgICAgICAgICBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgICAgICAgcmV0dXJuIFNUWUxFX0lOU1RSVUNUSU9OOwogICAgICAgIH0KICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgcmV0dXJuIFNUWUxFX0VSUk9SOwogICAgfQoKICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgLy8gcmV0dXJuZWQgb2JqZWN0CiAgICByZXR1cm4gewogICAgICAgIGVsZWN0cmljQ2hhcnM6ICIvWyIsCiAgICAgICAgCiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICB0b2tlbml6ZTogcGFyc2VEb2N1bWVudCwKICAgICAgICAgICAgICAgIHRva1BhcmFtczoge30sCiAgICAgICAgICAgICAgICBsaW5lTnVtYmVyOiAwLAogICAgICAgICAgICAgICAgbGluZUVycm9yOiBmYWxzZSwKICAgICAgICAgICAgICAgIGNvbnRleHQ6IG51bGwsCiAgICAgICAgICAgICAgICBpbmRlbnRlZDogMAogICAgICAgICAgICB9OwogICAgICAgIH0sCgogICAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIGlmKHN0cmVhbS5zb2woKSkgewogICAgICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZSBhIG5ldyBsaW5lCiAgICAgICAgICAgICAgICBzdGF0ZS5saW5lTnVtYmVyKys7CiAgICAgICAgICAgICAgICBzdGF0ZS5saW5lRXJyb3IgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIGVhdCBhbGwgKHRoZSBzcGFjZXMpIHlvdSBjYW4KICAgICAgICAgICAgaWYoc3RyZWFtLmVhdFNwYWNlKCkpIHJldHVybiBudWxsOwoKICAgICAgICAgICAgLy8gcnVuIHRoZSBjdXJyZW50IHRva2VuaXplIGZ1bmN0aW9uLCBhY2NvcmRpbmcgdG8gdGhlIHN0YXRlCiAgICAgICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8gaXMgdGhlcmUgYW4gZXJyb3Igc29tZXdoZXJlIGluIHRoZSBsaW5lPwogICAgICAgICAgICBzdGF0ZS5saW5lRXJyb3IgPSAoc3RhdGUubGluZUVycm9yIHx8IHN0eWxlID09ICJlcnJvciIpOwoKICAgICAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgYmxhbmtMaW5lOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgICAgICAvLyBibGFuayBsaW5lcyBhcmUgbGluZXMgdG9vIQogICAgICAgICAgICBzdGF0ZS5saW5lTnVtYmVyKys7CiAgICAgICAgICAgIHN0YXRlLmxpbmVFcnJvciA9IGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgICAgIGlmKHN0YXRlLmNvbnRleHQpIHsKICAgICAgICAgICAgICAgIGlmKHN0YXRlLmNvbnRleHQubm9JbmRlbnQgPT0gdHJ1ZSkgewogICAgICAgICAgICAgICAgICAgIC8vIGRvIG5vdCBpbmRlbnQgLSBubyByZXR1cm4gdmFsdWUgYXQgYWxsCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYodGV4dEFmdGVyLm1hdGNoKC9ePFwvLiovKSkgewogICAgICAgICAgICAgICAgICAgIC8vIGVuZC10YWcgLSBpbmRlbnQgYmFjayB0byBsYXN0IGNvbnRleHQKICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuY29udGV4dC5pbmRlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZih0ZXh0QWZ0ZXIubWF0Y2goL148IVxbQ0RBVEFcWy8pKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gYSBzdGFuZC1hbG9uZSBDREFUQSBzdGFydC10YWcgLSBpbmRlbnQgYmFjayB0byBjb2x1bW4gMAogICAgICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIGluZGVudCB0byBsYXN0IGNvbnRleHQgKyByZWd1bGFyIGluZGVudCB1bml0CiAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGUuY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0sCiAgICAgICAgCiAgICAgICAgY29tcGFyZVN0YXRlczogZnVuY3Rpb24oYSwgYikgewogICAgICAgICAgICBpZiAoYS5pbmRlbnRlZCAhPSBiLmluZGVudGVkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGZvciAodmFyIGNhID0gYS5jb250ZXh0LCBjYiA9IGIuY29udGV4dDsgOyBjYSA9IGNhLnByZXYsIGNiID0gY2IucHJldikgewogICAgICAgICAgICAgICAgaWYgKCFjYSB8fCAhY2IpIHJldHVybiBjYSA9PSBjYjsKICAgICAgICAgICAgICAgIGlmIChjYS50YWdOYW1lICE9IGNiLnRhZ05hbWUpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94bWwiLCAicHVyZXhtbCIpOwpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveG1sIiwgInB1cmV4bWwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+IAo8aHRtbD4gCjwhLS0KLyoKQ29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KKi8KLS0+CiAgPGhlYWQ+IAogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSmF2YVNjcmlwdCBtb2RlPC90aXRsZT4gCiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+IAogICAgPHNjcmlwdCBzcmM9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+IAogICAgPHNjcmlwdCBzcmM9InhxdWVyeS5qcyI+PC9zY3JpcHQ+IAogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9kb2MvZG9jcy5jc3MiPiAKICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vdGhlbWUveHEtZGFyay5jc3MiPiAKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJCS5Db2RlTWlycm9yIHsKCQkJCWJvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOwoJCQl9CgkJCS5Db2RlTWlycm9yLXNjcm9sbCB7CgkJCQloZWlnaHQ6NDAwcHg7CgkJCX0KCQk8L3N0eWxlPiAKICA8L2hlYWQ+IAogIDxib2R5PiAKICAgIDxoMT5Db2RlTWlycm9yIDI6IFhRdWVyeSBtb2RlPC9oMT4gCiAKPGRpdiBjbGFzcz0iY20tcy1kZWZhdWx0Ij4gCgk8dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPiAKeHF1ZXJ5IHZlcnNpb24gJnF1b3Q7MS4wLW1sJnF1b3Q7OwooOiB0aGlzIGlzCiA6IGEgCiAgICJjb21tZW50IiA6KQpsZXQgJGxldCA6PSAmbHQ7eCBhdHRyPSZxdW90O3ZhbHVlJnF1b3Q7Jmd0OyZxdW90O3Rlc3QmcXVvdDsmbHQ7ZnVuYyZndDtmdW5jdGlvbigpICR2YXIge2Z1bmN0aW9uKCl9IHskdmFyfSZsdDsvZnVuYyZndDsmbHQ7L3gmZ3Q7CmxldCAkam9lOj0xCnJldHVybiBlbGVtZW50IGVsZW1lbnQgewoJYXR0cmlidXRlIGF0dHJpYnV0ZSB7IDEgfSwKCWVsZW1lbnQgdGVzdCB7ICYjMzk7YSYjMzk7IH0sIAoJYXR0cmlidXRlIGZvbyB7ICZxdW90O2JhciZxdW90OyB9LAoJZm46ZG9jKClbIGZvby9AYmFyIGVxICRsZXQgXSwKCS8veCB9ICAgIAogCig6IGEgbW9yZSAnZXZpbCcgdGVzdCA6KQooOiBNb2RpZmllZCBCbGFrZWxleSBleGFtcGxlICg6IHdpdGggbmVzdGVkIGNvbW1lbnQgOikgLi4uIDopCmRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpkZWNsYXJlKCkgeygpfTsKZGVjbGFyZSBwcml2YXRlIGZ1bmN0aW9uIGxvY2FsOnByaXZhdGUoKSB7KCl9OwpkZWNsYXJlIHByaXZhdGUgZnVuY3Rpb24gbG9jYWw6ZnVuY3Rpb24oKSB7KCl9OwpkZWNsYXJlIHByaXZhdGUgZnVuY3Rpb24gbG9jYWw6bG9jYWwoKSB7KCl9OwpsZXQgJGxldCA6PSAmbHQ7bGV0Jmd0O2xldCAkbGV0IDo9ICZxdW90O2xldCZxdW90OyZsdDsvbGV0Jmd0OwpyZXR1cm4gZWxlbWVudCBlbGVtZW50IHsKCWF0dHJpYnV0ZSBhdHRyaWJ1dGUgeyB0cnkgeyB4ZG1wOnZlcnNpb24oKSB9IGNhdGNoKCRlKSB7IHhkbXA6bG9nKCRlKSB9IH0sCglhdHRyaWJ1dGUgZm46ZG9jIHsgJnF1b3Q7YmFyJnF1b3Q7IGNhc3RhYmxlIGFzIHhzOnN0cmluZyB9LAoJZWxlbWVudCB0ZXh0IHsgdGV4dCB7ICZxdW90O3RleHQmcXVvdDsgfSB9LAoJZm46ZG9jKClbIGNoaWxkOjplcS8oQGJhciB8IGF0dHJpYnV0ZTo6YXR0cmlidXRlKSBlcSAkbGV0IF0sCgkvL2ZuOmRvYwp9CgoKCnhxdWVyeSB2ZXJzaW9uICZxdW90OzEuMC1tbCZxdW90OzsKCig6IENvcHlyaWdodCAyMDA2LTIwMTAgTWFyayBMb2dpYyBDb3Jwb3JhdGlvbi4gOikKCig6CiA6IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAmcXVvdDtMaWNlbnNlJnF1b3Q7KTsKIDogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogOiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKIDoKIDogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogOgogOiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiA6IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICZxdW90O0FTIElTJnF1b3Q7IEJBU0lTLAogOiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIDogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAogOiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIDopCgptb2R1bGUgbmFtZXNwYWNlIGpzb24gPSAmcXVvdDtodHRwOi8vbWFya2xvZ2ljLmNvbS9qc29uJnF1b3Q7OwpkZWNsYXJlIGRlZmF1bHQgZnVuY3Rpb24gbmFtZXNwYWNlICZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDUveHBhdGgtZnVuY3Rpb25zJnF1b3Q7OwoKKDogTmVlZCB0byBiYWNrc2xhc2ggZXNjYXBlIGFueSBkb3VibGUgcXVvdGVzLCBiYWNrc2xhc2hlcywgYW5kIG5ld2xpbmVzIDopCmRlY2xhcmUgZnVuY3Rpb24ganNvbjplc2NhcGUoJHMgYXMgeHM6c3RyaW5nKSBhcyB4czpzdHJpbmcgewogIGxldCAkcyA6PSByZXBsYWNlKCRzLCAmcXVvdDtcXCZxdW90OywgJnF1b3Q7XFxcXCZxdW90OykKICBsZXQgJHMgOj0gcmVwbGFjZSgkcywgJnF1b3Q7JnF1b3Q7JnF1b3Q7JnF1b3Q7LCAmcXVvdDtcXCZxdW90OyZxdW90OyZxdW90OykKICBsZXQgJHMgOj0gcmVwbGFjZSgkcywgY29kZXBvaW50cy10by1zdHJpbmcoKDEzLCAxMCkpLCAmcXVvdDtcXG4mcXVvdDspCiAgbGV0ICRzIDo9IHJlcGxhY2UoJHMsIGNvZGVwb2ludHMtdG8tc3RyaW5nKDEzKSwgJnF1b3Q7XFxuJnF1b3Q7KQogIGxldCAkcyA6PSByZXBsYWNlKCRzLCBjb2RlcG9pbnRzLXRvLXN0cmluZygxMCksICZxdW90O1xcbiZxdW90OykKICByZXR1cm4gJHMKfTsKCmRlY2xhcmUgZnVuY3Rpb24ganNvbjphdG9taXplKCR4IGFzIGVsZW1lbnQoKSkgYXMgeHM6c3RyaW5nIHsKICBpZiAoY291bnQoJHgvbm9kZSgpKSA9IDApIHRoZW4gJ251bGwnCiAgZWxzZSBpZiAoJHgvQHR5cGUgPSAmcXVvdDtudW1iZXImcXVvdDspIHRoZW4KICAgIGxldCAkY2FzdGFibGUgOj0gJHggY2FzdGFibGUgYXMgeHM6ZmxvYXQgb3IKICAgICAgICAgICAgICAgICAgICAgJHggY2FzdGFibGUgYXMgeHM6ZG91YmxlIG9yCiAgICAgICAgICAgICAgICAgICAgICR4IGNhc3RhYmxlIGFzIHhzOmRlY2ltYWwKICAgIHJldHVybgogICAgaWYgKCRjYXN0YWJsZSkgdGhlbiB4czpzdHJpbmcoJHgpCiAgICBlbHNlIGVycm9yKGNvbmNhdCgmcXVvdDtOb3QgYSBudW1iZXI6ICZxdW90OywgeGRtcDpkZXNjcmliZSgkeCkpKQogIGVsc2UgaWYgKCR4L0B0eXBlID0gJnF1b3Q7Ym9vbGVhbiZxdW90OykgdGhlbgogICAgbGV0ICRjYXN0YWJsZSA6PSAkeCBjYXN0YWJsZSBhcyB4czpib29sZWFuCiAgICByZXR1cm4KICAgIGlmICgkY2FzdGFibGUpIHRoZW4geHM6c3RyaW5nKHhzOmJvb2xlYW4oJHgpKQogICAgZWxzZSBlcnJvcihjb25jYXQoJnF1b3Q7Tm90IGEgYm9vbGVhbjogJnF1b3Q7LCB4ZG1wOmRlc2NyaWJlKCR4KSkpCiAgZWxzZSBjb25jYXQoJyZxdW90OycsIGpzb246ZXNjYXBlKCR4KSwgJyZxdW90OycpCn07CgooOiBQcmludCB0aGUgdGhpbmcgdGhhdCBjb21lcyBhZnRlciB0aGUgY29sb24gOikKZGVjbGFyZSBmdW5jdGlvbiBqc29uOnByaW50LXZhbHVlKCR4IGFzIGVsZW1lbnQoKSkgYXMgeHM6c3RyaW5nIHsKICBpZiAoY291bnQoJHgvKikgPSAwKSB0aGVuCiAgICBqc29uOmF0b21pemUoJHgpCiAgZWxzZSBpZiAoJHgvQHF1b3RlID0gJnF1b3Q7dHJ1ZSZxdW90OykgdGhlbgogICAgY29uY2F0KCcmcXVvdDsnLCBqc29uOmVzY2FwZSh4ZG1wOnF1b3RlKCR4L25vZGUoKSkpLCAnJnF1b3Q7JykKICBlbHNlCiAgICBzdHJpbmctam9pbigoJ3snLAogICAgICBzdHJpbmctam9pbihmb3IgJGkgaW4gJHgvKiByZXR1cm4ganNvbjpwcmludC1uYW1lLXZhbHVlKCRpKSwgJnF1b3Q7LCZxdW90OyksCiAgICAnfScpLCAmcXVvdDsmcXVvdDspCn07CgooOiBQcmludCB0aGUgbmFtZSBhbmQgdmFsdWUgYm90aCA6KQpkZWNsYXJlIGZ1bmN0aW9uIGpzb246cHJpbnQtbmFtZS12YWx1ZSgkeCBhcyBlbGVtZW50KCkpIGFzIHhzOnN0cmluZz8gewogIGxldCAkbmFtZSA6PSBuYW1lKCR4KQogIGxldCAkZmlyc3QtaW4tYXJyYXkgOj0KICAgIGNvdW50KCR4L3ByZWNlZGluZy1zaWJsaW5nOjoqW25hbWUoLikgPSAkbmFtZV0pID0gMCBhbmQKICAgIChjb3VudCgkeC9mb2xsb3dpbmctc2libGluZzo6KltuYW1lKC4pID0gJG5hbWVdKSAmZ3Q7IDAgb3IgJHgvQGFycmF5ID0gJnF1b3Q7dHJ1ZSZxdW90OykKICBsZXQgJGxhdGVyLWluLWFycmF5IDo9IGNvdW50KCR4L3ByZWNlZGluZy1zaWJsaW5nOjoqW25hbWUoLikgPSAkbmFtZV0pICZndDsgMAogIHJldHVybgoKICBpZiAoJGxhdGVyLWluLWFycmF5KSB0aGVuCiAgICAoKSAgKDogSSB3YXMgaGFuZGxlZCBwcmV2aW91c2x5IDopCiAgZWxzZSBpZiAoJGZpcnN0LWluLWFycmF5KSB0aGVuCiAgICBzdHJpbmctam9pbigoJyZxdW90OycsIGpzb246ZXNjYXBlKCRuYW1lKSwgJyZxdW90OzpbJywKICAgICAgc3RyaW5nLWpvaW4oKGZvciAkaSBpbiAoJHgsICR4L2ZvbGxvd2luZy1zaWJsaW5nOjoqW25hbWUoLikgPSAkbmFtZV0pIHJldHVybiBqc29uOnByaW50LXZhbHVlKCRpKSksICZxdW90OywmcXVvdDspLAogICAgJ10nKSwgJnF1b3Q7JnF1b3Q7KQogICBlbHNlCiAgICAgc3RyaW5nLWpvaW4oKCcmcXVvdDsnLCBqc29uOmVzY2FwZSgkbmFtZSksICcmcXVvdDs6JywganNvbjpwcmludC12YWx1ZSgkeCkpLCAmcXVvdDsmcXVvdDspCn07CgooOn4KICBUcmFuc2Zvcm1zIGFuIFhNTCBlbGVtZW50IGludG8gYSBKU09OIHN0cmluZyByZXByZXNlbnRhdGlvbi4gIFNlZSBodHRwOi8vanNvbi5vcmcuCiAgJmx0O3AvJmd0OwogIFNhbXBsZSB1c2FnZToKICAmbHQ7cHJlJmd0OwogICAgeHF1ZXJ5IHZlcnNpb24gJnF1b3Q7MS4wLW1sJnF1b3Q7OwogICAgaW1wb3J0IG1vZHVsZSBuYW1lc3BhY2UganNvbj0mcXVvdDtodHRwOi8vbWFya2xvZ2ljLmNvbS9qc29uJnF1b3Q7IGF0ICZxdW90O2pzb24ueHF5JnF1b3Q7OwogICAganNvbjpzZXJpYWxpemUoJmFtcDtsdDtmb28mYW1wO2d0OyZhbXA7bHQ7YmFyJmFtcDtndDtraWQmYW1wO2x0Oy9iYXImYW1wO2d0OyZhbXA7bHQ7L2ZvbyZhbXA7Z3Q7KQogICZsdDsvcHJlJmd0OwogIFNhbXBsZSB0cmFuc2Zvcm1hdGlvbnM6CiAgJmx0O3ByZSZndDsKICAmYW1wO2x0O2UvJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzpudWxsfQogICZhbXA7bHQ7ZSZhbXA7Z3Q7dGV4dCZhbXA7bHQ7L2UmYW1wO2d0OyBiZWNvbWVzIHsmcXVvdDtlJnF1b3Q7OiZxdW90O3RleHQmcXVvdDt9CiAgJmFtcDtsdDtlJmFtcDtndDtxdW90ZSAmcXVvdDsgZXNjYXBpbmcmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzomcXVvdDtxdW90ZSBcJnF1b3Q7IGVzY2FwaW5nJnF1b3Q7fQogICZhbXA7bHQ7ZSZhbXA7Z3Q7YmFja3NsYXNoIFwgZXNjYXBpbmcmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzomcXVvdDtiYWNrc2xhc2ggXFwgZXNjYXBpbmcmcXVvdDt9CiAgJmFtcDtsdDtlJmFtcDtndDsmYW1wO2x0O2EmYW1wO2d0O3RleHQxJmFtcDtsdDsvYSZhbXA7Z3Q7JmFtcDtsdDtiJmFtcDtndDt0ZXh0MiZhbXA7bHQ7L2ImYW1wO2d0OyZhbXA7bHQ7L2UmYW1wO2d0OyBiZWNvbWVzIHsmcXVvdDtlJnF1b3Q7OnsmcXVvdDthJnF1b3Q7OiZxdW90O3RleHQxJnF1b3Q7LCZxdW90O2ImcXVvdDs6JnF1b3Q7dGV4dDImcXVvdDt9fQogICZhbXA7bHQ7ZSZhbXA7Z3Q7JmFtcDtsdDthJmFtcDtndDt0ZXh0MSZhbXA7bHQ7L2EmYW1wO2d0OyZhbXA7bHQ7YSZhbXA7Z3Q7dGV4dDImYW1wO2x0Oy9hJmFtcDtndDsmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90Ozp7JnF1b3Q7YSZxdW90OzpbJnF1b3Q7dGV4dDEmcXVvdDssJnF1b3Q7dGV4dDImcXVvdDtdfX0KICAmYW1wO2x0O2UmYW1wO2d0OyZhbXA7bHQ7YSBhcnJheT0mcXVvdDt0cnVlJnF1b3Q7JmFtcDtndDt0ZXh0MSZhbXA7bHQ7L2EmYW1wO2d0OyZhbXA7bHQ7L2UmYW1wO2d0OyBiZWNvbWVzIHsmcXVvdDtlJnF1b3Q7OnsmcXVvdDthJnF1b3Q7OlsmcXVvdDt0ZXh0MSZxdW90O119fQogICZhbXA7bHQ7ZSZhbXA7Z3Q7JmFtcDtsdDthIHR5cGU9JnF1b3Q7Ym9vbGVhbiZxdW90OyZhbXA7Z3Q7ZmFsc2UmYW1wO2x0Oy9hJmFtcDtndDsmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90Ozp7JnF1b3Q7YSZxdW90OzpmYWxzZX19CiAgJmFtcDtsdDtlJmFtcDtndDsmYW1wO2x0O2EgdHlwZT0mcXVvdDtudW1iZXImcXVvdDsmYW1wO2d0OzEyMy41JmFtcDtsdDsvYSZhbXA7Z3Q7JmFtcDtsdDsvZSZhbXA7Z3Q7IGJlY29tZXMgeyZxdW90O2UmcXVvdDs6eyZxdW90O2EmcXVvdDs6MTIzLjV9fQogICZhbXA7bHQ7ZSBxdW90ZT0mcXVvdDt0cnVlJnF1b3Q7JmFtcDtndDsmYW1wO2x0O2RpdiBhdHRyaWI9JnF1b3Q7dmFsdWUmcXVvdDsvJmFtcDtndDsmYW1wO2x0Oy9lJmFtcDtndDsgYmVjb21lcyB7JnF1b3Q7ZSZxdW90OzomcXVvdDsmYW1wO2x0O2RpdiBhdHRyaWI9XCZxdW90O3ZhbHVlXCZxdW90Oy8mYW1wO2d0OyZxdW90O30KICAmbHQ7L3ByZSZndDsKICAmbHQ7cC8mZ3Q7CiAgTmFtZXNwYWNlIFVSSXMgYXJlIGlnbm9yZWQuICBOYW1lc3BhY2UgcHJlZml4ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBKU09OIG5hbWUuCiAgJmx0O3AvJmd0OwogIEF0dHJpYnV0ZXMgYXJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHNwZWNpYWwgYXR0cmlidXRlIEBhcnJheT0mcXVvdDt0cnVlJnF1b3Q7IHRoYXQKICBpbmRpY2F0ZXMgdGhlIEpTT04gc2VyaWFsaXphdGlvbiBzaG91bGQgd3JpdGUgdGhlIG5vZGUsIGV2ZW4gaWYgc2luZ2xlLCBhcyBhbgogIGFycmF5LCBhbmQgdGhlIGF0dHJpYnV0ZSBAdHlwZSB0aGF0IGNhbiBiZSBzZXQgdG8gJnF1b3Q7Ym9vbGVhbiZxdW90OyBvciAmcXVvdDtudW1iZXImcXVvdDsgdG8KICBkaWN0YXRlIHRoZSB2YWx1ZSBzaG91bGQgYmUgd3JpdHRlbiBhcyB0aGF0IHR5cGUgKHVucXVvdGVkKS4gIFRoZXJlJ3MgYWxzbwogIGFuIEBxdW90ZSBhdHRyaWJ1dGUgdGhhdCB3aGVuIHNldCB0byB0cnVlIHdyaXRlcyB0aGUgaW5uZXIgY29udGVudCBhcyB0ZXh0CiAgcmF0aGVyIHRoYW4gYXMgc3RydWN0dXJlZCBKU09OLCB1c2VmdWwgZm9yIHNlbmRpbmcgc29tZSBYSFRNTCBvdmVyIHRoZQogIHdpcmUuCiAgJmx0O3AvJmd0OwogIFRleHQgbm9kZXMgd2l0aGluIG1peGVkIGNvbnRlbnQgYXJlIGlnbm9yZWQuCgogIEBwYXJhbSAkeCBFbGVtZW50IG5vZGUgdG8gY29udmVydAogIEByZXR1cm4gU3RyaW5nIGhvbGRpbmcgSlNPTiBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mICR4CgogIEBhdXRob3IgSmFzb24gSHVudGVyCiAgQHZlcnNpb24gMS4wLjEKICAKICBQb3J0ZWQgdG8geHF1ZXJ5IDEuMC1tbDsgZG91YmxlIGVzY2FwZWQgYmFja3NsYXNoZXMgaW4ganNvbjplc2NhcGUKOikKZGVjbGFyZSBmdW5jdGlvbiBqc29uOnNlcmlhbGl6ZSgkeCBhcyBlbGVtZW50KCkpICBhcyB4czpzdHJpbmcgewogIHN0cmluZy1qb2luKCgneycsIGpzb246cHJpbnQtbmFtZS12YWx1ZSgkeCksICd9JyksICZxdW90OyZxdW90OykKfTsKICA8L3RleHRhcmVhPiAKPC9kaXY+IAogCiAgICA8c2NyaXB0PiAKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIHRoZW1lOiAieHEtZGFyayIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4gCiAKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT5hcHBsaWNhdGlvbi94cXVlcnk8L2NvZGU+LjwvcD4gCiAKICAgIDxwPkRldmVsb3BtZW50IG9mIHRoZSBDb2RlTWlycm9yIFhRdWVyeSBtb2RlIHdhcyBzcG9uc29yZWQgYnkgCiAgICAgIDxhIGhyZWY9Imh0dHA6Ly9tYXJrbG9naWMuY29tIj5NYXJrTG9naWM8L2E+IGFuZCBkZXZlbG9wZWQgYnkgCiAgICAgIDxhIGhyZWY9Imh0dHBzOi8vdHdpdHRlci5jb20vbWJyZXZvb3J0Ij5NaWtlIEJyZXZvb3J0PC9hPi4KICAgIDwvcD4KIAogIDwvYm9keT4gCjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKICAgICAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+CjxodG1sPgogIDxoZWFkPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwOi8vY29kZS5qcXVlcnkuY29tL3F1bml0L3F1bml0LWdpdC5jc3MiIHR5cGU9InRleHQvY3NzIi8+CiAgICA8c2NyaXB0IHNyYz0iaHR0cDovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktbGF0ZXN0LmpzIj4gPC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwOi8vY29kZS5qcXVlcnkuY29tL3F1bml0L3F1bml0LWdpdC5qcyI+PC9zY3JpcHQ+CgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4gCiAgICA8c2NyaXB0IHNyYz0iLi4veHF1ZXJ5LmpzIj48L3NjcmlwdD4KCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZXN0QmFzZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJ0ZXN0TXVsdGlBdHRyLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlc3RRdW90ZXMuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0idGVzdEVtcHR5U2VxdWVuY2VLZXl3b3JkLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9InRlc3ROYW1lc3BhY2VzLmpzIj48L3NjcmlwdD4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDEgaWQ9InF1bml0LWhlYWRlciI+WFF1ZXJ5IENvZGVNaXJyb3IgTW9kZTwvaDE+CiAgICA8aDIgaWQ9InF1bml0LWJhbm5lciI+PC9oMj4KICAgIDxoMiBpZD0icXVuaXQtdXNlckFnZW50Ij48L2gyPgogICAgPG9sIGlkPSJxdW5pdC10ZXN0cyI+CiAgICA8L29sPgogICAgPGRpdiBpZD0ic2FuZGJveCIgc3R5bGU9InJpZ2h0OjUwMDBweDsgcG9zaXRpb246YWJzb2x1dGU7ICI+PC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testBase.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgbW9kdWxlKCJ0ZXN0QmFzZSIpOwogICAgdGVzdCgiZXZpbHRlc3QiLCBmdW5jdGlvbigpIHsKICAgICAgZXhwZWN0KDEpOwoKICAgICAgdmFyIGlucHV0ID0gJ3hxdWVyeSB2ZXJzaW9uICZxdW90OzEuMC1tbCZxdW90OztcCiAgICAgICg6IHRoaXMgaXNcCiAgICAgICA6IGEgXAogICAgICAgICAiY29tbWVudCIgOilcCiAgICAgIGxldCAkbGV0IDo9ICZsdDt4IGF0dHI9JnF1b3Q7dmFsdWUmcXVvdDsmZ3Q7JnF1b3Q7dGVzdCZxdW90OyZsdDtmdW5jJmd0O2Z1bmN0aW9uKCkgJHZhciB7ZnVuY3Rpb24oKX0geyR2YXJ9Jmx0Oy9mdW5jJmd0OyZsdDsveCZndDtcCiAgICAgIGxldCAkam9lOj0xXAogICAgICByZXR1cm4gZWxlbWVudCBlbGVtZW50IHtcCiAgICAgICAgICBhdHRyaWJ1dGUgYXR0cmlidXRlIHsgMSB9LFwKICAgICAgICAgIGVsZW1lbnQgdGVzdCB7ICYjMzk7YSYjMzk7IH0sIFwKICAgICAgICAgIGF0dHJpYnV0ZSBmb28geyAmcXVvdDtiYXImcXVvdDsgfSxcCiAgICAgICAgICBmbjpkb2MoKVsgZm9vL0BiYXIgZXEgJGxldCBdLFwKICAgICAgICAgIC8veCB9ICAgIFwKICAgICAgIFwKICAgICAgKDogYSBtb3JlIFwnZXZpbFwnIHRlc3QgOilcCiAgICAgICg6IE1vZGlmaWVkIEJsYWtlbGV5IGV4YW1wbGUgKDogd2l0aCBuZXN0ZWQgY29tbWVudCA6KSAuLi4gOilcCiAgICAgIGRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpkZWNsYXJlKCkgeygpfTtcCiAgICAgIGRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpwcml2YXRlKCkgeygpfTtcCiAgICAgIGRlY2xhcmUgcHJpdmF0ZSBmdW5jdGlvbiBsb2NhbDpmdW5jdGlvbigpIHsoKX07XAogICAgICBkZWNsYXJlIHByaXZhdGUgZnVuY3Rpb24gbG9jYWw6bG9jYWwoKSB7KCl9O1wKICAgICAgbGV0ICRsZXQgOj0gJmx0O2xldCZndDtsZXQgJGxldCA6PSAmcXVvdDtsZXQmcXVvdDsmbHQ7L2xldCZndDtcCiAgICAgIHJldHVybiBlbGVtZW50IGVsZW1lbnQge1wKICAgICAgICAgIGF0dHJpYnV0ZSBhdHRyaWJ1dGUgeyB0cnkgeyB4ZG1wOnZlcnNpb24oKSB9IGNhdGNoKCRlKSB7IHhkbXA6bG9nKCRlKSB9IH0sXAogICAgICAgICAgYXR0cmlidXRlIGZuOmRvYyB7ICZxdW90O2JhciZxdW90OyBjYXN0YWJsZSBhcyB4czpzdHJpbmcgfSxcCiAgICAgICAgICBlbGVtZW50IHRleHQgeyB0ZXh0IHsgJnF1b3Q7dGV4dCZxdW90OyB9IH0sXAogICAgICAgICAgZm46ZG9jKClbIGNoaWxkOjplcS8oQGJhciB8IGF0dHJpYnV0ZTo6YXR0cmlidXRlKSBlcSAkbGV0IF0sXAogICAgICAgICAgLy9mbjpkb2NcCiAgICAgIH0nOwogICAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnhxdWVyeTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnZlcnNpb248L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiIxLjAtbWwiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSBjbS1kZWYiPjs8L3NwYW4+ICAgICAgPHNwYW4gY2xhc3M9ImNtLWNvbW1lbnQiPig6IHRoaXMgaXMgICAgICAgOiBhICAgICAgICAgICJjb21tZW50IiA6KTwvc3Bhbj4gICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+bGV0PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRsZXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj46PTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0O3ggPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS1hdHRyaWJ1dGUiPmF0dHI8L3NwYW4+PTxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiJ2YWx1ZSI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+InRlc3QiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDtmdW5jJmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+ZnVuY3Rpb24oKTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPiR2YXI8L3NwYW4+IHs8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZnVuY3Rpb248L3NwYW4+KCl9IHs8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiR2YXI8L3NwYW4+fTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvZnVuYyZndDsmbHQ7L3gmZ3Q7PC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5sZXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JGpvZTwvc3Bhbj48c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Oj08L3NwYW4+PHNwYW4gY2xhc3M9ImNtLWF0b20iPjE8L3NwYW4+ICAgICAgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnJldHVybjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmVsZW1lbnQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS13b3JkIj5lbGVtZW50PC9zcGFuPiB7ICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hdHRyaWJ1dGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS13b3JkIj5hdHRyaWJ1dGU8L3NwYW4+IHsgPHNwYW4gY2xhc3M9ImNtLWF0b20iPjE8L3NwYW4+IH0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+dGVzdDwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj5cJ2FcJzwvc3Bhbj4gfSwgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hdHRyaWJ1dGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS13b3JkIj5mb288L3NwYW4+IHsgPHNwYW4gY2xhc3M9ImNtLXN0cmluZyI+ImJhciI8L3NwYW4+IH0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSBjbS1kZWYiPmZuOmRvYzwvc3Bhbj4oKVsgPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmZvbzwvc3Bhbj48c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Lzwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+QGJhcjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmVxPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRsZXQ8L3NwYW4+IF0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj4vLzwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+eDwvc3Bhbj4gfSAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNtLWNvbW1lbnQiPig6IGEgbW9yZSBcJ2V2aWxcJyB0ZXN0IDopPC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1jb21tZW50Ij4oOiBNb2RpZmllZCBCbGFrZWxleSBleGFtcGxlICg6IHdpdGggbmVzdGVkIGNvbW1lbnQgOikgLi4uIDopPC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5kZWNsYXJlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+cHJpdmF0ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmZ1bmN0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj5sb2NhbDpkZWNsYXJlPC9zcGFuPigpIHsoKX08c3BhbiBjbGFzcz0iY20td29yZCI+Ozwvc3Bhbj4gICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnByaXZhdGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5mdW5jdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+bG9jYWw6cHJpdmF0ZTwvc3Bhbj4oKSB7KCl9PHNwYW4gY2xhc3M9ImNtLXdvcmQiPjs8L3NwYW4+ICAgICAgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmRlY2xhcmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5wcml2YXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZnVuY3Rpb248L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSBjbS1kZWYiPmxvY2FsOmZ1bmN0aW9uPC9zcGFuPigpIHsoKX08c3BhbiBjbGFzcz0iY20td29yZCI+Ozwvc3Bhbj4gICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnByaXZhdGU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5mdW5jdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+bG9jYWw6bG9jYWw8L3NwYW4+KCkgeygpfTxzcGFuIGNsYXNzPSJjbS13b3JkIj47PC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5sZXQ8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JGxldDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdGFnIj4mbHQ7bGV0Jmd0Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+bGV0PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+JGxldDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+ImxldCI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0Oy9sZXQmZ3Q7PC9zcGFuPiAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5yZXR1cm48L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+ZWxlbWVudDwvc3Bhbj4geyAgICAgICAgICA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXR0cmlidXRlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+YXR0cmlidXRlPC9zcGFuPiB7IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj50cnk8L3NwYW4+IHsgPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+eGRtcDp2ZXJzaW9uPC9zcGFuPigpIH0gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmNhdGNoPC9zcGFuPig8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRlPC9zcGFuPikgeyA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj54ZG1wOmxvZzwvc3Bhbj4oPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kZTwvc3Bhbj4pIH0gfSwgICAgICAgICAgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmF0dHJpYnV0ZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmZuOmRvYzwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iYmFyIjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmNhc3RhYmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj54czpzdHJpbmc8L3NwYW4+IH0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+dGV4dDwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+dGV4dDwvc3Bhbj4geyA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4idGV4dCI8L3NwYW4+IH0gfSwgICAgICAgICAgPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+Zm46ZG9jPC9zcGFuPigpWyA8c3BhbiBjbGFzcz0iY20tcXVhbGlmaWVyIj5jaGlsZDo6PC9zcGFuPjxzcGFuIGNsYXNzPSJjbS13b3JkIj5lcTwvc3Bhbj48c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Lzwvc3Bhbj4oPHNwYW4gY2xhc3M9ImNtLXdvcmQiPkBiYXI8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj58PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tcXVhbGlmaWVyIj5hdHRyaWJ1dGU6Ojwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+YXR0cmlidXRlPC9zcGFuPikgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmVxPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRsZXQ8L3NwYW4+IF0sICAgICAgICAgIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj4vLzwvc3Bhbj48c3BhbiBjbGFzcz0iY20td29yZCI+Zm46ZG9jPC9zcGFuPiAgICAgIH0nOwoKICAgICAgJCgiI3NhbmRib3giKS5odG1sKCc8dGV4dGFyZWEgaWQ9ImVkaXRvciI+JyArIGlucHV0ICsgJzwvdGV4dGFyZWE+Jyk7CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSgkKCIjZWRpdG9yIilbMF0pOwogICAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgICAgZXF1YWwocmVzdWx0LCBleHBlY3RlZCk7CiAgICAgICAkKCIjZWRpdG9yIikuaHRtbCgiIik7CiAgICB9KTsKICB9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testEmptySequenceKeyword.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICBtb2R1bGUoInRlc3RFbXB0eVNlcXVlbmNlS2V5d29yZCIpOwogIHRlc3QoInRlc3RFbXB0eVNlcXVlbmNlS2V5d29yZCIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICciZm9vIiBpbnN0YW5jZSBvZiBlbXB0eS1zZXF1ZW5jZSgpJzsKICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iZm9vIjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmluc3RhbmNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+b2Y8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbXB0eS1zZXF1ZW5jZTwvc3Bhbj4oKSc7CgogICAgJCgiI3NhbmRib3giKS5odG1sKCc8dGV4dGFyZWEgaWQ9ImVkaXRvciI+JyArIGlucHV0ICsgJzwvdGV4dGFyZWE+Jyk7CiAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoJCgiI2VkaXRvciIpWzBdKTsKICAgIHZhciByZXN1bHQgPSAkKCIuQ29kZU1pcnJvci1saW5lcyBkaXYgZGl2IHByZSIpWzBdLmlubmVySFRNTDsKCiAgICAgZXF1YWwocmVzdWx0LCBleHBlY3RlZCk7CiAgICAgJCgiI2VkaXRvciIpLmh0bWwoIiIpOwogIH0pOwp9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testMultiAttr.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgbW9kdWxlKCJ0ZXN0TXVsdGlBdHRyIik7CiAgICB0ZXN0KCJ0ZXN0MSIsIGZ1bmN0aW9uKCkgewogICAgICBleHBlY3QoMSk7CgogICAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0O3AgPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS1hdHRyaWJ1dGUiPmExPC9zcGFuPj08c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iZm9vIjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0dHJpYnV0ZSI+YTI8L3NwYW4+PTxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiJiYXIiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS10YWciPiZndDs8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXdvcmQiPmhlbGxvPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20td29yZCI+d29ybGQ8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0Oy9wJmd0Ozwvc3Bhbj4nOwoKICAgICAgJCgiI3NhbmRib3giKS5odG1sKCc8dGV4dGFyZWEgaWQ9ImVkaXRvciI+PC90ZXh0YXJlYT4nKTsKICAgICAgJCgiI2VkaXRvciIpLmh0bWwoJzxwIGExPSJmb28iIGEyPSJiYXIiPmhlbGxvIHdvcmxkPC9wPicpOwogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoJCgiI2VkaXRvciIpWzBdKTsKICAgICAgdmFyIHJlc3VsdCA9ICQoIi5Db2RlTWlycm9yLWxpbmVzIGRpdiBkaXYgcHJlIilbMF0uaW5uZXJIVE1MOwoKICAgICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICAgJCgiI2VkaXRvciIpLmh0bWwoIiIpOwogICAgfSk7CiAgfSk7]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testNamespaces.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICBtb2R1bGUoInRlc3QgbmFtZXNwYWNlcyIpOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gdGhpcyB0ZXN0IGlzIGJhc2VkIG9uIHRoaXM6Ci8vaHR0cDovL21icmV2b29ydC5naXRodWIuY29tL0NvZGVNaXJyb3IyLyMhZXhwclNlcVR5cGVzL1Byb2xvZ0V4cHIvVmFyaWFibGVQcm9sb2cvRXh0ZXJuYWxWYXJpYWJsZXNXaXRoL0syLUV4dGVybmFsVmFyaWFibGVzV2l0aC0xMC54cQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHRlc3QoInRlc3QgbmFtZXNwYWNlZCB2YXJpYWJsZSIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICdkZWNsYXJlIG5hbWVzcGFjZSBlID0gImh0dHA6Ly9leGFtcGxlLmNvbS9BTmFtZXNwYWNlIjtcCmRlY2xhcmUgdmFyaWFibGUgJGU6ZXhhbXBsZUNvbVRoaXNWYXJJc05vdFJlY29nbml6ZWQgYXMgZWxlbWVudCgqKSBleHRlcm5hbDsnOwoKICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPm5hbWVzcGFjZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXdvcmQiPmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj49PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4iaHR0cDovL2V4YW1wbGUuY29tL0FOYW1lc3BhY2UiPC9zcGFuPjxzcGFuIGNsYXNzPSJjbS13b3JkIj47ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPnZhcmlhYmxlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRlOmV4YW1wbGVDb21UaGlzVmFySXNOb3RSZWNvZ25pemVkPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5lbGVtZW50PC9zcGFuPig8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Kjwvc3Bhbj4pIDxzcGFuIGNsYXNzPSJjbS13b3JkIj5leHRlcm5hbDs8L3NwYW4+JzsKCiAgICAkKCIjc2FuZGJveCIpLmh0bWwoJzx0ZXh0YXJlYSBpZD0iZWRpdG9yIj4nICsgaW5wdXQgKyAnPC90ZXh0YXJlYT4nKTsKICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSgkKCIjZWRpdG9yIilbMF0pOwogICAgdmFyIHJlc3VsdCA9ICQoIi5Db2RlTWlycm9yLWxpbmVzIGRpdiBkaXYgcHJlIilbMF0uaW5uZXJIVE1MOwoKICAgICBlcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKICAgICAkKCIjZWRpdG9yIikuaHRtbCgiIik7CiAgfSk7CgoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gdGhpcyB0ZXN0IGlzIGJhc2VkIG9uOgovLyBodHRwOi8vbWJyZXZvb3J0LmdpdGh1Yi5jb20vQ29kZU1pcnJvcjIvIyFCYXNpY3MvRVFOYW1lcy9lcW5hbWUtMDAyLnhxICAKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICB0ZXN0KCJ0ZXN0IEVRTmFtZSB2YXJpYWJsZSIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICdkZWNsYXJlIHZhcmlhYmxlICQiaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teSI6dmFyIDo9IDEyO1wKPG91dD57JCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215Ijp2YXJ9PC9vdXQ+JzsKCiAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmRlY2xhcmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj52YXJpYWJsZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXkiOnZhcjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tYXRvbSI+MTI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXdvcmQiPjs8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLXRhZyI+Jmx0O291dCZndDs8L3NwYW4+ezxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JCJodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215Ijp2YXI8L3NwYW4+fTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvb3V0Jmd0Ozwvc3Bhbj4nOwoKICAgICQoIiNzYW5kYm94IikuaHRtbCgnPHRleHRhcmVhIGlkPSJlZGl0b3IiPicgKyBpbnB1dCArICc8L3RleHRhcmVhPicpOwogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICB9KTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHRoaXMgdGVzdCBpcyBiYXNlZCBvbjoKLy8gaHR0cDovL21icmV2b29ydC5naXRodWIuY29tL0NvZGVNaXJyb3IyLyMhQmFzaWNzL0VRTmFtZXMvZXFuYW1lLTAwMy54cQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHRlc3QoInRlc3QgRVFOYW1lIGZ1bmN0aW9uIiwgZnVuY3Rpb24oKSB7CiAgICBleHBlY3QoMSk7CgogICAgdmFyIGlucHV0ID0gJ2RlY2xhcmUgZnVuY3Rpb24gImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXkiOmZuICgkYSBhcyB4czppbnRlZ2VyKSBhcyB4czppbnRlZ2VyIHtcCiAgICRhICsgMlwKfTtcCjxvdXQ+eyJodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215IjpmbigxMil9PC9vdXQ+JzsKCiAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmRlY2xhcmU8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5mdW5jdGlvbjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+Imh0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXkiOmZuPC9zcGFuPiAoPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kYTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmFzPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tYXRvbSI+eHM6aW50ZWdlcjwvc3Bhbj4pIDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0b20iPnhzOmludGVnZXI8L3NwYW4+IHsgICA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRhPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Kzwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0b20iPjI8L3NwYW4+fTxzcGFuIGNsYXNzPSJjbS13b3JkIj47PC9zcGFuPjxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDtvdXQmZ3Q7PC9zcGFuPns8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj4iaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teSI6Zm48L3NwYW4+KDxzcGFuIGNsYXNzPSJjbS1hdG9tIj4xMjwvc3Bhbj4pfTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvb3V0Jmd0Ozwvc3Bhbj4nOwoKICAgICQoIiNzYW5kYm94IikuaHRtbCgnPHRleHRhcmVhIGlkPSJlZGl0b3IiPicgKyBpbnB1dCArICc8L3RleHRhcmVhPicpOwogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICB9KTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIHRoaXMgdGVzdCBpcyBiYXNlZCBvbjoKLy8gaHR0cDovL21icmV2b29ydC5naXRodWIuY29tL0NvZGVNaXJyb3IyLyMhQmFzaWNzL0VRTmFtZXMvZXFuYW1lLTAwMy54cQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIHRlc3QoInRlc3QgRVFOYW1lIGZ1bmN0aW9uIHdpdGggc2luZ2xlIHF1b3RlcyIsIGZ1bmN0aW9uKCkgewogICAgZXhwZWN0KDEpOwoKICAgIHZhciBpbnB1dCA9ICdkZWNsYXJlIGZ1bmN0aW9uIFwnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teVwnOmZuICgkYSBhcyB4czppbnRlZ2VyKSBhcyB4czppbnRlZ2VyIHtcCiAgICRhICsgMlwKfTtcCjxvdXQ+e1wnaHR0cDovL3d3dy5leGFtcGxlLmNvbS9ucy9teVwnOmZuKDEyKX08L291dD4nOwoKICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+ZGVjbGFyZTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmZ1bmN0aW9uPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj5cJ2h0dHA6Ly93d3cuZXhhbXBsZS5jb20vbnMvbXlcJzpmbjwvc3Bhbj4gKDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JGE8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1rZXl3b3JkIj5hczwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWF0b20iPnhzOmludGVnZXI8L3NwYW4+KSA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+YXM8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj54czppbnRlZ2VyPC9zcGFuPiB7ICAgPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4kYTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPis8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj4yPC9zcGFuPn08c3BhbiBjbGFzcz0iY20td29yZCI+Ozwvc3Bhbj48c3BhbiBjbGFzcz0iY20tdGFnIj4mbHQ7b3V0Jmd0Ozwvc3Bhbj57PHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+XCdodHRwOi8vd3d3LmV4YW1wbGUuY29tL25zL215XCc6Zm48L3NwYW4+KDxzcGFuIGNsYXNzPSJjbS1hdG9tIj4xMjwvc3Bhbj4pfTxzcGFuIGNsYXNzPSJjbS10YWciPiZsdDsvb3V0Jmd0Ozwvc3Bhbj4nOwoKICAgICQoIiNzYW5kYm94IikuaHRtbCgnPHRleHRhcmVhIGlkPSJlZGl0b3IiPicgKyBpbnB1dCArICc8L3RleHRhcmVhPicpOwogICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICB2YXIgcmVzdWx0ID0gJCgiLkNvZGVNaXJyb3ItbGluZXMgZGl2IGRpdiBwcmUiKVswXS5pbm5lckhUTUw7CgogICAgIGVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpOwogICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICB9KTsKCn0pOwoKCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testProcessingInstructions.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[JChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKXsKICBtb2R1bGUoInRlc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb25zIik7CiAgdGVzdCgidGVzdFByb2Nlc3NpbmdJbnN0cnVjdGlvbnMiLCBmdW5jdGlvbigpIHsKICAgIGV4cGVjdCgxKTsKCiAgICB2YXIgaW5wdXQgPSAnZGF0YSg8P3RhcmdldCBjb250ZW50Pz4pIGluc3RhbmNlIG9mIHhzOnN0cmluZyc7CiAgICB2YXIgZXhwZWN0ZWQgPSAnPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIGNtLWRlZiI+ZGF0YTwvc3Bhbj4oPHNwYW4gY2xhc3M9ImNtLWNvbW1lbnQgY20tbWV0YSI+Jmx0Oz90YXJnZXQgY29udGVudD8mZ3Q7PC9zcGFuPikgPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmluc3RhbmNlPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+b2Y8L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1hdG9tIj54czpzdHJpbmc8L3NwYW4+JzsKCiAgICAkKCIjc2FuZGJveCIpLmh0bWwoJzx0ZXh0YXJlYSBpZD0iZWRpdG9yIj4nICsgaW5wdXQgKyAnPC90ZXh0YXJlYT4nKTsKICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSgkKCIjZWRpdG9yIilbMF0pOwogICAgdmFyIHJlc3VsdCA9ICQoIi5Db2RlTWlycm9yLWxpbmVzIGRpdiBkaXYgcHJlIilbMF0uaW5uZXJIVE1MOwoKICAgICBlcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKICAgICAkKCIjZWRpdG9yIikuaHRtbCgiIik7CiAgfSk7Cn0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/test/testQuotes.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICAgbW9kdWxlKCJ0ZXN0UXVvdGVFc2NhcGUiKTsKICAgIHRlc3QoInRlc3RRdW90ZUVzY2FwZURvdWJsZSIsIGZ1bmN0aW9uKCkgewogICAgICBleHBlY3QoMSk7CgogICAgICB2YXIgaW5wdXQgPSAnbGV0ICRyb290Zm9sZGVyIDo9ICJjOlxcYnVpbGRzXFx3aW5udFxcSEVBRFxccWFcXHNjcmlwdHNcXCJcCmxldCAka2V5c2ZvbGRlciA6PSBjb25jYXQoJHJvb3Rmb2xkZXIsICJrZXlzXFwiKVwKcmV0dXJuXAoka2V5c2ZvbGRlcic7CiAgICAgIHZhciBleHBlY3RlZCA9ICc8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+bGV0PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUiPiRyb290Zm9sZGVyPC9zcGFuPiA8c3BhbiBjbGFzcz0iY20ta2V5d29yZCI+Oj08L3NwYW4+IDxzcGFuIGNsYXNzPSJjbS1zdHJpbmciPiJjOlxcYnVpbGRzXFx3aW5udFxcSEVBRFxccWFcXHNjcmlwdHNcXCI8L3NwYW4+PHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPmxldDwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLXZhcmlhYmxlIj4ka2V5c2ZvbGRlcjwvc3Bhbj4gPHNwYW4gY2xhc3M9ImNtLWtleXdvcmQiPjo9PC9zcGFuPiA8c3BhbiBjbGFzcz0iY20tdmFyaWFibGUgY20tZGVmIj5jb25jYXQ8L3NwYW4+KDxzcGFuIGNsYXNzPSJjbS12YXJpYWJsZSI+JHJvb3Rmb2xkZXI8L3NwYW4+LCA8c3BhbiBjbGFzcz0iY20tc3RyaW5nIj4ia2V5c1xcIjwvc3Bhbj4pPHNwYW4gY2xhc3M9ImNtLXdvcmQiPnJldHVybiRrZXlzZm9sZGVyPC9zcGFuPic7CgogICAgICAkKCIjc2FuZGJveCIpLmh0bWwoJzx0ZXh0YXJlYSBpZD0iZWRpdG9yIj4nICsgaW5wdXQgKyAnPC90ZXh0YXJlYT4nKTsKICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKCQoIiNlZGl0b3IiKVswXSk7CiAgICAgIHZhciByZXN1bHQgPSAkKCIuQ29kZU1pcnJvci1saW5lcyBkaXYgZGl2IHByZSIpWzBdLmlubmVySFRNTDsKCiAgICAgICBlcXVhbChyZXN1bHQsIGV4cGVjdGVkKTsKICAgICAgICQoIiNlZGl0b3IiKS5odG1sKCIiKTsKICAgIH0pOwogIH0pOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xquery/xquery.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKQ29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KKi8KQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4cXVlcnkiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewoKICAvLyBUaGUga2V5d29yZHMgb2JqZWN0IGlzIHNldCB0byB0aGUgcmVzdWx0IG9mIHRoaXMgc2VsZiBleGVjdXRpbmcKICAvLyBmdW5jdGlvbi4gRWFjaCBrZXl3b3JkIGlzIGEgcHJvcGVydHkgb2YgdGhlIGtleXdvcmRzIG9iamVjdCB3aG9zZQogIC8vIHZhbHVlIGlzIHt0eXBlOiBhdHlwZSwgc3R5bGU6IGFzdHlsZX0KICB2YXIga2V5d29yZHMgPSBmdW5jdGlvbigpewogICAgLy8gY29udmVpbmVuY2UgZnVuY3Rpb25zIHVzZWQgdG8gYnVpbGQga2V5d29yZHMgb2JqZWN0CiAgICBmdW5jdGlvbiBrdyh0eXBlKSB7cmV0dXJuIHt0eXBlOiB0eXBlLCBzdHlsZTogImtleXdvcmQifTt9CiAgICB2YXIgQSA9IGt3KCJrZXl3b3JkIGEiKQogICAgICAsIEIgPSBrdygia2V5d29yZCBiIikKICAgICAgLCBDID0ga3coImtleXdvcmQgYyIpCiAgICAgICwgb3BlcmF0b3IgPSBrdygib3BlcmF0b3IiKQogICAgICAsIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImF0b20ifQogICAgICAsIHB1bmN0dWF0aW9uID0ge3R5cGU6ICJwdW5jdHVhdGlvbiIsIHN0eWxlOiAiIn0KICAgICAgLCBxdWFsaWZpZXIgPSB7dHlwZTogImF4aXNfc3BlY2lmaWVyIiwgc3R5bGU6ICJxdWFsaWZpZXIifTsKICAgIAogICAgLy8ga3dPYmogaXMgd2hhdCBpcyByZXR1cm4gZnJvbSB0aGlzIGZ1bmN0aW9uIGF0IHRoZSBlbmQKICAgIHZhciBrd09iaiA9IHsKICAgICAgJ2lmJzogQSwgJ3N3aXRjaCc6IEEsICd3aGlsZSc6IEEsICdmb3InOiBBLAogICAgICAnZWxzZSc6IEIsICd0aGVuJzogQiwgJ3RyeSc6IEIsICdmaW5hbGx5JzogQiwgJ2NhdGNoJzogQiwKICAgICAgJ2VsZW1lbnQnOiBDLCAnYXR0cmlidXRlJzogQywgJ2xldCc6IEMsICdpbXBsZW1lbnRzJzogQywgJ2ltcG9ydCc6IEMsICdtb2R1bGUnOiBDLCAnbmFtZXNwYWNlJzogQywgCiAgICAgICdyZXR1cm4nOiBDLCAnc3VwZXInOiBDLCAndGhpcyc6IEMsICd0aHJvd3MnOiBDLCAnd2hlcmUnOiBDLCAncHJpdmF0ZSc6IEMsICAgICAgCiAgICAgICcsJzogcHVuY3R1YXRpb24sCiAgICAgICdudWxsJzogYXRvbSwgJ2ZuOmZhbHNlKCknOiBhdG9tLCAnZm46dHJ1ZSgpJzogYXRvbQogICAgfTsKICAgIAogICAgLy8gYSBsaXN0IG9mICdiYXNpYycga2V5d29yZHMuIEZvciBlYWNoIGFkZCBhIHByb3BlcnR5IHRvIGt3T2JqIHdpdGggdGhlIHZhbHVlIG9mIAogICAgLy8ge3R5cGU6IGJhc2ljW2ldLCBzdHlsZTogImtleXdvcmQifSBlLmcuICdhZnRlcicgLS0+IHt0eXBlOiAiYWZ0ZXIiLCBzdHlsZTogImtleXdvcmQifQogICAgdmFyIGJhc2ljID0gWydhZnRlcicsJ2FuY2VzdG9yJywnYW5jZXN0b3Itb3Itc2VsZicsJ2FuZCcsJ2FzJywnYXNjZW5kaW5nJywnYXNzZXJ0JywnYXR0cmlidXRlJywnYmVmb3JlJywKICAgICdieScsJ2Nhc2UnLCdjYXN0JywnY2hpbGQnLCdjb21tZW50JywnZGVjbGFyZScsJ2RlZmF1bHQnLCdkZWZpbmUnLCdkZXNjZW5kYW50JywnZGVzY2VuZGFudC1vci1zZWxmJywKICAgICdkZXNjZW5kaW5nJywnZG9jdW1lbnQnLCdkb2N1bWVudC1ub2RlJywnZWxlbWVudCcsJ2Vsc2UnLCdlcScsJ2V2ZXJ5JywnZXhjZXB0JywnZXh0ZXJuYWwnLCdmb2xsb3dpbmcnLAogICAgJ2ZvbGxvd2luZy1zaWJsaW5nJywnZm9sbG93cycsJ2ZvcicsJ2Z1bmN0aW9uJywnaWYnLCdpbXBvcnQnLCdpbicsJ2luc3RhbmNlJywnaW50ZXJzZWN0JywnaXRlbScsCiAgICAnbGV0JywnbW9kdWxlJywnbmFtZXNwYWNlJywnbm9kZScsJ25vZGUnLCdvZicsJ29ubHknLCdvcicsJ29yZGVyJywncGFyZW50JywncHJlY2VkZXMnLCdwcmVjZWRpbmcnLAogICAgJ3ByZWNlZGluZy1zaWJsaW5nJywncHJvY2Vzc2luZy1pbnN0cnVjdGlvbicsJ3JlZicsJ3JldHVybicsJ3JldHVybnMnLCdzYXRpc2ZpZXMnLCdzY2hlbWEnLCdzY2hlbWEtZWxlbWVudCcsCiAgICAnc2VsZicsJ3NvbWUnLCdzb3J0YnknLCdzdGFibGUnLCd0ZXh0JywndGhlbicsJ3RvJywndHJlYXQnLCd0eXBlc3dpdGNoJywndW5pb24nLCd2YXJpYWJsZScsJ3ZlcnNpb24nLCd3aGVyZScsCiAgICAneHF1ZXJ5JywgJ2VtcHR5LXNlcXVlbmNlJ107CiAgICBmb3IodmFyIGk9MCwgbD1iYXNpYy5sZW5ndGg7IGkgPCBsOyBpKyspIHsga3dPYmpbYmFzaWNbaV1dID0ga3coYmFzaWNbaV0pfTsKICAgIAogICAgLy8gYSBsaXN0IG9mIHR5cGVzLiBGb3IgZWFjaCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHRoZSB2YWx1ZSBvZiAKICAgIC8vIHt0eXBlOiAiYXRvbSIsIHN0eWxlOiAiYXRvbSJ9CiAgICB2YXIgdHlwZXMgPSBbJ3hzOnN0cmluZycsICd4czpmbG9hdCcsICd4czpkZWNpbWFsJywgJ3hzOmRvdWJsZScsICd4czppbnRlZ2VyJywgJ3hzOmJvb2xlYW4nLCAneHM6ZGF0ZScsICd4czpkYXRlVGltZScsIAogICAgJ3hzOnRpbWUnLCAneHM6ZHVyYXRpb24nLCAneHM6ZGF5VGltZUR1cmF0aW9uJywgJ3hzOnRpbWUnLCAneHM6eWVhck1vbnRoRHVyYXRpb24nLCAnbnVtZXJpYycsICd4czpoZXhCaW5hcnknLCAKICAgICd4czpiYXNlNjRCaW5hcnknLCAneHM6YW55VVJJJywgJ3hzOlFOYW1lJywgJ3hzOmJ5dGUnLCd4czpib29sZWFuJywneHM6YW55VVJJJywneGY6eWVhck1vbnRoRHVyYXRpb24nXTsKICAgIGZvcih2YXIgaT0wLCBsPXR5cGVzLmxlbmd0aDsgaSA8IGw7IGkrKykgeyBrd09ialt0eXBlc1tpXV0gPSBhdG9tO307CiAgICAKICAgIC8vIGVhY2ggb3BlcmF0b3Igd2lsbCBhZGQgYSBwcm9wZXJ0eSB0byBrd09iaiB3aXRoIHZhbHVlIG9mIHt0eXBlOiAib3BlcmF0b3IiLCBzdHlsZTogImtleXdvcmQifQogICAgdmFyIG9wZXJhdG9ycyA9IFsnZXEnLCAnbmUnLCAnbHQnLCAnbGUnLCAnZ3QnLCAnZ2UnLCAnOj0nLCAnPScsICc+JywgJz49JywgJzwnLCAnPD0nLCAnLicsICd8JywgJz8nLCAnYW5kJywgJ29yJywgJ2RpdicsICdpZGl2JywgJ21vZCcsICcqJywgJy8nLCAnKycsICctJ107CiAgICBmb3IodmFyIGk9MCwgbD1vcGVyYXRvcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7IGt3T2JqW29wZXJhdG9yc1tpXV0gPSBvcGVyYXRvcjt9OwogICAgCiAgICAvLyBlYWNoIGF4aXNfc3BlY2lmaWVycyB3aWxsIGFkZCBhIHByb3BlcnR5IHRvIGt3T2JqIHdpdGggdmFsdWUgb2Yge3R5cGU6ICJheGlzX3NwZWNpZmllciIsIHN0eWxlOiAicXVhbGlmaWVyIn0KICAgIHZhciBheGlzX3NwZWNpZmllcnMgPSBbInNlbGY6OiIsICJhdHRyaWJ1dGU6OiIsICJjaGlsZDo6IiwgImRlc2NlbmRhbnQ6OiIsICJkZXNjZW5kYW50LW9yLXNlbGY6OiIsICJwYXJlbnQ6OiIsIAogICAgImFuY2VzdG9yOjoiLCAiYW5jZXN0b3Itb3Itc2VsZjo6IiwgImZvbGxvd2luZzo6IiwgInByZWNlZGluZzo6IiwgImZvbGxvd2luZy1zaWJsaW5nOjoiLCAicHJlY2VkaW5nLXNpYmxpbmc6OiJdOwogICAgZm9yKHZhciBpPTAsIGw9YXhpc19zcGVjaWZpZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykgeyBrd09ialtheGlzX3NwZWNpZmllcnNbaV1dID0gcXVhbGlmaWVyOyB9OwoKICAgIHJldHVybiBrd09iajsKICB9KCk7CgogIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXQKICAvLyBjb25zaW5nIHVwIHRvbnMgb2Ygb2JqZWN0cy4KICB2YXIgdHlwZSwgY29udGVudDsKICAKICBmdW5jdGlvbiByZXQodHAsIHN0eWxlLCBjb250KSB7CiAgICB0eXBlID0gdHA7IGNvbnRlbnQgPSBjb250OwogICAgcmV0dXJuIHN0eWxlOwogIH0KICAKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CiAgCiAgLy8gdGhlIHByaW1hcnkgbW9kZSB0b2tlbml6ZXIKICBmdW5jdGlvbiB0b2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKSwgCiAgICAgICAgbWlnaHRCZUZ1bmN0aW9uID0gZmFsc2UsCiAgICAgICAgaXNFUU5hbWUgPSBpc0VRTmFtZUFoZWFkKHN0cmVhbSk7CiAgICAKICAgIC8vIGFuIFhNTCB0YWcgKGlmIG5vdCBpbiBzb21lIHN1YiwgY2hhaW5lZCB0b2tlbml6ZXIpCiAgICBpZiAoY2ggPT0gIjwiKSB7CiAgICAgIGlmKHN0cmVhbS5tYXRjaCgiIS0tIiwgdHJ1ZSkpCiAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuWE1MQ29tbWVudCk7CiAgICAgICAgCiAgICAgIGlmKHN0cmVhbS5tYXRjaCgiIVtDREFUQSIsIGZhbHNlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5DREFUQTsKICAgICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICAgIH0KICAgICAgCiAgICAgIGlmKHN0cmVhbS5tYXRjaCgiPyIsIGZhbHNlKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblByZVByb2Nlc3NpbmcpOwogICAgICB9CiAgICAgIAogICAgICB2YXIgaXNjbG9zZSA9IHN0cmVhbS5lYXQoIi8iKTsKICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgIHZhciB0YWdOYW1lID0gIiIsIGM7CiAgICAgIHdoaWxlICgoYyA9IHN0cmVhbS5lYXQoL1teXHNcdTAwYTA9PD5cIlwnXC8/XS8pKSkgdGFnTmFtZSArPSBjOwogICAgICAKICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuVGFnKHRhZ05hbWUsIGlzY2xvc2UpKTsKICAgIH0KICAgIC8vIHN0YXJ0IGNvZGUgYmxvY2sKICAgIGVsc2UgaWYoY2ggPT0gInsiKSB7CiAgICAgIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLHsgdHlwZTogImNvZGVibG9jayJ9KTsKICAgICAgcmV0dXJuIHJldCgiIiwgIiIpOwogICAgfQogICAgLy8gZW5kIGNvZGUgYmxvY2sKICAgIGVsc2UgaWYoY2ggPT0gIn0iKSB7CiAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICByZXR1cm4gcmV0KCIiLCAiIik7CiAgICB9CiAgICAvLyBpZiB3ZSdyZSBpbiBhbiBYTUwgYmxvY2sKICAgIGVsc2UgaWYoaXNJblhtbEJsb2NrKHN0YXRlKSkgewogICAgICBpZihjaCA9PSAiPiIpCiAgICAgICAgcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwogICAgICBlbHNlIGlmKGNoID09ICIvIiAmJiBzdHJlYW0uZWF0KCI+IikpIHsKICAgICAgICBwb3BTdGF0ZVN0YWNrKHN0YXRlKTsKICAgICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICAgIH0KICAgICAgZWxzZSAgCiAgICAgICAgcmV0dXJuIHJldCgid29yZCIsICJ3b3JkIik7CiAgICB9CiAgICAvLyBpZiBhIG51bWJlcgogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0ubWF0Y2goL15cZCooPzpcLlxkKik/KD86RVsrXC1dP1xkKyk/Lyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJhdG9tIik7CiAgICB9CiAgICAvLyBjb21tZW50IHN0YXJ0CiAgICBlbHNlIGlmIChjaCA9PT0gIigiICYmIHN0cmVhbS5lYXQoIjoiKSkgewogICAgICBwdXNoU3RhdGVTdGFjayhzdGF0ZSwgeyB0eXBlOiAiY29tbWVudCJ9KTsKICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CiAgICB9CiAgICAvLyBxdW90ZWQgc3RyaW5nCiAgICBlbHNlIGlmICggICFpc0VRTmFtZSAmJiAoY2ggPT09ICciJyB8fCBjaCA9PT0gIiciKSkKICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuU3RyaW5nKGNoKSk7CiAgICAvLyB2YXJpYWJsZQogICAgZWxzZSBpZihjaCA9PT0gIiQiKSB7CiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblZhcmlhYmxlKTsKICAgIH0KICAgIC8vIGFzc2lnbm1lbnQKICAgIGVsc2UgaWYoY2ggPT09IjoiICYmIHN0cmVhbS5lYXQoIj0iKSkgewogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJrZXl3b3JkIik7CiAgICB9CiAgICAvLyBvcGVuIHBhcmVuCiAgICBlbHNlIGlmKGNoID09PSAiKCIpIHsKICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogInBhcmVuIn0pOwogICAgICByZXR1cm4gcmV0KCIiLCAiIik7CiAgICB9CiAgICAvLyBjbG9zZSBwYXJlbgogICAgZWxzZSBpZihjaCA9PT0gIikiKSB7CiAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICByZXR1cm4gcmV0KCIiLCAiIik7CiAgICB9CiAgICAvLyBvcGVuIHBhcmVuCiAgICBlbHNlIGlmKGNoID09PSAiWyIpIHsKICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogImJyYWNrZXQifSk7CiAgICAgIHJldHVybiByZXQoIiIsICIiKTsKICAgIH0KICAgIC8vIGNsb3NlIHBhcmVuCiAgICBlbHNlIGlmKGNoID09PSAiXSIpIHsKICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgIHJldHVybiByZXQoIiIsICIiKTsKICAgIH0KICAgIGVsc2UgewogICAgICB2YXIga25vd24gPSBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShjaCkgJiYga2V5d29yZHNbY2hdOwoKICAgICAgLy8gaWYgdGhlcmUncyBhIEVRTmFtZSBhaGVhZCwgY29uc3VtZSB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIHBvcnRpb24sIGl0J3MgbGlrZWx5IGEgZnVuY3Rpb24KICAgICAgaWYoaXNFUU5hbWUgJiYgY2ggPT09ICdcIicpIHdoaWxlKHN0cmVhbS5uZXh0KCkgIT09ICciJyl7fQogICAgICBpZihpc0VRTmFtZSAmJiBjaCA9PT0gJ1wnJykgd2hpbGUoc3RyZWFtLm5leHQoKSAhPT0gJ1wnJyl7fQogICAgICAKICAgICAgLy8gZ29iYmxlIHVwIGEgd29yZCBpZiB0aGUgY2hhcmFjdGVyIGlzIG5vdCBrbm93bgogICAgICBpZigha25vd24pIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfLV0vKTsKICAgICAgCiAgICAgIC8vIGdvYmJsZSBhIGNvbG9uIGluIHRoZSBjYXNlIHRoYXQgaXMgYSBsaWIgZnVuYyB0eXBlIGNhbGwgZm46ZG9jCiAgICAgIHZhciBmb3VuZENvbG9uID0gc3RyZWFtLmVhdCgiOiIpCiAgICAgIAogICAgICAvLyBpZiB0aGVyZSdzIG5vdCBhIHNlY29uZCBjb2xvbiwgZ29iYmxlIGFub3RoZXIgd29yZC4gT3RoZXJ3aXNlLCBpdCdzIHByb2JhYmx5IGFuIGF4aXMgc3BlY2lmaWVyCiAgICAgIC8vIHdoaWNoIHNob3VsZCBnZXQgbWF0Y2hlZCBhcyBhIGtleXdvcmQKICAgICAgaWYoIXN0cmVhbS5lYXQoIjoiKSAmJiBmb3VuZENvbG9uKSB7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF8tXS8pOwogICAgICB9CiAgICAgIC8vIGlmIHRoZSBuZXh0IG5vbiB3aGl0ZXNwYWNlIGNoYXJhY3RlciBpcyBhbiBvcGVuIHBhcmVuLCB0aGlzIGlzIHByb2JhYmx5IGEgZnVuY3Rpb24gKGlmIG5vdCBhIGtleXdvcmQgb2Ygb3RoZXIgc29ydCkKICAgICAgaWYoc3RyZWFtLm1hdGNoKC9eWyBcdF0qXCgvLCBmYWxzZSkpIHsKICAgICAgICBtaWdodEJlRnVuY3Rpb24gPSB0cnVlOwogICAgICB9CiAgICAgIC8vIGlzIHRoZSB3b3JkIGEga2V5d29yZD8KICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRzW3dvcmRdOwogICAgICAKICAgICAgLy8gaWYgd2UgdGhpbmsgaXQncyBhIGZ1bmN0aW9uIGNhbGwgYnV0IG5vdCB5ZXQga25vd24sIAogICAgICAvLyBzZXQgc3R5bGUgdG8gdmFyaWFibGUgZm9yIG5vdyBmb3IgbGFjayBvZiBzb21ldGhpbmcgYmV0dGVyCiAgICAgIGlmKG1pZ2h0QmVGdW5jdGlvbiAmJiAha25vd24pIGtub3duID0ge3R5cGU6ICJmdW5jdGlvbl9jYWxsIiwgc3R5bGU6ICJ2YXJpYWJsZSBkZWYifTsKICAgICAgCiAgICAgIC8vIGlmIHRoZSBwcmV2aW91cyB3b3JkIHdhcyBlbGVtZW50LCBhdHRyaWJ1dGUsIGF4aXMgc3BlY2lmaWVyLCB0aGlzIHdvcmQgc2hvdWxkIGJlIHRoZSBuYW1lIG9mIHRoYXQKICAgICAgaWYoaXNJblhtbENvbnN0cnVjdG9yKHN0YXRlKSkgewogICAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICAgIHJldHVybiByZXQoIndvcmQiLCAid29yZCIsIHdvcmQpOwogICAgICB9CiAgICAgIC8vIGFzIHByZXZpb3VzbHkgY2hlY2tlZCwgaWYgdGhlIHdvcmQgaXMgZWxlbWVudCxhdHRyaWJ1dGUsIGF4aXMgc3BlY2lmaWVyLCBjYWxsIGl0IGFuICJ4bWxjb25zdHJ1Y3RvciIgYW5kIAogICAgICAvLyBwdXNoIHRoZSBzdGFjayBzbyB3ZSBrbm93IHRvIGxvb2sgZm9yIGl0IG9uIHRoZSBuZXh0IHdvcmQKICAgICAgaWYod29yZCA9PSAiZWxlbWVudCIgfHwgd29yZCA9PSAiYXR0cmlidXRlIiB8fCBrbm93bi50eXBlID09ICJheGlzX3NwZWNpZmllciIpIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7dHlwZTogInhtbGNvbnN0cnVjdG9yIn0pOwogICAgICAKICAgICAgLy8gaWYgdGhlIHdvcmQgaXMga25vd24sIHJldHVybiB0aGUgZGV0YWlscyBvZiB0aGF0IGVsc2UganVzdCBjYWxsIHRoaXMgYSBnZW5lcmljICd3b3JkJwogICAgICByZXR1cm4ga25vd24gPyByZXQoa25vd24udHlwZSwga25vd24uc3R5bGUsIHdvcmQpIDoKICAgICAgICAgICAgICAgICAgICAgcmV0KCJ3b3JkIiwgIndvcmQiLCB3b3JkKTsKICAgIH0KICB9CgogIC8vIGhhbmRsZSBjb21tZW50cywgaW5jbHVkaW5nIG5lc3RlZCAKICBmdW5jdGlvbiB0b2tlbkNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIG1heWJlRW5kID0gZmFsc2UsIG1heWJlTmVzdGVkID0gZmFsc2UsIG5lc3RlZENvdW50ID0gMCwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiKSIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBpZihuZXN0ZWRDb3VudCA+IDApCiAgICAgICAgICBuZXN0ZWRDb3VudC0tOwogICAgICAgIGVsc2UgewogICAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgZWxzZSBpZihjaCA9PSAiOiIgJiYgbWF5YmVOZXN0ZWQpIHsKICAgICAgICBuZXN0ZWRDb3VudCsrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICI6Iik7CiAgICAgIG1heWJlTmVzdGVkID0gKGNoID09ICIoIik7CiAgICB9CiAgICAKICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCIpOwogIH0KCiAgLy8gdG9rZW5pemVyIGZvciBzdHJpbmcgbGl0ZXJhbHMKICAvLyBvcHRpb25hbGx5IHBhc3MgYSB0b2tlbml6ZXIgZnVuY3Rpb24gdG8gc2V0IHN0YXRlLnRva2VuaXplIGJhY2sgdG8gd2hlbiBmaW5pc2hlZAogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlLCBmKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgY2g7CgogICAgICBpZihpc0luU3RyaW5nKHN0YXRlKSAmJiBzdHJlYW0uY3VycmVudCgpID09IHF1b3RlKSB7CiAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgaWYoZikgc3RhdGUudG9rZW5pemUgPSBmOwogICAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsKICAgICAgfQoKICAgICAgcHVzaFN0YXRlU3RhY2soc3RhdGUsIHsgdHlwZTogInN0cmluZyIsIG5hbWU6IHF1b3RlLCB0b2tlbml6ZTogdG9rZW5TdHJpbmcocXVvdGUsIGYpIH0pOwoKICAgICAgLy8gaWYgd2UncmUgaW4gYSBzdHJpbmcgYW5kIGluIGFuIFhNTCBibG9jaywgYWxsb3cgYW4gZW1iZWRkZWQgY29kZSBibG9jawogICAgICBpZihzdHJlYW0ubWF0Y2goInsiLCBmYWxzZSkgJiYgaXNJblhtbEF0dHJpYnV0ZUJsb2NrKHN0YXRlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsgCiAgICAgIH0KCiAgICAgIAogICAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgICAgaWYgKGNoID09ICBxdW90ZSkgewogICAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgICBpZihmKSBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAvLyBpZiB3ZSdyZSBpbiBhIHN0cmluZyBhbmQgaW4gYW4gWE1MIGJsb2NrLCBhbGxvdyBhbiBlbWJlZGRlZCBjb2RlIGJsb2NrIGluIGFuIGF0dHJpYnV0ZQogICAgICAgICAgaWYoc3RyZWFtLm1hdGNoKCJ7IiwgZmFsc2UpICYmIGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHsKICAgICAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgICAgIHJldHVybiByZXQoInN0cmluZyIsICJzdHJpbmciKTsgCiAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgfQogICAgICAKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CiAgCiAgLy8gdG9rZW5pemVyIGZvciB2YXJpYWJsZXMKICBmdW5jdGlvbiB0b2tlblZhcmlhYmxlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBpc1ZhcmlhYmxlQ2hhciA9IC9bXHdcJF8tXS87CgogICAgLy8gYSB2YXJpYWJsZSBtYXkgc3RhcnQgd2l0aCBhIHF1b3RlZCBFUU5hbWUgc28gaWYgdGhlIG5leHQgY2hhcmFjdGVyIGlzIHF1b3RlLCBjb25zdW1lIHRvIHRoZSBuZXh0IHF1b3RlCiAgICBpZihzdHJlYW0uZWF0KCJcIiIpKSB7CiAgICAgIHdoaWxlKHN0cmVhbS5uZXh0KCkgIT09ICdcIicpe307CiAgICAgIHN0cmVhbS5lYXQoIjoiKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc1ZhcmlhYmxlQ2hhcik7CiAgICAgIGlmKCFzdHJlYW0ubWF0Y2goIjo9IiwgZmFsc2UpKSBzdHJlYW0uZWF0KCI6Iik7CiAgICB9CiAgICBzdHJlYW0uZWF0V2hpbGUoaXNWYXJpYWJsZUNoYXIpOwogICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICByZXR1cm4gcmV0KCJ2YXJpYWJsZSIsICJ2YXJpYWJsZSIpOwogIH0KICAKICAvLyB0b2tlbml6ZXIgZm9yIFhNTCB0YWdzCiAgZnVuY3Rpb24gdG9rZW5UYWcobmFtZSwgaXNjbG9zZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgc3RyZWFtLmVhdFNwYWNlKCk7CiAgICAgIGlmKGlzY2xvc2UgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgICAgcG9wU3RhdGVTdGFjayhzdGF0ZSk7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwogICAgICB9CiAgICAgIC8vIHNlbGYgY2xvc2luZyB0YWcgd2l0aG91dCBhdHRyaWJ1dGVzPwogICAgICBpZighc3RyZWFtLmVhdCgiLyIpKQogICAgICAgIHB1c2hTdGF0ZVN0YWNrKHN0YXRlLCB7IHR5cGU6ICJ0YWciLCBuYW1lOiBuYW1lLCB0b2tlbml6ZTogdG9rZW5CYXNlfSk7CiAgICAgIGlmKCFzdHJlYW0uZWF0KCI+IikpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQXR0cmlidXRlOwogICAgICAgIHJldHVybiByZXQoInRhZyIsICJ0YWciKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsgICAgICAgIAogICAgICB9CiAgICAgIHJldHVybiByZXQoInRhZyIsICJ0YWciKTsKICAgIH0KICB9CgogIC8vIHRva2VuaXplciBmb3IgWE1MIGF0dHJpYnV0ZXMKICBmdW5jdGlvbiB0b2tlbkF0dHJpYnV0ZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgCiAgICBpZihjaCA9PSAiLyIgJiYgc3RyZWFtLmVhdCgiPiIpKSB7CiAgICAgIGlmKGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICBpZihpc0luWG1sQmxvY2soc3RhdGUpKSBwb3BTdGF0ZVN0YWNrKHN0YXRlKTsKICAgICAgcmV0dXJuIHJldCgidGFnIiwgInRhZyIpOwogICAgfQogICAgaWYoY2ggPT0gIj4iKSB7CiAgICAgIGlmKGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICByZXR1cm4gcmV0KCJ0YWciLCAidGFnIik7CiAgICB9CiAgICBpZihjaCA9PSAiPSIpCiAgICAgIHJldHVybiByZXQoIiIsICIiKTsKICAgIC8vIHF1b3RlZCBzdHJpbmcKICAgIGlmIChjaCA9PSAnIicgfHwgY2ggPT0gIiciKQogICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5TdHJpbmcoY2gsIHRva2VuQXR0cmlidXRlKSk7CgogICAgaWYoIWlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkpIAogICAgICBwdXNoU3RhdGVTdGFjayhzdGF0ZSwgeyB0eXBlOiAiYXR0cmlidXRlIiwgbmFtZTogbmFtZSwgdG9rZW5pemU6IHRva2VuQXR0cmlidXRlfSk7CgogICAgc3RyZWFtLmVhdCgvW2EtekEtWl86XS8pOwogICAgc3RyZWFtLmVhdFdoaWxlKC9bLWEtekEtWjAtOV86Ll0vKTsKICAgIHN0cmVhbS5lYXRTcGFjZSgpOwoKICAgIC8vIHRoZSBjYXNlIHdoZXJlIHRoZSBhdHRyaWJ1dGUgaGFzIG5vdCB2YWx1ZSBhbmQgdGhlIHRhZyB3YXMgY2xvc2VkCiAgICBpZihzdHJlYW0ubWF0Y2goIj4iLCBmYWxzZSkgfHwgc3RyZWFtLm1hdGNoKCIvIiwgZmFsc2UpKSB7CiAgICAgIHBvcFN0YXRlU3RhY2soc3RhdGUpOwogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsgICAgICAKICAgIH0KCiAgICByZXR1cm4gcmV0KCJhdHRyaWJ1dGUiLCAiYXR0cmlidXRlIik7CiAgfQogIAogIC8vIGhhbmRsZSBjb21tZW50cywgaW5jbHVkaW5nIG5lc3RlZCAKICBmdW5jdGlvbiB0b2tlblhNTENvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgd2hpbGUgKGNoID0gc3RyZWFtLm5leHQoKSkgewogICAgICBpZiAoY2ggPT0gIi0iICYmIHN0cmVhbS5tYXRjaCgiLT4iLCB0cnVlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyAgICAgICAgCiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgIH0KICB9CgoKICAvLyBoYW5kbGUgQ0RBVEEKICBmdW5jdGlvbiB0b2tlbkNEQVRBKHN0cmVhbSwgc3RhdGUpIHsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICJdIiAmJiBzdHJlYW0ubWF0Y2goIl0iLCB0cnVlKSkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOyAgICAgICAgCiAgICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjb21tZW50Iik7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIGhhbmRsZSBwcmVwcm9jZXNzaW5nIGluc3RydWN0aW9ucwogIGZ1bmN0aW9uIHRva2VuUHJlUHJvY2Vzc2luZyhzdHJlYW0sIHN0YXRlKSB7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiPyIgJiYgc3RyZWFtLm1hdGNoKCI+IiwgdHJ1ZSkpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsgICAgICAgIAogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiY29tbWVudCBtZXRhIik7CiAgICAgIH0KICAgIH0KICB9CiAgCiAgCiAgLy8gZnVuY3Rpb25zIHRvIHRlc3QgdGhlIGN1cnJlbnQgY29udGV4dCBvZiB0aGUgc3RhdGUKICBmdW5jdGlvbiBpc0luWG1sQmxvY2soc3RhdGUpIHsgcmV0dXJuIGlzSW4oc3RhdGUsICJ0YWciKTsgfQogIGZ1bmN0aW9uIGlzSW5YbWxBdHRyaWJ1dGVCbG9jayhzdGF0ZSkgeyByZXR1cm4gaXNJbihzdGF0ZSwgImF0dHJpYnV0ZSIpOyB9CiAgZnVuY3Rpb24gaXNJbkNvZGVCbG9jayhzdGF0ZSkgeyByZXR1cm4gaXNJbihzdGF0ZSwgImNvZGVibG9jayIpOyB9CiAgZnVuY3Rpb24gaXNJblhtbENvbnN0cnVjdG9yKHN0YXRlKSB7IHJldHVybiBpc0luKHN0YXRlLCAieG1sY29uc3RydWN0b3IiKTsgfQogIGZ1bmN0aW9uIGlzSW5TdHJpbmcoc3RhdGUpIHsgcmV0dXJuIGlzSW4oc3RhdGUsICJzdHJpbmciKTsgfQoKICBmdW5jdGlvbiBpc0VRTmFtZUFoZWFkKHN0cmVhbSkgeyAKICAgIC8vIGFzc3VtZSB3ZSd2ZSBhbHJlYWR5IGVhdGVuIGEgcXVvdGUgKCIpCiAgICBpZihzdHJlYW0uY3VycmVudCgpID09PSAnIicpCiAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2goL15bXlwiXStcIlw6LywgZmFsc2UpOwogICAgZWxzZSBpZihzdHJlYW0uY3VycmVudCgpID09PSAnXCcnKQogICAgICByZXR1cm4gc3RyZWFtLm1hdGNoKC9eW15cIl0rXCdcOi8sIGZhbHNlKTsKICAgIGVsc2UKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICBmdW5jdGlvbiBpc0luKHN0YXRlLCB0eXBlKSB7CiAgICByZXR1cm4gKHN0YXRlLnN0YWNrLmxlbmd0aCAmJiBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGggLSAxXS50eXBlID09IHR5cGUpOyAgICAKICB9CiAgCiAgZnVuY3Rpb24gcHVzaFN0YXRlU3RhY2soc3RhdGUsIG5ld1N0YXRlKSB7CiAgICBzdGF0ZS5zdGFjay5wdXNoKG5ld1N0YXRlKTsKICB9CiAgCiAgZnVuY3Rpb24gcG9wU3RhdGVTdGFjayhzdGF0ZSkgewogICAgdmFyIHBvcHBlZCA9IHN0YXRlLnN0YWNrLnBvcCgpOwogICAgdmFyIHJlaW5zdGF0ZVRva2VuaXplID0gc3RhdGUuc3RhY2subGVuZ3RoICYmIHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXS50b2tlbml6ZQogICAgc3RhdGUudG9rZW5pemUgPSByZWluc3RhdGVUb2tlbml6ZSB8fCB0b2tlbkJhc2U7CiAgfQogIAogIC8vIHRoZSBpbnRlcmZhY2UgZm9yIHRoZSBtb2RlIEFQSQogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBjYzogW10sCiAgICAgICAgc3RhY2s6IFtdCiAgICAgIH07CiAgICB9LAoKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9CiAgfTsKCn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJhcHBsaWNhdGlvbi94cXVlcnkiLCAieHF1ZXJ5Iik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFlBTUwgbW9kZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9InlhbWwuanMiPjwvc2NyaXB0PgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkOyB9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vZG9jL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogWUFNTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci0tLSAjIEZhdm9yaXRlIG1vdmllcwotIENhc2FibGFuY2EKLSBOb3J0aCBieSBOb3J0aHdlc3QKLSBUaGUgTWFuIFdobyBXYXNuJ3QgVGhlcmUKLS0tICMgU2hvcHBpbmcgbGlzdApbbWlsaywgcHVtcGtpbiBwaWUsIGVnZ3MsIGp1aWNlXQotLS0gIyBJbmRlbnRlZCBCbG9ja3MsIGNvbW1vbiBpbiBZQU1MIGRhdGEgZmlsZXMsIHVzZSBpbmRlbnRhdGlvbiBhbmQgbmV3IGxpbmVzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzCiAgbmFtZTogSm9obiBTbWl0aAogIGFnZTogMzMKLS0tICMgSW5saW5lIEJsb2NrcywgY29tbW9uIGluIFlBTUwgZGF0YSBzdHJlYW1zLCB1c2UgY29tbWFzIHRvIHNlcGFyYXRlIHRoZSBrZXk6IHZhbHVlIHBhaXJzIGJldHdlZW4gYnJhY2VzCntuYW1lOiBKb2huIFNtaXRoLCBhZ2U6IDMzfQotLS0KcmVjZWlwdDogICAgIE96LVdhcmUgUHVyY2hhc2UgSW52b2ljZQpkYXRlOiAgICAgICAgMjAwNy0wOC0wNgpjdXN0b21lcjoKICAgIGdpdmVuOiAgIERvcm90aHkKICAgIGZhbWlseTogIEdhbGUKCml0ZW1zOgogICAgLSBwYXJ0X25vOiAgIEE0Nzg2CiAgICAgIGRlc2NyaXA6ICAgV2F0ZXIgQnVja2V0IChGaWxsZWQpCiAgICAgIHByaWNlOiAgICAgMS40NwogICAgICBxdWFudGl0eTogIDQKCiAgICAtIHBhcnRfbm86ICAgRTE2MjgKICAgICAgZGVzY3JpcDogICBIaWdoIEhlZWxlZCAiUnVieSIgU2xpcHBlcnMKICAgICAgc2l6ZTogICAgICAgOAogICAgICBwcmljZTogICAgIDEwMC4yNwogICAgICBxdWFudGl0eTogIDEKCmJpbGwtdG86ICAmaWQwMDEKICAgIHN0cmVldDogfAogICAgICAgICAgICAxMjMgVG9ybmFkbyBBbGxleQogICAgICAgICAgICBTdWl0ZSAxNgogICAgY2l0eTogICBFYXN0IENlbnRlcnZpbGxlCiAgICBzdGF0ZTogIEtTCgpzaGlwLXRvOiAgKmlkMDAxCgpzcGVjaWFsRGVsaXZlcnk6ICA+CiAgICBGb2xsb3cgdGhlIFllbGxvdyBCcmljawogICAgUm9hZCB0byB0aGUgRW1lcmFsZCBDaXR5LgogICAgUGF5IG5vIGF0dGVudGlvbiB0byB0aGUKICAgIG1hbiBiZWhpbmQgdGhlIGN1cnRhaW4uCi4uLgo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXlhbWw8L2NvZGU+LjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/yaml/yaml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ5YW1sIiwgZnVuY3Rpb24oKSB7CgkKCXZhciBjb25zID0gWyd0cnVlJywgJ2ZhbHNlJywgJ29uJywgJ29mZicsICd5ZXMnLCAnbm8nXTsKCXZhciBrZXl3b3JkUmVnZXggPSBuZXcgUmVnRXhwKCJcXGIoKCIrY29ucy5qb2luKCIpfCgiKSsiKSkkIiwgJ2knKTsKCQoJcmV0dXJuIHsKCQl0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewoJCQl2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwoJCQl2YXIgZXNjID0gc3RhdGUuZXNjYXBlZDsKCQkJc3RhdGUuZXNjYXBlZCA9IGZhbHNlOwoJCQkvKiBjb21tZW50cyAqLwoJCQlpZiAoY2ggPT0gIiMiKSB7IHN0cmVhbS5za2lwVG9FbmQoKTsgcmV0dXJuICJjb21tZW50IjsgfQoJCQlpZiAoc3RhdGUubGl0ZXJhbCAmJiBzdHJlYW0uaW5kZW50YXRpb24oKSA+IHN0YXRlLmtleUNvbCkgewoJCQkJc3RyZWFtLnNraXBUb0VuZCgpOyByZXR1cm4gInN0cmluZyI7CgkJCX0gZWxzZSBpZiAoc3RhdGUubGl0ZXJhbCkgeyBzdGF0ZS5saXRlcmFsID0gZmFsc2U7IH0KCQkJaWYgKHN0cmVhbS5zb2woKSkgewoJCQkJc3RhdGUua2V5Q29sID0gMDsKCQkJCXN0YXRlLnBhaXIgPSBmYWxzZTsKCQkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQkJLyogZG9jdW1lbnQgc3RhcnQgKi8KCQkJCWlmKHN0cmVhbS5tYXRjaCgvLS0tLykpIHsgcmV0dXJuICJkZWYiOyB9CgkJCQkvKiBkb2N1bWVudCBlbmQgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL1wuXC5cLi8pKSB7IHJldHVybiAiZGVmIjsgfQoJCQkJLyogYXJyYXkgbGlzdCBpdGVtICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9ccyotXHMrLykpIHsgcmV0dXJuICdtZXRhJzsgfQoJCQl9CgkJCS8qIHBhaXJzIChhc3NvY2lhdGl2ZSBhcnJheXMpIC0+IGtleSAqLwoJCQlpZiAoIXN0YXRlLnBhaXIgJiYgc3RyZWFtLm1hdGNoKC9eXHMqKFthLXowLTlcLl8tXSkrKD89XHMqOikvaSkpIHsKCQkJCXN0YXRlLnBhaXIgPSB0cnVlOwoJCQkJc3RhdGUua2V5Q29sID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CgkJCQlyZXR1cm4gImF0b20iOwoJCQl9CgkJCWlmIChzdGF0ZS5wYWlyICYmIHN0cmVhbS5tYXRjaCgvXjpccyovKSkgeyBzdGF0ZS5wYWlyU3RhcnQgPSB0cnVlOyByZXR1cm4gJ21ldGEnOyB9CgkJCQoJCQkvKiBpbmxpbmUgcGFpcnMvbGlzdHMgKi8KCQkJaWYgKHN0cmVhbS5tYXRjaCgvXihce3xcfXxcW3xcXSkvKSkgewoJCQkJaWYgKGNoID09ICd7JykKCQkJCQlzdGF0ZS5pbmxpbmVQYWlycysrOwoJCQkJZWxzZSBpZiAoY2ggPT0gJ30nKQoJCQkJCXN0YXRlLmlubGluZVBhaXJzLS07CgkJCQllbHNlIGlmIChjaCA9PSAnWycpCgkJCQkJc3RhdGUuaW5saW5lTGlzdCsrOwoJCQkJZWxzZQoJCQkJCXN0YXRlLmlubGluZUxpc3QtLTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJCgkJCS8qIGxpc3Qgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVMaXN0ID4gMCAmJiAhZXNjICYmIGNoID09ICcsJykgewoJCQkJc3RyZWFtLm5leHQoKTsKCQkJCXJldHVybiAnbWV0YSc7CgkJCX0KCQkJLyogcGFpcnMgc2VwZXJhdG9yICovCgkJCWlmIChzdGF0ZS5pbmxpbmVQYWlycyA+IDAgJiYgIWVzYyAmJiBjaCA9PSAnLCcpIHsKCQkJCXN0YXRlLmtleUNvbCA9IDA7CgkJCQlzdGF0ZS5wYWlyID0gZmFsc2U7CgkJCQlzdGF0ZS5wYWlyU3RhcnQgPSBmYWxzZTsKCQkJCXN0cmVhbS5uZXh0KCk7CgkJCQlyZXR1cm4gJ21ldGEnOwoJCQl9CgkJCQoJCQkvKiBzdGFydCBvZiB2YWx1ZSBvZiBhIHBhaXIgKi8KCQkJaWYgKHN0YXRlLnBhaXJTdGFydCkgewoJCQkJLyogYmxvY2sgbGl0ZXJhbHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goL15ccyooXHx8XD4pXHMqLykpIHsgc3RhdGUubGl0ZXJhbCA9IHRydWU7IHJldHVybiAnbWV0YSc7IH07CgkJCQkvKiByZWZlcmVuY2VzICovCgkJCQlpZiAoc3RyZWFtLm1hdGNoKC9eXHMqKFwmfFwqKVthLXowLTlcLl8tXStcYi9pKSkgeyByZXR1cm4gJ3ZhcmlhYmxlLTInOyB9CgkJCQkvKiBudW1iZXJzICovCgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPT0gMCAmJiBzdHJlYW0ubWF0Y2goL15ccyotP1swLTlcLlwsXStccz8kLykpIHsgcmV0dXJuICdudW1iZXInOyB9CgkJCQlpZiAoc3RhdGUuaW5saW5lUGFpcnMgPiAwICYmIHN0cmVhbS5tYXRjaCgvXlxzKi0/WzAtOVwuXCxdK1xzPyg/PSgsfH0pKS8pKSB7IHJldHVybiAnbnVtYmVyJzsgfQoJCQkJLyoga2V5d29yZHMgKi8KCQkJCWlmIChzdHJlYW0ubWF0Y2goa2V5d29yZFJlZ2V4KSkgeyByZXR1cm4gJ2tleXdvcmQnOyB9CgkJCX0KCgkJCS8qIG5vdGhpbmcgZm91bmQsIGNvbnRpbnVlICovCgkJCXN0YXRlLnBhaXJTdGFydCA9IGZhbHNlOwoJCQlzdGF0ZS5lc2NhcGVkID0gKGNoID09ICdcXCcpOwoJCQlzdHJlYW0ubmV4dCgpOwoJCQlyZXR1cm4gbnVsbDsKCQl9LAoJCXN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewoJCQlyZXR1cm4gewoJCQkJcGFpcjogZmFsc2UsCgkJCQlwYWlyU3RhcnQ6IGZhbHNlLAoJCQkJa2V5Q29sOiAwLAoJCQkJaW5saW5lUGFpcnM6IDAsCgkJCQlpbmxpbmVMaXN0OiAwLAoJCQkJbGl0ZXJhbDogZmFsc2UsCgkJCQllc2NhcGVkOiBmYWxzZQoJCQl9OwoJCX0KCX07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gteWFtbCIsICJ5YW1sIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDb2RlTWlycm9yIDIKCkNvZGVNaXJyb3IgMiBpcyBhIHJld3JpdGUgb2YgW0NvZGVNaXJyb3IKMV0oaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yKS4gVGhlIGRvY3MgbGl2ZQpbaGVyZV0oaHR0cDovL2NvZGVtaXJyb3IubmV0L2RvYy9tYW51YWwuaHRtbCksIGFuZCB0aGUgcHJvamVjdCBwYWdlIGlzCltodHRwOi8vY29kZW1pcnJvci5uZXQvXShodHRwOi8vY29kZW1pcnJvci5uZXQvKS4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFRlc3QgU3VpdGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLm9rIHtjb2xvcjogIzBlMDt9CiAgICAgIC5mYWlsdXJlIHtjb2xvcjogI2UwMDt9CiAgICAgIC5lcnJvciB7Y29sb3I6ICNjOTA7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvcjogVGVzdCBTdWl0ZTwvaDE+CgogICAgPHA+QSBsaW1pdGVkIHNldCBvZiBwcm9ncmFtbWF0aWMgc2FuaXR5IHRlc3RzIGZvciBDb2RlTWlycm9yLjwvcD4KCiAgICA8cHJlIGlkPW91dHB1dD48L3ByZT4KCiAgICA8ZGl2IHN0eWxlPSJ2aXNpYmlsaXR5OiBoaWRkZW4iIGlkPXRlc3Rncm91bmQ+CiAgICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+PC90ZXh0YXJlYT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9b2sgbmFtZT1zdWJtaXQ+PC9mb3JtPgogICAgPC9kaXY+CgogICAgPHNjcmlwdCBzcmM9InRlc3QuanMiPjwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/mode_test.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Lm10LW91dHB1dCAubXQtdG9rZW4gewogIGJvcmRlcjogMXB4IHNvbGlkICNkZGQ7CiAgd2hpdGUtc3BhY2U6IHByZTsKICBmb250LWZhbWlseTogIkNvbnNvbGFzIiwgbW9ub3NwYWNlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLm10LW91dHB1dCAubXQtc3R5bGUgewogIGZvbnQtc2l6ZTogeC1zbWFsbDsKfQoKLm10LXRlc3QgewogIGJvcmRlci1sZWZ0OiAxMHB4IHNvbGlkICNmZmY7Cn0KCi5tdC1wYXNzIHsKICBib3JkZXItbGVmdDogMTBweCBzb2xpZCAjY2ZjOwp9CgoubXQtZmFpbCB7CiAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgI2ZjYzsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/mode_test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoqCiAqIEhlbHBlciB0byB0ZXN0IENvZGVNaXJyb3IgaGlnaGxpZ2h0aW5nIG1vZGVzLiBJdCBwcmV0dHkgcHJpbnRzIG91dHB1dCBvZiB0aGUKICogaGlnaGxpZ2h0ZXIgYW5kIGNhbiBjaGVjayBhZ2FpbnN0IGV4cGVjdGVkIHN0eWxlcy4KICoKICogU2VlIHRlc3QuaHRtbCBpbiB0aGUgc3RleCBtb2RlIGZvciBleGFtcGxlcy4KICovCk1vZGVUZXN0ID0ge307CgpNb2RlVGVzdC5tb2RlT3B0aW9ucyA9IHt9OwpNb2RlVGVzdC5tb2RlTmFtZSA9IENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZTsKCi8qIGtlZXAgdHJhY2sgb2YgcmVzdWx0cyBmb3IgcHJpbnRTdW1tYXJ5ICovCk1vZGVUZXN0LnRlc3RzID0gMDsKTW9kZVRlc3QucGFzc2VzID0gMDsKCi8qKgogKiBSdW4gYSB0ZXN0OyBwcmV0dHlwcmludHMgdGhlIHJlc3VsdHMgdXNpbmcgZG9jdW1lbnQud3JpdGUoKS4KICoKICogQHBhcmFtIHN0cmluZyB0byBoaWdobGlnaHQKICoKICogQHBhcmFtIHN0eWxlW2ldIGV4cGVjdGVkIHN0eWxlIG9mIHRoZSBpJ3RoIHRva2VuIGluIHN0cmluZwogKgogKiBAcGFyYW0gdG9rZW5baV0gZXhwZWN0ZWQgdmFsdWUgZm9yIHRoZSBpJ3RoIHRva2VuIGluIHN0cmluZwogKi8KTW9kZVRlc3QudGVzdCA9IGZ1bmN0aW9uKCkgewogIE1vZGVUZXN0LnRlc3RzICs9IDE7CgogIHZhciBtb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKE1vZGVUZXN0Lm1vZGVPcHRpb25zLCBNb2RlVGVzdC5tb2RlTmFtZSk7CgogIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSkgewogICAgdGhyb3cgIm11c3QgaGF2ZSB0ZXh0IGZvciB0ZXN0IjsKICB9CiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggJSAyICE9IDEpIHsKICAgIHRocm93ICJtdXN0IGhhdmUgdGV4dCBmb3IgdGVzdCBwbHVzIGV4cGVjdGVkIChzdHlsZSwgdG9rZW4pIHBhaXJzIjsKICB9CgogIHZhciB0ZXh0ID0gYXJndW1lbnRzWzBdOwogIHZhciBleHBlY3RlZE91dHB1dCA9IFtdOwogIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAyKSB7CiAgICBleHBlY3RlZE91dHB1dC5wdXNoKFthcmd1bWVudHNbaV0sYXJndW1lbnRzW2kgKyAxXV0pOwogIH0KCiAgdmFyIG9ic2VydmVkT3V0cHV0ID0gTW9kZVRlc3QuaGlnaGxpZ2h0KHRleHQsIG1vZGUpCgogIHZhciBwYXNzLCBwYXNzU3R5bGUgPSAiIjsKICBpZiAoZXhwZWN0ZWRPdXRwdXQubGVuZ3RoID4gMCkgewogICAgcGFzcyA9IE1vZGVUZXN0LmhpZ2hsaWdodE91dHB1dHNFcXVhbChleHBlY3RlZE91dHB1dCwgb2JzZXJ2ZWRPdXRwdXQpOwogICAgcGFzc1N0eWxlID0gcGFzcyA/ICdtdC1wYXNzJyA6ICdtdC1mYWlsJzsKICAgIE1vZGVUZXN0LnBhc3NlcyArPSBwYXNzID8gMSA6IDA7CiAgfQoKICB2YXIgcyA9ICcnOwogIHMgKz0gJzxkaXYgY2xhc3M9Im10LXRlc3QgJyArIHBhc3NTdHlsZSArICciPic7CiAgcyArPSAgICc8cHJlPicgKyBNb2RlVGVzdC5odG1sRXNjYXBlKHRleHQpICsgJzwvcHJlPic7CiAgcyArPSAgICc8ZGl2IGNsYXNzPSJjbS1zLWRlZmF1bHQiPic7CiAgaWYgKHBhc3MgfHwgZXhwZWN0ZWRPdXRwdXQubGVuZ3RoID09IDApIHsKICAgIHMgKz0gICBNb2RlVGVzdC5wcmV0dHlQcmludE91dHB1dFRhYmxlKG9ic2VydmVkT3V0cHV0KTsKICB9IGVsc2UgewogICAgcyArPSAnZXhwZWN0ZWQ6JzsKICAgIHMgKz0gICBNb2RlVGVzdC5wcmV0dHlQcmludE91dHB1dFRhYmxlKGV4cGVjdGVkT3V0cHV0KTsKICAgIHMgKz0gJ29ic2VydmVkOic7CiAgICBzICs9ICAgTW9kZVRlc3QucHJldHR5UHJpbnRPdXRwdXRUYWJsZShvYnNlcnZlZE91dHB1dCk7CiAgfQogIHMgKz0gICAnPC9kaXY+JzsKICBzICs9ICc8L2Rpdj4nOwogIGRvY3VtZW50LndyaXRlKHMpOwp9CgovKioKICogRW11bGF0aW9uIG9mIENvZGVNaXJyb3IncyBpbnRlcm5hbCBoaWdobGlnaHQgcm91dGluZSBmb3IgdGVzdGluZy4gTXVsdGktbGluZQogKiBpbnB1dCBpcyBzdXBwb3J0ZWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgdG8gaGlnaGxpZ2h0CiAqCiAqIEBwYXJhbSBtb2RlIHRoZSBtb2RlIHRoYXQgd2lsbCBkbyB0aGUgYWN0dWFsIGhpZ2hsaWdodGluZwogKgogKiBAcmV0dXJuIGFycmF5IG9mIFtzdHlsZSwgdG9rZW5dIHBhaXJzCiAqLwpNb2RlVGVzdC5oaWdobGlnaHQgPSBmdW5jdGlvbihzdHJpbmcsIG1vZGUpIHsKICB2YXIgc3RhdGUgPSBtb2RlLnN0YXJ0U3RhdGUoKQoKICB2YXIgbGluZXMgPSBzdHJpbmcucmVwbGFjZSgvXHJcbi9nLCdcbicpLnNwbGl0KCdcbicpOwogIHZhciBvdXRwdXQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgbGluZSA9IGxpbmVzW2ldOwogICAgdmFyIHN0cmVhbSA9IG5ldyBDb2RlTWlycm9yLlN0cmluZ1N0cmVhbShsaW5lKTsKICAgIGlmIChsaW5lID09ICIiICYmIG1vZGUuYmxhbmtMaW5lKSBtb2RlLmJsYW5rTGluZShzdGF0ZSk7CiAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICB2YXIgc3R5bGUgPSBtb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgICB2YXIgc3Vic3RyID0gbGluZS5zbGljZShzdHJlYW0uc3RhcnQsIHN0cmVhbS5wb3MpOwogICAgICBvdXRwdXQucHVzaChbc3R5bGUsIHN1YnN0cl0pOwogICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgfQogIH0KCiAgcmV0dXJuIG91dHB1dDsKfQoKLyoqCiAqIENvbXBhcmUgdHdvIGFycmF5cyBvZiBvdXRwdXQgZnJvbSBNb2RlVGVzdC5oaWdobGlnaHQuCiAqCiAqIEBwYXJhbSBvMSBhcnJheSBvZiBbc3R5bGUsIHRva2VuXSBwYWlycwogKgogKiBAcGFyYW0gbzIgYXJyYXkgb2YgW3N0eWxlLCB0b2tlbl0gcGFpcnMKICoKICogQHJldHVybiBib29sZWFuOyB0cnVlIGlmZiBvdXRwdXRzIGVxdWFsCiAqLwpNb2RlVGVzdC5oaWdobGlnaHRPdXRwdXRzRXF1YWwgPSBmdW5jdGlvbihvMSwgbzIpIHsKICB2YXIgZXEgPSAobzEubGVuZ3RoID09IG8yLmxlbmd0aCk7CiAgaWYgKGVxKSB7CiAgICBmb3IgKHZhciBqIGluIG8xKSB7CiAgICAgIGVxID0gZXEgJiYKICAgICAgICBvMVtqXS5sZW5ndGggPT0gMiAmJiBvMVtqXVswXSA9PSBvMltqXVswXSAmJiBvMVtqXVsxXSA9PSBvMltqXVsxXTsKICAgIH0KICB9CiAgcmV0dXJuIGVxOwp9CgovKioKICogUHJpbnQgdG9rZW5zIGFuZCBjb3JyZXNwb25kaW5nIHN0eWxlcyBpbiBhIHRhYmxlLiBTcGFjZXMgaW4gdGhlIHRva2VuIGFyZQogKiByZXBsYWNlZCB3aXRoICdpbnRlcnB1bmN0JyBkb3RzICgmbWlkZG90OykuCiAqCiAqIEBwYXJhbSBvdXRwdXQgYXJyYXkgb2YgW3N0eWxlLCB0b2tlbl0gcGFpcnMKICoKICogQHJldHVybiBodG1sIHN0cmluZwogKi8KTW9kZVRlc3QucHJldHR5UHJpbnRPdXRwdXRUYWJsZSA9IGZ1bmN0aW9uKG91dHB1dCkgewogIHZhciBzID0gJzx0YWJsZSBjbGFzcz0ibXQtb3V0cHV0Ij4nOwogIHMgKz0gJzx0cj4nOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0Lmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdG9rZW4gPSBvdXRwdXRbaV07CiAgICBzICs9CiAgICAgICc8dGQgY2xhc3M9Im10LXRva2VuIj4nICsKICAgICAgICAnPHNwYW4gY2xhc3M9ImNtLScgKyB0b2tlblswXSArICciPicgKwogICAgICAgICAgTW9kZVRlc3QuaHRtbEVzY2FwZSh0b2tlblsxXSkucmVwbGFjZSgvIC9nLCcmbWlkZG90OycpICsKICAgICAgICAnPC9zcGFuPicgKwogICAgICAnPC90ZD4nOwogIH0KICBzICs9ICc8L3RyPjx0cj4nOwogIGZvciAodmFyIGkgPSAwOyBpIDwgb3V0cHV0Lmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdG9rZW4gPSBvdXRwdXRbaV07CiAgICBzICs9CiAgICAgICc8dGQgY2xhc3M9Im10LXN0eWxlIj48c3Bhbj4nICsgdG9rZW5bMF0gKyAnPC9zcGFuPjwvdGQ+JzsKICB9CiAgcyArPSAnPC90YWJsZT4nOwogIHJldHVybiBzOwp9CgovKioKICogUHJpbnQgaG93IG1hbnkgdGVzdHMgaGF2ZSBydW4gc28gZmFyIGFuZCBob3cgbWFueSBvZiB0aG9zZSBwYXNzZWQuCiAqLwpNb2RlVGVzdC5wcmludFN1bW1hcnkgPSBmdW5jdGlvbigpIHsKICBkb2N1bWVudC53cml0ZShNb2RlVGVzdC5wYXNzZXMgKyAnIHBhc3NlcyBmb3IgJyArIE1vZGVUZXN0LnRlc3RzICsgJyB0ZXN0cycpOwp9CgovKioKICogQmFzaWMgSFRNTCBlc2NhcGluZy4KICovCk1vZGVUZXN0Lmh0bWxFc2NhcGUgPSBmdW5jdGlvbihzdHIpIHsKICBzdHIgPSBzdHIudG9TdHJpbmcoKTsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1s8Jl0vZywKICAgICAgZnVuY3Rpb24oc3RyKSB7cmV0dXJuIHN0ciA9PSAiJiIgPyAiJmFtcDsiIDogIiZsdDsiO30pOwp9Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHRlc3RzID0gW107Cgp0ZXN0KCJmcm9tVGV4dEFyZWEiLCBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHRlLnZhbHVlID0gIkNPTlRFTlQiOwogIHZhciBjbSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlKTsKICBpcyghdGUub2Zmc2V0SGVpZ2h0KTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiQ09OVEVOVCIpOwogIGNtLnNldFZhbHVlKCJmb29cbmJhciIpOwogIGVxKGNtLmdldFZhbHVlKCksICJmb29cbmJhciIpOwogIGNtLnNhdmUoKTsKICBpcygvXmZvb1xyP1xuYmFyJC8udGVzdCh0ZS52YWx1ZSkpOwogIGNtLnNldFZhbHVlKCJ4eHgiKTsKICBjbS50b1RleHRBcmVhKCk7CiAgaXModGUub2Zmc2V0SGVpZ2h0KTsKICBlcSh0ZS52YWx1ZSwgInh4eCIpOwp9KTsKCnRlc3RDTSgiZ2V0UmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMjM0Iik7CiAgZXEoY20uZ2V0TGluZSgxKSwgIjU2NzgiKTsKICBlcShjbS5nZXRMaW5lKDIpLCBudWxsKTsKICBlcShjbS5nZXRMaW5lKC0xKSwgbnVsbCk7CiAgZXEoY20uZ2V0UmFuZ2Uoe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDAsIGNoOiAzfSksICIxMjMiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IC0xfSwge2xpbmU6IDAsIGNoOiAyMDB9KSwgIjEyMzQiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IDJ9LCB7bGluZTogMSwgY2g6IDJ9KSwgIjM0XG41NiIpOwogIGVxKGNtLmdldFJhbmdlKHtsaW5lOiAxLCBjaDogMn0sIHtsaW5lOiAxMDAsIGNoOiAwfSksICI3OCIpOwp9LCB7dmFsdWU6ICIxMjM0XG41Njc4In0pOwoKdGVzdENNKCJyZXBsYWNlUmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldFZhbHVlKCksICIiKTsKICBjbS5yZXBsYWNlUmFuZ2UoImZvb1xuIiwge2xpbmU6IDAsIGNoOiAwfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZvb1xuIik7CiAgY20ucmVwbGFjZVJhbmdlKCJhXG5iIiwge2xpbmU6IDAsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZhXG5ib29cbiIpOwogIGVxKGNtLmxpbmVDb3VudCgpLCAzKTsKICBjbS5yZXBsYWNlUmFuZ2UoInh5enp5Iiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgInh5enp5b29cbiIpOwogIGNtLnJlcGxhY2VSYW5nZSgiYWJjIiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEwLCBjaDogMH0pOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5saW5lQ291bnQoKSwgMSk7Cn0pOwoKdGVzdENNKCJzZWxlY3Rpb24iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDR9LCB7bGluZTogMiwgY2g6IDJ9KTsKICBpcyhjbS5zb21ldGhpbmdTZWxlY3RlZCgpKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgIjExXG4yMjIyMjJcbjMzIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKGZhbHNlKSwge2xpbmU6IDIsIGNoOiAyfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMCwgY2g6IDR9KTsKICBjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDEsIGNoOiAwfSk7CiAgaXMoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDB9KTsKICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJhYmMiKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgImFiYyIpOwogIGVxKGNtLmdldFZhbHVlKCksICIxMTExMTFcbmFiYzIyMjIyMlxuMzMzMzMzIik7CiAgY20ucmVwbGFjZVNlbGVjdGlvbigiZGVmIiwgImVuZCIpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDN9KTsKICBjbS5zZXRDdXJzb3Ioe2xpbmU6IDIsIGNoOiAxfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMiwgY2g6IDF9KTsKICBjbS5zZXRDdXJzb3IoMSwgMik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDJ9KTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgibGluZXMiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMTExMTEiKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiMjIyMjIyIik7CiAgZXEoY20uZ2V0TGluZSgtMSksIG51bGwpOwogIGNtLnJlbW92ZUxpbmUoMSk7CiAgY20uc2V0TGluZSgxLCAiYWJjIik7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjExMTExMVxuYWJjIik7Cn0sIHt2YWx1ZTogIjExMTExMVxuMjIyMjIyXG4zMzMzMzMifSk7Cgp0ZXN0Q00oImluZGVudCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uaW5kZW50TGluZSgxKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiICAgYmxhaCgpOyIpOwogIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDgpOwogIGNtLmluZGVudExpbmUoMSk7CiAgZXEoY20uZ2V0TGluZSgxKSwgIlx0YmxhaCgpOyIpOwp9LCB7dmFsdWU6ICJpZiAoeCkge1xuYmxhaCgpO1xufSIsIGluZGVudFVuaXQ6IDMsIGluZGVudFdpdGhUYWJzOiB0cnVlLCB0YWJTaXplOiA4fSk7Cgp0ZXN0KCJkZWZhdWx0cyIsIGZ1bmN0aW9uKCkgewogIHZhciBvbGRkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMsIGRlZnMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307CiAgZm9yICh2YXIgb3B0IGluIG9sZGRlZmF1bHRzKSBkZWZzW29wdF0gPSBvbGRkZWZhdWx0c1tvcHRdOwogIGRlZnMuaW5kZW50VW5pdCA9IDU7CiAgZGVmcy52YWx1ZSA9ICJ1dSI7CiAgZGVmcy5lbnRlck1vZGUgPSAia2VlcCI7CiAgZGVmcy50YWJpbmRleCA9IDU1OwogIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSk7CiAgdHJ5IHsKICAgIGVxKGNtLmdldE9wdGlvbigiaW5kZW50VW5pdCIpLCA1KTsKICAgIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDEwKTsKICAgIGVxKGRlZnMuaW5kZW50VW5pdCwgNSk7CiAgICBlcShjbS5nZXRWYWx1ZSgpLCAidXUiKTsKICAgIGVxKGNtLmdldE9wdGlvbigiZW50ZXJNb2RlIiksICJrZWVwIik7CiAgICBlcShjbS5nZXRJbnB1dEZpZWxkKCkudGFiSW5kZXgsIDU1KTsKICB9CiAgZmluYWxseSB7CiAgICBDb2RlTWlycm9yLmRlZmF1bHRzID0gb2xkZGVmYXVsdHM7CiAgICBwbGFjZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICB9Cn0pOwoKdGVzdENNKCJsaW5lSW5mbyIsIGZ1bmN0aW9uKGNtKSB7CiAgZXEoY20ubGluZUluZm8oLTEpLCBudWxsKTsKICB2YXIgbGggPSBjbS5zZXRNYXJrZXIoMSwgIkZPTyIsICJiYXIiKTsKICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKDEpOwogIGVxKGluZm8udGV4dCwgIjIyMjIyMiIpOwogIGVxKGluZm8ubWFya2VyVGV4dCwgIkZPTyIpOwogIGVxKGluZm8ubWFya2VyQ2xhc3MsICJiYXIiKTsKICBlcShpbmZvLmxpbmUsIDEpOwogIGVxKGNtLmxpbmVJbmZvKDIpLm1hcmtlclRleHQsIG51bGwpOwogIGNtLmNsZWFyTWFya2VyKGxoKTsKICBlcShjbS5saW5lSW5mbygxKS5tYXJrZXJUZXh0LCBudWxsKTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgiY29vcmRzIiwgZnVuY3Rpb24oY20pIHsKICB2YXIgc2Nyb2xsZXIgPSBjbS5nZXRXcmFwcGVyRWxlbWVudCgpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIkNvZGVNaXJyb3Itc2Nyb2xsIilbMF07CiAgc2Nyb2xsZXIuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKICB2YXIgY29udGVudCA9IFtdOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMjAwOyArK2kpIGNvbnRlbnQucHVzaCgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIiArIGkpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgdmFyIHRvcCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgdmFyIGJvdCA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDIwMCwgY2g6IDMwfSk7CiAgaXModG9wLnggPCBib3QueCk7CiAgaXModG9wLnkgPCBib3QueSk7CiAgaXModG9wLnkgPCB0b3AueUJvdCk7CiAgY20uc2Nyb2xsVG8obnVsbCwgMTAwKTsKICB2YXIgdG9wMiA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgaXModG9wLnkgPiB0b3AyLnkpOwogIGVxKHRvcC54LCB0b3AyLngpOwp9KTsKCnRlc3RDTSgiY29vcmRzQ2hhciIsIGZ1bmN0aW9uKGNtKSB7CiAgdmFyIGNvbnRlbnQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDcwOyArK2kpIGNvbnRlbnQucHVzaCgieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgZm9yICh2YXIgY2ggPSAwOyBjaCA8IDM1OyBjaCArPSAyKSB7CiAgICBmb3IgKHZhciBsaW5lID0gMDsgbGluZSA8IDcwOyBsaW5lICs9IDUpIHsKICAgICAgY20uc2V0Q3Vyc29yKGxpbmUsIGNoKTsKICAgICAgdmFyIGNvb3JkcyA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IGxpbmUsIGNoOiBjaH0pOwogICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcih7eDogY29vcmRzLngsIHk6IGNvb3Jkcy55ICsgMX0pOwogICAgICBlcShwb3MubGluZSwgbGluZSk7CiAgICAgIGVxKHBvcy5jaCwgY2gpOwogICAgfQogIH0KfSk7Cgp0ZXN0Q00oInBvc0Zyb21JbmRleCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uc2V0VmFsdWUoCiAgICAiVGhpcyBmdW5jdGlvbiBzaG91bGRcbiIgKwogICAgImNvbnZlcnQgYSB6ZXJvIGJhc2VkIGluZGV4XG4iICsKICAgICJ0byBsaW5lIGFuZCBjaC4iCiAgKTsKCiAgdmFyIGV4YW1wbGVzID0gWwogICAgeyBpbmRleDogLTEsIGxpbmU6IDAsIGNoOiAwICB9LCAvLyA8LSBUZXN0cyBjbGlwcGluZwogICAgeyBpbmRleDogMCwgIGxpbmU6IDAsIGNoOiAwICB9LAogICAgeyBpbmRleDogMTAsIGxpbmU6IDAsIGNoOiAxMCB9LAogICAgeyBpbmRleDogMzksIGxpbmU6IDEsIGNoOiAxOCB9LAogICAgeyBpbmRleDogNTUsIGxpbmU6IDIsIGNoOiA3ICB9LAogICAgeyBpbmRleDogNjMsIGxpbmU6IDIsIGNoOiAxNSB9LAogICAgeyBpbmRleDogNjQsIGxpbmU6IDIsIGNoOiAxNSB9ICAvLyA8LSBUZXN0cyBjbGlwcGluZwogIF07CgogIGZvciAodmFyIGkgPSAwOyBpIDwgZXhhbXBsZXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBleGFtcGxlID0gZXhhbXBsZXNbaV07CiAgICB2YXIgcG9zID0gY20ucG9zRnJvbUluZGV4KGV4YW1wbGUuaW5kZXgpOwogICAgZXEocG9zLmxpbmUsIGV4YW1wbGUubGluZSk7CiAgICBlcShwb3MuY2gsIGV4YW1wbGUuY2gpOwogICAgaWYgKGV4YW1wbGUuaW5kZXggPj0gMCAmJiBleGFtcGxlLmluZGV4IDwgNjQpCiAgICAgIGVxKGNtLmluZGV4RnJvbVBvcyhwb3MpLCBleGFtcGxlLmluZGV4KTsKICB9ICAKfSk7Cgp0ZXN0Q00oInVuZG8iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldExpbmUoMCwgImRlZiIpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDApOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMSk7CiAgY20ucmVkbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJkZWYiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDEpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMCk7CiAgY20uc2V0VmFsdWUoIjFcblxuXG4yIik7CiAgY20uY2xlYXJIaXN0b3J5KCk7CiAgZXEoY20uaGlzdG9yeVNpemUoKS51bmRvLCAwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgY20udW5kbygpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjFcblxuXG4yIik7Cn0sIHt2YWx1ZTogImFiYyJ9KTsKCnRlc3RDTSgidW5kb011bHRpTGluZSIsIGZ1bmN0aW9uKGNtKSB7CiAgY20ucmVwbGFjZVJhbmdlKCJ4Iiwge2xpbmU6MCwgY2g6IDB9KTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnVuZG8oKTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiYWJjXG5kZWZcbmdoaSIpOwogIGNtLnJlcGxhY2VSYW5nZSgieSIsIHtsaW5lOjEsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ4Iiwge2xpbmU6MCwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToyLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjEsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ6Iiwge2xpbmU6MiwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKfSwge3ZhbHVlOiAiYWJjXG5kZWZcbmdoaSJ9KTsKCnRlc3RDTSgibWFya1RleHRTaW5nbGVMaW5lIiwgZnVuY3Rpb24oY20pIHsKICBmb3JFYWNoKFt7YTogMCwgYjogMSwgYzogIiIsIGY6IDIsIHQ6IDV9LAogICAgICAgICAgIHthOiAwLCBiOiA0LCBjOiAiIiwgZjogMCwgdDogMn0sCiAgICAgICAgICAge2E6IDEsIGI6IDIsIGM6ICJ4IiwgZjogMywgdDogNn0sCiAgICAgICAgICAge2E6IDQsIGI6IDUsIGM6ICIiLCBmOiAzLCB0OiA1fSwKICAgICAgICAgICB7YTogNCwgYjogNSwgYzogInh4IiwgZjogMywgdDogN30sCiAgICAgICAgICAge2E6IDIsIGI6IDUsIGM6ICIiLCBmOiAyLCB0OiAzfSwKICAgICAgICAgICB7YTogMiwgYjogNSwgYzogImFiY2QiLCBmOiA2LCB0OiA3fSwKICAgICAgICAgICB7YTogMiwgYjogNiwgYzogIngiLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogMywgYjogNiwgYzogIiIsIGY6IG51bGwsIHQ6IG51bGx9LAogICAgICAgICAgIHthOiAwLCBiOiA5LCBjOiAiaGFsbG8iLCBmOiBudWxsLCB0OiBudWxsfSwKICAgICAgICAgICB7YTogNCwgYjogNiwgYzogIngiLCBmOiAzLCB0OiA0fSwKICAgICAgICAgICB7YTogNCwgYjogOCwgYzogIiIsIGY6IDMsIHQ6IDR9LAogICAgICAgICAgIHthOiA2LCBiOiA2LCBjOiAiYSIsIGY6IDMsIHQ6IDZ9LAogICAgICAgICAgIHthOiA4LCBiOiA5LCBjOiAiIiwgZjogMywgdDogNn1dLCBmdW5jdGlvbih0ZXN0KSB7CiAgICBjbS5zZXRWYWx1ZSgiMTIzNDU2Nzg5MCIpOwogICAgdmFyIHIgPSBjbS5tYXJrVGV4dCh7bGluZTogMCwgY2g6IDN9LCB7bGluZTogMCwgY2g6IDZ9LCAiZm9vIik7CiAgICBjbS5yZXBsYWNlUmFuZ2UodGVzdC5jLCB7bGluZTogMCwgY2g6IHRlc3QuYX0sIHtsaW5lOiAwLCBjaDogdGVzdC5ifSk7CiAgICB2YXIgZiA9IHIuZmluZCgpOwogICAgZXEoZi5mcm9tICYmIGYuZnJvbS5jaCwgdGVzdC5mKTsgZXEoZi50byAmJiBmLnRvLmNoLCB0ZXN0LnQpOwogIH0pOwp9KTsKCnRlc3RDTSgibWFya1RleHRNdWx0aUxpbmUiLCBmdW5jdGlvbihjbSkgewogIGZ1bmN0aW9uIHAodikgeyByZXR1cm4gdiAmJiB7bGluZTogdlswXSwgY2g6IHZbMV19OyB9CiAgZm9yRWFjaChbe2E6IFswLCAwXSwgYjogWzAsIDVdLCBjOiAiIiwgZjogWzAsIDBdLCB0OiBbMiwgNV19LAogICAgICAgICAgIHthOiBbMCwgMV0sIGI6IFswLCAxMF0sIGM6ICIiLCBmOiBbMCwgMV0sIHQ6IFsyLCA1XX0sCiAgICAgICAgICAge2E6IFswLCA1XSwgYjogWzAsIDZdLCBjOiAieCIsIGY6IFswLCA2XSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzAsIDBdLCBiOiBbMSwgMF0sIGM6ICIiLCBmOiBbMCwgMF0sIHQ6IFsxLCA1XX0sCiAgICAgICAgICAge2E6IFswLCA2XSwgYjogWzIsIDRdLCBjOiAiIiwgZjogWzAsIDVdLCB0OiBbMCwgN119LAogICAgICAgICAgIHthOiBbMCwgNl0sIGI6IFsyLCA0XSwgYzogImFhIiwgZjogWzAsIDVdLCB0OiBbMCwgOV19LAogICAgICAgICAgIHthOiBbMSwgMl0sIGI6IFsxLCA4XSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzIsIDVdfSwKICAgICAgICAgICB7YTogWzAsIDVdLCBiOiBbMiwgNV0sIGM6ICJ4eCIsIGY6IG51bGwsIHQ6IG51bGx9LAogICAgICAgICAgIHthOiBbMCwgMF0sIGI6IFsyLCAxMF0sIGM6ICJ4IiwgZjogbnVsbCwgdDogbnVsbH0sCiAgICAgICAgICAge2E6IFsxLCA1XSwgYjogWzIsIDVdLCBjOiAiIiwgZjogWzAsIDVdLCB0OiBbMSwgNV19LAogICAgICAgICAgIHthOiBbMiwgMF0sIGI6IFsyLCAzXSwgYzogIiIsIGY6IFswLCA1XSwgdDogWzIsIDJdfSwKICAgICAgICAgICB7YTogWzIsIDVdLCBiOiBbMywgMF0sIGM6ICJhXG5iIiwgZjogWzAsIDVdLCB0OiBbMiwgNV19LAogICAgICAgICAgIHthOiBbMiwgM10sIGI6IFszLCAwXSwgYzogIngiLCBmOiBbMCwgNV0sIHQ6IFsyLCA0XX0sCiAgICAgICAgICAge2E6IFsxLCAxXSwgYjogWzEsIDldLCBjOiAiMVxuMlxuMyIsIGY6IFswLCA1XSwgdDogWzQsIDVdfV0sIGZ1bmN0aW9uKHRlc3QpIHsKICAgIGNtLnNldFZhbHVlKCJhYWFhYWFhYWFhXG5iYmJiYmJiYmJiXG5jY2NjY2NjY2NjXG5kZGRkZGRkZFxuIik7CiAgICB2YXIgciA9IGNtLm1hcmtUZXh0KHtsaW5lOiAwLCBjaDogNX0sIHtsaW5lOiAyLCBjaDogNX0sICJmb28iKTsKICAgIGNtLnJlcGxhY2VSYW5nZSh0ZXN0LmMsIHAodGVzdC5hKSwgcCh0ZXN0LmIpKTsKICAgIHZhciBmID0gci5maW5kKCk7CiAgICBlcVBvcyhmLmZyb20sIHAodGVzdC5mKSk7IGVxUG9zKGYudG8sIHAodGVzdC50KSk7CiAgfSk7Cn0pOwoKdGVzdENNKCJib29rbWFyayIsIGZ1bmN0aW9uKGNtKSB7CiAgZnVuY3Rpb24gcCh2KSB7IHJldHVybiB2ICYmIHtsaW5lOiB2WzBdLCBjaDogdlsxXX07IH0KICBmb3JFYWNoKFt7YTogWzEsIDBdLCBiOiBbMSwgMV0sIGM6ICIiLCBkOiBbMSwgNF19LAogICAgICAgICAgIHthOiBbMSwgMV0sIGI6IFsxLCAxXSwgYzogInh4IiwgZDogWzEsIDddfSwKICAgICAgICAgICB7YTogWzEsIDRdLCBiOiBbMSwgNV0sIGM6ICJhYiIsIGQ6IFsxLCA2XX0sCiAgICAgICAgICAge2E6IFsxLCA0XSwgYjogWzEsIDZdLCBjOiAiIiwgZDogbnVsbH0sCiAgICAgICAgICAge2E6IFsxLCA1XSwgYjogWzEsIDZdLCBjOiAiYWJjIiwgZDogWzEsIDVdfSwKICAgICAgICAgICB7YTogWzEsIDZdLCBiOiBbMSwgOF0sIGM6ICIiLCBkOiBbMSwgNV19LAogICAgICAgICAgIHthOiBbMSwgNF0sIGI6IFsxLCA0XSwgYzogIlxuXG4iLCBkOiBbMywgMV19LAogICAgICAgICAgIHtibTogWzEsIDldLCBhOiBbMSwgMV0sIGI6IFsxLCAxXSwgYzogIlxuIiwgZDogWzIsIDhdfV0sIGZ1bmN0aW9uKHRlc3QpIHsKICAgIGNtLnNldFZhbHVlKCIxMjM0NTY3ODkwXG4xMjM0NTY3ODkwXG4xMjM0NTY3ODkwIik7CiAgICB2YXIgYiA9IGNtLnNldEJvb2ttYXJrKHAodGVzdC5ibSkgfHwge2xpbmU6IDEsIGNoOiA1fSk7CiAgICBjbS5yZXBsYWNlUmFuZ2UodGVzdC5jLCBwKHRlc3QuYSksIHAodGVzdC5iKSk7CiAgICBlcVBvcyhiLmZpbmQoKSwgcCh0ZXN0LmQpKTsKICB9KTsKfSk7CgovLyBTY2FmZm9sZGluZwoKZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1s8Jl0vZywgZnVuY3Rpb24oc3RyKSB7cmV0dXJuIHN0ciA9PSAiJiIgPyAiJmFtcDsiIDogIiZsdDsiO30pOwp9CmZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7Cn0KCmZ1bmN0aW9uIEZhaWx1cmUod2h5KSB7dGhpcy5tZXNzYWdlID0gd2h5O30KCmZ1bmN0aW9uIHRlc3QobmFtZSwgcnVuKSB7dGVzdHMucHVzaCh7bmFtZTogbmFtZSwgZnVuYzogcnVufSk7fQpmdW5jdGlvbiB0ZXN0Q00obmFtZSwgcnVuLCBvcHRzKSB7CiAgdGVzdChuYW1lLCBmdW5jdGlvbigpIHsKICAgIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSwgb3B0cyk7CiAgICB0cnkge3J1bihjbSk7fQogICAgZmluYWxseSB7cGxhY2UucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7fQogIH0pOwp9CgpmdW5jdGlvbiBydW5UZXN0cygpIHsKICB2YXIgZmFpbHVyZXMgPSBbXSwgcnVuID0gMDsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdGVzdCA9IHRlc3RzW2ldOwogICAgdHJ5IHt0ZXN0LmZ1bmMoKTt9CiAgICBjYXRjaChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgRmFpbHVyZSkKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZmFpbHVyZSIsIHRlc3Q6IHRlc3QubmFtZSwgdGV4dDogZS5tZXNzYWdlfSk7CiAgICAgIGVsc2UKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZXJyb3IiLCB0ZXN0OiB0ZXN0Lm5hbWUsIHRleHQ6IGUudG9TdHJpbmcoKX0pOwogICAgfQogICAgcnVuKys7CiAgfQogIHZhciBodG1sID0gW3J1biArICIgdGVzdHMgcnVuLiJdOwogIGlmIChmYWlsdXJlcy5sZW5ndGgpCiAgICBmb3JFYWNoKGZhaWx1cmVzLCBmdW5jdGlvbihmYWlsKSB7CiAgICAgIGh0bWwucHVzaChmYWlsLnRlc3QgKyAnOiA8c3BhbiBjbGFzcz0iJyArIGZhaWwudHlwZSArICciPicgKyBodG1sRXNjYXBlKGZhaWwudGV4dCkgKyAiPC9zcGFuPiIpOwogICAgfSk7CiAgZWxzZSBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJvayI+QWxsIHBhc3NlZC48L3NwYW4+Jyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dCIpLmlubmVySFRNTCA9IGh0bWwuam9pbigiXG4iKTsKfQoKZnVuY3Rpb24gZXEoYSwgYiwgbXNnKSB7CiAgaWYgKGEgIT0gYikgdGhyb3cgbmV3IEZhaWx1cmUoYSArICIgIT0gIiArIGIgKyAobXNnID8gIiAoIiArIG1zZyArICIpIiA6ICIiKSk7Cn0KZnVuY3Rpb24gZXFQb3MoYSwgYiwgbXNnKSB7CiAgaWYgKGEgPT0gYikgcmV0dXJuOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSB0aHJvdyBuZXcgRmFpbHVyZSgiY29tcGFyaW5nIHBvaW50IHRvIG51bGwiKTsKICBlcShhLmxpbmUsIGIubGluZSwgbXNnKTsKICBlcShhLmNoLCBiLmNoLCBtc2cpOwp9CmZ1bmN0aW9uIGlzKGEsIG1zZykgewogIGlmICghYSkgdGhyb3cgbmV3IEZhaWx1cmUoImFzc2VydGlvbiBmYWlsZWQiICsgKG1zZyA/ICIgKCIgKyBtc2cgKyAiKSIgOiAiIikpOwp9Cgp3aW5kb3cub25sb2FkID0gcnVuVGVzdHM7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/theme/cobalt.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtY29iYWx0IHsgYmFja2dyb3VuZDogIzAwMjI0MDsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLWNvYmFsdCBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICNiMzY1MzkgIWltcG9ydGFudDsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzAwMjI0MDsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogI2QwZDBkMDsgfQouY20tcy1jb2JhbHQgLkNvZGVNaXJyb3ItY3Vyc29yIHsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZSAhaW1wb3J0YW50OyB9CgouY20tcy1jb2JhbHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICMwOGY7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tYXRvbSB7IGNvbG9yOiAjODQ1ZGM0OyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLW51bWJlciwgLmNtLXMtY29iYWx0IHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICNmZjgwZTE7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjZmZlZTgwOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLXN0cmluZyB7IGNvbG9yOiAjM2FkOTAwOyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLW1ldGEgeyBjb2xvcjogI2ZmOWQwMDsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS12YXJpYWJsZS0yLCAuY20tcy1jb2JhbHQgc3Bhbi5jbS10YWcgeyBjb2xvcjogIzllZmZmZjsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1jb2JhbHQgc3Bhbi5jbS1kZWYgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tZXJyb3IgeyBjb2xvcjogIzlkMWUxNTsgfQouY20tcy1jb2JhbHQgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICNkOGQ4ZDg7IH0KLmNtLXMtY29iYWx0IHNwYW4uY20tYnVpbHRpbiwgLmNtLXMtY29iYWx0IHNwYW4uY20tc3BlY2lhbCB7IGNvbG9yOiAjZmY5ZTU5OyB9Ci5jbS1zLWNvYmFsdCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzg0NWRjNDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/eclipse.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWNsaXBzZSBzcGFuLmNtLW1ldGEge2NvbG9yOiAjRkYxNzE3O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWtleXdvcmQgeyBsaW5lLWhlaWdodDogMWVtOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICM3RjAwNTU7IH0KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0b20ge2NvbG9yOiAjMjE5O30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLW51bWJlciB7Y29sb3I6ICMxNjQ7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tZGVmIHtjb2xvcjogIzAwZjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjMDAwMEMwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXByb3BlcnR5IHtjb2xvcjogYmxhY2s7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tb3BlcmF0b3Ige2NvbG9yOiBibGFjazt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1jb21tZW50IHtjb2xvcjogIzNGN0Y1Rjt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1zdHJpbmcge2NvbG9yOiAjMkEwMEZGO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1idWlsdGluIHtjb2xvcjogIzMwYTt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2NjNzt9Ci5jbS1zLWVjbGlwc2Ugc3Bhbi5jbS10YWcge2NvbG9yOiAjMTcwO30KLmNtLXMtZWNsaXBzZSBzcGFuLmNtLWF0dHJpYnV0ZSB7Y29sb3I6ICMwMGM7fQouY20tcy1lY2xpcHNlIHNwYW4uY20tbGluayB7Y29sb3I6ICMyMTk7fQoKLmNtLXMtZWNsaXBzZSAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgewoJYm9yZGVyOjFweCBzb2xpZCBncmV5OwoJY29sb3I6YmxhY2sgIWltcG9ydGFudDs7Cn0K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/elegant.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtZWxlZ2FudCBzcGFuLmNtLW51bWJlciwgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXN0cmluZywgLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWF0b20ge2NvbG9yOiAjNzYyO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLWNvbW1lbnQge2NvbG9yOiAjMjYyOyBmb250LXN0eWxlOiBpdGFsaWM7IGxpbmUtaGVpZ2h0OiAxZW07fQouY20tcy1lbGVnYW50IHNwYW4uY20tbWV0YSB7Y29sb3I6ICM1NTU7IGZvbnQtc3R5bGU6IGl0YWxpYzsgbGluZS1oZWlnaHQ6IDFlbTt9Ci5jbS1zLWVsZWdhbnQgc3Bhbi5jbS12YXJpYWJsZSB7Y29sb3I6IGJsYWNrO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjYjExO30KLmNtLXMtZWxlZ2FudCBzcGFuLmNtLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQouY20tcy1lbGVnYW50IHNwYW4uY20ta2V5d29yZCB7Y29sb3I6ICM3MzA7fQouY20tcy1lbGVnYW50IHNwYW4uY20tYnVpbHRpbiB7Y29sb3I6ICMzMGE7fQouY20tcy1lbGVnYW50IHNwYW4uY20tZXJyb3Ige2JhY2tncm91bmQtY29sb3I6ICNmZGQ7fQouY20tcy1lbGVnYW50IHNwYW4uY20tbGluayB7Y29sb3I6ICM3NjI7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/lesser-dark.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKaHR0cDovL2xlc3Njc3Mub3JnLyBkYXJrIHRoZW1lClBvcnRlZCB0byBDb2RlTWlycm9yIGJ5IFBldGVyIEtyb29uCiovCi5Db2RlTWlycm9yewogIGxpbmUtaGVpZ2h0OiAxNXB4Owp9Ci5jbS1zLWxlc3Nlci1kYXJrIHsKICBmb250LWZhbWlseTogJ0JpdHN0cmVhbSBWZXJhIFNhbnMgTW9ubycsICdEZWphVnUgU2FucyBNb25vJywgJ01vbmFjbycsIENvdXJpZXIsIG1vbm9zcGFjZSAhaW1wb3J0YW50OwogIGZvbnQtc2l6ZToxMnB4Owp9CgouY20tcy1sZXNzZXItZGFyayB7IGJhY2tncm91bmQ6ICMyNjI2MjY7IGNvbG9yOiAjRUJFRkU3OyB0ZXh0LXNoYWRvdzogMCAtMXB4IDFweCAjMjYyNjI2OyB9Ci5jbS1zLWxlc3Nlci1kYXJrIGRpdi5Db2RlTWlycm9yLXNlbGVjdGVkIHtiYWNrZ3JvdW5kOiAjNDU0NDNCICFpbXBvcnRhbnQ7fSAvKiAzMzMyMkIqLwouY20tcy1sZXNzZXItZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgeyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHdoaXRlICFpbXBvcnRhbnQ7IH0KLmNtLXMtbGVzc2VyLWRhcmsgLkNvZGVNaXJyb3ItbGluZXMgeyBtYXJnaW4tbGVmdDozcHg7IG1hcmdpbi1yaWdodDozcHg7IH0vKmVkaXRhYmxlIGNvZGUgaG9sZGVyKi8KCmRpdi5Db2RlTWlycm9yIHNwYW4uQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgeyBjb2xvcjogIzdFRkM3RTsgfS8qNjVGQzY1Ki8KCi5jbS1zLWxlc3Nlci1kYXJrIC5Db2RlTWlycm9yLWd1dHRlciB7IGJhY2tncm91bmQ6ICMyNjI2MjY7IGJvcmRlci1yaWdodDoxcHggc29saWQgI2FhYTsgcGFkZGluZy1yaWdodDozcHg7IG1pbi13aWR0aDoyLjVlbTsgfQouY20tcy1sZXNzZXItZGFyayAuQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7IGNvbG9yOiAjNzc3OyB9CgouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLWtleXdvcmQgeyBjb2xvcjogIzU5OWVmZjsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLWF0b20geyBjb2xvcjogI0MyQjQ3MDsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLW51bWJlciB7IGNvbG9yOiAjQjM1RTREOyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tZGVmIHtjb2xvcjogY29sb3I6IHdoaXRlO30KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS12YXJpYWJsZSB7IGNvbG9yOiNEOUJGOEM7IH0KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS12YXJpYWJsZS0yIHsgY29sb3I6ICM2NjkxOTk7IH0KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS12YXJpYWJsZS0zIHsgY29sb3I6IHdoaXRlOyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tcHJvcGVydHkge2NvbG9yOiAjOTJBNzVDO30KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1vcGVyYXRvciB7Y29sb3I6ICM5MkE3NUM7fQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogIzY2NjsgfQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLXN0cmluZyB7IGNvbG9yOiAjQkNEMjc5OyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tc3RyaW5nLTIge2NvbG9yOiAjZjUwO30KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1tZXRhIHsgY29sb3I6ICM3MzhDNzM7IH0KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1lcnJvciB7IGNvbG9yOiAjOWQxZTE1OyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tcXVhbGlmaWVyIHtjb2xvcjogIzU1NTt9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tYnVpbHRpbiB7IGNvbG9yOiAjZmY5ZTU5OyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tYnJhY2tldCB7IGNvbG9yOiAjRUJFRkU3OyB9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tdGFnIHsgY29sb3I6ICM2NjkxOTk7IH0KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1hdHRyaWJ1dGUge2NvbG9yOiAjMDBjO30KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1oZWFkZXIge2NvbG9yOiAjYTBhO30KLmNtLXMtbGVzc2VyLWRhcmsgc3Bhbi5jbS1xdW90ZSB7Y29sb3I6ICMwOTA7fQouY20tcy1sZXNzZXItZGFyayBzcGFuLmNtLWhyIHtjb2xvcjogIzk5OTt9Ci5jbS1zLWxlc3Nlci1kYXJrIHNwYW4uY20tbGluayB7Y29sb3I6ICMwMGM7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/monokai.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogQmFzZWQgb24gU3VibGltZSBUZXh0J3MgTW9ub2thaSB0aGVtZSAqLwoKLmNtLXMtbW9ub2thaSB7YmFja2dyb3VuZDogIzI3MjgyMjsgY29sb3I6ICNmOGY4ZjI7fQouY20tcy1tb25va2FpIGRpdi5Db2RlTWlycm9yLXNlbGVjdGVkIHtiYWNrZ3JvdW5kOiAjNDk0ODNFICFpbXBvcnRhbnQ7fQouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlciB7YmFja2dyb3VuZDogIzI3MjgyMjsgYm9yZGVyLXJpZ2h0OiAwcHg7fQouY20tcy1tb25va2FpIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHtjb2xvcjogI2QwZDBkMDt9Ci5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItY3Vyc29yIHtib3JkZXItbGVmdDogMXB4IHNvbGlkICNmOGY4ZjAgIWltcG9ydGFudDt9CgouY20tcy1tb25va2FpIHNwYW4uY20tY29tbWVudCB7Y29sb3I6ICM3NTcxNWU7fQouY20tcy1tb25va2FpIHNwYW4uY20tYXRvbSB7Y29sb3I6ICNhZTgxZmY7fQouY20tcy1tb25va2FpIHNwYW4uY20tbnVtYmVyIHtjb2xvcjogI2FlODFmZjt9CgouY20tcy1tb25va2FpIHNwYW4uY20tcHJvcGVydHksIC5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1hdHRyaWJ1dGUge2NvbG9yOiAjYTZlMjJlO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWtleXdvcmQge2NvbG9yOiAjZjkyNjcyO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLXN0cmluZyB7Y29sb3I6ICNlNmRiNzQ7fQoKLmNtLXMtbW9ub2thaSBzcGFuLmNtLXZhcmlhYmxlIHtjb2xvcjogI2E2ZTIyZTt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS12YXJpYWJsZS0yIHtjb2xvcjogIzllZmZmZjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1kZWYge2NvbG9yOiAjZmQ5NzFmO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWVycm9yIHtiYWNrZ3JvdW5kOiAjZjkyNjcyOyBjb2xvcjogI2Y4ZjhmMDt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS1icmFja2V0IHtjb2xvcjogI2Y4ZjhmMjt9Ci5jbS1zLW1vbm9rYWkgc3Bhbi5jbS10YWcge2NvbG9yOiAjZjkyNjcyO30KLmNtLXMtbW9ub2thaSBzcGFuLmNtLWxpbmsge2NvbG9yOiAjYWU4MWZmO30KCi5jbS1zLW1vbm9rYWkgLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHsKICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICBjb2xvcjogd2hpdGUgIWltcG9ydGFudDsKfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/neat.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtbmVhdCBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogI2E4NjsgfQouY20tcy1uZWF0IHNwYW4uY20ta2V5d29yZCB7IGxpbmUtaGVpZ2h0OiAxZW07IGZvbnQtd2VpZ2h0OiBib2xkOyBjb2xvcjogYmx1ZTsgfQouY20tcy1uZWF0IHNwYW4uY20tc3RyaW5nIHsgY29sb3I6ICNhMjI7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLWJ1aWx0aW4geyBsaW5lLWhlaWdodDogMWVtOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwNzc7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXNwZWNpYWwgeyBsaW5lLWhlaWdodDogMWVtOyBmb250LXdlaWdodDogYm9sZDsgY29sb3I6ICMwYWE7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLXZhcmlhYmxlIHsgY29sb3I6IGJsYWNrOyB9Ci5jbS1zLW5lYXQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5lYXQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICMzYTM7IH0KLmNtLXMtbmVhdCBzcGFuLmNtLW1ldGEge2NvbG9yOiAjNTU1O30KLmNtLXMtbmVhdCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzNhMzsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/night.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogTG9vc2VseSBiYXNlZCBvbiB0aGUgTWlkbmlnaHQgVGV4dG1hdGUgdGhlbWUgKi8KCi5jbS1zLW5pZ2h0IHsgYmFja2dyb3VuZDogIzBhMDAxZjsgY29sb3I6ICNmOGY4Zjg7IH0KLmNtLXMtbmlnaHQgZGl2LkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjYThmICFpbXBvcnRhbnQ7IH0KLmNtLXMtbmlnaHQgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzBhMDAxZjsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy1uaWdodCAuQ29kZU1pcnJvci1ndXR0ZXItdGV4dCB7IGNvbG9yOiAjZjhmOGY4OyB9Ci5jbS1zLW5pZ2h0IC5Db2RlTWlycm9yLWN1cnNvciB7IGJvcmRlci1sZWZ0OiAxcHggc29saWQgd2hpdGUgIWltcG9ydGFudDsgfQoKLmNtLXMtbmlnaHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM2OTAwYTE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICM4NDVkYzQ7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLW5pZ2h0IHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICNmZmQ1MDA7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1rZXl3b3JkIHsgY29sb3I6ICM1OTllZmY7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogIzM3ZjE0YTsgfQouY20tcy1uaWdodCBzcGFuLmNtLW1ldGEgeyBjb2xvcjogIzc2NzhlMjsgfQouY20tcy1uaWdodCBzcGFuLmNtLXZhcmlhYmxlLTIsIC5jbS1zLW5pZ2h0IHNwYW4uY20tdGFnIHsgY29sb3I6ICM5OWIyZmY7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1uaWdodCBzcGFuLmNtLWRlZiB7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1uaWdodCBzcGFuLmNtLWVycm9yIHsgY29sb3I6ICM5ZDFlMTU7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICM4ZGE2Y2U7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1jb21tZW50IHsgY29sb3I6ICM2OTAwYTE7IH0KLmNtLXMtbmlnaHQgc3Bhbi5jbS1idWlsdGluLCAuY20tcy1uaWdodCBzcGFuLmNtLXNwZWNpYWwgeyBjb2xvcjogI2ZmOWU1OTsgfQouY20tcy1uaWdodCBzcGFuLmNtLWxpbmsgeyBjb2xvcjogIzg0NWRjNDsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/rubyblue.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LmNtLXMtcnVieWJsdWUgeyBmb250OjEzcHgvMS40ZW0gVHJlYnVjaGV0LCBWZXJkYW5hLCBzYW5zLXNlcmlmOyB9CS8qIC0gY3VzdG9taXplZCBlZGl0b3IgZm9udCAtICovCgouY20tcy1ydWJ5Ymx1ZSB7IGJhY2tncm91bmQ6ICMxMTI0MzU7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1ydWJ5Ymx1ZSBkaXYuQ29kZU1pcnJvci1zZWxlY3RlZCB7IGJhY2tncm91bmQ6ICMzODU2NkYgIWltcG9ydGFudDsgfQouY20tcy1ydWJ5Ymx1ZSAuQ29kZU1pcnJvci1ndXR0ZXIgeyBiYWNrZ3JvdW5kOiAjMUY0NjYxOyBib3JkZXItcmlnaHQ6IDdweCBzb2xpZCAjM0U3MDg3OyBtaW4td2lkdGg6Mi41ZW07IH0KLmNtLXMtcnVieWJsdWUgLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgeyBjb2xvcjogd2hpdGU7IH0KLmNtLXMtcnVieWJsdWUgLkNvZGVNaXJyb3ItY3Vyc29yIHsgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZSAhaW1wb3J0YW50OyB9CgouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWNvbW1lbnQgeyBjb2xvcjogIzk5OTsgZm9udC1zdHlsZTppdGFsaWM7IGxpbmUtaGVpZ2h0OiAxZW07IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICNGNEMyMEI7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1udW1iZXIsIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tYXR0cmlidXRlIHsgY29sb3I6ICM4MkM2RTA7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1rZXl3b3JkIHsgY29sb3I6ICNGMEY7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogI0YwODA0NzsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLW1ldGEgeyBjb2xvcjogI0YwRjsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLXZhcmlhYmxlLTIsIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tdGFnIHsgY29sb3I6ICM3QkQ4Mjc7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS12YXJpYWJsZS0zLCAuY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWRlZiB7IGNvbG9yOiB3aGl0ZTsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWVycm9yIHsgY29sb3I6ICNBRjIwMTg7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICNGMEY7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5jbS1saW5rIHsgY29sb3I6ICNGNEMyMEI7IH0KLmNtLXMtcnVieWJsdWUgc3Bhbi5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldCB7IGNvbG9yOiNGMEYgIWltcG9ydGFudDsgfQouY20tcy1ydWJ5Ymx1ZSBzcGFuLmNtLWJ1aWx0aW4sIC5jbS1zLXJ1YnlibHVlIHNwYW4uY20tc3BlY2lhbCB7IGNvbG9yOiAjRkY5RDAwOyB9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/theme/xq-dark.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKQ29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmtMb2dpYyBDb3Jwb3JhdGlvbgpBdXRob3I6IE1pa2UgQnJldm9vcnQgPG1pa2VAYnJldm9vcnQuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KKi8KLmNtLXMteHEtZGFyayB7IGJhY2tncm91bmQ6ICMwYTAwMWY7IGNvbG9yOiAjZjhmOGY4OyB9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2E4ZiAhaW1wb3J0YW50OyB9Ci5jbS1zLXhxLWRhcmsgLkNvZGVNaXJyb3ItZ3V0dGVyIHsgYmFja2dyb3VuZDogIzBhMDAxZjsgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2FhYTsgfQouY20tcy14cS1kYXJrIC5Db2RlTWlycm9yLWd1dHRlci10ZXh0IHsgY29sb3I6ICNmOGY4Zjg7IH0KLmNtLXMteHEtZGFyayAuQ29kZU1pcnJvci1jdXJzb3IgeyBib3JkZXItbGVmdDogMXB4IHNvbGlkIHdoaXRlICFpbXBvcnRhbnQ7IH0KCi5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1rZXl3b3JkIHtjb2xvcjogI0ZGQkQ0MDt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1hdG9tIHtjb2xvcjogIzZDOENENTt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1udW1iZXIge2NvbG9yOiAjMTY0O30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWRlZiB7Y29sb3I6ICNGRkY7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7fQouY20tcy14cS1kYXJrIHNwYW4uY20tdmFyaWFibGUge2NvbG9yOiAjRkZGO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTIge2NvbG9yOiAjRUVFO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXZhcmlhYmxlLTMge2NvbG9yOiAjREREO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXByb3BlcnR5IHt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1vcGVyYXRvciB7fQouY20tcy14cS1kYXJrIHNwYW4uY20tY29tbWVudCB7Y29sb3I6IGdyYXk7fQouY20tcy14cS1kYXJrIHNwYW4uY20tc3RyaW5nIHtjb2xvcjogIzlGRUUwMDt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1tZXRhIHtjb2xvcjogeWVsbG93O30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWVycm9yIHtjb2xvcjogI2YwMDt9Ci5jbS1zLXhxLWRhcmsgc3Bhbi5jbS1xdWFsaWZpZXIge2NvbG9yOiAjRkZGNzAwO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO30KLmNtLXMteHEtZGFyayBzcGFuLmNtLWJyYWNrZXQge2NvbG9yOiAjY2M3O30KLmNtLXMteHEtZGFyayBzcGFuLmNtLXRhZyB7Y29sb3I6ICNGRkJENDA7fQouY20tcy14cS1kYXJrIHNwYW4uY20tYXR0cmlidXRlIHtjb2xvcjogI0ZGRjcwMDt9Cg==]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbImZyaWVuZGx5bmFtZSJdPSJDb2RlTWlycm9yIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IiOwoKJGxhbmdbInBvc3RpbnN0YWxsIl09IlRoZSBDb2RlTWlycm9yIG1vZHVsZSB3YXMgc3VjZXNzZnVsbHkgaW5zdGFsbGVkIjsKJGxhbmdbIm5lZWRwZXJtaXNzaW9uIl09IidZb3UgbmVlZCB0aGUgJyVzJyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4iOwoKJGxhbmdbInNldHRpbmdzdGFiIl09IlNldHRpbmdzIjsKJGxhbmdbInNhdmVzZXR0aW5ncyJdPSJTYXZlIHNldHRpbmdzIjsKJGxhbmdbInNldHRpbmdzc2F2ZWQiXT0iU2V0dGluZ3Mgc2F2ZWQiOwoKJGxhbmdbImh0bWx0ZXN0Il09IkhUTUwgc3ludGF4IHRlc3QiOwokbGFuZ1siY3NzdGVzdCJdPSJDU1Mgc3ludGF4IHRlc3QiOwokbGFuZ1sicGhwdGVzdCJdPSJQSFAgc3ludGF4IHRlc3QiOwokbGFuZ1sianN0ZXN0Il09IkphdmFTY3JpcHQgc3ludGF4IHRlc3QiOwovLyRsYW5nWyJleGFtcGxlc3ludGF4Il09IlN5bnRheCB0byB0ZXN0IHdpdGgiOwovLyRsYW5nWyJjaGFuZ2UiXT0iQ2hhbmdlLi4uIjsKCiRsYW5nWyJzaG93bGluZW51bWJlcnMiXT0iU2hvdyBsaW5lbnVtYmVycyI7CiRsYW5nWyJhbGxvd2Z1bGxzY3JlZW4iXT0iQWxsb3cgZnVsbHNjcmVlbiBtb2RlIChGMTEpIjsKCi8vJGxhbmdbInRleHR3cmFwcGluZyJdPSJXcmFwIGxvbmcgbGluZXMiOwokbGFuZ1siYXV0b21hdGNocGFyZW5zIl09IkF1dG9tYXRjaCBwYXJlbnRoZXNpcyI7CiRsYW5nWyJ0YWJoYW5kbGluZyJdPSJIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5IjsKJGxhbmdbInRhYmRlZmF1bHQiXT0iTGV0IHRoZSBicm93c2VyIGRlY2lkZSI7CiRsYW5nWyJ0YWJpbmRlbnQiXT0iRG8gaW5kZW50YXRpb24iOwokbGFuZ1sidGFic3BhY2VzIl09Ikluc2VydCBzcGFjZXMiOwokbGFuZ1sidGFic2hpZnQiXT0iU2hpZnQgdG8gdGhlIHJpZ2h0LCBzaGlmdC1UQUIgc2hpZnRzIHRvIGxlZnQiOwokbGFuZ1sidGFic2l6ZSJdPSJTaXplIG9mIHRhYnMiOwoKJGxhbmdbImNzc2FkZGl0aW9ucyJdPSJBZGRpdGlvbnMgdG8gdGhlIENvZGVNaXJyb3ItY3NzLiI7CgokbGFuZ1sidGhlbWUiXT0iVGhlbWUiOwoKCgokbGFuZ1siaGVscCJdPSI8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L3N0cm9uZz4KPGJyLz4KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLgpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQo8YnIvPjxici8+CjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPgpZb3Ugc2ltcGx5IGluc3RhbGwgaXQsIGFuZCBjaG9vc2UgaXQgaW4geW91ciBhZG1pbiB1c2VyIHByZWZlcmVuY2VzLiBOb3RlLCB0aGF0IGlmIHlvdSB1c2UgQ01TbXMgMS4xIG9yIGFib3ZlIHlvdSBjYW4Kc2VsZWN0IENvZGVNaXJyb3IgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuIjsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/da_DK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgLSBlbiBzeW50YWtzLWZyZW1oJmFlbGlnO3ZlbmRlIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3IgbW9kdWxldCBibGV2IGtvcnJla3QgaW5zdGFsbGVyZXQnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtZb3UgbmVlZCB0aGUgJiMwMzk7JXMmIzAzOTsgcGVybWlzc2lvbiB0byBwZXJmb3JtIHRoYXQgZnVuY3Rpb24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnSW5kc3RpbGxpbmdlcic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdHZW0gaW5kc3RpbGxpbmdlcic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5kc3RpbGxpbmdlcm5lIGJsZXYgZ2VtdCc7CiRsYW5nWydodG1sdGVzdCddID0gJ0hUTUwgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ3BocHRlc3QnXSA9ICdQSFAgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2pzdGVzdCddID0gJ0phdmFTY3JpcHQgc3ludGFrcyB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YWtzIGRlciBza2FsIHRlc3RlcyBtZWQnOwokbGFuZ1snY2hhbmdlJ10gPSAnU2tpZnQuLi4nOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnVmlzIGxpbmllbnVtcmUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnT21icnlkIGxhbmdlIGxpbmllcic7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdWaXMgbWF0Y2hlbmRlIHBhcmVudGVzZXInOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5JzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMZXQgdGhlIGJyb3dzZXIgZGVjaWRlJzsKJGxhbmdbJ3RhYmluZGVudCddID0gJ0RvIGluZGVudGF0aW9uJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ0luc2VydCBzcGFjZXMnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCB0byB0aGUgcmlnaHQsIHNoaWZ0LVRBQiBzaGlmdHMgdG8gbGVmdCc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdUaWxmJm9zbGFzaDtqZWxzZXIgdGlsIENvZGVNaXJyb3ItY3NzLic7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLic7CiRsYW5nWydxY2EnXSA9ICcxMjI5NjAxNzkwLTg1MjQzMTk3LTQzMjYwNzEzJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMzg5Njg0Mzk0LjEzMDExNDIxNDAuMTMwMTI1NDY5Ny4xMzAxNDM1MjU2LjMnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzAxMTQyMTQwLjEuMS51dG1jc3I9KGRpcmVjdCl8dXRtY2NuPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgLSBFZGl0b3IgbWl0IFN5bnRheGhlcnZvcmhlYnVuZyc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RhcyBDb2RlTWlycm9yLU1vZHVsIHd1cmRlIGluc3RhbGxpZXJ0Lic7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1NpZSBiZW4mb3VtbDt0aWdlbiBkaWUgJiMwMzk7JXMmIzAzOTstQmVyZWNodGlndW5nLCB1bSBkaWVzZSBGdW5rdGlvbiBhdXN6dWYmdXVtbDtocmVuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0VpbnN0ZWxsdW5nZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MLVN5bnRheC1UZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MtU3ludGF4LVRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUC1TeW50YXgtVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0LVN5bnRheC1UZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1plaWxlbm51bW1lcm4gYW56ZWlnZW4nOwokbGFuZ1snYWxsb3dmdWxsc2NyZWVuJ10gPSAnVm9sbGJpbGRtb2R1cyBlcmxhdWJlbiAoRjExKSc7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBdXRvbWF0aXNjaGUgS2xhbW1lci1Fcmtlbm51bmcnOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdXYXMgc29sbCBiZWltIERyJnV1bWw7Y2tlbiBkZXIgVEFCLVRhc3RlIHBhc3NpZXJlbic7CiRsYW5nWyd0YWJkZWZhdWx0J10gPSAnQnJvd3NlciBlbnRzY2hlaWRlbiBsYXNzZW4nOwokbGFuZ1sndGFiaW5kZW50J10gPSAnRWluciZ1dW1sO2NrZW4nOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnTGVlcnplaWNoZW4gZWluZiZ1dW1sO2dlbic7CiRsYW5nWyd0YWJzaGlmdCddID0gJ1NoaWZ0IG5hY2ggcmVjaHRzLCBTaGlmdC1UQUIgdmVyc2NoaWVidCBzaWNoIG5hY2ggbGlua3MnOwokbGFuZ1sndGFic2l6ZSddID0gJ0dyJm91bWw7JnN6bGlnO2UgZGVyIFJlZ2lzdGVya2FydGVuJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ1p1cyZhdW1sO3R6ZSB6dXIgQ29kZU1pcnJvci1DU1MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWUgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2FzIG1hY2h0IGRpZXNlcyBNb2R1bD88L2gzPg0KPHA+RGFzIENvZGVNaXJyb3ItTW9kdWwgaXN0IGVpbiBFZGl0b3IgbWl0IFN5bnRheGhlcnZvcmhlYnVuZywgbWl0IGRlbSBTaWUgZGllIEluaGFsdGUsIGRpZSBUZW1wbGF0ZXMgdW5kIGRpZSBTdHlsZXNoZWV0cyBiZWFyYmVpdGVuIGsmb3VtbDtubmVuLiBEYXMgTW9kdWwga2FubiBzb3dvaGwgZGllIFdZU0lXWUctRWRpdG9yZW4gZXJzZXR6ZW4gYWxzIGF1Y2ggc2VwYXJhdCB6dW0gQmVhcmJlaXRlbiB2b24gVGVtcGxhdGVzIHVuZCBTdHlsZXNoZWV0cyB2ZXJ3ZW5kZXQgd2VyZGVuICh1bnRlcnN0JnV1bWw7dHp0IGFiIENNU01TLVZlcnNpb24gMS4xKS48L3A+DQo8aDM+V2llIHdpcmQgZXMgZWluZ2VzZXR6dD88L2gzPg0KPHA+SW5zdGFsbGllcmVuIFNpZSBkYXMgTW9kdWwgdW5kIGFrdGl2aWVyZW4gU2llIGVzIGFuc2NobGllJnN6bGlnO2VuZCBpbiBkZW4gYmVudXR6ZXJzcGV6aWZpc2NoZW4gRWluc3RlbGx1bmdlbi48L3A+DQo8cD5CZWFjaHRlbiBTaWUsIGRhc3MgU2llIGFiIENNU01TLVZlcnNpb24gMS4xIHVuZCBoJm91bWw7aGVyIENvZGVNaXJyb3Igc293b2hsIGFscyBXWVNJV1lHLUVkaXRvciBhbHMgYXVjaCBhbHMgRWRpdG9yIG1pdCBTeW50YXhoZXJ2b3JoZWJ1bmcgYXVzdyZhdW1sO2hsZW4gayZvdW1sO25uZW4uPC9wPic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNDQyMzIzODEuMTMyNjgzMjc5NS4xMzI2ODMyNzk1LjEzMjY4MzI3OTUuMSc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMjY4MzI3OTUuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/es_ES.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvciBkZSByZXNhbHRhZG8gZGUgc2ludGF4aXMgQ29kZU1pcnJvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0VsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgZnVlIHNhdGlzZmFjdG9yaWFtZW50ZSBpbnN0YWxhZG8nOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtTZSBuZWNlc2l0YSBlbCBwZXJtaXNvIGRlICYjMDM5OyVzJiMwMzk7IHBhcmEgcmVhbGl6YXIgZXN0YSBmdW5jaSZhbXA7b2FjdXRlO24uJzsKJGxhbmdbJ3NldHRpbmdzdGFiJ10gPSAnQWp1c3Rlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXIgYWp1c3Rlcyc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnQWp1c3RlcyBndWFyZGFkb3MnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdQcnVlYmEgZGUgc2ludGF4aXMgSFRNTCc7CiRsYW5nWydjc3N0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIENTUyc7CiRsYW5nWydwaHB0ZXN0J10gPSAnUHJ1ZWJhIGRlIHNpbnRheGlzIFBIUCc7CiRsYW5nWydleGFtcGxlc3ludGF4J10gPSAnU3ludGF4aXMgdXNhZGEgcGFyYSBwcm9iYXInOwokbGFuZ1snY2hhbmdlJ10gPSAnQ2FtYmlhci4uLic7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdNb3N0YXIgZWwgbiZhbXA7dWFjdXRlO21lcm8gZGUgbCZhbXA7aWFjdXRlO25lYXMnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnQXV0by1hanVzdGFyIGxpbmVhcyBsYXJnYXMnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+UXUmYW1wO2VhY3V0ZTsgaGFjZSBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KPGJyLz4NCkVsIG0mYW1wO29hY3V0ZTtkdWxvIENvZGVNaXJyb3IgbGUgcGVybWl0ZSBlZGl0YXIgY29udGVuaWRvLCBwbGFudGlsbGFzIHkgaG9qYXMgZGUgZXN0aWxvIHVzYW5kbyB1biBlZGl0b3IgZGUgcmVzYWx0YWRvIGRlIHNpbnRheGlzIGRlbnRybyBkZSBzdSBuYXZlZ2Fkb3IuDQpFc3RlIHRhbWJpdSZhbXA7ZWFjdXRlO24gcHVlZGUgIHJlZW1wbGF6YXIgZWwgbSZhbXA7b2FjdXRlO2R1bG8gZGUgd3lzaXd5ZywgeSBhY3R1YXIgc29sbyBwYXJhIGVkaWNpJmFtcDtvYWN1dGU7biBkZSBwbGFudGlsbGFzL2hvamFzIGRlIGVzdGlsbyB0ZW1wbGF0ZS9zdHlsZXNoZWV0ICAoc29sbyBzb3BvcnRhZG8gZW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+QyZhbXA7b2FjdXRlO21vIHVzbyBlc3RlIG0mYW1wO29hY3V0ZTtkdWxvPzwvc3Ryb25nPg0KVXN0ZWQgc2ltcGxlbWVudGUgbG8gaW5zdGFsYSwgeSBsbyBzZWxlY2Npb25hIGVuIGxhcyBwcmVmZXJlY2lhcyBkZSBsYSBhZG1pbmlzdHJhY2kmYW1wO29hY3V0ZTtuLiBOb3RlIHF1ZSwgc2kgdXN0ZWQgdXNhIENNU21zIDEuMSBvIHN1cGVyaW9yIGEgZXN0ZSB1c3RlZCBwdWVkZSBzZWxlY2Npb25hciBDb2RlTWlycm9yIGp1bnRvIGNvbiBXWVNJV1lHIHBhcmEgZWwgcmVzYWx0YWRvIGRlIHNpbnRheGlzLic7CiRsYW5nWydxY2EnXSA9ICdQMC0yMDk2MDU0MzcwLTEyNTk4MDM2MTU5MzknOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4yMzg2MDY4NTQuMTI1OTgwNDM2OC4xMjY3NjUyNDU5LjEyNjc2NTk3NzMuNTcnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjY3NjUyNDU5LjU2LjI4LnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L2luZGV4LnBocC90b3BpYywxOTkyOS4wLmh0bWx8dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRldXIgZGUgc3ludGF4ZSBjb2xvciZlYWN1dGU7IENvZGVNaXJyb3InOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdMZSBtb2R1bGUgQ29kZU1pcnJvciBhICZlYWN1dGU7dCZlYWN1dGU7IGluc3RhbGwmZWFjdXRlOyBhdmVjIHN1Y2MmZWdyYXZlO3MnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtWb3VzIGF2ZXogYmVzb2luIGRlIGwmIzAzOTthdXRvcmlzYXRpb24gJiMwMzk7JXMmIzAzOTsgIHBvdXIgY2V0dGUgZm9uY3Rpb24nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYXV2ZWdhcmRlciBsZXMgcGFyYW0mZWdyYXZlO3RyZXMnOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ1BhcmFtJmVncmF2ZTt0cmVzIHNhdXZlZ2FyZCZlYWN1dGU7cyc7CiRsYW5nWydodG1sdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBIVE1MICc7CiRsYW5nWydjc3N0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIENTUyAnOwokbGFuZ1sncGhwdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIEphdmFTY3JpcHQnOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnQWZmaWNoZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyc7CiRsYW5nWydhbGxvd2Z1bGxzY3JlZW4nXSA9ICdBdXRvcmlzZXIgbGUgbW9kZSBwbGVpbiAmZWFjdXRlO2NyYW4gKEYxMSknOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQWZmaWNoZXIgbGVzIGNvcnJlc3BvbmRhbmNlcyBkZSBwYXJlbnRoJmVncmF2ZTtzZXMnOwokbGFuZ1sndGFiaGFuZGxpbmcnXSA9ICdDb21tZW50IGcmZWFjdXRlO3JlciBsZSBjbGljIHN1ciBsYSB0b3VjaGUgVEFCJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYWlzc2VyIGxlIG5hdmlnYXRldXIgZCZlYWN1dGU7Y2lkZXInOwokbGFuZ1sndGFiaW5kZW50J10gPSAnSW5kZW50ZXInOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnSW5zJmVhY3V0ZTtyZXIgZGVzIGVzcGFjZXMnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTaGlmdCB2ZXJzIGxhIGRyb2l0ZSwgc2hpZnQtVEFCIHNoaWZ0cyB2ZXJzIGxhIGdhdWNoZSc7CiRsYW5nWyd0YWJzaXplJ10gPSAnVGFpbGxlIGRlcyBvbmdsZXRzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0Fqb3V0cyAmYWdyYXZlOyBsYSBmZXVpbGxlIGRlIHN0eWxlIGRlIENvZGVNaXJyb3IuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGgmZWdyYXZlO21lJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPlF1ZSBmYWl0IGNlIG1vZHVsZSZuYnNwOz88L3N0cm9uZz4NCjxici8+DQpMZSBtb2R1bGUgQ29kZU1pcnJvciB2b3VzIHBlcm1ldCBkZSBtb2RpZmllciBsZSBjb250ZW51LCBsZXMgZ2FiYXJpdHMgZXQgbGVzIGZldWlsbGVzIGRlIHN0eWxlIGVuIHV0aWxpc2FudCB1biAmZWFjdXRlO2RpdGV1ciBkZSBzeW50YXhlIGNvbG9yJmVhY3V0ZTsgbCYjMDM5O2ludCZlYWN1dGU7cmlldXIgZGUgdm90cmUgbmF2aWdhdGV1ci4gDQpJbCBwZXV0IGF1c3NpIGJpZW4gcmVtcGxhY2VyIGwmIzAzOTsmZWFjdXRlO2RpdGV1ciBXWVNJV1lHLCBldCBwZXJtZXR0cmUgZGUgdmlzdWFsaXNlci0mZWFjdXRlO2RpdGVyIGxlcyBnYWJhcml0cywgZmV1aWxsZXMgZGUgc3R5bGUuIChVbmlxdWVtZW50IHBvdXIgdmVyc2lvbiBDTVNNUyAxLjEgb3UgcGx1cykNCjxici8+PGJyLz4NCjxzdHJvbmc+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXImbmJzcDs/PC9zdHJvbmc+PGJyLz4NCklsIHZvdXMgc3VmZml0IGRlIGwmIzAzOTtpbnN0YWxsZXIsIGV0IGRhbnMgJnF1b3Q7TWVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgLyBQciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzIGRlIGwmIzAzOTt1dGlsaXNhdGV1ciZxdW90OyBjaG9pc2lyIGF2ZWMgbGUgbWVudSBkJmVhY3V0ZTtyb3VsYW50IENvZGVNaXJyb3IgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9ubmVyIGxhIHN5bnRheGUgc3VybGlnbiZlYWN1dGU7ZSZxdW90OyBldC9vdSAmZWFjdXRlO3ZlbnR1ZWxsZW1lbnQgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9uIGR1IFdZU0lXWUcgJmFncmF2ZTsgdXRpbGlzZXImcXVvdDsuDQonOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGFrc2ZyZW1oZXZpbmdzcmVkaWdlcmVyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQ29kZU1pcnJvciBtb2R1bGVuIGJsZSBpbnN0YWxsZXJ0JzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnRHUgdHJlbmdlciAmIzAzOTslcyYjMDM5OyB0aWxsYXRlbHNlIGZvciAmYXJpbmc7IHV0ZiZvc2xhc2g7cmUgZGVubmUgZnVua3Nqb25lbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ0xhZ3JlIGlubnN0aWxsaW5nZXInOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0lubnN0aWxsaW5nZXIgbGFncmV0JzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAnSFRNTCBzeW50YWtzIHRlc3QnOwokbGFuZ1snY3NzdGVzdCddID0gJ0NTUyBzeW50YWtzIHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YWtzIHRlc3QnOwokbGFuZ1snanN0ZXN0J10gPSAnSmF2YVNjcmlwdCBzeW50YWtzdGVzdCc7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdWaXMgbGluamVudW1tZXInOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlza2UgcGFyYW50ZXNlcic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ0h2b3JkYW4gc2thbCB0cnlrayBhdiBUQUItdGFzdGVuIGgmYXJpbmc7bnRlcmVzJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYSBuZXR0bGVzZXJlbiBhdmdqJm9zbGFzaDtyZSc7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdMYWcgaW5ucnlrayc7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdTZXR0IGlubiBtZWxsb21yb20nOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTZW5kZXIgdGlsIGgmb3NsYXNoO3lyZSwgc2hpZnQtVEFCIHNlbmRlciB0aWwgdmVuc3RyZSc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdDb2RlTWlycm9yLWNzcyB0aWxsZWdnLic7CiRsYW5nWyd0aGVtZSddID0gJ1RlbWEnOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPzwvc3Ryb25nPg0KPGJyLz4NClRoZSBDb2RlTWlycm9yIG1vZHVsZSBhbGxvd3MgeW91IHRvIGVkaXQgY29udGVudCwgdGVtcGxhdGVzIGFuZCBzdHlsZXNoZWV0cyB1c2luZyBhIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IgaW5zaWRlIHlvdXIgYnJvd3Nlci4NCkl0IGNhbiBib3RoIHJlcGxhY2UgYSB3eXNpd3lnLW1vZHVsZSwgYW5kIGFjdCBzdGFuZGFsb25lIGZvciB0ZW1wbGF0ZS9zdHlsZXNoZWV0IGVkaXRpbmcgKG9ubHkgc3VwcG9ydGVkIGluIENNU21zIDEuMSspDQo8YnIvPjxici8+DQo8c3Ryb25nPkhvdyBkbyBJIHVzZSB0aGlzIG1vZHVsZT88L3N0cm9uZz4NCllvdSBzaW1wbHkgaW5zdGFsbCBpdCwgYW5kIGNob29zZSBpdCBpbiB5b3VyIGFkbWluIHVzZXIgcHJlZmVyZW5jZXMuIE5vdGUsIHRoYXQgaWYgeW91IHVzZSBDTVNtcyAxLjEgb3IgYWJvdmUgeW91IGNhbg0Kc2VsZWN0IENvZGVBcmVhIGJvdGggYXMgYSBXWVNJV1lHIGFuZCBhcyBhIHN5bnRheCBoaWdobGlnaHRpbmcgZWRpdG9yLic7CiRsYW5nWydxY2EnXSA9ICdQMC01MzY4NDkxMTUtMTMwNzk4MzQ5NTIxMCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEwMDU2MDYwODQuMTMwOTA0NzQ3Mi4xMzA5MDQ3NDcyLjEzMDkxMjIyMjEuMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDc5ODM0OTUuMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuNS4xMC4xMzA5MTIyMjIxJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgU3ludGF4aGlnaGxpZ2h0aW5nIEVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RlIENvZGVNaXJyb3IgTW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1UgaGVlZnQgJiMwMzk7JXMmIzAzOTsgcmVjaHRlbiBub2RpZyBvbSBkZXplIGZ1bmN0aWUgdGUgZ2VicnVpa2VuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4gb3BzbGFhbic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5zdGVsbGluZ2VuIG9wZ2VzbGFnZW4nOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIFN5bnRheCBUZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MgU3ludGF4IFRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBTeW50YXggVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IFN5bnRheCBUZXN0JzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1JlZ2VsbnVtbWVycyB0b25lbic7CiRsYW5nWydhbGxvd2Z1bGxzY3JlZW4nXSA9ICdTdGEgZnVsbHNjcmVlbiBtb2R1cyB0b2UgKEYxMSknOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlzY2ggYmlqIGVsa2FhciBob3JlbmRlIHRhZ3Mga2xldXJlbic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ1dhdCB0ZSBkb2VuIGJpaiBoZXQgaW5kcnVra2VuIHZhbiBUQUIgdG9ldHMnOwokbGFuZ1sndGFiZGVmYXVsdCddID0gJ0xhYXQgZGUgYnJvd3NlciBoZXQgYmVwYWxlbic7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdNYWFrIHJlZ2VsIGluc3ByaW5naW5nJzsKJGxhbmdbJ3RhYnNwYWNlcyddID0gJ1ZvZWcgc3BhdGllcyB0b2UnOwokbGFuZ1sndGFic2hpZnQnXSA9ICdWZXJwbGFhdHN0IG5hYXIgcmVjaHRzLCBzaGlmdC1UQUIgdmVycGxhYXRzdCBuYWFyIGxpbmtzJzsKJGxhbmdbJ3RhYnNpemUnXSA9ICdBZm1ldGluZ2VuIHZhbiBkZSB0YWJzJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0FhbnBhc3NpbmdlbiBhYW4gZGUgQ29kZU1pcnJvci1jc3MuJzsKJGxhbmdbJ3RoZW1lJ10gPSAnVGhlbWUgJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz8gPC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTIzNTc2ODgzOC0xMzE4ODU5OTM1NzY1JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuNjc0Mjg5OTc4LjEzMjcyNTgyMTcuMTMyNzI1ODIxNy4xMzI3MjU4MjE3LjEnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMzI3MjU4MjE3LjEuMS51dG1jY249KGRpcmVjdCl8dXRtY3NyPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/ro_RO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRvcnVsIENvZGVNaXJyb3IgY3UgZXZpZGVudGlhdG9yIGRlIHNpbnRheGEnOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdNb2R1bHVsIENvZGVNaXJyb3IgYSBmb3N0IGluc3RhbGF0IGN1IHN1Y2Nlcyc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ0F2ZXRpIG5ldm9pZSBkZSBwZXJtaXNpdW5lYSAmIzAzOTslcyYjMDM5OyBwZW50cnUgYWNlYXN0YSBmdW5jdGllLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ1NldGFyaSc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYWx2YXJlIHNldGFyaSc7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnU2V0YXJpbGUgYXUgZm9zdCBzYWx2YXRlJzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAndGVzdCBzaW50YXhhIEhUTUwnOwokbGFuZ1snY3NzdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBDU1MnOwokbGFuZ1sncGhwdGVzdCddID0gJ3Rlc3Qgc2ludGF4YSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAndGVzdCBzaW50YXhhIEphdmFTY3JpcHQnOwokbGFuZ1snZXhhbXBsZXN5bnRheCddID0gJ1N5bnRheCB0byB0ZXN0IGN1JzsKJGxhbmdbJ2NoYW5nZSddID0gJ1NjaGltYmEnOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnQWZpc2FyZSBudW1lcmUgZGUgbGluaWUnOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnU3RyYW5nZSBsaW5paWxlIGx1bmdpJzsKJGxhbmdbJ2F1dG9tYXRjaHBhcmVucyddID0gJ0F1dG9wb3RyaXZpcmUgcGFyYW50ZXplJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPkNlIGZhY2UgYWNlc3QgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KTW9kdWx1bCBDb2RlTWlycm9yIHZhIHBlcm1pdGUgc2EgZWRpdGF0aSBjb250aW51dCwgdGVtcGxhdGUtdXJpIHNpIHN0eWxlc2hlZXQtdXJpIGZvbG9zaW5kIHVuIGVkaXRvciBjdSBldmlkZW50aWF0b3IgZGUgc2ludGF4YSBkaW4gYnJvd3Nlci4NClBvYXRlIGlubG9jdWkgYXRhdCB1biBtb2R1bCB3eXNpd3lnLCBzaSBzYSBmdW5jdGlvbmV6ZSBkZSBzaW5lIHN0YXRhdG9yIHBlbnRydSBlZGl0YXJlIGRlIHRlbXBsYXRlL3N0eWxlc2hlZXQuDQo8YnIvPjxici8+DQo8c3Ryb25nPkN1bSBzZSBmb2xvc2VzZSBhY2VzdCBtb2R1bD88L3N0cm9uZz4NCkluc3RhbGF0aS1sLCBzaSBhbGVnZXRpLWwgaW4gcHJlZmVyaW50ZWxlIGRlIHV0aWxpemF0b3IgZGluIGFkbWluLic7CiRsYW5nWydxY2EnXSA9ICdQMC0xODM4MjE1MDQzLTEyODI4MDc1MzM5MzQnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjgyODA3OTcyLjEuMi51dG1jc3I9Z29vZ2xlfHV0bWNjbj0ob3JnYW5pYyl8dXRtY21kPW9yZ2FuaWN8dXRtY3RyPWNtc21zJzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTE5MTg3MzgxNy4xMjgyODA3NTM0LjEyODI4MDc1MzQuMTI4MjgwNzUzNC4xJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4xMi45LjEyODI4MDc2MTUzNjgnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0NvZGVNaXJyb3ItbW9kdWxlbiBpbnN0YWxsZXJhZGVzIHV0YW4gbiZhcmluZztncmEgcHJvYmxlbSc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJyYjMDM5O1lvdSBuZWVkIHRoZSAmIzAzOTslcyYjMDM5OyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXInOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnU3BhcmEgaW5zdCZhdW1sO2xsbmluZ2FyJzsKJGxhbmdbJ3NldHRpbmdzc2F2ZWQnXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXIgc3BhcmFkZXMnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1Mgc3ludGF4IHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YXggdGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IHN5bnRheCB0ZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YXggYXR0IHRlc3RhIG1lZCc7CiRsYW5nWydjaGFuZ2UnXSA9ICcmQXVtbDtuZHJhLi4uJzsKJGxhbmdbJ3Nob3dsaW5lbnVtYmVycyddID0gJ1Zpc2EgcmFkbnVtbWVyJzsKJGxhbmdbJ3RleHR3cmFwcGluZyddID0gJ1dyYXAgbG9uZyBsaW5lcyc7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5XaGF0IGRvZXMgdGhpcyBtb2R1bGUgZG8/PC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTEyMzE4NzIzMjUtMTI2OTM1OTMyMTE5NSc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjEyNjk3Nzc2MDMuMTI2OTM1OTM0Mi4xMjY5MzU5MzQyLjEyNjkzNTkzNDIuMSc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzLjEuMTAuMTI2OTM1OTM0Mic7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI2OTM1OTM0Mi4xLjEudXRtY3NyPWdvb2dsZXx1dG1jY249KG9yZ2FuaWMpfHV0bWNtZD1vcmdhbmljfHV0bWN0cj1jbXNtcyc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKaWYgKCFmdW5jdGlvbl9leGlzdHMoImNtc21zIikpIGV4aXQ7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInVzZWF1dG9jb21wbGV0ZSIsMSk7CiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsMCkKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygiY21zbXMiKSkgZXhpdDsKICAvL1JlbW92ZSBvbGQgc3BlY2lmaWsgcGVybWlzc2lvbgogICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCJtb2RpZnllZGl0YXJlYXNldHRpbmdzIik7Cj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT4yLjIuMyAtIFVwZGF0ZWQgdG8gQ00gMi4yLjM8L2xpPgogIDxsaT4yLjIuMiAtIFVwZGF0ZWQgdG8gQ00gMi4yLjE8L2xpPgogIDxsaT4yLjIuMSAtIFVwZGF0ZWQgdG8gQ00gMi4yLjAsIGFkZGVkIHRhYi13aWR0aCBzZXR0aW5nPC9saT4KICA8bGk+Mi4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMTUsIGFkZGVkIG9wdGlvbmFsIGZ1bGxzY3JlZW4gbW9kZTwvbGk+CiAgPGxpPjIuMS4yIC0gVXBkYXRlZCB0byBDTSAyLjEyLCBjbGVhbmVyIHdheSBvZiBzYXZpbmcgZWRpdG9yIGNvbnRlbnQgdG8gdGV4dGFyZWE8L2xpPgogIDxsaT4yLjEuMCAtIFVwZGF0ZWQgdG8gQ00gMi4xLjEsIG9uY2UgYWdhaW4gY2hhbmdlIHRlc3Rtb2RlLi4uIDwvbGk+CiAgPGxpPjIuMC4xIC0gVXBkYXRlZCB0byBDTSAyLjAuMTwvbGk+CiAgPGxpPjIuMCAtIFVwZGF0ZWQgdG8gQ00gMi4wIGFuZCByZXdvcmtlZCBqdXN0IGFib3V0IGV2ZXJ5dGhpbmcgdG8gbWFrZSB0aGlzIHdvcms8L2xpPgogIDxsaT4wLjEuOSAtIFVwZGF0ZWQgdG8gQ00gMC45MzwvbGk+CiAgPGxpPjAuMS44IC0gVXBkYXRlZCB0byBDTSAwLjksIGFkZGVkIG9wdGlvbiBvbiBob3cgdG8gaGFuZGxlIFRBQjwvbGk+CiAgPGxpPjAuMS43IC0gVXBkYXRlZCB0byBDTSAwLjgwPC9saT4KICA8bGk+MC4xLjYgLSBVcGRhdGVkIHRvIENNIDAuNzAsIEFkZGVkIG9wdGlvbiB0byBtYXRjaCBwYXJlbnRoZXNpczwvbGk+CiAgPGxpPjAuMS41IC0gVXBkYXRlZCB0byBDTSAwLjY2LCByZW1vdmVkIGEgc3RyYW5nZSBcbiBjaGFyIGZyb20gaGVhZGVyb3V0cHV0LCBtYWRlIHRhYmJpbmcgd29yazwvbGk+CiAgPGxpPjAuMS40IC0gRml4ZWQgQ1BVIGhvZ2dpbmcgcHJvYmxlbXMgYnkgcmV3cml0aW5nIHRlc3RhcmVhLWNvZGU8L2xpPgogIDxsaT4wLjEuMyAtIFVwZGF0ZWQgdG8gQ00gMC42NSwgYWRkZWQgb3B0aW9uIHRvIHRvZ2dsZSB3b3Jkd3JhcDwvbGk+CiAgPGxpPjAuMS4yIC0gVXBkYXRlZCB0byBDTSAwLjYzPC9saT4KICA8bGk+MC4xLjEgLSBVcGRhdGVkIHRvIENNIDAuNjIsIGZpeGVkIGV4YW1wbGVzIGFuZCBwcm9iYWJseSBmdW5jdGlvbmFsaXR5IGFzIHdlbGw8L2xpPgogIDxsaT4wLjEuMCAtIEluaXRpYWwgcmVsZWFzZSA8L2xpPgo8L3VsPg==]]></data>
	</file>
	<file>
	  <filename>/templates/codemirror2area.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjazsiID4KPHRleHRhcmVhIGlkPSJ7JHRleHRhcmVhaWR9IiBuYW1lPSJ7JHRleHRhcmVhbmFtZX0iPnskY29udGVudH08L3RleHRhcmVhPgo8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCiAgdmFyIHskdGV4dGFyZWFpZH0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgneyR0ZXh0YXJlYWlkfScpOwogIHZhciBjb2RlbWlycm9yZWRpdG9yeyRpZH0gPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSh7JHRleHRhcmVhaWR9LCB7bGl0ZXJhbH17ey9saXRlcmFsfQoKICAgIG1vZGUgOiAneyRtb2RlfScsCiAgICBpbmRlbnRVbml0IDogeyR0YWJzaXplfSwKICAgIGxpbmVOdW1iZXJzOiB7JGxpbmVudW1iZXJzfSwKCiAgICB0YWJNb2RlIDogJ3skdGFiaGFuZGxpbmd9JywKICAgIHRoZW1lIDogJ3skdGhlbWV9JywKICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICB7aWYgJGFsbG93ZnVsbHNjcmVlbj09JzEnfQogIHtsaXRlcmFsfQogICxvbktleUV2ZW50OiBmdW5jdGlvbihpLCBlKSB7CgogICAgICAgICAgICBpZiAoKGUua2V5Q29kZSA9PSAxMjIgfHwgZS5rZXlDb2RlID09IDI3KSAmJiBlLnR5cGUgPT0gJ2tleWRvd24nKSB7CiAgICAgICAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHRvZ2dsZUZ1bGxzY3JlZW5FZGl0aW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICB7L2xpdGVyYWx9CiAgey9pZn0KCiAge2xpdGVyYWx9fSk7ey9saXRlcmFsfQo8L3NjcmlwdD4KCg==]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHNob3dsaW5lbnVtYmVyc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2hvd2xpbmVudW1iZXJzaW5wdXR9PC9wPgoJPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRhbGxvd2Z1bGxzY3JlZW50ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGFsbG93ZnVsbHNjcmVlbmlucHV0fTwvcD4KCTwvZGl2Pgp7KjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRleHR3cmFwcGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGV4dHdyYXBwaW5naW5wdXR9PC9wPgoJPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskYXV0b21hdGNocGFyZW5zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRhdXRvbWF0Y2hwYXJlbnNpbnB1dH08L3A+Cgk8L2Rpdj4KKn0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0YWJoYW5kbGluZ3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskdGFiaGFuZGxpbmdpbnB1dH08L3A+Cgk8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyR0YWJzaXpldGV4dH08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHRhYnNpemVpbnB1dH08L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskY3NzYWRkaXRpb25zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjc3NhZGRpdGlvbnNpbnB1dH08L3A+Cgk8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRoZW1ldGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0aGVtZWlucHV0fTwvcD4KCTwvZGl2PgoKCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXR9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
</module>
