~evanj/cms

cf66b4399de5779ca6c29f44dcfa716eeeca1dab — Evan M Jones 5 months ago c5a05d0
Feat(makefile): Improving makefile for BSD.
4 files changed, 18 insertions(+), 24 deletions(-)

M TODO
M internal/s/tmpl/js/content.js
M internal/s/tmpl/tmpls_embed.go
M makefile
M TODO => TODO +3 -3
@@ 1,6 1,6 @@
[todo]
Cache listicles.
X Allow updating of space.

[revisit] 
Fullscreen takeover for html/markdown editors.
Sidebar nav for desktop
X scrollable modal becomes unscrollable when nested modal is dismissed.
x Break cache when space is updated (only of space)

M internal/s/tmpl/js/content.js => internal/s/tmpl/js/content.js +2 -1
@@ 13,6 13,7 @@

  // HTML
  tinymce.init({ 
    end_container_on_empty_block: true,
    relative_urls: false,
    convert_urls: false,
    remove_script_host: false,


@@ 25,7 26,6 @@
    statusbar: false,
    selector: 'textarea.input-html',
    plugins: "autoresize,code",
    forced_root_block : "", /* No wrapping paragraph tag. */
    content_css: "/static/tinymce.css",
    setup: function(item) { 
      item.on('change', function() { 


@@ 36,6 36,7 @@

  // MARKDOWN
  tinymce.init({
    end_container_on_empty_block: true,
    relative_urls: false,
    convert_urls: false,
    remove_script_host: false,

M internal/s/tmpl/tmpls_embed.go => internal/s/tmpl/tmpls_embed.go +2 -2
@@ 30,7 30,7 @@ func init() {

	tmpls["html/content.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19IHwge3sgLkNvbnRlbnRUeXBlLk5hbWUgfX0gfCB7eyAoLkNvbnRlbnQuTXVzdFZhbHVlQnlOYW1lICJuYW1lIikuVmFsdWUgfX08L3RpdGxlPgo8L2hlYWQ+Cjxib2R5IGNsYXNzPSdjb250ZW50IGJnLWxpZ2h0Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLWhlYWRlciBweC0zIHB5LTMgcHQtbWQtNSBwYi1tZC00IG14LWF1dG8gdGV4dC1jZW50ZXIiPgogICAgICA8aDEgY2xhc3M9ImRpc3BsYXktNCI+e3sgKC5Db250ZW50Lk11c3RWYWx1ZUJ5TmFtZSAibmFtZSIpLlZhbHVlIH19PC9oMT4KICAgIDwvZGl2PgogICAgPGFydGljbGUgY2xhc3M9J2NvbnRhaW5lcic+CiAgICAgIDxkaXYgY2xhc3M9J3Jvdyc+CiAgICAgICAgPGRpdiBjbGFzcz0nY29sLTEyIGNvbC1sZy04IG9mZnNldC1sZy0yJz4KICAgICAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnQvdXBkYXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Y29udGVudHR5cGUgdmFsdWU9Int7IC5Db250ZW50VHlwZS5JRCB9fSIgLz4KICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Y29udGVudCB2YWx1ZT0ie3sgLkNvbnRlbnQuSUQgfX0iIC8+CgogICAgICAgICAgICB7eyByYW5nZSAkaW5kZXgsICRpdGVtIDo9IC5Db250ZW50VHlwZS5GaWVsZHMgfX0KICAgICAgICAgICAgICB7eyAkdmFsIDo9ICQuQ29udGVudC5NdXN0VmFsdWVCeU5hbWUgKCAkaXRlbS5OYW1lICkgfX0KCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCc+CiAgICAgICAgICAgICAge3sgaWYgJHZhbCB9fSAKICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSI+e3sgdGl0bGUgJHZhbC5OYW1lIH19PC9sYWJlbD4KCiAgICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlN0cmluZ1NtYWxsIiB9fQogICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY29udHJvbCIge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgcGxhY2Vob2xkZXI9Int7ICR2YWwuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiU3RyaW5nQmlnIiB9fQogICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCIge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiSW5wdXRIVE1MIiB9fQogICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCBpbnB1dC1odG1sIiB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBwbGFjZWhvbGRlcj0ie3sgJHZhbC5OYW1lIH19Ij57eyAkdmFsLlZhbHVlIH19PC90ZXh0YXJlYT4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiSW5wdXRNYXJrZG93biIgfX0KICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtbWFya2Rvd24iIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgdmFsdWU9Int7ICR2YWwuVmFsdWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIHBsYWNlaG9sZGVyPSJ7eyAkdmFsLk5hbWUgfX0iPnt7ICR2YWwuVmFsdWUgfX08L3RleHRhcmVhPgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJGaWxlIiB9fQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWZpbGUgbWItMyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgcmVxdWlyZWQgbXVsdGlwbGU9ZmFsc2UgdHlwZT0iZmlsZSIgY2xhc3M9ImZvcm0tZmlsZS1pbnB1dCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWZpbGUtbGFiZWwiIGZvcj0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19Ij4KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb3JtLWZpbGUtdGV4dCI+Q2hvb3NlIGZpbGUuLi48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9ybS1maWxlLWJ1dHRvbiI+QnJvd3NlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgJHZhbC5UeXBlICJEYXRlIiB9fQogICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY29udHJvbCIge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgcmVxdWlyZWQgdHlwZT1kYXRlIG5hbWU9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgcGxhY2Vob2xkZXI9Int7ICR2YWwuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQoKICAgICAgICAgICAgICAgIHt7IGlmIGVxICR2YWwuVHlwZSAiUmVmZXJlbmNlIiB9fQogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdyZWYtbW9kYWwnPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiB2YWx1ZT0ie3sgJHZhbC5WYWx1ZSB9fSIgbmFtZT0idmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEfX0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNtb2RhbF92YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtcmVmIHctYXV0byIgdHlwZT1idXR0b24gdmFsdWU9Int7IGlmICAkdmFsLlJlZk5hbWUgfX17eyAkdmFsLlJlZk5hbWUgfX17eyBlbHNlIH19T3Blbnt7IGVuZH19Ii8+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ibW9kYWxfdmFsdWVfdXBkYXRlX3t7ICR2YWwuVHlwZSB9fS17eyAkdmFsLklEIH19IiBkYXRhLWZvY3VzPSJmYWxzZSIgY2xhc3M9Im1vZGFsIGZhZGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9InJlZk1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSI+RmluZCBDb250ZW50IGZvciBSZWZlcmVuY2U8L2g1PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzLWlubmVyPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21vZGFsLWJvZHkgb3ZlcmZsb3ctaW5pdGlhbCc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9J2QtYmxvY2snPkNvbnRlbnQgVHlwZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9J21iLTMgZm9ybS1jb250cm9sIGlucHV0LWNvbnRlbnR0eXBlJyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBDb250ZW50IFR5cGUnIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9J2QtYmxvY2snPkNvbnRlbnQgTmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZGlzYWJsZWQgY2xhc3M9J21iLTMgZm9ybS1jb250cm9sIGlucHV0LWNvbnRlbnQnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IENvbnRlbnQgTmFtZScgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSBidG4tY2xlYXIiPkNsZWFyPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSIgZGF0YS1kaXNtaXNzLWlubmVyPSJtb2RhbCI+R288L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAgICB7eyBpZiBlcSAkdmFsLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3JlZi1tb2RhbCByZWYtbGlzdCc+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgY2xhc3M9J291dHB1dC1yZWYnIHJlcXVpcmVkIHR5cGU9aGlkZGVuIHZhbHVlPSJ7eyAkdmFsLlZhbHVlIH19IiBuYW1lPSJ2YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNtb2RhbF92YWx1ZV91cGRhdGVfe3sgJHZhbC5UeXBlIH19LXt7ICR2YWwuSUQgfX0iIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtcmVmIHctYXV0byIgdHlwZT1idXR0b24gdmFsdWU9Int7IGlmICAkdmFsLlJlZkxpc3ROYW1lcyB9fXt7ICR2YWwuUmVmTGlzdE5hbWVzIH19e3sgZWxzZSB9fU9wZW57eyBlbmR9fSIvPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vZGFsX3ZhbHVlX3VwZGF0ZV97eyAkdmFsLlR5cGUgfX0te3sgJHZhbC5JRCB9fSIgZGF0YS1mb2N1cz0iZmFsc2UiIGNsYXNzPSJtb2RhbCBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJyZWZNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiPkZpbmQgQ29udGVudCBmb3IgUmVmZXJlbmNlPC9oNT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtb2RhbC1ib2R5IG92ZXJmbG93LWluaXRpYWwnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IFR5cGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSdtYi0zIGZvcm0tY29udHJvbCBpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgQ29udGVudCBUeXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IE5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdtYi0zIGZvcm0tY29udHJvbCBpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBDb250ZW50IE5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLWNsZWFyIj5DbGVhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIj48L2Rpdj4KICAgICAgICAgICAgICB7eyBlbHNlIH19CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPnt7IHRpdGxlIC5OYW1lIH19PC9sYWJlbD4KCiAgICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiU3RyaW5nU21hbGwiIH19CiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlN0cmluZ0JpZyIgfX0KICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJmb3JtLWNvbnRyb2wiIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0SFRNTCIgfX0KICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtaHRtbCIge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHBsYWNlaG9sZGVyPSJ7eyAuTmFtZSB9fSIgPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgICAgICB7eyBpZiBlcSAuVHlwZSAiSW5wdXRNYXJrZG93biIgfX0KICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtbWFya2Rvd24iIHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZmlsZSBtYi0zIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgbXVsdGlwbGU9ZmFsc2UgdHlwZT0iZmlsZSIgY2xhc3M9ImZvcm0tZmlsZS1pbnB1dCI+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWZpbGUtbGFiZWwiIGZvcj0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19Ij4KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmb3JtLWZpbGUtdGV4dCI+Q2hvb3NlIGZpbGUuLi48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9ybS1maWxlLWJ1dHRvbiI+QnJvd3NlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkRhdGUiIH19CiAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iZm9ybS1jb250cm9sIiB7eyBpZiBlcSAkaW5kZXggMCB9fSBhdXRvZm9jdXMge3sgZW5kIH19IGlkPSJ2YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9ZGF0ZSBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZSIgfX0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ncmVmLW1vZGFsJz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQge3sgaWYgZXEgJGluZGV4IDAgfX0gYXV0b2ZvY3VzIHt7IGVuZCB9fSBpZD0idmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNtb2RhbF92YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtcmVmIHctYXV0byIgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Im1vZGFsX3ZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgZGF0YS1mb2N1cz0iZmFsc2UiIGNsYXNzPSJtb2RhbCBmYWRlIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJyZWZNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiPkZpbmQgQ29udGVudCBmb3IgUmVmZXJlbmNlPC9oNT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdtb2RhbC1ib2R5IG92ZXJmbG93LWluaXRpYWwnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IFR5cGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSdtYi0zIGZvcm0tY29udHJvbCBpbnB1dC1jb250ZW50dHlwZScgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgQ29udGVudCBUeXBlJyAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IE5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRpc2FibGVkIGNsYXNzPSdtYi0zIGZvcm0tY29udHJvbCBpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBDb250ZW50IE5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLWNsZWFyIj5DbGVhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZUxpc3QiIH19CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3JlZi1tb2RhbCByZWYtbGlzdCc+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHt7IGlmIGVxICRpbmRleCAwIH19IGF1dG9mb2N1cyB7eyBlbmQgfX0gaWQ9InZhbHVlX3VwZGF0ZV97eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgY2xhc3M9J291dHB1dC1yZWYnIHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjbW9kYWxfdmFsdWVfdXBkYXRlX3t7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0iZm9ybS1jb250cm9sIGlucHV0LXJlZiB3LWF1dG8iIHR5cGU9YnV0dG9uIHZhbHVlPU9wZW4gLz4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJtb2RhbF92YWx1ZV91cGRhdGVfe3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGRhdGEtZm9jdXM9ImZhbHNlIiBjbGFzcz0ibW9kYWwgZmFkZSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0icmVmTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1jZW50ZXJlZCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDUgY2xhc3M9Im1vZGFsLXRpdGxlIj5GaW5kIENvbnRlbnQgZm9yIFJlZmVyZW5jZTwvaDU+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3MtaW5uZXI9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbW9kYWwtYm9keSBvdmVyZmxvdy1pbml0aWFsJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0nZC1ibG9jayc+Q29udGVudCBUeXBlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0nbWItMyBmb3JtLWNvbnRyb2wgaW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IENvbnRlbnQgVHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0nZC1ibG9jayc+Q29udGVudCBOYW1lPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkaXNhYmxlZCBjbGFzcz0nbWItMyBmb3JtLWNvbnRyb2wgaW5wdXQtY29udGVudCcgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPSdTZWFyY2ggYnkgQ29udGVudCBOYW1lJyAvPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IGJ0bi1jbGVhciI+Q2xlYXI8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3MtaW5uZXI9Im1vZGFsIj5HbzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdyZWYtbW9kYWwnPgogICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYi0zIj48L2Rpdj4KICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAge3sgZW5kfX0KICAgICAgICAgICAgPGRpdiBjbGFzcz0nZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgbWItMyc+CiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPlNhdmU8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Zvcm0+CgogICAgICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudC9kZWxldGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50IHZhbHVlPSJ7eyAuQ29udGVudC5JRCB9fSIgLz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImRlbGV0ZU1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJkZWxldGVNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJkZWxldGVNb2RhbExhYmVsIj5EZWxldGUge3sgKC5Db250ZW50Lk11c3RWYWx1ZUJ5TmFtZSAibmFtZSIpLlZhbHVlIH19PC9oNT4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2xvc2U8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9hcnRpY2xlPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9fc2NyaXB0cy5odG1sIiB9fQogIDxzY3JpcHQgc3JjPSIvL3VucGtnLmNvbS90aW55bWNlQDUuMi4wL3RpbnltY2UubWluLmpzIj48L3NjcmlwdD4KICA8c2NyaXB0IHNyYz0nLy91bnBrZy5jb20vYXV0b2NvbXBsZXRlLmpzQDAuMzcuMS9kaXN0L2F1dG9jb21wbGV0ZS5taW4uanMnPjwvc2NyaXB0PgogIDxzY3JpcHQ+e3sgdGVtcGxhdGUgImpzL21haW4uanMiICQgfX08L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")

	tmpls["html/contenttype.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fSB8IHt7IC5Db250ZW50VHlwZS5OYW1lIH19PC90aXRsZT4KPC9oZWFkPgoKPGJvZHkgY2xhc3M9J2NvbnRlbnR0eXBlIGJnLWxpZ2h0Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLWhlYWRlciBweC0zIHB5LTMgcHQtbWQtNSBwYi1tZC00IG14LWF1dG8gdGV4dC1jZW50ZXIiPgogICAgICA8aDEgY2xhc3M9ImRpc3BsYXktNCI+e3suQ29udGVudFR5cGUuTmFtZX19PC9oMT4KICAgIDwvZGl2PgogICAgPGFydGljbGU+CiAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnR0eXBlL2RlbGV0ZScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJkZWxldGVNb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iZGVsZXRlTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJkZWxldGVNb2RhbExhYmVsIj5EZWxldGUge3suQ29udGVudFR5cGUuTmFtZX19PC9oNT4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2xvc2U8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij5HbzwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Zvcm0+CgogICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9jb250ZW50L25ldycgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjcmVhdGVNb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iY3JlYXRlTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtbWQgbW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJjcmVhdGVNb2RhbExhYmVsIj5DcmVhdGUgYSBuZXcge3suQ29udGVudFR5cGUuTmFtZX19IGNvbnRlbnQ8L2g1PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgICAgICAge3sgcmFuZ2UgJGluZGV4IDo9IC5Db250ZW50VHlwZS5GaWVsZHMgfX0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCBtYi0zJz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPnt7dGl0bGUgLk5hbWV9fTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlN0cmluZ1NtYWxsIiB9fQogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IHRpdGxlIC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdCaWciIH19CiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgdGl0bGUgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJJbnB1dEhUTUwiIH19CiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCBpbnB1dC1odG1sIiBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHBsYWNlaG9sZGVyPSJ7eyB0aXRsZSAuTmFtZSB9fSIgPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCBpbnB1dC1tYXJrZG93biIgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgdGl0bGUgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJGaWxlIiB9fQogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1maWxlIG1iLTMiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIG11bHRpcGxlPWZhbHNlIGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9ImZpbGUiIGNsYXNzPSJmb3JtLWZpbGUtaW5wdXQiIGlkPSJpbnB1dEdyb3VwRmlsZUFkZG9ue3sgJGluZGV4IH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWZpbGUtbGFiZWwiIGZvcj0iaW5wdXRHcm91cEZpbGVBZGRvbnt7ICRpbmRleCB9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm0tZmlsZS10ZXh0Ij5DaG9vc2UgZmlsZS4uLjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9ybS1maWxlLWJ1dHRvbiI+QnJvd3NlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkRhdGUiIH19CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT1kYXRlIG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgdGl0bGUgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZSIgfX0KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3JlZi1tb2RhbCc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjcmVmLW1vZGFsLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0iZm9ybS1jb250cm9sIGlucHV0LXJlZiB3LWF1dG8iIHR5cGU9YnV0dG9uIHZhbHVlPU9wZW4gLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWZvY3VzPSJmYWxzZSIgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJyZWYtbW9kYWwte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9InJlZk1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJyZWYtbW9kYWwtbGFiZWwte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPkZpbmQgQ29udGVudCBmb3IgUmVmZXJlbmNlPC9oNT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3MtaW5uZXI9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21vZGFsLWJvZHkgb3ZlcmZsb3ctaW5pdGlhbCc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWN0LXt7IC5UeXBlIH19LXt7IC5OYW1lIH19JyBjbGFzcz0nZC1ibG9jayc+Q29udGVudCBUeXBlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NlYXJjaC1jdC17eyAuVHlwZSB9fS17eyAuTmFtZSB9fScgY2xhc3M9J21iLTMgZm9ybS1jb250cm9sIGlucHV0LWNvbnRlbnR0eXBlJyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBDb250ZW50IFR5cGUnIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWMte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0nIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IE5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2VhcmNoLWMte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0nIGRpc2FibGVkIGNsYXNzPSdtYi0zIGZvcm0tY29udHJvbCBpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBDb250ZW50IE5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLWNsZWFyIj5DbGVhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3MtaW5uZXI9Im1vZGFsIj5HbzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2VMaXN0IiB9fQogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ncmVmLW1vZGFsIHJlZi1saXN0Jz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNyZWYtbW9kYWwte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtcmVmIHctYXV0byIgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtZm9jdXM9ImZhbHNlIiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InJlZi1tb2RhbC17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0icmVmTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9InJlZi1tb2RhbC1sYWJlbC17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSI+RmluZCBDb250ZW50IGZvciBSZWZlcmVuY2U8L2g1PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbW9kYWwtYm9keSBvdmVyZmxvdy1pbml0aWFsJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdzZWFyY2gtY3Qte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0nIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IFR5cGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2VhcmNoLWN0LXt7IC5UeXBlIH19LXt7IC5OYW1lIH19JyBjbGFzcz0nbWItMyBmb3JtLWNvbnRyb2wgaW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IENvbnRlbnQgVHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdzZWFyY2gtYy17eyAuVHlwZSB9fS17eyAuTmFtZSB9fScgY2xhc3M9J2QtYmxvY2snPkNvbnRlbnQgTmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSdzZWFyY2gtYy17eyAuVHlwZSB9fS17eyAuTmFtZSB9fScgZGlzYWJsZWQgY2xhc3M9J21iLTMgZm9ybS1jb250cm9sIGlucHV0LWNvbnRlbnQnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IENvbnRlbnQgTmFtZScgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSBidG4tY2xlYXIiPkNsZWFyPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNsb3NlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9mb3JtPgoKICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvdXBkYXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPWNvbnRlbnR0eXBlIHZhbHVlPSJ7eyAuQ29udGVudFR5cGUuSUQgfX0iIC8+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InVwZGF0ZU1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJVcGRhdGUge3suQ29udGVudFR5cGUuTmFtZX19IiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9ImNvbnRlbnR0eXBlTW9kYWxMYWJlbCI+VXBkYXRlIHt7LkNvbnRlbnRUeXBlLk5hbWV9fTwvaDU+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjb250ZW50dHlwZU5hbWUiPk5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHZhbHVlPSJ7ey5Db250ZW50VHlwZS5OYW1lfX0iIG5hbWU9bmFtZSB0eXBlPXRleHQgaWQ9ImNvbnRlbnR0eXBlTmFtZSIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iTmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICB7eyByYW5nZSAkaW5kZXgsICRpdGVtIDo9IC5Db250ZW50VHlwZS5GaWVsZHMgfX0KICAgICAgICAgICAgICAgICAgICB7eyBpZiBlcSAkaW5kZXggMCB9fQogICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0nZmlyc3QtZmllbGRzZXQnIGNsYXNzPSdjb250YWluZXItZmx1aWQgcHgtMCBtYi0zJz4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRzZXRGaXJzdCI+RmllbGRzPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9ImZpZWxkX3VwZGF0ZV9pZF97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLklEIH19IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiByZWFkb25seT0icmVhZG9ubHkiIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF91cGRhdGVfbmFtZV97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgcm93Jz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtNic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJ3LTEwMCBmb3JtLWNvbnRyb2wiIHZhbHVlPSJ7eyAuVHlwZSB9fSIgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCBuYW1lPSJmaWVsZF91cGRhdGVfdHlwZV97eyBpbmMgJGluZGV4IH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT5GaWVsZCBUeXBlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9IlN0cmluZ1NtYWxsIj5TdHJpbmcgU21hbGw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iU3RyaW5nQmlnIj5TdHJpbmcgQmlnPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IklucHV0SFRNTCI+SFRNTDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJJbnB1dE1hcmtkb3duIj5NYXJrZG93bjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJGaWxlIj5GaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IkRhdGUiPkRhdGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iUmVmZXJlbmNlIj5SZWZlcmVuY2U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iUmVmZXJlbmNlTGlzdCI+UmVmZXJlbmNlTGlzdDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLTYnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ndy0xMDAgYnRuIGJ0bi1wcmltYXJ5JyBkaXNhYmxlZCB0eXBlPWJ1dHRvbj5SZW1vdmUgRmllbGQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICB7eyBlbHNlIH19CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb250YWluZXItZmx1aWQgcHgtMCBtYi0zJz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9ImZpZWxkX3VwZGF0ZV9pZF97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLklEIH19IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0iZmllbGRfdXBkYXRlX25hbWVfe3sgaW5jICRpbmRleCB9fSIgdmFsdWU9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdmb3JtLWdyb3VwIHJvdyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLTYnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0idy0xMDAgZm9ybS1jb250cm9sIiB2YWx1ZT0ie3sgLlR5cGUgfX0iIHJlYWRvbmx5PSJyZWFkb25seSIgcmVxdWlyZWQgbmFtZT0iZmllbGRfdXBkYXRlX3R5cGVfe3sgaW5jICRpbmRleCB9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU+RmllbGQgVHlwZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0gICBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iU3RyaW5nU21hbGwiPlN0cmluZyBTbWFsbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdCaWciIH19ICAgICBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iU3RyaW5nQmlnIj5TdHJpbmcgQmlnPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIklucHV0SFRNTCIgfX0gICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJJbnB1dEhUTUwiPkhUTUw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiSW5wdXRNYXJrZG93biIgfX0gc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IklucHV0TWFya2Rvd24iPk1hcmtkb3duPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19ICAgICAgICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJGaWxlIj5GaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIkRhdGUiIH19ICAgICAgICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJEYXRlIj5EYXRlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZSIgfX0gICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJSZWZlcmVuY2UiPlJlZmVyZW5jZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2VMaXN0IiB9fSBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iUmVmZXJlbmNlTGlzdCI+UmVmZXJlbmNlTGlzdDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLTYnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ndy0xMDAgYnRuIGJ0bi1wcmltYXJ5IGJ0bi1yZW1vdmUnIHR5cGU9YnV0dG9uPlJlbW92ZSBGaWVsZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxhIGhyZWY9JyMnIGNsYXNzPSdidG4gYnRuLWxpbmsnIGlkPSdhZGQtZmllbGRidG4nPkFkZCBBbm90aGVyIEZpZWxkPC9hPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0ncm93Jz4KICAgICAgICAgIDxkaXYgY2xhc3M9J29mZnNldC1sZy0zIGNvbC1sZy02Jz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXktMyBwLTMgYmctd2hpdGUgcm91bmRlZCBzaGFkb3ctc20iPgogICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgZmxvYXQtcmlnaHQiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNjcmVhdGVNb2RhbCI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkNyZWF0ZSBhIG5ldyBjb250ZW50PC9hPgogICAgICAgICAgICAgICAgPC9zbWFsbD4KICAgICAgICAgICAgICAgIDxoNiBjbGFzcz0iYm9yZGVyLWJvdHRvbSBib3JkZXItZ3JheSBwYi0yIG1iLTAiPllvdXIge3suQ29udGVudFR5cGUuTmFtZX19IGNvbnRlbnQ8L2g2PgogICAgICAgICAgICAgIHt7IGlmIC5Db250ZW50TGlzdCB9fQogICAgICAgICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRMaXN0IH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYSB0ZXh0LW11dGVkIHB0LTMiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPScvY29udGVudC97eyAkLlNwYWNlLklEIH19L3t7ICQuQ29udGVudFR5cGUuSUQgfX0ve3sgLklEIH19JyAgY2xhc3M9ImQtYmxvY2sgbWVkaWEtYm9keSBwYi0zIG1iLTAgc21hbGwgbGgtMTI1IGJvcmRlci1ib3R0b20gYm9yZGVyLWdyYXkiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9ImQtYmxvY2sgdGV4dC1ncmF5LWRhcmsiPgogICAgICAgICAgICAgICAgICAgICAge3sgKC5NdXN0VmFsdWVCeU5hbWUgIm5hbWUiKS5WYWx1ZSB9fQogICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPgogICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgbXQtMyI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkxvYWQgbW9yZTwvYT4KICAgICAgICAgICAgICAgIDwvc21hbGw+CiAgICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyBhbGVydCBhbGVydC1wcmltYXJ5IiByb2xlPSJhbGVydCI+CiAgICAgICAgICAgICAgICAgIFlvdSBoYXZlbid0IGNyZWF0ZWQgYW55IGNvbnRlbnQgeWV0LiAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvYXJ0aWNsZT4KICAgIHt7IHRlbXBsYXRlICJodG1sL19mb290ZXIuaHRtbCIgfX0KICA8L21haW4+CiAge3sgdGVtcGxhdGUgImh0bWwvX3NjcmlwdHMuaHRtbCIgfX0KICA8c2NyaXB0IHNyYz0nLy91bnBrZy5jb20vdGlueW1jZUA1LjIuMC90aW55bWNlLm1pbi5qcyc+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Jy8vdW5wa2cuY29tL2F1dG9jb21wbGV0ZS5qc0AwLjM3LjEvZGlzdC9hdXRvY29tcGxldGUubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9tYWluLmpzIiAkIH19PC9zY3JpcHQ+CiAgPHNjcmlwdD57eyB0ZW1wbGF0ZSAianMvc3BhY2UuanMiICQgfX08L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")
	tmpls["html/contenttype.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+Cgo8aGVhZD4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZC5odG1sIiB9fQogIDx0aXRsZT5DTVMgfCB7eyAuU3BhY2UuTmFtZSB9fSB8IHt7IC5Db250ZW50VHlwZS5OYW1lIH19PC90aXRsZT4KPC9oZWFkPgoKPGJvZHkgY2xhc3M9J2NvbnRlbnR0eXBlIGJnLWxpZ2h0Jz4KICA8c3R5bGU+e3sgdGVtcGxhdGUgImNzcy9tYWluLmNzcyIgfX08L3N0eWxlPgogIDxtYWluPgogICAge3sgdGVtcGxhdGUgImh0bWwvX2hlYWRlci5odG1sIiAkIH19CiAgICA8ZGl2IGNsYXNzPSJwcmljaW5nLWhlYWRlciBweC0zIHB5LTMgcHQtbWQtNSBwYi1tZC00IG14LWF1dG8gdGV4dC1jZW50ZXIiPgogICAgICA8aDEgY2xhc3M9ImRpc3BsYXktNCI+e3suQ29udGVudFR5cGUuTmFtZX19PC9oMT4KICAgIDwvZGl2PgogICAgPGFydGljbGU+CiAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL2NvbnRlbnR0eXBlL2RlbGV0ZScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJkZWxldGVNb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iZGVsZXRlTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJkZWxldGVNb2RhbExhYmVsIj5EZWxldGUge3suQ29udGVudFR5cGUuTmFtZX19PC9oNT4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2xvc2U8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij5HbzwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Zvcm0+CgogICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9jb250ZW50L25ldycgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1jb250ZW50dHlwZSB2YWx1ZT0ie3sgLkNvbnRlbnRUeXBlLklEIH19IiAvPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjcmVhdGVNb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iY3JlYXRlTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtbGcgbW9kYWwtZGlhbG9nIG1vZGFsLWRpYWxvZy1zY3JvbGxhYmxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJjcmVhdGVNb2RhbExhYmVsIj5DcmVhdGUgYSBuZXcge3suQ29udGVudFR5cGUuTmFtZX19IGNvbnRlbnQ8L2g1PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgICAgICAge3sgcmFuZ2UgJGluZGV4IDo9IC5Db250ZW50VHlwZS5GaWVsZHMgfX0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCBtYi0zJz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPnt7dGl0bGUgLk5hbWV9fTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlN0cmluZ1NtYWxsIiB9fQogICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcGxhY2Vob2xkZXI9Int7IHRpdGxlIC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdCaWciIH19CiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgdGl0bGUgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJJbnB1dEhUTUwiIH19CiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCBpbnB1dC1odG1sIiBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHBsYWNlaG9sZGVyPSJ7eyB0aXRsZSAuTmFtZSB9fSIgPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIklucHV0TWFya2Rvd24iIH19CiAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9ImZvcm0tY29udHJvbCBpbnB1dC1tYXJrZG93biIgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT10ZXh0IG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgdGl0bGUgLk5hbWUgfX0iID48L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJGaWxlIiB9fQogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1maWxlIG1iLTMiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIG11bHRpcGxlPWZhbHNlIGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHJlcXVpcmVkIHR5cGU9ImZpbGUiIGNsYXNzPSJmb3JtLWZpbGUtaW5wdXQiIGlkPSJpbnB1dEdyb3VwRmlsZUFkZG9ue3sgJGluZGV4IH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJmb3JtLWZpbGUtbGFiZWwiIGZvcj0iaW5wdXRHcm91cEZpbGVBZGRvbnt7ICRpbmRleCB9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZvcm0tZmlsZS10ZXh0Ij5DaG9vc2UgZmlsZS4uLjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZm9ybS1maWxlLWJ1dHRvbiI+QnJvd3NlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIkRhdGUiIH19CiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImZvcm0tY29udHJvbCIgaWQ9ImNyZWF0ZS17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgcmVxdWlyZWQgdHlwZT1kYXRlIG5hbWU9Int7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBwbGFjZWhvbGRlcj0ie3sgdGl0bGUgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgICAge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZSIgfX0KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J3JlZi1tb2RhbCc+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0iY3JlYXRlLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0nb3V0cHV0LXJlZicgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT0ie3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjcmVmLW1vZGFsLXt7IC5UeXBlIH19LXt7IC5OYW1lIH19IiBjbGFzcz0iZm9ybS1jb250cm9sIGlucHV0LXJlZiB3LWF1dG8iIHR5cGU9YnV0dG9uIHZhbHVlPU9wZW4gLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBkYXRhLWZvY3VzPSJmYWxzZSIgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJyZWYtbW9kYWwte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9InJlZk1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLWNlbnRlcmVkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0ibW9kYWwtdGl0bGUiIGlkPSJyZWYtbW9kYWwtbGFiZWwte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iPkZpbmQgQ29udGVudCBmb3IgUmVmZXJlbmNlPC9oNT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3MtaW5uZXI9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J21vZGFsLWJvZHkgb3ZlcmZsb3ctaW5pdGlhbCc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWN0LXt7IC5UeXBlIH19LXt7IC5OYW1lIH19JyBjbGFzcz0nZC1ibG9jayc+Q29udGVudCBUeXBlPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9J3NlYXJjaC1jdC17eyAuVHlwZSB9fS17eyAuTmFtZSB9fScgY2xhc3M9J21iLTMgZm9ybS1jb250cm9sIGlucHV0LWNvbnRlbnR0eXBlJyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBDb250ZW50IFR5cGUnIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0nc2VhcmNoLWMte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0nIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IE5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2VhcmNoLWMte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0nIGRpc2FibGVkIGNsYXNzPSdtYi0zIGZvcm0tY29udHJvbCBpbnB1dC1jb250ZW50JyB0eXBlPXRleHQgcGxhY2Vob2xkZXI9J1NlYXJjaCBieSBDb250ZW50IE5hbWUnIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkgYnRuLWNsZWFyIj5DbGVhcjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiBkYXRhLWRpc21pc3MtaW5uZXI9Im1vZGFsIj5HbzwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICAgIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2VMaXN0IiB9fQogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ncmVmLW1vZGFsIHJlZi1saXN0Jz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSJjcmVhdGUte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSdvdXRwdXQtcmVmJyByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPSJ7eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNyZWYtbW9kYWwte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0iIGNsYXNzPSJmb3JtLWNvbnRyb2wgaW5wdXQtcmVmIHctYXV0byIgdHlwZT1idXR0b24gdmFsdWU9T3BlbiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhdGEtZm9jdXM9ImZhbHNlIiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InJlZi1tb2RhbC17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0icmVmTW9kYWxMYWJlbCIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctY2VudGVyZWQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtY29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9InJlZi1tb2RhbC1sYWJlbC17eyAuVHlwZSB9fS17eyAuTmFtZSB9fSI+RmluZCBDb250ZW50IGZvciBSZWZlcmVuY2U8L2g1PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nbW9kYWwtYm9keSBvdmVyZmxvdy1pbml0aWFsJz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdzZWFyY2gtY3Qte3sgLlR5cGUgfX0te3sgLk5hbWUgfX0nIGNsYXNzPSdkLWJsb2NrJz5Db250ZW50IFR5cGU8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBpZD0nc2VhcmNoLWN0LXt7IC5UeXBlIH19LXt7IC5OYW1lIH19JyBjbGFzcz0nbWItMyBmb3JtLWNvbnRyb2wgaW5wdXQtY29udGVudHR5cGUnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IENvbnRlbnQgVHlwZScgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSdzZWFyY2gtYy17eyAuVHlwZSB9fS17eyAuTmFtZSB9fScgY2xhc3M9J2QtYmxvY2snPkNvbnRlbnQgTmFtZTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGlkPSdzZWFyY2gtYy17eyAuVHlwZSB9fS17eyAuTmFtZSB9fScgZGlzYWJsZWQgY2xhc3M9J21iLTMgZm9ybS1jb250cm9sIGlucHV0LWNvbnRlbnQnIHR5cGU9dGV4dCBwbGFjZWhvbGRlcj0nU2VhcmNoIGJ5IENvbnRlbnQgTmFtZScgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSBidG4tY2xlYXIiPkNsZWFyPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiIGRhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNsb3NlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9mb3JtPgoKICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvdXBkYXRlJyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPWNvbnRlbnR0eXBlIHZhbHVlPSJ7eyAuQ29udGVudFR5cGUuSUQgfX0iIC8+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InVwZGF0ZU1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJVcGRhdGUge3suQ29udGVudFR5cGUuTmFtZX19IiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9ImNvbnRlbnR0eXBlTW9kYWxMYWJlbCI+VXBkYXRlIHt7LkNvbnRlbnRUeXBlLk5hbWV9fTwvaDU+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjb250ZW50dHlwZU5hbWUiPk5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHZhbHVlPSJ7ey5Db250ZW50VHlwZS5OYW1lfX0iIG5hbWU9bmFtZSB0eXBlPXRleHQgaWQ9ImNvbnRlbnR0eXBlTmFtZSIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iTmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICB7eyByYW5nZSAkaW5kZXgsICRpdGVtIDo9IC5Db250ZW50VHlwZS5GaWVsZHMgfX0KICAgICAgICAgICAgICAgICAgICB7eyBpZiBlcSAkaW5kZXggMCB9fQogICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0nZmlyc3QtZmllbGRzZXQnIGNsYXNzPSdjb250YWluZXItZmx1aWQgcHgtMCBtYi0zJz4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iZmllbGRzZXRGaXJzdCI+RmllbGRzPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9ImZpZWxkX3VwZGF0ZV9pZF97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLklEIH19IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiByZWFkb25seT0icmVhZG9ubHkiIHJlcXVpcmVkIHR5cGU9dGV4dCBuYW1lPSJmaWVsZF91cGRhdGVfbmFtZV97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLk5hbWUgfX0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2Zvcm0tZ3JvdXAgcm93Jz4KICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtNic+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJ3LTEwMCBmb3JtLWNvbnRyb2wiIHZhbHVlPSJ7eyAuVHlwZSB9fSIgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCBuYW1lPSJmaWVsZF91cGRhdGVfdHlwZV97eyBpbmMgJGluZGV4IH19Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT5GaWVsZCBUeXBlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gc2VsZWN0ZWQgdmFsdWU9IlN0cmluZ1NtYWxsIj5TdHJpbmcgU21hbGw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iU3RyaW5nQmlnIj5TdHJpbmcgQmlnPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IklucHV0SFRNTCI+SFRNTDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJJbnB1dE1hcmtkb3duIj5NYXJrZG93bjwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJGaWxlIj5GaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IkRhdGUiPkRhdGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iUmVmZXJlbmNlIj5SZWZlcmVuY2U8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iUmVmZXJlbmNlTGlzdCI+UmVmZXJlbmNlTGlzdDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLTYnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ndy0xMDAgYnRuIGJ0bi1wcmltYXJ5JyBkaXNhYmxlZCB0eXBlPWJ1dHRvbj5SZW1vdmUgRmllbGQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICB7eyBlbHNlIH19CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb250YWluZXItZmx1aWQgcHgtMCBtYi0zJz4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9ImZpZWxkX3VwZGF0ZV9pZF97eyBpbmMgJGluZGV4IH19IiB2YWx1ZT0ie3sgLklEIH19IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0iZmllbGRfdXBkYXRlX25hbWVfe3sgaW5jICRpbmRleCB9fSIgdmFsdWU9Int7IC5OYW1lIH19IiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdmb3JtLWdyb3VwIHJvdyc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLTYnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0idy0xMDAgZm9ybS1jb250cm9sIiB2YWx1ZT0ie3sgLlR5cGUgfX0iIHJlYWRvbmx5PSJyZWFkb25seSIgcmVxdWlyZWQgbmFtZT0iZmllbGRfdXBkYXRlX3R5cGVfe3sgaW5jICRpbmRleCB9fSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU+RmllbGQgVHlwZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdTbWFsbCIgfX0gICBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iU3RyaW5nU21hbGwiPlN0cmluZyBTbWFsbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJTdHJpbmdCaWciIH19ICAgICBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iU3RyaW5nQmlnIj5TdHJpbmcgQmlnPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIklucHV0SFRNTCIgfX0gICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJJbnB1dEhUTUwiPkhUTUw8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB7eyBpZiBlcSAuVHlwZSAiSW5wdXRNYXJrZG93biIgfX0gc2VsZWN0ZWQge3sgZWxzZSB9fSBkaXNhYmxlZCB7eyBlbmQgfX0gdmFsdWU9IklucHV0TWFya2Rvd24iPk1hcmtkb3duPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIkZpbGUiIH19ICAgICAgICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJGaWxlIj5GaWxlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIkRhdGUiIH19ICAgICAgICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJEYXRlIj5EYXRlPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24ge3sgaWYgZXEgLlR5cGUgIlJlZmVyZW5jZSIgfX0gICAgIHNlbGVjdGVkIHt7IGVsc2UgfX0gZGlzYWJsZWQge3sgZW5kIH19IHZhbHVlPSJSZWZlcmVuY2UiPlJlZmVyZW5jZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHt7IGlmIGVxIC5UeXBlICJSZWZlcmVuY2VMaXN0IiB9fSBzZWxlY3RlZCB7eyBlbHNlIH19IGRpc2FibGVkIHt7IGVuZCB9fSB2YWx1ZT0iUmVmZXJlbmNlTGlzdCI+UmVmZXJlbmNlTGlzdDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nY29sLTYnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ndy0xMDAgYnRuIGJ0bi1wcmltYXJ5IGJ0bi1yZW1vdmUnIHR5cGU9YnV0dG9uPlJlbW92ZSBGaWVsZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgICB7eyBlbmQgfX0KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxhIGhyZWY9JyMnIGNsYXNzPSdidG4gYnRuLWxpbmsnIGlkPSdhZGQtZmllbGRidG4nPkFkZCBBbm90aGVyIEZpZWxkPC9hPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0ncm93Jz4KICAgICAgICAgIDxkaXYgY2xhc3M9J29mZnNldC1sZy0zIGNvbC1sZy02Jz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXktMyBwLTMgYmctd2hpdGUgcm91bmRlZCBzaGFkb3ctc20iPgogICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgZmxvYXQtcmlnaHQiIGRhdGEtdG9nZ2xlPSJtb2RhbCIgZGF0YS10YXJnZXQ9IiNjcmVhdGVNb2RhbCI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkNyZWF0ZSBhIG5ldyBjb250ZW50PC9hPgogICAgICAgICAgICAgICAgPC9zbWFsbD4KICAgICAgICAgICAgICAgIDxoNiBjbGFzcz0iYm9yZGVyLWJvdHRvbSBib3JkZXItZ3JheSBwYi0yIG1iLTAiPllvdXIge3suQ29udGVudFR5cGUuTmFtZX19IGNvbnRlbnQ8L2g2PgogICAgICAgICAgICAgIHt7IGlmIC5Db250ZW50TGlzdCB9fQogICAgICAgICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRMaXN0IH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYSB0ZXh0LW11dGVkIHB0LTMiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPScvY29udGVudC97eyAkLlNwYWNlLklEIH19L3t7ICQuQ29udGVudFR5cGUuSUQgfX0ve3sgLklEIH19JyAgY2xhc3M9ImQtYmxvY2sgbWVkaWEtYm9keSBwYi0zIG1iLTAgc21hbGwgbGgtMTI1IGJvcmRlci1ib3R0b20gYm9yZGVyLWdyYXkiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9ImQtYmxvY2sgdGV4dC1ncmF5LWRhcmsiPgogICAgICAgICAgICAgICAgICAgICAge3sgKC5NdXN0VmFsdWVCeU5hbWUgIm5hbWUiKS5WYWx1ZSB9fQogICAgICAgICAgICAgICAgICAgIDwvc3Ryb25nPgogICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPSJkLWJsb2NrIHRleHQtcmlnaHQgbXQtMyI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkxvYWQgbW9yZTwvYT4KICAgICAgICAgICAgICAgIDwvc21hbGw+CiAgICAgICAgICAgICAge3sgZWxzZSB9fQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXQtMyBhbGVydCBhbGVydC1wcmltYXJ5IiByb2xlPSJhbGVydCI+CiAgICAgICAgICAgICAgICAgIFlvdSBoYXZlbid0IGNyZWF0ZWQgYW55IGNvbnRlbnQgeWV0LiAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvYXJ0aWNsZT4KICAgIHt7IHRlbXBsYXRlICJodG1sL19mb290ZXIuaHRtbCIgfX0KICA8L21haW4+CiAge3sgdGVtcGxhdGUgImh0bWwvX3NjcmlwdHMuaHRtbCIgfX0KICA8c2NyaXB0IHNyYz0nLy91bnBrZy5jb20vdGlueW1jZUA1LjIuMC90aW55bWNlLm1pbi5qcyc+PC9zY3JpcHQ+CiAgPHNjcmlwdCBzcmM9Jy8vdW5wa2cuY29tL2F1dG9jb21wbGV0ZS5qc0AwLjM3LjEvZGlzdC9hdXRvY29tcGxldGUubWluLmpzJz48L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9tYWluLmpzIiAkIH19PC9zY3JpcHQ+CiAgPHNjcmlwdD57eyB0ZW1wbGF0ZSAianMvc3BhY2UuanMiICQgfX08L3NjcmlwdD4KICA8c2NyaXB0Pnt7IHRlbXBsYXRlICJqcy9jb250ZW50LmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")

	tmpls["html/hook.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19IHwge3sgLkhvb2suVVJMIH19PC90aXRsZT4KPC9oZWFkPgo8Ym9keSBjbGFzcz0naG9vayBiZy1saWdodCc+CiAgPHN0eWxlPnt7IHRlbXBsYXRlICJjc3MvbWFpbi5jc3MiIH19PC9zdHlsZT4KICA8bWFpbj4KICAgIHt7IHRlbXBsYXRlICJodG1sL19oZWFkZXIuaHRtbCIgJCB9fQogICAgPGRpdiBjbGFzcz0icHJpY2luZy1oZWFkZXIgcHgtMyBweS0zIHB0LW1kLTUgcGItbWQtNCBteC1hdXRvIHRleHQtY2VudGVyIj4KICAgICAgPGgxIGNsYXNzPSJkaXNwbGF5LTQiPnt7IC5Ib29rLlVSTCB9fTwvaDE+CiAgICA8L2Rpdj4KICAgIDxhcnRpY2xlIGNsYXNzPWNvbnRhaW5lcj4KICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvaG9vay9kZWxldGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9aG9vayB2YWx1ZT0ie3sgLkhvb2suSUQgfX0iIC8+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9ImRlbGV0ZU1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJkZWxldGVNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9ImRlbGV0ZU1vZGFsTGFiZWwiPkRlbGV0ZSB7eyAuSG9vay5VUkwgfX08L2g1PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KICAgIDwvZGl2PgogICAge3sgdGVtcGxhdGUgImh0bWwvX2Zvb3Rlci5odG1sIiB9fQogIDwvbWFpbj4KICB7eyB0ZW1wbGF0ZSAiaHRtbC9fc2NyaXB0cy5odG1sIiB9fQogIDxzY3JpcHQ+e3sgdGVtcGxhdGUgImpzL21haW4uanMiICQgfX08L3NjcmlwdD4KPC9ib2R5Pgo8L2h0bWw+Cg==")



@@ 38,7 38,7 @@ func init() {

	tmpls["html/space.html"] = tostring("PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ZW4+CjxoZWFkPgogIHt7IHRlbXBsYXRlICJodG1sL19oZWFkLmh0bWwiIH19CiAgPHRpdGxlPkNNUyB8IHt7IC5TcGFjZS5OYW1lIH19PC90aXRsZT4KPC9oZWFkPgo8Ym9keSBjbGFzcz0nc3BhY2UgYmctbGlnaHQnPgogIDxzdHlsZT57eyB0ZW1wbGF0ZSAiY3NzL21haW4uY3NzIiB9fTwvc3R5bGU+CiAgPG1haW4+CiAgICB7eyB0ZW1wbGF0ZSAiaHRtbC9faGVhZGVyLmh0bWwiICQgfX0KICAgIDxkaXYgY2xhc3M9InByaWNpbmctaGVhZGVyIHB4LTMgcHktMyBwdC1tZC01IHBiLW1kLTQgbXgtYXV0byB0ZXh0LWNlbnRlciI+CiAgICAgIDxoMSBjbGFzcz0iZGlzcGxheS00Ij57ey5TcGFjZS5OYW1lfX08L2gxPgogICAgICA8cCBjbGFzcz0ibGVhZCI+e3suU3BhY2UuRGVzY319PC9wPgogICAgPC9kaXY+CiAgICA8YXJ0aWNsZT4KICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvY29udGVudHR5cGUvbmV3JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjcmVhdGUtY29udGVudHR5cGUiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9IkNyZWF0ZSBhIG5ldyBjb250ZW50IHR5cGUgbW9kYWwuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9ImNvbnRlbnR0eXBlTW9kYWxMYWJlbCI+Q3JlYXRlIGEgbmV3IGNvbnRlbnQgdHlwZTwvaDU+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJjb250ZW50dHlwZU5hbWUiPk5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9bmFtZSB0eXBlPXRleHQgaWQ9ImNvbnRlbnR0eXBlTmFtZSIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iTmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSdmaXJzdC1maWVsZHNldCcgY2xhc3M9J2NvbnRhaW5lci1mbHVpZCBweC0wIG1iLTMnPgogICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJmaWVsZHNldEZpcnN0Ij5GaWVsZHM8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9ImZpZWxkc2V0Rmlyc3QiIGNsYXNzPSJtYi0zIGZvcm0tY29udHJvbCIgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCB0eXBlPXRleHQgbmFtZT0iZmllbGRfbmFtZV8xIiB2YWx1ZT0ibmFtZSIgLz4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0nZm9ybS1ncm91cCByb3cnPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC02Jz4KICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9InctMTAwIGZvcm0tY29udHJvbCIgcmVhZG9ubHk9InJlYWRvbmx5IiByZXF1aXJlZCBuYW1lPSJmaWVsZF90eXBlXzEiPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPkZpZWxkIFR5cGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0iU3RyaW5nU21hbGwiPlN0cmluZyBTbWFsbDwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJTdHJpbmdCaWciPlN0cmluZyBCaWc8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iSW5wdXRIVE1MIj5IVE1MPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IklucHV0TWFya2Rvd24iPk1hcmtkb3duPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gZGlzYWJsZWQgdmFsdWU9IkZpbGUiPkZpbGU8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT0iRGF0ZSI+RGF0ZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJSZWZlcmVuY2UiPlJlZmVyZW5jZTwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPSJSZWZlcmVuY2VMaXN0Ij5SZWZlcmVuY2VMaXN0PC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtNic+CiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSd3LTEwMCBidG4gYnRuLXByaW1hcnknIGRpc2FibGVkIHR5cGU9YnV0dG9uPlJlbW92ZSBGaWVsZDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGEgaHJlZj0nIycgY2xhc3M9J2J0biBidG4tbGluaycgaWQ9J2FkZC1maWVsZGJ0bic+QWRkIEFub3RoZXIgRmllbGQ8L2E+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNsb3NlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9mb3JtPgoKICAgICAgPGZvcm0gbWV0aG9kPVBPU1QgYWN0aW9uPScvaG9vay9uZXcnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9Imhvb2tNb2RhbCIgdGFiaW5kZXg9Ii0xIiByb2xlPSJkaWFsb2ciIGFyaWEtbGFiZWxsZWRieT0iaG9va01vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9Im1vZGFsLXRpdGxlIiBpZD0iaG9va01vZGFsTGFiZWwiPkNyZWF0ZSBhIG5ldyBob29rPC9oNT4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iY2xvc2UiIGRhdGEtZGlzbWlzcz0ibW9kYWwiIGFyaWEtbGFiZWw9IkNsb3NlIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPiZ0aW1lczs8L3NwYW4+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1ib2R5Ij4KICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Imhvb2tVUkwiPlVSTDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT11cmwgdHlwZT11cmwgaWQ9Imhvb2tVUkwiIGNsYXNzPSJtYi0zIGZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9Ik11c3QgZW50ZXIgZnVsbCBVUkwgb2YgdGFyZ2V0IiByZXF1aXJlZD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2xvc2U8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij5HbzwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Zvcm0+CgogICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9zcGFjZS9jb3B5JyBlbmN0eXBlPSdtdWx0aXBhcnQvZm9ybS1kYXRhJz4KICAgICAgICA8aW5wdXQgcmVxdWlyZWQgdHlwZT1oaWRkZW4gbmFtZT1zcGFjZSB2YWx1ZT0ie3sgLlNwYWNlLklEIH19IiAvPgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsIGZhZGUiIGlkPSJjb3B5TW9kYWwiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9ImNvcHlNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9ImNvcHlNb2RhbExhYmVsIj5Db3B5IHt7LlNwYWNlLk5hbWV9fTwvaDU+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzcGFjZU5hbWUiPk5hbWU8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IG5hbWU9bmFtZSB0eXBlPXRleHQgaWQ9InNwYWNlTmFtZSIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iTmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzcGFjZURlc2MiPkRlc2NyaXB0aW9uPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPWRlc2MgdHlwZT10ZXh0IGlkPSJzcGFjZURlc2MiIGNsYXNzPSJtYi0zIGZvcm0tY29udHJvbCIgcGxhY2Vob2xkZXI9IkRlc2NyaXB0aW9uIiByZXF1aXJlZD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1mb290ZXIiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLXNlY29uZGFyeSIgZGF0YS1kaXNtaXNzPSJtb2RhbCI+Q2xvc2U8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5Ij5HbzwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Zvcm0+CgogICAgICA8Zm9ybSBtZXRob2Q9UE9TVCBhY3Rpb249Jy9zcGFjZS91cGRhdGUnIGVuY3R5cGU9J211bHRpcGFydC9mb3JtLWRhdGEnPgogICAgICAgIDxpbnB1dCByZXF1aXJlZCB0eXBlPWhpZGRlbiBuYW1lPXNwYWNlIHZhbHVlPSJ7eyAuU3BhY2UuSUQgfX0iIC8+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgZmFkZSIgaWQ9InVwZGF0ZU1vZGFsIiB0YWJpbmRleD0iLTEiIHJvbGU9ImRpYWxvZyIgYXJpYS1sYWJlbGxlZGJ5PSJ1cGRhdGVNb2RhbExhYmVsIiBhcmlhLWhpZGRlbj0idHJ1ZSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1kaWFsb2cgbW9kYWwtZGlhbG9nLXNjcm9sbGFibGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1jb250ZW50Ij4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgPGg1IGNsYXNzPSJtb2RhbC10aXRsZSIgaWQ9InVwZGF0ZU1vZGFsTGFiZWwiPlVwZGF0ZSB7ey5TcGFjZS5OYW1lfX08L2g1PgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjbG9zZSIgZGF0YS1kaXNtaXNzPSJtb2RhbCIgYXJpYS1sYWJlbD0iQ2xvc2UiPgogICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj0idHJ1ZSI+JnRpbWVzOzwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWJvZHkiPgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ic3BhY2VOYW1lIj5OYW1lPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB2YWx1ZT0ie3sgLlNwYWNlLk5hbWUgfX0iIG5hbWU9bmFtZSB0eXBlPXRleHQgaWQ9InNwYWNlTmFtZSIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iTmFtZSIgcmVxdWlyZWQ+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJzcGFjZURlc2MiPkRlc2NyaXB0aW9uPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB2YWx1ZT0ie3sgLlNwYWNlLkRlc2MgfX0iIG5hbWU9ZGVzYyB0eXBlPXRleHQgaWQ9InNwYWNlRGVzYyIgY2xhc3M9Im1iLTMgZm9ybS1jb250cm9sIiBwbGFjZWhvbGRlcj0iRGVzY3JpcHRpb24iIHJlcXVpcmVkPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImJ0biBidG4tc2Vjb25kYXJ5IiBkYXRhLWRpc21pc3M9Im1vZGFsIj5DbG9zZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXByaW1hcnkiPkdvPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZm9ybT4KICAgICAgCiAgICAgIDxmb3JtIG1ldGhvZD1QT1NUIGFjdGlvbj0nL3NwYWNlL2RlbGV0ZScgZW5jdHlwZT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc+CiAgICAgICAgPGlucHV0IHJlcXVpcmVkIHR5cGU9aGlkZGVuIG5hbWU9c3BhY2UgdmFsdWU9Int7IC5TcGFjZS5JRCB9fSIgLz4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbCBmYWRlIiBpZD0iZGVsZXRlTW9kYWwiIHRhYmluZGV4PSItMSIgcm9sZT0iZGlhbG9nIiBhcmlhLWxhYmVsbGVkYnk9ImRlbGV0ZU1vZGFsTGFiZWwiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWRpYWxvZyBtb2RhbC1kaWFsb2ctc2Nyb2xsYWJsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRlbnQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDUgY2xhc3M9Im1vZGFsLXRpdGxlIiBpZD0iZGVsZXRlTW9kYWxMYWJlbCI+RGVsZXRlIHt7LlNwYWNlLk5hbWV9fTwvaDU+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImNsb3NlIiBkYXRhLWRpc21pc3M9Im1vZGFsIiBhcmlhLWxhYmVsPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj4mdGltZXM7PC9zcGFuPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtZm9vdGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1zZWNvbmRhcnkiIGRhdGEtZGlzbWlzcz0ibW9kYWwiPkNsb3NlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSI+R288L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9mb3JtPgoKICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSdyb3cnPgogICAgICAgICAgPGRpdiBjbGFzcz0nY29sLWxnLTYnPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJteS0zIHAtMyBiZy13aGl0ZSByb3VuZGVkIHNoYWRvdy1zbSI+CiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9ImQtYmxvY2sgdGV4dC1yaWdodCBmbG9hdC1yaWdodCIgZGF0YS10b2dnbGU9Im1vZGFsIiBkYXRhLXRhcmdldD0iI2NyZWF0ZS1jb250ZW50dHlwZSI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPkNyZWF0ZSBhIG5ldyBjb250ZW50IHR5cGU8L2E+CiAgICAgICAgICAgICAgICA8L3NtYWxsPgogICAgICAgICAgICAgIDxoNiBjbGFzcz0iYm9yZGVyLWJvdHRvbSBib3JkZXItZ3JheSBwYi0yIG1iLTAiPllvdXIgY29udGVudCB0eXBlczwvaDY+CiAgICAgICAgICAgICAge3sgaWYgLkNvbnRlbnRUeXBlcyB9fQogICAgICAgICAgICAgICAge3sgcmFuZ2UgLkNvbnRlbnRUeXBlcyB9fQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVkaWEgdGV4dC1tdXRlZCBwdC0zIj4KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nL2NvbnRlbnR0eXBlL3t7ICQuU3BhY2UuSUQgfX0ve3sgLklEIH19JyAgY2xhc3M9ImQtYmxvY2sgbWVkaWEtYm9keSBwYi0zIG1iLTAgc21hbGwgbGgtMTI1IGJvcmRlci1ib3R0b20gYm9yZGVyLWdyYXkiPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmcgY2xhc3M9ImQtYmxvY2sgdGV4dC1ncmF5LWRhcmsiPnt7IC5OYW1lIH19PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9ImQtYmxvY2sgdGV4dC1yaWdodCBtdC0zIj4KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+TG9hZCBtb3JlPC9hPgogICAgICAgICAgICAgICAgPC9zbWFsbD4KICAgICAgICAgICAgICB7eyBlbHNlIH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0zIGFsZXJ0IGFsZXJ0LXByaW1hcnkiIHJvbGU9ImFsZXJ0Ij4KICAgICAgICAgICAgICAgICAgWW91IGhhdmVuJ3QgY3JlYXRlZCBhbnkgY29udGVudCB0eXBlcyB5ZXQuIAogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbGctNic+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im15LTMgcC0zIGJnLXdoaXRlIHJvdW5kZWQgc2hhZG93LXNtIj4KICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz0iZC1ibG9jayB0ZXh0LXJpZ2h0IGZsb2F0LXJpZ2h0IiBkYXRhLXRvZ2dsZT0ibW9kYWwiIGRhdGEtdGFyZ2V0PSIjaG9va01vZGFsIj4KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+Q3JlYXRlIGEgbmV3IHdlYmhvb2s8L2E+CiAgICAgICAgICAgICAgICA8L3NtYWxsPgogICAgICAgICAgICAgIDxoNiBjbGFzcz0iYm9yZGVyLWJvdHRvbSBib3JkZXItZ3JheSBwYi0yIG1iLTAiPllvdXIgd2ViaG9va3M8L2g2PgogICAgICAgICAgICAgIHt7IGlmIC5Ib29rcyB9fQogICAgICAgICAgICAgICAge3sgcmFuZ2UgLkhvb2tzIH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtZWRpYSB0ZXh0LW11dGVkIHB0LTMiPgogICAgICAgICAgICAgICAgICA8YSBocmVmPScvaG9vay97eyAkLlNwYWNlLklEIH19L3t7IC5JRCB9fScgIGNsYXNzPSJkLWJsb2NrIG1lZGlhLWJvZHkgcGItMyBtYi0wIHNtYWxsIGxoLTEyNSBib3JkZXItYm90dG9tIGJvcmRlci1ncmF5Ij4KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nIGNsYXNzPSJkLWJsb2NrIHRleHQtZ3JheS1kYXJrIj57eyAuVVJMIH19PC9zdHJvbmc+CiAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAge3sgZW5kIH19CiAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9ImQtYmxvY2sgdGV4dC1yaWdodCBtdC0zIj4KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyI+TG9hZCBtb3JlPC9hPgogICAgICAgICAgICAgICAgPC9zbWFsbD4KICAgICAgICAgICAgICB7eyBlbHNlIH19CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtdC0zIGFsZXJ0IGFsZXJ0LXByaW1hcnkiIHJvbGU9ImFsZXJ0Ij4KICAgICAgICAgICAgICAgICAgWW91IGhhdmVuJ3QgY3JlYXRlZCBhbnkgd2ViaG9va3MgeWV0LiAKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICA8L2FydGljbGU+CiAgICB7eyB0ZW1wbGF0ZSAiaHRtbC9fZm9vdGVyLmh0bWwiIH19CiAgPC9tYWluPgogIHt7IHRlbXBsYXRlICJodG1sL19zY3JpcHRzLmh0bWwiIH19CiAgPHNjcmlwdD57eyB0ZW1wbGF0ZSAianMvbWFpbi5qcyIgJCB9fTwvc2NyaXB0PgogIDxzY3JpcHQ+e3sgdGVtcGxhdGUgImpzL3NwYWNlLmpzIiAkIH19PC9zY3JpcHQ+CjwvYm9keT4KCjwvaHRtbD4K")

	tmpls["js/content.js"] = tostring("Ly8gU2V0dXAgaW5wdXRzIGZvciBjb250ZW50IGNyZWF0ZS91cGRhdGUuCihmdW5jdGlvbigpIHsgCgogIC8vIFNhdmUgYnV0dG9uIAogIHZhciBzYXZlQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdmFsdWU9U2F2ZV0nKQogIGlmIChzYXZlQnRuKSB7CiAgICBzYXZlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gY29udGVudFVwZGF0ZShlKSB7IAogICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdmb3JtW2FjdGlvbj0iL2NvbnRlbnQvdXBkYXRlIl0nKS5zdWJtaXQoKQogICAgfSkKICB9CgogIC8vIEhUTUwKICB0aW55bWNlLmluaXQoeyAKICAgIHJlbGF0aXZlX3VybHM6IGZhbHNlLAogICAgY29udmVydF91cmxzOiBmYWxzZSwKICAgIHJlbW92ZV9zY3JpcHRfaG9zdDogZmFsc2UsCiAgICBhbGxvd19zY3JpcHRfdXJsczogdHJ1ZSwKICAgIGJyb3dzZXJfc3BlbGxjaGVjazogdHJ1ZSwKICAgIGZvcmNlZF9yb290X2Jsb2NrOiBmYWxzZSwKICAgIGJyYW5kaW5nOiBmYWxzZSwKICAgIGRyYWdnYWJsZV9tb2RhbDogdHJ1ZSwKICAgIG1vYmlsZTogeyBtZW51YmFyOiB0cnVlIH0sCiAgICBzdGF0dXNiYXI6IGZhbHNlLAogICAgc2VsZWN0b3I6ICd0ZXh0YXJlYS5pbnB1dC1odG1sJywKICAgIHBsdWdpbnM6ICJhdXRvcmVzaXplLGNvZGUiLAogICAgZm9yY2VkX3Jvb3RfYmxvY2sgOiAiIiwgLyogTm8gd3JhcHBpbmcgcGFyYWdyYXBoIHRhZy4gKi8KICAgIGNvbnRlbnRfY3NzOiAiL3N0YXRpYy90aW55bWNlLmNzcyIsCiAgICBzZXR1cDogZnVuY3Rpb24oaXRlbSkgeyAKICAgICAgaXRlbS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7IAogICAgICAgIGl0ZW0udGFyZ2V0RWxtLnZhbHVlID0gaXRlbS5nZXRDb250ZW50KCkKICAgICAgfSkKICAgIH0KICB9KQoKICAvLyBNQVJLRE9XTgogIHRpbnltY2UuaW5pdCh7CiAgICByZWxhdGl2ZV91cmxzOiBmYWxzZSwKICAgIGNvbnZlcnRfdXJsczogZmFsc2UsCiAgICByZW1vdmVfc2NyaXB0X2hvc3Q6IGZhbHNlLAogICAgYWxsb3dfc2NyaXB0X3VybHM6IHRydWUsCiAgICBicm93c2VyX3NwZWxsY2hlY2s6IHRydWUsCiAgICBmb3JjZWRfcm9vdF9ibG9jazogZmFsc2UsCiAgICBicmFuZGluZzogZmFsc2UsCiAgICBkcmFnZ2FibGVfbW9kYWw6IHRydWUsCiAgICBtb2JpbGU6IHsgbWVudWJhcjogdHJ1ZSB9LAogICAgc3RhdHVzYmFyOiBmYWxzZSwKICAgIHNlbGVjdG9yOiAidGV4dGFyZWEuaW5wdXQtbWFya2Rvd24iLAogICAgcGx1Z2luOiAnYXV0b3Jlc2l6ZSx0ZXh0cGF0dGVybicsCiAgICBleHRlcm5hbF9wbHVnaW5zOiB7IAogICAgICB0ZXh0cGF0dGVybjogJy8vdW5wa2cuY29tL3RpbnltY2VANS4yLjAvcGx1Z2lucy90ZXh0cGF0dGVybi9wbHVnaW4ubWluLmpzJwogICAgfSwKICAgIG1lbnViYXI6IGZhbHNlLAogICAgdG9vbGJhcjogJ3VuZG8gcmVkbycsCiAgICBjb250ZW50X2NzczogIi9zdGF0aWMvdGlueW1jZS5jc3MiLAogICAgdGV4dHBhdHRlcm5fcGF0dGVybnM6IFsKICAgICAge3N0YXJ0OiAnKicsIGVuZDogJyonLCBmb3JtYXQ6ICdpdGFsaWMnfSwKICAgICAge3N0YXJ0OiAnKionLCBlbmQ6ICcqKicsIGZvcm1hdDogJ2JvbGQnfSwKICAgICAge3N0YXJ0OiAnXycsIGVuZDogJ18nLCBmb3JtYXQ6ICdib2xkJ30sCiAgICAgIHtzdGFydDogJyMnLCBmb3JtYXQ6ICdoMSd9LAogICAgICB7c3RhcnQ6ICcjIycsIGZvcm1hdDogJ2gyJ30sCiAgICAgIHtzdGFydDogJyMjIycsIGZvcm1hdDogJ2gzJ30sCiAgICAgIHtzdGFydDogJyMjIyMnLCBmb3JtYXQ6ICdoNCd9LAogICAgICB7c3RhcnQ6ICcjIyMjIycsIGZvcm1hdDogJ2g1J30sCiAgICAgIHtzdGFydDogJyMjIyMjIycsIGZvcm1hdDogJ2g2J30sCiAgICAgIHtzdGFydDogJzEuICcsIGNtZDogJ0luc2VydE9yZGVyZWRMaXN0J30sCiAgICAgIHtzdGFydDogJyogJywgY21kOiAnSW5zZXJ0VW5vcmRlcmVkTGlzdCd9LAogICAgICB7c3RhcnQ6ICctICcsIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnfQogICAgXSwKICAgIHNldHVwOiBmdW5jdGlvbihpdGVtKSB7IAogICAgICBpdGVtLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsgCiAgICAgICAgaXRlbS50YXJnZXRFbG0udmFsdWUgPSBpdGVtLmdldENvbnRlbnQoKQogICAgICB9KQogICAgfQogIH0pOwoKICAvLyBSRUZFUkVOQ0UgLyBSRUZFUkVOQ0UgTElTVAogIHZhciByZWZzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnJlZi1tb2RhbCcpCiAgZm9yICh2YXIgaSA9IDA7IGkgPCByZWZzLmxlbmd0aDsgaSsrKSB7IAogICAgdmFyIHJlZiAgICAgPSByZWZzW2ldOwogICAgdmFyIGlucHV0cyAgPSByZWYucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQnKTsKICAgIHZhciBvdXRwdXQgID0gaW5wdXRzWzBdOwogICAgdmFyIGJ0biAgICAgPSBpbnB1dHNbMV07CiAgICB2YXIgaW5wdXRDVCA9IGlucHV0c1syXTsKICAgIHZhciBpbnB1dEMgID0gaW5wdXRzWzNdOwogICAgdmFyIG1vZGFsICAgPSByZWYucXVlcnlTZWxlY3RvcignLm1vZGFsJyk7CiAgICB2YXIgY2xlYXIgICA9IHJlZi5xdWVyeVNlbGVjdG9yKCcuYnRuLWNsZWFyJyk7CgogICAgKGZ1bmN0aW9uKHJlZiwgb3V0cHV0LCBidG4sIGNvbnRlbnR0eXBlLCBjb250ZW50LCBtb2RhbCkgewogICAgICB2YXIgYXV0b0NUID0ge2F1dG9jb21wbGV0ZTp7ZGVzdHJveTpmdW5jdGlvbigpe319fTsKICAgICAgdmFyIGF1dG9DID0ge2F1dG9jb21wbGV0ZTp7ZGVzdHJveTpmdW5jdGlvbigpe319fTsKICAgICAgdmFyIGlzTGlzdCA9IHJlZi5jbGFzc05hbWUuaW5kZXhPZigncmVmLWxpc3QnKSAhPSAtMTsKCiAgICAgIHZhciBjaG9zZW5Db250ZW50VHlwZUlEIC8vIHVzZWQgYnkgYm90aAogICAgICB2YXIgY2hvc2VuQ29udGVudElEcyA9IFtdIC8vIG9ubHkgdXNlZCBiZSByZWYgbGlzdAogICAgICB2YXIgY2hvc2VuQ29udGVudE5hbWVzID0gW10gLy8gb25seSB1c2VkIGJlIHJlZiBsaXN0CgogICAgICBtb2RhbC5hZGRFdmVudExpc3RlbmVyKCdzaG93bi5icy5tb2RhbCcsIGZ1bmN0aW9uKCkgeyAKICAgICAgICB2YXIgb3B0cyA9IHsKICAgICAgICAgIGF1dG9zZWxlY3Q6IHRydWUsCiAgICAgICAgICBhdXRvc2VsZWN0T25CbHVyOiB0cnVlLCAKICAgICAgICAgIHRhYkF1dG9jb21wbGV0ZTogdHJ1ZSwKICAgICAgICAgIC8vIGNsZWFyT25TZWxlY3RlZDogdHJ1ZSwKICAgICAgICAgIGhpbnQ6IGZhbHNlLAogICAgICAgICAgLy8gZGVidWc6IHRydWUKICAgICAgICB9CgogICAgICAgIGZ1bmN0aW9uIGdldG9wdHModXJsLCB0cmFuc2Zvcm0sIGRpc3BsYXlLZXkpIHsgCiAgICAgICAgICB2YXIgY29udGVudHR5cGVBYm9ydCA9IGZ1bmN0aW9uKCkge30KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGRpc3BsYXlLZXk6IGRpc3BsYXlLZXksCiAgICAgICAgICAgIHNvdXJjZTogZnVuY3Rpb24ocXVlcnksIGNiKSB7IAogICAgICAgICAgICAgIGNiKFtdKQogICAgICAgICAgICAgIGNvbnRlbnR0eXBlQWJvcnQoKQogICAgICAgICAgICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKQogICAgICAgICAgICAgIGNvbnRlbnR0eXBlQWJvcnQgPSBmdW5jdGlvbigpIHsgcmVxLmFib3J0KCkgfSAKICAgICAgICAgICAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlICE9IDQpIHsKICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9IDIwMCkgewogICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZXNwb25zZVRleHQgIT0gIiIpIHsKICAgICAgICAgICAgICAgICAgICBhbGVydCh0aGlzLnJlc3BvbnNlVGV4dCkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjYihbXSkKICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdHJ5IHsgCiAgICAgICAgICAgICAgICAgIGNiKHRyYW5zZm9ybShKU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KSkpCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXRjaChlKSB7IAogICAgICAgICAgICAgICAgICB2YXIgbXNnID0gZS50b1N0cmluZygpCiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHtlLG1zZ30pCiAgICAgICAgICAgICAgICAgIGlmIChtc2cgIT0gIiIpIHsgLy8gQ2FuY2VsbGVkIHJlcXVlc3RzIGhpdCB0aGlzLgogICAgICAgICAgICAgICAgICAgIGFsZXJ0KG1zZykKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXEub3BlbignR0VUJywgdXJsKCkgKyBxdWVyeSwgdHJ1ZSkKICAgICAgICAgICAgICByZXEuc2VuZCgpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBjb250ZW50dHlwZU9wdHMgPSBnZXRvcHRzKAogICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiAnL2NvbnRlbnR0eXBlL3NlYXJjaD9zcGFjZT17eyAuU3BhY2UuSUQgfX0mcXVlcnk9JzsgfSwgCiAgICAgICAgICBmdW5jdGlvbihkYXRhKSB7IHJldHVybiBkYXRhIH0sCiAgICAgICAgICAnQ29udGVudFR5cGVOYW1lJwogICAgICAgICkKCiAgICAgICAgYXV0b0NUID0gd2luZG93LmF1dG9jb21wbGV0ZShjb250ZW50dHlwZSwgb3B0cywgW2NvbnRlbnR0eXBlT3B0c10pLm9uKCdhdXRvY29tcGxldGU6c2VsZWN0ZWQnLCBvbkNvbnRlbnRUeXBlU2VsZWN0ZWQpCiAgICAgICAgZnVuY3Rpb24gb25Db250ZW50VHlwZVNlbGVjdGVkKGUsIGl0ZW0sIGRhdGFzZXQsIGN0eCkgewogICAgICAgICAgY2hvc2VuQ29udGVudFR5cGVJRCA9IGl0ZW0uQ29udGVudFR5cGVJRAogICAgICAgICAgY29udGVudC5kaXNhYmxlZCA9IGZhbHNlCiAgICAgICAgICBjb250ZW50LmZvY3VzKCkKICAgICAgICB9CgogICAgICAgIHZhciBjb250ZW50T3B0cyA9IGdldG9wdHMoCiAgICAgICAgICBmdW5jdGlvbigpIHsgcmV0dXJuICcvY29udGVudC9zZWFyY2g/c3BhY2U9e3sgLlNwYWNlLklEIH19JmNvbnRlbnR0eXBlPScgKyBjaG9zZW5Db250ZW50VHlwZUlEICsgJyZxdWVyeT0nOyB9LCAKICAgICAgICAgIGZ1bmN0aW9uKGRhdGEpIHsgCiAgICAgICAgICAgIC8vIEJpZyBoYWNrLgogICAgICAgICAgICBkYXRhID0gZGF0YSA/IGRhdGEgOiBbXQoKICAgICAgICAgICAgLy8gVE9ETzogUmVtb3ZlIGN1cnJlbnQgY29udGVudCBmcm9tIGxpc3QgaWYgYXZhaWxhYmxlLiBUaGlzIAogICAgICAgICAgICAvLyBzaG91bGQgYmUgZG9uZSBvbiB0aGUgc2VydmVyLgogICAgICAgICAgICB7eyBpZiAuQ29udGVudCB9fQogICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkgeyByZXR1cm4gaXRlbS5Db250ZW50SUQgIT0ge3sgLkNvbnRlbnQuSUQgfX07IH0pOwogICAgICAgICAgICB7eyBlbmQgfX0KCiAgICAgICAgICAgIGlmIChpc0xpc3QpIHsKICAgICAgICAgICAgICBkYXRhID0gZGF0YS5maWx0ZXIoZnVuY3Rpb24oaXRlbSkgeyByZXR1cm4gY2hvc2VuQ29udGVudElEcy5pbmRleE9mKGl0ZW0uQ29udGVudElEKSA9PT0gLTE7IH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgeyAvLyBUaGlzIHJlc3BvbnNlIGlzIHBhZ2VkLCBkb24ndCB3b3JyeSBhYm91dCBPXjIuIE1heCBvZiAyMCBpdGVtcy4KCiAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGRhdGFbaV0uQ29udGVudFZhbHVlcy5sZW5ndGg7IGorKykgewogICAgICAgICAgICAgICAgaWYgKGRhdGFbaV0uQ29udGVudFZhbHVlc1tqXS5GaWVsZE5hbWUgPT0gIm5hbWUiKSB7IC8vIFdlJ3JlIGd1YXJhbnRlZWQgdG8gaGF2ZSB0aGlzLgogICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRhdGFbaV0sIGRhdGFbaV0uQ29udGVudFZhbHVlc1tqXSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGRhdGEKICAgICAgICAgIH0sCiAgICAgICAgICAnRmllbGRWYWx1ZScKICAgICAgICApCgogICAgICAgIC8vIFRPRE86IFdlaXJkIGJlaGF2aW9yIGhlcmUsIHdoeSBkbyBJIGhhdmUgdG8gaW5saW5lIHRoaXMgY2xlYXIgb24KICAgICAgICAvLyBzZWxlY3RlZD8gV2h5IGNhbid0IGl0IGV4aXN0cyBpbiBjb250ZW50T3B0cz8KICAgICAgICBhdXRvQyA9IHdpbmRvdy5hdXRvY29tcGxldGUoY29udGVudCwgT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge2NsZWFyT25TZWxlY3RlZDp0cnVlfSksIFtjb250ZW50T3B0c10pLm9uKCdhdXRvY29tcGxldGU6c2VsZWN0ZWQnLCBvbkNvbnRlbnRTZWxlY3RlZCkKICAgICAgICBmdW5jdGlvbiBvbkNvbnRlbnRTZWxlY3RlZChlLCBpdGVtLCBkYXRhc2V0LCBjdHgpIHsKICAgICAgICAgIGlmIChpc0xpc3QpIHsKICAgICAgICAgICAgY2hvc2VuQ29udGVudElEcy5wdXNoKGl0ZW0uQ29udGVudElEKQogICAgICAgICAgICBjaG9zZW5Db250ZW50TmFtZXMucHVzaChpdGVtLkZpZWxkVmFsdWUpCiAgICAgICAgICAgIG91dHB1dC52YWx1ZSA9IGNob3NlbkNvbnRlbnRJRHMKICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCwgaSwgc2VsZikgeyByZXR1cm4gc2VsZi5pbmRleE9mKHZhbCkgPT09IGkgfSkKICAgICAgICAgICAgICAuam9pbignLScpCiAgICAgICAgICAgIGJ0bi52YWx1ZSA9IGNob3NlbkNvbnRlbnROYW1lcwogICAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24odmFsLCBpLCBzZWxmKSB7IHJldHVybiBzZWxmLmluZGV4T2YodmFsKSA9PT0gaSB9KQogICAgICAgICAgICAgIC5qb2luKCcsICcpCiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgb3V0cHV0LnZhbHVlID0gaXRlbS5Db250ZW50SUQKICAgICAgICAgICAgYnRuLnZhbHVlID0gaXRlbS5GaWVsZFZhbHVlCiAgICAgICAgICAgIGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZShtb2RhbCkuaGlkZSgpCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KQoKICAgICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignaGlkZGVuLmJzLm1vZGFsJywgZnVuY3Rpb24oKSB7IAogICAgICAgIGlucHV0Q1QudmFsdWUgPSAnJwogICAgICAgIGF1dG9DVC5hdXRvY29tcGxldGUuZGVzdHJveSgpCiAgICAgICAgYXV0b0NUID0gZmFsc2U7CiAgICAgICAgaW5wdXRDLnZhbHVlID0gJycKICAgICAgICBpbnB1dEMuZGlzYWJsZWQgPSB0cnVlCiAgICAgICAgYXV0b0MuYXV0b2NvbXBsZXRlLmRlc3Ryb3koKQogICAgICAgIGF1dG9DID0gZmFsc2U7CiAgICAgIH0pCgogICAgICBjbGVhci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCkgeyAKICAgICAgICBpbnB1dENULnZhbHVlID0gJyc7CiAgICAgICAgaW5wdXRDLnZhbHVlID0gJyc7CiAgICAgICAgaW5wdXRDLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICBpbnB1dENULmZvY3VzKCk7CiAgICAgICAgb3V0cHV0LnZhbHVlID0gJyc7CiAgICAgICAgYnRuLnZhbHVlID0gJ09wZW4nOwogICAgICAgIGNob3NlbkNvbnRlbnRUeXBlSUQgPSB2b2lkIDA7CiAgICAgICAgY2hvc2VuQ29udGVudElEcyA9IFtdOwogICAgICAgIGNob3NlbkNvbnRlbnROYW1lcyA9IFtdOwogICAgICB9KQoKICAgIH0pKHJlZiwgb3V0cHV0LCBidG4sIGlucHV0Q1QsIGlucHV0QywgbW9kYWwsIGNsZWFyKTsKICB9Cgp9KSgpOwo=")
	tmpls["js/content.js"] = tostring("Ly8gU2V0dXAgaW5wdXRzIGZvciBjb250ZW50IGNyZWF0ZS91cGRhdGUuCihmdW5jdGlvbigpIHsgCgogIC8vIFNhdmUgYnV0dG9uIAogIHZhciBzYXZlQnRuID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW5wdXRbdmFsdWU9U2F2ZV0nKQogIGlmIChzYXZlQnRuKSB7CiAgICBzYXZlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gY29udGVudFVwZGF0ZShlKSB7IAogICAgICBlLnByZXZlbnREZWZhdWx0KCkKICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKQogICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdmb3JtW2FjdGlvbj0iL2NvbnRlbnQvdXBkYXRlIl0nKS5zdWJtaXQoKQogICAgfSkKICB9CgogIC8vIEhUTUwKICB0aW55bWNlLmluaXQoeyAKICAgIGVuZF9jb250YWluZXJfb25fZW1wdHlfYmxvY2s6IHRydWUsCiAgICByZWxhdGl2ZV91cmxzOiBmYWxzZSwKICAgIGNvbnZlcnRfdXJsczogZmFsc2UsCiAgICByZW1vdmVfc2NyaXB0X2hvc3Q6IGZhbHNlLAogICAgYWxsb3dfc2NyaXB0X3VybHM6IHRydWUsCiAgICBicm93c2VyX3NwZWxsY2hlY2s6IHRydWUsCiAgICBmb3JjZWRfcm9vdF9ibG9jazogZmFsc2UsCiAgICBicmFuZGluZzogZmFsc2UsCiAgICBkcmFnZ2FibGVfbW9kYWw6IHRydWUsCiAgICBtb2JpbGU6IHsgbWVudWJhcjogdHJ1ZSB9LAogICAgc3RhdHVzYmFyOiBmYWxzZSwKICAgIHNlbGVjdG9yOiAndGV4dGFyZWEuaW5wdXQtaHRtbCcsCiAgICBwbHVnaW5zOiAiYXV0b3Jlc2l6ZSxjb2RlIiwKICAgIGNvbnRlbnRfY3NzOiAiL3N0YXRpYy90aW55bWNlLmNzcyIsCiAgICBzZXR1cDogZnVuY3Rpb24oaXRlbSkgeyAKICAgICAgaXRlbS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7IAogICAgICAgIGl0ZW0udGFyZ2V0RWxtLnZhbHVlID0gaXRlbS5nZXRDb250ZW50KCkKICAgICAgfSkKICAgIH0KICB9KQoKICAvLyBNQVJLRE9XTgogIHRpbnltY2UuaW5pdCh7CiAgICBlbmRfY29udGFpbmVyX29uX2VtcHR5X2Jsb2NrOiB0cnVlLAogICAgcmVsYXRpdmVfdXJsczogZmFsc2UsCiAgICBjb252ZXJ0X3VybHM6IGZhbHNlLAogICAgcmVtb3ZlX3NjcmlwdF9ob3N0OiBmYWxzZSwKICAgIGFsbG93X3NjcmlwdF91cmxzOiB0cnVlLAogICAgYnJvd3Nlcl9zcGVsbGNoZWNrOiB0cnVlLAogICAgZm9yY2VkX3Jvb3RfYmxvY2s6IGZhbHNlLAogICAgYnJhbmRpbmc6IGZhbHNlLAogICAgZHJhZ2dhYmxlX21vZGFsOiB0cnVlLAogICAgbW9iaWxlOiB7IG1lbnViYXI6IHRydWUgfSwKICAgIHN0YXR1c2JhcjogZmFsc2UsCiAgICBzZWxlY3RvcjogInRleHRhcmVhLmlucHV0LW1hcmtkb3duIiwKICAgIHBsdWdpbjogJ2F1dG9yZXNpemUsdGV4dHBhdHRlcm4nLAogICAgZXh0ZXJuYWxfcGx1Z2luczogeyAKICAgICAgdGV4dHBhdHRlcm46ICcvL3VucGtnLmNvbS90aW55bWNlQDUuMi4wL3BsdWdpbnMvdGV4dHBhdHRlcm4vcGx1Z2luLm1pbi5qcycKICAgIH0sCiAgICBtZW51YmFyOiBmYWxzZSwKICAgIHRvb2xiYXI6ICd1bmRvIHJlZG8nLAogICAgY29udGVudF9jc3M6ICIvc3RhdGljL3RpbnltY2UuY3NzIiwKICAgIHRleHRwYXR0ZXJuX3BhdHRlcm5zOiBbCiAgICAgIHtzdGFydDogJyonLCBlbmQ6ICcqJywgZm9ybWF0OiAnaXRhbGljJ30sCiAgICAgIHtzdGFydDogJyoqJywgZW5kOiAnKionLCBmb3JtYXQ6ICdib2xkJ30sCiAgICAgIHtzdGFydDogJ18nLCBlbmQ6ICdfJywgZm9ybWF0OiAnYm9sZCd9LAogICAgICB7c3RhcnQ6ICcjJywgZm9ybWF0OiAnaDEnfSwKICAgICAge3N0YXJ0OiAnIyMnLCBmb3JtYXQ6ICdoMid9LAogICAgICB7c3RhcnQ6ICcjIyMnLCBmb3JtYXQ6ICdoMyd9LAogICAgICB7c3RhcnQ6ICcjIyMjJywgZm9ybWF0OiAnaDQnfSwKICAgICAge3N0YXJ0OiAnIyMjIyMnLCBmb3JtYXQ6ICdoNSd9LAogICAgICB7c3RhcnQ6ICcjIyMjIyMnLCBmb3JtYXQ6ICdoNid9LAogICAgICB7c3RhcnQ6ICcxLiAnLCBjbWQ6ICdJbnNlcnRPcmRlcmVkTGlzdCd9LAogICAgICB7c3RhcnQ6ICcqICcsIGNtZDogJ0luc2VydFVub3JkZXJlZExpc3QnfSwKICAgICAge3N0YXJ0OiAnLSAnLCBjbWQ6ICdJbnNlcnRVbm9yZGVyZWRMaXN0J30KICAgIF0sCiAgICBzZXR1cDogZnVuY3Rpb24oaXRlbSkgeyAKICAgICAgaXRlbS5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7IAogICAgICAgIGl0ZW0udGFyZ2V0RWxtLnZhbHVlID0gaXRlbS5nZXRDb250ZW50KCkKICAgICAgfSkKICAgIH0KICB9KTsKCiAgLy8gUkVGRVJFTkNFIC8gUkVGRVJFTkNFIExJU1QKICB2YXIgcmVmcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5yZWYtbW9kYWwnKQogIGZvciAodmFyIGkgPSAwOyBpIDwgcmVmcy5sZW5ndGg7IGkrKykgeyAKICAgIHZhciByZWYgICAgID0gcmVmc1tpXTsKICAgIHZhciBpbnB1dHMgID0gcmVmLnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0Jyk7CiAgICB2YXIgb3V0cHV0ICA9IGlucHV0c1swXTsKICAgIHZhciBidG4gICAgID0gaW5wdXRzWzFdOwogICAgdmFyIGlucHV0Q1QgPSBpbnB1dHNbMl07CiAgICB2YXIgaW5wdXRDICA9IGlucHV0c1szXTsKICAgIHZhciBtb2RhbCAgID0gcmVmLnF1ZXJ5U2VsZWN0b3IoJy5tb2RhbCcpOwogICAgdmFyIGNsZWFyICAgPSByZWYucXVlcnlTZWxlY3RvcignLmJ0bi1jbGVhcicpOwoKICAgIChmdW5jdGlvbihyZWYsIG91dHB1dCwgYnRuLCBjb250ZW50dHlwZSwgY29udGVudCwgbW9kYWwpIHsKICAgICAgdmFyIGF1dG9DVCA9IHthdXRvY29tcGxldGU6e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt9fX07CiAgICAgIHZhciBhdXRvQyA9IHthdXRvY29tcGxldGU6e2Rlc3Ryb3k6ZnVuY3Rpb24oKXt9fX07CiAgICAgIHZhciBpc0xpc3QgPSByZWYuY2xhc3NOYW1lLmluZGV4T2YoJ3JlZi1saXN0JykgIT0gLTE7CgogICAgICB2YXIgY2hvc2VuQ29udGVudFR5cGVJRCAvLyB1c2VkIGJ5IGJvdGgKICAgICAgdmFyIGNob3NlbkNvbnRlbnRJRHMgPSBbXSAvLyBvbmx5IHVzZWQgYmUgcmVmIGxpc3QKICAgICAgdmFyIGNob3NlbkNvbnRlbnROYW1lcyA9IFtdIC8vIG9ubHkgdXNlZCBiZSByZWYgbGlzdAoKICAgICAgbW9kYWwuYWRkRXZlbnRMaXN0ZW5lcignc2hvd24uYnMubW9kYWwnLCBmdW5jdGlvbigpIHsgCiAgICAgICAgdmFyIG9wdHMgPSB7CiAgICAgICAgICBhdXRvc2VsZWN0OiB0cnVlLAogICAgICAgICAgYXV0b3NlbGVjdE9uQmx1cjogdHJ1ZSwgCiAgICAgICAgICB0YWJBdXRvY29tcGxldGU6IHRydWUsCiAgICAgICAgICAvLyBjbGVhck9uU2VsZWN0ZWQ6IHRydWUsCiAgICAgICAgICBoaW50OiBmYWxzZSwKICAgICAgICAgIC8vIGRlYnVnOiB0cnVlCiAgICAgICAgfQoKICAgICAgICBmdW5jdGlvbiBnZXRvcHRzKHVybCwgdHJhbnNmb3JtLCBkaXNwbGF5S2V5KSB7IAogICAgICAgICAgdmFyIGNvbnRlbnR0eXBlQWJvcnQgPSBmdW5jdGlvbigpIHt9CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBkaXNwbGF5S2V5OiBkaXNwbGF5S2V5LAogICAgICAgICAgICBzb3VyY2U6IGZ1bmN0aW9uKHF1ZXJ5LCBjYikgeyAKICAgICAgICAgICAgICBjYihbXSkKICAgICAgICAgICAgICBjb250ZW50dHlwZUFib3J0KCkKICAgICAgICAgICAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCkKICAgICAgICAgICAgICBjb250ZW50dHlwZUFib3J0ID0gZnVuY3Rpb24oKSB7IHJlcS5hYm9ydCgpIH0gCiAgICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSAhPSA0KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyAhPSAyMDApIHsKICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzcG9uc2VUZXh0ICE9ICIiKSB7CiAgICAgICAgICAgICAgICAgICAgYWxlcnQodGhpcy5yZXNwb25zZVRleHQpCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgY2IoW10pCiAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRyeSB7IAogICAgICAgICAgICAgICAgICBjYih0cmFuc2Zvcm0oSlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCkpKQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2goZSkgeyAKICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9IGUudG9TdHJpbmcoKQogICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh7ZSxtc2d9KQogICAgICAgICAgICAgICAgICBpZiAobXNnICE9ICIiKSB7IC8vIENhbmNlbGxlZCByZXF1ZXN0cyBoaXQgdGhpcy4KICAgICAgICAgICAgICAgICAgICBhbGVydChtc2cpCiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmVxLm9wZW4oJ0dFVCcsIHVybCgpICsgcXVlcnksIHRydWUpCiAgICAgICAgICAgICAgcmVxLnNlbmQoKQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2YXIgY29udGVudHR5cGVPcHRzID0gZ2V0b3B0cygKICAgICAgICAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gJy9jb250ZW50dHlwZS9zZWFyY2g/c3BhY2U9e3sgLlNwYWNlLklEIH19JnF1ZXJ5PSc7IH0sIAogICAgICAgICAgZnVuY3Rpb24oZGF0YSkgeyByZXR1cm4gZGF0YSB9LAogICAgICAgICAgJ0NvbnRlbnRUeXBlTmFtZScKICAgICAgICApCgogICAgICAgIGF1dG9DVCA9IHdpbmRvdy5hdXRvY29tcGxldGUoY29udGVudHR5cGUsIG9wdHMsIFtjb250ZW50dHlwZU9wdHNdKS5vbignYXV0b2NvbXBsZXRlOnNlbGVjdGVkJywgb25Db250ZW50VHlwZVNlbGVjdGVkKQogICAgICAgIGZ1bmN0aW9uIG9uQ29udGVudFR5cGVTZWxlY3RlZChlLCBpdGVtLCBkYXRhc2V0LCBjdHgpIHsKICAgICAgICAgIGNob3NlbkNvbnRlbnRUeXBlSUQgPSBpdGVtLkNvbnRlbnRUeXBlSUQKICAgICAgICAgIGNvbnRlbnQuZGlzYWJsZWQgPSBmYWxzZQogICAgICAgICAgY29udGVudC5mb2N1cygpCiAgICAgICAgfQoKICAgICAgICB2YXIgY29udGVudE9wdHMgPSBnZXRvcHRzKAogICAgICAgICAgZnVuY3Rpb24oKSB7IHJldHVybiAnL2NvbnRlbnQvc2VhcmNoP3NwYWNlPXt7IC5TcGFjZS5JRCB9fSZjb250ZW50dHlwZT0nICsgY2hvc2VuQ29udGVudFR5cGVJRCArICcmcXVlcnk9JzsgfSwgCiAgICAgICAgICBmdW5jdGlvbihkYXRhKSB7IAogICAgICAgICAgICAvLyBCaWcgaGFjay4KICAgICAgICAgICAgZGF0YSA9IGRhdGEgPyBkYXRhIDogW10KCiAgICAgICAgICAgIC8vIFRPRE86IFJlbW92ZSBjdXJyZW50IGNvbnRlbnQgZnJvbSBsaXN0IGlmIGF2YWlsYWJsZS4gVGhpcyAKICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGRvbmUgb24gdGhlIHNlcnZlci4KICAgICAgICAgICAge3sgaWYgLkNvbnRlbnQgfX0KICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIGl0ZW0uQ29udGVudElEICE9IHt7IC5Db250ZW50LklEIH19OyB9KTsKICAgICAgICAgICAge3sgZW5kIH19CgogICAgICAgICAgICBpZiAoaXNMaXN0KSB7CiAgICAgICAgICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uKGl0ZW0pIHsgcmV0dXJuIGNob3NlbkNvbnRlbnRJRHMuaW5kZXhPZihpdGVtLkNvbnRlbnRJRCkgPT09IC0xOyB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHsgLy8gVGhpcyByZXNwb25zZSBpcyBwYWdlZCwgZG9uJ3Qgd29ycnkgYWJvdXQgT14yLiBNYXggb2YgMjAgaXRlbXMuCgogICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBkYXRhW2ldLkNvbnRlbnRWYWx1ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICAgICAgICAgIGlmIChkYXRhW2ldLkNvbnRlbnRWYWx1ZXNbal0uRmllbGROYW1lID09ICJuYW1lIikgeyAvLyBXZSdyZSBndWFyYW50ZWVkIHRvIGhhdmUgdGhpcy4KICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhW2ldLCBkYXRhW2ldLkNvbnRlbnRWYWx1ZXNbal0pCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBkYXRhCiAgICAgICAgICB9LAogICAgICAgICAgJ0ZpZWxkVmFsdWUnCiAgICAgICAgKQoKICAgICAgICAvLyBUT0RPOiBXZWlyZCBiZWhhdmlvciBoZXJlLCB3aHkgZG8gSSBoYXZlIHRvIGlubGluZSB0aGlzIGNsZWFyIG9uCiAgICAgICAgLy8gc2VsZWN0ZWQ/IFdoeSBjYW4ndCBpdCBleGlzdHMgaW4gY29udGVudE9wdHM/CiAgICAgICAgYXV0b0MgPSB3aW5kb3cuYXV0b2NvbXBsZXRlKGNvbnRlbnQsIE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtjbGVhck9uU2VsZWN0ZWQ6dHJ1ZX0pLCBbY29udGVudE9wdHNdKS5vbignYXV0b2NvbXBsZXRlOnNlbGVjdGVkJywgb25Db250ZW50U2VsZWN0ZWQpCiAgICAgICAgZnVuY3Rpb24gb25Db250ZW50U2VsZWN0ZWQoZSwgaXRlbSwgZGF0YXNldCwgY3R4KSB7CiAgICAgICAgICBpZiAoaXNMaXN0KSB7CiAgICAgICAgICAgIGNob3NlbkNvbnRlbnRJRHMucHVzaChpdGVtLkNvbnRlbnRJRCkKICAgICAgICAgICAgY2hvc2VuQ29udGVudE5hbWVzLnB1c2goaXRlbS5GaWVsZFZhbHVlKQogICAgICAgICAgICBvdXRwdXQudmFsdWUgPSBjaG9zZW5Db250ZW50SURzCiAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbih2YWwsIGksIHNlbGYpIHsgcmV0dXJuIHNlbGYuaW5kZXhPZih2YWwpID09PSBpIH0pCiAgICAgICAgICAgICAgLmpvaW4oJy0nKQogICAgICAgICAgICBidG4udmFsdWUgPSBjaG9zZW5Db250ZW50TmFtZXMKICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uKHZhbCwgaSwgc2VsZikgeyByZXR1cm4gc2VsZi5pbmRleE9mKHZhbCkgPT09IGkgfSkKICAgICAgICAgICAgICAuam9pbignLCAnKQogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG91dHB1dC52YWx1ZSA9IGl0ZW0uQ29udGVudElECiAgICAgICAgICAgIGJ0bi52YWx1ZSA9IGl0ZW0uRmllbGRWYWx1ZQogICAgICAgICAgICBib290c3RyYXAuTW9kYWwuZ2V0SW5zdGFuY2UobW9kYWwpLmhpZGUoKQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSkKCiAgICAgIG1vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2hpZGRlbi5icy5tb2RhbCcsIGZ1bmN0aW9uKCkgeyAKICAgICAgICBpbnB1dENULnZhbHVlID0gJycKICAgICAgICBhdXRvQ1QuYXV0b2NvbXBsZXRlLmRlc3Ryb3koKQogICAgICAgIGF1dG9DVCA9IGZhbHNlOwogICAgICAgIGlucHV0Qy52YWx1ZSA9ICcnCiAgICAgICAgaW5wdXRDLmRpc2FibGVkID0gdHJ1ZQogICAgICAgIGF1dG9DLmF1dG9jb21wbGV0ZS5kZXN0cm95KCkKICAgICAgICBhdXRvQyA9IGZhbHNlOwogICAgICB9KQoKICAgICAgY2xlYXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpIHsgCiAgICAgICAgaW5wdXRDVC52YWx1ZSA9ICcnOwogICAgICAgIGlucHV0Qy52YWx1ZSA9ICcnOwogICAgICAgIGlucHV0Qy5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgaW5wdXRDVC5mb2N1cygpOwogICAgICAgIG91dHB1dC52YWx1ZSA9ICcnOwogICAgICAgIGJ0bi52YWx1ZSA9ICdPcGVuJzsKICAgICAgICBjaG9zZW5Db250ZW50VHlwZUlEID0gdm9pZCAwOwogICAgICAgIGNob3NlbkNvbnRlbnRJRHMgPSBbXTsKICAgICAgICBjaG9zZW5Db250ZW50TmFtZXMgPSBbXTsKICAgICAgfSkKCiAgICB9KShyZWYsIG91dHB1dCwgYnRuLCBpbnB1dENULCBpbnB1dEMsIG1vZGFsLCBjbGVhcik7CiAgfQoKfSkoKTsK")

	tmpls["js/main.js"] = tostring("Ly8gT24gbW9kYWwgb3BlbiBhbHdheXMgZm9jdXMgZmlyc3QgaW5wdXQgb3IgY2xvc2UgYnV0dG9uLiBBbHNvLCBmaXggYm9vdHN0cmFwIAovLyBtb2RhbCBldmVudCBidWJibGluZyBzbyBuZXN0ZWQgbW9kYWxzIHdvcmsuCihmdW5jdGlvbigpIHsgCiAgdmFyIG1vZGFscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tb2RhbCcpOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbW9kYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAoZnVuY3Rpb24oaSwgaXRlbSkgeyAKICAgICAgdmFyIGV2ZW50cyA9IFsKICAgICAgICAnc2hvdy5icy5tb2RhbCcsIAogICAgICAgICdzaG93bi5icy5tb2RhbCcsIAogICAgICAgICdoaWRlLmJzLm1vZGFsJywgCiAgICAgICAgJ2hpZGRlbi5icy5tb2RhbCcsIAogICAgICAgICdoaWRlUHJldmVudGVkLmJzLm1vZGFsJwogICAgICBdOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAoZnVuY3Rpb24oaSwgaXRlbSwgZXZlbnQpIHsKICAgICAgICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgZnVuY3Rpb24oZSkgeyAKICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pKGksIGl0ZW0sIGV2ZW50c1tpXSk7CiAgICAgIH0KCiAgICAgIC8vIERvbid0IGNsb3NlIHBhcmVudCBtb2RhbHMgd2hpbGUgaW4gaW5uZXIuCiAgICAgIHZhciBjbG9zZXJzID0gaXRlbS5xdWVyeVNlbGVjdG9yQWxsKCcqW2RhdGEtZGlzbWlzcy1pbm5lcj0ibW9kYWwiXScpOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNsb3NlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAoZnVuY3Rpb24gKGksIGNsb3NlcikgewogICAgICAgICAgY2xvc2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSkgeyAKICAgICAgICAgICAgdmFyIHBhcmVudCA9IGNsb3Nlci5jbG9zZXN0KCcubW9kYWwnKTsKICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gaXRlbSkgewogICAgICAgICAgICAgIGJvb3RzdHJhcC5Nb2RhbC5nZXRJbnN0YW5jZShpdGVtKS5oaWRlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0pKGksIGNsb3NlcnNbaV0pOwogICAgICB9CgogICAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3Nob3duLmJzLm1vZGFsJywgZnVuY3Rpb24oZSkgeyAKICAgICAgICB2YXIgaW5wdXQgPSBpdGVtLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7CiAgICAgICAgdmFyIGJ1dHRvbiA9IGl0ZW0ucXVlcnlTZWxlY3RvcignYnV0dG9uJyk7CiAgICAgICAgLy8gU3R1cGlkIGhhY2suIEZvciBzb21lIHJlYXNvbiBib290c3RyYXAgaXMgbWVzc2luZyB3aXRoIHVzIGhlcmUuCiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyhpbnB1dCB8fCBidXR0b24pLmZvY3VzKCl9LCAxKTsKICAgICAgfSk7CiAgICB9KShpLCBtb2RhbHNbaV0pOwogIH0KfSkoKTsK")


M makefile => makefile +11 -18
@@ 1,31 1,24 @@
include .env
export $(shell sed 's/=.*//' .env)

BIN=cms
ENV=`cat .env`

all: vendor gen build

vendor: go.mod go.sum
	go mod tidy
	go mod vendor
	@go mod tidy
	@go mod vendor

build:
	go build -ldflags="-s -w" -o $(BIN)
	@go build -ldflags='-s -w' -o $(BIN)

gen: 
	go generate ./...
	@go generate ./...

test: 
	go test ./...

run: all
	./$(BIN)

dev: dev-server dev-client

dev-client:
	find . -type f \( -name '*.html' -o -name '*.css' -o -name '*.js' \) | entr -r sh -c "make gen"
	@go test ./...

dev-server:
	find . -type f -name '*.go' | entr -r sh -c "clear && make build && ./$(BIN)"
run: gen build
	@clear
	@env $(ENV) ./$(BIN)

dev:
	@find * -not -name '*_embed.go' | grep -E '*.(go|js|css|html)' | entr -r make run