(function() {
  /**
   * @param {Object} options
   * @return {undefined}
   */
  function Lexer(options) {
    /** @type {Array} */
    this.tokens = [];
    this.tokens.links = {};
    this.options = options || marked.defaults;
    this.rules = block.normal;
    if (this.options.gfm) {
      if (this.options.tables) {
        this.rules = block.tables;
      } else {
        this.rules = block.gfm;
      }
    }
  }
  /**
   * @param {?} links
   * @param {Object} options
   * @return {undefined}
   */
  function InlineLexer(links, options) {
    this.options = options || marked.defaults;
    this.links = links;
    this.rules = inline.normal;
    if (!this.links) {
      throw new Error("Tokens array requires a `links` property.");
    }
    if (this.options.gfm) {
      if (this.options.breaks) {
        this.rules = inline.breaks;
      } else {
        this.rules = inline.gfm;
      }
    } else {
      if (this.options.pedantic) {
        this.rules = inline.pedantic;
      }
    }
  }
  /**
   * @param {Object} options
   * @return {undefined}
   */
  function Parser(options) {
    /** @type {Array} */
    this.tokens = [];
    /** @type {null} */
    this.token = null;
    this.options = options || marked.defaults;
  }
  /**
   * @param {?} html
   * @param {boolean} encode
   * @return {?}
   */
  function escape(html, encode) {
    return html.replace(!encode ? /&(?!#?\w+;)/g : /&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#39;");
  }
  /**
   * @param {(Object|string)} regex
   * @param {string} opt
   * @return {?}
   */
  function replace(regex, opt) {
    regex = regex.source;
    opt = opt || "";
    return function self(name, val) {
      if (!name) {
        return new RegExp(regex, opt);
      }
      val = val.source || val;
      val = val.replace(/(^|[^\[])\^/g, "$1");
      regex = regex.replace(name, val);
      return self;
    };
  }
  /**
   * @return {undefined}
   */
  function noop() {
  }
  /**
   * @param {?} opt_attributes
   * @return {?}
   */
  function merge(opt_attributes) {
    /** @type {number} */
    var i = 1;
    var mixin;
    var key;
    for (;i < arguments.length;i++) {
      mixin = arguments[i];
      for (key in mixin) {
        if (Object.prototype.hasOwnProperty.call(mixin, key)) {
          opt_attributes[key] = mixin[key];
        }
      }
    }
    return opt_attributes;
  }
  /**
   * @param {string} src
   * @param {Object} opt
   * @return {?}
   */
  function marked(src, opt) {
    try {
      if (opt) {
        opt = merge({}, marked.defaults, opt);
      }
      return Parser.parse(Lexer.lex(src, opt), opt);
    } catch (ex) {
      ex.message += "\nPlease report this to https://github.com/chjj/marked.";
      if ((opt || marked.defaults).silent) {
        return "An error occured:\n" + ex.message;
      }
      throw ex;
    }
  }
  var block = {
    newline : /^\n+/,
    code : /^( {4}[^\n]+\n*)+/,
    /** @type {function (): undefined} */
    fences : noop,
    hr : /^( *[-*_]){3,} *(?:\n+|$)/,
    heading : /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
    /** @type {function (): undefined} */
    nptable : noop,
    lheading : /^([^\n]+)\n *(=|-){3,} *\n*/,
    blockquote : /^( *>[^\n]+(\n[^\n]+)*\n*)+/,
    list : /^( *)(bull) [\s\S]+?(?:hr|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
    html : /^ *(?:comment|closed|closing) *(?:\n{2,}|\s*$)/,
    def : /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
    /** @type {function (): undefined} */
    table : noop,
    paragraph : /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
    text : /^[^\n]+/
  };
  /** @type {RegExp} */
  block.bullet = /(?:[*+-]|\d+\.)/;
  /** @type {RegExp} */
  block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
  block.item = replace(block.item, "gm")(/bull/g, block.bullet)();
  block.list = replace(block.list)(/bull/g, block.bullet)("hr", /\n+(?=(?: *[-*_]){3,} *(?:\n+|$))/)();
  /** @type {string} */
  block._tag = "(?!(?:" + "a|em|strong|small|s|cite|q|dfn|abbr|data|time|code" + "|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo" + "|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|@)\\b";
  block.html = replace(block.html)("comment", /\x3c!--[\s\S]*?--\x3e/)("closed", /<(tag)[\s\S]+?<\/\1>/)("closing", /<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)(/tag/g, block._tag)();
  block.paragraph = replace(block.paragraph)("hr", block.hr)("heading", block.heading)("lheading", block.lheading)("blockquote", block.blockquote)("tag", "<" + block._tag)("def", block.def)();
  block.normal = merge({}, block);
  block.gfm = merge({}, block.normal, {
    fences : /^ *(`{3,}|~{3,}) *(\w+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,
    paragraph : /^/
  });
  block.gfm.paragraph = replace(block.paragraph)("(?!", "(?!" + block.gfm.fences.source.replace("\\1", "\\2") + "|")();
  block.tables = merge({}, block.gfm, {
    nptable : /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,
    table : /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
  });
  Lexer.rules = block;
  /**
   * @param {string} src
   * @param {string} options
   * @return {?}
   */
  Lexer.lex = function(src, options) {
    var lexer = new Lexer(options);
    return lexer.lex(src);
  };
  /**
   * @param {string} src
   * @return {?}
   */
  Lexer.prototype.lex = function(src) {
    src = src.replace(/\r\n|\r/g, "\n").replace(/\t/g, "    ").replace(/\u00a0/g, " ").replace(/\u2424/g, "\n");
    return this.token(src, true);
  };
  /**
   * @param {?} src
   * @param {boolean} top
   * @return {?}
   */
  Lexer.prototype.token = function(src, top) {
    src = src.replace(/^ +$/gm, "");
    var next;
    var loose;
    var cap;
    var val;
    var skip;
    var item;
    var space;
    var i;
    var l;
    for (;src;) {
      if (cap = this.rules.newline.exec(src)) {
        src = src.substring(cap[0].length);
        if (cap[0].length > 1) {
          this.tokens.push({
            type : "space"
          });
        }
      }
      if (cap = this.rules.code.exec(src)) {
        src = src.substring(cap[0].length);
        cap = cap[0].replace(/^ {4}/gm, "");
        this.tokens.push({
          type : "code",
          text : !this.options.pedantic ? cap.replace(/\n+$/, "") : cap
        });
        continue;
      }
      if (cap = this.rules.fences.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "code",
          lang : cap[2],
          text : cap[3]
        });
        continue;
      }
      if (cap = this.rules.heading.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "heading",
          depth : cap[1].length,
          text : cap[2]
        });
        continue;
      }
      if (top && (cap = this.rules.nptable.exec(src))) {
        src = src.substring(cap[0].length);
        item = {
          type : "table",
          header : cap[1].replace(/^ *| *\| *$/g, "").split(/ *\| */),
          align : cap[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
          cells : cap[3].replace(/\n$/, "").split("\n")
        };
        /** @type {number} */
        i = 0;
        for (;i < item.align.length;i++) {
          if (/^ *-+: *$/.test(item.align[i])) {
            /** @type {string} */
            item.align[i] = "right";
          } else {
            if (/^ *:-+: *$/.test(item.align[i])) {
              /** @type {string} */
              item.align[i] = "center";
            } else {
              if (/^ *:-+ *$/.test(item.align[i])) {
                /** @type {string} */
                item.align[i] = "left";
              } else {
                /** @type {null} */
                item.align[i] = null;
              }
            }
          }
        }
        /** @type {number} */
        i = 0;
        for (;i < item.cells.length;i++) {
          item.cells[i] = item.cells[i].split(/ *\| */);
        }
        this.tokens.push(item);
        continue;
      }
      if (cap = this.rules.lheading.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "heading",
          depth : cap[2] === "=" ? 1 : 2,
          text : cap[1]
        });
        continue;
      }
      if (cap = this.rules.hr.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "hr"
        });
        continue;
      }
      if (cap = this.rules.blockquote.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "blockquote_start"
        });
        cap = cap[0].replace(/^ *> ?/gm, "");
        this.token(cap, top);
        this.tokens.push({
          type : "blockquote_end"
        });
        continue;
      }
      if (cap = this.rules.list.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "list_start",
          ordered : isFinite(cap[2])
        });
        cap = cap[0].match(this.rules.item);
        if (this.options.smartLists) {
          /** @type {string} */
          val = block.bullet.exec(cap[0])[0];
        }
        /** @type {boolean} */
        next = false;
        l = cap.length;
        /** @type {number} */
        i = 0;
        for (;i < l;i++) {
          item = cap[i];
          space = item.length;
          item = item.replace(/^ *([*+-]|\d+\.) +/, "");
          if (~item.indexOf("\n ")) {
            space -= item.length;
            item = !this.options.pedantic ? item.replace(new RegExp("^ {1," + space + "}", "gm"), "") : item.replace(/^ {1,4}/gm, "");
          }
          if (this.options.smartLists && i !== l - 1) {
            /** @type {string} */
            skip = block.bullet.exec(cap[i + 1])[0];
            if (val !== skip && !(val[1] === "." && skip[1] === ".")) {
              src = cap.slice(i + 1).join("\n") + src;
              /** @type {number} */
              i = l - 1;
            }
          }
          /** @type {boolean} */
          loose = next || /\n\n(?!\s*$)/.test(item);
          if (i !== l - 1) {
            /** @type {boolean} */
            next = item[item.length - 1] === "\n";
            if (!loose) {
              /** @type {boolean} */
              loose = next;
            }
          }
          this.tokens.push({
            type : loose ? "loose_item_start" : "list_item_start"
          });
          this.token(item, false);
          this.tokens.push({
            type : "list_item_end"
          });
        }
        this.tokens.push({
          type : "list_end"
        });
        continue;
      }
      if (cap = this.rules.html.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : this.options.sanitize ? "paragraph" : "html",
          pre : cap[1] === "pre",
          text : cap[0]
        });
        continue;
      }
      if (top && (cap = this.rules.def.exec(src))) {
        src = src.substring(cap[0].length);
        this.tokens.links[cap[1].toLowerCase()] = {
          href : cap[2],
          title : cap[3]
        };
        continue;
      }
      if (top && (cap = this.rules.table.exec(src))) {
        src = src.substring(cap[0].length);
        item = {
          type : "table",
          header : cap[1].replace(/^ *| *\| *$/g, "").split(/ *\| */),
          align : cap[2].replace(/^ *|\| *$/g, "").split(/ *\| */),
          cells : cap[3].replace(/(?: *\| *)?\n$/, "").split("\n")
        };
        /** @type {number} */
        i = 0;
        for (;i < item.align.length;i++) {
          if (/^ *-+: *$/.test(item.align[i])) {
            /** @type {string} */
            item.align[i] = "right";
          } else {
            if (/^ *:-+: *$/.test(item.align[i])) {
              /** @type {string} */
              item.align[i] = "center";
            } else {
              if (/^ *:-+ *$/.test(item.align[i])) {
                /** @type {string} */
                item.align[i] = "left";
              } else {
                /** @type {null} */
                item.align[i] = null;
              }
            }
          }
        }
        /** @type {number} */
        i = 0;
        for (;i < item.cells.length;i++) {
          item.cells[i] = item.cells[i].replace(/^ *\| *| *\| *$/g, "").split(/ *\| */);
        }
        this.tokens.push(item);
        continue;
      }
      if (top && (cap = this.rules.paragraph.exec(src))) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "paragraph",
          text : cap[1][cap[1].length - 1] === "\n" ? cap[1].slice(0, -1) : cap[1]
        });
        continue;
      }
      if (cap = this.rules.text.exec(src)) {
        src = src.substring(cap[0].length);
        this.tokens.push({
          type : "text",
          text : cap[0]
        });
        continue;
      }
      if (src) {
        throw new Error("Infinite loop on byte: " + src.charCodeAt(0));
      }
    }
    return this.tokens;
  };
  var inline = {
    escape : /^\\([\\`*{}\[\]()#+\-.!_>])/,
    autolink : /^<([^ >]+(@|:\/)[^ >]+)>/,
    /** @type {function (): undefined} */
    url : noop,
    tag : /^\x3c!--[\s\S]*?--\x3e|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
    link : /^!?\[(inside)\]\(href\)/,
    reflink : /^!?\[(inside)\]\s*\[([^\]]*)\]/,
    nolink : /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
    strong : /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
    em : /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
    code : /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
    br : /^ {2,}\n(?!\s*$)/,
    /** @type {function (): undefined} */
    del : noop,
    text : /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
  };
  /** @type {RegExp} */
  inline._inside = /(?:\[[^\]]*\]|[^\]]|\](?=[^\[]*\]))*/;
  /** @type {RegExp} */
  inline._href = /\s*<?([^\s]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;
  inline.link = replace(inline.link)("inside", inline._inside)("href", inline._href)();
  inline.reflink = replace(inline.reflink)("inside", inline._inside)();
  inline.normal = merge({}, inline);
  inline.pedantic = merge({}, inline.normal, {
    strong : /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
    em : /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
  });
  inline.gfm = merge({}, inline.normal, {
    escape : replace(inline.escape)("])", "~|])")(),
    url : /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,
    del : /^~~(?=\S)([\s\S]*?\S)~~/,
    text : replace(inline.text)("]|", "~]|")("|", "|https?://|")()
  });
  inline.breaks = merge({}, inline.gfm, {
    br : replace(inline.br)("{2,}", "*")(),
    text : replace(inline.gfm.text)("{2,}", "*")()
  });
  InlineLexer.rules = inline;
  /**
   * @param {?} src
   * @param {Array} links
   * @param {Array} options
   * @return {?}
   */
  InlineLexer.output = function(src, links, options) {
    var inline = new InlineLexer(links, options);
    return inline.output(src);
  };
  /**
   * @param {?} src
   * @return {?}
   */
  InlineLexer.prototype.output = function(src) {
    /** @type {string} */
    var out = "";
    var link;
    var text;
    var href;
    var cap;
    for (;src;) {
      if (cap = this.rules.escape.exec(src)) {
        src = src.substring(cap[0].length);
        out += cap[1];
        continue;
      }
      if (cap = this.rules.autolink.exec(src)) {
        src = src.substring(cap[0].length);
        if (cap[2] === "@") {
          text = cap[1][6] === ":" ? this.mangle(cap[1].substring(7)) : this.mangle(cap[1]);
          href = this.mangle("mailto:") + text;
        } else {
          text = escape(cap[1]);
          href = text;
        }
        out += '<a href="' + href + '">' + text + "</a>";
        continue;
      }
      if (cap = this.rules.url.exec(src)) {
        src = src.substring(cap[0].length);
        text = escape(cap[1]);
        href = text;
        out += '<a href="' + href + '">' + text + "</a>";
        continue;
      }
      if (cap = this.rules.tag.exec(src)) {
        src = src.substring(cap[0].length);
        out += this.options.sanitize ? escape(cap[0]) : cap[0];
        continue;
      }
      if (cap = this.rules.link.exec(src)) {
        src = src.substring(cap[0].length);
        out += this.outputLink(cap, {
          href : cap[2],
          title : cap[3]
        });
        continue;
      }
      if ((cap = this.rules.reflink.exec(src)) || (cap = this.rules.nolink.exec(src))) {
        src = src.substring(cap[0].length);
        link = (cap[2] || cap[1]).replace(/\s+/g, " ");
        link = this.links[link.toLowerCase()];
        if (!link || !link.href) {
          out += cap[0][0];
          src = cap[0].substring(1) + src;
          continue;
        }
        out += this.outputLink(cap, link);
        continue;
      }
      if (cap = this.rules.strong.exec(src)) {
        src = src.substring(cap[0].length);
        out += "<strong>" + this.output(cap[2] || cap[1]) + "</strong>";
        continue;
      }
      if (cap = this.rules.em.exec(src)) {
        src = src.substring(cap[0].length);
        out += "<em>" + this.output(cap[2] || cap[1]) + "</em>";
        continue;
      }
      if (cap = this.rules.code.exec(src)) {
        src = src.substring(cap[0].length);
        out += "<code>" + escape(cap[2], true) + "</code>";
        continue;
      }
      if (cap = this.rules.br.exec(src)) {
        src = src.substring(cap[0].length);
        out += "<br>";
        continue;
      }
      if (cap = this.rules.del.exec(src)) {
        src = src.substring(cap[0].length);
        out += "<del>" + this.output(cap[1]) + "</del>";
        continue;
      }
      if (cap = this.rules.text.exec(src)) {
        src = src.substring(cap[0].length);
        out += escape(cap[0]);
        continue;
      }
      if (src) {
        throw new Error("Infinite loop on byte: " + src.charCodeAt(0));
      }
    }
    return out;
  };
  /**
   * @param {Array} cap
   * @param {Element} link
   * @return {?}
   */
  InlineLexer.prototype.outputLink = function(cap, link) {
    if (cap[0][0] !== "!") {
      return'<a href="' + escape(link.href) + '"' + (link.title ? ' title="' + escape(link.title) + '"' : "") + ">" + this.output(cap[1]) + "</a>";
    } else {
      return'<img src="' + escape(link.href) + '" alt="' + escape(cap[1]) + '"' + (link.title ? ' title="' + escape(link.title) + '"' : "") + ">";
    }
  };
  /**
   * @param {string} text
   * @return {?}
   */
  InlineLexer.prototype.mangle = function(text) {
    /** @type {string} */
    var out = "";
    var l = text.length;
    /** @type {number} */
    var i = 0;
    var ch;
    for (;i < l;i++) {
      ch = text.charCodeAt(i);
      if (Math.random() > 0.5) {
        ch = "x" + ch.toString(16);
      }
      out += "&#" + ch + ";";
    }
    return out;
  };
  /**
   * @param {string} resp
   * @param {string} options
   * @return {?}
   */
  Parser.parse = function(resp, options) {
    var model = new Parser(options);
    return model.parse(resp);
  };
  /**
   * @param {Object} src
   * @return {?}
   */
  Parser.prototype.parse = function(src) {
    this.inline = new InlineLexer(src.links, this.options);
    this.tokens = src.reverse();
    /** @type {string} */
    var out = "";
    for (;this.next();) {
      out += this.tok();
    }
    return out;
  };
  /**
   * @return {?}
   */
  Parser.prototype.next = function() {
    return this.token = this.tokens.pop();
  };
  /**
   * @return {?}
   */
  Parser.prototype.peek = function() {
    return this.tokens[this.tokens.length - 1] || 0;
  };
  /**
   * @return {?}
   */
  Parser.prototype.parseText = function() {
    var body = this.token.text;
    for (;this.peek().type === "text";) {
      body += "\n" + this.next().text;
    }
    return this.inline.output(body);
  };
  /**
   * @return {?}
   */
  Parser.prototype.tok = function() {
    switch(this.token.type) {
      case "space":
        return "";
      case "hr":
        return "<hr>\n";
      case "heading":
        return "<h" + this.token.depth + ">" + this.inline.output(this.token.text) + "</h" + this.token.depth + ">\n";
      case "code":
        if (this.options.highlight) {
          var code = this.options.highlight(this.token.text, this.token.lang);
          if (code != null && code !== this.token.text) {
            /** @type {boolean} */
            this.token.escaped = true;
            this.token.text = code;
          }
        }
        if (!this.token.escaped) {
          this.token.text = escape(this.token.text, true);
        }
        return "<pre><code" + (this.token.lang ? ' class="' + this.options.langPrefix + this.token.lang + '"' : "") + ">" + this.token.text + "</code></pre>\n";
      case "table":
        /** @type {string} */
        var expires = "";
        var heading;
        var i;
        var row;
        var cell;
        var j;
        expires += "<thead>\n<tr>\n";
        /** @type {number} */
        i = 0;
        for (;i < this.token.header.length;i++) {
          heading = this.inline.output(this.token.header[i]);
          expires += this.token.align[i] ? '<th align="' + this.token.align[i] + '">' + heading + "</th>\n" : "<th>" + heading + "</th>\n";
        }
        expires += "</tr>\n</thead>\n";
        expires += "<tbody>\n";
        /** @type {number} */
        i = 0;
        for (;i < this.token.cells.length;i++) {
          row = this.token.cells[i];
          expires += "<tr>\n";
          /** @type {number} */
          j = 0;
          for (;j < row.length;j++) {
            cell = this.inline.output(row[j]);
            expires += this.token.align[j] ? '<td align="' + this.token.align[j] + '">' + cell + "</td>\n" : "<td>" + cell + "</td>\n";
          }
          expires += "</tr>\n";
        }
        expires += "</tbody>\n";
        return "<table>\n" + expires + "</table>\n";
      case "blockquote_start":
        /** @type {string} */
        expires = "";
        for (;this.next().type !== "blockquote_end";) {
          expires += this.tok();
        }
        return "<blockquote>\n" + expires + "</blockquote>\n";
      case "list_start":
        /** @type {string} */
        var type = this.token.ordered ? "ol" : "ul";
        /** @type {string} */
        expires = "";
        for (;this.next().type !== "list_end";) {
          expires += this.tok();
        }
        return "<" + type + ">\n" + expires + "</" + type + ">\n";
      case "list_item_start":
        /** @type {string} */
        expires = "";
        for (;this.next().type !== "list_item_end";) {
          expires += this.token.type === "text" ? this.parseText() : this.tok();
        }
        return "<li>" + expires + "</li>\n";
      case "loose_item_start":
        /** @type {string} */
        expires = "";
        for (;this.next().type !== "list_item_end";) {
          expires += this.tok();
        }
        return "<li>" + expires + "</li>\n";
      case "html":
        return!this.token.pre && !this.options.pedantic ? this.inline.output(this.token.text) : this.token.text;
      case "paragraph":
        return "<p>" + this.inline.output(this.token.text) + "</p>\n";
      case "text":
        return "<p>" + this.parseText() + "</p>\n";
    }
  };
  /** @type {function (): undefined} */
  noop.exec = noop;
  /** @type {function (?): ?} */
  marked.options = marked.setOptions = function(opt) {
    merge(marked.defaults, opt);
    return marked;
  };
  marked.defaults = {
    gfm : true,
    tables : true,
    breaks : false,
    pedantic : false,
    sanitize : false,
    smartLists : false,
    silent : false,
    highlight : null,
    langPrefix : "lang-"
  };
  /** @type {function (Object): undefined} */
  marked.Parser = Parser;
  /** @type {function (string, string): ?} */
  marked.parser = Parser.parse;
  /** @type {function (Object): undefined} */
  marked.Lexer = Lexer;
  /** @type {function (string, string): ?} */
  marked.lexer = Lexer.lex;
  /** @type {function (?, Object): undefined} */
  marked.InlineLexer = InlineLexer;
  /** @type {function (?, Array, Array): ?} */
  marked.inlineLexer = InlineLexer.output;
  /** @type {function (string, Object): ?} */
  marked.parse = marked;
  if (typeof exports === "object") {
    /** @type {function (string, Object): ?} */
    module.exports = marked;
  } else {
    if (typeof define === "function" && define.amd) {
      define(function() {
        return marked;
      });
    } else {
      /** @type {function (string, Object): ?} */
      this.marked = marked;
    }
  }
}).call(function() {
  return this || (typeof window !== "undefined" ? window : global);
}());
/** @type {boolean} */
window["PR_SHOULD_USE_CONTINUATION"] = true;
var prettyPrintOne;
var prettyPrint;
(function() {
  /**
   * @param {Array} regexs
   * @return {?}
   */
  function combinePrefixPatterns(regexs) {
    /**
     * @param {string} charsetPart
     * @return {?}
     */
    function decodeEscape(charsetPart) {
      var cc0 = charsetPart.charCodeAt(0);
      if (cc0 !== 92) {
        return cc0;
      }
      var c1 = charsetPart.charAt(1);
      cc0 = escapeCharToCodeUnit[c1];
      if (cc0) {
        return cc0;
      } else {
        if ("0" <= c1 && c1 <= "7") {
          return parseInt(charsetPart.substring(1), 8);
        } else {
          if (c1 === "u" || c1 === "x") {
            return parseInt(charsetPart.substring(2), 16);
          } else {
            return charsetPart.charCodeAt(1);
          }
        }
      }
    }
    /**
     * @param {number} charCode
     * @return {?}
     */
    function encodeEscape(charCode) {
      if (charCode < 32) {
        return(charCode < 16 ? "\\x0" : "\\x") + charCode.toString(16);
      }
      /** @type {string} */
      var ch = String.fromCharCode(charCode);
      return ch === "\\" || (ch === "-" || (ch === "]" || ch === "^")) ? "\\" + ch : ch;
    }
    /**
     * @param {string} charSet
     * @return {?}
     */
    function caseFoldCharset(charSet) {
      var charsetParts = charSet.substring(1, charSet.length - 1).match(new RegExp("\\\\u[0-9A-Fa-f]{4}" + "|\\\\x[0-9A-Fa-f]{2}" + "|\\\\[0-3][0-7]{0,2}" + "|\\\\[0-7]{1,2}" + "|\\\\[\\s\\S]" + "|-" + "|[^-\\\\]", "g"));
      /** @type {Array} */
      var ranges = [];
      /** @type {boolean} */
      var inverse = charsetParts[0] === "^";
      /** @type {Array} */
      var out = ["["];
      if (inverse) {
        out.push("^");
      }
      /** @type {number} */
      var i = inverse ? 1 : 0;
      var n = charsetParts.length;
      for (;i < n;++i) {
        var p = charsetParts[i];
        if (/\\[bdsw]/i.test(p)) {
          out.push(p);
        } else {
          var start = decodeEscape(p);
          var end;
          if (i + 2 < n && "-" === charsetParts[i + 1]) {
            end = decodeEscape(charsetParts[i + 2]);
            i += 2;
          } else {
            end = start;
          }
          ranges.push([start, end]);
          if (!(end < 65 || start > 122)) {
            if (!(end < 65 || start > 90)) {
              ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
            }
            if (!(end < 97 || start > 122)) {
              ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
            }
          }
        }
      }
      ranges.sort(function(vecA, vecB) {
        return vecA[0] - vecB[0] || vecB[1] - vecA[1];
      });
      /** @type {Array} */
      var consolidatedRanges = [];
      /** @type {Array} */
      var lastRange = [];
      /** @type {number} */
      i = 0;
      for (;i < ranges.length;++i) {
        var range = ranges[i];
        if (range[0] <= lastRange[1] + 1) {
          /** @type {number} */
          lastRange[1] = Math.max(lastRange[1], range[1]);
        } else {
          consolidatedRanges.push(lastRange = range);
        }
      }
      /** @type {number} */
      i = 0;
      for (;i < consolidatedRanges.length;++i) {
        range = consolidatedRanges[i];
        out.push(encodeEscape(range[0]));
        if (range[1] > range[0]) {
          if (range[1] + 1 > range[0]) {
            out.push("-");
          }
          out.push(encodeEscape(range[1]));
        }
      }
      out.push("]");
      return out.join("");
    }
    /**
     * @param {Object} regex
     * @return {?}
     */
    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
      var parts = regex.source.match(new RegExp("(?:" + "\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]" + "|\\\\u[A-Fa-f0-9]{4}" + "|\\\\x[A-Fa-f0-9]{2}" + "|\\\\[0-9]+" + "|\\\\[^ux0-9]" + "|\\(\\?[:!=]" + "|[\\(\\)\\^]" + "|[^\\x5B\\x5C\\(\\)\\^]+" + ")", "g"));
      var l = parts.length;
      /** @type {Array} */
      var capturedGroups = [];
      /** @type {number} */
      var i = 0;
      /** @type {number} */
      var groupIndex = 0;
      for (;i < l;++i) {
        var p = parts[i];
        if (p === "(") {
          ++groupIndex;
        } else {
          if ("\\" === p.charAt(0)) {
            /** @type {number} */
            var decimalValue = +p.substring(1);
            if (decimalValue) {
              if (decimalValue <= groupIndex) {
                /** @type {number} */
                capturedGroups[decimalValue] = -1;
              } else {
                parts[i] = encodeEscape(decimalValue);
              }
            }
          }
        }
      }
      /** @type {number} */
      i = 1;
      for (;i < capturedGroups.length;++i) {
        if (-1 === capturedGroups[i]) {
          /** @type {number} */
          capturedGroups[i] = ++capturedGroupIndex;
        }
      }
      /** @type {number} */
      i = 0;
      /** @type {number} */
      groupIndex = 0;
      for (;i < l;++i) {
        p = parts[i];
        if (p === "(") {
          ++groupIndex;
          if (!capturedGroups[groupIndex]) {
            /** @type {string} */
            parts[i] = "(?:";
          }
        } else {
          if ("\\" === p.charAt(0)) {
            /** @type {number} */
            decimalValue = +p.substring(1);
            if (decimalValue && decimalValue <= groupIndex) {
              parts[i] = "\\" + capturedGroups[decimalValue];
            }
          }
        }
      }
      /** @type {number} */
      i = 0;
      for (;i < l;++i) {
        if ("^" === parts[i] && "^" !== parts[i + 1]) {
          /** @type {string} */
          parts[i] = "";
        }
      }
      if (regex.ignoreCase && needToFoldCase) {
        /** @type {number} */
        i = 0;
        for (;i < l;++i) {
          p = parts[i];
          var ch0 = p.charAt(0);
          if (p.length >= 2 && ch0 === "[") {
            parts[i] = caseFoldCharset(p);
          } else {
            if (ch0 !== "\\") {
              parts[i] = p.replace(/[a-zA-Z]/g, function(a) {
                var cc = a.charCodeAt(0);
                return "[" + String.fromCharCode(cc & ~32, cc | 32) + "]";
              });
            }
          }
        }
      }
      return parts.join("");
    }
    /** @type {number} */
    var capturedGroupIndex = 0;
    /** @type {boolean} */
    var needToFoldCase = false;
    /** @type {boolean} */
    var ignoreCase = false;
    /** @type {number} */
    var i = 0;
    var n = regexs.length;
    for (;i < n;++i) {
      var regex = regexs[i];
      if (regex.ignoreCase) {
        /** @type {boolean} */
        ignoreCase = true;
      } else {
        if (/[a-z]/i.test(regex.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ""))) {
          /** @type {boolean} */
          needToFoldCase = true;
          /** @type {boolean} */
          ignoreCase = false;
          break;
        }
      }
    }
    var escapeCharToCodeUnit = {
      "b" : 8,
      "t" : 9,
      "n" : 10,
      "v" : 11,
      "f" : 12,
      "r" : 13
    };
    /** @type {Array} */
    var tagNameArr = [];
    /** @type {number} */
    i = 0;
    n = regexs.length;
    for (;i < n;++i) {
      regex = regexs[i];
      if (regex.global || regex.multiline) {
        throw new Error("" + regex);
      }
      tagNameArr.push("(?:" + allowAnywhereFoldCaseAndRenumberGroups(regex) + ")");
    }
    return new RegExp(tagNameArr.join("|"), ignoreCase ? "gi" : "g");
  }
  /**
   * @param {Node} node
   * @param {?} isPreformatted
   * @return {?}
   */
  function extractSourceSpans(node, isPreformatted) {
    /**
     * @param {Node} node
     * @return {undefined}
     */
    function walk(node) {
      switch(node.nodeType) {
        case 1:
          if (nocode.test(node.className)) {
            return;
          }
          var child = node.firstChild;
          for (;child;child = child.nextSibling) {
            walk(child);
          }
          var nodeName = node.nodeName.toLowerCase();
          if ("br" === nodeName || "li" === nodeName) {
            /** @type {string} */
            chunks[k] = "\n";
            /** @type {number} */
            spans[k << 1] = length++;
            /** @type {Node} */
            spans[k++ << 1 | 1] = node;
          }
          break;
        case 3:
        ;
        case 4:
          var text = node.nodeValue;
          if (text.length) {
            if (!isPreformatted) {
              text = text.replace(/[ \t\r\n]+/g, " ");
            } else {
              text = text.replace(/\r\n?/g, "\n");
            }
            chunks[k] = text;
            spans[k << 1] = length;
            length += text.length;
            /** @type {Node} */
            spans[k++ << 1 | 1] = node;
          }
          break;
      }
    }
    /** @type {RegExp} */
    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    /** @type {Array} */
    var chunks = [];
    /** @type {number} */
    var length = 0;
    /** @type {Array} */
    var spans = [];
    /** @type {number} */
    var k = 0;
    walk(node);
    return{
      sourceCode : chunks.join("").replace(/\n$/, ""),
      spans : spans
    };
  }
  /**
   * @param {number} basePos
   * @param {string} sourceCode
   * @param {Function} langHandler
   * @param {Array} out
   * @return {undefined}
   */
  function appendDecorations(basePos, sourceCode, langHandler, out) {
    if (!sourceCode) {
      return;
    }
    var job = {
      sourceCode : sourceCode,
      basePos : basePos
    };
    langHandler(job);
    out.push.apply(out, job.decorations);
  }
  /**
   * @param {Object} element
   * @return {?}
   */
  function childContentWrapper(element) {
    var wrapper = undefined;
    var c = element.firstChild;
    for (;c;c = c.nextSibling) {
      var type = c.nodeType;
      wrapper = type === 1 ? wrapper ? element : c : type === 3 ? notWs.test(c.nodeValue) ? element : wrapper : wrapper;
    }
    return wrapper === element ? undefined : wrapper;
  }
  /**
   * @param {Array} shortcutStylePatterns
   * @param {Array} fallthroughStylePatterns
   * @return {?}
   */
  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    var shortcuts = {};
    var tokenizer;
    (function() {
      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
      /** @type {Array} */
      var allRegexs = [];
      var regexKeys = {};
      /** @type {number} */
      var i = 0;
      var n = allPatterns.length;
      for (;i < n;++i) {
        var patternParts = allPatterns[i];
        var shortcutChars = patternParts[3];
        if (shortcutChars) {
          var c = shortcutChars.length;
          for (;--c >= 0;) {
            shortcuts[shortcutChars.charAt(c)] = patternParts;
          }
        }
        var regex = patternParts[1];
        /** @type {string} */
        var k = "" + regex;
        if (!regexKeys.hasOwnProperty(k)) {
          allRegexs.push(regex);
          /** @type {null} */
          regexKeys[k] = null;
        }
      }
      allRegexs.push(/[\0-\uffff]/);
      tokenizer = combinePrefixPatterns(allRegexs);
    })();
    var valuesLen = fallthroughStylePatterns.length;
    /**
     * @param {Object} job
     * @return {undefined}
     */
    var decorate = function(job) {
      var sourceCode = job.sourceCode;
      var basePos = job.basePos;
      /** @type {Array} */
      var decorations = [basePos, PR_PLAIN];
      /** @type {number} */
      var pos = 0;
      var tokens = sourceCode.match(tokenizer) || [];
      var styleCache = {};
      /** @type {number} */
      var ti = 0;
      var nTokens = tokens.length;
      for (;ti < nTokens;++ti) {
        var token = tokens[ti];
        var style = styleCache[token];
        var match = void 0;
        var isEmbedded;
        if (typeof style === "string") {
          /** @type {boolean} */
          isEmbedded = false;
        } else {
          var patternParts = shortcuts[token.charAt(0)];
          if (patternParts) {
            match = token.match(patternParts[1]);
            style = patternParts[0];
          } else {
            /** @type {number} */
            var i = 0;
            for (;i < valuesLen;++i) {
              patternParts = fallthroughStylePatterns[i];
              match = token.match(patternParts[1]);
              if (match) {
                style = patternParts[0];
                break;
              }
            }
            if (!match) {
              /** @type {string} */
              style = PR_PLAIN;
            }
          }
          /** @type {boolean} */
          isEmbedded = style.length >= 5 && "lang-" === style.substring(0, 5);
          if (isEmbedded && !(match && typeof match[1] === "string")) {
            /** @type {boolean} */
            isEmbedded = false;
            /** @type {string} */
            style = PR_SOURCE;
          }
          if (!isEmbedded) {
            styleCache[token] = style;
          }
        }
        var tokenStart = pos;
        pos += token.length;
        if (!isEmbedded) {
          decorations.push(basePos + tokenStart, style);
        } else {
          var embeddedSource = match[1];
          var embeddedSourceStart = token.indexOf(embeddedSource);
          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
          if (match[2]) {
            /** @type {number} */
            embeddedSourceEnd = token.length - match[2].length;
            /** @type {number} */
            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
          }
          var lang = style.substring(5);
          appendDecorations(basePos + tokenStart, token.substring(0, embeddedSourceStart), decorate, decorations);
          appendDecorations(basePos + tokenStart + embeddedSourceStart, embeddedSource, langHandlerForExtension(lang, embeddedSource), decorations);
          appendDecorations(basePos + tokenStart + embeddedSourceEnd, token.substring(embeddedSourceEnd), decorate, decorations);
        }
      }
      /** @type {Array} */
      job.decorations = decorations;
    };
    return decorate;
  }
  /**
   * @param {Object} options
   * @return {?}
   */
  function sourceDecorator(options) {
    /** @type {Array} */
    var shortcutStylePatterns = [];
    /** @type {Array} */
    var fallthroughStylePatterns = [];
    if (options["tripleQuotedStrings"]) {
      shortcutStylePatterns.push([PR_STRING, /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/, null, "'\""]);
    } else {
      if (options["multiLineStrings"]) {
        shortcutStylePatterns.push([PR_STRING, /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/, null, "'\"`"]);
      } else {
        shortcutStylePatterns.push([PR_STRING, /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/, null, "\"'"]);
      }
    }
    if (options["verbatimStrings"]) {
      fallthroughStylePatterns.push([PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    }
    var hc = options["hashComments"];
    if (hc) {
      if (options["cStyleComments"]) {
        if (hc > 1) {
          shortcutStylePatterns.push([PR_COMMENT, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, "#"]);
        } else {
          shortcutStylePatterns.push([PR_COMMENT, /^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\r\n]*)/, null, "#"]);
        }
        fallthroughStylePatterns.push([PR_STRING, /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/, null]);
      } else {
        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, "#"]);
      }
    }
    if (options["cStyleComments"]) {
      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
      fallthroughStylePatterns.push([PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    }
    if (options["regexLiterals"]) {
      /** @type {string} */
      var REGEX_LITERAL = "/(?=[^/*])" + "(?:[^/\\x5B\\x5C]" + "|\\x5C[\\s\\S]" + "|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+" + "/";
      fallthroughStylePatterns.push(["lang-regex", new RegExp("^" + REGEXP_PRECEDER_PATTERN + "(" + REGEX_LITERAL + ")")]);
    }
    var types = options["types"];
    if (types) {
      fallthroughStylePatterns.push([PR_TYPE, types]);
    }
    var keywords = ("" + options["keywords"]).replace(/^ | $/g, "");
    if (keywords.length) {
      fallthroughStylePatterns.push([PR_KEYWORD, new RegExp("^(?:" + keywords.replace(/[\s,]+/g, "|") + ")\\b"), null]);
    }
    shortcutStylePatterns.push([PR_PLAIN, /^\s+/, null, " \r\n\t\u00a0"]);
    /** @type {RegExp} */
    var punctuation = /^.[^\s\w\.$@\'\"\`\/\\]*/;
    fallthroughStylePatterns.push([PR_LITERAL, /^@[a-z_$][a-z_$@0-9]*/i, null], [PR_TYPE, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null], [PR_PLAIN, /^[a-z_$][a-z_$@0-9]*/i, null], [PR_LITERAL, new RegExp("^(?:" + "0x[a-f0-9]+" + "|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)" + "(?:e[+\\-]?\\d+)?" + ")" + "[a-z]*", "i"), null, "0123456789"], [PR_PLAIN, /^\\[\s\S]?/, null], [PR_PUNCTUATION, punctuation, null]);
    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
  }
  /**
   * @param {Node} node
   * @param {number} opt_startLineNum
   * @param {boolean} isPreformatted
   * @return {undefined}
   */
  function numberLines(node, opt_startLineNum, isPreformatted) {
    /**
     * @param {Node} node
     * @return {undefined}
     */
    function walk(node) {
      switch(node.nodeType) {
        case 1:
          if (nocode.test(node.className)) {
            break;
          }
          if ("br" === node.nodeName) {
            breakAfter(node);
            if (node.parentNode) {
              node.parentNode.removeChild(node);
            }
          } else {
            var child = node.firstChild;
            for (;child;child = child.nextSibling) {
              walk(child);
            }
          }
          break;
        case 3:
        ;
        case 4:
          if (isPreformatted) {
            var text = node.nodeValue;
            var match = text.match(lineBreak);
            if (match) {
              var firstLine = text.substring(0, match.index);
              node.nodeValue = firstLine;
              var tail = text.substring(match.index + match[0].length);
              if (tail) {
                var parent = node.parentNode;
                parent.insertBefore(document.createTextNode(tail), node.nextSibling);
              }
              breakAfter(node);
              if (!firstLine) {
                node.parentNode.removeChild(node);
              }
            }
          }
          break;
      }
    }
    /**
     * @param {Element} lineEndNode
     * @return {undefined}
     */
    function breakAfter(lineEndNode) {
      /**
       * @param {Object} limit
       * @param {number} copy
       * @return {?}
       */
      function breakLeftOf(limit, copy) {
        var rightSide = copy ? limit.cloneNode(false) : limit;
        var parent = limit.parentNode;
        if (parent) {
          var parentClone = breakLeftOf(parent, 1);
          var next = limit.nextSibling;
          parentClone.appendChild(rightSide);
          var sibling = next;
          for (;sibling;sibling = next) {
            next = sibling.nextSibling;
            parentClone.appendChild(sibling);
          }
        }
        return rightSide;
      }
      for (;!lineEndNode.nextSibling;) {
        lineEndNode = lineEndNode.parentNode;
        if (!lineEndNode) {
          return;
        }
      }
      var copiedListItem = breakLeftOf(lineEndNode.nextSibling, 0);
      var parent;
      for (;(parent = copiedListItem.parentNode) && parent.nodeType === 1;) {
        copiedListItem = parent;
      }
      listItems.push(copiedListItem);
    }
    /** @type {RegExp} */
    var nocode = /(?:^|\s)nocode(?:\s|$)/;
    /** @type {RegExp} */
    var lineBreak = /\r\n?|\n/;
    var document = node.ownerDocument;
    var li = document.createElement("li");
    for (;node.firstChild;) {
      li.appendChild(node.firstChild);
    }
    /** @type {Array} */
    var listItems = [li];
    /** @type {number} */
    var i = 0;
    for (;i < listItems.length;++i) {
      walk(listItems[i]);
    }
    if (opt_startLineNum === (opt_startLineNum | 0)) {
      listItems[0].setAttribute("value", opt_startLineNum);
    }
    var ol = document.createElement("ol");
    /** @type {string} */
    ol.className = "linenums";
    /** @type {number} */
    var offset = Math.max(0, opt_startLineNum - 1 | 0) || 0;
    /** @type {number} */
    i = 0;
    /** @type {number} */
    var n = listItems.length;
    for (;i < n;++i) {
      li = listItems[i];
      /** @type {string} */
      li.className = "L" + (i + offset) % 10;
      if (!li.firstChild) {
        li.appendChild(document.createTextNode("\u00a0"));
      }
      ol.appendChild(li);
    }
    node.appendChild(ol);
  }
  /**
   * @param {Object} job
   * @return {undefined}
   */
  function recombineTagsAndDecorations(job) {
    /** @type {(Array.<string>|null)} */
    var skipStatic = /\bMSIE\s(\d+)/.exec(navigator.userAgent);
    /** @type {(boolean|null)} */
    skipStatic = skipStatic && +skipStatic[1] <= 8;
    /** @type {RegExp} */
    var newlineRe = /\n/g;
    var source = job.sourceCode;
    var sourceLength = source.length;
    /** @type {number} */
    var sourceIndex = 0;
    var spans = job.spans;
    var nSpans = spans.length;
    /** @type {number} */
    var spanIndex = 0;
    var decorations = job.decorations;
    var nDecorations = decorations.length;
    /** @type {number} */
    var decorationIndex = 0;
    decorations[nDecorations] = sourceLength;
    var decPos;
    var i;
    /** @type {number} */
    i = decPos = 0;
    for (;i < nDecorations;) {
      if (decorations[i] !== decorations[i + 2]) {
        decorations[decPos++] = decorations[i++];
        decorations[decPos++] = decorations[i++];
      } else {
        i += 2;
      }
    }
    /** @type {number} */
    nDecorations = decPos;
    /** @type {number} */
    i = decPos = 0;
    for (;i < nDecorations;) {
      var startPos = decorations[i];
      var startDec = decorations[i + 1];
      /** @type {number} */
      var end = i + 2;
      for (;end + 2 <= nDecorations && decorations[end + 1] === startDec;) {
        end += 2;
      }
      decorations[decPos++] = startPos;
      decorations[decPos++] = startDec;
      /** @type {number} */
      i = end;
    }
    /** @type {number} */
    nDecorations = decorations.length = decPos;
    var sourceNode = job.sourceNode;
    var oldDisplay;
    if (sourceNode) {
      oldDisplay = sourceNode.style.display;
      /** @type {string} */
      sourceNode.style.display = "none";
    }
    try {
      /** @type {null} */
      var decoration = null;
      for (;spanIndex < nSpans;) {
        var spanStart = spans[spanIndex];
        var spanEnd = spans[spanIndex + 2] || sourceLength;
        var decEnd = decorations[decorationIndex + 2] || sourceLength;
        /** @type {number} */
        end = Math.min(spanEnd, decEnd);
        var textNode = spans[spanIndex + 1];
        var styledText;
        if (textNode.nodeType !== 1 && (styledText = source.substring(sourceIndex, end))) {
          if (skipStatic) {
            styledText = styledText.replace(newlineRe, "\r");
          }
          textNode.nodeValue = styledText;
          var document = textNode.ownerDocument;
          var span = document.createElement("span");
          span.className = decorations[decorationIndex + 1];
          var parentNode = textNode.parentNode;
          parentNode.replaceChild(span, textNode);
          span.appendChild(textNode);
          if (sourceIndex < spanEnd) {
            spans[spanIndex + 1] = textNode = document.createTextNode(source.substring(end, spanEnd));
            parentNode.insertBefore(textNode, span.nextSibling);
          }
        }
        /** @type {number} */
        sourceIndex = end;
        if (sourceIndex >= spanEnd) {
          spanIndex += 2;
        }
        if (sourceIndex >= decEnd) {
          decorationIndex += 2;
        }
      }
    } finally {
      if (sourceNode) {
        sourceNode.style.display = oldDisplay;
      }
    }
  }
  /**
   * @param {?} handler
   * @param {Array} fileExtensions
   * @return {undefined}
   */
  function registerLangHandler(handler, fileExtensions) {
    var i = fileExtensions.length;
    for (;--i >= 0;) {
      var ext = fileExtensions[i];
      if (!langHandlerRegistry.hasOwnProperty(ext)) {
        langHandlerRegistry[ext] = handler;
      } else {
        if (win["console"]) {
          console["warn"]("cannot override language handler %s", ext);
        }
      }
    }
  }
  /**
   * @param {string} extension
   * @param {?} source
   * @return {?}
   */
  function langHandlerForExtension(extension, source) {
    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
      /** @type {string} */
      extension = /^\s*</.test(source) ? "default-markup" : "default-code";
    }
    return langHandlerRegistry[extension];
  }
  /**
   * @param {Object} job
   * @return {undefined}
   */
  function applyDecorator(job) {
    var opt_langExtension = job.langExtension;
    try {
      var sourceAndSpans = extractSourceSpans(job.sourceNode, job.pre);
      var source = sourceAndSpans.sourceCode;
      job.sourceCode = source;
      job.spans = sourceAndSpans.spans;
      /** @type {number} */
      job.basePos = 0;
      langHandlerForExtension(opt_langExtension, source)(job);
      recombineTagsAndDecorations(job);
    } catch (e) {
      if (win["console"]) {
        console["log"](e && e["stack"] ? e["stack"] : e);
      }
    }
  }
  /**
   * @param {string} sourceCodeHtml
   * @param {(Array|number)} opt_langExtension
   * @param {string} opt_numberLines
   * @return {?}
   */
  function prettyPrintOne(sourceCodeHtml, opt_langExtension, opt_numberLines) {
    /** @type {Element} */
    var container = document.createElement("pre");
    /** @type {string} */
    container.innerHTML = sourceCodeHtml;
    if (opt_numberLines) {
      numberLines(container, opt_numberLines, true);
    }
    var job = {
      langExtension : opt_langExtension,
      numberLines : opt_numberLines,
      sourceNode : container,
      pre : 1
    };
    applyDecorator(job);
    return container.innerHTML;
  }
  /**
   * @param {?} opt_whenDone
   * @return {undefined}
   */
  function prettyPrint(opt_whenDone) {
    /**
     * @param {string} tn
     * @return {?}
     */
    function byTagName(tn) {
      return document.getElementsByTagName(tn);
    }
    /**
     * @return {undefined}
     */
    function doWork() {
      var endTime = win["PR_SHOULD_USE_CONTINUATION"] ? clock["now"]() + 250 : Infinity;
      for (;k < elements.length && clock["now"]() < endTime;k++) {
        var cs = elements[k];
        var className = cs.className;
        if (prettyPrintRe.test(className) && !classNameFilter.test(className)) {
          /** @type {boolean} */
          var nested = false;
          var p = cs.parentNode;
          for (;p;p = p.parentNode) {
            var tn = p.tagName;
            if (preCodeXmpRe.test(tn) && (p.className && prettyPrintRe.test(p.className))) {
              /** @type {boolean} */
              nested = true;
              break;
            }
          }
          if (!nested) {
            cs.className += " prettyprinted";
            var langExtension = className.match(langExtensionRe);
            var wrapper;
            if (!langExtension && ((wrapper = childContentWrapper(cs)) && rchecked.test(wrapper.tagName))) {
              langExtension = wrapper.className.match(langExtensionRe);
            }
            if (langExtension) {
              langExtension = langExtension[1];
            }
            var preformatted;
            if (preformattedTagNameRe.test(cs.tagName)) {
              /** @type {number} */
              preformatted = 1;
            } else {
              var currentStyle = cs["currentStyle"];
              var whitespace = currentStyle ? currentStyle["whiteSpace"] : document.defaultView && document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(cs, null).getPropertyValue("white-space") : 0;
              preformatted = whitespace && "pre" === whitespace.substring(0, 3);
            }
            /** @type {(Array.<string>|null)} */
            var lineNums = cs.className.match(/\blinenums\b(?::(\d+))?/);
            /** @type {(boolean|number)} */
            lineNums = lineNums ? lineNums[1] && lineNums[1].length ? +lineNums[1] : true : false;
            if (lineNums) {
              numberLines(cs, lineNums, preformatted);
            }
            prettyPrintingJob = {
              langExtension : langExtension,
              sourceNode : cs,
              numberLines : lineNums,
              pre : preformatted
            };
            applyDecorator(prettyPrintingJob);
          }
        }
      }
      if (k < elements.length) {
        setTimeout(doWork, 250);
      } else {
        if (opt_whenDone) {
          opt_whenDone();
        }
      }
    }
    /** @type {Array} */
    var codeSegments = [byTagName("pre"), byTagName("code"), byTagName("xmp")];
    /** @type {Array} */
    var elements = [];
    /** @type {number} */
    var i = 0;
    for (;i < codeSegments.length;++i) {
      /** @type {number} */
      var j = 0;
      var jl = codeSegments[i].length;
      for (;j < jl;++j) {
        elements.push(codeSegments[i][j]);
      }
    }
    /** @type {null} */
    codeSegments = null;
    /** @type {function (new:Date, ?=, ?=, ?=, ?=, ?=, ?=, ?=): string} */
    var clock = Date;
    if (!clock["now"]) {
      clock = {
        /**
         * @return {?}
         */
        "now" : function() {
          return+new Date;
        }
      };
    }
    /** @type {number} */
    var k = 0;
    var prettyPrintingJob;
    /** @type {RegExp} */
    var langExtensionRe = /\blang(?:uage)?-([\w.]+)(?!\S)/;
    /** @type {RegExp} */
    var prettyPrintRe = /\bprettyprint\b/;
    /** @type {RegExp} */
    var classNameFilter = /\bprettyprinted\b/;
    /** @type {RegExp} */
    var preformattedTagNameRe = /pre|xmp/i;
    /** @type {RegExp} */
    var rchecked = /^code$/i;
    /** @type {RegExp} */
    var preCodeXmpRe = /^(?:pre|code|xmp)$/i;
    doWork();
  }
  /** @type {Window} */
  var win = window;
  /** @type {Array} */
  var FLOW_CONTROL_KEYWORDS = ["break,continue,do,else,for,if,return,while"];
  /** @type {Array} */
  var C_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "auto,case,char,const,default," + "double,enum,extern,float,goto,int,long,register,short,signed,sizeof," + "static,struct,switch,typedef,union,unsigned,void,volatile"];
  /** @type {Array} */
  var COMMON_KEYWORDS = [C_KEYWORDS, "catch,class,delete,false,import," + "new,operator,private,protected,public,this,throw,true,try,typeof"];
  /** @type {Array} */
  var CPP_KEYWORDS = [COMMON_KEYWORDS, "alignof,align_union,asm,axiom,bool," + "concept,concept_map,const_cast,constexpr,decltype," + "dynamic_cast,explicit,export,friend,inline,late_check," + "mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast," + "template,typeid,typename,using,virtual,where"];
  /** @type {Array} */
  var JAVA_KEYWORDS = [COMMON_KEYWORDS, "abstract,boolean,byte,extends,final,finally,implements,import," + "instanceof,null,native,package,strictfp,super,synchronized,throws," + "transient"];
  /** @type {Array} */
  var CSHARP_KEYWORDS = [JAVA_KEYWORDS, "as,base,by,checked,decimal,delegate,descending,dynamic,event," + "fixed,foreach,from,group,implicit,in,interface,internal,into,is,let," + "lock,object,out,override,orderby,params,partial,readonly,ref,sbyte," + "sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort," + "var,virtual,where"];
  /** @type {string} */
  var COFFEE_KEYWORDS = "all,and,by,catch,class,else,extends,false,finally," + "for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then," + "throw,true,try,unless,until,when,while,yes";
  /** @type {Array} */
  var JSCRIPT_KEYWORDS = [COMMON_KEYWORDS, "debugger,eval,export,function,get,null,set,undefined,var,with," + "Infinity,NaN"];
  /** @type {string} */
  var PERL_KEYWORDS = "caller,delete,die,do,dump,elsif,eval,exit,foreach,for," + "goto,if,import,last,local,my,next,no,our,print,package,redo,require," + "sub,undef,unless,until,use,wantarray,while,BEGIN,END";
  /** @type {Array} */
  var PYTHON_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "and,as,assert,class,def,del," + "elif,except,exec,finally,from,global,import,in,is,lambda," + "nonlocal,not,or,pass,print,raise,try,with,yield," + "False,True,None"];
  /** @type {Array} */
  var RUBY_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "alias,and,begin,case,class," + "def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo," + "rescue,retry,self,super,then,true,undef,unless,until,when,yield," + "BEGIN,END"];
  /** @type {Array} */
  var SH_KEYWORDS = [FLOW_CONTROL_KEYWORDS, "case,done,elif,esac,eval,fi," + "function,in,local,set,then,until"];
  /** @type {Array} */
  var ALL_KEYWORDS = [CPP_KEYWORDS, CSHARP_KEYWORDS, JSCRIPT_KEYWORDS, PERL_KEYWORDS + PYTHON_KEYWORDS, RUBY_KEYWORDS, SH_KEYWORDS];
  /** @type {RegExp} */
  var C_TYPES = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;
  /** @type {string} */
  var PR_STRING = "str";
  /** @type {string} */
  var PR_KEYWORD = "kwd";
  /** @type {string} */
  var PR_COMMENT = "com";
  /** @type {string} */
  var PR_TYPE = "typ";
  /** @type {string} */
  var PR_LITERAL = "lit";
  /** @type {string} */
  var PR_PUNCTUATION = "pun";
  /** @type {string} */
  var PR_PLAIN = "pln";
  /** @type {string} */
  var PR_TAG = "tag";
  /** @type {string} */
  var PR_DECLARATION = "dec";
  /** @type {string} */
  var PR_SOURCE = "src";
  /** @type {string} */
  var PR_ATTRIB_NAME = "atn";
  /** @type {string} */
  var PR_ATTRIB_VALUE = "atv";
  /** @type {string} */
  var PR_NOCODE = "nocode";
  /** @type {string} */
  var REGEXP_PRECEDER_PATTERN = "(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";
  /** @type {RegExp} */
  var notWs = /\S/;
  var decorateSource = sourceDecorator({
    "keywords" : ALL_KEYWORDS,
    "hashComments" : true,
    "cStyleComments" : true,
    "multiLineStrings" : true,
    "regexLiterals" : true
  });
  var langHandlerRegistry = {};
  registerLangHandler(decorateSource, ["default-code"]);
  registerLangHandler(createSimpleLexer([], [[PR_PLAIN, /^[^<?]+/], [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/], [PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/], ["lang-", /^<\?([\s\S]+?)(?:\?>|$)/], ["lang-", /^<%([\s\S]+?)(?:%>|$)/], [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/], ["lang-", /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i], ["lang-js", /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i], ["lang-css", /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i], ["lang-in.tag", /^(<\/?[a-z][^<>]*>)/i]]), ["default-markup",
  "htm", "html", "mxml", "xhtml", "xml", "xsl"]);
  registerLangHandler(createSimpleLexer([[PR_PLAIN, /^[\s]+/, null, " \t\r\n"], [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, "\"'"]], [[PR_TAG, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i], [PR_ATTRIB_NAME, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i], ["lang-uq.val", /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/], [PR_PUNCTUATION, /^[=<>\/]+/], ["lang-js", /^on\w+\s*=\s*\"([^\"]+)\"/i], ["lang-js", /^on\w+\s*=\s*\'([^\']+)\'/i], ["lang-js", /^on\w+\s*=\s*([^\"\'>\s]+)/i], ["lang-css", /^style\s*=\s*\"([^\"]+)\"/i],
  ["lang-css", /^style\s*=\s*\'([^\']+)\'/i], ["lang-css", /^style\s*=\s*([^\"\'>\s]+)/i]]), ["in.tag"]);
  registerLangHandler(createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ["uq.val"]);
  registerLangHandler(sourceDecorator({
    "keywords" : CPP_KEYWORDS,
    "hashComments" : true,
    "cStyleComments" : true,
    "types" : C_TYPES
  }), ["c", "cc", "cpp", "cxx", "cyc", "m"]);
  registerLangHandler(sourceDecorator({
    "keywords" : "null,true,false"
  }), ["json"]);
  registerLangHandler(sourceDecorator({
    "keywords" : CSHARP_KEYWORDS,
    "hashComments" : true,
    "cStyleComments" : true,
    "verbatimStrings" : true,
    "types" : C_TYPES
  }), ["cs"]);
  registerLangHandler(sourceDecorator({
    "keywords" : JAVA_KEYWORDS,
    "cStyleComments" : true
  }), ["java"]);
  registerLangHandler(sourceDecorator({
    "keywords" : SH_KEYWORDS,
    "hashComments" : true,
    "multiLineStrings" : true
  }), ["bsh", "csh", "sh"]);
  registerLangHandler(sourceDecorator({
    "keywords" : PYTHON_KEYWORDS,
    "hashComments" : true,
    "multiLineStrings" : true,
    "tripleQuotedStrings" : true
  }), ["cv", "py"]);
  registerLangHandler(sourceDecorator({
    "keywords" : PERL_KEYWORDS,
    "hashComments" : true,
    "multiLineStrings" : true,
    "regexLiterals" : true
  }), ["perl", "pl", "pm"]);
  registerLangHandler(sourceDecorator({
    "keywords" : RUBY_KEYWORDS,
    "hashComments" : true,
    "multiLineStrings" : true,
    "regexLiterals" : true
  }), ["rb"]);
  registerLangHandler(sourceDecorator({
    "keywords" : JSCRIPT_KEYWORDS,
    "cStyleComments" : true,
    "regexLiterals" : true
  }), ["js"]);
  registerLangHandler(sourceDecorator({
    "keywords" : COFFEE_KEYWORDS,
    "hashComments" : 3,
    "cStyleComments" : true,
    "multilineStrings" : true,
    "tripleQuotedStrings" : true,
    "regexLiterals" : true
  }), ["coffee"]);
  registerLangHandler(createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ["regex"]);
  var PR = win["PR"] = {
    /** @type {function (Array, Array): ?} */
    "createSimpleLexer" : createSimpleLexer,
    /** @type {function (?, Array): undefined} */
    "registerLangHandler" : registerLangHandler,
    /** @type {function (Object): ?} */
    "sourceDecorator" : sourceDecorator,
    "PR_ATTRIB_NAME" : PR_ATTRIB_NAME,
    "PR_ATTRIB_VALUE" : PR_ATTRIB_VALUE,
    "PR_COMMENT" : PR_COMMENT,
    "PR_DECLARATION" : PR_DECLARATION,
    "PR_KEYWORD" : PR_KEYWORD,
    "PR_LITERAL" : PR_LITERAL,
    "PR_NOCODE" : PR_NOCODE,
    "PR_PLAIN" : PR_PLAIN,
    "PR_PUNCTUATION" : PR_PUNCTUATION,
    "PR_SOURCE" : PR_SOURCE,
    "PR_STRING" : PR_STRING,
    "PR_TAG" : PR_TAG,
    "PR_TYPE" : PR_TYPE,
    /** @type {function (string, (Array|number), string): ?} */
    "prettyPrintOne" : win["prettyPrintOne"] = prettyPrintOne,
    /** @type {function (?): undefined} */
    "prettyPrint" : win["prettyPrint"] = prettyPrint
  };
  if (typeof define === "function" && define["amd"]) {
    define("google-code-prettify", [], function() {
      return PR;
    });
  }
})();
(function(window, document) {
  /**
   * @param {string} url
   * @return {?}
   */
  function parseURL(url) {
    /** @type {Element} */
    var anchor = document.createElement("a");
    var ret = {};
    var codeSegments;
    var b;
    var i;
    /** @type {string} */
    anchor.href = url;
    codeSegments = anchor.search.replace("?", "&").split("&");
    /** @type {number} */
    i = 0;
    for (;i < codeSegments.length;i++) {
      b = codeSegments[i].split("=");
      if (b[0]) {
        ret[b[0]] = b[1] || "";
      }
    }
    return ret;
  }
  /** @type {string} */
  document.body.style.display = "none";
  document.head = document.getElementsByTagName("head")[0];
  if (!("getElementsByClassName" in document)) {
    /**
     * @param {string} name
     * @return {NodeList}
     */
    document.getElementsByClassName = function(name) {
      /**
       * @param {Object} node
       * @param {string} keepData
       * @return {?}
       */
      function getElementsByClassName(node, keepData) {
        /** @type {Array} */
        var a = [];
        /** @type {RegExp} */
        var nocode = new RegExp("(^| )" + keepData + "( |$)");
        var els = node.getElementsByTagName("*");
        /** @type {number} */
        var i = 0;
        var len = els.length;
        for (;i < len;i++) {
          if (nocode.test(els[i].className)) {
            a.push(els[i]);
          }
        }
        return a;
      }
      return getElementsByClassName(document.body, name);
    };
  }
  var markdownEl = document.getElementsByTagName("xmp")[0] || (document.getElementsByTagName("pre")[0] || document.getElementsByTagName("textarea")[0]);
  var a = document.getElementsByTagName("title")[0];
  /** @type {NodeList} */
  var codeSegments = document.getElementsByTagName("script");
  var u = document.getElementsByClassName("navbar")[0];
  /** @type {Element} */
  var metaEl = document.createElement("meta");
  /** @type {string} */
  metaEl.name = "viewport";
  /** @type {string} */
  metaEl.content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0";
  if (document.head.firstChild) {
    document.head.insertBefore(metaEl, document.head.firstChild);
  } else {
    document.head.appendChild(metaEl);
  }
  /** @type {string} */
  var url = "";
  /** @type {number} */
  var i = 0;
  for (;i < codeSegments.length;i++) {
    if (codeSegments[i].src.match("strapdown")) {
      url = codeSegments[i].src;
    }
  }
  var path = url.substr(0, url.lastIndexOf("/"));
  var fmt = parseURL(url);
  console.log(fmt);
  console.log("[strapdown.js] [INFO] search the URI for src = " + fmt["src"]);
  var name = markdownEl.getAttribute("theme") || (fmt["theme"] || "united");
  name = name.toLowerCase();
  console.log("[strapdown.js] [INFO] Parser and lexer well imported. Origin = " + url + "\n Theme = " + name);
  /** @type {Element} */
  var node = document.createElement("link");
  /** @type {string} */
  node.rel = "stylesheet";
  /** @type {string} */
  node.href = path + "/themes/" + name + ".min.css";
  document.head.appendChild(node);
  /** @type {Element} */
  node = document.createElement("link");
  /** @type {string} */
  node.rel = "stylesheet";
  /** @type {string} */
  node.href = path + "/strapdown.min.css";
  document.head.appendChild(node);
  /** @type {Element} */
  node = document.createElement("link");
  /** @type {string} */
  node.rel = "stylesheet";
  /** @type {string} */
  node.href = path + "/themes/bootstrap-responsive.min.css";
  document.head.appendChild(node);
  // Favicon (730 bytes for 'favicon.png')
  if (fmt['keepicon']) {
    // Do not add a favicon, if strapdown.js was loaded with a URL query containing "&keepicon=y" somewhere.
    console.log("[strapdown.js] [INFO] Keeping the default favicon (not replacing with originBase/favicon.png ...");
  } else {
    /** @type {Element} */
    node = document.createElement("link");
    /** @type {string} */
    node.rel = "shortcut icon";
    /** @type {string} */
    node.href = path + "/favicon.png";
    document.head.appendChild(node);
  }
  var markdown = markdownEl.textContent || markdownEl.innerText;
  /** @type {Element} */
  var newNode = document.createElement("div");
  /** @type {string} */
  newNode.className = "container";
  /** @type {string} */
  newNode.id = "content";
  document.body.replaceChild(newNode, markdownEl);
  /** @type {Element} */
  newNode = document.createElement("div");
  /** @type {string} */
  if (fmt["nonavbarfixed"]) {
    newNode.className = "navbar navbar-static-top";
    document.body.style = "padding-top: 0px;"  /* XXX Experimental */
  }
  else {
    newNode.className = "navbar navbar-fixed-top";
  }
  if (!u && a) {
    /** @type {string} */
    newNode.innerHTML = '<div class="navbar-inner"> <div class="container"> <div id="headline" class="brand"> </div> ' + '<div id="headline-copyrights" class="brand">(' + '<a title="http://lbo.k.vu/md" href="http://lbesson.bitbucket.org/md/index.html?src=strapdown.js">StrapDown.js</a> v0.8, ' + 'theme <a title="More information on this theme on bootswatch.com!" href="http://bootswatch.com/' + name + '">' + name + "</a>, " + 'thanks to <a href="https://bitbucket.org/">BitBucket</a>)</div> ' +
    '<div id="headline-squirt" class="brand"> <a title="Quick reader script! Check http://lbesson.bitbucket.org/squirt/ for more details" ' + "href=\"javascript:(function(){sq=window.sq;if(sq&&sq.closed){window.sq.closed&&window.document.dispatchEvent(new Event('squirt.again'));}else{sq=window.sq||{};sq.version='0.4';sq.host='http://lbesson.bitbucket.org/squirt';sq.j=document.createElement('script');sq.j.src=sq.host+'/squirt.js?src=strapdown.js';document.body.appendChild(sq.j);}})();\" " + ">SquirtFR?</a>" + " <a title=\"Import MathJax?\" href=\"javascript:(function(){ var scriptElMathJax = document.createElement('script'); scriptElMathJax.type = 'text/javascript'; scriptElMathJax.src = 'https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&amp;locale=fr'; document.head.appendChild(scriptElMathJax); })();\" >MathJax?</a>" +
    " <a title=\"Fetch a beacon image?\" href=\"javascript:(function(){ var linkEl = document.createElement('img'); linkEl.alt = 'GA|Analytics'; linkEl.style = 'visibility: hidden; display: none;'; linkEl.src = 'http://perso.crans.org/besson/beacon/14/navbar/strapdown.js?pixel'; document.body.appendChild(linkEl); })();\">Beacon?</a>" + "</div> </div> </div>";
    if (!(fmt["nonavbarfixed"])) {
      document.body.insertBefore(newNode, document.body.firstChild);
    }
    var h = a.innerHTML;
    /** @type {(HTMLElement|null)} */
    var e = document.getElementById("headline");
    if (e) {
      e.innerHTML = h;
    }
  }
  marked.setOptions({
    gfm : true,
    tables : true,
    smartypants : true,
    pedantic: (fmt['pedantic'] || false)
  });
  var html = marked(markdown);
  document.getElementById("content").innerHTML = html;
  /** @type {NodeList} */
  var expected = document.getElementsByTagName("code");
  /** @type {number} */
  i = 0;
  /** @type {number} */
  var l = expected.length;
  for (;i < l;i++) {
    var obj = expected[i];
    var cls = obj.className;
    /** @type {string} */
    obj.className = "prettyprint lang-" + cls;
  }
  prettyPrint();
  /** @type {NodeList} */
  var parts = document.getElementsByTagName("table");
  /** @type {number} */
  i = 0;
  /** @type {number} */
  l = parts.length;
  for (;i < l;i++) {
    var part = parts[i];
    /** @type {string} */
    part.className = "table table-striped table-bordered";
  }
  /** @type {string} */
  document.body.style.display = "";
  /** @type {Element} */
  var script = document.createElement("script");
  /** @type {string} */
  script.type = "text/x-mathjax-config";
  /** @type {string} */
  script.innerHTML = "MathJax.Hub.Config({ tex2jax: { inlineMath: [['$','$']], displayMath: [ ['$$','$$']], processEscapes: true } });";
  document.body.appendChild(script);
  if (fmt["mathjax"]) {
    /** @type {Element} */
    script = document.createElement("script");
    /** @type {string} */
    script.type = "text/javascript";
    /** @type {string} */
    script.src = "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML&amp;locale=fr";
    document.head.appendChild(script);
  }
  if (fmt["beacon"]) {
    /** @type {Element} */
    node = document.createElement("img");
    /** @type {string} */
    node.alt = "GA|Analytics";
    /** @type {string} */
    node.style = "visibility: hidden; display: none;";
    /** @type {string} */
    node.src = "http://perso.crans.org/besson/beacon/14/query/strapdown.js?pixel";
    document.body.appendChild(node);
  }
})(window, document);
