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 positive number");
486 }
487 if (!count || count === 1) {
488 return [ this.pickone(arr) ];
489 } else {
490 return this.shuffle(arr).slice(0, count);
491 }
492 };
493
494 Chance.prototype.shuffle = function (arr) {
495 var new_array = [],
496 j = 0,
497 length = Number(arr.length),
498 source_indexes = range(length),
499 last_source_index = length - 1,
500 selected_source_index;
501
502 for (var i = 0; i < length; i++) {
503 // Pick a random index from the array
504 selected_source_index = this.natural({max: last_source_index});
505 j = source_indexes[selected_source_index];
506
507 // Add it to the new array
508 new_array[i] = arr[j];
509
510 // Mark the source index as used
511 source_indexes[selected_source_index] = source_indexes[last_source_index];
512 last_source_index -= 1;
513 }
514
515 return new_array;
516 };
517
518 // Returns a single item from an array with relative weighting of odds
519 Chance.prototype.weighted = function (arr, weights, trim) {
520 if (arr.length !== weights.length) {
521 throw new RangeError("Chance: Length of array and weights must match");
522 }
523
524 // scan weights array and sum valid entries
525 var sum = 0;
526 var val;
527 for (var weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
528 val = weights[weightIndex];
529 if (isNaN(val)) {
530 throw new RangeError("Chance: All weights must be numbers");
531 }
532
533 if (val > 0) {
534 sum += val;
535 }
536 }
537
538 if (sum === 0) {
539 throw new RangeError("Chance: No valid entries in array weights");
540 }
541
542 // select a value within range
543 var selected = this.random() * sum;
544
545 // find array entry corresponding to selected value
546 var total = 0;
547 var lastGoodIdx = -1;
548 var chosenIdx;
549 for (weightIndex = 0; weightIndex < weights.length; ++weightIndex) {
550 val = weights[weightIndex];
551 total += val;
552 if (val > 0) {
553 if (selected <= total) {
554 chosenIdx = weightIndex;
555 break;
556 }
557 lastGoodIdx = weightIndex;
558 }
559
560 // handle any possible rounding error comparison to ensure something is picked
561 if (weightIndex === (weights.length - 1)) {
562 chosenIdx = lastGoodIdx;
563 }
564 }
565
566 var chosen = arr[chosenIdx];
567 trim = (typeof trim === 'undefined') ? false : trim;
568 if (trim) {
569 arr.splice(chosenIdx, 1);
570 weights.splice(chosenIdx, 1);
571 }
572
573 return chosen;
574 };
575
576 // -- End Helpers --
577
578 // -- Text --
579
580 Chance.prototype.paragraph = function (options) {
581 options = initOptions(options);
582
583 var sentences = options.sentences || this.natural({min: 3, max: 7}),
584 sentence_array = this.n(this.sentence, sentences);
585
586 return sentence_array.join(' ');
587 };
588
589 // Could get smarter about this than generating random words and
590 // chaining them together. Such as: http://vq.io/1a5ceOh
591 Chance.prototype.sentence = function (options) {
592 options = initOptions(options);
593
594 var words = options.words || this.natural({min: 12, max: 18}),
595 punctuation = options.punctuation,
596 text, word_array = this.n(this.word, words);
597
598 text = word_array.join(' ');
599
600 // Capitalize first letter of sentence
601 text = this.capitalize(text);
602
603 // Make sure punctuation has a usable value
604 if (punctuation !== false && !/^[\.\?;!:]$/.test(punctuation)) {
605 punctuation = '.';
606 }
607
608 // Add punctuation mark
609 if (punctuation) {
610 text += punctuation;
611 }
612
613 return text;
614 };
615
616 Chance.prototype.syllable = function (options) {
617 options = initOptions(options);
618
619 var length = options.length || this.natural({min: 2, max: 3}),
620 consonants = 'bcdfghjklmnprstvwz', // consonants except hard to speak ones
621 vowels = 'aeiou', // vowels
622 all = consonants + vowels, // all
623 text = '',
624 chr;
625
626 // I'm sure there's a more elegant way to do this, but this works
627 // decently well.
628 for (var i = 0; i < length; i++) {
629 if (i === 0) {
630 // First character can be anything
631 chr = this.character({pool: all});
632 } else if (consonants.indexOf(chr) === -1) {
633 // Last character was a vowel, now we want a consonant
634 chr = this.character({pool: consonants});
635 } else {
636 // Last character was a consonant, now we want a vowel
637 chr = this.character({pool: vowels});
638 }
639
640 text += chr;
641 }
642
643 if (options.capitalize) {
644 text = this.capitalize(text);
645 }
646
647 return text;
648 };
649
650 Chance.prototype.word = function (options) {
651 options = initOptions(options);
652
653 testRange(
654 options.syllables && options.length,
655 "Chance: Cannot specify both syllables AND length."
656 );
657
658 var syllables = options.syllables || this.natural({min: 1, max: 3}),
659 text = '';
660
661 if (options.length) {
662 // Either bound word by length
663 do {
664 text += this.syllable();
665 } while (text.length < options.length);
666 text = text.substring(0, options.length);
667 } else {
668 // Or by number of syllables
669 for (var i = 0; i < syllables; i++) {
670 text += this.syllable();
671 }
672 }
673
674 if (options.capitalize) {
675 text = this.capitalize(text);
676 }
677
678 return text;
679 };
680
681 // -- End Text --
682
683 // -- Person --
684
685 Chance.prototype.age = function (options) {
686 options = initOptions(options);
687 var ageRange;
688
689 switch (options.type) {
690 case 'child':
691 ageRange = {min: 0, max: 12};
692 break;
693 case 'teen':
694 ageRange = {min: 13, max: 19};
695 break;
696 case 'adult':
697 ageRange = {min: 18, max: 65};
698 break;
699 case 'senior':
700 ageRange = {min: 65, max: 100};
701 break;
702 case 'all':
703 ageRange = {min: 0, max: 100};
704 break;
705 default:
706 ageRange = {min: 18, max: 65};
707 break;
708 }
709
710 return this.natural(ageRange);
711 };
712
713 Chance.prototype.birthday = function (options) {
714 var age = this.age(options);
715 var currentYear = new Date().getFullYear();
716
717 if (options && options.type) {
718 var min = new Date();
719 var max = new Date();
720 min.setFullYear(currentYear - age - 1);
721 max.setFullYear(currentYear - age);
722
723 options = initOptions(options, {
724 min: min,
725 max: max
726 });
727 } else {
728 options = initOptions(options, {
729 year: currentYear - age
730 });
731 }
732
733 return this.date(options);
734 };
735
736 // CPF; ID to identify taxpayers in Brazil
737 Chance.prototype.cpf = function (options) {
738 options = initOptions(options, {
739 formatted: true
740 });
741
742 var n = this.n(this.natural, 9, { max: 9 });
743 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;
744 d1 = 11 - (d1 % 11);
745 if (d1>=10) {
746 d1 = 0;
747 }
748 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;
749 d2 = 11 - (d2 % 11);
750 if (d2>=10) {
751 d2 = 0;
752 }
753 var cpf = ''+n[0]+n[1]+n[2]+'.'+n[3]+n[4]+n[5]+'.'+n[6]+n[7]+n[8]+'-'+d1+d2;
754 return options.formatted ? cpf : cpf.replace(/\D/g,'');
755 };
756
757 // CNPJ: ID to identify companies in Brazil
758 Chance.prototype.cnpj = function (options) {
759 options = initOptions(options, {
760 formatted: true
761 });
762
763 var n = this.n(this.natural, 12, { max: 12 });
764 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;
765 d1 = 11 - (d1 % 11);
766 if (d1<2) {
767 d1 = 0;
768 }
769 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;
770 d2 = 11 - (d2 % 11);
771 if (d2<2) {
772 d2 = 0;
773 }
774 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;
775 return options.formatted ? cnpj : cnpj.replace(/\D/g,'');
776 };
777
778 Chance.prototype.first = function (options) {
779 options = initOptions(options, {gender: this.gender(), nationality: 'en'});
780 return this.pick(this.get("firstNames")[options.gender.toLowerCase()][options.nationality.toLowerCase()]);
781 };
782
783 Chance.prototype.profession = function (options) {
784 options = initOptions(options);
785 if(options.rank){
786 return this.pick(['Apprentice ', 'Junior ', 'Senior ', 'Lead ']) + this.pick(this.get("profession"));
787 } else{
788 return this.pick(this.get("profession"));
789 }
790 };
791
792 Chance.prototype.company = function (){
793 return this.pick(this.get("company"));
794 };
795
796 Chance.prototype.gender = function (options) {
797 options = initOptions(options, {extraGenders: []});
798 return this.pick(['Male', 'Female'].concat(options.extraGenders));
799 };
800
801 Chance.prototype.last = function (options) {
802 options = initOptions(options, {nationality: '*'});
803 if (options.nationality === "*") {
804 var allLastNames = []
805 var lastNames = this.get("lastNames")
806 Object.keys(lastNames).forEach(function(key, i){
807 allLastNames = allLastNames.concat(lastNames[key])
808 })
809 return this.pick(allLastNames)
810 }
811 else {
812 return this.pick(this.get("lastNames")[options.nationality.toLowerCase()]);
813 }
814
815 };
816
817 Chance.prototype.israelId=function(){
818 var x=this.string({pool: '0123456789',length:8});
819 var y=0;
820 for (var i=0;i<x.length;i++){
821 var thisDigit= x[i] * (i/2===parseInt(i/2) ? 1 : 2);
822 thisDigit=this.pad(thisDigit,2).toString();
823 thisDigit=parseInt(thisDigit[0]) + parseInt(thisDigit[1]);
824 y=y+thisDigit;
825 }
826 x=x+(10-parseInt(y.toString().slice(-1))).toString().slice(-1);
827 return x;
828 };
829
830 Chance.prototype.mrz = function (options) {
831 var checkDigit = function (input) {
832 var alpha = "<ABCDEFGHIJKLMNOPQRSTUVWXYXZ".split(''),
833 multipliers = [ 7, 3, 1 ],
834 runningTotal = 0;
835
836 if (typeof input !== 'string') {
837 input = input.toString();
838 }
839
840 input.split('').forEach(function(character, idx) {
841 var pos = alpha.indexOf(character);
842
843 if(pos !== -1) {
844 character = pos === 0 ? 0 : pos + 9;
845 } else {
846 character = parseInt(character, 10);
847 }
848 character *= multipliers[idx % multipliers.length];
849 runningTotal += character;
850 });
851 return runningTotal % 10;
852 };
853 var generate = function (opts) {
854 var pad = function (length) {
855 return new Array(length + 1).join('<');
856 };
857 var number = [ 'P<',
858 opts.issuer,
859 opts.last.toUpperCase(),
860 '<<',
861 opts.first.toUpperCase(),
862 pad(39 - (opts.last.length + opts.first.length + 2)),
863 opts.passportNumber,
864 checkDigit(opts.passportNumber),
865 opts.nationality,
866 opts.dob,
867 checkDigit(opts.dob),
868 opts.gender,
869 opts.expiry,
870 checkDigit(opts.expiry),
871 pad(14),
872 checkDigit(pad(14)) ].join('');
873
874 return number +
875 (checkDigit(number.substr(44, 10) +
876 number.substr(57, 7) +
877 number.substr(65, 7)));
878 };
879
880 var that = this;
881
882 options = initOptions(options, {
883 first: this.first(),
884 last: this.last(),
885 passportNumber: this.integer({min: 100000000, max: 999999999}),
886 dob: (function () {
887 var date = that.birthday({type: 'adult'});
888 return [date.getFullYear().toString().substr(2),
889 that.pad(date.getMonth() + 1, 2),
890 that.pad(date.getDate(), 2)].join('');
891 }()),
892 expiry: (function () {
893 var date = new Date();
894 return [(date.getFullYear() + 5).toString().substr(2),
895 that.pad(date.getMonth() + 1, 2),
896 that.pad(date.getDate(), 2)].join('');
897 }()),
898 gender: this.gender() === 'Female' ? 'F': 'M',
899 issuer: 'GBR',
900 nationality: 'GBR'
901 });
902 return generate (options);
903 };
904
905 Chance.prototype.name = function (options) {
906 options = initOptions(options);
907
908 var first = this.first(options),
909 last = this.last(options),
910 name;
911
912 if (options.middle) {
913 name = first + ' ' + this.first(options) + ' ' + last;
914 } else if (options.middle_initial) {
915 name = first + ' ' + this.character({alpha: true, casing: 'upper'}) + '. ' + last;
916 } else {
917 name = first + ' ' + last;
918 }
919
920 if (options.prefix) {
921 name = this.prefix(options) + ' ' + name;
922 }
923
924 if (options.suffix) {
925 name = name + ' ' + this.suffix(options);
926 }
927
928 return name;
929 };
930
931 // Return the list of available name prefixes based on supplied gender.
932 // @todo introduce internationalization
933 Chance.prototype.name_prefixes = function (gender) {
934 gender = gender || "all";
935 gender = gender.toLowerCase();
936
937 var prefixes = [
938 { name: 'Doctor', abbreviation: 'Dr.' }
939 ];
940
941 if (gender === "male" || gender === "all") {
942 prefixes.push({ name: 'Mister', abbreviation: 'Mr.' });
943 }
944
945 if (gender === "female" || gender === "all") {
946 prefixes.push({ name: 'Miss', abbreviation: 'Miss' });
947 prefixes.push({ name: 'Misses', abbreviation: 'Mrs.' });
948 }
949
950 return prefixes;
951 };
952
953 // Alias for name_prefix
954 Chance.prototype.prefix = function (options) {
955 return this.name_prefix(options);
956 };
957
958 Chance.prototype.name_prefix = function (options) {
959 options = initOptions(options, { gender: "all" });
960 return options.full ?
961 this.pick(this.name_prefixes(options.gender)).name :
962 this.pick(this.name_prefixes(options.gender)).abbreviation;
963 };
964 //Hungarian ID number
965 Chance.prototype.HIDN= function(){
966 //Hungarian ID nuber structure: XXXXXXYY (X=number,Y=Capital Latin letter)
967 var idn_pool="0123456789";
968 var idn_chrs="ABCDEFGHIJKLMNOPQRSTUVWXYXZ";
969 var idn="";
970 idn+=this.string({pool:idn_pool,length:6});
971 idn+=this.string({pool:idn_chrs,length:2});
972 return idn;
973 };
974
975
976 Chance.prototype.ssn = function (options) {
977 options = initOptions(options, {ssnFour: false, dashes: true});
978 var ssn_pool = "1234567890",
979 ssn,
980 dash = options.dashes ? '-' : '';
981
982 if(!options.ssnFour) {
983 ssn = this.string({pool: ssn_pool, length: 3}) + dash +
984 this.string({pool: ssn_pool, length: 2}) + dash +
985 this.string({pool: ssn_pool, length: 4});
986 } else {
987 ssn = this.string({pool: ssn_pool, length: 4});
988 }
989 return ssn;
990 };
991
992 // Aadhar is similar to ssn, used in India to uniquely identify a person
993 Chance.prototype.aadhar = function (options) {
994 options = initOptions(options, {onlyLastFour: false, separatedByWhiteSpace: true});
995 var aadhar_pool = "1234567890",
996 aadhar,
997 whiteSpace = options.separatedByWhiteSpace ? ' ' : '';
998
999 if(!options.onlyLastFour) {
1000 aadhar = this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1001 this.string({pool: aadhar_pool, length: 4}) + whiteSpace +
1002 this.string({pool: aadhar_pool, length: 4});
1003 } else {
1004 aadhar = this.string({pool: aadhar_pool, length: 4});
1005 }
1006 return aadhar;
1007 };
1008
1009 // Return the list of available name suffixes
1010 // @todo introduce internationalization
1011 Chance.prototype.name_suffixes = function () {
1012 var suffixes = [
1013 { name: 'Doctor of Osteopathic Medicine', abbreviation: 'D.O.' },
1014 { name: 'Doctor of Philosophy', abbreviation: 'Ph.D.' },
1015 { name: 'Esquire', abbreviation: 'Esq.' },
1016 { name: 'Junior', abbreviation: 'Jr.' },
1017 { name: 'Juris Doctor', abbreviation: 'J.D.' },
1018 { name: 'Master of Arts', abbreviation: 'M.A.' },
1019 { name: 'Master of Business Administration', abbreviation: 'M.B.A.' },
1020 { name: 'Master of Science', abbreviation: 'M.S.' },
1021 { name: 'Medical Doctor', abbreviation: 'M.D.' },
1022 { name: 'Senior', abbreviation: 'Sr.' },
1023 { name: 'The Third', abbreviation: 'III' },
1024 { name: 'The Fourth', abbreviation: 'IV' },
1025 { name: 'Bachelor of Engineering', abbreviation: 'B.E' },
1026 { name: 'Bachelor of Technology', abbreviation: 'B.TECH' }
1027 ];
1028 return suffixes;
1029 };
1030
1031 // Alias for name_suffix
1032 Chance.prototype.suffix = function (options) {
1033 return this.name_suffix(options);
1034 };
1035
1036 Chance.prototype.name_suffix = function (options) {
1037 options = initOptions(options);
1038 return options.full ?
1039 this.pick(this.name_suffixes()).name :
1040 this.pick(this.name_suffixes()).abbreviation;
1041 };
1042
1043 Chance.prototype.nationalities = function () {
1044 return this.get("nationalities");
1045 };
1046
1047 // Generate random nationality based on json list
1048 Chance.prototype.nationality = function () {
1049 var nationality = this.pick(this.nationalities());
1050 return nationality.name;
1051 };
1052
1053 // -- End Person --
1054
1055 // -- Mobile --
1056 // Android GCM Registration ID
1057 Chance.prototype.android_id = function () {
1058 return "APA91" + this.string({ pool: "0123456789abcefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_", length: 178 });
1059 };
1060
1061 // Apple Push Token
1062 Chance.prototype.apple_token = function () {
1063 return this.string({ pool: "abcdef1234567890", length: 64 });
1064 };
1065
1066 // Windows Phone 8 ANID2
1067 Chance.prototype.wp8_anid2 = function () {
1068 return base64( this.hash( { length : 32 } ) );
1069 };
1070
1071 // Windows Phone 7 ANID
1072 Chance.prototype.wp7_anid = function () {
1073 return 'A=' + this.guid().replace(/-/g, '').toUpperCase() + '&E=' + this.hash({ length:3 }) + '&W=' + this.integer({ min:0, max:9 });
1074 };
1075
1076 // BlackBerry Device PIN
1077 Chance.prototype.bb_pin = function () {
1078 return this.hash({ length: 8 });
1079 };
1080
1081 // -- End Mobile --
1082
1083 // -- Web --
1084 Chance.prototype.avatar = function (options) {
1085 var url = null;
1086 var URL_BASE = '//www.gravatar.com/avatar/';
1087 var PROTOCOLS = {
1088 http: 'http',
1089 https: 'https'
1090 };
1091 var FILE_TYPES = {
1092 bmp: 'bmp',
1093 gif: 'gif',
1094 jpg: 'jpg',
1095 png: 'png'
1096 };
1097 var FALLBACKS = {
1098 '404': '404', // Return 404 if not found
1099 mm: 'mm', // Mystery man
1100 identicon: 'identicon', // Geometric pattern based on hash
1101 monsterid: 'monsterid', // A generated monster icon
1102 wavatar: 'wavatar', // A generated face
1103 retro: 'retro', // 8-bit icon
1104 blank: 'blank' // A transparent png
1105 };
1106 var RATINGS = {
1107 g: 'g',
1108 pg: 'pg',
1109 r: 'r',
1110 x: 'x'
1111 };
1112 var opts = {
1113 protocol: null,
1114 email: null,
1115 fileExtension: null,
1116 size: null,
1117 fallback: null,
1118 rating: null
1119 };
1120
1121 if (!options) {
1122 // Set to a random email
1123 opts.email = this.email();
1124 options = {};
1125 }
1126 else if (typeof options === 'string') {
1127 opts.email = options;
1128 options = {};
1129 }
1130 else if (typeof options !== 'object') {
1131 return null;
1132 }
1133 else if (options.constructor === 'Array') {
1134 return null;
1135 }
1136
1137 opts = initOptions(options, opts);
1138
1139 if (!opts.email) {
1140 // Set to a random email
1141 opts.email = this.email();
1142 }
1143
1144 // Safe checking for params
1145 opts.protocol = PROTOCOLS[opts.protocol] ? opts.protocol + ':' : '';
1146 opts.size = parseInt(opts.size, 0) ? opts.size : '';
1147 opts.rating = RATINGS[opts.rating] ? opts.rating : '';
1148 opts.fallback = FALLBACKS[opts.fallback] ? opts.fallback : '';
1149 opts.fileExtension = FILE_TYPES[opts.fileExtension] ? opts.fileExtension : '';
1150
1151 url =
1152 opts.protocol +
1153 URL_BASE +
1154 this.bimd5.md5(opts.email) +
1155 (opts.fileExtension ? '.' + opts.fileExtension : '') +
1156 (opts.size || opts.rating || opts.fallback ? '?' : '') +
1157 (opts.size ? '&s=' + opts.size.toString() : '') +
1158 (opts.rating ? '&r=' + opts.rating : '') +
1159 (opts.fallback ? '&d=' + opts.fallback : '')
1160 ;
1161
1162 return url;
1163 };
1164
1165 /**
1166 * #Description:
1167 * ===============================================
1168 * Generate random color value base on color type:
1169 * -> hex
1170 * -> rgb
1171 * -> rgba
1172 * -> 0x
1173 * -> named color
1174 *
1175 * #Examples:
1176 * ===============================================
1177 * * Geerate random hex color
1178 * chance.color() => '#79c157' / 'rgb(110,52,164)' / '0x67ae0b' / '#e2e2e2' / '#29CFA7'
1179 *
1180 * * Generate Hex based color value
1181 * chance.color({format: 'hex'}) => '#d67118'
1182 *
1183 * * Generate simple rgb value
1184 * chance.color({format: 'rgb'}) => 'rgb(110,52,164)'
1185 *
1186 * * Generate Ox based color value
1187 * chance.color({format: '0x'}) => '0x67ae0b'
1188 *
1189 * * Generate graiscale based value
1190 * chance.color({grayscale: true}) => '#e2e2e2'
1191 *
1192 * * Return valide color name
1193 * chance.color({format: 'name'}) => 'red'
1194 *
1195 * * Make color uppercase
1196 * chance.color({casing: 'upper'}) => '#29CFA7'
1197 *
1198 * * Min Max values for RGBA
1199 * 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});
1200 *
1201 * @param [object] options
1202 * @return [string] color value
1203 */
1204 Chance.prototype.color = function (options) {
1205 function gray(value, delimiter) {
1206 return [value, value, value].join(delimiter || '');
1207 }
1208
1209 function rgb(hasAlpha) {
1210 var rgbValue = (hasAlpha) ? 'rgba' : 'rgb';
1211 var alphaChannel = (hasAlpha) ? (',' + this.floating({min:min_alpha, max:max_alpha})) : "";
1212 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}));
1213 return rgbValue + '(' + colorValue + alphaChannel + ')';
1214 }
1215
1216 function hex(start, end, withHash) {
1217 var symbol = (withHash) ? "#" : "";
1218 var hexstring = "";
1219
1220 if (isGrayscale) {
1221 hexstring = gray(this.pad(this.hex({min: min_rgb, max: max_rgb}), 2));
1222 if (options.format === "shorthex") {
1223 hexstring = gray(this.hex({min: 0, max: 15}));
1224 }
1225 }
1226 else {
1227 if (options.format === "shorthex") {
1228 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);
1229 }
1230 else if (min_red !== undefined || max_red !== undefined || min_green !== undefined || max_green !== undefined || min_blue !== undefined || max_blue !== undefined) {
1231 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);
1232 }
1233 else {
1234 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);
1235 }
1236 }
1237
1238 return symbol + hexstring;
1239 }
1240
1241 options = initOptions(options, {
1242 format: this.pick(['hex', 'shorthex', 'rgb', 'rgba', '0x', 'name']),
1243 grayscale: false,
1244 casing: 'lower',
1245 min: 0,
1246 max: 255,
1247 min_red: undefined,
1248 max_red: undefined,
1249 min_green: undefined,
1250 max_green: undefined,
1251 min_blue: undefined,
1252 max_blue: undefined,
1253 min_alpha: 0,
1254 max_alpha: 1
1255 });
1256
1257 var isGrayscale = options.grayscale;
1258 var min_rgb = options.min;
1259 var max_rgb = options.max;
1260 var min_red = options.min_red;
1261 var max_red = options.max_red;
1262 var min_green = options.min_green;
1263 var max_green = options.max_green;
1264 var min_blue = options.min_blue;
1265 var max_blue = options.max_blue;
1266 var min_alpha = options.min_alpha;
1267 var max_alpha = options.max_alpha;
1268 if (options.min_red === undefined) { min_red = min_rgb; }
1269 if (options.max_red === undefined) { max_red = max_rgb; }
1270 if (options.min_green === undefined) { min_green = min_rgb; }
1271 if (options.max_green === undefined) { max_green = max_rgb; }
1272 if (options.min_blue === undefined) { min_blue = min_rgb; }
1273 if (options.max_blue === undefined) { max_blue = max_rgb; }
1274 if (options.min_alpha === undefined) { min_alpha = 0; }
1275 if (options.max_alpha === undefined) { max_alpha = 1; }
1276 if (isGrayscale && min_rgb === 0 && max_rgb === 255 && min_red !== undefined && max_red !== undefined) {
1277 min_rgb = ((min_red + min_green + min_blue) / 3);
1278 max_rgb = ((max_red + max_green + max_blue) / 3);
1279 }
1280 var colorValue;
1281
1282 if (options.format === 'hex') {
1283 colorValue = hex.call(this, 2, 6, true);
1284 }
1285 else if (options.format === 'shorthex') {
1286 colorValue = hex.call(this, 1, 3, true);
1287 }
1288 else if (options.format === 'rgb') {
1289 colorValue = rgb.call(this, false);
1290 }
1291 else if (options.format === 'rgba') {
1292 colorValue = rgb.call(this, true);
1293 }
1294 else if (options.format === '0x') {
1295 colorValue = '0x' + hex.call(this, 2, 6);
1296 }
1297 else if(options.format === 'name') {
1298 return this.pick(this.get("colorNames"));
1299 }
1300 else {
1301 throw new RangeError('Invalid format provided. Please provide one of "hex", "shorthex", "rgb", "rgba", "0x" or "name".');
1302 }
1303
1304 if (options.casing === 'upper' ) {
1305 colorValue = colorValue.toUpperCase();
1306 }
1307
1308 return colorValue;
1309 };
1310
1311 Chance.prototype.domain = function (options) {
1312 options = initOptions(options);
1313 return this.word() + '.' + (options.tld || this.tld());
1314 };
1315
1316 Chance.prototype.email = function (options) {
1317 options = initOptions(options);
1318 return this.word({length: options.length}) + '@' + (options.domain || this.domain());
1319 };
1320
1321 /**
1322 * #Description:
1323 * ===============================================
1324 * Generate a random Facebook id, aka fbid.
1325 *
1326 * NOTE: At the moment (Sep 2017), Facebook ids are
1327 * "numeric strings" of length 16.
1328 * However, Facebook Graph API documentation states that
1329 * "it is extremely likely to change over time".
1330 * @see https://developers.facebook.com/docs/graph-api/overview/
1331 *
1332 * #Examples:
1333 * ===============================================
1334 * chance.fbid() => '1000035231661304'
1335 *
1336 * @return [string] facebook id
1337 */
1338 Chance.prototype.fbid = function () {
1339 return '10000' + this.string({pool: "1234567890", length: 11});
1340 };
1341
1342 Chance.prototype.google_analytics = function () {
1343 var account = this.pad(this.natural({max: 999999}), 6);
1344 var property = this.pad(this.natural({max: 99}), 2);
1345
1346 return 'UA-' + account + '-' + property;
1347 };
1348
1349 Chance.prototype.hashtag = function () {
1350 return '#' + this.word();
1351 };
1352
1353 Chance.prototype.ip = function () {
1354 // Todo: This could return some reserved IPs. See http://vq.io/137dgYy
1355 // this should probably be updated to account for that rare as it may be
1356 return this.natural({min: 1, max: 254}) + '.' +
1357 this.natural({max: 255}) + '.' +
1358 this.natural({max: 255}) + '.' +
1359 this.natural({min: 1, max: 254});
1360 };
1361
1362 Chance.prototype.ipv6 = function () {
1363 var ip_addr = this.n(this.hash, 8, {length: 4});
1364
1365 return ip_addr.join(":");
1366 };
1367
1368 Chance.prototype.klout = function () {
1369 return this.natural({min: 1, max: 99});
1370 };
1371
1372 Chance.prototype.semver = function (options) {
1373 options = initOptions(options, { include_prerelease: true });
1374
1375 var range = this.pickone(["^", "~", "<", ">", "<=", ">=", "="]);
1376 if (options.range) {
1377 range = options.range;
1378 }
1379
1380 var prerelease = "";
1381 if (options.include_prerelease) {
1382 prerelease = this.weighted(["", "-dev", "-beta", "-alpha"], [50, 10, 5, 1]);
1383 }
1384 return range + this.rpg('3d10').join('.') + prerelease;
1385 };
1386
1387 Chance.prototype.tlds = function () {
1388 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'];
1389 };
1390
1391 Chance.prototype.tld = function () {
1392 return this.pick(this.tlds());
1393 };
1394
1395 Chance.prototype.twitter = function () {
1396 return '@' + this.word();
1397 };
1398
1399 Chance.prototype.url = function (options) {
1400 options = initOptions(options, { protocol: "http", domain: this.domain(options), domain_prefix: "", path: this.word(), extensions: []});
1401
1402 var extension = options.extensions.length > 0 ? "." + this.pick(options.extensions) : "";
1403 var domain = options.domain_prefix ? options.domain_prefix + "." + options.domain : options.domain;
1404
1405 return options.protocol + "://" + domain + "/" + options.path + extension;
1406 };
1407
1408 Chance.prototype.port = function() {
1409 return this.integer({min: 0, max: 65535});
1410 };
1411
1412 Chance.prototype.locale = function (options) {
1413 options = initOptions(options);
1414 if (options.region){
1415 return this.pick(this.get("locale_regions"));
1416 } else {
1417 return this.pick(this.get("locale_languages"));
1418 }
1419 };
1420
1421 Chance.prototype.locales = function (options) {
1422 options = initOptions(options);
1423 if (options.region){
1424 return this.get("locale_regions");
1425 } else {
1426 return this.get("locale_languages");
1427 }
1428 };
1429
1430 Chance.prototype.loremPicsum = function (options) {
1431 options = initOptions(options, { width: 500, height: 500, greyscale: false, blurred: false });
1432
1433 var greyscale = options.greyscale ? 'g/' : '';
1434 var query = options.blurred ? '/?blur' : '/?random';
1435
1436 return 'https://picsum.photos/' + greyscale + options.width + '/' + options.height + query;
1437 }
1438
1439 // -- End Web --
1440
1441 // -- Location --
1442
1443 Chance.prototype.address = function (options) {
1444 options = initOptions(options);
1445 return this.natural({min: 5, max: 2000}) + ' ' + this.street(options);
1446 };
1447
1448 Chance.prototype.altitude = function (options) {
1449 options = initOptions(options, {fixed: 5, min: 0, max: 8848});
1450 return this.floating({
1451 min: options.min,
1452 max: options.max,
1453 fixed: options.fixed
1454 });
1455 };
1456
1457 Chance.prototype.areacode = function (options) {
1458 options = initOptions(options, {parens : true});
1459 // Don't want area codes to start with 1, or have a 9 as the second digit
1460 var areacode = this.natural({min: 2, max: 9}).toString() +
1461 this.natural({min: 0, max: 8}).toString() +
1462 this.natural({min: 0, max: 9}).toString();
1463
1464 return options.parens ? '(' + areacode + ')' : areacode;
1465 };
1466
1467 Chance.prototype.city = function () {
1468 return this.capitalize(this.word({syllables: 3}));
1469 };
1470
1471 Chance.prototype.coordinates = function (options) {
1472 return this.latitude(options) + ', ' + this.longitude(options);
1473 };
1474
1475 Chance.prototype.countries = function () {
1476 return this.get("countries");
1477 };
1478
1479 Chance.prototype.country = function (options) {
1480 options = initOptions(options);
1481 var country = this.pick(this.countries());
1482 return options.raw ? country : options.full ? country.name : country.abbreviation;
1483 };
1484
1485 Chance.prototype.depth = function (options) {
1486 options = initOptions(options, {fixed: 5, min: -10994, max: 0});
1487 return this.floating({
1488 min: options.min,
1489 max: options.max,
1490 fixed: options.fixed
1491 });
1492 };
1493
1494 Chance.prototype.geohash = function (options) {
1495 options = initOptions(options, { length: 7 });
1496 return this.string({ length: options.length, pool: '0123456789bcdefghjkmnpqrstuvwxyz' });
1497 };
1498
1499 Chance.prototype.geojson = function (options) {
1500 return this.latitude(options) + ', ' + this.longitude(options) + ', ' + this.altitude(options);
1501 };
1502
1503 Chance.prototype.latitude = function (options) {
1504 options = initOptions(options, {fixed: 5, min: -90, max: 90});
1505 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1506 };
1507
1508 Chance.prototype.longitude = function (options) {
1509 options = initOptions(options, {fixed: 5, min: -180, max: 180});
1510 return this.floating({min: options.min, max: options.max, fixed: options.fixed});
1511 };
1512
1513 Chance.prototype.phone = function (options) {
1514 var self = this,
1515 numPick,
1516 ukNum = function (parts) {
1517 var section = [];
1518 //fills the section part of the phone number with random numbers.
1519 parts.sections.forEach(function(n) {
1520 section.push(self.string({ pool: '0123456789', length: n}));
1521 });
1522 return parts.area + section.join(' ');
1523 };
1524 options = initOptions(options, {
1525 formatted: true,
1526 country: 'us',
1527 mobile: false
1528 });
1529 if (!options.formatted) {
1530 options.parens = false;
1531 }
1532 var phone;
1533 switch (options.country) {
1534 case 'fr':
1535 if (!options.mobile) {
1536 numPick = this.pick([
1537 // Valid zone and département codes.
1538 '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}),
1539 '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}),
1540 '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}),
1541 '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}),
1542 '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}),
1543 '09' + self.string({ pool: '0123456789', length: 8}),
1544 ]);
1545 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1546 } else {
1547 numPick = this.pick(['06', '07']) + self.string({ pool: '0123456789', length: 8});
1548 phone = options.formatted ? numPick.match(/../g).join(' ') : numPick;
1549 }
1550 break;
1551 case 'uk':
1552 if (!options.mobile) {
1553 numPick = this.pick([
1554 //valid area codes of major cities/counties followed by random numbers in required format.
1555
1556 { area: '01' + this.character({ pool: '234569' }) + '1 ', sections: [3,4] },
1557 { area: '020 ' + this.character({ pool: '378' }), sections: [3,4] },
1558 { area: '023 ' + this.character({ pool: '89' }), sections: [3,4] },
1559 { area: '024 7', sections: [3,4] },
1560 { area: '028 ' + this.pick(['25','28','37','71','82','90','92','95']), sections: [2,4] },
1561 { area: '012' + this.pick(['04','08','54','76','97','98']) + ' ', sections: [6] },
1562 { area: '013' + this.pick(['63','64','84','86']) + ' ', sections: [6] },
1563 { area: '014' + this.pick(['04','20','60','61','80','88']) + ' ', sections: [6] },
1564 { area: '015' + this.pick(['24','27','62','66']) + ' ', sections: [6] },
1565 { area: '016' + this.pick(['06','29','35','47','59','95']) + ' ', sections: [6] },
1566 { area: '017' + this.pick(['26','44','50','68']) + ' ', sections: [6] },
1567 { area: '018' + this.pick(['27','37','84','97']) + ' ', sections: [6] },
1568 { area: '019' + this.pick(['00','05','35','46','49','63','95']) + ' ', sections: [6] }
1569 ]);
1570 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '', 'g');
1571 } else {
1572 numPick = this.pick([
1573 { area: '07' + this.pick(['4','5','7','8','9']), sections: [2,6] },
1574 { area: '07624 ', sections: [6] }
1575 ]);
1576 phone = options.formatted ? ukNum(numPick) : ukNum(numPick).replace(' ', '');
1577 }
1578 break;
1579 case 'za':
1580 if (!options.mobile) {
1581 numPick = this.pick([
1582 '01' + this.pick(['0', '1', '2', '3', '4', '5', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1583 '02' + this.pick(['1', '2', '3', '4', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1584 '03' + this.pick(['1', '2', '3', '5', '6', '9']) + self.string({ pool: '0123456789', length: 7}),
1585 '04' + this.pick(['1', '2', '3', '4', '5','6','7', '8','9']) + self.string({ pool: '0123456789', length: 7}),
1586 '05' + this.pick(['1', '3', '4', '6', '7', '8']) + self.string({ pool: '0123456789', length: 7}),
1587 ]);
1588 phone = options.formatted || numPick;
1589 } else {
1590 numPick = this.pick([
1591 '060' + this.pick(['3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1592 '061' + this.pick(['0','1','2','3','4','5','8']) + self.string({ pool: '0123456789', length: 6}),
1593 '06' + self.string({ pool: '0123456789', length: 7}),
1594 '071' + this.pick(['0','1','2','3','4','5','6','7','8','9']) + self.string({ pool: '0123456789', length: 6}),
1595 '07' + this.pick(['2','3','4','6','7','8','9']) + self.string({ pool: '0123456789', length: 7}),
1596 '08' + this.pick(['0','1','2','3','4','5']) + self.string({ pool: '0123456789', length: 7}),
1597 ]);
1598 phone = options.formatted || numPick;
1599 }
1600 break;
1601 case 'us':
1602 var areacode = this.areacode(options).toString();
1603 var exchange = this.natural({ min: 2, max: 9 }).toString() +
1604 this.natural({ min: 0, max: 9 }).toString() +
1605 this.natural({ min: 0, max: 9 }).toString();
1606 var subscriber = this.natural({ min: 1000, max: 9999 }).toString(); // this could be random [0-9]{4}
1607 phone = options.formatted ? areacode + ' ' + exchange + '-' + subscriber : areacode + exchange + subscriber;
1608 break;
1609 case 'br':
1610 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"]);
1611 var prefix;
1612 if (options.mobile) {
1613 // Brasilian official reference (mobile): http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=330
1614 prefix = '9' + self.string({ pool: '0123456789', length: 4});
1615 } else {
1616 // Brasilian official reference: http://www.anatel.gov.br/setorregulado/plano-de-numeracao-brasileiro?id=331
1617 prefix = this.natural({ min: 2000, max: 5999 }).toString();
1618 }
1619 var mcdu = self.string({ pool: '0123456789', length: 4});
1620 phone = options.formatted ? '(' + areaCode + ') ' + prefix + '-' + mcdu : areaCode + prefix + mcdu;
1621 break;
1622 }
1623 return phone;
1624 };
1625
1626 Chance.prototype.postal = function () {
1627 // Postal District
1628 var pd = this.character({pool: "XVTSRPNKLMHJGECBA"});
1629 // Forward Sortation Area (FSA)
1630 var fsa = pd + this.natural({max: 9}) + this.character({alpha: true, casing: "upper"});
1631 // Local Delivery Unut (LDU)
1632 var ldu = this.natural({max: 9}) + this.character({alpha: true, casing: "upper"}) + this.natural({max: 9});
1633
1634 return fsa + " " + ldu;
1635 };
1636
1637 Chance.prototype.counties = function (options) {
1638 options = initOptions(options, { country: 'uk' });
1639 return this.get("counties")[options.country.toLowerCase()];
1640 };
1641
1642 Chance.prototype.county = function (options) {
1643 return this.pick(this.counties(options)).name;
1644 };
1645
1646 Chance.prototype.provinces = function (options) {
1647 options = initOptions(options, { country: 'ca' });
1648 return this.get("provinces")[options.country.toLowerCase()];
1649 };
1650
1651 Chance.prototype.province = function (options) {
1652 return (options && options.full) ?
1653 this.pick(this.provinces(options)).name :
1654 this.pick(this.provinces(options)).abbreviation;
1655 };
1656
1657 Chance.prototype.state = function (options) {
1658 return (options && options.full) ?
1659 this.pick(this.states(options)).name :
1660 this.pick(this.states(options)).abbreviation;
1661 };
1662
1663 Chance.prototype.states = function (options) {
1664 options = initOptions(options, { country: 'us', us_states_and_dc: true } );
1665
1666 var states;
1667
1668 switch (options.country.toLowerCase()) {
1669 case 'us':
1670 var us_states_and_dc = this.get("us_states_and_dc"),
1671 territories = this.get("territories"),
1672 armed_forces = this.get("armed_forces");
1673
1674 states = [];
1675
1676 if (options.us_states_and_dc) {
1677 states = states.concat(us_states_and_dc);
1678 }
1679 if (options.territories) {
1680 states = states.concat(territories);
1681 }
1682 if (options.armed_forces) {
1683 states = states.concat(armed_forces);
1684 }
1685 break;
1686 case 'it':
1687 states = this.get("country_regions")[options.country.toLowerCase()];
1688 break;
1689 case 'uk':
1690 states = this.get("counties")[options.country.toLowerCase()];
1691 break;
1692 }
1693
1694 return states;
1695 };
1696
1697 Chance.prototype.street = function (options) {
1698 options = initOptions(options, { country: 'us', syllables: 2 });
1699 var street;
1700
1701 switch (options.country.toLowerCase()) {
1702 case 'us':
1703 street = this.word({ syllables: options.syllables });
1704 street = this.capitalize(street);
1705 street += ' ';
1706 street += options.short_suffix ?
1707 this.street_suffix(options).abbreviation :
1708 this.street_suffix(options).name;
1709 break;
1710 case 'it':
1711 street = this.word({ syllables: options.syllables });
1712 street = this.capitalize(street);
1713 street = (options.short_suffix ?
1714 this.street_suffix(options).abbreviation :
1715 this.street_suffix(options).name) + " " + street;
1716 break;
1717 }
1718 return street;
1719 };
1720
1721 Chance.prototype.street_suffix = function (options) {
1722 options = initOptions(options, { country: 'us' });
1723 return this.pick(this.street_suffixes(options));
1724 };
1725
1726 Chance.prototype.street_suffixes = function (options) {
1727 options = initOptions(options, { country: 'us' });
1728 // These are the most common suffixes.
1729 return this.get("street_suffixes")[options.country.toLowerCase()];
1730 };
1731
1732 // Note: only returning US zip codes, internationalization will be a whole
1733 // other beast to tackle at some point.
1734 Chance.prototype.zip = function (options) {
1735 var zip = this.n(this.natural, 5, {max: 9});
1736
1737 if (options && options.plusfour === true) {
1738 zip.push('-');
1739 zip = zip.concat(this.n(this.natural, 4, {max: 9}));
1740 }
1741
1742 return zip.join("");
1743 };
1744
1745 // -- End Location --
1746
1747 // -- Time
1748
1749 Chance.prototype.ampm = function () {
1750 return this.bool() ? 'am' : 'pm';
1751 };
1752
1753 Chance.prototype.date = function (options) {
1754 var date_string, date;
1755
1756 // If interval is specified we ignore preset
1757 if(options && (options.min || options.max)) {
1758 options = initOptions(options, {
1759 american: true,
1760 string: false
1761 });
1762 var min = typeof options.min !== "undefined" ? options.min.getTime() : 1;
1763 // 100,000,000 days measured relative to midnight at the beginning of 01 January, 1970 UTC. http://es5.github.io/#x15.9.1.1
1764 var max = typeof options.max !== "undefined" ? options.max.getTime() : 8640000000000000;
1765
1766 date = new Date(this.integer({min: min, max: max}));
1767 } else {
1768 var m = this.month({raw: true});
1769 var daysInMonth = m.days;
1770
1771 if(options && options.month) {
1772 // Mod 12 to allow months outside range of 0-11 (not encouraged, but also not prevented).
1773 daysInMonth = this.get('months')[((options.month % 12) + 12) % 12].days;
1774 }
1775
1776 options = initOptions(options, {
1777 year: parseInt(this.year(), 10),
1778 // Necessary to subtract 1 because Date() 0-indexes month but not day or year
1779 // for some reason.
1780 month: m.numeric - 1,
1781 day: this.natural({min: 1, max: daysInMonth}),
1782 hour: this.hour({twentyfour: true}),
1783 minute: this.minute(),
1784 second: this.second(),
1785 millisecond: this.millisecond(),
1786 american: true,
1787 string: false
1788 });
1789
1790 date = new Date(options.year, options.month, options.day, options.hour, options.minute, options.second, options.millisecond);
1791 }
1792
1793 if (options.american) {
1794 // Adding 1 to the month is necessary because Date() 0-indexes
1795 // months but not day for some odd reason.
1796 date_string = (date.getMonth() + 1) + '/' + date.getDate() + '/' + date.getFullYear();
1797 } else {
1798 date_string = date.getDate() + '/' + (date.getMonth() + 1) + '/' + date.getFullYear();
1799 }
1800
1801 return options.string ? date_string : date;
1802 };
1803
1804 Chance.prototype.hammertime = function (options) {
1805 return this.date(options).getTime();
1806 };
1807
1808 Chance.prototype.hour = function (options) {
1809 options = initOptions(options, {
1810 min: options && options.twentyfour ? 0 : 1,
1811 max: options && options.twentyfour ? 23 : 12
1812 });
1813
1814 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1815 testRange(options.twentyfour && options.max > 23, "Chance: Max cannot be greater than 23 for twentyfour option.");
1816 testRange(!options.twentyfour && options.max > 12, "Chance: Max cannot be greater than 12.");
1817 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1818
1819 return this.natural({min: options.min, max: options.max});
1820 };
1821
1822 Chance.prototype.millisecond = function () {
1823 return this.natural({max: 999});
1824 };
1825
1826 Chance.prototype.minute = Chance.prototype.second = function (options) {
1827 options = initOptions(options, {min: 0, max: 59});
1828
1829 testRange(options.min < 0, "Chance: Min cannot be less than 0.");
1830 testRange(options.max > 59, "Chance: Max cannot be greater than 59.");
1831 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1832
1833 return this.natural({min: options.min, max: options.max});
1834 };
1835
1836 Chance.prototype.month = function (options) {
1837 options = initOptions(options, {min: 1, max: 12});
1838
1839 testRange(options.min < 1, "Chance: Min cannot be less than 1.");
1840 testRange(options.max > 12, "Chance: Max cannot be greater than 12.");
1841 testRange(options.min > options.max, "Chance: Min cannot be greater than Max.");
1842
1843 var month = this.pick(this.months().slice(options.min - 1, options.max));
1844 return options.raw ? month : month.name;
1845 };
1846
1847 Chance.prototype.months = function () {
1848 return this.get("months");
1849 };
1850
1851 Chance.prototype.second = function () {
1852 return this.natural({max: 59});
1853 };
1854
1855 Chance.prototype.timestamp = function () {
1856 return this.natural({min: 1, max: parseInt(new Date().getTime() / 1000, 10)});
1857 };
1858
1859 Chance.prototype.weekday = function (options) {
1860 options = initOptions(options, {weekday_only: false});
1861 var weekdays = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
1862 if (!options.weekday_only) {
1863 weekdays.push("Saturday");
1864 weekdays.push("Sunday");
1865 }
1866 return this.pickone(weekdays);
1867 };
1868
1869 Chance.prototype.year = function (options) {
1870 // Default to current year as min if none specified
1871 options = initOptions(options, {min: new Date().getFullYear()});
1872
1873 // Default to one century after current year as max if none specified
1874 options.max = (typeof options.max !== "undefined") ? options.max : options.min + 100;
1875
1876 return this.natural(options).toString();
1877 };
1878
1879 // -- End Time
1880
1881 // -- Finance --
1882
1883 Chance.prototype.cc = function (options) {
1884 options = initOptions(options);
1885
1886 var type, number, to_generate;
1887
1888 type = (options.type) ?
1889 this.cc_type({ name: options.type, raw: true }) :
1890 this.cc_type({ raw: true });
1891
1892 number = type.prefix.split("");
1893 to_generate = type.length - type.prefix.length - 1;
1894
1895 // Generates n - 1 digits
1896 number = number.concat(this.n(this.integer, to_generate, {min: 0, max: 9}));
1897
1898 // Generates the last digit according to Luhn algorithm
1899 number.push(this.luhn_calculate(number.join("")));
1900
1901 return number.join("");
1902 };
1903
1904 Chance.prototype.cc_types = function () {
1905 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
1906 return this.get("cc_types");
1907 };
1908
1909 Chance.prototype.cc_type = function (options) {
1910 options = initOptions(options);
1911 var types = this.cc_types(),
1912 type = null;
1913
1914 if (options.name) {
1915 for (var i = 0; i < types.length; i++) {
1916 // Accept either name or short_name to specify card type
1917 if (types[i].name === options.name || types[i].short_name === options.name) {
1918 type = types[i];
1919 break;
1920 }
1921 }
1922 if (type === null) {
1923 throw new RangeError("Chance: Credit card type '" + options.name + "' is not supported");
1924 }
1925 } else {
1926 type = this.pick(types);
1927 }
1928
1929 return options.raw ? type : type.name;
1930 };
1931
1932 // return all world currency by ISO 4217
1933 Chance.prototype.currency_types = function () {
1934 return this.get("currency_types");
1935 };
1936
1937 // return random world currency by ISO 4217
1938 Chance.prototype.currency = function () {
1939 return this.pick(this.currency_types());
1940 };
1941
1942 // return all timezones available
1943 Chance.prototype.timezones = function () {
1944 return this.get("timezones");
1945 };
1946
1947 // return random timezone
1948 Chance.prototype.timezone = function () {
1949 return this.pick(this.timezones());
1950 };
1951
1952 //Return random correct currency exchange pair (e.g. EUR/USD) or array of currency code
1953 Chance.prototype.currency_pair = function (returnAsString) {
1954 var currencies = this.unique(this.currency, 2, {
1955 comparator: function(arr, val) {
1956
1957 return arr.reduce(function(acc, item) {
1958 // If a match has been found, short circuit check and just return
1959 return acc || (item.code === val.code);
1960 }, false);
1961 }
1962 });
1963
1964 if (returnAsString) {
1965 return currencies[0].code + '/' + currencies[1].code;
1966 } else {
1967 return currencies;
1968 }
1969 };
1970
1971 Chance.prototype.dollar = function (options) {
1972 // By default, a somewhat more sane max for dollar than all available numbers
1973 options = initOptions(options, {max : 10000, min : 0});
1974
1975 var dollar = this.floating({min: options.min, max: options.max, fixed: 2}).toString(),
1976 cents = dollar.split('.')[1];
1977
1978 if (cents === undefined) {
1979 dollar += '.00';
1980 } else if (cents.length < 2) {
1981 dollar = dollar + '0';
1982 }
1983
1984 if (dollar < 0) {
1985 return '-$' + dollar.replace('-', '');
1986 } else {
1987 return '$' + dollar;
1988 }
1989 };
1990
1991 Chance.prototype.euro = function (options) {
1992 return Number(this.dollar(options).replace("$", "")).toLocaleString() + "€";
1993 };
1994
1995 Chance.prototype.exp = function (options) {
1996 options = initOptions(options);
1997 var exp = {};
1998
1999 exp.year = this.exp_year();
2000
2001 // If the year is this year, need to ensure month is greater than the
2002 // current month or this expiration will not be valid
2003 if (exp.year === (new Date().getFullYear()).toString()) {
2004 exp.month = this.exp_month({future: true});
2005 } else {
2006 exp.month = this.exp_month();
2007 }
2008
2009 return options.raw ? exp : exp.month + '/' + exp.year;
2010 };
2011
2012 Chance.prototype.exp_month = function (options) {
2013 options = initOptions(options);
2014 var month, month_int,
2015 // Date object months are 0 indexed
2016 curMonth = new Date().getMonth() + 1;
2017
2018 if (options.future && (curMonth !== 12)) {
2019 do {
2020 month = this.month({raw: true}).numeric;
2021 month_int = parseInt(month, 10);
2022 } while (month_int <= curMonth);
2023 } else {
2024 month = this.month({raw: true}).numeric;
2025 }
2026
2027 return month;
2028 };
2029
2030 Chance.prototype.exp_year = function () {
2031 var curMonth = new Date().getMonth() + 1,
2032 curYear = new Date().getFullYear();
2033
2034 return this.year({min: ((curMonth === 12) ? (curYear + 1) : curYear), max: (curYear + 10)});
2035 };
2036
2037 Chance.prototype.vat = function (options) {
2038 options = initOptions(options, { country: 'it' });
2039 switch (options.country.toLowerCase()) {
2040 case 'it':
2041 return this.it_vat();
2042 }
2043 };
2044
2045 /**
2046 * Generate a string matching IBAN pattern (https://en.wikipedia.org/wiki/International_Bank_Account_Number).
2047 * No country-specific formats support (yet)
2048 */
2049 Chance.prototype.iban = function () {
2050 var alpha = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
2051 var alphanum = alpha + '0123456789';
2052 var iban =
2053 this.string({ length: 2, pool: alpha }) +
2054 this.pad(this.integer({ min: 0, max: 99 }), 2) +
2055 this.string({ length: 4, pool: alphanum }) +
2056 this.pad(this.natural(), this.natural({ min: 6, max: 26 }));
2057 return iban;
2058 };
2059
2060 // -- End Finance
2061
2062 // -- Regional
2063
2064 Chance.prototype.it_vat = function () {
2065 var it_vat = this.natural({min: 1, max: 1800000});
2066
2067 it_vat = this.pad(it_vat, 7) + this.pad(this.pick(this.provinces({ country: 'it' })).code, 3);
2068 return it_vat + this.luhn_calculate(it_vat);
2069 };
2070
2071 /*
2072 * this generator is written following the official algorithm
2073 * all data can be passed explicitely or randomized by calling chance.cf() without options
2074 * the code does not check that the input data is valid (it goes beyond the scope of the generator)
2075 *
2076 * @param [Object] options = { first: first name,
2077 * last: last name,
2078 * gender: female|male,
2079 birthday: JavaScript date object,
2080 city: string(4), 1 letter + 3 numbers
2081 }
2082 * @return [string] codice fiscale
2083 *
2084 */
2085 Chance.prototype.cf = function (options) {
2086 options = options || {};
2087 var gender = !!options.gender ? options.gender : this.gender(),
2088 first = !!options.first ? options.first : this.first( { gender: gender, nationality: 'it'} ),
2089 last = !!options.last ? options.last : this.last( { nationality: 'it'} ),
2090 birthday = !!options.birthday ? options.birthday : this.birthday(),
2091 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),
2092 cf = [],
2093 name_generator = function(name, isLast) {
2094 var temp,
2095 return_value = [];
2096
2097 if (name.length < 3) {
2098 return_value = name.split("").concat("XXX".split("")).splice(0,3);
2099 }
2100 else {
2101 temp = name.toUpperCase().split('').map(function(c){
2102 return ("BCDFGHJKLMNPRSTVWZ".indexOf(c) !== -1) ? c : undefined;
2103 }).join('');
2104 if (temp.length > 3) {
2105 if (isLast) {
2106 temp = temp.substr(0,3);
2107 } else {
2108 temp = temp[0] + temp.substr(2,2);
2109 }
2110 }
2111 if (temp.length < 3) {
2112 return_value = temp;
2113 temp = name.toUpperCase().split('').map(function(c){
2114 return ("AEIOU".indexOf(c) !== -1) ? c : undefined;
2115 }).join('').substr(0, 3 - return_value.length);
2116 }
2117 return_value = return_value + temp;
2118 }
2119
2120 return return_value;
2121 },
2122 date_generator = function(birthday, gender, that) {
2123 var lettermonths = ['A', 'B', 'C', 'D', 'E', 'H', 'L', 'M', 'P', 'R', 'S', 'T'];
2124
2125 return birthday.getFullYear().toString().substr(2) +
2126 lettermonths[birthday.getMonth()] +
2127 that.pad(birthday.getDate() + ((gender.toLowerCase() === "female") ? 40 : 0), 2);
2128 },
2129 checkdigit_generator = function(cf) {
2130 var range1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2131 range2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ",
2132 evens = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
2133 odds = "BAKPLCQDREVOSFTGUHMINJWZYX",
2134 digit = 0;
2135
2136
2137 for(var i = 0; i < 15; i++) {
2138 if (i % 2 !== 0) {
2139 digit += evens.indexOf(range2[range1.indexOf(cf[i])]);
2140 }
2141 else {
2142 digit += odds.indexOf(range2[range1.indexOf(cf[i])]);
2143 }
2144 }
2145 return evens[digit % 26];
2146 };
2147
2148 cf = cf.concat(name_generator(last, true), name_generator(first), date_generator(birthday, gender, this), city.toUpperCase().split("")).join("");
2149 cf += checkdigit_generator(cf.toUpperCase(), this);
2150
2151 return cf.toUpperCase();
2152 };
2153
2154 Chance.prototype.pl_pesel = function () {
2155 var number = this.natural({min: 1, max: 9999999999});
2156 var arr = this.pad(number, 10).split('');
2157 for (var i = 0; i < arr.length; i++) {
2158 arr[i] = parseInt(arr[i]);
2159 }
2160
2161 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;
2162 if(controlNumber !== 0) {
2163 controlNumber = 10 - controlNumber;
2164 }
2165
2166 return arr.join('') + controlNumber;
2167 };
2168
2169 Chance.prototype.pl_nip = function () {
2170 var number = this.natural({min: 1, max: 999999999});
2171 var arr = this.pad(number, 9).split('');
2172 for (var i = 0; i < arr.length; i++) {
2173 arr[i] = parseInt(arr[i]);
2174 }
2175
2176 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;
2177 if(controlNumber === 10) {
2178 return this.pl_nip();
2179 }
2180
2181 return arr.join('') + controlNumber;
2182 };
2183
2184 Chance.prototype.pl_regon = function () {
2185 var number = this.natural({min: 1, max: 99999999});
2186 var arr = this.pad(number, 8).split('');
2187 for (var i = 0; i < arr.length; i++) {
2188 arr[i] = parseInt(arr[i]);
2189 }
2190
2191 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;
2192 if(controlNumber === 10) {
2193 controlNumber = 0;
2194 }
2195
2196 return arr.join('') + controlNumber;
2197 };
2198
2199 // -- End Regional
2200
2201 // -- Music --
2202
2203 Chance.prototype.note = function(options) {
2204 // choices for 'notes' option:
2205 // flatKey - chromatic scale with flat notes (default)
2206 // sharpKey - chromatic scale with sharp notes
2207 // flats - just flat notes
2208 // sharps - just sharp notes
2209 // naturals - just natural notes
2210 // all - naturals, sharps and flats
2211 options = initOptions(options, { notes : 'flatKey'});
2212 var scales = {
2213 naturals: ['C', 'D', 'E', 'F', 'G', 'A', 'B'],
2214 flats: ['D♭', 'E♭', 'G♭', 'A♭', 'B♭'],
2215 sharps: ['C♯', 'D♯', 'F♯', 'G♯', 'A♯']
2216 };
2217 scales.all = scales.naturals.concat(scales.flats.concat(scales.sharps))
2218 scales.flatKey = scales.naturals.concat(scales.flats)
2219 scales.sharpKey = scales.naturals.concat(scales.sharps)
2220 return this.pickone(scales[options.notes]);
2221 }
2222
2223 Chance.prototype.midi_note = function(options) {
2224 var min = 0;
2225 var max = 127;
2226 options = initOptions(options, { min : min, max : max });
2227 return this.integer({min: options.min, max: options.max});
2228 }
2229
2230 Chance.prototype.chord_quality = function(options) {
2231 options = initOptions(options, { jazz: true });
2232 var chord_qualities = ['maj', 'min', 'aug', 'dim'];
2233 if (options.jazz){
2234 chord_qualities = [
2235 'maj7',
2236 'min7',
2237 '7',
2238 'sus',
2239 'dim',
2240 'ø'
2241 ];
2242 }
2243 return this.pickone(chord_qualities);
2244 }
2245
2246 Chance.prototype.chord = function (options) {
2247 options = initOptions(options);
2248 return this.note(options) + this.chord_quality(options);
2249 }
2250
2251 Chance.prototype.tempo = function (options) {
2252 var min = 40;
2253 var max = 320;
2254 options = initOptions(options, {min: min, max: max});
2255 return this.integer({min: options.min, max: options.max});
2256 }
2257
2258 // -- End Music
2259
2260 // -- Miscellaneous --
2261
2262 // Coin - Flip, flip, flipadelphia
2263 Chance.prototype.coin = function(options) {
2264 return this.bool() ? "heads" : "tails";
2265 }
2266
2267 // Dice - For all the board game geeks out there, myself included ;)
2268 function diceFn (range) {
2269 return function () {
2270 return this.natural(range);
2271 };
2272 }
2273 Chance.prototype.d4 = diceFn({min: 1, max: 4});
2274 Chance.prototype.d6 = diceFn({min: 1, max: 6});
2275 Chance.prototype.d8 = diceFn({min: 1, max: 8});
2276 Chance.prototype.d10 = diceFn({min: 1, max: 10});
2277 Chance.prototype.d12 = diceFn({min: 1, max: 12});
2278 Chance.prototype.d20 = diceFn({min: 1, max: 20});
2279 Chance.prototype.d30 = diceFn({min: 1, max: 30});
2280 Chance.prototype.d100 = diceFn({min: 1, max: 100});
2281
2282 Chance.prototype.rpg = function (thrown, options) {
2283 options = initOptions(options);
2284 if (!thrown) {
2285 throw new RangeError("Chance: A type of die roll must be included");
2286 } else {
2287 var bits = thrown.toLowerCase().split("d"),
2288 rolls = [];
2289
2290 if (bits.length !== 2 || !parseInt(bits[0], 10) || !parseInt(bits[1], 10)) {
2291 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");
2292 }
2293 for (var i = bits[0]; i > 0; i--) {
2294 rolls[i - 1] = this.natural({min: 1, max: bits[1]});
2295 }
2296 return (typeof options.sum !== 'undefined' && options.sum) ? rolls.reduce(function (p, c) { return p + c; }) : rolls;
2297 }
2298 };
2299
2300 // Guid
2301 Chance.prototype.guid = function (options) {
2302 options = initOptions(options, { version: 5 });
2303
2304 var guid_pool = "abcdef1234567890",
2305 variant_pool = "ab89",
2306 guid = this.string({ pool: guid_pool, length: 8 }) + '-' +
2307 this.string({ pool: guid_pool, length: 4 }) + '-' +
2308 // The Version
2309 options.version +
2310 this.string({ pool: guid_pool, length: 3 }) + '-' +
2311 // The Variant
2312 this.string({ pool: variant_pool, length: 1 }) +
2313 this.string({ pool: guid_pool, length: 3 }) + '-' +
2314 this.string({ pool: guid_pool, length: 12 });
2315 return guid;
2316 };
2317
2318 // Hash
2319 Chance.prototype.hash = function (options) {
2320 options = initOptions(options, {length : 40, casing: 'lower'});
2321 var pool = options.casing === 'upper' ? HEX_POOL.toUpperCase() : HEX_POOL;
2322 return this.string({pool: pool, length: options.length});
2323 };
2324
2325 Chance.prototype.luhn_check = function (num) {
2326 var str = num.toString();
2327 var checkDigit = +str.substring(str.length - 1);
2328 return checkDigit === this.luhn_calculate(+str.substring(0, str.length - 1));
2329 };
2330
2331 Chance.prototype.luhn_calculate = function (num) {
2332 var digits = num.toString().split("").reverse();
2333 var sum = 0;
2334 var digit;
2335
2336 for (var i = 0, l = digits.length; l > i; ++i) {
2337 digit = +digits[i];
2338 if (i % 2 === 0) {
2339 digit *= 2;
2340 if (digit > 9) {
2341 digit -= 9;
2342 }
2343 }
2344 sum += digit;
2345 }
2346 return (sum * 9) % 10;
2347 };
2348
2349 // MD5 Hash
2350 Chance.prototype.md5 = function(options) {
2351 var opts = { str: '', key: null, raw: false };
2352
2353 if (!options) {
2354 opts.str = this.string();
2355 options = {};
2356 }
2357 else if (typeof options === 'string') {
2358 opts.str = options;
2359 options = {};
2360 }
2361 else if (typeof options !== 'object') {
2362 return null;
2363 }
2364 else if(options.constructor === 'Array') {
2365 return null;
2366 }
2367
2368 opts = initOptions(options, opts);
2369
2370 if(!opts.str){
2371 throw new Error('A parameter is required to return an md5 hash.');
2372 }
2373
2374 return this.bimd5.md5(opts.str, opts.key, opts.raw);
2375 };
2376
2377 /**
2378 * #Description:
2379 * =====================================================
2380 * Generate random file name with extension
2381 *
2382 * The argument provide extension type
2383 * -> raster
2384 * -> vector
2385 * -> 3d
2386 * -> document
2387 *
2388 * If nothing is provided the function return random file name with random
2389 * extension type of any kind
2390 *
2391 * The user can validate the file name length range
2392 * If nothing provided the generated file name is random
2393 *
2394 * #Extension Pool :
2395 * * Currently the supported extensions are
2396 * -> some of the most popular raster image extensions
2397 * -> some of the most popular vector image extensions
2398 * -> some of the most popular 3d image extensions
2399 * -> some of the most popular document extensions
2400 *
2401 * #Examples :
2402 * =====================================================
2403 *
2404 * Return random file name with random extension. The file extension
2405 * is provided by a predefined collection of extensions. More about the extension
2406 * pool can be found in #Extension Pool section
2407 *
2408 * chance.file()
2409 * => dsfsdhjf.xml
2410 *
2411 * In order to generate a file name with specific length, specify the
2412 * length property and integer value. The extension is going to be random
2413 *
2414 * chance.file({length : 10})
2415 * => asrtineqos.pdf
2416 *
2417 * In order to generate file with extension from some of the predefined groups
2418 * of the extension pool just specify the extension pool category in fileType property
2419 *
2420 * chance.file({fileType : 'raster'})
2421 * => dshgssds.psd
2422 *
2423 * You can provide specific extension for your files
2424 * chance.file({extension : 'html'})
2425 * => djfsd.html
2426 *
2427 * Or you could pass custom collection of extensions by array or by object
2428 * chance.file({extensions : [...]})
2429 * => dhgsdsd.psd
2430 *
2431 * chance.file({extensions : { key : [...], key : [...]}})
2432 * => djsfksdjsd.xml
2433 *
2434 * @param [collection] options
2435 * @return [string]
2436 *
2437 */
2438 Chance.prototype.file = function(options) {
2439
2440 var fileOptions = options || {};
2441 var poolCollectionKey = "fileExtension";
2442 var typeRange = Object.keys(this.get("fileExtension"));//['raster', 'vector', '3d', 'document'];
2443 var fileName;
2444 var fileExtension;
2445
2446 // Generate random file name
2447 fileName = this.word({length : fileOptions.length});
2448
2449 // Generate file by specific extension provided by the user
2450 if(fileOptions.extension) {
2451
2452 fileExtension = fileOptions.extension;
2453 return (fileName + '.' + fileExtension);
2454 }
2455
2456 // Generate file by specific extension collection
2457 if(fileOptions.extensions) {
2458
2459 if(Array.isArray(fileOptions.extensions)) {
2460
2461 fileExtension = this.pickone(fileOptions.extensions);
2462 return (fileName + '.' + fileExtension);
2463 }
2464 else if(fileOptions.extensions.constructor === Object) {
2465
2466 var extensionObjectCollection = fileOptions.extensions;
2467 var keys = Object.keys(extensionObjectCollection);
2468
2469 fileExtension = this.pickone(extensionObjectCollection[this.pickone(keys)]);
2470 return (fileName + '.' + fileExtension);
2471 }
2472
2473 throw new Error("Chance: Extensions must be an Array or Object");
2474 }
2475
2476 // Generate file extension based on specific file type
2477 if(fileOptions.fileType) {
2478
2479 var fileType = fileOptions.fileType;
2480 if(typeRange.indexOf(fileType) !== -1) {
2481
2482 fileExtension = this.pickone(this.get(poolCollectionKey)[fileType]);
2483 return (fileName + '.' + fileExtension);
2484 }
2485
2486 throw new RangeError("Chance: Expect file type value to be 'raster', 'vector', '3d' or 'document'");
2487 }
2488
2489 // Generate random file name if no extension options are passed
2490 fileExtension = this.pickone(this.get(poolCollectionKey)[this.pickone(typeRange)]);
2491 return (fileName + '.' + fileExtension);
2492 };
2493
2494 var data = {
2495
2496
2497
2498 firstNames: {
2499 "male": {
2500 "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"],
2501 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0163
2502 "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"],
2503 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2504 "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"],
2505 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2506 "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"]
2507 },
2508
2509 "female": {
2510 "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"],
2511 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0162
2512 "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"],
2513 // Data taken from http://www.svbkindernamen.nl/int/nl/kindernamen/index.html
2514 "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ë"],
2515 // Data taken from https://fr.wikipedia.org/wiki/Liste_de_pr%C3%A9noms_fran%C3%A7ais_et_de_la_francophonie
2516 "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é"]
2517 }
2518 },
2519
2520 lastNames: {
2521 "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'],
2522 // Data taken from http://www.dati.gov.it/dataset/comune-di-firenze_0164 (first 1000)
2523 "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"],
2524 // http://www.voornamelijk.nl/meest-voorkomende-achternamen-in-nederland-en-amsterdam/
2525 "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"],
2526 // https://surnames.behindthename.com/top/lists/england-wales/1991
2527 "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"],
2528 // https://surnames.behindthename.com/top/lists/germany/2017
2529 "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"],
2530 // http://www.japantimes.co.jp/life/2009/10/11/lifestyle/japans-top-100-most-common-family-names/
2531 "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"],
2532 // http://www.lowchensaustralia.com/names/popular-spanish-names.htm
2533 "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"],
2534 // Data taken from https://fr.wikipedia.org/wiki/Liste_des_noms_de_famille_les_plus_courants_en_France
2535 "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"]
2536 },
2537
2538 // Data taken from https://github.com/umpirsky/country-list/blob/master/data/en_US/country.json
2539 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"}],
2540
2541 counties: {
2542 // Data taken from http://www.downloadexcelfiles.com/gb_en/download-excel-file-list-counties-uk
2543 "uk": [
2544 {name: 'Bath and North East Somerset'},
2545 {name: 'Aberdeenshire'},
2546 {name: 'Anglesey'},
2547 {name: 'Angus'},
2548 {name: 'Bedford'},
2549 {name: 'Blackburn with Darwen'},
2550 {name: 'Blackpool'},
2551 {name: 'Bournemouth'},
2552 {name: 'Bracknell Forest'},
2553 {name: 'Brighton & Hove'},
2554 {name: 'Bristol'},
2555 {name: 'Buckinghamshire'},
2556 {name: 'Cambridgeshire'},
2557 {name: 'Carmarthenshire'},
2558 {name: 'Central Bedfordshire'},
2559 {name: 'Ceredigion'},
2560 {name: 'Cheshire East'},
2561 {name: 'Cheshire West and Chester'},
2562 {name: 'Clackmannanshire'},
2563 {name: 'Conwy'},
2564 {name: 'Cornwall'},
2565 {name: 'County Antrim'},
2566 {name: 'County Armagh'},
2567 {name: 'County Down'},
2568 {name: 'County Durham'},
2569 {name: 'County Fermanagh'},
2570 {name: 'County Londonderry'},
2571 {name: 'County Tyrone'},
2572 {name: 'Cumbria'},
2573 {name: 'Darlington'},
2574 {name: 'Denbighshire'},
2575 {name: 'Derby'},
2576 {name: 'Derbyshire'},
2577 {name: 'Devon'},
2578 {name: 'Dorset'},
2579 {name: 'Dumfries and Galloway'},
2580 {name: 'Dundee'},
2581 {name: 'East Lothian'},
2582 {name: 'East Riding of Yorkshire'},
2583 {name: 'East Sussex'},
2584 {name: 'Edinburgh?'},
2585 {name: 'Essex'},
2586 {name: 'Falkirk'},
2587 {name: 'Fife'},
2588 {name: 'Flintshire'},
2589 {name: 'Gloucestershire'},
2590 {name: 'Greater London'},
2591 {name: 'Greater Manchester'},
2592 {name: 'Gwent'},
2593 {name: 'Gwynedd'},
2594 {name: 'Halton'},
2595 {name: 'Hampshire'},
2596 {name: 'Hartlepool'},
2597 {name: 'Herefordshire'},
2598 {name: 'Hertfordshire'},
2599 {name: 'Highlands'},
2600 {name: 'Hull'},
2601 {name: 'Isle of Wight'},
2602 {name: 'Isles of Scilly'},
2603 {name: 'Kent'},
2604 {name: 'Lancashire'},
2605 {name: 'Leicester'},
2606 {name: 'Leicestershire'},
2607 {name: 'Lincolnshire'},
2608 {name: 'Lothian'},
2609 {name: 'Luton'},
2610 {name: 'Medway'},
2611 {name: 'Merseyside'},
2612 {name: 'Mid Glamorgan'},
2613 {name: 'Middlesbrough'},
2614 {name: 'Milton Keynes'},
2615 {name: 'Monmouthshire'},
2616 {name: 'Moray'},
2617 {name: 'Norfolk'},
2618 {name: 'North East Lincolnshire'},
2619 {name: 'North Lincolnshire'},
2620 {name: 'North Somerset'},
2621 {name: 'North Yorkshire'},
2622 {name: 'Northamptonshire'},
2623 {name: 'Northumberland'},
2624 {name: 'Nottingham'},
2625 {name: 'Nottinghamshire'},
2626 {name: 'Oxfordshire'},
2627 {name: 'Pembrokeshire'},
2628 {name: 'Perth and Kinross'},
2629 {name: 'Peterborough'},
2630 {name: 'Plymouth'},
2631 {name: 'Poole'},
2632 {name: 'Portsmouth'},
2633 {name: 'Powys'},
2634 {name: 'Reading'},
2635 {name: 'Redcar and Cleveland'},
2636 {name: 'Rutland'},
2637 {name: 'Scottish Borders'},
2638 {name: 'Shropshire'},
2639 {name: 'Slough'},
2640 {name: 'Somerset'},
2641 {name: 'South Glamorgan'},
2642 {name: 'South Gloucestershire'},
2643 {name: 'South Yorkshire'},
2644 {name: 'Southampton'},
2645 {name: 'Southend-on-Sea'},
2646 {name: 'Staffordshire'},
2647 {name: 'Stirlingshire'},
2648 {name: 'Stockton-on-Tees'},
2649 {name: 'Stoke-on-Trent'},
2650 {name: 'Strathclyde'},
2651 {name: 'Suffolk'},
2652 {name: 'Surrey'},
2653 {name: 'Swindon'},
2654 {name: 'Telford and Wrekin'},
2655 {name: 'Thurrock'},
2656 {name: 'Torbay'},
2657 {name: 'Tyne and Wear'},
2658 {name: 'Warrington'},
2659 {name: 'Warwickshire'},
2660 {name: 'West Berkshire'},
2661 {name: 'West Glamorgan'},
2662 {name: 'West Lothian'},
2663 {name: 'West Midlands'},
2664 {name: 'West Sussex'},
2665 {name: 'West Yorkshire'},
2666 {name: 'Western Isles'},
2667 {name: 'Wiltshire'},
2668 {name: 'Windsor and Maidenhead'},
2669 {name: 'Wokingham'},
2670 {name: 'Worcestershire'},
2671 {name: 'Wrexham'},
2672 {name: 'York'}]
2673 },
2674 provinces: {
2675 "ca": [
2676 {name: 'Alberta', abbreviation: 'AB'},
2677 {name: 'British Columbia', abbreviation: 'BC'},
2678 {name: 'Manitoba', abbreviation: 'MB'},
2679 {name: 'New Brunswick', abbreviation: 'NB'},
2680 {name: 'Newfoundland and Labrador', abbreviation: 'NL'},
2681 {name: 'Nova Scotia', abbreviation: 'NS'},
2682 {name: 'Ontario', abbreviation: 'ON'},
2683 {name: 'Prince Edward Island', abbreviation: 'PE'},
2684 {name: 'Quebec', abbreviation: 'QC'},
2685 {name: 'Saskatchewan', abbreviation: 'SK'},
2686
2687 // The case could be made that the following are not actually provinces
2688 // since they are technically considered "territories" however they all
2689 // look the same on an envelope!
2690 {name: 'Northwest Territories', abbreviation: 'NT'},
2691 {name: 'Nunavut', abbreviation: 'NU'},
2692 {name: 'Yukon', abbreviation: 'YT'}
2693 ],
2694 "it": [
2695 { name: "Agrigento", abbreviation: "AG", code: 84 },
2696 { name: "Alessandria", abbreviation: "AL", code: 6 },
2697 { name: "Ancona", abbreviation: "AN", code: 42 },
2698 { name: "Aosta", abbreviation: "AO", code: 7 },
2699 { name: "L'Aquila", abbreviation: "AQ", code: 66 },
2700 { name: "Arezzo", abbreviation: "AR", code: 51 },
2701 { name: "Ascoli-Piceno", abbreviation: "AP", code: 44 },
2702 { name: "Asti", abbreviation: "AT", code: 5 },
2703 { name: "Avellino", abbreviation: "AV", code: 64 },
2704 { name: "Bari", abbreviation: "BA", code: 72 },
2705 { name: "Barletta-Andria-Trani", abbreviation: "BT", code: 72 },
2706 { name: "Belluno", abbreviation: "BL", code: 25 },
2707 { name: "Benevento", abbreviation: "BN", code: 62 },
2708 { name: "Bergamo", abbreviation: "BG", code: 16 },
2709 { name: "Biella", abbreviation: "BI", code: 96 },
2710 { name: "Bologna", abbreviation: "BO", code: 37 },
2711 { name: "Bolzano", abbreviation: "BZ", code: 21 },
2712 { name: "Brescia", abbreviation: "BS", code: 17 },
2713 { name: "Brindisi", abbreviation: "BR", code: 74 },
2714 { name: "Cagliari", abbreviation: "CA", code: 92 },
2715 { name: "Caltanissetta", abbreviation: "CL", code: 85 },
2716 { name: "Campobasso", abbreviation: "CB", code: 70 },
2717 { name: "Carbonia Iglesias", abbreviation: "CI", code: 70 },
2718 { name: "Caserta", abbreviation: "CE", code: 61 },
2719 { name: "Catania", abbreviation: "CT", code: 87 },
2720 { name: "Catanzaro", abbreviation: "CZ", code: 79 },
2721 { name: "Chieti", abbreviation: "CH", code: 69 },
2722 { name: "Como", abbreviation: "CO", code: 13 },
2723 { name: "Cosenza", abbreviation: "CS", code: 78 },
2724 { name: "Cremona", abbreviation: "CR", code: 19 },
2725 { name: "Crotone", abbreviation: "KR", code: 101 },
2726 { name: "Cuneo", abbreviation: "CN", code: 4 },
2727 { name: "Enna", abbreviation: "EN", code: 86 },
2728 { name: "Fermo", abbreviation: "FM", code: 86 },
2729 { name: "Ferrara", abbreviation: "FE", code: 38 },
2730 { name: "Firenze", abbreviation: "FI", code: 48 },
2731 { name: "Foggia", abbreviation: "FG", code: 71 },
2732 { name: "Forli-Cesena", abbreviation: "FC", code: 71 },
2733 { name: "Frosinone", abbreviation: "FR", code: 60 },
2734 { name: "Genova", abbreviation: "GE", code: 10 },
2735 { name: "Gorizia", abbreviation: "GO", code: 31 },
2736 { name: "Grosseto", abbreviation: "GR", code: 53 },
2737 { name: "Imperia", abbreviation: "IM", code: 8 },
2738 { name: "Isernia", abbreviation: "IS", code: 94 },
2739 { name: "La-Spezia", abbreviation: "SP", code: 66 },
2740 { name: "Latina", abbreviation: "LT", code: 59 },
2741 { name: "Lecce", abbreviation: "LE", code: 75 },
2742 { name: "Lecco", abbreviation: "LC", code: 97 },
2743 { name: "Livorno", abbreviation: "LI", code: 49 },
2744 { name: "Lodi", abbreviation: "LO", code: 98 },
2745 { name: "Lucca", abbreviation: "LU", code: 46 },
2746 { name: "Macerata", abbreviation: "MC", code: 43 },
2747 { name: "Mantova", abbreviation: "MN", code: 20 },
2748 { name: "Massa-Carrara", abbreviation: "MS", code: 45 },
2749 { name: "Matera", abbreviation: "MT", code: 77 },
2750 { name: "Medio Campidano", abbreviation: "VS", code: 77 },
2751 { name: "Messina", abbreviation: "ME", code: 83 },
2752 { name: "Milano", abbreviation: "MI", code: 15 },
2753 { name: "Modena", abbreviation: "MO", code: 36 },
2754 { name: "Monza-Brianza", abbreviation: "MB", code: 36 },
2755 { name: "Napoli", abbreviation: "NA", code: 63 },
2756 { name: "Novara", abbreviation: "NO", code: 3 },
2757 { name: "Nuoro", abbreviation: "NU", code: 91 },
2758 { name: "Ogliastra", abbreviation: "OG", code: 91 },
2759 { name: "Olbia Tempio", abbreviation: "OT", code: 91 },
2760 { name: "Oristano", abbreviation: "OR", code: 95 },
2761 { name: "Padova", abbreviation: "PD", code: 28 },
2762 { name: "Palermo", abbreviation: "PA", code: 82 },
2763 { name: "Parma", abbreviation: "PR", code: 34 },
2764 { name: "Pavia", abbreviation: "PV", code: 18 },
2765 { name: "Perugia", abbreviation: "PG", code: 54 },
2766 { name: "Pesaro-Urbino", abbreviation: "PU", code: 41 },
2767 { name: "Pescara", abbreviation: "PE", code: 68 },
2768 { name: "Piacenza", abbreviation: "PC", code: 33 },
2769 { name: "Pisa", abbreviation: "PI", code: 50 },
2770 { name: "Pistoia", abbreviation: "PT", code: 47 },
2771 { name: "Pordenone", abbreviation: "PN", code: 93 },
2772 { name: "Potenza", abbreviation: "PZ", code: 76 },
2773 { name: "Prato", abbreviation: "PO", code: 100 },
2774 { name: "Ragusa", abbreviation: "RG", code: 88 },
2775 { name: "Ravenna", abbreviation: "RA", code: 39 },
2776 { name: "Reggio-Calabria", abbreviation: "RC", code: 35 },
2777 { name: "Reggio-Emilia", abbreviation: "RE", code: 35 },
2778 { name: "Rieti", abbreviation: "RI", code: 57 },
2779 { name: "Rimini", abbreviation: "RN", code: 99 },
2780 { name: "Roma", abbreviation: "Roma", code: 58 },
2781 { name: "Rovigo", abbreviation: "RO", code: 29 },
2782 { name: "Salerno", abbreviation: "SA", code: 65 },
2783 { name: "Sassari", abbreviation: "SS", code: 90 },
2784 { name: "Savona", abbreviation: "SV", code: 9 },
2785 { name: "Siena", abbreviation: "SI", code: 52 },
2786 { name: "Siracusa", abbreviation: "SR", code: 89 },
2787 { name: "Sondrio", abbreviation: "SO", code: 14 },
2788 { name: "Taranto", abbreviation: "TA", code: 73 },
2789 { name: "Teramo", abbreviation: "TE", code: 67 },
2790 { name: "Terni", abbreviation: "TR", code: 55 },
2791 { name: "Torino", abbreviation: "TO", code: 1 },
2792 { name: "Trapani", abbreviation: "TP", code: 81 },
2793 { name: "Trento", abbreviation: "TN", code: 22 },
2794 { name: "Treviso", abbreviation: "TV", code: 26 },
2795 { name: "Trieste", abbreviation: "TS", code: 32 },
2796 { name: "Udine", abbreviation: "UD", code: 30 },
2797 { name: "Varese", abbreviation: "VA", code: 12 },
2798 { name: "Venezia", abbreviation: "VE", code: 27 },
2799 { name: "Verbania", abbreviation: "VB", code: 27 },
2800 { name: "Vercelli", abbreviation: "VC", code: 2 },
2801 { name: "Verona", abbreviation: "VR", code: 23 },
2802 { name: "Vibo-Valentia", abbreviation: "VV", code: 102 },
2803 { name: "Vicenza", abbreviation: "VI", code: 24 },
2804 { name: "Viterbo", abbreviation: "VT", code: 56 }
2805 ]
2806 },
2807
2808 // from: https://github.com/samsargent/Useful-Autocomplete-Data/blob/master/data/nationalities.json
2809 nationalities: [
2810 {name: 'Afghan'},
2811 {name: 'Albanian'},
2812 {name: 'Algerian'},
2813 {name: 'American'},
2814 {name: 'Andorran'},
2815 {name: 'Angolan'},
2816 {name: 'Antiguans'},
2817 {name: 'Argentinean'},
2818 {name: 'Armenian'},
2819 {name: 'Australian'},
2820 {name: 'Austrian'},
2821 {name: 'Azerbaijani'},
2822 {name: 'Bahami'},
2823 {name: 'Bahraini'},
2824 {name: 'Bangladeshi'},
2825 {name: 'Barbadian'},
2826 {name: 'Barbudans'},
2827 {name: 'Batswana'},
2828 {name: 'Belarusian'},
2829 {name: 'Belgian'},
2830 {name: 'Belizean'},
2831 {name: 'Beninese'},
2832 {name: 'Bhutanese'},
2833 {name: 'Bolivian'},
2834 {name: 'Bosnian'},
2835 {name: 'Brazilian'},
2836 {name: 'British'},
2837 {name: 'Bruneian'},
2838 {name: 'Bulgarian'},
2839 {name: 'Burkinabe'},
2840 {name: 'Burmese'},
2841 {name: 'Burundian'},
2842 {name: 'Cambodian'},
2843 {name: 'Cameroonian'},
2844 {name: 'Canadian'},
2845 {name: 'Cape Verdean'},
2846 {name: 'Central African'},
2847 {name: 'Chadian'},
2848 {name: 'Chilean'},
2849 {name: 'Chinese'},
2850 {name: 'Colombian'},
2851 {name: 'Comoran'},
2852 {name: 'Congolese'},
2853 {name: 'Costa Rican'},
2854 {name: 'Croatian'},
2855 {name: 'Cuban'},
2856 {name: 'Cypriot'},
2857 {name: 'Czech'},
2858 {name: 'Danish'},
2859 {name: 'Djibouti'},
2860 {name: 'Dominican'},
2861 {name: 'Dutch'},
2862 {name: 'East Timorese'},
2863 {name: 'Ecuadorean'},
2864 {name: 'Egyptian'},
2865 {name: 'Emirian'},
2866 {name: 'Equatorial Guinean'},
2867 {name: 'Eritrean'},
2868 {name: 'Estonian'},
2869 {name: 'Ethiopian'},
2870 {name: 'Fijian'},
2871 {name: 'Filipino'},
2872 {name: 'Finnish'},
2873 {name: 'French'},
2874 {name: 'Gabonese'},
2875 {name: 'Gambian'},
2876 {name: 'Georgian'},
2877 {name: 'German'},
2878 {name: 'Ghanaian'},
2879 {name: 'Greek'},
2880 {name: 'Grenadian'},
2881 {name: 'Guatemalan'},
2882 {name: 'Guinea-Bissauan'},
2883 {name: 'Guinean'},
2884 {name: 'Guyanese'},
2885 {name: 'Haitian'},
2886 {name: 'Herzegovinian'},
2887 {name: 'Honduran'},
2888 {name: 'Hungarian'},
2889 {name: 'I-Kiribati'},
2890 {name: 'Icelander'},
2891 {name: 'Indian'},
2892 {name: 'Indonesian'},
2893 {name: 'Iranian'},
2894 {name: 'Iraqi'},
2895 {name: 'Irish'},
2896 {name: 'Israeli'},
2897 {name: 'Italian'},
2898 {name: 'Ivorian'},
2899 {name: 'Jamaican'},
2900 {name: 'Japanese'},
2901 {name: 'Jordanian'},
2902 {name: 'Kazakhstani'},
2903 {name: 'Kenyan'},
2904 {name: 'Kittian and Nevisian'},
2905 {name: 'Kuwaiti'},
2906 {name: 'Kyrgyz'},
2907 {name: 'Laotian'},
2908 {name: 'Latvian'},
2909 {name: 'Lebanese'},
2910 {name: 'Liberian'},
2911 {name: 'Libyan'},
2912 {name: 'Liechtensteiner'},
2913 {name: 'Lithuanian'},
2914 {name: 'Luxembourger'},
2915 {name: 'Macedonian'},
2916 {name: 'Malagasy'},
2917 {name: 'Malawian'},
2918 {name: 'Malaysian'},
2919 {name: 'Maldivan'},
2920 {name: 'Malian'},
2921 {name: 'Maltese'},
2922 {name: 'Marshallese'},
2923 {name: 'Mauritanian'},
2924 {name: 'Mauritian'},
2925 {name: 'Mexican'},
2926 {name: 'Micronesian'},
2927 {name: 'Moldovan'},
2928 {name: 'Monacan'},
2929 {name: 'Mongolian'},
2930 {name: 'Moroccan'},
2931 {name: 'Mosotho'},
2932 {name: 'Motswana'},
2933 {name: 'Mozambican'},
2934 {name: 'Namibian'},
2935 {name: 'Nauruan'},
2936 {name: 'Nepalese'},
2937 {name: 'New Zealander'},
2938 {name: 'Nicaraguan'},
2939 {name: 'Nigerian'},
2940 {name: 'Nigerien'},
2941 {name: 'North Korean'},
2942 {name: 'Northern Irish'},
2943 {name: 'Norwegian'},
2944 {name: 'Omani'},
2945 {name: 'Pakistani'},
2946 {name: 'Palauan'},
2947 {name: 'Panamanian'},
2948 {name: 'Papua New Guinean'},
2949 {name: 'Paraguayan'},
2950 {name: 'Peruvian'},
2951 {name: 'Polish'},
2952 {name: 'Portuguese'},
2953 {name: 'Qatari'},
2954 {name: 'Romani'},
2955 {name: 'Russian'},
2956 {name: 'Rwandan'},
2957 {name: 'Saint Lucian'},
2958 {name: 'Salvadoran'},
2959 {name: 'Samoan'},
2960 {name: 'San Marinese'},
2961 {name: 'Sao Tomean'},
2962 {name: 'Saudi'},
2963 {name: 'Scottish'},
2964 {name: 'Senegalese'},
2965 {name: 'Serbian'},
2966 {name: 'Seychellois'},
2967 {name: 'Sierra Leonean'},
2968 {name: 'Singaporean'},
2969 {name: 'Slovakian'},
2970 {name: 'Slovenian'},
2971 {name: 'Solomon Islander'},
2972 {name: 'Somali'},
2973 {name: 'South African'},
2974 {name: 'South Korean'},
2975 {name: 'Spanish'},
2976 {name: 'Sri Lankan'},
2977 {name: 'Sudanese'},
2978 {name: 'Surinamer'},
2979 {name: 'Swazi'},
2980 {name: 'Swedish'},
2981 {name: 'Swiss'},
2982 {name: 'Syrian'},
2983 {name: 'Taiwanese'},
2984 {name: 'Tajik'},
2985 {name: 'Tanzanian'},
2986 {name: 'Thai'},
2987 {name: 'Togolese'},
2988 {name: 'Tongan'},
2989 {name: 'Trinidadian or Tobagonian'},
2990 {name: 'Tunisian'},
2991 {name: 'Turkish'},
2992 {name: 'Tuvaluan'},
2993 {name: 'Ugandan'},
2994 {name: 'Ukrainian'},
2995 {name: 'Uruguaya'},
2996 {name: 'Uzbekistani'},
2997 {name: 'Venezuela'},
2998 {name: 'Vietnamese'},
2999 {name: 'Wels'},
3000 {name: 'Yemenit'},
3001 {name: 'Zambia'},
3002 {name: 'Zimbabwe'},
3003 ],
3004 // http://www.loc.gov/standards/iso639-2/php/code_list.php (ISO-639-1 codes)
3005 locale_languages: [
3006 "aa",
3007 "ab",
3008 "ae",
3009 "af",
3010 "ak",
3011 "am",
3012 "an",
3013 "ar",
3014 "as",
3015 "av",
3016 "ay",
3017 "az",
3018 "ba",
3019 "be",
3020 "bg",
3021 "bh",
3022 "bi",
3023 "bm",
3024 "bn",
3025 "bo",
3026 "br",
3027 "bs",
3028 "ca",
3029 "ce",
3030 "ch",
3031 "co",
3032 "cr",
3033 "cs",
3034 "cu",
3035 "cv",
3036 "cy",
3037 "da",
3038 "de",
3039 "dv",
3040 "dz",
3041 "ee",
3042 "el",
3043 "en",
3044 "eo",
3045 "es",
3046 "et",
3047 "eu",
3048 "fa",
3049 "ff",
3050 "fi",
3051 "fj",
3052 "fo",
3053 "fr",
3054 "fy",
3055 "ga",
3056 "gd",
3057 "gl",
3058 "gn",
3059 "gu",
3060 "gv",
3061 "ha",
3062 "he",
3063 "hi",
3064 "ho",
3065 "hr",
3066 "ht",
3067 "hu",
3068 "hy",
3069 "hz",
3070 "ia",
3071 "id",
3072 "ie",
3073 "ig",
3074 "ii",
3075 "ik",
3076 "io",
3077 "is",
3078 "it",
3079 "iu",
3080 "ja",
3081 "jv",
3082 "ka",
3083 "kg",
3084 "ki",
3085 "kj",
3086 "kk",
3087 "kl",
3088 "km",
3089 "kn",
3090 "ko",
3091 "kr",
3092 "ks",
3093 "ku",
3094 "kv",
3095 "kw",
3096 "ky",
3097 "la",
3098 "lb",
3099 "lg",
3100 "li",
3101 "ln",
3102 "lo",
3103 "lt",
3104 "lu",
3105 "lv",
3106 "mg",
3107 "mh",
3108 "mi",
3109 "mk",
3110 "ml",
3111 "mn",
3112 "mr",
3113 "ms",
3114 "mt",
3115 "my",
3116 "na",
3117 "nb",
3118 "nd",
3119 "ne",
3120 "ng",
3121 "nl",
3122 "nn",
3123 "no",
3124 "nr",
3125 "nv",
3126 "ny",
3127 "oc",
3128 "oj",
3129 "om",
3130 "or",
3131 "os",
3132 "pa",
3133 "pi",
3134 "pl",
3135 "ps",
3136 "pt",
3137 "qu",
3138 "rm",
3139 "rn",
3140 "ro",
3141 "ru",
3142 "rw",
3143 "sa",
3144 "sc",
3145 "sd",
3146 "se",
3147 "sg",
3148 "si",
3149 "sk",
3150 "sl",
3151 "sm",
3152 "sn",
3153 "so",
3154 "sq",
3155 "sr",
3156 "ss",
3157 "st",
3158 "su",
3159 "sv",
3160 "sw",
3161 "ta",
3162 "te",
3163 "tg",
3164 "th",
3165 "ti",
3166 "tk",
3167 "tl",
3168 "tn",
3169 "to",
3170 "tr",
3171 "ts",
3172 "tt",
3173 "tw",
3174 "ty",
3175 "ug",
3176 "uk",
3177 "ur",
3178 "uz",
3179 "ve",
3180 "vi",
3181 "vo",
3182 "wa",
3183 "wo",
3184 "xh",
3185 "yi",
3186 "yo",
3187 "za",
3188 "zh",
3189 "zu"
3190 ],
3191
3192 // From http://data.okfn.org/data/core/language-codes#resource-language-codes-full (IETF language tags)
3193 locale_regions: [
3194 "agq-CM",
3195 "asa-TZ",
3196 "ast-ES",
3197 "bas-CM",
3198 "bem-ZM",
3199 "bez-TZ",
3200 "brx-IN",
3201 "cgg-UG",
3202 "chr-US",
3203 "dav-KE",
3204 "dje-NE",
3205 "dsb-DE",
3206 "dua-CM",
3207 "dyo-SN",
3208 "ebu-KE",
3209 "ewo-CM",
3210 "fil-PH",
3211 "fur-IT",
3212 "gsw-CH",
3213 "gsw-FR",
3214 "gsw-LI",
3215 "guz-KE",
3216 "haw-US",
3217 "hsb-DE",
3218 "jgo-CM",
3219 "jmc-TZ",
3220 "kab-DZ",
3221 "kam-KE",
3222 "kde-TZ",
3223 "kea-CV",
3224 "khq-ML",
3225 "kkj-CM",
3226 "kln-KE",
3227 "kok-IN",
3228 "ksb-TZ",
3229 "ksf-CM",
3230 "ksh-DE",
3231 "lag-TZ",
3232 "lkt-US",
3233 "luo-KE",
3234 "luy-KE",
3235 "mas-KE",
3236 "mas-TZ",
3237 "mer-KE",
3238 "mfe-MU",
3239 "mgh-MZ",
3240 "mgo-CM",
3241 "mua-CM",
3242 "naq-NA",
3243 "nmg-CM",
3244 "nnh-CM",
3245 "nus-SD",
3246 "nyn-UG",
3247 "rof-TZ",
3248 "rwk-TZ",
3249 "sah-RU",
3250 "saq-KE",
3251 "sbp-TZ",
3252 "seh-MZ",
3253 "ses-ML",
3254 "shi-Latn",
3255 "shi-Latn-MA",
3256 "shi-Tfng",
3257 "shi-Tfng-MA",
3258 "smn-FI",
3259 "teo-KE",
3260 "teo-UG",
3261 "twq-NE",
3262 "tzm-Latn",
3263 "tzm-Latn-MA",
3264 "vai-Latn",
3265 "vai-Latn-LR",
3266 "vai-Vaii",
3267 "vai-Vaii-LR",
3268 "vun-TZ",
3269 "wae-CH",
3270 "xog-UG",
3271 "yav-CM",
3272 "zgh-MA",
3273 "af-NA",
3274 "af-ZA",
3275 "ak-GH",
3276 "am-ET",
3277 "ar-001",
3278 "ar-AE",
3279 "ar-BH",
3280 "ar-DJ",
3281 "ar-DZ",
3282 "ar-EG",
3283 "ar-EH",
3284 "ar-ER",
3285 "ar-IL",
3286 "ar-IQ",
3287 "ar-JO",
3288 "ar-KM",
3289 "ar-KW",
3290 "ar-LB",
3291 "ar-LY",
3292 "ar-MA",
3293 "ar-MR",
3294 "ar-OM",
3295 "ar-PS",
3296 "ar-QA",
3297 "ar-SA",
3298 "ar-SD",
3299 "ar-SO",
3300 "ar-SS",
3301 "ar-SY",
3302 "ar-TD",
3303 "ar-TN",
3304 "ar-YE",
3305 "as-IN",
3306 "az-Cyrl",
3307 "az-Cyrl-AZ",
3308 "az-Latn",
3309 "az-Latn-AZ",
3310 "be-BY",
3311 "bg-BG",
3312 "bm-Latn",
3313 "bm-Latn-ML",
3314 "bn-BD",
3315 "bn-IN",
3316 "bo-CN",
3317 "bo-IN",
3318 "br-FR",
3319 "bs-Cyrl",
3320 "bs-Cyrl-BA",
3321 "bs-Latn",
3322 "bs-Latn-BA",
3323 "ca-AD",
3324 "ca-ES",
3325 "ca-ES-VALENCIA",
3326 "ca-FR",
3327 "ca-IT",
3328 "cs-CZ",
3329 "cy-GB",
3330 "da-DK",
3331 "da-GL",
3332 "de-AT",
3333 "de-BE",
3334 "de-CH",
3335 "de-DE",
3336 "de-LI",
3337 "de-LU",
3338 "dz-BT",
3339 "ee-GH",
3340 "ee-TG",
3341 "el-CY",
3342 "el-GR",
3343 "en-001",
3344 "en-150",
3345 "en-AG",
3346 "en-AI",
3347 "en-AS",
3348 "en-AU",
3349 "en-BB",
3350 "en-BE",
3351 "en-BM",
3352 "en-BS",
3353 "en-BW",
3354 "en-BZ",
3355 "en-CA",
3356 "en-CC",
3357 "en-CK",
3358 "en-CM",
3359 "en-CX",
3360 "en-DG",
3361 "en-DM",
3362 "en-ER",
3363 "en-FJ",
3364 "en-FK",
3365 "en-FM",
3366 "en-GB",
3367 "en-GD",
3368 "en-GG",
3369 "en-GH",
3370 "en-GI",
3371 "en-GM",
3372 "en-GU",
3373 "en-GY",
3374 "en-HK",
3375 "en-IE",
3376 "en-IM",
3377 "en-IN",
3378 "en-IO",
3379 "en-JE",
3380 "en-JM",
3381 "en-KE",
3382 "en-KI",
3383 "en-KN",
3384 "en-KY",
3385 "en-LC",
3386 "en-LR",
3387 "en-LS",
3388 "en-MG",
3389 "en-MH",
3390 "en-MO",
3391 "en-MP",
3392 "en-MS",
3393 "en-MT",
3394 "en-MU",
3395 "en-MW",
3396 "en-MY",
3397 "en-NA",
3398 "en-NF",
3399 "en-NG",
3400 "en-NR",
3401 "en-NU",
3402 "en-NZ",
3403 "en-PG",
3404 "en-PH",
3405 "en-PK",
3406 "en-PN",
3407 "en-PR",
3408 "en-PW",
3409 "en-RW",
3410 "en-SB",
3411 "en-SC",
3412 "en-SD",
3413 "en-SG",
3414 "en-SH",
3415 "en-SL",
3416 "en-SS",
3417 "en-SX",
3418 "en-SZ",
3419 "en-TC",
3420 "en-TK",
3421 "en-TO",
3422 "en-TT",
3423 "en-TV",
3424 "en-TZ",
3425 "en-UG",
3426 "en-UM",
3427 "en-US",
3428 "en-US-POSIX",
3429 "en-VC",
3430 "en-VG",
3431 "en-VI",
3432 "en-VU",
3433 "en-WS",
3434 "en-ZA",
3435 "en-ZM",
3436 "en-ZW",
3437 "eo-001",
3438 "es-419",
3439 "es-AR",
3440 "es-BO",
3441 "es-CL",
3442 "es-CO",
3443 "es-CR",
3444 "es-CU",
3445 "es-DO",
3446 "es-EA",
3447 "es-EC",
3448 "es-ES",
3449 "es-GQ",
3450 "es-GT",
3451 "es-HN",
3452 "es-IC",
3453 "es-MX",
3454 "es-NI",
3455 "es-PA",
3456 "es-PE",
3457 "es-PH",
3458 "es-PR",
3459 "es-PY",
3460 "es-SV",
3461 "es-US",
3462 "es-UY",
3463 "es-VE",
3464 "et-EE",
3465 "eu-ES",
3466 "fa-AF",
3467 "fa-IR",
3468 "ff-CM",
3469 "ff-GN",
3470 "ff-MR",
3471 "ff-SN",
3472 "fi-FI",
3473 "fo-FO",
3474 "fr-BE",
3475 "fr-BF",
3476 "fr-BI",
3477 "fr-BJ",
3478 "fr-BL",
3479 "fr-CA",
3480 "fr-CD",
3481 "fr-CF",
3482 "fr-CG",
3483 "fr-CH",
3484 "fr-CI",
3485 "fr-CM",
3486 "fr-DJ",
3487 "fr-DZ",
3488 "fr-FR",
3489 "fr-GA",
3490 "fr-GF",
3491 "fr-GN",
3492 "fr-GP",
3493 "fr-GQ",
3494 "fr-HT",
3495 "fr-KM",
3496 "fr-LU",
3497 "fr-MA",
3498 "fr-MC",
3499 "fr-MF",
3500 "fr-MG",
3501 "fr-ML",
3502 "fr-MQ",
3503 "fr-MR",
3504 "fr-MU",
3505 "fr-NC",
3506 "fr-NE",
3507 "fr-PF",
3508 "fr-PM",
3509 "fr-RE",
3510 "fr-RW",
3511 "fr-SC",
3512 "fr-SN",
3513 "fr-SY",
3514 "fr-TD",
3515 "fr-TG",
3516 "fr-TN",
3517 "fr-VU",
3518 "fr-WF",
3519 "fr-YT",
3520 "fy-NL",
3521 "ga-IE",
3522 "gd-GB",
3523 "gl-ES",
3524 "gu-IN",
3525 "gv-IM",
3526 "ha-Latn",
3527 "ha-Latn-GH",
3528 "ha-Latn-NE",
3529 "ha-Latn-NG",
3530 "he-IL",
3531 "hi-IN",
3532 "hr-BA",
3533 "hr-HR",
3534 "hu-HU",
3535 "hy-AM",
3536 "id-ID",
3537 "ig-NG",
3538 "ii-CN",
3539 "is-IS",
3540 "it-CH",
3541 "it-IT",
3542 "it-SM",
3543 "ja-JP",
3544 "ka-GE",
3545 "ki-KE",
3546 "kk-Cyrl",
3547 "kk-Cyrl-KZ",
3548 "kl-GL",
3549 "km-KH",
3550 "kn-IN",
3551 "ko-KP",
3552 "ko-KR",
3553 "ks-Arab",
3554 "ks-Arab-IN",
3555 "kw-GB",
3556 "ky-Cyrl",
3557 "ky-Cyrl-KG",
3558 "lb-LU",
3559 "lg-UG",
3560 "ln-AO",
3561 "ln-CD",
3562 "ln-CF",
3563 "ln-CG",
3564 "lo-LA",
3565 "lt-LT",
3566 "lu-CD",
3567 "lv-LV",
3568 "mg-MG",
3569 "mk-MK",
3570 "ml-IN",
3571 "mn-Cyrl",
3572 "mn-Cyrl-MN",
3573 "mr-IN",
3574 "ms-Latn",
3575 "ms-Latn-BN",
3576 "ms-Latn-MY",
3577 "ms-Latn-SG",
3578 "mt-MT",
3579 "my-MM",
3580 "nb-NO",
3581 "nb-SJ",
3582 "nd-ZW",
3583 "ne-IN",
3584 "ne-NP",
3585 "nl-AW",
3586 "nl-BE",
3587 "nl-BQ",
3588 "nl-CW",
3589 "nl-NL",
3590 "nl-SR",
3591 "nl-SX",
3592 "nn-NO",
3593 "om-ET",
3594 "om-KE",
3595 "or-IN",
3596 "os-GE",
3597 "os-RU",
3598 "pa-Arab",
3599 "pa-Arab-PK",
3600 "pa-Guru",
3601 "pa-Guru-IN",
3602 "pl-PL",
3603 "ps-AF",
3604 "pt-AO",
3605 "pt-BR",
3606 "pt-CV",
3607 "pt-GW",
3608 "pt-MO",
3609 "pt-MZ",
3610 "pt-PT",
3611 "pt-ST",
3612 "pt-TL",
3613 "qu-BO",
3614 "qu-EC",
3615 "qu-PE",
3616 "rm-CH",
3617 "rn-BI",
3618 "ro-MD",
3619 "ro-RO",
3620 "ru-BY",
3621 "ru-KG",
3622 "ru-KZ",
3623 "ru-MD",
3624 "ru-RU",
3625 "ru-UA",
3626 "rw-RW",
3627 "se-FI",
3628 "se-NO",
3629 "se-SE",
3630 "sg-CF",
3631 "si-LK",
3632 "sk-SK",
3633 "sl-SI",
3634 "sn-ZW",
3635 "so-DJ",
3636 "so-ET",
3637 "so-KE",
3638 "so-SO",
3639 "sq-AL",
3640 "sq-MK",
3641 "sq-XK",
3642 "sr-Cyrl",
3643 "sr-Cyrl-BA",
3644 "sr-Cyrl-ME",
3645 "sr-Cyrl-RS",
3646 "sr-Cyrl-XK",
3647 "sr-Latn",
3648 "sr-Latn-BA",
3649 "sr-Latn-ME",
3650 "sr-Latn-RS",
3651 "sr-Latn-XK",
3652 "sv-AX",
3653 "sv-FI",
3654 "sv-SE",
3655 "sw-CD",
3656 "sw-KE",
3657 "sw-TZ",
3658 "sw-UG",
3659 "ta-IN",
3660 "ta-LK",
3661 "ta-MY",
3662 "ta-SG",
3663 "te-IN",
3664 "th-TH",
3665 "ti-ER",
3666 "ti-ET",
3667 "to-TO",
3668 "tr-CY",
3669 "tr-TR",
3670 "ug-Arab",
3671 "ug-Arab-CN",
3672 "uk-UA",
3673 "ur-IN",
3674 "ur-PK",
3675 "uz-Arab",
3676 "uz-Arab-AF",
3677 "uz-Cyrl",
3678 "uz-Cyrl-UZ",
3679 "uz-Latn",
3680 "uz-Latn-UZ",
3681 "vi-VN",
3682 "yi-001",
3683 "yo-BJ",
3684 "yo-NG",
3685 "zh-Hans",
3686 "zh-Hans-CN",
3687 "zh-Hans-HK",
3688 "zh-Hans-MO",
3689 "zh-Hans-SG",
3690 "zh-Hant",
3691 "zh-Hant-HK",
3692 "zh-Hant-MO",
3693 "zh-Hant-TW",
3694 "zu-ZA"
3695 ],
3696
3697 us_states_and_dc: [
3698 {name: 'Alabama', abbreviation: 'AL'},
3699 {name: 'Alaska', abbreviation: 'AK'},
3700 {name: 'Arizona', abbreviation: 'AZ'},
3701 {name: 'Arkansas', abbreviation: 'AR'},
3702 {name: 'California', abbreviation: 'CA'},
3703 {name: 'Colorado', abbreviation: 'CO'},
3704 {name: 'Connecticut', abbreviation: 'CT'},
3705 {name: 'Delaware', abbreviation: 'DE'},
3706 {name: 'District of Columbia', abbreviation: 'DC'},
3707 {name: 'Florida', abbreviation: 'FL'},
3708 {name: 'Georgia', abbreviation: 'GA'},
3709 {name: 'Hawaii', abbreviation: 'HI'},
3710 {name: 'Idaho', abbreviation: 'ID'},
3711 {name: 'Illinois', abbreviation: 'IL'},
3712 {name: 'Indiana', abbreviation: 'IN'},
3713 {name: 'Iowa', abbreviation: 'IA'},
3714 {name: 'Kansas', abbreviation: 'KS'},
3715 {name: 'Kentucky', abbreviation: 'KY'},
3716 {name: 'Louisiana', abbreviation: 'LA'},
3717 {name: 'Maine', abbreviation: 'ME'},
3718 {name: 'Maryland', abbreviation: 'MD'},
3719 {name: 'Massachusetts', abbreviation: 'MA'},
3720 {name: 'Michigan', abbreviation: 'MI'},
3721 {name: 'Minnesota', abbreviation: 'MN'},
3722 {name: 'Mississippi', abbreviation: 'MS'},
3723 {name: 'Missouri', abbreviation: 'MO'},
3724 {name: 'Montana', abbreviation: 'MT'},
3725 {name: 'Nebraska', abbreviation: 'NE'},
3726 {name: 'Nevada', abbreviation: 'NV'},
3727 {name: 'New Hampshire', abbreviation: 'NH'},
3728 {name: 'New Jersey', abbreviation: 'NJ'},
3729 {name: 'New Mexico', abbreviation: 'NM'},
3730 {name: 'New York', abbreviation: 'NY'},
3731 {name: 'North Carolina', abbreviation: 'NC'},
3732 {name: 'North Dakota', abbreviation: 'ND'},
3733 {name: 'Ohio', abbreviation: 'OH'},
3734 {name: 'Oklahoma', abbreviation: 'OK'},
3735 {name: 'Oregon', abbreviation: 'OR'},
3736 {name: 'Pennsylvania', abbreviation: 'PA'},
3737 {name: 'Rhode Island', abbreviation: 'RI'},
3738 {name: 'South Carolina', abbreviation: 'SC'},
3739 {name: 'South Dakota', abbreviation: 'SD'},
3740 {name: 'Tennessee', abbreviation: 'TN'},
3741 {name: 'Texas', abbreviation: 'TX'},
3742 {name: 'Utah', abbreviation: 'UT'},
3743 {name: 'Vermont', abbreviation: 'VT'},
3744 {name: 'Virginia', abbreviation: 'VA'},
3745 {name: 'Washington', abbreviation: 'WA'},
3746 {name: 'West Virginia', abbreviation: 'WV'},
3747 {name: 'Wisconsin', abbreviation: 'WI'},
3748 {name: 'Wyoming', abbreviation: 'WY'}
3749 ],
3750
3751 territories: [
3752 {name: 'American Samoa', abbreviation: 'AS'},
3753 {name: 'Federated States of Micronesia', abbreviation: 'FM'},
3754 {name: 'Guam', abbreviation: 'GU'},
3755 {name: 'Marshall Islands', abbreviation: 'MH'},
3756 {name: 'Northern Mariana Islands', abbreviation: 'MP'},
3757 {name: 'Puerto Rico', abbreviation: 'PR'},
3758 {name: 'Virgin Islands, U.S.', abbreviation: 'VI'}
3759 ],
3760
3761 armed_forces: [
3762 {name: 'Armed Forces Europe', abbreviation: 'AE'},
3763 {name: 'Armed Forces Pacific', abbreviation: 'AP'},
3764 {name: 'Armed Forces the Americas', abbreviation: 'AA'}
3765 ],
3766
3767 country_regions: {
3768 it: [
3769 { name: "Valle d'Aosta", abbreviation: "VDA" },
3770 { name: "Piemonte", abbreviation: "PIE" },
3771 { name: "Lombardia", abbreviation: "LOM" },
3772 { name: "Veneto", abbreviation: "VEN" },
3773 { name: "Trentino Alto Adige", abbreviation: "TAA" },
3774 { name: "Friuli Venezia Giulia", abbreviation: "FVG" },
3775 { name: "Liguria", abbreviation: "LIG" },
3776 { name: "Emilia Romagna", abbreviation: "EMR" },
3777 { name: "Toscana", abbreviation: "TOS" },
3778 { name: "Umbria", abbreviation: "UMB" },
3779 { name: "Marche", abbreviation: "MAR" },
3780 { name: "Abruzzo", abbreviation: "ABR" },
3781 { name: "Lazio", abbreviation: "LAZ" },
3782 { name: "Campania", abbreviation: "CAM" },
3783 { name: "Puglia", abbreviation: "PUG" },
3784 { name: "Basilicata", abbreviation: "BAS" },
3785 { name: "Molise", abbreviation: "MOL" },
3786 { name: "Calabria", abbreviation: "CAL" },
3787 { name: "Sicilia", abbreviation: "SIC" },
3788 { name: "Sardegna", abbreviation: "SAR" }
3789 ]
3790 },
3791
3792 street_suffixes: {
3793 'us': [
3794 {name: 'Avenue', abbreviation: 'Ave'},
3795 {name: 'Boulevard', abbreviation: 'Blvd'},
3796 {name: 'Center', abbreviation: 'Ctr'},
3797 {name: 'Circle', abbreviation: 'Cir'},
3798 {name: 'Court', abbreviation: 'Ct'},
3799 {name: 'Drive', abbreviation: 'Dr'},
3800 {name: 'Extension', abbreviation: 'Ext'},
3801 {name: 'Glen', abbreviation: 'Gln'},
3802 {name: 'Grove', abbreviation: 'Grv'},
3803 {name: 'Heights', abbreviation: 'Hts'},
3804 {name: 'Highway', abbreviation: 'Hwy'},
3805 {name: 'Junction', abbreviation: 'Jct'},
3806 {name: 'Key', abbreviation: 'Key'},
3807 {name: 'Lane', abbreviation: 'Ln'},
3808 {name: 'Loop', abbreviation: 'Loop'},
3809 {name: 'Manor', abbreviation: 'Mnr'},
3810 {name: 'Mill', abbreviation: 'Mill'},
3811 {name: 'Park', abbreviation: 'Park'},
3812 {name: 'Parkway', abbreviation: 'Pkwy'},
3813 {name: 'Pass', abbreviation: 'Pass'},
3814 {name: 'Path', abbreviation: 'Path'},
3815 {name: 'Pike', abbreviation: 'Pike'},
3816 {name: 'Place', abbreviation: 'Pl'},
3817 {name: 'Plaza', abbreviation: 'Plz'},
3818 {name: 'Point', abbreviation: 'Pt'},
3819 {name: 'Ridge', abbreviation: 'Rdg'},
3820 {name: 'River', abbreviation: 'Riv'},
3821 {name: 'Road', abbreviation: 'Rd'},
3822 {name: 'Square', abbreviation: 'Sq'},
3823 {name: 'Street', abbreviation: 'St'},
3824 {name: 'Terrace', abbreviation: 'Ter'},
3825 {name: 'Trail', abbreviation: 'Trl'},
3826 {name: 'Turnpike', abbreviation: 'Tpke'},
3827 {name: 'View', abbreviation: 'Vw'},
3828 {name: 'Way', abbreviation: 'Way'}
3829 ],
3830 'it': [
3831 { name: 'Accesso', abbreviation: 'Acc.' },
3832 { name: 'Alzaia', abbreviation: 'Alz.' },
3833 { name: 'Arco', abbreviation: 'Arco' },
3834 { name: 'Archivolto', abbreviation: 'Acv.' },
3835 { name: 'Arena', abbreviation: 'Arena' },
3836 { name: 'Argine', abbreviation: 'Argine' },
3837 { name: 'Bacino', abbreviation: 'Bacino' },
3838 { name: 'Banchi', abbreviation: 'Banchi' },
3839 { name: 'Banchina', abbreviation: 'Ban.' },
3840 { name: 'Bastioni', abbreviation: 'Bas.' },
3841 { name: 'Belvedere', abbreviation: 'Belv.' },
3842 { name: 'Borgata', abbreviation: 'B.ta' },
3843 { name: 'Borgo', abbreviation: 'B.go' },
3844 { name: 'Calata', abbreviation: 'Cal.' },
3845 { name: 'Calle', abbreviation: 'Calle' },
3846 { name: 'Campiello', abbreviation: 'Cam.' },
3847 { name: 'Campo', abbreviation: 'Cam.' },
3848 { name: 'Canale', abbreviation: 'Can.' },
3849 { name: 'Carraia', abbreviation: 'Carr.' },
3850 { name: 'Cascina', abbreviation: 'Cascina' },
3851 { name: 'Case sparse', abbreviation: 'c.s.' },
3852 { name: 'Cavalcavia', abbreviation: 'Cv.' },
3853 { name: 'Circonvallazione', abbreviation: 'Cv.' },
3854 { name: 'Complanare', abbreviation: 'C.re' },
3855 { name: 'Contrada', abbreviation: 'C.da' },
3856 { name: 'Corso', abbreviation: 'C.so' },
3857 { name: 'Corte', abbreviation: 'C.te' },
3858 { name: 'Cortile', abbreviation: 'C.le' },
3859 { name: 'Diramazione', abbreviation: 'Dir.' },
3860 { name: 'Fondaco', abbreviation: 'F.co' },
3861 { name: 'Fondamenta', abbreviation: 'F.ta' },
3862 { name: 'Fondo', abbreviation: 'F.do' },
3863 { name: 'Frazione', abbreviation: 'Fr.' },
3864 { name: 'Isola', abbreviation: 'Is.' },
3865 { name: 'Largo', abbreviation: 'L.go' },
3866 { name: 'Litoranea', abbreviation: 'Lit.' },
3867 { name: 'Lungolago', abbreviation: 'L.go lago' },
3868 { name: 'Lungo Po', abbreviation: 'l.go Po' },
3869 { name: 'Molo', abbreviation: 'Molo' },
3870 { name: 'Mura', abbreviation: 'Mura' },
3871 { name: 'Passaggio privato', abbreviation: 'pass. priv.' },
3872 { name: 'Passeggiata', abbreviation: 'Pass.' },
3873 { name: 'Piazza', abbreviation: 'P.zza' },
3874 { name: 'Piazzale', abbreviation: 'P.le' },
3875 { name: 'Ponte', abbreviation: 'P.te' },
3876 { name: 'Portico', abbreviation: 'P.co' },
3877 { name: 'Rampa', abbreviation: 'Rampa' },
3878 { name: 'Regione', abbreviation: 'Reg.' },
3879 { name: 'Rione', abbreviation: 'R.ne' },
3880 { name: 'Rio', abbreviation: 'Rio' },
3881 { name: 'Ripa', abbreviation: 'Ripa' },
3882 { name: 'Riva', abbreviation: 'Riva' },
3883 { name: 'Rondò', abbreviation: 'Rondò' },
3884 { name: 'Rotonda', abbreviation: 'Rot.' },
3885 { name: 'Sagrato', abbreviation: 'Sagr.' },
3886 { name: 'Salita', abbreviation: 'Sal.' },
3887 { name: 'Scalinata', abbreviation: 'Scal.' },
3888 { name: 'Scalone', abbreviation: 'Scal.' },
3889 { name: 'Slargo', abbreviation: 'Sl.' },
3890 { name: 'Sottoportico', abbreviation: 'Sott.' },
3891 { name: 'Strada', abbreviation: 'Str.' },
3892 { name: 'Stradale', abbreviation: 'Str.le' },
3893 { name: 'Strettoia', abbreviation: 'Strett.' },
3894 { name: 'Traversa', abbreviation: 'Trav.' },
3895 { name: 'Via', abbreviation: 'V.' },
3896 { name: 'Viale', abbreviation: 'V.le' },
3897 { name: 'Vicinale', abbreviation: 'Vic.le' },
3898 { name: 'Vicolo', abbreviation: 'Vic.' }
3899 ],
3900 'uk' : [
3901 {name: 'Avenue', abbreviation: 'Ave'},
3902 {name: 'Close', abbreviation: 'Cl'},
3903 {name: 'Court', abbreviation: 'Ct'},
3904 {name: 'Crescent', abbreviation: 'Cr'},
3905 {name: 'Drive', abbreviation: 'Dr'},
3906 {name: 'Garden', abbreviation: 'Gdn'},
3907 {name: 'Gardens', abbreviation: 'Gdns'},
3908 {name: 'Green', abbreviation: 'Gn'},
3909 {name: 'Grove', abbreviation: 'Gr'},
3910 {name: 'Lane', abbreviation: 'Ln'},
3911 {name: 'Mount', abbreviation: 'Mt'},
3912 {name: 'Place', abbreviation: 'Pl'},
3913 {name: 'Park', abbreviation: 'Pk'},
3914 {name: 'Ridge', abbreviation: 'Rdg'},
3915 {name: 'Road', abbreviation: 'Rd'},
3916 {name: 'Square', abbreviation: 'Sq'},
3917 {name: 'Street', abbreviation: 'St'},
3918 {name: 'Terrace', abbreviation: 'Ter'},
3919 {name: 'Valley', abbreviation: 'Val'}
3920 ]
3921 },
3922
3923 months: [
3924 {name: 'January', short_name: 'Jan', numeric: '01', days: 31},
3925 // Not messing with leap years...
3926 {name: 'February', short_name: 'Feb', numeric: '02', days: 28},
3927 {name: 'March', short_name: 'Mar', numeric: '03', days: 31},
3928 {name: 'April', short_name: 'Apr', numeric: '04', days: 30},
3929 {name: 'May', short_name: 'May', numeric: '05', days: 31},
3930 {name: 'June', short_name: 'Jun', numeric: '06', days: 30},
3931 {name: 'July', short_name: 'Jul', numeric: '07', days: 31},
3932 {name: 'August', short_name: 'Aug', numeric: '08', days: 31},
3933 {name: 'September', short_name: 'Sep', numeric: '09', days: 30},
3934 {name: 'October', short_name: 'Oct', numeric: '10', days: 31},
3935 {name: 'November', short_name: 'Nov', numeric: '11', days: 30},
3936 {name: 'December', short_name: 'Dec', numeric: '12', days: 31}
3937 ],
3938
3939 // http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number_.28IIN.29
3940 cc_types: [
3941 {name: "American Express", short_name: 'amex', prefix: '34', length: 15},
3942 {name: "Bankcard", short_name: 'bankcard', prefix: '5610', length: 16},
3943 {name: "China UnionPay", short_name: 'chinaunion', prefix: '62', length: 16},
3944 {name: "Diners Club Carte Blanche", short_name: 'dccarte', prefix: '300', length: 14},
3945 {name: "Diners Club enRoute", short_name: 'dcenroute', prefix: '2014', length: 15},
3946 {name: "Diners Club International", short_name: 'dcintl', prefix: '36', length: 14},
3947 {name: "Diners Club United States & Canada", short_name: 'dcusc', prefix: '54', length: 16},
3948 {name: "Discover Card", short_name: 'discover', prefix: '6011', length: 16},
3949 {name: "InstaPayment", short_name: 'instapay', prefix: '637', length: 16},
3950 {name: "JCB", short_name: 'jcb', prefix: '3528', length: 16},
3951 {name: "Laser", short_name: 'laser', prefix: '6304', length: 16},
3952 {name: "Maestro", short_name: 'maestro', prefix: '5018', length: 16},
3953 {name: "Mastercard", short_name: 'mc', prefix: '51', length: 16},
3954 {name: "Solo", short_name: 'solo', prefix: '6334', length: 16},
3955 {name: "Switch", short_name: 'switch', prefix: '4903', length: 16},
3956 {name: "Visa", short_name: 'visa', prefix: '4', length: 16},
3957 {name: "Visa Electron", short_name: 'electron', prefix: '4026', length: 16}
3958 ],
3959
3960 //return all world currency by ISO 4217
3961 currency_types: [
3962 {'code' : 'AED', 'name' : 'United Arab Emirates Dirham'},
3963 {'code' : 'AFN', 'name' : 'Afghanistan Afghani'},
3964 {'code' : 'ALL', 'name' : 'Albania Lek'},
3965 {'code' : 'AMD', 'name' : 'Armenia Dram'},
3966 {'code' : 'ANG', 'name' : 'Netherlands Antilles Guilder'},
3967 {'code' : 'AOA', 'name' : 'Angola Kwanza'},
3968 {'code' : 'ARS', 'name' : 'Argentina Peso'},
3969 {'code' : 'AUD', 'name' : 'Australia Dollar'},
3970 {'code' : 'AWG', 'name' : 'Aruba Guilder'},
3971 {'code' : 'AZN', 'name' : 'Azerbaijan New Manat'},
3972 {'code' : 'BAM', 'name' : 'Bosnia and Herzegovina Convertible Marka'},
3973 {'code' : 'BBD', 'name' : 'Barbados Dollar'},
3974 {'code' : 'BDT', 'name' : 'Bangladesh Taka'},
3975 {'code' : 'BGN', 'name' : 'Bulgaria Lev'},
3976 {'code' : 'BHD', 'name' : 'Bahrain Dinar'},
3977 {'code' : 'BIF', 'name' : 'Burundi Franc'},
3978 {'code' : 'BMD', 'name' : 'Bermuda Dollar'},
3979 {'code' : 'BND', 'name' : 'Brunei Darussalam Dollar'},
3980 {'code' : 'BOB', 'name' : 'Bolivia Boliviano'},
3981 {'code' : 'BRL', 'name' : 'Brazil Real'},
3982 {'code' : 'BSD', 'name' : 'Bahamas Dollar'},
3983 {'code' : 'BTN', 'name' : 'Bhutan Ngultrum'},
3984 {'code' : 'BWP', 'name' : 'Botswana Pula'},
3985 {'code' : 'BYR', 'name' : 'Belarus Ruble'},
3986 {'code' : 'BZD', 'name' : 'Belize Dollar'},
3987 {'code' : 'CAD', 'name' : 'Canada Dollar'},
3988 {'code' : 'CDF', 'name' : 'Congo/Kinshasa Franc'},
3989 {'code' : 'CHF', 'name' : 'Switzerland Franc'},
3990 {'code' : 'CLP', 'name' : 'Chile Peso'},
3991 {'code' : 'CNY', 'name' : 'China Yuan Renminbi'},
3992 {'code' : 'COP', 'name' : 'Colombia Peso'},
3993 {'code' : 'CRC', 'name' : 'Costa Rica Colon'},
3994 {'code' : 'CUC', 'name' : 'Cuba Convertible Peso'},
3995 {'code' : 'CUP', 'name' : 'Cuba Peso'},
3996 {'code' : 'CVE', 'name' : 'Cape Verde Escudo'},
3997 {'code' : 'CZK', 'name' : 'Czech Republic Koruna'},
3998 {'code' : 'DJF', 'name' : 'Djibouti Franc'},
3999 {'code' : 'DKK', 'name' : 'Denmark Krone'},
4000 {'code' : 'DOP', 'name' : 'Dominican Republic Peso'},
4001 {'code' : 'DZD', 'name' : 'Algeria Dinar'},
4002 {'code' : 'EGP', 'name' : 'Egypt Pound'},
4003 {'code' : 'ERN', 'name' : 'Eritrea Nakfa'},
4004 {'code' : 'ETB', 'name' : 'Ethiopia Birr'},
4005 {'code' : 'EUR', 'name' : 'Euro Member Countries'},
4006 {'code' : 'FJD', 'name' : 'Fiji Dollar'},
4007 {'code' : 'FKP', 'name' : 'Falkland Islands (Malvinas) Pound'},
4008 {'code' : 'GBP', 'name' : 'United Kingdom Pound'},
4009 {'code' : 'GEL', 'name' : 'Georgia Lari'},
4010 {'code' : 'GGP', 'name' : 'Guernsey Pound'},
4011 {'code' : 'GHS', 'name' : 'Ghana Cedi'},
4012 {'code' : 'GIP', 'name' : 'Gibraltar Pound'},
4013 {'code' : 'GMD', 'name' : 'Gambia Dalasi'},
4014 {'code' : 'GNF', 'name' : 'Guinea Franc'},
4015 {'code' : 'GTQ', 'name' : 'Guatemala Quetzal'},
4016 {'code' : 'GYD', 'name' : 'Guyana Dollar'},
4017 {'code' : 'HKD', 'name' : 'Hong Kong Dollar'},
4018 {'code' : 'HNL', 'name' : 'Honduras Lempira'},
4019 {'code' : 'HRK', 'name' : 'Croatia Kuna'},
4020 {'code' : 'HTG', 'name' : 'Haiti Gourde'},
4021 {'code' : 'HUF', 'name' : 'Hungary Forint'},
4022 {'code' : 'IDR', 'name' : 'Indonesia Rupiah'},
4023 {'code' : 'ILS', 'name' : 'Israel Shekel'},
4024 {'code' : 'IMP', 'name' : 'Isle of Man Pound'},
4025 {'code' : 'INR', 'name' : 'India Rupee'},
4026 {'code' : 'IQD', 'name' : 'Iraq Dinar'},
4027 {'code' : 'IRR', 'name' : 'Iran Rial'},
4028 {'code' : 'ISK', 'name' : 'Iceland Krona'},
4029 {'code' : 'JEP', 'name' : 'Jersey Pound'},
4030 {'code' : 'JMD', 'name' : 'Jamaica Dollar'},
4031 {'code' : 'JOD', 'name' : 'Jordan Dinar'},
4032 {'code' : 'JPY', 'name' : 'Japan Yen'},
4033 {'code' : 'KES', 'name' : 'Kenya Shilling'},
4034 {'code' : 'KGS', 'name' : 'Kyrgyzstan Som'},
4035 {'code' : 'KHR', 'name' : 'Cambodia Riel'},
4036 {'code' : 'KMF', 'name' : 'Comoros Franc'},
4037 {'code' : 'KPW', 'name' : 'Korea (North) Won'},
4038 {'code' : 'KRW', 'name' : 'Korea (South) Won'},
4039 {'code' : 'KWD', 'name' : 'Kuwait Dinar'},
4040 {'code' : 'KYD', 'name' : 'Cayman Islands Dollar'},
4041 {'code' : 'KZT', 'name' : 'Kazakhstan Tenge'},
4042 {'code' : 'LAK', 'name' : 'Laos Kip'},
4043 {'code' : 'LBP', 'name' : 'Lebanon Pound'},
4044 {'code' : 'LKR', 'name' : 'Sri Lanka Rupee'},
4045 {'code' : 'LRD', 'name' : 'Liberia Dollar'},
4046 {'code' : 'LSL', 'name' : 'Lesotho Loti'},
4047 {'code' : 'LTL', 'name' : 'Lithuania Litas'},
4048 {'code' : 'LYD', 'name' : 'Libya Dinar'},
4049 {'code' : 'MAD', 'name' : 'Morocco Dirham'},
4050 {'code' : 'MDL', 'name' : 'Moldova Leu'},
4051 {'code' : 'MGA', 'name' : 'Madagascar Ariary'},
4052 {'code' : 'MKD', 'name' : 'Macedonia Denar'},
4053 {'code' : 'MMK', 'name' : 'Myanmar (Burma) Kyat'},
4054 {'code' : 'MNT', 'name' : 'Mongolia Tughrik'},
4055 {'code' : 'MOP', 'name' : 'Macau Pataca'},
4056 {'code' : 'MRO', 'name' : 'Mauritania Ouguiya'},
4057 {'code' : 'MUR', 'name' : 'Mauritius Rupee'},
4058 {'code' : 'MVR', 'name' : 'Maldives (Maldive Islands) Rufiyaa'},
4059 {'code' : 'MWK', 'name' : 'Malawi Kwacha'},
4060 {'code' : 'MXN', 'name' : 'Mexico Peso'},
4061 {'code' : 'MYR', 'name' : 'Malaysia Ringgit'},
4062 {'code' : 'MZN', 'name' : 'Mozambique Metical'},
4063 {'code' : 'NAD', 'name' : 'Namibia Dollar'},
4064 {'code' : 'NGN', 'name' : 'Nigeria Naira'},
4065 {'code' : 'NIO', 'name' : 'Nicaragua Cordoba'},
4066 {'code' : 'NOK', 'name' : 'Norway Krone'},
4067 {'code' : 'NPR', 'name' : 'Nepal Rupee'},
4068 {'code' : 'NZD', 'name' : 'New Zealand Dollar'},
4069 {'code' : 'OMR', 'name' : 'Oman Rial'},
4070 {'code' : 'PAB', 'name' : 'Panama Balboa'},
4071 {'code' : 'PEN', 'name' : 'Peru Nuevo Sol'},
4072 {'code' : 'PGK', 'name' : 'Papua New Guinea Kina'},
4073 {'code' : 'PHP', 'name' : 'Philippines Peso'},
4074 {'code' : 'PKR', 'name' : 'Pakistan Rupee'},
4075 {'code' : 'PLN', 'name' : 'Poland Zloty'},
4076 {'code' : 'PYG', 'name' : 'Paraguay Guarani'},
4077 {'code' : 'QAR', 'name' : 'Qatar Riyal'},
4078 {'code' : 'RON', 'name' : 'Romania New Leu'},
4079 {'code' : 'RSD', 'name' : 'Serbia Dinar'},
4080 {'code' : 'RUB', 'name' : 'Russia Ruble'},
4081 {'code' : 'RWF', 'name' : 'Rwanda Franc'},
4082 {'code' : 'SAR', 'name' : 'Saudi Arabia Riyal'},
4083 {'code' : 'SBD', 'name' : 'Solomon Islands Dollar'},
4084 {'code' : 'SCR', 'name' : 'Seychelles Rupee'},
4085 {'code' : 'SDG', 'name' : 'Sudan Pound'},
4086 {'code' : 'SEK', 'name' : 'Sweden Krona'},
4087 {'code' : 'SGD', 'name' : 'Singapore Dollar'},
4088 {'code' : 'SHP', 'name' : 'Saint Helena Pound'},
4089 {'code' : 'SLL', 'name' : 'Sierra Leone Leone'},
4090 {'code' : 'SOS', 'name' : 'Somalia Shilling'},
4091 {'code' : 'SPL', 'name' : 'Seborga Luigino'},
4092 {'code' : 'SRD', 'name' : 'Suriname Dollar'},
4093 {'code' : 'STD', 'name' : 'São Tomé and Príncipe Dobra'},
4094 {'code' : 'SVC', 'name' : 'El Salvador Colon'},
4095 {'code' : 'SYP', 'name' : 'Syria Pound'},
4096 {'code' : 'SZL', 'name' : 'Swaziland Lilangeni'},
4097 {'code' : 'THB', 'name' : 'Thailand Baht'},
4098 {'code' : 'TJS', 'name' : 'Tajikistan Somoni'},
4099 {'code' : 'TMT', 'name' : 'Turkmenistan Manat'},
4100 {'code' : 'TND', 'name' : 'Tunisia Dinar'},
4101 {'code' : 'TOP', 'name' : 'Tonga Pa\'anga'},
4102 {'code' : 'TRY', 'name' : 'Turkey Lira'},
4103 {'code' : 'TTD', 'name' : 'Trinidad and Tobago Dollar'},
4104 {'code' : 'TVD', 'name' : 'Tuvalu Dollar'},
4105 {'code' : 'TWD', 'name' : 'Taiwan New Dollar'},
4106 {'code' : 'TZS', 'name' : 'Tanzania Shilling'},
4107 {'code' : 'UAH', 'name' : 'Ukraine Hryvnia'},
4108 {'code' : 'UGX', 'name' : 'Uganda Shilling'},
4109 {'code' : 'USD', 'name' : 'United States Dollar'},
4110 {'code' : 'UYU', 'name' : 'Uruguay Peso'},
4111 {'code' : 'UZS', 'name' : 'Uzbekistan Som'},
4112 {'code' : 'VEF', 'name' : 'Venezuela Bolivar'},
4113 {'code' : 'VND', 'name' : 'Viet Nam Dong'},
4114 {'code' : 'VUV', 'name' : 'Vanuatu Vatu'},
4115 {'code' : 'WST', 'name' : 'Samoa Tala'},
4116 {'code' : 'XAF', 'name' : 'Communauté Financière Africaine (BEAC) CFA Franc BEAC'},
4117 {'code' : 'XCD', 'name' : 'East Caribbean Dollar'},
4118 {'code' : 'XDR', 'name' : 'International Monetary Fund (IMF) Special Drawing Rights'},
4119 {'code' : 'XOF', 'name' : 'Communauté Financière Africaine (BCEAO) Franc'},
4120 {'code' : 'XPF', 'name' : 'Comptoirs Français du Pacifique (CFP) Franc'},
4121 {'code' : 'YER', 'name' : 'Yemen Rial'},
4122 {'code' : 'ZAR', 'name' : 'South Africa Rand'},
4123 {'code' : 'ZMW', 'name' : 'Zambia Kwacha'},
4124 {'code' : 'ZWD', 'name' : 'Zimbabwe Dollar'}
4125 ],
4126
4127 // return the names of all valide colors
4128 colorNames : [ "AliceBlue", "Black", "Navy", "DarkBlue", "MediumBlue", "Blue", "DarkGreen", "Green", "Teal", "DarkCyan", "DeepSkyBlue", "DarkTurquoise", "MediumSpringGreen", "Lime", "SpringGreen",
4129 "Aqua", "Cyan", "MidnightBlue", "DodgerBlue", "LightSeaGreen", "ForestGreen", "SeaGreen", "DarkSlateGray", "LimeGreen", "MediumSeaGreen", "Turquoise", "RoyalBlue", "SteelBlue", "DarkSlateBlue", "MediumTurquoise",
4130 "Indigo", "DarkOliveGreen", "CadetBlue", "CornflowerBlue", "RebeccaPurple", "MediumAquaMarine", "DimGray", "SlateBlue", "OliveDrab", "SlateGray", "LightSlateGray", "MediumSlateBlue", "LawnGreen", "Chartreuse",
4131 "Aquamarine", "Maroon", "Purple", "Olive", "Gray", "SkyBlue", "LightSkyBlue", "BlueViolet", "DarkRed", "DarkMagenta", "SaddleBrown", "Ivory", "White",
4132 "DarkSeaGreen", "LightGreen", "MediumPurple", "DarkViolet", "PaleGreen", "DarkOrchid", "YellowGreen", "Sienna", "Brown", "DarkGray", "LightBlue", "GreenYellow", "PaleTurquoise", "LightSteelBlue", "PowderBlue",
4133 "FireBrick", "DarkGoldenRod", "MediumOrchid", "RosyBrown", "DarkKhaki", "Silver", "MediumVioletRed", "IndianRed", "Peru", "Chocolate", "Tan", "LightGray", "Thistle", "Orchid", "GoldenRod", "PaleVioletRed",
4134 "Crimson", "Gainsboro", "Plum", "BurlyWood", "LightCyan", "Lavender", "DarkSalmon", "Violet", "PaleGoldenRod", "LightCoral", "Khaki", "AliceBlue", "HoneyDew", "Azure", "SandyBrown", "Wheat", "Beige", "WhiteSmoke",
4135 "MintCream", "GhostWhite", "Salmon", "AntiqueWhite", "Linen", "LightGoldenRodYellow", "OldLace", "Red", "Fuchsia", "Magenta", "DeepPink", "OrangeRed", "Tomato", "HotPink", "Coral", "DarkOrange", "LightSalmon", "Orange",
4136 "LightPink", "Pink", "Gold", "PeachPuff", "NavajoWhite", "Moccasin", "Bisque", "MistyRose", "BlanchedAlmond", "PapayaWhip", "LavenderBlush", "SeaShell", "Cornsilk", "LemonChiffon", "FloralWhite", "Snow", "Yellow", "LightYellow"
4137 ],
4138
4139 // Data taken from https://www.sec.gov/rules/other/4-460list.htm
4140 company: [ "3Com Corp",
4141 "3M Company",
4142 "A.G. Edwards Inc.",
4143 "Abbott Laboratories",
4144 "Abercrombie & Fitch Co.",
4145 "ABM Industries Incorporated",
4146 "Ace Hardware Corporation",
4147 "ACT Manufacturing Inc.",
4148 "Acterna Corp.",
4149 "Adams Resources & Energy, Inc.",
4150 "ADC Telecommunications, Inc.",
4151 "Adelphia Communications Corporation",
4152 "Administaff, Inc.",
4153 "Adobe Systems Incorporated",
4154 "Adolph Coors Company",
4155 "Advance Auto Parts, Inc.",
4156 "Advanced Micro Devices, Inc.",
4157 "AdvancePCS, Inc.",
4158 "Advantica Restaurant Group, Inc.",
4159 "The AES Corporation",
4160 "Aetna Inc.",
4161 "Affiliated Computer Services, Inc.",
4162 "AFLAC Incorporated",
4163 "AGCO Corporation",
4164 "Agilent Technologies, Inc.",
4165 "Agway Inc.",
4166 "Apartment Investment and Management Company",
4167 "Air Products and Chemicals, Inc.",
4168 "Airborne, Inc.",
4169 "Airgas, Inc.",
4170 "AK Steel Holding Corporation",
4171 "Alaska Air Group, Inc.",
4172 "Alberto-Culver Company",
4173 "Albertson's, Inc.",
4174 "Alcoa Inc.",
4175 "Alleghany Corporation",
4176 "Allegheny Energy, Inc.",
4177 "Allegheny Technologies Incorporated",
4178 "Allergan, Inc.",
4179 "ALLETE, Inc.",
4180 "Alliant Energy Corporation",
4181 "Allied Waste Industries, Inc.",
4182 "Allmerica Financial Corporation",
4183 "The Allstate Corporation",
4184 "ALLTEL Corporation",
4185 "The Alpine Group, Inc.",
4186 "Amazon.com, Inc.",
4187 "AMC Entertainment Inc.",
4188 "American Power Conversion Corporation",
4189 "Amerada Hess Corporation",
4190 "AMERCO",
4191 "Ameren Corporation",
4192 "America West Holdings Corporation",
4193 "American Axle & Manufacturing Holdings, Inc.",
4194 "American Eagle Outfitters, Inc.",
4195 "American Electric Power Company, Inc.",
4196 "American Express Company",
4197 "American Financial Group, Inc.",
4198 "American Greetings Corporation",
4199 "American International Group, Inc.",
4200 "American Standard Companies Inc.",
4201 "American Water Works Company, Inc.",
4202 "AmerisourceBergen Corporation",
4203 "Ames Department Stores, Inc.",
4204 "Amgen Inc.",
4205 "Amkor Technology, Inc.",
4206 "AMR Corporation",
4207 "AmSouth Bancorp.",
4208 "Amtran, Inc.",
4209 "Anadarko Petroleum Corporation",
4210 "Analog Devices, Inc.",
4211 "Anheuser-Busch Companies, Inc.",
4212 "Anixter International Inc.",
4213 "AnnTaylor Inc.",
4214 "Anthem, Inc.",
4215 "AOL Time Warner Inc.",
4216 "Aon Corporation",
4217 "Apache Corporation",
4218 "Apple Computer, Inc.",
4219 "Applera Corporation",
4220 "Applied Industrial Technologies, Inc.",
4221 "Applied Materials, Inc.",
4222 "Aquila, Inc.",
4223 "ARAMARK Corporation",
4224 "Arch Coal, Inc.",
4225 "Archer Daniels Midland Company",
4226 "Arkansas Best Corporation",
4227 "Armstrong Holdings, Inc.",
4228 "Arrow Electronics, Inc.",
4229 "ArvinMeritor, Inc.",
4230 "Ashland Inc.",
4231 "Astoria Financial Corporation",
4232 "AT&T Corp.",
4233 "Atmel Corporation",
4234 "Atmos Energy Corporation",
4235 "Audiovox Corporation",
4236 "Autoliv, Inc.",
4237 "Automatic Data Processing, Inc.",
4238 "AutoNation, Inc.",
4239 "AutoZone, Inc.",
4240 "Avaya Inc.",
4241 "Avery Dennison Corporation",
4242 "Avista Corporation",
4243 "Avnet, Inc.",
4244 "Avon Products, Inc.",
4245 "Baker Hughes Incorporated",
4246 "Ball Corporation",
4247 "Bank of America Corporation",
4248 "The Bank of New York Company, Inc.",
4249 "Bank One Corporation",
4250 "Banknorth Group, Inc.",
4251 "Banta Corporation",
4252 "Barnes & Noble, Inc.",
4253 "Bausch & Lomb Incorporated",
4254 "Baxter International Inc.",
4255 "BB&T Corporation",
4256 "The Bear Stearns Companies Inc.",
4257 "Beazer Homes USA, Inc.",
4258 "Beckman Coulter, Inc.",
4259 "Becton, Dickinson and Company",
4260 "Bed Bath & Beyond Inc.",
4261 "Belk, Inc.",
4262 "Bell Microproducts Inc.",
4263 "BellSouth Corporation",
4264 "Belo Corp.",
4265 "Bemis Company, Inc.",
4266 "Benchmark Electronics, Inc.",
4267 "Berkshire Hathaway Inc.",
4268 "Best Buy Co., Inc.",
4269 "Bethlehem Steel Corporation",
4270 "Beverly Enterprises, Inc.",
4271 "Big Lots, Inc.",
4272 "BJ Services Company",
4273 "BJ's Wholesale Club, Inc.",
4274 "The Black & Decker Corporation",
4275 "Black Hills Corporation",
4276 "BMC Software, Inc.",
4277 "The Boeing Company",
4278 "Boise Cascade Corporation",
4279 "Borders Group, Inc.",
4280 "BorgWarner Inc.",
4281 "Boston Scientific Corporation",
4282 "Bowater Incorporated",
4283 "Briggs & Stratton Corporation",
4284 "Brightpoint, Inc.",
4285 "Brinker International, Inc.",
4286 "Bristol-Myers Squibb Company",
4287 "Broadwing, Inc.",
4288 "Brown Shoe Company, Inc.",
4289 "Brown-Forman Corporation",
4290 "Brunswick Corporation",
4291 "Budget Group, Inc.",
4292 "Burlington Coat Factory Warehouse Corporation",
4293 "Burlington Industries, Inc.",
4294 "Burlington Northern Santa Fe Corporation",
4295 "Burlington Resources Inc.",
4296 "C. H. Robinson Worldwide Inc.",
4297 "Cablevision Systems Corp",
4298 "Cabot Corp",
4299 "Cadence Design Systems, Inc.",
4300 "Calpine Corp.",
4301 "Campbell Soup Co.",
4302 "Capital One Financial Corp.",
4303 "Cardinal Health Inc.",
4304 "Caremark Rx Inc.",
4305 "Carlisle Cos. Inc.",
4306 "Carpenter Technology Corp.",
4307 "Casey's General Stores Inc.",
4308 "Caterpillar Inc.",
4309 "CBRL Group Inc.",
4310 "CDI Corp.",
4311 "CDW Computer Centers Inc.",
4312 "CellStar Corp.",
4313 "Cendant Corp",
4314 "Cenex Harvest States Cooperatives",
4315 "Centex Corp.",
4316 "CenturyTel Inc.",
4317 "Ceridian Corp.",
4318 "CH2M Hill Cos. Ltd.",
4319 "Champion Enterprises Inc.",
4320 "Charles Schwab Corp.",
4321 "Charming Shoppes Inc.",
4322 "Charter Communications Inc.",
4323 "Charter One Financial Inc.",
4324 "ChevronTexaco Corp.",
4325 "Chiquita Brands International Inc.",
4326 "Chubb Corp",
4327 "Ciena Corp.",
4328 "Cigna Corp",
4329 "Cincinnati Financial Corp.",
4330 "Cinergy Corp.",
4331 "Cintas Corp.",
4332 "Circuit City Stores Inc.",
4333 "Cisco Systems Inc.",
4334 "Citigroup, Inc",
4335 "Citizens Communications Co.",
4336 "CKE Restaurants Inc.",
4337 "Clear Channel Communications Inc.",
4338 "The Clorox Co.",
4339 "CMGI Inc.",
4340 "CMS Energy Corp.",
4341 "CNF Inc.",
4342 "Coca-Cola Co.",
4343 "Coca-Cola Enterprises Inc.",
4344 "Colgate-Palmolive Co.",
4345 "Collins & Aikman Corp.",
4346 "Comcast Corp.",
4347 "Comdisco Inc.",
4348 "Comerica Inc.",
4349 "Comfort Systems USA Inc.",
4350 "Commercial Metals Co.",
4351 "Community Health Systems Inc.",
4352 "Compass Bancshares Inc",
4353 "Computer Associates International Inc.",
4354 "Computer Sciences Corp.",
4355 "Compuware Corp.",
4356 "Comverse Technology Inc.",
4357 "ConAgra Foods Inc.",
4358 "Concord EFS Inc.",
4359 "Conectiv, Inc",
4360 "Conoco Inc",
4361 "Conseco Inc.",
4362 "Consolidated Freightways Corp.",
4363 "Consolidated Edison Inc.",
4364 "Constellation Brands Inc.",
4365 "Constellation Emergy Group Inc.",
4366 "Continental Airlines Inc.",
4367 "Convergys Corp.",
4368 "Cooper Cameron Corp.",
4369 "Cooper Industries Ltd.",
4370 "Cooper Tire & Rubber Co.",
4371 "Corn Products International Inc.",
4372 "Corning Inc.",
4373 "Costco Wholesale Corp.",
4374 "Countrywide Credit Industries Inc.",
4375 "Coventry Health Care Inc.",
4376 "Cox Communications Inc.",
4377 "Crane Co.",
4378 "Crompton Corp.",
4379 "Crown Cork & Seal Co. Inc.",
4380 "CSK Auto Corp.",
4381 "CSX Corp.",
4382 "Cummins Inc.",
4383 "CVS Corp.",
4384 "Cytec Industries Inc.",
4385 "D&K Healthcare Resources, Inc.",
4386 "D.R. Horton Inc.",
4387 "Dana Corporation",
4388 "Danaher Corporation",
4389 "Darden Restaurants Inc.",
4390 "DaVita Inc.",
4391 "Dean Foods Company",
4392 "Deere & Company",
4393 "Del Monte Foods Co",
4394 "Dell Computer Corporation",
4395 "Delphi Corp.",
4396 "Delta Air Lines Inc.",
4397 "Deluxe Corporation",
4398 "Devon Energy Corporation",
4399 "Di Giorgio Corporation",
4400 "Dial Corporation",
4401 "Diebold Incorporated",
4402 "Dillard's Inc.",
4403 "DIMON Incorporated",
4404 "Dole Food Company, Inc.",
4405 "Dollar General Corporation",
4406 "Dollar Tree Stores, Inc.",
4407 "Dominion Resources, Inc.",
4408 "Domino's Pizza LLC",
4409 "Dover Corporation, Inc.",
4410 "Dow Chemical Company",
4411 "Dow Jones & Company, Inc.",
4412 "DPL Inc.",
4413 "DQE Inc.",
4414 "Dreyer's Grand Ice Cream, Inc.",
4415 "DST Systems, Inc.",
4416 "DTE Energy Co.",
4417 "E.I. Du Pont de Nemours and Company",
4418 "Duke Energy Corp",
4419 "Dun & Bradstreet Inc.",
4420 "DURA Automotive Systems Inc.",
4421 "DynCorp",
4422 "Dynegy Inc.",
4423 "E*Trade Group, Inc.",
4424 "E.W. Scripps Company",
4425 "Earthlink, Inc.",
4426 "Eastman Chemical Company",
4427 "Eastman Kodak Company",
4428 "Eaton Corporation",
4429 "Echostar Communications Corporation",
4430 "Ecolab Inc.",
4431 "Edison International",
4432 "EGL Inc.",
4433 "El Paso Corporation",
4434 "Electronic Arts Inc.",
4435 "Electronic Data Systems Corp.",
4436 "Eli Lilly and Company",
4437 "EMC Corporation",
4438 "Emcor Group Inc.",
4439 "Emerson Electric Co.",
4440 "Encompass Services Corporation",
4441 "Energizer Holdings Inc.",
4442 "Energy East Corporation",
4443 "Engelhard Corporation",
4444 "Enron Corp.",
4445 "Entergy Corporation",
4446 "Enterprise Products Partners L.P.",
4447 "EOG Resources, Inc.",
4448 "Equifax Inc.",
4449 "Equitable Resources Inc.",
4450 "Equity Office Properties Trust",
4451 "Equity Residential Properties Trust",
4452 "Estee Lauder Companies Inc.",
4453 "Exelon Corporation",
4454 "Exide Technologies",
4455 "Expeditors International of Washington Inc.",
4456 "Express Scripts Inc.",
4457 "ExxonMobil Corporation",
4458 "Fairchild Semiconductor International Inc.",
4459 "Family Dollar Stores Inc.",
4460 "Farmland Industries Inc.",
4461 "Federal Mogul Corp.",
4462 "Federated Department Stores Inc.",
4463 "Federal Express Corp.",
4464 "Felcor Lodging Trust Inc.",
4465 "Ferro Corp.",
4466 "Fidelity National Financial Inc.",
4467 "Fifth Third Bancorp",
4468 "First American Financial Corp.",
4469 "First Data Corp.",
4470 "First National of Nebraska Inc.",
4471 "First Tennessee National Corp.",
4472 "FirstEnergy Corp.",
4473 "Fiserv Inc.",
4474 "Fisher Scientific International Inc.",
4475 "FleetBoston Financial Co.",
4476 "Fleetwood Enterprises Inc.",
4477 "Fleming Companies Inc.",
4478 "Flowers Foods Inc.",
4479 "Flowserv Corp",
4480 "Fluor Corp",
4481 "FMC Corp",
4482 "Foamex International Inc",
4483 "Foot Locker Inc",
4484 "Footstar Inc.",
4485 "Ford Motor Co",
4486 "Forest Laboratories Inc.",
4487 "Fortune Brands Inc.",
4488 "Foster Wheeler Ltd.",
4489 "FPL Group Inc.",
4490 "Franklin Resources Inc.",
4491 "Freeport McMoran Copper & Gold Inc.",
4492 "Frontier Oil Corp",
4493 "Furniture Brands International Inc.",
4494 "Gannett Co., Inc.",
4495 "Gap Inc.",
4496 "Gateway Inc.",
4497 "GATX Corporation",
4498 "Gemstar-TV Guide International Inc.",
4499 "GenCorp Inc.",
4500 "General Cable Corporation",
4501 "General Dynamics Corporation",
4502 "General Electric Company",
4503 "General Mills Inc",
4504 "General Motors Corporation",
4505 "Genesis Health Ventures Inc.",
4506 "Gentek Inc.",
4507 "Gentiva Health Services Inc.",
4508 "Genuine Parts Company",
4509 "Genuity Inc.",
4510 "Genzyme Corporation",
4511 "Georgia Gulf Corporation",
4512 "Georgia-Pacific Corporation",
4513 "Gillette Company",
4514 "Gold Kist Inc.",
4515 "Golden State Bancorp Inc.",
4516 "Golden West Financial Corporation",
4517 "Goldman Sachs Group Inc.",
4518 "Goodrich Corporation",
4519 "The Goodyear Tire & Rubber Company",
4520 "Granite Construction Incorporated",
4521 "Graybar Electric Company Inc.",
4522 "Great Lakes Chemical Corporation",
4523 "Great Plains Energy Inc.",
4524 "GreenPoint Financial Corp.",
4525 "Greif Bros. Corporation",
4526 "Grey Global Group Inc.",
4527 "Group 1 Automotive Inc.",
4528 "Guidant Corporation",
4529 "H&R Block Inc.",
4530 "H.B. Fuller Company",
4531 "H.J. Heinz Company",
4532 "Halliburton Co.",
4533 "Harley-Davidson Inc.",
4534 "Harman International Industries Inc.",
4535 "Harrah's Entertainment Inc.",
4536 "Harris Corp.",
4537 "Harsco Corp.",
4538 "Hartford Financial Services Group Inc.",
4539 "Hasbro Inc.",
4540 "Hawaiian Electric Industries Inc.",
4541 "HCA Inc.",
4542 "Health Management Associates Inc.",
4543 "Health Net Inc.",
4544 "Healthsouth Corp",
4545 "Henry Schein Inc.",
4546 "Hercules Inc.",
4547 "Herman Miller Inc.",
4548 "Hershey Foods Corp.",
4549 "Hewlett-Packard Company",
4550 "Hibernia Corp.",
4551 "Hillenbrand Industries Inc.",
4552 "Hilton Hotels Corp.",
4553 "Hollywood Entertainment Corp.",
4554 "Home Depot Inc.",
4555 "Hon Industries Inc.",
4556 "Honeywell International Inc.",
4557 "Hormel Foods Corp.",
4558 "Host Marriott Corp.",
4559 "Household International Corp.",
4560 "Hovnanian Enterprises Inc.",
4561 "Hub Group Inc.",
4562 "Hubbell Inc.",
4563 "Hughes Supply Inc.",
4564 "Humana Inc.",
4565 "Huntington Bancshares Inc.",
4566 "Idacorp Inc.",
4567 "IDT Corporation",
4568 "IKON Office Solutions Inc.",
4569 "Illinois Tool Works Inc.",
4570 "IMC Global Inc.",
4571 "Imperial Sugar Company",
4572 "IMS Health Inc.",
4573 "Ingles Market Inc",
4574 "Ingram Micro Inc.",
4575 "Insight Enterprises Inc.",
4576 "Integrated Electrical Services Inc.",
4577 "Intel Corporation",
4578 "International Paper Co.",
4579 "Interpublic Group of Companies Inc.",
4580 "Interstate Bakeries Corporation",
4581 "International Business Machines Corp.",
4582 "International Flavors & Fragrances Inc.",
4583 "International Multifoods Corporation",
4584 "Intuit Inc.",
4585 "IT Group Inc.",
4586 "ITT Industries Inc.",
4587 "Ivax Corp.",
4588 "J.B. Hunt Transport Services Inc.",
4589 "J.C. Penny Co.",
4590 "J.P. Morgan Chase & Co.",
4591 "Jabil Circuit Inc.",
4592 "Jack In The Box Inc.",
4593 "Jacobs Engineering Group Inc.",
4594 "JDS Uniphase Corp.",
4595 "Jefferson-Pilot Co.",
4596 "John Hancock Financial Services Inc.",
4597 "Johnson & Johnson",
4598 "Johnson Controls Inc.",
4599 "Jones Apparel Group Inc.",
4600 "KB Home",
4601 "Kellogg Company",
4602 "Kellwood Company",
4603 "Kelly Services Inc.",
4604 "Kemet Corp.",
4605 "Kennametal Inc.",
4606 "Kerr-McGee Corporation",
4607 "KeyCorp",
4608 "KeySpan Corp.",
4609 "Kimball International Inc.",
4610 "Kimberly-Clark Corporation",
4611 "Kindred Healthcare Inc.",
4612 "KLA-Tencor Corporation",
4613 "K-Mart Corp.",
4614 "Knight-Ridder Inc.",
4615 "Kohl's Corp.",
4616 "KPMG Consulting Inc.",
4617 "Kroger Co.",
4618 "L-3 Communications Holdings Inc.",
4619 "Laboratory Corporation of America Holdings",
4620 "Lam Research Corporation",
4621 "LandAmerica Financial Group Inc.",
4622 "Lands' End Inc.",
4623 "Landstar System Inc.",
4624 "La-Z-Boy Inc.",
4625 "Lear Corporation",
4626 "Legg Mason Inc.",
4627 "Leggett & Platt Inc.",
4628 "Lehman Brothers Holdings Inc.",
4629 "Lennar Corporation",
4630 "Lennox International Inc.",
4631 "Level 3 Communications Inc.",
4632 "Levi Strauss & Co.",
4633 "Lexmark International Inc.",
4634 "Limited Inc.",
4635 "Lincoln National Corporation",
4636 "Linens 'n Things Inc.",
4637 "Lithia Motors Inc.",
4638 "Liz Claiborne Inc.",
4639 "Lockheed Martin Corporation",
4640 "Loews Corporation",
4641 "Longs Drug Stores Corporation",
4642 "Louisiana-Pacific Corporation",
4643 "Lowe's Companies Inc.",
4644 "LSI Logic Corporation",
4645 "The LTV Corporation",
4646 "The Lubrizol Corporation",
4647 "Lucent Technologies Inc.",
4648 "Lyondell Chemical Company",
4649 "M & T Bank Corporation",
4650 "Magellan Health Services Inc.",
4651 "Mail-Well Inc.",
4652 "Mandalay Resort Group",
4653 "Manor Care Inc.",
4654 "Manpower Inc.",
4655 "Marathon Oil Corporation",
4656 "Mariner Health Care Inc.",
4657 "Markel Corporation",
4658 "Marriott International Inc.",
4659 "Marsh & McLennan Companies Inc.",
4660 "Marsh Supermarkets Inc.",
4661 "Marshall & Ilsley Corporation",
4662 "Martin Marietta Materials Inc.",
4663 "Masco Corporation",
4664 "Massey Energy Company",
4665 "MasTec Inc.",
4666 "Mattel Inc.",
4667 "Maxim Integrated Products Inc.",
4668 "Maxtor Corporation",
4669 "Maxxam Inc.",
4670 "The May Department Stores Company",
4671 "Maytag Corporation",
4672 "MBNA Corporation",
4673 "McCormick & Company Incorporated",
4674 "McDonald's Corporation",
4675 "The McGraw-Hill Companies Inc.",
4676 "McKesson Corporation",
4677 "McLeodUSA Incorporated",
4678 "M.D.C. Holdings Inc.",
4679 "MDU Resources Group Inc.",
4680 "MeadWestvaco Corporation",
4681 "Medtronic Inc.",
4682 "Mellon Financial Corporation",
4683 "The Men's Wearhouse Inc.",
4684 "Merck & Co., Inc.",
4685 "Mercury General Corporation",
4686 "Merrill Lynch & Co. Inc.",
4687 "Metaldyne Corporation",
4688 "Metals USA Inc.",
4689 "MetLife Inc.",
4690 "Metris Companies Inc",
4691 "MGIC Investment Corporation",
4692 "MGM Mirage",
4693 "Michaels Stores Inc.",
4694 "Micron Technology Inc.",
4695 "Microsoft Corporation",
4696 "Milacron Inc.",
4697 "Millennium Chemicals Inc.",
4698 "Mirant Corporation",
4699 "Mohawk Industries Inc.",
4700 "Molex Incorporated",
4701 "The MONY Group Inc.",
4702 "Morgan Stanley Dean Witter & Co.",
4703 "Motorola Inc.",
4704 "MPS Group Inc.",
4705 "Murphy Oil Corporation",
4706 "Nabors Industries Inc",
4707 "Nacco Industries Inc",
4708 "Nash Finch Company",
4709 "National City Corp.",
4710 "National Commerce Financial Corporation",
4711 "National Fuel Gas Company",
4712 "National Oilwell Inc",
4713 "National Rural Utilities Cooperative Finance Corporation",
4714 "National Semiconductor Corporation",
4715 "National Service Industries Inc",
4716 "Navistar International Corporation",
4717 "NCR Corporation",
4718 "The Neiman Marcus Group Inc.",
4719 "New Jersey Resources Corporation",
4720 "New York Times Company",
4721 "Newell Rubbermaid Inc",
4722 "Newmont Mining Corporation",
4723 "Nextel Communications Inc",
4724 "Nicor Inc",
4725 "Nike Inc",
4726 "NiSource Inc",
4727 "Noble Energy Inc",
4728 "Nordstrom Inc",
4729 "Norfolk Southern Corporation",
4730 "Nortek Inc",
4731 "North Fork Bancorporation Inc",
4732 "Northeast Utilities System",
4733 "Northern Trust Corporation",
4734 "Northrop Grumman Corporation",
4735 "NorthWestern Corporation",
4736 "Novellus Systems Inc",
4737 "NSTAR",
4738 "NTL Incorporated",
4739 "Nucor Corp",
4740 "Nvidia Corp",
4741 "NVR Inc",
4742 "Northwest Airlines Corp",
4743 "Occidental Petroleum Corp",
4744 "Ocean Energy Inc",
4745 "Office Depot Inc.",
4746 "OfficeMax Inc",
4747 "OGE Energy Corp",
4748 "Oglethorpe Power Corp.",
4749 "Ohio Casualty Corp.",
4750 "Old Republic International Corp.",
4751 "Olin Corp.",
4752 "OM Group Inc",
4753 "Omnicare Inc",
4754 "Omnicom Group",
4755 "On Semiconductor Corp",
4756 "ONEOK Inc",
4757 "Oracle Corp",
4758 "Oshkosh Truck Corp",
4759 "Outback Steakhouse Inc.",
4760 "Owens & Minor Inc.",
4761 "Owens Corning",
4762 "Owens-Illinois Inc",
4763 "Oxford Health Plans Inc",
4764 "Paccar Inc",
4765 "PacifiCare Health Systems Inc",
4766 "Packaging Corp. of America",
4767 "Pactiv Corp",
4768 "Pall Corp",
4769 "Pantry Inc",
4770 "Park Place Entertainment Corp",
4771 "Parker Hannifin Corp.",
4772 "Pathmark Stores Inc.",
4773 "Paychex Inc",
4774 "Payless Shoesource Inc",
4775 "Penn Traffic Co.",
4776 "Pennzoil-Quaker State Company",
4777 "Pentair Inc",
4778 "Peoples Energy Corp.",
4779 "PeopleSoft Inc",
4780 "Pep Boys Manny, Moe & Jack",
4781 "Potomac Electric Power Co.",
4782 "Pepsi Bottling Group Inc.",
4783 "PepsiAmericas Inc.",
4784 "PepsiCo Inc.",
4785 "Performance Food Group Co.",
4786 "Perini Corp",
4787 "PerkinElmer Inc",
4788 "Perot Systems Corp",
4789 "Petco Animal Supplies Inc.",
4790 "Peter Kiewit Sons', Inc.",
4791 "PETsMART Inc",
4792 "Pfizer Inc",
4793 "Pacific Gas & Electric Corp.",
4794 "Pharmacia Corp",
4795 "Phar Mor Inc.",
4796 "Phelps Dodge Corp.",
4797 "Philip Morris Companies Inc.",
4798 "Phillips Petroleum Co",
4799 "Phillips Van Heusen Corp.",
4800 "Phoenix Companies Inc",
4801 "Pier 1 Imports Inc.",
4802 "Pilgrim's Pride Corporation",
4803 "Pinnacle West Capital Corp",
4804 "Pioneer-Standard Electronics Inc.",
4805 "Pitney Bowes Inc.",
4806 "Pittston Brinks Group",
4807 "Plains All American Pipeline LP",
4808 "PNC Financial Services Group Inc.",
4809 "PNM Resources Inc",
4810 "Polaris Industries Inc.",
4811 "Polo Ralph Lauren Corp",
4812 "PolyOne Corp",
4813 "Popular Inc",
4814 "Potlatch Corp",
4815 "PPG Industries Inc",
4816 "PPL Corp",
4817 "Praxair Inc",
4818 "Precision Castparts Corp",
4819 "Premcor Inc.",
4820 "Pride International Inc",
4821 "Primedia Inc",
4822 "Principal Financial Group Inc.",
4823 "Procter & Gamble Co.",
4824 "Pro-Fac Cooperative Inc.",
4825 "Progress Energy Inc",
4826 "Progressive Corporation",
4827 "Protective Life Corp",
4828 "Provident Financial Group",
4829 "Providian Financial Corp.",
4830 "Prudential Financial Inc.",
4831 "PSS World Medical Inc",
4832 "Public Service Enterprise Group Inc.",
4833 "Publix Super Markets Inc.",
4834 "Puget Energy Inc.",
4835 "Pulte Homes Inc",
4836 "Qualcomm Inc",
4837 "Quanta Services Inc.",
4838 "Quantum Corp",
4839 "Quest Diagnostics Inc.",
4840 "Questar Corp",
4841 "Quintiles Transnational",
4842 "Qwest Communications Intl Inc",
4843 "R.J. Reynolds Tobacco Company",
4844 "R.R. Donnelley & Sons Company",
4845 "Radio Shack Corporation",
4846 "Raymond James Financial Inc.",
4847 "Raytheon Company",
4848 "Reader's Digest Association Inc.",
4849 "Reebok International Ltd.",
4850 "Regions Financial Corp.",
4851 "Regis Corporation",
4852 "Reliance Steel & Aluminum Co.",
4853 "Reliant Energy Inc.",
4854 "Rent A Center Inc",
4855 "Republic Services Inc",
4856 "Revlon Inc",
4857 "RGS Energy Group Inc",
4858 "Rite Aid Corp",
4859 "Riverwood Holding Inc.",
4860 "RoadwayCorp",
4861 "Robert Half International Inc.",
4862 "Rock-Tenn Co",
4863 "Rockwell Automation Inc",
4864 "Rockwell Collins Inc",
4865 "Rohm & Haas Co.",
4866 "Ross Stores Inc",
4867 "RPM Inc.",
4868 "Ruddick Corp",
4869 "Ryder System Inc",
4870 "Ryerson Tull Inc",
4871 "Ryland Group Inc.",
4872 "Sabre Holdings Corp",
4873 "Safeco Corp",
4874 "Safeguard Scientifics Inc.",
4875 "Safeway Inc",
4876 "Saks Inc",
4877 "Sanmina-SCI Inc",
4878 "Sara Lee Corp",
4879 "SBC Communications Inc",
4880 "Scana Corp.",
4881 "Schering-Plough Corp",
4882 "Scholastic Corp",
4883 "SCI Systems Onc.",
4884 "Science Applications Intl. Inc.",
4885 "Scientific-Atlanta Inc",
4886 "Scotts Company",
4887 "Seaboard Corp",
4888 "Sealed Air Corp",
4889 "Sears Roebuck & Co",
4890 "Sempra Energy",
4891 "Sequa Corp",
4892 "Service Corp. International",
4893 "ServiceMaster Co",
4894 "Shaw Group Inc",
4895 "Sherwin-Williams Company",
4896 "Shopko Stores Inc",
4897 "Siebel Systems Inc",
4898 "Sierra Health Services Inc",
4899 "Sierra Pacific Resources",
4900 "Silgan Holdings Inc.",
4901 "Silicon Graphics Inc",
4902 "Simon Property Group Inc",
4903 "SLM Corporation",
4904 "Smith International Inc",
4905 "Smithfield Foods Inc",
4906 "Smurfit-Stone Container Corp",
4907 "Snap-On Inc",
4908 "Solectron Corp",
4909 "Solutia Inc",
4910 "Sonic Automotive Inc.",
4911 "Sonoco Products Co.",
4912 "Southern Company",
4913 "Southern Union Company",
4914 "SouthTrust Corp.",
4915 "Southwest Airlines Co",
4916 "Southwest Gas Corp",
4917 "Sovereign Bancorp Inc.",
4918 "Spartan Stores Inc",
4919 "Spherion Corp",
4920 "Sports Authority Inc",
4921 "Sprint Corp.",
4922 "SPX Corp",
4923 "St. Jude Medical Inc",
4924 "St. Paul Cos.",
4925 "Staff Leasing Inc.",
4926 "StanCorp Financial Group Inc",
4927 "Standard Pacific Corp.",
4928 "Stanley Works",
4929 "Staples Inc",
4930 "Starbucks Corp",
4931 "Starwood Hotels & Resorts Worldwide Inc",
4932 "State Street Corp.",
4933 "Stater Bros. Holdings Inc.",
4934 "Steelcase Inc",
4935 "Stein Mart Inc",
4936 "Stewart & Stevenson Services Inc",
4937 "Stewart Information Services Corp",
4938 "Stilwell Financial Inc",
4939 "Storage Technology Corporation",
4940 "Stryker Corp",
4941 "Sun Healthcare Group Inc.",
4942 "Sun Microsystems Inc.",
4943 "SunGard Data Systems Inc.",
4944 "Sunoco Inc.",
4945 "SunTrust Banks Inc",
4946 "Supervalu Inc",
4947 "Swift Transportation, Co., Inc",
4948 "Symbol Technologies Inc",
4949 "Synovus Financial Corp.",
4950 "Sysco Corp",
4951 "Systemax Inc.",
4952 "Target Corp.",
4953 "Tech Data Corporation",
4954 "TECO Energy Inc",
4955 "Tecumseh Products Company",
4956 "Tektronix Inc",
4957 "Teleflex Incorporated",
4958 "Telephone & Data Systems Inc",
4959 "Tellabs Inc.",
4960 "Temple-Inland Inc",
4961 "Tenet Healthcare Corporation",
4962 "Tenneco Automotive Inc.",
4963 "Teradyne Inc",
4964 "Terex Corp",
4965 "Tesoro Petroleum Corp.",
4966 "Texas Industries Inc.",
4967 "Texas Instruments Incorporated",
4968 "Textron Inc",
4969 "Thermo Electron Corporation",
4970 "Thomas & Betts Corporation",
4971 "Tiffany & Co",
4972 "Timken Company",
4973 "TJX Companies Inc",
4974 "TMP Worldwide Inc",
4975 "Toll Brothers Inc",
4976 "Torchmark Corporation",
4977 "Toro Company",
4978 "Tower Automotive Inc.",
4979 "Toys 'R' Us Inc",
4980 "Trans World Entertainment Corp.",
4981 "TransMontaigne Inc",
4982 "Transocean Inc",
4983 "TravelCenters of America Inc.",
4984 "Triad Hospitals Inc",
4985 "Tribune Company",
4986 "Trigon Healthcare Inc.",
4987 "Trinity Industries Inc",
4988 "Trump Hotels & Casino Resorts Inc.",
4989 "TruServ Corporation",
4990 "TRW Inc",
4991 "TXU Corp",
4992 "Tyson Foods Inc",
4993 "U.S. Bancorp",
4994 "U.S. Industries Inc.",
4995 "UAL Corporation",
4996 "UGI Corporation",
4997 "Unified Western Grocers Inc",
4998 "Union Pacific Corporation",
4999 "Union Planters Corp",
5000 "Unisource Energy Corp",
5001 "Unisys Corporation",
5002 "United Auto Group Inc",
5003 "United Defense Industries Inc.",
5004 "United Parcel Service Inc",
5005 "United Rentals Inc",
5006 "United Stationers Inc",
5007 "United Technologies Corporation",
5008 "UnitedHealth Group Incorporated",
5009 "Unitrin Inc",
5010 "Universal Corporation",
5011 "Universal Forest Products Inc",
5012 "Universal Health Services Inc",
5013 "Unocal Corporation",
5014 "Unova Inc",
5015 "UnumProvident Corporation",
5016 "URS Corporation",
5017 "US Airways Group Inc",
5018 "US Oncology Inc",
5019 "USA Interactive",
5020 "USFreighways Corporation",
5021 "USG Corporation",
5022 "UST Inc",
5023 "Valero Energy Corporation",
5024 "Valspar Corporation",
5025 "Value City Department Stores Inc",
5026 "Varco International Inc",
5027 "Vectren Corporation",
5028 "Veritas Software Corporation",
5029 "Verizon Communications Inc",
5030 "VF Corporation",
5031 "Viacom Inc",
5032 "Viad Corp",
5033 "Viasystems Group Inc",
5034 "Vishay Intertechnology Inc",
5035 "Visteon Corporation",
5036 "Volt Information Sciences Inc",
5037 "Vulcan Materials Company",
5038 "W.R. Berkley Corporation",
5039 "W.R. Grace & Co",
5040 "W.W. Grainger Inc",
5041 "Wachovia Corporation",
5042 "Wakenhut Corporation",
5043 "Walgreen Co",
5044 "Wallace Computer Services Inc",
5045 "Wal-Mart Stores Inc",
5046 "Walt Disney Co",
5047 "Walter Industries Inc",
5048 "Washington Mutual Inc",
5049 "Washington Post Co.",
5050 "Waste Management Inc",
5051 "Watsco Inc",
5052 "Weatherford International Inc",
5053 "Weis Markets Inc.",
5054 "Wellpoint Health Networks Inc",
5055 "Wells Fargo & Company",
5056 "Wendy's International Inc",
5057 "Werner Enterprises Inc",
5058 "WESCO International Inc",
5059 "Western Digital Inc",
5060 "Western Gas Resources Inc",
5061 "WestPoint Stevens Inc",
5062 "Weyerhauser Company",
5063 "WGL Holdings Inc",
5064 "Whirlpool Corporation",
5065 "Whole Foods Market Inc",
5066 "Willamette Industries Inc.",
5067 "Williams Companies Inc",
5068 "Williams Sonoma Inc",
5069 "Winn Dixie Stores Inc",
5070 "Wisconsin Energy Corporation",
5071 "Wm Wrigley Jr Company",
5072 "World Fuel Services Corporation",
5073 "WorldCom Inc",
5074 "Worthington Industries Inc",
5075 "WPS Resources Corporation",
5076 "Wyeth",
5077 "Wyndham International Inc",
5078 "Xcel Energy Inc",
5079 "Xerox Corp",
5080 "Xilinx Inc",
5081 "XO Communications Inc",
5082 "Yellow Corporation",
5083 "York International Corp",
5084 "Yum Brands Inc.",
5085 "Zale Corporation",
5086 "Zions Bancorporation"
5087 ],
5088
5089 fileExtension : {
5090 "raster" : ["bmp", "gif", "gpl", "ico", "jpeg", "psd", "png", "psp", "raw", "tiff"],
5091 "vector" : ["3dv", "amf", "awg", "ai", "cgm", "cdr", "cmx", "dxf", "e2d", "egt", "eps", "fs", "odg", "svg", "xar"],
5092 "3d" : ["3dmf", "3dm", "3mf", "3ds", "an8", "aoi", "blend", "cal3d", "cob", "ctm", "iob", "jas", "max", "mb", "mdx", "obj", "x", "x3d"],
5093 "document" : ["doc", "docx", "dot", "html", "xml", "odt", "odm", "ott", "csv", "rtf", "tex", "xhtml", "xps"]
5094 },
5095
5096 // Data taken from https://github.com/dmfilipenko/timezones.json/blob/master/timezones.json
5097 timezones: [
5098 {
5099 "name": "Dateline Standard Time",
5100 "abbr": "DST",
5101 "offset": -12,
5102 "isdst": false,
5103 "text": "(UTC-12:00) International Date Line West",
5104 "utc": [
5105 "Etc/GMT+12"
5106 ]
5107 },
5108 {
5109 "name": "UTC-11",
5110 "abbr": "U",
5111 "offset": -11,
5112 "isdst": false,
5113 "text": "(UTC-11:00) Coordinated Universal Time-11",
5114 "utc": [
5115 "Etc/GMT+11",
5116 "Pacific/Midway",
5117 "Pacific/Niue",
5118 "Pacific/Pago_Pago"
5119 ]
5120 },
5121 {
5122 "name": "Hawaiian Standard Time",
5123 "abbr": "HST",
5124 "offset": -10,
5125 "isdst": false,
5126 "text": "(UTC-10:00) Hawaii",
5127 "utc": [
5128 "Etc/GMT+10",
5129 "Pacific/Honolulu",
5130 "Pacific/Johnston",
5131 "Pacific/Rarotonga",
5132 "Pacific/Tahiti"
5133 ]
5134 },
5135 {
5136 "name": "Alaskan Standard Time",
5137 "abbr": "AKDT",
5138 "offset": -8,
5139 "isdst": true,
5140 "text": "(UTC-09:00) Alaska",
5141 "utc": [
5142 "America/Anchorage",
5143 "America/Juneau",
5144 "America/Nome",
5145 "America/Sitka",
5146 "America/Yakutat"
5147 ]
5148 },
5149 {
5150 "name": "Pacific Standard Time (Mexico)",
5151 "abbr": "PDT",
5152 "offset": -7,
5153 "isdst": true,
5154 "text": "(UTC-08:00) Baja California",
5155 "utc": [
5156 "America/Santa_Isabel"
5157 ]
5158 },
5159 {
5160 "name": "Pacific Standard Time",
5161 "abbr": "PDT",
5162 "offset": -7,
5163 "isdst": true,
5164 "text": "(UTC-08:00) Pacific Time (US & Canada)",
5165 "utc": [
5166 "America/Dawson",
5167 "America/Los_Angeles",
5168 "America/Tijuana",
5169 "America/Vancouver",
5170 "America/Whitehorse",
5171 "PST8PDT"
5172 ]
5173 },
5174 {
5175 "name": "US Mountain Standard Time",
5176 "abbr": "UMST",
5177 "offset": -7,
5178 "isdst": false,
5179 "text": "(UTC-07:00) Arizona",
5180 "utc": [
5181 "America/Creston",
5182 "America/Dawson_Creek",
5183 "America/Hermosillo",
5184 "America/Phoenix",
5185 "Etc/GMT+7"
5186 ]
5187 },
5188 {
5189 "name": "Mountain Standard Time (Mexico)",
5190 "abbr": "MDT",
5191 "offset": -6,
5192 "isdst": true,
5193 "text": "(UTC-07:00) Chihuahua, La Paz, Mazatlan",
5194 "utc": [
5195 "America/Chihuahua",
5196 "America/Mazatlan"
5197 ]
5198 },
5199 {
5200 "name": "Mountain Standard Time",
5201 "abbr": "MDT",
5202 "offset": -6,
5203 "isdst": true,
5204 "text": "(UTC-07:00) Mountain Time (US & Canada)",
5205 "utc": [
5206 "America/Boise",
5207 "America/Cambridge_Bay",
5208 "America/Denver",
5209 "America/Edmonton",
5210 "America/Inuvik",
5211 "America/Ojinaga",
5212 "America/Yellowknife",
5213 "MST7MDT"
5214 ]
5215 },
5216 {
5217 "name": "Central America Standard Time",
5218 "abbr": "CAST",
5219 "offset": -6,
5220 "isdst": false,
5221 "text": "(UTC-06:00) Central America",
5222 "utc": [
5223 "America/Belize",
5224 "America/Costa_Rica",
5225 "America/El_Salvador",
5226 "America/Guatemala",
5227 "America/Managua",
5228 "America/Tegucigalpa",
5229 "Etc/GMT+6",
5230 "Pacific/Galapagos"
5231 ]
5232 },
5233 {
5234 "name": "Central Standard Time",
5235 "abbr": "CDT",
5236 "offset": -5,
5237 "isdst": true,
5238 "text": "(UTC-06:00) Central Time (US & Canada)",
5239 "utc": [
5240 "America/Chicago",
5241 "America/Indiana/Knox",
5242 "America/Indiana/Tell_City",
5243 "America/Matamoros",
5244 "America/Menominee",
5245 "America/North_Dakota/Beulah",
5246 "America/North_Dakota/Center",
5247 "America/North_Dakota/New_Salem",
5248 "America/Rainy_River",
5249 "America/Rankin_Inlet",
5250 "America/Resolute",
5251 "America/Winnipeg",
5252 "CST6CDT"
5253 ]
5254 },
5255 {
5256 "name": "Central Standard Time (Mexico)",
5257 "abbr": "CDT",
5258 "offset": -5,
5259 "isdst": true,
5260 "text": "(UTC-06:00) Guadalajara, Mexico City, Monterrey",
5261 "utc": [
5262 "America/Bahia_Banderas",
5263 "America/Cancun",
5264 "America/Merida",
5265 "America/Mexico_City",
5266 "America/Monterrey"
5267 ]
5268 },
5269 {
5270 "name": "Canada Central Standard Time",
5271 "abbr": "CCST",
5272 "offset": -6,
5273 "isdst": false,
5274 "text": "(UTC-06:00) Saskatchewan",
5275 "utc": [
5276 "America/Regina",
5277 "America/Swift_Current"
5278 ]
5279 },
5280 {
5281 "name": "SA Pacific Standard Time",
5282 "abbr": "SPST",
5283 "offset": -5,
5284 "isdst": false,
5285 "text": "(UTC-05:00) Bogota, Lima, Quito",
5286 "utc": [
5287 "America/Bogota",
5288 "America/Cayman",
5289 "America/Coral_Harbour",
5290 "America/Eirunepe",
5291 "America/Guayaquil",
5292 "America/Jamaica",
5293 "America/Lima",
5294 "America/Panama",
5295 "America/Rio_Branco",
5296 "Etc/GMT+5"
5297 ]
5298 },
5299 {
5300 "name": "Eastern Standard Time",
5301 "abbr": "EDT",
5302 "offset": -4,
5303 "isdst": true,
5304 "text": "(UTC-05:00) Eastern Time (US & Canada)",
5305 "utc": [
5306 "America/Detroit",
5307 "America/Havana",
5308 "America/Indiana/Petersburg",
5309 "America/Indiana/Vincennes",
5310 "America/Indiana/Winamac",
5311 "America/Iqaluit",
5312 "America/Kentucky/Monticello",
5313 "America/Louisville",
5314 "America/Montreal",
5315 "America/Nassau",
5316 "America/New_York",
5317 "America/Nipigon",
5318 "America/Pangnirtung",
5319 "America/Port-au-Prince",
5320 "America/Thunder_Bay",
5321 "America/Toronto",
5322 "EST5EDT"
5323 ]
5324 },
5325 {
5326 "name": "US Eastern Standard Time",
5327 "abbr": "UEDT",
5328 "offset": -4,
5329 "isdst": true,
5330 "text": "(UTC-05:00) Indiana (East)",
5331 "utc": [
5332 "America/Indiana/Marengo",
5333 "America/Indiana/Vevay",
5334 "America/Indianapolis"
5335 ]
5336 },
5337 {
5338 "name": "Venezuela Standard Time",
5339 "abbr": "VST",
5340 "offset": -4.5,
5341 "isdst": false,
5342 "text": "(UTC-04:30) Caracas",
5343 "utc": [
5344 "America/Caracas"
5345 ]
5346 },
5347 {
5348 "name": "Paraguay Standard Time",
5349 "abbr": "PST",
5350 "offset": -4,
5351 "isdst": false,
5352 "text": "(UTC-04:00) Asuncion",
5353 "utc": [
5354 "America/Asuncion"
5355 ]
5356 },
5357 {
5358 "name": "Atlantic Standard Time",
5359 "abbr": "ADT",
5360 "offset": -3,
5361 "isdst": true,
5362 "text": "(UTC-04:00) Atlantic Time (Canada)",
5363 "utc": [
5364 "America/Glace_Bay",
5365 "America/Goose_Bay",
5366 "America/Halifax",
5367 "America/Moncton",
5368 "America/Thule",
5369 "Atlantic/Bermuda"
5370 ]
5371 },
5372 {
5373 "name": "Central Brazilian Standard Time",
5374 "abbr": "CBST",
5375 "offset": -4,
5376 "isdst": false,
5377 "text": "(UTC-04:00) Cuiaba",
5378 "utc": [
5379 "America/Campo_Grande",
5380 "America/Cuiaba"
5381 ]
5382 },
5383 {
5384 "name": "SA Western Standard Time",
5385 "abbr": "SWST",
5386 "offset": -4,
5387 "isdst": false,
5388 "text": "(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",
5389 "utc": [
5390 "America/Anguilla",
5391 "America/Antigua",
5392 "America/Aruba",
5393 "America/Barbados",
5394 "America/Blanc-Sablon",
5395 "America/Boa_Vista",
5396 "America/Curacao",
5397 "America/Dominica",
5398 "America/Grand_Turk",
5399 "America/Grenada",
5400 "America/Guadeloupe",
5401 "America/Guyana",
5402 "America/Kralendijk",
5403 "America/La_Paz",
5404 "America/Lower_Princes",
5405 "America/Manaus",
5406 "America/Marigot",
5407 "America/Martinique",
5408 "America/Montserrat",
5409 "America/Port_of_Spain",
5410 "America/Porto_Velho",
5411 "America/Puerto_Rico",
5412 "America/Santo_Domingo",
5413 "America/St_Barthelemy",
5414 "America/St_Kitts",
5415 "America/St_Lucia",
5416 "America/St_Thomas",
5417 "America/St_Vincent",
5418 "America/Tortola",
5419 "Etc/GMT+4"
5420 ]
5421 },
5422 {
5423 "name": "Pacific SA Standard Time",
5424 "abbr": "PSST",
5425 "offset": -4,
5426 "isdst": false,
5427 "text": "(UTC-04:00) Santiago",
5428 "utc": [
5429 "America/Santiago",
5430 "Antarctica/Palmer"
5431 ]
5432 },
5433 {
5434 "name": "Newfoundland Standard Time",
5435 "abbr": "NDT",
5436 "offset": -2.5,
5437 "isdst": true,
5438 "text": "(UTC-03:30) Newfoundland",
5439 "utc": [
5440 "America/St_Johns"
5441 ]
5442 },
5443 {
5444 "name": "E. South America Standard Time",
5445 "abbr": "ESAST",
5446 "offset": -3,
5447 "isdst": false,
5448 "text": "(UTC-03:00) Brasilia",
5449 "utc": [
5450 "America/Sao_Paulo"
5451 ]
5452 },
5453 {
5454 "name": "Argentina Standard Time",
5455 "abbr": "AST",
5456 "offset": -3,
5457 "isdst": false,
5458 "text": "(UTC-03:00) Buenos Aires",
5459 "utc": [
5460 "America/Argentina/La_Rioja",
5461 "America/Argentina/Rio_Gallegos",
5462 "America/Argentina/Salta",
5463 "America/Argentina/San_Juan",
5464 "America/Argentina/San_Luis",
5465 "America/Argentina/Tucuman",
5466 "America/Argentina/Ushuaia",
5467 "America/Buenos_Aires",
5468 "America/Catamarca",
5469 "America/Cordoba",
5470 "America/Jujuy",
5471 "America/Mendoza"
5472 ]
5473 },
5474 {
5475 "name": "SA Eastern Standard Time",
5476 "abbr": "SEST",
5477 "offset": -3,
5478 "isdst": false,
5479 "text": "(UTC-03:00) Cayenne, Fortaleza",
5480 "utc": [
5481 "America/Araguaina",
5482 "America/Belem",
5483 "America/Cayenne",
5484 "America/Fortaleza",
5485 "America/Maceio",
5486 "America/Paramaribo",
5487 "America/Recife",
5488 "America/Santarem",
5489 "Antarctica/Rothera",
5490 "Atlantic/Stanley",
5491 "Etc/GMT+3"
5492 ]
5493 },
5494 {
5495 "name": "Greenland Standard Time",
5496 "abbr": "GDT",
5497 "offset": -2,
5498 "isdst": true,
5499 "text": "(UTC-03:00) Greenland",
5500 "utc": [
5501 "America/Godthab"
5502 ]
5503 },
5504 {
5505 "name": "Montevideo Standard Time",
5506 "abbr": "MST",
5507 "offset": -3,
5508 "isdst": false,
5509 "text": "(UTC-03:00) Montevideo",
5510 "utc": [
5511 "America/Montevideo"
5512 ]
5513 },
5514 {
5515 "name": "Bahia Standard Time",
5516 "abbr": "BST",
5517 "offset": -3,
5518 "isdst": false,
5519 "text": "(UTC-03:00) Salvador",
5520 "utc": [
5521 "America/Bahia"
5522 ]
5523 },
5524 {
5525 "name": "UTC-02",
5526 "abbr": "U",
5527 "offset": -2,
5528 "isdst": false,
5529 "text": "(UTC-02:00) Coordinated Universal Time-02",
5530 "utc": [
5531 "America/Noronha",
5532 "Atlantic/South_Georgia",
5533 "Etc/GMT+2"
5534 ]
5535 },
5536 {
5537 "name": "Mid-Atlantic Standard Time",
5538 "abbr": "MDT",
5539 "offset": -1,
5540 "isdst": true,
5541 "text": "(UTC-02:00) Mid-Atlantic - Old"
5542 },
5543 {
5544 "name": "Azores Standard Time",
5545 "abbr": "ADT",
5546 "offset": 0,
5547 "isdst": true,
5548 "text": "(UTC-01:00) Azores",
5549 "utc": [
5550 "America/Scoresbysund",
5551 "Atlantic/Azores"
5552 ]
5553 },
5554 {
5555 "name": "Cape Verde Standard Time",
5556 "abbr": "CVST",
5557 "offset": -1,
5558 "isdst": false,
5559 "text": "(UTC-01:00) Cape Verde Is.",
5560 "utc": [
5561 "Atlantic/Cape_Verde",
5562 "Etc/GMT+1"
5563 ]
5564 },
5565 {
5566 "name": "Morocco Standard Time",
5567 "abbr": "MDT",
5568 "offset": 1,
5569 "isdst": true,
5570 "text": "(UTC) Casablanca",
5571 "utc": [
5572 "Africa/Casablanca",
5573 "Africa/El_Aaiun"
5574 ]
5575 },
5576 {
5577 "name": "UTC",
5578 "abbr": "CUT",
5579 "offset": 0,
5580 "isdst": false,
5581 "text": "(UTC) Coordinated Universal Time",
5582 "utc": [
5583 "America/Danmarkshavn",
5584 "Etc/GMT"
5585 ]
5586 },
5587 {
5588 "name": "GMT Standard Time",
5589 "abbr": "GDT",
5590 "offset": 1,
5591 "isdst": true,
5592 "text": "(UTC) Dublin, Edinburgh, Lisbon, London",
5593 "utc": [
5594 "Atlantic/Canary",
5595 "Atlantic/Faeroe",
5596 "Atlantic/Madeira",
5597 "Europe/Dublin",
5598 "Europe/Guernsey",
5599 "Europe/Isle_of_Man",
5600 "Europe/Jersey",
5601 "Europe/Lisbon",
5602 "Europe/London"
5603 ]
5604 },
5605 {
5606 "name": "Greenwich Standard Time",
5607 "abbr": "GST",
5608 "offset": 0,
5609 "isdst": false,
5610 "text": "(UTC) Monrovia, Reykjavik",
5611 "utc": [
5612 "Africa/Abidjan",
5613 "Africa/Accra",
5614 "Africa/Bamako",
5615 "Africa/Banjul",
5616 "Africa/Bissau",
5617 "Africa/Conakry",
5618 "Africa/Dakar",
5619 "Africa/Freetown",
5620 "Africa/Lome",
5621 "Africa/Monrovia",
5622 "Africa/Nouakchott",
5623 "Africa/Ouagadougou",
5624 "Africa/Sao_Tome",
5625 "Atlantic/Reykjavik",
5626 "Atlantic/St_Helena"
5627 ]
5628 },
5629 {
5630 "name": "W. Europe Standard Time",
5631 "abbr": "WEDT",
5632 "offset": 2,
5633 "isdst": true,
5634 "text": "(UTC+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna",
5635 "utc": [
5636 "Arctic/Longyearbyen",
5637 "Europe/Amsterdam",
5638 "Europe/Andorra",
5639 "Europe/Berlin",
5640 "Europe/Busingen",
5641 "Europe/Gibraltar",
5642 "Europe/Luxembourg",
5643 "Europe/Malta",
5644 "Europe/Monaco",
5645 "Europe/Oslo",
5646 "Europe/Rome",
5647 "Europe/San_Marino",
5648 "Europe/Stockholm",
5649 "Europe/Vaduz",
5650 "Europe/Vatican",
5651 "Europe/Vienna",
5652 "Europe/Zurich"
5653 ]
5654 },
5655 {
5656 "name": "Central Europe Standard Time",
5657 "abbr": "CEDT",
5658 "offset": 2,
5659 "isdst": true,
5660 "text": "(UTC+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague",
5661 "utc": [
5662 "Europe/Belgrade",
5663 "Europe/Bratislava",
5664 "Europe/Budapest",
5665 "Europe/Ljubljana",
5666 "Europe/Podgorica",
5667 "Europe/Prague",
5668 "Europe/Tirane"
5669 ]
5670 },
5671 {
5672 "name": "Romance Standard Time",
5673 "abbr": "RDT",
5674 "offset": 2,
5675 "isdst": true,
5676 "text": "(UTC+01:00) Brussels, Copenhagen, Madrid, Paris",
5677 "utc": [
5678 "Africa/Ceuta",
5679 "Europe/Brussels",
5680 "Europe/Copenhagen",
5681 "Europe/Madrid",
5682 "Europe/Paris"
5683 ]
5684 },
5685 {
5686 "name": "Central European Standard Time",
5687 "abbr": "CEDT",
5688 "offset": 2,
5689 "isdst": true,
5690 "text": "(UTC+01:00) Sarajevo, Skopje, Warsaw, Zagreb",
5691 "utc": [
5692 "Europe/Sarajevo",
5693 "Europe/Skopje",
5694 "Europe/Warsaw",
5695 "Europe/Zagreb"
5696 ]
5697 },
5698 {
5699 "name": "W. Central Africa Standard Time",
5700 "abbr": "WCAST",
5701 "offset": 1,
5702 "isdst": false,
5703 "text": "(UTC+01:00) West Central Africa",
5704 "utc": [
5705 "Africa/Algiers",
5706 "Africa/Bangui",
5707 "Africa/Brazzaville",
5708 "Africa/Douala",
5709 "Africa/Kinshasa",
5710 "Africa/Lagos",
5711 "Africa/Libreville",
5712 "Africa/Luanda",
5713 "Africa/Malabo",
5714 "Africa/Ndjamena",
5715 "Africa/Niamey",
5716 "Africa/Porto-Novo",
5717 "Africa/Tunis",
5718 "Etc/GMT-1"
5719 ]
5720 },
5721 {
5722 "name": "Namibia Standard Time",
5723 "abbr": "NST",
5724 "offset": 1,
5725 "isdst": false,
5726 "text": "(UTC+01:00) Windhoek",
5727 "utc": [
5728 "Africa/Windhoek"
5729 ]
5730 },
5731 {
5732 "name": "GTB Standard Time",
5733 "abbr": "GDT",
5734 "offset": 3,
5735 "isdst": true,
5736 "text": "(UTC+02:00) Athens, Bucharest",
5737 "utc": [
5738 "Asia/Nicosia",
5739 "Europe/Athens",
5740 "Europe/Bucharest",
5741 "Europe/Chisinau"
5742 ]
5743 },
5744 {
5745 "name": "Middle East Standard Time",
5746 "abbr": "MEDT",
5747 "offset": 3,
5748 "isdst": true,
5749 "text": "(UTC+02:00) Beirut",
5750 "utc": [
5751 "Asia/Beirut"
5752 ]
5753 },
5754 {
5755 "name": "Egypt Standard Time",
5756 "abbr": "EST",
5757 "offset": 2,
5758 "isdst": false,
5759 "text": "(UTC+02:00) Cairo",
5760 "utc": [
5761 "Africa/Cairo"
5762 ]
5763 },
5764 {
5765 "name": "Syria Standard Time",
5766 "abbr": "SDT",
5767 "offset": 3,
5768 "isdst": true,
5769 "text": "(UTC+02:00) Damascus",
5770 "utc": [
5771 "Asia/Damascus"
5772 ]
5773 },
5774 {
5775 "name": "E. Europe Standard Time",
5776 "abbr": "EEDT",
5777 "offset": 3,
5778 "isdst": true,
5779 "text": "(UTC+02:00) E. Europe"
5780 },
5781 {
5782 "name": "South Africa Standard Time",
5783 "abbr": "SAST",
5784 "offset": 2,
5785 "isdst": false,
5786 "text": "(UTC+02:00) Harare, Pretoria",
5787 "utc": [
5788 "Africa/Blantyre",
5789 "Africa/Bujumbura",
5790 "Africa/Gaborone",
5791 "Africa/Harare",
5792 "Africa/Johannesburg",
5793 "Africa/Kigali",
5794 "Africa/Lubumbashi",
5795 "Africa/Lusaka",
5796 "Africa/Maputo",
5797 "Africa/Maseru",
5798 "Africa/Mbabane",
5799 "Etc/GMT-2"
5800 ]
5801 },
5802 {
5803 "name": "FLE Standard Time",
5804 "abbr": "FDT",
5805 "offset": 3,
5806 "isdst": true,
5807 "text": "(UTC+02:00) Helsinki, Kyiv, Riga, Sofia, Tallinn, Vilnius",
5808 "utc": [
5809 "Europe/Helsinki",
5810 "Europe/Kiev",
5811 "Europe/Mariehamn",
5812 "Europe/Riga",
5813 "Europe/Sofia",
5814 "Europe/Tallinn",
5815 "Europe/Uzhgorod",
5816 "Europe/Vilnius",
5817 "Europe/Zaporozhye"
5818 ]
5819 },
5820 {
5821 "name": "Turkey Standard Time",
5822 "abbr": "TDT",
5823 "offset": 3,
5824 "isdst": true,
5825 "text": "(UTC+02:00) Istanbul",
5826 "utc": [
5827 "Europe/Istanbul"
5828 ]
5829 },
5830 {
5831 "name": "Israel Standard Time",
5832 "abbr": "JDT",
5833 "offset": 3,
5834 "isdst": true,
5835 "text": "(UTC+02:00) Jerusalem",
5836 "utc": [
5837 "Asia/Jerusalem"
5838 ]
5839 },
5840 {
5841 "name": "Libya Standard Time",
5842 "abbr": "LST",
5843 "offset": 2,
5844 "isdst": false,
5845 "text": "(UTC+02:00) Tripoli",
5846 "utc": [
5847 "Africa/Tripoli"
5848 ]
5849 },
5850 {
5851 "name": "Jordan Standard Time",
5852 "abbr": "JST",
5853 "offset": 3,
5854 "isdst": false,
5855 "text": "(UTC+03:00) Amman",
5856 "utc": [
5857 "Asia/Amman"
5858 ]
5859 },
5860 {
5861 "name": "Arabic Standard Time",
5862 "abbr": "AST",
5863 "offset": 3,
5864 "isdst": false,
5865 "text": "(UTC+03:00) Baghdad",
5866 "utc": [
5867 "Asia/Baghdad"
5868 ]
5869 },
5870 {
5871 "name": "Kaliningrad Standard Time",
5872 "abbr": "KST",
5873 "offset": 3,
5874 "isdst": false,
5875 "text": "(UTC+03:00) Kaliningrad, Minsk",
5876 "utc": [
5877 "Europe/Kaliningrad",
5878 "Europe/Minsk"
5879 ]
5880 },
5881 {
5882 "name": "Arab Standard Time",
5883 "abbr": "AST",
5884 "offset": 3,
5885 "isdst": false,
5886 "text": "(UTC+03:00) Kuwait, Riyadh",
5887 "utc": [
5888 "Asia/Aden",
5889 "Asia/Bahrain",
5890 "Asia/Kuwait",
5891 "Asia/Qatar",
5892 "Asia/Riyadh"
5893 ]
5894 },
5895 {
5896 "name": "E. Africa Standard Time",
5897 "abbr": "EAST",
5898 "offset": 3,
5899 "isdst": false,
5900 "text": "(UTC+03:00) Nairobi",
5901 "utc": [
5902 "Africa/Addis_Ababa",
5903 "Africa/Asmera",
5904 "Africa/Dar_es_Salaam",
5905 "Africa/Djibouti",
5906 "Africa/Juba",
5907 "Africa/Kampala",
5908 "Africa/Khartoum",
5909 "Africa/Mogadishu",
5910 "Africa/Nairobi",
5911 "Antarctica/Syowa",
5912 "Etc/GMT-3",
5913 "Indian/Antananarivo",
5914 "Indian/Comoro",
5915 "Indian/Mayotte"
5916 ]
5917 },
5918 {
5919 "name": "Iran Standard Time",
5920 "abbr": "IDT",
5921 "offset": 4.5,
5922 "isdst": true,
5923 "text": "(UTC+03:30) Tehran",
5924 "utc": [
5925 "Asia/Tehran"
5926 ]
5927 },
5928 {
5929 "name": "Arabian Standard Time",
5930 "abbr": "AST",
5931 "offset": 4,
5932 "isdst": false,
5933 "text": "(UTC+04:00) Abu Dhabi, Muscat",
5934 "utc": [
5935 "Asia/Dubai",
5936 "Asia/Muscat",
5937 "Etc/GMT-4"
5938 ]
5939 },
5940 {
5941 "name": "Azerbaijan Standard Time",
5942 "abbr": "ADT",
5943 "offset": 5,
5944 "isdst": true,
5945 "text": "(UTC+04:00) Baku",
5946 "utc": [
5947 "Asia/Baku"
5948 ]
5949 },
5950 {
5951 "name": "Russian Standard Time",
5952 "abbr": "RST",
5953 "offset": 4,
5954 "isdst": false,
5955 "text": "(UTC+04:00) Moscow, St. Petersburg, Volgograd",
5956 "utc": [
5957 "Europe/Moscow",
5958 "Europe/Samara",
5959 "Europe/Simferopol",
5960 "Europe/Volgograd"
5961 ]
5962 },
5963 {
5964 "name": "Mauritius Standard Time",
5965 "abbr": "MST",
5966 "offset": 4,
5967 "isdst": false,
5968 "text": "(UTC+04:00) Port Louis",
5969 "utc": [
5970 "Indian/Mahe",
5971 "Indian/Mauritius",
5972 "Indian/Reunion"
5973 ]
5974 },
5975 {
5976 "name": "Georgian Standard Time",
5977 "abbr": "GST",
5978 "offset": 4,
5979 "isdst": false,
5980 "text": "(UTC+04:00) Tbilisi",
5981 "utc": [
5982 "Asia/Tbilisi"
5983 ]
5984 },
5985 {
5986 "name": "Caucasus Standard Time",
5987 "abbr": "CST",
5988 "offset": 4,
5989 "isdst": false,
5990 "text": "(UTC+04:00) Yerevan",
5991 "utc": [
5992 "Asia/Yerevan"
5993 ]
5994 },
5995 {
5996 "name": "Afghanistan Standard Time",
5997 "abbr": "AST",
5998 "offset": 4.5,
5999 "isdst": false,
6000 "text": "(UTC+04:30) Kabul",
6001 "utc": [
6002 "Asia/Kabul"
6003 ]
6004 },
6005 {
6006 "name": "West Asia Standard Time",
6007 "abbr": "WAST",
6008 "offset": 5,
6009 "isdst": false,
6010 "text": "(UTC+05:00) Ashgabat, Tashkent",
6011 "utc": [
6012 "Antarctica/Mawson",
6013 "Asia/Aqtau",
6014 "Asia/Aqtobe",
6015 "Asia/Ashgabat",
6016 "Asia/Dushanbe",
6017 "Asia/Oral",
6018 "Asia/Samarkand",
6019 "Asia/Tashkent",
6020 "Etc/GMT-5",
6021 "Indian/Kerguelen",
6022 "Indian/Maldives"
6023 ]
6024 },
6025 {
6026 "name": "Pakistan Standard Time",
6027 "abbr": "PST",
6028 "offset": 5,
6029 "isdst": false,
6030 "text": "(UTC+05:00) Islamabad, Karachi",
6031 "utc": [
6032 "Asia/Karachi"
6033 ]
6034 },
6035 {
6036 "name": "India Standard Time",
6037 "abbr": "IST",
6038 "offset": 5.5,
6039 "isdst": false,
6040 "text": "(UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi",
6041 "utc": [
6042 "Asia/Calcutta"
6043 ]
6044 },
6045 {
6046 "name": "Sri Lanka Standard Time",
6047 "abbr": "SLST",
6048 "offset": 5.5,
6049 "isdst": false,
6050 "text": "(UTC+05:30) Sri Jayawardenepura",
6051 "utc": [
6052 "Asia/Colombo"
6053 ]
6054 },
6055 {
6056 "name": "Nepal Standard Time",
6057 "abbr": "NST",
6058 "offset": 5.75,
6059 "isdst": false,
6060 "text": "(UTC+05:45) Kathmandu",
6061 "utc": [
6062 "Asia/Katmandu"
6063 ]
6064 },
6065 {
6066 "name": "Central Asia Standard Time",
6067 "abbr": "CAST",
6068 "offset": 6,
6069 "isdst": false,
6070 "text": "(UTC+06:00) Astana",
6071 "utc": [
6072 "Antarctica/Vostok",
6073 "Asia/Almaty",
6074 "Asia/Bishkek",
6075 "Asia/Qyzylorda",
6076 "Asia/Urumqi",
6077 "Etc/GMT-6",
6078 "Indian/Chagos"
6079 ]
6080 },
6081 {
6082 "name": "Bangladesh Standard Time",
6083 "abbr": "BST",
6084 "offset": 6,
6085 "isdst": false,
6086 "text": "(UTC+06:00) Dhaka",
6087 "utc": [
6088 "Asia/Dhaka",
6089 "Asia/Thimphu"
6090 ]
6091 },
6092 {
6093 "name": "Ekaterinburg Standard Time",
6094 "abbr": "EST",
6095 "offset": 6,
6096 "isdst": false,
6097 "text": "(UTC+06:00) Ekaterinburg",
6098 "utc": [
6099 "Asia/Yekaterinburg"
6100 ]
6101 },
6102 {
6103 "name": "Myanmar Standard Time",
6104 "abbr": "MST",
6105 "offset": 6.5,
6106 "isdst": false,
6107 "text": "(UTC+06:30) Yangon (Rangoon)",
6108 "utc": [
6109 "Asia/Rangoon",
6110 "Indian/Cocos"
6111 ]
6112 },
6113 {
6114 "name": "SE Asia Standard Time",
6115 "abbr": "SAST",
6116 "offset": 7,
6117 "isdst": false,
6118 "text": "(UTC+07:00) Bangkok, Hanoi, Jakarta",
6119 "utc": [
6120 "Antarctica/Davis",
6121 "Asia/Bangkok",
6122 "Asia/Hovd",
6123 "Asia/Jakarta",
6124 "Asia/Phnom_Penh",
6125 "Asia/Pontianak",
6126 "Asia/Saigon",
6127 "Asia/Vientiane",
6128 "Etc/GMT-7",
6129 "Indian/Christmas"
6130 ]
6131 },
6132 {
6133 "name": "N. Central Asia Standard Time",
6134 "abbr": "NCAST",
6135 "offset": 7,
6136 "isdst": false,
6137 "text": "(UTC+07:00) Novosibirsk",
6138 "utc": [
6139 "Asia/Novokuznetsk",
6140 "Asia/Novosibirsk",
6141 "Asia/Omsk"
6142 ]
6143 },
6144 {
6145 "name": "China Standard Time",
6146 "abbr": "CST",
6147 "offset": 8,
6148 "isdst": false,
6149 "text": "(UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi",
6150 "utc": [
6151 "Asia/Hong_Kong",
6152 "Asia/Macau",
6153 "Asia/Shanghai"
6154 ]
6155 },
6156 {
6157 "name": "North Asia Standard Time",
6158 "abbr": "NAST",
6159 "offset": 8,
6160 "isdst": false,
6161 "text": "(UTC+08:00) Krasnoyarsk",
6162 "utc": [
6163 "Asia/Krasnoyarsk"
6164 ]
6165 },
6166 {
6167 "name": "Singapore Standard Time",
6168 "abbr": "MPST",
6169 "offset": 8,
6170 "isdst": false,
6171 "text": "(UTC+08:00) Kuala Lumpur, Singapore",
6172 "utc": [
6173 "Asia/Brunei",
6174 "Asia/Kuala_Lumpur",
6175 "Asia/Kuching",
6176 "Asia/Makassar",
6177 "Asia/Manila",
6178 "Asia/Singapore",
6179 "Etc/GMT-8"
6180 ]
6181 },
6182 {
6183 "name": "W. Australia Standard Time",
6184 "abbr": "WAST",
6185 "offset": 8,
6186 "isdst": false,
6187 "text": "(UTC+08:00) Perth",
6188 "utc": [
6189 "Antarctica/Casey",
6190 "Australia/Perth"
6191 ]
6192 },
6193 {
6194 "name": "Taipei Standard Time",
6195 "abbr": "TST",
6196 "offset": 8,
6197 "isdst": false,
6198 "text": "(UTC+08:00) Taipei",
6199 "utc": [
6200 "Asia/Taipei"
6201 ]
6202 },
6203 {
6204 "name": "Ulaanbaatar Standard Time",
6205 "abbr": "UST",
6206 "offset": 8,
6207 "isdst": false,
6208 "text": "(UTC+08:00) Ulaanbaatar",
6209 "utc": [
6210 "Asia/Choibalsan",
6211 "Asia/Ulaanbaatar"
6212 ]
6213 },
6214 {
6215 "name": "North Asia East Standard Time",
6216 "abbr": "NAEST",
6217 "offset": 9,
6218 "isdst": false,
6219 "text": "(UTC+09:00) Irkutsk",
6220 "utc": [
6221 "Asia/Irkutsk"
6222 ]
6223 },
6224 {
6225 "name": "Tokyo Standard Time",
6226 "abbr": "TST",
6227 "offset": 9,
6228 "isdst": false,
6229 "text": "(UTC+09:00) Osaka, Sapporo, Tokyo",
6230 "utc": [
6231 "Asia/Dili",
6232 "Asia/Jayapura",
6233 "Asia/Tokyo",
6234 "Etc/GMT-9",
6235 "Pacific/Palau"
6236 ]
6237 },
6238 {
6239 "name": "Korea Standard Time",
6240 "abbr": "KST",
6241 "offset": 9,
6242 "isdst": false,
6243 "text": "(UTC+09:00) Seoul",
6244 "utc": [
6245 "Asia/Pyongyang",
6246 "Asia/Seoul"
6247 ]
6248 },
6249 {
6250 "name": "Cen. Australia Standard Time",
6251 "abbr": "CAST",
6252 "offset": 9.5,
6253 "isdst": false,
6254 "text": "(UTC+09:30) Adelaide",
6255 "utc": [
6256 "Australia/Adelaide",
6257 "Australia/Broken_Hill"
6258 ]
6259 },
6260 {
6261 "name": "AUS Central Standard Time",
6262 "abbr": "ACST",
6263 "offset": 9.5,
6264 "isdst": false,
6265 "text": "(UTC+09:30) Darwin",
6266 "utc": [
6267 "Australia/Darwin"
6268 ]
6269 },
6270 {
6271 "name": "E. Australia Standard Time",
6272 "abbr": "EAST",
6273 "offset": 10,
6274 "isdst": false,
6275 "text": "(UTC+10:00) Brisbane",
6276 "utc": [
6277 "Australia/Brisbane",
6278 "Australia/Lindeman"
6279 ]
6280 },
6281 {
6282 "name": "AUS Eastern Standard Time",
6283 "abbr": "AEST",
6284 "offset": 10,
6285 "isdst": false,
6286 "text": "(UTC+10:00) Canberra, Melbourne, Sydney",
6287 "utc": [
6288 "Australia/Melbourne",
6289 "Australia/Sydney"
6290 ]
6291 },
6292 {
6293 "name": "West Pacific Standard Time",
6294 "abbr": "WPST",
6295 "offset": 10,
6296 "isdst": false,
6297 "text": "(UTC+10:00) Guam, Port Moresby",
6298 "utc": [
6299 "Antarctica/DumontDUrville",
6300 "Etc/GMT-10",
6301 "Pacific/Guam",
6302 "Pacific/Port_Moresby",
6303 "Pacific/Saipan",
6304 "Pacific/Truk"
6305 ]
6306 },
6307 {
6308 "name": "Tasmania Standard Time",
6309 "abbr": "TST",
6310 "offset": 10,
6311 "isdst": false,
6312 "text": "(UTC+10:00) Hobart",
6313 "utc": [
6314 "Australia/Currie",
6315 "Australia/Hobart"
6316 ]
6317 },
6318 {
6319 "name": "Yakutsk Standard Time",
6320 "abbr": "YST",
6321 "offset": 10,
6322 "isdst": false,
6323 "text": "(UTC+10:00) Yakutsk",
6324 "utc": [
6325 "Asia/Chita",
6326 "Asia/Khandyga",
6327 "Asia/Yakutsk"
6328 ]
6329 },
6330 {
6331 "name": "Central Pacific Standard Time",
6332 "abbr": "CPST",
6333 "offset": 11,
6334 "isdst": false,
6335 "text": "(UTC+11:00) Solomon Is., New Caledonia",
6336 "utc": [
6337 "Antarctica/Macquarie",
6338 "Etc/GMT-11",
6339 "Pacific/Efate",
6340 "Pacific/Guadalcanal",
6341 "Pacific/Kosrae",
6342 "Pacific/Noumea",
6343 "Pacific/Ponape"
6344 ]
6345 },
6346 {
6347 "name": "Vladivostok Standard Time",
6348 "abbr": "VST",
6349 "offset": 11,
6350 "isdst": false,
6351 "text": "(UTC+11:00) Vladivostok",
6352 "utc": [
6353 "Asia/Sakhalin",
6354 "Asia/Ust-Nera",
6355 "Asia/Vladivostok"
6356 ]
6357 },
6358 {
6359 "name": "New Zealand Standard Time",
6360 "abbr": "NZST",
6361 "offset": 12,
6362 "isdst": false,
6363 "text": "(UTC+12:00) Auckland, Wellington",
6364 "utc": [
6365 "Antarctica/McMurdo",
6366 "Pacific/Auckland"
6367 ]
6368 },
6369 {
6370 "name": "UTC+12",
6371 "abbr": "U",
6372 "offset": 12,
6373 "isdst": false,
6374 "text": "(UTC+12:00) Coordinated Universal Time+12",
6375 "utc": [
6376 "Etc/GMT-12",
6377 "Pacific/Funafuti",
6378 "Pacific/Kwajalein",
6379 "Pacific/Majuro",
6380 "Pacific/Nauru",
6381 "Pacific/Tarawa",
6382 "Pacific/Wake",
6383 "Pacific/Wallis"
6384 ]
6385 },
6386 {
6387 "name": "Fiji Standard Time",
6388 "abbr": "FST",
6389 "offset": 12,
6390 "isdst": false,
6391 "text": "(UTC+12:00) Fiji",
6392 "utc": [
6393 "Pacific/Fiji"
6394 ]
6395 },
6396 {
6397 "name": "Magadan Standard Time",
6398 "abbr": "MST",
6399 "offset": 12,
6400 "isdst": false,
6401 "text": "(UTC+12:00) Magadan",
6402 "utc": [
6403 "Asia/Anadyr",
6404 "Asia/Kamchatka",
6405 "Asia/Magadan",
6406 "Asia/Srednekolymsk"
6407 ]
6408 },
6409 {
6410 "name": "Kamchatka Standard Time",
6411 "abbr": "KDT",
6412 "offset": 13,
6413 "isdst": true,
6414 "text": "(UTC+12:00) Petropavlovsk-Kamchatsky - Old"
6415 },
6416 {
6417 "name": "Tonga Standard Time",
6418 "abbr": "TST",
6419 "offset": 13,
6420 "isdst": false,
6421 "text": "(UTC+13:00) Nuku'alofa",
6422 "utc": [
6423 "Etc/GMT-13",
6424 "Pacific/Enderbury",
6425 "Pacific/Fakaofo",
6426 "Pacific/Tongatapu"
6427 ]
6428 },
6429 {
6430 "name": "Samoa Standard Time",
6431 "abbr": "SST",
6432 "offset": 13,
6433 "isdst": false,
6434 "text": "(UTC+13:00) Samoa",
6435 "utc": [
6436 "Pacific/Apia"
6437 ]
6438 }
6439 ],
6440 //List source: http://answers.google.com/answers/threadview/id/589312.html
6441 profession: [
6442 "Airline Pilot",
6443 "Academic Team",
6444 "Accountant",
6445 "Account Executive",
6446 "Actor",
6447 "Actuary",
6448 "Acquisition Analyst",
6449 "Administrative Asst.",
6450 "Administrative Analyst",
6451 "Administrator",
6452 "Advertising Director",
6453 "Aerospace Engineer",
6454 "Agent",
6455 "Agricultural Inspector",
6456 "Agricultural Scientist",
6457 "Air Traffic Controller",
6458 "Animal Trainer",
6459 "Anthropologist",
6460 "Appraiser",
6461 "Architect",
6462 "Art Director",
6463 "Artist",
6464 "Astronomer",
6465 "Athletic Coach",
6466 "Auditor",
6467 "Author",
6468 "Baker",
6469 "Banker",
6470 "Bankruptcy Attorney",
6471 "Benefits Manager",
6472 "Biologist",
6473 "Bio-feedback Specialist",
6474 "Biomedical Engineer",
6475 "Biotechnical Researcher",
6476 "Broadcaster",
6477 "Broker",
6478 "Building Manager",
6479 "Building Contractor",
6480 "Building Inspector",
6481 "Business Analyst",
6482 "Business Planner",
6483 "Business Manager",
6484 "Buyer",
6485 "Call Center Manager",
6486 "Career Counselor",
6487 "Cash Manager",
6488 "Ceramic Engineer",
6489 "Chief Executive Officer",
6490 "Chief Operation Officer",
6491 "Chef",
6492 "Chemical Engineer",
6493 "Chemist",
6494 "Child Care Manager",
6495 "Chief Medical Officer",
6496 "Chiropractor",
6497 "Cinematographer",
6498 "City Housing Manager",
6499 "City Manager",
6500 "Civil Engineer",
6501 "Claims Manager",
6502 "Clinical Research Assistant",
6503 "Collections Manager.",
6504 "Compliance Manager",
6505 "Comptroller",
6506 "Computer Manager",
6507 "Commercial Artist",
6508 "Communications Affairs Director",
6509 "Communications Director",
6510 "Communications Engineer",
6511 "Compensation Analyst",
6512 "Computer Programmer",
6513 "Computer Ops. Manager",
6514 "Computer Engineer",
6515 "Computer Operator",
6516 "Computer Graphics Specialist",
6517 "Construction Engineer",
6518 "Construction Manager",
6519 "Consultant",
6520 "Consumer Relations Manager",
6521 "Contract Administrator",
6522 "Copyright Attorney",
6523 "Copywriter",
6524 "Corporate Planner",
6525 "Corrections Officer",
6526 "Cosmetologist",
6527 "Credit Analyst",
6528 "Cruise Director",
6529 "Chief Information Officer",
6530 "Chief Technology Officer",
6531 "Customer Service Manager",
6532 "Cryptologist",
6533 "Dancer",
6534 "Data Security Manager",
6535 "Database Manager",
6536 "Day Care Instructor",
6537 "Dentist",
6538 "Designer",
6539 "Design Engineer",
6540 "Desktop Publisher",
6541 "Developer",
6542 "Development Officer",
6543 "Diamond Merchant",
6544 "Dietitian",
6545 "Direct Marketer",
6546 "Director",
6547 "Distribution Manager",
6548 "Diversity Manager",
6549 "Economist",
6550 "EEO Compliance Manager",
6551 "Editor",
6552 "Education Adminator",
6553 "Electrical Engineer",
6554 "Electro Optical Engineer",
6555 "Electronics Engineer",
6556 "Embassy Management",
6557 "Employment Agent",
6558 "Engineer Technician",
6559 "Entrepreneur",
6560 "Environmental Analyst",
6561 "Environmental Attorney",
6562 "Environmental Engineer",
6563 "Environmental Specialist",
6564 "Escrow Officer",
6565 "Estimator",
6566 "Executive Assistant",
6567 "Executive Director",
6568 "Executive Recruiter",
6569 "Facilities Manager",
6570 "Family Counselor",
6571 "Fashion Events Manager",
6572 "Fashion Merchandiser",
6573 "Fast Food Manager",
6574 "Film Producer",
6575 "Film Production Assistant",
6576 "Financial Analyst",
6577 "Financial Planner",
6578 "Financier",
6579 "Fine Artist",
6580 "Wildlife Specialist",
6581 "Fitness Consultant",
6582 "Flight Attendant",
6583 "Flight Engineer",
6584 "Floral Designer",
6585 "Food & Beverage Director",
6586 "Food Service Manager",
6587 "Forestry Technician",
6588 "Franchise Management",
6589 "Franchise Sales",
6590 "Fraud Investigator",
6591 "Freelance Writer",
6592 "Fund Raiser",
6593 "General Manager",
6594 "Geologist",
6595 "General Counsel",
6596 "Geriatric Specialist",
6597 "Gerontologist",
6598 "Glamour Photographer",
6599 "Golf Club Manager",
6600 "Gourmet Chef",
6601 "Graphic Designer",
6602 "Grounds Keeper",
6603 "Hazardous Waste Manager",
6604 "Health Care Manager",
6605 "Health Therapist",
6606 "Health Service Administrator",
6607 "Hearing Officer",
6608 "Home Economist",
6609 "Horticulturist",
6610 "Hospital Administrator",
6611 "Hotel Manager",
6612 "Human Resources Manager",
6613 "Importer",
6614 "Industrial Designer",
6615 "Industrial Engineer",
6616 "Information Director",
6617 "Inside Sales",
6618 "Insurance Adjuster",
6619 "Interior Decorator",
6620 "Internal Controls Director",
6621 "International Acct.",
6622 "International Courier",
6623 "International Lawyer",
6624 "Interpreter",
6625 "Investigator",
6626 "Investment Banker",
6627 "Investment Manager",
6628 "IT Architect",
6629 "IT Project Manager",
6630 "IT Systems Analyst",
6631 "Jeweler",
6632 "Joint Venture Manager",
6633 "Journalist",
6634 "Labor Negotiator",
6635 "Labor Organizer",
6636 "Labor Relations Manager",
6637 "Lab Services Director",
6638 "Lab Technician",
6639 "Land Developer",
6640 "Landscape Architect",
6641 "Law Enforcement Officer",
6642 "Lawyer",
6643 "Lead Software Engineer",
6644 "Lead Software Test Engineer",
6645 "Leasing Manager",
6646 "Legal Secretary",
6647 "Library Manager",
6648 "Litigation Attorney",
6649 "Loan Officer",
6650 "Lobbyist",
6651 "Logistics Manager",
6652 "Maintenance Manager",
6653 "Management Consultant",
6654 "Managed Care Director",
6655 "Managing Partner",
6656 "Manufacturing Director",
6657 "Manpower Planner",
6658 "Marine Biologist",
6659 "Market Res. Analyst",
6660 "Marketing Director",
6661 "Materials Manager",
6662 "Mathematician",
6663 "Membership Chairman",
6664 "Mechanic",
6665 "Mechanical Engineer",
6666 "Media Buyer",
6667 "Medical Investor",
6668 "Medical Secretary",
6669 "Medical Technician",
6670 "Mental Health Counselor",
6671 "Merchandiser",
6672 "Metallurgical Engineering",
6673 "Meteorologist",
6674 "Microbiologist",
6675 "MIS Manager",
6676 "Motion Picture Director",
6677 "Multimedia Director",
6678 "Musician",
6679 "Network Administrator",
6680 "Network Specialist",
6681 "Network Operator",
6682 "New Product Manager",
6683 "Novelist",
6684 "Nuclear Engineer",
6685 "Nuclear Specialist",
6686 "Nutritionist",
6687 "Nursing Administrator",
6688 "Occupational Therapist",
6689 "Oceanographer",
6690 "Office Manager",
6691 "Operations Manager",
6692 "Operations Research Director",
6693 "Optical Technician",
6694 "Optometrist",
6695 "Organizational Development Manager",
6696 "Outplacement Specialist",
6697 "Paralegal",
6698 "Park Ranger",
6699 "Patent Attorney",
6700 "Payroll Specialist",
6701 "Personnel Specialist",
6702 "Petroleum Engineer",
6703 "Pharmacist",
6704 "Photographer",
6705 "Physical Therapist",
6706 "Physician",
6707 "Physician Assistant",
6708 "Physicist",
6709 "Planning Director",
6710 "Podiatrist",
6711 "Political Analyst",
6712 "Political Scientist",
6713 "Politician",
6714 "Portfolio Manager",
6715 "Preschool Management",
6716 "Preschool Teacher",
6717 "Principal",
6718 "Private Banker",
6719 "Private Investigator",
6720 "Probation Officer",
6721 "Process Engineer",
6722 "Producer",
6723 "Product Manager",
6724 "Product Engineer",
6725 "Production Engineer",
6726 "Production Planner",
6727 "Professional Athlete",
6728 "Professional Coach",
6729 "Professor",
6730 "Project Engineer",
6731 "Project Manager",
6732 "Program Manager",
6733 "Property Manager",
6734 "Public Administrator",
6735 "Public Safety Director",
6736 "PR Specialist",
6737 "Publisher",
6738 "Purchasing Agent",
6739 "Publishing Director",
6740 "Quality Assurance Specialist",
6741 "Quality Control Engineer",
6742 "Quality Control Inspector",
6743 "Radiology Manager",
6744 "Railroad Engineer",
6745 "Real Estate Broker",
6746 "Recreational Director",
6747 "Recruiter",
6748 "Redevelopment Specialist",
6749 "Regulatory Affairs Manager",
6750 "Registered Nurse",
6751 "Rehabilitation Counselor",
6752 "Relocation Manager",
6753 "Reporter",
6754 "Research Specialist",
6755 "Restaurant Manager",
6756 "Retail Store Manager",
6757 "Risk Analyst",
6758 "Safety Engineer",
6759 "Sales Engineer",
6760 "Sales Trainer",
6761 "Sales Promotion Manager",
6762 "Sales Representative",
6763 "Sales Manager",
6764 "Service Manager",
6765 "Sanitation Engineer",
6766 "Scientific Programmer",
6767 "Scientific Writer",
6768 "Securities Analyst",
6769 "Security Consultant",
6770 "Security Director",
6771 "Seminar Presenter",
6772 "Ship's Officer",
6773 "Singer",
6774 "Social Director",
6775 "Social Program Planner",
6776 "Social Research",
6777 "Social Scientist",
6778 "Social Worker",
6779 "Sociologist",
6780 "Software Developer",
6781 "Software Engineer",
6782 "Software Test Engineer",
6783 "Soil Scientist",
6784 "Special Events Manager",
6785 "Special Education Teacher",
6786 "Special Projects Director",
6787 "Speech Pathologist",
6788 "Speech Writer",
6789 "Sports Event Manager",
6790 "Statistician",
6791 "Store Manager",
6792 "Strategic Alliance Director",
6793 "Strategic Planning Director",
6794 "Stress Reduction Specialist",
6795 "Stockbroker",
6796 "Surveyor",
6797 "Structural Engineer",
6798 "Superintendent",
6799 "Supply Chain Director",
6800 "System Engineer",
6801 "Systems Analyst",
6802 "Systems Programmer",
6803 "System Administrator",
6804 "Tax Specialist",
6805 "Teacher",
6806 "Technical Support Specialist",
6807 "Technical Illustrator",
6808 "Technical Writer",
6809 "Technology Director",
6810 "Telecom Analyst",
6811 "Telemarketer",
6812 "Theatrical Director",
6813 "Title Examiner",
6814 "Tour Escort",
6815 "Tour Guide Director",
6816 "Traffic Manager",
6817 "Trainer Translator",
6818 "Transportation Manager",
6819 "Travel Agent",
6820 "Treasurer",
6821 "TV Programmer",
6822 "Underwriter",
6823 "Union Representative",
6824 "University Administrator",
6825 "University Dean",
6826 "Urban Planner",
6827 "Veterinarian",
6828 "Vendor Relations Director",
6829 "Viticulturist",
6830 "Warehouse Manager"
6831 ],
6832 animals : {
6833 //list of ocean animals comes from https://owlcation.com/stem/list-of-ocean-animals
6834 "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"],
6835 //list of desert, grassland, and forest animals comes from http://www.skyenimals.com/
6836 "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"],
6837 "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"],
6838 "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"],
6839 //list of farm animals comes from https://www.buzzle.com/articles/farm-animals-list.html
6840 "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"],
6841 //list of pet animals comes from https://www.dogbreedinfo.com/pets/pet.htm
6842 "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"],
6843 //list of zoo animals comes from https://bronxzoo.com/animals
6844 "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"]
6845 },
6846 emotions: [
6847 "love",
6848 "Joy",
6849 "Surprise",
6850 "Anger",
6851 "Sadness",
6852 "Fear"
6853 ],
6854 };
6855
6856 var o_hasOwnProperty = Object.prototype.hasOwnProperty;
6857 var o_keys = (Object.keys || function(obj) {
6858 var result = [];
6859 for (var key in obj) {
6860 if (o_hasOwnProperty.call(obj, key)) {
6861 result.push(key);
6862 }
6863 }
6864
6865 return result;
6866 });
6867
6868
6869 function _copyObject(source, target) {
6870 var keys = o_keys(source);
6871 var key;
6872
6873 for (var i = 0, l = keys.length; i < l; i++) {
6874 key = keys[i];
6875 target[key] = source[key] || target[key];
6876 }
6877 }
6878
6879 function _copyArray(source, target) {
6880 for (var i = 0, l = source.length; i < l; i++) {
6881 target[i] = source[i];
6882 }
6883 }
6884
6885 function copyObject(source, _target) {
6886 var isArray = Array.isArray(source);
6887 var target = _target || (isArray ? new Array(source.length) : {});
6888
6889 if (isArray) {
6890 _copyArray(source, target);
6891 } else {
6892 _copyObject(source, target);
6893 }
6894
6895 return target;
6896 }
6897
6898 /** Get the data based on key**/
6899 Chance.prototype.get = function (name) {
6900 return copyObject(data[name]);
6901 };
6902
6903 // Mac Address
6904 Chance.prototype.mac_address = function(options){
6905 // typically mac addresses are separated by ":"
6906 // however they can also be separated by "-"
6907 // the network variant uses a dot every fourth byte
6908
6909 options = initOptions(options);
6910 if(!options.separator) {
6911 options.separator = options.networkVersion ? "." : ":";
6912 }
6913
6914 var mac_pool="ABCDEF1234567890",
6915 mac = "";
6916 if(!options.networkVersion) {
6917 mac = this.n(this.string, 6, { pool: mac_pool, length:2 }).join(options.separator);
6918 } else {
6919 mac = this.n(this.string, 3, { pool: mac_pool, length:4 }).join(options.separator);
6920 }
6921
6922 return mac;
6923 };
6924
6925 Chance.prototype.normal = function (options) {
6926 options = initOptions(options, {mean : 0, dev : 1, pool : []});
6927
6928 testRange(
6929 options.pool.constructor !== Array,
6930 "Chance: The pool option must be a valid array."
6931 );
6932 testRange(
6933 typeof options.mean !== 'number',
6934 "Chance: Mean (mean) must be a number"
6935 );
6936 testRange(
6937 typeof options.dev !== 'number',
6938 "Chance: Standard deviation (dev) must be a number"
6939 );
6940
6941 // If a pool has been passed, then we are returning an item from that pool,
6942 // using the normal distribution settings that were passed in
6943 if (options.pool.length > 0) {
6944 return this.normal_pool(options);
6945 }
6946
6947 // The Marsaglia Polar method
6948 var s, u, v, norm,
6949 mean = options.mean,
6950 dev = options.dev;
6951
6952 do {
6953 // U and V are from the uniform distribution on (-1, 1)
6954 u = this.random() * 2 - 1;
6955 v = this.random() * 2 - 1;
6956
6957 s = u * u + v * v;
6958 } while (s >= 1);
6959
6960 // Compute the standard normal variate
6961 norm = u * Math.sqrt(-2 * Math.log(s) / s);
6962
6963 // Shape and scale
6964 return dev * norm + mean;
6965 };
6966
6967 Chance.prototype.normal_pool = function(options) {
6968 var performanceCounter = 0;
6969 do {
6970 var idx = Math.round(this.normal({ mean: options.mean, dev: options.dev }));
6971 if (idx < options.pool.length && idx >= 0) {
6972 return options.pool[idx];
6973 } else {
6974 performanceCounter++;
6975 }
6976 } while(performanceCounter < 100);
6977
6978 throw new RangeError("Chance: Your pool is too small for the given mean and standard deviation. Please adjust.");
6979 };
6980
6981 Chance.prototype.radio = function (options) {
6982 // Initial Letter (Typically Designated by Side of Mississippi River)
6983 options = initOptions(options, {side : "?"});
6984 var fl = "";
6985 switch (options.side.toLowerCase()) {
6986 case "east":
6987 case "e":
6988 fl = "W";
6989 break;
6990 case "west":
6991 case "w":
6992 fl = "K";
6993 break;
6994 default:
6995 fl = this.character({pool: "KW"});
6996 break;
6997 }
6998
6999 return fl + this.character({alpha: true, casing: "upper"}) +
7000 this.character({alpha: true, casing: "upper"}) +
7001 this.character({alpha: true, casing: "upper"});
7002 };
7003
7004 // Set the data as key and data or the data map
7005 Chance.prototype.set = function (name, values) {
7006 if (typeof name === "string") {
7007 data[name] = values;
7008 } else {
7009 data = copyObject(name, data);
7010 }
7011 };
7012
7013 Chance.prototype.tv = function (options) {
7014 return this.radio(options);
7015 };
7016
7017 // ID number for Brazil companies
7018 Chance.prototype.cnpj = function () {
7019 var n = this.n(this.natural, 8, { max: 9 });
7020 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;
7021 d1 = 11 - (d1 % 11);
7022 if (d1>=10){
7023 d1 = 0;
7024 }
7025 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;
7026 d2 = 11 - (d2 % 11);
7027 if (d2>=10){
7028 d2 = 0;
7029 }
7030 return ''+n[0]+n[1]+'.'+n[2]+n[3]+n[4]+'.'+n[5]+n[6]+n[7]+'/0001-'+d1+d2;
7031 };
7032
7033 Chance.prototype.emotion = function () {
7034 return this.pick(this.get("emotions"));
7035 };
7036
7037 // -- End Miscellaneous --
7038
7039 Chance.prototype.mersenne_twister = function (seed) {
7040 return new MersenneTwister(seed);
7041 };
7042
7043 Chance.prototype.blueimp_md5 = function () {
7044 return new BlueImpMD5();
7045 };
7046
7047 // Mersenne Twister from https://gist.github.com/banksean/300494
7048 /*
7049 A C-program for MT19937, with initialization improved 2002/1/26.
7050 Coded by Takuji Nishimura and Makoto Matsumoto.
7051
7052 Before using, initialize the state by using init_genrand(seed)
7053 or init_by_array(init_key, key_length).
7054
7055 Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
7056 All rights reserved.
7057
7058 Redistribution and use in source and binary forms, with or without
7059 modification, are permitted provided that the following conditions
7060 are met:
7061
7062 1. Redistributions of source code must retain the above copyright
7063 notice, this list of conditions and the following disclaimer.
7064
7065 2. Redistributions in binary form must reproduce the above copyright
7066 notice, this list of conditions and the following disclaimer in the
7067 documentation and/or other materials provided with the distribution.
7068
7069 3. The names of its contributors may not be used to endorse or promote
7070 products derived from this software without specific prior written
7071 permission.
7072
7073 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
7074 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7075 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
7076 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
7077 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
7078 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
7079 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
7080 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
7081 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
7082 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
7083 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
7084
7085
7086 Any feedback is very welcome.
7087 http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
7088 email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)
7089 */
7090 var MersenneTwister = function (seed) {
7091 if (seed === undefined) {
7092 // kept random number same size as time used previously to ensure no unexpected results downstream
7093 seed = Math.floor(Math.random()*Math.pow(10,13));
7094 }
7095 /* Period parameters */
7096 this.N = 624;
7097 this.M = 397;
7098 this.MATRIX_A = 0x9908b0df; /* constant vector a */
7099 this.UPPER_MASK = 0x80000000; /* most significant w-r bits */
7100 this.LOWER_MASK = 0x7fffffff; /* least significant r bits */
7101
7102 this.mt = new Array(this.N); /* the array for the state vector */
7103 this.mti = this.N + 1; /* mti==N + 1 means mt[N] is not initialized */
7104
7105 this.init_genrand(seed);
7106 };
7107
7108 /* initializes mt[N] with a seed */
7109 MersenneTwister.prototype.init_genrand = function (s) {
7110 this.mt[0] = s >>> 0;
7111 for (this.mti = 1; this.mti < this.N; this.mti++) {
7112 s = this.mt[this.mti - 1] ^ (this.mt[this.mti - 1] >>> 30);
7113 this.mt[this.mti] = (((((s & 0xffff0000) >>> 16) * 1812433253) << 16) + (s & 0x0000ffff) * 1812433253) + this.mti;
7114 /* See Knuth TAOCP Vol2. 3rd Ed. P.106 for multiplier. */
7115 /* In the previous versions, MSBs of the seed affect */
7116 /* only MSBs of the array mt[]. */
7117 /* 2002/01/09 modified by Makoto Matsumoto */
7118 this.mt[this.mti] >>>= 0;
7119 /* for >32 bit machines */
7120 }
7121 };
7122
7123 /* initialize by an array with array-length */
7124 /* init_key is the array for initializing keys */
7125 /* key_length is its length */
7126 /* slight change for C++, 2004/2/26 */
7127 MersenneTwister.prototype.init_by_array = function (init_key, key_length) {
7128 var i = 1, j = 0, k, s;
7129 this.init_genrand(19650218);
7130 k = (this.N > key_length ? this.N : key_length);
7131 for (; k; k--) {
7132 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7133 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1664525) << 16) + ((s & 0x0000ffff) * 1664525))) + init_key[j] + j; /* non linear */
7134 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7135 i++;
7136 j++;
7137 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7138 if (j >= key_length) { j = 0; }
7139 }
7140 for (k = this.N - 1; k; k--) {
7141 s = this.mt[i - 1] ^ (this.mt[i - 1] >>> 30);
7142 this.mt[i] = (this.mt[i] ^ (((((s & 0xffff0000) >>> 16) * 1566083941) << 16) + (s & 0x0000ffff) * 1566083941)) - i; /* non linear */
7143 this.mt[i] >>>= 0; /* for WORDSIZE > 32 machines */
7144 i++;
7145 if (i >= this.N) { this.mt[0] = this.mt[this.N - 1]; i = 1; }
7146 }
7147
7148 this.mt[0] = 0x80000000; /* MSB is 1; assuring non-zero initial array */
7149 };
7150
7151 /* generates a random number on [0,0xffffffff]-interval */
7152 MersenneTwister.prototype.genrand_int32 = function () {
7153 var y;
7154 var mag01 = new Array(0x0, this.MATRIX_A);
7155 /* mag01[x] = x * MATRIX_A for x=0,1 */
7156
7157 if (this.mti >= this.N) { /* generate N words at one time */
7158 var kk;
7159
7160 if (this.mti === this.N + 1) { /* if init_genrand() has not been called, */
7161 this.init_genrand(5489); /* a default initial seed is used */
7162 }
7163 for (kk = 0; kk < this.N - this.M; kk++) {
7164 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7165 this.mt[kk] = this.mt[kk + this.M] ^ (y >>> 1) ^ mag01[y & 0x1];
7166 }
7167 for (;kk < this.N - 1; kk++) {
7168 y = (this.mt[kk]&this.UPPER_MASK)|(this.mt[kk + 1]&this.LOWER_MASK);
7169 this.mt[kk] = this.mt[kk + (this.M - this.N)] ^ (y >>> 1) ^ mag01[y & 0x1];
7170 }
7171 y = (this.mt[this.N - 1]&this.UPPER_MASK)|(this.mt[0]&this.LOWER_MASK);
7172 this.mt[this.N - 1] = this.mt[this.M - 1] ^ (y >>> 1) ^ mag01[y & 0x1];
7173
7174 this.mti = 0;
7175 }
7176
7177 y = this.mt[this.mti++];
7178
7179 /* Tempering */
7180 y ^= (y >>> 11);
7181 y ^= (y << 7) & 0x9d2c5680;
7182 y ^= (y << 15) & 0xefc60000;
7183 y ^= (y >>> 18);
7184
7185 return y >>> 0;
7186 };
7187
7188 /* generates a random number on [0,0x7fffffff]-interval */
7189 MersenneTwister.prototype.genrand_int31 = function () {
7190 return (this.genrand_int32() >>> 1);
7191 };
7192
7193 /* generates a random number on [0,1]-real-interval */
7194 MersenneTwister.prototype.genrand_real1 = function () {
7195 return this.genrand_int32() * (1.0 / 4294967295.0);
7196 /* divided by 2^32-1 */
7197 };
7198
7199 /* generates a random number on [0,1)-real-interval */
7200 MersenneTwister.prototype.random = function () {
7201 return this.genrand_int32() * (1.0 / 4294967296.0);
7202 /* divided by 2^32 */
7203 };
7204
7205 /* generates a random number on (0,1)-real-interval */
7206 MersenneTwister.prototype.genrand_real3 = function () {
7207 return (this.genrand_int32() + 0.5) * (1.0 / 4294967296.0);
7208 /* divided by 2^32 */
7209 };
7210
7211 /* generates a random number on [0,1) with 53-bit resolution*/
7212 MersenneTwister.prototype.genrand_res53 = function () {
7213 var a = this.genrand_int32()>>>5, b = this.genrand_int32()>>>6;
7214 return (a * 67108864.0 + b) * (1.0 / 9007199254740992.0);
7215 };
7216
7217 // BlueImp MD5 hashing algorithm from https://github.com/blueimp/JavaScript-MD5
7218 var BlueImpMD5 = function () {};
7219
7220 BlueImpMD5.prototype.VERSION = '1.0.1';
7221
7222 /*
7223 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7224 * to work around bugs in some JS interpreters.
7225 */
7226 BlueImpMD5.prototype.safe_add = function safe_add(x, y) {
7227 var lsw = (x & 0xFFFF) + (y & 0xFFFF),
7228 msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7229 return (msw << 16) | (lsw & 0xFFFF);
7230 };
7231
7232 /*
7233 * Bitwise rotate a 32-bit number to the left.
7234 */
7235 BlueImpMD5.prototype.bit_roll = function (num, cnt) {
7236 return (num << cnt) | (num >>> (32 - cnt));
7237 };
7238
7239 /*
7240 * These functions implement the five basic operations the algorithm uses.
7241 */
7242 BlueImpMD5.prototype.md5_cmn = function (q, a, b, x, s, t) {
7243 return this.safe_add(this.bit_roll(this.safe_add(this.safe_add(a, q), this.safe_add(x, t)), s), b);
7244 };
7245 BlueImpMD5.prototype.md5_ff = function (a, b, c, d, x, s, t) {
7246 return this.md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7247 };
7248 BlueImpMD5.prototype.md5_gg = function (a, b, c, d, x, s, t) {
7249 return this.md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7250 };
7251 BlueImpMD5.prototype.md5_hh = function (a, b, c, d, x, s, t) {
7252 return this.md5_cmn(b ^ c ^ d, a, b, x, s, t);
7253 };
7254 BlueImpMD5.prototype.md5_ii = function (a, b, c, d, x, s, t) {
7255 return this.md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7256 };
7257
7258 /*
7259 * Calculate the MD5 of an array of little-endian words, and a bit length.
7260 */
7261 BlueImpMD5.prototype.binl_md5 = function (x, len) {
7262 /* append padding */
7263 x[len >> 5] |= 0x80 << (len % 32);
7264 x[(((len + 64) >>> 9) << 4) + 14] = len;
7265
7266 var i, olda, oldb, oldc, oldd,
7267 a = 1732584193,
7268 b = -271733879,
7269 c = -1732584194,
7270 d = 271733878;
7271
7272 for (i = 0; i < x.length; i += 16) {
7273 olda = a;
7274 oldb = b;
7275 oldc = c;
7276 oldd = d;
7277
7278 a = this.md5_ff(a, b, c, d, x[i], 7, -680876936);
7279 d = this.md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
7280 c = this.md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
7281 b = this.md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
7282 a = this.md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
7283 d = this.md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
7284 c = this.md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
7285 b = this.md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
7286 a = this.md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
7287 d = this.md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
7288 c = this.md5_ff(c, d, a, b, x[i + 10], 17, -42063);
7289 b = this.md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
7290 a = this.md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
7291 d = this.md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
7292 c = this.md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
7293 b = this.md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
7294
7295 a = this.md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
7296 d = this.md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
7297 c = this.md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
7298 b = this.md5_gg(b, c, d, a, x[i], 20, -373897302);
7299 a = this.md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
7300 d = this.md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
7301 c = this.md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
7302 b = this.md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
7303 a = this.md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
7304 d = this.md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
7305 c = this.md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
7306 b = this.md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
7307 a = this.md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
7308 d = this.md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
7309 c = this.md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
7310 b = this.md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
7311
7312 a = this.md5_hh(a, b, c, d, x[i + 5], 4, -378558);
7313 d = this.md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
7314 c = this.md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
7315 b = this.md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
7316 a = this.md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
7317 d = this.md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
7318 c = this.md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
7319 b = this.md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
7320 a = this.md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
7321 d = this.md5_hh(d, a, b, c, x[i], 11, -358537222);
7322 c = this.md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
7323 b = this.md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
7324 a = this.md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
7325 d = this.md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
7326 c = this.md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
7327 b = this.md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
7328
7329 a = this.md5_ii(a, b, c, d, x[i], 6, -198630844);
7330 d = this.md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
7331 c = this.md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
7332 b = this.md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
7333 a = this.md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
7334 d = this.md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
7335 c = this.md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
7336 b = this.md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
7337 a = this.md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
7338 d = this.md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
7339 c = this.md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
7340 b = this.md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
7341 a = this.md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
7342 d = this.md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
7343 c = this.md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
7344 b = this.md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
7345
7346 a = this.safe_add(a, olda);
7347 b = this.safe_add(b, oldb);
7348 c = this.safe_add(c, oldc);
7349 d = this.safe_add(d, oldd);
7350 }
7351 return [a, b, c, d];
7352 };
7353
7354 /*
7355 * Convert an array of little-endian words to a string
7356 */
7357 BlueImpMD5.prototype.binl2rstr = function (input) {
7358 var i,
7359 output = '';
7360 for (i = 0; i < input.length * 32; i += 8) {
7361 output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
7362 }
7363 return output;
7364 };
7365
7366 /*
7367 * Convert a raw string to an array of little-endian words
7368 * Characters >255 have their high-byte silently ignored.
7369 */
7370 BlueImpMD5.prototype.rstr2binl = function (input) {
7371 var i,
7372 output = [];
7373 output[(input.length >> 2) - 1] = undefined;
7374 for (i = 0; i < output.length; i += 1) {
7375 output[i] = 0;
7376 }
7377 for (i = 0; i < input.length * 8; i += 8) {
7378 output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
7379 }
7380 return output;
7381 };
7382
7383 /*
7384 * Calculate the MD5 of a raw string
7385 */
7386 BlueImpMD5.prototype.rstr_md5 = function (s) {
7387 return this.binl2rstr(this.binl_md5(this.rstr2binl(s), s.length * 8));
7388 };
7389
7390 /*
7391 * Calculate the HMAC-MD5, of a key and some data (raw strings)
7392 */
7393 BlueImpMD5.prototype.rstr_hmac_md5 = function (key, data) {
7394 var i,
7395 bkey = this.rstr2binl(key),
7396 ipad = [],
7397 opad = [],
7398 hash;
7399 ipad[15] = opad[15] = undefined;
7400 if (bkey.length > 16) {
7401 bkey = this.binl_md5(bkey, key.length * 8);
7402 }
7403 for (i = 0; i < 16; i += 1) {
7404 ipad[i] = bkey[i] ^ 0x36363636;
7405 opad[i] = bkey[i] ^ 0x5C5C5C5C;
7406 }
7407 hash = this.binl_md5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8);
7408 return this.binl2rstr(this.binl_md5(opad.concat(hash), 512 + 128));
7409 };
7410
7411 /*
7412 * Convert a raw string to a hex string
7413 */
7414 BlueImpMD5.prototype.rstr2hex = function (input) {
7415 var hex_tab = '0123456789abcdef',
7416 output = '',
7417 x,
7418 i;
7419 for (i = 0; i < input.length; i += 1) {
7420 x = input.charCodeAt(i);
7421 output += hex_tab.charAt((x >>> 4) & 0x0F) +
7422 hex_tab.charAt(x & 0x0F);
7423 }
7424 return output;
7425 };
7426
7427 /*
7428 * Encode a string as utf-8
7429 */
7430 BlueImpMD5.prototype.str2rstr_utf8 = function (input) {
7431 return unescape(encodeURIComponent(input));
7432 };
7433
7434 /*
7435 * Take string arguments and return either raw or hex encoded strings
7436 */
7437 BlueImpMD5.prototype.raw_md5 = function (s) {
7438 return this.rstr_md5(this.str2rstr_utf8(s));
7439 };
7440 BlueImpMD5.prototype.hex_md5 = function (s) {
7441 return this.rstr2hex(this.raw_md5(s));
7442 };
7443 BlueImpMD5.prototype.raw_hmac_md5 = function (k, d) {
7444 return this.rstr_hmac_md5(this.str2rstr_utf8(k), this.str2rstr_utf8(d));
7445 };
7446 BlueImpMD5.prototype.hex_hmac_md5 = function (k, d) {
7447 return this.rstr2hex(this.raw_hmac_md5(k, d));
7448 };
7449
7450 BlueImpMD5.prototype.md5 = function (string, key, raw) {
7451 if (!key) {
7452 if (!raw) {
7453 return this.hex_md5(string);
7454 }
7455
7456 return this.raw_md5(string);
7457 }
7458
7459 if (!raw) {
7460 return this.hex_hmac_md5(key, string);
7461 }
7462
7463 return this.raw_hmac_md5(key, string);
7464 };
7465
7466 // CommonJS module
7467 if (typeof exports !== 'undefined') {
7468 if (typeof module !== 'undefined' && module.exports) {
7469 exports = module.exports = Chance;
7470 }
7471 exports.Chance = Chance;
7472 }
7473
7474 // Register as an anonymous AMD module
7475 if (typeof define === 'function' && define.amd) {
7476 define([], function () {
7477 return Chance;
7478 });
7479 }
7480
7481 // if there is a importsScrips object define chance for worker
7482 // allows worker to use full Chance functionality with seed
7483 if (typeof importScripts !== 'undefined') {
7484 chance = new Chance();
7485 self.Chance = Chance;
7486 }
7487
7488 // If there is a window object, that at least has a document property,
7489 // instantiate and define chance on the window
7490 if (typeof window === "object" && typeof window.document === "object") {
7491 window.Chance = Chance;
7492 window.chance = new Chance();
7493 }
7494})();