UNPKG

343 kBJavaScriptView Raw
1// Chance.js 1.0.16
2// http://chancejs.com
3// (c) 2013 Victor Quinn
4// Chance may be freely distributed or modified under the MIT license.
5
6(function () {
7
8 // Constants
9 var MAX_INT = 9007199254740992;
10 var MIN_INT = -MAX_INT;
11 var NUMBERS = '0123456789';
12 var CHARS_LOWER = 'abcdefghijklmnopqrstuvwxyz';
13 var CHARS_UPPER = CHARS_LOWER.toUpperCase();
14 var HEX_POOL = NUMBERS + "abcdef";
15
16 // Errors
17 function UnsupportedError(message) {
18 this.name = 'UnsupportedError';
19 this.message = message || 'This feature is not supported on this platform';
20 }
21
22 UnsupportedError.prototype = new Error();
23 UnsupportedError.prototype.constructor = UnsupportedError;
24
25 // Cached array helpers
26 var slice = Array.prototype.slice;
27
28 // Constructor
29 function Chance (seed) {
30 if (!(this instanceof Chance)) {
31 if (!seed) { seed = null; } // handle other non-truthy seeds, as described in issue #322
32 return seed === null ? new Chance() : new Chance(seed);
33 }
34
35 // if user has provided a function, use that as the generator
36 if (typeof seed === 'function') {
37 this.random = seed;
38 return this;
39 }
40
41 if (arguments.length) {
42 // set a starting value of zero so we can add to it
43 this.seed = 0;
44 }
45
46 // otherwise, leave this.seed blank so that MT will receive a blank
47
48 for (var i = 0; i < arguments.length; i++) {
49 var seedling = 0;
50 if (Object.prototype.toString.call(arguments[i]) === '[object String]') {
51 for (var j = 0; j < arguments[i].length; j++) {
52 // create a numeric hash for each argument, add to seedling
53 var hash = 0;
54 for (var k = 0; k < arguments[i].length; k++) {
55 hash = arguments[i].charCodeAt(k) + (hash << 6) + (hash << 16) - hash;
56 }
57 seedling += hash;
58 }
59 } else {
60 seedling = arguments[i];
61 }
62 this.seed += (arguments.length - i) * seedling;
63 }
64
65 // If no generator function was provided, use our MT
66 this.mt = this.mersenne_twister(this.seed);
67 this.bimd5 = this.blueimp_md5();
68 this.random = function () {
69 return this.mt.random(this.seed);
70 };
71
72 return this;
73 }
74
75 Chance.prototype.VERSION = "1.0.16";
76
77 // Random helper functions
78 function initOptions(options, defaults) {
79 options = options || {};
80
81 if (defaults) {
82 for (var i in defaults) {
83 if (typeof options[i] === 'undefined') {
84 options[i] = defaults[i];
85 }
86 }
87 }
88
89 return options;
90 }
91
92 function range(size) {
93 return Array.apply(null, Array(size)).map(function (_, i) {return i;});
94 }
95
96 function testRange(test, errorMessage) {
97 if (test) {
98 throw new RangeError(errorMessage);
99 }
100 }
101
102 /**
103 * Encode the input string with Base64.
104 */
105 var base64 = function() {
106 throw new Error('No Base64 encoder available.');
107 };
108
109 // Select proper Base64 encoder.
110 (function determineBase64Encoder() {
111 if (typeof btoa === 'function') {
112 base64 = btoa;
113 } else if (typeof Buffer === 'function') {
114 base64 = function(input) {
115 return new Buffer(input).toString('base64');
116 };
117 }
118 })();
119
120 // -- Basics --
121
122 /**
123 * Return a random bool, either true or false
124 *
125 * @param {Object} [options={ likelihood: 50 }] alter the likelihood of
126 * receiving a true or false value back.
127 * @throws {RangeError} if the likelihood is out of bounds
128 * @returns {Bool} either true or false
129 */
130 Chance.prototype.bool = function (options) {
131 // likelihood of success (true)
132 options = initOptions(options, {likelihood : 50});
133
134 // Note, we could get some minor perf optimizations by checking range
135 // prior to initializing defaults, but that makes code a bit messier
136 // and the check more complicated as we have to check existence of
137 // the object then existence of the key before checking constraints.
138 // Since the options initialization should be minor computationally,
139 // decision made for code cleanliness intentionally. This is mentioned
140 // here as it's the first occurrence, will not be mentioned again.
141 testRange(
142 options.likelihood < 0 || options.likelihood > 100,
143 "Chance: Likelihood accepts values from 0 to 100."
144 );
145
146 return this.random() * 100 < options.likelihood;
147 };
148
149 Chance.prototype.animal = function (options){
150 //returns a random animal
151 options = initOptions(options);
152
153 if(typeof options.type !== 'undefined'){
154 //if user does not put in a valid animal type, user will get an error
155 testRange(
156 !this.get("animals")[options.type.toLowerCase()],
157 "Please pick from desert, ocean, grassland, forest, zoo, pets, farm."
158 );
159 //if user does put in valid animal type, will return a random animal of that type
160 return this.pick(this.get("animals")[options.type.toLowerCase()]);
161 }
162 //if user does not put in any animal type, will return a random animal regardless
163 animalTypeArray = ["desert","forest","ocean","zoo","farm","pet","grassland"];
164 return this.pick(this.get("animals")[this.pick(animalTypeArray)]);
165 };
166
167 /**
168 * Return a random character.
169 *
170 * @param {Object} [options={}] can specify a character pool, only alpha,
171 * only symbols, and casing (lower or upper)
172 * @returns {String} a single random character
173 * @throws {RangeError} Can only specify alpha or symbols, not both
174 */
175 Chance.prototype.character = function (options) {
176 options = initOptions(options);
177 testRange(
178 options.alpha && options.symbols,
179 "Chance: Cannot specify both alpha and symbols."
180 );
181
182 var symbols = "!@#$%^&*()[]",
183 letters, pool;
184
185 if (options.casing === 'lower') {
186 letters = CHARS_LOWER;
187 } else if (options.casing === 'upper') {
188 letters = CHARS_UPPER;
189 } else {
190 letters = CHARS_LOWER + CHARS_UPPER;
191 }
192
193 if (options.pool) {
194 pool = options.pool;
195 } else if (options.alpha) {
196 pool = letters;
197 } else if (options.symbols) {
198 pool = symbols;
199 } else {
200 pool = letters + NUMBERS + symbols;
201 }
202
203 return pool.charAt(this.natural({max: (pool.length - 1)}));
204 };
205
206 // Note, wanted to use "float" or "double" but those are both JS reserved words.
207
208 // Note, fixed means N OR LESS digits after the decimal. This because
209 // It could be 14.9000 but in JavaScript, when this is cast as a number,
210 // the trailing zeroes are dropped. Left to the consumer if trailing zeroes are
211 // needed
212 /**
213 * Return a random floating point number
214 *
215 * @param {Object} [options={}] can specify a fixed precision, min, max
216 * @returns {Number} a single floating point number
217 * @throws {RangeError} Can only specify fixed or precision, not both. Also
218 * min cannot be greater than max
219 */
220 Chance.prototype.floating = function (options) {
221 options = initOptions(options, {fixed : 4});
222 testRange(
223 options.fixed && options.precision,
224 "Chance: Cannot specify both fixed and precision."
225 );
226
227 var num;
228 var fixed = Math.pow(10, options.fixed);
229
230 var max = MAX_INT / fixed;
231 var min = -max;
232
233 testRange(
234 options.min && options.fixed && options.min < min,
235 "Chance: Min specified is out of range with fixed. Min should be, at least, " + min
236 );
237 testRange(
238 options.max && options.fixed && options.max > max,
239 "Chance: Max specified is out of range with fixed. Max should be, at most, " + max
240 );
241
242 options = initOptions(options, { min : min, max : max });
243
244 // Todo - Make this work!
245 // options.precision = (typeof options.precision !== "undefined") ? options.precision : false;
246
247 num = this.integer({min: options.min * fixed, max: options.max * fixed});
248 var num_fixed = (num / fixed).toFixed(options.fixed);
249
250 return parseFloat(num_fixed);
251 };
252
253 /**
254 * Return a random integer
255 *
256 * NOTE the max and min are INCLUDED in the range. So:
257 * chance.integer({min: 1, max: 3});
258 * would return either 1, 2, or 3.
259 *
260 * @param {Object} [options={}] can specify a min and/or max
261 * @returns {Number} a single random integer number
262 * @throws {RangeError} min cannot be greater than max
263 */
264 Chance.prototype.integer = function (options) {
265 // 9007199254740992 (2^53) is the max integer number in JavaScript
266 // See: http://vq.io/132sa2j
267 options = initOptions(options, {min: MIN_INT, max: MAX_INT});
268 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
269
270 return Math.floor(this.random() * (options.max - options.min + 1) + options.min);
271 };
272
273 /**
274 * Return a random natural
275 *
276 * NOTE the max and min are INCLUDED in the range. So:
277 * chance.natural({min: 1, max: 3});
278 * would return either 1, 2, or 3.
279 *
280 * @param {Object} [options={}] can specify a min and/or maxm or a numerals count.
281 * @returns {Number} a single random integer number
282 * @throws {RangeError} min cannot be greater than max
283 */
284 Chance.prototype.natural = function (options) {
285 options = initOptions(options, {min: 0, max: MAX_INT});
286 if (typeof options.numerals === 'number'){
287 testRange(options.numerals < 1, "Chance: Numerals cannot be less than one.");
288 options.min = Math.pow(10, options.numerals - 1);
289 options.max = Math.pow(10, options.numerals) - 1;
290 }
291 testRange(options.min < 0, "Chance: Min cannot be less than zero.");
292 return this.integer(options);
293 };
294
295 /**
296 * Return a random hex number as string
297 *
298 * NOTE the max and min are INCLUDED in the range. So:
299 * chance.hex({min: '9', max: 'B'});
300 * would return either '9', 'A' or 'B'.
301 *
302 * @param {Object} [options={}] can specify a min and/or max and/or casing
303 * @returns {String} a single random string hex number
304 * @throws {RangeError} min cannot be greater than max
305 */
306 Chance.prototype.hex = function (options) {
307 options = initOptions(options, {min: 0, max: MAX_INT, casing: 'lower'});
308 testRange(options.min < 0, "Chance: Min cannot be less than zero.");
309 var integer = this.natural({min: options.min, max: options.max});
310 if (options.casing === 'upper') {
311 return integer.toString(16).toUpperCase();
312 }
313 return integer.toString(16);
314 };
315
316 Chance.prototype.letter = function(options) {
317 options = initOptions(options, {casing: 'lower'});
318 var pool = "abcdefghijklmnopqrstuvwxyz";
319 var letter = this.character({pool: pool});
320 if (options.casing === 'upper') {
321 letter = letter.toUpperCase();
322 }
323 return letter;
324 }
325
326 /**
327 * Return a random string
328 *
329 * @param {Object} [options={}] can specify a length
330 * @returns {String} a string of random length
331 * @throws {RangeError} length cannot be less than zero
332 */
333 Chance.prototype.string = function (options) {
334 options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
335 testRange(options.length < 0, "Chance: Length cannot be less than zero.");
336 var length = options.length,
337 text = this.n(this.character, length, options);
338
339 return text.join("");
340 };
341
342 /**
343 * Return a random buffer
344 *
345 * @param {Object} [options={}] can specify a length
346 * @returns {Buffer} a buffer of random length
347 * @throws {RangeError} length cannot be less than zero
348 */
349 Chance.prototype.buffer = function (options) {
350 if (typeof Buffer === 'undefined') {
351 throw new UnsupportedError('Sorry, the buffer() function is not supported on your platform');
352 }
353 options = initOptions(options, { length: this.natural({min: 5, max: 20}) });
354 testRange(options.length < 0, "Chance: Length cannot be less than zero.");
355 var length = options.length;
356 var content = this.n(this.character, length, options);
357
358 return Buffer.from(content);
359 };
360
361 // -- End Basics --
362
363 // -- Helpers --
364
365 Chance.prototype.capitalize = function (word) {
366 return word.charAt(0).toUpperCase() + word.substr(1);
367 };
368
369 Chance.prototype.mixin = function (obj) {
370 for (var func_name in obj) {
371 Chance.prototype[func_name] = obj[func_name];
372 }
373 return this;
374 };
375
376 /**
377 * Given a function that generates something random and a number of items to generate,
378 * return an array of items where none repeat.
379 *
380 * @param {Function} fn the function that generates something random
381 * @param {Number} num number of terms to generate
382 * @param {Object} options any options to pass on to the generator function
383 * @returns {Array} an array of length `num` with every item generated by `fn` and unique
384 *
385 * There can be more parameters after these. All additional parameters are provided to the given function
386 */
387 Chance.prototype.unique = function(fn, num, options) {
388 testRange(
389 typeof fn !== "function",
390 "Chance: The first argument must be a function."
391 );
392
393 var comparator = function(arr, val) { return arr.indexOf(val) !== -1; };
394
395 if (options) {
396 comparator = options.comparator || comparator;
397 }
398
399 var arr = [], count = 0, result, MAX_DUPLICATES = num * 50, params = slice.call(arguments, 2);
400
401 while (arr.length < num) {
402 var clonedParams = JSON.parse(JSON.stringify(params));
403 result = fn.apply(this, clonedParams);
404 if (!comparator(arr, result)) {
405 arr.push(result);
406 // reset count when unique found
407 count = 0;
408 }
409
410 if (++count > MAX_DUPLICATES) {
411 throw new RangeError("Chance: num is likely too large for sample set");
412 }
413 }
414 return arr;
415 };
416
417 /**
418 * Gives an array of n random terms
419 *
420 * @param {Function} fn the function that generates something random
421 * @param {Number} n number of terms to generate
422 * @returns {Array} an array of length `n` with items generated by `fn`
423 *
424 * There can be more parameters after these. All additional parameters are provided to the given function
425 */
426 Chance.prototype.n = function(fn, n) {
427 testRange(
428 typeof fn !== "function",
429 "Chance: The first argument must be a function."
430 );
431
432 if (typeof n === 'undefined') {
433 n = 1;
434 }
435 var i = n, arr = [], params = slice.call(arguments, 2);
436
437 // Providing a negative count should result in a noop.
438 i = Math.max( 0, i );
439
440 for (null; i--; null) {
441 arr.push(fn.apply(this, params));
442 }
443
444 return arr;
445 };
446
447 // H/T to SO for this one: http://vq.io/OtUrZ5
448 Chance.prototype.pad = function (number, width, pad) {
449 // Default pad to 0 if none provided
450 pad = pad || '0';
451 // Convert number to a string
452 number = number + '';
453 return number.length >= width ? number : new Array(width - number.length + 1).join(pad) + number;
454 };
455
456 // DEPRECATED on 2015-10-01
457 Chance.prototype.pick = function (arr, count) {
458 if (arr.length === 0) {
459 throw new RangeError("Chance: Cannot pick() from an empty array");
460 }
461 if (!count || count === 1) {
462 return arr[this.natural({max: arr.length - 1})];
463 } else {
464 return this.shuffle(arr).slice(0, count);
465 }
466 };
467
468 // Given an array, returns a single random element
469 Chance.prototype.pickone = function (arr) {
470 if (arr.length === 0) {
471 throw new RangeError("Chance: Cannot pickone() from an empty array");
472 }
473 return arr[this.natural({max: arr.length - 1})];
474 };
475
476 // Given an array, returns a random set with 'count' elements
477 Chance.prototype.pickset = function (arr, count) {
478 if (count === 0) {
479 return [];
480 }
481 if (arr.length === 0) {
482 throw new RangeError("Chance: Cannot pickset() from an empty array");
483 }
484 if (count < 0) {
485 throw new RangeError("Chance: Count must be a non-negative number");
486 }
487 if (!count || count === 1) {
488 return [ this.pickone(arr) ];
489 }
490 return this.shuffle(arr).slice(0, count);
491 };
492
493 Chance.prototype.shuffle = function (arr) {
494 var new_array = [],
495 j = 0,
496 length = Number(arr.length),
497 source_indexes = range(length),
498 last_source_index = length - 1,
499 selected_source_index;
500
501 for (var i = 0; i < length; i++) {
502 // Pick a random index from the array
503 selected_source_index = this.natural({max: last_source_index});
504 j = source_indexes[selected_source_index];
505
506 // Add it to the new array
507 new_array[i] = arr[j];
508
509 // Mark the source index as used
510 source_indexes[selected_source_index] = source_indexes[last_source_index];
511 last_source_index -= 1;
512 }
513
514 return new_array;
515 };
516
517 // Returns a single item from an array with relative weighting of odds
518 Chance.prototype.weighted = function (arr, weights, trim) {
519 if (arr.length !== weights.length) {
520 throw new RangeError("Chance: Length of array and weights must match");
521 }
522
523 // scan weights array and sum valid entries
524 var sum = 0;
525 var val;
526 for (var weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
527 val = weights[weightIndex];
528 if (isNaN(val)) {
529 throw new RangeError("Chance: All weights must be numbers");
530 }
531
532 if (val > 0) {
533 sum += val;
534 }
535 }
536
537 if (sum === 0) {
538 throw new RangeError("Chance: No valid entries in array weights");
539 }
540
541 // select a value within range
542 var selected = this.random() * sum;
543
544 // find array entry corresponding to selected value
545 var total = 0;
546 var lastGoodIdx = -1;
547 var chosenIdx;
548 for (weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
549 val = weights[weightIndex];
550 total += val;
551 if (val > 0) {
552 if (selected <= total) {
553 chosenIdx = weightIndex;
554 break;
555 }
556 lastGoodIdx = weightIndex;
557 }
558
559 // handle any possible rounding error comparison to ensure something is picked
560 if (weightIndex === (weights.length - 1)) {
561 chosenIdx = lastGoodIdx;
562 }
563 }
564
565 var chosen = arr[chosenIdx];
566 trim = (typeof trim === 'undefined') ? false : trim;
567 if (trim) {
568 arr.splice(chosenIdx, 1);
569 weights.splice(chosenIdx, 1);
570 }
571
572 return chosen;
573 };
574
575 // -- End Helpers --
576
577 // -- Text --
578
579 Chance.prototype.paragraph = function (options) {
580 options = initOptions(options);
581
582 var sentences = options.sentences || this.natural({min: 3, max: 7}),
583 sentence_array = this.n(this.sentence, sentences);
584
585 return sentence_array.join(' ');
586 };
587
588 // Could get smarter about this than generating random words and
589 // chaining them together. Such as: http://vq.io/1a5ceOh
590 Chance.prototype.sentence = function (options) {
591 options = initOptions(options);
592
593 var words = options.words || this.natural({min: 12, max: 18}),
594 punctuation = options.punctuation,
595 text, word_array = this.n(this.word, words);
596
597 text = word_array.join(' ');
598
599 // Capitalize first letter of sentence
600 text = this.capitalize(text);
601
602 // Make sure punctuation has a usable value
603 if (punctuation !== false && !/^[\.\?;!:]$/.test(punctuation)) {
604 punctuation = '.';
605 }
606
607 // Add punctuation mark
608 if (punctuation) {
609 text += punctuation;
610 }
611
612 return text;
613 };
614
615 Chance.prototype.syllable = function (options) {
616 options = initOptions(options);
617
618 var length = options.length || this.natural({min: 2, max: 3}),
619 consonants = 'bcdfghjklmnprstvwz', // consonants except hard to speak ones
620 vowels = 'aeiou', // vowels
621 all = consonants + vowels, // all
622 text = '',
623 chr;
624
625 // I'm sure there's a more elegant way to do this, but this works
626 // decently well.
627 for (var i = 0; i < length; i++) {
628 if (i === 0) {
629 // First character can be anything
630 chr = this.character({pool: all});
631 } else if (consonants.indexOf(chr) === -1) {
632 // Last character was a vowel, now we want a consonant
633 chr = this.character({pool: consonants});
634 } else {
635 // Last character was a consonant, now we want a vowel
636 chr = this.character({pool: vowels});
637 }
638
639 text += chr;
640 }
641
642 if (options.capitalize) {
643 text = this.capitalize(text);
644 }
645
646 return text;
647 };
648
649 Chance.prototype.word = function (options) {
650 options = initOptions(options);
651
652 testRange(
653 options.syllables && options.length,
654 "Chance: Cannot specify both syllables AND length."
655 );
656
657 var syllables = options.syllables || this.natural({min: 1, max: 3}),
658 text = '';
659
660 if (options.length) {
661 // Either bound word by length
662 do {
663 text += this.syllable();
664 } while (text.length < options.length);
665 text = text.substring(0, options.length);
666 } else {
667 // Or by number of syllables
668 for (var i = 0; i < syllables; i++) {
669 text += this.syllable();
670 }
671 }
672
673 if (options.capitalize) {
674 text = this.capitalize(text);
675 }
676
677 return text;
678 };
679
680 // -- End Text --
681
682 // -- Person --
683
684 Chance.prototype.age = function (options) {
685 options = initOptions(options);
686 var ageRange;
687
688 switch (options.type) {
689 case 'child':
690 ageRange = {min: 0, max: 12};
691 break;
692 case 'teen':
693 ageRange = {min: 13, max: 19};
694 break;
695 case 'adult':
696 ageRange = {min: 18, max: 65};
697 break;
698 case 'senior':
699 ageRange = {min: 65, max: 100};
700 break;
701 case 'all':
702 ageRange = {min: 0, max: 100};
703 break;
704 default:
705 ageRange = {min: 18, max: 65};
706 break;
707 }
708
709 return this.natural(ageRange);
710 };
711
712 Chance.prototype.birthday = function (options) {
713 var age = this.age(options);
714 var currentYear = new Date().getFullYear();
715
716 if (options && options.type) {
717 var min = new Date();
718 var max = new Date();
719 min.setFullYear(currentYear - age - 1);
720 max.setFullYear(currentYear - age);
721
722 options = initOptions(options, {
723 min: min,
724 max: max
725 });
726 } else {
727 options = initOptions(options, {
728 year: currentYear - age
729 });
730 }
731
732 return this.date(options);
733 };
734
735 // CPF; ID to identify taxpayers in Brazil
736 Chance.prototype.cpf = function (options) {
737 options = initOptions(options, {
738 formatted: true
739 });
740
741 var n = this.n(this.natural, 9, { max: 9 });
742 var d1 = n[8]*2+n[7]*3+n[6]*4+n[5]*5+n[4]*6+n[3]*7+n[2]*8+n[1]*9+n[0]*10;
743 d1 = 11 - (d1 % 11);
744 if (d1>=10) {
745 d1 = 0;
746 }
747 var d2 = d1*2+n[8]*3+n[7]*4+n[6]*5+n[5]*6+n[4]*7+n[3]*8+n[2]*9+n[1]*10+n[0]*11;
748 d2 = 11 - (d2 % 11);
749 if (d2>=10) {
750 d2 = 0;
751 }
752 var cpf = ''+n[0]+n[1]+n[2]+'.'+n[3]+n[4]+n[5]+'.'+n[6]+n[7]+n[8]+'-'+d1+d2;
753 return options.formatted ? cpf : cpf.replace(/\D/g,'');
754 };
755
756 // CNPJ: ID to identify companies in Brazil
757 Chance.prototype.cnpj = function (options) {
758 options = initOptions(options, {
759 formatted: true
760 });
761
762 var n = this.n(this.natural, 12, { max: 12 });
763 var d1 = n[11]*2+n[10]*3+n[9]*4+n[8]*5+n[7]*6+n[6]*7+n[5]*8+n[4]*9+n[3]*2+n[2]*3+n[1]*4+n[0]*5;
764 d1 = 11 - (d1 % 11);
765 if (d1<2) {
766 d1 = 0;
767 }
768 var d2 = d1*2+n[11]*3+n[10]*4+n[9]*5+n[8]*6+n[7]*7+n[6]*8+n[5]*9+n[4]*2+n[3]*3+n[2]*4+n[1]*5+n[0]*6;
769 d2 = 11 - (d2 % 11);
770 if (d2<2) {
771 d2 = 0;
772 }
773 var cnpj = ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/'+n[8]+n[9]+n[10]+n[11]+'-'+d1+d2;
774 return options.formatted ? cnpj : cnpj.replace(/\D/g,'');
775 };
776
777 Chance.prototype.first = function (options) {
778 options = initOptions(options, {gender: this.gender(), nationality: 'en'});
779 return this.pick(this.get("firstNames")[options.gender.toLowerCase()][options.nationality.toLowerCase()]);
780 };
781
782 Chance.prototype.profession = function (options) {
783 options = initOptions(options);
784 if(options.rank){
785 return this.pick(['Apprentice ', 'Junior ', 'Senior ', 'Lead ']) + this.pick(this.get("profession"));
786 } else{
787 return this.pick(this.get("profession"));
788 }
789 };
790
791 Chance.prototype.company = function (){
792 return this.pick(this.get("company"));
793 };
794
795 Chance.prototype.gender = function (options) {
796 options = initOptions(options, {extraGenders: []});
797 return this.pick(['Male', 'Female'].concat(options.extraGenders));
798 };
799
800 Chance.prototype.last = function (options) {
801 options = initOptions(options, {nationality: '*'});
802 if (options.nationality === "*") {
803 var allLastNames = []
804 var lastNames = this.get("lastNames")
805 Object.keys(lastNames).forEach(function(key, i){
806 allLastNames = allLastNames.concat(lastNames[key])
807 })
808 return this.pick(allLastNames)
809 }
810 else {
811 return this.pick(this.get("lastNames")[options.nationality.toLowerCase()]);
812 }
813
814 };
815
816 Chance.prototype.israelId=function(){
817 var x=this.string({pool: '0123456789',length:8});
818 var y=0;
819 for (var i=0;i<x.length;i++){
820 var thisDigit= x[i] * (i/2===parseInt(i/2) ? 1 : 2);
821 thisDigit=this.pad(thisDigit,2).toString();
822 thisDigit=parseInt(thisDigit[0]) + parseInt(thisDigit[1]);
823 y=y+thisDigit;
824 }
825 x=x+(10-parseInt(y.toString().slice(-1))).toString().slice(-1);
826 return x;
827 };
828
829 Chance.prototype.mrz = function (options) {
830 var checkDigit = function (input) {
831 var alpha = "<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(''),
832 multipliers = [ 7, 3, 1 ],
833 runningTotal = 0;
834
835 if (typeof input !== 'string') {
836 input = input.toString();
837 }
838
839 input.split('').forEach(function(character, idx) {
840 var pos = alpha.indexOf(character);
841
842 if(pos !== -1) {
843 character = pos === 0 ? 0 : pos + 9;
844 } else {
845 character = parseInt(character, 10);
846 }
847 character *= multipliers[idx % multipliers.length];
848 runningTotal += character;
849 });
850 return runningTotal % 10;
851 };
852 var generate = function (opts) {
853 var pad = function (length) {
854 return new Array(length + 1).join('<');
855 };
856 var number = [ 'P<',
857 opts.issuer,
858 opts.last.toUpperCase(),
859 '<<',
860 opts.first.toUpperCase(),
861 pad(39 - (opts.last.length + opts.first.length + 2)),
862 opts.passportNumber,
863 checkDigit(opts.passportNumber),
864 opts.nationality,
865 opts.dob,
866 checkDigit(opts.dob),
867 opts.gender,
868 opts.expiry,
869 checkDigit(opts.expiry),
870 pad(14),
871 checkDigit(pad(14)) ].join('');
872
873 return number +
874 (checkDigit(number.substr(44, 10) +
875 number.substr(57, 7) +
876 number.substr(65, 7)));
877 };
878
879 var that = this;
880
881 options = initOptions(options, {
882 first: this.first(),
883 last: this.last(),
884 passportNumber: this.integer({min: 100000000, max: 999999999}),
885 dob: (function () {
886 var date = that.birthday({type: 'adult'});
887 return [date.getFullYear().toString().substr(2),
888 that.pad(date.getMonth() + 1, 2),
889 that.pad(date.getDate(), 2)].join('');
890 }()),
891 expiry: (function () {
892 var date = new Date();
893 return [(date.getFullYear() + 5).toString().substr(2),
894 that.pad(date.getMonth() + 1, 2),
895 that.pad(date.getDate(), 2)].join('');
896 }()),
897 gender: this.gender() === 'Female' ? 'F': 'M',
898 issuer: 'GBR',
899 nationality: 'GBR'
900 });
901 return generate (options);
902 };
903
904 Chance.prototype.name = function (options) {
905 options = initOptions(options);
906
907 var first = this.first(options),
908 last = this.last(options),
909 name;
910
911 if (options.middle) {
912 name = first + ' ' + this.first(options) + ' ' + last;
913 } else if (options.middle_initial) {
914 name = first + ' ' + this.character({alpha: true, casing: 'upper'}) + '. ' + last;
915 } else {
916 name = first + ' ' + last;
917 }
918
919 if (options.prefix) {
920 name = this.prefix(options) + ' ' + name;
921 }
922
923 if (options.suffix) {
924 name = name + ' ' + this.suffix(options);
925 }
926
927 return name;
928 };
929
930 // Return the list of available name prefixes based on supplied gender.
931 // @todo introduce internationalization
932 Chance.prototype.name_prefixes = function (gender) {
933 gender = gender || "all";
934 gender = gender.toLowerCase();
935
936 var prefixes = [
937 { name: 'Doctor', abbreviation: 'Dr.' }
938 ];
939
940 if (gender === "male" || gender === "all") {
941 prefixes.push({ name: 'Mister', abbreviation: 'Mr.' });
942 }
943
944 if (gender === "female" || gender === "all") {
945 prefixes.push({ name: 'Miss', abbreviation: 'Miss' });
946 prefixes.push({ name: 'Misses', abbreviation: 'Mrs.' });
947 }
948
949 return prefixes;
950 };
951
952 // Alias for name_prefix
953 Chance.prototype.prefix = function (options) {
954 return this.name_prefix(options);
955 };
956
957 Chance.prototype.name_prefix = function (options) {
958 options = initOptions(options, { gender: "all" });
959 return options.full ?
960 this.pick(this.name_prefixes(options.gender)).name :
961 this.pick(this.name_prefixes(options.gender)).abbreviation;
962 };
963 //Hungarian ID number
964 Chance.prototype.HIDN= function(){
965 //Hungarian ID nuber structure: XXXXXXYY (X=number,Y=Capital Latin letter)
966 var idn_pool="0123456789";
967 var idn_chrs="ABCDEFGHIJKLMNOPQRSTUVWXYXZ";
968 var idn="";
969 idn+=this.string({pool:idn_pool,length:6});
970 idn+=this.string({pool:idn_chrs,length:2});
971 return idn;
972 };
973
974
975 Chance.prototype.ssn = function (options) {
976 options = initOptions(options, {ssnFour: false, dashes: true});
977 var ssn_pool = "1234567890",
978 ssn,
979 dash = options.dashes ? '-' : '';
980
981 if(!options.ssnFour) {
982 ssn = this.string({pool: ssn_pool, length: 3}) + dash +
983 this.string({pool: ssn_pool, length: 2}) + dash +
984 this.string({pool: ssn_pool, length: 4});
985 } else {
986 ssn = this.string({pool: ssn_pool, length: 4});
987 }
988 return ssn;
989 };
990
991 // Aadhar is similar to ssn, used in India to uniquely identify a person
992 Chance.prototype.aadhar = function (options) {
993 options = initOptions(options, {onlyLastFour: false, separatedByWhiteSpace: true});
994 var aadhar_pool = "1234567890",
995 aadhar,
996 whiteSpace = options.separatedByWhiteSpace ? ' ' : '';
997
998 if(!options.onlyLastFour) {
999 aadhar = this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1000 this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1001 this.string({pool: aadhar_pool, length: 4});
1002 } else {
1003 aadhar = this.string({pool: aadhar_pool, length: 4});
1004 }
1005 return aadhar;
1006 };
1007
1008 // Return the list of available name suffixes
1009 // @todo introduce internationalization
1010 Chance.prototype.name_suffixes = function () {
1011 var suffixes = [
1012 { name: 'Doctor of Osteopathic Medicine', abbreviation: 'D.O.' },
1013 { name: 'Doctor of Philosophy', abbreviation: 'Ph.D.' },
1014 { name: 'Esquire', abbreviation: 'Esq.' },
1015 { name: 'Junior', abbreviation: 'Jr.' },
1016 { name: 'Juris Doctor', abbreviation: 'J.D.' },
1017 { name: 'Master of Arts', abbreviation: 'M.A.' },
1018 { name: 'Master of Business Administration', abbreviation: 'M.B.A.' },
1019 { name: 'Master of Science', abbreviation: 'M.S.' },
1020 { name: 'Medical Doctor', abbreviation: 'M.D.' },
1021 { name: 'Senior', abbreviation: 'Sr.' },
1022 { name: 'The Third', abbreviation: 'III' },
1023 { name: 'The Fourth', abbreviation: 'IV' },
1024 { name: 'Bachelor of Engineering', abbreviation: 'B.E' },
1025 { name: 'Bachelor of Technology', abbreviation: 'B.TECH' }
1026 ];
1027 return suffixes;
1028 };
1029
1030 // Alias for name_suffix
1031 Chance.prototype.suffix = function (options) {
1032 return this.name_suffix(options);
1033 };
1034
1035 Chance.prototype.name_suffix = function (options) {
1036 options = initOptions(options);
1037 return options.full ?
1038 this.pick(this.name_suffixes()).name :
1039 this.pick(this.name_suffixes()).abbreviation;
1040 };
1041
1042 Chance.prototype.nationalities = function () {
1043 return this.get("nationalities");
1044 };
1045
1046 // Generate random nationality based on json list
1047 Chance.prototype.nationality = function () {
1048 var nationality = this.pick(this.nationalities());
1049 return nationality.name;
1050 };
1051
1052 // -- End Person --
1053
1054 // -- Mobile --
1055 // Android GCM Registration ID
1056 Chance.prototype.android_id = function () {
1057 return "APA91" + this.string({ pool: "0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_", length: 178 });
1058 };
1059
1060 // Apple Push Token
1061 Chance.prototype.apple_token = function () {
1062 return this.string({ pool: "abcdef1234567890", length: 64 });
1063 };
1064
1065 // Windows Phone 8 ANID2
1066 Chance.prototype.wp8_anid2 = function () {
1067 return base64( this.hash( { length : 32 } ) );
1068 };
1069
1070 // Windows Phone 7 ANID
1071 Chance.prototype.wp7_anid = function () {
1072 return 'A=' + this.guid().replace(/-/g, '').toUpperCase() + '&E=' + this.hash({ length:3 }) + '&W=' + this.integer({ min:0, max:9 });
1073 };
1074
1075 // BlackBerry Device PIN
1076 Chance.prototype.bb_pin = function () {
1077 return this.hash({ length: 8 });
1078 };
1079
1080 // -- End Mobile --
1081
1082 // -- Web --
1083 Chance.prototype.avatar = function (options) {
1084 var url = null;
1085 var URL_BASE = '//www.gravatar.com/avatar/';
1086 var PROTOCOLS = {
1087 http: 'http',
1088 https: 'https'
1089 };
1090 var FILE_TYPES = {
1091 bmp: 'bmp',
1092 gif: 'gif',
1093 jpg: 'jpg',
1094 png: 'png'
1095 };
1096 var FALLBACKS = {
1097 '404': '404', // Return 404 if not found
1098 mm: 'mm', // Mystery man
1099 identicon: 'identicon', // Geometric pattern based on hash
1100 monsterid: 'monsterid', // A generated monster icon
1101 wavatar: 'wavatar', // A generated face
1102 retro: 'retro', // 8-bit icon
1103 blank: 'blank' // A transparent png
1104 };
1105 var RATINGS = {
1106 g: 'g',
1107 pg: 'pg',
1108 r: 'r',
1109 x: 'x'
1110 };
1111 var opts = {
1112 protocol: null,
1113 email: null,
1114 fileExtension: null,
1115 size: null,
1116 fallback: null,
1117 rating: null
1118 };
1119
1120 if (!options) {
1121 // Set to a random email
1122 opts.email = this.email();
1123 options = {};
1124 }
1125 else if (typeof options === 'string') {
1126 opts.email = options;
1127 options = {};
1128 }
1129 else if (typeof options !== 'object') {
1130 return null;
1131 }
1132 else if (options.constructor === 'Array') {
1133 return null;
1134 }
1135
1136 opts = initOptions(options, opts);
1137
1138 if (!opts.email) {
1139 // Set to a random email
1140 opts.email = this.email();
1141 }
1142
1143 // Safe checking for params
1144 opts.protocol = PROTOCOLS[opts.protocol] ? opts.protocol + ':' : '';
1145 opts.size = parseInt(opts.size, 0) ? opts.size : '';
1146 opts.rating = RATINGS[opts.rating] ? opts.rating : '';
1147 opts.fallback = FALLBACKS[opts.fallback] ? opts.fallback : '';
1148 opts.fileExtension = FILE_TYPES[opts.fileExtension] ? opts.fileExtension : '';
1149
1150 url =
1151 opts.protocol +
1152 URL_BASE +
1153 this.bimd5.md5(opts.email) +
1154 (opts.fileExtension ? '.' + opts.fileExtension : '') +
1155 (opts.size || opts.rating || opts.fallback ? '?' : '') +
1156 (opts.size ? '&s=' + opts.size.toString() : '') +
1157 (opts.rating ? '&r=' + opts.rating : '') +
1158 (opts.fallback ? '&d=' + opts.fallback : '')
1159 ;
1160
1161 return url;
1162 };
1163
1164 /**
1165 * #Description:
1166 * ===============================================
1167 * Generate random color value base on color type:
1168 * -> hex
1169 * -> rgb
1170 * -> rgba
1171 * -> 0x
1172 * -> named color
1173 *
1174 * #Examples:
1175 * ===============================================
1176 * * Geerate random hex color
1177 * chance.color() => '#79c157' / 'rgb(110,52,164)' / '0x67ae0b' / '#e2e2e2' / '#29CFA7'
1178 *
1179 * * Generate Hex based color value
1180 * chance.color({format: 'hex'}) => '#d67118'
1181 *
1182 * * Generate simple rgb value
1183 * chance.color({format: 'rgb'}) => 'rgb(110,52,164)'
1184 *
1185 * * Generate Ox based color value
1186 * chance.color({format: '0x'}) => '0x67ae0b'
1187 *
1188 * * Generate graiscale based value
1189 * chance.color({grayscale: true}) => '#e2e2e2'
1190 *
1191 * * Return valide color name
1192 * chance.color({format: 'name'}) => 'red'
1193 *
1194 * * Make color uppercase
1195 * chance.color({casing: 'upper'}) => '#29CFA7'
1196 *
1197 * * Min Max values for RGBA
1198 * var light_red = chance.color({format: 'hex', min_red: 200, max_red: 255, max_green: 0, max_blue: 0, min_alpha: .2, max_alpha: .3});
1199 *
1200 * @param [object] options
1201 * @return [string] color value
1202 */
1203 Chance.prototype.color = function (options) {
1204 function gray(value, delimiter) {
1205 return [value, value, value].join(delimiter || '');
1206 }
1207
1208 function rgb(hasAlpha) {
1209 var rgbValue = (hasAlpha) ? 'rgba' : 'rgb';
1210 var alphaChannel = (hasAlpha) ? (',' + this.floating({min:min_alpha, max:max_alpha})) : "";
1211 var colorValue = (isGrayscale) ? (gray(this.natural({min: min_rgb, max: max_rgb}), ',')) : (this.natural({min: min_green, max: max_green}) + ',' + this.natural({min: min_blue, max: max_blue}) + ',' + this.natural({max: 255}));
1212 return rgbValue + '(' + colorValue + alphaChannel + ')';
1213 }
1214
1215 function hex(start, end, withHash) {
1216 var symbol = (withHash) ? "#" : "";
1217 var hexstring = "";
1218
1219 if (isGrayscale) {
1220 hexstring = gray(this.pad(this.hex({min: min_rgb, max: max_rgb}), 2));
1221 if (options.format === "shorthex") {
1222 hexstring = gray(this.hex({min: 0, max: 15}));
1223 }
1224 }
1225 else {
1226 if (options.format === "shorthex") {
1227 hexstring = this.pad(this.hex({min: Math.floor(min_red / 16), max: Math.floor(max_red / 16)}), 1) + this.pad(this.hex({min: Math.floor(min_green / 16), max: Math.floor(max_green / 16)}), 1) + this.pad(this.hex({min: Math.floor(min_blue / 16), max: Math.floor(max_blue / 16)}), 1);
1228 }
1229 else if (min_red !== undefined || max_red !== undefined || min_green !== undefined || max_green !== undefined || min_blue !== undefined || max_blue !== undefined) {
1230 hexstring = this.pad(this.hex({min: min_red, max: max_red}), 2) + this.pad(this.hex({min: min_green, max: max_green}), 2) + this.pad(this.hex({min: min_blue, max: max_blue}), 2);
1231 }
1232 else {
1233 hexstring = this.pad(this.hex({min: min_rgb, max: max_rgb}), 2) + this.pad(this.hex({min: min_rgb, max: max_rgb}), 2) + this.pad(this.hex({min: min_rgb, max: max_rgb}), 2);
1234 }
1235 }
1236
1237 return symbol + hexstring;
1238 }
1239
1240 options = initOptions(options, {
1241 format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']),
1242 grayscale: false,
1243 casing: 'lower',
1244 min: 0,
1245 max: 255,
1246 min_red: undefined,
1247 max_red: undefined,
1248 min_green: undefined,
1249 max_green: undefined,
1250 min_blue: undefined,
1251 max_blue: undefined,
1252 min_alpha: 0,
1253 max_alpha: 1
1254 });
1255
1256 var isGrayscale = options.grayscale;
1257 var min_rgb = options.min;
1258 var max_rgb = options.max;
1259 var min_red = options.min_red;
1260 var max_red = options.max_red;
1261 var min_green = options.min_green;
1262 var max_green = options.max_green;
1263 var min_blue = options.min_blue;
1264 var max_blue = options.max_blue;
1265 var min_alpha = options.min_alpha;
1266 var max_alpha = options.max_alpha;
1267 if (options.min_red === undefined) { min_red = min_rgb; }
1268 if (options.max_red === undefined) { max_red = max_rgb; }
1269 if (options.min_green === undefined) { min_green = min_rgb; }
1270 if (options.max_green === undefined) { max_green = max_rgb; }
1271 if (options.min_blue === undefined) { min_blue = min_rgb; }
1272 if (options.max_blue === undefined) { max_blue = max_rgb; }
1273 if (options.min_alpha === undefined) { min_alpha = 0; }
1274 if (options.max_alpha === undefined) { max_alpha = 1; }
1275 if (isGrayscale && min_rgb === 0 && max_rgb === 255 && min_red !== undefined && max_red !== undefined) {
1276 min_rgb = ((min_red + min_green + min_blue) / 3);
1277 max_rgb = ((max_red + max_green + max_blue) / 3);
1278 }
1279 var colorValue;
1280
1281 if (options.format === 'hex') {
1282 colorValue = hex.call(this, 2, 6, true);
1283 }
1284 else if (options.format === 'shorthex') {
1285 colorValue = hex.call(this, 1, 3, true);
1286 }
1287 else if (options.format === 'rgb') {
1288 colorValue = rgb.call(this, false);
1289 }
1290 else if (options.format === 'rgba') {
1291 colorValue = rgb.call(this, true);
1292 }
1293 else if (options.format === '0x') {
1294 colorValue = '0x' + hex.call(this, 2, 6);
1295 }
1296 else if(options.format === 'name') {
1297 return this.pick(this.get("colorNames"));
1298 }
1299 else {
1300 throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".');
1301 }
1302
1303 if (options.casing === 'upper' ) {
1304 colorValue = colorValue.toUpperCase();
1305 }
1306
1307 return colorValue;
1308 };
1309
1310 Chance.prototype.domain = function (options) {
1311 options = initOptions(options);
1312 return this.word() + '.' + (options.tld || this.tld());
1313 };
1314
1315 Chance.prototype.email = function (options) {
1316 options = initOptions(options);
1317 return this.word({length: options.length}) + '@' + (options.domain || this.domain());
1318 };
1319
1320 /**
1321 * #Description:
1322 * ===============================================
1323 * Generate a random Facebook id, aka fbid.
1324 *
1325 * NOTE: At the moment (Sep 2017), Facebook ids are
1326 * "numeric strings" of length 16.
1327 * However, Facebook Graph API documentation states that
1328 * "it is extremely likely to change over time".
1329 * @see https://developers.facebook.com/docs/graph-api/overview/
1330 *
1331 * #Examples:
1332 * ===============================================
1333 * chance.fbid() => '1000035231661304'
1334 *
1335 * @return [string] facebook id
1336 */
1337 Chance.prototype.fbid = function () {
1338 return '10000' + this.string({pool: "1234567890", length: 11});
1339 };
1340
1341 Chance.prototype.google_analytics = function () {
1342 var account = this.pad(this.natural({max: 999999}), 6);
1343 var property = this.pad(this.natural({max: 99}), 2);
1344
1345 return 'UA-' + account + '-' + property;
1346 };
1347
1348 Chance.prototype.hashtag = function () {
1349 return '#' + this.word();
1350 };
1351
1352 Chance.prototype.ip = function () {
1353 // Todo: This could return some reserved IPs. See http://vq.io/137dgYy
1354 // this should probably be updated to account for that rare as it may be
1355 return this.natural({min: 1, max: 254}) + '.' +
1356 this.natural({max: 255}) + '.' +
1357 this.natural({max: 255}) + '.' +
1358 this.natural({min: 1, max: 254});
1359 };
1360
1361 Chance.prototype.ipv6 = function () {
1362 var ip_addr = this.n(this.hash, 8, {length: 4});
1363
1364 return ip_addr.join(":");
1365 };
1366
1367 Chance.prototype.klout = function () {
1368 return this.natural({min: 1, max: 99});
1369 };
1370
1371 Chance.prototype.semver = function (options) {
1372 options = initOptions(options, { include_prerelease: true });
1373
1374 var range = this.pickone(["^", "~", "<", ">", "<=", ">=", "="]);
1375 if (options.range) {
1376 range = options.range;
1377 }
1378
1379 var prerelease = "";
1380 if (options.include_prerelease) {
1381 prerelease = this.weighted(["", "-dev", "-beta", "-alpha"], [50, 10, 5, 1]);
1382 }
1383 return range + this.rpg('3d10').join('.') + prerelease;
1384 };
1385
1386 Chance.prototype.tlds = function () {
1387 return ['com', 'org', 'edu', 'gov', 'co.uk', 'net', 'io', 'ac', 'ad', 'ae', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao', 'aq', 'ar', 'as', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb', 'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'bj', 'bm', 'bn', 'bo', 'bq', 'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cc', 'cd', 'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'cr', 'cu', 'cv', 'cw', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do', 'dz', 'ec', 'ee', 'eg', 'eh', 'er', 'es', 'et', 'eu', 'fi', 'fj', 'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh', 'gi', 'gl', 'gm', 'gn', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu', 'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il', 'im', 'in', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm', 'jo', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw', 'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu', 'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mk', 'ml', 'mm', 'mn', 'mo', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'mv', 'mw', 'mx', 'my', 'mz', 'na', 'nc', 'ne', 'nf', 'ng', 'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'pa', 'pe', 'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'ps', 'pt', 'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd', 'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr', 'ss', 'st', 'su', 'sv', 'sx', 'sy', 'sz', 'tc', 'td', 'tf', 'tg', 'th', 'tj', 'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'tt', 'tv', 'tw', 'tz', 'ua', 'ug', 'uk', 'us', 'uy', 'uz', 'va', 'vc', 've', 'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'za', 'zm', 'zw'];
1388 };
1389
1390 Chance.prototype.tld = function () {
1391 return this.pick(this.tlds());
1392 };
1393
1394 Chance.prototype.twitter = function () {
1395 return '@' + this.word();
1396 };
1397
1398 Chance.prototype.url = function (options) {
1399 options = initOptions(options, { protocol: "http", domain: this.domain(options), domain_prefix: "", path: this.word(), extensions: []});
1400
1401 var extension = options.extensions.length > 0 ? "." + this.pick(options.extensions) : "";
1402 var domain = options.domain_prefix ? options.domain_prefix + "." + options.domain : options.domain;
1403
1404 return options.protocol + "://" + domain + "/" + options.path + extension;
1405 };
1406
1407 Chance.prototype.port = function() {
1408 return this.integer({min: 0, max: 65535});
1409 };
1410
1411 Chance.prototype.locale = function (options) {
1412 options = initOptions(options);
1413 if (options.region){
1414 return this.pick(this.get("locale_regions"));
1415 } else {
1416 return this.pick(this.get("locale_languages"));
1417 }
1418 };
1419
1420 Chance.prototype.locales = function (options) {
1421 options = initOptions(options);
1422 if (options.region){
1423 return this.get("locale_regions");
1424 } else {
1425 return this.get("locale_languages");
1426 }
1427 };
1428
1429 Chance.prototype.loremPicsum = function (options) {
1430 options = initOptions(options, { width: 500, height: 500, greyscale: false, blurred: false });
1431
1432 var greyscale = options.greyscale ? 'g/' : '';
1433 var query = options.blurred ? '/?blur' : '/?random';
1434
1435 return 'https://picsum.photos/' + greyscale + options.width + '/' + options.height + query;
1436 }
1437
1438 // -- End Web --
1439
1440 // -- Location --
1441
1442 Chance.prototype.address = function (options) {
1443 options = initOptions(options);
1444 return this.natural({min: 5, max: 2000}) + ' ' + this.street(options);
1445 };
1446
1447 Chance.prototype.altitude = function (options) {
1448 options = initOptions(options, {fixed: 5, min: 0, max: 8848});
1449 return this.floating({
1450 min: options.min,
1451 max: options.max,
1452 fixed: options.fixed
1453 });
1454 };
1455
1456 Chance.prototype.areacode = function (options) {
1457 options = initOptions(options, {parens : true});
1458 // Don't want area codes to start with 1, or have a 9 as the second digit
1459 var areacode = this.natural({min: 2, max: 9}).toString() +
1460 this.natural({min: 0, max: 8}).toString() +
1461 this.natural({min: 0, max: 9}).toString();
1462
1463 return options.parens ? '(' + areacode + ')' : areacode;
1464 };
1465
1466 Chance.prototype.city = function () {
1467 return this.capitalize(this.word({syllables: 3}));
1468 };
1469
1470 Chance.prototype.coordinates = function (options) {
1471 return this.latitude(options) + ', ' + this.longitude(options);
1472 };
1473
1474 Chance.prototype.countries = function () {
1475 return this.get("countries");
1476 };
1477
1478 Chance.prototype.country = function (options) {
1479 options = initOptions(options);
1480 var country = this.pick(this.countries());
1481 return options.raw ? country : options.full ? country.name : country.abbreviation;
1482 };
1483
1484 Chance.prototype.depth = function (options) {
1485 options = initOptions(options, {fixed: 5, min: -10994, max: 0});
1486 return this.floating({
1487 min: options.min,
1488 max: options.max,
1489 fixed: options.fixed
1490 });
1491 };
1492
1493 Chance.prototype.geohash = function (options) {
1494 options = initOptions(options, { length: 7 });
1495 return this.string({ length: options.length, pool: '0123456789bcdefghjkmnpqrstuvwxyz' });
1496 };
1497
1498 Chance.prototype.geojson = function (options) {
1499 return this.latitude(options) + ', ' + this.longitude(options) + ', ' + this.altitude(options);
1500 };
1501
1502 Chance.prototype.latitude = function (options) {
1503 options = initOptions(options, {fixed: 5, min: -90, max: 90});
1504 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1505 };
1506
1507 Chance.prototype.longitude = function (options) {
1508 options = initOptions(options, {fixed: 5, min: -180, max: 180});
1509 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1510 };
1511
1512 Chance.prototype.phone = function (options) {
1513 var self = this,
1514 numPick,
1515 ukNum = function (parts) {
1516 var section = [];
1517 //fills the section part of the phone number with random numbers.
1518 parts.sections.forEach(function(n) {
1519 section.push(self.string({ pool: '0123456789', length: n}));
1520 });
1521 return parts.area + section.join(' ');
1522 };
1523 options = initOptions(options, {
1524 formatted: true,
1525 country: 'us',
1526 mobile: false
1527 });
1528 if (!options.formatted) {
1529 options.parens = false;
1530 }
1531 var phone;
1532 switch (options.country) {
1533 case 'fr':
1534 if (!options.mobile) {
1535 numPick = this.pick([
1536 // Valid zone and département codes.
1537 '01' + this.pick(['30', '34', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '53', '55', '56', '58', '60', '64', '69', '70', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83']) + self.string({ pool: '0123456789', length: 6}),
1538 '02' + this.pick(['14', '18', '22', '23', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '40', '41', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '56', '57', '61', '62', '69', '72', '76', '77', '78', '85', '90', '96', '97', '98', '99']) + self.string({ pool: '0123456789', length: 6}),
1539 '03' + this.pick(['10', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '39', '44', '45', '51', '52', '54', '55', '57', '58', '59', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '70', '71', '72', '73', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '90']) + self.string({ pool: '0123456789', length: 6}),
1540 '04' + this.pick(['11', '13', '15', '20', '22', '26', '27', '30', '32', '34', '37', '42', '43', '44', '50', '56', '57', '63', '66', '67', '68', '69', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '80', '81', '82', '83', '84', '85', '86', '88', '89', '90', '91', '92', '93', '94', '95', '97', '98']) + self.string({ pool: '0123456789', length: 6}),
1541 '05' + this.pick(['08', '16', '17', '19', '24', '31', '32', '33', '34', '35', '40', '45', '46', '47', '49', '53', '55', '56', '57', '58', '59', '61', '62', '63', '64', '65', '67', '79', '81', '82', '86', '87', '90', '94']) + self.string({ pool: '0123456789', length: 6}),
1542 '09' + self.string({ pool: '0123456789', length: 8}),
1543 ]);
1544 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1545 } else {
1546 numPick = this.pick(['06', '07']) + self.string({ pool: '0123456789', length: 8});
1547 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1548 }
1549 break;
1550 case 'uk':
1551 if (!options.mobile) {
1552 numPick = this.pick([
1553 //valid area codes of major cities/counties followed by random numbers in required format.
1554
1555 { area: '01' + this.character({ pool: '234569' }) + '1 ', sections: [3,4] },
1556 { area: '020 ' + this.character({ pool: '378' }), sections: [3,4] },
1557 { area: '023 ' + this.character({ pool: '89' }), sections: [3,4] },
1558 { area: '024 7', sections: [3,4] },
1559 { area: '028 ' + this.pick(['25','28','37','71','82','90','92','95']), sections: [2,4] },
1560 { area: '012' + this.pick(['04','08','54','76','97','98']) + ' ', sections: [6] },
1561 { area: '013' + this.pick(['63','64','84','86']) + ' ', sections: [6] },
1562 { area: '014' + this.pick(['04','20','60','61','80','88']) + ' ', sections: [6] },
1563 { area: '015' + this.pick(['24','27','62','66']) + ' ', sections: [6] },
1564 { area: '016' + this.pick(['06','29','35','47','59','95']) + ' ', sections: [6] },
1565 { area: '017' + this.pick(['26','44','50','68']) + ' ', sections: [6] },
1566 { area: '018' + this.pick(['27','37','84','97']) + ' ', sections: [6] },
1567 { area: '019' + this.pick(['00','05','35','46','49','63','95']) + ' ', sections: [6] }
1568 ]);
1569 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '', 'g');
1570 } else {
1571 numPick = this.pick([
1572 { area: '07' + this.pick(['4','5','7','8','9']), sections: [2,6] },
1573 { area: '07624 ', sections: [6] }
1574 ]);
1575 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '');
1576 }
1577 break;
1578 case 'za':
1579 if (!options.mobile) {
1580 numPick = this.pick([
1581 '01' + this.pick(['0', '1', '2', '3', '4', '5', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1582 '02' + this.pick(['1', '2', '3', '4', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1583 '03' + this.pick(['1', '2', '3', '5', '6', '9']) + self.string({ pool: '0123456789', length: 7}),
1584 '04' + this.pick(['1', '2', '3', '4', '5','6','7', '8','9']) + self.string({ pool: '0123456789', length: 7}),
1585 '05' + this.pick(['1', '3', '4', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1586 ]);
1587 phone = options.formatted || numPick;
1588 } else {
1589 numPick = this.pick([
1590 '060' + this.pick(['3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1591 '061' + this.pick(['0','1','2','3','4','5','8']) + self.string({ pool: '0123456789', length: 6}),
1592 '06' + self.string({ pool: '0123456789', length: 7}),
1593 '071' + this.pick(['0','1','2','3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1594 '07' + this.pick(['2','3','4','6','7','8','9']) + self.string({ pool: '0123456789', length: 7}),
1595 '08' + this.pick(['0','1','2','3','4','5']) + self.string({ pool: '0123456789', length: 7}),
1596 ]);
1597 phone = options.formatted || numPick;
1598 }
1599 break;
1600 case 'us':
1601 var areacode = this.areacode(options).toString();
1602 var exchange = this.natural({ min: 2, max: 9 }).toString() +
1603 this.natural({ min: 0, max: 9 }).toString() +
1604 this.natural({ min: 0, max: 9 }).toString();
1605 var subscriber = this.natural({ min: 1000, max: 9999 }).toString(); // this could be random [0-9]{4}
1606 phone = options.formatted ? areacode + ' ' + exchange + '-' + subscriber : areacode + exchange + subscriber;
1607 break;
1608 case 'br':
1609 var areaCode = this.pick(["11", "12", "13", "14", "15", "16", "17", "18", "19", "21", "22", "24", "27", "28", "31", "32", "33", "34", "35", "37", "38", "41", "42", "43", "44", "45", "46", "47", "48", "49", "51", "53", "54", "55", "61", "62", "63", "64", "65", "66", "67", "68", "69", "71", "73", "74", "75", "77", "79", "81", "82", "83", "84", "85", "86", "87", "88", "89", "91", "92", "93", "94", "95", "96", "97", "98", "99"]);
1610 var prefix;
1611 if (options.mobile) {
1612 // Brasilian official reference (mobile): http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=330
1613 prefix = '9' + self.string({ pool: '0123456789', length: 4});
1614 } else {
1615 // Brasilian official reference: http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=331
1616 prefix = this.natural({ min: 2000, max: 5999 }).toString();
1617 }
1618 var mcdu = self.string({ pool: '0123456789', length: 4});
1619 phone = options.formatted ? '(' + areaCode + ') ' + prefix + '-' + mcdu : areaCode + prefix + mcdu;
1620 break;
1621 }
1622 return phone;
1623 };
1624
1625 Chance.prototype.postal = function () {
1626 // Postal District
1627 var pd = this.character({pool: "XVTSRPNKLMHJGECBA"});
1628 // Forward Sortation Area (FSA)
1629 var fsa = pd + this.natural({max: 9}) + this.character({alpha: true, casing: "upper"});
1630 // Local Delivery Unut (LDU)
1631 var ldu = this.natural({max: 9}) + this.character({alpha: true, casing: "upper"}) + this.natural({max: 9});
1632
1633 return fsa + " " + ldu;
1634 };
1635
1636 Chance.prototype.counties = function (options) {
1637 options = initOptions(options, { country: 'uk' });
1638 return this.get("counties")[options.country.toLowerCase()];
1639 };
1640
1641 Chance.prototype.county = function (options) {
1642 return this.pick(this.counties(options)).name;
1643 };
1644
1645 Chance.prototype.provinces = function (options) {
1646 options = initOptions(options, { country: 'ca' });
1647 return this.get("provinces")[options.country.toLowerCase()];
1648 };
1649
1650 Chance.prototype.province = function (options) {
1651 return (options && options.full) ?
1652 this.pick(this.provinces(options)).name :
1653 this.pick(this.provinces(options)).abbreviation;
1654 };
1655
1656 Chance.prototype.state = function (options) {
1657 return (options && options.full) ?
1658 this.pick(this.states(options)).name :
1659 this.pick(this.states(options)).abbreviation;
1660 };
1661
1662 Chance.prototype.states = function (options) {
1663 options = initOptions(options, { country: 'us', us_states_and_dc: true } );
1664
1665 var states;
1666
1667 switch (options.country.toLowerCase()) {
1668 case 'us':
1669 var us_states_and_dc = this.get("us_states_and_dc"),
1670 territories = this.get("territories"),
1671 armed_forces = this.get("armed_forces");
1672
1673 states = [];
1674
1675 if (options.us_states_and_dc) {
1676 states = states.concat(us_states_and_dc);
1677 }
1678 if (options.territories) {
1679 states = states.concat(territories);
1680 }
1681 if (options.armed_forces) {
1682 states = states.concat(armed_forces);
1683 }
1684 break;
1685 case 'it':
1686 states = this.get("country_regions")[options.country.toLowerCase()];
1687 break;
1688 case 'uk':
1689 states = this.get("counties")[options.country.toLowerCase()];
1690 break;
1691 }
1692
1693 return states;
1694 };
1695
1696 Chance.prototype.street = function (options) {
1697 options = initOptions(options, { country: 'us', syllables: 2 });
1698 var street;
1699
1700 switch (options.country.toLowerCase()) {
1701 case 'us':
1702 street = this.word({ syllables: options.syllables });
1703 street = this.capitalize(street);
1704 street += ' ';
1705 street += options.short_suffix ?
1706 this.street_suffix(options).abbreviation :
1707 this.street_suffix(options).name;
1708 break;
1709 case 'it':
1710 street = this.word({ syllables: options.syllables });
1711 street = this.capitalize(street);
1712 street = (options.short_suffix ?
1713 this.street_suffix(options).abbreviation :
1714 this.street_suffix(options).name) + " " + street;
1715 break;
1716 }
1717 return street;
1718 };
1719
1720 Chance.prototype.street_suffix = function (options) {
1721 options = initOptions(options, { country: 'us' });
1722 return this.pick(this.street_suffixes(options));
1723 };
1724
1725 Chance.prototype.street_suffixes = function (options) {
1726 options = initOptions(options, { country: 'us' });
1727 // These are the most common suffixes.
1728 return this.get("street_suffixes")[options.country.toLowerCase()];
1729 };
1730
1731 // Note: only returning US zip codes, internationalization will be a whole
1732 // other beast to tackle at some point.
1733 Chance.prototype.zip = function (options) {
1734 var zip = this.n(this.natural, 5, {max: 9});
1735
1736 if (options && options.plusfour === true) {
1737 zip.push('-');
1738 zip = zip.concat(this.n(this.natural, 4, {max: 9}));
1739 }
1740
1741 return zip.join("");
1742 };
1743
1744 // -- End Location --
1745
1746 // -- Time
1747
1748 Chance.prototype.ampm = function () {
1749 return this.bool() ? 'am' : 'pm';
1750 };
1751
1752 Chance.prototype.date = function (options) {
1753 var date_string, date;
1754
1755 // If interval is specified we ignore preset
1756 if(options && (options.min || options.max)) {
1757 options = initOptions(options, {
1758 american: true,
1759 string: false
1760 });
1761 var min = typeof options.min !== "undefined" ? options.min.getTime() : 1;
1762 // 100,000,000 days measured relative to midnight at the beginning of 01 January, 1970 UTC. http://es5.github.io/#x15.9.1.1
1763 var max = typeof options.max !== "undefined" ? options.max.getTime() : 8640000000000000;
1764
1765 date = new Date(this.integer({min: min, max: max}));
1766 } else {
1767 var m = this.month({raw: true});
1768 var daysInMonth = m.days;
1769
1770 if(options && options.month) {
1771 // Mod 12 to allow months outside range of 0-11 (not encouraged, but also not prevented).
1772 daysInMonth = this.get('months')[((options.month % 12) + 12) % 12].days;
1773 }
1774
1775 options = initOptions(options, {
1776 year: parseInt(this.year(), 10),
1777 // Necessary to subtract 1 because Date() 0-indexes month but not day or year
1778 // for some reason.
1779 month: m.numeric - 1,
1780 day: this.natural({min: 1, max: daysInMonth}),
1781 hour: this.hour({twentyfour: true}),
1782 minute: this.minute(),
1783 second: this.second(),
1784 millisecond: this.millisecond(),
1785 american: true,
1786 string: false
1787 });
1788
1789 date = new Date(options.year, options.month, options.day, options.hour, options.minute, options.second, options.millisecond);
1790 }
1791
1792 if (options.american) {
1793 // Adding 1 to the month is necessary because Date() 0-indexes
1794 // months but not day for some odd reason.
1795 date_string = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
1796 } else {
1797 date_string = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();
1798 }
1799
1800 return options.string ? date_string : date;
1801 };
1802
1803 Chance.prototype.hammertime = function (options) {
1804 return this.date(options).getTime();
1805 };
1806
1807 Chance.prototype.hour = function (options) {
1808 options = initOptions(options, {
1809 min: options && options.twentyfour ? 0 : 1,
1810 max: options && options.twentyfour ? 23 : 12
1811 });
1812
1813 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1814 testRange(options.twentyfour && options.max > 23, "Chance: Max cannot be greater than 23 for twentyfour option.");
1815 testRange(!options.twentyfour && options.max > 12, "Chance: Max cannot be greater than 12.");
1816 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1817
1818 return this.natural({min: options.min, max: options.max});
1819 };
1820
1821 Chance.prototype.millisecond = function () {
1822 return this.natural({max: 999});
1823 };
1824
1825 Chance.prototype.minute = Chance.prototype.second = function (options) {
1826 options = initOptions(options, {min: 0, max: 59});
1827
1828 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1829 testRange(options.max > 59, "Chance: Max cannot be greater than 59.");
1830 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1831
1832 return this.natural({min: options.min, max: options.max});
1833 };
1834
1835 Chance.prototype.month = function (options) {
1836 options = initOptions(options, {min: 1, max: 12});
1837
1838 testRange(options.min < 1, "Chance: Min cannot be less than 1.");
1839 testRange(options.max > 12, "Chance: Max cannot be greater than 12.");
1840 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1841
1842 var month = this.pick(this.months().slice(options.min - 1, options.max));
1843 return options.raw ? month : month.name;
1844 };
1845
1846 Chance.prototype.months = function () {
1847 return this.get("months");
1848 };
1849
1850 Chance.prototype.second = function () {
1851 return this.natural({max: 59});
1852 };
1853
1854 Chance.prototype.timestamp = function () {
1855 return this.natural({min: 1, max: parseInt(new Date().getTime() / 1000, 10)});
1856 };
1857
1858 Chance.prototype.weekday = function (options) {
1859 options = initOptions(options, {weekday_only: false});
1860 var weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
1861 if (!options.weekday_only) {
1862 weekdays.push("Saturday");
1863 weekdays.push("Sunday");
1864 }
1865 return this.pickone(weekdays);
1866 };
1867
1868 Chance.prototype.year = function (options) {
1869 // Default to current year as min if none specified
1870 options = initOptions(options, {min: new Date().getFullYear()});
1871
1872 // Default to one century after current year as max if none specified
1873 options.max = (typeof options.max !== "undefined") ? options.max : options.min + 100;
1874
1875 return this.natural(options).toString();
1876 };
1877
1878 // -- End Time
1879
1880 // -- Finance --
1881
1882 Chance.prototype.cc = function (options) {
1883 options = initOptions(options);
1884
1885 var type, number, to_generate;
1886
1887 type = (options.type) ?
1888 this.cc_type({ name: options.type, raw: true }) :
1889 this.cc_type({ raw: true });
1890
1891 number = type.prefix.split("");
1892 to_generate = type.length - type.prefix.length - 1;
1893
1894 // Generates n - 1 digits
1895 number = number.concat(this.n(this.integer, to_generate, {min: 0, max: 9}));
1896
1897 // Generates the last digit according to Luhn algorithm
1898 number.push(this.luhn_calculate(number.join("")));
1899
1900 return number.join("");
1901 };
1902
1903 Chance.prototype.cc_types = function () {
1904 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
1905 return this.get("cc_types");
1906 };
1907
1908 Chance.prototype.cc_type = function (options) {
1909 options = initOptions(options);
1910 var types = this.cc_types(),
1911 type = null;
1912
1913 if (options.name) {
1914 for (var i = 0; i < types.length; i++) {
1915 // Accept either name or short_name to specify card type
1916 if (types[i].name === options.name || types[i].short_name === options.name) {
1917 type = types[i];
1918 break;
1919 }
1920 }
1921 if (type === null) {
1922 throw new RangeError("Chance: Credit card type '" + options.name + "' is not supported");
1923 }
1924 } else {
1925 type = this.pick(types);
1926 }
1927
1928 return options.raw ? type : type.name;
1929 };
1930
1931 // return all world currency by ISO 4217
1932 Chance.prototype.currency_types = function () {
1933 return this.get("currency_types");
1934 };
1935
1936 // return random world currency by ISO 4217
1937 Chance.prototype.currency = function () {
1938 return this.pick(this.currency_types());
1939 };
1940
1941 // return all timezones available
1942 Chance.prototype.timezones = function () {
1943 return this.get("timezones");
1944 };
1945
1946 // return random timezone
1947 Chance.prototype.timezone = function () {
1948 return this.pick(this.timezones());
1949 };
1950
1951 //Return random correct currency exchange pair (e.g. EUR/USD) or array of currency code
1952 Chance.prototype.currency_pair = function (returnAsString) {
1953 var currencies = this.unique(this.currency, 2, {
1954 comparator: function(arr, val) {
1955
1956 return arr.reduce(function(acc, item) {
1957 // If a match has been found, short circuit check and just return
1958 return acc || (item.code === val.code);
1959 }, false);
1960 }
1961 });
1962
1963 if (returnAsString) {
1964 return currencies[0].code + '/' + currencies[1].code;
1965 } else {
1966 return currencies;
1967 }
1968 };
1969
1970 Chance.prototype.dollar = function (options) {
1971 // By default, a somewhat more sane max for dollar than all available numbers
1972 options = initOptions(options, {max : 10000, min : 0});
1973
1974 var dollar = this.floating({min: options.min, max: options.max, fixed: 2}).toString(),
1975 cents = dollar.split('.')[1];
1976
1977 if (cents === undefined) {
1978 dollar += '.00';
1979 } else if (cents.length < 2) {
1980 dollar = dollar + '0';
1981 }
1982
1983 if (dollar < 0) {
1984 return '-$' + dollar.replace('-', '');
1985 } else {
1986 return '$' + dollar;
1987 }
1988 };
1989
1990 Chance.prototype.euro = function (options) {
1991 return Number(this.dollar(options).replace("$", "")).toLocaleString() + "€";
1992 };
1993
1994 Chance.prototype.exp = function (options) {
1995 options = initOptions(options);
1996 var exp = {};
1997
1998 exp.year = this.exp_year();
1999
2000 // If the year is this year, need to ensure month is greater than the
2001 // current month or this expiration will not be valid
2002 if (exp.year === (new Date().getFullYear()).toString()) {
2003 exp.month = this.exp_month({future: true});
2004 } else {
2005 exp.month = this.exp_month();
2006 }
2007
2008 return options.raw ? exp : exp.month + '/' + exp.year;
2009 };
2010
2011 Chance.prototype.exp_month = function (options) {
2012 options = initOptions(options);
2013 var month, month_int,
2014 // Date object months are 0 indexed
2015 curMonth = new Date().getMonth() + 1;
2016
2017 if (options.future && (curMonth !== 12)) {
2018 do {
2019 month = this.month({raw: true}).numeric;
2020 month_int = parseInt(month, 10);
2021 } while (month_int <= curMonth);
2022 } else {
2023 month = this.month({raw: true}).numeric;
2024 }
2025
2026 return month;
2027 };
2028
2029 Chance.prototype.exp_year = function () {
2030 var curMonth = new Date().getMonth() + 1,
2031 curYear = new Date().getFullYear();
2032
2033 return this.year({min: ((curMonth === 12) ? (curYear + 1) : curYear), max: (curYear + 10)});
2034 };
2035
2036 Chance.prototype.vat = function (options) {
2037 options = initOptions(options, { country: 'it' });
2038 switch (options.country.toLowerCase()) {
2039 case 'it':
2040 return this.it_vat();
2041 }
2042 };
2043
2044 /**
2045 * Generate a string matching IBAN pattern (https://en.wikipedia.org/wiki/International_Bank_Account_Number).
2046 * No country-specific formats support (yet)
2047 */
2048 Chance.prototype.iban = function () {
2049 var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
2050 var alphanum = alpha + '0123456789';
2051 var iban =
2052 this.string({ length: 2, pool: alpha }) +
2053 this.pad(this.integer({ min: 0, max: 99 }), 2) +
2054 this.string({ length: 4, pool: alphanum }) +
2055 this.pad(this.natural(), this.natural({ min: 6, max: 26 }));
2056 return iban;
2057 };
2058
2059 // -- End Finance
2060
2061 // -- Regional
2062
2063 Chance.prototype.it_vat = function () {
2064 var it_vat = this.natural({min: 1, max: 1800000});
2065
2066 it_vat = this.pad(it_vat, 7) + this.pad(this.pick(this.provinces({ country: 'it' })).code, 3);
2067 return it_vat + this.luhn_calculate(it_vat);
2068 };
2069
2070 /*
2071 * this generator is written following the official algorithm
2072 * all data can be passed explicitely or randomized by calling chance.cf() without options
2073 * the code does not check that the input data is valid (it goes beyond the scope of the generator)
2074 *
2075 * @param [Object] options = { first: first name,
2076 * last: last name,
2077 * gender: female|male,
2078 birthday: JavaScript date object,
2079 city: string(4), 1 letter + 3 numbers
2080 }
2081 * @return [string] codice fiscale
2082 *
2083 */
2084 Chance.prototype.cf = function (options) {
2085 options = options || {};
2086 var gender = !!options.gender ? options.gender : this.gender(),
2087 first = !!options.first ? options.first : this.first( { gender: gender, nationality: 'it'} ),
2088 last = !!options.last ? options.last : this.last( { nationality: 'it'} ),
2089 birthday = !!options.birthday ? options.birthday : this.birthday(),
2090 city = !!options.city ? options.city : this.pickone(['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'L', 'M', 'Z']) + this.pad(this.natural({max:999}), 3),
2091 cf = [],
2092 name_generator = function(name, isLast) {
2093 var temp,
2094 return_value = [];
2095
2096 if (name.length < 3) {
2097 return_value = name.split("").concat("XXX".split("")).splice(0,3);
2098 }
2099 else {
2100 temp = name.toUpperCase().split('').map(function(c){
2101 return ("BCDFGHJKLMNPRSTVWZ".indexOf(c) !== -1) ? c : undefined;
2102 }).join('');
2103 if (temp.length > 3) {
2104 if (isLast) {
2105 temp = temp.substr(0,3);
2106 } else {
2107 temp = temp[0] + temp.substr(2,2);
2108 }
2109 }
2110 if (temp.length < 3) {
2111 return_value = temp;
2112 temp = name.toUpperCase().split('').map(function(c){
2113 return ("AEIOU".indexOf(c) !== -1) ? c : undefined;
2114 }).join('').substr(0, 3 - return_value.length);
2115 }
2116 return_value = return_value + temp;
2117 }
2118
2119 return return_value;
2120 },
2121 date_generator = function(birthday, gender, that) {
2122 var lettermonths = ['A', 'B', 'C', 'D', 'E', 'H', 'L', 'M', 'P', 'R', 'S', 'T'];
2123
2124 return birthday.getFullYear().toString().substr(2) +
2125 lettermonths[birthday.getMonth()] +
2126 that.pad(birthday.getDate() + ((gender.toLowerCase() === "female") ? 40 : 0), 2);
2127 },
2128 checkdigit_generator = function(cf) {
2129 var range1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2130 range2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",
2131 evens = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2132 odds = "BAKPLCQDREVOSFTGUHMINJWZYX",
2133 digit = 0;
2134
2135
2136 for(var i = 0; i < 15; i++) {
2137 if (i % 2 !== 0) {
2138 digit += evens.indexOf(range2[range1.indexOf(cf[i])]);
2139 }
2140 else {
2141 digit += odds.indexOf(range2[range1.indexOf(cf[i])]);
2142 }
2143 }
2144 return evens[digit % 26];
2145 };
2146
2147 cf = cf.concat(name_generator(last, true), name_generator(first), date_generator(birthday, gender, this), city.toUpperCase().split("")).join("");
2148 cf += checkdigit_generator(cf.toUpperCase(), this);
2149
2150 return cf.toUpperCase();
2151 };
2152
2153 Chance.prototype.pl_pesel = function () {
2154 var number = this.natural({min: 1, max: 9999999999});
2155 var arr = this.pad(number, 10).split('');
2156 for (var i = 0; i < arr.length; i++) {
2157 arr[i] = parseInt(arr[i]);
2158 }
2159
2160 var controlNumber = (1 * arr[0] + 3 * arr[1] + 7 * arr[2] + 9 * arr[3] + 1 * arr[4] + 3 * arr[5] + 7 * arr[6] + 9 * arr[7] + 1 * arr[8] + 3 * arr[9]) % 10;
2161 if(controlNumber !== 0) {
2162 controlNumber = 10 - controlNumber;
2163 }
2164
2165 return arr.join('') + controlNumber;
2166 };
2167
2168 Chance.prototype.pl_nip = function () {
2169 var number = this.natural({min: 1, max: 999999999});
2170 var arr = this.pad(number, 9).split('');
2171 for (var i = 0; i < arr.length; i++) {
2172 arr[i] = parseInt(arr[i]);
2173 }
2174
2175 var controlNumber = (6 * arr[0] + 5 * arr[1] + 7 * arr[2] + 2 * arr[3] + 3 * arr[4] + 4 * arr[5] + 5 * arr[6] + 6 * arr[7] + 7 * arr[8]) % 11;
2176 if(controlNumber === 10) {
2177 return this.pl_nip();
2178 }
2179
2180 return arr.join('') + controlNumber;
2181 };
2182
2183 Chance.prototype.pl_regon = function () {
2184 var number = this.natural({min: 1, max: 99999999});
2185 var arr = this.pad(number, 8).split('');
2186 for (var i = 0; i < arr.length; i++) {
2187 arr[i] = parseInt(arr[i]);
2188 }
2189
2190 var controlNumber = (8 * arr[0] + 9 * arr[1] + 2 * arr[2] + 3 * arr[3] + 4 * arr[4] + 5 * arr[5] + 6 * arr[6] + 7 * arr[7]) % 11;
2191 if(controlNumber === 10) {
2192 controlNumber = 0;
2193 }
2194
2195 return arr.join('') + controlNumber;
2196 };
2197
2198 // -- End Regional
2199
2200 // -- Music --
2201
2202 Chance.prototype.note = function(options) {
2203 // choices for 'notes' option:
2204 // flatKey - chromatic scale with flat notes (default)
2205 // sharpKey - chromatic scale with sharp notes
2206 // flats - just flat notes
2207 // sharps - just sharp notes
2208 // naturals - just natural notes
2209 // all - naturals, sharps and flats
2210 options = initOptions(options, { notes : 'flatKey'});
2211 var scales = {
2212 naturals: ['C', 'D', 'E', 'F', 'G', 'A', 'B'],
2213 flats: ['D♭', 'E♭', 'G♭', 'A♭', 'B♭'],
2214 sharps: ['C♯', 'D♯', 'F♯', 'G♯', 'A♯']
2215 };
2216 scales.all = scales.naturals.concat(scales.flats.concat(scales.sharps))
2217 scales.flatKey = scales.naturals.concat(scales.flats)
2218 scales.sharpKey = scales.naturals.concat(scales.sharps)
2219 return this.pickone(scales[options.notes]);
2220 }
2221
2222 Chance.prototype.midi_note = function(options) {
2223 var min = 0;
2224 var max = 127;
2225 options = initOptions(options, { min : min, max : max });
2226 return this.integer({min: options.min, max: options.max});
2227 }
2228
2229 Chance.prototype.chord_quality = function(options) {
2230 options = initOptions(options, { jazz: true });
2231 var chord_qualities = ['maj', 'min', 'aug', 'dim'];
2232 if (options.jazz){
2233 chord_qualities = [
2234 'maj7',
2235 'min7',
2236 '7',
2237 'sus',
2238 'dim',
2239 'ø'
2240 ];
2241 }
2242 return this.pickone(chord_qualities);
2243 }
2244
2245 Chance.prototype.chord = function (options) {
2246 options = initOptions(options);
2247 return this.note(options) + this.chord_quality(options);
2248 }
2249
2250 Chance.prototype.tempo = function (options) {
2251 var min = 40;
2252 var max = 320;
2253 options = initOptions(options, {min: min, max: max});
2254 return this.integer({min: options.min, max: options.max});
2255 }
2256
2257 // -- End Music
2258
2259 // -- Miscellaneous --
2260
2261 // Coin - Flip, flip, flipadelphia
2262 Chance.prototype.coin = function(options) {
2263 return this.bool() ? "heads" : "tails";
2264 }
2265
2266 // Dice - For all the board game geeks out there, myself included ;)
2267 function diceFn (range) {
2268 return function () {
2269 return this.natural(range);
2270 };
2271 }
2272 Chance.prototype.d4 = diceFn({min: 1, max: 4});
2273 Chance.prototype.d6 = diceFn({min: 1, max: 6});
2274 Chance.prototype.d8 = diceFn({min: 1, max: 8});
2275 Chance.prototype.d10 = diceFn({min: 1, max: 10});
2276 Chance.prototype.d12 = diceFn({min: 1, max: 12});
2277 Chance.prototype.d20 = diceFn({min: 1, max: 20});
2278 Chance.prototype.d30 = diceFn({min: 1, max: 30});
2279 Chance.prototype.d100 = diceFn({min: 1, max: 100});
2280
2281 Chance.prototype.rpg = function (thrown, options) {
2282 options = initOptions(options);
2283 if (!thrown) {
2284 throw new RangeError("Chance: A type of die roll must be included");
2285 } else {
2286 var bits = thrown.toLowerCase().split("d"),
2287 rolls = [];
2288
2289 if (bits.length !== 2 || !parseInt(bits[0], 10) || !parseInt(bits[1], 10)) {
2290 throw new Error("Chance: Invalid format provided. Please provide #d# where the first # is the number of dice to roll, the second # is the max of each die");
2291 }
2292 for (var i = bits[0]; i > 0; i--) {
2293 rolls[i - 1] = this.natural({min: 1, max: bits[1]});
2294 }
2295 return (typeof options.sum !== 'undefined' && options.sum) ? rolls.reduce(function (p, c) { return p + c; }) : rolls;
2296 }
2297 };
2298
2299 // Guid
2300 Chance.prototype.guid = function (options) {
2301 options = initOptions(options, { version: 5 });
2302
2303 var guid_pool = "abcdef1234567890",
2304 variant_pool = "ab89",
2305 guid = this.string({ pool: guid_pool, length: 8 }) + '-' +
2306 this.string({ pool: guid_pool, length: 4 }) + '-' +
2307 // The Version
2308 options.version +
2309 this.string({ pool: guid_pool, length: 3 }) + '-' +
2310 // The Variant
2311 this.string({ pool: variant_pool, length: 1 }) +
2312 this.string({ pool: guid_pool, length: 3 }) + '-' +
2313 this.string({ pool: guid_pool, length: 12 });
2314 return guid;
2315 };
2316
2317 // Hash
2318 Chance.prototype.hash = function (options) {
2319 options = initOptions(options, {length : 40, casing: 'lower'});
2320 var pool = options.casing === 'upper' ? HEX_POOL.toUpperCase() : HEX_POOL;
2321 return this.string({pool: pool, length: options.length});
2322 };
2323
2324 Chance.prototype.luhn_check = function (num) {
2325 var str = num.toString();
2326 var checkDigit = +str.substring(str.length - 1);
2327 return checkDigit === this.luhn_calculate(+str.substring(0, str.length - 1));
2328 };
2329
2330 Chance.prototype.luhn_calculate = function (num) {
2331 var digits = num.toString().split("").reverse();
2332 var sum = 0;
2333 var digit;
2334
2335 for (var i = 0, l = digits.length; l > i; ++i) {
2336 digit = +digits[i];
2337 if (i % 2 === 0) {
2338 digit *= 2;
2339 if (digit > 9) {
2340 digit -= 9;
2341 }
2342 }
2343 sum += digit;
2344 }
2345 return (sum * 9) % 10;
2346 };
2347
2348 // MD5 Hash
2349 Chance.prototype.md5 = function(options) {
2350 var opts = { str: '', key: null, raw: false };
2351
2352 if (!options) {
2353 opts.str = this.string();
2354 options = {};
2355 }
2356 else if (typeof options === 'string') {
2357 opts.str = options;
2358 options = {};
2359 }
2360 else if (typeof options !== 'object') {
2361 return null;
2362 }
2363 else if(options.constructor === 'Array') {
2364 return null;
2365 }
2366
2367 opts = initOptions(options, opts);
2368
2369 if(!opts.str){
2370 throw new Error('A parameter is required to return an md5 hash.');
2371 }
2372
2373 return this.bimd5.md5(opts.str, opts.key, opts.raw);
2374 };
2375
2376 /**
2377 * #Description:
2378 * =====================================================
2379 * Generate random file name with extension
2380 *
2381 * The argument provide extension type
2382 * -> raster
2383 * -> vector
2384 * -> 3d
2385 * -> document
2386 *
2387 * If nothing is provided the function return random file name with random
2388 * extension type of any kind
2389 *
2390 * The user can validate the file name length range
2391 * If nothing provided the generated file name is random
2392 *
2393 * #Extension Pool :
2394 * * Currently the supported extensions are
2395 * -> some of the most popular raster image extensions
2396 * -> some of the most popular vector image extensions
2397 * -> some of the most popular 3d image extensions
2398 * -> some of the most popular document extensions
2399 *
2400 * #Examples :
2401 * =====================================================
2402 *
2403 * Return random file name with random extension. The file extension
2404 * is provided by a predefined collection of extensions. More about the extension
2405 * pool can be found in #Extension Pool section
2406 *
2407 * chance.file()
2408 * => dsfsdhjf.xml
2409 *
2410 * In order to generate a file name with specific length, specify the
2411 * length property and integer value. The extension is going to be random
2412 *
2413 * chance.file({length : 10})
2414 * => asrtineqos.pdf
2415 *
2416 * In order to generate file with extension from some of the predefined groups
2417 * of the extension pool just specify the extension pool category in fileType property
2418 *
2419 * chance.file({fileType : 'raster'})
2420 * => dshgssds.psd
2421 *
2422 * You can provide specific extension for your files
2423 * chance.file({extension : 'html'})
2424 * => djfsd.html
2425 *
2426 * Or you could pass custom collection of extensions by array or by object
2427 * chance.file({extensions : [...]})
2428 * => dhgsdsd.psd
2429 *
2430 * chance.file({extensions : { key : [...], key : [...]}})
2431 * => djsfksdjsd.xml
2432 *
2433 * @param [collection] options
2434 * @return [string]
2435 *
2436 */
2437 Chance.prototype.file = function(options) {
2438
2439 var fileOptions = options || {};
2440 var poolCollectionKey = "fileExtension";
2441 var typeRange = Object.keys(this.get("fileExtension"));//['raster', 'vector', '3d', 'document'];
2442 var fileName;
2443 var fileExtension;
2444
2445 // Generate random file name
2446 fileName = this.word({length : fileOptions.length});
2447
2448 // Generate file by specific extension provided by the user
2449 if(fileOptions.extension) {
2450
2451 fileExtension = fileOptions.extension;
2452 return (fileName + '.' + fileExtension);
2453 }
2454
2455 // Generate file by specific extension collection
2456 if(fileOptions.extensions) {
2457
2458 if(Array.isArray(fileOptions.extensions)) {
2459
2460 fileExtension = this.pickone(fileOptions.extensions);
2461 return (fileName + '.' + fileExtension);
2462 }
2463 else if(fileOptions.extensions.constructor === Object) {
2464
2465 var extensionObjectCollection = fileOptions.extensions;
2466 var keys = Object.keys(extensionObjectCollection);
2467
2468 fileExtension = this.pickone(extensionObjectCollection[this.pickone(keys)]);
2469 return (fileName + '.' + fileExtension);
2470 }
2471
2472 throw new Error("Chance: Extensions must be an Array or Object");
2473 }
2474
2475 // Generate file extension based on specific file type
2476 if(fileOptions.fileType) {
2477
2478 var fileType = fileOptions.fileType;
2479 if(typeRange.indexOf(fileType) !== -1) {
2480
2481 fileExtension = this.pickone(this.get(poolCollectionKey)[fileType]);
2482 return (fileName + '.' + fileExtension);
2483 }
2484
2485 throw new RangeError("Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'");
2486 }
2487
2488 // Generate random file name if no extension options are passed
2489 fileExtension = this.pickone(this.get(poolCollectionKey)[this.pickone(typeRange)]);
2490 return (fileName + '.' + fileExtension);
2491 };
2492
2493 var data = {
2494
2495
2496
2497 firstNames: {
2498 "male": {
2499 "en": ["James", "John", "Robert", "Michael", "William", "David", "Richard", "Joseph", "Charles", "Thomas", "Christopher", "Daniel", "Matthew", "George", "Donald", "Anthony", "Paul", "Mark", "Edward", "Steven", "Kenneth", "Andrew", "Brian", "Joshua", "Kevin", "Ronald", "Timothy", "Jason", "Jeffrey", "Frank", "Gary", "Ryan", "Nicholas", "Eric", "Stephen", "Jacob", "Larry", "Jonathan", "Scott", "Raymond", "Justin", "Brandon", "Gregory", "Samuel", "Benjamin", "Patrick", "Jack", "Henry", "Walter", "Dennis", "Jerry", "Alexander", "Peter", "Tyler", "Douglas", "Harold", "Aaron", "Jose", "Adam", "Arthur", "Zachary", "Carl", "Nathan", "Albert", "Kyle", "Lawrence", "Joe", "Willie", "Gerald", "Roger", "Keith", "Jeremy", "Terry", "Harry", "Ralph", "Sean", "Jesse", "Roy", "Louis", "Billy", "Austin", "Bruce", "Eugene", "Christian", "Bryan", "Wayne", "Russell", "Howard", "Fred", "Ethan", "Jordan", "Philip", "Alan", "Juan", "Randy", "Vincent", "Bobby", "Dylan", "Johnny", "Phillip", "Victor", "Clarence", "Ernest", "Martin", "Craig", "Stanley", "Shawn", "Travis", "Bradley", "Leonard", "Earl", "Gabriel", "Jimmy", "Francis", "Todd", "Noah", "Danny", "Dale", "Cody", "Carlos", "Allen", "Frederick", "Logan", "Curtis", "Alex", "Joel", "Luis", "Norman", "Marvin", "Glenn", "Tony", "Nathaniel", "Rodney", "Melvin", "Alfred", "Steve", "Cameron", "Chad", "Edwin", "Caleb", "Evan", "Antonio", "Lee", "Herbert", "Jeffery", "Isaac", "Derek", "Ricky", "Marcus", "Theodore", "Elijah", "Luke", "Jesus", "Eddie", "Troy", "Mike", "Dustin", "Ray", "Adrian", "Bernard", "Leroy", "Angel", "Randall", "Wesley", "Ian", "Jared", "Mason", "Hunter", "Calvin", "Oscar", "Clifford", "Jay", "Shane", "Ronnie", "Barry", "Lucas", "Corey", "Manuel", "Leo", "Tommy", "Warren", "Jackson", "Isaiah", "Connor", "Don", "Dean", "Jon", "Julian", "Miguel", "Bill", "Lloyd", "Charlie", "Mitchell", "Leon", "Jerome", "Darrell", "Jeremiah", "Alvin", "Brett", "Seth", "Floyd", "Jim", "Blake", "Micheal", "Gordon", "Trevor", "Lewis", "Erik", "Edgar", "Vernon", "Devin", "Gavin", "Jayden", "Chris", "Clyde", "Tom", "Derrick", "Mario", "Brent", "Marc", "Herman", "Chase", "Dominic", "Ricardo", "Franklin", "Maurice", "Max", "Aiden", "Owen", "Lester", "Gilbert", "Elmer", "Gene", "Francisco", "Glen", "Cory", "Garrett", "Clayton", "Sam", "Jorge", "Chester", "Alejandro", "Jeff", "Harvey", "Milton", "Cole", "Ivan", "Andre", "Duane", "Landon"],
2500 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0163
2501 "it": ["Adolfo", "Alberto", "Aldo", "Alessandro", "Alessio", "Alfredo", "Alvaro", "Andrea", "Angelo", "Angiolo", "Antonino", "Antonio", "Attilio", "Benito", "Bernardo", "Bruno", "Carlo", "Cesare", "Christian", "Claudio", "Corrado", "Cosimo", "Cristian", "Cristiano", "Daniele", "Dario", "David", "Davide", "Diego", "Dino", "Domenico", "Duccio", "Edoardo", "Elia", "Elio", "Emanuele", "Emiliano", "Emilio", "Enrico", "Enzo", "Ettore", "Fabio", "Fabrizio", "Federico", "Ferdinando", "Fernando", "Filippo", "Francesco", "Franco", "Gabriele", "Giacomo", "Giampaolo", "Giampiero", "Giancarlo", "Gianfranco", "Gianluca", "Gianmarco", "Gianni", "Gino", "Giorgio", "Giovanni", "Giuliano", "Giulio", "Giuseppe", "Graziano", "Gregorio", "Guido", "Iacopo", "Jacopo", "Lapo", "Leonardo", "Lorenzo", "Luca", "Luciano", "Luigi", "Manuel", "Marcello", "Marco", "Marino", "Mario", "Massimiliano", "Massimo", "Matteo", "Mattia", "Maurizio", "Mauro", "Michele", "Mirko", "Mohamed", "Nello", "Neri", "Niccolò", "Nicola", "Osvaldo", "Otello", "Paolo", "Pier Luigi", "Piero", "Pietro", "Raffaele", "Remo", "Renato", "Renzo", "Riccardo", "Roberto", "Rolando", "Romano", "Salvatore", "Samuele", "Sandro", "Sergio", "Silvano", "Simone", "Stefano", "Thomas", "Tommaso", "Ubaldo", "Ugo", "Umberto", "Valerio", "Valter", "Vasco", "Vincenzo", "Vittorio"],
2502 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2503 "nl": ["Aaron","Abel","Adam","Adriaan","Albert","Alexander","Ali","Arjen","Arno","Bart","Bas","Bastiaan","Benjamin","Bob", "Boris","Bram","Brent","Cas","Casper","Chris","Christiaan","Cornelis","Daan","Daley","Damian","Dani","Daniel","Daniël","David","Dean","Dirk","Dylan","Egbert","Elijah","Erik","Erwin","Evert","Ezra","Fabian","Fedde","Finn","Florian","Floris","Frank","Frans","Frederik","Freek","Geert","Gerard","Gerben","Gerrit","Gijs","Guus","Hans","Hendrik","Henk","Herman","Hidde","Hugo","Jaap","Jan Jaap","Jan-Willem","Jack","Jacob","Jan","Jason","Jasper","Jayden","Jelle","Jelte","Jens","Jeroen","Jesse","Jim","Job","Joep","Johannes","John","Jonathan","Joris","Joshua","Joël","Julian","Kees","Kevin","Koen","Lars","Laurens","Leendert","Lennard","Lodewijk","Luc","Luca","Lucas","Lukas","Luuk","Maarten","Marcus","Martijn","Martin","Matthijs","Maurits","Max","Mees","Melle","Mick","Mika","Milan","Mohamed","Mohammed","Morris","Muhammed","Nathan","Nick","Nico","Niek","Niels","Noah","Noud","Olivier","Oscar","Owen","Paul","Pepijn","Peter","Pieter","Pim","Quinten","Reinier","Rens","Robin","Ruben","Sam","Samuel","Sander","Sebastiaan","Sem","Sep","Sepp","Siem","Simon","Stan","Stef","Steven","Stijn","Sven","Teun","Thijmen","Thijs","Thomas","Tijn","Tim","Timo","Tobias","Tom","Victor","Vince","Willem","Wim","Wouter","Yusuf"],
2504 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2505 "fr": ["Aaron","Abdon","Abel","Abélard","Abelin","Abondance","Abraham","Absalon","Acace","Achaire","Achille","Adalard","Adalbald","Adalbéron","Adalbert","Adalric","Adam","Adegrin","Adel","Adelin","Andelin","Adelphe","Adam","Adéodat","Adhémar","Adjutor","Adolphe","Adonis","Adon","Adrien","Agapet","Agathange","Agathon","Agilbert","Agénor","Agnan","Aignan","Agrippin","Aimable","Aimé","Alain","Alban","Albin","Aubin","Albéric","Albert","Albertet","Alcibiade","Alcide","Alcée","Alcime","Aldonce","Aldric","Aldéric","Aleaume","Alexandre","Alexis","Alix","Alliaume","Aleaume","Almine","Almire","Aloïs","Alphée","Alphonse","Alpinien","Alverède","Amalric","Amaury","Amandin","Amant","Ambroise","Amédée","Amélien","Amiel","Amour","Anaël","Anastase","Anatole","Ancelin","Andéol","Andoche","André","Andoche","Ange","Angelin","Angilbe","Anglebert","Angoustan","Anicet","Anne","Annibal","Ansbert","Anselme","Anthelme","Antheaume","Anthime","Antide","Antoine","Antonius","Antonin","Apollinaire","Apollon","Aquilin","Arcade","Archambaud","Archambeau","Archange","Archibald","Arian","Ariel","Ariste","Aristide","Armand","Armel","Armin","Arnould","Arnaud","Arolde","Arsène","Arsinoé","Arthaud","Arthème","Arthur","Ascelin","Athanase","Aubry","Audebert","Audouin","Audran","Audric","Auguste","Augustin","Aurèle","Aurélien","Aurian","Auxence","Axel","Aymard","Aymeric","Aymon","Aymond","Balthazar","Baptiste","Barnabé","Barthélemy","Bartimée","Basile","Bastien","Baudouin","Bénigne","Benjamin","Benoît","Bérenger","Bérard","Bernard","Bertrand","Blaise","Bon","Boniface","Bouchard","Brice","Brieuc","Bruno","Brunon","Calixte","Calliste","Camélien","Camille","Camillien","Candide","Caribert","Carloman","Cassandre","Cassien","Cédric","Céleste","Célestin","Célien","Césaire","César","Charles","Charlemagne","Childebert","Chilpéric","Chrétien","Christian","Christodule","Christophe","Chrysostome","Clarence","Claude","Claudien","Cléandre","Clément","Clotaire","Côme","Constance","Constant","Constantin","Corentin","Cyprien","Cyriaque","Cyrille","Cyril","Damien","Daniel","David","Delphin","Denis","Désiré","Didier","Dieudonné","Dimitri","Dominique","Dorian","Dorothée","Edgard","Edmond","Édouard","Éleuthère","Élie","Élisée","Émeric","Émile","Émilien","Emmanuel","Enguerrand","Épiphane","Éric","Esprit","Ernest","Étienne","Eubert","Eudes","Eudoxe","Eugène","Eusèbe","Eustache","Évariste","Évrard","Fabien","Fabrice","Falba","Félicité","Félix","Ferdinand","Fiacre","Fidèle","Firmin","Flavien","Flodoard","Florent","Florentin","Florestan","Florian","Fortuné","Foulques","Francisque","François","Français","Franciscus","Francs","Frédéric","Fulbert","Fulcran","Fulgence","Gabin","Gabriel","Gaël","Garnier","Gaston","Gaspard","Gatien","Gaud","Gautier","Gédéon","Geoffroy","Georges","Géraud","Gérard","Gerbert","Germain","Gervais","Ghislain","Gilbert","Gilles","Girart","Gislebert","Gondebaud","Gonthier","Gontran","Gonzague","Grégoire","Guérin","Gui","Guillaume","Gustave","Guy","Guyot","Hardouin","Hector","Hédelin","Hélier","Henri","Herbert","Herluin","Hervé","Hilaire","Hildebert","Hincmar","Hippolyte","Honoré","Hubert","Hugues","Innocent","Isabeau","Isidore","Jacques","Japhet","Jason","Jean","Jeannel","Jeannot","Jérémie","Jérôme","Joachim","Joanny","Job","Jocelyn","Joël","Johan","Jonas","Jonathan","Joseph","Josse","Josselin","Jourdain","Jude","Judicaël","Jules","Julien","Juste","Justin","Lambert","Landry","Laurent","Lazare","Léandre","Léon","Léonard","Léopold","Leu","Loup","Leufroy","Libère","Liétald","Lionel","Loïc","Longin","Lorrain","Lorraine","Lothaire","Louis","Loup","Luc","Lucas","Lucien","Ludolphe","Ludovic","Macaire","Malo","Mamert","Manassé","Marc","Marceau","Marcel","Marcelin","Marius","Marseille","Martial","Martin","Mathurin","Matthias","Mathias","Matthieu","Maugis","Maurice","Mauricet","Maxence","Maxime","Maximilien","Mayeul","Médéric","Melchior","Mence","Merlin","Mérovée","Michaël","Michel","Moïse","Morgan","Nathan","Nathanaël","Narcisse","Néhémie","Nestor","Nestor","Nicéphore","Nicolas","Noé","Noël","Norbert","Normand","Normands","Octave","Odilon","Odon","Oger","Olivier","Oury","Pacôme","Palémon","Parfait","Pascal","Paterne","Patrice","Paul","Pépin","Perceval","Philémon","Philibert","Philippe","Philothée","Pie","Pierre","Pierrick","Prosper","Quentin","Raoul","Raphaël","Raymond","Régis","Réjean","Rémi","Renaud","René","Reybaud","Richard","Robert","Roch","Rodolphe","Rodrigue","Roger","Roland","Romain","Romuald","Roméo","Rome","Ronan","Roselin","Salomon","Samuel","Savin","Savinien","Scholastique","Sébastien","Séraphin","Serge","Séverin","Sidoine","Sigebert","Sigismond","Silvère","Simon","Siméon","Sixte","Stanislas","Stéphane","Stephan","Sylvain","Sylvestre","Tancrède","Tanguy","Taurin","Théodore","Théodose","Théophile","Théophraste","Thibault","Thibert","Thierry","Thomas","Timoléon","Timothée","Titien","Tonnin","Toussaint","Trajan","Tristan","Turold","Tim","Ulysse","Urbain","Valentin","Valère","Valéry","Venance","Venant","Venceslas","Vianney","Victor","Victorien","Victorin","Vigile","Vincent","Vital","Vitalien","Vivien","Waleran","Wandrille","Xavier","Xénophon","Yves","Zacharie","Zaché","Zéphirin"]
2506 },
2507
2508 "female": {
2509 "en": ["Mary", "Emma", "Elizabeth", "Minnie", "Margaret", "Ida", "Alice", "Bertha", "Sarah", "Annie", "Clara", "Ella", "Florence", "Cora", "Martha", "Laura", "Nellie", "Grace", "Carrie", "Maude", "Mabel", "Bessie", "Jennie", "Gertrude", "Julia", "Hattie", "Edith", "Mattie", "Rose", "Catherine", "Lillian", "Ada", "Lillie", "Helen", "Jessie", "Louise", "Ethel", "Lula", "Myrtle", "Eva", "Frances", "Lena", "Lucy", "Edna", "Maggie", "Pearl", "Daisy", "Fannie", "Josephine", "Dora", "Rosa", "Katherine", "Agnes", "Marie", "Nora", "May", "Mamie", "Blanche", "Stella", "Ellen", "Nancy", "Effie", "Sallie", "Nettie", "Della", "Lizzie", "Flora", "Susie", "Maud", "Mae", "Etta", "Harriet", "Sadie", "Caroline", "Katie", "Lydia", "Elsie", "Kate", "Susan", "Mollie", "Alma", "Addie", "Georgia", "Eliza", "Lulu", "Nannie", "Lottie", "Amanda", "Belle", "Charlotte", "Rebecca", "Ruth", "Viola", "Olive", "Amelia", "Hannah", "Jane", "Virginia", "Emily", "Matilda", "Irene", "Kathryn", "Esther", "Willie", "Henrietta", "Ollie", "Amy", "Rachel", "Sara", "Estella", "Theresa", "Augusta", "Ora", "Pauline", "Josie", "Lola", "Sophia", "Leona", "Anne", "Mildred", "Ann", "Beulah", "Callie", "Lou", "Delia", "Eleanor", "Barbara", "Iva", "Louisa", "Maria", "Mayme", "Evelyn", "Estelle", "Nina", "Betty", "Marion", "Bettie", "Dorothy", "Luella", "Inez", "Lela", "Rosie", "Allie", "Millie", "Janie", "Cornelia", "Victoria", "Ruby", "Winifred", "Alta", "Celia", "Christine", "Beatrice", "Birdie", "Harriett", "Mable", "Myra", "Sophie", "Tillie", "Isabel", "Sylvia", "Carolyn", "Isabelle", "Leila", "Sally", "Ina", "Essie", "Bertie", "Nell", "Alberta", "Katharine", "Lora", "Rena", "Mina", "Rhoda", "Mathilda", "Abbie", "Eula", "Dollie", "Hettie", "Eunice", "Fanny", "Ola", "Lenora", "Adelaide", "Christina", "Lelia", "Nelle", "Sue", "Johanna", "Lilly", "Lucinda", "Minerva", "Lettie", "Roxie", "Cynthia", "Helena", "Hilda", "Hulda", "Bernice", "Genevieve", "Jean", "Cordelia", "Marian", "Francis", "Jeanette", "Adeline", "Gussie", "Leah", "Lois", "Lura", "Mittie", "Hallie", "Isabella", "Olga", "Phoebe", "Teresa", "Hester", "Lida", "Lina", "Winnie", "Claudia", "Marguerite", "Vera", "Cecelia", "Bess", "Emilie", "Rosetta", "Verna", "Myrtie", "Cecilia", "Elva", "Olivia", "Ophelia", "Georgie", "Elnora", "Violet", "Adele", "Lily", "Linnie", "Loretta", "Madge", "Polly", "Virgie", "Eugenia", "Lucile", "Lucille", "Mabelle", "Rosalie"],
2510 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0162
2511 "it": ["Ada", "Adriana", "Alessandra", "Alessia", "Alice", "Angela", "Anna", "Anna Maria", "Annalisa", "Annita", "Annunziata", "Antonella", "Arianna", "Asia", "Assunta", "Aurora", "Barbara", "Beatrice", "Benedetta", "Bianca", "Bruna", "Camilla", "Carla", "Carlotta", "Carmela", "Carolina", "Caterina", "Catia", "Cecilia", "Chiara", "Cinzia", "Clara", "Claudia", "Costanza", "Cristina", "Daniela", "Debora", "Diletta", "Dina", "Donatella", "Elena", "Eleonora", "Elisa", "Elisabetta", "Emanuela", "Emma", "Eva", "Federica", "Fernanda", "Fiorella", "Fiorenza", "Flora", "Franca", "Francesca", "Gabriella", "Gaia", "Gemma", "Giada", "Gianna", "Gina", "Ginevra", "Giorgia", "Giovanna", "Giulia", "Giuliana", "Giuseppa", "Giuseppina", "Grazia", "Graziella", "Greta", "Ida", "Ilaria", "Ines", "Iolanda", "Irene", "Irma", "Isabella", "Jessica", "Laura", "Lea", "Letizia", "Licia", "Lidia", "Liliana", "Lina", "Linda", "Lisa", "Livia", "Loretta", "Luana", "Lucia", "Luciana", "Lucrezia", "Luisa", "Manuela", "Mara", "Marcella", "Margherita", "Maria", "Maria Cristina", "Maria Grazia", "Maria Luisa", "Maria Pia", "Maria Teresa", "Marina", "Marisa", "Marta", "Martina", "Marzia", "Matilde", "Melissa", "Michela", "Milena", "Mirella", "Monica", "Natalina", "Nella", "Nicoletta", "Noemi", "Olga", "Paola", "Patrizia", "Piera", "Pierina", "Raffaella", "Rebecca", "Renata", "Rina", "Rita", "Roberta", "Rosa", "Rosanna", "Rossana", "Rossella", "Sabrina", "Sandra", "Sara", "Serena", "Silvana", "Silvia", "Simona", "Simonetta", "Sofia", "Sonia", "Stefania", "Susanna", "Teresa", "Tina", "Tiziana", "Tosca", "Valentina", "Valeria", "Vanda", "Vanessa", "Vanna", "Vera", "Veronica", "Vilma", "Viola", "Virginia", "Vittoria"],
2512 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2513 "nl": ["Ada", "Arianne", "Afke", "Amanda", "Amber", "Amy", "Aniek", "Anita", "Anja", "Anna", "Anne", "Annelies", "Annemarie", "Annette", "Anouk", "Astrid", "Aukje", "Barbara", "Bianca", "Carla", "Carlijn", "Carolien", "Chantal", "Charlotte", "Claudia", "Daniëlle", "Debora", "Diane", "Dora", "Eline", "Elise", "Ella", "Ellen", "Emma", "Esmee", "Evelien", "Esther", "Erica", "Eva", "Femke", "Fleur", "Floor", "Froukje", "Gea", "Gerda", "Hanna", "Hanneke", "Heleen", "Hilde", "Ilona", "Ina", "Inge", "Ingrid", "Iris", "Isabel", "Isabelle", "Janneke", "Jasmijn", "Jeanine", "Jennifer", "Jessica", "Johanna", "Joke", "Julia", "Julie", "Karen", "Karin", "Katja", "Kim", "Lara", "Laura", "Lena", "Lianne", "Lieke", "Lilian", "Linda", "Lisa", "Lisanne", "Lotte", "Louise", "Maaike", "Manon", "Marga", "Maria", "Marissa", "Marit", "Marjolein", "Martine", "Marleen", "Melissa", "Merel", "Miranda", "Michelle", "Mirjam", "Mirthe", "Naomi", "Natalie", 'Nienke', "Nina", "Noortje", "Olivia", "Patricia", "Paula", "Paulien", "Ramona", "Ria", "Rianne", "Roos", "Rosanne", "Ruth", "Sabrina", "Sandra", "Sanne", "Sara", "Saskia", "Silvia", "Sofia", "Sophie", "Sonja", "Suzanne", "Tamara", "Tess", "Tessa", "Tineke", "Valerie", "Vanessa", "Veerle", "Vera", "Victoria", "Wendy", "Willeke", "Yvonne", "Zoë"],
2514 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2515 "fr": ["Abdon","Abel","Abigaëlle","Abigaïl","Acacius","Acanthe","Adalbert","Adalsinde","Adegrine","Adélaïde","Adèle","Adélie","Adeline","Adeltrude","Adolphe","Adonis","Adrastée","Adrehilde","Adrienne","Agathe","Agilbert","Aglaé","Aignan","Agneflète","Agnès","Agrippine","Aimé","Alaine","Alaïs","Albane","Albérade","Alberte","Alcide","Alcine","Alcyone","Aldegonde","Aleth","Alexandrine","Alexine","Alice","Aliénor","Aliette","Aline","Alix","Alizé","Aloïse","Aloyse","Alphonsine","Althée","Amaliane","Amalthée","Amande","Amandine","Amant","Amarande","Amaranthe","Amaryllis","Ambre","Ambroisie","Amélie","Améthyste","Aminte","Anaël","Anaïs","Anastasie","Anatole","Ancelin","Andrée","Anémone","Angadrême","Angèle","Angeline","Angélique","Angilbert","Anicet","Annabelle","Anne","Annette","Annick","Annie","Annonciade","Ansbert","Anstrudie","Anthelme","Antigone","Antoinette","Antonine","Aphélie","Apolline","Apollonie","Aquiline","Arabelle","Arcadie","Archange","Argine","Ariane","Aricie","Ariel","Arielle","Arlette","Armance","Armande","Armandine","Armelle","Armide","Armelle","Armin","Arnaud","Arsène","Arsinoé","Artémis","Arthur","Ascelin","Ascension","Assomption","Astarté","Astérie","Astrée","Astrid","Athalie","Athanasie","Athina","Aube","Albert","Aude","Audrey","Augustine","Aure","Aurélie","Aurélien","Aurèle","Aurore","Auxence","Aveline","Abigaëlle","Avoye","Axelle","Aymard","Azalée","Adèle","Adeline","Barbe","Basilisse","Bathilde","Béatrice","Béatrix","Bénédicte","Bérengère","Bernadette","Berthe","Bertille","Beuve","Blanche","Blanc","Blandine","Brigitte","Brune","Brunehilde","Callista","Camille","Capucine","Carine","Caroline","Cassandre","Catherine","Cécile","Céleste","Célestine","Céline","Chantal","Charlène","Charline","Charlotte","Chloé","Christelle","Christiane","Christine","Claire","Clara","Claude","Claudine","Clarisse","Clémence","Clémentine","Cléo","Clio","Clotilde","Coline","Conception","Constance","Coralie","Coraline","Corentine","Corinne","Cyrielle","Daniel","Daniel","Daphné","Débora","Delphine","Denise","Diane","Dieudonné","Dominique","Doriane","Dorothée","Douce","Édith","Edmée","Éléonore","Éliane","Élia","Éliette","Élisabeth","Élise","Ella","Élodie","Éloïse","Elsa","Émeline","Émérance","Émérentienne","Émérencie","Émilie","Emma","Emmanuelle","Emmelie","Ernestine","Esther","Estelle","Eudoxie","Eugénie","Eulalie","Euphrasie","Eusébie","Évangéline","Eva","Ève","Évelyne","Fanny","Fantine","Faustine","Félicie","Fernande","Flavie","Fleur","Flore","Florence","Florie","Fortuné","France","Francia","Françoise","Francine","Gabrielle","Gaëlle","Garance","Geneviève","Georgette","Gerberge","Germaine","Gertrude","Gisèle","Guenièvre","Guilhemine","Guillemette","Gustave","Gwenael","Hélène","Héloïse","Henriette","Hermine","Hermione","Hippolyte","Honorine","Hortense","Huguette","Ines","Irène","Irina","Iris","Isabeau","Isabelle","Iseult","Isolde","Ismérie","Jacinthe","Jacqueline","Jade","Janine","Jeanne","Jocelyne","Joëlle","Joséphine","Judith","Julia","Julie","Jules","Juliette","Justine","Katy","Kathy","Katie","Laura","Laure","Laureline","Laurence","Laurene","Lauriane","Laurianne","Laurine","Léa","Léna","Léonie","Léon","Léontine","Lorraine","Lucie","Lucienne","Lucille","Ludivine","Lydie","Lydie","Megane","Madeleine","Magali","Maguelone","Mallaury","Manon","Marceline","Margot","Marguerite","Marianne","Marie","Myriam","Marie","Marine","Marion","Marlène","Marthe","Martine","Mathilde","Maud","Maureen","Mauricette","Maxime","Mélanie","Melissa","Mélissandre","Mélisande","Mélodie","Michel","Micheline","Mireille","Miriam","Moïse","Monique","Morgane","Muriel","Mylène","Nadège","Nadine","Nathalie","Nicole","Nicolette","Nine","Noël","Noémie","Océane","Odette","Odile","Olive","Olivia","Olympe","Ombline","Ombeline","Ophélie","Oriande","Oriane","Ozanne","Pascale","Pascaline","Paule","Paulette","Pauline","Priscille","Prisca","Prisque","Pécine","Pélagie","Pénélope","Perrine","Pétronille","Philippine","Philomène","Philothée","Primerose","Prudence","Pulchérie","Quentine","Quiéta","Quintia","Quintilla","Rachel","Raphaëlle","Raymonde","Rebecca","Régine","Réjeanne","René","Rita","Rita","Rolande","Romane","Rosalie","Rose","Roseline","Sabine","Salomé","Sandra","Sandrine","Sarah","Ségolène","Séverine","Sibylle","Simone","Sixt","Solange","Soline","Solène","Sophie","Stéphanie","Suzanne","Sylvain","Sylvie","Tatiana","Thaïs","Théodora","Thérèse","Tiphaine","Ursule","Valentine","Valérie","Véronique","Victoire","Victorine","Vinciane","Violette","Virginie","Viviane","Xavière","Yolande","Ysaline","Yvette","Yvonne","Zélie","Zita","Zoé"]
2516 }
2517 },
2518
2519 lastNames: {
2520 "en": ['Smith', 'Johnson', 'Williams', 'Jones', 'Brown', 'Davis', 'Miller', 'Wilson', 'Moore', 'Taylor', 'Anderson', 'Thomas', 'Jackson', 'White', 'Harris', 'Martin', 'Thompson', 'Garcia', 'Martinez', 'Robinson', 'Clark', 'Rodriguez', 'Lewis', 'Lee', 'Walker', 'Hall', 'Allen', 'Young', 'Hernandez', 'King', 'Wright', 'Lopez', 'Hill', 'Scott', 'Green', 'Adams', 'Baker', 'Gonzalez', 'Nelson', 'Carter', 'Mitchell', 'Perez', 'Roberts', 'Turner', 'Phillips', 'Campbell', 'Parker', 'Evans', 'Edwards', 'Collins', 'Stewart', 'Sanchez', 'Morris', 'Rogers', 'Reed', 'Cook', 'Morgan', 'Bell', 'Murphy', 'Bailey', 'Rivera', 'Cooper', 'Richardson', 'Cox', 'Howard', 'Ward', 'Torres', 'Peterson', 'Gray', 'Ramirez', 'James', 'Watson', 'Brooks', 'Kelly', 'Sanders', 'Price', 'Bennett', 'Wood', 'Barnes', 'Ross', 'Henderson', 'Coleman', 'Jenkins', 'Perry', 'Powell', 'Long', 'Patterson', 'Hughes', 'Flores', 'Washington', 'Butler', 'Simmons', 'Foster', 'Gonzales', 'Bryant', 'Alexander', 'Russell', 'Griffin', 'Diaz', 'Hayes', 'Myers', 'Ford', 'Hamilton', 'Graham', 'Sullivan', 'Wallace', 'Woods', 'Cole', 'West', 'Jordan', 'Owens', 'Reynolds', 'Fisher', 'Ellis', 'Harrison', 'Gibson', 'McDonald', 'Cruz', 'Marshall', 'Ortiz', 'Gomez', 'Murray', 'Freeman', 'Wells', 'Webb', 'Simpson', 'Stevens', 'Tucker', 'Porter', 'Hunter', 'Hicks', 'Crawford', 'Henry', 'Boyd', 'Mason', 'Morales', 'Kennedy', 'Warren', 'Dixon', 'Ramos', 'Reyes', 'Burns', 'Gordon', 'Shaw', 'Holmes', 'Rice', 'Robertson', 'Hunt', 'Black', 'Daniels', 'Palmer', 'Mills', 'Nichols', 'Grant', 'Knight', 'Ferguson', 'Rose', 'Stone', 'Hawkins', 'Dunn', 'Perkins', 'Hudson', 'Spencer', 'Gardner', 'Stephens', 'Payne', 'Pierce', 'Berry', 'Matthews', 'Arnold', 'Wagner', 'Willis', 'Ray', 'Watkins', 'Olson', 'Carroll', 'Duncan', 'Snyder', 'Hart', 'Cunningham', 'Bradley', 'Lane', 'Andrews', 'Ruiz', 'Harper', 'Fox', 'Riley', 'Armstrong', 'Carpenter', 'Weaver', 'Greene', 'Lawrence', 'Elliott', 'Chavez', 'Sims', 'Austin', 'Peters', 'Kelley', 'Franklin', 'Lawson', 'Fields', 'Gutierrez', 'Ryan', 'Schmidt', 'Carr', 'Vasquez', 'Castillo', 'Wheeler', 'Chapman', 'Oliver', 'Montgomery', 'Richards', 'Williamson', 'Johnston', 'Banks', 'Meyer', 'Bishop', 'McCoy', 'Howell', 'Alvarez', 'Morrison', 'Hansen', 'Fernandez', 'Garza', 'Harvey', 'Little', 'Burton', 'Stanley', 'Nguyen', 'George', 'Jacobs', 'Reid', 'Kim', 'Fuller', 'Lynch', 'Dean', 'Gilbert', 'Garrett', 'Romero', 'Welch', 'Larson', 'Frazier', 'Burke', 'Hanson', 'Day', 'Mendoza', 'Moreno', 'Bowman', 'Medina', 'Fowler', 'Brewer', 'Hoffman', 'Carlson', 'Silva', 'Pearson', 'Holland', 'Douglas', 'Fleming', 'Jensen', 'Vargas', 'Byrd', 'Davidson', 'Hopkins', 'May', 'Terry', 'Herrera', 'Wade', 'Soto', 'Walters', 'Curtis', 'Neal', 'Caldwell', 'Lowe', 'Jennings', 'Barnett', 'Graves', 'Jimenez', 'Horton', 'Shelton', 'Barrett', 'Obrien', 'Castro', 'Sutton', 'Gregory', 'McKinney', 'Lucas', 'Miles', 'Craig', 'Rodriquez', 'Chambers', 'Holt', 'Lambert', 'Fletcher', 'Watts', 'Bates', 'Hale', 'Rhodes', 'Pena', 'Beck', 'Newman', 'Haynes', 'McDaniel', 'Mendez', 'Bush', 'Vaughn', 'Parks', 'Dawson', 'Santiago', 'Norris', 'Hardy', 'Love', 'Steele', 'Curry', 'Powers', 'Schultz', 'Barker', 'Guzman', 'Page', 'Munoz', 'Ball', 'Keller', 'Chandler', 'Weber', 'Leonard', 'Walsh', 'Lyons', 'Ramsey', 'Wolfe', 'Schneider', 'Mullins', 'Benson', 'Sharp', 'Bowen', 'Daniel', 'Barber', 'Cummings', 'Hines', 'Baldwin', 'Griffith', 'Valdez', 'Hubbard', 'Salazar', 'Reeves', 'Warner', 'Stevenson', 'Burgess', 'Santos', 'Tate', 'Cross', 'Garner', 'Mann', 'Mack', 'Moss', 'Thornton', 'Dennis', 'McGee', 'Farmer', 'Delgado', 'Aguilar', 'Vega', 'Glover', 'Manning', 'Cohen', 'Harmon', 'Rodgers', 'Robbins', 'Newton', 'Todd', 'Blair', 'Higgins', 'Ingram', 'Reese', 'Cannon', 'Strickland', 'Townsend', 'Potter', 'Goodwin', 'Walton', 'Rowe', 'Hampton', 'Ortega', 'Patton', 'Swanson', 'Joseph', 'Francis', 'Goodman', 'Maldonado', 'Yates', 'Becker', 'Erickson', 'Hodges', 'Rios', 'Conner', 'Adkins', 'Webster', 'Norman', 'Malone', 'Hammond', 'Flowers', 'Cobb', 'Moody', 'Quinn', 'Blake', 'Maxwell', 'Pope', 'Floyd', 'Osborne', 'Paul', 'McCarthy', 'Guerrero', 'Lindsey', 'Estrada', 'Sandoval', 'Gibbs', 'Tyler', 'Gross', 'Fitzgerald', 'Stokes', 'Doyle', 'Sherman', 'Saunders', 'Wise', 'Colon', 'Gill', 'Alvarado', 'Greer', 'Padilla', 'Simon', 'Waters', 'Nunez', 'Ballard', 'Schwartz', 'McBride', 'Houston', 'Christensen', 'Klein', 'Pratt', 'Briggs', 'Parsons', 'McLaughlin', 'Zimmerman', 'French', 'Buchanan', 'Moran', 'Copeland', 'Roy', 'Pittman', 'Brady', 'McCormick', 'Holloway', 'Brock', 'Poole', 'Frank', 'Logan', 'Owen', 'Bass', 'Marsh', 'Drake', 'Wong', 'Jefferson', 'Park', 'Morton', 'Abbott', 'Sparks', 'Patrick', 'Norton', 'Huff', 'Clayton', 'Massey', 'Lloyd', 'Figueroa', 'Carson', 'Bowers', 'Roberson', 'Barton', 'Tran', 'Lamb', 'Harrington', 'Casey', 'Boone', 'Cortez', 'Clarke', 'Mathis', 'Singleton', 'Wilkins', 'Cain', 'Bryan', 'Underwood', 'Hogan', 'McKenzie', 'Collier', 'Luna', 'Phelps', 'McGuire', 'Allison', 'Bridges', 'Wilkerson', 'Nash', 'Summers', 'Atkins'],
2521 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0164 (first 1000)
2522 "it": ["Acciai", "Aglietti", "Agostini", "Agresti", "Ahmed", "Aiazzi", "Albanese", "Alberti", "Alessi", "Alfani", "Alinari", "Alterini", "Amato", "Ammannati", "Ancillotti", "Andrei", "Andreini", "Andreoni", "Angeli", "Anichini", "Antonelli", "Antonini", "Arena", "Ariani", "Arnetoli", "Arrighi", "Baccani", "Baccetti", "Bacci", "Bacherini", "Badii", "Baggiani", "Baglioni", "Bagni", "Bagnoli", "Baldassini", "Baldi", "Baldini", "Ballerini", "Balli", "Ballini", "Balloni", "Bambi", "Banchi", "Bandinelli", "Bandini", "Bani", "Barbetti", "Barbieri", "Barchielli", "Bardazzi", "Bardelli", "Bardi", "Barducci", "Bargellini", "Bargiacchi", "Barni", "Baroncelli", "Baroncini", "Barone", "Baroni", "Baronti", "Bartalesi", "Bartoletti", "Bartoli", "Bartolini", "Bartoloni", "Bartolozzi", "Basagni", "Basile", "Bassi", "Batacchi", "Battaglia", "Battaglini", "Bausi", "Becagli", "Becattini", "Becchi", "Becucci", "Bellandi", "Bellesi", "Belli", "Bellini", "Bellucci", "Bencini", "Benedetti", "Benelli", "Beni", "Benini", "Bensi", "Benucci", "Benvenuti", "Berlincioni", "Bernacchioni", "Bernardi", "Bernardini", "Berni", "Bernini", "Bertelli", "Berti", "Bertini", "Bessi", "Betti", "Bettini", "Biagi", "Biagini", "Biagioni", "Biagiotti", "Biancalani", "Bianchi", "Bianchini", "Bianco", "Biffoli", "Bigazzi", "Bigi", "Biliotti", "Billi", "Binazzi", "Bindi", "Bini", "Biondi", "Bizzarri", "Bocci", "Bogani", "Bolognesi", "Bonaiuti", "Bonanni", "Bonciani", "Boncinelli", "Bondi", "Bonechi", "Bongini", "Boni", "Bonini", "Borchi", "Boretti", "Borghi", "Borghini", "Borgioli", "Borri", "Borselli", "Boschi", "Bottai", "Bracci", "Braccini", "Brandi", "Braschi", "Bravi", "Brazzini", "Breschi", "Brilli", "Brizzi", "Brogelli", "Brogi", "Brogioni", "Brunelli", "Brunetti", "Bruni", "Bruno", "Brunori", "Bruschi", "Bucci", "Bucciarelli", "Buccioni", "Bucelli", "Bulli", "Burberi", "Burchi", "Burgassi", "Burroni", "Bussotti", "Buti", "Caciolli", "Caiani", "Calabrese", "Calamai", "Calamandrei", "Caldini", "Calo'", "Calonaci", "Calosi", "Calvelli", "Cambi", "Camiciottoli", "Cammelli", "Cammilli", "Campolmi", "Cantini", "Capanni", "Capecchi", "Caponi", "Cappelletti", "Cappelli", "Cappellini", "Cappugi", "Capretti", "Caputo", "Carbone", "Carboni", "Cardini", "Carlesi", "Carletti", "Carli", "Caroti", "Carotti", "Carrai", "Carraresi", "Carta", "Caruso", "Casalini", "Casati", "Caselli", "Casini", "Castagnoli", "Castellani", "Castelli", "Castellucci", "Catalano", "Catarzi", "Catelani", "Cavaciocchi", "Cavallaro", "Cavallini", "Cavicchi", "Cavini", "Ceccarelli", "Ceccatelli", "Ceccherelli", "Ceccherini", "Cecchi", "Cecchini", "Cecconi", "Cei", "Cellai", "Celli", "Cellini", "Cencetti", "Ceni", "Cenni", "Cerbai", "Cesari", "Ceseri", "Checcacci", "Checchi", "Checcucci", "Cheli", "Chellini", "Chen", "Cheng", "Cherici", "Cherubini", "Chiaramonti", "Chiarantini", "Chiarelli", "Chiari", "Chiarini", "Chiarugi", "Chiavacci", "Chiesi", "Chimenti", "Chini", "Chirici", "Chiti", "Ciabatti", "Ciampi", "Cianchi", "Cianfanelli", "Cianferoni", "Ciani", "Ciapetti", "Ciappi", "Ciardi", "Ciatti", "Cicali", "Ciccone", "Cinelli", "Cini", "Ciobanu", "Ciolli", "Cioni", "Cipriani", "Cirillo", "Cirri", "Ciucchi", "Ciuffi", "Ciulli", "Ciullini", "Clemente", "Cocchi", "Cognome", "Coli", "Collini", "Colombo", "Colzi", "Comparini", "Conforti", "Consigli", "Conte", "Conti", "Contini", "Coppini", "Coppola", "Corsi", "Corsini", "Corti", "Cortini", "Cosi", "Costa", "Costantini", "Costantino", "Cozzi", "Cresci", "Crescioli", "Cresti", "Crini", "Curradi", "D'Agostino", "D'Alessandro", "D'Amico", "D'Angelo", "Daddi", "Dainelli", "Dallai", "Danti", "Davitti", "De Angelis", "De Luca", "De Marco", "De Rosa", "De Santis", "De Simone", "De Vita", "Degl'Innocenti", "Degli Innocenti", "Dei", "Del Lungo", "Del Re", "Di Marco", "Di Stefano", "Dini", "Diop", "Dobre", "Dolfi", "Donati", "Dondoli", "Dong", "Donnini", "Ducci", "Dumitru", "Ermini", "Esposito", "Evangelisti", "Fabbri", "Fabbrini", "Fabbrizzi", "Fabbroni", "Fabbrucci", "Fabiani", "Facchini", "Faggi", "Fagioli", "Failli", "Faini", "Falciani", "Falcini", "Falcone", "Fallani", "Falorni", "Falsini", "Falugiani", "Fancelli", "Fanelli", "Fanetti", "Fanfani", "Fani", "Fantappie'", "Fantechi", "Fanti", "Fantini", "Fantoni", "Farina", "Fattori", "Favilli", "Fedi", "Fei", "Ferrante", "Ferrara", "Ferrari", "Ferraro", "Ferretti", "Ferri", "Ferrini", "Ferroni", "Fiaschi", "Fibbi", "Fiesoli", "Filippi", "Filippini", "Fini", "Fioravanti", "Fiore", "Fiorentini", "Fiorini", "Fissi", "Focardi", "Foggi", "Fontana", "Fontanelli", "Fontani", "Forconi", "Formigli", "Forte", "Forti", "Fortini", "Fossati", "Fossi", "Francalanci", "Franceschi", "Franceschini", "Franchi", "Franchini", "Franci", "Francini", "Francioni", "Franco", "Frassineti", "Frati", "Fratini", "Frilli", "Frizzi", "Frosali", "Frosini", "Frullini", "Fusco", "Fusi", "Gabbrielli", "Gabellini", "Gagliardi", "Galanti", "Galardi", "Galeotti", "Galletti", "Galli", "Gallo", "Gallori", "Gambacciani", "Gargani", "Garofalo", "Garuglieri", "Gashi", "Gasperini", "Gatti", "Gelli", "Gensini", "Gentile", "Gentili", "Geri", "Gerini", "Gheri", "Ghini", "Giachetti", "Giachi", "Giacomelli", "Gianassi", "Giani", "Giannelli", "Giannetti", "Gianni", "Giannini", "Giannoni", "Giannotti", "Giannozzi", "Gigli", "Giordano", "Giorgetti", "Giorgi", "Giovacchini", "Giovannelli", "Giovannetti", "Giovannini", "Giovannoni", "Giuliani", "Giunti", "Giuntini", "Giusti", "Gonnelli", "Goretti", "Gori", "Gradi", "Gramigni", "Grassi", "Grasso", "Graziani", "Grazzini", "Greco", "Grifoni", "Grillo", "Grimaldi", "Grossi", "Gualtieri", "Guarducci", "Guarino", "Guarnieri", "Guasti", "Guerra", "Guerri", "Guerrini", "Guidi", "Guidotti", "He", "Hoxha", "Hu", "Huang", "Iandelli", "Ignesti", "Innocenti", "Jin", "La Rosa", "Lai", "Landi", "Landini", "Lanini", "Lapi", "Lapini", "Lari", "Lascialfari", "Lastrucci", "Latini", "Lazzeri", "Lazzerini", "Lelli", "Lenzi", "Leonardi", "Leoncini", "Leone", "Leoni", "Lepri", "Li", "Liao", "Lin", "Linari", "Lippi", "Lisi", "Livi", "Lombardi", "Lombardini", "Lombardo", "Longo", "Lopez", "Lorenzi", "Lorenzini", "Lorini", "Lotti", "Lu", "Lucchesi", "Lucherini", "Lunghi", "Lupi", "Madiai", "Maestrini", "Maffei", "Maggi", "Maggini", "Magherini", "Magini", "Magnani", "Magnelli", "Magni", "Magnolfi", "Magrini", "Malavolti", "Malevolti", "Manca", "Mancini", "Manetti", "Manfredi", "Mangani", "Mannelli", "Manni", "Mannini", "Mannucci", "Manuelli", "Manzini", "Marcelli", "Marchese", "Marchetti", "Marchi", "Marchiani", "Marchionni", "Marconi", "Marcucci", "Margheri", "Mari", "Mariani", "Marilli", "Marinai", "Marinari", "Marinelli", "Marini", "Marino", "Mariotti", "Marsili", "Martelli", "Martinelli", "Martini", "Martino", "Marzi", "Masi", "Masini", "Masoni", "Massai", "Materassi", "Mattei", "Matteini", "Matteucci", "Matteuzzi", "Mattioli", "Mattolini", "Matucci", "Mauro", "Mazzanti", "Mazzei", "Mazzetti", "Mazzi", "Mazzini", "Mazzocchi", "Mazzoli", "Mazzoni", "Mazzuoli", "Meacci", "Mecocci", "Meini", "Melani", "Mele", "Meli", "Mengoni", "Menichetti", "Meoni", "Merlini", "Messeri", "Messina", "Meucci", "Miccinesi", "Miceli", "Micheli", "Michelini", "Michelozzi", "Migliori", "Migliorini", "Milani", "Miniati", "Misuri", "Monaco", "Montagnani", "Montagni", "Montanari", "Montelatici", "Monti", "Montigiani", "Montini", "Morandi", "Morandini", "Morelli", "Moretti", "Morganti", "Mori", "Morini", "Moroni", "Morozzi", "Mugnai", "Mugnaini", "Mustafa", "Naldi", "Naldini", "Nannelli", "Nanni", "Nannini", "Nannucci", "Nardi", "Nardini", "Nardoni", "Natali", "Ndiaye", "Nencetti", "Nencini", "Nencioni", "Neri", "Nesi", "Nesti", "Niccolai", "Niccoli", "Niccolini", "Nigi", "Nistri", "Nocentini", "Noferini", "Novelli", "Nucci", "Nuti", "Nutini", "Oliva", "Olivieri", "Olmi", "Orlandi", "Orlandini", "Orlando", "Orsini", "Ortolani", "Ottanelli", "Pacciani", "Pace", "Paci", "Pacini", "Pagani", "Pagano", "Paggetti", "Pagliai", "Pagni", "Pagnini", "Paladini", "Palagi", "Palchetti", "Palloni", "Palmieri", "Palumbo", "Pampaloni", "Pancani", "Pandolfi", "Pandolfini", "Panerai", "Panichi", "Paoletti", "Paoli", "Paolini", "Papi", "Papini", "Papucci", "Parenti", "Parigi", "Parisi", "Parri", "Parrini", "Pasquini", "Passeri", "Pecchioli", "Pecorini", "Pellegrini", "Pepi", "Perini", "Perrone", "Peruzzi", "Pesci", "Pestelli", "Petri", "Petrini", "Petrucci", "Pettini", "Pezzati", "Pezzatini", "Piani", "Piazza", "Piazzesi", "Piazzini", "Piccardi", "Picchi", "Piccini", "Piccioli", "Pieraccini", "Pieraccioni", "Pieralli", "Pierattini", "Pieri", "Pierini", "Pieroni", "Pietrini", "Pini", "Pinna", "Pinto", "Pinzani", "Pinzauti", "Piras", "Pisani", "Pistolesi", "Poggesi", "Poggi", "Poggiali", "Poggiolini", "Poli", "Pollastri", "Porciani", "Pozzi", "Pratellesi", "Pratesi", "Prosperi", "Pruneti", "Pucci", "Puccini", "Puccioni", "Pugi", "Pugliese", "Puliti", "Querci", "Quercioli", "Raddi", "Radu", "Raffaelli", "Ragazzini", "Ranfagni", "Ranieri", "Rastrelli", "Raugei", "Raveggi", "Renai", "Renzi", "Rettori", "Ricci", "Ricciardi", "Ridi", "Ridolfi", "Rigacci", "Righi", "Righini", "Rinaldi", "Risaliti", "Ristori", "Rizzo", "Rocchi", "Rocchini", "Rogai", "Romagnoli", "Romanelli", "Romani", "Romano", "Romei", "Romeo", "Romiti", "Romoli", "Romolini", "Rontini", "Rosati", "Roselli", "Rosi", "Rossetti", "Rossi", "Rossini", "Rovai", "Ruggeri", "Ruggiero", "Russo", "Sabatini", "Saccardi", "Sacchetti", "Sacchi", "Sacco", "Salerno", "Salimbeni", "Salucci", "Salvadori", "Salvestrini", "Salvi", "Salvini", "Sanesi", "Sani", "Sanna", "Santi", "Santini", "Santoni", "Santoro", "Santucci", "Sardi", "Sarri", "Sarti", "Sassi", "Sbolci", "Scali", "Scarpelli", "Scarselli", "Scopetani", "Secci", "Selvi", "Senatori", "Senesi", "Serafini", "Sereni", "Serra", "Sestini", "Sguanci", "Sieni", "Signorini", "Silvestri", "Simoncini", "Simonetti", "Simoni", "Singh", "Sodi", "Soldi", "Somigli", "Sorbi", "Sorelli", "Sorrentino", "Sottili", "Spina", "Spinelli", "Staccioli", "Staderini", "Stefanelli", "Stefani", "Stefanini", "Stella", "Susini", "Tacchi", "Tacconi", "Taddei", "Tagliaferri", "Tamburini", "Tanganelli", "Tani", "Tanini", "Tapinassi", "Tarchi", "Tarchiani", "Targioni", "Tassi", "Tassini", "Tempesti", "Terzani", "Tesi", "Testa", "Testi", "Tilli", "Tinti", "Tirinnanzi", "Toccafondi", "Tofanari", "Tofani", "Tognaccini", "Tonelli", "Tonini", "Torelli", "Torrini", "Tosi", "Toti", "Tozzi", "Trambusti", "Trapani", "Tucci", "Turchi", "Ugolini", "Ulivi", "Valente", "Valenti", "Valentini", "Vangelisti", "Vanni", "Vannini", "Vannoni", "Vannozzi", "Vannucchi", "Vannucci", "Ventura", "Venturi", "Venturini", "Vestri", "Vettori", "Vichi", "Viciani", "Vieri", "Vigiani", "Vignoli", "Vignolini", "Vignozzi", "Villani", "Vinci", "Visani", "Vitale", "Vitali", "Viti", "Viviani", "Vivoli", "Volpe", "Volpi", "Wang", "Wu", "Xu", "Yang", "Ye", "Zagli", "Zani", "Zanieri", "Zanobini", "Zecchi", "Zetti", "Zhang", "Zheng", "Zhou", "Zhu", "Zingoni", "Zini", "Zoppi"],
2523 // http://www.voornamelijk.nl/meest-voorkomende-achternamen-in-nederland-en-amsterdam/
2524 "nl":["Albers", "Alblas", "Appelman", "Baars", "Baas", "Bakker", "Blank", "Bleeker", "Blok", "Blom", "Boer", "Boers", "Boldewijn", "Boon", "Boot", "Bos", "Bosch", "Bosma", "Bosman", "Bouma", "Bouman", "Bouwman", "Brands", "Brouwer", "Burger", "Buijs", "Buitenhuis", "Ceder", "Cohen", "Dekker", "Dekkers", "Dijkman", "Dijkstra", "Driessen", "Drost", "Engel", "Evers", "Faber", "Franke", "Gerritsen", "Goedhart", "Goossens", "Groen", "Groenenberg", "Groot", "Haan", "Hart", "Heemskerk", "Hendriks", "Hermans", "Hoekstra", "Hofman", "Hopman", "Huisman", "Jacobs", "Jansen", "Janssen", "Jonker", "Jaspers", "Keijzer", "Klaassen", "Klein", "Koek", "Koenders", "Kok", "Kool", "Koopman", "Koopmans", "Koning", "Koster", "Kramer", "Kroon", "Kuijpers", "Kuiper", "Kuipers", "Kurt", "Koster", "Kwakman", "Los", "Lubbers", "Maas", "Markus", "Martens", "Meijer", "Mol", "Molenaar", "Mulder", "Nieuwenhuis", "Peeters", "Peters", "Pengel", "Pieters", "Pool", "Post", "Postma", "Prins", "Pronk", "Reijnders", "Rietveld", "Roest", "Roos", "Sanders", "Schaap", "Scheffer", "Schenk", "Schilder", "Schipper", "Schmidt", "Scholten", "Schouten", "Schut", "Schutte", "Schuurman", "Simons", "Smeets", "Smit", "Smits", "Snel", "Swinkels", "Tas", "Terpstra", "Timmermans", "Tol", "Tromp", "Troost", "Valk", "Veenstra", "Veldkamp", "Verbeek", "Verheul", "Verhoeven", "Vermeer", "Vermeulen", "Verweij", "Vink", "Visser", "Voorn", "Vos", "Wagenaar", "Wiersema", "Willems", "Willemsen", "Witteveen", "Wolff", "Wolters", "Zijlstra", "Zwart", "de Beer", "de Boer", "de Bruijn", "de Bruin", "de Graaf", "de Groot", "de Haan", "de Haas", "de Jager", "de Jong", "de Jonge", "de Koning", "de Lange", "de Leeuw", "de Ridder", "de Rooij", "de Ruiter", "de Vos", "de Vries", "de Waal", "de Wit", "de Zwart", "van Beek", "van Boven", "van Dam", "van Dijk", "van Dongen", "van Doorn", "van Egmond", "van Eijk", "van Es", "van Gelder", "van Gelderen", "van Houten", "van Hulst", "van Kempen", "van Kesteren", "van Leeuwen", "van Loon", "van Mill", "van Noord", "van Ommen", "van Ommeren", "van Oosten", "van Oostveen", "van Rijn", "van Schaik", "van Veen", "van Vliet", "van Wijk", "van Wijngaarden", "van den Poel", "van de Pol", "van den Ploeg", "van de Ven", "van den Berg", "van den Bosch", "van den Brink", "van den Broek", "van den Heuvel", "van der Heijden", "van der Horst", "van der Hulst", "van der Kroon", "van der Laan", "van der Linden", "van der Meer", "van der Meij", "van der Meulen", "van der Molen", "van der Sluis", "van der Spek", "van der Veen", "van der Velde", "van der Velden", "van der Vliet", "van der Wal"],
2525 // https://surnames.behindthename.com/top/lists/england-wales/1991
2526 "uk":["Smith","Jones","Williams","Taylor","Brown","Davies","Evans","Wilson","Thomas","Johnson","Roberts","Robinson","Thompson","Wright","Walker","White","Edwards","Hughes","Green","Hall","Lewis","Harris","Clarke","Patel","Jackson","Wood","Turner","Martin","Cooper","Hill","Ward","Morris","Moore","Clark","Lee","King","Baker","Harrison","Morgan","Allen","James","Scott","Phillips","Watson","Davis","Parker","Price","Bennett","Young","Griffiths","Mitchell","Kelly","Cook","Carter","Richardson","Bailey","Collins","Bell","Shaw","Murphy","Miller","Cox","Richards","Khan","Marshall","Anderson","Simpson","Ellis","Adams","Singh","Begum","Wilkinson","Foster","Chapman","Powell","Webb","Rogers","Gray","Mason","Ali","Hunt","Hussain","Campbell","Matthews","Owen","Palmer","Holmes","Mills","Barnes","Knight","Lloyd","Butler","Russell","Barker","Fisher","Stevens","Jenkins","Murray","Dixon","Harvey","Graham","Pearson","Ahmed","Fletcher","Walsh","Kaur","Gibson","Howard","Andrews","Stewart","Elliott","Reynolds","Saunders","Payne","Fox","Ford","Pearce","Day","Brooks","West","Lawrence","Cole","Atkinson","Bradley","Spencer","Gill","Dawson","Ball","Burton","O'brien","Watts","Rose","Booth","Perry","Ryan","Grant","Wells","Armstrong","Francis","Rees","Hayes","Hart","Hudson","Newman","Barrett","Webster","Hunter","Gregory","Carr","Lowe","Page","Marsh","Riley","Dunn","Woods","Parsons","Berry","Stone","Reid","Holland","Hawkins","Harding","Porter","Robertson","Newton","Oliver","Reed","Kennedy","Williamson","Bird","Gardner","Shah","Dean","Lane","Cooke","Bates","Henderson","Parry","Burgess","Bishop","Walton","Burns","Nicholson","Shepherd","Ross","Cross","Long","Freeman","Warren","Nicholls","Hamilton","Byrne","Sutton","Mcdonald","Yates","Hodgson","Robson","Curtis","Hopkins","O'connor","Harper","Coleman","Watkins","Moss","Mccarthy","Chambers","O'neill","Griffin","Sharp","Hardy","Wheeler","Potter","Osborne","Johnston","Gordon","Doyle","Wallace","George","Jordan","Hutchinson","Rowe","Burke","May","Pritchard","Gilbert","Willis","Higgins","Read","Miles","Stevenson","Stephenson","Hammond","Arnold","Buckley","Walters","Hewitt","Barber","Nelson","Slater","Austin","Sullivan","Whitehead","Mann","Frost","Lambert","Stephens","Blake","Akhtar","Lynch","Goodwin","Barton","Woodward","Thomson","Cunningham","Quinn","Barnett","Baxter","Bibi","Clayton","Nash","Greenwood","Jennings","Holt","Kemp","Poole","Gallagher","Bond","Stokes","Tucker","Davidson","Fowler","Heath","Norman","Middleton","Lawson","Banks","French","Stanley","Jarvis","Gibbs","Ferguson","Hayward","Carroll","Douglas","Dickinson","Todd","Barlow","Peters","Lucas","Knowles","Hartley","Miah","Simmons","Morton","Alexander","Field","Morrison","Norris","Townsend","Preston","Hancock","Thornton","Baldwin","Burrows","Briggs","Parkinson","Reeves","Macdonald","Lamb","Black","Abbott","Sanders","Thorpe","Holden","Tomlinson","Perkins","Ashton","Rhodes","Fuller","Howe","Bryant","Vaughan","Dale","Davey","Weston","Bartlett","Whittaker","Davison","Kent","Skinner","Birch","Morley","Daniels","Glover","Howell","Cartwright","Pugh","Humphreys","Goddard","Brennan","Wall","Kirby","Bowen","Savage","Bull","Wong","Dobson","Smart","Wilkins","Kirk","Fraser","Duffy","Hicks","Patterson","Bradshaw","Little","Archer","Warner","Waters","O'sullivan","Farrell","Brookes","Atkins","Kay","Dodd","Bentley","Flynn","John","Schofield","Short","Haynes","Wade","Butcher","Henry","Sanderson","Crawford","Sheppard","Bolton","Coates","Giles","Gould","Houghton","Gibbons","Pratt","Manning","Law","Hooper","Noble","Dyer","Rahman","Clements","Moran","Sykes","Chan","Doherty","Connolly","Joyce","Franklin","Hobbs","Coles","Herbert","Steele","Kerr","Leach","Winter","Owens","Duncan","Naylor","Fleming","Horton","Finch","Fitzgerald","Randall","Carpenter","Marsden","Browne","Garner","Pickering","Hale","Dennis","Vincent","Chadwick","Chandler","Sharpe","Nolan","Lyons","Hurst","Collier","Peacock","Howarth","Faulkner","Rice","Pollard","Welch","Norton","Gough","Sinclair","Blackburn","Bryan","Conway","Power","Cameron","Daly","Allan","Hanson","Gardiner","Boyle","Myers","Turnbull","Wallis","Mahmood","Sims","Swift","Iqbal","Pope","Brady","Chamberlain","Rowley","Tyler","Farmer","Metcalfe","Hilton","Godfrey","Holloway","Parkin","Bray","Talbot","Donnelly","Nixon","Charlton","Benson","Whitehouse","Barry","Hope","Lord","North","Storey","Connor","Potts","Bevan","Hargreaves","Mclean","Mistry","Bruce","Howells","Hyde","Parkes","Wyatt","Fry","Lees","O'donnell","Craig","Forster","Mckenzie","Humphries","Mellor","Carey","Ingram","Summers","Leonard"],
2527 // https://surnames.behindthename.com/top/lists/germany/2017
2528 "de": ["Müller","Schmidt","Schneider","Fischer","Weber","Meyer","Wagner","Becker","Schulz","Hoffmann","Schäfer","Koch","Bauer","Richter","Klein","Wolf","Schröder","Neumann","Schwarz","Zimmermann","Braun","Krüger","Hofmann","Hartmann","Lange","Schmitt","Werner","Schmitz","Krause","Meier","Lehmann","Schmid","Schulze","Maier","Köhler","Herrmann","König","Walter","Mayer","Huber","Kaiser","Fuchs","Peters","Lang","Scholz","Möller","Weiß","Jung","Hahn","Schubert","Vogel","Friedrich","Keller","Günther","Frank","Berger","Winkler","Roth","Beck","Lorenz","Baumann","Franke","Albrecht","Schuster","Simon","Ludwig","Böhm","Winter","Kraus","Martin","Schumacher","Krämer","Vogt","Stein","Jäger","Otto","Sommer","Groß","Seidel","Heinrich","Brandt","Haas","Schreiber","Graf","Schulte","Dietrich","Ziegler","Kuhn","Kühn","Pohl","Engel","Horn","Busch","Bergmann","Thomas","Voigt","Sauer","Arnold","Wolff","Pfeiffer"],
2529 // http://www.japantimes.co.jp/life/2009/10/11/lifestyle/japans-top-100-most-common-family-names/
2530 "jp": ["Sato","Suzuki","Takahashi","Tanaka","Watanabe","Ito","Yamamoto","Nakamura","Kobayashi","Kato","Yoshida","Yamada","Sasaki","Yamaguchi","Saito","Matsumoto","Inoue","Kimura","Hayashi","Shimizu","Yamazaki","Mori","Abe","Ikeda","Hashimoto","Yamashita","Ishikawa","Nakajima","Maeda","Fujita","Ogawa","Goto","Okada","Hasegawa","Murakami","Kondo","Ishii","Saito","Sakamoto","Endo","Aoki","Fujii","Nishimura","Fukuda","Ota","Miura","Fujiwara","Okamoto","Matsuda","Nakagawa","Nakano","Harada","Ono","Tamura","Takeuchi","Kaneko","Wada","Nakayama","Ishida","Ueda","Morita","Hara","Shibata","Sakai","Kudo","Yokoyama","Miyazaki","Miyamoto","Uchida","Takagi","Ando","Taniguchi","Ohno","Maruyama","Imai","Takada","Fujimoto","Takeda","Murata","Ueno","Sugiyama","Masuda","Sugawara","Hirano","Kojima","Otsuka","Chiba","Kubo","Matsui","Iwasaki","Sakurai","Kinoshita","Noguchi","Matsuo","Nomura","Kikuchi","Sano","Onishi","Sugimoto","Arai"],
2531 // http://www.lowchensaustralia.com/names/popular-spanish-names.htm
2532 "es": ["Garcia","Fernandez","Lopez","Martinez","Gonzalez","Rodriguez","Sanchez","Perez","Martin","Gomez","Ruiz","Diaz","Hernandez","Alvarez","Jimenez","Moreno","Munoz","Alonso","Romero","Navarro","Gutierrez","Torres","Dominguez","Gil","Vazquez","Blanco","Serrano","Ramos","Castro","Suarez","Sanz","Rubio","Ortega","Molina","Delgado","Ortiz","Morales","Ramirez","Marin","Iglesias","Santos","Castillo","Garrido","Calvo","Pena","Cruz","Cano","Nunez","Prieto","Diez","Lozano","Vidal","Pascual","Ferrer","Medina","Vega","Leon","Herrero","Vicente","Mendez","Guerrero","Fuentes","Campos","Nieto","Cortes","Caballero","Ibanez","Lorenzo","Pastor","Gimenez","Saez","Soler","Marquez","Carrasco","Herrera","Montero","Arias","Crespo","Flores","Andres","Aguilar","Hidalgo","Cabrera","Mora","Duran","Velasco","Rey","Pardo","Roman","Vila","Bravo","Merino","Moya","Soto","Izquierdo","Reyes","Redondo","Marcos","Carmona","Menendez"],
2533 // Data taken from https://fr.wikipedia.org/wiki/Liste_des_noms_de_famille_les_plus_courants_en_France
2534 "fr": ["Martin","Bernard","Thomas","Petit","Robert","Richard","Durand","Dubois","Moreau","Laurent","Simon","Michel","Lefèvre","Leroy","Roux","David","Bertrand","Morel","Fournier","Girard","Bonnet","Dupont","Lambert","Fontaine","Rousseau","Vincent","Müller","Lefèvre","Faure","André","Mercier","Blanc","Guérin","Boyer","Garnier","Chevalier","François","Legrand","Gauthier","Garcia","Perrin","Robin","Clément","Morin","Nicolas","Henry","Roussel","Matthieu","Gautier","Masson","Marchand","Duval","Denis","Dumont","Marie","Lemaire","Noël","Meyer","Dufour","Meunier","Brun","Blanchard","Giraud","Joly","Rivière","Lucas","Brunet","Gaillard","Barbier","Arnaud","Martínez","Gérard","Roche","Renard","Schmitt","Roy","Leroux","Colin","Vidal","Caron","Picard","Roger","Fabre","Aubert","Lemoine","Renaud","Dumas","Lacroix","Olivier","Philippe","Bourgeois","Pierre","Benoît","Rey","Leclerc","Payet","Rolland","Leclercq","Guillaume","Lecomte","López","Jean","Dupuy","Guillot","Hubert","Berger","Carpentier","Sánchez","Dupuis","Moulin","Louis","Deschamps","Huet","Vasseur","Perez","Boucher","Fleury","Royer","Klein","Jacquet","Adam","Paris","Poirier","Marty","Aubry","Guyot","Carré","Charles","Renault","Charpentier","Ménard","Maillard","Baron","Bertin","Bailly","Hervé","Schneider","Fernández","Le GallGall","Collet","Léger","Bouvier","Julien","Prévost","Millet","Perrot","Daniel","Le RouxRoux","Cousin","Germain","Breton","Besson","Langlois","Rémi","Le GoffGoff","Pelletier","Lévêque","Perrier","Leblanc","Barré","Lebrun","Marchal","Weber","Mallet","Hamon","Boulanger","Jacob","Monnier","Michaud","Rodríguez","Guichard","Gillet","Étienne","Grondin","Poulain","Tessier","Chevallier","Collin","Chauvin","Da SilvaSilva","Bouchet","Gay","Lemaître","Bénard","Maréchal","Humbert","Reynaud","Antoine","Hoarau","Perret","Barthélemy","Cordier","Pichon","Lejeune","Gilbert","Lamy","Delaunay","Pasquier","Carlier","LaporteLaporte"]
2535 },
2536
2537 // Data taken from https://github.com/umpirsky/country-list/blob/master/data/en_US/country.json
2538 countries: [{"name":"Afghanistan","abbreviation":"AF"},{"name":"Åland Islands","abbreviation":"AX"},{"name":"Albania","abbreviation":"AL"},{"name":"Algeria","abbreviation":"DZ"},{"name":"American Samoa","abbreviation":"AS"},{"name":"Andorra","abbreviation":"AD"},{"name":"Angola","abbreviation":"AO"},{"name":"Anguilla","abbreviation":"AI"},{"name":"Antarctica","abbreviation":"AQ"},{"name":"Antigua & Barbuda","abbreviation":"AG"},{"name":"Argentina","abbreviation":"AR"},{"name":"Armenia","abbreviation":"AM"},{"name":"Aruba","abbreviation":"AW"},{"name":"Ascension Island","abbreviation":"AC"},{"name":"Australia","abbreviation":"AU"},{"name":"Austria","abbreviation":"AT"},{"name":"Azerbaijan","abbreviation":"AZ"},{"name":"Bahamas","abbreviation":"BS"},{"name":"Bahrain","abbreviation":"BH"},{"name":"Bangladesh","abbreviation":"BD"},{"name":"Barbados","abbreviation":"BB"},{"name":"Belarus","abbreviation":"BY"},{"name":"Belgium","abbreviation":"BE"},{"name":"Belize","abbreviation":"BZ"},{"name":"Benin","abbreviation":"BJ"},{"name":"Bermuda","abbreviation":"BM"},{"name":"Bhutan","abbreviation":"BT"},{"name":"Bolivia","abbreviation":"BO"},{"name":"Bosnia & Herzegovina","abbreviation":"BA"},{"name":"Botswana","abbreviation":"BW"},{"name":"Brazil","abbreviation":"BR"},{"name":"British Indian Ocean Territory","abbreviation":"IO"},{"name":"British Virgin Islands","abbreviation":"VG"},{"name":"Brunei","abbreviation":"BN"},{"name":"Bulgaria","abbreviation":"BG"},{"name":"Burkina Faso","abbreviation":"BF"},{"name":"Burundi","abbreviation":"BI"},{"name":"Cambodia","abbreviation":"KH"},{"name":"Cameroon","abbreviation":"CM"},{"name":"Canada","abbreviation":"CA"},{"name":"Canary Islands","abbreviation":"IC"},{"name":"Cape Verde","abbreviation":"CV"},{"name":"Caribbean Netherlands","abbreviation":"BQ"},{"name":"Cayman Islands","abbreviation":"KY"},{"name":"Central African Republic","abbreviation":"CF"},{"name":"Ceuta & Melilla","abbreviation":"EA"},{"name":"Chad","abbreviation":"TD"},{"name":"Chile","abbreviation":"CL"},{"name":"China","abbreviation":"CN"},{"name":"Christmas Island","abbreviation":"CX"},{"name":"Cocos (Keeling) Islands","abbreviation":"CC"},{"name":"Colombia","abbreviation":"CO"},{"name":"Comoros","abbreviation":"KM"},{"name":"Congo - Brazzaville","abbreviation":"CG"},{"name":"Congo - Kinshasa","abbreviation":"CD"},{"name":"Cook Islands","abbreviation":"CK"},{"name":"Costa Rica","abbreviation":"CR"},{"name":"Côte d'Ivoire","abbreviation":"CI"},{"name":"Croatia","abbreviation":"HR"},{"name":"Cuba","abbreviation":"CU"},{"name":"Curaçao","abbreviation":"CW"},{"name":"Cyprus","abbreviation":"CY"},{"name":"Czech Republic","abbreviation":"CZ"},{"name":"Denmark","abbreviation":"DK"},{"name":"Diego Garcia","abbreviation":"DG"},{"name":"Djibouti","abbreviation":"DJ"},{"name":"Dominica","abbreviation":"DM"},{"name":"Dominican Republic","abbreviation":"DO"},{"name":"Ecuador","abbreviation":"EC"},{"name":"Egypt","abbreviation":"EG"},{"name":"El Salvador","abbreviation":"SV"},{"name":"Equatorial Guinea","abbreviation":"GQ"},{"name":"Eritrea","abbreviation":"ER"},{"name":"Estonia","abbreviation":"EE"},{"name":"Ethiopia","abbreviation":"ET"},{"name":"Falkland Islands","abbreviation":"FK"},{"name":"Faroe Islands","abbreviation":"FO"},{"name":"Fiji","abbreviation":"FJ"},{"name":"Finland","abbreviation":"FI"},{"name":"France","abbreviation":"FR"},{"name":"French Guiana","abbreviation":"GF"},{"name":"French Polynesia","abbreviation":"PF"},{"name":"French Southern Territories","abbreviation":"TF"},{"name":"Gabon","abbreviation":"GA"},{"name":"Gambia","abbreviation":"GM"},{"name":"Georgia","abbreviation":"GE"},{"name":"Germany","abbreviation":"DE"},{"name":"Ghana","abbreviation":"GH"},{"name":"Gibraltar","abbreviation":"GI"},{"name":"Greece","abbreviation":"GR"},{"name":"Greenland","abbreviation":"GL"},{"name":"Grenada","abbreviation":"GD"},{"name":"Guadeloupe","abbreviation":"GP"},{"name":"Guam","abbreviation":"GU"},{"name":"Guatemala","abbreviation":"GT"},{"name":"Guernsey","abbreviation":"GG"},{"name":"Guinea","abbreviation":"GN"},{"name":"Guinea-Bissau","abbreviation":"GW"},{"name":"Guyana","abbreviation":"GY"},{"name":"Haiti","abbreviation":"HT"},{"name":"Honduras","abbreviation":"HN"},{"name":"Hong Kong SAR China","abbreviation":"HK"},{"name":"Hungary","abbreviation":"HU"},{"name":"Iceland","abbreviation":"IS"},{"name":"India","abbreviation":"IN"},{"name":"Indonesia","abbreviation":"ID"},{"name":"Iran","abbreviation":"IR"},{"name":"Iraq","abbreviation":"IQ"},{"name":"Ireland","abbreviation":"IE"},{"name":"Isle of Man","abbreviation":"IM"},{"name":"Israel","abbreviation":"IL"},{"name":"Italy","abbreviation":"IT"},{"name":"Jamaica","abbreviation":"JM"},{"name":"Japan","abbreviation":"JP"},{"name":"Jersey","abbreviation":"JE"},{"name":"Jordan","abbreviation":"JO"},{"name":"Kazakhstan","abbreviation":"KZ"},{"name":"Kenya","abbreviation":"KE"},{"name":"Kiribati","abbreviation":"KI"},{"name":"Kosovo","abbreviation":"XK"},{"name":"Kuwait","abbreviation":"KW"},{"name":"Kyrgyzstan","abbreviation":"KG"},{"name":"Laos","abbreviation":"LA"},{"name":"Latvia","abbreviation":"LV"},{"name":"Lebanon","abbreviation":"LB"},{"name":"Lesotho","abbreviation":"LS"},{"name":"Liberia","abbreviation":"LR"},{"name":"Libya","abbreviation":"LY"},{"name":"Liechtenstein","abbreviation":"LI"},{"name":"Lithuania","abbreviation":"LT"},{"name":"Luxembourg","abbreviation":"LU"},{"name":"Macau SAR China","abbreviation":"MO"},{"name":"Macedonia","abbreviation":"MK"},{"name":"Madagascar","abbreviation":"MG"},{"name":"Malawi","abbreviation":"MW"},{"name":"Malaysia","abbreviation":"MY"},{"name":"Maldives","abbreviation":"MV"},{"name":"Mali","abbreviation":"ML"},{"name":"Malta","abbreviation":"MT"},{"name":"Marshall Islands","abbreviation":"MH"},{"name":"Martinique","abbreviation":"MQ"},{"name":"Mauritania","abbreviation":"MR"},{"name":"Mauritius","abbreviation":"MU"},{"name":"Mayotte","abbreviation":"YT"},{"name":"Mexico","abbreviation":"MX"},{"name":"Micronesia","abbreviation":"FM"},{"name":"Moldova","abbreviation":"MD"},{"name":"Monaco","abbreviation":"MC"},{"name":"Mongolia","abbreviation":"MN"},{"name":"Montenegro","abbreviation":"ME"},{"name":"Montserrat","abbreviation":"MS"},{"name":"Morocco","abbreviation":"MA"},{"name":"Mozambique","abbreviation":"MZ"},{"name":"Myanmar (Burma)","abbreviation":"MM"},{"name":"Namibia","abbreviation":"NA"},{"name":"Nauru","abbreviation":"NR"},{"name":"Nepal","abbreviation":"NP"},{"name":"Netherlands","abbreviation":"NL"},{"name":"New Caledonia","abbreviation":"NC"},{"name":"New Zealand","abbreviation":"NZ"},{"name":"Nicaragua","abbreviation":"NI"},{"name":"Niger","abbreviation":"NE"},{"name":"Nigeria","abbreviation":"NG"},{"name":"Niue","abbreviation":"NU"},{"name":"Norfolk Island","abbreviation":"NF"},{"name":"North Korea","abbreviation":"KP"},{"name":"Northern Mariana Islands","abbreviation":"MP"},{"name":"Norway","abbreviation":"NO"},{"name":"Oman","abbreviation":"OM"},{"name":"Pakistan","abbreviation":"PK"},{"name":"Palau","abbreviation":"PW"},{"name":"Palestinian Territories","abbreviation":"PS"},{"name":"Panama","abbreviation":"PA"},{"name":"Papua New Guinea","abbreviation":"PG"},{"name":"Paraguay","abbreviation":"PY"},{"name":"Peru","abbreviation":"PE"},{"name":"Philippines","abbreviation":"PH"},{"name":"Pitcairn Islands","abbreviation":"PN"},{"name":"Poland","abbreviation":"PL"},{"name":"Portugal","abbreviation":"PT"},{"name":"Puerto Rico","abbreviation":"PR"},{"name":"Qatar","abbreviation":"QA"},{"name":"Réunion","abbreviation":"RE"},{"name":"Romania","abbreviation":"RO"},{"name":"Russia","abbreviation":"RU"},{"name":"Rwanda","abbreviation":"RW"},{"name":"Samoa","abbreviation":"WS"},{"name":"San Marino","abbreviation":"SM"},{"name":"São Tomé and Príncipe","abbreviation":"ST"},{"name":"Saudi Arabia","abbreviation":"SA"},{"name":"Senegal","abbreviation":"SN"},{"name":"Serbia","abbreviation":"RS"},{"name":"Seychelles","abbreviation":"SC"},{"name":"Sierra Leone","abbreviation":"SL"},{"name":"Singapore","abbreviation":"SG"},{"name":"Sint Maarten","abbreviation":"SX"},{"name":"Slovakia","abbreviation":"SK"},{"name":"Slovenia","abbreviation":"SI"},{"name":"Solomon Islands","abbreviation":"SB"},{"name":"Somalia","abbreviation":"SO"},{"name":"South Africa","abbreviation":"ZA"},{"name":"South Georgia & South Sandwich Islands","abbreviation":"GS"},{"name":"South Korea","abbreviation":"KR"},{"name":"South Sudan","abbreviation":"SS"},{"name":"Spain","abbreviation":"ES"},{"name":"Sri Lanka","abbreviation":"LK"},{"name":"St. Barthélemy","abbreviation":"BL"},{"name":"St. Helena","abbreviation":"SH"},{"name":"St. Kitts & Nevis","abbreviation":"KN"},{"name":"St. Lucia","abbreviation":"LC"},{"name":"St. Martin","abbreviation":"MF"},{"name":"St. Pierre & Miquelon","abbreviation":"PM"},{"name":"St. Vincent & Grenadines","abbreviation":"VC"},{"name":"Sudan","abbreviation":"SD"},{"name":"Suriname","abbreviation":"SR"},{"name":"Svalbard & Jan Mayen","abbreviation":"SJ"},{"name":"Swaziland","abbreviation":"SZ"},{"name":"Sweden","abbreviation":"SE"},{"name":"Switzerland","abbreviation":"CH"},{"name":"Syria","abbreviation":"SY"},{"name":"Taiwan","abbreviation":"TW"},{"name":"Tajikistan","abbreviation":"TJ"},{"name":"Tanzania","abbreviation":"TZ"},{"name":"Thailand","abbreviation":"TH"},{"name":"Timor-Leste","abbreviation":"TL"},{"name":"Togo","abbreviation":"TG"},{"name":"Tokelau","abbreviation":"TK"},{"name":"Tonga","abbreviation":"TO"},{"name":"Trinidad & Tobago","abbreviation":"TT"},{"name":"Tristan da Cunha","abbreviation":"TA"},{"name":"Tunisia","abbreviation":"TN"},{"name":"Turkey","abbreviation":"TR"},{"name":"Turkmenistan","abbreviation":"TM"},{"name":"Turks & Caicos Islands","abbreviation":"TC"},{"name":"Tuvalu","abbreviation":"TV"},{"name":"U.S. Outlying Islands","abbreviation":"UM"},{"name":"U.S. Virgin Islands","abbreviation":"VI"},{"name":"Uganda","abbreviation":"UG"},{"name":"Ukraine","abbreviation":"UA"},{"name":"United Arab Emirates","abbreviation":"AE"},{"name":"United Kingdom","abbreviation":"GB"},{"name":"United States","abbreviation":"US"},{"name":"Uruguay","abbreviation":"UY"},{"name":"Uzbekistan","abbreviation":"UZ"},{"name":"Vanuatu","abbreviation":"VU"},{"name":"Vatican City","abbreviation":"VA"},{"name":"Venezuela","abbreviation":"VE"},{"name":"Vietnam","abbreviation":"VN"},{"name":"Wallis & Futuna","abbreviation":"WF"},{"name":"Western Sahara","abbreviation":"EH"},{"name":"Yemen","abbreviation":"YE"},{"name":"Zambia","abbreviation":"ZM"},{"name":"Zimbabwe","abbreviation":"ZW"}],
2539
2540 counties: {
2541 // Data taken from http://www.downloadexcelfiles.com/gb_en/download-excel-file-list-counties-uk
2542 "uk": [
2543 {name: 'Bath and North East Somerset'},
2544 {name: 'Aberdeenshire'},
2545 {name: 'Anglesey'},
2546 {name: 'Angus'},
2547 {name: 'Bedford'},
2548 {name: 'Blackburn with Darwen'},
2549 {name: 'Blackpool'},
2550 {name: 'Bournemouth'},
2551 {name: 'Bracknell Forest'},
2552 {name: 'Brighton & Hove'},
2553 {name: 'Bristol'},
2554 {name: 'Buckinghamshire'},
2555 {name: 'Cambridgeshire'},
2556 {name: 'Carmarthenshire'},
2557 {name: 'Central Bedfordshire'},
2558 {name: 'Ceredigion'},
2559 {name: 'Cheshire East'},
2560 {name: 'Cheshire West and Chester'},
2561 {name: 'Clackmannanshire'},
2562 {name: 'Conwy'},
2563 {name: 'Cornwall'},
2564 {name: 'County Antrim'},
2565 {name: 'County Armagh'},
2566 {name: 'County Down'},
2567 {name: 'County Durham'},
2568 {name: 'County Fermanagh'},
2569 {name: 'County Londonderry'},
2570 {name: 'County Tyrone'},
2571 {name: 'Cumbria'},
2572 {name: 'Darlington'},
2573 {name: 'Denbighshire'},
2574 {name: 'Derby'},
2575 {name: 'Derbyshire'},
2576 {name: 'Devon'},
2577 {name: 'Dorset'},
2578 {name: 'Dumfries and Galloway'},
2579 {name: 'Dundee'},
2580 {name: 'East Lothian'},
2581 {name: 'East Riding of Yorkshire'},
2582 {name: 'East Sussex'},
2583 {name: 'Edinburgh?'},
2584 {name: 'Essex'},
2585 {name: 'Falkirk'},
2586 {name: 'Fife'},
2587 {name: 'Flintshire'},
2588 {name: 'Gloucestershire'},
2589 {name: 'Greater London'},
2590 {name: 'Greater Manchester'},
2591 {name: 'Gwent'},
2592 {name: 'Gwynedd'},
2593 {name: 'Halton'},
2594 {name: 'Hampshire'},
2595 {name: 'Hartlepool'},
2596 {name: 'Herefordshire'},
2597 {name: 'Hertfordshire'},
2598 {name: 'Highlands'},
2599 {name: 'Hull'},
2600 {name: 'Isle of Wight'},
2601 {name: 'Isles of Scilly'},
2602 {name: 'Kent'},
2603 {name: 'Lancashire'},
2604 {name: 'Leicester'},
2605 {name: 'Leicestershire'},
2606 {name: 'Lincolnshire'},
2607 {name: 'Lothian'},
2608 {name: 'Luton'},
2609 {name: 'Medway'},
2610 {name: 'Merseyside'},
2611 {name: 'Mid Glamorgan'},
2612 {name: 'Middlesbrough'},
2613 {name: 'Milton Keynes'},
2614 {name: 'Monmouthshire'},
2615 {name: 'Moray'},
2616 {name: 'Norfolk'},
2617 {name: 'North East Lincolnshire'},
2618 {name: 'North Lincolnshire'},
2619 {name: 'North Somerset'},
2620 {name: 'North Yorkshire'},
2621 {name: 'Northamptonshire'},
2622 {name: 'Northumberland'},
2623 {name: 'Nottingham'},
2624 {name: 'Nottinghamshire'},
2625 {name: 'Oxfordshire'},
2626 {name: 'Pembrokeshire'},
2627 {name: 'Perth and Kinross'},
2628 {name: 'Peterborough'},
2629 {name: 'Plymouth'},
2630 {name: 'Poole'},
2631 {name: 'Portsmouth'},
2632 {name: 'Powys'},
2633 {name: 'Reading'},
2634 {name: 'Redcar and Cleveland'},
2635 {name: 'Rutland'},
2636 {name: 'Scottish Borders'},
2637 {name: 'Shropshire'},
2638 {name: 'Slough'},
2639 {name: 'Somerset'},
2640 {name: 'South Glamorgan'},
2641 {name: 'South Gloucestershire'},
2642 {name: 'South Yorkshire'},
2643 {name: 'Southampton'},
2644 {name: 'Southend-on-Sea'},
2645 {name: 'Staffordshire'},
2646 {name: 'Stirlingshire'},
2647 {name: 'Stockton-on-Tees'},
2648 {name: 'Stoke-on-Trent'},
2649 {name: 'Strathclyde'},
2650 {name: 'Suffolk'},
2651 {name: 'Surrey'},
2652 {name: 'Swindon'},
2653 {name: 'Telford and Wrekin'},
2654 {name: 'Thurrock'},
2655 {name: 'Torbay'},
2656 {name: 'Tyne and Wear'},
2657 {name: 'Warrington'},
2658 {name: 'Warwickshire'},
2659 {name: 'West Berkshire'},
2660 {name: 'West Glamorgan'},
2661 {name: 'West Lothian'},
2662 {name: 'West Midlands'},
2663 {name: 'West Sussex'},
2664 {name: 'West Yorkshire'},
2665 {name: 'Western Isles'},
2666 {name: 'Wiltshire'},
2667 {name: 'Windsor and Maidenhead'},
2668 {name: 'Wokingham'},
2669 {name: 'Worcestershire'},
2670 {name: 'Wrexham'},
2671 {name: 'York'}]
2672 },
2673 provinces: {
2674 "ca": [
2675 {name: 'Alberta', abbreviation: 'AB'},
2676 {name: 'British Columbia', abbreviation: 'BC'},
2677 {name: 'Manitoba', abbreviation: 'MB'},
2678 {name: 'New Brunswick', abbreviation: 'NB'},
2679 {name: 'Newfoundland and Labrador', abbreviation: 'NL'},
2680 {name: 'Nova Scotia', abbreviation: 'NS'},
2681 {name: 'Ontario', abbreviation: 'ON'},
2682 {name: 'Prince Edward Island', abbreviation: 'PE'},
2683 {name: 'Quebec', abbreviation: 'QC'},
2684 {name: 'Saskatchewan', abbreviation: 'SK'},
2685
2686 // The case could be made that the following are not actually provinces
2687 // since they are technically considered "territories" however they all
2688 // look the same on an envelope!
2689 {name: 'Northwest Territories', abbreviation: 'NT'},
2690 {name: 'Nunavut', abbreviation: 'NU'},
2691 {name: 'Yukon', abbreviation: 'YT'}
2692 ],
2693 "it": [
2694 { name: "Agrigento", abbreviation: "AG", code: 84 },
2695 { name: "Alessandria", abbreviation: "AL", code: 6 },
2696 { name: "Ancona", abbreviation: "AN", code: 42 },
2697 { name: "Aosta", abbreviation: "AO", code: 7 },
2698 { name: "L'Aquila", abbreviation: "AQ", code: 66 },
2699 { name: "Arezzo", abbreviation: "AR", code: 51 },
2700 { name: "Ascoli-Piceno", abbreviation: "AP", code: 44 },
2701 { name: "Asti", abbreviation: "AT", code: 5 },
2702 { name: "Avellino", abbreviation: "AV", code: 64 },
2703 { name: "Bari", abbreviation: "BA", code: 72 },
2704 { name: "Barletta-Andria-Trani", abbreviation: "BT", code: 72 },
2705 { name: "Belluno", abbreviation: "BL", code: 25 },
2706 { name: "Benevento", abbreviation: "BN", code: 62 },
2707 { name: "Bergamo", abbreviation: "BG", code: 16 },
2708 { name: "Biella", abbreviation: "BI", code: 96 },
2709 { name: "Bologna", abbreviation: "BO", code: 37 },
2710 { name: "Bolzano", abbreviation: "BZ", code: 21 },
2711 { name: "Brescia", abbreviation: "BS", code: 17 },
2712 { name: "Brindisi", abbreviation: "BR", code: 74 },
2713 { name: "Cagliari", abbreviation: "CA", code: 92 },
2714 { name: "Caltanissetta", abbreviation: "CL", code: 85 },
2715 { name: "Campobasso", abbreviation: "CB", code: 70 },
2716 { name: "Carbonia Iglesias", abbreviation: "CI", code: 70 },
2717 { name: "Caserta", abbreviation: "CE", code: 61 },
2718 { name: "Catania", abbreviation: "CT", code: 87 },
2719 { name: "Catanzaro", abbreviation: "CZ", code: 79 },
2720 { name: "Chieti", abbreviation: "CH", code: 69 },
2721 { name: "Como", abbreviation: "CO", code: 13 },
2722 { name: "Cosenza", abbreviation: "CS", code: 78 },
2723 { name: "Cremona", abbreviation: "CR", code: 19 },
2724 { name: "Crotone", abbreviation: "KR", code: 101 },
2725 { name: "Cuneo", abbreviation: "CN", code: 4 },
2726 { name: "Enna", abbreviation: "EN", code: 86 },
2727 { name: "Fermo", abbreviation: "FM", code: 86 },
2728 { name: "Ferrara", abbreviation: "FE", code: 38 },
2729 { name: "Firenze", abbreviation: "FI", code: 48 },
2730 { name: "Foggia", abbreviation: "FG", code: 71 },
2731 { name: "Forli-Cesena", abbreviation: "FC", code: 71 },
2732 { name: "Frosinone", abbreviation: "FR", code: 60 },
2733 { name: "Genova", abbreviation: "GE", code: 10 },
2734 { name: "Gorizia", abbreviation: "GO", code: 31 },
2735 { name: "Grosseto", abbreviation: "GR", code: 53 },
2736 { name: "Imperia", abbreviation: "IM", code: 8 },
2737 { name: "Isernia", abbreviation: "IS", code: 94 },
2738 { name: "La-Spezia", abbreviation: "SP", code: 66 },
2739 { name: "Latina", abbreviation: "LT", code: 59 },
2740 { name: "Lecce", abbreviation: "LE", code: 75 },
2741 { name: "Lecco", abbreviation: "LC", code: 97 },
2742 { name: "Livorno", abbreviation: "LI", code: 49 },
2743 { name: "Lodi", abbreviation: "LO", code: 98 },
2744 { name: "Lucca", abbreviation: "LU", code: 46 },
2745 { name: "Macerata", abbreviation: "MC", code: 43 },
2746 { name: "Mantova", abbreviation: "MN", code: 20 },
2747 { name: "Massa-Carrara", abbreviation: "MS", code: 45 },
2748 { name: "Matera", abbreviation: "MT", code: 77 },
2749 { name: "Medio Campidano", abbreviation: "VS", code: 77 },
2750 { name: "Messina", abbreviation: "ME", code: 83 },
2751 { name: "Milano", abbreviation: "MI", code: 15 },
2752 { name: "Modena", abbreviation: "MO", code: 36 },
2753 { name: "Monza-Brianza", abbreviation: "MB", code: 36 },
2754 { name: "Napoli", abbreviation: "NA", code: 63 },
2755 { name: "Novara", abbreviation: "NO", code: 3 },
2756 { name: "Nuoro", abbreviation: "NU", code: 91 },
2757 { name: "Ogliastra", abbreviation: "OG", code: 91 },
2758 { name: "Olbia Tempio", abbreviation: "OT", code: 91 },
2759 { name: "Oristano", abbreviation: "OR", code: 95 },
2760 { name: "Padova", abbreviation: "PD", code: 28 },
2761 { name: "Palermo", abbreviation: "PA", code: 82 },
2762 { name: "Parma", abbreviation: "PR", code: 34 },
2763 { name: "Pavia", abbreviation: "PV", code: 18 },
2764 { name: "Perugia", abbreviation: "PG", code: 54 },
2765 { name: "Pesaro-Urbino", abbreviation: "PU", code: 41 },
2766 { name: "Pescara", abbreviation: "PE", code: 68 },
2767 { name: "Piacenza", abbreviation: "PC", code: 33 },
2768 { name: "Pisa", abbreviation: "PI", code: 50 },
2769 { name: "Pistoia", abbreviation: "PT", code: 47 },
2770 { name: "Pordenone", abbreviation: "PN", code: 93 },
2771 { name: "Potenza", abbreviation: "PZ", code: 76 },
2772 { name: "Prato", abbreviation: "PO", code: 100 },
2773 { name: "Ragusa", abbreviation: "RG", code: 88 },
2774 { name: "Ravenna", abbreviation: "RA", code: 39 },
2775 { name: "Reggio-Calabria", abbreviation: "RC", code: 35 },
2776 { name: "Reggio-Emilia", abbreviation: "RE", code: 35 },
2777 { name: "Rieti", abbreviation: "RI", code: 57 },
2778 { name: "Rimini", abbreviation: "RN", code: 99 },
2779 { name: "Roma", abbreviation: "Roma", code: 58 },
2780 { name: "Rovigo", abbreviation: "RO", code: 29 },
2781 { name: "Salerno", abbreviation: "SA", code: 65 },
2782 { name: "Sassari", abbreviation: "SS", code: 90 },
2783 { name: "Savona", abbreviation: "SV", code: 9 },
2784 { name: "Siena", abbreviation: "SI", code: 52 },
2785 { name: "Siracusa", abbreviation: "SR", code: 89 },
2786 { name: "Sondrio", abbreviation: "SO", code: 14 },
2787 { name: "Taranto", abbreviation: "TA", code: 73 },
2788 { name: "Teramo", abbreviation: "TE", code: 67 },
2789 { name: "Terni", abbreviation: "TR", code: 55 },
2790 { name: "Torino", abbreviation: "TO", code: 1 },
2791 { name: "Trapani", abbreviation: "TP", code: 81 },
2792 { name: "Trento", abbreviation: "TN", code: 22 },
2793 { name: "Treviso", abbreviation: "TV", code: 26 },
2794 { name: "Trieste", abbreviation: "TS", code: 32 },
2795 { name: "Udine", abbreviation: "UD", code: 30 },
2796 { name: "Varese", abbreviation: "VA", code: 12 },
2797 { name: "Venezia", abbreviation: "VE", code: 27 },
2798 { name: "Verbania", abbreviation: "VB", code: 27 },
2799 { name: "Vercelli", abbreviation: "VC", code: 2 },
2800 { name: "Verona", abbreviation: "VR", code: 23 },
2801 { name: "Vibo-Valentia", abbreviation: "VV", code: 102 },
2802 { name: "Vicenza", abbreviation: "VI", code: 24 },
2803 { name: "Viterbo", abbreviation: "VT", code: 56 }
2804 ]
2805 },
2806
2807 // from: https://github.com/samsargent/Useful-Autocomplete-Data/blob/master/data/nationalities.json
2808 nationalities: [
2809 {name: 'Afghan'},
2810 {name: 'Albanian'},
2811 {name: 'Algerian'},
2812 {name: 'American'},
2813 {name: 'Andorran'},
2814 {name: 'Angolan'},
2815 {name: 'Antiguans'},
2816 {name: 'Argentinean'},
2817 {name: 'Armenian'},
2818 {name: 'Australian'},
2819 {name: 'Austrian'},
2820 {name: 'Azerbaijani'},
2821 {name: 'Bahami'},
2822 {name: 'Bahraini'},
2823 {name: 'Bangladeshi'},
2824 {name: 'Barbadian'},
2825 {name: 'Barbudans'},
2826 {name: 'Batswana'},
2827 {name: 'Belarusian'},
2828 {name: 'Belgian'},
2829 {name: 'Belizean'},
2830 {name: 'Beninese'},
2831 {name: 'Bhutanese'},
2832 {name: 'Bolivian'},
2833 {name: 'Bosnian'},
2834 {name: 'Brazilian'},
2835 {name: 'British'},
2836 {name: 'Bruneian'},
2837 {name: 'Bulgarian'},
2838 {name: 'Burkinabe'},
2839 {name: 'Burmese'},
2840 {name: 'Burundian'},
2841 {name: 'Cambodian'},
2842 {name: 'Cameroonian'},
2843 {name: 'Canadian'},
2844 {name: 'Cape Verdean'},
2845 {name: 'Central African'},
2846 {name: 'Chadian'},
2847 {name: 'Chilean'},
2848 {name: 'Chinese'},
2849 {name: 'Colombian'},
2850 {name: 'Comoran'},
2851 {name: 'Congolese'},
2852 {name: 'Costa Rican'},
2853 {name: 'Croatian'},
2854 {name: 'Cuban'},
2855 {name: 'Cypriot'},
2856 {name: 'Czech'},
2857 {name: 'Danish'},
2858 {name: 'Djibouti'},
2859 {name: 'Dominican'},
2860 {name: 'Dutch'},
2861 {name: 'East Timorese'},
2862 {name: 'Ecuadorean'},
2863 {name: 'Egyptian'},
2864 {name: 'Emirian'},
2865 {name: 'Equatorial Guinean'},
2866 {name: 'Eritrean'},
2867 {name: 'Estonian'},
2868 {name: 'Ethiopian'},
2869 {name: 'Fijian'},
2870 {name: 'Filipino'},
2871 {name: 'Finnish'},
2872 {name: 'French'},
2873 {name: 'Gabonese'},
2874 {name: 'Gambian'},
2875 {name: 'Georgian'},
2876 {name: 'German'},
2877 {name: 'Ghanaian'},
2878 {name: 'Greek'},
2879 {name: 'Grenadian'},
2880 {name: 'Guatemalan'},
2881 {name: 'Guinea-Bissauan'},
2882 {name: 'Guinean'},
2883 {name: 'Guyanese'},
2884 {name: 'Haitian'},
2885 {name: 'Herzegovinian'},
2886 {name: 'Honduran'},
2887 {name: 'Hungarian'},
2888 {name: 'I-Kiribati'},
2889 {name: 'Icelander'},
2890 {name: 'Indian'},
2891 {name: 'Indonesian'},
2892 {name: 'Iranian'},
2893 {name: 'Iraqi'},
2894 {name: 'Irish'},
2895 {name: 'Israeli'},
2896 {name: 'Italian'},
2897 {name: 'Ivorian'},
2898 {name: 'Jamaican'},
2899 {name: 'Japanese'},
2900 {name: 'Jordanian'},
2901 {name: 'Kazakhstani'},
2902 {name: 'Kenyan'},
2903 {name: 'Kittian and Nevisian'},
2904 {name: 'Kuwaiti'},
2905 {name: 'Kyrgyz'},
2906 {name: 'Laotian'},
2907 {name: 'Latvian'},
2908 {name: 'Lebanese'},
2909 {name: 'Liberian'},
2910 {name: 'Libyan'},
2911 {name: 'Liechtensteiner'},
2912 {name: 'Lithuanian'},
2913 {name: 'Luxembourger'},
2914 {name: 'Macedonian'},
2915 {name: 'Malagasy'},
2916 {name: 'Malawian'},
2917 {name: 'Malaysian'},
2918 {name: 'Maldivan'},
2919 {name: 'Malian'},
2920 {name: 'Maltese'},
2921 {name: 'Marshallese'},
2922 {name: 'Mauritanian'},
2923 {name: 'Mauritian'},
2924 {name: 'Mexican'},
2925 {name: 'Micronesian'},
2926 {name: 'Moldovan'},
2927 {name: 'Monacan'},
2928 {name: 'Mongolian'},
2929 {name: 'Moroccan'},
2930 {name: 'Mosotho'},
2931 {name: 'Motswana'},
2932 {name: 'Mozambican'},
2933 {name: 'Namibian'},
2934 {name: 'Nauruan'},
2935 {name: 'Nepalese'},
2936 {name: 'New Zealander'},
2937 {name: 'Nicaraguan'},
2938 {name: 'Nigerian'},
2939 {name: 'Nigerien'},
2940 {name: 'North Korean'},
2941 {name: 'Northern Irish'},
2942 {name: 'Norwegian'},
2943 {name: 'Omani'},
2944 {name: 'Pakistani'},
2945 {name: 'Palauan'},
2946 {name: 'Panamanian'},
2947 {name: 'Papua New Guinean'},
2948 {name: 'Paraguayan'},
2949 {name: 'Peruvian'},
2950 {name: 'Polish'},
2951 {name: 'Portuguese'},
2952 {name: 'Qatari'},
2953 {name: 'Romani'},
2954 {name: 'Russian'},
2955 {name: 'Rwandan'},
2956 {name: 'Saint Lucian'},
2957 {name: 'Salvadoran'},
2958 {name: 'Samoan'},
2959 {name: 'San Marinese'},
2960 {name: 'Sao Tomean'},
2961 {name: 'Saudi'},
2962 {name: 'Scottish'},
2963 {name: 'Senegalese'},
2964 {name: 'Serbian'},
2965 {name: 'Seychellois'},
2966 {name: 'Sierra Leonean'},
2967 {name: 'Singaporean'},
2968 {name: 'Slovakian'},
2969 {name: 'Slovenian'},
2970 {name: 'Solomon Islander'},
2971 {name: 'Somali'},
2972 {name: 'South African'},
2973 {name: 'South Korean'},
2974 {name: 'Spanish'},
2975 {name: 'Sri Lankan'},
2976 {name: 'Sudanese'},
2977 {name: 'Surinamer'},
2978 {name: 'Swazi'},
2979 {name: 'Swedish'},
2980 {name: 'Swiss'},
2981 {name: 'Syrian'},
2982 {name: 'Taiwanese'},
2983 {name: 'Tajik'},
2984 {name: 'Tanzanian'},
2985 {name: 'Thai'},
2986 {name: 'Togolese'},
2987 {name: 'Tongan'},
2988 {name: 'Trinidadian or Tobagonian'},
2989 {name: 'Tunisian'},
2990 {name: 'Turkish'},
2991 {name: 'Tuvaluan'},
2992 {name: 'Ugandan'},
2993 {name: 'Ukrainian'},
2994 {name: 'Uruguaya'},
2995 {name: 'Uzbekistani'},
2996 {name: 'Venezuela'},
2997 {name: 'Vietnamese'},
2998 {name: 'Wels'},
2999 {name: 'Yemenit'},
3000 {name: 'Zambia'},
3001 {name: 'Zimbabwe'},
3002 ],
3003 // http://www.loc.gov/standards/iso639-2/php/code_list.php (ISO-639-1 codes)
3004 locale_languages: [
3005 "aa",
3006 "ab",
3007 "ae",
3008 "af",
3009 "ak",
3010 "am",
3011 "an",
3012 "ar",
3013 "as",
3014 "av",
3015 "ay",
3016 "az",
3017 "ba",
3018 "be",
3019 "bg",
3020 "bh",
3021 "bi",
3022 "bm",
3023 "bn",
3024 "bo",
3025 "br",
3026 "bs",
3027 "ca",
3028 "ce",
3029 "ch",
3030 "co",
3031 "cr",
3032 "cs",
3033 "cu",
3034 "cv",
3035 "cy",
3036 "da",
3037 "de",
3038 "dv",
3039 "dz",
3040 "ee",
3041 "el",
3042 "en",
3043 "eo",
3044 "es",
3045 "et",
3046 "eu",
3047 "fa",
3048 "ff",
3049 "fi",
3050 "fj",
3051 "fo",
3052 "fr",
3053 "fy",
3054 "ga",
3055 "gd",
3056 "gl",
3057 "gn",
3058 "gu",
3059 "gv",
3060 "ha",
3061 "he",
3062 "hi",
3063 "ho",
3064 "hr",
3065 "ht",
3066 "hu",
3067 "hy",
3068 "hz",
3069 "ia",
3070 "id",
3071 "ie",
3072 "ig",
3073 "ii",
3074 "ik",
3075 "io",
3076 "is",
3077 "it",
3078 "iu",
3079 "ja",
3080 "jv",
3081 "ka",
3082 "kg",
3083 "ki",
3084 "kj",
3085 "kk",
3086 "kl",
3087 "km",
3088 "kn",
3089 "ko",
3090 "kr",
3091 "ks",
3092 "ku",
3093 "kv",
3094 "kw",
3095 "ky",
3096 "la",
3097 "lb",
3098 "lg",
3099 "li",
3100 "ln",
3101 "lo",
3102 "lt",
3103 "lu",
3104 "lv",
3105 "mg",
3106 "mh",
3107 "mi",
3108 "mk",
3109 "ml",
3110 "mn",
3111 "mr",
3112 "ms",
3113 "mt",
3114 "my",
3115 "na",
3116 "nb",
3117 "nd",
3118 "ne",
3119 "ng",
3120 "nl",
3121 "nn",
3122 "no",
3123 "nr",
3124 "nv",
3125 "ny",
3126 "oc",
3127 "oj",
3128 "om",
3129 "or",
3130 "os",
3131 "pa",
3132 "pi",
3133 "pl",
3134 "ps",
3135 "pt",
3136 "qu",
3137 "rm",
3138 "rn",
3139 "ro",
3140 "ru",
3141 "rw",
3142 "sa",
3143 "sc",
3144 "sd",
3145 "se",
3146 "sg",
3147 "si",
3148 "sk",
3149 "sl",
3150 "sm",
3151 "sn",
3152 "so",
3153 "sq",
3154 "sr",
3155 "ss",
3156 "st",
3157 "su",
3158 "sv",
3159 "sw",
3160 "ta",
3161 "te",
3162 "tg",
3163 "th",
3164 "ti",
3165 "tk",
3166 "tl",
3167 "tn",
3168 "to",
3169 "tr",
3170 "ts",
3171 "tt",
3172 "tw",
3173 "ty",
3174 "ug",
3175 "uk",
3176 "ur",
3177 "uz",
3178 "ve",
3179 "vi",
3180 "vo",
3181 "wa",
3182 "wo",
3183 "xh",
3184 "yi",
3185 "yo",
3186 "za",
3187 "zh",
3188 "zu"
3189 ],
3190
3191 // From http://data.okfn.org/data/core/language-codes#resource-language-codes-full (IETF language tags)
3192 locale_regions: [
3193 "agq-CM",
3194 "asa-TZ",
3195 "ast-ES",
3196 "bas-CM",
3197 "bem-ZM",
3198 "bez-TZ",
3199 "brx-IN",
3200 "cgg-UG",
3201 "chr-US",
3202 "dav-KE",
3203 "dje-NE",
3204 "dsb-DE",
3205 "dua-CM",
3206 "dyo-SN",
3207 "ebu-KE",
3208 "ewo-CM",
3209 "fil-PH",
3210 "fur-IT",
3211 "gsw-CH",
3212 "gsw-FR",
3213 "gsw-LI",
3214 "guz-KE",
3215 "haw-US",
3216 "hsb-DE",
3217 "jgo-CM",
3218 "jmc-TZ",
3219 "kab-DZ",
3220 "kam-KE",
3221 "kde-TZ",
3222 "kea-CV",
3223 "khq-ML",
3224 "kkj-CM",
3225 "kln-KE",
3226 "kok-IN",
3227 "ksb-TZ",
3228 "ksf-CM",
3229 "ksh-DE",
3230 "lag-TZ",
3231 "lkt-US",
3232 "luo-KE",
3233 "luy-KE",
3234 "mas-KE",
3235 "mas-TZ",
3236 "mer-KE",
3237 "mfe-MU",
3238 "mgh-MZ",
3239 "mgo-CM",
3240 "mua-CM",
3241 "naq-NA",
3242 "nmg-CM",
3243 "nnh-CM",
3244 "nus-SD",
3245 "nyn-UG",
3246 "rof-TZ",
3247 "rwk-TZ",
3248 "sah-RU",
3249 "saq-KE",
3250 "sbp-TZ",
3251 "seh-MZ",
3252 "ses-ML",
3253 "shi-Latn",
3254 "shi-Latn-MA",
3255 "shi-Tfng",
3256 "shi-Tfng-MA",
3257 "smn-FI",
3258 "teo-KE",
3259 "teo-UG",
3260 "twq-NE",
3261 "tzm-Latn",
3262 "tzm-Latn-MA",
3263 "vai-Latn",
3264 "vai-Latn-LR",
3265 "vai-Vaii",
3266 "vai-Vaii-LR",
3267 "vun-TZ",
3268 "wae-CH",
3269 "xog-UG",
3270 "yav-CM",
3271 "zgh-MA",
3272 "af-NA",
3273 "af-ZA",
3274 "ak-GH",
3275 "am-ET",
3276 "ar-001",
3277 "ar-AE",
3278 "ar-BH",
3279 "ar-DJ",
3280 "ar-DZ",
3281 "ar-EG",
3282 "ar-EH",
3283 "ar-ER",
3284 "ar-IL",
3285 "ar-IQ",
3286 "ar-JO",
3287 "ar-KM",
3288 "ar-KW",
3289 "ar-LB",
3290 "ar-LY",
3291 "ar-MA",
3292 "ar-MR",
3293 "ar-OM",
3294 "ar-PS",
3295 "ar-QA",
3296 "ar-SA",
3297 "ar-SD",
3298 "ar-SO",
3299 "ar-SS",
3300 "ar-SY",
3301 "ar-TD",
3302 "ar-TN",
3303 "ar-YE",
3304 "as-IN",
3305 "az-Cyrl",
3306 "az-Cyrl-AZ",
3307 "az-Latn",
3308 "az-Latn-AZ",
3309 "be-BY",
3310 "bg-BG",
3311 "bm-Latn",
3312 "bm-Latn-ML",
3313 "bn-BD",
3314 "bn-IN",
3315 "bo-CN",
3316 "bo-IN",
3317 "br-FR",
3318 "bs-Cyrl",
3319 "bs-Cyrl-BA",
3320 "bs-Latn",
3321 "bs-Latn-BA",
3322 "ca-AD",
3323 "ca-ES",
3324 "ca-ES-VALENCIA",
3325 "ca-FR",
3326 "ca-IT",
3327 "cs-CZ",
3328 "cy-GB",
3329 "da-DK",
3330 "da-GL",
3331 "de-AT",
3332 "de-BE",
3333 "de-CH",
3334 "de-DE",
3335 "de-LI",
3336 "de-LU",
3337 "dz-BT",
3338 "ee-GH",
3339 "ee-TG",
3340 "el-CY",
3341 "el-GR",
3342 "en-001",
3343 "en-150",
3344 "en-AG",
3345 "en-AI",
3346 "en-AS",
3347 "en-AU",
3348 "en-BB",
3349 "en-BE",
3350 "en-BM",
3351 "en-BS",
3352 "en-BW",
3353 "en-BZ",
3354 "en-CA",
3355 "en-CC",
3356 "en-CK",
3357 "en-CM",
3358 "en-CX",
3359 "en-DG",
3360 "en-DM",
3361 "en-ER",
3362 "en-FJ",
3363 "en-FK",
3364 "en-FM",
3365 "en-GB",
3366 "en-GD",
3367 "en-GG",
3368 "en-GH",
3369 "en-GI",
3370 "en-GM",
3371 "en-GU",
3372 "en-GY",
3373 "en-HK",
3374 "en-IE",
3375 "en-IM",
3376 "en-IN",
3377 "en-IO",
3378 "en-JE",
3379 "en-JM",
3380 "en-KE",
3381 "en-KI",
3382 "en-KN",
3383 "en-KY",
3384 "en-LC",
3385 "en-LR",
3386 "en-LS",
3387 "en-MG",
3388 "en-MH",
3389 "en-MO",
3390 "en-MP",
3391 "en-MS",
3392 "en-MT",
3393 "en-MU",
3394 "en-MW",
3395 "en-MY",
3396 "en-NA",
3397 "en-NF",
3398 "en-NG",
3399 "en-NR",
3400 "en-NU",
3401 "en-NZ",
3402 "en-PG",
3403 "en-PH",
3404 "en-PK",
3405 "en-PN",
3406 "en-PR",
3407 "en-PW",
3408 "en-RW",
3409 "en-SB",
3410 "en-SC",
3411 "en-SD",
3412 "en-SG",
3413 "en-SH",
3414 "en-SL",
3415 "en-SS",
3416 "en-SX",
3417 "en-SZ",
3418 "en-TC",
3419 "en-TK",
3420 "en-TO",
3421 "en-TT",
3422 "en-TV",
3423 "en-TZ",
3424 "en-UG",
3425 "en-UM",
3426 "en-US",
3427 "en-US-POSIX",
3428 "en-VC",
3429 "en-VG",
3430 "en-VI",
3431 "en-VU",
3432 "en-WS",
3433 "en-ZA",
3434 "en-ZM",
3435 "en-ZW",
3436 "eo-001",
3437 "es-419",
3438 "es-AR",
3439 "es-BO",
3440 "es-CL",
3441 "es-CO",
3442 "es-CR",
3443 "es-CU",
3444 "es-DO",
3445 "es-EA",
3446 "es-EC",
3447 "es-ES",
3448 "es-GQ",
3449 "es-GT",
3450 "es-HN",
3451 "es-IC",
3452 "es-MX",
3453 "es-NI",
3454 "es-PA",
3455 "es-PE",
3456 "es-PH",
3457 "es-PR",
3458 "es-PY",
3459 "es-SV",
3460 "es-US",
3461 "es-UY",
3462 "es-VE",
3463 "et-EE",
3464 "eu-ES",
3465 "fa-AF",
3466 "fa-IR",
3467 "ff-CM",
3468 "ff-GN",
3469 "ff-MR",
3470 "ff-SN",
3471 "fi-FI",
3472 "fo-FO",
3473 "fr-BE",
3474 "fr-BF",
3475 "fr-BI",
3476 "fr-BJ",
3477 "fr-BL",
3478 "fr-CA",
3479 "fr-CD",
3480 "fr-CF",
3481 "fr-CG",
3482 "fr-CH",
3483 "fr-CI",
3484 "fr-CM",
3485 "fr-DJ",
3486 "fr-DZ",
3487 "fr-FR",
3488 "fr-GA",
3489 "fr-GF",
3490 "fr-GN",
3491 "fr-GP",
3492 "fr-GQ",
3493 "fr-HT",
3494 "fr-KM",
3495 "fr-LU",
3496 "fr-MA",
3497 "fr-MC",
3498 "fr-MF",
3499 "fr-MG",
3500 "fr-ML",
3501 "fr-MQ",
3502 "fr-MR",
3503 "fr-MU",
3504 "fr-NC",
3505 "fr-NE",
3506 "fr-PF",
3507 "fr-PM",
3508 "fr-RE",
3509 "fr-RW",
3510 "fr-SC",
3511 "fr-SN",
3512 "fr-SY",
3513 "fr-TD",
3514 "fr-TG",
3515 "fr-TN",
3516 "fr-VU",
3517 "fr-WF",
3518 "fr-YT",
3519 "fy-NL",
3520 "ga-IE",
3521 "gd-GB",
3522 "gl-ES",
3523 "gu-IN",
3524 "gv-IM",
3525 "ha-Latn",
3526 "ha-Latn-GH",
3527 "ha-Latn-NE",
3528 "ha-Latn-NG",
3529 "he-IL",
3530 "hi-IN",
3531 "hr-BA",
3532 "hr-HR",
3533 "hu-HU",
3534 "hy-AM",
3535 "id-ID",
3536 "ig-NG",
3537 "ii-CN",
3538 "is-IS",
3539 "it-CH",
3540 "it-IT",
3541 "it-SM",
3542 "ja-JP",
3543 "ka-GE",
3544 "ki-KE",
3545 "kk-Cyrl",
3546 "kk-Cyrl-KZ",
3547 "kl-GL",
3548 "km-KH",
3549 "kn-IN",
3550 "ko-KP",
3551 "ko-KR",
3552 "ks-Arab",
3553 "ks-Arab-IN",
3554 "kw-GB",
3555 "ky-Cyrl",
3556 "ky-Cyrl-KG",
3557 "lb-LU",
3558 "lg-UG",
3559 "ln-AO",
3560 "ln-CD",
3561 "ln-CF",
3562 "ln-CG",
3563 "lo-LA",
3564 "lt-LT",
3565 "lu-CD",
3566 "lv-LV",
3567 "mg-MG",
3568 "mk-MK",
3569 "ml-IN",
3570 "mn-Cyrl",
3571 "mn-Cyrl-MN",
3572 "mr-IN",
3573 "ms-Latn",
3574 "ms-Latn-BN",
3575 "ms-Latn-MY",
3576 "ms-Latn-SG",
3577 "mt-MT",
3578 "my-MM",
3579 "nb-NO",
3580 "nb-SJ",
3581 "nd-ZW",
3582 "ne-IN",
3583 "ne-NP",
3584 "nl-AW",
3585 "nl-BE",
3586 "nl-BQ",
3587 "nl-CW",
3588 "nl-NL",
3589 "nl-SR",
3590 "nl-SX",
3591 "nn-NO",
3592 "om-ET",
3593 "om-KE",
3594 "or-IN",
3595 "os-GE",
3596 "os-RU",
3597 "pa-Arab",
3598 "pa-Arab-PK",
3599 "pa-Guru",
3600 "pa-Guru-IN",
3601 "pl-PL",
3602 "ps-AF",
3603 "pt-AO",
3604 "pt-BR",
3605 "pt-CV",
3606 "pt-GW",
3607 "pt-MO",
3608 "pt-MZ",
3609 "pt-PT",
3610 "pt-ST",
3611 "pt-TL",
3612 "qu-BO",
3613 "qu-EC",
3614 "qu-PE",
3615 "rm-CH",
3616 "rn-BI",
3617 "ro-MD",
3618 "ro-RO",
3619 "ru-BY",
3620 "ru-KG",
3621 "ru-KZ",
3622 "ru-MD",
3623 "ru-RU",
3624 "ru-UA",
3625 "rw-RW",
3626 "se-FI",
3627 "se-NO",
3628 "se-SE",
3629 "sg-CF",
3630 "si-LK",
3631 "sk-SK",
3632 "sl-SI",
3633 "sn-ZW",
3634 "so-DJ",
3635 "so-ET",
3636 "so-KE",
3637 "so-SO",
3638 "sq-AL",
3639 "sq-MK",
3640 "sq-XK",
3641 "sr-Cyrl",
3642 "sr-Cyrl-BA",
3643 "sr-Cyrl-ME",
3644 "sr-Cyrl-RS",
3645 "sr-Cyrl-XK",
3646 "sr-Latn",
3647 "sr-Latn-BA",
3648 "sr-Latn-ME",
3649 "sr-Latn-RS",
3650 "sr-Latn-XK",
3651 "sv-AX",
3652 "sv-FI",
3653 "sv-SE",
3654 "sw-CD",
3655 "sw-KE",
3656 "sw-TZ",
3657 "sw-UG",
3658 "ta-IN",
3659 "ta-LK",
3660 "ta-MY",
3661 "ta-SG",
3662 "te-IN",
3663 "th-TH",
3664 "ti-ER",
3665 "ti-ET",
3666 "to-TO",
3667 "tr-CY",
3668 "tr-TR",
3669 "ug-Arab",
3670 "ug-Arab-CN",
3671 "uk-UA",
3672 "ur-IN",
3673 "ur-PK",
3674 "uz-Arab",
3675 "uz-Arab-AF",
3676 "uz-Cyrl",
3677 "uz-Cyrl-UZ",
3678 "uz-Latn",
3679 "uz-Latn-UZ",
3680 "vi-VN",
3681 "yi-001",
3682 "yo-BJ",
3683 "yo-NG",
3684 "zh-Hans",
3685 "zh-Hans-CN",
3686 "zh-Hans-HK",
3687 "zh-Hans-MO",
3688 "zh-Hans-SG",
3689 "zh-Hant",
3690 "zh-Hant-HK",
3691 "zh-Hant-MO",
3692 "zh-Hant-TW",
3693 "zu-ZA"
3694 ],
3695
3696 us_states_and_dc: [
3697 {name: 'Alabama', abbreviation: 'AL'},
3698 {name: 'Alaska', abbreviation: 'AK'},
3699 {name: 'Arizona', abbreviation: 'AZ'},
3700 {name: 'Arkansas', abbreviation: 'AR'},
3701 {name: 'California', abbreviation: 'CA'},
3702 {name: 'Colorado', abbreviation: 'CO'},
3703 {name: 'Connecticut', abbreviation: 'CT'},
3704 {name: 'Delaware', abbreviation: 'DE'},
3705 {name: 'District of Columbia', abbreviation: 'DC'},
3706 {name: 'Florida', abbreviation: 'FL'},
3707 {name: 'Georgia', abbreviation: 'GA'},
3708 {name: 'Hawaii', abbreviation: 'HI'},
3709 {name: 'Idaho', abbreviation: 'ID'},
3710 {name: 'Illinois', abbreviation: 'IL'},
3711 {name: 'Indiana', abbreviation: 'IN'},
3712 {name: 'Iowa', abbreviation: 'IA'},
3713 {name: 'Kansas', abbreviation: 'KS'},
3714 {name: 'Kentucky', abbreviation: 'KY'},
3715 {name: 'Louisiana', abbreviation: 'LA'},
3716 {name: 'Maine', abbreviation: 'ME'},
3717 {name: 'Maryland', abbreviation: 'MD'},
3718 {name: 'Massachusetts', abbreviation: 'MA'},
3719 {name: 'Michigan', abbreviation: 'MI'},
3720 {name: 'Minnesota', abbreviation: 'MN'},
3721 {name: 'Mississippi', abbreviation: 'MS'},
3722 {name: 'Missouri', abbreviation: 'MO'},
3723 {name: 'Montana', abbreviation: 'MT'},
3724 {name: 'Nebraska', abbreviation: 'NE'},
3725 {name: 'Nevada', abbreviation: 'NV'},
3726 {name: 'New Hampshire', abbreviation: 'NH'},
3727 {name: 'New Jersey', abbreviation: 'NJ'},
3728 {name: 'New Mexico', abbreviation: 'NM'},
3729 {name: 'New York', abbreviation: 'NY'},
3730 {name: 'North Carolina', abbreviation: 'NC'},
3731 {name: 'North Dakota', abbreviation: 'ND'},
3732 {name: 'Ohio', abbreviation: 'OH'},
3733 {name: 'Oklahoma', abbreviation: 'OK'},
3734 {name: 'Oregon', abbreviation: 'OR'},
3735 {name: 'Pennsylvania', abbreviation: 'PA'},
3736 {name: 'Rhode Island', abbreviation: 'RI'},
3737 {name: 'South Carolina', abbreviation: 'SC'},
3738 {name: 'South Dakota', abbreviation: 'SD'},
3739 {name: 'Tennessee', abbreviation: 'TN'},
3740 {name: 'Texas', abbreviation: 'TX'},
3741 {name: 'Utah', abbreviation: 'UT'},
3742 {name: 'Vermont', abbreviation: 'VT'},
3743 {name: 'Virginia', abbreviation: 'VA'},
3744 {name: 'Washington', abbreviation: 'WA'},
3745 {name: 'West Virginia', abbreviation: 'WV'},
3746 {name: 'Wisconsin', abbreviation: 'WI'},
3747 {name: 'Wyoming', abbreviation: 'WY'}
3748 ],
3749
3750 territories: [
3751 {name: 'American Samoa', abbreviation: 'AS'},
3752 {name: 'Federated States of Micronesia', abbreviation: 'FM'},
3753 {name: 'Guam', abbreviation: 'GU'},
3754 {name: 'Marshall Islands', abbreviation: 'MH'},
3755 {name: 'Northern Mariana Islands', abbreviation: 'MP'},
3756 {name: 'Puerto Rico', abbreviation: 'PR'},
3757 {name: 'Virgin Islands, U.S.', abbreviation: 'VI'}
3758 ],
3759
3760 armed_forces: [
3761 {name: 'Armed Forces Europe', abbreviation: 'AE'},
3762 {name: 'Armed Forces Pacific', abbreviation: 'AP'},
3763 {name: 'Armed Forces the Americas', abbreviation: 'AA'}
3764 ],
3765
3766 country_regions: {
3767 it: [
3768 { name: "Valle d'Aosta", abbreviation: "VDA" },
3769 { name: "Piemonte", abbreviation: "PIE" },
3770 { name: "Lombardia", abbreviation: "LOM" },
3771 { name: "Veneto", abbreviation: "VEN" },
3772 { name: "Trentino Alto Adige", abbreviation: "TAA" },
3773 { name: "Friuli Venezia Giulia", abbreviation: "FVG" },
3774 { name: "Liguria", abbreviation: "LIG" },
3775 { name: "Emilia Romagna", abbreviation: "EMR" },
3776 { name: "Toscana", abbreviation: "TOS" },
3777 { name: "Umbria", abbreviation: "UMB" },
3778 { name: "Marche", abbreviation: "MAR" },
3779 { name: "Abruzzo", abbreviation: "ABR" },
3780 { name: "Lazio", abbreviation: "LAZ" },
3781 { name: "Campania", abbreviation: "CAM" },
3782 { name: "Puglia", abbreviation: "PUG" },
3783 { name: "Basilicata", abbreviation: "BAS" },
3784 { name: "Molise", abbreviation: "MOL" },
3785 { name: "Calabria", abbreviation: "CAL" },
3786 { name: "Sicilia", abbreviation: "SIC" },
3787 { name: "Sardegna", abbreviation: "SAR" }
3788 ]
3789 },
3790
3791 street_suffixes: {
3792 'us': [
3793 {name: 'Avenue', abbreviation: 'Ave'},
3794 {name: 'Boulevard', abbreviation: 'Blvd'},
3795 {name: 'Center', abbreviation: 'Ctr'},
3796 {name: 'Circle', abbreviation: 'Cir'},
3797 {name: 'Court', abbreviation: 'Ct'},
3798 {name: 'Drive', abbreviation: 'Dr'},
3799 {name: 'Extension', abbreviation: 'Ext'},
3800 {name: 'Glen', abbreviation: 'Gln'},
3801 {name: 'Grove', abbreviation: 'Grv'},
3802 {name: 'Heights', abbreviation: 'Hts'},
3803 {name: 'Highway', abbreviation: 'Hwy'},
3804 {name: 'Junction', abbreviation: 'Jct'},
3805 {name: 'Key', abbreviation: 'Key'},
3806 {name: 'Lane', abbreviation: 'Ln'},
3807 {name: 'Loop', abbreviation: 'Loop'},
3808 {name: 'Manor', abbreviation: 'Mnr'},
3809 {name: 'Mill', abbreviation: 'Mill'},
3810 {name: 'Park', abbreviation: 'Park'},
3811 {name: 'Parkway', abbreviation: 'Pkwy'},
3812 {name: 'Pass', abbreviation: 'Pass'},
3813 {name: 'Path', abbreviation: 'Path'},
3814 {name: 'Pike', abbreviation: 'Pike'},
3815 {name: 'Place', abbreviation: 'Pl'},
3816 {name: 'Plaza', abbreviation: 'Plz'},
3817 {name: 'Point', abbreviation: 'Pt'},
3818 {name: 'Ridge', abbreviation: 'Rdg'},
3819 {name: 'River', abbreviation: 'Riv'},
3820 {name: 'Road', abbreviation: 'Rd'},
3821 {name: 'Square', abbreviation: 'Sq'},
3822 {name: 'Street', abbreviation: 'St'},
3823 {name: 'Terrace', abbreviation: 'Ter'},
3824 {name: 'Trail', abbreviation: 'Trl'},
3825 {name: 'Turnpike', abbreviation: 'Tpke'},
3826 {name: 'View', abbreviation: 'Vw'},
3827 {name: 'Way', abbreviation: 'Way'}
3828 ],
3829 'it': [
3830 { name: 'Accesso', abbreviation: 'Acc.' },
3831 { name: 'Alzaia', abbreviation: 'Alz.' },
3832 { name: 'Arco', abbreviation: 'Arco' },
3833 { name: 'Archivolto', abbreviation: 'Acv.' },
3834 { name: 'Arena', abbreviation: 'Arena' },
3835 { name: 'Argine', abbreviation: 'Argine' },
3836 { name: 'Bacino', abbreviation: 'Bacino' },
3837 { name: 'Banchi', abbreviation: 'Banchi' },
3838 { name: 'Banchina', abbreviation: 'Ban.' },
3839 { name: 'Bastioni', abbreviation: 'Bas.' },
3840 { name: 'Belvedere', abbreviation: 'Belv.' },
3841 { name: 'Borgata', abbreviation: 'B.ta' },
3842 { name: 'Borgo', abbreviation: 'B.go' },
3843 { name: 'Calata', abbreviation: 'Cal.' },
3844 { name: 'Calle', abbreviation: 'Calle' },
3845 { name: 'Campiello', abbreviation: 'Cam.' },
3846 { name: 'Campo', abbreviation: 'Cam.' },
3847 { name: 'Canale', abbreviation: 'Can.' },
3848 { name: 'Carraia', abbreviation: 'Carr.' },
3849 { name: 'Cascina', abbreviation: 'Cascina' },
3850 { name: 'Case sparse', abbreviation: 'c.s.' },
3851 { name: 'Cavalcavia', abbreviation: 'Cv.' },
3852 { name: 'Circonvallazione', abbreviation: 'Cv.' },
3853 { name: 'Complanare', abbreviation: 'C.re' },
3854 { name: 'Contrada', abbreviation: 'C.da' },
3855 { name: 'Corso', abbreviation: 'C.so' },
3856 { name: 'Corte', abbreviation: 'C.te' },
3857 { name: 'Cortile', abbreviation: 'C.le' },
3858 { name: 'Diramazione', abbreviation: 'Dir.' },
3859 { name: 'Fondaco', abbreviation: 'F.co' },
3860 { name: 'Fondamenta', abbreviation: 'F.ta' },
3861 { name: 'Fondo', abbreviation: 'F.do' },
3862 { name: 'Frazione', abbreviation: 'Fr.' },
3863 { name: 'Isola', abbreviation: 'Is.' },
3864 { name: 'Largo', abbreviation: 'L.go' },
3865 { name: 'Litoranea', abbreviation: 'Lit.' },
3866 { name: 'Lungolago', abbreviation: 'L.go lago' },
3867 { name: 'Lungo Po', abbreviation: 'l.go Po' },
3868 { name: 'Molo', abbreviation: 'Molo' },
3869 { name: 'Mura', abbreviation: 'Mura' },
3870 { name: 'Passaggio privato', abbreviation: 'pass. priv.' },
3871 { name: 'Passeggiata', abbreviation: 'Pass.' },
3872 { name: 'Piazza', abbreviation: 'P.zza' },
3873 { name: 'Piazzale', abbreviation: 'P.le' },
3874 { name: 'Ponte', abbreviation: 'P.te' },
3875 { name: 'Portico', abbreviation: 'P.co' },
3876 { name: 'Rampa', abbreviation: 'Rampa' },
3877 { name: 'Regione', abbreviation: 'Reg.' },
3878 { name: 'Rione', abbreviation: 'R.ne' },
3879 { name: 'Rio', abbreviation: 'Rio' },
3880 { name: 'Ripa', abbreviation: 'Ripa' },
3881 { name: 'Riva', abbreviation: 'Riva' },
3882 { name: 'Rondò', abbreviation: 'Rondò' },
3883 { name: 'Rotonda', abbreviation: 'Rot.' },
3884 { name: 'Sagrato', abbreviation: 'Sagr.' },
3885 { name: 'Salita', abbreviation: 'Sal.' },
3886 { name: 'Scalinata', abbreviation: 'Scal.' },
3887 { name: 'Scalone', abbreviation: 'Scal.' },
3888 { name: 'Slargo', abbreviation: 'Sl.' },
3889 { name: 'Sottoportico', abbreviation: 'Sott.' },
3890 { name: 'Strada', abbreviation: 'Str.' },
3891 { name: 'Stradale', abbreviation: 'Str.le' },
3892 { name: 'Strettoia', abbreviation: 'Strett.' },
3893 { name: 'Traversa', abbreviation: 'Trav.' },
3894 { name: 'Via', abbreviation: 'V.' },
3895 { name: 'Viale', abbreviation: 'V.le' },
3896 { name: 'Vicinale', abbreviation: 'Vic.le' },
3897 { name: 'Vicolo', abbreviation: 'Vic.' }
3898 ],
3899 'uk' : [
3900 {name: 'Avenue', abbreviation: 'Ave'},
3901 {name: 'Close', abbreviation: 'Cl'},
3902 {name: 'Court', abbreviation: 'Ct'},
3903 {name: 'Crescent', abbreviation: 'Cr'},
3904 {name: 'Drive', abbreviation: 'Dr'},
3905 {name: 'Garden', abbreviation: 'Gdn'},
3906 {name: 'Gardens', abbreviation: 'Gdns'},
3907 {name: 'Green', abbreviation: 'Gn'},
3908 {name: 'Grove', abbreviation: 'Gr'},
3909 {name: 'Lane', abbreviation: 'Ln'},
3910 {name: 'Mount', abbreviation: 'Mt'},
3911 {name: 'Place', abbreviation: 'Pl'},
3912 {name: 'Park', abbreviation: 'Pk'},
3913 {name: 'Ridge', abbreviation: 'Rdg'},
3914 {name: 'Road', abbreviation: 'Rd'},
3915 {name: 'Square', abbreviation: 'Sq'},
3916 {name: 'Street', abbreviation: 'St'},
3917 {name: 'Terrace', abbreviation: 'Ter'},
3918 {name: 'Valley', abbreviation: 'Val'}
3919 ]
3920 },
3921
3922 months: [
3923 {name: 'January', short_name: 'Jan', numeric: '01', days: 31},
3924 // Not messing with leap years...
3925 {name: 'February', short_name: 'Feb', numeric: '02', days: 28},
3926 {name: 'March', short_name: 'Mar', numeric: '03', days: 31},
3927 {name: 'April', short_name: 'Apr', numeric: '04', days: 30},
3928 {name: 'May', short_name: 'May', numeric: '05', days: 31},
3929 {name: 'June', short_name: 'Jun', numeric: '06', days: 30},
3930 {name: 'July', short_name: 'Jul', numeric: '07', days: 31},
3931 {name: 'August', short_name: 'Aug', numeric: '08', days: 31},
3932 {name: 'September', short_name: 'Sep', numeric: '09', days: 30},
3933 {name: 'October', short_name: 'Oct', numeric: '10', days: 31},
3934 {name: 'November', short_name: 'Nov', numeric: '11', days: 30},
3935 {name: 'December', short_name: 'Dec', numeric: '12', days: 31}
3936 ],
3937
3938 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
3939 cc_types: [
3940 {name: "American Express", short_name: 'amex', prefix: '34', length: 15},
3941 {name: "Bankcard", short_name: 'bankcard', prefix: '5610', length: 16},
3942 {name: "China UnionPay", short_name: 'chinaunion', prefix: '62', length: 16},
3943 {name: "Diners Club Carte Blanche", short_name: 'dccarte', prefix: '300', length: 14},
3944 {name: "Diners Club enRoute", short_name: 'dcenroute', prefix: '2014', length: 15},
3945 {name: "Diners Club International", short_name: 'dcintl', prefix: '36', length: 14},
3946 {name: "Diners Club United States & Canada", short_name: 'dcusc', prefix: '54', length: 16},
3947 {name: "Discover Card", short_name: 'discover', prefix: '6011', length: 16},
3948 {name: "InstaPayment", short_name: 'instapay', prefix: '637', length: 16},
3949 {name: "JCB", short_name: 'jcb', prefix: '3528', length: 16},
3950 {name: "Laser", short_name: 'laser', prefix: '6304', length: 16},
3951 {name: "Maestro", short_name: 'maestro', prefix: '5018', length: 16},
3952 {name: "Mastercard", short_name: 'mc', prefix: '51', length: 16},
3953 {name: "Solo", short_name: 'solo', prefix: '6334', length: 16},
3954 {name: "Switch", short_name: 'switch', prefix: '4903', length: 16},
3955 {name: "Visa", short_name: 'visa', prefix: '4', length: 16},
3956 {name: "Visa Electron", short_name: 'electron', prefix: '4026', length: 16}
3957 ],
3958
3959 //return all world currency by ISO 4217
3960 currency_types: [
3961 {'code' : 'AED', 'name' : 'United Arab Emirates Dirham'},
3962 {'code' : 'AFN', 'name' : 'Afghanistan Afghani'},
3963 {'code' : 'ALL', 'name' : 'Albania Lek'},
3964 {'code' : 'AMD', 'name' : 'Armenia Dram'},
3965 {'code' : 'ANG', 'name' : 'Netherlands Antilles Guilder'},
3966 {'code' : 'AOA', 'name' : 'Angola Kwanza'},
3967 {'code' : 'ARS', 'name' : 'Argentina Peso'},
3968 {'code' : 'AUD', 'name' : 'Australia Dollar'},
3969 {'code' : 'AWG', 'name' : 'Aruba Guilder'},
3970 {'code' : 'AZN', 'name' : 'Azerbaijan New Manat'},
3971 {'code' : 'BAM', 'name' : 'Bosnia and Herzegovina Convertible Marka'},
3972 {'code' : 'BBD', 'name' : 'Barbados Dollar'},
3973 {'code' : 'BDT', 'name' : 'Bangladesh Taka'},
3974 {'code' : 'BGN', 'name' : 'Bulgaria Lev'},
3975 {'code' : 'BHD', 'name' : 'Bahrain Dinar'},
3976 {'code' : 'BIF', 'name' : 'Burundi Franc'},
3977 {'code' : 'BMD', 'name' : 'Bermuda Dollar'},
3978 {'code' : 'BND', 'name' : 'Brunei Darussalam Dollar'},
3979 {'code' : 'BOB', 'name' : 'Bolivia Boliviano'},
3980 {'code' : 'BRL', 'name' : 'Brazil Real'},
3981 {'code' : 'BSD', 'name' : 'Bahamas Dollar'},
3982 {'code' : 'BTN', 'name' : 'Bhutan Ngultrum'},
3983 {'code' : 'BWP', 'name' : 'Botswana Pula'},
3984 {'code' : 'BYR', 'name' : 'Belarus Ruble'},
3985 {'code' : 'BZD', 'name' : 'Belize Dollar'},
3986 {'code' : 'CAD', 'name' : 'Canada Dollar'},
3987 {'code' : 'CDF', 'name' : 'Congo/Kinshasa Franc'},
3988 {'code' : 'CHF', 'name' : 'Switzerland Franc'},
3989 {'code' : 'CLP', 'name' : 'Chile Peso'},
3990 {'code' : 'CNY', 'name' : 'China Yuan Renminbi'},
3991 {'code' : 'COP', 'name' : 'Colombia Peso'},
3992 {'code' : 'CRC', 'name' : 'Costa Rica Colon'},
3993 {'code' : 'CUC', 'name' : 'Cuba Convertible Peso'},
3994 {'code' : 'CUP', 'name' : 'Cuba Peso'},
3995 {'code' : 'CVE', 'name' : 'Cape Verde Escudo'},
3996 {'code' : 'CZK', 'name' : 'Czech Republic Koruna'},
3997 {'code' : 'DJF', 'name' : 'Djibouti Franc'},
3998 {'code' : 'DKK', 'name' : 'Denmark Krone'},
3999 {'code' : 'DOP', 'name' : 'Dominican Republic Peso'},
4000 {'code' : 'DZD', 'name' : 'Algeria Dinar'},
4001 {'code' : 'EGP', 'name' : 'Egypt Pound'},
4002 {'code' : 'ERN', 'name' : 'Eritrea Nakfa'},
4003 {'code' : 'ETB', 'name' : 'Ethiopia Birr'},
4004 {'code' : 'EUR', 'name' : 'Euro Member Countries'},
4005 {'code' : 'FJD', 'name' : 'Fiji Dollar'},
4006 {'code' : 'FKP', 'name' : 'Falkland Islands (Malvinas) Pound'},
4007 {'code' : 'GBP', 'name' : 'United Kingdom Pound'},
4008 {'code' : 'GEL', 'name' : 'Georgia Lari'},
4009 {'code' : 'GGP', 'name' : 'Guernsey Pound'},
4010 {'code' : 'GHS', 'name' : 'Ghana Cedi'},
4011 {'code' : 'GIP', 'name' : 'Gibraltar Pound'},
4012 {'code' : 'GMD', 'name' : 'Gambia Dalasi'},
4013 {'code' : 'GNF', 'name' : 'Guinea Franc'},
4014 {'code' : 'GTQ', 'name' : 'Guatemala Quetzal'},
4015 {'code' : 'GYD', 'name' : 'Guyana Dollar'},
4016 {'code' : 'HKD', 'name' : 'Hong Kong Dollar'},
4017 {'code' : 'HNL', 'name' : 'Honduras Lempira'},
4018 {'code' : 'HRK', 'name' : 'Croatia Kuna'},
4019 {'code' : 'HTG', 'name' : 'Haiti Gourde'},
4020 {'code' : 'HUF', 'name' : 'Hungary Forint'},
4021 {'code' : 'IDR', 'name' : 'Indonesia Rupiah'},
4022 {'code' : 'ILS', 'name' : 'Israel Shekel'},
4023 {'code' : 'IMP', 'name' : 'Isle of Man Pound'},
4024 {'code' : 'INR', 'name' : 'India Rupee'},
4025 {'code' : 'IQD', 'name' : 'Iraq Dinar'},
4026 {'code' : 'IRR', 'name' : 'Iran Rial'},
4027 {'code' : 'ISK', 'name' : 'Iceland Krona'},
4028 {'code' : 'JEP', 'name' : 'Jersey Pound'},
4029 {'code' : 'JMD', 'name' : 'Jamaica Dollar'},
4030 {'code' : 'JOD', 'name' : 'Jordan Dinar'},
4031 {'code' : 'JPY', 'name' : 'Japan Yen'},
4032 {'code' : 'KES', 'name' : 'Kenya Shilling'},
4033 {'code' : 'KGS', 'name' : 'Kyrgyzstan Som'},
4034 {'code' : 'KHR', 'name' : 'Cambodia Riel'},
4035 {'code' : 'KMF', 'name' : 'Comoros Franc'},
4036 {'code' : 'KPW', 'name' : 'Korea (North) Won'},
4037 {'code' : 'KRW', 'name' : 'Korea (South) Won'},
4038 {'code' : 'KWD', 'name' : 'Kuwait Dinar'},
4039 {'code' : 'KYD', 'name' : 'Cayman Islands Dollar'},
4040 {'code' : 'KZT', 'name' : 'Kazakhstan Tenge'},
4041 {'code' : 'LAK', 'name' : 'Laos Kip'},
4042 {'code' : 'LBP', 'name' : 'Lebanon Pound'},
4043 {'code' : 'LKR', 'name' : 'Sri Lanka Rupee'},
4044 {'code' : 'LRD', 'name' : 'Liberia Dollar'},
4045 {'code' : 'LSL', 'name' : 'Lesotho Loti'},
4046 {'code' : 'LTL', 'name' : 'Lithuania Litas'},
4047 {'code' : 'LYD', 'name' : 'Libya Dinar'},
4048 {'code' : 'MAD', 'name' : 'Morocco Dirham'},
4049 {'code' : 'MDL', 'name' : 'Moldova Leu'},
4050 {'code' : 'MGA', 'name' : 'Madagascar Ariary'},
4051 {'code' : 'MKD', 'name' : 'Macedonia Denar'},
4052 {'code' : 'MMK', 'name' : 'Myanmar (Burma) Kyat'},
4053 {'code' : 'MNT', 'name' : 'Mongolia Tughrik'},
4054 {'code' : 'MOP', 'name' : 'Macau Pataca'},
4055 {'code' : 'MRO', 'name' : 'Mauritania Ouguiya'},
4056 {'code' : 'MUR', 'name' : 'Mauritius Rupee'},
4057 {'code' : 'MVR', 'name' : 'Maldives (Maldive Islands) Rufiyaa'},
4058 {'code' : 'MWK', 'name' : 'Malawi Kwacha'},
4059 {'code' : 'MXN', 'name' : 'Mexico Peso'},
4060 {'code' : 'MYR', 'name' : 'Malaysia Ringgit'},
4061 {'code' : 'MZN', 'name' : 'Mozambique Metical'},
4062 {'code' : 'NAD', 'name' : 'Namibia Dollar'},
4063 {'code' : 'NGN', 'name' : 'Nigeria Naira'},
4064 {'code' : 'NIO', 'name' : 'Nicaragua Cordoba'},
4065 {'code' : 'NOK', 'name' : 'Norway Krone'},
4066 {'code' : 'NPR', 'name' : 'Nepal Rupee'},
4067 {'code' : 'NZD', 'name' : 'New Zealand Dollar'},
4068 {'code' : 'OMR', 'name' : 'Oman Rial'},
4069 {'code' : 'PAB', 'name' : 'Panama Balboa'},
4070 {'code' : 'PEN', 'name' : 'Peru Nuevo Sol'},
4071 {'code' : 'PGK', 'name' : 'Papua New Guinea Kina'},
4072 {'code' : 'PHP', 'name' : 'Philippines Peso'},
4073 {'code' : 'PKR', 'name' : 'Pakistan Rupee'},
4074 {'code' : 'PLN', 'name' : 'Poland Zloty'},
4075 {'code' : 'PYG', 'name' : 'Paraguay Guarani'},
4076 {'code' : 'QAR', 'name' : 'Qatar Riyal'},
4077 {'code' : 'RON', 'name' : 'Romania New Leu'},
4078 {'code' : 'RSD', 'name' : 'Serbia Dinar'},
4079 {'code' : 'RUB', 'name' : 'Russia Ruble'},
4080 {'code' : 'RWF', 'name' : 'Rwanda Franc'},
4081 {'code' : 'SAR', 'name' : 'Saudi Arabia Riyal'},
4082 {'code' : 'SBD', 'name' : 'Solomon Islands Dollar'},
4083 {'code' : 'SCR', 'name' : 'Seychelles Rupee'},
4084 {'code' : 'SDG', 'name' : 'Sudan Pound'},
4085 {'code' : 'SEK', 'name' : 'Sweden Krona'},
4086 {'code' : 'SGD', 'name' : 'Singapore Dollar'},
4087 {'code' : 'SHP', 'name' : 'Saint Helena Pound'},
4088 {'code' : 'SLL', 'name' : 'Sierra Leone Leone'},
4089 {'code' : 'SOS', 'name' : 'Somalia Shilling'},
4090 {'code' : 'SPL', 'name' : 'Seborga Luigino'},
4091 {'code' : 'SRD', 'name' : 'Suriname Dollar'},
4092 {'code' : 'STD', 'name' : 'São Tomé and Príncipe Dobra'},
4093 {'code' : 'SVC', 'name' : 'El Salvador Colon'},
4094 {'code' : 'SYP', 'name' : 'Syria Pound'},
4095 {'code' : 'SZL', 'name' : 'Swaziland Lilangeni'},
4096 {'code' : 'THB', 'name' : 'Thailand Baht'},
4097 {'code' : 'TJS', 'name' : 'Tajikistan Somoni'},
4098 {'code' : 'TMT', 'name' : 'Turkmenistan Manat'},
4099 {'code' : 'TND', 'name' : 'Tunisia Dinar'},
4100 {'code' : 'TOP', 'name' : 'Tonga Pa\'anga'},
4101 {'code' : 'TRY', 'name' : 'Turkey Lira'},
4102 {'code' : 'TTD', 'name' : 'Trinidad and Tobago Dollar'},
4103 {'code' : 'TVD', 'name' : 'Tuvalu Dollar'},
4104 {'code' : 'TWD', 'name' : 'Taiwan New Dollar'},
4105 {'code' : 'TZS', 'name' : 'Tanzania Shilling'},
4106 {'code' : 'UAH', 'name' : 'Ukraine Hryvnia'},
4107 {'code' : 'UGX', 'name' : 'Uganda Shilling'},
4108 {'code' : 'USD', 'name' : 'United States Dollar'},
4109 {'code' : 'UYU', 'name' : 'Uruguay Peso'},
4110 {'code' : 'UZS', 'name' : 'Uzbekistan Som'},
4111 {'code' : 'VEF', 'name' : 'Venezuela Bolivar'},
4112 {'code' : 'VND', 'name' : 'Viet Nam Dong'},
4113 {'code' : 'VUV', 'name' : 'Vanuatu Vatu'},
4114 {'code' : 'WST', 'name' : 'Samoa Tala'},
4115 {'code' : 'XAF', 'name' : 'Communauté Financière Africaine (BEAC) CFA Franc BEAC'},
4116 {'code' : 'XCD', 'name' : 'East Caribbean Dollar'},
4117 {'code' : 'XDR', 'name' : 'International Monetary Fund (IMF) Special Drawing Rights'},
4118 {'code' : 'XOF', 'name' : 'Communauté Financière Africaine (BCEAO) Franc'},
4119 {'code' : 'XPF', 'name' : 'Comptoirs Français du Pacifique (CFP) Franc'},
4120 {'code' : 'YER', 'name' : 'Yemen Rial'},
4121 {'code' : 'ZAR', 'name' : 'South Africa Rand'},
4122 {'code' : 'ZMW', 'name' : 'Zambia Kwacha'},
4123 {'code' : 'ZWD', 'name' : 'Zimbabwe Dollar'}
4124 ],
4125
4126 // return the names of all valide colors
4127 colorNames : [ "AliceBlue", "Black", "Navy", "DarkBlue", "MediumBlue", "Blue", "DarkGreen", "Green", "Teal", "DarkCyan", "DeepSkyBlue", "DarkTurquoise", "MediumSpringGreen", "Lime", "SpringGreen",
4128 "Aqua", "Cyan", "MidnightBlue", "DodgerBlue", "LightSeaGreen", "ForestGreen", "SeaGreen", "DarkSlateGray", "LimeGreen", "MediumSeaGreen", "Turquoise", "RoyalBlue", "SteelBlue", "DarkSlateBlue", "MediumTurquoise",
4129 "Indigo", "DarkOliveGreen", "CadetBlue", "CornflowerBlue", "RebeccaPurple", "MediumAquaMarine", "DimGray", "SlateBlue", "OliveDrab", "SlateGray", "LightSlateGray", "MediumSlateBlue", "LawnGreen", "Chartreuse",
4130 "Aquamarine", "Maroon", "Purple", "Olive", "Gray", "SkyBlue", "LightSkyBlue", "BlueViolet", "DarkRed", "DarkMagenta", "SaddleBrown", "Ivory", "White",
4131 "DarkSeaGreen", "LightGreen", "MediumPurple", "DarkViolet", "PaleGreen", "DarkOrchid", "YellowGreen", "Sienna", "Brown", "DarkGray", "LightBlue", "GreenYellow", "PaleTurquoise", "LightSteelBlue", "PowderBlue",
4132 "FireBrick", "DarkGoldenRod", "MediumOrchid", "RosyBrown", "DarkKhaki", "Silver", "MediumVioletRed", "IndianRed", "Peru", "Chocolate", "Tan", "LightGray", "Thistle", "Orchid", "GoldenRod", "PaleVioletRed",
4133 "Crimson", "Gainsboro", "Plum", "BurlyWood", "LightCyan", "Lavender", "DarkSalmon", "Violet", "PaleGoldenRod", "LightCoral", "Khaki", "AliceBlue", "HoneyDew", "Azure", "SandyBrown", "Wheat", "Beige", "WhiteSmoke",
4134 "MintCream", "GhostWhite", "Salmon", "AntiqueWhite", "Linen", "LightGoldenRodYellow", "OldLace", "Red", "Fuchsia", "Magenta", "DeepPink", "OrangeRed", "Tomato", "HotPink", "Coral", "DarkOrange", "LightSalmon", "Orange",
4135 "LightPink", "Pink", "Gold", "PeachPuff", "NavajoWhite", "Moccasin", "Bisque", "MistyRose", "BlanchedAlmond", "PapayaWhip", "LavenderBlush", "SeaShell", "Cornsilk", "LemonChiffon", "FloralWhite", "Snow", "Yellow", "LightYellow"
4136 ],
4137
4138 // Data taken from https://www.sec.gov/rules/other/4-460list.htm
4139 company: [ "3Com Corp",
4140 "3M Company",
4141 "A.G. Edwards Inc.",
4142 "Abbott Laboratories",
4143 "Abercrombie & Fitch Co.",
4144 "ABM Industries Incorporated",
4145 "Ace Hardware Corporation",
4146 "ACT Manufacturing Inc.",
4147 "Acterna Corp.",
4148 "Adams Resources & Energy, Inc.",
4149 "ADC Telecommunications, Inc.",
4150 "Adelphia Communications Corporation",
4151 "Administaff, Inc.",
4152 "Adobe Systems Incorporated",
4153 "Adolph Coors Company",
4154 "Advance Auto Parts, Inc.",
4155 "Advanced Micro Devices, Inc.",
4156 "AdvancePCS, Inc.",
4157 "Advantica Restaurant Group, Inc.",
4158 "The AES Corporation",
4159 "Aetna Inc.",
4160 "Affiliated Computer Services, Inc.",
4161 "AFLAC Incorporated",
4162 "AGCO Corporation",
4163 "Agilent Technologies, Inc.",
4164 "Agway Inc.",
4165 "Apartment Investment and Management Company",
4166 "Air Products and Chemicals, Inc.",
4167 "Airborne, Inc.",
4168 "Airgas, Inc.",
4169 "AK Steel Holding Corporation",
4170 "Alaska Air Group, Inc.",
4171 "Alberto-Culver Company",
4172 "Albertson's, Inc.",
4173 "Alcoa Inc.",
4174 "Alleghany Corporation",
4175 "Allegheny Energy, Inc.",
4176 "Allegheny Technologies Incorporated",
4177 "Allergan, Inc.",
4178 "ALLETE, Inc.",
4179 "Alliant Energy Corporation",
4180 "Allied Waste Industries, Inc.",
4181 "Allmerica Financial Corporation",
4182 "The Allstate Corporation",
4183 "ALLTEL Corporation",
4184 "The Alpine Group, Inc.",
4185 "Amazon.com, Inc.",
4186 "AMC Entertainment Inc.",
4187 "American Power Conversion Corporation",
4188 "Amerada Hess Corporation",
4189 "AMERCO",
4190 "Ameren Corporation",
4191 "America West Holdings Corporation",
4192 "American Axle & Manufacturing Holdings, Inc.",
4193 "American Eagle Outfitters, Inc.",
4194 "American Electric Power Company, Inc.",
4195 "American Express Company",
4196 "American Financial Group, Inc.",
4197 "American Greetings Corporation",
4198 "American International Group, Inc.",
4199 "American Standard Companies Inc.",
4200 "American Water Works Company, Inc.",
4201 "AmerisourceBergen Corporation",
4202 "Ames Department Stores, Inc.",
4203 "Amgen Inc.",
4204 "Amkor Technology, Inc.",
4205 "AMR Corporation",
4206 "AmSouth Bancorp.",
4207 "Amtran, Inc.",
4208 "Anadarko Petroleum Corporation",
4209 "Analog Devices, Inc.",
4210 "Anheuser-Busch Companies, Inc.",
4211 "Anixter International Inc.",
4212 "AnnTaylor Inc.",
4213 "Anthem, Inc.",
4214 "AOL Time Warner Inc.",
4215 "Aon Corporation",
4216 "Apache Corporation",
4217 "Apple Computer, Inc.",
4218 "Applera Corporation",
4219 "Applied Industrial Technologies, Inc.",
4220 "Applied Materials, Inc.",
4221 "Aquila, Inc.",
4222 "ARAMARK Corporation",
4223 "Arch Coal, Inc.",
4224 "Archer Daniels Midland Company",
4225 "Arkansas Best Corporation",
4226 "Armstrong Holdings, Inc.",
4227 "Arrow Electronics, Inc.",
4228 "ArvinMeritor, Inc.",
4229 "Ashland Inc.",
4230 "Astoria Financial Corporation",
4231 "AT&T Corp.",
4232 "Atmel Corporation",
4233 "Atmos Energy Corporation",
4234 "Audiovox Corporation",
4235 "Autoliv, Inc.",
4236 "Automatic Data Processing, Inc.",
4237 "AutoNation, Inc.",
4238 "AutoZone, Inc.",
4239 "Avaya Inc.",
4240 "Avery Dennison Corporation",
4241 "Avista Corporation",
4242 "Avnet, Inc.",
4243 "Avon Products, Inc.",
4244 "Baker Hughes Incorporated",
4245 "Ball Corporation",
4246 "Bank of America Corporation",
4247 "The Bank of New York Company, Inc.",
4248 "Bank One Corporation",
4249 "Banknorth Group, Inc.",
4250 "Banta Corporation",
4251 "Barnes & Noble, Inc.",
4252 "Bausch & Lomb Incorporated",
4253 "Baxter International Inc.",
4254 "BB&T Corporation",
4255 "The Bear Stearns Companies Inc.",
4256 "Beazer Homes USA, Inc.",
4257 "Beckman Coulter, Inc.",
4258 "Becton, Dickinson and Company",
4259 "Bed Bath & Beyond Inc.",
4260 "Belk, Inc.",
4261 "Bell Microproducts Inc.",
4262 "BellSouth Corporation",
4263 "Belo Corp.",
4264 "Bemis Company, Inc.",
4265 "Benchmark Electronics, Inc.",
4266 "Berkshire Hathaway Inc.",
4267 "Best Buy Co., Inc.",
4268 "Bethlehem Steel Corporation",
4269 "Beverly Enterprises, Inc.",
4270 "Big Lots, Inc.",
4271 "BJ Services Company",
4272 "BJ's Wholesale Club, Inc.",
4273 "The Black & Decker Corporation",
4274 "Black Hills Corporation",
4275 "BMC Software, Inc.",
4276 "The Boeing Company",
4277 "Boise Cascade Corporation",
4278 "Borders Group, Inc.",
4279 "BorgWarner Inc.",
4280 "Boston Scientific Corporation",
4281 "Bowater Incorporated",
4282 "Briggs & Stratton Corporation",
4283 "Brightpoint, Inc.",
4284 "Brinker International, Inc.",
4285 "Bristol-Myers Squibb Company",
4286 "Broadwing, Inc.",
4287 "Brown Shoe Company, Inc.",
4288 "Brown-Forman Corporation",
4289 "Brunswick Corporation",
4290 "Budget Group, Inc.",
4291 "Burlington Coat Factory Warehouse Corporation",
4292 "Burlington Industries, Inc.",
4293 "Burlington Northern Santa Fe Corporation",
4294 "Burlington Resources Inc.",
4295 "C. H. Robinson Worldwide Inc.",
4296 "Cablevision Systems Corp",
4297 "Cabot Corp",
4298 "Cadence Design Systems, Inc.",
4299 "Calpine Corp.",
4300 "Campbell Soup Co.",
4301 "Capital One Financial Corp.",
4302 "Cardinal Health Inc.",
4303 "Caremark Rx Inc.",
4304 "Carlisle Cos. Inc.",
4305 "Carpenter Technology Corp.",
4306 "Casey's General Stores Inc.",
4307 "Caterpillar Inc.",
4308 "CBRL Group Inc.",
4309 "CDI Corp.",
4310 "CDW Computer Centers Inc.",
4311 "CellStar Corp.",
4312 "Cendant Corp",
4313 "Cenex Harvest States Cooperatives",
4314 "Centex Corp.",
4315 "CenturyTel Inc.",
4316 "Ceridian Corp.",
4317 "CH2M Hill Cos. Ltd.",
4318 "Champion Enterprises Inc.",
4319 "Charles Schwab Corp.",
4320 "Charming Shoppes Inc.",
4321 "Charter Communications Inc.",
4322 "Charter One Financial Inc.",
4323 "ChevronTexaco Corp.",
4324 "Chiquita Brands International Inc.",
4325 "Chubb Corp",
4326 "Ciena Corp.",
4327 "Cigna Corp",
4328 "Cincinnati Financial Corp.",
4329 "Cinergy Corp.",
4330 "Cintas Corp.",
4331 "Circuit City Stores Inc.",
4332 "Cisco Systems Inc.",
4333 "Citigroup, Inc",
4334 "Citizens Communications Co.",
4335 "CKE Restaurants Inc.",
4336 "Clear Channel Communications Inc.",
4337 "The Clorox Co.",
4338 "CMGI Inc.",
4339 "CMS Energy Corp.",
4340 "CNF Inc.",
4341 "Coca-Cola Co.",
4342 "Coca-Cola Enterprises Inc.",
4343 "Colgate-Palmolive Co.",
4344 "Collins & Aikman Corp.",
4345 "Comcast Corp.",
4346 "Comdisco Inc.",
4347 "Comerica Inc.",
4348 "Comfort Systems USA Inc.",
4349 "Commercial Metals Co.",
4350 "Community Health Systems Inc.",
4351 "Compass Bancshares Inc",
4352 "Computer Associates International Inc.",
4353 "Computer Sciences Corp.",
4354 "Compuware Corp.",
4355 "Comverse Technology Inc.",
4356 "ConAgra Foods Inc.",
4357 "Concord EFS Inc.",
4358 "Conectiv, Inc",
4359 "Conoco Inc",
4360 "Conseco Inc.",
4361 "Consolidated Freightways Corp.",
4362 "Consolidated Edison Inc.",
4363 "Constellation Brands Inc.",
4364 "Constellation Emergy Group Inc.",
4365 "Continental Airlines Inc.",
4366 "Convergys Corp.",
4367 "Cooper Cameron Corp.",
4368 "Cooper Industries Ltd.",
4369 "Cooper Tire & Rubber Co.",
4370 "Corn Products International Inc.",
4371 "Corning Inc.",
4372 "Costco Wholesale Corp.",
4373 "Countrywide Credit Industries Inc.",
4374 "Coventry Health Care Inc.",
4375 "Cox Communications Inc.",
4376 "Crane Co.",
4377 "Crompton Corp.",
4378 "Crown Cork & Seal Co. Inc.",
4379 "CSK Auto Corp.",
4380 "CSX Corp.",
4381 "Cummins Inc.",
4382 "CVS Corp.",
4383 "Cytec Industries Inc.",
4384 "D&K Healthcare Resources, Inc.",
4385 "D.R. Horton Inc.",
4386 "Dana Corporation",
4387 "Danaher Corporation",
4388 "Darden Restaurants Inc.",
4389 "DaVita Inc.",
4390 "Dean Foods Company",
4391 "Deere & Company",
4392 "Del Monte Foods Co",
4393 "Dell Computer Corporation",
4394 "Delphi Corp.",
4395 "Delta Air Lines Inc.",
4396 "Deluxe Corporation",
4397 "Devon Energy Corporation",
4398 "Di Giorgio Corporation",
4399 "Dial Corporation",
4400 "Diebold Incorporated",
4401 "Dillard's Inc.",
4402 "DIMON Incorporated",
4403 "Dole Food Company, Inc.",
4404 "Dollar General Corporation",
4405 "Dollar Tree Stores, Inc.",
4406 "Dominion Resources, Inc.",
4407 "Domino's Pizza LLC",
4408 "Dover Corporation, Inc.",
4409 "Dow Chemical Company",
4410 "Dow Jones & Company, Inc.",
4411 "DPL Inc.",
4412 "DQE Inc.",
4413 "Dreyer's Grand Ice Cream, Inc.",
4414 "DST Systems, Inc.",
4415 "DTE Energy Co.",
4416 "E.I. Du Pont de Nemours and Company",
4417 "Duke Energy Corp",
4418 "Dun & Bradstreet Inc.",
4419 "DURA Automotive Systems Inc.",
4420 "DynCorp",
4421 "Dynegy Inc.",
4422 "E*Trade Group, Inc.",
4423 "E.W. Scripps Company",
4424 "Earthlink, Inc.",
4425 "Eastman Chemical Company",
4426 "Eastman Kodak Company",
4427 "Eaton Corporation",
4428 "Echostar Communications Corporation",
4429 "Ecolab Inc.",
4430 "Edison International",
4431 "EGL Inc.",
4432 "El Paso Corporation",
4433 "Electronic Arts Inc.",
4434 "Electronic Data Systems Corp.",
4435 "Eli Lilly and Company",
4436 "EMC Corporation",
4437 "Emcor Group Inc.",
4438 "Emerson Electric Co.",
4439 "Encompass Services Corporation",
4440 "Energizer Holdings Inc.",
4441 "Energy East Corporation",
4442 "Engelhard Corporation",
4443 "Enron Corp.",
4444 "Entergy Corporation",
4445 "Enterprise Products Partners L.P.",
4446 "EOG Resources, Inc.",
4447 "Equifax Inc.",
4448 "Equitable Resources Inc.",
4449 "Equity Office Properties Trust",
4450 "Equity Residential Properties Trust",
4451 "Estee Lauder Companies Inc.",
4452 "Exelon Corporation",
4453 "Exide Technologies",
4454 "Expeditors International of Washington Inc.",
4455 "Express Scripts Inc.",
4456 "ExxonMobil Corporation",
4457 "Fairchild Semiconductor International Inc.",
4458 "Family Dollar Stores Inc.",
4459 "Farmland Industries Inc.",
4460 "Federal Mogul Corp.",
4461 "Federated Department Stores Inc.",
4462 "Federal Express Corp.",
4463 "Felcor Lodging Trust Inc.",
4464 "Ferro Corp.",
4465 "Fidelity National Financial Inc.",
4466 "Fifth Third Bancorp",
4467 "First American Financial Corp.",
4468 "First Data Corp.",
4469 "First National of Nebraska Inc.",
4470 "First Tennessee National Corp.",
4471 "FirstEnergy Corp.",
4472 "Fiserv Inc.",
4473 "Fisher Scientific International Inc.",
4474 "FleetBoston Financial Co.",
4475 "Fleetwood Enterprises Inc.",
4476 "Fleming Companies Inc.",
4477 "Flowers Foods Inc.",
4478 "Flowserv Corp",
4479 "Fluor Corp",
4480 "FMC Corp",
4481 "Foamex International Inc",
4482 "Foot Locker Inc",
4483 "Footstar Inc.",
4484 "Ford Motor Co",
4485 "Forest Laboratories Inc.",
4486 "Fortune Brands Inc.",
4487 "Foster Wheeler Ltd.",
4488 "FPL Group Inc.",
4489 "Franklin Resources Inc.",
4490 "Freeport McMoran Copper & Gold Inc.",
4491 "Frontier Oil Corp",
4492 "Furniture Brands International Inc.",
4493 "Gannett Co., Inc.",
4494 "Gap Inc.",
4495 "Gateway Inc.",
4496 "GATX Corporation",
4497 "Gemstar-TV Guide International Inc.",
4498 "GenCorp Inc.",
4499 "General Cable Corporation",
4500 "General Dynamics Corporation",
4501 "General Electric Company",
4502 "General Mills Inc",
4503 "General Motors Corporation",
4504 "Genesis Health Ventures Inc.",
4505 "Gentek Inc.",
4506 "Gentiva Health Services Inc.",
4507 "Genuine Parts Company",
4508 "Genuity Inc.",
4509 "Genzyme Corporation",
4510 "Georgia Gulf Corporation",
4511 "Georgia-Pacific Corporation",
4512 "Gillette Company",
4513 "Gold Kist Inc.",
4514 "Golden State Bancorp Inc.",
4515 "Golden West Financial Corporation",
4516 "Goldman Sachs Group Inc.",
4517 "Goodrich Corporation",
4518 "The Goodyear Tire & Rubber Company",
4519 "Granite Construction Incorporated",
4520 "Graybar Electric Company Inc.",
4521 "Great Lakes Chemical Corporation",
4522 "Great Plains Energy Inc.",
4523 "GreenPoint Financial Corp.",
4524 "Greif Bros. Corporation",
4525 "Grey Global Group Inc.",
4526 "Group 1 Automotive Inc.",
4527 "Guidant Corporation",
4528 "H&R Block Inc.",
4529 "H.B. Fuller Company",
4530 "H.J. Heinz Company",
4531 "Halliburton Co.",
4532 "Harley-Davidson Inc.",
4533 "Harman International Industries Inc.",
4534 "Harrah's Entertainment Inc.",
4535 "Harris Corp.",
4536 "Harsco Corp.",
4537 "Hartford Financial Services Group Inc.",
4538 "Hasbro Inc.",
4539 "Hawaiian Electric Industries Inc.",
4540 "HCA Inc.",
4541 "Health Management Associates Inc.",
4542 "Health Net Inc.",
4543 "Healthsouth Corp",
4544 "Henry Schein Inc.",
4545 "Hercules Inc.",
4546 "Herman Miller Inc.",
4547 "Hershey Foods Corp.",
4548 "Hewlett-Packard Company",
4549 "Hibernia Corp.",
4550 "Hillenbrand Industries Inc.",
4551 "Hilton Hotels Corp.",
4552 "Hollywood Entertainment Corp.",
4553 "Home Depot Inc.",
4554 "Hon Industries Inc.",
4555 "Honeywell International Inc.",
4556 "Hormel Foods Corp.",
4557 "Host Marriott Corp.",
4558 "Household International Corp.",
4559 "Hovnanian Enterprises Inc.",
4560 "Hub Group Inc.",
4561 "Hubbell Inc.",
4562 "Hughes Supply Inc.",
4563 "Humana Inc.",
4564 "Huntington Bancshares Inc.",
4565 "Idacorp Inc.",
4566 "IDT Corporation",
4567 "IKON Office Solutions Inc.",
4568 "Illinois Tool Works Inc.",
4569 "IMC Global Inc.",
4570 "Imperial Sugar Company",
4571 "IMS Health Inc.",
4572 "Ingles Market Inc",
4573 "Ingram Micro Inc.",
4574 "Insight Enterprises Inc.",
4575 "Integrated Electrical Services Inc.",
4576 "Intel Corporation",
4577 "International Paper Co.",
4578 "Interpublic Group of Companies Inc.",
4579 "Interstate Bakeries Corporation",
4580 "International Business Machines Corp.",
4581 "International Flavors & Fragrances Inc.",
4582 "International Multifoods Corporation",
4583 "Intuit Inc.",
4584 "IT Group Inc.",
4585 "ITT Industries Inc.",
4586 "Ivax Corp.",
4587 "J.B. Hunt Transport Services Inc.",
4588 "J.C. Penny Co.",
4589 "J.P. Morgan Chase & Co.",
4590 "Jabil Circuit Inc.",
4591 "Jack In The Box Inc.",
4592 "Jacobs Engineering Group Inc.",
4593 "JDS Uniphase Corp.",
4594 "Jefferson-Pilot Co.",
4595 "John Hancock Financial Services Inc.",
4596 "Johnson & Johnson",
4597 "Johnson Controls Inc.",
4598 "Jones Apparel Group Inc.",
4599 "KB Home",
4600 "Kellogg Company",
4601 "Kellwood Company",
4602 "Kelly Services Inc.",
4603 "Kemet Corp.",
4604 "Kennametal Inc.",
4605 "Kerr-McGee Corporation",
4606 "KeyCorp",
4607 "KeySpan Corp.",
4608 "Kimball International Inc.",
4609 "Kimberly-Clark Corporation",
4610 "Kindred Healthcare Inc.",
4611 "KLA-Tencor Corporation",
4612 "K-Mart Corp.",
4613 "Knight-Ridder Inc.",
4614 "Kohl's Corp.",
4615 "KPMG Consulting Inc.",
4616 "Kroger Co.",
4617 "L-3 Communications Holdings Inc.",
4618 "Laboratory Corporation of America Holdings",
4619 "Lam Research Corporation",
4620 "LandAmerica Financial Group Inc.",
4621 "Lands' End Inc.",
4622 "Landstar System Inc.",
4623 "La-Z-Boy Inc.",
4624 "Lear Corporation",
4625 "Legg Mason Inc.",
4626 "Leggett & Platt Inc.",
4627 "Lehman Brothers Holdings Inc.",
4628 "Lennar Corporation",
4629 "Lennox International Inc.",
4630 "Level 3 Communications Inc.",
4631 "Levi Strauss & Co.",
4632 "Lexmark International Inc.",
4633 "Limited Inc.",
4634 "Lincoln National Corporation",
4635 "Linens 'n Things Inc.",
4636 "Lithia Motors Inc.",
4637 "Liz Claiborne Inc.",
4638 "Lockheed Martin Corporation",
4639 "Loews Corporation",
4640 "Longs Drug Stores Corporation",
4641 "Louisiana-Pacific Corporation",
4642 "Lowe's Companies Inc.",
4643 "LSI Logic Corporation",
4644 "The LTV Corporation",
4645 "The Lubrizol Corporation",
4646 "Lucent Technologies Inc.",
4647 "Lyondell Chemical Company",
4648 "M & T Bank Corporation",
4649 "Magellan Health Services Inc.",
4650 "Mail-Well Inc.",
4651 "Mandalay Resort Group",
4652 "Manor Care Inc.",
4653 "Manpower Inc.",
4654 "Marathon Oil Corporation",
4655 "Mariner Health Care Inc.",
4656 "Markel Corporation",
4657 "Marriott International Inc.",
4658 "Marsh & McLennan Companies Inc.",
4659 "Marsh Supermarkets Inc.",
4660 "Marshall & Ilsley Corporation",
4661 "Martin Marietta Materials Inc.",
4662 "Masco Corporation",
4663 "Massey Energy Company",
4664 "MasTec Inc.",
4665 "Mattel Inc.",
4666 "Maxim Integrated Products Inc.",
4667 "Maxtor Corporation",
4668 "Maxxam Inc.",
4669 "The May Department Stores Company",
4670 "Maytag Corporation",
4671 "MBNA Corporation",
4672 "McCormick & Company Incorporated",
4673 "McDonald's Corporation",
4674 "The McGraw-Hill Companies Inc.",
4675 "McKesson Corporation",
4676 "McLeodUSA Incorporated",
4677 "M.D.C. Holdings Inc.",
4678 "MDU Resources Group Inc.",
4679 "MeadWestvaco Corporation",
4680 "Medtronic Inc.",
4681 "Mellon Financial Corporation",
4682 "The Men's Wearhouse Inc.",
4683 "Merck & Co., Inc.",
4684 "Mercury General Corporation",
4685 "Merrill Lynch & Co. Inc.",
4686 "Metaldyne Corporation",
4687 "Metals USA Inc.",
4688 "MetLife Inc.",
4689 "Metris Companies Inc",
4690 "MGIC Investment Corporation",
4691 "MGM Mirage",
4692 "Michaels Stores Inc.",
4693 "Micron Technology Inc.",
4694 "Microsoft Corporation",
4695 "Milacron Inc.",
4696 "Millennium Chemicals Inc.",
4697 "Mirant Corporation",
4698 "Mohawk Industries Inc.",
4699 "Molex Incorporated",
4700 "The MONY Group Inc.",
4701 "Morgan Stanley Dean Witter & Co.",
4702 "Motorola Inc.",
4703 "MPS Group Inc.",
4704 "Murphy Oil Corporation",
4705 "Nabors Industries Inc",
4706 "Nacco Industries Inc",
4707 "Nash Finch Company",
4708 "National City Corp.",
4709 "National Commerce Financial Corporation",
4710 "National Fuel Gas Company",
4711 "National Oilwell Inc",
4712 "National Rural Utilities Cooperative Finance Corporation",
4713 "National Semiconductor Corporation",
4714 "National Service Industries Inc",
4715 "Navistar International Corporation",
4716 "NCR Corporation",
4717 "The Neiman Marcus Group Inc.",
4718 "New Jersey Resources Corporation",
4719 "New York Times Company",
4720 "Newell Rubbermaid Inc",
4721 "Newmont Mining Corporation",
4722 "Nextel Communications Inc",
4723 "Nicor Inc",
4724 "Nike Inc",
4725 "NiSource Inc",
4726 "Noble Energy Inc",
4727 "Nordstrom Inc",
4728 "Norfolk Southern Corporation",
4729 "Nortek Inc",
4730 "North Fork Bancorporation Inc",
4731 "Northeast Utilities System",
4732 "Northern Trust Corporation",
4733 "Northrop Grumman Corporation",
4734 "NorthWestern Corporation",
4735 "Novellus Systems Inc",
4736 "NSTAR",
4737 "NTL Incorporated",
4738 "Nucor Corp",
4739 "Nvidia Corp",
4740 "NVR Inc",
4741 "Northwest Airlines Corp",
4742 "Occidental Petroleum Corp",
4743 "Ocean Energy Inc",
4744 "Office Depot Inc.",
4745 "OfficeMax Inc",
4746 "OGE Energy Corp",
4747 "Oglethorpe Power Corp.",
4748 "Ohio Casualty Corp.",
4749 "Old Republic International Corp.",
4750 "Olin Corp.",
4751 "OM Group Inc",
4752 "Omnicare Inc",
4753 "Omnicom Group",
4754 "On Semiconductor Corp",
4755 "ONEOK Inc",
4756 "Oracle Corp",
4757 "Oshkosh Truck Corp",
4758 "Outback Steakhouse Inc.",
4759 "Owens & Minor Inc.",
4760 "Owens Corning",
4761 "Owens-Illinois Inc",
4762 "Oxford Health Plans Inc",
4763 "Paccar Inc",
4764 "PacifiCare Health Systems Inc",
4765 "Packaging Corp. of America",
4766 "Pactiv Corp",
4767 "Pall Corp",
4768 "Pantry Inc",
4769 "Park Place Entertainment Corp",
4770 "Parker Hannifin Corp.",
4771 "Pathmark Stores Inc.",
4772 "Paychex Inc",
4773 "Payless Shoesource Inc",
4774 "Penn Traffic Co.",
4775 "Pennzoil-Quaker State Company",
4776 "Pentair Inc",
4777 "Peoples Energy Corp.",
4778 "PeopleSoft Inc",
4779 "Pep Boys Manny, Moe & Jack",
4780 "Potomac Electric Power Co.",
4781 "Pepsi Bottling Group Inc.",
4782 "PepsiAmericas Inc.",
4783 "PepsiCo Inc.",
4784 "Performance Food Group Co.",
4785 "Perini Corp",
4786 "PerkinElmer Inc",
4787 "Perot Systems Corp",
4788 "Petco Animal Supplies Inc.",
4789 "Peter Kiewit Sons', Inc.",
4790 "PETsMART Inc",
4791 "Pfizer Inc",
4792 "Pacific Gas & Electric Corp.",
4793 "Pharmacia Corp",
4794 "Phar Mor Inc.",
4795 "Phelps Dodge Corp.",
4796 "Philip Morris Companies Inc.",
4797 "Phillips Petroleum Co",
4798 "Phillips Van Heusen Corp.",
4799 "Phoenix Companies Inc",
4800 "Pier 1 Imports Inc.",
4801 "Pilgrim's Pride Corporation",
4802 "Pinnacle West Capital Corp",
4803 "Pioneer-Standard Electronics Inc.",
4804 "Pitney Bowes Inc.",
4805 "Pittston Brinks Group",
4806 "Plains All American Pipeline LP",
4807 "PNC Financial Services Group Inc.",
4808 "PNM Resources Inc",
4809 "Polaris Industries Inc.",
4810 "Polo Ralph Lauren Corp",
4811 "PolyOne Corp",
4812 "Popular Inc",
4813 "Potlatch Corp",
4814 "PPG Industries Inc",
4815 "PPL Corp",
4816 "Praxair Inc",
4817 "Precision Castparts Corp",
4818 "Premcor Inc.",
4819 "Pride International Inc",
4820 "Primedia Inc",
4821 "Principal Financial Group Inc.",
4822 "Procter & Gamble Co.",
4823 "Pro-Fac Cooperative Inc.",
4824 "Progress Energy Inc",
4825 "Progressive Corporation",
4826 "Protective Life Corp",
4827 "Provident Financial Group",
4828 "Providian Financial Corp.",
4829 "Prudential Financial Inc.",
4830 "PSS World Medical Inc",
4831 "Public Service Enterprise Group Inc.",
4832 "Publix Super Markets Inc.",
4833 "Puget Energy Inc.",
4834 "Pulte Homes Inc",
4835 "Qualcomm Inc",
4836 "Quanta Services Inc.",
4837 "Quantum Corp",
4838 "Quest Diagnostics Inc.",
4839 "Questar Corp",
4840 "Quintiles Transnational",
4841 "Qwest Communications Intl Inc",
4842 "R.J. Reynolds Tobacco Company",
4843 "R.R. Donnelley & Sons Company",
4844 "Radio Shack Corporation",
4845 "Raymond James Financial Inc.",
4846 "Raytheon Company",
4847 "Reader's Digest Association Inc.",
4848 "Reebok International Ltd.",
4849 "Regions Financial Corp.",
4850 "Regis Corporation",
4851 "Reliance Steel & Aluminum Co.",
4852 "Reliant Energy Inc.",
4853 "Rent A Center Inc",
4854 "Republic Services Inc",
4855 "Revlon Inc",
4856 "RGS Energy Group Inc",
4857 "Rite Aid Corp",
4858 "Riverwood Holding Inc.",
4859 "RoadwayCorp",
4860 "Robert Half International Inc.",
4861 "Rock-Tenn Co",
4862 "Rockwell Automation Inc",
4863 "Rockwell Collins Inc",
4864 "Rohm & Haas Co.",
4865 "Ross Stores Inc",
4866 "RPM Inc.",
4867 "Ruddick Corp",
4868 "Ryder System Inc",
4869 "Ryerson Tull Inc",
4870 "Ryland Group Inc.",
4871 "Sabre Holdings Corp",
4872 "Safeco Corp",
4873 "Safeguard Scientifics Inc.",
4874 "Safeway Inc",
4875 "Saks Inc",
4876 "Sanmina-SCI Inc",
4877 "Sara Lee Corp",
4878 "SBC Communications Inc",
4879 "Scana Corp.",
4880 "Schering-Plough Corp",
4881 "Scholastic Corp",
4882 "SCI Systems Onc.",
4883 "Science Applications Intl. Inc.",
4884 "Scientific-Atlanta Inc",
4885 "Scotts Company",
4886 "Seaboard Corp",
4887 "Sealed Air Corp",
4888 "Sears Roebuck & Co",
4889 "Sempra Energy",
4890 "Sequa Corp",
4891 "Service Corp. International",
4892 "ServiceMaster Co",
4893 "Shaw Group Inc",
4894 "Sherwin-Williams Company",
4895 "Shopko Stores Inc",
4896 "Siebel Systems Inc",
4897 "Sierra Health Services Inc",
4898 "Sierra Pacific Resources",
4899 "Silgan Holdings Inc.",
4900 "Silicon Graphics Inc",
4901 "Simon Property Group Inc",
4902 "SLM Corporation",
4903 "Smith International Inc",
4904 "Smithfield Foods Inc",
4905 "Smurfit-Stone Container Corp",
4906 "Snap-On Inc",
4907 "Solectron Corp",
4908 "Solutia Inc",
4909 "Sonic Automotive Inc.",
4910 "Sonoco Products Co.",
4911 "Southern Company",
4912 "Southern Union Company",
4913 "SouthTrust Corp.",
4914 "Southwest Airlines Co",
4915 "Southwest Gas Corp",
4916 "Sovereign Bancorp Inc.",
4917 "Spartan Stores Inc",
4918 "Spherion Corp",
4919 "Sports Authority Inc",
4920 "Sprint Corp.",
4921 "SPX Corp",
4922 "St. Jude Medical Inc",
4923 "St. Paul Cos.",
4924 "Staff Leasing Inc.",
4925 "StanCorp Financial Group Inc",
4926 "Standard Pacific Corp.",
4927 "Stanley Works",
4928 "Staples Inc",
4929 "Starbucks Corp",
4930 "Starwood Hotels & Resorts Worldwide Inc",
4931 "State Street Corp.",
4932 "Stater Bros. Holdings Inc.",
4933 "Steelcase Inc",
4934 "Stein Mart Inc",
4935 "Stewart & Stevenson Services Inc",
4936 "Stewart Information Services Corp",
4937 "Stilwell Financial Inc",
4938 "Storage Technology Corporation",
4939 "Stryker Corp",
4940 "Sun Healthcare Group Inc.",
4941 "Sun Microsystems Inc.",
4942 "SunGard Data Systems Inc.",
4943 "Sunoco Inc.",
4944 "SunTrust Banks Inc",
4945 "Supervalu Inc",
4946 "Swift Transportation, Co., Inc",
4947 "Symbol Technologies Inc",
4948 "Synovus Financial Corp.",
4949 "Sysco Corp",
4950 "Systemax Inc.",
4951 "Target Corp.",
4952 "Tech Data Corporation",
4953 "TECO Energy Inc",
4954 "Tecumseh Products Company",
4955 "Tektronix Inc",
4956 "Teleflex Incorporated",
4957 "Telephone & Data Systems Inc",
4958 "Tellabs Inc.",
4959 "Temple-Inland Inc",
4960 "Tenet Healthcare Corporation",
4961 "Tenneco Automotive Inc.",
4962 "Teradyne Inc",
4963 "Terex Corp",
4964 "Tesoro Petroleum Corp.",
4965 "Texas Industries Inc.",
4966 "Texas Instruments Incorporated",
4967 "Textron Inc",
4968 "Thermo Electron Corporation",
4969 "Thomas & Betts Corporation",
4970 "Tiffany & Co",
4971 "Timken Company",
4972 "TJX Companies Inc",
4973 "TMP Worldwide Inc",
4974 "Toll Brothers Inc",
4975 "Torchmark Corporation",
4976 "Toro Company",
4977 "Tower Automotive Inc.",
4978 "Toys 'R' Us Inc",
4979 "Trans World Entertainment Corp.",
4980 "TransMontaigne Inc",
4981 "Transocean Inc",
4982 "TravelCenters of America Inc.",
4983 "Triad Hospitals Inc",
4984 "Tribune Company",
4985 "Trigon Healthcare Inc.",
4986 "Trinity Industries Inc",
4987 "Trump Hotels & Casino Resorts Inc.",
4988 "TruServ Corporation",
4989 "TRW Inc",
4990 "TXU Corp",
4991 "Tyson Foods Inc",
4992 "U.S. Bancorp",
4993 "U.S. Industries Inc.",
4994 "UAL Corporation",
4995 "UGI Corporation",
4996 "Unified Western Grocers Inc",
4997 "Union Pacific Corporation",
4998 "Union Planters Corp",
4999 "Unisource Energy Corp",
5000 "Unisys Corporation",
5001 "United Auto Group Inc",
5002 "United Defense Industries Inc.",
5003 "United Parcel Service Inc",
5004 "United Rentals Inc",
5005 "United Stationers Inc",
5006 "United Technologies Corporation",
5007 "UnitedHealth Group Incorporated",
5008 "Unitrin Inc",
5009 "Universal Corporation",
5010 "Universal Forest Products Inc",
5011 "Universal Health Services Inc",
5012 "Unocal Corporation",
5013 "Unova Inc",
5014 "UnumProvident Corporation",
5015 "URS Corporation",
5016 "US Airways Group Inc",
5017 "US Oncology Inc",
5018 "USA Interactive",
5019 "USFreighways Corporation",
5020 "USG Corporation",
5021 "UST Inc",
5022 "Valero Energy Corporation",
5023 "Valspar Corporation",
5024 "Value City Department Stores Inc",
5025 "Varco International Inc",
5026 "Vectren Corporation",
5027 "Veritas Software Corporation",
5028 "Verizon Communications Inc",
5029 "VF Corporation",
5030 "Viacom Inc",
5031 "Viad Corp",
5032 "Viasystems Group Inc",
5033 "Vishay Intertechnology Inc",
5034 "Visteon Corporation",
5035 "Volt Information Sciences Inc",
5036 "Vulcan Materials Company",
5037 "W.R. Berkley Corporation",
5038 "W.R. Grace & Co",
5039 "W.W. Grainger Inc",
5040 "Wachovia Corporation",
5041 "Wakenhut Corporation",
5042 "Walgreen Co",
5043 "Wallace Computer Services Inc",
5044 "Wal-Mart Stores Inc",
5045 "Walt Disney Co",
5046 "Walter Industries Inc",
5047 "Washington Mutual Inc",
5048 "Washington Post Co.",
5049 "Waste Management Inc",
5050 "Watsco Inc",
5051 "Weatherford International Inc",
5052 "Weis Markets Inc.",
5053 "Wellpoint Health Networks Inc",
5054 "Wells Fargo & Company",
5055 "Wendy's International Inc",
5056 "Werner Enterprises Inc",
5057 "WESCO International Inc",
5058 "Western Digital Inc",
5059 "Western Gas Resources Inc",
5060 "WestPoint Stevens Inc",
5061 "Weyerhauser Company",
5062 "WGL Holdings Inc",
5063 "Whirlpool Corporation",
5064 "Whole Foods Market Inc",
5065 "Willamette Industries Inc.",
5066 "Williams Companies Inc",
5067 "Williams Sonoma Inc",
5068 "Winn Dixie Stores Inc",
5069 "Wisconsin Energy Corporation",
5070 "Wm Wrigley Jr Company",
5071 "World Fuel Services Corporation",
5072 "WorldCom Inc",
5073 "Worthington Industries Inc",
5074 "WPS Resources Corporation",
5075 "Wyeth",
5076 "Wyndham International Inc",
5077 "Xcel Energy Inc",
5078 "Xerox Corp",
5079 "Xilinx Inc",
5080 "XO Communications Inc",
5081 "Yellow Corporation",
5082 "York International Corp",
5083 "Yum Brands Inc.",
5084 "Zale Corporation",
5085 "Zions Bancorporation"
5086 ],
5087
5088 fileExtension : {
5089 "raster" : ["bmp", "gif", "gpl", "ico", "jpeg", "psd", "png", "psp", "raw", "tiff"],
5090 "vector" : ["3dv", "amf", "awg", "ai", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "odg", "svg", "xar"],
5091 "3d" : ["3dmf", "3dm", "3mf", "3ds", "an8", "aoi", "blend", "cal3d", "cob", "ctm", "iob", "jas", "max", "mb", "mdx", "obj", "x", "x3d"],
5092 "document" : ["doc", "docx", "dot", "html", "xml", "odt", "odm", "ott", "csv", "rtf", "tex", "xhtml", "xps"]
5093 },
5094
5095 // Data taken from https://github.com/dmfilipenko/timezones.json/blob/master/timezones.json
5096 timezones: [
5097 {
5098 "name": "Dateline Standard Time",
5099 "abbr": "DST",
5100 "offset": -12,
5101 "isdst": false,
5102 "text": "(UTC-12:00) International Date Line West",
5103 "utc": [
5104 "Etc/GMT+12"
5105 ]
5106 },
5107 {
5108 "name": "UTC-11",
5109 "abbr": "U",
5110 "offset": -11,
5111 "isdst": false,
5112 "text": "(UTC-11:00) Coordinated Universal Time-11",
5113 "utc": [
5114 "Etc/GMT+11",
5115 "Pacific/Midway",
5116 "Pacific/Niue",
5117 "Pacific/Pago_Pago"
5118 ]
5119 },
5120 {
5121 "name": "Hawaiian Standard Time",
5122 "abbr": "HST",
5123 "offset": -10,
5124 "isdst": false,
5125 "text": "(UTC-10:00) Hawaii",
5126 "utc": [
5127 "Etc/GMT+10",
5128 "Pacific/Honolulu",
5129 "Pacific/Johnston",
5130 "Pacific/Rarotonga",
5131 "Pacific/Tahiti"
5132 ]
5133 },
5134 {
5135 "name": "Alaskan Standard Time",
5136 "abbr": "AKDT",
5137 "offset": -8,
5138 "isdst": true,
5139 "text": "(UTC-09:00) Alaska",
5140 "utc": [
5141 "America/Anchorage",
5142 "America/Juneau",
5143 "America/Nome",
5144 "America/Sitka",
5145 "America/Yakutat"
5146 ]
5147 },
5148 {
5149 "name": "Pacific Standard Time (Mexico)",
5150 "abbr": "PDT",
5151 "offset": -7,
5152 "isdst": true,
5153 "text": "(UTC-08:00) Baja California",
5154 "utc": [
5155 "America/Santa_Isabel"
5156 ]
5157 },
5158 {
5159 "name": "Pacific Standard Time",
5160 "abbr": "PDT",
5161 "offset": -7,
5162 "isdst": true,
5163 "text": "(UTC-08:00) Pacific Time (US & Canada)",
5164 "utc": [
5165 "America/Dawson",
5166 "America/Los_Angeles",
5167 "America/Tijuana",
5168 "America/Vancouver",
5169 "America/Whitehorse",
5170 "PST8PDT"
5171 ]
5172 },
5173 {
5174 "name": "US Mountain Standard Time",
5175 "abbr": "UMST",
5176 "offset": -7,
5177 "isdst": false,
5178 "text": "(UTC-07:00) Arizona",
5179 "utc": [
5180 "America/Creston",
5181 "America/Dawson_Creek",
5182 "America/Hermosillo",
5183 "America/Phoenix",
5184 "Etc/GMT+7"
5185 ]
5186 },
5187 {
5188 "name": "Mountain Standard Time (Mexico)",
5189 "abbr": "MDT",
5190 "offset": -6,
5191 "isdst": true,
5192 "text": "(UTC-07:00) Chihuahua, La Paz, Mazatlan",
5193 "utc": [
5194 "America/Chihuahua",
5195 "America/Mazatlan"
5196 ]
5197 },
5198 {
5199 "name": "Mountain Standard Time",
5200 "abbr": "MDT",
5201 "offset": -6,
5202 "isdst": true,
5203 "text": "(UTC-07:00) Mountain Time (US & Canada)",
5204 "utc": [
5205 "America/Boise",
5206 "America/Cambridge_Bay",
5207 "America/Denver",
5208 "America/Edmonton",
5209 "America/Inuvik",
5210 "America/Ojinaga",
5211 "America/Yellowknife",
5212 "MST7MDT"
5213 ]
5214 },
5215 {
5216 "name": "Central America Standard Time",
5217 "abbr": "CAST",
5218 "offset": -6,
5219 "isdst": false,
5220 "text": "(UTC-06:00) Central America",
5221 "utc": [
5222 "America/Belize",
5223 "America/Costa_Rica",
5224 "America/El_Salvador",
5225 "America/Guatemala",
5226 "America/Managua",
5227 "America/Tegucigalpa",
5228 "Etc/GMT+6",
5229 "Pacific/Galapagos"
5230 ]
5231 },
5232 {
5233 "name": "Central Standard Time",
5234 "abbr": "CDT",
5235 "offset": -5,
5236 "isdst": true,
5237 "text": "(UTC-06:00) Central Time (US & Canada)",
5238 "utc": [
5239 "America/Chicago",
5240 "America/Indiana/Knox",
5241 "America/Indiana/Tell_City",
5242 "America/Matamoros",
5243 "America/Menominee",
5244 "America/North_Dakota/Beulah",
5245 "America/North_Dakota/Center",
5246 "America/North_Dakota/New_Salem",
5247 "America/Rainy_River",
5248 "America/Rankin_Inlet",
5249 "America/Resolute",
5250 "America/Winnipeg",
5251 "CST6CDT"
5252 ]
5253 },
5254 {
5255 "name": "Central Standard Time (Mexico)",
5256 "abbr": "CDT",
5257 "offset": -5,
5258 "isdst": true,
5259 "text": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
5260 "utc": [
5261 "America/Bahia_Banderas",
5262 "America/Cancun",
5263 "America/Merida",
5264 "America/Mexico_City",
5265 "America/Monterrey"
5266 ]
5267 },
5268 {
5269 "name": "Canada Central Standard Time",
5270 "abbr": "CCST",
5271 "offset": -6,
5272 "isdst": false,
5273 "text": "(UTC-06:00) Saskatchewan",
5274 "utc": [
5275 "America/Regina",
5276 "America/Swift_Current"
5277 ]
5278 },
5279 {
5280 "name": "SA Pacific Standard Time",
5281 "abbr": "SPST",
5282 "offset": -5,
5283 "isdst": false,
5284 "text": "(UTC-05:00) Bogota, Lima, Quito",
5285 "utc": [
5286 "America/Bogota",
5287 "America/Cayman",
5288 "America/Coral_Harbour",
5289 "America/Eirunepe",
5290 "America/Guayaquil",
5291 "America/Jamaica",
5292 "America/Lima",
5293 "America/Panama",
5294 "America/Rio_Branco",
5295 "Etc/GMT+5"
5296 ]
5297 },
5298 {
5299 "name": "Eastern Standard Time",
5300 "abbr": "EDT",
5301 "offset": -4,
5302 "isdst": true,
5303 "text": "(UTC-05:00) Eastern Time (US & Canada)",
5304 "utc": [
5305 "America/Detroit",
5306 "America/Havana",
5307 "America/Indiana/Petersburg",
5308 "America/Indiana/Vincennes",
5309 "America/Indiana/Winamac",
5310 "America/Iqaluit",
5311 "America/Kentucky/Monticello",
5312 "America/Louisville",
5313 "America/Montreal",
5314 "America/Nassau",
5315 "America/New_York",
5316 "America/Nipigon",
5317 "America/Pangnirtung",
5318 "America/Port-au-Prince",
5319 "America/Thunder_Bay",
5320 "America/Toronto",
5321 "EST5EDT"
5322 ]
5323 },
5324 {
5325 "name": "US Eastern Standard Time",
5326 "abbr": "UEDT",
5327 "offset": -4,
5328 "isdst": true,
5329 "text": "(UTC-05:00) Indiana (East)",
5330 "utc": [
5331 "America/Indiana/Marengo",
5332 "America/Indiana/Vevay",
5333 "America/Indianapolis"
5334 ]
5335 },
5336 {
5337 "name": "Venezuela Standard Time",
5338 "abbr": "VST",
5339 "offset": -4.5,
5340 "isdst": false,
5341 "text": "(UTC-04:30) Caracas",
5342 "utc": [
5343 "America/Caracas"
5344 ]
5345 },
5346 {
5347 "name": "Paraguay Standard Time",
5348 "abbr": "PST",
5349 "offset": -4,
5350 "isdst": false,
5351 "text": "(UTC-04:00) Asuncion",
5352 "utc": [
5353 "America/Asuncion"
5354 ]
5355 },
5356 {
5357 "name": "Atlantic Standard Time",
5358 "abbr": "ADT",
5359 "offset": -3,
5360 "isdst": true,
5361 "text": "(UTC-04:00) Atlantic Time (Canada)",
5362 "utc": [
5363 "America/Glace_Bay",
5364 "America/Goose_Bay",
5365 "America/Halifax",
5366 "America/Moncton",
5367 "America/Thule",
5368 "Atlantic/Bermuda"
5369 ]
5370 },
5371 {
5372 "name": "Central Brazilian Standard Time",
5373 "abbr": "CBST",
5374 "offset": -4,
5375 "isdst": false,
5376 "text": "(UTC-04:00) Cuiaba",
5377 "utc": [
5378 "America/Campo_Grande",
5379 "America/Cuiaba"
5380 ]
5381 },
5382 {
5383 "name": "SA Western Standard Time",
5384 "abbr": "SWST",
5385 "offset": -4,
5386 "isdst": false,
5387 "text": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
5388 "utc": [
5389 "America/Anguilla",
5390 "America/Antigua",
5391 "America/Aruba",
5392 "America/Barbados",
5393 "America/Blanc-Sablon",
5394 "America/Boa_Vista",
5395 "America/Curacao",
5396 "America/Dominica",
5397 "America/Grand_Turk",
5398 "America/Grenada",
5399 "America/Guadeloupe",
5400 "America/Guyana",
5401 "America/Kralendijk",
5402 "America/La_Paz",
5403 "America/Lower_Princes",
5404 "America/Manaus",
5405 "America/Marigot",
5406 "America/Martinique",
5407 "America/Montserrat",
5408 "America/Port_of_Spain",
5409 "America/Porto_Velho",
5410 "America/Puerto_Rico",
5411 "America/Santo_Domingo",
5412 "America/St_Barthelemy",
5413 "America/St_Kitts",
5414 "America/St_Lucia",
5415 "America/St_Thomas",
5416 "America/St_Vincent",
5417 "America/Tortola",
5418 "Etc/GMT+4"
5419 ]
5420 },
5421 {
5422 "name": "Pacific SA Standard Time",
5423 "abbr": "PSST",
5424 "offset": -4,
5425 "isdst": false,
5426 "text": "(UTC-04:00) Santiago",
5427 "utc": [
5428 "America/Santiago",
5429 "Antarctica/Palmer"
5430 ]
5431 },
5432 {
5433 "name": "Newfoundland Standard Time",
5434 "abbr": "NDT",
5435 "offset": -2.5,
5436 "isdst": true,
5437 "text": "(UTC-03:30) Newfoundland",
5438 "utc": [
5439 "America/St_Johns"
5440 ]
5441 },
5442 {
5443 "name": "E. South America Standard Time",
5444 "abbr": "ESAST",
5445 "offset": -3,
5446 "isdst": false,
5447 "text": "(UTC-03:00) Brasilia",
5448 "utc": [
5449 "America/Sao_Paulo"
5450 ]
5451 },
5452 {
5453 "name": "Argentina Standard Time",
5454 "abbr": "AST",
5455 "offset": -3,
5456 "isdst": false,
5457 "text": "(UTC-03:00) Buenos Aires",
5458 "utc": [
5459 "America/Argentina/La_Rioja",
5460 "America/Argentina/Rio_Gallegos",
5461 "America/Argentina/Salta",
5462 "America/Argentina/San_Juan",
5463 "America/Argentina/San_Luis",
5464 "America/Argentina/Tucuman",
5465 "America/Argentina/Ushuaia",
5466 "America/Buenos_Aires",
5467 "America/Catamarca",
5468 "America/Cordoba",
5469 "America/Jujuy",
5470 "America/Mendoza"
5471 ]
5472 },
5473 {
5474 "name": "SA Eastern Standard Time",
5475 "abbr": "SEST",
5476 "offset": -3,
5477 "isdst": false,
5478 "text": "(UTC-03:00) Cayenne, Fortaleza",
5479 "utc": [
5480 "America/Araguaina",
5481 "America/Belem",
5482 "America/Cayenne",
5483 "America/Fortaleza",
5484 "America/Maceio",
5485 "America/Paramaribo",
5486 "America/Recife",
5487 "America/Santarem",
5488 "Antarctica/Rothera",
5489 "Atlantic/Stanley",
5490 "Etc/GMT+3"
5491 ]
5492 },
5493 {
5494 "name": "Greenland Standard Time",
5495 "abbr": "GDT",
5496 "offset": -2,
5497 "isdst": true,
5498 "text": "(UTC-03:00) Greenland",
5499 "utc": [
5500 "America/Godthab"
5501 ]
5502 },
5503 {
5504 "name": "Montevideo Standard Time",
5505 "abbr": "MST",
5506 "offset": -3,
5507 "isdst": false,
5508 "text": "(UTC-03:00) Montevideo",
5509 "utc": [
5510 "America/Montevideo"
5511 ]
5512 },
5513 {
5514 "name": "Bahia Standard Time",
5515 "abbr": "BST",
5516 "offset": -3,
5517 "isdst": false,
5518 "text": "(UTC-03:00) Salvador",
5519 "utc": [
5520 "America/Bahia"
5521 ]
5522 },
5523 {
5524 "name": "UTC-02",
5525 "abbr": "U",
5526 "offset": -2,
5527 "isdst": false,
5528 "text": "(UTC-02:00) Coordinated Universal Time-02",
5529 "utc": [
5530 "America/Noronha",
5531 "Atlantic/South_Georgia",
5532 "Etc/GMT+2"
5533 ]
5534 },
5535 {
5536 "name": "Mid-Atlantic Standard Time",
5537 "abbr": "MDT",
5538 "offset": -1,
5539 "isdst": true,
5540 "text": "(UTC-02:00) Mid-Atlantic - Old"
5541 },
5542 {
5543 "name": "Azores Standard Time",
5544 "abbr": "ADT",
5545 "offset": 0,
5546 "isdst": true,
5547 "text": "(UTC-01:00) Azores",
5548 "utc": [
5549 "America/Scoresbysund",
5550 "Atlantic/Azores"
5551 ]
5552 },
5553 {
5554 "name": "Cape Verde Standard Time",
5555 "abbr": "CVST",
5556 "offset": -1,
5557 "isdst": false,
5558 "text": "(UTC-01:00) Cape Verde Is.",
5559 "utc": [
5560 "Atlantic/Cape_Verde",
5561 "Etc/GMT+1"
5562 ]
5563 },
5564 {
5565 "name": "Morocco Standard Time",
5566 "abbr": "MDT",
5567 "offset": 1,
5568 "isdst": true,
5569 "text": "(UTC) Casablanca",
5570 "utc": [
5571 "Africa/Casablanca",
5572 "Africa/El_Aaiun"
5573 ]
5574 },
5575 {
5576 "name": "UTC",
5577 "abbr": "CUT",
5578 "offset": 0,
5579 "isdst": false,
5580 "text": "(UTC) Coordinated Universal Time",
5581 "utc": [
5582 "America/Danmarkshavn",
5583 "Etc/GMT"
5584 ]
5585 },
5586 {
5587 "name": "GMT Standard Time",
5588 "abbr": "GDT",
5589 "offset": 1,
5590 "isdst": true,
5591 "text": "(UTC) Dublin, Edinburgh, Lisbon, London",
5592 "utc": [
5593 "Atlantic/Canary",
5594 "Atlantic/Faeroe",
5595 "Atlantic/Madeira",
5596 "Europe/Dublin",
5597 "Europe/Guernsey",
5598 "Europe/Isle_of_Man",
5599 "Europe/Jersey",
5600 "Europe/Lisbon",
5601 "Europe/London"
5602 ]
5603 },
5604 {
5605 "name": "Greenwich Standard Time",
5606 "abbr": "GST",
5607 "offset": 0,
5608 "isdst": false,
5609 "text": "(UTC) Monrovia, Reykjavik",
5610 "utc": [
5611 "Africa/Abidjan",
5612 "Africa/Accra",
5613 "Africa/Bamako",
5614 "Africa/Banjul",
5615 "Africa/Bissau",
5616 "Africa/Conakry",
5617 "Africa/Dakar",
5618 "Africa/Freetown",
5619 "Africa/Lome",
5620 "Africa/Monrovia",
5621 "Africa/Nouakchott",
5622 "Africa/Ouagadougou",
5623 "Africa/Sao_Tome",
5624 "Atlantic/Reykjavik",
5625 "Atlantic/St_Helena"
5626 ]
5627 },
5628 {
5629 "name": "W. Europe Standard Time",
5630 "abbr": "WEDT",
5631 "offset": 2,
5632 "isdst": true,
5633 "text": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
5634 "utc": [
5635 "Arctic/Longyearbyen",
5636 "Europe/Amsterdam",
5637 "Europe/Andorra",
5638 "Europe/Berlin",
5639 "Europe/Busingen",
5640 "Europe/Gibraltar",
5641 "Europe/Luxembourg",
5642 "Europe/Malta",
5643 "Europe/Monaco",
5644 "Europe/Oslo",
5645 "Europe/Rome",
5646 "Europe/San_Marino",
5647 "Europe/Stockholm",
5648 "Europe/Vaduz",
5649 "Europe/Vatican",
5650 "Europe/Vienna",
5651 "Europe/Zurich"
5652 ]
5653 },
5654 {
5655 "name": "Central Europe Standard Time",
5656 "abbr": "CEDT",
5657 "offset": 2,
5658 "isdst": true,
5659 "text": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
5660 "utc": [
5661 "Europe/Belgrade",
5662 "Europe/Bratislava",
5663 "Europe/Budapest",
5664 "Europe/Ljubljana",
5665 "Europe/Podgorica",
5666 "Europe/Prague",
5667 "Europe/Tirane"
5668 ]
5669 },
5670 {
5671 "name": "Romance Standard Time",
5672 "abbr": "RDT",
5673 "offset": 2,
5674 "isdst": true,
5675 "text": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
5676 "utc": [
5677 "Africa/Ceuta",
5678 "Europe/Brussels",
5679 "Europe/Copenhagen",
5680 "Europe/Madrid",
5681 "Europe/Paris"
5682 ]
5683 },
5684 {
5685 "name": "Central European Standard Time",
5686 "abbr": "CEDT",
5687 "offset": 2,
5688 "isdst": true,
5689 "text": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
5690 "utc": [
5691 "Europe/Sarajevo",
5692 "Europe/Skopje",
5693 "Europe/Warsaw",
5694 "Europe/Zagreb"
5695 ]
5696 },
5697 {
5698 "name": "W. Central Africa Standard Time",
5699 "abbr": "WCAST",
5700 "offset": 1,
5701 "isdst": false,
5702 "text": "(UTC+01:00) West Central Africa",
5703 "utc": [
5704 "Africa/Algiers",
5705 "Africa/Bangui",
5706 "Africa/Brazzaville",
5707 "Africa/Douala",
5708 "Africa/Kinshasa",
5709 "Africa/Lagos",
5710 "Africa/Libreville",
5711 "Africa/Luanda",
5712 "Africa/Malabo",
5713 "Africa/Ndjamena",
5714 "Africa/Niamey",
5715 "Africa/Porto-Novo",
5716 "Africa/Tunis",
5717 "Etc/GMT-1"
5718 ]
5719 },
5720 {
5721 "name": "Namibia Standard Time",
5722 "abbr": "NST",
5723 "offset": 1,
5724 "isdst": false,
5725 "text": "(UTC+01:00) Windhoek",
5726 "utc": [
5727 "Africa/Windhoek"
5728 ]
5729 },
5730 {
5731 "name": "GTB Standard Time",
5732 "abbr": "GDT",
5733 "offset": 3,
5734 "isdst": true,
5735 "text": "(UTC+02:00) Athens, Bucharest",
5736 "utc": [
5737 "Asia/Nicosia",
5738 "Europe/Athens",
5739 "Europe/Bucharest",
5740 "Europe/Chisinau"
5741 ]
5742 },
5743 {
5744 "name": "Middle East Standard Time",
5745 "abbr": "MEDT",
5746 "offset": 3,
5747 "isdst": true,
5748 "text": "(UTC+02:00) Beirut",
5749 "utc": [
5750 "Asia/Beirut"
5751 ]
5752 },
5753 {
5754 "name": "Egypt Standard Time",
5755 "abbr": "EST",
5756 "offset": 2,
5757 "isdst": false,
5758 "text": "(UTC+02:00) Cairo",
5759 "utc": [
5760 "Africa/Cairo"
5761 ]
5762 },
5763 {
5764 "name": "Syria Standard Time",
5765 "abbr": "SDT",
5766 "offset": 3,
5767 "isdst": true,
5768 "text": "(UTC+02:00) Damascus",
5769 "utc": [
5770 "Asia/Damascus"
5771 ]
5772 },
5773 {
5774 "name": "E. Europe Standard Time",
5775 "abbr": "EEDT",
5776 "offset": 3,
5777 "isdst": true,
5778 "text": "(UTC+02:00) E. Europe"
5779 },
5780 {
5781 "name": "South Africa Standard Time",
5782 "abbr": "SAST",
5783 "offset": 2,
5784 "isdst": false,
5785 "text": "(UTC+02:00) Harare, Pretoria",
5786 "utc": [
5787 "Africa/Blantyre",
5788 "Africa/Bujumbura",
5789 "Africa/Gaborone",
5790 "Africa/Harare",
5791 "Africa/Johannesburg",
5792 "Africa/Kigali",
5793 "Africa/Lubumbashi",
5794 "Africa/Lusaka",
5795 "Africa/Maputo",
5796 "Africa/Maseru",
5797 "Africa/Mbabane",
5798 "Etc/GMT-2"
5799 ]
5800 },
5801 {
5802 "name": "FLE Standard Time",
5803 "abbr": "FDT",
5804 "offset": 3,
5805 "isdst": true,
5806 "text": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
5807 "utc": [
5808 "Europe/Helsinki",
5809 "Europe/Kiev",
5810 "Europe/Mariehamn",
5811 "Europe/Riga",
5812 "Europe/Sofia",
5813 "Europe/Tallinn",
5814 "Europe/Uzhgorod",
5815 "Europe/Vilnius",
5816 "Europe/Zaporozhye"
5817 ]
5818 },
5819 {
5820 "name": "Turkey Standard Time",
5821 "abbr": "TDT",
5822 "offset": 3,
5823 "isdst": true,
5824 "text": "(UTC+02:00) Istanbul",
5825 "utc": [
5826 "Europe/Istanbul"
5827 ]
5828 },
5829 {
5830 "name": "Israel Standard Time",
5831 "abbr": "JDT",
5832 "offset": 3,
5833 "isdst": true,
5834 "text": "(UTC+02:00) Jerusalem",
5835 "utc": [
5836 "Asia/Jerusalem"
5837 ]
5838 },
5839 {
5840 "name": "Libya Standard Time",
5841 "abbr": "LST",
5842 "offset": 2,
5843 "isdst": false,
5844 "text": "(UTC+02:00) Tripoli",
5845 "utc": [
5846 "Africa/Tripoli"
5847 ]
5848 },
5849 {
5850 "name": "Jordan Standard Time",
5851 "abbr": "JST",
5852 "offset": 3,
5853 "isdst": false,
5854 "text": "(UTC+03:00) Amman",
5855 "utc": [
5856 "Asia/Amman"
5857 ]
5858 },
5859 {
5860 "name": "Arabic Standard Time",
5861 "abbr": "AST",
5862 "offset": 3,
5863 "isdst": false,
5864 "text": "(UTC+03:00) Baghdad",
5865 "utc": [
5866 "Asia/Baghdad"
5867 ]
5868 },
5869 {
5870 "name": "Kaliningrad Standard Time",
5871 "abbr": "KST",
5872 "offset": 3,
5873 "isdst": false,
5874 "text": "(UTC+03:00) Kaliningrad, Minsk",
5875 "utc": [
5876 "Europe/Kaliningrad",
5877 "Europe/Minsk"
5878 ]
5879 },
5880 {
5881 "name": "Arab Standard Time",
5882 "abbr": "AST",
5883 "offset": 3,
5884 "isdst": false,
5885 "text": "(UTC+03:00) Kuwait, Riyadh",
5886 "utc": [
5887 "Asia/Aden",
5888 "Asia/Bahrain",
5889 "Asia/Kuwait",
5890 "Asia/Qatar",
5891 "Asia/Riyadh"
5892 ]
5893 },
5894 {
5895 "name": "E. Africa Standard Time",
5896 "abbr": "EAST",
5897 "offset": 3,
5898 "isdst": false,
5899 "text": "(UTC+03:00) Nairobi",
5900 "utc": [
5901 "Africa/Addis_Ababa",
5902 "Africa/Asmera",
5903 "Africa/Dar_es_Salaam",
5904 "Africa/Djibouti",
5905 "Africa/Juba",
5906 "Africa/Kampala",
5907 "Africa/Khartoum",
5908 "Africa/Mogadishu",
5909 "Africa/Nairobi",
5910 "Antarctica/Syowa",
5911 "Etc/GMT-3",
5912 "Indian/Antananarivo",
5913 "Indian/Comoro",
5914 "Indian/Mayotte"
5915 ]
5916 },
5917 {
5918 "name": "Iran Standard Time",
5919 "abbr": "IDT",
5920 "offset": 4.5,
5921 "isdst": true,
5922 "text": "(UTC+03:30) Tehran",
5923 "utc": [
5924 "Asia/Tehran"
5925 ]
5926 },
5927 {
5928 "name": "Arabian Standard Time",
5929 "abbr": "AST",
5930 "offset": 4,
5931 "isdst": false,
5932 "text": "(UTC+04:00) Abu Dhabi, Muscat",
5933 "utc": [
5934 "Asia/Dubai",
5935 "Asia/Muscat",
5936 "Etc/GMT-4"
5937 ]
5938 },
5939 {
5940 "name": "Azerbaijan Standard Time",
5941 "abbr": "ADT",
5942 "offset": 5,
5943 "isdst": true,
5944 "text": "(UTC+04:00) Baku",
5945 "utc": [
5946 "Asia/Baku"
5947 ]
5948 },
5949 {
5950 "name": "Russian Standard Time",
5951 "abbr": "RST",
5952 "offset": 4,
5953 "isdst": false,
5954 "text": "(UTC+04:00) Moscow, St. Petersburg, Volgograd",
5955 "utc": [
5956 "Europe/Moscow",
5957 "Europe/Samara",
5958 "Europe/Simferopol",
5959 "Europe/Volgograd"
5960 ]
5961 },
5962 {
5963 "name": "Mauritius Standard Time",
5964 "abbr": "MST",
5965 "offset": 4,
5966 "isdst": false,
5967 "text": "(UTC+04:00) Port Louis",
5968 "utc": [
5969 "Indian/Mahe",
5970 "Indian/Mauritius",
5971 "Indian/Reunion"
5972 ]
5973 },
5974 {
5975 "name": "Georgian Standard Time",
5976 "abbr": "GST",
5977 "offset": 4,
5978 "isdst": false,
5979 "text": "(UTC+04:00) Tbilisi",
5980 "utc": [
5981 "Asia/Tbilisi"
5982 ]
5983 },
5984 {
5985 "name": "Caucasus Standard Time",
5986 "abbr": "CST",
5987 "offset": 4,
5988 "isdst": false,
5989 "text": "(UTC+04:00) Yerevan",
5990 "utc": [
5991 "Asia/Yerevan"
5992 ]
5993 },
5994 {
5995 "name": "Afghanistan Standard Time",
5996 "abbr": "AST",
5997 "offset": 4.5,
5998 "isdst": false,
5999 "text": "(UTC+04:30) Kabul",
6000 "utc": [
6001 "Asia/Kabul"
6002 ]
6003 },
6004 {
6005 "name": "West Asia Standard Time",
6006 "abbr": "WAST",
6007 "offset": 5,
6008 "isdst": false,
6009 "text": "(UTC+05:00) Ashgabat, Tashkent",
6010 "utc": [
6011 "Antarctica/Mawson",
6012 "Asia/Aqtau",
6013 "Asia/Aqtobe",
6014 "Asia/Ashgabat",
6015 "Asia/Dushanbe",
6016 "Asia/Oral",
6017 "Asia/Samarkand",
6018 "Asia/Tashkent",
6019 "Etc/GMT-5",
6020 "Indian/Kerguelen",
6021 "Indian/Maldives"
6022 ]
6023 },
6024 {
6025 "name": "Pakistan Standard Time",
6026 "abbr": "PST",
6027 "offset": 5,
6028 "isdst": false,
6029 "text": "(UTC+05:00) Islamabad, Karachi",
6030 "utc": [
6031 "Asia/Karachi"
6032 ]
6033 },
6034 {
6035 "name": "India Standard Time",
6036 "abbr": "IST",
6037 "offset": 5.5,
6038 "isdst": false,
6039 "text": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
6040 "utc": [
6041 "Asia/Calcutta"
6042 ]
6043 },
6044 {
6045 "name": "Sri Lanka Standard Time",
6046 "abbr": "SLST",
6047 "offset": 5.5,
6048 "isdst": false,
6049 "text": "(UTC+05:30) Sri Jayawardenepura",
6050 "utc": [
6051 "Asia/Colombo"
6052 ]
6053 },
6054 {
6055 "name": "Nepal Standard Time",
6056 "abbr": "NST",
6057 "offset": 5.75,
6058 "isdst": false,
6059 "text": "(UTC+05:45) Kathmandu",
6060 "utc": [
6061 "Asia/Katmandu"
6062 ]
6063 },
6064 {
6065 "name": "Central Asia Standard Time",
6066 "abbr": "CAST",
6067 "offset": 6,
6068 "isdst": false,
6069 "text": "(UTC+06:00) Astana",
6070 "utc": [
6071 "Antarctica/Vostok",
6072 "Asia/Almaty",
6073 "Asia/Bishkek",
6074 "Asia/Qyzylorda",
6075 "Asia/Urumqi",
6076 "Etc/GMT-6",
6077 "Indian/Chagos"
6078 ]
6079 },
6080 {
6081 "name": "Bangladesh Standard Time",
6082 "abbr": "BST",
6083 "offset": 6,
6084 "isdst": false,
6085 "text": "(UTC+06:00) Dhaka",
6086 "utc": [
6087 "Asia/Dhaka",
6088 "Asia/Thimphu"
6089 ]
6090 },
6091 {
6092 "name": "Ekaterinburg Standard Time",
6093 "abbr": "EST",
6094 "offset": 6,
6095 "isdst": false,
6096 "text": "(UTC+06:00) Ekaterinburg",
6097 "utc": [
6098 "Asia/Yekaterinburg"
6099 ]
6100 },
6101 {
6102 "name": "Myanmar Standard Time",
6103 "abbr": "MST",
6104 "offset": 6.5,
6105 "isdst": false,
6106 "text": "(UTC+06:30) Yangon (Rangoon)",
6107 "utc": [
6108 "Asia/Rangoon",
6109 "Indian/Cocos"
6110 ]
6111 },
6112 {
6113 "name": "SE Asia Standard Time",
6114 "abbr": "SAST",
6115 "offset": 7,
6116 "isdst": false,
6117 "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
6118 "utc": [
6119 "Antarctica/Davis",
6120 "Asia/Bangkok",
6121 "Asia/Hovd",
6122 "Asia/Jakarta",
6123 "Asia/Phnom_Penh",
6124 "Asia/Pontianak",
6125 "Asia/Saigon",
6126 "Asia/Vientiane",
6127 "Etc/GMT-7",
6128 "Indian/Christmas"
6129 ]
6130 },
6131 {
6132 "name": "N. Central Asia Standard Time",
6133 "abbr": "NCAST",
6134 "offset": 7,
6135 "isdst": false,
6136 "text": "(UTC+07:00) Novosibirsk",
6137 "utc": [
6138 "Asia/Novokuznetsk",
6139 "Asia/Novosibirsk",
6140 "Asia/Omsk"
6141 ]
6142 },
6143 {
6144 "name": "China Standard Time",
6145 "abbr": "CST",
6146 "offset": 8,
6147 "isdst": false,
6148 "text": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
6149 "utc": [
6150 "Asia/Hong_Kong",
6151 "Asia/Macau",
6152 "Asia/Shanghai"
6153 ]
6154 },
6155 {
6156 "name": "North Asia Standard Time",
6157 "abbr": "NAST",
6158 "offset": 8,
6159 "isdst": false,
6160 "text": "(UTC+08:00) Krasnoyarsk",
6161 "utc": [
6162 "Asia/Krasnoyarsk"
6163 ]
6164 },
6165 {
6166 "name": "Singapore Standard Time",
6167 "abbr": "MPST",
6168 "offset": 8,
6169 "isdst": false,
6170 "text": "(UTC+08:00) Kuala Lumpur, Singapore",
6171 "utc": [
6172 "Asia/Brunei",
6173 "Asia/Kuala_Lumpur",
6174 "Asia/Kuching",
6175 "Asia/Makassar",
6176 "Asia/Manila",
6177 "Asia/Singapore",
6178 "Etc/GMT-8"
6179 ]
6180 },
6181 {
6182 "name": "W. Australia Standard Time",
6183 "abbr": "WAST",
6184 "offset": 8,
6185 "isdst": false,
6186 "text": "(UTC+08:00) Perth",
6187 "utc": [
6188 "Antarctica/Casey",
6189 "Australia/Perth"
6190 ]
6191 },
6192 {
6193 "name": "Taipei Standard Time",
6194 "abbr": "TST",
6195 "offset": 8,
6196 "isdst": false,
6197 "text": "(UTC+08:00) Taipei",
6198 "utc": [
6199 "Asia/Taipei"
6200 ]
6201 },
6202 {
6203 "name": "Ulaanbaatar Standard Time",
6204 "abbr": "UST",
6205 "offset": 8,
6206 "isdst": false,
6207 "text": "(UTC+08:00) Ulaanbaatar",
6208 "utc": [
6209 "Asia/Choibalsan",
6210 "Asia/Ulaanbaatar"
6211 ]
6212 },
6213 {
6214 "name": "North Asia East Standard Time",
6215 "abbr": "NAEST",
6216 "offset": 9,
6217 "isdst": false,
6218 "text": "(UTC+09:00) Irkutsk",
6219 "utc": [
6220 "Asia/Irkutsk"
6221 ]
6222 },
6223 {
6224 "name": "Tokyo Standard Time",
6225 "abbr": "TST",
6226 "offset": 9,
6227 "isdst": false,
6228 "text": "(UTC+09:00) Osaka, Sapporo, Tokyo",
6229 "utc": [
6230 "Asia/Dili",
6231 "Asia/Jayapura",
6232 "Asia/Tokyo",
6233 "Etc/GMT-9",
6234 "Pacific/Palau"
6235 ]
6236 },
6237 {
6238 "name": "Korea Standard Time",
6239 "abbr": "KST",
6240 "offset": 9,
6241 "isdst": false,
6242 "text": "(UTC+09:00) Seoul",
6243 "utc": [
6244 "Asia/Pyongyang",
6245 "Asia/Seoul"
6246 ]
6247 },
6248 {
6249 "name": "Cen. Australia Standard Time",
6250 "abbr": "CAST",
6251 "offset": 9.5,
6252 "isdst": false,
6253 "text": "(UTC+09:30) Adelaide",
6254 "utc": [
6255 "Australia/Adelaide",
6256 "Australia/Broken_Hill"
6257 ]
6258 },
6259 {
6260 "name": "AUS Central Standard Time",
6261 "abbr": "ACST",
6262 "offset": 9.5,
6263 "isdst": false,
6264 "text": "(UTC+09:30) Darwin",
6265 "utc": [
6266 "Australia/Darwin"
6267 ]
6268 },
6269 {
6270 "name": "E. Australia Standard Time",
6271 "abbr": "EAST",
6272 "offset": 10,
6273 "isdst": false,
6274 "text": "(UTC+10:00) Brisbane",
6275 "utc": [
6276 "Australia/Brisbane",
6277 "Australia/Lindeman"
6278 ]
6279 },
6280 {
6281 "name": "AUS Eastern Standard Time",
6282 "abbr": "AEST",
6283 "offset": 10,
6284 "isdst": false,
6285 "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
6286 "utc": [
6287 "Australia/Melbourne",
6288 "Australia/Sydney"
6289 ]
6290 },
6291 {
6292 "name": "West Pacific Standard Time",
6293 "abbr": "WPST",
6294 "offset": 10,
6295 "isdst": false,
6296 "text": "(UTC+10:00) Guam, Port Moresby",
6297 "utc": [
6298 "Antarctica/DumontDUrville",
6299 "Etc/GMT-10",
6300 "Pacific/Guam",
6301 "Pacific/Port_Moresby",
6302 "Pacific/Saipan",
6303 "Pacific/Truk"
6304 ]
6305 },
6306 {
6307 "name": "Tasmania Standard Time",
6308 "abbr": "TST",
6309 "offset": 10,
6310 "isdst": false,
6311 "text": "(UTC+10:00) Hobart",
6312 "utc": [
6313 "Australia/Currie",
6314 "Australia/Hobart"
6315 ]
6316 },
6317 {
6318 "name": "Yakutsk Standard Time",
6319 "abbr": "YST",
6320 "offset": 10,
6321 "isdst": false,
6322 "text": "(UTC+10:00) Yakutsk",
6323 "utc": [
6324 "Asia/Chita",
6325 "Asia/Khandyga",
6326 "Asia/Yakutsk"
6327 ]
6328 },
6329 {
6330 "name": "Central Pacific Standard Time",
6331 "abbr": "CPST",
6332 "offset": 11,
6333 "isdst": false,
6334 "text": "(UTC+11:00) Solomon Is., New Caledonia",
6335 "utc": [
6336 "Antarctica/Macquarie",
6337 "Etc/GMT-11",
6338 "Pacific/Efate",
6339 "Pacific/Guadalcanal",
6340 "Pacific/Kosrae",
6341 "Pacific/Noumea",
6342 "Pacific/Ponape"
6343 ]
6344 },
6345 {
6346 "name": "Vladivostok Standard Time",
6347 "abbr": "VST",
6348 "offset": 11,
6349 "isdst": false,
6350 "text": "(UTC+11:00) Vladivostok",
6351 "utc": [
6352 "Asia/Sakhalin",
6353 "Asia/Ust-Nera",
6354 "Asia/Vladivostok"
6355 ]
6356 },
6357 {
6358 "name": "New Zealand Standard Time",
6359 "abbr": "NZST",
6360 "offset": 12,
6361 "isdst": false,
6362 "text": "(UTC+12:00) Auckland, Wellington",
6363 "utc": [
6364 "Antarctica/McMurdo",
6365 "Pacific/Auckland"
6366 ]
6367 },
6368 {
6369 "name": "UTC+12",
6370 "abbr": "U",
6371 "offset": 12,
6372 "isdst": false,
6373 "text": "(UTC+12:00) Coordinated Universal Time+12",
6374 "utc": [
6375 "Etc/GMT-12",
6376 "Pacific/Funafuti",
6377 "Pacific/Kwajalein",
6378 "Pacific/Majuro",
6379 "Pacific/Nauru",
6380 "Pacific/Tarawa",
6381 "Pacific/Wake",
6382 "Pacific/Wallis"
6383 ]
6384 },
6385 {
6386 "name": "Fiji Standard Time",
6387 "abbr": "FST",
6388 "offset": 12,
6389 "isdst": false,
6390 "text": "(UTC+12:00) Fiji",
6391 "utc": [
6392 "Pacific/Fiji"
6393 ]
6394 },
6395 {
6396 "name": "Magadan Standard Time",
6397 "abbr": "MST",
6398 "offset": 12,
6399 "isdst": false,
6400 "text": "(UTC+12:00) Magadan",
6401 "utc": [
6402 "Asia/Anadyr",
6403 "Asia/Kamchatka",
6404 "Asia/Magadan",
6405 "Asia/Srednekolymsk"
6406 ]
6407 },
6408 {
6409 "name": "Kamchatka Standard Time",
6410 "abbr": "KDT",
6411 "offset": 13,
6412 "isdst": true,
6413 "text": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old"
6414 },
6415 {
6416 "name": "Tonga Standard Time",
6417 "abbr": "TST",
6418 "offset": 13,
6419 "isdst": false,
6420 "text": "(UTC+13:00) Nuku'alofa",
6421 "utc": [
6422 "Etc/GMT-13",
6423 "Pacific/Enderbury",
6424 "Pacific/Fakaofo",
6425 "Pacific/Tongatapu"
6426 ]
6427 },
6428 {
6429 "name": "Samoa Standard Time",
6430 "abbr": "SST",
6431 "offset": 13,
6432 "isdst": false,
6433 "text": "(UTC+13:00) Samoa",
6434 "utc": [
6435 "Pacific/Apia"
6436 ]
6437 }
6438 ],
6439 //List source: http://answers.google.com/answers/threadview/id/589312.html
6440 profession: [
6441 "Airline Pilot",
6442 "Academic Team",
6443 "Accountant",
6444 "Account Executive",
6445 "Actor",
6446 "Actuary",
6447 "Acquisition Analyst",
6448 "Administrative Asst.",
6449 "Administrative Analyst",
6450 "Administrator",
6451 "Advertising Director",
6452 "Aerospace Engineer",
6453 "Agent",
6454 "Agricultural Inspector",
6455 "Agricultural Scientist",
6456 "Air Traffic Controller",
6457 "Animal Trainer",
6458 "Anthropologist",
6459 "Appraiser",
6460 "Architect",
6461 "Art Director",
6462 "Artist",
6463 "Astronomer",
6464 "Athletic Coach",
6465 "Auditor",
6466 "Author",
6467 "Baker",
6468 "Banker",
6469 "Bankruptcy Attorney",
6470 "Benefits Manager",
6471 "Biologist",
6472 "Bio-feedback Specialist",
6473 "Biomedical Engineer",
6474 "Biotechnical Researcher",
6475 "Broadcaster",
6476 "Broker",
6477 "Building Manager",
6478 "Building Contractor",
6479 "Building Inspector",
6480 "Business Analyst",
6481 "Business Planner",
6482 "Business Manager",
6483 "Buyer",
6484 "Call Center Manager",
6485 "Career Counselor",
6486 "Cash Manager",
6487 "Ceramic Engineer",
6488 "Chief Executive Officer",
6489 "Chief Operation Officer",
6490 "Chef",
6491 "Chemical Engineer",
6492 "Chemist",
6493 "Child Care Manager",
6494 "Chief Medical Officer",
6495 "Chiropractor",
6496 "Cinematographer",
6497 "City Housing Manager",
6498 "City Manager",
6499 "Civil Engineer",
6500 "Claims Manager",
6501 "Clinical Research Assistant",
6502 "Collections Manager.",
6503 "Compliance Manager",
6504 "Comptroller",
6505 "Computer Manager",
6506 "Commercial Artist",
6507 "Communications Affairs Director",
6508 "Communications Director",
6509 "Communications Engineer",
6510 "Compensation Analyst",
6511 "Computer Programmer",
6512 "Computer Ops. Manager",
6513 "Computer Engineer",
6514 "Computer Operator",
6515 "Computer Graphics Specialist",
6516 "Construction Engineer",
6517 "Construction Manager",
6518 "Consultant",
6519 "Consumer Relations Manager",
6520 "Contract Administrator",
6521 "Copyright Attorney",
6522 "Copywriter",
6523 "Corporate Planner",
6524 "Corrections Officer",
6525 "Cosmetologist",
6526 "Credit Analyst",
6527 "Cruise Director",
6528 "Chief Information Officer",
6529 "Chief Technology Officer",
6530 "Customer Service Manager",
6531 "Cryptologist",
6532 "Dancer",
6533 "Data Security Manager",
6534 "Database Manager",
6535 "Day Care Instructor",
6536 "Dentist",
6537 "Designer",
6538 "Design Engineer",
6539 "Desktop Publisher",
6540 "Developer",
6541 "Development Officer",
6542 "Diamond Merchant",
6543 "Dietitian",
6544 "Direct Marketer",
6545 "Director",
6546 "Distribution Manager",
6547 "Diversity Manager",
6548 "Economist",
6549 "EEO Compliance Manager",
6550 "Editor",
6551 "Education Adminator",
6552 "Electrical Engineer",
6553 "Electro Optical Engineer",
6554 "Electronics Engineer",
6555 "Embassy Management",
6556 "Employment Agent",
6557 "Engineer Technician",
6558 "Entrepreneur",
6559 "Environmental Analyst",
6560 "Environmental Attorney",
6561 "Environmental Engineer",
6562 "Environmental Specialist",
6563 "Escrow Officer",
6564 "Estimator",
6565 "Executive Assistant",
6566 "Executive Director",
6567 "Executive Recruiter",
6568 "Facilities Manager",
6569 "Family Counselor",
6570 "Fashion Events Manager",
6571 "Fashion Merchandiser",
6572 "Fast Food Manager",
6573 "Film Producer",
6574 "Film Production Assistant",
6575 "Financial Analyst",
6576 "Financial Planner",
6577 "Financier",
6578 "Fine Artist",
6579 "Wildlife Specialist",
6580 "Fitness Consultant",
6581 "Flight Attendant",
6582 "Flight Engineer",
6583 "Floral Designer",
6584 "Food & Beverage Director",
6585 "Food Service Manager",
6586 "Forestry Technician",
6587 "Franchise Management",
6588 "Franchise Sales",
6589 "Fraud Investigator",
6590 "Freelance Writer",
6591 "Fund Raiser",
6592 "General Manager",
6593 "Geologist",
6594 "General Counsel",
6595 "Geriatric Specialist",
6596 "Gerontologist",
6597 "Glamour Photographer",
6598 "Golf Club Manager",
6599 "Gourmet Chef",
6600 "Graphic Designer",
6601 "Grounds Keeper",
6602 "Hazardous Waste Manager",
6603 "Health Care Manager",
6604 "Health Therapist",
6605 "Health Service Administrator",
6606 "Hearing Officer",
6607 "Home Economist",
6608 "Horticulturist",
6609 "Hospital Administrator",
6610 "Hotel Manager",
6611 "Human Resources Manager",
6612 "Importer",
6613 "Industrial Designer",
6614 "Industrial Engineer",
6615 "Information Director",
6616 "Inside Sales",
6617 "Insurance Adjuster",
6618 "Interior Decorator",
6619 "Internal Controls Director",
6620 "International Acct.",
6621 "International Courier",
6622 "International Lawyer",
6623 "Interpreter",
6624 "Investigator",
6625 "Investment Banker",
6626 "Investment Manager",
6627 "IT Architect",
6628 "IT Project Manager",
6629 "IT Systems Analyst",
6630 "Jeweler",
6631 "Joint Venture Manager",
6632 "Journalist",
6633 "Labor Negotiator",
6634 "Labor Organizer",
6635 "Labor Relations Manager",
6636 "Lab Services Director",
6637 "Lab Technician",
6638 "Land Developer",
6639 "Landscape Architect",
6640 "Law Enforcement Officer",
6641 "Lawyer",
6642 "Lead Software Engineer",
6643 "Lead Software Test Engineer",
6644 "Leasing Manager",
6645 "Legal Secretary",
6646 "Library Manager",
6647 "Litigation Attorney",
6648 "Loan Officer",
6649 "Lobbyist",
6650 "Logistics Manager",
6651 "Maintenance Manager",
6652 "Management Consultant",
6653 "Managed Care Director",
6654 "Managing Partner",
6655 "Manufacturing Director",
6656 "Manpower Planner",
6657 "Marine Biologist",
6658 "Market Res. Analyst",
6659 "Marketing Director",
6660 "Materials Manager",
6661 "Mathematician",
6662 "Membership Chairman",
6663 "Mechanic",
6664 "Mechanical Engineer",
6665 "Media Buyer",
6666 "Medical Investor",
6667 "Medical Secretary",
6668 "Medical Technician",
6669 "Mental Health Counselor",
6670 "Merchandiser",
6671 "Metallurgical Engineering",
6672 "Meteorologist",
6673 "Microbiologist",
6674 "MIS Manager",
6675 "Motion Picture Director",
6676 "Multimedia Director",
6677 "Musician",
6678 "Network Administrator",
6679 "Network Specialist",
6680 "Network Operator",
6681 "New Product Manager",
6682 "Novelist",
6683 "Nuclear Engineer",
6684 "Nuclear Specialist",
6685 "Nutritionist",
6686 "Nursing Administrator",
6687 "Occupational Therapist",
6688 "Oceanographer",
6689 "Office Manager",
6690 "Operations Manager",
6691 "Operations Research Director",
6692 "Optical Technician",
6693 "Optometrist",
6694 "Organizational Development Manager",
6695 "Outplacement Specialist",
6696 "Paralegal",
6697 "Park Ranger",
6698 "Patent Attorney",
6699 "Payroll Specialist",
6700 "Personnel Specialist",
6701 "Petroleum Engineer",
6702 "Pharmacist",
6703 "Photographer",
6704 "Physical Therapist",
6705 "Physician",
6706 "Physician Assistant",
6707 "Physicist",
6708 "Planning Director",
6709 "Podiatrist",
6710 "Political Analyst",
6711 "Political Scientist",
6712 "Politician",
6713 "Portfolio Manager",
6714 "Preschool Management",
6715 "Preschool Teacher",
6716 "Principal",
6717 "Private Banker",
6718 "Private Investigator",
6719 "Probation Officer",
6720 "Process Engineer",
6721 "Producer",
6722 "Product Manager",
6723 "Product Engineer",
6724 "Production Engineer",
6725 "Production Planner",
6726 "Professional Athlete",
6727 "Professional Coach",
6728 "Professor",
6729 "Project Engineer",
6730 "Project Manager",
6731 "Program Manager",
6732 "Property Manager",
6733 "Public Administrator",
6734 "Public Safety Director",
6735 "PR Specialist",
6736 "Publisher",
6737 "Purchasing Agent",
6738 "Publishing Director",
6739 "Quality Assurance Specialist",
6740 "Quality Control Engineer",
6741 "Quality Control Inspector",
6742 "Radiology Manager",
6743 "Railroad Engineer",
6744 "Real Estate Broker",
6745 "Recreational Director",
6746 "Recruiter",
6747 "Redevelopment Specialist",
6748 "Regulatory Affairs Manager",
6749 "Registered Nurse",
6750 "Rehabilitation Counselor",
6751 "Relocation Manager",
6752 "Reporter",
6753 "Research Specialist",
6754 "Restaurant Manager",
6755 "Retail Store Manager",
6756 "Risk Analyst",
6757 "Safety Engineer",
6758 "Sales Engineer",
6759 "Sales Trainer",
6760 "Sales Promotion Manager",
6761 "Sales Representative",
6762 "Sales Manager",
6763 "Service Manager",
6764 "Sanitation Engineer",
6765 "Scientific Programmer",
6766 "Scientific Writer",
6767 "Securities Analyst",
6768 "Security Consultant",
6769 "Security Director",
6770 "Seminar Presenter",
6771 "Ship's Officer",
6772 "Singer",
6773 "Social Director",
6774 "Social Program Planner",
6775 "Social Research",
6776 "Social Scientist",
6777 "Social Worker",
6778 "Sociologist",
6779 "Software Developer",
6780 "Software Engineer",
6781 "Software Test Engineer",
6782 "Soil Scientist",
6783 "Special Events Manager",
6784 "Special Education Teacher",
6785 "Special Projects Director",
6786 "Speech Pathologist",
6787 "Speech Writer",
6788 "Sports Event Manager",
6789 "Statistician",
6790 "Store Manager",
6791 "Strategic Alliance Director",
6792 "Strategic Planning Director",
6793 "Stress Reduction Specialist",
6794 "Stockbroker",
6795 "Surveyor",
6796 "Structural Engineer",
6797 "Superintendent",
6798 "Supply Chain Director",
6799 "System Engineer",
6800 "Systems Analyst",
6801 "Systems Programmer",
6802 "System Administrator",
6803 "Tax Specialist",
6804 "Teacher",
6805 "Technical Support Specialist",
6806 "Technical Illustrator",
6807 "Technical Writer",
6808 "Technology Director",
6809 "Telecom Analyst",
6810 "Telemarketer",
6811 "Theatrical Director",
6812 "Title Examiner",
6813 "Tour Escort",
6814 "Tour Guide Director",
6815 "Traffic Manager",
6816 "Trainer Translator",
6817 "Transportation Manager",
6818 "Travel Agent",
6819 "Treasurer",
6820 "TV Programmer",
6821 "Underwriter",
6822 "Union Representative",
6823 "University Administrator",
6824 "University Dean",
6825 "Urban Planner",
6826 "Veterinarian",
6827 "Vendor Relations Director",
6828 "Viticulturist",
6829 "Warehouse Manager"
6830 ],
6831 animals : {
6832 //list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals
6833 "ocean" : ["Acantharea","Anemone","Angelfish King","Ahi Tuna","Albacore","American Oyster","Anchovy","Armored Snail","Arctic Char","Atlantic Bluefin Tuna","Atlantic Cod","Atlantic Goliath Grouper","Atlantic Trumpetfish","Atlantic Wolffish","Baleen Whale","Banded Butterflyfish","Banded Coral Shrimp","Banded Sea Krait","Barnacle","Barndoor Skate","Barracuda","Basking Shark","Bass","Beluga Whale","Bluebanded Goby","Bluehead Wrasse","Bluefish","Bluestreak Cleaner-Wrasse","Blue Marlin","Blue Shark","Blue Spiny Lobster","Blue Tang","Blue Whale","Broadclub Cuttlefish","Bull Shark","Chambered Nautilus","Chilean Basket Star","Chilean Jack Mackerel","Chinook Salmon","Christmas Tree Worm","Clam","Clown Anemonefish","Clown Triggerfish","Cod","Coelacanth","Cockscomb Cup Coral","Common Fangtooth","Conch","Cookiecutter Shark","Copepod","Coral","Corydoras","Cownose Ray","Crab","Crown-of-Thorns Starfish","Cushion Star","Cuttlefish","California Sea Otters","Dolphin","Dolphinfish","Dory","Devil Fish","Dugong","Dumbo Octopus","Dungeness Crab","Eccentric Sand Dollar","Edible Sea Cucumber","Eel","Elephant Seal","Elkhorn Coral","Emperor Shrimp","Estuarine Crocodile","Fathead Sculpin","Fiddler Crab","Fin Whale","Flameback","Flamingo Tongue Snail","Flashlight Fish","Flatback Turtle","Flatfish","Flying Fish","Flounder","Fluke","French Angelfish","Frilled Shark","Fugu (also called Pufferfish)","Gar","Geoduck","Giant Barrel Sponge","Giant Caribbean Sea Anemone","Giant Clam","Giant Isopod","Giant Kingfish","Giant Oarfish","Giant Pacific Octopus","Giant Pyrosome","Giant Sea Star","Giant Squid","Glowing Sucker Octopus","Giant Tube Worm","Goblin Shark","Goosefish","Great White Shark","Greenland Shark","Grey Atlantic Seal","Grouper","Grunion","Guineafowl Puffer","Haddock","Hake","Halibut","Hammerhead Shark","Hapuka","Harbor Porpoise","Harbor Seal","Hatchetfish","Hawaiian Monk Seal","Hawksbill Turtle","Hector's Dolphin","Hermit Crab","Herring","Hoki","Horn Shark","Horseshoe Crab","Humpback Anglerfish","Humpback Whale","Icefish","Imperator Angelfish","Irukandji Jellyfish","Isopod","Ivory Bush Coral","Japanese Spider Crab","Jellyfish","John Dory","Juan Fernandez Fur Seal","Killer Whale","Kiwa Hirsuta","Krill","Lagoon Triggerfish","Lamprey","Leafy Seadragon","Leopard Seal","Limpet","Ling","Lionfish","Lions Mane Jellyfish","Lobe Coral","Lobster","Loggerhead Turtle","Longnose Sawshark","Longsnout Seahorse","Lophelia Coral","Marrus Orthocanna","Manatee","Manta Ray","Marlin","Megamouth Shark","Mexican Lookdown","Mimic Octopus","Moon Jelly","Mollusk","Monkfish","Moray Eel","Mullet","Mussel","Megaladon","Napoleon Wrasse","Nassau Grouper","Narwhal","Nautilus","Needlefish","Northern Seahorse","North Atlantic Right Whale","Northern Red Snapper","Norway Lobster","Nudibranch","Nurse Shark","Oarfish","Ocean Sunfish","Oceanic Whitetip Shark","Octopus","Olive Sea Snake","Orange Roughy","Ostracod","Otter","Oyster","Pacific Angelshark","Pacific Blackdragon","Pacific Halibut","Pacific Sardine","Pacific Sea Nettle Jellyfish","Pacific White Sided Dolphin","Pantropical Spotted Dolphin","Patagonian Toothfish","Peacock Mantis Shrimp","Pelagic Thresher Shark","Penguin","Peruvian Anchoveta","Pilchard","Pink Salmon","Pinniped","Plankton","Porpoise","Polar Bear","Portuguese Man o' War","Pycnogonid Sea Spider","Quahog","Queen Angelfish","Queen Conch","Queen Parrotfish","Queensland Grouper","Ragfish","Ratfish","Rattail Fish","Ray","Red Drum","Red King Crab","Ringed Seal","Risso's Dolphin","Ross Seals","Sablefish","Salmon","Sand Dollar","Sandbar Shark","Sawfish","Sarcastic Fringehead","Scalloped Hammerhead Shark","Seahorse","Sea Cucumber","Sea Lion","Sea Urchin","Seal","Shark","Shortfin Mako Shark","Shovelnose Guitarfish","Shrimp","Silverside Fish","Skipjack Tuna","Slender Snipe Eel","Smalltooth Sawfish","Smelts","Sockeye Salmon","Southern Stingray","Sponge","Spotted Porcupinefish","Spotted Dolphin","Spotted Eagle Ray","Spotted Moray","Squid","Squidworm","Starfish","Stickleback","Stonefish","Stoplight Loosejaw","Sturgeon","Swordfish","Tan Bristlemouth","Tasseled Wobbegong","Terrible Claw Lobster","Threespot Damselfish","Tiger Prawn","Tiger Shark","Tilefish","Toadfish","Tropical Two-Wing Flyfish","Tuna","Umbrella Squid","Velvet Crab","Venus Flytrap Sea Anemone","Vigtorniella Worm","Viperfish","Vampire Squid","Vaquita","Wahoo","Walrus","West Indian Manatee","Whale","Whale Shark","Whiptail Gulper","White-Beaked Dolphin","White-Ring Garden Eel","White Shrimp","Wobbegong","Wrasse","Wreckfish","Xiphosura","Yellowtail Damselfish","Yelloweye Rockfish","Yellow Cup Black Coral","Yellow Tube Sponge","Yellowfin Tuna","Zebrashark","Zooplankton"],
6834 //list of desert, grassland, and forest animals comes from http://www.skyenimals.com/
6835 "desert" : ["Aardwolf","Addax","African Wild Ass","Ant","Antelope","Armadillo","Baboon","Badger","Bat","Bearded Dragon","Beetle","Bird","Black-footed Cat","Boa","Brown Bear","Bustard","Butterfly","Camel","Caracal","Caracara","Caterpillar","Centipede","Cheetah","Chipmunk","Chuckwalla","Climbing Mouse","Coati","Cobra","Cotton Rat","Cougar","Courser","Crane Fly","Crow","Dassie Rat","Dove","Dunnart","Eagle","Echidna","Elephant","Emu","Falcon","Fly","Fox","Frogmouth","Gecko","Geoffroy's Cat","Gerbil","Grasshopper","Guanaco","Gundi","Hamster","Hawk","Hedgehog","Hyena","Hyrax","Jackal","Kangaroo","Kangaroo Rat","Kestrel","Kowari","Kultarr","Leopard","Lion","Macaw","Meerkat","Mouse","Oryx","Ostrich","Owl","Pronghorn","Python","Rabbit","Raccoon","Rattlesnake","Rhinoceros","Sand Cat","Spectacled Bear","Spiny Mouse","Starling","Stick Bug","Tarantula","Tit","Toad","Tortoise","Tyrant Flycatcher","Viper","Vulture","Waxwing","Xerus","Zebra"],
6836 "grassland" : ["Aardvark","Aardwolf","Accentor","African Buffalo","African Wild Dog","Alpaca","Anaconda","Ant","Anteater","Antelope","Armadillo","Baboon","Badger","Bandicoot","Barbet","Bat","Bee","Bee-eater","Beetle","Bird","Bison","Black-footed Cat","Black-footed Ferret","Bluebird","Boa","Bowerbird","Brown Bear","Bush Dog","Bushshrike","Bustard","Butterfly","Buzzard","Caracal","Caracara","Cardinal","Caterpillar","Cheetah","Chipmunk","Civet","Climbing Mouse","Clouded Leopard","Coati","Cobra","Cockatoo","Cockroach","Common Genet","Cotton Rat","Cougar","Courser","Coyote","Crane","Crane Fly","Cricket","Crow","Culpeo","Death Adder","Deer","Deer Mouse","Dingo","Dinosaur","Dove","Drongo","Duck","Duiker","Dunnart","Eagle","Echidna","Elephant","Elk","Emu","Falcon","Finch","Flea","Fly","Flying Frog","Fox","Frog","Frogmouth","Garter Snake","Gazelle","Gecko","Geoffroy's Cat","Gerbil","Giant Tortoise","Giraffe","Grasshopper","Grison","Groundhog","Grouse","Guanaco","Guinea Pig","Hamster","Harrier","Hartebeest","Hawk","Hedgehog","Helmetshrike","Hippopotamus","Hornbill","Hyena","Hyrax","Impala","Jackal","Jaguar","Jaguarundi","Kangaroo","Kangaroo Rat","Kestrel","Kultarr","Ladybug","Leopard","Lion","Macaw","Meerkat","Mouse","Newt","Oryx","Ostrich","Owl","Pangolin","Pheasant","Prairie Dog","Pronghorn","Przewalski's Horse","Python","Quoll","Rabbit","Raven","Rhinoceros","Shelduck","Sloth Bear","Spectacled Bear","Squirrel","Starling","Stick Bug","Tamandua","Tasmanian Devil","Thornbill","Thrush","Toad","Tortoise"],
6837 "forest" : ["Agouti","Anaconda","Anoa","Ant","Anteater","Antelope","Armadillo","Asian Black Bear","Aye-aye","Babirusa","Baboon","Badger","Bandicoot","Banteng","Barbet","Basilisk","Bat","Bearded Dragon","Bee","Bee-eater","Beetle","Bettong","Binturong","Bird-of-paradise","Bongo","Bowerbird","Bulbul","Bush Dog","Bushbaby","Bushshrike","Butterfly","Buzzard","Caecilian","Cardinal","Cassowary","Caterpillar","Centipede","Chameleon","Chimpanzee","Cicada","Civet","Clouded Leopard","Coati","Cobra","Cockatoo","Cockroach","Colugo","Cotinga","Cotton Rat","Cougar","Crane Fly","Cricket","Crocodile","Crow","Cuckoo","Cuscus","Death Adder","Deer","Dhole","Dingo","Dinosaur","Drongo","Duck","Duiker","Eagle","Echidna","Elephant","Finch","Flat-headed Cat","Flea","Flowerpecker","Fly","Flying Frog","Fossa","Frog","Frogmouth","Gaur","Gecko","Gorilla","Grison","Hawaiian Honeycreeper","Hawk","Hedgehog","Helmetshrike","Hornbill","Hyrax","Iguana","Jackal","Jaguar","Jaguarundi","Kestrel","Ladybug","Lemur","Leopard","Lion","Macaw","Mandrill","Margay","Monkey","Mouse","Mouse Deer","Newt","Okapi","Old World Flycatcher","Orangutan","Owl","Pangolin","Peafowl","Pheasant","Possum","Python","Quokka","Rabbit","Raccoon","Red Panda","Red River Hog","Rhinoceros","Sloth Bear","Spectacled Bear","Squirrel","Starling","Stick Bug","Sun Bear","Tamandua","Tamarin","Tapir","Tarantula","Thrush","Tiger","Tit","Toad","Tortoise","Toucan","Trogon","Trumpeter","Turaco","Turtle","Tyrant Flycatcher","Viper","Vulture","Wallaby","Warbler","Wasp","Waxwing","Weaver","Weaver-finch","Whistler","White-eye","Whydah","Woodswallow","Worm","Wren","Xenops","Yellowjacket","Accentor","African Buffalo","American Black Bear","Anole","Bird","Bison","Boa","Brown Bear","Chipmunk","Common Genet","Copperhead","Coyote","Deer Mouse","Dormouse","Elk","Emu","Fisher","Fox","Garter Snake","Giant Panda","Giant Tortoise","Groundhog","Grouse","Guanaco","Himalayan Tahr","Kangaroo","Koala","Numbat","Quoll","Raccoon dog","Tasmanian Devil","Thornbill","Turkey","Vole","Weasel","Wildcat","Wolf","Wombat","Woodchuck","Woodpecker"],
6838 //list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html
6839 "farm" : ["Alpaca","Buffalo","Banteng","Cow","Cat","Chicken","Carp","Camel","Donkey","Dog","Duck","Emu","Goat","Gayal","Guinea","Goose","Horse","Honey","Llama","Pig","Pigeon","Rhea","Rabbit","Sheep","Silkworm","Turkey","Yak","Zebu"],
6840 //list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm
6841 "pet" : ["Bearded Dragon","Birds","Burro","Cats","Chameleons","Chickens","Chinchillas","Chinese Water Dragon","Cows","Dogs","Donkey","Ducks","Ferrets","Fish","Geckos","Geese","Gerbils","Goats","Guinea Fowl","Guinea Pigs","Hamsters","Hedgehogs","Horses","Iguanas","Llamas","Lizards","Mice","Mule","Peafowl","Pigs and Hogs","Pigeons","Ponies","Pot Bellied Pig","Rabbits","Rats","Sheep","Skinks","Snakes","Stick Insects","Sugar Gliders","Tarantula","Turkeys","Turtles"],
6842 //list of zoo animals comes from https://bronxzoo.com/animals
6843 "zoo" : ["Aardvark","African Wild Dog","Aldabra Tortoise","American Alligator","American Bison","Amur Tiger","Anaconda","Andean Condor","Asian Elephant","Baby Doll Sheep","Bald Eagle","Barred Owl","Blue Iguana","Boer Goat","California Sea Lion","Caribbean Flamingo","Chinchilla","Collared Lemur","Coquerel's Sifaka","Cuban Amazon Parrot","Ebony Langur","Fennec Fox","Fossa","Gelada","Giant Anteater","Giraffe","Gorilla","Grizzly Bear","Henkel's Leaf-tailed Gecko","Indian Gharial","Indian Rhinoceros","King Cobra","King Vulture","Komodo Dragon","Linne's Two-toed Sloth","Lion","Little Penguin","Madagascar Tree Boa","Magellanic Penguin","Malayan Tapir","Malayan Tiger","Matschies Tree Kangaroo","Mini Donkey","Monarch Butterfly","Nile crocodile","North American Porcupine","Nubian Ibex","Okapi","Poison Dart Frog","Polar Bear","Pygmy Marmoset","Radiated Tortoise","Red Panda","Red Ruffed Lemur","Ring-tailed Lemur","Ring-tailed Mongoose","Rock Hyrax","Small Clawed Asian Otter","Snow Leopard","Snowy Owl","Southern White-faced Owl","Southern White Rhinocerous","Squirrel Monkey","Tufted Puffin","White Cheeked Gibbon","White-throated Bee Eater","Zebra"]
6844 },
6845 emotions: [
6846 "love",
6847 "Joy",
6848 "Surprise",
6849 "Anger",
6850 "Sadness",
6851 "Fear"
6852 ],
6853 };
6854
6855 var o_hasOwnProperty = Object.prototype.hasOwnProperty;
6856 var o_keys = (Object.keys || function(obj) {
6857 var result = [];
6858 for (var key in obj) {
6859 if (o_hasOwnProperty.call(obj, key)) {
6860 result.push(key);
6861 }
6862 }
6863
6864 return result;
6865 });
6866
6867
6868 function _copyObject(source, target) {
6869 var keys = o_keys(source);
6870 var key;
6871
6872 for (var i = 0, l = keys.length; i < l; i++) {
6873 key = keys[i];
6874 target[key] = source[key] || target[key];
6875 }
6876 }
6877
6878 function _copyArray(source, target) {
6879 for (var i = 0, l = source.length; i < l; i++) {
6880 target[i] = source[i];
6881 }
6882 }
6883
6884 function copyObject(source, _target) {
6885 var isArray = Array.isArray(source);
6886 var target = _target || (isArray ? new Array(source.length) : {});
6887
6888 if (isArray) {
6889 _copyArray(source, target);
6890 } else {
6891 _copyObject(source, target);
6892 }
6893
6894 return target;
6895 }
6896
6897 /** Get the data based on key**/
6898 Chance.prototype.get = function (name) {
6899 return copyObject(data[name]);
6900 };
6901
6902 // Mac Address
6903 Chance.prototype.mac_address = function(options){
6904 // typically mac addresses are separated by ":"
6905 // however they can also be separated by "-"
6906 // the network variant uses a dot every fourth byte
6907
6908 options = initOptions(options);
6909 if(!options.separator) {
6910 options.separator = options.networkVersion ? "." : ":";
6911 }
6912
6913 var mac_pool="ABCDEF1234567890",
6914 mac = "";
6915 if(!options.networkVersion) {
6916 mac = this.n(this.string, 6, { pool: mac_pool, length:2 }).join(options.separator);
6917 } else {
6918 mac = this.n(this.string, 3, { pool: mac_pool, length:4 }).join(options.separator);
6919 }
6920
6921 return mac;
6922 };
6923
6924 Chance.prototype.normal = function (options) {
6925 options = initOptions(options, {mean : 0, dev : 1, pool : []});
6926
6927 testRange(
6928 options.pool.constructor !== Array,
6929 "Chance: The pool option must be a valid array."
6930 );
6931 testRange(
6932 typeof options.mean !== 'number',
6933 "Chance: Mean (mean) must be a number"
6934 );
6935 testRange(
6936 typeof options.dev !== 'number',
6937 "Chance: Standard deviation (dev) must be a number"
6938 );
6939
6940 // If a pool has been passed, then we are returning an item from that pool,
6941 // using the normal distribution settings that were passed in
6942 if (options.pool.length > 0) {
6943 return this.normal_pool(options);
6944 }
6945
6946 // The Marsaglia Polar method
6947 var s, u, v, norm,
6948 mean = options.mean,
6949 dev = options.dev;
6950
6951 do {
6952 // U and V are from the uniform distribution on (-1, 1)
6953 u = this.random() * 2 - 1;
6954 v = this.random() * 2 - 1;
6955
6956 s = u * u + v * v;
6957 } while (s >= 1);
6958
6959 // Compute the standard normal variate
6960 norm = u * Math.sqrt(-2 * Math.log(s) / s);
6961
6962 // Shape and scale
6963 return dev * norm + mean;
6964 };
6965
6966 Chance.prototype.normal_pool = function(options) {
6967 var performanceCounter = 0;
6968 do {
6969 var idx = Math.round(this.normal({ mean: options.mean, dev: options.dev }));
6970 if (idx < options.pool.length && idx >= 0) {
6971 return options.pool[idx];
6972 } else {
6973 performanceCounter++;
6974 }
6975 } while(performanceCounter < 100);
6976
6977 throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.");
6978 };
6979
6980 Chance.prototype.radio = function (options) {
6981 // Initial Letter (Typically Designated by Side of Mississippi River)
6982 options = initOptions(options, {side : "?"});
6983 var fl = "";
6984 switch (options.side.toLowerCase()) {
6985 case "east":
6986 case "e":
6987 fl = "W";
6988 break;
6989 case "west":
6990 case "w":
6991 fl = "K";
6992 break;
6993 default:
6994 fl = this.character({pool: "KW"});
6995 break;
6996 }
6997
6998 return fl + this.character({alpha: true, casing: "upper"}) +
6999 this.character({alpha: true, casing: "upper"}) +
7000 this.character({alpha: true, casing: "upper"});
7001 };
7002
7003 // Set the data as key and data or the data map
7004 Chance.prototype.set = function (name, values) {
7005 if (typeof name === "string") {
7006 data[name] = values;
7007 } else {
7008 data = copyObject(name, data);
7009 }
7010 };
7011
7012 Chance.prototype.tv = function (options) {
7013 return this.radio(options);
7014 };
7015
7016 // ID number for Brazil companies
7017 Chance.prototype.cnpj = function () {
7018 var n = this.n(this.natural, 8, { max: 9 });
7019 var d1 = 2+n[7]*6+n[6]*7+n[5]*8+n[4]*9+n[3]*2+n[2]*3+n[1]*4+n[0]*5;
7020 d1 = 11 - (d1 % 11);
7021 if (d1>=10){
7022 d1 = 0;
7023 }
7024 var d2 = d1*2+3+n[7]*7+n[6]*8+n[5]*9+n[4]*2+n[3]*3+n[2]*4+n[1]*5+n[0]*6;
7025 d2 = 11 - (d2 % 11);
7026 if (d2>=10){
7027 d2 = 0;
7028 }
7029 return ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/0001-'+d1+d2;
7030 };
7031
7032 Chance.prototype.emotion = function () {
7033 return this.pick(this.get("emotions"));
7034 };
7035
7036 // -- End Miscellaneous --
7037
7038 Chance.prototype.mersenne_twister = function (seed) {
7039 return new MersenneTwister(seed);
7040 };
7041
7042 Chance.prototype.blueimp_md5 = function () {
7043 return new BlueImpMD5();
7044 };
7045
7046 // Mersenne Twister from https://gist.github.com/banksean/300494
7047 /*
7048 A C-program for MT19937, with initialization improved 2002/1/26.
7049 Coded by Takuji Nishimura and Makoto Matsumoto.
7050
7051 Before using, initialize the state by using init_genrand(seed)
7052 or init_by_array(init_key, key_length).
7053
7054 Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
7055 All rights reserved.
7056
7057 Redistribution and use in source and binary forms, with or without
7058 modification, are permitted provided that the following conditions
7059 are met:
7060
7061 1. Redistributions of source code must retain the above copyright
7062 notice, this list of conditions and the following disclaimer.
7063
7064 2. Redistributions in binary form must reproduce the above copyright
7065 notice, this list of conditions and the following disclaimer in the
7066 documentation and/or other materials provided with the distribution.
7067
7068 3. The names of its contributors may not be used to endorse or promote
7069 products derived from this software without specific prior written
7070 permission.
7071
7072 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7073 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7074 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7075 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
7076 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
7077 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
7078 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
7079 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
7080 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
7081 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
7082 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7083
7084
7085 Any feedback is very welcome.
7086 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
7087 email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
7088 */
7089 var MersenneTwister = function (seed) {
7090 if (seed === undefined) {
7091 // kept random number same size as time used previously to ensure no unexpected results downstream
7092 seed = Math.floor(Math.random()*Math.pow(10,13));
7093 }
7094 /* Period parameters */
7095 this.N = 624;
7096 this.M = 397;
7097 this.MATRIX_A = 0x9908b0df; /* constant vector a */
7098 this.UPPER_MASK = 0x80000000; /* most significant w-r bits */
7099 this.LOWER_MASK = 0x7fffffff; /* least significant r bits */
7100
7101 this.mt = new Array(this.N); /* the array for the state vector */
7102 this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */
7103
7104 this.init_genrand(seed);
7105 };
7106
7107 /* initializes mt[N] with a seed */
7108 MersenneTwister.prototype.init_genrand = function (s) {
7109 this.mt[0] = s >>> 0;
7110 for (this.mti = 1; this.mti < this.N; this.mti++) {
7111 s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30);
7112 this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti;
7113 /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
7114 /* In the previous versions, MSBs of the seed affect */
7115 /* only MSBs of the array mt[]. */
7116 /* 2002/01/09 modified by Makoto Matsumoto */
7117 this.mt[this.mti] >>>= 0;
7118 /* for >32 bit machines */
7119 }
7120 };
7121
7122 /* initialize by an array with array-length */
7123 /* init_key is the array for initializing keys */
7124 /* key_length is its length */
7125 /* slight change for C++, 2004/2/26 */
7126 MersenneTwister.prototype.init_by_array = function (init_key, key_length) {
7127 var i = 1, j = 0, k, s;
7128 this.init_genrand(19650218);
7129 k = (this.N > key_length ? this.N : key_length);
7130 for (; k; k--) {
7131 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7132 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j; /* non linear */
7133 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7134 i++;
7135 j++;
7136 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7137 if (j >= key_length) { j = 0; }
7138 }
7139 for (k = this.N - 1; k; k--) {
7140 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7141 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i; /* non linear */
7142 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7143 i++;
7144 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7145 }
7146
7147 this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
7148 };
7149
7150 /* generates a random number on [0,0xffffffff]-interval */
7151 MersenneTwister.prototype.genrand_int32 = function () {
7152 var y;
7153 var mag01 = new Array(0x0, this.MATRIX_A);
7154 /* mag01[x] = x * MATRIX_A for x=0,1 */
7155
7156 if (this.mti >= this.N) { /* generate N words at one time */
7157 var kk;
7158
7159 if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */
7160 this.init_genrand(5489); /* a default initial seed is used */
7161 }
7162 for (kk = 0; kk < this.N - this.M; kk++) {
7163 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7164 this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1];
7165 }
7166 for (;kk < this.N - 1; kk++) {
7167 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7168 this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];
7169 }
7170 y = (this.mt[this.N - 1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);
7171 this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];
7172
7173 this.mti = 0;
7174 }
7175
7176 y = this.mt[this.mti++];
7177
7178 /* Tempering */
7179 y ^= (y >>> 11);
7180 y ^= (y << 7) & 0x9d2c5680;
7181 y ^= (y << 15) & 0xefc60000;
7182 y ^= (y >>> 18);
7183
7184 return y >>> 0;
7185 };
7186
7187 /* generates a random number on [0,0x7fffffff]-interval */
7188 MersenneTwister.prototype.genrand_int31 = function () {
7189 return (this.genrand_int32() >>> 1);
7190 };
7191
7192 /* generates a random number on [0,1]-real-interval */
7193 MersenneTwister.prototype.genrand_real1 = function () {
7194 return this.genrand_int32() * (1.0 / 4294967295.0);
7195 /* divided by 2^32-1 */
7196 };
7197
7198 /* generates a random number on [0,1)-real-interval */
7199 MersenneTwister.prototype.random = function () {
7200 return this.genrand_int32() * (1.0 / 4294967296.0);
7201 /* divided by 2^32 */
7202 };
7203
7204 /* generates a random number on (0,1)-real-interval */
7205 MersenneTwister.prototype.genrand_real3 = function () {
7206 return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);
7207 /* divided by 2^32 */
7208 };
7209
7210 /* generates a random number on [0,1) with 53-bit resolution*/
7211 MersenneTwister.prototype.genrand_res53 = function () {
7212 var a = this.genrand_int32()>>>5, b = this.genrand_int32()>>>6;
7213 return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
7214 };
7215
7216 // BlueImp MD5 hashing algorithm from https://github.com/blueimp/JavaScript-MD5
7217 var BlueImpMD5 = function () {};
7218
7219 BlueImpMD5.prototype.VERSION = '1.0.1';
7220
7221 /*
7222 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7223 * to work around bugs in some JS interpreters.
7224 */
7225 BlueImpMD5.prototype.safe_add = function safe_add(x, y) {
7226 var lsw = (x & 0xFFFF) + (y & 0xFFFF),
7227 msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7228 return (msw << 16) | (lsw & 0xFFFF);
7229 };
7230
7231 /*
7232 * Bitwise rotate a 32-bit number to the left.
7233 */
7234 BlueImpMD5.prototype.bit_roll = function (num, cnt) {
7235 return (num << cnt) | (num >>> (32 - cnt));
7236 };
7237
7238 /*
7239 * These functions implement the five basic operations the algorithm uses.
7240 */
7241 BlueImpMD5.prototype.md5_cmn = function (q, a, b, x, s, t) {
7242 return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b);
7243 };
7244 BlueImpMD5.prototype.md5_ff = function (a, b, c, d, x, s, t) {
7245 return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7246 };
7247 BlueImpMD5.prototype.md5_gg = function (a, b, c, d, x, s, t) {
7248 return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7249 };
7250 BlueImpMD5.prototype.md5_hh = function (a, b, c, d, x, s, t) {
7251 return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);
7252 };
7253 BlueImpMD5.prototype.md5_ii = function (a, b, c, d, x, s, t) {
7254 return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7255 };
7256
7257 /*
7258 * Calculate the MD5 of an array of little-endian words, and a bit length.
7259 */
7260 BlueImpMD5.prototype.binl_md5 = function (x, len) {
7261 /* append padding */
7262 x[len >> 5] |= 0x80 << (len % 32);
7263 x[(((len + 64) >>> 9) << 4) + 14] = len;
7264
7265 var i, olda, oldb, oldc, oldd,
7266 a = 1732584193,
7267 b = -271733879,
7268 c = -1732584194,
7269 d = 271733878;
7270
7271 for (i = 0; i < x.length; i += 16) {
7272 olda = a;
7273 oldb = b;
7274 oldc = c;
7275 oldd = d;
7276
7277 a = this.md5_ff(a, b, c, d, x[i], 7, -680876936);
7278 d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
7279 c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
7280 b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
7281 a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
7282 d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
7283 c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
7284 b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
7285 a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
7286 d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
7287 c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063);
7288 b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
7289 a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
7290 d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
7291 c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
7292 b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
7293
7294 a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
7295 d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
7296 c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
7297 b = this.md5_gg(b, c, d, a, x[i], 20, -373897302);
7298 a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
7299 d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
7300 c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
7301 b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
7302 a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
7303 d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
7304 c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
7305 b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
7306 a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
7307 d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
7308 c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
7309 b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
7310
7311 a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558);
7312 d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
7313 c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
7314 b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
7315 a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
7316 d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
7317 c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
7318 b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
7319 a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
7320 d = this.md5_hh(d, a, b, c, x[i], 11, -358537222);
7321 c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
7322 b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
7323 a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
7324 d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
7325 c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
7326 b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
7327
7328 a = this.md5_ii(a, b, c, d, x[i], 6, -198630844);
7329 d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
7330 c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
7331 b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
7332 a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
7333 d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
7334 c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
7335 b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
7336 a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
7337 d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
7338 c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
7339 b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
7340 a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
7341 d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
7342 c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
7343 b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
7344
7345 a = this.safe_add(a, olda);
7346 b = this.safe_add(b, oldb);
7347 c = this.safe_add(c, oldc);
7348 d = this.safe_add(d, oldd);
7349 }
7350 return [a, b, c, d];
7351 };
7352
7353 /*
7354 * Convert an array of little-endian words to a string
7355 */
7356 BlueImpMD5.prototype.binl2rstr = function (input) {
7357 var i,
7358 output = '';
7359 for (i = 0; i < input.length * 32; i += 8) {
7360 output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
7361 }
7362 return output;
7363 };
7364
7365 /*
7366 * Convert a raw string to an array of little-endian words
7367 * Characters >255 have their high-byte silently ignored.
7368 */
7369 BlueImpMD5.prototype.rstr2binl = function (input) {
7370 var i,
7371 output = [];
7372 output[(input.length >> 2) - 1] = undefined;
7373 for (i = 0; i < output.length; i += 1) {
7374 output[i] = 0;
7375 }
7376 for (i = 0; i < input.length * 8; i += 8) {
7377 output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
7378 }
7379 return output;
7380 };
7381
7382 /*
7383 * Calculate the MD5 of a raw string
7384 */
7385 BlueImpMD5.prototype.rstr_md5 = function (s) {
7386 return this.binl2rstr(this.binl_md5(this.rstr2binl(s), s.length * 8));
7387 };
7388
7389 /*
7390 * Calculate the HMAC-MD5, of a key and some data (raw strings)
7391 */
7392 BlueImpMD5.prototype.rstr_hmac_md5 = function (key, data) {
7393 var i,
7394 bkey = this.rstr2binl(key),
7395 ipad = [],
7396 opad = [],
7397 hash;
7398 ipad[15] = opad[15] = undefined;
7399 if (bkey.length > 16) {
7400 bkey = this.binl_md5(bkey, key.length * 8);
7401 }
7402 for (i = 0; i < 16; i += 1) {
7403 ipad[i] = bkey[i] ^ 0x36363636;
7404 opad[i] = bkey[i] ^ 0x5C5C5C5C;
7405 }
7406 hash = this.binl_md5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
7407 return this.binl2rstr(this.binl_md5(opad.concat(hash), 512 + 128));
7408 };
7409
7410 /*
7411 * Convert a raw string to a hex string
7412 */
7413 BlueImpMD5.prototype.rstr2hex = function (input) {
7414 var hex_tab = '0123456789abcdef',
7415 output = '',
7416 x,
7417 i;
7418 for (i = 0; i < input.length; i += 1) {
7419 x = input.charCodeAt(i);
7420 output += hex_tab.charAt((x >>> 4) & 0x0F) +
7421 hex_tab.charAt(x & 0x0F);
7422 }
7423 return output;
7424 };
7425
7426 /*
7427 * Encode a string as utf-8
7428 */
7429 BlueImpMD5.prototype.str2rstr_utf8 = function (input) {
7430 return unescape(encodeURIComponent(input));
7431 };
7432
7433 /*
7434 * Take string arguments and return either raw or hex encoded strings
7435 */
7436 BlueImpMD5.prototype.raw_md5 = function (s) {
7437 return this.rstr_md5(this.str2rstr_utf8(s));
7438 };
7439 BlueImpMD5.prototype.hex_md5 = function (s) {
7440 return this.rstr2hex(this.raw_md5(s));
7441 };
7442 BlueImpMD5.prototype.raw_hmac_md5 = function (k, d) {
7443 return this.rstr_hmac_md5(this.str2rstr_utf8(k), this.str2rstr_utf8(d));
7444 };
7445 BlueImpMD5.prototype.hex_hmac_md5 = function (k, d) {
7446 return this.rstr2hex(this.raw_hmac_md5(k, d));
7447 };
7448
7449 BlueImpMD5.prototype.md5 = function (string, key, raw) {
7450 if (!key) {
7451 if (!raw) {
7452 return this.hex_md5(string);
7453 }
7454
7455 return this.raw_md5(string);
7456 }
7457
7458 if (!raw) {
7459 return this.hex_hmac_md5(key, string);
7460 }
7461
7462 return this.raw_hmac_md5(key, string);
7463 };
7464
7465 // CommonJS module
7466 if (typeof exports !== 'undefined') {
7467 if (typeof module !== 'undefined' && module.exports) {
7468 exports = module.exports = Chance;
7469 }
7470 exports.Chance = Chance;
7471 }
7472
7473 // Register as an anonymous AMD module
7474 if (typeof define === 'function' && define.amd) {
7475 define([], function () {
7476 return Chance;
7477 });
7478 }
7479
7480 // if there is a importsScrips object define chance for worker
7481 // allows worker to use full Chance functionality with seed
7482 if (typeof importScripts !== 'undefined') {
7483 chance = new Chance();
7484 self.Chance = Chance;
7485 }
7486
7487 // If there is a window object, that at least has a document property,
7488 // instantiate and define chance on the window
7489 if (typeof window === "object" && typeof window.document === "object") {
7490 window.Chance = Chance;
7491 window.chance = new Chance();
7492 }
7493})();