<?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.0.1</version>
  <mincmsversion>1.9</mincmsversion>
	<help><![CDATA[PHN0cm9uZz5IdmFkIGcmb3NsYXNoO3IgZGV0dGUgbW9kdWw/PC9zdHJvbmc+DQo8YnIvPg0KQ29kZU1pcnJvci1tb2R1bGVzIGdpdmVyIGRpZyBtdWxpZ2hlZCBmb3IgYXQgcmVkaWdlcmUgaW5kaG9sZCwgc2thYmVsb25lciBvZyBzdHlsZXNoZWV0cyB2ZWQgaGomYWVsaWc7bHAgYWYgc3ludGFrcy1mcmVtaCZhZWxpZzt2ZW5kZSByZWRpZ2VyaW5nIGkgZGluIGJyb3dzZXIuDQo8YnIvPjxici8+DQo8c3Ryb25nPkh2b3JkYW4gYnJ1Z2VyIGplZyBkZXR0ZSBtb2R1bD88L3N0cm9uZz4NCkR1IGluc3RhbGxlcmVyIGRldCBvZyB2JmFlbGlnO2xnZXIgZGV0IGkgZGluZSBicnVnZXIgaW5kc3RpbGxpbmdlciBmb3IgYWRtaW5zaXRyYXRpb25lbi4gQmVtJmFlbGlnO3JrIGF0IGR1IGthbiB2JmFlbGlnO2xnZSBhdCBiZW55dHRlIGRldCBiJmFyaW5nO2RlIHNvbSBzeW50YWtzIGZyZW1oJmFlbGlnO3ZlciBvZyBXWVNJV1lHLjxoMz5QYXJhbWV0cmU8L2gzPjx1bD48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBsYW5nPSJlbl9VUyIgLSBQYXJhbWV0cmV0IGFuZ2l2ZXIgaHZpbGtldCBzcHJvZyBkZXIgc2thbCBicnVnZXMgdGlsIHZpc25pbmcgZm9yIGJlcyZvc2xhc2g7Z2VuZGUuIElra2UgYWxsZSBtb2R1bGVyIHVuZGVyc3Qmb3NsYXNoO3R0ZXIgZWxsZXIgYmVoJm9zbGFzaDt2ZXIgZGV0dGUuPC9saT48L3VsPg==]]></help>
	<about><![CDATA[PGJyIC8+TGF2ZXQgYWY6IE1vcnRlbiBQb3Vsc2VuICZsdDsmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0OyZndDs8YnIgLz48YnIgLz5WZXJzaW9uOiAyLjAuMTxiciAvPjxiciAvPkhpc3RvcmlrIG92ZXIgJmFlbGlnO25kcmluZ2VyOjxiciAvPjx1bD4KICA8bGk+Mi4wLjEgLSBVcGRhdGVkIHRvIENNIDIuMC4xPC9saT4KICA8bGk+Mi4wIC0gVXBkYXRlZCB0byBDTSAyLjAgYW5kIHJld29ya2VkIGp1c3QgYWJvdXQgZXZlcnl0aGluZyB0byBtYWtlIHRoaXMgd29yazwvbGk+CiAgPGxpPjAuMS45IC0gVXBkYXRlZCB0byBDTSAwLjkzPC9saT4KICA8bGk+MC4xLjggLSBVcGRhdGVkIHRvIENNIDAuOSwgYWRkZWQgb3B0aW9uIG9uIGhvdyB0byBoYW5kbGUgVEFCPC9saT4KICA8bGk+MC4xLjcgLSBVcGRhdGVkIHRvIENNIDAuODA8L2xpPgogIDxsaT4wLjEuNiAtIFVwZGF0ZWQgdG8gQ00gMC43MCwgQWRkZWQgb3B0aW9uIHRvIG1hdGNoIHBhcmVudGhlc2lzPC9saT4KICA8bGk+MC4xLjUgLSBVcGRhdGVkIHRvIENNIDAuNjYsIHJlbW92ZWQgYSBzdHJhbmdlIFxuIGNoYXIgZnJvbSBoZWFkZXJvdXRwdXQsIG1hZGUgdGFiYmluZyB3b3JrPC9saT4KICA8bGk+MC4xLjQgLSBGaXhlZCBDUFUgaG9nZ2luZyBwcm9ibGVtcyBieSByZXdyaXRpbmcgdGVzdGFyZWEtY29kZTwvbGk+CiAgPGxpPjAuMS4zIC0gVXBkYXRlZCB0byBDTSAwLjY1LCBhZGRlZCBvcHRpb24gdG8gdG9nZ2xlIHdvcmR3cmFwPC9saT4KICA8bGk+MC4xLjIgLSBVcGRhdGVkIHRvIENNIDAuNjM8L2xpPgogIDxsaT4wLjEuMSAtIFVwZGF0ZWQgdG8gQ00gMC42MiwgZml4ZWQgZXhhbXBsZXMgYW5kIHByb2JhYmx5IGZ1bmN0aW9uYWxpdHkgYXMgd2VsbDwvbGk+CiAgPGxpPjAuMS4wIC0gSW5pdGlhbCByZWxlYXNlIDwvbGk+CjwvdWw+PGJyIC8+]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghaXNzZXQoJGdDbXMpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYgKGlzc2V0KCRwYXJhbXNbImV4YW1wbGVzeW50YXgiXSkpIHsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiZXhhbXBsZXN5bnRheCIsJHBhcmFtc1siZXhhbXBsZXN5bnRheCJdKTsKfQoKZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlcigic2V0dGluZ3MiLCR0aGlzLT5MYW5nKCJzZXR0aW5nc3RhYiIpKTsKCmVjaG8gJHRoaXMtPkVuZFRhYkhlYWRlcnMoKTsKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgoKZWNobyAkdGhpcy0+U3RhcnRUYWIoInNldHRpbmdzIik7CiR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsICdzYXZlc2V0dGluZ3MnLCAkcmV0dXJuaWQpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc3RleHQnLCAkdGhpcy0+TGFuZygic2hvd2xpbmVudW1iZXJzIikpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Nob3dsaW5lbnVtYmVyc2lucHV0JywgJHRoaXMtPkNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCJzaG93bGluZW51bWJlcnMiLDEsJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsMSkpKTsKCiR0aGlzLT5zbWFydHktPmFzc2lnbignY3NzYWRkaXRpb25zdGV4dCcsICR0aGlzLT5MYW5nKCJjc3NhZGRpdGlvbnMiKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbignY3NzYWRkaXRpb25zaW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwiY3NzYWRkaXRpb25zIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgiY3NzYWRkaXRpb25zIiwkdGhpcy0+X2RlZmF1bHRjc3NhZGRpdGlvbnMpLCI2MCIpKTsKCi8qJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZXh0d3JhcHBpbmd0ZXh0JywgJHRoaXMtPkxhbmcoInRleHR3cmFwcGluZyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0ZXh0d3JhcHBpbmdpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwidGV4dHdyYXBwaW5nIiwxLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLDEpKSk7CiovCi8qJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnN0ZXh0JywgJHRoaXMtPkxhbmcoImF1dG9tYXRjaHBhcmVucyIpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnNpbnB1dCcsICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwiYXV0b21hdGNocGFyZW5zIiwiMSIsJHRoaXMtPkdldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsIjAiKSkpOwoqLwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5ndGV4dCcsICR0aGlzLT5MYW5nKCJ0YWJoYW5kbGluZyIpKTsKJHRhYmZ1bmN0aW9ucz1hcnJheSgKICAkdGhpcy0+TGFuZygidGFiZGVmYXVsdCIpPT4iZGVmYXVsdCIsCiAgJHRoaXMtPkxhbmcoInRhYmluZGVudCIpPT4iaW5kZW50IiwKICAkdGhpcy0+TGFuZygidGFic3BhY2VzIik9PiJjbGFzc2ljIiwKICAkdGhpcy0+TGFuZygidGFic2hpZnQiKT0+InNoaWZ0IgopOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5naW5wdXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93bigkaWQsInRhYmhhbmRsaW5nIiwkdGFiZnVuY3Rpb25zLC0xLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0YWJoYW5kbGluZyIsImluZGVudCIpKSk7CgokdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc2F2ZXNldHRpbmdzJykpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnc2V0dGluZ3MudHBsJyk7CgplY2hvICR0aGlzLT5FbmRUYWIoKTsKZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwoKJGNvbnRlbnQ9IiI7CnN3aXRjaCAoJHRoaXMtPkdldFByZWZlcmVuY2UoImV4YW1wbGVzeW50YXgiLCJodG1sIikpIHsKICBjYXNlICJodG1sIiA6IHsKICAgICRjb250ZW50PSIKPGh0bWw+CiAgPGhlYWQ+CiAgICA8dGl0bGU+VGVzdGluZyBodG1sLXN5bnRheDwvdGl0bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgQW5kIGRvaW5nIGFic29sdXRlbHkgbm90aGluZyBlbHNlCiAgPC9ib2R5Pgo8L2h0bWw+CiI7CiAgYnJlYWs7CiAgfQogIGNhc2UgImNzcyIgOiB7CiAgICAkY29udGVudD0iCi50ZXN0Y3NzIHsKICBmb250LXdlaWdodDpib2xkOwogIGhlaWdodDogMTBweDsKfQoiOwogIGJyZWFrOwogIH0KICBjYXNlICJwaHAiIDogewogICAgJGNvbnRlbnQ9Igo8P3BocAogIGZ1bmN0aW9uIHRlc3RQSFAoXCRzb21lcGFyYW0pIHsKICAgIGVjaG8gJ0RvIHlvdSB0aGluayB0aGlzIGxvb2tzIG5pY2U/JzsKICB9Cj8+CiI7CiAgYnJlYWs7CiAgfQogIGNhc2UgImpzIiA6IHsKICAgICRjb250ZW50PScKZnVuY3Rpb24gbXlqc2Z1bnRpb24ocGFyYW1zKSB7CiAgdmFyIG1zZyA9ICJUaGlzIGphdmFzY3JpcHQgaXMgZmFudGFzdGljISIKICBmb3IgKHZhciBpPTA7IGk8OTk5OTsgaSsrKSB7CiAgICBhbGVydChtc2cpOwogICAgLypUaGlzIG11c3QgYmUgdGhlIG1vc3QgYW5ub3lpbmcgZnVuY3Rpb24gZXZlciEqLwogIH0KICByZXR1cm4gdHJ1ZQp9Cic7CiAgYnJlYWs7CiAgfQp9CgplY2hvICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCJkZWZhdWx0YWRtaW4iKTsKZWNobyAkdGhpcy0+TGFuZygiZXhhbXBsZXN5bnRheCIpLiI6ICI7CiRzeW50YXhlcz1hcnJheSgkdGhpcy0+TGFuZygiaHRtbHRlc3QiKT0+Imh0bWwiLCR0aGlzLT5MYW5nKCJjc3N0ZXN0Iik9PiJjc3MiLCR0aGlzLT5MYW5nKCJwaHB0ZXN0Iik9PiJwaHAiLCR0aGlzLT5MYW5nKCJqc3Rlc3QiKT0+ImpzIik7CmVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJGlkLCJleGFtcGxlc3ludGF4Iiwkc3ludGF4ZXMsLTEsJHRoaXMtPkdldFByZWZlcmVuY2UoImV4YW1wbGVzeW50YXgiLCJodG1sIiksIm9uY2hhbmdlPSd0aGlzLmZvcm0uc3VibWl0KCknIik7Ci8vZWNobyAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCJleGFtcGxlc3VibWl0IiwkdGhpcy0+TGFuZygiY2hhbmdlIikpOwplY2hvICI8YnIvPiI7CmVjaG8gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCRpZCwkY29udGVudCwidGVzdGFyZWExIiwnJywnJywnJywnJywnJywnJywnQ29kZU1pcnJvcicsJHRoaXMtPkdldFByZWZlcmVuY2UoImV4YW1wbGVzeW50YXgiLCJodG1sIikpOwplY2hvICR0aGlzLT5DcmVhdGVGb3JtRW5kKCk7CgoKCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.savesettings.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjbXNtcyIpKSBleGl0OwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSB7CiAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkdGhpcy0+TGFuZygnbmVlZHBlcm1pc3Npb24nLCBhcnJheSgnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSkpOwogIHJldHVybjsKfQoKaWYoaXNzZXQoJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pKSAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwgJHBhcmFtc1sic2hvd2xpbmVudW1iZXJzIl0pOwplbHNlCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsICcwJyk7CgovKmlmKGlzc2V0KCRwYXJhbXNbInRleHR3cmFwcGluZyJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidGV4dHdyYXBwaW5nIiwgJHBhcmFtc1sidGV4dHdyYXBwaW5nIl0pOwplbHNlCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoInRleHR3cmFwcGluZyIsICcwJyk7Ki8KICAKLyppZihpc3NldCgkcGFyYW1zWyJhdXRvbWF0Y2hwYXJlbnMiXSkpCiAgJHRoaXMtPlNldFByZWZlcmVuY2UoImF1dG9tYXRjaHBhcmVucyIsICRwYXJhbXNbImF1dG9tYXRjaHBhcmVucyJdKTsKZWxzZQogICR0aGlzLT5TZXRQcmVmZXJlbmNlKCJhdXRvbWF0Y2hwYXJlbnMiLCAnMCcpOyovCgppZihpc3NldCgkcGFyYW1zWyJ0YWJoYW5kbGluZyJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidGFiaGFuZGxpbmciLCAkcGFyYW1zWyJ0YWJoYW5kbGluZyJdKTsKCmlmKGlzc2V0KCRwYXJhbXNbImNzc2FkZGl0aW9ucyJdKSkKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiY3NzYWRkaXRpb25zIiwgJHBhcmFtc1siY3NzYWRkaXRpb25zIl0pOwoKCiR0aGlzLT5SZWRpcmVjdCgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsYXJyYXkoIm1vZHVsZV9tZXNzYWdlIj0+JHRoaXMtPkxhbmcoInNldHRpbmdzc2F2ZWQiKSwidGFiIj0+InNldHRpbmdzIikpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/CodeMirror.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCiNDTVMgLSBDTVMgTWFkZSBTaW1wbGUNCiMoYykyMDA1LTA2IGJ5IE1vcnRlbiBQb3Vsc2VuIChtb3J0ZW5AcG91bHNlbi5vcmcpDQojVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcNCiMNCiNUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KI2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5DQojdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCiMoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KIw0KI1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KI2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQojTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KI0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuDQojWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UNCiNhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQ0KI0ZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0ENCg0KDQpjbGFzcyBDb2RlTWlycm9yIGV4dGVuZHMgQ01TTW9kdWxlIHsNCgl2YXIgJG5vZWRpdG9ycz0wOw0KCXZhciAkaGVhZGVyaW5mb3NlbnQ9ZmFsc2U7DQogIHZhciAkX2h0bWxhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfamF2YXNjcmlwdGFjdGl2ZSA9IGZhbHNlOw0KICB2YXIgJF9jc3NhY3RpdmUgPSBmYWxzZTsNCiAgdmFyICRfcGhwYWN0aXZlID0gZmFsc2U7DQogIHZhciAkX2RlZmF1bHRjc3NhZGRpdGlvbnMgPSAiLkNvZGVNaXJyb3Ige2xpbmUtaGVpZ2h0OiAxLjNlbTsgZm9udC1zaXplOjExcHh9IjsNCg0KCWZ1bmN0aW9uIEdldE5hbWUoKSB7DQoJCXJldHVybiAnQ29kZU1pcnJvcic7DQoJfQ0KDQoJZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7DQoJCXJldHVybiBmYWxzZTsNCgl9DQoNCglmdW5jdGlvbiBIYXNBZG1pbigpIHsNCgkJcmV0dXJuIHRydWU7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0SGVscCgpIHsNCgkJcmV0dXJuICR0aGlzLT5MYW5nKCJoZWxwIik7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0QXV0aG9yKCkgew0KCQlyZXR1cm4gJ01vcnRlbiBQb3Vsc2VuJzsNCgl9DQoNCglmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpIHsNCgkJcmV0dXJuICcmbHQ7bW9ydGVuQHBvdWxzZW4ub3JnJmd0Oyc7DQoJfQ0KDQoJZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkgew0KCQlyZXR1cm4gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnY2hhbmdlbG9nLnRwbCcpOw0KCX0NCg0KCWZ1bmN0aW9uIEdldFZlcnNpb24oKSB7DQoJCXJldHVybiAnMi4wLjEnOw0KCX0NCgkNCglmdW5jdGlvbiBNaW5pbXVtQ01TVmVyc2lvbigpIHsNCgkJcmV0dXJuICIxLjkiOw0KCX0NCg0KICBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zPWFycmF5KCkpIHsNCiAgICBpZiAoJGNhcGFiaWxpdHk9PSJ3eXNpd3lnIikgcmV0dXJuIHRydWU7DQogICAgaWYgKCRjYXBhYmlsaXR5PT0ic3ludGF4aGlnaGxpZ2h0aW5nIikgcmV0dXJuIHRydWU7DQogICAgcmV0dXJuIGZhbHNlOw0KICB9DQoNCglmdW5jdGlvbiBJc1dZU0lXWUcoKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCWZ1bmN0aW9uIElzU3ludGF4SGlnaGxpZ2h0ZXIoKSB7DQoJCXJldHVybiB0cnVlOw0KCX0NCg0KCWZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpIHsNCgkJcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJyk7DQoJfQ0KDQoJZnVuY3Rpb24gU3ludGF4UGFnZUZvcm1TdWJtaXQoKSB7DQoJCXJldHVybiAiZm9yICh2YXIgY250RWRpdG9yID0gMDsgY250RWRpdG9yIDwgbnVtQ29kZU1pcnJvckFyZWFzOyBjbnRFZGl0b3IrKykge1xuIg0KCQkuICJcdFx0dmFyIGVkaXRvciA9IGV2YWwoJ2NvZGVtaXJyb3JlZGl0b3InICsgY250RWRpdG9yKTtcbiINCiAgICAuICJcdFx0dmFyIHRleHRhcmVhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvZGVtaXJyb3JhcmVhJyArIGNudEVkaXRvcik7XG4iDQogICAgICAvLy4iYWxlcnQoZWRpdG9yLmdldENvZGUoKSk7Ig0KCQkvLy4gIlx0XHRlZGl0b3IudGV4dGFyZWEudmFsdWUgPSBlZGl0b3IuZ2V0Q29kZSgpO1xuIg0KICAgICAgLiAiXHRcdHRleHRhcmVhLnZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7XG4iDQoJCS4gIlx0fVxuIjsNCgl9DQoJDQoJZnVuY3Rpb24gV1lTSVdZR1BhZ2VGb3JtU3VibWl0KCkgew0KCQlyZXR1cm4gJHRoaXMtPlN5bnRheFBhZ2VGb3JtU3VibWl0KCk7DQoJfQ0KDQoJZnVuY3Rpb24gV1lTSVdZR1RleHRBcmVhKCRuYW1lPSd0ZXh0YXJlYScsJGNvbHVtbnM9JzgwJywkcm93cz0nMTUnLCRlbmNvZGluZz0nJywkY29udGVudD0nJywkc3R5bGVzaGVldD0nJywkYWRkdGV4dD0nJykgew0KCQkkdGhpcy0+d3lzaXd5Z2FjdGl2ZT10cnVlOw0KCQlyZXR1cm4gJHRoaXMtPlN5bnRheFRleHRhcmVhKCRuYW1lLCJodG1sIiwkY29sdW1ucywkcm93cywkZW5jb2RpbmcsJGNvbnRlbnQpOw0KCX0NCg0KCWZ1bmN0aW9uIFN5bnRheFRleHRhcmVhKCRuYW1lPSd0ZXh0YXJlYScsJHN5bnRheD0iaHRtbCIsJGNvbHVtbnM9JzgwJywkcm93cz0nMTUnLCRlbmNvZGluZz0nJywkY29udGVudD0nJywkc3R5bGVzaGVldD0nJywkYWRkdGV4dD0nJykgew0KCQkkdGV4dGFyZWE9IiI7DQoJCSR0aGlzLT5zeW50YXhhY3RpdmU9dHJ1ZTsJDQoJCS8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ1c2VhdXRvY29tcGxldGUiLCIxIik9PSIwIikgJGNsYXNzLj0iIGF1dG9jb21wbGV0ZS1vZmYiOw0KCQlpZiAoJHRoaXMtPkdldFByZWZlcmVuY2UoInNob3dsaW5lbnVtYmVycyIsIjEiKT09IjAiKSAkY2xhc3MuPSIgbGluZW51bWJlcnMtb2ZmIjsNCgkJKi8NCiAgICAgIC8qaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJzaG93dG9nZ2xlc3ludGF4IiwiMSIpPT0iMSIpIHsNCiAgICAgDQoJCQkkdGV4dGFyZWEuPSI8YnIvPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgY2hlY2tlZD0nMScgb25jbGljaz0nY29kZXByZXNzIi4kdGhpcy0+bm9lZGl0b3JzLiIudG9nZ2xlRWRpdG9yKCk7JyBjaGVja2VkPSdjaGVja2VkJyBpZD0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+PGxhYmVsIGZvcj0nY29kZXByZXNzY2hlY2siLiR0aGlzLT5ub2VkaXRvcnMuIic+Ii4kdGhpcy0+TGFuZygidG9nZ2xlc3ludGF4IikuIjwvbGFiZWw+IjsNCgkJfSovDQogICAgJHNtYXJ0eT0kdGhpcy0+c21hcnR5Ow0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwiMSIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdsaW5lbnVtYmVycycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbignbGluZW51bWJlcnMnLCAiZmFsc2UiKTsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5HZXRQcmVmZXJlbmNlKCJ0ZXh0d3JhcHBpbmciLCIxIik9PSIxIil7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ3RleHR3cmFwcGluZycsICJ0cnVlIik7DQogICAgfSBlbHNlIHsNCiAgICAgICRzbWFydHktPmFzc2lnbigndGV4dHdyYXBwaW5nJywgImZhbHNlIik7DQogICAgfQ0KICAgIGlmICgkdGhpcy0+R2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwiMCIpPT0iMSIpew0KICAgICAgJHNtYXJ0eS0+YXNzaWduKCdhdXRvbWF0Y2hwYXJlbnMnLCAidHJ1ZSIpOw0KICAgIH0gZWxzZSB7DQogICAgICAkc21hcnR5LT5hc3NpZ24oJ2F1dG9tYXRjaHBhcmVucycsICJmYWxzZSIpOw0KICAgIH0NCiAgICAvL2xpbmVOdW1iZXJzOiB0cnVlLA0KICAgIC8vJGNvbmZpZz0kdGhpcy0+R2V0Q29uZmlnKCk7DQogICAgJGNvbmZpZz1jbXNtcygpLT5HZXRDb25maWcoKTsNCg0KICAgICRzbWFydHktPmFzc2lnbigndGV4dGFyZWFpZCcsICJjb2RlbWlycm9yYXJlYSIuJHRoaXMtPm5vZWRpdG9ycyk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCd0ZXh0YXJlYW5hbWUnLCAkbmFtZSk7DQogICAgJHNtYXJ0eS0+YXNzaWduKCdjb250ZW50JywgJGNvbnRlbnQpOw0KICAgICRzbWFydHktPmFzc2lnbignaWQnLCAkdGhpcy0+bm9lZGl0b3JzKTsNCiAgICAvLyRwYXJzZXJmaWxlPSIiOyAkY3NzZmlsZT0iIjsNCiAgICAvKiRjbWRpcj0kY29uZmlnWyJyb290X3VybCJdLicvbW9kdWxlcy9Db2RlTWlycm9yL2NvZGVtaXJyb3InOw0KICAgIHN3aXRjaCgkc3ludGF4KSB7DQogICAgICANCiAgICAgIGNhc2UgImh0bWwiIDogDQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2V4bWwuanMiJzsgDQogICAgICAgICRjc3NmaWxlPSciJy4kY21kaXIuJy9tb2RlL3htbC94bWwuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiY3NzIiA6DQogICAgICAgICRwYXJzZXJmaWxlPScicGFyc2Vjc3MuanMiJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9jc3MuY3NzIic7DQogICAgICAgIGJyZWFrOw0KICAgICAgY2FzZSAiamF2YXNjcmlwdCIgOg0KICAgICAgY2FzZSAianMiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyJdJzsNCiAgICAgICAgJGNzc2ZpbGU9JyInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiJzsNCiAgICAgICAgYnJlYWs7DQogICAgICBjYXNlICJwaHAiIDoNCiAgICAgICAgJHBhcnNlcmZpbGU9J1sicGFyc2V4bWwuanMiLCAicGFyc2Vjc3MuanMiLCAidG9rZW5pemVqYXZhc2NyaXB0LmpzIiwgInBhcnNlamF2YXNjcmlwdC5qcyIsICJwYXJzZWh0bWxtaXhlZC5qcyIsIi4uL2NvbnRyaWIvcGhwL2pzL3Rva2VuaXplcGhwLmpzIiwgIi4uL2NvbnRyaWIvcGhwL2pzL3BhcnNlcGhwLmpzIiwgICAgICAgICAgICAgICAgICAgICAiLi4vY29udHJpYi9waHAvanMvcGFyc2VwaHBodG1sbWl4ZWQuanMiXSc7DQogICAgICAgICRjc3NmaWxlPSdbIicuJGNtZGlyLicvY3NzL3htbGNvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9qc2NvbG9ycy5jc3MiLCInLiRjbWRpci4nL2Nzcy9jc3Njb2xvcnMuY3NzIiwiJy4kY21kaXIuJy9jb250cmliL3BocC9jc3MvcGhwY29sb3JzLmNzcyJdJzsNCiAgICAgICAgYnJlYWs7DQogICAgfSovDQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3BhcnNlcmZpbGUnLCAkcGFyc2VyZmlsZSk7DQogICAgLy8kdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Nzc2ZpbGUnLCAkY3NzZmlsZSk7DQoNCiAgICAkc21hcnR5LT5hc3NpZ24oJ3RhYmhhbmRsaW5nJywgJHRoaXMtPkdldFByZWZlcmVuY2UoInRhYmhhbmRsaW5nIiwiaW5kZW50IikpOw0KICAgIA0KICAgICRzbWFydHktPmFzc2lnbigncm9vdF91cmwnLCAkY29uZmlnWyJyb290X3VybCJdKTsNCg0KICAgIHN3aXRjaCAoJHN5bnRheCkgew0KICAgICAgY2FzZSAiaHRtbCIgOiAkc21hcnR5LT5hc3NpZ24oJ21vZGUnLCAiaHRtbG1peGVkIik7ICR0aGlzLT5faHRtbGFjdGl2ZT10cnVlOyBicmVhazsNCiAgICAgIGNhc2UgImpzIjoNCiAgICAgIGNhc2UgImphdmFzY3JpcHQiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgImphdmFzY3JpcHQiKTskdGhpcy0+X2phdmFzY3JpcHRhY3RpdmU9dHJ1ZTsgIGJyZWFrOw0KICAgICAgY2FzZSAiY3NzIiA6ICRzbWFydHktPmFzc2lnbignbW9kZScsICJjc3MiKTsgJHRoaXMtPl9jc3NhY3RpdmU9dHJ1ZTsgYnJlYWs7DQogICAgICBjYXNlICJwaHAiIDogJHNtYXJ0eS0+YXNzaWduKCdtb2RlJywgInBocCIpOyAkdGhpcy0+X3BocGFjdGl2ZT10cnVlOyBicmVhazsNCiAgICB9DQoNCg0KICAgICR0ZXh0YXJlYT0kdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdjb2RlbWlycm9yMmFyZWEudHBsJyk7DQoNCgkJJHRoaXMtPm5vZWRpdG9ycysrOw0KDQoJCXJldHVybiAkdGV4dGFyZWE7DQoJfQ0KDQoJZnVuY3Rpb24gV1lTSVdZR0dlbmVyYXRlSGVhZGVyKCRodG1scmVzdWx0PScnKSB7DQoJCXJldHVybiAkdGhpcy0+U3ludGF4R2VuZXJhdGVIZWFkZXIoKTsNCgl9DQoNCglmdW5jdGlvbiBTeW50YXhHZW5lcmF0ZUhlYWRlcigkaHRtbHJlc3VsdD0nJykgew0KCQlpZiAoJHRoaXMtPmhlYWRlcmluZm9zZW50KSByZXR1cm4gIiI7DQoJCWlmICgkdGhpcy0+bm9lZGl0b3JzPT0wKSByZXR1cm4gJyc7DQoJCS8vJEdMT0JBTFNbImNvbmZpZyJdWyJyb290X3BhdGgiXS4NCiAgICAkY29uZmlnPWNtc21zKCktPkdldENvbmZpZygpOw0KDQoJCSRzY3JpcHRwYXRoPSRjb25maWdbInJvb3RfdXJsIl0uIi9tb2R1bGVzL0NvZGVNaXJyb3IvY29kZW1pcnJvcjIiOw0KCQkkaGVhZGVyPSIiOw0KCQkkaGVhZGVyLj0nPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+JzsNCiAgICAkaGVhZGVyLj0nPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL2xpYi9jb2RlbWlycm9yLmNzcyIvPic7DQogICAgDQogICAgaWYgKCR0aGlzLT5faHRtbGFjdGl2ZSkgew0KICAgICAgJGhlYWRlci49JzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzIj48L3NjcmlwdD4nOw0KICAgICAgJGhlYWRlci49JzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jc3MvY3NzLmpzIj48L3NjcmlwdD4nOw0KICAgICAgJGhlYWRlci49JzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy9tb2RlL2Nzcy9jc3MuY3NzIiAvPic7DQogICAgICAkaGVhZGVyLj0nPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRoZWFkZXIuPSc8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUveG1sL3htbC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRoZWFkZXIuPSc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvbW9kZS94bWwveG1sLmNzcyIgLz4nOw0KICAgIH0NCiAgICBpZiAoJHRoaXMtPl9qYXZhc2NyaXB0YWN0aXZlKSB7DQogICAgICAkaGVhZGVyLj0nPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+DQogICAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuY3NzIiAvPg0KICAgICAgJzsNCiAgICB9DQogICAgaWYgKCR0aGlzLT5fY3NzYWN0aXZlKSB7DQogICAgICAkaGVhZGVyLj0nPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2Nzcy9jc3MuanMiPjwvc2NyaXB0Pg0KICAgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iJy4kc2NyaXB0cGF0aC4nL21vZGUvY3NzL2Nzcy5jc3MiIC8+DQogICAgICAnOw0KICAgIH0NCiAgICBpZiAoJHRoaXMtPl9waHBhY3RpdmUpIHsNCg0KICAgICAgJGhlYWRlci49JzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jc3MvY3NzLmpzIj48L3NjcmlwdD4nOw0KICAgICAgJGhlYWRlci49JzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9IicuJHNjcmlwdHBhdGguJy9tb2RlL2Nzcy9jc3MuY3NzIiAvPic7DQogICAgICAkaGVhZGVyLj0nPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHNjcmlwdHBhdGguJy9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRoZWFkZXIuPSc8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUveG1sL3htbC5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRoZWFkZXIuPSc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvbW9kZS94bWwveG1sLmNzcyIgLz4nOw0KICAgICAgJGhlYWRlci49JzxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFzY3JpcHQiIHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jbGlrZS9jbGlrZS5qcyI+PC9zY3JpcHQ+JzsNCiAgICAgICRoZWFkZXIuPSc8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSInLiRzY3JpcHRwYXRoLicvbW9kZS9jbGlrZS9jbGlrZS5jc3MiIC8+JzsNCiAgICAgICRoZWFkZXIuPSc8c2NyaXB0IGxhbmd1YWdlPSJKYXZhc2NyaXB0IiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iJy4kc2NyaXB0cGF0aC4nL21vZGUvcGhwL3BocC5qcyI+PC9zY3JpcHQ+JzsNCiAgICB9DQoNCiAgICAkaGVhZGVyLj0nPHNjcmlwdCBsYW5ndWFnZT0iSmF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgbnVtQ29kZU1pcnJvckFyZWFzPScuJHRoaXMtPm5vZWRpdG9ycy4nPC9zY3JpcHQ+JzsNCg0KICAgICRoZWFkZXIuPScNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQogICcuJHRoaXMtPkdldFByZWZlcmVuY2UoImNzc2FkZGl0aW9ucyIsJHRoaXMtPl9kZWZhdWx0Y3NzYWRkaXRpb25zKS4nDQo8L3N0eWxlPg0KICAgICc7DQoNCg0KDQoJCSR0aGlzLT5oZWFkZXJpbmZvc2VudD10cnVlOw0KCQlyZXR1cm4gJGhlYWRlcjsNCgl9DQp9DQoNCj8+]]></data>
	</file>
	<file>
	  <filename>/codemirror2/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/compress.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IENvbXByZXNzaW9uIEhlbHBlcjwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJjc3MvZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgPC9oZWFkPgogIDxib2R5PgoKPGgxPjxzcGFuIGNsYXNzPSJsb2dvLWJyYWNlcyI+eyB9PC9zcGFuPiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvIj5Db2RlTWlycm9yPC9hPjwvaDE+Cgo8cHJlIGNsYXNzPSJncmV5Ij4KPGltZyBzcmM9ImNzcy9iYWJvb24ucG5nIiBjbGFzcz0ibG9nbyIgYWx0PSJsb2dvIi8+LyogU2NyaXB0IGNvbXByZXNzaW9uCiAgIGhlbHBlciAqLwo8L3ByZT4KCiAgICA8cD5UbyBvcHRpbWl6ZSBsb2FkaW5nIENvZGVNaXJyb3IsIGVzcGVjaWFsbHkgd2hlbiBpbmNsdWRpbmcgYQogICAgYnVuY2ggb2YgZGlmZmVyZW50IG1vZGVzLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IHlvdSBjb21iaW5lIGFuZAogICAgbWluaWZ5IChhbmQgcHJlZmVyYWJseSBhbHNvIGd6aXApIHRoZSBzY3JpcHRzLiBUaGlzIHBhZ2UgbWFrZXMKICAgIHRob3NlIGZpcnN0IHR3byBzdGVwcyB2ZXJ5IGVhc3kuIFNpbXBseSBzZWxlY3QgdGhlIHZlcnNpb24gYW5kCiAgICBzY3JpcHRzIHlvdSBuZWVkIGluIHRoZSBmb3JtIGJlbG93LCBhbmQKICAgIGNsaWNrIDxzdHJvbmc+Q29tcHJlc3M8L3N0cm9uZz4gdG8gZG93bmxvYWQgdGhlIG1pbmlmaWVkIHNjcmlwdAogICAgZmlsZS48L3A+CgogICAgPGZvcm0gaWQ9ImZvcm0iIGFjdGlvbj0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC91Z2xpZnlqcyIgbWV0aG9kPSJwb3N0Ij4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9ImRvd25sb2FkIiBuYW1lPSJkb3dubG9hZCIgdmFsdWU9ImNvZGVtaXJyb3ItY29tcHJlc3NlZC5qcyIvPgogICAgICA8cD5WZXJzaW9uOiA8c2VsZWN0IGlkPSJ2ZXJzaW9uIiBvbmNoYW5nZT0ic2V0VmVyc2lvbih0aGlzKTsiIHN0eWxlPSJwYWRkaW5nOiAxcHgiPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkhFQUQ8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMDE7Zj0iPjIuMDE8L29wdGlvbj4KICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMj9hPWJsb2JfcGxhaW47aGI9djIuMDtmPSI+Mi4wPC9vcHRpb24+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL21hcmlqbmhhdmVyYmVrZS5ubC9naXQvY29kZW1pcnJvcjI/YT1ibG9iX3BsYWluO2hiPWJldGEyO2Y9Ij5iZXRhMjwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9tYXJpam5oYXZlcmJla2UubmwvZ2l0L2NvZGVtaXJyb3IyP2E9YmxvYl9wbGFpbjtoYj1iZXRhMTtmPSI+YmV0YTE8L29wdGlvbj4KICAgICAgPC9zZWxlY3Q+PC9wPgoKICAgICAgPHNlbGVjdCBtdWx0aXBsZT0ibXVsdGlwbGUiIG5hbWU9ImNvZGVfdXJsIiBzdHlsZT0id2lkdGg6IDQwZW07IiBjbGFzcz0iZmllbGQiIGlkPSJmaWxlcyI+CiAgICAgICAgPG9wdGdyb3VwIGxhYmVsPSJDb2RlTWlycm9yIExpYnJhcnkiPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2xpYi9jb2RlbWlycm9yLmpzIiBzZWxlY3RlZD5jb2RlbWlycm9yLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbGliL292ZXJsYXkuanMiPm92ZXJsYXkuanM8L29wdGlvbj4KICAgICAgICA8L29wdGdyb3VwPgogICAgICAgIDxvcHRncm91cCBsYWJlbD0iTW9kZXMiPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj5qYXZhc2NyaXB0LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS94bWwveG1sLmpzIj54bWwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2Nzcy9jc3MuanMiPmNzcy5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcyI+aHRtbG1peGVkLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9jbGlrZS9jbGlrZS5qcyI+Y2xpa2UuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3B5dGhvbi9weXRob24uanMiPnB5dGhvbi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcGhwL3BocC5qcyI+cGhwLmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9oYXNrZWxsL2hhc2tlbGwuanMiPmhhc2tlbGwuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL2RpZmYvZGlmZi5qcyI+ZGlmZi5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvc3RleC9zdGV4LmpzIj5zdGV4LmpzPC9vcHRpb24+CiAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJodHRwOi8vY29kZW1pcnJvci5uZXQvbW9kZS9zbWFsbHRhbGsvc21hbGx0YWxrLmpzIj5zbWFsbHRhbGsuanM8L29wdGlvbj4KICAgICAgICAgIDxvcHRpb24gdmFsdWU9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9tb2RlL3JzdC9yc3QuanMiPnJzdC5qczwvb3B0aW9uPgogICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iaHR0cDovL2NvZGVtaXJyb3IubmV0L21vZGUvcGxzcWwvcGxzcWwuanMiPnBsc3FsLmpzPC9vcHRpb24+CiAgICAgICAgPC9vcHRncm91cD4KICAgICAgPC9zZWxlY3Q+PC9wPgoKICAgICAgPHA+CiAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiPkNvbXByZXNzPC9idXR0b24+IHdpdGggPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWlzaG9vL1VnbGlmeUpTLyI+VWdsaWZ5SlM8L2E+CiAgICAgIDwvcD4KCiAgICAgIDxwPkN1c3RvbSBjb2RlIHRvIGFkZCB0byB0aGUgY29tcHJlc3NlZCBmaWxlOjx0ZXh0YXJlYSBuYW1lPSJqc19jb2RlIiBzdHlsZT0id2lkdGg6IDEwMCU7IGhlaWdodDogMTVlbTsiIGNsYXNzPSJmaWVsZCI+PC90ZXh0YXJlYT48L3A+CiAgICA8L2Zvcm0+CgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgICBmdW5jdGlvbiBzZXRWZXJzaW9uKHZlcikgewogICAgICAgIHZhciB1cmxwcmVmaXggPSB2ZXIub3B0aW9uc1t2ZXIuc2VsZWN0ZWRJbmRleF0udmFsdWU7CiAgICAgICAgdmFyIHNlbGVjdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJmaWxlcyIpLCBtOwogICAgICAgIGZvciAodmFyIG9wdGdyID0gc2VsZWN0LmZpcnN0Q2hpbGQ7IG9wdGdyOyBvcHRnciA9IG9wdGdyLm5leHRTaWJsaW5nKQogICAgICAgICAgZm9yICh2YXIgb3B0ID0gb3B0Z3IuZmlyc3RDaGlsZDsgb3B0OyBvcHQgPSBvcHQubmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgaWYgKG9wdC5ub2RlTmFtZSAhPSAiT1BUSU9OIikKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgZWxzZSBpZiAobSA9IG9wdC52YWx1ZS5tYXRjaCgvXmh0dHA6XC9cL2NvZGVtaXJyb3IubmV0XC8yXC8oLiopJC8pKQogICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHVybHByZWZpeCArIG1bMV07CiAgICAgICAgICAgIGVsc2UgaWYgKG0gPSBvcHQudmFsdWUubWF0Y2goL2h0dHA6XC9cL21hcmlqbmhhdmVyYmVrZS5ubFwvZ2l0XC9jb2RlbWlycm9yXD9hPWJsb2JfcGxhaW47aGI9W147XSs7Zj0oLiopJC8pKQogICAgICAgICAgICAgIG9wdC52YWx1ZSA9IHVybHByZWZpeCArIG1bMV07CiAgICAgICAgICB9CiAgICAgICB9CiAgICA8L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImNzcy9mb250LmpzIj48L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/css/baboon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[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]]></data>
	</file>
	<file>
	  <filename>/codemirror2/css/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/css/docs.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ym9keSB7CiAgZm9udC1mYW1pbHk6IEFyaWFsLCBzYW5zLXNlcmlmOwogIGxpbmUtaGVpZ2h0OiAxLjU7CiAgbWF4LXdpZHRoOiA2NC4zZW07CiAgbWFyZ2luOiAzZW0gYXV0bzsKICBwYWRkaW5nOiAwIDFlbTsKfQpib2R5LmRyb2lkIHsKICBmb250LWZhbWlseTogRHJvaWQgU2FucywgQXJpYWwsIHNhbnMtc2VyaWY7Cn0KCmgxIHsKICBsZXR0ZXItc3BhY2luZzogLTNweDsKICBmb250LXNpemU6IDMuMjNlbTsKICBmb250LXdlaWdodDogYm9sZDsKICBtYXJnaW46IDA7Cn0KCmgyIHsKICBmb250LXNpemU6IDEuMjNlbTsKICBmb250LXdlaWdodDogYm9sZDsKICBtYXJnaW46IC41ZW0gMDsKICBsZXR0ZXItc3BhY2luZzogLTFweDsKfQoKaDMgewogIGZvbnQtc2l6ZTogMWVtOwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIG1hcmdpbjogLjRlbSAwOwp9CgpwcmUgewogIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgLW1vei1ib3JkZXItcmFkaXVzOiA2cHg7CiAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA2cHg7CiAgYm9yZGVyLXJhZGl1czogNnB4OwogIHBhZGRpbmc6IDFlbTsKfQoKcHJlLmNvZGUgewogIG1hcmdpbjogMCAxZW07Cn0KCi5ncmV5IHsKICBmb250LXNpemU6IDIuMmVtOwogIHBhZGRpbmc6IC41ZW0gMWVtOwogIGxpbmUtaGVpZ2h0OiAxLjJlbTsKICBtYXJnaW4tdG9wOiAuNWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQoKaW1nLmxvZ28gewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICByaWdodDogLTI1cHg7CiAgYm90dG9tOiA0cHg7Cn0KCmE6bGluaywgYTp2aXNpdGVkLCAucXVhc2lsaW5rIHsKICBjb2xvcjogI2RmMDAxOTsKICBjdXJzb3I6IHBvaW50ZXI7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CgphOmhvdmVyLCAucXVhc2lsaW5rOmhvdmVyIHsKICBjb2xvcjogIzgwMDAwNDsKfQoKaDEgYTpsaW5rLCBoMSBhOnZpc2l0ZWQsIGgxIGE6aG92ZXIgewogIGNvbG9yOiBibGFjazsKfQoKdWwgewogIG1hcmdpbjogMDsKICBwYWRkaW5nLWxlZnQ6IDEuMmVtOwp9CgphLmRvd25sb2FkIHsKICBjb2xvcjogd2hpdGU7CiAgYmFja2dyb3VuZC1jb2xvcjogI2RmMDAxOTsKICB3aWR0aDogMTAwJTsKICBkaXNwbGF5OiBibG9jazsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgZm9udC1zaXplOiAxLjIzZW07CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogIC1tb3otYm9yZGVyLXJhZGl1czogNnB4OwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNnB4OwogIGJvcmRlci1yYWRpdXM6IDZweDsKICBwYWRkaW5nOiAuNWVtIDA7CiAgbWFyZ2luLWJvdHRvbTogMWVtOwp9CgphLmRvd25sb2FkOmhvdmVyIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmIwMDEwOwp9CgoucmVsIHsKICBtYXJnaW4tYm90dG9tOiAwOwp9CgoucmVsLW5vdGUgewogIGNvbG9yOiAjNzc3OwogIGZvbnQtc2l6ZTogLjllbTsKICBtYXJnaW4tdG9wOiAuMWVtOwp9CgoubG9nby1icmFjZXMgewogIGNvbG9yOiAjZGYwMDE5OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0b3A6IC00cHg7Cn0KCi5ibGsgewogIGZsb2F0OiBsZWZ0Owp9CgoubGVmdCB7CiAgd2lkdGg6IDM3ZW07CiAgcGFkZGluZy1yaWdodDogNi41M2VtOwogIHBhZGRpbmctYm90dG9tOiAxZW07Cn0KCi5sZWZ0MSB7CiAgd2lkdGg6IDE1LjI0ZW07CiAgcGFkZGluZy1yaWdodDogNi40NWVtOwp9CgoubGVmdDIgewogIHdpZHRoOiAxNS4yNGVtOwp9CgoucmlnaHQgewogIHdpZHRoOiAyMC42OGVtOwp9CgoubGVmdGJpZyB7CiAgd2lkdGg6IDQyLjQ0ZW07CiAgcGFkZGluZy1yaWdodDogNi41M2VtOwp9CgoucmlnaHRzbWFsbCB7CiAgd2lkdGg6IDE1LjI0ZW07Cn0KCi5jbGVhcjphZnRlciB7CiAgdmlzaWJpbGl0eTogaGlkZGVuOwogIGRpc3BsYXk6IGJsb2NrOwogIGZvbnQtc2l6ZTogMDsKICBjb250ZW50OiAiICI7CiAgY2xlYXI6IGJvdGg7CiAgaGVpZ2h0OiAwOwp9Ci5jbGVhciB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgfQovKiBzdGFydCBjb21tZW50ZWQgYmFja3NsYXNoIGhhY2sgXCovCiogaHRtbCAuY2xlYXIgeyBoZWlnaHQ6IDElOyB9Ci5jbGVhciB7IGRpc3BsYXk6IGJsb2NrOyB9Ci8qIGNsb3NlIGNvbW1lbnRlZCBiYWNrc2xhc2ggaGFjayAqLwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/css/font.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZnVuY3Rpb24gd2FpdEZvclN0eWxlcygpIHsKICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKQogICAgaWYgKC9nb29nbGVhcGlzLy50ZXN0KGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLmhyZWYpKQogICAgICByZXR1cm4gZG9jdW1lbnQuYm9keS5jbGFzc05hbWUgKz0gIiBkcm9pZCI7CiAgc2V0VGltZW91dCh3YWl0Rm9yU3R5bGVzLCAxMDApOwp9Cgpkb2N1bWVudC5ib2R5LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgZG9jdW1lbnQuYm9keS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgaWYgKC9BcHBsZVdlYktpdC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvaVBbb2FdZHxpUGhvbmUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpIHJldHVybjsKICB2YXIgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIkxJTksiKTsKICBsaW5rLnR5cGUgPSAidGV4dC9jc3MiOwogIGxpbmsucmVsID0gInN0eWxlc2hlZXQiOwogIGxpbmsuaHJlZiA9ICJodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1Ecm9pZCtTYW5zfERyb2lkK1NhbnM6Ym9sZCI7CiAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJIRUFEIilbMF0uYXBwZW5kQ2hpbGQobGluayk7CiAgd2FpdEZvclN0eWxlcygpOwp9LCAzMCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/demo/activeline.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQWN0aXZlIExpbmUgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9tb2RlL3htbC94bWwuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jc3MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5hY3RpdmVsaW5lIHtiYWNrZ3JvdW5kOiAjZjBmY2ZmICFpbXBvcnRhbnQ7fQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBBY3RpdmUgTGluZSBEZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8cnNzIHhtbG5zOmF0b209Imh0dHA6Ly93d3cudzMub3JnLzIwMDUvQXRvbSIgdmVyc2lvbj0iMi4wIgogICAgIHhtbG5zOmdlb3Jzcz0iaHR0cDovL3d3dy5nZW9yc3Mub3JnL2dlb3JzcyIKICAgICB4bWxuczp0d2l0dGVyPSJodHRwOi8vYXBpLnR3aXR0ZXIuY29tIj4KICA8Y2hhbm5lbD4KICAgIDx0aXRsZT5Ud2l0dGVyIC8gY29kZW1pcnJvcjwvdGl0bGU+CiAgICA8bGluaz5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvcjwvbGluaz4KICAgIDxhdG9tOmxpbmsgdHlwZT0iYXBwbGljYXRpb24vcnNzK3htbCIKICAgICAgICAgICAgICAgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL3N0YXR1c2VzL3VzZXJfdGltZWxpbmUvMjQyMjgzMjg4LnJzcyIgcmVsPSJzZWxmIi8+CiAgICA8ZGVzY3JpcHRpb24+VHdpdHRlciB1cGRhdGVzIGZyb20gQ29kZU1pcnJvciAvIGNvZGVtaXJyb3IuPC9kZXNjcmlwdGlvbj4KICAgIDxsYW5ndWFnZT5lbi11czwvbGFuZ3VhZ2U+CiAgICA8dHRsPjQwPC90dGw+CiAgPGl0ZW0+CiAgICA8dGl0bGU+Y29kZW1pcnJvcjogaHR0cDovL2Nsb3VkLWlkZS5jb20gJiM4MjEyOyB0aGV5J3JlIHNwcmluZ2luZyB1cCBsaWtlIG11c2hyb29tcy4gVGhpcyBvbmUKICAgICAgdXNlcyBDb2RlTWlycm9yIGFzIGl0cyBlZGl0b3IuPC90aXRsZT4KICAgIDxkZXNjcmlwdGlvbj5jb2RlbWlycm9yOiBodHRwOi8vY2xvdWQtaWRlLmNvbSAmIzgyMTI7IHRoZXkncmUgc3ByaW5naW5nIHVwIGxpa2UgbXVzaHJvb21zLiBUaGlzCiAgICAgIG9uZSB1c2VzIENvZGVNaXJyb3IgYXMgaXRzIGVkaXRvci48L2Rlc2NyaXB0aW9uPgogICAgPHB1YkRhdGU+VGh1LCAxNyBNYXIgMjAxMSAyMzozNDo0NyArMDAwMDwvcHViRGF0ZT4KICAgIDxndWlkPmh0dHA6Ly90d2l0dGVyLmNvbS9jb2RlbWlycm9yL3N0YXR1c2VzLzQ4NTI3NzMzNzIyMDU4NzUyPC9ndWlkPgogICAgPGxpbms+aHR0cDovL3R3aXR0ZXIuY29tL2NvZGVtaXJyb3Ivc3RhdHVzZXMvNDg1Mjc3MzM3MjIwNTg3NTI8L2xpbms+CiAgICA8dHdpdHRlcjpzb3VyY2U+d2ViPC90d2l0dGVyOnNvdXJjZT4KICAgIDx0d2l0dGVyOnBsYWNlLz4KICA8L2l0ZW0+CiAgPGl0ZW0+CiAgICA8dGl0bGU+Y29kZW1pcnJvcjogUG9zdGVkIGEgZGVzY3JpcHRpb24gb2YgdGhlIENvZGVNaXJyb3IgMiBpbnRlcm5hbHMgYXQKICAgICAgaHR0cDovL2NvZGVtaXJyb3IubmV0LzIvaW50ZXJuYWxzLmh0bWw8L3RpdGxlPgogICAgPGRlc2NyaXB0aW9uPmNvZGVtaXJyb3I6IFBvc3RlZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBDb2RlTWlycm9yIDIgaW50ZXJuYWxzIGF0CiAgICAgIGh0dHA6Ly9jb2RlbWlycm9yLm5ldC8yL2ludGVybmFscy5odG1sPC9kZXNjcmlwdGlvbj4KICAgIDxwdWJEYXRlPldlZCwgMDIgTWFyIDIwMTEgMTI6MTU6MDkgKzAwMDA8L3B1YkRhdGU+CiAgICA8Z3VpZD5odHRwOi8vdHdpdHRlci5jb20vY29kZW1pcnJvci9zdGF0dXNlcy80MjkyMDg3OTc4ODc4OTc2MDwvZ3VpZD4KICAgIDxsaW5rPmh0dHA6Ly90d2l0dGVyLmNvbS9jb2RlbWlycm9yL3N0YXR1c2VzLzQyOTIwODc5Nzg4Nzg5NzYwPC9saW5rPgogICAgPHR3aXR0ZXI6c291cmNlPndlYjwvdHdpdHRlcjpzb3VyY2U+CiAgICA8dHdpdHRlcjpwbGFjZS8+CiAgPC9pdGVtPgo8L2ZlZWQ+PC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICBtb2RlOiAiYXBwbGljYXRpb24veG1sIiwKICBsaW5lTnVtYmVyczogdHJ1ZSwKICBvbkN1cnNvckFjdGl2aXR5OiBmdW5jdGlvbigpIHsKICAgIGVkaXRvci5zZXRMaW5lQ2xhc3MoaGxMaW5lLCBudWxsKTsKICAgIGhsTGluZSA9IGVkaXRvci5zZXRMaW5lQ2xhc3MoZWRpdG9yLmdldEN1cnNvcigpLmxpbmUsICJhY3RpdmVsaW5lIik7CiAgfQp9KTsKdmFyIGhsTGluZSA9IGVkaXRvci5zZXRMaW5lQ2xhc3MoMCwgImFjdGl2ZWxpbmUiKTsKPC9zY3JpcHQ+CgogICAgPHA+U3R5bGluZyB0aGUgY3VycmVudCBjdXJzb3IgbGluZS48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQXV0b2NvbXBsZXRlIERlbW88L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Nzcy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLmNvbXBsZXRpb25zIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICAtd2Via2l0LWJveC1zaGFkb3c6IDJweCAzcHggNXB4IHJnYmEoMCwwLDAsLjIpOwogICAgICAgIC1tb3otYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgICAgICAgYm94LXNoYWRvdzogMnB4IDNweCA1cHggcmdiYSgwLDAsMCwuMik7CiAgICAgIH0KICAgICAgLmNvbXBsZXRpb25zIHNlbGVjdCB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZhZmFmYTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CiAgICAgIC5Db2RlTWlycm9yIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEF1dG9jb21wbGV0ZSBkZW1vPC9oMT4KCiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgpmdW5jdGlvbiBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCkgewogIHZhciBmb3VuZCA9IFtdLCBzdGFydCA9IHRva2VuLnN0cmluZzsKICBmdW5jdGlvbiBtYXliZUFkZChzdHIpIHsKICAgIGlmIChzdHIuaW5kZXhPZihzdGFydCkgPT0gMCkgZm91bmQucHVzaChzdHIpOwogIH0KICBmdW5jdGlvbiBnYXRoZXJDb21wbGV0aW9ucyhvYmopIHsKICAgIGlmICh0eXBlb2Ygb2JqID09ICJzdHJpbmciKSBmb3JFYWNoKHN0cmluZ1Byb3BzLCBtYXliZUFkZCk7CiAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBBcnJheSkgZm9yRWFjaChhcnJheVByb3BzLCBtYXliZUFkZCk7CiAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikgZm9yRWFjaChmdW5jUHJvcHMsIG1heWJlQWRkKTsKICAgIGZvciAodmFyIG5hbWUgaW4gb2JqKSBtYXliZUFkZChuYW1lKTsKICB9CgogIGlmIChjb250ZXh0KSB7CiAgICAvLyBJZiB0aGlzIGlzIGEgcHJvcGVydHksIHNlZSBpZiBpdCBiZWxvbmdzIHRvIHNvbWUgb2JqZWN0IHdlIGNhbgogICAgLy8gZmluZCBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC4KICAgIHZhciBvYmogPSBjb250ZXh0LnBvcCgpLCBiYXNlOwogICAgaWYgKG9iai5jbGFzc05hbWUgPT0gImpzLXZhcmlhYmxlIikKICAgICAgYmFzZSA9IHdpbmRvd1tvYmouc3RyaW5nXTsKICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gImpzLXN0cmluZyIpCiAgICAgIGJhc2UgPSAiIjsKICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gImpzLWF0b20iKQogICAgICBiYXNlID0gMTsKICAgIHdoaWxlIChiYXNlICE9IG51bGwgJiYgY29udGV4dC5sZW5ndGgpCiAgICAgIGJhc2UgPSBiYXNlW2NvbnRleHQucG9wKCkuc3RyaW5nXTsKICAgIGlmIChiYXNlICE9IG51bGwpIGdhdGhlckNvbXBsZXRpb25zKGJhc2UpOwogIH0KICBlbHNlIHsKICAgIC8vIElmIG5vdCwganVzdCBsb29rIGluIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBhbnkgbG9jYWwgc2NvcGUKICAgIC8vIChyZWFkaW5nIGludG8gSlMgbW9kZSBpbnRlcm5hbHMgdG8gZ2V0IGF0IHRoZSBsb2NhbCB2YXJpYWJsZXMpCiAgICBmb3IgKHZhciB2ID0gdG9rZW4uc3RhdGUubG9jYWxWYXJzOyB2OyB2ID0gdi5uZXh0KSBtYXliZUFkZCh2Lm5hbWUpOwogICAgZ2F0aGVyQ29tcGxldGlvbnMod2luZG93KTsKICAgIGZvckVhY2goa2V5d29yZHMsIG1heWJlQWRkKTsKICB9CiAgcmV0dXJuIGZvdW5kOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+UHJlc3MgPHN0cm9uZz5jdHJsLXNwYWNlPC9zdHJvbmc+IHRvIGFjdGl2YXRlIGF1dG9jb21wbGV0aW9uLiBTZWUKdGhlIDxhIGhyZWY9ImNvbXBsZXRlLmpzIj5jb2RlPC9hPiB0byBmaWd1cmUgb3V0IGhvdyBpdCB3b3Jrcy48L3A+CgogICAgPHNjcmlwdCBzcmM9ImNvbXBsZXRlLmpzIj48L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/complete.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uICgpIHsKICAvLyBNaW5pbWFsIGV2ZW50LWhhbmRsaW5nIHdyYXBwZXIuCiAgZnVuY3Rpb24gc3RvcEV2ZW50KCkgewogICAgaWYgKHRoaXMucHJldmVudERlZmF1bHQpIHt0aGlzLnByZXZlbnREZWZhdWx0KCk7IHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7fQogICAgZWxzZSB7dGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOyB0aGlzLmNhbmNlbEJ1YmJsZSA9IHRydWU7fQogIH0KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wRXZlbnQ7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlcikgewogICAgZnVuY3Rpb24gd3JhcEhhbmRsZXIoZXZlbnQpIHtoYW5kbGVyKGFkZFN0b3AoZXZlbnQgfHwgd2luZG93LmV2ZW50KSk7fQogICAgaWYgKHR5cGVvZiBub2RlLmFkZEV2ZW50TGlzdGVuZXIgPT0gImZ1bmN0aW9uIikKICAgICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIHdyYXBIYW5kbGVyLCBmYWxzZSk7CiAgICBlbHNlCiAgICAgIG5vZGUuYXR0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTsKICB9CgogIGZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGFyci5sZW5ndGg7IGkgPCBlOyArK2kpIGYoYXJyW2ldKTsKICB9CgogIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgIG9uS2V5RXZlbnQ6IGZ1bmN0aW9uKGksIGUpIHsKICAgICAgLy8gSG9vayBpbnRvIGN0cmwtc3BhY2UKICAgICAgaWYgKGUua2V5Q29kZSA9PSAzMiAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSkgJiYgIWUuYWx0S2V5KSB7CiAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgcmV0dXJuIHN0YXJ0Q29tcGxldGUoKTsKICAgICAgfQogICAgfQogIH0pOwoKICBmdW5jdGlvbiBzdGFydENvbXBsZXRlKCkgewogICAgLy8gV2Ugd2FudCBhIHNpbmdsZSBjdXJzb3IgcG9zaXRpb24uCiAgICBpZiAoZWRpdG9yLnNvbWV0aGluZ1NlbGVjdGVkKCkpIHJldHVybjsKICAgIC8vIEZpbmQgdGhlIHRva2VuIGF0IHRoZSBjdXJzb3IKICAgIHZhciBjdXIgPSBlZGl0b3IuZ2V0Q3Vyc29yKGZhbHNlKSwgdG9rZW4gPSBlZGl0b3IuZ2V0VG9rZW5BdChjdXIpLCB0cHJvcCA9IHRva2VuOwogICAgLy8gSWYgaXQncyBub3QgYSAnd29yZC1zdHlsZScgdG9rZW4sIGlnbm9yZSB0aGUgdG9rZW4uCiAgICBpZiAoIS9eW1x3JF9dKiQvLnRlc3QodG9rZW4uc3RyaW5nKSkgewogICAgICB0b2tlbiA9IHRwcm9wID0ge3N0YXJ0OiBjdXIuY2gsIGVuZDogY3VyLmNoLCBzdHJpbmc6ICIiLCBzdGF0ZTogdG9rZW4uc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0b2tlbi5zdHJpbmcgPT0gIi4iID8gImpzLXByb3BlcnR5IiA6IG51bGx9OwogICAgfQogICAgLy8gSWYgaXQgaXMgYSBwcm9wZXJ0eSwgZmluZCBvdXQgd2hhdCBpdCBpcyBhIHByb3BlcnR5IG9mLgogICAgd2hpbGUgKHRwcm9wLmNsYXNzTmFtZSA9PSAianMtcHJvcGVydHkiKSB7CiAgICAgIHRwcm9wID0gZWRpdG9yLmdldFRva2VuQXQoe2xpbmU6IGN1ci5saW5lLCBjaDogdHByb3Auc3RhcnR9KTsKICAgICAgaWYgKHRwcm9wLnN0cmluZyAhPSAiLiIpIHJldHVybjsKICAgICAgdHByb3AgPSBlZGl0b3IuZ2V0VG9rZW5BdCh7bGluZTogY3VyLmxpbmUsIGNoOiB0cHJvcC5zdGFydH0pOwogICAgICBpZiAoIWNvbnRleHQpIHZhciBjb250ZXh0ID0gW107CiAgICAgIGNvbnRleHQucHVzaCh0cHJvcCk7CiAgICB9CiAgICB2YXIgY29tcGxldGlvbnMgPSBnZXRDb21wbGV0aW9ucyh0b2tlbiwgY29udGV4dCk7CiAgICBpZiAoIWNvbXBsZXRpb25zLmxlbmd0aCkgcmV0dXJuOwogICAgZnVuY3Rpb24gaW5zZXJ0KHN0cikgewogICAgICBlZGl0b3IucmVwbGFjZVJhbmdlKHN0ciwge2xpbmU6IGN1ci5saW5lLCBjaDogdG9rZW4uc3RhcnR9LCB7bGluZTogY3VyLmxpbmUsIGNoOiB0b2tlbi5lbmR9KTsKICAgIH0KICAgIC8vIFdoZW4gdGhlcmUgaXMgb25seSBvbmUgY29tcGxldGlvbiwgdXNlIGl0IGRpcmVjdGx5LgogICAgaWYgKGNvbXBsZXRpb25zLmxlbmd0aCA9PSAxKSB7aW5zZXJ0KGNvbXBsZXRpb25zWzBdKTsgcmV0dXJuIHRydWU7fQoKICAgIC8vIEJ1aWxkIHRoZSBzZWxlY3Qgd2lkZ2V0CiAgICB2YXIgY29tcGxldGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGNvbXBsZXRlLmNsYXNzTmFtZSA9ICJjb21wbGV0aW9ucyI7CiAgICB2YXIgc2VsID0gY29tcGxldGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IikpOwogICAgc2VsLm11bHRpcGxlID0gdHJ1ZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29tcGxldGlvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIG9wdCA9IHNlbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7CiAgICAgIG9wdC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb21wbGV0aW9uc1tpXSkpOwogICAgfQogICAgc2VsLmZpcnN0Q2hpbGQuc2VsZWN0ZWQgPSB0cnVlOwogICAgc2VsLnNpemUgPSBNYXRoLm1pbigxMCwgY29tcGxldGlvbnMubGVuZ3RoKTsKICAgIHZhciBwb3MgPSBlZGl0b3IuY3Vyc29yQ29vcmRzKCk7CiAgICBjb21wbGV0ZS5zdHlsZS5sZWZ0ID0gcG9zLnggKyAicHgiOwogICAgY29tcGxldGUuc3R5bGUudG9wID0gcG9zLnlCb3QgKyAicHgiOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb21wbGV0ZSk7CiAgICAvLyBIYWNrIHRvIGhpZGUgdGhlIHNjcm9sbGJhci4KICAgIGlmIChjb21wbGV0aW9ucy5sZW5ndGggPD0gMTApCiAgICAgIGNvbXBsZXRlLnN0eWxlLndpZHRoID0gKHNlbC5jbGllbnRXaWR0aCAtIDEpICsgInB4IjsKCiAgICB2YXIgZG9uZSA9IGZhbHNlOwogICAgZnVuY3Rpb24gY2xvc2UoKSB7CiAgICAgIGlmIChkb25lKSByZXR1cm47CiAgICAgIGRvbmUgPSB0cnVlOwogICAgICBjb21wbGV0ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGNvbXBsZXRlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHBpY2soKSB7CiAgICAgIGluc2VydChzZWwub3B0aW9uc1tzZWwuc2VsZWN0ZWRJbmRleF0udmFsdWUpOwogICAgICBjbG9zZSgpOwogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZWRpdG9yLmZvY3VzKCk7fSwgNTApOwogICAgfQogICAgY29ubmVjdChzZWwsICJibHVyIiwgY2xvc2UpOwogICAgY29ubmVjdChzZWwsICJrZXlkb3duIiwgZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgdmFyIGNvZGUgPSBldmVudC5rZXlDb2RlOwogICAgICAvLyBFbnRlciBhbmQgc3BhY2UKICAgICAgaWYgKGNvZGUgPT0gMTMgfHwgY29kZSA9PSAzMikge2V2ZW50LnN0b3AoKTsgcGljaygpO30KICAgICAgLy8gRXNjYXBlCiAgICAgIGVsc2UgaWYgKGNvZGUgPT0gMjcpIHtldmVudC5zdG9wKCk7IGNsb3NlKCk7IGVkaXRvci5mb2N1cygpO30KICAgICAgZWxzZSBpZiAoY29kZSAhPSAzOCAmJiBjb2RlICE9IDQwKSB7Y2xvc2UoKTsgZWRpdG9yLmZvY3VzKCk7IHNldFRpbWVvdXQoc3RhcnRDb21wbGV0ZSwgNTApO30KICAgIH0pOwogICAgY29ubmVjdChzZWwsICJkYmxjbGljayIsIHBpY2spOwoKICAgIHNlbC5mb2N1cygpOwogICAgLy8gT3BlcmEgc29tZXRpbWVzIGlnbm9yZXMgZm9jdXNpbmcgYSBmcmVzaGx5IGNyZWF0ZWQgbm9kZQogICAgaWYgKHdpbmRvdy5vcGVyYSkgc2V0VGltZW91dChmdW5jdGlvbigpe2lmICghZG9uZSkgc2VsLmZvY3VzKCk7fSwgMTAwKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgdmFyIHN0cmluZ1Byb3BzID0gKCJjaGFyQXQgY2hhckNvZGVBdCBpbmRleE9mIGxhc3RJbmRleE9mIHN1YnN0cmluZyBzdWJzdHIgc2xpY2UgdHJpbSB0cmltTGVmdCB0cmltUmlnaHQgIiArCiAgICAgICAgICAgICAgICAgICAgICJ0b1VwcGVyQ2FzZSB0b0xvd2VyQ2FzZSBzcGxpdCBjb25jYXQgbWF0Y2ggcmVwbGFjZSBzZWFyY2giKS5zcGxpdCgiICIpOwogIHZhciBhcnJheVByb3BzID0gKCJsZW5ndGggY29uY2F0IGpvaW4gc3BsaWNlIHB1c2ggcG9wIHNoaWZ0IHVuc2hpZnQgc2xpY2UgcmV2ZXJzZSBzb3J0IGluZGV4T2YgIiArCiAgICAgICAgICAgICAgICAgICAgImxhc3RJbmRleE9mIGV2ZXJ5IHNvbWUgZmlsdGVyIGZvckVhY2ggbWFwIHJlZHVjZSByZWR1Y2VSaWdodCAiKS5zcGxpdCgiICIpOwogIHZhciBmdW5jUHJvcHMgPSAicHJvdG90eXBlIGFwcGx5IGNhbGwgYmluZCIuc3BsaXQoIiAiKTsKICB2YXIga2V5d29yZHMgPSAoImJyZWFrIGNhc2UgY2F0Y2ggY29udGludWUgZGVidWdnZXIgZGVmYXVsdCBkZWxldGUgZG8gZWxzZSBmYWxzZSBmaW5hbGx5IGZvciBmdW5jdGlvbiAiICsKICAgICAgICAgICAgICAgICAgImlmIGluIGluc3RhbmNlb2YgbmV3IG51bGwgcmV0dXJuIHN3aXRjaCB0aHJvdyB0cnVlIHRyeSB0eXBlb2YgdmFyIHZvaWQgd2hpbGUgd2l0aCIpLnNwbGl0KCIgIik7CgogIGZ1bmN0aW9uIGdldENvbXBsZXRpb25zKHRva2VuLCBjb250ZXh0KSB7CiAgICB2YXIgZm91bmQgPSBbXSwgc3RhcnQgPSB0b2tlbi5zdHJpbmc7CiAgICBmdW5jdGlvbiBtYXliZUFkZChzdHIpIHsKICAgICAgaWYgKHN0ci5pbmRleE9mKHN0YXJ0KSA9PSAwKSBmb3VuZC5wdXNoKHN0cik7CiAgICB9CiAgICBmdW5jdGlvbiBnYXRoZXJDb21wbGV0aW9ucyhvYmopIHsKICAgICAgaWYgKHR5cGVvZiBvYmogPT0gInN0cmluZyIpIGZvckVhY2goc3RyaW5nUHJvcHMsIG1heWJlQWRkKTsKICAgICAgZWxzZSBpZiAob2JqIGluc3RhbmNlb2YgQXJyYXkpIGZvckVhY2goYXJyYXlQcm9wcywgbWF5YmVBZGQpOwogICAgICBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBGdW5jdGlvbikgZm9yRWFjaChmdW5jUHJvcHMsIG1heWJlQWRkKTsKICAgICAgZm9yICh2YXIgbmFtZSBpbiBvYmopIG1heWJlQWRkKG5hbWUpOwogICAgfQoKICAgIGlmIChjb250ZXh0KSB7CiAgICAgIC8vIElmIHRoaXMgaXMgYSBwcm9wZXJ0eSwgc2VlIGlmIGl0IGJlbG9uZ3MgdG8gc29tZSBvYmplY3Qgd2UgY2FuCiAgICAgIC8vIGZpbmQgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCiAgICAgIHZhciBvYmogPSBjb250ZXh0LnBvcCgpLCBiYXNlOwogICAgICBpZiAob2JqLmNsYXNzTmFtZSA9PSAianMtdmFyaWFibGUiKQogICAgICAgIGJhc2UgPSB3aW5kb3dbb2JqLnN0cmluZ107CiAgICAgIGVsc2UgaWYgKG9iai5jbGFzc05hbWUgPT0gImpzLXN0cmluZyIpCiAgICAgICAgYmFzZSA9ICIiOwogICAgICBlbHNlIGlmIChvYmouY2xhc3NOYW1lID09ICJqcy1hdG9tIikKICAgICAgICBiYXNlID0gMTsKICAgICAgd2hpbGUgKGJhc2UgIT0gbnVsbCAmJiBjb250ZXh0Lmxlbmd0aCkKICAgICAgICBiYXNlID0gYmFzZVtjb250ZXh0LnBvcCgpLnN0cmluZ107CiAgICAgIGlmIChiYXNlICE9IG51bGwpIGdhdGhlckNvbXBsZXRpb25zKGJhc2UpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIElmIG5vdCwganVzdCBsb29rIGluIHRoZSB3aW5kb3cgb2JqZWN0IGFuZCBhbnkgbG9jYWwgc2NvcGUKICAgICAgLy8gKHJlYWRpbmcgaW50byBKUyBtb2RlIGludGVybmFscyB0byBnZXQgYXQgdGhlIGxvY2FsIHZhcmlhYmxlcykKICAgICAgZm9yICh2YXIgdiA9IHRva2VuLnN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkgbWF5YmVBZGQodi5uYW1lKTsKICAgICAgZ2F0aGVyQ29tcGxldGlvbnMod2luZG93KTsKICAgICAgZm9yRWFjaChrZXl3b3JkcywgbWF5YmVBZGQpOwogICAgfQogICAgcmV0dXJuIGZvdW5kOwogIH0KfSkoKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/marker.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQnJlYWtwb2ludCBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jc3MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7CiAgICAgICAgd2lkdGg6IDNlbTsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQogICAgICAuQ29kZU1pcnJvciB7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2FhYTsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBCcmVha3BvaW50IGRlbW88L2gxPgoKICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CkNvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICBsaW5lTnVtYmVyczogdHJ1ZSwKICBvbkd1dHRlckNsaWNrOiBmdW5jdGlvbihjbSwgbikgewogICAgdmFyIGluZm8gPSBjbS5saW5lSW5mbyhuKTsKICAgIGlmIChpbmZvLm1hcmtlclRleHQpCiAgICAgIGNtLmNsZWFyTWFya2VyKG4pOwogICAgZWxzZQogICAgICBjbS5zZXRNYXJrZXIobiwgIjxzcGFuIHN0eWxlPVwiY29sb3I6ICM5MDBcIj7il488L3NwYW4+ICVOJSIpOwogIH0KfSk7CjwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+Q2xpY2sgdGhlIGxpbmUtbnVtYmVyIGd1dHRlciB0byBhZGQgb3IgcmVtb3ZlICdicmVha3BvaW50cycuPC9wPgoKICAgIDxzY3JpcHQ+CiAgICAgIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBvbkd1dHRlckNsaWNrOiBmdW5jdGlvbihjbSwgbikgewogICAgICAgICAgdmFyIGluZm8gPSBjbS5saW5lSW5mbyhuKTsKICAgICAgICAgIGlmIChpbmZvLm1hcmtlclRleHQpCiAgICAgICAgICAgIGNtLmNsZWFyTWFya2VyKG4pOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBjbS5zZXRNYXJrZXIobiwgIjxzcGFuIHN0eWxlPVwiY29sb3I6ICM5MDBcIj7il488L3NwYW4+ICVOJSIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/mustache.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogT3ZlcmxheSBQYXJzZXIgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii4uL2xpYi9vdmVybGF5LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbW9kZS94bWwveG1sLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbW9kZS94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY3NzL2RvY3MuY3NzIj4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAuQ29kZU1pcnJvciB7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7fQogICAgICAubXVzdGFjaGUge2NvbG9yOiAjMGNhO30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogT3ZlcmxheSBQYXJzZXIgRGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KPGh0bWw+CiAgPGJvZHk+CiAgICA8aDE+e3t0aXRsZX19PC9oMT4KICAgIDxwPlRoZXNlIGFyZSBsaW5rcyB0byB7e3RoaW5nc319OjwvcD4KICAgIDx1bD57eyNsaW5rc319CiAgICAgIDxsaT48YSBocmVmPSJ7e3VybH19Ij57e3RleHR9fTwvYT48L2xpPgogICAge3svbGlua3N9fTwvdWw+CiAgPC9ib2R5Pgo8L2h0bWw+CjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgibXVzdGFjaGUiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBtdXN0YWNoZU92ZXJsYXkgPSB7CiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLm1hdGNoKCJ7eyIpKSB7CiAgICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpCiAgICAgICAgICBpZiAoY2ggPT0gIn0iICYmIHN0cmVhbS5uZXh0KCkgPT0gIn0iKSBicmVhazsKICAgICAgICByZXR1cm4gIm11c3RhY2hlIjsKICAgICAgfQogICAgICB3aGlsZSAoc3RyZWFtLm5leHQoKSAhPSBudWxsICYmICFzdHJlYW0ubWF0Y2goInt7IiwgZmFsc2UpKSB7fQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9OwogIHJldHVybiBDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIoQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgcGFyc2VyQ29uZmlnLmJhY2tkcm9wIHx8ICJ0ZXh0L2h0bWwiKSwgbXVzdGFjaGVPdmVybGF5KTsKfSk7CnZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZTogIm11c3RhY2hlIn0pOwo8L3NjcmlwdD4KCiAgICA8cD5EZW1vbnN0cmF0aW9uIG9mIGEgbW9kZSB0aGF0IHBhcnNlcyBIVE1MLCBoaWdobGlnaHRpbmcKICAgIHRoZSA8YSBocmVmPSJodHRwOi8vbXVzdGFjaGUuZ2l0aHViLmNvbS8iPk11c3RhY2hlPC9hPiB0ZW1wbGF0aW5nCiAgICBkaXJlY3RpdmVzIGluc2lkZSBvZiBpdCBieSB1c2luZyB0aGUgY29kZQogICAgaW4gPGEgaHJlZj0iLi4vbGliL292ZXJsYXkuanMiPjxjb2RlPm92ZXJsYXkuanM8L2NvZGU+PC9hPi4gVmlldwogICAgc291cmNlIHRvIHNlZSB0aGUgMTUgbGluZXMgb2YgY29kZSBuZWVkZWQgdG8gYWNjb21wbGlzaCB0aGlzLjwvcD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/resize.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQXV0b3Jlc2l6ZSBEZW1vPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL21vZGUvY3NzL2Nzcy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvY3NzL2Nzcy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2Nzcy9kb2NzLmNzcyI+CgogICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgICAgLkNvZGVNaXJyb3IgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEF1dG9yZXNpemUgZGVtbzwvaDE+CgogICAgPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLkNvZGVNaXJyb3IgewogIGhlaWdodDogYXV0bzsKfTwvdGV4dGFyZWE+PC9mb3JtPgoKPHA+Qnkgc2V0dGluZyBhIHNpbmdsZSBDU1MgcHJvcGVydHksIENvZGVNaXJyb3IgY2FuIGJlIG1hZGUgdG8KYXV0b21hdGljYWxseSByZXNpemUgdG8gZml0IHRoZSBjb250ZW50LiBVc2UgPGNvZGU+bWF4LWhlaWdodDwvY29kZT4KdG8gcHJldmVudCBpdCBmcm9tIGdyb3dpbmcgcGFzdCBhIGdpdmVuIHBvaW50IChvbiBoYWxmd2F5IG1vZGVybgpicm93c2VycykuPC9wPgoKICAgIDxzY3JpcHQ+CiAgICAgIENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZQogICAgICB9KTsKICAgIDwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/demo/search.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogU2VhcmNoL1JlcGxhY2UgRGVtbzwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9tb2RlL3htbC94bWwuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9tb2RlL3htbC94bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jc3MvZG9jcy5jc3MiPgoKICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CiAgICAgIC5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9CiAgICAgIC5zZWFyY2hlZCB7YmFja2dyb3VuZDogeWVsbG93O30KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogU2VhcmNoL1JlcGxhY2UgRGVtbzwvaDE+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+CjxidXR0b24gdHlwZT1idXR0b24gb25jbGljaz0ic2VhcmNoKCkiPlNlYXJjaDwvYnV0dG9uPgo8aW5wdXQgdHlwZT10ZXh0IHN0eWxlPSJ3aWR0aDogNWVtIiBpZD1xdWVyeSB2YWx1ZT1pbmRlbnQ+IG9yCjxidXR0b24gdHlwZT1idXR0b24gb25jbGljaz0icmVwbGFjZSgpIj5yZXBsYWNlPC9idXR0b24+IGl0IGJ5CjxpbnB1dCB0eXBlPXRleHQgc3R5bGU9IndpZHRoOiA1ZW0iIGlkPXJlcGxhY2U+CgogICAgPHNjcmlwdD4KdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHttb2RlOiAidGV4dC9odG1sIiwgbGluZU51bWJlcnM6IHRydWV9KTsKCnZhciBsYXN0UG9zID0gbnVsbCwgbGFzdFF1ZXJ5ID0gbnVsbCwgbWFya2VkID0gW107CgpmdW5jdGlvbiB1bm1hcmsoKSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXJrZWQubGVuZ3RoOyArK2kpIG1hcmtlZFtpXSgpOwogIG1hcmtlZC5sZW5ndGggPSAwOwp9CgpmdW5jdGlvbiBzZWFyY2goKSB7CiAgdW5tYXJrKCk7ICAgICAgICAgICAgICAgICAgICAgCiAgdmFyIHRleHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicXVlcnkiKS52YWx1ZTsKICBpZiAoIXRleHQpIHJldHVybjsKICBmb3IgKHZhciBjdXJzb3IgPSBlZGl0b3IuZ2V0U2VhcmNoQ3Vyc29yKHRleHQpOyBjdXJzb3IuZmluZE5leHQoKTspCiAgICBtYXJrZWQucHVzaChlZGl0b3IubWFya1RleHQoY3Vyc29yLmZyb20oKSwgY3Vyc29yLnRvKCksICJzZWFyY2hlZCIpKTsKCiAgaWYgKGxhc3RRdWVyeSAhPSB0ZXh0KSBsYXN0UG9zID0gbnVsbDsKICB2YXIgY3Vyc29yID0gZWRpdG9yLmdldFNlYXJjaEN1cnNvcih0ZXh0LCBsYXN0UG9zIHx8IGVkaXRvci5nZXRDdXJzb3IoKSk7CiAgaWYgKCFjdXJzb3IuZmluZE5leHQoKSkgewogICAgY3Vyc29yID0gZWRpdG9yLmdldFNlYXJjaEN1cnNvcih0ZXh0KTsKICAgIGlmICghY3Vyc29yLmZpbmROZXh0KCkpIHJldHVybjsKICB9CiAgZWRpdG9yLnNldFNlbGVjdGlvbihjdXJzb3IuZnJvbSgpLCBjdXJzb3IudG8oKSk7CiAgbGFzdFF1ZXJ5ID0gdGV4dDsgbGFzdFBvcyA9IGN1cnNvci50bygpOwp9CgpmdW5jdGlvbiByZXBsYWNlKCkgewogIHVubWFyaygpOwogIHZhciB0ZXh0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInF1ZXJ5IikudmFsdWUsCiAgICAgIHJlcGxhY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVwbGFjZSIpLnZhbHVlOwogIGlmICghdGV4dCkgcmV0dXJuOwogIGZvciAodmFyIGN1cnNvciA9IGVkaXRvci5nZXRTZWFyY2hDdXJzb3IodGV4dCk7IGN1cnNvci5maW5kTmV4dCgpOykKICAgIGVkaXRvci5yZXBsYWNlUmFuZ2UocmVwbGFjZSwgY3Vyc29yLmZyb20oKSwgY3Vyc29yLnRvKCkpOwp9Cjwvc2NyaXB0PgoKICAgIDxwPkRlbW9uc3RyYXRpb24gb2Ygc2VhcmNoL3JlcGxhY2UgZnVuY3Rpb25hbGl0eSBhbmQgbWFya2luZwogICAgdGV4dC48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iY3NzL2RvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iY3NzL2JhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBJbi1icm93c2VyIGNvZGUgZWRpdGluZwogICBtYWRlIGJlYXJhYmxlICovCjwvcHJlPgoKPGRpdiBjbGFzcz0iY2xlYXIiPjxkaXYgY2xhc3M9ImxlZnQgYmxrIj4KCiAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDAiPkNvZGVNaXJyb3IgaXMgYSBKYXZhU2NyaXB0IGxpYnJhcnkgdGhhdCBjYW4KICBiZSB1c2VkIHRvIGNyZWF0ZSBhIHJlbGF0aXZlbHkgcGxlYXNhbnQgZWRpdG9yIGludGVyZmFjZSBmb3IKICBjb2RlLWxpa2UgY29udGVudCAmI3gyMDE1OyBjb21wdXRlciBwcm9ncmFtcywgSFRNTCBtYXJrdXAsIGFuZAogIHNpbWlsYXIuIElmIGEgbW9kZSBoYXMgYmVlbiB3cml0dGVuIGZvciB0aGUgbGFuZ3VhZ2UgeW91IGFyZQogIGVkaXRpbmcsIHRoZSBjb2RlIHdpbGwgYmUgY29sb3VyZWQsIGFuZCB0aGUgZWRpdG9yIHdpbGwgb3B0aW9uYWxseQogIGhlbHAgeW91IHdpdGggaW5kZW50YXRpb24uPC9wPgoKICA8cD5UaGlzIGlzIHRoZSBwcm9qZWN0IHBhZ2UgZm9yIENvZGVNaXJyb3IgMiwgdGhlIGN1cnJlbnRseSBtb3JlCiAgYWN0aXZlbHkgZGV2ZWxvcGVkLCBhbmQgcmVjb21tZW5kZWQKICB2ZXJzaW9uLiA8YSBocmVmPSIxL2luZGV4Lmh0bWwiPkNvZGVNaXJyb3IgMTwvYT4gaXMgc3RpbGwgYXZhaWxhYmxlCiAgZnJvbSBoZXJlLjwvcD4KCiAgPGRpdiBjbGFzcz0iY2xlYXIiPjxkaXYgY2xhc3M9ImxlZnQxIGJsayI+CgogICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOiAwIj5TdXBwb3J0ZWQgbW9kZXM6PC9oMj4KCiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL2phdmFzY3JpcHQvaW5kZXguaHRtbCI+SmF2YVNjcmlwdDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS94bWwvaW5kZXguaHRtbCI+WE1ML0hUTUw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY3NzL2luZGV4Lmh0bWwiPkNTUzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9odG1sbWl4ZWQvaW5kZXguaHRtbCI+SFRNTCBtaXhlZC1tb2RlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJtb2RlL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvcGhwL2luZGV4Lmh0bWwiPlBIUDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9kaWZmL2luZGV4Lmh0bWwiPmRpZmY8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvY2xpa2UvaW5kZXguaHRtbCI+QywgSmF2YSwgYW5kIHNpbWlsYXI8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc3RleC9pbmRleC5odG1sIj5zVGVYLCBMYVRlWDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9oYXNrZWxsL2luZGV4Lmh0bWwiPkhhc2tlbGw8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9Im1vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsazwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9yc3QvaW5kZXguaHRtbCI+cmVTdHJ1Y3R1cmVkVGV4dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0ibW9kZS9wbHNxbC9pbmRleC5odG1sIj5QTC9TUUw8L2E+PC9saT4KICAgIDwvdWw+CgogIDwvZGl2PjxkaXYgY2xhc3M9ImxlZnQyIGJsayI+CgogICAgPGgyIHN0eWxlPSJtYXJnaW4tdG9wOiAwIj5Vc2FnZSBkZW1vczo8L2gyPgoKICAgIDx1bD4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vY29tcGxldGUuaHRtbCI+QXV0b2NvbXBsZXRpb248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vbXVzdGFjaGUuaHRtbCI+TW9kZSBvdmVybGF5czwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iZGVtby9zZWFyY2guaHRtbCI+U2VhcmNoL3JlcGxhY2U8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9ImRlbW8vcmVzaXplLmh0bWwiPkF1dG8tcmVzaXppbmcgZWRpdG9yPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL21hcmtlci5odG1sIj5TZXR0aW5nIGJyZWFrcG9pbnRzPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSJkZW1vL2FjdGl2ZWxpbmUuaHRtbCI+SGlnaGxpZ2h0aW5nIHRoZSBjdXJyZW50IGxpbmU8L2E+PC9saT4KICAgIDwvdWw+CgogIDwvZGl2PjwvZGl2PgoKICA8aDIgaWQ9ImNvZGUiPkdldHRpbmcgdGhlIGNvZGU8L2gyPgoKICA8cD5BbGwgb2YgQ29kZU1pcnJvciBpcyByZWxlYXNlZCB1bmRlciBhIDxhCiAgaHJlZj0iTElDRU5TRSI+TUlULXN0eWxlPC9hPiBsaWNlbnNlLiBUbyBnZXQgaXQsIHlvdSBjYW4gZG93bmxvYWQKICB0aGUgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3IuemlwIj5sYXRlc3QKICByZWxlYXNlPC9hPiBvciB0aGUgY3VycmVudCA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yMi1sYXRlc3QuemlwIj5kZXZlbG9wbWVudAogIHNuYXBzaG90PC9hPiBhcyB6aXAgZmlsZXMuIFRvIGNyZWF0ZSBhIGN1c3RvbSBtaW5pZmllZCBzY3JpcHQgZmlsZSwKICB5b3UgY2FuIHVzZSB0aGUgPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+Y29tcHJlc3Npb24gQVBJPC9hPi48L3A+CgogIDxwPldlIHVzZSA8YSBocmVmPSJodHRwOi8vZ2l0LXNjbS5jb20vIj5naXQ8L2E+IGZvciB2ZXJzaW9uIGNvbnRyb2wuCiAgVGhlIG1haW4gcmVwb3NpdG9yeSBjYW4gYmUgZmV0Y2hlZCBpbiB0aGlzIHdheTo8L3A+CgogIDxwcmUgY2xhc3M9ImNvZGUiPmdpdCBjbG9uZSBodHRwOi8vbWFyaWpuaGF2ZXJiZWtlLm5sL2dpdC9jb2RlbWlycm9yMjwvcHJlPgoKICA8cD5Db2RlTWlycm9yIGNhbiBhbHNvIGJlIGZvdW5kIG9uIEdpdEh1YiBhdCA8YQogIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIiPm1hcmlqbmgvQ29kZU1pcnJvcjI8L2E+LgogIElmIHlvdSBwbGFuIHRvIGhhY2sgb24gdGhlIGNvZGUgYW5kIGNvbnRyaWJ1dGUgcGF0Y2hlcywgdGhlIGJlc3Qgd2F5CiAgdG8gZG8gaXQgaXMgdG8gY3JlYXRlIGEgR2l0SHViIGZvcmssIGFuZCBzZW5kIHB1bGwgcmVxdWVzdHMuPC9wPgoKICA8aDIgaWQ9ImRvY3VtZW50aW9uIj5Eb2N1bWVudGF0aW9uPC9oMj4KCiAgPHA+VGhlIDxhIGhyZWY9Im1hbnVhbC5odG1sIj5tYW51YWw8L2E+IGlzIHlvdXIgZmlyc3Qgc3RvcCBmb3IKICBsZWFybmluZyBob3cgdG8gdXNlIHRoaXMgbGlicmFyeS4gSXQgc3RhcnRzIHdpdGggYSBxdWljayBleHBsYW5hdGlvbgogIG9mIGhvdyB0byB1c2UgdGhlIGVkaXRvciwgYW5kIHRoZW4gZGVzY3JpYmVzIGFsbCBvZiB0aGUgKG1hbnkpCiAgb3B0aW9ucyBhbmQgbWV0aG9kcyB0aGF0IENvZGVNaXJyb3IgZXhwb3Nlcy48L3A+CgogIDxwPkZvciB0aG9zZSB3aG8gd2FudCB0byBsZWFybiBtb3JlIGFib3V0IHRoZSBjb2RlLCB0aGVyZSBpcwogIGFuIDxhIGhyZWY9ImludGVybmFscy5odG1sIj5vdmVydmlldyBvZiB0aGUgaW50ZXJuYWxzPC9hPiBhdmFpbGFibGUuCiAgVGhlIDxhIGhyZWY9Imh0dHA6Ly9naXRodWIuY29tL21hcmlqbmgvQ29kZU1pcnJvcjIiPnNvdXJjZSBjb2RlPC9hPgogIGl0c2VsZiBpcywgZm9yIHRoZSBtb3N0IHBhcnQsIGFsc28gd2VsbCBjb21tZW50ZWQuPC9wPgoKICA8aDIgaWQ9InN1cHBvcnQiPlN1cHBvcnQgYW5kIGJ1ZyByZXBvcnRzPC9oMj4KCiAgPHA+VGhlcmUgaXMKICBhIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yIj5Hb29nbGUKICBncm91cDwvYT4gKGEgc29ydCBvZiBtYWlsaW5nIGxpc3QvbmV3c2dyb3VwIHRoaW5nKSBmb3IgZGlzY3Vzc2lvbgogIGFuZCBuZXdzIHJlbGF0ZWQgdG8gQ29kZU1pcnJvci4gUmVwb3J0aW5nIGJ1Z3MgaXMgYmVzdCBkb25lCiAgb24gPGEgaHJlZj0iaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yMi9pc3N1ZXMiPmdpdGh1YjwvYT4uCiAgWW91IGNhbiBhbHNvIGUtbWFpbCBtZQogIGRpcmVjdGx5OiA8YSBocmVmPSJtYWlsdG86bWFyaWpuaEBnbWFpbC5jb20iPk1hcmlqbgogIEhhdmVyYmVrZTwvYT4uPC9wPgoKICA8aDIgaWQ9InN1cHBvcnRlZCI+U3VwcG9ydGVkIGJyb3dzZXJzPC9oMj4KCiAgPHA+VGhlIGZvbGxvd2luZyBicm93c2VycyBhcmUgYWJsZSB0byBydW4gQ29kZU1pcnJvcjo8L3A+CgogIDx1bD4KICAgIDxsaT5GaXJlZm94IDIgb3IgaGlnaGVyPC9saT4KICAgIDxsaT5DaHJvbWUsIGFueSB2ZXJzaW9uPC9saT4KICAgIDxsaT5TYWZhcmkgMyBvciBoaWdoZXI8L2xpPgogICAgPGxpPkludGVybmV0IEV4cGxvcmVyIDYgb3IgaGlnaGVyPC9saT4KICAgIDxsaT5PcGVyYSA5IG9yIGhpZ2hlciAod2l0aCBzb21lIGtleS1oYW5kbGluZyBwcm9ibGVtcyBvbiBPUyBYKTwvbGk+CiAgPC91bD4KCiAgPHA+SSBhbSBub3QgYWN0aXZlbHkgdGVzdGluZyBhZ2FpbnN0IGV2ZXJ5IG5ldyBicm93c2VyIHJlbGVhc2UsIGFuZAogIHZlbmRvcnMgaGF2ZSBhIGhhYml0IG9mIGludHJvZHVjaW5nIGJ1Z3MgYWxsIHRoZSB0aW1lLCBzbyBJIGFtCiAgcmVseWluZyBvbiB0aGUgY29tbXVuaXR5IHRvIHRlbGwgbWUgd2hlbiBzb21ldGhpbmcgYnJlYWtzLgogIFNlZSA8YSBocmVmPSIjc3VwcG9ydCI+aGVyZTwvYT4gZm9yIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0CiAgbWUuPC9wPgoKPC9kaXY+Cgo8ZGl2IGNsYXNzPSJyaWdodCBibGsiPgoKICA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci56aXAiIGNsYXNzPSJkb3dubG9hZCI+RG93bmxvYWQgdGhlIGxhdGVzdCByZWxlYXNlPC9hPgoKICA8aDI+TWFrZSBhIGRvbmF0aW9uPC9oMj4KCiAgPHVsPgogICAgPGxpPjxzcGFuIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXlwYWwnKS5zdWJtaXQoKTsiIGNsYXNzPSJxdWFzaWxpbmsiPlBheXBhbDwvc3Bhbj48L2xpPgogICAgPGxpPjxzcGFuIG9uY2xpY2s9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdiYW5raW5mbycpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOyIgY2xhc3M9InF1YXNpbGluayI+QmFuazwvc3Bhbj48L2xpPgogIDwvdWw+CgogIDxwIGlkPSJiYW5raW5mbyIgc3R5bGU9ImRpc3BsYXk6IG5vbmU7Ij4KICAgIEJhbms6IDxpPlJhYm9iYW5rPC9pPjxici8+CiAgICBDb3VudHJ5OiA8aT5OZXRoZXJsYW5kczwvaT48YnIvPgogICAgU1dJRlQ6IDxpPlJBQk9OTDJVPC9pPjxici8+CiAgICBBY2NvdW50OiA8aT4xNDc4NTA3NzA8L2k+PGJyLz4KICAgIE5hbWU6IDxpPk1hcmlqbiBIYXZlcmJla2U8L2k+PGJyLz4KICAgIElCQU46IDxpPk5MMjYgUkFCTyAwMTQ3IDg1MDcgNzA8L2k+CiAgPC9wPgoKICA8aDI+UmVsZWFzZXM6PC9oMj4KCiAgPHAgY2xhc3M9InJlbCI+MjYtMDUtMjAxMTogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMi4wMS56aXAiPlZlcnNpb24gMi4wMTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Im1vZGUvc21hbGx0YWxrL2luZGV4Lmh0bWwiPlNtYWxsdGFsayBtb2RlPC9hPi48L2xpPgogICAgPGxpPkFkZCBhIDxhIGhyZWY9Im1vZGUvcnN0L2luZGV4Lmh0bWwiPnJlU3RydWN0dXJlZFRleHQgbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob24gbW9kZTwvYT4uPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJtb2RlL3Bsc3FsL2luZGV4Lmh0bWwiPlBML1NRTCBtb2RlPC9hPi48L2xpPgogICAgPGxpPjxjb2RlPmNvb3Jkc0NoYXI8L2NvZGU+IG5vdyB3b3JrczwvbGk+CiAgICA8bGk+Rml4IGEgcHJvYmxlbSB3aGVyZSA8Y29kZT5vbkN1cnNvckFjdGl2aXR5PC9jb2RlPiBpbnRlcmZlcmVkIHdpdGggPGNvZGU+b25DaGFuZ2U8L2NvZGU+LjwvbGk+CiAgICA8bGk+Rml4IGEgbnVtYmVyIG9mIHNjcm9sbGluZyBhbmQgbW91c2UtY2xpY2stcG9zaXRpb24gZ2xpdGNoZXMuPC9saT4KICAgIDxsaT5QYXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjaGFuZ2VkIGxpbmVzIHRvIDxjb2RlPm9uQ2hhbmdlPC9jb2RlPi48L2xpPgogICAgPGxpPlN1cHBvcnQgY21kLXVwL2Rvd24gb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCB0cmlwbGUtY2xpY2sgbGluZSBzZWxlY3Rpb24uPC9saT4KICAgIDxsaT5Eb24ndCBoYW5kbGUgc2hpZnQgd2hlbiBjaGFuZ2luZyB0aGUgc2VsZWN0aW9uIHRocm91Z2ggdGhlIEFQSS48L2xpPgogICAgPGxpPlN1cHBvcnQgPGNvZGU+Im5vY3Vyc29yIjwvY29kZT4gbW9kZSBmb3IgPGNvZGU+cmVhZE9ubHk8L2NvZGU+IG9wdGlvbi48L2xpPgogICAgPGxpPkFkZCBhbiA8Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlPC9jb2RlPiBvcHRpb24uPC9saT4KICAgIDxsaT5GaXggdGhlIGNvbnRleHQgbWVudSBmb3IgRmlyZWZveC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjI4LTAzLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTIuMC56aXAiPlZlcnNpb24gMi4wPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Db2RlTWlycm9yIDIgaXMgYSBjb21wbGV0ZSByZXdyaXRlIHRoYXQncwogIGZhc3Rlciwgc21hbGxlciwgc2ltcGxlciB0byB1c2UsIGFuZCBsZXNzIGRlcGVuZGVudCBvbiBicm93c2VyCiAgcXVpcmtzLiBTZWUgPGEgaHJlZj0iaW50ZXJuYWxzLmh0bWwiPnRoaXM8L2E+CiAgYW5kIDxhIGhyZWY9Imh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9ncm91cC9jb2RlbWlycm9yL2Jyb3dzZV90aHJlYWQvdGhyZWFkLzVhOGU4OTQwMjRhOWY1ODAiPnRoaXM8L2E+CiAgZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9hPgoKICA8cCBjbGFzcz0icmVsIj4yOC0wMy0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0xLjAuemlwIj5WZXJzaW9uIDEuMDwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkZpeCBlcnJvciB3aGVuIGRlYnVnIGhpc3Rvcnkgb3ZlcmZsb3dzLjwvbGk+CiAgICA8bGk+UmVmaW5lIGhhbmRsaW5nIG9mIEMjIHZlcmJhdGltIHN0cmluZ3MuPC9saT4KICAgIDxsaT5GaXggc29tZSBpc3N1ZXMgd2l0aCBKYXZhU2NyaXB0IGluZGVudGF0aW9uLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MjItMDItMjAxMTogPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hcmlqbmgvY29kZW1pcnJvcjIvdHJlZS9iZXRhMiI+VmVyc2lvbiAyLjAgYmV0YSAyPC9hPjo8L3A+CiAgPHAgY2xhc3M9InJlbC1ub3RlIj5Tb21ld2hhdGUgbW9yZSBtYXR1cmUgQVBJLCBsb3RzIG9mIGJ1Z3Mgc2hha2VuIG91dC48L2E+CgogIDxwIGNsYXNzPSJyZWwiPjE3LTAyLTIwMTE6IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuOTQuemlwIj5WZXJzaW9uIDAuOTQ8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT48Y29kZT50YWJNb2RlOiAic3BhY2VzIjwvY29kZT4gd2FzIG1vZGlmaWVkIHNsaWdodGx5IChub3cgaW5kZW50cyB3aGVuIHNvbWV0aGluZyBpcyBzZWxlY3RlZCkuPC9saT4KICAgIDxsaT5GaXhlcyBhIGJ1ZyB0aGF0IHdvdWxkIGNhdXNlIHRoZSBzZWxlY3Rpb24gY29kZSB0byBicmVhayBvbiBzb21lIElFIHZlcnNpb25zLjwvbGk+CiAgICA8bGk+RGlzYWJsaW5nIHNwZWxsLWNoZWNrIG9uIFdlYktpdCBicm93c2VycyBub3cgd29ya3MuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4wOC0wMi0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvMi8iPlZlcnNpb24gMi4wIGJldGEgMTwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+Q29kZU1pcnJvciAyIGlzIGEgY29tcGxldGUgcmV3cml0ZSBvZgogIENvZGVNaXJyb3IsIG5vIGxvbmdlciBkZXBlbmRpbmcgb24gYW4gZWRpdGFibGUgZnJhbWUuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4xOS0wMS0yMDExOiA8YSBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkzLnppcCI+VmVyc2lvbiAwLjkzPC9hPjo8L3A+CiAgPHVsIGNsYXNzPSJyZWwtbm90ZSI+CiAgICA8bGk+QWRkZWQgYSA8YSBocmVmPSJjb250cmliL3JlZ2V4L2luZGV4Lmh0bWwiPlJlZ3VsYXIgRXhwcmVzc2lvbjwvYT4gcGFyc2VyLjwvbGk+CiAgICA8bGk+Rml4ZXMgdG8gdGhlIFBIUCBwYXJzZXIuPC9saT4KICAgIDxsaT5TdXBwb3J0IGZvciByZWd1bGFyIGV4cHJlc3Npb24gaW4gc2VhcmNoL3JlcGxhY2UuPC9saT4KICAgIDxsaT5BZGQgPGNvZGU+c2F2ZTwvY29kZT4gbWV0aG9kIHRvIGluc3RhbmNlcyBjcmVhdGVkIHdpdGggPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPi48L2xpPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciBNUyBULVNRTCBpbiB0aGUgU1FMIHBhcnNlci48L2xpPgogICAgPGxpPlN1cHBvcnQgdXNlIG9mIENTUyBjbGFzc2VzIGZvciBoaWdobGlnaHRpbmcgYnJhY2tldHMuPC9saT4KICAgIDxsaT5GaXggeWV0IGFub3RoZXIgaGFuZyB3aXRoIGxpbmUtbnVtYmVyaW5nIGluIGhpZGRlbiBlZGl0b3JzLjwvbGk+CiAgPC91bD4KCiAgPHA+PGEgaHJlZj0ib2xkcmVsZWFzZS5odG1sIj5PbGRlciByZWxlYXNlcy4uLjwvYT48L3A+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCiAgPGZvcm0gYWN0aW9uPSJodHRwczovL3d3dy5wYXlwYWwuY29tL2NnaS1iaW4vd2Vic2NyIiBtZXRob2Q9InBvc3QiIGlkPSJwYXlwYWwiPgogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY21kIiB2YWx1ZT0iX3MteGNsaWNrIi8+CiAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJob3N0ZWRfYnV0dG9uX2lkIiB2YWx1ZT0iM0ZWSFM1RkdVWTdDQyIvPgogIDwvZm9ybT4KCiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iY3NzL2ZvbnQuanMiPjwvc2NyaXB0PgoKICA8L2JvZHk+CjwvaHRtbD4KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/internals.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IEludGVybmFsczwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJjc3MvZG9jcy5jc3MiLz4KICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ii8+CiAgICA8c3R5bGU+ZGwgZGwge21hcmdpbjogMDt9PC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iY3NzL2JhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiAoUmUtKSBJbXBsZW1lbnRpbmcgQSBTeW50YXgtCiAgIEhpZ2hsaWdodGluZyBFZGl0b3IgaW4gSmF2YVNjcmlwdCAqLwo8L3ByZT4KCjxkaXYgY2xhc3M9ImNsZWFyIj48ZGl2IGNsYXNzPSJsZWZ0YmlnIGJsayI+Cgo8cCBzdHlsZT0iZm9udC1zaXplOiA4NSUiIGlkPSJpbnRybyI+CiAgPHN0cm9uZz5Ub3BpYzo8L3N0cm9uZz4gSmF2YVNjcmlwdCwgY29kZSBlZGl0b3IgaW1wbGVtZW50YXRpb248YnI+CiAgPHN0cm9uZz5BdXRob3I6PC9zdHJvbmc+IE1hcmlqbiBIYXZlcmJla2U8YnI+CiAgPHN0cm9uZz5EYXRlOjwvc3Ryb25nPiBNYXJjaCAybmQgMjAxMQo8L3A+Cgo8cD5UaGlzIGlzIGEgZm9sbG93dXAgdG8KbXkgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L3N0b3J5Lmh0bWwiPkJydXRhbCBPZHlzc2V5IHRvIHRoZQpEYXJrIFNpZGUgb2YgdGhlIERPTSBUcmVlPC9hPiBzdG9yeS4gVGhhdCBvbmUgZGVzY3JpYmVzIHRoZQptaW5kLWJlbmRpbmcgcHJvY2VzcyBvZiBpbXBsZW1lbnRpbmcgKHdoYXQgd291bGQgYmVjb21lKSBDb2RlTWlycm9yIDEuClRoaXMgb25lIGRlc2NyaWJlcyB0aGUgaW50ZXJuYWxzIG9mIENvZGVNaXJyb3IgMiwgYSBjb21wbGV0ZSByZXdyaXRlCmFuZCByZXRoaW5rIG9mIHRoZSBvbGQgY29kZSBiYXNlLiBJIHdhbnRlZCB0byBnaXZlIHRoaXMgcGllY2UgYW5vdGhlcgpIdW50ZXIgVGhvbXBzb24gY29weWNhdCBzdWJ0aXRsZSwgYnV0IHNvbWVob3cgdGhhdCB3b3VsZCBiZSBvdXQgb2YKcGxhY2XigJR0aGUgcHJvY2VzcyB0aGlzIHRpbWUgYXJvdW5kIHdhcyBvbmUgb2Ygc3RyYWlnaHRmb3J3YXJkCmVuZ2luZWVyaW5nLCByZXF1aXJpbmcgbm8gc2VyaW91cyBtaW5kLWJlbmRpbmcgd2hhdHNvZXZlci48L3A+Cgo8cD5Tbywgd2hhdCBpcyB3cm9uZyB3aXRoIENvZGVNaXJyb3IgMT8gSSdkIGVzdGltYXRlLCBieSBtYWlsaW5nIGxpc3QKYWN0aXZpdHkgYW5kIGdlbmVyYWwgc2VhcmNoLWVuZ2luZSBwcmVzZW5jZSwgdGhhdCBpdCBoYXMgYmVlbgppbnRlZ3JhdGVkIGludG8gYWJvdXQgYSB0aG91c2FuZCBzeXN0ZW1zIGJ5IG5vdy4gVGhlIG1vc3QgcHJvbWluZW50Cm9uZSwgc2luY2UgYSBmZXcgd2Vla3MsCmJlaW5nIDxhIGhyZWY9Imh0dHA6Ly9nb29nbGVjb2RlLmJsb2dzcG90LmNvbS8yMDExLzAxL21ha2UtcXVpY2stZml4ZXMtcXVpY2tlci1vbi1nb29nbGUuaHRtbCI+R29vZ2xlCmNvZGUncyBwcm9qZWN0IGhvc3Rpbmc8L2E+LiBJdCB3b3JrcywgYW5kIGl0J3MgYmVpbmcgdXNlZCB3aWRlbHkuPC9hPgoKPHA+U3RpbGwsIEkgZGlkIG5vdCBzdGFydCByZXBsYWNpbmcgaXQgYmVjYXVzZSBJIHdhcyBib3JlZC4gQ29kZU1pcnJvcgoxIHdhcyBoZWF2aWx5IHJlbGlhbnQgb24gPGNvZGU+ZGVzaWduTW9kZTwvY29kZT4Kb3IgPGNvZGU+Y29udGVudEVkaXRhYmxlPC9jb2RlPiAoZGVwZW5kaW5nIG9uIHRoZSBicm93c2VyKS4gTmVpdGhlciBvZgp0aGVzZSBhcmUgd2VsbCBzcGVjaWZpZWQgKEhUTUw1IHRyaWVzCnRvIDxhIGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2VkaXRpbmcuaHRtbCNjb250ZW50ZWRpdGFibGUiPnNwZWNpZnk8L2E+CnRoZWlyIGJhc2ljcyksIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhleSB0ZW5kIHRvIGJlIG9uZSBvZiB0aGUgbW9yZQpvYnNjdXJlIGFuZCBidWdneSBhcmVhcyBvZiBicm93c2VyIGZ1bmN0aW9uYWxpdHnigJRDb2RlTWlycm9yLCBieSB1c2luZwp0aGlzIGZ1bmN0aW9uYWxpdHkgaW4gYSBub24tdHlwaWNhbCB3YXksIHdhcyBjb25zdGFudGx5IHJ1bm5pbmcgdXAKYWdhaW5zdCBicm93c2VyIGJ1Z3MuIFdlYktpdCB3b3VsZG4ndCBzaG93IGFuIGVtcHR5IGxpbmUgYXQgdGhlIGVuZCBvZgp0aGUgZG9jdW1lbnQsIGFuZCBpbiBzb21lIHJlbGVhc2VzIHdvdWxkIHN1ZGRlbmx5IGdldCB1bmJlYXJhYmx5IHNsb3cuCkZpcmVmb3ggd291bGQgc2hvdyB0aGUgY3Vyc29yIGluIHRoZSB3cm9uZyBwbGFjZS4gSW50ZXJuZXQgRXhwbG9yZXIKd291bGQgaW5zaXN0IG9uIGxpbmtpZnlpbmcgZXZlcnl0aGluZyB0aGF0IGxvb2tlZCBsaWtlIGEgVVJMIG9yIGVtYWlsCmFkZHJlc3MsIGEgYmVoYXZpb3VyIHRoYXQgY2FuJ3QgYmUgdHVybmVkIG9mZi4gU29tZSBidWdzIEkgbWFuYWdlZCB0bwp3b3JrIGFyb3VuZCAod2hpY2ggd2FzIG9mdGVuIGEgZnJ1c3RyYXRpbmcsIHBhaW5mdWwgcHJvY2VzcyksIG90aGVycywKc3VjaCBhcyB0aGUgRmlyZWZveCBjdXJzb3IgcGxhY2VtZW50LCBJIGdhdmUgdXAgb24sIGFuZCBoYWQgdG8gdGVsbAp1c2VyIGFmdGVyIHVzZXIgdGhhdCB0aGV5IHdlcmUga25vd24gcHJvYmxlbXMsIGJ1dCBub3Qgc29tZXRoaW5nIEkKY291bGQgaGVscC48L3A+Cgo8cD5BbHNvLCB0aGVyZSBpcyB0aGUgZmFjdCB0aGF0IDxjb2RlPmRlc2lnbk1vZGU8L2NvZGU+ICh3aGljaCBzZWVtZWQKdG8gYmUgbGVzcyBidWdneSB0aGFuIDxjb2RlPmNvbnRlbnRFZGl0YWJsZTwvY29kZT4gaW4gV2Via2l0IGFuZApGaXJlZm94LCBhbmQgd2FzIHRodXMgdXNlZCBieSBDb2RlTWlycm9yIDEgaW4gdGhvc2UgYnJvd3NlcnMpIHJlcXVpcmVzCmEgZnJhbWUuIEZyYW1lcyBhcmUgYW5vdGhlciB0cmlja3kgYXJlYS4gSXQgdGFrZXMgc29tZSBlZmZvcnQgdG8KcHJldmVudCBnZXR0aW5nIHRyaXBwZWQgdXAgYnkgZG9tYWluIHJlc3RyaWN0aW9ucywgdGhleSBkb24ndAppbml0aWFsaXplIHN5bmNocm9ub3VzbHksIGJlaGF2ZSBzdHJhbmdlbHkgaW4gcmVzcG9uc2UgdG8gdGhlIGJhY2sKYnV0dG9uLCBhbmQsIG9uIHNldmVyYWwgYnJvd3NlcnMsIGNhbid0IGJlIG1vdmVkIGFyb3VuZCB0aGUgRE9NCndpdGhvdXQgaGF2aW5nIHRoZW0gcmUtaW5pdGlhbGl6ZS4gVGhleSBkaWQgcHJvdmlkZSBhIHZlcnkgbmljZSB3YXkgdG8KbmFtZXNwYWNlIHRoZSBsaWJyYXJ5LCB0aG91Z2jigJRDb2RlTWlycm9yIDEgY291bGQgZnJlZWx5IHBvbGx1dGUgdGhlCm5hbWVzcGFjZSBpbnNpZGUgdGhlIGZyYW1lLjwvcD4KCjxwPkZpbmFsbHksIHdvcmtpbmcgd2l0aCBhbiBlZGl0YWJsZSBkb2N1bWVudCBtZWFucyB3b3JraW5nIHdpdGgKc2VsZWN0aW9uIGluIGFyYml0cmFyeSBET00gc3RydWN0dXJlcy4gSW50ZXJuZXQgRXhwbG9yZXIgKDggYW5kCmJlZm9yZSkgaGFzIGFuIHV0dGVybHkgZGlmZmVyZW50IChhbmQgYXdrd2FyZCkgc2VsZWN0aW9uIEFQSSB0aGFuIGFsbApvZiB0aGUgb3RoZXIgYnJvd3NlcnMsIGFuZCBldmVuIGFtb25nIHRoZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIG9mCjxjb2RlPmRvY3VtZW50LnNlbGVjdGlvbjwvY29kZT4sIGRldGFpbHMgYWJvdXQgaG93IGV4YWN0bHkgYSBzZWxlY3Rpb24KaXMgcmVwcmVzZW50ZWQgdmFyeSBxdWl0ZSBhIGJpdC4gQWRkIHRvIHRoYXQgdGhlIGZhY3QgdGhhdCBPcGVyYSdzCnNlbGVjdGlvbiBzdXBwb3J0IHRlbmRlZCB0byBiZSB2ZXJ5IGJ1Z2d5IHVudGlsIHJlY2VudGx5LCBhbmQgeW91IGNhbgppbWFnaW5lIHdoeSBDb2RlTWlycm9yIDEgY29udGFpbnMgNzAwIGxpbmVzIG9mIHNlbGVjdGlvbi1oYW5kbGluZwpjb2RlLjwvcD4KCjxwPkFuZCB0aGF0IGJyaW5ncyB1cyB0byB0aGUgbWFpbiBpc3N1ZSB3aXRoIHRoZSBDb2RlTWlycm9yIDEKY29kZSBiYXNlOiBUaGUgcHJvcG9ydGlvbiBvZiBicm93c2VyLWJ1Zy13b3JrYXJvdW5kcyB0byByZWFsCmFwcGxpY2F0aW9uIGNvZGUgd2FzIGdldHRpbmcgZGFuZ2Vyb3VzbHkgaGlnaC4gQnkgYnVpbGRpbmcgb24gdG9wIG9mIGEKZmV3IGRvZGd5IGZlYXR1cmVzLCBJIHB1dCB0aGUgc3lzdGVtIGluIGEgdnVsbmVyYWJsZSBwb3NpdGlvbuKAlGFueQppbmNvbXBhdGliaWxpdHkgYW5kIGJ1Z2dpbmVzcyBpbiB0aGVzZSBmZWF0dXJlcywgSSBoYWQgdG8gcGFwZXIgb3Zlcgp3aXRoIG15IG93biBjb2RlLiBOb3Qgb25seSBkaWQgSSBoYXZlIHRvIGRvIHNvbWUgc2VyaW91cyBzdHVudC13b3JrIHRvCmdldCBpdCB0byB3b3JrIG9uIG9sZGVyIGJyb3dzZXJzIChhcyBkZXRhaWxlZCBpbiB0aGUKcHJldmlvdXMgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L3N0b3J5Lmh0bWwiPnN0b3J5PC9hPiksIHRoaW5ncwphbHNvIGtlcHQgYnJlYWtpbmcgaW4gbmV3bHkgcmVsZWFzZWQgdmVyc2lvbnMsIHJlcXVpcmluZyBtZSB0byBjb21lIHVwCndpdGggPGVtPm5ldzwvZW0+IHNjYXJ5IGhhY2tzIGluIG9yZGVyIHRvIGtlZXAgdXAuIFRoaXMgd2FzIHN0YXJ0aW5nCnRvIGxvc2UgaXRzIGFwcGVhbC48L3A+Cgo8aDIgaWQ9ImFwcHJvYWNoIj5HZW5lcmFsIEFwcHJvYWNoPC9oMj4KCjxwPldoYXQgQ29kZU1pcnJvciAyIGRvZXMgaXMgdHJ5IHRvIHNpZGVzdGVwIG1vc3Qgb2YgdGhlIGhhaXJ5IGhhY2tzCnRoYXQgY2FtZSB1cCBpbiB2ZXJzaW9uIDEuIEkgb3dlIGEgbG90IHRvIHRoZQo8YSBocmVmPSJodHRwOi8vYWNlLmFqYXgub3JnIj5BQ0U8L2E+IGVkaXRvciBmb3IgaW5zcGlyYXRpb24gb24gaG93IHRvCmFwcHJvYWNoIHRoaXMuPC9wPgoKPHA+SSBhYnNvbHV0ZWx5IGRpZCBub3Qgd2FudCB0byBiZSBjb21wbGV0ZWx5IHJlbGlhbnQgb24ga2V5IGV2ZW50cyB0bwpnZW5lcmF0ZSBteSBpbnB1dC4gRXZlcnkgSmF2YVNjcmlwdCBwcm9ncmFtbWVyIGtub3dzIHRoYXQga2V5IGV2ZW50CmluZm9ybWF0aW9uIGlzIGhvcnJpYmxlIGFuZCBpbmNvbXBsZXRlLiBTb21lIHBlb3BsZSAobW9zdCBhd2Vzb21lbHkKTWloYWkgQmF6b24gd2l0aCA8YSBocmVmPSJodHRwOi8veW1hY3Mub3JnIj5ZbWFjczwvYT4pIGhhdmUgYmVlbiBhYmxlCnRvIGJ1aWxkIG1vcmUgb3IgbGVzcyBmdW5jdGlvbmluZyBlZGl0b3JzIGJ5IGRpcmVjdGx5IHJlYWRpbmcga2V5CmV2ZW50cywgYnV0IGl0IHRha2VzIGEgbG90IG9mIHdvcmsgKHRoZSBraW5kIG9mIG5ldmVyLWVuZGluZywgZnJhZ2lsZQp3b3JrIEkgZGVzY3JpYmVkIGVhcmxpZXIpLCBhbmQgd2lsbCBuZXZlciBiZSBhYmxlIHRvIHByb3Blcmx5IHN1cHBvcnQKdGhpbmdzIGxpa2UgbXVsdGkta2V5c3Rva2UgaW50ZXJuYXRpb25hbCBjaGFyYWN0ZXIgaW5wdXQuPC9wPgoKPHA+U28gd2hhdCBJIGRvIGlzIGZvY3VzIGEgaGlkZGVuIHRleHRhcmVhLCBhbmQgbGV0IHRoZSBicm93c2VyCmJlbGlldmUgdGhhdCB0aGUgdXNlciBpcyB0eXBpbmcgaW50byB0aGF0LiBXaGF0IHdlIHNob3cgdG8gdGhlIHVzZXIgaXMKYSBET00gc3RydWN0dXJlIHdlIGJ1aWx0IHRvIHJlcHJlc2VudCBoaXMgZG9jdW1lbnQuIElmIHRoaXMgaXMgdXBkYXRlZApxdWlja2x5IGVub3VnaCwgYW5kIHNob3dzIHNvbWUga2luZCBvZiBiZWxpZXZhYmxlIGN1cnNvciwgaXQgZmVlbHMKbGlrZSBhIHJlYWwgdGV4dC1pbnB1dCBjb250cm9sLjwvcD4KCjxwPkFub3RoZXIgYmlnIHdpbiBpcyB0aGF0IHRoaXMgRE9NIHJlcHJlc2VudGF0aW9uIGRvZXMgbm90IGhhdmUgdG8Kc3BhbiB0aGUgd2hvbGUgZG9jdW1lbnQuIFNvbWUgQ29kZU1pcnJvciAxIHVzZXJzIGluc2lzdGVkIHRoYXQgdGhleQpuZWVkZWQgdG8gcHV0IGEgMzAgdGhvdXNhbmQgbGluZSBYTUwgZG9jdW1lbnQgaW50byBDb2RlTWlycm9yLiBQdXR0aW5nCmFsbCB0aGF0IGludG8gdGhlIERPTSB0YWtlcyBhIHdoaWxlLCBlc3BlY2lhbGx5IHNpbmNlLCBmb3Igc29tZQpyZWFzb24sIGFuIGVkaXRhYmxlIERPTSB0cmVlIGlzIHNsb3dlciB0aGFuIGEgbm9ybWFsIG9uZSBvbiBtb3N0CmJyb3dzZXJzLiBJZiB3ZSBoYXZlIGZ1bGwgY29udHJvbCBvdmVyIHdoYXQgd2Ugc2hvdywgd2UgbXVzdCBvbmx5CmVuc3VyZSB0aGF0IHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIGRvY3VtZW50IGhhcyBiZWVuIGFkZGVkLCBhbmQgY2FuCmRvIHRoZSByZXN0IG9ubHkgd2hlbiBuZWVkZWQuIChGb3J0dW5hdGVseSwgdGhlIDxjb2RlPm9uc2Nyb2xsPC9jb2RlPgpldmVudCB3b3JrcyBhbG1vc3QgdGhlIHNhbWUgb24gYWxsIGJyb3dzZXJzLCBhbmQgbGVuZHMgaXRzZWxmIHdlbGwgdG8KZGlzcGxheWluZyB0aGluZ3Mgb25seSBhcyB0aGV5IGFyZSBzY3JvbGxlZCBpbnRvIHZpZXcuKTwvcD4KCjxoMiBpZD0iaW5wdXQiPklucHV0PC9oMj4KCjxwPkFDRSB1c2VzIGl0cyBoaWRkZW4gdGV4dGFyZWEgb25seSBhcyBhIHRleHQgaW5wdXQgc2hpbSwgYW5kIGRvZXMKYWxsIGN1cnNvciBtb3ZlbWVudCBhbmQgdGhpbmdzIGxpa2UgdGV4dCBkZWxldGlvbiBpdHNlbGYgYnkgZGlyZWN0bHkKaGFuZGxpbmcga2V5IGV2ZW50cy4gQ29kZU1pcnJvcidzIHdheSBpcyB0byBsZXQgdGhlIGJyb3dzZXIgZG8gaXRzCnRoaW5nIGFzIG11Y2ggYXMgcG9zc2libGUsIGFuZCBub3QsIGZvciBleGFtcGxlLCBkZWZpbmUgaXRzIG93biBzZXQgb2YKa2V5IGJpbmRpbmdzLiBPbmUgd2F5IHRvIGRvIHRoaXMgd291bGQgaGF2ZSBiZWVuIHRvIGhhdmUgdGhlIHdob2xlCmRvY3VtZW50IGluc2lkZSB0aGUgaGlkZGVuIHRleHRhcmVhLCBhbmQgYWZ0ZXIgZWFjaCBrZXkgZXZlbnQgdXBkYXRlCnRoZSBkaXNwbGF5IERPTSB0byByZWZsZWN0IHdoYXQncyBpbiB0aGF0IHRleHRhcmVhLjwvcD4KCjxwPlRoYXQnZCBiZSBzaW1wbGUsIGJ1dCBpdCBpcyBub3QgcmVhbGlzdGljLiBGb3IgZXZlbiBtZWRpdW0tc2l6ZWQKZG9jdW1lbnQgdGhlIGVkaXRvciB3b3VsZCBiZSBjb25zdGFudGx5IG11bmdpbmcgaHVnZSBzdHJpbmdzLCBhbmQgZ2V0CnRlcnJpYmx5IHNsb3cuIFdoYXQgQ29kZU1pcnJvciAyIGRvZXMgaXMgcHV0IHRoZSBjdXJyZW50IHNlbGVjdGlvbiwKYWxvbmcgd2l0aCBhbiBleHRyYSBsaW5lIG9uIHRoZSB0b3AgYW5kIG9uIHRoZSBib3R0b20sIGludG8gdGhlCnRleHRhcmVhLjwvcD4KCjxwPlRoaXMgbWVhbnMgdGhhdCB0aGUgYXJyb3cga2V5cyAoYW5kIHRoZWlyIGN0cmwtdmFyaWF0aW9ucyksIGhvbWUsCmVuZCwgZXRjZXRlcmEsIGRvIG5vdCBoYXZlIHRvIGJlIGhhbmRsZWQgc3BlY2lhbGx5LiBXZSBqdXN0IHJlYWQgdGhlCmN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dGFyZWEsIGFuZCB1cGRhdGUgb3VyIGN1cnNvciB0byBtYXRjaCBpdC4KQWxzbywgY29weSBhbmQgcGFzdGUgd29yayBwcmV0dHkgbXVjaCBmb3IgZnJlZSwgYW5kIHBlb3BsZSBnZXQgdGhlaXIKbmF0aXZlIGtleSBiaW5kaW5ncywgd2l0aG91dCBhbnkgc3BlY2lhbCB3b3JrIG9uIG15IHBhcnQuIEZvciBleGFtcGxlLApJIGhhdmUgZW1hY3Mga2V5IGJpbmRpbmdzIGNvbmZpZ3VyZWQgZm9yIENocm9tZSBhbmQgRmlyZWZveC4gVGhlcmUgaXMKbm8gd2F5IGZvciBhIHNjcmlwdCB0byBkZXRlY3QgdGhpcy48L3A+Cgo8cD5PZiBjb3Vyc2UsIHNpbmNlIG9ubHkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBkb2N1bWVudCBzaXRzIGluIHRoZQp0ZXh0YXJlYSwga2V5cyBsaWtlIHBhZ2UgdXAgYW5kIGN0cmwtZW5kIHdvbid0IGRvIHRoZSByaWdodCB0aGluZy4KQ29kZU1pcnJvciBpcyBjYXRjaGluZyB0aG9zZSBldmVudHMgYW5kIGhhbmRsaW5nIHRoZW0gaXRzZWxmLjwvcD4KCjxoMiBpZD0ic2VsZWN0aW9uIj5TZWxlY3Rpb248L2gyPgoKPHA+R2V0dGluZyBhbmQgc2V0dGluZyB0aGUgc2VsZWN0aW9uIHJhbmdlIG9mIGEgdGV4dGFyZWEgaW4gbW9kZXJuCmJyb3dzZXJzIGlzIHRyaXZpYWzigJR5b3UganVzdCB1c2UgdGhlIDxjb2RlPnNlbGVjdGlvblN0YXJ0PC9jb2RlPgphbmQgPGNvZGU+c2VsZWN0aW9uRW5kPC9jb2RlPiBwcm9wZXJ0aWVzLiBPbiBJRSB5b3UgaGF2ZSB0byBkbyBzb21lCmluc2FuZSBzdHVmZiB3aXRoIHRlbXBvcmFyeSByYW5nZXMgYW5kIGNvbXBlbnNhdGluZyBmb3IgdGhlIGZhY3QgdGhhdAptb3ZpbmcgdGhlIHNlbGVjdGlvbiBieSBhICdjaGFyYWN0ZXInIHdpbGwgdHJlYXQgXHJcbiBhcyBhIHNpbmdsZQpjaGFyYWN0ZXIsIGJ1dCBldmVuIHRoZXJlIGl0IGlzIHBvc3NpYmxlIHRvIGJ1aWxkIGZ1bmN0aW9ucyB0aGF0CnJlbGlhYmx5IHNldCBhbmQgZ2V0IHRoZSBzZWxlY3Rpb24gcmFuZ2UuPC9wPgoKPHA+QnV0IGNvbnNpZGVyIHRoaXMgdHlwaWNhbCBjYXNlOiBXaGVuIEknbSBzb21ld2hlcmUgaW4gbXkgZG9jdW1lbnQsCnByZXNzIHNoaWZ0LCBhbmQgcHJlc3MgdGhlIHVwIGFycm93LCBzb21ldGhpbmcgZ2V0cyBzZWxlY3RlZC4gVGhlbiwgaWYKSSwgc3RpbGwgaG9sZGluZyBzaGlmdCwgcHJlc3MgdGhlIHVwIGFycm93IGFnYWluLCB0aGUgdG9wIG9mIG15CnNlbGVjdGlvbiBpcyBhZGp1c3RlZC4gVGhlIHNlbGVjdGlvbiByZW1lbWJlcnMgd2hlcmUgaXRzIDxlbT5oZWFkPC9lbT4KYW5kIGl0cyA8ZW0+YW5jaG9yPC9lbT4gYXJlLCBhbmQgbW92ZXMgdGhlIGhlYWQgd2hlbiB3ZSBzaGlmdC1tb3ZlLgpUaGlzIGlzIGEgZ2VuZXJhbGx5IGFjY2VwdGVkIHByb3BlcnR5IG9mIHNlbGVjdGlvbnMsIGFuZCBkb25lIHJpZ2h0IGJ5CmV2ZXJ5IGVkaXRpbmcgY29tcG9uZW50IGJ1aWx0IGluIHRoZSBwYXN0IHR3ZW50eSB5ZWFycy48L3A+Cgo8cD5CdXQgbm90IHNvbWV0aGluZyB0aGF0IHRoZSBicm93c2VyIHNlbGVjdGlvbiBBUElzIGV4cG9zZS48L3A+Cgo8cD5HcmVhdC4gU28gd2hlbiBzb21lb25lIGNyZWF0ZXMgYW4gJ3Vwc2lkZS1kb3duJyBzZWxlY3Rpb24sIHRoZSBuZXh0CnRpbWUgQ29kZU1pcnJvciBoYXMgdG8gdXBkYXRlIHRoZSB0ZXh0YXJlYSwgaXQnbGwgcmUtY3JlYXRlIHRoZQpzZWxlY3Rpb24gYXMgYW4gJ3Vwc2lkZS11cCcgc2VsZWN0aW9uLCB3aXRoIHRoZSBhbmNob3IgYXQgdGhlIHRvcCwgYW5kCnRoZSBuZXh0IGN1cnNvciBtb3Rpb24gd2lsbCBiZWhhdmUgaW4gYW4gdW5leHBlY3RlZCB3YXnigJRvdXIgc2Vjb25kCnVwLWFycm93IHByZXNzIGluIHRoZSBleGFtcGxlIGFib3ZlIHdpbGwgbm90IGRvIGFueXRoaW5nLCBzaW5jZSBpdCBpcwppbnRlcnByZXRlZCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyB0aGUgZmlyc3QuPC9wPgoKPHA+Tm8gcHJvYmxlbS4gV2UnbGwganVzdCwgZWhtLCBkZXRlY3QgdGhhdCB0aGUgc2VsZWN0aW9uIGlzCnVwc2lkZS1kb3duICh5b3UgY2FuIHRlbGwgYnkgdGhlIHdheSBpdCB3YXMgY3JlYXRlZCksIGFuZCB0aGVuLCB3aGVuCmFuIHVwc2lkZS1kb3duIHNlbGVjdGlvbiBpcyBwcmVzZW50LCBhbmQgYSBjdXJzb3ItbW92aW5nIGtleSBpcwpwcmVzc2VkIGluIGNvbWJpbmF0aW9uIHdpdGggc2hpZnQsIHdlIHF1aWNrbHkgY29sbGFwc2UgdGhlIHNlbGVjdGlvbgppbiB0aGUgdGV4dGFyZWEgdG8gaXRzIHN0YXJ0LCBhbGxvdyB0aGUga2V5IHRvIHRha2UgZWZmZWN0LCBhbmQgdGhlbgpjb21iaW5lIGl0cyBuZXcgaGVhZCB3aXRoIGl0cyBvbGQgYW5jaG9yIHRvIGdldCB0aGUgPGVtPnJlYWw8L2VtPgpzZWxlY3Rpb24uPC9wPgoKPHA+SW4gc2hvcnQsIHNjYXJ5IGhhY2tzIGNvdWxkIG5vdCBiZSBhdm9pZGVkIGVudGlyZWx5IGluIENvZGVNaXJyb3IKMi48L3A+Cgo8cD5BbmQsIHRoZSBvYnNlcnZhbnQgcmVhZGVyIG1pZ2h0IGFzaywgaG93IGRvIHlvdSBldmVuIGtub3cgdGhhdCBhCmtleSBjb21ibyBpcyBhIGN1cnNvci1tb3ZpbmcgY29tYm8sIGlmIHlvdSBjbGFpbSB5b3Ugc3VwcG9ydCBhbnkKbmF0aXZlIGtleSBiaW5kaW5ncz8gV2VsbCwgd2UgZG9uJ3QsIGJ1dCB3ZSBjYW4gbGVhcm4uIFRoZSBlZGl0b3IKa2VlcHMgYSBzZXQga25vd24gY3Vyc29yLW1vdmVtZW50IGNvbWJvcyAoaW5pdGlhbGl6ZWQgdG8gdGhlCnByZWRpY3RhYmxlIGRlZmF1bHRzKSwgYW5kIHVwZGF0ZXMgdGhpcyBzZXQgd2hlbiBpdCBvYnNlcnZlcyB0aGF0CnByZXNzaW5nIGEgY2VydGFpbiBrZXkgaGFkIChvbmx5KSB0aGUgZWZmZWN0IG9mIG1vdmluZyB0aGUgY3Vyc29yLgpUaGlzLCBvZiBjb3Vyc2UsIGRvZXNuJ3Qgd29yayBpZiB0aGUgZmlyc3QgdGltZSB0aGUga2V5IGlzIHVzZWQgd2FzCmZvciBleHRlbmRpbmcgYW4gaW52ZXJ0ZWQgc2VsZWN0aW9uLCBidXQgaXQgd29ya3MgbW9zdCBvZiB0aGUKdGltZS48L3A+Cgo8aDIgaWQ9InVwZGF0ZSI+SW50ZWxsaWdlbnQgVXBkYXRpbmc8L2gyPgoKPHA+T25lIHRoaW5nIHRoYXQgYWx3YXlzIGNvbWVzIHVwIHdoZW4geW91IGhhdmUgYSBjb21wbGljYXRlZCBpbnRlcm5hbApzdGF0ZSB0aGF0J3MgcmVmbGVjdGVkIGluIHNvbWUgdXNlci12aXNpYmxlIGV4dGVybmFsIHJlcHJlc2VudGF0aW9uCihpbiB0aGlzIGNhc2UsIHRoZSBkaXNwbGF5ZWQgY29kZSBhbmQgdGhlIHRleHRhcmVhJ3MgY29udGVudCkgaXMKa2VlcGluZyB0aGUgdHdvIGluIHN5bmMuIFRoZSBuYWl2ZSB3YXkgaXMgdG8ganVzdCB1cGRhdGUgdGhlIGRpc3BsYXkKZXZlcnkgdGltZSB5b3UgY2hhbmdlIHlvdXIgc3RhdGUsIGJ1dCB0aGlzIGlzIG5vdCBvbmx5IGVycm9yIHByb25lCih5b3UnbGwgZm9yZ2V0KSwgaXQgYWxzbyBlYXNpbHkgbGVhZHMgdG8gZHVwbGljYXRlIHdvcmsgb24gYmlnLApjb21wb3NpdGUgb3BlcmF0aW9ucy4gVGhlbiB5b3Ugc3RhcnQgcGFzc2luZyBhcm91bmQgZmxhZ3MgaW5kaWNhdGluZwp3aGV0aGVyIHRoZSBkaXNwbGF5IHNob3VsZCBiZSB1cGRhdGVkIGluIGFuIGF0dGVtcHQgdG8gYmUgZWZmaWNpZW50CmFnYWluIGFuZCwgd2VsbCwgYXQgdGhhdCBwb2ludCB5b3UgbWlnaHQgYXMgd2VsbCBnaXZlIHVwIGNvbXBsZXRlbHkuPC9wPgoKPHA+SSBkaWQgZ28gZG93biB0aGF0IHJvYWQsIGJ1dCB0aGVuIHN3aXRjaGVkIHRvIGEgbXVjaCBzaW1wbGVyIG1vZGVsOgpzaW1wbHkga2VlcCB0cmFjayBvZiBhbGwgdGhlIHRoaW5ncyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIGR1cmluZyBhbgphY3Rpb24sIGFuZCB0aGVuLCBvbmx5IGF0IHRoZSBlbmQsIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHVwZGF0ZSB0aGUKdXNlci12aXNpYmxlIGRpc3BsYXkuPC9wPgoKPHA+Q29kZU1pcnJvciB1c2VzIGEgY29uY2VwdCBvZiA8ZW0+b3BlcmF0aW9uczwvZW0+LCB3aGljaCBzdGFydCBieQpjYWxsaW5nIGEgc3BlY2lmaWMgc2V0LXVwIGZ1bmN0aW9uIHRoYXQgY2xlYXJzIHRoZSBzdGF0ZSBhbmQgZW5kIGJ5CmNhbGxpbmcgYW5vdGhlciBmdW5jdGlvbiB0aGF0IHJlYWRzIHRoaXMgc3RhdGUgYW5kIGRvZXMgdGhlIHJlcXVpcmVkCnVwZGF0aW5nLiBNb3N0IGV2ZW50IGhhbmRsZXJzLCBhbmQgYWxsIHRoZSB1c2VyLXZpc2libGUgbWV0aG9kcyB0aGF0CmNoYW5nZSBzdGF0ZSBhcmUgd3JhcHBlZCBsaWtlIHRoaXMuIFRoZXJlJ3MgYSBtZXRob2QKY2FsbGVkIDxjb2RlPm9wZXJhdGlvbjwvY29kZT4gdGhhdCBhY2NlcHRzIGEgZnVuY3Rpb24sIGFuZCByZXR1cm5zCmFub3RoZXIgZnVuY3Rpb24gdGhhdCB3cmFwcyB0aGUgZ2l2ZW4gZnVuY3Rpb24gYXMgYW4gb3BlcmF0aW9uLjwvcD4KCjxwPkl0J3MgdHJpdmlhbCB0byBleHRlbmQgdGhpcyAoYXMgQ29kZU1pcnJvciBkb2VzKSB0byBkZXRlY3QgbmVzdGluZywKYW5kLCB3aGVuIGFuIG9wZXJhdGlvbiBpcyBzdGFydGVkIGluc2lkZSBhbiBvcGVyYXRpb24sIHNpbXBseQppbmNyZW1lbnQgdGhlIG5lc3RpbmcgY291bnQsIGFuZCBvbmx5IGRvIHRoZSB1cGRhdGluZyB3aGVuIHRoaXMgY291bnQKcmVhY2hlcyB6ZXJvIGFnYWluLjwvcD4KCjxwPklmIHdlIGhhdmUgYSBzZXQgb2YgY2hhbmdlZCByYW5nZXMgYW5kIGtub3cgdGhlIGN1cnJlbnRseSBzaG93bgpyYW5nZSwgd2UgY2FuICh3aXRoIHNvbWUgYXdrd2FyZCBjb2RlIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0CmNoYW5nZXMgY2FuIGFkZCBhbmQgcmVtb3ZlIGxpbmVzLCBzbyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGFuZ2luZwpjb29yZGluYXRlIHN5c3RlbSkgY29uc3RydWN0IGEgbWFwIG9mIHRoZSByYW5nZXMgdGhhdCB3ZXJlIGxlZnQKaW50YWN0LiBXZSBjYW4gdGhlbiBjb21wYXJlIHRoaXMgbWFwIHdpdGggdGhlIHBhcnQgb2YgdGhlIGRvY3VtZW50CnRoYXQncyBjdXJyZW50bHkgdmlzaWJsZSAoYmFzZWQgb24gc2Nyb2xsIG9mZnNldCBhbmQgZWRpdG9yIGhlaWdodCkgdG8KZGV0ZXJtaW5lIHdoZXRoZXIgc29tZXRoaW5nIG5lZWRzIHRvIGJlIHVwZGF0ZWQuPC9wPgoKPHA+Q29kZU1pcnJvciB1c2VzIHR3byB1cGRhdGUgYWxnb3JpdGhtc+KAlGEgZnVsbCByZWZyZXNoLCB3aGVyZSBpdCBqdXN0CmRpc2NhcmRzIHRoZSB3aG9sZSBwYXJ0IG9mIHRoZSBET00gdGhhdCBjb250YWlucyB0aGUgZWRpdGVkIHRleHQgYW5kCnJlYnVpbGRzIGl0LCBhbmQgYSBwYXRjaCBhbGdvcml0aG0sIHdoZXJlIGl0IHVzZXMgdGhlIGluZm9ybWF0aW9uCmFib3V0IGNoYW5nZWQgYW5kIGludGFjdCByYW5nZXMgdG8gdXBkYXRlIG9ubHkgdGhlIG91dC1vZi1kYXRlIHBhcnRzCm9mIHRoZSBET00uIFdoZW4gbW9yZSB0aGFuIDMwIHBlcmNlbnQgKHdoaWNoIGlzIHRoZSBjdXJyZW50IGhldXJpc3RpYywKbWlnaHQgY2hhbmdlKSBvZiB0aGUgbGluZXMgbmVlZCB0byBiZSB1cGRhdGVkLCB0aGUgZnVsbCByZWZyZXNoIGlzCmNob3NlbiAoc2luY2UgaXQncyBmYXN0ZXIgdG8gZG8gdGhhbiBwYWluc3Rha2luZ2x5IGZpbmRpbmcgYW5kCnVwZGF0aW5nIGFsbCB0aGUgY2hhbmdlZCBsaW5lcyksIGluIHRoZSBvdGhlciBjYXNlIGl0IGRvZXMgdGhlCnBhdGNoaW5nIChzbyB0aGF0LCBpZiB5b3Ugc2Nyb2xsIGEgbGluZSBvciBzZWxlY3QgYW5vdGhlciBjaGFyYWN0ZXIsCnRoZSB3aG9sZSBzY3JlZW4gZG9lc24ndCBoYXZlIHRvIGJlIHJlLXJlbmRlcmVkKS48L3A+Cgo8cD5BbGwgdXBkYXRpbmcgdXNlcyA8Y29kZT5pbm5lckhUTUw8L2NvZGU+IHJhdGhlciB0aGFuIGRpcmVjdCBET00KbWFuaXB1bGF0aW9uLCBzaW5jZSB0aGF0IHN0aWxsIHNlZW1zIHRvIGJlIGJ5IGZhciB0aGUgZmFzdGVzdCB3YXkgdG8KYnVpbGQgZG9jdW1lbnRzLiBUaGVyZSdzIGEgcGVyLWxpbmUgZnVuY3Rpb24gdGhhdCBjb21iaW5lcyB0aGUKaGlnaGxpZ2h0aW5nLCA8YSBocmVmPSJtYW51YWwuaHRtbCNtYXJrVGV4dCI+bWFya2luZzwvYT4sIGFuZApzZWxlY3Rpb24gaW5mbyBmb3IgdGhhdCBsaW5lIGludG8gYSBzbmlwcGV0IG9mIEhUTUwuIFRoZSBwYXRjaCB1cGRhdGVyCnVzZXMgdGhpcyB0byByZXNldCBpbmRpdmlkdWFsIGxpbmVzLCB0aGUgcmVmcmVzaCB1cGRhdGVyIGJ1aWxkcyBhbgpIVE1MIGNodW5rIGZvciB0aGUgd2hvbGUgdmlzaWJsZSBkb2N1bWVudCBhdCBvbmNlLCBhbmQgdGhlbiB1c2VzIGEKc2luZ2xlIDxjb2RlPmlubmVySFRNTDwvY29kZT4gdXBkYXRlIHRvIGRvIHRoZSByZWZyZXNoLjwvcD4KCjxoMiBpZD0icGFyc2UiPlBhcnNlcnMgY2FuIGJlIFNpbXBsZTwvaDI+Cgo8cD5XaGVuIEkgd3JvdGUgQ29kZU1pcnJvciAxLCBJCnRob3VnaHQgPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L3N0b3J5Lmh0bWwjcGFyc2VyIj5pbnRlcnJ1cHRhYmxlCnBhcnNlcnM8L2E+IHdlcmUgYSBodWdlbHkgc2NhcnkgYW5kIGNvbXBsaWNhdGVkIHRoaW5nLCBhbmQgSSB1c2VkIGEKYnVuY2ggb2YgaGVhdnl3ZWlnaHQgYWJzdHJhY3Rpb25zIHRvIGtlZXAgdGhpcyBzdXBwb3NlZCBjb21wbGV4aXR5CnVuZGVyIGNvbnRyb2w6IHBhcnNlcnMKd2VyZSA8YSBocmVmPSJodHRwOi8vYm9iLnB5dGhvbm1hYy5vcmcvYXJjaGl2ZXMvMjAwNS8wNy8wNi9pdGVyYXRpb24taW4tamF2YXNjcmlwdC8iPml0ZXJhdG9yczwvYT4KdGhhdCBjb25zdW1lZCBpbnB1dCBmcm9tIGFub3RoZXIgaXRlcmF0b3IsIGFuZCB1c2VkIGZ1bm55CmNsb3N1cmUtcmVzZXR0aW5nIHRyaWNrcyB0byBjb3B5IGFuZCByZXN1bWUgdGhlbXNlbHZlcy48L3A+Cgo8cD5UaGlzIG1hZGUgZm9yIGEgcmF0aGVyIG5pY2Ugc3lzdGVtLCBpbiB0aGF0IHBhcnNlcnMgZm9ybWVkIHN0cmljdGx5CnNlcGFyYXRlIG1vZHVsZXMsIGFuZCBjb3VsZCBiZSBjb21wb3NlZCBpbiBwcmVkaWN0YWJsZSB3YXlzLgpVbmZvcnR1bmF0ZWx5LCBpdCB3YXMgcXVpdGUgc2xvdyAoc3RhY2tpbmcgdGhyZWUgb3IgZm91ciBpdGVyYXRvcnMgb24KdG9wIG9mIGVhY2ggb3RoZXIpLCBhbmQgZXh0cmVtZWx5IGludGltaWRhdGluZyB0byBwZW9wbGUgbm90IHVzZWQgdG8gYQpmdW5jdGlvbmFsIHByb2dyYW1taW5nIHN0eWxlLjwvcD4KCjxwPldpdGggYSBmZXcgc21hbGwgY2hhbmdlcywgaG93ZXZlciwgd2UgY2FuIGtlZXAgYWxsIHRob3NlCmFkdmFudGFnZXMsIGJ1dCBzaW1wbGlmeSB0aGUgQVBJIGFuZCBtYWtlIHRoZSB3aG9sZSB0aGluZyBsZXNzCmluZGlyZWN0IGFuZCBpbmVmZmljaWVudC4gQ29kZU1pcnJvcgoyJ3MgPGEgaHJlZj0ibWFudWFsLmh0bWwjbW9kZWFwaSI+bW9kZSBBUEk8L2E+IHVzZXMgZXhwbGljaXQgc3RhdGUKb2JqZWN0cywgYW5kIG1ha2VzIHRoZSBwYXJzZXIvdG9rZW5pemVyIGEgZnVuY3Rpb24gdGhhdCBzaW1wbHkgdGFrZXMgYQpzdGF0ZSBhbmQgYSBjaGFyYWN0ZXIgc3RyZWFtIGFic3RyYWN0aW9uLCBhZHZhbmNlcyB0aGUgc3RyZWFtIG9uZQp0b2tlbiwgYW5kIHJldHVybnMgdGhlIHdheSB0aGUgdG9rZW4gc2hvdWxkIGJlIHN0eWxlZC4gVGhpcyBzdGF0ZSBtYXkKYmUgY29waWVkLCBvcHRpb25hbGx5IGluIGEgbW9kZS1kZWZpbmVkIHdheSwgaW4gb3JkZXIgdG8gYmUgYWJsZSB0bwpjb250aW51ZSBhIHBhcnNlIGF0IGEgZ2l2ZW4gcG9pbnQuIEV2ZW4gc29tZW9uZSB3aG8ncyBuZXZlciB0b3VjaGVkIGEKbGFtYmRhIGluIGhpcyBsaWZlIGNhbiB1bmRlcnN0YW5kIHRoaXMgYXBwcm9hY2guIEFkZGl0aW9uYWxseSwgZmFyCmZld2VyIG9iamVjdHMgYXJlIGFsbG9jYXRlZCBpbiB0aGUgY291cnNlIG9mIHBhcnNpbmcgbm93LjwvcD4KCjxwPlRoZSBiaWdnZXN0IHNwZWVkdXAgY29tZXMgZnJvbSB0aGUgZmFjdCB0aGF0IHRoZSBwYXJzaW5nIG5vIGxvbmdlcgpoYXMgdG8gdG91Y2ggdGhlIERPTSB0aG91Z2guIEluIENvZGVNaXJyb3IgMSwgb24gYW4gb2xkZXIgYnJvd3NlciwgeW91CmNvdWxkIDxlbT5zZWU8L2VtPiB0aGUgcGFyc2VyIHdvcmsgaXRzIHdheSB0aHJvdWdoIHRoZSBkb2N1bWVudCwKbWFuYWdpbmcgc29tZSB0d2VudHkgbGluZXMgaW4gZWFjaCA1MC1taWxsaXNlY29uZCB0aW1lIHNsaWNlIGl0IGdvdC4gSXQKd2FzIHJlYWRpbmcgaXRzIGlucHV0IGZyb20gdGhlIERPTSwgYW5kIHVwZGF0aW5nIHRoZSBET00gYXMgaXQgd2VudAphbG9uZywgd2hpY2ggYW55IGV4cGVyaWVuY2VkIEphdmFTY3JpcHQgcHJvZ3JhbW1lciB3aWxsIGltbWVkaWF0ZWx5CnNwb3QgYXMgYSByZWNpcGUgZm9yIHNsb3duZXNzLiBJbiBDb2RlTWlycm9yIDIsIHRoZSBwYXJzZXIgdXN1YWxseQpmaW5pc2hlcyB0aGUgd2hvbGUgZG9jdW1lbnQgaW4gYSBzaW5nbGUgMTAwLW1pbGxpc2Vjb25kIHRpbWUgc2xpY2XigJRpdAptYW5hZ2VzIHNvbWUgMTUwMCBsaW5lcyBkdXJpbmcgdGhhdCB0aW1lIG9uIENocm9tZS4gQWxsIGl0IGhhcyB0byBkbwppcyBtdW5nZSBzdHJpbmdzLCBzbyB0aGVyZSBpcyBubyByZWFsIHJlYXNvbiBmb3IgaXQgdG8gYmUgc2xvdwphbnltb3JlLjwvcD4KCjxoMiBpZD0ic3VtbWFyeSI+V2hhdCBHaXZlcz88L2gyPgoKPHA+R2l2ZW4gYWxsIHRoaXMsIHdoYXQgY2FuIHlvdSBleHBlY3QgZnJvbSBDb2RlTWlycm9yIDI/IEZpcnN0LCB0aGUKZ29vZDo8L3A+Cgo8dWw+Cgo8bGk+PHN0cm9uZz5TbWFsbC48L3N0cm9uZz4gdGhlIGJhc2UgbGlicmFyeSBpcyBzb21lIDMyayB3aGVuIG1pbmlmaWVkCm5vdywgMTJrIHdoZW4gZ3ppcHBlZC4gSXQncyBzbWFsbGVyIHRoYW4gaXRzIG93biBsb2dvLjwvbGk+Cgo8bGk+PHN0cm9uZz5MaWdodHdlaWdodC48L3N0cm9uZz4gQ29kZU1pcnJvciAyIGluaXRpYWxpemVzIHZlcnkKcXVpY2tseSwgYW5kIGRvZXMgYWxtb3N0IG5vIHdvcmsgd2hlbiBpdCBpcyBub3QgZm9jdXNlZC4gVGhpcyBtZWFucwp5b3UgY2FuIHRyZWF0IGl0IGFsbW9zdCBsaWtlIGEgdGV4dGFyZWEsIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9uIGEKcGFnZSB3aXRob3V0IHRyb3VibGUuPC9saT4KCjxsaT48c3Ryb25nPkh1Z2UgZG9jdW1lbnQgc3VwcG9ydC48L3N0cm9uZz4gU2luY2UgaGlnaGxpZ2h0aW5nIGlzCnJlYWxseSBmYXN0LCBhbmQgbm8gRE9NIHN0cnVjdHVyZSBpcyBiZWluZyBidWlsdCBmb3Igbm9uLXZpc2libGUKY29udGVudCwgeW91IGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgbG9ja2luZyB1cCB5b3VyIGJyb3dzZXIgd2hlbiBhCnVzZXIgZW50ZXJzIGEgbWVnYWJ5dGUtc2l6ZWQgZG9jdW1lbnQuPC9saT4KCjxsaT48c3Ryb25nPkV4dGVuZGVkIEFQSS48L3N0cm9uZz4gU29tZSB0aGluZ3Mga2VwdCBjb21pbmcgdXAgaW4gdGhlCm1haWxpbmcgbGlzdCwgc3VjaCBhcyBtYXJraW5nIHBpZWNlcyBvZiB0ZXh0IG9yIGxpbmVzLCB3aGljaCB3ZXJlCmV4dHJlbWVseSBoYXJkIHRvIGRvIHdpdGggQ29kZU1pcnJvciAxLiBUaGUgbmV3IHZlcnNpb24gaGFzIHByb3BlcgpzdXBwb3J0IGZvciB0aGVzZSBidWlsdCBpbi48L2xpPgoKPGxpPjxzdHJvbmc+VGFiIHN1cHBvcnQuPC9zdHJvbmc+IFRhYnMgaW5zaWRlIGVkaXRhYmxlIGRvY3VtZW50cyB3ZXJlLApmb3Igc29tZSByZWFzb24sIGEgbm8tZ28uIEF0IGxlYXN0IHNpeCBkaWZmZXJlbnQgcGVvcGxlIGFubm91bmNlZCB0aGV5CndlcmUgZ29pbmcgdG8gYWRkIHRhYiBzdXBwb3J0IHRvIENvZGVNaXJyb3IgMSwgbm9uZSBzdXJ2aXZlZCAoSSBtZWFuLApub25lIGRlbGl2ZXJlZCBhIHdvcmtpbmcgdmVyc2lvbikuIENvZGVNaXJyb3IgMiBubyBsb25nZXIgcmVtb3ZlcyB0YWJzCmZyb20geW91ciBkb2N1bWVudC48L2xpPgoKPGxpPjxzdHJvbmc+U2FuZSBzdHlsaW5nLjwvc3Ryb25nPiA8Y29kZT5pZnJhbWU8L2NvZGU+IG5vZGVzIGFyZW4ndApyZWFsbHkga25vd24gZm9yIHJlc3BlY3RpbmcgZG9jdW1lbnQgZmxvdy4gTm93IHRoYXQgYW4gZWRpdG9yIGluc3RhbmNlCmlzIGEgcGxhaW4gPGNvZGU+ZGl2PC9jb2RlPiBlbGVtZW50LCBpdCBpcyBtdWNoIGVhc2llciB0byBzaXplIGl0IHRvCmZpdCB0aGUgc3Vycm91bmRpbmcgZWxlbWVudHMuIFlvdSBkb24ndCBldmVuIGhhdmUgdG8gbWFrZSBpdCBzY3JvbGwgaWYKeW91IGRvIG5vdCA8YSBocmVmPSJkZW1vL3Jlc2l6ZS5odG1sIj53YW50IHRvPC9hPi48L2xpPgoKPC91bD4KCjxwPlRoZW4sIHRoZSBiYWQ6PC9wPgoKPHVsPgoKPGxpPjxzdHJvbmc+Tm8gbGluZS13cmFwcGluZy48L3N0cm9uZz4gSSdkIGhhdmUgbGlrZWQgdG8gZ2V0CmxpbmUtd3JhcHBpbmcgdG8gd29yaywgYnV0IGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIG1vZGVsIEknbSB1c2luZyB2ZXJ5CndlbGwuIEl0IGlzIGltcG9ydGFudCB0aGF0IGN1cnNvciBtb3ZlbWVudCBpbiB0aGUgdGV4dGFyZWEgbWF0Y2hlcwp3aGF0IHlvdSBzZWUgb24gdGhlIHNjcmVlbiwgYW5kIGl0IHNlZW1zIHRvIGJlIGltcG9zc2libGUgdG8gaGF2ZSB0aGUKbGluZXMgd3JhcHBlZCB0aGUgc2FtZSBpbiB0aGUgdGV4dGFyZWEgYW5kIHRoZSBub3JtYWwgRE9NLjwvbGk+Cgo8bGk+PHN0cm9uZz5Tb21lIGN1cnNvciBmbGFraW5lc3MuPC9zdHJvbmc+IFRoZSB0ZXh0YXJlYSBoYWNrIGRvZXMgbm90CnJlYWxseSBkbyBqdXN0aWNlIHRvIHRoZSBjb21wbGV4aXR5IG9mIGN1cnNvciBoYW5kbGluZ+KAlGEgc2VsZWN0aW9uIGlzCnR5cGljYWxseSBtb3JlIHRoYW4ganVzdCBhbiBvZmZzZXQgaW50byBhIHN0cmluZy4gRm9yIGV4YW1wbGUsIGlmIHlvdQp1c2UgdGhlIHVwIGFuZCBkb3duIGFycm93IGtleXMgdG8gbW92ZSB0byBhIHNob3J0ZXIgbGluZSBhbmQgdGhlbgpiYWNrLCB5b3UnbGwgZW5kIHVwIGluIHlvdXIgb2xkIHBvc2l0aW9uIGluIG1vc3QgZWRpdG9yIGNvbnRyb2xzLCBidXQKQ29kZU1pcnJvciAyIGN1cnJlbnRseSBkb2Vzbid0IHJlbWVtYmVyIHRoZSAncmVhbCcgY3Vyc29yIGNvbHVtbiBpbgp0aGlzIGNhc2UuIFRoZXNlIGNhbiBiZSB3b3JrZWQgYXJvdW5kIG9uIGEgY2FzZS1ieS1jYXNlIGJhc2lzLCBidXQKSSBoYXZlbid0IHB1dCBtdWNoIGVuZXJneSBpbnRvIHRoYXQgeWV0LjwvbGk+Cgo8L3VsPgoKPC9kaXY+PGRpdiBjbGFzcz0icmlnaHRzbWFsbCBibGsiPgoKICAgIDxoMj5Db250ZW50czwvaDI+CgogICAgPHVsPgogICAgICA8bGk+PGEgaHJlZj0iI2ludHJvIj5JbnRyb2R1Y3Rpb248L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNhcHByb2FjaCI+R2VuZXJhbCBBcHByb2FjaDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI2lucHV0Ij5JbnB1dDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3NlbGVjdGlvbiI+U2VsZWN0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXBkYXRlIj5JbnRlbGxpZ2VudCBVcGRhdGluZzwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iI3BhcnNlIj5QYXJzaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc3VtbWFyeSI+V2hhdCBHaXZlcz88L2E+PC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImNzcy9mb250LmpzIj48L3NjcmlwdD4KCjwvYm9keT48L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LkNvZGVNaXJyb3IgewogIG92ZXJmbG93OiBhdXRvOwogIGhlaWdodDogMzAwcHg7CiAgbGluZS1oZWlnaHQ6IDFlbTsKICBmb250LWZhbWlseTogbW9ub3NwYWNlOwp9CgouQ29kZU1pcnJvci1ndXR0ZXIgewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwOwogIGJhY2tncm91bmQtY29sb3I6ICNmN2Y3Zjc7CiAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgI2VlZTsKICBtaW4td2lkdGg6IDJlbTsKICBoZWlnaHQ6IDEwMCU7Cn0KLkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQgewogIGNvbG9yOiAjYWFhOwogIHRleHQtYWxpZ246IHJpZ2h0OwogIHBhZGRpbmc6IC40ZW0gLjJlbSAuNGVtIC40ZW07Cn0KLkNvZGVNaXJyb3ItbGluZXMgewogIHBhZGRpbmc6IC40ZW07Cn0KCi5Db2RlTWlycm9yIHByZSB7CiAgLW1vei1ib3JkZXItcmFkaXVzOiAwOwogIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMDsKICAtby1ib3JkZXItcmFkaXVzOiAwOwogIGJvcmRlci1yYWRpdXM6IDA7CiAgYm9yZGVyLXdpZHRoOiAwOyBtYXJnaW46IDA7IHBhZGRpbmc6IDA7IGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogIGZvbnQtZmFtaWx5OiBpbmhlcml0Owp9CgouQ29kZU1pcnJvciB0ZXh0YXJlYSB7CiAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSAhaW1wb3J0YW50Owp9CgouQ29kZU1pcnJvci1jdXJzb3IgewogIHotaW5kZXg6IDEwOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBibGFjayAhaW1wb3J0YW50Owp9Ci5Db2RlTWlycm9yLWZvY3VzZWQgLkNvZGVNaXJyb3ItY3Vyc29yIHsKICB2aXNpYmlsaXR5OiB2aXNpYmxlOwp9CgpzcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWQgewogIGJhY2tncm91bmQ6ICNjY2MgIWltcG9ydGFudDsKICBjb2xvcjogSGlnaGxpZ2h0VGV4dCAhaW1wb3J0YW50Owp9Ci5Db2RlTWlycm9yLWZvY3VzZWQgc3Bhbi5Db2RlTWlycm9yLXNlbGVjdGVkIHsKICBiYWNrZ3JvdW5kOiBIaWdobGlnaHQgIWltcG9ydGFudDsKfQoKLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHtjb2xvcjogIzBmMCAhaW1wb3J0YW50O30KLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2YyMiAhaW1wb3J0YW50O30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/codemirror.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gQWxsIGZ1bmN0aW9ucyB0aGF0IG5lZWQgYWNjZXNzIHRvIHRoZSBlZGl0b3IncyBzdGF0ZSBsaXZlIGluc2lkZQovLyB0aGUgQ29kZU1pcnJvciBmdW5jdGlvbi4gQmVsb3cgdGhhdCwgYXQgdGhlIGJvdHRvbSBvZiB0aGUgZmlsZSwKLy8gc29tZSB1dGlsaXRpZXMgYXJlIGRlZmluZWQuCgovLyBDb2RlTWlycm9yIGlzIHRoZSBvbmx5IGdsb2JhbCB2YXIgd2UgY2xhaW0KdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgLy8gVGhpcyBpcyB0aGUgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyBhbiBlZGl0b3IgaW5zdGFuY2UuIEl0J3MKICAvLyBjbG9zdXJlIGlzIHVzZWQgdG8gc3RvcmUgdGhlIGVkaXRvciBzdGF0ZS4KICBmdW5jdGlvbiBDb2RlTWlycm9yKHBsYWNlLCBnaXZlbk9wdGlvbnMpIHsKICAgIC8vIERldGVybWluZSBlZmZlY3RpdmUgb3B0aW9ucyBiYXNlZCBvbiBnaXZlbiB2YWx1ZXMgYW5kIGRlZmF1bHRzLgogICAgdmFyIG9wdGlvbnMgPSB7fSwgZGVmYXVsdHMgPSBDb2RlTWlycm9yLmRlZmF1bHRzOwogICAgZm9yICh2YXIgb3B0IGluIGRlZmF1bHRzKQogICAgICBpZiAoZGVmYXVsdHMuaGFzT3duUHJvcGVydHkob3B0KSkKICAgICAgICBvcHRpb25zW29wdF0gPSAoZ2l2ZW5PcHRpb25zICYmIGdpdmVuT3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShvcHQpID8gZ2l2ZW5PcHRpb25zIDogZGVmYXVsdHMpW29wdF07CgogICAgdmFyIHRhcmdldERvY3VtZW50ID0gb3B0aW9uc1siZG9jdW1lbnQiXTsKICAgIC8vIFRoZSBlbGVtZW50IGluIHdoaWNoIHRoZSBlZGl0b3IgbGl2ZXMuIFRha2VzIGNhcmUgb2Ygc2Nyb2xsaW5nCiAgICAvLyAoaWYgZW5hYmxlZCkuCiAgICB2YXIgd3JhcHBlciA9IHRhcmdldERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgd3JhcHBlci5jbGFzc05hbWUgPSAiQ29kZU1pcnJvciI7CiAgICAvLyBXb3JrIGFyb3VuZCBodHRwOi8vd3d3LnF1aXJrc21vZGUub3JnL2J1Z3JlcG9ydHMvYXJjaGl2ZXMvMjAwNi8wOS9PdmVyZmxvd19IaWRkZW5fbm90X2hpZGluZy5odG1sCiAgICBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QgJiYgL01TSUUgWzEtN11cYi8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkKICAgICAgd3JhcHBlci5zdHlsZS5wb3NpdGlvbiA9ICJyZWxhdGl2ZSI7CiAgICAvLyBUaGlzIG1lc3MgY3JlYXRlcyB0aGUgYmFzZSBET00gc3RydWN0dXJlIGZvciB0aGUgZWRpdG9yLgogICAgd3JhcHBlci5pbm5lckhUTUwgPQogICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj4nICsgLy8gU2V0IHRvIHRoZSBoZWlnaHQgb2YgdGhlIHRleHQsIGNhdXNlcyBzY3JvbGxpbmcKICAgICAgICAnPGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBoZWlnaHQ6IDA7IHdpZHRoOiAwOyBvdmVyZmxvdzogaGlkZGVuOyI+PC9kaXY+JyArCiAgICAgICAgJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+JyArIC8vIE1vdmVkIGFyb3VuZCBpdHMgcGFyZW50IHRvIGNvdmVyIHZpc2libGUgdmlldwogICAgICAgICAgJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3ItZ3V0dGVyIj48ZGl2IGNsYXNzPSJDb2RlTWlycm9yLWd1dHRlci10ZXh0Ij48L2Rpdj48L2Rpdj4nICsKICAgICAgICAgICc8ZGl2IHN0eWxlPSJvdmVyZmxvdzogaGlkZGVuOyBwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxcHg7IGhlaWdodDogMDsgbGVmdDogMCI+JyArIC8vIFdyYXBzIGFuZCBoaWRlcyBpbnB1dCB0ZXh0YXJlYQogICAgICAgICAgICAnPHRleHRhcmVhIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHdpZHRoOiAxMDAwMDBweDsiIHdyYXA9Im9mZiI+PC90ZXh0YXJlYT48L2Rpdj4nICsKICAgICAgICAgIC8vIFByb3ZpZGVzIHBvc2l0aW9uaW5nIHJlbGF0aXZlIHRvICh2aXNpYmxlKSB0ZXh0IG9yaWdpbgogICAgICAgICAgJzxkaXYgY2xhc3M9IkNvZGVNaXJyb3ItbGluZXMiPjxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+JyArCiAgICAgICAgICAgICc8cHJlIGNsYXNzPSJDb2RlTWlycm9yLWN1cnNvciI+JiMxNjA7PC9wcmU+JyArIC8vIEFic29sdXRlbHkgcG9zaXRpb25lZCBibGlua3kgY3Vyc29yCiAgICAgICAgICAgICc8ZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2Pic7IC8vIFRoaXMgRElWIGNvbnRhaW5zIHRoZSBhY3R1YWwgY29kZQogICAgaWYgKHBsYWNlLmFwcGVuZENoaWxkKSBwbGFjZS5hcHBlbmRDaGlsZCh3cmFwcGVyKTsgZWxzZSBwbGFjZSh3cmFwcGVyKTsKICAgIC8vIEkndmUgbmV2ZXIgc2VlbiBtb3JlIGVsZWdhbnQgY29kZSBpbiBteSBsaWZlLgogICAgdmFyIGNvZGUgPSB3cmFwcGVyLmZpcnN0Q2hpbGQsIG1lYXN1cmUgPSBjb2RlLmZpcnN0Q2hpbGQsIG1vdmVyID0gbWVhc3VyZS5uZXh0U2libGluZywKICAgICAgICBndXR0ZXIgPSBtb3Zlci5maXJzdENoaWxkLCBndXR0ZXJUZXh0ID0gZ3V0dGVyLmZpcnN0Q2hpbGQsCiAgICAgICAgaW5wdXREaXYgPSBndXR0ZXIubmV4dFNpYmxpbmcsIGlucHV0ID0gaW5wdXREaXYuZmlyc3RDaGlsZCwKICAgICAgICBsaW5lU3BhY2UgPSBpbnB1dERpdi5uZXh0U2libGluZy5maXJzdENoaWxkLCBjdXJzb3IgPSBsaW5lU3BhY2UuZmlyc3RDaGlsZCwgbGluZURpdiA9IGN1cnNvci5uZXh0U2libGluZzsKICAgIGlmIChvcHRpb25zLnRhYmluZGV4ICE9IG51bGwpIGlucHV0LnRhYmluZGV4ID0gb3B0aW9ucy50YWJpbmRleDsKICAgIGlmICghb3B0aW9ucy5ndXR0ZXIgJiYgIW9wdGlvbnMubGluZU51bWJlcnMpIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwoKICAgIC8vIERlbGF5ZWQgb2JqZWN0IHdyYXAgdGltZW91dHMsIG1ha2luZyBzdXJlIG9ubHkgb25lIGlzIGFjdGl2ZS4gYmxpbmtlciBob2xkcyBhbiBpbnRlcnZhbC4KICAgIHZhciBwb2xsID0gbmV3IERlbGF5ZWQoKSwgaGlnaGxpZ2h0ID0gbmV3IERlbGF5ZWQoKSwgYmxpbmtlcjsKCiAgICAvLyBtb2RlIGhvbGRzIGEgbW9kZSBBUEkgb2JqZWN0LiBsaW5lcyBhbiBhcnJheSBvZiBMaW5lIG9iamVjdHMKICAgIC8vIChzZWUgTGluZSBjb25zdHJ1Y3RvciksIHdvcmsgYW4gYXJyYXkgb2YgbGluZXMgdGhhdCBzaG91bGQgYmUKICAgIC8vIHBhcnNlZCwgYW5kIGhpc3RvcnkgdGhlIHVuZG8gaGlzdG9yeSAoaW5zdGFuY2Ugb2YgSGlzdG9yeQogICAgLy8gY29uc3RydWN0b3IpLgogICAgdmFyIG1vZGUsIGxpbmVzID0gW25ldyBMaW5lKCIiKV0sIHdvcmssIGhpc3RvcnkgPSBuZXcgSGlzdG9yeSgpLCBmb2N1c2VkOwogICAgbG9hZE1vZGUoKTsKICAgIC8vIFRoZSBzZWxlY3Rpb24uIFRoZXNlIGFyZSBhbHdheXMgbWFpbnRhaW5lZCB0byBwb2ludCBhdCB2YWxpZAogICAgLy8gcG9zaXRpb25zLiBJbnZlcnRlZCBpcyB1c2VkIHRvIHJlbWVtYmVyIHRoYXQgdGhlIHVzZXIgaXMKICAgIC8vIHNlbGVjdGluZyBib3R0b20tdG8tdG9wLgogICAgdmFyIHNlbCA9IHtmcm9tOiB7bGluZTogMCwgY2g6IDB9LCB0bzoge2xpbmU6IDAsIGNoOiAwfSwgaW52ZXJ0ZWQ6IGZhbHNlfTsKICAgIC8vIFNlbGVjdGlvbi1yZWxhdGVkIGZsYWdzLiBzaGlmdFNlbGVjdGluZyBvYnZpb3VzbHkgdHJhY2tzCiAgICAvLyB3aGV0aGVyIHRoZSB1c2VyIGlzIGhvbGRpbmcgc2hpZnQuIHJlZHVjZWRTZWxlY3Rpb24gaXMgYSBoYWNrCiAgICAvLyB0byBnZXQgYXJvdW5kIHRoZSBmYWN0IHRoYXQgd2UgY2FuJ3QgY3JlYXRlIGludmVydGVkCiAgICAvLyBzZWxlY3Rpb25zLiBTZWUgYmVsb3cuCiAgICB2YXIgc2hpZnRTZWxlY3RpbmcsIHJlZHVjZWRTZWxlY3Rpb24sIGxhc3REb3VibGVDbGljazsKICAgIC8vIFZhcmlhYmxlcyB1c2VkIGJ5IHN0YXJ0T3BlcmF0aW9uL2VuZE9wZXJhdGlvbiB0byB0cmFjayB3aGF0CiAgICAvLyBoYXBwZW5lZCBkdXJpbmcgdGhlIG9wZXJhdGlvbi4KICAgIHZhciB1cGRhdGVJbnB1dCwgY2hhbmdlcywgdGV4dENoYW5nZWQsIHNlbGVjdGlvbkNoYW5nZWQsIGxlYXZlSW5wdXRBbG9uZTsKICAgIC8vIEN1cnJlbnQgdmlzaWJsZSByYW5nZSAobWF5IGJlIGJpZ2dlciB0aGFuIHRoZSB2aWV3IHdpbmRvdykuCiAgICB2YXIgc2hvd2luZ0Zyb20gPSAwLCBzaG93aW5nVG8gPSAwLCBsYXN0SGVpZ2h0ID0gMCwgY3VyS2V5SWQgPSBudWxsOwogICAgLy8gZWRpdGluZyB3aWxsIGhvbGQgYW4gb2JqZWN0IGRlc2NyaWJpbmcgdGhlIHRoaW5ncyB3ZSBwdXQgaW4gdGhlCiAgICAvLyB0ZXh0YXJlYSwgdG8gaGVscCBmaWd1cmUgb3V0IHdoZXRoZXIgc29tZXRoaW5nIGNoYW5nZWQuCiAgICAvLyBicmFja2V0SGlnaGxpZ2h0ZWQgaXMgdXNlZCB0byByZW1lbWJlciB0aGF0IGEgYmFja2V0IGhhcyBiZWVuCiAgICAvLyBtYXJrZWQuCiAgICB2YXIgZWRpdGluZywgYnJhY2tldEhpZ2hsaWdodGVkOwogICAgLy8gVHJhY2tzIHRoZSBtYXhpbXVtIGxpbmUgbGVuZ3RoIHNvIHRoYXQgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyCiAgICAvLyBjYW4gYmUga2VwdCBzdGF0aWMgd2hlbiBzY3JvbGxpbmcuCiAgICB2YXIgbWF4TGluZSA9ICIiOwoKICAgIC8vIEluaXRpYWxpemUgdGhlIGNvbnRlbnQuIFNvbWV3aGF0IGhhY2t5IChkZWxheWVkIHByZXBhcmVJbnB1dCkKICAgIC8vIHRvIHdvcmsgYXJvdW5kIGJyb3dzZXIgaXNzdWVzLgogICAgb3BlcmF0aW9uKGZ1bmN0aW9uKCl7c2V0VmFsdWUob3B0aW9ucy52YWx1ZSB8fCAiIik7IHVwZGF0ZUlucHV0ID0gZmFsc2U7fSkoKTsKICAgIHNldFRpbWVvdXQocHJlcGFyZUlucHV0LCAyMCk7CgogICAgLy8gUmVnaXN0ZXIgb3VyIGV2ZW50IGhhbmRsZXJzLgogICAgY29ubmVjdCh3cmFwcGVyLCAibW91c2Vkb3duIiwgb3BlcmF0aW9uKG9uTW91c2VEb3duKSk7CiAgICAvLyBHZWNrbyBicm93c2VycyBmaXJlIGNvbnRleHRtZW51ICphZnRlciogb3BlbmluZyB0aGUgbWVudSwgYXQKICAgIC8vIHdoaWNoIHBvaW50IHdlIGNhbid0IG1lc3Mgd2l0aCBpdCBhbnltb3JlLiBDb250ZXh0IG1lbnUgaXMKICAgIC8vIGhhbmRsZWQgaW4gb25Nb3VzZURvd24gZm9yIEdlY2tvLgogICAgaWYgKCFnZWNrbykgY29ubmVjdCh3cmFwcGVyLCAiY29udGV4dG1lbnUiLCBvcGVyYXRpb24ob25Db250ZXh0TWVudSkpOwogICAgY29ubmVjdChjb2RlLCAiZGJsY2xpY2siLCBvcGVyYXRpb24ob25EYmxDbGljaykpOwogICAgY29ubmVjdCh3cmFwcGVyLCAic2Nyb2xsIiwgZnVuY3Rpb24oKSB7dXBkYXRlRGlzcGxheShbXSk7IGlmIChvcHRpb25zLm9uU2Nyb2xsKSBvcHRpb25zLm9uU2Nyb2xsKGluc3RhbmNlKTt9KTsKICAgIGNvbm5lY3Qod2luZG93LCAicmVzaXplIiwgZnVuY3Rpb24oKSB7dXBkYXRlRGlzcGxheSh0cnVlKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJrZXl1cCIsIG9wZXJhdGlvbihvbktleVVwKSk7CiAgICBjb25uZWN0KGlucHV0LCAia2V5ZG93biIsIG9wZXJhdGlvbihvbktleURvd24pKTsKICAgIGNvbm5lY3QoaW5wdXQsICJrZXlwcmVzcyIsIG9wZXJhdGlvbihvbktleVByZXNzKSk7CiAgICBjb25uZWN0KGlucHV0LCAiZm9jdXMiLCBvbkZvY3VzKTsKICAgIGNvbm5lY3QoaW5wdXQsICJibHVyIiwgb25CbHVyKTsKCiAgICBjb25uZWN0KHdyYXBwZXIsICJkcmFnZW50ZXIiLCBmdW5jdGlvbihlKXtlLnN0b3AoKTt9KTsKICAgIGNvbm5lY3Qod3JhcHBlciwgImRyYWdvdmVyIiwgZnVuY3Rpb24oZSl7ZS5zdG9wKCk7fSk7CiAgICBjb25uZWN0KHdyYXBwZXIsICJkcm9wIiwgb3BlcmF0aW9uKG9uRHJvcCkpOwogICAgY29ubmVjdCh3cmFwcGVyLCAicGFzdGUiLCBmdW5jdGlvbigpe2ZvY3VzSW5wdXQoKTsgZmFzdFBvbGwoKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJwYXN0ZSIsIGZ1bmN0aW9uKCl7ZmFzdFBvbGwoKTt9KTsKICAgIGNvbm5lY3QoaW5wdXQsICJjdXQiLCBmdW5jdGlvbigpe2Zhc3RQb2xsKCk7fSk7CgogICAgaWYgKHRhcmdldERvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT0gaW5wdXQpIG9uRm9jdXMoKTsKICAgIGVsc2Ugb25CbHVyKCk7CgogICAgZnVuY3Rpb24gaXNMaW5lKGwpIHtyZXR1cm4gbCA+PSAwICYmIGwgPCBsaW5lcy5sZW5ndGg7fQogICAgLy8gVGhlIGluc3RhbmNlIG9iamVjdCB0aGF0IHdlJ2xsIHJldHVybi4gTW9zdGx5IGNhbGxzIG91dCB0bwogICAgLy8gbG9jYWwgZnVuY3Rpb25zIGluIHRoZSBDb2RlTWlycm9yIGZ1bmN0aW9uLiBTb21lIGRvIHNvbWUgZXh0cmEKICAgIC8vIHJhbmdlIGNoZWNraW5nIGFuZC9vciBjbGlwcGluZy4gb3BlcmF0aW9uIGlzIHVzZWQgdG8gd3JhcCB0aGUKICAgIC8vIGNhbGwgc28gdGhhdCBjaGFuZ2VzIGl0IG1ha2VzIGFyZSB0cmFja2VkLCBhbmQgdGhlIGRpc3BsYXkgaXMKICAgIC8vIHVwZGF0ZWQgYWZ0ZXJ3YXJkcy4KICAgIHZhciBpbnN0YW5jZSA9IHsKICAgICAgZ2V0VmFsdWU6IGdldFZhbHVlLAogICAgICBzZXRWYWx1ZTogb3BlcmF0aW9uKHNldFZhbHVlKSwKICAgICAgZ2V0U2VsZWN0aW9uOiBnZXRTZWxlY3Rpb24sCiAgICAgIHJlcGxhY2VTZWxlY3Rpb246IG9wZXJhdGlvbihyZXBsYWNlU2VsZWN0aW9uKSwKICAgICAgZm9jdXM6IGZ1bmN0aW9uKCl7Zm9jdXNJbnB1dCgpOyBvbkZvY3VzKCk7IGZhc3RQb2xsKCk7fSwKICAgICAgc2V0T3B0aW9uOiBmdW5jdGlvbihvcHRpb24sIHZhbHVlKSB7CiAgICAgICAgb3B0aW9uc1tvcHRpb25dID0gdmFsdWU7CiAgICAgICAgaWYgKG9wdGlvbiA9PSAibGluZU51bWJlcnMiIHx8IG9wdGlvbiA9PSAiZ3V0dGVyIikgZ3V0dGVyQ2hhbmdlZCgpOwogICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PSAibW9kZSIgfHwgb3B0aW9uID09ICJpbmRlbnRVbml0IikgbG9hZE1vZGUoKTsKICAgICAgICBlbHNlIGlmIChvcHRpb24gPT0gInJlYWRPbmx5IiAmJiB2YWx1ZSA9PSAibm9jdXJzb3IiKSBpbnB1dC5ibHVyKCk7CiAgICAgIH0sCiAgICAgIGdldE9wdGlvbjogZnVuY3Rpb24ob3B0aW9uKSB7cmV0dXJuIG9wdGlvbnNbb3B0aW9uXTt9LAogICAgICB1bmRvOiBvcGVyYXRpb24odW5kbyksCiAgICAgIHJlZG86IG9wZXJhdGlvbihyZWRvKSwKICAgICAgaW5kZW50TGluZTogb3BlcmF0aW9uKGZ1bmN0aW9uKG4pIHtpZiAoaXNMaW5lKG4pKSBpbmRlbnRMaW5lKG4sICJzbWFydCIpO30pLAogICAgICBoaXN0b3J5U2l6ZTogZnVuY3Rpb24oKSB7cmV0dXJuIHt1bmRvOiBoaXN0b3J5LmRvbmUubGVuZ3RoLCByZWRvOiBoaXN0b3J5LnVuZG9uZS5sZW5ndGh9O30sCiAgICAgIG1hdGNoQnJhY2tldHM6IG9wZXJhdGlvbihmdW5jdGlvbigpe21hdGNoQnJhY2tldHModHJ1ZSk7fSksCiAgICAgIGdldFRva2VuQXQ6IGZ1bmN0aW9uKHBvcykgewogICAgICAgIHBvcyA9IGNsaXBQb3MocG9zKTsKICAgICAgICByZXR1cm4gbGluZXNbcG9zLmxpbmVdLmdldFRva2VuQXQobW9kZSwgZ2V0U3RhdGVCZWZvcmUocG9zLmxpbmUpLCBwb3MuY2gpOwogICAgICB9LAogICAgICBjdXJzb3JDb29yZHM6IGZ1bmN0aW9uKHN0YXJ0KXsKICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBzZWwuaW52ZXJ0ZWQ7CiAgICAgICAgcmV0dXJuIHBhZ2VDb29yZHMoc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50byk7CiAgICAgIH0sCiAgICAgIGNoYXJDb29yZHM6IGZ1bmN0aW9uKHBvcyl7cmV0dXJuIHBhZ2VDb29yZHMoY2xpcFBvcyhwb3MpKTt9LAogICAgICBjb29yZHNDaGFyOiBmdW5jdGlvbihjb29yZHMpIHsKICAgICAgICB2YXIgb2ZmID0gZWx0T2Zmc2V0KGxpbmVTcGFjZSk7CiAgICAgICAgdmFyIGxpbmUgPSBjbGlwTGluZShNYXRoLm1pbihsaW5lcy5sZW5ndGggLSAxLCBzaG93aW5nRnJvbSArIE1hdGguZmxvb3IoKGNvb3Jkcy55IC0gb2ZmLnRvcCkgLyBsaW5lSGVpZ2h0KCkpKSk7CiAgICAgICAgcmV0dXJuIGNsaXBQb3Moe2xpbmU6IGxpbmUsIGNoOiBjaGFyRnJvbVgoY2xpcExpbmUobGluZSksIGNvb3Jkcy54IC0gb2ZmLmxlZnQpfSk7CiAgICAgIH0sCiAgICAgIGdldFNlYXJjaEN1cnNvcjogZnVuY3Rpb24ocXVlcnksIHBvcywgY2FzZUZvbGQpIHtyZXR1cm4gbmV3IFNlYXJjaEN1cnNvcihxdWVyeSwgcG9zLCBjYXNlRm9sZCk7fSwKICAgICAgbWFya1RleHQ6IG9wZXJhdGlvbihmdW5jdGlvbihhLCBiLCBjKXtyZXR1cm4gb3BlcmF0aW9uKG1hcmtUZXh0KGEsIGIsIGMpKTt9KSwKICAgICAgc2V0TWFya2VyOiBhZGRHdXR0ZXJNYXJrZXIsCiAgICAgIGNsZWFyTWFya2VyOiByZW1vdmVHdXR0ZXJNYXJrZXIsCiAgICAgIHNldExpbmVDbGFzczogb3BlcmF0aW9uKHNldExpbmVDbGFzcyksCiAgICAgIGxpbmVJbmZvOiBsaW5lSW5mbywKICAgICAgYWRkV2lkZ2V0OiBmdW5jdGlvbihwb3MsIG5vZGUsIHNjcm9sbCkgewogICAgICAgIHZhciBwb3MgPSBsb2NhbENvb3JkcyhjbGlwUG9zKHBvcyksIHRydWUpOwogICAgICAgIG5vZGUuc3R5bGUudG9wID0gKHNob3dpbmdGcm9tICogbGluZUhlaWdodCgpICsgcG9zLnlCb3QgKyBwYWRkaW5nVG9wKCkpICsgInB4IjsKICAgICAgICBub2RlLnN0eWxlLmxlZnQgPSAocG9zLnggKyBwYWRkaW5nTGVmdCgpKSArICJweCI7CiAgICAgICAgY29kZS5hcHBlbmRDaGlsZChub2RlKTsKICAgICAgICBpZiAoc2Nyb2xsKQogICAgICAgICAgc2Nyb2xsSW50b1ZpZXcocG9zLngsIHBvcy55Qm90LCBwb3MueCArIG5vZGUub2Zmc2V0V2lkdGgsIHBvcy55Qm90ICsgbm9kZS5vZmZzZXRIZWlnaHQpOwogICAgICB9LAoKICAgICAgbGluZUNvdW50OiBmdW5jdGlvbigpIHtyZXR1cm4gbGluZXMubGVuZ3RoO30sCiAgICAgIGdldEN1cnNvcjogZnVuY3Rpb24oc3RhcnQpIHsKICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBzZWwuaW52ZXJ0ZWQ7CiAgICAgICAgcmV0dXJuIGNvcHlQb3Moc3RhcnQgPyBzZWwuZnJvbSA6IHNlbC50byk7CiAgICAgIH0sCiAgICAgIHNvbWV0aGluZ1NlbGVjdGVkOiBmdW5jdGlvbigpIHtyZXR1cm4gIXBvc0VxKHNlbC5mcm9tLCBzZWwudG8pO30sCiAgICAgIHNldEN1cnNvcjogb3BlcmF0aW9uKGZ1bmN0aW9uKGxpbmUsIGNoKSB7CiAgICAgICAgaWYgKGNoID09IG51bGwgJiYgdHlwZW9mIGxpbmUubGluZSA9PSAibnVtYmVyIikgc2V0Q3Vyc29yKGxpbmUubGluZSwgbGluZS5jaCk7CiAgICAgICAgZWxzZSBzZXRDdXJzb3IobGluZSwgY2gpOwogICAgICB9KSwKICAgICAgc2V0U2VsZWN0aW9uOiBvcGVyYXRpb24oZnVuY3Rpb24oZnJvbSwgdG8pIHtzZXRTZWxlY3Rpb24oY2xpcFBvcyhmcm9tKSwgY2xpcFBvcyh0byB8fCBmcm9tKSk7fSksCiAgICAgIGdldExpbmU6IGZ1bmN0aW9uKGxpbmUpIHtpZiAoaXNMaW5lKGxpbmUpKSByZXR1cm4gbGluZXNbbGluZV0udGV4dDt9LAogICAgICBzZXRMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSwgdGV4dCkgewogICAgICAgIGlmIChpc0xpbmUobGluZSkpIHJlcGxhY2VSYW5nZSh0ZXh0LCB7bGluZTogbGluZSwgY2g6IDB9LCB7bGluZTogbGluZSwgY2g6IGxpbmVzW2xpbmVdLnRleHQubGVuZ3RofSk7CiAgICAgIH0pLAogICAgICByZW1vdmVMaW5lOiBvcGVyYXRpb24oZnVuY3Rpb24obGluZSkgewogICAgICAgIGlmIChpc0xpbmUobGluZSkpIHJlcGxhY2VSYW5nZSgiIiwge2xpbmU6IGxpbmUsIGNoOiAwfSwgY2xpcFBvcyh7bGluZTogbGluZSsxLCBjaDogMH0pKTsKICAgICAgfSksCiAgICAgIHJlcGxhY2VSYW5nZTogb3BlcmF0aW9uKHJlcGxhY2VSYW5nZSksCiAgICAgIGdldFJhbmdlOiBmdW5jdGlvbihmcm9tLCB0bykge3JldHVybiBnZXRSYW5nZShjbGlwUG9zKGZyb20pLCBjbGlwUG9zKHRvKSk7fSwKCiAgICAgIG9wZXJhdGlvbjogZnVuY3Rpb24oZil7cmV0dXJuIG9wZXJhdGlvbihmKSgpO30sCiAgICAgIHJlZnJlc2g6IGZ1bmN0aW9uKCl7dXBkYXRlRGlzcGxheSh0cnVlKTt9LAogICAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiBpbnB1dDt9LAogICAgICBnZXRXcmFwcGVyRWxlbWVudDogZnVuY3Rpb24oKXtyZXR1cm4gd3JhcHBlcjt9CiAgICB9OwoKICAgIGZ1bmN0aW9uIHNldFZhbHVlKGNvZGUpIHsKICAgICAgaGlzdG9yeSA9IG51bGw7CiAgICAgIHZhciB0b3AgPSB7bGluZTogMCwgY2g6IDB9OwogICAgICB1cGRhdGVMaW5lcyh0b3AsIHtsaW5lOiBsaW5lcy5sZW5ndGggLSAxLCBjaDogbGluZXNbbGluZXMubGVuZ3RoLTFdLnRleHQubGVuZ3RofSwKICAgICAgICAgICAgICAgICAgc3BsaXRMaW5lcyhjb2RlKSwgdG9wLCB0b3ApOwogICAgICBoaXN0b3J5ID0gbmV3IEhpc3RvcnkoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKGNvZGUpIHsKICAgICAgdmFyIHRleHQgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyArK2kpCiAgICAgICAgdGV4dC5wdXNoKGxpbmVzW2ldLnRleHQpOwogICAgICByZXR1cm4gdGV4dC5qb2luKCJcbiIpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uTW91c2VEb3duKGUpIHsKICAgICAgdmFyIGxkID0gbGFzdERvdWJsZUNsaWNrOyBsYXN0RG91YmxlQ2xpY2sgPSBudWxsOwogICAgICAvLyBGaXJzdCwgc2VlIGlmIHRoaXMgaXMgYSBjbGljayBpbiB0aGUgZ3V0dGVyCiAgICAgIGZvciAodmFyIG4gPSBlLnRhcmdldCgpOyBuICE9IHdyYXBwZXI7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgICAgaWYgKG4ucGFyZW50Tm9kZSA9PSBndXR0ZXJUZXh0KSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5vbkd1dHRlckNsaWNrKQogICAgICAgICAgICBvcHRpb25zLm9uR3V0dGVyQ2xpY2soaW5zdGFuY2UsIGluZGV4T2YoZ3V0dGVyVGV4dC5jaGlsZE5vZGVzLCBuKSArIHNob3dpbmdGcm9tKTsKICAgICAgICAgIHJldHVybiBlLnN0b3AoKTsKICAgICAgICB9CgogICAgICBpZiAoZ2Vja28gJiYgZS5idXR0b24oKSA9PSAzKSBvbkNvbnRleHRNZW51KGUpOwogICAgICBpZiAoZS5idXR0b24oKSAhPSAxKSByZXR1cm47CiAgICAgIC8vIEZvciBidXR0b24gMSwgaWYgaXQgd2FzIGNsaWNrZWQgaW5zaWRlIHRoZSBlZGl0b3IKICAgICAgLy8gKHBvc0Zyb21Nb3VzZSByZXR1cm5pbmcgbm9uLW51bGwpLCB3ZSBoYXZlIHRvIGFkanVzdCB0aGUKICAgICAgLy8gc2VsZWN0aW9uLgogICAgICB2YXIgc3RhcnQgPSBwb3NGcm9tTW91c2UoZSksIGxhc3QgPSBzdGFydCwgZ29pbmc7CiAgICAgIGlmICghc3RhcnQpIHtpZiAoZS50YXJnZXQoKSA9PSB3cmFwcGVyKSBlLnN0b3AoKTsgcmV0dXJuO30KCiAgICAgIGlmICghZm9jdXNlZCkgb25Gb2N1cygpOwogICAgICBlLnN0b3AoKTsKICAgICAgaWYgKGxkICYmICtuZXcgRGF0ZSAtIGxkIDwgNDAwKSByZXR1cm4gc2VsZWN0TGluZShzdGFydC5saW5lKTsKCiAgICAgIHNldEN1cnNvcihzdGFydC5saW5lLCBzdGFydC5jaCwgdHJ1ZSk7CiAgICAgIC8vIEFuZCB0aGVuIHdlIGhhdmUgdG8gc2VlIGlmIGl0J3MgYSBkcmFnIGV2ZW50LCBpbiB3aGljaCBjYXNlCiAgICAgIC8vIHRoZSBkcmFnZ2VkLW92ZXIgdGV4dCBtdXN0IGJlIHNlbGVjdGVkLgogICAgICBmdW5jdGlvbiBlbmQoKSB7CiAgICAgICAgZm9jdXNJbnB1dCgpOwogICAgICAgIHVwZGF0ZUlucHV0ID0gdHJ1ZTsKICAgICAgICBtb3ZlKCk7IHVwKCk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gZXh0ZW5kKGUpIHsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUsIHRydWUpOwogICAgICAgIGlmIChjdXIgJiYgIXBvc0VxKGN1ciwgbGFzdCkpIHsKICAgICAgICAgIGlmICghZm9jdXNlZCkgb25Gb2N1cygpOwogICAgICAgICAgbGFzdCA9IGN1cjsKICAgICAgICAgIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgICB1cGRhdGVJbnB1dCA9IGZhbHNlOwogICAgICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoKTsKICAgICAgICAgIGlmIChjdXIubGluZSA+PSB2aXNpYmxlLnRvIHx8IGN1ci5saW5lIDwgdmlzaWJsZS5mcm9tKQogICAgICAgICAgICBnb2luZyA9IHNldFRpbWVvdXQob3BlcmF0aW9uKGZ1bmN0aW9uKCl7ZXh0ZW5kKGUpO30pLCAxNTApOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIG1vdmUgPSBjb25uZWN0KHRhcmdldERvY3VtZW50LCAibW91c2Vtb3ZlIiwgb3BlcmF0aW9uKGZ1bmN0aW9uKGUpIHsKICAgICAgICBjbGVhclRpbWVvdXQoZ29pbmcpOwogICAgICAgIGUuc3RvcCgpOwogICAgICAgIGV4dGVuZChlKTsKICAgICAgfSksIHRydWUpOwogICAgICB2YXIgdXAgPSBjb25uZWN0KHRhcmdldERvY3VtZW50LCAibW91c2V1cCIsIG9wZXJhdGlvbihmdW5jdGlvbihlKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KGdvaW5nKTsKICAgICAgICB2YXIgY3VyID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICAgIGlmIChjdXIpIHNldFNlbGVjdGlvblVzZXIoc3RhcnQsIGN1cik7CiAgICAgICAgZS5zdG9wKCk7CiAgICAgICAgZW5kKCk7CiAgICAgIH0pLCB0cnVlKTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uRGJsQ2xpY2soZSkgewogICAgICB2YXIgcG9zID0gcG9zRnJvbU1vdXNlKGUpOwogICAgICBpZiAoIXBvcykgcmV0dXJuOwogICAgICBzZWxlY3RXb3JkQXQocG9zKTsKICAgICAgZS5zdG9wKCk7CiAgICAgIGxhc3REb3VibGVDbGljayA9ICtuZXcgRGF0ZTsKICAgIH0KICAgIGZ1bmN0aW9uIG9uRHJvcChlKSB7CiAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoZSwgdHJ1ZSksIGZpbGVzID0gZS5lLmRhdGFUcmFuc2Zlci5maWxlczsKICAgICAgaWYgKCFwb3MgfHwgb3B0aW9ucy5yZWFkT25seSkgcmV0dXJuOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoICYmIHdpbmRvdy5GaWxlUmVhZGVyICYmIHdpbmRvdy5GaWxlKSB7CiAgICAgICAgdmFyIG4gPSBmaWxlcy5sZW5ndGgsIHRleHQgPSBBcnJheShuKSwgcmVhZCA9IDA7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyArK2kpIGxvYWRGaWxlKGZpbGVzW2ldLCBpKTsKICAgICAgICBmdW5jdGlvbiBsb2FkRmlsZShmaWxlLCBpKSB7CiAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXI7CiAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHRleHRbaV0gPSByZWFkZXIucmVzdWx0OwogICAgICAgICAgICBpZiAoKytyZWFkID09IG4pIHJlcGxhY2VSYW5nZSh0ZXh0LmpvaW4oIiIpLCBjbGlwUG9zKHBvcyksIGNsaXBQb3MocG9zKSk7CiAgICAgICAgICB9OwogICAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgdGV4dCA9IGUuZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgiVGV4dCIpOwogICAgICAgICAgaWYgKHRleHQpIHJlcGxhY2VSYW5nZSh0ZXh0LCBwb3MsIHBvcyk7CiAgICAgICAgfQogICAgICAgIGNhdGNoKGUpe30KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gb25LZXlEb3duKGUpIHsKICAgICAgaWYgKCFmb2N1c2VkKSBvbkZvY3VzKCk7CgogICAgICB2YXIgY29kZSA9IGUuZS5rZXlDb2RlOwogICAgICAvLyBUcmllcyB0byBkZXRlY3QgY3RybCBvbiBub24tbWFjLCBjbWQgb24gbWFjLgogICAgICB2YXIgbW9kID0gKG1hYyA/IGUuZS5tZXRhS2V5IDogZS5lLmN0cmxLZXkpICYmICFlLmUuYWx0S2V5LCBhbnlNb2QgPSBlLmUuY3RybEtleSB8fCBlLmUuYWx0S2V5IHx8IGUuZS5tZXRhS2V5OwogICAgICBpZiAoY29kZSA9PSAxNiB8fCBlLmUuc2hpZnRLZXkpIHNoaWZ0U2VsZWN0aW5nID0gc2hpZnRTZWxlY3RpbmcgfHwgKHNlbC5pbnZlcnRlZCA/IHNlbC50byA6IHNlbC5mcm9tKTsKICAgICAgZWxzZSBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICAgIC8vIEZpcnN0IGdpdmUgb25LZXlFdmVudCBvcHRpb24gYSBjaGFuY2UgdG8gaGFuZGxlIHRoaXMuCiAgICAgIGlmIChvcHRpb25zLm9uS2V5RXZlbnQgJiYgb3B0aW9ucy5vbktleUV2ZW50KGluc3RhbmNlLCBhZGRTdG9wKGUuZSkpKSByZXR1cm47CgogICAgICBpZiAoY29kZSA9PSAzMyB8fCBjb2RlID09IDM0KSB7c2Nyb2xsUGFnZShjb2RlID09IDM0KTsgcmV0dXJuIGUuc3RvcCgpO30gLy8gcGFnZSB1cC9kb3duCiAgICAgIGlmIChtb2QgJiYgKChjb2RlID09IDM2IHx8IGNvZGUgPT0gMzUpIHx8IC8vIGN0cmwtaG9tZS9lbmQKICAgICAgICAgICAgICAgICAgbWFjICYmIChjb2RlID09IDM4IHx8IGNvZGUgPT0gNDApKSkgeyAvLyBjbWQtdXAvZG93bgogICAgICAgIHNjcm9sbEVuZChjb2RlID09IDM2IHx8IGNvZGUgPT0gMzgpOyByZXR1cm4gZS5zdG9wKCk7CiAgICAgIH0KICAgICAgaWYgKG1vZCAmJiBjb2RlID09IDY1KSB7c2VsZWN0QWxsKCk7IHJldHVybiBlLnN0b3AoKTt9IC8vIGN0cmwtYQogICAgICBpZiAoIW9wdGlvbnMucmVhZE9ubHkpIHsKICAgICAgICBpZiAoIWFueU1vZCAmJiBjb2RlID09IDEzKSB7cmV0dXJuO30gLy8gZW50ZXIKICAgICAgICBpZiAoIWFueU1vZCAmJiBjb2RlID09IDkgJiYgaGFuZGxlVGFiKGUuZS5zaGlmdEtleSkpIHJldHVybiBlLnN0b3AoKTsgLy8gdGFiCiAgICAgICAgaWYgKG1vZCAmJiBjb2RlID09IDkwKSB7dW5kbygpOyByZXR1cm4gZS5zdG9wKCk7fSAvLyBjdHJsLXoKICAgICAgICBpZiAobW9kICYmICgoZS5lLnNoaWZ0S2V5ICYmIGNvZGUgPT0gOTApIHx8IGNvZGUgPT0gODkpKSB7cmVkbygpOyByZXR1cm4gZS5zdG9wKCk7fSAvLyBjdHJsLXNoaWZ0LXosIGN0cmwteQogICAgICB9CgogICAgICAvLyBLZXkgaWQgdG8gdXNlIGluIHRoZSBtb3ZlbWVudEtleXMgbWFwLiBXZSBhbHNvIHBhc3MgaXQgdG8KICAgICAgLy8gZmFzdFBvbGwgaW4gb3JkZXIgdG8gJ3NlbGYgbGVhcm4nLiBXZSBuZWVkIHRoaXMgYmVjYXVzZQogICAgICAvLyByZWR1Y2VkU2VsZWN0aW9uLCB0aGUgaGFjayB3aGVyZSB3ZSBjb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHRvCiAgICAgIC8vIGl0cyBzdGFydCB3aGVuIGl0IGlzIGludmVydGVkIGFuZCBhIG1vdmVtZW50IGtleSBpcyBwcmVzc2VkCiAgICAgIC8vIChhbmQgbGF0ZXIgcmVzdG9yZSBpdCBhZ2FpbiksIHNob3VsZG4ndCBiZSB1c2VkIGZvcgogICAgICAvLyBub24tbW92ZW1lbnQga2V5cy4KICAgICAgY3VyS2V5SWQgPSAobW9kID8gImMiIDogIiIpICsgY29kZTsKICAgICAgaWYgKHNlbC5pbnZlcnRlZCAmJiBtb3ZlbWVudEtleXMuaGFzT3duUHJvcGVydHkoY3VyS2V5SWQpKSB7CiAgICAgICAgdmFyIHJhbmdlID0gc2VsUmFuZ2UoaW5wdXQpOwogICAgICAgIGlmIChyYW5nZSkgewogICAgICAgICAgcmVkdWNlZFNlbGVjdGlvbiA9IHthbmNob3I6IHJhbmdlLnN0YXJ0fTsKICAgICAgICAgIHNldFNlbFJhbmdlKGlucHV0LCByYW5nZS5zdGFydCwgcmFuZ2Uuc3RhcnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBmYXN0UG9sbChjdXJLZXlJZCk7CiAgICB9CiAgICBmdW5jdGlvbiBvbktleVVwKGUpIHsKICAgICAgaWYgKG9wdGlvbnMub25LZXlFdmVudCAmJiBvcHRpb25zLm9uS2V5RXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZS5lKSkpIHJldHVybjsKICAgICAgaWYgKHJlZHVjZWRTZWxlY3Rpb24pIHsKICAgICAgICByZWR1Y2VkU2VsZWN0aW9uID0gbnVsbDsKICAgICAgICB1cGRhdGVJbnB1dCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGUuZS5rZXlDb2RlID09IDE2KSBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBvbktleVByZXNzKGUpIHsKICAgICAgaWYgKG9wdGlvbnMub25LZXlFdmVudCAmJiBvcHRpb25zLm9uS2V5RXZlbnQoaW5zdGFuY2UsIGFkZFN0b3AoZS5lKSkpIHJldHVybjsKICAgICAgaWYgKG9wdGlvbnMuZWxlY3RyaWNDaGFycyAmJiBtb2RlLmVsZWN0cmljQ2hhcnMpIHsKICAgICAgICB2YXIgY2ggPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGUuZS5jaGFyQ29kZSA9PSBudWxsID8gZS5lLmtleUNvZGUgOiBlLmUuY2hhckNvZGUpOwogICAgICAgIGlmIChtb2RlLmVsZWN0cmljQ2hhcnMuaW5kZXhPZihjaCkgPiAtMSkKICAgICAgICAgIHNldFRpbWVvdXQob3BlcmF0aW9uKGZ1bmN0aW9uKCkge2luZGVudExpbmUoc2VsLnRvLmxpbmUsICJzbWFydCIpO30pLCA1MCk7CiAgICAgIH0KICAgICAgdmFyIGNvZGUgPSBlLmUua2V5Q29kZTsKICAgICAgLy8gUmUtc3RvcCB0YWIgYW5kIGVudGVyLiBOZWNlc3Nhcnkgb24gc29tZSBicm93c2Vycy4KICAgICAgaWYgKGNvZGUgPT0gMTMpIHtpZiAoIW9wdGlvbnMucmVhZE9ubHkpIGhhbmRsZUVudGVyKCk7IGUuc3RvcCgpO30KICAgICAgZWxzZSBpZiAoIWUuZS5jdHJsS2V5ICYmICFlLmUuYWx0S2V5ICYmICFlLmUubWV0YUtleSAmJiBjb2RlID09IDkgJiYgb3B0aW9ucy50YWJNb2RlICE9ICJkZWZhdWx0IikgZS5zdG9wKCk7CiAgICAgIGVsc2UgZmFzdFBvbGwoY3VyS2V5SWQpOwogICAgfQoKICAgIGZ1bmN0aW9uIG9uRm9jdXMoKSB7CiAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5ID09ICJub2N1cnNvciIpIHJldHVybjsKICAgICAgaWYgKCFmb2N1c2VkICYmIG9wdGlvbnMub25Gb2N1cykgb3B0aW9ucy5vbkZvY3VzKGluc3RhbmNlKTsKICAgICAgZm9jdXNlZCA9IHRydWU7CiAgICAgIHNsb3dQb2xsKCk7CiAgICAgIGlmICh3cmFwcGVyLmNsYXNzTmFtZS5zZWFyY2goL1xiQ29kZU1pcnJvci1mb2N1c2VkXGIvKSA9PSAtMSkKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSArPSAiIENvZGVNaXJyb3ItZm9jdXNlZCI7CiAgICAgIHJlc3RhcnRCbGluaygpOwogICAgfQogICAgZnVuY3Rpb24gb25CbHVyKCkgewogICAgICBpZiAoZm9jdXNlZCAmJiBvcHRpb25zLm9uQmx1cikgb3B0aW9ucy5vbkJsdXIoaW5zdGFuY2UpOwogICAgICBjbGVhckludGVydmFsKGJsaW5rZXIpOwogICAgICBzaGlmdFNlbGVjdGluZyA9IG51bGw7CiAgICAgIGZvY3VzZWQgPSBmYWxzZTsKICAgICAgd3JhcHBlci5jbGFzc05hbWUgPSB3cmFwcGVyLmNsYXNzTmFtZS5yZXBsYWNlKCIgQ29kZU1pcnJvci1mb2N1c2VkIiwgIiIpOwogICAgfQoKICAgIC8vIFJlcGxhY2UgdGhlIHJhbmdlIGZyb20gZnJvbSB0byB0byBieSB0aGUgc3RyaW5ncyBpbiBuZXdUZXh0LgogICAgLy8gQWZ0ZXJ3YXJkcywgc2V0IHRoZSBzZWxlY3Rpb24gdG8gc2VsRnJvbSwgc2VsVG8uCiAgICBmdW5jdGlvbiB1cGRhdGVMaW5lcyhmcm9tLCB0bywgbmV3VGV4dCwgc2VsRnJvbSwgc2VsVG8pIHsKICAgICAgaWYgKGhpc3RvcnkpIHsKICAgICAgICB2YXIgb2xkID0gW107CiAgICAgICAgZm9yICh2YXIgaSA9IGZyb20ubGluZSwgZSA9IHRvLmxpbmUgKyAxOyBpIDwgZTsgKytpKSBvbGQucHVzaChsaW5lc1tpXS50ZXh0KTsKICAgICAgICBoaXN0b3J5LmFkZENoYW5nZShmcm9tLmxpbmUsIG5ld1RleHQubGVuZ3RoLCBvbGQpOwogICAgICAgIHdoaWxlIChoaXN0b3J5LmRvbmUubGVuZ3RoID4gb3B0aW9ucy51bmRvRGVwdGgpIGhpc3RvcnkuZG9uZS5zaGlmdCgpOwogICAgICB9CiAgICAgIHVwZGF0ZUxpbmVzTm9VbmRvKGZyb20sIHRvLCBuZXdUZXh0LCBzZWxGcm9tLCBzZWxUbyk7CiAgICB9CiAgICBmdW5jdGlvbiB1bnJlZG9IZWxwZXIoZnJvbSwgdG8pIHsKICAgICAgdmFyIGNoYW5nZSA9IGZyb20ucG9wKCk7CiAgICAgIGlmIChjaGFuZ2UpIHsKICAgICAgICB2YXIgcmVwbGFjZWQgPSBbXSwgZW5kID0gY2hhbmdlLnN0YXJ0ICsgY2hhbmdlLmFkZGVkOwogICAgICAgIGZvciAodmFyIGkgPSBjaGFuZ2Uuc3RhcnQ7IGkgPCBlbmQ7ICsraSkgcmVwbGFjZWQucHVzaChsaW5lc1tpXS50ZXh0KTsKICAgICAgICB0by5wdXNoKHtzdGFydDogY2hhbmdlLnN0YXJ0LCBhZGRlZDogY2hhbmdlLm9sZC5sZW5ndGgsIG9sZDogcmVwbGFjZWR9KTsKICAgICAgICB2YXIgcG9zID0gY2xpcFBvcyh7bGluZTogY2hhbmdlLnN0YXJ0ICsgY2hhbmdlLm9sZC5sZW5ndGggLSAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaDogZWRpdEVuZChyZXBsYWNlZFtyZXBsYWNlZC5sZW5ndGgtMV0sIGNoYW5nZS5vbGRbY2hhbmdlLm9sZC5sZW5ndGgtMV0pfSk7CiAgICAgICAgdXBkYXRlTGluZXNOb1VuZG8oe2xpbmU6IGNoYW5nZS5zdGFydCwgY2g6IDB9LCB7bGluZTogZW5kIC0gMSwgY2g6IGxpbmVzW2VuZC0xXS50ZXh0Lmxlbmd0aH0sIGNoYW5nZS5vbGQsIHBvcywgcG9zKTsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gdW5kbygpIHt1bnJlZG9IZWxwZXIoaGlzdG9yeS5kb25lLCBoaXN0b3J5LnVuZG9uZSk7fQogICAgZnVuY3Rpb24gcmVkbygpIHt1bnJlZG9IZWxwZXIoaGlzdG9yeS51bmRvbmUsIGhpc3RvcnkuZG9uZSk7fQoKICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmVzTm9VbmRvKGZyb20sIHRvLCBuZXdUZXh0LCBzZWxGcm9tLCBzZWxUbykgewogICAgICB2YXIgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2UsIG1heExpbmVMZW5ndGggPSBtYXhMaW5lLmxlbmd0aDsKICAgICAgZm9yICh2YXIgaSA9IGZyb20ubGluZTsgaSA8IHRvLmxpbmU7ICsraSkgewogICAgICAgIGlmIChsaW5lc1tpXS50ZXh0Lmxlbmd0aCA9PSBtYXhMaW5lTGVuZ3RoKSB7cmVjb21wdXRlTWF4TGVuZ3RoID0gdHJ1ZTsgYnJlYWs7fQogICAgICB9CgogICAgICB2YXIgbmxpbmVzID0gdG8ubGluZSAtIGZyb20ubGluZSwgZmlyc3RMaW5lID0gbGluZXNbZnJvbS5saW5lXSwgbGFzdExpbmUgPSBsaW5lc1t0by5saW5lXTsKICAgICAgLy8gRmlyc3QgYWRqdXN0IHRoZSBsaW5lIHN0cnVjdHVyZSwgdGFraW5nIHNvbWUgY2FyZSB0byBsZWF2ZSBoaWdobGlnaHRpbmcgaW50YWN0LgogICAgICBpZiAoZmlyc3RMaW5lID09IGxhc3RMaW5lKSB7CiAgICAgICAgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpCiAgICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCB0by5jaCwgbmV3VGV4dFswXSk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsYXN0TGluZSA9IGZpcnN0TGluZS5zcGxpdCh0by5jaCwgbmV3VGV4dFtuZXdUZXh0Lmxlbmd0aC0xXSk7CiAgICAgICAgICB2YXIgc3BsaWNlYXJncyA9IFtmcm9tLmxpbmUgKyAxLCBubGluZXNdOwogICAgICAgICAgZmlyc3RMaW5lLnJlcGxhY2UoZnJvbS5jaCwgZmlyc3RMaW5lLnRleHQubGVuZ3RoLCBuZXdUZXh0WzBdKTsKICAgICAgICAgIGZvciAodmFyIGkgPSAxLCBlID0gbmV3VGV4dC5sZW5ndGggLSAxOyBpIDwgZTsgKytpKSBzcGxpY2VhcmdzLnB1c2gobmV3IExpbmUobmV3VGV4dFtpXSkpOwogICAgICAgICAgc3BsaWNlYXJncy5wdXNoKGxhc3RMaW5lKTsKICAgICAgICAgIGxpbmVzLnNwbGljZS5hcHBseShsaW5lcywgc3BsaWNlYXJncyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgaWYgKG5ld1RleHQubGVuZ3RoID09IDEpIHsKICAgICAgICBmaXJzdExpbmUucmVwbGFjZShmcm9tLmNoLCBmaXJzdExpbmUudGV4dC5sZW5ndGgsIG5ld1RleHRbMF0gKyBsYXN0TGluZS50ZXh0LnNsaWNlKHRvLmNoKSk7CiAgICAgICAgbGluZXMuc3BsaWNlKGZyb20ubGluZSArIDEsIG5saW5lcyk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIHNwbGljZWFyZ3MgPSBbZnJvbS5saW5lICsgMSwgbmxpbmVzIC0gMV07CiAgICAgICAgZmlyc3RMaW5lLnJlcGxhY2UoZnJvbS5jaCwgZmlyc3RMaW5lLnRleHQubGVuZ3RoLCBuZXdUZXh0WzBdKTsKICAgICAgICBsYXN0TGluZS5yZXBsYWNlKDAsIHRvLmNoLCBuZXdUZXh0W25ld1RleHQubGVuZ3RoLTFdKTsKICAgICAgICBmb3IgKHZhciBpID0gMSwgZSA9IG5ld1RleHQubGVuZ3RoIC0gMTsgaSA8IGU7ICsraSkgc3BsaWNlYXJncy5wdXNoKG5ldyBMaW5lKG5ld1RleHRbaV0pKTsKICAgICAgICBsaW5lcy5zcGxpY2UuYXBwbHkobGluZXMsIHNwbGljZWFyZ3MpOwogICAgICB9CgoKICAgICAgZm9yICh2YXIgaSA9IGZyb20ubGluZSwgZSA9IGkgKyBuZXdUZXh0Lmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgIHZhciBsID0gbGluZXNbaV0udGV4dDsKICAgICAgICBpZiAobC5sZW5ndGggPiBtYXhMaW5lTGVuZ3RoKSB7CiAgICAgICAgICBtYXhMaW5lID0gbDsgbWF4TGluZUxlbmd0aCA9IGwubGVuZ3RoOwogICAgICAgICAgcmVjb21wdXRlTWF4TGVuZ3RoID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChyZWNvbXB1dGVNYXhMZW5ndGgpIHsKICAgICAgICBtYXhMaW5lTGVuZ3RoID0gMDsKICAgICAgICBmb3IgKHZhciBpID0gMCwgZSA9IGxpbmVzLmxlbmd0aDsgaSA8IGU7ICsraSkgewogICAgICAgICAgdmFyIGwgPSBsaW5lc1tpXS50ZXh0OwogICAgICAgICAgaWYgKGwubGVuZ3RoID4gbWF4TGluZUxlbmd0aCkgewogICAgICAgICAgICBtYXhMaW5lTGVuZ3RoID0gbC5sZW5ndGg7IG1heExpbmUgPSBsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIHRoZXNlIGxpbmVzIHRvIHRoZSB3b3JrIGFycmF5LCBzbyB0aGF0IHRoZXkgd2lsbCBiZQogICAgICAvLyBoaWdobGlnaHRlZC4gQWRqdXN0IHdvcmsgbGluZXMgaWYgbGluZXMgd2VyZSBhZGRlZC9yZW1vdmVkLgogICAgICB2YXIgbmV3V29yayA9IFtdLCBsZW5kaWZmID0gbmV3VGV4dC5sZW5ndGggLSBubGluZXMgLSAxOwogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IHdvcmsubGVuZ3RoOyBpIDwgbDsgKytpKSB7CiAgICAgICAgdmFyIHRhc2sgPSB3b3JrW2ldOwogICAgICAgIGlmICh0YXNrIDwgZnJvbS5saW5lKSBuZXdXb3JrLnB1c2godGFzayk7CiAgICAgICAgZWxzZSBpZiAodGFzayA+IHRvLmxpbmUpIG5ld1dvcmsucHVzaCh0YXNrICsgbGVuZGlmZik7CiAgICAgIH0KICAgICAgaWYgKG5ld1RleHQubGVuZ3RoKSBuZXdXb3JrLnB1c2goZnJvbS5saW5lKTsKICAgICAgd29yayA9IG5ld1dvcms7CiAgICAgIHN0YXJ0V29ya2VyKDEwMCk7CiAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhlc2UgbGluZXMgY2hhbmdlZCwgZm9yIHVwZGF0aW5nIHRoZSBkaXNwbGF5CiAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogdG8ubGluZSArIDEsIGRpZmY6IGxlbmRpZmZ9KTsKICAgICAgdGV4dENoYW5nZWQgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCB0ZXh0OiBuZXdUZXh0fTsKCiAgICAgIC8vIFVwZGF0ZSB0aGUgc2VsZWN0aW9uCiAgICAgIGZ1bmN0aW9uIHVwZGF0ZUxpbmUobikge3JldHVybiBuIDw9IE1hdGgubWluKHRvLmxpbmUsIHRvLmxpbmUgKyBsZW5kaWZmKSA/IG4gOiBuICsgbGVuZGlmZjt9CiAgICAgIHNldFNlbGVjdGlvbihzZWxGcm9tLCBzZWxUbywgdXBkYXRlTGluZShzZWwuZnJvbS5saW5lKSwgdXBkYXRlTGluZShzZWwudG8ubGluZSkpOwoKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBzY3JvbGwtc2l6ZSBkaXYgaGFzIHRoZSBjb3JyZWN0IGhlaWdodC4KICAgICAgY29kZS5zdHlsZS5oZWlnaHQgPSAobGluZXMubGVuZ3RoICogbGluZUhlaWdodCgpICsgMiAqIHBhZGRpbmdUb3AoKSkgKyAicHgiOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZShjb2RlLCBmcm9tLCB0bykgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsKICAgICAgaWYgKCF0bykgdG8gPSBmcm9tOyBlbHNlIHRvID0gY2xpcFBvcyh0byk7CiAgICAgIGNvZGUgPSBzcGxpdExpbmVzKGNvZGUpOwogICAgICBmdW5jdGlvbiBhZGp1c3RQb3MocG9zKSB7CiAgICAgICAgaWYgKHBvc0xlc3MocG9zLCBmcm9tKSkgcmV0dXJuIHBvczsKICAgICAgICBpZiAoIXBvc0xlc3ModG8sIHBvcykpIHJldHVybiBlbmQ7CiAgICAgICAgdmFyIGxpbmUgPSBwb3MubGluZSArIGNvZGUubGVuZ3RoIC0gKHRvLmxpbmUgLSBmcm9tLmxpbmUpIC0gMTsKICAgICAgICB2YXIgY2ggPSBwb3MuY2g7CiAgICAgICAgaWYgKHBvcy5saW5lID09IHRvLmxpbmUpCiAgICAgICAgICBjaCArPSBjb2RlW2NvZGUubGVuZ3RoLTFdLmxlbmd0aCAtICh0by5jaCAtICh0by5saW5lID09IGZyb20ubGluZSA/IGZyb20uY2ggOiAwKSk7CiAgICAgICAgcmV0dXJuIHtsaW5lOiBsaW5lLCBjaDogY2h9OwogICAgICB9CiAgICAgIHZhciBlbmQ7CiAgICAgIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGZ1bmN0aW9uKGVuZDEpIHsKICAgICAgICBlbmQgPSBlbmQxOwogICAgICAgIHJldHVybiB7ZnJvbTogYWRqdXN0UG9zKHNlbC5mcm9tKSwgdG86IGFkanVzdFBvcyhzZWwudG8pfTsKICAgICAgfSk7CiAgICAgIHJldHVybiBlbmQ7CiAgICB9CiAgICBmdW5jdGlvbiByZXBsYWNlU2VsZWN0aW9uKGNvZGUsIGNvbGxhcHNlKSB7CiAgICAgIHJlcGxhY2VSYW5nZTEoc3BsaXRMaW5lcyhjb2RlKSwgc2VsLmZyb20sIHNlbC50bywgZnVuY3Rpb24oZW5kKSB7CiAgICAgICAgaWYgKGNvbGxhcHNlID09ICJlbmQiKSByZXR1cm4ge2Zyb206IGVuZCwgdG86IGVuZH07CiAgICAgICAgZWxzZSBpZiAoY29sbGFwc2UgPT0gInN0YXJ0IikgcmV0dXJuIHtmcm9tOiBzZWwuZnJvbSwgdG86IHNlbC5mcm9tfTsKICAgICAgICBlbHNlIHJldHVybiB7ZnJvbTogc2VsLmZyb20sIHRvOiBlbmR9OwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcGxhY2VSYW5nZTEoY29kZSwgZnJvbSwgdG8sIGNvbXB1dGVTZWwpIHsKICAgICAgdmFyIGVuZGNoID0gY29kZS5sZW5ndGggPT0gMSA/IGNvZGVbMF0ubGVuZ3RoICsgZnJvbS5jaCA6IGNvZGVbY29kZS5sZW5ndGgtMV0ubGVuZ3RoOwogICAgICB2YXIgbmV3U2VsID0gY29tcHV0ZVNlbCh7bGluZTogZnJvbS5saW5lICsgY29kZS5sZW5ndGggLSAxLCBjaDogZW5kY2h9KTsKICAgICAgdXBkYXRlTGluZXMoZnJvbSwgdG8sIGNvZGUsIG5ld1NlbC5mcm9tLCBuZXdTZWwudG8pOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldFJhbmdlKGZyb20sIHRvKSB7CiAgICAgIHZhciBsMSA9IGZyb20ubGluZSwgbDIgPSB0by5saW5lOwogICAgICBpZiAobDEgPT0gbDIpIHJldHVybiBsaW5lc1tsMV0udGV4dC5zbGljZShmcm9tLmNoLCB0by5jaCk7CiAgICAgIHZhciBjb2RlID0gW2xpbmVzW2wxXS50ZXh0LnNsaWNlKGZyb20uY2gpXTsKICAgICAgZm9yICh2YXIgaSA9IGwxICsgMTsgaSA8IGwyOyArK2kpIGNvZGUucHVzaChsaW5lc1tpXS50ZXh0KTsKICAgICAgY29kZS5wdXNoKGxpbmVzW2wyXS50ZXh0LnNsaWNlKDAsIHRvLmNoKSk7CiAgICAgIHJldHVybiBjb2RlLmpvaW4oIlxuIik7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTZWxlY3Rpb24oKSB7CiAgICAgIHJldHVybiBnZXRSYW5nZShzZWwuZnJvbSwgc2VsLnRvKTsKICAgIH0KCiAgICB2YXIgcG9sbGluZ0Zhc3QgPSBmYWxzZTsgLy8gRW5zdXJlcyBzbG93UG9sbCBkb2Vzbid0IGNhbmNlbCBmYXN0UG9sbAogICAgZnVuY3Rpb24gc2xvd1BvbGwoKSB7CiAgICAgIGlmIChwb2xsaW5nRmFzdCkgcmV0dXJuOwogICAgICBwb2xsLnNldCgyMDAwLCBmdW5jdGlvbigpIHsKICAgICAgICBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHJlYWRJbnB1dCgpOwogICAgICAgIGlmIChmb2N1c2VkKSBzbG93UG9sbCgpOwogICAgICAgIGVuZE9wZXJhdGlvbigpOwogICAgICB9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGZhc3RQb2xsKGtleUlkKSB7CiAgICAgIHZhciBtaXNzZWQgPSBmYWxzZTsKICAgICAgcG9sbGluZ0Zhc3QgPSB0cnVlOwogICAgICBmdW5jdGlvbiBwKCkgewogICAgICAgIHN0YXJ0T3BlcmF0aW9uKCk7CiAgICAgICAgdmFyIGNoYW5nZWQgPSByZWFkSW5wdXQoKTsKICAgICAgICBpZiAoY2hhbmdlZCA9PSAibW92ZWQiICYmIGtleUlkKSBtb3ZlbWVudEtleXNba2V5SWRdID0gdHJ1ZTsKICAgICAgICBpZiAoIWNoYW5nZWQgJiYgIW1pc3NlZCkge21pc3NlZCA9IHRydWU7IHBvbGwuc2V0KDgwLCBwKTt9CiAgICAgICAgZWxzZSB7cG9sbGluZ0Zhc3QgPSBmYWxzZTsgc2xvd1BvbGwoKTt9CiAgICAgICAgZW5kT3BlcmF0aW9uKCk7CiAgICAgIH0KICAgICAgcG9sbC5zZXQoMjAsIHApOwogICAgfQoKICAgIC8vIEluc3BlY3RzIHRoZSB0ZXh0YXJlYSwgY29tcGFyZXMgaXRzIHN0YXRlIChjb250ZW50LCBzZWxlY3Rpb24pCiAgICAvLyB0byB0aGUgZGF0YSBpbiB0aGUgZWRpdGluZyB2YXJpYWJsZSwgYW5kIHVwZGF0ZXMgdGhlIGVkaXRvcgogICAgLy8gY29udGVudCBvciBjdXJzb3IgaWYgc29tZXRoaW5nIGNoYW5nZWQuCiAgICBmdW5jdGlvbiByZWFkSW5wdXQoKSB7CiAgICAgIGlmIChsZWF2ZUlucHV0QWxvbmUpIHJldHVybjsKICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgdGV4dCA9IGlucHV0LnZhbHVlLCBzciA9IHNlbFJhbmdlKGlucHV0KTsKICAgICAgaWYgKCFzcikgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgY2hhbmdlZCA9IGVkaXRpbmcudGV4dCAhPSB0ZXh0LCBycyA9IHJlZHVjZWRTZWxlY3Rpb247CiAgICAgIHZhciBtb3ZlZCA9IGNoYW5nZWQgfHwgc3Iuc3RhcnQgIT0gZWRpdGluZy5zdGFydCB8fCBzci5lbmQgIT0gKHJzID8gZWRpdGluZy5zdGFydCA6IGVkaXRpbmcuZW5kKTsKICAgICAgaWYgKCFtb3ZlZCAmJiAhcnMpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGNoYW5nZWQpIHsKICAgICAgICBzaGlmdFNlbGVjdGluZyA9IHJlZHVjZWRTZWxlY3Rpb24gPSBudWxsOwogICAgICAgIGlmIChvcHRpb25zLnJlYWRPbmx5KSB7dXBkYXRlSW5wdXQgPSB0cnVlOyByZXR1cm4gImNoYW5nZWQiO30KICAgICAgfQoKICAgICAgLy8gQ29tcHV0ZSBzZWxlY3Rpb24gc3RhcnQgYW5kIGVuZCBiYXNlZCBvbiBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0ZXh0YXJlYQogICAgICBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0KG4sIHN0YXJ0TGluZSkgewogICAgICAgIHZhciBwb3MgPSAwOwogICAgICAgIGZvciAoOzspIHsKICAgICAgICAgIHZhciBmb3VuZCA9IHRleHQuaW5kZXhPZigiXG4iLCBwb3MpOwogICAgICAgICAgaWYgKGZvdW5kID09IC0xIHx8ICh0ZXh0LmNoYXJBdChmb3VuZC0xKSA9PSAiXHIiID8gZm91bmQgLSAxIDogZm91bmQpID49IG4pCiAgICAgICAgICAgIHJldHVybiB7bGluZTogc3RhcnRMaW5lLCBjaDogbiAtIHBvc307CiAgICAgICAgICArK3N0YXJ0TGluZTsKICAgICAgICAgIHBvcyA9IGZvdW5kICsgMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIGZyb20gPSBjb21wdXRlT2Zmc2V0KHNyLnN0YXJ0LCBlZGl0aW5nLmZyb20pLAogICAgICAgICAgdG8gPSBjb21wdXRlT2Zmc2V0KHNyLmVuZCwgZWRpdGluZy5mcm9tKTsKICAgICAgLy8gSGVyZSB3ZSBoYXZlIHRvIHRha2UgdGhlIHJlZHVjZWRTZWxlY3Rpb24gaGFjayBpbnRvIGFjY291bnQsCiAgICAgIC8vIHNvIHRoYXQgeW91IGNhbiwgZm9yIGV4YW1wbGUsIHByZXNzIHNoaWZ0LXVwIGF0IHRoZSBzdGFydCBvZgogICAgICAvLyB5b3VyIHNlbGVjdGlvbiBhbmQgaGF2ZSB0aGUgcmlnaHQgdGhpbmcgaGFwcGVuLgogICAgICBpZiAocnMpIHsKICAgICAgICBmcm9tID0gc3Iuc3RhcnQgPT0gcnMuYW5jaG9yID8gdG8gOiBmcm9tOwogICAgICAgIHRvID0gc2hpZnRTZWxlY3RpbmcgPyBzZWwudG8gOiBzci5zdGFydCA9PSBycy5hbmNob3IgPyBmcm9tIDogdG87CiAgICAgICAgaWYgKCFwb3NMZXNzKGZyb20sIHRvKSkgewogICAgICAgICAgcmVkdWNlZFNlbGVjdGlvbiA9IG51bGw7CiAgICAgICAgICBzZWwuaW52ZXJ0ZWQgPSBmYWxzZTsKICAgICAgICAgIHZhciB0bXAgPSBmcm9tOyBmcm9tID0gdG87IHRvID0gdG1wOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gSW4gc29tZSBjYXNlcyAoY3Vyc29yIG9uIHNhbWUgbGluZSBhcyBiZWZvcmUpLCB3ZSBkb24ndCBoYXZlCiAgICAgIC8vIHRvIHVwZGF0ZSB0aGUgdGV4dGFyZWEgY29udGVudCBhdCBhbGwuCiAgICAgIGlmIChmcm9tLmxpbmUgPT0gdG8ubGluZSAmJiBmcm9tLmxpbmUgPT0gc2VsLmZyb20ubGluZSAmJiBmcm9tLmxpbmUgPT0gc2VsLnRvLmxpbmUgJiYgIXNoaWZ0U2VsZWN0aW5nKQogICAgICAgIHVwZGF0ZUlucHV0ID0gZmFsc2U7CgogICAgICAvLyBNYWdpYyBtZXNzIHRvIGV4dHJhY3QgcHJlY2lzZSBlZGl0ZWQgcmFuZ2UgZnJvbSB0aGUgY2hhbmdlZAogICAgICAvLyBzdHJpbmcuCiAgICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gMCwgZW5kID0gdGV4dC5sZW5ndGgsIGxlbiA9IE1hdGgubWluKGVuZCwgZWRpdGluZy50ZXh0Lmxlbmd0aCk7CiAgICAgICAgdmFyIGMsIGxpbmUgPSBlZGl0aW5nLmZyb20sIG5sID0gLTE7CiAgICAgICAgd2hpbGUgKHN0YXJ0IDwgbGVuICYmIChjID0gdGV4dC5jaGFyQXQoc3RhcnQpKSA9PSBlZGl0aW5nLnRleHQuY2hhckF0KHN0YXJ0KSkgewogICAgICAgICAgKytzdGFydDsKICAgICAgICAgIGlmIChjID09ICJcbiIpIHtsaW5lKys7IG5sID0gc3RhcnQ7fQogICAgICAgIH0KICAgICAgICB2YXIgY2ggPSBubCA+IC0xID8gc3RhcnQgLSBubCA6IHN0YXJ0LCBlbmRsaW5lID0gZWRpdGluZy50byAtIDEsIGVkZW5kID0gZWRpdGluZy50ZXh0Lmxlbmd0aDsKICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICBjID0gZWRpdGluZy50ZXh0LmNoYXJBdChlZGVuZCk7CiAgICAgICAgICBpZiAoYyA9PSAiXG4iKSBlbmRsaW5lLS07CiAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoZW5kKSAhPSBjKSB7KytlbmQ7ICsrZWRlbmQ7IGJyZWFrO30KICAgICAgICAgIGlmIChlZGVuZCA8PSBzdGFydCB8fCBlbmQgPD0gc3RhcnQpIGJyZWFrOwogICAgICAgICAgLS1lbmQ7IC0tZWRlbmQ7CiAgICAgICAgfQogICAgICAgIHZhciBubCA9IGVkaXRpbmcudGV4dC5sYXN0SW5kZXhPZigiXG4iLCBlZGVuZCAtIDEpLCBlbmRjaCA9IG5sID09IC0xID8gZWRlbmQgOiBlZGVuZCAtIG5sIC0gMTsKICAgICAgICB1cGRhdGVMaW5lcyh7bGluZTogbGluZSwgY2g6IGNofSwge2xpbmU6IGVuZGxpbmUsIGNoOiBlbmRjaH0sIHNwbGl0TGluZXModGV4dC5zbGljZShzdGFydCwgZW5kKSksIGZyb20sIHRvKTsKICAgICAgICBpZiAobGluZSAhPSBlbmRsaW5lIHx8IGZyb20ubGluZSAhPSBsaW5lKSB1cGRhdGVJbnB1dCA9IHRydWU7CiAgICAgIH0KICAgICAgZWxzZSBzZXRTZWxlY3Rpb24oZnJvbSwgdG8pOwoKICAgICAgZWRpdGluZy50ZXh0ID0gdGV4dDsgZWRpdGluZy5zdGFydCA9IHNyLnN0YXJ0OyBlZGl0aW5nLmVuZCA9IHNyLmVuZDsKICAgICAgcmV0dXJuIGNoYW5nZWQgPyAiY2hhbmdlZCIgOiBtb3ZlZCA/ICJtb3ZlZCIgOiBmYWxzZTsKICAgIH0KCiAgICAvLyBTZXQgdGhlIHRleHRhcmVhIGNvbnRlbnQgYW5kIHNlbGVjdGlvbiByYW5nZSB0byBtYXRjaCB0aGUKICAgIC8vIGVkaXRvciBzdGF0ZS4KICAgIGZ1bmN0aW9uIHByZXBhcmVJbnB1dCgpIHsKICAgICAgdmFyIHRleHQgPSBbXTsKICAgICAgdmFyIGZyb20gPSBNYXRoLm1heCgwLCBzZWwuZnJvbS5saW5lIC0gMSksIHRvID0gTWF0aC5taW4obGluZXMubGVuZ3RoLCBzZWwudG8ubGluZSArIDIpOwogICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHRleHQucHVzaChsaW5lc1tpXS50ZXh0KTsKICAgICAgdGV4dCA9IGlucHV0LnZhbHVlID0gdGV4dC5qb2luKGxpbmVTZXApOwogICAgICB2YXIgc3RhcnRjaCA9IHNlbC5mcm9tLmNoLCBlbmRjaCA9IHNlbC50by5jaDsKICAgICAgZm9yICh2YXIgaSA9IGZyb207IGkgPCBzZWwuZnJvbS5saW5lOyArK2kpCiAgICAgICAgc3RhcnRjaCArPSBsaW5lU2VwLmxlbmd0aCArIGxpbmVzW2ldLnRleHQubGVuZ3RoOwogICAgICBmb3IgKHZhciBpID0gZnJvbTsgaSA8IHNlbC50by5saW5lOyArK2kpCiAgICAgICAgZW5kY2ggKz0gbGluZVNlcC5sZW5ndGggKyBsaW5lc1tpXS50ZXh0Lmxlbmd0aDsKICAgICAgZWRpdGluZyA9IHt0ZXh0OiB0ZXh0LCBmcm9tOiBmcm9tLCB0bzogdG8sIHN0YXJ0OiBzdGFydGNoLCBlbmQ6IGVuZGNofTsKICAgICAgc2V0U2VsUmFuZ2UoaW5wdXQsIHN0YXJ0Y2gsIHJlZHVjZWRTZWxlY3Rpb24gPyBzdGFydGNoIDogZW5kY2gpOwogICAgfQogICAgZnVuY3Rpb24gZm9jdXNJbnB1dCgpIHsKICAgICAgaWYgKG9wdGlvbnMucmVhZE9ubHkgIT0gIm5vY3Vyc29yIikgaW5wdXQuZm9jdXMoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBzY3JvbGxDdXJzb3JJbnRvVmlldygpIHsKICAgICAgdmFyIGN1cnNvciA9IGxvY2FsQ29vcmRzKHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvKTsKICAgICAgcmV0dXJuIHNjcm9sbEludG9WaWV3KGN1cnNvci54LCBjdXJzb3IueSwgY3Vyc29yLngsIGN1cnNvci55Qm90KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3KHgxLCB5MSwgeDIsIHkyKSB7CiAgICAgIHZhciBwbCA9IHBhZGRpbmdMZWZ0KCksIHB0ID0gcGFkZGluZ1RvcCgpLCBsaCA9IGxpbmVIZWlnaHQoKTsKICAgICAgeTEgKz0gcHQ7IHkyICs9IHB0OyB4MSArPSBwbDsgeDIgKz0gcGw7CiAgICAgIHZhciBzY3JlZW4gPSB3cmFwcGVyLmNsaWVudEhlaWdodCwgc2NyZWVudG9wID0gd3JhcHBlci5zY3JvbGxUb3AsIHNjcm9sbGVkID0gZmFsc2UsIHJlc3VsdCA9IHRydWU7CiAgICAgIGlmICh5MSA8IHNjcmVlbnRvcCkge3dyYXBwZXIuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgeTEgLSAyKmxoKTsgc2Nyb2xsZWQgPSB0cnVlO30KICAgICAgZWxzZSBpZiAoeTIgPiBzY3JlZW50b3AgKyBzY3JlZW4pIHt3cmFwcGVyLnNjcm9sbFRvcCA9IHkyICsgbGggLSBzY3JlZW47IHNjcm9sbGVkID0gdHJ1ZTt9CgogICAgICB2YXIgc2NyZWVudyA9IHdyYXBwZXIuY2xpZW50V2lkdGgsIHNjcmVlbmxlZnQgPSB3cmFwcGVyLnNjcm9sbExlZnQ7CiAgICAgIGlmICh4MSA8IHNjcmVlbmxlZnQpIHt3cmFwcGVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCB4MSAtIDEwKTsgc2Nyb2xsZWQgPSB0cnVlO30KICAgICAgZWxzZSBpZiAoeDIgPiBzY3JlZW53ICsgc2NyZWVubGVmdCkgewogICAgICAgIHdyYXBwZXIuc2Nyb2xsTGVmdCA9IHgyICsgMTAgLSBzY3JlZW53OwogICAgICAgIHNjcm9sbGVkID0gdHJ1ZTsKICAgICAgICBpZiAoeDIgPiBjb2RlLmNsaWVudFdpZHRoKSByZXN1bHQgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoc2Nyb2xsZWQgJiYgb3B0aW9ucy5vblNjcm9sbCkgb3B0aW9ucy5vblNjcm9sbChpbnN0YW5jZSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgZnVuY3Rpb24gdmlzaWJsZUxpbmVzKCkgewogICAgICB2YXIgbGggPSBsaW5lSGVpZ2h0KCksIHRvcCA9IHdyYXBwZXIuc2Nyb2xsVG9wIC0gcGFkZGluZ1RvcCgpOwogICAgICByZXR1cm4ge2Zyb206IE1hdGgubWluKGxpbmVzLmxlbmd0aCwgTWF0aC5tYXgoMCwgTWF0aC5mbG9vcih0b3AgLyBsaCkpKSwKICAgICAgICAgICAgICB0bzogTWF0aC5taW4obGluZXMubGVuZ3RoLCBNYXRoLmNlaWwoKHRvcCArIHdyYXBwZXIuY2xpZW50SGVpZ2h0KSAvIGxoKSl9OwogICAgfQogICAgLy8gVXNlcyBhIHNldCBvZiBjaGFuZ2VzIHBsdXMgdGhlIGN1cnJlbnQgc2Nyb2xsIHBvc2l0aW9uIHRvCiAgICAvLyBkZXRlcm1pbmUgd2hpY2ggRE9NIHVwZGF0ZXMgaGF2ZSB0byBiZSBtYWRlLCBhbmQgbWFrZXMgdGhlCiAgICAvLyB1cGRhdGVzLgogICAgZnVuY3Rpb24gdXBkYXRlRGlzcGxheShjaGFuZ2VzKSB7CiAgICAgIGlmICghd3JhcHBlci5jbGllbnRXaWR0aCkgewogICAgICAgIHNob3dpbmdGcm9tID0gc2hvd2luZ1RvID0gMDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgLy8gRmlyc3QgY3JlYXRlIGEgcmFuZ2Ugb2YgdGhlb3JldGljYWxseSBpbnRhY3QgbGluZXMsIGFuZCBwdW5jaAogICAgICAvLyBob2xlcyBpbiB0aGF0IHVzaW5nIHRoZSBjaGFuZ2UgaW5mby4KICAgICAgdmFyIGludGFjdCA9IGNoYW5nZXMgPT09IHRydWUgPyBbXSA6IFt7ZnJvbTogc2hvd2luZ0Zyb20sIHRvOiBzaG93aW5nVG8sIGRvbVN0YXJ0OiAwfV07CiAgICAgIGZvciAodmFyIGkgPSAwLCBsID0gY2hhbmdlcy5sZW5ndGggfHwgMDsgaSA8IGw7ICsraSkgewogICAgICAgIHZhciBjaGFuZ2UgPSBjaGFuZ2VzW2ldLCBpbnRhY3QyID0gW10sIGRpZmYgPSBjaGFuZ2UuZGlmZiB8fCAwOwogICAgICAgIGZvciAodmFyIGogPSAwLCBsMiA9IGludGFjdC5sZW5ndGg7IGogPCBsMjsgKytqKSB7CiAgICAgICAgICB2YXIgcmFuZ2UgPSBpbnRhY3Rbal07CiAgICAgICAgICBpZiAoY2hhbmdlLnRvIDw9IHJhbmdlLmZyb20pCiAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogcmFuZ2UuZnJvbSArIGRpZmYsIHRvOiByYW5nZS50byArIGRpZmYsIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydH0pOwogICAgICAgICAgZWxzZSBpZiAocmFuZ2UudG8gPD0gY2hhbmdlLmZyb20pCiAgICAgICAgICAgIGludGFjdDIucHVzaChyYW5nZSk7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGNoYW5nZS5mcm9tID4gcmFuZ2UuZnJvbSkKICAgICAgICAgICAgICBpbnRhY3QyLnB1c2goe2Zyb206IHJhbmdlLmZyb20sIHRvOiBjaGFuZ2UuZnJvbSwgZG9tU3RhcnQ6IHJhbmdlLmRvbVN0YXJ0fSkKICAgICAgICAgICAgaWYgKGNoYW5nZS50byA8IHJhbmdlLnRvKQogICAgICAgICAgICAgIGludGFjdDIucHVzaCh7ZnJvbTogY2hhbmdlLnRvICsgZGlmZiwgdG86IHJhbmdlLnRvICsgZGlmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbVN0YXJ0OiByYW5nZS5kb21TdGFydCArIChjaGFuZ2UudG8gLSByYW5nZS5mcm9tKX0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpbnRhY3QgPSBpbnRhY3QyOwogICAgICB9CgogICAgICAvLyBUaGVuLCBkZXRlcm1pbmUgd2hpY2ggbGluZXMgd2UnZCB3YW50IHRvIHNlZSwgYW5kIHdoaWNoCiAgICAgIC8vIHVwZGF0ZXMgaGF2ZSB0byBiZSBtYWRlIHRvIGdldCB0aGVyZS4KICAgICAgdmFyIHZpc2libGUgPSB2aXNpYmxlTGluZXMoKTsKICAgICAgdmFyIGZyb20gPSBNYXRoLm1pbihzaG93aW5nRnJvbSwgTWF0aC5tYXgodmlzaWJsZS5mcm9tIC0gMywgMCkpLAogICAgICAgICAgdG8gPSBNYXRoLm1pbihsaW5lcy5sZW5ndGgsIE1hdGgubWF4KHNob3dpbmdUbywgdmlzaWJsZS50byArIDMpKSwKICAgICAgICAgIHVwZGF0ZXMgPSBbXSwgZG9tUG9zID0gMCwgZG9tRW5kID0gc2hvd2luZ1RvIC0gc2hvd2luZ0Zyb20sIHBvcyA9IGZyb20sIGNoYW5nZWRMaW5lcyA9IDA7CgogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGludGFjdC5sZW5ndGg7IGkgPCBsOyArK2kpIHsKICAgICAgICB2YXIgcmFuZ2UgPSBpbnRhY3RbaV07CiAgICAgICAgaWYgKHJhbmdlLnRvIDw9IGZyb20pIGNvbnRpbnVlOwogICAgICAgIGlmIChyYW5nZS5mcm9tID49IHRvKSBicmVhazsKICAgICAgICBpZiAocmFuZ2UuZG9tU3RhcnQgPiBkb21Qb3MgfHwgcmFuZ2UuZnJvbSA+IHBvcykgewogICAgICAgICAgdXBkYXRlcy5wdXNoKHtmcm9tOiBwb3MsIHRvOiByYW5nZS5mcm9tLCBkb21TaXplOiByYW5nZS5kb21TdGFydCAtIGRvbVBvcywgZG9tU3RhcnQ6IGRvbVBvc30pOwogICAgICAgICAgY2hhbmdlZExpbmVzICs9IHJhbmdlLmZyb20gLSBwb3M7CiAgICAgICAgfQogICAgICAgIHBvcyA9IHJhbmdlLnRvOwogICAgICAgIGRvbVBvcyA9IHJhbmdlLmRvbVN0YXJ0ICsgKHJhbmdlLnRvIC0gcmFuZ2UuZnJvbSk7CiAgICAgIH0KICAgICAgaWYgKGRvbVBvcyAhPSBkb21FbmQgfHwgcG9zICE9IHRvKSB7CiAgICAgICAgY2hhbmdlZExpbmVzICs9IE1hdGguYWJzKHRvIC0gcG9zKTsKICAgICAgICB1cGRhdGVzLnB1c2goe2Zyb206IHBvcywgdG86IHRvLCBkb21TaXplOiBkb21FbmQgLSBkb21Qb3MsIGRvbVN0YXJ0OiBkb21Qb3N9KTsKICAgICAgfQoKICAgICAgaWYgKCF1cGRhdGVzLmxlbmd0aCkgcmV0dXJuOwogICAgICBsaW5lRGl2LnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICAgIC8vIElmIG1vcmUgdGhhbiAzMCUgb2YgdGhlIHNjcmVlbiBuZWVkcyB1cGRhdGUsIGp1c3QgZG8gYSBmdWxsCiAgICAgIC8vIHJlZHJhdyAod2hpY2ggaXMgcXVpY2tlciB0aGFuIHBhdGNoaW5nKQogICAgICBpZiAoY2hhbmdlZExpbmVzID4gKHZpc2libGUudG8gLSB2aXNpYmxlLmZyb20pICogLjMpCiAgICAgICAgcmVmcmVzaERpc3BsYXkoZnJvbSA9IE1hdGgubWF4KHZpc2libGUuZnJvbSAtIDEwLCAwKSwgdG8gPSBNYXRoLm1pbih2aXNpYmxlLnRvICsgNywgbGluZXMubGVuZ3RoKSk7CiAgICAgIC8vIE90aGVyd2lzZSwgb25seSB1cGRhdGUgdGhlIHN0dWZmIHRoYXQgbmVlZHMgdXBkYXRpbmcuCiAgICAgIGVsc2UKICAgICAgICBwYXRjaERpc3BsYXkodXBkYXRlcyk7CiAgICAgIGxpbmVEaXYuc3R5bGUuZGlzcGxheSA9ICIiOwoKICAgICAgLy8gUG9zaXRpb24gdGhlIG1vdmVyIGRpdiB0byBhbGlnbiB3aXRoIHRoZSBsaW5lcyBpdCdzIHN1cHBvc2VkCiAgICAgIC8vIHRvIGJlIHNob3dpbmcgKHdoaWNoIHdpbGwgY292ZXIgdGhlIHZpc2libGUgZGlzcGxheSkKICAgICAgdmFyIGRpZmZlcmVudCA9IGZyb20gIT0gc2hvd2luZ0Zyb20gfHwgdG8gIT0gc2hvd2luZ1RvIHx8IGxhc3RIZWlnaHQgIT0gd3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgIHNob3dpbmdGcm9tID0gZnJvbTsgc2hvd2luZ1RvID0gdG87CiAgICAgIG1vdmVyLnN0eWxlLnRvcCA9IChmcm9tICogbGluZUhlaWdodCgpKSArICJweCI7CiAgICAgIGlmIChkaWZmZXJlbnQpIHsKICAgICAgICBsYXN0SGVpZ2h0ID0gd3JhcHBlci5jbGllbnRIZWlnaHQ7CiAgICAgICAgY29kZS5zdHlsZS5oZWlnaHQgPSAobGluZXMubGVuZ3RoICogbGluZUhlaWdodCgpICsgMiAqIHBhZGRpbmdUb3AoKSkgKyAicHgiOwogICAgICAgIHVwZGF0ZUd1dHRlcigpOwogICAgICB9CgogICAgICB2YXIgdGV4dFdpZHRoID0gc3RyaW5nV2lkdGgobWF4TGluZSk7CiAgICAgIGxpbmVTcGFjZS5zdHlsZS53aWR0aCA9IHRleHRXaWR0aCA+IHdyYXBwZXIuY2xpZW50V2lkdGggPyB0ZXh0V2lkdGggKyAicHgiIDogIiI7CgogICAgICAvLyBTaW5jZSB0aGlzIGlzIGFsbCByYXRoZXIgZXJyb3IgcHJvbmUsIGl0IGlzIGhvbm91cmVkIHdpdGggdGhlCiAgICAgIC8vIG9ubHkgYXNzZXJ0aW9uIGluIHRoZSB3aG9sZSBmaWxlLgogICAgICBpZiAobGluZURpdi5jaGlsZE5vZGVzLmxlbmd0aCAhPSBzaG93aW5nVG8gLSBzaG93aW5nRnJvbSkKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJBRCBQQVRDSCEgIiArIEpTT04uc3RyaW5naWZ5KHVwZGF0ZXMpICsgIiBzaXplPSIgKyAoc2hvd2luZ1RvIC0gc2hvd2luZ0Zyb20pICsKICAgICAgICAgICAgICAgICAgICAgICAgIiBub2Rlcz0iICsgbGluZURpdi5jaGlsZE5vZGVzLmxlbmd0aCk7CiAgICAgIHVwZGF0ZUN1cnNvcigpOwogICAgfQoKICAgIGZ1bmN0aW9uIHJlZnJlc2hEaXNwbGF5KGZyb20sIHRvKSB7CiAgICAgIHZhciBodG1sID0gW10sIHN0YXJ0ID0ge2xpbmU6IGZyb20sIGNoOiAwfSwgaW5TZWwgPSBwb3NMZXNzKHNlbC5mcm9tLCBzdGFydCkgJiYgIXBvc0xlc3Moc2VsLnRvLCBzdGFydCk7CiAgICAgIGZvciAodmFyIGkgPSBmcm9tOyBpIDwgdG87ICsraSkgewogICAgICAgIHZhciBjaDEgPSBudWxsLCBjaDIgPSBudWxsOwogICAgICAgIGlmIChpblNlbCkgewogICAgICAgICAgY2gxID0gMDsKICAgICAgICAgIGlmIChzZWwudG8ubGluZSA9PSBpKSB7aW5TZWwgPSBmYWxzZTsgY2gyID0gc2VsLnRvLmNoO30KICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoc2VsLmZyb20ubGluZSA9PSBpKSB7CiAgICAgICAgICBpZiAoc2VsLnRvLmxpbmUgPT0gaSkge2NoMSA9IHNlbC5mcm9tLmNoOyBjaDIgPSBzZWwudG8uY2g7fQogICAgICAgICAgZWxzZSB7aW5TZWwgPSB0cnVlOyBjaDEgPSBzZWwuZnJvbS5jaDt9CiAgICAgICAgfQogICAgICAgIGh0bWwucHVzaChsaW5lc1tpXS5nZXRIVE1MKGNoMSwgY2gyLCB0cnVlKSk7CiAgICAgIH0KICAgICAgbGluZURpdi5pbm5lckhUTUwgPSBodG1sLmpvaW4oIiIpOwogICAgfQogICAgZnVuY3Rpb24gcGF0Y2hEaXNwbGF5KHVwZGF0ZXMpIHsKICAgICAgLy8gU2xpZ2h0bHkgZGlmZmVyZW50IGFsZ29yaXRobSBmb3IgSUUgKGJhZElubmVySFRNTCksIHNpbmNlCiAgICAgIC8vIHRoZXJlIC5pbm5lckhUTUwgb24gUFJFIG5vZGVzIGlzIGR1bWIsIGFuZCBkaXNjYXJkcwogICAgICAvLyB3aGl0ZXNwYWNlLgogICAgICB2YXIgc2Zyb20gPSBzZWwuZnJvbS5saW5lLCBzdG8gPSBzZWwudG8ubGluZSwgb2ZmID0gMCwKICAgICAgICAgIHNjcmF0Y2ggPSBiYWRJbm5lckhUTUwgJiYgdGFyZ2V0RG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgIGZvciAodmFyIGkgPSAwLCBlID0gdXBkYXRlcy5sZW5ndGg7IGkgPCBlOyArK2kpIHsKICAgICAgICB2YXIgcmVjID0gdXBkYXRlc1tpXTsKICAgICAgICB2YXIgZXh0cmEgPSAocmVjLnRvIC0gcmVjLmZyb20pIC0gcmVjLmRvbVNpemU7CiAgICAgICAgdmFyIG5vZGVBZnRlciA9IGxpbmVEaXYuY2hpbGROb2Rlc1tyZWMuZG9tU3RhcnQgKyByZWMuZG9tU2l6ZSArIG9mZl0gfHwgbnVsbDsKICAgICAgICBpZiAoYmFkSW5uZXJIVE1MKQogICAgICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KC1leHRyYSwgcmVjLmRvbVNpemUpOyBqID4gMDsgLS1qKQogICAgICAgICAgICBsaW5lRGl2LnJlbW92ZUNoaWxkKG5vZGVBZnRlciA/IG5vZGVBZnRlci5wcmV2aW91c1NpYmxpbmcgOiBsaW5lRGl2Lmxhc3RDaGlsZCk7CiAgICAgICAgZWxzZSBpZiAoZXh0cmEpIHsKICAgICAgICAgIGZvciAodmFyIGogPSBNYXRoLm1heCgwLCBleHRyYSk7IGogPiAwOyAtLWopCiAgICAgICAgICAgIGxpbmVEaXYuaW5zZXJ0QmVmb3JlKHRhcmdldERvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpLCBub2RlQWZ0ZXIpOwogICAgICAgICAgZm9yICh2YXIgaiA9IE1hdGgubWF4KDAsIC1leHRyYSk7IGogPiAwOyAtLWopCiAgICAgICAgICAgIGxpbmVEaXYucmVtb3ZlQ2hpbGQobm9kZUFmdGVyID8gbm9kZUFmdGVyLnByZXZpb3VzU2libGluZyA6IGxpbmVEaXYubGFzdENoaWxkKTsKICAgICAgICB9CiAgICAgICAgdmFyIG5vZGUgPSBsaW5lRGl2LmNoaWxkTm9kZXNbcmVjLmRvbVN0YXJ0ICsgb2ZmXSwgaW5TZWwgPSBzZnJvbSA8IHJlYy5mcm9tICYmIHN0byA+PSByZWMuZnJvbTsKICAgICAgICBmb3IgKHZhciBqID0gcmVjLmZyb207IGogPCByZWMudG87ICsraikgewogICAgICAgICAgdmFyIGNoMSA9IG51bGwsIGNoMiA9IG51bGw7CiAgICAgICAgICBpZiAoaW5TZWwpIHsKICAgICAgICAgICAgY2gxID0gMDsKICAgICAgICAgICAgaWYgKHN0byA9PSBqKSB7aW5TZWwgPSBmYWxzZTsgY2gyID0gc2VsLnRvLmNoO30KICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKHNmcm9tID09IGopIHsKICAgICAgICAgICAgaWYgKHN0byA9PSBqKSB7Y2gxID0gc2VsLmZyb20uY2g7IGNoMiA9IHNlbC50by5jaDt9CiAgICAgICAgICAgIGVsc2Uge2luU2VsID0gdHJ1ZTsgY2gxID0gc2VsLmZyb20uY2g7fQogICAgICAgICAgfQogICAgICAgICAgaWYgKGJhZElubmVySFRNTCkgewogICAgICAgICAgICBzY3JhdGNoLmlubmVySFRNTCA9IGxpbmVzW2pdLmdldEhUTUwoY2gxLCBjaDIsIHRydWUpOwogICAgICAgICAgICBsaW5lRGl2Lmluc2VydEJlZm9yZShzY3JhdGNoLmZpcnN0Q2hpbGQsIG5vZGVBZnRlcik7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgbm9kZS5pbm5lckhUTUwgPSBsaW5lc1tqXS5nZXRIVE1MKGNoMSwgY2gyLCBmYWxzZSk7CiAgICAgICAgICAgIG5vZGUuY2xhc3NOYW1lID0gbGluZXNbal0uY2xhc3NOYW1lIHx8ICIiOwogICAgICAgICAgICBub2RlID0gbm9kZS5uZXh0U2libGluZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgb2ZmICs9IGV4dHJhOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gdXBkYXRlR3V0dGVyKCkgewogICAgICBpZiAoIW9wdGlvbnMuZ3V0dGVyICYmICFvcHRpb25zLmxpbmVOdW1iZXJzKSByZXR1cm47CiAgICAgIHZhciBoVGV4dCA9IG1vdmVyLm9mZnNldEhlaWdodCwgaEVkaXRvciA9IHdyYXBwZXIuY2xpZW50SGVpZ2h0OwogICAgICBndXR0ZXIuc3R5bGUuaGVpZ2h0ID0gKGhUZXh0IC0gaEVkaXRvciA8IDIgPyBoRWRpdG9yIDogaFRleHQpICsgInB4IjsKICAgICAgdmFyIGh0bWwgPSBbXTsKICAgICAgZm9yICh2YXIgaSA9IHNob3dpbmdGcm9tOyBpIDwgc2hvd2luZ1RvOyArK2kpIHsKICAgICAgICB2YXIgbWFya2VyID0gbGluZXNbaV0uZ3V0dGVyTWFya2VyOwogICAgICAgIHZhciB0ZXh0ID0gb3B0aW9ucy5saW5lTnVtYmVycyA/IGkgKyBvcHRpb25zLmZpcnN0TGluZU51bWJlciA6IG51bGw7CiAgICAgICAgaWYgKG1hcmtlciAmJiBtYXJrZXIudGV4dCkKICAgICAgICAgIHRleHQgPSBtYXJrZXIudGV4dC5yZXBsYWNlKCIlTiUiLCB0ZXh0ICE9IG51bGwgPyB0ZXh0IDogIiIpOwogICAgICAgIGVsc2UgaWYgKHRleHQgPT0gbnVsbCkKICAgICAgICAgIHRleHQgPSAiXHUwMGEwIjsKICAgICAgICBodG1sLnB1c2goKG1hcmtlciAmJiBtYXJrZXIuc3R5bGUgPyAnPHByZSBjbGFzcz0iJyArIG1hcmtlci5zdHlsZSArICciPicgOiAiPHByZT4iKSwgdGV4dCwgIjwvcHJlPiIpOwogICAgICB9CiAgICAgIGd1dHRlci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgICBndXR0ZXJUZXh0LmlubmVySFRNTCA9IGh0bWwuam9pbigiIik7CiAgICAgIHZhciBtaW53aWR0aCA9IFN0cmluZyhsaW5lcy5sZW5ndGgpLmxlbmd0aCwgZmlyc3ROb2RlID0gZ3V0dGVyVGV4dC5maXJzdENoaWxkLCB2YWwgPSBlbHRUZXh0KGZpcnN0Tm9kZSksIHBhZCA9ICIiOwogICAgICB3aGlsZSAodmFsLmxlbmd0aCArIHBhZC5sZW5ndGggPCBtaW53aWR0aCkgcGFkICs9ICJcdTAwYTAiOwogICAgICBpZiAocGFkKSBmaXJzdE5vZGUuaW5zZXJ0QmVmb3JlKHRhcmdldERvY3VtZW50LmNyZWF0ZVRleHROb2RlKHBhZCksIGZpcnN0Tm9kZS5maXJzdENoaWxkKTsKICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgbGluZVNwYWNlLnN0eWxlLm1hcmdpbkxlZnQgPSBndXR0ZXIub2Zmc2V0V2lkdGggKyAicHgiOwogICAgfQogICAgZnVuY3Rpb24gdXBkYXRlQ3Vyc29yKCkgewogICAgICB2YXIgaGVhZCA9IHNlbC5pbnZlcnRlZCA/IHNlbC5mcm9tIDogc2VsLnRvOwogICAgICB2YXIgeCA9IGNoYXJYKGhlYWQubGluZSwgaGVhZC5jaCkgKyAicHgiLCB5ID0gKGhlYWQubGluZSAtIHNob3dpbmdGcm9tKSAqIGxpbmVIZWlnaHQoKSArICJweCI7CiAgICAgIGlucHV0RGl2LnN0eWxlLnRvcCA9IHk7CiAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgewogICAgICAgIGN1cnNvci5zdHlsZS50b3AgPSB5OyBjdXJzb3Iuc3R5bGUubGVmdCA9IHg7CiAgICAgICAgY3Vyc29yLnN0eWxlLmRpc3BsYXkgPSAiIjsKICAgICAgfQogICAgICBlbHNlIGN1cnNvci5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldFNlbGVjdGlvblVzZXIoZnJvbSwgdG8pIHsKICAgICAgdmFyIHNoID0gc2hpZnRTZWxlY3RpbmcgJiYgY2xpcFBvcyhzaGlmdFNlbGVjdGluZyk7CiAgICAgIGlmIChzaCkgewogICAgICAgIGlmIChwb3NMZXNzKHNoLCBmcm9tKSkgZnJvbSA9IHNoOwogICAgICAgIGVsc2UgaWYgKHBvc0xlc3ModG8sIHNoKSkgdG8gPSBzaDsKICAgICAgfQogICAgICBzZXRTZWxlY3Rpb24oZnJvbSwgdG8pOwogICAgfQogICAgLy8gVXBkYXRlIHRoZSBzZWxlY3Rpb24uIExhc3QgdHdvIGFyZ3MgYXJlIG9ubHkgdXNlZCBieQogICAgLy8gdXBkYXRlTGluZXMsIHNpbmNlIHRoZXkgaGF2ZSB0byBiZSBleHByZXNzZWQgaW4gdGhlIGxpbmUKICAgIC8vIG51bWJlcnMgYmVmb3JlIHRoZSB1cGRhdGUuCiAgICBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oZnJvbSwgdG8sIG9sZEZyb20sIG9sZFRvKSB7CiAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgZnJvbSkgJiYgcG9zRXEoc2VsLnRvLCB0bykpIHJldHVybjsKICAgICAgaWYgKHBvc0xlc3ModG8sIGZyb20pKSB7dmFyIHRtcCA9IHRvOyB0byA9IGZyb207IGZyb20gPSB0bXA7fQoKICAgICAgdmFyIHN0YXJ0RXEgPSBwb3NFcShzZWwudG8sIHRvKSwgZW5kRXEgPSBwb3NFcShzZWwuZnJvbSwgZnJvbSk7CiAgICAgIGlmIChwb3NFcShmcm9tLCB0bykpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOwogICAgICBlbHNlIGlmIChzdGFydEVxICYmICFlbmRFcSkgc2VsLmludmVydGVkID0gdHJ1ZTsKICAgICAgZWxzZSBpZiAoZW5kRXEgJiYgIXN0YXJ0RXEpIHNlbC5pbnZlcnRlZCA9IGZhbHNlOwoKICAgICAgLy8gU29tZSB1Z2x5IGxvZ2ljIHVzZWQgdG8gb25seSBtYXJrIHRoZSBsaW5lcyB0aGF0IGFjdHVhbGx5IGRpZAogICAgICAvLyBzZWUgYSBjaGFuZ2UgaW4gc2VsZWN0aW9uIGFzIGNoYW5nZWQsIHJhdGhlciB0aGFuIHRoZSB3aG9sZQogICAgICAvLyBzZWxlY3RlZCByYW5nZS4KICAgICAgaWYgKG9sZEZyb20gPT0gbnVsbCkge29sZEZyb20gPSBzZWwuZnJvbS5saW5lOyBvbGRUbyA9IHNlbC50by5saW5lO30KICAgICAgaWYgKHBvc0VxKGZyb20sIHRvKSkgewogICAgICAgIGlmICghcG9zRXEoc2VsLmZyb20sIHNlbC50bykpCiAgICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IG9sZEZyb20sIHRvOiBvbGRUbyArIDF9KTsKICAgICAgfQogICAgICBlbHNlIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSkgewogICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogdG8ubGluZSArIDF9KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoIXBvc0VxKGZyb20sIHNlbC5mcm9tKSkgewogICAgICAgICAgaWYgKGZyb20ubGluZSA8IG9sZEZyb20pCiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogZnJvbS5saW5lLCB0bzogTWF0aC5taW4odG8ubGluZSwgb2xkRnJvbSkgKyAxfSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGNoYW5nZXMucHVzaCh7ZnJvbTogb2xkRnJvbSwgdG86IE1hdGgubWluKG9sZFRvLCBmcm9tLmxpbmUpICsgMX0pOwogICAgICAgIH0KICAgICAgICBpZiAoIXBvc0VxKHRvLCBzZWwudG8pKSB7CiAgICAgICAgICBpZiAodG8ubGluZSA8IG9sZFRvKQogICAgICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IE1hdGgubWF4KG9sZEZyb20sIGZyb20ubGluZSksIHRvOiBvbGRUbyArIDF9KTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBNYXRoLm1heChmcm9tLmxpbmUsIG9sZFRvKSwgdG86IHRvLmxpbmUgKyAxfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNlbC5mcm9tID0gZnJvbTsgc2VsLnRvID0gdG87CiAgICAgIHNlbGVjdGlvbkNoYW5nZWQgPSB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gc2V0Q3Vyc29yKGxpbmUsIGNoLCB1c2VyKSB7CiAgICAgIHZhciBwb3MgPSBjbGlwUG9zKHtsaW5lOiBsaW5lLCBjaDogY2ggfHwgMH0pOwogICAgICAodXNlciA/IHNldFNlbGVjdGlvblVzZXIgOiBzZXRTZWxlY3Rpb24pKHBvcywgcG9zKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjbGlwTGluZShuKSB7cmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKG4sIGxpbmVzLmxlbmd0aC0xKSk7fQogICAgZnVuY3Rpb24gY2xpcFBvcyhwb3MpIHsKICAgICAgaWYgKHBvcy5saW5lIDwgMCkgcmV0dXJuIHtsaW5lOiAwLCBjaDogMH07CiAgICAgIGlmIChwb3MubGluZSA+PSBsaW5lcy5sZW5ndGgpIHJldHVybiB7bGluZTogbGluZXMubGVuZ3RoLTEsIGNoOiBsaW5lc1tsaW5lcy5sZW5ndGgtMV0udGV4dC5sZW5ndGh9OwogICAgICB2YXIgY2ggPSBwb3MuY2gsIGxpbmVsZW4gPSBsaW5lc1twb3MubGluZV0udGV4dC5sZW5ndGg7CiAgICAgIGlmIChjaCA9PSBudWxsIHx8IGNoID4gbGluZWxlbikgcmV0dXJuIHtsaW5lOiBwb3MubGluZSwgY2g6IGxpbmVsZW59OwogICAgICBlbHNlIGlmIChjaCA8IDApIHJldHVybiB7bGluZTogcG9zLmxpbmUsIGNoOiAwfTsKICAgICAgZWxzZSByZXR1cm4gcG9zOwogICAgfQoKICAgIGZ1bmN0aW9uIHNjcm9sbFBhZ2UoZG93bikgewogICAgICB2YXIgbGluZXNQZXJQYWdlID0gTWF0aC5mbG9vcih3cmFwcGVyLmNsaWVudEhlaWdodCAvIGxpbmVIZWlnaHQoKSksIGhlYWQgPSBzZWwuaW52ZXJ0ZWQgPyBzZWwuZnJvbSA6IHNlbC50bzsKICAgICAgc2V0Q3Vyc29yKGhlYWQubGluZSArIChNYXRoLm1heChsaW5lc1BlclBhZ2UgLSAxLCAxKSAqIChkb3duID8gMSA6IC0xKSksIGhlYWQuY2gsIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gc2Nyb2xsRW5kKHRvcCkgewogICAgICBzZXRDdXJzb3IodG9wID8gMCA6IGxpbmVzLmxlbmd0aCAtIDEsIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gc2VsZWN0QWxsKCkgewogICAgICB2YXIgZW5kTGluZSA9IGxpbmVzLmxlbmd0aCAtIDE7CiAgICAgIHNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDB9LCB7bGluZTogZW5kTGluZSwgY2g6IGxpbmVzW2VuZExpbmVdLnRleHQubGVuZ3RofSk7CiAgICB9CiAgICBmdW5jdGlvbiBzZWxlY3RXb3JkQXQocG9zKSB7CiAgICAgIHZhciBsaW5lID0gbGluZXNbcG9zLmxpbmVdLnRleHQ7CiAgICAgIHZhciBzdGFydCA9IHBvcy5jaCwgZW5kID0gcG9zLmNoOwogICAgICB3aGlsZSAoc3RhcnQgPiAwICYmIC9cdy8udGVzdChsaW5lLmNoYXJBdChzdGFydCAtIDEpKSkgLS1zdGFydDsKICAgICAgd2hpbGUgKGVuZCA8IGxpbmUubGVuZ3RoICYmIC9cdy8udGVzdChsaW5lLmNoYXJBdChlbmQpKSkgKytlbmQ7CiAgICAgIHNldFNlbGVjdGlvblVzZXIoe2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnR9LCB7bGluZTogcG9zLmxpbmUsIGNoOiBlbmR9KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlbGVjdExpbmUobGluZSkgewogICAgICBzZXRTZWxlY3Rpb25Vc2VyKHtsaW5lOiBsaW5lLCBjaDogMH0sIHtsaW5lOiBsaW5lLCBjaDogbGluZXNbbGluZV0udGV4dC5sZW5ndGh9KTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhbmRsZUVudGVyKCkgewogICAgICByZXBsYWNlU2VsZWN0aW9uKCJcbiIsICJlbmQiKTsKICAgICAgaWYgKG9wdGlvbnMuZW50ZXJNb2RlICE9ICJmbGF0IikKICAgICAgICBpbmRlbnRMaW5lKHNlbC5mcm9tLmxpbmUsIG9wdGlvbnMuZW50ZXJNb2RlID09ICJrZWVwIiA/ICJwcmV2IiA6ICJzbWFydCIpOwogICAgfQogICAgZnVuY3Rpb24gaGFuZGxlVGFiKHNoaWZ0KSB7CiAgICAgIHNoaWZ0U2VsZWN0aW5nID0gbnVsbDsKICAgICAgc3dpdGNoIChvcHRpb25zLnRhYk1vZGUpIHsKICAgICAgY2FzZSAiZGVmYXVsdCI6CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBjYXNlICJpbmRlbnQiOgogICAgICAgIGZvciAodmFyIGkgPSBzZWwuZnJvbS5saW5lLCBlID0gc2VsLnRvLmxpbmU7IGkgPD0gZTsgKytpKSBpbmRlbnRMaW5lKGksICJzbWFydCIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjbGFzc2ljIjoKICAgICAgICBpZiAocG9zRXEoc2VsLmZyb20sIHNlbC50bykpIHsKICAgICAgICAgIGlmIChzaGlmdCkgaW5kZW50TGluZShzZWwuZnJvbS5saW5lLCAic21hcnQiKTsKICAgICAgICAgIGVsc2UgcmVwbGFjZVNlbGVjdGlvbigiXHQiLCAiZW5kIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgInNoaWZ0IjoKICAgICAgICBmb3IgKHZhciBpID0gc2VsLmZyb20ubGluZSwgZSA9IHNlbC50by5saW5lOyBpIDw9IGU7ICsraSkgaW5kZW50TGluZShpLCBzaGlmdCA/ICJzdWJ0cmFjdCIgOiAiYWRkIik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgZnVuY3Rpb24gaW5kZW50TGluZShuLCBob3cpIHsKICAgICAgaWYgKGhvdyA9PSAic21hcnQiKSB7CiAgICAgICAgaWYgKCFtb2RlLmluZGVudCkgaG93ID0gInByZXYiOwogICAgICAgIGVsc2UgdmFyIHN0YXRlID0gZ2V0U3RhdGVCZWZvcmUobik7CiAgICAgIH0KCiAgICAgIHZhciBsaW5lID0gbGluZXNbbl0sIGN1clNwYWNlID0gbGluZS5pbmRlbnRhdGlvbigpLCBjdXJTcGFjZVN0cmluZyA9IGxpbmUudGV4dC5tYXRjaCgvXlxzKi8pWzBdLCBpbmRlbnRhdGlvbjsKICAgICAgaWYgKGhvdyA9PSAicHJldiIpIHsKICAgICAgICBpZiAobikgaW5kZW50YXRpb24gPSBsaW5lc1tuLTFdLmluZGVudGF0aW9uKCk7CiAgICAgICAgZWxzZSBpbmRlbnRhdGlvbiA9IDA7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoaG93ID09ICJzbWFydCIpIGluZGVudGF0aW9uID0gbW9kZS5pbmRlbnQoc3RhdGUsIGxpbmUudGV4dC5zbGljZShjdXJTcGFjZVN0cmluZy5sZW5ndGgpKTsKICAgICAgZWxzZSBpZiAoaG93ID09ICJhZGQiKSBpbmRlbnRhdGlvbiA9IGN1clNwYWNlICsgb3B0aW9ucy5pbmRlbnRVbml0OwogICAgICBlbHNlIGlmIChob3cgPT0gInN1YnRyYWN0IikgaW5kZW50YXRpb24gPSBjdXJTcGFjZSAtIG9wdGlvbnMuaW5kZW50VW5pdDsKICAgICAgaW5kZW50YXRpb24gPSBNYXRoLm1heCgwLCBpbmRlbnRhdGlvbik7CiAgICAgIHZhciBkaWZmID0gaW5kZW50YXRpb24gLSBjdXJTcGFjZTsKCiAgICAgIGlmICghZGlmZikgewogICAgICAgIGlmIChzZWwuZnJvbS5saW5lICE9IG4gJiYgc2VsLnRvLmxpbmUgIT0gbikgcmV0dXJuOwogICAgICAgIHZhciBpbmRlbnRTdHJpbmcgPSBjdXJTcGFjZVN0cmluZzsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICB2YXIgaW5kZW50U3RyaW5nID0gIiIsIHBvcyA9IDA7CiAgICAgICAgaWYgKG9wdGlvbnMuaW5kZW50V2l0aFRhYnMpCiAgICAgICAgICBmb3IgKHZhciBpID0gTWF0aC5mbG9vcihpbmRlbnRhdGlvbiAvIHRhYlNpemUpOyBpOyAtLWkpIHtwb3MgKz0gdGFiU2l6ZTsgaW5kZW50U3RyaW5nICs9ICJcdCI7fQogICAgICAgIHdoaWxlIChwb3MgPCBpbmRlbnRhdGlvbikgeysrcG9zOyBpbmRlbnRTdHJpbmcgKz0gIiAiO30KICAgICAgfQoKICAgICAgcmVwbGFjZVJhbmdlKGluZGVudFN0cmluZywge2xpbmU6IG4sIGNoOiAwfSwge2xpbmU6IG4sIGNoOiBjdXJTcGFjZVN0cmluZy5sZW5ndGh9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBsb2FkTW9kZSgpIHsKICAgICAgbW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShvcHRpb25zLCBvcHRpb25zLm1vZGUpOwogICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7ICsraSkKICAgICAgICBsaW5lc1tpXS5zdGF0ZUFmdGVyID0gbnVsbDsKICAgICAgd29yayA9IFswXTsKICAgICAgc3RhcnRXb3JrZXIoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGd1dHRlckNoYW5nZWQoKSB7CiAgICAgIHZhciB2aXNpYmxlID0gb3B0aW9ucy5ndXR0ZXIgfHwgb3B0aW9ucy5saW5lTnVtYmVyczsKICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSB2aXNpYmxlID8gIiIgOiAibm9uZSI7CiAgICAgIGlmICh2aXNpYmxlKSB1cGRhdGVHdXR0ZXIoKTsKICAgICAgZWxzZSBsaW5lRGl2LnBhcmVudE5vZGUuc3R5bGUubWFyZ2luTGVmdCA9IDA7CiAgICB9CgogICAgZnVuY3Rpb24gbWFya1RleHQoZnJvbSwgdG8sIGNsYXNzTmFtZSkgewogICAgICBmcm9tID0gY2xpcFBvcyhmcm9tKTsgdG8gPSBjbGlwUG9zKHRvKTsKICAgICAgdmFyIGFjY3VtID0gW107CiAgICAgIGZ1bmN0aW9uIGFkZChsaW5lLCBmcm9tLCB0bywgY2xhc3NOYW1lKSB7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tsaW5lXSwgbWFyayA9IGxpbmUuYWRkTWFyayhmcm9tLCB0bywgY2xhc3NOYW1lKTsKICAgICAgICBtYXJrLmxpbmUgPSBsaW5lOwogICAgICAgIGFjY3VtLnB1c2gobWFyayk7CiAgICAgIH0KICAgICAgaWYgKGZyb20ubGluZSA9PSB0by5saW5lKSBhZGQoZnJvbS5saW5lLCBmcm9tLmNoLCB0by5jaCwgY2xhc3NOYW1lKTsKICAgICAgZWxzZSB7CiAgICAgICAgYWRkKGZyb20ubGluZSwgZnJvbS5jaCwgbnVsbCwgY2xhc3NOYW1lKTsKICAgICAgICBmb3IgKHZhciBpID0gZnJvbS5saW5lICsgMSwgZSA9IHRvLmxpbmU7IGkgPCBlOyArK2kpCiAgICAgICAgICBhZGQoaSwgMCwgbnVsbCwgY2xhc3NOYW1lKTsKICAgICAgICBhZGQodG8ubGluZSwgMCwgdG8uY2gsIGNsYXNzTmFtZSk7CiAgICAgIH0KICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBmcm9tLmxpbmUsIHRvOiB0by5saW5lICsgMX0pOwogICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN0YXJ0LCBlbmQ7CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY2N1bS5sZW5ndGg7ICsraSkgewogICAgICAgICAgdmFyIG1hcmsgPSBhY2N1bVtpXSwgZm91bmQgPSBpbmRleE9mKGxpbmVzLCBtYXJrLmxpbmUpOwogICAgICAgICAgbWFyay5saW5lLnJlbW92ZU1hcmsobWFyayk7CiAgICAgICAgICBpZiAoZm91bmQgPiAtMSkgewogICAgICAgICAgICBpZiAoc3RhcnQgPT0gbnVsbCkgc3RhcnQgPSBmb3VuZDsKICAgICAgICAgICAgZW5kID0gZm91bmQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdGFydCAhPSBudWxsKSBjaGFuZ2VzLnB1c2goe2Zyb206IHN0YXJ0LCB0bzogZW5kICsgMX0pOwogICAgICB9OwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZEd1dHRlck1hcmtlcihsaW5lLCB0ZXh0LCBjbGFzc05hbWUpIHsKICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSBsaW5lID0gbGluZXNbY2xpcExpbmUobGluZSldOwogICAgICBsaW5lLmd1dHRlck1hcmtlciA9IHt0ZXh0OiB0ZXh0LCBzdHlsZTogY2xhc3NOYW1lfTsKICAgICAgdXBkYXRlR3V0dGVyKCk7CiAgICAgIHJldHVybiBsaW5lOwogICAgfQogICAgZnVuY3Rpb24gcmVtb3ZlR3V0dGVyTWFya2VyKGxpbmUpIHsKICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSBsaW5lID0gbGluZXNbY2xpcExpbmUobGluZSldOwogICAgICBsaW5lLmd1dHRlck1hcmtlciA9IG51bGw7CiAgICAgIHVwZGF0ZUd1dHRlcigpOwogICAgfQogICAgZnVuY3Rpb24gc2V0TGluZUNsYXNzKGxpbmUsIGNsYXNzTmFtZSkgewogICAgICBpZiAodHlwZW9mIGxpbmUgPT0gIm51bWJlciIpIHsKICAgICAgICB2YXIgbm8gPSBsaW5lOwogICAgICAgIGxpbmUgPSBsaW5lc1tjbGlwTGluZShsaW5lKV07CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgdmFyIG5vID0gaW5kZXhPZihsaW5lcywgbGluZSk7CiAgICAgICAgaWYgKG5vID09IC0xKSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAobGluZS5jbGFzc05hbWUgIT0gY2xhc3NOYW1lKSB7CiAgICAgICAgbGluZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7CiAgICAgICAgY2hhbmdlcy5wdXNoKHtmcm9tOiBubywgdG86IG5vICsgMX0pOwogICAgICB9CiAgICAgIHJldHVybiBsaW5lOwogICAgfQoKICAgIGZ1bmN0aW9uIGxpbmVJbmZvKGxpbmUpIHsKICAgICAgaWYgKHR5cGVvZiBsaW5lID09ICJudW1iZXIiKSB7CiAgICAgICAgdmFyIG4gPSBsaW5lOwogICAgICAgIGxpbmUgPSBsaW5lc1tsaW5lXTsKICAgICAgICBpZiAoIWxpbmUpIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHZhciBuID0gaW5kZXhPZihsaW5lcywgbGluZSk7CiAgICAgICAgaWYgKG4gPT0gLTEpIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIHZhciBtYXJrZXIgPSBsaW5lLmd1dHRlck1hcmtlcjsKICAgICAgcmV0dXJuIHtsaW5lOiBuLCB0ZXh0OiBsaW5lLnRleHQsIG1hcmtlclRleHQ6IG1hcmtlciAmJiBtYXJrZXIudGV4dCwgbWFya2VyQ2xhc3M6IG1hcmtlciAmJiBtYXJrZXIuc3R5bGV9OwogICAgfQoKICAgIGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cikgewogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPjxzcGFuPng8L3NwYW4+PC9wcmU+IjsKICAgICAgbWVhc3VyZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBzdHI7CiAgICAgIHJldHVybiBtZWFzdXJlLmZpcnN0Q2hpbGQuZmlyc3RDaGlsZC5vZmZzZXRXaWR0aCB8fCAxMDsKICAgIH0KICAgIC8vIFRoZXNlIGFyZSB1c2VkIHRvIGdvIGZyb20gcGl4ZWwgcG9zaXRpb25zIHRvIGNoYXJhY3RlcgogICAgLy8gcG9zaXRpb25zLCB0YWtpbmcgdmFyeWluZyBjaGFyYWN0ZXIgd2lkdGhzIGludG8gYWNjb3VudC4KICAgIGZ1bmN0aW9uIGNoYXJYKGxpbmUsIHBvcykgewogICAgICBpZiAocG9zID09IDApIHJldHVybiAwOwogICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPjxzcGFuPiIgKyBsaW5lc1tsaW5lXS5nZXRIVE1MKG51bGwsIG51bGwsIGZhbHNlLCBwb3MpICsgIjwvc3Bhbj48L3ByZT4iOwogICAgICByZXR1cm4gbWVhc3VyZS5maXJzdENoaWxkLmZpcnN0Q2hpbGQub2Zmc2V0V2lkdGg7CiAgICB9CiAgICBmdW5jdGlvbiBjaGFyRnJvbVgobGluZSwgeCkgewogICAgICBpZiAoeCA8PSAwKSByZXR1cm4gMDsKICAgICAgdmFyIGxpbmVPYmogPSBsaW5lc1tsaW5lXSwgdGV4dCA9IGxpbmVPYmoudGV4dDsKICAgICAgZnVuY3Rpb24gZ2V0WChsZW4pIHsKICAgICAgICBtZWFzdXJlLmlubmVySFRNTCA9ICI8cHJlPjxzcGFuPiIgKyBsaW5lT2JqLmdldEhUTUwobnVsbCwgbnVsbCwgZmFsc2UsIGxlbikgKyAiPC9zcGFuPjwvcHJlPiI7CiAgICAgICAgcmV0dXJuIG1lYXN1cmUuZmlyc3RDaGlsZC5maXJzdENoaWxkLm9mZnNldFdpZHRoOwogICAgICB9CiAgICAgIHZhciBmcm9tID0gMCwgZnJvbVggPSAwLCB0byA9IHRleHQubGVuZ3RoLCB0b1g7CiAgICAgIC8vIEd1ZXNzIGEgc3VpdGFibGUgdXBwZXIgYm91bmQgZm9yIG91ciBzZWFyY2guCiAgICAgIHZhciBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWlsKHggLyBzdHJpbmdXaWR0aCgieCIpKSk7CiAgICAgIGZvciAoOzspIHsKICAgICAgICB2YXIgZXN0WCA9IGdldFgoZXN0aW1hdGVkKTsKICAgICAgICBpZiAoZXN0WCA8PSB4ICYmIGVzdGltYXRlZCA8IHRvKSBlc3RpbWF0ZWQgPSBNYXRoLm1pbih0bywgTWF0aC5jZWlsKGVzdGltYXRlZCAqIDEuMikpOwogICAgICAgIGVsc2Uge3RvWCA9IGVzdFg7IHRvID0gZXN0aW1hdGVkOyBicmVhazt9CiAgICAgIH0KICAgICAgaWYgKHggPiB0b1gpIHJldHVybiB0bzsKICAgICAgLy8gVHJ5IHRvIGd1ZXNzIGEgc3VpdGFibGUgbG93ZXIgYm91bmQgYXMgd2VsbC4KICAgICAgZXN0aW1hdGVkID0gTWF0aC5mbG9vcih0byAqIDAuOCk7IGVzdFggPSBnZXRYKGVzdGltYXRlZCk7CiAgICAgIGlmIChlc3RYIDwgeCkge2Zyb20gPSBlc3RpbWF0ZWQ7IGZyb21YID0gZXN0WDt9CiAgICAgIC8vIERvIGEgYmluYXJ5IHNlYXJjaCBiZXR3ZWVuIHRoZXNlIGJvdW5kcy4KICAgICAgZm9yICg7OykgewogICAgICAgIGlmICh0byAtIGZyb20gPD0gMSkgcmV0dXJuICh0b1ggLSB4ID4geCAtIGZyb21YKSA/IGZyb20gOiB0bzsKICAgICAgICB2YXIgbWlkZGxlID0gTWF0aC5jZWlsKChmcm9tICsgdG8pIC8gMiksIG1pZGRsZVggPSBnZXRYKG1pZGRsZSk7CiAgICAgICAgaWYgKG1pZGRsZVggPiB4KSB7dG8gPSBtaWRkbGU7IHRvWCA9IG1pZGRsZVg7fQogICAgICAgIGVsc2Uge2Zyb20gPSBtaWRkbGU7IGZyb21YID0gbWlkZGxlWDt9CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBsb2NhbENvb3Jkcyhwb3MsIGluTGluZVdyYXApIHsKICAgICAgdmFyIGxoID0gbGluZUhlaWdodCgpLCBsaW5lID0gcG9zLmxpbmUgLSAoaW5MaW5lV3JhcCA/IHNob3dpbmdGcm9tIDogMCk7CiAgICAgIHJldHVybiB7eDogY2hhclgocG9zLmxpbmUsIHBvcy5jaCksIHk6IGxpbmUgKiBsaCwgeUJvdDogKGxpbmUgKyAxKSAqIGxofTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhZ2VDb29yZHMocG9zKSB7CiAgICAgIHZhciBsb2NhbCA9IGxvY2FsQ29vcmRzKHBvcywgdHJ1ZSksIG9mZiA9IGVsdE9mZnNldChsaW5lU3BhY2UpOwogICAgICByZXR1cm4ge3g6IG9mZi5sZWZ0ICsgbG9jYWwueCwgeTogb2ZmLnRvcCArIGxvY2FsLnksIHlCb3Q6IG9mZi50b3AgKyBsb2NhbC55Qm90fTsKICAgIH0KCiAgICBmdW5jdGlvbiBsaW5lSGVpZ2h0KCkgewogICAgICB2YXIgbmxpbmVzID0gbGluZURpdi5jaGlsZE5vZGVzLmxlbmd0aDsKICAgICAgaWYgKG5saW5lcykgcmV0dXJuIChsaW5lRGl2Lm9mZnNldEhlaWdodCAvIG5saW5lcykgfHwgMTsKICAgICAgbWVhc3VyZS5pbm5lckhUTUwgPSAiPHByZT54PC9wcmU+IjsKICAgICAgcmV0dXJuIG1lYXN1cmUuZmlyc3RDaGlsZC5vZmZzZXRIZWlnaHQgfHwgMTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhZGRpbmdUb3AoKSB7cmV0dXJuIGxpbmVTcGFjZS5vZmZzZXRUb3A7fQogICAgZnVuY3Rpb24gcGFkZGluZ0xlZnQoKSB7cmV0dXJuIGxpbmVTcGFjZS5vZmZzZXRMZWZ0O30KCiAgICBmdW5jdGlvbiBwb3NGcm9tTW91c2UoZSwgbGliZXJhbCkgewogICAgICB2YXIgb2ZmVyA9IGVsdE9mZnNldCh3cmFwcGVyLCB0cnVlKSwgeCA9IGUuZS5jbGllbnRYLCB5ID0gZS5lLmNsaWVudFk7CiAgICAgIC8vIFRoaXMgaXMgYSBtZXNzIG9mIGEgaGV1cmlzdGljIHRvIHRyeSBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgYQogICAgICAvLyBzY3JvbGwtYmFyIHdhcyBjbGlja2VkIG9yIG5vdCwgYW5kIHRvIHJldHVybiBudWxsIGlmIG9uZSB3YXMKICAgICAgLy8gKGFuZCAhbGliZXJhbCkuCiAgICAgIGlmICghbGliZXJhbCAmJiAoeCAtIG9mZlcubGVmdCA+IHdyYXBwZXIuY2xpZW50V2lkdGggfHwgeSAtIG9mZlcudG9wID4gd3JhcHBlci5jbGllbnRIZWlnaHQpKQogICAgICAgIHJldHVybiBudWxsOwogICAgICB2YXIgb2ZmTCA9IGVsdE9mZnNldChsaW5lU3BhY2UsIHRydWUpOwogICAgICB2YXIgbGluZSA9IHNob3dpbmdGcm9tICsgTWF0aC5mbG9vcigoeSAtIG9mZkwudG9wKSAvIGxpbmVIZWlnaHQoKSk7CiAgICAgIHJldHVybiBjbGlwUG9zKHtsaW5lOiBsaW5lLCBjaDogY2hhckZyb21YKGNsaXBMaW5lKGxpbmUpLCB4IC0gb2ZmTC5sZWZ0KX0pOwogICAgfQogICAgZnVuY3Rpb24gb25Db250ZXh0TWVudShlKSB7CiAgICAgIHZhciBwb3MgPSBwb3NGcm9tTW91c2UoZSk7CiAgICAgIGlmICghcG9zIHx8IHdpbmRvdy5vcGVyYSkgcmV0dXJuOyAvLyBPcGVyYSBpcyBkaWZmaWN1bHQuCiAgICAgIGlmIChwb3NFcShzZWwuZnJvbSwgc2VsLnRvKSB8fCBwb3NMZXNzKHBvcywgc2VsLmZyb20pIHx8ICFwb3NMZXNzKHBvcywgc2VsLnRvKSkKICAgICAgICBzZXRDdXJzb3IocG9zLmxpbmUsIHBvcy5jaCk7CgogICAgICB2YXIgb2xkQ1NTID0gaW5wdXQuc3R5bGUuY3NzVGV4dDsKICAgICAgaW5wdXQuc3R5bGUuY3NzVGV4dCA9ICJwb3NpdGlvbjogZml4ZWQ7IHdpZHRoOiAzMHB4OyBoZWlnaHQ6IDMwcHg7IHRvcDogIiArIChlLnBhZ2VZKCkgLSAxKSArCiAgICAgICAgInB4OyBsZWZ0OiAiICsgKGUucGFnZVgoKSAtIDEpICsgInB4OyB6LWluZGV4OiAxMDAwOyBiYWNrZ3JvdW5kOiB3aGl0ZTsgIiArCiAgICAgICAgImJvcmRlci13aWR0aDogMDsgb3V0bGluZTogbm9uZTsgb3ZlcmZsb3c6IGhpZGRlbjsiOwogICAgICB2YXIgdmFsID0gaW5wdXQudmFsdWUgPSBnZXRTZWxlY3Rpb24oKTsKICAgICAgZm9jdXNJbnB1dCgpOwogICAgICBzZXRTZWxSYW5nZShpbnB1dCwgMCwgaW5wdXQudmFsdWUubGVuZ3RoKTsKICAgICAgbGVhdmVJbnB1dEFsb25lID0gdHJ1ZTsKICAgICAgZnVuY3Rpb24gcmVoaWRlKCkgewogICAgICAgIGlmIChpbnB1dC52YWx1ZSAhPSB2YWwpIG9wZXJhdGlvbihyZXBsYWNlU2VsZWN0aW9uKShpbnB1dC52YWx1ZSwgImVuZCIpOwogICAgICAgIGlucHV0LnN0eWxlLmNzc1RleHQgPSBvbGRDU1M7CiAgICAgICAgbGVhdmVJbnB1dEFsb25lID0gZmFsc2U7CiAgICAgICAgcHJlcGFyZUlucHV0KCk7CiAgICAgICAgc2xvd1BvbGwoKTsKICAgICAgfQogICAgICAKICAgICAgaWYgKGdlY2tvKSB7CiAgICAgICAgZS5zdG9wKCkKICAgICAgICB2YXIgbW91c2V1cCA9IGNvbm5lY3Qod2luZG93LCAibW91c2V1cCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgbW91c2V1cCgpOwogICAgICAgICAgc2V0VGltZW91dChyZWhpZGUsIDIwKTsKICAgICAgICB9LCB0cnVlKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzZXRUaW1lb3V0KHJlaGlkZSwgNTApOwogICAgICB9CiAgICB9CgogICAgLy8gQ3Vyc29yLWJsaW5raW5nCiAgICBmdW5jdGlvbiByZXN0YXJ0QmxpbmsoKSB7CiAgICAgIGNsZWFySW50ZXJ2YWwoYmxpbmtlcik7CiAgICAgIHZhciBvbiA9IHRydWU7CiAgICAgIGN1cnNvci5zdHlsZS52aXNpYmlsaXR5ID0gIiI7CiAgICAgIGJsaW5rZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKICAgICAgICBjdXJzb3Iuc3R5bGUudmlzaWJpbGl0eSA9IChvbiA9ICFvbikgPyAiIiA6ICJoaWRkZW4iOwogICAgICB9LCA2NTApOwogICAgfQoKICAgIHZhciBtYXRjaGluZyA9IHsiKCI6ICIpPiIsICIpIjogIig8IiwgIlsiOiAiXT4iLCAiXSI6ICJbPCIsICJ7IjogIn0+IiwgIn0iOiAiezwifTsKICAgIGZ1bmN0aW9uIG1hdGNoQnJhY2tldHMoYXV0b2NsZWFyKSB7CiAgICAgIHZhciBoZWFkID0gc2VsLmludmVydGVkID8gc2VsLmZyb20gOiBzZWwudG8sIGxpbmUgPSBsaW5lc1toZWFkLmxpbmVdLCBwb3MgPSBoZWFkLmNoIC0gMTsKICAgICAgdmFyIG1hdGNoID0gKHBvcyA+PSAwICYmIG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQocG9zKV0pIHx8IG1hdGNoaW5nW2xpbmUudGV4dC5jaGFyQXQoKytwb3MpXTsKICAgICAgaWYgKCFtYXRjaCkgcmV0dXJuOwogICAgICB2YXIgY2ggPSBtYXRjaC5jaGFyQXQoMCksIGZvcndhcmQgPSBtYXRjaC5jaGFyQXQoMSkgPT0gIj4iLCBkID0gZm9yd2FyZCA/IDEgOiAtMSwgc3QgPSBsaW5lLnN0eWxlczsKICAgICAgZm9yICh2YXIgb2ZmID0gcG9zICsgMSwgaSA9IDAsIGUgPSBzdC5sZW5ndGg7IGkgPCBlOyBpKz0yKQogICAgICAgIGlmICgob2ZmIC09IHN0W2ldLmxlbmd0aCkgPD0gMCkge3ZhciBzdHlsZSA9IHN0W2krMV07IGJyZWFrO30KCiAgICAgIHZhciBzdGFjayA9IFtsaW5lLnRleHQuY2hhckF0KHBvcyldLCByZSA9IC9bKCl7fVtcXV0vOwogICAgICBmdW5jdGlvbiBzY2FuKGxpbmUsIGZyb20sIHRvKSB7CiAgICAgICAgaWYgKCFsaW5lLnRleHQpIHJldHVybjsKICAgICAgICB2YXIgc3QgPSBsaW5lLnN0eWxlcywgcG9zID0gZm9yd2FyZCA/IDAgOiBsaW5lLnRleHQubGVuZ3RoIC0gMSwgY3VyOwogICAgICAgIGZvciAodmFyIGkgPSBmb3J3YXJkID8gMCA6IHN0Lmxlbmd0aCAtIDIsIGUgPSBmb3J3YXJkID8gc3QubGVuZ3RoIDogLTI7IGkgIT0gZTsgaSArPSAyKmQpIHsKICAgICAgICAgIHZhciB0ZXh0ID0gc3RbaV07CiAgICAgICAgICBpZiAoc3RbaSsxXSAhPSBudWxsICYmIHN0W2krMV0gIT0gc3R5bGUpIHtwb3MgKz0gZCAqIHRleHQubGVuZ3RoOyBjb250aW51ZTt9CiAgICAgICAgICBmb3IgKHZhciBqID0gZm9yd2FyZCA/IDAgOiB0ZXh0Lmxlbmd0aCAtIDEsIHRlID0gZm9yd2FyZCA/IHRleHQubGVuZ3RoIDogLTE7IGogIT0gdGU7IGogKz0gZCwgcG9zKz1kKSB7CiAgICAgICAgICAgIGlmIChwb3MgPj0gZnJvbSAmJiBwb3MgPCB0byAmJiByZS50ZXN0KGN1ciA9IHRleHQuY2hhckF0KGopKSkgewogICAgICAgICAgICAgIHZhciBtYXRjaCA9IG1hdGNoaW5nW2N1cl07CiAgICAgICAgICAgICAgaWYgKG1hdGNoLmNoYXJBdCgxKSA9PSAiPiIgPT0gZm9yd2FyZCkgc3RhY2sucHVzaChjdXIpOwogICAgICAgICAgICAgIGVsc2UgaWYgKHN0YWNrLnBvcCgpICE9IG1hdGNoLmNoYXJBdCgwKSkgcmV0dXJuIHtwb3M6IHBvcywgbWF0Y2g6IGZhbHNlfTsKICAgICAgICAgICAgICBlbHNlIGlmICghc3RhY2subGVuZ3RoKSByZXR1cm4ge3BvczogcG9zLCBtYXRjaDogdHJ1ZX07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IGhlYWQubGluZSwgZSA9IGZvcndhcmQgPyBNYXRoLm1pbihpICsgNTAsIGxpbmVzLmxlbmd0aCkgOiBNYXRoLm1heCgtMSwgaSAtIDUwKTsgaSAhPSBlOyBpKz1kKSB7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXSwgZmlyc3QgPSBpID09IGhlYWQubGluZTsKICAgICAgICB2YXIgZm91bmQgPSBzY2FuKGxpbmUsIGZpcnN0ICYmIGZvcndhcmQgPyBwb3MgKyAxIDogMCwgZmlyc3QgJiYgIWZvcndhcmQgPyBwb3MgOiBsaW5lLnRleHQubGVuZ3RoKTsKICAgICAgICBpZiAoZm91bmQpIHsKICAgICAgICAgIHZhciBzdHlsZSA9IGZvdW5kLm1hdGNoID8gIkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IiA6ICJDb2RlTWlycm9yLW5vbm1hdGNoaW5nYnJhY2tldCI7CiAgICAgICAgICB2YXIgb25lID0gbWFya1RleHQoe2xpbmU6IGhlYWQubGluZSwgY2g6IHBvc30sIHtsaW5lOiBoZWFkLmxpbmUsIGNoOiBwb3MrMX0sIHN0eWxlKSwKICAgICAgICAgICAgICB0d28gPSBtYXJrVGV4dCh7bGluZTogaSwgY2g6IGZvdW5kLnBvc30sIHtsaW5lOiBpLCBjaDogZm91bmQucG9zICsgMX0sIHN0eWxlKTsKICAgICAgICAgIHZhciBjbGVhciA9IG9wZXJhdGlvbihmdW5jdGlvbigpe29uZSgpOyB0d28oKTt9KTsKICAgICAgICAgIGlmIChhdXRvY2xlYXIpIHNldFRpbWVvdXQoY2xlYXIsIDgwMCk7CiAgICAgICAgICBlbHNlIGJyYWNrZXRIaWdobGlnaHRlZCA9IGNsZWFyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gRmluZHMgdGhlIGxpbmUgdG8gc3RhcnQgd2l0aCB3aGVuIHN0YXJ0aW5nIGEgcGFyc2UuIFRyaWVzIHRvCiAgICAvLyBmaW5kIGEgbGluZSB3aXRoIGEgc3RhdGVBZnRlciwgc28gdGhhdCBpdCBjYW4gc3RhcnQgd2l0aCBhCiAgICAvLyB2YWxpZCBzdGF0ZS4gSWYgdGhhdCBmYWlscywgaXQgcmV0dXJucyB0aGUgbGluZSB3aXRoIHRoZQogICAgLy8gc21hbGxlc3QgaW5kZW50YXRpb24sIHdoaWNoIHRlbmRzIHRvIG5lZWQgdGhlIGxlYXN0IGNvbnRleHQgdG8KICAgIC8vIHBhcnNlIGNvcnJlY3RseS4KICAgIGZ1bmN0aW9uIGZpbmRTdGFydExpbmUobikgewogICAgICB2YXIgbWluaW5kZW50LCBtaW5saW5lOwogICAgICBmb3IgKHZhciBzZWFyY2ggPSBuLCBsaW0gPSBuIC0gNDA7IHNlYXJjaCA+IGxpbTsgLS1zZWFyY2gpIHsKICAgICAgICBpZiAoc2VhcmNoID09IDApIHJldHVybiAwOwogICAgICAgIHZhciBsaW5lID0gbGluZXNbc2VhcmNoLTFdOwogICAgICAgIGlmIChsaW5lLnN0YXRlQWZ0ZXIpIHJldHVybiBzZWFyY2g7CiAgICAgICAgdmFyIGluZGVudGVkID0gbGluZS5pbmRlbnRhdGlvbigpOwogICAgICAgIGlmIChtaW5saW5lID09IG51bGwgfHwgbWluaW5kZW50ID4gaW5kZW50ZWQpIHsKICAgICAgICAgIG1pbmxpbmUgPSBzZWFyY2g7CiAgICAgICAgICBtaW5pbmRlbnQgPSBpbmRlbnRlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG1pbmxpbmU7CiAgICB9CiAgICBmdW5jdGlvbiBnZXRTdGF0ZUJlZm9yZShuKSB7CiAgICAgIHZhciBzdGFydCA9IGZpbmRTdGFydExpbmUobiksIHN0YXRlID0gc3RhcnQgJiYgbGluZXNbc3RhcnQtMV0uc3RhdGVBZnRlcjsKICAgICAgaWYgKCFzdGF0ZSkgc3RhdGUgPSBzdGFydFN0YXRlKG1vZGUpOwogICAgICBlbHNlIHN0YXRlID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgbjsgKytpKSB7CiAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXTsKICAgICAgICBsaW5lLmhpZ2hsaWdodChtb2RlLCBzdGF0ZSk7CiAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgfQogICAgICBpZiAoIWxpbmVzW25dLnN0YXRlQWZ0ZXIpIHdvcmsucHVzaChuKTsKICAgICAgcmV0dXJuIHN0YXRlOwogICAgfQogICAgZnVuY3Rpb24gaGlnaGxpZ2h0V29ya2VyKCkgewogICAgICB2YXIgZW5kID0gK25ldyBEYXRlICsgb3B0aW9ucy53b3JrVGltZTsKICAgICAgdmFyIGRpZFNvbWV0aGluZyA9IGZhbHNlOwogICAgICB3aGlsZSAod29yay5sZW5ndGgpIHsKICAgICAgICBpZiAoIWxpbmVzW3Nob3dpbmdGcm9tXS5zdGF0ZUFmdGVyKSB2YXIgdGFzayA9IHNob3dpbmdGcm9tOwogICAgICAgIGVsc2UgdmFyIHRhc2sgPSB3b3JrLnBvcCgpOwogICAgICAgIGlmICh0YXNrID49IGxpbmVzLmxlbmd0aCkgY29udGludWU7CiAgICAgICAgZGlkU29tZXRoaW5nID0gdHJ1ZTsKICAgICAgICB2YXIgc3RhcnQgPSBmaW5kU3RhcnRMaW5lKHRhc2spLCBzdGF0ZSA9IHN0YXJ0ICYmIGxpbmVzW3N0YXJ0LTFdLnN0YXRlQWZ0ZXI7CiAgICAgICAgaWYgKHN0YXRlKSBzdGF0ZSA9IGNvcHlTdGF0ZShtb2RlLCBzdGF0ZSk7CiAgICAgICAgZWxzZSBzdGF0ZSA9IHN0YXJ0U3RhdGUobW9kZSk7CgogICAgICAgIGZvciAodmFyIGkgPSBzdGFydCwgbCA9IGxpbmVzLmxlbmd0aDsgaSA8IGw7ICsraSkgewogICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1tpXSwgaGFkU3RhdGUgPSBsaW5lLnN0YXRlQWZ0ZXI7CiAgICAgICAgICBpZiAoK25ldyBEYXRlID4gZW5kKSB7CiAgICAgICAgICAgIHdvcmsucHVzaChpKTsKICAgICAgICAgICAgc3RhcnRXb3JrZXIob3B0aW9ucy53b3JrRGVsYXkpOwogICAgICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IHRhc2ssIHRvOiBpfSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBjaGFuZ2VkID0gbGluZS5oaWdobGlnaHQobW9kZSwgc3RhdGUpOwogICAgICAgICAgbGluZS5zdGF0ZUFmdGVyID0gY29weVN0YXRlKG1vZGUsIHN0YXRlKTsKICAgICAgICAgIGlmIChoYWRTdGF0ZSAmJiAhY2hhbmdlZCAmJiBsaW5lLnRleHQpIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjaGFuZ2VzLnB1c2goe2Zyb206IHRhc2ssIHRvOiBpfSk7CiAgICAgIH0KICAgICAgaWYgKGRpZFNvbWV0aGluZyAmJiBvcHRpb25zLm9uSGlnaGxpZ2h0Q29tcGxldGUpCiAgICAgICAgb3B0aW9ucy5vbkhpZ2hsaWdodENvbXBsZXRlKGluc3RhbmNlKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YXJ0V29ya2VyKHRpbWUpIHsKICAgICAgaWYgKCF3b3JrLmxlbmd0aCkgcmV0dXJuOwogICAgICBoaWdobGlnaHQuc2V0KHRpbWUsIG9wZXJhdGlvbihoaWdobGlnaHRXb3JrZXIpKTsKICAgIH0KCiAgICAvLyBPcGVyYXRpb25zIGFyZSB1c2VkIHRvIHdyYXAgY2hhbmdlcyBpbiBzdWNoIGEgd2F5IHRoYXQgZWFjaAogICAgLy8gY2hhbmdlIHdvbid0IGhhdmUgdG8gdXBkYXRlIHRoZSBjdXJzb3IgYW5kIGRpc3BsYXkgKHdoaWNoIHdvdWxkCiAgICAvLyBiZSBhd2t3YXJkLCBzbG93LCBhbmQgZXJyb3ItcHJvbmUpLCBidXQgaW5zdGVhZCB1cGRhdGVzIGFyZQogICAgLy8gYmF0Y2hlZCBhbmQgdGhlbiBhbGwgY29tYmluZWQgYW5kIGV4ZWN1dGVkIGF0IG9uY2UuCiAgICBmdW5jdGlvbiBzdGFydE9wZXJhdGlvbigpIHsKICAgICAgdXBkYXRlSW5wdXQgPSBudWxsOyBjaGFuZ2VzID0gW107IHRleHRDaGFuZ2VkID0gc2VsZWN0aW9uQ2hhbmdlZCA9IGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gZW5kT3BlcmF0aW9uKCkgewogICAgICB2YXIgcmVTY3JvbGwgPSBmYWxzZTsKICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHJlU2Nyb2xsID0gIXNjcm9sbEN1cnNvckludG9WaWV3KCk7CiAgICAgIGlmIChjaGFuZ2VzLmxlbmd0aCkgdXBkYXRlRGlzcGxheShjaGFuZ2VzKTsKICAgICAgZWxzZSBpZiAoc2VsZWN0aW9uQ2hhbmdlZCkgdXBkYXRlQ3Vyc29yKCk7CiAgICAgIGlmIChyZVNjcm9sbCkgc2Nyb2xsQ3Vyc29ySW50b1ZpZXcoKTsKICAgICAgaWYgKHNlbGVjdGlvbkNoYW5nZWQpIHJlc3RhcnRCbGluaygpOwoKICAgICAgLy8gdXBkYXRlSW5wdXQgY2FuIGJlIHNldCB0byBhIGJvb2xlYW4gdmFsdWUgdG8gZm9yY2UvcHJldmVudCBhbgogICAgICAvLyB1cGRhdGUuCiAgICAgIGlmICghbGVhdmVJbnB1dEFsb25lICYmICh1cGRhdGVJbnB1dCA9PT0gdHJ1ZSB8fCAodXBkYXRlSW5wdXQgIT09IGZhbHNlICYmIHNlbGVjdGlvbkNoYW5nZWQpKSkKICAgICAgICBwcmVwYXJlSW5wdXQoKTsKCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMubWF0Y2hCcmFja2V0cykKICAgICAgICBzZXRUaW1lb3V0KG9wZXJhdGlvbihmdW5jdGlvbigpIHsKICAgICAgICAgIGlmIChicmFja2V0SGlnaGxpZ2h0ZWQpIHticmFja2V0SGlnaGxpZ2h0ZWQoKTsgYnJhY2tldEhpZ2hsaWdodGVkID0gbnVsbDt9CiAgICAgICAgICBtYXRjaEJyYWNrZXRzKGZhbHNlKTsKICAgICAgICB9KSwgMjApOwogICAgICB2YXIgdGMgPSB0ZXh0Q2hhbmdlZDsgLy8gdGV4dENoYW5nZWQgY2FuIGJlIHJlc2V0IGJ5IGN1cnNvcmFjdGl2aXR5IGNhbGxiYWNrCiAgICAgIGlmIChzZWxlY3Rpb25DaGFuZ2VkICYmIG9wdGlvbnMub25DdXJzb3JBY3Rpdml0eSkKICAgICAgICBvcHRpb25zLm9uQ3Vyc29yQWN0aXZpdHkoaW5zdGFuY2UpOwogICAgICBpZiAodGMgJiYgb3B0aW9ucy5vbkNoYW5nZSAmJiBpbnN0YW5jZSkKICAgICAgICBvcHRpb25zLm9uQ2hhbmdlKGluc3RhbmNlLCB0Yyk7CiAgICB9CiAgICB2YXIgbmVzdGVkT3BlcmF0aW9uID0gMDsKICAgIGZ1bmN0aW9uIG9wZXJhdGlvbihmKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIW5lc3RlZE9wZXJhdGlvbisrKSBzdGFydE9wZXJhdGlvbigpOwogICAgICAgIHRyeSB7dmFyIHJlc3VsdCA9IGYuYXBwbHkodGhpcywgYXJndW1lbnRzKTt9CiAgICAgICAgZmluYWxseSB7aWYgKCEtLW5lc3RlZE9wZXJhdGlvbikgZW5kT3BlcmF0aW9uKCk7fQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH07CiAgICB9CgogICAgZnVuY3Rpb24gU2VhcmNoQ3Vyc29yKHF1ZXJ5LCBwb3MsIGNhc2VGb2xkKSB7CiAgICAgIHRoaXMuYXRPY2N1cnJlbmNlID0gZmFsc2U7CiAgICAgIGlmIChjYXNlRm9sZCA9PSBudWxsKSBjYXNlRm9sZCA9IHR5cGVvZiBxdWVyeSA9PSAic3RyaW5nIiAmJiBxdWVyeSA9PSBxdWVyeS50b0xvd2VyQ2FzZSgpOwoKICAgICAgaWYgKHBvcyAmJiB0eXBlb2YgcG9zID09ICJvYmplY3QiKSBwb3MgPSBjbGlwUG9zKHBvcyk7CiAgICAgIGVsc2UgcG9zID0ge2xpbmU6IDAsIGNoOiAwfTsKICAgICAgdGhpcy5wb3MgPSB7ZnJvbTogcG9zLCB0bzogcG9zfTsKCiAgICAgIC8vIFRoZSBtYXRjaGVzIG1ldGhvZCBpcyBmaWxsZWQgaW4gYmFzZWQgb24gdGhlIHR5cGUgb2YgcXVlcnkuCiAgICAgIC8vIEl0IHRha2VzIGEgcG9zaXRpb24gYW5kIGEgZGlyZWN0aW9uLCBhbmQgcmV0dXJucyBhbiBvYmplY3QKICAgICAgLy8gZGVzY3JpYmluZyB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoZSBxdWVyeSwgb3IgbnVsbCBpZiBubwogICAgICAvLyBtb3JlIG1hdGNoZXMgd2VyZSBmb3VuZC4KICAgICAgaWYgKHR5cGVvZiBxdWVyeSAhPSAic3RyaW5nIikgLy8gUmVnZXhwIG1hdGNoCiAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24ocmV2ZXJzZSwgcG9zKSB7CiAgICAgICAgICBpZiAocmV2ZXJzZSkgewogICAgICAgICAgICB2YXIgbGluZSA9IGxpbmVzW3Bvcy5saW5lXS50ZXh0LnNsaWNlKDAsIHBvcy5jaCksIG1hdGNoID0gbGluZS5tYXRjaChxdWVyeSksIHN0YXJ0ID0gMDsKICAgICAgICAgICAgd2hpbGUgKG1hdGNoKSB7CiAgICAgICAgICAgICAgdmFyIGluZCA9IGxpbmUuaW5kZXhPZihtYXRjaFswXSk7CiAgICAgICAgICAgICAgc3RhcnQgKz0gaW5kOwogICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnNsaWNlKGluZCArIDEpOwogICAgICAgICAgICAgIHZhciBuZXdtYXRjaCA9IGxpbmUubWF0Y2gocXVlcnkpOwogICAgICAgICAgICAgIGlmIChuZXdtYXRjaCkgbWF0Y2ggPSBuZXdtYXRjaDsKICAgICAgICAgICAgICBlbHNlIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgdmFyIGxpbmUgPSBsaW5lc1twb3MubGluZV0udGV4dC5zbGljZShwb3MuY2gpLCBtYXRjaCA9IGxpbmUubWF0Y2gocXVlcnkpLAogICAgICAgICAgICAgICAgc3RhcnQgPSBtYXRjaCAmJiBwb3MuY2ggKyBsaW5lLmluZGV4T2YobWF0Y2hbMF0pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1hdGNoKQogICAgICAgICAgICByZXR1cm4ge2Zyb206IHtsaW5lOiBwb3MubGluZSwgY2g6IHN0YXJ0fSwKICAgICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogc3RhcnQgKyBtYXRjaFswXS5sZW5ndGh9LAogICAgICAgICAgICAgICAgICAgIG1hdGNoOiBtYXRjaH07CiAgICAgICAgfTsKICAgICAgZWxzZSB7IC8vIFN0cmluZyBxdWVyeQogICAgICAgIGlmIChjYXNlRm9sZCkgcXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHZhciBmb2xkID0gY2FzZUZvbGQgPyBmdW5jdGlvbihzdHIpe3JldHVybiBzdHIudG9Mb3dlckNhc2UoKTt9IDogZnVuY3Rpb24oc3RyKXtyZXR1cm4gc3RyO307CiAgICAgICAgdmFyIHRhcmdldCA9IHF1ZXJ5LnNwbGl0KCJcbiIpOwogICAgICAgIC8vIERpZmZlcmVudCBtZXRob2RzIGZvciBzaW5nbGUtbGluZSBhbmQgbXVsdGktbGluZSBxdWVyaWVzCiAgICAgICAgaWYgKHRhcmdldC5sZW5ndGggPT0gMSkKICAgICAgICAgIHRoaXMubWF0Y2hlcyA9IGZ1bmN0aW9uKHJldmVyc2UsIHBvcykgewogICAgICAgICAgICB2YXIgbGluZSA9IGZvbGQobGluZXNbcG9zLmxpbmVdLnRleHQpLCBsZW4gPSBxdWVyeS5sZW5ndGgsIG1hdGNoOwogICAgICAgICAgICBpZiAocmV2ZXJzZSA/IChwb3MuY2ggPj0gbGVuICYmIChtYXRjaCA9IGxpbmUubGFzdEluZGV4T2YocXVlcnksIHBvcy5jaCAtIGxlbikpICE9IC0xKQogICAgICAgICAgICAgICAgICAgICAgICA6IChtYXRjaCA9IGxpbmUuaW5kZXhPZihxdWVyeSwgcG9zLmNoKSkgIT0gLTEpCiAgICAgICAgICAgICAgcmV0dXJuIHtmcm9tOiB7bGluZTogcG9zLmxpbmUsIGNoOiBtYXRjaH0sCiAgICAgICAgICAgICAgICAgICAgICB0bzoge2xpbmU6IHBvcy5saW5lLCBjaDogbWF0Y2ggKyBsZW59fTsKICAgICAgICAgIH07CiAgICAgICAgZWxzZQogICAgICAgICAgdGhpcy5tYXRjaGVzID0gZnVuY3Rpb24ocmV2ZXJzZSwgcG9zKSB7CiAgICAgICAgICAgIHZhciBsbiA9IHBvcy5saW5lLCBpZHggPSAocmV2ZXJzZSA/IHRhcmdldC5sZW5ndGggLSAxIDogMCksIG1hdGNoID0gdGFyZ2V0W2lkeF0sIGxpbmUgPSBmb2xkKGxpbmVzW2xuXS50ZXh0KTsKICAgICAgICAgICAgdmFyIG9mZnNldEEgPSAocmV2ZXJzZSA/IGxpbmUuaW5kZXhPZihtYXRjaCkgKyBtYXRjaC5sZW5ndGggOiBsaW5lLmxhc3RJbmRleE9mKG1hdGNoKSk7CiAgICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QSA+PSBwb3MuY2ggfHwgb2Zmc2V0QSAhPSBtYXRjaC5sZW5ndGgKICAgICAgICAgICAgICAgICAgICAgICAgOiBvZmZzZXRBIDw9IHBvcy5jaCB8fCBvZmZzZXRBICE9IGxpbmUubGVuZ3RoIC0gbWF0Y2gubGVuZ3RoKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgIGlmIChyZXZlcnNlID8gIWxuIDogbG4gPT0gbGluZXMubGVuZ3RoIC0gMSkgcmV0dXJuOwogICAgICAgICAgICAgIGxpbmUgPSBmb2xkKGxpbmVzW2xuICs9IHJldmVyc2UgPyAtMSA6IDFdLnRleHQpOwogICAgICAgICAgICAgIG1hdGNoID0gdGFyZ2V0W3JldmVyc2UgPyAtLWlkeCA6ICsraWR4XTsKICAgICAgICAgICAgICBpZiAoaWR4ID4gMCAmJiBpZHggPCB0YXJnZXQubGVuZ3RoIC0gMSkgewogICAgICAgICAgICAgICAgaWYgKGxpbmUgIT0gbWF0Y2gpIHJldHVybjsKICAgICAgICAgICAgICAgIGVsc2UgY29udGludWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBvZmZzZXRCID0gKHJldmVyc2UgPyBsaW5lLmxhc3RJbmRleE9mKG1hdGNoKSA6IGxpbmUuaW5kZXhPZihtYXRjaCkgKyBtYXRjaC5sZW5ndGgpOwogICAgICAgICAgICAgIGlmIChyZXZlcnNlID8gb2Zmc2V0QiAhPSBsaW5lLmxlbmd0aCAtIG1hdGNoLmxlbmd0aCA6IG9mZnNldEIgIT0gbWF0Y2gubGVuZ3RoKQogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIHZhciBzdGFydCA9IHtsaW5lOiBwb3MubGluZSwgY2g6IG9mZnNldEF9LCBlbmQgPSB7bGluZTogbG4sIGNoOiBvZmZzZXRCfTsKICAgICAgICAgICAgICByZXR1cm4ge2Zyb206IHJldmVyc2UgPyBlbmQgOiBzdGFydCwgdG86IHJldmVyc2UgPyBzdGFydCA6IGVuZH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgIH0KICAgIH0KCiAgICBTZWFyY2hDdXJzb3IucHJvdG90eXBlID0gewogICAgICBmaW5kTmV4dDogZnVuY3Rpb24oKSB7cmV0dXJuIHRoaXMuZmluZChmYWxzZSk7fSwKICAgICAgZmluZFByZXZpb3VzOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5maW5kKHRydWUpO30sCgogICAgICBmaW5kOiBmdW5jdGlvbihyZXZlcnNlKSB7CiAgICAgICAgdmFyIHNlbGYgPSB0aGlzLCBwb3MgPSBjbGlwUG9zKHJldmVyc2UgPyB0aGlzLnBvcy5mcm9tIDogdGhpcy5wb3MudG8pOwogICAgICAgIGZ1bmN0aW9uIHNhdmVQb3NBbmRGYWlsKGxpbmUpIHsKICAgICAgICAgIHZhciBwb3MgPSB7bGluZTogbGluZSwgY2g6IDB9OwogICAgICAgICAgc2VsZi5wb3MgPSB7ZnJvbTogcG9zLCB0bzogcG9zfTsKICAgICAgICAgIHNlbGYuYXRPY2N1cnJlbmNlID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICBpZiAodGhpcy5wb3MgPSB0aGlzLm1hdGNoZXMocmV2ZXJzZSwgcG9zKSkgewogICAgICAgICAgICB0aGlzLmF0T2NjdXJyZW5jZSA9IHRydWU7CiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvcy5tYXRjaCB8fCB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHJldmVyc2UpIHsKICAgICAgICAgICAgaWYgKCFwb3MubGluZSkgcmV0dXJuIHNhdmVQb3NBbmRGYWlsKDApOwogICAgICAgICAgICBwb3MgPSB7bGluZTogcG9zLmxpbmUtMSwgY2g6IGxpbmVzW3Bvcy5saW5lLTFdLnRleHQubGVuZ3RofTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAocG9zLmxpbmUgPT0gbGluZXMubGVuZ3RoIC0gMSkgcmV0dXJuIHNhdmVQb3NBbmRGYWlsKGxpbmVzLmxlbmd0aCk7CiAgICAgICAgICAgIHBvcyA9IHtsaW5lOiBwb3MubGluZSsxLCBjaDogMH07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAoKICAgICAgZnJvbTogZnVuY3Rpb24oKSB7aWYgKHRoaXMuYXRPY2N1cnJlbmNlKSByZXR1cm4gY29weVBvcyh0aGlzLnBvcy5mcm9tKTt9LAogICAgICB0bzogZnVuY3Rpb24oKSB7aWYgKHRoaXMuYXRPY2N1cnJlbmNlKSByZXR1cm4gY29weVBvcyh0aGlzLnBvcy50byk7fQogICAgfTsKCiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfSAvLyAoZW5kIG9mIGZ1bmN0aW9uIENvZGVNaXJyb3IpCgogIC8vIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4KICBDb2RlTWlycm9yLmRlZmF1bHRzID0gewogICAgdmFsdWU6ICIiLAogICAgbW9kZTogbnVsbCwKICAgIGluZGVudFVuaXQ6IDIsCiAgICBpbmRlbnRXaXRoVGFiczogZmFsc2UsCiAgICB0YWJNb2RlOiAiY2xhc3NpYyIsCiAgICBlbnRlck1vZGU6ICJpbmRlbnQiLAogICAgZWxlY3RyaWNDaGFyczogdHJ1ZSwKICAgIG9uS2V5RXZlbnQ6IG51bGwsCiAgICBsaW5lTnVtYmVyczogZmFsc2UsCiAgICBndXR0ZXI6IGZhbHNlLAogICAgZmlyc3RMaW5lTnVtYmVyOiAxLAogICAgcmVhZE9ubHk6IGZhbHNlLAogICAgb25DaGFuZ2U6IG51bGwsCiAgICBvbkN1cnNvckFjdGl2aXR5OiBudWxsLAogICAgb25HdXR0ZXJDbGljazogbnVsbCwKICAgIG9uSGlnaGxpZ2h0Q29tcGxldGU6IG51bGwsCiAgICBvbkZvY3VzOiBudWxsLCBvbkJsdXI6IG51bGwsIG9uU2Nyb2xsOiBudWxsLAogICAgbWF0Y2hCcmFja2V0czogZmFsc2UsCiAgICB3b3JrVGltZTogMTAwLAogICAgd29ya0RlbGF5OiAyMDAsCiAgICB1bmRvRGVwdGg6IDQwLAogICAgdGFiaW5kZXg6IG51bGwsCiAgICBkb2N1bWVudDogd2luZG93LmRvY3VtZW50CiAgfTsKCiAgLy8gS25vd24gbW9kZXMsIGJ5IG5hbWUgYW5kIGJ5IE1JTUUKICB2YXIgbW9kZXMgPSB7fSwgbWltZU1vZGVzID0ge307CiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlID0gZnVuY3Rpb24obmFtZSwgbW9kZSkgewogICAgaWYgKCFDb2RlTWlycm9yLmRlZmF1bHRzLm1vZGUgJiYgbmFtZSAhPSAibnVsbCIpIENvZGVNaXJyb3IuZGVmYXVsdHMubW9kZSA9IG5hbWU7CiAgICBtb2Rlc1tuYW1lXSA9IG1vZGU7CiAgfTsKICBDb2RlTWlycm9yLmRlZmluZU1JTUUgPSBmdW5jdGlvbihtaW1lLCBzcGVjKSB7CiAgICBtaW1lTW9kZXNbbWltZV0gPSBzcGVjOwogIH07CiAgQ29kZU1pcnJvci5nZXRNb2RlID0gZnVuY3Rpb24ob3B0aW9ucywgc3BlYykgewogICAgaWYgKHR5cGVvZiBzcGVjID09ICJzdHJpbmciICYmIG1pbWVNb2Rlcy5oYXNPd25Qcm9wZXJ0eShzcGVjKSkKICAgICAgc3BlYyA9IG1pbWVNb2Rlc1tzcGVjXTsKICAgIGlmICh0eXBlb2Ygc3BlYyA9PSAic3RyaW5nIikKICAgICAgdmFyIG1uYW1lID0gc3BlYywgY29uZmlnID0ge307CiAgICBlbHNlIGlmIChzcGVjICE9IG51bGwpCiAgICAgIHZhciBtbmFtZSA9IHNwZWMubmFtZSwgY29uZmlnID0gc3BlYzsKICAgIHZhciBtZmFjdG9yeSA9IG1vZGVzW21uYW1lXTsKICAgIGlmICghbWZhY3RvcnkpIHsKICAgICAgaWYgKHdpbmRvdy5jb25zb2xlKSBjb25zb2xlLndhcm4oIk5vIG1vZGUgIiArIG1uYW1lICsgIiBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHBsYWluIHRleHQuIik7CiAgICAgIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywgInRleHQvcGxhaW4iKTsKICAgIH0KICAgIHJldHVybiBtZmFjdG9yeShvcHRpb25zLCBjb25maWcgfHwge30pOwogIH0KICBDb2RlTWlycm9yLmxpc3RNb2RlcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGxpc3QgPSBbXTsKICAgIGZvciAodmFyIG0gaW4gbW9kZXMpCiAgICAgIGlmIChtb2Rlcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShtKSkgbGlzdC5wdXNoKG0pOwogICAgcmV0dXJuIGxpc3Q7CiAgfTsKICBDb2RlTWlycm9yLmxpc3RNSU1FcyA9IGZ1bmN0aW9uKCkgewogICAgdmFyIGxpc3QgPSBbXTsKICAgIGZvciAodmFyIG0gaW4gbWltZU1vZGVzKQogICAgICBpZiAobWltZU1vZGVzLnByb3BlcnR5SXNFbnVtZXJhYmxlKG0pKSBsaXN0LnB1c2gobSk7CiAgICByZXR1cm4gbGlzdDsKICB9OwoKICBDb2RlTWlycm9yLmZyb21UZXh0QXJlYSA9IGZ1bmN0aW9uKHRleHRhcmVhLCBvcHRpb25zKSB7CiAgICBpZiAoIW9wdGlvbnMpIG9wdGlvbnMgPSB7fTsKICAgIG9wdGlvbnMudmFsdWUgPSB0ZXh0YXJlYS52YWx1ZTsKICAgIGlmICghb3B0aW9ucy50YWJpbmRleCAmJiB0ZXh0YXJlYS50YWJpbmRleCkKICAgICAgb3B0aW9ucy50YWJpbmRleCA9IHRleHRhcmVhLnRhYmluZGV4OwoKICAgIGZ1bmN0aW9uIHNhdmUoKSB7dGV4dGFyZWEudmFsdWUgPSBpbnN0YW5jZS5nZXRWYWx1ZSgpO30KICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7CiAgICAgIC8vIERlcGxvcmFibGUgaGFjayB0byBtYWtlIHRoZSBzdWJtaXQgbWV0aG9kIGRvIHRoZSByaWdodCB0aGluZy4KICAgICAgdmFyIHJtU3VibWl0ID0gY29ubmVjdCh0ZXh0YXJlYS5mb3JtLCAic3VibWl0Iiwgc2F2ZSwgdHJ1ZSk7CiAgICAgIGlmICh0eXBlb2YgdGV4dGFyZWEuZm9ybS5zdWJtaXQgPT0gImZ1bmN0aW9uIikgewogICAgICAgIHZhciByZWFsU3VibWl0ID0gdGV4dGFyZWEuZm9ybS5zdWJtaXQ7CiAgICAgICAgZnVuY3Rpb24gd3JhcHBlZFN1Ym1pdCgpIHsKICAgICAgICAgIHNhdmUoKTsKICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gcmVhbFN1Ym1pdDsKICAgICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0KCk7CiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHdyYXBwZWRTdWJtaXQ7CiAgICAgICAgfQogICAgICAgIHRleHRhcmVhLmZvcm0uc3VibWl0ID0gd3JhcHBlZFN1Ym1pdDsKICAgICAgfQogICAgfQoKICAgIHRleHRhcmVhLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7CiAgICB2YXIgaW5zdGFuY2UgPSBDb2RlTWlycm9yKGZ1bmN0aW9uKG5vZGUpIHsKICAgICAgdGV4dGFyZWEucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgdGV4dGFyZWEubmV4dFNpYmxpbmcpOwogICAgfSwgb3B0aW9ucyk7CiAgICBpbnN0YW5jZS5zYXZlID0gc2F2ZTsKICAgIGluc3RhbmNlLnRvVGV4dEFyZWEgPSBmdW5jdGlvbigpIHsKICAgICAgc2F2ZSgpOwogICAgICB0ZXh0YXJlYS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGluc3RhbmNlLmdldFdyYXBwZXJFbGVtZW50KCkpOwogICAgICB0ZXh0YXJlYS5zdHlsZS5kaXNwbGF5ID0gIiI7CiAgICAgIGlmICh0ZXh0YXJlYS5mb3JtKSB7CiAgICAgICAgcm1TdWJtaXQoKTsKICAgICAgICBpZiAodHlwZW9mIHRleHRhcmVhLmZvcm0uc3VibWl0ID09ICJmdW5jdGlvbiIpCiAgICAgICAgICB0ZXh0YXJlYS5mb3JtLnN1Ym1pdCA9IHJlYWxTdWJtaXQ7CiAgICAgIH0KICAgIH07CiAgICByZXR1cm4gaW5zdGFuY2U7CiAgfTsKCiAgLy8gVXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCBzdGF0ZS4gRXhwb3J0ZWQgYmVjYXVzZSBtb2RlcwogIC8vIHNvbWV0aW1lcyBuZWVkIHRvIGRvIHRoaXMuCiAgZnVuY3Rpb24gY29weVN0YXRlKG1vZGUsIHN0YXRlKSB7CiAgICBpZiAoc3RhdGUgPT09IHRydWUpIHJldHVybiBzdGF0ZTsKICAgIGlmIChtb2RlLmNvcHlTdGF0ZSkgcmV0dXJuIG1vZGUuY29weVN0YXRlKHN0YXRlKTsKICAgIHZhciBuc3RhdGUgPSB7fTsKICAgIGZvciAodmFyIG4gaW4gc3RhdGUpIHsKICAgICAgdmFyIHZhbCA9IHN0YXRlW25dOwogICAgICBpZiAodmFsIGluc3RhbmNlb2YgQXJyYXkpIHZhbCA9IHZhbC5jb25jYXQoW10pOwogICAgICBuc3RhdGVbbl0gPSB2YWw7CiAgICB9CiAgICByZXR1cm4gbnN0YXRlOwogIH0KICBDb2RlTWlycm9yLnN0YXJ0U3RhdGUgPSBzdGFydFN0YXRlOwogIGZ1bmN0aW9uIHN0YXJ0U3RhdGUobW9kZSwgYTEsIGEyKSB7CiAgICByZXR1cm4gbW9kZS5zdGFydFN0YXRlID8gbW9kZS5zdGFydFN0YXRlKGExLCBhMikgOiB0cnVlOwogIH0KICBDb2RlTWlycm9yLmNvcHlTdGF0ZSA9IGNvcHlTdGF0ZTsKCiAgLy8gVGhlIGNoYXJhY3RlciBzdHJlYW0gdXNlZCBieSBhIG1vZGUncyBwYXJzZXIuCiAgZnVuY3Rpb24gU3RyaW5nU3RyZWFtKHN0cmluZykgewogICAgdGhpcy5wb3MgPSB0aGlzLnN0YXJ0ID0gMDsKICAgIHRoaXMuc3RyaW5nID0gc3RyaW5nOwogIH0KICBTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogICAgZW9sOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3MgPj0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCiAgICBzb2w6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA9PSAwO30sCiAgICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogICAgbmV4dDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLnBvcyA8IHRoaXMuc3RyaW5nLmxlbmd0aCkKICAgICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogICAgfSwKICAgIGVhdDogZnVuY3Rpb24obWF0Y2gpIHsKICAgICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgICAgaWYgKHR5cGVvZiBtYXRjaCA9PSAic3RyaW5nIikgdmFyIG9rID0gY2ggPT0gbWF0Y2g7CiAgICAgIGVsc2UgdmFyIG9rID0gY2ggJiYgKG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKSk7CiAgICAgIGlmIChvaykgeysrdGhpcy5wb3M7IHJldHVybiBjaDt9CiAgICB9LAogICAgZWF0V2hpbGU6IGZ1bmN0aW9uKG1hdGNoKSB7CiAgICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQ7CiAgICAgIHdoaWxlICh0aGlzLmVhdChtYXRjaCkpe30KICAgICAgcmV0dXJuIHRoaXMucG9zID4gc3RhcnQ7CiAgICB9LAogICAgZWF0U3BhY2U6IGZ1bmN0aW9uKCkgewogICAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgICAgd2hpbGUgKC9bXHNcdTAwYTBdLy50ZXN0KHRoaXMuc3RyaW5nLmNoYXJBdCh0aGlzLnBvcykpKSArK3RoaXMucG9zOwogICAgICByZXR1cm4gdGhpcy5wb3MgPiBzdGFydDsKICAgIH0sCiAgICBza2lwVG9FbmQ6IGZ1bmN0aW9uKCkge3RoaXMucG9zID0gdGhpcy5zdHJpbmcubGVuZ3RoO30sCiAgICBza2lwVG86IGZ1bmN0aW9uKGNoKSB7CiAgICAgIHZhciBmb3VuZCA9IHRoaXMuc3RyaW5nLmluZGV4T2YoY2gsIHRoaXMucG9zKTsKICAgICAgaWYgKGZvdW5kID4gLTEpIHt0aGlzLnBvcyA9IGZvdW5kOyByZXR1cm4gdHJ1ZTt9CiAgICB9LAogICAgYmFja1VwOiBmdW5jdGlvbihuKSB7dGhpcy5wb3MgLT0gbjt9LAogICAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gY291bnRDb2x1bW4odGhpcy5zdHJpbmcsIHRoaXMuc3RhcnQpO30sCiAgICBpbmRlbnRhdGlvbjogZnVuY3Rpb24oKSB7cmV0dXJuIGNvdW50Q29sdW1uKHRoaXMuc3RyaW5nKTt9LAogICAgbWF0Y2g6IGZ1bmN0aW9uKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VJbnNlbnNpdGl2ZSkgewogICAgICBpZiAodHlwZW9mIHBhdHRlcm4gPT0gInN0cmluZyIpIHsKICAgICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICAgIGlmIChjYXNlZCh0aGlzLnN0cmluZykuaW5kZXhPZihjYXNlZChwYXR0ZXJuKSwgdGhpcy5wb3MpID09IHRoaXMucG9zKSB7CiAgICAgICAgICBpZiAoY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IHBhdHRlcm4ubGVuZ3RoOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgICBpZiAobWF0Y2ggJiYgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgICByZXR1cm4gbWF0Y2g7CiAgICAgIH0KICAgIH0sCiAgICBjdXJyZW50OiBmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmluZy5zbGljZSh0aGlzLnN0YXJ0LCB0aGlzLnBvcyk7fQogIH07CgogIC8vIExpbmUgb2JqZWN0cy4gVGhlc2UgaG9sZCBzdGF0ZSByZWxhdGVkIHRvIGEgbGluZSwgaW5jbHVkaW5nCiAgLy8gaGlnaGxpZ2h0aW5nIGluZm8gKHRoZSBzdHlsZXMgYXJyYXkpLgogIGZ1bmN0aW9uIExpbmUodGV4dCwgc3R5bGVzKSB7CiAgICB0aGlzLnN0eWxlcyA9IHN0eWxlcyB8fCBbdGV4dCwgbnVsbF07CiAgICB0aGlzLnN0YXRlQWZ0ZXIgPSBudWxsOwogICAgdGhpcy50ZXh0ID0gdGV4dDsKICAgIHRoaXMubWFya2VkID0gdGhpcy5ndXR0ZXJNYXJrZXIgPSB0aGlzLmNsYXNzTmFtZSA9IG51bGw7CiAgfQogIExpbmUucHJvdG90eXBlID0gewogICAgLy8gUmVwbGFjZSBhIHBpZWNlIG9mIGEgbGluZSwga2VlcGluZyB0aGUgc3R5bGVzIGFyb3VuZCBpdCBpbnRhY3QuCiAgICByZXBsYWNlOiBmdW5jdGlvbihmcm9tLCB0bywgdGV4dCkgewogICAgICB2YXIgc3QgPSBbXSwgbWsgPSB0aGlzLm1hcmtlZDsKICAgICAgY29weVN0eWxlcygwLCBmcm9tLCB0aGlzLnN0eWxlcywgc3QpOwogICAgICBpZiAodGV4dCkgc3QucHVzaCh0ZXh0LCBudWxsKTsKICAgICAgY29weVN0eWxlcyh0bywgdGhpcy50ZXh0Lmxlbmd0aCwgdGhpcy5zdHlsZXMsIHN0KTsKICAgICAgdGhpcy5zdHlsZXMgPSBzdDsKICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIGZyb20pICsgdGV4dCArIHRoaXMudGV4dC5zbGljZSh0byk7CiAgICAgIHRoaXMuc3RhdGVBZnRlciA9IG51bGw7CiAgICAgIGlmIChtaykgewogICAgICAgIHZhciBkaWZmID0gdGV4dC5sZW5ndGggLSAodG8gLSBmcm9tKSwgZW5kID0gdGhpcy50ZXh0Lmxlbmd0aDsKICAgICAgICBmdW5jdGlvbiBmaXgobikge3JldHVybiBuIDw9IE1hdGgubWluKHRvLCB0byArIGRpZmYpID8gbiA6IG4gKyBkaWZmO30KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1rLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICB2YXIgbWFyayA9IG1rW2ldLCBkZWwgPSBmYWxzZTsKICAgICAgICAgIGlmIChtYXJrLmZyb20gPj0gZW5kKSBkZWwgPSB0cnVlOwogICAgICAgICAgZWxzZSB7bWFyay5mcm9tID0gZml4KG1hcmsuZnJvbSk7IGlmIChtYXJrLnRvICE9IG51bGwpIG1hcmsudG8gPSBmaXgobWFyay50byk7fQogICAgICAgICAgaWYgKGRlbCB8fCBtYXJrLmZyb20gPj0gbWFyay50bykge21rLnNwbGljZShpLCAxKTsgaS0tO30KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvLyBTcGxpdCBhIGxpbmUgaW4gdHdvLCBhZ2FpbiBrZWVwaW5nIHN0eWxlcyBpbnRhY3QuCiAgICBzcGxpdDogZnVuY3Rpb24ocG9zLCB0ZXh0QmVmb3JlKSB7CiAgICAgIHZhciBzdCA9IFt0ZXh0QmVmb3JlLCBudWxsXTsKICAgICAgY29weVN0eWxlcyhwb3MsIHRoaXMudGV4dC5sZW5ndGgsIHRoaXMuc3R5bGVzLCBzdCk7CiAgICAgIHJldHVybiBuZXcgTGluZSh0ZXh0QmVmb3JlICsgdGhpcy50ZXh0LnNsaWNlKHBvcyksIHN0KTsKICAgIH0sCiAgICBhZGRNYXJrOiBmdW5jdGlvbihmcm9tLCB0bywgc3R5bGUpIHsKICAgICAgdmFyIG1rID0gdGhpcy5tYXJrZWQsIG1hcmsgPSB7ZnJvbTogZnJvbSwgdG86IHRvLCBzdHlsZTogc3R5bGV9OwogICAgICBpZiAodGhpcy5tYXJrZWQgPT0gbnVsbCkgdGhpcy5tYXJrZWQgPSBbXTsKICAgICAgdGhpcy5tYXJrZWQucHVzaChtYXJrKTsKICAgICAgdGhpcy5tYXJrZWQuc29ydChmdW5jdGlvbihhLCBiKXtyZXR1cm4gYS5mcm9tIC0gYi5mcm9tO30pOwogICAgICByZXR1cm4gbWFyazsKICAgIH0sCiAgICByZW1vdmVNYXJrOiBmdW5jdGlvbihtYXJrKSB7CiAgICAgIHZhciBtayA9IHRoaXMubWFya2VkOwogICAgICBpZiAoIW1rKSByZXR1cm47CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWsubGVuZ3RoOyArK2kpCiAgICAgICAgaWYgKG1rW2ldID09IG1hcmspIHttay5zcGxpY2UoaSwgMSk7IGJyZWFrO30KICAgIH0sCiAgICAvLyBSdW4gdGhlIGdpdmVuIG1vZGUncyBwYXJzZXIgb3ZlciBhIGxpbmUsIHVwZGF0ZSB0aGUgc3R5bGVzCiAgICAvLyBhcnJheSwgd2hpY2ggY29udGFpbnMgYWx0ZXJuYXRpbmcgZnJhZ21lbnRzIG9mIHRleHQgYW5kIENTUwogICAgLy8gY2xhc3Nlcy4KICAgIGhpZ2hsaWdodDogZnVuY3Rpb24obW9kZSwgc3RhdGUpIHsKICAgICAgdmFyIHN0cmVhbSA9IG5ldyBTdHJpbmdTdHJlYW0odGhpcy50ZXh0KSwgc3QgPSB0aGlzLnN0eWxlcywgcG9zID0gMDsKICAgICAgdmFyIGNoYW5nZWQgPSBmYWxzZSwgY3VyV29yZCA9IHN0WzBdLCBwcmV2V29yZDsKICAgICAgaWYgKHRoaXMudGV4dCA9PSAiIiAmJiBtb2RlLmJsYW5rTGluZSkgbW9kZS5ibGFua0xpbmUoc3RhdGUpOwogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgdmFyIHN1YnN0ciA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0uc3RhcnQsIHN0cmVhbS5wb3MpOwogICAgICAgIHN0cmVhbS5zdGFydCA9IHN0cmVhbS5wb3M7CiAgICAgICAgaWYgKHBvcyAmJiBzdFtwb3MtMV0gPT0gc3R5bGUpCiAgICAgICAgICBzdFtwb3MtMl0gKz0gc3Vic3RyOwogICAgICAgIGVsc2UgaWYgKHN1YnN0cikgewogICAgICAgICAgaWYgKCFjaGFuZ2VkICYmIChzdFtwb3MrMV0gIT0gc3R5bGUgfHwgKHBvcyAmJiBzdFtwb3MtMl0gIT0gcHJldldvcmQpKSkgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICBzdFtwb3MrK10gPSBzdWJzdHI7IHN0W3BvcysrXSA9IHN0eWxlOwogICAgICAgICAgcHJldldvcmQgPSBjdXJXb3JkOyBjdXJXb3JkID0gc3RbcG9zXTsKICAgICAgICB9CiAgICAgICAgLy8gR2l2ZSB1cCB3aGVuIGxpbmUgaXMgcmlkaWN1bG91c2x5IGxvbmcKICAgICAgICBpZiAoc3RyZWFtLnBvcyA+IDUwMDApIHsKICAgICAgICAgIHN0W3BvcysrXSA9IHRoaXMudGV4dC5zbGljZShzdHJlYW0ucG9zKTsgc3RbcG9zKytdID0gbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3QubGVuZ3RoICE9IHBvcykge3N0Lmxlbmd0aCA9IHBvczsgY2hhbmdlZCA9IHRydWU7fQogICAgICBpZiAocG9zICYmIHN0W3Bvcy0yXSAhPSBwcmV2V29yZCkgY2hhbmdlZCA9IHRydWU7CiAgICAgIHJldHVybiBjaGFuZ2VkOwogICAgfSwKICAgIC8vIEZldGNoIHRoZSBwYXJzZXIgdG9rZW4gZm9yIGEgZ2l2ZW4gY2hhcmFjdGVyLiBVc2VmdWwgZm9yIGhhY2tzCiAgICAvLyB0aGF0IHdhbnQgdG8gaW5zcGVjdCB0aGUgbW9kZSBzdGF0ZSAoc2F5LCBmb3IgY29tcGxldGlvbikuCiAgICBnZXRUb2tlbkF0OiBmdW5jdGlvbihtb2RlLCBzdGF0ZSwgY2gpIHsKICAgICAgdmFyIHR4dCA9IHRoaXMudGV4dCwgc3RyZWFtID0gbmV3IFN0cmluZ1N0cmVhbSh0eHQpOwogICAgICB3aGlsZSAoc3RyZWFtLnBvcyA8IGNoICYmICFzdHJlYW0uZW9sKCkpIHsKICAgICAgICBzdHJlYW0uc3RhcnQgPSBzdHJlYW0ucG9zOwogICAgICAgIHZhciBzdHlsZSA9IG1vZGUudG9rZW4oc3RyZWFtLCBzdGF0ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHtzdGFydDogc3RyZWFtLnN0YXJ0LAogICAgICAgICAgICAgIGVuZDogc3RyZWFtLnBvcywKICAgICAgICAgICAgICBzdHJpbmc6IHN0cmVhbS5jdXJyZW50KCksCiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBzdHlsZSB8fCBudWxsLAogICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZX07CiAgICB9LAogICAgaW5kZW50YXRpb246IGZ1bmN0aW9uKCkge3JldHVybiBjb3VudENvbHVtbih0aGlzLnRleHQpO30sCiAgICAvLyBQcm9kdWNlcyBhbiBIVE1MIGZyYWdtZW50IGZvciB0aGUgbGluZSwgdGFraW5nIHNlbGVjdGlvbiwKICAgIC8vIG1hcmtpbmcsIGFuZCBoaWdobGlnaHRpbmcgaW50byBhY2NvdW50LgogICAgZ2V0SFRNTDogZnVuY3Rpb24oc2Zyb20sIHN0bywgaW5jbHVkZVByZSwgZW5kQXQpIHsKICAgICAgdmFyIGh0bWwgPSBbXTsKICAgICAgaWYgKGluY2x1ZGVQcmUpCiAgICAgICAgaHRtbC5wdXNoKHRoaXMuY2xhc3NOYW1lID8gJzxwcmUgY2xhc3M9IicgKyB0aGlzLmNsYXNzTmFtZSArICciPic6ICI8cHJlPiIpOwogICAgICBmdW5jdGlvbiBzcGFuKHRleHQsIHN0eWxlKSB7CiAgICAgICAgaWYgKCF0ZXh0KSByZXR1cm47CiAgICAgICAgaWYgKHN0eWxlKSBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSInLCBzdHlsZSwgJyI+JywgaHRtbEVzY2FwZSh0ZXh0KSwgIjwvc3Bhbj4iKTsKICAgICAgICBlbHNlIGh0bWwucHVzaChodG1sRXNjYXBlKHRleHQpKTsKICAgICAgfQogICAgICB2YXIgc3QgPSB0aGlzLnN0eWxlcywgYWxsVGV4dCA9IHRoaXMudGV4dCwgbWFya2VkID0gdGhpcy5tYXJrZWQ7CiAgICAgIGlmIChzZnJvbSA9PSBzdG8pIHNmcm9tID0gbnVsbDsKICAgICAgdmFyIGxlbiA9IGFsbFRleHQubGVuZ3RoOwogICAgICBpZiAoZW5kQXQgIT0gbnVsbCkgbGVuID0gTWF0aC5taW4oZW5kQXQsIGxlbik7CgogICAgICBpZiAoIWFsbFRleHQgJiYgZW5kQXQgPT0gbnVsbCkKICAgICAgICBzcGFuKCIgIiwgc2Zyb20gIT0gbnVsbCAmJiBzdG8gPT0gbnVsbCA/ICJDb2RlTWlycm9yLXNlbGVjdGVkIiA6IG51bGwpOwogICAgICBlbHNlIGlmICghbWFya2VkICYmIHNmcm9tID09IG51bGwpCiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGNoID0gMDsgY2ggPCBsZW47IGkrPTIpIHsKICAgICAgICAgIHZhciBzdHIgPSBzdFtpXSwgbCA9IHN0ci5sZW5ndGg7CiAgICAgICAgICBpZiAoY2ggKyBsID4gbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgbGVuIC0gY2gpOwogICAgICAgICAgY2ggKz0gbDsKICAgICAgICAgIHNwYW4oc3RyLCBzdFtpKzFdKTsKICAgICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHZhciBwb3MgPSAwLCBpID0gMCwgdGV4dCA9ICIiLCBzdHlsZSwgc2cgPSAwOwogICAgICAgIHZhciBtYXJrcG9zID0gLTEsIG1hcmsgPSBudWxsOwogICAgICAgIGZ1bmN0aW9uIG5leHRNYXJrKCkgewogICAgICAgICAgaWYgKG1hcmtlZCkgewogICAgICAgICAgICBtYXJrcG9zICs9IDE7CiAgICAgICAgICAgIG1hcmsgPSAobWFya3BvcyA8IG1hcmtlZC5sZW5ndGgpID8gbWFya2VkW21hcmtwb3NdIDogbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbmV4dE1hcmsoKTsKICAgICAgICB3aGlsZSAocG9zIDwgbGVuKSB7CiAgICAgICAgICB2YXIgdXB0byA9IGxlbjsKICAgICAgICAgIHZhciBleHRyYVN0eWxlID0gIiI7CiAgICAgICAgICBpZiAoc2Zyb20gIT0gbnVsbCkgewogICAgICAgICAgICBpZiAoc2Zyb20gPiBwb3MpIHVwdG8gPSBzZnJvbTsKICAgICAgICAgICAgZWxzZSBpZiAoc3RvID09IG51bGwgfHwgc3RvID4gcG9zKSB7CiAgICAgICAgICAgICAgZXh0cmFTdHlsZSA9ICIgQ29kZU1pcnJvci1zZWxlY3RlZCI7CiAgICAgICAgICAgICAgaWYgKHN0byAhPSBudWxsKSB1cHRvID0gTWF0aC5taW4odXB0bywgc3RvKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKG1hcmsgJiYgbWFyay50byAhPSBudWxsICYmIG1hcmsudG8gPD0gcG9zKSBuZXh0TWFyaygpOwogICAgICAgICAgaWYgKG1hcmspIHsKICAgICAgICAgICAgaWYgKG1hcmsuZnJvbSA+IHBvcykgdXB0byA9IE1hdGgubWluKHVwdG8sIG1hcmsuZnJvbSk7CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgIGV4dHJhU3R5bGUgKz0gIiAiICsgbWFyay5zdHlsZTsKICAgICAgICAgICAgICBpZiAobWFyay50byAhPSBudWxsKSB1cHRvID0gTWF0aC5taW4odXB0bywgbWFyay50byk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgdmFyIGVuZCA9IHBvcyArIHRleHQubGVuZ3RoOwogICAgICAgICAgICB2YXIgYXBsaWVkU3R5bGUgPSBzdHlsZTsKICAgICAgICAgICAgaWYgKGV4dHJhU3R5bGUpIGFwbGllZFN0eWxlID0gc3R5bGUgPyBzdHlsZSArIGV4dHJhU3R5bGUgOiBleHRyYVN0eWxlOwogICAgICAgICAgICBzcGFuKGVuZCA+IHVwdG8gPyB0ZXh0LnNsaWNlKDAsIHVwdG8gLSBwb3MpIDogdGV4dCwgYXBsaWVkU3R5bGUpOwogICAgICAgICAgICBpZiAoZW5kID49IHVwdG8pIHt0ZXh0ID0gdGV4dC5zbGljZSh1cHRvIC0gcG9zKTsgcG9zID0gdXB0bzsgYnJlYWs7fQogICAgICAgICAgICBwb3MgPSBlbmQ7CiAgICAgICAgICAgIHRleHQgPSBzdFtpKytdOyBzdHlsZSA9IHN0W2krK107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzZnJvbSAhPSBudWxsICYmIHN0byA9PSBudWxsKSBzcGFuKCIgIiwgIkNvZGVNaXJyb3Itc2VsZWN0ZWQiKTsKICAgICAgfQogICAgICBpZiAoaW5jbHVkZVByZSkgaHRtbC5wdXNoKCI8L3ByZT4iKTsKICAgICAgcmV0dXJuIGh0bWwuam9pbigiIik7CiAgICB9CiAgfTsKICAvLyBVdGlsaXR5IHVzZWQgYnkgcmVwbGFjZSBhbmQgc3BsaXQgYWJvdmUKICBmdW5jdGlvbiBjb3B5U3R5bGVzKGZyb20sIHRvLCBzb3VyY2UsIGRlc3QpIHsKICAgIGZvciAodmFyIGkgPSAwLCBwb3MgPSAwLCBzdGF0ZSA9IDA7IHBvcyA8IHRvOyBpKz0yKSB7CiAgICAgIHZhciBwYXJ0ID0gc291cmNlW2ldLCBlbmQgPSBwb3MgKyBwYXJ0Lmxlbmd0aDsKICAgICAgaWYgKHN0YXRlID09IDApIHsKICAgICAgICBpZiAoZW5kID4gZnJvbSkgZGVzdC5wdXNoKHBhcnQuc2xpY2UoZnJvbSAtIHBvcywgTWF0aC5taW4ocGFydC5sZW5ndGgsIHRvIC0gcG9zKSksIHNvdXJjZVtpKzFdKTsKICAgICAgICBpZiAoZW5kID49IGZyb20pIHN0YXRlID0gMTsKICAgICAgfQogICAgICBlbHNlIGlmIChzdGF0ZSA9PSAxKSB7CiAgICAgICAgaWYgKGVuZCA+IHRvKSBkZXN0LnB1c2gocGFydC5zbGljZSgwLCB0byAtIHBvcyksIHNvdXJjZVtpKzFdKTsKICAgICAgICBlbHNlIGRlc3QucHVzaChwYXJ0LCBzb3VyY2VbaSsxXSk7CiAgICAgIH0KICAgICAgcG9zID0gZW5kOwogICAgfQogIH0KCiAgLy8gVGhlIGhpc3Rvcnkgb2JqZWN0ICdjaHVua3MnIGNoYW5nZXMgdGhhdCBhcmUgbWFkZSBjbG9zZSB0b2dldGhlcgogIC8vIGFuZCBhdCBhbG1vc3QgdGhlIHNhbWUgdGltZSBpbnRvIGJpZ2dlciB1bmRvYWJsZSB1bml0cy4KICBmdW5jdGlvbiBIaXN0b3J5KCkgewogICAgdGhpcy50aW1lID0gMDsKICAgIHRoaXMuZG9uZSA9IFtdOyB0aGlzLnVuZG9uZSA9IFtdOwogIH0KICBIaXN0b3J5LnByb3RvdHlwZSA9IHsKICAgIGFkZENoYW5nZTogZnVuY3Rpb24oc3RhcnQsIGFkZGVkLCBvbGQpIHsKICAgICAgdGhpcy51bmRvbmUubGVuZ3RoID0gMDsKICAgICAgdmFyIHRpbWUgPSArbmV3IERhdGUsIGxhc3QgPSB0aGlzLmRvbmVbdGhpcy5kb25lLmxlbmd0aCAtIDFdOwogICAgICBpZiAodGltZSAtIHRoaXMudGltZSA+IDQwMCB8fCAhbGFzdCB8fAogICAgICAgICAgbGFzdC5zdGFydCA+IHN0YXJ0ICsgYWRkZWQgfHwgbGFzdC5zdGFydCArIGxhc3QuYWRkZWQgPCBzdGFydCAtIGxhc3QuYWRkZWQgKyBsYXN0Lm9sZC5sZW5ndGgpCiAgICAgICAgdGhpcy5kb25lLnB1c2goe3N0YXJ0OiBzdGFydCwgYWRkZWQ6IGFkZGVkLCBvbGQ6IG9sZH0pOwogICAgICBlbHNlIHsKICAgICAgICB2YXIgb2xkb2ZmID0gMDsKICAgICAgICBpZiAoc3RhcnQgPCBsYXN0LnN0YXJ0KSB7CiAgICAgICAgICBmb3IgKHZhciBpID0gbGFzdC5zdGFydCAtIHN0YXJ0IC0gMTsgaSA+PSAwOyAtLWkpCiAgICAgICAgICAgIGxhc3Qub2xkLnVuc2hpZnQob2xkW2ldKTsKICAgICAgICAgIGxhc3QuYWRkZWQgKz0gbGFzdC5zdGFydCAtIHN0YXJ0OwogICAgICAgICAgbGFzdC5zdGFydCA9IHN0YXJ0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChsYXN0LnN0YXJ0IDwgc3RhcnQpIHsKICAgICAgICAgIG9sZG9mZiA9IHN0YXJ0IC0gbGFzdC5zdGFydDsKICAgICAgICAgIGFkZGVkICs9IG9sZG9mZjsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IGxhc3QuYWRkZWQgLSBvbGRvZmYsIGUgPSBvbGQubGVuZ3RoOyBpIDwgZTsgKytpKQogICAgICAgICAgbGFzdC5vbGQucHVzaChvbGRbaV0pOwogICAgICAgIGlmIChsYXN0LmFkZGVkIDwgYWRkZWQpIGxhc3QuYWRkZWQgPSBhZGRlZDsKICAgICAgfQogICAgICB0aGlzLnRpbWUgPSB0aW1lOwogICAgfQogIH07CgogIC8vIEV2ZW50IHN0b3BwaW5nIGNvbXBhdGliaWxpdHkgd3JhcHBlci4KICBmdW5jdGlvbiBzdG9wRXZlbnQoKSB7CiAgICBpZiAodGhpcy5wcmV2ZW50RGVmYXVsdCkge3RoaXMucHJldmVudERlZmF1bHQoKTsgdGhpcy5zdG9wUHJvcGFnYXRpb24oKTt9CiAgICBlbHNlIHt0aGlzLnJldHVyblZhbHVlID0gZmFsc2U7IHRoaXMuY2FuY2VsQnViYmxlID0gdHJ1ZTt9CiAgfQogIC8vIEVuc3VyZSBhbiBldmVudCBoYXMgYSBzdG9wIG1ldGhvZC4KICBmdW5jdGlvbiBhZGRTdG9wKGV2ZW50KSB7CiAgICBpZiAoIWV2ZW50LnN0b3ApIGV2ZW50LnN0b3AgPSBzdG9wRXZlbnQ7CiAgICByZXR1cm4gZXZlbnQ7CiAgfQoKICAvLyBFdmVudCB3cmFwcGVyLCBleHBvc2luZyB0aGUgZmV3IG9wZXJhdGlvbnMgd2UgbmVlZC4KICBmdW5jdGlvbiBFdmVudChvcmlnKSB7dGhpcy5lID0gb3JpZzt9CiAgRXZlbnQucHJvdG90eXBlID0gewogICAgc3RvcDogZnVuY3Rpb24oKSB7c3RvcEV2ZW50LmNhbGwodGhpcy5lKTt9LAogICAgdGFyZ2V0OiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5lLnRhcmdldCB8fCB0aGlzLmUuc3JjRWxlbWVudDt9LAogICAgYnV0dG9uOiBmdW5jdGlvbigpIHsKICAgICAgaWYgKHRoaXMuZS53aGljaCkgcmV0dXJuIHRoaXMuZS53aGljaDsKICAgICAgZWxzZSBpZiAodGhpcy5lLmJ1dHRvbiAmIDEpIHJldHVybiAxOwogICAgICBlbHNlIGlmICh0aGlzLmUuYnV0dG9uICYgMikgcmV0dXJuIDM7CiAgICAgIGVsc2UgaWYgKHRoaXMuZS5idXR0b24gJiA0KSByZXR1cm4gMjsKICAgIH0sCiAgICBwYWdlWDogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmUucGFnZVggIT0gbnVsbCkgcmV0dXJuIHRoaXMuZS5wYWdlWDsKICAgICAgdmFyIGRvYyA9IHRoaXMudGFyZ2V0KCkub3duZXJEb2N1bWVudDsKICAgICAgcmV0dXJuIHRoaXMuZS5jbGllbnRYICsgZG9jLmJvZHkuc2Nyb2xsTGVmdCArIGRvYy5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsTGVmdDsKICAgIH0sCiAgICBwYWdlWTogZnVuY3Rpb24oKSB7CiAgICAgIGlmICh0aGlzLmUucGFnZVkgIT0gbnVsbCkgcmV0dXJuIHRoaXMuZS5wYWdlWTsKICAgICAgdmFyIGRvYyA9IHRoaXMudGFyZ2V0KCkub3duZXJEb2N1bWVudDsKICAgICAgcmV0dXJuIHRoaXMuZS5jbGllbnRZICsgZG9jLmJvZHkuc2Nyb2xsVG9wICsgZG9jLmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7CiAgICB9CiAgfTsKCiAgLy8gRXZlbnQgaGFuZGxlciByZWdpc3RyYXRpb24uIElmIGRpc2Nvbm5lY3QgaXMgdHJ1ZSwgaXQnbGwgcmV0dXJuIGEKICAvLyBmdW5jdGlvbiB0aGF0IHVucmVnaXN0ZXJzIHRoZSBoYW5kbGVyLgogIGZ1bmN0aW9uIGNvbm5lY3Qobm9kZSwgdHlwZSwgaGFuZGxlciwgZGlzY29ubmVjdCkgewogICAgZnVuY3Rpb24gd3JhcEhhbmRsZXIoZXZlbnQpIHtoYW5kbGVyKG5ldyBFdmVudChldmVudCB8fCB3aW5kb3cuZXZlbnQpKTt9CiAgICBpZiAodHlwZW9mIG5vZGUuYWRkRXZlbnRMaXN0ZW5lciA9PSAiZnVuY3Rpb24iKSB7CiAgICAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcih0eXBlLCB3cmFwSGFuZGxlciwgZmFsc2UpOwogICAgICBpZiAoZGlzY29ubmVjdCkgcmV0dXJuIGZ1bmN0aW9uKCkge25vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCB3cmFwSGFuZGxlciwgZmFsc2UpO307CiAgICB9CiAgICBlbHNlIHsKICAgICAgbm9kZS5hdHRhY2hFdmVudCgib24iICsgdHlwZSwgd3JhcEhhbmRsZXIpOwogICAgICBpZiAoZGlzY29ubmVjdCkgcmV0dXJuIGZ1bmN0aW9uKCkge25vZGUuZGV0YWNoRXZlbnQoIm9uIiArIHR5cGUsIHdyYXBIYW5kbGVyKTt9OwogICAgfQogIH0KCiAgZnVuY3Rpb24gRGVsYXllZCgpIHt0aGlzLmlkID0gbnVsbDt9CiAgRGVsYXllZC5wcm90b3R5cGUgPSB7c2V0OiBmdW5jdGlvbihtcywgZikge2NsZWFyVGltZW91dCh0aGlzLmlkKTsgdGhpcy5pZCA9IHNldFRpbWVvdXQoZiwgbXMpO319OwoKICAvLyBTb21lIElFIHZlcnNpb25zIGRvbid0IHByZXNlcnZlIHdoaXRlc3BhY2Ugd2hlbiBzZXR0aW5nIHRoZQogIC8vIGlubmVySFRNTCBvZiBhIFBSRSB0YWcuCiAgdmFyIGJhZElubmVySFRNTCA9IChmdW5jdGlvbigpIHsKICAgIHZhciBwcmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKICAgIHByZS5pbm5lckhUTUwgPSAiICI7IHJldHVybiAhcHJlLmlubmVySFRNTDsKICB9KSgpOwoKICB2YXIgZ2Vja28gPSAvZ2Vja29cL1xkezd9L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTsKCiAgdmFyIGxpbmVTZXAgPSAiXG4iOwogIC8vIEZlYXR1cmUtZGV0ZWN0IHdoZXRoZXIgbmV3bGluZXMgaW4gdGV4dGFyZWFzIGFyZSBjb252ZXJ0ZWQgdG8gXHJcbgogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0ZXh0YXJlYSIpOwogICAgdGUudmFsdWUgPSAiZm9vXG5iYXIiOwogICAgaWYgKHRlLnZhbHVlLmluZGV4T2YoIlxyIikgPiAtMSkgbGluZVNlcCA9ICJcclxuIjsKICB9KCkpOwoKICB2YXIgdGFiU2l6ZSA9IDg7CiAgdmFyIG1hYyA9IC9NYWMvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTsKICB2YXIgbW92ZW1lbnRLZXlzID0ge307CiAgZm9yICh2YXIgaSA9IDM1OyBpIDw9IDQwOyArK2kpCiAgICBtb3ZlbWVudEtleXNbaV0gPSBtb3ZlbWVudEtleXNbImMiICsgaV0gPSB0cnVlOwoKICAvLyBDb3VudHMgdGhlIGNvbHVtbiBvZmZzZXQgaW4gYSBzdHJpbmcsIHRha2luZyB0YWJzIGludG8gYWNjb3VudC4KICAvLyBVc2VkIG1vc3RseSB0byBmaW5kIGluZGVudGF0aW9uLgogIGZ1bmN0aW9uIGNvdW50Q29sdW1uKHN0cmluZywgZW5kKSB7CiAgICBpZiAoZW5kID09IG51bGwpIHsKICAgICAgZW5kID0gc3RyaW5nLnNlYXJjaCgvW15cc1x1MDBhMF0vKTsKICAgICAgaWYgKGVuZCA9PSAtMSkgZW5kID0gc3RyaW5nLmxlbmd0aDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwLCBuID0gMDsgaSA8IGVuZDsgKytpKSB7CiAgICAgIGlmIChzdHJpbmcuY2hhckF0KGkpID09ICJcdCIpIG4gKz0gdGFiU2l6ZSAtIChuICUgdGFiU2l6ZSk7CiAgICAgIGVsc2UgKytuOwogICAgfQogICAgcmV0dXJuIG47CiAgfQoKICAvLyBGaW5kIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IGJ5IGZvbGxvd2luZyB0aGUgb2Zmc2V0UGFyZW50IGNoYWluLgogIC8vIElmIHNjcmVlbj09dHJ1ZSwgaXQgcmV0dXJucyBzY3JlZW4gKHJhdGhlciB0aGFuIHBhZ2UpIGNvb3JkaW5hdGVzLgogIGZ1bmN0aW9uIGVsdE9mZnNldChub2RlLCBzY3JlZW4pIHsKICAgIHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQuYm9keTsKICAgIHZhciB4ID0gMCwgeSA9IDAsIGhpdERvYyA9IGZhbHNlOwogICAgZm9yICh2YXIgbiA9IG5vZGU7IG47IG4gPSBuLm9mZnNldFBhcmVudCkgewogICAgICB4ICs9IG4ub2Zmc2V0TGVmdDsgeSArPSBuLm9mZnNldFRvcDsKICAgICAgLy8gRml4ZWQtcG9zaXRpb24gZWxlbWVudHMgZG9uJ3QgaGF2ZSB0aGUgZG9jdW1lbnQgaW4gdGhlaXIgb2Zmc2V0IGNoYWluCiAgICAgIGlmIChuID09IGRvYykgaGl0RG9jID0gdHJ1ZTsKICAgIH0KICAgIHZhciBlID0gc2NyZWVuICYmIGhpdERvYyA/IG51bGwgOiBkb2M7CiAgICBmb3IgKHZhciBuID0gbm9kZS5wYXJlbnROb2RlOyBuICE9IGU7IG4gPSBuLnBhcmVudE5vZGUpCiAgICAgIGlmIChuLnNjcm9sbExlZnQgIT0gbnVsbCkgeyB4IC09IG4uc2Nyb2xsTGVmdDsgeSAtPSBuLnNjcm9sbFRvcDt9CiAgICByZXR1cm4ge2xlZnQ6IHgsIHRvcDogeX07CiAgfQogIC8vIEdldCBhIG5vZGUncyB0ZXh0IGNvbnRlbnQuCiAgZnVuY3Rpb24gZWx0VGV4dChub2RlKSB7CiAgICByZXR1cm4gbm9kZS50ZXh0Q29udGVudCB8fCBub2RlLmlubmVyVGV4dCB8fCBub2RlLm5vZGVWYWx1ZSB8fCAiIjsKICB9CgogIC8vIE9wZXJhdGlvbnMgb24ge2xpbmUsIGNofSBvYmplY3RzLgogIGZ1bmN0aW9uIHBvc0VxKGEsIGIpIHtyZXR1cm4gYS5saW5lID09IGIubGluZSAmJiBhLmNoID09IGIuY2g7fQogIGZ1bmN0aW9uIHBvc0xlc3MoYSwgYikge3JldHVybiBhLmxpbmUgPCBiLmxpbmUgfHwgKGEubGluZSA9PSBiLmxpbmUgJiYgYS5jaCA8IGIuY2gpO30KICBmdW5jdGlvbiBjb3B5UG9zKHgpIHtyZXR1cm4ge2xpbmU6IHgubGluZSwgY2g6IHguY2h9O30KCiAgZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICAgIHJldHVybiBzdHIucmVwbGFjZSgvWzw+Jl0vZywgZnVuY3Rpb24oc3RyKSB7CiAgICAgIHJldHVybiBzdHIgPT0gIiYiID8gIiZhbXA7IiA6IHN0ciA9PSAiPCIgPyAiJmx0OyIgOiAiJmd0OyI7CiAgICB9KTsKICB9CgogIC8vIFVzZWQgdG8gcG9zaXRpb24gdGhlIGN1cnNvciBhZnRlciBhbiB1bmRvL3JlZG8gYnkgZmluZGluZyB0aGUKICAvLyBsYXN0IGVkaXRlZCBjaGFyYWN0ZXIuCiAgZnVuY3Rpb24gZWRpdEVuZChmcm9tLCB0bykgewogICAgaWYgKCF0bykgcmV0dXJuIGZyb20gPyBmcm9tLmxlbmd0aCA6IDA7CiAgICBpZiAoIWZyb20pIHJldHVybiB0by5sZW5ndGg7CiAgICBmb3IgKHZhciBpID0gZnJvbS5sZW5ndGgsIGogPSB0by5sZW5ndGg7IGkgPj0gMCAmJiBqID49IDA7IC0taSwgLS1qKQogICAgICBpZiAoZnJvbS5jaGFyQXQoaSkgIT0gdG8uY2hhckF0KGopKSBicmVhazsKICAgIHJldHVybiBqICsgMTsKICB9CgogIGZ1bmN0aW9uIGluZGV4T2YoY29sbGVjdGlvbiwgZWx0KSB7CiAgICBpZiAoY29sbGVjdGlvbi5pbmRleE9mKSByZXR1cm4gY29sbGVjdGlvbi5pbmRleE9mKGVsdCk7CiAgICBmb3IgKHZhciBpID0gMCwgZSA9IGNvbGxlY3Rpb24ubGVuZ3RoOyBpIDwgZTsgKytpKQogICAgICBpZiAoY29sbGVjdGlvbltpXSA9PSBlbHQpIHJldHVybiBpOwogICAgcmV0dXJuIC0xOwogIH0KCiAgLy8gU2VlIGlmICIiLnNwbGl0IGlzIHRoZSBicm9rZW4gSUUgdmVyc2lvbiwgaWYgc28sIHByb3ZpZGUgYW4KICAvLyBhbHRlcm5hdGl2ZSB3YXkgdG8gc3BsaXQgbGluZXMuCiAgaWYgKCJcblxuYiIuc3BsaXQoL1xuLykubGVuZ3RoICE9IDMpCiAgICB2YXIgc3BsaXRMaW5lcyA9IGZ1bmN0aW9uKHN0cmluZykgewogICAgICB2YXIgcG9zID0gMCwgbmwsIHJlc3VsdCA9IFtdOwogICAgICB3aGlsZSAoKG5sID0gc3RyaW5nLmluZGV4T2YoIlxuIiwgcG9zKSkgPiAtMSkgewogICAgICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShwb3MsIHN0cmluZy5jaGFyQXQobmwtMSkgPT0gIlxyIiA/IG5sIC0gMSA6IG5sKSk7CiAgICAgICAgcG9zID0gbmwgKyAxOwogICAgICB9CiAgICAgIHJlc3VsdC5wdXNoKHN0cmluZy5zbGljZShwb3MpKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgZWxzZQogICAgdmFyIHNwbGl0TGluZXMgPSBmdW5jdGlvbihzdHJpbmcpe3JldHVybiBzdHJpbmcuc3BsaXQoL1xyP1xuLyk7fTsKCiAgLy8gU2FuZSBtb2RlbCBvZiBmaW5kaW5nIGFuZCBzZXR0aW5nIHRoZSBzZWxlY3Rpb24gaW4gYSB0ZXh0YXJlYQogIGlmICh3aW5kb3cuZ2V0U2VsZWN0aW9uKSB7CiAgICB2YXIgc2VsUmFuZ2UgPSBmdW5jdGlvbih0ZSkgewogICAgICB0cnkge3JldHVybiB7c3RhcnQ6IHRlLnNlbGVjdGlvblN0YXJ0LCBlbmQ6IHRlLnNlbGVjdGlvbkVuZH07fQogICAgICBjYXRjaChlKSB7cmV0dXJuIG51bGw7fQogICAgfTsKICAgIHZhciBzZXRTZWxSYW5nZSA9IGZ1bmN0aW9uKHRlLCBzdGFydCwgZW5kKSB7CiAgICAgIHRyeSB7dGUuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZCk7fQogICAgICBjYXRjaChlKSB7fSAvLyBGYWlscyBvbiBGaXJlZm94IHdoZW4gdGV4dGFyZWEgaXNuJ3QgcGFydCBvZiB0aGUgZG9jdW1lbnQKICAgIH07CiAgfQogIC8vIElFIG1vZGVsLiBEb24ndCBhc2suCiAgZWxzZSB7CiAgICB2YXIgc2VsUmFuZ2UgPSBmdW5jdGlvbih0ZSkgewogICAgICB0cnkge3ZhciByYW5nZSA9IHRlLm93bmVyRG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7fQogICAgICBjYXRjaChlKSB7cmV0dXJuIG51bGw7fQogICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLnBhcmVudEVsZW1lbnQoKSAhPSB0ZSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciB2YWwgPSB0ZS52YWx1ZSwgbGVuID0gdmFsLmxlbmd0aCwgbG9jYWxSYW5nZSA9IHRlLmNyZWF0ZVRleHRSYW5nZSgpOwogICAgICBsb2NhbFJhbmdlLm1vdmVUb0Jvb2ttYXJrKHJhbmdlLmdldEJvb2ttYXJrKCkpOwogICAgICB2YXIgZW5kUmFuZ2UgPSB0ZS5jcmVhdGVUZXh0UmFuZ2UoKTsKICAgICAgZW5kUmFuZ2UuY29sbGFwc2UoZmFsc2UpOwoKICAgICAgaWYgKGxvY2FsUmFuZ2UuY29tcGFyZUVuZFBvaW50cygiU3RhcnRUb0VuZCIsIGVuZFJhbmdlKSA+IC0xKQogICAgICAgIHJldHVybiB7c3RhcnQ6IGxlbiwgZW5kOiBsZW59OwoKICAgICAgdmFyIHN0YXJ0ID0gLWxvY2FsUmFuZ2UubW92ZVN0YXJ0KCJjaGFyYWN0ZXIiLCAtbGVuKTsKICAgICAgZm9yICh2YXIgaSA9IHZhbC5pbmRleE9mKCJcciIpOyBpID4gLTEgJiYgaSA8IHN0YXJ0OyBpID0gdmFsLmluZGV4T2YoIlxyIiwgaSsxKSwgc3RhcnQrKykge30KCiAgICAgIGlmIChsb2NhbFJhbmdlLmNvbXBhcmVFbmRQb2ludHMoIkVuZFRvRW5kIiwgZW5kUmFuZ2UpID4gLTEpCiAgICAgICAgcmV0dXJuIHtzdGFydDogc3RhcnQsIGVuZDogbGVufTsKCiAgICAgIHZhciBlbmQgPSAtbG9jYWxSYW5nZS5tb3ZlRW5kKCJjaGFyYWN0ZXIiLCAtbGVuKTsKICAgICAgZm9yICh2YXIgaSA9IHZhbC5pbmRleE9mKCJcciIpOyBpID4gLTEgJiYgaSA8IGVuZDsgaSA9IHZhbC5pbmRleE9mKCJcciIsIGkrMSksIGVuZCsrKSB7fQogICAgICByZXR1cm4ge3N0YXJ0OiBzdGFydCwgZW5kOiBlbmR9OwogICAgfTsKICAgIHZhciBzZXRTZWxSYW5nZSA9IGZ1bmN0aW9uKHRlLCBzdGFydCwgZW5kKSB7CiAgICAgIHZhciByYW5nZSA9IHRlLmNyZWF0ZVRleHRSYW5nZSgpOwogICAgICByYW5nZS5jb2xsYXBzZSh0cnVlKTsKICAgICAgdmFyIGVuZHJhbmdlID0gcmFuZ2UuZHVwbGljYXRlKCk7CiAgICAgIHZhciBuZXdsaW5lcyA9IDAsIHR4dCA9IHRlLnZhbHVlOwogICAgICBmb3IgKHZhciBwb3MgPSB0eHQuaW5kZXhPZigiXG4iKTsgcG9zID4gLTEgJiYgcG9zIDwgc3RhcnQ7IHBvcyA9IHR4dC5pbmRleE9mKCJcbiIsIHBvcyArIDEpKQogICAgICAgICsrbmV3bGluZXM7CiAgICAgIHJhbmdlLm1vdmUoImNoYXJhY3RlciIsIHN0YXJ0IC0gbmV3bGluZXMpOwogICAgICBmb3IgKDsgcG9zID4gLTEgJiYgcG9zIDwgZW5kOyBwb3MgPSB0eHQuaW5kZXhPZigiXG4iLCBwb3MgKyAxKSkKICAgICAgICArK25ld2xpbmVzOwogICAgICBlbmRyYW5nZS5tb3ZlKCJjaGFyYWN0ZXIiLCBlbmQgLSBuZXdsaW5lcyk7CiAgICAgIHJhbmdlLnNldEVuZFBvaW50KCJFbmRUb0VuZCIsIGVuZHJhbmdlKTsKICAgICAgcmFuZ2Uuc2VsZWN0KCk7CiAgICB9OwogIH0KCiAgQ29kZU1pcnJvci5kZWZpbmVNb2RlKCJudWxsIiwgZnVuY3Rpb24oKSB7CiAgICByZXR1cm4ge3Rva2VuOiBmdW5jdGlvbihzdHJlYW0pIHtzdHJlYW0uc2tpcFRvRW5kKCk7fX07CiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3BsYWluIiwgIm51bGwiKTsKCiAgcmV0dXJuIENvZGVNaXJyb3I7Cn0pKCk7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/lib/overlay.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gVXRpbGl0eSBmdW5jdGlvbiB0aGF0IGFsbG93cyBtb2RlcyB0byBiZSBjb21iaW5lZC4gVGhlIG1vZGUgZ2l2ZW4KLy8gYXMgdGhlIGJhc2UgYXJndW1lbnQgdGFrZXMgY2FyZSBvZiBtb3N0IG9mIHRoZSBub3JtYWwgbW9kZQovLyBmdW5jdGlvbmFsaXR5LCBidXQgYSBzZWNvbmQgKHR5cGljYWxseSBzaW1wbGUpIG1vZGUgaXMgdXNlZCwgd2hpY2gKLy8gY2FuIG92ZXJyaWRlIHRoZSBzdHlsZSBvZiB0ZXh0LiBCb3RoIG1vZGVzIGdldCB0byBwYXJzZSBhbGwgb2YgdGhlCi8vIHRleHQsIGJ1dCB3aGVuIGJvdGggYXNzaWduIGEgbm9uLW51bGwgc3R5bGUgdG8gYSBwaWVjZSBvZiBjb2RlLCB0aGUKLy8gb3ZlcmxheSB3aW5zLCB1bmxlc3MgdGhlIGNvbWJpbmUgYXJndW1lbnQgd2FzIHRydWUsIGluIHdoaWNoIGNhc2UKLy8gdGhlIHN0eWxlcyBhcmUgY29tYmluZWQuCgpDb2RlTWlycm9yLm92ZXJsYXlQYXJzZXIgPSBmdW5jdGlvbihiYXNlLCBvdmVybGF5LCBjb21iaW5lKSB7CiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3Iuc3RhcnRTdGF0ZShiYXNlKSwKICAgICAgICBvdmVybGF5OiBDb2RlTWlycm9yLnN0YXJ0U3RhdGUob3ZlcmxheSksCiAgICAgICAgYmFzZVBvczogMCwgYmFzZUN1cjogbnVsbCwKICAgICAgICBvdmVybGF5UG9zOiAwLCBvdmVybGF5Q3VyOiBudWxsCiAgICAgIH07CiAgICB9LAogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICByZXR1cm4gewogICAgICAgIGJhc2U6IENvZGVNaXJyb3IuY29weVN0YXRlKGJhc2UsIHN0YXRlLmJhc2UpLAogICAgICAgIG92ZXJsYXk6IENvZGVNaXJyb3IuY29weVN0YXRlKG92ZXJsYXksIHN0YXRlLm92ZXJsYXkpLAogICAgICAgIGJhc2VQb3M6IHN0YXRlLmJhc2VQb3MsIGJhc2VDdXI6IG51bGwsCiAgICAgICAgb3ZlcmxheVBvczogc3RhdGUub3ZlcmxheVBvcywgb3ZlcmxheUN1cjogbnVsbAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnN0YXJ0ID09IHN0YXRlLmJhc2VQb3MpIHsKICAgICAgICBzdGF0ZS5iYXNlQ3VyID0gYmFzZS50b2tlbihzdHJlYW0sIHN0YXRlLmJhc2UpOwogICAgICAgIHN0YXRlLmJhc2VQb3MgPSBzdHJlYW0ucG9zOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uc3RhcnQgPT0gc3RhdGUub3ZlcmxheVBvcykgewogICAgICAgIHN0cmVhbS5wb3MgPSBzdHJlYW0uc3RhcnQ7CiAgICAgICAgc3RhdGUub3ZlcmxheUN1ciA9IG92ZXJsYXkudG9rZW4oc3RyZWFtLCBzdGF0ZS5vdmVybGF5KTsKICAgICAgICBzdGF0ZS5vdmVybGF5UG9zID0gc3RyZWFtLnBvczsKICAgICAgfQogICAgICBzdHJlYW0ucG9zID0gTWF0aC5taW4oc3RhdGUuYmFzZVBvcywgc3RhdGUub3ZlcmxheVBvcyk7CiAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHN0YXRlLmJhc2VQb3MgPSBzdGF0ZS5vdmVybGF5UG9zID0gMDsKCiAgICAgIGlmIChzdGF0ZS5vdmVybGF5Q3VyID09IG51bGwpIHJldHVybiBzdGF0ZS5iYXNlQ3VyOwogICAgICBpZiAoc3RhdGUuYmFzZUN1ciAhPSBudWxsICYmIGNvbWJpbmUpIHJldHVybiBzdGF0ZS5iYXNlQ3VyICsgIiAiICsgc3RhdGUub3ZlcmxheUN1cjsKICAgICAgZWxzZSByZXR1cm4gc3RhdGUub3ZlcmxheUN1cjsKICAgIH0sCiAgICAKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICByZXR1cm4gYmFzZS5pbmRlbnQoc3RhdGUuYmFzZSwgdGV4dEFmdGVyKTsKICAgIH0sCiAgICBlbGVjdHJpY0NoYXJzOiBiYXNlLmVsZWN0cmljQ2hhcnMKICB9Owp9Owo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29weXJpZ2h0IChDKSAyMDExIGJ5IE1hcmlqbiBIYXZlcmJla2UgPG1hcmlqbmhAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/manual.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I6IFVzZXIgTWFudWFsPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9ImNzcy9kb2NzLmNzcyIvPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgIDxzdHlsZT5kbCBkbCB7bWFyZ2luOiAwO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KCjxoMT48c3BhbiBjbGFzcz0ibG9nby1icmFjZXMiPnsgfTwvc3Bhbj4gPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0LyI+Q29kZU1pcnJvcjwvYT48L2gxPgoKPHByZSBjbGFzcz0iZ3JleSI+CjxpbWcgc3JjPSJjc3MvYmFib29uLnBuZyIgY2xhc3M9ImxvZ28iIGFsdD0ibG9nbyIvPi8qIFVzZXIgbWFudWFsIGFuZAogICByZWZlcmVuY2UgZ3VpZGUgKi8KPC9wcmU+Cgo8ZGl2IGNsYXNzPSJjbGVhciI+PGRpdiBjbGFzcz0ibGVmdGJpZyBibGsiPgoKICAgIDxoMiBpZD0ib3ZlcnZpZXciPk92ZXJ2aWV3PC9oMj4KCiAgICA8cD5Db2RlTWlycm9yIGlzIGEgY29kZS1lZGl0b3IgY29tcG9uZW50IHRoYXQgY2FuIGJlIGVtYmVkZGVkIGluCiAgICBXZWIgcGFnZXMuIEl0IHByb3ZpZGVzIDxlbT5vbmx5PC9lbT4gdGhlIGVkaXRvciBjb21wb25lbnQsIG5vCiAgICBhY2NvbXBhbnlpbmcgYnV0dG9ucwogICAgKHNlZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9jdG9sYWJzLmNvbS9qYXZhc2NyaXB0cy9jb2RlbWlycm9yLXVpLyI+Q29kZU1pcnJvcgogICAgVUk8L2E+IGZvciBhIGRyb3AtaW4gYnV0dG9uIGJhciksIGF1dG8tY29tcGxldGlvbiwgb3Igb3RoZXIgSURFCiAgICBmdW5jdGlvbmFsaXR5LiBJdCBkb2VzIHByb3ZpZGUgYSByaWNoIEFQSSBvbiB0b3Agb2Ygd2hpY2ggc3VjaAogICAgZnVuY3Rpb25hbGl0eSBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkbHkgaW1wbGVtZW50ZWQuPC9wPgoKICAgIDxwPkNvZGVNaXJyb3Igd29ya3Mgd2l0aCBsYW5ndWFnZS1zcGVjaWZpYyBtb2Rlcy4gTW9kZXMgYXJlCiAgICBKYXZhU2NyaXB0IHByb2dyYW1zIHRoYXQgaGVscCBjb2xvciAoYW5kIG9wdGlvbmFsbHkgaW5kZW50KSB0ZXh0CiAgICB3cml0dGVuIGluIGEgZ2l2ZW4gbGFuZ3VhZ2UuIFRoZSBkaXN0cmlidXRpb24gY29tZXMgd2l0aCBhIGZldwogICAgbW9kZXMgKHNlZSB0aGUgPGNvZGU+bW9kZS88L2NvZGU+IGRpcmVjdG9yeSksIGFuZCBpdCBpc24ndCBoYXJkCiAgICB0byA8YSBocmVmPSIjbW9kZWFwaSI+d3JpdGUgbmV3IG9uZXM8L2E+IGZvciBvdGhlciBsYW5ndWFnZXMuPC9wPgoKICAgIDxoMiBpZD0idXNhZ2UiPkJhc2ljIFVzYWdlPC9oMj4KCiAgICA8cD5UaGUgZWFzaWVzdCB3YXkgdG8gdXNlIENvZGVNaXJyb3IgaXMgdG8gc2ltcGx5IGxvYWQgdGhlIHNjcmlwdAogICAgYW5kIHN0eWxlIHNoZWV0IGZvdW5kIHVuZGVyIDxjb2RlPmxpYi88L2NvZGU+IGluIHRoZSBkaXN0cmlidXRpb24sCiAgICBwbHVzIHRoZSBzY3JpcHQgYW5kIHN0eWxlIHNoZWV0IGZvciB0aGUgbW9kZShzKSB5b3Ugd2FudCB0byB1c2UuCiAgICAoU2VlIGFsc28gPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+dGhlIGNvbXByZXNpb24gaGVscGVyPC9hPi4pIEZvcgogICAgZXhhbXBsZTo8L3A+CgogICAgPHByZT4mbHQ7c2NyaXB0IHNyYz0ibGliL2NvZGVtaXJyb3IuanMiPiZsdDsvc2NyaXB0PgombHQ7bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImxpYi9jb2RlbWlycm9yLmNzcyI+CiZsdDtzY3JpcHQgc3JjPSJtb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+Jmx0Oy9zY3JpcHQ+CiZsdDtsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0ibW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuY3NzIj48L3ByZT4KCiAgICA8cD5IYXZpbmcgZG9uZSB0aGlzLCBhbiBlZGl0b3IgaW5zdGFuY2UgY2FuIGJlIGNyZWF0ZWQgbGlrZQogICAgdGhpczo8L3A+CgogICAgPHByZT52YXIgbXlDb2RlTWlycm9yID0gQ29kZU1pcnJvcihkb2N1bWVudC5ib2R5KTs8L3ByZT4KCiAgICA8cD5UaGUgZWRpdG9yIHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlIGRvY3VtZW50IGJvZHksIHdpbGwgc3RhcnQKICAgIGVtcHR5LCBhbmQgd2lsbCB1c2UgdGhlIG1vZGUgdGhhdCB3ZSBsb2FkZWQuIFRvIGhhdmUgbW9yZSBjb250cm9sCiAgICBvdmVyIHRoZSBuZXcgZWRpdG9yLCBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGNhbiBiZSBwYXNzZWQKICAgIHRvIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGFzIGEgc2Vjb25kIGFyZ3VtZW50OjwvcD4KCiAgICA8cHJlPnZhciBteUNvZGVNaXJyb3IgPSBDb2RlTWlycm9yKGRvY3VtZW50LmJvZHksIHsKICB2YWx1ZTogImZ1bmN0aW9uIG15U2NyaXB0KCl7cmV0dXJuIDEwMDt9XG4iLAogIG1vZGU6ICAiamF2YXNjcmlwdCIKfSk7PC9wcmU+CgogICAgPHA+VGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIGVkaXRvciB3aXRoIGEgcGllY2Ugb2YgY29kZSBhbHJlYWR5IGluCiAgICBpdCwgYW5kIGV4cGxpY2l0bHkgdGVsbCBpdCB0byB1c2UgdGhlIEphdmFTY3JpcHQgbW9kZSAod2hpY2ggaXMKICAgIHVzZWZ1bCB3aGVuIG11bHRpcGxlIG1vZGVzIGFyZSBsb2FkZWQpLgogICAgU2VlIDxhIGhyZWY9IiNjb25maWciPmJlbG93PC9hPiBmb3IgYSBmdWxsIGRpc2N1c3Npb24gb2YgdGhlCiAgICBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBDb2RlTWlycm9yIGFjY2VwdHMuPC9wPgoKICAgIDxwPkluIGNhc2VzIHdoZXJlIHlvdSBkb24ndCB3YW50IHRvIGFwcGVuZCB0aGUgZWRpdG9yIHRvIGFuCiAgICBlbGVtZW50LCBhbmQgbmVlZCBtb3JlIGNvbnRyb2wgb3ZlciB0aGUgd2F5IGl0IGlzIGluc2VydGVkLCB0aGUKICAgIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBmdW5jdGlvbiBjYW4gYWxzbwogICAgYmUgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGdpdmVuIGEgRE9NIGVsZW1lbnQsIGluc2VydHMgaXQgaW50byB0aGUKICAgIGRvY3VtZW50IHNvbWV3aGVyZS4gVGhpcyBjb3VsZCBiZSB1c2VkIHRvLCBmb3IgZXhhbXBsZSwgcmVwbGFjZSBhCiAgICB0ZXh0YXJlYSB3aXRoIGEgcmVhbCBlZGl0b3I6PC9wPgoKICAgIDxwcmU+dmFyIG15Q29kZU1pcnJvciA9IENvZGVNaXJyb3IoZnVuY3Rpb24oZWx0KSB7CiAgbXlUZXh0QXJlYS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChlbHQsIG15VGV4dEFyZWEpOwp9LCB7dmFsdWU6IG15VGV4dEFyZWEudmFsdWV9KTs8L3ByZT4KCiAgICA8cD5Ib3dldmVyLCBmb3IgdGhpcyB1c2UgY2FzZSwgd2hpY2ggaXMgYSBjb21tb24gd2F5IHRvIHVzZQogICAgQ29kZU1pcnJvciwgdGhlIGxpYnJhcnkgcHJvdmlkZXMgYSBtdWNoIG1vcmUgcG93ZXJmdWwKICAgIHNob3J0Y3V0OjwvcD4KCiAgICA8cHJlPnZhciBteUNvZGVNaXJyb3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShteVRleHRBcmVhKTs8L3ByZT4KCiAgICA8cD5UaGlzIHdpbGwsIGFtb25nIG90aGVyIHRoaW5ncywgZW5zdXJlIHRoYXQgdGhlIHRleHRhcmVhJ3MgdmFsdWUKICAgIGlzIHVwZGF0ZWQgd2hlbiB0aGUgZm9ybSAoaWYgaXQgaXMgcGFydCBvZiBhIGZvcm0pIGlzIHN1Ym1pdHRlZC4KICAgIFNlZSB0aGUgPGEgaHJlZj0iI2Zyb21UZXh0QXJlYSI+QVBJIHJlZmVyZW5jZTwvYT4gZm9yIGEgZnVsbAogICAgZGVzY3JpcHRpb24gb2YgdGhpcyBtZXRob2QuPC9wPgoKICAgIDxoMiBpZD0iY29uZmlnIj5Db25maWd1cmF0aW9uPC9oMj4KCiAgICA8cD5Cb3RoIHRoZSA8Y29kZT5Db2RlTWlycm9yPC9jb2RlPiBmdW5jdGlvbiBhbmQKICAgIGl0cyA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+IG1ldGhvZCB0YWtlIGFzIHNlY29uZCAob3B0aW9uYWwpCiAgICBhcmd1bWVudCBhbiBvYmplY3QgY29udGFpbmluZyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEFueSBvcHRpb24KICAgIG5vdCBzdXBwbGllZCBsaWtlIHRoaXMgd2lsbCBiZSB0YWtlbgogICAgZnJvbSA8Y29kZT5Db2RlTWlycm9yLmRlZmF1bHRzPC9jb2RlPiwgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlCiAgICBkZWZhdWx0IG9wdGlvbnMuIFlvdSBjYW4gdXBkYXRlIHRoaXMgb2JqZWN0IHRvIGNoYW5nZSB0aGUgZGVmYXVsdHMKICAgIG9uIHlvdXIgcGFnZS48L3A+CgogICAgPHA+T3B0aW9ucyBhcmUgbm90IGNoZWNrZWQgaW4gYW55IHdheSwgc28gc2V0dGluZyBib2d1cyBvcHRpb24KICAgIHZhbHVlcyBpcyBib3VuZCB0byBsZWFkIHRvIG9kZCBlcnJvcnMuPC9wPgoKICAgIDxwPjxlbT5Ob3RlOjwvZW0+IENvZGVNaXJyb3IKICAgIDIgPGEgaHJlZj0iaW50ZXJuYWxzLmh0bWwjc3VtbWFyeSI+ZG9lcyBub3Qgc3VwcG9ydDwvYT4KICAgIGxpbmUtd3JhcHBpbmcuIEkgd291bGQgaGF2ZSB2ZXJ5IG11Y2ggbGlrZWQgdG8gc3VwcG9ydCBpdCwgYnV0IGl0CiAgICBjb21iaW5lcyBleHRyZW1lbHkgcG9vcmx5IHdpdGggdGhlIHdheSB0aGUgZWRpdG9yIGlzCiAgICBpbXBsZW1lbnRlZC48L3A+CgogICAgPHA+VGhlc2UgYXJlIHRoZSBzdXBwb3J0ZWQgb3B0aW9uczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9Im9wdGlvbl92YWx1ZSI+PGNvZGU+dmFsdWUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9tb2RlIj48Y29kZT5tb2RlIChzdHJpbmcgb3Igb2JqZWN0KTwvY29kZT48L2R0PgogICAgICA8ZGQ+VGhlIG1vZGUgdG8gdXNlLiBXaGVuIG5vdCBnaXZlbiwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlCiAgICAgIGZpcnN0IG1vZGUgdGhhdCB3YXMgbG9hZGVkLiBJdCBtYXkgYmUgYSBzdHJpbmcsIHdoaWNoIGVpdGhlcgogICAgICBzaW1wbHkgbmFtZXMgdGhlIG1vZGUgb3IgaXMKICAgICAgYSA8YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL01JTUUiPk1JTUU8L2E+IHR5cGUKICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBtb2RlLiBBbHRlcm5hdGl2ZWx5LCBpdCBtYXkgYmUgYW4gb2JqZWN0CiAgICAgIGNvbnRhaW5pbmcgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgbW9kZSwgd2l0aAogICAgICBhIDxjb2RlPm5hbWU8L2NvZGU+IHByb3BlcnR5IHRoYXQgbmFtZXMgdGhlIG1vZGUgKGZvcgogICAgICBleGFtcGxlIDxjb2RlPntuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9PC9jb2RlPikuIFRoZSBkZW1vCiAgICAgIHBhZ2VzIGZvciBlYWNoIG1vZGUgY29udGFpbiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGNvbmZpZ3VyYXRpb24KICAgICAgcGFyYW1ldGVycyB0aGUgbW9kZSBzdXBwb3J0cy4gWW91IGNhbiBhc2sgQ29kZU1pcnJvciB3aGljaCBtb2RlcwogICAgICBhbmQgTUlNRSB0eXBlcyBhcmUgbG9hZGVkIHdpdGgKICAgICAgdGhlIDxjb2RlPkNvZGVNaXJyb3IubGlzdE1vZGVzPC9jb2RlPgogICAgICBhbmQgPGNvZGU+Q29kZU1pcnJvci5saXN0TUlNRXM8L2NvZGU+IGZ1bmN0aW9ucy48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25faW5kZW50VW5pdCI+PGNvZGU+aW5kZW50VW5pdCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkhvdyBtYW55IHNwYWNlcyBhIGJsb2NrICh3aGF0ZXZlciB0aGF0IG1lYW5zIGluIHRoZSBlZGl0ZWQKICAgICAgbGFuZ3VhZ2UpIHNob3VsZCBiZSBpbmRlbnRlZC4gVGhlIGRlZmF1bHQgaXMgMi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25faW5kZW50V2l0aFRhYnMiPjxjb2RlPmluZGVudFdpdGhUYWJzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciwgd2hlbiBpbmRlbnRpbmcsIHRoZSBmaXJzdCBOKjggc3BhY2VzIHNob3VsZCBiZQogICAgICByZXBsYWNlZCBieSBOIHRhYnMuIERlZmF1bHQgaXMgZmFsc2UuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3RhYk1vZGUiPjxjb2RlPnRhYk1vZGUgKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkRldGVybWluZXMgd2hhdCBoYXBwZW5zIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgdGFiIGtleS4KICAgICAgTXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+ImNsYXNzaWMiICh0aGUgZGVmYXVsdCk8L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5XaGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQsIGluc2VydCBhIHRhYi4gT3RoZXJ3aXNlLAogICAgICAgICAgYmVoYXZlIGxpa2UgdGhlIDxjb2RlPiJzaGlmdCI8L2NvZGU+IG1vZGUuIChXaGVuIHNoaWZ0IGlzCiAgICAgICAgICBoZWxkLCB0aGlzIGJlaGF2ZXMgbGlrZSB0aGUgPGNvZGU+ImluZGVudCI8L2NvZGU+IG1vZGUuKTwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+InNoaWZ0IjwvY29kZT48L2R0PgogICAgICAgICAgPGRkPkluZGVudCBhbGwgc2VsZWN0ZWQgbGluZXMgYnkKICAgICAgICAgIG9uZSA8YSBocmVmPSIjb3B0aW9uX2luZGVudFVuaXQiPjxjb2RlPmluZGVudFVuaXQ8L2NvZGU+PC9hPi4KICAgICAgICAgIElmIHNoaWZ0IHdhcyBoZWxkIHdoaWxlIHByZXNzaW5nIHRhYiwgdW4taW5kZW50IGFsbCBzZWxlY3RlZAogICAgICAgICAgbGluZXMgb25lIHVuaXQuPC9kZD4KICAgICAgICAgIDxkdD48Y29kZT4iaW5kZW50IjwvY29kZT48L2R0PgogICAgICAgICAgPGRkPkluZGVudCB0aGUgbGluZSB0aGUgJ2NvcnJlY3RseScsIGJhc2VkIG9uIGl0cyBzeW50YWN0aWMKICAgICAgICAgIGNvbnRleHQuIE9ubHkgd29ya3MgaWYgdGhlCiAgICAgICAgICBtb2RlIDxhIGhyZWY9IiNpbmRlbnQiPnN1cHBvcnRzPC9hPiBpdC48L2RkPgogICAgICAgICAgPGR0Pjxjb2RlPiJkZWZhdWx0IjwvY29kZT48L2R0PgogICAgICAgICAgPGRkPkRvIG5vdCBjYXB0dXJlIHRhYiBwcmVzc2VzLCBsZXQgdGhlIGJyb3dzZXIgYXBwbHkgaXRzCiAgICAgICAgICBkZWZhdWx0IGJlaGF2aW91ciAod2hpY2ggdXN1YWxseSBtZWFucyBpdCBza2lwcyB0byB0aGUgbmV4dAogICAgICAgICAgY29udHJvbCkuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9lbnRlck1vZGUiPjxjb2RlPmVudGVyTW9kZSAoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGFuZCBob3cgbmV3IGxpbmVzIGFyZSBpbmRlbnRlZCB3aGVuIHRoZQogICAgICBlbnRlciBrZXkgaXMgcHJlc3NlZC4gVGhlIGZvbGxvd2luZyBtb2RlcyBhcmUgc3VwcG9ydGVkOgogICAgICAgIDxkbD4KICAgICAgICAgIDxkdD48Y29kZT4iaW5kZW50IiAodGhlIGRlZmF1bHQpPC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+VXNlIHRoZSBtb2RlJ3MgaW5kZW50YXRpb24gcnVsZXMgdG8gZ2l2ZSB0aGUgbmV3IGxpbmUKICAgICAgICAgIHRoZSBjb3JyZWN0IGluZGVudGF0aW9uLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+ImtlZXAiPC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+SW5kZW50IHRoZSBsaW5lIHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBsaW5lLjwvZGQ+CiAgICAgICAgICA8ZHQ+PGNvZGU+ImZsYXQiPC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+RG8gbm90IGluZGVudCB0aGUgbmV3IGxpbmUuPC9kZD4KICAgICAgICA8L2RsPjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9lbGVjdHJpY0NoYXJzIj48Y29kZT5lbGVjdHJpY0NoYXJzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29uZmlndXJlcyB3aGV0aGVyIHRoZSBlZGl0b3Igc2hvdWxkIHJlLWluZGVudCB0aGUgY3VycmVudAogICAgICBsaW5lIHdoZW4gYSBjaGFyYWN0ZXIgaXMgdHlwZWQgdGhhdCBtaWdodCBjaGFuZ2UgaXRzIHByb3BlcgogICAgICBpbmRlbnRhdGlvbiAob25seSB3b3JrcyBpZiB0aGUgbW9kZSBzdXBwb3J0cyBpbmRlbnRhdGlvbikuCiAgICAgIERlZmF1bHQgaXMgdHJ1ZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fbGluZU51bWJlcnMiPjxjb2RlPmxpbmVOdW1iZXJzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+V2hldGhlciB0byBzaG93IGxpbmUgbnVtYmVycyB0byB0aGUgbGVmdCBvZiB0aGUgZWRpdG9yLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9maXJzdExpbmVOdW1iZXIiPjxjb2RlPmZpcnN0TGluZU51bWJlciAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkF0IHdoaWNoIG51bWJlciB0byBzdGFydCBjb3VudGluZyBsaW5lcy4gRGVmYXVsdCBpcyAxLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9ndXR0ZXIiPjxjb2RlPmd1dHRlciAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkNhbiBiZSB1c2VkIHRvIGZvcmNlIGEgJ2d1dHRlcicgKGVtcHR5IHNwYWNlIG9uIHRoZSBsZWZ0IG9mCiAgICAgIHRoZSBlZGl0b3IpIHRvIGJlIHNob3duIGV2ZW4gd2hlbiBubyBsaW5lIG51bWJlcnMgYXJlIGFjdGl2ZS4KICAgICAgVGhpcyBpcyB1c2VmdWwgZm9yIHNldHRpbmcgPGEgaHJlZj0iI3NldE1hcmtlciI+bWFya2VyczwvYT4uPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3JlYWRPbmx5Ij48Y29kZT5yZWFkT25seSAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgZGlzYWJsZXMgZWRpdGluZyBvZiB0aGUgZWRpdG9yIGNvbnRlbnQgYnkgdGhlIHVzZXIuCiAgICAgIChDaGFuZ2VzIHRocm91Z2ggQVBJIGZ1bmN0aW9ucyB3aWxsIHN0aWxsIGJlIHBvc3NpYmxlLikgSWYgeW91CiAgICAgIGFsc28gd2FudCB0byBkaXNhYmxlIHRoZSBjdXJzb3IsIHVzZSA8Y29kZT4ibm9jdXJzb3IiPC9jb2RlPiBhcwogICAgICBhIHZhbHVlIGZvciB0aGlzIG9wdGlvbiwgaW5zdGVhZCBvZiA8Y29kZT50cnVlPC9jb2RlPi48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fb25DaGFuZ2UiPjxjb2RlPm9uQ2hhbmdlIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgZXZlcnkgdGltZSB0aGUKICAgICAgY29udGVudCBvZiB0aGUgZWRpdG9yIGlzIGNoYW5nZWQuIEl0IHdpbGwgYmUgZ2l2ZW4gdGhlIGVkaXRvcgogICAgICBpbnN0YW5jZSBhcyBvbmx5IGFyZ3VtZW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkN1cnNvckFjdGl2aXR5Ij48Y29kZT5vbkN1cnNvckFjdGl2aXR5IChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPkxpa2UgPGNvZGU+b25DaGFuZ2U8L2NvZGU+LCBidXQgd2lsbCBhbHNvIGJlIGNhbGxlZCB3aGVuIHRoZQogICAgICBjdXJzb3IgbW92ZXMgd2l0aG91dCBhbnkgY2hhbmdlcyBiZWluZyBtYWRlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkd1dHRlckNsaWNrIj48Y29kZT5vbkd1dHRlckNsaWNrIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW4gZ2l2ZW4sIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgZ3V0dGVyICh0aGUKICAgICAgbGluZS1udW1iZXIgYXJlYSkgaXMgY2xpY2tlZC4gV2lsbCBiZSBnaXZlbiB0aGUgZWRpdG9yIGluc3RhbmNlCiAgICAgIGFzIGZpcnN0IGFyZ3VtZW50LCBhbmQgdGhlICh6ZXJvLWJhc2VkKSBudW1iZXIgb2YgdGhlIGxpbmUgdGhhdAogICAgICB3YXMgY2xpY2tlZCBhcyBzZWNvbmQgYXJndW1lbnQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uRm9jdXMiPjxjb2RlPm9uRm9jdXMsIG9uQmx1ciAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgZ2l2ZW4gZnVuY3Rpb25zIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBlZGl0b3IgaXMKICAgICAgZm9jdXNlZCBvciB1bmZvY3VzZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX29uU2Nyb2xsIj48Y29kZT5vblNjcm9sbCAoZnVuY3Rpb24pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuIGdpdmVuLCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgZWRpdG9yIGlzCiAgICAgIHNjcm9sbGVkLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbkhpZ2hsaWdodENvbXBsZXRlIj48Y29kZT5vbkhpZ2hsaWdodENvbXBsZXRlIChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPldoZW5ldmVyIHRoZSBlZGl0b3IncyBjb250ZW50IGhhcyBiZWVuIGZ1bGx5IGhpZ2hsaWdodGVkLAogICAgICB0aGlzIGZ1bmN0aW9uIChpZiBnaXZlbikgd2lsbCBiZSBjYWxsZWQuIEl0J2xsIGJlIGdpdmVuIGEgc2luZ2xlCiAgICAgIGFyZ3VtZW50LCB0aGUgZWRpdG9yIGluc3RhbmNlLjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9tYXRjaEJyYWNrZXRzIj48Y29kZT5tYXRjaEJyYWNrZXRzIChib29sZWFuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+RGV0ZXJtaW5lcyB3aGV0aGVyIGJyYWNrZXRzIGFyZSBtYXRjaGVkIHdoZW5ldmVyIHRoZSBjdXJzb3IKICAgICAgaXMgbW92ZWQgbmV4dCB0byBhIGJyYWNrZXQuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3dvcmtUaW1lIj48Y29kZT53b3JrVGltZSwgd29ya0RlbGF5IChudW1iZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5IaWdobGlnaHRpbmcgaXMgZG9uZSBieSBhIHBzZXVkbyBiYWNrZ3JvdW5kLXRocmVhZCB0aGF0IHdpbGwKICAgICAgd29yayBmb3IgPGNvZGU+d29ya1RpbWU8L2NvZGU+IG1pbGxpc2Vjb25kcywgYW5kIHRoZW4gdXNlCiAgICAgIHRpbWVvdXQgdG8gc2xlZXAgZm9yIDxjb2RlPndvcmtEZWxheTwvY29kZT4gbWlsbGlzZWNvbmRzLiBUaGUKICAgICAgZGVmYXVsdHMgYXJlIDIwMCBhbmQgMzAwLCB5b3UgY2FuIGNoYW5nZSB0aGVzZSBvcHRpb25zIHRvIG1ha2UKICAgICAgdGhlIGhpZ2hsaWdodGluZyBtb3JlIG9yIGxlc3MgYWdncmVzc2l2ZS48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fdW5kb0RlcHRoIj48Y29kZT51bmRvRGVwdGggKGludGVnZXIpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgbWF4aW11bSBudW1iZXIgb2YgdW5kbyBsZXZlbHMgdGhhdCB0aGUgZWRpdG9yIHN0b3Jlcy4KICAgICAgRGVmYXVsdHMgdG8gNDAuPC9kZD4KCiAgICAgIDxkdCBpZD0ib3B0aW9uX3RhYmluZGV4Ij48Y29kZT50YWJpbmRleCAoaW50ZWdlcik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSA8YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2ludGVyYWN0L2Zvcm1zLmh0bWwjYWRlZi10YWJpbmRleCI+dGFiCiAgICAgIGluZGV4PC9hPiB0byBhc3NpZ24gdG8gdGhlIGVkaXRvci4gSWYgbm90IGdpdmVuLCBubyB0YWIgaW5kZXgKICAgICAgd2lsbCBiZSBhc3NpZ25lZC48L2RkPgoKICAgICAgPGR0IGlkPSJvcHRpb25fZG9jdW1lbnQiPjxjb2RlPmRvY3VtZW50IChET00gZG9jdW1lbnQpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhpcyBpZiB5b3Ugd2FudCB0byBkaXNwbGF5IHRoZSBlZGl0b3IgaW4gYW5vdGhlciBET00uCiAgICAgIEJ5IGRlZmF1bHQgaXQgd2lsbCB1c2UgdGhlIGdsb2JhbCA8Y29kZT5kb2N1bWVudDwvY29kZT4KICAgICAgb2JqZWN0LjwvZGQ+CgogICAgICA8ZHQgaWQ9Im9wdGlvbl9vbktleUV2ZW50Ij48Y29kZT5vbktleUV2ZW50IChmdW5jdGlvbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoaXMgcHJvdmlkZXMgYSByYXRoZXIgbG93LWxldmVsIGhvb2sgaW50byBDb2RlTWlycm9yJ3Mga2V5CiAgICAgIGhhbmRsaW5nLiBJZiBwcm92aWRlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBvbgogICAgICBldmVyeSA8Y29kZT5rZXlkb3duPC9jb2RlPiwgPGNvZGU+a2V5dXA8L2NvZGU+LAogICAgICBhbmQgPGNvZGU+a2V5cHJlc3M8L2NvZGU+IGV2ZW50IHRoYXQgQ29kZU1pcnJvciBjYXB0dXJlcy4gSXQKICAgICAgd2lsbCBiZSBwYXNzZWQgdHdvIGFyZ3VtZW50cywgdGhlIGVkaXRvciBpbnN0YW5jZSBhbmQgdGhlIGtleQogICAgICBldmVudC4gVGhpcyBrZXkgZXZlbnQgaXMgcHJldHR5IG11Y2ggdGhlIHJhdyBrZXkgZXZlbnQsIGV4Y2VwdAogICAgICB0aGF0IGEgPGNvZGU+c3RvcCgpPC9jb2RlPiBtZXRob2QgaXMgYWx3YXlzIGFkZGVkIHRvIGl0LiBZb3UKICAgICAgY291bGQgZmVlZCBpdCB0bywgZm9yIGV4YW1wbGUsIDxjb2RlPmpRdWVyeS5FdmVudDwvY29kZT4gdG8KICAgICAgZnVydGhlciBub3JtYWxpemUgaXQuPGJyPlRoaXMgZnVuY3Rpb24gY2FuIGluc3BlY3QgdGhlIGtleQogICAgICBldmVudCwgYW5kIGhhbmRsZSBpdCBpZiBpdCB3YW50cyB0by4gSXQgbWF5IHJldHVybiB0cnVlIHRvIHRlbGwKICAgICAgQ29kZU1pcnJvciB0byBpZ25vcmUgdGhlIGV2ZW50LiBCZSB3YXJ5IHRoYXQsIG9uIHNvbWUgYnJvd3NlcnMsCiAgICAgIHN0b3BwaW5nIGEgPGNvZGU+a2V5ZG93bjwvY29kZT4gZG9lcyBub3Qgc3RvcAogICAgICB0aGUgPGNvZGU+a2V5cHJlc3M8L2NvZGU+IGZyb20gZmlyaW5nLCB3aGVyZWFzIG9uIG90aGVycyBpdAogICAgICBkb2VzLiBJZiB5b3UgcmVzcG9uZCB0byBhbiBldmVudCwgeW91IHNob3VsZCBwcm9iYWJseSBpbnNwZWN0CiAgICAgIGl0cyA8Y29kZT50eXBlPC9jb2RlPiBwcm9wZXJ0eSBhbmQgb25seSBkbyBzb21ldGhpbmcgd2hlbiBpdAogICAgICBpcyA8Y29kZT5rZXlkb3duPC9jb2RlPiAob3IgPGNvZGU+a2V5cHJlc3M8L2NvZGU+IGZvciBhY3Rpb25zCiAgICAgIHRoYXQgbmVlZCBjaGFyYWN0ZXIgZGF0YSkuPC9kZD4KICAgIDwvZGw+CgogICAgPGgyIGlkPSJzdHlsaW5nIj5DdXN0b21pemVkIFN0eWxpbmc8L2gyPgoKICAgIDxwPlVwIHRvIGEgY2VydGFpbiBleHRlbnQsIENvZGVNaXJyb3IncyBsb29rIGNhbiBiZSBjaGFuZ2VkIGJ5CiAgICBtb2RpZnlpbmcgc3R5bGUgc2hlZXQgZmlsZXMuIFRoZSBzdHlsZSBzaGVldHMgc3VwcGxpZWQgYnkgbW9kZXMKICAgIHNpbXBseSBwcm92aWRlIHRoZSBjb2xvcnMgZm9yIHRoYXQgbW9kZSwgYW5kIGNhbiBiZSBhZGFwdGVkIGluIGEKICAgIHZlcnkgc3RyYWlnaHRmb3J3YXJkIHdheS4gVG8gc3R5bGUgdGhlIGVkaXRvciBpdHNlbGYsIGl0IGlzCiAgICBwb3NzaWJsZSB0byBhbHRlciBvciBvdmVycmlkZSB0aGUgc3R5bGVzIGRlZmluZWQKICAgIGluIDxhIGhyZWY9ImxpYi9jb2RlbWlycm9yLmNzcyI+PGNvZGU+Y29kZW1pcnJvci5jc3M8L2NvZGU+PC9hPi48L3A+CgogICAgPHA+U29tZSBjYXJlIG11c3QgYmUgdGFrZW4gdGhlcmUsIHNpbmNlIGEgbG90IG9mIHRoZSBydWxlcyBpbiB0aGlzCiAgICBmaWxlIGFyZSBuZWNlc3NhcnkgdG8gaGF2ZSBDb2RlTWlycm9yIGZ1bmN0aW9uIHByb3Blcmx5LiBBZGp1c3RpbmcKICAgIGNvbG9ycyBzaG91bGQgYmUgc2FmZSwgb2YgY291cnNlLCBhbmQgd2l0aCBzb21lIGNhcmUgYSBsb3Qgb2YKICAgIG90aGVyIHRoaW5ncyBjYW4gYmUgY2hhbmdlZCBhcyB3ZWxsLiBUaGUgQ1NTIGNsYXNzZXMgZGVmaW5lZCBpbgogICAgdGhpcyBmaWxlIHNlcnZlIHRoZSBmb2xsb3dpbmcgcm9sZXM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yIj48Y29kZT5Db2RlTWlycm9yPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGUgb3V0ZXIgZWxlbWVudCBvZiB0aGUgZWRpdG9yLiBUaGlzIGRldGVybWluZXMgd2hldGhlciB0aGUKICAgICAgZWRpdG9yIHNjcm9sbHMgKDxjb2RlPm92ZXJmbG93OiBhdXRvPC9jb2RlPiArIGZpeGVkIGhlaWdodCkuIENhbgogICAgICBhbHNvIGJlIHVzZWQgdG8gc2V0IHN0eWxlcyB0aGF0IHNob3VsZCBob2xkIGZvciBldmVyeXRoaW5nCiAgICAgIGluc2lkZSB0aGUgZWRpdG9yLCBvciB0byBzZXQgYSBiYWNrZ3JvdW5kLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZm9jdXNlZCI+PGNvZGU+Q29kZU1pcnJvci1mb2N1c2VkPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5XaGVuZXZlciB0aGUgZWRpdG9yIGlzIGZvY3VzZWQsIHRoZSB0b3AgZWxlbWVudCBnZXRzIHRoaXMKICAgICAgY2xhc3MuIFRoaXMgaXMgdXNlZCB0byBoaWRlIHRoZSBjdXJzb3IgYW5kIGdpdmUgdGhlIHNlbGVjdGlvbiBhCiAgICAgIGRpZmZlcmVudCBjb2xvciB3aGVuIHRoZSBlZGl0b3IgaXMgbm90IGZvY3VzZWQuPC9kZD4KCiAgICAgIDxkdCBpZD0iY2xhc3NfQ29kZU1pcnJvcl9ndXR0ZXIiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Vc2UgdGhpcyBmb3IgZ2l2aW5nIGEgYmFja2dyb3VuZCBvciBhIGJvcmRlciB0byB0aGUgZWRpdG9yCiAgICAgIGd1dHRlci4gRG9uJ3Qgc2V0IGFueSBwYWRkaW5nIGhlcmUsCiAgICAgIHVzZSA8Y29kZT5Db2RlTWlycm9yLWd1dHRlci10ZXh0PC9jb2RlPiBmb3IgdGhhdC4gQnkgZGVmYXVsdCwKICAgICAgdGhlIGd1dHRlciBpcyAnZmx1aWQnLCBtZWFuaW5nIGl0IHdpbGwgYWRqdXN0IGl0cyB3aWR0aCB0byB0aGUKICAgICAgbWF4aW11bSBsaW5lIG51bWJlciBvciBsaW5lIG1hcmtlciB3aWR0aC4gWW91IGNhbiBhbHNvIHNldCBhCiAgICAgIGZpeGVkIHdpZHRoIGlmIHlvdSB3YW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfZ3V0dGVyX3RleHQiPjxjb2RlPkNvZGVNaXJyb3ItZ3V0dGVyLXRleHQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlVzZWQgdG8gc3R5bGUgdGhlIGFjdHVhbCBsaW5lIG51bWJlcnMuIEZvciB0aGUgbnVtYmVycyB0bwogICAgICBsaW5lIHVwLCB5b3UnbGwgd2FudCB0aGlzIHN0eWxlIHRvIHVzZSBleGFjdGx5IHRoZSBzYW1lIGZvbnQgYW5kCiAgICAgIHZlcnRpY2FsIHBhZGRpbmcgYXMgbm9ybWFsIGVkaXRlZCB0ZXh0LCBhcyBwZXIKICAgICAgdGhlIDxjb2RlPkNvZGVNaXJyb3ItbGluZXM8L2NvZGU+IGNsYXNzLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfbGluZXMiPjxjb2RlPkNvZGVNaXJyb3ItbGluZXM8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSB2aXNpYmxlIGxpbmVzLiBJZiB0aGlzIGhhcyB2ZXJ0aWNhbAogICAgICBwYWRkaW5nLCA8Y29kZT5Db2RlTWlycm9yLWd1dHRlcjwvY29kZT4gc2hvdWxkIGhhdmUgdGhlIHNhbWUKICAgICAgcGFkZGluZy48L2RkPgoKICAgICAgPGR0IGlkPSJjbGFzc19Db2RlTWlycm9yX2N1cnNvciI+PGNvZGU+Q29kZU1pcnJvci1jdXJzb3I8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBjdXJzb3IgaXMgYSBibG9jayBlbGVtZW50IHRoYXQgaXMgYWJzb2x1dGVseSBwb3NpdGlvbmVkLgogICAgICBZb3UgY2FuIG1ha2UgaXQgbG9vayB3aGljaGV2ZXIgd2F5IHlvdSB3YW50LjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3Jfc2VsZWN0ZWQiPjxjb2RlPkNvZGVNaXJyb3Itc2VsZWN0ZWQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZSBzZWxlY3Rpb24gaXMgcmVwcmVzZW50ZWQgYnkgPGNvZGU+c3BhbjwvY29kZT4gZWxlbWVudHMKICAgICAgd2l0aCB0aGlzIGNsYXNzLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImNsYXNzX0NvZGVNaXJyb3JfbWF0Y2hpbmdicmFja2V0Ij48Y29kZT5Db2RlTWlycm9yLW1hdGNoaW5nYnJhY2tldDwvY29kZT4sCiAgICAgICAgPGNvZGU+Q29kZU1pcnJvci1ub25tYXRjaGluZ2JyYWNrZXQ8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRoZXNlIGFyZSB1c2VkIHRvIHN0eWxlIG1hdGNoZWQgKG9yIHVubWF0Y2hlZCkgYnJhY2tldHMuPC9kZD4KICAgIDwvZGw+CgogICAgPHA+VGhlIGFjdHVhbCBsaW5lcywgYXMgd2VsbCBhcyB0aGUgY3Vyc29yLCBhcmUgcmVwcmVzZW50ZWQKICAgIGJ5IDxjb2RlPnByZTwvY29kZT4gZWxlbWVudHMuIEJ5IGRlZmF1bHQgbm8gdGV4dCBzdHlsaW5nIChzdWNoIGFzCiAgICBib2xkKSB0aGF0IG1pZ2h0IGNoYW5nZSBsaW5lIGhlaWdodCBpcyBhcHBsaWVkLiBJZiB5b3UgZG8gd2FudAogICAgc3VjaCBlZmZlY3RzLCB5b3UnbGwgaGF2ZSB0byBnaXZlIDxjb2RlPkNvZGVNaXJyb3IgcHJlPC9jb2RlPiBhCiAgICBmaXhlZCBoZWlnaHQuIEFsc28sIHlvdSBtdXN0IHN0aWxsIHRha2UgY2FyZSB0aGF0IGNoYXJhY3RlciB3aWR0aAogICAgaXMgY29uc3RhbnQuPC9wPgoKICAgIDxwPklmIHlvdXIgcGFnZSdzIHN0eWxlIHNoZWV0cyBkbyBmdW5reSB0aGluZ3MgdG8KICAgIGFsbCA8Y29kZT5kaXY8L2NvZGU+IG9yIDxjb2RlPnByZTwvY29kZT4gZWxlbWVudHMgKHlvdSBwcm9iYWJseQogICAgc2hvdWxkbid0IGRvIHRoYXQpLCB5b3UnbGwgaGF2ZSB0byBkZWZpbmUgcnVsZXMgdG8gY2FuY2VsIHRoZXNlCiAgICBlZmZlY3RzIG91dCBhZ2FpbiBmb3IgZWxlbWVudHMgdW5kZXIgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+CiAgICBjbGFzcy48L3A+CgogICAgPGgyIGlkPSJhcGkiPlByb2dyYW1taW5nIEFQSTwvaDI+CgogICAgPHA+QSBsb3Qgb2YgQ29kZU1pcnJvciBmZWF0dXJlcyBhcmUgb25seSBhdmFpbGFibGUgdGhyb3VnaCBpdHMgQVBJLgogICAgVGhpcyBoYXMgdGhlIGRpc2FkdmFudGFnZSB0aGF0IHlvdSBuZWVkIHRvIGRvIHdvcmsgdG8gZW5hYmxlIHRoZW0sCiAgICBhbmQgdGhlIGFkdmFudGFnZSB0aGF0IENvZGVNaXJyb3Igd2lsbCBmaXQgc2VhbWxlc3NseSBpbnRvIHlvdXIKICAgIGFwcGxpY2F0aW9uLjwvcD4KCiAgICA8cD5XaGVuZXZlciBwb2ludHMgaW4gdGhlIGRvY3VtZW50IGFyZSByZXByZXNlbnRlZCwgdGhlIEFQSSB1c2VzCiAgICBvYmplY3RzIHdpdGggPGNvZGU+bGluZTwvY29kZT4gYW5kIDxjb2RlPmNoPC9jb2RlPiBwcm9wZXJ0aWVzLgogICAgQm90aCBhcmUgemVyby1iYXNlZC4gQ29kZU1pcnJvciBtYWtlcyBzdXJlIHRvICdjbGlwJyBhbnkgcG9zaXRpb25zCiAgICBwYXNzZWQgYnkgY2xpZW50IGNvZGUgc28gdGhhdCB0aGV5IGZpdCBpbnNpZGUgdGhlIGRvY3VtZW50LCBzbyB5b3UKICAgIHNob3VsZG4ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBzYW5pdGl6aW5nIHlvdXIgY29vcmRpbmF0ZXMuIElmIHlvdQogICAgZ2l2ZSA8Y29kZT5jaDwvY29kZT4gYSB2YWx1ZSBvZiA8Y29kZT5udWxsPC9jb2RlPiwgb3IgZG9uJ3QKICAgIHNwZWNpZnkgaXQsIGl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUgbGVuZ3RoIG9mIHRoZSBzcGVjaWZpZWQKICAgIGxpbmUuPC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJnZXRWYWx1ZSI+PGNvZGU+Z2V0VmFsdWUoKSDihpIgc3RyaW5nPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5HZXQgdGhlIGN1cnJlbnQgZWRpdG9yIGNvbnRlbnQuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRWYWx1ZSI+PGNvZGU+c2V0VmFsdWUoc3RyaW5nKTwvY29kZT48L2R0PgogICAgICA8ZGQ+U2V0IHRoZSBlZGl0b3IgY29udGVudC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRTZWxlY3Rpb24iPjxjb2RlPmdldFNlbGVjdGlvbigpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvZGUuPC9kZD4KICAgICAgPGR0IGlkPSJyZXBsYWNlU2VsZWN0aW9uIj48Y29kZT5yZXBsYWNlU2VsZWN0aW9uKHN0cmluZyk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlcGxhY2UgdGhlIHNlbGVjdGlvbiB3aXRoIHRoZSBnaXZlbiBzdHJpbmcuPC9kZD4KCiAgICAgIDxkdCBpZD0iZm9jdXMiPjxjb2RlPmZvY3VzKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdpdmUgdGhlIGVkaXRvciBmb2N1cy48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRPcHRpb24iPjxjb2RlPnNldE9wdGlvbihvcHRpb24sIHZhbHVlKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBlZGl0b3IuIDxjb2RlPm9wdGlvbjwvY29kZT4KICAgICAgc2hvdWxkIHRoZSBuYW1lIG9mIGFuIDxhIGhyZWY9IiNjb25maWciPm9wdGlvbjwvYT4sCiAgICAgIGFuZCA8Y29kZT52YWx1ZTwvY29kZT4gc2hvdWxkIGJlIGEgdmFsaWQgdmFsdWUgZm9yIHRoYXQKICAgICAgb3B0aW9uLjwvZGQ+CiAgICAgIDxkdCBpZD0iZ2V0T3B0aW9uIj48Y29kZT5nZXRPcHRpb24ob3B0aW9uKSDihpIgdmFsdWU8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gb3B0aW9uIGZvciB0aGlzCiAgICAgIGVkaXRvciBpbnN0YW5jZS48L2RkPgoKICAgICAgPGR0IGlkPSJjdXJzb3JDb29yZHMiPjxjb2RlPmN1cnNvckNvb3JkcyhzdGFydCkg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyBhbiA8Y29kZT57eCwgeSwgeUJvdH08L2NvZGU+IG9iamVjdCBjb250YWluaW5nIHRoZQogICAgICBjb29yZGluYXRlcyBvZiB0aGUgY3Vyc29yIHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIgb2YgdGhlCiAgICAgIHBhZ2UuIDxjb2RlPnlCb3Q8L2NvZGU+IGlzIHRoZSBjb29yZGluYXRlIG9mIHRoZSBib3R0b20gb2YgdGhlCiAgICAgIGN1cnNvci4gPGNvZGU+c3RhcnQ8L2NvZGU+IGlzIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgeW91CiAgICAgIHdhbnQgdGhlIHN0YXJ0IG9yIHRoZSBlbmQgb2YgdGhlIHNlbGVjdGlvbi48L2RkPgogICAgICA8ZHQgaWQ9ImNoYXJDb29yZHMiPjxjb2RlPmNoYXJDb29yZHMocG9zKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5MaWtlIDxjb2RlPmN1cnNvckNvb3JkczwvY29kZT4sIGJ1dCByZXR1cm5zIHRoZSBwb3NpdGlvbiBvZgogICAgICBhbiBhcmJpdHJhcnkgY2hhcmFjdGVycy4gPGNvZGU+cG9zPC9jb2RlPiBzaG91bGQgYmUKICAgICAgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QuPC9kZD4KICAgICAgPGR0IGlkPSJjb29yZHNDaGFyIj48Y29kZT5jb29yZHNDaGFyKG9iamVjdCkg4oaSIHBvczwvY29kZT48L2R0PgogICAgICA8ZGQ+R2l2ZW4gYW4gPGNvZGU+e3gsIHl9PC9jb2RlPiBvYmplY3QgKGluIHBhZ2UgY29vcmRpbmF0ZXMpLAogICAgICByZXR1cm5zIHRoZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBwb3NpdGlvbiB0aGF0IGNvcnJlc3BvbmRzIHRvCiAgICAgIGl0LjwvZGQ+CgogICAgICA8ZHQgaWQ9InVuZG8iPjxjb2RlPnVuZG8oKTwvY29kZT48L2R0PgogICAgICA8ZGQ+VW5kbyBvbmUgZWRpdCAoaWYgYW55IHVuZG8gZXZlbnRzIGFyZSBzdG9yZWQpLjwvZGQ+CiAgICAgIDxkdCBpZD0icmVkbyI+PGNvZGU+cmVkbygpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZWRvIG9uZSB1bmRvbmUgZWRpdC48L2RkPgogICAgICA8ZHQgaWQ9Imhpc3RvcnlTaXplIj48Y29kZT5oaXN0b3J5U2l6ZSgpIOKGkiBvYmplY3Q8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgYW4gb2JqZWN0IHdpdGggPGNvZGU+e3VuZG8sIHJlZG99PC9jb2RlPiBwcm9wZXJ0aWVzLAogICAgICBib3RoIG9mIHdoaWNoIGhvbGQgaW50ZWdlcnMsIGluZGljYXRpbmcgdGhlIGFtb3VudCBvZiBzdG9yZWQKICAgICAgdW5kbyBhbmQgcmVkbyBvcGVyYXRpb25zLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImluZGVudExpbmUiPjxjb2RlPmluZGVudExpbmUobGluZSk8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJlc2V0IHRoZSBnaXZlbiBsaW5lJ3MgaW5kZW50YXRpb24gdG8gdGhlIGluZGVudGF0aW9uCiAgICAgIHByZXNjcmliZWQgYnkgdGhlIG1vZGUuPC9kZD4KCiAgICAgIDxkdCBpZD0iZ2V0U2VhcmNoQ3Vyc29yIj48Y29kZT5nZXRTZWFyY2hDdXJzb3IocXVlcnksIHN0YXJ0LCBjYXNlRm9sZCkg4oaSIGN1cnNvcjwvY29kZT48L2R0PgogICAgICA8ZGQ+VXNlZCB0byBpbXBsZW1lbnQgc2VhcmNoL3JlcGxhY2UKICAgICAgZnVuY3Rpb25hbGl0eS4gPGNvZGU+cXVlcnk8L2NvZGU+IGNhbiBiZSBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvcgogICAgICBhIHN0cmluZyAob25seSBzdHJpbmdzIHdpbGwgbWF0Y2ggYWNyb3NzIGxpbmVz4oCUaWYgdGhleSBjb250YWluCiAgICAgIG5ld2xpbmVzKS4gPGNvZGU+c3RhcnQ8L2NvZGU+IHByb3ZpZGVzIHRoZSBzdGFydGluZyBwb3NpdGlvbiBvZgogICAgICB0aGUgc2VhcmNoLiBJdCBjYW4gYmUgYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QsIG9yIGNhbgogICAgICBiZSBsZWZ0IG9mZiB0byBkZWZhdWx0IHRvIHRoZSBzdGFydCBvZiB0aGUKICAgICAgZG9jdW1lbnQuIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBpcyBvbmx5IHJlbGV2YW50IHdoZW4gbWF0Y2hpbmcgYQogICAgICBzdHJpbmcuIEl0IHdpbGwgY2F1c2UgdGhlIHNlYXJjaCB0byBiZSBjYXNlLWluc2Vuc2l0aXZlLiBBCiAgICAgIHNlYXJjaCBjdXJzb3IgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKICAgICAgICA8ZGw+CiAgICAgICAgICA8ZHQ+PGNvZGU+ZmluZE5leHQoKSwgZmluZFByZXZpb3VzKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgICAgIDxkZD5TZWFyY2ggZm9yd2FyZCBvciBiYWNrd2FyZCBmcm9tIHRoZSBjdXJyZW50IHBvc2l0aW9uLgogICAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIG1hdGNoIHdhcyBmb3VuZC4gSWYKICAgICAgICAgIG1hdGNoaW5nIGEgcmVndWxhciBleHByZXNzaW9uLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgdGhlCiAgICAgICAgICBhcnJheSByZXR1cm5lZCBieSB0aGUgPGNvZGU+bWF0Y2g8L2NvZGU+IG1ldGhvZCwgaW4gY2FzZSB5b3UKICAgICAgICAgIHdhbnQgdG8gZXh0cmFjdCBtYXRjaGVkIGdyb3Vwcy48L2RkPgogICAgICAgICAgPGR0Pjxjb2RlPmZyb20oKSwgdG8oKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgICAgICA8ZGQ+VGhlc2UgYXJlIG9ubHkgdmFsaWQgd2hlbiB0aGUgbGFzdCBjYWxsCiAgICAgICAgICB0byA8Y29kZT5maW5kTmV4dDwvY29kZT4gb3IgPGNvZGU+ZmluZFByZXZpb3VzPC9jb2RlPiBkaWQKICAgICAgICAgIG5vdCByZXR1cm4gZmFsc2UuIFRoZXkgd2lsbCByZXR1cm4gPGNvZGU+e2xpbmUsIGNofTwvY29kZT4KICAgICAgICAgIG9iamVjdHMgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGhlIG1hdGNoLjwvZGQ+CiAgICAgICAgPC9kbD48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRUb2tlbkF0Ij48Y29kZT5nZXRUb2tlbkF0KHBvcykg4oaSIG9iamVjdDwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0cmlldmVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0b2tlbiB0aGUgY3VycmVudCBtb2RlIGZvdW5kCiAgICAgIGF0IHRoZSBnaXZlbiBwb3NpdGlvbiAoYSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3QpLiBUaGUKICAgICAgcmV0dXJuZWQgb2JqZWN0IGhhcyB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6CiAgICAgIDxkbD4KICAgICAgICA8ZHQ+PGNvZGU+c3RhcnQ8L2NvZGU+PC9kdD48ZGQ+VGhlIGNoYXJhY3RlciAob24gdGhlIGdpdmVuIGxpbmUpIGF0IHdoaWNoIHRoZSB0b2tlbiBzdGFydHMuPC9kZD4KICAgICAgICA8ZHQ+PGNvZGU+ZW5kPC9jb2RlPjwvZHQ+PGRkPlRoZSBjaGFyYWN0ZXIgYXQgd2hpY2ggdGhlIHRva2VuIGVuZHMuPC9kZD4KICAgICAgICA8ZHQ+PGNvZGU+c3RyaW5nPC9jb2RlPjwvZHQ+PGRkPlRoZSB0b2tlbidzIHN0cmluZy48L2RkPgogICAgICAgIDxkdD48Y29kZT5jbGFzc05hbWU8L2NvZGU+PC9kdD48ZGQ+VGhlIGNsYXNzIHRoZSBtb2RlIGFzc2lnbmVkCiAgICAgICAgdG8gdGhlIHRva2VuLiAoQ2FuIGJlIG51bGwgd2hlbiBubyBjbGFzcyB3YXMgYXNzaWduZWQuKTwvZGQ+CiAgICAgIDwvZGw+PC9kZD4KCiAgICAgIDxkdCBpZD0ibWFya1RleHQiPjxjb2RlPm1hcmtUZXh0KGZyb20sIHRvLCBjbGFzc05hbWUpIOKGkiBmdW5jdGlvbjwvY29kZT48L2R0PgogICAgICA8ZGQ+Q2FuIGJlIHVzZWQgdG8gbWFyayBhIHJhbmdlIG9mIHRleHQgd2l0aCBhIHNwZWNpZmljIENTUwogICAgICBjbGFzcyBuYW1lLiA8Y29kZT5mcm9tPC9jb2RlPiBhbmQgPGNvZGU+dG88L2NvZGU+IHNob3VsZAogICAgICBiZSA8Y29kZT57bGluZSwgY2h9PC9jb2RlPiBvYmplY3RzLiBUaGUgbWV0aG9kIHdpbGwgcmV0dXJuIGEKICAgICAgZnVuY3Rpb24gdGhhdCBjYW4gYmUgY2FsbGVkIHRvIHJlbW92ZSB0aGUgbWFya2luZy48L2RkPgoKICAgICAgPGR0IGlkPSJzZXRNYXJrZXIiPjxjb2RlPnNldE1hcmtlcihsaW5lLCB0ZXh0LCBjbGFzc05hbWUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BZGQgYSBndXR0ZXIgbWFya2VyIGZvciB0aGUgZ2l2ZW4gbGluZS4gR3V0dGVyIG1hcmtlcnMgYXJlCiAgICAgIHNob3duIGluIHRoZSBsaW5lLW51bWJlciBhcmVhIChpbnN0ZWFkIG9mIHRoZSBudW1iZXIgZm9yIHRoaXMKICAgICAgbGluZSkuIEJvdGggPGNvZGU+dGV4dDwvY29kZT4gYW5kIDxjb2RlPmNsYXNzTmFtZTwvY29kZT4gYXJlCiAgICAgIG9wdGlvbmFsLiBTZXR0aW5nIDxjb2RlPnRleHQ8L2NvZGU+IHRvIGEgVW5pY29kZSBjaGFyYWN0ZXIgbGlrZQogICAgICDil48gdGVuZHMgdG8gZ2l2ZSBhIG5pY2UgZWZmZWN0LiBUbyBwdXQgYSBwaWN0dXJlIGluIHRoZSBndXR0ZXIsCiAgICAgIHNldCA8Y29kZT50ZXh0PC9jb2RlPiB0byBhIHNwYWNlIGFuZCA8Y29kZT5jbGFzc05hbWU8L2NvZGU+IHRvCiAgICAgIHNvbWV0aGluZyB0aGF0IHNldHMgYSBiYWNrZ3JvdW5kIGltYWdlLiBJZiB5b3UKICAgICAgc3BlY2lmeSA8Y29kZT50ZXh0PC9jb2RlPiwgdGhlIGdpdmVuIHRleHQgKHdoaWNoIG1heSBjb250YWluCiAgICAgIEhUTUwpIHdpbGwsIGJ5IGRlZmF1bHQsIHJlcGxhY2UgdGhlIGxpbmUgbnVtYmVyIGZvciB0aGF0IGxpbmUuCiAgICAgIElmIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsIHlvdSBjYW4gaW5jbHVkZSB0aGUKICAgICAgc3RyaW5nIDxjb2RlPiVOJTwvY29kZT4gaW4gdGhlIHRleHQsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgYnkKICAgICAgdGhlIGxpbmUgbnVtYmVyLjwvZGQ+CiAgICAgIDxkdCBpZD0iY2xlYXJNYXJrZXIiPjxjb2RlPmNsZWFyTWFya2VyKGxpbmUpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5DbGVhcnMgYSBtYXJrZXIgY3JlYXRlZAogICAgICB3aXRoIDxjb2RlPnNldE1hcmtlcjwvY29kZT4uIDxjb2RlPmxpbmU8L2NvZGU+IGNhbiBiZSBlaXRoZXIgYQogICAgICBudW1iZXIgb3IgYSBoYW5kbGUgcmV0dXJuZWQgYnkgPGNvZGU+c2V0TWFya2VyPC9jb2RlPiAoc2luY2UgYQogICAgICBudW1iZXIgbWF5IG5vdyByZWZlciB0byBhIGRpZmZlcmVudCBsaW5lIGlmIHNvbWV0aGluZyB3YXMgYWRkZWQKICAgICAgb3IgZGVsZXRlZCkuPC9kZD4KICAgICAgPGR0IGlkPSJzZXRMaW5lQ2xhc3MiPjxjb2RlPnNldExpbmVDbGFzcyhsaW5lLCBjbGFzc05hbWUpIOKGkiBsaW5lSGFuZGxlPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5TZXQgYSBDU1MgY2xhc3MgbmFtZSBmb3IgdGhlIGdpdmVuIGxpbmUuIDxjb2RlPmxpbmU8L2NvZGU+CiAgICAgIGNhbiBiZSBhIG51bWJlciBvciBhIGxpbmUgaGFuZGxlIChhcyByZXR1cm5lZAogICAgICBieSA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+IG9yIHRoaXMgZnVuY3Rpb24pLgogICAgICBQYXNzIDxjb2RlPm51bGw8L2NvZGU+IHRvIGNsZWFyIHRoZSBjbGFzcyBmb3IgYSBsaW5lLjwvZGQ+CgogICAgICA8ZHQgaWQ9ImxpbmVJbmZvIj48Y29kZT5saW5lSW5mbyhsaW5lKSDihpIgb2JqZWN0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBsaW5lIG51bWJlciwgdGV4dCBjb250ZW50LCBhbmQgbWFya2VyIHN0YXR1cyBvZgogICAgICB0aGUgZ2l2ZW4gbGluZSwgd2hpY2ggY2FuIGJlIGVpdGhlciBhIG51bWJlciBvciBhIGhhbmRsZQogICAgICByZXR1cm5lZCBieSA8Y29kZT5zZXRNYXJrZXI8L2NvZGU+LiBUaGUgcmV0dXJuZWQgb2JqZWN0IGhhcyB0aGUKICAgICAgc3RydWN0dXJlIDxjb2RlPntsaW5lLCB0ZXh0LCBtYXJrZXJUZXh0LCBtYXJrZXJDbGFzc308L2NvZGU+LjwvZGQ+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+CiAgICA8L2RsPgoKICAgIDxwPlRoZSBmb2xsb3dpbmcgYXJlIG1vcmUgbG93LWxldmVsIG1ldGhvZHM6PC9wPgoKICAgIDxkbD4KICAgICAgPGR0IGlkPSJvcGVyYXRpb24iPjxjb2RlPm9wZXJhdGlvbihmdW5jKSDihpIgcmVzdWx0PC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Db2RlTWlycm9yIGludGVybmFsbHkgYnVmZmVycyBjaGFuZ2VzIGFuZCBvbmx5IHVwZGF0ZXMgaXRzCiAgICAgIERPTSBzdHJ1Y3R1cmUgYWZ0ZXIgaXQgaGFzIGZpbmlzaGVkIHBlcmZvcm1pbmcgc29tZSBvcGVyYXRpb24uCiAgICAgIElmIHlvdSBuZWVkIHRvIHBlcmZvcm0gYSBsb3Qgb2Ygb3BlcmF0aW9ucyBvbiBhIENvZGVNaXJyb3IKICAgICAgaW5zdGFuY2UsIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCB3aXRoIGEgZnVuY3Rpb24gYXJndW1lbnQuIEl0CiAgICAgIHdpbGwgY2FsbCB0aGUgZnVuY3Rpb24sIGJ1ZmZlcmluZyB1cCBhbGwgY2hhbmdlcywgYW5kIG9ubHkgZG9pbmcKICAgICAgdGhlIGV4cGVuc2l2ZSB1cGRhdGUgYWZ0ZXIgdGhlIGZ1bmN0aW9uIHJldHVybnMuIFRoaXMgY2FuIGJlIGEKICAgICAgbG90IGZhc3Rlci4gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoaXMgbWV0aG9kIHdpbGwgYmUgdGhlIHJldHVybgogICAgICB2YWx1ZSBvZiB5b3VyIGZ1bmN0aW9uLjwvZGQ+CgogICAgICA8ZHQgaWQ9InJlZnJlc2giPjxjb2RlPnJlZnJlc2goKTwvY29kZT48L2R0PgogICAgICA8ZGQ+SWYgeW91ciBjb2RlIGRvZXMgc29tZXRoaW5nIHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZWRpdG9yCiAgICAgIGVsZW1lbnQgKHdpbmRvdyByZXNpemVzIGFyZSBhbHJlYWR5IGxpc3RlbmVkIGZvciksIG9yIHVuaGlkZXMKICAgICAgaXQsIHlvdSBzaG91bGQgcHJvYmFibHkgZm9sbG93IHVwIGJ5IGNhbGxpbmcgdGhpcyBtZXRob2QgdG8KICAgICAgZW5zdXJlIENvZGVNaXJyb3IgaXMgc3RpbGwgbG9va2luZyBhcyBpbnRlbmRlZC48L2RkPgoKICAgICAgPGR0IGlkPSJnZXRJbnB1dEZpZWxkIj48Y29kZT5nZXRJbnB1dEZpZWxkKCkg4oaSIHRleHRhcmVhPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBoaWRlbiB0ZXh0YXJlYSB1c2VkIHRvIHJlYWQgaW5wdXQuPC9kZD4KICAgICAgPGR0IGlkPSJnZXRXcmFwcGVyRWxlbWVudCI+PGNvZGU+Z2V0V3JhcHBlckVsZW1lbnQoKSDihpIgbm9kZTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmV0dXJucyB0aGUgRE9NIG5vZGUgdGhhdCByZXByZXNlbnRzIHRoZSBlZGl0b3IuIFJlbW92ZSB0aGlzCiAgICAgIGZyb20geW91ciB0cmVlIHRvIGRlbGV0ZSBhbiBlZGl0b3IgaW5zdGFuY2UuPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImZyb21UZXh0QXJlYSI+RmluYWxseSwgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IG9iamVjdAogICAgaXRzZWxmIGhhcyBhIG1ldGhvZCA8Y29kZT5mcm9tVGV4dEFyZWE8L2NvZGU+LiBUaGlzIHRha2VzIGEKICAgIHRleHRhcmVhIERPTSBub2RlIGFzIGZpcnN0IGFyZ3VtZW50IGFuZCBhbiBvcHRpb25hbCBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgc2Vjb25kLiBJdCB3aWxsIHJlcGxhY2UgdGhlIHRleHRhcmVhIHdpdGggYSBDb2RlTWlycm9yCiAgICBpbnN0YW5jZSwgYW5kIHdpcmUgdXAgdGhlIGZvcm0gb2YgdGhhdCB0ZXh0YXJlYSAoaWYgYW55KSB0byBtYWtlCiAgICBzdXJlIHRoZSBlZGl0b3IgY29udGVudHMgYXJlIHB1dCBpbnRvIHRoZSB0ZXh0YXJlYSB3aGVuIHRoZSBmb3JtCiAgICBpcyBzdWJtaXR0ZWQuIEEgQ29kZU1pcnJvciBpbnN0YW5jZSBjcmVhdGVkIHRoaXMgd2F5IGhhcyB0d28KICAgIGFkZGl0aW9uYWwgbWV0aG9kczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQgaWQ9InNhdmUiPjxjb2RlPnNhdmUoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+Q29weSB0aGUgY29udGVudCBvZiB0aGUgZWRpdG9yIGludG8gdGhlIHRleHRhcmVhLjwvZGQ+CgogICAgICA8ZHQgaWQ9InRvVGV4dEFyZWEiPjxjb2RlPnRvVGV4dEFyZWEoKTwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVtb3ZlIHRoZSBlZGl0b3IsIGFuZCByZXN0b3JlIHRoZSBvcmlnaW5hbCB0ZXh0YXJlYSAod2l0aAogICAgICB0aGUgZWRpdG9yJ3MgY3VycmVudCBjb250ZW50KS48L2RkPgogICAgPC9kbD4KCiAgICA8aDIgaWQ9Im1vZGVhcGkiPldyaXRpbmcgQ29kZU1pcnJvciBNb2RlczwvaDI+CgogICAgPHA+TW9kZXMgdHlwaWNhbGx5IGNvbnNpc3Qgb2YgYSBKYXZhU2NyaXB0IGZpbGUgYW5kIGEgQ1NTIGZpbGUuCiAgICBUaGUgQ1NTIGZpbGUgKHNlZSwgZm9yCiAgICBleGFtcGxlIDxhIGhyZWY9Im1vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmNzcyI+PGNvZGU+amF2YXNjcmlwdC5jc3M8L2NvZGU+PC9hPikKICAgIGRlZmluZXMgdGhlIGNsYXNzZXMgdGhhdCB3aWxsIGJlIHVzZWQgdG8gc3R5bGUgdGhlIHN5bnRhY3RpYwogICAgZWxlbWVudHMgb2YgdGhlIGNvZGUsIGFuZCB0aGUgc2NyaXB0IGNvbnRhaW5zIHRoZSBsb2dpYyB0bwogICAgYWN0dWFsbHkgYXNzaWduIHRoZXNlIGNsYXNzZXMgdG8gdGhlIHJpZ2h0IHBpZWNlcyBvZiB0ZXh0LjwvcD4KCiAgICA8cD5Zb3UnbGwgdXN1YWxseSB3YW50IHRvIHVzZSBzb21lIGtpbmQgb2YgcHJlZml4IGZvciB5b3VyIENTUwogICAgY2xhc3Nlcywgc28gdGhhdCB0aGV5IGFyZSB1bmxpa2VseSB0byBjbGFzaCB3aXRoIG90aGVyIGNsYXNzZXMsCiAgICBib3RoIHRob3NlIHVzZWQgYnkgb3RoZXIgbW9kZXMgYW5kIHRob3NlIGRlZmluZWQgYnkgdGhlIHBhZ2UgaW4KICAgIHdoaWNoIENvZGVNaXJyb3IgaXMgZW1iZWRkZWQuPC9wPgoKICAgIDxwIGlkPSJkZWZpbmVNb2RlIj5UaGUgbW9kZSBzY3JpcHQgc2hvdWxkCiAgICBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lTW9kZTwvY29kZT4gdG8gcmVnaXN0ZXIgaXRzZWxmIHdpdGgKICAgIENvZGVNaXJyb3IuIFRoaXMgZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cy4gVGhlIGZpcnN0IHNob3VsZCBiZQogICAgdGhlIG5hbWUgb2YgdGhlIG1vZGUsIGZvciB3aGljaCB5b3Ugc2hvdWxkIHVzZSBhIGxvd2VyY2FzZSBzdHJpbmcsCiAgICBwcmVmZXJhYmx5IG9uZSB0aGF0IGlzIGFsc28gdGhlIG5hbWUgb2YgdGhlIGZpbGVzIHRoYXQgZGVmaW5lIHRoZQogICAgbW9kZSAoaS5lLiA8Y29kZT4ieG1sIjwvY29kZT4gaXMgZGVmaW5lZCA8Y29kZT54bWwuanM8L2NvZGU+KS4gVGhlCiAgICBzZWNvbmQgYXJndW1lbnQgc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdCwgZ2l2ZW4gYSBDb2RlTWlycm9yCiAgICBjb25maWd1cmF0aW9uIG9iamVjdCAodGhlIHRoaW5nIHBhc3NlZCB0bwogICAgdGhlIDxjb2RlPkNvZGVNaXJyb3I8L2NvZGU+IGZ1bmN0aW9uKSBhbmQgYSBtb2RlIGNvbmZpZ3VyYXRpb24KICAgIG9iamVjdCAoYXMgaW4gdGhlIDxhIGhyZWY9IiNvcHRpb25fbW9kZSI+PGNvZGU+bW9kZTwvY29kZT48L2E+CiAgICBvcHRpb24pLCByZXR1cm5zIGEgbW9kZSBvYmplY3QuPC9wPgoKICAgIDxwPlR5cGljYWxseSwgeW91IHNob3VsZCB1c2UgdGhpcyBzZWNvbmQgYXJndW1lbnQKICAgIHRvIDxjb2RlPmRlZmluZU1vZGU8L2NvZGU+IGFzIHlvdXIgbW9kdWxlIHNjb3BlIGZ1bmN0aW9uIChtb2RlcwogICAgc2hvdWxkIG5vdCBsZWFrIGFueXRoaW5nIGludG8gdGhlIGdsb2JhbCBzY29wZSEpLCBpLmUuIHdyaXRlIHlvdXIKICAgIHdob2xlIG1vZGUgaW5zaWRlIHRoaXMgZnVuY3Rpb24uPC9wPgoKICAgIDxwPlRoZSBtYWluIHJlc3BvbnNpYmlsaXR5IG9mIGEgbW9kZSBzY3JpcHQgaXMgPGVtPnBhcnNpbmc8L2VtPgogICAgdGhlIGNvbnRlbnQgb2YgdGhlIGVkaXRvci4gRGVwZW5kaW5nIG9uIHRoZSBsYW5ndWFnZSBhbmQgdGhlCiAgICBhbW91bnQgb2YgZnVuY3Rpb25hbGl0eSBkZXNpcmVkLCB0aGlzIGNhbiBiZSBkb25lIGluIHJlYWxseSBlYXN5CiAgICBvciBleHRyZW1lbHkgY29tcGxpY2F0ZWQgd2F5cy4gU29tZSBwYXJzZXJzIGNhbiBiZSBzdGF0ZWxlc3MsCiAgICBtZWFuaW5nIHRoYXQgdGhleSBsb29rIGF0IG9uZSBlbGVtZW50ICg8ZW0+dG9rZW48L2VtPikgb2YgdGhlIGNvZGUKICAgIGF0IGEgdGltZSwgd2l0aCBubyBtZW1vcnkgb2Ygd2hhdCBjYW1lIGJlZm9yZS4gTW9zdCwgaG93ZXZlciwgd2lsbAogICAgbmVlZCB0byByZW1lbWJlciBzb21ldGhpbmcuIFRoaXMgaXMgZG9uZSBieSB1c2luZyBhIDxlbT5zdGF0ZQogICAgb2JqZWN0PC9lbT4sIHdoaWNoIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSBtdXRhdGVkIGV2ZXJ5IHRpbWUgYQogICAgbmV3IHRva2VuIGlzIHJlYWQuPC9wPgoKICAgIDxwIGlkPSJzdGFydFN0YXRlIj5Nb2RlcyB0aGF0IHVzZSBhIHN0YXRlIG11c3QgZGVmaW5lCiAgICBhIDxjb2RlPnN0YXJ0U3RhdGU8L2NvZGU+IG1ldGhvZCBvbiB0aGVpciBtb2RlIG9iamVjdC4gVGhpcyBpcyBhCiAgICBmdW5jdGlvbiBvZiBubyBhcmd1bWVudHMgdGhhdCBwcm9kdWNlcyBhIHN0YXRlIG9iamVjdCB0byBiZSB1c2VkCiAgICBhdCB0aGUgc3RhcnQgb2YgYSBkb2N1bWVudC48L3A+CgogICAgPHAgaWQ9InRva2VuIj5UaGUgbW9zdCBpbXBvcnRhbnQgcGFydCBvZiBhIG1vZGUgb2JqZWN0IGlzCiAgICBpdHMgPGNvZGU+dG9rZW4oc3RyZWFtLCBzdGF0ZSk8L2NvZGU+IG1ldGhvZC4gQWxsIG1vZGVzIG11c3QKICAgIGRlZmluZSB0aGlzIG1ldGhvZC4gSXQgc2hvdWxkIHJlYWQgb25lIHRva2VuIGZyb20gdGhlIHN0cmVhbSBpdCBpcwogICAgZ2l2ZW4gYXMgYW4gYXJndW1lbnQsIG9wdGlvbmFsbHkgdXBkYXRlIGl0cyBzdGF0ZSwgYW5kIHJldHVybiBhCiAgICBDU1MgY2xhc3Mgc3RyaW5nLCBvciA8Y29kZT5udWxsPC9jb2RlPiBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUKICAgIHRvIGJlIHN0eWxlZC48cD4KCiAgICA8cCBpZD0iYmxhbmtMaW5lIj5CeSBkZWZhdWx0LCBibGFuayBsaW5lcyBhcmUgc2ltcGx5IHNraXBwZWQgd2hlbgogICAgdG9rZW5pemluZyBhIGRvY3VtZW50LiBGb3IgbGFuZ3VhZ2VzIHRoYXQgaGF2ZSBzaWduaWZpY2FudCBibGFuawogICAgbGluZXMsIHlvdSBjYW4gZGVmaW5lIGEgPGNvZGU+YmxhbmtMaW5lKHN0YXRlKTwvY29kZT4gbWV0aG9kIG9uCiAgICB5b3VyIG1vZGUgdGhhdCB3aWxsIGdldCBjYWxsZWQgd2hlbmV2ZXIgYSBibGFuayBsaW5lIGlzIHBhc3NlZAogICAgb3Zlciwgc28gdGhhdCBpdCBjYW4gdXBkYXRlIHRoZSBwYXJzZXIgc3RhdGUuPC9wPgoKICAgIDxwIGlkPSJTdHJpbmdTdHJlYW0iPlRoZSBzdHJlYW0gb2JqZWN0IGVuY2Fwc3VsYXRlcyBhIGxpbmUgb2YgY29kZQogICAgKHRva2VucyBtYXkgbmV2ZXIgc3BhbiBsaW5lcykgYW5kIG91ciBjdXJyZW50IHBvc2l0aW9uIGluIHRoYXQKICAgIGxpbmUuIEl0IGhhcyB0aGUgZm9sbG93aW5nIEFQSTo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+ZW9sKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+c29sKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdHJ1ZSBvbmx5IGlmIHRoZSBzdHJlYW0gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZQogICAgICBsaW5lLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+cGVlaygpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcKICAgICAgaXQuIFdpbGwgcmV0dXJuIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4gYXQgdGhlIGVuZCBvZiB0aGUKICAgICAgbGluZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+bmV4dCgpIOKGkiBjaGFyYWN0ZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlJldHVybnMgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gYW5kIGFkdmFuY2VzIGl0LgogICAgICBBbHNvIHJldHVybnMgPGNvZGU+dW5kZWZpbmVkPC9jb2RlPiB3aGVuIG5vIG1vcmUgY2hhcmFjdGVycyBhcmUKICAgICAgYXZhaWxhYmxlLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+ZWF0KG1hdGNoKSDihpIgY2hhcmFjdGVyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD48Y29kZT5tYXRjaDwvY29kZT4gY2FuIGJlIGEgY2hhcmFjdGVyLCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiwKICAgICAgb3IgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2hhcmFjdGVyIGFuZCByZXR1cm5zIGEgYm9vbGVhbi4gSWYKICAgICAgdGhlIG5leHQgY2hhcmFjdGVyIGluIHRoZSBzdHJlYW0gJ21hdGNoZXMnIHRoZSBnaXZlbiBhcmd1bWVudCwKICAgICAgaXQgaXMgY29uc3VtZWQgYW5kIHJldHVybmVkLiBPdGhlcndpc2UsIDxjb2RlPnVuZGVmaW5lZDwvY29kZT4KICAgICAgaXMgcmV0dXJuZWQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmVhdFdoaWxlKG1hdGNoKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+UmVwZWF0ZWRseSBjYWxscyA8Y29kZT5lYXQ8L2NvZGU+IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50LAogICAgICB1bnRpbCBpdCBmYWlscy4gUmV0dXJucyB0cnVlIGlmIGFueSBjaGFyYWN0ZXJzIHdlcmUgZWF0ZW4uPC9kZD4KICAgICAgPGR0Pjxjb2RlPmVhdFNwYWNlKCkg4oaSIGJvb2xlYW48L2NvZGU+PC9kdD4KICAgICAgPGRkPlNob3J0Y3V0IGZvciA8Y29kZT5lYXRXaGlsZTwvY29kZT4gd2hlbiBtYXRjaGluZwogICAgICB3aGl0ZS1zcGFjZS48L2RkPgogICAgICA8ZHQ+PGNvZGU+c2tpcFRvRW5kKCk8L2NvZGU+PC9kdD4KICAgICAgPGRkPk1vdmVzIHRoZSBwb3NpdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLjwvZGQ+CiAgICAgIDxkdD48Y29kZT5za2lwVG8oY2gpIOKGkiBib29sZWFuPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5Ta2lwcyB0byB0aGUgbmV4dCBvY2N1cnJlbmNlIG9mIHRoZSBnaXZlbiBjaGFyYWN0ZXIsIGlmCiAgICAgIGZvdW5kLiBSZXR1cm5zIHRydWUgaWYgdGhlIGNoYXJhY3RlciB3YXMgZm91bmQuPC9kZD4KICAgICAgPGR0Pjxjb2RlPm1hdGNoKHBhdHRlcm4sIGNvbnN1bWUsIGNhc2VGb2xkKSDihpIgYm9vbGVhbjwvY29kZT48L2R0PgogICAgICA8ZGQ+QWN0IGxpa2UgYQogICAgICBtdWx0aS1jaGFyYWN0ZXIgPGNvZGU+ZWF0PC9jb2RlPuKAlGlmIDxjb2RlPmNvbnN1bWU8L2NvZGU+IGlzIHRydWUKICAgICAgb3Igbm90IGdpdmVu4oCUb3IgYSBsb29rLWFoZWFkIHRoYXQgZG9lc24ndCB1cGRhdGUgdGhlIHN0cmVhbQogICAgICBwb3NpdGlvbuKAlGlmIGl0IGlzIGZhbHNlLiA8Y29kZT5wYXR0ZXJuPC9jb2RlPiBjYW4gYmUgZWl0aGVyIGEKICAgICAgc3RyaW5nIG9yIGEgcmVndWxhciBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggPGNvZGU+XjwvY29kZT4uCiAgICAgIFdoZW4gaXQgaXMgYSBzdHJpbmcsIDxjb2RlPmNhc2VGb2xkPC9jb2RlPiBjYW4gYmUgc2V0IHRvIHRydWUgdG8KICAgICAgbWFrZSB0aGUgbWF0Y2ggY2FzZS1pbnNlbnNpdGl2ZS4gV2hlbiBzdWNjZXNzZnVsbHkgbWF0Y2hpbmcgYQogICAgICByZWd1bGFyIGV4cHJlc3Npb24sIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGJlIHRoZSBhcnJheQogICAgICByZXR1cm5lZCBieSA8Y29kZT5tYXRjaDwvY29kZT4sIGluIGNhc2UgeW91IG5lZWQgdG8gZXh0cmFjdAogICAgICBtYXRjaGVkIGdyb3Vwcy48L2RkPgoKICAgICAgPGR0Pjxjb2RlPmJhY2tVcChuKTwvY29kZT48L2R0PgogICAgICA8ZGQ+QmFja3MgdXAgdGhlIHN0cmVhbSA8Y29kZT5uPC9jb2RlPiBjaGFyYWN0ZXJzLiBCYWNraW5nIGl0IHVwCiAgICAgIGZ1cnRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgdG9rZW4gd2lsbCBjYXVzZSB0aGluZ3MgdG8KICAgICAgYnJlYWssIHNvIGJlIGNhcmVmdWwuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmNvbHVtbigpIOKGkiBpbnRlZ2VyPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5SZXR1cm5zIHRoZSBjb2x1bW4gKHRha2luZyBpbnRvIGFjY291bnQgdGFicykgYXQgd2hpY2ggdGhlCiAgICAgIGN1cnJlbnQgdG9rZW4gc3RhcnRzLiBDYW4gYmUgdXNlZCB0byBmaW5kIG91dCB3aGV0aGVyIGEgdG9rZW4KICAgICAgc3RhcnRzIGEgbmV3IGxpbmUuPC9kZD4KICAgICAgPGR0Pjxjb2RlPmluZGVudGF0aW9uKCkg4oaSIGludGVnZXI8L2NvZGU+PC9kdD4KICAgICAgPGRkPlRlbGxzIHlvdSBob3cgZmFyIHRoZSBjdXJyZW50IGxpbmUgaGFzIGJlZW4gaW5kZW50ZWQsIGluCiAgICAgIHNwYWNlcy4gQ29ycmVjdHMgZm9yIHRhYiBjaGFyYWN0ZXJzLjwvZGQ+CgogICAgICA8ZHQ+PGNvZGU+Y3VycmVudCgpIOKGkiBzdHJpbmc8L2NvZGU+PC9kdD4KICAgICAgPGRkPkdldCB0aGUgc3RyaW5nIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IHRva2VuIGFuZAogICAgICB0aGUgY3VycmVudCBzdHJlYW0gcG9zaXRpb24uPC9kZD4KICAgIDwvZGw+CgogICAgPHAgaWQ9ImNvcHlTdGF0ZSI+QmVjYXVzZSBzdGF0ZSBvYmplY3QgYXJlIG11dGF0ZWQsIGFuZCBDb2RlTWlycm9yCiAgICBuZWVkcyB0byBrZWVwIHZhbGlkIHZlcnNpb25zIG9mIGEgc3RhdGUgYXJvdW5kIHNvIHRoYXQgaXQgY2FuCiAgICByZXN0YXJ0IGEgcGFyc2UgYXQgYW55IGxpbmUsIGNvcGllcyBtdXN0IGJlIG1hZGUgb2Ygc3RhdGUgb2JqZWN0cy4KICAgIFRoZSBkZWZhdWx0IGFsZ29yaXRobSB1c2VkIGlzIHRoYXQgYSBuZXcgc3RhdGUgb2JqZWN0IGlzIGNyZWF0ZWQsCiAgICB3aGljaCBnZXRzIGFsbCB0aGUgcHJvcGVydGllcyBvZiB0aGUgb2xkIG9iamVjdC4gQW55IHByb3BlcnRpZXMKICAgIHdoaWNoIGhvbGQgYXJyYXlzIGdldCBhIGNvcHkgb2YgdGhlc2UgYXJyYXlzIChzaW5jZSBhcnJheXMgdGVuZCB0bwogICAgYmUgdXNlZCBhcyBtdXRhYmxlIHN0YWNrcykuIFdoZW4gdGhpcyBpcyBub3QgY29ycmVjdCwgZm9yIGV4YW1wbGUKICAgIGJlY2F1c2UgYSBtb2RlIG11dGF0ZXMgbm9uLWFycmF5IHByb3BlcnRpZXMgb2YgaXRzIHN0YXRlIG9iamVjdCwgYQogICAgbW9kZSBvYmplY3Qgc2hvdWxkIGRlZmluZSBhIDxjb2RlPmNvcHlTdGF0ZTwvY29kZT4gbWV0aG9kLAogICAgd2hpY2ggaXMgZ2l2ZW4gYSBzdGF0ZSBhbmQgc2hvdWxkIHJldHVybiBhIHNhZmUgY29weSBvZiB0aGF0CiAgICBzdGF0ZS48L3A+CgogICAgPHAgaWQ9ImluZGVudCI+SWYgeW91IHdhbnQgeW91ciBtb2RlIHRvIHByb3ZpZGUgc21hcnQgaW5kZW50YXRpb24KICAgIChzZWUgPGEgaHJlZj0iI29wdGlvbl9lbnRlck1vZGUiPjxjb2RlPmVudGVybW9kZTwvY29kZT48L2E+CiAgICBhbmQgPGEgaHJlZj0iI29wdGlvbl90YWJNb2RlIj48Y29kZT50YWJNb2RlPC9jb2RlPjwvYT4gd2hlbiB0aGV5CiAgICBoYXZlIGEgdmFsdWUgb2YgPGNvZGU+ImluZGVudCI8L2NvZGU+KSwgeW91IG11c3QgZGVmaW5lCiAgICBhbiA8Y29kZT5pbmRlbnQoc3RhdGUsIHRleHRBZnRlcik8L2NvZGU+IG1ldGhvZCBvbiB5b3VyIG1vZGUKICAgIG9iamVjdC48L3A+CgogICAgPHA+VGhlIGluZGVudGF0aW9uIG1ldGhvZCBzaG91bGQgaW5zcGVjdCB0aGUgZ2l2ZW4gc3RhdGUgb2JqZWN0LAogICAgYW5kIG9wdGlvbmFsbHkgdGhlIDxjb2RlPnRleHRBZnRlcjwvY29kZT4gc3RyaW5nLCB3aGljaCBjb250YWlucwogICAgdGhlIHRleHQgb24gdGhlIGxpbmUgdGhhdCBpcyBiZWluZyBpbmRlbnRlZCwgYW5kIHJldHVybiBhbgogICAgaW50ZWdlciwgdGhlIGFtb3VudCBvZiBzcGFjZXMgdG8gaW5kZW50LiBJdCBzaG91bGQgdXN1YWxseSB0YWtlCiAgICB0aGUgPGEgaHJlZj0iI29wdGlvbl9pbmRlbnRVbml0Ij48Y29kZT5pbmRlbnRVbml0PC9jb2RlPjwvYT4KICAgIG9wdGlvbiBpbnRvIGFjY291bnQuPC9wPgoKICAgIDxwIGlkPSJlbGVjdHJpY0NoYXJzIj5GaW5hbGx5LCBhIG1vZGUgbWF5IGRlZmluZQogICAgYW4gPGNvZGU+ZWxlY3RyaWNDaGFyczwvY29kZT4gcHJvcGVydHksIHdoaWNoIHNob3VsZCBob2xkIGEgc3RyaW5nCiAgICBjb250YWluaW5nIGFsbCB0aGUgY2hhcmFjdGVycyB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBiZWhhdmlvdXIKICAgIGRlc2NyaWJlZCBmb3IKICAgIHRoZSA8YSBocmVmPSIjb3B0aW9uX2VsZWN0cmljQ2hhcnMiPjxjb2RlPmVsZWN0cmljQ2hhcnM8L2NvZGU+PC9hPgogICAgb3B0aW9uLjwvcD4KCiAgICA8cD5TbywgdG8gc3VtbWFyaXplLCBhIG1vZGUgPGVtPm11c3Q8L2VtPiBwcm92aWRlCiAgICBhIDxjb2RlPnRva2VuPC9jb2RlPiBtZXRob2QsIGFuZCBpdCA8ZW0+bWF5PC9lbT4KICAgIHByb3ZpZGUgPGNvZGU+c3RhcnRTdGF0ZTwvY29kZT4sIDxjb2RlPmNvcHlTdGF0ZTwvY29kZT4sCiAgICBhbmQgPGNvZGU+aW5kZW50PC9jb2RlPiBtZXRob2RzLiBGb3IgYW4gZXhhbXBsZSBvZiBhIHRyaXZpYWwgbW9kZSwKICAgIHNlZSB0aGUgPGEgaHJlZj0ibW9kZS9kaWZmL2RpZmYuanMiPmRpZmYgbW9kZTwvYT4sIGZvciBhIG1vcmUKICAgIGludm9sdmVkIGV4YW1wbGUsIHNlZQogICAgdGhlIDxhIGhyZWY9Im1vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj5KYXZhU2NyaXB0CiAgICBtb2RlPC9hPi48L3A+CgogICAgPHA+U29tZXRpbWVzLCBpdCBpcyB1c2VmdWwgZm9yIG1vZGVzIHRvIDxlbT5uZXN0PC9lbT7igJR0byBoYXZlIG9uZQogICAgbW9kZSBkZWxlZ2F0ZSB3b3JrIHRvIGFub3RoZXIgbW9kZS4gQW4gZXhhbXBsZSBvZiB0aGlzIGtpbmQgb2YKICAgIG1vZGUgaXMgdGhlIDxhIGhyZWY9Im1vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcyI+bWl4ZWQtbW9kZSBIVE1MCiAgICBtb2RlPC9hPi4gVG8gaW1wbGVtZW50IHN1Y2ggbmVzdGluZywgaXQgaXMgdXN1YWxseSBuZWNlc3NhcnkgdG8KICAgIGNyZWF0ZSBtb2RlIG9iamVjdHMgYW5kIGNvcHkgc3RhdGVzIHlvdXJzZWxmLiBUbyBjcmVhdGUgYSBtb2RlCiAgICBvYmplY3QsIHRoZXJlIGFyZSA8Y29kZT5Db2RlTWlycm9yLmdldE1vZGUob3B0aW9ucywKICAgIHBhcnNlckNvbmZpZyk8L2NvZGU+LCB3aGVyZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgYSBjb25maWd1cmF0aW9uCiAgICBvYmplY3QgYXMgcGFzc2VkIHRvIHRoZSBtb2RlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCBhbmQgdGhlIHNlY29uZAogICAgYXJndW1lbnQgaXMgYSBtb2RlIHNwZWNpZmljYXRpb24gYXMgaW4KICAgIHRoZSA8YSBocmVmPSIjb3B0aW9uX21vZGUiPjxjb2RlPm1vZGU8L2NvZGU+PC9hPiBvcHRpb24uIFRvIGNvcHkgYQogICAgc3RhdGUgb2JqZWN0LCBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuY29weVN0YXRlKG1vZGUsIHN0YXRlKTwvY29kZT4sCiAgICB3aGVyZSA8Y29kZT5tb2RlPC9jb2RlPiBpcyB0aGUgbW9kZSB0aGF0IGNyZWF0ZWQgdGhlIGdpdmVuCiAgICBzdGF0ZS48L3A+CgogICAgPHA+VG8gbWFrZSBpbmRlbnRhdGlvbiB3b3JrIHByb3Blcmx5IGluIGEgbmVzdGVkIHBhcnNlciwgaXQgaXMKICAgIGFkdmlzYWJsZSB0byBnaXZlIHRoZSA8Y29kZT5zdGFydFN0YXRlPC9jb2RlPiBtZXRob2Qgb2YgbW9kZXMgdGhhdAogICAgYXJlIGludGVuZGVkIHRvIGJlIG5lc3RlZCBhbiBvcHRpb25hbCBhcmd1bWVudCB0aGF0IHByb3ZpZGVzIHRoZQogICAgYmFzZSBpbmRlbnRhdGlvbiBmb3IgdGhlIGJsb2NrIG9mIGNvZGUuIFRoZSBKYXZhU2NyaXB0IGFuZCBDU1MKICAgIHBhcnNlciBkbyB0aGlzLCBmb3IgZXhhbXBsZSwgdG8gYWxsb3cgSmF2YVNjcmlwdCBhbmQgQ1NTIGNvZGUKICAgIGluc2lkZSB0aGUgbWl4ZWQtbW9kZSBIVE1MIG1vZGUgdG8gYmUgcHJvcGVybHkgaW5kZW50ZWQuPC9wPgoKICAgIDxwPkZpbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGFzc29jaWF0ZSB5b3VyIG1vZGUsIG9yIGEgY2VydGFpbgogICAgY29uZmlndXJhdGlvbiBvZiB5b3VyIG1vZGUsIHdpdGgKICAgIGEgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NSU1FIj5NSU1FPC9hPiB0eXBlLiBGb3IKICAgIGV4YW1wbGUsIHRoZSBKYXZhU2NyaXB0IG1vZGUgYXNzb2NpYXRlcyBpdHNlbGYKICAgIHdpdGggPGNvZGU+dGV4dC9qYXZhc2NyaXB0PC9jb2RlPiwgYW5kIGl0cyBKU09OIHZhcmlhbnQKICAgIHdpdGggPGNvZGU+YXBwbGljYXRpb24vanNvbjwvY29kZT4uIFRvIGRvIHRoaXMsCiAgICBjYWxsIDxjb2RlPkNvZGVNaXJyb3IuZGVmaW5lTUlNRShtaW1lLCBtb2RlU3BlYyk8L2NvZGU+LAogICAgd2hlcmUgPGNvZGU+bW9kZVNwZWM8L2NvZGU+IGNhbiBiZSBhIHN0cmluZyBvciBvYmplY3Qgc3BlY2lmeWluZyBhCiAgICBtb2RlLCBhcyBpbiB0aGUgPGEgaHJlZj0iI29wdGlvbl9tb2RlIj48Y29kZT5tb2RlPC9jb2RlPjwvYT4KICAgIG9wdGlvbi48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJyaWdodHNtYWxsIGJsayI+CgogICAgPGgyPkNvbnRlbnRzPC9oMj4KCiAgICA8dWw+CiAgICAgIDxsaT48YSBocmVmPSIjb3ZlcnZpZXciPk92ZXJ2aWV3PC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjdXNhZ2UiPkJhc2ljIFVzYWdlPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjY29uZmlnIj5Db25maWd1cmF0aW9uPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjc3R5bGluZyI+Q3VzdG9taXplZCBTdHlsaW5nPC9hPjwvbGk+CiAgICAgIDxsaT48YSBocmVmPSIjYXBpIj5Qcm9ncmFtbWluZyBBUEk8L2E+PC9saT4KICAgICAgPGxpPjxhIGhyZWY9IiNtb2RlYXBpIj5Xcml0aW5nIENvZGVNaXJyb3IgTW9kZXM8L2E+PC9saT4KICAgIDwvdWw+Cgo8L2Rpdj48L2Rpdj4KCjxkaXYgc3R5bGU9ImhlaWdodDogMmVtIj4mbmJzcDs8L2Rpdj4KCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9ImNzcy9mb250LmpzIj48L3NjcmlwdD4KCiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></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[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjbGlrZSIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgPSBjb25maWcuaW5kZW50VW5pdCwga2V5d29yZHMgPSBwYXJzZXJDb25maWcua2V5d29yZHMsCiAgICAgIGNwcCA9IHBhcnNlckNvbmZpZy51c2VDUFAsIG11bHRpTGluZVN0cmluZ3MgPSBwYXJzZXJDb25maWcubXVsdGlMaW5lU3RyaW5ncywKICAgICAgJHZhcnMgPSBwYXJzZXJDb25maWcuJHZhcnMsIGF0QW5ub3RhdGlvbnMgPSBwYXJzZXJDb25maWcuYXRBbm5vdGF0aW9uczsKICB2YXIgaXNPcGVyYXRvckNoYXIgPSAvWytcLSomJT08PiE/fF0vOwoKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIHZhciB0eXBlOwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUpIHsKICAgIHR5cGUgPSB0cDsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpCiAgICAgIHJldHVybiByZXQoY2gpOwogICAgZWxzZSBpZiAoY2ggPT0gIiMiICYmIGNwcCAmJiBzdGF0ZS5zdGFydE9mTGluZSkgewogICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgIHJldHVybiByZXQoImRpcmVjdGl2ZSIsICJjLWxpa2UtcHJlcHJvY2Vzc29yIik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLykKICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgImMtbGlrZS1udW1iZXIiKTsKICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICIvIikgewogICAgICBpZiAoc3RyZWFtLmVhdCgiKiIpKSB7CiAgICAgICAgcmV0dXJuIGNoYWluKHN0cmVhbSwgc3RhdGUsIHRva2VuQ29tbWVudCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAiYy1saWtlLWNvbW1lbnQiKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIik7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGlzT3BlcmF0b3JDaGFyLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIik7CiAgICB9CiAgICBlbHNlIGlmIChhdEFubm90YXRpb25zICYmIGNoID09ICJAIikgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICAgIHJldHVybiByZXQoImFubm90YXRpb24iLCAiYy1saWtlLWFubm90YXRpb24iKTsKICAgIH0KICAgIGVsc2UgaWYgKCR2YXJzICYmIGNoID09ICIkIikgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgcmV0dXJuIHJldCgid29yZCIsICJjLWxpa2UtdmFyIik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcJF9dLyk7CiAgICAgIGlmIChrZXl3b3JkcyAmJiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpKSkgcmV0dXJuIHJldCgia2V5d29yZCIsICJjLWxpa2Uta2V5d29yZCIpOwogICAgICByZXR1cm4gcmV0KCJ3b3JkIiwgImMtbGlrZS13b3JkIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7CiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO30KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQgfHwgIShlc2NhcGVkIHx8IG11bHRpTGluZVN0cmluZ3MpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAiYy1saWtlLXN0cmluZyIpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgbWF5YmVFbmQgPSBmYWxzZSwgY2g7CiAgICB3aGlsZSAoY2ggPSBzdHJlYW0ubmV4dCgpKSB7CiAgICAgIGlmIChjaCA9PSAiLyIgJiYgbWF5YmVFbmQpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJjLWxpa2UtY29tbWVudCIpOwogIH0KCiAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikgewogICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOwogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5hbGlnbiA9IGFsaWduOwogICAgdGhpcy5wcmV2ID0gcHJldjsKICB9CgogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJ0b3AiLCBmYWxzZSksCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAodHlwZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKCh0eXBlID09ICI7IiB8fCB0eXBlID09ICI6IikgJiYgY3R4LnR5cGUgPT0gInN0YXRlbWVudCIpIHBvcENvbnRleHQoc3RhdGUpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJ7IikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIn0iKTsKICAgICAgZWxzZSBpZiAodHlwZSA9PSAiWyIpIHB1c2hDb250ZXh0KHN0YXRlLCBzdHJlYW0uY29sdW1uKCksICJdIik7CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gIigiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiKSIpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJ9IikgewogICAgICAgIGlmIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJ9IikgY3R4ID0gcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgICAgaWYgKGN0eC50eXBlID09ICJzdGF0ZW1lbnQiKSBjdHggPSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIGlmICh0eXBlID09IGN0eC50eXBlKSBwb3BDb250ZXh0KHN0YXRlKTsKICAgICAgZWxzZSBpZiAoY3R4LnR5cGUgPT0gIn0iIHx8IGN0eC50eXBlID09ICJ0b3AiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAic3RhdGVtZW50Iik7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGN0eCA9IHN0YXRlLmNvbnRleHQsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7CiAgICAgIGlmIChjdHgudHlwZSA9PSAic3RhdGVtZW50IikgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChmaXJzdENoYXIgPT0gInsiID8gMCA6IGluZGVudFVuaXQpOwogICAgICBlbHNlIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAie30iCiAgfTsKfSk7CgooZnVuY3Rpb24oKSB7CiAgZnVuY3Rpb24ga2V5d29yZHMoc3RyKSB7CiAgICB2YXIgb2JqID0ge30sIHdvcmRzID0gc3RyLnNwbGl0KCIgIik7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmRzLmxlbmd0aDsgKytpKSBvYmpbd29yZHNbaV1dID0gdHJ1ZTsKICAgIHJldHVybiBvYmo7CiAgfQogIHZhciBjS2V5d29yZHMgPSAiYXV0byBpZiBicmVhayBpbnQgY2FzZSBsb25nIGNoYXIgcmVnaXN0ZXIgY29udGludWUgcmV0dXJuIGRlZmF1bHQgc2hvcnQgZG8gc2l6ZW9mICIgKwogICAgImRvdWJsZSBzdGF0aWMgZWxzZSBzdHJ1Y3QgZW50cnkgc3dpdGNoIGV4dGVybiB0eXBlZGVmIGZsb2F0IHVuaW9uIGZvciB1bnNpZ25lZCAiICsKICAgICJnb3RvIHdoaWxlIGVudW0gdm9pZCBjb25zdCBzaWduZWQgdm9sYXRpbGUiOwoKICBDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1jc3JjIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIHVzZUNQUDogdHJ1ZSwKICAgIGtleXdvcmRzOiBrZXl3b3JkcyhjS2V5d29yZHMpCiAgfSk7CiAgQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtYysrc3JjIiwgewogICAgbmFtZTogImNsaWtlIiwKICAgIHVzZUNQUDogdHJ1ZSwKICAgIGtleXdvcmRzOiBrZXl3b3JkcyhjS2V5d29yZHMgKyAiIGFzbSBkeW5hbWljX2Nhc3QgbmFtZXNwYWNlIHJlaW50ZXJwcmV0X2Nhc3QgdHJ5IGJvb2wgZXhwbGljaXQgbmV3ICIgKwogICAgICAgICAgICAgICAgICAgICAgICJzdGF0aWNfY2FzdCB0eXBlaWQgY2F0Y2ggZmFsc2Ugb3BlcmF0b3IgdGVtcGxhdGUgdHlwZW5hbWUgY2xhc3MgZnJpZW5kIHByaXZhdGUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgdXNpbmcgY29uc3RfY2FzdCBpbmxpbmUgcHVibGljIHRocm93IHZpcnR1YWwgZGVsZXRlIG11dGFibGUgcHJvdGVjdGVkIHRydWUgIiArCiAgICAgICAgICAgICAgICAgICAgICAgIndjaGFyX3QiKQogIH0pOwogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LWphdmEiLCB7CiAgICBuYW1lOiAiY2xpa2UiLAogICAgYXRBbm5vdGF0aW9uczogdHJ1ZSwKICAgIGtleXdvcmRzOiBrZXl3b3JkcygiYWJzdHJhY3QgYXNzZXJ0IGJvb2xlYW4gYnJlYWsgYnl0ZSBjYXNlIGNhdGNoIGNoYXIgY2xhc3MgY29uc3QgY29udGludWUgZGVmYXVsdCAiICsgCiAgICAgICAgICAgICAgICAgICAgICAgImRvIGRvdWJsZSBlbHNlIGVudW0gZXh0ZW5kcyBmYWxzZSBmaW5hbCBmaW5hbGx5IGZsb2F0IGZvciBnb3RvIGlmIGltcGxlbWVudHMgaW1wb3J0ICIgKwogICAgICAgICAgICAgICAgICAgICAgICJpbnN0YW5jZW9mIGludCBpbnRlcmZhY2UgbG9uZyBuYXRpdmUgbmV3IG51bGwgcGFja2FnZSBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgIiArCiAgICAgICAgICAgICAgICAgICAgICAgInJldHVybiBzaG9ydCBzdGF0aWMgc3RyaWN0ZnAgc3VwZXIgc3dpdGNoIHN5bmNocm9uaXplZCB0aGlzIHRocm93IHRocm93cyB0cmFuc2llbnQgIiArCiAgICAgICAgICAgICAgICAgICAgICAgInRydWUgdHJ5IHZvaWQgdm9sYXRpbGUgd2hpbGUiKQogIH0pOwp9KCkpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/clike/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQy1saWtlIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjbGlrZS5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImNsaWtlLmNzcyI+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlcjogMnB4IGluc2V0ICNkZWU7fTwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGgxPkNvZGVNaXJyb3IgMjogQy1saWtlIG1vZGU8L2gxPgoKPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLyogQyBkZW1vIGNvZGUgKi8KCiNpbmNsdWRlIDx6bXEuaD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KI2luY2x1ZGUgPHNlbWFwaG9yZS5oPgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxtYWxsb2MuaD4KCnR5cGVkZWYgc3RydWN0IHsKICB2b2lkKiBhcmdfc29ja2V0OwogIHptcV9tc2dfdCogYXJnX21zZzsKICBjaGFyKiBhcmdfc3RyaW5nOwogIHVuc2lnbmVkIGxvbmcgYXJnX2xlbjsKICBpbnQgYXJnX2ludCwgYXJnX2NvbW1hbmQ7CgogIGludCBzaWduYWxfZmQ7CiAgaW50IHBhZDsKICB2b2lkKiBjb250ZXh0OwogIHNlbV90IHNlbTsKfSBhY2xfem1xX2NvbnRleHQ7CgojZGVmaW5lIHAoWCkgKGNvbnRleHQtPmFyZ18jI1gpCgp2b2lkKiB6bXFfdGhyZWFkKHZvaWQqIGNvbnRleHRfcG9pbnRlcikgewogIGFjbF96bXFfY29udGV4dCogY29udGV4dCA9IChhY2xfem1xX2NvbnRleHQqKWNvbnRleHRfcG9pbnRlcjsKICBjaGFyIG9rID0gJ0snLCBlcnIgPSAnWCc7CiAgaW50IHJlczsKCiAgd2hpbGUgKDEpIHsKICAgIHdoaWxlICgocmVzID0gc2VtX3dhaXQoJmFtcDtjb250ZXh0LT5zZW0pKSA9PSBFSU5UUik7CiAgICBpZiAocmVzKSB7d3JpdGUoY29udGV4dC0+c2lnbmFsX2ZkLCAmYW1wO2VyciwgMSk7IGdvdG8gY2xlYW51cDt9CiAgICBzd2l0Y2gocChjb21tYW5kKSkgewogICAgY2FzZSAwOiBnb3RvIGNsZWFudXA7CiAgICBjYXNlIDE6IHAoc29ja2V0KSA9IHptcV9zb2NrZXQoY29udGV4dC0+Y29udGV4dCwgcChpbnQpKTsgYnJlYWs7CiAgICBjYXNlIDI6IHAoaW50KSA9IHptcV9jbG9zZShwKHNvY2tldCkpOyBicmVhazsKICAgIGNhc2UgMzogcChpbnQpID0gem1xX2JpbmQocChzb2NrZXQpLCBwKHN0cmluZykpOyBicmVhazsKICAgIGNhc2UgNDogcChpbnQpID0gem1xX2Nvbm5lY3QocChzb2NrZXQpLCBwKHN0cmluZykpOyBicmVhazsKICAgIGNhc2UgNTogcChpbnQpID0gem1xX2dldHNvY2tvcHQocChzb2NrZXQpLCBwKGludCksICh2b2lkKilwKHN0cmluZyksICZhbXA7cChsZW4pKTsgYnJlYWs7CiAgICBjYXNlIDY6IHAoaW50KSA9IHptcV9zZXRzb2Nrb3B0KHAoc29ja2V0KSwgcChpbnQpLCAodm9pZCopcChzdHJpbmcpLCBwKGxlbikpOyBicmVhazsKICAgIGNhc2UgNzogcChpbnQpID0gem1xX3NlbmQocChzb2NrZXQpLCBwKG1zZyksIHAoaW50KSk7IGJyZWFrOwogICAgY2FzZSA4OiBwKGludCkgPSB6bXFfcmVjdihwKHNvY2tldCksIHAobXNnKSwgcChpbnQpKTsgYnJlYWs7CiAgICBjYXNlIDk6IHAoaW50KSA9IHptcV9wb2xsKHAoc29ja2V0KSwgcChpbnQpLCBwKGxlbikpOyBicmVhazsKICAgIH0KICAgIHAoY29tbWFuZCkgPSBlcnJubzsKICAgIHdyaXRlKGNvbnRleHQtPnNpZ25hbF9mZCwgJmFtcDtvaywgMSk7CiAgfQogY2xlYW51cDoKICBjbG9zZShjb250ZXh0LT5zaWduYWxfZmQpOwogIGZyZWUoY29udGV4dF9wb2ludGVyKTsKICByZXR1cm4gMDsKfQoKdm9pZCogem1xX3RocmVhZF9pbml0KHZvaWQqIHptcV9jb250ZXh0LCBpbnQgc2lnbmFsX2ZkKSB7CiAgYWNsX3ptcV9jb250ZXh0KiBjb250ZXh0ID0gbWFsbG9jKHNpemVvZihhY2xfem1xX2NvbnRleHQpKTsKICBwdGhyZWFkX3QgdGhyZWFkOwoKICBjb250ZXh0LT5jb250ZXh0ID0gem1xX2NvbnRleHQ7CiAgY29udGV4dC0+c2lnbmFsX2ZkID0gc2lnbmFsX2ZkOwogIHNlbV9pbml0KCZhbXA7Y29udGV4dC0+c2VtLCAxLCAwKTsKICBwdGhyZWFkX2NyZWF0ZSgmYW1wO3RocmVhZCwgMCwgJmFtcDt6bXFfdGhyZWFkLCBjb250ZXh0KTsKICBwdGhyZWFkX2RldGFjaCh0aHJlYWQpOwogIHJldHVybiBjb250ZXh0Owp9CjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LWNzcmMiCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+U2ltcGxlIG1vZGUgdGhhdCB0cmllcyB0byBoYW5kbGUgQy1saWtlIGxhbmd1YWdlcyBhcyB3ZWxsIGFzIGl0CiAgICBjYW4uIFRha2VzIHR3byBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6IDxjb2RlPmtleXdvcmRzPC9jb2RlPiwgYW4KICAgIG9iamVjdCB3aG9zZSBwcm9wZXJ0eSBuYW1lcyBhcmUgdGhlIGtleXdvcmRzIGluIHRoZSBsYW5ndWFnZSwKICAgIGFuZCA8Y29kZT51c2VDUFA8L2NvZGU+LCB3aGljaCBkZXRlcm1pbmVzIHdoZXRoZXIgQyBwcmVwcm9jZXNzb3IKICAgIGRpcmVjdGl2ZXMgYXJlIHJlY29nbml6ZWQuPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtY3NyYzwvY29kZT4KICAgIChDIGNvZGUpLCA8Y29kZT50ZXh0L3gtYysrc3JjPC9jb2RlPiAoQysrCiAgICBjb2RlKSwgPGNvZGU+dGV4dC94LWphdmE8L2NvZGU+IChKYXZhIGNvZGUpLjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/css.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jc3MtYXQge2NvbG9yOiAjNzA4O30Kc3Bhbi5jc3MtdW5pdCB7Y29sb3I6ICMyODE7fQpzcGFuLmNzcy12YWx1ZSB7Y29sb3I6ICM3MDg7fQpzcGFuLmNzcy1pZGVudGlmaWVyIHtjb2xvcjogYmxhY2s7fQpzcGFuLmNzcy1zZWxlY3RvciB7Y29sb3I6ICMxMUI7fQpzcGFuLmNzcy1pbXBvcnRhbnQge2NvbG9yOiAjMDBGO30Kc3Bhbi5jc3MtY29sb3Jjb2RlIHtjb2xvcjogIzI5OTt9CnNwYW4uY3NzLWNvbW1lbnQge2NvbG9yOiAjQTcwO30Kc3Bhbi5jc3Mtc3RyaW5nIHtjb2xvcjogI0EyMjt9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/css.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJjc3MiLCBmdW5jdGlvbihjb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0LCB0eXBlOwogIGZ1bmN0aW9uIHJldChzdHlsZSwgdHApIHt0eXBlID0gdHA7IHJldHVybiBzdHlsZTt9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICJAIikge3N0cmVhbS5lYXRXaGlsZSgvXHcvKTsgcmV0dXJuIHJldCgiY3NzLWF0Iiwgc3RyZWFtLmN1cnJlbnQoKSk7fQogICAgZWxzZSBpZiAoY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIioiKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQ0NvbW1lbnQ7CiAgICAgIHJldHVybiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIjwiICYmIHN0cmVhbS5lYXQoIiEiKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuU0dNTENvbW1lbnQ7CiAgICAgIHJldHVybiB0b2tlblNHTUxDb21tZW50KHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIj0iKSByZXQobnVsbCwgImNvbXBhcmUiKTsKICAgIGVsc2UgaWYgKChjaCA9PSAifiIgfHwgY2ggPT0gInwiKSAmJiBzdHJlYW0uZWF0KCI9IikpIHJldHVybiByZXQobnVsbCwgImNvbXBhcmUiKTsKICAgIGVsc2UgaWYgKGNoID09ICJcIiIgfHwgY2ggPT0gIiciKSB7CiAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmcoY2gpOwogICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiIyIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9cdy8pOwogICAgICByZXR1cm4gcmV0KCJjc3Mtc2VsZWN0b3IiLCAiaGFzaCIpOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIiEiKSB7CiAgICAgIHN0cmVhbS5tYXRjaCgvXlxzKlx3Ki8pOwogICAgICByZXR1cm4gcmV0KCJjc3MtaW1wb3J0YW50IiwgImltcG9ydGFudCIpOwogICAgfQogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcdy4lXS8pOwogICAgICByZXR1cm4gcmV0KCJjc3MtdW5pdCIsICJ1bml0Iik7CiAgICB9CiAgICBlbHNlIGlmICgvWywuKz4qXC9dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsICJzZWxlY3Qtb3AiKTsKICAgIH0KICAgIGVsc2UgaWYgKC9bO3t9OlxbXF1dLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KG51bGwsIGNoKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1xcXC1fXS8pOwogICAgICByZXR1cm4gcmV0KCJjc3MtaWRlbnRpZmllciIsICJpZGVudGlmaWVyIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlbkNDb21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlICgoY2ggPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChtYXliZUVuZCAmJiBjaCA9PSAiLyIpIHsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBtYXliZUVuZCA9IChjaCA9PSAiKiIpOwogICAgfQogICAgcmV0dXJuIHJldCgiY3NzLWNvbW1lbnQiLCAiY29tbWVudCIpOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5TR01MQ29tbWVudChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgZGFzaGVzID0gMCwgY2g7CiAgICB3aGlsZSAoKGNoID0gc3RyZWFtLm5leHQoKSkgIT0gbnVsbCkgewogICAgICBpZiAoZGFzaGVzID49IDIgJiYgY2ggPT0gIj4iKSB7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSB0b2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZGFzaGVzID0gKGNoID09ICItIikgPyBkYXNoZXMgKyAxIDogMDsKICAgIH0KICAgIHJldHVybiByZXQoImNzcy1jb21tZW50IiwgImNvbW1lbnQiKTsKICB9CgogIGZ1bmN0aW9uIHRva2VuU3RyaW5nKHF1b3RlKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB2YXIgZXNjYXBlZCA9IGZhbHNlLCBjaDsKICAgICAgd2hpbGUgKChjaCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAoY2ggPT0gcXVvdGUgJiYgIWVzY2FwZWQpCiAgICAgICAgICBicmVhazsKICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgY2ggPT0gIlxcIjsKICAgICAgfQogICAgICBpZiAoIWVzY2FwZWQpIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICByZXR1cm4gcmV0KCJjc3Mtc3RyaW5nIiwgInN0cmluZyIpOwogICAgfTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlKSB7CiAgICAgIHJldHVybiB7dG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICAgICAgICBiYXNlSW5kZW50OiBiYXNlIHx8IDAsCiAgICAgICAgICAgICAgc3RhY2s6IFtdfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CgogICAgICB2YXIgY29udGV4dCA9IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXTsKICAgICAgaWYgKHR5cGUgPT0gImhhc2giICYmIGNvbnRleHQgPT0gInJ1bGUiKSBzdHlsZSA9ICJjc3MtY29sb3Jjb2RlIjsKICAgICAgZWxzZSBpZiAoc3R5bGUgPT0gImNzcy1pZGVudGlmaWVyIikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJydWxlIikgc3R5bGUgPSAiY3NzLXZhbHVlIjsKICAgICAgICBlbHNlIGlmICghY29udGV4dCB8fCBjb250ZXh0ID09ICJAbWVkaWF7Iikgc3R5bGUgPSAiY3NzLXNlbGVjdG9yIjsKICAgICAgfQoKICAgICAgaWYgKGNvbnRleHQgPT0gInJ1bGUiICYmIC9eW1x7XH07XSQvLnRlc3QodHlwZSkpCiAgICAgICAgc3RhdGUuc3RhY2sucG9wKCk7CiAgICAgIGlmICh0eXBlID09ICJ7IikgewogICAgICAgIGlmIChjb250ZXh0ID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFja1tzdGF0ZS5zdGFjay5sZW5ndGgtMV0gPSAiQG1lZGlheyI7CiAgICAgICAgZWxzZSBzdGF0ZS5zdGFjay5wdXNoKCJ7Iik7CiAgICAgIH0KICAgICAgZWxzZSBpZiAodHlwZSA9PSAifSIpIHN0YXRlLnN0YWNrLnBvcCgpOwogICAgICBlbHNlIGlmICh0eXBlID09ICJAbWVkaWEiKSBzdGF0ZS5zdGFjay5wdXNoKCJAbWVkaWEiKTsKICAgICAgZWxzZSBpZiAoY29udGV4dCAhPSAicnVsZSIgJiYgY29udGV4dCAhPSAiQG1lZGlhIiAmJiB0eXBlICE9ICJjb21tZW50Iikgc3RhdGUuc3RhY2sucHVzaCgicnVsZSIpOwogICAgICByZXR1cm4gc3R5bGU7CiAgICB9LAoKICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICB2YXIgbiA9IHN0YXRlLnN0YWNrLmxlbmd0aDsKICAgICAgaWYgKC9eXH0vLnRlc3QodGV4dEFmdGVyKSkKICAgICAgICBuIC09IHN0YXRlLnN0YWNrW3N0YXRlLnN0YWNrLmxlbmd0aC0xXSA9PSAicnVsZSIgPyAyIDogMTsKICAgICAgcmV0dXJuIHN0YXRlLmJhc2VJbmRlbnQgKyBuICogaW5kZW50VW5pdDsKICAgIH0sCgogICAgZWxlY3RyaWNDaGFyczogIn0iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvY3NzIiwgImNzcyIpOwo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/css/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogQ1NTIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJjc3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJjc3MuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBDU1MgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgovKiBTb21lIGV4YW1wbGUgQ1NTICovCgpAaW1wb3J0IHVybCgic29tZXRoaW5nLmNzcyIpOwoKYm9keSB7CiAgbWFyZ2luOiAwOwogIHBhZGRpbmc6IDNlbSA2ZW07CiAgZm9udC1mYW1pbHk6IHRhaG9tYSwgYXJpYWwsIHNhbnMtc2VyaWY7CiAgY29sb3I6ICMwMDA7Cn0KCiNuYXZpZ2F0aW9uIGEgewogIGZvbnQtd2VpZ2h0OiBib2xkOwogIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50Owp9CgpoMSB7CiAgZm9udC1zaXplOiAyLjVlbTsKfQoKaDIgewogIGZvbnQtc2l6ZTogMS43ZW07Cn0KCmgxOmJlZm9yZSwgaDI6YmVmb3JlIHsKICBjb250ZW50OiAiOjoiOwp9Cgpjb2RlIHsKICBmb250LWZhbWlseTogY291cmllciwgbW9ub3NwYWNlOwogIGZvbnQtc2l6ZTogODAlOwogIGNvbG9yOiAjNDE4QThBOwp9CjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHt9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2NzczwvY29kZT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></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[c3Bhbi5kaWZmLXJhbmdlaW5mbyB7Y29sb3I6ICNhMGI7fQpzcGFuLmRpZmYtbWludXMge2NvbG9yOiAjYTIyO30Kc3Bhbi5kaWZmLXBsdXMge2NvbG9yOiAjMmIyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/diff.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJkaWZmIiwgZnVuY3Rpb24oKSB7CiAgcmV0dXJuIHsKICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0pIHsKICAgICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICBpZiAoY2ggPT0gIisiKSByZXR1cm4gImRpZmYtcGx1cyI7CiAgICAgIGlmIChjaCA9PSAiLSIpIHJldHVybiAiZGlmZi1taW51cyI7CiAgICAgIGlmIChjaCA9PSAiQCIpIHJldHVybiAiZGlmZi1yYW5nZWluZm8iOwogICAgfQogIH07Cn0pOwoKQ29kZU1pcnJvci5kZWZpbmVNSU1FKCJ0ZXh0L3gtZGlmZiIsICJkaWZmIik7Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/diff/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogRGlmZiBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iZGlmZi5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImRpZmYuY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGRkO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IERpZmYgbW9kZTwvaDE+CiAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgpkaWZmIC0tZ2l0IGEvaW5kZXguaHRtbCBiL2luZGV4Lmh0bWwKaW5kZXggYzFkOTE1Ni4uNzc2NDc0NCAxMDA2NDQKLS0tIGEvaW5kZXguaHRtbAorKysgYi9pbmRleC5odG1sCkBAIC05NSw3ICs5NSw4IEBAIFN0cmluZ1N0cmVhbS5wcm90b3R5cGUgPSB7CiAgICAgPHNjcmlwdD4KICAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAotICAgICAgICBhdXRvTWF0Y2hCcmFja2V0czogdHJ1ZQorICAgICAgICBhdXRvTWF0Y2hCcmFja2V0czogdHJ1ZSwKKyAgICAgIG9uR3V0dGVyQ2xpY2s6IGZ1bmN0aW9uKHgpe2NvbnNvbGUubG9nKHgpO30KICAgICAgIH0pOwogICAgIDwvc2NyaXB0PgogICA8L2JvZHk+CmRpZmYgLS1naXQgYS9saWIvY29kZW1pcnJvci5qcyBiL2xpYi9jb2RlbWlycm9yLmpzCmluZGV4IDA0NjQ2YTkuLjlhMzljYzcgMTAwNjQ0Ci0tLSBhL2xpYi9jb2RlbWlycm9yLmpzCisrKyBiL2xpYi9jb2RlbWlycm9yLmpzCkBAIC0zOTksMTAgKzM5OSwxNiBAQCB2YXIgQ29kZU1pcnJvciA9IChmdW5jdGlvbigpIHsKICAgICB9CiAKICAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7Ci0gICAgICB2YXIgc3RhcnQgPSBwb3NGcm9tTW91c2UoZSksIGxhc3QgPSBzdGFydDsKKyAgICAgIHZhciBzdGFydCA9IHBvc0Zyb21Nb3VzZShlKSwgbGFzdCA9IHN0YXJ0LCB0YXJnZXQgPSBlLnRhcmdldCgpOwogICAgICAgaWYgKCFzdGFydCkgcmV0dXJuOwogICAgICAgc2V0Q3Vyc29yKHN0YXJ0LmxpbmUsIHN0YXJ0LmNoLCBmYWxzZSk7CiAgICAgICBpZiAoZS5idXR0b24oKSAhPSAxKSByZXR1cm47CisgICAgICBpZiAodGFyZ2V0LnBhcmVudE5vZGUgPT0gZ3V0dGVyKSB7CisgICAgICAgIGlmIChvcHRpb25zLm9uR3V0dGVyQ2xpY2spCisgICAgICAgICAgb3B0aW9ucy5vbkd1dHRlckNsaWNrKGluZGV4T2YoZ3V0dGVyLmNoaWxkTm9kZXMsIHRhcmdldCkgKyBzaG93aW5nRnJvbSk7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKwogICAgICAgaWYgKCFmb2N1c2VkKSBvbkZvY3VzKCk7CiAKICAgICAgIGUuc3RvcCgpOwpAQCAtODA4LDcgKzgxNCw3IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgZm9yICh2YXIgaSA9IHNob3dpbmdGcm9tOyBpIDwgc2hvd2luZ1RvOyArK2kpIHsKICAgICAgICAgdmFyIG1hcmtlciA9IGxpbmVzW2ldLmd1dHRlck1hcmtlcjsKICAgICAgICAgaWYgKG1hcmtlcikgaHRtbC5wdXNoKCc8ZGl2IGNsYXNzPSInICsgbWFya2VyLnN0eWxlICsgJyI+JyArIGh0bWxFc2NhcGUobWFya2VyLnRleHQpICsgJzwvZGl2PicpOwotICAgICAgICBlbHNlIGh0bWwucHVzaCgiPGRpdj4iICsgKG9wdGlvbnMubGluZU51bWJlcnMgPyBpICsgMSA6ICJcdTAwYTAiKSArICI8L2Rpdj4iKTsKKyAgICAgICAgZWxzZSBodG1sLnB1c2goIjxkaXY+IiArIChvcHRpb25zLmxpbmVOdW1iZXJzID8gaSArIG9wdGlvbnMuZmlyc3RMaW5lTnVtYmVyIDogIlx1MDBhMCIpICsgIjwvZGl2PiIpOwogICAgICAgfQogICAgICAgZ3V0dGVyLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7IC8vIFRPRE8gdGVzdCB3aGV0aGVyIHRoaXMgYWN0dWFsbHkgaGVscHMKICAgICAgIGd1dHRlci5pbm5lckhUTUwgPSBodG1sLmpvaW4oIiIpOwpAQCAtMTM3MSwxMCArMTM3Nyw4IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgICAgICBpZiAob3B0aW9uID09ICJwYXJzZXIiKSBzZXRQYXJzZXIodmFsdWUpOwogICAgICAgICBlbHNlIGlmIChvcHRpb24gPT09ICJsaW5lTnVtYmVycyIpIHNldExpbmVOdW1iZXJzKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAiZ3V0dGVyIikgc2V0R3V0dGVyKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAob3B0aW9uID09PSAicmVhZE9ubHkiKSBvcHRpb25zLnJlYWRPbmx5ID0gdmFsdWU7Ci0gICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImluZGVudFVuaXQiKSB7b3B0aW9ucy5pbmRlbnRVbml0ID0gaW5kZW50VW5pdCA9IHZhbHVlOyBzZXRQYXJzZXIob3B0aW9ucy5wYXJzZXIpO30KLSAgICAgICAgZWxzZSBpZiAoL14oPzplbnRlck1vZGV8dGFiTW9kZXxpbmRlbnRXaXRoVGFic3xyZWFkT25seXxhdXRvTWF0Y2hCcmFja2V0c3x1bmRvRGVwdGgpJC8udGVzdChvcHRpb24pKSBvcHRpb25zW29wdGlvbl0gPSB2YWx1ZTsKLSAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoIkNhbid0IHNldCBvcHRpb24gIiArIG9wdGlvbik7CisgICAgICAgIGVsc2UgaWYgKG9wdGlvbiA9PT0gImluZGVudFVuaXQiKSB7b3B0aW9ucy5pbmRlbnRVbml0ID0gdmFsdWU7IHNldFBhcnNlcihvcHRpb25zLnBhcnNlcik7fQorICAgICAgICBlbHNlIG9wdGlvbnNbb3B0aW9uXSA9IHZhbHVlOwogICAgICAgfSwKICAgICAgIGN1cnNvckNvb3JkczogY3Vyc29yQ29vcmRzLAogICAgICAgdW5kbzogb3BlcmF0aW9uKHVuZG8pLApAQCAtMTQwMiw3ICsxNDA2LDggQEAgdmFyIENvZGVNaXJyb3IgPSAoZnVuY3Rpb24oKSB7CiAgICAgICByZXBsYWNlUmFuZ2U6IG9wZXJhdGlvbihyZXBsYWNlUmFuZ2UpLAogCiAgICAgICBvcGVyYXRpb246IGZ1bmN0aW9uKGYpe3JldHVybiBvcGVyYXRpb24oZikoKTt9LAotICAgICAgcmVmcmVzaDogZnVuY3Rpb24oKXt1cGRhdGVEaXNwbGF5KFt7ZnJvbTogMCwgdG86IGxpbmVzLmxlbmd0aH1dKTt9CisgICAgICByZWZyZXNoOiBmdW5jdGlvbigpe3VwZGF0ZURpc3BsYXkoW3tmcm9tOiAwLCB0bzogbGluZXMubGVuZ3RofV0pO30sCisgICAgICBnZXRJbnB1dEZpZWxkOiBmdW5jdGlvbigpe3JldHVybiBpbnB1dDt9CiAgICAgfTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiAgIH0KQEAgLTE0MjAsNiArMTQyNSw3IEBAIHZhciBDb2RlTWlycm9yID0gKGZ1bmN0aW9uKCkgewogICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgICBvbkNoYW5nZTogbnVsbCwKICAgICBvbkN1cnNvckFjdGl2aXR5OiBudWxsLAorICAgIG9uR3V0dGVyQ2xpY2s6IG51bGwsCiAgICAgYXV0b01hdGNoQnJhY2tldHM6IGZhbHNlLAogICAgIHdvcmtUaW1lOiAyMDAsCiAgICAgd29ya0RlbGF5OiAzMDAsCjwvdGV4dGFyZWE+PC9mb3JtPgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHt9KTsKICAgIDwvc2NyaXB0PgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L3gtZGlmZjwvY29kZT4uPC9wPgoKICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/haskell.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5ocy1jaGFyLApzcGFuLmhzLWZsb2F0LApzcGFuLmhzLWludGVnZXIsCnNwYW4uaHMtc3RyaW5nIAl7Y29sb3I6ICM3NjI7fQoKc3Bhbi5ocy1jb21tZW50IHtjb2xvcjogIzI2Mjtmb250LXN0eWxlOiBpdGFsaWM7fQpzcGFuLmhzLXByYWdtYSB7Y29sb3I6ICM1NTU7Zm9udC1zdHlsZTogaXRhbGljO30KCnNwYW4uaHMtc3BlY2lhbCwKc3Bhbi5ocy12YXJpZCwKc3Bhbi5ocy12YXJzeW0ge2NvbG9yOiAjMDAwO30KCnNwYW4uaHMtY29uaWQsCnNwYW4uaHMtY29uc3ltIHtjb2xvcjogI2IxMTt9CgpzcGFuLmhzLXF1YWxpZmllciB7Y29sb3I6ICM1NTU7fQoKc3Bhbi5ocy1yZXNlcnZlZGlkLApzcGFuLmhzLXJlc2VydmVkb3Age2NvbG9yOiAjNzMwO30KCnNwYW4uaHMtcHJlbHVkZS12YXJpZCwKc3Bhbi5ocy1wcmVsdWRlLXZhcnN5bSB7Y29sb3I6ICMzMGE7fQpzcGFuLmhzLXByZWx1ZGUtY29uaWQge2NvbG9yOiAjYjExO30KCnNwYW4uaHMtZXJyb3Ige2JhY2tncm91bmQtY29sb3I6ICNmZGQ7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/haskell.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJoYXNrZWxsIiwgZnVuY3Rpb24oY21DZmcsIG1vZGVDZmcpIHsKCiAgZnVuY3Rpb24gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgZikgewogICAgc2V0U3RhdGUoZik7CiAgICByZXR1cm4gZihzb3VyY2UsIHNldFN0YXRlKTsKICB9CiAgCiAgLy8gVGhlc2Ugc2hvdWxkIGFsbCBiZSBVbmljb2RlIGV4dGVuZGVkLCBhcyBwZXIgdGhlIEhhc2tlbGwgMjAxMCByZXBvcnQKICB2YXIgc21hbGxSRSA9IC9bYS16X10vOwogIHZhciBsYXJnZVJFID0gL1tBLVpdLzsKICB2YXIgZGlnaXRSRSA9IC9bMC05XS87CiAgdmFyIGhleGl0UkUgPSAvWzAtOUEtRmEtZl0vOwogIHZhciBvY3RpdFJFID0gL1swLTddLzsKICB2YXIgaWRSRSA9IC9bYS16X0EtWjAtOSddLzsKICB2YXIgc3ltYm9sUkUgPSAvWy0hIyQlJiorLlwvPD0+P0BcXF58fjpdLzsKICB2YXIgc3BlY2lhbFJFID0gL1soKSw7W1xdYHt9XS87CiAgdmFyIHdoaXRlQ2hhclJFID0gL1sgXHRcdlxmXS87IC8vIG5ld2xpbmVzIGFyZSBoYW5kbGVkIGluIHRva2VuaXplcgogICAgCiAgZnVuY3Rpb24gbm9ybWFsKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgIGlmIChzb3VyY2UuZWF0V2hpbGUod2hpdGVDaGFyUkUpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgICAKICAgIHZhciBjaCA9IHNvdXJjZS5uZXh0KCk7CiAgICBpZiAoc3BlY2lhbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgdmFyIHQgPSAiaHMtY29tbWVudCI7CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyMnKSkgewogICAgICAgICAgdCA9ICJocy1wcmFnbWEiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgbmNvbW1lbnQodCwgMSkpOwogICAgICB9CiAgICAgIHJldHVybiAiaHMtc3BlY2lhbCI7CiAgICB9CiAgICAKICAgIGlmIChjaCA9PSAnXCcnKSB7CiAgICAgIGlmIChzb3VyY2UuZWF0KCdcXCcpKSB7CiAgICAgICAgc291cmNlLm5leHQoKTsgIC8vIHNob3VsZCBoYW5kbGUgb3RoZXIgZXNjYXBlcyBoZXJlCiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc291cmNlLm5leHQoKTsKICAgICAgfQogICAgICBpZiAoc291cmNlLmVhdCgnXCcnKSkgewogICAgICAgIHJldHVybiAiaHMtY2hhciI7CiAgICAgIH0KICAgICAgcmV0dXJuICJocy1lcnJvciI7CiAgICB9CiAgICAKICAgIGlmIChjaCA9PSAnIicpIHsKICAgICAgcmV0dXJuIHN3aXRjaFN0YXRlKHNvdXJjZSwgc2V0U3RhdGUsIHN0cmluZ0xpdGVyYWwpOwogICAgfQogICAgICAKICAgIGlmIChsYXJnZVJFLnRlc3QoY2gpKSB7CiAgICAgIHNvdXJjZS5lYXRXaGlsZShpZFJFKTsKICAgICAgaWYgKHNvdXJjZS5lYXQoJy4nKSkgewogICAgICAgIHJldHVybiAiaHMtcXVhbGlmaWVyIjsKICAgICAgfQogICAgICByZXR1cm4gImhzLWNvbmlkIjsKICAgIH0KICAgICAgCiAgICBpZiAoc21hbGxSRS50ZXN0KGNoKSkgewogICAgICBzb3VyY2UuZWF0V2hpbGUoaWRSRSk7CiAgICAgIHJldHVybiAiaHMtdmFyaWQiOwogICAgfQogICAgICAKICAgIGlmIChkaWdpdFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnMCcpIHsKICAgICAgICBpZiAoc291cmNlLmVhdCgvW3hYXS8pKSB7CiAgICAgICAgICBzb3VyY2UuZWF0V2hpbGUoaGV4aXRSRSk7IC8vIHNob3VsZCByZXF1aXJlIGF0IGxlYXN0IDEKICAgICAgICAgIHJldHVybiAiaHMtaW50ZWdlciI7CiAgICAgICAgfQogICAgICAgIGlmIChzb3VyY2UuZWF0KC9bb09dLykpIHsKICAgICAgICAgIHNvdXJjZS5lYXRXaGlsZShvY3RpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMQogICAgICAgICAgcmV0dXJuICJocy1pbnRlZ2VyIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOwogICAgICB2YXIgdCA9ICJocy1pbnRlZ2VyIjsKICAgICAgaWYgKHNvdXJjZS5lYXQoJy4nKSkgewogICAgICAgIHQgPSAiaHMtZmxvYXQiOwogICAgICAgIHNvdXJjZS5lYXRXaGlsZShkaWdpdFJFKTsgLy8gc2hvdWxkIHJlcXVpcmUgYXQgbGVhc3QgMQogICAgICB9CiAgICAgIGlmIChzb3VyY2UuZWF0KC9bZUVdLykpIHsKICAgICAgICB0ID0gImhzLWZsb2F0IjsKICAgICAgICBzb3VyY2UuZWF0KC9bLStdLyk7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKGRpZ2l0UkUpOyAvLyBzaG91bGQgcmVxdWlyZSBhdCBsZWFzdCAxCiAgICAgIH0KICAgICAgcmV0dXJuIHQ7CiAgICB9CiAgICAgIAogICAgaWYgKHN5bWJvbFJFLnRlc3QoY2gpKSB7CiAgICAgIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgvLS8pKSB7CiAgICAgICAgc291cmNlLmVhdFdoaWxlKC8tLyk7CiAgICAgICAgaWYgKCFzb3VyY2UuZWF0KHN5bWJvbFJFKSkgewogICAgICAgICAgc291cmNlLnNraXBUb0VuZCgpOwogICAgICAgICAgcmV0dXJuICJocy1jb21tZW50IjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIHQgPSAiaHMtdmFyc3ltIjsKICAgICAgaWYgKGNoID09ICc6JykgewogICAgICAgIHQgPSAiaHMtY29uc3ltIjsKICAgICAgfQogICAgICBzb3VyY2UuZWF0V2hpbGUoc3ltYm9sUkUpOwogICAgICByZXR1cm4gdDsgICAgCiAgICB9CiAgICAgIAogICAgcmV0dXJuICJocy1lcnJvciI7CiAgfQogICAgCiAgZnVuY3Rpb24gbmNvbW1lbnQodHlwZSwgbmVzdCkgewogICAgaWYgKG5lc3QgPT0gMCkgewogICAgICByZXR1cm4gbm9ybWFsOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSwgc2V0U3RhdGUpIHsKICAgICAgdmFyIGN1cnJOZXN0ID0gbmVzdDsKICAgICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgICB2YXIgY2ggPSBzb3VyY2UubmV4dCgpOwogICAgICAgIGlmIChjaCA9PSAneycgJiYgc291cmNlLmVhdCgnLScpKSB7CiAgICAgICAgICArK2N1cnJOZXN0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChjaCA9PSAnLScgJiYgc291cmNlLmVhdCgnfScpKSB7CiAgICAgICAgICAtLWN1cnJOZXN0OwogICAgICAgICAgaWYgKGN1cnJOZXN0ID09IDApIHsKICAgICAgICAgICAgc2V0U3RhdGUobm9ybWFsKTsKICAgICAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldFN0YXRlKG5jb21tZW50KHR5cGUsIGN1cnJOZXN0KSk7CiAgICAgIHJldHVybiB0eXBlOwogICAgfQogIH0KICAgIAogIGZ1bmN0aW9uIHN0cmluZ0xpdGVyYWwoc291cmNlLCBzZXRTdGF0ZSkgewogICAgd2hpbGUgKCFzb3VyY2UuZW9sKCkpIHsKICAgICAgdmFyIGNoID0gc291cmNlLm5leHQoKTsKICAgICAgaWYgKGNoID09ICciJykgewogICAgICAgIHNldFN0YXRlKG5vcm1hbCk7CiAgICAgICAgcmV0dXJuICJocy1zdHJpbmciOwogICAgICB9CiAgICAgIGlmIChjaCA9PSAnXFwnKSB7CiAgICAgICAgaWYgKHNvdXJjZS5lb2woKSB8fCBzb3VyY2UuZWF0KHdoaXRlQ2hhclJFKSkgewogICAgICAgICAgc2V0U3RhdGUoc3RyaW5nR2FwKTsKICAgICAgICAgIHJldHVybiAiaHMtc3RyaW5nIjsKICAgICAgICB9CiAgICAgICAgaWYgKHNvdXJjZS5lYXQoJyYnKSkgewogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNvdXJjZS5uZXh0KCk7IC8vIHNob3VsZCBoYW5kbGUgb3RoZXIgZXNjYXBlcyBoZXJlCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzZXRTdGF0ZShub3JtYWwpOwogICAgcmV0dXJuICJocy1lcnJvciI7CiAgfQogIAogIGZ1bmN0aW9uIHN0cmluZ0dhcChzb3VyY2UsIHNldFN0YXRlKSB7CiAgICBpZiAoc291cmNlLmVhdCgnXFwnKSkgewogICAgICByZXR1cm4gc3dpdGNoU3RhdGUoc291cmNlLCBzZXRTdGF0ZSwgc3RyaW5nTGl0ZXJhbCk7CiAgICB9CiAgICBzb3VyY2UubmV4dCgpOwogICAgc2V0U3RhdGUobm9ybWFsKTsKICAgIHJldHVybiAiaHMtZXJyb3IiOwogIH0KICAKICAKICB2YXIgd2VsbEtub3duV29yZHMgPSAoZnVuY3Rpb24oKSB7CiAgICB2YXIgd2t3ID0ge307CiAgICBmdW5jdGlvbiBzZXRUeXBlKHQpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykKICAgICAgICAgIHdrd1thcmd1bWVudHNbaV1dID0gdDsKICAgICAgfQogICAgfQogICAgCiAgICBzZXRUeXBlKCJocy1yZXNlcnZlZGlkIikoCiAgICAgICJjYXNlIiwgImNsYXNzIiwgImRhdGEiLCAiZGVmYXVsdCIsICJkZXJpdmluZyIsICJkbyIsICJlbHNlIiwgImZvcmVpZ24iLAogICAgICAiaWYiLCAiaW1wb3J0IiwgImluIiwgImluZml4IiwgImluZml4bCIsICJpbmZpeHIiLCAiaW5zdGFuY2UiLCAibGV0IiwKICAgICAgIm1vZHVsZSIsICJuZXd0eXBlIiwgIm9mIiwgInRoZW4iLCAidHlwZSIsICJ3aGVyZSIsICJfIik7CiAgICAgIAogICAgc2V0VHlwZSgiaHMtcmVzZXJ2ZWRvcCIpKAogICAgICAiXC5cLiIsICI6IiwgIjo6IiwgIj0iLCAiXFwiLCAiXCIiLCAiPC0iLCAiLT4iLCAiQCIsICJ+IiwgIj0+Iik7CiAgICAgIAogICAgc2V0VHlwZSgiaHMtcHJlbHVkZS12YXJzeW0iKSgKICAgICAgIiEhIiwgIiQhIiwgIiQiLCAiJiYiLCAiKyIsICIrKyIsICItIiwgIi4iLCAiLyIsICIvPSIsICI8IiwgIjw9IiwgIj08PCIsCiAgICAgICI9PSIsICI+IiwgIj49IiwgIj4+IiwgIj4+PSIsICJeIiwgIl5eIiwgInx8IiwgIioiLCAiKioiKTsKICAgICAgCiAgICBzZXRUeXBlKCJocy1wcmVsdWRlLWNvbmlkIikoCiAgICAgICJCb29sIiwgIkJvdW5kZWQiLCAiQ2hhciIsICJEb3VibGUiLCAiRVEiLCAiRWl0aGVyIiwgIkVudW0iLCAiRXEiLAogICAgICAiRmFsc2UiLCAiRmlsZVBhdGgiLCAiRmxvYXQiLCAiRmxvYXRpbmciLCAiRnJhY3Rpb25hbCIsICJGdW5jdG9yIiwgIkdUIiwKICAgICAgIklPIiwgIklPRXJyb3IiLCAiSW50IiwgIkludGVnZXIiLCAiSW50ZWdyYWwiLCAiSnVzdCIsICJMVCIsICJMZWZ0IiwKICAgICAgIk1heWJlIiwgIk1vbmFkIiwgIk5vdGhpbmciLCAiTnVtIiwgIk9yZCIsICJPcmRlcmluZyIsICJSYXRpb25hbCIsICJSZWFkIiwKICAgICAgIlJlYWRTIiwgIlJlYWwiLCAiUmVhbEZsb2F0IiwgIlJlYWxGcmFjIiwgIlJpZ2h0IiwgIlNob3ciLCAiU2hvd1MiLAogICAgICAiU3RyaW5nIiwgIlRydWUiKTsKICAgICAgCiAgICBzZXRUeXBlKCJocy1wcmVsdWRlLXZhcmlkIikoCiAgICAgICJhYnMiLCAiYWNvcyIsICJhY29zaCIsICJhbGwiLCAiYW5kIiwgImFueSIsICJhcHBlbmRGaWxlIiwgImFzVHlwZU9mIiwKICAgICAgImFzaW4iLCAiYXNpbmgiLCAiYXRhbiIsICJhdGFuMiIsICJhdGFuaCIsICJicmVhayIsICJjYXRjaCIsICJjZWlsaW5nIiwKICAgICAgImNvbXBhcmUiLCAiY29uY2F0IiwgImNvbmNhdE1hcCIsICJjb25zdCIsICJjb3MiLCAiY29zaCIsICJjdXJyeSIsCiAgICAgICJjeWNsZSIsICJkZWNvZGVGbG9hdCIsICJkaXYiLCAiZGl2TW9kIiwgImRyb3AiLCAiZHJvcFdoaWxlIiwgImVpdGhlciIsCiAgICAgICJlbGVtIiwgImVuY29kZUZsb2F0IiwgImVudW1Gcm9tIiwgImVudW1Gcm9tVGhlbiIsICJlbnVtRnJvbVRoZW5UbyIsCiAgICAgICJlbnVtRnJvbVRvIiwgImVycm9yIiwgImV2ZW4iLCAiZXhwIiwgImV4cG9uZW50IiwgImZhaWwiLCAiZmlsdGVyIiwKICAgICAgImZsaXAiLCAiZmxvYXREaWdpdHMiLCAiZmxvYXRSYWRpeCIsICJmbG9hdFJhbmdlIiwgImZsb29yIiwgImZtYXAiLAogICAgICAiZm9sZGwiLCAiZm9sZGwxIiwgImZvbGRyIiwgImZvbGRyMSIsICJmcm9tRW51bSIsICJmcm9tSW50ZWdlciIsCiAgICAgICJmcm9tSW50ZWdyYWwiLCAiZnJvbVJhdGlvbmFsIiwgImZzdCIsICJnY2QiLCAiZ2V0Q2hhciIsICJnZXRDb250ZW50cyIsCiAgICAgICJnZXRMaW5lIiwgImhlYWQiLCAiaWQiLCAiaW5pdCIsICJpbnRlcmFjdCIsICJpb0Vycm9yIiwgImlzRGVub3JtYWxpemVkIiwKICAgICAgImlzSUVFRSIsICJpc0luZmluaXRlIiwgImlzTmFOIiwgImlzTmVnYXRpdmVaZXJvIiwgIml0ZXJhdGUiLCAibGFzdCIsCiAgICAgICJsY20iLCAibGVuZ3RoIiwgImxleCIsICJsaW5lcyIsICJsb2ciLCAibG9nQmFzZSIsICJsb29rdXAiLCAibWFwIiwKICAgICAgIm1hcE0iLCAibWFwTV8iLCAibWF4IiwgIm1heEJvdW5kIiwgIm1heGltdW0iLCAibWF5YmUiLCAibWluIiwgIm1pbkJvdW5kIiwKICAgICAgIm1pbmltdW0iLCAibW9kIiwgIm5lZ2F0ZSIsICJub3QiLCAibm90RWxlbSIsICJudWxsIiwgIm9kZCIsICJvciIsCiAgICAgICJvdGhlcndpc2UiLCAicGkiLCAicHJlZCIsICJwcmludCIsICJwcm9kdWN0IiwgInByb3BlckZyYWN0aW9uIiwKICAgICAgInB1dENoYXIiLCAicHV0U3RyIiwgInB1dFN0ckxuIiwgInF1b3QiLCAicXVvdFJlbSIsICJyZWFkIiwgInJlYWRGaWxlIiwKICAgICAgInJlYWRJTyIsICJyZWFkTGlzdCIsICJyZWFkTG4iLCAicmVhZFBhcmVuIiwgInJlYWRzIiwgInJlYWRzUHJlYyIsCiAgICAgICJyZWFsVG9GcmFjIiwgInJlY2lwIiwgInJlbSIsICJyZXBlYXQiLCAicmVwbGljYXRlIiwgInJldHVybiIsICJyZXZlcnNlIiwKICAgICAgInJvdW5kIiwgInNjYWxlRmxvYXQiLCAic2NhbmwiLCAic2NhbmwxIiwgInNjYW5yIiwgInNjYW5yMSIsICJzZXEiLAogICAgICAic2VxdWVuY2UiLCAic2VxdWVuY2VfIiwgInNob3ciLCAic2hvd0NoYXIiLCAic2hvd0xpc3QiLCAic2hvd1BhcmVuIiwKICAgICAgInNob3dTdHJpbmciLCAic2hvd3MiLCAic2hvd3NQcmVjIiwgInNpZ25pZmljYW5kIiwgInNpZ251bSIsICJzaW4iLAogICAgICAic2luaCIsICJzbmQiLCAic3BhbiIsICJzcGxpdEF0IiwgInNxcnQiLCAic3VidHJhY3QiLCAic3VjYyIsICJzdW0iLAogICAgICAidGFpbCIsICJ0YWtlIiwgInRha2VXaGlsZSIsICJ0YW4iLCAidGFuaCIsICJ0b0VudW0iLCAidG9JbnRlZ2VyIiwKICAgICAgInRvUmF0aW9uYWwiLCAidHJ1bmNhdGUiLCAidW5jdXJyeSIsICJ1bmRlZmluZWQiLCAidW5saW5lcyIsICJ1bnRpbCIsCiAgICAgICJ1bndvcmRzIiwgInVuemlwIiwgInVuemlwMyIsICJ1c2VyRXJyb3IiLCAid29yZHMiLCAid3JpdGVGaWxlIiwgInppcCIsCiAgICAgICJ6aXAzIiwgInppcFdpdGgiLCAiemlwV2l0aDMiKTsKICAgICAgCiAgICByZXR1cm4gd2t3OwogIH0pKCk7CiAgICAKICAKICAKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24gKCkgIHsgcmV0dXJuIHsgZjogbm9ybWFsIH07IH0sCiAgICBjb3B5U3RhdGU6ICBmdW5jdGlvbiAocykgeyByZXR1cm4geyBmOiBzLmYgfTsgfSwKICAgIAogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIHQgPSBzdGF0ZS5mKHN0cmVhbSwgZnVuY3Rpb24ocykgeyBzdGF0ZS5mID0gczsgfSk7CiAgICAgIHZhciB3ID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgICAgcmV0dXJuICh3IGluIHdlbGxLbm93bldvcmRzKSA/IHdlbGxLbm93bldvcmRzW3ddIDogdDsKICAgIH0KICB9OwoKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1oYXNrZWxsIiwgImhhc2tlbGwiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/haskell/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSGFza2VsbCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaGFza2VsbC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imhhc2tlbGwuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEhhc2tlbGwgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgptb2R1bGUgVW5pcXVlUGVybXMgKAogICAgdW5pcXVlUGVybXMKICAgICkKd2hlcmUKCi0tIHwgRmluZCBhbGwgdW5pcXVlIHBlcm11dGF0aW9ucyBvZiBhIGxpc3Qgd2hlcmUgdGhlcmUgbWlnaHQgYmUgZHVwbGljYXRlcy4KdW5pcXVlUGVybXMgOjogKEVxIGEpID0+IFthXSAtPiBbW2FdXQp1bmlxdWVQZXJtcyA9IHBlcm1CYWcgLiBtYWtlQmFnCgotLSB8IEFuIHVub3JkZXJlZCBjb2xsZWN0aW9uIHdoZXJlIGR1cGxpY2F0ZSB2YWx1ZXMgYXJlIGFsbG93ZWQsCi0tIGJ1dCByZXByZXNlbnRlZCB3aXRoIGEgc2luZ2xlIHZhbHVlIGFuZCBhIGNvdW50Lgp0eXBlIEJhZyBhID0gWyhhLCBJbnQpXQoKbWFrZUJhZyA6OiAoRXEgYSkgPT4gW2FdIC0+IEJhZyBhCm1ha2VCYWcgW10gPSBbXQptYWtlQmFnIChhOmFzKSA9IG1peCBhICQgbWFrZUJhZyBhcwogIHdoZXJlCiAgICBtaXggYSBbXSAgICAgICAgICAgICAgICAgICAgICAgID0gWyhhLDEpXQogICAgbWl4IGEgKGJuQChiLG4pOmJzKSB8IGEgPT0gYiAgICA9IChiLG4rMSk6YnMKICAgICAgICAgICAgICAgICAgICAgICAgfCBvdGhlcndpc2UgPSBibiA6IG1peCBhIGJzCgpwZXJtQmFnIDo6IEJhZyBhIC0+IFtbYV1dCnBlcm1CYWcgW10gPSBbW11dCnBlcm1CYWcgYnMgPSBjb25jYXRNYXAgKFwoZixjcykgLT4gbWFwIChmOikgJCBwZXJtQmFnIGNzKSAuIG9uZU9mRWFjaCAkIGJzCiAgd2hlcmUKICAgIG9uZU9mRWFjaCBbXSA9IFtdCiAgICBvbmVPZkVhY2ggKGFuQChhLG4pOmJzKSA9CiAgICAgICAgbGV0IGJzJyA9IGlmIG4gPT0gMSB0aGVuIGJzIGVsc2UgKGEsbi0xKTpicwogICAgICAgIGluIChhLGJzJykgOiBtYXBTbmQgKGFuOikgKG9uZU9mRWFjaCBicykKICAgIAogICAgYXBTbmQgZiAoYSxiKSA9IChhLCBmIGIpCiAgICBtYXBTbmQgPSBtYXAgLiBhcFNuZAo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LWhhc2tlbGw8L2NvZGU+LjwvcD4KICA8L2JvZHk+CjwvaHRtbD4K]]></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[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJodG1sbWl4ZWQiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsKICB2YXIganNNb2RlID0gQ29kZU1pcnJvci5nZXRNb2RlKGNvbmZpZywgImphdmFzY3JpcHQiKTsKICB2YXIgY3NzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJjc3MiKTsKCiAgZnVuY3Rpb24gaHRtbChzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmh0bWxTdGF0ZSk7CiAgICBpZiAoc3R5bGUgPT0gInhtbC10YWciICYmIHN0cmVhbS5jdXJyZW50KCkgPT0gIj4iICYmIHN0YXRlLmh0bWxTdGF0ZS5jb250ZXh0KSB7CiAgICAgIGlmICgvXnNjcmlwdCQvaS50ZXN0KHN0YXRlLmh0bWxTdGF0ZS5jb250ZXh0LnRhZ05hbWUpKSB7CiAgICAgICAgc3RhdGUudG9rZW4gPSBqYXZhc2NyaXB0OwogICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBqc01vZGUuc3RhcnRTdGF0ZShodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbFN0YXRlLCAiIikpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKC9ec3R5bGUkL2kudGVzdChzdGF0ZS5odG1sU3RhdGUuY29udGV4dC50YWdOYW1lKSkgewogICAgICAgIHN0YXRlLnRva2VuID0gY3NzOwogICAgICAgIHN0YXRlLmxvY2FsU3RhdGUgPSBjc3NNb2RlLnN0YXJ0U3RhdGUoaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgIiIpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0eWxlOwogIH0KICBmdW5jdGlvbiBtYXliZUJhY2t1cChzdHJlYW0sIHBhdCwgc3R5bGUpIHsKICAgIHZhciBjdXIgPSBzdHJlYW0uY3VycmVudCgpOwogICAgdmFyIGNsb3NlID0gY3VyLnNlYXJjaChwYXQpOwogICAgaWYgKGNsb3NlID4gLTEpIHN0cmVhbS5iYWNrVXAoY3VyLmxlbmd0aCAtIGNsb3NlKTsKICAgIHJldHVybiBzdHlsZTsKICB9CiAgZnVuY3Rpb24gamF2YXNjcmlwdChzdHJlYW0sIHN0YXRlKSB7CiAgICBpZiAoc3RyZWFtLm1hdGNoKC9ePFwvXHMqc2NyaXB0XHMqPi9pLCBmYWxzZSkpIHsKICAgICAgc3RhdGUudG9rZW4gPSBodG1sOwogICAgICBzdGF0ZS5jdXJTdGF0ZSA9IG51bGw7CiAgICAgIHJldHVybiBodG1sKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgcmV0dXJuIG1heWJlQmFja3VwKHN0cmVhbSwgLzxcL1xzKnNjcmlwdFxzKj4vLAogICAgICAgICAgICAgICAgICAgICAgIGpzTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpKTsKICB9CiAgZnVuY3Rpb24gY3NzKHN0cmVhbSwgc3RhdGUpIHsKICAgIGlmIChzdHJlYW0ubWF0Y2goL148XC9ccypzdHlsZVxzKj4vaSwgZmFsc2UpKSB7CiAgICAgIHN0YXRlLnRva2VuID0gaHRtbDsKICAgICAgc3RhdGUubG9jYWxTdGF0ZSA9IG51bGw7CiAgICAgIHJldHVybiBodG1sKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgcmV0dXJuIG1heWJlQmFja3VwKHN0cmVhbSwgLzxcL1xzKnN0eWxlXHMqPi8sCiAgICAgICAgICAgICAgICAgICAgICAgY3NzTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmxvY2FsU3RhdGUpKTsKICB9CgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXRlID0gaHRtbE1vZGUuc3RhcnRTdGF0ZSgpOwogICAgICByZXR1cm4ge3Rva2VuOiBodG1sLCBsb2NhbFN0YXRlOiBudWxsLCBodG1sU3RhdGU6IHN0YXRlfTsKICAgIH0sCgogICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICBpZiAoc3RhdGUubG9jYWxTdGF0ZSkKICAgICAgICB2YXIgbG9jYWwgPSBDb2RlTWlycm9yLmNvcHlTdGF0ZShzdGF0ZS50b2tlbiA9PSBjc3MgPyBjc3NNb2RlIDoganNNb2RlLCBzdGF0ZS5sb2NhbFN0YXRlKTsKICAgICAgcmV0dXJuIHt0b2tlbjogc3RhdGUudG9rZW4sIGxvY2FsU3RhdGU6IGxvY2FsLCBodG1sU3RhdGU6IENvZGVNaXJyb3IuY29weVN0YXRlKGh0bWxNb2RlLCBzdGF0ZS5odG1sU3RhdGUpfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuKHN0cmVhbSwgc3RhdGUpOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgaWYgKHN0YXRlLnRva2VuID09IGh0bWwgfHwgL15ccyo8XC8vLnRlc3QodGV4dEFmdGVyKSkKICAgICAgICByZXR1cm4gaHRtbE1vZGUuaW5kZW50KHN0YXRlLmh0bWxTdGF0ZSwgdGV4dEFmdGVyKTsKICAgICAgZWxzZSBpZiAoc3RhdGUudG9rZW4gPT0gamF2YXNjcmlwdCkKICAgICAgICByZXR1cm4ganNNb2RlLmluZGVudChzdGF0ZS5sb2NhbFN0YXRlLCB0ZXh0QWZ0ZXIpOwogICAgICBlbHNlCiAgICAgICAgcmV0dXJuIGNzc01vZGUuaW5kZW50KHN0YXRlLmxvY2FsU3RhdGUsIHRleHRBZnRlcik7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICIve306IgogIH0KfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIsICJodG1sbWl4ZWQiKTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/htmlmixed/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSFRNTCBtaXhlZCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLi4veG1sL3htbC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL3htbC94bWwuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9qYXZhc2NyaXB0L2phdmFzY3JpcHQuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi9jc3MvY3NzLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vY3NzL2Nzcy5jc3MiPgogICAgPHNjcmlwdCBzcmM9Imh0bWxtaXhlZC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2Nzcy9kb2NzLmNzcyI+CiAgICA8c3R5bGU+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEhUTUwgbWl4ZWQgbW9kZTwvaDE+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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogSmF2YVNjcmlwdCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9ImphdmFzY3JpcHQuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IEphdmFTY3JpcHQgbW9kZTwvaDE+Cgo8ZGl2Pjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+Ci8vIERlbW8gY29kZSAodGhlIGFjdHVhbCBuZXcgcGFyc2VyIGNoYXJhY3RlciBzdHJlYW0gaW1wbGVtZW50YXRpb24pCgpmdW5jdGlvbiBTdHJpbmdTdHJlYW0oc3RyaW5nKSB7CiAgdGhpcy5wb3MgPSAwOwogIHRoaXMuc3RyaW5nID0gc3RyaW5nOwp9CgpTdHJpbmdTdHJlYW0ucHJvdG90eXBlID0gewogIGRvbmU6IGZ1bmN0aW9uKCkge3JldHVybiB0aGlzLnBvcyA+PSB0aGlzLnN0cmluZy5sZW5ndGg7fSwKICBwZWVrOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTt9LAogIG5leHQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHRoaXMucG9zICZsdDsgdGhpcy5zdHJpbmcubGVuZ3RoKQogICAgICByZXR1cm4gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKyspOwogIH0sCiAgZWF0OiBmdW5jdGlvbihtYXRjaCkgewogICAgdmFyIGNoID0gdGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKTsKICAgIGlmICh0eXBlb2YgbWF0Y2ggPT0gInN0cmluZyIpIHZhciBvayA9IGNoID09IG1hdGNoOwogICAgZWxzZSB2YXIgb2sgPSBjaCAmYW1wOyZhbXA7IG1hdGNoLnRlc3QgPyBtYXRjaC50ZXN0KGNoKSA6IG1hdGNoKGNoKTsKICAgIGlmIChvaykge3RoaXMucG9zKys7IHJldHVybiBjaDt9CiAgfSwKICBlYXRXaGlsZTogZnVuY3Rpb24obWF0Y2gpIHsKICAgIHZhciBzdGFydCA9IHRoaXMucG9zOwogICAgd2hpbGUgKHRoaXMuZWF0KG1hdGNoKSk7CiAgICBpZiAodGhpcy5wb3MgPiBzdGFydCkgcmV0dXJuIHRoaXMuc3RyaW5nLnNsaWNlKHN0YXJ0LCB0aGlzLnBvcyk7CiAgfSwKICBiYWNrVXA6IGZ1bmN0aW9uKG4pIHt0aGlzLnBvcyAtPSBuO30sCiAgY29sdW1uOiBmdW5jdGlvbigpIHtyZXR1cm4gdGhpcy5wb3M7fSwKICBlYXRTcGFjZTogZnVuY3Rpb24oKSB7CiAgICB2YXIgc3RhcnQgPSB0aGlzLnBvczsKICAgIHdoaWxlICgvXHMvLnRlc3QodGhpcy5zdHJpbmcuY2hhckF0KHRoaXMucG9zKSkpIHRoaXMucG9zKys7CiAgICByZXR1cm4gdGhpcy5wb3MgLSBzdGFydDsKICB9LAogIG1hdGNoOiBmdW5jdGlvbihwYXR0ZXJuLCBjb25zdW1lLCBjYXNlSW5zZW5zaXRpdmUpIHsKICAgIGlmICh0eXBlb2YgcGF0dGVybiA9PSAic3RyaW5nIikgewogICAgICBmdW5jdGlvbiBjYXNlZChzdHIpIHtyZXR1cm4gY2FzZUluc2Vuc2l0aXZlID8gc3RyLnRvTG93ZXJDYXNlKCkgOiBzdHI7fQogICAgICBpZiAoY2FzZWQodGhpcy5zdHJpbmcpLmluZGV4T2YoY2FzZWQocGF0dGVybiksIHRoaXMucG9zKSA9PSB0aGlzLnBvcykgewogICAgICAgIGlmIChjb25zdW1lICE9PSBmYWxzZSkgdGhpcy5wb3MgKz0gc3RyLmxlbmd0aDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIHZhciBtYXRjaCA9IHRoaXMuc3RyaW5nLnNsaWNlKHRoaXMucG9zKS5tYXRjaChwYXR0ZXJuKTsKICAgICAgaWYgKG1hdGNoICZhbXA7JmFtcDsgY29uc3VtZSAhPT0gZmFsc2UpIHRoaXMucG9zICs9IG1hdGNoWzBdLmxlbmd0aDsKICAgICAgcmV0dXJuIG1hdGNoOwogICAgfQogIH0KfTsKPC90ZXh0YXJlYT48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5KYXZhU2NyaXB0IG1vZGUgc3VwcG9ydHMgYSBzaW5nbGUgY29uZmlndXJhdGlvbgogICAgb3B0aW9uLCA8Y29kZT5qc29uPC9jb2RlPiwgd2hpY2ggd2lsbCBzZXQgdGhlIG1vZGUgdG8gZXhwZWN0IEpTT04KICAgIGRhdGEgcmF0aGVyIHRoYW4gYSBKYXZhU2NyaXB0IHByb2dyYW0uPC9wPgoKICAgIDxwPjxzdHJvbmc+TUlNRSB0eXBlcyBkZWZpbmVkOjwvc3Ryb25nPiA8Y29kZT50ZXh0L2phdmFzY3JpcHQ8L2NvZGU+LCA8Y29kZT5hcHBsaWNhdGlvbi9qc29uPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/javascript.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5qcy1rZXl3b3JkIHtjb2xvcjogIzkwYjt9CnNwYW4uanMtYXRvbSB7Y29sb3I6ICMyOTE7fQpzcGFuLmpzLXZhcmlhYmxlZGVmIHtjb2xvcjogIzAwZjt9CnNwYW4uanMtbG9jYWx2YXJpYWJsZSB7Y29sb3I6ICMwNDk7fQpzcGFuLmpzLWNvbW1lbnQge2NvbG9yOiAjYTcwO30Kc3Bhbi5qcy1zdHJpbmcge2NvbG9yOiAjYTIyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/javascript/javascript.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJqYXZhc2NyaXB0IiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICB2YXIgaW5kZW50VW5pdCA9IGNvbmZpZy5pbmRlbnRVbml0OwogIHZhciBqc29uTW9kZSA9IHBhcnNlckNvbmZpZy5qc29uOwoKICAvLyBUb2tlbml6ZXIKCiAgdmFyIGtleXdvcmRzID0gZnVuY3Rpb24oKXsKICAgIGZ1bmN0aW9uIGt3KHR5cGUpIHtyZXR1cm4ge3R5cGU6IHR5cGUsIHN0eWxlOiAianMta2V5d29yZCJ9O30KICAgIHZhciBBID0ga3coImtleXdvcmQgYSIpLCBCID0ga3coImtleXdvcmQgYiIpLCBDID0ga3coImtleXdvcmQgYyIpOwogICAgdmFyIG9wZXJhdG9yID0ga3coIm9wZXJhdG9yIiksIGF0b20gPSB7dHlwZTogImF0b20iLCBzdHlsZTogImpzLWF0b20ifTsKICAgIHJldHVybiB7CiAgICAgICJpZiI6IEEsICJ3aGlsZSI6IEEsICJ3aXRoIjogQSwgImVsc2UiOiBCLCAiZG8iOiBCLCAidHJ5IjogQiwgImZpbmFsbHkiOiBCLAogICAgICAicmV0dXJuIjogQywgImJyZWFrIjogQywgImNvbnRpbnVlIjogQywgIm5ldyI6IEMsICJkZWxldGUiOiBDLCAidGhyb3ciOiBDLAogICAgICAidmFyIjoga3coInZhciIpLCAiZnVuY3Rpb24iOiBrdygiZnVuY3Rpb24iKSwgImNhdGNoIjoga3coImNhdGNoIiksCiAgICAgICJmb3IiOiBrdygiZm9yIiksICJzd2l0Y2giOiBrdygic3dpdGNoIiksICJjYXNlIjoga3coImNhc2UiKSwgImRlZmF1bHQiOiBrdygiZGVmYXVsdCIpLAogICAgICAiaW4iOiBvcGVyYXRvciwgInR5cGVvZiI6IG9wZXJhdG9yLCAiaW5zdGFuY2VvZiI6IG9wZXJhdG9yLAogICAgICAidHJ1ZSI6IGF0b20sICJmYWxzZSI6IGF0b20sICJudWxsIjogYXRvbSwgInVuZGVmaW5lZCI6IGF0b20sICJOYU4iOiBhdG9tLCAiSW5maW5pdHkiOiBhdG9tCiAgICB9OwogIH0oKTsKCiAgdmFyIGlzT3BlcmF0b3JDaGFyID0gL1srXC0qJiU9PD4hP3xdLzsKCiAgZnVuY3Rpb24gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgZikgewogICAgc3RhdGUudG9rZW5pemUgPSBmOwogICAgcmV0dXJuIGYoc3RyZWFtLCBzdGF0ZSk7CiAgfQoKICBmdW5jdGlvbiBuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBlbmQpIHsKICAgIHZhciBlc2NhcGVkID0gZmFsc2UsIG5leHQ7CiAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgIGlmIChuZXh0ID09IGVuZCAmJiAhZXNjYXBlZCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZCAmJiBuZXh0ID09ICJcXCI7CiAgICB9CiAgICByZXR1cm4gZXNjYXBlZDsKICB9CgogIC8vIFVzZWQgYXMgc2NyYXRjaCB2YXJpYWJsZXMgdG8gY29tbXVuaWNhdGUgbXVsdGlwbGUgdmFsdWVzIHdpdGhvdXQKICAvLyBjb25zaW5nIHVwIHRvbnMgb2Ygb2JqZWN0cy4KICB2YXIgdHlwZSwgY29udGVudDsKICBmdW5jdGlvbiByZXQodHAsIHN0eWxlLCBjb250KSB7CiAgICB0eXBlID0gdHA7IGNvbnRlbnQgPSBjb250OwogICAgcmV0dXJuIHN0eWxlOwogIH0KCiAgZnVuY3Rpb24ganNUb2tlbkJhc2Uoc3RyZWFtLCBzdGF0ZSkgewogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAnIicgfHwgY2ggPT0gIiciKQogICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwganNUb2tlblN0cmluZyhjaCkpOwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcOlwuXS8udGVzdChjaCkpCiAgICAgIHJldHVybiByZXQoY2gpOwogICAgZWxzZSBpZiAoY2ggPT0gIjAiICYmIHN0cmVhbS5lYXQoL3gvaSkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXGRhLWZdL2kpOwogICAgICByZXR1cm4gcmV0KCJudW1iZXIiLCAianMtYXRvbSIpOwogICAgfSAgICAgIAogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0ubWF0Y2goL15cZCooPzpcLlxkKik/KD86ZVsrXC1dP1xkKyk/Lyk7CiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJqcy1hdG9tIik7CiAgICB9CiAgICBlbHNlIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCBqc1Rva2VuQ29tbWVudCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc3RyZWFtLmVhdCgiLyIpKSB7CiAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAianMtY29tbWVudCIpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0YXRlLnJlQWxsb3dlZCkgewogICAgICAgIG5leHRVbnRpbFVuZXNjYXBlZChzdHJlYW0sICIvIik7CiAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bZ2lteV0vKTsgLy8gJ3knIGlzICJzdGlja3kiIG9wdGlvbiBpbiBNb3ppbGxhCiAgICAgICAgcmV0dXJuIHJldCgicmVnZXhwIiwgImpzLXN0cmluZyIpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVudCgpKTsKICAgICAgfQogICAgfQogICAgZWxzZSBpZiAoaXNPcGVyYXRvckNoYXIudGVzdChjaCkpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKGlzT3BlcmF0b3JDaGFyKTsKICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCBudWxsLCBzdHJlYW0uY3VycmVudCgpKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgdmFyIHdvcmQgPSBzdHJlYW0uY3VycmVudCgpLCBrbm93biA9IGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHdvcmQpICYmIGtleXdvcmRzW3dvcmRdOwogICAgICByZXR1cm4ga25vd24gPyByZXQoa25vd24udHlwZSwga25vd24uc3R5bGUsIHdvcmQpIDoKICAgICAgICAgICAgICAgICAgICAgcmV0KCJ2YXJpYWJsZSIsICJqcy12YXJpYWJsZSIsIHdvcmQpOwogICAgfQogIH0KCiAgZnVuY3Rpb24ganNUb2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKCFuZXh0VW50aWxVbmVzY2FwZWQoc3RyZWFtLCBxdW90ZSkpCiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBqc1Rva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgImpzLXN0cmluZyIpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIGpzVG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0ganNUb2tlbkJhc2U7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbWF5YmVFbmQgPSAoY2ggPT0gIioiKTsKICAgIH0KICAgIHJldHVybiByZXQoImNvbW1lbnQiLCAianMtY29tbWVudCIpOwogIH0KCiAgLy8gUGFyc2VyCgogIHZhciBhdG9taWNUeXBlcyA9IHsiYXRvbSI6IHRydWUsICJudW1iZXIiOiB0cnVlLCAidmFyaWFibGUiOiB0cnVlLCAic3RyaW5nIjogdHJ1ZSwgInJlZ2V4cCI6IHRydWV9OwoKICBmdW5jdGlvbiBKU0xleGljYWwoaW5kZW50ZWQsIGNvbHVtbiwgdHlwZSwgYWxpZ24sIHByZXYsIGluZm8pIHsKICAgIHRoaXMuaW5kZW50ZWQgPSBpbmRlbnRlZDsKICAgIHRoaXMuY29sdW1uID0gY29sdW1uOwogICAgdGhpcy50eXBlID0gdHlwZTsKICAgIHRoaXMucHJldiA9IHByZXY7CiAgICB0aGlzLmluZm8gPSBpbmZvOwogICAgaWYgKGFsaWduICE9IG51bGwpIHRoaXMuYWxpZ24gPSBhbGlnbjsKICB9CgogIGZ1bmN0aW9uIGluU2NvcGUoc3RhdGUsIHZhcm5hbWUpIHsKICAgIGZvciAodmFyIHYgPSBzdGF0ZS5sb2NhbFZhcnM7IHY7IHYgPSB2Lm5leHQpCiAgICAgIGlmICh2Lm5hbWUgPT0gdmFybmFtZSkgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKSB7CiAgICB2YXIgY2MgPSBzdGF0ZS5jYzsKICAgIC8vIENvbW11bmljYXRlIG91ciBjb250ZXh0IHRvIHRoZSBjb21iaW5hdG9ycy4KICAgIC8vIChMZXNzIHdhc3RlZnVsIHRoYW4gY29uc2luZyB1cCBhIGh1bmRyZWQgY2xvc3VyZXMgb24gZXZlcnkgY2FsbC4pCiAgICBjeC5zdGF0ZSA9IHN0YXRlOyBjeC5zdHJlYW0gPSBzdHJlYW07IGN4Lm1hcmtlZCA9IG51bGwsIGN4LmNjID0gY2M7CiAgCiAgICBpZiAoIXN0YXRlLmxleGljYWwuaGFzT3duUHJvcGVydHkoImFsaWduIikpCiAgICAgIHN0YXRlLmxleGljYWwuYWxpZ24gPSB0cnVlOwoKICAgIHdoaWxlKHRydWUpIHsKICAgICAgdmFyIGNvbWJpbmF0b3IgPSBjYy5sZW5ndGggPyBjYy5wb3AoKSA6IGpzb25Nb2RlID8gZXhwcmVzc2lvbiA6IHN0YXRlbWVudDsKICAgICAgaWYgKGNvbWJpbmF0b3IodHlwZSwgY29udGVudCkpIHsKICAgICAgICB3aGlsZShjYy5sZW5ndGggJiYgY2NbY2MubGVuZ3RoIC0gMV0ubGV4KQogICAgICAgICAgY2MucG9wKCkoKTsKICAgICAgICBpZiAoY3gubWFya2VkKSByZXR1cm4gY3gubWFya2VkOwogICAgICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIgJiYgaW5TY29wZShzdGF0ZSwgY29udGVudCkpIHJldHVybiAianMtbG9jYWx2YXJpYWJsZSI7CiAgICAgICAgcmV0dXJuIHN0eWxlOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBDb21iaW5hdG9yIHV0aWxzCgogIHZhciBjeCA9IHtzdGF0ZTogbnVsbCwgY29sdW1uOiBudWxsLCBtYXJrZWQ6IG51bGwsIGNjOiBudWxsfTsKICBmdW5jdGlvbiBwYXNzKCkgewogICAgZm9yICh2YXIgaSA9IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgY3guY2MucHVzaChhcmd1bWVudHNbaV0pOwogIH0KICBmdW5jdGlvbiBjb250KCkgewogICAgcGFzcy5hcHBseShudWxsLCBhcmd1bWVudHMpOwogICAgcmV0dXJuIHRydWU7CiAgfQogIGZ1bmN0aW9uIHJlZ2lzdGVyKHZhcm5hbWUpIHsKICAgIHZhciBzdGF0ZSA9IGN4LnN0YXRlOwogICAgaWYgKHN0YXRlLmNvbnRleHQpIHsKICAgICAgY3gubWFya2VkID0gImpzLXZhcmlhYmxlZGVmIjsKICAgICAgZm9yICh2YXIgdiA9IHN0YXRlLmxvY2FsVmFyczsgdjsgdiA9IHYubmV4dCkKICAgICAgICBpZiAodi5uYW1lID09IHZhcm5hbWUpIHJldHVybjsKICAgICAgc3RhdGUubG9jYWxWYXJzID0ge25hbWU6IHZhcm5hbWUsIG5leHQ6IHN0YXRlLmxvY2FsVmFyc307CiAgICB9CiAgfQoKICAvLyBDb21iaW5hdG9ycwoKICB2YXIgZGVmYXVsdFZhcnMgPSB7bmFtZTogInRoaXMiLCBuZXh0OiB7bmFtZTogImFyZ3VtZW50cyJ9fTsKICBmdW5jdGlvbiBwdXNoY29udGV4dCgpIHsKICAgIGlmICghY3guc3RhdGUuY29udGV4dCkgY3guc3RhdGUubG9jYWxWYXJzID0gZGVmYXVsdFZhcnM7CiAgICBjeC5zdGF0ZS5jb250ZXh0ID0ge3ByZXY6IGN4LnN0YXRlLmNvbnRleHQsIHZhcnM6IGN4LnN0YXRlLmxvY2FsVmFyc307CiAgfQogIGZ1bmN0aW9uIHBvcGNvbnRleHQoKSB7CiAgICBjeC5zdGF0ZS5sb2NhbFZhcnMgPSBjeC5zdGF0ZS5jb250ZXh0LnZhcnM7CiAgICBjeC5zdGF0ZS5jb250ZXh0ID0gY3guc3RhdGUuY29udGV4dC5wcmV2OwogIH0KICBmdW5jdGlvbiBwdXNobGV4KHR5cGUsIGluZm8pIHsKICAgIHZhciByZXN1bHQgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIHN0YXRlID0gY3guc3RhdGU7CiAgICAgIHN0YXRlLmxleGljYWwgPSBuZXcgSlNMZXhpY2FsKHN0YXRlLmluZGVudGVkLCBjeC5zdHJlYW0uY29sdW1uKCksIHR5cGUsIG51bGwsIHN0YXRlLmxleGljYWwsIGluZm8pCiAgICB9OwogICAgcmVzdWx0LmxleCA9IHRydWU7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBwb3BsZXgoKSB7CiAgICB2YXIgc3RhdGUgPSBjeC5zdGF0ZTsKICAgIGlmIChzdGF0ZS5sZXhpY2FsLnByZXYpIHsKICAgICAgaWYgKHN0YXRlLmxleGljYWwudHlwZSA9PSAiKSIpCiAgICAgICAgc3RhdGUuaW5kZW50ZWQgPSBzdGF0ZS5sZXhpY2FsLmluZGVudGVkOwogICAgICBzdGF0ZS5sZXhpY2FsID0gc3RhdGUubGV4aWNhbC5wcmV2OwogICAgfQogIH0KICBwb3BsZXgubGV4ID0gdHJ1ZTsKCiAgZnVuY3Rpb24gZXhwZWN0KHdhbnRlZCkgewogICAgcmV0dXJuIGZ1bmN0aW9uIGV4cGVjdGluZyh0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IHdhbnRlZCkgcmV0dXJuIGNvbnQoKTsKICAgICAgZWxzZSBpZiAod2FudGVkID09ICI7IikgcmV0dXJuIHBhc3MoKTsKICAgICAgZWxzZSByZXR1cm4gY29udChhcmd1bWVudHMuY2FsbGVlKTsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBzdGF0ZW1lbnQodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhciIpIHJldHVybiBjb250KHB1c2hsZXgoInZhcmRlZiIpLCB2YXJkZWYxLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGEiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cHJlc3Npb24sIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJrZXl3b3JkIGIiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBibG9jaywgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICI7IikgcmV0dXJuIGNvbnQoKTsKICAgIGlmICh0eXBlID09ICJmdW5jdGlvbiIpIHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTsKICAgIGlmICh0eXBlID09ICJmb3IiKSByZXR1cm4gY29udChwdXNobGV4KCJmb3JtIiksIGV4cGVjdCgiKCIpLCBwdXNobGV4KCIpIiksIGZvcnNwZWMxLCBleHBlY3QoIikiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3BsZXgsIHN0YXRlbWVudCwgcG9wbGV4KTsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJldHVybiBjb250KHB1c2hsZXgoInN0YXQiKSwgbWF5YmVsYWJlbCk7CiAgICBpZiAodHlwZSA9PSAic3dpdGNoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiZm9ybSIpLCBleHByZXNzaW9uLCBwdXNobGV4KCJ9IiwgInN3aXRjaCIpLCBleHBlY3QoInsiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9jaywgcG9wbGV4LCBwb3BsZXgpOwogICAgaWYgKHR5cGUgPT0gImNhc2UiKSByZXR1cm4gY29udChleHByZXNzaW9uLCBleHBlY3QoIjoiKSk7CiAgICBpZiAodHlwZSA9PSAiZGVmYXVsdCIpIHJldHVybiBjb250KGV4cGVjdCgiOiIpKTsKICAgIGlmICh0eXBlID09ICJjYXRjaCIpIHJldHVybiBjb250KHB1c2hsZXgoImZvcm0iKSwgcHVzaGNvbnRleHQsIGV4cGVjdCgiKCIpLCBmdW5hcmcsIGV4cGVjdCgiKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LCBwb3BsZXgsIHBvcGNvbnRleHQpOwogICAgcmV0dXJuIHBhc3MocHVzaGxleCgic3RhdCIpLCBleHByZXNzaW9uLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICB9CiAgZnVuY3Rpb24gZXhwcmVzc2lvbih0eXBlKSB7CiAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gImZ1bmN0aW9uIikgcmV0dXJuIGNvbnQoZnVuY3Rpb25kZWYpOwogICAgaWYgKHR5cGUgPT0gImtleXdvcmQgYyIpIHJldHVybiBjb250KGV4cHJlc3Npb24pOwogICAgaWYgKHR5cGUgPT0gIigiKSByZXR1cm4gY29udChwdXNobGV4KCIpIiksIGV4cHJlc3Npb24sIGV4cGVjdCgiKSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgY29tbWFzZXAoZXhwcmVzc2lvbiwgIl0iKSwgcG9wbGV4LCBtYXliZW9wZXJhdG9yKTsKICAgIGlmICh0eXBlID09ICJ7IikgcmV0dXJuIGNvbnQocHVzaGxleCgifSIpLCBjb21tYXNlcChvYmpwcm9wLCAifSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gbWF5YmVvcGVyYXRvcih0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIiAmJiAvXCtcK3wtLS8udGVzdCh2YWx1ZSkpIHJldHVybiBjb250KG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIm9wZXJhdG9yIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybjsKICAgIGlmICh0eXBlID09ICIoIikgcmV0dXJuIGNvbnQocHVzaGxleCgiKSIpLCBjb21tYXNlcChleHByZXNzaW9uLCAiKSIpLCBwb3BsZXgsIG1heWJlb3BlcmF0b3IpOwogICAgaWYgKHR5cGUgPT0gIi4iKSByZXR1cm4gY29udChwcm9wZXJ0eSwgbWF5YmVvcGVyYXRvcik7CiAgICBpZiAodHlwZSA9PSAiWyIpIHJldHVybiBjb250KHB1c2hsZXgoIl0iKSwgZXhwcmVzc2lvbiwgZXhwZWN0KCJdIiksIHBvcGxleCwgbWF5YmVvcGVyYXRvcik7CiAgfQogIGZ1bmN0aW9uIG1heWJlbGFiZWwodHlwZSkgewogICAgaWYgKHR5cGUgPT0gIjoiKSByZXR1cm4gY29udChwb3BsZXgsIHN0YXRlbWVudCk7CiAgICByZXR1cm4gcGFzcyhtYXliZW9wZXJhdG9yLCBleHBlY3QoIjsiKSwgcG9wbGV4KTsKICB9CiAgZnVuY3Rpb24gcHJvcGVydHkodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIikge2N4Lm1hcmtlZCA9ICJqcy1wcm9wZXJ0eSI7IHJldHVybiBjb250KCk7fQogIH0KICBmdW5jdGlvbiBvYmpwcm9wKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIGN4Lm1hcmtlZCA9ICJqcy1wcm9wZXJ0eSI7CiAgICBpZiAoYXRvbWljVHlwZXMuaGFzT3duUHJvcGVydHkodHlwZSkpIHJldHVybiBjb250KGV4cGVjdCgiOiIpLCBleHByZXNzaW9uKTsKICB9CiAgZnVuY3Rpb24gY29tbWFzZXAod2hhdCwgZW5kKSB7CiAgICBmdW5jdGlvbiBwcm9jZWVkKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgPT0gIiwiKSByZXR1cm4gY29udCh3aGF0LCBwcm9jZWVkKTsKICAgICAgaWYgKHR5cGUgPT0gZW5kKSByZXR1cm4gY29udCgpOwogICAgICByZXR1cm4gY29udChleHBlY3QoZW5kKSk7CiAgICB9CiAgICByZXR1cm4gZnVuY3Rpb24gY29tbWFTZXBhcmF0ZWQodHlwZSkgewogICAgICBpZiAodHlwZSA9PSBlbmQpIHJldHVybiBjb250KCk7CiAgICAgIGVsc2UgcmV0dXJuIHBhc3Mod2hhdCwgcHJvY2VlZCk7CiAgICB9OwogIH0KICBmdW5jdGlvbiBibG9jayh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAifSIpIHJldHVybiBjb250KCk7CiAgICByZXR1cm4gcGFzcyhzdGF0ZW1lbnQsIGJsb2NrKTsKICB9CiAgZnVuY3Rpb24gdmFyZGVmMSh0eXBlLCB2YWx1ZSkgewogICAgaWYgKHR5cGUgPT0gInZhcmlhYmxlIil7cmVnaXN0ZXIodmFsdWUpOyByZXR1cm4gY29udCh2YXJkZWYyKTt9CiAgICByZXR1cm4gY29udCgpOwogIH0KICBmdW5jdGlvbiB2YXJkZWYyKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gIj0iKSByZXR1cm4gY29udChleHByZXNzaW9uLCB2YXJkZWYyKTsKICAgIGlmICh0eXBlID09ICIsIikgcmV0dXJuIGNvbnQodmFyZGVmMSk7CiAgfQogIGZ1bmN0aW9uIGZvcnNwZWMxKHR5cGUpIHsKICAgIGlmICh0eXBlID09ICJ2YXIiKSByZXR1cm4gY29udCh2YXJkZWYxLCBmb3JzcGVjMik7CiAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybiBwYXNzKGZvcnNwZWMyKTsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHJldHVybiBjb250KGZvcm1heWJlaW4pOwogICAgcmV0dXJuIHBhc3MoZm9yc3BlYzIpOwogIH0KICBmdW5jdGlvbiBmb3JtYXliZWluKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gImluIikgcmV0dXJuIGNvbnQoZXhwcmVzc2lvbik7CiAgICByZXR1cm4gY29udChtYXliZW9wZXJhdG9yLCBmb3JzcGVjMik7CiAgfQogIGZ1bmN0aW9uIGZvcnNwZWMyKHR5cGUsIHZhbHVlKSB7CiAgICBpZiAodHlwZSA9PSAiOyIpIHJldHVybiBjb250KGZvcnNwZWMzKTsKICAgIGlmICh2YWx1ZSA9PSAiaW4iKSByZXR1cm4gY29udChleHByZXNzaW9uKTsKICAgIHJldHVybiBjb250KGV4cHJlc3Npb24sIGV4cGVjdCgiOyIpLCBmb3JzcGVjMyk7CiAgfQogIGZ1bmN0aW9uIGZvcnNwZWMzKHR5cGUpIHsKICAgIGlmICh0eXBlICE9ICIpIikgY29udChleHByZXNzaW9uKTsKICB9CiAgZnVuY3Rpb24gZnVuY3Rpb25kZWYodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KGZ1bmN0aW9uZGVmKTt9CiAgICBpZiAodHlwZSA9PSAiKCIpIHJldHVybiBjb250KHB1c2hsZXgoIikiKSwgcHVzaGNvbnRleHQsIGNvbW1hc2VwKGZ1bmFyZywgIikiKSwgcG9wbGV4LCBzdGF0ZW1lbnQsIHBvcGNvbnRleHQpOwogIH0KICBmdW5jdGlvbiBmdW5hcmcodHlwZSwgdmFsdWUpIHsKICAgIGlmICh0eXBlID09ICJ2YXJpYWJsZSIpIHtyZWdpc3Rlcih2YWx1ZSk7IHJldHVybiBjb250KCk7fQogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IGpzVG9rZW5CYXNlLAogICAgICAgIHJlQWxsb3dlZDogdHJ1ZSwKICAgICAgICBjYzogW10sCiAgICAgICAgbGV4aWNhbDogbmV3IEpTTGV4aWNhbCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJibG9jayIsIGZhbHNlKSwKICAgICAgICBsb2NhbFZhcnM6IG51bGwsCiAgICAgICAgY29udGV4dDogbnVsbCwKICAgICAgICBpbmRlbnRlZDogMAogICAgICB9OwogICAgfSwKCiAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgaWYgKCFzdGF0ZS5sZXhpY2FsLmhhc093blByb3BlcnR5KCJhbGlnbiIpKQogICAgICAgICAgc3RhdGUubGV4aWNhbC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgIH0KICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmICh0eXBlID09ICJjb21tZW50IikgcmV0dXJuIHN0eWxlOwogICAgICBzdGF0ZS5yZUFsbG93ZWQgPSB0eXBlID09ICJvcGVyYXRvciIgfHwgdHlwZSA9PSAia2V5d29yZCBjIiB8fCB0eXBlLm1hdGNoKC9eW1xbe31cKCw7Ol0kLyk7CiAgICAgIHJldHVybiBwYXJzZUpTKHN0YXRlLCBzdHlsZSwgdHlwZSwgY29udGVudCwgc3RyZWFtKTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSBqc1Rva2VuQmFzZSkgcmV0dXJuIDA7CiAgICAgIHZhciBmaXJzdENoYXIgPSB0ZXh0QWZ0ZXIgJiYgdGV4dEFmdGVyLmNoYXJBdCgwKSwgbGV4aWNhbCA9IHN0YXRlLmxleGljYWwsCiAgICAgICAgICB0eXBlID0gbGV4aWNhbC50eXBlLCBjbG9zaW5nID0gZmlyc3RDaGFyID09IHR5cGU7CiAgICAgIGlmICh0eXBlID09ICJ2YXJkZWYiKSByZXR1cm4gbGV4aWNhbC5pbmRlbnRlZCArIDQ7CiAgICAgIGVsc2UgaWYgKHR5cGUgPT0gImZvcm0iICYmIGZpcnN0Q2hhciA9PSAieyIpIHJldHVybiBsZXhpY2FsLmluZGVudGVkOwogICAgICBlbHNlIGlmICh0eXBlID09ICJzdGF0IiB8fCB0eXBlID09ICJmb3JtIikgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIGlmIChsZXhpY2FsLmluZm8gPT0gInN3aXRjaCIgJiYgIWNsb3NpbmcpCiAgICAgICAgcmV0dXJuIGxleGljYWwuaW5kZW50ZWQgKyAoL14oPzpjYXNlfGRlZmF1bHQpXGIvLnRlc3QodGV4dEFmdGVyKSA/IGluZGVudFVuaXQgOiAyICogaW5kZW50VW5pdCk7CiAgICAgIGVsc2UgaWYgKGxleGljYWwuYWxpZ24pIHJldHVybiBsZXhpY2FsLmNvbHVtbiArIChjbG9zaW5nID8gMCA6IDEpOwogICAgICBlbHNlIHJldHVybiBsZXhpY2FsLmluZGVudGVkICsgKGNsb3NpbmcgPyAwIDogaW5kZW50VW5pdCk7CiAgICB9LAoKICAgIGVsZWN0cmljQ2hhcnM6ICI6e30iCiAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvamF2YXNjcmlwdCIsICJqYXZhc2NyaXB0Iik7CkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24vanNvbiIsIHtuYW1lOiAiamF2YXNjcmlwdCIsIGpzb246IHRydWV9KTsK]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogUEhQIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIuLi94bWwveG1sLmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4veG1sL3htbC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2phdmFzY3JpcHQvamF2YXNjcmlwdC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2phdmFzY3JpcHQvamF2YXNjcmlwdC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL2Nzcy9jc3MuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jc3MvY3NzLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vY2xpa2UvY2xpa2UuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9jbGlrZS9jbGlrZS5jc3MiPgogICAgPHNjcmlwdCBzcmM9InBocC5qcyI+PC9zY3JpcHQ+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBQSFAgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgo8P3BocApmdW5jdGlvbiBoZWxsbygkd2hvKSB7CglyZXR1cm4gIkhlbGxvICIgLiAkd2hvOwp9Cj8+CjxwPlRoZSBwcm9ncmFtIHNheXMgPD89IGhlbGxvKCJXb3JsZCIpID8+LjwvcD4KPHNjcmlwdD4KCWFsZXJ0KCJBbmQgaGVyZSBpcyBzb21lIEpTIGNvZGUiKTsgLy8gYWxzbyBjb2xvcmVkCjwvc2NyaXB0Pgo8L3RleHRhcmVhPjwvZm9ybT4KCiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCiAgICAgICAgbW9kZTogImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwIiwKICAgICAgICBpbmRlbnRVbml0OiA4LAogICAgICAgIGluZGVudFdpdGhUYWJzOiB0cnVlLAogICAgICAgIGVudGVyTW9kZTogImtlZXAiLAogICAgICAgIHRhYk1vZGU6ICJzaGlmdCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD5TaW1wbGUgSFRNTC9QSFAgbW9kZSBiYXNlZCBvbgogICAgdGhlIDxhIGhyZWY9Ii4uL2NsaWtlLyI+Qy1saWtlPC9hPiBtb2RlLiBEZXBlbmRzIG9uIFhNTCwKICAgIEphdmFTY3JpcHQsIENTUywgYW5kIEMtbGlrZSBtb2Rlcy48L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/php/php.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KGZ1bmN0aW9uKCkgewogIGZ1bmN0aW9uIGtleXdvcmRzKHN0cikgewogICAgdmFyIG9iaiA9IHt9LCB3b3JkcyA9IHN0ci5zcGxpdCgiICIpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3b3Jkcy5sZW5ndGg7ICsraSkgb2JqW3dvcmRzW2ldXSA9IHRydWU7CiAgICByZXR1cm4gb2JqOwogIH0KICB2YXIgcGhwS2V5d29yZHMgPQogICAga2V5d29yZHMoImFic3RyYWN0IGFuZCBhcnJheSBhcyBicmVhayBjYXNlIGNhdGNoIGNmdW5jdGlvbiBjbGFzcyBjbG9uZSBjb25zdCBjb250aW51ZSBkZWNsYXJlICIgKwogICAgICAgICAgICAgImRlZmF1bHQgZG8gZWxzZSBlbHNlaWYgZW5kZGVjbGFyZSBlbmRmb3IgZW5kZm9yZWFjaCBlbmRpZiBlbmRzd2l0Y2ggZW5kd2hpbGUgZXh0ZW5kcyAiICsKICAgICAgICAgICAgICJmaW5hbCBmb3IgZm9yZWFjaCBmdW5jdGlvbiBnbG9iYWwgZ290byBpZiBpbXBsZW1lbnRzIGludGVyZmFjZSBpbnN0YW5jZW9mIG5hbWVzcGFjZSAiICsKICAgICAgICAgICAgICJuZXcgb3IgcHJpdmF0ZSBwcm90ZWN0ZWQgcHVibGljIHN0YXRpYyBzd2l0Y2ggdGhyb3cgdHJ5IHVzZSB2YXIgd2hpbGUgeG9yIik7CgogIENvZGVNaXJyb3IuZGVmaW5lTW9kZSgicGhwIiwgZnVuY3Rpb24oY29uZmlnLCBwYXJzZXJDb25maWcpIHsKICAgIHZhciBodG1sTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJ0ZXh0L2h0bWwiKTsKICAgIHZhciBqc01vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCAidGV4dC9qYXZhc2NyaXB0Iik7CiAgICB2YXIgY3NzTW9kZSA9IENvZGVNaXJyb3IuZ2V0TW9kZShjb25maWcsICJ0ZXh0L2NzcyIpOwogICAgdmFyIHBocE1vZGUgPSBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCB7bmFtZTogImNsaWtlIiwga2V5d29yZHM6IHBocEtleXdvcmRzLCBtdWx0aUxpbmVTdHJpbmdzOiB0cnVlLCAkdmFyczogdHJ1ZX0pOwoKICAgIGZ1bmN0aW9uIGRpc3BhdGNoKHN0cmVhbSwgc3RhdGUpIHsgLy8gVE9ETyBvcGVuIFBIUCBpbnNpZGUgdGV4dC9jc3MKICAgICAgaWYgKHN0YXRlLmN1ck1vZGUgPT0gaHRtbE1vZGUpIHsKICAgICAgICB2YXIgc3R5bGUgPSBodG1sTW9kZS50b2tlbihzdHJlYW0sIHN0YXRlLmN1clN0YXRlKTsKICAgICAgICBpZiAoc3R5bGUgPT0gInhtbC1wcm9jZXNzaW5nIiAmJiAvXjxcPy8udGVzdChzdHJlYW0uY3VycmVudCgpKSkgewogICAgICAgICAgc3RhdGUuY3VyTW9kZSA9IHBocE1vZGU7CiAgICAgICAgICBzdGF0ZS5jdXJTdGF0ZSA9IHN0YXRlLnBocDsKICAgICAgICAgIHN0YXRlLmN1ckNsb3NlID0gL15cPz4vOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzdHlsZSA9PSAieG1sLXRhZyIgJiYgc3RyZWFtLmN1cnJlbnQoKSA9PSAiPiIgJiYgc3RhdGUuY3VyU3RhdGUuY29udGV4dCkgewogICAgICAgICAgaWYgKC9ec2NyaXB0JC9pLnRlc3Qoc3RhdGUuY3VyU3RhdGUuY29udGV4dC50YWdOYW1lKSkgewogICAgICAgICAgICBzdGF0ZS5jdXJNb2RlID0ganNNb2RlOwogICAgICAgICAgICBzdGF0ZS5jdXJTdGF0ZSA9IGpzTW9kZS5zdGFydFN0YXRlKGh0bWxNb2RlLmluZGVudChzdGF0ZS5jdXJTdGF0ZSwgIiIpKTsKICAgICAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSAvXjxcL1xzKnNjcmlwdFxzKj4vaTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKC9ec3R5bGUkL2kudGVzdChzdGF0ZS5jdXJTdGF0ZS5jb250ZXh0LnRhZ05hbWUpKSB7CiAgICAgICAgICAgIHN0YXRlLmN1ck1vZGUgPSBjc3NNb2RlOwogICAgICAgICAgICBzdGF0ZS5jdXJTdGF0ZSA9IGNzc01vZGUuc3RhcnRTdGF0ZShodG1sTW9kZS5pbmRlbnQoc3RhdGUuY3VyU3RhdGUsICIiKSk7CiAgICAgICAgICAgIHN0YXRlLmN1ckNsb3NlID0gIC9ePFwvXHMqc3R5bGVccyo+L2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgfQogICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goc3RhdGUuY3VyQ2xvc2UsIGZhbHNlKSkgewogICAgICAgIHN0YXRlLmN1ck1vZGUgPSBodG1sTW9kZTsKICAgICAgICBzdGF0ZS5jdXJTdGF0ZSA9IHN0YXRlLmh0bWw7CiAgICAgICAgc3RhdGUuY3VyQ2xvc2UgPSBudWxsOwogICAgICAgIHJldHVybiBkaXNwYXRjaChzdHJlYW0sIHN0YXRlKTsKICAgICAgfQogICAgICBlbHNlIHJldHVybiBzdGF0ZS5jdXJNb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuY3VyU3RhdGUpOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBodG1sID0gaHRtbE1vZGUuc3RhcnRTdGF0ZSgpOwogICAgICAgIHJldHVybiB7aHRtbDogaHRtbCwKICAgICAgICAgICAgICAgIHBocDogcGhwTW9kZS5zdGFydFN0YXRlKCksCiAgICAgICAgICAgICAgICBjdXJNb2RlOiBodG1sTW9kZSwKICAgICAgICAgICAgICAgIGN1clN0YXRlOiBodG1sLAogICAgICAgICAgICAgICAgY3VyQ2xvc2U6IG51bGx9CiAgICAgIH0sCgogICAgICBjb3B5U3RhdGU6IGZ1bmN0aW9uKHN0YXRlKSB7CiAgICAgICAgdmFyIGh0bWwgPSBzdGF0ZS5odG1sLCBodG1sTmV3ID0gQ29kZU1pcnJvci5jb3B5U3RhdGUoaHRtbE1vZGUsIGh0bWwpLAogICAgICAgICAgICBwaHAgPSBzdGF0ZS5waHAsIHBocE5ldyA9IENvZGVNaXJyb3IuY29weVN0YXRlKHBocE1vZGUsIHBocCksIGN1cjsKICAgICAgICBpZiAoc3RhdGUuY3VyU3RhdGUgPT0gaHRtbCkgY3VyID0gaHRtbE5ldzsKICAgICAgICBlbHNlIGlmIChzdGF0ZS5jdXJTdGF0ZSA9PSBwaHApIGN1ciA9IHBocE5ldzsKICAgICAgICBlbHNlIGN1ciA9IENvZGVNaXJyb3IuY29weVN0YXRlKHN0YXRlLmN1ck1vZGUsIHN0YXRlLmN1clN0YXRlKTsKICAgICAgICByZXR1cm4ge2h0bWw6IGh0bWxOZXcsIHBocDogcGhwTmV3LCBjdXJNb2RlOiBzdGF0ZS5jdXJNb2RlLCBjdXJTdGF0ZTogY3VyLCBjdXJDbG9zZTogc3RhdGUuY3VyQ2xvc2V9OwogICAgICB9LAoKICAgICAgdG9rZW46IGRpc3BhdGNoLAoKICAgICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgICAgaWYgKChzdGF0ZS5jdXJNb2RlICE9IHBocE1vZGUgJiYgL15ccyo8XC8vLnRlc3QodGV4dEFmdGVyKSkgfHwKICAgICAgICAgICAgKHN0YXRlLmN1ck1vZGUgPT0gcGhwTW9kZSAmJiAvXlw/Pi8udGVzdCh0ZXh0QWZ0ZXIpKSkKICAgICAgICAgIHJldHVybiBodG1sTW9kZS5pbmRlbnQoc3RhdGUuaHRtbCwgdGV4dEFmdGVyKTsKICAgICAgICByZXR1cm4gc3RhdGUuY3VyTW9kZS5pbmRlbnQoc3RhdGUuY3VyU3RhdGUsIHRleHRBZnRlcik7CiAgICAgIH0sCgogICAgICBlbGVjdHJpY0NoYXJzOiAiL3t9OiIKICAgIH0KICB9KTsKfSkoKTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veC1odHRwZC1waHAiLCAicGhwIik7Cg==]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogT3JhY2xlIFBML1NRTCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icGxzcWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJwbHNxbC5jc3MiPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogICAgPHN0eWxlPi5Db2RlTWlycm9yIHtib3JkZXI6IDJweCBpbnNldCAjZGVlO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IE9yYWNsZSBQTC9TUUwgbW9kZTwvaDE+Cgo8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgotLSBPcmFjbGUgUEwvU1FMIENvZGUgRGVtbwovKgogICBiYXNlZCBvbiBjLWxpa2UgbW9kZSwgYWRhcHRlZCB0byBQTC9TUUwgYnkgUGV0ZXIgUmFnYW5pdHNjaCAoIGh0dHA6Ly93d3cub3JhY2xlLWFuZC1hcGV4LmNvbS8gKQogICBBcHJpbCAyMDExCiovCkRFQ0xBUkUKICAgIHZJZHggICAgTlVNQkVSOwogICAgdlN0cmluZyBWQVJDSEFSMigxMDApOwogICAgY1RleHQgICBDT05TVEFOVCBWQVJDSEFSMigxMDApIDo9ICdUaGF0JydzIGl0ISBIYXZlIGZ1biB3aXRoIENvZGVNaXJyb3IgMic7CkJFR0lOCiAgICB2SWR4IDo9IDA7CiAgICAtLQogICAgRk9SIHJEQVRBIElOCiAgICAgICggU0VMRUNUICoKICAgICAgICAgIEZST00gRU1QCiAgICAgICAgIE9SREVSIEJZIEVNUE5PCiAgICAgICkKICAgIExPT1AKICAgICAgICB2SWR4ICAgIDo9IHZJZHggKyAxOwogICAgICAgIHZTdHJpbmcgOj0gckRBVEEuRU1QTk8gfHwgJyAtICcgfHwgckRBVEEuRU5BTUU7CiAgICAgICAgLS0KICAgICAgICBVUERBVEUgRU1QCiAgICAgICAgICAgU0VUIFNBTCAgID0gU0FMICogMTAxLzEwMAogICAgICAgICBXSEVSRSBFTVBOTyA9IHJEQVRBLkVNUE5PCiAgICAgICAgOwogICAgRU5EIExPT1A7CiAgICAtLQogICAgU1lTLkRCTVNfT1VUUFVULlB1dF9MaW5lIChjVGV4dCk7CkVORDsKLS0KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgbW9kZTogInRleHQveC1wbHNxbCIKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD4KICAgICAgICBTaW1wbGUgbW9kZSB0aGF0IGhhbmRsZXMgT3JhY2xlIFBML1NRTCBsYW5ndWFnZSAoYW5kIE9yYWNsZSBTUUwsIG9mIGNvdXJzZSkuCiAgICA8L3A+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGUgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXBsc3FsPC9jb2RlPgogICAgKFBMU1FMIGNvZGUpCjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/plsql.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5wbHNxbC1rZXl3b3JkIHsKICAgIGNvbG9yOiBibHVlOwp9CnNwYW4ucGxzcWwtdmFyIHsKICAgIGNvbG9yOiByZWQ7Cn0Kc3Bhbi5wbHNxbC1jb21tZW50IHsKICAgIGNvbG9yOiAjQUE3NzAwOwp9CnNwYW4ucGxzcWwtc3RyaW5nIHsKICAgIGNvbG9yOiBncmVlbjsKfQpzcGFuLnBsc3FsLW9wZXJhdG9yIHsKICAgIGNvbG9yOiBibHVlOwp9CnNwYW4ucGxzcWwtd29yZCB7CiAgICBjb2xvcjogYmxhY2s7Cn0Kc3Bhbi5wbHNxbC1mdW5jdGlvbiB7CiAgICBjb2xvcjogZGFya29yYW5nZTsKfQpzcGFuLnBsc3FsLXNxbHBsdXMgewogICAgY29sb3I6IGRhcmtvcmFuZ2U7Cn0Kc3Bhbi5wbHNxbC10eXBlIHsKICAgIGNvbG9yOiBwdXJwbGU7Cn0Kc3Bhbi5wbHNxbC1zZXBhcmF0b3IgewogICAgY29sb3I6ICM2NjY2NjY7Cn0Kc3Bhbi5wbHNxbC1udW1iZXIgewogICAgY29sb3I6IGRhcmtjeWFuOwp9Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/plsql/plsql.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJwbHNxbCIsIGZ1bmN0aW9uKGNvbmZpZywgcGFyc2VyQ29uZmlnKSB7CiAgdmFyIGluZGVudFVuaXQgICAgICAgPSBjb25maWcuaW5kZW50VW5pdCwKICAgICAga2V5d29yZHMgICAgICAgICA9IHBhcnNlckNvbmZpZy5rZXl3b3JkcywKICAgICAgZnVuY3Rpb25zICAgICAgICA9IHBhcnNlckNvbmZpZy5mdW5jdGlvbnMsCiAgICAgIHR5cGVzICAgICAgICAgICAgPSBwYXJzZXJDb25maWcudHlwZXMsCiAgICAgIHNxbHBsdXMgICAgICAgICAgPSBwYXJzZXJDb25maWcuc3FscGx1cywKICAgICAgbXVsdGlMaW5lU3RyaW5ncyA9IHBhcnNlckNvbmZpZy5tdWx0aUxpbmVTdHJpbmdzOwogIHZhciBpc09wZXJhdG9yQ2hhciAgID0gL1srXC0qJiU9PD4hPzpcL3xdLzsKICBmdW5jdGlvbiBjaGFpbihzdHJlYW0sIHN0YXRlLCBmKSB7CiAgICBzdGF0ZS50b2tlbml6ZSA9IGY7CiAgICByZXR1cm4gZihzdHJlYW0sIHN0YXRlKTsKICB9CgogIHZhciB0eXBlOwogIGZ1bmN0aW9uIHJldCh0cCwgc3R5bGUpIHsKICAgIHR5cGUgPSB0cDsKICAgIHJldHVybiBzdHlsZTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQmFzZShzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgLy8gc3RhcnQgb2Ygc3RyaW5nPwogICAgaWYgKGNoID09ICciJyB8fCBjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgLy8gaXMgaXQgb25lIG9mIHRoZSBzcGVjaWFsIHNpZ25zIFtde30oKS4sOz8gU2VwZXJhdG9yPwogICAgZWxzZSBpZiAoL1tcW1xde31cKFwpLDtcLl0vLnRlc3QoY2gpKQogICAgICByZXR1cm4gcmV0KGNoKTsKICAgIC8vIHN0YXJ0IG9mIGEgbnVtYmVyIHZhbHVlPwogICAgZWxzZSBpZiAoL1xkLy50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wuXS8pCiAgICAgIHJldHVybiByZXQoIm51bWJlciIsICJwbHNxbC1udW1iZXIiKTsKICAgIH0KICAgIC8vIG11bHRpIGxpbmUgY29tbWVudCBvciBzaW1wbGUgb3BlcmF0b3I/CiAgICBlbHNlIGlmIChjaCA9PSAiLyIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIioiKSkgewogICAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlbkNvbW1lbnQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZShpc09wZXJhdG9yQ2hhcik7CiAgICAgICAgcmV0dXJuIHJldCgib3BlcmF0b3IiLCAicGxzcWwtb3BlcmF0b3IiKTsKICAgICAgfQogICAgfQogICAgLy8gc2luZ2xlIGxpbmUgY29tbWVudCBvciBzaW1wbGUgb3BlcmF0b3I/CiAgICBlbHNlIGlmIChjaCA9PSAiLSIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIi0iKSkgewogICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgInBsc3FsLWNvbW1lbnQiKTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICAgIHJldHVybiByZXQoIm9wZXJhdG9yIiwgInBsc3FsLW9wZXJhdG9yIik7CiAgICAgIH0KICAgIH0KICAgIC8vIHBsL3NxbCB2YXJpYWJsZT8KICAgIGVsc2UgaWYgKGNoID09ICJAIiB8fCBjaCA9PSAiJCIpIHsKICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcZFwkX10vKTsKICAgICAgcmV0dXJuIHJldCgid29yZCIsICJwbHNxbC12YXIiKTsKICAgIH0KICAgIC8vIGlzIGl0IGEgb3BlcmF0b3I/CiAgICBlbHNlIGlmIChpc09wZXJhdG9yQ2hhci50ZXN0KGNoKSkgewogICAgICBzdHJlYW0uZWF0V2hpbGUoaXNPcGVyYXRvckNoYXIpOwogICAgICByZXR1cm4gcmV0KCJvcGVyYXRvciIsICJwbHNxbC1vcGVyYXRvciIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIGdldCB0aGUgd2hvbGUgd29yZAogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQga2V5d29yZHM/CiAgICAgIGlmIChrZXl3b3JkcyAmJiBrZXl3b3Jkcy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInBsc3FsLWtleXdvcmQiKTsKICAgICAgLy8gaXMgaXQgb25lIG9mIHRoZSBsaXN0ZWQgZnVuY3Rpb25zPwogICAgICBpZiAoZnVuY3Rpb25zICYmIGZ1bmN0aW9ucy5wcm9wZXJ0eUlzRW51bWVyYWJsZShzdHJlYW0uY3VycmVudCgpLnRvTG93ZXJDYXNlKCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInBsc3FsLWZ1bmN0aW9uIik7CiAgICAgIC8vIGlzIGl0IG9uZSBvZiB0aGUgbGlzdGVkIHR5cGVzPwogICAgICBpZiAodHlwZXMgJiYgdHlwZXMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkgcmV0dXJuIHJldCgia2V5d29yZCIsICJwbHNxbC10eXBlIik7CiAgICAgIC8vIGlzIGl0IG9uZSBvZiB0aGUgbGlzdGVkIHNxbHBsdXMga2V5d29yZHM/CiAgICAgIGlmIChzcWxwbHVzICYmIHNxbHBsdXMucHJvcGVydHlJc0VudW1lcmFibGUoc3RyZWFtLmN1cnJlbnQoKS50b0xvd2VyQ2FzZSgpKSkgcmV0dXJuIHJldCgia2V5d29yZCIsICJwbHNxbC1zcWxwbHVzIik7CiAgICAgIC8vIGRlZmF1bHQ6IGp1c3QgYSAid29yZCIKICAgICAgcmV0dXJuIHJldCgid29yZCIsICJwbHNxbC13b3JkIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7CiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO30KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQgfHwgIShlc2NhcGVkIHx8IG11bHRpTGluZVN0cmluZ3MpKQogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAicGxzcWwtc3RyaW5nIik7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gdG9rZW5Db21tZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBtYXliZUVuZCA9IGZhbHNlLCBjaDsKICAgIHdoaWxlIChjaCA9IHN0cmVhbS5uZXh0KCkpIHsKICAgICAgaWYgKGNoID09ICIvIiAmJiBtYXliZUVuZCkgewogICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1heWJlRW5kID0gKGNoID09ICIqIik7CiAgICB9CiAgICByZXR1cm4gcmV0KCJjb21tZW50IiwgInBsc3FsLWNvbW1lbnQiKTsKICB9CgogIC8vIEludGVyZmFjZQoKICByZXR1cm4gewogICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oYmFzZWNvbHVtbikgewogICAgICByZXR1cm4gewogICAgICAgIHRva2VuaXplOiB0b2tlbkJhc2UsCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSByZXR1cm4gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0KICB9Owp9KTsKCihmdW5jdGlvbigpIHsKICBmdW5jdGlvbiBrZXl3b3JkcyhzdHIpIHsKICAgIHZhciBvYmogPSB7fSwgd29yZHMgPSBzdHIuc3BsaXQoIiAiKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyArK2kpIG9ialt3b3Jkc1tpXV0gPSB0cnVlOwogICAgcmV0dXJuIG9iajsKICB9CiAgdmFyIGNLZXl3b3JkcyA9ICJhYm9ydCBhY2NlcHQgYWNjZXNzIGFkZCBhbGwgYWx0ZXIgYW5kIGFueSBhcnJheSBhcnJheWxlbiBhcyBhc2MgYXNzZXJ0IGFzc2lnbiBhdCBhdHRyaWJ1dGVzIGF1ZGl0ICIgKwogICAgICAgICJhdXRob3JpemF0aW9uIGF2ZyAiICsKICAgICAgICAiYmFzZV90YWJsZSBiZWdpbiBiZXR3ZWVuIGJpbmFyeV9pbnRlZ2VyIGJvZHkgYm9vbGVhbiBieSAiICsKICAgICAgICAiY2FzZSBjYXN0IGNoYXIgY2hhcl9iYXNlIGNoZWNrIGNsb3NlIGNsdXN0ZXIgY2x1c3RlcnMgY29sYXV0aCBjb2x1bW4gY29tbWVudCBjb21taXQgY29tcHJlc3MgY29ubmVjdCAiICsKICAgICAgICAiY29ubmVjdGVkIGNvbnN0YW50IGNvbnN0cmFpbnQgY3Jhc2ggY3JlYXRlIGN1cnJlbnQgY3VycnZhbCBjdXJzb3IgIiArCiAgICAgICAgImRhdGFfYmFzZSBkYXRhYmFzZSBkYXRlIGRiYSBkZWFsbG9jYXRlIGRlYnVnb2ZmIGRlYnVnb24gZGVjaW1hbCBkZWNsYXJlIGRlZmF1bHQgZGVmaW5pdGlvbiBkZWxheSBkZWxldGUgIiArCiAgICAgICAgImRlc2MgZGlnaXRzIGRpc3Bvc2UgZGlzdGluY3QgZG8gZHJvcCAiICsKICAgICAgICAiZWxzZSBlbHNpZiBlbmFibGUgZW5kIGVudHJ5IGVzY2FwZSBleGNlcHRpb24gZXhjZXB0aW9uX2luaXQgZXhjaGFuZ2UgZXhjbHVzaXZlIGV4aXN0cyBleGl0IGV4dGVybmFsICIgKwogICAgICAgICJmYXN0IGZldGNoIGZpbGUgZm9yIGZvcmNlIGZvcm0gZnJvbSBmdW5jdGlvbiAiICsKICAgICAgICAiZ2VuZXJpYyBnb3RvIGdyYW50IGdyb3VwICIgKwogICAgICAgICJoYXZpbmcgIiArCiAgICAgICAgImlkZW50aWZpZWQgaWYgaW1tZWRpYXRlIGluIGluY3JlbWVudCBpbmRleCBpbmRleGVzIGluZGljYXRvciBpbml0aWFsIGluaXRyYW5zIGluc2VydCBpbnRlcmZhY2UgaW50ZXJzZWN0ICIgKwogICAgICAgICJpbnRvIGlzICIgKwogICAgICAgICJrZXkgIiArCiAgICAgICAgImxldmVsIGxpYnJhcnkgbGlrZSBsaW1pdGVkIGxvY2FsIGxvY2sgbG9nIGxvZ2dpbmcgbG9uZyBsb29wICIgKwogICAgICAgICJtYXN0ZXIgbWF4ZXh0ZW50cyBtYXh0cmFucyBtZW1iZXIgbWluZXh0ZW50cyBtaW51cyBtaXNsYWJlbCBtb2RlIG1vZGlmeSBtdWx0aXNldCAiICsKICAgICAgICAibmV3IG5leHQgbm8gbm9hdWRpdCBub2NvbXByZXNzIG5vbG9nZ2luZyBub3BhcmFsbGVsIG5vdCBub3dhaXQgbnVtYmVyX2Jhc2UgIiArCiAgICAgICAgIm9iamVjdCBvZiBvZmYgb2ZmbGluZSBvbiBvbmxpbmUgb25seSBvcGVuIG9wdGlvbiBvciBvcmRlciBvdXQgIiArCiAgICAgICAgInBhY2thZ2UgcGFyYWxsZWwgcGFydGl0aW9uIHBjdGZyZWUgcGN0aW5jcmVhc2UgcGN0dXNlZCBwbHNfaW50ZWdlciBwb3NpdGl2ZSBwb3NpdGl2ZW4gcHJhZ21hIHByaW1hcnkgcHJpb3IgIiArCiAgICAgICAgInByaXZhdGUgcHJpdmlsZWdlcyBwcm9jZWR1cmUgcHVibGljICIgKwogICAgICAgICJyYWlzZSByYW5nZSByYXcgcmVhZCByZWJ1aWxkIHJlY29yZCByZWYgcmVmZXJlbmNlcyByZWZyZXNoIHJlbGVhc2UgcmVuYW1lIHJlcGxhY2UgcmVzb3VyY2UgcmVzdHJpY3QgcmV0dXJuICIgKwogICAgICAgICJyZXR1cm5pbmcgcmV2ZXJzZSByZXZva2Ugcm9sbGJhY2sgcm93IHJvd2lkIHJvd2xhYmVsIHJvd251bSByb3dzIHJ1biAiICsKICAgICAgICAic2F2ZXBvaW50IHNjaGVtYSBzZWdtZW50IHNlbGVjdCBzZXBhcmF0ZSBzZXNzaW9uIHNldCBzaGFyZSBzbmFwc2hvdCBzb21lIHNwYWNlIHNwbGl0IHNxbCBzdGFydCBzdGF0ZW1lbnQgIiArCiAgICAgICAgInN0b3JhZ2Ugc3VidHlwZSBzdWNjZXNzZnVsIHN5bm9ueW0gIiArCiAgICAgICAgInRhYmF1dGggdGFibGUgdGFibGVzIHRhYmxlc3BhY2UgdGFzayB0ZXJtaW5hdGUgdGhlbiB0byB0cmlnZ2VyIHRydW5jYXRlIHR5cGUgIiArCiAgICAgICAgInVuaW9uIHVuaXF1ZSB1bmxpbWl0ZWQgdW5yZWNvdmVyYWJsZSB1bnVzYWJsZSB1cGRhdGUgdXNlIHVzaW5nICIgKwogICAgICAgICJ2YWxpZGF0ZSB2YWx1ZSB2YWx1ZXMgdmFyaWFibGUgdmlldyB2aWV3cyAiICsKICAgICAgICAid2hlbiB3aGVuZXZlciB3aGVyZSB3aGlsZSB3aXRoIHdvcmsiOwoKICB2YXIgY0Z1bmN0aW9ucyA9ICJhYnMgYWNvcyBhZGRfbW9udGhzIGFzY2lpIGFzaW4gYXRhbiBhdGFuMiBhdmVyYWdlICIgKwogICAgICAgICJiZmlsZW5hbWUgIiArCiAgICAgICAgImNlaWwgY2hhcnRvcm93aWQgY2hyIGNvbmNhdCBjb252ZXJ0IGNvcyBjb3NoIGNvdW50ICIgKwogICAgICAgICJkZWNvZGUgZGVyZWYgZHVhbCBkdW1wIGR1cF92YWxfb25faW5kZXggIiArCiAgICAgICAgImVtcHR5IGVycm9yIGV4cCAiICsKICAgICAgICAiZmFsc2UgZmxvb3IgZm91bmQgIiArCiAgICAgICAgImdsYiBncmVhdGVzdCAiICsKICAgICAgICAiaGV4dG9yYXcgIiArCiAgICAgICAgImluaXRjYXAgaW5zdHIgaW5zdHJiIGlzb3BlbiAiICsKICAgICAgICAibGFzdF9kYXkgbGVhc3QgbGVuZ2h0IGxlbmdodGIgbG4gbG93ZXIgbHBhZCBsdHJpbSBsdWIgIiArCiAgICAgICAgIm1ha2VfcmVmIG1heCBtaW4gbW9kIG1vbnRoc19iZXR3ZWVuICIgKwogICAgICAgICJuZXdfdGltZSBuZXh0X2RheSBuZXh0dmFsIG5sc19jaGFyc2V0X2RlY2xfbGVuIG5sc19jaGFyc2V0X2lkIG5sc19jaGFyc2V0X25hbWUgbmxzX2luaXRjYXAgbmxzX2xvd2VyICIgKwogICAgICAgICJubHNfc29ydCBubHNfdXBwZXIgbmxzc29ydCBub19kYXRhX2ZvdW5kIG5vdGZvdW5kIG51bGwgbnZsICIgKwogICAgICAgICJvdGhlcnMgIiArCiAgICAgICAgInBvd2VyICIgKwogICAgICAgICJyYXd0b2hleCByZWZ0b2hleCByb3VuZCByb3djb3VudCByb3dpZHRvY2hhciBycGFkIHJ0cmltICIgKwogICAgICAgICJzaWduIHNpbiBzaW5oIHNvdW5kZXggc3FsY29kZSBzcWxlcnJtIHNxcnQgc3RkZGV2IHN1YnN0ciBzdWJzdHJiIHN1bSBzeXNkYXRlICIgKwogICAgICAgICJ0YW4gdGFuaCB0b19jaGFyIHRvX2RhdGUgdG9fbGFiZWwgdG9fbXVsdGlfYnl0ZSB0b19udW1iZXIgdG9fc2luZ2xlX2J5dGUgdHJhbnNsYXRlIHRydWUgdHJ1bmMgIiArCiAgICAgICAgInVpZCB1cHBlciB1c2VyIHVzZXJlbnYgIiArCiAgICAgICAgInZhcmlhbmNlIHZzaXplIjsKCiAgdmFyIGNUeXBlcyA9ICJiZmlsZSBibG9iICIgKwogICAgICAgICJjaGFyYWN0ZXIgY2xvYiAiICsKICAgICAgICAiZGVjICIgKwogICAgICAgICJmbG9hdCAiICsKICAgICAgICAiaW50IGludGVnZXIgIiArCiAgICAgICAgIm1sc2xhYmVsICIgKwogICAgICAgICJuYXR1cmFsIG5hdHVyYWxuIG5jaGFyIG5jbG9iIG51bWJlciBudW1lcmljIG52YXJjaGFyMiAiICsKICAgICAgICAicmVhbCByb3d0eXBlICIgKwogICAgICAgICJzaWdudHlwZSBzbWFsbGludCBzdHJpbmcgIiArCiAgICAgICAgInZhcmNoYXIgdmFyY2hhcjIiOwoKICB2YXIgY1NxbHBsdXMgPSAiYXBwaW5mbyBhcnJheXNpemUgYXV0b2NvbW1pdCBhdXRvcHJpbnQgYXV0b3JlY292ZXJ5IGF1dG90cmFjZSAiICsKICAgICAgICAiYmxvY2t0ZXJtaW5hdG9yIGJyZWFrIGJ0aXRsZSAiICsKICAgICAgICAiY21kc2VwIGNvbHNlcCBjb21wYXRpYmlsaXR5IGNvbXB1dGUgY29uY2F0IGNvcHljb21taXQgY29weXR5cGVjaGVjayAiICsKICAgICAgICAiZGVmaW5lIGRlc2NyaWJlICIgKwogICAgICAgICJlY2hvIGVkaXRmaWxlIGVtYmVkZGVkIGVzY2FwZSBleGVjIGV4ZWN1dGUgIiArCiAgICAgICAgImZlZWRiYWNrIGZsYWdnZXIgZmx1c2ggIiArCiAgICAgICAgImhlYWRpbmcgaGVhZHNlcCAiICsKICAgICAgICAiaW5zdGFuY2UgIiArCiAgICAgICAgImxpbmVzaXplIGxubyBsb2JvZmZzZXQgbG9nc291cmNlIGxvbmcgbG9uZ2NodW5rc2l6ZSAiICsKICAgICAgICAibWFya3VwICIgKwogICAgICAgICJuYXRpdmUgbmV3cGFnZSBudW1mb3JtYXQgbnVtd2lkdGggIiArCiAgICAgICAgInBhZ2VzaXplIHBhdXNlIHBubyAiICsKICAgICAgICAicmVjc2VwIHJlY3NlcGNoYXIgcmVsZWFzZSByZXBmb290ZXIgcmVwaGVhZGVyICIgKwogICAgICAgICJzZXJ2ZXJvdXRwdXQgc2hpZnRpbm91dCBzaG93IHNob3dtb2RlIHNpemUgc3Bvb2wgc3FsYmxhbmtsaW5lcyBzcWxjYXNlIHNxbGNvZGUgc3FsY29udGludWUgc3FsbnVtYmVyICIgKwogICAgICAgICJzcWxwbHVzY29tcGF0aWJpbGl0eSBzcWxwcmVmaXggc3FscHJvbXB0IHNxbHRlcm1pbmF0b3Igc3VmZml4ICIgKwogICAgICAgICJ0YWIgdGVybSB0ZXJtb3V0IHRpbWUgdGltaW5nIHRyaW1vdXQgdHJpbXNwb29sIHR0aXRsZSAiICsKICAgICAgICAidW5kZXJsaW5lICIgKwogICAgICAgICJ2ZXJpZnkgdmVyc2lvbiAiICsKICAgICAgICAid3JhcCI7CgogIENvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXBsc3FsIiwgewogICAgbmFtZTogInBsc3FsIiwKICAgIGtleXdvcmRzOiBrZXl3b3JkcyhjS2V5d29yZHMpLAogICAgZnVuY3Rpb25zOiBrZXl3b3JkcyhjRnVuY3Rpb25zKSwKICAgIHR5cGVzOiBrZXl3b3JkcyhjVHlwZXMpLAogICAgc3FscGx1czoga2V5d29yZHMoY1NxbHBsdXMpCiAgfSk7Cn0oKSk7Cg==]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogUHl0aG9uIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJweXRob24uanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJweXRob24uY3NzIj4KCTxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IFB5dGhvbiBtb2RlPC9oMT4KICAgIAogICAgPGRpdj48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPgojIExpdGVyYWxzCjEyMzQKMC4wZTEwMQouMTIzCjBiMDEwMTAwMTExMDAKMG8wMTIzNDU2NwoweDA5ODc2NTQzMjFhYmNkZWYKNwoyMTQ3NDgzNjQ3CjNMCjc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2TAoweDEwMDAwMDAwMEwKNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYKMHhkZWFkYmVlZgozLjE0agoxMC5qCjEwagouMDAxagoxZTEwMGoKMy4xNGUtMTBqCgoKIyBTdHJpbmcgTGl0ZXJhbHMKJ0ZvclwnJwoiR29kXCIiCiIiInNvIGxvdmVkCnRoZSB3b3JsZCIiIgonJyd0aGF0IGhlIGdhdmUKaGlzIG9ubHkgYmVnb3R0ZW5cJyAnJycKJ3RoYXQgd2hvc29ldmVyIGJlbGlldmV0aCBcCmluIGhpbScKJycKCiMgSWRlbnRpZmllcnMKX19hX18KYS5iCmEuYi5jCgojIE9wZXJhdG9ycworIC0gKiAvICUgJiB8IF4gfiA8ID4KPT0gIT0gPD0gPj0gPD4gPDwgPj4gLy8gKioKYW5kIG9yIG5vdCBpbiBpcwoKIyBEZWxpbWl0ZXJzCigpIFtdIHt9ICwgOiBgID0gOyBAIC4gICMgTm90ZSB0aGF0IEAgYW5kIC4gcmVxdWlyZSB0aGUgcHJvcGVyIGNvbnRleHQuCis9IC09ICo9IC89ICU9ICY9IHw9IF49Ci8vPSA+Pj0gPDw9ICoqPQoKIyBLZXl3b3JkcwphcyBhc3NlcnQgYnJlYWsgY2xhc3MgY29udGludWUgZGVmIGRlbCBlbGlmIGVsc2UgZXhjZXB0CmZpbmFsbHkgZm9yIGZyb20gZ2xvYmFsIGlmIGltcG9ydCBsYW1iZGEgcGFzcyByYWlzZQpyZXR1cm4gdHJ5IHdoaWxlIHdpdGggeWllbGQKCiMgUHl0aG9uIDIgS2V5d29yZHMgKG90aGVyd2lzZSBJZGVudGlmaWVycykKZXhlYyBwcmludAoKIyBQeXRob24gMyBLZXl3b3JkcyAob3RoZXJ3aXNlIElkZW50aWZpZXJzKQpub25sb2NhbAoKIyBUeXBlcwpib29sIGNsYXNzbWV0aG9kIGNvbXBsZXggZGljdCBlbnVtZXJhdGUgZmxvYXQgZnJvemVuc2V0IGludCBsaXN0IG9iamVjdApwcm9wZXJ0eSByZXZlcnNlZCBzZXQgc2xpY2Ugc3RhdGljbWV0aG9kIHN0ciBzdXBlciB0dXBsZSB0eXBlCgojIFB5dGhvbiAyIFR5cGVzIChvdGhlcndpc2UgSWRlbnRpZmllcnMpCmJhc2VzdHJpbmcgYnVmZmVyIGZpbGUgbG9uZyB1bmljb2RlIHhyYW5nZQoKIyBQeXRob24gMyBUeXBlcyAob3RoZXJ3aXNlIElkZW50aWZpZXJzKQpieXRlYXJyYXkgYnl0ZXMgZmlsdGVyIG1hcCBtZW1vcnl2aWV3IG9wZW4gcmFuZ2UgemlwCgojIFNvbWUgRXhhbXBsZSBjb2RlCmltcG9ydCBvcwpmcm9tIHBhY2thZ2UgaW1wb3J0IFBhcmVudENsYXNzCgpAbm9uc2Vuc2VEZWNvcmF0b3IKZGVmIGRvZXNOb3RoaW5nKCk6CiAgICBwYXNzCgpjbGFzcyBFeGFtcGxlQ2xhc3MoUGFyZW50Q2xhc3MpOgogICAgQHN0YXRpY21ldGhvZAogICAgZGVmIGV4YW1wbGUoaW5wdXRTdHIpOgogICAgICAgIGEgPSBsaXN0KGlucHV0U3RyKQogICAgICAgIGEucmV2ZXJzZSgpCiAgICAgICAgcmV0dXJuICcnLmpvaW4oYSkKCiAgICBkZWYgX19pbml0X18oc2VsZiwgbWl4aW4gPSAnSGVsbG8nKToKICAgICAgICBzZWxmLm1peGluID0gbWl4aW4KCjwvdGV4dGFyZWE+PC9kaXY+CiAgICA8c2NyaXB0PgogICAgICB2YXIgZWRpdG9yID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvZGUiKSwgewogICAgICAgIG1vZGU6IHtuYW1lOiAicHl0aG9uIiwKICAgICAgICAgICAgICAgdmVyc2lvbjogMiwKICAgICAgICAgICAgICAgc2luZ2xlTGluZVN0cmluZ0Vycm9yczogZmFsc2V9LAogICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAogICAgICAgIGluZGVudFVuaXQ6IDQsCiAgICAgICAgdGFiTW9kZTogInNoaWZ0IiwKICAgICAgICBtYXRjaEJyYWNrZXRzOiB0cnVlCiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CiAgICA8aDI+Q29uZmlndXJhdGlvbiBPcHRpb25zOjwvaDI+CiAgICA8dWw+CiAgICAgIDxsaT52ZXJzaW9uIC0gMi8zIC0gVGhlIHZlcnNpb24gb2YgUHl0aG9uIHRvIHJlY29nbml6ZS4gIERlZmF1bHQgaXMgMi48L2xpPgogICAgICA8bGk+c2luZ2xlTGluZVN0cmluZ0Vycm9ycyAtIHRydWUvZmFsc2UgLSBJZiB5b3UgaGF2ZSBhIHNpbmdsZS1saW5lIHN0cmluZyB0aGF0IGlzIG5vdCB0ZXJtaW5hdGVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUsIHRoaXMgd2lsbCBzaG93IHN1YnNlcXVlbnQgbGluZXMgYXMgZXJyb3JzIGlmIHRydWUsIG90aGVyd2lzZSBpdCB3aWxsIGNvbnNpZGVyIHRoZSBuZXdsaW5lIGFzIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gRGVmYXVsdCBpcyBmYWxzZS48L2xpPgogICAgPC91bD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXB5dGhvbjwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/LICENSE.txt</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VGhlIE1JVCBMaWNlbnNlCgpDb3B5cmlnaHQgKGMpIDIwMTAgVGltb3RoeSBGYXJyZWxsCgpQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5Cm9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCmluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbApjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKClRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/python.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5weS1kZWxpbWl0ZXIsCnNwYW4ucHktc3BlY2lhbCB7Y29sb3I6ICM2NjY2NjY7fQoKc3Bhbi5weS1vcGVyYXRvciB7Y29sb3I6ICM2NjY2NjY7fQoKc3Bhbi5weS1lcnJvciB7YmFja2dyb3VuZC1jb2xvcjogIzY2MDAwMDsgY29sb3I6ICNGRkZGRkY7fQoKc3Bhbi5weS1rZXl3b3JkIHtjb2xvcjogIzc3MDA4ODsgZm9udC13ZWlnaHQ6IGJvbGQ7fQoKc3Bhbi5weS1udW1iZXIge2NvbG9yOiAjMjI4ODExO30KCnNwYW4ucHktaWRlbnRpZmllciwKc3Bhbi5weS1mdW5jIHtjb2xvcjogYmxhY2s7fQoKc3Bhbi5weS10eXBlLApzcGFuLnB5LWRlY29yYXRvciB7Y29sb3I6ICMwMDAwRkY7fQoKc3Bhbi5weS1jb21tZW50IHtjb2xvcjogI0FBNzcwMDt9CgpzcGFuLnB5LXN0cmluZywKc3Bhbi5weS1ieXRlcywKc3Bhbi5weS1yYXcsCnNwYW4ucHktdW5pY29kZSB7Y29sb3I6ICNBQTIyMjI7fQ==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/python/python.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJweXRob24iLCBmdW5jdGlvbihjb25mKSB7CiAgICB2YXIgRVJST1JDTEFTUyA9ICdweS1lcnJvcic7CiAgICAKICAgIGZ1bmN0aW9uIHdvcmRSZWdleHAod29yZHMpIHsKICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiXigoIiArIHdvcmRzLmpvaW4oIil8KCIpICsgIikpXFxiIik7CiAgICB9CiAgICAKICAgIHZhciBzaW5nbGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeW1xcK1xcLVxcKi8lJnxcXF5+PD4hXSIpOwogICAgdmFyIHNpbmdsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCdeW1xcKFxcKVxcW1xcXVxce1xcfUAsOmA9O1xcLl0nKTsKICAgIHZhciBkb3VibGVPcGVyYXRvcnMgPSBuZXcgUmVnRXhwKCJeKCg9PSl8KCE9KXwoPD0pfCg+PSl8KDw+KXwoPDwpfCg+Pil8KC8vKXwoXFwqXFwqKSkiKTsKICAgIHZhciBkb3VibGVEZWxpbWl0ZXJzID0gbmV3IFJlZ0V4cCgiXigoXFwrPSl8KFxcLT0pfChcXCo9KXwoJT0pfCgvPSl8KCY9KXwoXFx8PSl8KFxcXj0pKSIpOwogICAgdmFyIHRyaXBsZURlbGltaXRlcnMgPSBuZXcgUmVnRXhwKCJeKCgvLz0pfCg+Pj0pfCg8PD0pfChcXCpcXCo9KSkiKTsKICAgIHZhciBpZGVudGlmaWVycyA9IG5ldyBSZWdFeHAoIl5bX0EtWmEtel1bX0EtWmEtejAtOV0qIik7CgogICAgdmFyIHdvcmRPcGVyYXRvcnMgPSB3b3JkUmVnZXhwKFsnYW5kJywgJ29yJywgJ25vdCcsICdpcycsICdpbiddKTsKICAgIHZhciBjb21tb25rZXl3b3JkcyA9IFsnYXMnLCAnYXNzZXJ0JywgJ2JyZWFrJywgJ2NsYXNzJywgJ2NvbnRpbnVlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmJywgJ2RlbCcsICdlbGlmJywgJ2Vsc2UnLCAnZXhjZXB0JywgJ2ZpbmFsbHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICdmb3InLCAnZnJvbScsICdnbG9iYWwnLCAnaWYnLCAnaW1wb3J0JywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGFtYmRhJywgJ3Bhc3MnLCAncmFpc2UnLCAncmV0dXJuJywKICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ5JywgJ3doaWxlJywgJ3dpdGgnLCAneWllbGQnXTsKICAgIHZhciBjb21tb250eXBlcyA9IFsnYm9vbCcsICdjbGFzc21ldGhvZCcsICdjb21wbGV4JywgJ2RpY3QnLCAnZW51bWVyYXRlJywKICAgICAgICAgICAgICAgICAgICAgICAnZmxvYXQnLCAnZnJvemVuc2V0JywgJ2ludCcsICdsaXN0JywgJ29iamVjdCcsCiAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5JywgJ3JldmVyc2VkJywgJ3NldCcsICdzbGljZScsICdzdGF0aWNtZXRob2QnLAogICAgICAgICAgICAgICAgICAgICAgICdzdHInLCAnc3VwZXInLCAndHVwbGUnLCAndHlwZSddOwogICAgdmFyIHB5MiA9IHsndHlwZXMnOiBbJ2Jhc2VzdHJpbmcnLCAnYnVmZmVyJywgJ2ZpbGUnLCAnbG9uZycsICd1bmljb2RlJywKICAgICAgICAgICAgICAgICAgICAgICAgICd4cmFuZ2UnXSwKICAgICAgICAgICAgICAgJ2tleXdvcmRzJzogWydleGVjJywgJ3ByaW50J119OwogICAgdmFyIHB5MyA9IHsndHlwZXMnOiBbJ2J5dGVhcnJheScsICdieXRlcycsICdmaWx0ZXInLCAnbWFwJywgJ21lbW9yeXZpZXcnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ29wZW4nLCAncmFuZ2UnLCAnemlwJ10sCiAgICAgICAgICAgICAgICdrZXl3b3Jkcyc6IFsnbm9ubG9jYWwnXX07CgogICAgaWYgKCEhY29uZi5tb2RlLnZlcnNpb24gJiYgcGFyc2VJbnQoY29uZi5tb2RlLnZlcnNpb24sIDEwKSA9PT0gMykgewogICAgICAgIGNvbW1vbmtleXdvcmRzID0gY29tbW9ua2V5d29yZHMuY29uY2F0KHB5My5rZXl3b3Jkcyk7CiAgICAgICAgY29tbW9udHlwZXMgPSBjb21tb250eXBlcy5jb25jYXQocHkzLnR5cGVzKTsKICAgICAgICB2YXIgc3RyaW5nUHJlZml4ZXMgPSBuZXcgUmVnRXhwKCJeKChbcmJdfChicikpPygnezN9fFwiezN9fFsnXCJdKSkiLCAiaSIpOwogICAgfSBlbHNlIHsKICAgICAgICBjb21tb25rZXl3b3JkcyA9IGNvbW1vbmtleXdvcmRzLmNvbmNhdChweTIua2V5d29yZHMpOwogICAgICAgIGNvbW1vbnR5cGVzID0gY29tbW9udHlwZXMuY29uY2F0KHB5Mi50eXBlcyk7CiAgICAgICAgdmFyIHN0cmluZ1ByZWZpeGVzID0gbmV3IFJlZ0V4cCgiXigoW3J1Yl18KHVyKXwoYnIpKT8oJ3szfXxcInszfXxbJ1wiXSkpIiwgImkiKTsKICAgIH0KICAgIHZhciBrZXl3b3JkcyA9IHdvcmRSZWdleHAoY29tbW9ua2V5d29yZHMpOwogICAgdmFyIHR5cGVzID0gd29yZFJlZ2V4cChjb21tb250eXBlcyk7CgogICAgLy8gdG9rZW5pemVycwogICAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICAvLyBIYW5kbGUgc2NvcGUgY2hhbmdlcwogICAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICAgICAgdmFyIHNjb3BlT2Zmc2V0ID0gc3RhdGUuc2NvcGVzWzBdLm9mZnNldDsKICAgICAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICB2YXIgbGluZU9mZnNldCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICAgICAgICAgICAgaWYgKGxpbmVPZmZzZXQgPiBzY29wZU9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAncHktaW5kZW50JzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGluZU9mZnNldCA8IHNjb3BlT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdweS1kZWRlbnQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuICd3aGl0ZXNwYWNlJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChzY29wZU9mZnNldCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBkZWRlbnQoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgIHJldHVybiAncHktc3BhY2UnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICB2YXIgY2ggPSBzdHJlYW0ucGVlaygpOwogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBDb21tZW50cwogICAgICAgIGlmIChjaCA9PT0gJyMnKSB7CiAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICAgICAgcmV0dXJuICdweS1jb21tZW50JzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLy8gSGFuZGxlIE51bWJlciBMaXRlcmFscwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15bMC05XC5dLywgZmFsc2UpKSB7CiAgICAgICAgICAgIHZhciBmbG9hdExpdGVyYWwgPSBmYWxzZTsKICAgICAgICAgICAgLy8gRmxvYXRzCiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL15cZCpcLlxkKyhlW1wrXC1dP1xkKyk/L2kpKSB7IGZsb2F0TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlxkK1wuXGQqLykpIHsgZmxvYXRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eXC5cZCsvKSkgeyBmbG9hdExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIGlmIChmbG9hdExpdGVyYWwpIHsKICAgICAgICAgICAgICAgIC8vIEZsb2F0IGxpdGVyYWxzIG1heSBiZSAiaW1hZ2luYXJ5IgogICAgICAgICAgICAgICAgc3RyZWFtLmVhdCgvSi9pKTsKICAgICAgICAgICAgICAgIHJldHVybiAncHktbGl0ZXJhbCc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gSW50ZWdlcnMKICAgICAgICAgICAgdmFyIGludExpdGVyYWwgPSBmYWxzZTsKICAgICAgICAgICAgLy8gSGV4CiAgICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goL14weFswLTlhLWZdKy9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICAvLyBCaW5hcnkKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjBiWzAxXSsvaSkpIHsgaW50TGl0ZXJhbCA9IHRydWU7IH0KICAgICAgICAgICAgLy8gT2N0YWwKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXjBvWzAtN10rL2kpKSB7IGludExpdGVyYWwgPSB0cnVlOyB9CiAgICAgICAgICAgIC8vIERlY2ltYWwKICAgICAgICAgICAgaWYgKHN0cmVhbS5tYXRjaCgvXlsxLTldXGQqKGVbXCtcLV0/XGQrKT8vKSkgewogICAgICAgICAgICAgICAgLy8gRGVjaW1hbCBsaXRlcmFscyBtYXkgYmUgImltYWdpbmFyeSIKICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL0ovaSk7CiAgICAgICAgICAgICAgICAvLyBUT0RPIC0gQ2FuIHlvdSBoYXZlIGltYWdpbmFyeSBsb25ncz8KICAgICAgICAgICAgICAgIGludExpdGVyYWwgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFplcm8gYnkgaXRzZWxmIHdpdGggbm8gb3RoZXIgcGllY2Ugb2YgbnVtYmVyLgogICAgICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKC9eMCg/IVtcZHhdKS9pKSkgeyBpbnRMaXRlcmFsID0gdHJ1ZTsgfQogICAgICAgICAgICBpZiAoaW50TGl0ZXJhbCkgewogICAgICAgICAgICAgICAgLy8gSW50ZWdlciBsaXRlcmFscyBtYXkgYmUgImxvbmciCiAgICAgICAgICAgICAgICBzdHJlYW0uZWF0KC9ML2kpOwogICAgICAgICAgICAgICAgcmV0dXJuICdweS1saXRlcmFsJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgU3RyaW5ncwogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc3RyaW5nUHJlZml4ZXMpKSB7CiAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5TdHJpbmdGYWN0b3J5KHN0cmVhbS5jdXJyZW50KCkpOwogICAgICAgICAgICByZXR1cm4gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBvcGVyYXRvcnMgYW5kIERlbGltaXRlcnMKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHRyaXBsZURlbGltaXRlcnMpIHx8IHN0cmVhbS5tYXRjaChkb3VibGVEZWxpbWl0ZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B5LWRlbGltaXRlcic7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goZG91YmxlT3BlcmF0b3JzKQogICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2goc2luZ2xlT3BlcmF0b3JzKQogICAgICAgICAgICB8fCBzdHJlYW0ubWF0Y2god29yZE9wZXJhdG9ycykpIHsKICAgICAgICAgICAgcmV0dXJuICdweS1vcGVyYXRvcic7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW0ubWF0Y2goc2luZ2xlRGVsaW1pdGVycykpIHsKICAgICAgICAgICAgcmV0dXJuICdweS1kZWxpbWl0ZXInOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKHR5cGVzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B5LXR5cGUnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGtleXdvcmRzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B5LWtleXdvcmQnOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBpZiAoc3RyZWFtLm1hdGNoKGlkZW50aWZpZXJzKSkgewogICAgICAgICAgICByZXR1cm4gJ3B5LWlkZW50aWZpZXInOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBIYW5kbGUgbm9uLWRldGVjdGVkIGl0ZW1zCiAgICAgICAgc3RyZWFtLm5leHQoKTsKICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gdG9rZW5TdHJpbmdGYWN0b3J5KGRlbGltaXRlcikgewogICAgICAgIHdoaWxlICgncnViJy5pbmRleE9mKGRlbGltaXRlclswXS50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7CiAgICAgICAgICAgIGRlbGltaXRlciA9IGRlbGltaXRlci5zdWJzdHIoMSk7CiAgICAgICAgfQogICAgICAgIHZhciBkZWxpbV9yZSA9IG5ldyBSZWdFeHAoZGVsaW1pdGVyKTsKICAgICAgICB2YXIgc2luZ2xlbGluZSA9IGRlbGltaXRlci5sZW5ndGggPT0gMTsKICAgICAgICB2YXIgT1VUQ0xBU1MgPSAncHktc3RyaW5nJzsKICAgICAgICAKICAgICAgICByZXR1cm4gZnVuY3Rpb24gdG9rZW5TdHJpbmcoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXiciXFxdLyk7CiAgICAgICAgICAgICAgICBpZiAoc3RyZWFtLmVhdCgnXFwnKSkgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKHNpbmdsZWxpbmUgJiYgc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0cmVhbS5tYXRjaChkZWxpbV9yZSkpIHsKICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gT1VUQ0xBU1M7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0cmVhbS5lYXQoL1snIl0vKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoc2luZ2xlbGluZSkgewogICAgICAgICAgICAgICAgaWYgKGNvbmYubW9kZS5zaW5nbGVMaW5lU3RyaW5nRXJyb3JzKSB7CiAgICAgICAgICAgICAgICAgICAgT1VUQ0xBU1MgPSBFUlJPUkNMQVNTCiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gdG9rZW5CYXNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBPVVRDTEFTUzsKICAgICAgICB9OwogICAgfQogICAgCiAgICBmdW5jdGlvbiBpbmRlbnQoc3RyZWFtLCBzdGF0ZSwgdHlwZSkgewogICAgICAgIHR5cGUgPSB0eXBlIHx8ICdweSc7CiAgICAgICAgdmFyIGluZGVudFVuaXQgPSAwOwogICAgICAgIGlmICh0eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUuc2NvcGVzW2ldLnR5cGUgPT09ICdweScpIHsKICAgICAgICAgICAgICAgICAgICBpbmRlbnRVbml0ID0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCArIGNvbmYuaW5kZW50VW5pdDsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGluZGVudFVuaXQgPSBzdHJlYW0uY29sdW1uKCkgKyBzdHJlYW0uY3VycmVudCgpLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgc3RhdGUuc2NvcGVzLnVuc2hpZnQoewogICAgICAgICAgICBvZmZzZXQ6IGluZGVudFVuaXQsCiAgICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICB9KTsKICAgIH0KICAgIAogICAgZnVuY3Rpb24gZGVkZW50KHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICBpZiAoc3RhdGUuc2NvcGVzLmxlbmd0aCA9PSAxKSByZXR1cm47CiAgICAgICAgaWYgKHN0YXRlLnNjb3Blc1swXS50eXBlID09PSAncHknKSB7CiAgICAgICAgICAgIHZhciBfaW5kZW50ID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgICAgIHZhciBfaW5kZW50X2luZGV4ID0gLTE7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhdGUuc2NvcGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBpZiAoX2luZGVudCA9PT0gc3RhdGUuc2NvcGVzW2ldLm9mZnNldCkgewogICAgICAgICAgICAgICAgICAgIF9pbmRlbnRfaW5kZXggPSBpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChfaW5kZW50X2luZGV4ID09PSAtMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnNjb3Blc1swXS5vZmZzZXQgIT09IF9pbmRlbnQpIHsKICAgICAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBmYWxzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlLnNjb3Blcy5zaGlmdCgpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHRva2VuTGV4ZXIoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgIHZhciBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKCiAgICAgICAgLy8gSGFuZGxlICcuJyBjb25uZWN0ZWQgaWRlbnRpZmllcnMKICAgICAgICBpZiAoY3VycmVudCA9PT0gJy4nKSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgICAgICAgIGN1cnJlbnQgPSBzdHJlYW0uY3VycmVudCgpOwogICAgICAgICAgICBpZiAoc3R5bGUgPT09ICdweS1pZGVudGlmaWVyJykgewogICAgICAgICAgICAgICAgcmV0dXJuICdweS1pZGVudGlmaWVyJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBkZWNvcmF0b3JzCiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICdAJykgewogICAgICAgICAgICBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICBjdXJyZW50ID0gc3RyZWFtLmN1cnJlbnQoKTsKICAgICAgICAgICAgaWYgKHN0eWxlID09PSAncHktaWRlbnRpZmllcicKICAgICAgICAgICAgICAgIHx8IGN1cnJlbnQgPT09ICdAc3RhdGljbWV0aG9kJwogICAgICAgICAgICAgICAgfHwgY3VycmVudCA9PT0gJ0BjbGFzc21ldGhvZCcpIHsKICAgICAgICAgICAgICAgIHJldHVybiAncHktZGVjb3JhdG9yJzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8vIEhhbmRsZSBzY29wZSBjaGFuZ2VzLgogICAgICAgIGlmIChjdXJyZW50ID09PSAncGFzcycgfHwgY3VycmVudCA9PT0gJ3JldHVybicpIHsKICAgICAgICAgICAgc3RhdGUuZGVkZW50ICs9IDE7CiAgICAgICAgfQogICAgICAgIGlmICgoY3VycmVudCA9PT0gJzonICYmICFzdGF0ZS5sYW1iZGEgJiYgc3RhdGUuc2NvcGVzWzBdLnR5cGUgPT0gJ3B5JykKICAgICAgICAgICAgfHwgc3R5bGUgPT09ICdweS1pbmRlbnQnKSB7CiAgICAgICAgICAgIGluZGVudChzdHJlYW0sIHN0YXRlKTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGltaXRlcl9pbmRleCA9ICdbKHsnLmluZGV4T2YoY3VycmVudCk7CiAgICAgICAgaWYgKGRlbGltaXRlcl9pbmRleCAhPT0gLTEpIHsKICAgICAgICAgICAgaW5kZW50KHN0cmVhbSwgc3RhdGUsICddKX0nLnNsaWNlKGRlbGltaXRlcl9pbmRleCwgZGVsaW1pdGVyX2luZGV4KzEpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0eWxlID09PSAncHktZGVkZW50JykgewogICAgICAgICAgICBpZiAoZGVkZW50KHN0cmVhbSwgc3RhdGUpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JDTEFTUzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBkZWxpbWl0ZXJfaW5kZXggPSAnXSl9Jy5pbmRleE9mKGN1cnJlbnQpOwogICAgICAgIGlmIChkZWxpbWl0ZXJfaW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIGlmIChkZWRlbnQoc3RyZWFtLCBzdGF0ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUkNMQVNTOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZS5kZWRlbnQgPiAwICYmIHN0cmVhbS5lb2woKSAmJiBzdGF0ZS5zY29wZXNbMF0udHlwZSA9PSAncHknKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5zY29wZXMubGVuZ3RoID4gMSkgc3RhdGUuc2NvcGVzLnNoaWZ0KCk7CiAgICAgICAgICAgIHN0YXRlLmRlZGVudCAtPSAxOwogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gc3R5bGU7CiAgICB9CgogICAgdmFyIGV4dGVybmFsID0gewogICAgICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKGJhc2Vjb2x1bW4pIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICB0b2tlbml6ZTogdG9rZW5CYXNlLAogICAgICAgICAgICAgIHNjb3BlczogW3tvZmZzZXQ6YmFzZWNvbHVtbiB8fCAwLCB0eXBlOidweSd9XSwKICAgICAgICAgICAgICBsYXN0VG9rZW46IG51bGwsCiAgICAgICAgICAgICAgbGFtYmRhOiBmYWxzZSwKICAgICAgICAgICAgICBkZWRlbnQ6IDAKICAgICAgICAgIH07CiAgICAgICAgfSwKICAgICAgICAKICAgICAgICB0b2tlbjogZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICAgICAgICB2YXIgc3R5bGUgPSB0b2tlbkxleGVyKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICAKICAgICAgICAgICAgc3RhdGUubGFzdFRva2VuID0ge3N0eWxlOnN0eWxlLCBjb250ZW50OiBzdHJlYW0uY3VycmVudCgpfTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkgJiYgc3RyZWFtLmxhbWJkYSkgewogICAgICAgICAgICAgICAgc3RhdGUubGFtYmRhID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIHJldHVybiBzdHlsZTsKICAgICAgICB9LAogICAgICAgIAogICAgICAgIGluZGVudDogZnVuY3Rpb24oc3RhdGUsIHRleHRBZnRlcikgewogICAgICAgICAgICBpZiAoc3RhdGUudG9rZW5pemUgIT0gdG9rZW5CYXNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgcmV0dXJuIHN0YXRlLnNjb3Blc1swXS5vZmZzZXQ7CiAgICAgICAgfQogICAgICAgIAogICAgfTsKICAgIHJldHVybiBleHRlcm5hbDsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1weXRob24iLCAicHl0aG9uIik7Cg==]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0icnN0LmpzIj48L3NjcmlwdD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0icnN0LmNzcyI+CiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPi5Db2RlTWlycm9yIHtib3JkZXItdG9wOiAxcHggc29saWQgYmxhY2s7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiByZVN0cnVjdHVyZWRUZXh0IG1vZGU8L2gxPgoKPGZvcm0+PHRleHRhcmVhIGlkPSJjb2RlIiBuYW1lPSJjb2RlIj4KLi4gVGhpcyBpcyBhbiBleGNlcnB0IGZyb20gU3BoaW54IGRvY3VtZW50YXRpb246IGh0dHA6Ly9zcGhpbngucG9jb28ub3JnL19zb3VyY2VzL3Jlc3QudHh0CgouLiBoaWdobGlnaHRsYW5nOjogcmVzdAoKLi4gX3JzdC1wcmltZXI6CgpyZVN0cnVjdHVyZWRUZXh0IFByaW1lcgo9PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBzZWN0aW9uIGlzIGEgYnJpZWYgaW50cm9kdWN0aW9uIHRvIHJlU3RydWN0dXJlZFRleHQgKHJlU1QpIGNvbmNlcHRzIGFuZApzeW50YXgsIGludGVuZGVkIHRvIHByb3ZpZGUgYXV0aG9ycyB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiB0byBhdXRob3IgZG9jdW1lbnRzCnByb2R1Y3RpdmVseS4gIFNpbmNlIHJlU1Qgd2FzIGRlc2lnbmVkIHRvIGJlIGEgc2ltcGxlLCB1bm9idHJ1c2l2ZSBtYXJrdXAKbGFuZ3VhZ2UsIHRoaXMgd2lsbCBub3QgdGFrZSB0b28gbG9uZy4KCi4uIHNlZWFsc286OgoKICAgVGhlIGF1dGhvcml0YXRpdmUgYHJlU3RydWN0dXJlZFRleHQgVXNlciBEb2N1bWVudGF0aW9uCiAgICZsdDtodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0L3JzdC5odG1sJmd0O2BfLiAgVGhlICJyZWYiIGxpbmtzIGluIHRoaXMKICAgZG9jdW1lbnQgbGluayB0byB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGluZGl2aWR1YWwgY29uc3RydWN0cyBpbiB0aGUgcmVTVAogICByZWZlcmVuY2UuCgoKUGFyYWdyYXBocwotLS0tLS0tLS0tCgpUaGUgcGFyYWdyYXBoICg6ZHVyZWY6YHJlZiAmbHQ7cGFyYWdyYXBocyZndDtgKSBpcyB0aGUgbW9zdCBiYXNpYyBibG9jayBpbiBhIHJlU1QKZG9jdW1lbnQuICBQYXJhZ3JhcGhzIGFyZSBzaW1wbHkgY2h1bmtzIG9mIHRleHQgc2VwYXJhdGVkIGJ5IG9uZSBvciBtb3JlIGJsYW5rCmxpbmVzLiAgQXMgaW4gUHl0aG9uLCBpbmRlbnRhdGlvbiBpcyBzaWduaWZpY2FudCBpbiByZVNULCBzbyBhbGwgbGluZXMgb2YgdGhlCnNhbWUgcGFyYWdyYXBoIG11c3QgYmUgbGVmdC1hbGlnbmVkIHRvIHRoZSBzYW1lIGxldmVsIG9mIGluZGVudGF0aW9uLgoKCi4uIF9pbmxpbmVtYXJrdXA6CgpJbmxpbmUgbWFya3VwCi0tLS0tLS0tLS0tLS0KClRoZSBzdGFuZGFyZCByZVNUIGlubGluZSBtYXJrdXAgaXMgcXVpdGUgc2ltcGxlOiB1c2UKCiogb25lIGFzdGVyaXNrOiBgYCp0ZXh0KmBgIGZvciBlbXBoYXNpcyAoaXRhbGljcyksCiogdHdvIGFzdGVyaXNrczogYGAqKnRleHQqKmBgIGZvciBzdHJvbmcgZW1waGFzaXMgKGJvbGRmYWNlKSwgYW5kCiogYmFja3F1b3RlczogYGBgYHRleHRgYGBgIGZvciBjb2RlIHNhbXBsZXMuCgpJZiBhc3Rlcmlza3Mgb3IgYmFja3F1b3RlcyBhcHBlYXIgaW4gcnVubmluZyB0ZXh0IGFuZCBjb3VsZCBiZSBjb25mdXNlZCB3aXRoCmlubGluZSBtYXJrdXAgZGVsaW1pdGVycywgdGhleSBoYXZlIHRvIGJlIGVzY2FwZWQgd2l0aCBhIGJhY2tzbGFzaC4KCkJlIGF3YXJlIG9mIHNvbWUgcmVzdHJpY3Rpb25zIG9mIHRoaXMgbWFya3VwOgoKKiBpdCBtYXkgbm90IGJlIG5lc3RlZCwKKiBjb250ZW50IG1heSBub3Qgc3RhcnQgb3IgZW5kIHdpdGggd2hpdGVzcGFjZTogYGAqIHRleHQqYGAgaXMgd3JvbmcsCiogaXQgbXVzdCBiZSBzZXBhcmF0ZWQgZnJvbSBzdXJyb3VuZGluZyB0ZXh0IGJ5IG5vbi13b3JkIGNoYXJhY3RlcnMuICBVc2UgYQogIGJhY2tzbGFzaCBlc2NhcGVkIHNwYWNlIHRvIHdvcmsgYXJvdW5kIHRoYXQ6IGBgdGhpc2lzXCAqb25lKlwgd29yZGBgLgoKVGhlc2UgcmVzdHJpY3Rpb25zIG1heSBiZSBsaWZ0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBkb2N1dGlscy4KCnJlU1QgYWxzbyBhbGxvd3MgZm9yIGN1c3RvbSAiaW50ZXJwcmV0ZWQgdGV4dCByb2xlcyInLCB3aGljaCBzaWduaWZ5IHRoYXQgdGhlCmVuY2xvc2VkIHRleHQgc2hvdWxkIGJlIGludGVycHJldGVkIGluIGEgc3BlY2lmaWMgd2F5LiAgU3BoaW54IHVzZXMgdGhpcyB0bwpwcm92aWRlIHNlbWFudGljIG1hcmt1cCBhbmQgY3Jvc3MtcmVmZXJlbmNpbmcgb2YgaWRlbnRpZmllcnMsIGFzIGRlc2NyaWJlZCBpbgp0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbi4gIFRoZSBnZW5lcmFsIHN5bnRheCBpcyBgYDpyb2xlbmFtZTpgY29udGVudGBgYC4KClN0YW5kYXJkIHJlU1QgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyByb2xlczoKCiogOmR1cm9sZTpgZW1waGFzaXNgIC0tIGFsdGVybmF0ZSBzcGVsbGluZyBmb3IgYGAqZW1waGFzaXMqYGAKKiA6ZHVyb2xlOmBzdHJvbmdgIC0tIGFsdGVybmF0ZSBzcGVsbGluZyBmb3IgYGAqKnN0cm9uZyoqYGAKKiA6ZHVyb2xlOmBsaXRlcmFsYCAtLSBhbHRlcm5hdGUgc3BlbGxpbmcgZm9yIGBgYGBsaXRlcmFsYGBgYAoqIDpkdXJvbGU6YHN1YnNjcmlwdGAgLS0gc3Vic2NyaXB0IHRleHQKKiA6ZHVyb2xlOmBzdXBlcnNjcmlwdGAgLS0gc3VwZXJzY3JpcHQgdGV4dAoqIDpkdXJvbGU6YHRpdGxlLXJlZmVyZW5jZWAgLS0gZm9yIHRpdGxlcyBvZiBib29rcywgcGVyaW9kaWNhbHMsIGFuZCBvdGhlcgogIG1hdGVyaWFscwoKU2VlIDpyZWY6YGlubGluZS1tYXJrdXBgIGZvciByb2xlcyBhZGRlZCBieSBTcGhpbnguCgoKTGlzdHMgYW5kIFF1b3RlLWxpa2UgYmxvY2tzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKTGlzdCBtYXJrdXAgKDpkdXJlZjpgcmVmICZsdDtidWxsZXQtbGlzdHMmZ3Q7YCkgaXMgbmF0dXJhbDoganVzdCBwbGFjZSBhbiBhc3RlcmlzayBhdAp0aGUgc3RhcnQgb2YgYSBwYXJhZ3JhcGggYW5kIGluZGVudCBwcm9wZXJseS4gIFRoZSBzYW1lIGdvZXMgZm9yIG51bWJlcmVkIGxpc3RzOwp0aGV5IGNhbiBhbHNvIGJlIGF1dG9udW1iZXJlZCB1c2luZyBhIGBgI2BgIHNpZ246OgoKICAgKiBUaGlzIGlzIGEgYnVsbGV0ZWQgbGlzdC4KICAgKiBJdCBoYXMgdHdvIGl0ZW1zLCB0aGUgc2Vjb25kCiAgICAgaXRlbSB1c2VzIHR3byBsaW5lcy4KCiAgIDEuIFRoaXMgaXMgYSBudW1iZXJlZCBsaXN0LgogICAyLiBJdCBoYXMgdHdvIGl0ZW1zIHRvby4KCiAgICMuIFRoaXMgaXMgYSBudW1iZXJlZCBsaXN0LgogICAjLiBJdCBoYXMgdHdvIGl0ZW1zIHRvby4KCgpOZXN0ZWQgbGlzdHMgYXJlIHBvc3NpYmxlLCBidXQgYmUgYXdhcmUgdGhhdCB0aGV5IG11c3QgYmUgc2VwYXJhdGVkIGZyb20gdGhlCnBhcmVudCBsaXN0IGl0ZW1zIGJ5IGJsYW5rIGxpbmVzOjoKCiAgICogdGhpcyBpcwogICAqIGEgbGlzdAoKICAgICAqIHdpdGggYSBuZXN0ZWQgbGlzdAogICAgICogYW5kIHNvbWUgc3ViaXRlbXMKCiAgICogYW5kIGhlcmUgdGhlIHBhcmVudCBsaXN0IGNvbnRpbnVlcwoKRGVmaW5pdGlvbiBsaXN0cyAoOmR1cmVmOmByZWYgJmx0O2RlZmluaXRpb24tbGlzdHMmZ3Q7YCkgYXJlIGNyZWF0ZWQgYXMgZm9sbG93czo6CgogICB0ZXJtICh1cCB0byBhIGxpbmUgb2YgdGV4dCkKICAgICAgRGVmaW5pdGlvbiBvZiB0aGUgdGVybSwgd2hpY2ggbXVzdCBiZSBpbmRlbnRlZAoKICAgICAgYW5kIGNhbiBldmVuIGNvbnNpc3Qgb2YgbXVsdGlwbGUgcGFyYWdyYXBocwoKICAgbmV4dCB0ZXJtCiAgICAgIERlc2NyaXB0aW9uLgoKTm90ZSB0aGF0IHRoZSB0ZXJtIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgbGluZSBvZiB0ZXh0LgoKUXVvdGVkIHBhcmFncmFwaHMgKDpkdXJlZjpgcmVmICZsdDtibG9jay1xdW90ZXMmZ3Q7YCkgYXJlIGNyZWF0ZWQgYnkganVzdCBpbmRlbnRpbmcKdGhlbSBtb3JlIHRoYW4gdGhlIHN1cnJvdW5kaW5nIHBhcmFncmFwaHMuCgpMaW5lIGJsb2NrcyAoOmR1cmVmOmByZWYgJmx0O2xpbmUtYmxvY2tzJmd0O2ApIGFyZSBhIHdheSBvZiBwcmVzZXJ2aW5nIGxpbmUgYnJlYWtzOjoKCiAgIHwgVGhlc2UgbGluZXMgYXJlCiAgIHwgYnJva2VuIGV4YWN0bHkgbGlrZSBpbgogICB8IHRoZSBzb3VyY2UgZmlsZS4KClRoZXJlIGFyZSBhbHNvIHNldmVyYWwgbW9yZSBzcGVjaWFsIGJsb2NrcyBhdmFpbGFibGU6CgoqIGZpZWxkIGxpc3RzICg6ZHVyZWY6YHJlZiAmbHQ7ZmllbGQtbGlzdHMmZ3Q7YCkKKiBvcHRpb24gbGlzdHMgKDpkdXJlZjpgcmVmICZsdDtvcHRpb24tbGlzdHMmZ3Q7YCkKKiBxdW90ZWQgbGl0ZXJhbCBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtxdW90ZWQtbGl0ZXJhbC1ibG9ja3MmZ3Q7YCkKKiBkb2N0ZXN0IGJsb2NrcyAoOmR1cmVmOmByZWYgJmx0O2RvY3Rlc3QtYmxvY2tzJmd0O2ApCgoKU291cmNlIENvZGUKLS0tLS0tLS0tLS0KCkxpdGVyYWwgY29kZSBibG9ja3MgKDpkdXJlZjpgcmVmICZsdDtsaXRlcmFsLWJsb2NrcyZndDtgKSBhcmUgaW50cm9kdWNlZCBieSBlbmRpbmcgYQpwYXJhZ3JhcGggd2l0aCB0aGUgc3BlY2lhbCBtYXJrZXIgYGA6OmBgLiAgVGhlIGxpdGVyYWwgYmxvY2sgbXVzdCBiZSBpbmRlbnRlZAooYW5kLCBsaWtlIGFsbCBwYXJhZ3JhcGhzLCBzZXBhcmF0ZWQgZnJvbSB0aGUgc3Vycm91bmRpbmcgb25lcyBieSBibGFuayBsaW5lcyk6OgoKICAgVGhpcyBpcyBhIG5vcm1hbCB0ZXh0IHBhcmFncmFwaC4gVGhlIG5leHQgcGFyYWdyYXBoIGlzIGEgY29kZSBzYW1wbGU6OgoKICAgICAgSXQgaXMgbm90IHByb2Nlc3NlZCBpbiBhbnkgd2F5LCBleGNlcHQKICAgICAgdGhhdCB0aGUgaW5kZW50YXRpb24gaXMgcmVtb3ZlZC4KCiAgICAgIEl0IGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzLgoKICAgVGhpcyBpcyBhIG5vcm1hbCB0ZXh0IHBhcmFncmFwaCBhZ2Fpbi4KClRoZSBoYW5kbGluZyBvZiB0aGUgYGA6OmBgIG1hcmtlciBpcyBzbWFydDoKCiogSWYgaXQgb2NjdXJzIGFzIGEgcGFyYWdyYXBoIG9mIGl0cyBvd24sIHRoYXQgcGFyYWdyYXBoIGlzIGNvbXBsZXRlbHkgbGVmdAogIG91dCBvZiB0aGUgZG9jdW1lbnQuCiogSWYgaXQgaXMgcHJlY2VkZWQgYnkgd2hpdGVzcGFjZSwgdGhlIG1hcmtlciBpcyByZW1vdmVkLgoqIElmIGl0IGlzIHByZWNlZGVkIGJ5IG5vbi13aGl0ZXNwYWNlLCB0aGUgbWFya2VyIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlCiAgY29sb24uCgpUaGF0IHdheSwgdGhlIHNlY29uZCBzZW50ZW5jZSBpbiB0aGUgYWJvdmUgZXhhbXBsZSdzIGZpcnN0IHBhcmFncmFwaCB3b3VsZCBiZQpyZW5kZXJlZCBhcyAiVGhlIG5leHQgcGFyYWdyYXBoIGlzIGEgY29kZSBzYW1wbGU6Ii4KCgouLiBfcnN0LXRhYmxlczoKClRhYmxlcwotLS0tLS0KClR3byBmb3JtcyBvZiB0YWJsZXMgYXJlIHN1cHBvcnRlZC4gIEZvciAqZ3JpZCB0YWJsZXMqICg6ZHVyZWY6YHJlZgombHQ7Z3JpZC10YWJsZXMmZ3Q7YCksIHlvdSBoYXZlIHRvICJwYWludCIgdGhlIGNlbGwgZ3JpZCB5b3Vyc2VsZi4gIFRoZXkgbG9vayBsaWtlCnRoaXM6OgoKICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tKwogICB8IEhlYWRlciByb3csIGNvbHVtbiAxICAgfCBIZWFkZXIgMiAgIHwgSGVhZGVyIDMgfCBIZWFkZXIgNCB8CiAgIHwgKGhlYWRlciByb3dzIG9wdGlvbmFsKSB8ICAgICAgICAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwKICAgKz09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rPT09PT09PT09PSs9PT09PT09PT09KwogICB8IGJvZHkgcm93IDEsIGNvbHVtbiAxICAgfCBjb2x1bW4gMiAgIHwgY29sdW1uIDMgfCBjb2x1bW4gNCB8CiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKICAgfCBib2R5IHJvdyAyICAgICAgICAgICAgIHwgLi4uICAgICAgICB8IC4uLiAgICAgIHwgICAgICAgICAgfAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tLS0rCgoqU2ltcGxlIHRhYmxlcyogKDpkdXJlZjpgcmVmICZsdDtzaW1wbGUtdGFibGVzJmd0O2ApIGFyZSBlYXNpZXIgdG8gd3JpdGUsIGJ1dApsaW1pdGVkOiB0aGV5IG11c3QgY29udGFpbiBtb3JlIHRoYW4gb25lIHJvdywgYW5kIHRoZSBmaXJzdCBjb2x1bW4gY2Fubm90CmNvbnRhaW4gbXVsdGlwbGUgbGluZXMuICBUaGV5IGxvb2sgbGlrZSB0aGlzOjoKCiAgID09PT09ICA9PT09PSAgPT09PT09PQogICBBICAgICAgQiAgICAgIEEgYW5kIEIKICAgPT09PT0gID09PT09ICA9PT09PT09CiAgIEZhbHNlICBGYWxzZSAgRmFsc2UKICAgVHJ1ZSAgIEZhbHNlICBGYWxzZQogICBGYWxzZSAgVHJ1ZSAgIEZhbHNlCiAgIFRydWUgICBUcnVlICAgVHJ1ZQogICA9PT09PSAgPT09PT0gID09PT09PT0KCgpIeXBlcmxpbmtzCi0tLS0tLS0tLS0KCkV4dGVybmFsIGxpbmtzCl5eXl5eXl5eXl5eXl5eCgpVc2UgYGBgTGluayB0ZXh0ICZsdDtodHRwOi8vZXhhbXBsZS5jb20vJmd0O2BfYGAgZm9yIGlubGluZSB3ZWIgbGlua3MuICBJZiB0aGUgbGluawp0ZXh0IHNob3VsZCBiZSB0aGUgd2ViIGFkZHJlc3MsIHlvdSBkb24ndCBuZWVkIHNwZWNpYWwgbWFya3VwIGF0IGFsbCwgdGhlIHBhcnNlcgpmaW5kcyBsaW5rcyBhbmQgbWFpbCBhZGRyZXNzZXMgaW4gb3JkaW5hcnkgdGV4dC4KCllvdSBjYW4gYWxzbyBzZXBhcmF0ZSB0aGUgbGluayBhbmQgdGhlIHRhcmdldCBkZWZpbml0aW9uICg6ZHVyZWY6YHJlZgombHQ7aHlwZXJsaW5rLXRhcmdldHMmZ3Q7YCksIGxpa2UgdGhpczo6CgogICBUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgY29udGFpbnMgYGEgbGlua2BfLgoKICAgLi4gX2EgbGluazogaHR0cDovL2V4YW1wbGUuY29tLwoKCkludGVybmFsIGxpbmtzCl5eXl5eXl5eXl5eXl5eCgpJbnRlcm5hbCBsaW5raW5nIGlzIGRvbmUgdmlhIGEgc3BlY2lhbCByZVNUIHJvbGUgcHJvdmlkZWQgYnkgU3BoaW54LCBzZWUgdGhlCnNlY3Rpb24gb24gc3BlY2lmaWMgbWFya3VwLCA6cmVmOmByZWYtcm9sZWAuCgoKU2VjdGlvbnMKLS0tLS0tLS0KClNlY3Rpb24gaGVhZGVycyAoOmR1cmVmOmByZWYgJmx0O3NlY3Rpb25zJmd0O2ApIGFyZSBjcmVhdGVkIGJ5IHVuZGVybGluaW5nIChhbmQKb3B0aW9uYWxseSBvdmVybGluaW5nKSB0aGUgc2VjdGlvbiB0aXRsZSB3aXRoIGEgcHVuY3R1YXRpb24gY2hhcmFjdGVyLCBhdCBsZWFzdAphcyBsb25nIGFzIHRoZSB0ZXh0OjoKCiAgID09PT09PT09PT09PT09PT09CiAgIFRoaXMgaXMgYSBoZWFkaW5nCiAgID09PT09PT09PT09PT09PT09CgpOb3JtYWxseSwgdGhlcmUgYXJlIG5vIGhlYWRpbmcgbGV2ZWxzIGFzc2lnbmVkIHRvIGNlcnRhaW4gY2hhcmFjdGVycyBhcyB0aGUKc3RydWN0dXJlIGlzIGRldGVybWluZWQgZnJvbSB0aGUgc3VjY2Vzc2lvbiBvZiBoZWFkaW5ncy4gIEhvd2V2ZXIsIGZvciB0aGUKUHl0aG9uIGRvY3VtZW50YXRpb24sIHRoaXMgY29udmVudGlvbiBpcyB1c2VkIHdoaWNoIHlvdSBtYXkgZm9sbG93OgoKKiBgYCNgYCB3aXRoIG92ZXJsaW5lLCBmb3IgcGFydHMKKiBgYCpgYCB3aXRoIG92ZXJsaW5lLCBmb3IgY2hhcHRlcnMKKiBgYD1gYCwgZm9yIHNlY3Rpb25zCiogYGAtYGAsIGZvciBzdWJzZWN0aW9ucwoqIGBgXmBgLCBmb3Igc3Vic3Vic2VjdGlvbnMKKiBgYCJgYCwgZm9yIHBhcmFncmFwaHMKCk9mIGNvdXJzZSwgeW91IGFyZSBmcmVlIHRvIHVzZSB5b3VyIG93biBtYXJrZXIgY2hhcmFjdGVycyAoc2VlIHRoZSByZVNUCmRvY3VtZW50YXRpb24pLCBhbmQgdXNlIGEgZGVlcGVyIG5lc3RpbmcgbGV2ZWwsIGJ1dCBrZWVwIGluIG1pbmQgdGhhdCBtb3N0CnRhcmdldCBmb3JtYXRzIChIVE1MLCBMYVRlWCkgaGF2ZSBhIGxpbWl0ZWQgc3VwcG9ydGVkIG5lc3RpbmcgZGVwdGguCgoKRXhwbGljaXQgTWFya3VwCi0tLS0tLS0tLS0tLS0tLQoKIkV4cGxpY2l0IG1hcmt1cCIgKDpkdXJlZjpgcmVmICZsdDtleHBsaWNpdC1tYXJrdXAtYmxvY2tzJmd0O2ApIGlzIHVzZWQgaW4gcmVTVCBmb3IKbW9zdCBjb25zdHJ1Y3RzIHRoYXQgbmVlZCBzcGVjaWFsIGhhbmRsaW5nLCBzdWNoIGFzIGZvb3Rub3RlcywKc3BlY2lhbGx5LWhpZ2hsaWdodGVkIHBhcmFncmFwaHMsIGNvbW1lbnRzLCBhbmQgZ2VuZXJpYyBkaXJlY3RpdmVzLgoKQW4gZXhwbGljaXQgbWFya3VwIGJsb2NrIGJlZ2lucyB3aXRoIGEgbGluZSBzdGFydGluZyB3aXRoIGBgLi5gYCBmb2xsb3dlZCBieQp3aGl0ZXNwYWNlIGFuZCBpcyB0ZXJtaW5hdGVkIGJ5IHRoZSBuZXh0IHBhcmFncmFwaCBhdCB0aGUgc2FtZSBsZXZlbCBvZgppbmRlbnRhdGlvbi4gIChUaGVyZSBuZWVkcyB0byBiZSBhIGJsYW5rIGxpbmUgYmV0d2VlbiBleHBsaWNpdCBtYXJrdXAgYW5kIG5vcm1hbApwYXJhZ3JhcGhzLiAgVGhpcyBtYXkgYWxsIHNvdW5kIGEgYml0IGNvbXBsaWNhdGVkLCBidXQgaXQgaXMgaW50dWl0aXZlIGVub3VnaAp3aGVuIHlvdSB3cml0ZSBpdC4pCgoKLi4gX2RpcmVjdGl2ZXM6CgpEaXJlY3RpdmVzCi0tLS0tLS0tLS0KCkEgZGlyZWN0aXZlICg6ZHVyZWY6YHJlZiAmbHQ7ZGlyZWN0aXZlcyZndDtgKSBpcyBhIGdlbmVyaWMgYmxvY2sgb2YgZXhwbGljaXQgbWFya3VwLgpCZXNpZGVzIHJvbGVzLCBpdCBpcyBvbmUgb2YgdGhlIGV4dGVuc2lvbiBtZWNoYW5pc21zIG9mIHJlU1QsIGFuZCBTcGhpbnggbWFrZXMKaGVhdnkgdXNlIG9mIGl0LgoKRG9jdXRpbHMgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBkaXJlY3RpdmVzOgoKKiBBZG1vbml0aW9uczogOmR1ZGlyOmBhdHRlbnRpb25gLCA6ZHVkaXI6YGNhdXRpb25gLCA6ZHVkaXI6YGRhbmdlcmAsCiAgOmR1ZGlyOmBlcnJvcmAsIDpkdWRpcjpgaGludGAsIDpkdWRpcjpgaW1wb3J0YW50YCwgOmR1ZGlyOmBub3RlYCwKICA6ZHVkaXI6YHRpcGAsIDpkdWRpcjpgd2FybmluZ2AgYW5kIHRoZSBnZW5lcmljIDpkdWRpcjpgYWRtb25pdGlvbmAuCiAgKE1vc3QgdGhlbWVzIHN0eWxlIG9ubHkgIm5vdGUiIGFuZCAid2FybmluZyIgc3BlY2lhbGx5LikKCiogSW1hZ2VzOgoKICAtIDpkdWRpcjpgaW1hZ2VgIChzZWUgYWxzbyBJbWFnZXNfIGJlbG93KQogIC0gOmR1ZGlyOmBmaWd1cmVgIChhbiBpbWFnZSB3aXRoIGNhcHRpb24gYW5kIG9wdGlvbmFsIGxlZ2VuZCkKCiogQWRkaXRpb25hbCBib2R5IGVsZW1lbnRzOgoKICAtIDpkdWRpcjpgY29udGVudHNgIChhIGxvY2FsLCBpLmUuIGZvciB0aGUgY3VycmVudCBmaWxlIG9ubHksIHRhYmxlIG9mCiAgICBjb250ZW50cykKICAtIDpkdWRpcjpgY29udGFpbmVyYCAoYSBjb250YWluZXIgd2l0aCBhIGN1c3RvbSBjbGFzcywgdXNlZnVsIHRvIGdlbmVyYXRlIGFuCiAgICBvdXRlciBgYCZsdDtkaXYmZ3Q7YGAgaW4gSFRNTCkKICAtIDpkdWRpcjpgcnVicmljYCAoYSBoZWFkaW5nIHdpdGhvdXQgcmVsYXRpb24gdG8gdGhlIGRvY3VtZW50IHNlY3Rpb25pbmcpCiAgLSA6ZHVkaXI6YHRvcGljYCwgOmR1ZGlyOmBzaWRlYmFyYCAoc3BlY2lhbCBoaWdobGlnaHRlZCBib2R5IGVsZW1lbnRzKQogIC0gOmR1ZGlyOmBwYXJzZWQtbGl0ZXJhbGAgKGxpdGVyYWwgYmxvY2sgdGhhdCBzdXBwb3J0cyBpbmxpbmUgbWFya3VwKQogIC0gOmR1ZGlyOmBlcGlncmFwaGAgKGEgYmxvY2sgcXVvdGUgd2l0aCBvcHRpb25hbCBhdHRyaWJ1dGlvbiBsaW5lKQogIC0gOmR1ZGlyOmBoaWdobGlnaHRzYCwgOmR1ZGlyOmBwdWxsLXF1b3RlYCAoYmxvY2sgcXVvdGVzIHdpdGggdGhlaXIgb3duCiAgICBjbGFzcyBhdHRyaWJ1dGUpCiAgLSA6ZHVkaXI6YGNvbXBvdW5kYCAoYSBjb21wb3VuZCBwYXJhZ3JhcGgpCgoqIFNwZWNpYWwgdGFibGVzOgoKICAtIDpkdWRpcjpgdGFibGVgIChhIHRhYmxlIHdpdGggdGl0bGUpCiAgLSA6ZHVkaXI6YGNzdi10YWJsZWAgKGEgdGFibGUgZ2VuZXJhdGVkIGZyb20gY29tbWEtc2VwYXJhdGVkIHZhbHVlcykKICAtIDpkdWRpcjpgbGlzdC10YWJsZWAgKGEgdGFibGUgZ2VuZXJhdGVkIGZyb20gYSBsaXN0IG9mIGxpc3RzKQoKKiBTcGVjaWFsIGRpcmVjdGl2ZXM6CgogIC0gOmR1ZGlyOmByYXdgIChpbmNsdWRlIHJhdyB0YXJnZXQtZm9ybWF0IG1hcmt1cCkKICAtIDpkdWRpcjpgaW5jbHVkZWAgKGluY2x1ZGUgcmVTdHJ1Y3R1cmVkVGV4dCBmcm9tIGFub3RoZXIgZmlsZSkKICAgIC0tIGluIFNwaGlueCwgd2hlbiBnaXZlbiBhbiBhYnNvbHV0ZSBpbmNsdWRlIGZpbGUgcGF0aCwgdGhpcyBkaXJlY3RpdmUgdGFrZXMKICAgIGl0IGFzIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZGlyZWN0b3J5CiAgLSA6ZHVkaXI6YGNsYXNzYCAoYXNzaWduIGEgY2xhc3MgYXR0cmlidXRlIHRvIHRoZSBuZXh0IGVsZW1lbnQpIFsxXV8KCiogSFRNTCBzcGVjaWZpY3M6CgogIC0gOmR1ZGlyOmBtZXRhYCAoZ2VuZXJhdGlvbiBvZiBIVE1MIGBgJmx0O21ldGEmZ3Q7YGAgdGFncykKICAtIDpkdWRpcjpgdGl0bGVgIChvdmVycmlkZSBkb2N1bWVudCB0aXRsZSkKCiogSW5mbHVlbmNpbmcgbWFya3VwOgoKICAtIDpkdWRpcjpgZGVmYXVsdC1yb2xlYCAoc2V0IGEgbmV3IGRlZmF1bHQgcm9sZSkKICAtIDpkdWRpcjpgcm9sZWAgKGNyZWF0ZSBhIG5ldyByb2xlKQoKICBTaW5jZSB0aGVzZSBhcmUgb25seSBwZXItZmlsZSwgYmV0dGVyIHVzZSBTcGhpbngnIGZhY2lsaXRpZXMgZm9yIHNldHRpbmcgdGhlCiAgOmNvbmZ2YWw6YGRlZmF1bHRfcm9sZWAuCgpEbyAqbm90KiB1c2UgdGhlIGRpcmVjdGl2ZXMgOmR1ZGlyOmBzZWN0bnVtYCwgOmR1ZGlyOmBoZWFkZXJgIGFuZAo6ZHVkaXI6YGZvb3RlcmAuCgpEaXJlY3RpdmVzIGFkZGVkIGJ5IFNwaGlueCBhcmUgZGVzY3JpYmVkIGluIDpyZWY6YHNwaGlueG1hcmt1cGAuCgpCYXNpY2FsbHksIGEgZGlyZWN0aXZlIGNvbnNpc3RzIG9mIGEgbmFtZSwgYXJndW1lbnRzLCBvcHRpb25zIGFuZCBjb250ZW50LiAoS2VlcAp0aGlzIHRlcm1pbm9sb2d5IGluIG1pbmQsIGl0IGlzIHVzZWQgaW4gdGhlIG5leHQgY2hhcHRlciBkZXNjcmliaW5nIGN1c3RvbQpkaXJlY3RpdmVzLikgIExvb2tpbmcgYXQgdGhpcyBleGFtcGxlLCA6OgoKICAgLi4gZnVuY3Rpb246OiBmb28oeCkKICAgICAgICAgICAgICAgICBmb28oeSwgeikKICAgICAgOm1vZHVsZTogc29tZS5tb2R1bGUubmFtZQoKICAgICAgUmV0dXJuIGEgbGluZSBvZiB0ZXh0IGlucHV0IGZyb20gdGhlIHVzZXIuCgpgYGZ1bmN0aW9uYGAgaXMgdGhlIGRpcmVjdGl2ZSBuYW1lLiAgSXQgaXMgZ2l2ZW4gdHdvIGFyZ3VtZW50cyBoZXJlLCB0aGUKcmVtYWluZGVyIG9mIHRoZSBmaXJzdCBsaW5lIGFuZCB0aGUgc2Vjb25kIGxpbmUsIGFzIHdlbGwgYXMgb25lIG9wdGlvbgpgYG1vZHVsZWBgIChhcyB5b3UgY2FuIHNlZSwgb3B0aW9ucyBhcmUgZ2l2ZW4gaW4gdGhlIGxpbmVzIGltbWVkaWF0ZWx5IGZvbGxvd2luZwp0aGUgYXJndW1lbnRzIGFuZCBpbmRpY2F0ZWQgYnkgdGhlIGNvbG9ucykuICBPcHRpb25zIG11c3QgYmUgaW5kZW50ZWQgdG8gdGhlCnNhbWUgbGV2ZWwgYXMgdGhlIGRpcmVjdGl2ZSBjb250ZW50LgoKVGhlIGRpcmVjdGl2ZSBjb250ZW50IGZvbGxvd3MgYWZ0ZXIgYSBibGFuayBsaW5lIGFuZCBpcyBpbmRlbnRlZCByZWxhdGl2ZSB0byB0aGUKZGlyZWN0aXZlIHN0YXJ0LgoKCkltYWdlcwotLS0tLS0KCnJlU1Qgc3VwcG9ydHMgYW4gaW1hZ2UgZGlyZWN0aXZlICg6ZHVkaXI6YHJlZiAmbHQ7aW1hZ2UmZ3Q7YCksIHVzZWQgbGlrZSBzbzo6CgogICAuLiBpbWFnZTo6IGdudS5wbmcKICAgICAgKG9wdGlvbnMpCgpXaGVuIHVzZWQgd2l0aGluIFNwaGlueCwgdGhlIGZpbGUgbmFtZSBnaXZlbiAoaGVyZSBgYGdudS5wbmdgYCkgbXVzdCBlaXRoZXIgYmUKcmVsYXRpdmUgdG8gdGhlIHNvdXJjZSBmaWxlLCBvciBhYnNvbHV0ZSB3aGljaCBtZWFucyB0aGF0IHRoZXkgYXJlIHJlbGF0aXZlIHRvCnRoZSB0b3Agc291cmNlIGRpcmVjdG9yeS4gIEZvciBleGFtcGxlLCB0aGUgZmlsZSBgYHNrZXRjaC9zcGFtLnJzdGBgIGNvdWxkIHJlZmVyCnRvIHRoZSBpbWFnZSBgYGltYWdlcy9zcGFtLnBuZ2BgIGFzIGBgLi4vaW1hZ2VzL3NwYW0ucG5nYGAgb3IKYGAvaW1hZ2VzL3NwYW0ucG5nYGAuCgpTcGhpbnggd2lsbCBhdXRvbWF0aWNhbGx5IGNvcHkgaW1hZ2UgZmlsZXMgb3ZlciB0byBhIHN1YmRpcmVjdG9yeSBvZiB0aGUgb3V0cHV0CmRpcmVjdG9yeSBvbiBidWlsZGluZyAoZS5nLiB0aGUgYGBfc3RhdGljYGAgZGlyZWN0b3J5IGZvciBIVE1MIG91dHB1dC4pCgpJbnRlcnByZXRhdGlvbiBvZiBpbWFnZSBzaXplIG9wdGlvbnMgKGBgd2lkdGhgYCBhbmQgYGBoZWlnaHRgYCkgaXMgYXMgZm9sbG93czoKaWYgdGhlIHNpemUgaGFzIG5vIHVuaXQgb3IgdGhlIHVuaXQgaXMgcGl4ZWxzLCB0aGUgZ2l2ZW4gc2l6ZSB3aWxsIG9ubHkgYmUKcmVzcGVjdGVkIGZvciBvdXRwdXQgY2hhbm5lbHMgdGhhdCBzdXBwb3J0IHBpeGVscyAoaS5lLiBub3QgaW4gTGFUZVggb3V0cHV0KS4KT3RoZXIgdW5pdHMgKGxpa2UgYGBwdGBgIGZvciBwb2ludHMpIHdpbGwgYmUgdXNlZCBmb3IgSFRNTCBhbmQgTGFUZVggb3V0cHV0LgoKU3BoaW54IGV4dGVuZHMgdGhlIHN0YW5kYXJkIGRvY3V0aWxzIGJlaGF2aW9yIGJ5IGFsbG93aW5nIGFuIGFzdGVyaXNrIGZvciB0aGUKZXh0ZW5zaW9uOjoKCiAgIC4uIGltYWdlOjogZ251LioKClNwaGlueCB0aGVuIHNlYXJjaGVzIGZvciBhbGwgaW1hZ2VzIG1hdGNoaW5nIHRoZSBwcm92aWRlZCBwYXR0ZXJuIGFuZCBkZXRlcm1pbmVzCnRoZWlyIHR5cGUuICBFYWNoIGJ1aWxkZXIgdGhlbiBjaG9vc2VzIHRoZSBiZXN0IGltYWdlIG91dCBvZiB0aGVzZSBjYW5kaWRhdGVzLgpGb3IgaW5zdGFuY2UsIGlmIHRoZSBmaWxlIG5hbWUgYGBnbnUuKmBgIHdhcyBnaXZlbiBhbmQgdHdvIGZpbGVzIDpmaWxlOmBnbnUucGRmYAphbmQgOmZpbGU6YGdudS5wbmdgIGV4aXN0ZWQgaW4gdGhlIHNvdXJjZSB0cmVlLCB0aGUgTGFUZVggYnVpbGRlciB3b3VsZCBjaG9vc2UKdGhlIGZvcm1lciwgd2hpbGUgdGhlIEhUTUwgYnVpbGRlciB3b3VsZCBwcmVmZXIgdGhlIGxhdHRlci4KCi4uIHZlcnNpb25jaGFuZ2VkOjogMC40CiAgIEFkZGVkIHRoZSBzdXBwb3J0IGZvciBmaWxlIG5hbWVzIGVuZGluZyBpbiBhbiBhc3Rlcmlzay4KCi4uIHZlcnNpb25jaGFuZ2VkOjogMC42CiAgIEltYWdlIHBhdGhzIGNhbiBub3cgYmUgYWJzb2x1dGUuCgoKRm9vdG5vdGVzCi0tLS0tLS0tLQoKRm9yIGZvb3Rub3RlcyAoOmR1cmVmOmByZWYgJmx0O2Zvb3Rub3RlcyZndDtgKSwgdXNlIGBgWyNuYW1lXV9gYCB0byBtYXJrIHRoZSBmb290bm90ZQpsb2NhdGlvbiwgYW5kIGFkZCB0aGUgZm9vdG5vdGUgYm9keSBhdCB0aGUgYm90dG9tIG9mIHRoZSBkb2N1bWVudCBhZnRlciBhCiJGb290bm90ZXMiIHJ1YnJpYyBoZWFkaW5nLCBsaWtlIHNvOjoKCiAgIExvcmVtIGlwc3VtIFsjZjFdXyBkb2xvciBzaXQgYW1ldCAuLi4gWyNmMl1fCgogICAuLiBydWJyaWM6OiBGb290bm90ZXMKCiAgIC4uIFsjZjFdIFRleHQgb2YgdGhlIGZpcnN0IGZvb3Rub3RlLgogICAuLiBbI2YyXSBUZXh0IG9mIHRoZSBzZWNvbmQgZm9vdG5vdGUuCgpZb3UgY2FuIGFsc28gZXhwbGljaXRseSBudW1iZXIgdGhlIGZvb3Rub3RlcyAoYGBbMV1fYGApIG9yIHVzZSBhdXRvLW51bWJlcmVkCmZvb3Rub3RlcyB3aXRob3V0IG5hbWVzIChgYFsjXV9gYCkuCgoKQ2l0YXRpb25zCi0tLS0tLS0tLQoKU3RhbmRhcmQgcmVTVCBjaXRhdGlvbnMgKDpkdXJlZjpgcmVmICZsdDtjaXRhdGlvbnMmZ3Q7YCkgYXJlIHN1cHBvcnRlZCwgd2l0aCB0aGUKYWRkaXRpb25hbCBmZWF0dXJlIHRoYXQgdGhleSBhcmUgImdsb2JhbCIsIGkuZS4gYWxsIGNpdGF0aW9ucyBjYW4gYmUgcmVmZXJlbmNlZApmcm9tIGFsbCBmaWxlcy4gIFVzZSB0aGVtIGxpa2Ugc286OgoKICAgTG9yZW0gaXBzdW0gW1JlZl1fIGRvbG9yIHNpdCBhbWV0LgoKICAgLi4gW1JlZl0gQm9vayBvciBhcnRpY2xlIHJlZmVyZW5jZSwgVVJMIG9yIHdoYXRldmVyLgoKQ2l0YXRpb24gdXNhZ2UgaXMgc2ltaWxhciB0byBmb290bm90ZSB1c2FnZSwgYnV0IHdpdGggYSBsYWJlbCB0aGF0IGlzIG5vdApudW1lcmljIG9yIGJlZ2lucyB3aXRoIGBgI2BgLgoKClN1YnN0aXR1dGlvbnMKLS0tLS0tLS0tLS0tLQoKcmVTVCBzdXBwb3J0cyAic3Vic3RpdHV0aW9ucyIgKDpkdXJlZjpgcmVmICZsdDtzdWJzdGl0dXRpb24tZGVmaW5pdGlvbnMmZ3Q7YCksIHdoaWNoCmFyZSBwaWVjZXMgb2YgdGV4dCBhbmQvb3IgbWFya3VwIHJlZmVycmVkIHRvIGluIHRoZSB0ZXh0IGJ5IGBgfG5hbWV8YGAuICBUaGV5CmFyZSBkZWZpbmVkIGxpa2UgZm9vdG5vdGVzIHdpdGggZXhwbGljaXQgbWFya3VwIGJsb2NrcywgbGlrZSB0aGlzOjoKCiAgIC4uIHxuYW1lfCByZXBsYWNlOjogcmVwbGFjZW1lbnQgKnRleHQqCgpvciB0aGlzOjoKCiAgIC4uIHxjYXV0aW9ufCBpbWFnZTo6IHdhcm5pbmcucG5nCiAgICAgICAgICAgICAgICA6YWx0OiBXYXJuaW5nIQoKU2VlIHRoZSA6ZHVyZWY6YHJlU1QgcmVmZXJlbmNlIGZvciBzdWJzdGl0dXRpb25zICZsdDtzdWJzdGl0dXRpb24tZGVmaW5pdGlvbnMmZ3Q7YApmb3IgZGV0YWlscy4KCklmIHlvdSB3YW50IHRvIHVzZSBzb21lIHN1YnN0aXR1dGlvbnMgZm9yIGFsbCBkb2N1bWVudHMsIHB1dCB0aGVtIGludG8KOmNvbmZ2YWw6YHJzdF9wcm9sb2dgIG9yIHB1dCB0aGVtIGludG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBpbmNsdWRlIGl0IGludG8gYWxsCmRvY3VtZW50cyB5b3Ugd2FudCB0byB1c2UgdGhlbSBpbiwgdXNpbmcgdGhlIDpyc3Q6ZGlyOmBpbmNsdWRlYCBkaXJlY3RpdmUuICAoQmUKc3VyZSB0byBnaXZlIHRoZSBpbmNsdWRlIGZpbGUgYSBmaWxlIG5hbWUgZXh0ZW5zaW9uIGRpZmZlcmluZyBmcm9tIHRoYXQgb2Ygb3RoZXIKc291cmNlIGZpbGVzLCB0byBhdm9pZCBTcGhpbnggZmluZGluZyBpdCBhcyBhIHN0YW5kYWxvbmUgZG9jdW1lbnQuKQoKU3BoaW54IGRlZmluZXMgc29tZSBkZWZhdWx0IHN1YnN0aXR1dGlvbnMsIHNlZSA6cmVmOmBkZWZhdWx0LXN1YnN0aXR1dGlvbnNgLgoKCkNvbW1lbnRzCi0tLS0tLS0tCgpFdmVyeSBleHBsaWNpdCBtYXJrdXAgYmxvY2sgd2hpY2ggaXNuJ3QgYSB2YWxpZCBtYXJrdXAgY29uc3RydWN0IChsaWtlIHRoZQpmb290bm90ZXMgYWJvdmUpIGlzIHJlZ2FyZGVkIGFzIGEgY29tbWVudCAoOmR1cmVmOmByZWYgJmx0O2NvbW1lbnRzJmd0O2ApLiAgRm9yCmV4YW1wbGU6OgoKICAgLi4gVGhpcyBpcyBhIGNvbW1lbnQuCgpZb3UgY2FuIGluZGVudCB0ZXh0IGFmdGVyIGEgY29tbWVudCBzdGFydCB0byBmb3JtIG11bHRpbGluZSBjb21tZW50czo6CgogICAuLgogICAgICBUaGlzIHdob2xlIGluZGVudGVkIGJsb2NrCiAgICAgIGlzIGEgY29tbWVudC4KCiAgICAgIFN0aWxsIGluIHRoZSBjb21tZW50LgoKClNvdXJjZSBlbmNvZGluZwotLS0tLS0tLS0tLS0tLS0KClNpbmNlIHRoZSBlYXNpZXN0IHdheSB0byBpbmNsdWRlIHNwZWNpYWwgY2hhcmFjdGVycyBsaWtlIGVtIGRhc2hlcyBvciBjb3B5cmlnaHQKc2lnbnMgaW4gcmVTVCBpcyB0byBkaXJlY3RseSB3cml0ZSB0aGVtIGFzIFVuaWNvZGUgY2hhcmFjdGVycywgb25lIGhhcyB0bwpzcGVjaWZ5IGFuIGVuY29kaW5nLiAgU3BoaW54IGFzc3VtZXMgc291cmNlIGZpbGVzIHRvIGJlIGVuY29kZWQgaW4gVVRGLTggYnkKZGVmYXVsdDsgeW91IGNhbiBjaGFuZ2UgdGhpcyB3aXRoIHRoZSA6Y29uZnZhbDpgc291cmNlX2VuY29kaW5nYCBjb25maWcgdmFsdWUuCgoKR290Y2hhcwotLS0tLS0tCgpUaGVyZSBhcmUgc29tZSBwcm9ibGVtcyBvbmUgY29tbW9ubHkgcnVucyBpbnRvIHdoaWxlIGF1dGhvcmluZyByZVNUIGRvY3VtZW50czoKCiogKipTZXBhcmF0aW9uIG9mIGlubGluZSBtYXJrdXA6KiogQXMgc2FpZCBhYm92ZSwgaW5saW5lIG1hcmt1cCBzcGFucyBtdXN0IGJlCiAgc2VwYXJhdGVkIGZyb20gdGhlIHN1cnJvdW5kaW5nIHRleHQgYnkgbm9uLXdvcmQgY2hhcmFjdGVycywgeW91IGhhdmUgdG8gdXNlIGEKICBiYWNrc2xhc2gtZXNjYXBlZCBzcGFjZSB0byBnZXQgYXJvdW5kIHRoYXQuICBTZWUgYHRoZSByZWZlcmVuY2UKICAmbHQ7aHR0cDovL2RvY3V0aWxzLnNmLm5ldC9kb2NzL3JlZi9yc3QvcmVzdHJ1Y3R1cmVkdGV4dC5odG1sI2lubGluZS1tYXJrdXAmZ3Q7YF8KICBmb3IgdGhlIGRldGFpbHMuCgoqICoqTm8gbmVzdGVkIGlubGluZSBtYXJrdXA6KiogU29tZXRoaW5nIGxpa2UgYGAqc2VlIDpmdW5jOmBmb29gKmBgIGlzIG5vdAogIHBvc3NpYmxlLgoKCi4uIHJ1YnJpYzo6IEZvb3Rub3RlcwoKLi4gWzFdIFdoZW4gdGhlIGRlZmF1bHQgZG9tYWluIGNvbnRhaW5zIGEgOnJzdDpkaXI6YGNsYXNzYCBkaXJlY3RpdmUsIHRoaXMgZGlyZWN0aXZlCiAgICAgICB3aWxsIGJlIHNoYWRvd2VkLiAgVGhlcmVmb3JlLCBTcGhpbnggcmUtZXhwb3J0cyBpdCBhcyA6cnN0OmRpcjpgcnN0LWNsYXNzYC4KPC90ZXh0YXJlYT48L2Zvcm0+CgogICAgPHNjcmlwdD4KICAgICAgdmFyIGVkaXRvciA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb2RlIiksIHsKICAgICAgICBsaW5lTnVtYmVyczogdHJ1ZSwKICAgICAgfSk7CiAgICA8L3NjcmlwdD4KICAgIDxwPlRoZSByZVN0cnVjdHVyZWRUZXh0IG1vZGUgc3VwcG9ydHMgb25lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyOjwvcD4KICAgIDxkbD4KICAgICAgPGR0Pjxjb2RlPnZlcmJhdGltIChzdHJpbmcpPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5BIG5hbWUgb3IgTUlNRSB0eXBlIG9mIGEgbW9kZSB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgaGlnaGxpZ2h0aW5nCiAgICAgIHZlcmJhdGltIGJsb2Nrcy4gQnkgZGVmYXVsdCwgcmVTdHJ1Y3R1cmVkVGV4dCBtb2RlIHVzZXMgdW5pZm9ybSBjb2xvcgogICAgICBmb3Igd2hvbGUgYmxvY2sgb2YgdmVyYmF0aW0gdGV4dCBpZiBubyBtb2RlIGlzIGdpdmVuLjwvZGQ+CiAgICA8L2RsPgogICAgPHA+SWYgPGNvZGU+cHl0aG9uPC9jb2RlPiBtb2RlIGlzIGF2YWlsYWJsZSAobm90IGEgcGFydCBvZiBDb2RlTWlycm9yIDIgeWV0KSwKICAgIGl0IHdpbGwgYmUgdXNlZCBmb3IgaGlnaGxpZ2h0aW5nIGJsb2NrcyBjb250YWluaW5nIFB5dGhvbi9JUHl0aG9uIHRlcm1pbmFsCiAgICBzZXNzaW9ucyAoYmxvY2tzIHN0YXJ0aW5nIHdpdGggPGNvZGU+Jmd0OyZndDsmZ3Q7PC9jb2RlPiAoZm9yIFB5dGhvbikgb3IKICAgIDxjb2RlPkluIFtudW1dOjwvY29kZT4gKGZvciBJUHl0aG9uKS4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXJzdDwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgoK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CnNwYW4ucnN0LWVtcGhhc2lzIHsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKfQoKc3Bhbi5yc3Qtc3Ryb25nIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgpzcGFuLnJzdC1pbnRlcnByZXRlZCB7CiAgICBjb2xvcjogIzMzY2M2NjsKfQoKc3Bhbi5yc3QtaW5saW5lIHsKICAgIGNvbG9yOiAjMzM5OWNjOwp9CgpzcGFuLnJzdC1yb2xlIHsKICAgIGNvbG9yOiAjNjY2Njk5Owp9CgpzcGFuLnJzdC1saXN0IHsKICAgIGNvbG9yOiAjY2MwMDk5OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7Cn0KCnNwYW4ucnN0LWJvZHkgewogICAgY29sb3I6ICM2Njk5Y2M7Cn0KCnNwYW4ucnN0LXZlcmJhdGltIHsKICAgIGNvbG9yOiAjMzM2NmZmOwp9CgpzcGFuLnJzdC1jb21tZW50IHsKICAgIGNvbG9yOiAjYWE3NzAwOwp9CgpzcGFuLnJzdC1kaXJlY3RpdmUgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKc3Bhbi5yc3QtaHlwZXJsaW5rIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICMzMzY2ZmY7Cn0KCnNwYW4ucnN0LWZvb3Rub3RlIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICMzMzMzZmY7Cn0KCnNwYW4ucnN0LWNpdGF0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICMzMzAwZmY7Cn0KCnNwYW4ucnN0LXJlcGxhY2VtZW50IHsKICAgIGNvbG9yOiAjOTkzM2NjOwp9CgpzcGFuLnJzdC1zZWN0aW9uIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICNjYzAwOTk7Cn0KCnNwYW4ucnN0LWRpcmVjdGl2ZS1tYXJrZXIgewogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBjb2xvcjogIzMzOTlmZjsKfQoKc3Bhbi5yc3QtdmVyYmF0aW0tbWFya2VyIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgY29sb3I6ICM5OTAwZmY7Cn0KCg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/rst/rst.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[CkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgncnN0JywgZnVuY3Rpb24oY29uZmlnLCBvcHRpb25zKSB7CiAgICBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgZm4sIGN0eCkgewogICAgICAgIHN0YXRlLmZuID0gZm47CiAgICAgICAgc2V0Q3R4KHN0YXRlLCBjdHgpOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldEN0eChzdGF0ZSwgY3R4KSB7CiAgICAgICAgc3RhdGUuY3R4ID0gY3R4IHx8IHt9OwogICAgfQoKICAgIGZ1bmN0aW9uIHNldE5vcm1hbChzdGF0ZSwgY2gpIHsKICAgICAgICBpZiAoY2ggJiYgKHR5cGVvZiBjaCAhPT0gJ3N0cmluZycpKSB7CiAgICAgICAgICAgIHZhciBzdHIgPSBjaC5jdXJyZW50KCk7CiAgICAgICAgICAgIGNoID0gc3RyW3N0ci5sZW5ndGgtMV07CiAgICAgICAgfQoKICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsLCB7YmFjazogY2h9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBoYXNNb2RlKG1vZGUpIHsKICAgICAgICBpZiAobW9kZSkgewogICAgICAgICAgICB2YXIgbW9kZXMgPSBDb2RlTWlycm9yLmxpc3RNb2RlcygpOwoKICAgICAgICAgICAgZm9yICh2YXIgaSBpbiBtb2RlcykgewogICAgICAgICAgICAgICAgaWYgKG1vZGVzW2ldID09IG1vZGUpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZ1bmN0aW9uIGdldE1vZGUobW9kZSkgewogICAgICAgIGlmIChoYXNNb2RlKG1vZGUpKSB7CiAgICAgICAgICAgIHJldHVybiBDb2RlTWlycm9yLmdldE1vZGUoY29uZmlnLCBtb2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgdmFyIHZlcmJhdGltTW9kZSA9IGdldE1vZGUob3B0aW9ucy52ZXJiYXRpbSk7CiAgICB2YXIgcHl0aG9uTW9kZSA9IGdldE1vZGUoJ3B5dGhvbicpOwoKICAgIHZhciByZVNlY3Rpb24gPSAvXlshIiMkJSYnKCkqKywtLi86Ozw9Pj9AW1xcXF1eX2B7fH1+XS87CiAgICB2YXIgcmVEaXJlY3RpdmUgPSAvXlxzKlx3KFstOi5cd10qXHcpPzo6KFxzfCQpLzsKICAgIHZhciByZUh5cGVybGluayA9IC9eXHMqX1tcdy1dKzooXHN8JCkvOwogICAgdmFyIHJlRm9vdG5vdGUgPSAvXlxzKlxbKFxkK3wjKVxdKFxzfCQpLzsKICAgIHZhciByZUNpdGF0aW9uID0gL15ccypcW1tBLVphLXpdW1x3LV0qXF0oXHN8JCkvOwogICAgdmFyIHJlRm9vdG5vdGVSZWYgPSAvXlxbKFxkK3wjKVxdXy87CiAgICB2YXIgcmVDaXRhdGlvblJlZiA9IC9eXFtbQS1aYS16XVtcdy1dKlxdXy87CiAgICB2YXIgcmVEaXJlY3RpdmVNYXJrZXIgPSAvXlwuXC4oXHN8JCkvOwogICAgdmFyIHJlVmVyYmF0aW1NYXJrZXIgPSAvXjo6XHMqJC87CiAgICB2YXIgcmVQcmVJbmxpbmUgPSAvXlstXHMiKFt7PC86XS87CiAgICB2YXIgcmVQb3N0SW5saW5lID0gL15bLVxzYCciKVxdfT4vOi4sOyE/XFxfXS87CiAgICB2YXIgcmVFbnVtZXJhdGVkTGlzdCA9IC9eXHMqKChcZCt8W0EtWmEteiNdKVsuKV18XCgoXGQrfFtBLVotYS16I10pXCkpXHMvOwogICAgdmFyIHJlQnVsbGV0ZWRMaXN0ID0gL15ccypbLVwrXCpdXHMvOwogICAgdmFyIHJlRXhhbXBsZXMgPSAvXlxzKyg+Pj58SW4gXFtcZCtcXTopXHMvOwoKICAgIGZ1bmN0aW9uIG5vcm1hbChzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIGNoLCBzb2wsIGk7CgogICAgICAgIGlmIChzdHJlYW0uZWF0KC9cXC8pKSB7CiAgICAgICAgICAgIGNoID0gc3RyZWFtLm5leHQoKTsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBjaCk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgc29sID0gc3RyZWFtLnNvbCgpOwoKICAgICAgICBpZiAoc29sICYmIChjaCA9IHN0cmVhbS5lYXQocmVTZWN0aW9uKSkpIHsKICAgICAgICAgICAgZm9yIChpID0gMDsgc3RyZWFtLmVhdChjaCk7IGkrKyk7CgogICAgICAgICAgICBpZiAoaSA+PSAzICYmIHN0cmVhbS5tYXRjaCgvXlxzKiQvKSkgewogICAgICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBudWxsKTsKICAgICAgICAgICAgICAgIHJldHVybiAncnN0LXNlY3Rpb24nOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcChpICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRGlyZWN0aXZlTWFya2VyKSkgewogICAgICAgICAgICBpZiAoIXN0cmVhbS5lb2woKSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGRpcmVjdGl2ZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAncnN0LWRpcmVjdGl2ZS1tYXJrZXInOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZVZlcmJhdGltTWFya2VyKSkgewogICAgICAgICAgICBpZiAoIXZlcmJhdGltTW9kZSkgewogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIHZlcmJhdGltKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHZhciBtb2RlID0gdmVyYmF0aW1Nb2RlOwoKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSwgewogICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IG1vZGUuc3RhcnRTdGF0ZSgpCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICdyc3QtdmVyYmF0aW0tbWFya2VyJzsKICAgICAgICB9CgogICAgICAgIGlmIChzb2wgJiYgc3RyZWFtLm1hdGNoKHJlRXhhbXBsZXMsIGZhbHNlKSkgewogICAgICAgICAgICBpZiAoIXB5dGhvbk1vZGUpIHsKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSk7CiAgICAgICAgICAgICAgICByZXR1cm4gJ3JzdC12ZXJiYXRpbS1tYXJrZXInOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdmFyIG1vZGUgPSBweXRob25Nb2RlOwoKICAgICAgICAgICAgICAgIHNldFN0YXRlKHN0YXRlLCB2ZXJiYXRpbSwgewogICAgICAgICAgICAgICAgICAgIG1vZGU6IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgbG9jYWw6IG1vZGUuc3RhcnRTdGF0ZSgpCiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKHNvbCAmJiAoc3RyZWFtLm1hdGNoKHJlRW51bWVyYXRlZExpc3QpIHx8CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtLm1hdGNoKHJlQnVsbGV0ZWRMaXN0KSkpIHsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICByZXR1cm4gJ3JzdC1saXN0JzsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RCYWNrd2FyZChyZSkgewogICAgICAgICAgICByZXR1cm4gc29sIHx8ICFzdGF0ZS5jdHguYmFjayB8fCByZS50ZXN0KHN0YXRlLmN0eC5iYWNrKTsKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIHRlc3RGb3J3YXJkKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJlYW0uZW9sKCkgfHwgc3RyZWFtLm1hdGNoKHJlLCBmYWxzZSk7CiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiB0ZXN0SW5saW5lKHJlKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJlYW0ubWF0Y2gocmUpICYmIHRlc3RCYWNrd2FyZCgvXFcvKSAmJiB0ZXN0Rm9yd2FyZCgvXFcvKTsKICAgICAgICB9CgogICAgICAgIGlmICh0ZXN0SW5saW5lKHJlRm9vdG5vdGVSZWYpKSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuICdyc3QtZm9vdG5vdGUnOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRlc3RJbmxpbmUocmVDaXRhdGlvblJlZikpIHsKICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICByZXR1cm4gJ3JzdC1jaXRhdGlvbic7CiAgICAgICAgfQoKICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgIGlmICh0ZXN0QmFja3dhcmQocmVQcmVJbmxpbmUpKSB7CiAgICAgICAgICAgIGlmICgoY2ggPT09ICc6JyB8fCBjaCA9PT0gJ3wnKSAmJiBzdHJlYW0uZWF0KC9cUy8pKSB7CiAgICAgICAgICAgICAgICB2YXIgdG9rZW47CgogICAgICAgICAgICAgICAgaWYgKGNoID09PSAnOicpIHsKICAgICAgICAgICAgICAgICAgICB0b2tlbiA9ICdyc3Qtcm9sZSc7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRva2VuID0gJ3JzdC1yZXBsYWNlbWVudCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGlubGluZSwgewogICAgICAgICAgICAgICAgICAgIGNoOiBjaCwKICAgICAgICAgICAgICAgICAgICB3aWRlOiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICBwcmV2OiBudWxsLAogICAgICAgICAgICAgICAgICAgIHRva2VuOiB0b2tlbgogICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoY2ggPT09ICcqJyB8fCBjaCA9PT0gJ2AnKSB7CiAgICAgICAgICAgICAgICB2YXIgb3JpZyA9IGNoLAogICAgICAgICAgICAgICAgICAgIHdpZGUgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgICAgICAgICAgaWYgKGNoID09IG9yaWcpIHsKICAgICAgICAgICAgICAgICAgICB3aWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKGNoICYmICEvXHMvLnRlc3QoY2gpKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuOwoKICAgICAgICAgICAgICAgICAgICBpZiAob3JpZyA9PT0gJyonKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gd2lkZSA/ICdyc3Qtc3Ryb25nJyA6ICdyc3QtZW1waGFzaXMnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRva2VuID0gd2lkZSA/ICdyc3QtaW5saW5lJyA6ICdyc3QtaW50ZXJwcmV0ZWQnOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGlubGluZSwgewogICAgICAgICAgICAgICAgICAgICAgICBjaDogb3JpZywgICAgICAgICAgICAgICAvLyBpbmxpbmUoKSBoYXMgdG8ga25vdyB3aGF0IHRvIHNlYXJjaCBmb3IKICAgICAgICAgICAgICAgICAgICAgICAgd2lkZTogd2lkZSwgICAgICAgICAgICAgLy8gYXJlIHdlIGxvb2tpbmcgZm9yIGBjaGAgb3IgYGNoY2hgCiAgICAgICAgICAgICAgICAgICAgICAgIHByZXY6IG51bGwsICAgICAgICAgICAgIC8vIHRlcm1pbmF0b3IgbXVzdCBub3QgYmUgcHJlY2VlZGVkIHdpdGggd2hpdGVzcGFjZQogICAgICAgICAgICAgICAgICAgICAgICB0b2tlbjogdG9rZW4gICAgICAgICAgICAvLyBJIGRvbid0IHdhbnQgdG8gcmVjb21wdXRlIHRoaXMgYWxsIHRoZSB0aW1lCiAgICAgICAgICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBjaCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gaW5saW5lKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpLAogICAgICAgICAgICB0b2tlbiA9IHN0YXRlLmN0eC50b2tlbjsKCiAgICAgICAgZnVuY3Rpb24gZmluaXNoKGNoKSB7CiAgICAgICAgICAgIHN0YXRlLmN0eC5wcmV2ID0gY2g7CiAgICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9CgogICAgICAgIGlmIChjaCAhPSBzdGF0ZS5jdHguY2gpIHsKICAgICAgICAgICAgcmV0dXJuIGZpbmlzaChjaCk7CiAgICAgICAgfQoKICAgICAgICBpZiAoL1xzLy50ZXN0KHN0YXRlLmN0eC5wcmV2KSkgewogICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICB9CgogICAgICAgIGlmIChzdGF0ZS5jdHgud2lkZSkgewogICAgICAgICAgICBjaCA9IHN0cmVhbS5uZXh0KCk7CgogICAgICAgICAgICBpZiAoY2ggIT0gc3RhdGUuY3R4LmNoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmluaXNoKGNoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCFzdHJlYW0uZW9sKCkgJiYgIXJlUG9zdElubGluZS50ZXN0KHN0cmVhbS5wZWVrKCkpKSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS5jdHgud2lkZSkgewogICAgICAgICAgICAgICAgc3RyZWFtLmJhY2tVcCgxKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIGZpbmlzaChjaCk7CiAgICAgICAgfQoKICAgICAgICBzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKICAgICAgICBzZXROb3JtYWwoc3RhdGUsIGNoKTsKCiAgICAgICAgcmV0dXJuIHRva2VuOwogICAgfQoKICAgIGZ1bmN0aW9uIGRpcmVjdGl2ZShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIHRva2VuID0gbnVsbDsKCiAgICAgICAgaWYgKHN0cmVhbS5tYXRjaChyZURpcmVjdGl2ZSkpIHsKICAgICAgICAgICAgdG9rZW4gPSAncnN0LWRpcmVjdGl2ZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVIeXBlcmxpbmspKSB7CiAgICAgICAgICAgIHRva2VuID0gJ3JzdC1oeXBlcmxpbmsnOwogICAgICAgIH0gZWxzZSBpZiAoc3RyZWFtLm1hdGNoKHJlRm9vdG5vdGUpKSB7CiAgICAgICAgICAgIHRva2VuID0gJ3JzdC1mb290bm90ZSc7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW0ubWF0Y2gocmVDaXRhdGlvbikpIHsKICAgICAgICAgICAgdG9rZW4gPSAncnN0LWNpdGF0aW9uJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJlYW0uZWF0U3BhY2UoKTsKCiAgICAgICAgICAgIGlmIChzdHJlYW0uZW9sKCkpIHsKICAgICAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgc3RyZWFtLnNraXBUb0VuZCgpOwogICAgICAgICAgICAgICAgc2V0U3RhdGUoc3RhdGUsIGNvbW1lbnQpOwogICAgICAgICAgICAgICAgcmV0dXJuICdyc3QtY29tbWVudCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHNldFN0YXRlKHN0YXRlLCBib2R5LCB7c3RhcnQ6IHRydWV9KTsKICAgICAgICByZXR1cm4gdG9rZW47CiAgICB9CgogICAgZnVuY3Rpb24gYm9keShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgdmFyIHRva2VuID0gJ3JzdC1ib2R5JzsKCiAgICAgICAgaWYgKCFzdGF0ZS5jdHguc3RhcnQgfHwgc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgIHJldHVybiBibG9jayhzdHJlYW0sIHN0YXRlLCB0b2tlbik7CiAgICAgICAgfQoKICAgICAgICBzdHJlYW0uc2tpcFRvRW5kKCk7CiAgICAgICAgc2V0Q3R4KHN0YXRlKTsKCiAgICAgICAgcmV0dXJuIHRva2VuOwogICAgfQoKICAgIGZ1bmN0aW9uIGNvbW1lbnQoc3RyZWFtLCBzdGF0ZSkgewogICAgICAgIHJldHVybiBibG9jayhzdHJlYW0sIHN0YXRlLCAncnN0LWNvbW1lbnQnKTsKICAgIH0KCiAgICBmdW5jdGlvbiB2ZXJiYXRpbShzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgaWYgKCF2ZXJiYXRpbU1vZGUpIHsKICAgICAgICAgICAgcmV0dXJuIGJsb2NrKHN0cmVhbSwgc3RhdGUsICdyc3QtdmVyYmF0aW0nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoc3RyZWFtLnNvbCgpKSB7CiAgICAgICAgICAgICAgICBpZiAoIXN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgc2V0Tm9ybWFsKHN0YXRlLCBzdHJlYW0pOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdmVyYmF0aW1Nb2RlLnRva2VuKHN0cmVhbSwgc3RhdGUuY3R4LmxvY2FsKTsKICAgICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gYmxvY2soc3RyZWFtLCBzdGF0ZSwgdG9rZW4pIHsKICAgICAgICBpZiAoc3RyZWFtLmVvbCgpIHx8IHN0cmVhbS5lYXRTcGFjZSgpKSB7CiAgICAgICAgICAgIHN0cmVhbS5za2lwVG9FbmQoKTsKICAgICAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNldE5vcm1hbChzdGF0ZSwgc3RyZWFtKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiB7CiAgICAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiB7Zm46IG5vcm1hbCwgY3R4OiB7fX07CiAgICAgICAgfSwKCiAgICAgICAgY29weVN0YXRlOiBmdW5jdGlvbihzdGF0ZSkgewogICAgICAgICAgICByZXR1cm4ge2ZuOiBzdGF0ZS5mbiwgY3R4OiBzdGF0ZS5jdHh9OwogICAgICAgIH0sCgogICAgICAgIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgICAgICAgIHZhciB0b2tlbiA9IHN0YXRlLmZuKHN0cmVhbSwgc3RhdGUpOwogICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfQogICAgfTsKfSk7CgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1yc3QiLCAicnN0Iik7Cgo=]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogU21hbGx0YWxrIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJzbWFsbHRhbGsuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJzbWFsbHRhbGsuY3NzIj4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICAgIDxzdHlsZT4KICAgICAgLkNvZGVNaXJyb3Ige2JvcmRlcjogMnB4IHNvbGlkICNkZWU7IGJvcmRlci1yaWdodC13aWR0aDogMTBweDt9CiAgICAgIC5Db2RlTWlycm9yLWd1dHRlciB7Ym9yZGVyOiBub25lOyBiYWNrZ3JvdW5kOiAjZGVlO30KICAgICAgLkNvZGVNaXJyb3ItZ3V0dGVyIHByZSB7Y29sb3I6IHdoaXRlOyBmb250LXdlaWdodDogYm9sZDt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IFNtYWxsdGFsayBtb2RlPC9oMT4KCjxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiIgCiAgICBUaGlzIGlzIGEgdGVzdCBvZiB0aGUgU21hbGx0YWxrIGNvZGUKIgpTZWFzaWRlLldBQ29tcG9uZW50IHN1YmNsYXNzOiAjTXlDb3VudGVyIFsKICAgIHwgY291bnQgfAogICAgTXlDb3VudGVyIGNsYXNzICZndDsmZ3Q7IGNhbkJlUm9vdCBbIF50cnVlIF0KCiAgICBpbml0aWFsaXplIFsKICAgICAgICBzdXBlciBpbml0aWFsaXplLgogICAgICAgIGNvdW50IDo9IDAuCiAgICBdCiAgICBzdGF0ZXMgWyBeeyBzZWxmIH0gXQogICAgcmVuZGVyQ29udGVudE9uOiBodG1sIFsKICAgICAgICBodG1sIGhlYWRpbmc6IGNvdW50LgogICAgICAgIGh0bWwgYW5jaG9yIGNhbGxiYWNrOiBbIGNvdW50IDo9IGNvdW50ICsgMSBdOyB3aXRoOiAnKysnLgogICAgICAgIGh0bWwgc3BhY2UuCiAgICAgICAgaHRtbCBhbmNob3IgY2FsbGJhY2s6IFsgY291bnQgOj0gY291bnQgLSAxIF07IHdpdGg6ICctLScuCiAgICBdCl0KCk15Q291bnRlciByZWdpc3RlckFzQXBwbGljYXRpb246ICdteWNvdW50ZXInCjwvdGV4dGFyZWE+PC9mb3JtPgoKICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7CiAgICAgICAgbGluZU51bWJlcnM6IHRydWUsCiAgICAgICAgbWF0Y2hCcmFja2V0czogdHJ1ZSwKICAgICAgICBtb2RlOiAidGV4dC94LXN0c3JjIiwKICAgICAgICBpbmRlbnRVbml0OiA0CiAgICAgIH0pOwogICAgPC9zY3JpcHQ+CgogICAgPHA+U2ltcGxlIFNtYWxsdGFsayBtb2RlLjwvcD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC94LXN0c3JjPC9jb2RlPi48L3A+CiAgPC9ib2R5Pgo8L2h0bWw+Cg==]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/smalltalk.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5zdC1rZXl3b3JkIHtjb2xvcjogIzkwYjt9CnNwYW4uc3QtbnVtYmVyIHtjb2xvcjogIzI5MTt9CnNwYW4uc3QtY29tbWVudCB7Y29sb3I6ICNhNzA7fQpzcGFuLnN0LXN0cmluZyB7Y29sb3I6ICNhMjI7fQpzcGFuLnN0LXZhciB7Y29sb3I6ICMyMmI7fQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/smalltalk/smalltalk.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJzbWFsbHRhbGsiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBrZXl3b3JkcyA9IHsidHJ1ZSI6IDEsICJmYWxzZSI6IDEsIG5pbDogMSwgc2VsZjogMSwgInN1cGVyIjogMSwgdGhpc0NvbnRleHQ6IDF9OwogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CgogIGZ1bmN0aW9uIGNoYWluKHN0cmVhbSwgc3RhdGUsIGYpIHsKICAgIHN0YXRlLnRva2VuaXplID0gZjsKICAgIHJldHVybiBmKHN0cmVhbSwgc3RhdGUpOwogIH0KCiAgdmFyIHR5cGU7CiAgZnVuY3Rpb24gcmV0KHRwLCBzdHlsZSkgewogICAgdHlwZSA9IHRwOwogICAgcmV0dXJuIHN0eWxlOwogIH0KCiAgZnVuY3Rpb24gdG9rZW5CYXNlKHN0cmVhbSwgc3RhdGUpIHsKICAgIHZhciBjaCA9IHN0cmVhbS5uZXh0KCk7CiAgICBpZiAoY2ggPT0gJyInKQogICAgICByZXR1cm4gY2hhaW4oc3RyZWFtLCBzdGF0ZSwgdG9rZW5Db21tZW50KGNoKSk7CiAgICBlbHNlIGlmIChjaCA9PSAiJyIpCiAgICAgIHJldHVybiBjaGFpbihzdHJlYW0sIHN0YXRlLCB0b2tlblN0cmluZyhjaCkpOwogICAgZWxzZSBpZiAoY2ggPT0gIiMiKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XCRfXS8pOwogICAgICByZXR1cm4gcmV0KCJzdHJpbmciLCAic3Qtc3RyaW5nIik7CiAgICB9CiAgICBlbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5dLykKICAgICAgcmV0dXJuIHJldCgibnVtYmVyIiwgInN0LW51bWJlciIpOwogICAgfQogICAgZWxzZSBpZiAoL1tcW1xdKCldLy50ZXN0KGNoKSkgewogICAgICByZXR1cm4gcmV0KGNoLCBudWxsKTsKICAgIH0KICAgIGVsc2UgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1tcd1wkX10vKTsKICAgICAgaWYgKGtleXdvcmRzICYmIGtleXdvcmRzLnByb3BlcnR5SXNFbnVtZXJhYmxlKHN0cmVhbS5jdXJyZW50KCkpKSByZXR1cm4gcmV0KCJrZXl3b3JkIiwgInN0LWtleXdvcmQiKTsKICAgICAgcmV0dXJuIHJldCgid29yZCIsICJzdC13b3JkIik7CiAgICB9CiAgfQoKICBmdW5jdGlvbiB0b2tlblN0cmluZyhxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGVzY2FwZWQgPSBmYWxzZSwgbmV4dCwgZW5kID0gZmFsc2U7CiAgICAgIHdoaWxlICgobmV4dCA9IHN0cmVhbS5uZXh0KCkpICE9IG51bGwpIHsKICAgICAgICBpZiAobmV4dCA9PSBxdW90ZSAmJiAhZXNjYXBlZCkge2VuZCA9IHRydWU7IGJyZWFrO30KICAgICAgICBlc2NhcGVkID0gIWVzY2FwZWQgJiYgbmV4dCA9PSAiXFwiOwogICAgICB9CiAgICAgIGlmIChlbmQgfHwgIShlc2NhcGVkKSkKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgic3RyaW5nIiwgInN0LXN0cmluZyIpOwogICAgfTsKICB9CgogIGZ1bmN0aW9uIHRva2VuQ29tbWVudChxdW90ZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIG5leHQsIGVuZCA9IGZhbHNlOwogICAgICB3aGlsZSAoKG5leHQgPSBzdHJlYW0ubmV4dCgpKSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5leHQgPT0gcXVvdGUpIHtlbmQgPSB0cnVlOyBicmVhazt9CiAgICAgIH0KICAgICAgaWYgKGVuZCkKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IHRva2VuQmFzZTsKICAgICAgcmV0dXJuIHJldCgiY29tbWVudCIsICJzdC1jb21tZW50Iik7CiAgICB9OwogIH0KCiAgZnVuY3Rpb24gQ29udGV4dChpbmRlbnRlZCwgY29sdW1uLCB0eXBlLCBhbGlnbiwgcHJldikgewogICAgdGhpcy5pbmRlbnRlZCA9IGluZGVudGVkOwogICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICB0aGlzLnR5cGUgPSB0eXBlOwogICAgdGhpcy5hbGlnbiA9IGFsaWduOwogICAgdGhpcy5wcmV2ID0gcHJldjsKICB9CgogIGZ1bmN0aW9uIHB1c2hDb250ZXh0KHN0YXRlLCBjb2wsIHR5cGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gbmV3IENvbnRleHQoc3RhdGUuaW5kZW50ZWQsIGNvbCwgdHlwZSwgbnVsbCwgc3RhdGUuY29udGV4dCk7CiAgfQogIGZ1bmN0aW9uIHBvcENvbnRleHQoc3RhdGUpIHsKICAgIHJldHVybiBzdGF0ZS5jb250ZXh0ID0gc3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgLy8gSW50ZXJmYWNlCgogIHJldHVybiB7CiAgICBzdGFydFN0YXRlOiBmdW5jdGlvbihiYXNlY29sdW1uKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuQmFzZSwKICAgICAgICBjb250ZXh0OiBuZXcgQ29udGV4dCgoYmFzZWNvbHVtbiB8fCAwKSAtIGluZGVudFVuaXQsIDAsICJ0b3AiLCBmYWxzZSksCiAgICAgICAgaW5kZW50ZWQ6IDAsCiAgICAgICAgc3RhcnRPZkxpbmU6IHRydWUKICAgICAgfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgdmFyIGN0eCA9IHN0YXRlLmNvbnRleHQ7CiAgICAgIGlmIChzdHJlYW0uc29sKCkpIHsKICAgICAgICBpZiAoY3R4LmFsaWduID09IG51bGwpIGN0eC5hbGlnbiA9IGZhbHNlOwogICAgICAgIHN0YXRlLmluZGVudGVkID0gc3RyZWFtLmluZGVudGF0aW9uKCk7CiAgICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBzdHlsZSA9IHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgICBpZiAodHlwZSA9PSAiY29tbWVudCIpIHJldHVybiBzdHlsZTsKICAgICAgaWYgKGN0eC5hbGlnbiA9PSBudWxsKSBjdHguYWxpZ24gPSB0cnVlOwoKICAgICAgaWYgKHR5cGUgPT0gIlsiKSBwdXNoQ29udGV4dChzdGF0ZSwgc3RyZWFtLmNvbHVtbigpLCAiXSIpOwogICAgICBlbHNlIGlmICh0eXBlID09ICIoIikgcHVzaENvbnRleHQoc3RhdGUsIHN0cmVhbS5jb2x1bW4oKSwgIikiKTsKICAgICAgZWxzZSBpZiAodHlwZSA9PSBjdHgudHlwZSkgcG9wQ29udGV4dChzdGF0ZSk7CiAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gZmFsc2U7CiAgICAgIHJldHVybiBzdHlsZTsKICAgIH0sCgogICAgaW5kZW50OiBmdW5jdGlvbihzdGF0ZSwgdGV4dEFmdGVyKSB7CiAgICAgIGlmIChzdGF0ZS50b2tlbml6ZSAhPSB0b2tlbkJhc2UpIHJldHVybiAwOwogICAgICB2YXIgZmlyc3RDaGFyID0gdGV4dEFmdGVyICYmIHRleHRBZnRlci5jaGFyQXQoMCksIGN0eCA9IHN0YXRlLmNvbnRleHQsIGNsb3NpbmcgPSBmaXJzdENoYXIgPT0gY3R4LnR5cGU7CiAgICAgIGlmIChjdHguYWxpZ24pIHJldHVybiBjdHguY29sdW1uICsgKGNsb3NpbmcgPyAwIDogMSk7CiAgICAgIGVsc2UgcmV0dXJuIGN0eC5pbmRlbnRlZCArIChjbG9zaW5nID8gMCA6IGluZGVudFVuaXQpOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiXSIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgidGV4dC94LXN0c3JjIiwge25hbWU6ICJzbWFsbHRhbGsifSk7Cg==]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogc1RlWCBtb2RlPC90aXRsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vbGliL2NvZGVtaXJyb3IuY3NzIj4KICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9saWIvY29kZW1pcnJvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0ic3RleC5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InN0ZXguY3NzIj4KICAgIDxzdHlsZT4uQ29kZU1pcnJvciB7YmFja2dyb3VuZDogI2Y4ZjhmODt9PC9zdHlsZT4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vLi4vY3NzL2RvY3MuY3NzIj4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8aDE+Q29kZU1pcnJvciAyOiBzVGVYIG1vZGU8L2gxPgogICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+ClxiZWdpbnttb2R1bGV9W2lkPWJidC1zaXplXQpcaW1wb3J0bW9kdWxlW2JhbGFuY2VkLWJpbmFyeS10cmVlc117YmFsYW5jZWQtYmluYXJ5LXRyZWVzfQpcaW1wb3J0bW9kdWxlW1xLV0FSQ3NsaWRlc3tkbWF0aC9lbi9jYXJkaW5hbGl0eX1de2NhcmRpbmFsaXR5fQoKXGJlZ2lue2ZyYW1lfQogIFxmcmFtZXRpdGxle1NpemUgTGVtbWEgZm9yIEJhbGFuY2VkIFRyZWVzfQogIFxiZWdpbntpdGVtaXplfQogIFxpdGVtCiAgICBcYmVnaW57YXNzZXJ0aW9ufVtpZD1zaXplLWxlbW1hLHR5cGU9bGVtbWFdIAogICAgTGV0ICRHPVx0dXB7VixFfSQgYmUgYSBcdGVybXJlZltjZD1iaW5hcnktdHJlZXNde2JhbGFuY2VkIGJpbmFyeSB0cmVlfSAKICAgIG9mIFx0ZXJtcmVmW2NkPWdyYXBoLWRlcHRoLG5hbWU9dmVydGV4LWRlcHRoXXtkZXB0aH0kbj5pJCwgdGhlbiB0aGUgc2V0CiAgICAgJFxkZWZlcXtcbGl2YXJ7Vn1pfXtcc2V0c3R7XGluc2V0e3Z9e1Z9fXtcZ2RlcHRoe3Z9ID0gaX19JCBvZgogICAgXHRlcm1yZWZbY2Q9Z3JhcGhzLWludHJvLG5hbWU9bm9kZV17bm9kZXN9IGF0IAogICAgXHRlcm1yZWZbY2Q9Z3JhcGgtZGVwdGgsbmFtZT12ZXJ0ZXgtZGVwdGhde2RlcHRofSAkaSQgaGFzCiAgICBcdGVybXJlZltjZD1jYXJkaW5hbGl0eSxuYW1lPWNhcmRpbmFsaXR5XXtjYXJkaW5hbGl0eX0gJFxwb3dlcjJpJC4KICAgXGVuZHthc3NlcnRpb259CiAgXGl0ZW0KICAgIFxiZWdpbntzcHJvb2Z9W2lkPXNpemUtbGVtbWEtcGYscHJvb2ZlbmQ9LGZvcj1zaXplLWxlbW1hXXt2aWEgaW5kdWN0aW9uIG92ZXIgdGhlIGRlcHRoICRpJC59CiAgICAgIFxiZWdpbntzcGZjYXNlc317V2UgaGF2ZSB0byBjb25zaWRlciB0d28gY2FzZXN9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPTAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICAgdGhlbiAkXGxpdmFye1Z9aT1cc2V0e1xsaXZhcnt2fXJ9JCwgd2hlcmUgJFxsaXZhcnt2fXIkIGlzIHRoZSByb290LCBzbwogICAgICAgICAgICAkXGVxe1xjYXJke1xsaXZhcntWfTB9LFxjYXJke1xzZXR7XGxpdmFye3Z9cn19LDEsXHBvd2VyMjB9JC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICBcZW5ke3NwZmNhc2V9CiAgICAgICAgXGJlZ2lue3NwZmNhc2V9eyRpPjAkfQogICAgICAgICAgXGJlZ2lue3NwZnN0ZXB9W2Rpc3BsYXk9Zmxvd10KICAgICAgICAgICB0aGVuICRcbGl2YXJ7Vn17aS0xfSQgY29udGFpbnMgJFxwb3dlcjJ7aS0xfSQgdmVydGV4ZXMgCiAgICAgICAgICAgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieUlIXShJSClcZW5ke2p1c3RpZmljYXRpb259CiAgICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgICBcYmVnaW57c3Bmc3RlcH0KICAgICAgICAgICBCeSB0aGUgXGJlZ2lue2p1c3RpZmljYXRpb259W21ldGhvZD1ieURlZl1kZWZpbml0aW9uIG9mIGEgYmluYXJ5CiAgICAgICAgICAgICAgdHJlZVxlbmR7anVzdGlmaWNhdGlvbn0sIGVhY2ggJFxpbnNldHt2fXtcbGl2YXJ7Vn17aS0xfX0kIGlzIGEgbGVhZiBvciBoYXMKICAgICAgICAgICAgdHdvIGNoaWxkcmVuIHRoYXQgYXJlIGF0IGRlcHRoICRpJC4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfQogICAgICAgICAgIEFzICRHJCBpcyBcdGVybXJlZltjZD1iYWxhbmNlZC1iaW5hcnktdHJlZXMsbmFtZT1iYWxhbmNlZC1iaW5hcnktdHJlZV17YmFsYW5jZWR9IGFuZCAkXGdkZXB0aHtHfT1uPmkkLCAkXGxpdmFye1Z9e2ktMX0kIGNhbm5vdCBjb250YWluCiAgICAgICAgICAgIGxlYXZlcy4KICAgICAgICAgIFxlbmR7c3Bmc3RlcH0KICAgICAgICAgIFxiZWdpbntzcGZzdGVwfVt0eXBlPWNvbmNsdXNpb25dCiAgICAgICAgICAgVGh1cyAkXGVxe1xjYXJke1xsaXZhcntWfWl9LHtcYXRpbWVzW2Nkb3RdezIsXGNhcmR7XGxpdmFye1Z9e2ktMX19fX0se1xhdGltZXNbY2RvdF17MixccG93ZXIye2ktMX19fSxccG93ZXIyaX0kLgogICAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICAgIFxlbmR7c3BmY2FzZX0KICAgICAgXGVuZHtzcGZjYXNlc30KICAgIFxlbmR7c3Byb29mfQogIFxpdGVtIAogICAgXGJlZ2lue2Fzc2VydGlvbn1baWQ9ZmJidCx0eXBlPWNvcm9sbGFyeV0JCiAgICAgIEEgZnVsbHkgYmFsYW5jZWQgdHJlZSBvZiBkZXB0aCAkZCQgaGFzICRccG93ZXIye2QrMX0tMSQgbm9kZXMuCiAgICBcZW5ke2Fzc2VydGlvbn0KICBcaXRlbQogICAgICBcYmVnaW57c3Byb29mfVtmb3I9ZmJidCxpZD1mYmJ0LXBmXXt9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBMZXQgJFxkZWZlcXtHfXtcdHVwe1YsRX19JCBiZSBhIGZ1bGx5IGJhbGFuY2VkIHRyZWUKICAgICAgICBcZW5ke3NwZnN0ZXB9CiAgICAgICAgXGJlZ2lue3NwZnN0ZXB9CiAgICAgICAgICBUaGVuICRcY2FyZHtWfT1cU3VtZnJvbXRve2l9MWR7XHBvd2VyMml9PSBccG93ZXIye2QrMX0tMSQuCiAgICAgICAgXGVuZHtzcGZzdGVwfQogICAgICBcZW5ke3Nwcm9vZn0KICAgIFxlbmR7aXRlbWl6ZX0KICBcZW5ke2ZyYW1lfQpcYmVnaW57bm90ZX0KICBcYmVnaW57b210ZXh0fVt0eXBlPWNvbmNsdXNpb24sZm9yPWJpbmFyeS10cmVlXQogICAgVGhpcyBzaG93cyB0aGF0IGJhbGFuY2VkIGJpbmFyeSB0cmVlcyBncm93IGluIGJyZWFkdGggdmVyeSBxdWlja2x5LCBhIGNvbnNlcXVlbmNlIG9mCiAgICB0aGlzIGlzIHRoYXQgdGhleSBhcmUgdmVyeSBzaGFsbG93IChhbmQgdGhpcyBjb21wdXRlIHZlcnkgZmFzdCksIHdoaWNoIGlzIHRoZSBlc3NlbmNlIG9mCiAgICB0aGUgbmV4dCByZXN1bHQuCiAgXGVuZHtvbXRleHR9ClxlbmR7bm90ZX0KXGVuZHttb2R1bGV9CgolJSUgTG9jYWwgVmFyaWFibGVzOiAKJSUlIG1vZGU6IExhVGVYCiUlJSBUZVgtbWFzdGVyOiAiYWxsIgolJSUgRW5kOiBcZW5ke2RvY3VtZW50fQo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7fSk7CiAgICA8L3NjcmlwdD4KCiAgICA8cD48c3Ryb25nPk1JTUUgdHlwZXMgZGVmaW5lZDo8L3N0cm9uZz4gPGNvZGU+dGV4dC9zdGV4PC9jb2RlPi48L3A+CgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/stex.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi5jc3MtYXQge2NvbG9yOiAjNzA4O30Kc3Bhbi5jc3MtdW5pdCB7Y29sb3I6ICMyODE7fQpzcGFuLmNzcy12YWx1ZSB7Y29sb3I6ICM3MDg7fQpzcGFuLmNzcy1pZGVudGlmaWVyIHtjb2xvcjogYmxhY2s7fQpzcGFuLmNzcy1zZWxlY3RvciB7Y29sb3I6ICMxMUI7fQpzcGFuLmNzcy1pbXBvcnRhbnQge2NvbG9yOiAjMDBGO30Kc3Bhbi5jc3MtY29sb3Jjb2RlIHtjb2xvcjogIzI5OTt9CnNwYW4uY3NzLWNvbW1lbnQge2NvbG9yOiAjQTcwO30Kc3Bhbi5jc3Mtc3RyaW5nIHtjb2xvcjogI0EyMjt9CgpzcGFuLnN0ZXgtdW5pdCB7IGNvbG9yOiAjMjgxOyB9CnNwYW4uc3RleC1pZGVudGlmaWVyIHsgY29sb3I6IGJsYWNrOyB9CnNwYW4uc3RleC1zbGFzaCB7IGNvbG9yOiAjRkFBOyB9CnNwYW4uc3RleC1jb21tYW5kIHsgY29sb3I6ICMwMEY7IH0Kc3Bhbi5zdGV4LWNvbW1lbnQgeyBjb2xvcjogI0E3MDsgfQpzcGFuLnN0ZXgtaW1wb3J0IHsgY29sb3I6ICMwMEY7IH0Kc3Bhbi5zdGV4LWZpbGVwYXRoIHsgY29sb3I6ICM4NTI2MjY7IH0Kc3Bhbi5zdGV4LW1vZHVsZSB7IGNvbG9yOiAjODUyNjI2OyB9CnNwYW4uc3RleC1lcnJvciB7IHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOyBjb2xvcjogcmVkOyB9CnNwYW4uc3RleC1zdHJpbmcgeyBjb2xvcjogI0EyMjsgfQo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/stex/stex.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogQXV0aG9yOiBDb25zdGFudGluIEp1Y292c2NoaSAoYy5qdWNvdnNjaGlAamFjb2JzLXVuaXZlcnNpdHkuZGUpCiAqIExpY2VuY2U6IE1JVAogKi8KCkNvZGVNaXJyb3IuZGVmaW5lTW9kZSgic3RleCIsIGZ1bmN0aW9uKGNtQ2ZnLCBtb2RlQ2ZnKSAKeyAgICAKICAgIGZ1bmN0aW9uIHB1c2hDb21tYW5kKHN0YXRlLCBjb21tYW5kKSB7CglzdGF0ZS5jbWRTdGF0ZS5wdXNoKGNvbW1hbmQpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBlZWtDb21tYW5kKHN0YXRlKSB7IAoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKQoJICAgIHJldHVybiBzdGF0ZS5jbWRTdGF0ZVtzdGF0ZS5jbWRTdGF0ZS5sZW5ndGgtMV07CgllbHNlCgkgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgZnVuY3Rpb24gcG9wQ29tbWFuZChzdGF0ZSkgewoJaWYgKHN0YXRlLmNtZFN0YXRlLmxlbmd0aD4wKSB7CgkgICAgdmFyIHBsdWcgPSBzdGF0ZS5jbWRTdGF0ZS5wb3AoKTsKCSAgICBwbHVnLmNsb3NlQnJhY2tldCgpOwoJfQkgICAgCiAgICB9CgogICAgZnVuY3Rpb24gYXBwbHlNb3N0UG93ZXJmdWwoc3RhdGUpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jbWRTdGF0ZTsKICAgICAgZm9yICh2YXIgaSA9IGNvbnRleHQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKCSAgdmFyIHBsdWcgPSBjb250ZXh0W2ldOwoJICBpZiAocGx1Zy5uYW1lPT0iREVGQVVMVCIpCgkgICAgICBjb250aW51ZTsKCSAgcmV0dXJuIHBsdWcuc3R5bGVJZGVudGlmaWVyKCk7CiAgICAgIH0KICAgICAgcmV0dXJuICJzdGV4LWlkZW50aWZpZXIiOwogICAgfQoKICAgIGZ1bmN0aW9uIGFkZFBsdWdpblBhdHRlcm4ocGx1Z2luTmFtZSwgY21kU3R5bGUsIGJyYWNrZXRzLCBzdHlsZXMpIHsKCXJldHVybiBmdW5jdGlvbiAoKSB7CgkgICAgdGhpcy5uYW1lPXBsdWdpbk5hbWU7CgkgICAgdGhpcy5icmFja2V0Tm8gPSAwOwoJICAgIHRoaXMuc3R5bGU9Y21kU3R5bGU7CgkgICAgdGhpcy5zdHlsZXMgPSBzdHlsZXM7CgkgICAgdGhpcy5icmFja2V0cyA9IGJyYWNrZXRzOwoKCSAgICB0aGlzLnN0eWxlSWRlbnRpZmllciA9IGZ1bmN0aW9uKGNvbnRlbnQpIHsKCQlpZiAodGhpcy5icmFja2V0Tm88PXRoaXMuc3R5bGVzLmxlbmd0aCkKCQkgICAgcmV0dXJuIHRoaXMuc3R5bGVzW3RoaXMuYnJhY2tldE5vLTFdOwoJCWVsc2UKCQkgICAgcmV0dXJuIG51bGw7CgkgICAgfTsKCSAgICB0aGlzLm9wZW5CcmFja2V0ID0gZnVuY3Rpb24oY29udGVudCkgewoJCXRoaXMuYnJhY2tldE5vKys7CgkJcmV0dXJuICJzdGV4LWJyYWNrZXQiOwoJICAgIH07CgkgICAgdGhpcy5jbG9zZUJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7CgkgICAgfTsKCX0KICAgIH0KCiAgICB2YXIgcGx1Z2lucyA9IG5ldyBBcnJheSgpOwogICAKICAgIHBsdWdpbnNbImltcG9ydG1vZHVsZSJdID0gYWRkUGx1Z2luUGF0dGVybigiaW1wb3J0bW9kdWxlIiwgInN0ZXgtY29tbWFuZCIsICJ7WyIsIFsic3RleC1maWxlcGF0aCIsICJzdGV4LW1vZHVsZSJdKTsKICAgIHBsdWdpbnNbImRvY3VtZW50Y2xhc3MiXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAic3RleC1jb21tYW5kIiwgIntbIiwgWyIiLCAic3RleC11bml0Il0pOwogICAgcGx1Z2luc1sidXNlcGFja2FnZSJdID0gYWRkUGx1Z2luUGF0dGVybigiZG9jdW1lbnRjbGFzcyIsICJzdGV4LWNvbW1hbmQiLCAiWyIsIFsic3RleC11bml0Il0pOwogICAgcGx1Z2luc1siYmVnaW4iXSA9IGFkZFBsdWdpblBhdHRlcm4oImRvY3VtZW50Y2xhc3MiLCAic3RleC1jb21tYW5kIiwgIlsiLCBbInN0ZXgtdW5pdCJdKTsKICAgIHBsdWdpbnNbImVuZCJdID0gYWRkUGx1Z2luUGF0dGVybigiZG9jdW1lbnRjbGFzcyIsICJzdGV4LWNvbW1hbmQiLCAiWyIsIFsic3RleC11bml0Il0pOwoKICAgIHBsdWdpbnNbIkRFRkFVTFQiXSA9IGZ1bmN0aW9uICgpIHsKCXRoaXMubmFtZT0iREVGQVVMVCI7Cgl0aGlzLnN0eWxlPSJzdGV4LWNvbW1hbmQiOwoKCXRoaXMuc3R5bGVJZGVudGlmaWVyID0gZnVuY3Rpb24oY29udGVudCkgewoJfTsKCXRoaXMub3BlbkJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7Cgl9OwoJdGhpcy5jbG9zZUJyYWNrZXQgPSBmdW5jdGlvbihjb250ZW50KSB7Cgl9OwogICAgfTsKCiAgICBmdW5jdGlvbiBzZXRTdGF0ZShzdGF0ZSwgZikgewoJc3RhdGUuZiA9IGY7CiAgICB9CgogICAgZnVuY3Rpb24gbm9ybWFsKHNvdXJjZSwgc3RhdGUpIHsKCWlmIChzb3VyY2UubWF0Y2goL15cXFthLXpdKy8pKSB7CgkgICAgdmFyIGNtZE5hbWUgPSBzb3VyY2UuY3VycmVudCgpOwoJICAgIGNtZE5hbWUgPSBjbWROYW1lLnN1YnN0cigxLCBjbWROYW1lLmxlbmd0aC0xKTsKCSAgICB2YXIgcGx1ZyA9IHBsdWdpbnNbY21kTmFtZV07CgkgICAgaWYgKHR5cGVvZihwbHVnKSA9PSAndW5kZWZpbmVkJykgewoJCXBsdWcgPSBwbHVnaW5zWyJERUZBVUxUIl07CgkgICAgfQoJICAgIHBsdWcgPSBuZXcgcGx1ZygpOwoJICAgIHB1c2hDb21tYW5kKHN0YXRlLCBwbHVnKTsKCSAgICBzZXRTdGF0ZShzdGF0ZSwgYmVnaW5QYXJhbXMpOwoJICAgIHJldHVybiBwbHVnLnN0eWxlOwoJfQoKCXZhciBjaCA9IHNvdXJjZS5uZXh0KCk7CglpZiAoY2ggPT0gIiUiKSB7CgkgICAgc2V0U3RhdGUoc3RhdGUsIGluQ0NvbW1lbnQpOwoJICAgIHJldHVybiAic3RleC1jb21tZW50IjsKCX0gCgllbHNlIGlmIChjaD09J30nIHx8IGNoPT0nXScpIHsKCSAgICBwbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJICAgIGlmIChwbHVnKSB7CgkJcGx1Zy5jbG9zZUJyYWNrZXQoY2gpOwoJCXNldFN0YXRlKHN0YXRlLCBiZWdpblBhcmFtcyk7CgkgICAgfSBlbHNlCgkJcmV0dXJuICJzdGV4LWVycm9yIjsKCSAgICByZXR1cm4gInN0ZXgtYnJhY2tldCI7Cgl9IGVsc2UgaWYgKGNoPT0neycgfHwgY2g9PSdbJykgewoJICAgIHBsdWcgPSBwbHVnaW5zWyJERUZBVUxUIl07CSAgICAKCSAgICBwbHVnID0gbmV3IHBsdWcoKTsKCSAgICBwdXNoQ29tbWFuZChzdGF0ZSwgcGx1Zyk7CgkgICAgcmV0dXJuICJzdGV4LWJyYWNrZXQiOwkgICAgCgl9CgllbHNlIGlmICgvXGQvLnRlc3QoY2gpKSB7CgkgICAgc291cmNlLmVhdFdoaWxlKC9bXHcuJV0vKTsKCSAgICByZXR1cm4gInN0ZXgtdW5pdCI7Cgl9CgllbHNlIHsKCSAgICBzb3VyY2UuZWF0V2hpbGUoL1tcdy1fXS8pOwoJICAgIHJldHVybiBhcHBseU1vc3RQb3dlcmZ1bChzdGF0ZSk7Cgl9CiAgICB9CgogICAgZnVuY3Rpb24gaW5DQ29tbWVudChzb3VyY2UsIHN0YXRlKSB7Cglzb3VyY2Uuc2tpcFRvRW5kKCk7CglzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKCXJldHVybiAiY3NzLWNvbW1lbnQiOwogICAgfQoKICAgIGZ1bmN0aW9uIGJlZ2luUGFyYW1zKHNvdXJjZSwgc3RhdGUpIHsKCXZhciBjaCA9IHNvdXJjZS5wZWVrKCk7CglpZiAoY2ggPT0gJ3snIHx8IGNoID09ICdbJykgewoJICAgdmFyIGxhc3RQbHVnID0gcGVla0NvbW1hbmQoc3RhdGUpOwoJICAgdmFyIHN0eWxlID0gbGFzdFBsdWcub3BlbkJyYWNrZXQoY2gpOwoJICAgc291cmNlLmVhdChjaCk7CgkgICBzZXRTdGF0ZShzdGF0ZSwgbm9ybWFsKTsKCSAgIHJldHVybiAic3RleC1icmFja2V0IjsKCX0KCWlmICgvWyBcdFxyXS8udGVzdChjaCkpIHsKCSAgICBzb3VyY2UuZWF0KGNoKTsKCSAgICByZXR1cm4gbnVsbDsKCX0KCXNldFN0YXRlKHN0YXRlLCBub3JtYWwpOwoJbGFzdFBsdWcgPSBwZWVrQ29tbWFuZChzdGF0ZSk7CglpZiAobGFzdFBsdWcpIHsKCSAgICBwb3BDb21tYW5kKHN0YXRlKTsKCX0KICAgICAgICByZXR1cm4gbm9ybWFsKHNvdXJjZSwgc3RhdGUpOwogICAgfQoKICAgIHJldHVybiB7CiAgICAgc3RhcnRTdGF0ZTogZnVuY3Rpb24oKSB7IHJldHVybiB7IGY6bm9ybWFsLCBjbWRTdGF0ZTpbXSB9OyB9LAoJIGNvcHlTdGF0ZTogZnVuY3Rpb24ocykgeyByZXR1cm4geyBmOiBzLmYsIGNtZFN0YXRlOiBzLmNtZFN0YXRlLnNsaWNlKDAsIHMuY21kU3RhdGUubGVuZ3RoKSB9OyB9LAoJIAoJIHRva2VuOiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CgkgdmFyIHQgPSBzdGF0ZS5mKHN0cmVhbSwgc3RhdGUpOwoJIHZhciB3ID0gc3RyZWFtLmN1cnJlbnQoKTsKCSByZXR1cm4gdDsKICAgICB9CiB9Owp9KTsKCgpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQveC1zdGV4IiwgInN0ZXgiKTsK]]></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+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogWE1MIG1vZGU8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9saWIvY29kZW1pcnJvci5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uLy4uL2xpYi9jb2RlbWlycm9yLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJ4bWwuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJ4bWwuY3NzIj4KICAgIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+LkNvZGVNaXJyb3Ige2JvcmRlci10b3A6IDFweCBzb2xpZCBibGFjazsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrO308L3N0eWxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9jc3MvZG9jcy5jc3MiPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IFhNTCBtb2RlPC9oMT4KICAgIDxmb3JtPjx0ZXh0YXJlYSBpZD0iY29kZSIgbmFtZT0iY29kZSI+CiZsdDtodG1sIHN0eWxlPSJjb2xvcjogZ3JlZW4iJmd0OwogICZsdDshLS0gdGhpcyBpcyBhIGNvbW1lbnQgLS0mZ3Q7CiAgJmx0O2hlYWQmZ3Q7CiAgICAmbHQ7dGl0bGUmZ3Q7SFRNTCBFeGFtcGxlJmx0Oy90aXRsZSZndDsKICAmbHQ7L2hlYWQmZ3Q7CiAgJmx0O2JvZHkmZ3Q7CiAgICBUaGUgaW5kZW50YXRpb24gdHJpZXMgdG8gYmUgJmx0O2VtJmd0O3NvbWV3aGF0ICZhbXA7cXVvdDtkbyB3aGF0CiAgICBJIG1lYW4mYW1wO3F1b3Q7Jmx0Oy9lbSZndDsuLi4gYnV0IG1pZ2h0IG5vdCBtYXRjaCB5b3VyIHN0eWxlLgogICZsdDsvYm9keSZndDsKJmx0Oy9odG1sJmd0Owo8L3RleHRhcmVhPjwvZm9ybT4KICAgIDxzY3JpcHQ+CiAgICAgIHZhciBlZGl0b3IgPSBDb2RlTWlycm9yLmZyb21UZXh0QXJlYShkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpLCB7bW9kZToge25hbWU6ICJ4bWwiLCBodG1sTW9kZTogdHJ1ZX19KTsKICAgIDwvc2NyaXB0PgogICAgPHA+VGhlIFhNTCBtb2RlIHN1cHBvcnRzIHR3byBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnM6PC9wPgogICAgPGRsPgogICAgICA8ZHQ+PGNvZGU+aHRtbE1vZGUgKGJvb2xlYW4pPC9jb2RlPjwvZHQ+CiAgICAgIDxkZD5UaGlzIHN3aXRjaGVzIHRoZSBtb2RlIHRvIHBhcnNlIEhUTUwgaW5zdGVhZCBvZiBYTUwuIFRoaXMKICAgICAgbWVhbnMgYXR0cmlidXRlcyBkbyBub3QgaGF2ZSB0byBiZSBxdW90ZWQsIGFuZCBzb21lIGVsZW1lbnRzCiAgICAgIChzdWNoIGFzIDxjb2RlPmJyPC9jb2RlPikgZG8gbm90IHJlcXVpcmUgYSBjbG9zaW5nIHRhZy48L2RkPgogICAgICA8ZHQ+PGNvZGU+YWxpZ25DREFUQSAoYm9vbGVhbik8L2NvZGU+PC9kdD4KICAgICAgPGRkPlNldHRpbmcgdGhpcyB0byB0cnVlIHdpbGwgZm9yY2UgdGhlIG9wZW5pbmcgdGFnIG9mIENEQVRBCiAgICAgIGJsb2NrcyB0byBub3QgYmUgaW5kZW50ZWQuPC9kZD4KICAgIDwvZGw+CgogICAgPHA+PHN0cm9uZz5NSU1FIHR5cGVzIGRlZmluZWQ6PC9zdHJvbmc+IDxjb2RlPmFwcGxpY2F0aW9uL3htbDwvY29kZT4sIDxjb2RlPnRleHQvaHRtbDwvY29kZT4uPC9wPgogIDwvYm9keT4KPC9odG1sPgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/xml.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c3Bhbi54bWwtdGFnIHtjb2xvcjogI2EwYjt9CnNwYW4ueG1sLWF0dHJpYnV0ZSB7Y29sb3I6ICMyODE7fQpzcGFuLnhtbC1hdHRuYW1lIHtjb2xvcjogIzAwZjt9CnNwYW4ueG1sLWNvbW1lbnQge2NvbG9yOiAjYTcwO30Kc3Bhbi54bWwtY2RhdGEge2NvbG9yOiAjNDhhO30Kc3Bhbi54bWwtcHJvY2Vzc2luZyB7Y29sb3I6ICM5OTk7fQpzcGFuLnhtbC1lbnRpdHkge2NvbG9yOiAjYTIyO30K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/mode/xml/xml.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Q29kZU1pcnJvci5kZWZpbmVNb2RlKCJ4bWwiLCBmdW5jdGlvbihjb25maWcsIHBhcnNlckNvbmZpZykgewogIHZhciBpbmRlbnRVbml0ID0gY29uZmlnLmluZGVudFVuaXQ7CiAgdmFyIEtsdWRnZXMgPSBwYXJzZXJDb25maWcuaHRtbE1vZGUgPyB7CiAgICBhdXRvU2VsZkNsb3NlcnM6IHsiYnIiOiB0cnVlLCAiaW1nIjogdHJ1ZSwgImhyIjogdHJ1ZSwgImxpbmsiOiB0cnVlLCAiaW5wdXQiOiB0cnVlLAogICAgICAgICAgICAgICAgICAgICAgIm1ldGEiOiB0cnVlLCAiY29sIjogdHJ1ZSwgImZyYW1lIjogdHJ1ZSwgImJhc2UiOiB0cnVlLCAiYXJlYSI6IHRydWV9LAogICAgZG9Ob3RJbmRlbnQ6IHsicHJlIjogdHJ1ZSwgIiFjZGF0YSI6IHRydWV9LAogICAgYWxsb3dVbnF1b3RlZDogdHJ1ZQogIH0gOiB7YXV0b1NlbGZDbG9zZXJzOiB7fSwgZG9Ob3RJbmRlbnQ6IHsiIWNkYXRhIjogdHJ1ZX0sIGFsbG93VW5xdW90ZWQ6IGZhbHNlfTsKICB2YXIgYWxpZ25DREFUQSA9IHBhcnNlckNvbmZpZy5hbGlnbkNEQVRBOwoKICAvLyBSZXR1cm4gdmFyaWFibGVzIGZvciB0b2tlbml6ZXJzCiAgdmFyIHRhZ05hbWUsIHR5cGU7CgogIGZ1bmN0aW9uIGluVGV4dChzdHJlYW0sIHN0YXRlKSB7CiAgICBmdW5jdGlvbiBjaGFpbihwYXJzZXIpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBwYXJzZXI7CiAgICAgIHJldHVybiBwYXJzZXIoc3RyZWFtLCBzdGF0ZSk7CiAgICB9CgogICAgdmFyIGNoID0gc3RyZWFtLm5leHQoKTsKICAgIGlmIChjaCA9PSAiPCIpIHsKICAgICAgaWYgKHN0cmVhbS5lYXQoIiEiKSkgewogICAgICAgIGlmIChzdHJlYW0uZWF0KCJbIikpIHsKICAgICAgICAgIGlmIChzdHJlYW0ubWF0Y2goIkNEQVRBWyIpKSByZXR1cm4gY2hhaW4oaW5CbG9jaygieG1sLWNkYXRhIiwgIl1dPiIpKTsKICAgICAgICAgIGVsc2UgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKHN0cmVhbS5tYXRjaCgiLS0iKSkgcmV0dXJuIGNoYWluKGluQmxvY2soInhtbC1jb21tZW50IiwgIi0tPiIpKTsKICAgICAgICBlbHNlIGlmIChzdHJlYW0ubWF0Y2goIkRPQ1RZUEUiKSkgewogICAgICAgICAgc3RyZWFtLmVhdFdoaWxlKC9bXHdcLl9cLV0vKTsKICAgICAgICAgIHJldHVybiBjaGFpbihpbkJsb2NrKCJ4bWwtZG9jdHlwZSIsICI+IikpOwogICAgICAgIH0KICAgICAgICBlbHNlIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGVsc2UgaWYgKHN0cmVhbS5lYXQoIj8iKSkgewogICAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW1x3XC5fXC1dLyk7CiAgICAgICAgc3RhdGUudG9rZW5pemUgPSBpbkJsb2NrKCJ4bWwtcHJvY2Vzc2luZyIsICI/PiIpOwogICAgICAgIHJldHVybiAieG1sLXByb2Nlc3NpbmciOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHR5cGUgPSBzdHJlYW0uZWF0KCIvIikgPyAiY2xvc2VUYWciIDogIm9wZW5UYWciOwogICAgICAgIHN0cmVhbS5lYXRTcGFjZSgpOwogICAgICAgIHRhZ05hbWUgPSAiIjsKICAgICAgICB2YXIgYzsKICAgICAgICB3aGlsZSAoKGMgPSBzdHJlYW0uZWF0KC9bXlxzXHUwMGEwPTw+XCJcJ1wvP10vKSkpIHRhZ05hbWUgKz0gYzsKICAgICAgICBzdGF0ZS50b2tlbml6ZSA9IGluVGFnOwogICAgICAgIHJldHVybiAieG1sLXRhZyI7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgaWYgKGNoID09ICImIikgewogICAgICBzdHJlYW0uZWF0V2hpbGUoL1teO10vKTsKICAgICAgc3RyZWFtLmVhdCgiOyIpOwogICAgICByZXR1cm4gInhtbC1lbnRpdHkiOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW14mPF0vKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBmdW5jdGlvbiBpblRhZyhzdHJlYW0sIHN0YXRlKSB7CiAgICB2YXIgY2ggPSBzdHJlYW0ubmV4dCgpOwogICAgaWYgKGNoID09ICI+IiB8fCAoY2ggPT0gIi8iICYmIHN0cmVhbS5lYXQoIj4iKSkpIHsKICAgICAgc3RhdGUudG9rZW5pemUgPSBpblRleHQ7CiAgICAgIHR5cGUgPSBjaCA9PSAiPiIgPyAiZW5kVGFnIiA6ICJzZWxmY2xvc2VUYWciOwogICAgICByZXR1cm4gInhtbC10YWciOwogICAgfQogICAgZWxzZSBpZiAoY2ggPT0gIj0iKSB7CiAgICAgIHR5cGUgPSAiZXF1YWxzIjsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBlbHNlIGlmICgvW1wnXCJdLy50ZXN0KGNoKSkgewogICAgICBzdGF0ZS50b2tlbml6ZSA9IGluQXR0cmlidXRlKGNoKTsKICAgICAgcmV0dXJuIHN0YXRlLnRva2VuaXplKHN0cmVhbSwgc3RhdGUpOwogICAgfQogICAgZWxzZSB7CiAgICAgIHN0cmVhbS5lYXRXaGlsZSgvW15cc1x1MDBhMD08PlwiXCdcLz9dLyk7CiAgICAgIHJldHVybiAieG1sLXdvcmQiOwogICAgfQogIH0KCiAgZnVuY3Rpb24gaW5BdHRyaWJ1dGUocXVvdGUpIHsKICAgIHJldHVybiBmdW5jdGlvbihzdHJlYW0sIHN0YXRlKSB7CiAgICAgIHdoaWxlICghc3RyZWFtLmVvbCgpKSB7CiAgICAgICAgaWYgKHN0cmVhbS5uZXh0KCkgPT0gcXVvdGUpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UYWc7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuICJ4bWwtYXR0cmlidXRlIjsKICAgIH07CiAgfQoKICBmdW5jdGlvbiBpbkJsb2NrKHN0eWxlLCB0ZXJtaW5hdG9yKSB7CiAgICByZXR1cm4gZnVuY3Rpb24oc3RyZWFtLCBzdGF0ZSkgewogICAgICB3aGlsZSAoIXN0cmVhbS5lb2woKSkgewogICAgICAgIGlmIChzdHJlYW0ubWF0Y2godGVybWluYXRvcikpIHsKICAgICAgICAgIHN0YXRlLnRva2VuaXplID0gaW5UZXh0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHN0cmVhbS5uZXh0KCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHN0eWxlOwogICAgfTsKICB9CgogIHZhciBjdXJTdGF0ZSwgc2V0U3R5bGU7CiAgZnVuY3Rpb24gcGFzcygpIHsKICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGN1clN0YXRlLmNjLnB1c2goYXJndW1lbnRzW2ldKTsKICB9CiAgZnVuY3Rpb24gY29udCgpIHsKICAgIHBhc3MuYXBwbHkobnVsbCwgYXJndW1lbnRzKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgZnVuY3Rpb24gcHVzaENvbnRleHQodGFnTmFtZSwgc3RhcnRPZkxpbmUpIHsKICAgIHZhciBub0luZGVudCA9IEtsdWRnZXMuZG9Ob3RJbmRlbnQuaGFzT3duUHJvcGVydHkodGFnTmFtZSkgfHwgKGN1clN0YXRlLmNvbnRleHQgJiYgY3VyU3RhdGUuY29udGV4dC5ub0luZGVudCk7CiAgICBjdXJTdGF0ZS5jb250ZXh0ID0gewogICAgICBwcmV2OiBjdXJTdGF0ZS5jb250ZXh0LAogICAgICB0YWdOYW1lOiB0YWdOYW1lLAogICAgICBpbmRlbnQ6IGN1clN0YXRlLmluZGVudGVkLAogICAgICBzdGFydE9mTGluZTogc3RhcnRPZkxpbmUsCiAgICAgIG5vSW5kZW50OiBub0luZGVudAogICAgfTsKICB9CiAgZnVuY3Rpb24gcG9wQ29udGV4dCgpIHsKICAgIGlmIChjdXJTdGF0ZS5jb250ZXh0KSBjdXJTdGF0ZS5jb250ZXh0ID0gY3VyU3RhdGUuY29udGV4dC5wcmV2OwogIH0KCiAgZnVuY3Rpb24gZWxlbWVudCh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAib3BlblRhZyIpIHtjdXJTdGF0ZS50YWdOYW1lID0gdGFnTmFtZTsgcmV0dXJuIGNvbnQoYXR0cmlidXRlcywgZW5kdGFnKGN1clN0YXRlLnN0YXJ0T2ZMaW5lKSk7fQogICAgZWxzZSBpZiAodHlwZSA9PSAiY2xvc2VUYWciKSB7cG9wQ29udGV4dCgpOyByZXR1cm4gY29udChlbmRjbG9zZXRhZyk7fQogICAgZWxzZSBpZiAodHlwZSA9PSAieG1sLWNkYXRhIikgewogICAgICBpZiAoIWN1clN0YXRlLmNvbnRleHQgfHwgY3VyU3RhdGUuY29udGV4dC5uYW1lICE9ICIhY2RhdGEiKSBwdXNoQ29udGV4dCgiIWNkYXRhIik7CiAgICAgIGlmIChjdXJTdGF0ZS50b2tlbml6ZSA9PSBpblRleHQpIHBvcENvbnRleHQoKTsKICAgICAgcmV0dXJuIGNvbnQoKTsKICAgIH0KICAgIGVsc2UgcmV0dXJuIGNvbnQoKTsKICB9CiAgZnVuY3Rpb24gZW5kdGFnKHN0YXJ0T2ZMaW5lKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odHlwZSkgewogICAgICBpZiAodHlwZSA9PSAic2VsZmNsb3NlVGFnIiB8fAogICAgICAgICAgKHR5cGUgPT0gImVuZFRhZyIgJiYgS2x1ZGdlcy5hdXRvU2VsZkNsb3NlcnMuaGFzT3duUHJvcGVydHkoY3VyU3RhdGUudGFnTmFtZS50b0xvd2VyQ2FzZSgpKSkpCiAgICAgICAgcmV0dXJuIGNvbnQoKTsKICAgICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHtwdXNoQ29udGV4dChjdXJTdGF0ZS50YWdOYW1lLCBzdGFydE9mTGluZSk7IHJldHVybiBjb250KCk7fQogICAgICByZXR1cm4gY29udCgpOwogICAgfTsKICB9CiAgZnVuY3Rpb24gZW5kY2xvc2V0YWcodHlwZSkgewogICAgaWYgKHR5cGUgPT0gImVuZFRhZyIpIHJldHVybiBjb250KCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KCiAgZnVuY3Rpb24gYXR0cmlidXRlcyh0eXBlKSB7CiAgICBpZiAodHlwZSA9PSAieG1sLXdvcmQiKSB7c2V0U3R5bGUgPSAieG1sLWF0dG5hbWUiOyByZXR1cm4gY29udChhdHRyaWJ1dGVzKTt9CiAgICBpZiAodHlwZSA9PSAiZXF1YWxzIikgcmV0dXJuIGNvbnQoYXR0dmFsdWUsIGF0dHJpYnV0ZXMpOwogICAgcmV0dXJuIHBhc3MoKTsKICB9CiAgZnVuY3Rpb24gYXR0dmFsdWUodHlwZSkgewogICAgaWYgKHR5cGUgPT0gInhtbC13b3JkIiAmJiBLbHVkZ2VzLmFsbG93VW5xdW90ZWQpIHtzZXRTdHlsZSA9ICJ4bWwtYXR0cmlidXRlIjsgcmV0dXJuIGNvbnQoKTt9CiAgICBpZiAodHlwZSA9PSAieG1sLWF0dHJpYnV0ZSIpIHJldHVybiBjb250KCk7CiAgICByZXR1cm4gcGFzcygpOwogIH0KCiAgcmV0dXJuIHsKICAgIHN0YXJ0U3RhdGU6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4ge3Rva2VuaXplOiBpblRleHQsIGNjOiBbXSwgaW5kZW50ZWQ6IDAsIHN0YXJ0T2ZMaW5lOiB0cnVlLCB0YWdOYW1lOiBudWxsLCBjb250ZXh0OiBudWxsfTsKICAgIH0sCgogICAgdG9rZW46IGZ1bmN0aW9uKHN0cmVhbSwgc3RhdGUpIHsKICAgICAgaWYgKHN0cmVhbS5zb2woKSkgewogICAgICAgIHN0YXRlLnN0YXJ0T2ZMaW5lID0gdHJ1ZTsKICAgICAgICBzdGF0ZS5pbmRlbnRlZCA9IHN0cmVhbS5pbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIGlmIChzdHJlYW0uZWF0U3BhY2UoKSkgcmV0dXJuIG51bGw7CgogICAgICBzZXRTdHlsZSA9IHR5cGUgPSB0YWdOYW1lID0gbnVsbDsKICAgICAgdmFyIHN0eWxlID0gc3RhdGUudG9rZW5pemUoc3RyZWFtLCBzdGF0ZSk7CiAgICAgIGlmICgoc3R5bGUgfHwgdHlwZSkgJiYgc3R5bGUgIT0gInhtbC1jb21tZW50IikgewogICAgICAgIGN1clN0YXRlID0gc3RhdGU7CiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgIHZhciBjb21iID0gc3RhdGUuY2MucG9wKCkgfHwgZWxlbWVudDsKICAgICAgICAgIGlmIChjb21iKHR5cGUgfHwgc3R5bGUpKSBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGUuc3RhcnRPZkxpbmUgPSBmYWxzZTsKICAgICAgcmV0dXJuIHNldFN0eWxlIHx8IHN0eWxlOwogICAgfSwKCiAgICBpbmRlbnQ6IGZ1bmN0aW9uKHN0YXRlLCB0ZXh0QWZ0ZXIpIHsKICAgICAgdmFyIGNvbnRleHQgPSBzdGF0ZS5jb250ZXh0OwogICAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0Lm5vSW5kZW50KSByZXR1cm4gMDsKICAgICAgaWYgKGFsaWduQ0RBVEEgJiYgLzwhXFtDREFUQVxbLy50ZXN0KHRleHRBZnRlcikpIHJldHVybiAwOwogICAgICBpZiAoY29udGV4dCAmJiAvXjxcLy8udGVzdCh0ZXh0QWZ0ZXIpKQogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgIHdoaWxlIChjb250ZXh0ICYmICFjb250ZXh0LnN0YXJ0T2ZMaW5lKQogICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnByZXY7CiAgICAgIGlmIChjb250ZXh0KSByZXR1cm4gY29udGV4dC5pbmRlbnQgKyBpbmRlbnRVbml0OwogICAgICBlbHNlIHJldHVybiAwOwogICAgfSwKCiAgICBlbGVjdHJpY0NoYXJzOiAiLyIKICB9Owp9KTsKCkNvZGVNaXJyb3IuZGVmaW5lTUlNRSgiYXBwbGljYXRpb24veG1sIiwgInhtbCIpOwpDb2RlTWlycm9yLmRlZmluZU1JTUUoInRleHQvaHRtbCIsIHtuYW1lOiAieG1sIiwgaHRtbE1vZGU6IHRydWV9KTsK]]></data>
	</file>
	<file>
	  <filename>/codemirror2/oldrelease.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3I8L3RpdGxlPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iY3NzL2RvY3MuY3NzIi8+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCIvPgogICAgPGxpbmsgcmVsPSJhbHRlcm5hdGUiIGhyZWY9Imh0dHA6Ly90d2l0dGVyLmNvbS9zdGF0dXNlcy91c2VyX3RpbWVsaW5lLzI0MjI4MzI4OC5yc3MiIHR5cGU9ImFwcGxpY2F0aW9uL3Jzcyt4bWwiLz4KICA8L2hlYWQ+CiAgPGJvZHk+Cgo8aDE+PHNwYW4gY2xhc3M9ImxvZ28tYnJhY2VzIj57IH08L3NwYW4+IDxhIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC8iPkNvZGVNaXJyb3I8L2E+PC9oMT4KCjxwcmUgY2xhc3M9ImdyZXkiPgo8aW1nIHNyYz0iY3NzL2JhYm9vbi5wbmciIGNsYXNzPSJsb2dvIiBhbHQ9ImxvZ28iLz4vKiBPbGQgcmVsZWFzZSBoaXN0b3J5ICovCgo8L3ByZT4KCiAgPHAgY2xhc3M9InJlbCI+MTctMTItMjAxMDogPGEgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45Mi56aXAiPlZlcnNpb24gMC45MjwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPk1ha2UgQ29kZU1pcnJvciB3b3JrIGluIFhIVE1MIGRvY3VtZW50cy48L2xpPgogICAgPGxpPkZpeCBidWcgaW4gaGFuZGxpbmcgb2YgYmFja3NsYXNoZXMgaW4gUHl0aG9uIHN0cmluZ3MuPC9saT4KICAgIDxsaT5UaGUgPGNvZGU+c3R5bGVOdW1iZXJzPC9jb2RlPiBvcHRpb24gaXMgbm93IG9mZmljaWFsbHkKICAgIHN1cHBvcnRlZCBhbmQgZG9jdW1lbnRlZC48L2xpPgogICAgPGxpPjxjb2RlPm9uTGluZU51bWJlckNsaWNrPC9jb2RlPiBvcHRpb24gYWRkZWQuPC9saT4KICAgIDxsaT5Nb3JlIGNvbnNpc3RlbnQgbmFtZXMgPGNvZGU+b25Mb2FkPC9jb2RlPiBhbmQKICAgIDxjb2RlPm9uQ3Vyc29yQWN0aXZpdHk8L2NvZGU+IGNhbGxiYWNrcy4gT2xkIG5hbWVzIHN0aWxsIHdvcmssIGJ1dAogICAgYXJlIGRlcHJlY2F0ZWQuPC9saT4KICAgIDxsaT5BZGQgYSA8YSBocmVmPSJjb250cmliL2ZyZWVtYXJrZXIvaW5kZXguaHRtbCI+RnJlZW1hcmtlcjwvYT4gbW9kZS48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjExLTExLTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC45MS56aXAiPlZlcnNpb24gMC45MTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZHMgc3VwcG9ydCBmb3IgPGEgaHJlZj0iY29udHJpYi9qYXZhIj5KYXZhPC9hPi48L2xpPgogICAgPGxpPlNtYWxsIGFkZGl0aW9ucyB0byB0aGUgPGEgaHJlZj0iY29udHJpYi9waHAiPlBIUDwvYT4gYW5kIDxhIGhyZWY9ImNvbnRyaWIvc3FsIj5TUUw8L2E+IHBhcnNlcnMuPC9saT4KICAgIDxsaT5Xb3JrIGFyb3VuZCB2YXJpb3VzIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00NzgwNiI+V2Via2l0PC9hPiA8YSBocmVmPSJodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM0NzQiPmlzc3VlczwvYT4uPC9saT4KICAgIDxsaT5GaXggPGNvZGU+dG9UZXh0QXJlYTwvY29kZT4gdG8gdXBkYXRlIHRoZSBjb2RlIGluIHRoZSB0ZXh0YXJlYS48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPm5vU2NyaXB0Q2FjaGluZzwvY29kZT4gb3B0aW9uIChoYWNrIHRvIGVhc2UgZGV2ZWxvcG1lbnQpLjwvbGk+CiAgICA8bGk+TWFrZSBzdWItbW9kZXMgb2YgPGEgaHJlZj0ibWl4ZWR0ZXN0Lmh0bWwiPkhUTUwgbWl4ZWQ8L2E+IG1vZGUgY29uZmlndXJhYmxlLjwvbGk+CiAgPC91bD4KCiAgPHAgY2xhc3M9InJlbCI+MDItMTAtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjkuemlwIj5WZXJzaW9uIDAuOTwvYT46PC9wPgogIDx1bCBjbGFzcz0icmVsLW5vdGUiPgogICAgPGxpPkFkZCBzdXBwb3J0IGZvciBzZWFyY2hpbmcgYmFja3dhcmRzLjwvbGk+CiAgICA8bGk+VGhlcmUgYXJlIG5vdyBwYXJzZXJzIGZvciA8YSBocmVmPSJjb250cmliL3NjaGVtZS9pbmRleC5odG1sIj5TY2hlbWU8L2E+LCA8YSBocmVmPSJjb250cmliL3hxdWVyeS9pbmRleC5odG1sIj5YUXVlcnk8L2E+LCBhbmQgPGEgaHJlZj0iY29udHJpYi9vbWV0YS9pbmRleC5odG1sIj5PbWV0YUpTPC9hPi48L2xpPgogICAgPGxpPk1ha2VzIDxjb2RlPmhlaWdodDogImR5bmFtaWMiPC9jb2RlPiBtb3JlIHJvYnVzdC48L2xpPgogICAgPGxpPkZpeGVzIGJ1ZyB3aGVyZSBwYXN0ZSBkaWQgbm90IHdvcmsgb24gT1MgWC48L2xpPgogICAgPGxpPkFkZCBhIDxjb2RlPmVudGVyTW9kZTwvY29kZT4gYW5kIDxjb2RlPmVsZWN0cmljQ2hhcnM8L2NvZGU+IG9wdGlvbnMgdG8gbWFrZSBpbmRlbnRhdGlvbiBldmVuIG1vcmUgY3VzdG9taXphYmxlLjwvbGk+CiAgICA8bGk+QWRkIDxjb2RlPmZpcnN0TGluZU51bWJlcjwvY29kZT4gb3B0aW9uLjwvbGk+CiAgICA8bGk+Rml4IGJhZCBoYW5kbGluZyBvZiA8Y29kZT5AbWVkaWE8L2NvZGU+IHJ1bGVzIGJ5IHRoZSBDU1MgcGFyc2VyLjwvbGk+CiAgICA8bGk+VGFrZSBhIG5ldywgbW9yZSByb2J1c3QgYXBwcm9hY2ggdG8gd29ya2luZyBhcm91bmQgdGhlIGludmlzaWJsZS1sYXN0LWxpbmUgYnVnIGluIFdlYktpdC48L2xpPgogIDwvdWw+CgogIDxwIGNsYXNzPSJyZWwiPjIyLTA3LTIwMTA6IDxhCiAgaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC44LnppcCI+VmVyc2lvbiAwLjg8L2E+OjwvcD4KICA8dWwgY2xhc3M9InJlbC1ub3RlIj4KICAgIDxsaT5BZGQgYSA8Y29kZT5jdXJzb3JDb29yZHM8L2NvZGU+IG1ldGhvZCB0byBmaW5kIHRoZSBzY3JlZW4KICAgIGNvb3JkaW5hdGVzIG9mIHRoZSBjdXJzb3IuPC9saT4KICAgIDxsaT5BIG51bWJlciBvZiBmaXhlcyBhbmQgc3VwcG9ydCBmb3IgbW9yZSBzeW50YXggaW4gdGhlIFBIUCBwYXJzZXIuPC9saT4KICAgIDxsaT5GaXggaW5kZW50YXRpb24gcHJvYmxlbSB3aXRoIEpTT04tbW9kZSBKUyBwYXJzZXIgaW4gV2Via2l0LjwvbGk+CiAgICA8bGk+QWRkIGEgPGEgaHJlZj0iY29tcHJlc3MuaHRtbCI+bWluaWZpY2F0aW9uPC9hPiBVSS48L2xpPgogICAgPGxpPlN1cHBvcnQgYSA8Y29kZT5oZWlnaHQ6IGR5bmFtaWM8L2NvZGU+IG1vZGUsIHdoZXJlIHRoZSBlZGl0b3IncwogICAgaGVpZ2h0IHdpbGwgYWRqdXN0IHRvIHRoZSBzaXplIG9mIGl0cyBjb250ZW50LjwvbGk+CiAgICA8bGk+QmV0dGVyIHN1cHBvcnQgZm9yIElNRSBpbnB1dCBtb2RlLjwvbGk+CiAgICA8bGk+Rml4IEphdmFTY3JpcHQgcGFyc2VyIGdldHRpbmcgY29uZnVzZWQgd2hlbiBzZWVpbmcgYSBuby1hcmd1bWVudAogICAgZnVuY3Rpb24gY2FsbC48L2xpPgogICAgPGxpPkhhdmUgQ1NTIHBhcnNlciBzZWUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzZWxlY3RvcnMgYW5kIG90aGVyCiAgICBpZGVudGlmaWVycy48L2xpPgogICAgPGxpPkZpeCBzY3JvbGxpbmcgYnVnIHdoZW4gcGFzdGluZyBpbiBhIGhvcml6b250YWxseS1zY3JvbGxlZAogICAgZWRpdG9yLjwvbGk+CiAgICA8bGk+U3VwcG9ydCA8Y29kZT50b1RleHRBcmVhPC9jb2RlPiBtZXRob2QgaW4gaW5zdGFuY2VzIGNyZWF0ZWQgd2l0aAogICAgPGNvZGU+ZnJvbVRleHRBcmVhPC9jb2RlPi48L2xpPgogICAgPGxpPldvcmsgYXJvdW5kIG5ldyBPcGVyYSBjdXJzb3IgYnVnIHRoYXQgY2F1c2VzIHRoZSBjdXJzb3IgdG8ganVtcAogICAgd2hlbiBwcmVzc2luZyBiYWNrc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGxpbmUuPC9saT4KICA8L3VsPgoKICA8cCBjbGFzcz0icmVsIj4yNy0wNC0yMDEwOiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjcuemlwIj5WZXJzaW9uCiAgMC42NzwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+TW9yZSBjb25zaXN0ZW50IHBhZ2UtdXAvcGFnZS1kb3duIGJlaGF2aW91cgogIGFjcm9zcyBicm93c2Vycy4gRml4IHNvbWUgaXNzdWVzIHdpdGggaGlkZGVuIGVkaXRvcnMgbG9vcGluZyBmb3JldmVyCiAgd2hlbiBsaW5lLW51bWJlcnMgd2VyZSBlbmFibGVkLiBNYWtlIFBIUCBwYXJzZXIgcGFyc2UKICA8Y29kZT4iXFwiPC9jb2RlPiBjb3JyZWN0bHkuIEhhdmUgPGNvZGU+anVtcFRvTGluZTwvY29kZT4gd29yayBvbgogIGxpbmUgaGFuZGxlcywgYW5kIGFkZCA8Y29kZT5jdXJzb3JMaW5lPC9jb2RlPiBmdW5jdGlvbiB0byBmZXRjaCB0aGUKICBsaW5lIGhhbmRsZSB3aGVyZSB0aGUgY3Vyc29yIGN1cnJlbnRseSBpcy4gQWRkIG5ldwogIDxjb2RlPnNldFN0eWxlc2hlZXQ8L2NvZGU+IGZ1bmN0aW9uIHRvIHN3aXRjaCBzdHlsZS1zaGVldHMgaW4gYQogIHJ1bm5pbmcgZWRpdG9yLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MDEtMDMtMjAxMDogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY2LnppcCI+VmVyc2lvbgogIDAuNjY8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkFkZHMgPGNvZGU+cmVtb3ZlTGluZTwvY29kZT4gbWV0aG9kIHRvIEFQSS4KICBJbnRyb2R1Y2VzIHRoZSA8YSBocmVmPSJjb250cmliL3Bsc3FsL2luZGV4Lmh0bWwiPlBMU1FMIHBhcnNlcjwvYT4uCiAgTWFya3MgWE1MIGVycm9ycyBieSBhZGRpbmcgKHJhdGhlciB0aGFuIHJlcGxhY2luZykgYSBDU1MgY2xhc3MsIHNvCiAgdGhhdCB0aGV5IGNhbiBiZSBkaXNhYmxlZCBieSBtb2RpZnlpbmcgdGhlaXIgc3R5bGUuIEZpeGVzIHNldmVyYWwKICBzZWxlY3Rpb24gYnVncywgYW5kIGEgbnVtYmVyIG9mIHNtYWxsIGdsaXRjaGVzLjwvcD4KCiAgPHAgY2xhc3M9InJlbCI+MTItMTEtMjAwOTogPGEKICBocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjY1LnppcCI+VmVyc2lvbgogIDAuNjU8L2E+OjwvcD4KICA8cCBjbGFzcz0icmVsLW5vdGUiPkFkZCBzdXBwb3J0IGZvciBoYXZpbmcgYm90aCBsaW5lLXdyYXBwaW5nIGFuZAogIGxpbmUtbnVtYmVycyB0dXJuZWQgb24sIG1ha2UgcGFyZW4taGlnaGxpZ2h0aW5nIHN0eWxlIGN1c3RvbWlzYWJsZQogICg8Y29kZT5tYXJrUGFyZW48L2NvZGU+IGFuZCA8Y29kZT51bm1hcmtQYXJlbjwvY29kZT4gY29uZmlnCiAgb3B0aW9ucyksIHdvcmsgYXJvdW5kIGEgc2VsZWN0aW9uIGJ1ZyB0aGF0IE9wZXJhCiAgPGVtPnJlPC9lbT5pbnRyb2R1Y2VkIGluIHZlcnNpb24gMTAuPC9wPgoKICA8cCBjbGFzcz0icmVsIj4yMy0xMC0yMDA5OiA8YQogIGhyZWY9Imh0dHA6Ly9jb2RlbWlycm9yLm5ldC9jb2RlbWlycm9yLTAuNjQuemlwIj5WZXJzaW9uCiAgMC42NDwvYT46PC9wPgogIDxwIGNsYXNzPSJyZWwtbm90ZSI+U29sdmVzIHNvbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgdGhlCiAgcGFzdGUtaGFuZGxpbmcgY2hhbmdlcyBmcm9tIHRoZSBwcmV2aW91cyByZWxlYXNlLiBBZGRzCiAgPGNvZGU+c2V0U3BlbGxjaGVjazwvY29kZT4sIDxjb2RlPnNldFRleHRXcmFwcGluZzwvY29kZT4sCiAgPGNvZGU+c2V0SW5kZW50VW5pdDwvY29kZT4sIDxjb2RlPnNldFVuZG9EZXB0aDwvY29kZT4sCiAgPGNvZGU+c2V0VGFiTW9kZTwvY29kZT4sIGFuZCA8Y29kZT5zZXRMaW5lTnVtYmVyczwvY29kZT4gdG8KICBjdXN0b21pc2UgYSBydW5uaW5nIGVkaXRvci4gSW50cm9kdWNlcyBhbiA8YQogIGhyZWY9ImNvbnRyaWIvc3FsL2luZGV4Lmh0bWwiPlNRTDwvYT4gcGFyc2VyLiBGaXhlcyBhIGZldyBzbWFsbAogIHByb2JsZW1zIGluIHRoZSA8YSBocmVmPSJjb250cmliL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+CiAgcGFyc2VyLiBBbmQsIGFzIHVzdWFsLCBhZGQgd29ya2Fyb3VuZHMgZm9yIHZhcmlvdXMgbmV3bHkgZGlzY292ZXJlZAogIGJyb3dzZXIgaW5jb21wYXRpYmlsaXRpZXMuPC9wPgoKPHAgY2xhc3M9InJlbCI+PGVtPjMxLTA4LTIwMDk8L2VtPjogPGEKaHJlZj0iaHR0cDovL2NvZGVtaXJyb3IubmV0L2NvZGVtaXJyb3ItMC42My56aXAiPlZlcnNpb24KMC42MzwvYT46PC9wPgo8cCBjbGFzcz0icmVsLW5vdGUiPiBPdmVyaGF1bCBvZiBwYXN0ZS1oYW5kbGluZyAobGVzcyBmcmFnaWxlKSwgZml4ZXMgZm9yIHNldmVyYWwKc2VyaW91cyBJRTggaXNzdWVzIChjdXJzb3IganVtcGluZywgZW5kLW9mLWRvY3VtZW50IGJ1Z3MpIGFuZCBhIG51bWJlcgpvZiBzbWFsbCBwcm9ibGVtcy48L3A+Cgo8cCBjbGFzcz0icmVsIj48ZW0+MzAtMDUtMjAwOTwvZW0+OiA8YQpocmVmPSJodHRwOi8vY29kZW1pcnJvci5uZXQvY29kZW1pcnJvci0wLjYyLnppcCI+VmVyc2lvbgowLjYyPC9hPjo8L3A+CjxwIGNsYXNzPSJyZWwtbm90ZSI+SW50cm9kdWNlcyA8YSBocmVmPSJjb250cmliL3B5dGhvbi9pbmRleC5odG1sIj5QeXRob248L2E+CmFuZCA8YSBocmVmPSJjb250cmliL2x1YS9pbmRleC5odG1sIj5MdWE8L2E+IHBhcnNlcnMuIEFkZAo8Y29kZT5zZXRQYXJzZXI8L2NvZGU+IChvbi10aGUtZmx5IG1vZGUgY2hhbmdpbmcpIGFuZAo8Y29kZT5jbGVhckhpc3Rvcnk8L2NvZGU+IG1ldGhvZHMuIE1ha2UgcGFyc2luZyBwYXNzZXMgdGltZS1iYXNlZAppbnN0ZWFkIG9mIGxpbmVzLWJhc2VkIChzZWUgdGhlIDxjb2RlPnBhc3NUaW1lPC9jb2RlPiBvcHRpb24pLjwvcD4KCiAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iY3NzL2ZvbnQuanMiPjwvc2NyaXB0PgoKPC9ib2R5PjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBDb2RlTWlycm9yIDIKCkNvZGVNaXJyb3IgMiBpcyBhIHJld3JpdGUgb2YgW0NvZGVNaXJyb3IKMV0oaHR0cDovL2dpdGh1Yi5jb20vbWFyaWpuaC9Db2RlTWlycm9yKS4gVGhlIGRvY3MgbGl2ZQpbaGVyZV0oaHR0cDovL2NvZGVtaXJyb3IubmV0LzIvbWFudWFsLmh0bWwpLCBhbmQgdGhlIHByb2plY3QgcGFnZSBpcwpbaHR0cDovL2NvZGVtaXJyb3IubmV0LzIvXShodHRwOi8vY29kZW1pcnJvci5uZXQvMi8pLgo=]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/codemirror2/test/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkNvZGVNaXJyb3IgMjogVGVzdCBTdWl0ZTwvdGl0bGU+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2xpYi9jb2RlbWlycm9yLmNzcyI+CiAgICA8c2NyaXB0IHNyYz0iLi4vbGliL2NvZGVtaXJyb3IuanMiPjwvc2NyaXB0PgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi9tb2RlL2phdmFzY3JpcHQvamF2YXNjcmlwdC5jc3MiPgogICAgPHNjcmlwdCBzcmM9Ii4uL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzIj48L3NjcmlwdD4KCiAgICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogICAgICAub2sge2NvbG9yOiAjMGUwO30KICAgICAgLmZhaWx1cmUge2NvbG9yOiAjZTAwO30KICAgICAgLmVycm9yIHtjb2xvcjogI2M5MDt9CiAgICA8L3N0eWxlPgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoMT5Db2RlTWlycm9yIDI6IFRlc3QgU3VpdGU8L2gxPgoKICAgIDxwPkEgbGltaXRlZCBzZXQgb2YgcHJvZ3JhbW1hdGljIHNhbml0eSB0ZXN0cyBmb3IgQ29kZU1pcnJvci48L3A+CgogICAgPHByZSBpZD1vdXRwdXQ+PC9wcmU+CgogICAgPGRpdiBzdHlsZT0idmlzaWJpbGl0eTogaGlkZGVuIiBpZD10ZXN0Z3JvdW5kPgogICAgICA8Zm9ybT48dGV4dGFyZWEgaWQ9ImNvZGUiIG5hbWU9ImNvZGUiPjwvdGV4dGFyZWE+PGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPW9rIG5hbWU9c3VibWl0PjwvZm9ybT4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQgc3JjPSJ0ZXN0LmpzIj48L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K]]></data>
	</file>
	<file>
	  <filename>/codemirror2/test/test.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[dmFyIHRlc3RzID0gW107Cgp0ZXN0KCJmcm9tVGV4dEFyZWEiLCBmdW5jdGlvbigpIHsKICB2YXIgdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29kZSIpOwogIHRlLnZhbHVlID0gIkNPTlRFTlQiOwogIHZhciBjbSA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKHRlKTsKICBpcyghdGUub2Zmc2V0SGVpZ2h0KTsKICBlcShjbS5nZXRWYWx1ZSgpLCAiQ09OVEVOVCIpOwogIGNtLnNldFZhbHVlKCJmb29cbmJhciIpOwogIGVxKGNtLmdldFZhbHVlKCksICJmb29cbmJhciIpOwogIGNtLnNhdmUoKTsKICBpcygvXmZvb1xyP1xuYmFyJC8udGVzdCh0ZS52YWx1ZSkpOwogIGNtLnNldFZhbHVlKCJ4eHgiKTsKICBjbS50b1RleHRBcmVhKCk7CiAgaXModGUub2Zmc2V0SGVpZ2h0KTsKICBlcSh0ZS52YWx1ZSwgInh4eCIpOwp9KTsKCnRlc3RDTSgiZ2V0UmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMjM0Iik7CiAgZXEoY20uZ2V0TGluZSgxKSwgIjU2NzgiKTsKICBlcShjbS5nZXRMaW5lKDIpLCBudWxsKTsKICBlcShjbS5nZXRMaW5lKC0xKSwgbnVsbCk7CiAgZXEoY20uZ2V0UmFuZ2Uoe2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDAsIGNoOiAzfSksICIxMjMiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IC0xfSwge2xpbmU6IDAsIGNoOiAyMDB9KSwgIjEyMzQiKTsKICBlcShjbS5nZXRSYW5nZSh7bGluZTogMCwgY2g6IDJ9LCB7bGluZTogMSwgY2g6IDJ9KSwgIjM0XG41NiIpOwogIGVxKGNtLmdldFJhbmdlKHtsaW5lOiAxLCBjaDogMn0sIHtsaW5lOiAxMDAsIGNoOiAwfSksICI3OCIpOwp9LCB7dmFsdWU6ICIxMjM0XG41Njc4In0pOwoKdGVzdENNKCJyZXBsYWNlUmFuZ2UiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldFZhbHVlKCksICIiKTsKICBjbS5yZXBsYWNlUmFuZ2UoImZvb1xuIiwge2xpbmU6IDAsIGNoOiAwfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZvb1xuIik7CiAgY20ucmVwbGFjZVJhbmdlKCJhXG5iIiwge2xpbmU6IDAsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImZhXG5ib29cbiIpOwogIGVxKGNtLmxpbmVDb3VudCgpLCAzKTsKICBjbS5yZXBsYWNlUmFuZ2UoInh5enp5Iiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEsIGNoOiAxfSk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgInh5enp5b29cbiIpOwogIGNtLnJlcGxhY2VSYW5nZSgiYWJjIiwge2xpbmU6IDAsIGNoOiAwfSwge2xpbmU6IDEwLCBjaDogMH0pOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5saW5lQ291bnQoKSwgMSk7Cn0pOwoKdGVzdENNKCJzZWxlY3Rpb24iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldFNlbGVjdGlvbih7bGluZTogMCwgY2g6IDR9LCB7bGluZTogMiwgY2g6IDJ9KTsKICBpcyhjbS5zb21ldGhpbmdTZWxlY3RlZCgpKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgIjExXG4yMjIyMjJcbjMzIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKGZhbHNlKSwge2xpbmU6IDIsIGNoOiAyfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMCwgY2g6IDR9KTsKICBjbS5zZXRTZWxlY3Rpb24oe2xpbmU6IDEsIGNoOiAwfSk7CiAgaXMoIWNtLnNvbWV0aGluZ1NlbGVjdGVkKCkpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDB9KTsKICBjbS5yZXBsYWNlU2VsZWN0aW9uKCJhYmMiKTsKICBlcShjbS5nZXRTZWxlY3Rpb24oKSwgImFiYyIpOwogIGVxKGNtLmdldFZhbHVlKCksICIxMTExMTFcbmFiYzIyMjIyMlxuMzMzMzMzIik7CiAgY20ucmVwbGFjZVNlbGVjdGlvbigiZGVmIiwgImVuZCIpOwogIGVxKGNtLmdldFNlbGVjdGlvbigpLCAiIik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDN9KTsKICBjbS5zZXRDdXJzb3Ioe2xpbmU6IDIsIGNoOiAxfSk7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMiwgY2g6IDF9KTsKICBjbS5zZXRDdXJzb3IoMSwgMik7CiAgZXFQb3MoY20uZ2V0Q3Vyc29yKHRydWUpLCB7bGluZTogMSwgY2g6IDJ9KTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgibGluZXMiLCBmdW5jdGlvbihjbSkgewogIGVxKGNtLmdldExpbmUoMCksICIxMTExMTEiKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiMjIyMjIyIik7CiAgZXEoY20uZ2V0TGluZSgtMSksIG51bGwpOwogIGNtLnJlbW92ZUxpbmUoMSk7CiAgY20uc2V0TGluZSgxLCAiYWJjIik7CiAgZXEoY20uZ2V0VmFsdWUoKSwgIjExMTExMVxuYWJjIik7Cn0sIHt2YWx1ZTogIjExMTExMVxuMjIyMjIyXG4zMzMzMzMifSk7Cgp0ZXN0Q00oImluZGVudCIsIGZ1bmN0aW9uKGNtKSB7CiAgY20uaW5kZW50TGluZSgxKTsKICBlcShjbS5nZXRMaW5lKDEpLCAiICAgYmxhaCgpOyIpOwogIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDgpOwogIGNtLmluZGVudExpbmUoMSk7CiAgZXEoY20uZ2V0TGluZSgxKSwgIlx0YmxhaCgpOyIpOwp9LCB7dmFsdWU6ICJpZiAoeCkge1xuYmxhaCgpO1xufSIsIGluZGVudFVuaXQ6IDMsIGluZGVudFdpdGhUYWJzOiB0cnVlfSk7Cgp0ZXN0KCJkZWZhdWx0cyIsIGZ1bmN0aW9uKCkgewogIHZhciBvbGRkZWZhdWx0cyA9IENvZGVNaXJyb3IuZGVmYXVsdHMsIGRlZnMgPSBDb2RlTWlycm9yLmRlZmF1bHRzID0ge307CiAgZm9yICh2YXIgb3B0IGluIG9sZGRlZmF1bHRzKSBkZWZzW29wdF0gPSBvbGRkZWZhdWx0c1tvcHRdOwogIGRlZnMuaW5kZW50VW5pdCA9IDU7CiAgZGVmcy52YWx1ZSA9ICJ1dSI7CiAgZGVmcy5lbnRlck1vZGUgPSAia2VlcCI7CiAgZGVmcy50YWJpbmRleCA9IDU1OwogIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSk7CiAgdHJ5IHsKICAgIGVxKGNtLmdldE9wdGlvbigiaW5kZW50VW5pdCIpLCA1KTsKICAgIGNtLnNldE9wdGlvbigiaW5kZW50VW5pdCIsIDEwKTsKICAgIGVxKGRlZnMuaW5kZW50VW5pdCwgNSk7CiAgICBlcShjbS5nZXRWYWx1ZSgpLCAidXUiKTsKICAgIGVxKGNtLmdldE9wdGlvbigiZW50ZXJNb2RlIiksICJrZWVwIik7CiAgICBlcShjbS5nZXRJbnB1dEZpZWxkKCkudGFiaW5kZXgsIDU1KTsKICB9CiAgZmluYWxseSB7CiAgICBDb2RlTWlycm9yLmRlZmF1bHRzID0gb2xkZGVmYXVsdHM7CiAgICBwbGFjZS5yZW1vdmVDaGlsZChjbS5nZXRXcmFwcGVyRWxlbWVudCgpKTsKICB9Cn0pOwoKdGVzdENNKCJsaW5lSW5mbyIsIGZ1bmN0aW9uKGNtKSB7CiAgZXEoY20ubGluZUluZm8oLTEpLCBudWxsKTsKICB2YXIgbGggPSBjbS5zZXRNYXJrZXIoMSwgIkZPTyIsICJiYXIiKTsKICB2YXIgaW5mbyA9IGNtLmxpbmVJbmZvKDEpOwogIGVxKGluZm8udGV4dCwgIjIyMjIyMiIpOwogIGVxKGluZm8ubWFya2VyVGV4dCwgIkZPTyIpOwogIGVxKGluZm8ubWFya2VyQ2xhc3MsICJiYXIiKTsKICBlcShpbmZvLmxpbmUsIDEpOwogIGVxKGNtLmxpbmVJbmZvKDIpLm1hcmtlclRleHQsIG51bGwpOwogIGNtLmNsZWFyTWFya2VyKGxoKTsKICBlcShjbS5saW5lSW5mbygxKS5tYXJrZXJUZXh0LCBudWxsKTsKfSwge3ZhbHVlOiAiMTExMTExXG4yMjIyMjJcbjMzMzMzMyJ9KTsKCnRlc3RDTSgiY29vcmRzIiwgZnVuY3Rpb24oY20pIHsKICBjbS5nZXRXcmFwcGVyRWxlbWVudCgpLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CiAgdmFyIGNvbnRlbnQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwMDsgKytpKSBjb250ZW50LnB1c2goIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgKyBpKTsKICBjbS5zZXRWYWx1ZShjb250ZW50LmpvaW4oIlxuIikpOwogIHZhciB0b3AgPSBjbS5jaGFyQ29vcmRzKHtsaW5lOiAwLCBjaDogMH0pOwogIHZhciBib3QgPSBjbS5jaGFyQ29vcmRzKHtsaW5lOiAyMDAsIGNoOiAzMH0pOwogIGlzKHRvcC54IDwgYm90LngpOwogIGlzKHRvcC55IDwgYm90LnkpOwogIGlzKHRvcC55IDwgdG9wLnlCb3QpOwogIGNtLmdldFdyYXBwZXJFbGVtZW50KCkuc2Nyb2xsVG9wID0gMTAwOwogIGNtLnJlZnJlc2goKTsKICB2YXIgdG9wMiA9IGNtLmNoYXJDb29yZHMoe2xpbmU6IDAsIGNoOiAwfSk7CiAgaXModG9wLnkgPiB0b3AyLnkpOwogIGVxKHRvcC54LCB0b3AyLngpOwp9KTsKCnRlc3RDTSgiY29vcmRzQ2hhciIsIGZ1bmN0aW9uKGNtKSB7CiAgdmFyIGNvbnRlbnQgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDcwOyArK2kpIGNvbnRlbnQucHVzaCgieHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eCIpOwogIGNtLnNldFZhbHVlKGNvbnRlbnQuam9pbigiXG4iKSk7CiAgZm9yICh2YXIgeCA9IDA7IHggPCAzNTsgeCArPSAyKSB7CiAgICBmb3IgKHZhciB5ID0gMDsgeSA8IDcwOyB5ICs9IDUpIHsKICAgICAgY20uc2V0Q3Vyc29yKHksIHgpOwogICAgICB2YXIgcG9zID0gY20uY29vcmRzQ2hhcihjbS5jaGFyQ29vcmRzKHtsaW5lOiB5LCBjaDogeH0pKTsKICAgICAgZXEocG9zLmxpbmUsIHkpOwogICAgICBlcShwb3MuY2gsIHgpOwogICAgfQogIH0KfSk7Cgp0ZXN0Q00oInVuZG8iLCBmdW5jdGlvbihjbSkgewogIGNtLnNldExpbmUoMCwgImRlZiIpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmMiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDApOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMSk7CiAgY20ucmVkbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJkZWYiKTsKICBlcShjbS5oaXN0b3J5U2l6ZSgpLnVuZG8sIDEpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkucmVkbywgMCk7CiAgY20uc2V0VmFsdWUoIjFcblxuXG4yIik7CiAgZXEoY20uaGlzdG9yeVNpemUoKS51bmRvLCAwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgNDApOwogIGZvciAodmFyIGkgPSAwOyBpIDwgMzg7ICsraSkgY20udW5kbygpOwogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMik7CiAgZXEoY20uaGlzdG9yeVNpemUoKS5yZWRvLCAzOCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImExXG5cblxuYjIiKTsKICBjbS5zZXRPcHRpb24oInVuZG9EZXB0aCIsIDEwKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyArK2kpIHsKICAgIGNtLnJlcGxhY2VSYW5nZSgiYSIsIHtsaW5lOiAwLCBjaDogMH0pOwogICAgY20ucmVwbGFjZVJhbmdlKCJiIiwge2xpbmU6IDMsIGNoOiAwfSk7CiAgfQogIGVxKGNtLmhpc3RvcnlTaXplKCkudW5kbywgMTApOwp9LCB7dmFsdWU6ICJhYmMifSk7Cgp0ZXN0Q00oInVuZG9NdWx0aUxpbmUiLCBmdW5jdGlvbihjbSkgewogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MSwgY2g6IDB9KTsKICBjbS51bmRvKCk7CiAgZXEoY20uZ2V0VmFsdWUoKSwgImFiY1xuZGVmXG5naGkiKTsKICBjbS5yZXBsYWNlUmFuZ2UoInkiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieCIsIHtsaW5lOjAsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7CiAgY20ucmVwbGFjZVJhbmdlKCJ5Iiwge2xpbmU6MiwgY2g6IDB9KTsKICBjbS5yZXBsYWNlUmFuZ2UoIngiLCB7bGluZToxLCBjaDogMH0pOwogIGNtLnJlcGxhY2VSYW5nZSgieiIsIHtsaW5lOjIsIGNoOiAwfSk7CiAgY20udW5kbygpOwogIGVxKGNtLmdldFZhbHVlKCksICJhYmNcbmRlZlxuZ2hpIik7Cn0sIHt2YWx1ZTogImFiY1xuZGVmXG5naGkifSk7CgovLyBTY2FmZm9sZGluZwoKZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICByZXR1cm4gc3RyLnJlcGxhY2UoL1s8Jl0vZywgZnVuY3Rpb24oc3RyKSB7cmV0dXJuIHN0ciA9PSAiJiIgPyAiJmFtcDsiIDogIiZsdDsiO30pOwp9CmZ1bmN0aW9uIGZvckVhY2goYXJyLCBmKSB7CiAgZm9yICh2YXIgaSA9IDAsIGUgPSBhcnIubGVuZ3RoOyBpIDwgZTsgKytpKSBmKGFycltpXSk7Cn0KCmZ1bmN0aW9uIEZhaWx1cmUod2h5KSB7dGhpcy5tZXNzYWdlID0gd2h5O30KCmZ1bmN0aW9uIHRlc3QobmFtZSwgcnVuKSB7dGVzdHMucHVzaCh7bmFtZTogbmFtZSwgZnVuYzogcnVufSk7fQpmdW5jdGlvbiB0ZXN0Q00obmFtZSwgcnVuLCBvcHRzKSB7CiAgdGVzdChuYW1lLCBmdW5jdGlvbigpIHsKICAgIHZhciBwbGFjZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXN0Z3JvdW5kIiksIGNtID0gQ29kZU1pcnJvcihwbGFjZSwgb3B0cyk7CiAgICB0cnkge3J1bihjbSk7fQogICAgZmluYWxseSB7cGxhY2UucmVtb3ZlQ2hpbGQoY20uZ2V0V3JhcHBlckVsZW1lbnQoKSk7fQogIH0pOwp9CgpmdW5jdGlvbiBydW5UZXN0cygpIHsKICB2YXIgZmFpbHVyZXMgPSBbXSwgcnVuID0gMDsKICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxlbmd0aDsgKytpKSB7CiAgICB2YXIgdGVzdCA9IHRlc3RzW2ldOwogICAgdHJ5IHt0ZXN0LmZ1bmMoKTt9CiAgICBjYXRjaChlKSB7CiAgICAgIGlmIChlIGluc3RhbmNlb2YgRmFpbHVyZSkKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZmFpbHVyZSIsIHRlc3Q6IHRlc3QubmFtZSwgdGV4dDogZS5tZXNzYWdlfSk7CiAgICAgIGVsc2UKICAgICAgICBmYWlsdXJlcy5wdXNoKHt0eXBlOiAiZXJyb3IiLCB0ZXN0OiB0ZXN0Lm5hbWUsIHRleHQ6IGUudG9TdHJpbmcoKX0pOwogICAgfQogICAgcnVuKys7CiAgfQogIHZhciBodG1sID0gW3J1biArICIgdGVzdHMgcnVuLiJdOwogIGlmIChmYWlsdXJlcy5sZW5ndGgpCiAgICBmb3JFYWNoKGZhaWx1cmVzLCBmdW5jdGlvbihmYWlsKSB7CiAgICAgIGh0bWwucHVzaChmYWlsLnRlc3QgKyAnOiA8c3BhbiBjbGFzcz0iJyArIGZhaWwudHlwZSArICciPicgKyBodG1sRXNjYXBlKGZhaWwudGV4dCkgKyAiPC9zcGFuPiIpOwogICAgfSk7CiAgZWxzZSBodG1sLnB1c2goJzxzcGFuIGNsYXNzPSJvayI+QWxsIHBhc3NlZC48L3NwYW4+Jyk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm91dHB1dCIpLmlubmVySFRNTCA9IGh0bWwuam9pbigiXG4iKTsKfQoKZnVuY3Rpb24gZXEoYSwgYiwgbXNnKSB7CiAgaWYgKGEgIT0gYikgdGhyb3cgbmV3IEZhaWx1cmUoYSArICIgIT0gIiArIGIgKyAobXNnID8gIiAoIiArIG1zZyArICIpIiA6ICIiKSk7Cn0KZnVuY3Rpb24gZXFQb3MoYSwgYiwgbXNnKSB7CiAgZXEoYS5saW5lLCBiLmxpbmUsIG1zZyk7CiAgZXEoYS5jaCwgYi5jaCwgbXNnKTsKfQpmdW5jdGlvbiBpcyhhLCBtc2cpIHsKICBpZiAoIWEpIHRocm93IG5ldyBGYWlsdXJlKCJhc3NlcnRpb24gZmFpbGVkIiArIChtc2cgPyAiICgiICsgbXNnICsgIikiIDogIiIpKTsKfQoKd2luZG93Lm9ubG9hZCA9IHJ1blRlc3RzOwo=]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbImZyaWVuZGx5bmFtZSJdPSJDb2RlTWlycm9yIHN5bnRheGhpZ2hsaWdodGluZyBlZGl0b3IiOwoKJGxhbmdbInBvc3RpbnN0YWxsIl09IlRoZSBDb2RlTWlycm9yIG1vZHVsZSB3YXMgc3VjZXNzZnVsbHkgaW5zdGFsbGVkIjsKJGxhbmdbIm5lZWRwZXJtaXNzaW9uIl09IidZb3UgbmVlZCB0aGUgJyVzJyBwZXJtaXNzaW9uIHRvIHBlcmZvcm0gdGhhdCBmdW5jdGlvbi4iOwoKJGxhbmdbInNldHRpbmdzdGFiIl09IlNldHRpbmdzIjsKJGxhbmdbInNhdmVzZXR0aW5ncyJdPSJTYXZlIHNldHRpbmdzIjsKJGxhbmdbInNldHRpbmdzc2F2ZWQiXT0iU2V0dGluZ3Mgc2F2ZWQiOwoKJGxhbmdbImh0bWx0ZXN0Il09IkhUTUwgc3ludGF4IHRlc3QiOwokbGFuZ1siY3NzdGVzdCJdPSJDU1Mgc3ludGF4IHRlc3QiOwokbGFuZ1sicGhwdGVzdCJdPSJQSFAgc3ludGF4IHRlc3QiOwokbGFuZ1sianN0ZXN0Il09IkphdmFTY3JpcHQgc3ludGF4IHRlc3QiOwokbGFuZ1siZXhhbXBsZXN5bnRheCJdPSJTeW50YXggdG8gdGVzdCB3aXRoIjsKJGxhbmdbImNoYW5nZSJdPSJDaGFuZ2UuLi4iOwoKJGxhbmdbInNob3dsaW5lbnVtYmVycyJdPSJTaG93IGxpbmVudW1iZXJzIjsKJGxhbmdbInRleHR3cmFwcGluZyJdPSJXcmFwIGxvbmcgbGluZXMiOwokbGFuZ1siYXV0b21hdGNocGFyZW5zIl09IkF1dG9tYXRjaCBwYXJlbnRoZXNpcyI7CiRsYW5nWyJ0YWJoYW5kbGluZyJdPSJIb3cgdG8gaGFuZGxlIHByZXNzaW5nIHRoZSBUQUIga2V5IjsKJGxhbmdbInRhYmRlZmF1bHQiXT0iTGV0IHRoZSBicm93c2VyIGRlY2lkZSI7CiRsYW5nWyJ0YWJpbmRlbnQiXT0iRG8gaW5kZW50YXRpb24iOwokbGFuZ1sidGFic3BhY2VzIl09Ikluc2VydCBzcGFjZXMiOwokbGFuZ1sidGFic2hpZnQiXT0iU2hpZnQgdG8gdGhlIHJpZ2h0LCBzaGlmdC1UQUIgc2hpZnRzIHRvIGxlZnQiOwoKJGxhbmdbImNzc2FkZGl0aW9ucyJdPSJBZGRpdGlvbnMgdG8gdGhlIENvZGVNaXJyb3ItY3NzLiI7CgokbGFuZ1siaGVscCJdPSI8c3Ryb25nPldoYXQgZG9lcyB0aGlzIG1vZHVsZSBkbz88L3N0cm9uZz4KPGJyLz4KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLgpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQo8YnIvPjxici8+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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgU3ludGF4LUhpZ2hsaWdodGluZy1FZGl0b3IgJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnRGFzIENvZGVNaXJyb3ItTW9kdWwgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuJzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnU2llIGJlc2l0emVuIG5pY2h0ICBkaWUgJiMwMzk7JXMmIzAzOTstQmVyZWNodGlndW5nLCB1bSBkaWVzZSBGdW5rdGlvbiBhdXN6dWYmdXVtbDtocmVuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0VpbnN0ZWxsdW5nZW4nOwokbGFuZ1snc2F2ZXNldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBzcGVpY2hlcm4nOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0VpbnN0ZWxsdW5nZW4gZ2VzcGVpY2hlcnQnOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MLVN5bnRheC1UZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MtU3ludGF4LVRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUC1TeW50YXgtVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0LVN5bnRheC1UZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YXggdGVzdGVuIG1pdCc7CiRsYW5nWydjaGFuZ2UnXSA9ICcmQXVtbDtuZGVyZSAuLi4nOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnWmVpbGVubnVtbWVybiBhbnplaWdlbic7CiRsYW5nWyd0ZXh0d3JhcHBpbmcnXSA9ICdMYW5nZSBaZWlsZW4gdW1icmVjaGVuJzsKJGxhbmdbJ2F1dG9tYXRjaHBhcmVucyddID0gJ0F1dG9tYXRpc2NoZSBLbGFtbWVyLUVya2VubnVuZyc7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ1VtZ2FuZyBtaXQgRHImdXVtbDtja2VuIGRlciBUQUItVGFzdGUnOwokbGFuZ1sndGFiZGVmYXVsdCddID0gJ0Jyb3dzZXIgZW50c2NoZWlkZW4gbGFzc2VuJzsKJGxhbmdbJ3RhYmluZGVudCddID0gJ0VpbnImdXVtbDtja3VuZyc7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdMZWVyemVpY2hlbiBlaW5mJnV1bWw7Z2VuJzsKJGxhbmdbJ3RhYnNoaWZ0J10gPSAnU2hpZnQgbmFjaCByZWNodHMsIFNoaWZ0LVRBQiB2ZXJzY2hpZWJ0IHNpY2ggbmFjaCBsaW5rcyc7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldhcyBtYWNodCBkaWVzZXMgTW9kdWw/PC9oMz4NCjxwPkRhcyBDb2RlTWlycm9yLU1vZHVsZSBpc3QgZWluIEVkaXRvciBtaXQgU3ludGF4LUhpZ2hsaWdodGluZywgbWl0IGRlbSBTaWUgb25saW5lIEluaGFsdCwgVGVtcGxhdGVzIHVuZCBTdHlsZXNoZWV0cyBiZWFyYmVpdGVuIGsmb3VtbDtubmVuLiBEYXMgTW9kdWwga2FubiBzb3dvaGwgZGllIFdZU0lXWUctRWRpdG9yZW4gZXJzZXR6ZW4gYWxzIGF1Y2ggc2VwYXJhdCB6dW0gRWRpdGllcmVuIHZvbiBUZW1wbGF0ZXMgdW5kIFN0eWxlc2hlZXRzIHZlcndlbmRldCB3ZXJkZW4gKHVudGVyc3QmdXVtbDt0enQgYWIgQ01TbXMgVmVyc2lvbiAxLjEpLjwvcD4NCjxoMz5XaWUgd2lyZCBlcyBlaW5nZXNldHp0PzwvaDM+DQo8cD5JbnN0YWxsaWVyZW4gU2llIGRhcyBNb2R1bCB1bmQgYWt0aXZpZXJlbiBTaWUgZXMgYW5zY2hsaWUmc3psaWc7ZW5kIGluIGRlbiBiZW51dHplcnNwZXppZmlzY2hlbiBFaW5zdGVsbHVuZ2VuLjwvcD4NCjxwPkJlYWNodGVuIFNpZSwgZGFzcyBTaWUgYWIgQ01TbXMtVmVyc2lvbiAxLjEgdW5kIGgmb3VtbDtoZXIgPHN0cm9uZz5Db2RlTWlycm9yPC9zdHJvbmc+IHNvd29obCBhbHMgV1lTSVdZRy1FZGl0b3IgYWxzIGF1Y2ggYWxzIFN5bnRheC1IaWdobGlnaHRpbmctRWRpdG9yIGF1c3cmYXVtbDtobGVuIGsmb3VtbDtubmVuLjwvcD4nOwokbGFuZ1sncWNhJ10gPSAnUDAtMTQ1ODQ1MDY2NC0xMjg0NTczMDg0OTE4JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI5Mzc5NDUyOC43NjIuNDUudXRtY3NyPWZvcnVtLmNtc21hZGVzaW1wbGUub3JnfHV0bWNjbj0ocmVmZXJyYWwpfHV0bWNtZD1yZWZlcnJhbHx1dG1jY3Q9L2luZGV4LnBocCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjExNjQzNjE5MDguMTI4NTE1Mzc2OC4xMjkzOTk0NzcxLjEyOTM5OTcyOTEuNzc3JzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4zLjEwLjEyOTM5OTcyOTEnOwo/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[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0VkaXRldXIgZGUgc3ludGF4ZSBjb2xvciZlYWN1dGU7IENvZGVNaXJyb3InOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdMZSBtb2R1bGUgQ29kZU1pcnJvciBhICZlYWN1dGU7dCZlYWN1dGU7IGluc3RhbGwmZWFjdXRlOyBhdmVjIHN1Y2MmZWdyYXZlO3MnOwokbGFuZ1snbmVlZHBlcm1pc3Npb24nXSA9ICcmIzAzOTtWb3VzIGF2ZXogYmVzb2luIGRlIGwmIzAzOTthdXRvcmlzYXRpb24gJiMwMzk7JXMmIzAzOTsgIHBvdXIgY2V0dGUgZm9uY3Rpb24nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdTYXV2ZWdhcmRlciBsZXMgcGFyYW0mZWdyYXZlO3RyZXMnOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ1BhcmFtJmVncmF2ZTt0cmVzIHNhdXZlZ2FyZCZlYWN1dGU7cyc7CiRsYW5nWydodG1sdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBIVE1MICc7CiRsYW5nWydjc3N0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIENTUyAnOwokbGFuZ1sncGhwdGVzdCddID0gJ1Rlc3QgZGUgc3ludGF4ZSBQSFAnOwokbGFuZ1snanN0ZXN0J10gPSAnVGVzdCBkZSBzeW50YXhlIEphdmFTY3JpcHQnOwokbGFuZ1snZXhhbXBsZXN5bnRheCddID0gJ1N5bnRheGUgcG91ciB0ZXN0ZXIgYXZlYyZuYnNwOyc7CiRsYW5nWydjaGFuZ2UnXSA9ICdDaGFuZ2VyIC4uLic7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdBZmZpY2hlciBsZSBub21icmUgZGUgbGlnbmVzJzsKJGxhbmdbJ3RleHR3cmFwcGluZyddID0gJ1JldG91ciAmYWdyYXZlOyBsYSBsaWduZSBhdXRvbWF0aXF1ZSc7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBZmZpY2hlciBsZXMgY29ycmVzcG9uZGFuY2VzIGRlIHBhcmVudGgmZWdyYXZlO3Nlcyc7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ0NvbW1lbnQgZyZlYWN1dGU7cmVyIGxlIGNsaWMgc3VyIGxhIHRvdWNoZSBUQUInOwokbGFuZ1sndGFiZGVmYXVsdCddID0gJ0xhaXNzZXIgbGUgbmF2aWdhdGV1ciBkJmVhY3V0ZTtjaWRlcic7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdJbmRlbnRlcic7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdJbnMmZWFjdXRlO3JlciBkZXMgZXNwYWNlcyc7CiRsYW5nWyd0YWJzaGlmdCddID0gJ1NoaWZ0IHZlcnMgbGEgZHJvaXRlLCBzaGlmdC1UQUIgc2hpZnRzIHZlcnMgbGEgZ2F1Y2hlJzsKJGxhbmdbJ2Nzc2FkZGl0aW9ucyddID0gJ0Fqb3V0cyAmYWdyYXZlOyBsYSBmZXVpbGxlIGRlIHN0eWxlIGRlIENvZGVNaXJyb3IuJzsKJGxhbmdbJ2hlbHAnXSA9ICc8c3Ryb25nPlF1ZSBmYWl0IGNlIG1vZHVsZSZuYnNwOz88L3N0cm9uZz4NCjxici8+DQpMZSBtb2R1bGUgQ29kZU1pcnJvciB2b3VzIHBlcm1ldCBkZSBtb2RpZmllciBsZSBjb250ZW51LCBsZXMgZ2FiYXJpdHMgZXQgbGVzIGZldWlsbGVzIGRlIHN0eWxlIGVuIHV0aWxpc2FudCB1biAmZWFjdXRlO2RpdGV1ciBkZSBzeW50YXhlIGNvbG9yJmVhY3V0ZTsgbCYjMDM5O2ludCZlYWN1dGU7cmlldXIgZGUgdm90cmUgbmF2aWdhdGV1ci4gDQpJbCBwZXV0IGF1c3NpIGJpZW4gcmVtcGxhY2VyIGwmIzAzOTsmZWFjdXRlO2RpdGV1ciBXWVNJV1lHLCBldCBwZXJtZXR0cmUgZGUgdmlzdWFsaXNlci0mZWFjdXRlO2RpdGVyIGxlcyBnYWJhcml0cywgZmV1aWxsZXMgZGUgc3R5bGUuIChVbmlxdWVtZW50IHBvdXIgdmVyc2lvbiBDTVNNUyAxLjEgb3UgcGx1cykNCjxici8+PGJyLz4NCjxzdHJvbmc+Q29tbWVudCBsJiMwMzk7dXRpbGlzZXImbmJzcDs/PC9zdHJvbmc+PGJyLz4NCklsIHZvdXMgc3VmZml0IGRlIGwmIzAzOTtpbnN0YWxsZXIsIGV0IGRhbnMgJnF1b3Q7TWVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgLyBQciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzIGRlIGwmIzAzOTt1dGlsaXNhdGV1ciZxdW90OyBjaG9pc2lyIGF2ZWMgbGUgbWVudSBkJmVhY3V0ZTtyb3VsYW50IENvZGVNaXJyb3IgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9ubmVyIGxhIHN5bnRheGUgc3VybGlnbiZlYWN1dGU7ZSZxdW90OyBldC9vdSAmZWFjdXRlO3ZlbnR1ZWxsZW1lbnQgZGFucyAmcXVvdDtTJmVhY3V0ZTtsZWN0aW9uIGR1IFdZU0lXWUcgJmFncmF2ZTsgdXRpbGlzZXImcXVvdDsuDQonOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xMjU0MTE1OTg4LjEzMDE1ODMyNTkuMTMwMTU4MzI1OS4xMzAxNTgzMjU5LjEnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzMDE1ODMyNTkuMS4xLnV0bWNjbj0oZGlyZWN0KXx1dG1jc3I9KGRpcmVjdCl8dXRtY21kPShub25lKSc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3Igc3ludGFrc2ZyZW1oZXZpbmdzcmVkaWdlcmVyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnQ29kZU1pcnJvciBtb2R1bGVuIGJsZSBpbnN0YWxsZXJ0JzsKJGxhbmdbJ25lZWRwZXJtaXNzaW9uJ10gPSAnRHUgdHJlbmdlciAmIzAzOTslcyYjMDM5OyB0aWxsYXRlbHNlIGZvciAmYXJpbmc7IHV0ZiZvc2xhc2g7cmUgZGVubmUgZnVua3Nqb25lbi4nOwokbGFuZ1snc2V0dGluZ3N0YWInXSA9ICdJbm5zdGlsbGluZ2VyJzsKJGxhbmdbJ3NhdmVzZXR0aW5ncyddID0gJ0xhZ3JlIGlubnN0aWxsaW5nZXInOwokbGFuZ1snc2V0dGluZ3NzYXZlZCddID0gJ0lubnN0aWxsaW5nZXIgbGFncmV0JzsKJGxhbmdbJ2h0bWx0ZXN0J10gPSAnSFRNTCBzeW50YWtzIHRlc3QnOwokbGFuZ1snY3NzdGVzdCddID0gJ0NTUyBzeW50YWtzIHRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBzeW50YWtzIHRlc3QnOwokbGFuZ1snanN0ZXN0J10gPSAnSmF2YVNjcmlwdCBzeW50YWtzdGVzdCc7CiRsYW5nWydleGFtcGxlc3ludGF4J10gPSAnU3ludGFrcyAmYXJpbmc7IHRlc3RlIG1lZCc7CiRsYW5nWydjaGFuZ2UnXSA9ICdFbmRyZS4uLic7CiRsYW5nWydzaG93bGluZW51bWJlcnMnXSA9ICdWaXMgbGluamVudW1tZXInOwokbGFuZ1sndGV4dHdyYXBwaW5nJ10gPSAnQnJ5dCBsYW5nZSBsaW5qZXInOwokbGFuZ1snYXV0b21hdGNocGFyZW5zJ10gPSAnQXV0b21hdGlza2UgcGFyYW50ZXNlcic7CiRsYW5nWyd0YWJoYW5kbGluZyddID0gJ0h2b3JkYW4gc2thbCB0cnlrayBhdiBUQUItdGFzdGVuIGgmYXJpbmc7bnRlcmVzJzsKJGxhbmdbJ3RhYmRlZmF1bHQnXSA9ICdMYSBuZXR0bGVzZXJlbiBhdmdqJm9zbGFzaDtyZSc7CiRsYW5nWyd0YWJpbmRlbnQnXSA9ICdMYWcgaW5ucnlrayc7CiRsYW5nWyd0YWJzcGFjZXMnXSA9ICdTZXR0IGlubiBtZWxsb21yb20nOwokbGFuZ1sndGFic2hpZnQnXSA9ICdTZW5kZXIgdGlsIGgmb3NsYXNoO3lyZSwgc2hpZnQtVEFCIHNlbmRlciB0aWwgdmVuc3RyZSc7CiRsYW5nWydjc3NhZGRpdGlvbnMnXSA9ICdDb2RlTWlycm9yLWNzcyB0aWxsZWdnLic7CiRsYW5nWydoZWxwJ10gPSAnPHN0cm9uZz5XaGF0IGRvZXMgdGhpcyBtb2R1bGUgZG8/PC9zdHJvbmc+DQo8YnIvPg0KVGhlIENvZGVNaXJyb3IgbW9kdWxlIGFsbG93cyB5b3UgdG8gZWRpdCBjb250ZW50LCB0ZW1wbGF0ZXMgYW5kIHN0eWxlc2hlZXRzIHVzaW5nIGEgc3ludGF4aGlnaGxpZ2h0aW5nIGVkaXRvciBpbnNpZGUgeW91ciBicm93c2VyLg0KSXQgY2FuIGJvdGggcmVwbGFjZSBhIHd5c2l3eWctbW9kdWxlLCBhbmQgYWN0IHN0YW5kYWxvbmUgZm9yIHRlbXBsYXRlL3N0eWxlc2hlZXQgZWRpdGluZyAob25seSBzdXBwb3J0ZWQgaW4gQ01TbXMgMS4xKykNCjxici8+PGJyLz4NCjxzdHJvbmc+SG93IGRvIEkgdXNlIHRoaXMgbW9kdWxlPzwvc3Ryb25nPg0KWW91IHNpbXBseSBpbnN0YWxsIGl0LCBhbmQgY2hvb3NlIGl0IGluIHlvdXIgYWRtaW4gdXNlciBwcmVmZXJlbmNlcy4gTm90ZSwgdGhhdCBpZiB5b3UgdXNlIENNU21zIDEuMSBvciBhYm92ZSB5b3UgY2FuDQpzZWxlY3QgQ29kZUFyZWEgYm90aCBhcyBhIFdZU0lXWUcgYW5kIGFzIGEgc3ludGF4IGhpZ2hsaWdodGluZyBlZGl0b3IuJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMwMDIyNjM2OS4zNjkyLjgxLnV0bWNzcj1kZXYuY21zbWFkZXNpbXBsZS5vcmd8dXRtY2NuPShyZWZlcnJhbCl8dXRtY21kPXJlZmVycmFsfHV0bWNjdD0vZmVhdHVyZV9yZXF1ZXN0L2xpc3QvNic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE3OTA1MjYyMzA4NDExMDEwMC4xMjEwNDIzNTc3LjEzMDIwNDQwMTkuMTMwMjExODgyMi4zNzUzJzsKJGxhbmdbJ3FjYSddID0gJzEyMTA5NzE2OTAtMjczMDgwNzMtODE5NTI4MzInOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0NvZGVNaXJyb3IgU3ludGF4aGlnaGxpZ2h0aW5nIEVkaXRvcic7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJ0RlIENvZGVNaXJyb3IgTW9kdWxlIGlzIGdlJml1bWw7bnN0YWxsZWVyZCc7CiRsYW5nWyduZWVkcGVybWlzc2lvbiddID0gJ1UgaGVlZnQgJiMwMzk7JXMmIzAzOTsgcmVjaHRlbiBub2RpZyBvbSBkZXplIGZ1bmN0aWUgdGUgZ2VicnVpa2VuLic7CiRsYW5nWydzZXR0aW5nc3RhYiddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWydzYXZlc2V0dGluZ3MnXSA9ICdJbnN0ZWxsaW5nZW4gb3BzbGFhbic7CiRsYW5nWydzZXR0aW5nc3NhdmVkJ10gPSAnSW5zdGVsbGluZ2VuIG9wZ2VzbGFnZW4nOwokbGFuZ1snaHRtbHRlc3QnXSA9ICdIVE1MIFN5bnRheCBUZXN0JzsKJGxhbmdbJ2Nzc3Rlc3QnXSA9ICdDU1MgU3ludGF4IFRlc3QnOwokbGFuZ1sncGhwdGVzdCddID0gJ1BIUCBTeW50YXggVGVzdCc7CiRsYW5nWydqc3Rlc3QnXSA9ICdKYXZhU2NyaXB0IFN5bnRheCBUZXN0JzsKJGxhbmdbJ2V4YW1wbGVzeW50YXgnXSA9ICdTeW50YXggb20gbWVlIHRlIHRlc3Rlbic7CiRsYW5nWydjaGFuZ2UnXSA9ICdXaWp6aWcuLi4nOwokbGFuZ1snc2hvd2xpbmVudW1iZXJzJ10gPSAnUmVnZWxudW1tZXJzIHRvbmVuJzsKJGxhbmdbJ3RleHR3cmFwcGluZyddID0gJ0JyZWVrIGxhbmdlIHJlZ2VscyBhZic7CiRsYW5nWydhdXRvbWF0Y2hwYXJlbnMnXSA9ICdBdXRvbWF0aXNjaCBiaWogZWxrYWFyIGhvcmVuZGUgdGFncyBrbGV1cmVuJzsKJGxhbmdbJ3RhYmhhbmRsaW5nJ10gPSAnV2F0IHRlIGRvZW4gYmlqIGhldCBpbmRydWtrZW4gdmFuIFRBQiB0b2V0cyc7CiRsYW5nWyd0YWJkZWZhdWx0J10gPSAnTGFhdCBkZSBicm93c2VyIGhldCBiZXBhbGVuJzsKJGxhbmdbJ3RhYmluZGVudCddID0gJ01hYWsgcmVnZWwgaW5zcHJpbmdpbmcnOwokbGFuZ1sndGFic3BhY2VzJ10gPSAnVm9lZyBzcGF0aWVzIHRvZSc7CiRsYW5nWyd0YWJzaGlmdCddID0gJ3ZlcnBsYWF0c3QgbmFhciByZWNodHMsIHNoaWZ0LVRBQiB2ZXJwbGFhdHN0IG5hYXIgbGlua3MnOwokbGFuZ1snY3NzYWRkaXRpb25zJ10gPSAnQWFucGFzc2luZ2VuIGFhbiBkZSBDb2RlTWlycm9yLWNzcy4nOwokbGFuZ1snaGVscCddID0gJzxzdHJvbmc+V2hhdCBkb2VzIHRoaXMgbW9kdWxlIGRvPyA8L3N0cm9uZz4NCjxici8+DQpUaGUgQ29kZU1pcnJvciBtb2R1bGUgYWxsb3dzIHlvdSB0byBlZGl0IGNvbnRlbnQsIHRlbXBsYXRlcyBhbmQgc3R5bGVzaGVldHMgdXNpbmcgYSBzeW50YXhoaWdobGlnaHRpbmcgZWRpdG9yIGluc2lkZSB5b3VyIGJyb3dzZXIuDQpJdCBjYW4gYm90aCByZXBsYWNlIGEgd3lzaXd5Zy1tb2R1bGUsIGFuZCBhY3Qgc3RhbmRhbG9uZSBmb3IgdGVtcGxhdGUvc3R5bGVzaGVldCBlZGl0aW5nIChvbmx5IHN1cHBvcnRlZCBpbiBDTVNtcyAxLjErKQ0KPGJyLz48YnIvPg0KPHN0cm9uZz5Ib3cgZG8gSSB1c2UgdGhpcyBtb2R1bGU/PC9zdHJvbmc+DQpZb3Ugc2ltcGx5IGluc3RhbGwgaXQsIGFuZCBjaG9vc2UgaXQgaW4geW91ciBhZG1pbiB1c2VyIHByZWZlcmVuY2VzLiBOb3RlLCB0aGF0IGlmIHlvdSB1c2UgQ01TbXMgMS4xIG9yIGFib3ZlIHlvdSBjYW4NCnNlbGVjdCBDb2RlQXJlYSBib3RoIGFzIGEgV1lTSVdZRyBhbmQgYXMgYSBzeW50YXggaGlnaGxpZ2h0aW5nIGVkaXRvci4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4zMDk0ODI0MDUuMTI5NTk4NjM2OS4xMzAxMTUzNjk3LjEzMDE1NjQzNzAuMTAwJzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTMwMDczNzY0NC45NC4yNi51dG1jc3I9Zm9ydW0uY21zbWFkZXNpbXBsZS5vcmd8dXRtY2NuPShyZWZlcnJhbCl8dXRtY21kPXJlZmVycmFsfHV0bWNjdD0vdmlld3RvcGljLnBocCc7CiRsYW5nWydxY2EnXSA9ICdQMC0xMzQ2MTE5OTUzLTEyOTU5ODYzNjg5MDgnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1jJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></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[PD9waHAKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgic2hvd2xpbmVudW1iZXJzIiwxKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgidXNlYXV0b2NvbXBsZXRlIiwxKTsKICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgiYXV0b21hdGNocGFyZW5zIiwwKQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKICAvL1JlbW92ZSBvbGQgc3BlY2lmaWsgcGVybWlzc2lvbgogICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCJtb2RpZnllZGl0YXJlYXNldHRpbmdzIik7Cj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/changelog.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgogIDxsaT4yLjAuMSAtIFVwZGF0ZWQgdG8gQ00gMi4wLjE8L2xpPgogIDxsaT4yLjAgLSBVcGRhdGVkIHRvIENNIDIuMCBhbmQgcmV3b3JrZWQganVzdCBhYm91dCBldmVyeXRoaW5nIHRvIG1ha2UgdGhpcyB3b3JrPC9saT4KICA8bGk+MC4xLjkgLSBVcGRhdGVkIHRvIENNIDAuOTM8L2xpPgogIDxsaT4wLjEuOCAtIFVwZGF0ZWQgdG8gQ00gMC45LCBhZGRlZCBvcHRpb24gb24gaG93IHRvIGhhbmRsZSBUQUI8L2xpPgogIDxsaT4wLjEuNyAtIFVwZGF0ZWQgdG8gQ00gMC44MDwvbGk+CiAgPGxpPjAuMS42IC0gVXBkYXRlZCB0byBDTSAwLjcwLCBBZGRlZCBvcHRpb24gdG8gbWF0Y2ggcGFyZW50aGVzaXM8L2xpPgogIDxsaT4wLjEuNSAtIFVwZGF0ZWQgdG8gQ00gMC42NiwgcmVtb3ZlZCBhIHN0cmFuZ2UgXG4gY2hhciBmcm9tIGhlYWRlcm91dHB1dCwgbWFkZSB0YWJiaW5nIHdvcms8L2xpPgogIDxsaT4wLjEuNCAtIEZpeGVkIENQVSBob2dnaW5nIHByb2JsZW1zIGJ5IHJld3JpdGluZyB0ZXN0YXJlYS1jb2RlPC9saT4KICA8bGk+MC4xLjMgLSBVcGRhdGVkIHRvIENNIDAuNjUsIGFkZGVkIG9wdGlvbiB0byB0b2dnbGUgd29yZHdyYXA8L2xpPgogIDxsaT4wLjEuMiAtIFVwZGF0ZWQgdG8gQ00gMC42MzwvbGk+CiAgPGxpPjAuMS4xIC0gVXBkYXRlZCB0byBDTSAwLjYyLCBmaXhlZCBleGFtcGxlcyBhbmQgcHJvYmFibHkgZnVuY3Rpb25hbGl0eSBhcyB3ZWxsPC9saT4KICA8bGk+MC4xLjAgLSBJbml0aWFsIHJlbGVhc2UgPC9saT4KPC91bD4=]]></data>
	</file>
	<file>
	  <filename>/templates/codemirror2area.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZCBibGFjazsiPgo8dGV4dGFyZWEgaWQ9InskdGV4dGFyZWFpZH0iIG5hbWU9InskdGV4dGFyZWFuYW1lfSI+eyRjb250ZW50fTwvdGV4dGFyZWE+CjwvZGl2PgoKPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogIHZhciB7JHRleHRhcmVhaWR9ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3skdGV4dGFyZWFpZH0nKTsKICB2YXIgY29kZW1pcnJvcmVkaXRvcnskaWR9ID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEoeyR0ZXh0YXJlYWlkfSwge2xpdGVyYWx9e3svbGl0ZXJhbH0KICAgIGluZGVudFVuaXQgOiAyLAogICAgbW9kZSA6ICd7JG1vZGV9JywKICAgIGxpbmVOdW1iZXJzOiB7JGxpbmVudW1iZXJzfSwKICAgIHRhYk1vZGUgOiAneyR0YWJoYW5kbGluZ30nLAogICAgbWF0Y2hCcmFja2V0czogdHJ1ZQoKICB7bGl0ZXJhbH19KTt7L2xpdGVyYWx9Cjwvc2NyaXB0PgoKeyoKCntpZiAkaGVpZ2h0IT0nJ31oZWlnaHQ6ICJ7JGhlaWdodH0iLAogICAgey9pZn0KICAgIGhlaWdodDogIjM1MHB4IiwKICAgIGxpbmVOdW1iZXJzOiB7JGxpbmVudW1iZXJzfSwKICAgIHRleHRXcmFwcGluZzogeyR0ZXh0d3JhcHBpbmd9LAoKICAgIGluZGVudFVuaXQgOiAyLAogICAgYXV0b01hdGNoUGFyZW5zIDogeyRhdXRvbWF0Y2hwYXJlbnN9LAogICAgcGF0aDogInskcm9vdF91cmx9L21vZHVsZXMvQ29kZU1pcnJvci9jb2RlbWlycm9yMi9saWIvIgoqfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/settings.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHNob3dsaW5lbnVtYmVyc3RleHR9PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc2hvd2xpbmVudW1iZXJzaW5wdXR9PC9wPgoJPC9kaXY+CnsqPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGV4dHdyYXBwaW5ndGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0ZXh0d3JhcHBpbmdpbnB1dH08L3A+Cgk8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRhdXRvbWF0Y2hwYXJlbnN0ZXh0fTwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGF1dG9tYXRjaHBhcmVuc2lucHV0fTwvcD4KCTwvZGl2PgoqfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRhYmhhbmRsaW5ndGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0YWJoYW5kbGluZ2lucHV0fTwvcD4KCTwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskY3NzYWRkaXRpb25zdGV4dH08L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjc3NhZGRpdGlvbnNpbnB1dH08L3A+Cgk8L2Rpdj4KCgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
</module>
