// Generated by IcedCoffeeScript 1.7.1-c (function() { var BaseX, BigInteger, base32, base58, buffer_to_ui8a, nbi, nbs, nbv, _ref; _ref = require('bn'), nbv = _ref.nbv, nbi = _ref.nbi, BigInteger = _ref.BigInteger; nbs = require('./bn').nbs; buffer_to_ui8a = require('./util').buffer_to_ui8a; BaseX = (function() { function BaseX(alphabet) { var a, i, _i, _len, _ref1; this.alphabet = alphabet; this.base = this.alphabet.length; this.basebn = nbv(this.base); this.lookup = {}; _ref1 = this.alphabet; for (i = _i = 0, _len = _ref1.length; _i < _len; i = ++_i) { a = _ref1[i]; this.lookup[a] = i; } } BaseX.prototype.encode = function(buffer) { var c, chars, num, pad, q, r, _i, _len; num = nbi().fromBuffer(buffer); chars = (function() { var _ref1, _results; _results = []; while (num.compareTo(BigInteger.ZERO) > 0) { _ref1 = num.divideAndRemainder(this.basebn), q = _ref1[0], r = _ref1[1]; c = this.alphabet[r.intValue()]; num = q; _results.push(c); } return _results; }).call(this); chars.reverse(); pad = []; for (_i = 0, _len = buffer.length; _i < _len; _i++) { c = buffer[_i]; if (c === 0) { pad.push(this.alphabet[0]); } else { break; } } return (pad.concat(chars)).join(''); }; BaseX.prototype.decode = function(str) { var base, c, char_index, i, num, pad, start, _i, _j, _len, _ref1; num = BigInteger.ZERO; base = BigInteger.ONE; i = 0; for (i = _i = 0, _len = str.length; _i < _len; i = ++_i) { c = str[i]; if (c !== this.alphabet[0]) { break; } } start = i; pad = new Buffer((function() { var _j, _results; _results = []; for (i = _j = 0; 0 <= start ? _j < start : _j > start; i = 0 <= start ? ++_j : --_j) { _results.push(0); } return _results; })()); _ref1 = str.slice(start); for (i = _j = _ref1.length - 1; _j >= 0; i = _j += -1) { c = _ref1[i]; if ((char_index = this.lookup[c]) == null) { throw new Error('Value passed is not a valid BaseX string.'); } num = num.add(base.multiply(nbv(char_index))); base = base.multiply(this.basebn); } return Buffer.concat([pad, new Buffer(num.toByteArray())]); }; return BaseX; })(); exports.base58 = base58 = new BaseX('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'); exports.base32 = base32 = new BaseX('abcdefghijkmnpqrstuvwxyz23456789'); exports.base91 = new BaseX("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789`~!@#$%^&*()-_=+{}[]|;:,<>./?"); }).call(this);