text: // Generated by CoffeeScript 1.12.6
  (function() {
    var LineMap, SourceMap;
  
    LineMap = (function() {
      function LineMap(line1) {
        this.line = line1;
        this.columns = [];
      }
  
      LineMap.prototype.add = function(column, arg, options) {
        var sourceColumn, sourceLine;
        sourceLine = arg[0], sourceColumn = arg[1];
        if (options == null) {
          options = {};
        }
        if (this.columns[column] && options.noReplace) {
          return;
        }
        return this.columns[column] = {
          line: this.line,
          column: column,
          sourceLine: sourceLine,
          sourceColumn: sourceColumn
        };
      };
  
      LineMap.prototype.sourceLocation = function(column) {
        var mapping;
        while (!((mapping = this.columns[column]) || (column <= 0))) {
          column--;
        }
        return mapping && [mapping.sourceLine, mapping.sourceColumn];
      };
  
      return LineMap;
  
    })();
  
    SourceMap = (function() {
      var BASE64_CHARS, VLQ_CONTINUATION_BIT, VLQ_SHIFT, VLQ_VALUE_MASK;
  
      function SourceMap() {
        this.lines = [];
      }
  
      SourceMap.prototype.add = function(sourceLocation, generatedLocation, options) {
        var base, column, line, lineMap;
        if (options == null) {
          options = {};
        }
        line = generatedLocation[0], column = generatedLocation[1];
        lineMap = ((base = this.lines)[line] || (base[line] = new LineMap(line)));
        return lineMap.add(column, sourceLocation, options);
      };
  
      SourceMap.prototype.sourceLocation = function(arg) {
        var column, line, lineMap;
        line = arg[0], column = arg[1];
        while (!((lineMap = this.lines[line]) || (line <= 0))) {
          line--;
        }
        return lineMap && lineMap.sourceLocation(column);
      };
  
      SourceMap.prototype.generate = function(options, code) {
        var buffer, i, j, lastColumn, lastSourceColumn, lastSourceLine, len, len1, lineMap, lineNumber, mapping, needComma, ref, ref1, v3, writingline;
        if (options == null) {
          options = {};
        }
        if (code == null) {
          code = null;
        }
        writingline = 0;
        lastColumn = 0;
        lastSourceLine = 0;
        lastSourceColumn = 0;
        needComma = false;
        buffer = "";
        ref = this.lines;
        for (lineNumber = i = 0, len = ref.length; i < len; lineNumber = ++i) {
          lineMap = ref[lineNumber];
          if (lineMap) {
            ref1 = lineMap.columns;
            for (j = 0, len1 = ref1.length; j < len1; j++) {
              mapping = ref1[j];
              if (!(mapping)) {
                continue;
              }
              while (writingline < mapping.line) {
                lastColumn = 0;
                needComma = false;
                buffer += ";";
                writingline++;
              }
              if (needComma) {
                buffer += ",";
                needComma = false;
              }
              buffer += this.encodeVlq(mapping.column - lastColumn);
              lastColumn = mapping.column;
              buffer += this.encodeVlq(0);
              buffer += this.encodeVlq(mapping.sourceLine - lastSourceLine);
              lastSourceLine = mapping.sourceLine;
              buffer += this.encodeVlq(mapping.sourceColumn - lastSourceColumn);
              lastSourceColumn = mapping.sourceColumn;
              needComma = true;
            }
          }
        }
        v3 = {
          version: 3,
          file: options.generatedFile || '',
          sourceRoot: options.sourceRoot || '',
          sources: options.sourceFiles || [''],
          names: [],
          mappings: buffer
        };
        if (options.inlineMap) {
          v3.sourcesContent = [code];
        }
        return v3;
      };
  
      VLQ_SHIFT = 5;
  
      VLQ_CONTINUATION_BIT = 1 << VLQ_SHIFT;
  
      VLQ_VALUE_MASK = VLQ_CONTINUATION_BIT - 1;
  
      SourceMap.prototype.encodeVlq = function(value) {
        var answer, nextChunk, signBit, valueToEncode;
        answer = '';
        signBit = value < 0 ? 1 : 0;
        valueToEncode = (Math.abs(value) << 1) + signBit;
        while (valueToEncode || !answer) {
          nextChunk = valueToEncode & VLQ_VALUE_MASK;
          valueToEncode = valueToEncode >> VLQ_SHIFT;
          if (valueToEncode) {
            nextChunk |= VLQ_CONTINUATION_BIT;
          }
          answer += this.encodeBase64(nextChunk);
        }
        return answer;
      };
  
      BASE64_CHARS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  
      SourceMap.prototype.encodeBase64 = function(value) {
        return BASE64_CHARS[value] || (function() {
          throw new Error("Cannot Base64 encode value: " + value);
        })();
      };
  
      return SourceMap;
  
    })();
  
    module.exports = SourceMap;
  
  }).call(this);
  