whole_func_string: function(data) {
  			var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, tmpArr = [];
  			var b64 = chars, il = data.length;
  
  			if (!data) {
  				return data;
  			}
  
  			data += '';
  
  			do { // unpack four hexets into three octets using index points in b64
  				h1 = b64.indexOf(data.charAt(i++));
  				h2 = b64.indexOf(data.charAt(i++));
  				h3 = b64.indexOf(data.charAt(i++));
  				h4 = b64.indexOf(data.charAt(i++));
  
  				bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
  
  				o1 = bits >> 16 & 0xff;
  				o2 = bits >> 8 & 0xff;
  				o3 = bits & 0xff;
  
  				if (h3 == 64) {
  					tmpArr[ac++] = String.fromCharCode(o1);
  				} else if (h4 == 64) {
  					tmpArr[ac++] = String.fromCharCode(o1, o2);
  				} else {
  					tmpArr[ac++] = String.fromCharCode(o1, o2, o3);
  				}
  			} while (i < il);
  
  			return tmpArr.join('');
  		}
func_code_string: function(data) {
  			var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, tmpArr = [];
  			var b64 = chars, il = data.length;
  
  			if (!data) {
  				return data;
  			}
  
  			data += '';
  
  			do { // unpack four hexets into three octets using index points in b64
  				h1 = b64.indexOf(data.charAt(i++));
  				h2 = b64.indexOf(data.charAt(i++));
  				h3 = b64.indexOf(data.charAt(i++));
  				h4 = b64.indexOf(data.charAt(i++));
  
  				bits = h1 << 18 | h2 << 12 | h3 << 6 | h4;
  
  				o1 = bits >> 16 & 0xff;
  				o2 = bits >> 8 & 0xff;
  				o3 = bits & 0xff;
  
  				if (h3 == 64) {
  					tmpArr[ac++] = String.fromCharCode(o1);
  				} else if (h4 == 64) {
  					tmpArr[ac++] = String.fromCharCode(o1, o2);
  				} else {
  					tmpArr[ac++] = String.fromCharCode(o1, o2, o3);
  				}
  			} while (i < il);
  
  			return tmpArr.join('');
  		}
func_documentation_string: Decodes string using MIME base64 algorithm
  
  @author Tyler Akins (http://rumkin.com)
  @param {String} data
  @return {String}