kennitalajs
Version:
Validation for an Icelandic kennitala (social security number)
445 lines (365 loc) • 181 kB
JavaScript
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){
'use strict';
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var Kennitala = function () {
function Kennitala(kennitala) {
_classCallCheck(this, Kennitala);
var kt = void 0;
if ((kennitala.toString() || '').toLowerCase() === 'fake') {
kt = this.createFakeKennitala();
} else {
kt = kennitala ? kennitala.toString() : '';
}
kt = kt.replace(/-/g, '');
if (kt.length === 9) kt = '0' + kt;
var validate = this.isValid(kt);
if (validate.valid) {
this.type = this.getType(kt);
var age = this.getAge(kt);
return {
valid: validate.valid,
type: this.type,
age: age.years,
msAge: age.msAge,
birthdayToday: age.birthdayToday,
kt: kt,
formattedKt: kt.substr(0, 6) + '-' + kt.substr(6, 10)
};
} else {
return {
valid: validate.valid,
reason: validate.reason,
errorCode: validate.errorCode
};
}
}
_createClass(Kennitala, [{
key: 'randomInt',
value: function randomInt(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
}, {
key: 'createFakeKennitala',
value: function createFakeKennitala() {
// Should be gte 1 and lte 72
// But can not be between 31 and 41
var person_or_company = Math.round(Math.random()) ? 'person' : 'company';
var _1_2 = person_or_company === 'person' ? this.randomInt(1, 31).toString() : this.randomInt(41, 71).toString();
_1_2 = _1_2.length === 1 ? '0' + _1_2 : _1_2;
var _3_4 = this.randomInt(1, 12).toString();
_3_4 = _3_4.length === 1 ? '0' + _3_4 : _3_4;
var _5_6 = this.randomInt(0, 99).toString();
_5_6 = _5_6.length === 1 ? '0' + _5_6 : _5_6;
var _7_8 = this.randomInt(0, 99).toString();
_7_8 = _7_8.length === 1 ? '0' + _7_8 : _7_8;
var list = _1_2 + _3_4 + _5_6 + _7_8;
list = list.split('').map(function (value) {
return parseInt(value, 10);
});
this.currentRadtala = parseInt(_7_8, 10);
var vartala = this.calculateVartala(list);
if (vartala === 10) {
var v = 10;
while (v === 10) {
var calcAgain = this.calculateVartala(list, true);
if (calcAgain !== 10) vartala = calcAgain;
v = calcAgain;
}
}
var _9 = vartala.toString();
var _10 = ['0', '8', '9'][this.randomInt(0, 2)];
return _1_2 + _3_4 + _5_6 + _7_8 + _9 + _10;
}
}, {
key: 'existanceInYears',
value: function existanceInYears(birthday) {
var today = new Date();
var age = today.getUTCFullYear() - birthday.getUTCFullYear();
var m = today.getUTCMonth() - birthday.getUTCMonth();
if (m < 0 || m === 0 && today.getUTCDate() < birthday.getUTCDate()) {
age--;
}
return age;
}
}, {
key: 'getAge',
value: function getAge(kt) {
// This function returns persons age in years and in millisecond along with a boolean
// stating if the kennitala owner has a birthday today
var list = kt.split('');
var century = void 0;
if (list[9] === '0') {
century = 20;
} else if (list[9] === '9') {
century = 19;
} else if (list[9] === '8') {
century = 18;
}
var now = new Date();
var nowMonth = now.getUTCMonth(); //Javascript month (actual month - 1)
var nowDay = now.getUTCDate();
var month = parseInt(list[2] + list[3], 10) - 1; //Javascript month (actual month - 1)
var day = this.type === 'person' ? parseInt(list[0] + list[1], 10) : parseInt(list[0] - 4 + list[1], 10);
var birthday = new Date(parseInt(century + list[4] + list[5], 10), month, day);
var birthdayToday = nowMonth === month && nowDay === day ? true : false;
return {
years: this.existanceInYears(birthday),
msAge: now - birthday,
birthdayToday: birthdayToday
};
}
}, {
key: 'getType',
value: function getType(kt) {
var list = kt.split('');
// Checking if first two digits are between 41 and 71
// if so then this kennitala is a compnay kennitala
var dd = parseInt(list[0] + list[1], 10);
if (dd > 40 && dd < 72) return 'company';
return 'person';
}
}, {
key: 'isValid',
value: function isValid(kt) {
/* Note that kt is a string */
if (kt.length !== 10) return { valid: false, reason: 'Kennitala is too short', errorCode: 1 };
var list = kt.split('');
// Validating digits 1 and 2
// Should be gte 1 and lte 72
// But can not be between 31 and 41
var dd = parseInt(list[0] + list[1], 10);
if (!(dd > 0 && dd < 72) || dd > 31 && dd < 41) return {
valid: false,
reason: 'Birthdate is out of range (digits 1 and 2)',
errorCode: 2
};
// Validating digits 3 and 4
// Must be gt 0 lt 13
var mm = parseInt(list[2] + list[3], 10);
if (!(mm > 0 && mm < 13)) return {
valid: false,
reason: 'Month digits are out of range (digits 3 and 4)',
errorCode: 3
};
//Digits 5,6(years range from 0-99), 7 and 8 can be anything so we cant validate them
// We are storing this in a variable because we need to increement this
// if the calculated "vartala" is 10 and then recalculate with the incremented value
this.currentRadtala = parseInt(list[6] + list[7], 10);
// Turning list of numbers to int (from string)
// since we will be working with ints from now on
list.map(function (value) {
return parseInt(value, 10);
});
//Validating digit 9
if (this.validateNine(list) === false) return {
valid: false,
reason: 'Digit 9 is not valid. Read about "Níundi stafurinn" here: https://is.wikipedia.org/wiki/Kennitala',
errorCode: 4
};
//Validating digit 10
var lastDigit = parseInt(list[9], 10);
if (!(lastDigit === 0 || lastDigit === 8 || lastDigit === 9)) return {
valid: false,
reason: 'Century digit out of range (digit 10)',
errorCode: 5
};
return { valid: true };
}
}, {
key: 'calculateVartala',
value: function calculateVartala(list, incrementRadtala) {
// Vartala is digit number 9
// This url explains how its calculated: https://is.wikipedia.org/wiki/Kennitala'
if (incrementRadtala) {
this.currentRadtala++;
}
var radtala = ('0' + this.currentRadtala.toString()).slice(-2).split('');
var radtalaOne = parseInt(radtala[0], 10);
var radtalaTwo = parseInt(radtala[1], 10);
var sum = list[0] * 3 + list[1] * 2 + list[2] * 7 + list[3] * 6 + list[4] * 5 + list[5] * 4 + radtalaOne * 3 + radtalaTwo * 2;
var mod = sum % 11;
var vartala = mod === 0 ? 0 : 11 - mod;
return vartala;
}
}, {
key: 'validateNine',
value: function validateNine(list) {
var vartala = this.calculateVartala(list);
if (vartala === 10) {
var v = 10;
while (v === 10) {
var calcAgain = this.calculateVartala(list, true);
if (calcAgain !== 10) vartala = calcAgain;
v = calcAgain;
}
}
if (vartala === parseInt(list[8], 10)) {
return true;
}
return false;
}
}]);
return Kennitala;
}();
global.Kennitala = Kennitala;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZha2VfOGMwNTVkODEuanMiXSwibmFtZXMiOlsiS2Vubml0YWxhIiwia2Vubml0YWxhIiwia3QiLCJ0b1N0cmluZyIsInRvTG93ZXJDYXNlIiwiY3JlYXRlRmFrZUtlbm5pdGFsYSIsInJlcGxhY2UiLCJsZW5ndGgiLCJ2YWxpZGF0ZSIsImlzVmFsaWQiLCJ2YWxpZCIsInR5cGUiLCJnZXRUeXBlIiwiYWdlIiwiZ2V0QWdlIiwieWVhcnMiLCJtc0FnZSIsImJpcnRoZGF5VG9kYXkiLCJmb3JtYXR0ZWRLdCIsInN1YnN0ciIsInJlYXNvbiIsImVycm9yQ29kZSIsIm1pbiIsIm1heCIsIk1hdGgiLCJmbG9vciIsInJhbmRvbSIsInBlcnNvbl9vcl9jb21wYW55Iiwicm91bmQiLCJfMV8yIiwicmFuZG9tSW50IiwiXzNfNCIsIl81XzYiLCJfN184IiwibGlzdCIsInNwbGl0IiwibWFwIiwidmFsdWUiLCJwYXJzZUludCIsImN1cnJlbnRSYWR0YWxhIiwidmFydGFsYSIsImNhbGN1bGF0ZVZhcnRhbGEiLCJ2IiwiY2FsY0FnYWluIiwiXzkiLCJfMTAiLCJiaXJ0aGRheSIsInRvZGF5IiwiRGF0ZSIsImdldFVUQ0Z1bGxZZWFyIiwibSIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImNlbnR1cnkiLCJub3ciLCJub3dNb250aCIsIm5vd0RheSIsIm1vbnRoIiwiZGF5IiwiZXhpc3RhbmNlSW5ZZWFycyIsImRkIiwibW0iLCJ2YWxpZGF0ZU5pbmUiLCJsYXN0RGlnaXQiLCJpbmNyZW1lbnRSYWR0YWxhIiwicmFkdGFsYSIsInNsaWNlIiwicmFkdGFsYU9uZSIsInJhZHRhbGFUd28iLCJzdW0iLCJtb2QiLCJnbG9iYWwiXSwibWFwcGluZ3MiOiI7Ozs7OztJQUFNQSxTO0FBQ0YsdUJBQVlDLFNBQVosRUFBdUI7QUFBQTs7QUFDbkIsWUFBSUMsV0FBSjtBQUNBLFlBQUksQ0FBQ0QsVUFBVUUsUUFBVixNQUF3QixFQUF6QixFQUE2QkMsV0FBN0IsT0FBK0MsTUFB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S0FBSyxDQUFMLElBQVUsQ0FGVixHQUdBQSxLQUFLLENBQUwsSUFBVSxDQUhWLEdBSUFBLEtBQUssQ0FBTCxJQUFVLENBSlYsR0FLQUEsS0FBSyxDQUFMLElBQVUsQ0FMVixHQU1BaUMsYUFBYSxDQU5iLEdBT0FDLGFBQWEsQ0FSakI7O0FBVUEsZ0JBQUlFLE1BQU1ELE1BQU0sRUFBaEI7O0FBRUEsZ0JBQU03QixVQUFVOEIsUUFBUSxDQUFSLEdBQVksQ0FBWixHQUFnQixLQUFLQSxHQUFyQztBQUNBLG1CQUFPOUIsT0FBUDtBQUNIOzs7cUNBRVlOLEksRUFBTTtBQUNmLGdCQUFJTSxVQUFVLEtBQUtDLGdCQUFMLENBQXNCUCxJQUF0QixDQUFkOztBQUVBLGdCQUFJTSxZQUFZLEVBQWhCLEVBQW9CO0FBQ2hCLG9CQUFJRSxJQUFJLEVBQVI7QUFDQSx1QkFBT0EsTUFBTSxFQUFiLEVBQWlCO0FBQ2Isd0JBQU1DLFlBQVksS0FBS0YsZ0JBQUwsQ0FBc0JQLElBQXRCLEVBQTRCLElBQTVCLENBQWxCO0FBQ0Esd0JBQUlTLGNBQWMsRUFBbEIsRUFBc0JILFVBQVVHLFNBQVY7QUFDdEJELHdCQUFJQyxTQUFKO0FBQ0g7QUFDSjs7QUFFRCxnQkFBSUgsWUFBWUYsU0FBU0osS0FBSyxDQUFMLENBQVQsRUFBa0IsRUFBbEIsQ0FBaEIsRUFBdUM7QUFDbkMsdUJBQU8sSUFBUDtBQUNIOztBQUVELG1CQUFPLEtBQVA7QUFDSDs7Ozs7O0FBR0xxQyxPQUFPdkUsU0FBUCxHQUFtQkEsU0FBbkIiLCJmaWxlIjoiZmFrZV84YzA1NWQ4MS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNsYXNzIEtlbm5pdGFsYSB7XHJcbiAgICBjb25zdHJ1Y3RvcihrZW5uaXRhbGEpIHtcclxuICAgICAgICBsZXQga3Q7XHJcbiAgICAgICAgaWYgKChrZW5uaXRhbGEudG9TdHJpbmcoKSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2Zha2UnKSB7XHJcbiAgICAgICAgICAgIGt0ID0gdGhpcy5jcmVhdGVGYWtlS2Vubml0YWxhKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAga3QgPSBrZW5uaXRhbGEgPyBrZW5uaXRhbGEudG9TdHJpbmcoKSA6ICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAga3QgPSBrdC5yZXBsYWNlKC8tL2csICcnKTtcclxuICAgICAgICBpZiAoa3QubGVuZ3RoID09PSA5KSBrdCA9ICcwJyArIGt0O1xyXG4gICAgICAgIGNvbnN0IHZhbGlkYXRlID0gdGhpcy5pc1ZhbGlkKGt0KTtcclxuXHJcbiAgICAgICAgaWYgKHZhbGlkYXRlLnZhbGlkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IHRoaXMuZ2V0VHlwZShrdCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFnZSA9IHRoaXMuZ2V0QWdlKGt0KTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZDogdmFsaWRhdGUudmFsaWQsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiB0aGlzLnR5cGUsXHJcbiAgICAgICAgICAgICAgICBhZ2U6IGFnZS55ZWFycyxcclxuICAgICAgICAgICAgICAgIG1zQWdlOiBhZ2UubXNBZ2UsXHJcbiAgICAgICAgICAgICAgICBiaXJ0aGRheVRvZGF5OiBhZ2UuYmlydGhkYXlUb2RheSxcclxuICAgICAgICAgICAgICAgIGt0OiBrdCxcclxuICAgICAgICAgICAgICAgIGZvcm1hdHRlZEt0OiBrdC5zdWJzdHIoMCwgNikgKyAnLScgKyBrdC5zdWJzdHIoNiwgMTApLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZDogdmFsaWRhdGUudmFsaWQsXHJcbiAgICAgICAgICAgICAgICByZWFzb246IHZhbGlkYXRlLnJlYXNvbixcclxuICAgICAgICAgICAgICAgIGVycm9yQ29kZTogdmFsaWRhdGUuZXJyb3JDb2RlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByYW5kb21JbnQobWluLCBtYXgpIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKTtcclxuICAgIH1cclxuXHJcbiAgICBjcmVhdGVGYWtlS2Vubml0YWxhKCkge1xyXG4gICAgICAgIC8vIFNob3VsZCBiZSBndGUgMSBhbmQgbHRlIDcyXHJcbiAgICAgICAgLy8gQnV0IGNhbiBub3QgYmUgYmV0d2VlbiAzMSBhbmQgNDFcclxuICAgICAgICBjb25zdCBwZXJzb25fb3JfY29tcGFueSA9IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSkgPyAncGVyc29uJyA6ICdjb21wYW55JztcclxuXHJcbiAgICAgICAgbGV0IF8xXzIgPVxyXG4gICAgICAgICAgICBwZXJzb25fb3JfY29tcGFueSA9PT0gJ3BlcnNvbicgPyB0aGlzLnJhbmRvbUludCgxLCAzMSkudG9TdHJpbmcoKSA6IHRoaXMucmFuZG9tSW50KDQxLCA3MSkudG9TdHJpbmcoKTtcclxuICAgICAgICBfMV8yID0gXzFfMi5sZW5ndGggPT09IDEgPyAnMCcgKyBfMV8yIDogXzFfMjtcclxuXHJcbiAgICAgICAgbGV0IF8zXzQgPSB0aGlzLnJhbmRvbUludCgxLCAxMikudG9TdHJpbmcoKTtcclxuICAgICAgICBfM180ID0gXzNfNC5sZW5ndGggPT09IDEgPyAnMCcgKyBfM180IDogXzNfNDtcclxuXHJcbiAgICAgICAgbGV0IF81XzYgPSB0aGlzLnJhbmRvbUludCgwLCA5OSkudG9TdHJpbmcoKTtcclxuICAgICAgICBfNV82ID0gXzVfNi5sZW5ndGggPT09IDEgPyAnMCcgKyBfNV82IDogXzVfNjtcclxuXHJcbiAgICAgICAgbGV0IF83XzggPSB0aGlzLnJhbmRvbUludCgwLCA5OSkudG9TdHJpbmcoKTtcclxuICAgICAgICBfN184ID0gXzdfOC5sZW5ndGggPT09IDEgPyAnMCcgKyBfN184IDogXzdfODtcclxuXHJcbiAgICAgICAgbGV0IGxpc3QgPSBfMV8yICsgXzNfNCArIF81XzYgKyBfN184O1xyXG4gICAgICAgIGxpc3QgPSBsaXN0LnNwbGl0KCcnKS5tYXAoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRSYWR0YWxhID0gcGFyc2VJbnQoXzdfOCwgMTApO1xyXG4gICAgICAgIGxldCB2YXJ0YWxhID0gdGhpcy5jYWxjdWxhdGVWYXJ0YWxhKGxpc3QpO1xyXG5cclxuICAgICAgICBpZiAodmFydGFsYSA9PT0gMTApIHtcclxuICAgICAgICAgICAgbGV0IHYgPSAxMDtcclxuICAgICAgICAgICAgd2hpbGUgKHYgPT09IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxjQWdhaW4gPSB0aGlzLmNhbGN1bGF0ZVZhcnRhbGEobGlzdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsY0FnYWluICE9PSAxMCkgdmFydGFsYSA9IGNhbGNBZ2FpbjtcclxuICAgICAgICAgICAgICAgIHYgPSBjYWxjQWdhaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBfOSA9IHZhcnRhbGEudG9TdHJpbmcoKTtcclxuXHJcbiAgICAgICAgbGV0IF8xMCA9IFsnMCcsICc4JywgJzknXVt0aGlzLnJhbmRvbUludCgwLCAyKV07XHJcblxyXG4gICAgICAgIHJldHVybiBfMV8yICsgXzNfNCArIF81XzYgKyBfN184ICsgXzkgKyBfMTA7XHJcbiAgICB9XHJcblxyXG4gICAgZXhpc3RhbmNlSW5ZZWFycyhiaXJ0aGRheSkge1xyXG4gICAgICAgIHZhciB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgdmFyIGFnZSA9IHRvZGF5LmdldFVUQ0Z1bGxZZWFyKCkgLSBiaXJ0aGRheS5nZXRVVENGdWxsWWVhcigpO1xyXG4gICAgICAgIHZhciBtID0gdG9kYXkuZ2V0VVRDTW9udGgoKSAtIGJpcnRoZGF5LmdldFVUQ01vbnRoKCk7XHJcbiAgICAgICAgaWYgKG0gPCAwIHx8IChtID09PSAwICYmIHRvZGF5LmdldFVUQ0RhdGUoKSA8IGJpcnRoZGF5LmdldFVUQ0RhdGUoKSkpIHtcclxuICAgICAgICAgICAgYWdlLS07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWdlKGt0KSB7XHJcbiAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHBlcnNvbnMgYWdlIGluIHllYXJzIGFuZCBpbiBtaWxsaXNlY29uZCBhbG9uZyB3aXRoIGEgYm9vbGVhblxyXG4gICAgICAgIC8vIHN0YXRpbmcgaWYgdGhlIGtlbm5pdGFsYSBvd25lciBoYXMgYSBiaXJ0aGRheSB0b2RheVxyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBrdC5zcGxpdCgnJyk7XHJcblxyXG4gICAgICAgIGxldCBjZW50dXJ5O1xyXG5cclxuICAgICAgICBpZiAobGlzdFs5XSA9PT0gJzAnKSB7XHJcbiAgICAgICAgICAgIGNlbnR1cnkgPSAyMDtcclxuICAgICAgICB9IGVsc2UgaWYgKGxpc3RbOV0gPT09ICc5Jykge1xyXG4gICAgICAgICAgICBjZW50dXJ5ID0gMTk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsaXN0WzldID09PSAnOCcpIHtcclxuICAgICAgICAgICAgY2VudHVyeSA9IDE4O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBub3dNb250aCA9IG5vdy5nZXRVVENNb250aCgpOyAvL0phdmFzY3JpcHQgbW9udGggKGFjdHVhbCBtb250aCAtIDEpXHJcbiAgICAgICAgY29uc3Qgbm93RGF5ID0gbm93LmdldFVUQ0RhdGUoKTtcclxuXHJcbiAgICAgICAgY29uc3QgbW9udGggPSBwYXJzZUludChsaXN0WzJdICsgbGlzdFszXSwgMTApIC0gMTsgLy9KYXZhc2NyaXB0IG1vbnRoIChhY3R1YWwgbW9udGggLSAxKVxyXG4gICAgICAgIGNvbnN0IGRheSA9IHRoaXMudHlwZSA9PT0gJ3BlcnNvbicgPyBwYXJzZUludChsaXN0WzBdICsgbGlzdFsxXSwgMTApIDogcGFyc2VJbnQobGlzdFswXSAtIDQgKyBsaXN0WzFdLCAxMCk7XHJcbiAgICAgICAgY29uc3QgYmlydGhkYXkgPSBuZXcgRGF0ZShwYXJzZUludChjZW50dXJ5ICsgbGlzdFs0XSArIGxpc3RbNV0sIDEwKSwgbW9udGgsIGRheSk7XHJcblxyXG4gICAgICAgIGNvbnN0IGJpcnRoZGF5VG9kYXkgPSBub3dNb250aCA9PT0gbW9udGggJiYgbm93RGF5ID09PSBkYXkgPyB0cnVlIDogZmFsc2U7XHJcblxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHllYXJzOiB0aGlzLmV4aXN0YW5jZUluWWVhcnMoYmlydGhkYXkpLFxyXG4gICAgICAgICAgICBtc0FnZTogbm93IC0gYmlydGhkYXksXHJcbiAgICAgICAgICAgIGJpcnRoZGF5VG9kYXksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUeXBlKGt0KSB7XHJcbiAgICAgICAgY29uc3QgbGlzdCA9IGt0LnNwbGl0KCcnKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2tpbmcgaWYgZmlyc3QgdHdvIGRpZ2l0cyBhcmUgYmV0d2VlbiA0MSBhbmQgNzFcclxuICAgICAgICAvLyBpZiBzbyB0aGVuIHRoaXMga2Vubml0YWxhIGlzIGEgY29tcG5heSBrZW5uaXRhbGFcclxuICAgICAgICBjb25zdCBkZCA9IHBhcnNlSW50KGxpc3RbMF0gKyBsaXN0WzFdLCAxMCk7XHJcbiAgICAgICAgaWYgKGRkID4gNDAgJiYgZGQgPCA3MikgcmV0dXJuICdjb21wYW55JztcclxuXHJcbiAgICAgICAgcmV0dXJuICdwZXJzb24nO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVmFsaWQoa3QpIHtcclxuICAgICAgICAvKiBOb3RlIHRoYXQga3QgaXMgYSBzdHJpbmcgKi9cclxuICAgICAgICBpZiAoa3QubGVuZ3RoICE9PSAxMCkgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlLCByZWFzb246ICdLZW5uaXRhbGEgaXMgdG9vIHNob3J0JywgZXJyb3JDb2RlOiAxIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGxpc3QgPSBrdC5zcGxpdCgnJyk7XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRpbmcgZGlnaXRzIDEgYW5kIDJcclxuICAgICAgICAvLyBTaG91bGQgYmUgZ3RlIDEgYW5kIGx0ZSA3MlxyXG4gICAgICAgIC8vIEJ1dCBjYW4gbm90IGJlIGJldHdlZW4gMzEgYW5kIDQxXHJcbiAgICAgICAgY29uc3QgZGQgPSBwYXJzZUludChsaXN0WzBdICsgbGlzdFsxXSwgMTApO1xyXG4gICAgICAgIGlmICghKGRkID4gMCAmJiBkZCA8IDcyKSB8fCAoZGQgPiAzMSAmJiBkZCA8IDQxKSlcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlYXNvbjogJ0JpcnRoZGF0ZSBpcyBvdXQgb2YgcmFuZ2UgKGRpZ2l0cyAxIGFuZCAyKScsXHJcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IDIsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vIFZhbGlkYXRpbmcgZGlnaXRzIDMgYW5kIDRcclxuICAgICAgICAvLyBNdXN0IGJlIGd0IDAgbHQgMTNcclxuICAgICAgICBjb25zdCBtbSA9IHBhcnNlSW50KGxpc3RbMl0gKyBsaXN0WzNdLCAxMCk7XHJcbiAgICAgICAgaWYgKCEobW0gPiAwICYmIG1tIDwgMTMpKVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgcmVhc29uOiAnTW9udGggZGlnaXRzIGFyZSBvdXQgb2YgcmFuZ2UgKGRpZ2l0cyAzIGFuZCA0KScsXHJcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IDMsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vRGlnaXRzIDUsNih5ZWFycyByYW5nZSBmcm9tIDAtOTkpLCA3IGFuZCA4IGNhbiBiZSBhbnl0aGluZyBzbyB3ZSBjYW50IHZhbGlkYXRlIHRoZW1cclxuXHJcbiAgICAgICAgLy8gV2UgYXJlIHN0b3JpbmcgdGhpcyBpbiBhIHZhcmlhYmxlIGJlY2F1c2Ugd2UgbmVlZCB0byBpbmNyZWVtZW50IHRoaXNcclxuICAgICAgICAvLyBpZiB0aGUgY2FsY3VsYXRlZCBcInZhcnRhbGFcIiBpcyAxMCBhbmQgdGhlbiByZWNhbGN1bGF0ZSB3aXRoIHRoZSBpbmNyZW1lbnRlZCB2YWx1ZVxyXG4gICAgICAgIHRoaXMuY3VycmVudFJhZHRhbGEgPSBwYXJzZUludChsaXN0WzZdICsgbGlzdFs3XSwgMTApO1xyXG5cclxuICAgICAgICAvLyBUdXJuaW5nIGxpc3Qgb2YgbnVtYmVycyB0byBpbnQgKGZyb20gc3RyaW5nKVxyXG4gICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgYmUgd29ya2luZyB3aXRoIGludHMgZnJvbSBub3cgb25cclxuICAgICAgICBsaXN0Lm1hcCgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KHZhbHVlLCAxMCk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vVmFsaWRhdGluZyBkaWdpdCA5XHJcbiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVOaW5lKGxpc3QpID09PSBmYWxzZSlcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHJlYXNvbjpcclxuICAgICAgICAgICAgICAgICAgICAnRGlnaXQgOSBpcyBub3QgdmFsaWQuIFJlYWQgYWJvdXQgXCJOw611bmRpIHN0YWZ1cmlublwiIGhlcmU6IGh0dHBzOi8vaXMud2lraXBlZGlhLm9yZy93aWtpL0tlbm5pdGFsYScsXHJcbiAgICAgICAgICAgICAgICBlcnJvckNvZGU6IDQsXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgIC8vVmFsaWRhdGluZyBkaWdpdCAxMFxyXG4gICAgICAgIGNvbnN0IGxhc3REaWdpdCA9IHBhcnNlSW50KGxpc3RbOV0sIDEwKTtcclxuICAgICAgICBpZiAoIShsYXN0RGlnaXQgPT09IDAgfHwgbGFzdERpZ2l0ID09PSA4IHx8IGxhc3REaWdpdCA9PT0gOSkpXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZWFzb246ICdDZW50dXJ5IGRpZ2l0IG91dCBvZiByYW5nZSAoZGlnaXQgMTApJyxcclxuICAgICAgICAgICAgICAgIGVycm9yQ29kZTogNSxcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUgfTtcclxuICAgIH1cclxuXHJcbiAgICBjYWxjdWxhdGVWYXJ0YWxhKGxpc3QsIGluY3JlbWVudFJhZHRhbGEpIHtcclxuICAgICAgICAvLyBWYXJ0YWxhIGlzIGRpZ2l0IG51bWJlciA5XHJcbiAgICAgICAgLy8gVGhpcyB1cmwgZXhwbGFpbnMgaG93IGl0cyBjYWxjdWxhdGVkOiBodHRwczovL2lzLndpa2lwZWRpYS5vcmcvd2lraS9LZW5uaXRhbGEnXHJcblxyXG4gICAgICAgIGlmIChpbmNyZW1lbnRSYWR0YWxhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFJhZHRhbGErKztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJhZHRhbGEgPSAoJzAnICsgdGhpcy5jdXJyZW50UmFkdGFsYS50b1N0cmluZygpKS5zbGljZSgtMikuc3BsaXQoJycpO1xyXG5cclxuICAgICAgICBjb25zdCByYWR0YWxhT25lID0gcGFyc2VJbnQocmFkdGFsYVswXSwgMTApO1xyXG4gICAgICAgIGNvbnN0IHJhZHRhbGFUd28gPSBwYXJzZUludChyYWR0YWxhWzFdLCAxMCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN1bSA9XHJcbiAgICAgICAgICAgIGxpc3RbMF0gKiAzICtcclxuICAgICAgICAgICAgbGlzdFsxXSAqIDIgK1xyXG4gICAgICAgICAgICBsaXN0WzJdICogNyArXHJcbiAgICAgICAgICAgIGxpc3RbM10gKiA2ICtcclxuICAgICAgICAgICAgbGlzdFs0XSAqIDUgK1xyXG4gICAgICAgICAgICBsaXN0WzVdICogNCArXHJcbiAgICAgICAgICAgIHJhZHRhbGFPbmUgKiAzICtcclxuICAgICAgICAgICAgcmFkdGFsYVR3byAqIDI7XHJcblxyXG4gICAgICAgIGxldCBtb2QgPSBzdW0gJSAxMTtcclxuXHJcbiAgICAgICAgY29uc3QgdmFydGFsYSA9IG1vZCA9PT0gMCA/IDAgOiAxMSAtIG1vZDtcclxuICAgICAgICByZXR1cm4gdmFydGFsYTtcclxuICAgIH1cclxuXHJcbiAgICB2YWxpZGF0ZU5pbmUobGlzdCkge1xyXG4gICAgICAgIGxldCB2YXJ0YWxhID0gdGhpcy5jYWxjdWxhdGVWYXJ0YWxhKGxpc3QpO1xyXG5cclxuICAgICAgICBpZiAodmFydGFsYSA9PT0gMTApIHtcclxuICAgICAgICAgICAgbGV0IHYgPSAxMDtcclxuICAgICAgICAgICAgd2hpbGUgKHYgPT09IDEwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYWxjQWdhaW4gPSB0aGlzLmNhbGN1bGF0ZVZhcnRhbGEobGlzdCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsY0FnYWluICE9PSAxMCkgdmFydGFsYSA9IGNhbGNBZ2FpbjtcclxuICAgICAgICAgICAgICAgIHYgPSBjYWxjQWdhaW47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YXJ0YWxhID09PSBwYXJzZUludChsaXN0WzhdLCAxMCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbn1cclxuXHJcbmdsb2JhbC5LZW5uaXRhbGEgPSBLZW5uaXRhbGE7XHJcbiJdfQ==
}).call(this,require("U9cQDF"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/fake_8c055d81.js","/")
},{"U9cQDF":3,"buffer":4}],2:[function(require,module,exports){
(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){
'use strict';
var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
;(function (exports) {
'use strict';
var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;
var PLUS = '+'.charCodeAt(0);
var SLASH = '/'.charCodeAt(0);
var NUMBER = '0'.charCodeAt(0);
var LOWER = 'a'.charCodeAt(0);
var UPPER = 'A'.charCodeAt(0);
var PLUS_URL_SAFE = '-'.charCodeAt(0);
var SLASH_URL_SAFE = '_'.charCodeAt(0);
function decode(elt) {
var code = elt.charCodeAt(0);
if (code === PLUS || code === PLUS_URL_SAFE) return 62; // '+'
if (code === SLASH || code === SLASH_URL_SAFE) return 63; // '/'
if (code < NUMBER) return -1; //no match
if (code < NUMBER + 10) return code - NUMBER + 26 + 26;
if (code < UPPER + 26) return code - UPPER;
if (code < LOWER + 26) return code - LOWER + 26;
}
function b64ToByteArray(b64) {
var i, j, l, tmp, placeHolders, arr;
if (b64.length % 4 > 0) {
throw new Error('Invalid string. Length must be a multiple of 4');
}
// the number of equal signs (place holders)
// if there are two placeholders, than the two characters before it
// represent one byte
// if there is only one, then the three characters before it represent 2 bytes
// this is just a cheap hack to not do indexOf twice
var len = b64.length;
placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0;
// base64 is 4/3 + up to two characters of the original data
arr = new Arr(b64.length * 3 / 4 - placeHolders);
// if there are placeholders, only get up to the last complete 4 chars
l = placeHolders > 0 ? b64.length - 4 : b64.length;
var L = 0;
function push(v) {
arr[L++] = v;
}
for (i = 0, j = 0; i < l; i += 4, j += 3) {
tmp = decode(b64.charAt(i)) << 18 | decode(b64.charAt(i + 1)) << 12 | decode(b64.charAt(i + 2)) << 6 | decode(b64.charAt(i + 3));
push((tmp & 0xFF0000) >> 16);
push((tmp & 0xFF00) >> 8);
push(tmp & 0xFF);
}
if (placeHolders === 2) {
tmp = decode(b64.charAt(i)) << 2 | decode(b64.charAt(i + 1)) >> 4;
push(tmp & 0xFF);
} else if (placeHolders === 1) {
tmp = decode(b64.charAt(i)) << 10 | decode(b64.charAt(i + 1)) << 4 | decode(b64.charAt(i + 2)) >> 2;
push(tmp >> 8 & 0xFF);
push(tmp & 0xFF);
}
return arr;
}
function uint8ToBase64(uint8) {
var i,
extraBytes = uint8.length % 3,
// if we have 1 byte left, pad 2 bytes
output = "",
temp,
length;
function encode(num) {
return lookup.charAt(num);
}
function tripletToBase64(num) {
return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F);
}
// go through the array every three bytes, we'll deal with trailing stuff later
for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + uint8[i + 2];
output += tripletToBase64(temp);
}
// pad the end with zeros, but make sure to not forget the extra bytes
switch (extraBytes) {
case 1:
temp = uint8[uint8.length - 1];
output += encode(temp >> 2);
output += encode(temp << 4 & 0x3F);
output += '==';
break;
case 2:
temp = (uint8[uint8.length - 2] << 8) + uint8[uint8.length - 1];
output += encode(temp >> 10);
output += encode(temp >> 4 & 0x3F);
output += encode(temp << 2 & 0x3F);
output += '=';
break;
}
return output;
}
exports.toByteArray = b64ToByteArray;
exports.fromByteArray = uint8ToBase64;
})(typeof exports === 'undefined' ? undefined.base64js = {} : exports);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImI2NC5qcyJdLCJuYW1lcyI6WyJsb29rdXAiLCJleHBvcnRzIiwiQXJyIiwiVWludDhBcnJheSIsIkFycmF5IiwiUExVUyIsImNoYXJDb2RlQXQiLCJTTEFTSCIsIk5VTUJFUiIsIkxPV0VSIiwiVVBQRVIiLCJQTFVTX1VSTF9TQUZFIiwiU0xBU0hfVVJMX1NBRkUiLCJkZWNvZGUiLCJlbHQiLCJjb2RlIiwiYjY0VG9CeXRlQXJyYXkiLCJiNjQiLCJpIiwiaiIsImwiLCJ0bXAiLCJwbGFjZUhvbGRlcnMiLCJhcnIiLCJsZW5ndGgiLCJFcnJvciIsImxlbiIsImNoYXJBdCIsIkwiLCJwdXNoIiwidiIsInVpbnQ4VG9CYXNlNjQiLCJ1aW50OCIsImV4dHJhQnl0ZXMiLCJvdXRwdXQiLCJ0ZW1wIiwiZW5jb2RlIiwibnVtIiwidHJpcGxldFRvQmFzZTY0IiwidG9CeXRlQXJyYXkiLCJmcm9tQnl0ZUFycmF5IiwiYmFzZTY0anMiXSwibWFwcGluZ3MiOiI7O0FBQUEsSUFBSUEsU0FBUyxrRUFBYjs7QUFFQSxDQUFFLFdBQVVDLE9BQVYsRUFBbUI7QUFDcEI7O0FBRUMsS0FBSUMsTUFBTyxPQUFPQyxVQUFQLEtBQXNCLFdBQXZCLEdBQ05BLFVBRE0sR0FFTkMsS0FGSjs7QUFJRCxLQUFJQyxPQUFTLElBQUlDLFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJQyxRQUFTLElBQUlELFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJRSxTQUFTLElBQUlGLFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJRyxRQUFTLElBQUlILFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJSSxRQUFTLElBQUlKLFVBQUosQ0FBZSxDQUFmLENBQWI7QUFDQSxLQUFJSyxnQkFBZ0IsSUFBSUwsVUFBSixDQUFlLENBQWYsQ0FBcEI7QUFDQSxLQUFJTSxpQkFBaUIsSUFBSU4sVUFBSixDQUFlLENBQWYsQ0FBckI7O0FBRUEsVUFBU08sTUFBVCxDQUFpQkMsR0FBakIsRUFB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QUFQO0FBQ0FVLGNBQVVFLE9BQU9ELFFBQVEsQ0FBZixDQUFWO0FBQ0FELGNBQVVFLE9BQVFELFFBQVEsQ0FBVCxHQUFjLElBQXJCLENBQVY7QUFDQUQsY0FBVSxJQUFWO0FBQ0E7QUFDRCxRQUFLLENBQUw7QUFDQ0MsV0FBTyxDQUFDSCxNQUFNQSxNQUFNUixNQUFOLEdBQWUsQ0FBckIsS0FBMkIsQ0FBNUIsSUFBa0NRLE1BQU1BLE1BQU1SLE1BQU4sR0FBZSxDQUFyQixDQUF6QztBQUNBVSxjQUFVRSxPQUFPRCxRQUFRLEVBQWYsQ0FBVjtBQUNBRCxjQUFVRSxPQUFRRCxRQUFRLENBQVQsR0FBYyxJQUFyQixDQUFWO0FBQ0FELGNBQVVFLE9BQVFELFFBQVEsQ0FBVCxHQUFjLElBQXJCLENBQVY7QUFDQUQsY0FBVSxHQUFWO0FBQ0E7QUFiRjs7QUFnQkEsU0FBT0EsTUFBUDtBQUNBOztBQUVEakMsU0FBUXNDLFdBQVIsR0FBc0J2QixjQUF0QjtBQUNBZixTQUFRdUMsYUFBUixHQUF3QlQsYUFBeEI7QUFDQSxDQXpIQyxFQXlIQSxPQUFPOUIsT0FBUCxLQUFtQixXQUFuQixHQUFrQyxVQUFLd0MsUUFBTCxHQUFnQixFQUFsRCxHQUF3RHhDLE9Bekh4RCxDQUFEIiwiZmlsZSI6ImI2NC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBsb29rdXAgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyc7XG5cbjsoZnVuY3Rpb24gKGV4cG9ydHMpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG4gIHZhciBBcnIgPSAodHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnKVxuICAgID8gVWludDhBcnJheVxuICAgIDogQXJyYXlcblxuXHR2YXIgUExVUyAgID0gJysnLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIICA9ICcvJy5jaGFyQ29kZUF0KDApXG5cdHZhciBOVU1CRVIgPSAnMCcuY2hhckNvZGVBdCgwKVxuXHR2YXIgTE9XRVIgID0gJ2EnLmNoYXJDb2RlQXQoMClcblx0dmFyIFVQUEVSICA9ICdBJy5jaGFyQ29kZUF0KDApXG5cdHZhciBQTFVTX1VSTF9TQUZFID0gJy0nLmNoYXJDb2RlQXQoMClcblx0dmFyIFNMQVNIX1VSTF9TQUZFID0gJ18nLmNoYXJDb2RlQXQoMClcblxuXHRmdW5jdGlvbiBkZWNvZGUgKGVsdCkge1xuXHRcdHZhciBjb2RlID0gZWx0LmNoYXJDb2RlQXQoMClcblx0XHRpZiAoY29kZSA9PT0gUExVUyB8fFxuXHRcdCAgICBjb2RlID09PSBQTFVTX1VSTF9TQUZFKVxuXHRcdFx0cmV0dXJuIDYyIC8vICcrJ1xuXHRcdGlmIChjb2RlID09PSBTTEFTSCB8fFxuXHRcdCAgICBjb2RlID09PSBTTEFTSF9VUkxfU0FGRSlcblx0XHRcdHJldHVybiA2MyAvLyAnLydcblx0XHRpZiAoY29kZSA8IE5VTUJFUilcblx0XHRcdHJldHVybiAtMSAvL25vIG1hdGNoXG5cdFx0aWYgKGNvZGUgPCBOVU1CRVIgKyAxMClcblx0XHRcdHJldHVybiBjb2RlIC0gTlVNQkVSICsgMjYgKyAyNlxuXHRcdGlmIChjb2RlIDwgVVBQRVIgKyAyNilcblx0XHRcdHJldHVybiBjb2RlIC0gVVBQRVJcblx0XHRpZiAoY29kZSA8IExPV0VSICsgMjYpXG5cdFx0XHRyZXR1cm4gY29kZSAtIExPV0VSICsgMjZcblx0fVxuXG5cdGZ1bmN0aW9uIGI2NFRvQnl0ZUFycmF5IChiNjQpIHtcblx0XHR2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuXG5cdFx0aWYgKGI2NC5sZW5ndGggJSA0ID4gMCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0Jylcblx0XHR9XG5cblx0XHQvLyB0aGUgbnVtYmVyIG9mIGVxdWFsIHNpZ25zIChwbGFjZSBob2xkZXJzKVxuXHRcdC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcblx0XHQvLyByZXByZXNlbnQgb25lIGJ5dGVcblx0XHQvLyBpZiB0aGVyZSBpcyBvbmx5IG9uZSwgdGhlbiB0aGUgdGhyZWUgY2hhcmFjdGVycyBiZWZvcmUgaXQgcmVwcmVzZW50IDIgYnl0ZXNcblx0XHQvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG5cdFx0dmFyIGxlbiA9IGI2NC5sZW5ndGhcblx0XHRwbGFjZUhvbGRlcnMgPSAnPScgPT09IGI2NC5jaGFyQXQobGVuIC0gMikgPyAyIDogJz0nID09PSBiNjQuY2hhckF0KGxlbiAtIDEpID8gMSA6IDBcblxuXHRcdC8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuXHRcdGFyciA9IG5ldyBBcnIoYjY0Lmxlbmd0aCAqIDMgLyA0IC0gcGxhY2VIb2xkZXJzKVxuXG5cdFx0Ly8gaWYgdGhlcmUgYXJlIHBsYWNlaG9sZGVycywgb25seSBnZXQgdXAgdG8gdGhlIGxhc3QgY29tcGxldGUgNCBjaGFyc1xuXHRcdGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gYjY0Lmxlbmd0aCAtIDQgOiBiNjQubGVuZ3RoXG5cblx0XHR2YXIgTCA9IDBcblxuXHRcdGZ1bmN0aW9uIHB1c2ggKHYpIHtcblx0XHRcdGFycltMKytdID0gdlxuXHRcdH1cblxuXHRcdGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTgpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgMTIpIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAyKSkgPDwgNikgfCBkZWNvZGUoYjY0LmNoYXJBdChpICsgMykpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDAwMCkgPj4gMTYpXG5cdFx0XHRwdXNoKCh0bXAgJiAweEZGMDApID4+IDgpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fVxuXG5cdFx0aWYgKHBsYWNlSG9sZGVycyA9PT0gMikge1xuXHRcdFx0dG1wID0gKGRlY29kZShiNjQuY2hhckF0KGkpKSA8PCAyKSB8IChkZWNvZGUoYjY0LmNoYXJBdChpICsgMSkpID4+IDQpXG5cdFx0XHRwdXNoKHRtcCAmIDB4RkYpXG5cdFx0fSBlbHNlIGlmIChwbGFjZUhvbGRlcnMgPT09IDEpIHtcblx0XHRcdHRtcCA9IChkZWNvZGUoYjY0LmNoYXJBdChpKSkgPDwgMTApIHwgKGRlY29kZShiNjQuY2hhckF0KGkgKyAxKSkgPDwgNCkgfCAoZGVjb2RlKGI2NC5jaGFyQXQoaSArIDIpKSA+PiAyKVxuXHRcdFx0cHVzaCgodG1wID4+IDgpICYgMHhGRilcblx0XHRcdHB1c2godG1wICYgMHhGRilcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJyXG5cdH1cblxuXHRmdW5jdGlvbiB1aW50OFRvQmFzZTY0ICh1aW50OCkge1xuXHRcdHZhciBpLFxuXHRcdFx0ZXh0cmFCeXRlcyA9IHVpbnQ4Lmxlbmd0aCAlIDMsIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG5cdFx0XHRvdXRwdXQgPSBcIlwiLFxuXHRcdFx0dGVtcCwgbGVuZ3RoXG5cblx0XHRmdW5jdGlvbiBlbmNvZGUgKG51bSkge1xuXHRcdFx0cmV0dXJuIGxvb2t1cC5jaGFyQXQobnVtKVxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG5cdFx0XHRyZXR1cm4gZW5jb2RlKG51bSA+PiAxOCAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiAxMiAmIDB4M0YpICsgZW5jb2RlKG51bSA+PiA2ICYgMHgzRikgKyBlbmNvZGUobnVtICYgMHgzRilcblx0XHR9XG5cblx0XHQvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG5cdFx0Zm9yIChpID0gMCwgbGVuZ3RoID0gdWludDgubGVuZ3RoIC0gZXh0cmFCeXRlczsgaSA8IGxlbmd0aDsgaSArPSAzKSB7XG5cdFx0XHR0ZW1wID0gKHVpbnQ4W2ldIDw8IDE2KSArICh1aW50OFtpICsgMV0gPDwgOCkgKyAodWludDhbaSArIDJdKVxuXHRcdFx0b3V0cHV0ICs9IHRyaXBsZXRUb0Jhc2U2NCh0ZW1wKVxuXHRcdH1cblxuXHRcdC8vIHBhZCB0aGUgZW5kIHdpdGggemVyb3MsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGZvcmdldCB0aGUgZXh0cmEgYnl0ZXNcblx0XHRzd2l0Y2ggKGV4dHJhQnl0ZXMpIHtcblx0XHRcdGNhc2UgMTpcblx0XHRcdFx0dGVtcCA9IHVpbnQ4W3VpbnQ4Lmxlbmd0aCAtIDFdXG5cdFx0XHRcdG91dHB1dCArPSBlbmNvZGUodGVtcCA+PiAyKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wIDw8IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9ICc9PSdcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0dGVtcCA9ICh1aW50OFt1aW50OC5sZW5ndGggLSAyXSA8PCA4KSArICh1aW50OFt1aW50OC5sZW5ndGggLSAxXSlcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSh0ZW1wID4+IDEwKVxuXHRcdFx0XHRvdXRwdXQgKz0gZW5jb2RlKCh0ZW1wID4+IDQpICYgMHgzRilcblx0XHRcdFx0b3V0cHV0ICs9IGVuY29kZSgodGVtcCA8PCAyKSAmIDB4M0YpXG5cdFx0XHRcdG91dHB1dCArPSAnPSdcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cblxuXHRleHBvcnRzLnRvQnl0ZUFycmF5ID0gYjY0VG9CeXRlQXJyYXlcblx0ZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gdWludDhUb0Jhc2U2NFxufSh0eXBlb2YgZXhwb3J0cyA9PT0gJ3VuZGVmaW5lZCcgPyAodGhpcy5iYXNlNjRqcyA9IHt9KSA6IGV4cG9ydHMpKVxuIl19
}).call(this,require("U9cQDF"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer,arguments[3],arguments[4],arguments[5],arguments[6],"/..\\..\\..\\..\\Óli Tómas\\jobs\\kennitalajs\\node_modules\\base64-js\\lib\\b64.js","/..\\..\\..\\..\\Óli Tómas\\jobs\\kennitalajs\\node_modules\\base64-js\\lib")
},{"U9cQDF":3,"buffer":4}],3:[function(require,module,exports){
(function (process,global,Buffer,__argument0,__argument1,__argument2,__argument3,__filename,__dirname){
'use strict';
// shim for using process in browser
var process = module.exports = {};
process.nextTick = function () {
var canSetImmediate = typeof window !== 'undefined' && window.setImmediate;
var canPost = typeof window !== 'undefined' && window.postMessage && window.addEventListener;
if (canSetImmediate) {
return function (f) {
return window.setImmediate(f);
};
}
if (canPost) {
var queue = [];
window.addEventListener('message', function (ev) {
var source = ev.source;
if ((source === window || source === null) && ev.data === 'process-tick') {
ev.stopPropagation();
if (queue.length > 0) {
var fn = queue.shift();
fn();
}
}
}, true);
return function nextTick(fn) {
queue.push(fn);
window.postMessage('process-tick', '*');
};
}
return function nextTick(fn) {
setTimeout(fn, 0);
};
}();
process.title = 'browser';
process.browser = true;
process.env = {};
process.argv = [];
function noop() {}
process.on = noop;
process.addListener = noop;
process.once = noop;
process.off = noop;
process.removeListener = noop;
process.removeAllListeners = noop;
process.emit = noop;
process.binding = function (name) {
throw new Error('process.binding is not supported');
};
// TODO(shtylman)
process.cwd = function () {
return '/';
};
process.chdir = function (dir) {
throw new Error('process.chdir is not supported');
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJyb3dzZXIuanMiXSwibmFtZXMiOlsicHJvY2VzcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJuZXh0VGljayIsImNhblNldEltbWVkaWF0ZSIsIndpbmRvdyIsInNldEltbWVkaWF0ZSIsImNhblBvc3QiLCJwb3N0TWVzc2FnZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJmIiwicXVldWUiLCJldiIsInNvdXJjZSIsImRhdGEiLCJzdG9wUHJvcGFnYXRpb24iLCJsZW5ndGgiLCJmbiIsInNoaWZ0IiwicHVzaCIsInNldFRpbWVvdXQiLCJ0aXRsZSIsImJyb3dzZXIiLCJlbnYiLCJhcmd2Iiwibm9vcCIsIm9uIiwiYWRkTGlzdGVuZXIiLCJvbmNlIiwib2ZmIiwicmVtb3ZlTGlzdGVuZXIiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJlbWl0IiwiYmluZGluZyIsIm5hbWUiLCJFcnJvciIsImN3ZCIsImNoZGlyIiwiZGlyIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUVBLElBQUlBLFVBQVVDLE9BQU9DLE9BQVAsR0FBaUIsRUFBL0I7O0FBRUFGLFFBQVFHLFFBQVIsR0FBb0IsWUFBWTtBQUM1QixRQUFJQyxrQkFBa0IsT0FBT0MsTUFBUCxLQUFrQixXQUFsQixJQUNuQkEsT0FBT0MsWUFEVjtBQUVBLFFBQUlDLFVBQVUsT0FBT0YsTUFBUCxLQUFrQixXQUFsQixJQUNYQSxPQUFPRyxXQURJLElBQ1dILE9BQU9JLGdCQURoQzs7QUFJQSxRQUFJTCxlQUFKLEVBQXFCO0FBQ2pCLGVBQU8sVUFBVU0sQ0FBVixFQUFhO0FBQUUsbUJBQU9MLE9BQU9DLFlBQVAsQ0FBb0JJLENBQXBCLENBQVA7QUFBK0IsU0FBckQ7QUFDSDs7QUFFRCxRQUFJSCxPQUFKLEVBQWE7QUFDVCxZQUFJSSxRQUFRLEVBQVo7QUFDQU4sZUFBT0ksZ0JBQVAsQ0FBd0IsU0FBeEIsRUFBbUMsVUFBVUcsRUFBVixFQUFjO0FBQzdDLGdCQUFJQyxTQUFTRCxHQUFHQyxNQUFoQjtBQUNBLGdCQUFJLENBQUNBLFdBQVdSLE1BQVgsSUFBcUJRLFdBQVcsSUFBakMsS0FBMENELEdBQUdFLElBQUgsS0FBWSxjQUExRCxFQUEwRTtBQUN0RUYsbUJBQUdHLGVBQUg7QUFDQSxvQkFBSUosTUFBTUssTUFBTixHQUFlLENBQW5CLEVBQXNCO0FBQ2xCLHdCQUFJQyxLQUFLTixNQUFNTyxLQUFOLEVBQVQ7QUFDQUQ7QUFDSDtBQUNKO0FBQ0osU0FURCxFQVNHLElBVEg7O0FBV0EsZUFBTyxTQUFTZCxRQUFULENBQWtCYyxFQUFsQixFQUFzQjtBQUN6Qk4sa0JBQU1RLElBQU4sQ0FBV0YsRUFBWDtBQUNBWixtQkFBT0csV0FBUCxDQUFtQixjQUFuQixFQUFtQyxHQUFuQztBQUNILFNBSEQ7QUFJSDs7QUFFRCxXQUFPLFNBQVNMLFFBQVQsQ0FBa0JjLEVBQWxCLEVBQXNCO0FBQ3pCRyxtQkFBV0gsRUFBWCxFQUFlLENBQWY7QUFDSCxLQUZEO0FBR0gsQ0FqQ2tCLEVBQW5COztBQW1DQWpCLFFBQVFxQixLQUFSLEdBQWdCLFNBQWhCO0FBQ0FyQixRQUFRc0IsT0FBUixHQUFrQixJQUFsQjtBQUNBdEIsUUFBUXVCLEdBQVIsR0FBYyxFQUFkO0FBQ0F2QixRQUFRd0IsSUFBUixHQUFlLEVBQWY7O0FBRUEsU0FBU0MsSUFBVCxHQUFnQixDQUFFOztBQUVsQnpCLFFBQVEwQixFQUFSLEdBQWFELElBQWI7QUFDQXpCLFFBQVEyQixXQUFSLEdBQXNCRixJQUF0QjtBQUNBekIsUUFBUTRCLElBQVIsR0FBZUgsSUFBZjtBQUNBekIsUUFBUTZCLEdBQVIsR0FBY0osSUFBZDtBQUNBekIsUUFBUThCLGNBQVIsR0FBeUJMLElBQXpCO0FBQ0F6QixRQUFRK0Isa0JBQVIsR0FBNkJOLElBQTdCO0FBQ0F6QixRQUFRZ0MsSUFBUixHQUFlUCxJQUFmOztBQUVBekIsUUFBUWlDLE9BQVIsR0FBa0IsVUFBVUMsSUFBVixFQUFnQjtBQUM5QixVQUFNLElBQUlDLEtBQUosQ0FBVSxrQ0FBVixDQUFOO0FBQ0gsQ0FGRDs7QUFJQTtBQUNBbkMsUUFBUW9DLEdBQVIsR0FBYyxZQUFZO0FBQUUsV0FBTyxHQUFQO0FBQVksQ0FBeEM7QUFDQXBDLFFBQVFxQyxLQUFSLEdBQWdCLFVBQVVDLEdBQVYsRUFBZTtBQUMzQixVQUFNLElBQUlILEtBQUosQ0FBVSxnQ0FBVi